From 96eb96dfb613e4c745db6bd1f53a92fe7e2290fc Mon Sep 17 00:00:00 2001 From: karlf Date: Thu, 11 Aug 2016 13:28:13 -0700 Subject: Updated for "Windows 10 Anniversary Update" (Version 1607) --- network/config/bindview/bindview.sln | 18 +- network/config/bindview/bindview.vcxproj | 4 +- network/config/bindview/bindview.vcxproj.Filters | 6 +- network/modem/fakemodem/fakemodem.sln | 18 +- network/modem/fakemodem/fakemodem.vcxproj | 4 +- network/modem/fakemodem/fakemodem.vcxproj.Filters | 8 +- network/modem/fakemodem/mdmfake.inx | Bin 11873 -> 24276 bytes network/ndis/extension/base/sxbase.vcxproj | 4 +- network/ndis/extension/base/sxbase.vcxproj.Filters | 8 +- network/ndis/extension/extensions.sln | 52 +- .../extension/samples/forward/msforwardext.vcxproj | 4 +- .../samples/forward/msforwardext.vcxproj.Filters | 8 +- .../samples/passthrough/mspassthroughext.vcxproj | 4 +- .../passthrough/mspassthroughext.vcxproj.Filters | 8 +- network/ndis/filter/filter.sln | 18 +- network/ndis/filter/ndislwf.vcxproj | 4 +- network/ndis/filter/ndislwf.vcxproj.Filters | 8 +- network/ndis/mux/driver/60/miniport.c | 4 +- network/ndis/mux/driver/60/novlan/mux.vcxproj | 4 +- .../ndis/mux/driver/60/novlan/mux.vcxproj.Filters | 8 +- network/ndis/mux/driver/60/vlan/muxvlan.vcxproj | 4 +- .../mux/driver/60/vlan/muxvlan.vcxproj.Filters | 8 +- network/ndis/mux/mux.sln | 76 +- network/ndis/mux/notifyob/mux.vcxproj | 4 +- network/ndis/mux/notifyob/mux.vcxproj.Filters | 6 +- network/ndis/ndisprot/6x/ndisprot60.sln | 72 +- network/ndis/ndisprot/6x/sys/60/ndisprot60.inf | Bin 2715 -> 5604 bytes network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj | 4 +- .../ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters | 8 +- network/ndis/ndisprot/6x/sys/630/ndisprot630.inf | Bin 3678 -> 7568 bytes .../ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj | 4 +- .../6x/sys/630/ndisprot630.vcxproj.Filters | 8 +- network/ndis/ndisprot/6x/sys/recv.c | 10 +- network/ndis/ndisprot/6x/sys/send.c | 4 +- network/ndis/ndisprot/6x/test/prottest.vcxproj | 4 +- .../ndis/ndisprot/6x/test/prottest.vcxproj.Filters | 6 +- network/ndis/ndisprot_kmdf/60/ndisprot.inx | Bin 4520 -> 9278 bytes network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj | 4 +- .../ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj.Filters | 8 +- network/ndis/ndisprot_kmdf/60/recv.c | 16 +- network/ndis/ndisprot_kmdf/60/send.c | 2 +- network/ndis/ndisprot_kmdf/Package/package.VcxProj | 8 +- .../ndisprot_kmdf/Package/package.VcxProj.Filters | 8 +- network/ndis/ndisprot_kmdf/ndisprot_kmdf.sln | 66 +- .../ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj | 4 +- .../notifyob/ProtNotify.vcxproj.Filters | 6 +- network/ndis/netvmini/6x/60/netvmini60.vcxproj | 4 +- .../ndis/netvmini/6x/60/netvmini60.vcxproj.Filters | 8 +- network/ndis/netvmini/6x/620/netvmini620.vcxproj | 4 +- .../netvmini/6x/620/netvmini620.vcxproj.Filters | 8 +- network/ndis/netvmini/6x/630/netvmini630.vcxproj | 4 +- .../netvmini/6x/630/netvmini630.vcxproj.Filters | 8 +- network/ndis/netvmini/6x/mphal.c | 2 +- network/ndis/netvmini/6x/netvmini.sln | 66 +- .../HidSwitchDriverSample.sln | 18 +- .../HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx | Bin 3582 -> 7394 bytes .../RadioSwitchHidUsbFx2.vcxproj | 4 +- .../RadioSwitchHidUsbFx2.vcxproj.Filters | 8 +- network/radio/HidSwitchDriverSample/driver.c | 2 +- network/radio/HidSwitchDriverSample/usb.c | 2 +- .../RadioManagerSample/RadioManagerSample.sln | 18 +- .../radio/RadioManagerSample/cpp/SampleRM.vcxproj | 4 +- .../cpp/SampleRM.vcxproj.Filters | 6 +- network/radio/RadioManagerSample/readme.txt | 192 - .../WFPSampler/syslib/HelperFunctions_Headers.cpp | 14 +- network/trans/ddproxy/ddproxy.sln | 18 +- network/trans/ddproxy/sys/ddproxy.vcxproj | 4 +- network/trans/ddproxy/sys/ddproxy.vcxproj.Filters | 8 +- network/trans/inspect/inspect.sln | 18 +- network/trans/inspect/sys/inspect.c | 48 +- network/trans/inspect/sys/inspect.vcxproj | 4 +- network/trans/inspect/sys/inspect.vcxproj.Filters | 8 +- network/trans/msnmntr/exe/monitor.vcxproj | 4 +- network/trans/msnmntr/exe/monitor.vcxproj.Filters | 6 +- network/trans/msnmntr/msnmntr.sln | 44 +- network/trans/msnmntr/sys/msnmntr.vcxproj | 4 +- network/trans/msnmntr/sys/msnmntr.vcxproj.Filters | 8 +- network/trans/stmedit/stmedit.sln | 25 +- network/trans/stmedit/sys/InlineEdit.c | 566 + network/trans/stmedit/sys/LwQueue.c | 170 + network/trans/stmedit/sys/LwQueue.h | 69 + network/trans/stmedit/sys/OobEdit.c | 1412 ++ network/trans/stmedit/sys/StreamEdit.c | 1633 +++ network/trans/stmedit/sys/StreamEdit.h | 558 + network/trans/stmedit/sys/Trace.h | 61 + network/trans/stmedit/sys/inline_edit.c | 546 - network/trans/stmedit/sys/inline_edit.h | 65 - network/trans/stmedit/sys/oob_edit.c | 1363 -- network/trans/stmedit/sys/oob_edit.h | 83 - network/trans/stmedit/sys/stmedit.inf | 16 +- network/trans/stmedit/sys/stmedit.vcxproj | 34 +- network/trans/stmedit/sys/stmedit.vcxproj.Filters | 39 +- network/trans/stmedit/sys/stream_callout.c | 772 -- network/trans/stmedit/sys/stream_callout.h | 79 - network/wlan/Native Wifi IHV Service/README.md | 91 - .../ihvfrm/arm/rc4utils.dll | Bin 36688 -> 0 bytes .../ihvfrm/arm/rc4utils.lib | Bin 2688 -> 0 bytes .../ihvfrm/arm64/rc4utils.dll | Bin 17744 -> 0 bytes .../ihvfrm/arm64/rc4utils.lib | Bin 2696 -> 0 bytes .../ihvfrm/x64/rc4utils.dll | Bin 12288 -> 0 bytes .../ihvfrm/x64/rc4utils.lib | Bin 2696 -> 0 bytes .../ihvfrm/x86/rc4utils.dll | Bin 10240 -> 0 bytes .../ihvfrm/x86/rc4utils.lib | Bin 2772 -> 0 bytes .../Native Wifi IHV Service/ihvsample/adapters.cpp | 439 - .../Native Wifi IHV Service/ihvsample/adapters.h | 125 - .../Native Wifi IHV Service/ihvsample/ihv1xext.xml | 52 - .../Native Wifi IHV Service/ihvsample/ihvconn.xml | 48 - .../ihvsample/ihvmachine.xml | 62 - .../ihvsample/ihvonexext.cpp | 1113 -- .../Native Wifi IHV Service/ihvsample/ihvonexext.h | 108 - .../ihvsample/ihvplapmachineoruser.xml | 64 - .../ihvsample/ihvplapuser.xml | 64 - .../ihvsample/ihvsample.cpp | 1554 --- .../ihvsample/ihvsample.def | 8 - .../Native Wifi IHV Service/ihvsample/ihvsample.h | 261 - .../ihvsample/ihvsample.vcxproj | 257 - .../ihvsample/ihvsample.vcxproj.Filters | 43 - .../ihvsample/ihvtimelymachineoruser.xml | 64 - .../ihvsample/ihvtimelyuser.xml | 63 - .../Native Wifi IHV Service/ihvsample/ihvwep.cpp | 837 -- .../Native Wifi IHV Service/ihvsample/ihvwep.h | 62 - .../Native Wifi IHV Service/ihvsample/ihvwep1.xml | 54 - .../Native Wifi IHV Service/ihvsample/ihvwep2.xml | 54 - .../Native Wifi IHV Service/ihvsample/precomp.h | 36 - .../Native Wifi IHV Service/ihvsample/precompsrc.c | 1 - .../Native Wifi IHV Service/ihvsample/profile.cpp | 1222 -- .../Native Wifi IHV Service/ihvsample/profile.h | 108 - .../Native Wifi IHV Service/ihvsample/rc4utils.h | 67 - .../Native Wifi IHV Service/ihvsample/utils.cpp | 662 - .../wlan/Native Wifi IHV Service/ihvsample/utils.h | 318 - .../ihvsampleui/IHVClassFactory.cpp | 166 - .../ihvsampleui/IHVClassFactory.h | 28 - .../ihvsampleui/IHVRegistryHelper.cpp | 284 - .../ihvsampleui/IHVRegistryHelper.h | 40 - .../ihvsampleui/IHVSample.idl | 71 - .../ihvsampleui/IHVSampleExtUI.cpp | 971 -- .../ihvsampleui/IHVSampleExtUI.h | 238 - .../ihvsampleui/IHVSampleExtUICon.cpp | 345 - .../ihvsampleui/IHVSampleExtUICon.h | 103 - .../ihvsampleui/IHVSampleExtUIKey.cpp | 462 - .../ihvsampleui/IHVSampleExtUIKey.h | 104 - .../ihvsampleui/IHVSampleExtUISec.cpp | 434 - .../ihvsampleui/IHVSampleExtUISec.h | 105 - .../ihvsampleui/IHVSampleProfile.cpp | 918 -- .../ihvsampleui/IHVSampleProfile.h | 296 - .../ihvsampleui/IHVSampleUI.cpp | 122 - .../ihvsampleui/IHVSampleUI.def | 7 - .../ihvsampleui/IHVSampleUI.rc | 129 - .../ihvsampleui/IHVSampleUI.vcxproj | 257 - .../ihvsampleui/IHVSampleUI.vcxproj.Filters | 60 - .../ihvsampleui/IHVUIInc.idl | 1 - .../Native Wifi IHV Service/ihvsampleui/iunk.h | 54 - .../Native Wifi IHV Service/ihvsampleui/precomp.h | 43 - .../Native Wifi IHV Service/ihvsampleui/resource.h | 31 - .../Native Wifi IHV Service/ihvsampleui/utils.cpp | 408 - .../Native Wifi IHV Service/ihvsampleui/utils.h | 98 - network/wlan/Native Wifi IHV Service/wlan.sln | 46 - network/wlan/WDI/COMMON/1x_eapol.h | 120 - network/wlan/WDI/COMMON/1x_kmsm_eapolkey.h | 612 - network/wlan/WDI/COMMON/1x_md5c.h | 57 - network/wlan/WDI/COMMON/1x_rc4.h | 89 - network/wlan/WDI/COMMON/AES_OCB.h | 150 - network/wlan/WDI/COMMON/AES_rijndael.h | 43 - network/wlan/WDI/COMMON/AMSDU_Aggregation.h | 74 - network/wlan/WDI/COMMON/ActionTimer.h | 168 - network/wlan/WDI/COMMON/ApEngine.c | 5175 ------- network/wlan/WDI/COMMON/ApEngine.h | 395 - network/wlan/WDI/COMMON/Authenticator.c | 1323 -- network/wlan/WDI/COMMON/Authenticator.h | 155 - network/wlan/WDI/COMMON/BAGen.c | 943 -- network/wlan/WDI/COMMON/BAGen.h | 73 - network/wlan/WDI/COMMON/BssCoexistence.c | 331 - network/wlan/WDI/COMMON/CcxGen.h | 710 - network/wlan/WDI/COMMON/ChannelInfo.c | 833 -- network/wlan/WDI/COMMON/ChannelInfo.h | 128 - network/wlan/WDI/COMMON/CustomizedScan.c | 2429 ---- network/wlan/WDI/COMMON/CustomizedScan.h | 319 - network/wlan/WDI/COMMON/DFS.c | 1176 -- network/wlan/WDI/COMMON/DFS.h | 249 - network/wlan/WDI/COMMON/DbgCmd.h | 306 - network/wlan/WDI/COMMON/DbgMon.h | 271 - network/wlan/WDI/COMMON/Debug.c | 455 - network/wlan/WDI/COMMON/Debug.h | 672 - network/wlan/WDI/COMMON/Defrag.c | 375 - network/wlan/WDI/COMMON/Defrag.h | 104 - network/wlan/WDI/COMMON/Dot11RAES.h | 46 - network/wlan/WDI/COMMON/Dot11d.c | 1881 --- network/wlan/WDI/COMMON/Dot11d.h | 332 - network/wlan/WDI/COMMON/DriverInterface.c | 631 - network/wlan/WDI/COMMON/DrvLog.h | 46 - network/wlan/WDI/COMMON/DrvLogImp.c | 253 - network/wlan/WDI/COMMON/DrvLogImp.h | 130 - network/wlan/WDI/COMMON/Frame_Buf.c | 373 - network/wlan/WDI/COMMON/Frame_Buf.h | 183 - network/wlan/WDI/COMMON/GeneralFunc.c | 356 - network/wlan/WDI/COMMON/GeneralFunc.h | 166 - network/wlan/WDI/COMMON/HTGen.c | 1730 --- network/wlan/WDI/COMMON/HTGen.h | 306 - network/wlan/WDI/COMMON/HashTable.c | 405 - network/wlan/WDI/COMMON/Hotspot20.c | 134 - network/wlan/WDI/COMMON/Hotspot20.h | 34 - network/wlan/WDI/COMMON/IOTGen.h | 70 - network/wlan/WDI/COMMON/MgntActQueryParam.c | 1578 --- network/wlan/WDI/COMMON/MgntActQueryParam.h | 274 - network/wlan/WDI/COMMON/MgntActSetParam.c | 4704 ------- network/wlan/WDI/COMMON/MgntActSetParam.h | 602 - network/wlan/WDI/COMMON/MgntConstructPacket.c | 4096 ------ network/wlan/WDI/COMMON/MgntConstructPacket.h | 353 - network/wlan/WDI/COMMON/MgntEngine.c | 2480 ---- network/wlan/WDI/COMMON/MgntEngine.h | 82 - network/wlan/WDI/COMMON/MgntGen.c | 4038 ------ network/wlan/WDI/COMMON/MgntGen.h | 497 - network/wlan/WDI/COMMON/MgntLink.c | 11782 ---------------- network/wlan/WDI/COMMON/MgntLink.h | 873 -- network/wlan/WDI/COMMON/MgntSendPacket.c | 1628 --- network/wlan/WDI/COMMON/MgntSendPacket.h | 234 - network/wlan/WDI/COMMON/MimoPs.c | 197 - network/wlan/WDI/COMMON/MimoPs.h | 24 - network/wlan/WDI/COMMON/Mp_Precomp.h | 2 - network/wlan/WDI/COMMON/MultiChannels.h | 438 - network/wlan/WDI/COMMON/MultiPorts.c | 1236 -- network/wlan/WDI/COMMON/MultiPorts.h | 273 - network/wlan/WDI/COMMON/OffChnlTx.h | 178 - network/wlan/WDI/COMMON/P2P.c | 13380 ------------------- network/wlan/WDI/COMMON/P2P.h | 2443 ---- network/wlan/WDI/COMMON/P2PSvc.c | 1493 --- network/wlan/WDI/COMMON/P2PSvc.h | 253 - network/wlan/WDI/COMMON/P2PSvcType.h | 245 - network/wlan/WDI/COMMON/P2PSvc_ActionInfo.c | 523 - network/wlan/WDI/COMMON/P2PSvc_Construct.c | 992 -- network/wlan/WDI/COMMON/P2PSvc_Internal.h | 980 -- network/wlan/WDI/COMMON/P2PSvc_Object.c | 691 - network/wlan/WDI/COMMON/P2PSvc_PD.c | 2821 ---- network/wlan/WDI/COMMON/P2PSvc_ParamSpec.c | 502 - network/wlan/WDI/COMMON/P2PSvc_SD.c | 379 - network/wlan/WDI/COMMON/P2PSvc_SearchResult.c | 669 - network/wlan/WDI/COMMON/P2PSvc_Utility.c | 379 - network/wlan/WDI/COMMON/P2P_AdditionalIe.c | 131 - network/wlan/WDI/COMMON/P2P_AdditionalIe.h | 66 - network/wlan/WDI/COMMON/P2P_Attribute.c | 660 - network/wlan/WDI/COMMON/P2P_Attribute.h | 170 - network/wlan/WDI/COMMON/P2P_Build.c | 175 - network/wlan/WDI/COMMON/P2P_Build_Action.c | 417 - network/wlan/WDI/COMMON/P2P_Build_Mgnt.c | 675 - network/wlan/WDI/COMMON/P2P_Build_PublicAction.c | 1060 -- network/wlan/WDI/COMMON/P2P_Channel.c | 252 - network/wlan/WDI/COMMON/P2P_Channel.h | 41 - network/wlan/WDI/COMMON/P2P_DevList.c | 1283 -- network/wlan/WDI/COMMON/P2P_DevList.h | 135 - network/wlan/WDI/COMMON/P2P_Indication.c | 310 - network/wlan/WDI/COMMON/P2P_Indication.h | 58 - network/wlan/WDI/COMMON/P2P_Internal.h | 571 - network/wlan/WDI/COMMON/P2P_Parse.c | 1775 --- network/wlan/WDI/COMMON/P2P_ProtocolSpec.h | 125 - network/wlan/WDI/COMMON/P2P_Public.h | 156 - network/wlan/WDI/COMMON/P2P_Receive.c | 744 -- network/wlan/WDI/COMMON/P2P_SendAction.c | 898 -- network/wlan/WDI/COMMON/P2P_SendMgnt.c | 58 - network/wlan/WDI/COMMON/P2P_Synch.c | 51 - network/wlan/WDI/COMMON/P2P_Synch.h | 39 - network/wlan/WDI/COMMON/P2P_TempPublic.h | 305 - network/wlan/WDI/COMMON/P2P_Util.c | 219 - network/wlan/WDI/COMMON/ParserGen.c | 2292 ---- network/wlan/WDI/COMMON/ParserGen.h | 540 - network/wlan/WDI/COMMON/PowerSave.h | 322 - network/wlan/WDI/COMMON/Protocol802_11.c | 1638 --- network/wlan/WDI/COMMON/Protocol802_11.h | 1069 -- network/wlan/WDI/COMMON/QosGen.c | 2359 ---- network/wlan/WDI/COMMON/QosGen.h | 391 - network/wlan/WDI/COMMON/RC4.h | 49 - network/wlan/WDI/COMMON/ROGUEAP.h | 89 - network/wlan/WDI/COMMON/RadioMeasurement.h | 145 - network/wlan/WDI/COMMON/Receive.c | 2658 ---- network/wlan/WDI/COMMON/Receive.h | 352 - network/wlan/WDI/COMMON/RxReorder.c | 497 - network/wlan/WDI/COMMON/RxReorder.h | 64 - network/wlan/WDI/COMMON/SMBios.h | 128 - network/wlan/WDI/COMMON/SecurityGen.c | 6062 --------- network/wlan/WDI/COMMON/SecurityGen.h | 1052 -- network/wlan/WDI/COMMON/Supplicant.h | 6 - network/wlan/WDI/COMMON/TCPOFFLOADGen.h | 41 - network/wlan/WDI/COMMON/TCPOFFLOAD_Typt.h | 157 - network/wlan/WDI/COMMON/TDLSGen.h | 370 - network/wlan/WDI/COMMON/TSGen.c | 735 - network/wlan/WDI/COMMON/TSGen.h | 59 - network/wlan/WDI/COMMON/TcpCheck.h | 80 - network/wlan/WDI/COMMON/Transmit.c | 3800 ------ network/wlan/WDI/COMMON/Transmit.h | 267 - network/wlan/WDI/COMMON/TransmitDesc.c | 1277 -- network/wlan/WDI/COMMON/TransmitDesc.h | 99 - network/wlan/WDI/COMMON/UsbModeSwitch.h | 181 - network/wlan/WDI/COMMON/VHTGen.c | 1302 -- network/wlan/WDI/COMMON/VHTGen.h | 337 - network/wlan/WDI/COMMON/WOLPattern.c | 913 -- network/wlan/WDI/COMMON/WOLPattern.h | 95 - network/wlan/WDI/COMMON/WPS.c | 442 - network/wlan/WDI/COMMON/WPS.h | 159 - network/wlan/WDI/COMMON/WPS_Def.h | 124 - network/wlan/WDI/COMMON/Wapi.h | 478 - network/wlan/WDI/COMMON/Widi.h | 236 - network/wlan/WDI/COMMON/common.vcxproj | 523 - network/wlan/WDI/COMMON/pool.c | 191 - network/wlan/WDI/COMMON/pool.h | 64 - network/wlan/WDI/COMMON/sha256.h | 32 - network/wlan/WDI/COMMON/sources.props | 18 - network/wlan/WDI/COMMON/sources.sample.list | 72 - network/wlan/WDI/COMMON/sources.tpl.sample | 22 - network/wlan/WDI/COMMON/sources.tpl.win | 24 - network/wlan/WDI/HAL/DIRS.WlanS | 3 - network/wlan/WDI/HAL/HAL.mk | 143 - network/wlan/WDI/HAL/HALSOURCE/Mp_Precomp.h | 2 - network/wlan/WDI/HAL/HALSOURCE/hal.vcxproj | 274 - network/wlan/WDI/HAL/HalADCSampling.h | 105 - network/wlan/WDI/HAL/HalCam.h | 169 - network/wlan/WDI/HAL/HalComDef.h | 575 - network/wlan/WDI/HAL/HalComDesc.h | 445 - network/wlan/WDI/HAL/HalComFirmware.h | 465 - network/wlan/WDI/HAL/HalComLed.h | 284 - network/wlan/WDI/HAL/HalComPhyCfg.h | 341 - network/wlan/WDI/HAL/HalComReg.h | 1705 --- network/wlan/WDI/HAL/HalComTxPwrCfg.h | 119 - network/wlan/WDI/HAL/HalComTxPwrLmtCfg.h | 33 - network/wlan/WDI/HAL/HalDM.h | 123 - network/wlan/WDI/HAL/HalEEPROM.h | 97 - network/wlan/WDI/HAL/HalEfuse.h | 461 - network/wlan/WDI/HAL/HalFw.h | 105 - network/wlan/WDI/HAL/HalH2cIOCmd.h | 372 - network/wlan/WDI/HAL/HalIcGlue.h | 1110 -- network/wlan/WDI/HAL/HalJaguarPhyReg.h | 399 - network/wlan/WDI/HAL/HalMacID.h | 199 - network/wlan/WDI/HAL/HalPG.h | 809 -- network/wlan/WDI/HAL/HalPhy.h | 349 - network/wlan/WDI/HAL/HalPowerSave.h | 138 - network/wlan/WDI/HAL/HalPwrSeqCmd.h | 118 - network/wlan/WDI/HAL/HalSIC.h | 122 - network/wlan/WDI/HAL/HalSdio.h | 1107 -- network/wlan/WDI/HAL/HalTxFeedback.h | 189 - network/wlan/WDI/HAL/HalWoWLAN.h | 46 - network/wlan/WDI/HAL/halCmdPkt.h | 375 - network/wlan/WDI/HAL/halDbgCmd.h | 331 - network/wlan/WDI/HAL/phydm/FileEnc.exe | Bin 31275 -> 0 bytes network/wlan/WDI/HAL/phydm/development_note.txt | 1667 --- .../wlan/WDI/HAL/phydm/development_note2012.txt | 5272 -------- network/wlan/WDI/HAL/phydm/halhwimg.h | 123 - network/wlan/WDI/HAL/phydm/halphyrf_ap.h | 153 - network/wlan/WDI/HAL/phydm/halphyrf_ce.h | 95 - network/wlan/WDI/HAL/phydm/halphyrf_win.h | 98 - network/wlan/WDI/HAL/phydm/mp_precomp.h | 20 - network/wlan/WDI/HAL/phydm/phydm.h | 1438 -- network/wlan/WDI/HAL/phydm/phydm_acs.h | 129 - network/wlan/WDI/HAL/phydm/phydm_adaptivity.h | 196 - network/wlan/WDI/HAL/phydm/phydm_antdect.h | 98 - network/wlan/WDI/HAL/phydm/phydm_antdiv.h | 628 - network/wlan/WDI/HAL/phydm/phydm_beamforming.h | 376 - network/wlan/WDI/HAL/phydm/phydm_cfotracking.h | 68 - network/wlan/WDI/HAL/phydm/phydm_debug.h | 331 - network/wlan/WDI/HAL/phydm/phydm_dig.h | 329 - .../WDI/HAL/phydm/phydm_dynamicbbpowersaving.h | 63 - network/wlan/WDI/HAL/phydm/phydm_dynamictxpower.h | 98 - network/wlan/WDI/HAL/phydm/phydm_edcaturbocheck.h | 100 - network/wlan/WDI/HAL/phydm/phydm_hwconfig.h | 517 - network/wlan/WDI/HAL/phydm/phydm_interface.h | 434 - network/wlan/WDI/HAL/phydm/phydm_noisemonitor.h | 49 - network/wlan/WDI/HAL/phydm/phydm_pathdiv.h | 324 - .../wlan/WDI/HAL/phydm/phydm_powertracking_ap.h | 313 - .../wlan/WDI/HAL/phydm/phydm_powertracking_ce.h | 298 - .../wlan/WDI/HAL/phydm/phydm_powertracking_win.h | 272 - network/wlan/WDI/HAL/phydm/phydm_pre_define.h | 617 - network/wlan/WDI/HAL/phydm/phydm_precomp.h | 335 - network/wlan/WDI/HAL/phydm/phydm_rainfo.h | 443 - network/wlan/WDI/HAL/phydm/phydm_reg.h | 208 - network/wlan/WDI/HAL/phydm/phydm_regdefine11ac.h | 90 - network/wlan/WDI/HAL/phydm/phydm_regdefine11n.h | 199 - network/wlan/WDI/HAL/phydm/phydm_rxhp.h | 105 - network/wlan/WDI/HAL/phydm/phydm_types.h | 314 - network/wlan/WDI/HAL/phydm/rtchnlplan.h | 699 - network/wlan/WDI/HAL/phydm/rtl8723b/hal8723breg.h | 861 -- .../wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_bb.h | 59 - .../wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_fw.h | 62 - .../WDI/HAL/phydm/rtl8723b/halhwimg8723b_mac.h | 39 - .../wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mp.h | 45 - .../wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_rf.h | 89 - .../WDI/HAL/phydm/rtl8723b/halphyrf_8723b_ce.h | 134 - .../WDI/HAL/phydm/rtl8723b/halphyrf_8723b_win.h | 131 - network/wlan/WDI/HAL/phydm/rtl8723b/mp_precomp.h | 24 - .../WDI/HAL/phydm/rtl8723b/phydm_regconfig8723b.h | 96 - .../wlan/WDI/HAL/phydm/rtl8723b/phydm_rtl8723b.h | 29 - .../wlan/WDI/HAL/phydm/rtl8723b/version_rtl8723b.h | 5 - network/wlan/WDI/HAL/rtl8723B/Hal8723BDefCom.h | 212 - network/wlan/WDI/HAL/rtl8723B/Hal8723BDesc.h | 286 - network/wlan/WDI/HAL/rtl8723B/Hal8723BEfuse.h | 221 - network/wlan/WDI/HAL/rtl8723B/Hal8723BFirmware.h | 465 - network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyCfg.h | 301 - network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyReg.h | 983 -- network/wlan/WDI/HAL/rtl8723B/Hal8723BPwrSeq.h | 183 - network/wlan/WDI/HAL/rtl8723B/Hal8723BRf.h | 54 - .../WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioDef.h | 426 - .../WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioLed.h | 41 - network/wlan/WDI/HAL/sources.list.WlanS | 178 - network/wlan/WDI/HAL/sources.tpl.WlanS.props | 24 - network/wlan/WDI/HAL/sources.tpl.WlanS.win | 28 - network/wlan/WDI/HEADER/BAType.h | 120 - network/wlan/WDI/HEADER/BssCoexistence.h | 60 - network/wlan/WDI/HEADER/CcxType.h | 628 - network/wlan/WDI/HEADER/ChannelType.h | 85 - network/wlan/WDI/HEADER/CustomOid.h | 890 -- network/wlan/WDI/HEADER/DriverInterfaceDef.h | 298 - network/wlan/WDI/HEADER/EndianFree.h | 229 - network/wlan/WDI/HEADER/Ethernet.h | 26 - network/wlan/WDI/HEADER/GeneralDef.h | 159 - network/wlan/WDI/HEADER/HTType.h | 410 - network/wlan/WDI/HEADER/HalDef.h | 3076 ----- network/wlan/WDI/HEADER/HashTable.h | 128 - network/wlan/WDI/HEADER/LinkList.h | 252 - network/wlan/WDI/HEADER/MAType.h | 87 - network/wlan/WDI/HEADER/Object.h | 43 - network/wlan/WDI/HEADER/PlatformDef.h | 1273 -- network/wlan/WDI/HEADER/PlatformSdio.h | 127 - network/wlan/WDI/HEADER/Precomp.h | 74 - network/wlan/WDI/HEADER/Precomp.h.WlanS.sample | 72 - network/wlan/WDI/HEADER/PrecompInc_sample.h | 358 - network/wlan/WDI/HEADER/QoSType.h | 691 - network/wlan/WDI/HEADER/RegCommon.h | 867 -- network/wlan/WDI/HEADER/RmDef.h | 619 - network/wlan/WDI/HEADER/SecurityType.h | 782 -- network/wlan/WDI/HEADER/StatusCode.h | 32 - network/wlan/WDI/HEADER/TDLSType.h | 489 - network/wlan/WDI/HEADER/TSType.h | 54 - network/wlan/WDI/HEADER/TypeDef.h | 4465 ------- network/wlan/WDI/HEADER/WiDiType.h | 289 - network/wlan/WDI/HEADER/WlanDriverEvents.h | 811 -- network/wlan/WDI/HEADER/platform-os-version.h | 2 - network/wlan/WDI/HEADER/rtwlanwpp.h | 20 - network/wlan/WDI/LIB/Arm/hal.lib | Bin 5935768 -> 0 bytes network/wlan/WDI/LIB/Arm/rtklibcom.lib | Bin 3149800 -> 0 bytes network/wlan/WDI/LIB/x64/hal.lib | Bin 3480958 -> 0 bytes network/wlan/WDI/LIB/x64/rtklibcom.lib | Bin 1772610 -> 0 bytes network/wlan/WDI/LIB/x86/hal.lib | Bin 3481260 -> 0 bytes network/wlan/WDI/LIB/x86/rtklibcom.lib | Bin 1773422 -> 0 bytes network/wlan/WDI/PLATFORM/DIRS.NDIS6 | 4 - network/wlan/WDI/PLATFORM/NDIS6/802_11_OID.h | 8 - network/wlan/WDI/PLATFORM/NDIS6/CCX_Extension.h | 75 - network/wlan/WDI/PLATFORM/NDIS6/CCX_Predef.h | 1183 -- network/wlan/WDI/PLATFORM/NDIS6/DIRS.SDIO | 2 - network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.c | 991 -- network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.h | 134 - network/wlan/WDI/PLATFORM/NDIS6/N62C_AP_Def.h | 644 - network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.c | 1148 -- network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.h | 152 - network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.c | 2999 ----- network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.h | 159 - network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.c | 1473 -- network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.h | 945 -- network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.c | 858 -- network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.h | 165 - network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.c | 164 - network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.h | 49 - network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.c | 1245 -- network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.h | 168 - network/wlan/WDI/PLATFORM/NDIS6/N62C_def.h | 241 - network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.c | 7007 ---------- network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.h | 235 - network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.c | 1335 -- network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.h | 121 - network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.c | 1647 --- network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.h | 136 - network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.c | 2929 ---- network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.h | 484 - network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.c | 4702 ------- network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.h | 436 - network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.c | 2199 --- network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.h | 195 - network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.c | 2338 ---- network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.h | 179 - network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.c | 10481 --------------- network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.h | 151 - network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.c | 6119 --------- network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.h | 2040 --- network/wlan/WDI/PLATFORM/NDIS6/Ndis_OID.h | 29 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/CppDrvReg.h | 56 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Precomp.h | 8 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Req.c | 542 - .../PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.c | 3285 ----- .../PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.h | 244 - .../wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_DrvIF.c | 1698 --- .../PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.c | 448 - .../PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.h | 82 - .../PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.c | 1546 --- .../PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.h | 62 - .../wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.c | 3860 ------ .../wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.h | 98 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.c | 13 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.h | 24 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_info.h | 14 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.c | 6681 --------- network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.h | 404 - .../WDI/PLATFORM/NDIS6/SDIO/N6Sdio_mechanism.c | 5 - .../wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_typedef.h | 544 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/n60_sdio.inc | 13 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/n62_sdio.inc | 13 - .../WDI/PLATFORM/NDIS6/SDIO/n6c_sdio.inc.props | 30 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlans.rc | 48 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlansmp.rc | 48 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/sdio.vcxproj | 751 -- .../wlan/WDI/PLATFORM/NDIS6/SDIO/sources.lib.list | 14 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.list | 39 - network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.props | 57 - .../wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.props | 26 - .../wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.win | 31 - network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.c | 5744 -------- network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.h | 422 - network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.c | 2843 ---- network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.h | 320 - network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.c | 2089 --- network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.h | 119 - network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.c | 1632 --- network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.h | 123 - network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.c | 1444 -- network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.h | 184 - network/wlan/WDI/PLATFORM/NDIS6/WDI_def.h | 253 - network/wlan/WDI/PLATFORM/NDIS6/new.cpp | 69 - network/wlan/WDI/PLATFORM/NdisComm/Mp_Precomp.h | 2 - network/wlan/WDI/PLATFORM/NdisComm/NdisComm.c | 2519 ---- network/wlan/WDI/PLATFORM/NdisComm/NdisComm.h | 284 - .../wlan/WDI/PLATFORM/NdisComm/NdisComm.vcxproj | 612 - network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.c | 1691 --- network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.h | 434 - network/wlan/WDI/PLATFORM/NdisComm/NdisOid.c | 323 - network/wlan/WDI/PLATFORM/NdisComm/NdisOid.h | 75 - network/wlan/WDI/PLATFORM/NdisComm/makefile.Win | 6 - network/wlan/WDI/PLATFORM/NdisComm/sources.list | 13 - network/wlan/WDI/PLATFORM/NdisComm/sources.props | 23 - .../wlan/WDI/PLATFORM/NdisComm/sources.tpl.props | 25 - network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.win | 29 - .../WDI/PLATFORM/WinInf/SDIO/InfSupportFeature.ini | 0 .../wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportIC.ini | 15 - .../wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportOS.ini | 14 - .../WDI/PLATFORM/WinInf/SDIO/arm/netrtwlans.inf | 1259 -- .../wlan/WDI/PLATFORM/WinInf/SDIO/netrtwlans.inf | 2711 ---- .../WDI/PLATFORM/WinInf/SDIO/x64/netrtwlans.inf | 1259 -- .../WDI/PLATFORM/WinInf/SDIO/x86/netrtwlans.inf | 1259 -- network/wlan/WDI/PLATFORM/svn_version.h | 4 - network/wlan/WDI/PLATFORM/svn_version.tmpl | 4 - network/wlan/WDI/windows.msbuild.rtwssample.sln | 84 - network/wlan/ihvsampleui/IHVClassFactory.cpp | 166 + network/wlan/ihvsampleui/IHVClassFactory.h | 28 + network/wlan/ihvsampleui/IHVRegistryHelper.cpp | 284 + network/wlan/ihvsampleui/IHVRegistryHelper.h | 40 + network/wlan/ihvsampleui/IHVSample.idl | 71 + network/wlan/ihvsampleui/IHVSampleExtUI.cpp | 971 ++ network/wlan/ihvsampleui/IHVSampleExtUI.h | 238 + network/wlan/ihvsampleui/IHVSampleExtUICon.cpp | 345 + network/wlan/ihvsampleui/IHVSampleExtUICon.h | 103 + network/wlan/ihvsampleui/IHVSampleExtUIKey.cpp | 462 + network/wlan/ihvsampleui/IHVSampleExtUIKey.h | 104 + network/wlan/ihvsampleui/IHVSampleExtUISec.cpp | 434 + network/wlan/ihvsampleui/IHVSampleExtUISec.h | 105 + network/wlan/ihvsampleui/IHVSampleProfile.cpp | 918 ++ network/wlan/ihvsampleui/IHVSampleProfile.h | 296 + network/wlan/ihvsampleui/IHVSampleUI.cpp | 122 + network/wlan/ihvsampleui/IHVSampleUI.def | 7 + network/wlan/ihvsampleui/IHVSampleUI.rc | 129 + network/wlan/ihvsampleui/IHVSampleUI.vcxproj | 257 + .../wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters | 60 + network/wlan/ihvsampleui/IHVUIInc.idl | 1 + network/wlan/ihvsampleui/iunk.h | 54 + network/wlan/ihvsampleui/precomp.h | 44 + network/wlan/ihvsampleui/resource.h | 31 + network/wlan/ihvsampleui/utils.cpp | 408 + network/wlan/ihvsampleui/utils.h | 98 + network/wsk/echosrv/echosrv.sln | 18 +- network/wsk/echosrv/echosrv.vcxproj | 4 +- network/wsk/echosrv/echosrv.vcxproj.Filters | 8 +- 573 files changed, 10799 insertions(+), 299794 deletions(-) delete mode 100644 network/radio/RadioManagerSample/readme.txt create mode 100644 network/trans/stmedit/sys/InlineEdit.c create mode 100644 network/trans/stmedit/sys/LwQueue.c create mode 100644 network/trans/stmedit/sys/LwQueue.h create mode 100644 network/trans/stmedit/sys/OobEdit.c create mode 100644 network/trans/stmedit/sys/StreamEdit.c create mode 100644 network/trans/stmedit/sys/StreamEdit.h create mode 100644 network/trans/stmedit/sys/Trace.h delete mode 100644 network/trans/stmedit/sys/inline_edit.c delete mode 100644 network/trans/stmedit/sys/inline_edit.h delete mode 100644 network/trans/stmedit/sys/oob_edit.c delete mode 100644 network/trans/stmedit/sys/oob_edit.h delete mode 100644 network/trans/stmedit/sys/stream_callout.c delete mode 100644 network/trans/stmedit/sys/stream_callout.h delete mode 100644 network/wlan/Native Wifi IHV Service/README.md delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.dll delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.lib delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.dll delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.lib delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.dll delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.lib delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.dll delete mode 100644 network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.lib delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/adapters.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/adapters.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihv1xext.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvconn.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvmachine.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvplapmachineoruser.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvplapuser.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.def delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj.Filters delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelymachineoruser.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelyuser.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvwep1.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/ihvwep2.xml delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/precomp.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/precompsrc.c delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/profile.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/profile.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/rc4utils.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/utils.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsample/utils.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSample.idl delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.def delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.rc delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj.Filters delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/IHVUIInc.idl delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/iunk.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/precomp.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/resource.h delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/utils.cpp delete mode 100644 network/wlan/Native Wifi IHV Service/ihvsampleui/utils.h delete mode 100644 network/wlan/Native Wifi IHV Service/wlan.sln delete mode 100644 network/wlan/WDI/COMMON/1x_eapol.h delete mode 100644 network/wlan/WDI/COMMON/1x_kmsm_eapolkey.h delete mode 100644 network/wlan/WDI/COMMON/1x_md5c.h delete mode 100644 network/wlan/WDI/COMMON/1x_rc4.h delete mode 100644 network/wlan/WDI/COMMON/AES_OCB.h delete mode 100644 network/wlan/WDI/COMMON/AES_rijndael.h delete mode 100644 network/wlan/WDI/COMMON/AMSDU_Aggregation.h delete mode 100644 network/wlan/WDI/COMMON/ActionTimer.h delete mode 100644 network/wlan/WDI/COMMON/ApEngine.c delete mode 100644 network/wlan/WDI/COMMON/ApEngine.h delete mode 100644 network/wlan/WDI/COMMON/Authenticator.c delete mode 100644 network/wlan/WDI/COMMON/Authenticator.h delete mode 100644 network/wlan/WDI/COMMON/BAGen.c delete mode 100644 network/wlan/WDI/COMMON/BAGen.h delete mode 100644 network/wlan/WDI/COMMON/BssCoexistence.c delete mode 100644 network/wlan/WDI/COMMON/CcxGen.h delete mode 100644 network/wlan/WDI/COMMON/ChannelInfo.c delete mode 100644 network/wlan/WDI/COMMON/ChannelInfo.h delete mode 100644 network/wlan/WDI/COMMON/CustomizedScan.c delete mode 100644 network/wlan/WDI/COMMON/CustomizedScan.h delete mode 100644 network/wlan/WDI/COMMON/DFS.c delete mode 100644 network/wlan/WDI/COMMON/DFS.h delete mode 100644 network/wlan/WDI/COMMON/DbgCmd.h delete mode 100644 network/wlan/WDI/COMMON/DbgMon.h delete mode 100644 network/wlan/WDI/COMMON/Debug.c delete mode 100644 network/wlan/WDI/COMMON/Debug.h delete mode 100644 network/wlan/WDI/COMMON/Defrag.c delete mode 100644 network/wlan/WDI/COMMON/Defrag.h delete mode 100644 network/wlan/WDI/COMMON/Dot11RAES.h delete mode 100644 network/wlan/WDI/COMMON/Dot11d.c delete mode 100644 network/wlan/WDI/COMMON/Dot11d.h delete mode 100644 network/wlan/WDI/COMMON/DriverInterface.c delete mode 100644 network/wlan/WDI/COMMON/DrvLog.h delete mode 100644 network/wlan/WDI/COMMON/DrvLogImp.c delete mode 100644 network/wlan/WDI/COMMON/DrvLogImp.h delete mode 100644 network/wlan/WDI/COMMON/Frame_Buf.c delete mode 100644 network/wlan/WDI/COMMON/Frame_Buf.h delete mode 100644 network/wlan/WDI/COMMON/GeneralFunc.c delete mode 100644 network/wlan/WDI/COMMON/GeneralFunc.h delete mode 100644 network/wlan/WDI/COMMON/HTGen.c delete mode 100644 network/wlan/WDI/COMMON/HTGen.h delete mode 100644 network/wlan/WDI/COMMON/HashTable.c delete mode 100644 network/wlan/WDI/COMMON/Hotspot20.c delete mode 100644 network/wlan/WDI/COMMON/Hotspot20.h delete mode 100644 network/wlan/WDI/COMMON/IOTGen.h delete mode 100644 network/wlan/WDI/COMMON/MgntActQueryParam.c delete mode 100644 network/wlan/WDI/COMMON/MgntActQueryParam.h delete mode 100644 network/wlan/WDI/COMMON/MgntActSetParam.c delete mode 100644 network/wlan/WDI/COMMON/MgntActSetParam.h delete mode 100644 network/wlan/WDI/COMMON/MgntConstructPacket.c delete mode 100644 network/wlan/WDI/COMMON/MgntConstructPacket.h delete mode 100644 network/wlan/WDI/COMMON/MgntEngine.c delete mode 100644 network/wlan/WDI/COMMON/MgntEngine.h delete mode 100644 network/wlan/WDI/COMMON/MgntGen.c delete mode 100644 network/wlan/WDI/COMMON/MgntGen.h delete mode 100644 network/wlan/WDI/COMMON/MgntLink.c delete mode 100644 network/wlan/WDI/COMMON/MgntLink.h delete mode 100644 network/wlan/WDI/COMMON/MgntSendPacket.c delete mode 100644 network/wlan/WDI/COMMON/MgntSendPacket.h delete mode 100644 network/wlan/WDI/COMMON/MimoPs.c delete mode 100644 network/wlan/WDI/COMMON/MimoPs.h delete mode 100644 network/wlan/WDI/COMMON/Mp_Precomp.h delete mode 100644 network/wlan/WDI/COMMON/MultiChannels.h delete mode 100644 network/wlan/WDI/COMMON/MultiPorts.c delete mode 100644 network/wlan/WDI/COMMON/MultiPorts.h delete mode 100644 network/wlan/WDI/COMMON/OffChnlTx.h delete mode 100644 network/wlan/WDI/COMMON/P2P.c delete mode 100644 network/wlan/WDI/COMMON/P2P.h delete mode 100644 network/wlan/WDI/COMMON/P2PSvc.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc.h delete mode 100644 network/wlan/WDI/COMMON/P2PSvcType.h delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_ActionInfo.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_Construct.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_Internal.h delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_Object.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_PD.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_ParamSpec.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_SD.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_SearchResult.c delete mode 100644 network/wlan/WDI/COMMON/P2PSvc_Utility.c delete mode 100644 network/wlan/WDI/COMMON/P2P_AdditionalIe.c delete mode 100644 network/wlan/WDI/COMMON/P2P_AdditionalIe.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Attribute.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Attribute.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Build.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Build_Action.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Build_Mgnt.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Build_PublicAction.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Channel.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Channel.h delete mode 100644 network/wlan/WDI/COMMON/P2P_DevList.c delete mode 100644 network/wlan/WDI/COMMON/P2P_DevList.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Indication.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Indication.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Internal.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Parse.c delete mode 100644 network/wlan/WDI/COMMON/P2P_ProtocolSpec.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Public.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Receive.c delete mode 100644 network/wlan/WDI/COMMON/P2P_SendAction.c delete mode 100644 network/wlan/WDI/COMMON/P2P_SendMgnt.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Synch.c delete mode 100644 network/wlan/WDI/COMMON/P2P_Synch.h delete mode 100644 network/wlan/WDI/COMMON/P2P_TempPublic.h delete mode 100644 network/wlan/WDI/COMMON/P2P_Util.c delete mode 100644 network/wlan/WDI/COMMON/ParserGen.c delete mode 100644 network/wlan/WDI/COMMON/ParserGen.h delete mode 100644 network/wlan/WDI/COMMON/PowerSave.h delete mode 100644 network/wlan/WDI/COMMON/Protocol802_11.c delete mode 100644 network/wlan/WDI/COMMON/Protocol802_11.h delete mode 100644 network/wlan/WDI/COMMON/QosGen.c delete mode 100644 network/wlan/WDI/COMMON/QosGen.h delete mode 100644 network/wlan/WDI/COMMON/RC4.h delete mode 100644 network/wlan/WDI/COMMON/ROGUEAP.h delete mode 100644 network/wlan/WDI/COMMON/RadioMeasurement.h delete mode 100644 network/wlan/WDI/COMMON/Receive.c delete mode 100644 network/wlan/WDI/COMMON/Receive.h delete mode 100644 network/wlan/WDI/COMMON/RxReorder.c delete mode 100644 network/wlan/WDI/COMMON/RxReorder.h delete mode 100644 network/wlan/WDI/COMMON/SMBios.h delete mode 100644 network/wlan/WDI/COMMON/SecurityGen.c delete mode 100644 network/wlan/WDI/COMMON/SecurityGen.h delete mode 100644 network/wlan/WDI/COMMON/Supplicant.h delete mode 100644 network/wlan/WDI/COMMON/TCPOFFLOADGen.h delete mode 100644 network/wlan/WDI/COMMON/TCPOFFLOAD_Typt.h delete mode 100644 network/wlan/WDI/COMMON/TDLSGen.h delete mode 100644 network/wlan/WDI/COMMON/TSGen.c delete mode 100644 network/wlan/WDI/COMMON/TSGen.h delete mode 100644 network/wlan/WDI/COMMON/TcpCheck.h delete mode 100644 network/wlan/WDI/COMMON/Transmit.c delete mode 100644 network/wlan/WDI/COMMON/Transmit.h delete mode 100644 network/wlan/WDI/COMMON/TransmitDesc.c delete mode 100644 network/wlan/WDI/COMMON/TransmitDesc.h delete mode 100644 network/wlan/WDI/COMMON/UsbModeSwitch.h delete mode 100644 network/wlan/WDI/COMMON/VHTGen.c delete mode 100644 network/wlan/WDI/COMMON/VHTGen.h delete mode 100644 network/wlan/WDI/COMMON/WOLPattern.c delete mode 100644 network/wlan/WDI/COMMON/WOLPattern.h delete mode 100644 network/wlan/WDI/COMMON/WPS.c delete mode 100644 network/wlan/WDI/COMMON/WPS.h delete mode 100644 network/wlan/WDI/COMMON/WPS_Def.h delete mode 100644 network/wlan/WDI/COMMON/Wapi.h delete mode 100644 network/wlan/WDI/COMMON/Widi.h delete mode 100644 network/wlan/WDI/COMMON/common.vcxproj delete mode 100644 network/wlan/WDI/COMMON/pool.c delete mode 100644 network/wlan/WDI/COMMON/pool.h delete mode 100644 network/wlan/WDI/COMMON/sha256.h delete mode 100644 network/wlan/WDI/COMMON/sources.props delete mode 100644 network/wlan/WDI/COMMON/sources.sample.list delete mode 100644 network/wlan/WDI/COMMON/sources.tpl.sample delete mode 100644 network/wlan/WDI/COMMON/sources.tpl.win delete mode 100644 network/wlan/WDI/HAL/DIRS.WlanS delete mode 100644 network/wlan/WDI/HAL/HAL.mk delete mode 100644 network/wlan/WDI/HAL/HALSOURCE/Mp_Precomp.h delete mode 100644 network/wlan/WDI/HAL/HALSOURCE/hal.vcxproj delete mode 100644 network/wlan/WDI/HAL/HalADCSampling.h delete mode 100644 network/wlan/WDI/HAL/HalCam.h delete mode 100644 network/wlan/WDI/HAL/HalComDef.h delete mode 100644 network/wlan/WDI/HAL/HalComDesc.h delete mode 100644 network/wlan/WDI/HAL/HalComFirmware.h delete mode 100644 network/wlan/WDI/HAL/HalComLed.h delete mode 100644 network/wlan/WDI/HAL/HalComPhyCfg.h delete mode 100644 network/wlan/WDI/HAL/HalComReg.h delete mode 100644 network/wlan/WDI/HAL/HalComTxPwrCfg.h delete mode 100644 network/wlan/WDI/HAL/HalComTxPwrLmtCfg.h delete mode 100644 network/wlan/WDI/HAL/HalDM.h delete mode 100644 network/wlan/WDI/HAL/HalEEPROM.h delete mode 100644 network/wlan/WDI/HAL/HalEfuse.h delete mode 100644 network/wlan/WDI/HAL/HalFw.h delete mode 100644 network/wlan/WDI/HAL/HalH2cIOCmd.h delete mode 100644 network/wlan/WDI/HAL/HalIcGlue.h delete mode 100644 network/wlan/WDI/HAL/HalJaguarPhyReg.h delete mode 100644 network/wlan/WDI/HAL/HalMacID.h delete mode 100644 network/wlan/WDI/HAL/HalPG.h delete mode 100644 network/wlan/WDI/HAL/HalPhy.h delete mode 100644 network/wlan/WDI/HAL/HalPowerSave.h delete mode 100644 network/wlan/WDI/HAL/HalPwrSeqCmd.h delete mode 100644 network/wlan/WDI/HAL/HalSIC.h delete mode 100644 network/wlan/WDI/HAL/HalSdio.h delete mode 100644 network/wlan/WDI/HAL/HalTxFeedback.h delete mode 100644 network/wlan/WDI/HAL/HalWoWLAN.h delete mode 100644 network/wlan/WDI/HAL/halCmdPkt.h delete mode 100644 network/wlan/WDI/HAL/halDbgCmd.h delete mode 100644 network/wlan/WDI/HAL/phydm/FileEnc.exe delete mode 100644 network/wlan/WDI/HAL/phydm/development_note.txt delete mode 100644 network/wlan/WDI/HAL/phydm/development_note2012.txt delete mode 100644 network/wlan/WDI/HAL/phydm/halhwimg.h delete mode 100644 network/wlan/WDI/HAL/phydm/halphyrf_ap.h delete mode 100644 network/wlan/WDI/HAL/phydm/halphyrf_ce.h delete mode 100644 network/wlan/WDI/HAL/phydm/halphyrf_win.h delete mode 100644 network/wlan/WDI/HAL/phydm/mp_precomp.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_acs.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_adaptivity.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_antdect.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_antdiv.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_beamforming.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_cfotracking.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_debug.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_dig.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_dynamicbbpowersaving.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_dynamictxpower.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_edcaturbocheck.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_hwconfig.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_interface.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_noisemonitor.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_pathdiv.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_powertracking_ap.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_powertracking_ce.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_powertracking_win.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_pre_define.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_precomp.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_rainfo.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_reg.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_regdefine11ac.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_regdefine11n.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_rxhp.h delete mode 100644 network/wlan/WDI/HAL/phydm/phydm_types.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtchnlplan.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/hal8723breg.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_bb.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_fw.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mac.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mp.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_rf.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_ce.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_win.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/mp_precomp.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/phydm_regconfig8723b.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/phydm_rtl8723b.h delete mode 100644 network/wlan/WDI/HAL/phydm/rtl8723b/version_rtl8723b.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BDefCom.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BDesc.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BEfuse.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BFirmware.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyCfg.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyReg.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BPwrSeq.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/Hal8723BRf.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioDef.h delete mode 100644 network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioLed.h delete mode 100644 network/wlan/WDI/HAL/sources.list.WlanS delete mode 100644 network/wlan/WDI/HAL/sources.tpl.WlanS.props delete mode 100644 network/wlan/WDI/HAL/sources.tpl.WlanS.win delete mode 100644 network/wlan/WDI/HEADER/BAType.h delete mode 100644 network/wlan/WDI/HEADER/BssCoexistence.h delete mode 100644 network/wlan/WDI/HEADER/CcxType.h delete mode 100644 network/wlan/WDI/HEADER/ChannelType.h delete mode 100644 network/wlan/WDI/HEADER/CustomOid.h delete mode 100644 network/wlan/WDI/HEADER/DriverInterfaceDef.h delete mode 100644 network/wlan/WDI/HEADER/EndianFree.h delete mode 100644 network/wlan/WDI/HEADER/Ethernet.h delete mode 100644 network/wlan/WDI/HEADER/GeneralDef.h delete mode 100644 network/wlan/WDI/HEADER/HTType.h delete mode 100644 network/wlan/WDI/HEADER/HalDef.h delete mode 100644 network/wlan/WDI/HEADER/HashTable.h delete mode 100644 network/wlan/WDI/HEADER/LinkList.h delete mode 100644 network/wlan/WDI/HEADER/MAType.h delete mode 100644 network/wlan/WDI/HEADER/Object.h delete mode 100644 network/wlan/WDI/HEADER/PlatformDef.h delete mode 100644 network/wlan/WDI/HEADER/PlatformSdio.h delete mode 100644 network/wlan/WDI/HEADER/Precomp.h delete mode 100644 network/wlan/WDI/HEADER/Precomp.h.WlanS.sample delete mode 100644 network/wlan/WDI/HEADER/PrecompInc_sample.h delete mode 100644 network/wlan/WDI/HEADER/QoSType.h delete mode 100644 network/wlan/WDI/HEADER/RegCommon.h delete mode 100644 network/wlan/WDI/HEADER/RmDef.h delete mode 100644 network/wlan/WDI/HEADER/SecurityType.h delete mode 100644 network/wlan/WDI/HEADER/StatusCode.h delete mode 100644 network/wlan/WDI/HEADER/TDLSType.h delete mode 100644 network/wlan/WDI/HEADER/TSType.h delete mode 100644 network/wlan/WDI/HEADER/TypeDef.h delete mode 100644 network/wlan/WDI/HEADER/WiDiType.h delete mode 100644 network/wlan/WDI/HEADER/WlanDriverEvents.h delete mode 100644 network/wlan/WDI/HEADER/platform-os-version.h delete mode 100644 network/wlan/WDI/HEADER/rtwlanwpp.h delete mode 100644 network/wlan/WDI/LIB/Arm/hal.lib delete mode 100644 network/wlan/WDI/LIB/Arm/rtklibcom.lib delete mode 100644 network/wlan/WDI/LIB/x64/hal.lib delete mode 100644 network/wlan/WDI/LIB/x64/rtklibcom.lib delete mode 100644 network/wlan/WDI/LIB/x86/hal.lib delete mode 100644 network/wlan/WDI/LIB/x86/rtklibcom.lib delete mode 100644 network/wlan/WDI/PLATFORM/DIRS.NDIS6 delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/802_11_OID.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/CCX_Extension.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/CCX_Predef.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/DIRS.SDIO delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_AP_Def.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N62C_def.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/Ndis_OID.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/CppDrvReg.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Precomp.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Req.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_DrvIF.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_info.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_mechanism.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_typedef.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/n60_sdio.inc delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/n62_sdio.inc delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/n6c_sdio.inc.props delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlans.rc delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlansmp.rc delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/sdio.vcxproj delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.lib.list delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.list delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.props delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.props delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.win delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.c delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/WDI_def.h delete mode 100644 network/wlan/WDI/PLATFORM/NDIS6/new.cpp delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/Mp_Precomp.h delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisComm.c delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisComm.h delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisComm.vcxproj delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.c delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.h delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisOid.c delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/NdisOid.h delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/makefile.Win delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/sources.list delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/sources.props delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.props delete mode 100644 network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.win delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportFeature.ini delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportIC.ini delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportOS.ini delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/arm/netrtwlans.inf delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/netrtwlans.inf delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/x64/netrtwlans.inf delete mode 100644 network/wlan/WDI/PLATFORM/WinInf/SDIO/x86/netrtwlans.inf delete mode 100644 network/wlan/WDI/PLATFORM/svn_version.h delete mode 100644 network/wlan/WDI/PLATFORM/svn_version.tmpl delete mode 100644 network/wlan/WDI/windows.msbuild.rtwssample.sln create mode 100644 network/wlan/ihvsampleui/IHVClassFactory.cpp create mode 100644 network/wlan/ihvsampleui/IHVClassFactory.h create mode 100644 network/wlan/ihvsampleui/IHVRegistryHelper.cpp create mode 100644 network/wlan/ihvsampleui/IHVRegistryHelper.h create mode 100644 network/wlan/ihvsampleui/IHVSample.idl create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUI.cpp create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUI.h create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUICon.cpp create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUICon.h create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUIKey.cpp create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUIKey.h create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUISec.cpp create mode 100644 network/wlan/ihvsampleui/IHVSampleExtUISec.h create mode 100644 network/wlan/ihvsampleui/IHVSampleProfile.cpp create mode 100644 network/wlan/ihvsampleui/IHVSampleProfile.h create mode 100644 network/wlan/ihvsampleui/IHVSampleUI.cpp create mode 100644 network/wlan/ihvsampleui/IHVSampleUI.def create mode 100644 network/wlan/ihvsampleui/IHVSampleUI.rc create mode 100644 network/wlan/ihvsampleui/IHVSampleUI.vcxproj create mode 100644 network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters create mode 100644 network/wlan/ihvsampleui/IHVUIInc.idl create mode 100644 network/wlan/ihvsampleui/iunk.h create mode 100644 network/wlan/ihvsampleui/precomp.h create mode 100644 network/wlan/ihvsampleui/resource.h create mode 100644 network/wlan/ihvsampleui/utils.cpp create mode 100644 network/wlan/ihvsampleui/utils.h (limited to 'network') diff --git a/network/config/bindview/bindview.sln b/network/config/bindview/bindview.sln index edfa137a..824d0444 100644 --- a/network/config/bindview/bindview.sln +++ b/network/config/bindview/bindview.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bindview", "bindview.vcxproj", "{E60EDFAC-946E-4410-8969-0DD6EF6083C4}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bindview", "bindview.vcxproj", "{A9995567-E5EF-4A30-B294-D5930523A2B5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Debug|Win32.ActiveCfg = Debug|Win32 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Debug|Win32.Build.0 = Debug|Win32 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Release|Win32.ActiveCfg = Release|Win32 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Release|Win32.Build.0 = Release|Win32 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Debug|x64.ActiveCfg = Debug|x64 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Debug|x64.Build.0 = Debug|x64 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Release|x64.ActiveCfg = Release|x64 - {E60EDFAC-946E-4410-8969-0DD6EF6083C4}.Release|x64.Build.0 = Release|x64 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Debug|Win32.ActiveCfg = Debug|Win32 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Debug|Win32.Build.0 = Debug|Win32 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Release|Win32.ActiveCfg = Release|Win32 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Release|Win32.Build.0 = Release|Win32 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Debug|x64.ActiveCfg = Debug|x64 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Debug|x64.Build.0 = Debug|x64 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Release|x64.ActiveCfg = Release|x64 + {A9995567-E5EF-4A30-B294-D5930523A2B5}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/config/bindview/bindview.vcxproj b/network/config/bindview/bindview.vcxproj index ae65f890..a02b4401 100644 --- a/network/config/bindview/bindview.vcxproj +++ b/network/config/bindview/bindview.vcxproj @@ -19,11 +19,11 @@ - {E60EDFAC-946E-4410-8969-0DD6EF6083C4} + {A9995567-E5EF-4A30-B294-D5930523A2B5} $(MSBuildProjectName) Debug Win32 - {F75CE060-85A8-443C-9041-CB0C7CEA7EA7} + {24391928-4AD2-4393-B2CD-C85CC7B1F672} diff --git a/network/config/bindview/bindview.vcxproj.Filters b/network/config/bindview/bindview.vcxproj.Filters index ceeb0d01..50c6ea74 100644 --- a/network/config/bindview/bindview.vcxproj.Filters +++ b/network/config/bindview/bindview.vcxproj.Filters @@ -3,15 +3,15 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {214E38B2-429C-45AE-ACAE-2A37535D22D9} + {9160085D-F1E2-46A8-98C0-C2CFB3783D8F} h;hpp;hxx;hm;inl;inc;xsd - {5BE39D34-8513-4474-B353-E1B582C95C04} + {3B0485A1-02EF-4C24-BC2C-94C28FCD4C13} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {4CF860BF-19B6-4CFF-986A-76D1F51834CC} + {88F9EA2E-8624-4A5B-AC4C-78EEE74E9CA7} diff --git a/network/modem/fakemodem/fakemodem.sln b/network/modem/fakemodem/fakemodem.sln index 9d5f20f8..e956fec9 100644 --- a/network/modem/fakemodem/fakemodem.sln +++ b/network/modem/fakemodem/fakemodem.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fakemodem", "fakemodem.vcxproj", "{D5EE22D4-47C4-48F2-8210-41F8D1B80B62}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fakemodem", "fakemodem.vcxproj", "{318EB156-D430-4B09-8400-2B72A6A73004}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Debug|Win32.ActiveCfg = Debug|Win32 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Debug|Win32.Build.0 = Debug|Win32 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Release|Win32.ActiveCfg = Release|Win32 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Release|Win32.Build.0 = Release|Win32 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Debug|x64.ActiveCfg = Debug|x64 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Debug|x64.Build.0 = Debug|x64 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Release|x64.ActiveCfg = Release|x64 - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62}.Release|x64.Build.0 = Release|x64 + {318EB156-D430-4B09-8400-2B72A6A73004}.Debug|Win32.ActiveCfg = Debug|Win32 + {318EB156-D430-4B09-8400-2B72A6A73004}.Debug|Win32.Build.0 = Debug|Win32 + {318EB156-D430-4B09-8400-2B72A6A73004}.Release|Win32.ActiveCfg = Release|Win32 + {318EB156-D430-4B09-8400-2B72A6A73004}.Release|Win32.Build.0 = Release|Win32 + {318EB156-D430-4B09-8400-2B72A6A73004}.Debug|x64.ActiveCfg = Debug|x64 + {318EB156-D430-4B09-8400-2B72A6A73004}.Debug|x64.Build.0 = Debug|x64 + {318EB156-D430-4B09-8400-2B72A6A73004}.Release|x64.ActiveCfg = Release|x64 + {318EB156-D430-4B09-8400-2B72A6A73004}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/modem/fakemodem/fakemodem.vcxproj b/network/modem/fakemodem/fakemodem.vcxproj index 6cfa9ad0..3e3e56ae 100644 --- a/network/modem/fakemodem/fakemodem.vcxproj +++ b/network/modem/fakemodem/fakemodem.vcxproj @@ -19,12 +19,12 @@ - {D5EE22D4-47C4-48F2-8210-41F8D1B80B62} + {318EB156-D430-4B09-8400-2B72A6A73004} $(MSBuildProjectName) 1 Debug Win32 - {B351256B-F713-442B-BD96-EBAA08ADC277} + {7FB2EEDE-628E-4211-B00C-66D19CF3D32A} diff --git a/network/modem/fakemodem/fakemodem.vcxproj.Filters b/network/modem/fakemodem/fakemodem.vcxproj.Filters index 32888bd3..c4ed7523 100644 --- a/network/modem/fakemodem/fakemodem.vcxproj.Filters +++ b/network/modem/fakemodem/fakemodem.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {A97FFE22-8053-4254-B732-19813EA56D71} + {24C31D2E-AF1C-4333-A237-26C436FC689A} h;hpp;hxx;hm;inl;inc;xsd - {0EFEA207-D953-4022-8525-8F1E692F1396} + {7F60F970-8DED-4B19-90E0-0E43686048BD} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {A02D00E6-E88A-4342-908F-28483AEF11A5} + {2AD61C20-0760-4995-BE2D-52F5F3AA9645} inf;inv;inx;mof;mc; - {26FC65B7-1969-4954-BAE5-68FD772BE13E} + {3C1D9011-15DC-435A-B606-BD3D0DBA39E4} diff --git a/network/modem/fakemodem/mdmfake.inx b/network/modem/fakemodem/mdmfake.inx index 404679ce..7dbe55c0 100644 Binary files a/network/modem/fakemodem/mdmfake.inx and b/network/modem/fakemodem/mdmfake.inx differ diff --git a/network/ndis/extension/base/sxbase.vcxproj b/network/ndis/extension/base/sxbase.vcxproj index 13a49e61..47c5be68 100644 --- a/network/ndis/extension/base/sxbase.vcxproj +++ b/network/ndis/extension/base/sxbase.vcxproj @@ -11,11 +11,11 @@ - {B838EAEA-2046-4E93-AC2D-CB203C9D4036} + {116389EB-9596-42A0-9C05-66DBD2A62363} $(MSBuildProjectName) Debug x64 - {F44EC1A6-6C23-4D60-B89C-39A239AABA69} + {76212B41-7DC5-4A2D-A52B-05043D88FAF6} diff --git a/network/ndis/extension/base/sxbase.vcxproj.Filters b/network/ndis/extension/base/sxbase.vcxproj.Filters index a75c71be..65b2b72a 100644 --- a/network/ndis/extension/base/sxbase.vcxproj.Filters +++ b/network/ndis/extension/base/sxbase.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {A16DB2BA-3F19-47BD-B171-7D2A069155B0} + {A6E18088-0BDB-40AF-8FFF-B26E957107C3} h;hpp;hxx;hm;inl;inc;xsd - {594FE438-B8A6-4B44-B108-9504E84B573E} + {D6935950-2C41-4E45-B48B-AD44D1F767C4} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {BCEFAB4C-06AA-4C9F-81B8-057321327165} + {376F3435-038B-4A8F-882F-5F5F913E0631} inf;inv;inx;mof;mc; - {3B1FC56B-F654-4AA2-9F91-AB9E496D8160} + {4D05B842-8D95-4BBE-83A4-984A422F7783} diff --git a/network/ndis/extension/extensions.sln b/network/ndis/extension/extensions.sln index 75fb7b83..6915713c 100644 --- a/network/ndis/extension/extensions.sln +++ b/network/ndis/extension/extensions.sln @@ -3,24 +3,24 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Base", "Base", "{28219E37-D912-456C-A3F7-03912CD5C2C4}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Base", "Base", "{D02CEB8E-8252-4474-9397-FC5FCDBAEBB8}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forward", "Forward", "{B3C1B1A2-7677-428B-9D67-61DEE9DF4035}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Forward", "Forward", "{CD9D8AAC-3F52-4714-8A1F-72372A0D23E8}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{9212747D-6D63-4D9C-8961-FA8AD5A2DEDD}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{F46A020E-CBD7-4626-A638-DD8261EFA8FF}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Passthrough", "Passthrough", "{875DC1CC-D5FA-4D39-94DE-A059F05174C9}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Passthrough", "Passthrough", "{5B973CF1-375C-4E45-A4EA-A37FF093DCBB}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxbase", "base\sxbase.vcxproj", "{B838EAEA-2046-4E93-AC2D-CB203C9D4036}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sxbase", "base\sxbase.vcxproj", "{116389EB-9596-42A0-9C05-66DBD2A62363}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msforwardext", "samples\forward\msforwardext.vcxproj", "{D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msforwardext", "samples\forward\msforwardext.vcxproj", "{86E5643E-4462-4EDC-A315-07C2D260C5AD}" ProjectSection(ProjectDependencies) = postProject - {B838EAEA-2046-4E93-AC2D-CB203C9D4036} = {B838EAEA-2046-4E93-AC2D-CB203C9D4036} + {116389EB-9596-42A0-9C05-66DBD2A62363} = {116389EB-9596-42A0-9C05-66DBD2A62363} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mspassthroughext", "samples\passthrough\mspassthroughext.vcxproj", "{C60917BE-A59D-4FDB-BEFD-98DC106BDCA9}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mspassthroughext", "samples\passthrough\mspassthroughext.vcxproj", "{C0A48ACA-3961-4E93-B2B4-4D27E0106A3B}" ProjectSection(ProjectDependencies) = postProject - {B838EAEA-2046-4E93-AC2D-CB203C9D4036} = {B838EAEA-2046-4E93-AC2D-CB203C9D4036} + {116389EB-9596-42A0-9C05-66DBD2A62363} = {116389EB-9596-42A0-9C05-66DBD2A62363} EndProjectSection EndProject Global @@ -29,27 +29,27 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B838EAEA-2046-4E93-AC2D-CB203C9D4036}.Debug|x64.ActiveCfg = Debug|x64 - {B838EAEA-2046-4E93-AC2D-CB203C9D4036}.Debug|x64.Build.0 = Debug|x64 - {B838EAEA-2046-4E93-AC2D-CB203C9D4036}.Release|x64.ActiveCfg = Release|x64 - {B838EAEA-2046-4E93-AC2D-CB203C9D4036}.Release|x64.Build.0 = Release|x64 - {D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A}.Debug|x64.ActiveCfg = Debug|x64 - {D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A}.Debug|x64.Build.0 = Debug|x64 - {D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A}.Release|x64.ActiveCfg = Release|x64 - {D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A}.Release|x64.Build.0 = Release|x64 - {C60917BE-A59D-4FDB-BEFD-98DC106BDCA9}.Debug|x64.ActiveCfg = Debug|x64 - {C60917BE-A59D-4FDB-BEFD-98DC106BDCA9}.Debug|x64.Build.0 = Debug|x64 - {C60917BE-A59D-4FDB-BEFD-98DC106BDCA9}.Release|x64.ActiveCfg = Release|x64 - {C60917BE-A59D-4FDB-BEFD-98DC106BDCA9}.Release|x64.Build.0 = Release|x64 + {116389EB-9596-42A0-9C05-66DBD2A62363}.Debug|x64.ActiveCfg = Debug|x64 + {116389EB-9596-42A0-9C05-66DBD2A62363}.Debug|x64.Build.0 = Debug|x64 + {116389EB-9596-42A0-9C05-66DBD2A62363}.Release|x64.ActiveCfg = Release|x64 + {116389EB-9596-42A0-9C05-66DBD2A62363}.Release|x64.Build.0 = Release|x64 + {86E5643E-4462-4EDC-A315-07C2D260C5AD}.Debug|x64.ActiveCfg = Debug|x64 + {86E5643E-4462-4EDC-A315-07C2D260C5AD}.Debug|x64.Build.0 = Debug|x64 + {86E5643E-4462-4EDC-A315-07C2D260C5AD}.Release|x64.ActiveCfg = Release|x64 + {86E5643E-4462-4EDC-A315-07C2D260C5AD}.Release|x64.Build.0 = Release|x64 + {C0A48ACA-3961-4E93-B2B4-4D27E0106A3B}.Debug|x64.ActiveCfg = Debug|x64 + {C0A48ACA-3961-4E93-B2B4-4D27E0106A3B}.Debug|x64.Build.0 = Debug|x64 + {C0A48ACA-3961-4E93-B2B4-4D27E0106A3B}.Release|x64.ActiveCfg = Release|x64 + {C0A48ACA-3961-4E93-B2B4-4D27E0106A3B}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {B838EAEA-2046-4E93-AC2D-CB203C9D4036} = {28219E37-D912-456C-A3F7-03912CD5C2C4} - {D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A} = {B3C1B1A2-7677-428B-9D67-61DEE9DF4035} - {C60917BE-A59D-4FDB-BEFD-98DC106BDCA9} = {875DC1CC-D5FA-4D39-94DE-A059F05174C9} - {B3C1B1A2-7677-428B-9D67-61DEE9DF4035} = {9212747D-6D63-4D9C-8961-FA8AD5A2DEDD} - {875DC1CC-D5FA-4D39-94DE-A059F05174C9} = {9212747D-6D63-4D9C-8961-FA8AD5A2DEDD} + {116389EB-9596-42A0-9C05-66DBD2A62363} = {D02CEB8E-8252-4474-9397-FC5FCDBAEBB8} + {86E5643E-4462-4EDC-A315-07C2D260C5AD} = {CD9D8AAC-3F52-4714-8A1F-72372A0D23E8} + {C0A48ACA-3961-4E93-B2B4-4D27E0106A3B} = {5B973CF1-375C-4E45-A4EA-A37FF093DCBB} + {CD9D8AAC-3F52-4714-8A1F-72372A0D23E8} = {F46A020E-CBD7-4626-A638-DD8261EFA8FF} + {5B973CF1-375C-4E45-A4EA-A37FF093DCBB} = {F46A020E-CBD7-4626-A638-DD8261EFA8FF} EndGlobalSection EndGlobal diff --git a/network/ndis/extension/samples/forward/msforwardext.vcxproj b/network/ndis/extension/samples/forward/msforwardext.vcxproj index be2eea6b..589a0857 100644 --- a/network/ndis/extension/samples/forward/msforwardext.vcxproj +++ b/network/ndis/extension/samples/forward/msforwardext.vcxproj @@ -11,11 +11,11 @@ - {D112446E-9C5A-42CF-9C9B-CDA3E7DC5B3A} + {86E5643E-4462-4EDC-A315-07C2D260C5AD} $(MSBuildProjectName) Debug x64 - {EA90456F-BB1A-4F16-B579-F296EF617DD6} + {46825092-9971-43D3-A5D3-A987CD3E1434} diff --git a/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters b/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters index b9d7e74c..152d91cc 100644 --- a/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters +++ b/network/ndis/extension/samples/forward/msforwardext.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {F68973A5-CE87-470D-BA57-416A25240DF3} + {AEB3EF09-357E-42FD-9DD6-D859E011A53B} h;hpp;hxx;hm;inl;inc;xsd - {97E8830C-C990-4BF0-A9E1-C9E672F737B4} + {C4110269-9086-437B-884F-4C7DF3F154CF} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {9274D3AF-075C-4C05-A5FF-E9D3DD0229C2} + {966DDD9B-30E5-43B7-9775-88D46FA6B6B4} inf;inv;inx;mof;mc; - {34ADA108-C24C-4574-921B-055BF882ADC6} + {051A81C9-2D1C-47F7-BD6F-C32B966F6591} diff --git a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj index c64db7ea..e590510a 100644 --- a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj +++ b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj @@ -11,11 +11,11 @@ - {C60917BE-A59D-4FDB-BEFD-98DC106BDCA9} + {C0A48ACA-3961-4E93-B2B4-4D27E0106A3B} $(MSBuildProjectName) Debug x64 - {2B0884D6-EEF4-4FA0-BA85-91716EF53A20} + {4D1A04DA-F327-44B8-9448-4BC4C01D30CF} diff --git a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters index e08626d6..23d5b54c 100644 --- a/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters +++ b/network/ndis/extension/samples/passthrough/mspassthroughext.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {359A1D8D-C03D-495A-A725-8463CB68AD28} + {F91FDBCA-2FA2-4A08-95C3-698E337F5EC2} h;hpp;hxx;hm;inl;inc;xsd - {B413F3C3-1A7A-47F1-871C-DD463CF462FA} + {548EC420-097B-44CB-9AB2-CA4F00781B5F} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {1A7DD397-5E2F-460C-8CDA-7CB5C2EB8B84} + {F05ED0BC-130C-4B76-9311-C5ABEFF663EE} inf;inv;inx;mof;mc; - {9110AEBB-3824-490A-9B6E-92BED551B86D} + {B5B20273-FD92-443F-959D-70901F346798} diff --git a/network/ndis/filter/filter.sln b/network/ndis/filter/filter.sln index af8aa594..6b8b743f 100644 --- a/network/ndis/filter/filter.sln +++ b/network/ndis/filter/filter.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndislwf", "ndislwf.vcxproj", "{BA1E550F-9F59-4729-98F9-2E9135355331}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndislwf", "ndislwf.vcxproj", "{CD502925-8888-4A09-8AD0-04B80A73FBBD}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {BA1E550F-9F59-4729-98F9-2E9135355331}.Debug|Win32.ActiveCfg = Debug|Win32 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Debug|Win32.Build.0 = Debug|Win32 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Release|Win32.ActiveCfg = Release|Win32 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Release|Win32.Build.0 = Release|Win32 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Debug|x64.ActiveCfg = Debug|x64 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Debug|x64.Build.0 = Debug|x64 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Release|x64.ActiveCfg = Release|x64 - {BA1E550F-9F59-4729-98F9-2E9135355331}.Release|x64.Build.0 = Release|x64 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Debug|Win32.ActiveCfg = Debug|Win32 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Debug|Win32.Build.0 = Debug|Win32 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Release|Win32.ActiveCfg = Release|Win32 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Release|Win32.Build.0 = Release|Win32 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Debug|x64.ActiveCfg = Debug|x64 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Debug|x64.Build.0 = Debug|x64 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Release|x64.ActiveCfg = Release|x64 + {CD502925-8888-4A09-8AD0-04B80A73FBBD}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/ndis/filter/ndislwf.vcxproj b/network/ndis/filter/ndislwf.vcxproj index 503d9301..f381ba89 100644 --- a/network/ndis/filter/ndislwf.vcxproj +++ b/network/ndis/filter/ndislwf.vcxproj @@ -19,11 +19,11 @@ - {BA1E550F-9F59-4729-98F9-2E9135355331} + {CD502925-8888-4A09-8AD0-04B80A73FBBD} $(MSBuildProjectName) Debug Win32 - {63E20C70-DE9B-4A15-9F7D-B388D4B6E048} + {F40772D8-6882-4C62-8849-D5651CC7751C} diff --git a/network/ndis/filter/ndislwf.vcxproj.Filters b/network/ndis/filter/ndislwf.vcxproj.Filters index b08d85b9..200de09e 100644 --- a/network/ndis/filter/ndislwf.vcxproj.Filters +++ b/network/ndis/filter/ndislwf.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {84396FDB-160B-48B8-8764-F838E443D514} + {E549C692-AB5D-4B19-A27F-39CB688D325C} h;hpp;hxx;hm;inl;inc;xsd - {DAFBC6E8-0471-4153-B9EA-04B4264C4757} + {86E411A4-7A15-4BA4-97E2-8CC8596C66E7} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {A57EFF04-85E0-4EC9-A9A3-E3FE3A0E7F56} + {E39D3E0D-5966-4619-A8EB-D91989A3EF89} inf;inv;inx;mof;mc; - {9DFDBF97-3CA3-458D-830D-083C1414E124} + {3CE8B5F7-6B57-4C41-93D5-1F9C5132D57D} diff --git a/network/ndis/mux/driver/60/miniport.c b/network/ndis/mux/driver/60/miniport.c index 45cdef53..e0c3e380 100644 --- a/network/ndis/mux/driver/60/miniport.c +++ b/network/ndis/mux/driver/60/miniport.c @@ -2543,7 +2543,7 @@ NOTE: This functio doesn't handle vlan tagging in an efficient way, please wait while (TRUE) { pVa = NULL; - NdisQueryMdl(Mdl, &pVa, &BufferLength, NormalPagePriority); + NdisQueryMdl(Mdl, &pVa, &BufferLength, NormalPagePriority | MdlMappingNoExecute); if (pVa == NULL) { @@ -2853,7 +2853,7 @@ Return Value: NdisQueryMdl(NET_BUFFER_CURRENT_MDL(CurrentMdlAllocatedNetBuffer), &pVa, &BufferLength, - NormalPagePriority); + NormalPagePriority | MdlMappingNoExecute); if( pVa == NULL ){ //you may do something } diff --git a/network/ndis/mux/driver/60/novlan/mux.vcxproj b/network/ndis/mux/driver/60/novlan/mux.vcxproj index d3848065..5740775a 100644 --- a/network/ndis/mux/driver/60/novlan/mux.vcxproj +++ b/network/ndis/mux/driver/60/novlan/mux.vcxproj @@ -19,11 +19,11 @@ - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77} + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308} $(MSBuildProjectName) Debug Win32 - {114EA080-E360-4DFF-933D-32330FBCE32D} + {66B17978-A259-41F2-B762-8A38382B603D} diff --git a/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters b/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters index abae9d84..ff91d92c 100644 --- a/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters +++ b/network/ndis/mux/driver/60/novlan/mux.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {D4B49EC5-E87F-461E-8F43-16C86C0D27B7} + {6BCB0E00-374A-4F26-86ED-0A06B529744D} h;hpp;hxx;hm;inl;inc;xsd - {BB7C27BC-A288-4C98-A16A-4F35D1DD7D26} + {05B937DD-309E-4FDF-9A95-695BDAE919B5} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {0466D1AB-867D-4829-A10F-4C6E5F154268} + {66C974D2-A44A-44F8-85EE-EFE46968148A} inf;inv;inx;mof;mc; - {33D5CCAF-775D-45F9-B08A-C2951B557268} + {FB8BB109-6E26-4E1E-B5A2-8707820E07AC} diff --git a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj index 52825b7a..b9ad71ca 100644 --- a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj +++ b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj @@ -19,11 +19,11 @@ - {C2CFEECC-2281-4F99-B855-185BEE431415} + {015D7470-0FC8-4597-A67E-BD9C754F0681} $(MSBuildProjectName) Debug Win32 - {43683E92-7DA7-43A8-958C-057E3A015D28} + {261E8436-6685-4860-962C-AF3076B35DB9} diff --git a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters index e1651444..8bd7f5bf 100644 --- a/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters +++ b/network/ndis/mux/driver/60/vlan/muxvlan.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {94237C24-6B64-43C1-A5E1-10FCDCD13519} + {EAA25048-A8D8-4B0D-A1B1-877F9D4DB341} h;hpp;hxx;hm;inl;inc;xsd - {B7E57BF5-A4DA-44A1-8A61-BEF5A6016D5D} + {729ABB1C-6C3A-43EA-895E-20934A64EC06} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {373729B5-7B52-4DA0-9380-18CBE8AE382A} + {59F5A994-E083-4BBC-9AF0-52685EA1B653} inf;inv;inx;mof;mc; - {6DEAB32E-549A-4629-AE3C-8BBC83887CDE} + {239D4489-66F7-4647-A5B6-04594F97F958} diff --git a/network/ndis/mux/mux.sln b/network/ndis/mux/mux.sln index f9483243..551a21b7 100644 --- a/network/ndis/mux/mux.sln +++ b/network/ndis/mux/mux.sln @@ -3,21 +3,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vlan", "Vlan", "{9817776F-C460-4A80-BD6D-201A2CB3A0A4}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vlan", "Vlan", "{DFD0A31B-8B62-4BAA-998E-161F01D1A01B}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{8844C087-57E1-4934-AA51-CF9CF8F50313}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{BB781269-F74A-43E0-AD7D-DBD32BBF2012}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{F830CF4F-2AA8-4AE1-9068-5F63F12A3ACF}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Driver", "Driver", "{26B59072-BF66-4E06-83CA-3F4F95378A23}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Novlan", "Novlan", "{D477BF5F-6512-4E1E-9115-44CF150CBD69}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Novlan", "Novlan", "{2D3D13DE-5985-4A6C-8562-3E954D634F1E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifyob", "Notifyob", "{98C539D7-554A-4D00-B2C5-7897ADA27626}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifyob", "Notifyob", "{2CAF23FF-28F8-4D52-B6C9-B76C8BCD5F67}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "muxvlan", "driver\60\vlan\muxvlan.vcxproj", "{C2CFEECC-2281-4F99-B855-185BEE431415}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "muxvlan", "driver\60\vlan\muxvlan.vcxproj", "{015D7470-0FC8-4597-A67E-BD9C754F0681}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "driver\60\novlan\mux.vcxproj", "{B5858D53-B828-4CA4-BB86-D9E9C31B7F77}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "driver\60\novlan\mux.vcxproj", "{B2DE2C37-B3F2-491E-94AE-402A7B4D3308}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "notifyob\mux.vcxproj", "{285AA43E-0509-4716-8586-405D086C370D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mux", "notifyob\mux.vcxproj", "{92E3B437-C258-47FB-8856-D3FEA56A3BCC}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -27,40 +27,40 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {C2CFEECC-2281-4F99-B855-185BEE431415}.Debug|Win32.ActiveCfg = Debug|Win32 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Debug|Win32.Build.0 = Debug|Win32 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Release|Win32.ActiveCfg = Release|Win32 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Release|Win32.Build.0 = Release|Win32 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Debug|x64.ActiveCfg = Debug|x64 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Debug|x64.Build.0 = Debug|x64 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Release|x64.ActiveCfg = Release|x64 - {C2CFEECC-2281-4F99-B855-185BEE431415}.Release|x64.Build.0 = Release|x64 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Debug|Win32.ActiveCfg = Debug|Win32 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Debug|Win32.Build.0 = Debug|Win32 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Release|Win32.ActiveCfg = Release|Win32 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Release|Win32.Build.0 = Release|Win32 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Debug|x64.ActiveCfg = Debug|x64 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Debug|x64.Build.0 = Debug|x64 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Release|x64.ActiveCfg = Release|x64 - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77}.Release|x64.Build.0 = Release|x64 - {285AA43E-0509-4716-8586-405D086C370D}.Debug|Win32.ActiveCfg = Debug|Win32 - {285AA43E-0509-4716-8586-405D086C370D}.Debug|Win32.Build.0 = Debug|Win32 - {285AA43E-0509-4716-8586-405D086C370D}.Release|Win32.ActiveCfg = Release|Win32 - {285AA43E-0509-4716-8586-405D086C370D}.Release|Win32.Build.0 = Release|Win32 - {285AA43E-0509-4716-8586-405D086C370D}.Debug|x64.ActiveCfg = Debug|x64 - {285AA43E-0509-4716-8586-405D086C370D}.Debug|x64.Build.0 = Debug|x64 - {285AA43E-0509-4716-8586-405D086C370D}.Release|x64.ActiveCfg = Release|x64 - {285AA43E-0509-4716-8586-405D086C370D}.Release|x64.Build.0 = Release|x64 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Debug|Win32.ActiveCfg = Debug|Win32 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Debug|Win32.Build.0 = Debug|Win32 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Release|Win32.ActiveCfg = Release|Win32 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Release|Win32.Build.0 = Release|Win32 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Debug|x64.ActiveCfg = Debug|x64 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Debug|x64.Build.0 = Debug|x64 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Release|x64.ActiveCfg = Release|x64 + {015D7470-0FC8-4597-A67E-BD9C754F0681}.Release|x64.Build.0 = Release|x64 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Debug|Win32.ActiveCfg = Debug|Win32 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Debug|Win32.Build.0 = Debug|Win32 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Release|Win32.ActiveCfg = Release|Win32 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Release|Win32.Build.0 = Release|Win32 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Debug|x64.ActiveCfg = Debug|x64 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Debug|x64.Build.0 = Debug|x64 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Release|x64.ActiveCfg = Release|x64 + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308}.Release|x64.Build.0 = Release|x64 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Debug|Win32.ActiveCfg = Debug|Win32 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Debug|Win32.Build.0 = Debug|Win32 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Release|Win32.ActiveCfg = Release|Win32 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Release|Win32.Build.0 = Release|Win32 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Debug|x64.ActiveCfg = Debug|x64 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Debug|x64.Build.0 = Debug|x64 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Release|x64.ActiveCfg = Release|x64 + {92E3B437-C258-47FB-8856-D3FEA56A3BCC}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {C2CFEECC-2281-4F99-B855-185BEE431415} = {9817776F-C460-4A80-BD6D-201A2CB3A0A4} - {B5858D53-B828-4CA4-BB86-D9E9C31B7F77} = {D477BF5F-6512-4E1E-9115-44CF150CBD69} - {285AA43E-0509-4716-8586-405D086C370D} = {98C539D7-554A-4D00-B2C5-7897ADA27626} - {9817776F-C460-4A80-BD6D-201A2CB3A0A4} = {8844C087-57E1-4934-AA51-CF9CF8F50313} - {8844C087-57E1-4934-AA51-CF9CF8F50313} = {F830CF4F-2AA8-4AE1-9068-5F63F12A3ACF} - {D477BF5F-6512-4E1E-9115-44CF150CBD69} = {8844C087-57E1-4934-AA51-CF9CF8F50313} + {015D7470-0FC8-4597-A67E-BD9C754F0681} = {DFD0A31B-8B62-4BAA-998E-161F01D1A01B} + {B2DE2C37-B3F2-491E-94AE-402A7B4D3308} = {2D3D13DE-5985-4A6C-8562-3E954D634F1E} + {92E3B437-C258-47FB-8856-D3FEA56A3BCC} = {2CAF23FF-28F8-4D52-B6C9-B76C8BCD5F67} + {DFD0A31B-8B62-4BAA-998E-161F01D1A01B} = {BB781269-F74A-43E0-AD7D-DBD32BBF2012} + {BB781269-F74A-43E0-AD7D-DBD32BBF2012} = {26B59072-BF66-4E06-83CA-3F4F95378A23} + {2D3D13DE-5985-4A6C-8562-3E954D634F1E} = {BB781269-F74A-43E0-AD7D-DBD32BBF2012} EndGlobalSection EndGlobal diff --git a/network/ndis/mux/notifyob/mux.vcxproj b/network/ndis/mux/notifyob/mux.vcxproj index bd1a8bdd..dc1e2897 100644 --- a/network/ndis/mux/notifyob/mux.vcxproj +++ b/network/ndis/mux/notifyob/mux.vcxproj @@ -19,11 +19,11 @@ - {285AA43E-0509-4716-8586-405D086C370D} + {92E3B437-C258-47FB-8856-D3FEA56A3BCC} $(MSBuildProjectName) Debug Win32 - {D12584A6-2527-4C8D-B135-1ECB73201A21} + {67118C02-9183-4F2D-8E60-3D4F02B62EA9} diff --git a/network/ndis/mux/notifyob/mux.vcxproj.Filters b/network/ndis/mux/notifyob/mux.vcxproj.Filters index 5e6a78d7..902b402e 100644 --- a/network/ndis/mux/notifyob/mux.vcxproj.Filters +++ b/network/ndis/mux/notifyob/mux.vcxproj.Filters @@ -3,15 +3,15 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {D2FB3445-77C3-4BD9-BA51-E5B0D6C08BEE} + {45A756E2-A979-4163-A3FF-66314E15E3F3} h;hpp;hxx;hm;inl;inc;xsd - {B20B5A99-B397-40F6-A904-F5239D1E7041} + {60F0A149-A97B-4AB6-A5FB-44A2D183B1ED} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {EE9C4162-6737-4614-941D-1942E86D02B7} + {EA529E48-8EB7-40F7-A3CA-AE7AC13FF93D} diff --git a/network/ndis/ndisprot/6x/ndisprot60.sln b/network/ndis/ndisprot/6x/ndisprot60.sln index 69c4b38f..474b2ff0 100644 --- a/network/ndis/ndisprot/6x/ndisprot60.sln +++ b/network/ndis/ndisprot/6x/ndisprot60.sln @@ -3,19 +3,19 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{1D62C0DD-3166-4212-A396-0C32A8133256}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{09F8A71E-BD45-42F5-8CB5-82F137773350}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{464025BB-16D1-4B86-ACF9-3F9EF08B865E}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{40B41B7C-63E0-4BEC-9BF6-2AE9002E0670}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{247D6A97-6A59-4E29-BA6F-B20EEE3AE3B6}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{7B0AA49C-0A8C-4EED-8ACE-1A80EC2E5AEB}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{8E714E74-8167-4A2E-B5D9-97506C801DB0}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{20D7328F-9929-4D3A-BC1D-08E2442A929D}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot60", "sys\60\ndisprot60.vcxproj", "{D8336C3A-8FB7-46CA-82A9-209B7EB4339D}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot60", "sys\60\ndisprot60.vcxproj", "{F27914B8-F3D9-4164-BF33-42BBFA19AED4}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot630", "sys\630\ndisprot630.vcxproj", "{6EE064DA-28D2-478C-BC25-FD04382FAD44}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ndisprot630", "sys\630\ndisprot630.vcxproj", "{C0748EAB-F425-488A-9F39-77D5DE2DD251}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prottest", "test\prottest.vcxproj", "{62009D19-D80B-46B8-8360-D84AA57DD567}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "prottest", "test\prottest.vcxproj", "{34A953AA-28CB-472E-B438-1BE26FDF1D54}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -25,39 +25,39 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Debug|Win32.ActiveCfg = Debug|Win32 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Debug|Win32.Build.0 = Debug|Win32 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Release|Win32.ActiveCfg = Release|Win32 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Release|Win32.Build.0 = Release|Win32 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Debug|x64.ActiveCfg = Debug|x64 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Debug|x64.Build.0 = Debug|x64 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Release|x64.ActiveCfg = Release|x64 - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D}.Release|x64.Build.0 = Release|x64 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Debug|Win32.ActiveCfg = Debug|Win32 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Debug|Win32.Build.0 = Debug|Win32 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Release|Win32.ActiveCfg = Release|Win32 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Release|Win32.Build.0 = Release|Win32 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Debug|x64.ActiveCfg = Debug|x64 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Debug|x64.Build.0 = Debug|x64 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Release|x64.ActiveCfg = Release|x64 - {6EE064DA-28D2-478C-BC25-FD04382FAD44}.Release|x64.Build.0 = Release|x64 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Debug|Win32.ActiveCfg = Debug|Win32 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Debug|Win32.Build.0 = Debug|Win32 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Release|Win32.ActiveCfg = Release|Win32 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Release|Win32.Build.0 = Release|Win32 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Debug|x64.ActiveCfg = Debug|x64 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Debug|x64.Build.0 = Debug|x64 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Release|x64.ActiveCfg = Release|x64 - {62009D19-D80B-46B8-8360-D84AA57DD567}.Release|x64.Build.0 = Release|x64 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Debug|Win32.ActiveCfg = Debug|Win32 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Debug|Win32.Build.0 = Debug|Win32 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Release|Win32.ActiveCfg = Release|Win32 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Release|Win32.Build.0 = Release|Win32 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Debug|x64.ActiveCfg = Debug|x64 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Debug|x64.Build.0 = Debug|x64 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Release|x64.ActiveCfg = Release|x64 + {F27914B8-F3D9-4164-BF33-42BBFA19AED4}.Release|x64.Build.0 = Release|x64 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Debug|Win32.ActiveCfg = Debug|Win32 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Debug|Win32.Build.0 = Debug|Win32 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Release|Win32.ActiveCfg = Release|Win32 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Release|Win32.Build.0 = Release|Win32 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Debug|x64.ActiveCfg = Debug|x64 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Debug|x64.Build.0 = Debug|x64 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Release|x64.ActiveCfg = Release|x64 + {C0748EAB-F425-488A-9F39-77D5DE2DD251}.Release|x64.Build.0 = Release|x64 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Debug|Win32.ActiveCfg = Debug|Win32 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Debug|Win32.Build.0 = Debug|Win32 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Release|Win32.ActiveCfg = Release|Win32 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Release|Win32.Build.0 = Release|Win32 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Debug|x64.ActiveCfg = Debug|x64 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Debug|x64.Build.0 = Debug|x64 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Release|x64.ActiveCfg = Release|x64 + {34A953AA-28CB-472E-B438-1BE26FDF1D54}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D} = {1D62C0DD-3166-4212-A396-0C32A8133256} - {6EE064DA-28D2-478C-BC25-FD04382FAD44} = {247D6A97-6A59-4E29-BA6F-B20EEE3AE3B6} - {62009D19-D80B-46B8-8360-D84AA57DD567} = {8E714E74-8167-4A2E-B5D9-97506C801DB0} - {1D62C0DD-3166-4212-A396-0C32A8133256} = {464025BB-16D1-4B86-ACF9-3F9EF08B865E} - {247D6A97-6A59-4E29-BA6F-B20EEE3AE3B6} = {464025BB-16D1-4B86-ACF9-3F9EF08B865E} + {F27914B8-F3D9-4164-BF33-42BBFA19AED4} = {09F8A71E-BD45-42F5-8CB5-82F137773350} + {C0748EAB-F425-488A-9F39-77D5DE2DD251} = {7B0AA49C-0A8C-4EED-8ACE-1A80EC2E5AEB} + {34A953AA-28CB-472E-B438-1BE26FDF1D54} = {20D7328F-9929-4D3A-BC1D-08E2442A929D} + {09F8A71E-BD45-42F5-8CB5-82F137773350} = {40B41B7C-63E0-4BEC-9BF6-2AE9002E0670} + {7B0AA49C-0A8C-4EED-8ACE-1A80EC2E5AEB} = {40B41B7C-63E0-4BEC-9BF6-2AE9002E0670} EndGlobalSection EndGlobal diff --git a/network/ndis/ndisprot/6x/sys/60/ndisprot60.inf b/network/ndis/ndisprot/6x/sys/60/ndisprot60.inf index 985a651a..92f30001 100644 Binary files a/network/ndis/ndisprot/6x/sys/60/ndisprot60.inf and b/network/ndis/ndisprot/6x/sys/60/ndisprot60.inf differ diff --git a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj index de9c1877..0f930a7b 100644 --- a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj +++ b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj @@ -19,11 +19,11 @@ - {D8336C3A-8FB7-46CA-82A9-209B7EB4339D} + {F27914B8-F3D9-4164-BF33-42BBFA19AED4} $(MSBuildProjectName) Debug Win32 - {D4489723-0609-411D-B3A9-258AF098B21A} + {2D8FA4FC-0D81-4E0A-B63E-A6622384ED94} diff --git a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters index 7e2f4a07..fb3baf30 100644 --- a/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters +++ b/network/ndis/ndisprot/6x/sys/60/ndisprot60.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {26EA05C5-4E1D-434E-B936-33352970A161} + {9D351BB6-73CE-4A43-B46D-1AB2965DAF8D} h;hpp;hxx;hm;inl;inc;xsd - {F4571230-8339-4A49-AD38-78962F103829} + {AF2F3419-9435-4B22-84EB-31847FCD1CAF} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {DFDB6D3D-533A-4562-BD43-338AB736860B} + {370C2F13-6981-4E4B-B92F-7A384F46242A} inf;inv;inx;mof;mc; - {0C4980F7-5BA2-400E-A1D2-29520A8F0761} + {777425E1-9B05-4BA9-8CB5-3324B6FEA824} diff --git a/network/ndis/ndisprot/6x/sys/630/ndisprot630.inf b/network/ndis/ndisprot/6x/sys/630/ndisprot630.inf index 6c152a02..f992ad08 100644 Binary files a/network/ndis/ndisprot/6x/sys/630/ndisprot630.inf and b/network/ndis/ndisprot/6x/sys/630/ndisprot630.inf differ diff --git a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj index 676449b8..d71b2b54 100644 --- a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj +++ b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj @@ -19,11 +19,11 @@ - {6EE064DA-28D2-478C-BC25-FD04382FAD44} + {C0748EAB-F425-488A-9F39-77D5DE2DD251} $(MSBuildProjectName) Debug Win32 - {A72934EE-A162-44C2-9268-572F34455685} + {7354BBA5-44E7-4346-8B50-AD13E3CACB81} diff --git a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters index 545dfd91..ef0ceb63 100644 --- a/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters +++ b/network/ndis/ndisprot/6x/sys/630/ndisprot630.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {92710B14-4232-4967-AEA5-6DA05EE52B03} + {766B6D2A-1481-456F-A4F3-9FAB955141A7} h;hpp;hxx;hm;inl;inc;xsd - {4CE674DD-0F36-49B2-AF98-8252D938425C} + {073C12EF-29DC-44D8-A97B-4E3EB3ABBD30} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {8F3006B3-3A4B-4094-AA85-3461E4C4FEF2} + {CE79DDD5-05DE-41BB-AF6F-78689FA3C4EC} inf;inv;inx;mof;mc; - {682C4A58-1F91-422F-8E77-84FBAF36215A} + {2507FC52-16AF-4448-BEBC-046EB69598BE} diff --git a/network/ndis/ndisprot/6x/sys/recv.c b/network/ndis/ndisprot/6x/sys/recv.c index 71c867f1..a7291992 100644 --- a/network/ndis/ndisprot/6x/sys/recv.c +++ b/network/ndis/ndisprot/6x/sys/recv.c @@ -81,7 +81,7 @@ Return Value: // // Try to get a virtual address for the MDL. // - if (MmGetSystemAddressForMdlSafe(pIrp->MdlAddress, NormalPagePriority) == NULL) + if (MmGetSystemAddressForMdlSafe(pIrp->MdlAddress, NormalPagePriority | MdlMappingNoExecute) == NULL) { DEBUGP(DL_FATAL, ("Read: MmGetSystemAddr failed for IRP %p, MDL %p\n", pIrp, pIrp->MdlAddress)); @@ -314,7 +314,7 @@ Return Value: // pDst = NULL; - NdisQueryMdl(pIrp->MdlAddress, &pDst, &BytesRemaining, NormalPagePriority); + NdisQueryMdl(pIrp->MdlAddress, &pDst, &BytesRemaining, NormalPagePriority | MdlMappingNoExecute); NPROT_ASSERT(pDst != NULL); // since it was already mapped _Analysis_assume_(pDst != NULL); @@ -333,7 +333,7 @@ Return Value: while (BytesRemaining && (pMdl != NULL) && SrcTotalLength) { pSrc = NULL; - NdisQueryMdl(pMdl, &pSrc, &BytesAvailable, NormalPagePriority); + NdisQueryMdl(pMdl, &pSrc, &BytesAvailable, NormalPagePriority | MdlMappingNoExecute); if (pSrc == NULL) { @@ -489,7 +489,7 @@ Return Value: pMdl, &pEthHeader, &BufferLength, - NormalPagePriority); + NormalPagePriority | MdlMappingNoExecute); } if (pEthHeader == NULL) @@ -938,7 +938,7 @@ Return Value: pMdl, (PVOID *)&pCopyData, &BufferLength, - NormalPagePriority); + NormalPagePriority | MdlMappingNoExecute); NPROT_ASSERT(BufferLength == TotalLength); diff --git a/network/ndis/ndisprot/6x/sys/send.c b/network/ndis/ndisprot/6x/sys/send.c index b2be7300..73cc282b 100644 --- a/network/ndis/ndisprot/6x/sys/send.c +++ b/network/ndis/ndisprot/6x/sys/send.c @@ -88,7 +88,7 @@ Return Value: // pEthHeader = NULL; - NdisQueryMdl(pIrp->MdlAddress, &pEthHeader, &DataLength, NormalPagePriority); + NdisQueryMdl(pIrp->MdlAddress, &pEthHeader, &DataLength, NormalPagePriority | MdlMappingNoExecute); if (pEthHeader == NULL) { @@ -222,7 +222,7 @@ Return Value: { PUCHAR pData; - pData = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority); + pData = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority | MdlMappingNoExecute); NPROT_ASSERT(pEthHeader == pData); DEBUGP(DL_VERY_LOUD, diff --git a/network/ndis/ndisprot/6x/test/prottest.vcxproj b/network/ndis/ndisprot/6x/test/prottest.vcxproj index a0c8b84a..9ef15c25 100644 --- a/network/ndis/ndisprot/6x/test/prottest.vcxproj +++ b/network/ndis/ndisprot/6x/test/prottest.vcxproj @@ -19,11 +19,11 @@ - {62009D19-D80B-46B8-8360-D84AA57DD567} + {34A953AA-28CB-472E-B438-1BE26FDF1D54} $(MSBuildProjectName) Debug Win32 - {97FEB721-B7B8-47E2-8626-1014E491740F} + {80BF7199-3D05-47CD-85FC-CEE847224F3E} diff --git a/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters b/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters index b234c0e7..d227a297 100644 --- a/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters +++ b/network/ndis/ndisprot/6x/test/prottest.vcxproj.Filters @@ -3,15 +3,15 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {850BEAB1-E8E0-47E1-8E5A-6658B932B7D8} + {A1FD5B83-AA65-4E6F-8F3F-B73275FC0315} h;hpp;hxx;hm;inl;inc;xsd - {F8344599-BDE9-4143-A6B1-F26CC295C368} + {EF5DC367-401C-48DB-8A87-F303D8ABD840} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {9473E458-864C-4149-B1B7-95A8BFEF1BCE} + {9F746E51-A77B-465E-B14B-2C6A02DD8C3F} diff --git a/network/ndis/ndisprot_kmdf/60/ndisprot.inx b/network/ndis/ndisprot_kmdf/60/ndisprot.inx index c45f23e5..a25033cf 100644 Binary files a/network/ndis/ndisprot_kmdf/60/ndisprot.inx and b/network/ndis/ndisprot_kmdf/60/ndisprot.inx differ diff --git a/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj b/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj index 0dfe75d5..4aac032f 100644 --- a/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj +++ b/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj @@ -19,14 +19,14 @@ - {85BE7B07-69F5-4BC1-A755-483A9051AAC4} + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680} $(MSBuildProjectName) 1 false true Debug Win32 - {5FFC7B32-58A8-4689-BB54-F9599B4ADBA4} + {BDE78A2F-D982-42E4-9E9E-95DA20A2BBAA} diff --git a/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj.Filters b/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj.Filters index f7dd5657..fceec83e 100644 --- a/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj.Filters +++ b/network/ndis/ndisprot_kmdf/60/nprt6wdf.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {E4D652D6-CACA-4396-AD3B-663DF32E592D} + {80A01E55-3191-4D6B-998C-AFB39E2FDC54} h;hpp;hxx;hm;inl;inc;xsd - {6E73277A-3F21-4FCF-A20D-60158B809E3F} + {64859B48-AA38-4234-94F3-B8BC6B373604} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {054D1114-7FD2-462E-A612-2ED4BC48F6EF} + {AA5FE339-6D5C-4A03-B8FF-06288B3110A4} inf;inv;inx;mof;mc; - {3B2480E6-3700-4AEB-A0B5-7D3C29E29B1B} + {4031EF35-F0B5-47A2-9817-91B0AAB10A76} diff --git a/network/ndis/ndisprot_kmdf/60/recv.c b/network/ndis/ndisprot_kmdf/60/recv.c index 75b4da4d..742fed44 100644 --- a/network/ndis/ndisprot_kmdf/60/recv.c +++ b/network/ndis/ndisprot_kmdf/60/recv.c @@ -194,7 +194,7 @@ Return Value: break; } - pDst = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority); + pDst = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority | MdlMappingNoExecute); if (pDst == NULL) { DEBUGP(DL_FATAL, ("Read: MmGetSystemAddr failed for Request %p, MDL %p\n", @@ -235,7 +235,7 @@ Return Value: while (BytesRemaining && (pMdl != NULL)) { pSrc = NULL; - NdisQueryMdl(pMdl, &pSrc, &BytesAvailable, NormalPagePriority); + NdisQueryMdl(pMdl, &pSrc, &BytesAvailable, NormalPagePriority | MdlMappingNoExecute); if (pSrc == NULL) { @@ -380,7 +380,7 @@ Return Value: pMdl, &pEthHeader, &BufferLength, - NormalPagePriority); + NormalPagePriority | MdlMappingNoExecute); } if (pEthHeader == NULL) @@ -803,7 +803,7 @@ Return Value: pMdl, (PVOID *)&pCopyData, &BufferLength, - NormalPagePriority); + NormalPagePriority | MdlMappingNoExecute); NPROT_ASSERT(BufferLength == TotalLength); @@ -980,7 +980,7 @@ Caller IRQL: Must be running at IRQL <= DISPATCH_LEVEL. SourceByteCount = BytesRemaining; } - SourceVa = MmGetSystemAddressForMdlSafe(SourceMdl, LowPagePriority); + SourceVa = MmGetSystemAddressForMdlSafe(SourceMdl, LowPagePriority | MdlMappingNoExecute); if (SourceVa == NULL) { return STATUS_INSUFFICIENT_RESOURCES; @@ -994,7 +994,7 @@ Caller IRQL: Must be running at IRQL <= DISPATCH_LEVEL. TargetByteCount = MmGetMdlByteCount(TargetMdl) - TargetOffset; - TargetVa = MmGetSystemAddressForMdlSafe(TargetMdl, LowPagePriority); + TargetVa = MmGetSystemAddressForMdlSafe(TargetMdl, LowPagePriority | MdlMappingNoExecute); if (TargetVa == NULL) { return STATUS_INSUFFICIENT_RESOURCES; @@ -1044,7 +1044,7 @@ Caller IRQL: Must be running at IRQL <= DISPATCH_LEVEL. } while(TargetByteCount == 0); TargetVa = MmGetSystemAddressForMdlSafe(TargetMdl, - LowPagePriority); + LowPagePriority | MdlMappingNoExecute); if (TargetVa == NULL) { return STATUS_INSUFFICIENT_RESOURCES; @@ -1079,7 +1079,7 @@ Caller IRQL: Must be running at IRQL <= DISPATCH_LEVEL. SourceByteCount = BytesRemaining; } SourceVa = MmGetSystemAddressForMdlSafe(SourceMdl, - LowPagePriority); + LowPagePriority | MdlMappingNoExecute); if (SourceVa == NULL) { return STATUS_INSUFFICIENT_RESOURCES; diff --git a/network/ndis/ndisprot_kmdf/60/send.c b/network/ndis/ndisprot_kmdf/60/send.c index 561c49f0..5c009939 100644 --- a/network/ndis/ndisprot_kmdf/60/send.c +++ b/network/ndis/ndisprot_kmdf/60/send.c @@ -104,7 +104,7 @@ Return Value: // // Try to get a virtual address for the MDL. // - pEthHeader = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority); + pEthHeader = MmGetSystemAddressForMdlSafe(pMdl, NormalPagePriority | MdlMappingNoExecute); if (pEthHeader == NULL) { diff --git a/network/ndis/ndisprot_kmdf/Package/package.VcxProj b/network/ndis/ndisprot_kmdf/Package/package.VcxProj index 4f36efdb..44cbc9bb 100644 --- a/network/ndis/ndisprot_kmdf/Package/package.VcxProj +++ b/network/ndis/ndisprot_kmdf/Package/package.VcxProj @@ -20,10 +20,10 @@ - {85BE7B07-69F5-4BC1-A755-483A9051AAC4} + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680} - {9B2221A3-32D0-4769-8092-4F9F98043A63} + {E92C4A1E-396E-4CAF-A5DB-44901F07C515} @@ -35,8 +35,8 @@ - {613FEF0A-2AE9-46B7-994C-69D95973B366} - {86285A85-2FEA-4AEF-8233-356041B6282B} + {346D9284-B69E-40A5-9584-084D7BE578B2} + {9B10F9EB-6405-4756-A5C7-FB9F5A528BE5} $(MSBuildProjectName) diff --git a/network/ndis/ndisprot_kmdf/Package/package.VcxProj.Filters b/network/ndis/ndisprot_kmdf/Package/package.VcxProj.Filters index 23795007..4e8f5d9a 100644 --- a/network/ndis/ndisprot_kmdf/Package/package.VcxProj.Filters +++ b/network/ndis/ndisprot_kmdf/Package/package.VcxProj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {89CB9D79-7DA6-49D6-806B-B901625DE978} + {D2EB0C78-1A46-4820-8C97-48C2ACDE1DB7} h;hpp;hxx;hm;inl;inc;xsd - {55E7969D-0357-4614-BFC9-8A045E04B4E1} + {18454B81-D5E4-41B2-A8F6-981ADC6B76F3} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {A4F0352B-5991-430C-815D-30F30B63E33B} + {B5D0C371-0619-4231-9302-DAE245241204} inf;inv;inx;mof;mc; - {593070BD-C864-4041-9213-2688C7CC3A7D} + {F7B4D404-2912-43E3-BB9E-48B914053848} \ No newline at end of file diff --git a/network/ndis/ndisprot_kmdf/ndisprot_kmdf.sln b/network/ndis/ndisprot_kmdf/ndisprot_kmdf.sln index 15a50f20..e8eb8891 100644 --- a/network/ndis/ndisprot_kmdf/ndisprot_kmdf.sln +++ b/network/ndis/ndisprot_kmdf/ndisprot_kmdf.sln @@ -3,17 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package", "Package", "{FE73654B-E5D8-428F-967F-B9396A8B0DA3}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Package", "Package", "{1349FD28-83C5-4368-A01F-3460B3D43BE5}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifyob", "Notifyob", "{DB46D8C9-4FFA-41D6-93A9-7315ADD0879A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Notifyob", "Notifyob", "{8B63109F-4592-442B-95FB-56D94EA535D4}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{AA65D22A-3101-4BE1-9F7B-1835DEA3D22A}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{F9B84962-B7B2-4592-9AFC-645D1EEEACA8}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "Package\package.VcxProj", "{613FEF0A-2AE9-46B7-994C-69D95973B366}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "package", "Package\package.VcxProj", "{346D9284-B69E-40A5-9584-084D7BE578B2}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProtNotify", "notifyob\ProtNotify.vcxproj", "{9B2221A3-32D0-4769-8092-4F9F98043A63}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ProtNotify", "notifyob\ProtNotify.vcxproj", "{E92C4A1E-396E-4CAF-A5DB-44901F07C515}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nprt6wdf", "60\nprt6wdf.vcxproj", "{85BE7B07-69F5-4BC1-A755-483A9051AAC4}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nprt6wdf", "60\nprt6wdf.vcxproj", "{D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -23,37 +23,37 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Debug|Win32.ActiveCfg = Debug|Win32 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Debug|Win32.Build.0 = Debug|Win32 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Release|Win32.ActiveCfg = Release|Win32 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Release|Win32.Build.0 = Release|Win32 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Debug|x64.ActiveCfg = Debug|x64 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Debug|x64.Build.0 = Debug|x64 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Release|x64.ActiveCfg = Release|x64 - {613FEF0A-2AE9-46B7-994C-69D95973B366}.Release|x64.Build.0 = Release|x64 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Debug|Win32.ActiveCfg = Debug|Win32 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Debug|Win32.Build.0 = Debug|Win32 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Release|Win32.ActiveCfg = Release|Win32 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Release|Win32.Build.0 = Release|Win32 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Debug|x64.ActiveCfg = Debug|x64 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Debug|x64.Build.0 = Debug|x64 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Release|x64.ActiveCfg = Release|x64 - {9B2221A3-32D0-4769-8092-4F9F98043A63}.Release|x64.Build.0 = Release|x64 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Debug|Win32.ActiveCfg = Debug|Win32 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Debug|Win32.Build.0 = Debug|Win32 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Release|Win32.ActiveCfg = Release|Win32 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Release|Win32.Build.0 = Release|Win32 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Debug|x64.ActiveCfg = Debug|x64 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Debug|x64.Build.0 = Debug|x64 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Release|x64.ActiveCfg = Release|x64 - {85BE7B07-69F5-4BC1-A755-483A9051AAC4}.Release|x64.Build.0 = Release|x64 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Debug|Win32.ActiveCfg = Debug|Win32 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Debug|Win32.Build.0 = Debug|Win32 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Release|Win32.ActiveCfg = Release|Win32 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Release|Win32.Build.0 = Release|Win32 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Debug|x64.ActiveCfg = Debug|x64 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Debug|x64.Build.0 = Debug|x64 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Release|x64.ActiveCfg = Release|x64 + {346D9284-B69E-40A5-9584-084D7BE578B2}.Release|x64.Build.0 = Release|x64 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Debug|Win32.ActiveCfg = Debug|Win32 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Debug|Win32.Build.0 = Debug|Win32 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Release|Win32.ActiveCfg = Release|Win32 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Release|Win32.Build.0 = Release|Win32 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Debug|x64.ActiveCfg = Debug|x64 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Debug|x64.Build.0 = Debug|x64 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Release|x64.ActiveCfg = Release|x64 + {E92C4A1E-396E-4CAF-A5DB-44901F07C515}.Release|x64.Build.0 = Release|x64 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Debug|Win32.ActiveCfg = Debug|Win32 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Debug|Win32.Build.0 = Debug|Win32 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Release|Win32.ActiveCfg = Release|Win32 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Release|Win32.Build.0 = Release|Win32 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Debug|x64.ActiveCfg = Debug|x64 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Debug|x64.Build.0 = Debug|x64 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Release|x64.ActiveCfg = Release|x64 + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {613FEF0A-2AE9-46B7-994C-69D95973B366} = {FE73654B-E5D8-428F-967F-B9396A8B0DA3} - {9B2221A3-32D0-4769-8092-4F9F98043A63} = {DB46D8C9-4FFA-41D6-93A9-7315ADD0879A} - {85BE7B07-69F5-4BC1-A755-483A9051AAC4} = {AA65D22A-3101-4BE1-9F7B-1835DEA3D22A} + {346D9284-B69E-40A5-9584-084D7BE578B2} = {1349FD28-83C5-4368-A01F-3460B3D43BE5} + {E92C4A1E-396E-4CAF-A5DB-44901F07C515} = {8B63109F-4592-442B-95FB-56D94EA535D4} + {D01AA8E0-4817-4C0F-BDD7-B367F1A4B680} = {F9B84962-B7B2-4592-9AFC-645D1EEEACA8} EndGlobalSection EndGlobal diff --git a/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj b/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj index eede7f0c..da20b3b2 100644 --- a/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj +++ b/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj @@ -19,7 +19,7 @@ - {9B2221A3-32D0-4769-8092-4F9F98043A63} + {E92C4A1E-396E-4CAF-A5DB-44901F07C515} $(MSBuildProjectName) 1 11 @@ -27,7 +27,7 @@ true Debug Win32 - {3264ACE7-D19C-4948-B829-8E1BE32CC07D} + {27DF4F3B-383E-497C-8DBB-DFA4C1A27708} diff --git a/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj.Filters b/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj.Filters index 66da4399..2b0e587a 100644 --- a/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj.Filters +++ b/network/ndis/ndisprot_kmdf/notifyob/ProtNotify.vcxproj.Filters @@ -3,15 +3,15 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {46131C3C-10A8-41E3-9DA7-8E3B89E16D30} + {6E5EE8C9-ED2A-40AD-8E8A-375EBC7D128E} h;hpp;hxx;hm;inl;inc;xsd - {00C80488-71A9-4598-BCF9-717F096DF9B1} + {4D844843-A153-45F4-B76F-2BBBD92A56C8} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {2DF3CEF8-49DE-4280-A200-9E821B9D3C04} + {E70D55C3-EC56-4430-97F2-4899522099D1} diff --git a/network/ndis/netvmini/6x/60/netvmini60.vcxproj b/network/ndis/netvmini/6x/60/netvmini60.vcxproj index d278b934..0e361bda 100644 --- a/network/ndis/netvmini/6x/60/netvmini60.vcxproj +++ b/network/ndis/netvmini/6x/60/netvmini60.vcxproj @@ -19,11 +19,11 @@ - {B141DA60-040A-41CF-8D57-477AA9ABB743} + {50458BE9-A423-44C1-AF44-21D4B5233063} $(MSBuildProjectName) Debug Win32 - {F6634E5E-8F90-40D9-BE58-42CF856B00D2} + {68DE2BFB-DBF2-4102-B6D9-5C3D45F287A0} diff --git a/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters b/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters index 68dd2474..a48fa573 100644 --- a/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters +++ b/network/ndis/netvmini/6x/60/netvmini60.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {1FAC931A-0EDD-4CD0-9017-5A2412CE9732} + {56F9A5EA-1486-4EE7-8BA0-B1BF57D0E43C} h;hpp;hxx;hm;inl;inc;xsd - {2B2AAD08-E00A-4ED1-BBD5-77F9535D796D} + {CD736472-4C15-48A4-AA49-E7504430AB74} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {A563DE90-B977-4364-BF64-6CAC13B90435} + {81231740-0300-4CC2-8D01-AA32FB32CFA6} inf;inv;inx;mof;mc; - {36A97725-AE42-4EBD-8FEB-1F91A7030AF2} + {B76F6C65-12C8-4CA2-9BFE-4EE31CADE60D} diff --git a/network/ndis/netvmini/6x/620/netvmini620.vcxproj b/network/ndis/netvmini/6x/620/netvmini620.vcxproj index 0d6830d4..088ba237 100644 --- a/network/ndis/netvmini/6x/620/netvmini620.vcxproj +++ b/network/ndis/netvmini/6x/620/netvmini620.vcxproj @@ -19,11 +19,11 @@ - {F6C9791E-8975-472B-9851-63C91C220C77} + {062B87F8-6021-4BE2-B677-3AEF2456CBA0} $(MSBuildProjectName) Debug Win32 - {380FA876-25EB-43FF-97D9-BDA9335C398D} + {A9AA92D6-CEFF-4533-A39F-156429EEE805} diff --git a/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters b/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters index a6dec852..eb65f843 100644 --- a/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters +++ b/network/ndis/netvmini/6x/620/netvmini620.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {FBACAA72-1D30-4675-B421-2DA331729033} + {1DEEE801-DDA1-46A7-AA42-2C58C7E0BBDD} h;hpp;hxx;hm;inl;inc;xsd - {264EB6DE-5BE0-4C2C-A950-150060D39476} + {F09FEAD2-319C-4CA0-8884-AE3AD0C87A7D} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {3F3AB143-503A-4CA4-8F97-49EF709CC3EC} + {0343A7AF-6A54-41DE-B2D4-BC7D0FA959B4} inf;inv;inx;mof;mc; - {BEB3FA42-4236-45C6-A2F9-A5DD3E2C283B} + {D8B6A86B-A984-4AAC-8E74-5D2ECD8797B4} diff --git a/network/ndis/netvmini/6x/630/netvmini630.vcxproj b/network/ndis/netvmini/6x/630/netvmini630.vcxproj index 96a8175b..a5ae87e4 100644 --- a/network/ndis/netvmini/6x/630/netvmini630.vcxproj +++ b/network/ndis/netvmini/6x/630/netvmini630.vcxproj @@ -19,11 +19,11 @@ - {CB768EFE-18C4-4621-BCD2-A08AD88E782E} + {7B9C33BA-F817-42B9-A355-9E54854CE9D6} $(MSBuildProjectName) Debug Win32 - {0DDF32DB-1657-4CE9-9F4A-DABA52BBDDE5} + {173BE266-31F2-4D74-A9C1-35B20D4DD5EA} diff --git a/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters b/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters index 57acadcd..73baeda8 100644 --- a/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters +++ b/network/ndis/netvmini/6x/630/netvmini630.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {CE65B986-17A1-4A63-8E68-A81A032C10DE} + {1FEAFB34-8DD3-4B56-A9A1-F6572B7E94F0} h;hpp;hxx;hm;inl;inc;xsd - {93F7C1D6-DA0E-4F71-A7FB-A13F40A9F36D} + {4E98F484-F310-4E1A-A097-D7ADBAE1351F} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {769948AE-BBF6-4212-AB7B-EBE9A721768B} + {D8093E47-6AB1-4358-AC7C-7ACE55606993} inf;inv;inx;mof;mc; - {1E0F6197-640A-42EE-8B60-19F429CF8546} + {7E4706EB-3B87-4AB9-BA5C-93CC3E3B78CA} diff --git a/network/ndis/netvmini/6x/mphal.c b/network/ndis/netvmini/6x/mphal.c index c7747319..e363f613 100644 --- a/network/ndis/netvmini/6x/mphal.c +++ b/network/ndis/netvmini/6x/mphal.c @@ -499,7 +499,7 @@ Notes: // Map MDL memory to System Address Space. LowPagePriority means mapping may fail if // system is low on memory resources. // - PUCHAR SrcMemory = MmGetSystemAddressForMdlSafe(CurrentMdl, LowPagePriority); + PUCHAR SrcMemory = MmGetSystemAddressForMdlSafe(CurrentMdl, LowPagePriority | MdlMappingNoExecute); ULONG Length = MmGetMdlByteCount(CurrentMdl); if (!SrcMemory) { diff --git a/network/ndis/netvmini/6x/netvmini.sln b/network/ndis/netvmini/6x/netvmini.sln index c9f7b86e..d42e00a0 100644 --- a/network/ndis/netvmini/6x/netvmini.sln +++ b/network/ndis/netvmini/6x/netvmini.sln @@ -3,17 +3,17 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{946F3B99-3F33-4464-B3A6-588ABFD005AA}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "60", "60", "{0D16B31B-2170-40BA-8850-F16E85EE02F0}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "620", "620", "{64A56FB2-256D-4064-957E-D65A8503EF37}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "620", "620", "{60E2C616-EC5B-4B24-ADDD-1BE70657EDEC}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{1BBB3B2F-E670-4DED-B558-FADB5856C2DC}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "630", "630", "{C6046890-63CF-4299-B25C-6C97B4ED890A}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini60", "60\netvmini60.vcxproj", "{B141DA60-040A-41CF-8D57-477AA9ABB743}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini60", "60\netvmini60.vcxproj", "{50458BE9-A423-44C1-AF44-21D4B5233063}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini620", "620\netvmini620.vcxproj", "{F6C9791E-8975-472B-9851-63C91C220C77}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini620", "620\netvmini620.vcxproj", "{062B87F8-6021-4BE2-B677-3AEF2456CBA0}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini630", "630\netvmini630.vcxproj", "{CB768EFE-18C4-4621-BCD2-A08AD88E782E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "netvmini630", "630\netvmini630.vcxproj", "{7B9C33BA-F817-42B9-A355-9E54854CE9D6}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -23,37 +23,37 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Debug|Win32.ActiveCfg = Debug|Win32 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Debug|Win32.Build.0 = Debug|Win32 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Release|Win32.ActiveCfg = Release|Win32 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Release|Win32.Build.0 = Release|Win32 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Debug|x64.ActiveCfg = Debug|x64 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Debug|x64.Build.0 = Debug|x64 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Release|x64.ActiveCfg = Release|x64 - {B141DA60-040A-41CF-8D57-477AA9ABB743}.Release|x64.Build.0 = Release|x64 - {F6C9791E-8975-472B-9851-63C91C220C77}.Debug|Win32.ActiveCfg = Debug|Win32 - {F6C9791E-8975-472B-9851-63C91C220C77}.Debug|Win32.Build.0 = Debug|Win32 - {F6C9791E-8975-472B-9851-63C91C220C77}.Release|Win32.ActiveCfg = Release|Win32 - {F6C9791E-8975-472B-9851-63C91C220C77}.Release|Win32.Build.0 = Release|Win32 - {F6C9791E-8975-472B-9851-63C91C220C77}.Debug|x64.ActiveCfg = Debug|x64 - {F6C9791E-8975-472B-9851-63C91C220C77}.Debug|x64.Build.0 = Debug|x64 - {F6C9791E-8975-472B-9851-63C91C220C77}.Release|x64.ActiveCfg = Release|x64 - {F6C9791E-8975-472B-9851-63C91C220C77}.Release|x64.Build.0 = Release|x64 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Debug|Win32.ActiveCfg = Debug|Win32 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Debug|Win32.Build.0 = Debug|Win32 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Release|Win32.ActiveCfg = Release|Win32 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Release|Win32.Build.0 = Release|Win32 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Debug|x64.ActiveCfg = Debug|x64 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Debug|x64.Build.0 = Debug|x64 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Release|x64.ActiveCfg = Release|x64 - {CB768EFE-18C4-4621-BCD2-A08AD88E782E}.Release|x64.Build.0 = Release|x64 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Debug|Win32.ActiveCfg = Debug|Win32 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Debug|Win32.Build.0 = Debug|Win32 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Release|Win32.ActiveCfg = Release|Win32 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Release|Win32.Build.0 = Release|Win32 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Debug|x64.ActiveCfg = Debug|x64 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Debug|x64.Build.0 = Debug|x64 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Release|x64.ActiveCfg = Release|x64 + {50458BE9-A423-44C1-AF44-21D4B5233063}.Release|x64.Build.0 = Release|x64 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Debug|Win32.ActiveCfg = Debug|Win32 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Debug|Win32.Build.0 = Debug|Win32 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Release|Win32.ActiveCfg = Release|Win32 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Release|Win32.Build.0 = Release|Win32 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Debug|x64.ActiveCfg = Debug|x64 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Debug|x64.Build.0 = Debug|x64 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Release|x64.ActiveCfg = Release|x64 + {062B87F8-6021-4BE2-B677-3AEF2456CBA0}.Release|x64.Build.0 = Release|x64 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Debug|Win32.ActiveCfg = Debug|Win32 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Debug|Win32.Build.0 = Debug|Win32 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Release|Win32.ActiveCfg = Release|Win32 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Release|Win32.Build.0 = Release|Win32 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Debug|x64.ActiveCfg = Debug|x64 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Debug|x64.Build.0 = Debug|x64 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Release|x64.ActiveCfg = Release|x64 + {7B9C33BA-F817-42B9-A355-9E54854CE9D6}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {B141DA60-040A-41CF-8D57-477AA9ABB743} = {946F3B99-3F33-4464-B3A6-588ABFD005AA} - {F6C9791E-8975-472B-9851-63C91C220C77} = {64A56FB2-256D-4064-957E-D65A8503EF37} - {CB768EFE-18C4-4621-BCD2-A08AD88E782E} = {1BBB3B2F-E670-4DED-B558-FADB5856C2DC} + {50458BE9-A423-44C1-AF44-21D4B5233063} = {0D16B31B-2170-40BA-8850-F16E85EE02F0} + {062B87F8-6021-4BE2-B677-3AEF2456CBA0} = {60E2C616-EC5B-4B24-ADDD-1BE70657EDEC} + {7B9C33BA-F817-42B9-A355-9E54854CE9D6} = {C6046890-63CF-4299-B25C-6C97B4ED890A} EndGlobalSection EndGlobal diff --git a/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln b/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln index 4be1a134..7bbffb25 100644 --- a/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln +++ b/network/radio/HidSwitchDriverSample/HidSwitchDriverSample.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RadioSwitchHidUsbFx2", "RadioSwitchHidUsbFx2.vcxproj", "{B5BA81A6-4044-4AAA-9101-F6B84922B842}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RadioSwitchHidUsbFx2", "RadioSwitchHidUsbFx2.vcxproj", "{43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Debug|Win32.ActiveCfg = Debug|Win32 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Debug|Win32.Build.0 = Debug|Win32 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Release|Win32.ActiveCfg = Release|Win32 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Release|Win32.Build.0 = Release|Win32 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Debug|x64.ActiveCfg = Debug|x64 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Debug|x64.Build.0 = Debug|x64 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Release|x64.ActiveCfg = Release|x64 - {B5BA81A6-4044-4AAA-9101-F6B84922B842}.Release|x64.Build.0 = Release|x64 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Debug|Win32.Build.0 = Debug|Win32 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Release|Win32.ActiveCfg = Release|Win32 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Release|Win32.Build.0 = Release|Win32 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Debug|x64.ActiveCfg = Debug|x64 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Debug|x64.Build.0 = Debug|x64 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Release|x64.ActiveCfg = Release|x64 + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx index 69dee305..a1f0bf1a 100644 Binary files a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx and b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.inx differ diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj index a2c21dec..754c11c8 100644 --- a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj +++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj @@ -19,12 +19,12 @@ - {B5BA81A6-4044-4AAA-9101-F6B84922B842} + {43FD9C1A-290E-4FF7-8B6F-35A88A075DF8} $(MSBuildProjectName) 1 Debug Win32 - {B02E786E-7854-4691-9A77-2FC43BADC689} + {88093BCB-F03A-40B7-B648-891643B48CC0} diff --git a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters index 0bd5107d..9c0e4102 100644 --- a/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters +++ b/network/radio/HidSwitchDriverSample/RadioSwitchHidUsbFx2.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {53A053E8-9459-4AAE-8121-C8E18D611B9A} + {652E78B0-5E7D-4A38-BAF7-486EBD37CAF8} h;hpp;hxx;hm;inl;inc;xsd - {CD5A6D68-BA75-419E-8BC0-ECBAB00BE55B} + {D1C9D70E-E910-4C53-9624-EB5A85A5A36B} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {25DF7F05-F2BC-4531-AEFD-F9A4B083145B} + {91962FEB-66CF-4C7D-A911-BA196B70A87A} inf;inv;inx;mof;mc; - {D805F501-79BE-4A7A-B472-8EE48E64C4E2} + {DCB61952-1CBD-4DF7-A231-3432A7250271} diff --git a/network/radio/HidSwitchDriverSample/driver.c b/network/radio/HidSwitchDriverSample/driver.c index a14d4fc4..54e80dae 100644 --- a/network/radio/HidSwitchDriverSample/driver.c +++ b/network/radio/HidSwitchDriverSample/driver.c @@ -24,7 +24,7 @@ NTSTATUS DriverEntry (_In_ PDRIVER_OBJECT pDriverObject, _In_ PUNICODE_STRING ps // Initialize WPP Tracing WPP_INIT_TRACING(pDriverObject, pszRegistryPath); - TraceInfo(DBG_INIT, "(%!FUNC!) Enter -Sample Built %s %s\n", __DATE__, __TIME__); + TraceInfo(DBG_INIT, "(%!FUNC!) Enter -DriverEntry\n"); WDF_DRIVER_CONFIG_INIT(&config, HidFx2EvtDeviceAdd); diff --git a/network/radio/HidSwitchDriverSample/usb.c b/network/radio/HidSwitchDriverSample/usb.c index e6ac2da7..bacd1bce 100644 --- a/network/radio/HidSwitchDriverSample/usb.c +++ b/network/radio/HidSwitchDriverSample/usb.c @@ -66,7 +66,7 @@ HidFx2EvtDevicePrepareHardware( WDF_OBJECT_ATTRIBUTES_INIT(&attributes); attributes.ParentObject = hDevice; status = WdfMemoryCreate(&attributes, - NonPagedPool, + NonPagedPoolNx, 0, sizeof(USB_DEVICE_DESCRIPTOR), &pDevContext->hDeviceDescriptor, diff --git a/network/radio/RadioManagerSample/RadioManagerSample.sln b/network/radio/RadioManagerSample/RadioManagerSample.sln index 37eb8bd0..8f24bfc5 100644 --- a/network/radio/RadioManagerSample/RadioManagerSample.sln +++ b/network/radio/RadioManagerSample/RadioManagerSample.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SampleRM", "cpp\SampleRM.vcxproj", "{3A2C6344-A162-433C-B8DE-2282825DE084}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SampleRM", "cpp\SampleRM.vcxproj", "{1138E033-EEBF-4BA3-B74F-D51443EF5EE0}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {3A2C6344-A162-433C-B8DE-2282825DE084}.Debug|Win32.ActiveCfg = Debug|Win32 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Debug|Win32.Build.0 = Debug|Win32 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Release|Win32.ActiveCfg = Release|Win32 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Release|Win32.Build.0 = Release|Win32 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Debug|x64.ActiveCfg = Debug|x64 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Debug|x64.Build.0 = Debug|x64 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Release|x64.ActiveCfg = Release|x64 - {3A2C6344-A162-433C-B8DE-2282825DE084}.Release|x64.Build.0 = Release|x64 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Debug|Win32.ActiveCfg = Debug|Win32 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Debug|Win32.Build.0 = Debug|Win32 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Release|Win32.ActiveCfg = Release|Win32 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Release|Win32.Build.0 = Release|Win32 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Debug|x64.ActiveCfg = Debug|x64 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Debug|x64.Build.0 = Debug|x64 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Release|x64.ActiveCfg = Release|x64 + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj index 740c3399..0e5f41be 100644 --- a/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj +++ b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj @@ -19,11 +19,11 @@ - {3A2C6344-A162-433C-B8DE-2282825DE084} + {1138E033-EEBF-4BA3-B74F-D51443EF5EE0} $(MSBuildProjectName) Debug Win32 - {0029FEAE-6B50-419B-8919-DFCC68EE0819} + {249F8230-A77D-4B97-A61C-30A168C1C626} diff --git a/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters index 8393d394..7c12923f 100644 --- a/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters +++ b/network/radio/RadioManagerSample/cpp/SampleRM.vcxproj.Filters @@ -3,15 +3,15 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {6E87A5A2-6E58-40A3-8118-0E8CFBE8A8B4} + {5C7660B1-E831-4348-9962-44ACC9C075CA} h;hpp;hxx;hm;inl;inc;xsd - {BDDFBC01-9DDC-4697-AE54-4EA76DE17211} + {12369C10-A1CA-49F9-A620-5BB0B1DC9471} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {FF6DC7A4-CA52-411E-A705-BB9DAEBFED69} + {459D1AE4-DF98-4AD0-80D3-AC9F5666BAC4} diff --git a/network/radio/RadioManagerSample/readme.txt b/network/radio/RadioManagerSample/readme.txt deleted file mode 100644 index 2bdd69bd..00000000 --- a/network/radio/RadioManagerSample/readme.txt +++ /dev/null @@ -1,192 +0,0 @@ -Sample Radio Manager -==================== -Demonstrates how to structure a Radio Manager for use with the Windows 8 Radio Management APIs. - -On Windows 8 and later, the operating system contains a set of APIs which are used as a software mechanism -to control the various radios found on the machine. The APIs work by communicating with a Radio Manager, -which is a COM object that relays commands from the APIs to turn the radio on or off, and reports back -radio information to the APIs. This feature is designed in such a way that a separate Radio Manager is -required for each radio media type. For example, a WLAN radio will be controlled by a different Radio -Manager than a GPS radio. If there are 2 WLAN radios and a GPS radio, the 2 WLAN radios will be controlled -by one Radio Manager, and the GPS radio will be controlled by a different Radio Manager. The Radio Manager -must be able to run correctly within Local Service Account context. Under this context, the Radio Manager -will have the minimum privilege on the local computer. - -When the user turns the radio off (either by using the specific radio software switch or the airplane mode switch), -radio transmission must be turned off. The device can be powered off as long as the radio switch does not disappear -from the UI. It is very important that the radio manager developer ensures that when the device is powered off, the -radio switch does not disappear from the UI. If the radio switch disappears from the UI when the radio is turned off -by the user, then user has no way to turn the radio back on! If it is desired to conserve power by cutting power to -the device when the radio is turned off, but the device cannot be completely powered off because it disappears from -the UI, then the solution would be to put the device in a low power state (e.g. D3). - -IMPORTANT! The radio manager must be given a name – this is the name of the radio switch that is displayed to the -user in the Wireless page of PC Settings. The name must be simple, yet descriptive of what the radio is. For example, -for NFC radios, the value of the name field should be "NFC", and for GPS radios, the value of the name field should -be "GPS" or "GNSS", whichever is more appropriate. The name must not include the word "radio" or the manufacturer's -name or some other word related to the functionality of the radio (e.g. "Location" OR "port"). - - - -Sample Language Implementations -=============================== -This sample is available in the following language implementations: - C++ - - -Installation Files -================== -install.cmd -- Installation script. Copies and registers the dll and executes SampleRM.reg - -SampleRM.reg -- script to install the Sample Radio Manager into the registry, along with 2 radio instances - - -Source Files -============ -SampleRM.sln -- The Visual Studio 2010 solution file for building the Sample Radio Manager dll - -sampleRM.idl -- The interface definition for the Sample Radio Manager - -RadioMgr.idl -- The interface definition for a Windows Radio Manager - -SampleRadioManager.h -- Header file for the functions required for a Radio Manager - -SampleRadioInstance.h -- Header file for the functions required for a Radio Instance - -SampleInstanceCollection.h -- Header file for the functions required for a Collection of Radio Instances - -precomp.h -- Common header file - -InternalInterfaces.h -- Header file for internal interface used for this sample - -dllmain.cpp -- Standard dllmain - -SampleRadioManager.cpp -- Implementation details for the Sample Radio Manager. Important concepts include: - - Utilizing IMediaRadioManagerNotifySink for radio instance events - - Adding/Removing radio instances - - Queuing and deploying worker jobs for system events - -SampleRadioInstance.cpp -- Implementation details for the Sample Radio Instance. Important concepts include: - - Accessors & Modifiers for radio information - - Instance change functions - -SampleInstanceCollection.cpp -- Implementation details for the Sample Instance Collection. Important concepts include: - - Radio Instance discovery and retrieval - -RadioMgr_interface.cpp -- Helper source file to include the MIDL-generated files. - - -How the sample works -==================== -This sample Radio Manager does not operate on an actual radio. Instead, it uses registry keys to act as -virtual radios. Each "radio" instance can have the following values: - -Name - -RadioState - -PreviousRadioState - -IsMultiComm - -IsAssociatingDevice - -***It is required that the registry key has AT LEAST a Name value, otherwise the Sample Radio Manager will -fail to initialize*** - -IMPORTANT! The radio manager must be given a name – this is the name of the radio switch that is displayed to the -user in the Wireless page of PC Settings. The name must be simple, yet descriptive of what the radio is. For example, -for NFC radios, the value of the name field should be "NFC", and for GPS radios, the value of the name field should -be "GPS" or "GNSS", whichever is more appropriate. The name must not include the word "radio" or the manufacturer's -name or some other word related to the functionality of the radio (e.g. "Location" OR "port"). - - -When the Radio Manager is initialized, it uses these registry keys to retrieve the "radio" information. -The radio state values can be any of the following enum values: - - typedef enum _DEVICE_RADIO_STATE - { - DRS_RADIO_ON = 0, - DRS_SW_RADIO_OFF = 1, - DRS_HW_RADIO_OFF = 2, - DRS_SW_HW_RADIO_OFF = 3, - DRS_HW_RADIO_ON_UNCONTROLLABLE = 4, - DRS_RADIO_INVALID = 5, - DRS_HW_RADIO_OFF_UNCONTROLLABLE = 6, - DRS_RADIO_MAX = DRS_HW_RADIO_OFF_UNCONTROLLABLE - } DEVICE_RADIO_STATE; - -For IsMultiComm and IsAssociatingDevice, a value of 0 means 'no' and 1 means 'yes. - - -To Add a Radio Instance -======================= -Add a new item to the registry: -[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\RadioManagement\Misc\SampleRadioManager\SampleRadioX] -"RadioState"=dword:00000000 -"Name"="SampleRadioX" -"IsMultiComm"=dword:00000000 - -To Edit a Radio Instance -======================== -Simply change the values in the registry. For example, change the radio state from DRS_RADIO_ON to DRS_SW_RADIO_OFF -by changing the 'RadioState' value from 0 to 1. - - -To Remove a Radio Instance -========================== -Delete the corresponding registry key. - - -Prerequisites for viewing and building solution -=============================================== -1. Windows 7 -2. Visual Studio 2010 - - -To build the sample using Visual Studio 2010 (preferred method): -=============================================================== -1. Open File Explorer and navigate to the directory. -2. Double-click the icon for the SampleRM.sln (solution) file to open the file in Visual Studio. -3. In the Build menu, select Build Solution. The dll will be built in the default \Debug or \Release directory - - -Prerequisites for installing Radio Manager -========================================== -1. Windows 8 -2. The VC++ 2010 Redistributable package must be installed for this dll to load. - - -Installing Radio Manager -======================== -1. Copy the install.cmd, SampleRM.reg and SampleRM.dll files to a directory -2. Run install.cmd - - - - - - - - - - - - - - - - - - - diff --git a/network/trans/WFPSampler/syslib/HelperFunctions_Headers.cpp b/network/trans/WFPSampler/syslib/HelperFunctions_Headers.cpp index f2782ce7..e70d9999 100644 --- a/network/trans/WFPSampler/syslib/HelperFunctions_Headers.cpp +++ b/network/trans/WFPSampler/syslib/HelperFunctions_Headers.cpp @@ -113,20 +113,20 @@ NTSTATUS PrvKrnlHlprCopyBufferToMDL(_In_reads_(bytesToCopy) const BYTE* pBuffer, SIZE_T mdlByteCount = 0; SIZE_T remainingBytesToCopy = bytesToCopy; SIZE_T copySize = 0; + UINT32 noExecute = 0; *pBytesCopied = 0; - if(MmGetMdlByteCount(pMDL) >= mdlOffset + bytesToCopy) - { - BYTE* pSystemAddress = 0; - UINT32 noExecute = 0; - #if(NTDDI_VERSION >= NTDDI_WIN8) - noExecute = MdlMappingNoExecute; + noExecute = MdlMappingNoExecute; #endif /// (NTDDI_VERSION >= NTDDI_WIN8) + if(MmGetMdlByteCount(pMDL) >= mdlOffset + bytesToCopy) + { + BYTE* pSystemAddress = 0; + pSystemAddress = (BYTE*)MmGetSystemAddressForMdlSafe(pMDL, LowPagePriority | noExecute); if(pSystemAddress) @@ -171,7 +171,7 @@ NTSTATUS PrvKrnlHlprCopyBufferToMDL(_In_reads_(bytesToCopy) const BYTE* pBuffer, mdlByteCount); pSystemAddress = (BYTE*)MmGetSystemAddressForMdlSafe(pMDL, - LowPagePriority); + LowPagePriority | noExecute); if(pSystemAddress) { RtlCopyMemory(pSystemAddress + mdlOffset, diff --git a/network/trans/ddproxy/ddproxy.sln b/network/trans/ddproxy/ddproxy.sln index 0b35cc64..f5f56da8 100644 --- a/network/trans/ddproxy/ddproxy.sln +++ b/network/trans/ddproxy/ddproxy.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddproxy", "sys\ddproxy.vcxproj", "{88969E59-3140-4A06-8E52-7E9483F6E42C}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ddproxy", "sys\ddproxy.vcxproj", "{FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Debug|Win32.ActiveCfg = Debug|Win32 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Debug|Win32.Build.0 = Debug|Win32 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Release|Win32.ActiveCfg = Release|Win32 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Release|Win32.Build.0 = Release|Win32 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Debug|x64.ActiveCfg = Debug|x64 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Debug|x64.Build.0 = Debug|x64 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Release|x64.ActiveCfg = Release|x64 - {88969E59-3140-4A06-8E52-7E9483F6E42C}.Release|x64.Build.0 = Release|x64 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Debug|Win32.ActiveCfg = Debug|Win32 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Debug|Win32.Build.0 = Debug|Win32 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Release|Win32.ActiveCfg = Release|Win32 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Release|Win32.Build.0 = Release|Win32 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Debug|x64.ActiveCfg = Debug|x64 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Debug|x64.Build.0 = Debug|x64 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Release|x64.ActiveCfg = Release|x64 + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/trans/ddproxy/sys/ddproxy.vcxproj b/network/trans/ddproxy/sys/ddproxy.vcxproj index 09c0e9bc..4e2da962 100644 --- a/network/trans/ddproxy/sys/ddproxy.vcxproj +++ b/network/trans/ddproxy/sys/ddproxy.vcxproj @@ -19,12 +19,12 @@ - {88969E59-3140-4A06-8E52-7E9483F6E42C} + {FEABD37B-18D6-4A7B-9AD2-F5A65A904A57} $(MSBuildProjectName) 1 Debug Win32 - {DA73B837-D1BB-4D0D-908B-717988311EE3} + {6462DC10-B4DC-441C-8A08-D8E436A4566C} diff --git a/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters b/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters index 031dba36..8e16cf3d 100644 --- a/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters +++ b/network/trans/ddproxy/sys/ddproxy.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {8D3EB44B-EF28-4AEB-BB5B-C48CB78F4C77} + {BFAC6914-B9A3-4F2B-BFE9-BFC27304CA74} h;hpp;hxx;hm;inl;inc;xsd - {E9F8ED7B-6F16-4D51-ADE0-E86D3E1BD5CE} + {8FB969E4-D27A-4B85-832B-EACA8E280317} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {4EEA7F36-617A-4A62-BE16-0D2EBF088BEF} + {293AD434-85E8-431D-9C4A-989DBCE5D623} inf;inv;inx;mof;mc; - {B59BFA52-A599-4C9B-9360-ABB5C95276BC} + {9B57B05B-FB4B-4582-8F2B-E95E2F7CD3E3} diff --git a/network/trans/inspect/inspect.sln b/network/trans/inspect/inspect.sln index e5e2cc7e..40b0cead 100644 --- a/network/trans/inspect/inspect.sln +++ b/network/trans/inspect/inspect.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inspect", "sys\inspect.vcxproj", "{72A988A3-0603-4315-A76D-AADCC057DB3F}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "inspect", "sys\inspect.vcxproj", "{5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Debug|Win32.ActiveCfg = Debug|Win32 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Debug|Win32.Build.0 = Debug|Win32 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Release|Win32.ActiveCfg = Release|Win32 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Release|Win32.Build.0 = Release|Win32 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Debug|x64.ActiveCfg = Debug|x64 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Debug|x64.Build.0 = Debug|x64 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Release|x64.ActiveCfg = Release|x64 - {72A988A3-0603-4315-A76D-AADCC057DB3F}.Release|x64.Build.0 = Release|x64 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Debug|Win32.ActiveCfg = Debug|Win32 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Debug|Win32.Build.0 = Debug|Win32 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Release|Win32.ActiveCfg = Release|Win32 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Release|Win32.Build.0 = Release|Win32 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Debug|x64.ActiveCfg = Debug|x64 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Debug|x64.Build.0 = Debug|x64 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Release|x64.ActiveCfg = Release|x64 + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/trans/inspect/sys/inspect.c b/network/trans/inspect/sys/inspect.c index 26b01e9b..418daf9a 100644 --- a/network/trans/inspect/sys/inspect.c +++ b/network/trans/inspect/sys/inspect.c @@ -1233,6 +1233,8 @@ TLInspectWorker( KLOCK_QUEUE_HANDLE packetQueueLockHandle; KLOCK_QUEUE_HANDLE connListLockHandle; + BOOLEAN found = FALSE; + UNREFERENCED_PARAMETER(StartContext); for(;;) @@ -1261,15 +1263,45 @@ TLInspectWorker( if (!IsListEmpty(&gConnList)) { - _Analysis_assume_(gConnList.Flink != NULL); - listEntry = gConnList.Flink; + // + // Skip pended connections in the list, for which the auth decision is already taken. + // They should not be for inbound connections. + // + _Analysis_assume_(gConnList.Flink != NULL); + for (listEntry = gConnList.Flink; + listEntry != &gConnList; + listEntry = listEntry->Flink) + { + packet = CONTAINING_RECORD( + listEntry, + TL_INSPECT_PENDED_PACKET, + listEntry + ); + + NT_ASSERT((packet->direction == FWP_DIRECTION_INBOUND) || + (packet->authConnectDecision == 0)); + + if (packet->authConnectDecision == 0) + { + found = TRUE; + break; + } + } - packet = CONTAINING_RECORD( - listEntry, - TL_INSPECT_PENDED_PACKET, - listEntry - ); - if (packet->direction == FWP_DIRECTION_INBOUND) + // + // If not found, reset entry and packet + // + if (!found) + { + listEntry = NULL; + packet = NULL; + } + + // + // Completing a pended recv_accept auth does not trigger reauth. + // So the pended entries for AUTH_RECV_ACCEPT are removed here. + // + if (packet != NULL && packet->direction == FWP_DIRECTION_INBOUND) { RemoveEntryList(&packet->listEntry); } diff --git a/network/trans/inspect/sys/inspect.vcxproj b/network/trans/inspect/sys/inspect.vcxproj index 7c7ef16b..2115972e 100644 --- a/network/trans/inspect/sys/inspect.vcxproj +++ b/network/trans/inspect/sys/inspect.vcxproj @@ -19,12 +19,12 @@ - {72A988A3-0603-4315-A76D-AADCC057DB3F} + {5CF7CFC1-02B4-4938-AC5F-47D743D82E8A} $(MSBuildProjectName) 1 Debug Win32 - {9F9DA1EB-580C-4DA1-A053-63D6E3EE2D2F} + {910EE323-2C33-42E0-B2DD-3C3BB1F4689E} diff --git a/network/trans/inspect/sys/inspect.vcxproj.Filters b/network/trans/inspect/sys/inspect.vcxproj.Filters index 602cb4af..96fc4202 100644 --- a/network/trans/inspect/sys/inspect.vcxproj.Filters +++ b/network/trans/inspect/sys/inspect.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {8A1B2EA9-BFC6-4FD8-B2F2-0216B285279F} + {A71F6518-899B-48DE-AA03-736717A44CB7} h;hpp;hxx;hm;inl;inc;xsd - {A6A4AE15-BDDC-4797-B4FA-CE4EB8CF8E04} + {DAB5B4B7-AD3F-47C2-9EAD-148B9BC6A298} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {BC4CCBE2-11CC-4557-8986-1D28735C2F00} + {1A63D560-FDA1-4F2F-8133-00B67CBBA270} inf;inv;inx;mof;mc; - {B4358050-C623-4EE4-9397-7BA2FFC69B7E} + {B163A086-1586-4E13-AED0-DA6AEEE0D31F} diff --git a/network/trans/msnmntr/exe/monitor.vcxproj b/network/trans/msnmntr/exe/monitor.vcxproj index ced8f9d3..242045dd 100644 --- a/network/trans/msnmntr/exe/monitor.vcxproj +++ b/network/trans/msnmntr/exe/monitor.vcxproj @@ -19,11 +19,11 @@ - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8} + {A775BC8D-48D4-4332-B731-6135FDD0C94A} $(MSBuildProjectName) Debug Win32 - {7817CD59-C9C2-4DE2-90D9-EF9E3F2489A8} + {2142A4F7-2EDA-43A2-AA9B-237435A8B04E} diff --git a/network/trans/msnmntr/exe/monitor.vcxproj.Filters b/network/trans/msnmntr/exe/monitor.vcxproj.Filters index 64c456be..c4048b2e 100644 --- a/network/trans/msnmntr/exe/monitor.vcxproj.Filters +++ b/network/trans/msnmntr/exe/monitor.vcxproj.Filters @@ -3,15 +3,15 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {C70F02F2-1801-4CE3-9B14-C3AF71C4A36B} + {23749ED7-3361-4C55-BC65-7FEB41F22410} h;hpp;hxx;hm;inl;inc;xsd - {3CE61C1C-1EDB-4A29-82C7-5BDEC0568397} + {514D9180-B3CA-48A3-A0A1-6E1693F852C4} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {0A993A34-46CF-4CCB-B3AE-1714A7538940} + {DB4C51F6-0F6E-404E-9F69-06769044B4B1} diff --git a/network/trans/msnmntr/msnmntr.sln b/network/trans/msnmntr/msnmntr.sln index 9c496dca..364b4268 100644 --- a/network/trans/msnmntr/msnmntr.sln +++ b/network/trans/msnmntr/msnmntr.sln @@ -3,13 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{1F0A7D31-AD24-4250-A45D-1C6ED72D3AA9}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Exe", "Exe", "{60E53BA1-BED0-47E5-9907-8CEA2995D3A4}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{E66178FA-3CEE-447F-ACEE-15052142FE60}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Sys", "Sys", "{AD377DD1-7334-4B0B-BDDA-3BF2E96C8247}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monitor", "exe\monitor.vcxproj", "{73B16E02-2FA9-45E9-BAC6-D2371C627EE8}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "monitor", "exe\monitor.vcxproj", "{A775BC8D-48D4-4332-B731-6135FDD0C94A}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msnmntr", "sys\msnmntr.vcxproj", "{8D90BF13-8184-4C0E-A938-99B22509F363}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "msnmntr", "sys\msnmntr.vcxproj", "{0334D910-32A8-48D1-945A-A58B9F2FAD22}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -19,28 +19,28 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Debug|Win32.ActiveCfg = Debug|Win32 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Debug|Win32.Build.0 = Debug|Win32 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Release|Win32.ActiveCfg = Release|Win32 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Release|Win32.Build.0 = Release|Win32 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Debug|x64.ActiveCfg = Debug|x64 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Debug|x64.Build.0 = Debug|x64 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Release|x64.ActiveCfg = Release|x64 - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8}.Release|x64.Build.0 = Release|x64 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Debug|Win32.ActiveCfg = Debug|Win32 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Debug|Win32.Build.0 = Debug|Win32 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Release|Win32.ActiveCfg = Release|Win32 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Release|Win32.Build.0 = Release|Win32 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Debug|x64.ActiveCfg = Debug|x64 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Debug|x64.Build.0 = Debug|x64 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Release|x64.ActiveCfg = Release|x64 - {8D90BF13-8184-4C0E-A938-99B22509F363}.Release|x64.Build.0 = Release|x64 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Debug|Win32.ActiveCfg = Debug|Win32 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Debug|Win32.Build.0 = Debug|Win32 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Release|Win32.ActiveCfg = Release|Win32 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Release|Win32.Build.0 = Release|Win32 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Debug|x64.ActiveCfg = Debug|x64 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Debug|x64.Build.0 = Debug|x64 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Release|x64.ActiveCfg = Release|x64 + {A775BC8D-48D4-4332-B731-6135FDD0C94A}.Release|x64.Build.0 = Release|x64 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Debug|Win32.ActiveCfg = Debug|Win32 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Debug|Win32.Build.0 = Debug|Win32 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Release|Win32.ActiveCfg = Release|Win32 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Release|Win32.Build.0 = Release|Win32 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Debug|x64.ActiveCfg = Debug|x64 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Debug|x64.Build.0 = Debug|x64 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Release|x64.ActiveCfg = Release|x64 + {0334D910-32A8-48D1-945A-A58B9F2FAD22}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {73B16E02-2FA9-45E9-BAC6-D2371C627EE8} = {1F0A7D31-AD24-4250-A45D-1C6ED72D3AA9} - {8D90BF13-8184-4C0E-A938-99B22509F363} = {E66178FA-3CEE-447F-ACEE-15052142FE60} + {A775BC8D-48D4-4332-B731-6135FDD0C94A} = {60E53BA1-BED0-47E5-9907-8CEA2995D3A4} + {0334D910-32A8-48D1-945A-A58B9F2FAD22} = {AD377DD1-7334-4B0B-BDDA-3BF2E96C8247} EndGlobalSection EndGlobal diff --git a/network/trans/msnmntr/sys/msnmntr.vcxproj b/network/trans/msnmntr/sys/msnmntr.vcxproj index 3e5e6b63..07458206 100644 --- a/network/trans/msnmntr/sys/msnmntr.vcxproj +++ b/network/trans/msnmntr/sys/msnmntr.vcxproj @@ -19,12 +19,12 @@ - {8D90BF13-8184-4C0E-A938-99B22509F363} + {0334D910-32A8-48D1-945A-A58B9F2FAD22} $(MSBuildProjectName) 1 Debug Win32 - {CBB4D2BA-9991-40A9-BDA7-A164E72B50A4} + {E5A95292-DFAE-41E4-A0B2-62D97EC6575F} diff --git a/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters b/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters index c367ced7..3ed91334 100644 --- a/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters +++ b/network/trans/msnmntr/sys/msnmntr.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {21B35188-8ABA-4678-8D98-453C58E58904} + {57260C1A-8BC8-4BFB-8443-187F6386E3CD} h;hpp;hxx;hm;inl;inc;xsd - {203B4798-2BF9-4998-8E54-C0474AD49CB7} + {E379C1F3-41C5-407E-A95E-087A8732A4CE} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {B3C8566B-2D21-4AA7-BC03-4EE7DED7DD43} + {552405F1-D8E0-402D-85DD-0B8E345F0634} inf;inv;inx;mof;mc; - {6DB69CEC-0955-4458-8D01-665D15B180CA} + {F56EC5D2-6494-433C-9F61-D4F039E15BE3} diff --git a/network/trans/stmedit/stmedit.sln b/network/trans/stmedit/stmedit.sln index e99fea00..1dc7150f 100644 --- a/network/trans/stmedit/stmedit.sln +++ b/network/trans/stmedit/stmedit.sln @@ -1,26 +1,27 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0 +# Visual Studio 14 +VisualStudioVersion = 14.0.24720.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stmedit", "sys\stmedit.vcxproj", "{00B26024-D8C5-40FD-A6C7-BA15FD324FD0}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "stmedit", "stmedit.vcxproj", "{9CE912A5-6210-4EF8-B22D-611D13254D4C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Debug|Win32.ActiveCfg = Debug|Win32 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Debug|Win32.Build.0 = Debug|Win32 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Release|Win32.ActiveCfg = Release|Win32 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Release|Win32.Build.0 = Release|Win32 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Debug|x64.ActiveCfg = Debug|x64 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Debug|x64.Build.0 = Debug|x64 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Release|x64.ActiveCfg = Release|x64 - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0}.Release|x64.Build.0 = Release|x64 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Debug|Win32.ActiveCfg = Debug|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Debug|Win32.Build.0 = Debug|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Debug|x64.ActiveCfg = Release|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Debug|x64.Build.0 = Release|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Debug|x64.Deploy.0 = Release|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Release|Win32.ActiveCfg = Release|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Release|Win32.Build.0 = Release|Win32 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Release|x64.ActiveCfg = Release|x64 + {9CE912A5-6210-4EF8-B22D-611D13254D4C}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/trans/stmedit/sys/InlineEdit.c b/network/trans/stmedit/sys/InlineEdit.c new file mode 100644 index 00000000..a251d722 --- /dev/null +++ b/network/trans/stmedit/sys/InlineEdit.c @@ -0,0 +1,566 @@ +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved + +Abstract: + Stream Edit Callout Driver Sample. + + This sample demonstrates inline stream inspection/editing + via the WFP stream API. + +Environment: + Kernel mode +--*/ + +#include "Trace.h" +#include "StreamEdit.h" +#include "InlineEdit.tmh" + +#if defined _MODULE_ID +#undef _MODULE_ID +#endif +#define _MODULE_ID 'I' + +NTSTATUS +InlineEditFlushData( + _In_ STREAM_FLOW_CONTEXT *pFlowContext, + _In_ ULONG DataLength, + _In_ UINT StreamFlags + ) +/* + This function re-injects buffered data back to the data stream. + The data was buffered because it was not big enough (size wise) + to make an editing decision. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + + PVOID Buffer = NULL; + MDL* mdl = NULL; + NET_BUFFER_LIST* NetBufferList = NULL; + + NT_ASSERT(!(StreamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && + !(StreamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)); + + if (DataLength == 0) + { + DataLength = (ULONG)pFlowContext->ScratchDataLength; + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, Flushing %u bytes", pFlowContext, DataLength); + do + { + if (DataLength == 0) + break; + + Buffer = ExAllocatePoolWithTag(NonPagedPool, DataLength, STMEDIT_TAG_MDL_DATA); + if (Buffer == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "Failed to allocate Buffer to flush data!"); + break; + } + + // Copy the contents that need to be flushed. + RtlMoveMemory(Buffer, pFlowContext->ScratchBuffer, DataLength); + + mdl = IoAllocateMdl( + Buffer, + DataLength, + FALSE, + FALSE, + NULL); + + if (mdl == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "Failed to allocate MDL"); + break; + } + + MmBuildMdlForNonPagedPool(mdl); + + Status = FwpsAllocateNetBufferAndNetBufferList( + Globals.NetBufferListPool, + 0, + 0, + mdl, + 0, + DataLength, + &NetBufferList); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "FwpsAllocateNetBufferAndNetBufferList Failed with %!STATUS!", Status); + break; + } + + Status = FwpsStreamInjectAsync( + Globals.InjectionHandle, + NULL, + 0, + pFlowContext->FlowHandle, + pFlowContext->CalloutId, + pFlowContext->LayerId, + StreamFlags, + NetBufferList, + DataLength, + StreamEditInjectCompletionFn, + mdl); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "FwpsStreamInjectAsync failed with %!STATUS!", Status); + break; + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, Flushed %lu bytes via NBL %p, MDL %p", + pFlowContext, DataLength, NetBufferList, mdl); + + // Control transferred to WFP. + mdl = NULL; + NetBufferList = NULL; + Buffer = NULL; + + } while (FALSE); + + + if (!NT_SUCCESS(Status)) + { + if (Buffer != NULL) + { + ExFreePoolWithTag(Buffer, STMEDIT_TAG_MDL_DATA); + } + + if (mdl != NULL) + { + IoFreeMdl(mdl); + } + + if (NetBufferList != NULL) + { + FwpsFreeNetBufferList(NetBufferList); + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: FlowCtx %p, %!STATUS!", pFlowContext, Status); + return Status; +} + +#define PermitBytes(_l)\ +{\ + ioPacket->streamAction = FWPS_STREAM_ACTION_NONE;\ + ioPacket->countBytesEnforced = (_l);\ + ClassifyOut->actionType = FWP_ACTION_PERMIT;\ +} + +NTSTATUS +InlineInjectToken( + PSTREAM_FLOW_CONTEXT FlowContext, + UINT32 StreamFlags + ) +/* + Inject a replacement token into the data stream! +*/ +{ + NTSTATUS Status; + NET_BUFFER_LIST* NetBufferList; + + do + { + Status = FwpsAllocateNetBufferAndNetBufferList( + Globals.NetBufferListPool, + 0, + 0, + Globals.StringToReplaceMdl, + 0, + Globals.StringToReplaceLength, + &NetBufferList + ); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, + "FlowCtx %p, FwpsAllocateNetBufferAndNetBufferList failed with %#x, dropping connection", + FlowContext, Status); + break; + } + + Status = FwpsStreamInjectAsync( + Globals.InjectionHandle, + NULL, + 0, + FlowContext->FlowHandle, + FlowContext->CalloutId, + FlowContext->LayerId, + StreamFlags, + NetBufferList, + Globals.StringToReplaceLength, + StreamEditInjectCompletionFn, + NULL + ); + + if (!NT_SUCCESS(Status)) + { + FwpsFreeNetBufferList(NetBufferList); + + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, + "FlowCtx %p, FwpsStreamInjectAsync failed with %!STATUS!, dropping connection", + FlowContext, Status); + break; + } + + FlowContext->ScratchDataOffset += Globals.StringXLength; + FlowContext->ScratchDataLength -= Globals.StringXLength; + + if (FlowContext->ScratchDataLength > 0) + { + FlowContext->InlineEditState = INLINE_EDIT_SCANNING; + } + else + { + FlowContext->ScratchDataOffset = 0; + FlowContext->InlineEditState = INLINE_EDIT_IDLE; + } + } while (FALSE); + + return Status; +} + + +VOID +NTAPI +InlineEditClassify( + _In_ const FWPS_INCOMING_VALUES* InFixedValues, + _In_ const FWPS_INCOMING_METADATA_VALUES* InMetaValues, + _Inout_ VOID* LayerData, + _In_ const FWPS_FILTER* Filter, + _In_ UINT64 InFlowContext, + _Inout_ FWPS_CLASSIFY_OUT* ClassifyOut + ) +/* + This is the ClassifyFn function registered by the inline stream edit callout. + + An inline stream modification callout performs editing from within the + classifyFn call by permitting sections of the content and replacing other + sections by removing them and injecting new content. + + Here we implement the state machine that scans the content and computes the + number of bytes to permit, bytes to block, and performs stream injection to + replace the blocked data. + + @ Inline Stream Inspection + @ https://msdn.microsoft.com/en-us/library/windows/hardware/ff570891.aspx + + To replace a pattern Found in the middle of an indicated segment (for example, + n bytes followed by a pattern of p bytes followed by m bytes), the callout + would follow these steps: + + 1. The callout's classifyFn function is invoked with 'n + p + m' bytes. + 2. The callout returns FWP_ACTION_PERMIT with countBytesEnforced set to n. + 3. The callout's classifyFn function is called again with p + m bytes. + (WFP will call classifyFn again if countBytesEnforced is less than the + indicated amount.) + 4. From the classifyFn function, the callout calls the FwpStreamInjectAsync0 + function to inject the replacement pattern for p. The callout then + returns FWP_ACTION_BLOCK with countBytesEnforced set to p. + 5. The callout's classifyFn function is called again with m bytes. + 6. The callout returns FWP_ACTION_PERMIT with countBytesEnforced set to m. + + If the indicated data is insufficient for the callout to make an inspection + decision, it can set FWPS_STREAM_CALLOUT_IO_PACKET->streamAction to + FWPS_STREAM_ACTION_NEED_MORE_DATA and set the countBytesRequired member to the + minimal amount WFP should accumulate before the data is indicated again. When + streamAction is set, the callout should return FWP_ACTION_NONE from the + classifyFn function. +*/ +{ + FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket; + FWPS_STREAM_DATA* streamData; + PSTREAM_FLOW_CONTEXT FlowContext = (PSTREAM_FLOW_CONTEXT)(ULONG_PTR)InFlowContext; + ULONG PartialLength = 0; + NTSTATUS Status = STATUS_SUCCESS; + + UNREFERENCED_PARAMETER(InFixedValues); + UNREFERENCED_PARAMETER(InMetaValues); + + ioPacket = (FWPS_STREAM_CALLOUT_IO_PACKET*)LayerData; + streamData = ioPacket->streamData; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, sFlags %#x, Length %Iu, LayerId %hu, CalloutId %u, " + "FlowId %I64u, cFlags %#x, Flow State %!InlineState!, Scratch:%Iu/%Iu", + FlowContext, + streamData->flags, + streamData->dataLength, + InFixedValues->layerId, + Filter->action.calloutId, + InMetaValues->flowHandle, + ClassifyOut->flags, + FlowContext->InlineEditState, + FlowContext->ScratchDataLength, + FlowContext->ScratchDataOffset); + + + // The following checks if the classifyFn is invoked + // simultaneously on multiple processors for the same flow. + // This should NOT happen! + { + ULONG Processor = KeGetCurrentProcessorIndex(); + Processor = InterlockedExchange(&FlowContext->CurrentProcessor, Processor); + NT_ASSERT(Processor == INVALID_PROC_NUMBER); + } + + // If a FIN/RST has been classified, flush any data and permit the FIN/RST. + // + if ((!FlowContext->bFlowActive) || + (streamData->flags & FWPS_STREAM_FLAG_SEND_DISCONNECT) || + (streamData->flags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, FIN/RST classified (Flow Active %d)!", FlowContext, FlowContext->bFlowActive); + + if (FlowContext->ScratchDataLength > 0) + { + InlineEditFlushData(FlowContext, 0, FlowContext->PartialSFlags); + FlowContext->ScratchDataLength = 0; + FlowContext->ScratchDataOffset = 0; + } + + NT_ASSERT(FlowContext->InlineEditState == INLINE_EDIT_IDLE); + + PermitBytes(0); + + goto Exit; + } + + if (streamData->dataLength == 0) + { + + PermitBytes(0); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p -> DataLength = 0, Permit!", FlowContext); + goto Exit; + } + + if (FlowContext->InlineEditState != INLINE_EDIT_SKIPPING) + { + if ((streamData->dataLength < Globals.StringXLength) && + !(ClassifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA)) + { + ioPacket->streamAction = FWPS_STREAM_ACTION_NEED_MORE_DATA; + ioPacket->countBytesRequired = (UINT32)Globals.StringXLength; + + ClassifyOut->actionType = FWP_ACTION_NONE; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p - need more data!", FlowContext); + goto Exit; + } + } + + switch (FlowContext->InlineEditState) + { + case INLINE_EDIT_IDLE: + { + NT_ASSERT(FlowContext->ScratchDataOffset == 0); + + PartialLength = (ULONG)FlowContext->ScratchDataLength; + if (PartialLength) + { + NT_ASSERT(FlowContext->PartialSFlags); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, Partial Data Found. Length %u", FlowContext, PartialLength); + } + + if (FALSE == StreamEditCopyDataForInspection(FlowContext, streamData, streamData->dataLength)) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; + ClassifyOut->actionType = FWP_ACTION_NONE; + + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, + "FlowCtx %p, failed to copy data, drop connection", FlowContext); + goto Exit; + } + + // + // Fall-thru to scanning + // + } + + case INLINE_EDIT_SCANNING: + { + UINT i; + BYTE* DataStart = (BYTE*)FlowContext->ScratchBuffer + FlowContext->ScratchDataOffset; + BOOLEAN Found = FALSE; + + for (i = 0; i < FlowContext->ScratchDataLength; ++i) + { + // Look for a Full match if we have enough data to scan + // + if (i + Globals.StringXLength <= FlowContext->ScratchDataLength) + { + if (RtlCompareMemory(DataStart + i, Globals.StringX, Globals.StringXLength ) == Globals.StringXLength) + { + // We Found a pattern match + Found = TRUE; + + FlowContext->InlineEditState = INLINE_EDIT_MODIFYING; + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, Found match @ %lu", FlowContext, i-PartialLength); + + // If the match is in the middle of data packet, permit the data + // before match from (n + p + m), permit n. We'll be reclassified + // at beginning of the match (with p + m). + // + if (i != 0) + { + // Flush any left over partial match data on the scratch buffer. + if (PartialLength) + { + InlineEditFlushData(FlowContext, PartialLength, FlowContext->PartialSFlags); + } + + PermitBytes(i - PartialLength); + + FlowContext->ScratchDataOffset += i; + FlowContext->ScratchDataLength -= i; + + break; + } + else + { + Status = InlineInjectToken(FlowContext, streamData->flags); + if (NT_SUCCESS(Status)) + { + // Block the segment for which we injected a replacement + // + ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; + ioPacket->countBytesEnforced = Globals.StringXLength - PartialLength; + ClassifyOut->actionType = FWP_ACTION_BLOCK; + } + break; // out of for loop. + } + } // if (RtlCompareMemory ...) + } + + // + // If we do not have enough data, try to look for a partial pattern match + // + else + { + // If we do not expect more data to come in, quit now! + if (ClassifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA) + { + PermitBytes(0); + break; + } + + if (RtlCompareMemory(DataStart + i, Globals.StringX, FlowContext->ScratchDataLength - i ) + == FlowContext->ScratchDataLength - i) + { + Found = TRUE; // This is a partial match + FlowContext->InlineEditState = INLINE_EDIT_SKIPPING; + + // Permit data before partial match. When we get more data, we'll look for a complete match. + // + if (PartialLength) + { + InlineEditFlushData(FlowContext, PartialLength, FlowContext->PartialSFlags); + } + + PermitBytes(i - PartialLength); + + // Move partial matching data to Scratch Buffer. + // + RtlMoveMemory(FlowContext->ScratchBuffer, DataStart + i, FlowContext->ScratchDataLength - i ); + + FlowContext->PartialSFlags = streamData->flags; + + FlowContext->ScratchDataOffset = 0; + FlowContext->ScratchDataLength -= i; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p, Found partial match of %Iu byte(s) @ %lu", + FlowContext, FlowContext->ScratchDataLength, i - PartialLength); + break; + } + } + } // for ( i = 0; i < ScratchDataLength... + + // If no match is Found, inject the whole chunk back into the stream + // + if (!Found) + { + FlowContext->InlineEditState = INLINE_EDIT_IDLE; + + if (PartialLength) + { + InlineEditFlushData(FlowContext, PartialLength, FlowContext->PartialSFlags ); + } + + PermitBytes(0); + + FlowContext->ScratchDataOffset = 0; + FlowContext->ScratchDataLength = 0; + } + + break; + } + + // No new data will be classified until we consume all the data originally + // indicated. We block the partially matching data (left in scratch-buffer), + // and continue search for a full match when more data in indicated. + // + case INLINE_EDIT_SKIPPING: + { + NT_ASSERT(FWPS_STREAM_ACTION_NONE == ioPacket->streamAction); + ioPacket->countBytesEnforced = 0; + ClassifyOut->actionType = FWP_ACTION_BLOCK; + + FlowContext->InlineEditState = INLINE_EDIT_IDLE; + DoTraceLevelMessage(TRACE_LEVEL_VERBOSE, CO_GENERAL, "Contents of Blocked buffer : %!HEXDUMP!", + log_xstr(FlowContext->ScratchBuffer, (USHORT)streamData->dataLength)); + break; + } + + // Injecting a replacement pattern when a full match is + // Found at beginning of the scan buffer + case INLINE_EDIT_MODIFYING: + { + Status = InlineInjectToken(FlowContext, streamData->flags); + if (NT_SUCCESS(Status)) + { + // Block the segment for which we injected a replacement + // + ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; + ioPacket->countBytesEnforced = Globals.StringXLength - PartialLength; + ClassifyOut->actionType = FWP_ACTION_BLOCK; + } + break; + } + + default: + NT_ASSERT(FALSE); + break; + }; // switch + +Exit: + + if (!NT_SUCCESS (Status)) + { + ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; + ClassifyOut->actionType = FWP_ACTION_NONE; + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, cOut->Action %#x, sAction %#x, #Enforced %Iu, Scratch: %Iu/%Iu, New State %!InlineState!", + FlowContext, + ClassifyOut->actionType, + ioPacket->streamAction, + ioPacket->countBytesEnforced, + FlowContext->ScratchDataLength, + FlowContext->ScratchDataOffset, + FlowContext->InlineEditState); + + InterlockedExchange(&FlowContext->CurrentProcessor, INVALID_PROC_NUMBER); + + return; +} diff --git a/network/trans/stmedit/sys/LwQueue.c b/network/trans/stmedit/sys/LwQueue.c new file mode 100644 index 00000000..a88186c7 --- /dev/null +++ b/network/trans/stmedit/sys/LwQueue.c @@ -0,0 +1,170 @@ +/*++ +Copyright (c) Microsoft Corporation. All rights reserved + +Abstract: + Stream Edit Callout Driver Sample. + This file implements Light Weight queues using Worker Item routines. + +Environment: + Kernel mode + +--*/ + +#include "LwQueue.h" + +IO_WORKITEM_ROUTINE LwWorker; + +NTSTATUS +LwInitializeQueue( + _In_ PVOID IoObject, + _Out_ PLW_QUEUE Queue, + _In_ PIO_WORKITEM_ROUTINE WorkerRoutine + ) +/* + Initializes Light Weight Queue data structures! +*/ +{ + RtlZeroMemory(Queue, sizeof(Queue[0])); + + Queue->Head = &Queue->Dummy; + Queue->Tail = &Queue->Dummy; + Queue->WorkerScheduled = FALSE; + + Queue->WorkerRoutine = WorkerRoutine; + Queue->IoObject = IoObject; + + KeInitializeSpinLock(&Queue->Lock); + + Queue->WorkItem = + ExAllocatePoolWithTag( + NonPagedPool, IoSizeofWorkItem(), STMEDIT_TAG_LQWI); + + if (Queue->WorkItem == NULL) + { + return STATUS_INSUFFICIENT_RESOURCES; + } + + IoInitializeWorkItem(IoObject, Queue->WorkItem); + Queue->Initialized = TRUE; + return STATUS_SUCCESS; +} + +VOID +LwUninitializeQueue( + _Inout_ PLW_QUEUE Queue + ) +/* + De-Initializes the Light Weight Queue! +*/ +{ + if (Queue->Initialized == FALSE) + { + return; + } + + Queue->Initialized = FALSE; + + IoUninitializeWorkItem(Queue->WorkItem); + ExFreePoolWithTag(Queue->WorkItem, STMEDIT_TAG_LQWI); + Queue->WorkItem = NULL; +} + +__drv_functionClass(IO_WORKITEM_ROUTINE) +__drv_requiresIRQL(PASSIVE_LEVEL) +__drv_sameIRQL +VOID +LwWorker( + _In_ PDEVICE_OBJECT DeviceObject, + _In_opt_ PVOID Context + ) +/* + Queue processing workitem routine. + Drains the task queue and invokes OOB Workitem to process the tasks. +*/ +{ + PLW_ENTRY Entry; + PLW_QUEUE Queue = (PLW_QUEUE)Context; + + UNREFERENCED_PARAMETER(DeviceObject); + + NT_ASSERT(Queue != NULL); + Entry = LwDequeueAll(Queue); + + // + // Why were we scheduled if there are no entries? + // + NT_ASSERT(Entry != NULL); + + while (Entry != NULL) + { + // + // Invoke the caller's worker routine. + // + Queue->WorkerRoutine(DeviceObject, Entry); + + // + // Check if any other entries were added while we were + // working. + // + Entry = LwDequeueAll(Queue); + } +} + +VOID +LwEnqueue( + _In_ PLW_QUEUE Queue, + _In_ PLW_ENTRY Entry + ) +/* + Queue a task into the task queue. +*/ +{ + KLOCK_QUEUE_HANDLE LockHandle; + + NT_ASSERT(Entry != NULL); + NT_ASSERT(Queue != NULL); + + KeAcquireInStackQueuedSpinLock(&Queue->Lock, &LockHandle); + + Entry->Next = NULL; + Queue->Tail->Next = Entry; + Queue->Tail = Entry; + + if (!Queue->WorkerScheduled) + { + Queue->WorkerScheduled = TRUE; + + IoQueueWorkItem( + Queue->WorkItem, LwWorker, DelayedWorkQueue, Queue); + } + + KeReleaseInStackQueuedSpinLock(&LockHandle); +} + +PLW_ENTRY +LwDequeueAll( + _In_ PLW_QUEUE Queue + ) +{ + KLOCK_QUEUE_HANDLE LockHandle; + PLW_ENTRY Entry = NULL; + + KeAcquireInStackQueuedSpinLock(&Queue->Lock, &LockHandle); + + NT_ASSERT(Queue->Head == &Queue->Dummy); + + // + // Snap and return the entire queue contents. + // + Entry = Queue->Head->Next; + Queue->Head->Next = NULL; + Queue->Tail = Queue->Head; + + if (Entry == NULL) + { + Queue->WorkerScheduled = FALSE; + } + + KeReleaseInStackQueuedSpinLock(&LockHandle); + return Entry; +} diff --git a/network/trans/stmedit/sys/LwQueue.h b/network/trans/stmedit/sys/LwQueue.h new file mode 100644 index 00000000..d62f41aa --- /dev/null +++ b/network/trans/stmedit/sys/LwQueue.h @@ -0,0 +1,69 @@ +#ifndef _LWQUEUE_H +#define _LWQUEUE_H + +#include + +#define STMEDIT_TAG_LQWI 'wLeS' // Light Weight Queue Work Items. + +typedef struct _LW_ENTRY +{ + struct _LW_ENTRY *Next; +} LW_ENTRY, *PLW_ENTRY; + +typedef struct _LW_QUEUE +{ + // Queue Head + PLW_ENTRY Head; + + // Queue Tail + PLW_ENTRY Tail; + + // Dummy Queue head. + LW_ENTRY Dummy; + + // Lock for queue synchronization + KSPIN_LOCK Lock; + + // If a workitem is already scheduled + BOOLEAN WorkerScheduled; + + // Is the Queue initialized + BOOLEAN Initialized; + + // Workitem for IoXxxWorkItem + PIO_WORKITEM WorkItem; + + // Callback routine to be invoked + PIO_WORKITEM_ROUTINE WorkerRoutine; + + // One of the caller's device objects. + PVOID IoObject; + +} LW_QUEUE, *PLW_QUEUE; + + +NTSTATUS +LwInitializeQueue( + _In_ PVOID IoObject, + _Out_ PLW_QUEUE Queue, + _In_ PIO_WORKITEM_ROUTINE WorkerRoutine + ); + +VOID +LwUninitializeQueue( + _Inout_ PLW_QUEUE Queue + ); + +VOID +LwEnqueue( + _In_ PLW_QUEUE Queue, + _In_ PLW_ENTRY Entry + ); + +PLW_ENTRY +LwDequeueAll( + _In_ PLW_QUEUE Queue + ); + + +#endif // _LWQUEUE_H diff --git a/network/trans/stmedit/sys/OobEdit.c b/network/trans/stmedit/sys/OobEdit.c new file mode 100644 index 00000000..28883ab7 --- /dev/null +++ b/network/trans/stmedit/sys/OobEdit.c @@ -0,0 +1,1412 @@ +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved + +Abstract: + Stream Edit Callout Driver Sample. + + This sample demonstrates Out-of-band (OOB) stream inspection/editing + via the WFP stream API. + +Environment: + Kernel mode + +--*/ + +#include "Trace.h" +#include "StreamEdit.h" +#include "OobEdit.tmh" + +#if defined _MODULE_ID +#undef _MODULE_ID +#endif +#define _MODULE_ID 'O' + +NTSTATUS +StreamEditInitializeWorkitemPool( + ) +{ +/* + This functions initializes the Light Weight Queue (LW_QUEUE) pool. +*/ + NTSTATUS Status; + ULONG nCount; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!"); + + for (nCount = 0; nCount < NUM_WORKITEM_QUEUES; nCount++) + { + NT_ASSERT(Globals.WdmDevice); + Status = LwInitializeQueue(Globals.WdmDevice, &Globals.ProcessingQueues[nCount], StreamEditOobPoolWorker); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "Worker Queue Initialization failed with %!STATUS!", Status); + break; + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: Status %!STATUS!", Status); + return Status; +} + +VOID +NTAPI +StreamOobInjectCompletionFn( + _In_ PVOID Context, + _Inout_ NET_BUFFER_LIST* NetBufferList, + _In_ BOOLEAN DispatchLevel + ) +/* + Injection completion function for injecting an NBL created using + FwpsAllocateNetBufferAndNetBufferList. This function frees up + resources allocated during StreamOobReinjectData(). +*/ +{ + MDL* mdl = (MDL *)Context; + + UNREFERENCED_PARAMETER(DispatchLevel); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "-><- %!FUNC!: NBL %p, Status=%!STATUS!, MDL %p", NetBufferList, NetBufferList->Status, mdl); + + + // Supress warning 28922: Redundant test against NULL. Pointer is already guaranteed to be non-NULL. + // Rationale : mdl is not guaranteed to be non-NULL here... + +#pragma prefast(push) +#pragma prefast(disable:28922) + + if (mdl != NULL) + { + // + // The MDL mapped over a pool alloc which we need to free here. + // + ExFreePoolWithTag(mdl->MappedSystemVa, STMEDIT_TAG_MDL_DATA); + + IoFreeMdl(mdl); + } +#pragma prefast(pop) + + FwpsFreeNetBufferList(NetBufferList); +} + +VOID +NTAPI +StreamOobCloneInjectCompletionFn( + _In_ VOID* Context, + _Inout_ NET_BUFFER_LIST* NetBufferList, + _In_ BOOLEAN DispatchLevel + ) +/* + Injection completion function for injecting one of the NBLs cloned + via FwpsCloneStreamData. + + FwpsCloneStreamData can return a chain of cloned NBLs; each NBL will + complete separately. +*/ +{ + UNREFERENCED_PARAMETER(Context); + UNREFERENCED_PARAMETER(DispatchLevel); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "-><- %!FUNC!: NBL %p, Status=%!STATUS!", NetBufferList, NetBufferList->Status); + FwpsFreeCloneNetBufferList(NetBufferList, 0); +} + +_Requires_lock_held_(TaskEntry->FlowCtx->OobInfo.EditLock) +NTSTATUS +StreamOobQueueUpIncomingData( + _Inout_ PTASK_ENTRY TaskEntry, + _Inout_ FWPS_STREAM_DATA* streamData, + _In_ UINT32 flags + ) +/* + This function clones the indicated stream data into a NBL chain and + saves it in the task entry, along with other information (Flags etc.) + + This function assumes that the OobInfo lock inside the flow's context + is being held. +*/ +{ + NTSTATUS Status; + NET_BUFFER_LIST* ClonedNbl; + PSTREAM_FLOW_CONTEXT FlowCtx = TaskEntry->FlowCtx; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!: FlowCtx %p, Task %p, StreamData %p", + FlowCtx, + TaskEntry, + streamData); + + Status = FwpsCloneStreamData(streamData, NULL, NULL, 0, &ClonedNbl); + if (NT_SUCCESS(Status)) + { + PLW_QUEUE Queue; + ULONG Count; + TaskEntry->StreamFlags = streamData->flags; + TaskEntry->NetBufferList = ClonedNbl; + TaskEntry->DataLength = streamData->dataLength; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "NBL Chain @ %p was Cloned as %p and added to Task %p", + streamData->netBufferListChain, ClonedNbl, TaskEntry); + + Count = InterlockedIncrement(& (LONG)FlowCtx->OobInfo.PendingTasks); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_REFCOUNT, + "FlowCtx %p, QueueIncoming : PendingTasks @++ = %lu", FlowCtx, Count); + + // Reference the flow for task + StmEditReferenceFlow(FlowCtx, _MODULE_ID, __LINE__); + + Queue = &(Globals.ProcessingQueues[FlowCtx->OobInfo.QueueNumber]); + LwEnqueue(Queue , &TaskEntry->LwQLink); + + if (flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA) + { + FlowCtx->bNoMoreData = TRUE; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p, NO_MORE_DATA flag set, bNoMoreData = TRUE.", FlowCtx); + } + + // + // TCP FIN is indicated by an empty NBL with disconnect flag set and + // does not contain any data. + // + + if ((streamData->flags & FWPS_STREAM_FLAG_SEND_DISCONNECT) || + (streamData->flags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Received FIN for FlowCtx %p in Task %p", FlowCtx, TaskEntry); + + NT_ASSERT(FlowCtx->bNoMoreData); + NT_ASSERT(streamData->dataLength == 0); + + FlowCtx->bFlowTerminating = TRUE; + } + + InterlockedAdd( (LONG *)&FlowCtx->OobInfo.PendedDataLength, (LONG)streamData->dataLength); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, Pending %Iu, %!STATUS!", FlowCtx, FlowCtx->OobInfo.PendedDataLength, Status); + return Status; +} + +_Requires_lock_not_held_(FlowContext->OobInfo.EditLock) +NTSTATUS +StreamOobQueueUpOutgoingData( + _Inout_ PSTREAM_FLOW_CONTEXT FlowContext, + _Inout_ PNET_BUFFER_LIST NetBufferList, + _In_ BOOLEAN IsClone, + _In_ size_t DataLength, + _In_ UINT32 StreamFlags, + _In_opt_ MDL* Mdl + ) +/* + This function queues up processed data (either sections of the indicated + data or newly created data) such that they can be (re-)injected back to + the data stream during the following context. + + 1. Before FWP_ACTION_BLOCK is returned from the ClassifyFn, or + 2. After EOF is indicated. + + Under the conditions above, the incoming data (which we pend) and the + outgoing data (which we (re-)inject) can be synchronized properly). +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + KLOCK_QUEUE_HANDLE LockHandle; + POUTGOING_STREAM_DATA OutgoingData; + + NT_ASSERT(0 != StreamFlags); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, DataLength %Iu, sFlags %#x", + FlowContext, DataLength, StreamFlags); + + OutgoingData = (POUTGOING_STREAM_DATA)ExAllocateFromLookasideListEx(&Globals.LookasideList); + + if (OutgoingData == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + return Status; + } + + OutgoingData->NetBufferList = NetBufferList; + OutgoingData->isClone = IsClone; + OutgoingData->DataLength = DataLength; + OutgoingData->StreamFlags = StreamFlags; + OutgoingData->Mdl = Mdl; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "OutgoingStreamData %p has NBL %p (clone %d) with Length of %Iu, sFlags %#x, mdl %p", + OutgoingData, NetBufferList, IsClone, DataLength, StreamFlags, Mdl); + + KeAcquireInStackQueuedSpinLock(&FlowContext->OobInfo.EditLock, &LockHandle); + InsertTailList(&FlowContext->OobInfo.OutgoingDataQueue, &OutgoingData->Link); + KeReleaseInStackQueuedSpinLock(&LockHandle); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT,"<-- %!FUNC!: %!STATUS!", Status); + return Status; +} + +NTSTATUS +StreamOobFlushOutgoingData( + _Inout_ PSTREAM_FLOW_CONTEXT FlowContext + ) +{ + NTSTATUS Status = STATUS_SUCCESS; + + KLOCK_QUEUE_HANDLE LockHandle; + OUTGOING_STREAM_DATA* OutgoingData = NULL; + BOOLEAN FlowInError = FALSE; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!: FlowCtx %p", FlowContext); + + for (;;) + { + KeAcquireInStackQueuedSpinLock(&FlowContext->OobInfo.EditLock, &LockHandle); + + if (!IsListEmpty(&FlowContext->OobInfo.OutgoingDataQueue)) + { + LIST_ENTRY* Entry = RemoveHeadList(&FlowContext->OobInfo.OutgoingDataQueue); + OutgoingData = CONTAINING_RECORD(Entry, OUTGOING_STREAM_DATA, Link); + + FlowInError = (OOB_EDIT_ERROR == FlowContext->OobInfo.EditState); + } + KeReleaseInStackQueuedSpinLock(&LockHandle); + + if (OutgoingData == NULL || FlowInError) + { + break; + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "Oob Flush Outgoing: OutgoingStreamData %p, Injecting NBL %p, Data Length %Iu, Stream Flags %#x", + OutgoingData, + OutgoingData->NetBufferList, + OutgoingData->DataLength, + OutgoingData->StreamFlags); + + Status = FwpsStreamInjectAsync( + Globals.InjectionHandle, + NULL, + 0, + FlowContext->FlowHandle, + FlowContext->CalloutId, + FlowContext->LayerId, + OutgoingData->StreamFlags, + OutgoingData->NetBufferList, + OutgoingData->DataLength, + OutgoingData->isClone ? StreamOobCloneInjectCompletionFn : StreamOobInjectCompletionFn, + OutgoingData->Mdl + ); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, + "OobFlushOutgoingData: FwpsStreamInjectAsync() failed with Status %!STATUS!", Status); + break; + } + + ExFreeToLookasideListEx(&Globals.LookasideList, OutgoingData); + OutgoingData = NULL; + } + + if (!NT_SUCCESS(Status) || FlowInError) + { + while (OutgoingData != NULL) + { + if (OutgoingData->isClone) + { + FwpsDiscardClonedStreamData(OutgoingData->NetBufferList, 0, FALSE); + } + else + { + // Invoke the injection completion routine to free the resources + StreamOobInjectCompletionFn(OutgoingData->Mdl, OutgoingData->NetBufferList, FALSE); + } + + ExFreeToLookasideListEx(&Globals.LookasideList, OutgoingData); + OutgoingData = NULL; + + // Free up any queued data. + // + KeAcquireInStackQueuedSpinLock(&FlowContext->OobInfo.EditLock, &LockHandle); + + if (!IsListEmpty(&FlowContext->OobInfo.OutgoingDataQueue)) + { + LIST_ENTRY* Entry = RemoveHeadList(&FlowContext->OobInfo.OutgoingDataQueue); + OutgoingData = CONTAINING_RECORD(Entry, OUTGOING_STREAM_DATA, Link); + } + KeReleaseInStackQueuedSpinLock(&LockHandle); + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, FlowInError %d, Status %!STATUS!", + FlowContext, FlowInError, Status); + return Status; +} + +_Requires_lock_not_held_(FlowContext->OobInfo.EditLock) +NTSTATUS +StreamOobReinjectData( + _In_ STREAM_FLOW_CONTEXT* FlowContext, + _In_ const PVOID Data, + _In_ size_t Length, + _In_ UINT32 StreamFlags + ) +/* + This function injects a section of the original indicated data back + to the data stream. + + An MDL is allocated to describe the data section. +*/ +{ + NTSTATUS Status; + + VOID* DataCopy = NULL; + MDL* mdl = NULL; + NET_BUFFER_LIST* NetBufferList = NULL; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, Length %Iu, sFlags 0x%x", FlowContext, Length, StreamFlags); + + NT_ASSERT(StreamFlags); + NT_ASSERT(!(StreamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && + !(StreamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)); + NT_ASSERT(Length); + + do + { + DataCopy = ExAllocatePoolWithTag( + NonPagedPool, + Length, + STMEDIT_TAG_MDL_DATA + ); + + if (DataCopy == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "Failed to allocate memory."); + break; + } + + RtlCopyMemory(DataCopy, Data, Length); + + mdl = IoAllocateMdl( + DataCopy, + (ULONG)Length, + FALSE, + FALSE, + NULL); + + if (mdl == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "Failed to allocate MDL for re-injection."); + break; + } + MmBuildMdlForNonPagedPool(mdl); + + Status = FwpsAllocateNetBufferAndNetBufferList( + Globals.NetBufferListPool, + 0, + 0, + mdl, + 0, + Length, + &NetBufferList + ); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "AllocateNetBufferAndNetBufferList failed with %!STATUS!\n", Status); + break; + } + + Status = StreamOobQueueUpOutgoingData( + FlowContext, + NetBufferList, + FALSE, + Length, + StreamFlags, + mdl + ); + + if (NT_SUCCESS(Status)) + { + DataCopy = NULL; + mdl = NULL; + NetBufferList = NULL; + } + } while (FALSE); + + if (!NT_SUCCESS(Status)) + { + if (NetBufferList != NULL) + { + FwpsFreeNetBufferList(NetBufferList); + } + + if (mdl != NULL) + { + IoFreeMdl(mdl); + } + + if (DataCopy != NULL) + { + ExFreePoolWithTag(DataCopy, STMEDIT_TAG_MDL_DATA ); + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, %!STATUS!", FlowContext, Status); + + return Status; +} + +_Requires_lock_not_held_(FlowContext->OobInfo.EditLock) +NTSTATUS +StreamOobInjectReplacement( + _In_ STREAM_FLOW_CONTEXT* FlowContext, + _In_ UINT32 StreamFlags, + _In_ MDL* Mdl, // Optional + _In_ size_t Length + ) +/* + This function injects a section of replacement data (in place of data + removed from the stream) into the data stream. + + The MDL describing the replacement data is allocated during DriverEntry + and does not need to be freed during injection completion. +*/ +{ + NTSTATUS Status; + NET_BUFFER_LIST* NetBufferList = NULL; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, sFlags %#x, Length %Iu", FlowContext, StreamFlags, Length); + + Status = FwpsAllocateNetBufferAndNetBufferList( + Globals.NetBufferListPool, + 0, + 0, + Mdl, + 0, + Length, + &NetBufferList + ); + + if (NT_SUCCESS(Status)) + { + NT_ASSERT(!(StreamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && + !(StreamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)); + + Status = StreamOobQueueUpOutgoingData( + FlowContext, + NetBufferList, + FALSE, + Length, + StreamFlags, + NULL + ); + + if (NT_SUCCESS(Status)) + { + NetBufferList = NULL; + } + } + + if (NetBufferList) + { + FwpsFreeNetBufferList(NetBufferList); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: FlowCtx %p, %!STATUS!", FlowContext, Status); + + return Status; +} + +FORCEINLINE +NTSTATUS +StreamOobCopyDataToFlatBuffer( + _Inout_ PTASK_ENTRY TaskEntry + ) +/* + This function copies the data described by NBL(s) into a flat buffer for easy searching. + + It reuses the FwpsCopyStreamDataToBuffer API (via StreamEditCopyDataForInspection) + by creating a FWPS_STREAM_DATA struct. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + FWPS_STREAM_DATA streamData; + + if (TaskEntry->DataLength > 0) + { + streamData.netBufferListChain = TaskEntry->NetBufferList; + streamData.dataLength = TaskEntry->DataLength; + streamData.flags = TaskEntry->StreamFlags; + + streamData.dataOffset.netBufferList = TaskEntry->NetBufferList; + streamData.dataOffset.netBuffer = NET_BUFFER_LIST_FIRST_NB(streamData.dataOffset.netBufferList); + streamData.dataOffset.mdl = NET_BUFFER_CURRENT_MDL(streamData.dataOffset.netBuffer); + streamData.dataOffset.mdlOffset = NET_BUFFER_CURRENT_MDL_OFFSET(streamData.dataOffset.netBuffer); + + streamData.dataOffset.netBufferOffset = 0; + streamData.dataOffset.streamDataOffset = 0; + + if (!StreamEditCopyDataForInspection(TaskEntry->FlowCtx, &streamData, streamData.dataLength)) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + } + } + return Status; +} + +_Requires_lock_not_held_(TaskEntry->FlowCtx->OobInfo.EditLock) +NTSTATUS +StreamOobEditData( +_Inout_ PTASK_ENTRY TaskEntry +) +/* + This function processes Stream data in "Out of Band" processing, looking + for pattern matches, and replacing them. + + It first copies the stream data into a flat inspection buffer; + it then parses the buffer looking for the matching pattern. For + non-matching sections it re-injects the data back; for a match, it skips + over and injects a replacement pattern. + + If a match can not be determined due to lack of data, it injects the + non-matching section back and moves the potential (or partial) match + to the beginning of the (flattened) inspection buffer. + + If a FIN is presented by the NetBufferList, it flushes all processed stream + sections back and re-injects the FIN back at the end the stream. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + PSTREAM_FLOW_CONTEXT FlowContext = TaskEntry->FlowCtx; + UINT i; + BOOLEAN bStreamModified, bPartialMatch; + BYTE* dataStart; + + + size_t BytesToProcess = 0; // # of bytes to be processed in one loop! + size_t ProcessedBytes = 0; // # of bytes of original data actually processed/consumed + size_t BytesRemaining = TaskEntry->DataLength; // # of bytes of original data remaining to be processed. + + FWPS_STREAM_DATA StreamData; // Local StreamData struct for keeping track of stream data offset + PNET_BUFFER_LIST TheNbl; // The NBL to be processed next in the StreamData's netBufferListChain + + BOOLEAN bIsLastNbl; // True if last NBL of the chain is being processed + BOOLEAN bProcessingPartialTask = FALSE; // True if we are only processing a part of current task data + + NT_ASSERT(TaskEntry->NetBufferList != NULL); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, Task %p, NBL Chain @ %p, Length %Iu, sFlags %#x, Pended Data %Iu", + FlowContext, + TaskEntry, + TaskEntry->NetBufferList, + TaskEntry->DataLength, + TaskEntry->StreamFlags, + FlowContext->OobInfo.PendedDataLength); + + StreamData.dataLength = TaskEntry->DataLength; + StreamData.netBufferListChain = TheNbl = TaskEntry->NetBufferList; + StreamData.flags = TaskEntry->StreamFlags; + StreamData.dataOffset.streamDataOffset = 0; + + while (BytesRemaining) + { + bStreamModified = bPartialMatch = FALSE; + + StreamData.dataOffset.netBufferList = TheNbl; + + StreamData.dataOffset.netBuffer = NET_BUFFER_LIST_FIRST_NB(TheNbl); + StreamData.dataOffset.netBufferOffset = NET_BUFFER_CURRENT_MDL_OFFSET(StreamData.dataOffset.netBuffer); + + StreamData.dataOffset.mdl = NET_BUFFER_CURRENT_MDL(StreamData.dataOffset.netBuffer); + StreamData.dataOffset.mdlOffset = NET_BUFFER_CURRENT_MDL_OFFSET(StreamData.dataOffset.netBuffer); + + StreamData.dataOffset.streamDataOffset += BytesToProcess; + + // Presume we are going to process all data. + BytesToProcess = BytesRemaining; + bIsLastNbl = TRUE; + + // However, if we have more data than we can handle, lets try to consume it in chunks! + // + if (BytesRemaining + FlowContext->ScratchDataLength > Globals.BusyThreshold) + { + + // Process ONE NBL at a time... + // + // It is possible that the length of NBL being processed is more than the + // BusyThreshold limit (though, very unlikely for a realistic BusyThreshold). + // + // The code can be modified to handle such situations -- i.e. to process a + // partial NBL or to process multiple NBLs (or a combination thereof ) at a + // time by appropriately setting StreamData.dataOffset. + // + // This is left as an exercise for the user. + // + + BytesToProcess = NetBufferListLength(TheNbl); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "Partially processing task %p - Now Processing NBL %p with %Iu bytes", + TaskEntry, TheNbl, BytesToProcess); + + TheNbl = TheNbl->Next; + + if (TheNbl != NULL) + bIsLastNbl = FALSE; + + bProcessingPartialTask = TRUE; + + if (BytesToProcess == 0) + { + NT_ASSERT(TheNbl != NULL); + continue; + } + } + + + if (!StreamEditCopyDataForInspection(TaskEntry->FlowCtx, &StreamData, BytesToProcess)) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p, Task %p - CopyDataToFlatBuffer failed with status %#x", + FlowContext, TaskEntry, Status); + + goto Exit; + } + + + /* + Search for a pattern through the "flattened" buffer. + + If we find a full match, inject the (if any) data before the match into stream, + followed by the injection of replacement pattern. + + If we find a partial match (at the end of flat buffer), then inject the data + before the pattern, and move the partial pattern at the beginning of the ScratchBuffer. + Next time (if) we get more data, we can try for a full match. + */ + + NT_ASSERT(FlowContext->ScratchDataOffset == 0); + dataStart = (BYTE*)FlowContext->ScratchBuffer; + + ProcessedBytes = FlowContext->ScratchDataLength; + + for (i = 0; i < FlowContext->ScratchDataLength; ++i) + { + // If there is enough data on which to perform a search + // + if (i + Globals.StringToFindLength <= FlowContext->ScratchDataLength) + { + if (RtlCompareMemory( + dataStart + i, + Globals.StringToFind, + Globals.StringToFindLength + ) == Globals.StringToFindLength) + { + // If the match is not at the beginning of the data, + // inject back the data before the match + // + if (i != 0) + { + Status = StreamOobReinjectData(FlowContext, dataStart, i, TaskEntry->StreamFlags); + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + FlowContext->ScratchDataOffset += i; + FlowContext->ScratchDataLength -= i; + i = 0; + } + + // Now inject the replacement string in place of the match (Globals.StringToFind)! + // + Status = StreamOobInjectReplacement( + FlowContext, + TaskEntry->StreamFlags, + Globals.StringXMdl, + Globals.StringXLength + ); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + FlowContext->ScratchDataOffset += Globals.StringToFindLength; + FlowContext->ScratchDataLength -= Globals.StringToFindLength; + + bStreamModified = TRUE; + + // Still more data to be searched for the match + // + if (FlowContext->ScratchDataLength > 0) + { + dataStart = (BYTE*)FlowContext->ScratchBuffer + FlowContext->ScratchDataOffset; + --i; + + continue; + } + else { + FlowContext->ScratchDataOffset = 0; + } + } + } + else // If we do not have enough data to perform a search on + { + // If we do not expect more data to come in, get out... + // 1 == FlowContext->OobInfo.RefCount ==> This is the last + // (data-processing) Task being processed for the flow + // + if (bIsLastNbl && FlowContext->bNoMoreData && (0 == FlowContext->OobInfo.PendingTasks)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p -> giving up on partial match search - offset %lu, scratch length %Iu", + FlowContext, i, FlowContext->ScratchDataLength); + + break; + } + + // Look for a partial match! + // If we find a partial match, move the partially matching pattern + // to the beginning of ScratchBuffer... when more data comes in, + // we'll try a complete match again. + // + if (RtlCompareMemory(dataStart + i, Globals.StringToFind, FlowContext->ScratchDataLength - i) + == FlowContext->ScratchDataLength - i) + { + bPartialMatch = TRUE; // This is a partial find + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p -> partial match @ offset %lu, match length %Iu", + FlowContext, i, (FlowContext->ScratchDataLength - i)); + + if (i != 0) + { + // Inject any data before partial match back into the stream + // + Status = StreamOobReinjectData( + FlowContext, + dataStart, + i, + TaskEntry->StreamFlags + ); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + } + // Move the partially matching bytes to the beginning of scratch buffer + // + RtlMoveMemory((BYTE*)FlowContext->ScratchBuffer, dataStart + i, FlowContext->ScratchDataLength - i); + FlowContext->PartialSFlags = TaskEntry->StreamFlags; + + FlowContext->ScratchDataOffset = 0; + FlowContext->ScratchDataLength -= i; + + break; + } + } + } + + // + // At this point we should fall into one of the following : + // case 1: We found a partial match (irrespective of whether a full match was + // found before it or not). Data before the partial match has already + // been injected; we do not need to inject any more data. + // + // case 2: We found a full match (but no partial match). + // Data before the match has been taken care of; if there is any data + // left after the matching token, inject it. + // + // case 3: No full or partial match was found. + // subcase 1: There is data left in the ScratchBuffer from a previous + // partial match: + // inject "data left from previous match" + // . . . then the current NBL (subcase 2 below) + // + // subcase 2: There is no data left from previous partial match + // (i.e. all data is what was in the indicated NBL Chain) : + // inject the indicated NetBufferList Chain... + // + // Injecting (original/indicated) NBLs will save us from having to + // allocate memory and unnecessary processing to create new NBL. + // + + if (bPartialMatch) + { + // case 1. nothing to be done! + // + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p: Partial match, nothing to reinject, %Iu bytes left...", + FlowContext, FlowContext->ScratchDataLength); + } + else if (bStreamModified) + { + // case 2. We found a match. Reinject data after matching token + // + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p: Full match, reinjecting %Iu remaining bytes", + FlowContext, FlowContext->ScratchDataLength); + + if (FlowContext->ScratchDataLength > 0) + { + Status = StreamOobReinjectData( + FlowContext, + dataStart, + FlowContext->ScratchDataLength, + TaskEntry->StreamFlags + ); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + FlowContext->ScratchDataOffset = FlowContext->ScratchDataLength = 0; + } + } + else + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p: No match, reinjecting %Iu+%Iu bytes", + FlowContext, + (FlowContext->ScratchDataLength - BytesToProcess), + BytesToProcess); + + if (!bProcessingPartialTask) + { + NT_ASSERT(TaskEntry->DataLength == BytesToProcess); + + if (FlowContext->ScratchDataLength > BytesToProcess) + { + // Case 3/subcase 1: We have partial data left in the scratch buffer. + // + NT_ASSERT(FlowContext->ScratchBuffer == dataStart); + NT_ASSERT(FlowContext->ScratchDataOffset == 0); + + Status = StreamOobReinjectData( + FlowContext, + dataStart, + (FlowContext->ScratchDataLength - BytesToProcess), + FlowContext->PartialSFlags + ); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + FlowContext->ScratchDataLength = BytesToProcess; + } + + // case 3/subcase 2: Inject the rest of the (original) data. + // + if (TaskEntry->DataLength) + { + NT_ASSERT(TaskEntry->DataLength == FlowContext->ScratchDataLength); + + Status = StreamOobQueueUpOutgoingData( + FlowContext, + TaskEntry->NetBufferList, + TRUE, + TaskEntry->DataLength, + TaskEntry->StreamFlags, + NULL + ); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + TaskEntry->NetBufferList = NULL; + } + } + else + { + NT_ASSERT(FlowContext->ScratchBuffer == dataStart); + NT_ASSERT(FlowContext->ScratchDataOffset == 0); + + Status = StreamOobReinjectData( + FlowContext, + FlowContext->ScratchBuffer, + FlowContext->ScratchDataLength, + TaskEntry->StreamFlags + ); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + } + + FlowContext->ScratchDataOffset = FlowContext->ScratchDataLength = 0; + } + + ProcessedBytes -= FlowContext->ScratchDataLength; + + NT_ASSERT((signed)ProcessedBytes >= 0); + InterlockedAdd((LONG *)&FlowContext->OobInfo.PendedDataLength, -(signed)ProcessedBytes); + + + BytesRemaining -= BytesToProcess; + + NT_ASSERT(FlowContext->ScratchDataLength < Globals.StringToFindLength); + + } // while (BytesRemaining); + + // If we received a FIN and there are left overs in ScratchBuffer, + // let us inject it before injecting the FIN. + // + if ((TRUE == FlowContext->bFlowTerminating) && + (0 == TaskEntry->DataLength)) + { + NT_ASSERT(FlowContext->OobInfo.PendedDataLength == FlowContext->ScratchDataLength); + + if (FlowContext->OobInfo.PendedDataLength) + { + NT_ASSERT(FlowContext->ScratchDataOffset == 0); + + Status = StreamOobReinjectData(FlowContext, + FlowContext->ScratchBuffer, + FlowContext->ScratchDataLength, + FlowContext->PartialSFlags); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + // InterlockedExchangeSubtract can be used as well! + // + InterlockedAdd((LONG *)&FlowContext->OobInfo.PendedDataLength, -(signed)FlowContext->ScratchDataLength); + FlowContext->ScratchDataOffset = FlowContext->ScratchDataLength = 0; + } + } + + + // + // Its a good time to reinject the processed data back into the stream + // + Status = StreamOobFlushOutgoingData(FlowContext); + + if (!NT_SUCCESS(Status)) + { + goto Exit; + } + + // FIN/RST :: inject FIN after flushing the processed stream data + // + if ( (TRUE == FlowContext->bFlowTerminating) && + (0 == TaskEntry->DataLength) ) + { + NT_ASSERT(TRUE == FlowContext->bNoMoreData); + NT_ASSERT(FlowContext->OobInfo.PendedDataLength == 0); + + NT_ASSERT( TaskEntry->StreamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT || + TaskEntry->StreamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Now injecting FIN for FlowCtx %p", FlowContext); + Status = FwpsStreamInjectAsync( + Globals.InjectionHandle, + NULL, + 0, + FlowContext->FlowHandle, + FlowContext->CalloutId, + FlowContext->LayerId, + (DWORD)TaskEntry->StreamFlags, + TaskEntry->NetBufferList, + 0, + StreamOobCloneInjectCompletionFn, + NULL + ); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FIN injection for FlowCtx %p failed with %!STATUS!", FlowContext, Status); + goto Exit; + } + + TaskEntry->NetBufferList = NULL; + } + +Exit: + + if (TaskEntry->NetBufferList != NULL) + { + FwpsDiscardClonedStreamData(TaskEntry->NetBufferList, 0, FALSE); + TaskEntry->NetBufferList = NULL; + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: FlowCtx %p, %!STATUS!", FlowContext, Status); + return Status; +} + +VOID +StreamEditOobProcessTask( + TASK_ENTRY *TaskEntry + ) +/* + This function processes a Task Entry data and resume + a paused stream if conditions are right. +*/ +{ + KLOCK_QUEUE_HANDLE LockHandle; + NTSTATUS Status = STATUS_SUCCESS; + STREAM_FLOW_CONTEXT* FlowCtx = TaskEntry->FlowCtx; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!: Processing Task %p for FlowCtx %p", TaskEntry, FlowCtx); + + do + { + KeAcquireInStackQueuedSpinLock(&FlowCtx->OobInfo.EditLock, &LockHandle); + + if (OOB_EDIT_ERROR == FlowCtx->OobInfo.EditState) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "TaskProc: Flow in Error/Shutdown (%d) state", FlowCtx->OobInfo.EditState); + KeReleaseInStackQueuedSpinLock(&LockHandle); + break; + } + + KeReleaseInStackQueuedSpinLock(&LockHandle); + + Status = StreamOobEditData(TaskEntry); + + if (!NT_SUCCESS(Status)) + { + KeAcquireInStackQueuedSpinLock(&FlowCtx->OobInfo.EditLock, &LockHandle); + FlowCtx->OobInfo.EditState = OOB_EDIT_ERROR; + KeReleaseInStackQueuedSpinLock(&LockHandle); + break; + } + + // Wait till we have some room to process more data + // + if (FlowCtx->OobInfo.PendedDataLength <= (Globals.BusyThreshold >> 2)) + { + BOOLEAN bStreamPaused; + + KeAcquireInStackQueuedSpinLock(&FlowCtx->OobInfo.EditLock, &LockHandle); + bStreamPaused = (OOB_EDIT_BUSY == FlowCtx->OobInfo.EditState); + + if (FlowCtx->OobInfo.PendedDataLength < Globals.StringToFindLength) + FlowCtx->OobInfo.EditState = OOB_EDIT_IDLE; + else + if (FlowCtx->OobInfo.EditState == OOB_EDIT_BUSY) + FlowCtx->OobInfo.EditState = OOB_EDIT_PROCESSING; + + KeReleaseInStackQueuedSpinLock(&LockHandle); + + if (bStreamPaused) + { + NTSTATUS ContinueStatus; + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "TaskProc: Calling FwpsStreamContinue. PendedLength %Iu, new State %!OobState!", + FlowCtx->OobInfo.PendedDataLength, + FlowCtx->OobInfo.EditState); + + ContinueStatus = FwpsStreamContinue( + FlowCtx->FlowHandle, + FlowCtx->CalloutId, + FlowCtx->LayerId, + FlowCtx->OobInfo.StreamFlags + ); + + if (!NT_SUCCESS(ContinueStatus)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "TaskProc: FwpsStreamContinue() returns with %!STATUS!", ContinueStatus); + + KeAcquireInStackQueuedSpinLock(&FlowCtx->OobInfo.EditLock, &LockHandle); + FlowCtx->OobInfo.EditState = OOB_EDIT_ERROR; + KeReleaseInStackQueuedSpinLock(&LockHandle); + + break; + } + } + } + } while (FALSE); + + // DeRef the FlowContext for completed task + StmEditDeReferenceFlow(TaskEntry->FlowCtx, _MODULE_ID, __LINE__); + + KeAcquireInStackQueuedSpinLock(&FlowCtx->OobInfo.EditLock, &LockHandle); + if (OOB_EDIT_ERROR == FlowCtx->OobInfo.EditState) + { + KeReleaseInStackQueuedSpinLock(&LockHandle); + +#if (NTDDI_VERSION >= NTDDI_WIN8) + (VOID)StreamOobFlushOutgoingData(FlowCtx); + Status = FwpsFlowAbort(FlowCtx->FlowHandle); + + if (!NT_SUCCESS(Status)) + { + (VOID) FwpsFlowRemoveContext(FlowCtx->FlowHandle, FlowCtx->LayerId, FlowCtx->CalloutId); + } +#else + (VOID) StreamEditRemoveFlowCtx(FlowCtx); +#endif + + } + else + { + KeReleaseInStackQueuedSpinLock(&LockHandle); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: Task %p for FlowCtx %p (Ref %lu, Pending %lu), State %!OobState!", + TaskEntry, FlowCtx, FlowCtx->RefCount, FlowCtx->OobInfo.PendingTasks, FlowCtx->OobInfo.EditState); +} + + +__drv_functionClass(IO_WORKITEM_ROUTINE) +__drv_requiresIRQL(PASSIVE_LEVEL) +__drv_sameIRQL +VOID +StreamEditOobPoolWorker( + _In_ PDEVICE_OBJECT DevObj, + _In_opt_ PVOID Context + ) +{ + PLW_ENTRY LinkEntry = (PLW_ENTRY)Context; + PTASK_ENTRY TaskEntry; + ULONG Count; + + UNREFERENCED_PARAMETER(DevObj); + + NT_ASSERT(LinkEntry != NULL); + + while (LinkEntry) + { + TaskEntry = CONTAINING_RECORD(LinkEntry, TASK_ENTRY, LwQLink); + NT_ASSERT(TaskEntry); + LinkEntry = LinkEntry->Next; + + // + // Process the task. + // + Count = InterlockedDecrement(& (LONG)TaskEntry->FlowCtx->OobInfo.PendingTasks); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_REFCOUNT, + "FlowCtx %p, ProcessingTask %p: PendingTasks @-- = %lu", TaskEntry->FlowCtx, TaskEntry, Count); + + StreamEditOobProcessTask(TaskEntry); + + // + // Free the task Memory. + // + ExFreeToLookasideListEx(&Globals.LookasideList, TaskEntry); + } + + return; +} + +VOID +OobEditClassify( + _In_ const FWPS_INCOMING_VALUES* InFixedValues, + _In_ const FWPS_INCOMING_METADATA_VALUES* InMetaValues, + _Inout_ VOID* LayerData, + _In_ const FWPS_FILTER* Filter, + _In_ UINT64 InFlowContext, + _Inout_ FWPS_CLASSIFY_OUT* ClassifyOut + ) +/* + This is the ClassifyFn function registered by the OOB stream edit callout. + + An OOB stream modification callout blocks all indicated data after cloning + them for processing by a kernel mode worker thread (or marshalling the data + to user mode for inspection); the resultant/edited data will then be put + back to the stream via the stream injection API. + +*/ +{ + FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket; + FWPS_STREAM_DATA* streamData; + + PTASK_ENTRY TaskEntry = NULL; + NTSTATUS Status = STATUS_SUCCESS; + KLOCK_QUEUE_HANDLE LockHandle; + STREAM_FLOW_CONTEXT* FlowContext = (STREAM_FLOW_CONTEXT *)(ULONG_PTR)InFlowContext; + + ioPacket = (FWPS_STREAM_CALLOUT_IO_PACKET*)LayerData; + NT_ASSERT(ioPacket != NULL); + + streamData = ioPacket->streamData; + NT_ASSERT(streamData != NULL); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, sFlags %#x, Length %Iu, LayerId %hu, CalloutId %u, FlowId %I64u, cFlags %#x", + FlowContext, + streamData->flags, + streamData->dataLength, + InFixedValues->layerId, + Filter->action.calloutId, + InMetaValues->flowHandle, + ClassifyOut->flags); + + // Set default classify action to Block, and stream action to None! + // + ClassifyOut->actionType = FWP_ACTION_BLOCK; + ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; + + // Setting countBytesEnforced to 0 bytes means that action applies + // to entire stream... We'll consume or reject the entire stream data segment + // + ioPacket->countBytesEnforced = 0; + + // + // If the indicated data is insufficient for the callout to make an inspection + // decision, it can request for more data. To do so : + // + // 1. set IoPacket->streamAction to FWPS_STREAM_ACTION_NEED_MORE_DATA + // 2. set the countBytesRequired member to the minimal amount WFP should + // accumulate before the data is indicated again. + // 3. return FWP_ACTION_NONE from the classifyFn function + // + + if ((streamData->dataLength < Globals.StringToFindLength) && + !(ClassifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA)) + { + ioPacket->streamAction = FWPS_STREAM_ACTION_NEED_MORE_DATA; + ioPacket->countBytesRequired = (UINT32)Globals.StringToFindLength; + + ClassifyOut->actionType = FWP_ACTION_NONE; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p - Need more data.", FlowContext); + return; + } + + if (FlowContext->bFlowTerminating) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "Received data classified after FIN for FlowCtx %p.", FlowContext); + return; + } + + KeAcquireInStackQueuedSpinLock(&FlowContext->OobInfo.EditLock, &LockHandle ); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p: PendedDataLength %Iu, StreamDataLength %Iu, State %!OobState!, sFlags %#x", + FlowContext, + FlowContext->OobInfo.PendedDataLength, + streamData->dataLength, + FlowContext->OobInfo.EditState, + streamData->flags); + + switch (FlowContext->OobInfo.EditState) + { + case OOB_EDIT_PROCESSING: + + // If we are to pause a flow, make sure it is an inbound flow. Currently, + // WFP Stream layer only supports pausing and resuming inbound flows. + // + // Let's not pause the stream if we receive a DISCONNECT (FIN) packet. + // For FIN packets, streamData->dataLength == 0, and streamData->flags has + // one of the following flags set: + // FWPS_STREAM_FLAG_SEND_DISCONNECT + // FWPS_STREAM_FLAG_RECEIVE_DISCONNECT + // + if (( streamData->flags & FWPS_STREAM_FLAG_RECEIVE) && + streamData->dataLength && + FALSE == FlowContext->bNoMoreData ) + { + // While the stream is paused/deferred, it keeps storing incoming data + // for the callouts. If resuming a stream causes to give us more data + // than we can handle, then pause the stream again. + // + if (((FlowContext->OobInfo.PendedDataLength + streamData->dataLength) > Globals.BusyThreshold)) + { + ioPacket->streamAction = FWPS_STREAM_ACTION_DEFER; + ClassifyOut->actionType = FWP_ACTION_NONE; + + FlowContext->OobInfo.StreamFlags = streamData->flags; + FlowContext->OobInfo.EditState = OOB_EDIT_BUSY; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, Flow is pausing", FlowContext); + break; + } + } + + // If this is an outbound flow OR inbound flow that has not yet hit + // threshold limit, keep queueing the data for processing. + // + // Fall through to IDLE State. + // + + case OOB_EDIT_IDLE: + +#pragma prefast(push) +#pragma prefast(disable:6014, "Warning Leaking memory 'TaskEntry' : TaskEntry is freed in StreamEditOobPoolWorker") + TaskEntry = (PTASK_ENTRY) ExAllocateFromLookasideListEx(&Globals.LookasideList); +#pragma prefast(pop) + + if (TaskEntry) + { + TaskEntry->FlowCtx = FlowContext; + +#pragma prefast(push) +#pragma prefast(disable: 26110, "The lock is being held via KeAcquireInStackQueuedSpinLock") + Status = StreamOobQueueUpIncomingData(TaskEntry, streamData, ClassifyOut->flags); +#pragma prefast(pop) + + if (NT_SUCCESS(Status)) + { + // If the previous state was _PROCESSING, it stays the same... + FlowContext->OobInfo.EditState = OOB_EDIT_PROCESSING; + + // Block original data + // + break; + } + else + { + ExFreeToLookasideListEx(&Globals.LookasideList, TaskEntry); + TaskEntry = NULL; + } + } + + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, + "OC: FlowCtx %p ERROR. Task %p, %!STATUS!", FlowContext, TaskEntry, Status); + + FlowContext->OobInfo.EditState = OOB_EDIT_ERROR; + + // + // Fall through for ERROR processing + // + + case OOB_EDIT_ERROR: + // + // An out-of-band inspection module must not arbitrarily inject a FIN + // (which indicates no more data from the sender) into an (outgoing) data + // stream. If the module must drop the connection, its classifyFn callout + // function must set the FWPS_STREAM_CALLOUT_IO_PACKET->streamAction to + // FWPS_STREAM_ACTION_DROP_CONNECTION. + // + + ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; + break; + + default: + NT_ASSERT(FALSE); + break; + }; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, cAction %#x, sAction %#x, #Enforced %Iu, New State %!OobState!", + FlowContext, ClassifyOut->actionType, ioPacket->streamAction, ioPacket->countBytesEnforced, FlowContext->OobInfo.EditState); + + KeReleaseInStackQueuedSpinLock(&LockHandle); + return; +} diff --git a/network/trans/stmedit/sys/StreamEdit.c b/network/trans/stmedit/sys/StreamEdit.c new file mode 100644 index 00000000..9bad88d1 --- /dev/null +++ b/network/trans/stmedit/sys/StreamEdit.c @@ -0,0 +1,1633 @@ +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved + +Abstract: + Stream Edit Callout Driver Sample. + + This sample demonstrates finding and replacing a string pattern from a + live TCP stream via the WFP stream API. + + The driver demonstrates the two modes of stream editing/inspection -- + + o Inline Editing where all modification is carried out within the + WFP ClassifyFn callout function. + + o Out-of-band (OOB) Editing where all modification is done by a + worker thread. (this is the default) + + The mode setting, along with other inspection parameters are configurable + via the following registry values + + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\StmEdit\Parameters + + o StringToFind (REG_SZ, default = "rainy") + o StringX (REG_SZ, default = "cloudy") + o StringToReplace (REG_SZ, default = "sunny") + + o InspectionLocalPort (REG_DWORD, default = 8888) + + o InspectionRemotePort (REG_DWORD, default = 0) + Note: for this sample, a local or remote port is mandatory. Both cannot be zero. + + o InspectioDirection (REG_DWORD, default = 2) + possible values : 2 (inbound + outbound), 0 (FWP_DIRECTION_OUTBOUND), 1 (FWP_DIRECTION_INBOUND) + + o MultipleCallouts (REG_DWORD, default = true/1) + controls registration of multiple callouts. Set 0 for false, other for TRUE + + o BusyThreshold (REG_DWORD, default = 16KB) + BusyThreshold value is in KBs (e.g. a value of 5 means 5KB) + + The sample is IP version agnostic. It is capable of performing inspections + on both IPv4 and IPv6 data streams + + Before experimenting with the sample, please be sure to add an exception for + the InspectionPort configured to the firewall. + +Environment: + Kernel mode + +--*/ + +#include "Trace.h" +#include "StreamEdit.h" +#include "StreamEdit.tmh" + +STMEDIT_GLOBALS Globals; + +DRIVER_INITIALIZE DriverEntry; +EVT_WDF_DRIVER_UNLOAD StreamEditEvtDriverUnload; + +#if defined _MODULE_ID +#undef _MODULE_ID +#endif +#define _MODULE_ID 'S' + +VOID +StmEditReferenceFlow( + _Inout_ PSTREAM_FLOW_CONTEXT FlowContext, + _In_ char Module, + _In_ UINT Line + ) +{ + LONG Count = InterlockedIncrement((LONG *)&FlowContext->RefCount); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_REFCOUNT, "FlowCtx %p RefCount++ @ %c/%lu = %lu", FlowContext, Module, Line, Count); +} + +VOID +StmEditDeReferenceFlow( + _Inout_ PSTREAM_FLOW_CONTEXT FlowContext, + _In_ char Module, + _In_ UINT Line + ) +{ + LONG Count; + KLOCK_QUEUE_HANDLE LockHandle; + + NT_ASSERT(FlowContext->RefCount > 0); + + Count = InterlockedDecrement((LONG *)&FlowContext->RefCount); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_REFCOUNT, "FlowCtx %p RefCount-- @ %c/%lu = %lu", FlowContext, Module, Line, Count); + + if (Count == 0) + { + NT_ASSERT( ! FlowContext->bFlowActive); + + // Remove the context from global context list + // + KeAcquireInStackQueuedSpinLock(&Globals.FlowContextListLock, &LockHandle); + + if (!FlowContext->bEntryRemoved) + { + RemoveEntryList(&FlowContext->Link); + FlowContext->bEntryRemoved = TRUE; + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, -- Link removed", FlowContext); + } + Count = --Globals.FlowContextCount; + + if (Globals.FlowContextCount == 0) + { + NT_ASSERT(IsListEmpty(&Globals.FlowContextList)); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Setting ZeroFlowCountEvent."); + KeSetEvent(&Globals.ZeroFlowCountEvent, IO_NO_INCREMENT, FALSE); + } + KeReleaseInStackQueuedSpinLock(&LockHandle); + + if (!FlowContext->bEditInline) + { + NT_ASSERT(IsListEmpty(&FlowContext->OobInfo.OutgoingDataQueue)); + } + + if (FlowContext->ScratchBuffer) + { + ExFreePoolWithTag(FlowContext->ScratchBuffer, STMEDIT_TAG_FLAT_BUFFER); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p is being freed., %lu remain @--", FlowContext, Count); + ExFreePoolWithTag(FlowContext, STMEDIT_TAG_FLOWCTX); + } +} + + +NTSTATUS +StreamEditNotifyFunction( + _In_ FWPS_CALLOUT_NOTIFY_TYPE NotifyType, + _In_ const GUID* FilterKey, + _In_ const FWPS_FILTER* Filter + ) +{ +/* + Notify Function. +*/ + UNREFERENCED_PARAMETER(FilterKey); + +#if 0 + UNREFERENCED_PARAMETER(notifyType); + UNREFERENCED_PARAMETER(filter); +#else + NT_ASSERT(Filter != NULL); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "-><- %!FUNC! invoked with %I64u for Filter ID %I64u", + NotifyType, Filter->filterId); + +#endif + return STATUS_SUCCESS; +} + +void +NTAPI +StreamEditInjectCompletionFn( + _In_ VOID* Context, + _Inout_ NET_BUFFER_LIST* NetBufferList, + _In_ BOOLEAN DispatchLevel + ) +/* + Injection completion function for injecting an NBL created using + FwpsAllocateNetBufferAndNetBufferList. +*/ +{ + MDL* mdl = (MDL*)Context; + + UNREFERENCED_PARAMETER(DispatchLevel); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "-><- %!FUNC!: NBL %p (%!STATUS!), MDL %p", NetBufferList, NetBufferList->Status, mdl); + + // Supress warning 28922: Redundant test against NULL. Pointer is already guaranteed to be non-NULL. + // Rationale : mdl is not guaranteed to be non-NULL here. +#pragma prefast(push) +#pragma prefast(disable:28922) + + if (mdl != NULL) + { + // + // The MDL mapped over a pool alloc which we need to free here. + // + + ExFreePoolWithTag(mdl->MappedSystemVa, STMEDIT_TAG_MDL_DATA); + + IoFreeMdl(mdl); + } +#pragma prefast(pop) + + NT_ASSERT(NetBufferList != NULL); + FwpsFreeNetBufferList(NetBufferList); +} + +NTSTATUS +StreamEditRemoveFlowCtx( + _In_ PSTREAM_FLOW_CONTEXT Context + ) +/* + Function to disassociate a previously associated context from a data flow. + This will cause flowDelete function to be invoked (either synchronously or asynchronously). + + Remarks @ http://msdn.microsoft.com/en-us/library/windows/hardware/ff551169.aspx + + If the FwpsFlowRemoveContext0 function returns STATUS_SUCCESS, FwpsFlowRemoveContext0 + calls the flowDeleteFn callout function synchronously.If FwpsFlowRemoveContext0 returns + STATUS_PENDING, FwpsFlowRemoveContext0 calls flowDeleteFn asynchronously because an + active callout classification is in progress. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + // + // Possible synchronization problem for accessing bFlowActive... + // while we are flushing the data, FlowDeleteFn can get invoked. + // + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!: FlowCtx %p", Context); + + NT_ASSERT(Context); + + if (Context->bEditInline) + { + (VOID) InlineEditFlushData(Context, 0, Context->PartialSFlags); + } + else { + (VOID) StreamOobFlushOutgoingData(Context); + } + + if (Context->bFlowActive) + { + + Status = FwpsFlowRemoveContext( + Context->FlowHandle, + Context->LayerId, + Context->CalloutId); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: FlowCtx %p, %!STATUS!", Context, Status); + return Status; +} + +VOID +StreamEditSignalShutdown( +) +/* + This function attempts to Disassociate all active FlowContexts so that + a shutdown can be performed. +*/ +{ + KLOCK_QUEUE_HANDLE LockHandle; + PSTREAM_FLOW_CONTEXT FlowContext; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!"); + + KeAcquireInStackQueuedSpinLock(&Globals.FlowContextListLock, &LockHandle); + while ( ! IsListEmpty(&Globals.FlowContextList) ) + { + PLIST_ENTRY Entry = RemoveHeadList(&Globals.FlowContextList); + + FlowContext = CONTAINING_RECORD(Entry, STREAM_FLOW_CONTEXT, Link); + FlowContext->bEntryRemoved = TRUE; + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, -- Link removed at shutdown", FlowContext); + + if (FlowContext->bFlowActive) + { + KeReleaseInStackQueuedSpinLock(&LockHandle); + (VOID)StreamEditRemoveFlowCtx(FlowContext); + KeAcquireInStackQueuedSpinLock(&Globals.FlowContextListLock, &LockHandle); + } + } + KeReleaseInStackQueuedSpinLock(&LockHandle); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!"); +} + +VOID +StreamEditFlowDeleteFunction( + _In_ UINT16 LayerId, + _In_ UINT32 CalloutId, + _In_ UINT64 Context + ) +/* + This is the flowDeleteFn function. This callback is invoked when a flow is + terminated or due to call to FwpsFlowRemoveContext0. + + We removes the FlowContext from the global FlowcCntextList and releases resources. + + IRQL <= DISPATCH_LEVEL +*/ +{ + PSTREAM_FLOW_CONTEXT FlowCtx = (PSTREAM_FLOW_CONTEXT)(ULONG_PTR)Context; + + NT_ASSERT(NULL != FlowCtx); + NT_ASSERT(TRUE == FlowCtx->bFlowActive); + + InterlockedExchange8(&FlowCtx->bFlowActive, FALSE); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!: FlowCtx %p, LayerId %hu, CalloutId %u, FlowId %I64u (RefCt = %lu)", + FlowCtx, LayerId, CalloutId, FlowCtx->FlowHandle, FlowCtx->RefCount ); + + // Deref the reference taken in Flow-established when the FlowCtx was allocated + // + StmEditDeReferenceFlow(FlowCtx, _MODULE_ID, __LINE__); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: FlowCtx %p", FlowCtx); +} + + +VOID +NTAPI +StreamEditCommonStreamClassify( + _In_ const FWPS_INCOMING_VALUES* InFixedValues, + _In_ const FWPS_INCOMING_METADATA_VALUES* InMetaValues, + _In_ PVOID LayerData, +#if(NTDDI_VERSION >= NTDDI_WIN7) + _In_ const VOID* ClassifyContext, +#endif + _In_ const FWPS_FILTER* Filter, + _In_ UINT64 InFlowContext, + _Inout_ FWPS_CLASSIFY_OUT* ClassifyOut + ) +/* + Common classifyFn for both Inline and Out-of-band Stream layer callouts. + Invokes corresponding classify-function based on FlowContext->bEditInline flag. +*/ +{ + PSTREAM_FLOW_CONTEXT FlowContext = (PSTREAM_FLOW_CONTEXT)(ULONG_PTR)InFlowContext; + +#if(NTDDI_VERSION >= NTDDI_WIN7) + UNREFERENCED_PARAMETER(ClassifyContext); +#endif + + NT_ASSERT(FlowContext); + + // Reference the flow to keep around while we are in classifyFn + // + StmEditReferenceFlow(FlowContext, _MODULE_ID, __LINE__); + + if (FlowContext->bEditInline) + { + InlineEditClassify( + InFixedValues, + InMetaValues, + LayerData, + Filter, + InFlowContext, + ClassifyOut + ); + } + else + { + OobEditClassify ( + InFixedValues, + InMetaValues, + LayerData, + Filter, + InFlowContext, + ClassifyOut + ); + } + + StmEditDeReferenceFlow(FlowContext, _MODULE_ID, __LINE__); +} + +VOID +StreamEditFlowEstablishedClassify( + _In_ const FWPS_INCOMING_VALUES* InFixedValues, + _In_ const FWPS_INCOMING_METADATA_VALUES* InMetaValues, + _In_ PVOID Packet, +#if(NTDDI_VERSION >= NTDDI_WIN7) + _In_ const void* ClassifyContext, +#endif + _In_ const FWPS_FILTER* Filter, + _In_ UINT64 InFlowContext, + _Inout_ FWPS_CLASSIFY_OUT* ClassifyOut +) +/* + Flow-established call out for IPV4 and IPV6 traffic. + Allocates and sets up a flow-context, and associate it with the flow. +*/ +{ + NTSTATUS Status; + PSTREAM_FLOW_CONTEXT StreamFlowContext; + UINT32 StreamCalloutId; + UINT16 StreamLayerId; + KLOCK_QUEUE_HANDLE lockHandle; + USHORT ipProtIndex; + + int CalloutSet = 0; + +#if(NTDDI_VERSION >= NTDDI_WIN7) + UNREFERENCED_PARAMETER(ClassifyContext); +#endif + UNREFERENCED_PARAMETER(InFlowContext); + UNREFERENCED_PARAMETER(Packet); + + + if ((Filter->action.calloutId == Globals.FlowEstablishedV4Callout1) || + (Filter->action.calloutId == Globals.FlowEstablishedV6Callout1)) + { + CalloutSet = 1; + } + else + if ((Filter->action.calloutId == Globals.FlowEstablishedV4Callout2) || + (Filter->action.calloutId == Globals.FlowEstablishedV6Callout2)) + { + CalloutSet = 2; + NT_ASSERT(TRUE == Globals.MultipleCallouts); + } + else + { + NT_ASSERT(FALSE); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!%d: LayerId %hu, CalloutId %u, FlowId %I64u", + CalloutSet, InFixedValues->layerId, Filter->action.calloutId, InMetaValues->flowHandle); + + ClassifyOut->actionType = FWP_ACTION_CONTINUE; + + // Lets not entertain any new flows if the driver is unloading! + // + if (Globals.DriverUnloading) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT,"<-- %!FUNC!: -- Driver unloading, flow not being associated with"); + return; + } + + // + // Setup the flow context for IPV4 Flows + // + if (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V4 == InFixedValues->layerId) + { + ipProtIndex = FWPS_FIELD_ALE_FLOW_ESTABLISHED_V4_IP_PROTOCOL; + StreamLayerId = FWPS_LAYER_STREAM_V4; + + StreamCalloutId = CalloutSet == 1 ? Globals.StreamLayerV4Callout1 : Globals.StreamLayerV4Callout2; + } + // + // Setup the flow context for IPV6 Flows + // + else if (FWPS_LAYER_ALE_FLOW_ESTABLISHED_V6 == InFixedValues->layerId) + { + ipProtIndex = FWPS_FIELD_ALE_FLOW_ESTABLISHED_V6_IP_PROTOCOL; + StreamLayerId = FWPS_LAYER_STREAM_V6; + + StreamCalloutId = CalloutSet == 1 ? Globals.StreamLayerV6Callout1 : Globals.StreamLayerV6Callout2; + } + else + { + // We should not be here. + // + NT_ASSERT(FALSE); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!: -- Invalid layer."); + return; + } + + // + // Creates a flow context and associate it with the current flow + // FlowContext gets deleted via flowDeleteFn + // + + do + { + StreamFlowContext = ExAllocatePoolWithTag(NonPagedPoolNx, + sizeof(STREAM_FLOW_CONTEXT), + STMEDIT_TAG_FLOWCTX); + + if (StreamFlowContext == NULL) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Unable to allocate flow context"); + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + + // Initialize the flow-context + // + RtlZeroMemory(StreamFlowContext, sizeof(STREAM_FLOW_CONTEXT)); + + StreamFlowContext->IpProto = InFixedValues->incomingValue[ipProtIndex].value.uint16; + StreamFlowContext->bFlowActive = TRUE; + + StreamFlowContext->FlowHandle = InMetaValues->flowHandle; + StreamFlowContext->LayerId = StreamLayerId; + StreamFlowContext->CalloutId = StreamCalloutId; + + // Reference to take ownership! + StmEditReferenceFlow(StreamFlowContext, _MODULE_ID, __LINE__); + + // Callout Set #1 is for Out of Band editing + // + if (CalloutSet == 1) + { + // Initialize OOB editing specific flow context structure fields + // this includes, creating a worker thread to handle + + KeInitializeSpinLock(&StreamFlowContext->OobInfo.EditLock); + InitializeListHead(&StreamFlowContext->OobInfo.OutgoingDataQueue); + + StreamFlowContext->OobInfo.EditState = OOB_EDIT_IDLE; + StreamFlowContext->OobInfo.QueueNumber = InterlockedIncrement((LONG *)&Globals.QueueIndex) % NUM_WORKITEM_QUEUES; + + } + // Callout Set #2 is for InLine editing + // + else + { + // Initialize inline editing specific flow context structure areas + // + StreamFlowContext->InlineEditState = INLINE_EDIT_IDLE; + StreamFlowContext->bEditInline = TRUE; + + StreamFlowContext->CurrentProcessor = INVALID_PROC_NUMBER; + } + + // Add the newly created context on global context list + KeAcquireInStackQueuedSpinLock(&Globals.FlowContextListLock, &lockHandle); + InsertTailList(&Globals.FlowContextList, &StreamFlowContext->Link); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p, ++ Link inserted into global list", StreamFlowContext); + + ++Globals.FlowContextCount; + if (Globals.FlowContextCount == 1) + { + // Reset the shut-down event in case it was set due to no active flows + // + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Clearing ZeroFlowCountEvent."); + KeClearEvent(&Globals.ZeroFlowCountEvent); + } + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FlowCtx %p is allocated., Total %lu @++", StreamFlowContext, Globals.FlowContextCount); + + KeReleaseInStackQueuedSpinLock(&lockHandle); + + Status = FwpsFlowAssociateContext( + StreamFlowContext->FlowHandle, + StreamLayerId, + StreamCalloutId, + (UINT64)StreamFlowContext); + + // + // If not able to associate a flow context, free the memory and return. + // + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "FlowContext association to FlowId %I64u failed with %!STATUS!", + InMetaValues->flowHandle, Status); + break; + } + + } while (FALSE); + + if (!NT_SUCCESS(Status) && StreamFlowContext) + { + StmEditDeReferenceFlow(StreamFlowContext, _MODULE_ID, __LINE__); + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!%d: FlowCtx %p, cOut->Action %#x, %!STATUS!", + CalloutSet, StreamFlowContext, ClassifyOut->actionType, Status); + return; +} + +NTSTATUS +StreamEditRegisterFlowEstablishedCallouts( + _In_ PVOID DeviceObject, + _In_ const GUID* LayerKey, + _In_ const GUID* CalloutKey, + _In_ FWPM_DISPLAY_DATA* DisplayData, + _Out_ UINT32* CalloutId, + _In_ int CalloutNum + ) +/* + This function registers callouts and filters that intercept TCP + traffic at WFP FWPM_LAYER_STREAM_V4 or FWPM_LAYER_STREAM_V6 layer. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + USHORT condIndex = 0; + BOOLEAN calloutRegistered = FALSE; + + FWPS_CALLOUT sCallout = { 0 }; + FWPM_CALLOUT mCallout = { 0 }; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!%d", CalloutNum); + + sCallout.calloutKey = *CalloutKey; // STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V4 / V6; + sCallout.notifyFn = StreamEditNotifyFunction; + + sCallout.classifyFn = StreamEditFlowEstablishedClassify; + + Status = FwpsCalloutRegister(DeviceObject, &sCallout, CalloutId); + + if (NT_SUCCESS(Status)) + { + calloutRegistered = TRUE; + + mCallout.calloutKey = *CalloutKey; + mCallout.displayData = *DisplayData; + mCallout.applicableLayer = *LayerKey; // FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 / V6 + + Status = FwpmCalloutAdd(Globals.EngineHandle, &mCallout, NULL, NULL); + + if (NT_SUCCESS(Status)) + { + FWPM_FILTER filter = { 0 }; + FWPM_FILTER_CONDITION filterConditions[4] = { 0 }; + + // Add Filters for StreamEditFlowEstablishedClassify + // + + filter.layerKey = *LayerKey; + filter.displayData.name = L"Stream Edit Sample Filter"; + filter.displayData.description = L"Filter that finds and replaces a token from a TCP stream (@ Flow Established)"; + + filter.action.type = FWP_ACTION_CALLOUT_INSPECTION; // FWP_ACTION_CALLOUT_TERMINATING; + filter.action.calloutKey = *CalloutKey; + filter.filterCondition = filterConditions; + + // In this sample, we edit TCP streams only + // + filterConditions[condIndex].fieldKey = FWPM_CONDITION_IP_PROTOCOL; + filterConditions[condIndex].matchType = FWP_MATCH_EQUAL; + filterConditions[condIndex].conditionValue.type = FWP_UINT8; + filterConditions[condIndex].conditionValue.uint8 = IPPROTO_TCP; + filter.numFilterConditions++; + condIndex++; + + // Filter according to the direction of the flow we are interested in + // + // @ http://msdn.microsoft.com/en-us/library/windows/desktop/aa364005.aspx + // + // For stream layers (FWPM_LAYER_STREAM_*) and flow established layers + // ( FWPM_LAYER_ALE_FLOW_ESTABLISHED_* ), the value will be the same as + // direction of the connection. + // + // For example, when a local application initiates the connection, an + // inbound packet has FWPM_CONDITION_DIRECTION set to FWP_DIRECTION_OUTBOUND. + // + + if (Globals.InspectionDirection != FWP_DIRECTION_MAX) + { + filterConditions[condIndex].fieldKey = FWPM_CONDITION_DIRECTION; + filterConditions[condIndex].matchType = FWP_MATCH_EQUAL; + filterConditions[condIndex].conditionValue.type = FWP_UINT32; + filterConditions[condIndex].conditionValue.uint32 = Globals.InspectionDirection; + filter.numFilterConditions++; + condIndex++; + } + + // Make sure that either the remote or the local port is specified... + // i.e. both ports are not zero + // + + if (Globals.InspectionLocalPort > 0) + { + filterConditions[condIndex].fieldKey = FWPM_CONDITION_IP_LOCAL_PORT; + filterConditions[condIndex].matchType = FWP_MATCH_EQUAL; + filterConditions[condIndex].conditionValue.type = FWP_UINT16; + filterConditions[condIndex].conditionValue.uint16 = Globals.InspectionLocalPort; + filter.numFilterConditions++; + condIndex++; + } + + if (Globals.InspectionRemotePort > 0) + { + filterConditions[condIndex].fieldKey = FWPM_CONDITION_IP_REMOTE_PORT; + filterConditions[condIndex].matchType = FWP_MATCH_EQUAL; + filterConditions[condIndex].conditionValue.type = FWP_UINT16; + filterConditions[condIndex].conditionValue.uint16 = Globals.InspectionRemotePort; + filter.numFilterConditions++; + } + + filter.subLayerKey = CalloutNum == 1 ? STREAM_EDITOR_SUBLAYER_1 : STREAM_EDITOR_SUBLAYER_2; + filter.weight.type = FWP_EMPTY; + + Status = FwpmFilterAdd(Globals.EngineHandle, &filter, NULL, NULL); + + } //FwpmCalloutAdd + } //FwpsCalloutRegister + + if (!NT_SUCCESS(Status)) + { + if (calloutRegistered) + { + FwpsCalloutUnregisterById(*CalloutId); + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!, %!STATUS!", Status); + return Status; +} + +NTSTATUS +StreamEditRegisterStreamLayerCallouts( + _In_ PVOID DeviceObject, + _In_ const GUID* LayerKey, + _In_ const GUID* CalloutKey, + _In_ FWPM_DISPLAY_DATA* DisplayData, + _Out_ UINT32* CalloutId, + _In_ const int CalloutNum + ) +/* + This function registers callouts that intercept TCP traffic + at WFP FWPM_LAYER_STREAM_V4 or FWPM_LAYER_STREAM_V6 layer. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + FWPS_CALLOUT sCallout = {0}; + FWPM_CALLOUT mCallout = {0}; + BOOLEAN calloutRegistered = FALSE; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!%d", CalloutNum); + + sCallout.calloutKey = *CalloutKey; + sCallout.classifyFn = StreamEditCommonStreamClassify; + sCallout.notifyFn = StreamEditNotifyFunction; + sCallout.flowDeleteFn = StreamEditFlowDeleteFunction; + + // http://msdn.microsoft.com/en-us/library/windows/hardware/ff551224.aspx + // + // FWPS_CALLOUT0 structure + // + // FWP_CALLOUT_FLAG_CONDITIONAL_ON_FLOW + // If this flag is specified, the filter engine calls the callout driver's + // classifyFn callout function only if there is a context associated with + // the data flow. + // + + sCallout.flags = FWP_CALLOUT_FLAG_CONDITIONAL_ON_FLOW; + + Status = FwpsCalloutRegister( + DeviceObject, + &sCallout, + CalloutId ); + + if (NT_SUCCESS(Status)) + { + calloutRegistered = TRUE; + + mCallout.calloutKey = *CalloutKey; + mCallout.displayData = *DisplayData; + mCallout.applicableLayer = *LayerKey; // FWPM_LAYER_STREAM_V4 / V6 + + Status = FwpmCalloutAdd( + Globals.EngineHandle, + &mCallout, + NULL, + NULL ); + + if (NT_SUCCESS(Status)) + { + // + // Add Filters for Stream Classify + // + // Note : we are adding a filter with no filter conditions -- i.e. this classifyFn callout + // will be classified for ALL streams/flows. + // However, due to FWP_CALLOUT_FLAG_CONDITIONAL_ON_FLOW set above, + // the classifyFn will be classified only for flows that have a context associated. + // + + FWPM_FILTER filter = { 0 }; + + filter.layerKey = *LayerKey; + filter.displayData.name = L"Stream Edit Sample Filter"; + filter.displayData.description = L"Filter that finds and replaces a token from a TCP stream (@ Stream Layer)"; + + filter.action.type = FWP_ACTION_CALLOUT_TERMINATING; + filter.action.calloutKey = *CalloutKey; + filter.numFilterConditions = 0; + filter.filterCondition = 0; + + filter.subLayerKey = CalloutNum == 1 ? STREAM_EDITOR_SUBLAYER_1 : STREAM_EDITOR_SUBLAYER_2; + filter.weight.type = FWP_EMPTY; // auto-weight + + Status = FwpmFilterAdd(Globals.EngineHandle, &filter, NULL, NULL); + } + } + + if (!NT_SUCCESS(Status)) + { + if (calloutRegistered) + { + FwpsCalloutUnregisterById(*CalloutId); + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!, %!STATUS!", Status); + return Status; +} + + +NTSTATUS +StreamEditRegisterCallouts( +_In_ PVOID DeviceObject + ) +/* + This function registers dynamic callouts and filters that intercept + TCP traffic at WFP FWPM_LAYER_STREAM_V4 and FWPM_LAYER_STREAM_V6 + layer. + + Callouts and filters will be removed during DriverUnload. +*/ +{ + NTSTATUS Status = STATUS_SUCCESS; + + BOOLEAN EngineOpened = FALSE; + BOOLEAN InTransaction = FALSE; + + FWPM_SESSION session = {0}; + + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT,"--> %!FUNC!"); + + session.flags = FWPM_SESSION_FLAG_DYNAMIC; + + Status = FwpmEngineOpen( + NULL, + RPC_C_AUTHN_WINNT, + NULL, + &session, + &Globals.EngineHandle + ); + + if (NT_SUCCESS(Status)) + { + EngineOpened = TRUE; + + Status = FwpmTransactionBegin(Globals.EngineHandle, 0); + if (NT_SUCCESS(Status)) + { + FWPM_SUBLAYER0 StreamEditSubLayer = { 0 }; + FWPM_DISPLAY_DATA DisplayData; + NTSTATUS StatusV6; + + InTransaction = TRUE; + + // Add SubLayer for Callout Set 1 (OoB V4/V6 callouts) + // Register the first set of callouts at Flow-established V4 and V6 layers + // + StreamEditSubLayer.subLayerKey = STREAM_EDITOR_SUBLAYER_1; + StreamEditSubLayer.displayData.name = L"Stream Edit Sample Sub-Layer 1"; + StreamEditSubLayer.displayData.description = L"Sub-Layer for use by Stream Edit Sample callouts"; + StreamEditSubLayer.weight = 0x40; + + Status = FwpmSubLayerAdd(Globals.EngineHandle, &StreamEditSubLayer, NULL); + + if (NT_SUCCESS(Status)) + { + DisplayData.name = L"Stream Editor Sample ALE Flow Established V4 Callout #1"; + DisplayData.description = L"Flow Established V4 Callout to associate flow-contexts with flows"; + + Status = StreamEditRegisterFlowEstablishedCallouts( + DeviceObject, + &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4, + &STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V4, + &DisplayData, + &Globals.FlowEstablishedV4Callout1, + 1); + + DisplayData.name = L"Stream Editor Sample ALE Flow Established V6 Callout #1"; + DisplayData.description = L"Flow Established V6 Callout to associate flow-contexts with flows"; + + StatusV6 = StreamEditRegisterFlowEstablishedCallouts( + DeviceObject, + &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6, + &STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V6, + &DisplayData, + &Globals.FlowEstablishedV6Callout1, + 1); + + if (NT_SUCCESS(Status) || NT_SUCCESS(StatusV6)) + { + DisplayData.name = L"Stream Editor Sample Stream Layer V4 Callout #1"; + DisplayData.description = L"Stream-Layer V4 Callout finds and replaces token(s) from a TCP stream"; + + Status = StreamEditRegisterStreamLayerCallouts( + DeviceObject, + &FWPM_LAYER_STREAM_V4, + &STREAM_EDITOR_STREAM_CALLOUT_V4, + &DisplayData, + &Globals.StreamLayerV4Callout1, + 1); + + DisplayData.name = L"Stream Editor Sample Stream Layer V6 Callout #1"; + DisplayData.description = L"Stream-Layer V6 Callout finds and replaces token(s) from a TCP stream"; + + StatusV6 = StreamEditRegisterStreamLayerCallouts( + DeviceObject, + &FWPM_LAYER_STREAM_V6, + &STREAM_EDITOR_STREAM_CALLOUT_V6, + &DisplayData, + &Globals.StreamLayerV6Callout1, + 1); + + if (!(NT_SUCCESS(Status) || NT_SUCCESS(StatusV6))) + { + NT_ASSERT(FALSE); + } + } // RegisterStreamLayerCallouts + }//FwpmSubLayerAdd + + + + + if (Globals.MultipleCallouts) + { + // Add SubLayer for Callout Set 2 (OoB V4/V6 callouts) + // Register the second set of callouts at Flow-established V4 and V6 layers + // + + StreamEditSubLayer.subLayerKey = STREAM_EDITOR_SUBLAYER_2; + StreamEditSubLayer.displayData.name = L"Stream Edit Sample Sub-Layer 2"; + StreamEditSubLayer.displayData.description = L"Sub-Layer for use by Stream Edit Sample callouts"; + StreamEditSubLayer.flags = 0; + StreamEditSubLayer.weight = 0x20; + + Status = FwpmSubLayerAdd(Globals.EngineHandle, &StreamEditSubLayer, NULL); + + if (NT_SUCCESS(Status)) + { + // Register second set of callouts at Flow-established V4 and V6 layers + // + DisplayData.name = L"Stream Editor Sample ALE Flow Established V4 Callout #2"; + DisplayData.description = L"Flow Established V4 Callout to associate flow-contexts with flows"; + + Status = StreamEditRegisterFlowEstablishedCallouts( + DeviceObject, + &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4, + &STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V4_2, + &DisplayData, + &Globals.FlowEstablishedV4Callout2, + 2); + + DisplayData.name = L"Stream Editor Sample ALE Flow Established V6 Callout #2"; + DisplayData.description = L"Flow Established V6 Callout to associate flow-contexts with flows"; + + StatusV6 = StreamEditRegisterFlowEstablishedCallouts( + DeviceObject, + &FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6, + &STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V6_2, + &DisplayData, + &Globals.FlowEstablishedV6Callout2, + 2); + + if (NT_SUCCESS(Status) || NT_SUCCESS(StatusV6)) + { + DisplayData.name = L"Stream Editor Sample Stream Layer V4 Callout #2"; + DisplayData.description = L"Stream-Layer V4 Callout finds and replaces token(s) from a TCP stream"; + + Status = StreamEditRegisterStreamLayerCallouts( + DeviceObject, + &FWPM_LAYER_STREAM_V4, + &STREAM_EDITOR_STREAM_CALLOUT_V4_2, + &DisplayData, + &Globals.StreamLayerV4Callout2, + 2); + + DisplayData.name = L"Stream Editor Sample Stream Layer V6 Callout #2"; + DisplayData.description = L"Stream-Layer V6 Callout finds and replaces token(s) from a TCP stream"; + + StatusV6 = StreamEditRegisterStreamLayerCallouts( + DeviceObject, + &FWPM_LAYER_STREAM_V6, + &STREAM_EDITOR_STREAM_CALLOUT_V6_2, + &DisplayData, + &Globals.StreamLayerV6Callout2, + 2); + + if (!(NT_SUCCESS(Status) || NT_SUCCESS(StatusV6))) + { + NT_ASSERT(FALSE); + } + } + } + } // MultiCallout. + + Status = FwpmTransactionCommit(Globals.EngineHandle); + + if (NT_SUCCESS(Status)) + { + InTransaction = FALSE; + } + } // FwpmTransactionBegin + } // FwpmEngineOpen + + if (!NT_SUCCESS(Status)) + { + if (InTransaction) + { + NTSTATUS AbortStatus; + AbortStatus = FwpmTransactionAbort(Globals.EngineHandle); + _Analysis_assume_(NT_SUCCESS(AbortStatus)); + } + + if (EngineOpened) + { + FwpmEngineClose(Globals.EngineHandle); + Globals.EngineHandle = NULL; + } + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!, %!STATUS!", Status); + return Status; +} + +VOID +StreamEditUnregisterCallout(VOID) +{ + // Unregister the callouts for Callout #1 + // + FwpsCalloutUnregisterById(Globals.FlowEstablishedV4Callout1); + FwpsCalloutUnregisterById(Globals.StreamLayerV4Callout1); + + FwpsCalloutUnregisterById(Globals.FlowEstablishedV6Callout1); + FwpsCalloutUnregisterById(Globals.StreamLayerV6Callout1); + + FwpmSubLayerDeleteByKey(Globals.EngineHandle, &STREAM_EDITOR_SUBLAYER_1); + + // Unregister the callouts for Callout #2 + // + if (Globals.MultipleCallouts) + { + FwpsCalloutUnregisterById(Globals.FlowEstablishedV4Callout2); + FwpsCalloutUnregisterById(Globals.StreamLayerV4Callout2); + + FwpsCalloutUnregisterById(Globals.FlowEstablishedV6Callout2); + FwpsCalloutUnregisterById(Globals.StreamLayerV6Callout2); + + FwpmSubLayerDeleteByKey(Globals.EngineHandle, &STREAM_EDITOR_SUBLAYER_2); + } + + NT_ASSERT(Globals.EngineHandle != NULL); + FwpmEngineClose(Globals.EngineHandle); + Globals.EngineHandle = NULL; +} + +_Function_class_(EVT_WDF_DRIVER_UNLOAD) +_IRQL_requires_same_ +_IRQL_requires_max_(PASSIVE_LEVEL) +VOID +StreamEditEvtDriverUnload( + _In_ WDFDRIVER DriverObject + ) +{ + ULONG nCount; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "--> %!FUNC!: (DrvObj %p)", DriverObject); + InterlockedExchange8( &Globals.DriverUnloading, TRUE); + + StreamEditSignalShutdown(); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "DriverUnload -- Waiting for all the flows to terminate"); + KeWaitForSingleObject(&Globals.ZeroFlowCountEvent, Executive, KernelMode, FALSE, NULL); + + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "DriverUnload -- Calling FwpsInjectionHandleDestroy"); + // FwpsInjectionHandleDestroy will _not_ return to the + // caller until all pending injections are completed. + // + if (Globals.InjectionHandle != NULL) + FwpsInjectionHandleDestroy(Globals.InjectionHandle); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "DriverUnload -- Now, uninitializing LW Queues"); + for (nCount = 0; nCount < NUM_WORKITEM_QUEUES; ++nCount) + { + LwUninitializeQueue(&Globals.ProcessingQueues[nCount]); + } + + if (Globals.LookasideCreated) + ExDeleteLookasideListEx(&Globals.LookasideList); + + if (Globals.EngineHandle != NULL) + StreamEditUnregisterCallout(); + + if (Globals.NetBufferListPool != NULL) + NdisFreeNetBufferListPool(Globals.NetBufferListPool); + + if (Globals.NdisGenericObj != NULL) + NdisFreeGenericObject(Globals.NdisGenericObj); + + if (Globals.StringToReplaceMdl != NULL) + IoFreeMdl(Globals.StringToReplaceMdl); + + if (Globals.StringXMdl != NULL) + IoFreeMdl(Globals.StringXMdl); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!"); + WPP_CLEANUP(DriverObject); +} + +VOID +StreamEditInitConfig( + _In_ const WDFDRIVER driver + ) +/* + This function loads the default StreamEditor configuration values, + then overrides any values specified in the registry. +*/ +{ + + NTSTATUS Status = STATUS_SUCCESS; + DECLARE_CONST_UNICODE_STRING(stringToFindKey, L"StringToFind"); + DECLARE_CONST_UNICODE_STRING(stringInMiddleKey, L"StringX"); + DECLARE_CONST_UNICODE_STRING(stringToReplaceKey, L"StringToReplace"); + DECLARE_CONST_UNICODE_STRING(inspectionLocalPortKey, L"InspectionLocalPort"); + DECLARE_CONST_UNICODE_STRING(inspectionRemotePortKey, L"InspectionRemotePort"); + DECLARE_CONST_UNICODE_STRING(multiCalloutKey, L"MultipleCallouts"); + DECLARE_CONST_UNICODE_STRING(inspectionDirectionKey, L"InspectionDirection"); + DECLARE_CONST_UNICODE_STRING(thresholdKey, L"BusyThreshold"); + + UNICODE_STRING stringValue; + WCHAR buffer[STR_MAX_SIZE]; + USHORT requiredSize; + ULONG valueSize; + ULONG ulongValue; + WDFKEY hKey; + + // Initialize with default values. + // String lengths will be initialized later (below). + // + Globals.InspectionLocalPort = CFG_LOCAL_PORT; + Globals.InspectionRemotePort = 0; + Globals.InspectionDirection = FWP_DIRECTION_MAX; // Inbound + outbound + Globals.BusyThreshold = 0x4000; // == 16K; + Globals.MultipleCallouts = TRUE; + + Globals.StringToFind[0] = Globals.StringX[0] = Globals.StringToReplace[0] = '\0'; + + Status = WdfDriverOpenParametersRegistryKey(driver, KEY_READ, WDF_NO_OBJECT_ATTRIBUTES, &hKey); + if (NT_SUCCESS(Status)) + { + + if (NT_SUCCESS(WdfRegistryQueryULong(hKey, &inspectionLocalPortKey, &ulongValue))) + { + Globals.InspectionLocalPort = (USHORT)ulongValue; + } + + if (NT_SUCCESS(WdfRegistryQueryULong(hKey, &inspectionRemotePortKey, &ulongValue))) + { + Globals.InspectionRemotePort = (USHORT)ulongValue; + } + + if (NT_SUCCESS(WdfRegistryQueryULong(hKey, &inspectionDirectionKey, &ulongValue))) + { + Globals.InspectionDirection = (UCHAR)ulongValue; + NT_ASSERT((Globals.InspectionDirection >= 0 && Globals.InspectionDirection <= FWP_DIRECTION_MAX)); + + if (Globals.InspectionDirection > FWP_DIRECTION_MAX) + Globals.InspectionDirection = FWP_DIRECTION_MAX; + } + + if (NT_SUCCESS(WdfRegistryQueryULong(hKey, &multiCalloutKey, &ulongValue))) + { + Globals.MultipleCallouts = !(ulongValue == 0); + } + + + // Attempt to read StringToFind value from registry + // + stringValue.Buffer = buffer; + stringValue.Length = 0; + stringValue.MaximumLength = sizeof(buffer); + + Status = WdfRegistryQueryUnicodeString(hKey, &stringToFindKey, &requiredSize, &stringValue); + if (NT_SUCCESS(Status)) + { + // stringValue is NULL terminated. + + // Translate Unicode string + Status = RtlUnicodeToMultiByteN( + Globals.StringToFind, + sizeof(Globals.StringToFind), + &valueSize, + stringValue.Buffer, + (ULONG)requiredSize); + + if (NT_SUCCESS(Status)) + { + valueSize -= sizeof(char); + Globals.StringToFindLength = valueSize; + NT_ASSERT(Globals.StringToFind[valueSize] == '\0'); + } + } + + stringValue.MaximumLength = sizeof(buffer); + //Attempt to read StringX value from registry + // + Status = WdfRegistryQueryUnicodeString(hKey, &stringInMiddleKey, &requiredSize, &stringValue); + if (NT_SUCCESS(Status)) + { + // Translate Unicode string + Status = RtlUnicodeToMultiByteN( + Globals.StringX, + sizeof(Globals.StringX), + &valueSize, + stringValue.Buffer, + (ULONG)requiredSize); + + if (NT_SUCCESS(Status)) + { + valueSize -= sizeof(char); // NULL terminator. + Globals.StringXLength = valueSize; + NT_ASSERT(Globals.StringX[valueSize] == '\0'); + } + } + + stringValue.MaximumLength = sizeof(buffer); + // Attempt to read StringToReplace value from registry + // + Status = WdfRegistryQueryUnicodeString(hKey, &stringToReplaceKey, &requiredSize, &stringValue); + if (NT_SUCCESS(Status)) + { + // Translate Unicode string + Status = RtlUnicodeToMultiByteN( + Globals.StringToReplace, + sizeof(Globals.StringToReplace), + &valueSize, + stringValue.Buffer, + (ULONG)requiredSize); + + if (NT_SUCCESS(Status)) + { + valueSize -= sizeof(char); + Globals.StringToReplaceLength = valueSize; + NT_ASSERT(Globals.StringToReplace[valueSize] == '\0'); + } + } + + if (NT_SUCCESS(WdfRegistryQueryULong(hKey, &thresholdKey, &ulongValue))) + { + Globals.BusyThreshold = (size_t)ulongValue << 10; + NT_ASSERT(Globals.BusyThreshold != 0); + } + + WdfRegistryClose(hKey); + } + else + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "WdfDriverOpenParametersRegistryKey failed with %!STATUS!", Status); + } + + // Calculate the length of tokens to be found/replaced. + // + if (Globals.StringToFindLength == 0) + { + NT_ASSERT(Globals.StringToFind[0] == 0); + + RtlStringCchCopyA(Globals.StringToFind, STR_MAX_SIZE, "rainy"); + Status = RtlStringCchLengthA(Globals.StringToFind, STR_MAX_SIZE, &Globals.StringToFindLength); + + //Handle Error. + NT_ASSERT(NT_SUCCESS(Status)); + } + + if (Globals.StringXLength == 0) + { + NT_ASSERT(Globals.StringX[0] == 0); + + RtlStringCchCopyA(Globals.StringX, STR_MAX_SIZE, "cloudy"); + Status = RtlStringCchLengthA(Globals.StringX, STR_MAX_SIZE, &Globals.StringXLength); + + //Handle Error. + NT_ASSERT(NT_SUCCESS(Status)); + } + + if (Globals.StringToReplaceLength == 0) + { + NT_ASSERT(Globals.StringToReplace[0] == 0); + + RtlStringCchCopyA(Globals.StringToReplace, STR_MAX_SIZE, "sunny"); + Status = RtlStringCchLengthA(Globals.StringToReplace, STR_MAX_SIZE, &Globals.StringToReplaceLength); + + //Handle Error. + NT_ASSERT(NT_SUCCESS(Status)); + } + + NT_ASSERT(Globals.StringToFindLength != 0); + NT_ASSERT(Globals.StringXLength != 0); + NT_ASSERT(Globals.StringToReplaceLength != 0); + + // In this sample, we want to make sure that at least one port (either local or remote) is non-zero. + // + if ((Globals.InspectionLocalPort == 0) && (Globals.InspectionRemotePort == 0)) + { + Globals.InspectionLocalPort = CFG_LOCAL_PORT; + } + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL,"StreamEdit Configuration\r" + "\tStringToFind: %s\r\tStringToReplace: %s\r\tStringX: %s\r" + "\tInspectionLocalPort: %hu\r\tInspectionRemotePort: %hu\r" + "\tInspectionDirection: %!FWP_DIRECTION!\r\tBusyThreshold: 0x%IX\r\tMultiple Callouts: %!bool!", + Globals.StringToFind, + Globals.StringToReplace, + Globals.StringX, + Globals.InspectionLocalPort, + Globals.InspectionRemotePort, + Globals.InspectionDirection, + Globals.BusyThreshold, + Globals.MultipleCallouts ); + +} + +NTSTATUS +StreamEditInitDriverObjects( + _Inout_ DRIVER_OBJECT* driverObject, + _In_ const UNICODE_STRING* registryPath, + _Out_ WDFDRIVER* pDriver, + _Out_ WDFDEVICE* pDevice + ) +{ + NTSTATUS Status; + WDF_DRIVER_CONFIG config; + PWDFDEVICE_INIT pInit = NULL; + + WDF_DRIVER_CONFIG_INIT(&config, WDF_NO_EVENT_CALLBACK); + + config.DriverInitFlags |= WdfDriverInitNonPnpDriver; + config.EvtDriverUnload = StreamEditEvtDriverUnload; + + Status = WdfDriverCreate( + driverObject, + registryPath, + WDF_NO_OBJECT_ATTRIBUTES, + &config, + pDriver + ); + + if (NT_SUCCESS(Status)) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + pInit = WdfControlDeviceInitAllocate(*pDriver, &SDDL_DEVOBJ_KERNEL_ONLY); + + if (pInit) + { + WdfDeviceInitSetCharacteristics(pInit, FILE_AUTOGENERATED_DEVICE_NAME, TRUE); + //WdfDeviceInitSetDeviceType(pInit, FILE_DEVICE_NETWORK); + WdfDeviceInitSetDeviceClass(pInit, &WFP_DRIVER_CLASS_GUID); + WdfDeviceInitSetCharacteristics(pInit, FILE_DEVICE_SECURE_OPEN, TRUE); + + Status = WdfDeviceCreate(&pInit, WDF_NO_OBJECT_ATTRIBUTES, pDevice); + + if (NT_SUCCESS(Status)) + { + WdfControlFinishInitializing(*pDevice); + } + } + } + + if (!NT_SUCCESS(Status)) + { + if ( pInit) + WdfDeviceInitFree(pInit); + } + + return Status; +} + +NTSTATUS +DriverEntry( + _In_ DRIVER_OBJECT* DriverObject, + _In_ UNICODE_STRING* RegistryPath + ) +{ + NTSTATUS Status; + WDFDEVICE WdfDevice; + WDFDRIVER WdfDriver; + NET_BUFFER_LIST_POOL_PARAMETERS nblPoolParams = {0}; + + WPP_INIT_TRACING(DriverObject, RegistryPath); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT,"--> %!FUNC!: DrvObj %p, Regpath %wZ", DriverObject, RegistryPath); + + do { + // + // Initialize globals and Configuration structures. + // + + RtlZeroMemory(&Globals, sizeof(Globals)); + Globals.QueueIndex = (ULONG)-1; + + InitializeListHead(&Globals.FlowContextList); + KeInitializeSpinLock(&Globals.FlowContextListLock); + + // Initialize DriverUnload/Shutdown Event (to a signalled state) + // + KeInitializeEvent(&Globals.ZeroFlowCountEvent, NotificationEvent, TRUE); + + Status = StreamEditInitDriverObjects( + DriverObject, + RegistryPath, + &WdfDriver, + &WdfDevice); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "StreamEditInitDriverObjects failed with 0x%X", Status); + break; + } + + Globals.WdmDevice = WdfDeviceWdmGetDeviceObject(WdfDevice); + + // Initialize and read driver configuration overrides. + // + StreamEditInitConfig(WdfDriver); + + Globals.StringToReplaceMdl = IoAllocateMdl( + Globals.StringToReplace, + (ULONG)Globals.StringToReplaceLength, + FALSE, + FALSE, + NULL); + + if (Globals.StringToReplaceMdl == NULL) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Unable to allocate StringToReplace Mdl"); + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + + MmBuildMdlForNonPagedPool(Globals.StringToReplaceMdl); + + Globals.StringXMdl = IoAllocateMdl( + Globals.StringX, + (ULONG)Globals.StringXLength, + FALSE, + FALSE, + NULL); + + if (Globals.StringXMdl == NULL) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Unable to allocate Mdl#2"); + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + MmBuildMdlForNonPagedPool(Globals.StringXMdl); + + Globals.NdisGenericObj = NdisAllocateGenericObject(DriverObject, STMEDIT_TAG_NDIS_OBJ, 0); + if (Globals.NdisGenericObj == NULL) + { + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_GENERAL, "NdisAllocateGenericObject failed."); + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + + // + // Allocate a NDIS/NBL Pool + + nblPoolParams.Header.Type = NDIS_OBJECT_TYPE_DEFAULT; + nblPoolParams.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1; + nblPoolParams.Header.Size = NDIS_SIZEOF_NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1; + nblPoolParams.fAllocateNetBuffer = TRUE; + nblPoolParams.DataSize = 0; + nblPoolParams.PoolTag = STMEDIT_TAG_NBL_POOL; + + Globals.NetBufferListPool = NdisAllocateNetBufferListPool( + Globals.NdisGenericObj, + &nblPoolParams); + + if (Globals.NetBufferListPool == NULL) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "NdisAllocateNetBufferListPool failed."); + Status = STATUS_INSUFFICIENT_RESOURCES; + break; + } + + Status = ExInitializeLookasideListEx( + &Globals.LookasideList, + NULL, + NULL, + NonPagedPool, // POOL_NX_OPTIN_AUTO ==> NonPagedPool := NonPagedPoolNx + 0, + max(sizeof(TASK_ENTRY), sizeof(OUTGOING_STREAM_DATA)), + STMEDIT_TAG_TASK_ENTRY, + 0); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "Task LookasideList Creation failed with %!STATUS!", Status); + break; + } + + Globals.LookasideCreated = TRUE; + + Status = StreamEditInitializeWorkitemPool(); + + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "InitializeWorkerPool failed with %!STATUS!", Status); + break; + } + + // Create WFP Injection handle + // + Status = FwpsInjectionHandleCreate(AF_UNSPEC, FWPS_INJECTION_TYPE_STREAM, &Globals.InjectionHandle); + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "FwpsInjectionHandleCreate failed with %!STATUS!", Status); + break; + } + + // + // Finally, register the sublayer(s) and callouts with WFP + // + Status = StreamEditRegisterCallouts(Globals.WdmDevice); + if (!NT_SUCCESS(Status)) + { + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, "StreamEditRegisterCallouts failed with %!STATUS!", Status); + break; + } + + } while (FALSE); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, "<-- %!FUNC!, %!STATUS!", Status); + + if (!NT_SUCCESS(Status)) + { + StreamEditEvtDriverUnload(WdfDriver); + } + + return Status; +} + +BOOLEAN +StreamEditCopyDataForInspection( +_In_ STREAM_FLOW_CONTEXT *FlowContext, +_In_ const FWPS_STREAM_DATA* StreamData, +_In_ SIZE_T BytesToCopy +) +/* + This function copies stream data described by the FWPS_STREAM_DATA + structure into a flat buffer. + + Return : TRUE if able to copy stream-data to a flat buffer successfully, FALSE otherwise. + +*/ +{ + SIZE_T BytesCopied; + size_t ExistingDataLength = FlowContext->ScratchDataLength; + + NT_ASSERT(BytesToCopy > 0); + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "--> %!FUNC!: FlowCtx %p, streamData %p, copy %Iu of %Iu, old ScratchLength %Iu", + FlowContext, + StreamData, + BytesToCopy, + StreamData->dataLength, + ExistingDataLength); + + NT_ASSERT(FlowContext->ScratchDataOffset == 0); + + // If the existing scratch buffer is not sufficient to accommodate the new data + // try to allocate a bigger buffer (so that we don't have to keep allocating + // these for some time. + // + if (FlowContext->ScratchBufferSize - ExistingDataLength < BytesToCopy) + { + size_t NewBufferSize = BytesToCopy + ExistingDataLength; + + PVOID NewBuffer = ExAllocatePoolWithTag( + NonPagedPool, + (NewBufferSize + (NewBufferSize >> 1) ), // 1.5 times the needed size. + STMEDIT_TAG_FLAT_BUFFER); + + if (NewBuffer == NULL) + { + + // We are not able to allocate a much bigger buffer ... lets try an exact fit. + // + NewBuffer = ExAllocatePoolWithTag(NonPagedPool, NewBufferSize, STMEDIT_TAG_FLAT_BUFFER); + } + + if (NewBuffer != NULL) + { + + // Move the existing contents of scratch buffer over to newly allocated buffer + // + if (ExistingDataLength > 0) + { + + NT_ASSERT(FlowContext->ScratchBuffer != NULL); + RtlCopyMemory(NewBuffer, FlowContext->ScratchBuffer, ExistingDataLength); + } + } + + // Free the old scratch buffer... + // + if (FlowContext->ScratchBuffer) + { + + ExFreePoolWithTag(FlowContext->ScratchBuffer, STMEDIT_TAG_FLAT_BUFFER); + + FlowContext->ScratchBuffer = NULL; + FlowContext->ScratchBufferSize = 0; + FlowContext->ScratchDataLength = 0; + } + + if (NewBuffer) + { + + FlowContext->ScratchBuffer = NewBuffer; + FlowContext->ScratchBufferSize = NewBufferSize; + FlowContext->ScratchDataLength = ExistingDataLength; + } + else + { + + DoTraceLevelMessage(TRACE_LEVEL_ERROR, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, Failed to allocate flat buffer for NBL %p", + FlowContext, StreamData->netBufferListChain); + return FALSE; + } + } + + // Append the NBL chain data on to (any) existing data in scratch buffer + // + FwpsCopyStreamDataToBuffer( + StreamData, + (BYTE*)FlowContext->ScratchBuffer + FlowContext->ScratchDataLength, + BytesToCopy, + &BytesCopied + ); + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_GENERAL, + "FlowCtx %p, FwpsCopyStreamDataToBuffer flattened %Iu of %Iu bytes", + FlowContext, BytesCopied, StreamData->dataLength); + + NT_ASSERT(BytesCopied == BytesToCopy); + FlowContext->ScratchDataLength += BytesCopied; + + DoTraceLevelMessage(TRACE_LEVEL_INFORMATION, CO_ENTER_EXIT, + "<-- %!FUNC!: FlowCtx %p, new ScratchLength %Iu, return TRUE", FlowContext, FlowContext->ScratchDataLength); + return TRUE; +} diff --git a/network/trans/stmedit/sys/StreamEdit.h b/network/trans/stmedit/sys/StreamEdit.h new file mode 100644 index 00000000..8d203db7 --- /dev/null +++ b/network/trans/stmedit/sys/StreamEdit.h @@ -0,0 +1,558 @@ +/*++ + +Copyright (c) Microsoft Corporation. All rights reserved + +Abstract: + Stream Edit Callout Driver Sample. + + This sample demonstrates finding and replacing a string pattern from a + live TCP stream via the WFP stream API. + +Environment: + Kernel mode + +--*/ + +#ifndef _STREAM_EDIT_H +#define _STREAM_EDIT_H + +#include +#include + +#include + +#pragma warning(push) +#pragma warning(disable:4201) // unnamed struct/union +#include +#pragma warning(pop) + +#pragma warning(push) +#pragma prefast(disable: 26061) // warning 26061: Range postcondition violation +#pragma prefast(disable: 28196) // RtlUnicodeStringInitWorker restriction +#include +#pragma warning(pop) + +#include +#include "LwQueue.h" + +// +// Pool Tags used for allocations +// +#define STMEDIT_TAG_NDIS_OBJ 'oNeS' +#define STMEDIT_TAG_NBL_POOL 'pNeS' +#define STMEDIT_TAG_FLAT_BUFFER 'bSeS' +#define STMEDIT_TAG_FLOWCTX 'cFeS' +#define STMEDIT_TAG_TASK_ENTRY 'eTeS' +#define STMEDIT_TAG_MDL_DATA 'dMeS' + +#define CFG_LOCAL_PORT 8888 +#define STR_MAX_SIZE 128 +#define NUM_WORKITEM_QUEUES 2 +#define INVALID_PROC_NUMBER -1 + +#pragma warning(disable: 4127) // conditional expression is constant -- for do-while(true/false) loops! + +// +// Inline editing states of a stream +// +typedef enum _INLINE_EDIT_STATE +{ + INLINE_EDIT_IDLE = 0, + INLINE_EDIT_SKIPPING, + INLINE_EDIT_MODIFYING, + INLINE_EDIT_SCANNING +} INLINE_EDIT_STATE; + +// +// Out-Of-Band editing states of a stream +// +typedef enum _OOB_EDIT_STATE +{ + OOB_EDIT_IDLE = 0, + OOB_EDIT_PROCESSING, + OOB_EDIT_BUSY, + OOB_EDIT_ERROR +} OOB_EDIT_STATE; + +typedef struct _OUTGOING_STREAM_DATA +{ + // Link for placement on Queue. + LIST_ENTRY Link; + + // NetBuffer List containing data + NET_BUFFER_LIST* NetBufferList; + + // If the NetBufferList is a clone or did we allocate it + BOOLEAN isClone; + + // Valid data length + size_t DataLength; + + // Stream Flags to be used when injecting this segment of data + DWORD StreamFlags; + + MDL* Mdl; +} OUTGOING_STREAM_DATA, *POUTGOING_STREAM_DATA; + +#pragma warning(push) +#pragma warning(disable:4201) // unnamed struct/union +#pragma warning(disable:4214) // nonstandard extension used : bit field types other than int + +// +// Flow Context associated with a flow +// +typedef struct _STREAM_FLOW_CONTEXT +{ + // for putting on the global FlowContest list + LIST_ENTRY Link; + + union + { + // Inline data editting state + struct + { + // State of inline stream edit processing + INLINE_EDIT_STATE InlineEditState; + + // Current Processor on which inline classify function is invoked! + volatile LONG CurrentProcessor; + }; + + struct + { + // Internal Stream State for OoB Processing + OOB_EDIT_STATE EditState; + + // Spin lock to sync editing + KSPIN_LOCK EditLock; + + // Processed data ready to be injected back into the stream. + LIST_ENTRY OutgoingDataQueue; + + // Index to LW Queue, assigned to the flow. + ULONG QueueNumber; + + // Length of data classified, but not yet processed. + volatile size_t PendedDataLength; + + // Number of data processing tasks still queued + volatile ULONG PendingTasks; + + // Flags that specify characteristics of the data stream. + // + // A callout driver should specify the same stream flags that + // were set in the 'flags' member of the _STREAM_DATA structure + // that the filter engine passed to the callout driver's + // classifyFn callout function when the callout deferred the + // data stream. + // + UINT32 StreamFlags; + + } OobInfo; + }; + + // Ref count - # of unprocessed task + volatile ULONG RefCount; + + // IVP4 or V6 ? For troubleshooting only + UINT16 IpProto; + + // Stream Flags for partially matching data. + UINT32 PartialSFlags; + + // + // For copying stream data to a (flat)buffer for inspection + // + PVOID ScratchBuffer; + size_t ScratchBufferSize; + size_t ScratchDataOffset; + size_t ScratchDataLength; + + // + // Flow information for data (re-)injection. + // + + UINT64 FlowHandle; + UINT16 LayerId; + UINT32 CalloutId; + + volatile char bFlowActive; // If the Flow is still active. true @FlowEstablished, false @FlowDelete + + BOOLEAN bFlowTerminating : 1; // FIN/RST has been received. + BOOLEAN bNoMoreData : 1; // classifyOut->flags has FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA bit set + BOOLEAN bEntryRemoved : 1; // True when the context is not on the 'global context list'. + BOOLEAN bEditInline : 1; + BOOLEAN bUnused : 4; + +} STREAM_FLOW_CONTEXT, *PSTREAM_FLOW_CONTEXT; + +#pragma warning(pop) + + +// Task Entry structure +// For dispatching tasks to threads! +// +typedef struct _TASK_ENTRY +{ + // Link for placement on Queues + LW_ENTRY LwQLink; + + // Target Flow Context + PSTREAM_FLOW_CONTEXT FlowCtx; + + // NetBufferList Chain to be processed + NET_BUFFER_LIST *NetBufferList; + + // Length of NBL Chain + size_t DataLength; + + // Flags.. + DWORD StreamFlags; + +} TASK_ENTRY, *PTASK_ENTRY; + +// +// Stream Editor Globals block +// +typedef struct _STMEDIT_GLOBALS +{ + // Lookaside list for Task entries and OutgoingData structs. + // On 64-bit platforms, this structure must be 16-byte aligned. + // + DECLSPEC_CACHEALIGN LOOKASIDE_LIST_EX LookasideList; + + + // ... For Callout #1 + // + // IPV4 callout for FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 layer + UINT32 FlowEstablishedV4Callout1; + + // IPV4 callout for FWPM_LAYER_STREAM_V4 layer + UINT32 StreamLayerV4Callout1; + + // IPV4 callout for FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6 layer + UINT32 FlowEstablishedV6Callout1; + + // IPV4 callout for FWPM_LAYER_STREAM_V6 layer + UINT32 StreamLayerV6Callout1; + + // + // ...For Callout #2 + // + // IPV4 callout for FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 layer + UINT32 FlowEstablishedV4Callout2; + + // IPV4 callout for FWPM_LAYER_STREAM_V4 layer + UINT32 StreamLayerV4Callout2; + + // IPV4 callout for FWPM_LAYER_ALE_FLOW_ESTABLISHED_V6 layer + UINT32 FlowEstablishedV6Callout2; + + // IPV4 callout for FWPM_LAYER_STREAM_V6 layer + UINT32 StreamLayerV6Callout2; + + // WFP injection handles + HANDLE InjectionHandle; + + // WFP Engine handle + HANDLE EngineHandle; + + // NDIS uses a generic object to manage resources that are allocated + // by a component that does not otherwise have an NDIS handle. + NDIS_GENERIC_OBJECT* NdisGenericObj; + + // To allocate NetBuffer and NetBufferLists for injection + NDIS_HANDLE NetBufferListPool; + + // MDL chain used to initialize the preallocated NET_BUFFER + // structure for injecting replacement string. + MDL* StringToReplaceMdl; + MDL* StringXMdl; + + // Number of flow-context structures allocated (mostly for troubleshooting) + ULONG FlowContextCount; + + // A linked list of flow-context structures + LIST_ENTRY FlowContextList; + + // Spin lock for synchronizing FlowContextList access + KSPIN_LOCK FlowContextListLock; + + // Event to signal if Flow Context count is zero! + KEVENT ZeroFlowCountEvent; + + DEVICE_OBJECT* WdmDevice; // Device object for StreamEdit + + // + // Configurable parameters block + // + + // Register two sets of callouts ? + BOOLEAN MultipleCallouts; + + // Local port for inspecting network traffic + USHORT InspectionLocalPort; + + // Remote port for inspecting network traffic + USHORT InspectionRemotePort; + + // What traffic direction to inspect + UCHAR InspectionDirection; + + // Busy Threshold (to Defer/Resume stream) + size_t BusyThreshold; + + // String to search for in the stream + CHAR StringToFind[STR_MAX_SIZE]; + + // Replacement string! + CHAR StringX[STR_MAX_SIZE]; + + // Replacement string! + CHAR StringToReplace[STR_MAX_SIZE]; + + // Length of StringToFind + size_t StringToFindLength; + + // Length of StringToReplace + size_t StringXLength; + + // Length of StringToReplace + size_t StringToReplaceLength; + + // True if the driver is unloading/shutting down + volatile char DriverUnloading; + + // To generate workitem queue array index to be associated to a flow. + volatile ULONG QueueIndex; + + // Queues for processing task workitems + LW_QUEUE ProcessingQueues[NUM_WORKITEM_QUEUES]; + + // True if TaskEntry look aside list is successfully initialized. + BOOLEAN LookasideCreated; + +} STMEDIT_GLOBALS; + + +extern STMEDIT_GLOBALS Globals; + +typedef +VOID +WFP_CLASSIFY_FUNCTION( + _In_ const FWPS_INCOMING_VALUES*, + _In_ const FWPS_INCOMING_METADATA_VALUES*, + _In_ PVOID, +#if(NTDDI_VERSION >= NTDDI_WIN7) + _In_ const void*, +#endif + _In_ const FWPS_FILTER*, + _In_ UINT64, + _Inout_ FWPS_CLASSIFY_OUT* +); + + +IO_WORKITEM_ROUTINE StreamEditOobPoolWorker; + +NTSTATUS +StreamEditInitializeWorkitemPool( + ); + +NTSTATUS +StreamOobFlushOutgoingData( + _Inout_ PSTREAM_FLOW_CONTEXT + ); + +NTSTATUS +StreamEditRemoveFlowCtx( + _In_ STREAM_FLOW_CONTEXT* + ); + +VOID +StreamEditSignalShutdown( + ); + +BOOLEAN +StreamEditCopyDataForInspection( + _In_ PSTREAM_FLOW_CONTEXT, + _In_ const FWPS_STREAM_DATA*, + _In_ SIZE_T BytesToCopy + ); + +VOID +NTAPI +StreamEditInjectCompletionFn( + _In_ VOID*, + _Inout_ NET_BUFFER_LIST*, + _In_ BOOLEAN + ); + +VOID +NTAPI +StreamOobCloneInjectCompletionFn( + _In_ VOID*, + _Inout_ NET_BUFFER_LIST*, + _In_ BOOLEAN + ); + +NTSTATUS +OobEditCreateThread( + _Inout_ PSTREAM_FLOW_CONTEXT + ); + +VOID +InlineEditClassify( + _In_ const FWPS_INCOMING_VALUES*, + _In_ const FWPS_INCOMING_METADATA_VALUES*, + _Inout_ PVOID, + _In_ const FWPS_FILTER*, + _In_ UINT64, + _Inout_ FWPS_CLASSIFY_OUT* + ); + +VOID +OobEditClassify( + _In_ const FWPS_INCOMING_VALUES*, + _In_ const FWPS_INCOMING_METADATA_VALUES*, + _Inout_ PVOID, + _In_ const FWPS_FILTER*, + _In_ UINT64, + _Inout_ FWPS_CLASSIFY_OUT* + ); + +WFP_CLASSIFY_FUNCTION StreamEditFlowEstablishedClassify; +WFP_CLASSIFY_FUNCTION StreamEditCommonStreamClassify; + +NTSTATUS +InlineEditFlushData( + _In_ PSTREAM_FLOW_CONTEXT, + _In_ ULONG, + _In_ UINT + ); + +FORCEINLINE +VOID +StreamEditFreeFlowCtxCommon( + _Inout_ PSTREAM_FLOW_CONTEXT + ); + +VOID +StmEditReferenceFlow( + _Inout_ PSTREAM_FLOW_CONTEXT, + _In_ char, + _In_ UINT + ); + +VOID +StmEditDeReferenceFlow( + _Inout_ PSTREAM_FLOW_CONTEXT, + _In_ char, + _In_ UINT + ); + +FORCEINLINE +ULONG NetBufferListLength(PNET_BUFFER_LIST Nbl) +{ + ULONG Length = 0; + PNET_BUFFER nb = NET_BUFFER_LIST_FIRST_NB(Nbl); + + while (nb) + { + Length += NET_BUFFER_DATA_LENGTH(nb); + nb = NET_BUFFER_NEXT_NB(nb); + } + + return Length; +} + +// +// Callout driver keys +// + +/* 524F4849-5420-5241-494E-41205A9EEF0B */ +__declspec (selectany) const GUID STREAM_EDITOR_SUBLAYER_1 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x0A } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF0B */ +__declspec (selectany) const GUID STREAM_EDITOR_SUBLAYER_2 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x0B } +}; + + +/* 524F4849-5420-5241-494E-41205A9EEF0C */ +__declspec (selectany) const GUID STREAM_EDITOR_STREAM_CALLOUT_V4 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x0C } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF0D */ +__declspec (selectany) const GUID STREAM_EDITOR_STREAM_CALLOUT_V6 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x0D } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF0E */ +__declspec (selectany) const GUID STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V4 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x0E } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF0F */ +__declspec (selectany) const GUID STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V6 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x0F } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF01 */ +__declspec (selectany) const GUID STREAM_EDITOR_STREAM_CALLOUT_V4_2 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x01 } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF02 */ +__declspec (selectany) const GUID STREAM_EDITOR_STREAM_CALLOUT_V6_2 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x02 } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF03 */ +__declspec (selectany) const GUID STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V4_2 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x03 } +}; + +/* 524F4849-5420-5241-494E-41205A9EEF04 */ +__declspec (selectany) const GUID STREAM_EDITOR_FLOW_ESTABLISHED_CALLOUT_V6_2 = { + 0x524F4849, + 0x5420, + 0x5241, + { 0x49, 0x4E, 0x41, 0x20, 0x5A, 0x9E, 0xEF, 0x04 } +}; + +// {C1EA91DC-A37F-453E-BFD5-EF68E36EEDAA} +__declspec (selectany) const GUID WFP_DRIVER_CLASS_GUID = +{ 0xc1ea91dc, 0xa37f, 0x453e,{ 0xbf, 0xd5, 0xef, 0x68, 0xe3, 0x6e, 0xed, 0xaa } }; + + +#endif // _STREAM_EDIT_H diff --git a/network/trans/stmedit/sys/Trace.h b/network/trans/stmedit/sys/Trace.h new file mode 100644 index 00000000..b52033cd --- /dev/null +++ b/network/trans/stmedit/sys/Trace.h @@ -0,0 +1,61 @@ + +#ifndef _STREAM_TRACE_H +#define _STREAM_TRACE_H + +// WPP Software Tracing Definitions + + +/* 524F4849-5420-5241-494E-41205A9EEF01 */ + +// You can have up to 32 defines. If you want more than that, +// you have to provide another trace control GUID + +// Don't use 0x suffix in hex numbers in the guid + +#define WPP_CONTROL_GUIDS \ + WPP_DEFINE_CONTROL_GUID(CtlGuid, \ + (524F4849, 5420, 5241, 494E, 41205A9EEF01),\ + WPP_DEFINE_BIT(CO_ENTER_EXIT) /* bit 0 = 0x00000001 */ \ + WPP_DEFINE_BIT(CO_GENERAL) /* bit 1 = 0x00000002 */ \ + WPP_DEFINE_BIT(CO_REFCOUNT) /* bit 2 = 0x00000004 */ \ + ) + +// For DoTraceLevelMessage +#define WPP_LEVEL_FLAGS_ENABLED(lvl, flags) (WPP_FLAG_ENABLED(flags) && WPP_CONTROL(WPP_BIT_ ## flags).Level >= lvl) +#define WPP_LEVEL_FLAGS_LOGGER(lvl, flags) WPP_LEVEL_LOGGER(flags) + + +#pragma warning(disable:4204) // C4204 nonstandard extension used : non-constant aggregate initializer + +// +// Define the 'xstr' structure for logging buffer and length pairs +// and the 'log_xstr' function which returns it to create one in-place. +// this enables logging of complex data types. +// +typedef struct xstr { char * _buf; short _len; } xstr_t; +__inline xstr_t log_xstr(void * p, short l) { xstr_t xs = { (char*)p, l }; return xs; } + +#pragma warning(default:4204) + +// +// Define the macro required for a hexdump use as: +// +// DebugTraceEx((LEVEL, FLAG,"%!HEXDUMP!\n", log_xstr(buffersize,(char *)buffer) )); +// +// +#define WPP_LOGHEXDUMP(x) WPP_LOGPAIR(2, &((x)._len)) WPP_LOGPAIR((x)._len, (x)._buf) + +// begin_wpp config +// CUSTOM_TYPE(InlineState, ItemListLong(Idle, Skipping, Modifying, Scanning)); +// CUSTOM_TYPE(OobState, ItemListLong(Idle, Processing, Busy, Error)); +// CUSTOM_TYPE(FWP_DIRECTION, ItemListLong(Outbound, Inbound, Outbound+Inbound)); +// +// CUSTOM_TYPE(FWPS_NOTIFY, ItemEnum(FWPS_CALLOUT_NOTIFY_TYPE)); +// CUSTOM_TYPE(SACTION, ItemEnum(FWPS_STREAM_ACTION_TYPE)); +// +// DEFINE_CPLX_TYPE(HEXDUMP, WPP_LOGHEXDUMP, xstr_t, ItemHEXDump, "s", _HEX_, 0, 2); +// +// end_wpp + + +#endif // _STREAM_TRACE_H diff --git a/network/trans/stmedit/sys/inline_edit.c b/network/trans/stmedit/sys/inline_edit.c deleted file mode 100644 index 16685a9e..00000000 --- a/network/trans/stmedit/sys/inline_edit.c +++ /dev/null @@ -1,546 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved - -Abstract: - - Stream Edit Callout Driver Sample. - - This sample demonstrates inline stream inspection/editing - via the WFP stream API. - -Environment: - - Kernel mode - ---*/ - -#include - -#pragma warning(push) -#pragma warning(disable:4201) // unnamed struct/union - -#include - -#pragma warning(pop) - -#include - -#include "inline_edit.h" -#include "oob_edit.h" -#include "stream_callout.h" - -void -InlineEditInit( - _Out_ STREAM_EDITOR* streamEditor - ) -{ - streamEditor->editInline = TRUE; - streamEditor->inlineEditState = INLINE_EDIT_WAITING_FOR_DATA; -} - -void -NTAPI StreamInjectCompletionFn( - _Inout_ void* context, - _Inout_ NET_BUFFER_LIST* netBufferList, - _In_ BOOLEAN dispatchLevel - ) -{ - MDL* mdl = (MDL*)context; - - UNREFERENCED_PARAMETER(dispatchLevel); - - if (mdl != NULL) - { - IoFreeMdl(mdl); - } - - FwpsFreeNetBufferList(netBufferList); -} - -NTSTATUS -StreamEditFlushData( - _Inout_ STREAM_EDITOR* streamEditor, - UINT64 flowId, - UINT32 calloutId, - UINT16 layerId, - UINT32 streamFlags - ) -/* ++ - - This function re-injects buffered data back to the data stream upon - receiving a FIN. The data was buffered because it was not big enough - (size wise) to make an editing decision. - --- */ -{ - NTSTATUS status; - - MDL* mdl = NULL; - NET_BUFFER_LIST* netBufferList = NULL; - - NT_ASSERT(streamEditor->dataOffset == 0); - - mdl = IoAllocateMdl( - streamEditor->scratchBuffer, - (ULONG)(streamEditor->dataLength), - FALSE, - FALSE, - NULL - ); - - if (mdl == NULL) - { - status = STATUS_NO_MEMORY; - goto Exit; - } - - MmBuildMdlForNonPagedPool(mdl); - - status = FwpsAllocateNetBufferAndNetBufferList( - gNetBufferListPool, - 0, - 0, - mdl, - 0, - streamEditor->dataLength, - &netBufferList - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - streamFlags &= ~(FWPS_STREAM_FLAG_SEND_DISCONNECT | FWPS_STREAM_FLAG_RECEIVE_DISCONNECT); - - status = FwpsStreamInjectAsync( - gInjectionHandle, - NULL, - 0, - flowId, - calloutId, - layerId, - streamFlags, - netBufferList, - streamEditor->dataLength, - StreamInjectCompletionFn, - mdl - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - mdl = NULL; - netBufferList = NULL; - -Exit: - - if (mdl != NULL) - { - IoFreeMdl(mdl); - } - if (netBufferList != NULL) - { - FwpsFreeNetBufferList(netBufferList); - } - - return status; -} - -void -StreamInlineEdit( - _Inout_ STREAM_EDITOR* streamEditor, - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _In_ const FWPS_FILTER* filter, - _In_ const FWPS_STREAM_DATA* streamData, - _Inout_ FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ) -/* ++ - - This function implements the state machine that scans the content - and computes the number of bytes to permit, bytes to block, and - performs stream injection to replace the blocked data. - --- */ -{ - UINT findLength = (UINT) strlen(configStringToFind); - UINT replaceLength = (UINT) strlen(configStringToReplace); - - if ((streamData->flags & FWPS_STREAM_FLAG_SEND_DISCONNECT) || - (streamData->flags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)) - { - if (streamEditor->dataLength > 0) - { - StreamEditFlushData( - streamEditor, - inMetaValues->flowHandle, - filter->action.calloutId, - inFixedValues->layerId, - streamData->flags - ); - - streamEditor->dataLength = 0; - streamEditor->dataOffset = 0; - } - - NT_ASSERT(streamEditor->inlineEditState == INLINE_EDIT_WAITING_FOR_DATA); - - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - goto Exit; - } - - if (streamData->dataLength == 0) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - goto Exit; - } - - if (streamEditor->inlineEditState != INLINE_EDIT_SKIPPING) - { - if ((streamData->dataLength < findLength) && - !(classifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA)) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NEED_MORE_DATA; - ioPacket->countBytesRequired = findLength; - - classifyOut->actionType = FWP_ACTION_NONE; - goto Exit; - } - } - - switch (streamEditor->inlineEditState) - { - case INLINE_EDIT_WAITING_FOR_DATA: - { - if (StreamCopyDataForInspection( - streamEditor, - streamData - ) == FALSE) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - goto Exit; - } - - // - // Pass-thru to scanning - // - } - case INLINE_EDIT_SCANNING: - { - UINT i; - BYTE* dataStart = (BYTE*)streamEditor->scratchBuffer + streamEditor->dataOffset; - BOOLEAN found = FALSE; - - for (i = 0; i < streamEditor->dataLength; ++i) - { - if (i + findLength <= streamEditor->dataLength) - { - if (RtlCompareMemory( - dataStart + i, - configStringToFind, - findLength - ) == findLength) - { - found = TRUE; - - streamEditor->inlineEditState = INLINE_EDIT_MODIFYING; - - if (i != 0) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = i; - - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - streamEditor->dataOffset += i; - streamEditor->dataLength -= i; - - break; - } - else - { - goto modify_data; - } - } - } - else - { - if (classifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA) - { - break; - } - - if (RtlCompareMemory( - dataStart + i, - configStringToFind, - streamEditor->dataLength - i - ) == streamEditor->dataLength - i) - { - found = TRUE; // this is a partial find - - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = i; - - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - RtlMoveMemory( - streamEditor->scratchBuffer, - dataStart + i, - streamEditor->dataLength - i - ); - - streamEditor->dataOffset = 0; - streamEditor->dataLength = streamEditor->dataLength - i; - - streamEditor->inlineEditState = INLINE_EDIT_SKIPPING; - - break; - } - } - } - - if (!found) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = 0; - - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - streamEditor->dataOffset = 0; - streamEditor->dataLength = 0; - - streamEditor->inlineEditState = INLINE_EDIT_WAITING_FOR_DATA; - } - - break; - } - case INLINE_EDIT_SKIPPING: - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = 0; - - classifyOut->actionType = FWP_ACTION_BLOCK; - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - - streamEditor->inlineEditState = INLINE_EDIT_WAITING_FOR_DATA; - - break; - } - case INLINE_EDIT_MODIFYING: - -modify_data: - - { - NTSTATUS status; - NET_BUFFER_LIST* netBufferList; - - status = FwpsAllocateNetBufferAndNetBufferList( - gNetBufferListPool, - 0, - 0, - gStringToReplaceMdl, - 0, - replaceLength, - &netBufferList - ); - - if (!NT_SUCCESS(status)) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - goto Exit; - } - - status = FwpsStreamInjectAsync( - gInjectionHandle, - NULL, - 0, - inMetaValues->flowHandle, - filter->action.calloutId, - inFixedValues->layerId, - streamData->flags, - netBufferList, - replaceLength, - StreamInjectCompletionFn, - NULL - ); - - if (!NT_SUCCESS(status)) - { - FwpsFreeNetBufferList(netBufferList); - - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - goto Exit; - } - - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = findLength; - - classifyOut->actionType = FWP_ACTION_BLOCK; - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - - streamEditor->dataOffset += findLength; - streamEditor->dataLength -= findLength; - - if (streamEditor->dataLength > 0) - { - streamEditor->inlineEditState = INLINE_EDIT_SCANNING; - } - else - { - streamEditor->dataOffset = 0; - - streamEditor->inlineEditState = INLINE_EDIT_WAITING_FOR_DATA; - } - - break; - } - default: - NT_ASSERT(FALSE); - break; - }; - -Exit: - - return; -} - -#if(NTDDI_VERSION >= NTDDI_WIN7) - -void -NTAPI -StreamInlineEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const void* classifyContext, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ) - -#else - -void -NTAPI -StreamInlineEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Out_ FWPS_CLASSIFY_OUT* classifyOut - ) - -#endif /// (NTDDI_VERSION >= NTDDI_WIN7) - -/* ++ - - This is the ClassifyFn function registered by the inline stream edit callout. - - An inline stream modification callout performs editing from within the - ClassifyFn call by permitting sections of the content and replacing other - sections by removing them and injecting new content. - --- */ -{ - FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket; - FWPS_STREAM_DATA* streamData; - - ioPacket = (FWPS_STREAM_CALLOUT_IO_PACKET*)layerData; - NT_ASSERT(ioPacket != NULL); - - streamData = ioPacket->streamData; - NT_ASSERT(streamData != NULL); - -#if(NTDDI_VERSION >= NTDDI_WIN7) - UNREFERENCED_PARAMETER(classifyContext); -#endif /// (NTDDI_VERSION >= NTDDI_WIN7) - UNREFERENCED_PARAMETER(flowContext); - - RtlZeroMemory(classifyOut, sizeof(FWPS_CLASSIFY_OUT)); - - // - // Let go the traffic that the editor does not care about. - // - - if ((configInspectionOutbound && (streamData->flags & FWPS_STREAM_FLAG_RECEIVE)) || - (!configInspectionOutbound && (streamData->flags & FWPS_STREAM_FLAG_SEND))) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - goto Exit; - } - - // - // In this sample we don't edit TCP urgent data - // - - if ((streamData->flags & FWPS_STREAM_FLAG_SEND_EXPEDITED) || - (streamData->flags & FWPS_STREAM_FLAG_RECEIVE_EXPEDITED)) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - goto Exit; - } - - StreamInlineEdit( - &gStreamEditor, - inFixedValues, - inMetaValues, - filter, - streamData, - ioPacket, - classifyOut - ); - -Exit: - - return; -} diff --git a/network/trans/stmedit/sys/inline_edit.h b/network/trans/stmedit/sys/inline_edit.h deleted file mode 100644 index a9345324..00000000 --- a/network/trans/stmedit/sys/inline_edit.h +++ /dev/null @@ -1,65 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved - -Abstract: - - Stream Edit Callout Driver Sample. - - This sample demonstrates inline stream inspection/editing - via the WFP stream API. - -Environment: - - Kernel mode - ---*/ - -#ifndef _INLINE_EDIT_H -#define _INLINE_EDIT_H - -typedef enum INLINE_EDIT_STATE_ -{ - INLINE_EDIT_WAITING_FOR_DATA, - INLINE_EDIT_SKIPPING, - INLINE_EDIT_MODIFYING, - INLINE_EDIT_SCANNING -} INLINE_EDIT_STATE; - -typedef struct STREAM_EDITOR_ STREAM_EDITOR; - -void -InlineEditInit( - _Out_ STREAM_EDITOR* - ); - -#if(NTDDI_VERSION >= NTDDI_WIN7) - -void -NTAPI -StreamInlineEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const void* classifyContext, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ); - -#else - -void -NTAPI -StreamInlineEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ); - -#endif /// (NTDDI_VERSION >= NTDDI_WIN7) - -#endif // _INLINE_EDIT_H diff --git a/network/trans/stmedit/sys/oob_edit.c b/network/trans/stmedit/sys/oob_edit.c deleted file mode 100644 index ee53bc5e..00000000 --- a/network/trans/stmedit/sys/oob_edit.c +++ /dev/null @@ -1,1363 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved - -Abstract: - - Stream Edit Callout Driver Sample. - - This sample demonstrates Out-of-band (OOB) stream inspection/editing - via the WFP stream API. - -Environment: - - Kernel mode - ---*/ - -#include - -#pragma warning(push) -#pragma warning(disable:4201) // unnamed struct/union - -#include - -#pragma warning(pop) - -#include - -#include "inline_edit.h" -#include "oob_edit.h" -#include "stream_callout.h" - -#define STREAM_EDITOR_OUTGOING_DATA_TAG 'doeS' -#define STREAM_EDITOR_MDL_DATA_TAG 'dmeS' - -void* gThreadObj; - -KSTART_ROUTINE StreamOobEditWorker; - -NTSTATUS -OobEditInit( - _Out_ STREAM_EDITOR* streamEditor - ) -{ - NTSTATUS status = STATUS_SUCCESS; - - HANDLE threadHandle; - - streamEditor->editInline = FALSE; - - KeInitializeSpinLock(&streamEditor->oobEditInfo.editLock); - - KeInitializeEvent( - &streamEditor->oobEditInfo.editEvent, - NotificationEvent, - FALSE - ); - - streamEditor->oobEditInfo.busyThreshold = 32 * 1024; - streamEditor->oobEditInfo.editState = OOB_EDIT_IDLE; - - InitializeListHead(&streamEditor->oobEditInfo.outgoingDataQueue); - - - status = PsCreateSystemThread( - &threadHandle, - THREAD_ALL_ACCESS, - NULL, - NULL, - NULL, - StreamOobEditWorker, - &gStreamEditor - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - status = ObReferenceObjectByHandle( - threadHandle, - 0, - NULL, - KernelMode, - &gThreadObj, - NULL - ); - NT_ASSERT(NT_SUCCESS(status)); - - ZwClose(threadHandle); - -Exit: - - return status; -} - -void -OobEditShutdown( - _Out_ STREAM_EDITOR* streamEditor - ) -{ - KLOCK_QUEUE_HANDLE editLockHandle; - - KeAcquireInStackQueuedSpinLock( - &streamEditor->oobEditInfo.editLock, - &editLockHandle - ); - - streamEditor->oobEditInfo.shuttingDown = TRUE; - - switch (streamEditor->oobEditInfo.editState) - { - case OOB_EDIT_IDLE: - { - streamEditor->oobEditInfo.editState = OOB_EDIT_SHUT_DOWN; - - KeSetEvent( - &gStreamEditor.oobEditInfo.editEvent, - IO_NO_INCREMENT, - FALSE - ); - - break; - } - default: - break; - }; - - KeReleaseInStackQueuedSpinLock(&editLockHandle); - - NT_ASSERT(gThreadObj != NULL); - - KeWaitForSingleObject( - gThreadObj, - Executive, - KernelMode, - FALSE, - NULL - ); - - ObDereferenceObject(gThreadObj); -} - -__inline -NET_BUFFER_LIST* -TailOfNetBufferListChain( - _In_ NET_BUFFER_LIST* netBufferListChain - ) -{ - NT_ASSERT(netBufferListChain != NULL); - - while (netBufferListChain->Next != NULL) - { - netBufferListChain = netBufferListChain->Next; - } - - return netBufferListChain; -} - -void -NTAPI -StreamOobInjectCompletionFn( - _Inout_ void* context, - _Inout_ NET_BUFFER_LIST* netBufferList, - BOOLEAN dispatchLevel - ) -/* ++ - - Injection completion function for injecting an NBL created using - FwpsAllocateNetBufferAndNetBufferList. This function frees up - resources allocated during StreamOobReinjectData(). - --- */ -{ - MDL* mdl = (MDL*)context; - - UNREFERENCED_PARAMETER(dispatchLevel); - - FwpsFreeNetBufferList(netBufferList); - - if (mdl != NULL) - { - IoFreeMdl(mdl); - - // - // The MDL mapped over a pool alloc which we need to free here. - // - - ExFreePoolWithTag( - mdl->MappedSystemVa, - STREAM_EDITOR_MDL_DATA_TAG - ); - } -} - -void -NTAPI StreamOobInjectCloneCompletionFn( - _Inout_ void* context, - _Inout_ NET_BUFFER_LIST* netBufferList, - BOOLEAN dispatchLevel - ) -/* ++ - - Injection completion function for injecting one of the NBLs cloned - via FwpsCloneStreamData. - - FwpsCloneStreamData can return a chain of cloned NBLs; each NBL will - complete separately. - --- */ -{ - UNREFERENCED_PARAMETER(context); - UNREFERENCED_PARAMETER(dispatchLevel); - - FwpsFreeCloneNetBufferList(netBufferList, 0); -} - -NTSTATUS -StreamOobQueueUpIncomingData( - _Inout_ STREAM_EDITOR* streamEditor, - _Inout_ FWPS_STREAM_DATA* streamData - ) -/* ++ - - This function clones the indicated stream data into a NBL chain and - appends the chain at the end of the existing chain (if exists) inside - the streamEditor. - - This function assumes that the oobEditInfo lock inside streamEditor is - being held. - --- */ -{ - NTSTATUS status; - - NET_BUFFER_LIST* clonedNetBufferListChain; - - status = FwpsCloneStreamData( - streamData, - NULL, - NULL, - 0, - &clonedNetBufferListChain - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - // - // TCP Fin (EOF) is indicated by an empty NBL with disconnect flag - // set, since it does not contain any data we queue it up separately. - // - - if ((streamData->flags & FWPS_STREAM_FLAG_SEND_DISCONNECT) || - (streamData->flags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)) - { - NT_ASSERT(streamEditor->oobEditInfo.noMoreData); - NT_ASSERT(streamEditor->oobEditInfo.nblEof == NULL); - NT_ASSERT(streamData->dataLength == 0); - - streamEditor->oobEditInfo.nblEof = clonedNetBufferListChain; - - status = STATUS_SUCCESS; - goto Exit; - } - - if (streamEditor->oobEditInfo.nblTail != NULL) - { - NT_ASSERT(streamEditor->oobEditInfo.nblHead != NULL); - NT_ASSERT(streamEditor->oobEditInfo.nblTail->Next == NULL); - - streamEditor->oobEditInfo.nblTail->Next = clonedNetBufferListChain; - } - else - { - NT_ASSERT(streamEditor->oobEditInfo.nblHead == NULL); - - streamEditor->oobEditInfo.nblHead = clonedNetBufferListChain; - } - - streamEditor->oobEditInfo.nblTail = - TailOfNetBufferListChain(clonedNetBufferListChain); - - streamEditor->oobEditInfo.totalDataLength += streamData->dataLength; - - streamEditor->oobEditInfo.streamFlags = streamData->flags; - -Exit: - - return status; -} - -void -StreamOobEdit( - _Inout_ STREAM_EDITOR* streamEditor, - const FWPS_INCOMING_VALUES* inFixedValues, - const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - const FWPS_FILTER* filter, - _Inout_ FWPS_STREAM_DATA* streamData, - _Inout_ FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ) -/* ++ - - This function queues up incoming data and notifies the worker thread - to process them. The incoming data is blocked and removed from the - stream while data is pending. - - If the editor is shutdown (e.g. during driverUnload) as indicated - by OOB_EDIT_SHUT_DOWN state, it permits the indicated data inline after - flushing all pended data (to be carried out by the caller). - --- */ - -{ - NTSTATUS status; - - KLOCK_QUEUE_HANDLE editLockHandle; - - KeAcquireInStackQueuedSpinLock( - &streamEditor->oobEditInfo.editLock, - &editLockHandle - ); - - if (streamEditor->oobEditInfo.nblEof != NULL) - { - // - // A new flow arrives before we finish processing an earlier flow. Production - // code should create 1:1 between streamEditor and flow to handle this - // condition. See the "MSN Monitor sample" for how that can be implemented. - // - - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - - goto Exit; - } - - if (classifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA) - { - NT_ASSERT(streamEditor->oobEditInfo.nblEof == NULL); - - streamEditor->oobEditInfo.noMoreData = TRUE; - } - - // - // Record needed flow information etc for data (re-)injection. - // - - streamEditor->oobEditInfo.calloutId = filter->action.calloutId; - streamEditor->oobEditInfo.flowId = inMetaValues->flowHandle; - streamEditor->oobEditInfo.layerId = inFixedValues->layerId; - - switch (streamEditor->oobEditInfo.editState) - { - case OOB_EDIT_PROCESSING: - { - if ((streamEditor->oobEditInfo.totalDataLength + streamData->dataLength) > - streamEditor->oobEditInfo.busyThreshold) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_DEFER; - classifyOut->actionType = FWP_ACTION_NONE; - - streamEditor->oobEditInfo.editState = OOB_EDIT_BUSY; - } - else - { - status = StreamOobQueueUpIncomingData( - streamEditor, - streamData - ); - - if (!NT_SUCCESS(status)) - { - streamEditor->oobEditInfo.editState = OOB_EDIT_ERROR; - - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - } - else - { - // - // State remains at OOB_EDIT_PROCESSING state. Since the worker thread - // is active there is no need to set the event (to wake it up) - // - - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = 0; - classifyOut->actionType = FWP_ACTION_BLOCK; - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - } - - break; - } - case OOB_EDIT_IDLE: - { - status = StreamOobQueueUpIncomingData( - streamEditor, - streamData - ); - - if (!NT_SUCCESS(status)) - { - streamEditor->oobEditInfo.editState = OOB_EDIT_ERROR; - - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - } - else - { - streamEditor->oobEditInfo.editState = OOB_EDIT_PROCESSING; - - // - // The worker thread is idle waiting for more work, now wake it up. - // - KeSetEvent( - &streamEditor->oobEditInfo.editEvent, - 0, - FALSE - ); - - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = 0; - classifyOut->actionType = FWP_ACTION_BLOCK; - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - break; - } - case OOB_EDIT_SHUT_DOWN: - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - ioPacket->countBytesEnforced = 0; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - break; - } - case OOB_EDIT_ERROR: - { - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - break; - } - default: - NT_ASSERT(FALSE); - }; - -Exit: - - KeReleaseInStackQueuedSpinLock(&editLockHandle); -} - -NTSTATUS -StreamOobQueueUpOutgoingData( - _Inout_ STREAM_EDITOR* streamEditor, - _Inout_ NET_BUFFER_LIST* netBufferList, - BOOLEAN isClone, - size_t dataLength, - DWORD streamFlags, - _In_opt_ MDL* mdl - ) -/* ++ - - This function queues up processed data (either sections of the indicated - data or newly created data) such that they can be (re-)injected back to - the data stream during the following context. - - 1. Before FWP_ACTION_BLOCK is returned from the ClassifyFn, or - 2. After EOF is indicated. - - Under the conditions above, the incoming data (which we pend) and the - outgoing data (which we (re-)inject) can be synchronized properly). - --- */ -{ - NTSTATUS status = STATUS_SUCCESS; - KLOCK_QUEUE_HANDLE editLockHandle; - OUTGOING_STREAM_DATA* outgoingStreamData; - - outgoingStreamData = (OUTGOING_STREAM_DATA*) ExAllocatePoolWithTag( - NonPagedPool, - sizeof(OUTGOING_STREAM_DATA), - STREAM_EDITOR_OUTGOING_DATA_TAG - ); - - if (outgoingStreamData == NULL) - { - status = STATUS_NO_MEMORY; - return status; - } - - RtlZeroMemory(outgoingStreamData, sizeof(OUTGOING_STREAM_DATA)); - - outgoingStreamData->netBufferList = netBufferList; - outgoingStreamData->isClone = isClone; - outgoingStreamData->dataLength = dataLength; - outgoingStreamData->streamFlags = streamFlags; - outgoingStreamData->mdl = mdl; - - KeAcquireInStackQueuedSpinLock( - &streamEditor->oobEditInfo.editLock, - &editLockHandle - ); - - InsertTailList( - &streamEditor->oobEditInfo.outgoingDataQueue, - &outgoingStreamData->listEntry - ); - - KeReleaseInStackQueuedSpinLock(&editLockHandle); - - return status; -} - -NTSTATUS -StreamOobFlushOutgoingData( - _Inout_ STREAM_EDITOR* streamEditor - ) -{ - NTSTATUS status = STATUS_SUCCESS; - - KLOCK_QUEUE_HANDLE editLockHandle; - OUTGOING_STREAM_DATA* outgoingStreamData = NULL; - - for(;;) - { - KeAcquireInStackQueuedSpinLock( - &streamEditor->oobEditInfo.editLock, - &editLockHandle - ); - - if (!IsListEmpty(&streamEditor->oobEditInfo.outgoingDataQueue)) - { - LIST_ENTRY* listEntry = - RemoveHeadList(&streamEditor->oobEditInfo.outgoingDataQueue); - - outgoingStreamData = CONTAINING_RECORD( - listEntry, - OUTGOING_STREAM_DATA, - listEntry - ); - } - - KeReleaseInStackQueuedSpinLock(&editLockHandle); - - if (outgoingStreamData == NULL) - { - break; - } - - status = FwpsStreamInjectAsync( - gInjectionHandle, - NULL, - 0, - streamEditor->oobEditInfo.flowId, - streamEditor->oobEditInfo.calloutId, - streamEditor->oobEditInfo.layerId, - outgoingStreamData->streamFlags, - outgoingStreamData->netBufferList, - outgoingStreamData->dataLength, - outgoingStreamData->isClone ? StreamOobInjectCloneCompletionFn : - StreamOobInjectCompletionFn, - outgoingStreamData->mdl - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - ExFreePoolWithTag( - outgoingStreamData, - STREAM_EDITOR_OUTGOING_DATA_TAG - ); - - outgoingStreamData = NULL; - } - -Exit: - - if (outgoingStreamData != NULL) - { - NT_ASSERT(!NT_SUCCESS(status)); - - if (outgoingStreamData->isClone) - { - FwpsDiscardClonedStreamData( - outgoingStreamData->netBufferList, - 0, - FALSE - ); - } - else - { - FwpsFreeNetBufferList(outgoingStreamData->netBufferList); - - if (outgoingStreamData->mdl != NULL) - { - IoFreeMdl(outgoingStreamData->mdl); - - ExFreePoolWithTag( - outgoingStreamData->mdl->MappedSystemVa, - STREAM_EDITOR_MDL_DATA_TAG - ); - } - } - - ExFreePoolWithTag( - outgoingStreamData, - STREAM_EDITOR_OUTGOING_DATA_TAG - ); - } - - return status; -} - - -NTSTATUS -StreamOobReinjectData( - _Inout_ STREAM_EDITOR* streamEditor, - UINT32 streamFlags, - const void* data, - size_t length - ) -/* ++ - - This function injects a section of the original indicated data back - to the data stream. - - An MDL is allocated to describe the data section. - --- */ -{ - NTSTATUS status; - - void* dataCopy = NULL; - MDL* mdl = NULL; - NET_BUFFER_LIST* netBufferList = NULL; - - dataCopy = ExAllocatePoolWithTag( - NonPagedPool, - length, - STREAM_EDITOR_MDL_DATA_TAG - ); - - if (dataCopy == NULL) - { - status = STATUS_NO_MEMORY; - goto Exit; - } - - RtlCopyMemory(dataCopy, data, length); - - mdl = IoAllocateMdl( - dataCopy, - (ULONG)length, - FALSE, - FALSE, - NULL - ); - if (mdl == NULL) - { - status = STATUS_NO_MEMORY; - goto Exit; - } - - MmBuildMdlForNonPagedPool(mdl); - - status = FwpsAllocateNetBufferAndNetBufferList( - gNetBufferListPool, - 0, - 0, - mdl, - 0, - length, - &netBufferList - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - NT_ASSERT(!(streamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && - !(streamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)); - - status = StreamOobQueueUpOutgoingData( - streamEditor, - netBufferList, - FALSE, - length, - streamFlags, - mdl - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - dataCopy = NULL; - mdl = NULL; - netBufferList = NULL; - -Exit: - - if (netBufferList != NULL) - { - FwpsFreeNetBufferList(netBufferList); - } - if (mdl != NULL) - { - IoFreeMdl(mdl); - } - if (dataCopy != NULL) - { - ExFreePoolWithTag( - dataCopy, - STREAM_EDITOR_MDL_DATA_TAG - ); - } - return status; -} - -NTSTATUS -StreamOobInjectReplacement( - _Inout_ STREAM_EDITOR* streamEditor, - UINT32 streamFlags, - _In_opt_ MDL* data, - size_t length - ) -/* ++ - - This function injects a section of replacement data (in place of data - removed from the stream) into the data stream. - - The MDL describes the replacement data is allocated during DriverEntry - and does not need to be freed during injection completion. - --- */ -{ - NTSTATUS status; - - NET_BUFFER_LIST* netBufferList = NULL; - - status = FwpsAllocateNetBufferAndNetBufferList( - gNetBufferListPool, - 0, - 0, - data, - 0, - length, - &netBufferList - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - NT_ASSERT(!(streamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && - !(streamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)); - - status = StreamOobQueueUpOutgoingData( - streamEditor, - netBufferList, - FALSE, - length, - streamFlags, - NULL - ); - - if (!NT_SUCCESS(status)) - { - FwpsFreeNetBufferList(netBufferList); - goto Exit; - } - - netBufferList = NULL; - -Exit: - - if (netBufferList != NULL) - { - FwpsFreeNetBufferList(netBufferList); - } - - return status; -} - -NTSTATUS -StreamOobCopyDataToFlatBuffer( - _Inout_ STREAM_EDITOR* streamEditor, - _Inout_ NET_BUFFER_LIST* netBufferListChain, - size_t totalDataLength, - DWORD streamFlags - ) -/* ++ - - This function copies the data described by NBL(s) into a flat buffer. - - It reuses the FwpsCopyStreamDataToBuffer API (via StreamCopyDataForInspection) - by creating a FWPS_STREAM_DATA struct. - --- */ -{ - NTSTATUS status = STATUS_SUCCESS; - - FWPS_STREAM_DATA streamData = {0}; - - if (totalDataLength > 0) - { - streamData.netBufferListChain = netBufferListChain; - streamData.dataLength = totalDataLength; - streamData.flags = streamFlags; - - streamData.dataOffset.netBufferList = netBufferListChain; - streamData.dataOffset.netBuffer = - NET_BUFFER_LIST_FIRST_NB(streamData.dataOffset.netBufferList); - streamData.dataOffset.mdl = - NET_BUFFER_CURRENT_MDL(streamData.dataOffset.netBuffer); - streamData.dataOffset.mdlOffset = - NET_BUFFER_CURRENT_MDL_OFFSET(streamData.dataOffset.netBuffer); - - if (StreamCopyDataForInspection( - streamEditor, - &streamData - ) == FALSE) - { - status = STATUS_NO_MEMORY; - } - } - - return status; -} - -NTSTATUS -StreamOobEditData( - _Inout_ STREAM_EDITOR* streamEditor, - _Inout_ NET_BUFFER_LIST* netBufferListChain, - size_t totalDataLength, - DWORD streamFlags - ) -/* ++ - - This function first copies the stream data into a flat inspection buffer; - it then parses the buffer looking for the matching pattern. For - non-matching sections it re-injects the data back; for a match it skips - over and injects an replacement section. - - If a match can not be determined due to lack of data, it injects the - non-matching section back and moves the potential match to the beginning - of the inspection buffer. - - When an EOF is reached, it flushes all processed stream sections back - and re-injects the FIN back to end the stream. - --- */ -{ - NTSTATUS status = STATUS_SUCCESS; - - UINT i = 0; - BOOLEAN streamModified = FALSE; - BOOLEAN potentialMatch = FALSE; - - BYTE* dataStart; - - UINT findLength = (UINT) strlen(configStringToFind); - - status = StreamOobCopyDataToFlatBuffer( - streamEditor, - netBufferListChain, - totalDataLength, - streamFlags - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - dataStart = (BYTE*)streamEditor->scratchBuffer + streamEditor->dataOffset; - - for (; i < streamEditor->dataLength; ++i) - { - if (i + findLength <= streamEditor->dataLength) - { - if (RtlCompareMemory( - dataStart + i, - configStringToFind, - findLength - ) == findLength) - { - if (i != 0) - { - status = StreamOobReinjectData( - streamEditor, - streamFlags, - dataStart, - i - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - streamEditor->dataOffset += i; - streamEditor->dataLength -= i; - - i = 0; - } - - status = StreamOobInjectReplacement( - streamEditor, - streamFlags, - gStringToReplaceMdl, - strlen(configStringToReplace) - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - streamEditor->dataOffset += findLength; - streamEditor->dataLength -= findLength; - - streamModified = TRUE; - - if (streamEditor->dataLength > 0) - { - dataStart = (BYTE*)streamEditor->scratchBuffer + streamEditor->dataOffset; - - --i; - - continue; - } - else - { - streamEditor->dataOffset = 0; - } - } - } - else - { - if (streamEditor->oobEditInfo.noMoreData) - { - break; - } - - if (RtlCompareMemory( - dataStart + i, - configStringToFind, - streamEditor->dataLength - i - ) == streamEditor->dataLength - i) - { - potentialMatch = TRUE; // this is a partial find - - status = StreamOobReinjectData( - streamEditor, - streamFlags, - dataStart, - i - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - RtlMoveMemory( - (BYTE*)streamEditor->scratchBuffer, - dataStart + i, - streamEditor->dataLength - i - ); - - streamEditor->dataOffset = 0; - streamEditor->dataLength = streamEditor->dataLength - i; - - break; - } - } - } - - if (streamModified && streamEditor->dataLength > 0) - { - status = StreamOobReinjectData( - streamEditor, - streamFlags, - dataStart, - streamEditor->dataLength - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - streamEditor->dataOffset = 0; - streamEditor->dataLength = 0; - } - - if (!streamModified && !potentialMatch) - { - if (totalDataLength > 0) - { - NT_ASSERT(!(streamFlags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && - !(streamFlags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)); - - status = StreamOobQueueUpOutgoingData( - streamEditor, - netBufferListChain, - TRUE, - totalDataLength, - streamFlags, - NULL - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - netBufferListChain = NULL; - } - else if (streamEditor->dataLength > 0) - { - status = StreamOobReinjectData( - streamEditor, - streamFlags, - dataStart, - streamEditor->dataLength - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - } - - streamEditor->dataOffset = 0; - streamEditor->dataLength = 0; - } - - if (streamEditor->oobEditInfo.nblEof != NULL) - { - status = StreamOobFlushOutgoingData(streamEditor); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - status = FwpsStreamInjectAsync( - gInjectionHandle, - NULL, - 0, - streamEditor->oobEditInfo.flowId, - streamEditor->oobEditInfo.calloutId, - streamEditor->oobEditInfo.layerId, - streamFlags | (configInspectionOutbound ? FWPS_STREAM_FLAG_SEND_DISCONNECT : - FWPS_STREAM_FLAG_RECEIVE_DISCONNECT), - streamEditor->oobEditInfo.nblEof, - 0, - StreamOobInjectCompletionFn, - NULL - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - streamEditor->oobEditInfo.nblEof = NULL; - streamEditor->oobEditInfo.noMoreData = FALSE; - } - -Exit: - - if (netBufferListChain != NULL) - { - FwpsDiscardClonedStreamData( - netBufferListChain, - 0, - FALSE - ); - } - - if (streamEditor->oobEditInfo.nblEof != NULL) - { - FwpsDiscardClonedStreamData( - streamEditor->oobEditInfo.nblEof, - 0, - FALSE - ); - - streamEditor->oobEditInfo.nblEof = NULL; - } - - return status; -} - -_IRQL_requires_same_ -_Function_class_(KSTART_ROUTINE) -void -StreamOobEditWorker( - _In_ void* StartContext - ) -/* ++ - - This function waits for an event which gets signalled when there is data - waiting to be inspected. - - Once awaken, the worker thread edits the stream until all stream data is - processed (and then it waits for more work again). - - When requested to shutdown, it will finish the editing task and enters - "shutdown" state. - --- */ -{ - NTSTATUS status = STATUS_SUCCESS; - - NET_BUFFER_LIST* netBufferListChain = NULL; - size_t totalDataLength; - STREAM_EDITOR* streamEditor = (STREAM_EDITOR*)StartContext; - DWORD streamFlags; - - for(;;) - { - KLOCK_QUEUE_HANDLE editLockHandle; - - KeWaitForSingleObject( - &streamEditor->oobEditInfo.editEvent, - Executive, - KernelMode, - FALSE, - NULL - ); - - if (streamEditor->oobEditInfo.editState == OOB_EDIT_ERROR || - streamEditor->oobEditInfo.editState == OOB_EDIT_SHUT_DOWN) - { - break; - } - - KeAcquireInStackQueuedSpinLock( - &streamEditor->oobEditInfo.editLock, - &editLockHandle - ); - - NT_ASSERT(streamEditor->oobEditInfo.editState == OOB_EDIT_PROCESSING || - streamEditor->oobEditInfo.editState == OOB_EDIT_BUSY); - - netBufferListChain = streamEditor->oobEditInfo.nblHead; - totalDataLength = streamEditor->oobEditInfo.totalDataLength; - streamFlags = streamEditor->oobEditInfo.streamFlags; - - streamEditor->oobEditInfo.nblHead = NULL; - streamEditor->oobEditInfo.nblTail = NULL; - streamEditor->oobEditInfo.totalDataLength = 0; - - KeReleaseInStackQueuedSpinLock(&editLockHandle); - - _Analysis_assume_(netBufferListChain != NULL); - status = StreamOobEditData( - streamEditor, - netBufferListChain, - totalDataLength, - streamFlags - ); - - if (!NT_SUCCESS(status)) - { - streamEditor->oobEditInfo.editState = OOB_EDIT_ERROR; - break; - } - - if (streamEditor->oobEditInfo.editState == OOB_EDIT_BUSY) - { - NTSTATUS streamContinueStatus; - streamEditor->oobEditInfo.editState = OOB_EDIT_PROCESSING; - - streamContinueStatus = FwpsStreamContinue( - streamEditor->oobEditInfo.flowId, - streamEditor->oobEditInfo.calloutId, - streamEditor->oobEditInfo.layerId, - streamEditor->oobEditInfo.streamFlags - ); - - if (!NT_SUCCESS(streamContinueStatus)) - { - streamEditor->oobEditInfo.editState = OOB_EDIT_ERROR; - break; - } - } - - KeAcquireInStackQueuedSpinLock( - &streamEditor->oobEditInfo.editLock, - &editLockHandle - ); - - if (streamEditor->oobEditInfo.nblHead == NULL) - { - if (!streamEditor->oobEditInfo.shuttingDown) - { - streamEditor->oobEditInfo.editState = OOB_EDIT_IDLE; - KeClearEvent(&streamEditor->oobEditInfo.editEvent); - } - else - { - streamEditor->oobEditInfo.editState = OOB_EDIT_SHUT_DOWN; - } - } - - KeReleaseInStackQueuedSpinLock(&editLockHandle); - } - - PsTerminateSystemThread(status); -} - -#if(NTDDI_VERSION >= NTDDI_WIN7) - -void -NTAPI -StreamOobEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const void* classifyContext, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ) - -#else - -void -NTAPI -StreamOobEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ) - -#endif /// (NTDDI_VERSION >= NTDDI_WIN7) -/* ++ - - This is the ClassifyFn function registered by the OOB stream edit callout. - - An OOB stream modification callout blocks all indicated data after cloning - them for processing by a kernel mode worker thread (or marshalling the data - to user mode for inspection); the resultant/edited data will then be put - back to the stream via the stream injection API. - - For such a callout, the processed data must be (re-)injected back to the - stream from within the ClassifyFn. - --- */ -{ - FWPS_STREAM_CALLOUT_IO_PACKET* ioPacket; - FWPS_STREAM_DATA* streamData; - - UINT findLength = (UINT) strlen(configStringToFind); - - ioPacket = (FWPS_STREAM_CALLOUT_IO_PACKET*)layerData; - NT_ASSERT(ioPacket != NULL); - - streamData = ioPacket->streamData; - NT_ASSERT(streamData != NULL); - -#if(NTDDI_VERSION >= NTDDI_WIN7) - UNREFERENCED_PARAMETER(classifyContext); -#endif /// (NTDDI_VERSION >= NTDDI_WIN7) - UNREFERENCED_PARAMETER(flowContext); - - RtlZeroMemory(classifyOut, sizeof(FWPS_CLASSIFY_OUT)); - - // - // Let go the traffic that the editor does not care about. - // - - if ((configInspectionOutbound && (streamData->flags & FWPS_STREAM_FLAG_RECEIVE)) || - (!configInspectionOutbound && (streamData->flags & FWPS_STREAM_FLAG_SEND))) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - goto Exit; - } - - // - // In this sample we don't edit TCP urgent data - // - - if ((streamData->flags & FWPS_STREAM_FLAG_SEND_EXPEDITED) || - (streamData->flags & FWPS_STREAM_FLAG_RECEIVE_EXPEDITED)) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NONE; - classifyOut->actionType = FWP_ACTION_PERMIT; - - if (filter->flags & FWPS_FILTER_FLAG_CLEAR_ACTION_RIGHT) - { - classifyOut->rights &= ~FWPS_RIGHT_ACTION_WRITE; - } - - goto Exit; - } - - if ((streamData->dataLength < findLength) && - !(classifyOut->flags & FWPS_CLASSIFY_OUT_FLAG_NO_MORE_DATA)) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_NEED_MORE_DATA; - ioPacket->countBytesRequired = findLength; - - classifyOut->actionType = FWP_ACTION_NONE; - goto Exit; - } - - StreamOobEdit( - &gStreamEditor, - inFixedValues, - inMetaValues, - filter, - streamData, - ioPacket, - classifyOut - ); - - if (classifyOut->actionType == FWP_ACTION_BLOCK || - classifyOut->actionType == FWP_ACTION_PERMIT) - { - if (!(streamData->flags & FWPS_STREAM_FLAG_SEND_DISCONNECT) && - !(streamData->flags & FWPS_STREAM_FLAG_RECEIVE_DISCONNECT)) - { - NTSTATUS status = StreamOobFlushOutgoingData( &gStreamEditor); - if (!NT_SUCCESS(status)) - { - ioPacket->streamAction = FWPS_STREAM_ACTION_DROP_CONNECTION; - classifyOut->actionType = FWP_ACTION_NONE; - } - } - } - -Exit: - - return; -} diff --git a/network/trans/stmedit/sys/oob_edit.h b/network/trans/stmedit/sys/oob_edit.h deleted file mode 100644 index e5a0e506..00000000 --- a/network/trans/stmedit/sys/oob_edit.h +++ /dev/null @@ -1,83 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved - -Abstract: - - Stream Edit Callout Driver Sample. - - This sample demonstrates Out-of-band (OOB) stream inspection/editing - via the WFP stream API. - -Environment: - - Kernel mode - ---*/ - -#ifndef _OOB_EDIT_H -#define _OOB_EDIT_H - -typedef enum OOB_EDIT_STATE_ -{ - OOB_EDIT_IDLE, - OOB_EDIT_PROCESSING, - OOB_EDIT_BUSY, - OOB_EDIT_SHUT_DOWN, - OOB_EDIT_ERROR -} OOB_EDIT_STATE; - -typedef struct OUTGOING_STREAM_DATA_ -{ - LIST_ENTRY listEntry; - - NET_BUFFER_LIST* netBufferList; - BOOLEAN isClone; - size_t dataLength; - DWORD streamFlags; - MDL* mdl; -} OUTGOING_STREAM_DATA; - -typedef struct STREAM_EDITOR_ STREAM_EDITOR; - -NTSTATUS -OobEditInit( - _Out_ STREAM_EDITOR* - ); - -void -OobEditShutdown( - _Out_ STREAM_EDITOR* streamEditor - ); - -#if(NTDDI_VERSION >= NTDDI_WIN7) - -void -NTAPI -StreamOobEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const void* classifyContext, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ); - -#else - -void -NTAPI -StreamOobEditClassify( - _In_ const FWPS_INCOMING_VALUES* inFixedValues, - _In_ const FWPS_INCOMING_METADATA_VALUES* inMetaValues, - _Inout_ void* layerData, - _In_ const FWPS_FILTER* filter, - _In_ UINT64 flowContext, - _Inout_ FWPS_CLASSIFY_OUT* classifyOut - ); - -#endif /// (NTDDI_VERSION >= NTDDI_WIN7) - - -#endif // _OOB_EDIT_H diff --git a/network/trans/stmedit/sys/stmedit.inf b/network/trans/stmedit/sys/stmedit.inf index b9ee15ea..fac93c26 100644 --- a/network/trans/stmedit/sys/stmedit.inf +++ b/network/trans/stmedit/sys/stmedit.inf @@ -9,9 +9,9 @@ Signature = "$Windows NT$" Class = WFPCALLOUTS ClassGuid = {57465043-616C-6C6F-7574-5F636C617373} - Provider = %ProviderString% + Provider = %Contoso% CatalogFile = StmEdit.cat - DriverVer = 11/24/2014,14.24.55.836 + DriverVer = 01/01/2015,1.0.09.15 [SourceDisksNames] 1 = %StmEditDisk%,,,"" @@ -50,17 +50,17 @@ AddReg = StmEdit.AddRegistry [StmEdit.AddRegistry] - HKR,"Parameters","EditInline",0x00010001,0 ; FLG_ADDREG_TYPE_DWORD - HKR,"Parameters","StringToFind",0x00000000,"rainy" ; FLG_ADDREG_TYPE_SZ - HKR,"Parameters","StringToReplace",0x00000000,"sunny" ; FLG_ADDREG_TYPE_SZ - HKR,"Parameters","InspectionPort",0x00010001,5001 ; FLG_ADDREG_TYPE_DWORD - HKR,"Parameters","InspectOutbound",0x00010001,0 ; FLG_ADDREG_TYPE_DWORD + HKR,"Parameters","MultipleCallouts", 0x00010001, 1 ; FLG_ADDREG_TYPE_DWORD + HKR,"Parameters","StringToFind", 0x00000000, "rainy" ; FLG_ADDREG_TYPE_SZ + HKR,"Parameters","InspectionRemotePort", 0x00010001, 0 ; FLG_ADDREG_TYPE_DWORD + HKR,"Parameters","InspectionLocalPort", 0x00010001, 8888 ; FLG_ADDREG_TYPE_DWORD + [StmEdit.DelRegistry] HKR,"Parameters",,, [Strings] - ProviderString = "TODO-Set-Provider" + Contoso = "Contoso Ltd." StmEditDisk = "Stream Edit Installation Disk" StmEditServiceDesc = "Stream Edit Callout Driver" StmEditServiceName = "StmEdit" \ No newline at end of file diff --git a/network/trans/stmedit/sys/stmedit.vcxproj b/network/trans/stmedit/sys/stmedit.vcxproj index 6194a510..7617ad5d 100644 --- a/network/trans/stmedit/sys/stmedit.vcxproj +++ b/network/trans/stmedit/sys/stmedit.vcxproj @@ -19,12 +19,12 @@ - {00B26024-D8C5-40FD-A6C7-BA15FD324FD0} + {9CE912A5-6210-4EF8-B22D-611D13254D4C} $(MSBuildProjectName) 1 Debug Win32 - {4DEE9F36-71EC-4057-8531-96C8B4624E91} + {8FEDC4BC-EFA4-4BF4-91B6-E33FA555EB15} @@ -36,12 +36,15 @@ Driver - Windows10 + + True - Universal + + KMDF WindowsKernelModeDriver10.0 Driver + false Windows10 @@ -98,6 +101,10 @@ %(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;NDIS_SUPPORT_NDIS6;POOL_NX_OPTIN_AUTO + true + DoTraceLevelMessage(LEVEL,FLAGS,MSG,...) + StmEdit + Trace.h %(AdditionalIncludeDirectories);$(DDK_INC_PATH) @@ -117,6 +124,10 @@ %(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;NDIS_SUPPORT_NDIS6;POOL_NX_OPTIN_AUTO + true + DoTraceLevelMessage(LEVEL,FLAGS,MSG,...) + StmEdit + Trace.h %(AdditionalIncludeDirectories);$(DDK_INC_PATH) @@ -136,6 +147,10 @@ %(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;NDIS_SUPPORT_NDIS6;POOL_NX_OPTIN_AUTO + DoTraceLevelMessage(LEVEL,FLAGS,MSG,...) + true + StmEdit + Trace.h %(AdditionalIncludeDirectories);$(DDK_INC_PATH) @@ -155,6 +170,10 @@ %(PreprocessorDefinitions);BINARY_COMPATIBLE=0;NT;UNICODE;_UNICODE;NDIS60;NDIS_SUPPORT_NDIS6;POOL_NX_OPTIN_AUTO + true + DoTraceLevelMessage(LEVEL,FLAGS,MSG,...) + StmEdit + Trace.h %(AdditionalIncludeDirectories);$(DDK_INC_PATH) @@ -165,9 +184,10 @@ - - - + + + + diff --git a/network/trans/stmedit/sys/stmedit.vcxproj.Filters b/network/trans/stmedit/sys/stmedit.vcxproj.Filters index 671a946a..9a0c9d49 100644 --- a/network/trans/stmedit/sys/stmedit.vcxproj.Filters +++ b/network/trans/stmedit/sys/stmedit.vcxproj.Filters @@ -3,30 +3,55 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {4EB0EC22-2845-4C9E-B03A-227073F198E7} + {B982E3FA-FE5E-446B-BF39-65C533B117A9} h;hpp;hxx;hm;inl;inc;xsd - {3953E48D-12FA-4B3E-ABA3-BEE2AFF7C284} + {92648371-83D5-4CCE-AA54-9B689B706227} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {D5A362D5-FA75-4E10-9D64-22B6CCB57052} + {163FDC8F-1EFF-4545-99A5-B189C0A6F18A} inf;inv;inx;mof;mc; - {9B77DAC7-BF0A-4BAD-B6E0-C663693F98BB} + {E7E65CD5-C0F5-4962-AAB1-B9A9BA383DD9} - + Source Files - + Source Files - + Source Files + + Source Files + + + + + Header Files + + + + + Header Files + + + + + Header Files + + + + + + + Driver Files + \ No newline at end of file diff --git a/network/trans/stmedit/sys/stream_callout.c b/network/trans/stmedit/sys/stream_callout.c deleted file mode 100644 index 7816c46d..00000000 --- a/network/trans/stmedit/sys/stream_callout.c +++ /dev/null @@ -1,772 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved - -Abstract: - - Stream Edit Callout Driver Sample. - - This sample demonstrates finding and replacing a string pattern from a - live TCP stream via the WFP stream API. - - The driver can function in one of the two modes -- - - o Inline Editing where all modification is carried out within the - WFP ClassifyFn callout function. - - o Out-of-band (OOB) Editing where all modification is done by a - worker thread. (this is the default) - - The mode setting, along with other inspection parameters are configurable - via the following registry values - - HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\stmedit\Parameters - - o StringToFind (REG_SZ, default = "rainy") - o StringToReplace (REG_SZ, default = "sunny") - o InspectionPort (REG_DWORD, default = 5001) - o InspectOutbound (REG_DWORD, default = 0) - o EditInline (REG_DWORD, default = 0) - - The sample is IP version agnostic. It performs inspection on both IPv4 and - IPv6 data streams. - - Before experimenting with the sample, please be sure to add an exception for - the InspectionPort configured to the firewall. - -Environment: - - Kernel mode - ---*/ - -#include -#include - -#pragma warning(push) -#pragma warning(disable:4201) // unnamed struct/union - -#include - -#pragma warning(pop) - -#include - -#include "inline_edit.h" -#include "oob_edit.h" -#include "stream_callout.h" - -#define INITGUID -#include - -// -// Configurable parameters -// - -USHORT configInspectionPort = 5001; -BOOLEAN configInspectionOutbound = FALSE; -BOOLEAN configEditInline = FALSE; - -CHAR configStringToFind[128] = "rainy"; -CHAR configStringToReplace[128] = "sunny"; - -// -// Callout driver keys -// - -// e6011cdc-440b-4a6f-8499-6fdb55fb1f92 -DEFINE_GUID( - STREAM_EDITOR_STREAM_CALLOUT_V4, - 0xe6011cdc, - 0x440b, - 0x4a6f, - 0x84, 0x99, 0x6f, 0xdb, 0x55, 0xfb, 0x1f, 0x92 -); -// c0bc07b4-aaf6-4242-a3dc-3ef341ffde5d -DEFINE_GUID( - STREAM_EDITOR_STREAM_CALLOUT_V6, - 0xc0bc07b4, - 0xaaf6, - 0x4242, - 0xa3, 0xdc, 0x3e, 0xf3, 0x41, 0xff, 0xde, 0x5d -); - -// -// Callout driver global variables -// - -MDL* gStringToReplaceMdl; - -STREAM_EDITOR gStreamEditor; - -HANDLE gEngineHandle; -UINT32 gCalloutIdV4; -UINT32 gCalloutIdV6; - -DEVICE_OBJECT* gWdmDevice; - -HANDLE gInjectionHandle; - -NDIS_GENERIC_OBJECT* gNdisGenericObj; -NDIS_HANDLE gNetBufferListPool; - -#define STREAM_EDITOR_NDIS_OBJ_TAG 'oneS' -#define STREAM_EDITOR_NBL_POOL_TAG 'pneS' -#define STREAM_EDITOR_FLAT_BUFFER_TAG 'bfeS' - - -DRIVER_INITIALIZE DriverEntry; -EVT_WDF_DRIVER_UNLOAD StreamEditEvtDriverUnload; - -NTSTATUS -StreamEditNotify( - FWPS_CALLOUT_NOTIFY_TYPE notifyType, - const GUID* filterKey, - const FWPS_FILTER* filter - ) -{ - UNREFERENCED_PARAMETER(notifyType); - UNREFERENCED_PARAMETER(filterKey); - UNREFERENCED_PARAMETER(filter); - - return STATUS_SUCCESS; -} - -NTSTATUS -RegisterCalloutForLayer( - const GUID* layerKey, - const GUID* calloutKey, - _Inout_ void* deviceObject, - _Out_ UINT32* calloutId - ) -/* ++ - - This function registers callouts and filters that intercept TCP - traffic at WFP FWPM_LAYER_STREAM_V4 or FWPM_LAYER_STREAM_V6 layer. - --- */ -{ - NTSTATUS status = STATUS_SUCCESS; - - FWPS_CALLOUT sCallout = {0}; - - FWPM_FILTER filter = {0}; - FWPM_FILTER_CONDITION filterConditions[1] = {0}; - - FWPM_CALLOUT mCallout = {0}; - FWPM_DISPLAY_DATA displayData = {0}; - - BOOLEAN calloutRegistered = FALSE; - - sCallout.calloutKey = *calloutKey; - sCallout.classifyFn = (configEditInline ? StreamInlineEditClassify : - StreamOobEditClassify); - sCallout.notifyFn = StreamEditNotify; - - status = FwpsCalloutRegister( - deviceObject, - &sCallout, - calloutId - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - calloutRegistered = TRUE; - - displayData.name = L"Stream Edit Callout"; - displayData.description = L"Callout that finds and replaces a token from a TCP stream"; - - mCallout.calloutKey = *calloutKey; - mCallout.displayData = displayData; - mCallout.applicableLayer = *layerKey; - status = FwpmCalloutAdd( - gEngineHandle, - &mCallout, - NULL, - NULL - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - filter.layerKey = *layerKey; - filter.displayData.name = L"Stream Edit Filter"; - filter.displayData.description = L"Filter that finds and replaces a token from a TCP stream"; - - filter.action.type = FWP_ACTION_CALLOUT_TERMINATING; - filter.action.calloutKey = *calloutKey; - filter.filterCondition = filterConditions; - filter.numFilterConditions = 1; - filter.subLayerKey = FWPM_SUBLAYER_UNIVERSAL; - filter.weight.type = FWP_EMPTY; // auto-weight. - - filterConditions[0].fieldKey = (configInspectionOutbound ? FWPM_CONDITION_IP_REMOTE_PORT : - FWPM_CONDITION_IP_LOCAL_PORT); - filterConditions[0].matchType = FWP_MATCH_EQUAL; - filterConditions[0].conditionValue.type = FWP_UINT16; - filterConditions[0].conditionValue.uint16 = configInspectionPort; - - status = FwpmFilterAdd( - gEngineHandle, - &filter, - NULL, - NULL); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - -Exit: - - if (!NT_SUCCESS(status)) - { - if (calloutRegistered) - { - FwpsCalloutUnregisterById(*calloutId); - } - } - - return status; -} - -NTSTATUS -StreamEditRegisterCallout( - const STREAM_EDITOR* streamEditor, - _Inout_ void* deviceObject - ) -/* ++ - - This function registers dynamic callouts and filters that intercept - TCP traffic at WFP FWPM_LAYER_STREAM_V4 and FWPM_LAYER_STREAM_V6 - layer. - - Callouts and filters will be removed during DriverUnload. - --- */ -{ - NTSTATUS status = STATUS_SUCCESS; - - BOOLEAN engineOpened = FALSE; - BOOLEAN inTransaction = FALSE; - - FWPM_SESSION session = {0}; - - UNREFERENCED_PARAMETER(streamEditor); - - session.flags = FWPM_SESSION_FLAG_DYNAMIC; - - status = FwpmEngineOpen( - NULL, - RPC_C_AUTHN_WINNT, - NULL, - &session, - &gEngineHandle - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - engineOpened = TRUE; - - status = FwpmTransactionBegin(gEngineHandle, 0); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - inTransaction = TRUE; - - status = RegisterCalloutForLayer( - &FWPM_LAYER_STREAM_V4, - &STREAM_EDITOR_STREAM_CALLOUT_V4, - deviceObject, - &gCalloutIdV4 - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - status = RegisterCalloutForLayer( - &FWPM_LAYER_STREAM_V6, - &STREAM_EDITOR_STREAM_CALLOUT_V6, - deviceObject, - &gCalloutIdV6 - ); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - status = FwpmTransactionCommit(gEngineHandle); - if (!NT_SUCCESS(status)) - { - goto Exit; - } - inTransaction = FALSE; - -Exit: - - if (!NT_SUCCESS(status)) - { - if (inTransaction) - { - NTSTATUS abortStatus; - abortStatus = FwpmTransactionAbort(gEngineHandle); - _Analysis_assume_(NT_SUCCESS(abortStatus)); - } - if (engineOpened) - { - FwpmEngineClose(gEngineHandle); - gEngineHandle = NULL; - } - } - - return status; -} - -void -StreamEditUnregisterCallout(void) -{ - FwpmEngineClose(gEngineHandle); - gEngineHandle = NULL; - - FwpsCalloutUnregisterById(gCalloutIdV6); - FwpsCalloutUnregisterById(gCalloutIdV4); -} - -_Function_class_(EVT_WDF_DRIVER_UNLOAD) -_IRQL_requires_same_ -_IRQL_requires_max_(PASSIVE_LEVEL) -void -StreamEditEvtDriverUnload( - _In_ WDFDRIVER driverObject - ) -{ - - UNREFERENCED_PARAMETER(driverObject); - - if (!configEditInline) - { - OobEditShutdown(&gStreamEditor); - } - - if (gStreamEditor.scratchBuffer != NULL) - { - ExFreePoolWithTag( - gStreamEditor.scratchBuffer, - STREAM_EDITOR_FLAT_BUFFER_TAG - ); - - } - - StreamEditUnregisterCallout(); - - FwpsInjectionHandleDestroy(gInjectionHandle); - - NdisFreeNetBufferListPool(gNetBufferListPool); - NdisFreeGenericObject(gNdisGenericObj); - - IoFreeMdl(gStringToReplaceMdl); -} - -NTSTATUS -StreamEditLoadConfig( - const WDFKEY key - ) -{ - NTSTATUS status = STATUS_SUCCESS; - DECLARE_CONST_UNICODE_STRING(stringToFindKey, L"StringToFind"); - DECLARE_CONST_UNICODE_STRING(stringToReplaceKey, L"StringToReplace"); - DECLARE_CONST_UNICODE_STRING(inspectionPortKey, L"InspectionPort"); - DECLARE_CONST_UNICODE_STRING(editInlineKey, L"EditInline"); - DECLARE_CONST_UNICODE_STRING(inspectOutboundKey, L"InspectOutbound"); - - UNICODE_STRING stringValue; - WCHAR buffer[128]; - USHORT requiredSize; - ULONG valueSize; - ULONG ulongValue; - - stringValue.Buffer = buffer; - stringValue.Length = 0; - stringValue.MaximumLength = sizeof(buffer) - sizeof(buffer[0]); - - if (NT_SUCCESS( - WdfRegistryQueryUnicodeString( - key, - &stringToFindKey, - &requiredSize, - &stringValue - ))) - { - stringValue.Buffer[stringValue.Length/sizeof(stringValue.Buffer[0])] = - UNICODE_NULL; - - status = RtlUnicodeToMultiByteN( - configStringToFind, - sizeof(configStringToFind) - 1, - &valueSize, - stringValue.Buffer, - (ULONG)requiredSize - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - configStringToFind[valueSize] = '\0'; - } - - if (NT_SUCCESS( - WdfRegistryQueryUnicodeString( - key, - &stringToReplaceKey, - &requiredSize, - &stringValue - ))) - { - status = RtlUnicodeToMultiByteN( - configStringToReplace, - sizeof(configStringToReplace) - 1, - &valueSize, - stringValue.Buffer, - (ULONG)requiredSize - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - configStringToReplace[valueSize] = '\0'; - } - - if (NT_SUCCESS( - WdfRegistryQueryULong( - key, - &inspectionPortKey, - &ulongValue - ))) - { - configInspectionPort = (USHORT) ulongValue; - } - - if (NT_SUCCESS( - WdfRegistryQueryULong( - key, - &editInlineKey, - &ulongValue - ))) - { - configEditInline = (ulongValue != 0); - } - - if (NT_SUCCESS( - WdfRegistryQueryULong( - key, - &inspectOutboundKey, - &ulongValue - ))) - { - configInspectionOutbound = (ulongValue != 0); - } - -Exit: - return status; -} - -NTSTATUS -StreamEditInitDriverObjects( - _Inout_ DRIVER_OBJECT* driverObject, - const UNICODE_STRING* registryPath, - _Out_ WDFDRIVER* pDriver, - _Out_ WDFDEVICE* pDevice - ) -{ - NTSTATUS status; - WDF_DRIVER_CONFIG config; - PWDFDEVICE_INIT pInit = NULL; - - WDF_DRIVER_CONFIG_INIT(&config, WDF_NO_EVENT_CALLBACK); - - config.DriverInitFlags |= WdfDriverInitNonPnpDriver; - config.EvtDriverUnload = StreamEditEvtDriverUnload; - - status = WdfDriverCreate( - driverObject, - registryPath, - WDF_NO_OBJECT_ATTRIBUTES, - &config, - pDriver - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - pInit = WdfControlDeviceInitAllocate(*pDriver, &SDDL_DEVOBJ_KERNEL_ONLY); - - if (!pInit) - { - status = STATUS_INSUFFICIENT_RESOURCES; - goto Exit; - } - - WdfDeviceInitSetCharacteristics(pInit, FILE_AUTOGENERATED_DEVICE_NAME, TRUE); - WdfDeviceInitSetDeviceType(pInit, FILE_DEVICE_NETWORK); - WdfDeviceInitSetCharacteristics(pInit, FILE_DEVICE_SECURE_OPEN, TRUE); - status = WdfDeviceCreate(&pInit, WDF_NO_OBJECT_ATTRIBUTES, pDevice); - - if (!NT_SUCCESS(status)) - { - WdfDeviceInitFree(pInit); - goto Exit; - } - - WdfControlFinishInitializing(*pDevice); - -Exit: - return status; -} - -NTSTATUS -DriverEntry( - DRIVER_OBJECT* driverObject, - UNICODE_STRING* registryPath - ) -{ - NTSTATUS status; - WDFDEVICE device; - WDFDRIVER driver; - WDFKEY configKey; - NET_BUFFER_LIST_POOL_PARAMETERS nblPoolParams = {0}; - - // Request NX Non-Paged Pool when available - ExInitializeDriverRuntime(DrvRtPoolNxOptIn); - - status = StreamEditInitDriverObjects( - driverObject, - registryPath, - &driver, - &device - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - status = WdfDriverOpenParametersRegistryKey( - driver, - KEY_READ, - WDF_NO_OBJECT_ATTRIBUTES, - &configKey - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - status = StreamEditLoadConfig(configKey); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - gStringToReplaceMdl = IoAllocateMdl( - configStringToReplace, - (ULONG) strlen(configStringToReplace), - FALSE, - FALSE, - NULL - ); - if (gStringToReplaceMdl == NULL) - { - status = STATUS_NO_MEMORY; - goto Exit; - } - - MmBuildMdlForNonPagedPool(gStringToReplaceMdl); - - gNdisGenericObj = NdisAllocateGenericObject( - driverObject, - STREAM_EDITOR_NDIS_OBJ_TAG, - 0 - ); - - if (gNdisGenericObj == NULL) - { - status = STATUS_NO_MEMORY; - goto Exit; - } - - nblPoolParams.Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - nblPoolParams.Header.Revision = NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1; - nblPoolParams.Header.Size = sizeof(nblPoolParams); - - nblPoolParams.fAllocateNetBuffer = TRUE; - nblPoolParams.DataSize = 0; - - nblPoolParams.PoolTag = STREAM_EDITOR_NBL_POOL_TAG; - - gNetBufferListPool = NdisAllocateNetBufferListPool( - gNdisGenericObj, - &nblPoolParams - ); - - if (gNetBufferListPool == NULL) - { - status = STATUS_NO_MEMORY; - goto Exit; - } - - status = FwpsInjectionHandleCreate( - AF_UNSPEC, - FWPS_INJECTION_TYPE_STREAM, - &gInjectionHandle - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - gWdmDevice = WdfDeviceWdmGetDeviceObject(device); - - status = StreamEditRegisterCallout( - &gStreamEditor, - gWdmDevice - ); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - - if (configEditInline) - { - InlineEditInit(&gStreamEditor); - } - else - { - - status = OobEditInit(&gStreamEditor); - - if (!NT_SUCCESS(status)) - { - goto Exit; - } - } - -Exit: - - if (!NT_SUCCESS(status)) - { - if (gEngineHandle != NULL) - { - StreamEditUnregisterCallout(); - } - if (gInjectionHandle != NULL) - { - FwpsInjectionHandleDestroy(gInjectionHandle); - } - if (gNetBufferListPool != NULL) - { - NdisFreeNetBufferListPool(gNetBufferListPool); - } - if (gNdisGenericObj != NULL) - { - NdisFreeGenericObject(gNdisGenericObj); - } - if (gStringToReplaceMdl != NULL) - { - IoFreeMdl(gStringToReplaceMdl); - } - } - - return status; -} - -BOOLEAN -StreamCopyDataForInspection( - _Inout_ STREAM_EDITOR* streamEditor, - const FWPS_STREAM_DATA* streamData - ) -/* ++ - - This function copies stream data described by the FWPS_STREAM_DATA - structure into a flat buffer. - --- */ - -{ - SIZE_T bytesCopied; - - size_t existingDataLength = streamEditor->dataLength; - NT_ASSERT(streamEditor->dataOffset == 0); - if (streamEditor->bufferSize - existingDataLength < streamData->dataLength) - { - size_t newBufferSize = (streamData->dataLength + existingDataLength) * 2; - void* newBuffer = ExAllocatePoolWithTag( - NonPagedPool, - newBufferSize, - STREAM_EDITOR_FLAT_BUFFER_TAG - ); - - if (newBuffer != NULL) - { - if (existingDataLength > 0) - { - NT_ASSERT(streamEditor->scratchBuffer != NULL); - RtlCopyMemory( - newBuffer, - streamEditor->scratchBuffer, - existingDataLength - ); - } - } - - if (streamEditor->scratchBuffer != NULL) - { - ExFreePoolWithTag( - streamEditor->scratchBuffer, - STREAM_EDITOR_FLAT_BUFFER_TAG - ); - - streamEditor->scratchBuffer = NULL; - streamEditor->bufferSize = 0; - streamEditor->dataLength = 0; - } - - if (newBuffer != NULL) - { - streamEditor->scratchBuffer = newBuffer; - streamEditor->bufferSize = newBufferSize; - streamEditor->dataLength = existingDataLength; - } - else - { - return FALSE; - } - } - - FwpsCopyStreamDataToBuffer( - streamData, - (BYTE*)streamEditor->scratchBuffer + streamEditor->dataLength, - streamData->dataLength, - &bytesCopied - ); - - NT_ASSERT(bytesCopied == streamData->dataLength); - - streamEditor->dataLength += bytesCopied; - - return TRUE; -} diff --git a/network/trans/stmedit/sys/stream_callout.h b/network/trans/stmedit/sys/stream_callout.h deleted file mode 100644 index 7fff047f..00000000 --- a/network/trans/stmedit/sys/stream_callout.h +++ /dev/null @@ -1,79 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved - -Abstract: - - Stream Edit Callout Driver Sample. - - This sample demonstrates finding and replacing a string pattern from a - live TCP stream via the WFP stream API. - ---*/ - -#ifndef _STREAM_CALLOUT_H -#define _STREAM_CALLOUT_H - -extern MDL* gStringToReplaceMdl; -extern HANDLE gInjectionHandle; -extern NDIS_HANDLE gNetBufferListPool; -extern STREAM_EDITOR gStreamEditor; - -// -// Configurable parameters -// - -extern USHORT configInspectionPort; -extern BOOLEAN configInspectionOutbound; -extern BOOLEAN configEditInline; - -extern CHAR configStringToFind[]; -extern CHAR configStringToReplace[]; - -#pragma warning(push) -#pragma warning(disable:4201) // unnamed struct/union - -typedef struct STREAM_EDITOR_ -{ - BOOLEAN editInline; - - union - { - INLINE_EDIT_STATE inlineEditState; - struct - { - OOB_EDIT_STATE editState; - BOOLEAN shuttingDown; - - KSPIN_LOCK editLock; - NET_BUFFER_LIST* nblHead; - NET_BUFFER_LIST* nblTail; - size_t totalDataLength; - BOOLEAN noMoreData; - NET_BUFFER_LIST* nblEof; - size_t busyThreshold; - UINT64 flowId; - UINT32 calloutId; - UINT16 layerId; - DWORD streamFlags; - KEVENT editEvent; - LIST_ENTRY outgoingDataQueue; - } oobEditInfo; - }; - - void* scratchBuffer; - size_t bufferSize; - size_t dataOffset; - size_t dataLength; - -}STREAM_EDITOR; - -#pragma warning(pop) - -BOOLEAN -StreamCopyDataForInspection( - _Inout_ STREAM_EDITOR* streamEditor, - const FWPS_STREAM_DATA* streamData - ); - -#endif // _STREAM_CALLOUT_H diff --git a/network/wlan/Native Wifi IHV Service/README.md b/network/wlan/Native Wifi IHV Service/README.md deleted file mode 100644 index a90b2a5b..00000000 --- a/network/wlan/Native Wifi IHV Service/README.md +++ /dev/null @@ -1,91 +0,0 @@ -Native Wifi IHV Service -======================= - -This sample code demonstrates IHV extensibility for Native WiFi. - -In particular, this sample contains the following features: - -- IHV profile validation -- IHV discovery profile creation -- IHV extension for interactive UI and Profile UI -- 802.1x extension - -The sample, after you compile and install it, enables you to connect to an Open WEP Network by using 802.1X through IHV Service extension. - -Run the sample --------------- - -The fully compiled sample consists of two DLLs: IHVSample.dll and IHVSampleUI.dll. The functions of those DLLs are outlined below: - -### IHVSample.dll - -The IHVSample DLL supports connecting to a wireless network by using Open authentication and WEP encryption. The sample is capable of connecting to an 802.1X network and a non-802.1X network. - -During the discovery phase, the sample generates a temporary profile that the operating system uses to establish a wireless connection. The operating system requests that the IHV provide a temporary profile to use when trying to connect through Discovery. In this case, IHVSample returns a list of usable profiles for connecting by using open-WEP with and without 802.1X. The RC4 algorithm is implemented in a DLL that is provided as part of the sample. - -The sample is loaded by the IHV process and uses the public interfaces that are provided by the same process. The IHV process host initializes IHVSample in its process. - -The sample gets called to perform pre-associate security and post-associate security. The sample does not implement any of the pre-associate security. For the post-associate security, in the case of open-WEP without 802.1X, IHVSample prompts for UI in case the profile does not exist or does not already have a valid key. In the case of 802.1X networks, the post-associate security portion sets the driver packet exemptions, starts up the Microsoft 802.1X module authentication, and waits for the result that indicates a success or a failure. During this period, IHVSample forwards all 802.1X packets to the IHV process. However, it caches the EAPOL key packets. In either case, after the key is obtained, IHVSample sends it to the driver and establishes the connection. - -The operating system validates network profiles before they can be applied and persisted. The operating system performs validation of the non-IHV portion of the profile and passes the rest of data to IHVSample if IHV settings exist. IHVSample does limited XML schema validation. - -### UI Sample (IHVSampleUI.dll) - -The IHVSampleUI DLL extends the Wireless Profile UI to display IHV connectivity and security information. The security information that is displayed is for both security types based on IHV proprietary security and those based on Microsoft 802.1X. The sample adds custom IHV authentication and encryption types to illustrate the different ways the various types can be embedded in the UI. The configuration UI saves the IHV portion of the profile in accordance with the IHV schema. The sample pages that enable modification of the IHV parameters are displayed from the configuration UI. The sample also displays a wizard-based connection time UI with three sample pages. This connection time UI integrates in both the wizard and non-wizard flows. - -Installation ------------- - -After the sample is compiled, you must copy the binaries on to the target system and associate them with the matching Native Wifi-capable adapter. You can copy the binaries by adding an appropriate **CopyFiles** directive in the **DDInstall** section in the INF file for installing the adapter. You can associate the binaries by adding an appropriate **AddReg** directive in the **DDInstall** section in the INF file for installing the adapter. - -### CopyFiles Directive - -The CopyFiles Directive should name a File-List-Section. The contents of this section should have the following: - -IHVSpecifiedDLLName,,,2 - -IHVSpecifiedOtherFile,,,2 - -There should be an associated entry in the DestinationDirs section that specifies the destination to copy the file to. This section should have a directive like one of the following: - -File-List-Section= 11 ; \\system32 directory - -DefaultDestDir= 11 ; \\system32 directory - -### AddReg Directive - -The AddReg directive should name an Add-Registry-Section. - -The contents of the Miniport INF file must include the following, in order for the correct IHV Service to be started: - -- HKR,Ndi\\IHVExtensions, ExtensibilityDLL,0,"%SystemRoot%\\system32\\IhvExt.dll" - - This registry key is used to determine the location of the IHVSample.dll. - -- HKR,Ndi\\IHVExtensions,UIExtensibilityCLSID,0, "\" - - This registry key is used to determine the class ID of the COM interface that extends the 802.11 configuration UI. - -- HKR,Ndi\\IHVExtensions,GroupName,0, "IHV provided group name" -- HKR,Ndi\\IHVExtensions, AdapterOUI, 0x00010001, 0x00123456 - - This registry key is used to verify the OUI when the profile is applied to the adapter. If the AdapterOUI value is 0x??123456 in the registry, it needs to look like the following in the profile: - - \ - - \123456\ - - \??\ - - \ - - Note that ?? stands for bits ignored. - -- HKR,Ndi\\IHVExtensions, DiagnosticsID,0, "\" - -### Uninstallation Instructions - -To uninstall this sample, you must undo the AddReg directive and undo the CopyFiles directive. - -For more information about creating a Native Wi-Fi package, see [Native 802.11 Wireless LAN](http://msdn.microsoft.com/en-us/library/windows/hardware/ff560690). - diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.dll b/network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.dll deleted file mode 100644 index 9cc3e82f..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.dll and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.lib b/network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.lib deleted file mode 100644 index 3c1aad8b..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/arm/rc4utils.lib and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.dll b/network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.dll deleted file mode 100644 index a4d1429a..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.dll and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.lib b/network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.lib deleted file mode 100644 index 10972b9b..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/arm64/rc4utils.lib and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.dll b/network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.dll deleted file mode 100644 index a5a8228f..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.dll and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.lib b/network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.lib deleted file mode 100644 index 15b4d299..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/x64/rc4utils.lib and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.dll b/network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.dll deleted file mode 100644 index aebeab23..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.dll and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.lib b/network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.lib deleted file mode 100644 index 4de2c174..00000000 Binary files a/network/wlan/Native Wifi IHV Service/ihvfrm/x86/rc4utils.lib and /dev/null differ diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/adapters.cpp b/network/wlan/Native Wifi IHV Service/ihvsample/adapters.cpp deleted file mode 100644 index 919e47a6..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/adapters.cpp +++ /dev/null @@ -1,439 +0,0 @@ -/*++ - -Copyright (c) 2005 Microsoft Corporation - -Abstract: - - Sample IHV Extensibility DLL to extend - 802.11 LWF driver for third party protocols. - - ---*/ - -#include "precomp.h" - -LIST_ENTRY g_AdaptersList = {0}; - - - -// -// Copied Macros from wdm.h -// - -#define CONTAINING_RECORD(address, type, field) ((type *)( \ - (PCHAR)(address) - \ - (ULONG_PTR)(&((type *)0)->field))) - - -#define InitializeListHead(ListHead) (\ - (ListHead)->Flink = (ListHead)->Blink = (ListHead)) - - - -#define RemoveEntryList(Entry) {\ - PLIST_ENTRY _EX_Blink;\ - PLIST_ENTRY _EX_Flink;\ - _EX_Flink = (Entry)->Flink;\ - _EX_Blink = (Entry)->Blink;\ - _EX_Blink->Flink = _EX_Flink;\ - _EX_Flink->Blink = _EX_Blink;\ - } - - -#define InsertTailList(ListHead,Entry) {\ - PLIST_ENTRY _EX_Blink;\ - PLIST_ENTRY _EX_ListHead;\ - _EX_ListHead = (ListHead);\ - _EX_Blink = _EX_ListHead->Blink;\ - (Entry)->Flink = _EX_ListHead;\ - (Entry)->Blink = _EX_Blink;\ - _EX_Blink->Flink = (Entry);\ - _EX_ListHead->Blink = (Entry);\ - } - - - - -// -// Initialize the AdapterList data structure. -// -VOID -InitAdapterDetailsList -( - VOID -) -{ - EnterCriticalSection( &g_csSynch ); - - // Assuming that memory in g_AdaptersList - // could be garbage - just initialize the - // fields appropriately. - - InitializeListHead( &g_AdaptersList ); - - LeaveCriticalSection( &g_csSynch ); - - return; -} - - - - -// -// Free the AdapterList data structure - contention is not supported. -// -VOID -DeinitAdapterDetailsList -( - VOID -) -{ - EnterCriticalSection( &g_csSynch ); - - // ASSERT that the list is empty. The call - // to InitializeListHead is not really required - // if the following conditions are true. - ASSERT(g_AdaptersList.Flink == &g_AdaptersList ); - ASSERT(g_AdaptersList.Blink == &g_AdaptersList ); - - // clear the memory any way. - InitializeListHead( &g_AdaptersList ); - - LeaveCriticalSection( &g_csSynch ); - - return; -} - - - - - -// -// Add a single adapter to the list. Starting refcount is one. -// -DWORD -InitAdapterDetails -( - HANDLE hDot11SvcHandle, - PHANDLE phIhvExtAdapter -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - HANDLE hIhvExtAdapter = NULL; - - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // verify state. this check prevents new adapters from - // being added when service is being deinited. - if (!g_bAllowInit) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // allocate memory. - pAdapterDetails = (PADAPTER_DETAILS) PrivateMemoryAlloc( sizeof( ADAPTER_DETAILS ) ); - if ( !pAdapterDetails ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // add the new object to the list. if anything fails - // in this function the object would be automatically - // dereferenced and removed from the list. - InsertTailList( &g_AdaptersList, &(pAdapterDetails->Link) ); - - // initialize fields that are used by object lifetime management. - hIhvExtAdapter = (HANDLE) &(pAdapterDetails->Link); - pAdapterDetails->dwRefCount = 1; - pAdapterDetails->hDot11SvcHandle = hDot11SvcHandle; - pAdapterDetails->NicState = nic_state_initialized; - - - // Event that gets triggered - // once UI response is received. - pAdapterDetails->hUIResponse = - CreateEvent - ( - NULL, - FALSE, // Auto Reset - FALSE, // Start in non-signaled state. - NULL - ); - if ( !(pAdapterDetails->hUIResponse) ) - { - dwResult = GetLastError( ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - - - // fill out-params. release responsibility to - // for deiniting object to caller. - (*phIhvExtAdapter) = hIhvExtAdapter; - hIhvExtAdapter = NULL; - -error: - if ( hIhvExtAdapter ) - { - // something failed after adding the object to - // the global list. so it needs to be removed. - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - // leave global lock. - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - - -// -// Add a reference to a particular adapter and find the pointer to the context. -// -DWORD -ReferenceAdapterDetails -( - HANDLE hIhvExtAdapter, - PADAPTER_DETAILS* ppAdapterDetails -) -{ - DWORD dwResult = ERROR_NOT_FOUND; - BOOL bLocked = FALSE; - PLIST_ENTRY pEntry = NULL; - PADAPTER_DETAILS pAdapterDetails = NULL; - - ASSERT( ppAdapterDetails ); - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - - // search the global list of adapters for a match. - for - ( - pEntry = g_AdaptersList.Flink; - pEntry != &g_AdaptersList; - pEntry = pEntry->Flink - ) - { - // Get the adapter data structure for current entry. - pAdapterDetails = CONTAINING_RECORD( pEntry, ADAPTER_DETAILS, Link ); - ASSERT( pAdapterDetails ); - - // conditions could be converted to an ASSERT. - if - ( - ( pAdapterDetails->NicState == nic_state_uninitialized ) || - ( pAdapterDetails->NicState >= nic_state_max ) - ) - { - ASSERTFAILURE(); - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // if match found - bail with success. - if ( hIhvExtAdapter == ((HANDLE) pEntry) ) - { - (pAdapterDetails->dwRefCount)++; - (*ppAdapterDetails) = pAdapterDetails; - - dwResult = ERROR_SUCCESS; - BAIL( ); - } - } - -error: - if ( bLocked ) - { - // release global lock. - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - -// -// Find adapter context pointer using UI request GUID. -// -DWORD -ReferenceAdapterDetailsByUIRequestGuid -( - GUID* pguidUIRequest, - PADAPTER_DETAILS* ppAdapterDetails, - HANDLE* phIhvExtAdapter -) -{ - DWORD dwResult = ERROR_NOT_FOUND; - BOOL bLocked = FALSE; - PLIST_ENTRY pEntry = NULL; - PADAPTER_DETAILS pAdapterDetails = NULL; - - ASSERT( ppAdapterDetails ); - ASSERT( phIhvExtAdapter ); - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // look for adapter with matching ui request guid in the global list. - for - ( - pEntry = g_AdaptersList.Flink; - pEntry != &g_AdaptersList; - pEntry = pEntry->Flink - ) - { - // get the current adapter's context info. - pAdapterDetails = CONTAINING_RECORD( pEntry, ADAPTER_DETAILS, Link ); - ASSERT( pAdapterDetails ); - - // could be an ASSERT. - if - ( - ( pAdapterDetails->NicState == nic_state_uninitialized ) || - ( pAdapterDetails->NicState >= nic_state_max ) - ) - { - ASSERTFAILURE(); - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // if match found, bail with success. - if ( pAdapterDetails->currentGuidUIRequest == (*pguidUIRequest) ) - { - (pAdapterDetails->dwRefCount)++; - (*ppAdapterDetails) = pAdapterDetails; - (*phIhvExtAdapter) = (HANDLE) pEntry; - - dwResult = ERROR_SUCCESS; - BAIL( ); - } - } - -error: - if ( bLocked ) - { - // leave global lock. - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - - -// -// Dereference an adapter - resources will be freed when the refcount -// goes to zero. -// -VOID -DerefenceAdapterDetails -( - HANDLE hIhvExtAdapter -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - BOOL bOk = TRUE; - - - // acquire global lock. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // trying to reference the adapter. the part of the - // code that increments the refcount is not useful - // here, we are only using the algorithm to find - // the context pointer. the refcount would be decremented - // after the function call if the call succeeds. - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - ASSERT( pAdapterDetails ); - - // Undoing the refcount increment in the previous call. - (pAdapterDetails->dwRefCount)--; - - // could be an ASSERT - the adapter - // context should not be in this state. - if ( 0 == pAdapterDetails->dwRefCount ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // performing the intended dereferencing. - (pAdapterDetails->dwRefCount)--; - - // checking if the adapter entry can go. - if ( pAdapterDetails->dwRefCount ) - { - BAIL( ); - } - - // Since this was the last reference, - // it is time to deinitialize the memory. - - // remove the adapter from the global list. - RemoveEntryList( &(pAdapterDetails->Link) ); - - // Close handle to the UI response event. - if ( pAdapterDetails->hUIResponse ) - { - bOk = CloseHandle( pAdapterDetails->hUIResponse ); - ASSERT( bOk ); - } - - // free the UI response memory. - if ( pAdapterDetails->pbResponse ) - { - PrivateMemoryFree( pAdapterDetails->pbResponse ); - pAdapterDetails->pbResponse = NULL; - } - - // frees the connection specific data in the adapter data structure. - FreeOnexData( &(pAdapterDetails->pOnexData) ); - - // frees the profiles. - FreeIhvConnectivityProfile( &(pAdapterDetails->pConnectivityProfile) ); - FreeIhvSecurityProfile( &(pAdapterDetails->pSecurityProfile) ); - - // frees the context. - SecureZeroMemory( pAdapterDetails, sizeof( ADAPTER_DETAILS ) ); - PrivateMemoryFree( pAdapterDetails ); - -error: - if ( bLocked ) - { - // release global lock. - LeaveCriticalSection( &g_csSynch ); - } - ASSERT( ERROR_SUCCESS == dwResult ); - return; -} - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/adapters.h b/network/wlan/Native Wifi IHV Service/ihvsample/adapters.h deleted file mode 100644 index ad0f9779..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/adapters.h +++ /dev/null @@ -1,125 +0,0 @@ - - - -// -// Different states of current NIC. -// -typedef -enum _NIC_STATE -{ - nic_state_uninitialized, - nic_state_initialized, - nic_state_pre_assoc_started, - nic_state_pre_assoc_ended, - nic_state_post_assoc_started, - nic_state_onex_in_progress, - nic_state_post_assoc_ended, - - nic_state_max // should be the last one. -} -NIC_STATE, *PNIC_STATE; - - -////////////////////////////////// -// Adapter lifetime management // -////////////////////////////////// - -// -// Adapter Data Structure -// - -struct _ADAPTER_DETAILS -{ - // Adapter list and lifetime management. - LIST_ENTRY Link; - DWORD dwRefCount; - NIC_STATE NicState; - - - // Framework reference. - HANDLE hDot11SvcHandle; - - // Handler functions for different stages of connection. - LPTHREAD_START_ROUTINE pPerformPostAssociateCompletionRoutine; - POST_ASSOCIATE_FUNCTION pPerformPostAssociateRoutine; - STOP_POST_ASSOCIATE_FUNCTION pStopPostAssociateRoutine; - - - // Data for current connection. - HANDLE hConnectSession; - BOOL bModifyCurrentProfile; - PONEX_DATA pOnexData; - GUID currentGuidUIRequest; - DWORD dwResponseLen; - _Field_size_bytes_(dwResponseLen) BYTE* pbResponse; - HANDLE hUIResponse; - PIHV_CONNECTIVITY_PROFILE pConnectivityProfile; - PIHV_SECURITY_PROFILE pSecurityProfile; -}; - - - -// -// Initialize the AdapterList data structure. -// -VOID -InitAdapterDetailsList -( - VOID -); - - -// -// Free the AdapterList data structure - contention is not supported. -// -VOID -DeinitAdapterDetailsList -( - VOID -); - -// -// Add a single adapter to the list. Starting refcount is one. -// -DWORD -InitAdapterDetails -( - HANDLE hDot11SvcHandle, - PHANDLE phIhvExtAdapter -); - - -// -// Add a reference to a particular adapter and find the pointer to the context. -// -DWORD -ReferenceAdapterDetails -( - HANDLE hIhvExtAdapter, - PADAPTER_DETAILS* ppAdapterDetails -); - - -// -// Find adapter context pointer using UI request GUID. -// -DWORD -ReferenceAdapterDetailsByUIRequestGuid -( - GUID* pguidUIRequest, - PADAPTER_DETAILS* ppAdapterDetails, - HANDLE* phIhvExtAdapter -); - - - -// -// Dereference an adapter - resources will be freed when the refcount -// goes to zero. -// -VOID -DerefenceAdapterDetails -( - HANDLE hIhvExtAdapter -); - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihv1xext.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihv1xext.xml deleted file mode 100644 index 77ae471f..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihv1xext.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - ihv1xext - - - _1x_SSID_ - - false - - ESS - manual - false - - - - - - - 25 - 0 - 0 - 0 - - - - - - - - - - 123456 - 01 - - - - 0 - - - - - - FALSE - IHVAuthV1 - IHVCipher1 - 0 - - - - true - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvconn.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvconn.xml deleted file mode 100644 index 0bb09694..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvconn.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - ihvconn - - - - _SSID_ - - - - ESS - manual - - - - - - - - open - WEP - - - - - - - - - 123456 - 01 - - - - - - 0 - - wrongkey - - - - - - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvmachine.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvmachine.xml deleted file mode 100644 index 04b7ba21..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvmachine.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - ihvmachine - - - _1x_SSID_ - - false - - ESS - manual - false - - - - open - WEP - true - - - 3 - - - machine - - - - - 25 - 0 - 0 - 0 - - - - - - - - - - 123456 - 01 - - - - 0 - - - - - - FALSE - IHVAuthV1 - IHVCipher1 - 0 - - - - true - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.cpp b/network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.cpp deleted file mode 100644 index 8e80ab8a..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.cpp +++ /dev/null @@ -1,1113 +0,0 @@ - -/*++ - -Copyright (c) 2005 Microsoft Corporation - -Abstract: - - Sample IHV Extensibility DLL to extend - 802.11 LWF driver for third party protocols. - - ---*/ - -#include "precomp.h" - - - - - -#define MAX_BACKLOG 32 -#define MAX_EXEMPTIONS 1 -#define MAX_REGISTRATIONS 2 -#define ETHTYPE_EAPOL 0x888e -#define EapolTypeEapolKey 0x03 - - -DWORD -PlumbWEPKey -( - HANDLE hDot11SvcHandle, - ULONG uKeyIndex, - DOT11_DIRECTION direction, - LPBYTE pbKey, - ULONG uKeyLen -); - - -DWORD -ProcessRC4Key -( - HANDLE hIhvExtAdapter, - PDOT11_MSONEX_RESULT_PARAMS pOneXResultParams, - HANDLE hDot11SvcHandle, - HANDLE hSecuritySessionID, - ULONG uPktLen, - PBYTE pbEapolPkt -); - - - -// initialize onex data structure. -DWORD -GetNewOnexData -( - PONEX_DATA* ppOnexData -) -{ - DWORD dwResult = ERROR_SUCCESS; - PONEX_DATA pOnexData = NULL; - - ASSERT( ppOnexData ); - - if (*ppOnexData) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // allocate memory. - pOnexData = (PONEX_DATA) PrivateMemoryAlloc( sizeof( ONEX_DATA ) ); - if (!pOnexData) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // init fields here. - pOnexData->lpfnReceivePacket = Do1xReceivePacket; - pOnexData->lpfnIndicateResult = Do1xIndicateResult; - - // transfer data to caller. - (*ppOnexData) = pOnexData; - pOnexData = NULL; - -error: - if ( pOnexData ) - { - FreeOnexData( &pOnexData ); - } - return dwResult; -} - - - - -// free onex data structure. -VOID -FreeOnexData -( - PONEX_DATA* ppOnexData -) -{ - PONEX_DATA pOnexData = NULL; - - if ( ppOnexData && (*ppOnexData) ) - { - // Freeing caller's variable. - pOnexData = (*ppOnexData); - (*ppOnexData) = NULL; - - RC4UtilsFreeResultParams( &(pOnexData->pOnexResultParams) ); - ZeroMemory( pOnexData , sizeof( ONEX_DATA ) ); - PrivateMemoryFree( pOnexData ); - } -} - - -// verify if result params are available and valid. -BOOL -IsOneXResultParamsAvailable -( - PDOT11_MSONEX_RESULT_PARAMS pOneXResultParams -) -{ - BOOL bResult = FALSE; - - - bResult = - ( - pOneXResultParams && - pOneXResultParams->pbMPPERecvKey && - pOneXResultParams->dwMPPERecvKeyLen && - pOneXResultParams->pbMPPESendKey && - pOneXResultParams->dwMPPESendKeyLen - ); - - TRACE_MESSAGE_VAL( "Onex Result Params Available = ", bResult ); - - return bResult; -} - - -// free rc4 packet. -VOID -FreeRC4Pkt -( - PCACHED_PKT pPkt -) -{ - if ( pPkt ) - { - PrivateMemoryFree( pPkt->pbPkt ); - pPkt->pbPkt = NULL; - pPkt->uPktLen = 0; - } -} - -// flush rc4 packet cache. -VOID -FlushRC4PktCache -( - PONEX_DATA pOnexData -) -{ - ULONG i = 0; - - ASSERT( pOnexData ); - - for (i = 0; i< RC4_CACHE_SIZE; i++) - { - FreeRC4Pkt( &(pOnexData->RC4Cache[i]) ); - } -} - - -// cache rc4 packet -DWORD -CacheRC4Pkt -( - PONEX_DATA pOnexData, - ULONG uPktLen, - PBYTE pbEapolPkt -) -{ - DWORD dwResult = ERROR_SUCCESS; - PBYTE pbPktCopy = NULL; - - if ( !(pOnexData && uPktLen && pbEapolPkt) ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // copy the packet. - pbPktCopy = (PBYTE) PrivateMemoryAlloc(uPktLen); - if (!pbPktCopy) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - CopyMemory - ( - pbPktCopy, - pbEapolPkt, - uPktLen - ); - - // free packet destination. - FreeRC4Pkt( &(pOnexData->RC4Cache[pOnexData->uCacheFreeIdx]) ); - - // move packet copy to cache. - pOnexData->RC4Cache[ pOnexData->uCacheFreeIdx ].pbPkt = pbPktCopy; - pOnexData->RC4Cache[ pOnexData->uCacheFreeIdx ].uPktLen = uPktLen; - - - TRACE_MESSAGE_VAL( "RC4 Packet cached, Index = ", pOnexData->uCacheFreeIdx ); - - // increment index. - pOnexData->uCacheFreeIdx = (pOnexData->uCacheFreeIdx + 1 ) % RC4_CACHE_SIZE; - -error: - return dwResult; -} - -// process cached rc4 packets. -DWORD -ProcessCachedRC4Packets -( - PADAPTER_DETAILS pAdapterDetails -) -{ - DWORD dwResult = ERROR_SUCCESS; - ULONG ulIndex = 0; - ULONG uProcessIndex = 0; - PONEX_DATA pOnexData = NULL; - - ASSERT( pAdapterDetails ); - ASSERT( pAdapterDetails->pOnexData ); - - pOnexData = pAdapterDetails->pOnexData; - - // If no 1x result available, bail - if (!IsOneXResultParamsAvailable( pOnexData->pOnexResultParams )) - { - dwResult = ERROR_SUCCESS; - BAIL( ); - } - - TRACE_MESSAGE( "Processing cached RC4 packets." ); - - // We process last 2 received frames - - for ( ulIndex = 1; ulIndex <= RC4_CACHE_SIZE; ulIndex++ ) - { - uProcessIndex = ( pOnexData->uCacheFreeIdx - ulIndex) % RC4_CACHE_SIZE; - - if - ( - ( pOnexData->RC4Cache[uProcessIndex].pbPkt ) && - ( pOnexData->RC4Cache[uProcessIndex].uPktLen ) - ) - { - dwResult = - ProcessRC4Key - ( - (HANDLE) &(pAdapterDetails->Link), - pOnexData->pOnexResultParams, - pAdapterDetails->hDot11SvcHandle, - pOnexData->hSecuritySessionID, - pOnexData->RC4Cache[uProcessIndex].uPktLen, - pOnexData->RC4Cache[uProcessIndex].pbPkt - ); - BAIL_ON_WIN32_ERROR(dwResult); - - FreeRC4Pkt( &(pOnexData->RC4Cache[uProcessIndex]) ); - - } - } - -error: - return dwResult; -} - - - - - -// pre-associate function for onex profile. -DWORD -WINAPI -Do1xPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - ULONG uNumExemptions = 0; - ULONG uNumRegistrations = 0; - DOT11_PRIVACY_EXEMPTION PrivacyExemption[MAX_EXEMPTIONS] = {0}; - USHORT usRegistration[MAX_REGISTRATIONS] = {0}; - - ASSERT( pAdapterDetails ); - ASSERT( pdwReasonCode ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_INVALID_STATE; - - if ( nic_state_pre_assoc_started != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_OUTOFMEMORY; - - dwResult = - GetNewOnexData - ( - &(pAdapterDetails->pOnexData) - ); - BAIL_ON_WIN32_ERROR(dwResult); - - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_HARDWARE_FAILURE; - - - TRACE_MESSAGE( "Setting Auth Algorithm." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetAuthAlgorithm) - ( - pAdapterDetails->hDot11SvcHandle, - DOT11_AUTH_ALGO_80211_OPEN - ); - BAIL_ON_WIN32_ERROR(dwResult); - - TRACE_MESSAGE( "Setting Unicast cipher algorithm." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetUnicastCipherAlgorithm) - ( - pAdapterDetails->hDot11SvcHandle, - DOT11_CIPHER_ALGO_WEP - ); - BAIL_ON_WIN32_ERROR(dwResult); - - TRACE_MESSAGE( "Setting Multicast cipher algorithm." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetMulticastCipherAlgorithm) - ( - pAdapterDetails->hDot11SvcHandle, - DOT11_CIPHER_ALGO_WEP - ); - BAIL_ON_WIN32_ERROR(dwResult); - - TRACE_MESSAGE( "Setting exclude unencrypted flag." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetExcludeUnencrypted) - ( - pAdapterDetails->hDot11SvcHandle, - TRUE - ); - BAIL_ON_WIN32_ERROR(dwResult); - - // set the exemption handler - - // In vanilla 1x, 802.1x packets are never encrypted - PrivacyExemption[uNumExemptions].usExemptionActionType = DOT11_EXEMPT_ALWAYS; - PrivacyExemption[uNumExemptions].usEtherType = htons(ETHTYPE_EAPOL); - PrivacyExemption[uNumExemptions].usExemptionPacketType = DOT11_EXEMPT_UNICAST; - uNumExemptions++; - ASSERT(uNumExemptions <= MAX_EXEMPTIONS); - - usRegistration[uNumRegistrations] = htons(ETHTYPE_EAPOL); - uNumRegistrations++; - ASSERT(uNumRegistrations <= MAX_REGISTRATIONS); - - TRACE_MESSAGE( "Setting ethertype handling." ); - dwResult = - g_pDot11ExtApi->Dot11ExtSetEtherTypeHandling - ( - pAdapterDetails->hDot11SvcHandle, - MAX_BACKLOG, - uNumExemptions, - PrivacyExemption, - uNumRegistrations, - usRegistration - ); - BAIL_ON_WIN32_ERROR(dwResult); - - - // Verified before, just after acquiring lock. - ASSERT( nic_state_pre_assoc_started == pAdapterDetails->NicState ); - - pAdapterDetails->NicState = nic_state_pre_assoc_ended; - - // Reason code is set to SUCCESS. - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - - // populate post associate handler functions. - pAdapterDetails->pPerformPostAssociateCompletionRoutine = NULL; - pAdapterDetails->pPerformPostAssociateRoutine = Do1xPostAssociate; - pAdapterDetails->pStopPostAssociateRoutine = Do1xStopPostAssociate; - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - -// post-associate function for onex profile. -DWORD -WINAPI -Do1xPostAssociate -( - IN PADAPTER_DETAILS pAdapterDetails, - IN HANDLE hSecuritySessionID, - IN PDOT11_PORT_STATE pPortState, - IN ULONG uDot11AssocParamsBytes, - IN PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pDot11AssocParams -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - - ASSERT( pAdapterDetails ); - - UNREFERENCED_PARAMETER( pPortState ); - UNREFERENCED_PARAMETER( uDot11AssocParamsBytes ); - UNREFERENCED_PARAMETER( pDot11AssocParams ); - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // verify and change state. - if - ( - ( nic_state_post_assoc_started != pAdapterDetails->NicState && - nic_state_post_assoc_ended != pAdapterDetails->NicState - ) || - ( !(pAdapterDetails->pOnexData) ) - ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - pAdapterDetails->NicState = nic_state_onex_in_progress; - - // no need to free old id handle. - pAdapterDetails->pOnexData->hSecuritySessionID = hSecuritySessionID; - - TRACE_MESSAGE( "Starting OneX." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtStartOneX) - ( - pAdapterDetails->hDot11SvcHandle, - NULL // EAP attributes - ); - BAIL_ON_WIN32_ERROR( dwResult ); - pAdapterDetails->pOnexData->fMSOneXStarted = TRUE; - - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - -// receive rc4 key. -DWORD -ReceiveRC4Key -( - PADAPTER_DETAILS pAdapterDetails, - ULONG uPktLen, - PEAPOL_PACKET pEapolPkt -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - - ASSERT( pAdapterDetails ); - ASSERT( uPktLen ); - ASSERT( pEapolPkt ); - - EnterCriticalSection(&g_csSynch); - bLocked = TRUE; - - ASSERT( pAdapterDetails->pOnexData ); - - TRACE_MESSAGE( "Received RC4 Key packet." ); - - if ( IsOneXResultParamsAvailable( pAdapterDetails->pOnexData->pOnexResultParams ) ) - { - // 1x params are available - dwResult = - ProcessRC4Key - ( - (HANDLE) &(pAdapterDetails->Link), - pAdapterDetails->pOnexData->pOnexResultParams, - pAdapterDetails->hDot11SvcHandle, - pAdapterDetails->pOnexData->hSecuritySessionID, - uPktLen, - (PBYTE)pEapolPkt - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - else - { - dwResult = - CacheRC4Pkt - ( - pAdapterDetails->pOnexData, - uPktLen, - (PBYTE) pEapolPkt - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - -error: - if (bLocked) - { - LeaveCriticalSection(&g_csSynch); - } - return dwResult; -} - - - - -// receive packet function for onex profile. -DWORD -WINAPI -Do1xReceivePacket -( - PADAPTER_DETAILS pAdapterDetails, - DWORD dwInBufferSize, - LPVOID pvInBuffer -) -{ - DWORD dwResult = ERROR_SUCCESS; - HANDLE hDot11SvcHandle = NULL; - BOOL bLocked = FALSE; - PDOT11_SECURITY_PACKET_HEADER pSecurityPkt = NULL; - PEAPOL_PACKET pEapolPkt = NULL; - DWORD uReqdPktLen = 0; - - ASSERT( pAdapterDetails ); - - // Must include at least one byte of data - uReqdPktLen = FIELD_OFFSET(DOT11_SECURITY_PACKET_HEADER, Data) + 1; - - if ( dwInBufferSize < uReqdPktLen ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR(dwResult); - } - - if ( !pvInBuffer ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - pSecurityPkt = (PDOT11_SECURITY_PACKET_HEADER) pvInBuffer; - pEapolPkt = (PEAPOL_PACKET) pSecurityPkt->Data; - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // validate state. - if - ( - (!(pAdapterDetails->pOnexData)) || - ( - ( nic_state_onex_in_progress != pAdapterDetails->NicState ) && - ( nic_state_post_assoc_ended != pAdapterDetails->NicState ) - ) - ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - hDot11SvcHandle = pAdapterDetails->hDot11SvcHandle; - - TRACE_MESSAGE( "Received security packet." ); - - // Ignoring version - if ( EapolTypeEapolKey == pEapolPkt->PacketType ) - { - dwResult = - ReceiveRC4Key - ( - pAdapterDetails, - dwInBufferSize - FIELD_OFFSET(DOT11_SECURITY_PACKET_HEADER, Data), - pEapolPkt - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - else - { - // leave lock before sending security packet to AC. - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - dwResult = - (g_pDot11ExtApi->Dot11ExtProcessSecurityPacket) - ( - hDot11SvcHandle, - dwInBufferSize - FIELD_OFFSET(DOT11_SECURITY_PACKET_HEADER, Data), - pSecurityPkt->Data - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - -// parameters for calling AC with post assoc completion. -typedef -struct _POST_ASSOC_COMPL_DATA -{ - HANDLE hIhvExtAdapter; - HANDLE hDot11SvcHandle; - HANDLE hSecuritySessionID; - DOT11_MAC_ADDRESS PeerMacAddress; - DWORD dwSecurityReasonCode; - DWORD dwSecurityWin32Error; -} -POST_ASSOC_COMPL_DATA, *PPOST_ASSOC_COMPL_DATA; - - -// function to make the actual post assoc completion call. -// this function is started in a separate thread. -DWORD -WINAPI -PostAssocComplWorker -( - LPVOID pvCtxt -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PPOST_ASSOC_COMPL_DATA pCtxt = (PPOST_ASSOC_COMPL_DATA) pvCtxt; - PADAPTER_DETAILS pAdapterDetails = NULL; - - ASSERT( pCtxt ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - pCtxt->hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - if ( nic_state_onex_in_progress != pAdapterDetails->NicState && - nic_state_post_assoc_ended != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - pAdapterDetails->NicState = nic_state_post_assoc_ended; - - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - TRACE_MESSAGE_VAL( "Calling PostAssocCompletion, Status = ", pCtxt->dwSecurityWin32Error ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtPostAssociateCompletion) - ( - pCtxt->hDot11SvcHandle, - pCtxt->hSecuritySessionID, - &(pCtxt->PeerMacAddress), - pCtxt->dwSecurityReasonCode, - pCtxt->dwSecurityWin32Error - ); - BAIL_ON_WIN32_ERROR( dwResult ); - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( pCtxt->hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - PrivateMemoryFree( pvCtxt ); - return dwResult; -} - - -// starts a worker thread for the post association completion. -DWORD -Do1xPostAssocCompletion -( - HANDLE hIhvExtAdapter, - HANDLE hDot11SvcHandle, - HANDLE hSecuritySessionID, - PDOT11_MAC_ADDRESS pPeer, - DWORD dwSecurityReasonCode, - DWORD dwSecurityWin32Error -) -{ - DWORD dwResult = ERROR_SUCCESS; - PPOST_ASSOC_COMPL_DATA pCtxt = NULL; - - // allocate memory and copy parameters. - pCtxt = (PPOST_ASSOC_COMPL_DATA) PrivateMemoryAlloc(sizeof(POST_ASSOC_COMPL_DATA)); - if (!pCtxt) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR(dwResult); - } - - pCtxt->hIhvExtAdapter = hIhvExtAdapter; - pCtxt->hDot11SvcHandle = hDot11SvcHandle; - pCtxt->hSecuritySessionID = hSecuritySessionID; - - if (pPeer) - { - CopyMemory - ( - &(pCtxt->PeerMacAddress), - pPeer, - sizeof(DOT11_MAC_ADDRESS) - ); - } - - pCtxt->dwSecurityReasonCode = dwSecurityReasonCode; - pCtxt->dwSecurityWin32Error = dwSecurityWin32Error; - - // start the new thread. - dwResult = - StartNewProtectedThread - ( - hIhvExtAdapter, - PostAssocComplWorker, - pCtxt - ); - BAIL_ON_WIN32_ERROR(dwResult); - - pCtxt = NULL; - -error: - PrivateMemoryFree( pCtxt ); - return dwResult; -} - - -// indicate result function for onex profile. -DWORD -WINAPI -Do1xIndicateResult -( - PADAPTER_DETAILS pAdapterDetails, - DOT11_MSONEX_RESULT msOneXResult, - PDOT11_MSONEX_RESULT_PARAMS pDot11MsOneXResultParams -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - ASSERT( pAdapterDetails ); - ASSERT( pAdapterDetails->pOnexData ); - - // validate state. - if ( nic_state_onex_in_progress != pAdapterDetails->NicState && - nic_state_post_assoc_ended != pAdapterDetails->NicState - ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - if ( msOneXResult == DOT11_MSONEX_IN_PROGRESS ) - { - // free the onex params if they exist - RC4UtilsFreeResultParams( &( pAdapterDetails->pOnexData->pOnexResultParams) ); - FlushRC4PktCache( pAdapterDetails->pOnexData ); - TRACE_MESSAGE( "Received DOT11_MSONEX_IN_PROGRESS." ); - } - else if ( msOneXResult == DOT11_MSONEX_FAILURE ) - { - TRACE_MESSAGE( "Received DOT11_MSONEX_FAILURE." ); - - // If failure, indicate right away - dwResult = - Do1xPostAssocCompletion - ( - (HANDLE) &(pAdapterDetails->Link), - pAdapterDetails->hDot11SvcHandle, - pAdapterDetails->pOnexData->hSecuritySessionID, - NULL, - (pDot11MsOneXResultParams && - pDot11MsOneXResultParams->Dot11OneXReasonCode != ONEX_REASON_CODE_SUCCESS)? - pDot11MsOneXResultParams->Dot11OneXReasonCode: - L2_REASON_CODE_IHV_ONEX_FAILURE, - msOneXResult - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - else if ( msOneXResult == DOT11_MSONEX_SUCCESS ) - { - // success case. - TRACE_MESSAGE( "Received DOT11_MSONEX_SUCCESS." ); - - // free result params and get new result params. - RC4UtilsFreeResultParams( &(pAdapterDetails->pOnexData->pOnexResultParams) ); - - dwResult = - RC4UtilsDecryptResultParams - ( - pDot11MsOneXResultParams, - &(pAdapterDetails->pOnexData->pOnexResultParams) - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - - // Process cached RC4 packets if any - dwResult = - ProcessCachedRC4Packets - ( - pAdapterDetails - ); - BAIL_ON_WIN32_ERROR(dwResult); - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - -// stop-post-associate function for onex profile. -DWORD -WINAPI -Do1xStopPostAssociate -( - PADAPTER_DETAILS pAdapterDetails, - PDOT11_MAC_ADDRESS pPeer, - DOT11_ASSOC_STATUS dot11AssocStatus -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - - UNREFERENCED_PARAMETER( pPeer ); - UNREFERENCED_PARAMETER( dot11AssocStatus ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - TRACE_MESSAGE( "Performing StopPostAssociate." ); - - if - ( - ( nic_state_post_assoc_ended != pAdapterDetails->NicState ) && - ( nic_state_onex_in_progress != pAdapterDetails->NicState ) && - ( nic_state_post_assoc_started != pAdapterDetails->NicState ) - ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // Reset the port specific variables. - - if ( pAdapterDetails->pOnexData ) - { - if(pAdapterDetails->pOnexData->fMSOneXStarted) - { - // NOTE THAT THE OS WILL STOP THE AUTH EVEN IF THIS CALL IS NOT MADE. - // The sample should keep track of port downs and call start auth - // once a port up is received. - dwResult = - (g_pDot11ExtApi->Dot11ExtStopOneX) - ( - pAdapterDetails->hDot11SvcHandle - ); - if(dwResult != ERROR_SUCCESS) - { - // log error - dwResult = ERROR_SUCCESS; - } - else - { - pAdapterDetails->pOnexData->fMSOneXStarted = FALSE; - } - } - - // flush the rc4 packet cache. - FlushRC4PktCache( pAdapterDetails->pOnexData ); - - // free the result params. - RC4UtilsFreeResultParams( &(pAdapterDetails->pOnexData->pOnexResultParams) ); - } - - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - - -DWORD -PlumbWEPKey -( - HANDLE hDot11SvcHandle, - ULONG uKeyIndex, - DOT11_DIRECTION direction, - LPBYTE pbKey, - ULONG uKeyLen -) -{ - DWORD dwResult = ERROR_SUCCESS; - PDOT11_CIPHER_DEFAULT_KEY_VALUE pDefaultKey = NULL; - ULONG uAllocLen = 0; - BOOL bLocked = FALSE; - - uAllocLen = FIELD_OFFSET(DOT11_CIPHER_DEFAULT_KEY_VALUE, ucKey) + uKeyLen; - - if (uAllocLen < uKeyLen) - { - dwResult = ERROR_ARITHMETIC_OVERFLOW; - BAIL_ON_WIN32_ERROR(dwResult); - } - - pDefaultKey = (PDOT11_CIPHER_DEFAULT_KEY_VALUE) PrivateMemoryAlloc(uAllocLen); - if (!pDefaultKey) - { - dwResult = ERROR_NOT_ENOUGH_MEMORY; - BAIL_ON_WIN32_ERROR(dwResult); - } - - pDefaultKey->AlgorithmId = DOT11_CIPHER_ALGO_WEP; - pDefaultKey->uKeyIndex = uKeyIndex; - pDefaultKey->bDelete = FALSE; - pDefaultKey->bStatic = FALSE; - pDefaultKey->usKeyLength = (USHORT) uKeyLen; - - ZeroMemory(&(pDefaultKey->MacAddr), sizeof(DOT11_MAC_ADDRESS)); - - CopyMemory - ( - pDefaultKey->ucKey, - pbKey, - uKeyLen - ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - TRACE_MESSAGE( "Setting default key." ); - TRACE_MESSAGE_VAL( " Key Index = ", uKeyIndex ); - TRACE_MESSAGE_VAL( " Key Length = ", uKeyLen ); - TRACE_MESSAGE_VAL( " Direction = ", direction ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtSetDefaultKey) - ( - hDot11SvcHandle, - pDefaultKey, - direction - ); - BAIL_ON_WIN32_ERROR(dwResult); - - -error: - if (pDefaultKey) - { - SecureZeroMemory( pDefaultKey, uAllocLen ); - PrivateMemoryFree( pDefaultKey ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - -DWORD -ProcessRC4Key -( - HANDLE hIhvExtAdapter, - PDOT11_MSONEX_RESULT_PARAMS pOneXResultParams, - HANDLE hDot11SvcHandle, - HANDLE hSecuritySessionID, - ULONG uPktLen, - PBYTE pbEapolPkt -) -{ - DWORD dwResult = ERROR_SUCCESS; - PEAPOL_PACKET pEapolPkt = NULL; - DWORD dwKeyLen = 0; - DWORD dwKeyIndex = 0; - LPBYTE pbDecryptedKey = NULL; - BOOL bUCast = FALSE; - BOOL bLocked = FALSE; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - ASSERT( IsOneXResultParamsAvailable ( pOneXResultParams ) ); - - TRACE_MESSAGE( "Processing RC4 key." ); - - pEapolPkt = (PEAPOL_PACKET) pbEapolPkt; - - dwResult = - RC4UtilsParseKeyPacket - ( - pEapolPkt, - uPktLen, - pOneXResultParams, - &bUCast, - &pbDecryptedKey, - &dwKeyLen, - &dwKeyIndex - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - dwResult = - PlumbWEPKey - ( - hDot11SvcHandle, - dwKeyIndex, - bUCast ? DOT11_DIR_BOTH : DOT11_DIR_INBOUND, - pbDecryptedKey, - dwKeyLen - ); - BAIL_ON_WIN32_ERROR(dwResult); - - if ( bUCast ) - { - TRACE_MESSAGE_VAL( "Setting default key ID, Key Index = ", dwKeyIndex ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtSetDefaultKeyId) - ( - hDot11SvcHandle, - dwKeyIndex - ); - BAIL_ON_WIN32_ERROR(dwResult); - - dwResult = - Do1xPostAssocCompletion - ( - hIhvExtAdapter, - hDot11SvcHandle, - hSecuritySessionID, - NULL, - L2_REASON_CODE_SUCCESS, - ERROR_SUCCESS - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - -error: - RC4UtilsFreeKeyMaterial( pbDecryptedKey, dwKeyLen ); - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.h b/network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.h deleted file mode 100644 index 574bbdfa..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvonexext.h +++ /dev/null @@ -1,108 +0,0 @@ - - - -// cache size. -#define RC4_CACHE_SIZE 2 - - -// cached packet. -typedef -struct _CACHED_PKT -{ - ULONG uPktLen; - PBYTE pbPkt; -} -CACHED_PKT, *PCACHED_PKT; - - -// connection specific data for onex profiles. -typedef -struct _ONEX_DATA -{ - HANDLE hSecuritySessionID; - BOOL fMSOneXStarted; - CACHED_PKT RC4Cache[RC4_CACHE_SIZE]; - ULONG uCacheFreeIdx; - PDOT11_MSONEX_RESULT_PARAMS pOnexResultParams; - IHV_RECEIVE_PACKET_HANDLER lpfnReceivePacket; - IHV_INDICATE_RESULT_HANDLER lpfnIndicateResult; -} -ONEX_DATA, *PONEX_DATA; - - -// initialize onex data structure. -DWORD -GetNewOnexData -( - PONEX_DATA* ppOnexData -); - -// free onex data structure. -VOID -FreeOnexData -( - PONEX_DATA* ppOnexData -); - - - - -// pre-associate function for onex profile. -DWORD -WINAPI -Do1xPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -); - - - -// post-associate function for onex profile. -DWORD -WINAPI -Do1xPostAssociate -( - IN PADAPTER_DETAILS pAdapterDetails, - IN HANDLE hSecuritySessionID, - IN PDOT11_PORT_STATE pPortState, - IN ULONG uDot11AssocParamsBytes, - IN PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pDot11AssocParams -); - - -// stop-post-associate function for onex profile. -DWORD -WINAPI -Do1xStopPostAssociate -( - PADAPTER_DETAILS pAdapterDetails, - PDOT11_MAC_ADDRESS pPeer, - DOT11_ASSOC_STATUS dot11AssocStatus -); - - - -// receive packet function for onex profile. -DWORD -WINAPI -Do1xReceivePacket -( - PADAPTER_DETAILS pAdapterDetails, - DWORD dwInBufferSize, - LPVOID pvInBuffer -); - - - -// indicate result function for onex profile. -DWORD -WINAPI -Do1xIndicateResult -( - PADAPTER_DETAILS pAdapterDetails, - DOT11_MSONEX_RESULT msOneXResult, - PDOT11_MSONEX_RESULT_PARAMS pDot11MsOneXResultParams -); - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvplapmachineoruser.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvplapmachineoruser.xml deleted file mode 100644 index cd86060e..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvplapmachineoruser.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - ihvplapmachineoruser - - - _1x_SSID_ - - false - - ESS - auto - false - - - - open - WEP - true - - - 3 - machineOrUser - - - preLogon - 50 - - - - - 25 - 0 - 0 - 0 - - - - - - - - - - 123456 - 01 - - - - 0 - - - - - - FALSE - IHVAuthV1 - IHVCipher1 - 0 - - - - true - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvplapuser.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvplapuser.xml deleted file mode 100644 index 37334800..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvplapuser.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - ihvplapuser - - - _1x_SSID_ - - false - - ESS - auto - false - - - - open - WEP - true - - - 3 - user - - - preLogon - 50 - - - - - 25 - 0 - 0 - 0 - - - - - - - - - - 123456 - 01 - - - - 0 - - - - - - FALSE - IHVAuthV1 - IHVCipher1 - 0 - - - - true - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.cpp b/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.cpp deleted file mode 100644 index 2b73a7ed..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.cpp +++ /dev/null @@ -1,1554 +0,0 @@ -/*++ - -Copyright (c) 2005 Microsoft Corporation - -Abstract: - - Sample IHV Extensibility DLL to extend - 802.11 LWF driver for third party protocols. - - ---*/ - -#include "precomp.h" - - - -// -// Get Version info. -// -DWORD -WINAPI -Dot11ExtIhvGetVersionInfo -( - OUT PDOT11_IHV_VERSION_INFO pDot11IHVVersionInfo -) -{ - if ( pDot11IHVVersionInfo ) - { - pDot11IHVVersionInfo->dwVerMin = 0; - pDot11IHVVersionInfo->dwVerMax = 0; - } - return ERROR_SUCCESS; -} - - -// -// Initialize service. -// - -DWORD -WINAPI -Dot11ExtIhvInitService -( - IN DWORD dwVerNumUsed, - IN PDOT11EXT_APIS pDot11ExtAPI, - IN LPVOID pvReserved, - OUT PDOT11EXT_IHV_HANDLERS pDot11IHVHandlers -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - - UNREFERENCED_PARAMETER( pvReserved ); - - if - ( - ( 0 != dwVerNumUsed ) || - ( !pDot11ExtAPI ) || - ( !pDot11IHVHandlers ) - ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - InitAdapterDetailsList( ); - - g_pDot11ExtApi = (PDOT11EXT_APIS) PrivateMemoryAlloc( sizeof( DOT11EXT_APIS ) ); - if ( !g_pDot11ExtApi ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - (*g_pDot11ExtApi) = (*pDot11ExtAPI); - - HandlerInit( pDot11IHVHandlers ); - - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - -// -// Deinitialize service. -// -VOID -WINAPI -IhvDeinitService -( - VOID -) -{ - - EnterCriticalSection( &g_csSynch ); - - // disable starting new threads or adding new adapters. - StartShutdown( ); - - LeaveCriticalSection( &g_csSynch ); - - - WaitOnZeroThreads( ); - DeinitAdapterDetailsList( ); - - if ( g_pDot11ExtApi ) - { - PrivateMemoryFree( g_pDot11ExtApi ); - g_pDot11ExtApi = NULL; - } - - return; -} - - - -// -// Initialize adapter -// -DWORD -WINAPI -IhvInitAdapter -( - IN PDOT11_ADAPTER pDot11Adapter, - IN HANDLE hDot11SvcHandle, - OUT PHANDLE phIhvExtAdapter -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - HANDLE hIhvExtAdapter = NULL; - USHORT usEtherTypeReg[] = { 0x888e, 0x8333 }; - - if (( !pDot11Adapter ) || (!hDot11SvcHandle) || (!phIhvExtAdapter) ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - InitAdapterDetails - ( - hDot11SvcHandle, - &hIhvExtAdapter - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtSetEtherTypeHandling) - ( - hDot11SvcHandle, - 3, - 0, - NULL, - 2, - usEtherTypeReg - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - (*phIhvExtAdapter) = hIhvExtAdapter; - hIhvExtAdapter = NULL; - -error: - - if ( hIhvExtAdapter ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - -// -// Deinit adapter. -// -VOID -WINAPI -IhvDeinitAdapter -( - IN HANDLE hIhvExtAdapter -) -{ - DerefenceAdapterDetails( hIhvExtAdapter ); - - return; -} - - - - - -// -// Handle session change notification. -// -DWORD -WINAPI -IhvProcessSessionChange -( - IN ULONG uEventType, - IN PWTSSESSION_NOTIFICATION pSessionNotification -) -{ - UNREFERENCED_PARAMETER( pSessionNotification ); - - if ( WTS_CONSOLE_CONNECT == uEventType ) - { - // The sample does not use this session ID - // anywhere. In an actual application, IHV - // developers may want to use this session ID to - // get/set the user data. - g_dwSessionID = WTSGetActiveConsoleSessionId( ); - } - return ERROR_SUCCESS; -} - - - - - -// -// Checks if UI request is pending. -// -DWORD -WINAPI -IhvIsUIRequestPending -( - IN GUID guidUIRequest, - OUT PBOOL pbIsRequestPending -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - HANDLE hIhvExtAdapter = NULL; - - - ASSERT( pbIsRequestPending ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // obtain reference to the adapter using - // UI request GUID. - dwResult = - ReferenceAdapterDetailsByUIRequestGuid - ( - &guidUIRequest, - &pAdapterDetails, - &hIhvExtAdapter - ); - if ( ERROR_NOT_FOUND == dwResult ) - { - dwResult = ERROR_SUCCESS; - (*pbIsRequestPending) = FALSE; - BAIL( ); - } - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - (*pbIsRequestPending) = TRUE; - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - -// -// Handle NIC specific notifications. -// -DWORD -WINAPI -IhvReceiveIndication -( - IN HANDLE hIhvExtAdapter, - IN DOT11EXT_IHV_INDICATION_TYPE indicationType, - IN ULONG uBufferLength, - IN LPVOID pvBuffer -) -{ - DWORD dwResult = ERROR_SUCCESS; - PDOT11_PMKID_CANDIDATE_LIST_PARAMETERS pPMKCandidateListParams = NULL; - PDOT11_TKIPMIC_FAILURE_PARAMETERS pTkipMicFailureParams = NULL; - PDOT11_PHY_STATE_PARAMETERS pPHYStateChange = NULL; - PDOT11_LINK_QUALITY_PARAMETERS pDot11LinkQualityParams = NULL; - - ASSERT( pvBuffer ); - - // Note that sample does not really use the buffer. - UNREFERENCED_PARAMETER( hIhvExtAdapter ); - UNREFERENCED_PARAMETER( uBufferLength ); - - switch ( indicationType ) - { - case IndicationTypeNicSpecificNotification: - // The pointer pvBuffer can be interpreted by IHV appropriately. Format - // is a contract between the miniport driver and the IHV extensibility module. - break; - - case IndicationTypePmkidCandidateList: - pPMKCandidateListParams = (PDOT11_PMKID_CANDIDATE_LIST_PARAMETERS) pvBuffer; - // Ihv extensibility module may choose to use this data appropriately. - break; - - case IndicationTypeTkipMicFailure: - pTkipMicFailureParams = (PDOT11_TKIPMIC_FAILURE_PARAMETERS) pvBuffer; - // Ihv extensibility module may choose to use this data appropriately. - break; - - case IndicationTypePhyStateChange: - pPHYStateChange = (PDOT11_PHY_STATE_PARAMETERS) pvBuffer; - // Ihv extensibility module may choose to use this data appropriately. - break; - - case IndicationTypeLinkQuality: - pDot11LinkQualityParams = (PDOT11_LINK_QUALITY_PARAMETERS) pvBuffer; - // Ihv extensibility module may choose to use this data appropriately. - break; - - default: - ASSERTFAILURE(); - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - break; - } - -error: - return dwResult; -} - - - - - - -// -// Perform the capabiity match. -// -DWORD -WINAPI -IhvPerformCapabilityMatch -( - IN HANDLE hIhvExtAdapter, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, - IN PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, - IN PDOT11_BSS_LIST pConnectableBssid, - OUT PDWORD pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PBYTE pbCurrPos = NULL; - ULONG uRemainBytes = 0; - ULONG uBssEntryBytes = 0; - PULDOT11_BSS_ENTRY pBssEntry = NULL; - PADAPTER_DETAILS pAdapterDetails = NULL; - PIHV_CONNECTIVITY_PROFILE pConnectivityProfile = NULL; - PIHV_SECURITY_PROFILE pSecurityProfile = NULL; - - ASSERT( hIhvExtAdapter ); - ASSERT( pdwReasonCode ); - - (*pdwReasonCode) = L2_REASON_CODE_UNKNOWN; - - if ( !pConnectableBssid ) - { - dwResult = - IhvValidateProfile - ( - hIhvExtAdapter, - pIhvProfileParams, - pIhvConnProfile, - pIhvSecProfile, - pdwReasonCode - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - // Only validate profile if - // pConnectableBssid is NULL. - BAIL( ); - } - - // Validating data in pConnectableBssid - if (( 0 == pConnectableBssid->uNumOfBytes ) || ( NULL == pConnectableBssid->pucBuffer )) - { - dwResult = ERROR_NO_MATCH; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - (*pdwReasonCode) = L2_REASON_CODE_IHV_BAD_PROFILE; - - // parse the connectivity profile. - dwResult = - GetIhvConnectivityProfile - ( - pIhvConnProfile, - &pConnectivityProfile - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pConnectivityProfile ); - - // parse the security profile. - dwResult = - GetIhvSecurityProfile - ( - pIhvSecProfile, - &pSecurityProfile - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pSecurityProfile ); - - (*pdwReasonCode) = L2_REASON_CODE_UNKNOWN; - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // reference the adapter. - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - // try matching each BSS description field with the profile - // and see if there is a match. - uRemainBytes = pConnectableBssid->uNumOfBytes; - pbCurrPos = pConnectableBssid->pucBuffer; - - // BSS Description might not contain any buffer! - while (uRemainBytes >= FIELD_OFFSET(DOT11_BSS_ENTRY, ucBuffer)) - { - pBssEntry = (PULDOT11_BSS_ENTRY)pbCurrPos; - uBssEntryBytes = pBssEntry->uBufferLength + FIELD_OFFSET(DOT11_BSS_ENTRY, ucBuffer); - - ASSERT (uRemainBytes >= uBssEntryBytes); - uRemainBytes -= uBssEntryBytes; - pbCurrPos += uBssEntryBytes; - - if - ( - MatchBssDescription - ( - pIhvProfileParams, - pConnectivityProfile, - pSecurityProfile, - pBssEntry - ) - ) - { - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - dwResult = ERROR_SUCCESS; - BAIL( ); - } - } - - // Since none of the BSS entries matched. - dwResult = ERROR_NO_MATCH; - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - FreeIhvConnectivityProfile( &pConnectivityProfile ); - FreeIhvSecurityProfile( &pSecurityProfile ); - return dwResult; -} - - - - - -// -// Function to validate profile. -// -DWORD -WINAPI -IhvValidateProfile -( - IN HANDLE hIhvExtAdapter, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, - IN PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, - OUT PDWORD pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - PIHV_CONNECTIVITY_PROFILE pConnectivityProfile = NULL; - PIHV_SECURITY_PROFILE pSecurityProfile = NULL; - - - ASSERT( hIhvExtAdapter ); - ASSERT( pdwReasonCode ); - - UNREFERENCED_PARAMETER( hIhvExtAdapter ); - UNREFERENCED_PARAMETER( pIhvProfileParams ); - - (*pdwReasonCode) = L2_REASON_CODE_IHV_BAD_PROFILE; - - // parse ihv connectivity profile. - dwResult = - GetIhvConnectivityProfile - ( - pIhvConnProfile, - &pConnectivityProfile - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pConnectivityProfile ); - - // parse ihv security profile. - dwResult = - GetIhvSecurityProfile - ( - pIhvSecProfile, - &pSecurityProfile - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pSecurityProfile ); - - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - -error: - FreeIhvConnectivityProfile( &pConnectivityProfile ); - FreeIhvSecurityProfile( &pSecurityProfile ); - return dwResult; -} - - -// -// This function does the actual preassociation work. -// -DWORD -WINAPI -DoPreAssociate -( - LPVOID pvPreAssociate -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwStatus = ERROR_SUCCESS; - PADAPTER_DETAILS pAdapterDetails = NULL; - PRE_ASSOCIATE_FUNCTION lpfnPreAssociate = NULL; - BOOL bLocked = FALSE; - DWORD dwReasonCode = L2_REASON_CODE_UNKNOWN; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - (HANDLE) pvPreAssociate, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - dwReasonCode = L2_REASON_CODE_IHV_BAD_PROFILE; - - if ( !(pAdapterDetails->pConnectivityProfile && pAdapterDetails->pSecurityProfile) ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // choose pre-association function based on profile content. - if - ( - ( pAdapterDetails->pSecurityProfile->bUseFullSecurity ) || - ( pAdapterDetails->pSecurityProfile->bUseIhvConnectivityOnly ) - ) - { - if ( pAdapterDetails->pSecurityProfile->bUseIhvConnectivityOnly ) - { - lpfnPreAssociate = DoIhvConnPreAssociate; - } - else if ( NULL == pAdapterDetails->pConnectivityProfile->pszParam2 ) - { - lpfnPreAssociate = DoMissingKeyWepPreAssociate; - } - else if ( 0 == pAdapterDetails->pConnectivityProfile->pszParam2[0] ) - { - lpfnPreAssociate = DoMissingKeyWepPreAssociate; - } - else - { - lpfnPreAssociate = DoWepPreAssociate; - } - } - else if - ( - ( !(pAdapterDetails->pSecurityProfile->bUseFullSecurity) ) && - ( IHVAuthV1 == pAdapterDetails->pSecurityProfile->AuthType ) - ) - { - lpfnPreAssociate = Do1xPreAssociate; - } - else - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - dwReasonCode = L2_REASON_CODE_UNKNOWN; - - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - ASSERT( lpfnPreAssociate ); - ASSERT( !bLocked ); - - dwResult = - (lpfnPreAssociate) - ( - pAdapterDetails, - &dwReasonCode - ); - BAIL_ON_WIN32_ERROR( dwResult ); - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( (HANDLE) &(pAdapterDetails->Link) ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - if ( pAdapterDetails ) - { - // call the completion function directly in this thread. - dwStatus = - (g_pDot11ExtApi->Dot11ExtPreAssociateCompletion) - ( - pAdapterDetails->hDot11SvcHandle, - pAdapterDetails->hConnectSession, - dwReasonCode, - dwResult - ); - } - if ( ERROR_SUCCESS != dwStatus ) - { - // IHV specific logging can happen here. - } - return dwResult; -} - - - -// -// Function to start the preassociation thread. -// -DWORD -WINAPI -IhvPerformPreAssociate -( - IN HANDLE hIhvExtAdapter, - IN HANDLE hConnectSession, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, - IN PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, - IN PDOT11_BSS_LIST pConnectableBssid, - OUT PDWORD pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwStatus = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - - - ASSERT ( pIhvProfileParams ); - ASSERT ( pdwReasonCode ); - - UNREFERENCED_PARAMETER( pIhvProfileParams ); - UNREFERENCED_PARAMETER( pConnectableBssid ); - - (*pdwReasonCode) = L2_REASON_CODE_UNKNOWN; - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - if ( nic_state_initialized != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // Connection specific parameters should be properly initialized. - if - ( - ( pAdapterDetails->pOnexData ) || - ( pAdapterDetails->hConnectSession ) || - ( pAdapterDetails->pPerformPostAssociateCompletionRoutine ) || - ( pAdapterDetails->pPerformPostAssociateRoutine ) || - ( pAdapterDetails->pStopPostAssociateRoutine ) - ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - - - (*pdwReasonCode) = L2_REASON_CODE_IHV_BAD_PROFILE; - - // parse connectivity profile - dwResult = - GetIhvConnectivityProfile - ( - pIhvConnProfile, - &(pAdapterDetails->pConnectivityProfile) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails->pConnectivityProfile ); - - // parse security profile. - dwResult = - GetIhvSecurityProfile - ( - pIhvSecProfile, - &(pAdapterDetails->pSecurityProfile) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails->pSecurityProfile ); - - (*pdwReasonCode) = L2_REASON_CODE_UNKNOWN; - - pAdapterDetails->NicState = nic_state_pre_assoc_started; - - pAdapterDetails->hConnectSession = hConnectSession; - pAdapterDetails->bModifyCurrentProfile = FALSE; - - - // post a new thread to do the pre-association work. - dwResult = - StartNewProtectedThread - ( - hIhvExtAdapter, - DoPreAssociate, - (LPVOID) hIhvExtAdapter - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - - -error: - if ( ERROR_SUCCESS != dwResult ) - { - dwStatus = - IhvAdapterReset - ( - hIhvExtAdapter - ); - ASSERT( ERROR_SUCCESS == dwStatus ); - } - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - -// -// This function starts post associate routine -// in a separate thread and returns. -// -DWORD -WINAPI -IhvPerformPostAssociate -( - IN HANDLE hIhvExtAdapter, - IN HANDLE hSecuritySessionID, - IN PDOT11_PORT_STATE pPortState, - IN ULONG uDot11AssocParamsBytes, - IN PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pDot11AssocParams -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PPOST_ASSOC_DATA ppostAssocData = NULL; - PADAPTER_DETAILS pAdapterDetails = NULL; - - - ASSERT ( pDot11AssocParams ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - if ( nic_state_pre_assoc_ended != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - pAdapterDetails->NicState = nic_state_post_assoc_started; - - // is any post-association work required ?? - if ( pAdapterDetails->pPerformPostAssociateRoutine ) - { - dwResult = - ( pAdapterDetails->pPerformPostAssociateRoutine ) - ( - pAdapterDetails, - hSecuritySessionID, - pPortState, - uDot11AssocParamsBytes, - pDot11AssocParams - ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // The post association completion thread may have been - // started by the perform post association routine for - // the current profile. Check if the completion thread - // needs to be started and start the routine. - if ( pAdapterDetails->pPerformPostAssociateCompletionRoutine ) - { - ppostAssocData = (PPOST_ASSOC_DATA) PrivateMemoryAlloc( sizeof( POST_ASSOC_DATA ) ); - if ( !ppostAssocData ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - ppostAssocData->hIhvExtAdapter = hIhvExtAdapter; - ppostAssocData->hDot11SvcHandle = pAdapterDetails->hDot11SvcHandle; - ppostAssocData->hSecuritySessionId = hSecuritySessionID; - - - dwResult = - StartNewProtectedThread - ( - hIhvExtAdapter, - pAdapterDetails->pPerformPostAssociateCompletionRoutine, - ppostAssocData - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - - ppostAssocData = NULL; - } - - - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - PrivateMemoryFree( ppostAssocData ); - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - -// -// Reset the adapter to initialized state. -// -DWORD -WINAPI -IhvAdapterReset -( - IN HANDLE hIhvExtAdapter -) -{ - DWORD dwResult = ERROR_SUCCESS; - PADAPTER_DETAILS pAdapterDetails = NULL; - DWORD dwRefCount = 0; - BOOL bOk = FALSE; - BOOL bLocked = FALSE; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - for ( ;; ) - { - ASSERT( bLocked ); - - dwRefCount = pAdapterDetails->dwRefCount; - - if ( 2 == dwRefCount ) // For adapter init and self call. - { - break; - } - - if ( nic_state_pre_assoc_started == pAdapterDetails->NicState ) - { - pAdapterDetails->NicState = nic_state_pre_assoc_ended; - bOk = SetEvent( pAdapterDetails->hUIResponse ); - ASSERT( bOk ); - } - - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - Sleep( 100 ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - } - - ASSERT( bLocked ); - - // Resetting adapter. - - pAdapterDetails->NicState = nic_state_initialized; - pAdapterDetails->hConnectSession = NULL; - pAdapterDetails->bModifyCurrentProfile = FALSE; - pAdapterDetails->pPerformPostAssociateCompletionRoutine = NULL; - pAdapterDetails->pPerformPostAssociateRoutine = NULL; - pAdapterDetails->pStopPostAssociateRoutine = NULL; - - // freeing UI response data. - pAdapterDetails->dwResponseLen = 0; - - PrivateMemoryFree( pAdapterDetails->pbResponse ); - pAdapterDetails->pbResponse = NULL; - - ZeroMemory( &(pAdapterDetails->currentGuidUIRequest), sizeof( GUID ) ); - - // freeing profile and onex data - FreeOnexData( &(pAdapterDetails->pOnexData) ); - FreeIhvConnectivityProfile( &(pAdapterDetails->pConnectivityProfile) ); - FreeIhvSecurityProfile( &(pAdapterDetails->pSecurityProfile) ); - - // unblocking UI thread. - bOk = ResetEvent( pAdapterDetails->hUIResponse ); - if ( !bOk ) - { - dwResult = GetLastError( ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - return dwResult; -} - - - - -// -// Stop post association. Get back -// to the state before post association started. -// -DWORD -WINAPI -IhvStopPostAssociate -( - IN HANDLE hIhvExtAdapter, - IN PDOT11_MAC_ADDRESS pPeer, - IN DOT11_ASSOC_STATUS dot11AssocStatus -) -{ - DWORD dwResult = ERROR_SUCCESS; - PADAPTER_DETAILS pAdapterDetails = NULL; - DWORD dwRefCount = 0; - BOOL bLocked = FALSE; - - // The dot11AssocStatus parameter can be compared with - // values DOT11_ASSOC_STATUS_* defined in the public - // headers. - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - for ( ;; ) - { - ASSERT( bLocked ); - - dwRefCount = pAdapterDetails->dwRefCount; - - if ( 2 == dwRefCount ) // For adapter init and self call. - { - break; - } - - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - Sleep( 100 ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - } - - ASSERT( bLocked ); - - if ( nic_state_initialized == pAdapterDetails->NicState ) - { - // NO OP - // To handle the case when stop post associate - // call comes after adapter reset. - BAIL( ); - } - - // Call the post association routine - if there is any. - if ( pAdapterDetails->pStopPostAssociateRoutine ) - { - dwResult = - (pAdapterDetails->pStopPostAssociateRoutine) - ( - pAdapterDetails, - pPeer, - dot11AssocStatus - ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - - pAdapterDetails->NicState = nic_state_pre_assoc_ended; - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - return dwResult; -} - - -// -// Process received packets. -// -DWORD -WINAPI -IhvReceivePacket -( - IN HANDLE hIhvExtAdapter, - IN DWORD dwInBufferSize, - IN LPVOID pvInBuffer -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - IHV_RECEIVE_PACKET_HANDLER lpfnReceivePacket = NULL; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - if ( pAdapterDetails->pOnexData && pAdapterDetails->pOnexData->lpfnReceivePacket ) - { - lpfnReceivePacket = pAdapterDetails->pOnexData->lpfnReceivePacket; - } - else - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - ASSERT( lpfnReceivePacket ); - - // Call the receive packet routine. - dwResult = - (lpfnReceivePacket) - ( - pAdapterDetails, - dwInBufferSize, - pvInBuffer - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - -// -// Local copy of possible discovery profiles. -// -DOT11EXT_IHV_DISCOVERY_PROFILE -g_IhvDiscoveryProfiles[] = -{ - // discovery profile 1. - { - { - L"" - L"0" - L"" - L"" - }, - - // Use MS Onex. - { - L"" - L"FALSE" - L"IHVAuthV1" - L"IHVCipher1" - L"0" - L"" - L"", - - TRUE - } - }, - - // discovery profile 2 - { - // Open Wep - { - L"" - L"0" - L"" - L"" - }, - - // Full IHV Security - { - L"" - L"TRUE" - L"IHVAuthV1" - L"IHVCipher1" - L"0" - L"" - L"", - - FALSE - } - } -}; - - - - - - - -// -// Create discovery profiles. -// -DWORD -WINAPI -IhvCreateDiscoveryProfiles -( - IN HANDLE hIhvExtAdapter, - IN BOOL bInsecure, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11_BSS_LIST pConnectableBssid, - OUT PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST pIhvDiscoveryProfileList, - OUT PDWORD pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwIndex = 0; - DWORD dwIHVNumProfiles = ARRAY_LENGTH( g_IhvDiscoveryProfiles ); - - ASSERT( pIhvDiscoveryProfileList ); - ASSERT( pdwReasonCode ); - - UNREFERENCED_PARAMETER( hIhvExtAdapter ); - UNREFERENCED_PARAMETER( bInsecure ); - UNREFERENCED_PARAMETER( pIhvProfileParams ); - UNREFERENCED_PARAMETER( pConnectableBssid ); - - (*pdwReasonCode) = L2_REASON_CODE_IHV_OUTOFMEMORY; - - // allocate buffer for the array. - dwResult = - (g_pDot11ExtApi->Dot11ExtAllocateBuffer) - ( - dwIHVNumProfiles * sizeof( DOT11EXT_IHV_DISCOVERY_PROFILE ), - (LPVOID*) &(pIhvDiscoveryProfileList->pIhvDiscoveryProfiles) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - ASSERT( pIhvDiscoveryProfileList->pIhvDiscoveryProfiles ); - ZeroMemory - ( - pIhvDiscoveryProfileList->pIhvDiscoveryProfiles, - dwIHVNumProfiles * sizeof( DOT11EXT_IHV_DISCOVERY_PROFILE ) - ); - - - - // prepare each discovery profile. - for ( dwIndex = 0; dwIndex < dwIHVNumProfiles; dwIndex++ ) - { - dwResult = - CopyDiscoveryProfile - ( - g_IhvDiscoveryProfiles + dwIndex, - pIhvDiscoveryProfileList->pIhvDiscoveryProfiles + dwIndex - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - } - - pIhvDiscoveryProfileList->dwCount = dwIHVNumProfiles; - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - -error: - if ( ERROR_SUCCESS != dwResult ) - { - if ( pIhvDiscoveryProfileList->pIhvDiscoveryProfiles ) - { - for ( dwIndex = 0; dwIndex < dwIHVNumProfiles; dwIndex++ ) - { - FreeDiscoveryProfile( pIhvDiscoveryProfileList->pIhvDiscoveryProfiles + dwIndex ); - } - (g_pDot11ExtApi->Dot11ExtFreeBuffer)( pIhvDiscoveryProfileList->pIhvDiscoveryProfiles ); - } - pIhvDiscoveryProfileList->dwCount = 0; - } - return dwResult; -} - - - -// -// Process UI Response function. -// -DWORD -WINAPI -IhvProcessUIResponse -( - IN GUID guidUIRequest, - IN DWORD dwByteCount, - IN LPVOID pvResponseBuffer -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - HANDLE hIhvExtAdapter = NULL; - - if ( !( dwByteCount && pvResponseBuffer ) ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // find the adapter from the UI response guid. - dwResult = - ReferenceAdapterDetailsByUIRequestGuid - ( - &guidUIRequest, - &pAdapterDetails, - &hIhvExtAdapter - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - ZeroMemory( &(pAdapterDetails->currentGuidUIRequest), sizeof( GUID ) ); - - // Copy the UI response to the adapter data structure. - PrivateMemoryFree( pAdapterDetails->pbResponse ); - - pAdapterDetails->pbResponse = (BYTE*) PrivateMemoryAlloc( dwByteCount ); - if ( !(pAdapterDetails->pbResponse) ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR(dwResult); - } - CopyMemory( pAdapterDetails->pbResponse, pvResponseBuffer, dwByteCount ); - - (pAdapterDetails->dwResponseLen) = dwByteCount; - - // Waiting thread can pick up the response now. - SetEvent( pAdapterDetails->hUIResponse ); - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - -// -// Handler to clear memory after sending packet. -// -DWORD -WINAPI -IhvSendPacketCompletion -( - IN HANDLE hSendCompletion -) -{ - // The sample is not sending any packets. - // So send packet completion should - // not be called. - ASSERTFAILURE(); - - // The freeing function used here - // should be the reverse of the function - // used to allocate memory before calling - // Send Packet. - PrivateMemoryFree( (LPVOID) hSendCompletion ); - return ERROR_SUCCESS; -} - - - - -// -// Function to return UI Request on OS query. -// -DWORD -WINAPI -IhvQueryUIRequest -( - IN HANDLE hIhvExtAdapter, - IN DOT11EXT_IHV_CONNECTION_PHASE connectionPhase, - OUT PDOT11EXT_IHV_UI_REQUEST* ppIhvUIRequest -) -{ - // This IHV handler is a post Vista extensibility point. - // It is currently unused. - ASSERTFAILURE(); - - UNREFERENCED_PARAMETER( hIhvExtAdapter ); - UNREFERENCED_PARAMETER( connectionPhase ); - UNREFERENCED_PARAMETER( ppIhvUIRequest ); - - return ERROR_CALL_NOT_IMPLEMENTED; -} - - - - -// -// Handler to receive the Onex Result. -// -DWORD -WINAPI -IhvOnexIndicateResult -( - IN HANDLE hIhvExtAdapter, - IN DOT11_MSONEX_RESULT msOneXResult, - IN PDOT11_MSONEX_RESULT_PARAMS pDot11MsOneXResultParams -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - // If indication of result is required. - if ( pAdapterDetails->pOnexData && pAdapterDetails->pOnexData->lpfnIndicateResult ) - { - dwResult = - (pAdapterDetails->pOnexData->lpfnIndicateResult) - ( - pAdapterDetails, - msOneXResult, - pDot11MsOneXResultParams - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - } - else - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - - -// -// Handler to receive Control. -// -DWORD -WINAPI -IhvControl -( - IN HANDLE hIhvExtAdapter, - IN DWORD dwInBufferSize, - IN PBYTE pInBuffer, - IN DWORD dwOutBufferSize, - OUT PBYTE pOutBuffer, - OUT PDWORD pdwBytesReturned -) -{ - // Sample does not demonstrate use of IHV control. - - UNREFERENCED_PARAMETER( hIhvExtAdapter ); - UNREFERENCED_PARAMETER( dwInBufferSize ); - UNREFERENCED_PARAMETER( pInBuffer ); - UNREFERENCED_PARAMETER( dwOutBufferSize ); - UNREFERENCED_PARAMETER( pOutBuffer ); - UNREFERENCED_PARAMETER( pdwBytesReturned ); - - return ERROR_SUCCESS; -} - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.def b/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.def deleted file mode 100644 index dbbfe637..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.def +++ /dev/null @@ -1,8 +0,0 @@ -; Test Ihv Extensibility DLL - -LIBRARY IhvSample.dll - -EXPORTS - DllMain - Dot11ExtIhvGetVersionInfo - Dot11ExtIhvInitService diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.h b/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.h deleted file mode 100644 index 0b0484bd..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.h +++ /dev/null @@ -1,261 +0,0 @@ - - - - -// -// IHV can start defining reason codes in the IHV range. -// -enum -{ - L2_REASON_CODE_IHV_BAD_USER_KEY = L2_REASON_CODE_IHV_BASE, - L2_REASON_CODE_IHV_OUTOFMEMORY, - L2_REASON_CODE_IHV_BAD_PROFILE, - L2_REASON_CODE_IHV_HARDWARE_FAILURE, - L2_REASON_CODE_IHV_ONEX_FAILURE, - L2_REASON_CODE_IHV_INVALID_STATE -}; - - - - - - -//////////////////////////////////// -// IHV provided Handler functions // -//////////////////////////////////// - - - -VOID -WINAPI -IhvDeinitService -( - VOID -); - - - - -DWORD -WINAPI -IhvInitAdapter -( - IN PDOT11_ADAPTER pDot11Adapter, - IN HANDLE hDot11SvcHandle, - OUT PHANDLE phIhvExtAdapter -); - - - - -VOID -WINAPI -IhvDeinitAdapter -( - IN HANDLE hIhvExtAdapter -); - - - - -DWORD -WINAPI -IhvProcessSessionChange -( - IN ULONG uEventType, - IN PWTSSESSION_NOTIFICATION pSessionNotification -); - - - - -DWORD -WINAPI -IhvIsUIRequestPending -( - IN GUID guidUIRequest, - OUT PBOOL pbIsRequestPending -); - - - - -DWORD -WINAPI -IhvReceiveIndication -( - IN HANDLE hIhvExtAdapter, - IN DOT11EXT_IHV_INDICATION_TYPE indicationType, - IN ULONG uBufferLength, - IN LPVOID pvBuffer -); - - - - -DWORD -WINAPI -IhvPerformCapabilityMatch -( - IN HANDLE hIhvExtAdapter, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, - IN PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, - IN PDOT11_BSS_LIST pConnectableBssid, - OUT PDWORD pdwReasonCode -); - - - - -DWORD -WINAPI -IhvValidateProfile -( - IN HANDLE hIhvExtAdapter, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, - IN PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, - OUT PDWORD pdwReasonCode -); - - - - -DWORD -WINAPI -IhvPerformPreAssociate -( - IN HANDLE hIhvExtAdapter, - IN HANDLE hConnectSession, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile, - IN PDOT11EXT_IHV_SECURITY_PROFILE pIhvSecProfile, - IN PDOT11_BSS_LIST pConnectableBssid, - OUT PDWORD pdwReasonCode -); - - - - -DWORD -WINAPI -IhvPerformPostAssociate -( - IN HANDLE hIhvExtAdapter, - IN HANDLE hSecuritySessionID, - IN PDOT11_PORT_STATE pPortState, - IN ULONG uDot11AssocParamsBytes, - IN PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pDot11AssocParams -); - - - - -DWORD -WINAPI -IhvAdapterReset -( - IN HANDLE hIhvExtAdapter -); - - - - -DWORD -WINAPI -IhvStopPostAssociate -( - IN HANDLE hIhvExtAdapter, - IN PDOT11_MAC_ADDRESS pPeer, - IN DOT11_ASSOC_STATUS dot11AssocStatus -); - - - - - -DWORD -WINAPI -IhvReceivePacket -( - IN HANDLE hIhvExtAdapter, - IN DWORD dwInBufferSize, - IN LPVOID pvInBuffer -); - - - - -DWORD -WINAPI -IhvCreateDiscoveryProfiles -( - IN HANDLE hIhvExtAdapter, - IN BOOL bInsecure, - IN PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - IN PDOT11_BSS_LIST pConnectableBssid, - OUT PDOT11EXT_IHV_DISCOVERY_PROFILE_LIST pIhvDiscoveryProfileList, - OUT PDWORD pdwReasonCode -); - - - - -DWORD -WINAPI -IhvProcessUIResponse -( - IN GUID guidUIRequest, - IN DWORD dwByteCount, - IN LPVOID pvResponseBuffer -); - - - - -DWORD -WINAPI -IhvSendPacketCompletion -( - IN HANDLE hSendCompletion -); - - - - -DWORD -WINAPI -IhvQueryUIRequest -( - IN HANDLE hIhvExtAdapter, - IN DOT11EXT_IHV_CONNECTION_PHASE connectionPhase, - OUT PDOT11EXT_IHV_UI_REQUEST* ppIhvUIRequest -); - - - - -DWORD -WINAPI -IhvOnexIndicateResult -( - IN HANDLE hIhvExtAdapter, - IN DOT11_MSONEX_RESULT msOneXResult, - IN PDOT11_MSONEX_RESULT_PARAMS pDot11MsOneXResultParams -); - - - - -DWORD -WINAPI -IhvControl -( - IN HANDLE hIhvExtAdapter, - IN DWORD dwInBufferSize, - IN PBYTE pInBuffer, - IN DWORD dwOutBufferSize, - OUT PBYTE pOutBuffer, - OUT PDWORD pdwBytesReturned -); diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj b/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj deleted file mode 100644 index 33e1e2ea..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj +++ /dev/null @@ -1,257 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22} - $(MSBuildProjectName) - Debug - Win32 - {64311202-0CFD-4B80-9DD6-A268916B494D} - - - - Windows10 - False - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - Windows10 - True - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - Windows10 - False - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - Windows10 - True - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - - $(IntDir) - - - - - - - - - - - - - - - - ihvsample - - - ihvsample - - - ihvsample - - - ihvsample - - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - %(AdditionalOptions) /EHsc - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - %(AdditionalOptions) /EHsc - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - %(AdditionalOptions) /EHsc - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - %(AdditionalOptions) /EHsc - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - %(PreprocessorDefinitions);RPC_NO_WINDOWS_H;UNICODE;_UNICODE;NO_STRICT;WIN32 - - - - - %(AdditionalDependencies);kernel32.lib;ntdll.lib;advapi32.lib;rpcrt4.lib;uuid.lib;user32.lib;wmip.lib;ole32.lib;oleaut32.lib;ws2_32.lib;..\ihvfrm\$(DDKPlatform)\rc4utils.lib - ihvsample.def - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalDependencies);kernel32.lib;ntdll.lib;advapi32.lib;rpcrt4.lib;uuid.lib;user32.lib;wmip.lib;ole32.lib;oleaut32.lib;ws2_32.lib;..\ihvfrm\$(DDKPlatform)\rc4utils.lib - ihvsample.def - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalDependencies);kernel32.lib;ntdll.lib;advapi32.lib;rpcrt4.lib;uuid.lib;user32.lib;wmip.lib;ole32.lib;oleaut32.lib;ws2_32.lib;..\ihvfrm\$(DDKPlatform)\rc4utils.lib - ihvsample.def - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalDependencies);kernel32.lib;ntdll.lib;advapi32.lib;rpcrt4.lib;uuid.lib;user32.lib;wmip.lib;ole32.lib;oleaut32.lib;ws2_32.lib;..\ihvfrm\$(DDKPlatform)\rc4utils.lib - ihvsample.def - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - %(AdditionalIncludeDirectories);$(WDKContentRoot)\net\wlan\ihvfrm\test\rc4utils - - - - - - - - - ;%(AdditionalIncludeDirectories) - precomp.h - Create - $(IntDir)\precomp.h.pch - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj.Filters b/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj.Filters deleted file mode 100644 index 0a6dcbd1..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvsample.vcxproj.Filters +++ /dev/null @@ -1,43 +0,0 @@ - - - - - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {423168DD-A613-44E0-90D5-54ABB1A48236} - - - h;hpp;hxx;hm;inl;inc;xsd - {95A2EEA6-FBCB-458E-80CD-26B1D9621DF9} - - - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {EC753E12-4DCA-4153-AC12-532ABEF0099B} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelymachineoruser.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelymachineoruser.xml deleted file mode 100644 index d115ee11..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelymachineoruser.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - ihvtimelymachineoruser - - - _1x_SSID_ - - false - - ESS - auto - false - - - - open - WEP - true - - - 3 - machineOrUser - - - postLogon - 50 - - - - - 25 - 0 - 0 - 0 - - - - - - - - - - 123456 - 01 - - - - 0 - - - - - - FALSE - IHVAuthV1 - IHVCipher1 - 0 - - - - true - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelyuser.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelyuser.xml deleted file mode 100644 index 83af761f..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvtimelyuser.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - ihvtimelyuser - - - _1x_SSID_ - - false - - ESS - auto - false - - - - open - WEP - true - - - 3 - user - - postLogon - 50 - - - - - 25 - 0 - 0 - 0 - - - - - - - - - - 123456 - 01 - - - - 0 - - - - - - FALSE - IHVAuthV1 - IHVCipher1 - 0 - - - - true - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.cpp b/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.cpp deleted file mode 100644 index 3f4b1c6d..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.cpp +++ /dev/null @@ -1,837 +0,0 @@ -/*++ - -Copyright (c) 2005 Microsoft Corporation - -Abstract: - - Sample IHV Extensibility DLL to extend - 802.11 LWF driver for third party protocols. - - ---*/ - -#include "precomp.h" - - - -// -// UI Request structure to -// be parsed by IHV UI DLL. -// -typedef struct _IHV_UI_REQUEST -{ - CHAR szTitle [80]; - CHAR szHelp [80]; -} -IHV_UI_REQUEST, *PIHV_UI_REQUEST; - - -DWORD -ConvertHexCharToNibble -( - CHAR chData, - BOOL bUpper, - PBYTE pbtData -) -{ - DWORD dwResult = ERROR_SUCCESS; - BYTE btNibble = 0xF0; - - ASSERT( pbtData ); - - if ( (chData >= '0') && (chData <= '9') ) - { - btNibble = (BYTE) (chData - '0'); - } - else if ( (chData >= 'a') && (chData <= 'f') ) - { - btNibble = (BYTE) (chData - 'a') + 0xA; - } - else if ( (chData >= 'A') && (chData <= 'F') ) - { - btNibble = (BYTE) (chData - 'A') + 0xA; - } - else - { - // Wrong type input - dwResult = ERROR_BAD_FORMAT; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - ASSERT( btNibble < 0xF0 ); - - if ( bUpper ) - { - (*pbtData) = (*pbtData) & 0x0F; - (*pbtData) = (*pbtData) | (btNibble << 4); - } - else - { - (*pbtData) = (*pbtData) & 0xF0; - (*pbtData) = (*pbtData) | btNibble; - } - -error: - return dwResult; -} - - -// For a 13 byte key, user can choose to input upto 26 hex digits - -#define MAX_KEY_STRING_LENGTH 26 - -#define MAX_RESPONSE_SIZE (( MAX_KEY_STRING_LENGTH + 1 ) * sizeof( WCHAR ) ) - -// -// The UI Response is a UNICODE string since -// the UI module has just passed a BSTR to this -// module. This UNICODE string needs to converted -// to a key. Any IHV specific algorithm can be -// used here. -// - -DWORD -ConvertStringToKey -( - BYTE* pbKeyData, - DWORD* pdwKeyLen -) -{ - DWORD dwResult = ERROR_SUCCESS; - HRESULT hr = S_OK; - CHAR szKey[ MAX_KEY_STRING_LENGTH + 2 ] = {0}; - DWORD dwKeyStringLen = 0; - DWORD dwIndex = 0; - - - if - ( - (!pbKeyData) || - (!pdwKeyLen) || - ( 0 == (*pdwKeyLen) ) || - ( (*pdwKeyLen) % sizeof( WCHAR ) ) - ) - { - dwResult = ERROR_INVALID_PARAMETER; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - dwKeyStringLen = (DWORD) wcslen( (LPWSTR) pbKeyData ); - if ( MAX_KEY_STRING_LENGTH < dwKeyStringLen ) - { - dwResult = ERROR_BAD_FORMAT; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // Converting the UNICODE string to - // ANSI string in scratch pad. - hr = - StringCchPrintfA - ( - szKey, - MAX_KEY_STRING_LENGTH + 1, - "%S", - (WCHAR*) pbKeyData - ); - BAIL_ON_FAILURE( hr ); - - ASSERT( dwKeyStringLen == (DWORD) strlen( szKey )); - - - if ( ( 5 == dwKeyStringLen ) || ( 13 == dwKeyStringLen ) ) - { - // Copying the ANSI string back to original buffer. - hr = - StringCchPrintfA - ( - (CHAR*) pbKeyData, - (*pdwKeyLen), - "%s", - szKey - ); - BAIL_ON_FAILURE( hr ); - - // The strings are direct representations - // of the Wep Key and can be directly returned. - (*pdwKeyLen) = dwKeyStringLen; - - TRACE_MESSAGE_VAL( "Received WEP key of length = ", (*pdwKeyLen) ); - - BAIL( ); - } - - if (( 10 != dwKeyStringLen ) && ( 26 != dwKeyStringLen )) - { - // Wrong length input - dwResult = ERROR_BAD_FORMAT; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - for( dwIndex = 0; dwIndex < (dwKeyStringLen / 2); dwIndex++ ) - { - dwResult = - ConvertHexCharToNibble - ( - szKey[ 2 * dwIndex ], - TRUE, - &(pbKeyData[ dwIndex ]) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - dwResult = - ConvertHexCharToNibble - ( - szKey[ 1 + (2 * dwIndex) ], - FALSE, - &(pbKeyData[ dwIndex ]) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - } - - (*pdwKeyLen) = dwKeyStringLen / 2; - - TRACE_MESSAGE_VAL( "Received WEP key of length = ", (*pdwKeyLen) ); - -error: - return WIN32_COMBINED_ERROR( dwResult, hr ); -} - - - - - -// -// Defining UI help strings. In a realistic -// implementation these values would be numbers -// to be interpreted the IHV UI DLL that could -// be converted to strings using resource files. -// -#define UI_TITLE_STRING "Title" -#define UI_HELP_STRING "Help" - - - - -// Send the UI request and wait for the UI response. -DWORD -SendUIRequestToReceiveKey -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwKeyLen, - BYTE** ppbKeyData -) -{ - DWORD dwResult = ERROR_SUCCESS; - DOT11EXT_IHV_UI_REQUEST uiRequest = {0}; - PIHV_UI_REQUEST pIHVRequest = NULL; - CHAR szTitle[] = UI_TITLE_STRING; - CHAR szHelp[] = UI_HELP_STRING; - BOOL bLocked = FALSE; - HANDLE hUIResponse = NULL; - - - - // CLSID of COM class that implements the UI page. In a real - // implementation this GUID could be dynamically obtained. - CLSID uiPageClsid = - { - /* 4A01F9F9-6012-4343-A8C4-10B5DF32672A */ - 0x4A01F9F9, - 0x6012, - 0x4343, - {0xA8, 0xC4, 0x10, 0xB5, 0xDF, 0x32, 0x67, 0x2A} - }; - - ASSERT( pAdapterDetails ); - - // prepare the IHV request. - uiRequest.dwByteCount = sizeof(IHV_UI_REQUEST); - uiRequest.pvUIRequest = (BYTE*) PrivateMemoryAlloc( sizeof(IHV_UI_REQUEST) ); - if ( !(uiRequest.pvUIRequest) ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL( ); - } - - pIHVRequest = (IHV_UI_REQUEST*)uiRequest.pvUIRequest; - - - memcpy( pIHVRequest->szTitle , szTitle , sizeof(szTitle) ); - memcpy( pIHVRequest->szHelp , szHelp , sizeof(szHelp) ); - - uiRequest.dwSessionId = WTSGetActiveConsoleSessionId( ); - uiRequest.UIPageClsid = uiPageClsid; - - // acquire the lock to register the request. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // create new request guid. - dwResult = UuidCreate( &(uiRequest.guidUIRequest) ); - BAIL_ON_WIN32_ERROR(dwResult); - - // free the existing response. - PrivateMemoryFree( pAdapterDetails->pbResponse ); - pAdapterDetails->pbResponse = NULL; - - // register the guid. - pAdapterDetails->currentGuidUIRequest = uiRequest.guidUIRequest; - - // Initializing the event this thread - // would be waiting on later. - ResetEvent( pAdapterDetails->hUIResponse ); - - hUIResponse = pAdapterDetails->hUIResponse; - - // leave the lock since this thread needs - // to wait for the response. - LeaveCriticalSection( &g_csSynch ); - bLocked = FALSE; - - - // send the request. - dwResult = - (g_pDot11ExtApi->Dot11ExtSendUIRequest) - ( - pAdapterDetails->hDot11SvcHandle, - &uiRequest - ); - BAIL_ON_WIN32_ERROR(dwResult); - - TRACE_MESSAGE( "Sent UI request to receive key." ); - - // Waiting for UI response. - // This would be triggered - // off if no UI response - // is received. - dwResult = - WaitForSingleObject - ( - hUIResponse, - 1000 * 60 * 5 // 5 minutes - ); - - // acquire the lock - required for both success and failure. - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - ZeroMemory( &(pAdapterDetails->currentGuidUIRequest), sizeof( GUID ) ); - - if ( WAIT_OBJECT_0 == dwResult ) - { - dwResult = ERROR_SUCCESS; - } - BAIL_ON_WIN32_ERROR(dwResult); - - if ( NULL == pAdapterDetails->pbResponse ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR(dwResult); - } - - - // At this point in the code a response - // has been received, and the thread - // has not been aborted. - - (*ppbKeyData) = pAdapterDetails->pbResponse; - pAdapterDetails->pbResponse = NULL; - - (*pdwKeyLen) = pAdapterDetails->dwResponseLen; - - - // Convert the Unicode string to ASCII. - dwResult = - ConvertStringToKey - ( - *ppbKeyData, - pdwKeyLen - ); - BAIL_ON_WIN32_ERROR(dwResult); - - pAdapterDetails->bModifyCurrentProfile = TRUE; - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - PrivateMemoryFree( uiRequest.pvUIRequest ); - return dwResult; -} - - -// -// Key index limits. -// -#define MIN_KEY_INDEX 0 -#define MAX_KEY_INDEX 3 - - -// -// Perform Wep based pre-association once the key is known. -// -DWORD -WINAPI -DoWepPreAssociateCommon -( - PADAPTER_DETAILS pAdapterDetails, - DWORD dwKeyLen, - BYTE* pbKeyData, - DWORD* pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - LONG lIndex = 0; - PDOT11_CIPHER_DEFAULT_KEY_VALUE pKey = 0; - ULONG uLen = 0; - - ASSERT( pAdapterDetails ); - ASSERT( dwKeyLen ); - ASSERT( pbKeyData ); - ASSERT( pdwReasonCode ); - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_OUTOFMEMORY; - - uLen = FIELD_OFFSET(DOT11_CIPHER_DEFAULT_KEY_VALUE, ucKey) + dwKeyLen * sizeof(UCHAR); - pKey = (PDOT11_CIPHER_DEFAULT_KEY_VALUE) PrivateMemoryAlloc(uLen); - if (!pKey) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR(dwResult); - } - CopyMemory( &(pKey->ucKey), pbKeyData, dwKeyLen ); - - // Prepare the key. - pKey->AlgorithmId = DOT11_CIPHER_ALGO_WEP; - pKey->usKeyLength = (USHORT) dwKeyLen; - pKey->bStatic = TRUE; - pKey->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - pKey->Header.Revision = DOT11_CIPHER_DEFAULT_KEY_VALUE_REVISION_1; - pKey->Header.Size = sizeof(DOT11_CIPHER_DEFAULT_KEY_VALUE); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_INVALID_STATE; - - if ( nic_state_pre_assoc_started != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_HARDWARE_FAILURE; - - // plumb the settings and keys down. - - TRACE_MESSAGE( "Setting Auth Algorithm." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetAuthAlgorithm) - ( - pAdapterDetails->hDot11SvcHandle, - DOT11_AUTH_ALGO_80211_OPEN - ); - BAIL_ON_WIN32_ERROR(dwResult); - - TRACE_MESSAGE( "Setting Unicast cipher algorithm." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetUnicastCipherAlgorithm) - ( - pAdapterDetails->hDot11SvcHandle, - DOT11_CIPHER_ALGO_WEP - ); - BAIL_ON_WIN32_ERROR(dwResult); - - TRACE_MESSAGE( "Setting exclude unencrypted flag." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetExcludeUnencrypted) - ( - pAdapterDetails->hDot11SvcHandle, - TRUE - ); - BAIL_ON_WIN32_ERROR(dwResult); - - for ( lIndex = MAX_KEY_INDEX; lIndex >= MIN_KEY_INDEX; lIndex-- ) - { - pKey->uKeyIndex = lIndex; - - TRACE_MESSAGE( "Setting default key." ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtSetDefaultKey) - ( - pAdapterDetails->hDot11SvcHandle, - pKey, - DOT11_DIR_BOTH - ); - BAIL_ON_WIN32_ERROR(dwResult); - } - - TRACE_MESSAGE( "Setting default key ID." ); - dwResult = - (g_pDot11ExtApi->Dot11ExtSetDefaultKeyId) - ( - pAdapterDetails->hDot11SvcHandle, - 0 - ); - BAIL_ON_WIN32_ERROR(dwResult); - - - // Verified before, just after acquiring lock. - ASSERT( nic_state_pre_assoc_started == pAdapterDetails->NicState ); - - pAdapterDetails->NicState = nic_state_pre_assoc_ended; - - // Reason code is set to SUCCESS. - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - - // register the post-association handlers with the adapter. - - pAdapterDetails->pPerformPostAssociateCompletionRoutine = DoWepPostAssociate; - pAdapterDetails->pPerformPostAssociateRoutine = NULL; - pAdapterDetails->pStopPostAssociateRoutine = NULL; - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - PrivateMemoryFree( pKey ); - return dwResult; -} - - -// Pre-association when the profile does not have the key. -DWORD -WINAPI -DoMissingKeyWepPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwKeyLen = ERROR_SUCCESS; - BYTE* pbKeyData = NULL; - - ASSERT( pAdapterDetails ); - ASSERT( pdwReasonCode ); - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_BAD_USER_KEY; - - // Possible enhancement - try to call Dot11ExtGetProfileCustomUserData - // function in IHV Framework to see if the key is - // available there. Else, send UI Request. - - - // try to obtain the key through an UI request. - dwResult = - SendUIRequestToReceiveKey - ( - pAdapterDetails, - &dwKeyLen, - &pbKeyData - ); - BAIL_ON_WIN32_ERROR(dwResult); - - ASSERT ( pbKeyData ); - ASSERT ( dwKeyLen ); - - // use the key for connection. - dwResult = - DoWepPreAssociateCommon - ( - pAdapterDetails, - dwKeyLen, - pbKeyData, - pdwReasonCode - ); - BAIL_ON_WIN32_ERROR(dwResult); - - - // Possible enhancement - try to call Dot11ExtSetProfileCustomUserData - // to store the key if the key was obtained by a UI request. - -error: - PrivateMemoryFree( pbKeyData ); - return dwResult; -} - - - - - - - -// Pre-association when the profile does have the key. -DWORD -WINAPI -DoWepPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - BOOL bLocked = FALSE; - DWORD dwKeyLen = ERROR_SUCCESS; - CHAR szKey[MAX_RESPONSE_SIZE+1] = {0}; - - ASSERT( pAdapterDetails ); - ASSERT( pdwReasonCode ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_BAD_USER_KEY; - - if - ( - (!( pAdapterDetails->pConnectivityProfile )) || - (!( pAdapterDetails->pConnectivityProfile->pszParam2 )) || - ( 0 == pAdapterDetails->pConnectivityProfile->pszParam2[0] ) - ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR(dwResult); - } - - // Convert the profile string to a usable key. - dwKeyLen = (DWORD)wcslen( pAdapterDetails->pConnectivityProfile->pszParam2 ); - dwKeyLen = sizeof(WCHAR) * ( 1 + dwKeyLen ); - - if ( dwKeyLen > sizeof( szKey ) ) - { - dwResult = ERROR_BAD_PROFILE; - BAIL_ON_WIN32_ERROR(dwResult); - } - - - // Copy string. - CopyMemory - ( - (BYTE*) szKey, - pAdapterDetails->pConnectivityProfile->pszParam2, - dwKeyLen - ); - - // Convert UNICODE to ASCII. - dwResult = - ConvertStringToKey - ( - (BYTE*) szKey, - &dwKeyLen - ); - BAIL_ON_WIN32_ERROR(dwResult); - ASSERT ( dwKeyLen ); - - - // Do pre-association with the key in the profile. - dwResult = - DoWepPreAssociateCommon - ( - pAdapterDetails, - dwKeyLen, - (BYTE*) szKey, - pdwReasonCode - ); - BAIL_ON_WIN32_ERROR(dwResult); - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - - - -extern -DOT11EXT_IHV_DISCOVERY_PROFILE -g_IhvDiscoveryProfiles[]; - - -// -// This function is responsible for the post association -// operations and completing the post association call -// for WEP scenario. -// -DWORD -WINAPI -DoWepPostAssociate -( - LPVOID pvPostAssociate -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwStatus = ERROR_SUCCESS; - DWORD dwReasonCode = L2_REASON_CODE_IHV_INVALID_STATE; - BOOL bLocked = FALSE; - PPOST_ASSOC_DATA ppostAssocData = (PPOST_ASSOC_DATA) pvPostAssociate; - PADAPTER_DETAILS pAdapterDetails = NULL; - - - ASSERT( ppostAssocData ); - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - dwResult = - ReferenceAdapterDetails - ( - ppostAssocData->hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - if ( nic_state_post_assoc_started != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - // This could be an appropriate place to modify the current profile - - if ( pAdapterDetails->bModifyCurrentProfile ) - { - pAdapterDetails->bModifyCurrentProfile = FALSE; - - dwResult = - (g_pDot11ExtApi->Dot11ExtSetCurrentProfile) - ( - pAdapterDetails->hDot11SvcHandle, - pAdapterDetails->hConnectSession, - &(g_IhvDiscoveryProfiles[1].IhvConnectivityProfile), - &(g_IhvDiscoveryProfiles[1].IhvSecurityProfile) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - - - // In wep connection case, function only changes the adapter state. - pAdapterDetails->NicState = nic_state_post_assoc_ended; - - - // Reason Code is set to success. - dwReasonCode = L2_REASON_CODE_SUCCESS; - -error: - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( ppostAssocData->hIhvExtAdapter ); - } - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - - // call completion function. - dwStatus = - (g_pDot11ExtApi->Dot11ExtPostAssociateCompletion) - ( - ppostAssocData->hDot11SvcHandle, - ppostAssocData->hSecuritySessionId, - NULL, - dwReasonCode, - dwResult - ); - if ( ERROR_SUCCESS != dwStatus ) - { - // IHV specific logging can happen here. - } - PrivateMemoryFree( ppostAssocData ); - return dwResult; -} - - -// no op function for preassociation when -// ihv is used only for connectivity. in a -// realistic implementation there would probably -// be calls to Dot11ExtNicSpecificExtension -// in this function to prepare the driver for -// additional connectivity settings. -DWORD -WINAPI -DoIhvConnPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwKeyLen = 0; - PBYTE pbKeyData = NULL; - BOOL bLocked = FALSE; - - ASSERT( pAdapterDetails ); - ASSERT( pdwReasonCode ); - - // try to send UI request to obtain some data that could be useful here. - // the sample does not really use the data. - dwResult = - SendUIRequestToReceiveKey - ( - pAdapterDetails, - &dwKeyLen, - &pbKeyData - ); - BAIL_ON_WIN32_ERROR(dwResult); - ASSERT ( pbKeyData ); - - PrivateMemoryFree( pbKeyData ); - pbKeyData = NULL; - - // try to send UI request to obtain some data that could be useful here. - // the sample does not really use the data. - dwResult = - SendUIRequestToReceiveKey - ( - pAdapterDetails, - &dwKeyLen, - &pbKeyData - ); - BAIL_ON_WIN32_ERROR(dwResult); - ASSERT ( pbKeyData ); - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - // Reason code is set before making calls that could fail. - (*pdwReasonCode) = L2_REASON_CODE_IHV_INVALID_STATE; - - if ( nic_state_pre_assoc_started != pAdapterDetails->NicState ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - pAdapterDetails->NicState = nic_state_pre_assoc_ended; - - // Reason code is set to SUCCESS. - (*pdwReasonCode) = L2_REASON_CODE_SUCCESS; - - pAdapterDetails->pPerformPostAssociateCompletionRoutine = NULL; - pAdapterDetails->pPerformPostAssociateRoutine = NULL; - pAdapterDetails->pStopPostAssociateRoutine = NULL; - -error: - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - PrivateMemoryFree( pbKeyData ); - return dwResult; -} diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.h b/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.h deleted file mode 100644 index d8aabe71..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep.h +++ /dev/null @@ -1,62 +0,0 @@ - -// -// Structure to marshal information for -// postassociation thread. -// -typedef -struct _POST_ASSOC_DATA -{ - HANDLE hIhvExtAdapter; - HANDLE hDot11SvcHandle; - HANDLE hSecuritySessionId; -} -POST_ASSOC_DATA, *PPOST_ASSOC_DATA; - - -// Pre-association when the profile does have the key. -DWORD -WINAPI -DoWepPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -); - - -// Pre-association when the profile does not have the key. -DWORD -WINAPI -DoMissingKeyWepPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -); - - -// no op function for preassociation when -// ihv is used only for connectivity. in a -// realistic implementation there would probably -// be calls to Dot11ExtNicSpecificExtension -// in this function to prepare the driver for -// additional connectivity settings. -DWORD -WINAPI -DoIhvConnPreAssociate -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -); - - -// This function is responsible for the post association -// operations and completing the post association call -// for WEP scenario. -DWORD -WINAPI -DoWepPostAssociate -( - LPVOID pvPostAssociate -); - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep1.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep1.xml deleted file mode 100644 index 2e4403f9..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep1.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - ihvwep1 - - - - _SSID_ - - - - ESS - manual - - - - - - - - - - 123456 - 01 - - - - - - 0 - - - - - - - - - - TRUE - - IHVAuthV1 - - IHVCipher1 - - 0 - - - - - - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep2.xml b/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep2.xml deleted file mode 100644 index 32b538ba..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/ihvwep2.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - ihvwep2 - - - - _SSID_ - - - - ESS - manual - - - - - - - - - - 123456 - 01 - - - - - - 0 - - _KEY_ - - - - - - - - TRUE - - IHVAuthV1 - - IHVCipher1 - - 0 - - - - - - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/precomp.h b/network/wlan/Native Wifi IHV Service/ihvsample/precomp.h deleted file mode 100644 index 244ad664..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/precomp.h +++ /dev/null @@ -1,36 +0,0 @@ - -#ifndef __WLAN_IHV_SAMPLE_PRECOMP_H__ -#define __WLAN_IHV_SAMPLE_PRECOMP_H__ - - -#pragma once - -#include -_Analysis_mode_(_Analysis_code_type_user_code_) - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "profile.h" -#include "utils.h" -#include "ihvwep.h" -#include "ihvonexext.h" -#include "adapters.h" -#include "rc4utils.h" -#include "ihvsample.h" - -#ifdef __cplusplus -#include -#endif - - - -#endif // __WLAN_IHV_SAMPLE_PRECOMP_H__ - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/precompsrc.c b/network/wlan/Native Wifi IHV Service/ihvsample/precompsrc.c deleted file mode 100644 index 5944cf51..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/precompsrc.c +++ /dev/null @@ -1 +0,0 @@ -#include "precomp.h" \ No newline at end of file diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/profile.cpp b/network/wlan/Native Wifi IHV Service/ihvsample/profile.cpp deleted file mode 100644 index c6988990..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/profile.cpp +++ /dev/null @@ -1,1222 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - - - - -// -// Free BSTR -// -#define SYS_FREE_STRING( _s ) \ - if ( _s ) \ - { \ - SysFreeString( _s ); \ - (_s) = NULL; \ - } \ - - -// -// Release interface. -// -#define RELEASE_INTERFACE( _p ) \ - if ( _p ) \ - { \ - (_p)->Release( ); \ - (_p) = NULL; \ - } \ - - -// XPath strings for parsing xml blobs, - -#define CON_PARAM1_XPATH L"/IhvConnectivity/IHVConnectivityParam1" -#define CON_PARAM2_XPATH L"/IhvConnectivity/IHVConnectivityParam2" - - -#define SEC_FSFLAG_XPATH L"/IhvSecurity/IHVUsesFullSecurity" -#define SEC_ATYPE_XPATH L"/IhvSecurity/IHVAuthentication" -#define SEC_ETYPE_XPATH L"/IhvSecurity/IHVEncryption" -#define SEC_PARAM1_XPATH L"/IhvSecurity/IHVSecurityParam1" -#define SEC_PARAM2_XPATH L"/IhvSecurity/IHVSecurityParam2" - - -// Strings to match the profile with internal data types. -LPCWSTR -gppszIhvAuthTypes[] = -{ - L"IHVAuthV1", - L"IHVAuthV2", - L"IHVAuthV3" -}; - - -LPCWSTR -gppszIhvCipherTypes[] = -{ - L"None", - L"IHVCipher1", - L"IHVCipher2", - L"IHVCipher3" -}; - - -// -// Base class for profile APIs. -// -class CIhvProfileBase -{ -public: - - // Constructor - CIhvProfileBase( ) - { - m_pRootNode = NULL; - } - - // Destructor - ~CIhvProfileBase( ) - { - RELEASE_INTERFACE( m_pRootNode ); - } - - HRESULT - LoadXml - ( - IN BSTR bstrIhvProfile - ); - - - // Caller needs to know what type to - // cast the pointer to depending upon - // the type of the derived class. - // Caller needs to free memory recursively - // by using the free( ) function. - virtual - HRESULT - GetNativeData - ( - LPVOID* ppvData - ) - = 0; - -protected: - - HRESULT - GetTextFromNode - ( - IN LPCWSTR pszQuery, - OUT BSTR* pbstrText - ); - - - IXMLDOMElement* m_pRootNode; - -}; - - - - - -// -// Derived class for connectivity profiles. -// -class CIhvConnectivityProfile : public CIhvProfileBase -{ - -public: - - // Constructor Destructor - CIhvConnectivityProfile( ) { } - ~CIhvConnectivityProfile( ) { } - - // Caller needs to know what type to - // cast the pointer to depending upon - // the type of the derived class. - // Caller needs to free memory recursively - // by using the PrivateMemoryFree( ) function. - HRESULT - GetNativeData - ( - LPVOID* ppvData - ); - - - // Accessor dwParam1 - HRESULT - GetParam1 - ( - DWORD* pdwParam1 - ); - - - // Accessor for pszParam2 - HRESULT - GetParam2 - ( - BSTR* pbstrValue - ); - - -}; - - - - - - -// -// Derived class for security profiles. -// - -class CIhvSecurityProfile - : public CIhvProfileBase -{ - -public: - - // Constructor Destructor - CIhvSecurityProfile( ) { } - ~CIhvSecurityProfile( ) { } - - // Caller needs to know what type to - // cast the pointer to depending upon - // the type of the derived class. - // Caller needs to free memory recursively - // by using the PrivateMemoryFree( ) function. - HRESULT - GetNativeData - ( - LPVOID* ppvData - ); - - - // Accessor and Modifier for bUseFullSecurity - HRESULT - GetFullSecurityFlag - ( - BOOL* pbUseFullSecurity - ); - - - // Accessor for AuthType - HRESULT - GetAuthType - ( - PIHV_AUTH_TYPE pAuthType - ); - - // Accessor for CipherType - HRESULT - GetCipherType - ( - PIHV_CIPHER_TYPE pCipherType - ); - - // Accessor for dwParam1 - HRESULT - GetParam1 - ( - DWORD* pdwParam1 - ); - - // Accessor for pszParam2 - HRESULT - GetParam2 - ( - BSTR* pbstrValue - ); - -}; - - -// Convert unicode string to BSTR. NULL safe. -HRESULT -Wstr2Bstr -( - _In_ LPCWSTR pszSrc, - _Outptr_ BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - - if ( !pbstrDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - (*pbstrDest) = NULL; - if ( !pszSrc ) - { - BAIL( ); - } - - (*pbstrDest) = SysAllocString( pszSrc ); - if ( !(*pbstrDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - - - - -// Convert unicode string to unicode string. NULL safe. -// string allocated by malloc and freed by free. -HRESULT -Wstr2Wstr -( - _In_ LPCWSTR pszSrc, - _Outptr_ LPWSTR* ppszDest -) -{ - HRESULT hr = S_OK; - size_t len = 0; - - if ( !ppszDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - (*ppszDest) = NULL; - if ( !pszSrc ) - { - BAIL( ); - } - - len = 1 + wcslen( pszSrc ); - len *= sizeof( WCHAR ); - - (*ppszDest) = (LPWSTR) PrivateMemoryAlloc( len ); - if ( !(*ppszDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - - CopyMemory( (*ppszDest), pszSrc, len ); - -error: - return hr; -} - - - -// -// convert unicode string to DWORD -// -HRESULT -Wstr2Dword -( - _In_ LPCWSTR pszSrc, - _Out_ DWORD* pdwDest -) -{ - HRESULT hr = S_OK; - - if ( (!pdwDest) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - (*pdwDest) = (DWORD) _wtol( pszSrc ); - -error: - return hr; -} - - - - -// -// convert unicode string to BOOL -// -HRESULT -Wstr2Bool -( - _In_ LPCWSTR pszSrc, - _Out_ BOOL* pbDest -) -{ - HRESULT hr = S_OK; - - if ( (!pbDest) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( 0 == wcscmp( L"TRUE", pszSrc ) ) - { - (*pbDest) = TRUE; - } - else if ( 0 == wcscmp( L"FALSE", pszSrc ) ) - { - (*pbDest) = FALSE; - } - else - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - - - - - - - -// -// convert unicode string to auth type -// -HRESULT -Wstr2AuthType -( - _In_ LPCWSTR pszSrc, - _Out_ PIHV_AUTH_TYPE pAuthType -) -{ - HRESULT hr = S_OK; - DWORD dwIndex = 0; - - if ( (!pAuthType) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - for ( dwIndex = 0; dwIndex < MAX_AUTH_TYPES; dwIndex++ ) - { - if ( 0 == wcscmp( gppszIhvAuthTypes[dwIndex], pszSrc ) ) - { - (*pAuthType) = (IHV_AUTH_TYPE) dwIndex; - BAIL( ); - } - } - - // String not found. - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - - - - - - -// -// convert unicode string to cipher type -// -HRESULT -Wstr2CipherType -( - _In_ LPCWSTR pszSrc, - _Out_ PIHV_CIPHER_TYPE pCipherType -) -{ - HRESULT hr = S_OK; - DWORD dwIndex = 0; - - if ( (!pCipherType) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - for ( dwIndex = 0; dwIndex < MAX_CIPHER_TYPES; dwIndex++ ) - { - if ( 0 == wcscmp( gppszIhvCipherTypes[dwIndex], pszSrc ) ) - { - (*pCipherType) = (IHV_CIPHER_TYPE) dwIndex; - BAIL( ); - } - } - - // String not found. - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - - - -// base function to obtain text from -// node described by XPATH. -HRESULT -CIhvProfileBase::GetTextFromNode -( - IN LPCWSTR pszQuery, - OUT BSTR* pbstrText -) -{ - HRESULT hr = S_OK; - BSTR bstrQuery = NULL; - IXMLDOMNode* pQueryNode = NULL; - - ASSERT( pszQuery ); - ASSERT( pbstrText ); - - // if node is NULL, return empty string. - if ( !m_pRootNode ) - { - hr = - Wstr2Bstr - ( - L"", - pbstrText - ); - BAIL( ); - } - - hr = - Wstr2Bstr - ( - pszQuery, - &bstrQuery - ); - BAIL_ON_FAILURE( hr ); - - hr = m_pRootNode->selectSingleNode( bstrQuery, &pQueryNode ); - BAIL_ON_FAILURE( hr ); - - if (!pQueryNode) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = pQueryNode->get_text( pbstrText ); - BAIL_ON_FAILURE( hr ); - - if ( !(*pbstrText) ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - -error: - RELEASE_INTERFACE( pQueryNode ); - SYS_FREE_STRING( bstrQuery ); - return hr; -} - - - -// Load node from xml string. If xml string is null this -// function is a NO_OP. -HRESULT -CIhvProfileBase::LoadXml -( - IN BSTR bstrIhvProfile -) -{ - HRESULT hr = S_OK; - IXMLDOMDocument* pDOMDoc = NULL; - IXMLDOMElement* pDocElem = NULL; - VARIANT_BOOL vfSuccess; - - if ( m_pRootNode ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - if ( !bstrIhvProfile ) - { - BAIL( ); - } - - hr = - CoCreateInstance - ( - CLSID_DOMDocument, - NULL, - CLSCTX_ALL, - IID_IXMLDOMDocument, - (LPVOID *) &pDOMDoc - ); - BAIL_ON_FAILURE( hr ); - - hr = - pDOMDoc->loadXML - ( - bstrIhvProfile, - &vfSuccess - ); - BAIL_ON_FAILURE( hr ); - - if ( VARIANT_TRUE != vfSuccess ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = - pDOMDoc->get_documentElement - ( - &pDocElem - ); - BAIL_ON_FAILURE( hr ); - - // Caching the pointer to the document element - // in a member variable. - m_pRootNode = pDocElem; - pDocElem = NULL; - - -error: - RELEASE_INTERFACE( pDOMDoc ); - RELEASE_INTERFACE( pDocElem ); - return hr; -} - - - - - -// Accessor. -HRESULT -CIhvConnectivityProfile::GetParam1 -( - DWORD* pdwParam1 -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - CON_PARAM1_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrData ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Dword - ( - bstrData, - pdwParam1 - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - - -// Accessor. -HRESULT -CIhvConnectivityProfile::GetParam2 -( - BSTR* pbstrValue -) -{ - HRESULT hr = S_OK; - - hr = - GetTextFromNode - ( - CON_PARAM2_XPATH, - pbstrValue - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - - - -// -// Calls the accessors to build native data. -// -HRESULT -CIhvConnectivityProfile::GetNativeData -( - LPVOID* ppvData -) -{ - HRESULT hr = S_OK; - PIHV_CONNECTIVITY_PROFILE pIhvProfile = NULL; - BSTR bstrParam2 = NULL; - - if ( !ppvData ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - pIhvProfile = (PIHV_CONNECTIVITY_PROFILE) PrivateMemoryAlloc( sizeof( IHV_CONNECTIVITY_PROFILE ) ); - if ( !pIhvProfile ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - - // Ignoring errors since structure is already - // populated with defaults. - - hr = - GetParam2 - ( - &bstrParam2 - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrParam2 ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Wstr - ( - bstrParam2, - &(pIhvProfile->pszParam2) - ); - BAIL_ON_FAILURE( hr ); - - hr = - GetParam1 - ( - &(pIhvProfile->dwParam1) - ); - - // Consuming earlier failures. - hr = S_OK; - - // Transfering local cache to OUT parameter. - (*ppvData) = pIhvProfile; - pIhvProfile = NULL; - -error: - if ( pIhvProfile ) - { - PrivateMemoryFree( pIhvProfile->pszParam2 ); // NULL Safe. - PrivateMemoryFree( pIhvProfile ); - } - SYS_FREE_STRING( bstrParam2 ); - return hr; -} - - - - - -// Accessor. -HRESULT -CIhvSecurityProfile::GetFullSecurityFlag -( - BOOL* pbUseFullSecurity -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_FSFLAG_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrData ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Bool - ( - bstrData, - pbUseFullSecurity - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - - - - -// Accessor. -HRESULT -CIhvSecurityProfile::GetAuthType -( - PIHV_AUTH_TYPE pAuthType -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_ATYPE_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrData ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2AuthType - ( - bstrData, - pAuthType - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - - - -// Accessor. -HRESULT -CIhvSecurityProfile::GetCipherType -( - PIHV_CIPHER_TYPE pCipherType -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_ETYPE_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrData ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2CipherType - ( - bstrData, - pCipherType - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - - - - -// Accessor. -HRESULT -CIhvSecurityProfile::GetParam1 -( - DWORD* pdwParam1 -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_PARAM1_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrData ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Dword - ( - bstrData, - pdwParam1 - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - - - - - -// Accessor. -HRESULT -CIhvSecurityProfile::GetParam2 -( - BSTR* pbstrValue -) -{ - HRESULT hr = S_OK; - - hr = - GetTextFromNode - ( - SEC_PARAM2_XPATH, - pbstrValue - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - -// -// Calls the accessors to build native data. -// -HRESULT -CIhvSecurityProfile::GetNativeData -( - LPVOID* ppvData -) -{ - HRESULT hr = S_OK; - PIHV_SECURITY_PROFILE pIhvProfile = NULL; - BSTR bstrParam2 = NULL; - - if ( !ppvData ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - pIhvProfile = (PIHV_SECURITY_PROFILE) PrivateMemoryAlloc( sizeof( IHV_SECURITY_PROFILE ) ); - if ( !pIhvProfile ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - - pIhvProfile->bUseIhvConnectivityOnly = ( m_pRootNode == NULL ); - - // Ignoring errors since structure is already - // populated with defaults. - hr = - GetFullSecurityFlag - ( - &(pIhvProfile->bUseFullSecurity) - ); - - hr = - GetAuthType - ( - &(pIhvProfile->AuthType) - ); - - hr = - GetCipherType - ( - &(pIhvProfile->CipherType) - ); - - hr = - GetParam1 - ( - &(pIhvProfile->dwParam1) - ); - - hr = - GetParam2 - ( - &bstrParam2 - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrParam2 ) - { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Wstr - ( - bstrParam2, - &(pIhvProfile->pszParam2) - ); - - // Consuming earlier failures. - hr = S_OK; - - // Transfering local cache to OUT parameter. - (*ppvData) = pIhvProfile; - pIhvProfile = NULL; - -error: - if ( pIhvProfile ) - { - PrivateMemoryFree( pIhvProfile->pszParam2 ); // NULL Safe. - PrivateMemoryFree( pIhvProfile ); - } - SYS_FREE_STRING( bstrParam2 ); - return hr; -} - - -// Converts string to connectivity profile. -DWORD -GetIhvConnectivityProfile -( - PDOT11EXT_IHV_CONNECTIVITY_PROFILE pDot11ExtIhvConnProfile, - PIHV_CONNECTIVITY_PROFILE* ppConnectivityProfile -) -{ - HRESULT hr = S_OK; - BOOL bComInitialized = FALSE; - BSTR bstrIhvProfile = NULL; - PIHV_CONNECTIVITY_PROFILE pConnectivityProfile = NULL; - - CIhvConnectivityProfile* pIhvProfile = NULL; - - ASSERT( pDot11ExtIhvConnProfile ); - ASSERT( ppConnectivityProfile ); - - - // Data structure is multi-thread safe because - // it is both allocated and freed by current - // function. - hr = - CoInitializeEx - ( - NULL, - COINIT_MULTITHREADED - ); - BAIL_ON_FAILURE( hr ); - bComInitialized = TRUE; - - - pIhvProfile = new(std::nothrow) CIhvConnectivityProfile; - if (!pIhvProfile) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Bstr - ( - pDot11ExtIhvConnProfile->pszXmlFragmentIhvConnectivity, - &bstrIhvProfile - ); - BAIL_ON_FAILURE( hr ); - - hr = - pIhvProfile->LoadXml - ( - bstrIhvProfile - ); - BAIL_ON_FAILURE( hr ); - - hr = - pIhvProfile->GetNativeData - ( - (LPVOID*) &pConnectivityProfile - ); - BAIL_ON_FAILURE( hr ); - - - (*ppConnectivityProfile) = pConnectivityProfile; - pConnectivityProfile = NULL; - - -error: - SYS_FREE_STRING( bstrIhvProfile ); - - FreeIhvConnectivityProfile ( &pConnectivityProfile ); - - delete pIhvProfile; - - if ( bComInitialized ) - { - CoUninitialize( ); - } - return WIN32_FROM_HRESULT( hr ); -} - - - - -// free connectivity profile. - -VOID -FreeIhvConnectivityProfile -( - PIHV_CONNECTIVITY_PROFILE* ppConnectivityProfile -) -{ - if ( ppConnectivityProfile && (*ppConnectivityProfile) ) - { - PrivateMemoryFree( (*ppConnectivityProfile)->pszParam2 ); - PrivateMemoryFree( (*ppConnectivityProfile) ); - (*ppConnectivityProfile) = NULL; - } -} - - -// Converts string to security profile. -DWORD -GetIhvSecurityProfile -( - PDOT11EXT_IHV_SECURITY_PROFILE pDot11ExtIhvSecProfile, - PIHV_SECURITY_PROFILE* ppSecurityProfile -) -{ - HRESULT hr = S_OK; - BOOL bComInitialized = FALSE; - BSTR bstrIhvProfile = NULL; - PIHV_SECURITY_PROFILE pSecurityProfile = NULL; - - CIhvSecurityProfile* pIhvProfile = NULL; - - ASSERT( pDot11ExtIhvSecProfile ); - ASSERT( ppSecurityProfile ); - - - // Data structure is multi-thread safe because - // it is both allocated and freed by current - // function. - hr = - CoInitializeEx - ( - NULL, - COINIT_MULTITHREADED - ); - BAIL_ON_FAILURE( hr ); - bComInitialized = TRUE; - - - - pIhvProfile = new(std::nothrow) CIhvSecurityProfile; - if (!pIhvProfile) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Bstr - ( - pDot11ExtIhvSecProfile->pszXmlFragmentIhvSecurity, - &bstrIhvProfile - ); - BAIL_ON_FAILURE( hr ); - - hr = - pIhvProfile->LoadXml - ( - bstrIhvProfile - ); - BAIL_ON_FAILURE( hr ); - - hr = - pIhvProfile->GetNativeData - ( - (LPVOID*) &pSecurityProfile - ); - BAIL_ON_FAILURE( hr ); - - if ( pDot11ExtIhvSecProfile->bUseMSOnex && pSecurityProfile->bUseFullSecurity ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - (*ppSecurityProfile) = pSecurityProfile; - pSecurityProfile = NULL; - - -error: - SYS_FREE_STRING( bstrIhvProfile ); - - FreeIhvSecurityProfile ( &pSecurityProfile ); - - delete pIhvProfile; - - if ( bComInitialized ) - { - CoUninitialize( ); - } - return WIN32_FROM_HRESULT( hr ); -} - - - - - -// free security profile. -VOID -FreeIhvSecurityProfile -( - PIHV_SECURITY_PROFILE* ppSecurityProfile -) -{ - if ( ppSecurityProfile && (*ppSecurityProfile) ) - { - PrivateMemoryFree( (*ppSecurityProfile)->pszParam2 ); - PrivateMemoryFree( (*ppSecurityProfile) ); - (*ppSecurityProfile) = NULL; - } -} diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/profile.h b/network/wlan/Native Wifi IHV Service/ihvsample/profile.h deleted file mode 100644 index cf676908..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/profile.h +++ /dev/null @@ -1,108 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#pragma once - -#ifndef _IHVSAMPLEPROFILE_H -#define _IHVSAMPLEPROFILE_H - - - -#define MAX_AUTH_TYPES 3 - - -// IHV Auth types -typedef enum _IHV_AUTH_TYPE -{ - IHVAuthV1, - IHVAuthV2, - IHVAuthV3, - IHVAuthInvalid -} -IHV_AUTH_TYPE, *PIHV_AUTH_TYPE; - - -#define MAX_CIPHER_TYPES 4 - - -// IHV cipher types -typedef enum _IHV_CIPHER_TYPE -{ - None, - IHVCipher1, - IHVCipher2, - IHVCipher3, - IHVCipherInvalid -} -IHV_CIPHER_TYPE, *PIHV_CIPHER_TYPE; - - - - - -// Ihv connectivity profile data type. -typedef -struct _IHV_CONNECTIVITY_PROFILE -{ - DWORD dwParam1; - LPWSTR pszParam2; -} -IHV_CONNECTIVITY_PROFILE, *PIHV_CONNECTIVITY_PROFILE; - - - - - - -// Ihv security profile data type. -typedef struct _IHV_SECURITY_PROFILE -{ - BOOL bUseIhvConnectivityOnly; - BOOL bUseFullSecurity; - IHV_AUTH_TYPE AuthType; - IHV_CIPHER_TYPE CipherType; - DWORD dwParam1; - LPWSTR pszParam2; -} -IHV_SECURITY_PROFILE, *PIHV_SECURITY_PROFILE; - - - -// Converts string to connectivity profile. -DWORD -GetIhvConnectivityProfile -( - PDOT11EXT_IHV_CONNECTIVITY_PROFILE pDot11ExtIhvConnProfile, - PIHV_CONNECTIVITY_PROFILE* ppConnectivityProfile -); - - -// free connectivity profile. -VOID -FreeIhvConnectivityProfile -( - PIHV_CONNECTIVITY_PROFILE* ppConnectivityProfile -); - - -// Converts string to security profile. -DWORD -GetIhvSecurityProfile -( - PDOT11EXT_IHV_SECURITY_PROFILE pDot11ExtIhvSecProfile, - PIHV_SECURITY_PROFILE* ppSecurityProfile -); - - -// free security profile. -VOID -FreeIhvSecurityProfile -( - PIHV_SECURITY_PROFILE* ppSecurityProfile -); - - -#endif _IHVSAMPLEPROFILE_H - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/rc4utils.h b/network/wlan/Native Wifi IHV Service/ihvsample/rc4utils.h deleted file mode 100644 index 41ff9936..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/rc4utils.h +++ /dev/null @@ -1,67 +0,0 @@ - -#pragma once - -#ifdef __cplusplus -extern "C" { -#endif - - - -#include - -typedef struct EAPOL_PACKET -{ - BYTE ProtocolVersion; - BYTE PacketType; - BYTE PacketBodyLength[2]; - BYTE PacketBody[1]; -} EAPOL_PACKET, *UNALIGNED PEAPOL_PACKET; - -#include - - -VOID -WINAPI -RC4UtilsFreeKeyMaterial -( - PBYTE pbDecryptedKey, - DWORD dwKeyLen -); - - -DWORD -WINAPI -RC4UtilsParseKeyPacket -( - PEAPOL_PACKET pEapolPkt, - ULONG uPktLen, - PDOT11_MSONEX_RESULT_PARAMS pOneXResultParams, - BOOL* pbUCast, - PBYTE* ppbDecryptedKey, - DWORD* pdwKeyLen, - DWORD* pdwKeyIndex -); - - - -DWORD -WINAPI -RC4UtilsDecryptResultParams -( - PDOT11_MSONEX_RESULT_PARAMS pResultParamsOrig, - PDOT11_MSONEX_RESULT_PARAMS* ppResultParamsCopy -); - - -VOID -WINAPI -RC4UtilsFreeResultParams -( - PDOT11_MSONEX_RESULT_PARAMS* ppResultParams -); - - -#ifdef __cplusplus -} -#endif - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/utils.cpp b/network/wlan/Native Wifi IHV Service/ihvsample/utils.cpp deleted file mode 100644 index f7dae91e..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/utils.cpp +++ /dev/null @@ -1,662 +0,0 @@ -/*++ - -Copyright (c) 2005 Microsoft Corporation - -Abstract: - - Sample IHV Extensibility DLL to extend - 802.11 LWF driver for third party protocols. - - ---*/ - -#include "precomp.h" - -// -// Service specific global Variables -// -PDOT11EXT_APIS g_pDot11ExtApi = NULL; - -CRITICAL_SECTION g_csSynch = {0}; -DWORD g_dwThreadCount = 0; -DWORD g_dwSessionID = 0; -BOOL g_bAllowInit = TRUE; - - - - -// -// Structure to store data -// required to start a new -// thread. The thread count -// needs to be protected. -// -typedef -struct _THREAD_PROTECTOR -{ - LPTHREAD_START_ROUTINE pStartRoutine; - LPVOID pvParams; - HANDLE hIhvExtAdapter; -} -THREAD_PROTECTOR, *PTHREAD_PROTECTOR; - - - -// -// Logical copy function macro. -// -#define COPY_FUNCTION( _p, _FuncName, _Preface ) \ - (_p)->Dot11ExtIhv##_FuncName = \ - _Preface##_FuncName; \ - - - -// -// Trace utility function -// -VOID -SampleTraceFn -( - LPCSTR pszFormat, - LPCSTR pszVal1, - DWORD dwVal1 -) -{ - CHAR szMsgString[ 512 ] = {0}; - HRESULT hr = S_OK; - - hr = - StringCchPrintfA - ( - szMsgString, - sizeof( szMsgString ) - 1, - pszFormat, - pszVal1, - dwVal1 - ); - - if ( S_OK == hr ) - { - OutputDebugStringA( szMsgString ); - } - else - { - OutputDebugStringA( "ERROR: Trace message generation failed.\n" ); - } - - return; -} - -// Private Memory alloc function -LPVOID -PrivateMemoryAlloc -( - size_t MemSize -) -{ - LPVOID pvBuffer = NULL; - - if (!MemSize) - { - BAIL( ); - } - - pvBuffer = malloc( MemSize ); - if ( pvBuffer ) - { - ZeroMemory( pvBuffer, MemSize ); - } - -error: - return pvBuffer; -} - -// Private Memory free function -VOID -PrivateMemoryFree -( - LPVOID pvBuffer -) -{ - if ( pvBuffer ) - { - free( pvBuffer ); - } -} - - - -// -// Initialize the handler functions -// -VOID -HandlerInit -( - OUT PDOT11EXT_IHV_HANDLERS pDot11IHVHandlers -) -{ - - COPY_FUNCTION( pDot11IHVHandlers, DeinitService , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, InitAdapter , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, DeinitAdapter , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, ProcessSessionChange , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, IsUIRequestPending , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, ReceiveIndication , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, PerformCapabilityMatch , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, ValidateProfile , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, PerformPreAssociate , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, PerformPostAssociate , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, AdapterReset , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, StopPostAssociate , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, ReceivePacket , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, CreateDiscoveryProfiles , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, ProcessUIResponse , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, SendPacketCompletion , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, QueryUIRequest , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, OnexIndicateResult , Ihv ); - COPY_FUNCTION( pDot11IHVHandlers, Control , Ihv ); - -} - -#define ASSERT_MSG_LEN 768 - -// -// Calling DebugBreak indirectly -// to facilitate frame stepping -// in a debugger. -// -VOID -AssertFunc -( - _In_ LPCSTR pszFile, - int nLine -) -{ - HRESULT hr = S_OK; - CHAR Message[ ASSERT_MSG_LEN ] = {0}; - - hr = - StringCchPrintfA - ( - Message, - ASSERT_MSG_LEN-1, - "\n\nAssertion failed in File %s, Line %d\n\n", - pszFile, - nLine - ); - if ( S_OK == hr ) - { - OutputDebugStringA( Message ); - } - else - { - OutputDebugStringA( "Assertion Failed\n" ); - } - - DebugBreak( ); -} - -// -// Initialize global synchronization structure. -// -DWORD -InitCritSect -( - CRITICAL_SECTION* pCritSect -) -{ - DWORD dwResult = ERROR_SUCCESS; - - __try - { - InitializeCriticalSection( pCritSect ); - } - __except (EXCEPTION_EXECUTE_HANDLER) - { - dwResult = GetExceptionCode( ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - -error: - return dwResult; -} - - - - - -// -// Dll Main function. -// -BOOL -WINAPI -DllMain -( - IN HINSTANCE Dll, - IN DWORD Reason, - IN PVOID Reserved -) -{ - DWORD dwResult = ERROR_SUCCESS; - - UNREFERENCED_PARAMETER( Dll ); - UNREFERENCED_PARAMETER( Reserved ); - - switch (Reason) - { - case DLL_PROCESS_ATTACH: - - dwResult = InitCritSect( &g_csSynch ); - BAIL_ON_WIN32_ERROR( dwResult ); - - g_dwThreadCount = 0; - g_dwSessionID = 0; - g_bAllowInit = TRUE; - - break; - - case DLL_PROCESS_DETACH: - DeleteCriticalSection( &g_csSynch ); - break; - - default: - break; - } - -error: - return ( ERROR_SUCCESS == dwResult ); -} - - - - -// -// Disable starting new threads or adding new adapters.. -// -VOID -StartShutdown -( - VOID -) -{ - g_bAllowInit = FALSE; -} - - - -// -// Wait for spawned threadcount -// to come down to zero. -// -VOID -WaitOnZeroThreads -( - VOID -) -{ - BOOL bZeroThreads = FALSE; - - for ( ;; ) - { - EnterCriticalSection( &g_csSynch ); - bZeroThreads = ( 0 == g_dwThreadCount ); - LeaveCriticalSection( &g_csSynch ); - - if ( bZeroThreads ) - { - break; - } - - Sleep( 100 ); - } -} - - - - - - -// -// Function uses pThreadProtector structure -// to start a new thread. Decrements the -// global thread count after this thread has -// returned. -// -DWORD -WINAPI -ProtectedThreadEntry -( - LPVOID pvThreadProtector -) -{ - DWORD dwResult = ERROR_SUCCESS; - PTHREAD_PROTECTOR pThreadProtector = NULL; - LPTHREAD_START_ROUTINE pStartRoutine = NULL; - LPVOID pvParams = NULL; - HANDLE hIhvExtAdapter = NULL; - - pThreadProtector = (PTHREAD_PROTECTOR) pvThreadProtector; - ASSERT ( pThreadProtector ) - - pStartRoutine = pThreadProtector->pStartRoutine; - pvParams = pThreadProtector->pvParams; - hIhvExtAdapter = pThreadProtector->hIhvExtAdapter; - - PrivateMemoryFree( pThreadProtector ); - pThreadProtector = NULL; - - - if ( pStartRoutine ) - { - dwResult = pStartRoutine( pvParams ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - -error: - EnterCriticalSection( &g_csSynch ); - - // decrement thread count. - g_dwThreadCount--; - - // decrement adapter reference. - DerefenceAdapterDetails( hIhvExtAdapter ); - - LeaveCriticalSection( &g_csSynch ); - - return dwResult; -} - - -// -// Start a new thread. -// -DWORD -StartNewProtectedThread -( - HANDLE hIhvExtAdapter, - LPTHREAD_START_ROUTINE pStartRoutine, - LPVOID pvParams -) -{ - DWORD dwResult = ERROR_SUCCESS; - HANDLE hThread = NULL; - PTHREAD_PROTECTOR pThreadProtector = NULL; - BOOL bLocked = FALSE; - PADAPTER_DETAILS pAdapterDetails = NULL; - BOOL bCloseHandle = FALSE; - BOOL bOk = TRUE; - - - EnterCriticalSection( &g_csSynch ); - bLocked = TRUE; - - if (( !g_bAllowInit ) || (g_dwThreadCount >= MAX_THREAD_COUNT) ) - { - dwResult = ERROR_INVALID_STATE; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - dwResult = - ReferenceAdapterDetails - ( - hIhvExtAdapter, - &pAdapterDetails - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pAdapterDetails ); - - - // This memory is initialized, used and freed entirely by the Extensibility - // DLL. Hence this memory can be allocated and freed using any method. - pThreadProtector = (PTHREAD_PROTECTOR) PrivateMemoryAlloc( sizeof( THREAD_PROTECTOR ) ); - if ( !pThreadProtector ) - { - dwResult = ERROR_OUTOFMEMORY; - BAIL_ON_WIN32_ERROR( dwResult ); - } - - pThreadProtector->pStartRoutine = pStartRoutine; - pThreadProtector->pvParams = pvParams; - pThreadProtector->hIhvExtAdapter = hIhvExtAdapter; - - hThread = - CreateThread - ( - NULL, // security attributes - 0, // default stack size - ProtectedThreadEntry, // pointer to function to run - pThreadProtector, // parameter - 0, // run thread immediately - NULL // Thread ID receiver - ); - if ( !hThread ) - { - dwResult = GetLastError( ); - BAIL_ON_WIN32_ERROR( dwResult ); - } - bCloseHandle = TRUE; - - // Thread successfully started, memory - // would be freed by ProtectedThreadEntry - pThreadProtector = NULL; - - // Transfering dereference duty to ProtectedThreadEntry function. - pAdapterDetails = NULL; - - g_dwThreadCount++; - -error: - if ( bCloseHandle ) - { - bOk = CloseHandle( hThread ); - ASSERT( bOk ); - } - - PrivateMemoryFree( pThreadProtector ); - - if ( pAdapterDetails ) - { - DerefenceAdapterDetails( hIhvExtAdapter ); - } - - if ( bLocked ) - { - LeaveCriticalSection( &g_csSynch ); - } - return dwResult; -} - - -// -// Function to match beacon and profile. -// -BOOL -WINAPI -MatchBssDescription -( - PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - PIHV_CONNECTIVITY_PROFILE pConnectivityProfile, - PIHV_SECURITY_PROFILE pSecurityProfile, - PULDOT11_BSS_ENTRY pBssEntry -) -{ - UNREFERENCED_PARAMETER( pIhvProfileParams ); - UNREFERENCED_PARAMETER( pConnectivityProfile ); - UNREFERENCED_PARAMETER( pSecurityProfile ); - UNREFERENCED_PARAMETER( pBssEntry ); - - // Try to match the current profile with the beacon. - return TRUE; -} - - - -DWORD -CopyConnectivityProfile -( - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pSrc, - OUT PDOT11EXT_IHV_CONNECTIVITY_PROFILE pDst -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwLen = 0; - - ASSERT( pSrc ); - ASSERT( pDst ); - - ZeroMemory( pDst, sizeof( DOT11EXT_IHV_CONNECTIVITY_PROFILE ) ); - - if ( pSrc->pszXmlFragmentIhvConnectivity ) - { - dwLen = (DWORD) wcslen( pSrc->pszXmlFragmentIhvConnectivity ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtAllocateBuffer) - ( - (dwLen+1) * sizeof( WCHAR ), - (LPVOID*) &(pDst->pszXmlFragmentIhvConnectivity) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pDst->pszXmlFragmentIhvConnectivity ); - - CopyMemory - ( - (LPVOID) pDst->pszXmlFragmentIhvConnectivity, - (LPVOID) pSrc->pszXmlFragmentIhvConnectivity, - (dwLen+1) * sizeof( WCHAR ) - ); - } - -error: - return dwResult; -} - - -VOID -FreeConnectivityProfile -( - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pSrc -) -{ - if ( pSrc && pSrc->pszXmlFragmentIhvConnectivity ) - { - (g_pDot11ExtApi->Dot11ExtFreeBuffer)( (LPVOID) pSrc->pszXmlFragmentIhvConnectivity ); - pSrc->pszXmlFragmentIhvConnectivity = NULL; - } -} - - - -DWORD -CopySecurityProfile -( - IN PDOT11EXT_IHV_SECURITY_PROFILE pSrc, - OUT PDOT11EXT_IHV_SECURITY_PROFILE pDst -) -{ - DWORD dwResult = ERROR_SUCCESS; - DWORD dwLen = 0; - - ASSERT( pSrc ); - ASSERT( pDst ); - - ZeroMemory( pDst, sizeof( DOT11EXT_IHV_SECURITY_PROFILE ) ); - - pDst->bUseMSOnex = pSrc->bUseMSOnex; - - if ( pSrc->pszXmlFragmentIhvSecurity ) - { - dwLen = (DWORD) wcslen( pSrc->pszXmlFragmentIhvSecurity ); - - dwResult = - (g_pDot11ExtApi->Dot11ExtAllocateBuffer) - ( - (dwLen+1) * sizeof( WCHAR ), - (LPVOID*) &(pDst->pszXmlFragmentIhvSecurity) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - ASSERT( pDst->pszXmlFragmentIhvSecurity ); - - CopyMemory - ( - (LPVOID) pDst->pszXmlFragmentIhvSecurity, - (LPVOID) pSrc->pszXmlFragmentIhvSecurity, - (dwLen+1) * sizeof( WCHAR ) - ); - } - - -error: - return dwResult; -} - - -VOID -FreeSecurityProfile -( - IN PDOT11EXT_IHV_SECURITY_PROFILE pSrc -) -{ - if ( pSrc && pSrc->pszXmlFragmentIhvSecurity ) - { - (g_pDot11ExtApi->Dot11ExtFreeBuffer)( (LPVOID) pSrc->pszXmlFragmentIhvSecurity ); - pSrc->pszXmlFragmentIhvSecurity = NULL; - } -} - - - - -DWORD -CopyDiscoveryProfile -( - IN PDOT11EXT_IHV_DISCOVERY_PROFILE pSrc, - OUT PDOT11EXT_IHV_DISCOVERY_PROFILE pDst -) -{ - DWORD dwResult = ERROR_SUCCESS; - - ASSERT( pSrc ); - ASSERT( pDst ); - - dwResult = - CopyConnectivityProfile - ( - &(pSrc->IhvConnectivityProfile), - &(pDst->IhvConnectivityProfile) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - - - dwResult = - CopySecurityProfile - ( - &(pSrc->IhvSecurityProfile), - &(pDst->IhvSecurityProfile) - ); - BAIL_ON_WIN32_ERROR( dwResult ); - -error: - if ( ERROR_SUCCESS != dwResult ) - { - FreeDiscoveryProfile( pDst ); - } - return dwResult; -} - - -VOID -FreeDiscoveryProfile -( - IN PDOT11EXT_IHV_DISCOVERY_PROFILE pSrc -) -{ - if ( pSrc ) - { - FreeConnectivityProfile( &(pSrc->IhvConnectivityProfile) ); - FreeSecurityProfile( &(pSrc->IhvSecurityProfile) ); - } -} - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsample/utils.h b/network/wlan/Native Wifi IHV Service/ihvsample/utils.h deleted file mode 100644 index d2d4a80c..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsample/utils.h +++ /dev/null @@ -1,318 +0,0 @@ - - -////////////////// -// Macros // -////////////////// - - -// Trace Macros - - -VOID -SampleTraceFn -( - LPCSTR pszFormat, - LPCSTR pszVal1, - DWORD dwVal1 -); - -#define TRACE_MESSAGE( _x ) SampleTraceFn( "INFO: %s\n",_x, 0 ); -#define TRACE_MESSAGE_VAL( _x, _y ) SampleTraceFn( "INFO: %s %lu\n", _x, _y ); - - -// -// Error Handling -// -#define BAIL_ON_WIN32_ERROR( __x ) \ - if ( ERROR_SUCCESS != (__x) ) \ - { \ - goto error; \ - } \ - - -// -// COM failure -// -#define BAIL_ON_FAILURE( __hr ) \ - if ( FAILED( __hr ) ) \ - { \ - goto error; \ - } \ - -// -// combine win32 and com error codes. -// -#define WIN32_FROM_HRESULT(hr) \ - (SUCCEEDED(hr) ? ERROR_SUCCESS : \ - (HRESULT_FACILITY(hr) == FACILITY_WIN32 ? HRESULT_CODE(hr) : (hr))) - - -// Combined Error Macro -#define WIN32_COMBINED_ERROR( _dwError, _hr ) ( (_dwError)?(_dwError):WIN32_FROM_HRESULT((_hr))) - -// -// Unconditional bail -// -#define BAIL( ) goto error; - - -// -// Maximum number of new threads -// to spawn at any given time. -// -#define MAX_THREAD_COUNT 100 - - - -// -// Debug Macro. -// -#ifdef DBG -#define ASSERT(exp) \ - if (!(exp)) \ - { \ - AssertFunc( __FILE__, __LINE__ ); \ - } - -#define ASSERTFAILURE() \ - AssertFunc( __FILE__, __LINE__ ); -#else -#define ASSERT(exp) -#define ASSERTFAILURE() -#endif // DBG - - - -// Private Memory alloc function -LPVOID -PrivateMemoryAlloc -( - size_t MemSize -); - -// Private Memory free function -VOID -PrivateMemoryFree -( - LPVOID pvBuffer -); - - -// -// Array length. -// -#define ARRAY_LENGTH( _x ) (sizeof( (_x) ) / sizeof( (_x)[0] )) - -// -// Declarations for service specific global Variables -// -extern PDOT11EXT_APIS g_pDot11ExtApi; -extern CRITICAL_SECTION g_csSynch; -extern DWORD g_dwThreadCount; -extern DWORD g_dwSessionID; -extern BOOL g_bAllowInit; - - - - - - - - -// Pre-declaration for the ADAPTER_DETAILS structure. -typedef -struct _ADAPTER_DETAILS -ADAPTER_DETAILS, *PADAPTER_DETAILS; - - - - -// -// Handler type for pre-association. -// -typedef -DWORD -(WINAPI *PRE_ASSOCIATE_FUNCTION) -( - PADAPTER_DETAILS pAdapterDetails, - DWORD* pdwReasonCode -); - - -// -// Handler type for post-association. -// -typedef -DWORD -(WINAPI *POST_ASSOCIATE_FUNCTION) -( - PADAPTER_DETAILS pAdapterDetails, - HANDLE hSecuritySessionID, - PDOT11_PORT_STATE pPortState, - ULONG uDot11AssocParamsBytes, - PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pDot11AssocParams -); - - - -// -// Handler type for stop-post-association. -// -typedef -DWORD -(WINAPI *STOP_POST_ASSOCIATE_FUNCTION) -( - PADAPTER_DETAILS pAdapterDetails, - PDOT11_MAC_ADDRESS pPeer, - DOT11_ASSOC_STATUS dot11AssocStatus -); - - - -// -// Handler type for receive packet. -// -typedef -DWORD -(WINAPI *IHV_RECEIVE_PACKET_HANDLER) -( - PADAPTER_DETAILS pAdapterDetails, - DWORD dwInBufferSize, - LPVOID pvInBuffer -); - - - -// -// Handler type for IHV result indication. -// -typedef -DWORD -(WINAPI *IHV_INDICATE_RESULT_HANDLER) -( - PADAPTER_DETAILS pAdapterDetails, - DOT11_MSONEX_RESULT msOneXResult, - PDOT11_MSONEX_RESULT_PARAMS pDot11MsOneXResultParams -); - - - -// Assert function in debug builds. -VOID -AssertFunc -( - _In_ LPCSTR pszFile, - int nLine -); - - -// -// Register intention to start shut down. -// -VOID -StartShutdown -( - VOID -); - - -// -// Wait for posted thread count to go down to zero. -// -VOID -WaitOnZeroThreads -( - VOID -); - - -// -// Populate IHV handler function pointers to IHV Framework. -// -VOID -HandlerInit -( - OUT PDOT11EXT_IHV_HANDLERS pDot11IHVHandlers -); - - -// -// Call createthread to start a new thread and ensure -// the adapter stays active till the thread finishes -// by putting a refcount increment/decrement around -// the lifetime of the thread. -// -DWORD -StartNewProtectedThread -( - HANDLE hIhvExtAdapter, - LPTHREAD_START_ROUTINE pStartRoutine, - LPVOID pvParams -); - - -// Typedef for unaligned BSS Entry to process beacons. -typedef UNALIGNED DOT11_BSS_ENTRY* PULDOT11_BSS_ENTRY; - -// -// Function to match beacon and profile. -// -BOOL -WINAPI -MatchBssDescription -( - PDOT11EXT_IHV_PROFILE_PARAMS pIhvProfileParams, - PIHV_CONNECTIVITY_PROFILE pConnectivityProfile, - PIHV_SECURITY_PROFILE pSecurityProfile, - PULDOT11_BSS_ENTRY pBssEntry -); - - -// -// Functions to copy and free discovery profiles. -// - -DWORD -CopyConnectivityProfile -( - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pSrc, - OUT PDOT11EXT_IHV_CONNECTIVITY_PROFILE pDst -); - - -VOID -FreeConnectivityProfile -( - IN PDOT11EXT_IHV_CONNECTIVITY_PROFILE pSrc -); - - -DWORD -CopySecurityProfile -( - IN PDOT11EXT_IHV_SECURITY_PROFILE pSrc, - OUT PDOT11EXT_IHV_SECURITY_PROFILE pDst -); - -VOID -FreeSecurityProfile -( - IN PDOT11EXT_IHV_SECURITY_PROFILE pSrc -); - - - -VOID -FreeDiscoveryProfile -( - IN PDOT11EXT_IHV_DISCOVERY_PROFILE pSrc -); - - - -DWORD -CopyDiscoveryProfile -( - IN PDOT11EXT_IHV_DISCOVERY_PROFILE pSrc, - OUT PDOT11EXT_IHV_DISCOVERY_PROFILE pDst -); diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.cpp deleted file mode 100644 index 7da337d5..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.cpp +++ /dev/null @@ -1,166 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" -#include "ihvuiinc_i.c" - -extern long g_serverLock; //lock count on server - -// -// IUnknown Implementation -// -CIHVClassFactory::CIHVClassFactory() : m_refCount(1) -{ -} - -CIHVClassFactory::~CIHVClassFactory() -{ -} - -STDMETHODIMP_(ULONG) -CIHVClassFactory::AddRef() -{ - return InterlockedIncrement(&m_refCount); -} - -STDMETHODIMP_(ULONG) -CIHVClassFactory::Release() -{ - ULONG refCount = InterlockedDecrement(&m_refCount); - if (refCount == 0) - { - delete this; - } - return refCount; -} - -STDMETHODIMP -CIHVClassFactory::QueryInterface( - REFIID riid, - void **ppvObject - ) -{ - HRESULT hr = E_INVALIDARG; - if (NULL != ppvObject) - { - hr = S_OK; - if (riid == IID_IUnknown) - { - *ppvObject = static_cast(this); - } - else if (riid == IID_IClassFactory) - { - *ppvObject = static_cast(this); - } - else - { - *ppvObject = NULL; - return E_NOINTERFACE; - } - reinterpret_cast(*ppvObject)->AddRef(); - } - - return hr; -} - - -// -// IClassFactory Implementaion -// -STDMETHODIMP -CIHVClassFactory::CreateInstance( - IUnknown *pUnkOuter, - REFIID riid, - void **ppvObject - ) -{ - HRESULT hr = E_NOINTERFACE; - - // aggregation not supported - if (pUnkOuter != NULL) - { - return CLASS_E_NOAGGREGATION; - } - - if (NULL == ppvObject) - { - return E_INVALIDARG; - } - - // Figure out which interface is wanted - // the ui will call us only as IID_IDot11ExtUI - if (IID_IDot11SampleExtUI == riid || - IID_IDot11ExtUI == riid || - IID_IWizardExtension == riid) - { - CDot11SampleExtUI *pExtUI = new(std::nothrow) CDot11SampleExtUI(); - if (NULL == pExtUI) - { - return E_OUTOFMEMORY; - } - - pExtUI->AddRef(); - hr = pExtUI->QueryInterface(riid, ppvObject); - - pExtUI->Release(); - } - else if (IID_IDot11SampleExtUIConProperty == riid) - { - CDot11SampleExtUIConProperty *pCDot11SampleExtUIConProperty = new(std::nothrow) CDot11SampleExtUIConProperty(); - if (NULL == pCDot11SampleExtUIConProperty) - { - return E_OUTOFMEMORY; - } - - pCDot11SampleExtUIConProperty->AddRef(); - hr = pCDot11SampleExtUIConProperty->QueryInterface(riid, ppvObject); - - pCDot11SampleExtUIConProperty->Release(); - } - else if (IID_IDot11SampleExtUISecProperty == riid) - { - CDot11SampleExtUISecProperty *pCDot11SampleExtUISecProperty = new(std::nothrow) CDot11SampleExtUISecProperty(); - if (NULL == pCDot11SampleExtUISecProperty) - { - return E_OUTOFMEMORY; - } - - pCDot11SampleExtUISecProperty->AddRef(); - hr = pCDot11SampleExtUISecProperty->QueryInterface(riid, ppvObject); - - pCDot11SampleExtUISecProperty->Release(); - } - else if (IID_IDot11SampleExtUIKeyProperty == riid) - { - CDot11SampleExtUIKeyProperty *pCDot11SampleExtUIKeyProperty = new(std::nothrow) CDot11SampleExtUIKeyProperty(); - if (NULL == pCDot11SampleExtUIKeyProperty) - { - return E_OUTOFMEMORY; - } - - pCDot11SampleExtUIKeyProperty->AddRef(); - hr = pCDot11SampleExtUIKeyProperty->QueryInterface(riid, ppvObject); - - pCDot11SampleExtUIKeyProperty->Release(); - } - - return hr; -} - - -STDMETHODIMP -CIHVClassFactory::LockServer(BOOL fLock) -{ - if (fLock) - { - InterlockedIncrement(&g_serverLock); - } - else - { - InterlockedDecrement(&g_serverLock); - } - - return S_OK; -} diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.h deleted file mode 100644 index 60f814c3..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVClassFactory.h +++ /dev/null @@ -1,28 +0,0 @@ - -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#pragma once - -// The class factory -class CIHVClassFactory : public IClassFactory -{ -public: - // Constructor - CIHVClassFactory(); - ~CIHVClassFactory(); - - // IUnknown - STDMETHODIMP_(ULONG) AddRef(); - STDMETHODIMP_(ULONG) Release(); - STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); - - // IClassFactory - STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject); - STDMETHODIMP LockServer(BOOL fLock); - -private: - long m_refCount; -}; diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.cpp deleted file mode 100644 index ebe8622c..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.cpp +++ /dev/null @@ -1,284 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - -#define CLSIDSTR_CALLBACK L"{4A01f9f9-6012-4343-A8C4-10B5DF32672A}" // IHV Ext UI CLSID -#define CLSID_CALLBACK_FRIENDLY_NAME L"Wireless 802.11 IHV Sample Config UI" - -#define REGCLSID L"CLSID" -#define INPROCSERVER32 L"InprocServer32" -#define THREADINGMODEL L"ThreadingModel" -#define FREETHREADING L"Both" - -#define ARRAY_SIZE(s) (sizeof(s) / sizeof(s[0])) - -extern HINSTANCE g_hInst; - - -typedef HRESULT (APIENTRY *RegisterPageWithPageProc) ( - const GUID *pguidParentPage, - const GUID *pguidChildPage, - const LPWSTR pszChildModuleFileName, - const LPWSTR pszFriendlyName, - const DWORD dwBehaviorFlags, - const DWORD dwUserFlags, - const LPWSTR pszCommandLine); - -typedef HRESULT (APIENTRY *UnregisterPageProc) ( - const GUID *pguidPage, - const BOOL fUnregisterFromCOM); - - - -// -// RegisterServer - Register the COM Server by creating required keys -// - -#pragma warning (push) -#pragma warning (disable:6262) - -HRESULT -CRegHelper::RegisterServer () -{ - HRESULT hr = S_OK; - wchar_t wszModule[_MAX_PATH] = {0}; - DWORD result = 0; - - result = GetModuleFileName(g_hInst, wszModule, ARRAY_SIZE(wszModule)); - - if (result == 0) - { - return HRESULT_FROM_WIN32(GetLastError()); - } - - wchar_t wszCLSIDKey[MAX_LENGTH] = {0}; // CLSID\\wszCLSID. - wchar_t wszInprocKey[MAX_LENGTH + 2] = {0}; // CLSID\\InprocServer32 - - // get the class ID strings. - StringCchCopyW(wszCLSIDKey, MAX_LENGTH, REGCLSID); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, CLSIDSTR_CALLBACK); - - // create entries under CLSID. - // Description - FAILHR(SetKeyAndValue(wszCLSIDKey, NULL, CLSID_CALLBACK_FRIENDLY_NAME)); - // set the server path. - FAILHR(SetKeyAndValue(wszCLSIDKey, INPROCSERVER32, wszModule)); - - // add the threading model information. - hr = StringCchPrintfW(wszInprocKey, MAX_LENGTH + 2, L"%s\\%s", wszCLSIDKey, INPROCSERVER32); - if(FAILED(hr)) - { - hr = S_FALSE; - return hr; - } - - FAILHR(SetRegValue(wszInprocKey, THREADINGMODEL, FREETHREADING)); - - // register the extension UI wizard page - HINSTANCE hinstLib = LoadLibrary(TEXT("connect.dll")); - if (hinstLib != NULL) - { - - // get the export function used for registering - RegisterPageWithPageProc registerPageWithPageProc = - (RegisterPageWithPageProc) GetProcAddress(hinstLib, (LPCSTR)("RegisterPageWithPage")); - - if (NULL != registerPageWithPageProc) - { - hr = (registerPageWithPageProc) (NULL, // stand alone page (no parent) - &GUID_SAMPLE_IHVUI_CLSID, // clsid of the extension UI wizard page - NULL, // filename already registered through COM - CLSID_CALLBACK_FRIENDLY_NAME, // friendly name - 0x2, // allow duplicate instances - 0, // no user flags - NULL); // no command line - } - - FreeLibrary(hinstLib); - } - - return hr; -} -#pragma warning (pop) - -// -// UnRegisterServer - Register the COM Server by creating required keys -// -HRESULT -CRegHelper::UnregisterServer() -{ - HRESULT hr = S_OK; - wchar_t wszCLSIDKey[MAX_LENGTH] = {0}; // CLSID\\wszCLSID. - - - // get the class ID strings. - StringCchCopyW(wszCLSIDKey,MAX_LENGTH, REGCLSID); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, CLSIDSTR_CALLBACK); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, INPROCSERVER32); - - - // delete the sub key of the Class ID key - FAILHR(DeleteKey(wszCLSIDKey)); - - StringCchCopyW(wszCLSIDKey,MAX_LENGTH, REGCLSID); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); - StringCchCatW(wszCLSIDKey, MAX_LENGTH, CLSIDSTR_CALLBACK); - - // delete Class ID key - FAILHR(DeleteKey(wszCLSIDKey)); - - // unregister the extension UI wizard page - HINSTANCE hinstLib = LoadLibrary(TEXT("connect.dll")); - if (hinstLib != NULL) - { - - // get the export function used for unregistering - UnregisterPageProc unregisterPageProc = - (UnregisterPageProc) GetProcAddress(hinstLib, (LPCSTR)("UnregisterPage")); - - if (NULL != unregisterPageProc) - { - hr = (unregisterPageProc) (&GUID_SAMPLE_IHVUI_CLSID, // clsid of the extension UI wizard page - FALSE); // already unregistered from COM - } - - FreeLibrary(hinstLib); - } - - return hr; - -} - -// -// Set an entry in the registry of the form: -// HKEY_CLASSES_ROOT\wszKey\wszSubkey = wszValue -// -BOOL -CRegHelper::SetKeyAndValue( - const wchar_t* pwszKey, - const wchar_t* pwszSubkey, - const wchar_t* pwszValue - ) -{ - HKEY hKey; // handle to the new reg key. - wchar_t wszRegKey[MAX_LENGTH] = {0}; // buffer for the full key name. - - - // init the key with the base key name. - StringCchCopyW(wszRegKey, MAX_LENGTH, pwszKey); - // append the subkey name (if there is one). - if (pwszSubkey != NULL) - { - StringCchCatW(wszRegKey, MAX_LENGTH, L"\\"); - StringCchCatW(wszRegKey, MAX_LENGTH, pwszSubkey); - } - - // create the registry key. - if (RegCreateKeyEx( - HKEY_CLASSES_ROOT, - wszRegKey, - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hKey, - NULL) == ERROR_SUCCESS) - { - // set the value (if there is one). - if (pwszValue != NULL) - { - RegSetValueEx( - hKey, - NULL, - 0, - REG_SZ, - (BYTE *)pwszValue, - (DWORD) ((wcslen(pwszValue) + 1) * sizeof (wchar_t)) - ); - } - - RegCloseKey(hKey); - - return TRUE; - } - - return FALSE; -} - -// -// SetRegValue - Open the key, create a new keyword and value pair under it. -// -BOOL -CRegHelper::SetRegValue( - const wchar_t* pwszKeyName, - const wchar_t* pwszKeyword, - const wchar_t* pwszValue - ) -{ - HKEY hKey; // handle to the new reg key. - - // create the registration key. - if (RegCreateKeyEx( - HKEY_CLASSES_ROOT, - pwszKeyName, - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_ALL_ACCESS, - NULL, - &hKey, - NULL) == ERROR_SUCCESS) - { - // set the value (if there is one). - if (pwszValue != NULL) - { - RegSetValueEx( - hKey, - pwszKeyword, - 0, - REG_SZ, - (BYTE *)pwszValue, - (DWORD) ((wcslen(pwszValue) + 1) * sizeof (wchar_t)) - ); - } - - RegCloseKey(hKey); - - - return TRUE; - } - - return FALSE; -} - - -// -// Delete an entry in the registry of the form: -// HKEY_CLASSES_ROOT\wszKey\wszSubkey = wszValue -// -BOOL -CRegHelper::DeleteKey(const wchar_t* pwszSubkey) -{ - DWORD result = 0; - - if (pwszSubkey != NULL) - { - // delete the registry key. - result = RegDeleteKey(HKEY_CLASSES_ROOT, pwszSubkey); - } - else - { - return FALSE; - } - - return ((ERROR_SUCCESS == result)?TRUE:FALSE); -} - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.h deleted file mode 100644 index 76c85b1c..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVRegistryHelper.h +++ /dev/null @@ -1,40 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#pragma once - -#define FAILHR(result) \ - if (result == FALSE) \ - {\ - hr = S_FALSE;\ - return hr;\ - } - - -#define MAX_LENGTH 256 - - -class CRegHelper -{ - public: - static HRESULT STDMETHODCALLTYPE RegisterServer(); - static HRESULT STDMETHODCALLTYPE UnregisterServer(); - -private: - static BOOL SetKeyAndValue( - const wchar_t *pszKey, - const wchar_t *pszSubkey, - const wchar_t *pszValue - ); - - static BOOL DeleteKey(const wchar_t *pszSubkey); - - static BOOL SetRegValue( - const wchar_t *pszKeyName, - const wchar_t *pszKeyword, - const wchar_t *pszValue - ); -}; - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSample.idl b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSample.idl deleted file mode 100644 index 81e05140..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSample.idl +++ /dev/null @@ -1,71 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -import "unknwn.idl"; -import "wtypes.idl"; -import "ihvuiinc.idl"; // For wireless UI extensions - -interface IWizardExtension; -interface IObjectWithSite; - -interface IDot11SampleExtUI; -interface IDot11SampleExtUIConProperty; -interface IDot11SampleExtUISecProperty; - -[ - uuid(7ca89d4b-2c5b-4368-b53a-ffa14e031179), - helpstring(" Dot11 IHV Extensibility UI Interface"), - dual -] - -interface IDot11SampleExtUI: IDot11ExtUI -{ -} - - - -[ - uuid(61055513-2f27-4962-b29c-d6d7d1500fec), - helpstring(" Dot11 IHV Extensibility UI Connection Properties Interface"), - dual -] - -interface IDot11SampleExtUIConProperty: IDot11ExtUIProperty -{ - [id(1), hidden, helpstring("method Initialize")] - HRESULT - Initialize([in] BSTR bstrPropertyName); -} - - -[ - uuid(12c211ae-1b6d-471c-9c1b-698bcc9b9d97), - helpstring(" Dot11 IHV Extensibility UI Security Properties Interface"), - dual -] - -interface IDot11SampleExtUISecProperty: IDot11ExtUIProperty -{ - [id(1), hidden, helpstring("method Initialize")] - HRESULT - Initialize([in] BSTR bstrPropertyName, [in] DWORD dwIhvSecurity); -} - - -[ - uuid(a18bae3c-39c2-4b34-ba49-0130e431d2ca), - helpstring(" Dot11 IHV Extensibility UI Key Properties Interface"), - dual -] - -interface IDot11SampleExtUIKeyProperty: IDot11ExtUIProperty -{ - [id(1), hidden, helpstring("method Initialize")] - HRESULT - Initialize([in] BYTE* pvData); -} - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.cpp deleted file mode 100644 index a5e60d7a..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.cpp +++ /dev/null @@ -1,971 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" -#include "ihvsample_i.c" - -extern HINSTANCE g_hInst; - -LPWSTR g_IHVAuthFriendlyName[] = { - L"IHVAuth V1", - L"IHVAuth V2", - L"IHVAuth V3" -}; - -LPWSTR g_IHVCipherFriendlyName[] = { - L"None", - L"IHVCipher 1", - L"IHVCipher 2", - L"IHVCipher 3" -}; - -IHV_AUTH_CIPHER_CAPABILITY g_IHVOneXExtCapability = -{ - 3, - { - { - IHVAuthV1, - 1, - {IHVCipher1} - }, - { - IHVAuthV2, - 3, - {None, IHVCipher1, IHVCipher2} - }, - { - IHVAuthV3, - 2, - {IHVCipher2, IHVCipher3} - } - } -}; - - -static const WCHAR c_szIhvUIRequest[] = L"_UI_Request"; -static const WCHAR c_szIhvUIResponse[] = L"_UI_Response"; - -template -T* GetThis(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - static const WCHAR c_szThisPointer[]= L"_Win32_this_"; - UNREFERENCED_PARAMETER(wParam); - - T* pThis = NULL; - if (uMsg == WM_INITDIALOG) - { - if (sizeof(PROPSHEETPAGE) == ((LPPROPSHEETPAGE)lParam)->dwSize) - { - // This corresponds to MSDN - pThis = (T *)((LPPROPSHEETPAGE)lParam)->lParam; - } - else - { - // TODO: Need to determine when this abnormality happens... - pThis = (T *)lParam; - } - - SetProp(hwnd, c_szThisPointer, (HANDLE)pThis); - - } - else if (uMsg == WM_DESTROY) - { - RemoveProp(hwnd, c_szThisPointer); - } - else - { - pThis = (T *)GetProp(hwnd, c_szThisPointer); - } - - return pThis; -} - - -CDot11SampleExtUI::CDot11SampleExtUI(): m_crefCount(0) -{ - InterlockedIncrement(&g_objRefCount); - - m_pUnkSite = NULL; - m_hFirstPagePsp = NULL; - m_hLastPagePsp = NULL; - m_pUIRequest = NULL; -} - -CDot11SampleExtUI::~CDot11SampleExtUI() -{ - InterlockedDecrement(&g_objRefCount); - - if( m_pUIRequest) - { - delete m_pUIRequest; - } - - if( m_pUnkSite) - { - m_pUnkSite ->Release(); - m_pUnkSite = NULL; - } -} - -// Used to get the IHV friendly name -STDMETHODIMP -CDot11SampleExtUI::GetDot11ExtUIFriendlyName( - BSTR* bstrFriendlyName) -{ - HRESULT hr = E_INVALIDARG; - - if (NULL != bstrFriendlyName) - { - *bstrFriendlyName = SysAllocString(IHV_SAMPLE_IHV_NAME); - hr = S_OK; - } - - return hr; -} - - -// Returns the requested property type -STDMETHODIMP -CDot11SampleExtUI::GetDot11ExtUIProperties( - DOT11_EXT_UI_PROPERTY_TYPE ExtType, - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ) -{ - HRESULT hr = S_OK; - if (!pcExtensions || !ppDot11ExtUIProperty) - { - hr = E_INVALIDARG; - goto error; - } - - // Initialize the out parameters - *pcExtensions = 0; - *ppDot11ExtUIProperty = NULL; - - switch(ExtType) - { - case DOT11_EXT_UI_CONNECTION: - hr = CreateConnectionProperties(pcExtensions, ppDot11ExtUIProperty); - break; - - case DOT11_EXT_UI_SECURITY: - hr = CreateSecurityProperties(pcExtensions, ppDot11ExtUIProperty); - break; - - case DOT11_EXT_UI_KEYEXTENSION: - hr = CreateKeyProperties(pcExtensions, ppDot11ExtUIProperty); - break; - - default: - hr = E_NOTIMPL; - break; - } - -error: - return hr; -} - -#define IHV_BALLOON_TEXT L"Please enter key information" - -STDMETHODIMP -CDot11SampleExtUI::GetDot11ExtUIBalloonText( - BSTR pIHVUIRequest, // the UI request structure from IHV - BSTR* pwszBalloonText // the balloon text to be displayed - ) -{ - HRESULT hr = E_INVALIDARG; - PDOT11EXT_IHV_UI_REQUEST pIhvUiRequest = (PDOT11EXT_IHV_UI_REQUEST) pIHVUIRequest; - - if (NULL != pwszBalloonText) - { - // Ihv could choose to parse the UI request data here ... - UNREFERENCED_PARAMETER( pIhvUiRequest ); - - *pwszBalloonText = SysAllocString( IHV_BALLOON_TEXT ); - hr = S_OK; - } - - return hr; -} - - - -HRESULT -CDot11SampleExtUI::CreateConnectionProperties( - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ) -{ - HRESULT hr = ERROR_SUCCESS; - BSTR strName = NULL; - ULONG uCount = 0; - - IDot11SampleExtUIConProperty **pprgProps = NULL; - - uCount = PROP_COUNT_CONNECTION; - pprgProps = (IDot11SampleExtUIConProperty**) - CoTaskMemAlloc(sizeof(IDot11SampleExtUIConProperty*) * uCount); - - if (!pprgProps) - { - hr = E_UNEXPECTED; - goto error; - } - - // Since we just have one property of each, we'll - // create one interface first and initialize it separately - IDot11SampleExtUIConProperty *pTempIProp = NULL; - hr = CoCreateInstance( - GUID_SAMPLE_IHVUI_CLSID, - NULL, - CLSCTX_INPROC, - IID_IDot11SampleExtUIConProperty, - (PVOID*)&pTempIProp - ); - - if (FAILED(hr)) - { - goto error; - } - - // this will probably never be displayed - strName = SysAllocString(L"IHV Connection Settings"); - hr = pTempIProp->Initialize(strName); - pprgProps[0] = pTempIProp; - - if (SUCCEEDED(hr)) - { - *pcExtensions = uCount; - *ppDot11ExtUIProperty = (IDot11ExtUIProperty*)pprgProps; - - // Set the current pointer to NULL so it doesn't get freed at the bottom - pprgProps = NULL; - } - -error: - if (FAILED(hr) && pprgProps) - { - CoTaskMemFree(pprgProps); - pprgProps = NULL; - } - SysFreeString(strName); - return hr; -} - -HRESULT -CDot11SampleExtUI::CreateSecurityProperties( - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ) -{ - HRESULT hr = ERROR_SUCCESS; - BSTR strName = NULL; - ULONG uCount = 0; - DWORD i = 0; - WCHAR wbuf[128]; - - IDot11SampleExtUISecProperty **pprgProps = NULL; - - uCount = PROP_COUNT_SECURITY; - pprgProps = (IDot11SampleExtUISecProperty**) - CoTaskMemAlloc(sizeof(IDot11SampleExtUISecProperty*) * uCount); - - if (!pprgProps) - { - hr = E_UNEXPECTED; - goto error; - } - - // Since we just have one property of each, we'll - // create one interface first and initialize it separately - IDot11SampleExtUISecProperty *pTempIProp = NULL; - - for (i = 0; i < uCount; ++i) - { - ZeroMemory( - wbuf, - 128 - ); - pTempIProp = NULL; - SysFreeString(strName); - strName = NULL; - - hr = CoCreateInstance( - GUID_SAMPLE_IHVUI_CLSID, - NULL, - CLSCTX_INPROC, - IID_IDot11SampleExtUISecProperty, - (PVOID*)&pTempIProp - ); - - if (FAILED(hr)) - { - continue; - } - - StringCchPrintf( - wbuf, - 128, - wstrSecurityTypes[i] - ); - - strName = SysAllocString(wbuf); - hr = pTempIProp->Initialize(strName, i); - pprgProps[i] = pTempIProp; - } - - if (SUCCEEDED(hr)) - { - *pcExtensions = uCount; - *ppDot11ExtUIProperty = (IDot11ExtUIProperty*)pprgProps; - - // Set the current pointer to NULL so it doesn't get freed at the bottom - pprgProps = NULL; - } - -error: - if (FAILED(hr) && pprgProps) - { - CoTaskMemFree(pprgProps); - pprgProps = NULL; - } - SysFreeString(strName); - return hr; -} - -HRESULT -CDot11SampleExtUI::CreateKeyProperties( - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ) -{ - HRESULT hr = ERROR_SUCCESS; - BSTR strName = NULL; - ULONG uCount = 0; - DWORD i = 0; - WCHAR wbuf[128]; - IDot11SampleExtUIKeyProperty **pprgProps = NULL; - - uCount = g_IHVOneXExtCapability.dwAuthCount; - - pprgProps = (IDot11SampleExtUIKeyProperty**) - CoTaskMemAlloc(sizeof(IDot11SampleExtUIKeyProperty*) * uCount); - - if (!pprgProps) - { - hr = E_UNEXPECTED; - goto error; - } - - // Since we just have one property of each, we'll - // create one interface first and initialize it separately - IDot11SampleExtUIKeyProperty *pTempIProp = NULL; - - for (i = 0; i < uCount; ++i) - { - ZeroMemory( - wbuf, - 128 - ); - pTempIProp = NULL; - SysFreeString(strName); - strName = NULL; - - hr = CoCreateInstance( - GUID_SAMPLE_IHVUI_CLSID, - NULL, - CLSCTX_INPROC, - IID_IDot11SampleExtUIKeyProperty, - (PVOID*)&pTempIProp - ); - - if (FAILED(hr)) - { - continue; - } - - StringCchPrintf( - wbuf, - 128, - g_IHVAuthFriendlyName[g_IHVOneXExtCapability.IhvAuthCiphers[i].IHVAuth] - ); - - strName = SysAllocString(wbuf); - hr = pTempIProp->Initialize((BYTE *) &(g_IHVOneXExtCapability.IhvAuthCiphers[i])); - pprgProps[i] = pTempIProp; - } - - if (SUCCEEDED(hr)) - { - *pcExtensions = uCount; - *ppDot11ExtUIProperty = (IDot11ExtUIProperty*)pprgProps; - - // Set the current pointer to NULL so it doesn't get freed at the bottom - pprgProps = NULL; - } - -error: - if (FAILED(hr) && pprgProps) - { - CoTaskMemFree(pprgProps); - pprgProps = NULL; - } - SysFreeString(strName); - return hr; -} - - -HRESULT -CDot11SampleExtUI::FinalConstruct() -{ - m_pUnkSite = NULL; - m_hFirstPagePsp = NULL; - m_hLastPagePsp = NULL; - m_pUIRequest = NULL; - - return S_OK; -} - -VOID -CDot11SampleExtUI::FinalRelease() -{ - if( m_pUnkSite) - { - m_pUnkSite ->Release(); - m_pUnkSite = NULL; - } - - if( m_pUIRequest) - { - delete m_pUIRequest; - m_pUIRequest = NULL; - } - -} - -// IObjectWithSite -STDMETHODIMP -CDot11SampleExtUI::SetSite ( - IUnknown* pUnkSite - ) -{ - if( m_pUnkSite) - m_pUnkSite ->Release(); - - m_pUnkSite = pUnkSite; - - if( m_pUnkSite) - m_pUnkSite ->AddRef(); - - return S_OK; -} - -STDMETHODIMP -CDot11SampleExtUI::GetSite ( - REFIID riid, - void** ppvSite - ) -{ - *ppvSite = NULL; - - if( m_pUnkSite == NULL) - return E_FAIL; - - return m_pUnkSite ->QueryInterface(riid, ppvSite); -} - -//IWizardExtension -STDMETHODIMP CDot11SampleExtUI::AddPages ( - HPROPSHEETPAGE* aPages, - UINT cPages, - UINT *pnPagesAdded - ) -{ - IPropertyBag *pIPropertyBag = NULL; - - UNREFERENCED_PARAMETER(cPages); - - HRESULT hr = m_pUnkSite->QueryInterface(IID_IPropertyBag, - (VOID **)&pIPropertyBag); - if (SUCCEEDED(hr)) - { - VARIANT v; - VariantInit(&v); - - WCHAR ihvKeyName[IHV_KEY_LENGTH]; - GetClsidPropertyName ( - & GUID_SAMPLE_IHVUI_CLSID, - (LPWSTR) c_szIhvUIRequest, - ihvKeyName, - IHV_KEY_LENGTH - ); - hr = pIPropertyBag->Read( - ihvKeyName, - &v, - NULL); - - if (SUCCEEDED(hr) && (VT_BSTR == V_VT(&v))) - { - if( m_pUIRequest == NULL) - { - m_pUIRequest = new(std::nothrow) IHV_UI_REQUEST; - if (m_pUIRequest == NULL) - { - VariantClear(&v); - pIPropertyBag->Release(); - return E_OUTOFMEMORY; - } - } - memcpy(m_pUIRequest, v.bstrVal, sizeof(IHV_UI_REQUEST)); - } - - VariantClear(&v); - - pIPropertyBag->Release(); - } - - //////////////// - - *pnPagesAdded = 0; - - PROPSHEETPAGE psp = {0}; - - psp.dwSize = sizeof( psp); - psp.hInstance = g_hInst; - psp.dwFlags = PSP_DEFAULT | PSP_USETITLE | PSP_USEHEADERTITLE; - psp.lParam = (LPARAM) this; - - psp.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_SHOWHELP); - psp.pfnDlgProc = (DLGPROC) CDot11SampleExtUI::HelpDlgProc; - psp.pszHeaderTitle = MAKEINTRESOURCE( IDS_TITLE_SHOWHELP); - m_hFirstPagePsp = CreatePropertySheetPage(& psp); - - psp.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_GETKEY); - psp.pfnDlgProc = (DLGPROC) CDot11SampleExtUI::GetKeyDlgProc; - psp.pszHeaderTitle = MAKEINTRESOURCE( IDS_TITLE_GETKEY); - HPROPSHEETPAGE hPsp= CreatePropertySheetPage(& psp); - - psp.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_LASTPAGE); - psp.pfnDlgProc = (DLGPROC) CDot11SampleExtUI::LastPageDlgProc; - psp.pszHeaderTitle = MAKEINTRESOURCE( IDS_TITLE_LASTPAGE); - m_hLastPagePsp = CreatePropertySheetPage(& psp); - - if( m_hFirstPagePsp - && hPsp - && m_hLastPagePsp) - { - aPages[0] = m_hFirstPagePsp; - aPages[1] = hPsp; - aPages[2] = m_hLastPagePsp; - - *pnPagesAdded = 3; - - return S_OK; - } - else - { - if(m_hFirstPagePsp) - { - DestroyPropertySheetPage(m_hFirstPagePsp); - } - - if(hPsp) - { - DestroyPropertySheetPage(hPsp); - } - - if(m_hLastPagePsp) - { - DestroyPropertySheetPage(m_hLastPagePsp); - } - - m_hFirstPagePsp = hPsp = m_hLastPagePsp = NULL; - - return E_FAIL; - } -} - -STDMETHODIMP CDot11SampleExtUI::GetFirstPage ( - HPROPSHEETPAGE *phpage - ) -{ - *phpage = m_hFirstPagePsp; - return S_OK; -} - -STDMETHODIMP -CDot11SampleExtUI::GetLastPage (HPROPSHEETPAGE *phpage) -{ - * phpage = m_hLastPagePsp; - return S_OK; -} - - -BOOL CALLBACK -CDot11SampleExtUI::HelpDlgProc ( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ) -{ - CDot11SampleExtUI* pthis = NULL; - - switch (uMsg) - { - - case WM_INITDIALOG: - { - pthis = GetThis(hwndDlg, uMsg, wParam, lParam); - if(pthis && pthis->m_pUIRequest) - { - // - // Convert the ANSI string into a WCHAR string and display it - // - int iBufferSize = MultiByteToWideChar(CP_ACP, 0, pthis->m_pUIRequest->title, -1, NULL, 0); - if (iBufferSize > 0) - { - WCHAR *pwszBuffer = new WCHAR[iBufferSize]; - - if (NULL != pwszBuffer) - { - pwszBuffer[0] = 0; - - (VOID)MultiByteToWideChar(CP_ACP, 0, pthis->m_pUIRequest->title, -1, pwszBuffer, iBufferSize); - - SetDlgItemText(hwndDlg, IDC_EDIT_HELPER, pwszBuffer); - - delete[] pwszBuffer; - } - } - } - } - return TRUE; - - case WM_DESTROY: - { - // Don't release our properties here, wait - // rather for Abort or Commit event notifications. - // Then we will have the same values when resurrected. - } - return TRUE; - - case WM_NOTIFY: - { - LPNMHDR pnmh = (LPNMHDR) lParam; - switch (pnmh->code) - { - - case PSN_SETACTIVE : - PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT); - return TRUE; - - case PSN_QUERYCANCEL: - { - IWizardSite *pIWizardSite = NULL; - HRESULT hr = S_OK; - - pthis = GetThis(hwndDlg, uMsg, wParam, lParam); - if(pthis != NULL) - { - hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite, (VOID **)&pIWizardSite); - if (SUCCEEDED(hr)) - { - HPROPSHEETPAGE hpage = NULL; - - hr = pIWizardSite->GetCancelledPage(&hpage); - if (SUCCEEDED(hr)) - { - PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); - } - pIWizardSite->Release(); - } - } - } - return TRUE; - } - } - return FALSE; - } - return FALSE; - -} - -BOOL CALLBACK -CDot11SampleExtUI::GetKeyDlgProc ( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ) - -{ - CDot11SampleExtUI* pthis = NULL; - - switch (uMsg) - { - case WM_INITDIALOG: - { - (VOID)GetThis(hwndDlg, uMsg, wParam, lParam); - } - return TRUE; - - case WM_DESTROY: - { - // Don't release our properties here, wait - // rather for Abort or Commit event notifications. - // Then we will have the same values when resurrected. - } - return TRUE; - - case WM_NOTIFY: - { - LPNMHDR pnmh = (LPNMHDR) lParam; - switch (pnmh->code) - { - case PSN_SETACTIVE : - - PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); - return TRUE; - - case PSN_WIZNEXT : - { - WCHAR szBuffer[50 + 1] = {0}; - HRESULT hr = S_OK; - IPropertyBag *pIPropertyBag = NULL; - - GetDlgItemText(hwndDlg, IDC_EDIT_KEY, szBuffer, 50); - pthis = GetThis(hwndDlg, uMsg, wParam, lParam); - - if(pthis) - { - hr = pthis->m_pUnkSite->QueryInterface(IID_IPropertyBag, (VOID **)&pIPropertyBag); - if (SUCCEEDED(hr)) - { - VARIANT v; - VariantInit(&v); - - WCHAR ihvKeyName[IHV_KEY_LENGTH] = {0}; - pthis->GetClsidPropertyName( - &GUID_SAMPLE_IHVUI_CLSID, - (LPWSTR) c_szIhvUIResponse, - ihvKeyName, - IHV_KEY_LENGTH - ); - - // Make sure we remove the previous property if any - hr = pIPropertyBag->Read(ihvKeyName, &v, NULL); - - VariantClear(&v); - V_VT(&v) = VT_BSTR; - v.bstrVal = SysAllocStringByteLen((LPCSTR)szBuffer, IHV_KEY_LENGTH); - - // Write the updated property if any - hr = pIPropertyBag->Write(ihvKeyName, &v); - pIPropertyBag->Release(); - - // - // hr is not used below - // - hr; - } - } - } - return TRUE; - - case PSN_QUERYCANCEL: - { - IWizardSite *pIWizardSite = NULL; - HRESULT hr = S_OK; - - pthis = GetThis(hwndDlg, uMsg, wParam, lParam); - - if(pthis) - { - hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite,(VOID **)&pIWizardSite); - if (SUCCEEDED(hr)) - { - HPROPSHEETPAGE hpage = NULL; - hr = pIWizardSite->GetCancelledPage(&hpage); - if (SUCCEEDED(hr)) - { - PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); - } - pIWizardSite->Release(); - } - } - } - return TRUE; - } - } - return FALSE; - } - return FALSE; - -} - -BOOL CALLBACK -CDot11SampleExtUI::LastPageDlgProc( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ) -{ - CDot11SampleExtUI* pthis = NULL; - - switch (uMsg) - { - case WM_INITDIALOG: - { - (VOID)GetThis(hwndDlg, uMsg, wParam, lParam); - } - return TRUE; - - case WM_DESTROY: - { - (VOID)GetThis(hwndDlg, uMsg, wParam, lParam); - } - return TRUE; - - case WM_NOTIFY: - { - LPNMHDR pnmh = (LPNMHDR) lParam; - switch (pnmh->code) - { - case PSN_SETACTIVE : - PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); - return TRUE; - - case PSN_WIZNEXT : - { - IWizardSite *pIWizardSite = NULL; - HRESULT hr = S_OK; - - pthis = GetThis(hwndDlg, uMsg, wParam, lParam); - if(pthis) - { - hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite,(VOID **)&pIWizardSite); - if (SUCCEEDED(hr)) - { - HPROPSHEETPAGE hpage = NULL; - - hr = pIWizardSite->GetNextPage(&hpage); - if (SUCCEEDED(hr)) - { - PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); - } - pIWizardSite->Release(); - } - } - SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LPARAM)-1); - } - return TRUE; - - case PSN_QUERYCANCEL: - { - IWizardSite *pIWizardSite = NULL; - HRESULT hr = S_OK; - - pthis = GetThis(hwndDlg, uMsg, wParam, lParam); - if(pthis) - { - hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite,(VOID **)&pIWizardSite); - if (SUCCEEDED(hr)) - { - HPROPSHEETPAGE hpage = NULL; - hr = pIWizardSite->GetCancelledPage(&hpage); - if (SUCCEEDED(hr)) - { - PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); - } - pIWizardSite->Release(); - } - } - } - return TRUE; - - } - } - return FALSE; - } - return FALSE; - -} - -HRESULT CDot11SampleExtUI::GetClsidPropertyName ( - _In_ const CLSID* pCLSID, - _In_opt_ PCWSTR pwszPropertyName, - _Out_writes_(maxResultLen) PWSTR pwszResultStr, - _In_ UINT maxResultLen) -{ - #define MIN_BUFFER_SIZE 50 - - wchar_t *pwszCLSID = NULL; - wchar_t *pwszKeyName = NULL; - HRESULT hRetCode = S_OK; - size_t iCharCount = 0; - - // Sanity - //======= - - if( pCLSID == NULL || - pwszResultStr == NULL || - maxResultLen < MIN_BUFFER_SIZE - ) - { - return E_INVALIDARG; - } - - // Convert CLSID to string - //======================== - - hRetCode = StringFromCLSID(*pCLSID, &pwszCLSID); - if(FAILED(hRetCode)) - { - goto Done; - } - - // Allocate buffer for entire CLSID\PropertyName string - //===================================================== - - iCharCount = wcslen(pwszCLSID) + 1; - if(pwszPropertyName) - { - iCharCount += wcslen(pwszPropertyName); - } - - pwszKeyName = new(std::nothrow) wchar_t[iCharCount]; - if(pwszKeyName == NULL) - { - hRetCode = E_OUTOFMEMORY; - goto Done; - } - - swprintf_s(pwszKeyName, iCharCount, L"%s%s", pwszCLSID, pwszPropertyName ? pwszPropertyName : L""); - - // Copy as much as we can to the target buffer - //============================================ - - wcsncpy_s(pwszResultStr, maxResultLen, pwszKeyName, _TRUNCATE); - -Done: - - if(pwszKeyName != NULL) - { - delete [] pwszKeyName; - } - - if(pwszCLSID != NULL) - { - CoTaskMemFree(pwszCLSID); - } - - return hRetCode; -} - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.h deleted file mode 100644 index 474c56a3..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUI.h +++ /dev/null @@ -1,238 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#ifndef _IHVSAMPLEEXTUI_H_ -#define _IHVSAMPLEEXTUI_H_ - -#include "precomp.h" - -// object ref count -extern long g_objRefCount; - -//lock count on server -extern long g_serverLock; - -#define IHV_KEY_LENGTH 64 - -#define MAX_IHV_CIPHERS 6 -#define MAX_IHV_AUTHS 6 - -// IHV Auth types -typedef enum _IHV_AUTH_TYPE { - IHVAuthV1, - IHVAuthV2, - IHVAuthV3, - IHVAuthInvalid -} IHV_AUTH_TYPE, *PIHV_AUTH_TYPE; - -// IHV cipher types -typedef enum _IHV_CIPHER_TYPE { - None, - IHVCipher1, - IHVCipher2, - IHVCipher3, - IHVCipherInvalid -} IHV_CIPHER_TYPE, *PIHV_CIPHER_TYPE; - -// structure holding valid ciphers for a given auth -typedef struct _IHV_AUTH_CIPHERS { - IHV_AUTH_TYPE IHVAuth; - DWORD dwCipherCount; - IHV_CIPHER_TYPE IHVCiphers[MAX_IHV_CIPHERS]; -} IHV_AUTH_CIPHERS, *PIHV_AUTH_CIPHERS; - -// structure for all auths and corresponding ciphers -typedef struct _IHV_AUTH_CIPHER_CAPABILITY { - DWORD dwAuthCount; - IHV_AUTH_CIPHERS IhvAuthCiphers[MAX_IHV_AUTHS]; -} IHV_AUTH_CIPHER_CAPABILITY, *PIHV_AUTH_CIPHER_CAPABILITY; - -typedef struct _IHV_SECURITY_CONFIG { - IHV_AUTH_TYPE Auth; - IHV_CIPHER_TYPE Cipher; -} IHV_SECURITY_CONFIG, *PIHV_SECURITY_CONFIG; - -extern IHV_AUTH_CIPHER_CAPABILITY g_IHVOneXExtCapability; - -extern LPWSTR g_IHVAuthFriendlyName[]; -extern LPWSTR g_IHVCipherFriendlyName[]; - - -#define PROP_COUNT_CONNECTION 1 - -#define PROP_COUNT_SECURITY 2 -#define PROP_COUNT_SEC_CIPHERS 2 -typedef enum _IHV_SECURITY_TYPE { - IHVSecurityV1, - IHVSecurityV2, - IHVSecurityInvalid -} IHV_SECURITY_TYPE, *PIHV_SECURITY_TYPE; -static LPWSTR wstrSecurityTypes[] = { L"IHV Security v1", L"IHV Security v2" }; - -#define PROP_COUNT_KEYEXTENSION 3 -static LPWSTR wstrAuthArray[] = { L"IHVAuth Open-with-1X", L"IHVAuth v1", L"IHVAuth v2" }; - - - - -#define IHV_CIPHER_COUNT 3 -static LPWSTR wstrCipherArray[] = { L"None", L"IHVCipher v1", L"IHVCipher v2" }; -static LPWSTR wstr1XCipherArray[] = { L"IHVCipher WEP"}; -static BSTR bstrCipherArray[IHV_CIPHER_COUNT] = {0}; - -typedef struct _IHV_CIPHERS_FOR_AUTH_INFO -{ - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO displayInfo[IHV_CIPHER_COUNT]; -} IHV_CIPHERS_FOR_AUTH_INFO; -static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO cipherOne = {1, DOT11_EXT_UI_DISPLAY_INFO_CIPHER, 0}; -static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO cipherTwo = {2, DOT11_EXT_UI_DISPLAY_INFO_CIPHER, 0}; -static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO cipherThree = {3, DOT11_EXT_UI_DISPLAY_INFO_CIPHER, 0}; -static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO ciphersInfoArray[MAX_IHV_AUTHS][MAX_IHV_CIPHERS] = {0}; - - -//////// structures for balloon ///////// - -struct IHV_UI_REQUEST -{ - char title[80]; - char help[80]; - - IHV_UI_REQUEST() - { - memset(this, 0, sizeof(IHV_UI_REQUEST)); - } -}; - -struct IHV_UI_RESPONSE -{ - char key[100]; - int num[150]; - - IHV_UI_RESPONSE() - { - memset(this, 0, sizeof(IHV_UI_RESPONSE)); - } -}; - - -class CDot11SampleExtUI: public IDot11SampleExtUI, public IWizardExtension, public IObjectWithSite -{ -public: - CDot11SampleExtUI(); - - ~CDot11SampleExtUI(); - - // IUnknown Implementation - BEGIN_INTERFACE_TABLE() - IMPLEMENTS_INTERFACE(IDot11ExtUI) - IMPLEMENTS_INTERFACE(IDot11SampleExtUI) - IMPLEMENTS_INTERFACE(IWizardExtension) - IMPLEMENTS_INTERFACE(IObjectWithSite) - END_INTERFACE_TABLE(); - - // Used to get the IHV friendly name - STDMETHODIMP - GetDot11ExtUIFriendlyName(BSTR* bstrFriendlyName); - - // Used to display an IHV specific connection page - STDMETHODIMP - GetDot11ExtUIProperties( - DOT11_EXT_UI_PROPERTY_TYPE ExtType, - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ); - - STDMETHODIMP - GetDot11ExtUIBalloonText( - BSTR pIHVUIRequest, // the UI request structure from IHV - BSTR* pwszBalloonText // the balloon text to be displayed - ); - - HRESULT - CreateConnectionProperties( - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ); - - HRESULT - CreateSecurityProperties( - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ); - - HRESULT - CreateKeyProperties( - ULONG *pcExtensions, - IDot11ExtUIProperty **ppDot11ExtUIProperty - ); - - // IObjectWithSite - STDMETHOD (SetSite) ( - IUnknown* pUnkSite - ); - - STDMETHOD (GetSite) ( - REFIID riid, - void** ppvSite - ); - - //IWizardExtension - STDMETHOD (AddPages) ( - HPROPSHEETPAGE* aPages, - UINT cPages, - UINT *pnPagesAdded - ); - - STDMETHOD (GetFirstPage) ( - HPROPSHEETPAGE *phpage - ); - - STDMETHOD (GetLastPage) ( - HPROPSHEETPAGE *phpage - ); - -private: - HRESULT FinalConstruct(); - void FinalRelease(); - static BOOL CALLBACK GetKeyDlgProc ( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ); - - - static BOOL CALLBACK HelpDlgProc ( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ); - - static BOOL CALLBACK LastPageDlgProc ( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam - ); - - HRESULT GetClsidPropertyName ( - _In_ const CLSID* pCLSID, - _In_opt_ PCWSTR pwszPropertyName, - _Out_writes_(maxResultLen) PWSTR pResultStr, - _In_ UINT maxResultLen); - -private: - IHV_UI_REQUEST* m_pUIRequest; - IHV_UI_RESPONSE m_UIResponse; - - IUnknown* m_pUnkSite; - - HPROPSHEETPAGE m_hFirstPagePsp; - HPROPSHEETPAGE m_hLastPagePsp; -}; - - -#endif _IHVSAMPLEEXTUI_H_ diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.cpp deleted file mode 100644 index e5eeb6cd..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.cpp +++ /dev/null @@ -1,345 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - -extern HINSTANCE g_hInst; - -// used by the con prop extensions -CIhvConnectivityProfile* pIhvConProfile; - - -CDot11SampleExtUIConProperty::CDot11SampleExtUIConProperty(): - m_crefCount(0), m_fInitialized(false), - m_ExtType(DOT11_EXT_UI_CONNECTION), m_fModified(FALSE) -{ - m_bstrFN = NULL; - InterlockedIncrement(&g_objRefCount); -} - -CDot11SampleExtUIConProperty::~CDot11SampleExtUIConProperty() -{ - SysFreeString(m_bstrFN); - InterlockedDecrement(&g_objRefCount); -} - - -STDMETHODIMP -CDot11SampleExtUIConProperty::GetDot11ExtUIPropertyFriendlyName(BSTR* bstrPropertyName) -{ - HRESULT hr = E_INVALIDARG; - if (false == m_fInitialized) - { - return hr; - } - - if (NULL != bstrPropertyName) - { - *bstrPropertyName = SysAllocString(m_bstrFN); - hr = S_OK; - } - - return hr; -} - -//Used to extend property -STDMETHODIMP -CDot11SampleExtUIConProperty::DisplayDot11ExtUIProperty( - HWND hParent, // Parent Window Handle - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - UNREFERENCED_PARAMETER(pIHVParams); - - if (!m_fInitialized) - { - hr = E_INVALIDARG; - goto error; - } - - // Store the passed-in string in a member variable so dialog box can display it - pIhvConProfile = new(std::nothrow) CIhvConnectivityProfile(); - if (pIhvConProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvConProfile->LoadXml(bstrIHVProfile); - m_fModified = FALSE; - - // Dialog will store the string in a member variable - DialogBoxParam( - g_hInst, - MAKEINTRESOURCE(IDD_PROPPAGE_SMALL), - hParent, - SimpleDialogProcCon, - (LPARAM)pIhvConProfile - ); - - m_fModified = pIhvConProfile->GetModified(); - - if (NULL != bstrModifiedIHVProfile) - { - if (m_fModified) - { - pIhvConProfile->EmitXml(bstrModifiedIHVProfile); - } - } - - if (NULL != pbIsModified) - { - *pbIsModified = m_fModified; - } - -error: - if(pIhvConProfile) - { - delete pIhvConProfile; - pIhvConProfile = NULL; - } - - return hr; -} - - -//Used to get the currently chosen entry to display as selected in the dropdown list -STDMETHODIMP -CDot11SampleExtUIConProperty::Dot11ExtUIPropertyGetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BOOL* pfIsSelected // flag denoting if this is the selected profile - ) -{ - HRESULT hr = S_OK; - UNREFERENCED_PARAMETER(bstrIHVProfile); - UNREFERENCED_PARAMETER(pIHVParams); - - // since there is only one connection profile always set it to true - *pfIsSelected = TRUE; - - return hr; -} - -//Used to set the current entry as chosen from the dropdown list -STDMETHODIMP -CDot11SampleExtUIConProperty::Dot11ExtUIPropertySetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - UNREFERENCED_PARAMETER(pIHVParams); - - if(bstrModifiedIHVProfile == NULL || pbIsModified == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - // in case the profile is NULL this will supply the default - pIhvConProfile = new(std::nothrow) CIhvConnectivityProfile(); - if (pIhvConProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvConProfile->LoadXml(bstrIHVProfile); - - pIhvConProfile->EmitXml(bstrModifiedIHVProfile); - *pbIsModified = pIhvConProfile->GetModified(); - -error: - if(pIhvConProfile != NULL) - { - delete pIhvConProfile; - pIhvConProfile = NULL; - } - return hr; -} - - -STDMETHODIMP -CDot11SampleExtUIConProperty::Dot11ExtUIPropertyHasConfigurationUI( - BOOL *fHasConfigurationUI - ) -{ - // this page always wants to show a config UI - *fHasConfigurationUI = TRUE; - return S_OK; -} - -//Used to get additional display data (ciphers for auth types) -STDMETHODIMP -CDot11SampleExtUIConProperty::Dot11ExtUIPropertyGetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - ULONG *pcEntries, // number of dependent strings - ULONG *puDefaultSelection, // the entry in the array to be selected by default - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure - ) -{ - UNREFERENCED_PARAMETER(dot11ExtUIDisplayInfoType); - UNREFERENCED_PARAMETER(pIHVParams); - UNREFERENCED_PARAMETER(bstrIHVProfile); - // we have no additional data to display - *pcEntries = 0; - *puDefaultSelection = 0; - *ppDot11ExtUIProperty = NULL; - return E_NOTIMPL; -} - -STDMETHODIMP -CDot11SampleExtUIConProperty::Dot11ExtUIPropertySetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - UNREFERENCED_PARAMETER(dot11ExtUIDisplayInfoType); - UNREFERENCED_PARAMETER(bstrIHVProfile); - UNREFERENCED_PARAMETER(pIHVParams); - UNREFERENCED_PARAMETER(pDot11ExtUIProperty); - UNREFERENCED_PARAMETER(bstrModifiedIHVProfile); - UNREFERENCED_PARAMETER(pbIsModified); - return E_NOTIMPL; -} - -STDMETHODIMP -CDot11SampleExtUIConProperty::Dot11ExtUIPropertyIsStandardSecurity( - BOOL *fIsStandardSecurity, // if this interface is a standard auth method - DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is - ) -{ - UNREFERENCED_PARAMETER(dot11ExtUISecurityType); - *fIsStandardSecurity = FALSE; - return E_NOTIMPL; -} - -STDMETHODIMP -CDot11SampleExtUIConProperty::Initialize(BSTR bstrPropertyName) -{ - HRESULT hr = E_INVALIDARG; - if (false == m_fInitialized) - { - // Set the FriendlyName - m_bstrFN = SysAllocString(bstrPropertyName); - m_fInitialized = true; - hr = S_OK; - } - return hr; -} - -INT_PTR CALLBACK -SimpleDialogProcCon( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - BOOL fRetVal = FALSE; - WCHAR szBuf[256] = {0}; - DWORD dwValue = 0; - BSTR bstrText = NULL; - - UNREFERENCED_PARAMETER(lParam); - - if(!pIhvConProfile) - { - goto error; - } - - switch(uMsg) - { - case WM_INITDIALOG: - { - // Dialog title - WCHAR strDialogTitle[MAX_PATH] = {0}; - (VOID)::LoadString( - g_hInst, - IDS_IHV_DEFAULT_CON_TITLE, - strDialogTitle, - MAX_PATH - ); - - SetWindowText(hwndDlg, strDialogTitle); - } - - // check the checkbox if needed - if(FAILED(pIhvConProfile->GetParamDWORD(&dwValue))) - { - dwValue = 0; - } - ::SendMessage( - GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), - BM_SETCHECK, - (WPARAM)(int)dwValue, - 0L - ); - - // Set text in the textbox - if(FAILED(pIhvConProfile->GetParamBSTR(&bstrText))) - { - bstrText = NULL; - } - SetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), bstrText); - - fRetVal = TRUE; - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case ID_OK: - GetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), szBuf, 255); - if(szBuf) - { - DWORD dwNewValue = 0; - - // get the button state and record it - dwNewValue = (int)::SendMessage( - GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), - BM_GETCHECK, - 0L, - 0L - ); - - pIhvConProfile->SetParamDWORD(dwNewValue); - pIhvConProfile->SetParamBSTR(szBuf); - - // Notify the owner window to carry out the task. - EndDialog(hwndDlg, 1); - fRetVal = TRUE; - } - break; - - case ID_CANCEL: - EndDialog(hwndDlg, 0); - fRetVal = TRUE; - break; - } - break; - } - -error: - return fRetVal; -} - - - - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.h deleted file mode 100644 index fd58c106..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUICon.h +++ /dev/null @@ -1,103 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#ifndef _IHVSAMPLEEXTUICON_H_ -#define _IHVSAMPLEEXTUICON_H_ - -class CDot11SampleExtUIConProperty: public IDot11SampleExtUIConProperty -{ -public: - CDot11SampleExtUIConProperty(); - - ~CDot11SampleExtUIConProperty(); - - // IUnknown Implementation - BEGIN_INTERFACE_TABLE() - IMPLEMENTS_INTERFACE(IDot11SampleExtUIConProperty) - END_INTERFACE_TABLE(); - - STDMETHODIMP - GetDot11ExtUIPropertyFriendlyName( - BSTR* bstrPropertyName // IHV friendly name - ); - - //Used to extend property - STDMETHODIMP - DisplayDot11ExtUIProperty( - HWND hParent, // Parent Window Handle - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - //Used to get the currently chosen entry to display as selected in the dropdown list - STDMETHODIMP - Dot11ExtUIPropertyGetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BOOL* pfIsSelected // flag denoting if this is the selected profile - ); - - //Used to set the current entry as chosen from the dropdown list - STDMETHODIMP - Dot11ExtUIPropertySetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - STDMETHODIMP - Dot11ExtUIPropertyHasConfigurationUI(BOOL *fHasConfigurationUI); - - //Used to get additional display data (ciphers for auth types) - STDMETHODIMP - Dot11ExtUIPropertyGetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - ULONG *pcEntries, // number of dependent strings - ULONG *puDefaultSelection, // the entry in the array to be selected by default - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure - ); - - STDMETHODIMP - Dot11ExtUIPropertySetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - STDMETHODIMP - Dot11ExtUIPropertyIsStandardSecurity( - BOOL *fIsStandardSecurity, // if this interface is a standard auth method - DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is - ); - - // initialize the connection page - STDMETHODIMP - Initialize(BSTR bstrPropertyName); - -private: - bool m_fInitialized; - BSTR m_bstrFN; - DOT11_EXT_UI_PROPERTY_TYPE m_ExtType; - BOOL m_fModified; -}; - - -INT_PTR CALLBACK -SimpleDialogProcCon( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -); - -#endif _IHVSAMPLEEXTUICON_H_ diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.cpp deleted file mode 100644 index 19c9610a..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.cpp +++ /dev/null @@ -1,462 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - -extern HINSTANCE g_hInst; - -// used by the con prop extensions -CIhvSecurityProfile* pIhvKeyProfile; - - -CDot11SampleExtUIKeyProperty::CDot11SampleExtUIKeyProperty(): - m_crefCount(0), m_fInitialized(false), - m_ExtType(DOT11_EXT_UI_KEYEXTENSION), m_fModified(FALSE) -{ - InterlockedIncrement(&g_objRefCount); - memset( - &m_IHVAuthCiphers, - 0, - sizeof(IHV_AUTH_CIPHERS) - ); - m_bstrFN = NULL; -} - -CDot11SampleExtUIKeyProperty::~CDot11SampleExtUIKeyProperty() -{ - if(m_bstrFN != NULL) { - SysFreeString(m_bstrFN); - } - - InterlockedDecrement(&g_objRefCount); -} - - -STDMETHODIMP -CDot11SampleExtUIKeyProperty::GetDot11ExtUIPropertyFriendlyName(BSTR* bstrPropertyName) -{ - HRESULT hr = E_INVALIDARG; - if (false == m_fInitialized) - { - return hr; - } - - if (NULL != g_IHVAuthFriendlyName[m_IHVAuthCiphers.IHVAuth]) - { - *bstrPropertyName = SysAllocString(g_IHVAuthFriendlyName[m_IHVAuthCiphers.IHVAuth]); - hr = S_OK; - } - - return hr; -} - -//Used to extend property -STDMETHODIMP -CDot11SampleExtUIKeyProperty::DisplayDot11ExtUIProperty( - HWND hParent, // Parent Window Handle - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - UNREFERENCED_PARAMETER(pIHVParams); - - if (!m_fInitialized) - { - hr = E_INVALIDARG; - goto error; - } - - // Store the passed-in string in a member variable so dialog box can display it - pIhvKeyProfile = new(std::nothrow) CIhvSecurityProfile(); - if (pIhvKeyProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvKeyProfile->LoadXml(bstrIHVProfile); - m_fModified = FALSE; - - // Dialog will store the string in a member variable - DialogBoxParam( - g_hInst, - MAKEINTRESOURCE(IDD_PROPPAGE_SMALL), - hParent, - SimpleDialogProcKey, - (LPARAM)pIhvKeyProfile - ); - - m_fModified = pIhvKeyProfile->GetModified(); - - if (NULL != bstrModifiedIHVProfile) - { - if (m_fModified) - { - pIhvKeyProfile->EmitXml(bstrModifiedIHVProfile); - } - } - - if (NULL != pbIsModified) - { - *pbIsModified = m_fModified; - } - -error: - if(pIhvKeyProfile) - { - delete pIhvKeyProfile; - pIhvKeyProfile = NULL; - } - - return hr; -} - - -//Used to get the currently chosen entry to display as selected in the dropdown list -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyGetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BOOL* pfIsSelected // flag denoting if this is the selected profile - ) -{ - HRESULT hr = S_OK; - IHV_AUTH_TYPE currentAuthType = IHVAuthInvalid; - UNREFERENCED_PARAMETER(pIHVParams); - - if(pfIsSelected == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - *pfIsSelected = FALSE; - - pIhvKeyProfile = new(std::nothrow) CIhvSecurityProfile(); - if (pIhvKeyProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvKeyProfile->LoadXml(bstrIHVProfile); - - hr = pIhvKeyProfile->GetAuthType(¤tAuthType); - if(FAILED(hr)) - { - // if it fails then choose a default selected auth - hr = S_OK; - if(IHVAuthV1 == m_IHVAuthCiphers.IHVAuth) - { - *pfIsSelected = TRUE; - } - } - else if(currentAuthType == m_IHVAuthCiphers.IHVAuth) - { - *pfIsSelected = TRUE; - } - -error: - if(pIhvKeyProfile != NULL) - { - delete pIhvKeyProfile; - pIhvKeyProfile = NULL; - } - return hr; -} - -//Used to set the current entry as chosen from the dropdown list -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertySetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - UNREFERENCED_PARAMETER(pIHVParams); - - if(bstrModifiedIHVProfile == NULL || pbIsModified == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - pIhvKeyProfile = new(std::nothrow) CIhvSecurityProfile(); - if (pIhvKeyProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvKeyProfile->LoadXml(bstrIHVProfile); - - pIhvKeyProfile->SetAuthType(m_IHVAuthCiphers.IHVAuth); - pIhvKeyProfile->SetFullSecurityFlag(FALSE); - - pIhvKeyProfile->EmitXml(bstrModifiedIHVProfile); - *pbIsModified = pIhvKeyProfile->GetModified(); - -error: - if(pIhvKeyProfile != NULL) - { - delete pIhvKeyProfile; - pIhvKeyProfile = NULL; - } - return hr; -} - - -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyHasConfigurationUI( - BOOL *fHasConfigurationUI) -{ - // this page always wants to show a config UI unless its of IHVAuthOpen1X auth - *fHasConfigurationUI = (m_IHVAuthCiphers.IHVAuth == IHVAuthV3)?FALSE:TRUE; - return S_OK; -} - -//Used to get additional display data (ciphers for auth types) -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyGetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - ULONG *pcEntries, // number of dependent strings - ULONG *puDefaultSelection, // the entry in the array to be selected by default - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure - ) -{ - HRESULT hr = S_OK; - DWORD i = 0; - DWORD dwDefaultSelection = 0; - CIhvSecurityProfile IhvSecurityProfile; - IHV_CIPHER_TYPE cipherType = IHVCipherInvalid; - - UNREFERENCED_PARAMETER(pIHVParams); - - if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) - { - hr = E_NOTIMPL; - goto error; - } - - IhvSecurityProfile.LoadXml(bstrIHVProfile); - hr = IhvSecurityProfile.GetCipherType(&cipherType); - if(FAILED(hr)) - { - goto error; - } - - for(i = 0; i < m_IHVAuthCiphers.dwCipherCount; ++i) - { - ciphersInfoArray[m_IHVAuthCiphers.IHVAuth][i].dwDataKey = m_IHVAuthCiphers.IHVCiphers[i]; - ciphersInfoArray[m_IHVAuthCiphers.IHVAuth][i].dot11ExtUIDisplayInfoType = DOT11_EXT_UI_DISPLAY_INFO_CIPHER; - ciphersInfoArray[m_IHVAuthCiphers.IHVAuth][i].bstrDisplayText = SysAllocString(g_IHVCipherFriendlyName[m_IHVAuthCiphers.IHVCiphers[i]]); - - if(m_IHVAuthCiphers.IHVCiphers[i] == cipherType) - { - dwDefaultSelection = i; - } - } - - // for the given auth type we want to return the list of compatible ciphers - *ppDot11ExtUIProperty = ciphersInfoArray[m_IHVAuthCiphers.IHVAuth]; - *pcEntries = m_IHVAuthCiphers.dwCipherCount; - *puDefaultSelection = dwDefaultSelection; - -error: - return hr; -} - - -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertySetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - - CIhvSecurityProfile IhvSecurityProfile; - - UNREFERENCED_PARAMETER(pIHVParams); - - if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) - { - hr = E_NOTIMPL; - goto error; - } - - if(pDot11ExtUIProperty == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - hr = IhvSecurityProfile.LoadXml(bstrIHVProfile); - if(FAILED(hr)) - { - goto error; - } - hr = IhvSecurityProfile.SetCipherType((IHV_CIPHER_TYPE)pDot11ExtUIProperty->dwDataKey); - if(FAILED(hr)) - { - goto error; - } - - hr = IhvSecurityProfile.EmitXml(bstrModifiedIHVProfile); - *pbIsModified = IhvSecurityProfile.GetModified(); - -error: - return hr; -} - - -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyIsStandardSecurity( - BOOL *fIsStandardSecurity, // if this interface is a standard auth method - DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is - ) -{ - *fIsStandardSecurity = FALSE; - - if (m_IHVAuthCiphers.IHVAuth == IHVAuthV1) - { - *fIsStandardSecurity = TRUE; - *dot11ExtUISecurityType = DOT11_EXT_UI_SECURITY_8021X; - } - - return S_OK; -} - - -STDMETHODIMP -CDot11SampleExtUIKeyProperty::Initialize(BYTE* pbData) -{ - HRESULT hr = E_INVALIDARG; - PIHV_AUTH_CIPHERS pIhvAuthCiphers = NULL; - pIhvAuthCiphers = (PIHV_AUTH_CIPHERS) pbData; - - if (false == m_fInitialized) - { - // Set the FriendlyName - m_fInitialized = true; - memcpy( - &m_IHVAuthCiphers, - pIhvAuthCiphers, - sizeof(IHV_AUTH_CIPHERS) - ); - hr = S_OK; - } - return hr; -} - -INT_PTR CALLBACK -SimpleDialogProcKey( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - BOOL fRetVal = FALSE; - WCHAR szBuf[256] = {0}; - DWORD dwValue = 0; - BSTR bstrText = NULL; - - UNREFERENCED_PARAMETER(lParam); - - if(!pIhvKeyProfile) - { - goto error; - } - - switch(uMsg) - { - case WM_INITDIALOG: - { - // Dialog title - WCHAR strDialogTitle[MAX_PATH] = {0}; - (VOID)::LoadString( - g_hInst, - IDS_IHV_DEFAULT_KEY_TITLE, - strDialogTitle, - MAX_PATH - ); - - SetWindowText(hwndDlg, strDialogTitle); - } - - // check the checkbox if needed - if(FAILED(pIhvKeyProfile->GetParamDWORD(&dwValue))) - { - dwValue = 0; - } - ::SendMessage( - GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), - BM_SETCHECK, - (WPARAM)(int)dwValue, - 0L - ); - - // Set text in the textbox - if(FAILED(pIhvKeyProfile->GetParamBSTR(&bstrText))) - { - bstrText = NULL; - } - SetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), bstrText); - - fRetVal = TRUE; - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case ID_OK: - GetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), szBuf, 255); - if(szBuf) - { - DWORD dwNewValue = 0; - - // get the button state and record it - dwNewValue = (int)::SendMessage( - GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), - BM_GETCHECK, - 0L, - 0L - ); - - pIhvKeyProfile->SetParamDWORD(dwNewValue); - pIhvKeyProfile->SetParamBSTR(szBuf); - pIhvKeyProfile->SetFullSecurityFlag(FALSE); - - // Notify the owner window to carry out the task. - EndDialog(hwndDlg, 1); - fRetVal = TRUE; - } - break; - - case ID_CANCEL: - EndDialog(hwndDlg, 0); - fRetVal = TRUE; - break; - } - break; - } - -error: - return fRetVal; -} - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.h deleted file mode 100644 index c106e549..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUIKey.h +++ /dev/null @@ -1,104 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#ifndef _IHVSAMPLEEXTUIKEY_H_ -#define _IHVSAMPLEEXTUIKEY_H_ - -class CDot11SampleExtUIKeyProperty: public IDot11SampleExtUIKeyProperty -{ -public: - CDot11SampleExtUIKeyProperty(); - - ~CDot11SampleExtUIKeyProperty(); - - // IUnknown Implementation - BEGIN_INTERFACE_TABLE() - IMPLEMENTS_INTERFACE(IDot11SampleExtUIKeyProperty) - END_INTERFACE_TABLE(); - - STDMETHODIMP - GetDot11ExtUIPropertyFriendlyName( - BSTR* bstrPropertyName // IHV friendly name - ); - - //Used to extend property - STDMETHODIMP - DisplayDot11ExtUIProperty( - HWND hParent, // Parent Window Handle - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - //Used to get the currently chosen entry to display as selected in the dropdown list - STDMETHODIMP - Dot11ExtUIPropertyGetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BOOL* pfIsSelected // flag denoting if this is the selected profile - ); - - //Used to set the current entry as chosen from the dropdown list - STDMETHODIMP - Dot11ExtUIPropertySetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - STDMETHODIMP - Dot11ExtUIPropertyHasConfigurationUI(BOOL *fHasConfigurationUI); - - //Used to get additional display data (ciphers for auth types) - STDMETHODIMP - Dot11ExtUIPropertyGetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - ULONG *pcEntries, // number of dependent strings - ULONG *puDefaultSelection, // the entry in the array to be selected by default - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure - ); - - STDMETHODIMP - Dot11ExtUIPropertySetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - STDMETHODIMP - Dot11ExtUIPropertyIsStandardSecurity( - BOOL *fIsStandardSecurity, // if this interface is a standard auth method - DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is - ); - - // initialize the key extension page - STDMETHODIMP - Initialize(BYTE* pbData); - -private: - bool m_fInitialized; - BSTR m_bstrFN; - DOT11_EXT_UI_PROPERTY_TYPE m_ExtType; - BOOL m_fModified; - IHV_AUTH_CIPHERS m_IHVAuthCiphers; -}; - - -INT_PTR CALLBACK -SimpleDialogProcKey( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -); - -#endif _IHVSAMPLEEXTUIKEY_H_ diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.cpp deleted file mode 100644 index 1cfa3714..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.cpp +++ /dev/null @@ -1,434 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - -extern HINSTANCE g_hInst; - -// used by the con prop extensions -CIhvSecurityProfile* pIhvSecProfile; - -CDot11SampleExtUISecProperty::CDot11SampleExtUISecProperty(): - m_crefCount(0), m_fInitialized(false), - m_ExtType(DOT11_EXT_UI_SECURITY), m_fModified(FALSE), - m_IhvSecurityType(IHVSecurityInvalid) -{ - m_bstrFN = NULL; - InterlockedIncrement(&g_objRefCount); -} - -CDot11SampleExtUISecProperty::~CDot11SampleExtUISecProperty() -{ - SysFreeString(m_bstrFN); - InterlockedDecrement(&g_objRefCount); -} - - -STDMETHODIMP -CDot11SampleExtUISecProperty::GetDot11ExtUIPropertyFriendlyName(BSTR* bstrPropertyName) -{ - HRESULT hr = E_INVALIDARG; - if (false == m_fInitialized) - { - return hr; - } - - if (NULL != bstrPropertyName) - { - *bstrPropertyName = SysAllocString(m_bstrFN); - hr = S_OK; - } - - return hr; -} - -//Used to extend property -STDMETHODIMP -CDot11SampleExtUISecProperty::DisplayDot11ExtUIProperty( - HWND hParent, // Parent Window Handle - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - - UNREFERENCED_PARAMETER(pIHVParams); - - if (!m_fInitialized) - { - hr = E_INVALIDARG; - goto error; - } - - // Store the passed-in string in a member variable so dialog box can display it - pIhvSecProfile = new(std::nothrow) CIhvSecurityProfile(); - if (pIhvSecProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - pIhvSecProfile->LoadXml(bstrIHVProfile); - m_fModified = FALSE; - - // Dialog will store the string in a member variable - DialogBoxParam( - g_hInst, - MAKEINTRESOURCE(IDD_PROPPAGE_SMALL), - hParent, - SimpleDialogProcSec, - (LPARAM)pIhvSecProfile - ); - - m_fModified = pIhvSecProfile->GetModified(); - - if (NULL != bstrModifiedIHVProfile) - { - if (m_fModified) - { - pIhvSecProfile->EmitXml(bstrModifiedIHVProfile); - } - } - - if (NULL != pbIsModified) - { - *pbIsModified = m_fModified; - } - -error: - if(pIhvSecProfile) - { - delete pIhvSecProfile; - pIhvSecProfile = NULL; - } - - return hr; -} - - -//Used to get the currently chosen entry to display as selected in the dropdown list -STDMETHODIMP -CDot11SampleExtUISecProperty::Dot11ExtUIPropertyGetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BOOL* pfIsSelected // flag denoting if this is the selected profile - ) -{ - HRESULT hr = S_OK; - IHV_SECURITY_TYPE currentSecurityType = IHVSecurityInvalid; - - UNREFERENCED_PARAMETER(pIHVParams); - - if(pfIsSelected == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - *pfIsSelected = FALSE; - - pIhvSecProfile = new(std::nothrow) CIhvSecurityProfile(); - if (pIhvSecProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvSecProfile->LoadXml(bstrIHVProfile); - - hr = pIhvSecProfile->GetSecurityType(¤tSecurityType); - if(FAILED(hr)) - { - hr = S_OK; - if(IHVSecurityV1 == m_IhvSecurityType) - { - *pfIsSelected = TRUE; - } - } - else if(currentSecurityType == m_IhvSecurityType) - { - *pfIsSelected = TRUE; - } - -error: - if(pIhvSecProfile != NULL) - { - delete pIhvSecProfile; - pIhvSecProfile = NULL; - } - return hr; -} - -//Used to set the current entry as chosen from the dropdown list -STDMETHODIMP -CDot11SampleExtUISecProperty::Dot11ExtUIPropertySetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - - UNREFERENCED_PARAMETER(pIHVParams); - - if(bstrModifiedIHVProfile == NULL || pbIsModified == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - pIhvSecProfile = new(std::nothrow) CIhvSecurityProfile(); - if (pIhvSecProfile == NULL) - { - hr = E_OUTOFMEMORY; - goto error; - } - - pIhvSecProfile->LoadXml(bstrIHVProfile); - - pIhvSecProfile->SetSecurityType(m_IhvSecurityType); - pIhvSecProfile->SetFullSecurityFlag(TRUE); - - pIhvSecProfile->EmitXml(bstrModifiedIHVProfile ); - *pbIsModified = pIhvSecProfile->GetModified(); - -error: - if(pIhvSecProfile != NULL) - { - delete pIhvSecProfile; - pIhvSecProfile = NULL; - } - return hr; -} - - -STDMETHODIMP -CDot11SampleExtUISecProperty::Dot11ExtUIPropertyHasConfigurationUI( - BOOL *fHasConfigurationUI) -{ - // this page always wants to show a config UI - *fHasConfigurationUI = TRUE; - return S_OK; -} - -//Used to get additional display data (ciphers for auth types) -STDMETHODIMP -CDot11SampleExtUISecProperty::Dot11ExtUIPropertyGetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - ULONG *pcEntries, // number of dependent strings - ULONG *puDefaultSelection, // the entry in the array to be selected by default - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure - ) -{ - HRESULT hr = S_OK; - DWORD i = 0; - CIhvSecurityProfile IhvSecurityProfile; - IHV_CIPHER_TYPE cipherType = IHVCipherInvalid; - - UNREFERENCED_PARAMETER(pIHVParams); - - if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) - { - hr = E_NOTIMPL; - goto error; - } - - IhvSecurityProfile.LoadXml(bstrIHVProfile); - hr = IhvSecurityProfile.GetCipherType(&cipherType); - if(FAILED(hr)) - { - goto error; - } - - for(i = 0; i < PROP_COUNT_SEC_CIPHERS; ++i) - { - ciphersInfoArray[m_IhvSecurityType][i].dwDataKey = i; - ciphersInfoArray[m_IhvSecurityType][i].dot11ExtUIDisplayInfoType = DOT11_EXT_UI_DISPLAY_INFO_CIPHER; - ciphersInfoArray[m_IhvSecurityType][i].bstrDisplayText = SysAllocString(g_IHVCipherFriendlyName[i]); - } - - // for the given auth type we want to return the list of compatible ciphers - *ppDot11ExtUIProperty = ciphersInfoArray[m_IhvSecurityType]; - *pcEntries = PROP_COUNT_SEC_CIPHERS; - *puDefaultSelection = cipherType >= IHVCipherInvalid ? 0 : cipherType; - -error: - return hr; -} - -STDMETHODIMP -CDot11SampleExtUISecProperty::Dot11ExtUIPropertySetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ) -{ - HRESULT hr = S_OK; - - UNREFERENCED_PARAMETER(pIHVParams); - - CIhvSecurityProfile IhvSecurityProfile; - - if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) - { - hr = E_NOTIMPL; - goto error; - } - - if(pDot11ExtUIProperty == NULL) - { - hr = E_INVALIDARG; - goto error; - } - - hr = IhvSecurityProfile.LoadXml(bstrIHVProfile); - if(FAILED(hr)) - { - goto error; - } - hr = IhvSecurityProfile.SetCipherType((IHV_CIPHER_TYPE)pDot11ExtUIProperty->dwDataKey); - if(FAILED(hr)) - { - goto error; - } - - hr = IhvSecurityProfile.EmitXml(bstrModifiedIHVProfile); - *pbIsModified = IhvSecurityProfile.GetModified(); - -error: - return hr; -} - -STDMETHODIMP -CDot11SampleExtUISecProperty::Dot11ExtUIPropertyIsStandardSecurity( - BOOL *fIsStandardSecurity, // if this interface is a standard auth method - DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is - ) -{ - UNREFERENCED_PARAMETER(dot11ExtUISecurityType); - *fIsStandardSecurity = FALSE; - return S_OK; -} - -STDMETHODIMP -CDot11SampleExtUISecProperty::Initialize(BSTR bstrPropertyName, DWORD dwIhvSecurity) -{ - HRESULT hr = E_INVALIDARG; - if (false == m_fInitialized) - { - // Set the FriendlyName - m_bstrFN = SysAllocString(bstrPropertyName); - m_IhvSecurityType = (IHV_SECURITY_TYPE)dwIhvSecurity; - m_fInitialized = true; - hr = S_OK; - } - return hr; -} - -INT_PTR CALLBACK -SimpleDialogProcSec( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - BOOL fRetVal = FALSE; - WCHAR szBuf[256] = {0}; - DWORD dwValue = 0; - BSTR bstrText = NULL; - - UNREFERENCED_PARAMETER(lParam); - - if(!pIhvSecProfile) - { - goto error; - } - - switch(uMsg) - { - case WM_INITDIALOG: - { - // Dialog title - WCHAR strDialogTitle[MAX_PATH] = {0}; - (VOID)::LoadString( - g_hInst, - IDS_IHV_DEFAULT_SEC_TITLE, - strDialogTitle, - MAX_PATH - ); - - SetWindowText(hwndDlg, strDialogTitle); - } - - // check the checkbox if needed - if(FAILED(pIhvSecProfile->GetParamDWORD(&dwValue))) - { - dwValue = 0; - } - ::SendMessage( - GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), - BM_SETCHECK, - (WPARAM)(int)dwValue, - 0L - ); - - // Set text in the textbox - if(FAILED(pIhvSecProfile->GetParamBSTR(&bstrText))) - { - bstrText = NULL; - } - SetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), bstrText); - - fRetVal = TRUE; - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case ID_OK: - GetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), szBuf, 255); - if(szBuf) - { - DWORD dwNewValue = 0; - - // get the button state and record it - dwNewValue = (int)::SendMessage( - GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), - BM_GETCHECK, - 0L, - 0L - ); - - pIhvSecProfile->SetParamDWORD(dwNewValue); - pIhvSecProfile->SetParamBSTR(szBuf); - pIhvSecProfile->SetFullSecurityFlag(TRUE); - - // Notify the owner window to carry out the task. - EndDialog(hwndDlg, 1); - fRetVal = TRUE; - } - break; - - case ID_CANCEL: - EndDialog(hwndDlg, 0); - fRetVal = TRUE; - break; - } - break; - } - -error: - return fRetVal; -} - - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.h deleted file mode 100644 index fc8caa2e..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleExtUISec.h +++ /dev/null @@ -1,105 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#ifndef _IHVSAMPLEEXTUISEC_H_ -#define _IHVSAMPLEEXTUISEC_H_ - -class CDot11SampleExtUISecProperty: public IDot11SampleExtUISecProperty -{ -public: - CDot11SampleExtUISecProperty(); - - ~CDot11SampleExtUISecProperty(); - - // IUnknown Implementation - BEGIN_INTERFACE_TABLE() - IMPLEMENTS_INTERFACE(IDot11SampleExtUISecProperty) - END_INTERFACE_TABLE(); - - STDMETHODIMP - GetDot11ExtUIPropertyFriendlyName( - BSTR* bstrPropertyName // IHV friendly name - ); - - //Used to extend property - STDMETHODIMP - DisplayDot11ExtUIProperty( - HWND hParent, // Parent Window Handle - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - //Used to get the currently chosen entry to display as selected in the dropdown list - STDMETHODIMP - Dot11ExtUIPropertyGetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BOOL* pfIsSelected // flag denoting if this is the selected profile - ); - - //Used to set the current entry as chosen from the dropdown list - STDMETHODIMP - Dot11ExtUIPropertySetSelected( - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - STDMETHODIMP - Dot11ExtUIPropertyHasConfigurationUI(BOOL *fHasConfigurationUI); - - //Used to get additional display data (ciphers for auth types) - STDMETHODIMP - Dot11ExtUIPropertyGetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - ULONG *pcEntries, // number of dependent strings - ULONG *puDefaultSelection, // the entry in the array to be selected by default - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure - ); - - STDMETHODIMP - Dot11ExtUIPropertySetDisplayInfo( - DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified - BSTR bstrIHVProfile, // IHV data from the profile - PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings - DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure - BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile - BOOL* pbIsModified // flag to denote if profile was modified - ); - - STDMETHODIMP - Dot11ExtUIPropertyIsStandardSecurity( - BOOL *fIsStandardSecurity, // if this interface is a standard auth method - DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is - ); - - // initialize the security page - STDMETHODIMP - Initialize(BSTR bstrPropertyName, DWORD dwIhvSecurity); - -private: - bool m_fInitialized; - BSTR m_bstrFN; - DOT11_EXT_UI_PROPERTY_TYPE m_ExtType; - BOOL m_fModified; - IHV_SECURITY_TYPE m_IhvSecurityType; - IHV_CIPHER_TYPE m_IHVCipherList[MAX_CIPHER_TYPES]; -}; - - -INT_PTR CALLBACK -SimpleDialogProcSec( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -); - -#endif _IHVSAMPLEEXTUISEC_H_ diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.cpp deleted file mode 100644 index d4b0b060..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.cpp +++ /dev/null @@ -1,918 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - -HRESULT -CIhvProfileBase::GetTextFromNode -( - IN LPCWSTR pszQuery, - OUT BSTR* pbstrText -) -{ - HRESULT hr = S_OK; - BSTR bstrQuery = NULL; - IXMLDOMNode* pQueryNode = NULL; - - if ( !m_pRootNode ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - if ( (!pszQuery) || (!pbstrText) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Bstr - ( - pszQuery, - &bstrQuery - ); - BAIL_ON_FAILURE( hr ); - - hr = m_pRootNode->selectSingleNode( bstrQuery, &pQueryNode ); - BAIL_ON_FAILURE( hr ); - - if (!pQueryNode) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = pQueryNode->get_text( pbstrText ); - BAIL_ON_FAILURE( hr ); - - if ( !(*pbstrText) ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - -error: - RELEASE_INTERFACE( pQueryNode ); - SYS_FREE_STRING( bstrQuery ); - return hr; -} - - -HRESULT -CIhvProfileBase::PutTextInNode -( - IN LPCWSTR pszQuery, - IN BSTR bstrText -) -{ - HRESULT hr = S_OK; - BSTR bstrQuery = NULL; - BSTR bstrOrig = NULL; - BOOL bPut = TRUE; - IXMLDOMNode* pQueryNode = NULL; - - if ( !m_pRootNode ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - if ( (!pszQuery) || (!bstrText) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Bstr - ( - pszQuery, - &bstrQuery - ); - BAIL_ON_FAILURE( hr ); - - hr = m_pRootNode->selectSingleNode( bstrQuery, &pQueryNode ); - BAIL_ON_FAILURE( hr ); - - if (!pQueryNode) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = pQueryNode->get_text( &bstrOrig ); - BAIL_ON_FAILURE( hr ); - - if ( bstrOrig && ( 0 == wcscmp( bstrOrig, bstrText ) ) ) - { - bPut = FALSE; - } - - if ( bPut ) - { - hr = pQueryNode->put_text( bstrText ); - BAIL_ON_FAILURE( hr ); - - SetModified( ); - } - -error: - RELEASE_INTERFACE( pQueryNode ); - SYS_FREE_STRING( bstrQuery ); - SYS_FREE_STRING( bstrOrig ); - return hr; -} - - -HRESULT -CIhvProfileBase::LoadXml -( - IN BSTR bstrProfileData -) -{ - HRESULT hr = S_OK; - IXMLDOMDocument* pDOMDoc = NULL; - IXMLDOMElement* pDocElem = NULL; - BSTR bstrIhvProfile = NULL; - VARIANT_BOOL vfSuccess; - - if ( !bstrProfileData ) - { - hr = GetDefaultXml( &bstrIhvProfile ); - BAIL_ON_FAILURE( hr ); - } - else - { - bstrIhvProfile = bstrProfileData; - } - - if ( m_pRootNode ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = - CoCreateInstance - ( - CLSID_DOMDocument, - NULL, - CLSCTX_ALL, - IID_IXMLDOMDocument, - (LPVOID *) &pDOMDoc - ); - BAIL_ON_FAILURE( hr ); - - hr = - pDOMDoc->loadXML - ( - bstrIhvProfile, - &vfSuccess - ); - BAIL_ON_FAILURE( hr ); - - if ( VARIANT_TRUE != vfSuccess ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = - pDOMDoc->get_documentElement - ( - &pDocElem - ); - BAIL_ON_FAILURE( hr ); - - // Caching the pointer to the document element - // in a member variable. - m_pRootNode = pDocElem; - pDocElem = NULL; - - -error: - if ( !bstrProfileData ) - { - SYS_FREE_STRING( bstrIhvProfile ); - } - RELEASE_INTERFACE( pDOMDoc ); - RELEASE_INTERFACE( pDocElem ); - return hr; -} - - -HRESULT -CIhvProfileBase::EmitXml -( - OUT BSTR* pbstrIhvProfile -) -{ - HRESULT hr = S_OK; - - if ( !pbstrIhvProfile ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( !m_pRootNode ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - hr = m_pRootNode->get_xml( pbstrIhvProfile ); - BAIL_ON_FAILURE( hr ); - -error: - return hr; -} - - -////////////////////////////////////////////////////////// - -WCHAR g_szDefaultConnectivityProfile[] = -L"" -L" 0" -L" parameter value" -L"" -; - - - -HRESULT -CIhvConnectivityProfile::GetDefaultXml -( - BSTR* pbstrDefault -) -{ - SetModified(); - return Wstr2Bstr( g_szDefaultConnectivityProfile, pbstrDefault ); -} - - - -HRESULT -CIhvConnectivityProfile::GetParamDWORD -( - DWORD* pdwParam1 -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - CON_PARAM2_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2Dword - ( - bstrData, - pdwParam1 - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - -HRESULT -CIhvConnectivityProfile::SetParamDWORD -( - DWORD dwNewValue -) -{ - HRESULT hr = S_OK; - BSTR bstrText = NULL; - - hr = - Dword2Bstr - ( - dwNewValue, - &bstrText - ); - BAIL_ON_FAILURE( hr ); - - hr = - PutTextInNode - ( - CON_PARAM2_XPATH, - bstrText - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrText ); - return hr; -} - - - -HRESULT -CIhvConnectivityProfile::GetParamBSTR -( - BSTR* pbstrValue -) -{ - HRESULT hr = S_OK; - - hr = - GetTextFromNode - ( - CON_PARAM1_XPATH, - pbstrValue - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - - -HRESULT -CIhvConnectivityProfile::SetParamBSTR -( - BSTR bstrNewValue -) -{ - HRESULT hr = S_OK; - - hr = - PutTextInNode - ( - CON_PARAM1_XPATH, - bstrNewValue - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - -HRESULT -CIhvConnectivityProfile::GetNativeData -( - LPVOID* ppvData -) -{ - HRESULT hr = S_OK; - PIHV_CONNECTIVITY_PROFILE pIhvProfile = NULL; - BSTR bstrParam2 = NULL; - - if ( !ppvData ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - pIhvProfile = (PIHV_CONNECTIVITY_PROFILE) malloc( sizeof( IHV_CONNECTIVITY_PROFILE ) ); - if ( !pIhvProfile ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - ZeroMemory( pIhvProfile, sizeof( IHV_CONNECTIVITY_PROFILE ) ); - - hr = - GetParamBSTR - ( - &bstrParam2 - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrParam2 ) { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Wstr - ( - bstrParam2, - &(pIhvProfile->pszParam2) - ); - BAIL_ON_FAILURE( hr ); - - hr = - GetParamDWORD - ( - &(pIhvProfile->dwParam1) - ); - BAIL_ON_FAILURE( hr ); - - // Transfering local cache to OUT parameter. - (*ppvData) = pIhvProfile; - pIhvProfile = NULL; - -error: - if ( pIhvProfile ) - { - free( pIhvProfile->pszParam2 ); // NULL Safe. - free( pIhvProfile ); - } - SYS_FREE_STRING( bstrParam2 ); - return hr; -} - - - -/////////////////////////////////////////// - -LPCWSTR gppszIhvAuthTypes[] = -{ - L"IHVAuthV1", - L"IHVAuthV2", - L"IHVAuthV3" -}; - -LPCWSTR gppszIhvSecurityTypes[] = -{ - L"IHVSecurityV1", - L"IHVSecurityV2", -}; - -LPCWSTR gppszIhvCipherTypes[] = -{ - L"None", - L"IHVCipher1", - L"IHVCipher2", - L"IHVCipher3" -}; - - -WCHAR g_szDefaultSecurityProfile[] = -L"" -L" TRUE" -L" IHVAuthV1" -L" IHVCipher1" -L" 0" -L" parameter value" -L""; - - - -HRESULT -CIhvSecurityProfile::GetDefaultXml -( - BSTR* pbstrDefault -) -{ - SetModified(); - return Wstr2Bstr( g_szDefaultSecurityProfile, pbstrDefault ); -} - -HRESULT -CIhvSecurityProfile::GetNativeData -( - LPVOID* ppvData -) -{ - HRESULT hr = S_OK; - PIHV_SECURITY_PROFILE pIhvProfile = NULL; - BSTR bstrParam2 = NULL; - - if ( !ppvData ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - pIhvProfile = (PIHV_SECURITY_PROFILE) malloc( sizeof( IHV_SECURITY_PROFILE ) ); - if ( !pIhvProfile ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - ZeroMemory( pIhvProfile, sizeof( IHV_SECURITY_PROFILE ) ); - - hr = - GetFullSecurityFlag - ( - &(pIhvProfile->bUseFullSecurity) - ); - BAIL_ON_FAILURE( hr ); - - hr = - GetAuthType - ( - &(pIhvProfile->AuthType) - ); - BAIL_ON_FAILURE( hr ); - - hr = - GetCipherType - ( - &(pIhvProfile->CipherType) - ); - BAIL_ON_FAILURE( hr ); - - hr = - GetParamDWORD - ( - &(pIhvProfile->dwParam1) - ); - BAIL_ON_FAILURE( hr ); - - hr = - GetParamBSTR - ( - &bstrParam2 - ); - BAIL_ON_FAILURE( hr ); - - if ( NULL == bstrParam2 ) { - hr = E_POINTER; - BAIL_ON_FAILURE( hr ); - } - - hr = - Wstr2Wstr - ( - bstrParam2, - &(pIhvProfile->pszParam2) - ); - BAIL_ON_FAILURE( hr ); - - // Transfering local cache to OUT parameter. - (*ppvData) = pIhvProfile; - pIhvProfile = NULL; - -error: - if ( pIhvProfile ) - { - free( pIhvProfile->pszParam2 ); // NULL Safe. - free( pIhvProfile ); - } - SYS_FREE_STRING( bstrParam2 ); - return hr; - -} - - - -HRESULT -CIhvSecurityProfile::GetFullSecurityFlag -( - BOOL* pbUseFullSecurity -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_FSFLAG_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2Bool - ( - bstrData, - pbUseFullSecurity - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::SetFullSecurityFlag -( - BOOL bUseFullSecurity -) -{ - HRESULT hr = S_OK; - BSTR bstrText = NULL; - - hr = - Bool2Bstr - ( - bUseFullSecurity, - &bstrText - ); - BAIL_ON_FAILURE( hr ); - - hr = - PutTextInNode - ( - SEC_FSFLAG_XPATH, - bstrText - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrText ); - return hr; -} - - - -HRESULT -CIhvSecurityProfile::GetAuthType -( - PIHV_AUTH_TYPE pAuthType -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_ATYPE_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2AuthType - ( - bstrData, - pAuthType - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::SetAuthType -( - IHV_AUTH_TYPE AuthType -) -{ - HRESULT hr = S_OK; - BSTR bstrText = NULL; - - hr = - AuthType2Bstr - ( - AuthType, - &bstrText - ); - BAIL_ON_FAILURE( hr ); - - hr = - PutTextInNode - ( - SEC_ATYPE_XPATH, - bstrText - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrText ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::GetSecurityType -( - PIHV_SECURITY_TYPE pSecurityType -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_ATYPE_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2SecurityType - ( - bstrData, - pSecurityType - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - -HRESULT -CIhvSecurityProfile::SetSecurityType -( - IHV_SECURITY_TYPE SecurityType -) -{ - HRESULT hr = S_OK; - BSTR bstrText = NULL; - - hr = - SecurityType2Bstr - ( - SecurityType, - &bstrText - ); - BAIL_ON_FAILURE( hr ); - - hr = - PutTextInNode - ( - SEC_ATYPE_XPATH, - bstrText - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrText ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::GetCipherType -( - PIHV_CIPHER_TYPE pCipherType -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_ETYPE_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2CipherType - ( - bstrData, - pCipherType - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::SetCipherType -( - IHV_CIPHER_TYPE CipherType -) -{ - HRESULT hr = S_OK; - BSTR bstrText = NULL; - - hr = - CipherType2Bstr - ( - CipherType, - &bstrText - ); - BAIL_ON_FAILURE( hr ); - - hr = - PutTextInNode - ( - SEC_ETYPE_XPATH, - bstrText - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrText ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::GetParamDWORD -( - DWORD* pdwParam1 -) -{ - HRESULT hr = S_OK; - BSTR bstrData = NULL; - - hr = - GetTextFromNode - ( - SEC_PARAM2_XPATH, - &bstrData - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2Dword - ( - bstrData, - pdwParam1 - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrData ); - return hr; -} - - -HRESULT -CIhvSecurityProfile::SetParamDWORD -( - DWORD dwNewValue -) -{ - HRESULT hr = S_OK; - BSTR bstrText = NULL; - - hr = - Dword2Bstr - ( - dwNewValue, - &bstrText - ); - BAIL_ON_FAILURE( hr ); - - hr = - PutTextInNode - ( - SEC_PARAM2_XPATH, - bstrText - ); - BAIL_ON_FAILURE( hr ); - -error: - SYS_FREE_STRING( bstrText ); - return hr; -} - - - -HRESULT -CIhvSecurityProfile::GetParamBSTR -( - BSTR* pbstrValue -) -{ - HRESULT hr = S_OK; - - hr = - GetTextFromNode - ( - SEC_PARAM1_XPATH, - pbstrValue - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - -HRESULT -CIhvSecurityProfile::SetParamBSTR -( - BSTR bstrNewValue -) -{ - HRESULT hr = S_OK; - - hr = - PutTextInNode - ( - SEC_PARAM1_XPATH, - bstrNewValue - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.h deleted file mode 100644 index 66e8ce3f..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleProfile.h +++ /dev/null @@ -1,296 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#pragma once - -#ifndef _IHVSAMPLEPROFILE_H -#define _IHVSAMPLEPROFILE_H - -#define RELEASE_INTERFACE( _p ) if ( _p ) { (_p)->Release( ); (_p) = NULL;} - - -class CIhvProfileBase -{ -public: - - // Constructor - CIhvProfileBase( ) - { - m_bModified = FALSE; - m_pRootNode = NULL; - } - - // Destructor - ~CIhvProfileBase( ) - { - RELEASE_INTERFACE( m_pRootNode ); - } - - HRESULT - LoadXml - ( - IN BSTR bstrIhvProfile - ); - - HRESULT - EmitXml - ( - OUT BSTR* pbstrIhvProfile - ); - - BOOL GetModified( ) { return m_bModified; } - - // Caller needs to know what type to - // cast the pointer to depending upon - // the type of the derived class. - // Caller needs to free memory recursively - // by using the free( ) function. - virtual - HRESULT - GetNativeData - ( - LPVOID* ppvData - ) - = 0; - -protected: - - virtual - HRESULT - GetDefaultXml - ( - BSTR* pbstrDefault - ) - = 0; - - HRESULT - GetTextFromNode - ( - IN LPCWSTR pszQuery, - OUT BSTR* pbstrText - ); - - HRESULT - PutTextInNode - ( - IN LPCWSTR pszQuery, - IN BSTR bstrText - ); - - - VOID SetModified( ) { m_bModified = TRUE; } - - IXMLDOMElement* m_pRootNode; - -private: - BOOL m_bModified; -}; - -/////////////////////////////////////////// - - -typedef struct _IHV_CONNECTIVITY_PROFILE -{ -#define CON_PARAM1_XPATH L"/IhvConnectivity/IHVConnectivityParam1" -#define CON_PARAM2_XPATH L"/IhvConnectivity/IHVConnectivityParam2" - - DWORD dwParam1; - LPWSTR pszParam2; -} -IHV_CONNECTIVITY_PROFILE, *PIHV_CONNECTIVITY_PROFILE; - - -extern WCHAR g_szDefaultConnectivityProfile[]; - -class CIhvConnectivityProfile - : public CIhvProfileBase -{ -protected: - HRESULT - GetDefaultXml - ( - BSTR* pbstrDefault - ); - -public: - - // Constructor Destructor - CIhvConnectivityProfile( ) { } - ~CIhvConnectivityProfile( ) { } - - // Caller needs to know what type to - // cast the pointer to depending upon - // the type of the derived class. - // Caller needs to free memory recursively - // by using the free( ) function. - HRESULT - GetNativeData - ( - LPVOID* ppvData - ); - - - // Accessor and Modifier for dwParam1 - HRESULT - GetParamDWORD - ( - DWORD* pdwParam1 - ); - HRESULT - SetParamDWORD - ( - DWORD dwNewValue - ); - - // Accessor and Modifier for pszParam2 - HRESULT - GetParamBSTR - ( - BSTR* pbstrValue - ); - HRESULT - SetParamBSTR - ( - BSTR bstrNewValue - ); - -}; - - - -/////////////////////////////////////////// - -extern LPCWSTR gppszIhvSecurityTypes[]; - -#define MAX_AUTH_TYPES 3 -extern LPCWSTR gppszIhvAuthTypes[]; - -#define MAX_CIPHER_TYPES 4 -extern LPCWSTR gppszIhvCipherTypes[]; - -typedef struct _IHV_SECURITY_PROFILE -{ -#define SEC_FSFLAG_XPATH L"/IhvSecurity/IHVUsesFullSecurity" -#define SEC_ATYPE_XPATH L"/IhvSecurity/IHVAuthentication" -#define SEC_ETYPE_XPATH L"/IhvSecurity/IHVEncryption" -#define SEC_PARAM1_XPATH L"/IhvSecurity/IHVSecurityParam1" -#define SEC_PARAM2_XPATH L"/IhvSecurity/IHVSecurityParam2" - - BOOL bUseFullSecurity; - IHV_AUTH_TYPE AuthType; - IHV_CIPHER_TYPE CipherType; - DWORD dwParam1; - LPWSTR pszParam2; -} -IHV_SECURITY_PROFILE, *PIHV_SECURITY_PROFILE; - - -extern WCHAR g_szDefaultSecurityProfile[]; - -class CIhvSecurityProfile - : public CIhvProfileBase -{ -protected: - HRESULT - GetDefaultXml - ( - BSTR* pbstrDefault - ); - -public: - - // Constructor Destructor - CIhvSecurityProfile( ) { } - ~CIhvSecurityProfile( ) { } - - // Caller needs to know what type to - // cast the pointer to depending upon - // the type of the derived class. - // Caller needs to free memory recursively - // by using the free( ) function. - HRESULT - GetNativeData - ( - LPVOID* ppvData - ); - - - // Accessor and Modifier for bUseFullSecurity - HRESULT - GetFullSecurityFlag - ( - BOOL* pbUseFullSecurity - ); - HRESULT - SetFullSecurityFlag - ( - BOOL bUseFullSecurity - ); - - - // Accessor and Modifier for AuthType - HRESULT - GetAuthType - ( - PIHV_AUTH_TYPE pAuthType - ); - HRESULT - SetAuthType - ( - IHV_AUTH_TYPE AuthType - ); - - // Accessor and Modifier for SecurityType - HRESULT - GetSecurityType - ( - PIHV_SECURITY_TYPE pSecurityType - ); - HRESULT - SetSecurityType - ( - IHV_SECURITY_TYPE SecurityType - ); - - // Accessor and Modifier for CipherType - HRESULT - GetCipherType - ( - PIHV_CIPHER_TYPE pCipherType - ); - HRESULT - SetCipherType - ( - IHV_CIPHER_TYPE CipherType - ); - - // Accessor and Modifier for dwParam1 - HRESULT - GetParamDWORD - ( - DWORD* pdwParam1 - ); - HRESULT - SetParamDWORD - ( - DWORD dwNewValue - ); - - // Accessor and Modifier for pszParam2 - HRESULT - GetParamBSTR - ( - BSTR* pbstrValue - ); - HRESULT - SetParamBSTR - ( - BSTR bstrNewValue - ); - -}; - -#endif _IHVSAMPLEPROFILE_H - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.cpp deleted file mode 100644 index f93218bc..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.cpp +++ /dev/null @@ -1,122 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - - -#include "precomp.h" - -CIHVClassFactory *g_pIHVClassFactory = NULL; - -// instance handle to dll -HINSTANCE g_hInst; - -// object ref count -long g_objRefCount = 0; -long g_serverLock = 0; //lock count on server - -// -// DllRegisterServer - Adds entries to the system registry -// -STDAPI DllRegisterServer() -{ - HRESULT hr = S_OK; - - hr = CRegHelper::RegisterServer(); - - return hr; -} - -// -// DllUnregisterServer - Removes entries from the system registry -// -STDAPI DllUnregisterServer() -{ - HRESULT hr = S_OK; - - hr = CRegHelper::UnregisterServer(); - - return hr; -} - - - -// -// Used to determine whether the DLL can be unloaded by COM -// -STDAPI DllCanUnloadNow(void) -{ - if ((g_objRefCount == 0) && (g_serverLock == 0) /*&& (_Module.GetLockCount() == 0)*/) - { - return S_OK; - } - else - { - return S_FALSE; - } -} - - - -STDAPI -DllGetClassObject( - _In_ REFCLSID rclsid, - _In_ REFIID riid, - _Outptr_ LPVOID *ppv) -{ - HRESULT hr = E_NOINTERFACE; - - if (NULL == g_pIHVClassFactory) - { - g_pIHVClassFactory = new(std::nothrow) CIHVClassFactory(); - if (NULL == g_pIHVClassFactory) - { - hr = E_OUTOFMEMORY; - } - } - - if(NULL != g_pIHVClassFactory && - (rclsid == GUID_SAMPLE_IHVUI_CLSID || rclsid == IID_IWizardExtension)) - { - hr = g_pIHVClassFactory->QueryInterface(riid, ppv); - } - return hr; -} - - -//+---------------------------------------------------------------------------- -// -// Function: DllMain -// -// Synopsis: Main entry point into the DLL. -// -// Arguments: HINSTANCE hinstDLL - Our HINSTANCE -// DWORD fdwReason - The reason we are being called. -// LPVOID lpvReserved - Reserved -// -// Returns: BOOL WINAPI - TRUE - always -// -//+---------------------------------------------------------------------------- -extern "C" -BOOL WINAPI -DllMain( - HINSTANCE hInstDLL, - DWORD fdwReason, - LPVOID lpvReserved - ) -{ - UNREFERENCED_PARAMETER(lpvReserved); - - if (DLL_PROCESS_ATTACH == fdwReason) - { - // Set our global instance handle - g_hInst = hInstDLL; - (VOID)DisableThreadLibraryCalls(hInstDLL); - } - else if (DLL_PROCESS_DETACH == fdwReason) - { - } - - return TRUE; -} - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.def b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.def deleted file mode 100644 index 2882c292..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.def +++ /dev/null @@ -1,7 +0,0 @@ -LIBRARY "IhvSampleUI.dll" - -EXPORTS - DllCanUnloadNow PRIVATE - DllGetClassObject PRIVATE - DllRegisterServer PRIVATE - DllUnregisterServer PRIVATE diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.rc b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.rc deleted file mode 100644 index 2c6563d8..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.rc +++ /dev/null @@ -1,129 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904e4" - BEGIN - VALUE "CompanyName", "TODO: " - VALUE "FileDescription", "TODO: " - VALUE "FileVersion", "1.0.0.1" - VALUE "LegalCopyright", "TODO: (c) . All rights reserved." - VALUE "InternalName", "IHVSampleUI.dll" - VALUE "OriginalFilename", "IHVSampleUI.dll" - VALUE "ProductName", "TODO: " - VALUE "ProductVersion", "1.0.0.1" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1252 - END -END - - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_PROPPAGE_SMALL DIALOGEX 0, 0, 227, 244 -STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "IHV Profile String" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - LTEXT "This is a sample IHV extended dialog.",IDC_TITLE_TXT, - 20,19,135,8 - LTEXT "Parameter 1",IDC_PARAM_TXT,20,49,80,8 - EDITTEXT IDC_PARAM_BOX,101,48,96,14 - CONTROL "Parameter 2",IDC_USE_FASTHANDOFF,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,20,72,178,10 - PUSHBUTTON "OK",ID_OK,96,210,49,14 - PUSHBUTTON "Cancel",ID_CANCEL,167,209,50,14 -END - -IDD_DIALOG_SHOWHELP DIALOGEX 0, 0, 317, 143 -STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Dialog" -FONT 9, "Segoe UI", 400, 0, 0x1 -BEGIN - EDITTEXT IDC_EDIT_HELPER,8,7,171,81,ES_AUTOHSCROLL -END - -IDD_DIALOG_GETKEY DIALOGEX 0, 0, 317, 143 -STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Dialog" -FONT 9, "Segoe UI", 400, 0, 0x1 -BEGIN - EDITTEXT IDC_EDIT_KEY,23,46,142,14,ES_AUTOHSCROLL - LTEXT "Please enter IHV keys:",IDC_STATIC,25,17,74,8 -END - -IDD_DIALOG_LASTPAGE DIALOGEX 0, 0, 317, 143 -STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Dialog" -FONT 9, "Segoe UI", 400, 0, 0x1 -BEGIN - CONTROL "",IDC_DATETIMEPICKER1,"SysDateTimePick32", - DTS_RIGHTALIGN | WS_TABSTOP,7,7,172,12 -END - - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE -BEGIN - IDS_PROJNAME "SampleIHVExt" - IDS_TITLE_GETKEY "IHV Get Key Page" - IDS_TITLE_SHOWHELP "IHV Helper Page" - IDS_TITLE_LASTPAGE "IHV Last Page" - IDS_IHV_DEFAULT_TITLE "IHV Properties" - IDS_IHV_DEFAULT_CON_TITLE "IHV Connection Properties" - IDS_IHV_DEFAULT_KEY_TITLE "IHV Security Properties" - IDS_IHV_DEFAULT_SEC_TITLE "IHV Security Properties" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj deleted file mode 100644 index 838313b6..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj +++ /dev/null @@ -1,257 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - Debug - x64 - - - Release - x64 - - - - {B29932FE-6321-4A6E-BE73-14BA0C441320} - $(MSBuildProjectName) - Debug - Win32 - {A1585A58-9A12-4B2C-8398-4DB568BC725B} - - - - Windows10 - False - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - Windows10 - True - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - Windows10 - False - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - Windows10 - True - Desktop - - WindowsApplicationForDrivers10.0 - DynamicLibrary - - - - $(IntDir) - - - - - - - - - - - - - - - - IHVSampleUI - - - IHVSampleUI - - - IHVSampleUI - - - IHVSampleUI - - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - %(PreprocessorDefinitions);UNICODE;WIN32 - - - _DllMainCRTStartup@12 - _DllMainCRTStartup - - - - - %(AdditionalOptions) /EHa - true - Level4 - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib - IHVSampleUI.def - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalOptions) /EHa - true - Level4 - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib - IHVSampleUI.def - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalOptions) /EHa - true - Level4 - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib - IHVSampleUI.def - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalOptions) /EHa - true - Level4 - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib - IHVSampleUI.def - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - %(AdditionalIncludeDirectories);$(DDK_INC_PATH) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj.Filters b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj.Filters deleted file mode 100644 index ad52e7ad..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVSampleUI.vcxproj.Filters +++ /dev/null @@ -1,60 +0,0 @@ - - - - - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {B2315A09-C8B4-4DA8-B678-86A98EA247B2} - - - h;hpp;hxx;hm;inl;inc;xsd - {7E8AF6EA-0142-462C-9B0B-EC7A38BBC338} - - - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {A0337FFF-CA93-4B57-9DED-A958D1BC66AF} - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - - - Resource Files - - - \ No newline at end of file diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVUIInc.idl b/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVUIInc.idl deleted file mode 100644 index 1ef82407..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/IHVUIInc.idl +++ /dev/null @@ -1 +0,0 @@ -#include "wlanihvui.idl" \ No newline at end of file diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/iunk.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/iunk.h deleted file mode 100644 index 9b8242c5..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/iunk.h +++ /dev/null @@ -1,54 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -// Common macro based implementation of IUnknown -// using a interface table approach - -#define IMPLEMENT_REFCOUNT()\ - ULONG m_crefCount;\ - \ - STDMETHODIMP_(ULONG) AddRef(void)\ - {\ - return InterlockedIncrement((PLONG)&m_crefCount);\ - }\ - \ - _At_(this, __drv_aliasesMem)\ - STDMETHODIMP_(ULONG) Release(void)\ - {\ - ULONG res = InterlockedDecrement((PLONG)&m_crefCount);\ - if (res == 0)\ - {\ - delete this;\ - }\ - return res;\ - } - -#define BEGIN_INTERFACE_TABLE()\ - IMPLEMENT_REFCOUNT()\ - STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject)\ - {\ - if (riid == IID_IUnknown)\ - {\ - *ppvObject = reinterpret_cast(this);\ - } - -#define IMPLEMENTS_INTERFACE(Itf)\ - else if (riid == IID_ ## Itf)\ - {\ - *ppvObject = static_cast(this);\ - } - -#define END_INTERFACE_TABLE()\ - else \ - {\ - *ppvObject = NULL;\ - return E_NOINTERFACE;\ - }\ - \ - reinterpret_cast(*ppvObject)->AddRef();\ - \ - return S_OK;\ - } - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/precomp.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/precomp.h deleted file mode 100644 index 1037884d..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/precomp.h +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#pragma once - -#include -_Analysis_mode_(_Analysis_code_type_user_code_) - -#include -#include -#include -#include -#include -#include -#include - -// MIDL generated -#include "ihvsample.h" - -#include "iunk.h" -#include "resource.h" -#include "utils.h" -#include "IHVRegistryHelper.h" -#include "IHVSampleExtUI.h" -#include "IHVSampleProfile.h" -#include "IHVSampleExtUICon.h" -#include "IHVSampleExtUISec.h" -#include "IHVSampleExtUIKey.h" -#include "IHVClassFactory.h" -#include - -const GUID GUID_SAMPLE_IHVUI_CLSID = -{ 0x4a01f9f9, 0x6012, 0x4343, { 0xa8, 0xc4, 0x10, 0xb5, 0xdf, 0x32, 0x67, 0x2a } }; - - -#define IHV_SAMPLE_IHV_NAME L"IHV" - -#define BAIL_ON_FAILURE( _hr ) if (FAILED(_hr)) goto error; -#define BAIL( ) goto error; -#define SYS_FREE_STRING( _s ) if ( _s ) { SysFreeString( _s ); (_s) = NULL;} - diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/resource.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/resource.h deleted file mode 100644 index e60f854e..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/resource.h +++ /dev/null @@ -1,31 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Visual C++ generated include file. -// Used by TestIHV.rc -// -#define IDD_PROPPAGE_SMALL 502 - -#define IDC_PARAM_BOX 1000 -#define IDC_PARAM_TXT 1001 -#define IDC_USE_FASTHANDOFF 1002 -#define ID_OK 1003 -#define ID_CANCEL 1004 -#define IDC_TITLE_TXT 1005 - -#define IDS_PROJNAME 100 -#define IDR_SAMPLEIHVEXT 101 -#define IDS_TITLE_GETKEY 101 -#define IDR_IHVBALLOONHANDLER 102 -#define IDS_TITLE_SHOWHELP 102 -#define IDS_TITLE_LASTPAGE 103 -#define IDC_EDIT_KEY 201 -#define IDC_EDIT_HELPER 203 -#define IDD_DIALOG_GETKEY 204 -#define IDC_DATETIMEPICKER1 204 -#define IDD_DIALOG_SHOWHELP 205 -#define IDD_DIALOG_LASTPAGE 206 - - -#define IDS_IHV_DEFAULT_TITLE 300 -#define IDS_IHV_DEFAULT_CON_TITLE 301 -#define IDS_IHV_DEFAULT_KEY_TITLE 302 -#define IDS_IHV_DEFAULT_SEC_TITLE 303 diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/utils.cpp b/network/wlan/Native Wifi IHV Service/ihvsampleui/utils.cpp deleted file mode 100644 index 1f9bbe10..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/utils.cpp +++ /dev/null @@ -1,408 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - -#include "precomp.h" - -HRESULT -Wstr2Bstr -( - _In_ LPCWSTR pszSrc, - _Outptr_ BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - - if ( !pbstrDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - (*pbstrDest) = NULL; - if ( !pszSrc ) - { - BAIL( ); - } - - (*pbstrDest) = SysAllocString( pszSrc ); - if ( !(*pbstrDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - - - - -HRESULT -Wstr2Wstr -( - _In_ LPCWSTR pszSrc, - _Outptr_ LPWSTR* ppszDest -) -{ - HRESULT hr = S_OK; - - if ( !ppszDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - (*ppszDest) = NULL; - if ( !pszSrc ) - { - BAIL( ); - } - - *ppszDest = _wcsdup( pszSrc ); - - if ( !(*ppszDest) ) - { - hr = E_OUTOFMEMORY; - } - -error: - return hr; -} - - - - -HRESULT -Wstr2Dword -( - IN LPCWSTR pszSrc, - OUT DWORD* pdwDest -) -{ - HRESULT hr = S_OK; - - if ( (!pdwDest) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - (*pdwDest) = (DWORD) _wtol( pszSrc ); - -error: - return hr; -} - -/* -Note: -2^32 = 2^(4*8) = 16^8 < 100^8 = 10^16 -This implies that 20 decimal digits -are more than enough for a DWORD. -*/ - -HRESULT -Dword2Bstr -( - IN DWORD dwSrc, - OUT BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - WCHAR szBuffer[25] = {0}; - - hr = - StringCchPrintf - ( - szBuffer, - sizeof(szBuffer)/sizeof(szBuffer[0]), - L"%u", - dwSrc - ); - BAIL_ON_FAILURE( hr ); - - hr = - Wstr2Bstr - ( - szBuffer, - pbstrDest - ); - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - -HRESULT -Wstr2Bool -( - IN LPCWSTR pszSrc, - OUT BOOL* pbDest -) -{ - HRESULT hr = S_OK; - - if ( (!pbDest) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( 0 == wcscmp( L"TRUE", pszSrc ) ) - { - (*pbDest) = TRUE; - } - else if ( 0 == wcscmp( L"FALSE", pszSrc ) ) - { - (*pbDest) = FALSE; - } - else - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - - -HRESULT -Bool2Bstr -( - IN BOOL bSrc, - OUT BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - - if ( !pbstrDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( bSrc ) - { - (*pbstrDest) = SysAllocString( L"TRUE" ); - } - else - { - (*pbstrDest) = SysAllocString( L"FALSE" ); - } - if ( !(*pbstrDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - - - - -HRESULT -Wstr2AuthType -( - IN LPCWSTR pszSrc, - OUT PIHV_AUTH_TYPE pAuthType -) -{ - HRESULT hr = S_OK; - DWORD dwIndex = 0; - - if ( (!pAuthType) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - for ( dwIndex = 0; dwIndex < MAX_AUTH_TYPES; dwIndex++ ) - { - if ( 0 == wcscmp( gppszIhvAuthTypes[dwIndex], pszSrc ) ) - { - (*pAuthType) = (IHV_AUTH_TYPE) dwIndex; - BAIL( ); - } - } - - // String not found. - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - -HRESULT -AuthType2Bstr -( - IN IHV_AUTH_TYPE AuthType, - OUT BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - - if ( !pbstrDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( AuthType < 0 || AuthType >= IHVAuthInvalid ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - (*pbstrDest) = SysAllocString( gppszIhvAuthTypes[(DWORD) AuthType] ); - if ( !(*pbstrDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - - -HRESULT -Wstr2SecurityType -( - IN LPCWSTR pszSrc, - OUT PIHV_SECURITY_TYPE pSecurityType -) -{ - HRESULT hr = S_OK; - DWORD dwIndex = 0; - - if ( (!pSecurityType) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - for ( dwIndex = 0; dwIndex < MAX_AUTH_TYPES; dwIndex++ ) - { - if ( 0 == wcscmp( gppszIhvSecurityTypes[dwIndex], pszSrc ) ) - { - (*pSecurityType) = (IHV_SECURITY_TYPE) dwIndex; - BAIL( ); - } - } - - // String not found. - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - -HRESULT -SecurityType2Bstr -( - IN IHV_SECURITY_TYPE SecurityType, - OUT BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - - if ( !pbstrDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( SecurityType < 0 || SecurityType >= IHVSecurityInvalid ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - (*pbstrDest) = SysAllocString( gppszIhvSecurityTypes[(DWORD) SecurityType] ); - if ( !(*pbstrDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} - -HRESULT -Wstr2CipherType -( - IN LPCWSTR pszSrc, - OUT PIHV_CIPHER_TYPE pCipherType -) -{ - HRESULT hr = S_OK; - DWORD dwIndex = 0; - - if ( (!pCipherType) || (!pszSrc) ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - for ( dwIndex = 0; dwIndex < MAX_CIPHER_TYPES; dwIndex++ ) - { - if ( 0 == wcscmp( gppszIhvCipherTypes[dwIndex], pszSrc ) ) - { - (*pCipherType) = (IHV_CIPHER_TYPE) dwIndex; - BAIL( ); - } - } - - // String not found. - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - - -error: - return hr; -} - - -HRESULT -CipherType2Bstr -( - IN IHV_CIPHER_TYPE CipherType, - OUT BSTR* pbstrDest -) -{ - HRESULT hr = S_OK; - - if ( !pbstrDest ) - { - hr = E_INVALIDARG; - BAIL_ON_FAILURE( hr ); - } - - if ( CipherType < None || CipherType >= IHVCipherInvalid ) - { - hr = E_UNEXPECTED; - BAIL_ON_FAILURE( hr ); - } - - (*pbstrDest) = SysAllocString( gppszIhvCipherTypes[(DWORD) CipherType] ); - if ( !(*pbstrDest) ) - { - hr = E_OUTOFMEMORY; - BAIL_ON_FAILURE( hr ); - } - -error: - return hr; -} diff --git a/network/wlan/Native Wifi IHV Service/ihvsampleui/utils.h b/network/wlan/Native Wifi IHV Service/ihvsampleui/utils.h deleted file mode 100644 index 015e94dd..00000000 --- a/network/wlan/Native Wifi IHV Service/ihvsampleui/utils.h +++ /dev/null @@ -1,98 +0,0 @@ -// -// Copyright (C) Microsoft Corporation 2005 -// IHV UI Extension sample -// - - -typedef enum _IHV_SECURITY_TYPE IHV_SECURITY_TYPE, *PIHV_SECURITY_TYPE; -typedef enum _IHV_AUTH_TYPE IHV_AUTH_TYPE, *PIHV_AUTH_TYPE; -typedef enum _IHV_CIPHER_TYPE IHV_CIPHER_TYPE, *PIHV_CIPHER_TYPE; - - -HRESULT -Wstr2Bstr -( - _In_ LPCWSTR pszSrc, - _Outptr_ BSTR* pbstrDest -); - -HRESULT -Wstr2Wstr -( - _In_ LPCWSTR pszSrc, - _Outptr_ LPWSTR* ppszDest -); - - -HRESULT -Wstr2Dword -( - IN LPCWSTR pszSrc, - OUT DWORD* pdwDest -); - - -HRESULT -Dword2Bstr -( - IN DWORD dwSrc, - OUT BSTR* pbstrDest -); - - -HRESULT -Wstr2Bool -( - IN LPCWSTR pszSrc, - OUT BOOL* pbDest -); - -HRESULT -Bool2Bstr -( - IN BOOL bSrc, - OUT BSTR* pbstrDest -); - - -HRESULT -Wstr2AuthType -( - IN LPCWSTR pszSrc, - OUT PIHV_AUTH_TYPE pAuthType -); - -HRESULT -AuthType2Bstr -( - IN IHV_AUTH_TYPE AuthType, - OUT BSTR* pbstrDest -); - -HRESULT -Wstr2SecurityType -( - IN LPCWSTR pszSrc, - OUT PIHV_SECURITY_TYPE pSecurityType -); - -HRESULT -SecurityType2Bstr -( - IN IHV_SECURITY_TYPE SecurityType, - OUT BSTR* pbstrDest -); - -HRESULT -Wstr2CipherType -( - IN LPCWSTR pszSrc, - OUT PIHV_CIPHER_TYPE pCipherType -); - -HRESULT -CipherType2Bstr -( - IN IHV_CIPHER_TYPE CipherType, - OUT BSTR* pbstrDest -); diff --git a/network/wlan/Native Wifi IHV Service/wlan.sln b/network/wlan/Native Wifi IHV Service/wlan.sln deleted file mode 100644 index 44e71690..00000000 --- a/network/wlan/Native Wifi IHV Service/wlan.sln +++ /dev/null @@ -1,46 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0 -MinimumVisualStudioVersion = 12.0 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ihvsample", "Ihvsample", "{E3B8A38D-ED8A-4F9A-A336-412949303DD2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ihvsampleui", "Ihvsampleui", "{22DD9E40-A7FD-4E55-BA06-26493C870F2E}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ihvsample", "ihvsample\ihvsample.vcxproj", "{54DAA211-4F96-4AE7-B3D7-82ED403E0A22}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IHVSampleUI", "ihvsampleui\IHVSampleUI.vcxproj", "{B29932FE-6321-4A6E-BE73-14BA0C441320}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - Debug|x64 = Debug|x64 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Debug|Win32.ActiveCfg = Debug|Win32 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Debug|Win32.Build.0 = Debug|Win32 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Release|Win32.ActiveCfg = Release|Win32 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Release|Win32.Build.0 = Release|Win32 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Debug|x64.ActiveCfg = Debug|x64 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Debug|x64.Build.0 = Debug|x64 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Release|x64.ActiveCfg = Release|x64 - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22}.Release|x64.Build.0 = Release|x64 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Debug|Win32.ActiveCfg = Debug|Win32 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Debug|Win32.Build.0 = Debug|Win32 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Release|Win32.ActiveCfg = Release|Win32 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Release|Win32.Build.0 = Release|Win32 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Debug|x64.ActiveCfg = Debug|x64 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Debug|x64.Build.0 = Debug|x64 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Release|x64.ActiveCfg = Release|x64 - {B29932FE-6321-4A6E-BE73-14BA0C441320}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {54DAA211-4F96-4AE7-B3D7-82ED403E0A22} = {E3B8A38D-ED8A-4F9A-A336-412949303DD2} - {B29932FE-6321-4A6E-BE73-14BA0C441320} = {22DD9E40-A7FD-4E55-BA06-26493C870F2E} - EndGlobalSection -EndGlobal diff --git a/network/wlan/WDI/COMMON/1x_eapol.h b/network/wlan/WDI/COMMON/1x_eapol.h deleted file mode 100644 index 1135bd89..00000000 --- a/network/wlan/WDI/COMMON/1x_eapol.h +++ /dev/null @@ -1,120 +0,0 @@ -/*++ - -Module Name: - 1x_eapol.h - -Abstract: - Data structure and definition about EAPOL, EAP. - See also 1x_kmsm_eapolkey.h for EAPOL-Key. - ---*/ - -#ifndef LIB1x_EAPOL_H -#define LIB1x_EAPOL_H - - - -//#include - -//-------------------------------------------------- -// IEEE 802.1x Implementation -// -// File : 1x_eapol.h -// Programmer : Arunesh Mishra -// -// This contains the EAPOL packet routine -// declarations. -// -// -// Copyright (c) Arunesh Mishra 2002 -// All rights reserved. -// Maryland Information and Systems Security Lab -// University of Maryland, College Park. -//-------------------------------------------------- - -#define LIB1X_EAPOL_HDRLEN 4 // Just the header Note: - // is different from struct - -#define LIB1X_EAPOL_LOGOFF 2 //0000 0010B -#define LIB1X_EAPOL_EAPPKT 0 //0000 0000B -#define LIB1X_EAPOL_START 1 //0000 0001B -#define LIB1X_EAPOL_KEY 3 //0000 0011B -#define LIB1X_EAPOL_ENCASFALERT 4 //0000 0100B - -#ifdef _DATA_PATH -#define REALTEK_802dot1x_TYPE 0xcc -#endif - -#define LIB1X_EAP_REQUEST 1 -#define LIB1X_EAP_RESPONSE 2 -#define LIB1X_EAP_SUCCESS 3 -#define LIB1X_EAP_FAILURE 4 - -#define LIB1X_EAP_HDRLEN 4 - - -#define LIB1X_EAP_RRIDENTITY 1 -#define LIB1X_EAP_RRNOTIF 2 -#define LIB1X_EAP_RRNAK 3 -#define LIB1X_EAP_RRMD5 4 -#define LIB1X_EAP_RROTP 5 -#define LIB1X_EAP_RRGEN 6 - -#define LIB1x_EAP_RRLEN 1 - -#define LIB1X_EAPOL_VER 1 //00000001B - -#define LIB1X_RC_LEN 8 -#define LIB1X_IV_LEN 16 -#define LIB1X_MIC_LEN 16 -#define LIB1X_KEY_TYPE_RC4 1 - - -#pragma pack (1) // Set our value. - -typedef struct _EAPOL_STRUCT -{ - u1Byte protocol_version; - u1Byte packet_type; // This makes it odd in number ! - u2Byte packet_body_length; -} EAPOL_STRUCT, *PEAPOL_STRUCT; - - -typedef struct _EAP_STRUCT -{ - u1Byte code; // Identifies the type of EAP packet. - u1Byte identifier; // Aids in matching responses with requests. - u2Byte length; // Length of EAP packet including code, id, len, data fields -} EAP_STRUCT, *PEAP_STRUCT; - - -#ifdef REMOVE_PACK -#pragma pack() -#endif - - -//#define EAPOL_PAIRWISE_KEY 0x80 -//#define EAPOL_GROUP_KEY 0 -// -//#define EAPOL_PAIRWISE_INDEX 0x3 -//#define EAPOL_GROUP_INDEX 0x0 -//struct lib1x_eapolkey_dot1x -//{ -// u1Byte type; -// u2Byte length; -// u1Byte counter[LIB1X_RC_LEN]; -// u1Byte iv[LIB1X_IV_LEN]; -// u1Byte index; -// u1Byte mic[LIB1X_MIC_LEN]; -// u1Byte material[1]; -//}; -// -// -//struct lib1x_eap_rr -//{ -// u1Byte type; // The bytes after this are the data corresponding to the RR type -//}; -// -// - -#endif diff --git a/network/wlan/WDI/COMMON/1x_kmsm_eapolkey.h b/network/wlan/WDI/COMMON/1x_kmsm_eapolkey.h deleted file mode 100644 index 82419b5f..00000000 --- a/network/wlan/WDI/COMMON/1x_kmsm_eapolkey.h +++ /dev/null @@ -1,612 +0,0 @@ -/*++ - -Module Name: - 1x_kmsm_eapolkey.h - -Abstract: - 1. EAPOL-Key related data structures and helper macros. - 2. Declare helper functinos defined in 1x_kmsm_perf.c, 1x_kmsm_hmac.c. - ---*/ - -#ifndef LIB1X_KMSM_EAPOLKEY_H -#define LIB1X_KMSM_EAPOLKEY_H - - - -//#include - - - -/*#ifdef _RTL_WPA_WINDOWS -typedef unsigned short u2Byte; -typedef unsigned char u1Byte; -typedef unsigned long u4Byte; -} OCTET_STRING, *POCTET_STRING, EAPOL_KEY; -#else -#include -#include "1x_kmsm_keydef.h" -#include "1x_types.h" -#endif -*/ - -//original in 1x_ether.h and 1x_eapol.h -#define ETHER_HDRLEN 14 -#define LIB1X_EAPOL_HDRLEN 4 -#define ETHER_ADDRLEN 6 - -//size of the field in information element -#define PTK_LEN_TKIP 64 -//------------------------------------------------------------------------------ -// From 1x_type.h, 2005.06.30, by rcnjko. -//------------------------------------------------------------------------------ -typedef union _OCTET8_INTEGER { - u8Byte QuadPart; - - struct { - u4Byte LowPart; - u4Byte HighPart; - }; -} OCTET8_INTEGER, *POCTET8_INTEGER; - - -typedef union _OCTET16_INTEGER { - u1Byte charData[16]; - - struct{ - OCTET8_INTEGER HighPart; - OCTET8_INTEGER LowPart; - }field; -} OCTET16_INTEGER; - -typedef union _OCTET32_INTEGER { - u1Byte charData[32]; - struct{ - OCTET16_INTEGER HighPart; - OCTET16_INTEGER LowPart; - }field; -}OCTET32_INTEGER; - -typedef enum { key_desc_ver1 = 1, key_desc_ver2 = 2 } KeyDescVer; - -#ifdef WPA2 -typedef enum { desc_type_WPA2 = 2, desc_type_RSN = 254 } DescTypeRSN; -#else -typedef enum { desc_type_RSN = 254 } DescTypeRSN; -#endif - -typedef enum { type_Group = 0, type_Pairwise = 1 } KeyType; - -typedef enum { type_4way2nd = 0, type_4way4th = 1, type_2way2nd = 2, type_unknow=3 } MsgType; // Added by Annie, 2005-07-11. - -/*----------------------------------------------------------------------------- - Network and machine byte oder conversion - Macro definition --------------------------------------------------------------------------------*/ -// The translations below are not endian-free. -#define long2net(l,c) (*((c) )=(unsigned char)(((l)>>24)&0xff), \ - *((c)+1)=(unsigned char)(((l)>>16)&0xff), \ - *((c)+2)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)+3)=(unsigned char)(((l) )&0xff)) - -#define net2long(c,l) (l =((ULONG)(*((c) )))<<24, \ - l|=((ULONG)(*((c)+1)))<<16, \ - l|=((ULONG)(*((c)+2)))<< 8, \ - l|=((ULONG)(*((c)+3)))) - -#define short2net(s,c) (*((c))=(unsigned char)(((s)>> 8)&0xff), \ - *((c)+1)=(unsigned char)(((s) )&0xff)) - -#define net2short(c,s) (s =((unsigned short)(*((c))))<< 8, \ - s|=((unsigned short)(*((c)+1)))) - -#define lint2net(l,c) (long2net(l.HighPart, c) , long2net(l.LowPart, c+4)) -#define net2lint(c,l) (net2long(c, l.HighPart) , net2long(c+4, l.LowPart)) - -/*----------------------------------------------------------------------------- - LargeInteger - Inline Function definition - Macro definition --------------------------------------------------------------------------------*/ -#define LargeIntegerOverflow(x) (x.HighPart == 0xffffffff) && \ - (x.LowPart == 0xffffffff) -//#define LargeIntegerZero(x) memset(&x.charData, 0, 8); -#define LargeIntegerZero(x) x.QuadPart = 0; - - -/*----------------------------------------------------------------------------- - Octet16Integer - Inline Function definition - Macro definition --------------------------------------------------------------------------------*/ -#define Octet16IntegerOverflow(x) LargeIntegerOverflow(x.field.HighPart) && \ - LargeIntegerOverflow(x.field.LowPart) -//#define Octet16IntegerZero(x) memset(&x.charData, 0, 16); -#define Octet16IntegerZero(x) memset(&x, 0, 16); - -/*----------------------------------------------------------------------------- - EAPOLKey field process - Inline Function definition - Macro definition --------------------------------------------------------------------------------*/ -static -//inline -OCTET_STRING SubStr(OCTET_STRING f, u2Byte s,u2Byte l); - - -#define SetSubStr(f,a,l) PlatformMoveMemory(f.Octet+l,a.Octet,a.Length) -#define GetKeyInfo0(f, mask) ( (f.Octet[KeyInfoPos + 1] & mask) ? 1 :0) -#define SetKeyInfo0(f,mask,b) ( f.Octet[KeyInfoPos + 1] = (f.Octet[KeyInfoPos + 1] & ~mask) | ( b?mask:0x0) ) -#define GetKeyInfo1(f, mask) ( (f.Octet[KeyInfoPos] & mask) ? 1 :0) -#define SetKeyInfo1(f,mask,b) ( f.Octet[KeyInfoPos] = (f.Octet[KeyInfoPos] & ~mask) | ( b?mask:0x0) ) - - -// EAPOLKey -#define Message_DescType(f) (f.Octet[DescTypePos]) -#define Message_setDescType(f, type) (f.Octet[DescTypePos] = type) -// Key Information Filed -#define Message_KeyDescVer(f) (f.Octet[KeyInfoPos+1] & 0x07)//(f.Octet[KeyInfoPos+1] & 0x01) | (f.Octet[KeyInfoPos+1] & 0x02) <<1 | (f.Octet[KeyInfoPos+1] & 0x04) <<2 -#define Message_setKeyDescVer(f, v) (f.Octet[KeyInfoPos+1] &= 0xf8) , f.Octet[KeyInfoPos+1] |= (v & 0x07)//(f.Octet[KeyInfoPos+1] |= ((v&0x01)<<7 | (v&0x02)<<6 | (v&0x04)<<5) ) -#define Message_KeyType(f) GetKeyInfo0(f,0x08) -#define Message_setKeyType(f, b) SetKeyInfo0(f,0x08,b) -#define Message_KeyIndex(f) ((f.Octet[KeyInfoPos+1] & 0x30) >> 4) & 0x03//(f.Octet[KeyInfoPos+1] & 0x20) | (f.Octet[KeyInfoPos+1] & 0x10) <<1 -#define Message_setKeyIndex(f, v) (f.Octet[KeyInfoPos+1] &= 0xcf), f.Octet[KeyInfoPos+1] |= ((v<<4) & 0x30 )//(f.Octet[KeyInfoPos+1] |= ( (v&0x01)<<5 | (v&0x02)<<4) ) -#define Message_Install(f) GetKeyInfo0(f,0x40) -#define Message_setInstall(f, b) SetKeyInfo0(f,0x40,b) -#define Message_KeyAck(f) GetKeyInfo0(f,0x80) -#define Message_setKeyAck(f, b) SetKeyInfo0(f,0x80,b) - -#define Message_KeyMIC(f) GetKeyInfo1(f,0x01) -#define Message_setKeyMIC(f, b) SetKeyInfo1(f,0x01,b) -#define Message_Secure(f) GetKeyInfo1(f,0x02) -#define Message_setSecure(f, b) SetKeyInfo1(f,0x02,b) -#define Message_Error(f) GetKeyInfo1(f,0x04) -#define Message_setError(f, b) SetKeyInfo1(f,0x04,b) -#define Message_Request(f) GetKeyInfo1(f,0x08) -#define Message_setRequest(f, b) SetKeyInfo1(f,0x08,b) -#define Message_Reserved(f) (f.Octet[KeyInfoPos] & 0xf0) -#define Message_setReserved(f, v) (f.Octet[KeyInfoPos] |= (v<<4&0xff)) -#define Message_EncryptedKeyData(f) GetKeyInfo1(f,0x10) -#define Message_setEncryptedKeyData(f, b) SetKeyInfo1(f,0x10,b) - - -#define Message_KeyLength(f) ((u2Byte)(f.Octet[KeyLenPos] <<8) + (u2Byte)(f.Octet[KeyLenPos+1])) -#define Message_setKeyLength(f, v) (f.Octet[KeyLenPos] = (v&0xff00) >>8 , f.Octet[KeyLenPos+1] = (v&0x00ff)) - - -/* Replay Counter process function */ -#define DEFAULT_KEY_REPLAY_COUNTER_LONG 0xffffffff -#define Message_DefaultReplayCounter(li) ((li.HighPart == DEFAULT_KEY_REPLAY_COUNTER_LONG) && (li.LowPart == DEFAULT_KEY_REPLAY_COUNTER_LONG) ) ?1:0 -#define Message_ReplayCounter(f) SubStr(f, ReplayCounterPos, KEY_RC_LEN) -#define Message_CopyReplayCounter(f1, f2) PlatformMoveMemory(f1.Octet + ReplayCounterPos, f2.Octet + ReplayCounterPos, KEY_RC_LEN) - -static __inline void Message_ReplayCounter_OC2LI(OCTET_STRING f, OCTET8_INTEGER * li); -static __inline void ReplayCounter_OC2LI(OCTET_STRING f, OCTET8_INTEGER * li); -static __inline int Message_EqualReplayCounter(OCTET8_INTEGER li1, OCTET_STRING f); -static __inline int Message_SmallerEqualReplayCounter(OCTET8_INTEGER li1, OCTET_STRING f); -static __inline int Message_LargerReplayCounter(OCTET8_INTEGER li1, OCTET_STRING f); -static __inline void Message_setReplayCounter(OCTET_STRING f, u4Byte h, u4Byte l); - - -//#define SetNonce(x,y) PlatformMoveMemory(x.Octet, y.charData, 32); -void SetNonce(OCTET_STRING osDst, OCTET32_INTEGER oc32Counter); -#define Message_KeyNonce(f) SubStr(f,KeyNoncePos,KEY_NONCE_LEN) -#define Message_setKeyNonce(f, v) SetSubStr(f, v, KeyNoncePos) -#define Message_EqualKeyNonce(f1, f2) memcmp(f1.Octet + KeyNoncePos, f2.Octet, KEY_NONCE_LEN)? 0:1 -#define Message_KeyIV(f) SubStr(f, KeyIVPos, KEY_IV_LEN) -#define Message_setKeyIV(f, v) SetSubStr(f, v, KeyIVPos) -#define Message_KeyRSC(f) SubStr(f, KeyRSCPos, KEY_RSC_LEN) -#define Message_setKeyRSC(f, v) SetSubStr(f, v, KeyRSCPos) -#define Message_KeyID(f) SubStr(f, KeyIDPos, KEY_ID_LEN) -#define Message_setKeyID(f, v) SetSubStr(f, v, KeyIDPos) -#define Message_MIC(f) SubStr(f, KeyMICPos, KEY_MIC_LEN) -#define Message_setMIC(f, v) SetSubStr(f, v, KeyMICPos) -#define Message_clearMIC(f) memset(f.Octet+KeyMICPos, 0, KEY_MIC_LEN) -#define Message_KeyDataLength(f) ((u2Byte)(f.Octet[KeyDataLenPos] <<8) + (u2Byte)(f.Octet[KeyDataLenPos+1])) -#define Message_setKeyDataLength(f, v) (f.Octet[KeyDataLenPos] = (v&0xff00) >>8 , f.Octet[KeyDataLenPos+1] = (v&0x00ff)) -#define Message_KeyData(f, l) SubStr(f, KeyDataPos, l) -#define Message_setKeyData(f, v) SetSubStr(f, v, KeyDataPos); -#define Message_EqualRSNIE(f1 , f2, l) memcmp(f1.Octet, f2.Octet, l) ? 0:1 -#define Message_ReturnKeyDataLength(f) f.Length - (ETHER_HDRLEN + LIB1X_EAPOL_HDRLEN + EAPOLMSG_HDRLEN) - -/* -typedef union _KeyInfo -{ - u2Byte shortData; - u1Byte charData[2]; - struct - { - u2Byte KeyDescVersion:3; - u2Byte KeyType:1; - u2Byte KeyIndex:2; - u2Byte Install:1; - u2Byte KeyAck:1; - u2Byte KeyMIC:1; - u2Byte Secure:1; - u2Byte Error:1; - u2Byte Request:1; - u2Byte Reserved:4; - }field; -}KeyInfo; - -#define KeyInfo_KeyDescVersion(f) ( ((KeyInfo *)((f).Octet)) ->field.KeyDescVersion) -#define KeyInfo_KeyType(f) ( ((KeyInfo *)((f).Octet)) ->field.KeyType) -#define KeyInfo_KeyIndex(f) ( ((KeyInfo *)((f).Octet)) ->field.KeyIndex) -#define KeyInfo_Install(f) ( ((KeyInfo *)((f).Octet)) ->field.Install) -#define KeyInfo_KeyAck(f) ( ((KeyInfo *)((f).Octet)) ->field.KeyAck) -#define KeyInfo_KeyMic(f) ( ((KeyInfo *)((f).Octet)) ->field.KeyMic) -#define KeyInfo_Secure(f) ( ((KeyInfo *)((f).Octet)) ->field.Secure) -#define KeyInfo_Error(f) ( ((KeyInfo *)((f).Octet)) ->field.Error) -#define KeyInfo_Request(f) ( ((KeyInfo *)((f).Octet)) ->field.Request) -#define KeyInfo_Reserved(f) ( ((KeyInfo *)((f).Octet)) ->field.Reserved) -*/ - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _EAPOL_KEY_STRUCT -{ - u1Byte key_desc_type; - //KeyInfo key_info; - u1Byte key_info[2]; - u1Byte key_len[sizeof(u2Byte)]; - u1Byte key_replay_counter[KEY_RC_LEN]; - u1Byte key_nounce[KEY_NONCE_LEN]; - u1Byte key_iv[KEY_IV_LEN]; - u1Byte key_rsc[KEY_RSC_LEN]; - u1Byte key_id[KEY_ID_LEN]; - u1Byte key_mic[KEY_MIC_LEN]; - u1Byte key_data_len[KEY_MATERIAL_LEN]; - u1Byte *key_data; -}EAPOL_KEY_STRUCT, *PEAPOL_KEY_STRUCT; - - -typedef struct _KDE_IE_STRUCT -{ - u1Byte IEType; // ID = 0xDD - u1Byte IELen; - u1Byte OUI[3]; // 0x00-0x0F-0xAC - u1Byte Datatype; // 0x01 - u1Byte KID; - u1Byte Reserved; - u1Byte GTK[1]; - -}KDE_STRUCT,*PKDE_STRUCT; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - - -//--------------------------------------------------------------------- -// Definition for 1x_kmsm_eapolkey.c -//--------------------------------------------------------------------- -/*----------------------------------------------------------------------------- - LargeInteger - Inline Function definition --------------------------------------------------------------------------------*/ -static -__inline void INCLargeInteger(OCTET8_INTEGER * x){ - - if( x -> LowPart == 0xffffffff){ - if( x ->HighPart == 0xffffffff) - { - x ->HighPart = 0; - x ->LowPart = 0; - }else - { - x ->HighPart++; - x ->LowPart = 0; - } - }else - x ->LowPart++; -} - -static -__inline void ReplayCounter_LI2OC( - OCTET_STRING f, - OCTET8_INTEGER * li); - -static -__inline void INCOctet16_INTEGER(OCTET16_INTEGER * x){ - - if( LargeIntegerOverflow(x ->field. LowPart)){ - if( LargeIntegerOverflow(x ->field. HighPart)) - { - LargeIntegerZero( x ->field. HighPart); - LargeIntegerZero( x ->field. LowPart); - }else - { - INCLargeInteger(&x ->field. HighPart); - LargeIntegerZero( x ->field. LowPart); - } - }else - INCLargeInteger(&x ->field. LowPart); - -} - -/*----------------------------------------------------------------------------- - OCTET32_INTEGER - Inline Function definition --------------------------------------------------------------------------------*/ -static -__inline OCTET32_INTEGER * INCOctet32_INTEGER(OCTET32_INTEGER * x) -{ - - if( Octet16IntegerOverflow(x ->field.LowPart)){ - if( Octet16IntegerOverflow(x ->field.HighPart)) - { - Octet16IntegerZero( x ->field.HighPart); - Octet16IntegerZero( x ->field.LowPart); - }else - { - INCOctet16_INTEGER(&x ->field.HighPart); - Octet16IntegerZero( x ->field.LowPart); - } - }else - INCOctet16_INTEGER(&x ->field.LowPart); - return x; -} - -/*----------------------------------------------------------------------------- - EAPOLKey field process - Inline Function definition - Macro definition --------------------------------------------------------------------------------*/ -static -__inline -OCTET_STRING SubStr(OCTET_STRING f, u2Byte s,u2Byte l) { \ - OCTET_STRING res; \ - res.Length = l; \ - res.Octet = f.Octet+s; \ - return res; \ - } - - -__inline void Message_ReplayCounter_OC2LI(OCTET_STRING f, OCTET8_INTEGER * li){ - - li -> HighPart = ((u4Byte)(*(f.Octet + ReplayCounterPos + 3))) - + ((u4Byte)(*(f.Octet + ReplayCounterPos+ 2)) <<8 ) - + ((u4Byte)(*(f.Octet + ReplayCounterPos + 1)) << 16) - + ((u4Byte)(*(f.Octet + ReplayCounterPos + 0)) <<24); - li -> LowPart = ((u4Byte)(*(f.Octet + ReplayCounterPos + 7))) - + ((u4Byte)(*(f.Octet + ReplayCounterPos + 6)) <<8 ) - + ((u4Byte)(*(f.Octet + ReplayCounterPos + 5)) << 16) - + ((u4Byte)(*(f.Octet + ReplayCounterPos + 4)) <<24); -} - -__inline void ReplayCounter_OC2LI(OCTET_STRING f, OCTET8_INTEGER * li){ - - li -> HighPart = ((u4Byte)(*(f.Octet + 3))) - + ((u4Byte)(*(f.Octet + 2)) <<8 ) - + ((u4Byte)(*(f.Octet + 1)) << 16) - + ((u4Byte)(*(f.Octet + 0)) <<24); - li -> LowPart = ((u4Byte)(*(f.Octet + 7))) - + ((u4Byte)(*(f.Octet + 6)) <<8 ) - + ((u4Byte)(*(f.Octet + 5)) << 16) - + ((u4Byte)(*(f.Octet + 4)) <<24); -} - -static -__inline void ReplayCounter_LI2OC(OCTET_STRING f, OCTET8_INTEGER * li){ - - *(f.Octet + 0) = (u1Byte)((li -> HighPart >> 24) & 0xff); - *(f.Octet + 1) = (u1Byte)((li -> HighPart >> 16) & 0xff); - *(f.Octet + 2) = (u1Byte)((li -> HighPart >> 8) & 0xff); - *(f.Octet + 3) = (u1Byte)((li -> HighPart >> 0) & 0xff); - - *(f.Octet + 4) = (u1Byte)((li -> LowPart >> 24) & 0xff); - *(f.Octet + 5) = (u1Byte)((li -> LowPart >> 16) & 0xff); - *(f.Octet + 6) = (u1Byte)((li -> LowPart >> 8) & 0xff); - *(f.Octet + 7) = (u1Byte)((li -> LowPart >> 0) & 0xff); -} - -/*----------------------------------------------------------------------------------------------- - f is EAPOL-KEY message -------------------------------------------------------------------------------------------------*/ -static -__inline int Message_EqualReplayCounter(OCTET8_INTEGER li1, OCTET_STRING f) -{ - OCTET8_INTEGER li2; - Message_ReplayCounter_OC2LI(f, &li2); - if(li1.HighPart == li2.HighPart && li1.LowPart == -li2.LowPart) - return 1; - else - return 0; -} -/*------------------------------------------------------------------------------------------- - li1 is recorded replay counter on STA - f is the replay counter from EAPOL-KEY message ----------------------------------------------------------------------------------------------*/ -static -__inline int Message_SmallerEqualReplayCounter(OCTET8_INTEGER li1, OCTET_STRING f) -//f li1.HighPart) - return 0; - else if(li2.HighPart < li1.HighPart) - return 1; - else if(li2.LowPart > li1.LowPart) - return 0; - else if(li2.LowPart <= li1.LowPart) - return 1; - else - return 0; -} - -/*--------------------------------------------------------------------------------------------- - li1 is recorded replay counter on STA - f is the replay counter from EAPOL-KEY message ------------------------------------------------------------------------------------------------*/ -static -__inline int Message_LargerReplayCounter(OCTET8_INTEGER li1, OCTET_STRING f) -{ - OCTET8_INTEGER li2; - Message_ReplayCounter_OC2LI(f, &li2); - - //lib1x_message(MESS_DBG_KEY_MANAGE, "Authenticator : HighPart = %d, LowPart = %d\n", li1.field.HighPart, li1.field.LowPart); - //lib1x_message(MESS_DBG_KEY_MANAGE, "Supplicant : HighPart = %d, LowPart = %d\n", li2.field.HighPart, li2.field.LowPart); - - if(li2.HighPart > li1.HighPart) - return 1; - else if(li2.LowPart > li1.LowPart) - return 1; - else - return 0; - -} - -typedef union LINT_CH8{ - OCTET8_INTEGER uli; - char ch[8]; -}LINT_CH8; - -static -__inline void Message_setReplayCounter(OCTET_STRING f, u4Byte h, u4Byte l){ - - //OCTET8_INTEGER *li = (OCTET8_INTEGER *)(f.Octet + ReplayCounterPos); - LINT_CH8 *li = (LINT_CH8 *)(f.Octet + ReplayCounterPos); - li -> ch[0] = (u1Byte)(h >> 24) & 0xff; - li -> ch[1] = (u1Byte)(h >> 16) & 0xff; - li -> ch[2] = (u1Byte)(h >> 8) & 0xff; - li -> ch[3] = (u1Byte)(h >> 0) & 0xff; - li -> ch[4] = (u1Byte)(l >> 24) & 0xff; - li -> ch[5] = (u1Byte)(l >> 16) & 0xff; - li -> ch[6] = (u1Byte)(l >> 8) & 0xff; - li -> ch[7] = (u1Byte)(l >> 0) & 0xff; - -} - -//------------------------------------------------------------------------ -// Definition file for 1x_kmsm_eapolkey.c -//------------------------------------------------------------------------ -void CalcPTK(u1Byte *addr1, u1Byte *addr2, u1Byte *nonce1, u1Byte *nonce2, - u1Byte * keyin, int keyinlen, - u1Byte * keyout, int keyoutlen); - -void CalcEapolMIC( - OCTET_STRING EAPOLMsgSend, - int algo, - u1Byte *key, - int keylen); - -BOOLEAN CheckEapolMIC( - PADAPTER Adapter, - OCTET_STRING EAPOLMsgRecvd, - u1Byte *key, - int keylen); - -void EncEapolKeyData( - PADAPTER Adapter, - OCTET_STRING EapolKeyMsg, - pu1Byte pKEK, - int nKEKLen); - - - -void -CalcCCKMRequestIEMIC( - OCTET_STRING MICdata , - u1Byte *KRK , - u1Byte *outdata ); - -void -CalcCCKMRequestIEMICV2( - OCTET_STRING MICdata , - u1Byte *KRK , - u1Byte *outdata ); - -/* - -void CalcGTK( - u1Byte *addr, - u1Byte *nonce, - u1Byte * keyin, - int keyinlen, - u1Byte * keyout, - int keyoutlen); -*/ - -int DecGTK( - PADAPTER Adapter, - OCTET_STRING EAPOLMsgRecvd, - u1Byte *kek, - int keklen, - int keylen, - u1Byte *kout); - - -//------------------------------------------------------------------------ -// Definition file for 1x_kmsm_hmac.c -//------------------------------------------------------------------------ -void hmac_sha( - unsigned char* k, /* secret key */ - int lk, /* length of the key in bytes */ - unsigned char* d, /* data */ - int ld, /* length of data in bytes */ - unsigned char* out, /* output buffer, at least "t" bytes */ - int t - ); -void hmac_sha1( - unsigned char *text, - int text_len, - unsigned char *key, - int key_len, - unsigned char *digest); - -void -hmac_md5( - unsigned char *text, - int text_len, - unsigned char *key, - int key_len, - void * digest); - -//------------------------------------------------------------------------ -// Definition file for 1x_kmsm_prf.c -//------------------------------------------------------------------------ -void i_PRF( - unsigned char* secret, - int secret_len, - unsigned char* prefix, - int prefix_len, - unsigned char* random, - int random_len, - unsigned char* digest, // caller digest to be filled in - int digest_len // in byte - ); - -int PasswordHash ( - const char *password, - int passwordlength, - unsigned char *ssid, - int ssidlength, - unsigned char *output - ); - -////------------------------------------------------------------------------ -//// Definition file for 1x_kmsm_aes.c -////------------------------------------------------------------------------ -//void AES_WRAP( -// u08b * plain, -// int plain_len, -// u08b * iv, -// int iv_len, -// u08b * kek, -// int kek_len, -// u08b *cipher, -// u16b *cipher_len); -// -//void AES_UnWRAP( -// u08b * cipher, -// int cipher_len, -// u08b * kek, -// int kek_len, -// u08b * plain); -// - -#endif diff --git a/network/wlan/WDI/COMMON/1x_md5c.h b/network/wlan/WDI/COMMON/1x_md5c.h deleted file mode 100644 index 67da7dbd..00000000 --- a/network/wlan/WDI/COMMON/1x_md5c.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * 8021x_md5c.h - header file for MD5C.C - */ - -#ifndef P8021X_MD5C_H -#define P8021X_MD5C_H - -/* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All -rights reserved. - -License to copy and use this software is granted provided that it -is identified as the "RSA Data Security, Inc. MD5 Message-Digest -Algorithm" in all material mentioning or referencing this software -or this function. - -License is also granted to make and use derivative works provided -that such works are identified as "derived from the RSA Data -Security, Inc. MD5 Message-Digest Algorithm" in all material -mentioning or referencing the derived work. - -RSA Data Security, Inc. makes no representations concerning either -the merchantability of this software or the suitability of this - -software for any particular purpose. It is provided "as is" -without express or implied warranty of any kind. - -These notices must be retained in any copies of any part of this -documentation and/or software. - */ - - -/* MD5_TYPE.H - RSAREF types and constants */ - -/* POINTER defines a generic pointer type */ -typedef unsigned char *POINTER; - -/* UINT2 defines a two byte word */ -//typedef unsigned short int UINT2; - -/* UINT4 defines a four byte word */ -//typedef unsigned long int UINT4; - -/* UINT4 defines a four byte word */ - - -/* MD5 context. */ -typedef struct { - u4Byte state[4]; /* state (ABCD) */ - u4Byte count[2]; /* number of bits, modulo 2^64 (lsb first) */ - u1Byte buffer[64]; /* input buffer */ -} MD5_CTX; - -void MD5_Init(MD5_CTX *); -void MD5_Update(MD5_CTX *, u1Byte *, u4Byte); -void MD5_Final(u1Byte [16], MD5_CTX *); - -#endif diff --git a/network/wlan/WDI/COMMON/1x_rc4.h b/network/wlan/WDI/COMMON/1x_rc4.h deleted file mode 100644 index fa4457f8..00000000 --- a/network/wlan/WDI/COMMON/1x_rc4.h +++ /dev/null @@ -1,89 +0,0 @@ -/* crypto/rc4/rc4.h */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) - * All rights reserved. - * - * This package is an SSL implementation written - * by Eric Young (eay@cryptsoft.com). - * The implementation was written so as to conform with Netscapes SSL. - * - * This library is free for commercial and non-commercial use as long as - * the following conditions are aheared to. The following conditions - * apply to all code found in this distribution, be it the RC4, RSA, - * lhash, DES, etc., code; not just the SSL code. The SSL documentation - * included with this distribution is covered by the same copyright terms - * except that the holder is Tim Hudson (tjh@cryptsoft.com). - * - * Copyright remains Eric Young's, and as such any Copyright notices in - * the code are not to be removed. - * If this package is used in a product, Eric Young should be given attribution - * as the author of the parts of the library used. - * This can be in the form of a textual message at program startup or - * in documentation (online or textual) provided with the package. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * "This product includes cryptographic software written by - * Eric Young (eay@cryptsoft.com)" - * The word 'cryptographic' can be left out if the rouines from the library - * being used are not cryptographic related :-). - * 4. If you include any Windows specific code (or a derivative thereof) from - * the apps directory (application code) you must include an acknowledgement: - * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" - * - * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * The licence and distribution terms for any publically available version or - * derivative of this code cannot be changed. i.e. this code cannot simply be - * copied and put under another distribution licence - * [including the GNU Public Licence.] - */ - -#ifndef HEADER_RC4_H -#define HEADER_RC4_H - -#ifdef OPENSSL_NO_RC4 -#error RC4 is disabled. -#endif - -//#include /* RC4_INT */ -#define RC4_INT unsigned int - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct rc4_key_st - { - RC4_INT x,y; - RC4_INT data[256]; - } RC4_KEY; - - -const char *RC4_options(void); -void RC4_set_key(RC4_KEY *key, int len, const unsigned char *data); -void RC4(RC4_KEY *key, ULONG len, const unsigned char *indata, - unsigned char *outdata); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/network/wlan/WDI/COMMON/AES_OCB.h b/network/wlan/WDI/COMMON/AES_OCB.h deleted file mode 100644 index 242a272a..00000000 --- a/network/wlan/WDI/COMMON/AES_OCB.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * aes_ocb.h - * - * Author: Ted Krovetz (tdk@acm.org) - * History: 1 April 2000 - first release (TK) - version 0.9 - * - * OCB-AES-n reference code based on NIST submission "OCB Mode" - * (dated 1 April 2000), submitted by Phillip Rogaway, with - * auxiliary submitters Mihir Bellare, John Black, and Ted Krovetz. - * - * This code is freely available, and may be modified as desired. - * Please retain the authorship and change history. - * Note that OCB mode itself is patent pending. - * - * This code is NOT optimized for speed; it is only - * designed to clarify the algorithm and to provide a point - * of comparison for other implementations. - * - * Limitiations: Assumes a 4-byte integer and pointers are - * 32-bit aligned. Acts on a byte string of less than 2^{36} - 16 bytes. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __OCB__H -#define __OCB__H - -#ifndef OCB_AES_KEY_BITLEN -#define OCB_AES_KEY_BITLEN 128 /* Must be 128, 192, 256 */ -#endif - -#if ((OCB_AES_KEY_BITLEN != 128) && \ - (OCB_AES_KEY_BITLEN != 192) && \ - (OCB_AES_KEY_BITLEN != 256)) -#error Bad -- OCB_AES_KEY_BITLEN must be one of 128, 192 or 256!! -#endif - - - -/* - * This implementation precomputes L(-1), L(0), L(1), L(PRE_COMP_BLOCKS), - * where L(0) = L and L(-1) = L/x and L(i) = x*L(i) for i>0. - * Normally, one would select PRE_COMP_BLOCKS to be a small number - * (like 0-6) and compute any larger L(i) values "on the fly", when they - * are needed. This saves space in _keystruct and needn't adversely - * impact running time. But in this implementation, to keep things as - * simple as possible, we compute all the L(i)-values we might ever see. - */ -#define PRE_COMP_BLOCKS 31 /* Must be between 0 and 31 */ - -#define OCB_AES_ROUNDS (OCB_AES_KEY_BITLEN / 32 + 6) - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef unsigned char rblock[16]; - -struct _keystruct { - u4Byte rek[4*(OCB_AES_ROUNDS+1)]; /* AES encryption key */ - u4Byte rdk[4*(OCB_AES_ROUNDS+1)]; /* AES decryption key */ - u4Byte tag_len; /* Sizeof tags to generate/validate */ - rblock L[PRE_COMP_BLOCKS+1]; /* Precomputed L(i) values, L[0] = L */ - rblock L_inv; /* Precomputed L/x value */ -}; - -/* Opaque forward declaration of key structure */ -typedef struct _keystruct keystruct; - - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -/* - * "ocb_aes_init" optionally creates an ocb keystructure in memory - * and then initializes it using the supplied "enc_key". "tag_len" - * specifies the length of tags that will subsequently be generated - * and verified. If "key" is NULL a new structure will be created, but - * if "key" is non-NULL, then it is assumed that it points to a previously - * allocated structure, and that structure is initialized. "ocb_aes_init" - * returns a pointer to the initialized structure, or NULL if an error - * occurred. - */ -keystruct * /* Init'd keystruct or NULL */ -ocb_aes_init(void *enc_key, /* AES key */ - ULONG tag_len, /* Length of tags to be used */ - keystruct *key); /* OCB key structure. NULL means */ - /* Allocate/init new, non-NULL */ - /* means init existing structure */ - -/* "ocb_done deallocates a key structure and returns NULL */ -keystruct * -ocb_done(keystruct *key); - -/* - * "ocb_aes_encrypt takes a key structure, four buffers and a length - * parameter as input. "pt_len" bytes that are pointed to by "pt" are - * encrypted and written to the buffer pointed to by "ct". A tag of length - * "tag_len" (set in ocb_aes_init) is written to the "tag" buffer. "nonce" - * must be a 16-byte buffer which changes for each new message being - * encrypted. "ocb_aes_encrypt" always returns a value of 1. - */ -void -ocb_aes_encrypt(keystruct *key, /* Initialized key struct */ - void *nonce, /* 16-byte nonce */ - void *pt, /* Buffer for (incoming) plaintext */ - ULONG pt_len, /* Byte length of pt */ - void *ct, /* Buffer for (outgoing) ciphertext */ - void *tag); /* Buffer for generated tag */ - - -/* - * "ocb_aes_decrypt takes a key structure, four buffers and a length - * parameter as input. "ct_len" bytes that are pointed to by "ct" are - * decrypted and written to the buffer pointed to by "pt". A tag of length - * "tag_len" (set in ocb_aes_init) is read from the "tag" buffer. "nonce" - * must be a 16-byte buffer which changes for each new message being - * encrypted. "ocb_aes_decrypt" returns 0 if the supplied - * tag is not correct for the supplied message, otherwise 1 is returned if - * the tag is correct. - */ -int /* Returns 0 iff tag is incorrect */ -ocb_aes_decrypt(keystruct *key, /* Initialized key struct */ - void *nonce, /* 16-byte nonce */ - void *ct, /* Buffer for (incoming) ciphertext */ - ULONG ct_len, /* Byte length of ct */ - void *pt, /* Buffer for (outgoing) plaintext */ - void *tag); /* Tag to be verified */ - - - - -void -pmac_aes (keystruct *key, /* Initialized key struct */ - void *in, /* Buffer for (incoming) message */ - ULONG in_len, /* Byte length of message */ - void *tag); /* 16-byte buffer for generated tag */ - -#endif /* __OCB__H */ diff --git a/network/wlan/WDI/COMMON/AES_rijndael.h b/network/wlan/WDI/COMMON/AES_rijndael.h deleted file mode 100644 index a7a776f1..00000000 --- a/network/wlan/WDI/COMMON/AES_rijndael.h +++ /dev/null @@ -1,43 +0,0 @@ -/** - * rijndael-alg-fst.h - * - * @version 3.0 (December 2000) - * - * Optimised ANSI C code for the Rijndael cipher (now AES) - * - * @author Vincent Rijmen - * @author Antoon Bosselaers - * @author Paulo Barreto - * - * This code is hereby placed in the public domain. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS - * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -#ifndef __RIJNDAEL_ALG_FST_H -#define __RIJNDAEL_ALG_FST_H - -#define MAXKC (256/32) -#define MAXKB (256/8) -#define MAXNR 14 - -int rijndaelKeySetupEnc(u4Byte rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBits); -int rijndaelKeySetupDec(u4Byte rk[/*4*(Nr + 1)*/], const u8 cipherKey[], int keyBits); -void rijndaelEncrypt(const u4Byte rk[/*4*(Nr + 1)*/], int Nr, const u8 pt[16], u8 ct[16]); -void rijndaelDecrypt(const u4Byte rk[/*4*(Nr + 1)*/], int Nr, const u8 ct[16], u8 pt[16]); - -#ifdef INTERMEDIATE_VALUE_KAT -void rijndaelEncryptRound(const u4Byte rk[/*4*(Nr + 1)*/], int Nr, u8 block[16], int rounds); -void rijndaelDecryptRound(const u4Byte rk[/*4*(Nr + 1)*/], int Nr, u8 block[16], int rounds); -#endif /* INTERMEDIATE_VALUE_KAT */ - -#endif /* __RIJNDAEL_ALG_FST_H */ diff --git a/network/wlan/WDI/COMMON/AMSDU_Aggregation.h b/network/wlan/WDI/COMMON/AMSDU_Aggregation.h deleted file mode 100644 index 4d1c3d1f..00000000 --- a/network/wlan/WDI/COMMON/AMSDU_Aggregation.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef __INC_AMSDU_AGGREGATION_H -#define __INC_AMSDU_AGGREGATION_H - -// A-MSDU Aggregation Tx Desc threshold. -// If Adapter->nBufInTxDesc[n] is larger than this threshold, A-MSDU aggregation will be turned on. -#define AMSDU_THRESHOLD 1 -#define GET_AMSDU_SUB_HEADER_LENGTH(_amsduHdr) N2H2BYTE(*((UNALIGNED pu2Byte)(((pu1Byte)(_amsduHdr)) + ETHERNET_ADDRESS_LENGTH*2))) -#define SET_AMSDU_SUB_HEADER_LENGTH(_amsduHdr, _val) ((*(UNALIGNED pu2Byte)(((pu1Byte)(_amsduHdr)) + ETHERNET_ADDRESS_LENGTH*2))=H2N2BYTE(_val)) - -PRT_TCB -AMSDU_Aggregation( - PADAPTER Adapter, - PRT_LIST_ENTRY pSendList - ); - -u1Byte -AMSDU_GetAggregatibleList( - PADAPTER Adapter, - PRT_TCB pTcb, - PRT_LIST_ENTRY pSendList - ); - -BOOLEAN -AMSDUTransmitTCB( - PADAPTER Adapter, - PRT_TCB *ppTcb, - pu1Byte pHeader - ); - -VOID -AMSDU_UpdateForcedValueByReg( - PADAPTER Adapter - ); - -VOID -AMSDU_QuerySizeAndNum( - PADAPTER Adapter, - pu2Byte nMaxAMSDUSize, - pu1Byte nMaxAMSDUSizeNum - ); - -VOID -AMSDU_UpdateRxAMSDUSizeHistogram( - PADAPTER Adapter, - u2Byte PacketLength - ); - -VOID -AMSDU_UpdateRxAMSDUNumHistogram( - PADAPTER Adapter, - u2Byte totalSubframe - ); - -VOID -AMSDU_ClearTRxAMSDUHistogram( - PADAPTER Adapter - ); - -VOID -AMSDU_UpdateTxAMSDUSizeHistogram( - PADAPTER Adapter, - u2Byte PacketLength - ); - -VOID -AMSDU_UpdateTxAMSDUNumHistogram( - PADAPTER Adapter, - u1Byte totalSubframe - ); - - - - -#endif diff --git a/network/wlan/WDI/COMMON/ActionTimer.h b/network/wlan/WDI/COMMON/ActionTimer.h deleted file mode 100644 index 4b575d9a..00000000 --- a/network/wlan/WDI/COMMON/ActionTimer.h +++ /dev/null @@ -1,168 +0,0 @@ - -#ifndef __INC_ACTION_TIMER_H -#define __INC_ACTION_TIMER_H - - -// Use Handle instead of pointer for private access ------ -typedef u1Byte ACTION_TIMER_HANDLE; -#define INVALID_ACTION_TIMER_HANDLE 0 -#define MAX_ACTION_TIMER_HANDLE 255 -// ---------------------------------------------- - - -typedef enum _ACTION_TIMER_REFERENCED_CLOCK -{ - CLOCK_INVALID = 0, - SW_OS_SYSTEM_CLOCK, - HW_TSF_CLOCK - -} ACTION_TIMER_REFERENCED_CLOCK, *PACTION_TIMER_REFERENCED_CLOCK; - - -typedef enum _ACTION_TIMER_HW_TIMER -{ - HW_TIMER_NO_USE = 0, - HW_TSF_CLOCK_PS_TIMER, - HW_TIMER_MAX - -} ACTION_TIMER_HW_TIMER, *PACTION_TIMER_HW_TIMER; - - - -#define US_CLOCK_TO_MS(_usClock) ((_usClock) / 1000) - -#define ACTION_TIMER_HW_TIMER_INTERRUPT_DELAY_US (50) - -#define ACTION_TIMER_ITEM_FIRE_TOLERANCE_TIME_US (1000) -#define ACTION_TIMER_ITEM_MAX_PENDING_TIME_MS (30 * 1000) - -#define ACTION_TIMER_ITEM_MAX_TOTAL_EXECUTION_TIME_US (3000) -#define ACTION_TIMER_ITEM_MAX_SINGLE_EXECUTION_TIME_US (1000) - -typedef struct _ACTION_TIMER_ITEM ACTION_TIMER_ITEM, *PACTION_TIMER_ITEM; - -typedef enum _ACTION_TYPE -{ - ACTION_TYPE_INVALID = 0, - ACTION_TYPE_MULTICHANNEL_SWITCH, - ACTION_TYPE_CUSTOMIZED_SCAN, - ACTION_TYPE_P2P_POWERSAVE, - ACTION_TYPE_ALL, - ACTION_TYPE_MAX - -} ACTION_TYPE, *PACTION_TYPE; - - -typedef VOID -(*ACTION_TIMER_ITEM_CALLBACK)( - const ACTION_TIMER_ITEM * const pOneShotActionItem -); - -typedef struct _ACTION_TIMER_ITEM -{ - // Internal Use for ActionTimer --------------------------------------------- - RT_LIST_ENTRY List; - ACTION_TIMER_HANDLE ActionOwner; // Owner of this action item - // --------------------------------------------------------------------- - - // Fill the Following to Register an Item -------------------------------------------------------------------- - ACTION_TYPE ActionType; // Category for a set of action items implementing a single feature - u8Byte usTimeout; // Absolute system us time specifying the timeout - PVOID pContext; // User-specified data context - ACTION_TIMER_ITEM_CALLBACK CallbackFunc; // Timeout callback function - // --------------------------------------------------------------------------------------------------- - -} ACTION_TIMER_ITEM, *PACTION_TIMER_ITEM; - - -typedef struct _ACTION_TIMER -{ - RT_LIST_ENTRY List; - - ACTION_TIMER_HANDLE TimerHandle; - - ACTION_TIMER_REFERENCED_CLOCK ClockType; - - // For Tsf Shared Hardware Timer ------------- - ACTION_TIMER_HW_TIMER HwTimer; - // --------------------------------------- - - // For SW_OS_SYSTEM_CLOCK --------------- - RT_TIMER SoftTimer; - // --------------------------------------- - - RT_LIST_ENTRY TimeOrderedActionItemQueue; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock - u4Byte uNumberOfActionItems; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock - -} ACTION_TIMER, *PACTION_TIMER; - - -typedef struct _ACTION_TIMER_COMMON_CONTEXT { - - RT_SPIN_LOCK ActionTimerLock; - - // Preallocated Hw Action Timer (Indexed by ACTION_TIMER_HW_TIMER) ------------------------- - ACTION_TIMER HwActionTimer[HW_TIMER_MAX]; - // ------------------------------------------------------------------------------------ - - RT_LIST_ENTRY ActionTimerQueue; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock - u4Byte uNumberOfActionTimers; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock - u1Byte LastAssignedTimerHandle; // Protected by ACTION_TIMER_COMMON_CONTEXT.ActionTimerLock - - - // Check if the dynamic memory is returned completely ------ - u4Byte uAllocatedMemory; - u4Byte uReleasedMemory; - // -------------------------------------------------- - -} ACTION_TIMER_COMMON_CONTEXT, *PACTION_TIMER_COMMON_CONTEXT; - -#define ACTION_TIMER_SIZE_OF_COMMON_CONTEXT sizeof(ACTION_TIMER_COMMON_CONTEXT) - - - -VOID -ActionTimerInitializeCommonContext( - PADAPTER pAdapter -); - -VOID -ActionTimerDeInitializeCommonContext( - PADAPTER pAdapter -); - -VOID -ActionTimerRegisterActionItem( - PADAPTER pAdapter, - PACTION_TIMER_ITEM pInputDataItem, - ACTION_TIMER_HANDLE ActionTimerHandle -); - -ACTION_TIMER_HANDLE -ActionTimerAllocate( - PADAPTER pAdapter, - const char* pTimerName, - ACTION_TIMER_REFERENCED_CLOCK ClockType, - ACTION_TIMER_HW_TIMER HwTimerSelect -); - -VOID -ActionTimerRelease( - PADAPTER pAdapter, - ACTION_TIMER_HANDLE ActionTimerHandle -); - -VOID -ActionTimerFlushActionItem( - PADAPTER pAdapter, - ACTION_TIMER_HANDLE ActionTimerHandle, - ACTION_TYPE ActionType -); - -VOID -ActionTimerHwTimerCallback( - PADAPTER pAdapter, - ACTION_TIMER_HW_TIMER HwTimer -); - -#endif diff --git a/network/wlan/WDI/COMMON/ApEngine.c b/network/wlan/WDI/COMMON/ApEngine.c deleted file mode 100644 index 1fe215eb..00000000 --- a/network/wlan/WDI/COMMON/ApEngine.c +++ /dev/null @@ -1,5175 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "ApEngine.tmh" -#endif - -#if 1//(AP_MODE_SUPPORT == 1) -//------------------------------------------------------------------------------ -// AssociateEntry related operations. -//------------------------------------------------------------------------------ -u1Byte -AsocEntry_ComputeSum( - IN pu1Byte MacAddr - ) -{ - u4Byte sum; - - sum = MacAddr[0]+ - MacAddr[1]+ - MacAddr[2]+ - MacAddr[3]+ - MacAddr[4]+ - MacAddr[5]; - - return (u1Byte)(sum % ASSOCIATE_ENTRY_NUM); -} - -PRT_WLAN_STA -AsocEntry_GetEntry( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr - ) -{ - int i; - u1Byte sum; - - //RT_PRINT_ADDR(COMP_MLME, DBG_TRACE, "AsocEntry_GetEntry: \n", MacAddr); - - sum = AsocEntry_ComputeSum(MacAddr); - - if(!pMgntInfo->AsocEntry[sum].bUsed) - { - return NULL; - } - - for(i = sum;i < ASSOCIATE_ENTRY_NUM; i++) - { - if( pMgntInfo->AsocEntry[i].bUsed && - pMgntInfo->AsocEntry[i].Sum == sum && - PlatformCompareMemory(MacAddr, pMgntInfo->AsocEntry[i].MacAddr, 6) == 0 ) - { - return &(pMgntInfo->AsocEntry[i]); - } - } - for(i = 0; i < sum; i++) - { - if( pMgntInfo->AsocEntry[i].bUsed && - pMgntInfo->AsocEntry[i].Sum == sum && - PlatformCompareMemory(MacAddr, pMgntInfo->AsocEntry[i].MacAddr, 6) == 0 ) - { - return &(pMgntInfo->AsocEntry[i]); - } - } - - return NULL; -} - - -PRT_WLAN_STA -AsocEntry_GetEntryByMacId( - IN PMGNT_INFO pMgntInfo, - IN u1Byte MacId - ) -{ - int i; - u1Byte AID = (u1Byte) MacIdGetOwnerAssociatedClientAID(GetAdapterByMgntInfo(pMgntInfo), MacId); - - // Prefast warning ignore for false positive -#pragma warning( disable:6064 ) - RT_PRINT_ADDR(COMP_MLME, DBG_TRACE, "AsocEntry_GetEntryByMacId: %d\n", MacId); - - for(i = 0;i < ASSOCIATE_ENTRY_NUM; i++) - { - if(pMgntInfo->AsocEntry[i].bUsed && pMgntInfo->AsocEntry[i].AID == AID) - { - return &(pMgntInfo->AsocEntry[i]); - } - } - - - return NULL; -} - - - -PRT_WLAN_STA -AsocEntry_GetFreeEntry( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr - ) -{ - int i; - u1Byte sum; - - sum = AsocEntry_ComputeSum(MacAddr); - - for(i = sum; i < ASSOCIATE_ENTRY_NUM; i++) - { - if(!pMgntInfo->AsocEntry[i].bUsed) - { - return &(pMgntInfo->AsocEntry[i]); - } - } - for(i = 0; i < sum; i++) - { - if(!pMgntInfo->AsocEntry[i].bUsed) - { - return &(pMgntInfo->AsocEntry[i]); - } - } - - return NULL; -} - -BOOLEAN -AsocEntry_AddStation( - IN PADAPTER Adapter, - IN pu1Byte MacAddr, - IN AUTH_ALGORITHM AuthAlg - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA pEntry; - u1Byte StaHWLimit = 0; - - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER) - StaHWLimit = ASSOCIATE_ENTRY_NUM; - else if(Adapter == GetDefaultAdapter (Adapter)) - StaHWLimit = 32; - else - StaHWLimit = 15; - - if( (ASSOCIATE_ENTRY_NUM -pMgntInfo->AvailableAsocEntryNum) >= StaHWLimit) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AsocEntry_AddStation(): Fail %d\n", pMgntInfo->AvailableAsocEntryNum) ); - return FALSE; - } - - - pEntry = AsocEntry_GetFreeEntry(pMgntInfo, MacAddr); - - if(pEntry != NULL) - { - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_ResetEntry\n")); - - AsocEntry_ResetEntry(Adapter, pEntry); - - pEntry->bUsed = TRUE; - pEntry->Sum = AsocEntry_ComputeSum(MacAddr); - PlatformMoveMemory(pEntry->MacAddr, MacAddr, 6); - pEntry->AuthAlg = AuthAlg; - - pMgntInfo->AvailableAsocEntryNum--; - RT_TRACE( COMP_AP, DBG_LOUD, ("AsocEntry_AddStation(): Success %d\n", pMgntInfo->AvailableAsocEntryNum) ); - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "Entry Address", pEntry->MacAddr); - - //vivi mask this, use Adapter->DM_DigTable.CurMultiSTAConnectState = DIG_MultiSTA_CONNECT instead of it - //DM_MultiSTA_InitGainChangeNotify_CONNECT(Adapter); - { // Temp fix need to fine tune later. - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - pHalData->DM_OutSrc.DM_DigTable.CurMultiSTAConnectState = DIG_MultiSTA_CONNECT; - } - } - - return TRUE; -} - - -VOID -AsocEntry_ResetEntry( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry - ) -{ - PRT_TCB pTcb; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - - pEntry->AuthPassSeq = 0; - pEntry->bAssociated = FALSE; - pEntry->LastActiveTime = PlatformGetCurrentTime(); - pEntry->bPowerSave = FALSE; - pEntry->WirelessMode = WIRELESS_MODE_UNKNOWN; - - pEntry->DataRate = 0; - pEntry->bUseShortGI = FALSE; - - pEntry->IOTAction = 0; - pEntry->IOTPeer = HT_IOT_PEER_UNKNOWN; - - //yangjun add this,20111226 - PlatformZeroMemory(&pEntry->rssi_stat, sizeof(RSSI_STA)); - //vivi add this, 20110719 - pEntry->AID = 0; - - // HalMacId to this AID ------------------ - pEntry->AssociatedMacId = 0; - // ------------------------------------ - - // - // QoS Capability - // - pEntry->QosMode = QOS_DISABLE; - - pEntry->PSIdleCunt = 0; - - - // - // HT Capability. - // - AP_HTResetSTAEntry(Adapter, pEntry); - AP_VHTResetSTAEntry(Adapter, pEntry); - - // Added by Annie, 2005-07-01. - if( ACTING_AS_AP(Adapter) && - (pSecInfo->AuthMode == RT_802_11AuthModeWPAPSK ||pSecInfo->SecLvl == RT_SEC_LVL_WPA2 ) ) - { - Authenticator_StateINITIALIZE(Adapter, pEntry); - } - - TDLS_ResetAsocEntry(Adapter, pEntry); - - WFD_RemoveAssocClient(Adapter, pEntry->MacAddr); - - // - // 061221, rcnjko: - // 1. We must clear PTK for RSNA IBSS case if peer STA is gone, - // otherwise, when the STA join this IBSS again, we'll try send - // encrypted EAPOL-KEY to it, and therefore 4-way fails. - // - // 2. As to our GTK of RSNA IBSS and WEP key, NDIS6 won't set it again - // even all peer STA leaved. So, keep default key. - // - if( pMgntInfo->OpMode == RT_OP_MODE_IBSS && pMgntInfo->bRSNAPSKMode ) - { - - int index; - PPER_STA_MPAKEY_ENTRY pMapKey; - PPER_STA_DEFAULT_KEY_ENTRY pDefKey; - - // - // Clear peer STA's PTK and GTK. - // - for(index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++) - { - pMapKey = &(pSecInfo->MAPKEYTable[index]); - if( pMapKey->Valid && eqMacAddr(pMapKey->MACAdrss, pEntry->MacAddr) ) - { - RT_PRINT_ADDR( COMP_SEC, DBG_LOUD, "RSNA IBSS: Clear PTK of ", pEntry->MacAddr); - PlatformZeroMemory( pMapKey, sizeof(PER_STA_MPAKEY_ENTRY) ); - } - - pDefKey = &(pSecInfo->PerStaDefKeyTable[index]); - if( pDefKey->Valid && eqMacAddr(pDefKey->MACAdrss, pEntry->MacAddr)) - { - RT_PRINT_ADDR( COMP_SEC, DBG_LOUD, "RSNA IBSS: Clear GTK of ", pEntry->MacAddr); - PlatformZeroMemory( pDefKey, sizeof(PER_STA_DEFAULT_KEY_ENTRY) ); - } - } - - //vivi added for new cam search flow, 20091028 - //also remove hw cam - SEC_AsocEntry_ResetEntry(Adapter, pEntry); - - } - // - // Initialize the indication state machine. - // - pEntry->IndicationEngine.CurrentState = RT_STA_STATE_INITIAL; - pEntry->IndicationEngine.NextState = RT_STA_STATE_AP_INCOMING_ASOC_STARTED; - - pEntry->bOsDecisionMade = FALSE; - pEntry->bNotAcceptedByOs = FALSE; - - // Isaiah for 92EU SoftAP with 11 clients, after 1hr BSOD. it shows AP_RecvAsocReq/AP_SendAsocResp/AP_AsocRspIEFromOS = null. - // 2014-07-14 - if(pEntry->AP_RecvAsocReq != NULL) - { - PlatformFreeMemory(pEntry->AP_RecvAsocReq, 1024); - pEntry->AP_RecvAsocReq = NULL; - } - pEntry->AP_RecvAsocReqLength = 0; - - if(pEntry->AP_SendAsocResp != NULL) - { - PlatformFreeMemory(pEntry->AP_SendAsocResp, 1024); - pEntry->AP_SendAsocResp = NULL; - } - pEntry->AP_SendAsocRespLength = 0; - - if(pEntry->AP_AsocRspIEFromOS != NULL) - { - PlatformFreeMemory(pEntry->AP_AsocRspIEFromOS, 1024); - pEntry->AP_AsocRspIEFromOS = NULL; - } - pEntry->AP_AsocRspIEFromOSLength = 0; - - pEntry->WmmStaQosInfo = 0; - pEntry->WmmEosp = RT_STA_EOSP_STATE_OPENED; - - // Return all packets queued for the STA. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - while( !RTIsListEmpty(&(pEntry->PsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->PsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - while( !RTIsListEmpty(&(pEntry->WmmPsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->WmmPsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - -#if (P2P_SUPPORT == 1) - // - // Reset P2P related entries - // - pEntry->bP2PClient = FALSE; - PlatformZeroMemory(&pEntry->P2PClientInfoDesc, sizeof(P2P_CLIENT_INFO_DISCRIPTOR)); -#endif // #if (P2P_SUPPORT == 1) - -} - -VOID -AsocEntry_RemoveStation( - IN PADAPTER Adapter, - IN pu1Byte MacAddr - ) -{ - u2Byte i, j; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, MacAddr); - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - if(pEntry == NULL) - return; - -#if (P2P_SUPPORT==1) - AP_CHNAGE_CLIENT_PS_STATE(Adapter, pEntry, FALSE); -#endif - - RemovePeerTS(Adapter, MacAddr); - - if(GET_TDLS_ENABLED(pMgntInfo) && !ACTING_AS_AP(Adapter)) - { - TDLS_RemovePeer(Adapter, MacAddr); - } - - AsocEntry_ResetAvailableAID(pMgntInfo, pEntry->AID); - - // HalMacId Remove the specific MacId associated with this peer --------- - if(pEntry->bAssociated) - {// Note that MacId is assigned when it is associated - MacIdDeregisterSpecificMacId(Adapter, pEntry->AssociatedMacId); - } - // ------------------------------------------------------------- - - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_ResetEntry\n")); - AsocEntry_ResetEntry(Adapter, pEntry); // This will free packets queued for this station. - pEntry->bUsed = FALSE; - pMgntInfo->AvailableAsocEntryNum++; - - if(pMgntInfo->AvailableAsocEntryNum == ASSOCIATE_ENTRY_NUM) - { - //vivi mask this, use the next line instead of it - //DM_MultiSTA_InitGainChangeNotify_DISCONNECT(Adapter); - { // Temp fix need to fine tune later. - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - pHalData->DM_OutSrc.DM_DigTable.CurMultiSTAConnectState = DIG_MultiSTA_DISCONNECT; - } - } - - // Since we have an empty entry now, we move entries to reduce the time for search entry. - // I don't think the clean up operation is worth, it is O(n^2). - for(i = 0;i < ASSOCIATE_ENTRY_NUM; i++) - { - if(pMgntInfo->AsocEntry[i].bUsed) - continue; - - // Move first of the entry with hash value=i to this empty entry. - for(j = 0; j < ASSOCIATE_ENTRY_NUM; j++) - { - if(pMgntInfo->AsocEntry[j].bUsed && pMgntInfo->AsocEntry[j].Sum == i) - { - PlatformMoveMemory( - &(pMgntInfo->AsocEntry[i]), - &(pMgntInfo->AsocEntry[j]), - sizeof(RT_WLAN_STA) - ); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if( RTIsListEmpty(&(pMgntInfo->AsocEntry[j].PsQueue)) ) - { - RTInitializeListHead( &(pMgntInfo->AsocEntry[i].PsQueue) ); - } - else - { - - pMgntInfo->AsocEntry[i].PsQueue.Flink->Blink = &(pMgntInfo->AsocEntry[i].PsQueue); // 1st node. - pMgntInfo->AsocEntry[i].PsQueue.Blink->Flink = &(pMgntInfo->AsocEntry[i].PsQueue); // last node. - } - if( RTIsListEmpty(&(pMgntInfo->AsocEntry[j].WmmPsQueue)) ) - { - RTInitializeListHead( &(pMgntInfo->AsocEntry[i].WmmPsQueue) ); - } - else - { - pMgntInfo->AsocEntry[i].WmmPsQueue.Flink->Blink = &(pMgntInfo->AsocEntry[i].WmmPsQueue); // 1st node. - pMgntInfo->AsocEntry[i].WmmPsQueue.Blink->Flink = &(pMgntInfo->AsocEntry[i].WmmPsQueue); // last node. - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - pMgntInfo->AsocEntry[i].perSTAKeyInfo.pWLanSTA = &(pMgntInfo->AsocEntry[i]); - if( Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_AESCCMP ) - { - pMgntInfo->AsocEntry[i].perSTAKeyInfo.TempEncKey = pMgntInfo->AsocEntry[i].perSTAKeyInfo.PTK + TKIP_ENC_KEY_POS; - pMgntInfo->AsocEntry[i].perSTAKeyInfo.TxMICKey = pMgntInfo->AsocEntry[i].perSTAKeyInfo.PTK + TKIP_MIC_KEY_POS; - pMgntInfo->AsocEntry[i].perSTAKeyInfo.RxMICKey = pMgntInfo->AsocEntry[i].perSTAKeyInfo.PTK + (TKIP_MIC_KEY_POS+TKIP_MIC_KEY_LEN); - } - - // - // Reset source entry. - // - pMgntInfo->AsocEntry[j].bUsed = FALSE; - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - RTInitializeListHead( &(pMgntInfo->AsocEntry[j].PsQueue) ); - RTInitializeListHead( &(pMgntInfo->AsocEntry[j].WmmPsQueue) ); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - pMgntInfo->AsocEntry[j].perSTAKeyInfo.pWLanSTA = &(pMgntInfo->AsocEntry[j]); - - if(Adapter->TDLSSupport) - { - TDLS_UpdatePeer(Adapter, &(pMgntInfo->AsocEntry[i])); - } - i = -1; // Restart. - break; - } - } - } -} - -VOID -AsocEntry_UpdateTimeStamp( - IN PRT_WLAN_STA pEntry - ) -{ - if(pEntry!=NULL) - { - pEntry->LastActiveTime = PlatformGetCurrentTime(); - pEntry->PSIdleCunt = 0; - } -} - - -BOOLEAN -AsocEntry_AnyStationAssociated( - IN PMGNT_INFO pMgntInfo - ) -{ - int i; - - if(pMgntInfo->AvailableAsocEntryNum == ASSOCIATE_ENTRY_NUM) - { - return FALSE; - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - if(pMgntInfo->AsocEntry[i].bUsed && pMgntInfo->AsocEntry[i].bAssociated) - { - return TRUE; - } - } - - return FALSE; -} - - -BOOLEAN -AsocEntry_IsStationAssociated( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr - ) -{ - PRT_WLAN_STA pEntry; - - pEntry = AsocEntry_GetEntry(pMgntInfo,MacAddr); - - if(pEntry==NULL) - { - return FALSE; - } - - if(pEntry->bAssociated) - { - return TRUE; - } - else - { - return FALSE; - } -} - -VOID -AsocEntry_AgeFunction( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA AsocEntry = pMgntInfo->AsocEntry; - u2Byte i; - u8Byte CurrentTime; - u8Byte TimeDifference; - BOOLEAN bFree; - u2Byte nBModeStaCnt = 0; - u1Byte nLegacyStaCnt = 0; - u1Byte n20MHzStaCnt = 0; - - RT_TRACE(COMP_AP, DBG_TRACE, ("==> AsocEntry_AgeFunction()\n")); - - - for(i = 0;i < ASSOCIATE_ENTRY_NUM; i++) - { - if(AsocEntry[i].bUsed) - { - // TimeDifference is in ms. - - //sherry modified to fix TimeDifference error 20110517 - CurrentTime = PlatformGetCurrentTime(); - TimeDifference = PlatformDivision64(CurrentTime - AsocEntry[i].LastActiveTime, 1000); - - bFree = FALSE; - if(AsocEntry[i].bAssociated) - { - RT_TRACE(COMP_AP, DBG_TRACE, ("AsocEntry_AgeFunction() check, %02X-%02X-%02X-%02X-%02X-%02X MacId %d Entry index %d\n", AsocEntry[i].MacAddr[0], AsocEntry[i].MacAddr[1], AsocEntry[i].MacAddr[2], AsocEntry[i].MacAddr[3], AsocEntry[i].MacAddr[4], AsocEntry[i].MacAddr[5], AsocEntry[i].AssociatedMacId, i)); - // 10 minutes. - //if(TimeDifference > 600000) // rewrited by Annie, 2006-02-16. - if(TimeDifference > ((u8Byte)pMgntInfo->LiveTime)*1000) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AsocEntry_AgeFunction() > 10 min, %02X-%02X-%02X-%02X-%02X-%02X\n", AsocEntry[i].MacAddr[0], AsocEntry[i].MacAddr[1], AsocEntry[i].MacAddr[2], AsocEntry[i].MacAddr[3], AsocEntry[i].MacAddr[4], AsocEntry[i].MacAddr[5])); - - if(ACTING_AS_AP(Adapter)) - { - // Disassociate inactive STA. - AP_DisassociateStation(Adapter, &(AsocEntry[i]), inactivity); - } - else if(Adapter->TDLSSupport && IS_TDL_EXIST(pMgntInfo)) - { - RemovePeerTS(Adapter, AsocEntry[i].MacAddr); - - // Mark the STA as disassoicated and related. - AsocEntry_BecomeDisassoc(Adapter, &AsocEntry[i]); - } - - AsocEntry_UpdateTimeStamp(&AsocEntry[i]); - } - else - { - if(AsocEntry[i].WirelessMode == WIRELESS_MODE_B) - nBModeStaCnt++; - - if(AsocEntry[i].WirelessMode < WIRELESS_MODE_N_24G) - nLegacyStaCnt++; - else if(!AsocEntry[i].BandWidth) - n20MHzStaCnt++; - - // - // If the power save queues are not empty, check if we should clear the queue. - // We don't want to queue the packets too long. By Bruce, 2010-12-28. - // - if(!RTIsListEmpty(&(AsocEntry[i].PsQueue)) || !RTIsListEmpty(&(AsocEntry[i].WmmPsQueue))) - { - PRT_TCB pTcb; - - AsocEntry[i].PSIdleCunt = (AsocEntry[i].PSIdleCunt + 1 ) % ((pMgntInfo->bWiFiConfg ? AP_CLIENT_PS_QUEUE_TIMEOUT_LOGO_SEC : AP_CLIENT_PS_QUEUE_TIMEOUT_SEC) / RT_CHECK_FOR_HANG_PERIOD); - - if( AsocEntry[i].PSIdleCunt == 0 ) - { - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - while( !RTIsListEmpty(&(AsocEntry[i].PsQueue)) ) - { - RT_PRINT_ADDR( COMP_AP , DBG_WARNING , "[WARNING] AsocEntry_AgeFunction(): Return TCB in PsQueue for addr = ", AsocEntry[i].MacAddr); - pTcb = (PRT_TCB)RTRemoveHeadList(&(AsocEntry[i].PsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - while( !RTIsListEmpty(&(AsocEntry[i].WmmPsQueue)) ) - { - RT_PRINT_ADDR( COMP_AP , DBG_WARNING , "[WARNING] AsocEntry_AgeFunction(): Return TCB in WmmPsQueue for addr = ", AsocEntry[i].MacAddr); - pTcb = (PRT_TCB)RTRemoveHeadList(&(AsocEntry[i].WmmPsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - - // - // We leave power saving mode when idle condition for PSQ and WMMPSQ was met to prevent bug check code - // DPC_WATCHDOG_VIOLATION (133), added by Roger, 2013.08.05. - // - AsocEntry[i].bPowerSave = FALSE; - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - else - { - AsocEntry[i].PSIdleCunt = 0; - } - } - } - else - { - // 0.5 second. - if(TimeDifference > 500) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AsocEntry_AgeFunction() > 0.5 sec, %02X-%02X-%02X-%02X-%02X-%02X\n", AsocEntry[i].MacAddr[0], AsocEntry[i].MacAddr[1], AsocEntry[i].MacAddr[2], AsocEntry[i].MacAddr[3], AsocEntry[i].MacAddr[4], AsocEntry[i].MacAddr[5])); - - bFree = TRUE; - // Commented out by rcnjko, for it causes AP become disconnected when the only one STA is roaming. - //bNeedCheckLinkState = TRUE; - } - } - - if(bFree) - { - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - pMgntInfo->pCurrentSta = &(AsocEntry[i]); - DrvIFIndicateIncommingAssociationComplete(Adapter, unspec_reason); - } - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_RemoveStation\n")); - AsocEntry_RemoveStation(Adapter, AsocEntry[i].MacAddr); - } - } - } - - // Disable protection mode and Enable short slot time if an B-mode STA joined. - if(IS_WIRELESS_OFDM_24G(Adapter)) - { - // [Win7 Two Port Ext:N Def:G Collision Fixed by Acquire Protection IE on Ext] - // Plz Reference to AP_OnAsocReq, Demogen's law, 2009.07.22, by Bohn - // Do not update bUseProtection bit when G mode STA add or leave. 2010.11.24. by tynli. - - BOOLEAN bUseProtection = (nBModeStaCnt == 0)? FALSE: TRUE; - - ActUpdate_ProtectionMode(Adapter, bUseProtection); - if(nBModeStaCnt == 0) - pMgntInfo->mCap |= cShortSlotTime; - else - pMgntInfo->mCap &= (~cShortSlotTime); - - ActUpdate_mCapInfo(Adapter, pMgntInfo->mCap); - } - - // Update the Operation mode field in HT Info element. - if(IS_WIRELESS_MODE_N(Adapter)) - { - if(nLegacyStaCnt > 0) - { - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_MIXED; - } - else - { - if(CHNL_RUN_ABOVE_40MHZ(pMgntInfo) && (n20MHzStaCnt > 0)) - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_40MHZ_PROTECT; - else - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_NO_PROTECT; - - } - } - - // - // This setup the RTS rate set for rate adaptive in firmware. - // For the condition of the USE_PROTECTION bit is set in ERP IE, - // we shall set the RTS rate to 11b rate, else set all basic rate by default. - // Joseph, 20070131 - // - if( IS_WIRELESS_MODE_G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)) - { - if(pMgntInfo->bUseProtection) - { - OCTET_STRING osRateSet; - u1Byte RateSet[6] = { MGN_1M, MGN_2M, MGN_5_5M, MGN_11M,MGN_6M, MGN_9M }; - - //[Win7 Two Port TP IOT BroadCom Issue] when G-STA link to our Vwifi, we use protection, - // however, Default link to Broadcom can only accept OFDM ACK without CCK ones. 2009.07.30, by Bohn - if(pMgntInfo->IOTPeer == HT_IOT_PEER_BROADCOM) - { - FillOctetString(osRateSet, RateSet, 6); - } - else - { - FillOctetString(osRateSet, RateSet, 4); - } - FilterSupportRate(pMgntInfo->mBrates, &osRateSet, FALSE); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osRateSet); - } - else - { - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) ); - } - } - else - { - // Periodically update RTS rate to prevent the RTS rate > init data rate. 2010.11.24. by tynli. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)(&Adapter)); - } - - RT_TRACE(COMP_AP, DBG_TRACE, ("<== AsocEntry_AgeFunction()\n")); -} - - -VOID -AsocEntry_BecomeDisassoc( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry - ) -{ - PRT_TCB pTcb; - - // Return all packets queued for the STA. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - while( !RTIsListEmpty(&(pEntry->PsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->PsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - while( !RTIsListEmpty(&(pEntry->WmmPsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->WmmPsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - // Reset association state of the STA. - pEntry->bAssociated = FALSE; - -} - - -PRT_WLAN_STA -AsocEntry_EnumStation( - IN PADAPTER Adapter, - IN ULONG nIndex - ) -{ - ULONG i, nFound = 0; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA AsocEntry = pMgntInfo->AsocEntry; - - // - for (i=0; iMgntInfo); - BOOLEAN bUseRAMask = FALSE; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pMgntInfo->AsocEntry[i]); - - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_ResetEntry\n")); - - AsocEntry_ResetEntry(Adapter, pEntry); // This will free packets queued for this station. - pEntry->bUsed = FALSE; - pMgntInfo->AvailableAsocEntryNum++; - pMgntInfo->AvailableAIDTable[i] = 0xff; - } - - pMgntInfo->MaxMACID = 0; - pMgntInfo->AvailableAsocEntryNum = ASSOCIATE_ENTRY_NUM; - - - // Deregister all MacIDs created by this adpater ------------ - MacIdDeregisterForOwnerAdapter(Adapter); - // -------------------------------------------------- - - - //vivi mask this, use the next line instead of it - //DM_MultiSTA_InitGainChangeNotify_DISCONNECT - { // Temp fix need to fine tune later. - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - pHalData->DM_OutSrc.DM_DigTable.CurMultiSTAConnectState = DIG_MultiSTA_DISCONNECT; - } - - pMgntInfo->PowerSaveStationNum = 0; - - // Reinitialize rate table - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - if(!bUseRAMask) - { - Adapter->HalFunc.InitHalRATRTableHandler(Adapter); - } - -} - -VOID -AsocEntry_UpdateAsocInfo( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN pu1Byte Content, - IN u4Byte ContentLength, - IN ASOCENTRY_UPDATE_ASOC_INFO_ACTION Action - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA pEntry; - - pEntry = AsocEntry_GetEntry(pMgntInfo, StaAddr); - - //RT_ASSERT(pEntry != NULL, ("AsocEntry_UpdateAsocInfo(): corresponding STA entry not found.\n")); - - if(pEntry==NULL) - { - RT_TRACE(COMP_AP, DBG_WARNING, ("AsocEntry_UpdateAsocInfo(): Error occur!! AssocEntry may be reset.\n")); - return; - } - //RT_TRACE_F(COMP_AP, DBG_LOUD, ("Action = %d CpntentLen = %d\n", Action, ContentLength)); - //RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AsocEntry_UpdateAsocInfo(): Addr = ", StaAddr); - - switch(Action) - { - case ALLOCATE_ASOC_REQ: - { - if(pEntry->AP_RecvAsocReq == NULL) - { - PlatformAllocateMemory( - Adapter, - (PVOID *)&(pEntry->AP_RecvAsocReq), - 1024); - } - break; - } - case ALLOCATE_ASOC_RSP: - { - if(pEntry->AP_SendAsocResp == NULL) - { - PlatformAllocateMemory( - Adapter, - (PVOID *)&(pEntry->AP_SendAsocResp), - 1024); - } - break; - } - case ALLOCATE_ASOC_RSP_IE_FROM_OS: - { - if(pEntry->AP_AsocRspIEFromOS == NULL) - { - PlatformAllocateMemory( - Adapter, - (PVOID *)&(pEntry->AP_AsocRspIEFromOS), - 1024); - } - break; - } - case UPDATE_ASOC_REQ: - { - //RT_ASSERT(ContentLength <= 1024, - // ("AsocEntry_UpdateAsocInfo(): ContentLength greater than 1024.\n")); - if(ContentLength > 1024) - { - pEntry->AP_RecvAsocReqLength = 0; - break; - } - - if(pEntry->AP_RecvAsocReq) - { - PlatformMoveMemory( - pEntry->AP_RecvAsocReq, - Content, - ContentLength); - pEntry->AP_RecvAsocReqLength= ContentLength; - } - break; - } - case UPDATE_ASOC_RSP: - { - //RT_ASSERT(ContentLength <= 1024, - // ("AsocEntry_UpdateAsocInfo(): ContentLength greater than 1024.\n")); - //RT_TRACE_F(COMP_AP, DBG_LOUD, ("UPDATE_ASOC_RSP\n")); - //RT_PRINT_DATA(COMP_AP, DBG_LOUD, "UPDATE_ASOC_RSP Content:\n", Content, ContentLength); - if(ContentLength > 1024) - { - pEntry->AP_SendAsocRespLength = 0; - break; - } - - if(pEntry->AP_SendAsocResp) - { - PlatformMoveMemory( - pEntry->AP_SendAsocResp, - Content, - ContentLength); - pEntry->AP_SendAsocRespLength= ContentLength; - } - break; - } - case UPDATE_ASOC_RSP_IE_FROM_OS: - { - //RT_ASSERT(ContentLength <= 1024, - // ("AsocEntry_UpdateAsocInfo(): ContentLength greater than 1024.\n")); - if(ContentLength > 1024) - { - pEntry->AP_AsocRspIEFromOSLength= 0; - break; - } - - if(pEntry->AP_AsocRspIEFromOS) - { - PlatformMoveMemory( - pEntry->AP_AsocRspIEFromOS, - Content, - ContentLength); - pEntry->AP_AsocRspIEFromOSLength = ContentLength; - } - break; - } - case FREE_ASOC_REQ: - { - if(pEntry->AP_RecvAsocReq != NULL) - { - PlatformFreeMemory(pEntry->AP_RecvAsocReq, 1024); - pEntry->AP_RecvAsocReq = NULL; - } - else - RT_ASSERT(TRUE, ("AP_RecvAsocReq is NULL\n")); - - pEntry->AP_RecvAsocReqLength = 0; - break; - } - case FREE_ASOC_RSP: - { - if(pEntry->AP_SendAsocResp != NULL) - { - PlatformFreeMemory(pEntry->AP_SendAsocResp, 1024); - pEntry->AP_SendAsocResp = NULL; - } - else - RT_ASSERT(TRUE, ("AP_SendAsocResp is NULL\n")); - - pEntry->AP_SendAsocRespLength = 0; - break; - } - case FREE_ASOC_RSP_IE_FROM_OS: - { - if(pEntry->AP_AsocRspIEFromOS != NULL) - { - PlatformFreeMemory(pEntry->AP_AsocRspIEFromOS, 1024); - pEntry->AP_AsocRspIEFromOS = NULL; - } - else - RT_ASSERT(TRUE, ("AP_AsocRspIEFromOS is NULL\n")); - - pEntry->AP_AsocRspIEFromOSLength = 0; - break; - } - default: - break; - } - -} - - -u1Byte -AsocEntry_AssignAvailableAID( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr - ) -{ - u1Byte i =0; - - // ending - if(pMgntInfo->TestAID != 0) - { - if(pMgntInfo->TestAID <= ASSOCIATE_ENTRY_NUM) - pMgntInfo->AvailableAIDTable[pMgntInfo->TestAID-1] = AsocEntry_ComputeSum(MacAddr); - - return pMgntInfo->TestAID; - } - else - { - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - if(pMgntInfo->AvailableAIDTable[i] == 0xff) - { - pMgntInfo->AvailableAIDTable[i] = AsocEntry_ComputeSum(MacAddr); - //RT_TRACE(COMP_AP, DBG_LOUD, ("AsocEntry_AssignAvailableAID(): [%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x] MacID = \n", \ - //MacAddr[0], MacAddr[1], MacAddr[2], MacAddr[3], MacAddr[4], MacAddr[5])); - return i+1; - } - } - } - return 1; -} - - -VOID -AsocEntry_ResetAvailableAID( - IN PMGNT_INFO pMgntInfo, - IN u2Byte AID - ) -{ - if (AID > 0 && AID-1 < ASSOCIATE_ENTRY_NUM) - pMgntInfo->AvailableAIDTable[AID-1] = 0xff; - else - RT_TRACE(COMP_AP, DBG_LOUD, ("AsocEntry_ResetAvailableAID(): clear non-existing entry AID\n")); -} - - - - -// -// Description: Return all packet queued for power-save. -// Assumption: RT_TX_SPINLOCK is acquired. -// 2005.07.05, by rcnjko. -// -VOID -AP_PS_ReturnAllQueuedPackets( - IN PADAPTER Adapter, - IN BOOLEAN bMulticastOnly - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - int i; - PRT_WLAN_STA pEntry; - PRT_TCB pTcb; - - RT_ASSERT(IS_TX_LOCKED(Adapter) == TRUE, ("AP_PS_ReturnAllQueuedPackets(): bTxLocked(%x) should be TRUE\n!", Adapter->bTxLocked)); - - // Return all mcst/bcst packets queued. - while( !RTIsListEmpty(&(pMgntInfo->GroupPsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pMgntInfo->GroupPsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pMgntInfo->AsocEntry[i]); - - // Return all packets queued for the STA. - if(pEntry->bUsed) - { - while( !RTIsListEmpty(&(pEntry->PsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->PsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - while( !RTIsListEmpty(&(pEntry->WmmPsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->WmmPsQueue)); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - } - else - { - RT_ASSERT( RTIsListEmpty(&(pEntry->PsQueue)), ("AP_PS_ReturnAllQueuedPackets() bUsed==FALSE, but PsQueue is not empty!!!\n") ); - RT_ASSERT( RTIsListEmpty(&(pEntry->WmmPsQueue)), ("AP_PS_ReturnAllQueuedPackets() bUsed==FALSE, but WmmPsQueue is not empty!!!\n") ); - } - } -} - - -// -// Description: Update the power-save state of a STA and take proper response -// to the STA changing their power-save mode. -// 2005.07.05, by rcnjko. -// -PRT_WLAN_STA -AP_PS_UpdateStationPSState( - IN PADAPTER Adapter, - IN POCTET_STRING posFrame - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA pEntry; - BOOLEAN bPowerSave = (Frame_PwrMgt((*posFrame))==1) ? TRUE : FALSE; - RT_STATUS rtStatus; - - pEntry = AsocEntry_GetEntry(pMgntInfo, Frame_pTaddr((*posFrame))); - if(pEntry == NULL) - { - return NULL; - } - - if(!pEntry->bAssociated) - return NULL; - - - if(bPowerSave) - { // STA is power-save state. - // Reset the PS idle count because the STA is still sending PS packets. - pEntry->PSIdleCunt = 0; - if(!pEntry->bPowerSave) - { - // RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AP_PS_UpdateStationPSState(): Client enter to ps for addr = ", pEntry->MacAddr); - AP_CHNAGE_CLIENT_PS_STATE(Adapter, pEntry, TRUE); - -// -// Removed by Bruce, 2013-08-22. -// We should not disable HW queue directly when the client gets into PS mode, -// and we should consider the PS-Poll and WMM cases. -// -#if 0 //(MULTICHANNEL_SUPPORT == 1) - // For Win8 MultiChannel NdisTest (Trick): WFD_Concurrent_ext test: Disable GO/Client HW Queue ----- - if(Adapter == GetFirstGOPort(Adapter)) - { - MultiChannelDisableEnableExactHwQueue(Adapter, TRUE); - - if(GetFirstClientPort(Adapter) != NULL) - { - MultiChannelDisableEnableExactHwQueue(GetFirstClientPort(Adapter), TRUE); - } - - MultiChannelDumpHwQueueStatus(Adapter); - } - // ------------------------------------------------------------------------------------- -#endif - - // Because it's a 1st packet to notify ps mode, Mark sp as ended. - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - } - - if(IsQoSDataFrame(posFrame->Octet)) - { - BOOLEAN WmmSp = FALSE; - // Check the UP for this packet and the UAPSD info from the assoication. - switch( GET_QOS_CTRL_WMM_UP(posFrame->Octet) ) - { - case 0: - case 3: - WmmSp = GET_BE_UAPSD(pEntry->WmmStaQosInfo); - break; - case 1: - case 2: - WmmSp = GET_BK_UAPSD(pEntry->WmmStaQosInfo); - break; - case 4: - case 5: - WmmSp = GET_VI_UAPSD(pEntry->WmmStaQosInfo); - break; - case 6: - case 7: - WmmSp = GET_VO_UAPSD(pEntry->WmmStaQosInfo); - break; - } - - if(WmmSp && pEntry->WmmEosp == RT_STA_EOSP_STATE_ENDED) - { - PRT_TCB pTcb; - OCTET_STRING osMpdu; - BOOLEAN bSupportTxFeedback = FALSE; - - // Acquire the Tx Spin Lock to protect the variables in pEntry, - // because there are more than 1 functions reference these variables. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // Check if this chip supports per tx packet feedback. - bSupportTxFeedback = TxFeedbackCheckCurrentFunctionality(Adapter); - - if(!RTIsListEmpty(&pEntry->WmmPsQueue)) - { - // Send out all packets queued for the STA. - // RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AP_PS_UpdateStationPSState(): Send out all ps packets queued for WMM addr = ", pEntry->MacAddr); - while( !RTIsListEmpty(&pEntry->WmmPsQueue) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pEntry->WmmPsQueue); - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - // The service period is opened. - pEntry->WmmEosp = RT_STA_EOSP_STATE_OPENED; - - if(RTIsListEmpty(&(pEntry->WmmPsQueue))) - { - // If this is the final packet, set the EOSP bit. - // Note: - // There's a problem here that the final packet with EOSP may be sent twice in the air, because the Rx packet is processed slower than - // the these EOSP packets sent here. By Bruce, 2010-06-30. - pEntry->WmmEosp = bSupportTxFeedback ? RT_STA_EOSP_STATE_ENDING : RT_STA_EOSP_STATE_ENDED; // Mark this flag so that our AP cannot send UAPSD packets. - } - - - bSupportTxFeedback = TxFeedbackInstallTxFeedbackInfoForTcb(Adapter, pTcb); - - if(bSupportTxFeedback) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - (pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) ? RT_TX_FEEDBACK_ID_AP_WMM_PS_PKT : RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING, - Adapter, - Ap_PsTxFeedbackCallback, - (PVOID)pEntry - ); - } - else - { - bSupportTxFeedback = FALSE; - if(pEntry->WmmEosp == RT_STA_EOSP_STATE_ENDING) - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - } - - RT_TRACE_F(COMP_AP, DBG_LOUD, ("Send buffered data with WmmEOSP = %d\n", pEntry->WmmEosp)); - - // Set the more data if the EOSP ended so that notify the client we still queue packets. - SET_80211_HDR_MORE_DATA(osMpdu.Octet, (pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) ? 1 : 0); - SET_QOS_CTRL_WMM_EOSP(osMpdu.Octet, (pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) ? 0 : 1); - - rtStatus = TransmitTCB(Adapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List, GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - - // If this chip supports TxFeedback, we only sends one packet here and the other packets should be - // sent when this packet is transmitted completely. - if(bSupportTxFeedback) - break; - - // The SP is ended/ending. - if(pEntry->WmmEosp != RT_STA_EOSP_STATE_OPENED) - break; - } - } - else - { // WMM queue is empty, send QosNullFrame with EOSP. - PRT_TX_LOCAL_BUFFER pBuf; - - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructNullFunctionData( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pEntry->MacAddr, - TRUE, - GET_QOS_CTRL_WMM_UP(posFrame->Octet), - TRUE, - FALSE); - - if(TxFeedbackInstallTxFeedbackInfoForTcb(Adapter, pTcb)) - { - - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING, - Adapter, - Ap_PsTxFeedbackCallback, - (PVOID)pEntry - ); - - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDING; - } - - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->priority = GET_QOS_CTRL_WMM_UP(posFrame->Octet); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, Adapter->MgntInfo.LowestBasicRate); - - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AP_PS_UpdateStationPSState(): SendQosNull of EOSP for client = ", pEntry->MacAddr); - } - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - else if(WmmSp && pEntry->WmmEosp != RT_STA_EOSP_STATE_ENDED) - { - // RT_TRACE_F(COMP_AP, DBG_LOUD, ("[WARNING] pEntry->WmmEosp = %d, do nothing\n", pEntry->WmmEosp)); - } - } - } - else if(!bPowerSave && pEntry->bPowerSave) - { // STA is changing to active state. - PRT_TCB pTcb; - RT_LIST_ENTRY tmpList; - - // RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AP_PS_UpdateStationPSState(): Client leave ps for addr = ", pEntry->MacAddr); - - RTInitializeListHead(&tmpList); - - // Update the TIM -// AP_PS_FillTim(pMgntInfo); - AP_CHNAGE_CLIENT_PS_STATE(Adapter, pEntry, FALSE); - pEntry->WmmEosp = RT_STA_EOSP_STATE_OPENED; -// -// Removed by Bruce, 2013-08-22. -// We should not disable HW queue directly when the client gets into PS mode, -// and we should consider the PS-Poll and WMM cases. -// -#if 0 // (MULTICHANNEL_SUPPORT == 1) - // For Win8 MultiChannel NdisTest (Trick): WFD_Concurrent_ext test: Enable GO/Client HW Queue ----- - if(Adapter == GetFirstGOPort(Adapter)) - { - MultiChannelDisableEnableExactHwQueue(Adapter, FALSE); - - if(GetFirstClientPort(Adapter) != NULL) - { - MultiChannelDisableEnableExactHwQueue(GetFirstClientPort(Adapter), FALSE); - } - - MultiChannelDumpHwQueueStatus(Adapter); - } - // ------------------------------------------------------------------------------------- -#endif - - // Send out all packet queued for the STA. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - // - // We remove all TCBs from the PsQueue and insert into the tmp list to prevent that the TCBs may be recurcively - // inserted back into the PsQueue when the client enters and leaves PS mode frequently. - // By Bruce, 2010-06-02. - // - // Legacy - while(!RTIsListEmpty(&pEntry->PsQueue)) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pEntry->PsQueue); - RTInsertTailList(&tmpList, &(pTcb->List)); - } - // WMM - while(!RTIsListEmpty(&pEntry->WmmPsQueue)) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pEntry->WmmPsQueue); - RTInsertTailList(&tmpList, &(pTcb->List)); - } - // Group Packets - if(pMgntInfo->PowerSaveStationNum == 0) - { // No client is in the Power Save mode, so we send all multicast packets immediately. - while( !RTIsListEmpty(&(pMgntInfo->GroupPsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pMgntInfo->GroupPsQueue)); - RTInsertTailList(&tmpList, &(pTcb->List)); - } - } - while( !RTIsListEmpty(&tmpList)) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&tmpList); - - if(pMgntInfo->bAPTimExtend) - { - // - // We set the TIM to force the client to wake up no matter if the queue has the packets for this client. - // It's a workaround solution for the IPOD issue. - // - pEntry->FillTIMFlags = TRUE; - pEntry->FillTIM = TRUE; - } - rtStatus = TransmitTCB(Adapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - { - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List,GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - } - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - - return pEntry; -} - -// -// Description: Queue the packet to send if necessary, o.w. send it donw. -// Assuption: Tx spinlock is acquired. -// 2005.07.05, by rcnjko. -// -BOOLEAN -AP_PS_SendPacket( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte pRaddr; - - if( pTcb->ProtocolType==RT_PROTOCOL_802_3 ) - pRaddr = pTcb->BufferList[2].VirtualAddress; - else - pRaddr = pTcb->BufferList[0].VirtualAddress+4; - - if( !MacAddr_isMulticast(pRaddr) ) - { // Unicast. - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pRaddr); - - // Queue the unicast packet if dest STA is in power-save mode. - if(pEntry != NULL && pEntry->bPowerSave) - { - RTInsertTailList(&(pEntry->PsQueue), &(pTcb->List)); - return FALSE; - } - } - else - { // Bcst/Mcst. - - // Queue the Mcst/Bcst packet if one ore more STA is in power-save mode. - if(pMgntInfo->PowerSaveStationNum > 0) - { - RTInsertTailList(&(pMgntInfo->GroupPsQueue), &(pTcb->List)); - return FALSE; - } - } - pTcb->pAdapter = Adapter; - return NicIFSendPacket(Adapter, pTcb); -} - -// -// Description: Fill TIM according to current state. -// 2005.07.06, by rcnjko. -// -VOID -AP_PS_FillTim( - IN PMGNT_INFO pMgntInfo - ) -{ - PRT_WLAN_STA pEntry = NULL; - - if(pMgntInfo->PowerSaveStationNum == 0) - { - pMgntInfo->Tim.Octet = (u1Byte *)pMgntInfo->TimBuf; - - // DTIM Count. - pMgntInfo->Tim.Octet[0] = (u1Byte)pMgntInfo->mDtimCount; - // DTIM Period. - pMgntInfo->Tim.Octet[1] = (u1Byte)pMgntInfo->dot11DtimPeriod; - // Bitmap Control. - pMgntInfo->Tim.Octet[2] = 0; - // Partial Virtual Bitmap. - pMgntInfo->Tim.Octet[3] = 0; - - pMgntInfo->Tim.Length = 4; - } - else - { - int i; - int MaxAID=-1,MinAID=-1; - u1Byte ByteOffset,BitOffset,BeginByte,EndByte; - - PlatformFillMemory(pMgntInfo->TimBuf, 254, 0); - - // Set Virtual Bit Map for AID>0 (unicast). - for(i = 0;i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &pMgntInfo->AsocEntry[i]; - - // - // These are the conditions the AP mode shall assemble the the Partial Virtual Bitmap. - // (1) The entry is used and assoicated. - // (2) The station is on power save mode - // (3) (If any packet in any legacy qeue) - // (4) All queues are UAPSD, in this case, the AP shall assemble if any pakcet in the WMM queues. - // The P2P test plan 6.1.12 is corrected so our AP can set pvb bit for the sta in WMM UAPSD. - // Revised by Bruce, 2012-06-14. - // By Bruce, 2010-12-31. - // - // - if(pEntry->bUsed && pEntry->bAssociated && pEntry->bPowerSave && - (!RTIsListEmpty(&(pEntry->PsQueue)) || - (!RTIsListEmpty(&(pEntry->WmmPsQueue)) && ((pEntry->WmmStaQosInfo & 0xF) == 0xF)) || - pEntry->FillTIMFlags)) - { - // RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AP_PS_FillTim(): Fill Unicast TIM for addr = ", pEntry->MacAddr); - ByteOffset = pEntry->AID >> 3; - BitOffset = pEntry->AID % 8; - - pMgntInfo->TimBuf[3 + ByteOffset] |= (1<AID > MaxAID) - MaxAID = pEntry->AID; - - if(MinAID == -1 || pEntry->AID < MinAID) - MinAID = pEntry->AID; - - if(pEntry->FillTIM) - pEntry->FillTIM= FALSE; - else - pEntry->FillTIMFlags = FALSE; - } - } - - // Decide Bitmap offset. - if(MinAID == -1 || MaxAID == -1) - { - BeginByte = 0; - EndByte = 0; - } - else - { - BeginByte = ((MinAID>>4)<<1); - EndByte = (MaxAID>>3); - } - - // Fill up TIM IE. - pMgntInfo->Tim.Octet = (u1Byte *)(&pMgntInfo->TimBuf[BeginByte]); - - // DTIM Count. - pMgntInfo->Tim.Octet[0] = (u1Byte)pMgntInfo->mDtimCount; - // DTIM Period. - pMgntInfo->Tim.Octet[1] = (u1Byte)pMgntInfo->dot11DtimPeriod; - // Bitmap Control. - pMgntInfo->Tim.Octet[2] = BeginByte | - (RTIsListEmpty(&pMgntInfo->GroupPsQueue) ? 0 : 1); - - pMgntInfo->Tim.Length = 4 + (EndByte-BeginByte); - } -} - -// -// Description: Handle power-save poll. -// 2005.07.07, by rcnjko. -// -VOID -AP_PS_OnPSPoll( - IN PADAPTER Adapter, - IN OCTET_STRING osMpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte pSaddr = Frame_pSaddr(osMpdu); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pSaddr); - RT_STATUS rtStatus; - - if(pEntry == NULL) - return; - - // We don't handle ps-poll with PwrMgt==TRUE, because this case is handle in - // AP_PS_UpdateStationPSState() before. 2005.07.07, by rcnjko. - if(Frame_PwrMgt(osMpdu) == FALSE) - return; - - if( !RTIsListEmpty(&(pEntry->PsQueue)) ) - { - PRT_TCB pTcb; - OCTET_STRING osPsPacket; - - RT_PRINT_ADDR(COMP_POWER, DBG_LOUD, "AP_PS_OnPSPoll(): Receive PS=Poll from client = ", pEntry->MacAddr); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - pTcb = (PRT_TCB)RTRemoveHeadList(&(pEntry->PsQueue)); - FillOctetString(osPsPacket, GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - // Set MoreData bit if there is one ore more packets queued for the STA. - SET_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_REPLY_PS_POLL); - - if(!RTIsListEmpty(&(pEntry->PsQueue))) - { // There are still packets queued in the queue, set the more data bit. - SET_80211_HDR_MORE_DATA(osPsPacket.Octet, 1); - } - - rtStatus = TransmitTCB(Adapter, pTcb); - - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - { - // Insert it to tail of wait queue. - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List,GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - else - { - // - // Too many packets will be sent in air, and no test plan check this. - // - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - // Send Null Function Data to the Client, because we have no data buffered. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - //Add bQoS parameter for QoS Null by Isaiah 2006-07-31 - ConstructNullFunctionData( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pSaddr, - FALSE, - 0, - FALSE, - FALSE); - - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->priority = 0; - SET_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_REPLY_PS_POLL); - - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, pMgntInfo->LowestBasicRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } -} - -// -// Description: Forward the incoming packet to another STA assocated. -// Output: FALSE if we failed to forward it. -// 2005.06.02, by rcnjko. -// -BOOLEAN -AP_ForwardPacketWithFromDS( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN BOOLEAN bNeedCopy - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING mpdu; - BOOLEAN bResult = FALSE; - PRT_TCB pTcb = NULL; - - s4Byte maxMpduSizeToForward; - maxMpduSizeToForward= (Adapter->MAX_TRANSMIT_BUFFER_SIZE - ENCRYPTION_MAX_OVERHEAD - Adapter->TXPacketShiftBytes); - - FillOctetString(mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // Note!, we should check buffer length before copy and forward it. - if(mpdu.Length > maxMpduSizeToForward) - { - // We cannot forward this packet because the mpdu recived is large than - // our transmit buffer size. 2005.06.03, by rcnjko. - return FALSE; - } - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // Set up TCB and its buffer. - if(bNeedCopy == FALSE) - { // case 1: Reuse the buffer in RFD. - - if(!RTIsListEmpty(GET_TCB_IDLE_QUEUE(Adapter))) - { - pTcb = (PRT_TCB)RTRemoveHeadListWithCnt(GET_TCB_IDLE_QUEUE(Adapter), Get_NUM_IDLE_TCB(Adapter)); - - // Set up TCB. - pTcb->BufferList[0].VirtualAddress = pRfd->Buffer.VirtualAddress; - pTcb->BufferList[0].PhysicalAddressHigh = pRfd->Buffer.PhysicalAddressHigh; - pTcb->BufferList[0].PhysicalAddressLow = pRfd->Buffer.PhysicalAddressLow; - - // Get shifted bytes of Starting address of 802.11 header. 2006.09.28, by Emily - pTcb->BufferList[0].PhysicalAddressLow +=Adapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd); - pTcb->BufferList[0].Length = pRfd->PacketLength; - pTcb->PacketLength = pRfd->PacketLength; - pTcb->BufferCount = 1; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->SpecifiedQueueID = (IsQoSDataFrame(mpdu.Octet)?Frame_QoSTID(mpdu, sMacHdrLng):0); - pTcb->priority = (IsQoSDataFrame(mpdu.Octet)?Frame_QoSTID(mpdu, sMacHdrLng):0); - pTcb->FragCount=1; - - pTcb->BufferType = RT_TCB_BUFFER_TYPE_RFD; - pTcb->Reserved = pRfd; - pTcb->bInsert8BytesForEarlyMode=FALSE; - bResult = TRUE; - } - else - { // No TCB available now. - RT_TRACE(COMP_INIT, DBG_LOUD, ("AP_ForwardPacketWithFromDS(): Out of TCB !!!\n")); - } - } - else - { // case 2: Get a local buffer to forwarding the packet. - - PRT_TX_LOCAL_BUFFER pBuf; - - u2Byte Packetleng; - OCTET_STRING mpduTcb; - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - // Copy the incoming frame to local buffer. - if( IsQoSDataFrame(mpdu.Octet ) && MacAddr_isMulticast(Frame_pDaddr(mpdu))) - { // we need to remove Qos fild for muticast - pu1Byte pOrData = pBuf->Buffer.VirtualAddress; - pu1Byte pDsData = mpdu.Octet; - - // Copy Head !! - PlatformMoveMemory( pOrData , pDsData , sMacHdrLng ); - pOrData = pOrData + sMacHdrLng ; - pDsData = pDsData + sMacHdrLng + sQoSCtlLng ; - - // Copy payload !! - PlatformMoveMemory(pOrData , pDsData , ( mpdu.Length - sMacHdrLng - sQoSCtlLng ) ); - - // Clear Qos bite !! - SET_80211_HDR_QOS_EN( pBuf->Buffer.VirtualAddress , 0 ); - - // Set Packet Length - Packetleng = pRfd->PacketLength - sQoSCtlLng; - } - else - { - - PlatformMoveMemory(pBuf->Buffer.VirtualAddress, mpdu.Octet, mpdu.Length); - - Packetleng = pRfd->PacketLength; - } - - FillOctetString(mpduTcb , pBuf->Buffer.VirtualAddress , Packetleng); - - // Set up TCB. - pTcb->BufferList[0] = pBuf->Buffer; - pTcb->BufferList[0].Length = Packetleng; //pRfd->PacketLength; - pTcb->PacketLength = Packetleng; //pRfd->PacketLength; - pTcb->BufferCount = 1; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType =RT_PROTOCOL_802_11; - pTcb->SpecifiedQueueID = (IsQoSDataFrame(mpduTcb.Octet)?Frame_QoSTID(mpduTcb, sMacHdrLng):0); - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->FragCount=1; - - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->Reserved = pBuf; - pTcb->bInsert8BytesForEarlyMode=FALSE; - - bResult = TRUE; - } - else - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_ForwardPacketWithFromDS(): MgntGetBuffer() return FALSE!!!\n")); - } - } - - if(bResult) - { - u1Byte SrcAddr[6]; - u1Byte DstAddr[6]; - pu1Byte pHeader = NULL; - - // Back up SA/DA addresses. - PlatformMoveMemory(SrcAddr, Frame_pSaddr(mpdu), 6); - PlatformMoveMemory(DstAddr, Frame_pDaddr(mpdu), 6); - //RT_TRACE(COMP_INIT, DBG_LOUD, (">>>------------------------------------\n")); - //RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, ("DA"), DstAddr); - //RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, ("BSSID"), pMgntInfo->Bssid); - //RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, ("SA"), SrcAddr); - //RT_TRACE(COMP_INIT, DBG_LOUD, ("<<<------------------------------------\n")); - pHeader = pTcb->BufferList[0].VirtualAddress; - - // Clear Flag - SET_80211_HDR_MORE_FRAG(pHeader, 0); - SET_80211_HDR_RETRY(pHeader, 0); - SET_80211_HDR_PWR_MGNT(pHeader, 0); - SET_80211_HDR_MORE_DATA(pHeader, 0); - SET_80211_HDR_WEP(pHeader, 0); - SET_80211_HDR_ORDER(pHeader, 0); - - // Change addresses (DA/BSSID/SA). - SET_80211_HDR_ADDRESS1(pHeader, DstAddr); // DA - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid);// BSSID - SET_80211_HDR_ADDRESS3(pHeader, SrcAddr);// SA - - // Changge FrDs/ToDs in Frame Control field. - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_TO_DS(pHeader, 0); - - // Duration and Sequence control will be set up in TransmitTcb(). - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - //RT_PRINT_DATA(COMP_INIT, DBG_LOUD, ("Header \n"), pHeader, 32); - // Forward it. - // AP_PS_SendPacket() will queue the packet to send in proper queue - // if necessary, 2005.07.05, by rcnjko. - pTcb->pAdapter = Adapter; - NicIFSendPacket(Adapter, pTcb); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - return bResult; -} - - -// -// Description: -// Translate and forward the packet received from WDS AP to STA associated. -// 2006.06.11, by rcnjko. -// -BOOLEAN -AP_FromWdsToBss( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN BOOLEAN bNeedCopy - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING mpdu; - BOOLEAN bResult = FALSE; - PRT_TCB pTcb = NULL; - u2Byte WdsFrameHdrLng; - u2Byte BssFrameHdrLng; - - s4Byte maxMpduSizeToForward; - maxMpduSizeToForward = (Adapter->MAX_TRANSMIT_BUFFER_SIZE - ENCRYPTION_MAX_OVERHEAD - Adapter->TXPacketShiftBytes); - - FillOctetString(mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // Note!, we should check buffer length before copy and forward it. - if(mpdu.Length > maxMpduSizeToForward) - { - // We cannot forward this packet because the mpdu recived is larger than - // our transmit buffer size. - return bResult; - } - - // Consider WDS frame with Security/QoS case. - WdsFrameHdrLng = Frame_FrameHdrLng(mpdu); - - // TODO: consider per-STA encryption algorithm and QoS. - BssFrameHdrLng = sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(bNeedCopy == FALSE) - { // case 1: Reuse the buffer in RFD. - // - // Note that, in this case: - // pTcb->BufferList[0]: 802.11 Header without Addr4 (including QoS and Security), - // which references to pTcb->Header[0]. - // pTcb->BufferList[1]: 802.11 frame body (begine with LLC), - // which reuses pRfd->Buffer with proper offset. - // 2006.06.11, by rcnjko. - // - - if(!RTIsListEmpty(GET_TCB_IDLE_QUEUE(Adapter))) - { - pTcb = (PRT_TCB)RTRemoveHeadList(GET_TCB_IDLE_QUEUE(Adapter)); - - // Set up TCB. - pTcb->Header[0].Length = BssFrameHdrLng; - pTcb->BufferList[0] = pTcb->Header[0]; - - pTcb->BufferList[1].VirtualAddress = (pRfd->Buffer.VirtualAddress + WdsFrameHdrLng); - pTcb->BufferList[1].Length = (pRfd->PacketLength - WdsFrameHdrLng); - - pTcb->PacketLength = pTcb->BufferList[0].Length + pTcb->BufferList[1].Length; - pTcb->BufferCount = 2; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->SpecifiedQueueID = LOW_QUEUE; - pTcb->FragCount = 1; - - pTcb->BufferType = RT_TCB_BUFFER_TYPE_RFD; - pTcb->Reserved = pRfd; - pTcb->bInsert8BytesForEarlyMode=FALSE; - bResult = TRUE; - } - else - { // No TCB available now. - RT_TRACE(COMP_AP, DBG_WARNING, ("AP_FromWdsToBss(): Out of TCB !!!\n")); - } - } - else - { // case 2: Get a local buffer to forwarding the packet. - - PRT_TX_LOCAL_BUFFER pBuf; - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - // Copy the incoming frame to local buffer with proper offset. - PlatformMoveMemory( - pBuf->Buffer.VirtualAddress + BssFrameHdrLng, - mpdu.Octet + WdsFrameHdrLng, - mpdu.Length - WdsFrameHdrLng); - - // Set up TCB. - pTcb->BufferList[0] = pBuf->Buffer; - pTcb->BufferList[0].Length = (pRfd->PacketLength + BssFrameHdrLng - WdsFrameHdrLng); - - pTcb->PacketLength = pTcb->BufferList[0].Length; - pTcb->BufferCount = 1; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType =RT_PROTOCOL_802_11; - pTcb->SpecifiedQueueID = LOW_QUEUE; - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->FragCount=1; - - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->Reserved = pBuf; - - bResult = TRUE; - } - else - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_FromWdsToBss(): MgntGetBuffer() return FALSE!!!\n")); - } - } - - if(bResult) - { - u1Byte SrcAddr[6]; - u1Byte DstAddr[6]; - pu1Byte pHeader = NULL; - - // Back up SA/DA addresses. - PlatformMoveMemory(SrcAddr, Frame_pSaddr(mpdu), 6); - PlatformMoveMemory(DstAddr, Frame_pDaddr(mpdu), 6); - - pHeader = pTcb->BufferList[0].VirtualAddress; - - // Clear Flag - SET_80211_HDR_MORE_FRAG(pHeader, 0); - SET_80211_HDR_RETRY(pHeader, 0); - SET_80211_HDR_PWR_MGNT(pHeader, 0); - SET_80211_HDR_MORE_DATA(pHeader, 0); - SET_80211_HDR_WEP(pHeader, 0); - SET_80211_HDR_ORDER(pHeader, 0); - - // Frame Control field. - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); // clear all flags before set - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_FROM_DS(pHeader, 1); - - // Change addresses (DA/BSSID/SA). - SET_80211_HDR_ADDRESS1(pHeader, DstAddr); // DA - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid); // BSSID - SET_80211_HDR_ADDRESS3(pHeader, SrcAddr); // SA - - // Duration and Sequence control will be set up in TransmitTcb(). - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - RT_PRINT_DATA(COMP_AP, DBG_TRACE, ("AP_FromWdsToBss(): "), pTcb->BufferList[0].VirtualAddress, pTcb->BufferList[0].Length); - - // Forward it. - // AP_PS_SendPacket() will queue the packet to send in proper queue - // if necessary, 2005.07.05, by rcnjko. - pTcb->pAdapter = Adapter; - NicIFSendPacket(Adapter, pTcb); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - return bResult; -} - -// -// Description: -// Translate and forward the packet received from STA associated to WDS AP. -// 2006.06.11, by rcnjko. -// -BOOLEAN -AP_FromBssToWds( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN BOOLEAN bNeedCopy - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING mpdu; - BOOLEAN bResult = FALSE; - PRT_TCB pTcb = NULL; - u2Byte WdsFrameHdrLng; - u2Byte BssFrameHdrLng; - - s4Byte maxMpduSizeToForward; - maxMpduSizeToForward = (Adapter->MAX_TRANSMIT_BUFFER_SIZE - ENCRYPTION_MAX_OVERHEAD - Adapter->TXPacketShiftBytes); - - FillOctetString(mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // Note!, we should check buffer length before copy and forward it. - if(mpdu.Length > maxMpduSizeToForward) - { - // We cannot forward this packet because the mpdu recived is larger than - // our transmit buffer size. - return bResult; - } - - // Consider WDS frame with Security/QoS case. - WdsFrameHdrLng = 30; - - // TODO: consider per-STA encryption algorithm. - BssFrameHdrLng = Frame_FrameHdrLng(mpdu) + pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(bNeedCopy == FALSE) - { // case 1: Reuse the buffer in RFD. - // - // Note that, in this case: - // pTcb->BufferList[0]: 802.11 Header with Addr4 (including QoS and Security), - // which references to pTcb->Header[0]. - // pTcb->BufferList[1]: 802.11 frame body (begine with LLC), - // which reuses pRfd->Buffer with proper offset. - // 2006.06.11, by rcnjko. - // - - if(!RTIsListEmpty(GET_TCB_IDLE_QUEUE(Adapter))) - { - pTcb = (PRT_TCB)RTRemoveHeadList(GET_TCB_IDLE_QUEUE(Adapter)); - - // Set up TCB. - pTcb->Header[0].Length = WdsFrameHdrLng; - pTcb->BufferList[0] = pTcb->Header[0]; - - pTcb->BufferList[1].VirtualAddress = (pRfd->Buffer.VirtualAddress + BssFrameHdrLng); - pTcb->BufferList[1].Length = (pRfd->PacketLength - BssFrameHdrLng); - - pTcb->PacketLength = pTcb->BufferList[0].Length + pTcb->BufferList[1].Length; - pTcb->BufferCount = 2; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->SpecifiedQueueID = LOW_QUEUE; - pTcb->FragCount = 1; - - pTcb->BufferType = RT_TCB_BUFFER_TYPE_RFD; - pTcb->Reserved = pRfd; - pTcb->bInsert8BytesForEarlyMode=FALSE; - bResult = TRUE; - } - else - { // No TCB available now. - RT_TRACE(COMP_AP, DBG_WARNING, ("AP_FromBssToWds(): Out of TCB !!!\n")); - } - } - else - { // case 2: Get a local buffer to forwarding the packet. - - PRT_TX_LOCAL_BUFFER pBuf; - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - // Copy the incoming frame to local buffer with proper offset. - PlatformMoveMemory( - pBuf->Buffer.VirtualAddress + WdsFrameHdrLng, - mpdu.Octet + BssFrameHdrLng, - mpdu.Length - BssFrameHdrLng); - - // Set up TCB. - pTcb->BufferList[0] = pBuf->Buffer; - pTcb->BufferList[0].Length = (pRfd->PacketLength + WdsFrameHdrLng - BssFrameHdrLng); - - pTcb->PacketLength = pTcb->BufferList[0].Length; - pTcb->BufferCount = 1; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->SpecifiedQueueID = LOW_QUEUE; - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->FragCount = 1; - - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->Reserved = pBuf; - - bResult = TRUE; - } - else - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_FromBssToWds(): MgntGetBuffer() return FALSE!!!\n")); - } - } - - if(bResult) - { - u1Byte SrcAddr[6]; - u1Byte DstAddr[6]; - pu1Byte pHeader; - - // Back up SA/DA addresses. - PlatformMoveMemory(SrcAddr, Frame_pSaddr(mpdu), 6); - PlatformMoveMemory(DstAddr, Frame_pDaddr(mpdu), 6); - - pHeader = pTcb->BufferList[0].VirtualAddress; - - // Frame Control field. - // Clear Flag - SET_80211_HDR_MORE_FRAG(pHeader, 0); - SET_80211_HDR_RETRY(pHeader, 0); - SET_80211_HDR_PWR_MGNT(pHeader, 0); - SET_80211_HDR_MORE_DATA(pHeader, 0); - SET_80211_HDR_WEP(pHeader, 0); - SET_80211_HDR_ORDER(pHeader, 0); - - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); // clear all flags before set - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_TO_DS(pHeader, 1); - - // Change addresses (RA/TA/DA/SA). - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->WdsApAddr); // RA - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid); // TA - SET_80211_HDR_ADDRESS3(pHeader, DstAddr); // DA - SET_80211_HDR_ADDRESS4(pHeader, SrcAddr); // SA - - // Duration and Sequence control will be set up in TransmitTcb(). - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - RT_PRINT_DATA(COMP_AP, DBG_TRACE, ("AP_FromBssToWds(): "), pTcb->BufferList[0].VirtualAddress, pTcb->BufferList[0].Length); - - // Forward it. - // AP_PS_SendPacket() will queue the packet to send in proper queue - // if necessary, 2005.07.05, by rcnjko. - pTcb->pAdapter = Adapter; - NicIFSendPacket(Adapter, pTcb); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - return bResult; -} - -// -// Description: -// Translate header or send packet to to WDS. -// -// Assumption: -// 1. We are in AP mode and WDS is enabled. -// 2. pTcb contains 802.11 Data frame from us. -// 3. TX spinlock is acquired. -// 4. Usage of pTcb->BufferList[]: -// pTcb->BufferList[0]: 802.11 header (including QoS and Security header). -// pTcb->BufferList[1]: LLC. -// pTcb->BufferList[2-n]: frame body (starting from TypeLength). -// -// 2006.06.11, by rcnjko. -// -VOID -AP_LocalToWds( - IN PADAPTER Adapter, - IN PRT_TCB pTcbSrc, - IN BOOLEAN bCopyAndForward - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcbToWds = NULL; - - // - // Set up pTcbToWds. - // - if(bCopyAndForward == FALSE) - { - pTcbToWds = pTcbSrc; - - // Change 802.11 header length and related. - // Consider WDS frame with Security/QoS case. - pTcbToWds->PacketLength -= pTcbToWds->BufferList[0].Length; - pTcbToWds->BufferList[0].Length = 30; - pTcbToWds->PacketLength += pTcbToWds->BufferList[0].Length; - } - else - { // Copy frame to local buffer. - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte idx; - u4Byte BytesCopied; - - if(MgntGetBuffer(Adapter, &pTcbToWds, &pBuf)) - { - // Copy the incoming frame to local buffer with proper offset. - // Consider WDS frame with Security/QoS case. - BytesCopied = 30; - for(idx = 1; idx < pTcbSrc->BufferCount; idx++) - { - PlatformMoveMemory( - pBuf->Buffer.VirtualAddress + BytesCopied, - pTcbSrc->BufferList[idx].VirtualAddress, - pTcbSrc->BufferList[idx].Length); - - BytesCopied += pTcbSrc->BufferList[idx].Length; - } - - // Set up TCB. - pTcbToWds->BufferList[0] = pBuf->Buffer; - pTcbToWds->BufferList[0].Length = BytesCopied; - - pTcbToWds->PacketLength = pTcbToWds->BufferList[0].Length; - pTcbToWds->BufferCount = 1; - pTcbToWds->Tailer.Length = 0; - pTcbToWds->ProtocolType = RT_PROTOCOL_802_11; - pTcbToWds->SpecifiedQueueID = LOW_QUEUE; - pTcbToWds->DataRate = UNSPECIFIED_DATA_RATE; - pTcbToWds->FragCount = 1; - - pTcbToWds->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcbToWds->Reserved = pBuf; - - PlatformMoveMemory( pTcbToWds->DestinationAddress, pTcbSrc->DestinationAddress, 6 ); // DA - PlatformMoveMemory( pTcbToWds->SourceAddress, pTcbSrc->SourceAddress, 6 ); // SA - } - else - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_LocalToWds(): MgntGetBuffer() return FALSE!!!\n")); - } - } - - if(pTcbToWds != NULL) - { - pu1Byte pHeader; - - // - // Translate header. - // - pHeader = pTcbToWds->BufferList[0].VirtualAddress; - - // Clear Flag - SET_80211_HDR_MORE_FRAG(pHeader, 0); - SET_80211_HDR_RETRY(pHeader, 0); - SET_80211_HDR_PWR_MGNT(pHeader, 0); - SET_80211_HDR_MORE_DATA(pHeader, 0); - SET_80211_HDR_WEP(pHeader, 0); - SET_80211_HDR_ORDER(pHeader, 0); - - // Frame Control field. - SET_80211_HDR_FRAME_CONTROL(pHeader, 0);// clear all flags before set - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_TO_DS(pHeader, 1); - - // Change addresses (RA/TA/DA/SA). - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->WdsApAddr); - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS3(pHeader, pTcbToWds->DestinationAddress); - SET_80211_HDR_ADDRESS4(pHeader, pTcbToWds->SourceAddress); - - // Duration and Sequence control will be set up in TransmitTcb(). - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - RT_PRINT_DATA(COMP_AP, DBG_TRACE, ("AP_LocalToWds(): "), pTcbToWds->BufferList[0].VirtualAddress, pTcbToWds->BufferList[0].Length); - - // - // Forward it if required. - // - if(bCopyAndForward) - { - // Forward it. - // AP_PS_SendPacket() will queue the packet to send in proper queue - // if necessary, 2005.07.05, by rcnjko. - pTcbToWds->pAdapter = Adapter; - NicIFSendPacket(Adapter, pTcbToWds); - } - } - -} - -// -// Description: -// Dispatch the data frame to WDS if necessary. -// -// Assumption: -// 1. We are in AP mode and WDS is enabled. -// 2. pTcb contains 802.11 Data frame from us. -// 3. TX spinlock is acquired. -// -// 2006.06.11, by rcnjko. -// -VOID -AP_WdsTx( - IN PADAPTER Adapter, - IN PRT_TCB pTcb) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if(MacAddr_isMulticast(pTcb->DestinationAddress)) - { // Mcst/Bcst destination => forward one copy to WDS AP. - AP_LocalToWds(Adapter, pTcb, TRUE); - } - else - { // unicast destination. - - if(!AsocEntry_IsStationAssociated(pMgntInfo, pTcb->DestinationAddress)) - { // Translate 802.11 header for WDS for unicast destination not in the BSS. - AP_LocalToWds(Adapter, pTcb, FALSE); - } - } -} - - -// -// Description: Handle incoming Authentication frames with odd arSeq. -// Output: Return TRUE if we will response the incoming auth frame, FALSE o.w.. -// -// 2005.06.01, by rcnjko. -// -BOOLEAN -AP_OnAuthOdd( - IN PADAPTER Adapter, - IN OCTET_STRING authpdu) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte AuthStatusCode; - OCTET_STRING AuthChallengetext; - pu1Byte arSta; - AUTH_ALGORITHM arAlg; - u2Byte arSeq; - u4Byte idx; - BOOLEAN allowed; - PRT_WLAN_STA pEntry = NULL; - BOOLEAN bDuplicateAuth = FALSE; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===>AP_OnAuthOdd()\n")); - if(!pDefaultAdapter->bInHctTest && pDefMgntInfo->Regbcndelay) - { - if( pMgntInfo->bDelayApBeaconMode == TRUE ) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Stop beacon and reject Auth\n")); - - return FALSE; - } - } - // Check Bssid. - if( PlatformCompareMemory( pMgntInfo->Bssid, Frame_Addr3( authpdu ), 6 ) != 0 ) - { - return FALSE; - } - - if(pMgntInfo->LockType == MAC_FILTER_ACCEPT) - { - if( pMgntInfo->LockedSTACount != 0 ) - { - allowed = FALSE; - for( idx=0; idxLockedSTACount; idx++ ) - { - if( eqMacAddr(pMgntInfo->LockedSTAList[idx], Frame_Addr2(authpdu)) ) - { - RT_PRINT_ADDR( COMP_AP, DBG_LOUD, ("Mached Locked STA Address"), pMgntInfo->LockedSTAList[idx] ); - allowed = TRUE; - break; - } - } - - if( !allowed ) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): unknow STA MAC address!\n") ); - return FALSE; - } - } - else if(pMgntInfo->bDefaultPermited) - { - allowed = TRUE; - } - else - return FALSE; - } - else if(pMgntInfo->LockType == MAC_FILTER_REJECT) - { - if( pMgntInfo->LockedSTACount_Reject!= 0 ) - { - allowed = TRUE; - for( idx=0; idxLockedSTACount_Reject; idx++ ) - { - if( eqMacAddr(pMgntInfo->LockedSTAList_Reject[idx], Frame_Addr2(authpdu)) ) - { - RT_PRINT_ADDR( COMP_AP, DBG_LOUD, ("Mached Locked STA Address"), pMgntInfo->LockedSTAList_Reject[idx] ); - allowed = FALSE; - break; - } - } - - if( !allowed ) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): Reject this STA MAC address!\n") ); - return FALSE; - } - } - else if(!pMgntInfo->bDefaultPermited) - { - return FALSE; - } - } - else if(pMgntInfo->LockType == MAC_FILTER_LOCK) - { - if( pMgntInfo->LockedSTACount != 0 ) - { - allowed = FALSE; - - for( idx=0; idxLockedSTACount; idx++ ) - { - if( eqMacAddr(pMgntInfo->LockedSTAList[idx], Frame_Addr2(authpdu)) ) - { - RT_PRINT_ADDR( COMP_AP, DBG_LOUD, ("Mached Locked STA Address"), pMgntInfo->LockedSTAList[idx] ); - allowed = TRUE; - break; - } - } - - if( !allowed ) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): unknow STA MAC address!\n") ); - return FALSE; - } - } - } - -#if 1 //Added by Jay 0713 for processing integrity failure - - // Refuse all Authentication Requests within 60 sec after Integrity Failure event happened - if(pMgntInfo->globalKeyInfo.TimeSlot_IntegrityFail2 != 0 && - pMgntInfo->globalKeyInfo.CurrentTimeSlot < pMgntInfo->globalKeyInfo.TimeSlot_IntegrityFail2 + 60) - { - return FALSE; - } -#endif - - // Initialize default value for Auth to resonse. - AuthStatusCode = StatusCode_Unspecified_failure; - FillOctetString(AuthChallengetext, NULL, 0); - - // Gather information from incoming Auth frame. - arSta = Frame_Addr2(authpdu); - arAlg = (AUTH_ALGORITHM)Frame_AuthAlgorithmNum(authpdu); - arSeq = Frame_AuthTransactionSeqNum(authpdu); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("AP_OnAuthOdd(): STA: %2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x\n", arSta[0], arSta[1], arSta[2], arSta[3], arSta[4], arSta[5])); - - // Classify with arSeq. - switch(arSeq) - { - case 1: - // Classify with arAlg. - switch(arAlg) - { - case OPEN_SYSTEM: - { - pEntry = AsocEntry_GetEntry(pMgntInfo, arSta); - if(pEntry != NULL) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): pEntry != NULL\n") ); - if(pEntry->bAssociated) - { - - // - // We should complete all SendNBLs before NDIS_STATUS_DOT11_DISASSOCIATION status is indicated - // to prevent MiniportReturnNetBufferLists routine will be called in the same thread context and Rx deadlock in N6PciReturnNetBufferLists - // routine might cause bug check code DPC_WATCHDOG_VIOLATION (133). - // 2013.06.26. - // - AsocEntry_BecomeDisassoc(Adapter, pEntry); - MacIdDeregisterSpecificMacId(Adapter, pEntry->AssociatedMacId); - - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): pEntry->bAssociated\n") ); - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX) - { - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, pEntry->MacAddr, 6); - DrvIFIndicateDisassociation(Adapter, unspec_reason, pEntry->MacAddr); - } - else if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - AuthStatusCode = StatusCode_success; - pMgntInfo->pCurrentSta = pEntry; - DrvIFIndicateDisassociation(Adapter, unspec_reason, pEntry->MacAddr); - } - } - else if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - bDuplicateAuth = TRUE; - AuthStatusCode = StatusCode_success; - pMgntInfo->pCurrentSta = pEntry; - DrvIFIndicateIncommingAssociationComplete(Adapter, unspec_reason); - } - - if(!bDuplicateAuth) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): AsocEntry_RemoveStation\n") ); - AsocEntry_RemoveStation(Adapter, arSta); - } - } - - if(!bDuplicateAuth) - { - if(!AsocEntry_AddStation(Adapter, arSta, arAlg)) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): StatusCode_assoc_deniedbyap\n") ); - AuthStatusCode = StatusCode_assoc_deniedbyap; - break; - } - } - - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeAutoSwitch || - pMgntInfo->AuthReq_auAlg == OPEN_SYSTEM) - { - if(!bDuplicateAuth) - pEntry = AsocEntry_GetEntry(pMgntInfo, arSta); - - pEntry->AuthPassSeq = 2; - AuthStatusCode = StatusCode_success; - } - else - { - AuthStatusCode = StatusCode_notsupport_authalg; - } - } - break; - - case SHARED_KEY: - { - pEntry = AsocEntry_GetEntry(pMgntInfo, arSta); - if(pEntry != NULL) - { - if(pEntry->bAssociated) - { - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX) - { - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, pEntry->MacAddr, 6); - DrvIFIndicateDisassociation(Adapter, unspec_reason, pEntry->MacAddr); - } - else if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - // TODO: WIN7 - } - } - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_RemoveStation case 2\n")); - - AsocEntry_RemoveStation(Adapter, arSta); - } - - if(!AsocEntry_AddStation(Adapter, arSta, arAlg)) - { - AuthStatusCode = StatusCode_assoc_deniedbyap; - break; - } - - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeAutoSwitch || - pMgntInfo->AuthReq_auAlg == SHARED_KEY) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, arSta); - - pEntry->AuthPassSeq = 2; - - // We shall keep challenge text in each STA, and randomize them. - FillOctetString(AuthChallengetext, pMgntInfo->arChalng, 128); - AuthStatusCode = StatusCode_success; - } - else - { - AuthStatusCode = StatusCode_notsupport_authalg; - } - } - break; - - default: - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): Illegal AuthAlg: %d for AuthSeq: %d !!!\n", arAlg, arSeq)); - AuthStatusCode = StatusCode_notsupport_authalg; - break; - } - break; - - case 3: - { - if( arAlg == SHARED_KEY && - (pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeAutoSwitch || - pMgntInfo->AuthReq_auAlg == SHARED_KEY) ) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, arSta); - - if(pEntry != NULL) - { - if( pEntry->bAssociated == FALSE && pEntry->AuthAlg == SHARED_KEY && pEntry->AuthPassSeq == 2 ) - { - OCTET_STRING OurCText, PeerCText; - - FillOctetString(OurCText, pMgntInfo->arChalng, 128); - PeerCText = PacketGetElement(authpdu, EID_Ctext, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - // Compare the challenge text. - if(EqualOS( OurCText, PeerCText)) - { // Matched. - pEntry->AuthPassSeq = 4; - AsocEntry_UpdateTimeStamp(pEntry); - - AuthStatusCode = StatusCode_success; - } - else - { // Challenge text is not matched. - AuthStatusCode = StatusCode_challenge_failure; - } - } - else - { - // The authentication/association state of the STA is not as expected. - AuthStatusCode = StatusCode_Unspecified_failure; - } - } - else - { - // Cannot find the STA in the table => Sequence number illegal. - AuthStatusCode = StatusCode_error_seqnum; - } - } - else - { - // arAlg != SHARED_KEY or We don't support SA now => Sequence number illegal. - AuthStatusCode = StatusCode_error_seqnum; - } - } - break; - - default: - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): Illegal auth sequence number: %d !!!\n", arSeq)); - AuthStatusCode = StatusCode_error_seqnum; - break; - } - - // Remove association entry of the STA if AuthStatusCode is not successful. - if(AuthStatusCode != StatusCode_success) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): Remove association entry of the STA if AuthStatusCode is not successful. \n") ); - AsocEntry_RemoveStation(Adapter, arSta); - } - - // Send auth frame. - SendAuthenticatePacket( - Adapter, - arSta, // auStaAddr, - arAlg, // AuthAlg, - arSeq+1, // AuthSeq, - AuthStatusCode, // AuthStatusCode - AuthChallengetext // AuthChallengetext - ); - - return TRUE; -} - - -// -// Disassociate the STA specified. -// 2005.05.28, by rcnjko. -// -BOOLEAN -AP_DisassociateStation( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSta, - IN u1Byte asRsn - ) -{ - // Check input parameter. - if(pSta == NULL) - return FALSE; -// RT_ASSERT((pSta->bUsed && pSta->bAssociated), -// ("AP_DisassociateStation(): bUsed: %x, bAssociated: %x !!!\n", pSta->bUsed, pSta->bAssociated)); - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_DisassociateStation() pSta->AssociatedMacId %d\n", pSta->AssociatedMacId)); - - pSta->bDisassociated = TRUE; - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - Adapter->MgntInfo.pCurrentSta = pSta; - DrvIFIndicateIncommingAssociationComplete(Adapter, unspec_reason); - DrvIFIndicateDisassociation(Adapter, asRsn, pSta->MacAddr); - } - - RemovePeerTS(Adapter, pSta->MacAddr); - - // Send disassoc frame to the STA. - SendDisassociation(Adapter, pSta->MacAddr, asRsn); - -//Added to del cam entrys for this station -//If pPeerMac is not NULL, then just del this cam entry,by wl,2009-09-27 - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - Adapter->HalFunc.SetKeyHandler(Adapter,0, pSta->MacAddr, 0, 0, 0, TRUE); - - // Update its timestamp. - AsocEntry_UpdateTimeStamp(pSta); - - // Mark the STA as disassoicated and related. - AsocEntry_BecomeDisassoc(Adapter, pSta); - - // HalMacId Remove the specific MacId associated with this peer --------- - MacIdDeregisterSpecificMacId(Adapter, pSta->AssociatedMacId); - - // To initialize WPA-PSK key mgnt state machine. Added by Annie, 2005-07-15. - if( Adapter->MgntInfo.SecurityInfo.SecLvl == RT_SEC_LVL_WPA || Adapter->MgntInfo.SecurityInfo.SecLvl == RT_SEC_LVL_WPA2 ) - Authenticator_StateDISCONNECTED(Adapter, pSta); - - pSta->bDisassociated = FALSE; - - FunctionOut(COMP_AP); - - return TRUE; -} - - -// -// Disassociate all STAs associated. -// 2005.05.28, by rcnjko. -// -VOID -AP_DisassociateAllStation( - IN PADAPTER Adapter, - IN u1Byte asRsn - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - int i; - PRT_WLAN_STA pSta; - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pSta = &(pMgntInfo->AsocEntry[i]); - - if(pSta->bUsed) - { - if(pSta->bAssociated) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_DisassociateAllStation() index %d MacId %d\n", i, pSta->AssociatedMacId)); - //AP_DisassociateStation(Adapter, pSta, unspec_reason); - AP_DisassociateStation(Adapter, pSta, asRsn); - } - } - } -} - -// -// Reset AP mode related variables. -// 2005.05.27, by rcnjko. -// -VOID -AP_ResetVariables( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - u1Byte i; - - FunctionIn(COMP_AP); - - DefAdapter->MgntInfo.bSwitchingSTAStateInProgress = FALSE; - - // Added by Annie, 2006-01-26. - MgntCancelAllTimer(Adapter); - RemoveAllTS(Adapter); - - // We shall randomize it? - for(i = 0; i < 128; i++) - { - pMgntInfo->arChalng[i] = (u1Byte)i; - } - - // Reset Association Table. - AsocEntry_ResetAll(Adapter); - - Authenticator_GlobalReset(Adapter); // added by Annie - - ActUpdate_ProtectionMode(Adapter, FALSE); // 2010.11.26. by tynli. - - - if(ACTING_AS_AP(Adapter)) - { // AP mode. - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - static u1Byte DummySta[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; - - ConstructBeaconFrame(Adapter); - MgntUpdateAsocInfo(Adapter, UpdateAsocBeacon, pMgntInfo->beaconframe.Octet, pMgntInfo->beaconframe.Length); - - // - // step 1. Indicate wildcard disassocation event to - // disassociate all STA associated before. - // - /***************************************************************** - 20150416 Sinda. - We need to delete peer in WDI architecture, but peer had been deleted before. - pass NULL to skip this case to avoid delete incorrect peer. - *****************************************************************/ - DrvIFIndicateDisassociation(Adapter, unspec_reason, NULL); - - // - // step 2. Indicate dummy STA assocation event. - // - // 061228, rcnjko: UI need fake AP mode to enter connected - // state immediate for ICS easy implementation. - // - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, DummySta, 6); - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - } - - // Change Link status to connected. - MgntIndicateMediaStatus(Adapter, RT_MEDIA_CONNECT, TRUE); - } - else - { // STA mode. - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - // - // step 1. Indicate wildcard disassocation event to - // disassociate all STA associated before. - // - /***************************************************************** - 20150416 Sinda. - We need to delete peer in WDI architecture, but peer had been deleted before. - pass NULL to skip this case to avoid delete incorrect peer. - *****************************************************************/ - DrvIFIndicateDisassociation(Adapter, unspec_reason, NULL); - } - - // Change Link status to disconnected. - MgntIndicateMediaStatus(Adapter, RT_MEDIA_DISCONNECT, TRUE); - - // Reset TStream related, 070614, by rcnjko. - QosResetAllTs(Adapter); - } - FunctionOut(COMP_AP); -} - - -// -// Set up SW variables. -// 2005.05.27, by rcnjko. -// -VOID -AP_SetupStartApInfo( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - int i; - BOOLEAN bSupportNmode = Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter); - - FunctionIn(COMP_AP); - - // Cancel key management timer. Added by Annie, 2005-06-29. - PlatformCancelTimer(Adapter, &pMgntInfo->globalKeyInfo.KeyMgntTimer ); - - DFS_TimerContrl(Adapter, DFS_TIMER_CANCEL); - - // Reset scan related state. - if(MgntScanInProgress(pMgntInfo)) - MgntResetScanProcess(Adapter); - - // Reset link detection related. Acturally, this is not necessary, because we won't perform link detection of STA mode in AP mode. - pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod = 0; - pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod = 0; - for( i=0; i < RT_MAX_LD_SLOT_NUM; i++ ) - { - pMgntInfo->LinkDetectInfo.RxBcnNum[i] = 0; - pMgntInfo->LinkDetectInfo.RxDataNum[i] = 0; - } - - // Reset roaming status, 2004.10.12, by rcnjko. - if(MgntRoamingInProgress(pMgntInfo)) - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return; - } - - MgntRoamComplete(Adapter, MlmeStatus_invalid); - } - - // Initialize dirver operating states to AP mode. - RT_ASSERT(ACTING_AS_AP(Adapter), ("AP_SetupStartApInfo(): ACTING_AS_AP(Adapter) == FALSE!!!\n")); - pMgntInfo->OpMode = RT_OP_MODE_AP; - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - pMgntInfo->mAssoc = FALSE; // We will set mAssoc=TRUE when starting sending beacon, 2005.07.19, by rcnjko. - pMgntInfo->mIbss = FALSE; - pMgntInfo->bIbssStarter = FALSE; - pMgntInfo->mDisable = TRUE; // We will set mDisable=FALSE until starting sending beacon. - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_NONE; - pMgntInfo->bHalfWiirelessN24GMode = FALSE; - pMgntInfo->NumBssDesc4Query = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: AP_SetupStartApInfo(), clear NumBssDesc4Query\n")); - // BSSID - PlatformMoveMemory(pMgntInfo->Bssid, Adapter->CurrentAddress, 6); - - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "AP_SetupStartApInfo(): BSSID = ", pMgntInfo->Bssid); - - // Capability. - pMgntInfo->mCap |= cESS; - pMgntInfo->mCap &= (~cIBSS); - - // Preamble mode. - if(pMgntInfo->RegPreambleMode != PREAMBLE_LONG) - pMgntInfo->mCap |= cShortPreamble; - else - pMgntInfo->mCap &= (~cShortPreamble); - - // Beacon Period. - pMgntInfo->dot11BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; - - // DTIM Period. - pMgntInfo->dot11DtimPeriod = pMgntInfo->Regdot11DtimPeriod; - - //Set dot11currentchannelnumber-------------- - if(pDefMgntInfo->mAssoc && !IsDefaultAdapter(Adapter)) - pMgntInfo->dot11CurrentChannelNumber = pDefMgntInfo->dot11CurrentChannelNumber; - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("GetFirstGOPort(Adapter): %p\n", GetFirstGOPort(Adapter))); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Adapter: %p\n", Adapter)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pMgntInfo->dot11CurrentChannelNumber: %d\n", pMgntInfo->dot11CurrentChannelNumber)); - -#if (MULTICHANNEL_SUPPORT == 1 && P2P_SUPPORT == 1) - if(Adapter == GetFirstGOPort(Adapter)) - { - // Win8 will set the GO channel: - // + Do nothing - // GO Start at operating channel when default port is disconnected - //by sherry 20130117 - - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - PADAPTER pDeviceAdapter = NULL; - if(RT_MEDIA_CONNECT != MgntLinkStatusQuery(pDefaultAdapter) && - (NULL != (pDeviceAdapter = GetFirstDevicePort(Adapter)))) - { - pDefMgntInfo->dot11CurrentChannelNumber = pP2PInfo->OperatingChannel; - pMgntInfo->dot11CurrentChannelNumber = pP2PInfo->OperatingChannel; - pDeviceAdapter->MgntInfo.dot11CurrentChannelNumber = pP2PInfo->OperatingChannel; - } - else - { - pMgntInfo->dot11CurrentChannelNumber = pMgntInfo->Regdot11ChannelNumber; - } - } - else -#endif - { - pMgntInfo->dot11CurrentChannelNumber = pMgntInfo->Regdot11ChannelNumber; - } - } - - - - //[Win7] Default port and Extension port can use different wireless mode, but they - // should share the same bandwidth and QoS parameters like EDCA . 2009.07.09, by Bohn - Adapter->HalFunc.SetWirelessModeHandler(Adapter, SetupStarWirelessMode(Adapter, bSupportNmode)); - - if(!pDefMgntInfo->mAssoc && !IsDefaultAdapter(Adapter)) - { - BOOLEAN bSetDefPortWirelessMode = FALSE; - if( IS_WIRELESS_MODE_5G(Adapter) && IS_WIRELESS_MODE_24G(pDefaultAdapter)) - bSetDefPortWirelessMode = TRUE; - else if(IS_WIRELESS_MODE_24G(Adapter) && IS_WIRELESS_MODE_5G(pDefaultAdapter)) - bSetDefPortWirelessMode = TRUE; - - //If they use different band , after ScanComplete of Default port, band will mismatch of Ext AP port. - if(bSetDefPortWirelessMode) - Adapter->HalFunc.SetWirelessModeHandler(pDefaultAdapter, pMgntInfo->dot11CurrentWirelessMode); - } - - //------------------------------------------ - pMgntInfo->CurrentBssWirelessMode = pMgntInfo->dot11CurrentWirelessMode; // Keep wireless mode of IBSS to start. 2005.02.17, by rcnjko. - - // Short slot time. - if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_B) - { - pMgntInfo->mCap &= (~cShortSlotTime); - } - else - { - pMgntInfo->mCap |= cShortSlotTime; - } - - // Protection mode. - ActUpdate_ProtectionMode(Adapter, FALSE); - - // Reset roaming status, 2004.10.12, by rcnjko. - pMgntInfo->AsocRetryCount = 0; - - // Set Key management timer. Annie, 2005-07-06. - if( (pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK || - pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA2 ) && - MgntActQuery_ApType(Adapter) != RT_AP_TYPE_VWIFI_AP - && MgntActQuery_ApType(Adapter) != RT_AP_TYPE_LINUX) // key mgnt is done by OS in Win7 AP mode - { - PlatformSetTimer( Adapter, &pMgntInfo->globalKeyInfo.KeyMgntTimer, KEY_MGNT_INTERVAL ); - } - - DFS_TimerContrl(Adapter, DFS_TIMER_SET); - - // Reset CCX related setting. - CCX_OnBssReset(Adapter); - - // Set default EDCA parameter for AP mode. - if(pMgntInfo->pStaQos->QosCapability != QOS_DISABLE) - { - // TODO: CurrentQosMode can be set to others. Now only support WMM. - pMgntInfo->pStaQos->CurrentQosMode = QOS_WMM; - pMgntInfo->pStaQos->QBssWirelessMode = pMgntInfo->dot11CurrentWirelessMode; - - //[Win7 For Two Port Shared Data this function will retrurn the Right Port Ones]2009.07.22, by Bohn - SET_WMM_PARAM_ELE_AC_PARAMS( - (pu1Byte)GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos_WMMParamEle,pMgntInfo->pStaQos->WMMParamEle,NULL) - , Adapter->AP_EDCA_PARAM); - // - // cDelayedBA & cImmediateBA - // This part shall be add to Capability field later. - // - } - else - { - pMgntInfo->pStaQos->CurrentQosMode = QOS_DISABLE; - pMgntInfo->pStaQos->QBssWirelessMode = WIRELESS_MODE_UNKNOWN; - } - - // Using HT Default setting when startup AP mode. - // Using VHT Default setting when startup AP mode - if(pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) - { - HTUseDefaultSetting(Adapter); - VHTUseDefaultSetting(Adapter); - } - else - { - pMgntInfo->pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - pMgntInfo->dot11CurrentChannelBandWidth = CHANNEL_WIDTH_20; - - if(pDefMgntInfo->mAssoc==TRUE) - pMgntInfo->IOTPeer = pDefMgntInfo->IOTPeer; - else - pMgntInfo->IOTPeer = HT_IOT_PEER_SELF_SOFTAP; - } - - // Reset TStream related, 070614, by rcnjko. - QosResetAllTs(Adapter); - - FunctionOut(COMP_AP); -} - -// -// Configure HW to start AP mode. -// -VOID -AP_StartApRequest( - IN PVOID Context - ) -{ - PADAPTER Adapter = (PADAPTER)Context; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PMGNT_INFO pDefaultMgntInfo = GetDefaultMgntInfo(Adapter); - - RT_OP_MODE btLinkStatus = RT_OP_MODE_NO_LINK; - u1Byte RetryLimit = HAL_RETRY_LIMIT_AP_ADHOC; - u1Byte SwBeaconType = BEACON_SEND_AUTO_HW; - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_AP; - BOOLEAN bUseRAMask = FALSE; - BOOLEAN bP2PGo = FALSE; - - FunctionIn(COMP_AP); - - if (pDefaultAdapter->bDriverStopped) - { - pMgntInfo->bSwitchingAsApInProgress = FALSE; // this is depend on ADAPTER,Neo Test 123 - return; - } - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_HW_BEACON_SUPPORT, (pu1Byte)&SwBeaconType); - - pMgntInfo->BeaconState = BEACON_STARTING; - - MultichannelEnableGoQueue(Adapter); - - //-------------------------------------------------------------------------------- - // Infrastructure AP mode HW Configuration. - //-------------------------------------------------------------------------------- - - pHalData->bNeedIQK = TRUE; - pHalData->DM_OutSrc.RFCalibrateInfo.bNeedIQK = TRUE; - - // Clear MSR first, asked by Owen, 2005.01.27, by rcnjko. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&btLinkStatus) ); - - // - // Update Capability field related setting. - // - // To solve Win98 IRQL==PASIVE_LEVEL in timer callback function, - // we call ActUpdate_mCapInfo() here to make sure related IOs are perfomed in correct IRQL, - // that is, PASSIVE_LEVEL=>Syn IO for this case. 2005.03.15, by rcnjko. - // - ActUpdate_mCapInfo( Adapter, pMgntInfo->mCap ); - - // Set BSSID. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - - // Set Beacon related registers - // We shall update AtimWindow specified in Beacon of the IBSS if "every thing is ready." - pMgntInfo->dot11AtimWindow = 2; // ATIM Window (in unit of TU). - Adapter->HalFunc.SetBeaconRelatedRegistersHandler(Adapter, (PVOID)(&pMgntInfo->OpMode), \ - pMgntInfo->dot11BeaconPeriod, pMgntInfo->dot11AtimWindow); - - // Set operation mode to IBSS. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_RETRY_LIMIT, (pu1Byte)(&RetryLimit)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - - PlatformAtomicExchange((pu4Byte)(&GET_HAL_DATA(Adapter)->RegBcnCtrlVal), GET_HAL_DATA(Adapter)->RegBcnCtrlVal|BIT2); - PlatformEFIOWrite1Byte(Adapter, REG_BCN_CTRL, (u1Byte)(GET_HAL_DATA(Adapter)->RegBcnCtrlVal)); - - // Set EDCA Parameter Set for QAP - if(pMgntInfo->pStaQos->CurrentQosMode != QOS_DISABLE) - { - AC_CODING eACI; - for(eACI = 0; eACI < AC_MAX; eACI++) - Adapter->HalFunc.SetHwRegHandler( - Adapter, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM( - (pu1Byte)GetTwoPortSharedResource /*,eACI*/ - (Adapter,TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos_WMMParamEle,pMgntInfo->pStaQos->WMMParamEle,NULL),eACI)); - } - else - { - // Using 802.11 default settings!! - QosSetLegacyACParam(Adapter); - } - - AP_SetBandWidth(Adapter); - - HTSetCCKSupport(Adapter, TRUE, NULL); - - // Adjust rate related setting according to current wireless mode and current bandwidth. - SelectRateSet( Adapter, pMgntInfo->Regdot11OperationalRateSet ); - - // To ensure AP is started at default channel to prevent from that STA cannot scan AP. (e.g., single-band STA) -#if P2P_SUPPORT == 1 - if((!(P2P_ENABLED(GET_P2P_INFO(Adapter)) && (GET_P2P_INFO(Adapter)->Role == P2P_GO))) - && (pDefaultMgntInfo->mAssoc == FALSE) ) -#else - if(pDefaultMgntInfo->mAssoc == FALSE) -#endif - pMgntInfo->dot11CurrentChannelNumber = pDefaultMgntInfo->Regdot11ChannelNumber;; - - //Fix Vwifi channel show error - N62CAPIndicateFrequencyAdopted(Adapter); - - // Send beacon shall be delay until finish bw & channel offset setttings. - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_StartApRequest(): pMgntInfo->bStartApDueToWakeup %d\n",pDefaultMgntInfo->bStartApDueToWakeup)); - - // - // Start to send beacon. - // - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP && pDefaultMgntInfo->bStartApDueToWakeup) - { // note that only win7 enters here since only win7 has vwifi ap - // - // In this case, we are called from PnpSetPower(). - // NDISTest preview 3 SoftAP_Power_ext requries us to stop beaconing - // after resuming from hibernation. So we do nothing here. - // 2008.12.05, haich - // - - // - // We have to set MSR to no link so that HW will not send beacon automatically. - // - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_StartApRequest(): Stopping Beacon... \n")); - - if(SwBeaconType <= BEACON_SEND_AUTO_SW) // Configure the HW to stop beaocn and related settings. - {//stop hw beacon - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_StartApRequest(): Stopping H/W Beacon...\n")); - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode)); - pMgntInfo->OpMode = RT_OP_MODE_AP; - } - } - - if(pDefaultMgntInfo->bStartApDueToWakeup==FALSE) - { - if(SwBeaconType >= BEACON_SEND_AUTO_SW) - { // S/W Beacon. - pMgntInfo->NextBeacon = pMgntInfo->NowTSF = 0; - - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_StartApRequest(): Set SwBeaconTimer...\n")); - - pMgntInfo->bDisSwDmaBcn = TRUE; - PlatformSetTimer(Adapter, &pMgntInfo->SwBeaconTimer, 0); - } - else - { // H/W Beacon. - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_StartApRequest(): Send H/W Beacon....\n")); - - ResumeTxBeacon_92C(Adapter); - - ConstructBeaconFrame(Adapter); - SendBeaconFrame(Adapter, BEACON_QUEUE); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_DIS_SW_BCN, (pu1Byte)(&Adapter)); - } - } - - bP2PGo = P2P_ACTING_IS_GO(Adapter); - MultiChannelResetApStatus(Adapter, bP2PGo); - //-------------------------------------------------------------------------------- - // Infrastructure AP mode SW Configuration. - //-------------------------------------------------------------------------------- - - pMgntInfo->mAssoc = TRUE; - pMgntInfo->mDisable = FALSE; - - pMgntInfo->bSwitchingAsApInProgress = FALSE; - pMgntInfo->bDisableCCKRateForVWIFIChangeChannel = FALSE; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - if(bUseRAMask) - { - u4Byte MacId = MAC_ID_STATIC_FOR_AP_MULTICAST; - - MacId = MacIdRegisterMacIdForAPMcast(Adapter); - Adapter->HalFunc.UpdateHalRAMaskHandler( - Adapter, - (u1Byte)MacId, - NULL, - 0 - ); - } - - // Set media type/status in HW after sendning Beacon content to HW to make sure the content is correct. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - - - P2P_StartApRequest(Adapter); - - // 2014/02/11 MH For ICS/DHCP delay, if ics and dhcp are not ready. And we start to - // send beacon. Then the client ca not acces ip directly, we need to delay until ICS is ready - // wait OID to trigger. - if(!pDefaultAdapter->bInHctTest && pMgntInfo->Regbcndelay) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Stop beacon\n")); - Hal_PauseTx(Adapter, HW_DISABLE_TX_BEACON); - pMgntInfo->bDelayApBeaconMode = TRUE; - pMgntInfo->DelayApBeaconCnt = 0; - RT_TRACE(COMP_AP, DBG_LOUD, ("<=== ++++++ AP_StartApRequest() ++++++\n")); - } - FunctionOut(COMP_AP); -} - - -// -// Start AP mode. -// 2005.05.27, by rcnjko. -// -VOID -AP_Restart( - IN PADAPTER Adapter - ) -{ - FunctionIn(COMP_AP); -#if USE_WORKITEM - { - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - // Make sure at most one of such workitem is executed. - if((PlatformIsWorkItemScheduled(&(pMgntInfo->ApStartRequestWorkItem)) == FALSE) ) - { - // Set up SW setting about AP mode. - // Since AP_SetupStartApInfo() will set mDisable=TRUE, we must make sure AP_StartApRequest() will be called after it. 2005.09.25, by rcnjko. - AP_SetupStartApInfo(Adapter); - - // Configure HW to start AP mode. - PlatformScheduleWorkItem( &(pMgntInfo->ApStartRequestWorkItem) ); - } - else - { - RT_TRACE(COMP_AP, DBG_SERIOUS, ("AP_Restart(): failed to schedule a work item because another one exists.\n")); - } - } -#else - // Set up SW setting about AP mode. - AP_SetupStartApInfo(Adapter); - - // Configure HW to start AP mode. - AP_StartApRequest((PVOID)Adapter); -#endif - FunctionOut(COMP_AP); -} - -// -// Reset SW and start AP mode. -// 2005.05.27, by rcnjko. -// -VOID -AP_Reset( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - BOOLEAN bFilterOutNonAssociatedBSSID = TRUE; - BOOLEAN bUseRAMask = FALSE; - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_DISABLE; - - FunctionIn(COMP_AP); - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - - // Disable Beacon early interrupt mask. - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - - // Return all packets queued (TxQ, PsQ, etc.). - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - AP_PS_ReturnAllQueuedPackets(Adapter,FALSE); - - // Release all queued MSDU packet from upper layer, added by Roger, 2013.07.11. - PlatformReleaseDataFrameQueued(Adapter); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - // Reset AP mode related variables. - AP_ResetVariables(Adapter); - - // Start AP mode if requested. - if(ACTING_AS_AP(Adapter)) - { - if(GET_TDLS_ENABLED(pDefMgntInfo)) - { - if(pDefMgntInfo->mAssoc) - TDLS_Stop(GetDefaultAdapter(Adapter)); - } - - //sherry moved set check bssid here - //for wlk1.6 VWifiInfraSoftAP_ext, 20110926 - if(bUseRAMask && - (MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP || - MgntActQuery_ApType(Adapter) == RT_AP_TYPE_EXT_AP)) - { - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - else - { - // Currently we set this variable to FALSE as default until CBSSID_DATE on normal chip is safely to set. - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - - AP_Restart(Adapter); - } - else - { // STA mode setting. Added by Annie, 2005-11-23. - - u1Byte RetryLimit = HAL_RETRY_LIMIT_INFRA; - - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - - // Under Win7, when AP mode is stopped, - // default port may still connect to AP. - // Hence, we have to set HwReg back to Infrastructure mode. - - if(pDefMgntInfo->bMediaConnect) - { - // Set BSSID - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pDefMgntInfo->Bssid ); - - // Set Basic Rate - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pDefMgntInfo->mBrates)); - - // Set Operation Mode - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pDefMgntInfo->OpMode) ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_RETRY_LIMIT, (pu1Byte)(&RetryLimit)); - - if(bUseRAMask) - { - bFilterOutNonAssociatedBSSID = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - else - { - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - } - else - { - ReleaseDataFrameQueued(Adapter); - bFilterOutNonAssociatedBSSID = FALSE; - - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pDefMgntInfo->Bssid ); - // Set Operation Mode - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_RETRY_LIMIT, (pu1Byte)(&RetryLimit)); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - - // - // In AP_StartApRequest(), this flag is set to true, therefore if we are going to stop AP mode, - // we should recover this flag. - // When Win7 starts SoftAP, it does reset for 2 times, at the second time, if this flag is still true, - // the driver would call MgntDisconnectAP and send disassociation to itself. - // 2010.11.15, haich. - // - pMgntInfo->mAssoc = FALSE; - - MultiChannelDisconnectGo(Adapter); - - pMgntInfo->bSwitchingAsApInProgress = FALSE; - } - - FunctionOut(COMP_AP); -} - - -// Called by AP_DisconnectAfterSTANewConnected -// Adapter = Ext Adapter -VOID -Ap_SendDisassocWithOldChnlWorkitemCallback( - IN PVOID pContext - ) - -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PADAPTER pDefAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pExtAdapter = pAdapter; - PMGNT_INFO pDefMgntInfo = &pDefAdapter->MgntInfo; - PRT_CHANNEL_INFO pDefChnlInfo = GET_CHNL_INFO(pDefMgntInfo); - PMGNT_INFO pExtMgntInfo = &pAdapter->MgntInfo; - PRT_CHANNEL_INFO pExtChnlInfo = GET_CHNL_INFO(pExtMgntInfo); - WIRELESS_MODE wirelessModebackup = pDefMgntInfo->dot11CurrentWirelessMode; - - RT_TRACE(COMP_AP, DBG_LOUD, ("====> Ap_SendDisassocWithOldChnlWorkitemCallback\n")); - - pExtAdapter->bAPChannelInprogressForNewconnected = TRUE; - -#if (P2P_SUPPORT == 1) - P2PIndicateChangingApChnl(GET_P2P_INFO(pExtAdapter), pExtMgntInfo->dot11CurrentChannelNumber, pDefMgntInfo->dot11CurrentChannelNumber); -#endif - -// 1. ========== AP Swith to Original Channel Send DisAssoc ========== - pExtAdapter->HalFunc.SetWirelessModeHandler(pExtAdapter,pExtMgntInfo->dot11CurrentWirelessMode); - - CHNL_SetBwChnl( pExtAdapter, - pExtChnlInfo->PrimaryChannelNumber, - pExtChnlInfo->CurrentChannelBandWidth, - pExtChnlInfo->Ext20MHzChnlOffsetOf40MHz - ); - - //wait for switch channel successful before sending disassociation by sherry 20130117 - while(RT_IsSwChnlAndBwInProgress(pAdapter)) - PlatformSleepUs(20); - //<<-------- Change BW Total Command ---------- - - RT_TRACE_F(COMP_AP, DBG_LOUD, (" Send Disassociate to All STA\n")); - - AP_DisassociateAllStation(pExtAdapter, unspec_reason); - -// 2. ========== AP Swith to STA's Channel ========== - - //[win7 Two Port BW40Mhz issue] Be carefull of 40Mhz Channel Setting - // Because it is polute by "bad written function, MgntActSet_802_11_CHANNEL" - // Which need to INPUT "central channel" and Polute Correct "dot11CurrentChannelNumber" - //2009.05.20, by bohn - - //-------->> Change Channel Total Command ---------- - while(RT_IsSwChnlAndBwInProgress(pAdapter)) - PlatformSleepUs(20); - - //<<-------- Change Channel Total Command ---------- - - //[win7 Two Port BW40Mhz issue] Default Port's "dot11CurrentChannelNumber" must be - // updated to "pHalData->CurrentChannel". Also due to "bad written function:HTSetConnectBwMode" - //-------->> Change BW Total Command ---------- - - pDefAdapter->HalFunc.SetWirelessModeHandler(pDefAdapter,wirelessModebackup); - CHNL_SetBwChnl( pDefAdapter, - pDefChnlInfo->PrimaryChannelNumber, - pDefChnlInfo->CurrentChannelBandWidth, - pDefChnlInfo->Ext20MHzChnlOffsetOf40MHz - ); - - //<<-------- Change BW Total Command ---------- - //4 [win7 Two Port BW40Mhz issue] We May Recard the value for Extension Port, by Bohn, 2009.06.05 - //CHNL_SetChnlInfoFromDestPort(pExtAdapter, pDefAdapter); - MgntStopBeacon(pExtAdapter); -// 3. ============= Restart AP ====================== - if(1)//pDefAdapter->bInHctTest) // In HctTest, do not delay beacon for 20seconds. - PlatformSetTimer(pAdapter, &pExtMgntInfo->DelaySendBeaconTimer , 1000); - else - PlatformSetTimer(pAdapter, &pExtMgntInfo->DelaySendBeaconTimer , pDefMgntInfo->ResumeBeaconTime); - - N62CAPIndicateFrequencyAdopted(pExtAdapter); - - pExtAdapter->bAPChannelInprogressForNewconnected = FALSE; - - RT_TRACE(COMP_AP, DBG_LOUD, ("<==== Ap_SendDisassocWithOldChnlWorkitemCallback\n")); -} - - -// Called by Two port System -VOID -AP_DisconnectAfterSTANewConnected( - PADAPTER Adapter - ) -{ - // - //We should send disasoc packet to all the STA who are connect to the AP. - //So we need to switch to original channel for send disasoc packet. - //By Maddest, 080903 - // - // Disconnect clients and delay send beacon if one of the following settings is different: - // (a) Channel, (b) Bandwidth, (c) Chnloffset (for 40MHz) - // Add by hpfan, 2009.12.09 - // - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - PADAPTER ExtAdapter = Adapter; - PMGNT_INFO pDefMgntInfo = &DefAdapter->MgntInfo; - PMGNT_INFO pExtMgntInfo = &ExtAdapter->MgntInfo; - PRT_CHANNEL_INFO pDefChnlInfo = GET_CHNL_INFO(pDefMgntInfo); - PRT_CHANNEL_INFO pExtChnlInfo = GET_CHNL_INFO(pExtMgntInfo); - - RT_TRACE(COMP_AP, DBG_LOUD, ("Def Channel %d Ext Channel %d \n", - pDefMgntInfo->dot11CurrentChannelNumber, pExtMgntInfo->dot11CurrentChannelNumber)); - RT_TRACE(COMP_AP, DBG_LOUD, ("Ext BW=%d, offset=%d\n", - pExtChnlInfo->CurrentChannelBandWidth, pExtChnlInfo->Ext20MHzChnlOffsetOf40MHz)); - RT_TRACE(COMP_AP, DBG_LOUD, ("Def BW=%d, offset=%d\n", - pDefChnlInfo->CurrentChannelBandWidth, pDefChnlInfo->Ext20MHzChnlOffsetOf40MHz)); - - if( AP_DetermineAlive(ExtAdapter) && - ( (pExtMgntInfo->dot11CurrentChannelNumber !=pDefMgntInfo->dot11CurrentChannelNumber) || - (pExtChnlInfo->CurrentChannelCenterFrequency != pDefChnlInfo->CurrentChannelCenterFrequency)) - ) - { - PlatformScheduleWorkItem( &(pExtMgntInfo->ApSendDisassocWithOldChnlWorkitem)); - } - else - { - RT_TRACE( COMP_AP, DBG_LOUD, ("Channel are the Same, Wouldn't Change\n")); - } - - // Under win7, we may have an adapter running in AP/IBSS mode, - // this action would stop updating beacon (UpdateBeaconFrame()). - // If one of the adapters needs to send beacon, we skip this action. - // 2008.07.10, haich. - // Update Interrup Mask for STA in infrastructure mode. - // Currently, we only remove the masks set in IBSS mode. 2005.12.14, by rcnjko. - if(!(pDefMgntInfo->OpMode == RT_OP_MODE_AP || pDefMgntInfo->OpMode == RT_OP_MODE_IBSS || - pExtMgntInfo->OpMode == RT_OP_MODE_AP ||pExtMgntInfo->OpMode == RT_OP_MODE_IBSS)) - { - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_DISABLE; - - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - } - -} - - -VOID -AP_StatusWatchdog( - IN PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - PMGNT_INFO pExtMgntInfo = &Adapter->MgntInfo; - - if( MgntRoamingInProgress(pDefMgntInfo) || - MgntIsLinkInProgress(pDefMgntInfo) || - MgntScanInProgress(pDefMgntInfo)) - return; - else if(pExtMgntInfo->bSwitchingAsApInProgress) - ; - else if(pExtMgntInfo->bDelaySwitchToApMode) - { - pExtMgntInfo->bDelaySwitchToApMode = FALSE; - pDefMgntInfo->bSwitchingSTAStateInProgress = FALSE; - RT_TRACE(COMP_AP,DBG_LOUD, ("Handle bDelaySwitchToApMode in AP_StatusWatchdog\n")); - EXT_AP_START_AP_MODE(Adapter); - } - else if(pDefMgntInfo->bSwitchingSTAStateInProgress) - { - pDefMgntInfo->bSwitchingSTAStateInProgress = FALSE; - RT_TRACE(COMP_AP,DBG_LOUD, ("bSwitchingSTAStateInProgress in AP_StatusWatchdog\n")); - EXT_AP_DISASSOCATE_AFTER_STA_LINK_TO_DIFFERENT_CHNNEL_AP(Adapter); - } - - // - // 2014/02/11 MH Add for AP mode beacon delay mechanism for ICS/DHCP ready. - // - if(!pDefaultAdapter->bInHctTest && pDefMgntInfo->Regbcndelay) - { - if (pDefMgntInfo->bDelayApBeaconMode == TRUE) - { - if (pDefMgntInfo->DelayApBeaconCnt ++ >= pDefMgntInfo->Regbcndelay) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Start beacon\n")); - pDefMgntInfo->bDelayApBeaconMode = FALSE; - Hal_PauseTx(pDefaultAdapter, HW_ENABLE_TX_BEACON); - } - } - } -} - -BOOLEAN -AP_CheckRSNIE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN OCTET_STRING asocpdu - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING RSNIE; - BOOLEAN Match; - BOOLEAN bWPSEnable = FALSE; - u1Byte tmpOUI[SIZE_OUI] = {0}; - u1Byte tmpOUIType = 0; - PRT_NDIS62_COMMON pNdis62Common = Adapter->pNdis62Common; - bWPSEnable = pNdis62Common->bWPSEnable; - - //2 Step 1. Get RSNIE from STA's asocpud - - // Code reference: GetValueFromBeaconOrProbeRsp() - { - u1Byte count; - - // Initialize first - pEntry->perSTAKeyInfo.SecLvl = RT_SEC_LVL_NONE; - pEntry->perSTAKeyInfo.GroupCipherSuite = RT_ENC_ALG_NO_CIPHER; - pEntry->perSTAKeyInfo.PairwiseCipherCount = 0; - pEntry->perSTAKeyInfo.AuthSuiteCount = 0; - for(count = 0; count < MAX_CIPHER_SUITE_NUM; count++){ - pEntry->perSTAKeyInfo.PairwiseCipherSuite[count] = RT_ENC_ALG_NO_CIPHER; - } - for(count = 0; count < MAX_AUTH_SUITE_NUM; count++){ - pEntry->perSTAKeyInfo.AuthSuite[count] = AKM_SUITE_NONE; - } - pEntry->perSTAKeyInfo.bPreAuth = FALSE; - pEntry->perSTAKeyInfo.NumOfPTKReplayCounter = 0; - pEntry->perSTAKeyInfo.NumOfGTKReplayCounter = 0; - } - - RSNIE = PacketGetElement(asocpdu, EID_WPA2, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(RSNIE.Length != 0){ - pEntry->perSTAKeyInfo.SecLvl = RT_SEC_LVL_WPA2; - }else{ - RSNIE = PacketGetElement(asocpdu, EID_Vendor, OUI_SUB_WPA, OUI_SUBTYPE_DONT_CARE); - if(RSNIE.Length != 0){ - pEntry->perSTAKeyInfo.SecLvl = RT_SEC_LVL_WPA; - } - else if (pEntry->AuthAlg == OPEN_SYSTEM && bWPSEnable) - { - pEntry->Capability = GET_ASOC_REQ_CAPABILITY_INFO(asocpdu.Octet); - - if(pEntry->Capability & cPrivacy) - { - u1Byte count; - - pEntry->perSTAKeyInfo.GroupCipherSuite = RT_ENC_ALG_WEP; - for(count = 0; count < MAX_CIPHER_SUITE_NUM; count++){ - pEntry->perSTAKeyInfo.PairwiseCipherSuite[count] = RT_ENC_ALG_WEP; - } - pEntry->AuthMode = RT_802_11AuthModeOpen; - } - - Match = TRUE; - return Match; - } - } - - if(RSNIE.Length != 0){ - u1Byte count; - - //2004/09/15, kcwu, parse WPA2 packet - if(pEntry->perSTAKeyInfo.SecLvl == RT_SEC_LVL_WPA) - { - // Version - pEntry->perSTAKeyInfo.SecVersion = GET_WPA_IE_VERSION(RSNIE.Octet); - - // Group Cipher - GET_OUI_WITH_TYPE(GET_WPA_IE_GROUP_CIPHER_SUITE(RSNIE.Octet), tmpOUI, tmpOUIType); - Sec_MapOUITypeToCipherSuite(tmpOUI, &tmpOUIType, RT_SEC_LVL_WPA, &(pEntry->perSTAKeyInfo.GroupCipherSuite)); - - // Pairwise Cipher - pEntry->perSTAKeyInfo.PairwiseCipherCount = GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(RSNIE.Octet); - for(count = 0; count < pEntry->perSTAKeyInfo.PairwiseCipherCount && count < MAX_CIPHER_SUITE_NUM; count ++) - { - GET_OUI_WITH_TYPE(GET_WPA_IE_PAIRWISE_CIPHER_SUITE_LIST(RSNIE.Octet, count), tmpOUI, tmpOUIType); - Sec_MapOUITypeToCipherSuite(tmpOUI, &tmpOUIType, RT_SEC_LVL_WPA, &(pEntry->perSTAKeyInfo.PairwiseCipherSuite[count])); - } - - // AKM Suite - pEntry->perSTAKeyInfo.AuthSuiteCount = GET_WPA_IE_AKM_SUITE_CNT(RSNIE.Octet); - for(count = 0; count < pEntry->perSTAKeyInfo.AuthSuiteCount && count < MAX_AUTH_SUITE_NUM; count ++) - { - GET_OUI_WITH_TYPE(GET_WPA_IE_AKM_SUITE_LIST(RSNIE.Octet, count), tmpOUI, tmpOUIType); - Sec_MapOUITypeToAKMSuite(tmpOUI, &tmpOUIType, RT_SEC_LVL_WPA, &(pEntry->perSTAKeyInfo.AuthSuite[count])); - } - - pEntry->perSTAKeyInfo.NumOfPTKReplayCounter = (u1Byte)GET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(RSNIE.Octet); - pEntry->perSTAKeyInfo.NumOfGTKReplayCounter = (u1Byte)GET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(RSNIE.Octet); - } - else if(pEntry->perSTAKeyInfo.SecLvl == RT_SEC_LVL_WPA2) - { - // Version - pEntry->perSTAKeyInfo.SecVersion = GET_RSN_IE_VERSION(RSNIE.Octet); - - // Group Cipher - GET_OUI_WITH_TYPE(GET_RSN_IE_GROUP_CIPHER_SUITE(RSNIE.Octet), tmpOUI, tmpOUIType); - Sec_MapOUITypeToCipherSuite(tmpOUI, &tmpOUIType, RT_SEC_LVL_WPA2, &(pEntry->perSTAKeyInfo.GroupCipherSuite)); - - // Pairwise Cipher - pEntry->perSTAKeyInfo.PairwiseCipherCount = GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(RSNIE.Octet); - - // Bruce_Test - DbgPrint("Client PairwiseCipherCount = %d\n", pEntry->perSTAKeyInfo.PairwiseCipherCount); - for(count = 0; count < pEntry->perSTAKeyInfo.PairwiseCipherCount && count < MAX_CIPHER_SUITE_NUM; count ++) - { - GET_OUI_WITH_TYPE(GET_RSN_IE_PAIRWISE_CIPHER_SUITE_LIST(RSNIE.Octet, count), tmpOUI, tmpOUIType); - Sec_MapOUITypeToCipherSuite(tmpOUI, &tmpOUIType, RT_SEC_LVL_WPA2, &(pEntry->perSTAKeyInfo.PairwiseCipherSuite[count])); - // Bruce_Test - DbgPrint("Pairwise[%d] OUI = %02X-%02X-%02X-%02X, Pairwise = 0x%08X\n", count, tmpOUI[0], tmpOUI[1], tmpOUI[2], tmpOUIType, pEntry->perSTAKeyInfo.PairwiseCipherSuite[count]); - } - - // AKM Suite - pEntry->perSTAKeyInfo.AuthSuiteCount = GET_RSN_IE_AKM_SUITE_CNT(RSNIE.Octet); - for(count = 0; count < pEntry->perSTAKeyInfo.AuthSuiteCount && count < MAX_AUTH_SUITE_NUM; count ++) - { - GET_OUI_WITH_TYPE(GET_RSN_IE_AKM_SUITE_LIST(RSNIE.Octet, count), tmpOUI, tmpOUIType); - Sec_MapOUITypeToAKMSuite(tmpOUI, &tmpOUIType, RT_SEC_LVL_WPA2, &(pEntry->perSTAKeyInfo.AuthSuite[count])); - } - - pEntry->perSTAKeyInfo.bPreAuth = (BOOLEAN)GET_RSN_IE_CAP_PREAUTH(RSNIE.Octet); - - pEntry->perSTAKeyInfo.NumOfPTKReplayCounter = (u1Byte)GET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(RSNIE.Octet); - pEntry->perSTAKeyInfo.NumOfGTKReplayCounter = (u1Byte)GET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(RSNIE.Octet); - } - else - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("RSNIE parsing error!") ); - } - } - - - //2 Step 2. Compare with Authenticator's RSNIE - - // Code reference: SelectNetworkBySSID() - { - int i; - Match = TRUE; - { - if( pMgntInfo->SecurityInfo.SecLvl != pEntry->perSTAKeyInfo.SecLvl ) - Match = FALSE; - - for( i=0; i < pEntry->perSTAKeyInfo.PairwiseCipherCount; i++ ) - { - if(pEntry->perSTAKeyInfo.PairwiseCipherSuite[i] == pMgntInfo->SecurityInfo.PairwiseEncAlgorithm) - { - break; - } - } - - if( i == pEntry->perSTAKeyInfo.PairwiseCipherCount ) - { - RT_TRACE_F(COMP_AP, DBG_LOUD, ("Cannot find matched pairwise cipher suite with ours (0x%08X)\n", pMgntInfo->SecurityInfo.PairwiseEncAlgorithm)); - Match = FALSE; - } - - } - } - - if(Match) - pEntry->AuthMode = pMgntInfo->SecurityInfo.AuthMode; - - return Match; - -} - -void -AP_OnEAPOL( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PAUTH_GLOBAL_KEY_TAG pGlInfo = &pMgntInfo->globalKeyInfo; - OCTET_STRING pduOS; - pu1Byte pSaddr; - PRT_WLAN_STA pEntry; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> AP_OnEAPOL()\n") ); - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pSaddr = Frame_pSaddr(pduOS); - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("AP_OnEAPOL(): PacketLength=%d\n", pduOS.Length ) ); - RT_PRINT_ADDR( COMP_AUTHENTICATOR, DBG_LOUD, ("AP_OnEAPOL(): SourceAddress:"), pSaddr ); - - pEntry = AsocEntry_GetEntry(pMgntInfo, pSaddr); - if( pEntry == NULL ) - { - // drop it. - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("AP_OnEAPOL(): Cannot find the STA in the table!!! drop it.\n") ); - return; - } - - // Assign the EAPOL Frame header pointer. ( [AnnieNote] ex: from 01-03-00-5F-FE-00-89-...) - - //if(pEntry->QosMode == QOS_DISABLE) - if(!Frame_ContainQc(pduOS)) - { - FillOctetString(pGlInfo->EAPOLMsgRecvd, pduOS.Octet+EAP_HDR_LEN, pduOS.Length-EAP_HDR_LEN); - } - else - { - FillOctetString(pGlInfo->EAPOLMsgRecvd, pduOS.Octet+EAP_HDR_LEN+2, pduOS.Length-EAP_HDR_LEN-2); - } - if( Frame_WEP(pduOS) ) - { - pGlInfo->EAPOLMsgRecvd.Octet += pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - pGlInfo->EAPOLMsgRecvd.Length -= pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - } - - // Check type of EAPOL packet. - if( (u1Byte)( *(pGlInfo->EAPOLMsgRecvd.Octet+1) ) == LIB1X_EAPOL_KEY ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("EAPOL-key\n") ); - Authenticator_OnEAPOLKeyRecvd( Adapter, &pEntry->perSTAKeyInfo, pduOS ); - } - else if( (u1Byte)( *(pGlInfo->EAPOLMsgRecvd.Octet+1) ) == LIB1X_EAPOL_START ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("EAPOL-start\n") ); - if( !KeyMgntStateIsWaitingEAPOLKey(&pEntry->perSTAKeyInfo) && - ( pGlInfo->CurrentTimeSlot - pEntry->perSTAKeyInfo.TimeSlot_sendstart > 3 ) ) // don't response it in 3 sec. Added by Annie, 2005-07-12. - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Start 4-way handshake because of EAPOL-start.\n") ); - Authenticator_StateAUTHENTICATION2(Adapter, pEntry->perSTAKeyInfo.pWLanSTA); - } - else - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Don't responce!Maybe 4-way or 2-way handshaking\n") ); - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Drop the EAPOL-start packet.\n") ); - } - } - else - { - // Other EAPOL packets. - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("AP_OnEAPOL(): EAPOL packet with unknown type.\n") ); - } - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== AP_OnEAPOL()\n") ); -} - - - - -//------------------------------------------------------------------------------ -// HT(High Throughput) related operation -//------------------------------------------------------------------------------ -VOID -AP_HTResetSTAEntry( - PADAPTER Adapter, - PRT_WLAN_STA pSTAEntry -) -{ - pSTAEntry->HTInfo.bEnableHT = FALSE; - - // LDPC support - CLEAR_FLAGS(pSTAEntry->HTInfo.LDPC); - - // STBC support - CLEAR_FLAGS(pSTAEntry->HTInfo.STBC); - - pSTAEntry->HTInfo.AMPDU_Factor = 0; - pSTAEntry->HTInfo.AMSDU_MaxSize = 0; - pSTAEntry->HTInfo.MPDU_Density = 0; - pSTAEntry->HTInfo.bSupportCck = FALSE; - pSTAEntry->HTInfo.HTHighestOperaRate = 0; -} - - - -BOOLEAN -AP_HTCheckHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN OCTET_STRING asocpdu -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pu1Byte pPeerHTCap; - OCTET_STRING osHTCap = PacketGetElement(asocpdu, EID_HTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - //1 Reject STA to connect in N mode - // If we do not support CCK rate in N mode, reject the B mode - if(IS_WIRELESS_MODE_HT_24G(Adapter) && pHTInfo->bCurSuppCCK==FALSE) - { - if(pEntry->WirelessMode == WIRELESS_MODE_B) - return FALSE; - } - - //1 Set Wireless Mode - if(osHTCap.Length != 0) - { - pEntry->HTInfo.bEnableHT = TRUE; - pPeerHTCap = (pu1Byte)osHTCap.Octet; - pEntry->HTInfo.bCurRxReorderEnable = pHTInfo->bRegRxReorderEnable; - if(pEntry->WirelessMode == WIRELESS_MODE_A) - pEntry->WirelessMode = WIRELESS_MODE_N_5G; - else - pEntry->WirelessMode = WIRELESS_MODE_N_24G; - } - else - { - pEntry->HTInfo.bEnableHT = FALSE; - return TRUE; - } - - HTCheckHTCap(Adapter, pEntry, pPeerHTCap); - - return TRUE; - -} - - - -// Called by Ap_SendDisassocWithOldChnlWorkitemCallback -// Adapter = Ext Adapter -VOID -DelaySendBeaconTimerCallback( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PADAPTER pExtAdapter = Adapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte SwBeaconType = BEACON_SEND_AUTO_HW; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_HW_BEACON_SUPPORT, &SwBeaconType); - - pMgntInfo->BeaconState = BEACON_STARTING; - - // We need to configure the settings to let HW send Beacons. - if(SwBeaconType <= BEACON_SEND_AUTO_SW) - { - BOOLEAN bStopSendBeacon = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_STOP_SEND_BEACON, (pu1Byte)&bStopSendBeacon); - } - - if(AP_DetermineAlive(pExtAdapter) == FALSE) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("DelaySendBeaconTimerCallback:() AP not started\n")); - return; - } - - //[Win7] For Default-G _Extension-N20 case, we must reset SW and HW part. 2009.07.09, by Bohn - AP_SetupStartApInfo(pExtAdapter); - - PlatformScheduleWorkItem( &(pMgntInfo->ApStartRequestWorkItem) ); -} - - -/** Get AP state */ -AP_STATE -GetAPState( - IN PADAPTER pAdapter - ) -{ - return (AP_STATE)PlatformAtomicOr((pu1Byte)(&pAdapter->MgntInfo.APState),0); -} - - -/** Set AP state, return the old state */ -VOID -SetAPState( - IN PADAPTER pAdapter, - IN AP_STATE NewSatate - ) -{ - PlatformAtomicExchange((pu4Byte)&pAdapter->MgntInfo.APState, (LONG)NewSatate); -} - - - -RT_AP_TYPE -AP_DetermineApType( - IN PADAPTER pAdapter - ) -{ - BOOLEAN bFakeApFlagSet = FALSE; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - RT_AP_TYPE ApType = RT_AP_TYPE_NONE; - - if(IsDefaultAdapter(pAdapter)) - bFakeApFlagSet = TRUE; - - if(pMgntInfo->NdisVersion == RT_NDIS_VERSION_NONE_NDIS) - {// not n6, n6, n62 - ApType = RT_AP_TYPE_NORMAL; - } - else if(pMgntInfo->NdisVersion == RT_NDIS_VERSION_5_0 || - pMgntInfo->NdisVersion == RT_NDIS_VERSION_5_1) - {// n5 - if(bFakeApFlagSet) - ApType = RT_AP_TYPE_NORMAL; - else - ApType = RT_AP_TYPE_EXT_AP; - } - else if(pMgntInfo->NdisVersion == RT_NDIS_VERSION_6_0 || (pMgntInfo->NdisVersion == RT_NDIS_VERSION_6_1)) - {// vista, only fake AP mode is valid - ApType = RT_AP_TYPE_IBSS_EMULATED; - } - else if(pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20) - {// win7 - if(bFakeApFlagSet) - { - ApType = RT_AP_TYPE_IBSS_EMULATED; - } - else - { - ApType = RT_AP_TYPE_VWIFI_AP; - } - } - else - { - ApType = RT_AP_TYPE_NORMAL; - } - RT_TRACE(COMP_AP, DBG_LOUD, - ("AP_DetermineApType(): pMgntInfo->NdisVersion: %u, ApType is determined to be: %u\n", pMgntInfo->NdisVersion, ApType)); - return ApType; - -} - - -BOOLEAN -AP_DetermineAlive( - IN PADAPTER pAdapter - ) -{ - BOOLEAN bFakeApFlagSet = FALSE; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - BOOLEAN bAlive = FALSE; - - if(IsDefaultAdapter(pAdapter)) - bFakeApFlagSet = TRUE; - - if(!ACTING_AS_AP(pAdapter)) - bAlive = FALSE; - else if(pMgntInfo->NdisVersion == RT_NDIS_VERSION_NONE_NDIS) - {// not n6, n6, n62 - bAlive = FALSE; - } - else if(pMgntInfo->NdisVersion == RT_NDIS_VERSION_5_0 || - pMgntInfo->NdisVersion == RT_NDIS_VERSION_5_1) - {// n5 - if(bFakeApFlagSet) - { - if(pMgntInfo->OpMode == RT_OP_MODE_AP) - bAlive = TRUE; - else - bAlive = FALSE; - } - else - { - if(GetAPState(pAdapter)==AP_STATE_STARTED) - bAlive = TRUE; - else - bAlive = FALSE; - } - } - else if(pMgntInfo->NdisVersion == RT_NDIS_VERSION_6_1) - {// vista, only fake AP mode is valid - if(pMgntInfo->OpMode == RT_OP_MODE_AP) - bAlive = TRUE; - else - bAlive = FALSE; - } - else if(pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20) - {// win7 - if(bFakeApFlagSet) - { - if(pMgntInfo->OpMode == RT_OP_MODE_AP) - bAlive = TRUE; - else - bAlive = FALSE; - } - else - { - if(GetAPState(pAdapter)==AP_STATE_STARTED) - bAlive = TRUE; - else - bAlive = FALSE; - } - } - else - { - bAlive = FALSE; - } - RT_TRACE(COMP_AP, DBG_TRACE, - ("AP_DetermineAlive(): pMgntInfo->NdisVersion: %u, Ap alive is determined to be: %u\n", pMgntInfo->NdisVersion, bAlive)); - return bAlive; -} - - - -// -// Description: -// Initialize the members of AP info. -// Arguments: -// [in] pAdapter - -// The adapter context. -// Return: -// None. -// By Bruce, 2010-04-29. -// -VOID -AP_InitializeVariables( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_AP_INFO pApInfo = GET_AP_INFO(pMgntInfo); - pu1Byte pAcPara; - u1Byte WiFiOui[3] = {0x00, 0x50, 0xF2}; - - pApInfo->bSupportWmm = TRUE; - pApInfo->bSupportWmmUapsd = TRUE; - pApInfo->WmmParaCnt = 0; - - PlatformZeroMemory(pApInfo->WmmAcParaBuf, WMM_PARAM_ELEMENT_SIZE); - FillOctetString(pApInfo->osWmmAcParaIE, pApInfo->WmmAcParaBuf, WMM_PARAM_ELEMENT_SIZE); - - SET_WMM_PARAM_ELE_OUI(pApInfo->osWmmAcParaIE.Octet, WiFiOui); - SET_WMM_PARAM_ELE_OUI_TYPE(pApInfo->osWmmAcParaIE.Octet, 2); - SET_WMM_PARAM_ELE_OUI_SUBTYPE(pApInfo->osWmmAcParaIE.Octet, OUI_SUBTYPE_WMM_PARAM); - SET_WMM_PARAM_ELE_VERSION(pApInfo->osWmmAcParaIE.Octet, 1); - SET_WMM_PARAM_ELE_QOS_INFO_FIELD(pApInfo->osWmmAcParaIE.Octet, (((pApInfo->bSupportWmmUapsd) ? BIT7 : 0) | (pApInfo->WmmParaCnt & 0xF))); - - // These are WIFi default EDCA parameters. - // Default BE - pAcPara = &(pApInfo->osWmmAcParaIE.Octet[8]); - SET_WMM_AC_PARAM_ACI(pAcPara, AC0_BE); - SET_WMM_AC_PARAM_AIFSN(pAcPara, 3); // BE AIFS = 3 - SET_WMM_AC_PARAM_ECWMIN(pAcPara, 4); // BE CMinWin = 4. - SET_WMM_AC_PARAM_ECWMAX(pAcPara, 10); // BE CMaxWin = 10. - SET_WMM_AC_PARAM_TXOP_LIMIT(pAcPara, 0); // BE TxOP = 0. - - // Default BK - pAcPara = &(pApInfo->osWmmAcParaIE.Octet[8 + 4]); - SET_WMM_AC_PARAM_ACI(pAcPara, AC1_BK); - SET_WMM_AC_PARAM_AIFSN(pAcPara, 7); // BK AIFS = 3 - SET_WMM_AC_PARAM_ECWMIN(pAcPara, 4); // BK CMinWin = 4. - SET_WMM_AC_PARAM_ECWMAX(pAcPara, 10); // BK CMaxWin = 10. - SET_WMM_AC_PARAM_TXOP_LIMIT(pAcPara, 0); // BK TxOP = 0. - - // Default VI - pAcPara = &(pApInfo->osWmmAcParaIE.Octet[8 + 8]); - SET_WMM_AC_PARAM_ACI(pAcPara, AC2_VI); - SET_WMM_AC_PARAM_AIFSN(pAcPara, 2); // VI AIFS = 2 - SET_WMM_AC_PARAM_ECWMIN(pAcPara, 3); // VI CMinWin = 3. - SET_WMM_AC_PARAM_ECWMAX(pAcPara, 4); // VI CMaxWin = 4. - SET_WMM_AC_PARAM_TXOP_LIMIT(pAcPara, 94); // VI TxOP = 94. - - // Default VO - pAcPara = &(pApInfo->osWmmAcParaIE.Octet[8 + 12]); - SET_WMM_AC_PARAM_ACI(pAcPara, AC3_VO); - SET_WMM_AC_PARAM_AIFSN(pAcPara, 2); // VO AIFS = 2 - SET_WMM_AC_PARAM_ECWMIN(pAcPara, 2); // VO CMinWin = 2. - SET_WMM_AC_PARAM_ECWMAX(pAcPara, 3); // VO CMaxWin = 3. - SET_WMM_AC_PARAM_TXOP_LIMIT(pAcPara, 47); // VO TxOP = 47. - - pApInfo->bSupportCountryIe = FALSE; - PlatformZeroMemory(pApInfo->CountryIeBuf, MAX_IE_LEN); - FillOctetString(pApInfo->osCountryIe, pApInfo->CountryIeBuf, 0); - - pApInfo->bSupportPowerConstraint = FALSE; - PlatformZeroMemory(pApInfo->PowerConstraintBuf, MAX_DOT11_POWER_CONSTRAINT_IE_LEN); - FillOctetString(pApInfo->osPowerConstraintIe, pApInfo->PowerConstraintBuf, 0); -} - -// -// Description: -// Append the WMM IE for the AP mode. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [out] posFrame - -// The packet to be appended with the WMM IE. -// Return: -// None. -// By Bruce, 2010-04-29. -// -VOID -Ap_AppendWmmIe( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_AP_INFO pApInfo = GET_AP_INFO(pMgntInfo); - - // This AP mode doesn't support WMM. - if(!pApInfo->bSupportWmm || pApInfo->osWmmAcParaIE.Length == 0) - return; - - PacketMakeElement(posFrame, EID_Vendor, pApInfo->osWmmAcParaIE); -} - -// -// Description: -// Append the Country IE for the AP mode. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [out] posFrame - -// The packet to be appended with the specified IE. -// Return: -// None. -// By Bruce, 2010-05-14. -// -VOID -Ap_AppendCountryIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_AP_INFO pApInfo = GET_AP_INFO(pMgntInfo); - - // This AP mode doesn't support WMM. - if(!pApInfo->bSupportCountryIe || pApInfo->osCountryIe.Length == 0) - return; - - PacketMakeElement(posFrame, EID_Country, pApInfo->osCountryIe); -} - -// -// Description: -// Append the Power Constraint IE for the AP mode. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [out] posFrame - -// The packet to be appended with the specified IE. -// Return: -// None. -// By Bruce, 2010-05-14. -// -VOID -Ap_AppendPowerConstraintIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_AP_INFO pApInfo = GET_AP_INFO(pMgntInfo); - - // This AP mode doesn't support WMM. - if(!pApInfo->bSupportPowerConstraint || pApInfo->osPowerConstraintIe.Length == 0) - return; - - PacketMakeElement(posFrame, EID_POWER_CONSTRAINT, pApInfo->osPowerConstraintIe); -} - -// -// Description: -// The callback function in AP mode for the tx packet feedback. -// Arguments: -// [in] pAdapter - -// The adapter address of the caller. -// [in] pContext - -// The information address of RT_TX_FEEDBACK_INFO. -// Return: -// NULL -// Assumption: -// The RT_TX_SPINLOCK is acquired. -// By Bruce, 2010-09-01. -// -VOID -Ap_PsTxFeedbackCallback( - PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo -) -{ - PRT_WLAN_STA pEntry; - BOOLEAN WmmSp = FALSE; - RT_STATUS rtStatus; - - if(pTxFeedbackInfo == NULL) - return; - - pEntry = (PRT_WLAN_STA)pTxFeedbackInfo->pContext; - if(pEntry == NULL) - return; - - RT_TRACE(COMP_AP, DBG_LOUD, ("Ap_PsTxFeedbackCallback()=====>\n")); - - // This tx packet feedback is the wmm ps packet. - if(pTxFeedbackInfo->Reason & RT_TX_FEEDBACK_ID_AP_WMM_PS_PKT) - WmmSp = TRUE; - - // The client isn't associated or not in power save mode. - if(!pEntry->bAssociated || !pEntry->bPowerSave) - return; - - // The packet with EOSP is sent successfully and we mark the flag of EOSP as ended. - if((pTxFeedbackInfo->Reason & RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING) && pEntry->WmmEosp == RT_STA_EOSP_STATE_ENDING) - { - // RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "Ap_PsTxFeedbackCallback(): WMM state = RT_STA_EOSP_STATE_ENDED for sta = ", pEntry->MacAddr); - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - return; - } - - if(WmmSp && pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) - { - PRT_TCB pTcb; - OCTET_STRING osMpdu; - - if(!RTIsListEmpty(&pEntry->WmmPsQueue)) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pEntry->WmmPsQueue); - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(pAdapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - if(RTIsListEmpty(&(pEntry->WmmPsQueue))) - { - // If this is the final packet, set the EOSP bit. - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDING; - } - - - if(TxFeedbackInstallTxFeedbackInfoForTcb(pAdapter, pTcb)) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - (pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) ? RT_TX_FEEDBACK_ID_AP_WMM_PS_PKT : RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING, - pTxFeedbackInfo->pAdapter, - Ap_PsTxFeedbackCallback, - (PVOID)pEntry - ); - } - else - { - if(pEntry->WmmEosp == RT_STA_EOSP_STATE_ENDING) - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - } - - - // Set the more data if the EOSP ended so that notify the client we still queue packets. - SET_80211_HDR_MORE_DATA(osMpdu.Octet, (pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) ? 1 : 0); - SET_QOS_CTRL_WMM_EOSP(osMpdu.Octet, (pEntry->WmmEosp == RT_STA_EOSP_STATE_OPENED) ? 0 : 1); - - // RT_TRACE_F(COMP_AP, DBG_LOUD, ("Tx Packet for WMM state = %d\n", pEntry->WmmEosp)); - rtStatus = TransmitTCB(pTxFeedbackInfo->pAdapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - RTInsertTailListWithCnt(Get_WAIT_QUEUE(pAdapter, pTcb->SpecifiedQueueID), &pTcb->List,GET_WAIT_QUEUE_CNT(pAdapter,pTcb->SpecifiedQueueID)); - } - else - { - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte AC = 0; - - if(GET_VO_UAPSD(pEntry->WmmStaQosInfo)) - AC = 7; - else if(GET_VI_UAPSD(pEntry->WmmStaQosInfo)) - AC = 5; - else if(GET_BE_UAPSD(pEntry->WmmStaQosInfo)) - AC = 3; - else if(GET_BK_UAPSD(pEntry->WmmStaQosInfo)) - AC = 2; - - if(MgntGetBuffer(pTxFeedbackInfo->pAdapter, &pTcb, &pBuf)) - { - ConstructNullFunctionData( - pTxFeedbackInfo->pAdapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pEntry->MacAddr, - TRUE, - AC, - TRUE, - FALSE); - - - if(TxFeedbackInstallTxFeedbackInfoForTcb(pAdapter, pTcb)) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING, - pTxFeedbackInfo->pAdapter, - Ap_PsTxFeedbackCallback, - (PVOID)pEntry - ); - - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDING; - } - else - { - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - } - - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->priority = AC; - MgntSendPacket(pTxFeedbackInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, pTxFeedbackInfo->pAdapter->MgntInfo.LowestBasicRate); - } - } - } -} - - -VOID -AP_AllPowerSaveDisable( - IN PADAPTER pAdapter -) -{ - PADAPTER Adapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - IPSDisable(Adapter,FALSE, IPS_DISABLE_EXT_OPMODE); - LeisurePSLeave(Adapter, LPS_DISABLE_AP_MODE); - pPSC->bLeisurePs = FALSE; - // We should not control bFwCtrlLPS here because it does not cause NIC enter PS mode, - // it just setup the requirement for FwLPS mode. If disable bFwCtrlLPS, FwLPS mode - // will fail in some cases as it resumes. 2010.06.24. Added by tynli. - RT_TRACE(COMP_POWER, DBG_LOUD, ("AP_AllPowerSaveDisable()-----\n")); -} - -VOID -AP_AllPowerSaveReturn( - IN PADAPTER pAdapter -) -{ - PADAPTER Adapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - IPSReturn(Adapter, IPS_DISABLE_EXT_OPMODE); - // Return LPS by UpdateLPSStatus(). by tynli. 2011.01.04. - Adapter->HalFunc.UpdateLPSStatusHandler( - Adapter, - pPSC->RegLeisurePsMode, - pPSC->RegPowerSaveMode); - - pPSC->bGpioRfSw = REGISTRY(Adapter, bRegGpioRfSw); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("AP_AllPowerSaveReturn():pPSC->bInactivePs=%d, pPSC->bLeisurePs=%d,\n", pPSC->bInactivePs, pPSC->bLeisurePs)); -} - -// -// Description: -// When any client enters the PS mode, this AP queues all multicast packets until the dtim arrives. -// Here send all queued multicast packets by the specified queue id and fill the more data bit for each packet. -// Arguments: -// [in] pAdapter - -// The NIC adapter context of the AP mode. -// [in] QueueID - -// The HW queue where these multicast packets will be sent into. -// Return: -// None -// Assumption: -// Tx Spin Lock should not be acquired before calling this function. -// By Bruce, 2011-01-19. -// -VOID -AP_PS_SendAllMcastPkts( - IN PADAPTER pAdapter, - IN u1Byte QueueID - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_TCB pTcb = NULL; - RT_LIST_ENTRY tmpList; - OCTET_STRING osMpdu; - BOOLEAN PreGroupTimSet = (BOOLEAN)pMgntInfo->TimBuf[2]; // Determine if the group traffic bit is set in the TIM info of the previous beacon. - RT_STATUS rtStatus; - - // Not AP mode. - if(!ACTING_AS_AP(pAdapter)) - return; - - // The Group Traffic bit isn't set in TIM in the previous Beacon. - if(!PreGroupTimSet) - return; - - // No packets queued in the group queue. - if(RTIsListEmpty(&(pMgntInfo->GroupPsQueue))) - return; - - // RT_TRACE_F(COMP_AP, DBG_LOUD, ("Send all Mcst/Bcst pkts!\n")); - - RTInitializeListHead(&tmpList); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - // - // We remove all TCBs from the PsQueue and insert into the tmp list to prevent that the TCBs may be recurcively - // inserted back into the PsQueue when the client enters and leaves PS mode frequently. - // By Bruce, 2010-06-02. - // - while( !RTIsListEmpty(&(pMgntInfo->GroupPsQueue)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pMgntInfo->GroupPsQueue)); - RTInsertTailList(&tmpList, &(pTcb->List)); - } - while( !RTIsListEmpty(&tmpList) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&tmpList); - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(pAdapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - // Send the multicast packet to the higer queue because we want these packets sent as soon as possible - // after the beacon with TIM group bit set. - pTcb->SpecifiedQueueID = QueueID; - - if(!RTIsListEmpty(&tmpList)) - { // If there are still packets in queue, set more data bit. - SET_80211_HDR_MORE_DATA(osMpdu.Octet, 1); - } - else - { - SET_80211_HDR_MORE_DATA(osMpdu.Octet, 0); - } - - rtStatus = TransmitTCB(pAdapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - { - RTInsertTailListWithCnt(Get_WAIT_QUEUE(pAdapter, pTcb->SpecifiedQueueID), &pTcb->List,GET_WAIT_QUEUE_CNT(pAdapter,pTcb->SpecifiedQueueID)); - } - } - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -/**********************************************************************/ -//Function: AP_VHTCheckHTCap(): To Get bandwidth in VHT Case -//Author: Sherry -//Date: 20111227 -/**********************************************************************/ -VOID -AP_VHTResetSTAEntry ( - PADAPTER Adapter, - PRT_WLAN_STA pSTAEntry -) -{ - pSTAEntry->VHTInfo.bEnableVHT = FALSE; - - // LDPC support - CLEAR_FLAGS(pSTAEntry->VHTInfo.LDPC); - - // STBC support - CLEAR_FLAGS(pSTAEntry->VHTInfo.STBC); -} - -BOOLEAN -AP_VHTCheckVHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN OCTET_STRING asocpdu -) -{ - pu1Byte pVHTCap; - OCTET_STRING osVHTCap = PacketGetElement(asocpdu, EID_VHTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - //Check pEntry WirelessMode - //1 Set Wireless Mode - if(osVHTCap.Length != 0) - { - if((pEntry->WirelessMode != WIRELESS_MODE_N_24G) && (pEntry->WirelessMode != WIRELESS_MODE_N_5G)) - return FALSE; - - pEntry->VHTInfo.bEnableVHT = TRUE; - pVHTCap = (pu1Byte)osVHTCap.Octet; - - if(pEntry->WirelessMode == WIRELESS_MODE_N_24G) - pEntry->WirelessMode = WIRELESS_MODE_AC_24G; - else - pEntry->WirelessMode = WIRELESS_MODE_AC_5G; - } - else - { - pEntry->VHTInfo.bEnableVHT = FALSE; - return TRUE; - } - - VHTCheckVHTCap(Adapter, pEntry, pVHTCap); - return TRUE; -} - - -VOID -AP_GetBandWidth( - IN PADAPTER Adapter, - OUT CHANNEL_WIDTH* pChnlBW, - OUT EXTCHNL_OFFSET* pExtChnlOffset -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PMGNT_INFO pDefaultMgntInfo = GetDefaultMgntInfo(Adapter); - - PRT_CHANNEL_INFO pDefChnlInfo = GET_CHNL_INFO(pDefaultMgntInfo); - - - EXTCHNL_OFFSET ExtChnlOffset= EXTCHNL_OFFSET_NO_EXT; - CHANNEL_WIDTH ChnlWidth; - - - ChnlWidth = (CHANNEL_WIDTH)AP_CheckBwWidth(pDefaultAdapter); - RT_TRACE(COMP_AP, DBG_LOUD, ("AP_GetBandWidth(): set to %d mode Ch=%d\n", ChnlWidth, pMgntInfo->dot11CurrentChannelNumber)); - - //[Win 7] Two Port Issue - // Extension Port Must Set Offset Accroding to Default Port's if he connected - // by Bohn, 2009.06.05 - if(!ACTING_AS_AP(pDefaultAdapter) && pDefaultMgntInfo->bMediaConnect) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Def Connected.\n")); - ExtChnlOffset = pDefChnlInfo->Ext20MHzChnlOffsetOf40MHz; - } - else - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Def Not Connected.\n")); - - if(ChnlWidth == CHANNEL_WIDTH_80 && pMgntInfo->dot11CurrentChannelNumber == 165) - ChnlWidth = CHANNEL_WIDTH_40; - - if(ChnlWidth == CHANNEL_WIDTH_20) - ExtChnlOffset = EXTCHNL_OFFSET_NO_EXT; - else - { - if(IS_WIRELESS_MODE_5G(Adapter)) - ExtChnlOffset = CHNL_GetExt20OffsetOf5G(pMgntInfo->dot11CurrentChannelNumber); - else if(ChnlWidth == CHANNEL_WIDTH_80) - { - if(pMgntInfo->dot11CurrentChannelNumber == 1 || pMgntInfo->dot11CurrentChannelNumber == 5) - ExtChnlOffset = EXTCHNL_OFFSET_UPPER; - else - ExtChnlOffset = EXTCHNL_OFFSET_LOWER; - } - else - ExtChnlOffset =(pMgntInfo->dot11CurrentChannelNumber<=7)? EXTCHNL_OFFSET_UPPER:EXTCHNL_OFFSET_LOWER; - } - } - RT_TRACE(COMP_AP , DBG_LOUD, ("ExtChnlOffset=%d\n", ExtChnlOffset)); - - - *pChnlBW = ChnlWidth; - *pExtChnlOffset = ExtChnlOffset; -} - -VOID -AP_SetBandWidth( - IN PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PMGNT_INFO pDefaultMgntInfo = GetDefaultMgntInfo(Adapter); - - EXTCHNL_OFFSET ExtChnlOffset= EXTCHNL_OFFSET_NO_EXT; - CHANNEL_WIDTH ChnlWidth; - - AP_GetBandWidth(Adapter, &ChnlWidth, &ExtChnlOffset); - RT_TRACE(COMP_AP, DBG_LOUD,("AP_SetBandWidth: ChnlWidth %d \n", ChnlWidth)); - - if(Adapter->bInHctTest ) - { - if(!((pDefaultMgntInfo->mAssoc || pDefaultMgntInfo->mIbss) && (!ACTING_AS_AP(pDefaultAdapter)))) - { - CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlWidth, ExtChnlOffset); - CHNL_SetChnlInfoFromDestPort(pDefaultAdapter, Adapter); - } - else - { - CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlWidth, ExtChnlOffset); - } - } - else - { - CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlWidth, ExtChnlOffset); - } -} - - -u1Byte -AP_CheckBwWidth ( - PADAPTER Adapter -) -{ - u1Byte ret = (u1Byte)CHANNEL_WIDTH_80; - - // XP, Win7 Follow default port first. (Two port) - // XP, Vista bCurBW40MHz <- pHTInfo->bRegBW40MHz (One port) - GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__BW,NULL,(pu1Byte)(&ret)); - - if(Adapter->bInHctTest) - ret = CHANNEL_WIDTH_20; - - if (Adapter->MgntInfo.bRegVht24g == 1) - ret = CHANNEL_WIDTH_40; - - RT_TRACE(COMP_AP, DBG_TRACE, ("AP_CheckBwWidth(): set to %s mode\n", (ret==CHANNEL_WIDTH_80)?"80MHz":"20_40MHz")); - return ret; - -} - -// -// Description: Handle incoming Association Request. -// Output: Return TRUE if we will response the incoming auth frame, FALSE o.w.. -// -// 2005.06.01, by rcnjko. -// -BOOLEAN -AP_OnAsocReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN OCTET_STRING asocpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte asSta; - PRT_WLAN_STA pEntry = NULL; - u2Byte AsocStatusCode; - OCTET_STRING osSupRates, osExSupRates, osQosInfo, osSsid; - int i; - u1Byte rate; - BOOLEAN bQosSTA = FALSE, bIndicate = TRUE; - BOOLEAN bSendRsp = TRUE; - u8Byte curTime = PlatformGetCurrentTime(); - - - FunctionIn(COMP_MLME); - // Check Bssid. - if(!eqMacAddr(pMgntInfo->Bssid, Frame_Addr3(asocpdu))) - { - RT_PRINT_ADDR(COMP_MLME, DBG_WARNING, "AP_OnAsocReq(): [WARNING] Mismatch Bssid = ", Frame_Addr3(asocpdu)); - return FALSE; - } - - // Check ssid. - osSsid = PacketGetElement(asocpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(!CompareSSID(osSsid.Octet, osSsid.Length, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length)) - { - RT_PRINT_STR(COMP_MLME, DBG_WARNING, "AP_OnAsocReq(): [WARNING] Mismatch SSID = ", osSsid.Octet, osSsid.Length); - return FALSE; - } - - // Initialize default value for Aassociation Response. - AsocStatusCode = StatusCode_Unspecified_failure; - - // Gather information from incoming Associate Request frame. - asSta = Frame_Addr2(asocpdu); - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "AP_OnAsocReq(): Associating Addr = ", asSta); - - // Check if the STA is authenticated. - pEntry = AsocEntry_GetEntry(pMgntInfo, asSta); - if(pEntry == NULL) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("[WARNING] pEntry == NULL\n")); - return FALSE; - } - if( !((pEntry->AuthAlg == OPEN_SYSTEM && pEntry->AuthPassSeq == 2) || - (pEntry->AuthAlg == SHARED_KEY && pEntry->AuthPassSeq == 4) ) ) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("[WARNING] !((pEntry->AuthAlg == OPEN_SYSTEM && pEntry->AuthPassSeq == 2\n")); - return FALSE; - } - - // Check RSN-IE if necessary. - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK || - pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPA2PSK ) - { - if( !AP_CheckRSNIE(Adapter, pEntry, asocpdu) ) - { - RT_TRACE_F(COMP_AP, DBG_LOUD, ("AP_CheckRSNIE return fail\n")); - // If under WDI, let WDI decide whether to accept or not - if (WPS_OnAsocReq(Adapter, &bIndicate) == FALSE) - { - if( !OS_SUPPORT_WDI(Adapter) ) - { - RT_TRACE_F(COMP_AP, DBG_LOUD, ("Skip this association req because AP_CheckRSNIE returns failure and WPS_OnAsocReq is false\n")); - return FALSE; - } - } - } - } - - if(pEntry->bAssociated) - { - // - // If the STA failed to receive the AssocRsp previously sent, - // it may keep retry but we have already indicate asoc complete to OS and - // 4-way is started. In this case, we indicate disassociation and process the AsocReq - // to prevent association failure. 2011.05.31, haich. - // - if(GET_80211_HDR_RETRY(asocpdu.Octet)) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("[WARNING] Received Association Req from associated clietn with retry bit, skip this packet!\n")); - return FALSE; - } - pMgntInfo->pCurrentSta = pEntry; - DrvIFIndicateDisassociation(Adapter, unspec_reason, pEntry->MacAddr); - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("[WARNING] Received Association Req from associated clietn without retry bit, idnicate disassociation event!\n")); - //return FALSE; - } - - //vivi add this if condition, if we have get AID before, do not get different AID second time, 20110719 - if(pEntry->AID == 0) - { - // Update association table. - pEntry->AID = AsocEntry_AssignAvailableAID(pMgntInfo, asSta); - } - - pEntry->AssociatedMacId = (u1Byte) MacIdRegisterMacIdForAssociatedID(Adapter, MAC_ID_OWNER_INFRA_AP, pEntry->AID); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("pentry AID %d AssociatedMacId %d\n", pEntry->AID, pEntry->AssociatedMacId)); - - //YJ, add for TX RPT, 111213 - if(pMgntInfo->MaxMACID < pEntry->AssociatedMacId) - { - pMgntInfo->MaxMACID = pEntry->AssociatedMacId; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TX_RPT_MAX_MACID, (pu1Byte)(&(pMgntInfo->MaxMACID))); - } -//} - pEntry->bAssociated = TRUE; - AsocEntry_UpdateTimeStamp(pEntry); - - // Get the supported rate of the STA. - pEntry->bdSupportRateEXLen = 0; - osSupRates = PacketGetElement(asocpdu, EID_SupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osSupRates.Length != 0) - { - CopyMem( pEntry->bdSupportRateEXBuf, osSupRates.Octet, osSupRates.Length); - pEntry->bdSupportRateEXLen = osSupRates.Length; - } - osExSupRates = PacketGetElement(asocpdu, EID_ExtSupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osExSupRates.Length != 0) - { - CopyMem( pEntry->bdSupportRateEXBuf+pEntry->bdSupportRateEXLen, osExSupRates.Octet, osExSupRates.Length); - pEntry->bdSupportRateEXLen += osExSupRates.Length; - } - - // Get highest supported rate of the STA. - pEntry->HighestOperaRate = pMgntInfo->LowestBasicRate & 0x7f; - for(i = 0; i < pEntry->bdSupportRateEXLen; i++) - { - // - // Check if this rate is supported by ourself - // If we do not support this rate, just not add to support rate list. - // - if(!MgntIsRateSupport(pEntry->bdSupportRateEXBuf[i], pMgntInfo->dot11OperationalRateSet)) - continue; - - if( (pEntry->bdSupportRateEXBuf[i] & 0x7f) > pEntry->HighestOperaRate) - pEntry->HighestOperaRate = pEntry->bdSupportRateEXBuf[i] & 0x7f; - } - - // Update WirelessMode. 1st part handle the 2.4G band, 2nd part handle 5G band. - if(IS_WIRELESS_MODE_24G(Adapter)) - { - pEntry->WirelessMode = WIRELESS_MODE_B; - for(i = 0; i < pEntry->bdSupportRateEXLen; i++) - { - rate = (pEntry->bdSupportRateEXBuf[i] & 0x7f); - if( !MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) && - MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_G) ) - { - pEntry->WirelessMode = WIRELESS_MODE_G; - break; - } - } - } - else - { - pEntry->WirelessMode = WIRELESS_MODE_A; - } - - // STA is associated sucessfully. - AsocStatusCode = StatusCode_success; - - // AP QOS mode select - if((pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) - ||(pMgntInfo->pStaQos->CurrentQosMode & QOS_WMMSA)) - { - osQosInfo = PacketGetElement(asocpdu, EID_Vendor, OUI_SUB_WMM, OUI_SUBTYPE_WMM_INFO); - if(osQosInfo.Length != 0) - { - pEntry->QosMode = QOS_WMM | QOS_WMMSA; - bQosSTA = TRUE; - pEntry->WmmStaQosInfo = GET_WMM_INFO_ELE_QOS_INFO_FIELD(osQosInfo.Octet); - } - else - { - pEntry->QosMode = QOS_DISABLE; - bQosSTA = FALSE; - } - } - else if(pMgntInfo->pStaQos->CurrentQosMode >= QOS_EDCA) - { - osQosInfo = PacketGetElement(asocpdu, EID_QoSCap, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osQosInfo.Length != 0) - { - pEntry->QosMode = QOS_EDCA | QOS_HCCA; - bQosSTA = TRUE; - } - else - { - pEntry->QosMode = QOS_DISABLE; - bQosSTA = FALSE; - } - } - - // Update STA HT capability, and supported rate sets for all of the STA. - if(pMgntInfo->pHTInfo->bCurrentHTSupport && pMgntInfo->pStaQos->CurrentQosMode >= QOS_WMM) - { - if(AP_HTCheckHTCap(Adapter, pEntry, asocpdu) == FALSE) - return FALSE; - - if(pMgntInfo->pVHTInfo->bCurrentVHTSupport) - { - if(AP_VHTCheckVHTCap(Adapter, pEntry, asocpdu) == FALSE) - return FALSE; - } - } - - - // Enable protection mode and Disable short slot time if an [B-mode STA joined] or[ G-mode Connect to Soft N AP] - // Do not update bUseProtection bit when G mode STA add or leave. 2010.11.24. by tynli. - if(pEntry->WirelessMode == WIRELESS_MODE_B) - { - ActUpdate_ProtectionMode(Adapter, TRUE); - - if(pEntry->WirelessMode == WIRELESS_MODE_B) - pMgntInfo->mCap &= (~cShortSlotTime); - else - pMgntInfo->mCap |= (cShortSlotTime); - ActUpdate_mCapInfo(Adapter, pMgntInfo->mCap); - } - - // Update the Operation mode field in HT Info element. - if(IS_WIRELESS_MODE_N(Adapter)) - { - if(pEntry->WirelessMode == WIRELESS_MODE_B || pEntry->WirelessMode == WIRELESS_MODE_G) - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_MIXED; - else - { - if(CHNL_RUN_ABOVE_40MHZ(pMgntInfo) && (pEntry->WirelessMode == WIRELESS_MODE_N_24G)) - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_40MHZ_PROTECT; - else - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_NO_PROTECT; - } - } - - - // - // Association Request. - // - AsocEntry_UpdateAsocInfo(Adapter, - pEntry->MacAddr, - NULL, - 0, - ALLOCATE_ASOC_REQ); - AsocEntry_UpdateAsocInfo(Adapter, - pEntry->MacAddr, - asocpdu.Octet, - asocpdu.Length, - UPDATE_ASOC_REQ); - - // - // IE from OS that is to be carried in Association Response. - // - AsocEntry_UpdateAsocInfo(Adapter, - pEntry->MacAddr, - NULL, - 0, - ALLOCATE_ASOC_RSP_IE_FROM_OS); - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP && bIndicate) - { - // - // OS will make the direct OID call OID_DOT11_INCOMING_ASSOCIATION_DECISION - // in the status indication thread. - // So after the status indication returns, the association decision shall be - // cached in the station entry already. We need to process it now. - // - pMgntInfo->pCurrentSta = pEntry; - DrvIFIndicateIncommingAssociationStart(Adapter); - DrvIFIndicateIncommingAssocReqRecv(Adapter); - if(OS_SUPPORT_WDI(Adapter)) - {// let WDI to decide whether to send the rsp - bSendRsp = FALSE; - } - else - if(!pEntry->bOsDecisionMade) - { - RT_TRACE_F(COMP_INDIC, DBG_WARNING, - ("[WARNING] OS did not make decision whether to accept the AsocReq.\n")); - - AsocStatusCode = StatusCode_Unspecified_failure; - } - else if(pEntry->bNotAcceptedByOs) - { - RT_TRACE_F(COMP_INDIC, DBG_WARNING, - ("[WARNING] the AssocReq is not accepted by OS.\n")); - - AsocStatusCode = pEntry->OsReasonCode; - pEntry->bNotAcceptedByOs = FALSE; // clear - } - } -#if (WPS_SUPPORT == 1) - pEntry->SimpleConfigInfo = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUBTYPE_DONT_CARE); -#endif // #if (WPS_SUPPORT == 1) - - // Save parameters --------------------------------------------- - // This client is associated our AP successfully. - // These actions must be updated before sending assoication response because there may be some packets will be - // received immediately after sending the response packet. - if(AsocStatusCode == StatusCode_success) - { - // Change the last scan complete time to block scan request for a while from the default port. - // If the scan process is executed, the next handshake may fail because this port is not in the - // correct channel now. - MultiportRecordLastScanTime(Adapter); - Adapter->LastConnectionActionTime = curTime; - pEntry->Capability = GET_ASOC_REQ_CAPABILITY_INFO(asocpdu.Octet); - pEntry->usListenInterval = GET_ASOC_REQ_LISTEN_INTERVAL(asocpdu.Octet); - pEntry->AssociationUpTime = curTime; - - P2P_OnAssocReqAccept(Adapter, pRfd, &asocpdu); - WFD_OnAssocReqAccept(Adapter, pRfd, &asocpdu); - } - - if(bSendRsp) - { - AP_SendAsocRsp(Adapter, pEntry, PacketGetType(asocpdu) == Type_Reasoc_Req, bQosSTA, AsocStatusCode); - } - - AsocEntry_UpdateAsocInfo(Adapter, - pEntry->MacAddr, - NULL, - 0, - FREE_ASOC_REQ); - - AsocEntry_UpdateAsocInfo(Adapter, - pEntry->MacAddr, - NULL, - 0, - FREE_ASOC_RSP_IE_FROM_OS); - - if(pEntry->HTInfo.bEnableHT) - { - u4Byte Length = 0; - OCTET_STRING BroadcomElement; - FillOctetString(BroadcomElement, NULL, 0); - - BroadcomElement = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_BROADCOM_IE_1, OUI_SUBTYPE_DONT_CARE); - Length += BroadcomElement.Length; - BroadcomElement = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_BROADCOM_IE_2, OUI_SUBTYPE_DONT_CARE); - Length += BroadcomElement.Length; - BroadcomElement = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_BROADCOM_IE_3, OUI_SUBTYPE_DONT_CARE); - Length += BroadcomElement.Length; - - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40|| - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104 - ||pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) - { - //DbgPrint("WEP DON't Use AMSDU\n"); - pEntry->IOTAction = 0; - } - - OnMimoPs(Adapter, pRfd,&asocpdu); - - } - - FunctionOut(COMP_MLME); - - return TRUE; -} - -VOID -AP_SendAsocRsp( - IN ADAPTER *pAdapter, - IN RT_WLAN_STA *pEntry, - IN BOOLEAN bReassoc, - IN BOOLEAN bQosSta, - IN u2Byte status - ) -{ - MGNT_INFO *pMgntInfo = &pAdapter->MgntInfo; - MGNT_INFO *pDefaultMgntInfo = GetDefaultMgntInfo(pAdapter); - BOOLEAN bUseRAMask = FALSE; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - // Send AssocRsp. - SendAssociateRsp( - pAdapter, - pEntry->MacAddr, // asocStaAddr - pMgntInfo->mCap, // asocCap - status, // asocStatusCode - pEntry->AID, // asocID - bReassoc, // bReAssocRsp - bQosSta - ); - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - if(bUseRAMask) - { - AP_InitRateAdaptiveState(pAdapter, pEntry); - pAdapter->HalFunc.UpdateHalRAMaskHandler( - pAdapter, - pEntry->AssociatedMacId, - pEntry, // have to consider we are G but sta are N - 0 - ); - } - else - { - pAdapter->HalFunc.UpdateHalRATRTableHandler( - pAdapter, - &pMgntInfo->dot11OperationalRateSet, - pMgntInfo->dot11HTOperationalRateSet,pEntry); - } - - // Update RTS init rate after we set RA MASK. by tynli. 2010.11.25. - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)&pAdapter); - - if(!pMgntInfo->bWiFiConfg && !pAdapter->bInHctTest) - pAdapter->HalFunc.HalRxAggrHandler(pAdapter, TRUE); - - // Added by Annie, 2005-06-30. - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK || pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPA2PSK) - { -#if (WPS_SUPPORT == 1) - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pDefaultMgntInfo); - BOOLEAN bWpsInProgress = pSimpleConfig->bEnabled; -#else - BOOLEAN bWpsInProgress = FALSE; -#endif - if( (MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_NORMAL || - MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_IBSS_EMULATED || - MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_EXT_AP) && - !bWpsInProgress) - Authenticator_OnAuthenticationRequest(pAdapter, &pEntry->perSTAKeyInfo); - } - - - // - // 061227, rcnjko: - // Just Indicate association start and association complete events, - // connection start and connection complete events will be indicate up - // when UI set the fake profile before. - // - if(MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_LINUX) - { - MgntUpdateAsocInfo(pAdapter, UpdateAsocPeerAddr, pEntry->MacAddr, 6); // 061204, rcnjko: this is a MUST before indicating association related event. - DrvIFIndicateAssociationStart(pAdapter); - DrvIFIndicateAssociationComplete(pAdapter, RT_STATUS_SUCCESS); - } - else if(MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_VWIFI_AP) - { - pMgntInfo->pCurrentSta = pEntry; - DrvIFIndicateIncommingAssociationComplete(pAdapter, status); - } - - AsocEntry_UpdateAsocInfo(pAdapter, - pEntry->MacAddr, - NULL, - 0, - FREE_ASOC_RSP); - -} - -#else - - -#endif diff --git a/network/wlan/WDI/COMMON/ApEngine.h b/network/wlan/WDI/COMMON/ApEngine.h deleted file mode 100644 index 675b5550..00000000 --- a/network/wlan/WDI/COMMON/ApEngine.h +++ /dev/null @@ -1,395 +0,0 @@ - - -// -// 2011/06/01 MH Add for AP mode switch for code and data memory collection. -// - -#define AP_MODE_SUPPORT 1 - -// -// Wrapper class of AP mode information. -// -typedef struct _RT_AP_INFO{ - DECLARE_RT_OBJECT(RT_AP_INFO); - - BOOLEAN bSupportWmm; // Determine if our AP supports WMM. - BOOLEAN bSupportWmmUapsd; // Determine if our AP supports WMM UAPSD. - u1Byte WmmParaCnt; // WMM parameter Set Count. - OCTET_STRING osWmmAcParaIE; - u1Byte WmmAcParaBuf[WMM_PARAM_ELEMENT_SIZE]; // Max WMM parameter size is 24 octets. - - BOOLEAN bSupportCountryIe; // Determine if our AP supports dot11d. - OCTET_STRING osCountryIe; - u1Byte CountryIeBuf[MAX_IE_LEN]; - - BOOLEAN bSupportPowerConstraint; // Determine if our AP supports Power Constraint. - OCTET_STRING osPowerConstraintIe; - u1Byte PowerConstraintBuf[MAX_DOT11_POWER_CONSTRAINT_IE_LEN]; -}RT_AP_INFO, *PRT_AP_INFO; - - -#define GET_AP_INFO(__pMgntInfo) ( (PRT_AP_INFO)((__pMgntInfo)->pApModeInfo) ) - -// The timeout value for those packets queued in the AP. -#define AP_CLIENT_PS_QUEUE_TIMEOUT_SEC 4 -#define AP_CLIENT_PS_QUEUE_TIMEOUT_LOGO_SEC 60 - -#define AP_CHNAGE_CLIENT_PS_STATE(__pAdapter, __pEntry, __bPowerSave) \ -{ \ - if(__pEntry->bPowerSave != __bPowerSave) \ - { \ - __pEntry->bPowerSave = __bPowerSave; \ - if(__bPowerSave) \ - __pAdapter->MgntInfo.PowerSaveStationNum ++; \ - else \ - __pAdapter->MgntInfo.PowerSaveStationNum --; \ - P2PNotifyClientPSChange(GET_P2P_INFO(__pAdapter)); \ - } \ -} - -//------------------------------------------------------------------------------ -// AssociateEntry related operations. -//------------------------------------------------------------------------------ -PRT_WLAN_STA -AsocEntry_GetEntry( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr); - - -PRT_WLAN_STA -AsocEntry_GetEntryByMacId( - IN PMGNT_INFO pMgntInfo, - IN u1Byte MacId - ); - -PRT_WLAN_STA -AsocEntry_GetFreeEntry( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr); - -BOOLEAN -AsocEntry_AddStation( - IN PADAPTER Adapter, - IN pu1Byte MacAddr, - IN AUTH_ALGORITHM AuthAlg); - -VOID -AsocEntry_ResetEntry( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry); - -VOID -AsocEntry_RemoveStation( - IN PADAPTER Adapter, - IN pu1Byte MacAddr); - -VOID -AsocEntry_UpdateTimeStamp( - IN PRT_WLAN_STA pEntry); - -BOOLEAN -AsocEntry_AnyStationAssociated( - IN PMGNT_INFO pMgntInfo - ); - -BOOLEAN -AsocEntry_IsStationAssociated( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr); - -VOID -AsocEntry_AgeFunction( - IN PADAPTER Adapter); - -VOID -AsocEntry_BecomeDisassoc( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry); - -PRT_WLAN_STA -AsocEntry_EnumStation( - IN PADAPTER Adapter, - IN ULONG nIndex); - -VOID -AsocEntry_ResetAll( - IN PADAPTER Adapter); - -VOID -AsocEntry_UpdateAsocInfo( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN pu1Byte Content, - IN u4Byte ContentLength, - IN ASOCENTRY_UPDATE_ASOC_INFO_ACTION Action - ); - -u1Byte -AsocEntry_AssignAvailableAID( - IN PMGNT_INFO pMgntInfo, - IN pu1Byte MacAddr); - - -VOID -AsocEntry_ResetAvailableAID( - IN PMGNT_INFO pMgntInfo, - IN u2Byte AID); - - -//------------------------------------------------------------------------------ -// AP mode engine. -//------------------------------------------------------------------------------ -VOID -AP_Reset( - IN PADAPTER Adapter); - - -VOID -Ap_SendDisassocWithOldChnlWorkitemCallback( - IN PVOID pContext - ); - -VOID -AP_DisconnectAfterSTANewConnected( - PADAPTER Adapter - ); - -VOID -AP_StatusWatchdog( - IN PADAPTER Adapter -); - -VOID -AP_DisassociateAllStation( - IN PADAPTER Adapter, - IN u1Byte asRsn); - -VOID -AP_SetupStartApInfo( - IN PADAPTER Adapter); - -VOID -AP_StartApRequest( - IN PVOID Context); - -BOOLEAN -AP_OnAuthOdd( - IN PADAPTER Adapter, - IN OCTET_STRING authpdu); - -BOOLEAN -AP_OnAsocReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN OCTET_STRING asocpdu - ); - -VOID -AP_SendAsocRsp( - IN ADAPTER *pAdapter, - IN RT_WLAN_STA *pEntry, - IN BOOLEAN bReassoc, - IN BOOLEAN bQosSta, - IN u2Byte status - ); - -BOOLEAN -AP_DisassociateStation( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSta, - IN u1Byte asRsn); - -VOID -AP_PS_ReturnAllQueuedPackets( - IN PADAPTER Adapter, - IN BOOLEAN bMulticastOnly); - -PRT_WLAN_STA -AP_PS_UpdateStationPSState( - IN PADAPTER Adapter, - IN POCTET_STRING posFrame - ); - -BOOLEAN -AP_PS_SendPacket( - IN PADAPTER Adapter, - IN PRT_TCB pTcb); - -VOID -AP_PS_FillTim( - IN PMGNT_INFO pMgntInfo); - -VOID -AP_PS_OnPSPoll( - IN PADAPTER Adapter, - IN OCTET_STRING osMpdu); - -BOOLEAN -AP_ForwardPacketWithFromDS( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN BOOLEAN bNeedCopy); - -BOOLEAN -AP_FromWdsToBss( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN BOOLEAN bNeedCopy); - -BOOLEAN -AP_FromBssToWds( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN BOOLEAN bNeedCopy); - -VOID -AP_WdsTx( - IN PADAPTER Adapter, - IN PRT_TCB pTcb); - -BOOLEAN -AP_CheckRSNIE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN OCTET_STRING asocpdu); - -void -AP_OnEAPOL( - IN PADAPTER Adapter, - IN PRT_RFD pRfd ); - - - -AP_STATE -GetAPState( - IN PADAPTER pAdapter - ); - -VOID -SetAPState( - IN PADAPTER pAdapter, - IN AP_STATE NewSatate - ); - - -VOID -AP_GetBandWidth( - IN PADAPTER Adapter, - OUT CHANNEL_WIDTH* pChnlBW, - OUT EXTCHNL_OFFSET* pExtChnlOffset -); - - - -//------------------------------------------------------------------------------ -// HT(High Throughput) related operation -//------------------------------------------------------------------------------ -VOID -AP_HTResetSTAEntry ( - PADAPTER Adapter, - PRT_WLAN_STA pSTAEntry - ); - -VOID -AP_VHTResetSTAEntry ( - PADAPTER Adapter, - PRT_WLAN_STA pSTAEntry - ); - -VOID -AP_InitRateAdaptive( - IN PADAPTER Adapter , - IN PRT_WLAN_STA pEntry - ); - - -u1Byte -AP_CheckBwWidth ( - PADAPTER Adapter - ); - -VOID -AP_InitRateAdaptiveState( - IN PADAPTER Adapter , - IN PRT_WLAN_STA pEntry - ); - -VOID -DelaySendBeaconTimerCallback( - IN PRT_TIMER pTimer - ); - - -RT_AP_TYPE -AP_DetermineApType( - IN PADAPTER pAdapter - ); - - -BOOLEAN -AP_DetermineAlive( - IN PADAPTER pAdapter - ); - - -VOID -AP_InitializeVariables( - IN PADAPTER pAdapter - ); - -VOID -Ap_AppendWmmIe( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -Ap_AppendCountryIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -Ap_AppendPowerConstraintIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -Ap_PsTxFeedbackCallback( - IN PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo -); - -VOID -AP_AllPowerSaveDisable( - IN PADAPTER pAdapter -); - -VOID -AP_AllPowerSaveReturn( - IN PADAPTER pAdapter -); - -VOID -AP_Restart( - IN PADAPTER Adapter -); - -VOID -AP_PS_SendAllMcastPkts( - IN PADAPTER pAdapter, - IN u1Byte QueueID - ); - -u1Byte -APGetCenterFrequency( - IN PADAPTER Adapter -); - -VOID -AP_SetBandWidth( - IN PADAPTER Adapter -); - - diff --git a/network/wlan/WDI/COMMON/Authenticator.c b/network/wlan/WDI/COMMON/Authenticator.c deleted file mode 100644 index 1746bbc3..00000000 --- a/network/wlan/WDI/COMMON/Authenticator.c +++ /dev/null @@ -1,1323 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Authenticator.tmh" -#endif - -//------------------------------------------------------------------------------ -// Authenticator related operations. -//------------------------------------------------------------------------------ - - -// On event - - -// Description: -// Output: -// Modify: -void -Authenticator_OnDeauthenticationRequest( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ) -{ - pKeyMgnt->EvntID = ASMEID_DeauthenticationRequest; - - Authenticator_StateDISCONNECTED(Adapter, pKeyMgnt->pWLanSTA); -} - - -// Description: -// Output: -// Modify: -void -Authenticator_OnAuthenticationRequest( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ) -{ - pKeyMgnt->EvntID = ASMEID_AuthenticationRequest; - - Authenticator_StateAUTHENTICATION(Adapter, pKeyMgnt->pWLanSTA); -} - - -// Description: -// Output: -// Modify: -void -Authenticator_OnReAuthenticationRequest( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ) -{ - pKeyMgnt->EvntID = ASMEID_ReAuthenticationRequest; - - Authenticator_StateAUTHENTICATION2(Adapter, pKeyMgnt->pWLanSTA); -} - - - - -// Description: According received EAPOL-key, enter the next state. -// Output: void -// Modify: Annie, 2005-07-02 -// Discard using condition pKeyMgnt->bPTKInstalled. -// Instead, I add a macro KeyMgntStateIsWaitingEAPOLKey to check the state. -void -Authenticator_OnEAPOLKeyRecvd( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt, - IN OCTET_STRING pdu - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PAUTH_GLOBAL_KEY_TAG pGlInfo = &pMgntInfo->globalKeyInfo; - PRT_WLAN_STA pEntry = pKeyMgnt->pWLanSTA; - pu1Byte pSTA_addr = Frame_pSaddr(pdu); - pu1Byte pAP_addr = Frame_pDaddr(pdu); - PEAPOL_KEY_STRUCT eapol_key_recvd; - OCTET_STRING SNonce; - OCTET_STRING RSNIE; - MsgType msg_type = type_unknow; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_OnEAPOLKeyRecvd()\n") ); - - pKeyMgnt->EvntID = ASMEID_EAPOLKeyRecvd; - - FillOctetString(pGlInfo->EapolKeyMsgRecvd, \ - pGlInfo->EAPOLMsgRecvd.Octet+LIB1X_EAPOL_HDRLEN, \ - pGlInfo->EAPOLMsgRecvd.Length-LIB1X_EAPOL_HDRLEN ); \ - - eapol_key_recvd = (PEAPOL_KEY_STRUCT)pGlInfo->EapolKeyMsgRecvd.Octet; - - //PRINT_DATA( ("EapolKeyMsgRecvd: "), pGlInfo->EapolKeyMsgRecvd.Octet, pGlInfo->EapolKeyMsgRecvd.Length); - RSNIE.Octet = NULL; - RSNIE.Length = 0; - - // Get the message number. - if( Message_KeyType(pGlInfo->EapolKeyMsgRecvd) == type_Pairwise ) - { - if( (Message_Error(pGlInfo->EapolKeyMsgRecvd) == 1) && - (Message_Request(pGlInfo->EapolKeyMsgRecvd) == 1)) - { - //Enter integrity failure state... - Authenticator_StateINTEGRITYFAILURE(Adapter, pEntry); - } - - if( (eapol_key_recvd->key_info[0]==0x01 && eapol_key_recvd->key_info[1]==0x09) || - ( eapol_key_recvd->key_info[0]==0x01 && eapol_key_recvd->key_info[1]==0x0a) || - ( eapol_key_recvd->key_info[0]==0x03 && eapol_key_recvd->key_info[1]==0x0a) || - ( eapol_key_recvd->key_info[0]==0x03 && eapol_key_recvd->key_info[1]==0x09) ) - { - if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA) - RSNIE = EAPOLkeyGetRSNIE( pGlInfo->EapolKeyMsgRecvd, EID_Vendor ); - else if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA2) - RSNIE = EAPOLkeyGetRSNIE( pGlInfo->EapolKeyMsgRecvd, EID_WPA2 ); - - if( RSNIE.Length != 0 ) - msg_type = type_4way2nd; // with RSNIE: msg 2 (159 or 161) - else - msg_type = type_4way4th; // msg 4 (135) - } - else - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("unknow pairwise EAPOL-key: info=0x%X-0x%X\n", eapol_key_recvd->key_info[0], eapol_key_recvd->key_info[1]) ); - } - } - else - { - // [AnnieNote] Windows zero-config may send 2-way message as 03-01. - // - //if( eapol_key_recvd->key_info[0]==0x03 && eapol_key_recvd->key_info[1]==0x11 ) // if group key index is fixed 1, key information is 03-11. - // msg_type = type_2way2nd; // group key msg2 (155) - //else - // RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("unknow group EAPOL-key: info=0x%X-0x%X\n", eapol_key_recvd->key_info[0], eapol_key_recvd->key_info[1]) ); - - msg_type = type_2way2nd; - } - - // Check state. - if( KeyMgntStateIsWaitingEAPOLKey(pKeyMgnt) ) - { - - if( (pKeyMgnt->PrState==ASMPS_PTKSTART && msg_type==type_4way2nd ) || - ( pKeyMgnt->PrState==ASMPS_PTKINITNEGOTIATING && msg_type==type_4way2nd )) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Recvd 4-way message 2\n")); - pKeyMgnt->TimeoutCtr = 0; - - // AnnieTODO: if (1)k is pairwise and (2)MICVerified , then enter ASMPS_PTKINITNEGOTIATING state - // TODO: MIC Verify - SNonce = Message_KeyNonce( pGlInfo->EapolKeyMsgRecvd ); - CopyMem( pKeyMgnt->SNonce, SNonce.Octet, KEY_NONCE_LEN ); - - - CalcPTK( pAP_addr, pSTA_addr, pKeyMgnt->ANonce, pKeyMgnt->SNonce, - pGlInfo->PMK, PMK_LEN, pKeyMgnt->PTK_update, PTK_LEN ); - - if(!CheckEapolMIC(Adapter , pGlInfo->EAPOLMsgRecvd , pKeyMgnt->PTK_update , KEY_MIC_LEN )) - { - SendDeauthentication( Adapter, pSTA_addr , mic_failure ); - PlatformStallExecution(100); - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_RemoveStation\n")); - - AsocEntry_RemoveStation( Adapter , pSTA_addr); - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("MIC erroe\n")); - return; - } - - - Authenticator_StatePTKINITNEGOTIATING(Adapter, pEntry); - } - else if( pKeyMgnt->PrState==ASMPS_PTKINITNEGOTIATING && msg_type==type_4way4th ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Recvd 4-way message 4\n")); - pKeyMgnt->TimeoutCtr = 0; - - // if (1)k is pairwise and (2)MICVerified , then enter ASMPS_PTKINITDONE state - if(!CheckEapolMIC(Adapter , pGlInfo->EAPOLMsgRecvd , pKeyMgnt->PTK_update , KEY_MIC_LEN )) - { - SendDeauthentication( Adapter, pSTA_addr , mic_failure ); - PlatformStallExecution(100); - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_RemoveStation case 2\n")); - - AsocEntry_RemoveStation( Adapter , pSTA_addr); - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("MIC erroe\n")); - return; - } - - PlatformMoveMemory(&pEntry->perSTAKeyInfo.RxIV, &((PEAPOL_KEY_STRUCT)eapol_key_recvd)->key_rsc[0], 6); - pEntry->perSTAKeyInfo.RxIV &= UINT64_C(0x0000ffffffffffff); - //RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("pEntry->perSTAKeyInfo.RxIV = 0x%16"i64fmt"x", pEntry->perSTAKeyInfo.RxIV)); - - Authenticator_StatePTKINITDONE(Adapter, pEntry); - } - else if( pKeyMgnt->GrState == ASMGS_REKEYNEGOTIATING && msg_type==type_2way2nd ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Recvd 2-way message 2\n")); - pKeyMgnt->TimeoutCtr = 0; - - // if (1)k is group and (2)MICVerified , then enter ASMGS_REKEYESTABLISHED state - // 2012/01/17 CCW If 4-way check is ok, we need not to check 2-way again. - /* - if(!CheckEapolMIC(Adapter , pGlInfo->EAPOLMsgRecvd , pKeyMgnt->PTK_update , KEY_MIC_LEN )) - { - SendDeauthentication( Adapter, pSTA_addr , mic_failure ); - PlatformStallExecution(100); - AsocEntry_RemoveStation( Adapter , pSTA_addr); - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("MIC erroe\n")); - return; - } - */ - Authenticator_StateREKEYESTABLISHED(Adapter, pEntry); - } - else - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_OnEAPOLKeyRecvd(): Unexpected case: PrState=%d, GrState=%d, msg_type=%d\n", - pKeyMgnt->PrState, pKeyMgnt->GrState, msg_type ) ); - } - - } - else - { - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_OnEAPOLKeyRecvd(): Unexpected State!!\n")); - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("--- TimeoutCounter:%d, PairwiseKeyState:%d, GroupKeyState:%d ---\n", pKeyMgnt->TimeoutCtr, pKeyMgnt->PrState, pKeyMgnt->GrState)); - } - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_OnEAPOLKeyRecvd()\n") ); - -} - - -// Description: Get RSNIE in parsing EAPOL-key packet. -// Output: OCTET_STRING: RSNIE string. -// Modify: Annie, 2005-07-11 -// Reference: PacketGetElement(), which is only used for management frame. -// In fact, this two function should be merged and reused. -// -OCTET_STRING -EAPOLkeyGetRSNIE( - IN OCTET_STRING eapolkeypkt, - IN ELEMENT_ID ID - ) -{ - u2Byte offset; - //u2Byte length = eapolkeypkt.Length; - OCTET_STRING ret={0,0}; - u1Byte WPATag[] = {0x00, 0x50, 0xf2, 0x01}; - u1Byte WPA2Tag[] = {0x00, 0x0f, 0xac}; - u1Byte temp; - - offset = 95; - temp = eapolkeypkt.Octet[offset]; - - if( (temp==ID) && (!PlatformCompareMemory(eapolkeypkt.Octet+offset+2, WPATag, sizeof(WPATag) )) ) - { - ret.Length = eapolkeypkt.Octet[offset+1]; // RSNIE header - ret.Octet = eapolkeypkt.Octet + offset +2; // RSNIE Length field - } - - if( (temp==ID) && (!PlatformCompareMemory(eapolkeypkt.Octet+offset+4, WPA2Tag, sizeof(WPA2Tag) )) ) - { - ret.Length = eapolkeypkt.Octet[offset+1]; // RSNIE header - ret.Octet = eapolkeypkt.Octet + offset +2; // RSNIE Length field - } - - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("PacketGetRSNIE(): Length=%d\n", ret.Length )); - - return ret; -} - - - -void -KeyMgntTimeout( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PAUTH_PKEY_MGNT_TAG pKeyMgnt; - int i; - int AsocNum = 0; - PRT_WLAN_STA pEntry; - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning!!] KeyMgntTimeout(): STA mode\n")); - return; - } - else - { - //RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("KeyMgntTimeout(): AP mode, CurrentTimeSlot=%d\n", pMgntInfo->globalKeyInfo.CurrentTimeSlot )); - } - - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK || - pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPA2PSK || - pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA2) - { - // Query all stations' state and their timeout count. - for( i=0; iAsocEntry[i].bUsed ) - continue; - - pKeyMgnt = &pMgntInfo->AsocEntry[i].perSTAKeyInfo; - - // Print Dbg Message. 2005-07-25, Annie.------------ - AsocNum++; - pEntry = pKeyMgnt->pWLanSTA; - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[STA:%d] %02X-%02X-%02X-%02X-%02X-%02X, MicErrorCnt=%d, WEPErrorCnt=%d\n", - i, pEntry->MacAddr[0], pEntry->MacAddr[1], pEntry->MacAddr[2], pEntry->MacAddr[3], pEntry->MacAddr[4], pEntry->MacAddr[5], - pKeyMgnt->MicErrorCnt, pKeyMgnt->WEPErrorCnt ) ); - //--------------------------------------------- - - if( KeyMgntStateIsWaitingEAPOLKey(pKeyMgnt) && pKeyMgnt->GrState != ASMGS_REKEYESTABLISHED ) - { - if( pKeyMgnt->TimeoutCtr >= MAX_TIMEOUT_CNT ) - { - pKeyMgnt->TimeoutCtr = 0; - Authenticator_OnTimeoutCountExceeded(Adapter, pKeyMgnt); - } - else - { - if( pMgntInfo->globalKeyInfo.CurrentTimeSlot != pKeyMgnt->TimeSlot_lastsend ) // consider 1st retry should wait for at least 1 second. Annie, 2005-07-12. - { - //RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("KeyMgntTimeout(): Retry! [TimeSlot:%"i64fmt"d, TimeoutCtr:%d]\n", - // pMgntInfo->globalKeyInfo.CurrentTimeSlot, (int)pKeyMgnt->TimeoutCtr )); - - pKeyMgnt->TimeoutCtr ++; - - if( pKeyMgnt->PrState == ASMPS_PTKSTART ) // waiting for 2nd msg in 4-way handshake - { - Authenticator_StatePTKSTART(Adapter, &pMgntInfo->AsocEntry[i]); - } - else if( pKeyMgnt->PrState == ASMPS_PTKINITNEGOTIATING ) // waiting for 4th msg in 4-way handshake - { - Authenticator_StatePTKINITNEGOTIATING(Adapter, &pMgntInfo->AsocEntry[i]); - } - else if( pKeyMgnt->GrState == ASMGS_REKEYNEGOTIATING ) // waiting for 2nd msg in 2-way handshake - { - Authenticator_StateREKEYNEGOTIATING(Adapter, &pMgntInfo->AsocEntry[i]); - } - } - else - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("KeyMgntTimeout(): equal TimeSlot. Not to retry.\n") ); - } - - } - - } - - } - - //RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("KeyMgntTimeout: AsocNum=%d, CurrentTimeSlot=%"i64fmt"d\n", AsocNum, pMgntInfo->globalKeyInfo.CurrentTimeSlot ) ); - - // Continue setting the timer only when RT_802_11AuthModeWPAPSK. - pMgntInfo->globalKeyInfo.CurrentTimeSlot ++; - PlatformSetTimer( Adapter, &pMgntInfo->globalKeyInfo.KeyMgntTimer, KEY_MGNT_INTERVAL ); - - } -} - - - - -// Description: -// Output: void -// Modify: Annie, 2005-07-12 -void -Authenticator_OnTimeoutCountExceeded( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_OnTimeoutCountExceeded!\n") ); - pKeyMgnt->EvntID = ASMEID_TimeOutExceeded; - - //pKeyMgnt->TimeoutCtr = 0; // it should be cleared in KeyMgntTimeout(). - - if( pKeyMgnt->PrState == ASMPS_PTKSTART || pKeyMgnt->PrState == ASMPS_PTKINITNEGOTIATING ) - { - Authenticator_StateDISCONNECT( Adapter, pKeyMgnt->pWLanSTA, four_way_tmout ); - - } - else if( pKeyMgnt->GrState == ASMGS_REKEYNEGOTIATING ) - { - Authenticator_StateKEYERROR( Adapter, pKeyMgnt->pWLanSTA, two_way_tmout ); - } - else - { - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_OnTimeoutCountExceeded(): Unexpected State!!\n")); - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("--- PairwiseKeyState:%d, GroupKeyState:%d ---\n", pKeyMgnt->PrState, pKeyMgnt->GrState)); - } -} - - -// Status handle - - -// Description: Disconnect the station -// Output: void -// Modify: Annie, 2005-07-12. -void -Authenticator_StateDISCONNECT( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA, - IN u1Byte ReasonCode - ) -{ - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pSTA->perSTAKeyInfo; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_StateDISCONNECT()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pSTA->perSTAKeyInfo.PrState = ASMPS_DISCONNECTE; - - if( AsocEntry_IsStationAssociated( &Adapter->MgntInfo, pSTA->MacAddr ) ) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Authenticator_StateDISCONNECT() \n")); - AP_DisassociateStation(Adapter, pKeyMgnt->pWLanSTA, ReasonCode); - } - - // UCT - //Authenticator_StateDISCONNECTED(Adapter, pSTA); // I'll call it in AP_DisassociateStation(). Marked by Annie, 2005-07-15. - -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateDISCONNECTED( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_StateDISCONNECTED()\n") ); - - if(!ACTING_AS_AP(Adapter)) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pSTA->perSTAKeyInfo.PrState = ASMPS_DISCONNECTED; - - // [AnnieTODO] GNoStations -- - - - // [Note] We don't have to clear PMK, ANonce and GTK here. - - // UCT - Authenticator_StateINITIALIZE(Adapter, pSTA); -} - -// Description: Initialize the pairwise key data on input STA. -// Output: void -// Modify: Annie, 2005-07-02 -// Discard using condition pKeyMgnt->bPTKInstalled. -// Instead, I add a macro KeyMgntStateIsWaitingEAPOLKey to check the state. - -void -Authenticator_StateINITIALIZE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pSTA->perSTAKeyInfo; - u1Byte RdmBuf[20], NonceBuf[KEY_NONCE_LEN]; - u1Byte i = 0; - - pKeyMgnt->pWLanSTA = pSTA; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StateINITIALIZE()\n") ); - - if( !ACTING_AS_AP(Adapter) - && !GET_TDLS_ENABLED(&(Adapter->MgntInfo)) - ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - PlatformZeroMemory( pKeyMgnt->SNonce, KEY_NONCE_LEN ); - - pKeyMgnt->TimeoutCtr = 0; - pKeyMgnt->TimeSlot_sendstart = 0; - pKeyMgnt->TimeSlot_lastsend = 0; - - if( Adapter->MgntInfo.SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK ) - { - // 3. 802.1x::PortMode = Disable; - pKeyMgnt->portMode = pmt_Disable; // [TODO] other auth mode - - // 4. 802.1x::PortSecure = 0; - pKeyMgnt->portSecure= psec_Unauthorized; // [TODO] other auth mode - } - - - // 1. MSK = 0 ...? - - // 2. GNoStations = 0 - // ...it's for group key update. I don't do it currently. Annie, 2005-07-01. - - // Rest ANonce - GetRandomBuffer( RdmBuf ); - for( i=0; i<16; i++ ) - { - NonceBuf[i] = RdmBuf[i]; - NonceBuf[16+i] = RdmBuf[19-i]; - } - - PlatformMoveMemory( pKeyMgnt->ANonce , NonceBuf , KEY_NONCE_LEN ); - - - // 5. RemovePTK - PlatformZeroMemory( pKeyMgnt->PTK, PTK_LEN ); - - pKeyMgnt->TempEncKey = NULL; - pKeyMgnt->TxMICKey = NULL; - pKeyMgnt->RxMICKey = NULL; - - //AP-WPA AES ,CCW - PlatformZeroMemory( pKeyMgnt->AESKeyBuf , AESCCMP_BLK_SIZE_TOTAL ); - - //pKeyMgnt->bPTKInstalled = FALSE; - pKeyMgnt->PInitAKeys = FALSE; - pKeyMgnt->GInitAKeys = FALSE; - pKeyMgnt->Pair = TRUE; // [AnnieNote] Why not FALSE?? 2005-07-18. - - // TODO: 6. Revome key from CAM - // [AnnieNote] - // (1) We can only clear the MAC address (instead of total 6 double-word) in per CAM entry. - // (2) When called by Authenticator_GlobalReset(), it takes a lot of I/O, and is H/W depended. - // Should we do it here? Or use workitem... ? - - //Remove key from SW/HW CAM table, Add by CCW - AP_RemoveKey( Adapter , pSTA ); - - // 7. Reset ReplayCounter - pKeyMgnt->KeyReplayCounter = 0; - - // 8. Reset SNonce - PlatformZeroMemory( pKeyMgnt->SNonce, KEY_NONCE_LEN ); - - // 9. Initialize TimeSlot_lastIntegrityFailed. - pKeyMgnt->TimeSlot_lastIntegrityFailed = 0; - - pKeyMgnt->RxIV = DEFAULT_INIT_RX_IV; - pKeyMgnt->TxIV = DEFAULT_INIT_TX_IV; - pKeyMgnt->KeyRSC = pKeyMgnt->TxIV; - - // Added by Annie for debug, 2005-07-25. - pKeyMgnt->MicErrorCnt = 0; - pKeyMgnt->WEPErrorCnt = 0; - - pKeyMgnt->PrState = ASMPS_INITIALIZE; - pKeyMgnt->GrState = ASMGS_INITIALIZE; - - - pSTA->keyindex = 0; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StateINITIALIZE()\n") ); - -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateAUTHENTICATION( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pSTA->perSTAKeyInfo.PrState = ASMPS_AUTHENTICATION; - - // [AnnieTODO] - // 1. GNoStations ++ - // 2. PTK = 0 - PlatformZeroMemory( pSTA->perSTAKeyInfo.PTK, PTK_LEN); - - PlatformZeroMemory(pSTA->perSTAKeyInfo.AESKeyBuf, AESCCMP_BLK_SIZE_TOTAL); - //pSTA->perSTAKeyInfo.bPTKInstalled = FALSE; - pSTA->perSTAKeyInfo.PInitAKeys = FALSE; - - // 3. 802.1x::PortControl = Auto - pSTA->perSTAKeyInfo.portControl = pct_Auto; - - // 4. 802.1x::PortMode = Enabled - pSTA->perSTAKeyInfo.portMode = pmt_Enable; - - // UCT - Authenticator_StateAUTHENTICATION2( Adapter, pSTA ); -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateAUTHENTICATION2( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StateAUTHENTICATION2()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - pSTA->perSTAKeyInfo.PrState = ASMPS_AUTHENTICATION2; - - // ANonce = Counter ++ - Adapter->MgntInfo.globalKeyInfo.ANonce[31] ++; //... [AnnieTODO] It needs a real addition! - - // PSK - Authenticator_StatePTKSTART(Adapter, pSTA); - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StateAUTHENTICATION2()\n") ); - -} - -// Description: -// Output: -// Modify: -void -Authenticator_StatePTKSTART( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PAUTH_GLOBAL_KEY_TAG pGlInfo = &pMgntInfo->globalKeyInfo; - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pSTA->perSTAKeyInfo; - u8Byte KeyReplayCounter = 0; - u1Byte temp[8] = {0}; - u1Byte indexi = 0; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StatePTKSTART()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pKeyMgnt->PrState = ASMPS_PTKSTART; - pKeyMgnt->PInitAKeys = FALSE; // To consider EAPOL-start case. - - // [AnnieTODO] - // 1. Construct 1st message in 4-way handshake. - // EAPOL(0, 0, 1, 0, 0, p, ANonce, 0, 0) - // 2. Send 1st msg - - pKeyMgnt->KeyReplayCounter ++; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Send 4-way message 1\n")); - //RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD , (" KeyReplayCounter = %08"i64fmt"x \n",pKeyMgnt->KeyReplayCounter )); - - - for( indexi = 0 ; indexi < 8 ; indexi++) - temp[indexi] = (u1Byte)((pKeyMgnt->KeyReplayCounter >>( (7-indexi) *8)) &0xff ); - - PlatformMoveMemory( &KeyReplayCounter , temp , 8 ); - - SendEapolKeyPacket( - Adapter, - pSTA->MacAddr, //StaAddr, - NULL, // Pointer to KCK (EAPOL-Key Confirmation Key). - NULL, // - type_Pairwise, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - FALSE, // EAPOL-Key Information field: Install Flag. - TRUE, // EAPOL-Key Information field: Key Ack bit. - FALSE, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - FALSE, // EAPOL-Key Information field: Secure bit. - FALSE, // EAPOL-Key Information field: Error bit. True for MIC failure report. - FALSE, // EAPOL-Key Information field: Requst bit. - KeyReplayCounter, // EAPOL-KEY Replay Counter field. //pSTA->perSTAKeyInfo.KeyReplayCounter - pKeyMgnt->ANonce, // EAPOL-Key Key Nonce field (32-byte). - 0, // EAPOL-Key Key RSC field (8-byte). - NULL, // Key Data field: Pointer to RSN IE, NULL if - NULL // Key Data field: Pointer to GTK, NULL if Key Data Length = 0. - ); - - pKeyMgnt->TimeSlot_sendstart = pGlInfo->CurrentTimeSlot; // added by Annie, 2005-07-12. - pKeyMgnt->TimeSlot_lastsend = pGlInfo->CurrentTimeSlot; - - // [Note] Don't do pSTA->perSTAKeyInfo.TimeoutCtr++ here! - // The counter is controlled in KeyMgntTimeout. - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StatePTKSTART()\n") ); -} - -// Description: -// Output: -// Modify: -void -Authenticator_StatePTKINITNEGOTIATING( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PAUTH_GLOBAL_KEY_TAG pGlInfo = &pMgntInfo->globalKeyInfo; - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pSTA->perSTAKeyInfo; - - u8Byte KeyReplayCounter = 0; - u1Byte temp[8] = {0}; - u1Byte indexi = 0; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StatePTKINITNEGOTIATING()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - pSTA->perSTAKeyInfo.PrState = ASMPS_PTKINITNEGOTIATING; - - // [AnnieTODO] - // 1. Construct 3rd message in 4-way handshake. - // EAPOL(0, 1, 1, Pair,0, P, ANonce, MIC(PTK_update), 0) - // 2. Send 3rd msg - - pKeyMgnt->KeyReplayCounter ++; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Send 4-way message 3\n")); - //RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD , (" KeyReplayCounter = %08"i64fmt"x \n",pKeyMgnt->KeyReplayCounter )); - - for( indexi = 0 ; indexi < 8 ; indexi++) - temp[indexi] = (u1Byte)((pKeyMgnt->KeyReplayCounter >>( (7-indexi) *8)) &0xff ); - - PlatformMoveMemory( &KeyReplayCounter , temp , 8 ); - - if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA ) - { - SendEapolKeyPacket( - Adapter, - pSTA->MacAddr, - pSTA->perSTAKeyInfo.PTK_update, // Pointer to KCK (EAPOL-Key Confirmation Key). - pSTA->perSTAKeyInfo.PTK_update + 16, - type_Pairwise, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - TRUE, // EAPOL-Key Information field: Install Flag. - TRUE, // EAPOL-Key Information field: Key Ack bit. - TRUE, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - FALSE, // EAPOL-Key Information field: Secure bit. - FALSE, // EAPOL-Key Information field: Error bit. True for MIC failure report. - FALSE, // EAPOL-Key Information field: Requst bit. - KeyReplayCounter, //pSTA->perSTAKeyInfo.KeyReplayCounter, // EAPOL-KEY Replay Counter field. - pKeyMgnt->ANonce, // EAPOL-Key Key Nonce field (32-byte). - pSTA->perSTAKeyInfo.KeyRSC, // perSTA EAPOL-Key Key RSC field (8-byte). - &(pMgntInfo->SecurityInfo.RSNIE), // Key Data field: Pointer to RSN IE, NULL if - NULL // Key Data field: Pointer to GTK, NULL if Key Data Length = 0. - ); - } - else if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA2 ) - { - SendEapolKeyPacket( - Adapter, - pSTA->MacAddr, - pSTA->perSTAKeyInfo.PTK_update, // Pointer to KCK (EAPOL-Key Confirmation Key). - pSTA->perSTAKeyInfo.PTK_update + 16, - type_Pairwise, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - TRUE, // EAPOL-Key Information field: Install Flag. - TRUE, // EAPOL-Key Information field: Key Ack bit. - TRUE, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - TRUE, // EAPOL-Key Information field: Secure bit. - FALSE, // EAPOL-Key Information field: Error bit. True for MIC failure report. - FALSE, // EAPOL-Key Information field: Requst bit. - KeyReplayCounter,//pSTA->perSTAKeyInfo.KeyReplayCounter, // EAPOL-KEY Replay Counter field. - pKeyMgnt->ANonce, // EAPOL-Key Key Nonce field (32-byte). - pSTA->perSTAKeyInfo.KeyRSC, // perSTA EAPOL-Key Key RSC field (8-byte). - &(pMgntInfo->SecurityInfo.RSNIE), // Key Data field: Pointer to RSN IE, NULL if - pGlInfo->GTK // Key Data field: Pointer to GTK, NULL if Key Data Length = 0. - ); - } - - pKeyMgnt->TimeSlot_lastsend = pGlInfo->CurrentTimeSlot; // Added by Annie, 2005-07-12. - - // [Note] Don't do pSTA->perSTAKeyInfo.TimeoutCtr++ here! - // The counter is controlled in KeyMgntTimeout. - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StatePTKINITNEGOTIATING()\n") ); - -} - -// Description: -// Output: -// Modify: -void -Authenticator_StatePTKINITDONE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pSTA->perSTAKeyInfo; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StatePTKINITDONE()\n") ); - - - // TODO: SetKey to CAM - - - if( !ACTING_AS_AP(Adapter)) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pSTA->perSTAKeyInfo.PrState = ASMPS_PTKINITDONE; - - // TODO: Check SetKey completed, these lines were moved from Authenticator_OnEAPOLKeyRecvd() by Jay - if (pSTA->perSTAKeyInfo.Pair) - { - u4Byte ucIndex = 0; - CopyMem(pSTA->perSTAKeyInfo.PTK, pSTA->perSTAKeyInfo.PTK_update, PTK_LEN); // Added by Annie, 2005-07-12. - if( Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_AESCCMP ) - { - pSTA->perSTAKeyInfo.TempEncKey = pKeyMgnt->PTK+TKIP_ENC_KEY_POS; - pSTA->perSTAKeyInfo.TxMICKey = pKeyMgnt->PTK+(TKIP_MIC_KEY_POS); - pSTA->perSTAKeyInfo.RxMICKey = pKeyMgnt->PTK+(TKIP_MIC_KEY_POS+TKIP_MIC_KEY_LEN); - - //Add for AP mode HW enc,by CCW - ucIndex = AP_FindFreeEntry(Adapter , pSTA->MacAddr ); - if(ucIndex == Adapter->TotalCamEntry) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] Authenticator_StatePTKINITDONE: Cam Entry is FULL!!!\n")); - return; - } - - //set key - AP_Setkey( Adapter , - pSTA->perSTAKeyInfo.pWLanSTA->MacAddr, - ucIndex, // Entey index - CAM_TKIP, - 0, // Parise key - pSTA->perSTAKeyInfo.TempEncKey); - - pSTA->keyindex = ucIndex; - }else{ // AES mode AP-WPA AES,CCW - - AESCCMP_BLOCK blockKey; - //RT_TRACE( COMP_WPAAES, DBG_LOUD, ("====> Set Station Key.")); - //Add for AP mode HW enc,by CCW - ucIndex = AP_FindFreeEntry(Adapter , pSTA->MacAddr); - if(ucIndex == Adapter->TotalCamEntry) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] Authenticator_StatePTKINITDONE: Cam Entry is FULL!!!\n")); - return; - } - - //Set Key - PlatformMoveMemory( blockKey.x , pKeyMgnt->PTK+TKIP_ENC_KEY_POS , 16); - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pSTA->perSTAKeyInfo.AESKeyBuf); - //set hw key - AP_Setkey( Adapter , - pSTA->perSTAKeyInfo.pWLanSTA->MacAddr, - ucIndex, // Entey index - CAM_AES, - 0, // Parise key - pSTA->perSTAKeyInfo.PTK+TKIP_ENC_KEY_POS); - pSTA->keyindex = ucIndex; - } - - } - //pSTA->perSTAKeyInfo.bPTKInstalled = TRUE; - pSTA->perSTAKeyInfo.GInitAKeys = TRUE; - pSTA->perSTAKeyInfo.PInitAKeys = TRUE; - - // Begin 2-way handshake - if( Adapter->MgntInfo.SecurityInfo.SecLvl == RT_SEC_LVL_WPA ) - Authenticator_StateREKEYNEGOTIATING(Adapter, pSTA); // To do 2-way - if( Adapter->MgntInfo.SecurityInfo.SecLvl == RT_SEC_LVL_WPA2 ) - { - Authenticator_StateREKEYESTABLISHED(Adapter, pSTA); // No to do 2-way - pKeyMgnt->TimeoutCtr = 0; - } - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StatePTKINITDONE()\n") ); -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateUPDATEKEYS( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_StateUPDATEKEYS()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - pSTA->perSTAKeyInfo.PrState = ASMPS_UPDATEKEYS; - - Authenticator_StatePTKSTART(Adapter, pSTA); - -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateINTEGRITYFAILURE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ -#if 1 //Added by Jay 0713 for process integrity failure - u8Byte DiffTimeSlot; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); -#endif - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - //pSTA->perSTAKeyInfo.PrState = ASMPS_MICFAILURE; - pSTA->perSTAKeyInfo.PrState = ASMPS_INTEGRITYFAILURE; // Modified by Annie, 2005-07-18. - - pSTA->perSTAKeyInfo.MicErrorCnt ++; // Added by Annie for debug, 2005-07-25. - -#if 1 //Added by Jay 0713 for process integrity failure - //RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("IntegrityFail(): AP mode, TimeSlot_lastIntegrityFailed=%"i64fmt"d\n", pSTA->perSTAKeyInfo.TimeSlot_lastIntegrityFailed )); - //RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("IntegrityFail(): AP mode, CurrentTimeSlot =%"i64fmt"d\n", pMgntInfo->globalKeyInfo.CurrentTimeSlot )); - - DiffTimeSlot = pMgntInfo->globalKeyInfo.CurrentTimeSlot - - pSTA->perSTAKeyInfo.TimeSlot_lastIntegrityFailed; - - pSTA->perSTAKeyInfo.TimeSlot_lastIntegrityFailed = - pMgntInfo->globalKeyInfo.CurrentTimeSlot; - - if(DiffTimeSlot > 60) - { -#if SUPPORT_WPA_VERSION_D3 - //update the PTK with this STA and GTK with all STAs - Authenticator_StateKEYUPDATE(Adapter, pSTA); -#endif - } - else - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("IntegrityFail(): AP mode, disconnects all associated STAs\n")); - - // Rewrited by Annie: use AP_DisassociateAllStation(). 2005-07-18. - AP_DisassociateAllStation( Adapter, mic_failure ); - - - pMgntInfo->globalKeyInfo.TimeSlot_IntegrityFail2 = pMgntInfo->globalKeyInfo.CurrentTimeSlot; - } -#else - // UCT - Authenticator_StateKEYUPDATE(Adapter, pSTA); -#endif -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateKEYUPDATE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Authenticator_StateKEYUPDATE()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - pSTA->perSTAKeyInfo.PrState = ASMPS_KEYUPDATE; - - // [AnnieTODO] - // ANonce = Counter ++; - // GNonve = Counter ++; - - - // UCT - Authenticator_StatePTKSTART(Adapter, pSTA); -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateREKEYNEGOTIATING( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PAUTH_GLOBAL_KEY_TAG pGlInfo = &pMgntInfo->globalKeyInfo; - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pSTA->perSTAKeyInfo; - - u8Byte KeyReplayCounter = 0; - u1Byte temp[8] = {0}; - u1Byte indexi = 0; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StateREKEYNEGOTIATING()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pKeyMgnt->GrState = ASMGS_REKEYNEGOTIATING; - - // [AnnieTODO] - // 1. Construct 1st message in 2-way handshake. - // EAPOL(1, 1, 1, !Pair, GN, G, GNonce, MIC(PTK), GTK[GN] ) - // 2. Send 1st msg in 2-way handshake. - - pKeyMgnt->KeyReplayCounter ++; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("Send 2-way message 1\n")); - - for( indexi = 0 ; indexi < 8 ; indexi++) - temp[indexi] = (u1Byte)((pKeyMgnt->KeyReplayCounter >>( (7-indexi) *8)) &0xff ); - - PlatformMoveMemory( &KeyReplayCounter , temp , 8 ); - - SendEapolKeyPacket( - Adapter, - pSTA->MacAddr, - pSTA->perSTAKeyInfo.PTK, // Pointer to KCK (EAPOL-Key Confirmation Key). - pSTA->perSTAKeyInfo.PTK + 16, // [AnnieWorkaround] - type_Group, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - FALSE, // EAPOL-Key Information field: Install Flag. - TRUE, // EAPOL-Key Information field: Key Ack bit. - TRUE, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - TRUE, // EAPOL-Key Information field: Secure bit. - FALSE, // EAPOL-Key Information field: Error bit. True for MIC failure report. - FALSE, // EAPOL-Key Information field: Requst bit. - KeyReplayCounter,//pSTA->perSTAKeyInfo.KeyReplayCounter, // EAPOL-KEY Replay Counter field. - pGlInfo->GNonce, // EAPOL-Key Key Nonce field (32-byte). - pGlInfo->KeyRSC, // EAPOL-Key Key RSC field (8-byte). - NULL, // Key Data field: Pointer to RSN IE, NULL if - pGlInfo->GTK // Key Data field: Pointer to GTK, NULL if Key Data Length = 0. - ); - - pKeyMgnt->TimeSlot_lastsend = pGlInfo->CurrentTimeSlot; // added by Annie, 2005-07-12. - - // [Note] Don't do pKeyMgnt->TimeoutCtr++ here! - // The counter is controlled in KeyMgntTimeout. - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StateREKEYNEGOTIATING()\n") ); - -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateREKEYESTABLISHED( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StateREKEYESTABLISHED()\n") ); - - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - pSTA->perSTAKeyInfo.GrState = ASMGS_REKEYESTABLISHED; - - // TODO: 1. Check MIC(PTK) - - // TODO: 2. GKeyDoneStations --; - - // 3. Timeout counter is reset by Authenticator_OnEAPOLKeyRecvd(). - //pSTA->perSTAKeyInfo.TimeoutCtr ... we don't need to write it here. - - // 4. 802.1x::PortMode = 1; - pSTA->perSTAKeyInfo.portMode = pmt_Enable; - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StateREKEYESTABLISHED()\n") ); -} - -// Description: -// Output: -// Modify: -void -Authenticator_StateKEYERROR( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA, - IN u1Byte ReasonCode - ) -{ - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_StateKEYERROR()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - - pSTA->perSTAKeyInfo.GrState = ASMGS_KEYERROR; - - // [AnnieTODO] GKeyDoneStations -- - - - // UCT - Authenticator_StateDISCONNECT( Adapter, pSTA, ReasonCode ); - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_StateKEYERROR()\n") ); -} - - -// Description: Initialize the global key data in Authenticator. -// Output: void -// Modify: Annie, 2005-07-02 -// I check the data struct again, and discard using pMgntInfo->globalKeyInfo.groupKeyInfo. -// Now Global/group key data (PMK, GTK, ANonce): all kept in pMgntInfo->globalKeyInfo. -// global key state: recorded in pEntry->perSTAKeyInfo.GrState. (I think it should be kept in per station.) -// -void -Authenticator_GlobalReset( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PAUTH_GLOBAL_KEY_TAG pGlInfo = &(pMgntInfo->globalKeyInfo); - PRT_WLAN_STA pEntry; - int i; - u1Byte RdmBuf[20], NonceBuf[KEY_NONCE_LEN]; - static u1Byte CAM_CONST_BROAD[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - AESCCMP_BLOCK blockKey; - - - //--- [AnnieWorkaround] See 11i D3.0 page91, GTK should be generated by PRF-X. - u1Byte TmpGTK[] = "12345678123456781234567812345678"; - //--- - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("===> Authenticator_GlobalReset()\n") ); - - if( !ACTING_AS_AP(Adapter) ) - { - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("[Warning] current: STA mode, return.")); - return; - } - - pGlInfo->currentId = 0; - - if(pSecInfo->SecLvl == RT_SEC_LVL_WPA) - pGlInfo->DescriptorType = desc_type_RSN; - else - pGlInfo->DescriptorType = desc_type_WPA2; - - GetRandomBuffer( RdmBuf ); - for( i=0; i<16; i++ ) - { - NonceBuf[i] = RdmBuf[i]; - NonceBuf[16+i] = RdmBuf[19-i]; - } - NonceBuf[KEY_NONCE_LEN-1] = 0; //[AnnieWorkaround] Remove it if ANonce addition is ready. 2005-11-25. - RT_PRINT_DATA( COMP_AUTHENTICATOR, DBG_LOUD, "Authenticator_GlobalReset(): NonceBuf", NonceBuf, KEY_NONCE_LEN ); - - // 1. Install PMK - if( pGlInfo->PassphraseLen < 64 ){ - PasswordHash(pGlInfo->Passphrase, pGlInfo->PassphraseLen, - pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, pGlInfo->PMK ); - } - else - { - // Add for direct to set PMK 64-Hex mode... - if( pGlInfo->PassphraseLen == 64 ) - PlatformMoveMemory(pGlInfo->PMK, pGlInfo->Passphrase , 32 ); - } - // 2. Install GTK - - // - // 2010/12/15 Neo Jou check in - // When in Linux AP mode, hostapd will set down GTK before Authenticator_GlobalReset() - // Thus for Linux AP mode case, we don't reset GTK here - // - PlatformZeroMemory( pGlInfo->GTK, GTK_LEN ); - PlatformMoveMemory( pGlInfo->GTK, TmpGTK, GTK_LEN ); - pGlInfo->TxMICKey = pGlInfo->GTK + GTK_MIC_TX_POS; - pGlInfo->RxMICKey = pGlInfo->GTK + GTK_MIC_RX_POS; - - //AP WPA AES,CCW - PlatformMoveMemory( blockKey.x , pGlInfo->GTK , 16); - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pGlInfo->AESGTK); - // - pSecInfo->GroupTransmitKeyIdx = 1; - - - - // 3. Install ANonce -// CopyMem( pGlInfo->ANonce, NonceBuf, KEY_NONCE_LEN ); - PlatformMoveMemory(pGlInfo->ANonce, NonceBuf, KEY_NONCE_LEN ); - - // 4. Install GNonce -// CopyMem( pGlInfo->GNonce, NonceBuf, KEY_NONCE_LEN ); - PlatformMoveMemory(pGlInfo->GNonce, NonceBuf, KEY_NONCE_LEN ); - - // 5. Reset KeyRSC - pGlInfo->KeyRSC = 0; - - // 6. Reset time slot. - pGlInfo->CurrentTimeSlot = 0; - -#if 1 //Addedby Jay 0713 - pGlInfo->TimeSlot_IntegrityFail2 = 0; -#endif - - // 7. IV -#if 1 //Added by Jay 0712 for security IV - pSecInfo->TxIV = DEFAULT_INIT_TX_IV; -#endif - pMgntInfo->bAPGlobRest = TRUE; - // Reset key information of each station. - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pMgntInfo->AsocEntry[i]); - Authenticator_StateINITIALIZE(Adapter, pEntry); - } - pMgntInfo->bAPGlobRest = FALSE; - - //reset SWCamTabe and HWCamtable ,add by CCW - AP_ClearAllKey(Adapter); - - if( (MgntActQuery_ApType(Adapter) == RT_AP_TYPE_NORMAL || - MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX) && - ( pMgntInfo->NdisVersion < RT_NDIS_VERSION_6_20 )) - { - switch( pSecInfo->PairwiseEncAlgorithm ) - { - case RT_ENC_ALG_TKIP: - AP_Setkey( Adapter , - CAM_CONST_BROAD, - 1, // Index entry - CAM_TKIP, - 1, // Set Group Key - pGlInfo->GTK); - break; - - case RT_ENC_ALG_AESCCMP: - AP_Setkey( Adapter , - CAM_CONST_BROAD, - 1, // Index entry - CAM_AES, - 1, // Set Group Key - pGlInfo->GTK); - break; - - case RT_ENC_ALG_WEP40: - case RT_ENC_ALG_WEP104: - { - static u1Byte CAM_CONST_ADDR[4][6] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x02}, - {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}}; - u1Byte EncAlgo = ((pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) ? CAM_WEP40 : CAM_WEP104); - - for(i = 0; i < 4; i++) - { - if(pSecInfo->KeyLen[i] > 0) - { - AP_Setkey( - Adapter , - CAM_CONST_ADDR[i], - i, // Index entry - EncAlgo, - 1, - pSecInfo->KeyBuf[i]); - } - } - } - break; - - default: - break; - } - } - - RT_TRACE( COMP_AUTHENTICATOR, DBG_LOUD, ("<=== Authenticator_GlobalReset()\n") ); - -} - - - - diff --git a/network/wlan/WDI/COMMON/Authenticator.h b/network/wlan/WDI/COMMON/Authenticator.h deleted file mode 100644 index a52e0e14..00000000 --- a/network/wlan/WDI/COMMON/Authenticator.h +++ /dev/null @@ -1,155 +0,0 @@ -#ifndef __AUTHENTICATOR_H -#define __AUTHENTICATOR_H - - -//------------------------------------------------------------------------------ -// Authenticator related operations. -//------------------------------------------------------------------------------ - -// On event - -void -Authenticator_OnDeauthenticationRequest( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ); - - -void -Authenticator_OnAuthenticationRequest( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ); - -void -Authenticator_OnReAuthenticationRequest( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ); - - -void -Authenticator_OnEAPOLKeyRecvd( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt, - IN OCTET_STRING pdu - ); - - -OCTET_STRING -EAPOLkeyGetRSNIE( - IN OCTET_STRING eapolkeypkt, - IN ELEMENT_ID ID -); - - -void -KeyMgntTimeout( - PRT_TIMER pTimer -); - -void -Authenticator_OnTimeoutCountExceeded( - IN PADAPTER Adapter, - IN PAUTH_PKEY_MGNT_TAG pKeyMgnt - ); - -// Status handle - -void -Authenticator_StateDISCONNECT( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA, - IN u1Byte ReasonCode - ); - -void -Authenticator_StateDISCONNECTED( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateINITIALIZE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateAUTHENTICATION( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateAUTHENTICATION2( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - - -void -Authenticator_StatePTKSTART( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StatePTKINITNEGOTIATING( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StatePTKINITDONE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateUPDATEKEYS( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateINTEGRITYFAILURE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateKEYUPDATE( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateREKEYNEGOTIATING( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateREKEYESTABLISHED( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -void -Authenticator_StateKEYERROR( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA, - IN u1Byte ReasonCode - ); - - -void -Authenticator_GlobalReset( - IN PADAPTER Adapter - ); - - - - -#endif // __AUTHENTICATOR_H diff --git a/network/wlan/WDI/COMMON/BAGen.c b/network/wlan/WDI/COMMON/BAGen.c deleted file mode 100644 index 6d789c04..00000000 --- a/network/wlan/WDI/COMMON/BAGen.c +++ /dev/null @@ -1,943 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "BAGen.tmh" -#endif - -VOID -ActivateBAEntry( - PADAPTER Adapter, - PBA_RECORD pBA, - u2Byte Time - ) -{ - RT_TRACE(COMP_HT, DBG_LOUD, ("pBA->bValid = TRUE\r\n")); - pBA->bValid = TRUE; - if(Time != 0) - PlatformSetTimer(Adapter, &pBA->Timer, Time); -} - -VOID -DeActivateBAEntry( - PADAPTER Adapter, - PBA_RECORD pBA -) -{ - RT_TRACE(COMP_HT, DBG_LOUD, ("pBA->bValid = FALSE\r\n")); - pBA->bValid = FALSE; - PlatformCancelTimer(Adapter, &pBA->Timer); -} - -VOID -ExtendBAEntry( - PADAPTER Adapter, - PBA_RECORD pBA - ) -{ -// if(pBA->bValid && pBA->LifeTime!=0) -// { -// PlatformCancelTimer(Adapter, &pBA->Timer); -// PlatformSetTimer(Adapter, &pBA->Timer, pBA->LifeTime); -// } -} - -BOOLEAN -TxTsDeleteBA( - PADAPTER Adapter, - PTX_TS_RECORD pTxTs - ) -{ - PBA_RECORD pAdmittedBa = &pTxTs->TxAdmittedBARecord; - PBA_RECORD pPendingBa = &pTxTs->TxPendingBARecord; - BOOLEAN bSendDELBA = FALSE; - - // Delete pending BA - if(pPendingBa->bValid) - { - DeActivateBAEntry(Adapter, pPendingBa); - bSendDELBA = TRUE; - } - - // Delete admitted BA - if(pAdmittedBa->bValid) - { - DeActivateBAEntry(Adapter, pAdmittedBa); - bSendDELBA = TRUE; - } - - return bSendDELBA; -} - -BOOLEAN -RxTsDeleteBA( - PADAPTER Adapter, - PRX_TS_RECORD pRxTs - ) -{ - PBA_RECORD pBa = &pRxTs->RxAdmittedBARecord; - BOOLEAN bSendDELBA = FALSE; - - if(pBa->bValid) - { - DeActivateBAEntry(Adapter, pBa); - bSendDELBA = TRUE; - } - - return bSendDELBA; -} - - -VOID -ResetBaEntry( - PBA_RECORD pBA - ) -{ - pBA->bValid = FALSE; - pBA->BaParamSet = 0; - pBA->BaTimeoutValue = 0; - pBA->DialogToken = 0; - pBA->BaStartSeqCtrl = 0; -} - -VOID -ConstructADDBAReq( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PBA_RECORD pBA, - OUT pu1Byte Buffer, - OUT pu4Byte pLength - ) -{ - OCTET_STRING osADDBAFrame, tmp; - - FillOctetString(osADDBAFrame, Buffer, 0); - *pLength = 0; - - ConstructMaFrameHdr( - Adapter, - Addr, - ACT_CAT_BA, - ACT_ADDBAREQ, - &osADDBAFrame ); - - // Dialog Token - FillOctetString(tmp, &pBA->DialogToken, 1); - PacketAppendData(&osADDBAFrame, tmp); - - // BA Parameter Set - FillOctetString(tmp, &pBA->BaParamSet, 2); - PacketAppendData(&osADDBAFrame, tmp); - - // BA Timeout Value - FillOctetString(tmp, &pBA->BaTimeoutValue, 2); - PacketAppendData(&osADDBAFrame, tmp); - - // BA Start SeqCtrl - FillOctetString(tmp, &pBA->BaStartSeqCtrl, 2); - PacketAppendData(&osADDBAFrame, tmp); - - *pLength = osADDBAFrame.Length; -} - -VOID -ConstructADDBARsp( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PBA_RECORD pBA, - IN u2Byte StatusCode, - OUT pu1Byte Buffer, - OUT pu4Byte pLength - ) -{ - OCTET_STRING osADDBAFrame, tmp; - - FillOctetString(osADDBAFrame, Buffer, 0); - *pLength = 0; - - ConstructMaFrameHdr( - Adapter, - Addr, - ACT_CAT_BA, - ACT_ADDBARSP, - &osADDBAFrame ); - - // Dialog Token - FillOctetString(tmp, &pBA->DialogToken, 1); - PacketAppendData(&osADDBAFrame, tmp); - - // Status Code - FillOctetString(tmp, &StatusCode, 2); - PacketAppendData(&osADDBAFrame, tmp); - - // BA Parameter Set - FillOctetString(tmp, &pBA->BaParamSet, 2); - PacketAppendData(&osADDBAFrame, tmp); - - // BA Timeout Value - FillOctetString(tmp, &pBA->BaTimeoutValue, 2); - PacketAppendData(&osADDBAFrame, tmp); - - *pLength = osADDBAFrame.Length; -} - -VOID -ConstructDELBA( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PBA_RECORD pBA, - IN TR_SELECT TxRxSelect, - IN u2Byte ReasonCode, - OUT pu1Byte Buffer, - OUT pu4Byte pLength - ) -{ - OCTET_STRING osDELBAFrame, tmp; - u2Byte DelbaParamSet=0; - - SET_DELBA_PARAM_SET_FIELD_INITIATOR(&DelbaParamSet, (TxRxSelect==TX_DIR)?1:0 ); - SET_DELBA_PARAM_SET_FIELD_TID(&DelbaParamSet, GET_BA_PARAM_SET_FIELD_TID(&(pBA->BaParamSet))) ; - - FillOctetString(osDELBAFrame, Buffer, 0); - *pLength = 0; - - ConstructMaFrameHdr( - Adapter, - Addr, - ACT_CAT_BA, - ACT_DELBA, - &osDELBAFrame ); - - // DELBA Parameter Set - FillOctetString(tmp, &DelbaParamSet, 2); - PacketAppendData(&osDELBAFrame, tmp); - - // Reason Code - FillOctetString(tmp, &ReasonCode, 2); - PacketAppendData(&osDELBAFrame, tmp); - - *pLength = osDELBAFrame.Length; -} - -VOID -SendADDBAReq( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PBA_RECORD pBA - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = MgntQuery_MgntFrameTxRate(Adapter, Addr); - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>SendADDBAReq()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructADDBAReq(Adapter, Addr, pBA, pBuf->Buffer.VirtualAddress, &pTcb->PacketLength); - - if(pTcb->PacketLength != 0) - { - if(ACTING_AS_AP(Adapter)) - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, BE_QUEUE, DataRate); - else - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -VOID -SendADDBARsp( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PBA_RECORD pBA, - IN u2Byte StatusCode - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = MgntQuery_MgntFrameTxRate(Adapter, Addr); - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>SendADDBARsp()\n")); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructADDBARsp( - Adapter, - Addr, - pBA, - StatusCode, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength ); - - if(pTcb->PacketLength != 0) - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -VOID -SendDELBA( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PBA_RECORD pBA, - IN TR_SELECT TxRxSelect, - IN u2Byte ReasonCode - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = MgntQuery_MgntFrameTxRate(Adapter, Addr); - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>SendDELBA()\n")); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructDELBA( - Adapter, - Addr, - pBA, - TxRxSelect, - ReasonCode, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength ); - - if(pTcb->PacketLength != 0) - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - -RT_STATUS -OnADDBAReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PBA_RECORD pBA; - PRX_TS_RECORD pTS; - pu1Byte Addr = Frame_Addr2(*mmpdu); - u2Byte StatusCode; - RT_TRACE(COMP_QOS, DBG_TRACE, ("=====>OnADDBAReq()\n")); - // CategoryCode(1) + ActionCode(1) + DialogToken(1) + ParameterSet(2) + TimeoutValue(2) + StartSequence(2) - if(mmpdu->Length < sMacHdrLng + 9) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnADDBAReq(): Invalid length(%d) of frame\n", mmpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - // - // Check Block Ack support. - // Reject if there is no support of Block Ack. - // - if( (pMgntInfo->pStaQos->CurrentQosMode == QOS_DISABLE) || - (pMgntInfo->pHTInfo->bCurrentHTSupport == FALSE) || - (pMgntInfo->pHTInfo->bAcceptAddbaReq == FALSE) || - (pMgntInfo->IOTAction & HT_IOT_ACT_REJECT_ADDBA_REQ) ) - { - StatusCode = ADDBA_STATUS_REFUSED; - goto OnADDBAReq_Fail; - } - - // Add by hpfan: reject addba when 4-way is not finished - if(pMgntInfo->bWiFiConfg && - pMgntInfo->SecurityInfo.SecLvl > RT_SEC_LVL_NONE && !SecIsTxKeyInstalled(Adapter, pMgntInfo->Bssid)) - { - StatusCode = ADDBA_STATUS_REFUSED; - goto OnADDBAReq_Fail; - } - - // - // Search for related traffic stream. - // If there is no matched TS, reject the ADDBA request. - // - if( !GetTs( - Adapter, - (PTS_COMMON_INFO*)(&pTS), - Addr, - GET_BA_FRAME_PARAM_SET_TID(mmpdu->Octet), - RX_DIR, - TRUE) ) - { - StatusCode = ADDBA_STATUS_REFUSED; - goto OnADDBAReq_Fail; - } - pBA = &pTS->RxAdmittedBARecord; - - - // - // To Determine the ADDBA Req content - // We can do much more check here, including BufferSize, AMSDU_Support, Policy, StartSeqCtrl... - // I want to check StartSeqCtrl to make sure when we start aggregation!!! - // - if(GET_BA_FRAME_PARAM_SET_BA_POLICY(mmpdu->Octet) == BA_POLICY_DELAYED) - { - StatusCode = ADDBA_STATUS_INVALID_PARAM; - goto OnADDBAReq_Fail; - } - - // - // Clear all packets queued in driver for RxReorder and prepare to receive packet from new - // new sequence start!! - // This fix the protocol IOT issue with Netgear WRT3500. - // - - FlushRxTsPendingPkts(Adapter, pTS); - - // - // Admit the ADDBA Request - // - DeActivateBAEntry(Adapter, pBA); - PlatformMoveMemory(&(pBA->DialogToken) , GET_BA_FRAME_DIALOG_TOKEN(mmpdu->Octet), 1); - PlatformMoveMemory(&(pBA->BaParamSet) , GET_BA_FRAME_PARAM_SET(mmpdu->Octet), 2); - PlatformMoveMemory(&(pBA->BaTimeoutValue), GET_BA_FRAME_TIMEOUT_VALUE(mmpdu->Octet), 2); - PlatformMoveMemory(&(pBA->BaStartSeqCtrl), GET_BAREQ_FRAME_START_SQECTRL(mmpdu->Octet), 2); - - { - SET_BA_PARAM_SET_FIELD_BUF_SIZE( &(pBA->BaParamSet), 64); // At least, forced by SPEC - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnADDBAReq(): SET_FIELD_BUF_SIZE = 64\n")); - } - - ActivateBAEntry(Adapter, pBA, 0); - SendADDBARsp(Adapter, Addr, pBA, ADDBA_STATUS_SUCCESS); - - // End of procedure. - return RT_STATUS_SUCCESS; - -OnADDBAReq_Fail: - { - BA_RECORD BA; - PlatformMoveMemory(&(BA.BaParamSet), GET_BA_FRAME_PARAM_SET(mmpdu->Octet), 2); - PlatformMoveMemory(&(BA.BaTimeoutValue), GET_BA_FRAME_TIMEOUT_VALUE(mmpdu->Octet), 2); - PlatformMoveMemory(&(BA.DialogToken), GET_BA_FRAME_DIALOG_TOKEN(mmpdu->Octet), 1); - SET_BA_PARAM_SET_FIELD_BA_POLICY(&(BA.BaParamSet), BA_POLICY_IMMEDIATE); - SendADDBARsp(Adapter, Addr, &BA, StatusCode); - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnADDBAReq(): OnADDBAReq_Fail\n")); - } - return RT_STATUS_SUCCESS; -} - -RT_STATUS -OnADDBARsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PBA_RECORD pPendingBA, pAdmittedBA; - PTX_TS_RECORD pTS; - pu1Byte Addr = Frame_Addr2(*mmpdu); - pu1Byte pDialogToken = GET_BA_FRAME_DIALOG_TOKEN(mmpdu->Octet); - pu1Byte pStatusCode = GET_BA_FRAME_STATUS_CODE(mmpdu->Octet); - u2Byte ReasonCode = ADDBA_STATUS_INVALID_PARAM; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>OnADDBARsp()\n")); - // CategoryCode(1) + ActionCode(1) + DialogToken(1) + StatusCode(2) + ParameterSet(2) + TimeoutValue(2) - if(mmpdu->Length < sMacHdrLng + 9) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnADDBARsp(): Invalid length(%d) of frame\n", mmpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - - // - // Check the capability - // Since we can always receive A-MPDU, we just check if it is under HT mode. - // - if(pMgntInfo->pStaQos->CurrentQosMode == QOS_DISABLE || - pMgntInfo->pHTInfo->bCurrentHTSupport == FALSE || - pMgntInfo->pHTInfo->bCurrentAMPDUEnable == FALSE ) - { - ReasonCode = DELBA_REASON_UNKNOWN_BA; - goto OnADDBARsp_Reject; - } - - // - // Search for related TS. - // If there is no TS found, we wil reject ADDBA Rsp by sending DELBA frame. - // - if (!GetTs( - Adapter, - (PTS_COMMON_INFO*)(&pTS), - Addr, - GET_BA_FRAME_PARAM_SET_TID(mmpdu->Octet), - TX_DIR, - FALSE) ) - { - ReasonCode = DELBA_REASON_UNKNOWN_BA; - goto OnADDBARsp_Reject; - } - pTS->bAddBaReqInProgress = FALSE; - pPendingBA = &pTS->TxPendingBARecord; - pAdmittedBA = &pTS->TxAdmittedBARecord; - - - // - // Check if related BA is waiting for setup. - // If not, reject by sending DELBA frame. - // - if((pAdmittedBA->bValid==TRUE)) - { - // Since BA is already setup, we ignore all other ADDBA Response. - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnADDBARsp(): Recv ADDBA Rsp. Drop because already admit it! \n")); - return RT_STATUS_PKT_DROP; - } - else if((pPendingBA->bValid == FALSE) ||(*pDialogToken != pPendingBA->DialogToken)) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnADDBARsp(): Recv ADDBA Rsp. BA invalid, DELBA! \n")); - ReasonCode = DELBA_REASON_UNKNOWN_BA; - goto OnADDBARsp_Reject; - } - else - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnADDBARsp(): Recv ADDBA Rsp. BA is admitted! Status code:%X\n", (*pStatusCode) )); - DeActivateBAEntry(Adapter, pPendingBA); - } - - - if((*pStatusCode) == ADDBA_STATUS_SUCCESS) - { - // - // Determine ADDBA Rsp content here. - // We can compare the value of BA parameter set that Peer returned and Self sent. - // If it is OK, then admitted. Or we can send DELBA to cancel BA mechanism. - // - if(GET_BA_FRAME_PARAM_SET_BA_POLICY(mmpdu->Octet) == BA_POLICY_DELAYED) - { - // Since this is a kind of ADDBA failed, we delay next ADDBA process. - pTS->bAddBaReqDelayed = TRUE; - - DeActivateBAEntry(Adapter, pAdmittedBA); - ReasonCode = DELBA_REASON_END_BA; - goto OnADDBARsp_Reject; - } - - - // - // Admitted condition - // - PlatformMoveMemory(&(pAdmittedBA->DialogToken) , GET_BA_FRAME_DIALOG_TOKEN(mmpdu->Octet), 1); - PlatformMoveMemory(&(pAdmittedBA->BaTimeoutValue), GET_BA_FRAME_TIMEOUT_VALUE(mmpdu->Octet), 2); - PlatformMoveMemory(&(pAdmittedBA->BaStartSeqCtrl), &(pPendingBA->BaStartSeqCtrl), 2); - PlatformMoveMemory(&(pAdmittedBA->BaParamSet) , GET_BA_FRAME_PARAM_SET(mmpdu->Octet), 2); - pAdmittedBA->BufferSize = GET_BA_FRAME_PARAM_SET_BUF_SIZE(mmpdu->Octet); - - if(0 == pAdmittedBA->BufferSize) - { - RT_PRINT_ADDR(COMP_HT, DBG_WARNING, "[WARNING]OnADDBARsp(): Incorrect BufferSize (0) in AddBaRsp, skip this BlockAck process for Addr = ", Addr); - ReasonCode = ADDBA_STATUS_INVALID_PARAM; - goto OnADDBARsp_Reject; - } - DeActivateBAEntry(Adapter, pAdmittedBA); - ActivateBAEntry(Adapter, pAdmittedBA, 0 ); - } - else - { - // Delay next ADDBA process. - pTS->bAddBaReqDelayed = TRUE; - } - - // End of procedure - if(Adapter->TDLSSupport) - { - TDLS_OnAddBaRsp(Adapter, mmpdu); - } - - return RT_STATUS_SUCCESS; - -OnADDBARsp_Reject: - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnADDBARsp(): Rejected!!!!!!!!ReasonCode=%d\n", ReasonCode)); - { - BA_RECORD BA; - PlatformMoveMemory(&(BA.BaParamSet), GET_BA_FRAME_PARAM_SET(mmpdu->Octet), 2); - SendDELBA(Adapter, Addr, &BA, TX_DIR, ReasonCode); - } - return RT_STATUS_SUCCESS; -} - - -RT_STATUS -OnDELBA( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte Addr = Frame_Addr2(*mmpdu); - BA_RECORD BA; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>OnDELBA()\n")); - if(pMgntInfo->pStaQos->CurrentQosMode == QOS_DISABLE || - pMgntInfo->pHTInfo->bCurrentHTSupport == FALSE ) - return RT_STATUS_SUCCESS; - - // CategoryCode(1) + ActionCode(1) + ParameterSet(2) + ReasonCode(2) - if(mmpdu->Length < sMacHdrLng + 6) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnDELBA(): Invalid length(%d) of frame\n", mmpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - - if(GET_DELBA_FRAME_PARAM_SET_INITIATOR(mmpdu->Octet) == 1) - { - PRX_TS_RECORD pRxTs; - - if( !GetTs( - Adapter, - (PTS_COMMON_INFO*)&pRxTs, - Addr, - GET_DELBA_FRAME_PARAM_SET_TID(mmpdu->Octet), - RX_DIR, - FALSE) ) - { - return RT_STATUS_FAILURE; - } - - //BA Process Error when link with Netgear3500 v1 - //Fix do S3/S4 long run error - //by sherry 20101124 - if(pMgntInfo->IOTPeer == HT_IOT_PEER_MARVELL) - { - PlatformMoveMemory(&(BA.BaParamSet), GET_BA_FRAME_PARAM_SET(mmpdu->Octet), 2); - SendDELBA(Adapter, Addr, &BA, RX_DIR, 1); - } - - RxTsDeleteBA(Adapter, pRxTs); - } - else - { - PTX_TS_RECORD pTxTs; - - if(!GetTs( - Adapter, - (PTS_COMMON_INFO*)&pTxTs, - Addr, - GET_DELBA_FRAME_PARAM_SET_TID(mmpdu->Octet), - TX_DIR, - FALSE) ) - { - return RT_STATUS_FAILURE; - } - - pTxTs->bUsingBa = FALSE; - pTxTs->bAddBaReqInProgress = FALSE; - pTxTs->bAddBaReqDelayed = FALSE; - PlatformCancelTimer(Adapter, &pTxTs->TsAddBaTimer); - TxTsDeleteBA(Adapter, pTxTs); - } - - return RT_STATUS_SUCCESS; -} - -// -// ADDBA initiate. This can only be called by TX side. -// -VOID -TsInitAddBA( - PADAPTER Adapter, - PTX_TS_RECORD pTS, - u1Byte Policy, - BOOLEAN bOverwritePending - ) -{ - PBA_RECORD pBA = &pTS->TxPendingBARecord; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>TsInitAddBA()\n")); - - if(pBA->bValid==TRUE && bOverwritePending==FALSE) - return; - - // Set parameters to "Pending" variable set - DeActivateBAEntry(Adapter, pBA); - - pBA->DialogToken++; // DialogToken: Only keep the latest dialog token - SET_BA_PARAM_SET_FIELD_AMSDU_SUPPORT(&(pBA->BaParamSet), 0); // Do not support A-MSDU with A-MPDU now!! - SET_BA_PARAM_SET_FIELD_BA_POLICY(&(pBA->BaParamSet), Policy); // Policy: Delayed or Immediate - SET_BA_PARAM_SET_FIELD_TID(&(pBA->BaParamSet), GET_TSPEC_BODY_TSINFO_TSID(pTS->TsCommonInfo.TSpec)); // TID - // BufferSize: This need to be set according to A-MPDU vector - - { - SET_BA_PARAM_SET_FIELD_BUF_SIZE(&(pBA->BaParamSet), 64); // BufferSize: This need to be set according to A-MPDU vector - } - - // TODO: Enable AMSDU may not be aware of AMPDU - if(HT_AMSDU_WITHIN_AMPDU == pHTInfo->ForcedAMSDUMode) - { - SET_BA_PARAM_SET_FIELD_AMSDU_SUPPORT(&(pBA->BaParamSet), 1); - } - - pBA->BaTimeoutValue = 0; // Timeout value: Set 0 to disable Timer - SET_BA_START_SQECTRL_FIELD_SEQ_NUM(&(pBA->BaStartSeqCtrl), ((pTS->TxCurSeq) % 4096)); - - ActivateBAEntry(Adapter, pBA, BA_SETUP_TIMEOUT); - - SendADDBAReq(Adapter, pTS->TsCommonInfo.Addr, pBA); - - if(!ACTING_AS_AP(Adapter)) - { - // Negoitate with current SeqNum, but active this BA after 3 packets Txed - SET_BA_START_SQECTRL_FIELD_SEQ_NUM(&(pBA->BaStartSeqCtrl), ((pTS->TxCurSeq + 3) % 4096)); - } -} - -VOID -TsInitDelBA( - PADAPTER Adapter, - PTS_COMMON_INFO pTsCommonInfo, - TR_SELECT TxRxSelect - ) -{ - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>TsInitDelBA()\n")); - - if(TxRxSelect == TX_DIR) - { - PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)pTsCommonInfo; - - if(TxTsDeleteBA(Adapter, pTxTs)) - SendDELBA( - Adapter, - pTsCommonInfo->Addr, - (pTxTs->TxAdmittedBARecord.bValid)?(&pTxTs->TxAdmittedBARecord):(&pTxTs->TxPendingBARecord), - TxRxSelect, - DELBA_REASON_END_BA ); - } - else if(TxRxSelect == RX_DIR) - { - PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)pTsCommonInfo; - if(RxTsDeleteBA(Adapter, pRxTs)) - SendDELBA( - Adapter, - pTsCommonInfo->Addr, - &pRxTs->RxAdmittedBARecord, - TxRxSelect, - DELBA_REASON_END_BA ); - } -} - -VOID -BaSetupTimeOut( - PRT_TIMER pTimer - ) -{ - PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)pTimer->Context; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>BaSetupTimeOut()\n")); - pTxTs->bAddBaReqInProgress = FALSE; - pTxTs->bAddBaReqDelayed = TRUE; - pTxTs->TxPendingBARecord.bValid = FALSE; -} - -VOID -TxBaInactTimeout( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)pTimer->Context; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>TxBaInactTimeout()\n")); - TxTsDeleteBA(Adapter, pTxTs); - SendDELBA( - Adapter, - pTxTs->TsCommonInfo.Addr, - &pTxTs->TxAdmittedBARecord, - TX_DIR, - DELBA_REASON_TIMEOUT ); -} - -VOID -RxBaInactTimeout( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PRX_TS_RECORD pRxTs = (PRX_TS_RECORD)pTimer->Context; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====>RxBaInactTimeout()\n")); - if(ACTING_AS_AP(Adapter)) - return; - - RxTsDeleteBA(Adapter, pRxTs); - SendDELBA( - Adapter, - pRxTs->TsCommonInfo.Addr, - &pRxTs->RxAdmittedBARecord, - RX_DIR, - DELBA_REASON_TIMEOUT ); -} - -VOID -RxBACheck( - PADAPTER Adapter, - PRT_RFD pRfd, - POCTET_STRING pFrame - ) -{ - -} - -// -// Description: Parse BlockAckReq frame -// -// 2015.08.19. Added by tynli. -// -RT_STATUS -OnBAReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN OCTET_STRING ospdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte pBARFrame = ospdu.Octet; - u1Byte BARAckPolicy, MultiTID, CompressedBitmap, GCR, TIDInfo = 0; - u2Byte StartSeqNum, LatestSeqNum; - PRX_TS_RECORD pTS = NULL; - pu1Byte Addr = Frame_Addr2(ospdu); - BAR_TYPE BARType = BAR_TYPE_BASIC_BAR; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("=====> OnBAReq()\n")); - - // Header (16) + BAR control (2) - if(ospdu.Length < 16 + 2) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnBAReq(): Invalid length(%d) of frame\n", ospdu.Length)); - return RT_STATUS_MALFORMED_PKT; - } - - // - // Check Block Ack Req support. - // Reject if there is no support of Block Ack Req. - // - if((pMgntInfo->pStaQos->CurrentQosMode == QOS_DISABLE) || - (pMgntInfo->pHTInfo->bCurrentHTSupport == FALSE)) - { - //StatusCode = ADDBA_STATUS_REFUSED; - return RT_STATUS_FAILURE; - } - - // Get the BAR control field offset - pBARFrame += 16; - BARAckPolicy = GET_BAR_PARAM_CTRL_FIELD_BAR_ACK_POLICY(pBARFrame); - if(BARAckPolicy == BAR_NORMAL_ACK) - { - // Normal Ack - MultiTID = GET_BAR_PARAM_CTRL_FIELD_MULTI_TID(pBARFrame); - CompressedBitmap = GET_BAR_PARAM_CTRL_FIELD_COMPRESSED_BITMAP(pBARFrame); - GCR = GET_BAR_PARAM_CTRL_FIELD_GCR(pBARFrame); - TIDInfo = GET_BAR_PARAM_CTRL_FIELD_TID_INFO(pBARFrame); - - if(MultiTID == 0 && CompressedBitmap == 0 && GCR == 0) - { - // Basic BlockAckReq - BARType = BAR_TYPE_BASIC_BAR; - } - else if(MultiTID == 0 && CompressedBitmap == 1 && GCR == 0) - { - // Compressed BlockAckReq - BARType = BAR_TYPE_COMPRESSED_BAR; - } - else if(MultiTID == 1 && CompressedBitmap == 0 && GCR == 0) - { - // Extended Compressed BlockAckReq - BARType = BAR_TYPE_EXT_COMPRESSED_BAR; - } - else if(MultiTID == 1 && CompressedBitmap == 1 && GCR == 0) - { - // Multi-TID BlockAckReq - BARType = BAR_TYPE_MULTI_TID_BAR; - } - else if(MultiTID == 0 && CompressedBitmap == 1 && GCR == 1) - { - // GCR BlockAckReq - BARType = BAR_TYPE_GCR_BAR; - } - else - { - // Reserved - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnBAReq(): BAR type is reserved.\n")); - - } - } - else - { - // No Ack - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnBAReq(): BAR ACK policy is No ACK. Not handle now!!\n")); - } - - - // - // Search for related traffic stream. - // - if(!GetTs( - Adapter, - (PTS_COMMON_INFO*)(&pTS), - Addr, - TIDInfo, - RX_DIR, - TRUE)) - { - return RT_STATUS_FAILURE; - } - - if(BARType == BAR_TYPE_BASIC_BAR || BARType == BAR_TYPE_COMPRESSED_BAR || - BARType == BAR_TYPE_EXT_COMPRESSED_BAR || BARType == BAR_TYPE_GCR_BAR) - { - PRT_LIST_ENTRY pList = &pTS->RxPendingPktList; - - // Get BAR Info - pBARFrame += 2; - StartSeqNum = GET_BAR_PARAM_INFO_FIELD_STARTING_SEQ_NUM(pBARFrame); - - // Check the last received sequence number - if(!RTIsListEmpty(pList)) - { - LatestSeqNum = ((PRX_REORDER_ENTRY)pList->Blink)->SeqNum; - } - else - { - // Pending list is empty! - LatestSeqNum = pTS->RxIndicateSeq; - } - - // Update Rx indicate seq num for TS. - if(!(SN_LESS(StartSeqNum, LatestSeqNum) || SN_EQUAL(StartSeqNum, LatestSeqNum))) - { - // - // Indicate packets queued in driver for RxReorder and prepare to receive packet from new - // new sequence start!! - // - if(pTS->RxIndicateState==RXTS_INDICATE_BATCH) - IndicateRxReorderList(Adapter, pTS, FALSE); - else if(pTS->RxIndicateState==RXTS_INDICATE_REORDER) - IndicateRxReorderList(Adapter, pTS, TRUE); - - if(!(SN_LESS(StartSeqNum, pTS->RxIndicateSeq) || SN_EQUAL(StartSeqNum, pTS->RxIndicateSeq))) - { - pTS->RxIndicateSeq = StartSeqNum; - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnBAReq(): Update Rx indcate starting sequence (%#X)!!\n", StartSeqNum)); - } - } - //RT_TRACE(COMP_QOS, DBG_LOUD, ("OnBAReq(): BARAckPolicy=%d, MultiTID=%d, CompressedBitmap=%#X, GCR=%d, TIDInfo=%d, StartSeqNum=%#X\n", - // BARAckPolicy, MultiTID, CompressedBitmap, GCR, TIDInfo, StartSeqNum)); - } - else if(BARType == BAR_TYPE_MULTI_TID_BAR) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnBAReq(): Multi-TID BAR is not supported now!!\n")); - } - - //RT_PRINT_DATA(COMP_QOS, DBG_LOUD, "OnBAReq() Frame:\n", ospdu.Octet, ospdu.Length); - - return RT_STATUS_SUCCESS; -} diff --git a/network/wlan/WDI/COMMON/BAGen.h b/network/wlan/WDI/COMMON/BAGen.h deleted file mode 100644 index 5609449f..00000000 --- a/network/wlan/WDI/COMMON/BAGen.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef __INC_BAGEN_H -#define __INC_BAGEN_H - -RT_STATUS -OnADDBAReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ); - -RT_STATUS -OnADDBARsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ); - -RT_STATUS -OnDELBA( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ); - -VOID -ResetBaEntry( - PBA_RECORD pBA - ); - -VOID -ExtendBAEntry( - PADAPTER Adapter, - PBA_RECORD pBA - ); - -VOID -TsInitAddBA( - PADAPTER Adapter, - PTX_TS_RECORD pTS, - u1Byte Policy, - BOOLEAN bOverwritePending - ); - -VOID -TsInitDelBA( - PADAPTER Adapter, - PTS_COMMON_INFO pTsCommonInfo, - TR_SELECT TxRxSelect - ); - -VOID -BaSetupTimeOut( - PRT_TIMER pTimer - ); - -VOID -TxBaInactTimeout( - PRT_TIMER pTimer - ); - -VOID -RxBaInactTimeout( - PRT_TIMER pTimer - ); - -RT_STATUS -OnBAReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN OCTET_STRING ospdu - ); - -#endif diff --git a/network/wlan/WDI/COMMON/BssCoexistence.c b/network/wlan/WDI/COMMON/BssCoexistence.c deleted file mode 100644 index 9335c634..00000000 --- a/network/wlan/WDI/COMMON/BssCoexistence.c +++ /dev/null @@ -1,331 +0,0 @@ -#include "Mp_Precomp.h" - - -#if WPP_SOFTWARE_TRACE -#include "BssCoexistence.tmh" -#endif - -VOID -BSS_ParsingOBSSInfoElement( - PADAPTER Adapter, - OCTET_STRING osFrame, - PRT_WLAN_BSS pBssDesc - ) -{ - pBssDesc->BssHT.OBSSScanInterval = - GET_OBSS_PARAM_ELE_SCAN_INTERVAL(osFrame.Octet); -} - -VOID -BSS_ParsingBSSCoexistElement( - PADAPTER Adapter, - OCTET_STRING osFrame, - PRT_WLAN_BSS pBssDesc - ) -{ - pBssDesc->BssHT.bdOBSSExemption = - GET_BSS_COEXISTENCE_ELE_OBSS_EXEMPTION_GRT(osFrame.Octet); -} - -VOID -BSS_AppendExentedCapElement( - PADAPTER pAdapter, - POCTET_STRING posFrame - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - OCTET_STRING Info; - u1Byte InfoContent[8] = {0}; - - FillOctetString(Info, InfoContent, sizeof(InfoContent)); - - if(pHTInfo->bBssCoexist) - { - SET_EXT_CAPABILITY_ELE_BSS_COEXIST(InfoContent, 1); - } - - if(pMgntInfo->pVHTInfo->bCurrentVHTSupport) - { - SET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(InfoContent, 1); - } - - PacketMakeElement( posFrame, EID_EXTCapability, Info); -} - - -VOID -BSS_AppendBSSCoexistReportElement( - PADAPTER Adapter, - POCTET_STRING posFrame - ) -{ - u2Byte i,j,k; - PRT_WLAN_BSS pRtBss = NULL; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING Info; - u1Byte InfoContent[16] = {0}; -// u1Byte ICS[255][15]; - //pu1Byte *ICS; - pu1Byte ICS; - PRT_GEN_TEMP_BUFFER pGenBufICS; - - // - // 2011/05/25 Justin/MH Two dimenssion array can not use below method. You need - // to allocate two layers pointer for array ICS[255][15]. To simplize the problem. We will only - // support one dimenssion arry to simulate 2/3/.. layer array as below. - // - - pGenBufICS = GetGenTempBuffer (Adapter, 255*15); - //ICS = (u1Byte **)pGenBufICS->Buffer.Ptr; - ICS = (u1Byte *)pGenBufICS->Buffer.Ptr; - - //PlatformZeroMemory (*ICS, 255*15); - for (i=0; iNumBssDesc4Query; i++) - { - pRtBss = pMgntInfo->bssDesc4Query+i; - - if(pRtBss->BssHT.bdSupportHT == FALSE) - { - //ICS[pRtBss->RegulatoryClass][pRtBss->ChannelNumber]=1; - //if(ICS[pRtBss->RegulatoryClass][0] == 0) - //ICS[pRtBss->RegulatoryClass][0] = 1; - ICS[pRtBss->RegulatoryClass*15+pRtBss->ChannelNumber]=1; - if(ICS[pRtBss->RegulatoryClass*15+0] == 0) - ICS[pRtBss->RegulatoryClass*15+0] = 1; - } - } - - for(i= 0;i<255;i++) - { - if(posFrame->Length > sMaxMpduLng) - break; - //if(ICS[i][0] == 1) - if(ICS[i*15+0] == 1) - { - k = 0; - SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent,i); - for(j=1;j<=14;j++) - { - //if(ICS[i][j]==1) - if(ICS[i*15+j]==1) - { - if(k<16) - { - SET_BSS_INTOLERANT_ELE_CHANNEL(InfoContent+k, j); - k++; - } - } - } - FillOctetString(Info, InfoContent, 2+k-1); - //PRINT_DATA("", Info.Octet, Info.Length); - PacketMakeElement(posFrame, EID_BSSIntolerantChlReport, Info); - } - } - ReturnGenTempBuffer (Adapter, pGenBufICS); -} - - -VOID -ConstructBSSCoexistPacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - BOOLEAN TE_A, - BOOLEAN TE_B - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - OCTET_STRING osBSSCOEXISTFrame; - OCTET_STRING Info; - u1Byte InfoContent[1] = {0}; - - FillOctetString(osBSSCOEXISTFrame, Buffer, 0); - *pLength = 0; - - ConstructMaFrameHdr( - Adapter, - Adapter->MgntInfo.Bssid, - ACT_CAT_PUBLIC, - ACT_PUBLIC_BSSCOEXIST, - &osBSSCOEXISTFrame); - - if(IS_WIRELESS_MODE_5G(Adapter)) - { - SET_BSS_COEXISTENCE_ELE_FORTY_INTOLERANT(InfoContent, 0); - } - else - { - SET_BSS_COEXISTENCE_ELE_FORTY_INTOLERANT(InfoContent, pHTInfo->b40Intolerant); - } - - if(TE_B) - SET_BSS_COEXISTENCE_ELE_20_WIDTH_REQ(InfoContent, 1); - - FillOctetString(Info, InfoContent, 1); - PacketMakeElement(&osBSSCOEXISTFrame, EID_BSSCoexistence, Info); - - if(TE_A) - BSS_AppendBSSCoexistReportElement(Adapter, &osBSSCOEXISTFrame); - - *pLength = osBSSCOEXISTFrame.Length; -} - - -VOID -SendBSSCoexistPacket( - PADAPTER Adapter, - BOOLEAN TE_A, - BOOLEAN TE_B - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = MgntQuery_MgntFrameTxRate(Adapter, Adapter->MgntInfo.Bssid); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructBSSCoexistPacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - TE_A, - TE_B - ); - - if(pTcb->PacketLength != 0) - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -RT_STATUS -OnBssCoexistence( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - return RT_STATUS_NOT_SUPPORT; -} - -VOID -BSS_OnScanComplete( - IN PADAPTER Adapter - ) -{ - u2Byte i; - PRT_WLAN_BSS pRtBss = NULL; - BOOLEAN TE_A = FALSE, TE_B = FALSE; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - u8Byte curSystemTimeUs = 0; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("bCurrentHTSupport %d bPeerBssCoexistence %d, bPeer40MHzIntolerant %d, bCurOBSSScanExemptionGrt %d CurOBSSScanInterval %d\n", pHTInfo->bCurrentHTSupport, pHTInfo->bPeerBssCoexistence, pHTInfo->bPeer40MHzIntolerant, pHTInfo->bCurOBSSScanExemptionGrt, pHTInfo->CurOBSSScanInterval)); - - do - { - // Only collect information to associated ap - if(!pMgntInfo->mAssoc) - break; - // Only sent message to FC HT AP - else if(pHTInfo->bCurrentHTSupport == FALSE || pHTInfo->bPeer40MHzCap == FALSE) - break; - else if(pHTInfo->bBssCoexist == FALSE || pHTInfo->bPeerBssCoexistence == FALSE) - break; - else if(!CHNL_GetRegBWSupport(Adapter)) - break; - else if(TRUE == pHTInfo->bCurOBSSScanExemptionGrt) - break; - - for (i=0; iNumBssDesc4Query; i++) - { - pRtBss = pMgntInfo->bssDesc4Query+i; - - if(pRtBss->BssHT.bdSupportHT == FALSE) - TE_A = TRUE; - else if(pRtBss->BssHT.bd40Intolerant == TRUE) - TE_B = TRUE; - - if(TE_A && TE_B) - break; - } - - pHTInfo->IdleOBSSScanCnt = 0; - curSystemTimeUs = PlatformGetCurrentTime(); - - // Check the conditions and the interval to send the report (we don't send the report repeatly as soon) - if((TE_A || TE_B) && - (0 == pHTInfo->lastTimeSentObssRptUs || - ((curSystemTimeUs - pHTInfo->lastTimeSentObssRptUs) > ((pHTInfo->CurOBSSScanInterval * 2 / 3) * 1000000)))) - { - RT_TRACE_F(COMP_HT, DBG_LOUD, - ("SendBSSCoexistPacket() TE_A(%d), TE_B(%d), (curSystemTimeUs - pHTInfo->lastTimeSentObssRptUs) = %d \n", TE_A, TE_B, (u4Byte)(curSystemTimeUs - pHTInfo->lastTimeSentObssRptUs))); - pHTInfo->lastTimeSentObssRptUs = curSystemTimeUs; - SendBSSCoexistPacket(Adapter, TE_A, TE_B); - } - }while(FALSE); - - RT_TRACE_F(COMP_HT, DBG_LOUD, ("<== IdleOBSSScanCnt = %d, pHTInfo->lastTimeSentObssRptUs = %d\n", pHTInfo->IdleOBSSScanCnt, (u4Byte)pHTInfo->lastTimeSentObssRptUs)); -} - -// -// Description: -// The wachdog monitor the BSS coexistance in 40MHz. The OBSS information asks the client -// to periodically scan the 40MHz intolerant APs. -// Arguments: -// [in] pAdapter - -// The current Adapter context. -// Return: -// None -// By Bruce, 2011-07-29. -// -VOID -BSS_IdleScanWatchDog( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - u2Byte ObssScanInterfaval = 0; - - // Only collect information to associated ap - if(!pMgntInfo->mAssoc) - return; - - // Only sent message to FC HT AP - if(pHTInfo->bCurrentHTSupport == FALSE) - return; - // We are not in 40MHz - else if(!CHNL_RUN_ABOVE_40MHZ(pMgntInfo)) - return; - else if(pHTInfo->bBssCoexist == FALSE || pHTInfo->bPeerBssCoexistence == FALSE) - return; - else if(pHTInfo->bCurOBSSScanExemptionGrt == TRUE) - return; - else if(0 == pHTInfo->CurOBSSScanInterval) - return; - else if(pMgntInfo->LinkDetectInfo.bHigherBusyTraffic) - return; - - // We don't want the scan interval too small. - // By Bruce, 2011-07-28. - if(pHTInfo->CurOBSSScanInterval < RT_OBSS_MIN_TRIGGER_SCAN_INTERVAL) - ObssScanInterfaval = RT_OBSS_MIN_TRIGGER_SCAN_INTERVAL; - else - ObssScanInterfaval = pHTInfo->CurOBSSScanInterval; - - pHTInfo->IdleOBSSScanCnt ++; - - if((pHTInfo->IdleOBSSScanCnt * RT_CHECK_FOR_HANG_PERIOD) >= ObssScanInterfaval) - { - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Reaches the OBSS scan interval, start to scan....\n")); - pHTInfo->IdleOBSSScanCnt = 0; - - MgntActSet_802_11_BSSID_LIST_SCAN(pAdapter); - } -} diff --git a/network/wlan/WDI/COMMON/CcxGen.h b/network/wlan/WDI/COMMON/CcxGen.h deleted file mode 100644 index a268c240..00000000 --- a/network/wlan/WDI/COMMON/CcxGen.h +++ /dev/null @@ -1,710 +0,0 @@ -#ifndef __INC_CCX_GEN_H -#define __INC_CCX_GEN_H - - -#if CCX_SUPPORT -//------------------------------------------------------------------------------ -// WLAN/CCX interface. -//------------------------------------------------------------------------------ -VOID -CCX_Initialize( - IN PADAPTER pAdapter - ); - -VOID -CCX_OnSetupJoinInfraInfo( - IN PADAPTER pAdapter, - IN PRT_WLAN_BSS pRtBss - ); - -VOID -CCX_OnAssocOk( - IN PADAPTER pAdapter, - IN POCTET_STRING posAsocRsp, - IN BOOLEAN bReassociate - ); - -VOID -CCX_OnBssReset( - IN PADAPTER pAdapter - ); - -VOID -CCX_OnLinkStatusWatchdog( - IN PADAPTER pAdapter - ); - -VOID -CCX_OnScanComplete( - IN PADAPTER pAdapter - ); - -VOID -CCX_OnRoamOk( - IN PADAPTER pAdapter, - IN POCTET_STRING posReAsocRsp - ); - -VOID -CCX_OnRoamFailed( - IN PADAPTER pAdapter - ); - -RT_STATUS -CCX_OnIAPPPacket( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -u4Byte -CCX_GetPacketType( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu - ); - -u4Byte -CCX_ParsePacket( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ); - -//------------------------------------------------------------------------------ -// CCX version and capability. -//------------------------------------------------------------------------------ -VOID -CCX_AppendAironetIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -CCX_AppendCcxVerIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -CCX_AppendCcxCellPowerIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -CCX_RM_AppendRmCapIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -CCX_AppendMHDRIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -BOOLEAN -CCX_VerifyRxMFP_MHDRIE( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ); - - -//------------------------------------------------------------------------------ -// Layer 2 roaming routines. -//------------------------------------------------------------------------------ -VOID -CCX_ClearAdjacentApReport( - IN PADAPTER pAdapter - ); - -VOID -CCX_UpdateAdjacentApReport( - IN PADAPTER pAdapter - ); - -VOID -CCX_SendAdjacentApReport( - IN PADAPTER pAdapter - ); - -unsigned int -CCX_NeighborHash( - IN RT_HASH_KEY Key - ); - -VOID -CCX_ResetNeighborList( - IN PADAPTER pAdapter - ); - -u4Byte -CCX_OnNeighborListResponse( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN PRT_RFD pRfd - ); - -VOID -CCX_UpdateNeighborList( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN u4Byte ElementStartOffset, - IN PBOOLEAN pbScan - ); - - -u4Byte -CCX_OnDirectRoam( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN PRT_RFD pRfd - ); - -VOID -CCX_TryToRoam( - IN PADAPTER pAdapter, - IN PRT_WLAN_BSS pRtBss - ); - -VOID -CCX_SendNeighborPoll( - IN PADAPTER pAdapter - ); -//------------------------------------------------------------------------------ -// Link Test. -//------------------------------------------------------------------------------ -u4Byte -CCX_OnLinkTestRequest( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN PRT_RFD pRfd - ); - -VOID -CCX_HandleLinkTestRequest( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN s4Byte RecvSignalPower - ); - -VOID -CCX_HandleLinkTestReplySentComplete( - IN PADAPTER pAdapter, - IN u2Byte SeqNo, - IN u1Byte RetryCnt - ); - -VOID -CCX_CheckLinkTestRequetQueued( - IN PADAPTER pAdapter - ); - -VOID -CCX_ResetLinkTestRequestWaitQueue( - IN PRT_CCX_INFO pCcxInfo - ); - -VOID -CCX_AddLinkTestRequestWaitQueue( - IN PRT_CCX_INFO pCcxInfo, - IN POCTET_STRING posMpdu, - IN s4Byte RecvSignalPower - ); - -BOOLEAN -CCX_RemoveLinkTestRequestWaitQueue( - IN PRT_CCX_INFO pCcxInfo - ); - -#define CCX_IsLinkTestRequestWaitQueueEmpty(_pCcxInfo) ((_pCcxInfo)->LtRequestWaitQueueSize == 0) - -PRT_LT_REQ -CCX_GetHeadOfTestRequestWaitQueue( - IN PRT_CCX_INFO pCcxInfo - ); - -VOID -CCX_ResetLinkTestReplySet( - IN PRT_CCX_INFO pCcxInfo - ); - -VOID -CCX_AddLinkTestReply( - IN PADAPTER Adapter, - IN u2Byte SeqNo, - IN u2Byte FrameNumber - ); - -PRT_LT_REP_RETRY -CCX_FindLinkTestReplyBySeqNo( - IN PRT_CCX_INFO pCcxInfo, - IN u2Byte SeqNo - ); - -PRT_LT_REP_RETRY -CCX_FindLinkTestReplyByFrameNumber( - IN PRT_CCX_INFO pCcxInfo, - IN u2Byte FrameNumber - ); - -BOOLEAN -CCX_UpdateLinkTestReply( - IN PRT_CCX_INFO pCcxInfo, - IN u2Byte SeqNo, - IN u1Byte RetryCnt - ); - -PRT_LT_REP_RETRY -CCX_FindLinkTestReplyByPacketID( - IN PADAPTER pAdapter, - IN u1Byte PacketID - ); - -PRT_LT_REP_RETRY -CCX_GetHeadLinkTestReply( - IN PRT_CCX_INFO pCcxInfo - ); -//------------------------------------------------------------------------------ -// Qos related. -//------------------------------------------------------------------------------ - -u4Byte -CCX_CAC_GetVoNominalPhyRate( - IN PADAPTER Adapter, - IN u1Byte Rate - ); - -u2Byte -CCX_CAC_GetVoSurplusBandwith( - IN PADAPTER Adapter, - IN u1Byte Rate - ); - -VOID -CCX_CAC_ConstructVoiceTspec( - IN PADAPTER Adapter, - IN WMM_TSPEC tspec - ); - -VOID -CCX_CAC_ConstructSignalTspec( - IN PADAPTER Adapter, - IN WMM_TSPEC tspec - ); - -VOID -CCX_CAC_AddTs( - IN PADAPTER Adapter - ); - -VOID -CCX_CAC_DelTs( - IN PADAPTER Adapter - ); - -BOOLEAN -CCX_CAC_IsVoiceTsExist( - IN PADAPTER Adapter - ); - -BOOLEAN -CCX_CAC_IsSignalTsExist( - IN PADAPTER Adapter - ); - -VOID -CCX_CAC_RoamOk( - IN PADAPTER Adapter, - IN POCTET_STRING posReAsocRsp - ); - -VOID -CCX_CAC_RoamFailed( - IN PADAPTER Adapter - ); - -BOOLEAN -CCX_CallAdmissionControl( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ); - -VOID -CCX_SessionRetryTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -CCX_SetAssocInfoTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -CCX_FlushAllTs( - IN PADAPTER Adapter - ); - - -//------------------------------------------------------------------------------ -// SSIDL routines. -//------------------------------------------------------------------------------ - -// -//Description: -// Follow an SSIDInfo to Construct BSS -//Input : -// pSSIDInfo : an SSID entry of SSIDL -// pExtenBSS : Output BBS -// pOrgBSS : The BSS include this SSIDL -// -VOID -CCX_SSIDL_ConstructBSS( - IN PADAPTER Adapter, - IN PCCX_SSIDL_SSID_ELEMENT pSSIDInfo, // Exten SSID information - IN PRT_WLAN_BSS pExtenBSS, // Exten BSS - IN PRT_WLAN_BSS pOrgBSS // Basic BSS -); - -VOID -CCX_GetSSIDLToBssList( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pOrgBSS - ); - - -// -// Description: -// Constr New Beacon for Indic to WZC to Pass check -// -// Input : -// pSSIDInfo : an SSID entry of SSIDL ( Connect SSID name ) -// -VOID -CCX_SSIDL_UpdateAsocBeacon( - IN PADAPTER pAdapter, - IN PCCX_SSIDL_SSID_ELEMENT pSSIDInfo, // Exten SSID information - IN PRT_RFD pRfd, - IN PRT_WLAN_BSS pOrgBSS // Basic BSS -); - - -VOID -CCX_AppendCcxSFAIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -VOID -CCX_AppendCcxDiagReqReasonIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -BOOLEAN -CCX_Construct_DiagChnl_AssocReq( - IN PADAPTER pAdapter, - IN pu1Byte Buffer, - OUT pu4Byte pLength - ); - -pu1Byte -CCX_HashNextSSIDL( - IN POCTET_STRING posIe, - IN OUT pu4Byte pOffset - ); - -VOID -CCX_ConstructReAssociateReq( - IN PADAPTER Adapter, - OUT POCTET_STRING ReAsocReq - ); - -VOID -CCX_ConstructDeauthenticatePacket( - IN PADAPTER Adapter, - OUT pu1Byte pdeauth, - OUT POCTET_STRING Deauth - ); - -VOID -CCX_ConstructDisassociatePacket( - IN PADAPTER Adapter, - OUT pu1Byte pdisassoc, - OUT POCTET_STRING Disas - ); - - -VOID -CCX_ConstructQosADDTSPacket( - IN PADAPTER Adapter, - OUT POCTET_STRING osAddTs - ); - -VOID -CCX_ConstructQosDELTSPacket( - IN PADAPTER Adapter, - OUT POCTET_STRING osDelTs - ); - -VOID -CCX_MgntLinkKeepAlive( - IN PADAPTER pAdapter - ); - -VOID -CCX_8021xModeChange( - IN PADAPTER pAdapter, - IN BOOLEAN Value - ); - -VOID -CCX_MFPModeChange( - IN PADAPTER pAdapter, - IN BOOLEAN Value - ); - -VOID -CCX_DrvIFCompletePacket( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ); - -BOOLEAN -CCX_IndicateAssociationStart( - IN PADAPTER Adapter - ); - -VOID -CCX_GPParserCustomHandleUDP2SIP( - IN PADAPTER Adapter, - IN RT_SPINLOCK_TYPE SpinLockType, - OUT BOOLEAN *pbQosData, - OUT BOOLEAN *pbReturn, - OUT BOOLEAN *pbRejectData - ); - -VOID -CCX_OnAddTsRspSet( - IN PADAPTER Adapter - ); - -BOOLEAN -CCX_QosReturnAllPendingTxMsdu( - IN PADAPTER Adapter - ); - -BOOLEAN -CCX_ParseRfd( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN OCTET_STRING frame, - OUT BOOLEAN *pbFreeRfd - ); - -VOID -CCX_QueryMFPSupport( - IN PADAPTER Adapter, - OUT BOOLEAN *pbCcxMFPEnable, - OUT pu1Byte pMFPtk - ); - -VOID -CCX_QueryMFPAESSupport( - IN PADAPTER Adapter, - OUT BOOLEAN *pbCcxMFPEnable, - OUT pu1Byte MFPAESKeyBuf - ); - -VOID -CCX_QueryCCKMSupport( - IN PADAPTER Adapter, - OUT BOOLEAN *pbCCX8021xenable, - OUT BOOLEAN *pbAPSuportCCKM - ); - -VOID -CCX_QueryCACSupport( - IN PADAPTER Adapter, - OUT BOOLEAN *pbCcxCACEnable - ); - -PCCX_TSM_COUNTER -CCX_QueryTSMSupport( - IN PADAPTER Adapter, - OUT BOOLEAN *pbEnableTSM, - IN u1Byte TsIdx - ); - -VOID -CCX_QueryIHVSupport( - IN PADAPTER Adapter, - OUT BOOLEAN *pbIhvFrameLogMode - ); - -VOID -CCX_QueryVersionNum( - IN PADAPTER Adapter, - OUT u1Byte *pCurrCcxVerNumber - ); - -VOID -CCX_TSMTxFeedbackCallback( - IN PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo - ); - -VOID -CCX_LinkTestTxFeedbackCallback( - IN PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo - ); - -VOID -CCX_FwC2HTxRpt( - IN PADAPTER Adapter, - IN u1Byte QueueID, - IN pu1Byte tmpBuf - ); - -VOID -CCX_QueryTxPower( - IN PADAPTER Adapter, - OUT s4Byte *pPowerlevel - ); - -VOID -CCX_SetAssocReason( - IN PADAPTER Adapter, - IN CCX_ASOC_REASON Reason - ); - -VOID -CCX_SetCCKMTimeStamp( - IN PADAPTER Adapter, - IN u8Byte TimeStamp - ); - -BOOLEAN -CCX_MlmeAssociateRequest( - IN PADAPTER Adapter - ); - -#define CCX_CATASTROPHIC_REASON_UNSPECIFY 0 -#define CCX_CATASTROPHIC_REASON_TX_FAIL 1 - -u4Byte -CCX_CatastrophicRoaming( - IN PADAPTER pAdapter, - IN u4Byte roamReason - ); - -VOID -CCX_CellPowerLimit( - IN PADAPTER pAdapter, - IN u1Byte channel, - IN u1Byte rate, - IN pu1Byte pTxPower - ); - -VOID -CCX_UpdateUsedTime( - PADAPTER pAdapter - ); - -RT_STATUS -CCX_SSIDLUpdateJoinBss( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN PRT_WLAN_BSS pBssDesc - ); - -RT_STATUS -CCX_AppendAssocReqCCKMIE( - IN PADAPTER pAdapter, - OUT pu1Byte pBuffer, - OUT pu4Byte pOutputLen - ); - -RT_STATUS -CCX_AppendAssocRspCCKMIE( - IN PADAPTER pAdapter, - OUT pu1Byte pBuffer, - OUT pu4Byte pOutputLen - ); - -#else // #if CCX_SUPPORT -#define CCX_Initialize(_pAdapter) -#define CCX_OnSetupJoinInfraInfo(pAdapter, pRtBss) -#define CCX_OnAssocOk(pAdapter, posAsocRsp, bReassociate) -#define CCX_OnBssReset(pAdapter) -#define CCX_OnLinkStatusWatchdog(pAdapter) -#define CCX_OnScanComplete(pAdapter) -#define CCX_OnIAPPPacket NULL -#define CCX_ParsePacket(pAdapter, pRfd) (FALSE) -#define CCX_AppendAironetIE(pAdapter, posFrame) -#define CCX_AppendCcxVerIE(pAdapter, posFrame) -#define CCX_AppendCcxCellPowerIE(pAdapter, posFrame) -#define CCX_RM_AppendRmCapIE(pAdapter, posFrame) -#define CCX_AppendMHDRIE(pAdapter, posFrame) -#define CCX_VerifyRxMFP_MHDRIE(pAdapter, pRfd) (TRUE) -#define CCX_NeighborHash(Key) (0) -#define CCX_FindLinkTestReplyByFrameNumber(pCcxInfo, FrameNumber) (NULL) -#define CCX_HandleLinkTestReplySentComplete(pAdapter, SeqNo, RetryCnt) -#define CCX_FindLinkTestReplyBySeqNo(pCcxInfo, SeqNo) (NULL) -#define CCX_AddLinkTestReply(Adapter, SeqNo, FrameNumber) -#define CCX_FindLinkTestReplyByPacketID(pAdapter, PacketID) (NULL) -#define CCX_GetHeadLinkTestReply(pCcxInfo) (NULL) -#define CCX_OnRoamFailed(pAdapter) -#define CCX_SSIDL_UpdateAsocBeacon(pAdapter, pSSIDInfo, pRfd, pOrgBSS) -#define CCX_HashNextSSIDL(posIe, pOffset) -#define CCX_GetSSIDLToBssList(Adapter, pOrgBSS) -#define CCX_CAC_IsVoiceTsExist(Adapter) (FALSE) -#define CCX_FlushAllTs(Adapter) -#define CCX_CallAdmissionControl(Adapter, pTcb) (FALSE) -#define CCX_CAC_AddTs(Adapter) -#define CCX_CAC_DelTs(Adapter) -#define CCX_CAC_ConstructSignalTspec(Adapter, tspec) -#define CCX_CAC_ConstructVoiceTspec(Adapter, tspec) -#define CCX_SessionRetryTimerCallback(pTimer) -#define CCX_SetAssocInfoTimerCallback(pTimer) -#define CCX_AppendCcxSFAIE(pAdapter, posFrame) -#define CCX_Construct_DiagChnl_AssocReq(pAdapter, Buffer,pLength) (FALSE) -#define CCX_CatastrophicRoaming(pAdapter,roamReason) (0) -#define CCX_ConstructReAssociateReq(Adapter, ReAsocReq) -#define CCX_ConstructDeauthenticatePacket(Adapter, pdeauth, Deauth) -#define CCX_ConstructDisassociatePacket(Adapter, pdisassoc,Disas) -#define CCX_ConstructQosADDTSPacket(Adapter, osAddTs) -#define CCX_ConstructQosDELTSPacket(Adapter,osDelTs) -#define CCX_MgntLinkKeepAlive(pAdapter) -#define CCX_8021xModeChange(pAdapter, Value) -#define CCX_MFPModeChange(pAdapter, Value) -#define CCX_DrvIFCompletePacket(Adapter, pTcb) -#define CCX_IndicateAssociationStart(Adapter) (FALSE) -#define CCX_GPParserCustomHandleUDP2SIP(Adapter, SpinLockType, pbQosData, pbReturn, pbRejectData) -#define CCX_OnAddTsRspSet(Adapter) -#define CCX_QosReturnAllPendingTxMsdu(Adapter) (FALSE) -#define CCX_ParseRfd(Adapter, pRfd, frame, pbFreeRfd) (FALSE) -#define CCX_QueryMFPSupport(Adapter, pbCcxMFPEnable, pMFPtk) -#define CCX_QueryMFPAESSupport(Adapter,pbCcxMFPEnable, MFPAESKeyBuf) -#define CCX_QueryCCKMSupport(Adapter, pbCCX8021xenable, pbAPSuportCCKM) -#define CCX_QueryCACSupport(Adapter, pbCcxCACEnable) -#define CCX_QueryTSMSupport(Adapter, pbEnableTSM, TsIdx) (NULL) -#define CCX_QueryIHVSupport(Adapter, pbIhvFrameLogMode) -#define CCX_QueryVersionNum(Adapter, pCurrCcxVerNumber) -#define CCX_TSMTxFeedbackCallback(pAdapter, pTxFeedbackInfo) -#define CCX_LinkTestTxFeedbackCallback(pAdapter, pTxFeedbackInfo) -#define CCX_FwC2HTxRpt(Adapter, QueueID, tmpBuf) -#define CCX_C2HCommandHandler(Adapter, QueueID,tmpBuf) -#define CCX_QueryTxPower(Adapter, pPowerlevel) -#define CCX_SetAssocReason(Adapter,Reason) -#define CCX_SetCCKMTimeStamp(Adapter, TimeStamp) -#define CCX_MlmeAssociateRequest(Adapter) (FALSE) -#define CCX_CellPowerLimit(Adapter, channel, rate, pTxPower) -#define CCX_UpdateUsedTime(Adapter) -#define CCX_SSIDLUpdateJoinBss(_pAdapter, _pRfd, pBssDesc) (RT_STATUS_NOT_SUPPORT) -#define CCX_AppendAssocReqCCKMIE(_pAdapter, _pBuffer, _pOutputLen) (RT_STATUS_NOT_SUPPORT) -#define CCX_AppendAssocRspCCKMIE(_pAdapter, _pBuffer, _pOutputLen) (RT_STATUS_NOT_SUPPORT) - -#endif // #if CCX_SUPPORT -#endif // #ifndef __INC_CCX_GEN_H diff --git a/network/wlan/WDI/COMMON/ChannelInfo.c b/network/wlan/WDI/COMMON/ChannelInfo.c deleted file mode 100644 index 71ff6490..00000000 --- a/network/wlan/WDI/COMMON/ChannelInfo.c +++ /dev/null @@ -1,833 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "ChannelInfo.tmh" -#endif - -u1Byte -CHNL_GetCenterFrequency( - IN u1Byte Channel, - IN CHANNEL_WIDTH ChnlBW, - IN EXTCHNL_OFFSET ExtChnlOffset -) -{ - u1Byte CenterFrequency = Channel; - - if(ChnlBW == CHANNEL_WIDTH_80) - { - if((Channel == 36) || (Channel == 40) || (Channel == 44) || (Channel == 48) ) - CenterFrequency = 42; - if((Channel == 52) || (Channel == 56) || (Channel == 60) || (Channel == 64) ) - CenterFrequency = 58; - if((Channel == 100) || (Channel == 104) || (Channel == 108) || (Channel == 112) ) - CenterFrequency = 106; - if((Channel == 116) || (Channel == 120) || (Channel == 124) || (Channel == 128) ) - CenterFrequency = 122; - if((Channel == 132) || (Channel == 136) || (Channel == 140) || (Channel == 144) ) - CenterFrequency = 138; - if((Channel == 149) || (Channel == 153) || (Channel == 157) || (Channel == 161) ) - CenterFrequency = 155; - else if(Channel <= 14) - CenterFrequency = 7; - } - else if(ChnlBW == CHANNEL_WIDTH_40) - { - if(ExtChnlOffset == EXTCHNL_OFFSET_UPPER) - CenterFrequency = Channel + 2; - else - CenterFrequency = Channel - 2; - } - return CenterFrequency; -} - - - -EXTCHNL_OFFSET -CHNL_GetExt20OffsetOf5G( - IN u1Byte channel - ) -{ - u1Byte i; - EXTCHNL_OFFSET ExtChnlOffset = EXTCHNL_OFFSET_LOWER; - u1Byte UpperChannelList_5G[11] = {36,44,52,60,100,108,116,124,132,149,157}; - - for(i =0; i < 11;i++) - { - if(channel == UpperChannelList_5G[i]) - break; - } - if(i < 11) - ExtChnlOffset = EXTCHNL_OFFSET_UPPER; - - RT_DISP(FCHNL, FCHNL_INFO, ("%s channel=%d, ExtChnlOffset=%d\n", __FUNCTION__, channel, ExtChnlOffset)); - - return ExtChnlOffset; -} - - -u1Byte -CHNL_IsLegalChannel( - PADAPTER Adapter, - u8Byte freq_channel -) -{ - PRT_CHANNEL_LIST pChanneList = NULL; - u2Byte i; - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChanneList); - - //Skip check legal channel when doing fast USB switch, since we only have one channel in channel list, 20150408, Sean. - - if (pChanneList->ChannelLen == 1) - { - return (u1Byte)freq_channel; - } - - for(i = 0; i < pChanneList->ChannelLen; i ++) - { - if(freq_channel == pChanneList->ChnlListEntry[i].ChannelNum) - { - return pChanneList->ChnlListEntry[i].ChannelNum; - }// TODO: ending check 5G first - else if(freq_channel == pChanneList->ChnlListEntry[i].ChannelNum + 2) - { - return (u1Byte)freq_channel; - } - if( (pChanneList->ChnlListEntry[i].ChannelNum <= 14) && (freq_channel == DSSS_Freq_Channel[pChanneList->ChnlListEntry[i].ChannelNum]*1000) ) - { - return pChanneList->ChnlListEntry[i].ChannelNum; - } - } - return 0; -} - - -BOOLEAN -CHNL_IsLegal5GChannel( - IN PADAPTER Adapter, - IN u1Byte channel -) -{ - - u1Byte i=0; - u1Byte Channel_5G[45] = {36,38,40,42,44,46,48,50,52,54,56,58, - 60,62,64,100,102,104,106,108,110,112,114,116,118,120,122, - 124,126,128,130,132,134,136,138,140,149,151,153,155,157,159, - 161,163,165}; - for(i=0;iMgntInfo; - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - BOOLEAN bGetLock = FALSE; - - PlatformAcquireSpinLock(Adapter, RT_CHNLOP_SPINLOCK); - if(CHNL_OP_IN_PROGRESS(pChnlInfo)) - { - bGetLock = FALSE; - } - else - { - pChnlInfo->ChnlOp = ChnlOp; - bGetLock = TRUE; - } - PlatformReleaseSpinLock(Adapter, RT_CHNLOP_SPINLOCK); - return bGetLock; -} - -VOID -CHNL_ReleaseOpLock( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - - PlatformAcquireSpinLock(Adapter, RT_CHNLOP_SPINLOCK); - pChnlInfo->ChnlOp = CHNLOP_NONE; - PlatformReleaseSpinLock(Adapter, RT_CHNLOP_SPINLOCK); -} - - -BOOLEAN -CHNL_ValidForWirelessMode( - u1Byte channel, - u2Byte wirelessmode - ) -{ - - BOOLEAN ret = FALSE; - - do - { - if(IS_5G_WIRELESS_MODE(wirelessmode) && channel > 14) - { - ret = TRUE; - break; - } - - if(IS_24G_WIRELESS_MODE(wirelessmode) && channel <= 14) - { - ret = TRUE; - break; - } - }while(FALSE); - - return ret; -} - - -CHANNEL_WIDTH -CHNL_GetRegBWSupport( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - CHANNEL_WIDTH retBW = 0; - - - if(HAL_Support_BW_Advancesetting(Adapter)) - { - if(IS_WIRELESS_MODE_24G(Adapter)) - retBW = (pHTInfo->bRegBW40MHzFor2G ? CHANNEL_WIDTH_40:CHANNEL_WIDTH_20) ; - else if(IS_WIRELESS_MODE_5G(Adapter)) - retBW = (pHTInfo->bRegBW40MHzFor5G ? CHANNEL_WIDTH_40:CHANNEL_WIDTH_20) ; - } - else - retBW = pChnlInfo->RegBWSetting; - - - return retBW; -} - - - - -VOID -chnl_GetBWFrom_IE( - IN PADAPTER Adapter, - OUT PCHANNEL_WIDTH pChnlBW, - OUT PEXTCHNL_OFFSET pExtChnlOffset -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - BOOLEAN bBW40MHz = FALSE, bBW80MHz = FALSE; - CHANNEL_WIDTH ChnlBW = CHANNEL_WIDTH_20; - EXTCHNL_OFFSET ExtChnlOffset = EXTCHNL_OFFSET_NO_EXT; - - if(pHTInfo->bCurrentHTSupport) - { - CHANNEL_WIDTH PeerChnlBW = (CHANNEL_WIDTH)pHTInfo->bPeer40MHzCap; - EXTCHNL_OFFSET PeerExtChnlOffset = pHTInfo->PeerExtChnlOffset; - - ChnlBW = CHNL_GetRegBWSupport(Adapter); - if(ChnlBW == CHANNEL_WIDTH_20) // 20 STA -> 40 AP or 20 STA -> 20 AP - ExtChnlOffset = EXTCHNL_OFFSET_NO_EXT; - else if(PeerChnlBW == CHANNEL_WIDTH_20) // 40 STA -> 20 AP - ChnlBW = CHANNEL_WIDTH_20; - else if(PeerExtChnlOffset == EXTCHNL_OFFSET_NO_EXT) - ChnlBW = CHANNEL_WIDTH_20; - else // 40 STA -> 40 AP - { - if( PeerExtChnlOffset == EXTCHNL_OFFSET_UPPER && - CHNL_IsLegalChannel(Adapter, pMgntInfo->dot11CurrentChannelNumber + 2)) - bBW40MHz = TRUE; - else if(PeerExtChnlOffset== EXTCHNL_OFFSET_LOWER && - CHNL_IsLegalChannel(Adapter, pMgntInfo->dot11CurrentChannelNumber - 2)) - bBW40MHz = TRUE; - else - bBW40MHz = FALSE; - - if(bBW40MHz == TRUE) - { - ChnlBW = PeerChnlBW; - ExtChnlOffset = PeerExtChnlOffset; - } - else - { - ChnlBW = CHANNEL_WIDTH_20; - ExtChnlOffset = EXTCHNL_OFFSET_NO_EXT; - } - } - RT_DISP(FCHNL, FCHNL_INFO, ("%s PeerChnlBW=%d, PeerExtChnlOffset=%d\n", __FUNCTION__, PeerChnlBW, PeerExtChnlOffset)); - } - else - ChnlBW = CHANNEL_WIDTH_20; - - - if(bBW40MHz && pVHTInfo->bCurrentVHTSupport) - { - bBW80MHz = (CHNL_GetRegBWSupport(Adapter) >= CHANNEL_WIDTH_80)?(pVHTInfo->PeerChnlBW?1:0):0; - - if(bBW80MHz == 0) - ChnlBW = CHANNEL_WIDTH_40; - else - ChnlBW = CHANNEL_WIDTH_80; - } - - *pChnlBW = ChnlBW; - *pExtChnlOffset = ExtChnlOffset; - - RT_DISP(FCHNL, FCHNL_INFO, ("%s ChnlBW=%d, ExtChnlOffset=%d, bEnableVHT = %d, bCurrentHTSupport = %d, bCurrentVHTSupport = %d,\n PeerChnlBW = %d, CHNL_GetRegBWSupport() = %d\n", __FUNCTION__, ChnlBW, ExtChnlOffset, pVHTInfo->bEnableVHT, pHTInfo->bCurrentHTSupport, pVHTInfo->bCurrentVHTSupport, pVHTInfo->PeerChnlBW, CHNL_GetRegBWSupport(Adapter))); -} - - -VOID -CHNL_ChangeBwChnlFromPeerWorkitemCallBack( - IN PVOID Context -) -{ - PADAPTER Adapter = (PADAPTER)Context; - CHANNEL_WIDTH ChnlBW; - EXTCHNL_OFFSET ExtChnlOffset; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_CHANNEL_INFO pChnlInfo = GET_CHNL_INFO(pMgntInfo); - PADAPTER pExtAdapter = GetFirstAPAdapter(Adapter); - PADAPTER pGoAdapter = GetFirstGOPort(Adapter); - - if(pExtAdapter != NULL) - { - if(pExtAdapter->bAPChannelInprogressForNewconnected) - { - RT_DISP(FCHNL, FCHNL_ERROR, ("%s: AP change channel in progress , return \n", __FUNCTION__)); - return; - - } - } - - if(pGoAdapter != NULL) - { - if(pGoAdapter->bAPChannelInprogressForNewconnected) - { - RT_DISP(FCHNL, FCHNL_ERROR, ("%s: AP change channel in progress , return \n", __FUNCTION__)); - return; - } - } - - if(GetDefaultMgntInfo(Adapter)->RegMultiChannelFcsMode != 0) - { - if(TRUE == MultiChannel_IsFCSInProgress(Adapter)) - { - RT_TRACE(COMP_MULTICHANNEL, DBG_TRACE, ("CHNL_ChangeBwChnlFromPeerWorkitemCallBack(): skip change ch & bw due to MCC\n")); - return; - } - } - -#if 0 - if(GetDefaultAdapter(Adapter)->bInHctTest) - { - RT_DISP(FCHNL, FCHNL_ERROR, ("%s: hct test , return \n", __FUNCTION__)); - return; - - } -#endif - - - chnl_GetBWFrom_IE(Adapter, &ChnlBW, &ExtChnlOffset); - - if( pChnlInfo->CurrentChannelBandWidth != ChnlBW || - pChnlInfo->Ext20MHzChnlOffsetOf40MHz != ExtChnlOffset) - { - // - // Leave LPS and wait until RF is already on before switching channel. 2014.09.25, by tynli. - // - LPSLeaveAndCheckReady(Adapter); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("CHNL_ChangeBwChnlFromPeerWorkitemCallBack(): CurrentChannel=%d, ChnlBW=%d, ExtChnlOffset=%d\n", - pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset)); - - CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset); - // We should set RA H2C cmd because the BW in TxDesc will be filled again by Fw, we - // need to inform Fw the BW changed information. 2012.11.26. by tynli. - // Suggested by SD1 Alex Chou. - if(!ACTING_AS_AP(Adapter) && !ACTING_AS_IBSS(Adapter)) - { - // we only need to set rate mask - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, 0); - - } - } - -} - - -VOID -CHNL_SetBwChnlFromPeer( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - CHANNEL_WIDTH ChnlBW; - EXTCHNL_OFFSET ExtChnlOffset; - - chnl_GetBWFrom_IE(Adapter, &ChnlBW, &ExtChnlOffset); - - CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, ChnlBW, ExtChnlOffset); -} - - -BOOLEAN -CHNL_GetCurrnetChnlInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuf, - IN OUT pu4Byte pBufLen -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - - if(*pBufLen < 4) - { - *pBufLen = 4; - return FALSE; - } - - *pBufLen = 4; - - *pBuf = pChnlInfo->CurrentChannelBandWidth; - *(pBuf+1) = pChnlInfo->PrimaryChannelNumber; - *(pBuf+2) = pChnlInfo->Ext20MHzChnlOffsetOf40MHz; - *(pBuf+3) = pChnlInfo->CurrentChannelCenterFrequency; - - return TRUE; -} - - - -VOID -chnl_HalSwBwChnl( - PADAPTER Adapter - ) -{ - PCHANNEL_COMMON_CONTEXT pChnlCommInfo = Adapter->pPortCommonInfo->pChnlCommInfo; - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); - - FunctionIn(COMP_SCAN); - - if(HAL_ChipSupport80MHz(Adapter)) - { - Adapter->HalFunc.SwChnlAndSetBWHandler( - Adapter, - TRUE, - TRUE, - pChnlCommInfo->CurrentChannelCenterFrequency, - pChnlCommInfo->CurrentChannelBandWidth, - pChnlCommInfo->Ext20MHzChnlOffsetOf40MHz, - pChnlCommInfo->Ext40MHzChnlOffsetOf80MHz, - pChnlCommInfo->CurrentChannelCenterFrequency - ); - } - else - { - u1Byte offset; - - Mgnt_SwChnl(Adapter, pChnlCommInfo->CurrentChannelCenterFrequency, 1); - - // last bandwidth offset - if(pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_UPPER) - offset = EXTCHNL_OFFSET_LOWER; - else if (pHalData->nCur40MhzPrimeSC == HAL_PRIME_CHNL_OFFSET_LOWER) - offset = EXTCHNL_OFFSET_UPPER; - else - offset = EXTCHNL_OFFSET_NO_EXT; - // 1.20M to 40M or 40M to 20M - // 2.40M to 40M as offset different or bandtype different - if( (pHalData->CurrentChannelBW != pChnlCommInfo->CurrentChannelBandWidth )|| - (pHalData->CurrentChannelBW == CHANNEL_WIDTH_40 && pChnlCommInfo->Ext20MHzChnlOffsetOf40MHz !=offset) || - (pHalData->LastBandType !=pHalData->CurrentBandType)) - { - Adapter->HalFunc.SetBWModeHandler( - Adapter, - pChnlCommInfo->CurrentChannelBandWidth, - pChnlCommInfo->Ext20MHzChnlOffsetOf40MHz - ); - } - } - - - FunctionOut(COMP_SCAN); -} - - -VOID -CHNL_SetBwChnlCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); - BOOLEAN bSwBW = TRUE; - - RT_DISP(FCHNL, FCHNL_FUN, ("===>%s \n", __FUNCTION__)); - - if(RT_DRIVER_HALT(Adapter)) - { - RT_DISP(FCHNL, FCHNL_ERROR, ("<===%s bDriverStopped %d bSurpriseRemoved %d bDriverIsGoingToUnload %d\n", __FUNCTION__, Adapter->bDriverStopped, Adapter->bSurpriseRemoved, Adapter->bDriverIsGoingToUnload)); - return; - } - - if(Adapter->bInSetPower && RT_CANNOT_IO(Adapter)) - - { - RT_DISP(FCHNL, FCHNL_ERROR, ("<===%s can NOT IO\n", __FUNCTION__)); - bSwBW = FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_DISP(FCHNL, FCHNL_ERROR, ("<===%s MgntResetOrPnPInProgress\n", __FUNCTION__)); - bSwBW = FALSE; - } - - if(bSwBW == FALSE) - { - PlatformAcquireSpinLock(Adapter, RT_BW_SPINLOCK); - pChnlInfo->bSwBwInProgress = FALSE; - PlatformReleaseSpinLock(Adapter, RT_BW_SPINLOCK); - return; - } - - if(MgntInitAdapterInProgress(pMgntInfo)) - { - PlatformSetTimer(Adapter, &pChnlInfo->SwBwTimer, 100); - return; - } - - if(RT_IsSwChnlAndBwInProgress(Adapter)) - { - RT_DISP(FCHNL, FCHNL_FUN, ("<===%s pHalData->SwChnlInProgress: %d, pHalData->SetBWModeInProgress: %d, pHalData->bSwChnlAndSetBWInProgress: %d\n", - __FUNCTION__, pHalData->SwChnlInProgress, pHalData->SetBWModeInProgress, pHalData->bSwChnlAndSetBWInProgress)); - - PlatformSetTimer(Adapter, &pChnlInfo->SwBwTimer, 10); - return; - } - - if(pMgntInfo->bScanInProgress) - { - RT_DISP(FCHNL, FCHNL_FUN, ("<===%s bScanInProgress\n", __FUNCTION__)); - PlatformSetTimer(Adapter, &pChnlInfo->SwBwTimer, 10); - return; - } - - if(!CHNL_AcquireOpLock(Adapter, CHNLOP_SWBW)) - { - PlatformSetTimer(Adapter, &pChnlInfo->SwBwTimer, 10); - return; - } - - if(IsDefaultAdapter(Adapter)) - { - RT_DISP(FCHNL, FCHNL_FUN, ("%s Def Adapter \n", __FUNCTION__)); - } - else - { - RT_DISP(FCHNL, FCHNL_FUN, ("%s Ext Adapter \n", __FUNCTION__)); - } - - PlatformAcquireSpinLock(Adapter, RT_BW_SPINLOCK); - pChnlInfo->bSwBwInProgress = TRUE; - PlatformReleaseSpinLock(Adapter, RT_BW_SPINLOCK); - - chnl_HalSwBwChnl(Adapter); - - // bandtype different only occur in 92d ; for 92c/92s last band type is the same as current band type - pHalData->LastBandType = pHalData->CurrentBandType; - - PlatformAcquireSpinLock(Adapter, RT_BW_SPINLOCK); - pChnlInfo->bSwBwInProgress = FALSE; - PlatformReleaseSpinLock(Adapter, RT_BW_SPINLOCK); - - CHNL_ReleaseOpLock(Adapter); - - RT_DISP(FCHNL, FCHNL_FUN, ("<===%s\n", __FUNCTION__)); -} - -CHANNEL_WIDTH -CHNL_CheckChnlPlanWithBW( - IN PADAPTER pAdapter, - IN u1Byte PrimaryChnl, - IN CHANNEL_WIDTH Bandwidth, - IN EXTCHNL_OFFSET BwOffset -) -{ - CHANNEL_WIDTH finalBw = CHANNEL_WIDTH_20; - PRT_CHANNEL_LIST pChanneList = NULL; - u2Byte i; - u1Byte CentralChnl=PrimaryChnl; - u1Byte anotherPrimaryChnl=PrimaryChnl; - u1Byte findcnt=0; - BOOLEAN bFind=FALSE; - - - - if(Bandwidth == CHANNEL_WIDTH_40) - { - if(BwOffset == EXTCHNL_OFFSET_UPPER) - { - CentralChnl = PrimaryChnl + 2; - anotherPrimaryChnl = CentralChnl+2; - } - else - { - CentralChnl = PrimaryChnl - 2; - anotherPrimaryChnl = CentralChnl-2; - } - } - - - RtActChannelList(pAdapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChanneList); - - if(PrimaryChnl>13) - { - if(!(pChanneList->WirelessMode & (WIRELESS_MODE_A|WIRELESS_MODE_AC_5G|WIRELESS_MODE_N_5G))) - { - finalBw = Bandwidth; - return finalBw; - } - } - else - { - if(!(pChanneList->WirelessMode & (WIRELESS_MODE_B|WIRELESS_MODE_N_24G|WIRELESS_MODE_G|WIRELESS_MODE_AC_24G))) - { - finalBw = Bandwidth; - return finalBw; - } - } - - for(i=0;iChannelLen;i++) - { - if((anotherPrimaryChnl == pChanneList->ChnlListEntry[i].ChannelNum) || - (PrimaryChnl == pChanneList->ChnlListEntry[i].ChannelNum)) - { - findcnt++; - } - - if(findcnt==2) - { - bFind =TRUE; - findcnt =0; - break; - } - } - - if(Bandwidth == CHANNEL_WIDTH_80) - finalBw = CHANNEL_WIDTH_80; - else - { - // remove, advised by Bryant, this will cause IOT issue with TP link Ap - // TP link will be 40MHz, but NIC is 20MHz => problem. -#if 0 - if( BT_1Ant(pAdapter) && BT_IsBtLinkExist(pAdapter) && - IS_WIRELESS_MODE_24G(pAdapter) ) - { - finalBw = CHANNEL_WIDTH_20; - } - else -#endif - { - if(bFind) - finalBw = CHANNEL_WIDTH_40; - else - finalBw = CHANNEL_WIDTH_20; - } - } - - return finalBw; -} - - -// -// This function set bandwidth mode in protocol layer. -// -VOID -CHNL_SetBwChnl( - IN PADAPTER pAdapter, - IN u1Byte PrimaryChnl, - IN CHANNEL_WIDTH Bandwidth, - IN EXTCHNL_OFFSET BwOffset - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_CHANNEL_INFO pChnlInfo = GET_CHNL_INFO(pMgntInfo); - - PADAPTER DefAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pDefMgntInfo = &DefAdapter->MgntInfo; - PRT_CHANNEL_INFO pDefChnlInfo = GET_CHNL_INFO(pDefMgntInfo); - PCHANNEL_COMMON_CONTEXT pDefChnlCommInfo = DefAdapter->pPortCommonInfo->pChnlCommInfo; - - CHANNEL_WIDTH ToSetBandWidth = CHANNEL_WIDTH_20; - EXTCHNL_OFFSET ToSTAExtChnlOffsetof40MHz= EXTCHNL_OFFSET_NO_EXT; - EXTCHNL_OFFSET ToSTAExtChnlOffsetof80MHz= EXTCHNL_OFFSET_NO_EXT; - u1Byte ToSTACenterFrequency; - - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("PrimaryChnl %d\n", PrimaryChnl)); - - if(ACTING_AS_IBSS(DefAdapter)) - { - { - // 2013/10/15 MH Add for higher adhoc and VHT 2.4G mode. - if (!pMgntInfo->bReg11nAdhoc && !pMgntInfo->bRegVht24g) - { - Bandwidth= CHANNEL_WIDTH_20; - BwOffset = EXTCHNL_OFFSET_NO_EXT; - } - } - } - - ToSetBandWidth = Bandwidth; - ToSTAExtChnlOffsetof40MHz = BwOffset; - ToSTACenterFrequency = CHNL_GetCenterFrequency(PrimaryChnl, Bandwidth, BwOffset); - - ToSetBandWidth = CHNL_CheckChnlPlanWithBW(pAdapter,PrimaryChnl,Bandwidth,BwOffset); - - if((ToSetBandWidth != Bandwidth) && ToSetBandWidth==CHANNEL_WIDTH_20) - ToSTACenterFrequency =PrimaryChnl; - - if(Bandwidth == CHANNEL_WIDTH_80) - { - if(ToSTACenterFrequency > pMgntInfo->dot11CurrentChannelNumber) - ToSTAExtChnlOffsetof80MHz = EXTCHNL_OFFSET_UPPER; - else if(ToSTACenterFrequency < pMgntInfo->dot11CurrentChannelNumber) - ToSTAExtChnlOffsetof80MHz = EXTCHNL_OFFSET_LOWER; - else - ToSTAExtChnlOffsetof80MHz = EXTCHNL_OFFSET_NO_EXT; - } - - RT_DISP(FCHNL, FCHNL_FUN, ("Set ToSetBandWidth = %d, ToSTAExtChnlOffset = %d,ToSTAExtChnlOffsetof80MHz %d, ToSTACenterFrequency= %d \n", ToSetBandWidth, ToSTAExtChnlOffsetof40MHz,ToSTAExtChnlOffsetof80MHz,ToSTACenterFrequency)); - - pMgntInfo->dot11CurrentChannelBandWidth = ToSetBandWidth; - pChnlInfo->PrimaryChannelNumber = pDefChnlCommInfo->PrimaryChannelNumber = PrimaryChnl; - pChnlInfo->CurrentChannelBandWidth = pDefChnlCommInfo->CurrentChannelBandWidth = ToSetBandWidth; - pChnlInfo->CurrentChannelCenterFrequency = pDefChnlCommInfo->CurrentChannelCenterFrequency = ToSTACenterFrequency; - pChnlInfo->Ext20MHzChnlOffsetOf40MHz = pDefChnlCommInfo->Ext20MHzChnlOffsetOf40MHz = ToSTAExtChnlOffsetof40MHz; - pChnlInfo->Ext40MHzChnlOffsetOf80MHz = pDefChnlCommInfo->Ext40MHzChnlOffsetOf80MHz = ToSTAExtChnlOffsetof80MHz; - - // TODO: 2007.7.13 by Emily Wait 2000ms in order to garantee that switching - // bandwidth is executed after scan is finished. It is a temporal solution - // because software should ganrantee the last operation of switching bandwidth - // is executed properlly. - if(!(RT_DRIVER_HALT(DefAdapter))) - PlatformSetTimer(DefAdapter, &pDefChnlInfo->SwBwTimer, 0); - - FunctionOut(COMP_SCAN); -} - - - -VOID -CHNL_SetChnlInfoFromDestPort( - IN PADAPTER pDestAdapter, - IN PADAPTER pSrcAdapter -) -{ - PMGNT_INFO pDestMgntInfo = &pDestAdapter->MgntInfo; - PRT_CHANNEL_INFO pDestChnlInfo = GET_CHNL_INFO(pDestMgntInfo); - PMGNT_INFO pSrcMgntInfo = &pSrcAdapter->MgntInfo; - PRT_CHANNEL_INFO pSrcChnlInfo = GET_CHNL_INFO(pSrcMgntInfo); - - pDestMgntInfo->dot11CurrentChannelNumber = pSrcMgntInfo->dot11CurrentChannelNumber; - pDestMgntInfo->dot11CurrentChannelBandWidth = pSrcMgntInfo->dot11CurrentChannelBandWidth; - - // Best way is restart AP mode. 2012.01.08 lanhsin. - //pDestMgntInfo->CurrentBssWirelessMode = pDestMgntInfo->dot11CurrentWirelessMode = pSrcMgntInfo->dot11CurrentWirelessMode; - - pDestChnlInfo->PrimaryChannelNumber = pSrcChnlInfo->PrimaryChannelNumber; - pDestChnlInfo->CurrentChannelBandWidth = pSrcChnlInfo->CurrentChannelBandWidth; - pDestChnlInfo->CurrentChannelCenterFrequency = pSrcChnlInfo->CurrentChannelCenterFrequency; - - pDestChnlInfo->Ext20MHzChnlOffsetOf40MHz = pSrcChnlInfo->Ext20MHzChnlOffsetOf40MHz; - pDestChnlInfo->Ext40MHzChnlOffsetOf80MHz = pSrcChnlInfo->Ext40MHzChnlOffsetOf80MHz; - - RT_DISP(FCHNL, FCHNL_FUN, ("%s: pDestChnlInfo->CurrentChannelCenterFrequency=%d, pSrcChnlInfo->CurrentChannelCenterFrequency=%d\n", - __FUNCTION__, pDestChnlInfo->CurrentChannelCenterFrequency, pSrcChnlInfo->CurrentChannelCenterFrequency)); -} - - -//sherry added 20130207 -//to check switch channel and bandwidth in progress -BOOLEAN -CHNL_SwChnlAndSetBwInProgress( - PADAPTER Adapter -) -{ - PADAPTER pDefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = &pDefAdapter->MgntInfo; - PRT_CHANNEL_INFO pDefChnlInfo = GET_CHNL_INFO(pDefMgntInfo); - - if(pDefChnlInfo->bSwBwInProgress) - { - RT_DISP(FCHNL, FCHNL_INFO, ("%s: return TRUE \n", __FUNCTION__)); - return TRUE; - } - else - { - RT_DISP(FCHNL, FCHNL_INFO, ("%s: return FALSE \n", __FUNCTION__)); - return FALSE; - } -} - -// -// Description: -// Get the primary channel from the channel information and hw configurations. -// Note: -// There are two kinds of channel, one is kept in mgnt/channel info and another one is kept in hal. -// They may be mismatched when the channel switching is in progress or scan in progress. -// When the scan is performing, the channel in mgnt/channel is not updated. -// -// If channels are different between HW and ChannelInfo, this function returns HW channel. -// -u1Byte -RT_GetChannelNumber( - IN PADAPTER pAdapter - ) -{ - u1Byte hwCenterChannel = 0; - EXTCHNL_OFFSET hwBW40MOffset = EXTCHNL_OFFSET_NO_EXT; - EXTCHNL_OFFSET hwBW80MOffset = EXTCHNL_OFFSET_NO_EXT; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_CUR_CENTER_CHNL, (pu1Byte)(&hwCenterChannel)); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_BW40MHZ_EXTCHNL, (pu1Byte)(&hwBW40MOffset)); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_BW80MHZ_EXTCHNL, (pu1Byte)(&hwBW80MOffset)); - - if(0 == hwCenterChannel) - { // Please fix this case - hwCenterChannel = GET_HAL_DATA(pAdapter)->CurrentChannel; - RT_TRACE_F(COMP_SCAN, DBG_WARNING, ("[WARNING] Get hw channel = 0 by HW_VAR_CUR_CENTER_CHNL, access hal directly = %d\n", - hwCenterChannel)); - } - - if(((GetDefaultAdapter(pAdapter)->pPortCommonInfo->pChnlCommInfo->CurrentChannelCenterFrequency) == hwCenterChannel)) - { - return (GetDefaultAdapter(pAdapter)->pPortCommonInfo->pChnlCommInfo->PrimaryChannelNumber); - } - else - { // In this case, the returned channel may not be the right one because channel switching is in progress. - if((GetDefaultAdapter(pAdapter)->pPortCommonInfo->pChnlCommInfo->CurrentChannelCenterFrequency) != 0) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("[WARNING] Mismatched channel info ceter = %d, primary = %d, hwCenterChannel = %d (40M = %d, 80M = %d), SwChnlInProgress = %d, ScanInProgress = %d\n", - (GetDefaultAdapter(pAdapter)->pPortCommonInfo->pChnlCommInfo->CurrentChannelCenterFrequency), - (GetDefaultAdapter(pAdapter)->pPortCommonInfo->pChnlCommInfo->PrimaryChannelNumber), - hwCenterChannel, hwBW40MOffset, hwBW80MOffset, (RT_IsSwChnlAndBwInProgress(pAdapter) | CHNL_SwChnlAndSetBwInProgress(pAdapter)), MgntScanInProgress(&(pAdapter->MgntInfo)))); - } - return hwCenterChannel; - } -} - diff --git a/network/wlan/WDI/COMMON/ChannelInfo.h b/network/wlan/WDI/COMMON/ChannelInfo.h deleted file mode 100644 index 787cc9d1..00000000 --- a/network/wlan/WDI/COMMON/ChannelInfo.h +++ /dev/null @@ -1,128 +0,0 @@ -#ifndef __INC_CHANNEL_INFO_H -#define __INC_CHANNEL_INFO_H - -#define GET_CHNL_INFO(_pMgntInfo) ((PRT_CHANNEL_INFO)((_pMgntInfo)->pChannelInfo)) - -// Determine if the Channel Operation is in progress - -#define CHNL_OP_IN_PROGRESS(_pChnlInfo) \ - ((_pChnlInfo)->ChnlOp > CHNLOP_NONE) ? TRUE : FALSE - -#define CHNL_RUN_ABOVE_40MHZ(_pMgntInfo) \ - (((_pMgntInfo)->dot11CurrentChannelBandWidth >= CHANNEL_WIDTH_40)?TRUE:FALSE) - -#define CHNL_RUN_ABOVE_80MHZ(_pMgntInfo) \ - (((_pMgntInfo)->dot11CurrentChannelBandWidth >= CHANNEL_WIDTH_80)?TRUE:FALSE) - -u1Byte -CHNL_GetCenterFrequency( - IN u1Byte Channel, - IN CHANNEL_WIDTH ChnlBW, - IN EXTCHNL_OFFSET ExtChnlOffset - ); - - -EXTCHNL_OFFSET -CHNL_GetExt20OffsetOf5G( - IN u1Byte channel - ); - - -u1Byte -CHNL_IsLegalChannel( - PADAPTER Adapter, - u8Byte freq_channel - ); - - -BOOLEAN -CHNL_IsLegal5GChannel( - IN PADAPTER Adapter, - IN u1Byte channel - ); - -BOOLEAN -CHNL_AcquireOpLock( - PADAPTER Adapter, - CHNLOP ChnlOp - ); - -VOID -CHNL_ReleaseOpLock( - PADAPTER Adapter - ); - - -BOOLEAN -CHNL_ValidForWirelessMode( - u1Byte channel, - u2Byte wirelessmode - ); - - -CHANNEL_WIDTH -CHNL_GetRegBWSupport( - IN PADAPTER Adapter -); - - -VOID -CHNL_ChangeBwChnlFromPeerWorkitemCallBack( - IN PVOID Context - ); - - -VOID -CHNL_SetBwChnlFromPeer( - IN PADAPTER Adapter - ); - - -BOOLEAN -CHNL_GetCurrnetChnlInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuf, - IN OUT pu4Byte pBufLen - ); - -VOID -CHNL_SetBwChnlCallback( - IN PRT_TIMER pTimer - ); - - -CHANNEL_WIDTH -CHNL_CheckChnlPlanWithBW( - IN PADAPTER pAdapter, - IN u1Byte PrimaryChnl, - IN CHANNEL_WIDTH Bandwidth, - IN EXTCHNL_OFFSET BwOffset - ); - - -VOID -CHNL_SetBwChnl( - IN PADAPTER pAdapter, - IN u1Byte PrimaryChnl, - IN CHANNEL_WIDTH Bandwidth, - IN EXTCHNL_OFFSET BwOffset - ); - - -VOID -CHNL_SetChnlInfoFromDestPort( - IN PADAPTER pDestAdapter, - IN PADAPTER pSrcAdapter - ); - -BOOLEAN -CHNL_SwChnlAndSetBwInProgress( - PADAPTER Adapter - ); - -u1Byte -RT_GetChannelNumber( - IN PADAPTER Adapter - );; - -#endif diff --git a/network/wlan/WDI/COMMON/CustomizedScan.c b/network/wlan/WDI/COMMON/CustomizedScan.c deleted file mode 100644 index 50b788e8..00000000 --- a/network/wlan/WDI/COMMON/CustomizedScan.c +++ /dev/null @@ -1,2429 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "CustomizedScan.tmh" -#endif - -#include "CustomizedScan.h" - -static const char *info_sig = "CUSTOM_SCAN"; -static const char *req_sig = "CUSTOM_SCAN_REQ"; - -#define CUSTOM_SCAN_MAX_TIME_WAIT_SCAN_STARTED_MS 300 -#define CUSTOM_SCAN_WAIT_LINK_DONE_MS 500 - -#define CUSTOM_SCAN_PROCESSING_REQ(__info) (NULL != (__info)->pCurReq && !TEST_FLAG((__info)->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_TO_BE_FREED)) - -#define CUSTOM_SCAN_REQ_FLAG_REQUEUED BIT0 -#define CUSTOM_SCAN_REQ_FLAG_RESCHEDULED BIT2 -#define CUSTOM_SCAN_REQ_FLAG_RESET BIT3 -#define CUSTOM_SCAN_REQ_FLAG_TO_BE_FREED BIT4 -#define CUSTOM_SCAN_REQ_FLAG_POTENTIAL_REPEATE_COUNT_UNDERFLOW BIT5 -#define CUSTOM_SCAN_REQ_FLAG_STARTED BIT6 -#define CUSTOM_SCAN_REQ_FLAG_TERMINATE BIT7 -#define CUSTOM_SCAN_REQ_FLAG_FLUSH BIT8 - -#define CUSTOM_SCAN_TERM_SCAN_BUF_MS 20 -#define CUSTOM_SCAN_ELAPSE_TIME(__req) (PlatformGetCurrentTime() / 1000 - (__req)->issueTime) -#define CUSTOM_SCAN_ALLOW_TIME(__req) (\ - CUSTOM_SCAN_TERM_SCAN_BUF_MS < (__req)->timeBound\ - ? (__req)->timeBound - CUSTOM_SCAN_TERM_SCAN_BUF_MS\ - : (__req)->timeBound\ - ) - -#define CUSTOM_SCAN_TIME_DUE(__req) (0 < (__req)->timeBound && CUSTOM_SCAN_ALLOW_TIME(__req) <= CUSTOM_SCAN_ELAPSE_TIME(__req)) - -#define CHNL_ENTRY_EXT_FLAG_CHNL_SHUT BIT0 - -typedef struct _CHNL_ENTRY_EXT -{ - RT_LIST_ENTRY list; - - // super - RT_CHNL_LIST_ENTRY super; - - // ext - FRAME_BUF *probeReq; - u1Byte dataRate; - u4Byte flag; // init in customscan_InitChnlEntryExt and reset when requeued -}CHNL_ENTRY_EXT; - -typedef struct _CUSTOM_SCAN_REQ -{ - RT_LIST_ENTRY list; - - const char *sig; - - u4Byte flag; - - // source type - CUSTOM_SCAN_SRC_TYPE type; - const char *typeInfo; - - // state - CUSTOM_SCAN_STATE state; - u8Byte stateTime; - - // force passive scan - BOOLEAN bForcePassive; - - // probe req - FRAME_BUF probeReqBuf; - u1Byte probeReqRsvd[CUSTOMIZED_SCAN_MAX_FRAME_LEN]; - - // channels to scan, cnt is 0 if default scan - RT_LIST_ENTRY chnlListQ; - u4Byte chnlListCnt; - - // chnl entry pool - POOL chnlEntryPool; - CHNL_ENTRY_EXT chnlEntryPoolRsvd[MAX_SCAN_CHANNEL_NUM * 2]; - - // status callback - VOID *cbCtx; - CUSTOM_SCAN_STATE_CB cb; - - // dbg - u8Byte dbgComp; - u4Byte dbgLevel; - - // extended dwell time, reset after applied - u2Byte extDwellTime; - - // info of the channel we are on, n/a if default scan - CHNL_ENTRY_EXT *curChnl; - - // time bound, 0 if not bounded - u4Byte timeBound; - - // time stamps - u8Byte issueTime; - - // time in ms to delay before the worker process it - u4Byte delayStartMs; - - // time in ms to delay before repeat a req - u4Byte repeatIntermittentMs; - - // repeat count - u4Byte repeatCount; - - // on probe rsp cb - CUSTOM_SCAN_ON_PROBE_RSP_CB onProbeRspCb; - VOID *onProbeRspCtx; - -}CUSTOM_SCAN_REQ; - -typedef struct _CUSTOM_SCAN_INFO -{ - DECLARE_RT_OBJECT(_CUSTOM_SCAN_INFO); - - const char *sig; - - // the corresp. adapter - ADAPTER *pAdapter; - - // request queue - RT_LIST_ENTRY reqQ; - u4Byte reqCnt; - - // request pool - POOL reqPool; - CUSTOM_SCAN_REQ reqPoolRsvd[CUSTOMIZED_SCAN_MAX_REQ_NUM]; - - // the currently processing req - CUSTOM_SCAN_REQ *pCurReq; - - // dbg - u8Byte dbgComp; - u4Byte dbgLevel; - - // the worker thread - RT_THREAD worker; - - // temporary field for constructing scan list - RT_CHNL_LIST_ENTRY *scanChnlList[MAX_SCAN_CHANNEL_NUM]; - u1Byte scanChnlListLen; - - BOOLEAN bWorkerExited; - -}CUSTOM_SCAN_INFO; - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static -VOID -customscan_Lock( - IN CUSTOM_SCAN_INFO *info - ) -{ - PlatformAcquireSpinLock(info->pAdapter, RT_CUSTOM_SCAN_SPINLOCK); -} - -static -VOID -customscan_Unlock( - IN CUSTOM_SCAN_INFO *info - ) -{ - PlatformReleaseSpinLock(info->pAdapter, RT_CUSTOM_SCAN_SPINLOCK); -} - -static -VOID -customscan_SetReqState( - IN CUSTOM_SCAN_INFO *info, - IN CUSTOM_SCAN_REQ *req, - IN CUSTOM_SCAN_STATE state - ) -{ - req->state = state; - req->stateTime = PlatformGetCurrentTime(); - if(req->cb) - { - (req->cb)(state, req->cbCtx); - } -} - -static -VOID -customscan_InitChnlEntryExt( - IN CHNL_ENTRY_EXT *pExt, - IN const RT_CHNL_LIST_ENTRY *pChnl, - IN FRAME_BUF *probeReq, - IN u1Byte dataRate - ) -{ - RTInitializeListHead(&pExt->list); - pExt->super = *pChnl; - pExt->probeReq = probeReq; - pExt->dataRate = dataRate; - pExt->flag = 0; - - return; -} - -static -VOID -customscan_InitReq( - IN CUSTOM_SCAN_INFO *info, - IN CUSTOM_SCAN_REQ *req - ) -{ - PlatformZeroMemory(req, sizeof(*req)); - - RTInitializeListHead(&req->list); - req->sig = req_sig; - req->flag = 0; - req->type = CUSTOM_SCAN_SRC_TYPE_UNSPECIFIED; - req->state = CUSTOM_SCAN_STATE_IDLE; - FrameBuf_Init(sizeof(req->probeReqRsvd), 0, req->probeReqRsvd, &req->probeReqBuf); - - RTInitializeListHead(&req->chnlListQ); - req->chnlListCnt = 0; - - Pool_Init(&req->chnlEntryPool, "chnl entry pool", sizeof(req->chnlEntryPoolRsvd), - req->chnlEntryPoolRsvd, sizeof(req->chnlEntryPoolRsvd[0]), - BIT45, DBG_LOUD); - - req->cbCtx = NULL; - req->cb = NULL; - - req->dbgComp = BIT45; - req->dbgLevel = DBG_LOUD; - - req->extDwellTime = 0; - req->curChnl = NULL; - - req->repeatCount = 1; - - return; -} - -static -VOID -customscan_DescructReq( - IN CUSTOM_SCAN_INFO *info, - IN CUSTOM_SCAN_REQ *req - ) -{ - while(RTIsListNotEmpty(&req->chnlListQ)) - { - RT_LIST_ENTRY *pEntry = RTRemoveTailListWithCnt(&req->chnlListQ, &req->chnlListCnt); - - Pool_Release(&req->chnlEntryPool, pEntry); - } - - return; -} - -static -VOID -customscan_FreeReq( - IN CUSTOM_SCAN_INFO *info, - IN CUSTOM_SCAN_REQ *req - ) -{ - RT_TRACE(COMP_SCAN, DBG_LOUD, ("freeing: %s\n", req->typeInfo)); - customscan_DescructReq(info, req); - Pool_Release(&info->reqPool, req); - - Pool_Dump(&info->reqPool); - - return; -} - -static -VOID -customscan_FreeCurReq( - IN CUSTOM_SCAN_INFO *info - ) -{ - customscan_FreeReq(info, info->pCurReq); - info->pCurReq = NULL; - - return; -} - -static -VOID -customscan_FlushReqQ( - IN CUSTOM_SCAN_INFO *info - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - while(RTIsListNotEmpty(&info->reqQ)) - { - pEntry = RTRemoveTailListWithCnt(&info->reqQ, &info->reqCnt); - customscan_Unlock(info); - customscan_SetReqState(info, (CUSTOM_SCAN_REQ *)pEntry, CUSTOM_SCAN_STATE_PRE_DESTROY); // so client has a chance to cleanup - customscan_Lock(info); - SET_FLAG(((CUSTOM_SCAN_REQ *)pEntry)->flag, CUSTOM_SCAN_REQ_FLAG_FLUSH); - customscan_FreeReq(info, (CUSTOM_SCAN_REQ *)pEntry); - } - - return; -} - -static -RT_CHNL_LIST_ENTRY * -customscan_GetScanChnlInDrvChnlList( - IN RT_CHNL_LIST_ENTRY **pChnlList, - IN u1Byte chnlListLen, - IN u1Byte chnl - ) -{ - u4Byte itChnl = 0; - - for(itChnl = 0; itChnl < chnlListLen; itChnl++) - { - if(pChnlList[itChnl]->ChannelNum == chnl) - return pChnlList[itChnl]; - } - - return NULL; -} - -static -const char * -customscan_ScanStateTxt( - IN CUSTOM_SCAN_STATE state - ) -{ - switch (state) - { - case CUSTOM_SCAN_STATE_IDLE: - return "idle"; - case CUSTOM_SCAN_STATE_WAITING: - return "waiting"; - case CUSTOM_SCAN_STATE_STARTING: - return "starting"; - case CUSTOM_SCAN_STATE_STARTED: - return "started"; - case CUSTOM_SCAN_STATE_SW_CHNL: - return "swChnl"; - case CUSTOM_SCAN_STATE_DWELL: - return "dwell"; - case CUSTOM_SCAN_STATE_COMPLETED: - return "completed"; - case CUSTOM_SCAN_STATE_PRE_DESTROY: - return "pre-destroy"; - case CUSTOM_SCAN_STATE_DEFERRED: - return "deferred"; - case CUSTOM_SCAN_STATE_TERMINATING: - return "terminating"; - default: - return "Unknown?!"; - } -} - -static -const char * -customscan_SrcTypeTxt( - IN CUSTOM_SCAN_SRC_TYPE type - ) -{ - switch (type) - { - case CUSTOM_SCAN_SRC_TYPE_SYS: - return "sys"; - case CUSTOM_SCAN_SRC_TYPE_BT: - return "bt"; - case CUSTOM_SCAN_SRC_TYPE_P2P: - return "p2p"; - case CUSTOM_SCAN_SRC_TYPE_UNSPECIFIED: - return "unspecified"; - default: - return "Unknown?!"; - } -} - -static -VOID -customscan_DumpChnlExt( - IN const CHNL_ENTRY_EXT *chnlExt, - IN u8Byte dbgComp, - IN u4Byte dbgLevel - ) -{ - RT_TRACE(COMP_SCAN, DBG_LOUD, ("chnl: %u, active: %u, duration: %u, flag: 0x%08X\n", - chnlExt->super.ChannelNum, - SCAN_ACTIVE == chnlExt->super.ScanType, - chnlExt->super.ScanPeriod, - chnlExt->flag - )); -} - -static -VOID -customscan_DumpReq( - IN const CUSTOM_SCAN_REQ *req - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("type: %s\n", customscan_SrcTypeTxt(req->type))); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("type info: %s\n", req->typeInfo)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("state: %s\n", customscan_ScanStateTxt(req->state))); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("sig: %s\n", req->sig)); - FrameBuf_Dump(&req->probeReqBuf, BIT45, DBG_LOUD, "ProbeReqBuf"); - RT_TRACE(COMP_SCAN, req->dbgLevel, ("chnl list:\n")); - RtEntryListForEach(&req->chnlListQ, pEntry) - { - customscan_DumpChnlExt((CHNL_ENTRY_EXT *)pEntry, BIT45, DBG_LOUD); - } - RT_TRACE(COMP_SCAN, DBG_LOUD, ("timeBound: %u\n", req->timeBound)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("delayStartMs: %u\n", req->delayStartMs)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("repeatIntermittentMs: %u\n", req->repeatIntermittentMs)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("repeatCount: %u\n", req->repeatCount)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("cb: %p\n", req->cb)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ctx: %p\n", req->cbCtx)); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("flag: 0x%08X\n", req->flag)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("state: %s\n", customscan_ScanStateTxt(req->state))); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("time in state: %u\n", (u4Byte)(PlatformGetCurrentTime() - req->stateTime))); - - return; -} - -static -VOID -customscan_DumpReqQ( - IN const CUSTOM_SCAN_INFO *info - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("reqQ: %u\n", info->reqCnt)); - - RtEntryListForEach(&info->reqQ, pEntry) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("req:\n")); - customscan_DumpReq((CUSTOM_SCAN_REQ *)pEntry); - } - - return; -} - -static -VOID -customscan_DumpReqPool( - IN const CUSTOM_SCAN_INFO *info - ) -{ - const CUSTOM_SCAN_REQ *pEntry = NULL; - size_t poolSize = sizeof(info->reqPoolRsvd) / sizeof(info->reqPoolRsvd[0]); - size_t it = 0; - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("req pool size: %u\n", poolSize)); - - for(it = 0; it < poolSize; it++) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("req:\n")); - pEntry = &info->reqPoolRsvd[it]; - customscan_DumpReq(pEntry); - } - - return; -} - -static -RT_STATUS -customscan_TerminateCurrentChnl( - IN CUSTOM_SCAN_INFO *info - ) -{ - ADAPTER *pAdapter = info->pAdapter; - - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - return RT_STATUS_INVALID_STATE; - - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("req: %s, state: %s\n", - info->pCurReq->typeInfo, - customscan_ScanStateTxt(info->pCurReq->state))); - - if(CUSTOM_SCAN_STATE_DWELL == info->pCurReq->state) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("terminating cur req on chnl\n")); - - customscan_Unlock(info); - if(IS_DUAL_BAND_SUPPORT(pAdapter)) - pAdapter->MgntInfo.bDualModeScanStep = 2; - PlatformCancelTimer(pAdapter, &pAdapter->MgntInfo.ScanTimer); - PlatformSetTimer(pAdapter, &pAdapter->MgntInfo.ScanTimer, 0); - customscan_Lock(info); - } - - return RT_STATUS_SUCCESS; -} - -static -BOOLEAN -customscan_FreeDanglingReq( - IN CUSTOM_SCAN_INFO *info - ) -{ - BOOLEAN bFreed = FALSE; - - do - { - if(!info->pCurReq) - break; - - if(!TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESET)) - break; - - // the scan is reset, ScanComplete for the req may/may not entered - // however if ScanComplete entered, we can't get here since the req wold have been freed - RT_TRACE(COMP_SCAN, DBG_WARNING, ("freeing dangling req: %s got reset and ScanComplete not enter, free it and continue\n", info->pCurReq->typeInfo)); - customscan_Unlock(info); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_PRE_DESTROY); - customscan_Lock(info); - customscan_FreeCurReq(info); - - bFreed = TRUE; - }while(FALSE); - - return bFreed; -} - -static -RT_STATUS -customscan_TerminateCurrentReq( - IN CUSTOM_SCAN_INFO *info, - IN BOOLEAN bStopOnCurChnl - ) -{ - ADAPTER *pAdapter = info->pAdapter; - RT_CHNL_LIST_ENTRY *pChnlEntry = NULL; - - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - return RT_STATUS_INVALID_STATE; - - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("req: %s, state: %s, ScanStep: %u\n", - info->pCurReq->typeInfo, - customscan_ScanStateTxt(info->pCurReq->state), - pAdapter->MgntInfo.ScanStep - ) - ); - - if(CUSTOM_SCAN_STATE_SW_CHNL == info->pCurReq->state - || CUSTOM_SCAN_STATE_DWELL == info->pCurReq->state - || CUSTOM_SCAN_STATE_STARTED == info->pCurReq->state - || CUSTOM_SCAN_STATE_STARTING == info->pCurReq->state - ) - {// doing scan callback - while(RtActChannelList(pAdapter, RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL, NULL, &pChnlEntry)){} - - if(bStopOnCurChnl) - { - ADAPTER *pda = GetDefaultAdapter(pAdapter); - ADAPTER *pla = pda; - u1Byte curChnl = RT_GetChannelNumber(pla); - EXTCHNL_OFFSET hwBW40MOffset = EXTCHNL_OFFSET_NO_EXT; - EXTCHNL_OFFSET hwBW80MOffset = EXTCHNL_OFFSET_NO_EXT; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_BW40MHZ_EXTCHNL, (pu1Byte)(&hwBW40MOffset)); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_BW80MHZ_EXTCHNL, (pu1Byte)(&hwBW80MOffset)); - - while(pla) - { - pla->MgntInfo.SettingBeforeScan.ChannelNumber = curChnl; - - pda->MgntInfo.SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz = hwBW40MOffset; - pda->MgntInfo.SettingBeforeScan.Ext40MHzChnlOffsetOf80MHz = hwBW80MOffset; - - if(EXTCHNL_OFFSET_NO_EXT != hwBW80MOffset) - { - pda->MgntInfo.SettingBeforeScan.ChannelBandwidth = CHANNEL_WIDTH_80; - } - else if(EXTCHNL_OFFSET_NO_EXT != hwBW40MOffset) - { - pda->MgntInfo.SettingBeforeScan.ChannelBandwidth = CHANNEL_WIDTH_40; - } - else - { - pda->MgntInfo.SettingBeforeScan.ChannelBandwidth = CHANNEL_WIDTH_20; - } - - pla->MgntInfo.SettingBeforeScan.CenterFrequencyIndex1 = CHNL_GetCenterFrequency( - pda->MgntInfo.SettingBeforeScan.ChannelNumber, - pda->MgntInfo.SettingBeforeScan.ChannelBandwidth, - pda->MgntInfo.SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz); - pla = GetNextExtAdapter(pla); - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("to stop on chnl: %u\n", curChnl)); - } - - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_TERMINATING); - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_TERMINATE); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("cur req terminated\n")); - - customscan_Unlock(info); - pAdapter->MgntInfo.ScanStep = 0; - if(IS_DUAL_BAND_SUPPORT(pAdapter)) - pAdapter->MgntInfo.bDualModeScanStep = 2; - PlatformCancelTimer(pAdapter, &pAdapter->MgntInfo.ScanTimer); - PlatformSetTimer(pAdapter, &pAdapter->MgntInfo.ScanTimer, 0); - customscan_Lock(info); - } - else if(CUSTOM_SCAN_STATE_COMPLETED == info->pCurReq->state) - {// doing scan complete - } - else if(CUSTOM_SCAN_STATE_TERMINATING == info->pCurReq->state - && TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESET) - ) - { - // Previously in terminating state because of scan reset - // and now the req is to be terminated again (aborted by OS) - // before ScanComplete is invoked. - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s(): req %s is in terminating state and reset flag set, free it\n", __FUNCTION__, info->pCurReq->typeInfo)); - customscan_FreeDanglingReq(info); - } - - else - { - RT_ASSERT(TRUE, ("invalid req state: %s\n", customscan_ScanStateTxt(info->pCurReq->state))); - return RT_STATUS_FAILURE; - } - - return RT_STATUS_SUCCESS; -} - -static -VOID -customscan_RequeueCurReq( - IN CUSTOM_SCAN_INFO *info - ) -{ - size_t it = 0; - - FunctionIn(COMP_SCAN); - - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_DEFERRED); - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_REQUEUED); - for(it = 0; - it < sizeof(info->pCurReq->chnlEntryPoolRsvd) / sizeof(info->pCurReq->chnlEntryPoolRsvd[0]); - it++ - ) - { - info->pCurReq->chnlEntryPoolRsvd[it].flag = 0; - } - info->pCurReq->curChnl = NULL; - - RTInsertHeadListWithCnt(&info->reqQ, &info->pCurReq->list, &info->reqCnt); - info->pCurReq = NULL; - - FunctionOut(COMP_SCAN); -} - -static -BOOLEAN -customscan_LinkInProgress( - IN CUSTOM_SCAN_INFO *info - ) -{ - BOOLEAN bLinkInProgress = FALSE; - ADAPTER *pla = NULL; - - for(pla = GetDefaultAdapter(info->pAdapter); - NULL != pla; - pla = GetNextExtAdapter(pla) - ) - { - if(MgntIsLinkInProgress(&pla->MgntInfo)) - { - bLinkInProgress = TRUE; - break; - } - } - - return bLinkInProgress; -} - -static -BOOLEAN -customscan_InvokeMgntLinkReq( - IN CUSTOM_SCAN_INFO *info, - IN BOOLEAN bForcePassive - ) -{ - BOOLEAN bScanStarted = FALSE; - - // - // Formerly, system scan comes from N6CSet_DOT11_SCAN_REQUEST and may - // be called directly down to ScanCallback if timeout specified is 0, - // and if scan is rejected by MgntLinkRequest (or the function it calls) - // N6CSet_DOT11_SCAN_REQUEST does not try to handle this. - // So for N6CSet_DOT11_SCAN_REQUEST, it is safe to simply call - // MgntLinkRequest here and don't care about indicate scan complete at - // all. - // - - MgntLinkRequest( - info->pAdapter, - TRUE, //bScanOnly - bForcePassive ? FALSE : TRUE, //bActiveScan, - FALSE, //FilterHiddenAP // Asked by Netgear's Lancelot for 8187 should look like their damn wg111v1, 2005.02.01, by rcnjko. - FALSE, // Update parameters - NULL, //ssid2scan - 0, //NetworkType, - 0, //ChannelNumber, - 0, //BcnPeriod, - 0, //DtimPeriod, - 0, //mCap, - NULL, //SuppRateSet, - NULL //yIbpm, - ); - - // - // Note: the following code handles the cases scan is not actually started - // and we need to free the custom scan req. - // - // pCurReq may be NULL: - // After MgntLinkRequest, pCurReq may have been freed by the scan time check - // mechanism (pMgntInfo->bCheckScanTime). In this case, the req is safely - // freed (or requeued if repeat count is not 0) in CustomScan_ScanCompleteCb. - // - // MgntLinkRequest rescheduled: - // If MgntLinkRequest is rescheduled via MgntLinkRequestReschedule, it - // will be called again when RF is turned on in InactivePsTimerCallback. - // In this case, we leave the custom scan req as the cur req and it will - // be activated again when RF is on. - // - // If scan request is rejected by MgntLinkRequest non rescheduled cases or - // ScanByTimer, we need to free the request here. - // - // If scan request is rejected by ScanCallback (and note that the scan timer - // is not set again when returned), such as MgntResetOrPnPInProgress, we are - // not able to detect that here, and the state of the custom scan req is left - // as starting and will be recycled by the worker if the state time exceeds - // CUSTOM_SCAN_MAX_TIME_WAIT_SCAN_STARTED_MS. - // - - customscan_Lock(info); - if(info->pCurReq) - { - if(CUSTOM_SCAN_STATE_STARTED <= info->pCurReq->state) - { - bScanStarted = TRUE; - } - else - {// ScanByTimer or its callers reject the scan request - if(TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESCHEDULED)) - {// MgntLinkRequest shall be called again when RF is turned on - // in this case, scan is "scheduled" to be started when RF is on, so return true - bScanStarted = TRUE; - } - else - {// other cases such as hw/sw radio off - RT_TRACE(COMP_SCAN, DBG_LOUD, ("scan did not started and not rescheduled\n")); customscan_Unlock(info); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_PRE_DESTROY); - customscan_Lock(info); - customscan_FreeCurReq(info); - } - } - } - customscan_Unlock(info); - - return bScanStarted; -} - -static -VOID -customscan_WorkerCb( - IN VOID *pCtx - ) -{ - RT_THREAD *threadCtx = (RT_THREAD *)pCtx; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)threadCtx->pContext; - u4Byte bDelayMs = 0; - BOOLEAN bForcePassive = FALSE; - - FunctionIn(COMP_SCAN); - - RT_ASSERT(pCtx, ("%s(): pCtx is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - if(MgntScanInProgress(&info->pAdapter->MgntInfo)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("skip for there's ongoing req\n")); - FunctionOut(COMP_SCAN); - return; - } - - if(customscan_LinkInProgress(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("skip and wait %u ms for link in progress\n", - CUSTOM_SCAN_WAIT_LINK_DONE_MS)); - PlatformSleepUs(CUSTOM_SCAN_WAIT_LINK_DONE_MS * 1000); - PlatformSetEventToTrigerThread(info->pAdapter, &info->worker); - FunctionOut(COMP_SCAN); - return; - } - - customscan_Lock(info); - - if(info->pCurReq) - { - if(TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESET)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s(): req %s is in terminating state and reset flag set, free it\n", __FUNCTION__, info->pCurReq->typeInfo)); - - customscan_FreeDanglingReq(info); - // to continue processing req in queue - } - else - { - if(CUSTOM_SCAN_STATE_STARTING == info->pCurReq->state) - { - if(CUSTOM_SCAN_MAX_TIME_WAIT_SCAN_STARTED_MS < PlatformGetCurrentTime() - info->pCurReq->stateTime) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("requeue req: %s for failed to start\n", info->pCurReq->typeInfo)); - customscan_FreeCurReq(info); - } - customscan_Unlock(info); - FunctionOut(COMP_SCAN); - return; - } - - if(CUSTOM_SCAN_STATE_PRE_DESTROY == info->pCurReq->state) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("cur req: %s is in its pre destroy state\n", info->pCurReq->typeInfo)); - customscan_Unlock(info); - FunctionOut(COMP_SCAN); - return; - } - } - } - - // There's ongoing custom req when scan in progress is false - if(info->pCurReq) - { - if(TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_TERMINATE)) - {// to wait until it is freed - RT_TRACE(COMP_SCAN, DBG_LOUD, ("req %s is being terminated, not to start another one\n", info->pCurReq->typeInfo)); - } - else - { - RT_ASSERT(NULL == info->pCurReq, - ("%s(): there's ongoing custom req %s when scan in progress is false, state: %s\n", - __FUNCTION__, info->pCurReq->typeInfo, customscan_ScanStateTxt(info->pCurReq->state))); - } - - customscan_Unlock(info); - FunctionOut(COMP_SCAN); - return; - } - - // Check if any request queued - if(!info->reqCnt) - { - customscan_Unlock(info); - FunctionOut(COMP_SCAN); - return; - } - - // Make curReq ready so it is available in the callbacks - info->pCurReq = (CUSTOM_SCAN_REQ *)RTRemoveHeadListWithCnt(&info->reqQ, &info->reqCnt); - RT_ASSERT(CUSTOM_SCAN_STATE_WAITING == info->pCurReq->state || CUSTOM_SCAN_STATE_DEFERRED == info->pCurReq->state, - ("%s(): invalid req state: %s\n", __FUNCTION__, customscan_ScanStateTxt(info->pCurReq->state))); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_STARTING); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("starting req: %s\n", info->pCurReq->typeInfo)); - - if(!TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_REQUEUED)) - { - if(info->pCurReq->delayStartMs) - bDelayMs = info->pCurReq->delayStartMs; - } - else - { - if(info->pCurReq->repeatIntermittentMs) - bDelayMs = info->pCurReq->repeatIntermittentMs; - } - - bForcePassive = info->pCurReq->bForcePassive; - - customscan_Unlock(info); - - if(bDelayMs) - PlatformSleepUs(bDelayMs * 1000); - - customscan_InvokeMgntLinkReq(info, bForcePassive); - - FunctionOut(COMP_SCAN); - - return; -} - -static -VOID -customscan_PreWorkerExitCb( - IN VOID *pCtx - ) -{ - RT_THREAD *threadCtx = (RT_THREAD *)pCtx; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)threadCtx->pContext; - - RT_ASSERT(pCtx, ("%s(): pCtx is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - info->bWorkerExited = TRUE; - - return; -} - -//----------------------------------------------------------------------------- -// Driver callback -//----------------------------------------------------------------------------- - -// -// Description: -// This function handles reset request when scan in progress is not set. -// -VOID -CustomScan_ResetReqNoScanCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - ADAPTER *pAdapter = info->pAdapter; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - if(MgntScanInProgress(&pAdapter->MgntInfo)) - { - return; - } - - customscan_Lock(info); - - // since we are doing reset, flush all queued reqs - customscan_FlushReqQ(info); - - if(CUSTOM_SCAN_PROCESSING_REQ(info) - && CUSTOM_SCAN_STATE_STARTING == info->pCurReq->state - && TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESCHEDULED) - ) - { - // A rescheduled scan req still waiting for RF on, we free it here, otherwise: - // * If there's a subsequent connect request, the return point would be changed to - // IPS_CALLBACK_JOIN_REQUEST and when subsequent scan is issued, CustomScan_IssueSysScan - // would think that the driver is doing custom scan and return media busy. In addition, - // JoinRequest may issue scan and that scan would be associated with the rescheduled - // custom scan request and that is wrong. - // * If there's no connect request, the scan would continue when RF is on and that's not - // desiarble since we shall stop scan when receive a reset request. - RT_TRACE(COMP_SCAN, DBG_WARNING, ("rescheduled scan %s got reset\n", info->pCurReq->typeInfo)); - customscan_Unlock(info); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_PRE_DESTROY); - customscan_Lock(info); - customscan_FreeCurReq(info); - } - - customscan_Unlock(info); - - return; -} - -VOID -CustomScan_ScanResetCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - - customscan_Lock(info); - - RT_TRACE(COMP_SCAN, DBG_WARNING, ("scan got reset\n")); - - customscan_DumpReqQ(info); - if(CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("cur req:\n")); - customscan_DumpReq(info->pCurReq); - } - - do - { - // since we are doing reset, flush all queued reqs - customscan_FlushReqQ(info); - - // mark cur req as reset - if(CUSTOM_SCAN_PROCESSING_REQ(info)) - { - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESET); - - if(CUSTOM_SCAN_STATE_STARTING == info->pCurReq->state - || CUSTOM_SCAN_STATE_STARTED == info->pCurReq->state - || CUSTOM_SCAN_STATE_SW_CHNL == info->pCurReq->state - || CUSTOM_SCAN_STATE_DWELL == info->pCurReq->state - ) - {// can't guarantee that ScanComplete for this req will be invoked - RT_TRACE(COMP_SCAN, DBG_LOUD, ("req %s got reset\n", info->pCurReq->typeInfo)); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_TERMINATING); - } - } - }while(FALSE); - - customscan_Unlock(info); - - return; -} - -VOID -CustomScan_ScanByTimerCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - - customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - break; - } - - if(CUSTOM_SCAN_STATE_STARTING == info->pCurReq->state) - { - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_STARTED); - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_STARTED); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("req issued: %s\n", info->pCurReq->typeInfo)); - } - }while(FALSE); - - customscan_Unlock(info); - - return; -} - -BOOLEAN -CustomScan_ConstructScanListCb( - IN VOID *pInfo, - IN RT_CHANNEL_LIST *pChnlList - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - u4Byte itChnl = 0; - RT_LIST_ENTRY *pEntry = NULL; - BOOLEAN bSysScan = FALSE; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - // Not to acquire lock because - // 1. it is not necessary since constructing scan list is already an exclusive action - // 2. it may cause deadlock - //customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - bSysScan = TRUE; - break; - } - - // Make a copy of the channel list - info->scanChnlListLen = pChnlList->ScanChannelListLength; - for(itChnl = 0; itChnl < pChnlList->ScanChannelListLength; itChnl++) - info->scanChnlList[itChnl] = pChnlList->ScanChannelList[itChnl]; - - // Reset driver channel list - pChnlList->ScanChannelListLength = 0; - - // Reconstruct the channel list - RtEntryListForEach(&info->pCurReq->chnlListQ, pEntry) - { - CHNL_ENTRY_EXT *chnl = (CHNL_ENTRY_EXT *)pEntry; - RT_CHNL_LIST_ENTRY *chnlEntry = NULL; - - chnlEntry = customscan_GetScanChnlInDrvChnlList(info->scanChnlList, info->scanChnlListLen, chnl->super.ChannelNum); - - if(!chnlEntry) - continue; - - // if client specifies mix, follow driver - if(SCAN_MIX == chnl->super.ScanType) - chnl->super.ScanType = chnlEntry->ScanType; - - // if driver specifies passive, we shall use passive - if(SCAN_PASSIVE == chnlEntry->ScanType) - chnl->super.ScanType = SCAN_PASSIVE; - - if(0 == chnl->super.ScanPeriod) - chnl->super.ScanPeriod = chnlEntry->ScanPeriod; - - chnl->super.MaxTxPwrDbm = chnlEntry->MaxTxPwrDbm; - chnl->super.ExInfo = chnlEntry->ExInfo; - - if(pChnlList->ScanChannelListLength < MAX_SCAN_CHANNEL_NUM) - { - pChnlList->ScanChannelList[pChnlList->ScanChannelListLength++] = &chnl->super; - } - else - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("unable to insert ch %u for scan\n", chnl->super.ChannelNum)); - } - } - - bSysScan = (CUSTOM_SCAN_SRC_TYPE_SYS == info->pCurReq->type); - - }while(FALSE); - - //customscan_Unlock(info); - - return bSysScan; -} - -u2Byte -CustomScan_PreSwChnlCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ) -{ - u2Byte extDwellTime = 0; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - break; - } - - if(info->pCurReq->extDwellTime) - { - extDwellTime = info->pCurReq->extDwellTime; - info->pCurReq->extDwellTime = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("dwell time extended to: %u\n", extDwellTime)); - } - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_SW_CHNL); - - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("%s: to sw from: %u to %u\n", - info->pCurReq->typeInfo, - info->pCurReq->curChnl ? info->pCurReq->curChnl->super.ChannelNum : 0, - chnl->ChannelNum)); - - info->pCurReq->curChnl = (CHNL_ENTRY_EXT *)CONTAINING_RECORD(chnl, CHNL_ENTRY_EXT, super); - - }while(FALSE); - customscan_Unlock(info); - - return extDwellTime; -} - -VOID -CustomScan_OnChnlCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - break; - } - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("on chnl for req %s: %u for %u ms\n", info->pCurReq->typeInfo, chnl->ChannelNum, chnl->ScanPeriod)); - - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_DWELL); - - if(info->pCurReq->curChnl) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("flag: %u\n", info->pCurReq->curChnl->flag)); - } - - if(CUSTOM_SCAN_TIME_DUE(info->pCurReq)) - { - customscan_TerminateCurrentReq(info, FALSE); - } - }while(FALSE); - - customscan_Unlock(info); - - return; -} - -BOOLEAN -CustomScan_PreSetDwellTimerCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - BOOLEAN bSetDwellTimer = TRUE; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - break; - } - - if(info->pCurReq->curChnl && TEST_FLAG(info->pCurReq->curChnl->flag, CHNL_ENTRY_EXT_FLAG_CHNL_SHUT)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("shutting cur chnl: %u, not to set dwell timer\n", info->pCurReq->curChnl->super.ChannelNum)); - bSetDwellTimer = FALSE; - } - - }while(FALSE); - - customscan_Unlock(info); - - return bSetDwellTimer; -} - -BOOLEAN -CustomScan_SendProbeCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - CHNL_ENTRY_EXT *chnlExt = NULL; - ADAPTER *pAdapter = NULL; - - RT_TCB *pTcb = NULL; - RT_TX_LOCAL_BUFFER *pBuf = NULL; - - BOOLEAN bContinue = TRUE; - BOOLEAN bSendProbe = FALSE; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("pCurReq is NULL!!! return\n")); - break; - } - - RT_ASSERT((VOID *)info->pCurReq->chnlEntryPool.start <= (VOID *)chnl - && (VOID *)chnl < (VOID *)info->pCurReq->chnlEntryPool.end, - ("%s(): chnl is not the customized one\n", __FUNCTION__)); - - chnlExt = (CHNL_ENTRY_EXT *)CONTAINING_RECORD(chnl, CHNL_ENTRY_EXT, super); - pAdapter = info->pAdapter; - - if(!chnlExt->probeReq) // didn't specify probe to send, use default - { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("chnlExt->probeReq is NULL!!! return\n")); - break; - } - - bContinue = FALSE; - - if(0 == FrameBuf_Length(chnlExt->probeReq)) // probe specified but length is 0, to send nothing - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("0 == FrameBuf_Length(chnlExt->probeReq)!!! return\n")); - break; - } - - bSendProbe = TRUE; - }while(FALSE); - - customscan_Unlock(info); - - if(bSendProbe) - {// send probe w/o having custom scan lock acquired to prevent deadlock - PlatformAcquireSpinLock(info->pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - PlatformMoveMemory(pBuf->Buffer.VirtualAddress, - FrameBuf_MHead(chnlExt->probeReq), - FrameBuf_Length(chnlExt->probeReq)); - pTcb->PacketLength = FrameBuf_Length(chnlExt->probeReq); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, chnlExt->dataRate); - } - - PlatformReleaseSpinLock(info->pAdapter, RT_TX_SPINLOCK); - } - - return bContinue; -} - -BOOLEAN -CustomScan_DualBandScanCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - BOOLEAN terminated = FALSE; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - - customscan_Lock(info); - - do{ - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - break; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("state: %s\n", customscan_ScanStateTxt(info->pCurReq->state))); - - if(CUSTOM_SCAN_STATE_TERMINATING == info->pCurReq->state) - { - RT_CHNL_LIST_ENTRY *pChnlEntry = NULL; - - while(RtActChannelList(info->pAdapter, RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL, NULL, &pChnlEntry)){} - terminated = TRUE; - } - - if(CUSTOM_SCAN_TIME_DUE(info->pCurReq)) - { - customscan_TerminateCurrentReq(info, FALSE); - } - }while(FALSE); - - customscan_Unlock(info); - - return terminated; -} - -VOID -CustomScan_PreScanCompleteCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - return; - } - - return; -} - -VOID -CustomScan_ScanCompleteCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - - customscan_Lock(info); - - if(CUSTOM_SCAN_PROCESSING_REQ(info)) - {// Note that scan spinlock is acquired - if(info->pCurReq->repeatCount) - { - info->pCurReq->repeatCount--; - - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("repeatCount: %u, state: %s\n", - info->pCurReq->repeatCount, customscan_ScanStateTxt(info->pCurReq->state))); - - if(info->pCurReq->repeatCount - && CUSTOM_SCAN_STATE_TERMINATING != info->pCurReq->state - ) - { - customscan_RequeueCurReq(info); - } - else - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("sending completed event to: %s\n", info->pCurReq->typeInfo)); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_COMPLETED); - } - RT_TRACE(COMP_SCAN, DBG_LOUD, ("scan complete: sw back to chnl: %u\n", info->pAdapter->MgntInfo.SettingBeforeScan.ChannelNumber)); - } - else - { - RT_TRACE(COMP_SCAN, DBG_WARNING, - ("current req's repeat count reaches 0 already and it is not freed and scan complete is invoked again\n")); - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_POTENTIAL_REPEATE_COUNT_UNDERFLOW); - } - } - - customscan_Unlock(info); - - return; -} - -VOID -CustomScan_ScanCompleteReturnCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - BOOLEAN bProcessingReq = FALSE; - CUSTOM_SCAN_REQ *curReq = NULL; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - customscan_Lock(info); - if(CUSTOM_SCAN_PROCESSING_REQ(info)) - { - bProcessingReq = TRUE; - curReq = info->pCurReq; - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_TO_BE_FREED); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("going to free: %s\n", curReq->typeInfo)); - } - customscan_Unlock(info); - - // Note that pCurReq may be changed by the worker after unlock, - // this happens when direct OID is used - - if(bProcessingReq) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("sending pre-destroy event to: %s\n", curReq->typeInfo)); - customscan_SetReqState(info, curReq, CUSTOM_SCAN_STATE_PRE_DESTROY); - } - - customscan_Lock(info); - - if(bProcessingReq) - { - if(info->pCurReq == curReq) - customscan_FreeCurReq(info); - else - customscan_FreeReq(info, curReq); - } - - // Trigger thread when ScanComplete has done everything it needs to do - if(info->reqCnt) - { - PlatformSetEventToTrigerThread(info->pAdapter, &info->worker); - } - - customscan_Unlock(info); - - FunctionOut(COMP_SCAN); - - return; -} - -VOID -CustomScan_RescheduleCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pCurReq is NULL!!! return\n")); - break; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - - - SET_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESCHEDULED); - }while(FALSE); - customscan_Unlock(info); - - return; -} - -VOID -CustomScan_WatchDogCb( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - if(NULL == info || info_sig != info->sig) - {// not initialized yet - return; - } - - if(info->bWorkerExited) - { - info->bWorkerExited = FALSE; - - // Note that this shall be done in passive level - PlatformSetEventTrigerThread(info->pAdapter, &info->worker, PASSIVE_LEVEL, pInfo); - } -} - -VOID -CustomScan_OnProbeRspCb( - IN VOID *pInfo, - IN RT_RFD *pRfd - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - if(CUSTOM_SCAN_PROCESSING_REQ(info)) - { - if(info->pCurReq->onProbeRspCb) - info->pCurReq->onProbeRspCb( - info->pCurReq->state, - info->pCurReq->onProbeRspCtx, - pRfd - ); - } - - customscan_Unlock(info); - - return; -} - -//----------------------------------------------------------------------------- -// Public -//----------------------------------------------------------------------------- -VOID * -CustomScan_AllocInfo( - IN ADAPTER *pAdapter - ) -{ - CUSTOM_SCAN_INFO *info = NULL; - MGNT_INFO *pMgntInfo = NULL; - - RT_ASSERT(pAdapter, ("%s(): pAdapter is NULL!!!\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - pMgntInfo = &pAdapter->MgntInfo; - pMgntInfo->pCustomScanInfo = NULL; - - if(RT_STATUS_SUCCESS != PlatformAllocateMemory(pAdapter, (PVOID *)&info, sizeof(*info))) - { - return NULL; - } - - pMgntInfo->pCustomScanInfo = info; - - return info; -} - -VOID -CustomScan_FreeInfo( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - PlatformFreeMemory(info, sizeof(*info)); - - return; -} - -BOOLEAN -CustomScan_InProgress( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - return FALSE; - - if(CUSTOM_SCAN_PROCESSING_REQ(info) && CUSTOM_SCAN_SRC_TYPE_SYS != info->pCurReq->type) - return TRUE; - - return FALSE; -} - -VOID -CustomScan_Init( - IN VOID *pInfo, - IN ADAPTER *pScanAdapter, - IN u8Byte dbgComp, - IN u4Byte dbgLevel - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(pScanAdapter, ("%s(): pScanAdapter is NULL!!!\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - PlatformZeroMemory(info, sizeof(*info)); - - info->sig = info_sig; - info->pAdapter = pScanAdapter; - RTInitializeListHead(&info->reqQ); - info->reqCnt = 0; - Pool_Init(&info->reqPool, "req pool", sizeof(info->reqPoolRsvd), - info->reqPoolRsvd, sizeof(info->reqPoolRsvd[0]), - dbgComp, dbgLevel); - info->pCurReq = NULL; - info->dbgComp = dbgComp; - info->dbgLevel = dbgLevel; - - PlatformInitializeSpinLock(pScanAdapter, RT_CUSTOM_SCAN_SPINLOCK); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ctx: %p\n", pInfo)); - - info->bWorkerExited = FALSE; - - FunctionOut(COMP_SCAN); - - return; -} - -VOID -CustomScan_Start( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - ADAPTER *pScanAdapter = info->pAdapter; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - PlatformInitializeThreadEx(pScanAdapter, &info->worker, customscan_WorkerCb, customscan_PreWorkerExitCb, "custom scan worker thread", TRUE, 1000, pInfo); - PlatformSetEventTrigerThread(pScanAdapter, &info->worker, PASSIVE_LEVEL, pInfo); - - FunctionOut(COMP_SCAN); - - return; -} - -VOID -CustomScan_Stop( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - // Free all requests in the queue - // Note that at this time, scan spinlock has been freed already - customscan_Lock(info); - customscan_FlushReqQ(info); - customscan_Unlock(info); - - // Terminate the worker thread - PlatformWaitThreadEnd(info->pAdapter, &info->worker); - PlatformCancelThread(info->pAdapter, &info->worker); - PlatformReleaseThread(info->pAdapter, &info->worker); - - FunctionOut(COMP_SCAN); - - return; -} - -VOID -CustomScan_Deinit( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - PlatformFreeSpinLock(info->pAdapter, RT_CUSTOM_SCAN_SPINLOCK); - - return; -} - -VOID * -CustomScan_AllocReq( - IN VOID *pInfo, - IN CUSTOM_SCAN_STATE_CB cb, - IN VOID *ctx - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - CUSTOM_SCAN_REQ *req = NULL; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(NULL == (req = (CUSTOM_SCAN_REQ *)Pool_Acquire(&info->reqPool))) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("Failed to acquire req from pool\n")); - customscan_DumpReqPool(info); - break; - } - - customscan_InitReq(info, req); - }while(FALSE); - - customscan_Unlock(info); - - return req; -} - -FRAME_BUF * -CustomScan_GetProbeReqBuf( - IN VOID *scanReq - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - RT_ASSERT(CUSTOM_SCAN_STATE_IDLE == req->state, ("%s(): invalid req state: %s\n", __FUNCTION__, customscan_ScanStateTxt(req->state))); - - return &req->probeReqBuf; -} - -VOID -CustomScan_SetupCbCtx( - IN VOID *scanReq, - IN CUSTOM_SCAN_STATE_CB cb, - IN VOID *ctx - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - RT_ASSERT(CUSTOM_SCAN_STATE_IDLE == req->state, ("%s(): invalid req state: %s\n", __FUNCTION__, customscan_ScanStateTxt(req->state))); - - req->cb = cb; - req->cbCtx = ctx; - - return; -} - -RT_STATUS -CustomScan_TermReq( - IN VOID *pInfo, - IN BOOLEAN bStopOnCurChnl - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - RT_TRACE(COMP_SCAN, DBG_WARNING, ("to terminate scan\n")); - customscan_DumpReqQ(info); - if(CUSTOM_SCAN_PROCESSING_REQ(info)) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("cur req:\n")); - customscan_DumpReq(info->pCurReq); - } - - do - { - customscan_FlushReqQ(info); - - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - break; - - info->pAdapter->MgntInfo.bCompleteScan = TRUE; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("CustomScan_TermReq(): info bCompleteScan %d\n", info->pAdapter->MgntInfo.bCompleteScan)); - - if(RT_STATUS_SUCCESS != (status = customscan_TerminateCurrentReq(info, bStopOnCurChnl))) - break; - - }while(FALSE); - - customscan_Unlock(info); - - return status; -} - -RT_STATUS -CustomScan_AddScanChnl( - IN VOID *scanReq, - IN u1Byte chnl, - IN u1Byte count, - IN RT_SCAN_TYPE scanType, - IN u2Byte duration, - IN u1Byte dataRate, - IN FRAME_BUF *probeReqBuf - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - RT_CHNL_LIST_ENTRY chnlEntry; - u4Byte itChnl = 0; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - RT_ASSERT(CUSTOM_SCAN_STATE_IDLE == req->state, ("%s(): invalid req state: %s\n", __FUNCTION__, customscan_ScanStateTxt(req->state))); - - if(MAX_SCAN_CHANNEL_NUM <= req->chnlListCnt) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("chnlListCnt (%u) exceeds MAX_SCAN_CHANNEL_NUM\n", req->chnlListCnt)); - return RT_STATUS_BUFFER_TOO_SHORT; - } - - chnlEntry.ChannelNum = chnl; - chnlEntry.ScanType = scanType; - chnlEntry.ScanPeriod = duration; - chnlEntry.MaxTxPwrDbm = UNSPECIFIED_PWR_DBM; - chnlEntry.ExInfo = 0; - - for(itChnl = 0; itChnl < count; itChnl++) - { - CHNL_ENTRY_EXT *pExt = (CHNL_ENTRY_EXT *)Pool_Acquire(&req->chnlEntryPool); - - if(!pExt) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("Failed to acquire chnl ext from pool\n")); - status = RT_STATUS_RESOURCE; - break; - } - - customscan_InitChnlEntryExt(pExt, &chnlEntry, probeReqBuf, dataRate); - RTInsertTailListWithCnt(&req->chnlListQ, &pExt->list, &req->chnlListCnt); - } - - return status; -} - -RT_STATUS -CustomScan_AddChnlPlanChnls( - IN VOID *scanReq, - IN const RT_CHANNEL_PLAN *plan, - IN RT_SCAN_TYPE scanType, - IN u2Byte duration, - IN u1Byte dataRate, - IN FRAME_BUF *probeReqBuf - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - u4Byte itChnl = 0; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(plan, ("%s(): plan is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(plan->Len || plan->Len2_4G || plan->Len5G, ("%s(): plan->Len and plan->Len2_4G and plan->Len5G are all 0\n", __FUNCTION__)); - - if(plan->Len) - {// old definition - // add all channels - for(itChnl = 0; itChnl < plan->Len; itChnl++) - { - CustomScan_AddScanChnl( - scanReq, - plan->Channel[itChnl], - 1, - scanType, - duration, - dataRate, - probeReqBuf - ); - } - } - else - {// new definition, see DefaultChannelPlan - // add 2.4g channels - for(itChnl = 0; itChnl < plan->Len2_4G; itChnl++) - { - CustomScan_AddScanChnl( - scanReq, - plan->Channel2_4G[itChnl], - 1, - scanType, - duration, - dataRate, - probeReqBuf - ); - } - - // add 5g channels - for(itChnl = 0; itChnl < plan->Len5G; itChnl++) - { - CustomScan_AddScanChnl( - scanReq, - plan->Channel5G[itChnl], - 1, - scanType, - duration, - dataRate, - probeReqBuf - ); - } - - } - - return status; -} - -RT_STATUS -CustomScan_SetTimeBound( - IN VOID *scanReq, - IN u4Byte timeBound - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - if(CUSTOM_SCAN_STATE_IDLE != req->state) - { - return RT_STATUS_INVALID_STATE; - } - - req->timeBound = timeBound; - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -CustomScan_ForcePassiveScan( - IN VOID *scanReq - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - if(CUSTOM_SCAN_STATE_IDLE != req->state) - { - return RT_STATUS_INVALID_STATE; - } - - req->bForcePassive = TRUE; - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -CustomScan_SetDelayStart( - IN VOID *scanReq, - IN u4Byte delayMs - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - if(CUSTOM_SCAN_STATE_IDLE != req->state) - { - return RT_STATUS_INVALID_STATE; - } - - req->delayStartMs = delayMs; - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -CustomScan_SetRepeatIntermittent( - IN VOID *scanReq, - IN u4Byte repeatIntermittentMs - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - if(CUSTOM_SCAN_STATE_IDLE != req->state) - { - return RT_STATUS_INVALID_STATE; - } - - req->repeatIntermittentMs = repeatIntermittentMs; - - return RT_STATUS_SUCCESS; -} - - -RT_STATUS -CustomScan_SetRepeatCount( - IN VOID *scanReq, - IN u4Byte count - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - if(CUSTOM_SCAN_STATE_IDLE != req->state) - { - return RT_STATUS_INVALID_STATE; - } - - req->repeatCount = count; - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -CustomScan_SetProbeRspCb( - IN VOID *scanReq, - IN CUSTOM_SCAN_ON_PROBE_RSP_CB onProbeRspCb, - IN VOID *ctx - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - if(CUSTOM_SCAN_STATE_IDLE != req->state) - { - return RT_STATUS_INVALID_STATE; - } - - req->onProbeRspCb = onProbeRspCb; - req->onProbeRspCtx = ctx; - - return RT_STATUS_SUCCESS; -} - -u4Byte -CustomScan_NumAddedChnl( - IN VOID *scanReq - ) -{ - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - return req->chnlListCnt; -} - -RT_STATUS -CustomScan_IssueReq( - IN VOID *pInfo, - IN VOID *scanReq, - IN CUSTOM_SCAN_SRC_TYPE type, - IN const char *typeInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - RT_ASSERT(CUSTOM_SCAN_STATE_IDLE == req->state, ("%s(): invalid req state: %s\n", __FUNCTION__, customscan_ScanStateTxt(req->state))); - RT_ASSERT(typeInfo, ("%s(): typeInfo is NULL!!!\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - req->type = type; - req->typeInfo = typeInfo; - req->issueTime = PlatformGetCurrentTime() / 1000; - - if(0 == req->repeatCount) - { - customscan_Lock(info); - customscan_FreeReq(info, req); - customscan_Unlock(info); - return RT_STATUS_SUCCESS; - } - - customscan_Lock(info); - if(CUSTOM_SCAN_SRC_TYPE_SYS == type) - {// give system scan the highest priority - RTInsertHeadListWithCnt(&info->reqQ, &req->list, &info->reqCnt); - } - else - { - RTInsertTailListWithCnt(&info->reqQ, &req->list, &info->reqCnt); - } - customscan_SetReqState(info, req, CUSTOM_SCAN_STATE_WAITING); - - customscan_DumpReq(req); - - customscan_Unlock(info); - - if(RT_DRIVER_STOP(info->pAdapter)) - { - // In this case, the request has been inserted to the reqQ and will be freed automatically in CustomScan_Deinit - return RT_STATUS_INVALID_STATE; - } - - - PlatformSetEventToTrigerThread(info->pAdapter, &info->worker); - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -CustomScan_IssueSysScan( - IN VOID *pInfo, - IN BOOLEAN bActiveScan - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - CUSTOM_SCAN_REQ *req = NULL; - RT_CHANNEL_PLAN *plan = NULL; - - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - FunctionIn(COMP_SCAN); - - do - { - if(MgntScanInProgress(&info->pAdapter->MgntInfo)) - { - status = RT_STATUS_MEDIA_BUSY; - break; - } - - if(NULL == (req = (CUSTOM_SCAN_REQ *)CustomScan_AllocReq(pInfo, NULL, NULL))) - { - status = RT_STATUS_RESOURCE; - break; - } - - if(CUSTOM_SCAN_PROCESSING_REQ(info) && TEST_FLAG(info->pCurReq->flag, CUSTOM_SCAN_REQ_FLAG_RESET)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s(): req %s is in terminating state and reset flag set, free it\n", __FUNCTION__, info->pCurReq->typeInfo)); - customscan_Lock(info); - customscan_FreeDanglingReq(info); - customscan_Unlock(info); - } - - // set to cur req ASAP - if(!CUSTOM_SCAN_PROCESSING_REQ(info)) - { - customscan_Lock(info); - info->pCurReq = req; - customscan_Unlock(info); - } - else - { - status = RT_STATUS_MEDIA_BUSY; - break; - } - - // prepare chnls - RtActChannelList(info->pAdapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_PLAN, &info->pAdapter->MgntInfo.ChannelPlan, &plan); - CustomScan_AddChnlPlanChnls(req, plan, bActiveScan ? SCAN_ACTIVE : SCAN_PASSIVE, 0, 0, NULL); - - if(!bActiveScan) - { - CustomScan_ForcePassiveScan(req); - } - - // store info - req->type = CUSTOM_SCAN_SRC_TYPE_SYS; - req->typeInfo = "sys"; - req->issueTime = PlatformGetCurrentTime() / 1000; - - // set state - customscan_Lock(info); - customscan_SetReqState(info, info->pCurReq, CUSTOM_SCAN_STATE_STARTING); - customscan_Unlock(info); - - // issue scan - if(!customscan_InvokeMgntLinkReq(info, !bActiveScan)) - { - status = RT_STATUS_FAILURE; - break; - } - }while(FALSE); - - // cleanup - if(req && RT_STATUS_SUCCESS != status) - { - customscan_Lock(info); - if(req == info->pCurReq) - info->pCurReq = NULL; - - customscan_FreeReq(info, req); - - customscan_Unlock(info); - } - - FunctionOut(COMP_SCAN); - - return status; -} - -RT_STATUS -CustomScan_ExtendDwellTime( - IN VOID *pInfo, - IN u2Byte dwellTime - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(!CustomScan_InProgress(pInfo)) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("no custom scan in progress\n")); - status = RT_STATUS_INVALID_STATE; - break; - } - - if(CUSTOM_SCAN_STATE_DWELL != info->pCurReq->state) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, - ("Failed to extend dwell time: state is: %s\n", customscan_ScanStateTxt(info->pCurReq->state))); - status = RT_STATUS_INVALID_STATE; - break; - } - - info->pCurReq->extDwellTime = dwellTime; - }while(FALSE); - - customscan_Unlock(info); - - return status; - -} - -RT_STATUS -CustomScan_ShutDwellTime( - IN VOID *pInfo, - IN VOID *req - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - CUSTOM_SCAN_REQ *reqIn = (CUSTOM_SCAN_REQ *)req; - - FunctionIn(COMP_SCAN); - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - do - { - if(!CustomScan_InProgress(pInfo)) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("no custom scan in progress\n")); - status = RT_STATUS_INVALID_STATE; - break; - } - - if(reqIn != info->pCurReq) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("not current req\n")); - status = RT_STATUS_INVALID_STATE; - break; - } - - if(CUSTOM_SCAN_STATE_DWELL != reqIn->state) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, - ("Failed to shut dwell time: state is: %s\n", customscan_ScanStateTxt(reqIn->state))); - status = RT_STATUS_INVALID_STATE; - break; - } - - RT_TRACE(COMP_SCAN, DBG_WARNING, - ("shutting off scan req %s dwell time\n", reqIn->typeInfo)); - - if(RT_STATUS_SUCCESS != (status = customscan_TerminateCurrentChnl(info))) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, - ("customscan_TerminateCurrentChnl failed: 0x%08X\n", status)); - break; - } - - if(reqIn->curChnl) - { - SET_FLAG(reqIn->curChnl->flag, CHNL_ENTRY_EXT_FLAG_CHNL_SHUT); - } - }while(FALSE); - - FunctionOut(COMP_SCAN); - - return status; - -} - -const char * -CustomScan_ScanStateTxt( - IN CUSTOM_SCAN_STATE state - ) -{ - return customscan_ScanStateTxt(state); -} - -BOOLEAN -CustomScan_AcquireCurCtx( - IN VOID *pInfo, - IN VOID *scanReq, - OUT VOID **ppCtx - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - CUSTOM_SCAN_REQ *req = (CUSTOM_SCAN_REQ *)scanReq; - BOOLEAN bCurReq = FALSE; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - RT_ASSERT(scanReq, ("%s(): scanReq is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(req_sig == req->sig, ("%s(): invalid scanReq\n", __FUNCTION__)); - - customscan_Lock(info); - - do - { - if(req != info->pCurReq) - { - break; - } - - bCurReq = TRUE; - *ppCtx = req->cbCtx; - }while(FALSE); - - if(!bCurReq) - { - customscan_Unlock(info); - } - - return bCurReq; -} - -VOID -CustomScan_ReleaseCurCtx( - IN VOID *pInfo - ) -{ - CUSTOM_SCAN_INFO *info = (CUSTOM_SCAN_INFO *)pInfo; - - RT_ASSERT(pInfo, ("%s(): pInfo is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(info_sig == info->sig, ("%s(): invalid info\n", __FUNCTION__)); - - customscan_Unlock(info); -} - diff --git a/network/wlan/WDI/COMMON/CustomizedScan.h b/network/wlan/WDI/COMMON/CustomizedScan.h deleted file mode 100644 index a719d7a1..00000000 --- a/network/wlan/WDI/COMMON/CustomizedScan.h +++ /dev/null @@ -1,319 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_CUSTOMIZED_SCAN_H -#define __INC_CUSTOMIZED_SCAN_H - - -#define CUSTOMIZED_SCAN_MAX_FRAME_LEN 512 -#define CUSTOMIZED_SCAN_MAX_REQ_NUM 8 - -#define GET_CUSTOM_SCAN_INFO(__pAdapter) (GetDefaultMgntInfo((__pAdapter))->pCustomScanInfo) - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- - -typedef enum _CUSTOM_SCAN_STATE -{ - CUSTOM_SCAN_STATE_IDLE = 0, // req allocated - CUSTOM_SCAN_STATE_WAITING, // waiting in the request queue - CUSTOM_SCAN_STATE_STARTING, - CUSTOM_SCAN_STATE_STARTED, // MgntLinkRequest called for the request - CUSTOM_SCAN_STATE_SW_CHNL, // switching channel in ScanCallback - CUSTOM_SCAN_STATE_DWELL, // dwelling on a specific channel - CUSTOM_SCAN_STATE_COMPLETED, // completed - CUSTOM_SCAN_STATE_PRE_DESTROY, - CUSTOM_SCAN_STATE_DEFERRED, // deferred for some reason - CUSTOM_SCAN_STATE_TERMINATING -}CUSTOM_SCAN_STATE; - -typedef -VOID -(*CUSTOM_SCAN_STATE_CB) -( - IN CUSTOM_SCAN_STATE state, - IN VOID *pCtx -); - -typedef enum _CUSTOM_SCAN_SRC_TYPE -{ - CUSTOM_SCAN_SRC_TYPE_SYS, - CUSTOM_SCAN_SRC_TYPE_BT, - CUSTOM_SCAN_SRC_TYPE_P2P, - CUSTOM_SCAN_SRC_TYPE_UNSPECIFIED -}CUSTOM_SCAN_SRC_TYPE; - -typedef -VOID -(*CUSTOM_SCAN_ON_PROBE_RSP_CB) -( - IN CUSTOM_SCAN_STATE state, - IN VOID *pCtx, - IN RT_RFD *pRfd -); - -//----------------------------------------------------------------------------- -// Driver callback -//----------------------------------------------------------------------------- - -VOID -CustomScan_ResetReqNoScanCb( - IN VOID *pInfo - ); - -VOID -CustomScan_ScanResetCb( - IN VOID *pInfo - ); - -VOID -CustomScan_ScanByTimerCb( - IN VOID *pInfo - ); - -BOOLEAN -CustomScan_ConstructScanListCb( - IN VOID *pInfo, - IN RT_CHANNEL_LIST *pChnlList - ); - -u2Byte -CustomScan_PreSwChnlCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ); - -VOID -CustomScan_OnChnlCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ); - -BOOLEAN -CustomScan_PreSetDwellTimerCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ); - -BOOLEAN -CustomScan_SendProbeCb( - IN VOID *pInfo, - IN RT_CHNL_LIST_ENTRY *chnl - ); - -BOOLEAN -CustomScan_DualBandScanCb( - IN VOID *pInfo - ); - -VOID -CustomScan_PreScanCompleteCb( - IN VOID *pInfo - ); - -VOID -CustomScan_ScanCompleteCb( - IN VOID *pInfo - ); - -VOID -CustomScan_ScanCompleteReturnCb( - IN VOID *pInfo - ); - -VOID -CustomScan_RescheduleCb( - IN VOID *pInfo - ); - -VOID -CustomScan_WatchDogCb( - IN VOID *pInfo - ); - -VOID -CustomScan_OnProbeRspCb( - IN VOID *pInfo, - IN RT_RFD *pRfd - ); - -//----------------------------------------------------------------------------- -// Function -//----------------------------------------------------------------------------- - -VOID * -CustomScan_AllocInfo( - IN ADAPTER *pAdapter - ); - -VOID -CustomScan_FreeInfo( - IN VOID *pInfo - ); - -BOOLEAN -CustomScan_InProgress( - IN VOID *pInfo - ); - -VOID -CustomScan_Init( - IN VOID *pInfo, - IN ADAPTER *pScanAdapter, - IN u8Byte dbgComp, - IN u4Byte dbgLevel - ); - -VOID -CustomScan_Start( - IN VOID *pInfo - ); - -VOID -CustomScan_Stop( - IN VOID *pInfo - ); - -VOID -CustomScan_Deinit( - IN VOID *pInfo - ); - -VOID * -CustomScan_AllocReq( - IN VOID *pInfo, - IN CUSTOM_SCAN_STATE_CB cb, - IN VOID *ctx - ); - -FRAME_BUF * -CustomScan_GetProbeReqBuf( - IN VOID *scanReq - ); - -VOID -CustomScan_SetupCbCtx( - IN VOID *scanReq, - IN CUSTOM_SCAN_STATE_CB cb, - IN VOID *ctx - ); - -RT_STATUS -CustomScan_TermReq( - IN VOID *pInfo, - IN BOOLEAN bStopOnCurChnl - ); - -RT_STATUS -CustomScan_AddScanChnl( - IN VOID *scanReq, - IN u1Byte chnl, - IN u1Byte count, - IN RT_SCAN_TYPE scanType, - IN u2Byte duration, - IN u1Byte dataRate, - IN FRAME_BUF *probeReqBuf - ); - -RT_STATUS -CustomScan_AddChnlPlanChnls( - IN VOID *scanReq, - IN const RT_CHANNEL_PLAN *plan, - IN RT_SCAN_TYPE scanType, - IN u2Byte duration, - IN u1Byte dataRate, - IN FRAME_BUF *probeReqBuf - ); - -RT_STATUS -CustomScan_SetTimeBound( - IN VOID *scanReq, - IN u4Byte timeBound - ); - -RT_STATUS -CustomScan_ForcePassiveScan( - IN VOID *scanReq - ); - -RT_STATUS -CustomScan_SetDelayStart( - IN VOID *scanReq, - IN u4Byte delayMs - ); - -RT_STATUS -CustomScan_SetRepeatIntermittent( - IN VOID *scanReq, - IN u4Byte repeatIntermittentMs - ); - -RT_STATUS -CustomScan_SetRepeatCount( - IN VOID *scanReq, - IN u4Byte count - ); - -RT_STATUS -CustomScan_SetProbeRspCb( - IN VOID *scanReq, - IN CUSTOM_SCAN_ON_PROBE_RSP_CB onProbeRspCb, - IN VOID *ctx - ); - -u4Byte -CustomScan_NumAddedChnl( - IN VOID *scanReq - ); - -RT_STATUS -CustomScan_IssueReq( - IN VOID *pInfo, - IN VOID *scanReq, - IN CUSTOM_SCAN_SRC_TYPE type, - IN const char *typeInfo - ); - -RT_STATUS -CustomScan_IssueSysScan( - IN VOID *pInfo, - IN BOOLEAN bActiveScan - ); - -RT_STATUS -CustomScan_ExtendDwellTime( - IN VOID *pInfo, - IN u2Byte dwellTime - ); - -RT_STATUS -CustomScan_ShutDwellTime( - IN VOID *pInfo, - IN VOID *req - ); - -const char * -CustomScan_ScanStateTxt( - IN CUSTOM_SCAN_STATE state - ); - -BOOLEAN -CustomScan_AcquireCurCtx( - IN VOID *pInfo, - IN VOID *scanReq, - OUT VOID **ppCtx - ); - -VOID -CustomScan_ReleaseCurCtx( - IN VOID *pInfo - ); - -#endif // #ifndef __INC_CUSTOMIZED_SCAN_H diff --git a/network/wlan/WDI/COMMON/DFS.c b/network/wlan/WDI/COMMON/DFS.c deleted file mode 100644 index 98a3e8ec..00000000 --- a/network/wlan/WDI/COMMON/DFS.c +++ /dev/null @@ -1,1176 +0,0 @@ -/****************************************************************************** - - (c) Copyright 2010, RealTEK Technologies Inc. All Rights Reserved. - - Module: DFS.c (RTL8190 Source C File) - - Note: Declare some variable which will be used by any debug command. - - Function: - - Export: - - Abbrev: - - History: - Data Who Remark - - ??/??/2010 Cosa Create initial version. - 12/23/2010 MHC Gather the code from other source files. - -******************************************************************************/ -/* Header Files. */ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "DFS.tmh" -#endif - - -extern VOID -AP_Restart( - IN PADAPTER Adapter - ); -extern VOID -Hal_PauseTx( - IN PADAPTER Adapter, - u1Byte type - ); - -#if (DFS_SUPPORT == 1) -//============================================ -// The following is for DFS local function, -// start with dfs_*() -//============================================ -VOID -dfs_StaDisableTx( - IN PADAPTER Adapter, - u1Byte type - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if(type == DFS_DISABLE_TX_ALL) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_StaDisableTx all!!\n")); - Hal_PauseTx(Adapter, HW_DISABLE_TX_ALL); - } - else if(type == DFS_DISABLE_TX_DATA) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_StaDisableTx data!!\n")); - Hal_PauseTx(Adapter, HW_DISABLE_TX_DATA); - //ReleaseDataFrameQueued(Adapter); - } - - // set flag to disable tx - pMgntDFS->staMode.bDisableTx = TRUE; -} - -VOID -dfs_StaEnableTx( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_StaEnableTx all!!\n")); - Hal_PauseTx(Adapter, HW_ENABLE_TX_ALL); - pMgntDFS->staMode.bDisableTx = FALSE; -} - -VOID -dfs_StaCsaWorkItemCallback( - IN PVOID Context - ) -{ - PADAPTER Adapter = (PADAPTER)Context; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if(pMgntDFS->staMode.dfsState == DFS_STA_LISTEN) - { - pMgntDFS->staMode.dfsState = DFS_STA_SWITCH; - - dfs_StaDisableTx(Adapter, DFS_DISABLE_TX_DATA); - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_StaCsaWorkItemCallback(), switch chnl to %d\n", - pMgntDFS->staMode.dfsSwitchChannel)); - - pMgntDFS->staMode.dfsOldConnectedChannel = pMgntInfo->dot11CurrentChannelNumber; - - if(pMgntInfo->dot11CurrentChannelNumber != pMgntDFS->staMode.dfsSwitchChannel) - { - pMgntInfo->dot11CurrentChannelNumber = pMgntDFS->staMode.dfsSwitchChannel; - Mgnt_SwChnl(GetDefaultAdapter(Adapter) - ,pMgntInfo->dot11CurrentChannelNumber,2); - } - - pMgntDFS->staMode.dfsSwitchChannel = 0; - - if(DFS_5G_RADAR_CHANNEL(pMgntInfo->dot11CurrentChannelNumber)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_StaCsaWorkItemCallback(), DFS_5G_RADAR_CHANNEL, need to monitor first!!\n")); - pMgntDFS->staMode.bMonitorAfterSwitch = TRUE; - pMgntDFS->staMode.bMonitorAfterSwitchIsDone = FALSE; - pMgntDFS->staMode.dfsMonitorStartTime = PlatformGetCurrentTime(); - } - else - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_StaCsaWorkItemCallback(), Non DFS_5G_RADAR_CHANNEL!!\n")); - dfs_StaEnableTx(Adapter); - } - - pMgntDFS->staMode.dfsState = DFS_STA_LISTEN; - } -} - - -u1Byte -dfs_ApConstructAvaChnlList( - IN PADAPTER Adapter, - OUT pu1Byte plist - ) -{ - PRT_CHANNEL_LIST pChanneList = NULL; - u1Byte total, AvailableNum=0, i; - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChanneList); - total = pChanneList->ChannelLen; - - for(i=0; iChnlListEntry[i].ChannelNum)) - { - *plist = pChanneList->ChnlListEntry[i].ChannelNum; - plist++; - AvailableNum++; - } - } - return AvailableNum; -} - -VOID -dfs_ApRejectChnlListDump( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u1Byte i; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApRejectChnlListDump(), Radar channel list dump : \n")); - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[")); - for(i=0; iapMode.dfsRadarChnl[i].radarChnl != 0) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("%d, ", pMgntDFS->apMode.dfsRadarChnl[i].radarChnl)); - } - } - RT_TRACE( COMP_DFS, DBG_LOUD, ("]\n")); -} - -VOID -dfs_ApInsertRejectChnl( - IN PADAPTER Adapter, - u1Byte Rejectchnl - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u1Byte i; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApInsertRejectChnl(), insert chnl %d to Radar channel list\n", - Rejectchnl)); - - for(i=0; iapMode.dfsRadarChnl[i].radarChnl == 0) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApInsertRejectChnl(), find empty and insert chnl %d to Radar channel list\n", - Rejectchnl)); - pMgntDFS->apMode.dfsRadarChnl[i].radarChnl = Rejectchnl; - pMgntDFS->apMode.dfsRadarChnl[i].rejectTime = PlatformGetCurrentTime(); // in micro-second. - break; - } - else if(pMgntDFS->apMode.dfsRadarChnl[i].radarChnl == Rejectchnl) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApInsertRejectChnl(), chnl %d is already in, update time.\n", - Rejectchnl)); - pMgntDFS->apMode.dfsRadarChnl[i].rejectTime = PlatformGetCurrentTime(); // in micro-second. - break; - } - } - - dfs_ApRejectChnlListDump(Adapter); -} - -VOID -dfs_ApDisableTx( - IN PADAPTER Adapter, - u1Byte type - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if(type == DFS_DISABLE_TX_ALL) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApDisableTx all!!\n")); - Hal_PauseTx(Adapter, HW_DISABLE_TX_ALL); - } - else if(type == DFS_DISABLE_TX_DATA) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApDisableTx data!!\n")); - Hal_PauseTx(Adapter, HW_DISABLE_TX_DATA); - } - - // set flag to disable tx - pMgntDFS->apMode.bDisableTx = TRUE; -} - -VOID -dfs_ApResetRadarDetectCounterAndFlag( - IN PADAPTER Adapter - ) -{ -#if (DFS_TEST_ALARM == 0) - // Clear Radar Counter and Radar flag - PHY_SetBBReg(Adapter, 0xc84, BIT(25), 0); - PHY_SetBBReg(Adapter, 0xc84, BIT(25), 1); - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], After reset radar counter, 0xcf8 = 0x%x, 0xcf4 = 0x%x\n", - PHY_QueryBBReg(Adapter, 0xcf8, bMaskDWord), - PHY_QueryBBReg(Adapter, 0xcf4, bMaskDWord))); -#endif -} - -VOID -dfs_ApResetMonitorState( - IN PADAPTER Adapter, - BOOLEAN bNeedMonitor - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if(bNeedMonitor) - { - pMgntDFS->apMode.bMonitored = FALSE; - } - else - { - pMgntDFS->apMode.bMonitored = TRUE; - } - - pMgntDFS->apMode.monitorStartTime = 0; - pMgntDFS->apMode.dfsState = DFS_AP_DETECTING; - pMgntDFS->apMode.bRadarDetected = FALSE; - pMgntDFS->apMode.dfsSwitchChannel = 0; -} - -VOID -dfs_ApEnableTx( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApEnableTx all!!\n")); - Hal_PauseTx(Adapter, HW_ENABLE_TX_ALL); - pMgntDFS->apMode.bDisableTx = FALSE; -} - -VOID -dfs_ApSwitchChnl( - IN PVOID Context - ) -{ - PADAPTER Adapter = (PADAPTER)Context; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], dfs_ApSwitchChnl(), switch chnl to %d\n", - pMgntDFS->apMode.dfsSwitchChannel)); - - dfs_ApDisableTx(Adapter, DFS_DISABLE_TX_ALL); - - MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(Adapter, pMgntDFS->apMode.dfsSwitchChannel); - AP_Restart(Adapter); -} - -u1Byte -dfs_ApSelectChannel( - IN PADAPTER Adapter - ) -{ - u1Byte num, which_channel=36; - u1Byte aviChnl[MAX_CHANNEL_NUM]={0}; - u1Byte AviNum=0, i; - - AviNum = dfs_ApConstructAvaChnlList(Adapter, aviChnl); - if(AviNum) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], Avi chnl list = [ ")); - for(i=0; iMgntInfo); - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u4Byte radar_detect_val=0, radar_cnt=0; - u4Byte radar_type=0; - - if(!DFS_5G_RADAR_CHANNEL(pMgntInfo->dot11CurrentChannelNumber)) - return; - -#if (DFS_TEST_ALARM == 1)// Trigger one time every DFS_AP_TEST_ALARM_PERIOD - if(pMgntDFS->apMode.testcnt++ >= (DFS_AP_TEST_ALARM_PERIOD*10)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS test alarm!!\n")); - pMgntDFS->apMode.testcnt = 0; - pMgntDFS->apMode.dfsTestAlert = 1; - pMgntDFS->apMode.bRadarDetected = TRUE; - } -#else - // Check radar detect flag. - radar_detect_val = PHY_QueryBBReg(Adapter, 0xcf8, bMaskDWord); - if( (radar_detect_val & BIT31) || - (radar_detect_val & BIT23) ) - { - radar_type = 1; - pMgntDFS->apMode.bRadarDetected = TRUE; - radar_cnt = PHY_QueryBBReg(Adapter, 0xcf4, bMaskDWord); - } -#endif - - if(pMgntDFS->apMode.bRadarDetected) - { - // Only display counters when real radar signal is detected - if(pMgntDFS->apMode.dfsTestAlert) - pMgntDFS->apMode.dfsTestAlert = 0; - - if(radar_type == 1) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], 0xcf8=0x%x, 0xcf4=0x%x !\n", - radar_detect_val, radar_cnt)); - } - - // Set DFS state to send notify beacon. - pMgntDFS->apMode.dfsState = DFS_AP_BECONING; - - dfs_ApDisableTx(Adapter, DFS_DISABLE_TX_DATA); - - ReleaseDataFrameQueued(Adapter); - - // Insert current channel to the reject list. - dfs_ApInsertRejectChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber); - //select a non-DFS channel - pMgntDFS->apMode.dfsSwitchChannel = dfs_ApSelectChannel(Adapter); - - pMgntDFS->apMode.dfsSwitchChCountDown = 5; - - if (pMgntInfo->dot11DtimPeriod >= pMgntDFS->apMode.dfsSwitchChCountDown) - pMgntDFS->apMode.dfsSwitchChCountDown = pMgntInfo->dot11DtimPeriod+1; - - } - else - { // monitor to make sure the channel is available - u8Byte currTime, diffTime; - if(!pMgntDFS->apMode.bMonitored) - { - currTime = PlatformGetCurrentTime(); - if(pMgntDFS->apMode.monitorStartTime == 0) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS monitor started!!\n")); - dfs_ApDisableTx(Adapter, DFS_DISABLE_TX_ALL); - pMgntDFS->apMode.monitorStartTime = currTime; - } - else - { - diffTime = currTime-pMgntDFS->apMode.monitorStartTime; - if(PlatformDivision64(diffTime,1000000) >= DFS_AP_CHNL_MONITOR_TIME) - { - pMgntDFS->apMode.bMonitored = TRUE; - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS monitor finished, enable Tx!!\n")); - dfs_ApEnableTx(Adapter); - } - } - } - else - { - if(pMgntDFS->apMode.bDisableTx) - { - dfs_ApEnableTx(Adapter); - } - } - } -} - -VOID -dfs_ApInitialize( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u1Byte i; - - //============================ - // debug vars - //============================ - pMgntDFS->apMode.testcnt = 0; - pMgntDFS->apMode.dfsTestAlert = 0; - //============================ - - for(i=0; iapMode.dfsRadarChnl[i].radarChnl = 0; - pMgntDFS->apMode.dfsRadarChnl[i].rejectTime = 0; - } - - pMgntDFS->apMode.bRadarDetected = FALSE; - pMgntDFS->apMode.bDisableTx = FALSE; - pMgntDFS->apMode.dfsSwitchChannel = 0; - pMgntDFS->apMode.dfsSwitchChCountDown = 5; - - pMgntDFS->apMode.bMonitored = FALSE; - pMgntDFS->apMode.monitorStartTime = 0; -} - -VOID -dfs_APDFSTimerWorkItemCallback( - IN PVOID Context - ) -{ - PADAPTER Adapter = (PADAPTER)Context; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - switch(pMgntDFS->apMode.dfsState) - { - case DFS_AP_UNINITIALIZED: - RT_TRACE(COMP_DFS, DBG_LOUD, ("[DFS], Uninitialized state, initialize AP Mode!!\n")); - dfs_ApInitialize(Adapter); - pMgntDFS->apMode.dfsState = DFS_AP_INITIALIZED; - break; - - case DFS_AP_INITIALIZED: - RT_TRACE(COMP_DFS, DBG_LOUD, ("[DFS], AP start radar monitor!!\n")); - pMgntDFS->apMode.dfsState = DFS_AP_DETECTING; - break; - - case DFS_AP_DETECTING: - dfs_ApDetecting(Adapter); - break; - - case DFS_AP_BECONING: - // do nothing now. - break; - - case DFS_AP_SWITCH_CHNL: - RT_TRACE(COMP_DFS, DBG_LOUD, ("[DFS], AP switch channel!!\n")); - dfs_ApSwitchChnl(Adapter); - break; - - default: - RT_ASSERT(FALSE, ("AP Unknown state\n")); - break; - } -} - -VOID -dfs_ApDfsTimerCallback( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(!ACTING_AS_AP(Adapter)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], Warning!! dfs_ApDfsTimerCallback(): STA mode\n")); - return; - } - else - { - PlatformScheduleWorkItem(&(pMgntInfo->DFSMgnt.apMode.dfsTimerWorkItem)); - PlatformSetTimer( Adapter, &pMgntInfo->DFSMgnt.apMode.dfsTimer, 100); - } -} - - -//============================================ -// The following is for DFS Extern function, -// start with DFS_*() -//============================================ - -VOID -DFS_Init( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - BOOLEAN bSupportDFS = FALSE; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_SUPPORT_5G, (PBOOLEAN)&bSupportDFS); - if (bSupportDFS) - { - Adapter->DFSSupport = TRUE; -#if(DFS_SUPPORT_AP_MODE == 1) - pMgntDFS->apMode.bDisableDfs = FALSE; -#else - pMgntDFS->apMode.bDisableDfs = TRUE; -#endif - -#if(DFS_SUPPORT_STA_MODE == 1) - pMgntDFS->staMode.bDisableDfs = FALSE; -#else - pMgntDFS->staMode.bDisableDfs = TRUE; -#endif - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], Set support flag=TRUE!!\n")); - } - else - { - Adapter->DFSSupport = FALSE; - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], Set support flag=FALSE!!\n")); - } -} - - -VOID -DFS_TimerContrl( - IN PADAPTER Adapter, - IN UINT8 TimerCtrlType -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if(Adapter->DFSSupport == FALSE) - return; - - if(pMgntDFS->apMode.bDisableDfs) - return; - - // Comment out for compiler type cast warnning on Vista x64 - //RT_TRACE(COMP_DFS, DBG_LOUD, ("[DFS], DFS_TimerContrl(), Adapter=0x%x, type=", (u4Byte)Adapter)); - - switch(TimerCtrlType) - { - case DFS_TIMER_INIT: - RT_TRACE( COMP_DFS, DBG_LOUD, ("Timer initialization for AP mode!!\n")); - PlatformInitializeTimer(Adapter, &(pMgntInfo->DFSMgnt.apMode.dfsTimer), (RT_TIMER_CALL_BACK)dfs_ApDfsTimerCallback, NULL, "DFSTimer"); - break; - - case DFS_TIMER_SET: - RT_TRACE( COMP_DFS, DBG_LOUD, ("Set Timer for AP mode!!\n")); - PlatformSetTimer( Adapter, &pMgntInfo->DFSMgnt.apMode.dfsTimer, 100); - break; - - case DFS_TIMER_CANCEL: - RT_TRACE( COMP_DFS, DBG_LOUD, ("Cancel Timer for AP mode!!\n")); - PlatformCancelTimer(Adapter, &pMgntInfo->DFSMgnt.apMode.dfsTimer); - break; - - case DFS_TIMER_RELEASE: - RT_TRACE( COMP_DFS, DBG_LOUD, ("Release Timer for AP mode!!\n")); - PlatformReleaseTimer(Adapter, &pMgntInfo->DFSMgnt.apMode.dfsTimer); - break; - - default: - RT_ASSERT(FALSE, ("Unknown Action!!\n")); - break; - } -} - -// -// 2010/12/25 MH Gather DFS relative workitem control in the function. -// -VOID -DFS_WorkItemContrl( - IN PADAPTER Adapter, - IN UINT8 WorkItemCtrlType -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if(Adapter->DFSSupport == FALSE) - return; - - // Comment out for compiler type cast warnning on Vista x64 - //RT_TRACE(COMP_DFS, DBG_LOUD, ("[DFS], DFS_WorkItemContrl(), Adapter=0x%x, type=", (u4Byte)Adapter)); - - switch(WorkItemCtrlType) - { - case DFS_WORKITEM_INIT: - if(!pMgntDFS->apMode.bDisableDfs) - { - RT_TRACE(COMP_DFS, DBG_LOUD, ("Workitem initialization for AP mode!!\n")); - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->DFSMgnt.apMode.dfsTimerWorkItem), - (RT_WORKITEM_CALL_BACK)dfs_APDFSTimerWorkItemCallback, - (PVOID)Adapter, - "AP_DFSTimerWorkItem"); - } - if(!pMgntDFS->staMode.bDisableDfs) - { - RT_TRACE(COMP_DFS, DBG_LOUD, ("Workitem initialization for STA mode!!\n")); - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->DFSMgnt.staMode.csaWorkItem), - (RT_WORKITEM_CALL_BACK)dfs_StaCsaWorkItemCallback, - (PVOID)Adapter, - "DFS_CSAWorkItem"); - } - break; - - case DFS_WORKITEM_FREE: - if(!pMgntDFS->apMode.bDisableDfs) - { - RT_TRACE(COMP_DFS, DBG_LOUD, ("Free Workitem for AP mode!!\n")); - PlatformFreeWorkItem(&(pMgntInfo->DFSMgnt.apMode.dfsTimerWorkItem)); - } - if(!pMgntDFS->staMode.bDisableDfs) - { - RT_TRACE(COMP_DFS, DBG_LOUD, ("Free Workitem for STA mode!!\n")); - PlatformFreeWorkItem(&(pMgntInfo->DFSMgnt.staMode.csaWorkItem)); - } - break; - - default: - break; - } -} - -BOOLEAN -DFS_IsTxDisabled( - IN PADAPTER Adapter -) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if (Adapter->DFSSupport == FALSE) - return FALSE; - - if(ACTING_AS_AP(Adapter)) - { - if (!pMgntDFS->apMode.bDisableDfs && - pMgntDFS->apMode.bDisableTx) - { - //RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], N6usbSendNetBufferLists(): AP mode, DFS tx disabled!!!\n")); - return TRUE; - } - } - else - { - if (!pMgntDFS->staMode.bDisableDfs && - pMgntDFS->staMode.bDisableTx) - { - //RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], N6usbSendNetBufferLists(): STA mode, DFS tx disabled!!!\n")); - return TRUE; - } - } - return FALSE; -} - -BOOLEAN -DFS_ApChnlLocked( - IN PADAPTER Adapter, - u1Byte chnl - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u8Byte currTime, diffTime; - u1Byte i; - - if (Adapter->DFSSupport == FALSE) - return FALSE; - - if (pMgntDFS->apMode.bDisableDfs) - return FALSE; - - for(i=0; iapMode.dfsRadarChnl[i].radarChnl == chnl)) - { - currTime = PlatformGetCurrentTime(); - diffTime = currTime - pMgntDFS->apMode.dfsRadarChnl[i].rejectTime; - if(PlatformDivision64(diffTime,1000000) > DFS_AP_NON_OCCUPANCY_PERIOD) - { - pMgntDFS->apMode.dfsRadarChnl[i].radarChnl = 0; - pMgntDFS->apMode.dfsRadarChnl[i].rejectTime = 0; - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_ApChnlLocked(), unlock chnl-%d!!\n", chnl)); - return FALSE; - } - else - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_ApChnlLocked(), chnl-%d is locked, choose another!!\n", chnl)); - return TRUE; - } - } - } - return FALSE; -} - - -VOID -DFS_ApIfNeedMonitorChnl( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if (Adapter->DFSSupport == FALSE) - return; - - if (pMgntDFS->apMode.bDisableDfs) - return; - - if(!ACTING_AS_AP(Adapter)) - return; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_ApIfNeedMonitorChnl()!!\n")); - - dfs_ApResetRadarDetectCounterAndFlag(Adapter); - - if(DFS_5G_RADAR_CHANNEL(pMgntInfo->dot11CurrentChannelNumber)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], chnl %d is a Radar channel, have to monitor first!!\n", - pMgntInfo->dot11CurrentChannelNumber)); - - dfs_ApResetMonitorState(Adapter, TRUE); - dfs_ApDisableTx(Adapter, DFS_DISABLE_TX_ALL); - } - else - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], chnl %d is Not a Radar channel!!\n", - pMgntInfo->dot11CurrentChannelNumber)); - - dfs_ApResetMonitorState(Adapter, FALSE); - dfs_ApEnableTx(Adapter); - } -} - -VOID -DFS_ApConstructBeaconIEcsa( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - OCTET_STRING ChlSwitchAnnounce; - u1Byte ChlSwitchAnnounceBuf[3]; - pu1Byte pbcn; - - if (Adapter->DFSSupport == FALSE) - return; - - if(pMgntDFS->apMode.bDisableDfs) - return; - - if(ACTING_AS_AP(Adapter)) - { - pbcn = pMgntInfo->beaconframe.Octet; - //RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], AP construct beacon!!\n")); - UNION_BEACON_PROBE_RSP_CAPABILITY_INFO(pbcn, cSpectrumMgnt); - - if (pMgntDFS->apMode.bRadarDetected && pMgntDFS->apMode.dfsSwitchChannel) - { - if (pMgntDFS->apMode.dfsSwitchChCountDown) - { - ChlSwitchAnnounceBuf[0] = 1; // channel switch mode - ChlSwitchAnnounceBuf[1] = pMgntDFS->apMode.dfsSwitchChannel; // new channel number - ChlSwitchAnnounceBuf[2] = pMgntDFS->apMode.dfsSwitchChCountDown; // channel switch count - - FillOctetString(ChlSwitchAnnounce, ChlSwitchAnnounceBuf, 3); - PacketMakeElement(&pMgntInfo->beaconframe, EID_ChlSwitchAnnounce, ChlSwitchAnnounce); - - pMgntDFS->apMode.dfsSwitchChCountDown--; - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS counting = %d\n", - pMgntDFS->apMode.dfsSwitchChCountDown)); - - if( pMgntDFS->apMode.dfsSwitchChCountDown == 0 && - pMgntDFS->apMode.dfsState == DFS_AP_BECONING ) - { - pMgntDFS->apMode.dfsState = DFS_AP_SWITCH_CHNL; - } - } - } - } -} - -VOID -DFS_StaInsertToRadarChnlList( - IN PADAPTER Adapter, - u1Byte Radarchnl - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u1Byte i; - - if(Adapter->DFSSupport == FALSE) - return; - - if(pMgntDFS->staMode.bDisableDfs) - return; - - for(i=0; istaMode.dfsRadarChnl[i].radarChnl == 0)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaInsertToRadarChnlList(), insert chnl %d to Radar channel list\n", - Radarchnl)); - pMgntDFS->staMode.dfsRadarChnl[i].radarChnl = Radarchnl; - pMgntDFS->staMode.dfsRadarChnl[i].rxBcnTime = 0; // in micro-second. - break; - } - } -} - -VOID -DFS_StaMgntResetVars( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u1Byte i; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaMgntResetVars()\n")); - - if(Adapter->DFSSupport == FALSE) - return; - - if(pMgntDFS->staMode.bDisableDfs) - return; - - pMgntDFS->staMode.dfsState = DFS_STA_LISTEN; - - for(i=0; istaMode.dfsRadarChnl[i].radarChnl = 0; - pMgntDFS->staMode.dfsRadarChnl[i].rxBcnTime = 0; - } - - pMgntDFS->staMode.bDisableTx = FALSE; - pMgntDFS->staMode.dfsSwitchChannel = 0; - pMgntDFS->staMode.dfsSwitchChCountDown = 0; - pMgntDFS->staMode.bMonitorAfterSwitch = FALSE; - pMgntDFS->staMode.dfsMonitorStartTime = 0; -} - -VOID -DFS_StaCheckCsaInfo( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - - if (Adapter->DFSSupport == FALSE) - return; - - if(pMgntDFS->staMode.bDisableDfs) - return; - - if(pBssDesc->CSA.bWithCSA) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], OnBeacon_Bss(), CSA info, Mode/ Newchnl/ Cnt = %d/ %d/ %d !!!\n", - pBssDesc->CSA.channelSwtichMode, pBssDesc->CSA.NewChnlNum, pBssDesc->CSA.channelSwitchCnt)); - - if(pMgntDFS->staMode.dfsState == DFS_STA_LISTEN) - { - pMgntDFS->staMode.dfsSwitchChannel = pBssDesc->CSA.NewChnlNum; - pMgntDFS->staMode.dfsSwitchChCountDown = pBssDesc->CSA.channelSwitchCnt; - PlatformScheduleWorkItem(&(pMgntInfo->DFSMgnt.staMode.csaWorkItem)); - } - } -} - - -VOID -DFS_StaConstructAssociateReq( - IN PADAPTER Adapter, - IN u2Byte asocCap, - IN OCTET_STRING AsocReq -) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - OCTET_STRING PowerCap; - u1Byte PowerCapConnent[2]; - PRT_CHANNEL_LIST pChannelList; - OCTET_STRING SupportChannelIE; - u1Byte SupportChannelConnent[48]; - u1Byte i=0,j=0; - - if (Adapter->DFSSupport == FALSE) - return; - - if(pMgntDFS->staMode.bDisableDfs) - return; - - //for 11H, add Power Capability. - //For 11H,add Supported Channels element - if(asocCap & BIT8) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaConstructAssociateReq()\n")); - - PowerCapConnent[0]= 0; - PowerCapConnent[1] = 12; - PowerCap.Octet = PowerCapConnent; - PowerCap.Length = 2; - PacketMakeElement( &AsocReq, EID_PowerCap, PowerCap ); - - pChannelList = MgntActQuery_ChannelList(Adapter); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("@@@Channel Plan: ")); - for(i = 0; i < pChannelList->ChannelLen; i ++) - RT_TRACE(COMP_SCAN, DBG_LOUD, (" %d ", pChannelList->ChnlListEntry[i].ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - for(i=0;i < pChannelList->ChannelLen*2;i++) - { - if(i%2 == 0) - SupportChannelConnent[i] = pChannelList->ChnlListEntry[i/2].ChannelNum; - else - SupportChannelConnent[i] = 1; - } - - //FillOctetString(SupportChannelIE, SuppRatesContent, i*2); - SupportChannelIE.Octet = SupportChannelConnent; - SupportChannelIE.Length = i; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("@@@SUpport channel IE: ")); - for(j = 0; j < SupportChannelIE.Length; j++) - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d",SupportChannelIE.Octet[j])); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - PacketMakeElement( &AsocReq, EID_SupportedChannels, SupportChannelIE ); - } - -} - - -VOID -DFS_StaGetValueFromBeacon( - IN PADAPTER Adapter, - IN OCTET_STRING mmpdu, - OUT RT_WLAN_BSS *bssDesc - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - OCTET_STRING ChlSwitchAnnounceInfo; - - if (Adapter->DFSSupport == FALSE) - return; - - if (pMgntDFS->staMode.bDisableDfs) - return; - - ChlSwitchAnnounceInfo = PacketGetElement(mmpdu, EID_ChlSwitchAnnounce, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( ChlSwitchAnnounceInfo.Length != 0) - { - bssDesc->CSA.bWithCSA= TRUE; - bssDesc->CSA.channelSwitchCnt = EF1Byte(*(ChlSwitchAnnounceInfo.Octet+2)); - bssDesc->CSA.NewChnlNum= EF1Byte(*(ChlSwitchAnnounceInfo.Octet+1)); - bssDesc->CSA.channelSwtichMode = EF1Byte(*(ChlSwitchAnnounceInfo.Octet)); - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], GetValueFromBeaconOrProbeRsp(), CSA info, Mode/ Newchnl/ Cnt = %d/ %d/ %d !!!\n", - bssDesc->CSA.channelSwtichMode, bssDesc->CSA.NewChnlNum, bssDesc->CSA.channelSwitchCnt)); - } - else - { - bssDesc->CSA.bWithCSA= FALSE; - bssDesc->CSA.channelSwitchCnt = 0; - bssDesc->CSA.NewChnlNum= 0; - bssDesc->CSA.channelSwtichMode = 0; - } -} - -VOID -DFS_StaMonitor( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u8Byte currTime, diffTime; - - if (Adapter->DFSSupport == FALSE) - return; - - if (pMgntDFS->staMode.bDisableDfs) - return; - - if(ACTING_AS_AP(Adapter)) - return; - - if(pMgntDFS->staMode.bMonitorAfterSwitch) - { - currTime = PlatformGetCurrentTime(); - diffTime = currTime - pMgntDFS->staMode.dfsMonitorStartTime; - - if(PlatformDivision64(diffTime,1000000) <= 3) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaMonitor(), monitor started!!\n")); - } - - if(PlatformDivision64(diffTime,1000000) < DFS_STA_CHNL_MONITOR_TIME) - { - if( Adapter->MgntInfo.LinkDetectInfo.NumRecvBcnInPeriod==0 || - Adapter->MgntInfo.LinkDetectInfo.NumRecvDataInPeriod==0 ) - { - Adapter->MgntInfo.LinkDetectInfo.NumRecvBcnInPeriod = 1; - Adapter->MgntInfo.LinkDetectInfo.NumRecvDataInPeriod= 1; - } - } - else - { - pMgntDFS->staMode.bMonitorAfterSwitch = FALSE; - pMgntDFS->staMode.bMonitorAfterSwitchIsDone = TRUE; - dfs_StaEnableTx(Adapter); - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaMonitor(), monitor is finished, over %d seconds!!\n", - DFS_STA_CHNL_MONITOR_TIME)); - } - } -} - - - -VOID -DFS_StaCheckRadarChnl( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pbssdesc -) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - u1Byte i, chnl=0; - - if (Adapter->DFSSupport == FALSE) - return; - - if (pMgntDFS->staMode.bDisableDfs) - return; - -#if (DFS_CLIENT_PASSIVE_SCAN_ONLY == 1) - return; -#endif - - chnl = pbssdesc->ChannelNumber; - - if(!DFS_5G_RADAR_CHANNEL(chnl)) - return; - - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaCheckRadarChnl(), rx beacon, channel = %d!!\n", - pbssdesc->ChannelNumber)); - - if(pbssdesc->CSA.bWithCSA) - { - // Beacon with Channel Switch Annouence, set rx beacon time = 0. - // We take it as the Radar signal is detected in the channel. - // Update the rx beacon time. - for(i=0; istaMode.dfsRadarChnl[i].radarChnl == chnl) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaCheckRadarChnl(), CSA beacon, set rx beacon time = 0 at channel = %d!!\n", - chnl)); - pMgntDFS->staMode.dfsRadarChnl[i].rxBcnTime = 0; - } - } - } - else - { - // Update the rx beacon time. - for(i=0; istaMode.dfsRadarChnl[i].radarChnl == chnl) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaCheckRadarChnl(), update rx beacon time at channel = %d!!\n", - chnl)); - pMgntDFS->staMode.dfsRadarChnl[i].rxBcnTime = PlatformGetCurrentTime(); - } - } - } - -} - - -VOID -DFS_StaUpdateRadarChnlScanType( - IN PADAPTER Adapter - ) -{ - PDFS_MGNT pMgntDFS = &Adapter->MgntInfo.DFSMgnt; - PRT_CHANNEL_LIST pChanneList = NULL; - u8Byte currTime, diffTime; - u2Byte i, j; - u1Byte radarChnl, ch_idx=0xff; - - if (Adapter->DFSSupport == FALSE) - return; - - if (pMgntDFS->staMode.bDisableDfs) - return; - -#if (DFS_CLIENT_PASSIVE_SCAN_ONLY == 1) - return; -#endif - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChanneList); - - currTime = PlatformGetCurrentTime(); - for(i=0; istaMode.dfsRadarChnl[i].rxBcnTime) - { - radarChnl = pMgntDFS->staMode.dfsRadarChnl[i].radarChnl; - diffTime = currTime - pMgntDFS->staMode.dfsRadarChnl[i].rxBcnTime; - - for(j=0; jChannelLen; j++) - { - if(pChanneList->ChnlListEntry[j].ChannelNum == radarChnl) - { - ch_idx = (u1Byte)j; - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaUpdateRadarChnlScanType(), find channel-%d in channel plan!!", - radarChnl)); - break; - } - } - if(ch_idx == 0xff) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("[DFS], DFS_StaUpdateRadarChnlScanType(), channel-%d NOT found in channel plan!!\n", - radarChnl)); - return; - } - - if(PlatformDivision64(diffTime,1000000) < DFS_STA_CHNL_SCAN_TYPE_MONITOR_TIME) - { - RT_TRACE( COMP_DFS, DBG_LOUD, (" and set to Active scan!!\n")); - pChanneList->ChnlListEntry[ch_idx].ScanType = SCAN_ACTIVE; - } - else - { - RT_TRACE( COMP_DFS, DBG_LOUD, (" and set to Passive scan!!\n")); - pChanneList->ChnlListEntry[ch_idx].ScanType = SCAN_PASSIVE; - } - } - } - -} - -#endif - -/* End of DFS.c */ - diff --git a/network/wlan/WDI/COMMON/DFS.h b/network/wlan/WDI/COMMON/DFS.h deleted file mode 100644 index e7719c31..00000000 --- a/network/wlan/WDI/COMMON/DFS.h +++ /dev/null @@ -1,249 +0,0 @@ -/***************************************************************************** - * Copyright 2010, RealTEK Technology Inc. All Right Reserved. - * - * Module: DFS.h (RTL8190 Header H File) - * - * - * Note: Declare some variable which will be used by any debug command. - * - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * ??/??/2010 Cosa Create initial version in different filed. - * 12/23/2010 MHC Gather the code from other source files. - * - *****************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __DFS_H__ -#define __DFS_H__ - -/*--------------------------Define Parameters-------------------------------*/ -//=============================================== -// DFS related definition -//=============================================== -#if (DFS_SUPPORT == 1) - -#if 1//real radar chnl -#define DFS_5G_RADAR_CHANNEL(__channel) \ - ((__channel >= 50 && __channel <= 70) ||\ - (__channel >= 94 && __channel <= 145)) -#else//test radar chnl -#define DFS_5G_RADAR_CHANNEL(__channel) \ - (__channel >= 40 && __channel <= 60) -#endif - -#define DFS_DEFAULT_NON_RADAR_CHNL 40 - -#define DFS_TEST_ALARM 1 // enable test alarm -#define DFS_AP_TEST_ALARM_PERIOD 50 //sec -#define DFS_CLIENT_PASSIVE_SCAN_ONLY 1 - -#define DFS_MAX_RADAR_CHNL_NUM 30 -//#define DFS_STA_CHNL_MONITOR_TIME 10 //sec -#define DFS_STA_CHNL_MONITOR_TIME 60 //sec -#define DFS_STA_CHNL_SCAN_TYPE_MONITOR_TIME (10-2) //sec -#define DFS_AP_NON_OCCUPANCY_PERIOD (30*60) //sec -#define DFS_AP_CHNL_MONITOR_TIME 20 //sec - -#define DFS_DISABLE_TX_ALL 0 -#define DFS_DISABLE_TX_DATA 1 -#define DFS_TEST_CHNL_PLAN 0 - -typedef enum _DFS_STATE_AP -{ - DFS_AP_UNINITIALIZED = 0, - DFS_AP_INITIALIZED = 1, - DFS_AP_DETECTING = 2, - DFS_AP_BECONING = 3, - DFS_AP_SWITCH_CHNL = 4, - DFS_AP_MAX = 5, -} DFS_STATE_AP, *PDFS_STATE_AP; - -typedef enum _DFS_STATE_STA -{ - DFS_STA_LISTEN = 0, - DFS_STA_SWITCH = 1, - DFS_STA_MAX = 2, -} DFS_STATE_STA, *PDFS_STATE_STA; - -typedef struct _DFS_RADAR_CHNL_AP{ - u1Byte radarChnl; - u8Byte rejectTime; -}DFS_RADAR_CHNL_AP, *PDFS_RADAR_CHNL_AP; - -typedef struct _DFS_RADAR_CHNL_STA{ - u1Byte radarChnl; - u8Byte rxBcnTime; -}DFS_RADAR_CHNL_STA, *PDFS_RADAR_CHNL_STA; - -typedef struct _DFS_MGNT_AP{ -//========================== - u4Byte testcnt; -//========================== - BOOLEAN bDisableDfs; - DFS_STATE_AP dfsState; - DFS_RADAR_CHNL_AP dfsRadarChnl[DFS_MAX_RADAR_CHNL_NUM]; - u1Byte dfsTestAlert; - BOOLEAN bRadarDetected; - BOOLEAN bDisableTx; - u1Byte dfsSwitchChannel; - u1Byte dfsSwitchChCountDown; - BOOLEAN bMonitored; - u8Byte monitorStartTime; - // Timer & WorkItem - RT_TIMER dfsTimer; - RT_WORK_ITEM dfsTimerWorkItem; -}DFS_MGNT_AP, *PDFS_MGNT_AP; - -typedef struct _DFS_MGNT_STA{ - BOOLEAN bDisableDfs; - DFS_STATE_STA dfsState; - DFS_RADAR_CHNL_STA dfsRadarChnl[DFS_MAX_RADAR_CHNL_NUM]; - BOOLEAN bDisableTx; - u1Byte dfsSwitchChannel; - u1Byte dfsSwitchChCountDown; - u1Byte dfsOldConnectedChannel; - BOOLEAN bMonitorAfterSwitchIsDone; - BOOLEAN bMonitorAfterSwitch; - u8Byte dfsMonitorStartTime; - RT_WORK_ITEM csaWorkItem; -}DFS_MGNT_STA, *PDFS_MGNT_STA; - -typedef struct _DFS_MGNT{ - DFS_MGNT_AP apMode; - DFS_MGNT_STA staMode; -}DFS_MGNT, *PDFS_MGNT; -//=============================================== -typedef enum _DFS_TIMER_CTRL_TYPE -{ - DFS_TIMER_INIT = 0, - DFS_TIMER_SET, - DFS_TIMER_CANCEL, - DFS_TIMER_RELEASE, - DFS_TIMER_MAX -}DFS_TIMER_CTRL_TYPE; - -// 2010/12/27 MH Add for DFS workitem control. -typedef enum _DFS_WORKITEM_CTRL_TYPE -{ - DFS_WORKITEM_INIT = 0, - DFS_WORKITEM_SET, - DFS_WORKITEM_CANCEL, - DFS_WORKITEM_FREE, - DFS_WORKITEM_MAX -}DFS_WORKITEM_CTRL_TYPE; - -VOID -DFS_Init( - IN PADAPTER Adapter -); - -VOID -DFS_TimerContrl( - IN PADAPTER Adapter, - IN UINT8 TimerCtrlType -); - -VOID -DFS_WorkItemContrl( - IN PADAPTER Adapter, - IN UINT8 WorkItemCtrlType -); - -BOOLEAN -DFS_IsTxDisabled( - IN PADAPTER Adapter -); - -VOID -DFS_ApIfNeedMonitorChnl( - IN PADAPTER Adapter -); - -VOID -DFS_ApConstructBeaconIEcsa( - IN PADAPTER Adapter -); - -BOOLEAN -DFS_ApChnlLocked( - IN PADAPTER Adapter, - u1Byte chnl - ); - -VOID -DFS_StaInsertToRadarChnlList( - IN PADAPTER Adapter, - u1Byte Radarchnl - ); - -VOID -DFS_StaMgntResetVars( - IN PADAPTER Adapter - ); - -VOID -DFS_StaCheckCsaInfo( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc -); - -VOID -DFS_StaConstructAssociateReq( - IN PADAPTER Adapter, - IN u2Byte asocCap, - IN OCTET_STRING AsocReq -); - -VOID -DFS_StaGetValueFromBeacon( - IN PADAPTER Adapter, - IN OCTET_STRING mmpdu, - OUT RT_WLAN_BSS *bssDesc - ); - -VOID -DFS_StaMonitor( - IN PADAPTER Adapter - ); - -VOID -DFS_StaCheckRadarChnl( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pbssdesc -); - -VOID -DFS_StaUpdateRadarChnlScanType( - IN PADAPTER Adapter - ); - -#else // #if (DFS_SUPPORT == 1) - -#define DFS_MGNT u1Byte -#define DFS_5G_RADAR_CHANNEL(__channel) (FALSE) - -#define DFS_Init(Adapter) -#define DFS_TimerContrl(Adapter, TimerCtrlType) -#define DFS_WorkItemContrl(Adapter, WorkItemCtrlType) -#define DFS_IsTxDisabled(Adapter) FALSE -#define DFS_ApIfNeedMonitorChnl(Adapter) -#define DFS_ApConstructBeaconIEcsa(Adapter) -#define DFS_ApChnlLocked(Adapter, chnl) FALSE -#define DFS_StaInsertToRadarChnlList(Adapter, Radarchnl) -#define DFS_StaMgntResetVars(Adapter) -#define DFS_StaGetValueFromBeacon(Adapter, mmpdu, bssDesc) -#define DFS_StaCheckCsaInfo(Adapter, pBssDesc) -#define DFS_StaConstructAssociateReq(Adapter, asocCap, AsocReq) -#define DFS_StaMonitor(Adapter) -#define DFS_StaCheckRadarChnl(Adapter, pbssdesc) -#define DFS_StaUpdateRadarChnlScanType(Adapter) -#endif // #if (DFS_SUPPORT == 1) - - -#endif // __DFS_H__ - diff --git a/network/wlan/WDI/COMMON/DbgCmd.h b/network/wlan/WDI/COMMON/DbgCmd.h deleted file mode 100644 index 04a6baaf..00000000 --- a/network/wlan/WDI/COMMON/DbgCmd.h +++ /dev/null @@ -1,306 +0,0 @@ - -#include "..\PLATFORM\svn_version.h" - -/***************************************************************************** - * Copyright 2007, RealTEK Technology Inc. All Right Reserved. - * - * Module: DbgCmd.h (RTL8190 Header H File) - * - * - * Note: Declare some variable which will be used by any debug command. - * - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * 08/01/2007 MHC Create initial version. - * 08/02/2007 MHC Because some variable use strcure defined in HAL - * relative header files. We must copy the structure to - * pass all NIC's source files in common directory. - * - *****************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __DBG_CMD_H__ -#define __DBG_CMD_H__ - -#if (DBG_CMD == 1) -/*--------------------------Define Parameters-------------------------------*/ -// For test sequeence -#define VERA_LOCAL_BUF_NUM 0 - - -#define VERA_ALL_QUEUE 0xFF -#define VERA_ALL_TXRATE 0xFF -#define VERA_RANDOM_TXPKTLEN 0xFF -#define VERA_MAX_TXPKTLEN 500 -/*--------------------------Define Parameters-------------------------------*/ - - -/*------------------------------Define structure----------------------------*/ -/* 2007/08/02 MH The structure must be the same with _TX_FWINFO_8190PCI */ - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _TX_FWINFO_STRUCUTRE{ - //DOWRD 0 - u1Byte TxRate:7; - u1Byte CtsEnable:1; - u1Byte RtsRate:7; - u1Byte RtsEnable:1; - u1Byte TxHT:1; - u1Byte Short:1; - u1Byte TxBandwidth:1; - u1Byte TxSubCarrier:2; - u1Byte STBC:2; - u1Byte AllowAggregation:1; - u1Byte RtsHT:1; - u1Byte RtsShort:1; - u1Byte RtsBandwidth:1; - u1Byte RtsSubcarrier:2; - u1Byte RtsSTBC:2; - u1Byte EnableCPUDur:1; - - //DWORD 1 - u4Byte RxMF:2; - u4Byte RxAMD:3; - u4Byte Reserved1:3; - u4Byte TxAGCOffset:4; - u4Byte TxAGCSign:1; - u4Byte Tx_INFO_RSVD:6; - u4Byte PacketID:13; -}TX_FWINFO_T; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -/* 2007/07/31 MH Define ISR time structure. */ -typedef struct tag_Dbg_Cmd_Interrupt_Service_Time_Count_Structure -{ - u8Byte enter_time; - u8Byte exit_time; - u8Byte delta_time; - u8Byte max_time; - u8Byte min_time; - /*u4Byte enter_time; - u4Byte exit_time; - u4Byte delta_time; - u4Byte max_time; - u4Byte min_time;*/ -}ISR_TIME_T; - -typedef enum tag_Interrupt_Service_Type_Definition -{ - ISR_ALL = 0, - ISR_TX, - ISR_RX, - ISR_NUM_MAX, - ISR_MP_SEND_PACKET, - ISR_MP_RETURN_PACKET, - ISR_MP_CHK_FOR_HANG, - -}ISR_TYPE_E; - -typedef enum tag_Interrupt_Service_Action_Type_Definition -{ - ISR_ENTER = 0, - ISR_EXIT -}ISR_ACTION_TYPE_E; - - -/* 2008/05/22 MH Define for verification console. */ -typedef struct tag_Dbg_Verification_Console_Structure -{ - u1Byte TxRate; - u1Byte TxQueue; - u2Byte TxPktCnt; - u2Byte TxPktLength; - u4Byte TransPktNum; -}VERA_CONSOLE_T; - - - -// Byte[0] BIT7 in Frame Control is reserved for QoS. Added by Annie, 2005-12-02. -#define FC_QOS_BIT BIT7 - -// Byte[0] BIT6 in Frame Control seems to be reserved for "No Data". Added by Annie, 2006-01-06. -#define FC_NO_DATA_BIT BIT6 - - -// 2008/06/23 Collect all debug variable in the same structure. -typedef struct _DEBUG_CONSOLE_VAIABLE_STRUCTURE{ - - // For verficacion consolt statistic. - BOOLEAN bBurstMode; - u4Byte TxPktCnt, RxPktCnt; - - // For redefine TX queue for non-QoS - u1Byte DBG_Tx_Que; - - // --------Use to displat TX/RX DESC/DATA-------- - u1Byte DBG_Tx_Desc_Display; - u1Byte DBG_Tx_Data_Display; - u1Byte DBG_Rx_Desc_Display; - u1Byte DBG_Rx_Data_Display; - u1Byte DBG_Rx_TID; - - - // --------Use to estimate driver handle NDIS packet time-------- - // Used to capture the maximum TX DMA pollin range - u1Byte DBG_DmaPollCapStart; - u4Byte DBG_DmaPollRangeMax; - - // Capture the time when we receve upper later packet until the last polling packet. - u4Byte DBG_MpSendRange; - u4Byte DBG_MpSendStart; - u4Byte DBG_MpSendNum; - u4Byte DBG_MpSendEnd; - u4Byte DBG_MpcaptureFlag; - - // Capture the max time range from MP sned to inser polling - u4Byte DBG_MpPollCapStart; - u4Byte DBG_MpPollRangeMax; - - // --------Use to switch debug print or not-------- - // Display current beacom interrupt number from MAC - u4Byte DBG_Beacon_Cnt; - - // --------Use to switch TX Descriptor content-------- - // Change AMPDU type - u4Byte DBG_AMPDUType; - // Default bandwidth type - u4Byte DBG_BWType; - - // --------Use to control to send MGNT frame or not-------- - // Default not to stop beacon frame - u4Byte DBG_Beacon_Stop; - // Control Probe req TX - u4Byte DBG_ProbeReq_Send; - - // --------Use to switch or display RX Descriptor content-------- - // Control to print RX DESC BUF ADDR - u4Byte DBG_RxDescBuffAddr; - - // Collect MP send packet and complete NDIS packet number - u4Byte DBG_MpTxCnt; - u4Byte DBG_MpTxCompleteCnt; - - - // Check RFD memory sapce to check if it is modified incorrectlly - VIRTUAL_MEMORY PseudoRfd; - - // Print some debug info - u4Byte DbgPrintIsr; - - // For 92SE reset test to stop TX process. - u4Byte ResetStop; - - // Force to change TID for different AC queue - u1Byte UserSwitchTid; - u1Byte UserForceTid; - u1Byte UserForceQue; - - // Fragmentation debug structure!! - u1Byte pSenderAddr[4]; - u1Byte TID[4]; - u2Byte SeqNum[4]; - u1Byte FragNum[4]; - BOOLEAN bMoreFrag[4]; - u1Byte bEncrypted[4]; - u1Byte DeFragBuf[4][500]; - u1Byte DeFragAllBuf[2000]; - - // --------Use to debug c2h handling-------- - u4Byte c2hInterruptCnt; - u4Byte c2hClrReadC2hCnt; - u4Byte c2hNotReadyCnt; - u4Byte c2hBufAlloFailCnt; - u4Byte c2hPacketCnt; -}DBG_VAR_T, *PDBG_VAR_T; - - - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ - -extern DBG_VAR_T DBG_Var; - - -/* 2007/07/16 MH For test, declare a global variable to record peer bbeacon. */ -extern RT_WLAN_BSS Peer_bssDesc; -/* 2007/07/25 MH Only 819x support TX FW info now. */ -extern TX_FWINFO_T Tmp_TxFwInfo; -/* 2007/07/31 MH Define debug global variable as below. */ -extern ISR_TIME_T ISR_TimeTbl[ISR_NUM_MAX]; - -#if 1// -// For 8192S debug, we must remove to proper position later -extern u2Byte DBG_Tx_Desc_Idx[MAX_TX_QUEUE]; -extern u1Byte DBG_Tx_Data[10000]; -extern u1Byte DBG_Tx_Beacon[512]; -extern u4Byte DBG_Tx_BeaconLen; -extern u1Byte DBG_Rx_Beacon[512]; -extern u4Byte DBG_Rx_BeaconLen; -extern u4Byte DBG_Tx_Data_Index; -extern u1Byte DBG_Tx_Data_Ring[10][1000]; -extern u1Byte DBG_Rx_Data[10000]; - - -#endif -/*------------------------Export global variable----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ -extern void DBG_ConsoleInitialize();// PADAPTER pAdapter); - -extern void DBG_RecordSvnVersion(); - -extern void DBG_IsrTimeCapture( PADAPTER pAdapter, - u1Byte Isr_Type, - u1Byte Isr_Action); -extern void DBG_IsrTimeClear( void); -extern void DBG_IsrTimeDisplay( void); - -extern VOID DBG_Verify_Console( IN PVOID pContext ); -extern VOID DBG_Vera_Input( IN VERA_CONSOLE_T *pTdata ); - -extern VOID DBG_Display_Tx_Data(void); - -extern VOID DBG_FreeTCBs( PADAPTER Adapter ); -extern void DBG_CaptureDmaPollRange( PADAPTER Adapter); -extern void DBG_CaptureMpPollRange( PADAPTER Adapter); -extern void DBG_ChkDrvResource( PADAPTER Adapter); - -/*--------------------------Exported Function prototype---------------------*/ - -#else /* #if DBG_CMD */ -#define DBG_ConsoleInitialize() -#define DBG_IsrTimeCapture(pAdapter, Isr_Type, Isr_Action) -#define DBG_IsrTimeClear() -#define DBG_IsrTimeDisplay() -#define DBG_Verify_Console(pContext) -#define DBG_Vera_Input(pTdata) -#define DBG_Display_Tx_Data() -#define DBG_RateChangeCallBack(pTimer) -#define DBG_FreeTCBs(Adapter) -#define DBG_CaptureDmaPollRange(Adapter) -#define DBG_CaptureMpPollRange(Adapter) -#define DBG_ChkDrvResource(Adapter) - -#endif /* else of #if DBG_CMD */ -#endif /* __DBG_CMD_H__ */ - - -/* End of DbgCmd.h */ diff --git a/network/wlan/WDI/COMMON/DbgMon.h b/network/wlan/WDI/COMMON/DbgMon.h deleted file mode 100644 index fca99e03..00000000 --- a/network/wlan/WDI/COMMON/DbgMon.h +++ /dev/null @@ -1,271 +0,0 @@ -#ifndef __DBG_MON_H__ -#define __DBG_MON_H__ - -#define RT_SPRINTF rsprintf -#define RT_PRINT(_MSG_) EXdbgmon_Print(_MSG_) - -#define DBGM_CLI_BUF_SIZE 100 - -// OUTPUT DIRECTION -#define DBGM_OUT_WPP BIT0 -#define DBGM_OUT_CLI BIT1 - - -#define DBGM_COMP_WIFI_BASIC BIT0 -#define DBGM_COMP_NDIS BIT1 -#define DBGM_COMP_TX_INFO BIT2 -#define DBGM_COMP_RX_INFO BIT3 -#define DBGM_COMP_RX_RATE BIT4 -#define DBGM_COMP_BT_COEX BIT5 -#define DBGM_COMP_BT_HS BIT6 -#define DBGM_COMP_BT_HCI BIT7 -#define DBGM_COMP_WOL BIT8 -#define DBGM_COMP_PWR_SVG BIT9 -#define DBGM_COMP_ANTDET_INFO BIT10 -#define DBGM_COMP_SKU BIT11 -#define DBGM_COMP_DYN_TXPWR_LOAD BIT12 -#define DBGM_COMP_CHANNELPLAN BIT13 -#define DBGM_COMP_TX_RATE BIT14 -#define DBGM_COMP_TXPWR_DUMP BIT15 - - - -#define MAX_WOL_DBG_REG_NUM 20 - -typedef enum _DBGM_CALLER_{ - DBGM_CALLER_DBG_CMD = 0x0, - DBGM_CALLER_AUTO = 0x1, - DBGM_CALLER_MAX -}DBGM_CALLER,*PDBGM_CALLER; - - -typedef enum _DBGM_WIFI_BW_MODE{ - DBGM_WIFI_BW_LEGACY = 0x0, - DBGM_WIFI_BW_HT20 = 0x1, - DBGM_WIFI_BW_HT40 = 0x2, - DBGM_WIFI_BW_HT80 = 0x3, - DBGM_WIFI_BW_HT160 = 0x4, - DBGM_WIFI_BW_MAX -}DBGM_WIFI_BW_MODE,*PDBGM_WIFI_BW_MODE; - -typedef enum _DBGM_WIFI_TRAFFIC_DIR{ - DBGM_WIFI_TRAFFIC_TX = 0x0, - DBGM_WIFI_TRAFFIC_RX = 0x1, - DBGM_WIFI_TRAFFIC_MAX -}DBGM_WIFI_TRAFFIC_DIR,*PDBGM_WIFI_TRAFFIC_DIR; - -typedef enum _DBGM_PWR_MODE_{ - DBGM_PWR_DC_MODE = 0x0, - DBGM_PWR_AC_MODE = 0x1, - DBGM_PWR_MODE_MAX -}DBGM_PWR_MODE,*PDBGM_PWR_MODE; - -typedef enum _DBGM_WIFI_FREQ_{ - DBGM_WIFI_FREQ_24G = 0x0, - DBGM_WIFI_FREQ_5G = 0x1, - DBGM_WIFI_FREQ_MAX -}DBGM_WIFI_FREQ,*PDBGM_WIFI_FREQ; - - -typedef struct _DBGM_BASIC_WIFI_INFO_{ - u2Byte vid; - u2Byte did; - u2Byte svid; - u2Byte smid; - u1Byte customerId; - u1Byte macAddr[6]; - - u2Byte apNum; - u1Byte chnl; - u4Byte bandwidth; - u1Byte freq; - s4Byte rssi; - u1Byte channelPlan; - u1Byte regulation_24G; - u1Byte regulation_5G; - u4Byte odmAbility; - u1Byte regAdaptivity; - - BOOLEAN bScanProcess; - BOOLEAN bLinkProcess; - BOOLEAN bRoamProcess; - BOOLEAN bStaConnected; - BOOLEAN bApConnected; - BOOLEAN bBtHsConnected; - BOOLEAN bP2pConnected; - - u1Byte portActivated[5]; - BOOLEAN bWifiFwLoaded; - u4Byte wifiFwVer; - u1Byte wifiFwLoadType; - - // traffic - BOOLEAN bWifiBusy; - u1Byte wifiTrafficDir; - - BOOLEAN bBtExist; - BOOLEAN bBtStackNotified; - u2Byte hciVer; - - // power save related - BOOLEAN powerMode; //AC/DC mode - u1Byte regIpsMode; - u1Byte regLpsMode; - BOOLEAN bRegLowPowerEnable; - BOOLEAN bInactivePs; - BOOLEAN bLeisurePs; - BOOLEAN bLowPowerEnable; - BOOLEAN bUnderIps; - BOOLEAN bUnderLps; - BOOLEAN bLowPower; // 32k low power - BOOLEAN bWowlanLPS; - BOOLEAN bWowlan32k; - - // ap type info - u1Byte apType; - u4Byte numTxBcnOk; - u4Byte numTxBcnErr; - u4Byte numTxBcnUpdate; - - // connection debug control - BOOLEAN bFixBssid; - u1Byte fixedBssid[6]; -} DBGM_BASIC_WIFI_INFO, *PDBGM_BASIC_WIFI_INFO; - -typedef struct _DBGM_TX_INFO_{ - u4Byte numTxInterrupt; - u4Byte wrongrwTxpointerCnt; - u4Byte numIdleTcb; -} DBGM_TX_INFO, *PDBGM_TX_INFO; - -typedef struct _DBGM_RX_INFO_{ - u4Byte numRxInterrupt; - u1Byte rxReorderPendTime; - u2Byte regRxReorderPendTime; - u4Byte rxBeaconNum; - u4Byte cntOfdmCca; - u4Byte cntCckCca; - u4Byte cntOfdmFail; - u4Byte cntCckFail; - u4Byte rxReorderIndEnterCnt; - u4Byte rxReorderIndAllowCnt; - u4Byte rxReorderIndRejectCnt[3]; -} DBGM_RX_INFO, *PDBGM_RX_INFO; - -typedef struct _DBGM_WOL_INFO_{ - BOOLEAN bPowerOn; - BOOLEAN bWolFWReady; - u2Byte WolFwVer; - u2Byte WolFwSubVer; - BOOLEAN bARPOffload; - BOOLEAN bNSOffload; - BOOLEAN bGTKOffload; - BOOLEAN bRegARPOffload; - BOOLEAN bRegNSOffload; - BOOLEAN bRegGTKOffload; - BOOLEAN bPtlOffload; - u1Byte WoLPatternNum; - u1Byte WoLPktNoPtnNum; - BOOLEAN bDownloadWoWLANFWOK; - BOOLEAN bEnterWoWLANLPS; - BOOLEAN bEnterDxIPS; - BOOLEAN bRegPnpKeepLink; - BOOLEAN bPerformPnpReconnect; - - // Security info - u4Byte GroupEnAlgo; - u8Byte PreTxIV; - u8Byte PreKeyRelayCounter; - - // NLO related info - BOOLEAN bDxNLOEnable; - u1Byte NLONumberSetToFw; - u4Byte NLOFastScanPeriod; - u4Byte NLOFastScanIterations; - u4Byte NLOSlowScanPeriod; - RT_OFFLOAD_NETWORK OffloadNetworkList[NATIVE_802_11_MAX_NETWORKOFFLOAD_SIZE]; - - // Wake up reason and counter - u1Byte cntRxDescPtn; - u1Byte cntRxDescMgc; - u1Byte cntRxDescUct; - u1Byte wakeUpReason[25]; - u4Byte WakeByWoLEventCnt; - u4Byte WakeByUnknownReasonCnt; - - // PNP sleep/wake related info. - u4Byte PnpSleepEnterD2Cnt; - u4Byte PnpSleepEnterD3Cnt; - u4Byte PnpSleepEnterUnknownDxCnt; - u4Byte PnpSleepDxTotalCnt; - u4Byte PnpWakeD0Cnt; - u8Byte LastPnpSleepTime; - u8Byte LastPnpWakeTime; - - // AOAC report - RT_AOAC_REPORT AOACReport; - - // HW debug registers - HW_REG_VALUE WoLMacReg[MAX_WOL_DBG_REG_NUM]; -} DBGM_WOL_INFO, *PDBGM_WOL_INFO; - -// RT DEBUG CONTROL -typedef struct _RT_DBG_MON_{ - u1Byte outDirection; // control output to WPP or CLI. - u4Byte outComponents; // what components we need to output - - DBGM_BASIC_WIFI_INFO basicWifiInfo; // basic wifi information - DBGM_TX_INFO txInfo; // tx info - DBGM_RX_INFO rxInfo; // rx info - DBGM_WOL_INFO wolInfo; // WoWLAN info -} RT_DBG_MON, *PRT_DBG_MON; - -extern const char *const rateStr[]; - -VOID -EXdbgmon_ClearWolInfo( - ); -VOID -EXdbgmon_Print( - const char *pMsg - ); -VOID -EXdbgmon_SetOutComponents( - u4Byte outCompBitsDefine - ); - -VOID -EXdbgmon_SetWolCntRxDesc( - IN u1Byte WakeType - ); - -VOID -EXdbgmon_GetWolBeforeSleepInfo( - IN PADAPTER Adapter - ); - -VOID -EXdbgmon_GetWolPowerInfo( - IN PADAPTER Adapter, - IN BOOLEAN bPowerOn - ); - -VOID -EXdbgmon_GetWolWakeReasonInfo( - IN PADAPTER Adapter - ); - -VOID -EXdbgmon_ShowInfo( - IN PADAPTER Adapter, - IN u1Byte caller, - IN u4Byte showType - ); -VOID -EXdbgmon_AutoCollectStatisticsInfo( - IN PADAPTER Adapter - ); - - - -#endif /* __DBG_MON_H__ */ diff --git a/network/wlan/WDI/COMMON/Debug.c b/network/wlan/WDI/COMMON/Debug.c deleted file mode 100644 index 81bca9d6..00000000 --- a/network/wlan/WDI/COMMON/Debug.c +++ /dev/null @@ -1,455 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Debug.tmh" -#endif - -u4Byte GlobalDebugLevel = DBG_LOUD; -// -// 2009/06/22 MH Allow Fre build to print none debug info at init time. -// -#if DBG -u8Byte GlobalDebugComponents = \ -// COMP_DBG | -// COMP_INIT | -// COMP_OID_QUERY | -// COMP_OID_SET | -// COMP_RECV | -// COMP_SEND | -// COMP_IO | -// COMP_POWER | -// COMP_MLME | -// COMP_SCAN | -// COMP_SYSTEM | -// COMP_SEC | -// COMP_AP | -// COMP_QOS | -// COMP_AUTHENTICATOR | -// COMP_BEACON | -// COMP_WFD | -// COMP_RM | -// COMP_MP | -// COMP_CKIP | -// COMP_RSNA | -// COMP_INDIC | -// COMP_LED | -// COMP_RF | -// COMP_DUALMACSWITCH | -// COMP_EASY_CONCURRENT | - -//1!!!!!!!!!!!!!!!!!!!!!!!!!!! -//1//1Attention Please!!!<11n or 8190 specific code should be put below this line> -//1!!!!!!!!!!!!!!!!!!!!!!!!!!! - -// COMP_HT | -// COMP_POWER_TRACKING | -// COMP_RX_REORDER | -// COMP_AMSDU | -// COMP_WPS | -// COMP_CMD | -// COMP_EFUSE | -// COMP_CCX | -// COMP_IOCTL | -// COMP_P2P | -// COMP_TDLS | -// COMP_OMNIPEEK | -// COMP_MULTICHANNEL | -// COMP_DFS | -// COMP_TEST | -// COMP_TXPWR | -// COMP_HAL_MAC_API | -// COMP_NAN | - 0; - -u4Byte GLDebugComponents = \ -// COMP_DBG_MON | -// COMP_TX_HANG | -// COMP_RX_HANG | - 0; - -u4Byte HalMacDebugComponents = \ -// COMP_HALMAC_MSG_INIT | -// COMP_HALMAC_MSG_EFUSE | -// COMP_HALMAC_MSG_FW | -// COMP_HALMAC_MSG_H2C | -// COMP_HALMAC_MSG_PWR | - 0; -#else -u8Byte GlobalDebugComponents = 0; -u4Byte GLDebugComponents = 0; -u4Byte HalMacDebugComponents = 0; -#endif - - -/*------------------Declare variable----------------------- -// Define debug flag array for common debug print macro. */ -UINT32 DBGP_Type[DBGP_TYPE_MAX]; - -/* Define debug print header for every service module. */ -DBGP_HEAD_T DBGP_Head; - - -/*----------------------------------------------------------------------------- - * Function: DBGP_Flag_Init - * - * Overview: Refresh all debug print control flag content to zero. - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 10/20/2006 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -extern void DBGP_Flag_Init(void) -{ - UINT8 i; - - for (i = 0; i < DBGP_TYPE_MAX; i++) - { - DBGP_Type[i] = 0; - } - -#if DBG - // 2010/06/02 MH Free build driver can not out any debug message!!! - // Init Debug flag enable condition - - DBGP_Type[FINIT] = \ -// INIT_EEPROM | -// INIT_TxPower | -// INIT_IQK | -// INIT_RF | - 0; - - DBGP_Type[FDM] = \ -// WA_IOT | -// DM_PWDB | -// DM_Monitor | -// DM_DIG | -// DM_EDCA_Turbo | -// DM_BT30 | - 0; - - DBGP_Type[FIOCTL] = \ -// IOCTL_IRP | -// IOCTL_IRP_DETAIL | -// IOCTL_IRP_HANDLE | -// IOCTL_BT_HCICMD | -// IOCTL_BT_HCICMD_DETAIL | -// IOCTL_BT_HCICMD_EXT | -// IOCTL_BT_EVENT | -// IOCTL_BT_EVENT_DETAIL | -// IOCTL_BT_EVENT_PERIODICAL | -// IOCTL_BT_TX_ACLDATA | -// IOCTL_BT_TX_ACLDATA_DETAIL | -// IOCTL_BT_RX_ACLDATA | -// IOCTL_BT_RX_ACLDATA_DETAIL | -// IOCTL_BT_TP | -// IOCTL_STATE | -// IOCTL_BT_LOGO | -// IOCTL_BT_MGNT_PACKET | -// IOCTL_CALLBACK_FUN | -// IOCTL_PARSE_BT_PKT | - 0; - - DBGP_Type[FC2H] = \ -// C2H_Summary | -// C2H_PacketData | -// C2H_ContentData | - 0; - - DBGP_Type[FBT] = \ -// BT_TRACE | -// BT_DBG_STATE | -// BT_DBG_CONTENT | -// BT_H2C_STATE | -// BT_NOTIFY_EVENT | -// BT_DBG_CTRL | - 0; - - DBGP_Type[FEEPROM] = \ -// EEPROM_W | -// EFUSE_PG | -// EFUSE_READ_ALL | -// EFUSE_ANALYSIS | -// EFUSE_PG_DETAIL | - 0; - - DBGP_Type[FDBG_CTRL] = \ -// DBG_CTRL_TRACE | -// DBG_CTRL_INBAND_NOISE | - 0; - - // 2011/07/20 MH Add for short cut - DBGP_Type[FSHORT_CUT] = \ -// SHCUT_TX | -// SHCUT_RX | - 0; - - // 2011/09/28 Sinda Add for batch indication - DBGP_Type[FBATCH_INDICATION] = \ -// INDICATE_TRACE | - 0; - - DBGP_Type[FIOTHREAD] = \ -// IOTHREAD_INIT | -// IOTHREAD_Q_OP | -// IOTHREAD_STATE | -// IOTHREAD_H2C | - 0; - - DBGP_Type[FFW] = \ -// FW_MSG_INIT | -// FW_MSG_Q_OP | -// FW_MSG_H2C_STATE | -// FW_MSG_H2C_CONTENT | -// FW_MSG_RSVD | - 0; - - DBGP_Type[FMPBT] = \ -// FMPBT_CONTENT | -// FMPBT_STATE | -// FMPBT_H2C_CONTENT | -// FMPBT_H2C_STATE | -// FMPBT_C2H_CONTENT | -// FMPBT_C2H_STATE | - 0; - - DBGP_Type[FMPHAL] = \ -// FMPHAL_CONTENT | -// FMPHAL_STATE | - 0; - - DBGP_Type[FPHY] = \ -// PHY_BBR | -// PHY_BBW | -// PHY_RFR | -// PHY_RFW | -// PHY_MACR | -// PHY_MACW | -// PHY_ALLR | -// PHY_ALLW | -// PHY_TXPWR | -// PHY_PWRDIFF | -// PHY_SICR | -// PHY_SICW | -// PHY_TXPWR_EFUSE | - 0; - - DBGP_Type[FRW_POINT] = \ -// FRW_POINT_TX | -// FRW_POINT_TX_DATA | -// FRW_POINT_RX | -// FRW_POINT_RX_DATA | -// FRW_POINT_DBG | - 0; - - DBGP_Type[FBEAM] = \ -// FBEAM_FUN | -// FBEAM_ERROR | -// FBEAM_DATA | - 0; - - DBGP_Type[FACTION_TIMER] = \ -// COMP_ACTION_TIMER_LIFE | -// COMP_ACTION_TIMER_ITEM | - 0; - - DBGP_Type[FHAL_MAC_ID] = \ -// COMP_MAC_ID | - 0; - - DBGP_Type[FCHNL] = \ -// FCHNL_FUN | -// FCHNL_ERROR | -// FCHNL_INFO | - 0; - DBGP_Type[FCCX] = \ -// CCX_CELLPWRLMT | -// CCX_RM | -// CCX_CAC | - 0; - - DBGP_Type[FUSWITCH] = \ -// FUSWITCH_FUN | -// FUSWITCH_ERROR | -// FUSWITCH_INFO | - 0; - -#endif - /* Define debug header of every service module. */ - DBGP_Head.pMANS = "\n\r[MANS] "; - DBGP_Head.pRTOS = "\n\r[RTOS] "; - DBGP_Head.pALM = "\n\r[ALM] "; - DBGP_Head.pPEM = "\n\r[PEM] "; - DBGP_Head.pCMPK = "\n\r[CMPK] "; - DBGP_Head.pRAPD = "\n\r[RAPD] "; - DBGP_Head.pTXPB = "\n\r[TXPB] "; - DBGP_Head.pQUMG = "\n\r[QUMG] "; - -} /* DBGP_Flag_Init */ - - -/*----------------------------------------------------------------------------- - * Function: DBG_PrintAllFlag - * - * Overview: Print All debug flag - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 12/10/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -extern void DBG_PrintAllFlag(void) -{ - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 0 FQoS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 1 FTX\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 2 FRX\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 3 FSEC\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 4 FMGNT\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 5 FMLME\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 6 FRESOURCE\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 7 FBEACON\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 8 FISR\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 9 FPHY\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 11 FMP\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 12 FPWR\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 13 FDM\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 14 FDBG_CTRL\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 15 FC2H\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("DBGFLAG 16 FBT\n")); -} // DBG_PrintAllFlag - - -/*----------------------------------------------------------------------------- - * Function: DBG_PrintFlagEvent - * - * Overview: Print dedicated debug flag event - * - * Input: NONE - * - * Output: NONE - * - * Return: NONE - * - * Revised History: - * When Who Remark - * 12/10/2008 MHC Create Version 0. - * - *---------------------------------------------------------------------------*/ -extern void DBG_PrintFlagEvent(UINT8 DbgFlag) -{ - switch(DbgFlag) - { - case FQoS: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 QoS_INIT\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 QoS_VISTA\n")); - break; - - case FTX: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 TX_DESC\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 TX_DESC_TID\n")); - break; - - case FRX: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 RX_DATA\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 RX_PHY_STS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 2 RX_PHY_SS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 3 RX_PHY_SQ\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 4 RX_PHY_ASTS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 5 RX_ERR_LEN\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 6 RX_DEFRAG\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 7 RX_ERR_RATE\n")); - break; - - case FSEC: - RT_TRACE(COMP_CMD, DBG_LOUD, ("NA\n")); - break; - - case FMGNT: - RT_TRACE(COMP_CMD, DBG_LOUD, ("NA\n")); - break; - - case FMLME: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 MEDIA_STS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 LINK_STS\n")); - break; - - case FRESOURCE: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 OS_CHK\n")); - break; - - case FBEACON: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 BCN_SHOW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 BCN_PEER\n")); - break; - - case FISR: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 ISR_CHK\n")); - break; - - case FPHY: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 PHY_BBR\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 PHY_BBW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 2 PHY_RFR\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 3 PHY_RFW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 4 PHY_MACR\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 5 PHY_MACW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 6 PHY_ALLR\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 7 PHY_ALLW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 8 PHY_TXPWR\n")); - break; - - case FMP: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 MP_RX\n")); - break; - - case FEEPROM: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 EEPROM_W\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 EFUSE_PG\n")); - break; - - case FPWR: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 LPS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 IPS\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 2 PWRSW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 3 PWRHW\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 4 PWRHAL\n")); - break; - - case FDM: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 WA_IOT\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 DM_PWDB\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 2 DM_Monitor\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 3 DM_DIG\n")); - break; - - case FDBG_CTRL: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 DBG_CTRL_TRACE\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 DBG_CTRL_INBAND_NOISE\n")); - break; - - case FC2H: - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 0 C2H_Summary\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 1 C2H_PacketData\n")); - RT_TRACE(COMP_CMD, DBG_LOUD, ("BIT 2 C2H_ContentData\n")); - break; - - default: - break; - } - -} // DBG_PrintFlagEvent - - - diff --git a/network/wlan/WDI/COMMON/Debug.h b/network/wlan/WDI/COMMON/Debug.h deleted file mode 100644 index 74cb1781..00000000 --- a/network/wlan/WDI/COMMON/Debug.h +++ /dev/null @@ -1,672 +0,0 @@ -#ifndef __INC_DEBUG_H -#define __INC_DEBUG_H - - -//----------------------------------------------------------------------------- -// Define the debug levels -// -// 1. DBG_TRACE and DBG_LOUD are used for normal cases. -// So that, they can help SW engineer to develope or trace states changed -// and also help HW enginner to trace every operation to and from HW, -// e.g IO, Tx, Rx. -// -// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, -// which help us to debug SW or HW. -// -//----------------------------------------------------------------------------- -// -// Never used in a call to RT_TRACE()! -// -#define DBG_OFF 0 - -// -// Deprecated! Don't use it! -// TODO: fix related debug message! -// -//#define DBG_SEC 1 - -// -// Fatal bug. -// For example, Tx/Rx/IO locked up, OS hangs, memory access violation, -// resource allocation failed, unexpected HW behavior, HW BUG and so on. -// -#define DBG_SERIOUS 2 // WPP Error condition - -// -// Abnormal, rare, or unexpeted cases. -// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on. -// -#define DBG_WARNING 3 // WPP Warning - -// -// Normal case with useful information about current SW or HW state. -// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, -// SW protocol state change, dynamic mechanism state change and so on. -// -#define DBG_LOUD 4 // WPP Information - -// -// Normal case with detail execution flow or information. -// -#define DBG_TRACE 5 //WPP most detailed trace - - -#if WPP_SOFTWARE_TRACE - - -// -// Trace framework definition when WPP based tracing is enabled -// Re-map WPP trace level in following DBG level, revised by Roger, 2014.02.11. -// -//#define WPP_LEVEL_NONE 0 -//#define WPP_LEVEL_FATAL 1 // fatal error -//#define WPP_LEVEL_ERROR 2 // error condition -//#define WPP_LEVEL_WARNING 3 // warning -//#define WPP_LEVEL_INFORMATION 4 // information -//#define WPP_LEVEL_VERBOSE 5 // most detailed trace -// - -// -// These are the various tracing components we can have. The max number is 31 -// so always keep that in mind. -// -// WARNING! THIS GUID IS BEING USED BY THE SAMPLE DRIVER. -// PLEASE GENERATE YOUR OWN UNIQUE GUID AND PLACE BELOW. -// -// Use COMP_TESTING when you want to add messages trace through a specific -// piece of code and not want to see trace from all other components -// -#define WPP_CONTROL_GUIDS \ - WPP_DEFINE_CONTROL_GUID(rtOriGuid1,(e62b367e,b2f0,4571,8c6a,3551a3a5a6b9), \ - WPP_DEFINE_BIT(COMP_DBG) \ - WPP_DEFINE_BIT(COMP_INIT) \ - WPP_DEFINE_BIT(COMP_OID_QUERY) \ - WPP_DEFINE_BIT(COMP_OID_SET) \ - WPP_DEFINE_BIT(COMP_RECV) \ - WPP_DEFINE_BIT(COMP_SEND) \ - WPP_DEFINE_BIT(COMP_IO) \ - WPP_DEFINE_BIT(COMP_POWER) \ - WPP_DEFINE_BIT(COMP_MLME) \ - WPP_DEFINE_BIT(COMP_SCAN) \ - WPP_DEFINE_BIT(COMP_SYSTEM) \ - WPP_DEFINE_BIT(COMP_SEC) \ - WPP_DEFINE_BIT(COMP_AP) \ - WPP_DEFINE_BIT(COMP_QOS) \ - WPP_DEFINE_BIT(COMP_AUTHENTICATOR) \ - WPP_DEFINE_BIT(COMP_BEACON) \ - WPP_DEFINE_BIT(COMP_WFD) \ - WPP_DEFINE_BIT(COMP_RM) \ - WPP_DEFINE_BIT(COMP_MP) \ - WPP_DEFINE_BIT(COMP_CKIP) \ - WPP_DEFINE_BIT(COMP_RSNA) \ - WPP_DEFINE_BIT(COMP_INDIC) \ - WPP_DEFINE_BIT(COMP_LED) \ - WPP_DEFINE_BIT(COMP_RF) \ - WPP_DEFINE_BIT(COMP_COEX) \ - ) \ - WPP_DEFINE_CONTROL_GUID(rtOriGuid2,(429ffa43,470c,40c2,b552,9cc23c2638ca), \ - WPP_DEFINE_BIT(COMP_HT) \ - WPP_DEFINE_BIT(COMP_POWER_TRACKING) \ - WPP_DEFINE_BIT(COMP_RX_REORDER) \ - WPP_DEFINE_BIT(COMP_AMSDU) \ - WPP_DEFINE_BIT(COMP_WPS) \ - WPP_DEFINE_BIT(COMP_CMD) \ - WPP_DEFINE_BIT(COMP_EFUSE) \ - WPP_DEFINE_BIT(COMP_CCX) \ - WPP_DEFINE_BIT(COMP_IOCTL) \ - WPP_DEFINE_BIT(COMP_HVL) \ - WPP_DEFINE_BIT(COMP_TEST) \ - WPP_DEFINE_BIT(COMP_P2P) \ - WPP_DEFINE_BIT(COMP_TDLS) \ - WPP_DEFINE_BIT(COMP_OMNIPEEK) \ - WPP_DEFINE_BIT(COMP_MULTICHANNEL) \ - WPP_DEFINE_BIT(COMP_TCPCHECKSUM) \ - WPP_DEFINE_BIT(COMP_DUALMACSWITCH) \ - WPP_DEFINE_BIT(COMP_EASY_CONCURRENT)\ - WPP_DEFINE_BIT(COMP_DFS) \ - WPP_DEFINE_BIT(COMP_TXPWR) \ - WPP_DEFINE_BIT(COMP_HAL_MAC_API) \ - WPP_DEFINE_BIT(COMP_NAN) \ - ) \ - WPP_DEFINE_CONTROL_GUID(dbgCtrlGuid,(1bb4a286,2d36,463b,bee4,47d6ba05b5f8), \ - WPP_DEFINE_BIT(COMP_DBG_MON) \ - WPP_DEFINE_BIT(COMP_TX_HANG) \ - WPP_DEFINE_BIT(COMP_RX_HANG) \ - ) \ - WPP_DEFINE_CONTROL_GUID( halMacGuid,(9f9d9e5b,3854,4b87,8bc6,4ce1f284d34b), \ - WPP_DEFINE_BIT(COMP_HALMAC_MSG_INIT) \ - WPP_DEFINE_BIT(COMP_HALMAC_MSG_EFUSE) \ - WPP_DEFINE_BIT(COMP_HALMAC_MSG_FW) \ - WPP_DEFINE_BIT(COMP_HALMAC_MSG_H2C) \ - WPP_DEFINE_BIT(COMP_HALMAC_MSG_PWR) \ - ) - - #ifdef WPP_COMPID_LEVEL_ENABLED - #undef WPP_COMPID_LEVEL_ENABLED - #endif - - #define WPP_COMPID_LEVEL_ENABLED(CTL,LEVEL) \ - ((WPP_CONTROL(WPP_BIT_ ## CTL).Level >= LEVEL) && \ - (WPP_CONTROL(WPP_BIT_ ## CTL).Flags[WPP_FLAG_NO(WPP_BIT_ ## CTL)] & WPP_MASK(WPP_BIT_ ## CTL))) - - #ifndef WPP_COMPID_LEVEL_LOGGER - #define WPP_COMPID_LEVEL_LOGGER(CTL,LEVEL) (WPP_CONTROL(WPP_BIT_ ## CTL).Logger), - #endif - - #ifdef WPP_COMPID_ENABLED - #undef WPP_COMPID_ENABLED - #endif - - #define WPP_COMPID_ENABLED(CTL) \ - (WPP_CONTROL(WPP_BIT_ ## CTL).Flags[WPP_FLAG_NO(WPP_BIT_ ## CTL)] & WPP_MASK(WPP_BIT_ ## CTL)) - - #ifndef WPP_COMPID_LOGGER - #define WPP_COMPID_LOGGER(CTL) (WPP_CONTROL(WPP_BIT_ ## CTL).Logger), - #endif - -#else // WPP_SOFTWARE_TRACE == 0 - - -//----------------------------------------------------------------------------- -// Define the tracing components -// -//----------------------------------------------------------------------------- -#define COMP_DBG BIT0 // For function call tracing. -#define COMP_INIT BIT1 // during driver initialization / halt / reset. -#define COMP_OID_QUERY BIT2 // Query OID. -#define COMP_OID_SET BIT3 // Set OID. -#define COMP_RECV BIT4 // Reveive part data path. -#define COMP_SEND BIT5 // Send part path. -#define COMP_IO BIT6 // I/O Related. Added by Annie, 2006-03-02. -#define COMP_POWER BIT7 // 802.11 Power Save mode or System/Device Power state related. -#define COMP_MLME BIT8 // 802.11 link related: join/start BSS, leave BSS. -#define COMP_SCAN BIT9 // For site survey. -#define COMP_SYSTEM BIT10 // For general platform function. -#define COMP_SEC BIT11 // For Security. -#define COMP_AP BIT12 // For AP mode related. -#define COMP_QOS BIT13 // For QoS. -#define COMP_AUTHENTICATOR BIT14 // For AP mode Authenticator. Added by Annie, 2006-01-30. -#define COMP_BEACON BIT15 // For Beacon related, by rcnjko. -#define COMP_WFD BIT16 // WiFi Display -#define COMP_RM BIT17 // For Radio Measurement. -#define COMP_MP BIT18 // For mass production test, by shien chang, 2006.07.13 -#define COMP_CKIP BIT19 // For CCX 1 S13: CKIP. Added by Annie, 2006-08-14. -#define COMP_RSNA BIT20 // For RSNA IBSS , 061201, by CCW. -#define COMP_INDIC BIT21 // For link indication -#define COMP_LED BIT22 // For LED. -#define COMP_RF BIT23 // For RF. - -//1!!!!!!!!!!!!!!!!!!!!!!!!!!! -//1//1Attention Please!!!<11n or 8190 specific code should be put below this line> -//1!!!!!!!!!!!!!!!!!!!!!!!!!!! - -#define COMP_HT BIT24 // For 802.11n HT related information. by Emily 2006-8-11 -#define COMP_POWER_TRACKING BIT25 //FOR 8190 TX POWER TRACKING -#define COMP_RX_REORDER BIT26 // 8190 Rx Reorder -#define COMP_AMSDU BIT27 // For A-MSDU Debugging -#define COMP_WPS BIT28 //WPS Debug Message -#define COMP_CMD BIT29 -#define COMP_EFUSE BIT30 -#define COMP_CCX BIT31 //CCX Debug Flag -#define COMP_IOCTL BIT32 // IO Control -#define COMP_HVL BIT33 // For Ndis 6.2 Context Swirch and Hardware Virtualiztion Layer -#define COMP_TEST BIT34 -#define COMP_P2P BIT35 -#define COMP_TDLS BIT36 -#define COMP_OMNIPEEK BIT37 -#define COMP_MULTICHANNEL BIT38 -#define COMP_TCPCHECKSUM BIT39 -#define COMP_DUALMACSWITCH BIT40 // 2010/12/27 Add for Dual mac mode debug -#define COMP_EASY_CONCURRENT BIT41 // 2010/12/27 Add for easy cncurrent mode debug -#define COMP_DFS BIT42 -#define COMP_COEX BIT43 -#define COMP_TXPWR BIT44 -#define COMP_HAL_MAC_API BIT46 -#define COMP_NAN BIT47 - -#define COMP_ALL UINT64_C(0xFFFFFFFFFFFFFFFF) // All components - - -// ============================== -// for dbgCtrlGuid -// (1bb4a286,2d36,463b,bee4,47d6ba05b5f8) -// ============================== -#define COMP_DBG_MON BIT0 -#define COMP_TX_HANG BIT1 -#define COMP_RX_HANG BIT2 - -// ============================== -// for halMacGuid -// {9F9D9E5B-3854-4B87-8BC6-4CE1F284D34B} -// ============================== -#define COMP_HALMAC_MSG_INIT BIT0 -#define COMP_HALMAC_MSG_EFUSE BIT1 -#define COMP_HALMAC_MSG_FW BIT2 -#define COMP_HALMAC_MSG_H2C BIT3 -#define COMP_HALMAC_MSG_PWR BIT4 - -#endif - - -// For debug print flag to use -/*------------------------------Define structure----------------------------*/ -/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/ - -/* Defnie structure to store different debug flag variable. Every debug flag - is a UINT32 integer and you can assign 32 different events. */ -typedef struct tag_DBGP_Debug_Flag_Structure -{ - UINT32 Mans; /* Main Scheduler module. */ - UINT32 Rtos; /* RTOS module. */ - UINT32 Alarm; /* Alarm module. */ - UINT32 Pm; /* Performance monitor module. */ -}DBGP_FLAG_T; - -/* Define debug print header for every service module.*/ -typedef struct tag_DBGP_Service_Module_Header_Name_Structure -{ - const char *pMANS; - const char *pRTOS; - const char *pALM; - const char *pPEM; - const char *pCMPK; - const char *pRAPD; - const char *pTXPB; - const char *pQUMG; -}DBGP_HEAD_T; - - -/* Define different debug flag for dedicated service modules in debug flag array. */ -// Each module has independt 32 bit debug flag you cnn define the flag as yout require. -typedef enum tag_DBGP_Flag_Type_Definition -{ - FQoS = 0, - FTX = 1, - FRX = 2, - FSEC = 3, - FMGNT = 4, - FMLME = 5, - FRESOURCE = 6, - FBEACON = 7, - FISR = 8, - FPHY = 9, - FMP = 10, - FEEPROM = 11, - FPWR = 12, - FDM = 13, - FDBG_CTRL = 14, - FC2H = 15, - FBT = 16, - FINIT = 17, - FIOCTL = 18, - FSHORT_CUT = 19, - FBATCH_INDICATION = 20, - FTCPREORDER = 21, - FIOTHREAD = 22, - FFW = 23, - FMPBT = 24, - FRW_POINT = 25, - FBEAM = 26, - FMPHAL = 27, - FACTION_TIMER = 28, - FHAL_MAC_ID = 29, - FCHNL = 30, - FCCX = 31, - FUSWITCH = 32, - DBGP_TYPE_MAX -}DBGP_FLAG_E; - - -// Define Qos Relative debug flag bit --> FQoS -#define QoS_INIT BIT0 -#define QoS_VISTA BIT1 - -// Define TX relative debug bit --> FTX -#define TX_DESC BIT0 -#define TX_DESC_TID BIT1 -#define TX_PATH BIT2 - -// Define RX relative debug bit --> FRX -#define RX_DATA BIT0 -#define RX_PHY_STS BIT1 -#define RX_PHY_SS BIT2 -#define RX_PHY_SQ BIT3 -#define RX_PHY_ASTS BIT4 -#define RX_ERR_LEN BIT5 -#define RX_DEFRAG BIT6 -#define RX_ERR_RATE BIT7 -#define RX_PATH BIT8 -#define RX_BEACON BIT9 -#define RX_PATH_AP_MODE BIT10 -#define RX_PATH_ADDR BIT11 - -// Define Security relative debug bit --> FSEC - -// Define MGNT relative debug bit --> FMGNT - -// Define MLME relative debug bit --> FMLME -#define MEDIA_STS BIT0 -#define LINK_STS BIT1 - -// Define OS resource check module bit --> FRESOURCE -#define OS_CHK BIT0 - -// Define beacon content check module bit --> FBEACON -#define BCN_SHOW BIT0 -#define BCN_PEER BIT1 - -// Define ISR/IMR check module bit --> FISR -#define ISR_CHK BIT0 - -// Define PHY-BB/RF/MAC check module bit --> FPHY -#define PHY_BBR BIT0 -#define PHY_BBW BIT1 -#define PHY_RFR BIT2 -#define PHY_RFW BIT3 -#define PHY_MACR BIT4 -#define PHY_MACW BIT5 -#define PHY_ALLR BIT6 -#define PHY_ALLW BIT7 -#define PHY_TXPWR BIT8 -#define PHY_PWRDIFF BIT9 -#define PHY_SICR BIT10 -#define PHY_SICW BIT11 -#define PHY_TXPWR_EFUSE BIT12 - -// Define MPT driver check module bit --> FMP -#define MP_RX BIT0 -#define MP_SWICH_CH BIT1 - -// Define EEPROM and EFUSE check module bit --> FEEPROM -#define EEPROM_W BIT0 -#define EFUSE_PG BIT1 -#define EFUSE_READ_ALL BIT2 -#define EFUSE_ANALYSIS BIT3 -#define EFUSE_PG_DETAIL BIT4 - -// Define power save check module bit --> FPWR -#define LPS BIT0 -#define IPS BIT1 -#define PWRSW BIT2 -#define PWRHW BIT3 -#define PWRHAL BIT4 - -// Define Dynamic Mechanism check module bit --> FDM -#define WA_IOT BIT0 -#define DM_PWDB BIT1 -#define DM_Monitor BIT2 -#define DM_DIG BIT3 -#define DM_EDCA_Turbo BIT4 -#define DM_BT30 BIT5 - -// Define Dbg Control module bit --> FDBG_CTRL -#define DBG_CTRL_TRACE BIT0 -#define DBG_CTRL_INBAND_NOISE BIT1 - -// Define FW C2H Cmd check module bit --> FC2H -#define C2H_Summary BIT0 -#define C2H_PacketData BIT1 -#define C2H_ContentData BIT2 -// Define BT Cmd check module bit --> FBT -#define BT_TRACE BIT0 -#define BT_DBG_STATE BIT1 -#define BT_DBG_CONTENT BIT2 -#define BT_H2C_STATE BIT3 -#define BT_NOTIFY_EVENT BIT4 -#define BT_DBG_CTRL BIT5 - -// Define init check for module bit --> FINIT -#define INIT_EEPROM BIT0 -#define INIT_TxPower BIT1 -#define INIT_IQK BIT2 -#define INIT_RF BIT3 - -// Define IOCTL Cmd check module bit --> FIOCTL -// section 1 : IRP related -#define IOCTL_IRP BIT0 -#define IOCTL_IRP_DETAIL BIT1 -#define IOCTL_IRP_HANDLE BIT2 -// section 2 : HCI command/event -#define IOCTL_BT_HCICMD BIT8 -#define IOCTL_BT_HCICMD_DETAIL BIT9 -#define IOCTL_BT_HCICMD_EXT BIT10 -#define IOCTL_BT_EVENT BIT11 -#define IOCTL_BT_EVENT_DETAIL BIT12 -#define IOCTL_BT_EVENT_PERIODICAL BIT13 -// section 3 : BT tx/rx data and throughput -#define IOCTL_BT_TX_ACLDATA BIT16 -#define IOCTL_BT_TX_ACLDATA_DETAIL BIT17 -#define IOCTL_BT_RX_ACLDATA BIT18 -#define IOCTL_BT_RX_ACLDATA_DETAIL BIT19 -#define IOCTL_BT_TP BIT20 -// section 4 : BT connection state machine. -#define IOCTL_STATE BIT21 -#define IOCTL_BT_LOGO BIT22 -#define IOCTL_BT_MGNT_PACKET BIT23 -// section 5 : BT function trace -#define IOCTL_CALLBACK_FUN BIT24 -#define IOCTL_PARSE_BT_PKT BIT25 -#define IOCTL_BT_TX_PKT BIT26 -#define IOCTL_BT_FLAG_MON BIT27 - -// -// Define init check for module bit --> FSHORT_CUT -// 2011/07/20 MH Add for short but definition. -// -#define SHCUT_TX BIT0 -#define SHCUT_RX BIT1 -// -// Define init check for module bit --> FBATCH_INDICATION -// 2011/09/28 Sinda Add for batch indication definition. -// -#define INDICATE_TRACE BIT0 - - -// -// Define init check for module bit --> FTCPREORDER -// 2012/01/10 hpfan Add for Tcp Reorder definition -// -#define SEQ_TRACE BIT0 -#define REORDER_TRACE BIT1 -#define INIT_TRACE BIT2 - -// -// Define init check for module bit --> FIOTHREAD -// 2012/01/04 Cosa Add for io thread definition. -// -#define IOTHREAD_INIT BIT0 -#define IOTHREAD_Q_OP BIT1 -#define IOTHREAD_STATE BIT2 -#define IOTHREAD_H2C BIT3 - -// -// Define init check for module bit --> FFW -// 2012/01/12 Cosa Add for Firmware definition. -// -#define FW_MSG_INIT BIT0 -#define FW_MSG_Q_OP BIT1 -#define FW_MSG_H2C_STATE BIT2 -#define FW_MSG_H2C_CONTENT BIT3 -#define FW_MSG_RSVD BIT4 - -// -// Define init check for module bit --> FMPBT -// 2012/03/01 Cosa Add for BT MP. -// -#define FMPBT_CONTENT BIT0 -#define FMPBT_STATE BIT1 -#define FMPBT_H2C_CONTENT BIT2 -#define FMPBT_H2C_STATE BIT3 -#define FMPBT_C2H_CONTENT BIT4 -#define FMPBT_C2H_STATE BIT5 - -#define FMPHAL_CONTENT BIT0 -#define FMPHAL_STATE BIT1 - -// -// Define 8192ee Read Write point related bit --> FRW_POINT -// 2012/03/01 Cosa Add for BT MP. -// -#define FRW_POINT_TX BIT0 -#define FRW_POINT_TX_DATA BIT1 -#define FRW_POINT_RX BIT2 -#define FRW_POINT_RX_DATA BIT3 -#define FRW_POINT_DBG BIT4 - -#define FBEAM_FUN BIT0 -#define FBEAM_ERROR BIT1 -#define FBEAM_DATA BIT2 - -// -// Define ACTION_TIMER Debug Information --> FACTION_TIMER -// -#define COMP_ACTION_TIMER_LIFE BIT0 -#define COMP_ACTION_TIMER_ITEM BIT1 - -// -// Define HAL_MAC_ID Debug Information --> FHAL_MAC_ID -// -#define COMP_MAC_ID BIT0 - -// -// Define CHANNEL Debug Information --> FCHNL -// -#define FCHNL_FUN BIT0 -#define FCHNL_ERROR BIT1 -#define FCHNL_INFO BIT2 - -// -// Define CCX Debug Information --> FCCX -// -#define CCX_CELLPWRLMT BIT0 -#define CCX_RM BIT1 -#define CCX_CAC BIT2 - -#define FUSWITCH_FUN BIT0 -#define FUSWITCH_ERROR BIT1 -#define FUSWITCH_INFO BIT2 - -/* 2007/07/13 MH *//*------For DeBuG Print modeue------*/ -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ -#define DEBUG_PRINT 1 - -// Please add new OS's print API by yourself - -#if (DEBUG_PRINT == 1) && DBG -#define RT_DISP(dbgtype, dbgflag, printstr)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - DbgPrint printstr;\ - }\ -} - -#define RT_DISP_F(dbgtype, dbgflag, printstr)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - DbgPrint("%s(): ", __FUNCTION__);\ - DbgPrint printstr;\ - }\ -} - -#define RT_DISP_ADDR(dbgtype, dbgflag, printstr, _Ptr)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - int __i; \ - pu1Byte ptr = (pu1Byte)_Ptr; \ - DbgPrint printstr; \ - DbgPrint(" "); \ - for( __i=0; __i<6; __i++ ) \ - DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \ - DbgPrint("\n"); \ - }\ -} - -#define RT_DISP_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen)\ -{\ - if (DBGP_Type[dbgtype] & dbgflag)\ - {\ - int __i; \ - pu1Byte ptr = (pu1Byte)_HexData; \ - DbgPrint(_TitleString); \ - for( __i=0; __i<(int)_HexDataLen; __i++ ) \ - { \ - DbgPrint("%02X%s", ptr[__i], (((__i + 1) % 4) == 0)?" ":" ");\ - if (((__i + 1) % 16) == 0) DbgPrint("\n");\ - } \ - DbgPrint("\n"); \ - }\ -} - -#define FunctionIn(_comp) RT_TRACE((_comp), DBG_LOUD, ("==========> %s\n", __FUNCTION__)) -#define FunctionOut(_comp) RT_TRACE((_comp), DBG_LOUD, ("<========== %s\n", __FUNCTION__)) - -#else - -#define RT_DISP(dbgtype, dbgflag, printstr) -#define RT_DISP_F(dbgtype, dbgflag, printstr) - -#define RT_DISP_ADDR(dbgtype, dbgflag, printstr, _Ptr) -#define RT_DISP_DATA(dbgtype, dbgflag, _TitleString, _HexData, _HexDataLen) - -#define FunctionIn(_comp) -#define FunctionOut(_comp) -#endif -/*------------------------Export Marco Definition---------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -extern UINT32 DBGP_Type[DBGP_TYPE_MAX]; -extern DBGP_HEAD_T DBGP_Head; - -/*------------------------Export global variable----------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ -extern void DBGP_Flag_Init(void); -extern void DBG_PrintAllFlag(void); -extern void DBG_PrintFlagEvent(UINT8 DbgFlag); - -/*--------------------------Exported Function prototype---------------------*/ - - - - - - - - - -extern u4Byte GlobalDebugLevel; -extern u8Byte GlobalDebugComponents; -extern u4Byte GLDebugComponents; -extern u4Byte HalMacDebugComponents; - - - -//================================================================= -// Debugging for System Resources -//================================================================= - - -// + Debugging for Timer Resources ------------------------------------------------------------------ -#define DEBUG_RESOURCE_TIMER 0 - - -#define DebugResourceTimerCreateTimerMirror(_pAdapter, _uStorageIndex, _pTimer) -#define DebugResourceTimerReleaseTimerMirror(_pAdapter, _pTimer) -#define DebugResourceTimerDumpUnreleasedTimer(_pAdapter) - -//----------------------------------------------------------------------------------------------- - - - - -//================================================================= - -#endif //#ifndef __INC_DEBUG_H diff --git a/network/wlan/WDI/COMMON/Defrag.c b/network/wlan/WDI/COMMON/Defrag.c deleted file mode 100644 index 0de12e5d..00000000 --- a/network/wlan/WDI/COMMON/Defrag.c +++ /dev/null @@ -1,375 +0,0 @@ -#include "Mp_Precomp.h" - - -#if WPP_SOFTWARE_TRACE -#include "DeFrag.tmh" -#endif - -VOID -DefragInitialize( - PADAPTER Adapter - ) -{ - DefragInit(Adapter->DefragArray, MAX_DEFRAG_PEER); -} - -VOID -DefragReset( - PADAPTER Adapter - ) -{ - u2Byte i; - - for(i=0;iDefragArray[i].bUsed) - { - DefragEntryFree(&Adapter->DefragArray[i], Adapter); - } - } -} - -PRT_RFD -DefragAddRFD( - PADAPTER Adapter, - PRT_RFD pRfd, - pu1Byte pSenderAddr, - u1Byte TID, - u2Byte SeqNum, - u1Byte FragNum, - BOOLEAN bMoreFrag, - BOOLEAN bEncrypted - ) -{ - /* - * Note: Call this function when - * 1. More frag is set - * 2. Fragment number is not zero - * The RFD passed in will be queued or freed after this function call. - * ICV should be removed before this function. - * - * Return: NULL, if no MSDU is complete - * RFD list, if one MSDU is complete - * - */ - - PRT_RFD pRetRfd=NULL; - PDEFRAG_ENTRY pEntry; - u2Byte EncryptionOverhead=0; - OCTET_STRING frame; - u1Byte QosCtrlLen = 0; // Added by Annie, 2006-01-09. - u1Byte HTCLen = 0; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if( pRfd->Status.bIsQosData ) - { - QosCtrlLen = sQoSCtlLng; - } - if( pRfd->Status.bContainHTC) - HTCLen = sHTCLng; - - if(FragNum==0) - { // First frag, find a vacancy entry - pEntry=DefragFindFreeEntry(Adapter->DefragArray, MAX_DEFRAG_PEER); - - if(pEntry==NULL) - { - // No free entry, do age function and try again - DefragAge( - Adapter->DefragArray, - MAX_DEFRAG_PEER, - PlatformGetCurrentTime(), - Adapter); - - pEntry=DefragFindFreeEntry(Adapter->DefragArray, MAX_DEFRAG_PEER); - } - - if(pEntry==NULL) - { - // If we stall can not get a free entry, knock out the least rescent used (LRU) - // entry to find one. 2006.07.25, by shien chang - DefragFreeLRUEntry(Adapter->DefragArray, - MAX_DEFRAG_PEER, - Adapter); - - pEntry=DefragFindFreeEntry(Adapter->DefragArray, MAX_DEFRAG_PEER); - - RT_ASSERT(pEntry!=NULL, ("DefragAddRFD(): pEntry should not be NULL.\n")); - - } - - DefragEntrySetRFD( - pEntry, - pRfd, - pSenderAddr, - TID, - SeqNum, - FragNum); - - } - else - { // 2~ frag - pEntry=DefragSearch( - Adapter->DefragArray, - MAX_DEFRAG_PEER, - pSenderAddr, - TID, - SeqNum, - FragNum); - - if(pEntry==NULL) - { - pRfd->bReturnDirectly = TRUE; - ReturnRFDList(Adapter, pRfd); - RT_ASSERT(Adapter->NumIdleRfd <= Adapter->NumRfd, ("DefragAddRFD(): Adapter->NumIdleRfd(%ld)\n", Adapter->NumIdleRfd)); - } - else - { - if(bEncrypted && !pMgntInfo->SafeModeEnabled) - { - FillOctetString(frame, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->FragLength); - SecGetEncryptionOverhead( - Adapter, - &EncryptionOverhead, - NULL, - NULL, - NULL, - TRUE, - MacAddr_isMulticast(Frame_pDaddr(frame))); - } - //2 Remove header and MPDU head overhead (ex. IV) - MAKE_RFD_OFFSET_AT_FRONT(pRfd, sMacHdrLng + QosCtrlLen + HTCLen + EncryptionOverhead) // Add QosCtrlLen; Modified by Annie, 2006-01-09. - - DefragEntryAddRFD(pEntry, pRfd, FragNum); - if(!bMoreFrag) - { //2 This MSDU is complete, return it - pRetRfd=pEntry->pRfdHead; - pEntry->bUsed=FALSE; - } - } - } - return pRetRfd; -} - - -/* - * Note: Following functions should not be called outside Defrag.c - * -*/ -VOID -DefragInit( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size - ) -{ - u2Byte i; - - for(i=0;iDefragArray; - - for(i=0; i pDefragArray[i].usMaxLifeTimeStamp ) - { - Oldest_Frag = i; - } - } - - if( Oldest_Frag != MAX_DEFRAG_PEER ) - DefragEntryFree(&pDefragArray[Oldest_Frag], Adapter); -} - -PDEFRAG_ENTRY -DefragFindFreeEntry( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size - ) -{ - u2Byte i; - - for(i=0;i pDefragArray[i].usMaxLifeTimeStamp) - DefragEntryFree(&pDefragArray[i], Adapter); - } -} - -VOID -DefragEntrySetRFD( - PDEFRAG_ENTRY pEntry, - PRT_RFD pRfd, - pu1Byte pSenderAddr, - u1Byte TID, - u2Byte SeqNum, - u1Byte FragNum - ) -{ - RT_ASSERT(FragNum==0, ("DefragEntrySetRFD() with nonzero FragNum !!\n")); - - pEntry->bUsed=TRUE; - cpMacAddr(pEntry->SenderAddr, pSenderAddr); - pEntry->TID=TID; - pEntry->SeqNum=SeqNum; - pEntry->LastFragNum=FragNum; - pEntry->usLastArriveTimeStamp=PlatformGetCurrentTime(); - pEntry->usMaxLifeTimeStamp=pEntry->usLastArriveTimeStamp + MaxDefragLifeTime; - pEntry->pRfdHead=pRfd; - pEntry->pRfdTail=pRfd; -} - -VOID -DefragEntryAddRFD( - PDEFRAG_ENTRY pEntry, - PRT_RFD pRfd, - u1Byte FragNum - ) -{ - RT_ASSERT(FragNum==(pEntry->LastFragNum+1), ("DefragEntryAddRFD() with wrong FragNum !!\n")); - - pEntry->LastFragNum=FragNum; - - // Increment fragment counter - pEntry->pRfdHead->nTotalFrag++; - - // Add packet length - pEntry->pRfdHead->PacketLength+=pRfd->FragLength; - - // Update arrival time - pEntry->usLastArriveTimeStamp=PlatformGetCurrentTime(); - - // Insert to tail - pEntry->pRfdTail->NextRfd=pRfd; - pEntry->pRfdTail=pRfd; -} - -VOID -DefragEntryFree( - PDEFRAG_ENTRY pEntry, - PADAPTER Adapter - ) -{ - ReturnRFDList(Adapter, (PRT_RFD)pEntry->pRfdHead); - pEntry->bUsed=FALSE; -} - -VOID -DefragRecycleRFD( - PADAPTER Adapter - ) -{ - // There may be many ways to recycle RFDs. - // Now we only free the LRU RFDs in DefragArray. 2006.07.25, by shien chang. - PADAPTER pAdapter; - pAdapter = GetDefaultAdapter(Adapter); - DefragFreeLRUEntry(pAdapter->DefragArray, MAX_DEFRAG_PEER, pAdapter); -} - -VOID -DefragFreeLRUEntry( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size, - PADAPTER Adapter - ) -{ - u2Byte i, target=Size; - PDEFRAG_ENTRY pEntry; - - for (i=0; ipRfdHead); - - pEntry->bUsed=FALSE; - } -} diff --git a/network/wlan/WDI/COMMON/Defrag.h b/network/wlan/WDI/COMMON/Defrag.h deleted file mode 100644 index 690fe7fe..00000000 --- a/network/wlan/WDI/COMMON/Defrag.h +++ /dev/null @@ -1,104 +0,0 @@ -#ifndef __INC_DEFRAG_H -#define __INC_DEFRAG_H - -#define MaxDefragLifeTime 51200 // in us - - -VOID -DefragInitialize( - PADAPTER Adapter - ); - -PRT_RFD -DefragAddRFD( - PADAPTER Adapter, - PRT_RFD pRfd, - pu1Byte pSenderAddr, - u1Byte TID, - u2Byte SeqNum, - u1Byte FragNum, - BOOLEAN bMoreFrag, - BOOLEAN bEncrypted - ); - -VOID -DefragReset( - PADAPTER Adapter - ); - - -/* - * Note: Following functions should not be called outside Defrag.c - * -*/ -VOID -DefragInit( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size - ); - -PDEFRAG_ENTRY -DefragSearch( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size, - pu1Byte pSenderAddr, - u1Byte TID, - u2Byte SeqNum, - u1Byte FragNum - ); - -VOID -DefragRemoveOldest( - PADAPTER Adapter - ); - -PDEFRAG_ENTRY -DefragFindFreeEntry( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size - ); - -VOID -DefragAge( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size, - u8Byte usCurrentTime, - PADAPTER Adapter - ); - -VOID -DefragEntrySetRFD( - PDEFRAG_ENTRY pEntry, - PRT_RFD pRfd, - pu1Byte pSenderAddr, - u1Byte TID, - u2Byte SeqNum, - u1Byte FragNum - ); - -VOID -DefragEntryAddRFD( - PDEFRAG_ENTRY pEntry, - PRT_RFD pRfd, - u1Byte FragNum - ); - -VOID -DefragEntryFree( - PDEFRAG_ENTRY pEntry, - PADAPTER Adapter - ); - -VOID -DefragRecycleRFD( - PADAPTER Adapter - ); - -VOID -DefragFreeLRUEntry( - PDEFRAG_ENTRY pDefragArray, - u2Byte Size, - PADAPTER Adapter - ); - -#endif // #ifndef __INC_DEFRAG_H diff --git a/network/wlan/WDI/COMMON/Dot11RAES.h b/network/wlan/WDI/COMMON/Dot11RAES.h deleted file mode 100644 index 3a2b9eac..00000000 --- a/network/wlan/WDI/COMMON/Dot11RAES.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * AES functions - * Copyright (c) 2003-2006, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Alternatively, this software may be distributed under the terms of BSD - * license. - * - * See README and COPYING for more details. - */ - -#ifndef Dot11RAES_H -#define Dot11RAES_H - -void *Dot11R_aes_encrypt_init(const u8 *key, int len , u32 *keyOut ); -void Dot11R_aes_encrypt(void *ctx, const u8 *plain, u8 *crypt); -void Dot11R_aes_encrypt_deinit(void *ctx); -int omac1_aes_128_vector(const u8 *key, int num_elem, const u8 *addr[], const int *len, u8 *mac); -int omac1_aes_128(const u8 *key, const u8 *data, int data_len, u8 *mac); - -// -// Now input data total length can't over 512 bytes !! -// -int wpa_ft_mic(const u8 *kck, const u8 *sta_addr, const u8 *ap_addr, - u8 transaction_seqnum, const u8 *mdie, int mdie_len, - const u8 *ftie, int ftie_len, - const u8 *rsnie, int rsnie_len, - const u8 *ric, int ric_len, u8 *mic); - - -int wpa_ft_mic_setup(const u8 *kck, const u8 *sta_addr, const u8 *ap_addr, - u8 transaction_seqnum, const u8 *linkidie, int linkidie_len, - const u8 *ftie, int ftie_len, - const u8 *rsnie, int rsnie_len, - const u8 *tie, int tie_len, - const u8 *ric, int ric_len, u8 *mic); - -int wpa_ft_mic_teardown(const u8 *kck, - u8 transaction_seqnum, const u8 *linkidie, int linkidie_len, - const u8 *ftie, int ftie_len, - u16 reason_code, u8 dialog_token, u8 *mic); - -#endif /* Dot11RAES_H */ diff --git a/network/wlan/WDI/COMMON/Dot11d.c b/network/wlan/WDI/COMMON/Dot11d.c deleted file mode 100644 index 9a415fc6..00000000 --- a/network/wlan/WDI/COMMON/Dot11d.c +++ /dev/null @@ -1,1881 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// Dot11d.c -// -// Description: -// Implement 802.11d. -// -//----------------------------------------------------------------------------- - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Dot11d.tmh" -#endif - -/*------------------------ Private Funtion Declaration-------------------------------------*/ -// The following function are called only in Dot11d.c -#define RtResetScanChannel(__pChannelList) \ -{ \ - (__pChannelList)->ScanChannelListLength = 0; \ - (__pChannelList)->ScanChannelIndex = 0; \ -} - -#define RtInsertScanChannel(__pChannelList, __pChnlListEntry) \ -{ \ - if((__pChannelList)->ScanChannelListLength < MAX_SCAN_CHANNEL_NUM) \ - { \ - (__pChannelList)->ScanChannelList[(__pChannelList)->ScanChannelListLength ++] = \ - (PRT_CHNL_LIST_ENTRY)(__pChnlListEntry); \ - } \ -} - -#define RtGetScanChannel(__pChannelList) \ - (((__pChannelList)->ScanChannelIndex >= (__pChannelList)->ScanChannelListLength) ? \ - NULL : (__pChannelList)->ScanChannelList[(__pChannelList)->ScanChannelIndex]) - -#define RtPopScanChannel(__pChannelList) \ - (((__pChannelList)->ScanChannelIndex >= (__pChannelList)->ScanChannelListLength) ? \ - NULL : (__pChannelList)->ScanChannelList[(__pChannelList)->ScanChannelIndex ++]) - - -#define RtResetChannelList(__pChannelList) \ -{ \ - (__pChannelList)->ChannelPlan = RT_CHANNEL_DOMAIN_MAX; \ - (__pChannelList)->bDot11d = FALSE; \ - (__pChannelList)->ChannelLen = 0; \ - (__pChannelList)->WirelessMode = WIRELESS_MODE_UNKNOWN; \ - PlatformZeroMemory((__pChannelList)->ChnlListEntry, sizeof(RT_CHNL_LIST_ENTRY) * MAX_CHANNEL_NUM); \ - RtResetScanChannel(__pChannelList); \ -} -/*------------------------ End of Private Funtion Declaration------------------------------*/ - - -static u1Byte s_MaxChnlList[] = { - 1,2,3,4,5,6,7,8,9,10,11,12,13,14, - 36,40,44,48,52,56,60,64,149,153,157,161,165 -}; - - -#define DOMAIN_CODE_2G_WORLD \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_ETSI1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_ETSI2 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_FCC1 \ - {1,2,3,4,5,6,7,8,9,10,11}, 11 -#define DOMAIN_CODE_2G_MKK1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_MKK2 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_GLOBAL \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_WHQL_WFD \ - {1,4,6,8,11}, 5 - -#define DOMAIN_CODE_5G_ETSI1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define DOMAIN_CODE_5G_ETSI2 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_ETSI3 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22 -#define DOMAIN_CODE_5G_ETSI4 \ - {36,40,44,48}, 4 -#define DOMAIN_CODE_5G_ETSI5 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 21 -#define DOMAIN_CODE_5G_ETSI6 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_ETSI7 \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define DOMAIN_CODE_5G_ETSI8 \ - {149,153,157,161}, 4 -#define DOMAIN_CODE_5G_ETSI9 \ - {100,104,108,112,116,132,136,140}, 8 -#define DOMAIN_CODE_5G_ETSI10 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_ETSI11 \ - {36,40,44,48,52,56,60,64,132,136,140,149,153,157,161,165}, 16 -#define DOMAIN_CODE_5G_ETSI12 \ - {149,153,157,161}, 4 -#define DOMAIN_CODE_5G_ETSI13 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140}, 16 -#define DOMAIN_CODE_5G_ETSI14 \ - {36,40,44,48,52,56,60,64,132,136,140}, 11 - -#define DOMAIN_CODE_5G_FCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_FCC2 \ - {36,40,44,48,149,153,157,161,165}, 9 -#define DOMAIN_CODE_5G_FCC3 \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define DOMAIN_CODE_5G_FCC4 \ - {36,40,44,48,52,56,60,64,149,153,157,161}, 12 -#define DOMAIN_CODE_5G_FCC5 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_FCC6 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_FCC7 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 21 -#define DOMAIN_CODE_5G_FCC8 \ - {149,153,157,161}, 4 -#define DOMAIN_CODE_5G_FCC9 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 21 -#define DOMAIN_CODE_5G_FCC10 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161}, 20 - -#define DOMAIN_CODE_5G_IC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 - -#define DOMAIN_CODE_5G_KCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161}, 19 - -#define DOMAIN_CODE_5G_MKK1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define DOMAIN_CODE_5G_MKK2 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_MKK3 \ - {100,104,108,112,116,120,124,128,132,136,140}, 11 -#define DOMAIN_CODE_5G_MKK4 \ - {36,40,44,48}, 4 - -#define DOMAIN_CODE_5G_NCC1 \ - {56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 16 -#define DOMAIN_CODE_5G_NCC2 \ - {56,60,64,149,153,157,161,165}, 8 -#define DOMAIN_CODE_5G_NCC3 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_NCC4 \ - {52,56,60,64,100,104,108,112,116,132,136,140,149,153,157,161,165}, 17 -#define DOMAIN_CODE_5G_WHQL_WFD \ - {36,40,44,48,149,157,165}, 7 -#define UNDEFINED \ - {0}, 0 - -// -// Note: -// (1) I merge Default Channel Plan to here because I think channel plans are global defintions -// which shall not depend on ICs or customized requests (ex. scan period, passive scan, -// join actions, etc.). If the channel plans depend on the ICs, we should take care of the mp kits -// for all ICs. And we take a large risk to maintain different channel plans for differnet ICs. -// (2) We shall not add/modify the channel plans excpet when the channels in the channel plan -// are different from the existing channel plan. -// (3) All extra infomation about the channel plan for customized requests should not put into the -// definitions of the DefaultChannelPlan, and instead, keep the information in the -// RT_CHNL_LIST_ENTRY when we construct the RT_CHANNEL_LIST. To compatible with the -// past customized requests, I merge old customized channel plan in the RtConstructChannelList(). -// By Bruce, 2008-09-01. -// - - -static RT_CHANNEL_PLAN DefaultChannelPlan[RT_CHANNEL_DOMAIN_MAX] = { -#if (DFS_TEST_CHNL_PLAN == 1) - // The channel plan is for DFS test only. - //4 #00 EFUSE_00h: RT_CHANNEL_DOMAIN_FCC - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,124,128,149,153,157,161,165} ,28, UNDEFINED, UNDEFINED}, -#else - //4 #00 EFUSE_00h: RT_CHANNEL_DOMAIN_FCC - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} ,35, UNDEFINED, UNDEFINED}, -#endif - //4 #01 EFUSE_01h: RT_CHANNEL_DOMAIN_IC - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165} , 31, UNDEFINED, UNDEFINED}, - - //4 #02 EFUSE_02h: RT_CHANNEL_DOMAIN_ETSI - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,100,104,108,112,116,120,124,128,132,136,140} , 31, UNDEFINED, UNDEFINED}, - - //4 #03 EFUSE_03h: RT_CHANNEL_DOMAIN_SPAIN - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #04 EFUSE_04h: RT_CHANNEL_DOMAIN_FRANCE - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #05 EFUSE_05h: RT_CHANNEL_DOMAIN_MKK - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #06 EFUSE_06h: RT_CHANNEL_DOMAIN_MKK1 - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #07 EFUSE_07h: RT_CHANNEL_DOMAIN_ISRAEL - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64} , 21, UNDEFINED, UNDEFINED}, - - //4 #08 EFUSE_08h: RT_CHANNEL_DOMAIN_TELEC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64} , 22, UNDEFINED, UNDEFINED}, - - //4 #09 EFUSE_09h: RT_CHANNEL_DOMAIN_MIC - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64} , 21, UNDEFINED, UNDEFINED}, - - //4 #10 EFUSE_0Ah: RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14} , 14, UNDEFINED, UNDEFINED}, - - //4 #11 EFUSE_0Bh: RT_CHANNEL_DOMAIN_WORLD_WIDE_13 - {{1,2,3,4,5,6,7,8,9,10,11,12,13} , 13, UNDEFINED, UNDEFINED}, - - //4 #12 EFUSE_0Ch: RT_CHANNEL_DOMAIN_TAIWAN - {{1,2,3,4,5,6,7,8,9,10,11,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165} , 26, UNDEFINED, UNDEFINED}, - - //4 #13 EFUSE_0Dh: RT_CHANNEL_DOMAIN_CHIAN - {{1,2,3,4,5,6,7,8,9,10,11,12,13,149,153,157,161,165} , 18, UNDEFINED, UNDEFINED}, - - //4 #14 EFUSE_0Eh: RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64,149,153,157,161,165} , 24, UNDEFINED, UNDEFINED}, - - //4 #15 EFUSE_0Fh: RT_CHANNEL_DOMAIN_KOREA - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165} , 33, UNDEFINED, UNDEFINED}, - - //4 #16 EFUSE_10h: RT_CHANNEL_DOMAIN_TURKEY - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,52,56,60,64} , 19, UNDEFINED, UNDEFINED}, - - //4 #17 EFUSE_11h: RT_CHANNEL_DOMAIN_JAPAN - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140} , 32, UNDEFINED, UNDEFINED}, - - //4 #18 EFUSE_12h: FCC_No_DFS - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,149,153,157,161,165} , 20, UNDEFINED, UNDEFINED}, - - //4 #19 EFUSE_13h: Japan_No_DFS - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48} , 17, UNDEFINED, UNDEFINED}, - - //4 #20 EFUSE_14h: WORLD_WIDE_5G // RT_CHANNEL_DOMAIN_WORLD_WIDE_5G - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} , 37, UNDEFINED, UNDEFINED}, - - //4 #21 Taiwan_No_DFS // RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS - {{1,2,3,4,5,6,7,8,9,10,11,56,60,64,149,153,157,161,165},19, UNDEFINED, UNDEFINED}, - - //4 #22 EFUSE_16h Default 7F: RealtekReserved // RT_CHANNEL_DOMAIN_DEFAULT - // 2013/01/29 MH According to new definition from RF team, RTK default channel plan will support all CH. - {{1,2,3,4,5,6,7,8,9,10,11,12,13,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165},37, UNDEFINED, UNDEFINED}, - - //4 #23 EFUSE_17h OmniPeek-All-Channel (RT_CHANNEL_DOMAIN_OMNIPEEK_ALL_CHANNEL): 2.4G and 5G now - {{1,2,3,4,5,6,7,8,9,10,11,12,13,14,36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165},38, UNDEFINED, UNDEFINED}, - - //4 #24 RT_CHANNEL_DOMAIN_WHQL - {{1,2,3,4,5,6,7,8,9,10,11,36,40,44,48,149,157,165} , 18, UNDEFINED, UNDEFINED}, - -//1 ============= New definition supports 2.4G and 5G ============= - - // #25 EFUSE_20h: RT_CHANNEL_DOMAIN_WW13_2G 2.4G World Wide 13 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, UNDEFINED}, - - // #26 EFUSE_21h: RT_CHANNEL_DOMAIN_EUROPE_2G 2.4G Europe - {UNDEFINED, DOMAIN_CODE_2G_ETSI1, UNDEFINED}, - - // #27 EFUSE_22h: RT_CHANNEL_DOMAIN_US_2G 2.4G US - {UNDEFINED, DOMAIN_CODE_2G_FCC1, UNDEFINED}, - - // #28 EFUSE_23h: RT_CHANNEL_DOMAIN_JAPAN_2G 2.4G Japan - {UNDEFINED, DOMAIN_CODE_2G_MKK1, UNDEFINED}, - - // #29 EFUSE_24h: RT_CHANNEL_DOMAIN_FRANCE_2G 2.4G France - {UNDEFINED, DOMAIN_CODE_2G_ETSI2, UNDEFINED}, - - // #30 EFUSE_25h: RT_CHANNEL_DOMAIN_US_2G_5G 2.4G/5G US - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC1}, - - // #31 EFUSE_26h: RT_CHANNEL_DOMAIN_WW13_2G_EUROPE_5G 2.4G World Wide 13 + 5G Europe - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI1}, - - // #32 EFUSE_27h: RT_CHANNEL_DOMAIN_JAPAN_2G_5G 2.4G/5G Japan - {UNDEFINED, DOMAIN_CODE_2G_MKK1, DOMAIN_CODE_5G_MKK1}, - - // #33 EFUSE_28h: RT_CHANNEL_DOMAIN_WW13_2G_KOREA_5G 2.4G World Wide 13 + 5G Korea - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_KCC1}, - - // #34 EFUSE_29h: RT_CHANNEL_DOMAIN_WW13_2G_US_5G 2.4G World Wide 13 + 5G US/DFS Channels - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC2}, - - // #35 EFUSE_30h: RT_CHANNEL_DOMAIN_WW13_2G_INDIA_5G 2.4G World Wide 13 + 5G India/Mexico - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC3}, - - // #36 EFUSE_31h: RT_CHANNEL_DOMAIN_WW13_2G_VENEZUELA_5G 2.4G World Wide 13 + 5G Venezuela - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC4}, - - // #37 EFUSE_32h: RT_CHANNEL_DOMAIN_WW13_2G_CHINA_5G 2.4G World Wide 13 + 5G China - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC5}, - - // #38 EFUSE_33h: RT_CHANNEL_DOMAIN_WW13_2G_ISRAEL_5G 2.4G World Wide 13 + 5G Israel - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_FCC6}, - - // #39 EFUSE_34h: RT_CHANNEL_DOMAIN_US_2G_CANADA_5G 2.4G US + 5G US/Canada - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC7}, - - // #40 EFUSE_35h: RT_CHANNEL_DOMAIN_WW13_2G_AUSTRALIA_5G 2.4G World Wide 13 + 5G Australia/New Zealand - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI2}, - - // #41 EFUSE_36h: RT_CHANNEL_DOMAIN_WW13_2G_RUSSIA_5G 2.4G World Wide 13 + 5G Russia - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI3}, - - // #42 EFUSE_37h: RT_CHANNEL_DOMAIN_JAPAN_2G_W52_W53_5G 2.4G Japan + 5G Japan(W52, W53) - {UNDEFINED, DOMAIN_CODE_2G_MKK1, DOMAIN_CODE_5G_MKK2}, - - // #43 EFUSE_38h: RT_CHANNEL_DOMAIN_JAPAN_2G_W56_5G - {UNDEFINED, DOMAIN_CODE_2G_MKK1, DOMAIN_CODE_5G_MKK3}, - - // #44 EFUSE_39h: RT_CHANNEL_DOMAIN_US_2G_TAIWAN_5G - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_NCC1}, - - // #45 EFUSE_40h: RT_CHANNEL_DOMAIN_US_2G_TAIWAN_DFS_5G - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_NCC2}, - - // #46 EFUSE_41h: RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN_2G - {UNDEFINED, DOMAIN_CODE_2G_GLOBAL, UNDEFINED}, - - // #47 EFUSE_42h: RT_CHANNEL_DOMAIN_2G_ETSI1_5G_ETSI4 - {UNDEFINED, DOMAIN_CODE_2G_ETSI1, DOMAIN_CODE_5G_ETSI4}, - - // #48 EFUSE_43h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC2 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC2}, - - // #49 EFUSE_44h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_NCC3 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_NCC3}, - - // #50 EFUSE_45h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI5 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI5}, - - // #51 EFUSE_46h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC8 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC8}, - - // #52 EFUSE_47h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI6 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI6}, - - // #53 EFUSE_48h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI7 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI7}, - - // #54 EFUSE_49h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI8 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI8}, - - // #55 EFUSE_50h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI9 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI9}, - - // #56 EFUSE_51h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI10 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI10}, - - // #57 EFUSE_52h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI11 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI11}, - - // #58 EFUSE_53h: RT_CHANNEL_DOMAIN_WW13_2G_5G_NCC4 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_NCC4}, - - // #59 EFUSE_54h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI12 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI12}, - - // #60 EFUSE_55h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC9 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC9}, - - // #61 EFUSE_56h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI13 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI13}, - - // #62 EFUSE_57h: RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC10 - {UNDEFINED, DOMAIN_CODE_2G_FCC1, DOMAIN_CODE_5G_FCC10}, - - // #63 EFUSE_58h: RT_CHANNEL_DOMAIN_2G_MKK2_5G_MKK4 - {UNDEFINED, DOMAIN_CODE_2G_MKK2, DOMAIN_CODE_5G_MKK4}, - - // #64 EFUSE_59h: RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI14 - {UNDEFINED, DOMAIN_CODE_2G_WORLD, DOMAIN_CODE_5G_ETSI14}, - - //1 ============= End of customer definition ============= - - //4 RT_CHANNEL_DOMAIN_WHQL_WFD - {UNDEFINED, DOMAIN_CODE_2G_WHQL_WFD, DOMAIN_CODE_5G_WHQL_WFD}, - -//1 ============= End of New definition ============= -}; - -/*------------------------Private of Protected Funtion Declaration-------------------------------------*/ -// The following function are called only in Dot11d.c -BOOLEAN -RtConstructChannelList( - IN PADAPTER pAdapter - ); -PRT_CHNL_LIST_ENTRY -RtGetChnlListEntry( - IN PADAPTER pAdapter, - IN u1Byte Channel - ); - -BOOLEAN -RtConstructScanList( - IN PADAPTER pAdapter - ); - -VOID -RtCalcScanStatistic( - IN PADAPTER pAdapter - ); - -VOID -RtCalcScanPeriod( - IN PADAPTER pAdapter - ); - -#if DBG -VOID -DumpChannelList( - IN PADAPTER pAdapter - ); - -VOID -DumpScanChannelList( - IN PADAPTER pAdapter - ); -#else - #define DumpChannelList(_pAdapter) - #define DumpScanChannelList(_pAdapter) -#endif -/*------------------------ End of Private of Protected Funtion Declaration------------------------------*/ - -//------------------------------------------------------------------------------ -// Debug routines. -//------------------------------------------------------------------------------ -#if DBG -VOID -DumpChannelList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - u1Byte i; - - FunctionIn(COMP_SCAN); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Channel Plan: ChannelLen %d\n", pChannelList->ChannelLen)); - for(i = 0; i < pChannelList->ChannelLen; i ++) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%d ", pChannelList->ChnlListEntry[i].ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("##Channel: %d\n", pChannelList->ChnlListEntry[i].ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("##ScanType: %d\n", pChannelList->ChnlListEntry[i].ScanType)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("##ScanPeriod: %d\n", pChannelList->ChnlListEntry[i].ScanPeriod)); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("##MaxTxPwrDbm: %d\n", pChannelList->ChnlListEntry[i].MaxTxPwrDbm)); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("##ExInfo: %X\n", pChannelList->ChnlListEntry[i].ExInfo)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); - } - RT_TRACE(COMP_SCAN, DBG_TRACE, ("\n")); - - FunctionOut(COMP_SCAN); - -} - -VOID -DumpScanChannelList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - u1Byte i; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Scan List: (len = %d) ", pChannelList->ScanChannelListLength)); - for(i = 0; i < pChannelList->ScanChannelListLength; i ++) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%d ", pChannelList->ScanChannelList[i]->ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n")); -} - -#endif - -// <20140311, Kordan> Knuth Shuffle Algorithm -// Please refer to http://rosettacode.org/wiki/Knuth_shuffle#C - -void _shuffle(PRT_CHNL_LIST_ENTRY *list, u1Byte len) { - u4Byte j; - PRT_CHNL_LIST_ENTRY tmp; - - while(len) { - j = (u4Byte)(PlatformGetCurrentTime()%len); - if (j != len - 1) { - tmp = list[j]; - list[j] = list[len - 1]; - list[len - 1] = tmp; - } - len--; - } -} - -VOID -shuffleScanChannelList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - - if(pChannelList == NULL) - return; - else if(pChannelList->ScanChannelListLength == 0) - return; - - _shuffle(pChannelList->ScanChannelList, pChannelList->ScanChannelListLength-1); -} - - -// -// Description: -// Reset to the state as we are just entering a regulatory domain. -// -VOID -Dot11d_Reset( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - - if(!pDot11dInfo->bEnabled) - return; - - pDot11dInfo->State = DOT11D_STATE_NONE; - pDot11dInfo->CountryIeLen = 0; - pDot11dInfo->ChnlListLen = 0; - RESET_CIE_WATCHDOG(pMgntInfo); - - RtResetChannelList(GET_RT_CHANNEL_LIST(pMgntInfo)); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Dot11d_Reset()\n")); - AddDrvLog(pAdapter, LID_DOT11D_RESET, NULL, 0); -} - -// -// Description: -// Update country IE from Beacon or Probe Resopnse -// and configure PHY for operation in the regulatory domain. -// -// TODO: -// Configure Tx power. -// -// Assumption: -// 1. IS_DOT11D_ENABLE() is TRUE. -// 2. Input IE is an valid one. -// -VOID -Dot11d_UpdateCountryIe( - IN PADAPTER pAdapter, - IN pu1Byte pTaddr, - IN POCTET_STRING posCoutryIe - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - u1Byte i, j, NumTriples, MaxChnlNum, ChnlListLen; - PCHNL_TXPOWER_TRIPLE pTriple; - - MaxChnlNum = 0; - ChnlListLen = 0; - NumTriples = (posCoutryIe->Length - 3) / 3; // skip 3-byte country string. - pTriple = (PCHNL_TXPOWER_TRIPLE)(posCoutryIe->Octet + 3); - - if(posCoutryIe->Length > MAX_IE_LEN) - return; - - for(i = 0; i < NumTriples; i++) - { - if(MaxChnlNum >= pTriple->FirstChnl) - { // It is not in a monotonically increasing order, so stop processing. - RT_TRACE(COMP_SCAN, DBG_WARNING, ("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........\n")); - return; - } - - if((pTriple->NumChnls+ChnlListLen) > DOT11D_MAX_CHNL_NUM) - {// To prevent malicious attack. Added by Roger, 2010.02.24. - RT_TRACE(COMP_SCAN, DBG_WARNING, ("Dot11d_UpdateCountryIe(): Invalid channel list length, skip it........\n")); - return; - } - - for(j = 0 ; j < pTriple->NumChnls; j++) - { - pDot11dInfo->ChnlList[ChnlListLen] = (pTriple->FirstChnl + j); - pDot11dInfo->MaxTxPwrDbmList[ChnlListLen] = pTriple->MaxTxPowerInDbm; - MaxChnlNum = pDot11dInfo->ChnlList[ChnlListLen];// Keep tracking maximal channel number. - ChnlListLen++; - } - pTriple = (PCHNL_TXPOWER_TRIPLE)((pu1Byte)pTriple + 3); - } - pDot11dInfo->ChnlListLen = ChnlListLen; - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, "Dot11d_UpdateCountryIe(): Channel List:", - pDot11dInfo->ChnlList, pDot11dInfo->ChnlListLen); - - UPDATE_CIE_SRC(pMgntInfo, pTaddr); - - pDot11dInfo->CountryIeLen = posCoutryIe->Length; - PlatformMoveMemory( - pDot11dInfo->CountryIeBuf, - posCoutryIe->Octet, - pDot11dInfo->CountryIeLen); - pDot11dInfo->State = DOT11D_STATE_LEARNED; - - RT_PRINT_STR(COMP_SCAN, DBG_LOUD, "Dot11d_UpdateCountryIe(): Country Code", &pDot11dInfo->CountryIeBuf[0], 3); - RT_PRINT_DATA(COMP_SCAN, DBG_TRACE, "Dot11d_UpdateCountryIe(): Country IE:", - pDot11dInfo->CountryIeBuf, pDot11dInfo->CountryIeLen); - AddDrvLog(pAdapter, LID_DOT11D_GET_COUNTRY_IE, pDot11dInfo->CountryIeBuf, pDot11dInfo->CountryIeLen); -} - - -// -// Assumption: -// 1. IS_DOT11D_ENABLE() is TRUE. -// 2. Channel numbers in s_MaxChnlList[] or pDot11dInfo->ChnlList -// are monotonically increasing. -// -u1Byte -Dot11d_GetChannelList( - IN PADAPTER Adapter, - OUT pu1Byte* ppChnlList - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - pu1Byte pChnlList; - u1Byte ChnlListLen, First5gChnlIdx; - - if(IS_COUNTRY_IE_VALID(pMgntInfo)) - { - ChnlListLen = pDot11dInfo->ChnlListLen; - pChnlList = pDot11dInfo->ChnlList; - } - else - { - ChnlListLen = sizeof(s_MaxChnlList); - pChnlList = s_MaxChnlList; - } - - for(First5gChnlIdx = 0; First5gChnlIdx < ChnlListLen; First5gChnlIdx++) - { - if(pChnlList[First5gChnlIdx] > 14) - break; // 1st A band channel bound - } - - if(IS_5G_WIRELESS_MODE(pMgntInfo->dot11CurrentWirelessMode)) - { - pChnlList += First5gChnlIdx; - ChnlListLen -= First5gChnlIdx; - } - else - ChnlListLen = First5gChnlIdx; - - if(ChnlListLen == 0) - *ppChnlList = NULL; - else - *ppChnlList = pChnlList; - - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, "Dot11d_GetChannelList: ", *ppChnlList, ChnlListLen); - - return ChnlListLen; -} - - -s4Byte -DOT11D_GetMaxTxPwrInDbm( - IN PADAPTER Adapter, - IN u1Byte Channel - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - s4Byte MaxTxPwrInDbm = UNSPECIFIED_PWR_DBM; - u4Byte ChnlIdx = 0; - - for(ChnlIdx = 0; ChnlIdx < pDot11dInfo->ChnlListLen; ChnlIdx++) - { - if(Channel == pDot11dInfo->ChnlList[ChnlIdx]) - { - MaxTxPwrInDbm = (s4Byte)pDot11dInfo->MaxTxPwrDbmList[ChnlIdx]; - break; - } - } - - return MaxTxPwrInDbm; -} - - -VOID -DOT11D_ScanComplete( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - - switch(pDot11dInfo->State) - { - case DOT11D_STATE_LEARNED: - pDot11dInfo->State = DOT11D_STATE_DONE; - - // Reset the channel list because dot11d has changed. - RtResetChannelList(GET_RT_CHANNEL_LIST(pMgntInfo)); - break; - - case DOT11D_STATE_DONE: - if( GET_CIE_WATCHDOG(pMgntInfo) == 0 ) - { // Reset country IE if previous one is gone. - Dot11d_Reset(Adapter); - } - break; - - default: //MacOS warning:enum value "DOT11D_STATE_NONE" not handled in switch - break; - } - -} - -// -// Description: -// The interface for all channel list actions. -// Update the current channel list according to the input status code. -// Arguments: -// Adapter - -// NIC adapter context pointer. -// ActionCode - -// An u4Byte number enumered in RT_CHNL_LIST_ACTION. -// pInputBuf - -// The input buffer as a pointer. -// pOutputBuf - -// The output buffer as a pointer. -// Return Value: -// TRUE if this action is complete, or retrun FALSE. -// By Bruce, 2008-09-09. -// -BOOLEAN -RtActChannelList( - IN PADAPTER pAdapter, - IN u4Byte ActionCode, - IN PVOID pInputBuf, - OUT PVOID pOutputBuf - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - BOOLEAN bResult = TRUE; - - switch(ActionCode) - { - case RT_CHNL_LIST_ACTION_INIT: - RtResetChannelList(GET_RT_CHANNEL_LIST(pMgntInfo)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_RESET\n")); - break; - - case RT_CHNL_LIST_ACTION_CONSTRUCT: - bResult = RtConstructChannelList(pAdapter); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_CONSTRUCT\n")); - break; - - case RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST: - { - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST IS_CHANNEL_LIST_VALID FALSE\n")); - - RtConstructChannelList(pAdapter); - // Because RtConstructChannelList() will reset the scan list, so we construct again - bResult = RtConstructScanList(pAdapter); - RT_ASSERT(bResult, ("RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST fail!!\n")); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - } - - // Save the channel list address to the output context. - if(pOutputBuf) - *((PRT_CHANNEL_LIST*)pOutputBuf) = GET_RT_CHANNEL_LIST(pMgntInfo); - } - // RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST\n")); - break; - case RT_CHNL_LIST_ACTION_UPDATE_CHANNEL: - case RT_CHNL_LIST_ACTION_ADD_CHANNEL: - { - PRT_CHNL_LIST_ENTRY pChannelUpdateInfo = (PRT_CHNL_LIST_ENTRY)pInputBuf; - PRT_CHNL_LIST_ENTRY pChnlListEntry; - - if(!pChannelUpdateInfo) - { - bResult = FALSE; - break; - } - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_UPDATE(ADD)_CHANNEL IS_CHANNEL_LIST_VALID FALSE\n")); - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - RtConstructChannelList(pAdapter); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - } - - pChnlListEntry = RtGetChnlListEntry(pAdapter, pChannelUpdateInfo->ChannelNum); - - if(!pChnlListEntry) - { // No this channel, add into the channel list - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - if(pChannelList->ChannelLen < MAX_CHANNEL_NUM) - { - PlatformMoveMemory(&(pChannelList->ChnlListEntry[pChannelList->ChannelLen]), pChannelUpdateInfo, sizeof(RT_CHNL_LIST_ENTRY)); - pChannelList->ChannelLen ++; - } - else - { - bResult = FALSE; - break; - } - } - else - { - PlatformMoveMemory(pChnlListEntry, pChannelUpdateInfo, sizeof(RT_CHNL_LIST_ENTRY)); - } - } - // RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_UPDATE(ADD)_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_DEL_CHANNEL: - { - u1Byte Channel = *((pu1Byte)pInputBuf); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - u1Byte i; - - bResult = FALSE; - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - if(pChannelList->ChnlListEntry[i].ChannelNum == Channel) - { - for(i=i; i < pChannelList->ChannelLen; i ++) - { - PlatformMoveMemory(&(pChannelList->ChnlListEntry[i]), &(pChannelList->ChnlListEntry[i + 1]), sizeof(RT_CHNL_LIST_ENTRY)); - } - bResult = TRUE; - break; - } - } - } - // RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_DELETE_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_GET_CHANNEL: - { - u1Byte Channel = *((pu1Byte)pInputBuf); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL IS_CHANNEL_LIST_VALID FALSE\n")); - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - RtConstructChannelList(pAdapter); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - } - - if((pChnlListEntry = RtGetChnlListEntry(pAdapter, Channel)) != NULL) - { - if(pChnlListEntry->ChannelNum == Channel) - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = pChnlListEntry; - else - { - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - bResult = FALSE; - } - } - else - { - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - bResult = FALSE; - } - } - // RT_TRACE(COMP_SCAN, DBG_TRACE, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST: - { - if(!IS_CHANNEL_LIST_VALID(pMgntInfo)) - RtConstructChannelList(pAdapter); - - bResult = RtConstructScanList(pAdapter); - } - //RT_ASSERT(bResult, ("RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST fail!!\n")); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST\n")); - break; - - case RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL: - { - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - pChnlListEntry = RtPopScanChannel(pChannelList); - if(pChnlListEntry) - { - bResult = TRUE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = pChnlListEntry; - } - else - { - bResult = FALSE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - } - } - // RT_TRACE(COMP_SCAN, DBG_TRACE, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL\n")); - break; - - case RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL: - { - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - pChnlListEntry = RtGetScanChannel(pChannelList); - if(pChnlListEntry) - { - bResult = TRUE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = pChnlListEntry; - } - else - { - bResult = FALSE; - *((PRT_CHNL_LIST_ENTRY*)pOutputBuf) = NULL; - } - - if(pChannelList != NULL) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RtActChannelList(): <=====RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL index %d length %d channellength %d\n", pChannelList->ScanChannelIndex, pChannelList->ScanChannelListLength, pChannelList->ChannelLen)); - } - break; - - case RT_CHNL_LIST_ACTION_GET_CHANNEL_PLAN: - { - if(pInputBuf) - *(RT_CHANNEL_PLAN **)pOutputBuf = &DefaultChannelPlan[*(RT_CHANNEL_DOMAIN *)pInputBuf]; - } - break; - - default: - bResult = FALSE; - RT_TRACE(COMP_SCAN, DBG_WARNING, ("RtActChannelList(): NO RT_CHNL_LIST_ACTION!!!\n")); - break; - } - - return bResult; -} - -// -// Description: -// Find the channel information in the channel list and retrun the address. -// By Bruce, 2008-09-09. -// -PRT_CHNL_LIST_ENTRY -RtGetChnlListEntry( - IN PADAPTER pAdapter, - IN u1Byte Channel - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry; - int i = 0; - - if(pChannelList->ChannelLen == 0) - return NULL; - - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - if(pChannelList->ChnlListEntry[i].ChannelNum == Channel) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - return pChnlListEntry; - } - } - - return NULL; -} - -u1Byte -RtCustomizeChannelList( - PMGNT_INFO pMgntInfo, - u1Byte ChannelPlan, - u1Byte ChannelLen, - PRT_CHNL_LIST_ENTRY pChnlList - ) -{ - u1Byte i; - PRT_CHNL_LIST_ENTRY pChnlListEntry; - - //3 // Put Customized Action here... - switch(ChannelPlan) - { - case RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN: - case RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN_2G: // 2G global domain. - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - - // (1) Start IBSS at channel 1~11. - // (2) Join IBSS at channel 1~11. - if(pChnlListEntry->ChannelNum >= 12 && pChnlListEntry->ChannelNum <= 14) - { - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_NO_IBSS_JOIN; - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_NO_IBSS_START; - } - else - { - pChnlListEntry->ExInfo &= ~CHANNEL_EXINFO_NO_IBSS_JOIN; - pChnlListEntry->ExInfo &= ~CHANNEL_EXINFO_NO_IBSS_START; - } - - // (3) Channel 1~11 is active, and 12~14 is passive when dot11 is not learned yet. - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { - if(pChnlListEntry->ChannelNum >= 1 && pChnlListEntry->ChannelNum <= 11) - { - pChnlListEntry->ScanType = SCAN_ACTIVE; - pChnlListEntry->ScanPeriod = DEFAULT_ACTIVE_SCAN_PERIOD; - } - - if((pChnlListEntry->ChannelNum >= 12 && pChnlListEntry->ChannelNum <= 14)) - { - pChnlListEntry->ScanType = SCAN_PASSIVE; - pChnlListEntry->ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - } - } - break; - - case RT_CHANNEL_DOMAIN_WORLD_WIDE_13: - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - - // (1) Channel 14 is disable - if(pChnlListEntry->ChannelNum == 14) - { - for(++ i; i < ChannelLen; i ++) - { - PlatformMoveMemory(&(pChnlList[i - 1]), &(pChnlList[i]), sizeof(RT_CHNL_LIST_ENTRY)); - } - ChannelLen --; - break; - } - - // (2) Join IBSS at channel 1~11. - // (3) Start IBSS at channel 1~11. - // (4) channel 12~13, passive scan - if(pChnlListEntry->ChannelNum >= 12 && pChnlListEntry->ChannelNum <= 13) - { - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_JOIN); - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_START); - pChnlListEntry->ScanType = SCAN_MIX; - pChnlListEntry->ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - } - break; - case RT_CHANNEL_DOMAIN_DEFAULT://For Realtek default setting - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - - // (2) Join IBSS at channel 1~11. - // (3) Start IBSS at channel 1~11. - // (4) channel 12~13, passive scan - if(pChnlListEntry->ChannelNum <=13 && pChnlListEntry->ChannelNum >= 12) - { - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_JOIN); - pChnlListEntry->ExInfo |= (CHANNEL_EXINFO_NO_IBSS_START); - pChnlListEntry->ScanType = SCAN_MIX; - pChnlListEntry->ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - } - break; - - default: - break; - } - - switch(pMgntInfo->CustomerID) - { - - - case RT_CID_WHQL: - { - for(i = 0; i < ChannelLen; i ++) - { - pChnlListEntry = &(pChnlList[i]); - pChnlListEntry->ScanPeriod = SCAN_PERIOD_Long_Win_DTM; - } - } - break; - - default: - break; - } - - return ChannelLen; -} - -VOID -_ForcedChannelPlan( - PMGNT_INFO pMgntInfo, - BOOLEAN bIs5G, - pu1Byte pChnlList, - pu1Byte pChannelLen - ) -{ - ps1Byte s = (ps1Byte)((bIs5G) ? pMgntInfo->RegChannelPlan5G.Octet : - pMgntInfo->RegChannelPlan2G.Octet); - u2Byte len = ((bIs5G) ? pMgntInfo->RegChannelPlan5G.Length : - pMgntInfo->RegChannelPlan2G.Length); - u1Byte c = 0, n = 0, i = 0; - - RT_TRACE( COMP_INIT, DBG_LOUD, ("===> _ForcedChannelPlan\n")); - - if (bIs5G) - if (pMgntInfo->RegChannelPlan5G.bDefaultStr) - return; - else - if (pMgntInfo->RegChannelPlan2G.bDefaultStr) - return; - - PlatformZeroMemory(pChnlList, *pChannelLen); - *pChannelLen = 0; - - for (i = 0; i < len; ++i, ++s) { - while (*s != ',' && *s >= '0' && *s <= '9') { - c = 10 * c + (*s - '0'); - s++, i++; - } - pChnlList[n++] = c; - c = 0; - } - - *pChannelLen = n; - - RT_TRACE( COMP_INIT, DBG_LOUD, ("<=== _ForcedChannelPlan\n")); -} - -// -// Description: -// (Re-)Construct the channel list by 11d or default channel plan. -// Note: -// We collect all customized requests of joining/scanning about each channel in here. -// By Bruce, 2008-09-09. -// -BOOLEAN -RtConstructChannelList( - IN PADAPTER pAdapter - ) -{ - pu1Byte pChnlList = NULL; - u1Byte ChnlsLen = 0, i = 0; - PRT_CHNL_LIST_ENTRY pChnlListEntry; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - RT_CHANNEL_DOMAIN ChannelPlan = GetDefaultMgntInfo(pAdapter)->ChannelPlan; - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - if(pAdapter->pNdis62Common != NULL) - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("port number %d \n", pAdapter->pNdis62Common->PortNumber)); - - if(ChannelPlan >= RT_CHANNEL_DOMAIN_MAX) // Channel Plan is invalid, fix it. - pMgntInfo->ChannelPlan = RT_CHANNEL_DOMAIN_FCC; - - RtResetChannelList(pChannelList); - - pChannelList->ChannelPlan = ChannelPlan; - - //3 // Dot11d or Default Channel Plan - if(IS_DOT11D_ENABLE(pMgntInfo)) - { // dot11d is enabled. - RT_SCAN_TYPE scanType = SCAN_ACTIVE; - - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { // domain learning is not complete - scanType = SCAN_PASSIVE; - } - - ChnlsLen = Dot11d_GetChannelList(pAdapter, &pChnlList); - - if(ChnlsLen > MAX_CHANNEL_NUM) - { - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - return FALSE; - } - - for(i = 0; i < ChnlsLen; i ++) - { - // Check if the channel is valid for the current wireless mode. - if(!CHNL_ValidForWirelessMode(pChnlList[i], (u2Byte)pMgntInfo->dot11CurrentWirelessMode)) - continue; - - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - - pChnlListEntry->ChannelNum = pChnlList[i]; - - // For 5G FCC Radar channel, default passive scan - if(DFS_5G_RADAR_CHANNEL(pChnlListEntry->ChannelNum)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("DFS_5G_RADAR_CHANNEL, 802.11d, set chnl %d to passive scan.\n", pChnlListEntry->ChannelNum)); - pChnlListEntry->ScanType = SCAN_PASSIVE; - DFS_StaInsertToRadarChnlList(pAdapter, pChnlListEntry->ChannelNum); - } - else - pChnlListEntry->ScanType = scanType; - - pChnlListEntry->ScanPeriod = (scanType == SCAN_ACTIVE) ? DEFAULT_ACTIVE_SCAN_PERIOD : DEFAULT_PASSIVE_SCAN_PERIOD; - pChnlListEntry->MaxTxPwrDbm = DOT11D_GetMaxTxPwrInDbm(pAdapter, pChnlListEntry->ChannelNum); - pChnlListEntry->ExInfo = 0; - - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { // domain learning is not complete, we cannot start IBSS. - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_NO_IBSS_START; - } - - pChannelList->ChannelLen ++; - } - - pChannelList->bDot11d = TRUE; - } - else - { // Normal Case - u1Byte usbswchnl; - RT_TRACE( COMP_SCAN, DBG_LOUD, ("_RT_CHANNEL_DOMAIN(0x%X) mapped from hal_MapChannelPlan: %s channel plan is applied.\n", - ChannelPlan, (ChannelPlan >= RT_CHANNEL_DOMAIN_WHQL)?"New":"Legacy")); - - if (ChannelPlan < RT_CHANNEL_DOMAIN_WW13_2G) - { - pChnlList = DefaultChannelPlan[pChannelList->ChannelPlan].Channel; - ChnlsLen = DefaultChannelPlan[pChannelList->ChannelPlan].Len; - } - else - { - if(IS_WIRELESS_MODE_5G(pAdapter)) - { - pChnlList = DefaultChannelPlan[pChannelList->ChannelPlan].Channel5G; - ChnlsLen = DefaultChannelPlan[pChannelList->ChannelPlan].Len5G; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===>RtConstructChannelList, DefaultChannelPlan[%d].Channel5G: ", pChannelList->ChannelPlan)); - } - else - { - pChnlList = DefaultChannelPlan[pChannelList->ChannelPlan].Channel2_4G; - ChnlsLen = DefaultChannelPlan[pChannelList->ChannelPlan].Len2_4G; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===>RtConstructChannelList, DefaultChannelPlan[%d].Channel2.4G: ", pChannelList->ChannelPlan)); - } - - } - - if (pMgntInfo->RegChannelPlan2G.bDefaultStr != TRUE || - pMgntInfo->RegChannelPlan5G.bDefaultStr != TRUE) - _ForcedChannelPlan(pMgntInfo, IS_WIRELESS_MODE_5G(pAdapter), pChnlList, &ChnlsLen); - - for(i = 0; i < ChnlsLen; i ++) - { - - // Check if the channel is valid for the current wireless mode. - if (!CHNL_ValidForWirelessMode(pChnlList[i], pMgntInfo->dot11CurrentWirelessMode)) - { - // RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("Skip channel (%d) for wirelessMode (%d)\n", pChnlList[i], pMgntInfo->dot11CurrentWirelessMode)); - continue; - } - - pChnlListEntry = &(pChannelList->ChnlListEntry[pChannelList->ChannelLen]); - - pChnlListEntry->ChannelNum = pChnlList[i]; - - // For 5G FCC Radar channel, default passive scan - if (DFS_5G_RADAR_CHANNEL(pChnlListEntry->ChannelNum)) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("DFS_5G_RADAR_CHANNEL, Non 802.11d, set chnl %d to passive scan.\n", pChnlListEntry->ChannelNum)); - pChnlListEntry->ScanType = SCAN_PASSIVE; - DFS_StaInsertToRadarChnlList(pAdapter, pChnlListEntry->ChannelNum); - } - else - { - if (pMgntInfo->RegPassiveScan && ChannelPlan == RT_CHANNEL_DOMAIN_DEFAULT) - { - // 0= by channel plan, 1=5g all passive scan / 2= 24g passive scan /3= 2/5g all passive scan - if (pMgntInfo->RegPassiveScan == 1 && pChnlListEntry->ChannelNum >= 36) - { - RT_TRACE( COMP_DFS, DBG_LOUD, ("CHNL-%d passive scan", pChnlListEntry->ChannelNum)); - pChnlListEntry->ScanType = SCAN_PASSIVE; - } - else if (pMgntInfo->RegPassiveScan == 2 && pChnlListEntry->ChannelNum <= 14) - { - pChnlListEntry->ScanType = SCAN_PASSIVE; - } - else if (pMgntInfo->RegPassiveScan == 3) - { - pChnlListEntry->ScanType = SCAN_PASSIVE; - } - else - { - pChnlListEntry->ScanType = SCAN_ACTIVE; - } - } - else - pChnlListEntry->ScanType = SCAN_ACTIVE; - - } - - if(pAdapter->bInHctTest) - pChnlListEntry->ScanPeriod = SCAN_PERIOD_Long_Win_DTM; - else - { - { - pChnlListEntry->ScanPeriod = DEFAULT_ACTIVE_SCAN_PERIOD; - } - } - pChnlListEntry->MaxTxPwrDbm = UNSPECIFIED_PWR_DBM; - pChnlListEntry->ExInfo = 0; - - pChannelList->ChannelLen ++; - } - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===>RtConstructChannelList, ChannelList: ")); - for (i = 0; i < pChannelList->ChannelLen; ++i) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%d ", (pChannelList->ChnlListEntry[i]).ChannelNum)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("\n ")); - } - - pChannelList->WirelessMode = pMgntInfo->dot11CurrentWirelessMode; - - pChannelList->ChannelLen = RtCustomizeChannelList(pMgntInfo, pChannelList->ChannelPlan, pChannelList->ChannelLen, pChannelList->ChnlListEntry); - - // Increase the weighted channel - #ifdef USE_SMART_SCAN - { - u1Byte WeightedChannel[3] = {1, 6, 11}; - - for(i = 0; i < 3; i ++) - { - if((pChnlListEntry = RtGetChnlListEntry(pAdapter, WeightedChannel[i])) != NULL) - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_WEIGHTED_SCAN_PERIOD; - } - } - #endif // #ifdef USE_SMART_SCAN - - if(!pAdapter->bInHctTest) - { - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - pChnlListEntry->ScanPeriod = SCAN_PERIOD_Long; - } - } - - DumpChannelList(pAdapter); - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - FunctionOut(COMP_SCAN); - - return TRUE; -} - -u1Byte -RtGetConnectedChannels( - IN PADAPTER pAdapter, - OUT pu1Byte ConnectedChannels, - IN u1Byte maxChnlArrayNum -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u1Byte uNumberOfConnectedChannel = 0; - u1Byte i = 0; - BOOLEAN bDuplicate = FALSE; - - if(0 == (uNumberOfConnectedChannel = MultiChannelGetConnectedChannels( - pAdapter, - ConnectedChannels, - maxChnlArrayNum))) - { - ConnectedChannels[uNumberOfConnectedChannel++] = pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber; - } - - // Let AP can serve the Client During scanning ------------------------------------------------------------------- - if(IsAPModeExist(pDefaultAdapter)) - { - bDuplicate = FALSE; - - for(i = 0; i < uNumberOfConnectedChannel; i++) - { - if(ConnectedChannels[i] == pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber) - { - bDuplicate = TRUE; - break; - } - } - - if(bDuplicate == FALSE) - { - ConnectedChannels[uNumberOfConnectedChannel++] = pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber; - } - } - // -------------------------------------------------------------------------------------------------------- - - - return uNumberOfConnectedChannel; -} - - - -// -// Description: -// (Re-)Construct the scan channel list. -// Any customized request about scanning can be put here. -// By Bruce, 2008-09-09. -// -BOOLEAN -RtConstructScanList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL, pFinalChnlListEntry = NULL; - u2Byte i, j, k; - - u1Byte ConnectedChannels[MAX_SCAN_CHANNEL_NUM]; - u1Byte uNumberOfConnectedChannel = 0; - - const u1Byte CountForAddConnectedChannel = 2; - u1Byte uAccumulatedCountForAdd = 0; - - u1Byte BackupScanChannelListLength; - PRT_CHNL_LIST_ENTRY BackupScanChannelList[MAX_SCAN_CHANNEL_NUM]; - BOOLEAN bRet = FALSE; - - if(pAdapter->pNdis62Common != NULL) - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("port number %d \n", pAdapter->pNdis62Common->PortNumber)); - - PlatformAcquireSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - RtResetScanChannel(pChannelList); - - RtCalcScanStatistic(pAdapter); - RtCalcScanPeriod(pAdapter); - - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("ChannelLen %d \n", pChannelList->ChannelLen)); - - if(pDefaultAdapter->bInWFDTest && pDefaultAdapter->MgntInfo.WFDOpChannel != 0) - { - // Rearrange scan channel(one based) - for(i = 0; i < pChannelList->ChannelLen; i ++) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - - if(pChnlListEntry->ChannelNum == pDefaultAdapter->MgntInfo.WFDOpChannel) - { - RtInsertScanChannel(pChannelList, pChnlListEntry); - } - } - } - - // Rearrange scan channel(one based) - for(i = 0; i < CHANNEL_SCAN_CYCLE_NUM; i ++) - { - for(j = i; j < pChannelList->ChannelLen; j += CHANNEL_SCAN_CYCLE_NUM) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[j]); - - if(pChnlListEntry->ChannelNum == pMgntInfo->dot11CurrentChannelNumber) - { - //4 //Put ChannelNumBeforeScan at the end of the channel list - //4 //So we don't need to do channel switch after scan. - pFinalChnlListEntry = pChnlListEntry; - } - else - { - if(!pDefaultAdapter->bInWFDTest || - (pChnlListEntry->ChannelNum != pDefaultAdapter->MgntInfo.WFDOpChannel)) - RtInsertScanChannel(pChannelList, pChnlListEntry); - } - } - } - - if(pFinalChnlListEntry) - { - RtInsertScanChannel(pChannelList, pFinalChnlListEntry); - } - - //8192DE SMSP Dual Scan for Hidden SSID - if(pMgntInfo->bNeedSkipScan )//Add hidded ssid's channel to first place. - { - PRT_CHNL_LIST_ENTRY ptmpChnlListEntry = NULL; - ptmpChnlListEntry = (pChannelList->ScanChannelList[0]); - for(j = 1; j < pChannelList->ChannelLen; j ++) - { - pChnlListEntry = (pChannelList->ScanChannelList[j]); - - if(pChnlListEntry->ChannelNum == pMgntInfo->hiddenChannel) - { - pChannelList->ScanChannelList[0] = pChnlListEntry; - pChannelList->ScanChannelList[j] = ptmpChnlListEntry; - break; - } - } - } - - - // Construct Connected Channels: --------------------------------------------------------------- - uNumberOfConnectedChannel = RtGetConnectedChannels(pAdapter, ConnectedChannels, MAX_SCAN_CHANNEL_NUM); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s: uNumberOfConnectedChannel: %d\n", - __FUNCTION__, uNumberOfConnectedChannel) - ); - - for(i = 0; i < uNumberOfConnectedChannel; i++) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("%s: Connected Channel: %d\n", - __FUNCTION__, ConnectedChannels[i]) - ); - } - // ------------------------------------------------------------------------------------------ - - if(pMgntInfo->dot11CurrentChannelBandWidth == CHANNEL_WIDTH_20) //yangjun121019 - { - // Insert Connected Channel for Every CountForAddConnectedChannel (Default 2) Channels ----------------------------------- - for(k = 0; k < uNumberOfConnectedChannel; k++) - { - // Search for the Connected Channel Information - for(i = 0; i < pChannelList->ChannelLen; i++) - { - pChnlListEntry = &(pChannelList->ChnlListEntry[i]); - - if(pChnlListEntry->ChannelNum == ConnectedChannels[k]) - { - // Backup the ScanChannelList - BackupScanChannelListLength = pChannelList->ScanChannelListLength; - PlatformMoveMemory(BackupScanChannelList, pChannelList->ScanChannelList, sizeof(BackupScanChannelList)); - - // Clean the ScanChannel - RtResetScanChannel(pChannelList); - - // Set the Flag for Connected Channel - pChnlListEntry->ExInfo |= CHANNEL_EXINFO_CONNECTED_CHANNEL; - - for(j = 0, uAccumulatedCountForAdd = 0; j < BackupScanChannelListLength; j++) - { - RtInsertScanChannel(pChannelList, BackupScanChannelList[j]); - - if(BackupScanChannelList[j]->ChannelNum != ConnectedChannels[k]) - {// Different Channel - uAccumulatedCountForAdd++; - - if(uAccumulatedCountForAdd % CountForAddConnectedChannel == 0) - {// Insert Connected Channel - RtInsertScanChannel(pChannelList, pChnlListEntry); - } - } - else - {// Same Channel as Connected Channel - uAccumulatedCountForAdd = 0; - } - } - - break; - } - } - } - // ------------------------------------------------------------------------------------------------------------ - } - - if(CustomScan_ConstructScanListCb(GET_CUSTOM_SCAN_INFO(pAdapter), pChannelList)) - {// system scan - if(!pDefaultAdapter->bInHctTest) - shuffleScanChannelList(pAdapter); - DumpScanChannelList(pAdapter); - bRet = (0 != pChannelList->ScanChannelListLength); - } - else - {// other - DumpScanChannelList(pAdapter); - bRet = (0 != pChannelList->ScanChannelListLength); - } - - PlatformReleaseSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - FunctionOut(COMP_SCAN); - - return bRet; -} - -// -// Caculate the statistic of the scan list. -// -VOID -RtCalcScanStatistic( - IN PADAPTER pAdapter - ) -{ - u1Byte j; - u2Byte ChannelNum, i; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - - PlatformZeroMemory(pChannelList->EachChannelSTAs, MAX_SCAN_CHANNEL_NUM); - pChannelList->bValidSTAStatis = FALSE; - - if(pMgntInfo->NumBssDesc4Query == 0) - return; - - pChannelList->bValidSTAStatis = TRUE; - for(i = 0; i < pMgntInfo->NumBssDesc4Query; i++) - { - ChannelNum = pMgntInfo->bssDesc4Query[i].ChannelNumber; - for(j = 0; j < pChannelList->ChannelLen; j++) - { - if(pChannelList->ChnlListEntry[j].ChannelNum == ChannelNum) - { - pChannelList->EachChannelSTAs[j]++; - break; - } - } - } -} - -// -// Description: -// Caculate the scan period. -// By Bruce, 2009-04-09. -// -VOID -RtCalcScanPeriod( - IN PADAPTER pAdapter - ) -{ - u1Byte i; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - static u1Byte Scan5gCnt = 0; - BOOLEAN bShortScanPeriod = FALSE; - - if(IsActiveAPModeExist(pAdapter) - /*||pMgntInfo->mAssoc || pMgntInfo->bMediaConnect*/)// comment out for temporary solve less AP scaned when connected, Sean, 201501 - { - bShortScanPeriod = TRUE; - } - - if(IS_5G_WIRELESS_MODE(pChannelList->WirelessMode)) - Scan5gCnt++; - - for(i = 0; i < pChannelList->ChannelLen; i++) - { - if(pAdapter->bInHctTest) - { - //For Win7 DTMTest (Performance_ext). To avoid scan too long to roaming to another AP more than 4.1 seconds. - //Maddest 05132009. - if(pMgntInfo->NdisVersion>=RT_NDIS_VERSION_6_20) - pChannelList->ChnlListEntry[i].ScanPeriod =SCAN_PERIOD_Long_Win_DTM; - else - pChannelList->ChnlListEntry[i].ScanPeriod = DEFAULT_ACTIVE_SCAN_PERIOD; - - } - else if(bShortScanPeriod) - { - pChannelList->ChnlListEntry[i].ScanPeriod = SCAN_PERIOD_Short; - } - else if(pMgntInfo->RegForcedScanPeriod != 0 ) - { - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegForcedScanPeriod; - } - else if(pChannelList->ChnlListEntry[i].ScanType == SCAN_PASSIVE) - { - if(pChannelList->ChannelPlan == RT_CHANNEL_DOMAIN_WORLD_WIDE_5G || pChannelList->ChannelLen >= 15) - { - pChannelList->ChnlListEntry[i].ScanPeriod = ((i+Scan5gCnt)%3)?50:100; - } - else - { - pChannelList->ChnlListEntry[i].ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - } - } - else if(pMgntInfo->bScanOnly && pChannelList->bValidSTAStatis) - { - // - // If "pMgntInfo->bScanOnly" is set false as scanning for join, we shall not set the scan period too long. - // A long scan period may cause join procedure timeout. - // Such as the example under XP, the ndis sets the SSID and wait just 2 Seconds for join complete. - // If we cannot complete the join procedure as soon as possible (in 2 s), it will set the dummy SSID, which - // a reset command, and stop the driver stop the join procedure. - // By Bruce, 2009-04-09. - // - if(pChannelList->EachChannelSTAs[i] >= Scan_STA_Large) - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, Scan_STA_Large change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanLarge, SCAN_PERIOD_Long)); - - if( pMgntInfo->RegScanLarge == 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = SMART_SCAN_PERIOD_LONG; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanLarge; - } - else if(pChannelList->EachChannelSTAs[i] >= Scan_STA_Middle) - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, Scan_STA_Middle change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanMiddle, DEFAULT_ACTIVE_SCAN_PERIOD)); - - if( pMgntInfo->RegScanMiddle== 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = SMART_SCAN_PERIOD_MIDDLE; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanMiddle; - } - else - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, !(Scan_STA_Large && Scan_STA_Middle) change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanNormal, SCAN_PERIOD_Short)); - - if( pMgntInfo->RegScanNormal== 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = SMART_SCAN_PERIOD_SHORT; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanNormal; - } - } - else - { - RT_TRACE( COMP_SCAN, DBG_TRACE, ("RtCalcScanPeriod, change ScanPeriod from %d to %d/%d\n", pChannelList->ChnlListEntry[i].ScanPeriod, pMgntInfo->RegScanActive, DEFAULT_ACTIVE_SCAN_PERIOD)); - - //20121121 Sinda enlarge scan time per channel from 50 ms to 100 ms. - if( pMgntInfo->RegScanActive== 0 ) - pChannelList->ChnlListEntry[i].ScanPeriod = DEFAULT_PASSIVE_SCAN_PERIOD; - else - pChannelList->ChnlListEntry[i].ScanPeriod = pMgntInfo->RegScanActive; - } - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("channel %d STAs %d Period %d\n", pChannelList->ChnlListEntry[i].ChannelNum, pChannelList->EachChannelSTAs[i], pChannelList->ChnlListEntry[i].ScanPeriod)); - } - -} - - -//sherry sync with 92C_92D, 20110701 GetDualBandChannelList -u1Byte -RtGetDualBandChannel( - IN PADAPTER Adapter, - OUT PRT_CHNL_LIST_ENTRY ChnlListEntryArray -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte pChnlList; - u1Byte listLen; - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - u1Byte i, ChannelLen = 0; - - RT_TRACE(COMP_SCAN, DBG_LOUD,("============> RtGetDualBandChannel \n")); - - if(IS_DOT11D_ENABLE(pMgntInfo)) - { // dot11d is enabled. - RT_SCAN_TYPE scanType = SCAN_ACTIVE; - - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { // domain learning is not complete - scanType = SCAN_PASSIVE; - } - - if(IS_COUNTRY_IE_VALID(pMgntInfo)) - { - listLen = pDot11dInfo->ChnlListLen; - pChnlList = pDot11dInfo->ChnlList; - } - else - { - listLen = sizeof(s_MaxChnlList); - pChnlList = s_MaxChnlList; - } - - if(listLen > MAX_CHANNEL_NUM) - listLen = MAX_CHANNEL_NUM; - - RT_TRACE(COMP_SCAN, DBG_LOUD,("RtGetDualBandChannel: Dot11d case listLen %d \n", listLen)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - for(i = 0; i < listLen; i ++) - { - ChnlListEntryArray[i].ChannelNum = pChnlList[i]; - - // For 5G FCC Radar channel, default passive scan - if(DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) - ChnlListEntryArray[i].ScanType = SCAN_PASSIVE; - else - ChnlListEntryArray[i].ScanType = scanType; - - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[i].ChannelNum)); - } - - ChannelLen = listLen; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelLen %d\n", ChannelLen)); - } - else - { // Normal Case - - RT_TRACE(COMP_SCAN, DBG_LOUD,("RtGetDualBandChannel: Normal case")); - - //RT_CHANNEL_DOMAIN_WW13_2G and after are in new format to support both 2.4G & 5G - if(pMgntInfo->ChannelPlan < RT_CHANNEL_DOMAIN_WW13_2G) - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("DefaultChannelPlan[%d].Len %d \n", pMgntInfo->ChannelPlan, DefaultChannelPlan[pMgntInfo->ChannelPlan].Len)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - for(i = 0; i < DefaultChannelPlan[pMgntInfo->ChannelPlan].Len; i ++) - { - ChnlListEntryArray[i].ChannelNum = DefaultChannelPlan[pMgntInfo->ChannelPlan].Channel[i]; - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[i].ChannelNum)); - } - - ChannelLen = DefaultChannelPlan[pMgntInfo->ChannelPlan].Len; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelLen %d\n", ChannelLen)); - } - else - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("DefaultChannelPlan[%d].Len2_4G %d \n", pMgntInfo->ChannelPlan, DefaultChannelPlan[pMgntInfo->ChannelPlan].Len2_4G)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - for(i = 0; i < DefaultChannelPlan[pMgntInfo->ChannelPlan].Len2_4G; i++) - { - ChnlListEntryArray[i].ChannelNum = DefaultChannelPlan[pMgntInfo->ChannelPlan].Channel2_4G[i]; - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[i].ChannelNum)); - } - - RT_TRACE(COMP_SCAN, DBG_LOUD,("DefaultChannelPlan[%d].Len5G %d \n", pMgntInfo->ChannelPlan, DefaultChannelPlan[pMgntInfo->ChannelPlan].Len5G)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelNum")); - - ChannelLen = DefaultChannelPlan[pMgntInfo->ChannelPlan].Len2_4G; - for(i = 0; i < DefaultChannelPlan[pMgntInfo->ChannelPlan].Len5G; i++) - { - ChnlListEntryArray[ChannelLen].ChannelNum = DefaultChannelPlan[pMgntInfo->ChannelPlan].Channel5G[i]; - RT_TRACE(COMP_SCAN, DBG_LOUD,(" %d ",ChnlListEntryArray[ChannelLen].ChannelNum)); - ChannelLen++; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ChannelLen %d\n", ChannelLen)); - } - - - for(i = 0; i < ChannelLen; i ++) - { - // For 5G FCC Radar channel, default passive scan - if(DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) - ChnlListEntryArray[i].ScanType = SCAN_PASSIVE; - else - ChnlListEntryArray[i].ScanType = SCAN_ACTIVE; - } - } - - RT_TRACE(COMP_SCAN, DBG_LOUD,("pMgntInfo->ChannelPlan %d \n",pMgntInfo->ChannelPlan)); - - ChannelLen = RtCustomizeChannelList(pMgntInfo, pMgntInfo->ChannelPlan, ChannelLen, ChnlListEntryArray); - - return ChannelLen; -} - - diff --git a/network/wlan/WDI/COMMON/Dot11d.h b/network/wlan/WDI/COMMON/Dot11d.h deleted file mode 100644 index e15d4dbb..00000000 --- a/network/wlan/WDI/COMMON/Dot11d.h +++ /dev/null @@ -1,332 +0,0 @@ -#ifndef __INC_DOT11D_H -#define __INC_DOT11D_H - -// #define USE_SMART_SCAN - -#define WEIGHTED_SCAN_PERIOD 2 - -#define DOT11D_MAX_CHNL_NUM 83 - -typedef struct _CHNL_TXPOWER_TRIPLE { - u1Byte FirstChnl; - u1Byte NumChnls; - s1Byte MaxTxPowerInDbm; -}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE; - -typedef enum _DOT11D_STATE { - DOT11D_STATE_NONE = 0, - DOT11D_STATE_LEARNED, - DOT11D_STATE_DONE, -}DOT11D_STATE; - -typedef struct _RT_DOT11D_INFO { - DECLARE_RT_OBJECT(RT_DOT11D_INFO); - - BOOLEAN bEnabled; // dot11MultiDomainCapabilityEnabled - - u2Byte CountryIeLen; // > 0 if CountryIeBuf[] contains valid country information element. - u1Byte CountryIeBuf[MAX_IE_LEN]; - u1Byte CountryIeSrcAddr[6]; // Source AP of the country IE. - u1Byte CountryIeWatchdog; - - u1Byte ChnlListLen; // #Bytes valid in ChnlList[]. - u1Byte ChnlList[DOT11D_MAX_CHNL_NUM]; - s1Byte MaxTxPwrDbmList[DOT11D_MAX_CHNL_NUM]; - - DOT11D_STATE State; -}RT_DOT11D_INFO, *PRT_DOT11D_INFO; - -typedef enum _REGULATION_TXPWR_LMT { - TXPWR_LMT_FCC = 0, - TXPWR_LMT_MKK = 1, - TXPWR_LMT_ETSI = 2, - TXPWR_LMT_WW = 3, - - TXPWR_LMT_MAX_REGULATION_NUM = 4 -} REGULATION_TXPWR_LMT; - -// -// We now define the following channels as the max channels in each channel plan. -// 2G, total 14 chnls -// {1,2,3,4,5,6,7,8,9,10,11,12,13,14} -// 5G, total 24 chnls -// {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165} -#define MAX_CHANNEL_NUM 38//14+24 -#define MAX_SCAN_CHANNEL_NUM 54 - -#define CHANNEL_SCAN_CYCLE_NUM 2 - -#define Scan_STA_Large 10 -#define Scan_STA_Middle 1 -#define SCAN_PERIOD_Long 200 //ms -#define SCAN_PERIOD_Short 20 //ms -#define SCAN_PERIOD_SHORT_NTGR 35 //ms -#define SCAN_PERIOD_LONG_NTGR 110 //ms -#define SCAN_PERIOD_LONG_NTGR_XP 50 //ms - -#define DEFAULT_ACTIVE_SCAN_PERIOD 50 //ms -#define DEFAULT_PASSIVE_SCAN_PERIOD 100 // ms -#define SCAN_PERIOD_Long_Win_DTM 50 //ms -#define SCAN_PERIOD_Short_Win_DTM 20 //ms - -#define SMART_SCAN_PERIOD_LONG 130 // ms -#define SMART_SCAN_PERIOD_MIDDLE 100 // ms -#define SMART_SCAN_PERIOD_SHORT 50 // ms - -#define History_Count_Limit 4 - -// Extended Info about channel -#define CHANNEL_EXINFO_NO_IBSS_START BIT1 // Do not start IBSS -#define CHANNEL_EXINFO_NO_IBSS_JOIN BIT2 // Do not join IBSS -#define CHANNEL_EXINFO_WEIGHTED_SCAN_PERIOD BIT3 // This channel should be scaned with weighted period -#define CHANNEL_EXINFO_CONNECTED_CHANNEL BIT4// This channel is connected channel - -// -// Channel Plan Type. -// Note: -// We just add new channel plan when the new channel plan is different from any of the following -// channel plan. -// If you just wnat to customize the acitions(scan period or join actions) about one of the channel plan, -// customize them in RT_CHNL_LIST_ENTRY in the RT_CHANNEL_LIST. -// -//3 |-----------------------------------------------------------------------| -//3 | When a new domain code added, check if the order correctly mapped with -//3 | DefaultChannelPlan array index. -//3 |-----------------------------------------------------------------------| -typedef enum _RT_CHANNEL_DOMAIN -{ - RT_CHANNEL_DOMAIN_FCC = 0, - RT_CHANNEL_DOMAIN_IC = 1, - RT_CHANNEL_DOMAIN_ETSI = 2, - RT_CHANNEL_DOMAIN_SPAIN = 3, - RT_CHANNEL_DOMAIN_FRANCE = 4, - RT_CHANNEL_DOMAIN_MKK = 5, - RT_CHANNEL_DOMAIN_MKK1 = 6, - RT_CHANNEL_DOMAIN_ISRAEL = 7, - RT_CHANNEL_DOMAIN_TELEC = 8, - RT_CHANNEL_DOMAIN_MIC = 9, // Be compatible with old channel plan. No good! - RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN = 10, // Be compatible with old channel plan. No good! - RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 11, // Be compatible with old channel plan. No good! - RT_CHANNEL_DOMAIN_TAIWAN = 12, // Be compatible with old channel plan. No good! - RT_CHANNEL_DOMAIN_CHIAN = 13, - RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 14, - RT_CHANNEL_DOMAIN_KOREA = 15, - RT_CHANNEL_DOMAIN_TURKEY = 16, - RT_CHANNEL_DOMAIN_JAPAN = 17, - RT_CHANNEL_DOMAIN_FCC_NO_DFS = 18, - RT_CHANNEL_DOMAIN_JAPAN_NO_DFS= 19, - RT_CHANNEL_DOMAIN_WORLD_WIDE_5G= 20, - RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 21, - RT_CHANNEL_DOMAIN_DEFAULT = 22, - RT_CHANNEL_DOMAIN_OMNIPEEK_ALL_CHANNEL = 23, - RT_CHANNEL_DOMAIN_WHQL = 24, - - //4 - // <20120516, Kordan> The naming is according to the specification of channel plan on Mantis #11235. - // (The legacy definition above is still reserved to be compatible with legacy EFUSE maps.) - RT_CHANNEL_DOMAIN_WW13_2G , // 25 - RT_CHANNEL_DOMAIN_EUROPE_2G , // 26 - RT_CHANNEL_DOMAIN_US_2G , // 27 - RT_CHANNEL_DOMAIN_JAPAN_2G , // 28 - RT_CHANNEL_DOMAIN_FRANCE_2G , // 29 - RT_CHANNEL_DOMAIN_US_2G_5G , // 30 - RT_CHANNEL_DOMAIN_WW13_2G_EUROPE_5G , // 31 - RT_CHANNEL_DOMAIN_JAPAN_2G_5G , // 32 - RT_CHANNEL_DOMAIN_WW13_2G_KOREA_5G , // 33 - RT_CHANNEL_DOMAIN_WW13_2G_US_5G , // 34 - RT_CHANNEL_DOMAIN_WW13_2G_INDIA_5G , // 35 - RT_CHANNEL_DOMAIN_WW13_2G_VENEZUELA_5G , // 36 - RT_CHANNEL_DOMAIN_WW13_2G_HONDURA_5G , // 37 - RT_CHANNEL_DOMAIN_WW13_2G_ISRAEL_5G , // 38 - RT_CHANNEL_DOMAIN_US_2G_CANADA_5G , // 39 - RT_CHANNEL_DOMAIN_WW13_2G_AUSTRALIA_5G , // 40 - RT_CHANNEL_DOMAIN_WW13_2G_RUSSIA_5G , // 41 - RT_CHANNEL_DOMAIN_JAPAN_2G_W52_W53_5G , // 42 - RT_CHANNEL_DOMAIN_JAPAN_2G_W56_5G , // 43 - RT_CHANNEL_DOMAIN_US_2G_TAIWAN_5G , // 44 - RT_CHANNEL_DOMAIN_US_2G_TAIWAN_DFS_5G , // 45 - RT_CHANNEL_DOMAIN_GLOBAL_DOMAIN_2G , // 46 - RT_CHANNEL_DOMAIN_2G_ETSI1_5G_ETSI4, // 47 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC2 , // 48 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_NCC3 , // 49 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI5 , // 50 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC8 , // 51 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI6 , // 52 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI7 , // 53 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI8 , // 54 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI9 , // 55 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI10 , // 56 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI11 , // 57 - RT_CHANNEL_DOMAIN_WW13_2G_5G_NCC4 , // 58 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI12, // 59 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC9, // 60 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI13, // 61 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC10, // 62 - RT_CHANNEL_DOMAIN_2G_MKK2_5G_MKK4, // 63 - RT_CHANNEL_DOMAIN_WW13_2G_5G_ETSI14, // 64 - - - //4 <----------------End of New Definitions----------------> - - //===== Add new channel plan above this line ===============// -#if 0 - // For new architecture we define different 2G/5G CH area for all country. - // 2.4 G only - RT_CHANNEL_DOMAIN_2G_WORLD_5G_NULL = 0x20, - RT_CHANNEL_DOMAIN_2G_ETSI1_5G_NULL = 0x21, - RT_CHANNEL_DOMAIN_2G_FCC1_5G_NULL = 0x22, - RT_CHANNEL_DOMAIN_2G_MKK1_5G_NULL = 0x23, - RT_CHANNEL_DOMAIN_2G_ETSI2_5G_NULL = 0x24, - // 2.4 G + 5G type 1 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC1 = 0x25, - RT_CHANNEL_DOMAIN_2G_WORLD_5G_ETSI1 = 0x26, - RT_CHANNEL_DOMAIN_2G_WORLD_5G_ETSI1 = 0x27, - // ..... -#endif - - RT_CHANNEL_DOMAIN_WHQL_WFD, - - RT_CHANNEL_DOMAIN_UNDEFINED, - RT_CHANNEL_DOMAIN_MAX, -}RT_CHANNEL_DOMAIN, *PRT_CHANNEL_DOMAIN; - -typedef struct _RT_CHANNEL_PLAN -{ - u1Byte Channel[MAX_CHANNEL_NUM]; - u1Byte Len; - u1Byte Channel2_4G[MAX_CHANNEL_NUM]; - u1Byte Len2_4G; - u1Byte Channel5G[MAX_CHANNEL_NUM]; - u1Byte Len5G; - -}RT_CHANNEL_PLAN, *PRT_CHANNEL_PLAN; - - -// Scan type including active and passive scan. -typedef enum _RT_SCAN_TYPE -{ - SCAN_ACTIVE, - SCAN_PASSIVE, - SCAN_MIX, -}RT_SCAN_TYPE, *PRT_SCAN_TYPE; - -// -// The action codes are intercommunicated by the interface RtActChannelList(). -// -typedef enum _RT_CHNL_LIST_ACTION -{ - RT_CHNL_LIST_ACTION_INIT = 0, // Init the channel list. - RT_CHNL_LIST_ACTION_CONSTRUCT, // (Re-)Construct the channel list - RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, // Get the channel list - RT_CHNL_LIST_ACTION_UPDATE_CHANNEL, // Update Current Channel Info - RT_CHNL_LIST_ACTION_ADD_CHANNEL, // Add a new channel info into the channel list. - RT_CHNL_LIST_ACTION_DEL_CHANNEL, // Delete a channel info in the channel list. - RT_CHNL_LIST_ACTION_GET_CHANNEL, // Get the channel info in the channel list. - RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, // Construct channel list - RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL, // Remove and get the first scan entry from the scan list - RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL, // Get the first scan entry from the scan list - RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_PERIOD,// Construct channel scan period - RT_CHNL_LIST_ACTION_GET_CHANNEL_PLAN, // Get channel plan -}RT_CHNL_LIST_ACTION, *PRT_CHNL_LIST_ACTION; - - -// The channel information about this channel including joining, scanning, and power constraints. -typedef struct _RT_CHNL_LIST_ENTRY -{ - u1Byte ChannelNum; // The channel number. - RT_SCAN_TYPE ScanType; // Scan type such as passive or active scan. - u2Byte ScanPeriod; // Listen time in millisecond in this channel. - s4Byte MaxTxPwrDbm; // Max allowed tx power. - u4Byte ExInfo; // Extended Information for this channel. -}RT_CHNL_LIST_ENTRY, *PRT_CHNL_LIST_ENTRY; - -// -// The current channel plan and the scan list. -// -typedef struct _RT_CHANNEL_LIST -{ - DECLARE_RT_OBJECT(RT_CHANNEL_LIST); - BOOLEAN bDot11d; // True if this channel list supports dot11d. - u1Byte ChannelLen; // Availabe channel number. - RT_CHANNEL_DOMAIN ChannelPlan; // Current channel plan for this channel list. - u2Byte WirelessMode; // Record the wireless mode if this channel list is conformed to the current wireless mode. - RT_CHNL_LIST_ENTRY ChnlListEntry[MAX_CHANNEL_NUM]; // Info about each channel - u1Byte ScanChannelIndex; // zero-based - u1Byte ScanChannelListLength; // Current scan channel list length - PRT_CHNL_LIST_ENTRY ScanChannelList[MAX_SCAN_CHANNEL_NUM]; // Current scan channels. - BOOLEAN bValidSTAStatis; // TRUE is the statistics of the # of STAs from scan is valid. - u1Byte EachChannelSTAs[MAX_SCAN_CHANNEL_NUM]; // Current scan period. -}RT_CHANNEL_LIST, *PRT_CHANNEL_LIST; - -#define GET_DOT11D_INFO(__pMgntInfo) ((PRT_DOT11D_INFO)((__pMgntInfo)->pDot11dInfo)) - -#define IS_DOT11D_ENABLE(__pMgntInfo) GET_DOT11D_INFO(__pMgntInfo)->bEnabled -#define IS_COUNTRY_IE_VALID(__pMgntInfo) ( (GET_DOT11D_INFO(__pMgntInfo)->CountryIeLen > 0) && \ - (IS_DOT11D_STATE_DONE(__pMgntInfo))) - -#define IS_EQUAL_CIE_SRC(__pMgntInfo, __pTa) eqMacAddr(GET_DOT11D_INFO(__pMgntInfo)->CountryIeSrcAddr, __pTa) -#define UPDATE_CIE_SRC(__pMgntInfo, __pTa) cpMacAddr(GET_DOT11D_INFO(__pMgntInfo)->CountryIeSrcAddr, __pTa) - -#define IS_COUNTRY_IE_CHANGED(__pMgntInfo, __Ie) \ - (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pMgntInfo)->CountryIeLen) ? \ - TRUE : \ - (PlatformCompareMemory(GET_DOT11D_INFO(__pMgntInfo)->CountryIeBuf, (__Ie).Octet, (__Ie).Length))) - -#define CIE_WATCHDOG_TH 1 -#define GET_CIE_WATCHDOG(__pMgntInfo) GET_DOT11D_INFO(__pMgntInfo)->CountryIeWatchdog -#define RESET_CIE_WATCHDOG(__pMgntInfo) GET_CIE_WATCHDOG(__pMgntInfo) = 0 -#define UPDATE_CIE_WATCHDOG(__pMgntInfo) ++GET_CIE_WATCHDOG(__pMgntInfo) - -#define IS_DOT11D_STATE_DONE(__pMgntInfo) (GET_DOT11D_INFO(__pMgntInfo)->State == DOT11D_STATE_DONE) - -#define GET_RT_CHANNEL_LIST(__pMgntInfo) ((PRT_CHANNEL_LIST)((__pMgntInfo)->pChannelList)) -#define IS_CHANNEL_LIST_VALID(__pMgntInfo) \ - ((GET_RT_CHANNEL_LIST(__pMgntInfo)->ChannelLen > 0) && \ - (GET_RT_CHANNEL_LIST(__pMgntInfo)->WirelessMode == (__pMgntInfo)->dot11CurrentWirelessMode) && \ - (GET_RT_CHANNEL_LIST(__pMgntInfo)->ChannelPlan == (__pMgntInfo)->ChannelPlan)) - - - -VOID -Dot11d_Reset( - IN PADAPTER pAdapter - ); - -VOID -Dot11d_UpdateCountryIe( - IN PADAPTER pAdapter, - IN pu1Byte pTaddr, - IN POCTET_STRING posCoutryIe - ); - -u1Byte -Dot11d_GetChannelList( - IN PADAPTER Adapter, - OUT pu1Byte* ppChnlList - ); - -s4Byte -DOT11D_GetMaxTxPwrInDbm( - IN PADAPTER Adapter, - IN u1Byte Channel - ); - -VOID -DOT11D_ScanComplete( - IN PADAPTER Adapter - ); - -BOOLEAN -RtActChannelList( - IN PADAPTER pAdapter, - IN u4Byte ActionCode, - IN PVOID pInputBuf, - OUT PVOID pOutputBuf - ); - -u1Byte -RtGetDualBandChannel( - IN PADAPTER Adapter, - OUT PRT_CHNL_LIST_ENTRY ChnlListEntryArray -); -#endif // #ifndef __INC_DOT11D_H diff --git a/network/wlan/WDI/COMMON/DriverInterface.c b/network/wlan/WDI/COMMON/DriverInterface.c deleted file mode 100644 index a05fa378..00000000 --- a/network/wlan/WDI/COMMON/DriverInterface.c +++ /dev/null @@ -1,631 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "DriverInterface.tmh" -#endif - -RT_STATUS -NicIFAssociateNIC( - PADAPTER Adapter, - u2Byte HardwareType - ) -{ - Adapter->HardwareType=HardwareType; - - // - // We need to enable common feature support selection after HW type recognize. - // Otherwise. the common module relative resource will not be handled correctly. - // - // Must be called before MgntInitializeAllTimer()/MgntInitializeAllWorkItem() Because we - // might enable the feature support and use some timer/workitem/os resource .... - // - // If you need to re-initialize when every connect/disconnect. You need to move all resource - // init in FEATURE_Init() and be called in InitializeMgntVariables(). Take CCX & TDLS for example. - // - - if (HalAssociateNic(Adapter, TRUE) == RT_STATUS_FAILURE) - return RT_STATUS_FAILURE; - - // We will perform following flows after HW type is set for SDIO interface. - if( HardwareType == HARDWARE_TYPE_MAX ) - return RT_STATUS_SUCCESS; - - return RT_STATUS_SUCCESS; -} - -VOID -NicIFDisassociateNIC( - PADAPTER Adapter -) -{ - HalDisassociateNic(Adapter); -} - - -// -// 2010/07/06 MH Seperate the HAL mempro and correspond resource allocaton. -// All the HAL/common resource and variable shoule be allocated after the HAL memory -// pointer is allocated. -// -VOID -NicIFInitResource( - PADAPTER Adapter - ) -{ - //2 Put all variable initialize code here - - // Initialize the MacIdCommon ----------------------------------- - MacIdInitializeCommonContext(Adapter); - // ---------------------------------------------------------- - - // Initialize the ActionTimerCommon ------------------------------ - ActionTimerInitializeCommonContext(Adapter); - // ---------------------------------------------------------- - - Hal_InitVars(Adapter); - - Hal_InitCamEntry(Adapter); - - DFS_Init(Adapter); - - HAL_DiffTXDummyLen(Adapter); - - HAL_DiffTXRXLen(Adapter); - - Adapter->HalFunc.InitializeVariablesHandler(Adapter); - - // 2015/03/10 Hana, Init Tx Feedback, - // the Tx Feedback capability of each IC depends on the HAL define variable HAL_DEF_TX_FEEDBACK_SUPPORT - TxFeedbackInitialize(Adapter); - - ADCSmp_Init(Adapter); - InitializeTxVariables(Adapter); - InitializeRxVariables(Adapter); - InitializeMgntVariables(Adapter); - TX_InitializeVariables(Adapter); - FW_InitializeVariables(Adapter); - // 2011/07/15 Sinda Init Tx shortcut - -} // NicIFInitMgntRsc - - -VOID -NicIFDeInitResource( - PADAPTER Adapter -) -{ - ADCSmp_DeInit(Adapter); - - Adapter->HalFunc.DeInitializeVariablesHandler(Adapter); - - // - // Free all timer and workitem before HalDisassociateNic, because some workitem or timer under - // Mgnt Variables (such as ips workitem) may access Hal variables. - // By Bruce, 2007-10-17. - // - DeInitializeMgntVariables(Adapter); - - DeInitializeRxVariables(Adapter); - - // DeInitialize the ActionTimerCommon ---------------------------- - // init ActionTimer list. - ActionTimerDeInitializeCommonContext(Adapter); - // ---------------------------------------------------------- - - // DeInitialize the MacIdCommon -------------------------------- - MacIdDeInitializeCommonContext(Adapter); - // ---------------------------------------------------------- - -} //NicIFDeInitMgntRsc - -VOID -NicIFReadAdapterInfo( - PADAPTER Adapter - ) -{ - // <20130227, Kordan> Initialize the HW-independant data structure for EFUSE related operation. - HAL_CmnInitPGData(Adapter); - - // Read EEPROM size before call any EEPROM function - Adapter->EepromAddressSize=Adapter->HalFunc.GetEEPROMSizeHandler(Adapter); - // 2011/03/09 MH Add description. This is used to define different EEPROm offset of different - // IC. If new HW support different offset, we need add the value in HAL structure. - //Adapter->HalFunc.ReadEfuseOffsetHandler(Adapter); - // 2011/03/09 MH Add description. According to predefined offset to capture EFUSE content. - Adapter->HalFunc.ReadAdapterInfoHandler(Adapter); - - // 2013/09/12 MH When registry channel plan is upadted, we need to update regulatory again, - // otherwise, it will use WW table as default. - PHY_MapChnlPlanRegulatory(Adapter); - -} - -RT_STATUS -NicIFAllocateMemory( - PADAPTER Adapter - ) -{ - RT_STATUS status = RT_STATUS_FAILURE; - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - int nRxQueueNum = PLATFORM_GET_RT_NUM_SDIO_RX_QUEUE(sdiodevice); // RX FIFO0 - int nTxQueueNum = PLATFORM_GET_RT_NUM_SDIO_TX_QUEUE(sdiodevice); // TX_HIQ, TX_MIQ and TX_LOQ - - if(RT_DRIVER_STOP(Adapter)) - return status; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("NicIFAllocateMemory() ==>\n")); - - do - { - // TODO: Allocate all other memory blocks including shared memory - // TODO: Init send/receive engine(Software only) - RT_TRACE(COMP_INIT, DBG_LOUD, ("Number of Tx Queues %d, Number of Rx Queues %d\n", nTxQueueNum, nRxQueueNum)); - if(HalSdioAllocResource(Adapter, nTxQueueNum, nRxQueueNum)) - { - status = RT_STATUS_SUCCESS; - } - else - { - status = RT_STATUS_FAILURE; - break; - } - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before PrepareRFDs\n")); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("PrepareRFDs() ==>\n")); - status=PrepareRFDs(Adapter); - RT_TRACE(COMP_INIT, DBG_LOUD, ("PrepareRFDs() <==\n")); - if(status!=RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("PrepareRFDs fail\n")); - FreeRFDs(Adapter, FALSE); - break; - } - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before PrepareTCBs\n")); - - status=PrepareTCBs(Adapter); - if(status!=RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("PrepareTCBs fail\n")); - FreeTCBs(Adapter, FALSE); - break; - } - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before MgntAllocateBeaconBuf\n")); - - status = MgntAllocateBeaconBuf( Adapter ); - if(status!=RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("MgntAllocateBeaconBuf fail\n")); - MgntFreeBeaconBuf(Adapter); - break; - } - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before FW_AllocateMemory\n")); - - status = FW_AllocateMemory(Adapter); - if(status!=RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("FW_AllocateMemory fail\n")); - FW_FreeMemory(Adapter); - break; - } - }while(FALSE); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("NicIFAllocateMemory() <==\n")); - return status; -} - -VOID -NicIFFreeMemory( - PADAPTER Adapter - ) -{ - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // Return all packets queued in AP mode. 2005.06.21, by rcnjko. - AP_PS_ReturnAllQueuedPackets(Adapter, FALSE); - - MgntFreeBeaconBuf( Adapter ); - - // Free Qos related resources. - QosDeinitializeSTA(Adapter); - - //2 Note: TCB must be freed before RFD - FreeTCBs(Adapter, FALSE); - FreeRFDs(Adapter, FALSE); - - WAPI_SecFuncHandler(WAPI_FREEALLSTAINFO,Adapter, WAPI_END); - - FW_FreeMemory(Adapter); - - HalSdioFreeResource(Adapter); - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); -} - -VOID -NicIFResetMemory( - PADAPTER Adapter -) -{ - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // <3> Reset RFDs - FreeRFDs( Adapter, TRUE); - - // <4> Reset TCBs - FreeTCBs( Adapter, TRUE); - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - // <5> Reset all state machine - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter->MgntInfo.bHaltInProgress = FALSE; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - - Adapter->MgntInfo.bDualModeScanStep=0; - RT_ResetSwChnlProgress(Adapter); -} - -#define MAX_INIT_RETRY_CNT 10 - -RT_STATUS -driverIFInitializeAdapter( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - MultiPortSetAllPortsHWReadyStatus(Adapter, FALSE); - - //2 Put buffer into Rx Desc - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - PrepareAllRxDescBuffer(Adapter); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - rtStatus = Adapter->HalFunc.InitializeAdapterHandler(Adapter, pMgntInfo->dot11CurrentChannelNumber); - - MultiPortSetAllPortsHWReadyStatus(Adapter, TRUE); - - PlatformSetCheckForHangTimer(Adapter); - - return rtStatus; -} - -RT_STATUS -NicIFInitializeAdapter( - PADAPTER Adapter - ) -{ - u1Byte init_retry = 0; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - //2 Initialize Hardware - // 20090402 Joseph: Retry initialize process when failed. - while(init_retry < MAX_INIT_RETRY_CNT) - { - - RT_TRACE(COMP_INIT, DBG_LOUD, ("NicIFInitializeAdapter() init_retry(%#x)\n", init_retry)); - - if(OS_SUPPORT_WDI(Adapter)) - { - if((ADAPTER_TEST_STATUS_FLAG(Adapter, ADAPTER_STATUS_FIRST_INIT))) - { - Adapter->bInitializeInProgress=TRUE; - rtStatus = driverIFInitializeAdapter(Adapter); - Adapter->bInitializeInProgress=FALSE; - } - else - { - rtStatus = driverIFInitializeAdapter(Adapter); - } - } - // 2009/10/13 MH For Clevo X8100 model 3D mark issue. We can not delay - // Adapter initialize operation more than 1060ms. Otherwise, the Nvidia SLI - // may fail to judge the OS resource when system is rebooted. We still not - // investigate the real reason for the conflict between nvida SLI and rtl8191se - // initialize sequence. But we decide to disable all velocity modification for Clevo - // package now. - // - else if((ADAPTER_TEST_STATUS_FLAG(Adapter, ADAPTER_STATUS_FIRST_INIT)) - && !pMgntInfo->bRegClevoDriver && pMgntInfo->bRegVelocity) - { - MultiPortSetAllPortsHWReadyStatus(Adapter, FALSE); - - // 2010/12/17 MH After Code base Lable 977, we need to move the flag here, otherwise, - // HCT card init sequence will be BSOD when transfer adapter in InitializeAdapterHandler. - Adapter->bInitializeInProgress=TRUE; - - if(!ACTING_AS_AP(Adapter)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("InitializeAdapterHandler Delay\n")); - } - else - { - //2 Put buffer into Rx Desc - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - PrepareAllRxDescBuffer(Adapter); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - rtStatus = Adapter->HalFunc.InitializeAdapterHandler(Adapter, pMgntInfo->dot11CurrentChannelNumber); - #if (VISTA_RX_BATCH_INDICATE) - InitBatchIndication(Adapter); - #endif - Adapter->bInitializeInProgress=FALSE; - - MultiPortSetAllPortsHWReadyStatus(Adapter, TRUE); - - #if (UNDER_LOW_PWR_SOC_PLATFORM && NDIS_SUPPORT_NDIS630) - PlatformSetCheckForHangTimer(Adapter); - #else - Adapter->MgntInfo.bSetWatchDogTimerByDriver = FALSE; - #endif - } - } - else - { - //2 Put buffer into Rx Desc - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - PrepareAllRxDescBuffer(Adapter); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - rtStatus = Adapter->HalFunc.InitializeAdapterHandler(Adapter, pMgntInfo->dot11CurrentChannelNumber); - #if (VISTA_RX_BATCH_INDICATE) - InitBatchIndication(Adapter); - #endif - MultiPortSetAllPortsHWReadyStatus(Adapter, TRUE); - - #if (UNDER_LOW_PWR_SOC_PLATFORM && NDIS_SUPPORT_NDIS630) - PlatformSetCheckForHangTimer(Adapter); - #else - Adapter->MgntInfo.bSetWatchDogTimerByDriver = FALSE; - #endif - } - - - if(rtStatus == RT_STATUS_SUCCESS) - { - break; - } - else - init_retry++; - } - - // Get current time as driver up time since the device has been started in InitializeAdapterHandler(). - Adapter->DriverUpTime = PlatformGetCurrentTime(); - - // UPdate AMSDU forced parameters. - AMSDU_UpdateForcedValueByReg(Adapter); - - return rtStatus; -} - -VOID -NicIFHandleInterrupt( - PADAPTER Adapter - ) -{ -} - -/** -* This function is called by Checkforhang to check whether we should ask OS to reset driver -* -* \param pAdapter The adapter context for this miniport -* -* Note:NIC with USB interface sholud not call this function because we cannot scan descriptor -* to judge whether there is tx stuck. -* Note: This function may be required to be rewrite for Vista OS. -* <<>> -* -* 8185 and 8185b does not implement this function. This is added by Emily at 2006.11.24 -*/ -RESET_TYPE -NicIFCheckResetOrNot( - PADAPTER Adapter - ) -{ - RESET_TYPE TxResetType = RESET_TYPE_NORESET; - RESET_TYPE RxResetType = RESET_TYPE_NORESET; - - if(Adapter->HalFunc.TxCheckStuckHandler(Adapter)) - TxResetType = RESET_TYPE_SILENT; - - if(Adapter->HalFunc.RxCheckStuckHandler(Adapter)) - RxResetType = RESET_TYPE_SILENT; - - if(TxResetType==RESET_TYPE_SILENT || RxResetType==RESET_TYPE_SILENT) - return RESET_TYPE_SILENT; - else - return RESET_TYPE_NORESET; -} - - -VOID -NicIFCoalesceReceivedPacketAndFreeUnusedRFD( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PRT_RFD frag; - - if(pRfd->nTotalFrag<2) - return; - - //2 Setup RFD list from 2nd RFD - frag=pRfd->NextRfd; - frag->nTotalFrag=pRfd->nTotalFrag-1; - - while(frag) - { - // - // 061122, rcnjko: prevent malicious attack. - // - if(pRfd->FragLength + frag->FragLength > Adapter->MAX_RECEIVE_BUFFER_SIZE ) - { - break; - } - - //2 Copy all data to first fragment - PlatformMoveMemory( - pRfd->Buffer.VirtualAddress + pRfd->FragOffset + pRfd->FragLength, - frag->Buffer.VirtualAddress + frag->FragOffset, - frag->FragLength); - - pRfd->FragLength += frag->FragLength; - - frag=frag->NextRfd; - } - - //2 Make sure packet size is equal to sum of all fragment size - RT_ASSERT(pRfd->PacketLength==pRfd->FragLength, ("Coalesce fail: Packet length not equal to total fragment length !!\n")); - - //2 Free RFD list from 2nd RFD - ReturnRFDList(Adapter, pRfd->NextRfd); - - //2 Set total fragment number first fragment to 1 - pRfd->NextRfd=NULL; - pRfd->nTotalFrag=1; - - //2 Prepare RFD since some RFDs become available - PrepareAllRxDescBuffer(Adapter); -} - -VOID -NicIFReturnPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - -#if WLAN_ETW_SUPPORT - // - // No activity needs to be associated with this event, the ActivityId is optional and can be NULL. - // 2014.01.14. - // - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - EventWriteRxReturnToDriver( - NULL, //Without associated with the event - pRfd->RfdFrameUniqueueID, // FrameUniqueueID - 0, // QueueLength - (u2Byte)RT_GET_RCV_REF(Adapter),// RxBacklog - 0, // CustomData1 - 0, // CustomData2 - 0);// CustomData3 - - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); -#endif - - ReturnRFDList(Adapter, pRfd); - PrepareAllRxDescBuffer(Adapter); -} - -VOID -NicIFCancelAllTimer( - PADAPTER Adapter - ) -{ - //Redundant operation, MgntCancelAllTimer() would be called in RTUsbFreeAll(). Isaiah 2007.3.7 - //MgntCancelAllTimer(Adapter); - - Adapter->HalFunc.CancelAllTimerHandler(Adapter); - Adapter->HalFunc.ReleaseAllTimerHandler(Adapter); // For MacOS compatible -} - -RT_STATUS -NicIFDisableNIC( - PADAPTER Adapter -) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - // <1> Disable Interrupt - NicIFDisableInterrupt(Adapter); - - // <2> Stop all timer - MgntCancelAllTimer(Adapter); - - // <3> Disable Adapter - Adapter->HalFunc.HaltAdapterHandler(Adapter, TRUE); - return status; -} - -RT_STATUS -NicIFEnableNIC( - PADAPTER Adapter -) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - // <1> Reset memory: descriptor, buffer,.. - NicIFResetMemory(Adapter); - - // <2> Enable Adapter - status = NicIFInitializeAdapter(Adapter); - if(status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD,("InitializeAdapter Fail\n")); - return status; - } - RT_CLEAR_PS_LEVEL(Adapter, RT_RF_OFF_LEVL_HALT_NIC); - // <3> Enable Interrupt - NicIFEnableInterrupt(Adapter); - - return status; -} - -RT_STATUS -NicIFResetNIC( - PADAPTER Adapter -) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - if(pMgntInfo->RFChangeInProgress) - { - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - return RT_STATUS_SUCCESS; - } - pMgntInfo->RFChangeInProgress = TRUE; - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - - status = NicIFDisableNIC( Adapter ); - if( status != RT_STATUS_SUCCESS ){ - goto END; - } - RT_SET_PS_LEVEL(Adapter, RT_RF_OFF_LEVL_HALT_NIC); - - if(Adapter->MgntInfo.bSetWatchDogTimerByDriver) - CancelWatchDogTimer(Adapter); - - status = NicIFEnableNIC( Adapter ); - if( status != RT_STATUS_SUCCESS ){ - goto END; - } - RT_CLEAR_PS_LEVEL(Adapter, RT_RF_OFF_LEVL_HALT_NIC); - -END: - PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - pMgntInfo->RFChangeInProgress = FALSE; - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - - return status; -} - - - diff --git a/network/wlan/WDI/COMMON/DrvLog.h b/network/wlan/WDI/COMMON/DrvLog.h deleted file mode 100644 index 40d974c8..00000000 --- a/network/wlan/WDI/COMMON/DrvLog.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __INC_DRV_LOG_H -#define __INC_DRV_LOG_H - -typedef struct _DRV_LOG_TYPE_ATTRIBUTE_T -{ - unsigned int MaxLogCountPwr; // 2's power, reprent for max number of logs of this type kept in driver, e.g. 5 means at most 2^5 logs kept. - unsigned int DescLen; // Length of bytes used in Description[] including EOS. - char Description[1]; // Null terminated string. -}DRV_LOG_TYPE_ATTRIBUTE_T, *PDRV_LOG_TYPE_ATTRIBUTE_T; - -typedef struct _DRV_LOG_TYPE_LIST_T -{ - unsigned int Count; - DRV_LOG_TYPE_ATTRIBUTE_T LogTypeAttributes[1]; -}DRV_LOG_TYPE_LIST_T, *PDRV_LOG_TYPE_LIST_T; - -typedef struct _DRV_LOG_ATTRIBUTE_T -{ - unsigned int Type; // Key to assoicated with DRV_LOG_TYPE_ATTRIBUTE_T. - unsigned int DescLen; // Length of bytes used in Description[] including EOS. - char Description[1]; // Null terminated string. -}DRV_LOG_ATTRIBUTE_T, *PDRV_LOG_ATTRIBUTE_T; - -typedef struct _DRV_LOG_ATTR_LIST_T -{ - unsigned int Count; - DRV_LOG_ATTRIBUTE_T LogAttributes[1]; -}DRV_LOG_ATTR_LIST_T, *PDRV_LOG_ATTR_LIST_T; - -typedef struct _DRV_LOG_DATA_T -{ - unsigned int Id; // Key to associated with DRV_LOG_ATTRIBUTE_T. - unsigned int TimeStampLow; - unsigned int TimeStampHigh; - unsigned int BufferLenUsed; - unsigned char Buffer[1]; -}DRV_LOG_DATA_T, *PDRV_LOG_DATA_T; - -typedef struct _DRV_LOG_DATA_LIST_T -{ - unsigned int Count; - DRV_LOG_DATA_T LogDatas[1]; -}DRV_LOG_DATA_LIST_T, *PDRV_LOG_DATA_LIST_T; - - -#endif // #ifndef __INC_DRV_LOG_H diff --git a/network/wlan/WDI/COMMON/DrvLogImp.c b/network/wlan/WDI/COMMON/DrvLogImp.c deleted file mode 100644 index e8ac9052..00000000 --- a/network/wlan/WDI/COMMON/DrvLogImp.c +++ /dev/null @@ -1,253 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// DrvLogImp.c -// -// Description: -// Driver log event mechanism. -// -//----------------------------------------------------------------------------- - - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "DrvLogImp.tmh" -#endif - -#if DRV_LOG - - -// -// Description: -// Table of attribute of type of logs. -// -// Note that: -// 1. the order MUST be the same as enum _DRV_LOG_TYPE_E declared. -// 2. Size of Description must < MAX_LOG_DESC_LEN. -// -#define DEFAULT_LOG_CNT_PWR 5 // 2^5 = 32 -DRV_LOG_TYPE_ATTR_IMP_T g_LogTypes[LTYPE_TOTAL_COUNT] = -{ - // MaxLogCountPwr, Description - {DEFAULT_LOG_CNT_PWR, "Error"}, // LTYPE_ERROR - {DEFAULT_LOG_CNT_PWR, "DOT11D"}, // LTYPE_DOT11D -}; - - - -// -// Description: -// Table of attribute of logs support. -// Each entry contains: -// - Type: value enum _DRV_LOG_TYPE_E, which declare catagory of this log. -// - Description: null-terminated char string, one MUST restrict size of it smaller than MAX_LOG_DESC_LEN. -// -// Note that: -// 1. the order MUST be the same as enum _DRV_LOG_ID_E declared. -// 2. Size of Description must < MAX_LOG_DESC_LEN. -// -DRV_LOG_ATTR_IMP_T g_LogAttributes[LID_TOTAL_COUNT] = -{ - // Type, Description - {LTYPE_DOT11D, "Entering a regulatory domain"}, // LID_DOT11D_RESET - {LTYPE_DOT11D, "Get a valid country IE"}, // LID_DOT11D_GET_COUNTRY_IE - {LTYPE_DOT11D, "Active scan: Channels"}, // LID_DOT11D_ACTIVE_SCAN_CHNL - {LTYPE_DOT11D, "Active scan: Max Tx Power (dBm)"}, // LID_DOT11D_ACTIVE_SCAN_TXPWR - {LTYPE_DOT11D, "Passive scan: Channels"}, // LID_DOT11D_PASSIVE_SCAN_CHNL -}; - - - - -// -// Description: -// Allocate memory for driver log mechansim. -// -// Assumption: -// Target address had been initalized to NULL pointer. -// -BOOLEAN -AllocDrvLogMemory( - IN PADAPTER pAdapter - ) -{ - u4Byte i; - RT_STATUS status; - PVOID pTmp; - u4Byte Size; - - // - // Allocate memory block to store pointers to DRV_LOG_POOL_T objects. - // - Size = LTYPE_TOTAL_COUNT * sizeof(PVOID); - status = PlatformAllocateMemory(pAdapter, &pTmp, Size); - if( RT_STATUS_SUCCESS != status ) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("AllocDrvLogMemory(): failed to allocate DRV_LOG_POOLS_HANDLE!!!\n")); - return FALSE; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("AllocDrvLogMemory(): %p is allocated for DRV_LOG_POOLS_HANDLE\n", pTmp)); - PlatformZeroMemory(pTmp, Size); - SET_DRV_LOG_POOLS_HANDLE(pAdapter, (DRV_LOG_POOL_T**)pTmp); - } - - // - // Allocate DRV_LOG_POOL_T objects. - // - for(i = 0; i < (u4Byte)LTYPE_TOTAL_COUNT; i++) - { - Size = sizeof(DRV_LOG_POOL_T) + ( sizeof(DRV_LOG_DATA_IMP_T) << g_LogTypes[i].MaxLogCountPwr); - status = PlatformAllocateMemory(pAdapter, &pTmp, Size); - if( RT_STATUS_SUCCESS != status ) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("AllocDrvLogMemory(): failed driver log pool %d!!!\n", i)); - return FALSE; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("AllocDrvLogMemory(): %p is allocated for driver log pool %d\n", pTmp, i)); - PlatformZeroMemory(pTmp, Size); - SET_DRV_LOG_POOL(pAdapter, i, pTmp); - GET_DRV_LOG_POOL(pAdapter, i)->pLogDataRing = (PDRV_LOG_DATA_IMP_T)((pu1Byte)pTmp + sizeof(DRV_LOG_POOL_T)); - - RT_PRINT_DATA(COMP_INIT, DBG_TRACE, "driver log pool: ", (pu1Byte)pTmp, sizeof(DRV_LOG_POOL_T)); - } - } - - return TRUE; -} - - -// -// Description: -// Free memory block for driver log mechansim. -// -// Assumption: -// Target address is NOT NULL pointer if it had been allocated sucessfully. -// -VOID -FreeDrvLogMemory( - IN PADAPTER pAdapter - ) -{ - u4Byte i; - PVOID pTmp; - u4Byte Size; - - if(GET_DRV_LOG_POOLS_HANDLE(pAdapter) == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("FreeDrvLogMemory(): DRV_LOG_POOLS_HANDLE is NULL!\n")); - return; - } - - // - // Free DRV_LOG_POOL_T objects. - // - for(i = 0; i < (u4Byte)LTYPE_TOTAL_COUNT; i++) - { - pTmp = (PVOID)GET_DRV_LOG_POOL(pAdapter, i); - if(pTmp != NULL) - { - Size = sizeof(DRV_LOG_POOL_T) + ( sizeof(DRV_LOG_DATA_IMP_T) << g_LogTypes[i].MaxLogCountPwr); - RT_TRACE(COMP_INIT, DBG_LOUD, ("FreeDrvLogMemory(): free %p, log pool %d.\n", pTmp, i)); - PlatformFreeMemory(pTmp, Size); - } - } - - // - // Free memory block to store pointers to DRV_LOG_POOL_T objects. - // - Size = LTYPE_TOTAL_COUNT * sizeof(PVOID); - RT_TRACE(COMP_INIT, DBG_LOUD, ("FreeDrvLogMemory(): free DRV_LOG_POOLS_HANDLE: %p\n", GET_DRV_LOG_POOLS_HANDLE(pAdapter))); - PlatformFreeMemory(GET_DRV_LOG_POOLS_HANDLE(pAdapter), Size); - SET_DRV_LOG_POOLS_HANDLE(pAdapter, NULL); -} - -// -// Description: -// Add one log to corresponding pool. -// -VOID -AddDrvLog( - IN PADAPTER pAdapter, - IN DRV_LOG_ID_E eLogId, - IN pu1Byte pBuffer, - IN u4Byte BufferLen - ) -{ - DRV_LOG_TYPE_E eLogType = (DRV_LOG_TYPE_E)g_LogAttributes[eLogId].Type; - PDRV_LOG_POOL_T pLogPool = GET_DRV_LOG_POOL(pAdapter, eLogType); - u8Byte CurrTime = PlatformGetCurrentTime(); - u4Byte MaxLogCount = ((u4Byte)1 << g_LogTypes[eLogType].MaxLogCountPwr); - u4Byte LogCountMask = MaxLogCount - 1; - PDRV_LOG_DATA_IMP_T pLogData; - - PlatformAcquireSpinLock(pAdapter, RT_LOG_SPINLOCK); - - if( pLogPool->LogCountUsed < MaxLogCount ) - { - pLogData = pLogPool->pLogDataRing + - ( (pLogPool->LogStartIndex + pLogPool->LogCountUsed) & LogCountMask ); - pLogPool->LogCountUsed++; - } - else - { // full! age out oldest one. - pLogData = pLogPool->pLogDataRing + pLogPool->LogStartIndex; - pLogPool->LogStartIndex = (pLogPool->LogStartIndex + 1) & LogCountMask; - } - - pLogData->Id = eLogId; - pLogData->BufferLenUsed = (BufferLen <= MAX_LOG_BUFFER_LEN) ? BufferLen: MAX_LOG_BUFFER_LEN; - PlatformMoveMemory(pLogData->Buffer, pBuffer, pLogData->BufferLenUsed); - pLogData->TimeStampLow = (u4Byte)CurrTime; - pLogData->TimeStampHigh = (u4Byte)(CurrTime >> 32); - - PlatformReleaseSpinLock(pAdapter, RT_LOG_SPINLOCK); -} - - -// -// Description: -// Retrive one log data from specified pool -// -// Assumption: -// pDstLogData must pointer to a buffer with enough space, -// e.g. sizeof(DRV_LOG_DATA_IMP_T). -// -BOOLEAN -RemoveDrvLog( - IN PADAPTER pAdapter, - IN DRV_LOG_TYPE_E eLogType, - OUT PDRV_LOG_DATA_T pDstLogData - ) -{ - PDRV_LOG_POOL_T pLogPool = GET_DRV_LOG_POOL(pAdapter, eLogType); - - PlatformAcquireSpinLock(pAdapter, RT_LOG_SPINLOCK); - if(pLogPool->LogCountUsed == 0) - { - PlatformReleaseSpinLock(pAdapter, RT_LOG_SPINLOCK); - return FALSE; - } - else - { - PDRV_LOG_DATA_IMP_T pSrcLogData = pLogPool->pLogDataRing + pLogPool->LogStartIndex; - u4Byte MaxLogCount = ((u4Byte)1 << g_LogTypes[eLogType].MaxLogCountPwr); - u4Byte LogCountMask = MaxLogCount - 1; - - PlatformMoveMemory( - pDstLogData, - pSrcLogData, - sizeof(DRV_LOG_DATA_T) + pSrcLogData->BufferLenUsed); - pLogPool->LogStartIndex = (pLogPool->LogStartIndex + 1) & LogCountMask; - pLogPool->LogCountUsed--; - - PlatformReleaseSpinLock(pAdapter, RT_LOG_SPINLOCK); - return TRUE; - } -} - - -#endif diff --git a/network/wlan/WDI/COMMON/DrvLogImp.h b/network/wlan/WDI/COMMON/DrvLogImp.h deleted file mode 100644 index b84846f8..00000000 --- a/network/wlan/WDI/COMMON/DrvLogImp.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef __INC_DRV_LOG_IMP_H -#define __INC_DRV_LOG_IMP_H - -#include "DrvLog.h" - -#if DRV_LOG - -#define MAX_LOG_DESC_LEN 64 -typedef struct _DRV_LOG_TYPE_ATTR_IMP_T -{ - unsigned int MaxLogCountPwr; // 2's power, reprent for max number of logs of this type kept in driver, e.g. 5 means at most 2^5 logs kept. - char Description[MAX_LOG_DESC_LEN]; // Null terminated string. -}DRV_LOG_TYPE_ATTR_IMP_T, *PDRV_LOG_TYPE_ATTR_IMP_T; - -typedef struct _DRV_LOG_ATTR_IMP_T -{ - unsigned int Type; // Key to assoicated with DRV_LOG_TYPE_ATTRIBUTE_T. - char Description[MAX_LOG_DESC_LEN]; // Null terminated string. -}DRV_LOG_ATTR_IMP_T, *PDRV_LOG_ATTR_IMP_T; - -#define MAX_LOG_BUFFER_LEN 256 // 070227, rcnjko: This is for max IE size is 255. -typedef struct _DRV_LOG_DATA_IMP_T -{ - unsigned int Id; // Key to associated with DRV_LOG_ATTRIBUTE_T. - unsigned int TimeStampLow; - unsigned int TimeStampHigh; - unsigned int BufferLenUsed; - unsigned char Buffer[MAX_LOG_BUFFER_LEN]; -}DRV_LOG_DATA_IMP_T, *PDRV_LOG_DATA_IMP_T; - -// -// Description: -// ID for each catagory of log. -// To add new type, one must also update g_LogTypes[]. -// We will allocate an DRV_LOG_POOL_T object for each type. -// -// -typedef enum _DRV_LOG_TYPE_E -{ - LTYPE_ERROR, - LTYPE_DOT11D, - - LTYPE_TOTAL_COUNT, // Assumption: Always keep it in last one. -}DRV_LOG_TYPE_E; - - -// -// Description: -// ID for each log instance. -// To add new log, one MUST also udpate g_LogAttributes[]. -// -typedef enum _DRV_LOG_ID_E -{ - LID_DOT11D_RESET, - LID_DOT11D_GET_COUNTRY_IE, - LID_DOT11D_ACTIVE_SCAN_CHNL, - LID_DOT11D_ACTIVE_SCAN_TXPWR, - LID_DOT11D_PASSIVE_SCAN_CHNL, - - LID_TOTAL_COUNT, // Assumption: Always keep it in last one. -}DRV_LOG_ID_E; - -extern DRV_LOG_TYPE_ATTR_IMP_T g_LogTypes[LTYPE_TOTAL_COUNT]; -extern DRV_LOG_ATTR_IMP_T g_LogAttributes[LID_TOTAL_COUNT]; - -typedef struct _DRV_LOG_POOL_T -{ - unsigned int LogStartIndex; - unsigned int LogCountUsed; - PDRV_LOG_DATA_IMP_T pLogDataRing; -}DRV_LOG_POOL_T, *PDRV_LOG_POOL_T; - -#define GET_DRV_LOG_POOLS_HANDLE(__pAdapter) (DRV_LOG_POOL_T **)((__pAdapter)->ppLogPools) -//#define SET_DRV_LOG_POOLS_HANDLE(__pAdapter, __pTmp) GET_DRV_LOG_POOLS_HANDLE(__pAdapter) = (__pTmp) -#define SET_DRV_LOG_POOLS_HANDLE(__pAdapter, __pTmp) __pAdapter->ppLogPools = (void**)(__pTmp) - - -// -// Get pointer to specified log pool -// -#define GET_DRV_LOG_POOL(__pAdapter, __idx) (*(GET_DRV_LOG_POOLS_HANDLE(__pAdapter)+(__idx))) - -// -// Set up address of specified pool. -// -#define SET_DRV_LOG_POOL(__pAdapter, __idx, __pTmp) GET_DRV_LOG_POOL(__pAdapter, __idx) = (PDRV_LOG_POOL_T)(__pTmp) - -// -// Get current number of log of specified type. -// -#define GetDrvLogCnt(__pAdapter, __eLogType) GET_DRV_LOG_POOL(pAdapter, eLogType)->LogCountUsed - - -BOOLEAN -AllocDrvLogMemory( - IN PADAPTER pAdapter - ); - -VOID -FreeDrvLogMemory( - IN PADAPTER pAdapter - ); - -VOID -AddDrvLog( - IN PADAPTER pAdapter, - IN DRV_LOG_ID_E eLogId, - IN pu1Byte pBuffer, - IN u4Byte BufferLen - ); - -BOOLEAN -RemoveDrvLog( - IN PADAPTER pAdapter, - IN DRV_LOG_TYPE_E eLogType, - OUT PDRV_LOG_DATA_T pDstLogData - ); - - -#else - -#define AllocDrvLogMemory(pAdapter) TRUE -#define FreeDrvLogMemory(pAdapter) -#define AddDrvLog(pAdapter, eLogId, pBuffer, BufferLen) -#define RemoveDrvLog(pAdapter, eLogType, pDstLogData) FALSE -#define GetDrvLogCnt(__pAdapter, __eLogType) 0 - -#endif // #if DRV_LOG - -#endif // #ifndef __INC_DRV_LOG_IMP_H diff --git a/network/wlan/WDI/COMMON/Frame_Buf.c b/network/wlan/WDI/COMMON/Frame_Buf.c deleted file mode 100644 index 377e83d8..00000000 --- a/network/wlan/WDI/COMMON/Frame_Buf.c +++ /dev/null @@ -1,373 +0,0 @@ -#include "Mp_Precomp.h" - -#include "Frame_Buf.h" - -#define FRAME_BUF_DEFAULT_DBG_LEVEL DBG_TRACE - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static const char *framebuf_sig = "FRAME_BUF"; - -static -BOOLEAN -framebuf_Initialized( - IN const FRAME_BUF *pBuf - ) -{ - return (char *)pBuf->sig == framebuf_sig; -} - -static -VOID -framebuf_Init( - IN u2Byte cap, - IN u2Byte len, - IN u1Byte *buf, - IN u4Byte flags, - IN u4Byte dbgLevel, - OUT FRAME_BUF *pBuf - ) -{ - pBuf->sig = (u1Byte *)framebuf_sig; - pBuf->cap = cap; - pBuf->os.Length = len; - pBuf->os.Octet = buf; - pBuf->flags = flags; - pBuf->dbgLevel = dbgLevel; - - return; -} - -static -pu1Byte -framebuf_Add( - IN FRAME_BUF *pBuf, - IN u2Byte size - ) -{ - u1Byte *pData = FrameBuf_MTail(pBuf); - - RT_ASSERT(framebuf_Initialized(pBuf), ("%s(): accessing uninitialized frame buffer\n", __FUNCTION__)); - - if(pBuf->cap < pBuf->os.Length + size) - {// overflow - return NULL; - } - - pBuf->os.Length += size; - - return pData; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -const u1Byte * -FrameBuf_Head( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->os.Octet; -} - -u1Byte * -FrameBuf_MHead( - IN FRAME_BUF *pBuf - ) -{ - return pBuf->os.Octet; -} - -const u1Byte * -FrameBuf_Tail( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->os.Octet + pBuf->os.Length; -} - -u1Byte * -FrameBuf_MTail( - IN FRAME_BUF *pBuf - ) -{ - return pBuf->os.Octet + pBuf->os.Length; -} - -u2Byte -FrameBuf_Length( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->os.Length; -} - -u2Byte -FrameBuf_TailRoom( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->cap - pBuf->os.Length; -} - -VOID -FrameBuf_Dump( - IN const FRAME_BUF *pBuf, - IN u8Byte dbgComp, - IN u4Byte dbgLevel, - IN const char * strTitle - ) -{ - RT_TRACE(dbgComp, dbgLevel, ("%s()\n", strTitle)); - RT_PRINT_DATA(dbgComp, dbgLevel, "", FrameBuf_Head(pBuf), FrameBuf_Length(pBuf)); - - return; -} - -VOID -FrameBuf_DumpFrom( - IN const FRAME_BUF *pBuf, - IN const u1Byte *pHead, - IN u8Byte dbgComp, - IN u4Byte dbgLevel, - IN const char * strTitle - ) -{ - const u1Byte *pos, *end; - - pos = pHead; - end = FrameBuf_Head(pBuf) + FrameBuf_Length(pBuf); - - RT_ASSERT(pHead < end, ("%s(): invalid pHead: %p\n", __FUNCTION__, pHead)); - - RT_TRACE(dbgComp, dbgLevel, ("%s()\n", strTitle)); - RT_PRINT_DATA(dbgComp, dbgLevel, "", pos, (end - pos)); - - return; -} - - -VOID -FrameBuf_Init( - IN u2Byte cap, - IN u2Byte len, - IN u1Byte *buf, - OUT FRAME_BUF *pBuf - ) -{ - framebuf_Init(cap, len, buf, FRAME_BUF_FLAG_EXTERNAL_BUF, FRAME_BUF_DEFAULT_DBG_LEVEL, pBuf); - - return; -} - -FRAME_BUF * -FrameBuf_Alloc( - IN u2Byte cap - ) -{ - FRAME_BUF *pBuf = NULL; - u4Byte allocSize = sizeof(FRAME_BUF) + cap; - - PlatformAllocateMemory(NULL, (PVOID *)&pBuf, allocSize); - - if(!pBuf) return NULL; - - framebuf_Init(cap, 0, (pu1Byte)pBuf + sizeof(FRAME_BUF), 0, FRAME_BUF_DEFAULT_DBG_LEVEL, pBuf); - - return pBuf; -} - -VOID -FrameBuf_Free( - IN FRAME_BUF *pBuf - ) -{ - if(TEST_FLAG(pBuf->flags, FRAME_BUF_FLAG_EXTERNAL_BUF)) - {// we are not responsible for external buf - return; - } - - PlatformFreeMemory(pBuf, sizeof(FRAME_BUF) + pBuf->cap); - - return; -} - -FRAME_BUF * -FrameBuf_Clone( - IN const FRAME_BUF *pBuf - ) -{ - FRAME_BUF *pDestBuf = NULL; - - if(NULL == (pDestBuf = FrameBuf_Alloc(pBuf->cap))) - { - return NULL; - } - - FrameBuf_Add_Data(pDestBuf, FrameBuf_Head(pBuf), FrameBuf_Length(pBuf)); - - return pDestBuf; -} - -BOOLEAN -FrameBuf_Append( - IN FRAME_BUF *pDest, - IN const FRAME_BUF *pSrc - ) -{ - return FrameBuf_Add_Data(pDest, FrameBuf_Head(pSrc), FrameBuf_Length(pSrc)); -} - -u1Byte * -FrameBuf_Add( - IN FRAME_BUF *pBuf, - IN u2Byte size - ) -{ - return framebuf_Add(pBuf, size); -} - -u1Byte * -FrameBuf_Minus( - IN FRAME_BUF *pBuf, - IN u2Byte size - ) -{ - if(pBuf->os.Length < size) - { - return NULL; - } - - pBuf->os.Length -= size; - - return pBuf->os.Octet + pBuf->os.Length; -} - -BOOLEAN -FrameBuf_Add_u1( - IN FRAME_BUF *pBuf, - IN u1Byte data - ) -{ - pu1Byte pData = framebuf_Add(pBuf, 1); - - if(!pData) return FALSE; - - WriteEF1Byte(pData, data); - - return TRUE; -} - -BOOLEAN -FrameBuf_Add_le_u2( - IN FRAME_BUF *pBuf, - IN u2Byte data - ) -{ - pu1Byte pData = framebuf_Add(pBuf, 2); - - if(!pData) return FALSE; - - WriteEF2Byte(pData, data); - - return TRUE; -} - -BOOLEAN -FrameBuf_Add_le_u4( - IN FRAME_BUF *pBuf, - IN u4Byte data - ) -{ - pu1Byte pData = framebuf_Add(pBuf, 4); - - if(!pData) return FALSE; - - WriteEF4Byte(pData, data); - - return TRUE; -} - -BOOLEAN -FrameBuf_Add_be_u2( - IN FRAME_BUF *pBuf, - IN u2Byte data - ) -{ - pu1Byte pData = framebuf_Add(pBuf, 2); - - if(!pData) return FALSE; - - WriteH2N2BYTE(pData, data); - - return TRUE; -} - -BOOLEAN -FrameBuf_Add_be_u4( - IN FRAME_BUF *pBuf, - IN u4Byte data - ) -{ - pu1Byte pData = framebuf_Add(pBuf, 4); - - if(!pData) return FALSE; - - WriteH2N4BYTE(pData, data); - - return TRUE; -} - -BOOLEAN -FrameBuf_Add_Data( - IN FRAME_BUF *pBuf, - IN const VOID *data, - IN u2Byte len - ) -{ - pu1Byte pData = framebuf_Add(pBuf, len); - u2Byte it = 0; - - if(!pData) return FALSE; - - // Not to use PlatformMoveMemory because it dosen't declare src as const - for(it = 0; it < len; it++) pData[it] = ((u1Byte *)data)[it]; - - return TRUE; -} - -u4Byte -FrameBuf_Flags( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->flags; -} - -u2Byte -FrameBuf_Cap( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->cap; -} - -u4Byte -FrameBuf_DbgLevel( - IN const FRAME_BUF *pBuf - ) -{ - return pBuf->dbgLevel; -} - -VOID -FrameBuf_SetDbgLevel( - IN FRAME_BUF *pBuf, - IN u4Byte dbgLevel - ) -{ - pBuf->dbgLevel = dbgLevel; -} diff --git a/network/wlan/WDI/COMMON/Frame_Buf.h b/network/wlan/WDI/COMMON/Frame_Buf.h deleted file mode 100644 index 3fc59a51..00000000 --- a/network/wlan/WDI/COMMON/Frame_Buf.h +++ /dev/null @@ -1,183 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_FRAME_BUF_H -#define __INC_FRAME_BUF_H - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- - -// Capacity -#define FRAME_BUF_CAP_UNKNOWN 0xFFFF - -// Flags -#define FRAME_BUF_FLAG_EXTERNAL_BUF BIT0 - -// The internal structure the exported functions operat on. -typedef struct _FRAME_BUF -{ - const u1Byte *sig; // signature - OCTET_STRING os; // the buf - u2Byte cap; // capacity - u4Byte flags; // flags - u4Byte dbgLevel; // debug level -}FRAME_BUF; - -//----------------------------------------------------------------------------- -// Function -//----------------------------------------------------------------------------- - -const u1Byte * -FrameBuf_Head( - IN const FRAME_BUF *pBuf - ); - -u1Byte * -FrameBuf_MHead( - IN FRAME_BUF *pBuf - ); - -const u1Byte * -FrameBuf_Tail( - IN const FRAME_BUF *pBuf - ); - -u1Byte * -FrameBuf_MTail( - IN FRAME_BUF *pBuf - ); - -u2Byte -FrameBuf_Length( - IN const FRAME_BUF *pBuf - ); - -u2Byte -FrameBuf_TailRoom( - IN const FRAME_BUF *pBuf - ); - -VOID -FrameBuf_Dump( - IN const FRAME_BUF *pBuf, - IN u8Byte dbgComp, - IN u4Byte dbgLevel, - IN const char * strTitle - ); - -VOID -FrameBuf_DumpFrom( - IN const FRAME_BUF *pBuf, - IN const u1Byte *pHead, - IN u8Byte dbgComp, - IN u4Byte dbgLevel, - IN const char * strTitle - ); - -VOID -FrameBuf_Init( - IN u2Byte cap, - IN u2Byte len, - IN u1Byte *buf, - OUT FRAME_BUF *pBuf - ); - -FRAME_BUF * -FrameBuf_Alloc( - IN u2Byte cap - ); - -VOID -FrameBuf_Free( - IN FRAME_BUF *pBuf - ); - -FRAME_BUF * -FrameBuf_Clone( - IN const FRAME_BUF *pBuf - ); - -BOOLEAN -FrameBuf_Append( - IN FRAME_BUF *pDest, - IN const FRAME_BUF *pSrc - ); - -u1Byte * -FrameBuf_Add( - IN FRAME_BUF *pBuf, - IN u2Byte size - ); - -u1Byte * -FrameBuf_Minus( - IN FRAME_BUF *pBuf, - IN u2Byte size - ); - -BOOLEAN -FrameBuf_Add_u1( - IN FRAME_BUF *pBuf, - IN u1Byte data - ); - -BOOLEAN -FrameBuf_Add_le_u2( - IN FRAME_BUF *pBuf, - IN u2Byte data - ); - -BOOLEAN -FrameBuf_Add_le_u4( - IN FRAME_BUF *pBuf, - IN u4Byte data - ); - -BOOLEAN -FrameBuf_Add_be_u2( - IN FRAME_BUF *pBuf, - IN u2Byte data - ); - -BOOLEAN -FrameBuf_Add_be_u4( - IN FRAME_BUF *pBuf, - IN u4Byte data - ); - -BOOLEAN -FrameBuf_Add_Data( - IN FRAME_BUF *pBuf, - IN const VOID *data, - IN u2Byte len - ); - -u4Byte -FrameBuf_Flags( - IN const FRAME_BUF *pBuf - ); - -u2Byte -FrameBuf_Cap( - IN const FRAME_BUF *pBuf - ); - -u4Byte -FrameBuf_DbgLevel( - IN const FRAME_BUF *pBuf - ); - -VOID -FrameBuf_SetDbgLevel( - IN FRAME_BUF *pBuf, - IN u4Byte dbgLevel - ); - -#endif // #ifndef __INC_FRAME_BUF_H diff --git a/network/wlan/WDI/COMMON/GeneralFunc.c b/network/wlan/WDI/COMMON/GeneralFunc.c deleted file mode 100644 index 3666a25e..00000000 --- a/network/wlan/WDI/COMMON/GeneralFunc.c +++ /dev/null @@ -1,356 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "GeneralFunc.tmh" -#endif - -BOOLEAN -eqNByte( - pu1Byte str1, - pu1Byte str2, - u4Byte num - ) -{ - if(num==0) - return FALSE; - while(num>0) - { - num--; - if(str1[num]!=str2[num]) - return FALSE; - } - return TRUE; -} - - -// -// Description: -// Return TRUE if chTmp is represent for hex digit and -// FALSE otherwise. -// -// -BOOLEAN -IsHexDigit( - IN s1Byte chTmp -) -{ - if( (chTmp >= '0' && chTmp <= '9') || - (chTmp >= 'a' && chTmp <= 'f') || - (chTmp >= 'A' && chTmp <= 'F') ) - { - return TRUE; - } - else - { - return FALSE; - } -} - - -// -// Description: -// Translate a character to hex digit. -// -u4Byte -MapCharToHexDigit( - IN s1Byte chTmp -) -{ - if(chTmp >= '0' && chTmp <= '9') - return (chTmp - '0'); - else if(chTmp >= 'a' && chTmp <= 'f') - return (10 + (chTmp - 'a')); - else if(chTmp >= 'A' && chTmp <= 'F') - return (10 + (chTmp - 'A')); - else - return 0; -} - - - -// -// Description: -// Parse hex number from the string pucStr. -// -BOOLEAN -GetHexValueFromString( - IN ps1Byte szStr, - IN OUT pu4Byte pu4bVal, - IN OUT pu4Byte pu4bMove -) -{ - ps1Byte szScan = szStr; - - // Check input parameter. - if(szStr == NULL || pu4bVal == NULL || pu4bMove == NULL) - { - RT_TRACE(COMP_DBG, DBG_WARNING, - ("GetHexValueFromString(): Invalid inpur argumetns! szStr: %p, pu4bVal: %p, pu4bMove: %p\n", szStr, pu4bVal, pu4bMove)); - return FALSE; - } - - // Initialize output. - *pu4bMove = 0; - *pu4bVal = 0; - - // Skip leading space. - while( *szScan != '\0' && - (*szScan == ' ' || *szScan == '\t') ) - { - szScan++; - (*pu4bMove)++; - } - - // Skip leading '0x' or '0X'. - if(*szScan == '0' && (*(szScan+1) == 'x' || *(szScan+1) == 'X')) - { - szScan += 2; - (*pu4bMove) += 2; - } - - // Check if szScan is now pointer to a character for hex digit, - // if not, it means this is not a valid hex number. - if(!IsHexDigit(*szScan)) - { - return FALSE; - } - - // Parse each digit. - do - { - (*pu4bVal) <<= 4; - *pu4bVal += MapCharToHexDigit(*szScan); - - szScan++; - (*pu4bMove)++; - } while(IsHexDigit(*szScan)); - - return TRUE; -} - -BOOLEAN -GetFractionValueFromString( - IN ps1Byte szStr, - IN OUT pu1Byte pInteger, - IN OUT pu1Byte pFraction, - IN OUT pu4Byte pu4bMove -) -{ - ps1Byte szScan = szStr; - - // Initialize output. - *pu4bMove = 0; - *pInteger = 0; - *pFraction = 0; - - // Skip leading space. - while ( *szScan != '\0' && (*szScan == ' ' || *szScan == '\t') ) { - ++szScan; - ++(*pu4bMove); - } - - // Parse each digit. - do { - (*pInteger) *= 10; - *pInteger += ( *szScan - '0' ); - - ++szScan; - ++(*pu4bMove); - - if ( *szScan == '.' ) - { - ++szScan; - ++(*pu4bMove); - - if ( *szScan < '0' || *szScan > '9' ) - return FALSE; - else { - *pFraction = *szScan - '0'; - ++szScan; - ++(*pu4bMove); - return TRUE; - } - } - } while(*szScan >= '0' && *szScan <= '9'); - - return TRUE; -} - - -// -// Description: -// Return TRUE if szStr is comment out with leading "//". -// -BOOLEAN -IsCommentString( - IN ps1Byte szStr -) -{ - if(*szStr == '/' && *(szStr+1) == '/') - { - return TRUE; - } - else - { - return FALSE; - } -} - -// <20121004, Kordan> For example, -// ParseQualifiedString(inString, 0, outString, '[', ']') gets "Kordan" from a string "Hello [Kordan]". -// If RightQualifier does not exist, it will hang on in the while loop -BOOLEAN -ParseQualifiedString( - IN ps1Byte In, - IN OUT pu4Byte Start, - OUT ps1Byte Out, - OUT const u4Byte MaxOutLen, - IN s1Byte LeftQualifier, - IN s1Byte RightQualifier - ) -{ - u4Byte i = 0, j = 0; - u4Byte origin = *Start; - s1Byte c = In[(*Start)++]; - BOOLEAN status = TRUE; - - if (c != LeftQualifier) - status = FALSE; - - i = (*Start); - - while ((c = In[(*Start)++]) != RightQualifier) - ; // Keep going until the RightQualifier is found. - - j = (*Start) - 2; - - if (j - i + 1 >= MaxOutLen) - { - status = FALSE; - } - else - { - //strncpy((char *)Out, (const char*)(In+i), j-i+1); - //Prefast warning C28719: Banned API Usage: strncpy is a Banned API as listed in dontuse.h for security purposes - strncpy_s((char *)Out, j - i + 1, (const char*)(In + i), j - i + 1); - } - - if (status == FALSE) - *Start = origin; // Reset the position - - return status; -} - -BOOLEAN -GetU1ByteIntegerFromStringInDecimal( - IN ps1Byte Str, - IN OUT pu1Byte pInt - ) -{ - u2Byte i = 0; - *pInt = 0; - - while ( Str[i] != '\0' ) - { - if ( Str[i] >= '0' && Str[i] <= '9' ) - { - *pInt *= 10; - *pInt += ( Str[i] - '0' ); - } - else - { - return FALSE; - } - ++i; - } - - return TRUE; -} - - -BOOLEAN -GetS1ByteIntegerFromStringInDecimal( - IN ps1Byte Str, - IN OUT ps1Byte pInt - ) -{ - u2Byte i = 0; - s1Byte Sign = 1; // Positive - - *pInt = 0; - - if( Str[i] == '-' ) - { - Sign = -1; // Negative - i++; - } - - while ( Str[i] != '\0' ) - { - if ( Str[i] >= '0' && Str[i] <= '9' ) - { - *pInt *= 10; - *pInt += ( Str[i] - '0' ); - } - else - { - return FALSE; - } - ++i; - } - *pInt *= Sign; // Apply +/- sign - - return TRUE; -} - -BOOLEAN -isAllSpaceOrTab( - pu1Byte data, - u1Byte size - ) -{ - u1Byte cnt = 0, NumOfSpaceAndTab = 0; - while( size > cnt ) - { - if ( data[cnt] == ' ' || data[cnt] == '\t' || data[cnt] == '\0' ) - ++NumOfSpaceAndTab; - - ++cnt; - } - - return size == NumOfSpaceAndTab; -} - -// -// Description: -// Generate a unique tag for debug -// -// For example: -// -// If pFunName is "abcde", we will generate tag by function length, first character and last character. -// -// genTag will return "50ea" -// -// Windbg will show "ae05" -// -u4Byte -GenTag( - IN char *pFunName - ) -{ - u2Byte units, tens = 0; - u4Byte tag; - - units = (u2Byte)strlen(pFunName); - tag = pFunName[0] | (pFunName[units-1] << 8); - - while(units >= 10) - { - units -= 10; - tens ++; - } - tag |= ((tens+0x30) << 16) | ((units+0x30) << 24); - - return tag; -} - diff --git a/network/wlan/WDI/COMMON/GeneralFunc.h b/network/wlan/WDI/COMMON/GeneralFunc.h deleted file mode 100644 index cf02a46c..00000000 --- a/network/wlan/WDI/COMMON/GeneralFunc.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef __INC_GENERALFUNC_H -#define __INC_GENERALFUNC_H - -#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 ) -#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5]) -#define cpIpAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3]) - -// OUI, 3 bytes -#define eqOUI(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2]) ? 1 : 0 ) -#define cpOUI(des, src) ((des)[0]=(src)[0], (des)[1]=(src)[1], (des)[2]=(src)[2]) - -#define SET_OUI_WITH_TYPE(_pStart, _OUI, _Type) {cpOUI((UNALIGNED pu1Byte)(_pStart), _OUI); WriteEF1Byte((UNALIGNED pu1Byte)(_pStart) + 3, (u1Byte)_Type);} -#define GET_OUI_WITH_TYPE(_pStart, _pOUI, _Type) {cpOUI(_pOUI, (UNALIGNED pu1Byte)(_pStart)); (u1Byte)_Type = ReadEF1Byte((UNALIGNED pu1Byte)(_pStart) + 3);} - - - -#define MacAddr_isBcst(addr) \ -( \ - ( (addr[0] == 0xff) && (addr[1] == 0xff) && \ - (addr[2] == 0xff) && (addr[3] == 0xff) && \ - (addr[4] == 0xff) && (addr[5] == 0xff) ) ? TRUE : FALSE \ -) - -#define MacAddr_isMulticast(addr) \ -( \ - ( addr[0] & 0x01 ) ? TRUE : FALSE \ -) - -// -// Copy String2 to String1 and end by the length or the end of character "\0". -// Only used for ASCII. -// -#define ASCII_STR_COPY(__STR1, __STR2, __Length) \ -{ \ - LONG __i; \ - for(__i = 0; __i < __Length; __i ++) \ - { \ - __STR1[__i] = __STR2[__i]; \ - if(__STR2[__i] == '\0') \ - { \ - break; \ - } \ - } \ -} - -#define TEST_FLAG(__Flag,__testFlag) (((__Flag) & (__testFlag)) != 0) -#define SET_FLAG(__Flag, __setFlag) ((__Flag) |= __setFlag) -#define CLEAR_FLAG(__Flag, __clearFlag) ((__Flag) &= ~(__clearFlag)) -#define CLEAR_FLAGS(__Flag) ((__Flag) = 0) -#define TEST_FLAGS(__Flag, __testFlags) (((__Flag) & (__testFlags)) == (__testFlags)) - -// -// Description: -// RT_OBJECT_HEADER: Type + Id + Version + Length -// Type - The type of the data or id. -// Id - The number of the object. -// Version - The version of content. Different versions cause different content or format of data. -// Length - The total length in byte of Value. -// Format: -// | Type | Id |Version | Length | Value -// | ULONG | ULONG |ULONG | ULONG | Veriable.... -// Remark: -// It's a general header for data commnuication between layers and applications under variable versions. -// Each module can check this header to determine if the carring version of data is compatible with itself. -// -#pragma pack(1) -typedef struct _RT_OBJECT_HEADER -{ - u4Byte Type; - u4Byte Id; - u4Byte Version; - u4Byte Length; - u1Byte Value[1]; -}RT_OBJECT_HEADER, *PRT_OBJECT_HEADER; -#pragma pack() - -#define RT_OBJECT_HEADER_SIZE (FIELD_OFFSET(RT_OBJECT_HEADER, Value)) - -#define RT_ASSIGN_OBJECT_HEADER(_pHeader, _Type, _Id, _Ver, _Len) \ -{ \ - ((PRT_OBJECT_HEADER)(_pHeader))->Type = (u4Byte)(_Type); \ - ((PRT_OBJECT_HEADER)(_pHeader))->Id = (u4Byte)(_Id); \ - ((PRT_OBJECT_HEADER)(_pHeader))->Version = (u4Byte)(_Ver); \ - ((PRT_OBJECT_HEADER)(_pHeader))->Length = (u4Byte)(_Len); \ -} - -#define RT_OB_HDR_TYPE_UNKNOWN 0 -#define RT_OB_HDR_TYPE_QUERY 1 -#define RT_OB_HDR_TYPE_SET 2 -#define RT_OB_HDR_TYPE_QUERY_SET 3 -#define RT_OB_HDR_TYPE_INDIC 4 -#define RT_OB_HDR_TYPE_DATA 5 - -BOOLEAN -eqNByte( - pu1Byte str1, - pu1Byte str2, - u4Byte num - ); - -BOOLEAN -IsHexDigit( - IN s1Byte chTmp - ); - -u4Byte -MapCharToHexDigit( - IN s1Byte chTmp -); - -BOOLEAN -GetHexValueFromString( - IN ps1Byte szStr, - IN OUT pu4Byte pu4bVal, - IN OUT pu4Byte pu4bMove - ); - -BOOLEAN -GetFractionValueFromString( - IN ps1Byte szStr, - IN OUT pu1Byte pInteger, - IN OUT pu1Byte pFraction, - IN OUT pu4Byte pu4bMove - ); - - -BOOLEAN -IsCommentString( - IN ps1Byte szStr - ); - -BOOLEAN -ParseQualifiedString( - IN ps1Byte In, - IN OUT pu4Byte Start, - OUT ps1Byte Out, - OUT const u4Byte MaxOutLen, - IN s1Byte LeftQualifier, - IN s1Byte RightQualifier - ); - -BOOLEAN -GetU1ByteIntegerFromStringInDecimal( - IN ps1Byte Str, - IN OUT pu1Byte pInt - ); - -BOOLEAN -GetS1ByteIntegerFromStringInDecimal( - IN ps1Byte Str, - IN OUT ps1Byte pInt - ); - -BOOLEAN -isAllSpaceOrTab( - pu1Byte data, - u1Byte size - ); - -u4Byte -GenTag( - IN char *pFunName - ); - - -#endif // #ifndef __INC_GENERALFUNC_H diff --git a/network/wlan/WDI/COMMON/HTGen.c b/network/wlan/WDI/COMMON/HTGen.c deleted file mode 100644 index 84af5275..00000000 --- a/network/wlan/WDI/COMMON/HTGen.c +++ /dev/null @@ -1,1730 +0,0 @@ - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "HTGen.tmh" -#endif - -u1Byte MCS_FILTER_ALL[16] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -u1Byte MCS_FILTER_1SS[16] = { 0xff, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -const u2Byte MCS_DATA_RATE[2][2][33] = - { { { 13, 26, 39, 52, 78, 104, 117, 130, - 26, 52, 78 ,104, 156, 208, 234, 260, - 39, 78, 117, 156, 234, 312, 351, 390, - 52, 104, 156, 208, 312, 416, 468, 520, 0}, // Long GI, 20MHz - { 14, 29, 43, 58, 87, 116, 130, 144, - 29, 58, 87, 116, 173, 231, 260, 289, - 43, 87, 130, 173, 260, 347, 390, 433, - 58, 116, 173, 231, 347, 462, 520, 578, 0} }, // Short GI, 20MHz - { { 27, 54, 81, 108, 162, 216, 243, 270, - 54, 108, 162, 216, 324, 432, 486, 540, - 81, 162, 243, 324, 486, 648, 729, 810, - 108, 216, 324, 432, 648, 864, 972, 1080, 12}, // Long GI, 40MHz - { 30, 60, 90, 120, 180, 240, 270, 300, - 60, 120, 180, 240, 360, 480, 540, 600, - 90, 180, 270, 360, 540, 720, 810, 900, - 120, 240, 360, 480, 720, 960, 1080, 1200, 13} } // Short GI, 40MHz - }; - - - -//static u1Byte UNKNOWN_BORADCOM[3] = {0x00, 0x14, 0xbf}; -//static u1Byte LINKSYSWRT330_LINKSYSWRT300_BROADCOM[3] = {0x00, 0x1a, 0x70}; -//static u1Byte LINKSYSWRT350_LINKSYSWRT150_BROADCOM[3] = {0x00, 0x1d, 0x7e}; -//static u1Byte NETGEAR834Bv2_BROADCOM[3] = {0x00, 0x1b, 0x2f}; -//static u1Byte BELKINF5D8233V1_RALINK[3] = {0x00, 0x17, 0x3f}; //cosa 03202008 -//static u1Byte BELKINF5D82334V3_RALINK[3] = {0x00, 0x1c, 0xdf}; -//static u1Byte PCI_RALINK[3] = {0x00, 0x90, 0xcc}; -//static u1Byte EDIMAX_RALINK[3] = {0x00, 0x0e, 0x2e}; -//static u1Byte AIRLINK_RALINK[3] = {0x00, 0x18, 0x02}; -//static u1Byte DLINK_ATHEROS_1[3] = {0x00, 0x1c, 0xf0}; -//static u1Byte DLINK_ATHEROS_2[3] = {0x00, 0x21, 0x91}; -//static u1Byte CISCO_BROADCOM[3] = {0x00, 0x17, 0x94}; -static u1Byte NETGEAR_BROADCOM[3] = {0x00, 0x1f, 0x33}; -//static u1Byte NETGEAR_CONEXANT[3] = {0x00, 0x1f, 0x33}; - -// 2008/04/01 MH For Cisco G mode RX TP We need to change FW duration. Shoud we put the -// code in other place?? -//static u1Byte WIFI_CISCO_G_AP[3] = {0x00, 0x40, 0x96}; - -/** -* Function: HTDebugHTCapability -* -* Overview: Print out each field on HT capability IE in(Beacon/ProbeRsp/AssocReq/ -* AssocRsp) -* -* Input: -* u4Byte DebugLevel -* PADAPTER Adapter, -* POCTET_STRING pocCap, -* pu1Byte titleString -* -* Output: None -* Return: None -* Note: Driver should not print out this message by default -*/ -VOID -HTDebugHTCapability( - u4Byte DebugLevel, - PADAPTER Adapter, - POCTET_STRING pocCap, - pu1Byte TitleString - -) -{ - - static u1Byte EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; // For 11n EWC definition, 2007.07.17, by Emily - pu1Byte pCapELE; - pu1Byte pMCS; - - if(!PlatformCompareMemory(pocCap->Octet, EWC11NHTCap, sizeof(EWC11NHTCap))) - { - // Not EWC IE - pCapELE = (pu1Byte)&pocCap->Octet[4]; - }else - pCapELE = (pu1Byte)&pocCap->Octet[0]; - - pMCS= GET_HT_CAPABILITY_ELE_MCS(pCapELE); - - RT_TRACE(COMP_HT, DebugLevel, (". Called by %s\n", TitleString )); - - RT_TRACE(COMP_HT, DebugLevel, ("\tSupported Channel Width = %s\n", (GET_HT_CAPABILITY_ELE_CHL_WIDTH(pCapELE) )?"20MHz": "20/40MHz")); - RT_TRACE(COMP_HT, DebugLevel, ("\tSupport Short GI for 20M = %s\n", (GET_HT_CAPABILITY_ELE_SHORT_GI20M(pCapELE))?"YES": "NO")); - RT_TRACE(COMP_HT, DebugLevel, ("\tSupport Short GI for 40M = %s\n", (GET_HT_CAPABILITY_ELE_SHORT_GI40M(pCapELE))?"YES": "NO")); - RT_TRACE(COMP_HT, DebugLevel, ("\tSupport TX STBC = %s\n", (GET_HT_CAPABILITY_ELE_TX_STBC(pCapELE))?"YES": "NO")); - RT_TRACE(COMP_HT, DebugLevel, ("\tMax AMSDU Size = %s\n", (GET_HT_CAPABILITY_ELE_MAX_AMSDU_SIZE(pCapELE))?"3839": "7935")); - RT_TRACE(COMP_HT, DebugLevel, ("\tSupport CCK in 20/40 mode = %s\n", (GET_HT_CAPABILITY_ELE_DSS_CCK(pCapELE))?"YES": "NO")); - RT_TRACE(COMP_HT, DebugLevel, ("\tMax AMPDU Factor = %d\n", GET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pCapELE))); - RT_TRACE(COMP_HT, DebugLevel, ("\tMPDU Density = %d\n", GET_HT_CAPABILITY_ELE_MPDU_DENSITY(pCapELE))); - //RT_TRACE(COMP_HT, DebugLevel, ("\tMCS Rate Set = [%x][%x][%x][%x][%x]\n", pMCS[0],\ - // pMCS[1], pMCS[2], pMCS[3], pMCS[4])); - RT_TRACE(COMP_HT, DebugLevel, ("\n")); - -} - -/** -* Function: HTDebugHTInfo -* -* Overview: Print out each field on HT Information IE in(Beacon/PorbeRsp) -* -* Input: -* u4Byte DebugLevel, -* PADAPTER Adapter, -* POCTET_STRING pocCap, -* pu1Byte TitleString -* -* Output: None -* Return: None -* Note: Driver should not print out this message by default -*/ -VOID -HTDebugHTInfo( - u4Byte DebugLevel, - PADAPTER Adapter, - POCTET_STRING pocInfo, - pu1Byte TitleString -) -{ - - static u1Byte EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34}; // For 11n EWC definition, 2007.07.17, by Emily - pu1Byte pHTInfoEle, pBasicMCS; - - if(!PlatformCompareMemory(pocInfo->Octet, EWC11NHTInfo, sizeof(EWC11NHTInfo))) - pHTInfoEle = (pu1Byte)(&pocInfo->Octet[4]); // Not EWC IE - else - pHTInfoEle = (pu1Byte)(&pocInfo->Octet[0]); - - - pBasicMCS= GET_HT_INFO_ELE_BASIC_MCS(pHTInfoEle); - - RT_TRACE(COMP_HT, DebugLevel, (". Called by %s\n", TitleString )); - - RT_TRACE(COMP_HT, DebugLevel, ("\tPrimary channel = %d\n", GET_HT_INFO_ELE_CONTROL_CHL(pHTInfoEle))); - RT_TRACE(COMP_HT, DebugLevel, ("\tSenondary channel =")); - switch(GET_HT_INFO_ELE_EXT_CHL_OFFSET(pHTInfoEle)) - { - case 0: - RT_TRACE(COMP_HT, DebugLevel, ("Not Present\n")); - break; - case 1: - RT_TRACE(COMP_HT, DebugLevel, ("Upper channel\n")); - break; - case 2: - RT_TRACE(COMP_HT, DebugLevel, ("Reserved. Eooro!!!\n")); - break; - case 3: - RT_TRACE(COMP_HT, DebugLevel, ("Lower Channel\n")); - break; - } - RT_TRACE(COMP_HT, DebugLevel, ("\tRecommended channel width = %s\n", (GET_HT_INFO_ELE_STA_CHL_WIDTH(pHTInfoEle))?"20Mhz": "40Mhz")); - - RT_TRACE(COMP_HT, DebugLevel, ("\tOperation mode for protection = ")); - switch(GET_HT_INFO_ELE_OPT_MODE(pHTInfoEle)) - { - case 0: - RT_TRACE(COMP_HT, DebugLevel, ("No Protection\n")); - break; - case 1: - RT_TRACE(COMP_HT, DebugLevel, ("HT non-member protection mode\n")); - break; - case 2: - RT_TRACE(COMP_HT, DebugLevel, ("Suggest to open protection\n")); - break; - case 3: - RT_TRACE(COMP_HT, DebugLevel, ("HT mixed mode\n")); - break; - } - - //RT_TRACE(COMP_HT, DebugLevel, ("\tBasic MCS Rate Set = [%x][%x][%x][%x][%x]\n", pBasicMCS[0],\ - // pBasicMCS[1], pBasicMCS[2], pBasicMCS[3], pBasicMCS[4])); - - RT_TRACE(COMP_HT, DebugLevel, ("\n")); -} - - -u2Byte -HTMcsToDataRate( - PADAPTER Adapter, - u2Byte nMcsRate - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - u1Byte BandWidth; - - u1Byte isShortGI = CHNL_RUN_ABOVE_40MHZ(pMgntInfo)? - ((pHTInfo->bCurShortGI40MHz)?1:0): - ((pHTInfo->bCurShortGI20MHz)?1:0); - - nMcsRate -= MGN_MCS0; - - BandWidth = CHNL_RUN_ABOVE_40MHZ(pMgntInfo)?1:0; - - // Prefast warning ignore -#pragma warning( disable:6385 ) - RT_TRACE_F(COMP_HT, DBG_LOUD, ("MCS_DATA_RATE[%d][%d][(%d&0x3f)] = %d\n", - BandWidth, isShortGI, nMcsRate, MCS_DATA_RATE[BandWidth][isShortGI][(nMcsRate&0x3f)])); - - return MCS_DATA_RATE[BandWidth][isShortGI][nMcsRate]; -} - -u2Byte -HTPeerMcsToDataRate( - PADAPTER Adapter, - PRT_WLAN_STA pEntry, - u1Byte nMcsRate - ) -{ - u1Byte is40MHz; - u1Byte isShortGI; - - if(pEntry!=NULL) - { - nMcsRate -= MGN_MCS0; - is40MHz = (pEntry->BandWidth >= CHANNEL_WIDTH_40)? TRUE: FALSE; - isShortGI = (is40MHz)?pEntry->HTInfo.bShortGI40M:pEntry->HTInfo.bShortGI20M; - return MCS_DATA_RATE[is40MHz][isShortGI][nMcsRate]; - } - else - return HTMcsToDataRate(Adapter, nMcsRate); -} - - -VOID -HTSetCCKSupport( - PADAPTER Adapter, - BOOLEAN bStarter, - pu1Byte pPeerHTCap - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - - if(pMgntInfo->dot11CurrentChannelBandWidth == CHANNEL_WIDTH_80) - pHTInfo->bCurSuppCCK = FALSE; - else if(bStarter) // AP mode or IBSS starter - { - // Set in HTUseDefaultSettingFromReg/HTUseDefaultSettingFromDefault - } - else // Infrastuction client or IBSS joiner - { - if(pPeerHTCap != NULL) - pHTInfo->bCurSuppCCK = pHTInfo->bRegSuppCCK?GET_HT_CAPABILITY_ELE_DSS_CCK(pPeerHTCap):FALSE; - else - pHTInfo->bCurSuppCCK = pHTInfo->bRegSuppCCK; - } -} - -VOID -IOTPeerDetermine( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - - // [For Win7 Two Port] 2009.07.30, by Bohn - if(ACTING_AS_AP(Adapter)) - { - if(Adapter->MgntInfo.NdisVersion < RT_NDIS_VERSION_6_20) - pMgntInfo->IOTPeer = HT_IOT_PEER_SELF_SOFTAP; - else if(Adapter->MgntInfo.NdisVersion >= RT_NDIS_VERSION_6_20) - { - if(DefAdapter->MgntInfo.mAssoc==TRUE) - pMgntInfo->IOTPeer = DefAdapter->MgntInfo.IOTPeer; - else - pMgntInfo->IOTPeer = HT_IOT_PEER_SELF_SOFTAP; - } - } - else - { - pMgntInfo->IOTPeer = pBssDesc->Vender; - pMgntInfo->IOTPeerSubtype = pBssDesc->SubTypeOfVender; - - - // 2011/11/28 MH We need to disable TXOP for the AP to preven serious collision. - if (pBssDesc->SubTypeOfVender == HT_IOT_PEER_BROADCOM_NETGEAR_WNDAP4500) - { - pMgntInfo->IOTAction |=HT_IOT_ACT_DISABLE_AC_TXOP; - } - else - { - pMgntInfo->IOTAction &= ~HT_IOT_ACT_DISABLE_AC_TXOP; - } - - // - // Check MPDU maximum size 4/8/11K for VHT mode.~ VHT does not have the function now, - // - if (pBssDesc->BssVHT.bdVHTCapBuf) - { - pMgntInfo->IOTMaxMpduLen = GET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pBssDesc->BssVHT.bdVHTCapBuf); - pMgntInfo->IOTVhtAmsduSupport = TRUE; - //pMgntInfo->IOTMaxMpduLen = GET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pBssDesc->BssVHT.bdVHTOperBuf); - //DbgPrint("pMgntInfo->IOTMaxMpduLen = %d\n", pMgntInfo->IOTMaxMpduLen); - } - else - { - pMgntInfo->IOTMaxMpduLen = 0; - pMgntInfo->IOTVhtAmsduSupport = FALSE; - } - - } -} - - - - -/** -* Function: HTIOTActIsDisableMCSTwoSpatialStream -* -* Overview: Check whether driver should declare capability of receving All 2 ss packets -* -* Input: -* PADAPTER Adapter, -* -* Output: None -* Return: TRUE if driver should disable all two spatial stream packet -* 2008.04.21 Emily -*/ -BOOLEAN -HTIOTActIsDisableMCSTwoSpatialStream( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - - // Apply for 819u only - - if( (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) ) - { - if( (pBssDesc->Vender != HT_IOT_PEER_ATHEROS) && - (pBssDesc->Vender != HT_IOT_PEER_UNKNOWN) && - (pBssDesc->Vender != HT_IOT_PEER_MARVELL) && - (pBssDesc->Vender != HT_IOT_PEER_REALTEK_92SE) && - (pBssDesc->Vender != HT_IOT_PEER_RALINK) ) - retValue = TRUE; - } - - return retValue; -} - - - - - -BOOLEAN -HTIOTActIsForcedCTS2Self( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - - // Wifi Test 5.2.35 Basic Association in 802.11n Enviroment - if(Adapter->MgntInfo.bWiFiConfg) - retValue = FALSE; - else if(pBssDesc->Vender == HT_IOT_PEER_MARVELL || pBssDesc->Vender == HT_IOT_PEER_ATHEROS) - retValue = TRUE; - - return retValue; -} - - -/* - * EDCA parameters bias on downlink - */ -BOOLEAN -HTIOTActIsEDCABiasRx( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ) -{ - BOOLEAN retValue = FALSE; - - if(HAL_IsEdcaBiasRx(Adapter, pBssDesc)) - retValue = TRUE; - - return retValue; -} - - -BOOLEAN -HTIOTActDisableHighPower( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - - if(pBssDesc->Vender==HT_IOT_PEER_RALINK || - pBssDesc->Vender==HT_IOT_PEER_REALTEK || - pBssDesc->Vender==HT_IOT_PEER_REALTEK_92SE) - { - retValue = TRUE; - } - - return retValue; -} - - -BOOLEAN -HTIOTActIsDisableTx40MHz( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - - if( (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) ) - { - if((pBssDesc->Vender==HT_IOT_PEER_REALTEK) && (pBssDesc->BssHT.bdSupportHT)) - retValue = TRUE; - } - - return retValue; -} - -BOOLEAN -HTIOTActIsTxNoAggregation( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - - if( (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) ) - { - if(pBssDesc->Vender==HT_IOT_PEER_REALTEK) - retValue = TRUE; - } - - return retValue; -} - -BOOLEAN -HTIOTActIsDisableTx2SS( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - - if( (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) || - (Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) ) - { - if((pBssDesc->Vender==HT_IOT_PEER_REALTEK) && (pBssDesc->BssHT.bdSupportHT)) - retValue = TRUE; - } - - return retValue; -} - - - -BOOLEAN -HTIOCActIsDisableCckRate( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - BOOLEAN retValue = FALSE; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(pMgntInfo->bDisableCck) - { - retValue = TRUE; - } - - return retValue; - -} - -BOOLEAN -HTIOTActDisableRx40MHzShortGI( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - return FALSE; -} - -BOOLEAN -HTIOTActDisableRx20MHzShortGI( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - return FALSE; -} - - -VOID -ResetIOTSetting( - PMGNT_INFO pMgntInfo -) -{ - pMgntInfo->IOTAction = 0; - pMgntInfo->IOTPeer = HT_IOT_PEER_UNKNOWN; -} - - -/* - The setting used in this functoin shall be our HT Rx capability that we want to inform the peer STA. - Both AP and STA Attach the Capailbity Element - AP/STA should include this element only if HTEnable is turned on. -*/ -VOID -HTConstructCapabilityElement( - PADAPTER Adapter, - POCTET_STRING posHTCap, - BOOLEAN bAssoc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pu1Byte pCapELE = NULL, pCapMCS; - CHANNEL_WIDTH ChnlWidth; - u1Byte HtAggrSize = HT_AGG_SIZE_64K; - u1Byte HtDensity = HT_DENSITY_NO_RESTRICTION; - u1Byte HtSTBC = 0; - - PlatformZeroMemory(posHTCap->Octet, posHTCap->Length); - - if(bAssoc && pHTInfo->ePeerHTSpecVer == HT_SPEC_VER_EWC) - { - u1Byte EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; // For 11n EWC definition, 2007.07.17, by Emily - PlatformMoveMemory(posHTCap->Octet, EWC11NHTCap, sizeof(EWC11NHTCap)); - pCapELE = (pu1Byte)&posHTCap->Octet[4]; - posHTCap->Length = 30; - } - else - { - pCapELE = (pu1Byte)posHTCap->Octet; - posHTCap->Length = 26; - } - - // B0 - SET_HT_CAPABILITY_ELE_LDPC_CAP(pCapELE, (pHTInfo->HtLdpcCap & LDPC_HT_ENABLE_RX) ? 1 : 0); - - ChnlWidth = (CHANNEL_WIDTH)AP_CheckBwWidth(Adapter); - - if(ACTING_AS_AP(Adapter) == FALSE && ACTING_AS_IBSS(Adapter) == FALSE) - { - // Determine peer capability for 40MHz bandwidth support when using STA mode. - // This prevents from some retarded AP from bandwidth configuration error. -- 20110530 Joseph - if(bAssoc && pHTInfo->bCurrentHTSupport) - { - if(GET_HT_CAPABILITY_ELE_CHL_WIDTH(pHTInfo->PeerHTCapBuf) == 0) - ChnlWidth = CHANNEL_WIDTH_20; - } - - ChnlWidth = CHNL_CheckChnlPlanWithBW(Adapter,pMgntInfo->dot11CurrentChannelNumber,ChnlWidth,pMgntInfo->ChannelOffset); - } - - - if(ChnlWidth == CHANNEL_WIDTH_40 || ChnlWidth == CHANNEL_WIDTH_80) - { - SET_HT_CAPABILITY_ELE_CHL_WIDTH(pCapELE, 1); - } - else - { - SET_HT_CAPABILITY_ELE_CHL_WIDTH(pCapELE, 0); - } - - // B2 B3 - SET_HT_CAPABILITY_ELE_MIMO_PWRSAVE(pCapELE, pHTInfo->SelfMimoPs); - // B4 - SET_HT_CAPABILITY_ELE_GREEN_FIELD(pCapELE, 0); // This feature is not supported now!! - // B5 - SET_HT_CAPABILITY_ELE_SHORT_GI20M(pCapELE, pHTInfo->bRegShortGI20MHz ? 1 : 0); // We can receive Short GI!! - // B6 - SET_HT_CAPABILITY_ELE_SHORT_GI40M(pCapELE, pHTInfo->bRegShortGI40MHz ? 1 : 0); // We can receive Short GI!! - - // BIT7 STBC - if(TEST_FLAG(pHTInfo->HtStbcCap, STBC_HT_ENABLE_TX)) - { - SET_HT_CAPABILITY_ELE_TX_STBC(pCapELE, 1); - } - else - { - SET_HT_CAPABILITY_ELE_TX_STBC(pCapELE, 0); - } - // B8 B9 - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_RX_STBC, (pu1Byte)&HtSTBC); - if(TEST_FLAG(pHTInfo->HtStbcCap, STBC_HT_ENABLE_RX)) - { - SET_HT_CAPABILITY_ELE_RX_STBC(pCapELE, HtSTBC); - } - else - { - SET_HT_CAPABILITY_ELE_RX_STBC(pCapELE, 0); - } - - // B10 - SET_HT_CAPABILITY_ELE_DELAY_BA(pCapELE, 0); // Do not support now!! - // B11 - { - SET_HT_CAPABILITY_ELE_MAX_AMSDU_SIZE(pCapELE, ( (Adapter->MAX_RECEIVE_BUFFER_SIZE >= HT_AMSDU_SIZE_8K) && \ - (!PLATFORM_LIMITED_RX_BUF_SIZE(Adapter)))?1:0); - } - - // B12 - if(IS_WIRELESS_MODE_5G(Adapter)) - { - SET_HT_CAPABILITY_ELE_DSS_CCK(pCapELE, 0); - } - else - { - SET_HT_CAPABILITY_ELE_DSS_CCK(pCapELE,(ChnlWidth?(pHTInfo->bRegSuppCCK?1:0):0) ); - } - - - SET_HT_CAPABILITY_ELE_PSMP(pCapELE, 0); // Do not support now!! - // B14 - if(IS_WIRELESS_MODE_5G(Adapter)) - { - SET_HT_CAPABILITY_ELE_FORTY_INTOLERANT(pCapELE, 0); - } - else - { - SET_HT_CAPABILITY_ELE_FORTY_INTOLERANT(pCapELE, pHTInfo->b40Intolerant); - } - // B15 - SET_HT_CAPABILITY_ELE_LSIG_TXOP_PROTECT(pCapELE, 0); // Do not support now!! - - //MAC HT parameters info - // Retrieve HAL AMPDU Factor and AMPDU density parameter for each ICs. Added by Roger, 2011.12.08. - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_RX_AMPDU_FACTOR, (pu1Byte)&HtAggrSize); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_MPDU_DENSITY, (pu1Byte)&HtDensity); - - // RX AMPDU factor and MPDU density - SET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pCapELE, HtAggrSize); - SET_HT_CAPABILITY_ELE_MPDU_DENSITY(pCapELE, HtDensity); - - // Supported MCS set - pCapMCS = GET_HT_CAPABILITY_ELE_MCS(pCapELE); - PlatformMoveMemory(pCapMCS, pMgntInfo->Regdot11HTOperationalRateSet, 16); - - //Extended HT Capability Info - SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO(pCapELE, 0); - - //TXBF Capabilities - SET_HT_CAPABILITY_ELE_TXBF_CAP(pCapELE, 0); - - // HT Beamformer - if(TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMER_ENABLE)) - { - SET_HT_CAP_TXBF_TRANSMIT_NDP_CAP(pCapELE, 1); - SET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(pCapELE, 1); - SET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(pCapELE, 1); - SET_HT_CAP_TXBF_CHNL_ESTIMATION_NUM_ANTENNAS(pCapELE, HAL_QueryBeamformerCap(Adapter)); - } - - // HT Beamformee - if(TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMEE_ENABLE)) - { - SET_HT_CAP_TXBF_RECEIVE_NDP_CAP(pCapELE, 1); - SET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(pCapELE, 2); - SET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(pCapELE, HAL_QueryBeamformeeCap(Adapter)); - } - - //Antenna Selection Capabilities - SET_HT_CAPABILITY_ELE_AS_CAP(pCapELE, 0); - - if(bAssoc) - { - if(pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_ALL_2SS) - pCapMCS[1] &= 0x00; - - // disable Rx 40MHz Short GI - if(pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_RX_40MHZ_SHORT_GI) - SET_HT_CAPABILITY_ELE_SHORT_GI40M(pCapELE, 0); - - if(pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_RX_20MHZ_SHORT_GI) - SET_HT_CAPABILITY_ELE_SHORT_GI20M(pCapELE, 0); - } - - - RT_PRINT_DATA( COMP_HT, DBG_TRACE, "Construct HTCap in Beacon/Assoc/ReAssoc", posHTCap->Octet, posHTCap->Length); - - //Print each field in detail. Driver should not print out this message by default - HTDebugHTCapability(DBG_TRACE, Adapter, posHTCap, (pu1Byte)"HTConstructCapability()"); -} - -/* - Only AP will attach the HT Information Element -*/ - -VOID -HTConstructInfoElement( - PADAPTER Adapter, - POCTET_STRING posHTInfo -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pu1Byte pHTInfoEle = (pu1Byte)(posHTInfo->Octet); - PRT_CHANNEL_INFO pChnlInfo = GET_CHNL_INFO(pMgntInfo); - - PlatformZeroMemory(posHTInfo->Octet, posHTInfo->Length); - - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - - if((GetDefaultAdapter(Adapter)->MgntInfo.bForceGoTxData20MBw == TRUE) && IsFirstGoAdapter(Adapter)){ - SET_HT_INFO_ELE_STA_CHL_WIDTH(pHTInfoEle, FALSE); - SET_HT_INFO_ELE_EXT_CHL_OFFSET(pHTInfoEle, EXTCHNL_OFFSET_NO_EXT); - } - else{ - SET_HT_INFO_ELE_STA_CHL_WIDTH(pHTInfoEle, CHNL_RUN_ABOVE_40MHZ(pMgntInfo)); - SET_HT_INFO_ELE_EXT_CHL_OFFSET(pHTInfoEle, pChnlInfo->Ext20MHzChnlOffsetOf40MHz); - } - - SET_HT_INFO_ELE_CONTROL_CHL(pHTInfoEle, pMgntInfo->dot11CurrentChannelNumber); - SET_HT_INFO_ELE_RIFS(pHTInfoEle, 0); - SET_HT_INFO_ELE_PSMP_ACCESS_ONLY(pHTInfoEle, 0); - SET_HT_INFO_ELE_SRV_INT_GRAN(pHTInfoEle, 0); - SET_HT_INFO_ELE_OPT_MODE(pHTInfoEle, pHTInfo->CurrentOpMode); - SET_HT_INFO_ELE_NON_GF_DEV(pHTInfoEle, 0); - SET_HT_INFO_ELE_DUAL_BEACON(pHTInfoEle, 0); - SET_HT_INFO_ELE_SECONDARY_BEACON(pHTInfoEle, 0); - SET_HT_INFO_ELE_LSIG_TXOP_PROTECT_FULL(pHTInfoEle, 0); - SET_HT_INFO_ELE_PCO_ACTIVE(pHTInfoEle, 0); - SET_HT_INFO_ELE_PCO_PHASE(pHTInfoEle, 0); - - PlatformZeroMemory(GET_HT_INFO_ELE_BASIC_MCS(pHTInfoEle), 16); - - posHTInfo->Length = 22; - } - else - { - //STA should not generate High Throughput Information Element - posHTInfo->Length = 0; - } - -} - - - -VOID -HT_PickMCSRate( - IN PADAPTER Adapter, - OUT pu1Byte pOperateMCS -) -{ - u1Byte i; - - if(IS_WIRELESS_MODE_N(Adapter)) - {//HT part - if(HAL_SkipMcsRates(Adapter)) - pOperateMCS[1] &=0xF8; //Skip MCS8~11 because mcs7 > mcs6, 9, 10, 11. 2007.01.16 by Emily - - pOperateMCS[4] &= RATE_ADPT_MCS32_MASK; - } - else - {//no MCS rate - for(i = 0 ; i <= 15 ; i++) - pOperateMCS[i] = 0; - } -} - - - -/* -* Description: -* This function will get the highest speed rate in input MCS set. -* -* /param Adapter Pionter to Adapter entity -* pMCSRateSet Pointer to MCS rate bitmap -* pMCSFilter Pointer to MCS rate filter -* -* /return Highest MCS rate included in pMCSRateSet and filtered by pMCSFilter. -* -*/ -u1Byte -HTGetHighestMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pMCSRateSet, - IN pu1Byte pMCSFilter - ) -{ - u1Byte i, j, k; - u1Byte bitMap; - u1Byte mcsRate = 0; - u1Byte availableMcsRate[16]; - - for(i=0; i<16; i++) - availableMcsRate[i] = pMCSRateSet[i] & pMCSFilter[i]; - - for(i = 0; i < 16; i++) - { - if(availableMcsRate[i] != 0) - break; - } - if(i == 16) - return 0; - - for(i = 0; i < 16; i++) - { - if(availableMcsRate[i] != 0) - { - bitMap = availableMcsRate[i]; - for(j = 0; j < 8; j++) - { - if((bitMap%2) != 0) - { - k = 8*i+j; - if(MCS_DATA_RATE[0][0][k] > MCS_DATA_RATE[0][0][mcsRate]) - mcsRate = k; - } - bitMap = bitMap>>1; - } - } - } - return (mcsRate + MGN_MCS0); -} - - - -/* -** -**1.Filter our operation rate set with AP's rate set -**2.shall reference channel bandwidth, STBC, Antenna number -**3.generate rate adative table for firmware -**David 20060906 -** -** \pHTSupportedCap: the connected STA's supported rate Capability element -*/ -BOOLEAN -HTFilterMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pSupportMCS, - OUT pu1Byte pOperateMCS -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - UINT i=0; - - // filter out operational rate set not supported by AP, the lenth of it is 16 - for(i = 0;i <= 15; i++) - pOperateMCS[i] = pMgntInfo->Regdot11HTOperationalRateSet[i] & pSupportMCS[i]; - - // we also shall suggested the first start rate set according to our singal strength - HT_PickMCSRate(Adapter, pOperateMCS); - - return TRUE; -} - -VOID -HTOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu -) -{ - - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pu1Byte pPeerHTCap, pPeerHTInfo; - OCTET_STRING osTmp; - pu1Byte pCapMCS, pMcsFilter; - static u1Byte EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x33}; // For 11n EWC definition, 2007.07.17, by Emily - static u1Byte EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x34}; // For 11n EWC definition, 2007.07.17, by Emily - u2Byte nMaxAMSDUSize; - - if( pHTInfo->bCurrentHTSupport == FALSE ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== HTOnAssocRsp(): HT_DISABLE\n") ); - return; - } - - PlatformZeroMemory(pHTInfo->PeerHTCapBuf, sizeof(pHTInfo->PeerHTCapBuf)); - PlatformZeroMemory(pHTInfo->PeerHTInfoBuf, sizeof(pHTInfo->PeerHTInfoBuf)); - - // Get HT CAP and copy into buffer - osTmp= PacketGetElement( asocpdu, EID_HTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osTmp.Length == 0) - osTmp = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_11N_EWC_HT_CAP, OUI_SUBTYPE_DONT_CARE); - - osTmp.Length = osTmp.Length > sizeof(pHTInfo->PeerHTCapBuf)?\ - sizeof(pHTInfo->PeerHTCapBuf):osTmp.Length; //prevent from overflow - - if(osTmp.Length > 0) - CopyMem(pHTInfo->PeerHTCapBuf, osTmp.Octet, osTmp.Length); - - // Get HT Info and copy into buffer - osTmp= PacketGetElement( asocpdu, EID_HTInfo, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osTmp.Length == 0) - osTmp = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_11N_EWC_HT_INFO, OUI_SUBTYPE_DONT_CARE); - - osTmp.Length = osTmp.Length>sizeof(pHTInfo->PeerHTCapBuf)?\ - sizeof(pHTInfo->PeerHTCapBuf):osTmp.Length; //prevent from overflow - - if(osTmp.Length > 0) - CopyMem(pHTInfo->PeerHTInfoBuf, osTmp.Octet, osTmp.Length); - - if(!PlatformCompareMemory(pHTInfo->PeerHTCapBuf,EWC11NHTCap, sizeof(EWC11NHTCap))) - pPeerHTCap = (pu1Byte)(&pHTInfo->PeerHTCapBuf[4]); - else - pPeerHTCap = (pu1Byte)(pHTInfo->PeerHTCapBuf); - - if(!PlatformCompareMemory(pHTInfo->PeerHTInfoBuf, EWC11NHTInfo, sizeof(EWC11NHTInfo))) - pPeerHTInfo = (pu1Byte)(&pHTInfo->PeerHTInfoBuf[4]); - else - pPeerHTInfo = (pu1Byte)(pHTInfo->PeerHTInfoBuf); - - // Get 20/40 BSS Coexistence Management Support from Extended Capabilities element - osTmp = PacketGetElement(asocpdu, EID_EXTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osTmp.Length != 0) - pHTInfo->bPeerBssCoexistence = GET_EXT_CAPABILITY_ELE_BSS_COEXIST(osTmp.Octet); - - // Get OBSS scan interval from Overlapping BSS Scan Parameters element - osTmp = PacketGetElement(asocpdu, EID_OBSS, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osTmp.Length != 0) - pHTInfo->CurOBSSScanInterval = GET_OBSS_PARAM_ELE_SCAN_INTERVAL(osTmp.Octet); - - // Get OBSS scan exemption grant from 20/40 BSS Coexistence element - osTmp = PacketGetElement(asocpdu, EID_BSSCoexistence, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(osTmp.Length != 0) - pHTInfo->bCurOBSSScanExemptionGrt = GET_BSS_COEXISTENCE_ELE_OBSS_EXEMPTION_GRT(osTmp.Octet); - - pHTInfo->bPeer40MHzCap = GET_HT_CAPABILITY_ELE_CHL_WIDTH(pPeerHTCap); - pHTInfo->PeerExtChnlOffset = (EXTCHNL_OFFSET)GET_HT_INFO_ELE_EXT_CHL_OFFSET(pPeerHTInfo); - pHTInfo->bPeer40MHzIntolerant = GET_HT_CAPABILITY_ELE_FORTY_INTOLERANT(pPeerHTCap); - - - // B0 Config LDPC Coding Capability - if(TEST_FLAG(pHTInfo->HtLdpcCap, LDPC_HT_ENABLE_TX)) - { - SET_FLAG(pHTInfo->HtCurLdpc, GET_HT_CAPABILITY_ELE_LDPC_CAP(pPeerHTCap) ? (LDPC_HT_ENABLE_TX | LDPC_HT_CAP_TX) : 0); - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Target BSS support HT LDPC, enable Tx LDPC!\n")); - } - - // B5 B6 Config Short GI/ Long GI setting - pHTInfo->bCurShortGI20MHz = GET_HT_CAPABILITY_ELE_SHORT_GI20M(pPeerHTCap); - pHTInfo->bCurShortGI40MHz = GET_HT_CAPABILITY_ELE_SHORT_GI40M(pPeerHTCap); - - // B7 B8 B9 Config STBC setting - if( TEST_FLAG(pHTInfo->HtStbcCap, STBC_HT_ENABLE_TX) && GET_HT_CAPABILITY_ELE_RX_STBC(pPeerHTCap)) - { - SET_FLAG(pHTInfo->HtCurStbc, (STBC_HT_ENABLE_TX | STBC_HT_CAP_TX) ); - } - - // B11 Maximum A-MSDU Length - pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; - nMaxAMSDUSize = (GET_HT_CAPABILITY_ELE_MAX_AMSDU_SIZE(pPeerHTCap)==0)?HT_AMSDU_SIZE_4K:HT_AMSDU_SIZE_8K; - if(pHTInfo->nAMSDU_MaxSize > nMaxAMSDUSize ) - pHTInfo->nCurrent_AMSDU_MaxSize = nMaxAMSDUSize; - else - pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; - - RT_TRACE_F(COMP_AMSDU, DBG_LOUD, ("pHTInfo->bCurrent_AMSDU_Support = %d, CurrentSize = %d, ForcedSize = %d\n", pHTInfo->bCurrent_AMSDU_Support, pHTInfo->nCurrent_AMSDU_MaxSize, pHTInfo->ForcedAMSDUMaxSize)); - - // B12 Config DSSS/CCK mode in 40MHz mode - HTSetCCKSupport(Adapter, FALSE, pPeerHTCap); - - // A-MPDU setting - pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; - if( (pMgntInfo->SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP104) || - (pMgntInfo->SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_WEP40) || - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) || - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) || - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP)) - { - if( (pMgntInfo->IOTPeer == HT_IOT_PEER_ATHEROS) || - (pMgntInfo->IOTPeer == HT_IOT_PEER_UNKNOWN) ) - pHTInfo->bCurrentAMPDUEnable = FALSE; - } - - // B16 B17 Maximum A-MPDU Length Exponent - if(GET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pPeerHTCap) < pHTInfo->CurrentAMPDUFactor) - pHTInfo->CurrentAMPDUFactor = GET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pPeerHTCap); - - // BIT18 BIT19 BIT20 AMPDU Minimum MPDU Start Spacing - if(pHTInfo->MPDU_Density > GET_HT_CAPABILITY_ELE_MPDU_DENSITY(pPeerHTCap)) - pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density; - else - pHTInfo->CurrentMPDUDensity = GET_HT_CAPABILITY_ELE_MPDU_DENSITY(pPeerHTCap); - - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity); - - - if( pMgntInfo->IOTAction & HT_IOT_ACT_AMSDU_ENABLE || - pMgntInfo->IOTAction & HT_IOT_ACT_AMSDU_AMPDU) - { - pHTInfo->bCurrent_AMSDU_Support = TRUE; - - if(pMgntInfo->IOTAction & HT_IOT_ACT_AMSDU_ENABLE) - pHTInfo->bCurrentAMPDUEnable = FALSE; - } - - // Rx Reorder Setting - pHTInfo->bCurRxReorderEnable = pHTInfo->bRegRxReorderEnable; - - pCapMCS = GET_HT_CAPABILITY_ELE_MCS(pPeerHTCap); - - HTFilterMCSRate(Adapter, pCapMCS, pMgntInfo->dot11HTOperationalRateSet); - - // B2 B3 SM Power Save - pHTInfo->PeerMimoPs = GET_HT_CAPABILITY_ELE_MIMO_PWRSAVE(pPeerHTCap); - if(pHTInfo->PeerMimoPs <= MIMO_PS_DYNAMIC) - pMcsFilter = MCS_FILTER_1SS; - else - pMcsFilter = MCS_FILTER_ALL; - - pMgntInfo->HTHighestOperaRate = HTGetHighestMCSRate( - Adapter, - pMgntInfo->dot11HTOperationalRateSet, - pMcsFilter ); - - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_MAX_TIME, &pMgntInfo->HTHighestOperaRate); - - // Config Tx beamforming setting - CLEAR_FLAGS(pHTInfo->HtCurBeamform); - if( TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMEE_ENABLE) && - GET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(pPeerHTCap)) - { - SET_FLAG(pHTInfo->HtCurBeamform, BEAMFORMING_HT_BEAMFORMER_ENABLE); - // Shit to BEAMFORMING_HT_BEAMFORMEE_CHNL_EST_CAP - SET_FLAG(pHTInfo->HtCurBeamform, GET_HT_CAP_TXBF_CHNL_ESTIMATION_NUM_ANTENNAS(pPeerHTCap)<<6); - } - - if( TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMER_ENABLE) && - GET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(pPeerHTCap)) - { - SET_FLAG(pHTInfo->HtCurBeamform, BEAMFORMING_HT_BEAMFORMEE_ENABLE); - // Shit to BEAMFORMING_HT_BEAMFORMER_STEER_NUM - SET_FLAG(pHTInfo->HtCurBeamform, GET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(pPeerHTCap)<<4); - } - RT_DISP(FBEAM, FBEAM_FUN, ("Client HT Beaforming Cap = 0x%02X\n", pHTInfo->HtCurBeamform)); - - // Config current operation mode. - pHTInfo->CurrentOpMode = GET_HT_INFO_ELE_OPT_MODE(pPeerHTInfo); -} - - -/* -* This function is called when -* (1) MPInitialization Phase -* (2) Receiving of Deauthentication from AP -*/ - -// TODO: Should this funciton be called when receiving of Disassociation? -VOID -HTInitializeHTInfo(PADAPTER Adapter) -{ - PRT_HIGH_THROUGHPUT pHTInfo = Adapter->MgntInfo.pHTInfo; - - // These parameters will be reset when receiving deauthentication packet - pHTInfo->bCurrentHTSupport = FALSE; - - // LDPC support - CLEAR_FLAGS(pHTInfo->HtCurLdpc); - - // STBC support - CLEAR_FLAGS(pHTInfo->HtCurStbc); - - pHTInfo->bPeer40MHzCap = FALSE; - pHTInfo->bPeer40MHzIntolerant = FALSE; - - // Short GI support - pHTInfo->bCurShortGI20MHz = FALSE; - pHTInfo->bCurShortGI40MHz = FALSE; - - // CCK rate support - // This flag is set to TRUE to support CCK rate by default. - // It will be affected by "pHTInfo->bRegSuppCCK" and AP capabilities only when associate to 11N BSS. - pHTInfo->bCurSuppCCK = TRUE; - - // AMSDU related - pHTInfo->bCurrent_AMSDU_Support = FALSE; - pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; - - // AMPUD related - pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density; - pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor; - - // 20/40 Bss Coexistence related - pHTInfo->bPeerBssCoexistence = FALSE; - pHTInfo->bCurOBSSScanExemptionGrt = FALSE; - pHTInfo->CurOBSSScanInterval = 0; - pHTInfo->IdleOBSSScanCnt = 0; - pHTInfo->lastTimeSentObssRptUs = 0; - - // Initialize all of the parameters related to 11n - PlatformZeroMemory((PVOID)(&(pHTInfo->SelfHTCap)), sizeof(pHTInfo->SelfHTCap)); - PlatformZeroMemory((PVOID)(&(pHTInfo->SelfHTInfo)), sizeof(pHTInfo->SelfHTInfo)); - PlatformZeroMemory((PVOID)(&(pHTInfo->PeerHTCapBuf)), sizeof(pHTInfo->PeerHTCapBuf)); - PlatformZeroMemory((PVOID)(&(pHTInfo->PeerHTInfoBuf)), sizeof(pHTInfo->PeerHTInfoBuf)); - - // Set default IEEE spec for Draft N - pHTInfo->ePeerHTSpecVer = HT_SPEC_VER_IEEE; - - // Realtek proprietary aggregation mode - pHTInfo->RT2RT_HT_Mode = 0; - - // Beamforming support - CLEAR_FLAGS(pHTInfo->HtCurBeamform); -} - -VOID -HTInitializeBssDesc( - IN PBSS_HT pBssHT - ) -{ - - pBssHT->bdSupportHT = FALSE; - PlatformZeroMemory(pBssHT->bdHTCapBuf, sizeof(pBssHT->bdHTCapBuf)); - pBssHT->bdHTCapLen = 0; - PlatformZeroMemory(pBssHT->bdHTInfoBuf, sizeof(pBssHT->bdHTInfoBuf)); - pBssHT->bdHTInfoLen = 0; - - pBssHT->bdHTSpecVer= HT_SPEC_VER_IEEE; - - pBssHT->RT2RT_HT_Mode = 0; - - pBssHT->bd40Intolerant = FALSE; - pBssHT->bdOBSSExemption = FALSE; - pBssHT->OBSSScanInterval = 0; -} - - - -VOID -HTParsingHTCapElement( - IN PADAPTER Adapter, - IN OCTET_STRING HTCapIE, - OUT PRT_WLAN_BSS pBssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if( HTCapIE.Length > sizeof(pBssDesc->BssHT.bdHTCapBuf) ) - { - RT_TRACE( COMP_HT, DBG_LOUD, ("HTParsingHTCapElement(): HT Capability Element length is too long!\n") ); - return; - } - - // TODO: Check the correctness of HT Cap - //Print each field in detail. Driver should not print out this message by default - if(!ACTING_AS_AP(Adapter) && !pMgntInfo->mAssoc) - HTDebugHTCapability(DBG_TRACE, Adapter, &HTCapIE, (pu1Byte)"HTParsingHTCapElement()"); - - HTCapIE.Length = HTCapIE.Length > sizeof(pBssDesc->BssHT.bdHTCapBuf)?\ - sizeof(pBssDesc->BssHT.bdHTCapBuf):HTCapIE.Length; //prevent from overflow - - CopyMem(pBssDesc->BssHT.bdHTCapBuf, HTCapIE.Octet, HTCapIE.Length); - pBssDesc->BssHT.bdHTCapLen = HTCapIE.Length; - -} - - -VOID -HTParsingHTInfoElement( - PADAPTER Adapter, - OCTET_STRING HTInfoIE, - PRT_WLAN_BSS pBssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if( HTInfoIE.Length > sizeof(pBssDesc->BssHT.bdHTInfoBuf)) - { - RT_TRACE( COMP_HT, DBG_LOUD, ("HTParsingHTInfoElement(): HT Information Element length is too long!\n") ); - return; - } - - // TODO: Check the correctness of HT Info - //Print each field in detail. Driver should not print out this message by default - if(!ACTING_AS_AP(Adapter) && !pMgntInfo->mAssoc) - HTDebugHTInfo(DBG_TRACE, Adapter, &HTInfoIE, (pu1Byte)"HTParsingHTInfoElement()"); - - HTInfoIE.Length = HTInfoIE.Length > sizeof(pBssDesc->BssHT.bdHTInfoBuf)?\ - sizeof(pBssDesc->BssHT.bdHTInfoBuf):HTInfoIE.Length; //prevent from overflow - - CopyMem( pBssDesc->BssHT.bdHTInfoBuf, HTInfoIE.Octet, HTInfoIE.Length); - pBssDesc->BssHT.bdHTInfoLen = HTInfoIE.Length; -} - -/* - * Get HT related information from beacon and save it in BssDesc - * - * (1) Parse HTCap, and HTInfo, and record whether it is 11n AP - * (2) If peer is HT, but not WMM, call QosSetLegacyWMMParamWithHT() - * (3) Check whether peer is Realtek AP (for Realtek proprietary aggregation mode). - * Input: - * PADAPTER Adapter - * - * Output: - * PRT_TCB BssDesc - * -*/ -VOID -HTGetValueFromBeaconOrProbeRsp( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu, - PRT_WLAN_BSS bssDesc -) -{ - OCTET_STRING HTCapIE, HTInfoIE, OBSSIE, BssCoexistenceIE, mmpdu; - - mmpdu.Octet = pSRCmmpdu->Octet; - mmpdu.Length = pSRCmmpdu->Length; - - //2Note: - // Mark for IOT testing using Linksys WRT350N, This AP does not contain WMM IE when - // it is configured at pure-N mode. - // if(bssDesc->BssQos.bdQoSMode & QOS_WMM) - // - - HTInitializeBssDesc (&bssDesc->BssHT); - - //2<1> Parse HTCap, and HTInfo - // Get HT Capability IE: (1) Get IEEE Draft N IE or (2) Get EWC IE - HTCapIE = PacketGetElement(mmpdu, EID_HTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - RT_DISP(FBEACON, BCN_SHOW, - ("EID_HTCapability HTCapIE.Length=%d\r\n", HTCapIE.Length)) - if(HTCapIE.Length == 0) - { - HTCapIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_11N_EWC_HT_CAP, OUI_SUBTYPE_DONT_CARE); - if(HTCapIE.Length != 0) - bssDesc->BssHT.bdHTSpecVer= HT_SPEC_VER_EWC; - RT_DISP(FBEACON, BCN_SHOW, - ("EID_Vendor HTCapIE.Length=%d\r\n", HTCapIE.Length)) - } - if(HTCapIE.Length != 0) - HTParsingHTCapElement(Adapter, HTCapIE, bssDesc); - - // Get HT Information IE: (1) Get IEEE Draft N IE or (2) Get EWC IE - HTInfoIE = PacketGetElement(mmpdu, EID_HTInfo, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(HTInfoIE.Length == 0) - { - HTInfoIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_11N_EWC_HT_INFO, OUI_SUBTYPE_DONT_CARE); - if(HTInfoIE.Length != 0) - bssDesc->BssHT.bdHTSpecVer = HT_SPEC_VER_EWC; - } - if(HTInfoIE.Length != 0) - HTParsingHTInfoElement(Adapter, HTInfoIE, bssDesc); - - //2<2>If peer is HT, but not WMM, call QosSetLegacyWMMParamWithHT() - if(HTCapIE.Length != 0) - { - bssDesc->BssHT.bdSupportHT = TRUE; - if(bssDesc->BssQos.bdQoSMode == QOS_DISABLE) - QosSetLegacyWMMParamWithHT(Adapter, bssDesc); - } - else - { - bssDesc->BssHT.bdSupportHT = FALSE; - } - - //2<3>Parse OBSS Scan IE - OBSSIE = PacketGetElement(mmpdu, EID_OBSS, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(OBSSIE.Length != 0) - BSS_ParsingOBSSInfoElement(Adapter, OBSSIE, bssDesc); - - //2<3>Parse 20 40 BSS Coexistence IE - // 23. 20/40 BSS Coexistence element - BssCoexistenceIE = PacketGetElement(mmpdu, EID_BSSCoexistence, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if(BssCoexistenceIE.Length != 0) - BSS_ParsingBSSCoexistElement(Adapter, BssCoexistenceIE, bssDesc); - - //2<4>Check peer configuration - if(HTCapIE.Length!=0 && HTCapIE.Octet != NULL) - { - bssDesc->bdBandWidth = (CHANNEL_WIDTH)(GET_HT_CAPABILITY_ELE_CHL_WIDTH(HTCapIE.Octet)); - bssDesc->BssHT.bd40Intolerant = GET_HT_CAPABILITY_ELE_FORTY_INTOLERANT(HTCapIE.Octet); - } - else - bssDesc->bdBandWidth = CHANNEL_WIDTH_20; -} - -/*----------------------------------------------------------------------------- - * Function: HTResetSelfAndSavePeerSetting() - * - * Overview: This function should ONLY be called before association. SetupJoinInfraInfo(). - * Driver reset it's state to it's capability and peer's capability - * - * Input: PADAPTER Adapter - * PRT_WLAN_BSS pBssDesc - * - * Output: NONE - * - * Return: NONE - - *---------------------------------------------------------------------------*/ -VOID -HTResetSelfAndSavePeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - BOOLEAN bIOTAction; - - // - // Save Peer Setting before Association - // - if( pHTInfo->bEnableHT && pBssDesc->BssHT.bdSupportHT) - { - pHTInfo->bCurrentHTSupport = TRUE; - pHTInfo->ePeerHTSpecVer = pBssDesc->BssHT.bdHTSpecVer; - - // Save HTCap and HTInfo information Element - if(pBssDesc->BssHT.bdHTCapLen > 0 && pBssDesc->BssHT.bdHTCapLen <= sizeof(pHTInfo->PeerHTCapBuf)) - CopyMem(pHTInfo->PeerHTCapBuf, pBssDesc->BssHT.bdHTCapBuf, pBssDesc->BssHT.bdHTCapLen); - - if(pBssDesc->BssHT.bdHTInfoLen > 0 && pBssDesc->BssHT.bdHTInfoLen <= sizeof(pHTInfo->PeerHTInfoBuf)) - CopyMem(pHTInfo->PeerHTInfoBuf, pBssDesc->BssHT.bdHTInfoBuf, pBssDesc->BssHT.bdHTInfoLen); - - if(pBssDesc->BssHT.bdHTCapLen != 0) - pHTInfo->bPeer40MHzCap = GET_HT_CAPABILITY_ELE_CHL_WIDTH(pBssDesc->BssHT.bdHTCapBuf); - - if(pBssDesc->BssHT.bdHTInfoLen != 0) - pHTInfo->PeerExtChnlOffset = (EXTCHNL_OFFSET)GET_HT_INFO_ELE_EXT_CHL_OFFSET(pBssDesc->BssHT.bdHTInfoBuf); - - // Check whether RT to RT aggregation mode is enabled - pHTInfo->RT2RT_HT_Mode = pBssDesc->BssHT.RT2RT_HT_Mode; - - // Decide IOT Action - // Must be called after the parameter of pHTInfo->bCurrentRT2RTAggregation is decided - pMgntInfo->IOTAction = 0; - bIOTAction = HTIOTActIsDisableMCSTwoSpatialStream(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_ALL_2SS; - - bIOTAction = HTIOTActIsForcedCTS2Self(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF; - - bIOTAction = HTIOTActIsEDCABiasRx(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_EDCA_BIAS_ON_RX; - - bIOTAction = HTIOCActIsDisableCckRate(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_CCK_RATE; - - bIOTAction = HTIOTActDisableHighPower(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_HIGH_POWER; - - bIOTAction = HTIOTActIsTxNoAggregation(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_TX_NO_AGGREGATION; - - bIOTAction = HTIOTActIsDisableTx40MHz(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_TX_40_MHZ; - - bIOTAction = HTIOTActIsDisableTx2SS(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_TX_2SS; - - bIOTAction = HTIOTActDisableRx40MHzShortGI(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_RX_40MHZ_SHORT_GI; - - bIOTAction = HTIOTActDisableRx20MHzShortGI(Adapter, pBssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_RX_20MHZ_SHORT_GI; - - if (pBssDesc->SubTypeOfVender == HT_IOT_PEER_ATHEROS_NETGEAR_WNDAP3200) - { - pMgntInfo->IOTAction |=HT_IOT_ACT_DISABLE_EXT_CHNL_COMBINE; - } - } - else - { - pHTInfo->bCurrentHTSupport = FALSE; - pHTInfo->bPeer40MHzCap = CHANNEL_WIDTH_20; - pHTInfo->PeerExtChnlOffset = EXTCHNL_OFFSET_NO_EXT; - pHTInfo->RT2RT_HT_Mode = 0; - pMgntInfo->IOTAction = 0; - } - -} - -VOID -HTUpdateSelfAndPeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pu1Byte pPeerHTInfo = (pu1Byte)pBssDesc->BssHT.bdHTInfoBuf; - - if(pHTInfo->bCurrentHTSupport) - { - // Config current operation mode. - if(pBssDesc->BssHT.bdHTInfoLen != 0) - { - pHTInfo->CurrentOpMode = GET_HT_INFO_ELE_OPT_MODE(pPeerHTInfo); - pHTInfo->PeerExtChnlOffset = (EXTCHNL_OFFSET)GET_HT_INFO_ELE_EXT_CHL_OFFSET(pPeerHTInfo); - } - - // - pHTInfo->CurOBSSScanInterval = pBssDesc->BssHT.OBSSScanInterval; - pHTInfo->bCurOBSSScanExemptionGrt = pBssDesc->BssHT.bdOBSSExemption; - } -} - -VOID -HTUseDefaultSettingFromReg( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - BOOLEAN bRegBW40MHz = CHNL_GetRegBWSupport(Adapter)?TRUE:FALSE; - - pHTInfo->HtCurLdpc = pHTInfo->HtLdpcCap; - pHTInfo->HtCurStbc = pHTInfo->HtStbcCap; - pHTInfo->HtCurBeamform = pHTInfo->HtBeamformCap; - - pHTInfo->bCurSuppCCK = pHTInfo->bRegSuppCCK; - pHTInfo->bCurShortGI20MHz= TRUE; - pHTInfo->bCurShortGI40MHz= bRegBW40MHz?TRUE:FALSE; - pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; - pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; - pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; - pHTInfo->CurrentAMPDUFactor = pHTInfo->AMPDU_Factor; - pHTInfo->CurrentMPDUDensity = pHTInfo->MPDU_Density; - - // XP, Win7 DefAdapter AP mode mAssoc = FALSE. AP_SetupStartApInfo/SetupStartIBSSInfo (only default port) - // ExtAdapter AP mode mAssoc = FALSE. AP_SetupStartApInfo/SetupStartIBSSInfo (two port) - // DefAdapter AP mode mAssoc = TRUE. If STA connected (two port) - // Vista DefAdapter AP mode mAssoc = FALSE. AP_SetupStartApInfo/SetupStartIBSSInfo (only default port) - if(DefAdapter->MgntInfo.mAssoc == TRUE) - pMgntInfo->IOTPeer = DefAdapter->MgntInfo.IOTPeer; - else - pMgntInfo->IOTPeer = HT_IOT_PEER_SELF_SOFTAP; - - pHTInfo->bCurRxReorderEnable = pHTInfo->bRegRxReorderEnable; - - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity); - - HTFilterMCSRate(Adapter, pMgntInfo->Regdot11HTOperationalRateSet, pMgntInfo->dot11HTOperationalRateSet); - - pMgntInfo->HTHighestOperaRate = HTGetHighestMCSRate( - Adapter, - pMgntInfo->dot11HTOperationalRateSet, - MCS_FILTER_ALL ); - - if(bRegBW40MHz) - pMgntInfo->dot11CurrentChannelBandWidth = CHANNEL_WIDTH_40; - else - pMgntInfo->dot11CurrentChannelBandWidth = CHANNEL_WIDTH_20; -} - -VOID -HTUseDefaultSettingFromDefault( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = &DefAdapter->MgntInfo; - PRT_HIGH_THROUGHPUT pDefHTInfo = DefAdapter->MgntInfo.pHTInfo; - - //===== The ones that not follow ====== - pHTInfo->bCurShortGI20MHz = TRUE; - - pHTInfo->HtCurLdpc = pHTInfo->HtLdpcCap; - pHTInfo->HtCurStbc = pHTInfo->HtStbcCap; - pHTInfo->HtCurBeamform = pHTInfo->HtBeamformCap; - - pHTInfo->bCurrentAMPDUEnable = pHTInfo->bAMPDUEnable; - pHTInfo->bCurrent_AMSDU_Support = pHTInfo->bAMSDU_Support; - pHTInfo->nCurrent_AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; - - pHTInfo->bCurRxReorderEnable = pHTInfo->bRegRxReorderEnable; - - HTFilterMCSRate(Adapter, pMgntInfo->Regdot11HTOperationalRateSet, pMgntInfo->dot11HTOperationalRateSet); - pMgntInfo->HTHighestOperaRate = HTGetHighestMCSRate( - Adapter, - pMgntInfo->dot11HTOperationalRateSet, - MCS_FILTER_ALL ); - - //============================== - pHTInfo->bCurSuppCCK = pDefHTInfo->bCurSuppCCK; - pHTInfo->bCurShortGI40MHz = pDefMgntInfo->dot11CurrentChannelBandWidth?FALSE:TRUE; - //AMPDU Factor and Density is register, can't be per pkt. AMPDU_Factor must use Default for register. by Bohn, 2009.12.18 - pHTInfo->CurrentAMPDUFactor = pDefHTInfo->CurrentAMPDUFactor; - pHTInfo->CurrentMPDUDensity = pDefHTInfo->CurrentMPDUDensity; - //[Win7] Adapter act as AP already, Defaualt Port Connected already, 2009.07.30, by Bohn - pMgntInfo->IOTPeer = pDefMgntInfo->IOTPeer; - - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_FACTOR, &pHTInfo->CurrentAMPDUFactor); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_MIN_SPACE, &pHTInfo->CurrentMPDUDensity); - - pMgntInfo->dot11CurrentChannelBandWidth = pDefMgntInfo->dot11CurrentChannelBandWidth; -} - - -VOID -HTUseDefaultSetting( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - u1Byte TwoPortStatus =(u1Byte) TWO_PORT_STATUS__DEFAULT_ONLY; - - if(pHTInfo->bEnableHT) - { - pHTInfo->bCurrentHTSupport = TRUE; - - //[Win7] [Vista/XP] Cross Platform Capbility Enable!, 2009.07.31, by Bohn - GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__STATUS,NULL,&TwoPortStatus); - - //[win7 Two Port BW40Mhz issue] Extention Port Use Reg's Default Value. 2009.05.20, by bohn - if( TwoPortStatus==TWO_PORT_STATUS__DEFAULT_ONLY || - TwoPortStatus==TWO_PORT_STATUS__EXTENSION_ONLY || - TwoPortStatus==TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE) - { - HTUseDefaultSettingFromReg(Adapter); - } - else if(TwoPortStatus==TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT) - { - //[win7 Two Port BW40Mhz issue] Extention Port obey the rule of Default Port. 2009.05.20, by bohn - HTUseDefaultSettingFromDefault(Adapter); - } - else if(TwoPortStatus==TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20 || - TwoPortStatus==TWO_PORT_STATUS__DEFAULT_A_EXTENSION_N20 || - TwoPortStatus==TWO_PORT_STATUS__ADHOC) - { - //[Win7] Now is the Default-G Extension-N20 case, we need to reset all HT value and forced to N20 - // 2009.07.09, by Bohn - HTUseDefaultSettingFromReg(Adapter); - - pMgntInfo->dot11CurrentChannelBandWidth = CHANNEL_WIDTH_20; - } - } - else - { - pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->dot11CurrentChannelBandWidth = CHANNEL_WIDTH_20; - } -} - -BOOLEAN -HTCCheck( - PADAPTER Adapter, - PRT_RFD pRfd, - POCTET_STRING pFrame - ) -{ - if( IsQoSDataFrame(pFrame->Octet) && Frame_Order(*pFrame) == 1) - return TRUE; - else - return FALSE; -} - -VOID -HTCheckHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN pu1Byte pHTCap -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte pMcsFilter; - u2Byte TmpValue; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - u1Byte HtSTBC = 0; - - //1 Get HT properties of the STA - - // B0 Config LDPC Coding Capability - if(TEST_FLAG(pHTInfo->HtLdpcCap, LDPC_HT_ENABLE_TX)) - SET_FLAG(pEntry->HTInfo.LDPC, GET_HT_CAPABILITY_ELE_LDPC_CAP(pHTCap) ? (LDPC_HT_ENABLE_TX | LDPC_HT_CAP_TX) : 0); - - // B2 B3 Config Mimo power save settings - pEntry->HTInfo.MimoPs = GET_HT_CAPABILITY_ELE_MIMO_PWRSAVE(pHTCap); - - // B5 B6 Config Short GI/ Long GI setting - if(pHTInfo->bCurShortGI20MHz) - pEntry->HTInfo.bShortGI20M = GET_HT_CAPABILITY_ELE_SHORT_GI20M(pHTCap)?TRUE:FALSE; - else - pEntry->HTInfo.bShortGI20M = FALSE; - - if(pHTInfo->bCurShortGI40MHz) - pEntry->HTInfo.bShortGI40M = GET_HT_CAPABILITY_ELE_SHORT_GI40M(pHTCap)?TRUE:FALSE; - else - pEntry->HTInfo.bShortGI40M = FALSE; - - // B7 B8 B9 Config STBC setting - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_TX_STBC, (pu1Byte)&HtSTBC); - if(!TEST_FLAG(pHTInfo->HtStbcCap, STBC_HT_ENABLE_TX)) - HtSTBC = 0; - - if(HtSTBC < GET_HT_CAPABILITY_ELE_RX_STBC(pHTCap)) - pEntry->HTInfo.STBC = HtSTBC; - else - pEntry->HTInfo.STBC = GET_HT_CAPABILITY_ELE_RX_STBC(pHTCap); - - // B11 Config A-MSDU setting - TmpValue = (GET_HT_CAPABILITY_ELE_MAX_AMSDU_SIZE(pHTCap)==0)?HT_AMSDU_SIZE_4K:HT_AMSDU_SIZE_8K; - if(pHTInfo->nAMSDU_MaxSize >= TmpValue) - pEntry->HTInfo.AMSDU_MaxSize = TmpValue; - else - pEntry->HTInfo.AMSDU_MaxSize = pHTInfo->nAMSDU_MaxSize; - - // B12 Config DSSS/CCK mode in 40MHz mode - pEntry->HTInfo.bSupportCck = - ((pHTInfo->bCurSuppCCK)?(GET_HT_CAPABILITY_ELE_DSS_CCK(pHTCap)?TRUE:FALSE):FALSE); - - // Get operation bandwidth - if(CHNL_RUN_ABOVE_40MHZ(pMgntInfo)) - pEntry->BandWidth = GET_HT_CAPABILITY_ELE_CHL_WIDTH(pHTCap)?CHANNEL_WIDTH_40:CHANNEL_WIDTH_20; - else - pEntry->BandWidth = CHANNEL_WIDTH_20; - - // Get AMPDU Factor - if(GET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pHTCap) < pHTInfo->CurrentAMPDUFactor) - pEntry->HTInfo.AMPDU_Factor = GET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pHTCap); - else - pEntry->HTInfo.AMPDU_Factor = pHTInfo->CurrentAMPDUFactor; - - // Get AMPDU Density - if(pHTInfo->MPDU_Density >= GET_HT_CAPABILITY_ELE_MPDU_DENSITY(pHTCap)) - pEntry->HTInfo.MPDU_Density = pHTInfo->MPDU_Density; - else - pEntry->HTInfo.MPDU_Density = GET_HT_CAPABILITY_ELE_MPDU_DENSITY(pHTCap); - - // Filter MCS rate set that we support. - HTFilterMCSRate(Adapter, GET_HT_CAPABILITY_ELE_MCS(pHTCap), pEntry->HTInfo.McsRateSet); - - // This is for static mimo power save - if(pEntry->HTInfo.MimoPs <= MIMO_PS_DYNAMIC) - pMcsFilter = MCS_FILTER_1SS; - else - pMcsFilter = MCS_FILTER_ALL; - - pEntry->HTInfo.HTHighestOperaRate = HTGetHighestMCSRate(Adapter, pEntry->HTInfo.McsRateSet, pMcsFilter); - - CLEAR_FLAGS(pEntry->HTInfo.HtCurBeamform); - // B11 SU Beamformer Capable, we are Beamformee - if( TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMEE_ENABLE) && - GET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(pHTCap)) - { - SET_FLAG(pEntry->HTInfo.HtCurBeamform, BEAMFORMING_HT_BEAMFORMER_ENABLE); - // Shit to BEAMFORMING_HT_BEAMFORMEE_CHNL_EST_CAP - SET_FLAG(pHTInfo->HtCurBeamform, GET_HT_CAP_TXBF_CHNL_ESTIMATION_NUM_ANTENNAS(pHTCap)<<6); - } - - // B12 SU Beamformee Capable, we are Beamformer - if( TEST_FLAG(pHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMER_ENABLE) && - GET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(pHTCap)) - { - SET_FLAG(pEntry->HTInfo.HtCurBeamform, BEAMFORMING_HT_BEAMFORMEE_ENABLE); - // Shit to BEAMFORMING_HT_BEAMFORMER_STEER_NUM - SET_FLAG(pHTInfo->HtCurBeamform, GET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(pHTCap)<<4); - } - RT_DISP(FBEAM, FBEAM_FUN, ("Entry HT Beaforming Cap = 0x%02X\n", pEntry->HTInfo.HtCurBeamform)); - - RT_PRINT_DATA( COMP_HT, DBG_TRACE, "Received HTCap in AsocReq", pHTCap, EID_HTCapability); -} - - - -// -// Description: Switch BW to 40HMz for a specific reason. It only needs to be operate if WoWLAN mode -// is enabled and we will call the function in PNP_SET_POWER OID handler. -// According to 802.11n spec chapter 11.14.12 "Switching between 40 MHz and 20 MHz", -// 2.4G AP will switch BW (40 <--> 20MHz) in some cases, and we will really switch BW -// to 20MHz if our BSS AP enable the capability in beacon. It will cause an issue that if we -// switch BW to 20MHz before the system enters WoWLAN mode, and the AP returns to 40MHz -// such that we cannot receive 40MHz data and will be deauth by AP in some cases, so we -// recover the BW to 40MHz in order to Rx 40MHz data and we should make sure that we will -// not Tx MCS rate during WoWLAN mode (now we set all the Tx packet rates to 1M, see -// FillFakeTxDescriptor_XXX().). -// -// 2012.12.20, by tynli. -// -VOID -HTRecoverBWTo40MHz( - IN PADAPTER Adapter -) -{ - CHANNEL_WIDTH RegBW = (CHANNEL_WIDTH)(CHNL_GetRegBWSupport(Adapter)?TRUE:FALSE); - - // Only processing recover flow if the STA support 40MHz bandwidth. - if(RegBW == CHANNEL_WIDTH_20) - return; - - // Only if the wireless mode is 2.4G. According to 802.11n spec chapter 11.14.12 "Switching between - // 40 MHz and 20 MHz", it mentions that AP is 2.4G mode. - if(!IS_WIRELESS_MODE_N_24G(Adapter)) - return; - - CHNL_SetBwChnlFromPeer(Adapter); -} diff --git a/network/wlan/WDI/COMMON/HTGen.h b/network/wlan/WDI/COMMON/HTGen.h deleted file mode 100644 index 1ed55dfa..00000000 --- a/network/wlan/WDI/COMMON/HTGen.h +++ /dev/null @@ -1,306 +0,0 @@ -#ifndef __INC_HTGEN_H -#define __INC_HTGEN_H - -extern u1Byte MCS_FILTER_ALL[16]; -extern u1Byte MCS_FILTER_1SS[16]; - -/* 2007/07/11 MH Modify the macro. Becaus STA may link with a N-AP. If we set - STA in A/B/G mode and AP is still in N mode. The macro will be wrong. We have - to add a macro to judge wireless mode. */ -#define PICK_RATE(_nLegacyRate, _nMcsRate) \ - (_nMcsRate==0)?(_nLegacyRate&0x7f):(_nMcsRate) - -/* 2007/07/12 MH We only define legacy and HT wireless mode now. */ -#define LEGACY_WIRELESS_MODE (WIRELESS_MODE_A|\ - WIRELESS_MODE_B|\ - WIRELESS_MODE_G) - -#define CURRENT_RATE(WirelessMode, LegacyRate, HTRate) \ - ((WirelessMode & LEGACY_WIRELESS_MODE)!=0)?\ - (LegacyRate):\ - (PICK_RATE(LegacyRate, HTRate)) - - -#define RATE_ADPT_MCS32_MASK 0x01 - -#define GET_HT_INFO(_pMgntInfo) ((PRT_HIGH_THROUGHPUT)((_pMgntInfo)->pHTInfo)) - -#define IS_UNDER_11N_AES_MODE(_ADAPTER) ((_ADAPTER->MgntInfo.pHTInfo->bCurrentHTSupport==TRUE) &&\ - (_ADAPTER->MgntInfo.SecurityInfo.PairwiseEncAlgorithm==RT_ENC_ALG_AESCCMP)) - -#define HT_MGNT_SET_AMSDU(_ADAPTER, _MODE)\ - _ADAPTER->MgntInfo.pHTInfo->ForcedAMSDUMode = \ - (PLATFORM_LIMITED_TX_BUF_SIZE(_ADAPTER))?_ADAPTER->MgntInfo.pHTInfo->ForcedAMSDUMode:_MODE - - -typedef enum _AMSDU_SIZE{ - AMSDU_SIZE_UNSPECIFED = 0, - HT_AMSDU_SIZE_4K = 3839, - HT_AMSDU_SIZE_8K = 7935, - VHT_AMSDU_SIZE_4K = 3895, - VHT_AMSDU_SIZE_8K = 7991, - VHT_AMSDU_SIZE_11K = 11454, -}AMSDU_SIZE; - - -typedef enum AGGRE_SIZE{ - HT_AGG_SIZE_8K = 0, - HT_AGG_SIZE_16K = 1, - HT_AGG_SIZE_32K = 2, - HT_AGG_SIZE_64K = 3, - VHT_AGG_SIZE_128K = 4, - VHT_AGG_SIZE_256K = 5, - VHT_AGG_SIZE_512K = 6, - VHT_AGG_SIZE_1024K = 7, -}AGGRE_SIZE_E, *PAGGRE_SIZE_E; - - -// Determines the minimum timing between the start of adjacent MPDUs within an AMPDU, measured at the PHY-SAP. -typedef enum _HT_MPDU_DENSITY{ - HT_DENSITY_NO_RESTRICTION = 0, - HT_DENSITY_1_4US = 1, // 1/4us - HT_DENSITY_1_2US = 2, // 1/2us - HT_DENSITY_1US = 3, // 1us - HT_DENSITY_2US = 4, // 2us - HT_DENSITY_4US = 5, // 4us - HT_DENSITY_8US = 6, // 8us - HT_DENSITY_16US = 7, // 16s -}HT_MPDU_DENSITY, *PHT_MPDU_DENSITY; - - -// Indicate different AP vendor for IOT issue. -typedef enum _HT_IOT_PEER -{ - HT_IOT_PEER_UNKNOWN = 0, - HT_IOT_PEER_REALTEK = 1, - HT_IOT_PEER_REALTEK_92SE = 2, - HT_IOT_PEER_BROADCOM = 3, - HT_IOT_PEER_RALINK = 4, - HT_IOT_PEER_ATHEROS = 5, - HT_IOT_PEER_CISCO = 6, - HT_IOT_PEER_MERU = 7, - HT_IOT_PEER_MARVELL = 8, - HT_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17 - HT_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP - HT_IOT_PEER_AIRGO = 11, - HT_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 12, - HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 13, - HT_IOT_PEER_CMW500 = 14, - HT_IOT_PEER_MAX, -}HT_IOT_PEER_E, *PHTIOT_PEER_E; - -typedef enum _HT_IOT_PEER_SUBTYPE -{ - HT_IOT_PEER_ATHEROS_DIR635 = 0, - HT_IOT_PEER_ATHEROS_DIR655 = 1, - HT_IOT_PEER_ATHEROS_NETGEAR_WNDAP3200 = 3, - HT_IOT_PEER_BROADCOM_NETGEAR_WNDAP4500 = 4, - HT_IOT_PEER_ATHEROS_NETGEAR_WNDAP3500 = 5, - HT_IOT_PEER_LINKSYS_E4200_V1 = 6, - HT_IOT_PEER_TPLINK_AC1750 = 7, - HT_IOT_PEER_RALINK_DIR300 = 8, -}HT_IOT_PEER_SUBTYPE_E, *PHTIOT_PEER_SUBTYPE_E; - - -// IOT Action for different AP -typedef enum _HT_IOT_ACTION{ - HT_IOT_ACT_AMSDU_ENABLE = 0x00000002, - HT_IOT_ACT_AMSDU_AMPDU = 0x00000004, - - HT_IOT_ACT_DISABLE_EDCA_TURBO = 0x00000010, - HT_IOT_ACT_MGNT_USE_CCK_6M = 0x00000020, - HT_IOT_ACT_FORCED_DATA_RATE = 0x00000040, - - HT_IOT_ACT_FORCED_CTS2SELF = 0x00000200, - HT_IOT_ACT_FORCED_RTS = 0x00000400, - - HT_IOT_ACT_REJECT_ADDBA_REQ = 0x00001000, - HT_IOT_ACT_EDCA_BIAS_ON_RX = 0x00004000, - - // Joseph add temporarily. - HT_IOT_ACT_DISABLE_HIGH_POWER = 0x00040000, - HT_IOT_ACT_DISABLE_TX_40_MHZ = 0x00080000, - - HT_IOT_ACT_TX_NO_AGGREGATION = 0x00100000, - HT_IOT_ACT_DISABLE_TX_2SS = 0x00200000, - HT_IOT_ACT_DISABLE_ALL_2SS = 0x00400000, - HT_IOT_ACT_NULL_DATA_POWER_SAVING = 0x00800000, - - // Roger sync 91su branch to trunk - HT_IOT_ACT_DISABLE_CCK_RATE = 0x01000000, - HT_IOT_ACT_FORCED_ENABLE_BE_TXOP = 0x02000000, - HT_IOT_ACT_WA_IOT_Broadcom = 0x04000000, - HT_IOT_ACT_DISABLE_RX_40MHZ_SHORT_GI = 0x08000000, - - HT_IOT_ACT_BCM_AP_RX_FAIL_RELINK = 0x10000000, - HT_IOT_ACT_DISABLE_RX_20MHZ_SHORT_GI = 0x20000000, - // 2011/11/03 MH Disable extension channel bandwidth indication( No combinaton in primary & ext channel). - HT_IOT_ACT_DISABLE_EXT_CHNL_COMBINE = 0x40000000, - // 2011/11/28 MH Disable ALL AC TXOP for WNDAP4500 3T3R broadcom ap. - HT_IOT_ACT_DISABLE_AC_TXOP = 0x80000000, -}HT_IOT_ACTION_E, *PHT_IOT_ACTION_E; - - -typedef enum _RT_HT_INF0_CAP{ - RT_HT_CAP_USE_TURBO_AGGR = 0x01, - RT_HT_CAP_USE_LONG_PREAMBLE = 0x02, - RT_HT_CAP_USE_AMPDU = 0x04, - RT_HT_CAP_USE_WOW = 0x8, - RT_HT_CAP_USE_SOFTAP = 0x10, - RT_HT_CAP_USE_92SE = 0x20, - RT_HT_CAP_USE_88C_92C = 0x40, - RT_HT_CAP_USE_AP_CLIENT_MODE = 0x80, // AP team request to reserve this bit, by Emily -}RT_HT_INF0_CAPBILITY, *PRT_HT_INF0_CAPBILITY; - - -typedef enum _RT_HT_INF1_CAP{ - RT_HT_CAP_USE_VIDEO_CLIENT = 0x01, - RT_HT_CAP_USE_JAGUAR_BCUT = 0x02, - RT_HT_CAP_USE_JAGUAR_CCUT = 0x04, -}RT_HT_INF1_CAPBILITY, *PRT_HT_INF1_CAPBILITY; - -u2Byte -HTMcsToDataRate( - PADAPTER Adapter, - u2Byte nMcsRate - ); - -u2Byte -HTPeerMcsToDataRate( - PADAPTER Adapter, - PRT_WLAN_STA pEntry, - u1Byte nMcsRate - ); - -VOID -HTSetCCKSupport( - PADAPTER Adapter, - BOOLEAN bStarter, - pu1Byte pPeerHTCap - ); - -VOID -HTConstructInfoElement( - PADAPTER Adapter, - POCTET_STRING posHTCap); - -VOID -HTConstructCapabilityElement( - PADAPTER Adapter, - POCTET_STRING posHTInfo, - BOOLEAN bAssoc); - - -VOID -HTOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu); - -VOID -HTInitializeHTInfo( - PADAPTER Adapter); - -VOID -HTInitializeBssDesc( - IN PBSS_HT pBssHT - ); - -VOID -HTParsingHTCapElement( - PADAPTER Adapter, - OCTET_STRING HTCapIE, - PRT_WLAN_BSS pBssDesc); - -VOID -HTParsingHTInfoElement( - PADAPTER Adapter, - OCTET_STRING HTInfoIE, - PRT_WLAN_BSS pBssDesc); - -VOID -HTGetValueFromBeaconOrProbeRsp( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu, - PRT_WLAN_BSS BssDesc); - -VOID -ResetIOTSetting( - PMGNT_INFO pMgntInfo); - -VOID -HTResetSelfAndSavePeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc); - -VOID -HTUpdateSelfAndPeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - -VOID -HTUseDefaultSetting( - PADAPTER Adapter -); - -BOOLEAN -HTFilterMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pSupportMCS, - OUT pu1Byte pOperateMCS -); - -VOID -HT_PickMCSRate( - IN PADAPTER Adapter, - OUT pu1Byte pOperateMCS - ); - -u1Byte -HTGetHighestMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pMCSRateSet, - IN pu1Byte pMCSFilter - ); - -BOOLEAN -HTCCheck( - PADAPTER Adapter, - PRT_RFD pRfd, - POCTET_STRING pFrame - ); - -VOID -HTCheckHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN pu1Byte pHTCap -); - - -BOOLEAN -HTIOTActIsCCDFsync( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - - -BOOLEAN -HTIOTActIsForcedAMSDU8K( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - - -VOID -IOTPeerDetermine( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -VOID -HTRecoverBWTo40MHz( - IN PADAPTER Adapter -); - -#endif diff --git a/network/wlan/WDI/COMMON/HashTable.c b/network/wlan/WDI/COMMON/HashTable.c deleted file mode 100644 index fe8724e1..00000000 --- a/network/wlan/WDI/COMMON/HashTable.c +++ /dev/null @@ -1,405 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// HashTable.c -// -// Description: -// Generic hash table for kernel mode module. -// -// Note: -// 1. Memory allocation is a issue on kernel space for calling context -// and computation time limitation. So we don't re-hash the table even -// it is full. In short, this implementation is not a perfect hash, -// however, if user has a good guess on hash table usage to prevent -// full and colission condition, this implementation is still a -// constant time on put, remove, and get operations. -// -// 2. This implementation is not thread-safe, that is, user have to -// protect related resource and the function exported here by their -// own means. -// -// 070606, by rcnjko. -//----------------------------------------------------------------------------- - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "HashTable.tmh" -#endif - -typedef struct _RT_HASH_TABLE RT_HASH_TABLE; - -//================================================================================ -// Prototype of protected function. -//================================================================================ -int -RtCompareKeys( - IN pu1Byte Key1, - IN pu1Byte Key2, - IN u4Byte KeySize - ); -//================================================================================ - - -// -// Description; -// Reset hash table to initialized state. -// -void -RtResetHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable - ) -{ - PRT_LIST_ENTRY pTmpListEntry; - PRT_HASH_ENTRY pHashEntry; - - while( RTIsListNotEmpty(&(hHashTable->BusyValuesList)) ) - { - pTmpListEntry = RTRemoveHeadList(&(hHashTable->BusyValuesList)); - pHashEntry = RT_HASH_ENTRY_FROM_BUSY_LINK( pTmpListEntry ); - - RTRemoveEntryList( &(pHashEntry->BucketLink) ); - RTInsertTailSList( &(hHashTable->FreeValuesList), &(pHashEntry->FreeLink) ); - } - -#if DBG - { - PRT_SINGLE_LIST_ENTRY pTmpSListEntry; - u4Byte idx; - - RT_ASSERT( RTIsListEmpty(&(hHashTable->BusyValuesList)), ("hHashTable(%p) BusyValuesList(%p) should be empty!!!\n", hHashTable, &(hHashTable->BusyValuesList) )); - for(idx = 0; idx < hHashTable->Capacity; idx++) - { - RT_ASSERT( RTIsListEmpty(&(hHashTable->Buckets[idx])), ("hHashTable(%p) Buckets[%d]:%p should be empty!!!\n", hHashTable, idx, &(hHashTable->Buckets[idx]))); - } - - idx = 0; - for(pTmpSListEntry = RTGetHeadSList( &(hHashTable->FreeValuesList) ); - pTmpSListEntry != NULL && idx < hHashTable->Capacity; - pTmpSListEntry = pTmpSListEntry->Next) - { - pHashEntry = RT_HASH_ENTRY_FROM_FREE_LINK(pTmpSListEntry); - - RT_ASSERT( ((pu1Byte)pHashEntry >= (pu1Byte)(hHashTable->pValuesBuf) && - (pu1Byte)pHashEntry < ((pu1Byte)(hHashTable->pValuesBuf) + (hHashTable->ValueSize * hHashTable->NumValuesAlloc))), - ("hHashTable(%p) idx(%d) pHashEntry(%p): invalid pHashEntry!!!\n", - hHashTable, idx, pHashEntry)); - idx++; - } - RT_ASSERT(idx == hHashTable->NumValuesAlloc, - ("hHashTable(%p) idx(%d) != NumValuesAlloc(%d), pTmpSListEntry(%p)\n", - hHashTable, idx, hHashTable->NumValuesAlloc, pTmpSListEntry)); - RT_ASSERT(pTmpSListEntry == NULL, - ("hHashTable(%p) pTmpSListEntry(%p) != NULL, idx(%d), NumValuesAlloc(%d)\n", - hHashTable, pTmpSListEntry, idx, hHashTable->NumValuesAlloc)); - } -#endif -} - -// -// Description: -// Allocate memory for hast table and value object pool. -// It will reset hash table to initial state for further operation. -// -// Input: -// Capacity: number of bucket of the hash table to allocated. -// ValueSize: number of byte of a value object. -// KeySize: number of byte of the key. -// pfHash: pointer to the hash function, see definition of RT_HT_HASH_FUNC for detail. -// -// Output: -// Return handle of a hash table if succeeded, NULL otherwise. -// -// Note: -// 1. The number of value objects allocated might be less than NumValuesAlloc. -// -// Assumption: -// 1. In the context to invoke PlatformAllocateMemory(). -// -RT_HASH_TABLE_HANDLE -RtAllocateHashTable( - IN void* Adapter, - IN unsigned int Capacity, - IN unsigned int ValueSize, - IN unsigned int KeySize, - IN RT_HT_HASH_FUNC pfHash - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - RT_STATUS rtStatus; - RT_HASH_TABLE_HANDLE pTable = NULL; - u4Byte TableSize; - u4Byte NumValuesAlloc = Capacity; - pu1Byte pValuesBuf = NULL; - u4Byte ValuesBufSize=0; - pu1Byte pKeysBuf = NULL; - u4Byte KeysBufSize=0; - u4Byte idx; - PRT_HASH_ENTRY pHashEntry; - pu1Byte pKey; - - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtAllocateHashTable(): Capacity(%d), NumValuesAlloc(%d), ValueSize(%d)\n", - Capacity, NumValuesAlloc, ValueSize)); - - do { - // - // Allocate memory for hash table. - // - TableSize = sizeof(RT_HASH_TABLE) + ((Capacity - 1) * sizeof(RT_LIST_ENTRY)); - rtStatus = PlatformAllocateMemory(pAdapter, (PVOID*)(&pTable), TableSize); - if( RT_STATUS_SUCCESS != rtStatus ) - { - RT_ASSERT(FALSE, ("RtAllocateHashTable(): failed to allocate TableSize(%d) !!!\n", TableSize)); - break; - } - PlatformZeroMemory(pTable, TableSize); - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtAllocateHashTable(): table: %p size: %d\n", pTable, TableSize)); - - // - // Allocate memory for value object pool. - // - ValuesBufSize = NumValuesAlloc * ValueSize; - rtStatus = PlatformAllocateMemory(pAdapter, (PVOID*)(&pValuesBuf), ValuesBufSize); - if( RT_STATUS_SUCCESS != rtStatus ) - { - RT_ASSERT(FALSE, ("RtAllocateHashTable(): failed to allocate value objects, NumValuesAlloc(%d), ValueSize(%d)!!!\n", NumValuesAlloc, ValueSize)); - break; - } - PlatformZeroMemory(pValuesBuf, ValuesBufSize); - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtAllocateHashTable(): pValueBuf: %p size: %d\n", pValuesBuf, ValuesBufSize)); - - // - // Allocate memory for keys. - // - KeysBufSize = NumValuesAlloc * KeySize; - rtStatus = PlatformAllocateMemory(pAdapter, (PVOID*)(&pKeysBuf), KeysBufSize); - if( RT_STATUS_SUCCESS != rtStatus ) - { - RT_ASSERT(FALSE, ("RtAllocateHashTable(): failed to allocate keys, NumValuesAlloc(%d), KeySize(%d)!!!\n", NumValuesAlloc, KeySize)); - break; - } - PlatformZeroMemory(pKeysBuf, KeysBufSize); - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtAllocateHashTable(): pKeysBuf: %p size: %d\n", pKeysBuf, KeysBufSize)); - - // - // Initialize value object pool stuff - // - pTable->NumValuesAlloc = NumValuesAlloc; - pTable->ValueSize = ValueSize; - pTable->pValuesBuf = pValuesBuf; - pTable->KeySize = KeySize; - pTable->pKeysBuf = pKeysBuf; - RTInitializeSListHead( &(pTable->FreeValuesList) ); - - pHashEntry = (PRT_HASH_ENTRY)pValuesBuf; - pKey = (pu1Byte)pKeysBuf; - for(idx = 0; idx < NumValuesAlloc; idx++) - { - pHashEntry->Key = pKey; - RTInsertTailSList(&(pTable->FreeValuesList), &(pHashEntry->FreeLink)); - - pHashEntry = (PRT_HASH_ENTRY)((pu1Byte)pHashEntry + ValueSize); - pKey = (pu1Byte)pKey + KeySize; - } - - // - // Initialize hash table stuff. - // - pTable->pfHash = pfHash; - RTInitializeListHead( &(pTable->BusyValuesList) ); - pTable->Capacity = Capacity; - for(idx = 0; idx < Capacity; idx++) - { - RTInitializeListHead( &(pTable->Buckets[idx]) ); - } - - // - // Return the hash table allocated. - // - return pTable; - - }while(FALSE); - - // - // Error case. - // - if(pTable != NULL) - PlatformFreeMemory(pTable, TableSize); - - if(pValuesBuf != NULL) - PlatformFreeMemory(pValuesBuf, ValuesBufSize); - - if(pKeysBuf != NULL) - PlatformFreeMemory(pKeysBuf, KeysBufSize); - - - return NULL; -} - -// -// Description: -// Return the value object of specified key if found, -// NULL otherwise. -// -PRT_HASH_ENTRY -RtGetValueFromHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable, - IN RT_HASH_KEY Key - ) -{ - PRT_HASH_ENTRY pHashEntry = NULL; - PRT_LIST_ENTRY pTmpListEntry; - u4Byte idx; - - idx = hHashTable->pfHash(Key); - for( pTmpListEntry = hHashTable->Buckets[idx].Flink; - pTmpListEntry != &(hHashTable->Buckets[idx]); - pTmpListEntry = pTmpListEntry->Flink ) - { - pHashEntry = RT_HASH_ENTRY_FROM_BUCKET_LINK(pTmpListEntry); - // Compare the keys if they are equal. - if( RtCompareKeys(Key, pHashEntry->Key, hHashTable->KeySize) == 0 ) - { - return pHashEntry; - } - } - - return NULL; -} - -// -// Description: -// Compare the two keys and return 0 if they are equal, otherwise return an interger indicating the difference. -// -int -RtCompareKeys( - IN pu1Byte Key1, - IN pu1Byte Key2, - IN u4Byte KeySize - ) -{ - u4Byte idx; - int result = 0; - - for(idx = 0; idx < KeySize; idx++) - { - result = Key1[idx] - Key2[idx]; - if(result != 0) - return result; - } - - return result; -} - -// -// Description: -// Retrive an value object from pool and put it to the hash table -// according to hash value of the key. -// -// Output: -// Return the value object assocaited with the key specfied, -// NULL if no available value object now. -// -PRT_HASH_ENTRY -RtPutKeyToHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable, - IN RT_HASH_KEY Key - ) -{ - PRT_HASH_ENTRY pHashEntry = NULL; - PRT_SINGLE_LIST_ENTRY pTmpSListEntry; - u4Byte idx; - - // - // Check if Key had existed. if yse, return previous entry. - // - if((pHashEntry = RtGetValueFromHashTable(hHashTable, Key)) != NULL) - { - return pHashEntry; - } - - // - // Retrive an value object from pool for a new Key, - // and put it into hash table. - // - idx = hHashTable->pfHash(Key); - if( !RTIsSListEmpty(&(hHashTable->FreeValuesList)) ) - { - pTmpSListEntry = RTRemoveHeadSList(&(hHashTable->FreeValuesList)); - pHashEntry = RT_HASH_ENTRY_FROM_FREE_LINK(pTmpSListEntry); - - PlatformMoveMemory(pHashEntry->Key, Key, hHashTable->KeySize); - RTInsertTailList(&(hHashTable->BusyValuesList), &(pHashEntry->BusyLink)); - RTInsertTailList(&(hHashTable->Buckets[idx]), &(pHashEntry->BucketLink)); - } - - return pHashEntry; -} - -// -// Description: -// Free resource allocated in RtAllocateHashTable(). -// -// Assumption: -// 1. In the context to invoke PlatformFreeMemory(). -// -void -RtFreeHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable - ) -{ - u4Byte TableSize; - u4Byte ValuesBufSize; - u4Byte KeysBufSize; - - if(hHashTable != NULL) - { - if(hHashTable->pKeysBuf != NULL) - { - KeysBufSize = hHashTable->NumValuesAlloc * hHashTable->KeySize; - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtFreeHashTable(): pKeysBuf: %p, KeysBufSize: %d\n", hHashTable->pKeysBuf, KeysBufSize)); - PlatformFreeMemory(hHashTable->pKeysBuf, KeysBufSize); - } - - if(hHashTable->pValuesBuf != NULL) - { - ValuesBufSize = hHashTable->NumValuesAlloc * hHashTable->ValueSize; - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtFreeHashTable(): pValuesBuf: %p, ValuesBufSize: %d\n", hHashTable->pValuesBuf, ValuesBufSize)); - PlatformFreeMemory(hHashTable->pValuesBuf, ValuesBufSize); - } - - TableSize = sizeof(RT_HASH_TABLE) + ((hHashTable->Capacity - 1) * sizeof(RT_LIST_ENTRY)); - RT_TRACE(COMP_INIT, DBG_TRACE, ("RtFreeHashTable(): hHashTable: %p, TableSize: %d\n", hHashTable, TableSize)); - PlatformFreeMemory(hHashTable, TableSize); - } -} - -// -// Description: -// Remove value object of specified key from hash table. -// -void -RtRemvoeKeyFromVaHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable, - IN RT_HASH_KEY Key - ) -{ - PRT_HASH_ENTRY pHashEntry = NULL; - PRT_LIST_ENTRY pTmpListEntry; - u4Byte idx; - - idx = hHashTable->pfHash(Key); - for( pTmpListEntry = hHashTable->Buckets[idx].Flink; - pTmpListEntry != &(hHashTable->Buckets[idx]); - pTmpListEntry = pTmpListEntry->Flink ) - { - pHashEntry = RT_HASH_ENTRY_FROM_BUCKET_LINK(pTmpListEntry); - if( RtCompareKeys(Key, pHashEntry->Key, hHashTable->KeySize) == 0 ) - { - RTRemoveEntryList( &(pHashEntry->BucketLink) ); - RTRemoveEntryList( &(pHashEntry->BusyLink) ); - - RTInsertTailSList( &(hHashTable->FreeValuesList), &(pHashEntry->FreeLink) ); - } - } -} - diff --git a/network/wlan/WDI/COMMON/Hotspot20.c b/network/wlan/WDI/COMMON/Hotspot20.c deleted file mode 100644 index 8ccfb883..00000000 --- a/network/wlan/WDI/COMMON/Hotspot20.c +++ /dev/null @@ -1,134 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Hotspot20.tmh" -#endif - -#include "Hotspot20.h" - -RT_STATUS -GAS_OnInitReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - pu1Byte pOUI = NULL; - - FunctionIn(COMP_MLME); - - PlatformIndicateActionFrame(pAdapter, (PVOID)posMpdu); - - pOUI = Frame_GAS_QueryReq_OUI(*posMpdu); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, ("GAS Initial request: "), pOUI, 3); - if( PlatformCompareMemory(pOUI, WFA_OUI, SIZE_OUI) == 0 ) - { - pOUI = Frame_GAS_QueryReq_Type(*posMpdu); - - if(0x09 == *pOUI) - P2P_OnSDReq(pAdapter, pRfd, posMpdu); - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("No matched OUI: %2x:%2x:%2x\n", pOUI[0], pOUI[1], pOUI[2])); - } - - FunctionOut(COMP_MLME); - return RtStatus; -} - -RT_STATUS -GAS_OnInitRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - pu1Byte pOUI = NULL; - - FunctionIn(COMP_MLME); - - PlatformIndicateActionFrame(pAdapter, (PVOID)posMpdu); - - pOUI = Frame_GAS_QueryRsp_OUI(*posMpdu); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, ("GAS Initial response: "), pOUI, 3); - if( PlatformCompareMemory(pOUI, WFA_OUI, SIZE_OUI) == 0 ) - { - pOUI = Frame_GAS_QueryRsp_Type(*posMpdu); - - if(0x09 == *pOUI) - P2P_OnSDRsp(pAdapter, pRfd, posMpdu); - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("No matched OUI: %2x:%2x:%2x\n", pOUI[0], pOUI[1], pOUI[2])); - } - - FunctionOut(COMP_MLME); - return RtStatus; -} - -RT_STATUS -GAS_OnComebackReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - pu1Byte pOUI = NULL; - - FunctionIn(COMP_MLME); - - PlatformIndicateActionFrame(pAdapter, (PVOID)posMpdu); - - pOUI = Frame_GAS_ComebackRsp_OUI(*posMpdu); - if( PlatformCompareMemory(pOUI, WFA_OUI, SIZE_OUI) == 0 ) - { - pOUI = Frame_GAS_ComebackRsp_Type(*posMpdu); - - if(0x09 == *pOUI) - P2P_OnSDComebackReq(pAdapter, pRfd, posMpdu); - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("No matched OUI: %2x:%2x:%2x\n", pOUI[0], pOUI[1], pOUI[2])); - } - - FunctionOut(COMP_MLME); - return RtStatus; -} - -RT_STATUS -GAS_OnComebackRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - pu1Byte pOUI = NULL; - - FunctionIn(COMP_MLME); - - PlatformIndicateActionFrame(pAdapter, (PVOID)posMpdu); - - pOUI = Frame_GAS_ComebackRsp_OUI(*posMpdu); - if( PlatformCompareMemory(pOUI, WFA_OUI, SIZE_OUI) == 0 ) - { - pOUI = Frame_GAS_ComebackRsp_Type(*posMpdu); - - if(0x09 == *pOUI) - P2P_OnSDComebackRsp(pAdapter, pRfd, posMpdu); - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("No matched OUI: %2x:%2x:%2x\n", pOUI[0], pOUI[1], pOUI[2])); - } - - FunctionOut(COMP_MLME); - return RtStatus; -} - diff --git a/network/wlan/WDI/COMMON/Hotspot20.h b/network/wlan/WDI/COMMON/Hotspot20.h deleted file mode 100644 index bf5c8c5b..00000000 --- a/network/wlan/WDI/COMMON/Hotspot20.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __INC_HOTSPOT20_H -#define __INC_HOTSPOT20_H - - -RT_STATUS -GAS_OnInitReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -GAS_OnInitRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -GAS_OnComebackReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -GAS_OnComebackRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -#endif // #ifndef __INC_HOTSPOT20_H - diff --git a/network/wlan/WDI/COMMON/IOTGen.h b/network/wlan/WDI/COMMON/IOTGen.h deleted file mode 100644 index 30725b8d..00000000 --- a/network/wlan/WDI/COMMON/IOTGen.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef __INC_IOTGEN_H -#define __INC_IOTGEN_H - - -BOOLEAN -IOTActIsDisableEDCATurbo( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - -BOOLEAN -IOTActIsEnableBETxOPLimit( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -BOOLEAN -IOTActIsNullDataPowerSaving( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -BOOLEAN -IOTActIsForcedRTSCTS( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - -BOOLEAN -IOTActWAIOTBroadcom( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -BOOLEAN -IOTActBcmRxFailRelink( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - -BOOLEAN -IOTActIsForcedCTS2Self( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -BOOLEAN -IOTActIsDisableTxPowerTraining( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -BOOLEAN -IOTActIsDisableProtectionMode( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -BOOLEAN -IOTActIsForcedDataRate( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - -VOID -IOTActForcedDataRate( - PADAPTER Adapter -); - -#endif diff --git a/network/wlan/WDI/COMMON/MgntActQueryParam.c b/network/wlan/WDI/COMMON/MgntActQueryParam.c deleted file mode 100644 index 1a2279f1..00000000 --- a/network/wlan/WDI/COMMON/MgntActQueryParam.c +++ /dev/null @@ -1,1578 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntActQueryParam.tmh" -#endif - -u1Byte SS_Rate_Map_G[6][2]= {{40, MGN_54M}, {30, MGN_48M}, {20, MGN_36M}, {12, MGN_24M}, {7, MGN_18M}, {0, MGN_12M}}; -u1Byte SS_Rate_Map_B[2][2]= {{7, MGN_11M}, {0, MGN_5_5M}}; -// -// 2011/07/08 MH For ALPHA link speedn display, we will add several level for them temporaily. Becasue -// They still not make sure which one is suitable for DWA-133 now. This is a tempoarily revise. We need to rebuild -// a structure for different rate display to prevent wasting memory.. -// - -u1Byte SS_Rate_Map_AC_1SS_MCS9[10][2]= {{46, MGN_VHT1SS_MCS9},{43, MGN_VHT1SS_MCS8},{39, MGN_VHT1SS_MCS7}, {35, MGN_VHT1SS_MCS5}, {29, MGN_VHT1SS_MCS4}, {25, MGN_VHT1SS_MCS3}, {20, MGN_VHT1SS_MCS2}, {15, MGN_VHT1SS_MCS1}, {10, MGN_VHT1SS_MCS0},{0, MGN_6M}}; -//(10¥H¤U½ÐÅã¥Ü6M in 5G) -u1Byte SS_Rate_Map_AC_1SS_MCS7[8][2]= {{41, MGN_VHT1SS_MCS7}, {35, MGN_VHT1SS_MCS5}, {29, MGN_VHT1SS_MCS4}, {25, MGN_VHT1SS_MCS3}, {20, MGN_VHT1SS_MCS2}, {15, MGN_VHT1SS_MCS1}, {10, MGN_VHT1SS_MCS0},{0, MGN_6M}}; -//(10¥H¤U½ÐÅã¥Ü6M in 5G) - -u1Byte SS_Rate_Map_N_MCS7[7][2]= {{40, MGN_MCS7}, {30, MGN_MCS5}, {25, MGN_MCS4}, {23, MGN_MCS3}, {19, MGN_MCS2}, {8, MGN_MCS1}, {0, MGN_MCS0}}; -u1Byte SS_Rate_Map_N_MCS7_Lv1[7][2]= {{40, MGN_MCS7}, {30, MGN_MCS5}, {25, MGN_MCS4}, {19, MGN_MCS3}, {8, MGN_MCS2}, {5, MGN_MCS1}, {2, MGN_MCS0}}; -u1Byte SS_Rate_Map_N_MCS7_Lv2[7][2]= {{40, MGN_MCS7}, {30, MGN_MCS6}, {25, MGN_MCS5}, {19, MGN_MCS4}, {8, MGN_MCS3}, {5, MGN_MCS2}, {2, MGN_MCS0}}; -u1Byte SS_Rate_Map_N_MCS7_Lv3[5][2]= {{40, MGN_MCS7}, {30, MGN_MCS6}, {20, MGN_MCS4}, {8, MGN_MCS3}, {2, MGN_MCS1}}; -u1Byte SS_Rate_Map_N_MCS7_Lv4[5][2]= {{40, MGN_MCS7}, {30, MGN_MCS6}, {10, MGN_MCS4}, {5, MGN_MCS3}, {1, MGN_MCS1}}; -u1Byte SS_Rate_Map_N_MCS7_Lv5[5][2]= {{40, MGN_MCS7}, {10, MGN_MCS6}, {8, MGN_MCS5}, {2, MGN_MCS3}, {1, MGN_MCS1}}; -u1Byte SS_Rate_Map_N_MCS7_Lv6[3][2]= {{20, MGN_MCS7}, {5, MGN_MCS6}, {2, MGN_MCS5}}; - -// For rate display for 2T2R. -u1Byte SS_Rate_Map_AC_2SS_MCS9[13][2]= {{50, MGN_VHT2SS_MCS9}, {47, MGN_VHT2SS_MCS8}, {44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {36, MGN_VHT2SS_MCS5}, {32, MGN_VHT2SS_MCS4}, {28, MGN_VHT1SS_MCS7}, {24, MGN_VHT1SS_MCS7}, {21, MGN_VHT1SS_MCS6}, {18, MGN_VHT1SS_MCS5}, {14, MGN_VHT1SS_MCS3}, {10, MGN_12M}, {0, MGN_6M}}; -// Lvl1 replace as original value. -u1Byte SS_Rate_Map_AC_2SS_MCS9_Lv1[13][2]= {{50, MGN_VHT2SS_MCS9}, {47, MGN_VHT2SS_MCS8}, {44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {36, MGN_VHT2SS_MCS4}, {32, MGN_VHT1SS_MCS6}, {28, MGN_VHT1SS_MCS4}, {24, MGN_VHT1SS_MCS3}, {21, MGN_VHT1SS_MCS2}, {18, MGN_VHT1SS_MCS1}, {14, MGN_VHT1SS_MCS0}, {10, MGN_12M}, {0, MGN_6M}}; -u1Byte SS_Rate_Map_AC_2SS_MCS9_Lv2[11][2]= {{50, MGN_VHT2SS_MCS9}, {47, MGN_VHT2SS_MCS8}, {44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {36, MGN_VHT2SS_MCS4}, {32, MGN_VHT1SS_MCS6}, {28, MGN_VHT1SS_MCS4}, {24, MGN_VHT1SS_MCS3}, {20, MGN_VHT1SS_MCS2}, {10, MGN_VHT1SS_MCS1}, {0, MGN_12M}}; -u1Byte SS_Rate_Map_AC_2SS_MCS9_Lv3[9][2]= {{50, MGN_VHT2SS_MCS9}, {47, MGN_VHT2SS_MCS8}, {44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {36, MGN_VHT2SS_MCS5}, {32, MGN_VHT1SS_MCS7}, {20, MGN_VHT1SS_MCS4}, {10, MGN_VHT1SS_MCS1}, {0, MGN_VHT1SS_MCS0}}; -u1Byte SS_Rate_Map_AC_2SS_MCS9_Lv4[7][2]= {{50, MGN_VHT2SS_MCS9}, {47, MGN_VHT2SS_MCS8}, {44, MGN_VHT2SS_MCS7}, {30, MGN_VHT2SS_MCS6}, {20, MGN_VHT2SS_MCS5}, {10, MGN_VHT1SS_MCS4}, {0, MGN_VHT1SS_MCS1}}; -u1Byte SS_Rate_Map_AC_2SS_MCS9_Lv5[5][2]= {{50, MGN_VHT2SS_MCS9}, {47, MGN_VHT2SS_MCS8}, {30, MGN_VHT2SS_MCS7}, {15, MGN_VHT2SS_MCS4}, {0, MGN_VHT1SS_MCS2}}; -u1Byte SS_Rate_Map_AC_2SS_MCS9_Lv6[5][2]= {{45, MGN_VHT2SS_MCS9}, {40, MGN_VHT2SS_MCS8}, {30, MGN_VHT2SS_MCS7}, {10, MGN_VHT2SS_MCS6}, {0, MGN_VHT2SS_MCS4}}; - -//(10¥H¤U½ÐÅã¥Ü6M in 5G) -u1Byte SS_Rate_Map_AC_2SS_MCS7[12][2]= {{44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {36, MGN_VHT2SS_MCS5}, {32, MGN_VHT2SS_MCS4}, {28, MGN_VHT1SS_MCS5}, {24, MGN_VHT1SS_MCS4}, {21, MGN_VHT1SS_MCS3}, {18, MGN_VHT1SS_MCS2}, {14, MGN_VHT1SS_MCS1}, {10, MGN_VHT1SS_MCS0}, {0, MGN_6M}}; -// Lvl1 replace as original value. -u1Byte SS_Rate_Map_AC_2SS_MCS7_Lv1[12][2]= {{44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {36, MGN_VHT2SS_MCS4}, {32, MGN_VHT1SS_MCS6}, {28, MGN_VHT1SS_MCS4}, {24, MGN_VHT1SS_MCS3}, {21, MGN_VHT1SS_MCS2}, {18, MGN_VHT1SS_MCS1}, {14, MGN_VHT1SS_MCS0}, {10, MGN_12M}, {0, MGN_6M}}; -u1Byte SS_Rate_Map_AC_2SS_MCS7_Lv2[6][2]= {{44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {30, MGN_VHT2SS_MCS4}, {20, MGN_VHT1SS_MCS4}, {10, MGN_VHT1SS_MCS1}, {0, MGN_VHT1SS_MCS1}}; -u1Byte SS_Rate_Map_AC_2SS_MCS7_Lv3[5][2]= {{44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {30, MGN_VHT2SS_MCS4}, {15, MGN_VHT1SS_MCS3}, {0, MGN_VHT1SS_MCS1}}; -u1Byte SS_Rate_Map_AC_2SS_MCS7_Lv4[5][2]= {{44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {30, MGN_VHT2SS_MCS5}, {15, MGN_VHT1SS_MCS4}, {0, MGN_VHT1SS_MCS1}}; -u1Byte SS_Rate_Map_AC_2SS_MCS7_Lv5[5][2]= {{44, MGN_VHT2SS_MCS7}, {40, MGN_VHT2SS_MCS6}, {27, MGN_VHT2SS_MCS6}, {15, MGN_VHT1SS_MCS5}, {0, MGN_VHT1SS_MCS1}}; -u1Byte SS_Rate_Map_AC_2SS_MCS7_Lv6[3][2]= {{36, MGN_VHT2SS_MCS7}, {20, MGN_VHT2SS_MCS6}, {0, MGN_VHT2SS_MCS4}}; - -u1Byte SS_Rate_Map_AC_3SS_MCS9[12][2]= {{50, MGN_VHT3SS_MCS9}, {47, MGN_VHT3SS_MCS8}, {44, MGN_VHT3SS_MCS7}, {40, MGN_VHT3SS_MCS6}, {36, MGN_VHT3SS_MCS5}, {32, MGN_VHT3SS_MCS4}, {28, MGN_VHT3SS_MCS3}, {24, MGN_VHT3SS_MCS2}, {21, MGN_VHT3SS_MCS1}, {18, MGN_VHT3SS_MCS0}, {10, MGN_12M}, {0, MGN_6M}}; - -//(10¥H¤U½ÐÅã¥Ü6M in 5G) - -u1Byte SS_Rate_Map_N_MCS15[7][2]= {{40, MGN_MCS15}, {35, MGN_MCS14}, {31, MGN_MCS12}, {28, MGN_MCS7}, {25, MGN_MCS5}, {23, MGN_MCS3}, {10, MGN_MCS0}}; -u1Byte SS_Rate_Map_N_MCS15_Lv1[12][2]= {{40, MGN_MCS15}, {37, MGN_MCS14}, {35, MGN_MCS13}, {31, MGN_MCS12}, {28, MGN_MCS7}, {25, MGN_MCS6}, {22, MGN_MCS5}, {20, MGN_MCS4}, {15, MGN_MCS3}, {12, MGN_MCS2}, {8, MGN_MCS1}, {4, MGN_MCS0}}; -u1Byte SS_Rate_Map_N_MCS15_Lv2[7][2]= {{40, MGN_MCS15}, {35, MGN_MCS14}, {28, MGN_MCS12}, {20, MGN_MCS5}, {10, MGN_MCS3}, {5, MGN_MCS2}, {2, MGN_MCS1}}; -u1Byte SS_Rate_Map_N_MCS15_Lv3[5][2]= {{40, MGN_MCS15}, {30, MGN_MCS14}, {20, MGN_MCS12}, {10, MGN_MCS7}, {5, MGN_MCS2}}; -u1Byte SS_Rate_Map_N_MCS15_Lv4[5][2]= {{40, MGN_MCS15}, {30, MGN_MCS14}, {10, MGN_MCS13}, {2, MGN_MCS7}, {1, MGN_MCS3}}; -u1Byte SS_Rate_Map_N_MCS15_Lv5[5][2]= {{40, MGN_MCS15}, {10, MGN_MCS14}, {5, MGN_MCS13}, {2, MGN_MCS12}, {1, MGN_MCS4}}; -u1Byte SS_Rate_Map_N_MCS15_Lv6[3][2]= {{20, MGN_MCS15}, {5, MGN_MCS14}, {2, MGN_MCS13}}; - -u1Byte SS_Rate_Map_N_MCS23[7][2]= {{40, MGN_MCS23}, {35, MGN_MCS22}, {31, MGN_MCS12}, {28, MGN_MCS7}, {25, MGN_MCS5}, {23, MGN_MCS3}, {10, MGN_MCS0}}; - -u1Byte MSI_SS_Rate_Map_G[6][2]= {{40, MGN_54M}, {30, MGN_54M}, {20, MGN_54M}, {12, MGN_48M}, {7, MGN_36M}, {0, MGN_24M}}; - -// Temporarily add for Lenovo. -u1Byte LNV_SS_Rate_Map_G[6][2]= {{54, MGN_54M}, {40, MGN_48M}, {30, MGN_36M}, {15, MGN_24M}, {10, MGN_18M}, {5, MGN_12M}}; -u1Byte LNV_SS_Rate_Map_B[2][2]= {{10, MGN_11M}, {0, MGN_5_5M}}; - -u2Byte -CONVERT_RATE ( - PADAPTER Adapter, - u2Byte MGN_RATE -) -{ - u2Byte RetValue = MGN_RATE; - - if(MGN_RATE >= MGN_VHT1SS_MCS0 && MGN_RATE <= MGN_VHT4SS_MCS9) - RetValue = VHTMcsToDataRate(Adapter, MGN_RATE); - else if(MGN_RATE >= MGN_MCS0 && MGN_RATE <= MGN_MCS31) - RetValue = HTMcsToDataRate(Adapter, MGN_RATE); - - return RetValue; -} - -// Returns the current AP MAC address -BOOLEAN -MgntActQuery_802_11_BSSID( - PADAPTER Adapter, - pu1Byte bssidbuf -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - // <1>Set management bssid - CopyMem( bssidbuf, pMgntInfo->Bssid, 6 ); - - //TODO: - return TRUE; -} - -BOOLEAN -MgntActQuery_802_11_ASSOCIATION_INFORMATION( - PADAPTER Adapter, - PNDIS_802_11_ASSOCIATION_INFORMATION pAssocInfo - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - - pu1Byte pDest = (pu1Byte)pAssocInfo + sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); - - PlatformZeroMemory(pAssocInfo, sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); - pAssocInfo->Length = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); - - //------------------------------------------------------ - // Association Request related information - //------------------------------------------------------ - // Req_1. AvailableRequestFixedIEs - pAssocInfo->AvailableRequestFixedIEs |= NDIS_802_11_AI_REQFI_CAPABILITIES|NDIS_802_11_AI_REQFI_CURRENTAPADDRESS; - //pAssocInfo->AvailableResponseFixedIEs|= NDIS_802_11_AI_RESFI_CAPABILITIES|NDIS_802_11_AI_RESFI_STATUSCODE|NDIS_802_11_AI_REQFI_CURRENTAPADDRESS; - - // Req_2. RequestFixedIEs: 1.Capabilities, 2.ListenInterval, 3.CurrentAPAddress. - //2004/07/29, kcwu, mCap should be used - //pAssocInfo->RequestFixedIEs.Capabilities = pMgntInfo->Asoc_asCap; - pAssocInfo->RequestFixedIEs.Capabilities = pMgntInfo->mCap; - pAssocInfo->RequestFixedIEs.ListenInterval = pMgntInfo->ListenInterval; // Added by Annie, 2006-05-110. - PlatformMoveMemory(pAssocInfo->RequestFixedIEs.CurrentAPAddress, &pMgntInfo->Bssid[0], 6); - - // Req_3. RequestIELength - // [WindowsDesignNoteForWPA2] - // - This field contains the number of octets in the OffetRequestIEs buffer. - // - This should be set to 0 if a request has not been made. - - // We handle RequestIELength and AsocReq IEs in the following code. - - - // Req_4. OffsetRequestIEs - // [WindowsDesignNoteForWPA2] - // - This field contains the offset in the buffer containing any variable length information elements from the association or reassociation request message. - // - During a query, this contains the information elements that were in the last association or reassociate request attempt. The request may succeed or fail. - pAssocInfo->OffsetRequestIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION); - - //------------------------------------------------------ - // Association Service - // <-----------------------------> - // Status = idle Status = Wait_Aso, Wait_ReAso Status = idle - // mAsso!=1&&mIbss!=1 mAssoc!=1&&mIbss!=1 mAssoc==1||mIbss==1 - // Return none Request return,Response none Request return, Response return - //------------------------------------------------------ - if( (pMgntInfo->State_AsocService == STATE_Asoc_Idle && (pMgntInfo->mAssoc || pMgntInfo->mIbss )) || - (pMgntInfo->State_AsocService == STATE_Wait_Asoc_Response || pMgntInfo->State_AsocService == STATE_Wait_Reasoc_Response)) - { - // IE_1. Last SSID in Association Request - pDest[0] = (u1Byte)EID_SsId; - pDest[1] = (u1Byte)pMgntInfo->Ssid.Length; - - PlatformMoveMemory((pu1Byte)pDest + 2, - &pMgntInfo->Ssid.Octet[0], - pMgntInfo->Ssid.Length); - pDest = (pu1Byte)pDest + (2 + pMgntInfo->Ssid.Length); - pAssocInfo->RequestIELength += (2 + pMgntInfo->Ssid.Length); - - // IE_2. Last Supported Rate in Association Request - pDest[0] = EID_SupRates; - pDest[1] = (u1Byte)pMgntInfo->Regdot11OperationalRateSet.Length; - PlatformMoveMemory((pu1Byte)pDest + 2, - pMgntInfo->Regdot11OperationalRateSet.Octet, - pMgntInfo->Regdot11OperationalRateSet.Length); - pDest += (2 + pMgntInfo->Regdot11OperationalRateSet.Length); - pAssocInfo->RequestIELength += (2 + pMgntInfo->Regdot11OperationalRateSet.Length); - - // IE_3. Last RSNIE in Association Request - if( pSecInfo->SecLvl > RT_SEC_LVL_NONE ) - { - pDest[0] = ( pSecInfo->SecLvl == RT_SEC_LVL_WPA )? EID_Vendor : EID_WPA2; - pDest[1] = (u1Byte)pSecInfo->RSNIE.Length; - PlatformMoveMemory((pu1Byte)pDest + 2, - pSecInfo->RSNIE.Octet, - pSecInfo->RSNIE.Length); - pDest += (2 + pSecInfo->RSNIE.Length); - pAssocInfo->RequestIELength += (2 + pSecInfo->RSNIE.Length); - } - - CCX_AppendAssocReqCCKMIE(Adapter, pDest, &pAssocInfo->RequestIELength); - - RT_PRINT_DATA( COMP_SEC, DBG_TRACE, ("MgntActQuery_802_11_ASSOCIATION_INFORMATION(): RSNIE"), pSecInfo->RSNIE.Octet, pSecInfo->RSNIE.Length); - } - - - //------------------------------------------------------ - // Association Response related information - //------------------------------------------------------ - - if( pMgntInfo->State_AsocService == STATE_Asoc_Idle && - (pMgntInfo->mAssoc || pMgntInfo->mIbss ) - ) - { - // Rsp_1. AvailableResponseFixedIEs - pAssocInfo->AvailableResponseFixedIEs = - NDIS_802_11_AI_RESFI_CAPABILITIES | - NDIS_802_11_AI_RESFI_STATUSCODE | - NDIS_802_11_AI_RESFI_ASSOCIATIONID ; - - // Rsp_2. ResponseFixedIEs: 1.Capabilities, 2.StatusCode, 3.AssociationId - pAssocInfo->ResponseFixedIEs.Capabilities = pMgntInfo->RspCapability; - pAssocInfo->ResponseFixedIEs.StatusCode = pMgntInfo->RspStatusCode; - pAssocInfo->ResponseFixedIEs.AssociationId = pMgntInfo->RspAssociationID; - - // Rsp_3. ResponseIELength - // [WindowsDesignNoteForWPA2] - // - This field contains the number of octets in the OffsetResponseIEs buffer. - // - This must be 0 in length for a set. - // - It must be set to 0 in a query if a response for the last request is not received. - - // It's already initialized 0 by PlatformZeroMemory(). - // We handle ResponseIELength and AsocRsp IEs in the following code. - - - // Rsp_4. OffsetResponseIEs - // [WindowsDesignNoteForWPA2] - // - This field contains the offset in the buffer containing any variable length information elements from the association or reassociation response message. - // - During a query, this contains the information elements that were in the last association or reassociate response. - pAssocInfo->OffsetResponseIEs = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + pAssocInfo->RequestIELength; - - CCX_AppendAssocRspCCKMIE(Adapter, pDest, &(pAssocInfo->ResponseIELength)); - - } - - return TRUE; -} - - -// Returns the SSID with which the NIC is associated. -// The driver returns 0 SSIDLength if the NIC is not associated with any SSID. -BOOLEAN -MgntActQuery_802_11_SSID( - PADAPTER Adapter, - pu1Byte ssidbuf, - pu2Byte ssidlen -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - // check ssidlen <= 32 - if( pMgntInfo->Ssid.Length <= 32 ){ - CopyMem( ssidbuf, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length ); - *ssidlen = pMgntInfo->Ssid.Length; - } - else{ - *ssidlen = 0; - return FALSE; - } - - - return TRUE; -} - - - - -// Description: -// Return the current transmit power level in dBm. -// -s4Byte -MgntActQuery_TX_POWER_DBM( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - s4Byte powerlevel; - - Adapter->HalFunc.GetTxPowerLevelHandler( Adapter, &powerlevel ); - - // - // Get the min power in dbm. By Bruce, 2009-04-07. - // Because we may not really update the Tx Power from the CCX Cell Power IE, we shall compare the - // client configured power and cell power to get the min power returned to UI. - // - // Compare with the Client Configured Power - if(powerlevel > pMgntInfo->ClientConfigPwrInDbm && pMgntInfo->ClientConfigPwrInDbm != UNSPECIFIED_PWR_DBM) - powerlevel = pMgntInfo->ClientConfigPwrInDbm; - - CCX_QueryTxPower(Adapter, &powerlevel); - - return powerlevel; -} - - -// Returns either Infrastructure or IBSS, unknown. -RT_JOIN_NETWORKTYPE -MgntActQuery_802_11_INFRASTRUCTURE_MODE( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if(pMgntInfo->mAssoc) - { - return RT_JOIN_NETWORKTYPE_INFRA; - } - else if(pMgntInfo->mIbss) - { - return RT_JOIN_NETWORKTYPE_ADHOC; - } - else - { - return (RT_JOIN_NETWORKTYPE)(Adapter->MgntInfo.Regdot11networktype); - } -} - - - -// Returns the current fragmentation threshold in bytes. -u2Byte -MgntActQuery_802_11_FRAGMENTATION_THRESHOLD( - PADAPTER Adapter -) -{ - return Adapter->MgntInfo.FragThreshold; -} - - -//Returns the current RTS threshold. -u2Byte -MgntActQuery_802_11_RTS_THRESHOLD( - PADAPTER Adapter -) -{ - return Adapter->MgntInfo.dot11RtsThreshold; -} - - - -//Returns the set of supported data rates that the radio is capable of running. -BOOLEAN -MgntActQuery_802_11_SUPPORTED_RATES( - PADAPTER Adapter, - pu1Byte RateSetbuf, - pu2Byte RateSetlen -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if( pMgntInfo->Regdot11OperationalRateSet.Length < 16 ){ - *RateSetlen = pMgntInfo->Regdot11OperationalRateSet.Length; - CopyMem( RateSetbuf, pMgntInfo->Regdot11OperationalRateSet.Octet, *RateSetlen ); - } - else{ - return FALSE; - } - - return TRUE; -} - - -BOOLEAN -MgntActQuery_802_11_BSSID_LIST( - PADAPTER Adapter, - PRT_802_11_BSSID_LIST pBssidList, - BOOLEAN bRealCase - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u4Byte i=0; - BOOLEAN matchFound = FALSE; - PRT_WLAN_BSS pBSSDesc = NULL; - - u1Byte Rssibuf[MAX_BSS_DESC]; - u2Byte idxBuf[MAX_BSS_DESC]; - - u1Byte MaxRSSI=0; - u2Byte a=0, idx=0, findidx =0, tmpidx=0; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActQuery_802_11_BSSID_LIST() ===> \n")); - // - // 061214, rcnjko: Report no BSS scanned if RF is off. - // - if(pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) - { - pBssidList->NumberOfItems = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActQuery_802_11_BSSID_LIST() <===, return by RF_CHANGE_BY_PS\n")); - return TRUE; - } - if(ACTING_AS_AP(Adapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActQuery_802_11_BSSID_LIST() <===, return by ACTING_AS_AP\n")); - return TRUE; // ap mode don't support this oid. - } - - // This scan list is empty. - if(pMgntInfo->bFlushScanList) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActQuery_802_11_BSSID_LIST() <===, return by bFlushScanList\n")); - return TRUE; - } - // - // To protect the copying of scan list, using the scan spin lock. - // - // - // This part of copying WLAN BSS from NumBssDesc4Query may conflict with that - // in ScanComplete(), so that there would be no consistency between "NumBssDesc4Query" - // and "NumBssDesc". After that, some BSS we access with incorrect length infomation will - // access the invlaid memory or make system crash. - // By Bruce, 2008-05-29. - - PlatformAcquireSpinLock(Adapter, RT_SCAN_SPINLOCK); - if(pMgntInfo->NumBssDesc4Query == 0 && pMgntInfo->NumBssDesc > 0) - { // Update Bssid list for query as early as possible, 2005.07.22, by rcnjko. - u2Byte tmpNumBssDesc; - - tmpNumBssDesc = pMgntInfo->NumBssDesc; - pMgntInfo->NumBssDesc4Query = tmpNumBssDesc; - - // - // Roger, 071203: We should redirect the Octet pointer to the new destination. - // Rcnjko, 080201: We'd better use the macro CopyWlanBss() to duplicate - // RT_WLAN_BSS objects to handle OCTET_STRING copy issues. - // - for(i = 0; i < tmpNumBssDesc; i ++) - { - CopyWlanBss(pMgntInfo->bssDesc4Query + i, pMgntInfo->bssDesc + i); - } - } - - if( bRealCase == TRUE ) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActQuery_802_11_BSSID_LIST() indicate Real scan \n")); - pBssidList->NumberOfItems = (pMgntInfo->NumBssDesc<=MAX_BSS_DESC) ? pMgntInfo->NumBssDesc: MAX_BSS_DESC; - pBSSDesc = pMgntInfo->bssDesc; - } - else - { - pBssidList->NumberOfItems = (pMgntInfo->NumBssDesc4Query<=MAX_BSS_DESC) ? pMgntInfo->NumBssDesc4Query: MAX_BSS_DESC; - pBSSDesc = pMgntInfo->bssDesc4Query; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActQuery_802_11_BSSID_LIST(), pBssidList->NumberOfItems=%d !!\n", pBssidList->NumberOfItems)); - for(i = 0; i < pBssidList->NumberOfItems; i++) - { - Rssibuf[i]= pBSSDesc[i].RSSI; - idxBuf[i] = (u2Byte)i; - } - //Select sort for rssi. - for(idx=0;idxNumberOfItems;idx++) - { - MaxRSSI =0; - findidx =0; - for(a=idx;aNumberOfItems;a++) - { - if(MaxRSSINumberOfItems; i++) - { - CopyWlanBss(&pBssidList->pbssidentry[i], &pBSSDesc[idxBuf[i]]); - } - - PlatformReleaseSpinLock(Adapter, RT_SCAN_SPINLOCK); - - // An workaround to prevent that we show empty SSID for the AP we've associated. - // 2005.02.18, by rcnjko. - if(pMgntInfo->mAssoc == TRUE) - { - BOOLEAN bCurrApFound = FALSE; - RT_WLAN_BSS *pBssdesc = NULL; - - // Find the entry of AP associated. - for(i = 0;i < pBssidList->NumberOfItems; i++) - { - if( (pBssidList->pbssidentry[i].bdCap & cIBSS) == 0 && - PlatformCompareMemory(pBssidList->pbssidentry[i].bdBssIdBuf, pMgntInfo->Bssid, 6) == 0 ) - { - bCurrApFound = TRUE; - pBssdesc = &(pBssidList->pbssidentry[i]); - break; - } - } - - if(bCurrApFound == TRUE && pBssdesc != NULL) - { - if(BeHiddenSsid(pBssdesc->bdSsIdBuf, pBssdesc->bdSsIdLen)) - { - CopySsid(pBssdesc->bdSsIdBuf, pBssdesc->bdSsIdLen, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - } - } - else - { - RT_TRACE(COMP_DBG, DBG_LOUD, ("We do not find the AP currently associated !!!\n")); - } - } - - return TRUE; -} - - - - - -//Current authentication mode. -BOOLEAN -MgntActQuery_802_11_AUTHENTICATION_MODE( - PADAPTER Adapter, - PRT_AUTH_MODE pauthmode -) -{ - *pauthmode = Adapter->MgntInfo.SecurityInfo.AuthMode; - - return TRUE; -} - - - - -//Returns the current encryption status. -BOOLEAN -MgntActQuery_802_11_ENCRYPTION_STATUS( - PADAPTER Adapter, - PRT_ENC_ALG pEncAlgorithm -) -{ - *pEncAlgorithm = Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm; - - return TRUE; -} - - - -BOOLEAN -MgntActQuery_802_11_ENCRYPTION_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - pu4Byte KeyLength, - pu1Byte KeyMaterial -) -{ - *KeyLength = Adapter->MgntInfo.SecurityInfo.KeyLen[KeyIndex]; - *KeyLength = (*KeyLength<32)? *KeyLength :32; - - PlatformMoveMemory( - KeyMaterial, - Adapter->MgntInfo.SecurityInfo.KeyBuf[KeyIndex], - *KeyLength - ); - - return TRUE; -} - - -u1Byte -MgntActQuery_802_11_CHANNEL_NUMBER( - PADAPTER Adapter -) -{ - return Adapter->MgntInfo.dot11CurrentChannelNumber; -} - - -// -// Description: -// Return Tx rate. -// 2006.10.20, by shien chang. -// -u2Byte -MgntActQuery_802_11_TX_RATES( - PADAPTER Adapter -) -{ - u2Byte rate; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - // Return current Tx capability. - if(IS_WIRELESS_MODE_A(Adapter)) - rate = MGN_54M; // 54 M - else if(IS_WIRELESS_MODE_G(Adapter)) - rate = MGN_54M; // 54 M - else if(IS_WIRELESS_MODE_B(Adapter)) - rate = MGN_11M; // 11 M - else if(IS_WIRELESS_MODE_AC(Adapter)) - rate = VHTMcsToDataRate(Adapter, pMgntInfo->VHTHighestOperaRate); - else if(IS_WIRELESS_MODE_N(Adapter)) - rate = HTMcsToDataRate(Adapter, pMgntInfo->HTHighestOperaRate); - else - rate = MGN_1M; // 1 M - - return rate; -} - - -u2Byte -MgntActQuery_802_11_RX_RATES( - PADAPTER Adapter -) -{ - u2Byte rate; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte Rf_Type = RT_GetRFType(Adapter); - - if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_A) - rate = MGN_54M; // 54 M - else if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_G) - rate = MGN_54M; // 54 M - else if(pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_B) - rate = MGN_11M; // 11 M - else if(IS_WIRELESS_MODE_N_24G(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter)) - { - // Since we cannot know the Tx capability of peer STA, we use Rx capability as Rx rate. - if( (Rf_Type == RF_1T1R) || - (Rf_Type == RF_1T2R ) || - (Rf_Type == RF_2T2R && pMgntInfo->HTHighestOperaRate <= MGN_MCS7)) - rate = HTMcsToDataRate(Adapter, MGN_MCS7); - else if(Rf_Type >= RF_MAX_TYPE) - { - if(IS_WIRELESS_MODE_N_24G(Adapter)) - rate = MGN_1M; - else - rate = MGN_6M; - } - else if(Rf_Type == RF_2T2R) - rate = HTMcsToDataRate(Adapter, MGN_MCS15); - else if(Rf_Type == RF_3T3R || Rf_Type == RF_2T3R) - rate = VHTMcsToDataRate(Adapter, MGN_MCS23); - else if(Rf_Type == RF_2T4R) - rate = VHTMcsToDataRate(Adapter, MGN_MCS31); - else - rate = HTMcsToDataRate(Adapter, MGN_MCS7); - } - else if(IS_WIRELESS_MODE_AC(Adapter)) - { - if(Rf_Type == RF_2T2R) - rate = VHTMcsToDataRate(Adapter, MGN_VHT2SS_MCS9); - else if(Rf_Type == RF_3T3R || Rf_Type == RF_2T3R) - rate = VHTMcsToDataRate(Adapter, MGN_VHT3SS_MCS9); - else if(Rf_Type == RF_2T4R) - rate = VHTMcsToDataRate(Adapter, MGN_VHT4SS_MCS9); - else - rate = VHTMcsToDataRate(Adapter, MGN_VHT1SS_MCS9); - } - else - rate = MGN_1M; // 1 M - - return rate; -} - -WIRELESS_MODE -MgntActQuery_802_11_WIRELESS_MODE( - PADAPTER Adapter -) -{ - return Adapter->RegWirelessMode; -} - - -BOOLEAN -MgntActQuery_802_11_RETRY_LIMIT( - PADAPTER Adapter, - pu2Byte ShortRetryLimit, - pu2Byte LongRetryLimit -) -{ - //RTL8185_TODO: Get short/long retry limit - *ShortRetryLimit = 7; - *LongRetryLimit = 7; - RT_TRACE(COMP_INIT, DBG_SERIOUS,("TODO: Get short/long retry limit.\n") ); - - return TRUE; -} - - - -BOOLEAN -MgntActQuery_MultiDomainImp( - IN PADAPTER Adapter -) -{ - // - // TODO: Implemented. - // - return FALSE; -} - - -BOOLEAN -MgntActQuery_CfPollable( - IN PADAPTER Adapter -) -{ - // - // TODO: Consider current BSS type and return TRUE if underlying HW supported. - // - return FALSE; -} - -BOOLEAN -MgntActQuery_StrictlyOrderedImp( - IN PADAPTER Adapter -) -{ - // - // TODO: Implement it if necessary. - // - return FALSE; -} - -u4Byte -MgntActQuery_ShortRetryLimit( - IN PADAPTER Adapter -) -{ - // - // TODO: Implement it. - // - return 7; -} - -u4Byte -MgntActQuery_LongRetryLimit( - IN PADAPTER Adapter -) -{ - // - // TODO: Implement it. - // - return 7; -} - -u4Byte -MgntActQuery_MaxTxMsduLifeTime( - IN PADAPTER Adapter -) -{ - // - // TODO: use it to timeout MSDU in wait queue. - // - return 512; -} - - -u4Byte -MgntActQuery_MaxRxMpduLifeTime( - IN PADAPTER Adapter -) -{ - // - // TODO: use it to timeout fragmentation in queue. - // - return 512; -} - -u4Byte -MgntActQuery_ExcludedMacAddressList( - IN PADAPTER Adapter, - OUT pu1Byte pMacAddrList, - IN u4Byte BufLength -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte BytesNeeded = (pMgntInfo->ExcludedMacAddrListLength) * 6; - - PlatformZeroMemory(pMacAddrList, BufLength); - - if (BytesNeeded > BufLength) - { - return 0; - } - - PlatformMoveMemory( - pMacAddrList, - pMgntInfo->ExcludedMacAddr, - BytesNeeded); - return pMgntInfo->ExcludedMacAddrListLength; -} - - -PRT_CHANNEL_LIST -MgntActQuery_ChannelList( - IN PADAPTER Adapter - ) -{ - PRT_CHANNEL_LIST pChannelList = NULL; - - // Reconstruct channel list so that channel info modified during customized scan (or other function) could be recovered. - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT, NULL, NULL); - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, (&pChannelList)); - - return pChannelList; -} - -// -// Description: -// Get information about logs supports. -// -BOOLEAN -MgntActQuery_DrvLogTypeList( - IN PADAPTER pAdapter, - IN u4Byte BufferLength, - OUT PDRV_LOG_TYPE_LIST_T pBuffer, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesNeeded - ) -{ -#if !DRV_LOG - *pBytesWritten = *pBytesNeeded = 0; - return FALSE; - -#else - BOOLEAN bResult; - u4Byte idx; - u4Byte DescLen, EntrySize; - PDRV_LOG_TYPE_ATTRIBUTE_T pEntry; - - // - // Check minimal buffer size required. - // - *pBytesWritten = 0; - *pBytesNeeded = sizeof(DRV_LOG_TYPE_LIST_T) - sizeof(DRV_LOG_TYPE_ATTRIBUTE_T); - if(BufferLength < *pBytesNeeded) - return FALSE; - - // - // Enumerate into each entry and fill up if we have enough space. - // - bResult = TRUE; - *pBytesWritten = *pBytesNeeded; - pBuffer->Count = 0; - pEntry = pBuffer->LogTypeAttributes; - for(idx = 0; idx < LTYPE_TOTAL_COUNT; idx++) - { - // - // Figure out string length which is not including EOS. - // - DescLen = 0; - while(g_LogTypes[idx].Description[DescLen] != 0) - { - if(DescLen < (MAX_LOG_DESC_LEN-1)) - { - DescLen++; - } - else - { // This is an unexpted condition and might cause buffer overflow. - RT_ASSERT(FALSE, ("MgntActQuery_DrvLogTypeList(): check g_LogTypes[%ld].Description!!!\n", idx)); - - g_LogTypes[idx].Description[DescLen] = 0; - break; - } - } - - // - // Figure out entry size and add it to *pBytesNeeded. - // - EntrySize = sizeof(DRV_LOG_TYPE_ATTRIBUTE_T) + DescLen; - *pBytesNeeded += EntrySize; - - // - // Fill up this entry if there is enough space. - // - if(BufferLength >= *pBytesNeeded) - { - pEntry->MaxLogCountPwr = g_LogTypes[idx].MaxLogCountPwr; - pEntry->DescLen = DescLen + 1; // 1 is for EOS. - PlatformMoveMemory( - pEntry->Description, - g_LogTypes[idx].Description, - pEntry->DescLen); - - *pBytesWritten += EntrySize; - pEntry = (PDRV_LOG_TYPE_ATTRIBUTE_T)((pu1Byte)(pEntry->Description) + pEntry->DescLen); - pBuffer->Count++; - } - else - { - bResult = FALSE; - } - } - - return bResult; - -#endif -} - - -// -// Description: -// Get information about logs supports. -// -BOOLEAN -MgntActQuery_DrvLogAttrList( - IN PADAPTER pAdapter, - IN u4Byte BufferLength, - OUT PDRV_LOG_ATTR_LIST_T pBuffer, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesNeeded - ) -{ -#if !DRV_LOG - *pBytesWritten = *pBytesNeeded = 0; - return FALSE; - -#else - BOOLEAN bResult; - u4Byte idx; - u4Byte DescLen, EntrySize; - PDRV_LOG_ATTRIBUTE_T pEntry; - - // - // Check minimal buffer size required. - // - *pBytesWritten = 0; - *pBytesNeeded = sizeof(DRV_LOG_ATTR_LIST_T) - sizeof(DRV_LOG_ATTRIBUTE_T); - if(BufferLength < *pBytesNeeded) - return FALSE; - - // - // Enumerate into each entry and fill up if we have enough space. - // - bResult = TRUE; - *pBytesWritten = *pBytesNeeded; - pBuffer->Count = 0; - pEntry = pBuffer->LogAttributes; - for(idx = 0; idx < LID_TOTAL_COUNT; idx++) - { - // - // Figure out string length which is not including EOS. - // - DescLen = 0; - while(g_LogAttributes[idx].Description[DescLen] != 0) - { - if(DescLen < (MAX_LOG_DESC_LEN-1)) - { - DescLen++; - } - else - { // This is an unexpted condition and might cause buffer overflow. - RT_ASSERT(FALSE, ("MgntActQuery_DrvLogAttrList(): check g_LogAttributes[%ld].Description!!!\n", idx)); - - g_LogAttributes[idx].Description[DescLen] = 0; - break; - } - } - - // - // Figure out entry size and add it to *pBytesNeeded. - // - EntrySize = sizeof(DRV_LOG_ATTRIBUTE_T) + DescLen; - *pBytesNeeded += EntrySize; - - // - // Fill up this entry if there is enough space. - // - if(BufferLength >= *pBytesNeeded) - { - pEntry->Type = g_LogAttributes[idx].Type; - pEntry->DescLen = DescLen + 1; // 1 is for EOS. - PlatformMoveMemory( - pEntry->Description, - g_LogAttributes[idx].Description, - pEntry->DescLen); - - *pBytesWritten += EntrySize; - pEntry = (PDRV_LOG_ATTRIBUTE_T)((pu1Byte)(pEntry->Description) + pEntry->DescLen); - pBuffer->Count++; - } - else - { - bResult = FALSE; - } - } - - return bResult; - -#endif -} - - -// -// Description: -// Retrive log data of specified type. -// -BOOLEAN -MgntActQuery_DrvLogDataList( - IN PADAPTER pAdapter, - IN u4Byte eLogType, - IN u4Byte BufferLength, - OUT PDRV_LOG_DATA_LIST_T pBuffer, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesNeeded - ) -{ -#if !DRV_LOG - *pBytesWritten = *pBytesNeeded = 0; - return FALSE; - -#else - u4Byte idx; - u4Byte DrvLogCnt; - u4Byte EntrySize; - PDRV_LOG_DATA_T pEntry; - - // - // Figure out max entry size. - // - // 070305, rcnjko: I use a max estimation instead of - // figure out exact size of the each entry to reduce - // computation overhead. Besides, I assume UI can cover - // this assumption easily. - // - static u4Byte MaxEntrySize = sizeof(DRV_LOG_DATA_IMP_T); - - // - // Check minimal buffer size required. - // - *pBytesWritten = 0; - *pBytesNeeded = sizeof(DRV_LOG_DATA_LIST_T) - sizeof(DRV_LOG_DATA_T); - if(BufferLength < *pBytesNeeded) - return FALSE; - - // - // Check if specified log type valid. - // - if(eLogType >= LTYPE_TOTAL_COUNT) - { - return FALSE; - } - - // - // Enumerate into each entry and fill up if we have enough space. - // - *pBytesWritten = *pBytesNeeded; - DrvLogCnt = GetDrvLogCnt(pAdapter, eLogType); - pBuffer->Count = 0; - pEntry = pBuffer->LogDatas; - for(idx = 0; idx < DrvLogCnt; idx++) - { - // - // Fill up this entry if there is enough space. - // - if(BufferLength >= (*pBytesNeeded + MaxEntrySize)) - { - if( RemoveDrvLog( - pAdapter, - (DRV_LOG_TYPE_E)eLogType, - pEntry) ) - { - // - // Now, we can get exact entry size and apply it - // to fill up *pBytesNeeded and *pBytesWritten. - // - EntrySize = sizeof(DRV_LOG_DATA_T) - sizeof(pEntry->Buffer[0]) + pEntry->BufferLenUsed; - - *pBytesNeeded += EntrySize; - *pBytesWritten += EntrySize; - pEntry = (PDRV_LOG_DATA_T)((pu1Byte)(pEntry->Buffer) + pEntry->BufferLenUsed); - pBuffer->Count++; - } - else - { // No more log available. - break; - } - } - else - { - *pBytesNeeded += MaxEntrySize; - } - } - - return TRUE; -#endif -} - - -u1Byte -DecorateTxRateBySingalStrength( - u4Byte SignalStrength, - u1Byte *SS_Rate_Map, - u1Byte MapSize -) -{ - u1Byte index = 0; - - for(index=0; index<(MapSize*2); index+=2) - { - if(SignalStrength > SS_Rate_Map[index]) - { - return SS_Rate_Map[index+1]; - } - } - - return MGN_1M; -} - -// -// Description: -// Return 11N Tx rate to let Normal User. -// 2008-04-14 by Jacken -// -u2Byte -MgntActQuery_RT_11N_USER_SHOW_RATES( - PADAPTER Adapter , - BOOLEAN TxorRx, //FALSE:Tx TRUE:Rx - BOOLEAN bLinkStateRx -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte rate = MGN_1M; - u1Byte rftype = RT_GetRFType(Adapter); - u4Byte Sgstrength; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - - - // Forced data rate: Tx rate is forced to a constant value. - if(pMgntInfo->ForcedDataRate != 0) - { - return CONVERT_RATE(Adapter, pMgntInfo->ForcedDataRate); - } - - if(pMgntInfo->bRegLinkSpeedLevel == 40) //Real Data rate - { - return CONVERT_RATE(Adapter, pHalData->CurrentRARate); - } - - if(!TxorRx) // Tx rate - {//This value is also refresh in dm_CheckStatistics() every 2 seconds. - // 1 == TxRateTypeCurrent - if(pMgntInfo->OSTxRateDisplayType == 1) - { - // Report the successful transmit rate culculate from dm_CheckStatistics(). - return 0; - } - // 2 == TxRateTypeStartRate - else if(pMgntInfo->OSTxRateDisplayType == 2) - { - // Report initial rate in HW. - return CONVERT_RATE(Adapter, Adapter->TxStats.CurrentInitTxRate); - } - } - - // Decorate Tx/Rx ate by Signal Strength - if(pMgntInfo->bForcedShowRateStill == TRUE) - Sgstrength = 100; - else if (ACTING_AS_AP(Adapter)) - Sgstrength = 100; - else - Sgstrength = GET_UNDECORATED_AVERAGE_RSSI(Adapter); - - if(IS_WIRELESS_MODE_A(Adapter) || IS_WIRELESS_MODE_G(Adapter)) - { - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_G, sizeof(SS_Rate_Map_G)/2); - } - else if(IS_WIRELESS_MODE_B(Adapter)) - { - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_B, sizeof(SS_Rate_Map_B)/2); - } - else if(IS_WIRELESS_MODE_N_24G(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter)) - { - BOOLEAN bMaxRateMcs15; - - // Determine the max rate for N mode. - if( (rftype==RF_1T1R) || - ((!TxorRx) && (rftype==RF_1T2R)) || - (TxorRx && (rftype==RF_1T2R)) || - (pMgntInfo->HTHighestOperaRate <= MGN_MCS7 && 0 != pMgntInfo->HTHighestOperaRate)) - bMaxRateMcs15 = FALSE; - else - bMaxRateMcs15 = TRUE; - - if(rftype == RF_3T3R) - { - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS23, sizeof(SS_Rate_Map_N_MCS23)/2); - } - else if(rftype == RF_2T4R || rftype == RF_2T3R) - { - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS23, sizeof(SS_Rate_Map_N_MCS23)/2); - } - else if(bMaxRateMcs15) - { - if (pMgntInfo->bRegLinkSpeedLevel == 0) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15, sizeof(SS_Rate_Map_N_MCS15)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 12) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15_Lv1, sizeof(SS_Rate_Map_N_MCS15_Lv1)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 14) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15_Lv2, sizeof(SS_Rate_Map_N_MCS15_Lv2)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 16) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15_Lv3, sizeof(SS_Rate_Map_N_MCS15_Lv3)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 18) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15_Lv4, sizeof(SS_Rate_Map_N_MCS15_Lv4)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 20) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15_Lv5, sizeof(SS_Rate_Map_N_MCS15_Lv5)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 24) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15_Lv6, sizeof(SS_Rate_Map_N_MCS15_Lv6)/2); - else - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS15, sizeof(SS_Rate_Map_N_MCS15)/2); - } - else - { - if (pMgntInfo->bRegLinkSpeedLevel == 0) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7, sizeof(SS_Rate_Map_N_MCS7)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 12) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7_Lv1, sizeof(SS_Rate_Map_N_MCS7_Lv1)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 14) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7_Lv2, sizeof(SS_Rate_Map_N_MCS7_Lv2)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 16) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7_Lv3, sizeof(SS_Rate_Map_N_MCS7_Lv3)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 18) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7_Lv4, sizeof(SS_Rate_Map_N_MCS7_Lv4)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 20) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7_Lv5, sizeof(SS_Rate_Map_N_MCS7_Lv5)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 24) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7_Lv6, sizeof(SS_Rate_Map_N_MCS7_Lv6)/2); - else - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_N_MCS7, sizeof(SS_Rate_Map_N_MCS7)/2); - } - } - else if(IS_WIRELESS_MODE_AC(Adapter)) - { - if(rftype == RF_1T1R) - { - if(pMgntInfo->VHTHighestOperaRate < MGN_VHT1SS_MCS9) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_1SS_MCS7, sizeof(SS_Rate_Map_AC_1SS_MCS7)/2); - else - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_1SS_MCS9, sizeof(SS_Rate_Map_AC_1SS_MCS9)/2); - } - else if(rftype == RF_2T2R || rftype == RF_1T2R) - { - if(pMgntInfo->VHTHighestOperaRate < MGN_VHT2SS_MCS9) - { - if (pMgntInfo->bRegLinkSpeedLevel == 0) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7, sizeof(SS_Rate_Map_AC_2SS_MCS7)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 12) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7_Lv1, sizeof(SS_Rate_Map_AC_2SS_MCS7_Lv1)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 14) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7_Lv2, sizeof(SS_Rate_Map_AC_2SS_MCS7_Lv2)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 16) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7_Lv3, sizeof(SS_Rate_Map_AC_2SS_MCS7_Lv3)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 18) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7_Lv4, sizeof(SS_Rate_Map_AC_2SS_MCS7_Lv4)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 20) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7_Lv5, sizeof(SS_Rate_Map_AC_2SS_MCS7_Lv5)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 24) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7_Lv6, sizeof(SS_Rate_Map_AC_2SS_MCS7_Lv6)/2); - else - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS7, sizeof(SS_Rate_Map_AC_2SS_MCS7)/2); - } - else - { - if (pMgntInfo->bRegLinkSpeedLevel == 0) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9, sizeof(SS_Rate_Map_AC_2SS_MCS9)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 12) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9_Lv1, sizeof(SS_Rate_Map_AC_2SS_MCS9_Lv1)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 14) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9_Lv2, sizeof(SS_Rate_Map_AC_2SS_MCS9_Lv2)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 16) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9_Lv3, sizeof(SS_Rate_Map_AC_2SS_MCS9_Lv3)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 18) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9_Lv4, sizeof(SS_Rate_Map_AC_2SS_MCS9_Lv4)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 20) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9_Lv5, sizeof(SS_Rate_Map_AC_2SS_MCS9_Lv5)/2); - else if (pMgntInfo->bRegLinkSpeedLevel == 24) - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9_Lv6, sizeof(SS_Rate_Map_AC_2SS_MCS9_Lv6)/2); - else - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_2SS_MCS9, sizeof(SS_Rate_Map_AC_2SS_MCS9)/2); - } - } - else if(rftype == RF_3T3R) - { - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_3SS_MCS9, sizeof(SS_Rate_Map_AC_3SS_MCS9)/2); - } - else if(rftype == RF_2T4R || rftype == RF_2T3R) - { - rate = DecorateTxRateBySingalStrength(Sgstrength, (pu1Byte)SS_Rate_Map_AC_3SS_MCS9, sizeof(SS_Rate_Map_AC_3SS_MCS9)/2); - } - } - else - return MGN_1M; - - - if(IS_WIRELESS_MODE_N_24G(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter)) - { - if(rate > pMgntInfo->HTHighestOperaRate && pMgntInfo->HTHighestOperaRate != 0) - { - rate = pMgntInfo->HTHighestOperaRate; - } - } - else if(IS_WIRELESS_MODE_AC(Adapter)) - { - if(rate > pMgntInfo->VHTHighestOperaRate && pMgntInfo->VHTHighestOperaRate != 0) - rate = pMgntInfo->VHTHighestOperaRate; - } - else - { - if(rate > pMgntInfo->HighestOperaRate && pMgntInfo->HighestOperaRate != 0) - rate = pMgntInfo->HighestOperaRate; - } - - if(IS_HARDWARE_TYPE_8821U(Adapter) ) - { - if(rate < pHalData->CurrentRARate) - rate = pHalData->CurrentRARate; - } - - return CONVERT_RATE(Adapter, rate); -} - -// -// Description: -// Return the Additional beacon IE field of MgntInfo. -// -BOOLEAN -MgntActQuery_AdditionalBeaconIE( - IN PADAPTER Adapter, - OUT pu1Byte pAdditionalIEBuf, - IN OUT pu4Byte pAdditionalIEBufLen - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bResult = FALSE; - - do - { - if (*pAdditionalIEBufLen < pMgntInfo->AdditionalBeaconIESize) - { - *pAdditionalIEBufLen = pMgntInfo->AdditionalBeaconIESize; - bResult = FALSE; - break; - } - - PlatformMoveMemory(pAdditionalIEBuf, - pMgntInfo->AdditionalBeaconIEData, - pMgntInfo->AdditionalBeaconIESize); - - bResult = TRUE; - - } while(FALSE); - - return bResult; - -} - -// -// Description: -// Return the Additional probe rsp IE field of MgntInfo. -// -BOOLEAN -MgntActQuery_AdditionalProbeRspIE( - IN PADAPTER Adapter, - OUT pu1Byte pAdditionalIEBuf, - IN OUT pu4Byte pAdditionalIEBufLen - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bResult = FALSE; - - do - { - if (*pAdditionalIEBufLen < pMgntInfo->AdditionalResponseIESize) - { - *pAdditionalIEBufLen = pMgntInfo->AdditionalResponseIESize; - bResult = FALSE; - break; - } - - PlatformMoveMemory(pAdditionalIEBuf, - pMgntInfo->AdditionalResponseIEData, - pMgntInfo->AdditionalResponseIESize); - - bResult = TRUE; - - } while(FALSE); - - return bResult; - -} - -RT_AP_TYPE -MgntActQuery_ApType( - IN PADAPTER pAdapter - ) -{ - if(pAdapter == NULL) - return RT_AP_TYPE_NONE; - else - return pAdapter->MgntInfo.ApType; -} - - -#if (P2P_SUPPORT == 1) -P2P_ROLE -MgntActQuery_P2PMode( - IN PADAPTER Adapter - ) -{ - return GET_P2P_INFO(Adapter)->Role; -} - -BOOLEAN -MgntActQuery_P2PScanList( - IN PADAPTER Adapter, - OUT pu1Byte pBuf, - IN OUT pu4Byte pBufLen - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - u4Byte BytesNeeded; - - //RT_TRACE(COMP_P2P, DBG_LOUD, ("MgntActQuery_P2PScanList()\n")); - - if(!P2P_ENABLED(pP2PInfo)) - { - *pBufLen = 0; - return TRUE; - } - - BytesNeeded = pP2PInfo->ScanList4QuerySize* sizeof(P2P_DEVICE_DISCRIPTOR) + sizeof(u4Byte); - - if(*pBufLen < BytesNeeded) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActQuery_P2PScanList(): bytes needed: %u, given: %u\n", BytesNeeded, *pBufLen)); - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActQuery_P2PScanList(): sizeof ClientInfoDesc: %u, ScanListSize: %u\n", - sizeof(P2P_CLIENT_INFO_DISCRIPTOR), pP2PInfo->ScanList4QuerySize)); - *pBufLen = BytesNeeded; - return FALSE; - } - - *((pu4Byte)pBuf) = pP2PInfo->ScanList4QuerySize; - PlatformMoveMemory(pBuf + sizeof(u4Byte), - pP2PInfo->ScanList4Query, - pP2PInfo->ScanList4QuerySize * sizeof(P2P_DEVICE_DISCRIPTOR)); - *pBufLen = BytesNeeded; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActQuery_P2PScanList(): %u items indicated\n", - pP2PInfo->ScanList4QuerySize)); - - return TRUE; -} - -u4Byte -MgntActQuery_P2PSelfDeviceDescriptor( - IN PADAPTER Adapter, - OUT PVOID pDevDesc - ) -{ - return P2PTranslateP2PInfoToDevDesc((GET_P2P_INFO(Adapter)), pDevDesc); -} - -// -// Description: -// Query P2P Channel List -// Arguments: -// [IN] Adapter - -// NIC adapter context pointer. -// [IN] ChannelListBufLen - -// size in bytes of the buffer pointed by the pChannelList parameter -// [OUT] pChennelListLen - -// a pointer to the buffer for returning the number of channels written -// [OUT] pChannelList - -// a pointer to the buffer for returning the channel list -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// Enumerates each channel in channel entery list in P2PInfo of the adapter. Duplicated channels -// are filtered out. -// -RT_STATUS -MgntActQuery_P2PChannelList( - IN PADAPTER Adapter, - IN u4Byte ChannelListBufLen, - OUT pu1Byte pChennelListLen, - OUT pu1Byte pChannelList - ) -{ - u1Byte i = 0, j = 0, k = 0; - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - - if(ChannelListBufLen < 1) return RT_STATUS_RESOURCE; - - *pChennelListLen = 0; - - for(i = 0; i < pP2PInfo->ChannelEntryList.regClasses; i++) // foreach regulatory class - { - for(j = 0; j < pP2PInfo->ChannelEntryList.regClass[i].channels; j++) // foreach channels we support in the regulatory class - { - u1Byte curChannel = pP2PInfo->ChannelEntryList.regClass[i].channel[j]; - - if(*pChennelListLen > ChannelListBufLen) - { - return RT_STATUS_RESOURCE; - } - - // Filter duplicated channels from different reg class - for(k = 0; k < (*pChennelListLen) && pChannelList[k] != curChannel; k++){} - if(k < (*pChennelListLen)) continue; - - // Add the channel - pChannelList[(*pChennelListLen)++] = curChannel; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActQuery_P2PChannelList: add channel: %u, %4s: %4u, %4s: %4u\n", k, - "reg", pP2PInfo->ChannelEntryList.regClass[i].regClass, "ch", curChannel)); - } - } - - return RT_STATUS_SUCCESS; -} - -VOID -MgntActQuery_P2PListenChannel( - IN PADAPTER Adapter, - OUT pu1Byte pListenChannel - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - *pListenChannel = pP2PInfo->ListenChannel; - return; -} -#endif // #if (P2P_SUPPORT == 1) - -#if (WPS_SUPPORT == 1) -u4Byte -MgntActQuery_WPS_Information( - IN PADAPTER Adapter, - OUT pu1Byte InformationBuffer, - IN OUT u4Byte InformationBufferLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - u1Byte BytesNeeded = 3; - u1Byte queryInfo = pSimpleConfig->InfoCtrl; - u4Byte BytesCopied = 0; - - if(pSimpleConfig->WpsIeVersion < SUPPORT_WPS_INFO_VERSION) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActQuery_WPS_Information(): Not support this version!\n")); - goto End; - } - - if(InformationBufferLengthWpsIeVersion; - BytesCopied = BytesNeeded; - } - break; - - default: - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActQuery_WPS_Information(): unspecified query information!\n")); - break; - } - - End: - return BytesCopied; -} -#endif - - diff --git a/network/wlan/WDI/COMMON/MgntActQueryParam.h b/network/wlan/WDI/COMMON/MgntActQueryParam.h deleted file mode 100644 index f5d11f9e..00000000 --- a/network/wlan/WDI/COMMON/MgntActQueryParam.h +++ /dev/null @@ -1,274 +0,0 @@ -#ifndef __INC_MGNTACTQUERYPARAM_H -#define __INC_MGNTACTQUERYPARAM_H - - -BOOLEAN -MgntActQuery_802_11_ASSOCIATION_INFORMATION( - PADAPTER Adapter, - PNDIS_802_11_ASSOCIATION_INFORMATION pAssocInfo -); - -// Returns the current AP MAC address -BOOLEAN -MgntActQuery_802_11_BSSID( - PADAPTER Adapter, - pu1Byte bssidbuf -); - - -// Returns the SSID with which the NIC is associated. -// The driver returns 0 SSIDLength if the NIC is not associated with any SSID. -BOOLEAN -MgntActQuery_802_11_SSID( - PADAPTER Adapter, - pu1Byte ssidbuf, - pu2Byte ssidlen -); - - - -s4Byte -MgntActQuery_TX_POWER_DBM( - PADAPTER Adapter -); - -RT_JOIN_NETWORKTYPE -MgntActQuery_802_11_INFRASTRUCTURE_MODE( - PADAPTER Adapter -); - - -// Returns the current fragmentation threshold in bytes. -u2Byte -MgntActQuery_802_11_FRAGMENTATION_THRESHOLD( - PADAPTER Adapter -); - -//Returns the current RTS threshold. -u2Byte -MgntActQuery_802_11_RTS_THRESHOLD( - PADAPTER Adapter -); - -//Returns the set of supported data rates that the radio is capable of running. -BOOLEAN -MgntActQuery_802_11_SUPPORTED_RATES( - PADAPTER Adapter, - pu1Byte RateSetbuf, - pu2Byte RateSetlen -); - - - -BOOLEAN -MgntActQuery_802_11_BSSID_LIST( - PADAPTER Adapter, - PRT_802_11_BSSID_LIST pBssidList, - BOOLEAN bRealCase - ); - - -BOOLEAN -MgntActQuery_802_11_AUTHENTICATION_MODE( - PADAPTER Adapter, - PRT_AUTH_MODE pauthmode -); - - -BOOLEAN -MgntActQuery_802_11_ENCRYPTION_STATUS( - PADAPTER Adapter, - PRT_ENC_ALG pEncAlgorithm -); - - -BOOLEAN -MgntActQuery_802_11_ENCRYPTION_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - pu4Byte KeyLength, - pu1Byte KeyMaterial -); - - -u1Byte -MgntActQuery_802_11_CHANNEL_NUMBER( - PADAPTER Adapter -); - -u2Byte //Modify by Jacken 2008-05-12 -MgntActQuery_RT_11N_USER_SHOW_RATES( - PADAPTER Adapter, - BOOLEAN TxorRx, - BOOLEAN bLinkStateRx -); - -u2Byte -MgntActQuery_802_11_TX_RATES( - PADAPTER Adapter -); - -u2Byte -MgntActQuery_802_11_RX_RATES( - PADAPTER Adapter -); - - -WIRELESS_MODE -MgntActQuery_802_11_WIRELESS_MODE( - PADAPTER Adapter -); - - -BOOLEAN -MgntActQuery_802_11_RETRY_LIMIT( - PADAPTER Adapter, - pu2Byte ShortRetryLimit, - pu2Byte LongRetryLimit -); - - - -BOOLEAN -MgntActQuery_MultiDomainImp( - IN PADAPTER Adapter -); - -BOOLEAN -MgntActQuery_CfPollable( - IN PADAPTER Adapter -); - -BOOLEAN -MgntActQuery_StrictlyOrderedImp( - IN PADAPTER Adapter -); - -u4Byte -MgntActQuery_ShortRetryLimit( - IN PADAPTER Adapter -); - -u4Byte -MgntActQuery_LongRetryLimit( - IN PADAPTER Adapter -); - -u4Byte -MgntActQuery_MaxTxMsduLifeTime( - IN PADAPTER Adapter -); - -u4Byte -MgntActQuery_MaxRxMpduLifeTime( - IN PADAPTER Adapter -); - -u4Byte -MgntActQuery_ExcludedMacAddressList( - IN PADAPTER Adapter, - OUT pu1Byte pMacAddrList, - IN u4Byte BufLength -); - -PRT_CHANNEL_LIST -MgntActQuery_ChannelList( - IN PADAPTER Adapter -); - -BOOLEAN -MgntActQuery_DrvLogTypeList( - IN PADAPTER pAdapter, - IN u4Byte BufferLength, - OUT PDRV_LOG_TYPE_LIST_T pBuffer, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesNeeded -); - -BOOLEAN -MgntActQuery_DrvLogAttrList( - IN PADAPTER pAdapter, - IN u4Byte BufferLength, - OUT PDRV_LOG_ATTR_LIST_T pBuffer, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesNeeded -); - -BOOLEAN -MgntActQuery_DrvLogDataList( - IN PADAPTER pAdapter, - IN u4Byte eLogType, - IN u4Byte BufferLength, - OUT PDRV_LOG_DATA_LIST_T pBuffer, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesNeeded -); - -BOOLEAN -MgntActQuery_AdditionalBeaconIE( - IN PADAPTER Adapter, - OUT pu1Byte pAdditionalIEBuf, - IN OUT pu4Byte pAdditionalIEBufLen -); - -BOOLEAN -MgntActQuery_AdditionalProbeRspIE( - IN PADAPTER Adapter, - OUT pu1Byte pAdditionalIEBuf, - IN OUT pu4Byte pAdditionalIEBufLen -); - -RT_AP_TYPE -MgntActQuery_ApType( - IN PADAPTER pAdapter -); - -P2P_ROLE -MgntActQuery_P2PMode( - IN PADAPTER Adapter - ); - -BOOLEAN -MgntActQuery_P2PScanList( - IN PADAPTER Adapter, - OUT pu1Byte pBuf, - IN OUT pu4Byte pBufLen - ); - -u4Byte -MgntActQuery_P2PSelfDeviceDescriptor( - IN PADAPTER Adapter, - OUT PVOID pDevDesc - ); - -RT_STATUS -MgntActQuery_P2PChannelList( - IN PADAPTER Adapter, - IN u4Byte ChannelListBufLen, - OUT pu1Byte pChennelListLen, - OUT pu1Byte pChannelList - ); - -VOID -MgntActQuery_P2PListenChannel( - IN PADAPTER Adapter, - OUT pu1Byte pListenChannel - ); - -VOID -MgntActQuery_P2PListenChannel( - IN PADAPTER Adapter, - OUT pu1Byte pListenChannel - ); - -#if (WPS_SUPPORT == 1 ) -u4Byte -MgntActQuery_WPS_Information( - IN PADAPTER Adapter, - OUT pu1Byte InformationBuffer, - IN OUT u4Byte InformationBufferLength - ); -#endif - -#endif // #ifndef __INC_MGNTACTQUERYPARAM_H diff --git a/network/wlan/WDI/COMMON/MgntActSetParam.c b/network/wlan/WDI/COMMON/MgntActSetParam.c deleted file mode 100644 index 3dc09934..00000000 --- a/network/wlan/WDI/COMMON/MgntActSetParam.c +++ /dev/null @@ -1,4704 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntActSetParam.tmh" -#endif - -// -// Set turbo mode type switches; it's implemented for AutoTurbo by 8186. (asked by SD4) -// Value: (given by Mingyi, 2005-12-22, 18:04.) -// 00 - disable turbo -// 01 - turbo on -// 02 - Auto Turbo -// -// So I regard bit0 as bSupportTurboMode switch, -// and regard bit1 as bAutoTurboBy8186 switch. -// -// Added by Roger, 2006.12.07. -// -BOOLEAN -MgntActSet_RT_TurboModeType( - IN PADAPTER Adapter, - IN pu1Byte pTurboModeType - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PTURBOMODE_TYPE pForceType = (PTURBOMODE_TYPE)pTurboModeType; - - - // - // Input value Check. Currently I want to allow 0, 1, and 2 only. - // - if( *pTurboModeType >= 3 ) - { - return FALSE; - } - - // - // Set turbo mode switches: (1)bSupportTurboMode (2)bSupportTurboMode. - // I suppose this two switches are not both TRUE at the same time. - // - pMgntInfo->bSupportTurboMode = pForceType->field.SupportTurboMode; - pMgntInfo->bAutoTurboBy8186 = pForceType->field.AutoTurboBy8186; - - RT_ASSERT( !(pMgntInfo->bSupportTurboMode && pMgntInfo->bAutoTurboBy8186), - ("bSupportTurboMode and bAutoTurboBy8186 both are TRUE!\n") ); - - // Asked by PJ and SD4 David: we should reconnect after setting OID_RT_TURBOMODE. Annie, 2005-12-30. - // We decide to do it in UI, so I don't disconnect it again. Annie, 2006-01-02. - //MgntActSet_802_11_DISASSOCIATE( Adapter, unspec_reason ); - - return TRUE; -} - - -// For turbo mode swtiching, added by Roger, 2006.12.07. -VOID -MgntActSet_EnterTurboMode( - IN PADAPTER Adapter, - IN BOOLEAN bEnterTurboMode - ) -{ - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TURBO_CA pTurboCa = &(pMgntInfo->TurboChannelAccess); - BOOLEAN bEnterTCA; - - - pTurboCa->bEnabled = bEnterTCA = bEnterTurboMode; //Modefied by Roger, 2006.12.15. - - if( bEnterTurboMode ) - { // Enter turbo mode - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_TURBO_MODE, (UCHAR*)&bEnterTCA ); - } - else - { // Resume - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_TURBO_MODE, (UCHAR*)&bEnterTCA ); - } - - -} - -// -// Locked STA MAC Address in AP mode. -// - LockedListLen is 6*LockedSTACount. (Reference OID_802_3_MULTICAST_LIST) -// - Not to lock if LockedListLen is 0. -// -// Added by Annie, 2006-02-15. -// -BOOLEAN -MgntActSet_Locked_STA_Address( - IN PADAPTER Adapter, - IN pu1Byte LockedListBuf, - IN u4Byte LockedListCnt -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u4Byte idx; - - RT_TRACE( COMP_AP, DBG_LOUD, ("====> MgntActSet_Locked_STA_Address()\n") ); - - // - // 061122, rcnjko: Prevent malicious buffer overflow attack. - // - if(LockedListCnt > MAX_LOCKED_STA_LIST_NUM) - { - LockedListCnt = MAX_LOCKED_STA_LIST_NUM; - } - - // - // 1. Update LockedSTACount and LockedSTAList. - // - pMgntInfo->LockType = MAC_FILTER_LOCK; - pMgntInfo->bDefaultPermited = FALSE; - pMgntInfo->LockedSTACount = LockedListCnt; - - if( LockedListCnt != 0 ) - { - CopyMem( pMgntInfo->LockedSTAList, LockedListBuf, LockedListCnt*ETHERNET_ADDRESS_LENGTH ); - } - - RT_PRINT_ADDRS( COMP_AP, DBG_LOUD, ("MgntActSet_Locked_STA_Address(): Locked STA List"), pMgntInfo->LockedSTAList, pMgntInfo->LockedSTACount ); - - - // - // 2. Disassociate unlocked STAs. - // - if( LockedListCnt != 0 ) - { - // Initialize bLocked - for( idx=0; idxAsocEntry[idx].bLocked = FALSE; - } - - // Update bLocked - for( idx=0; idxLockedSTAList[idx] ); - - if( pEntry != NULL ) - { - pEntry->bLocked = TRUE; - } - } - - // Disassociate unlocked STAs. - for( idx=0; idxAsocEntry[idx]); - - if( pSta->bUsed && pSta->bAssociated && !pSta->bLocked ) - { - AP_DisassociateStation( Adapter, pSta, inactivity ); - } - } - } - - RT_TRACE( COMP_AP, DBG_LOUD, ("MgntActSet_Locked_STA_Address() <====\n") ); - return TRUE; -} - - - -BOOLEAN -MgntActSet_Accepted_STA_Address( - IN PADAPTER Adapter, - IN pu1Byte LockedListBuf, - IN u4Byte LockedListCnt -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u4Byte idx; - - RT_TRACE( COMP_AP, DBG_LOUD, ("====> MgntActSet_Accepted_STA_Address()\n") ); - - // - // 061122, rcnjko: Prevent malicious buffer overflow attack. - // - if(LockedListCnt > MAX_LOCKED_STA_LIST_NUM) - { - LockedListCnt = MAX_LOCKED_STA_LIST_NUM; - } - - // - // 1. Update LockedSTACount and LockedSTAList. - // - pMgntInfo->LockType = MAC_FILTER_ACCEPT; - pMgntInfo->bDefaultPermited = FALSE; - pMgntInfo->LockedSTACount = LockedListCnt; - - if( LockedListCnt != 0 ) - { - CopyMem( pMgntInfo->LockedSTAList, LockedListBuf, LockedListCnt*ETHERNET_ADDRESS_LENGTH ); - } - - RT_PRINT_ADDRS( COMP_AP, DBG_LOUD, ("MgntActSet_Accepted_STA_Address(): Locked STA List"), pMgntInfo->LockedSTAList, pMgntInfo->LockedSTACount ); - - - // - // 2. Disassociate unaccepted STAs. - // - if( LockedListCnt != 0 ) - { - // Initialize bLocked - for( idx=0; idxAsocEntry[idx].bLocked = FALSE; - } - - // Update bLocked - for( idx=0; idxLockedSTAList[idx] ); - - if( pEntry != NULL ) - { - pEntry->bLocked = TRUE; - } - } - - // Disassociate unaccepted STAs. - for( idx=0; idxAsocEntry[idx]); - - if( pSta->bUsed && pSta->bAssociated && !pSta->bLocked ) - { - AP_DisassociateStation( Adapter, pSta, inactivity ); - } - } - } - else // Reject all - { - for( idx=0; idxAsocEntry[idx]); - - if( pSta->bUsed && pSta->bAssociated) - { - AP_DisassociateStation( Adapter, pSta, inactivity ); - } - } - } - - RT_TRACE( COMP_AP, DBG_LOUD, ("MgntActSet_Accepted_STA_Address() <====\n") ); - return TRUE; -} - -BOOLEAN -MgntActSet_Rejected_STA_Address( - IN PADAPTER Adapter, - IN pu1Byte LockedListBuf, - IN u4Byte LockedListCnt -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u4Byte idx; - - RT_TRACE( COMP_AP, DBG_LOUD, ("====> MgntActSet_Rejected_STA_Address()\n") ); - - // - // 061122, rcnjko: Prevent malicious buffer overflow attack. - // - if(LockedListCnt > MAX_LOCKED_STA_LIST_NUM) - { - LockedListCnt = MAX_LOCKED_STA_LIST_NUM; - } - - // - // 1. Update LockedSTACount and LockedSTAList. - // - pMgntInfo->LockType = MAC_FILTER_REJECT; - pMgntInfo->bDefaultPermited = TRUE; - pMgntInfo->LockedSTACount_Reject= LockedListCnt; - - if( LockedListCnt != 0 ) - { - CopyMem( pMgntInfo->LockedSTAList_Reject, LockedListBuf, LockedListCnt*ETHERNET_ADDRESS_LENGTH ); - } - - RT_PRINT_ADDRS( COMP_AP, DBG_LOUD, ("MgntActSet_Rejected_STA_Address(): Locked STA List"), pMgntInfo->LockedSTAList_Reject, pMgntInfo->LockedSTACount_Reject); - - - // - // 2. Disassociate rejected STAs. - // - if( LockedListCnt != 0 ) - { - // Initialize bLocked - for( idx=0; idxAsocEntry[idx].bLocked = FALSE; - } - - // Update bLocked - for( idx=0; idxLockedSTAList_Reject[idx] ); - - if( pEntry != NULL ) - { - pEntry->bLocked = TRUE; - } - } - - // Disassociate rejected STAs. - for( idx=0; idxAsocEntry[idx]); - - if( pSta->bUsed && pSta->bAssociated && pSta->bLocked ) - { - AP_DisassociateStation( Adapter, pSta, inactivity ); - } - } - } - - RT_TRACE( COMP_AP, DBG_LOUD, ("MgntActSet_Rejected_STA_Address() <====\n") ); - return TRUE; -} - - - - -//Sets the MAC address of the desired AP. -BOOLEAN -MgntActSet_802_3_MAC_ADDRESS( - PADAPTER Adapter, - pu1Byte addrbuf -) -{ - RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, ("MgntActSet_802_3_MAC_ADDRESS \n"), addrbuf); - - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ETHER_ADDR, addrbuf); - PlatformMoveMemory(Adapter->CurrentAddress, addrbuf, 6); - - return TRUE; -} - - - - -//Sets the MAC address of the desired AP. -BOOLEAN -MgntActSet_802_11_BSSID( - PADAPTER Adapter, - pu1Byte bssidbuf -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - // Set management bssid - if(ACTING_AS_AP(Adapter)== FALSE) // Follow 8180 AP mode. 2005.05.30, by rcnjko. - { - CopyMem( pMgntInfo->Bssid, bssidbuf, 6 ); - } - - // Prefast warning C6011: Dereferencing NULL pointer 'bssidbuf'. - if (bssidbuf != NULL) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("MgntActSet_802_11_BSSID: %02X%02X%02X%02X%02X%02X\n", bssidbuf[0], bssidbuf[1], bssidbuf[2], bssidbuf[3], bssidbuf[4], bssidbuf[5])); - } - - return TRUE; -} - - - - -// Sets the SSID to a specified value -// Select a Basic Service Set to join? -BOOLEAN -MgntActSet_802_11_SSID( - PADAPTER Adapter, - pu1Byte ssidbuf, - u2Byte ssidlen, - BOOLEAN JoinAfterSetSSID - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_WLAN_BSS pRtBss; - BOOLEAN bTheSameSSID = FALSE; - RT_JOIN_ACTION join_action; - u8Byte CurrTime ,DiffTime; - BOOLEAN bNeedChkJoinAction; - - RT_PRINT_STR(COMP_MLME, DBG_LOUD, "MgntActSet_802_11_SSID()====> SSID ", ssidbuf, ssidlen); - // - // For XP DTM 1.0C association_cmn T1017, we have to clear reject list when - // upper layer try to link with new profile. 070912, by rcnjko. - // - MgntClearRejectedAsocAP(Adapter); - - // - // Reset mDeauthCount - // - pMgntInfo->mDeauthCount = 0; - - if(ACTING_AS_AP(Adapter)) - { - OCTET_STRING SsidToCheck; - - FillOctetString( SsidToCheck, ssidbuf, ssidlen ); - - // - // 060227, Annie: - // For MeetingHouse and Zero Config coexistence issue: not to set dummy SSID in AP mode. - // - if( IsSSIDDummy(SsidToCheck) ) - { - RT_TRACE( COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID(): mActingAsAp, Dummy SSID! Not to set it!\n") ); - return FALSE; - } - - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, ssidbuf, ssidlen); - - if(pMgntInfo->bAutoSelChnl) - { - { - if( !MgntScanInProgress(pMgntInfo) && - !MgntIsLinkInProgress(pMgntInfo) ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID(): mActingAsAp && bAutoSelChnl ==> MgntLinkRequest\n")); - MgntLinkRequest( - Adapter, - TRUE, //bScanOnly - TRUE, //bActiveScan, - FALSE, //FilterHiddenAP // Asked by Netgear's Lancelot for 8187 should look like their damn wg111v1, 2005.02.01, by rcnjko. - FALSE, // Update parameters - NULL, //ssid2scan - 0, //NetworkType, - 0, //ChannelNumber, - 0, //BcnPeriod, - 0, //DtimPeriod, - 0, //mCap, - NULL, //SuppRateSet, - NULL //yIbpm, - ); - } - } - } - else - { - AP_Reset(Adapter); - } - return TRUE; - } - -// pMgntInfo->bIbssStarter=FALSE; - - CCX_SetAssocReason(Adapter, CCX_AR_FIRST_ASSOCIATION); - - if(MgntIsLinkInProgress(pMgntInfo)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Ssid during association !!\n")); - } - - if( ssidlen==pMgntInfo->Ssid.Length && - !PlatformCompareMemory( ssidbuf, pMgntInfo->Ssid.Octet, ssidlen ) ) - { - bTheSameSSID = TRUE; - } - - // In adhoc mode, update beacon frame. - if( pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - if( pMgntInfo->mIbss ) - { - if( bTheSameSSID ) - { - if(pMgntInfo->bIbssStarter && !pMgntInfo->bMediaConnect) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("theSameSSID bIbssStarter TRUE bMediaConnect FALSE!\n")); - return TRUE; - } - - // If SSID is the same, update security status. - if( pMgntInfo->bMlmeStartReqRsn == MLMESTARTREQ_NONE ) - { - // do nothing if SSID is the same. - // 2004/03/11 For NDTest -> Indicating connect while connect to the same IBSS network. - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, FORCE_INDICATE ); - return TRUE; - } - else - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE); - } - //TODO: update beacon frame if necessary. - } - else - { - MgntDisconnectIBSS( Adapter ); - } - } - - if( pMgntInfo->mAssoc) - { - if( bTheSameSSID ) - { - // 2004/03/09 For NDTest -> Indicating connect while connect to the same AP. - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, FORCE_INDICATE ); - - // If SSID is the same, update security status. - if( pMgntInfo->bMlmeStartReqRsn == MLMESTARTREQ_NONE ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID(): Return because MLMESTARTREQ_NONE!\n")); - return TRUE; - } - } - else - { - // If SSID is different, disassociate AP. - MgntDisconnectAP(Adapter, disas_lv_ss); - } - } - } - - // Set RegSSID, ssid2match. - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, ssidbuf, ssidlen); - - // - // Do not scan but reset all mgnt variables when the OS wants to reset. By Bruce, 2009-04-10. - // - if(IsSSIDDummy(pMgntInfo->Ssid)) - { - ResetMgntVariables(Adapter); - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID(): Dummy SSID! Return!!!!\n")); - return FALSE; - } - - if( pMgntInfo->bScanInProgress || (pMgntInfo->bDualModeScanStep!=0) ) - { - pMgntInfo->bScanOnly = FALSE; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID():pMgntInfo->bScanInProgress=true Return!!!!\n")); - return FALSE; - } - - // If in WPS process, do not connect to the same AP twice - // Add by hpfan 2008.02.06 - if (WPS_MgntActSet_802_11_SSID(Adapter) == TRUE) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID(): do not connect to the same AP twice Return!!!!\n")); - return TRUE; - } - - MgntResetJoinCounter(pMgntInfo); - - //2004/08/23, kcwu, set the Privacy bit on in Capability field - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER) - pMgntInfo->mCap |= cPrivacy; - else - pMgntInfo->mCap &= ~cPrivacy; - - if(PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_SSID(): Allocate memory for pRtBss failed!Return!!!\n")); - return FALSE; - } - - CurrTime = PlatformGetCurrentTime(); // In micro-second. - DiffTime = CurrTime - Adapter->LastScanCompleteTime; // In micro-second. - - if (DiffTime >= 10000000) //it's over 10 sec after last scan complete - { - if((Adapter->bInHctTest || pMgntInfo->IsAMDIOIC) && pMgntInfo->RoamingType == RT_ROAMING_BY_SLEEP) - { - // - // - // This is a very dirty work around for Win7 NDISTest performance_ext. - // It requires that the period from system transit to D0 to the time we - // associate with the AP to be less than 1.1 sec. Since LastScanCompleteTime - // is greater than 10 sec., we will have to do a scan before associate with the AP - // in the original design. The scan takes too much time (around 1.7 sec) - // to associate with the AP (threshold = 1.1 sec). We ignore checking of - // LastScanCompleteTime to avoid scan and time is saved. - // If the original AP disappears then join timeout occurs. - // 2008.08.28, haich. - // - //PlatformStallExecution(50); - join_action = SelectNetworkBySSID( Adapter, &pMgntInfo->Ssid, FALSE, pRtBss ); - } - else - { - bNeedChkJoinAction = FALSE; - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_CHK_JOINACTION, (pu1Byte)(&bNeedChkJoinAction)); - if(bNeedChkJoinAction) - { - join_action = SelectNetworkBySSID( Adapter, &pMgntInfo->Ssid, FALSE, pRtBss ); - } - else - { - join_action = RT_NO_ACTION; - } - } - } - else - { - join_action = SelectNetworkBySSID( Adapter, &pMgntInfo->Ssid, FALSE, pRtBss); - } - - if(join_action==RT_JOIN_INFRA || join_action==RT_JOIN_IBSS) - { - pMgntInfo->JoinAction = join_action; - JoinRequest( Adapter, join_action, pRtBss ); - } - else - { - - u1Byte ssid2scanbuf[33]; - OCTET_STRING ssid2scan; - u1Byte SuppRatebuf[MAX_NUM_RATES]; - OCTET_STRING SuppRate; - IbssParms yIbssP; - - FillOctetString(ssid2scan, ssid2scanbuf, 0); - CopySsid(ssid2scan.Octet, ssid2scan.Length, ssidbuf, ssidlen); - - FillOctetString(SuppRate, SuppRatebuf, 0); - CopyMemOS( &SuppRate, pMgntInfo->Regdot11OperationalRateSet, pMgntInfo->Regdot11OperationalRateSet.Length); - - //yIbssP.atimWin = 80; - yIbssP.atimWin = 0; // Asked by owen: since we have not yet implement power save mode on IBSS now. 2005.03.04, by rcnjko. - // O.w., it will degrade the throughput when Netgear WG511T join the IBSS created by us. - - if( !MgntScanInProgress(pMgntInfo) && - !MgntIsLinkInProgress(pMgntInfo) ) - { - MgntLinkRequest( - Adapter, - FALSE, //bScanOnly - TRUE, //bActiveScan, - FALSE, //FilterHiddenAP - TRUE, // Update parameters - &ssid2scan, //ssid2scan - pMgntInfo->Regdot11networktype, //NetworkType, - pMgntInfo->Regdot11ChannelNumber, //ChannelNumber, - pMgntInfo->Regdot11BeaconPeriod, //BcnPeriod, - pMgntInfo->Regdot11DtimPeriod, //DtimPeriod, - pMgntInfo->RegmCap, //mCap, - &SuppRate, //SuppRateSet, - &yIbssP //yIbpm, - ); - } - } - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_NONE; - return TRUE; -} - - - - - - -// Sets the current NDIS_802_11_TX_POWER_LEVEL value in mW. -BOOLEAN -MgntActSet_802_11_TX_POWER_LEVEL( - PADAPTER Adapter, - u4Byte powerlevel -) -{ - // TODO: - return TRUE; -} - - - - - -// Sets the RSSI trigger value for an event. -BOOLEAN -MgntActSet_802_11_RSSI_TRIGGER( - PADAPTER Adapter, - u4Byte param1 -) -{ - return TRUE; -} - - - - - -// Sets mode to Infrastructure or IBSS, or automatic switch between the two. -// This also resets the network association algorithm. -// When this OID is called to set the mode, -// all keys set through OID_802_11_ADD_WEP and OID_802_11_ADD_KEY should be deleted. -// -// Refering to the DDK 3790, " If the device is associated and a set of this OID changes the driver's network mode, -// the driver must disassociate and make a media disconnect indication." -// However, whenever the WZC changes the security setting of the same profile and set infrastructure mode as the previous, -// the NIC never becomes disconnected. Actually we just reassociate and wait for the security handshake from -// WZC supplicant, but the supplicant cannot determine which the settings between the profile and driver shall be used, -// because we never indicate disconnected status. -// We always disconnect from the current BSS, and indicate the status to OS no matter the infrastructure mode is changged. -// Pass WLK 1.4 XP DTM. -// By Bruce, 2009-05-27. -// -BOOLEAN -MgntActSet_802_11_INFRASTRUCTURE_MODE( - PADAPTER Adapter, - RT_JOIN_NETWORKTYPE networktype -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - - if( Adapter->bHWInitReady == FALSE ) - return FALSE; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return FALSE; - } - - switch( networktype ) - { - case RT_JOIN_NETWORKTYPE_ADHOC: - case RT_JOIN_NETWORKTYPE_INFRA: - case RT_JOIN_NETWORKTYPE_AUTO: - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_INFRASTRUCTURE_MODE(): %d\n", networktype)); - - MgntDisconnect(Adapter, disas_lv_ss); - - if(MgntRoamingInProgress(pMgntInfo)) - MgntRoamComplete(Adapter, MlmeStatus_invalid); - - if (!IS_DUAL_BAND_SUPPORT(Adapter)) - MgntResetLinkProcess(Adapter); - else - { - //When we do scan for connect on dual band. The scan time is so long(>2s) that it can't be completed before connect. - //We do connect in ScanComplete(). by Lawrence. - // 2013/08/21 MH Revise for XP, when reset link process is blocked, the 4 query scan list will not exist - // previous linked AP and the scan process will be delay for a while and this will cause XP 2sec reset event. - // The case: Link with one AP, then AP disappear. Then the scan and connect process will be delayed - // due to the the reset process is not executed. Need to find why - - if(pMgntInfo->bMediaConnect || MgntIsLinkInProgress(pMgntInfo)) - MgntResetLinkProcess(Adapter); - else - { - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - pMgntInfo->AuthStatus = AUTH_STATUS_IDLE; - pMgntInfo->mDisable = TRUE; - pMgntInfo->mAssoc = FALSE; - pMgntInfo->mIbss = FALSE; - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_NONE; - pMgntInfo->bJoinInProgress = FALSE; - } - } - - if(IS_HARDWARE_TYPE_8821U(Adapter)) - { - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_NONE; - } - - break; - - default: - break;// auto mode - } - - pMgntInfo->Regdot11networktype = networktype; - - // - // The follwing decision will update current PSP control settings dynamically, - // which according as network type, i.e., infracture mode will disable PSP control as default. - // 2009.12.03. - // - if( pMgntInfo->bDefaultPSPXlinkMode && - networktype == RT_JOIN_NETWORKTYPE_ADHOC ) - { - // Update ReceiveConfig variable. - Adapter->HalFunc.AllowAllDestAddrHandler(Adapter, TRUE, TRUE); - pMgntInfo->bPSPXlinkMode = TRUE; - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_INFRASTRUCTURE_MODE(): Enable PSP Xlink!!\n")); - } - else - {// Disable PSP Xlink control even bDefaultPSPXlinkMode is TRUE. - - // Update ReceiveConfig variable. - if(!pMgntInfo->bNetMonitorMode) - Adapter->HalFunc.AllowAllDestAddrHandler(Adapter, FALSE, TRUE); - pMgntInfo->bPSPXlinkMode = FALSE; - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_INFRASTRUCTURE_MODE(): Disable PSP Xlink!!\n")); - } - - //2004/07/27, kcwu, - /* - When this OID is called to set the mode, all keys set through OID_802_11_ADD_WEP - and OID_802_11_ADD_KEY should be deleted - */ - SecClearAllKeys(Adapter); - return TRUE; -} - - - - - -// Sets the fragmentation threshold in bytes. -BOOLEAN -MgntActSet_802_11_FRAGMENTATION_THRESHOLD( - PADAPTER Adapter, - u2Byte fragthres -) -{ - Adapter->MgntInfo.FragThreshold = fragthres; - return TRUE; -} - - - - - -//Sets the RTS threshold. -BOOLEAN -MgntActSet_802_11_RTS_THRESHOLD( - PADAPTER Adapter, - u2Byte RtsThres -) -{ - RT_TRACE(COMP_INIT, DBG_SERIOUS,("TODO: Set Rts Threshold = %02x .\n", RtsThres) ); - - Adapter->MgntInfo.dot11RtsThreshold = RtsThres; - return TRUE; -} - - - - - -//Sets the antenna used for receiving. -BOOLEAN -MgntActSet_802_11_RX_ANTENNA_SELECTED( - PADAPTER Adapter, - u4Byte param1 -) -{ - return TRUE; -} - - - - - -//Sets the antenna used for transmitting. -BOOLEAN -MgntActSet_802_11_TX_ANTENNA_SELECTED( - PADAPTER Adapter, - u4Byte param1 -) -{ - return TRUE; -} - - - - - -//Sets the set of data rates. -BOOLEAN -MgntActSet_802_11_DESIRED_RATES( - PADAPTER Adapter, - pu1Byte RateSetbuf, - u2Byte RateSetlen -) -{ - return TRUE; -} - - - - -BOOLEAN -MgntActSet_802_11_RATE( - PADAPTER Adapter, - u1Byte rate // 0x02 := 1Mbps, .... - ) -{ - //TODO - // <1>Set operational rate or basic rate or both??? - // <2>Set fixed rate or only enable the rate set?? - RT_TRACE(COMP_OID_SET, DBG_LOUD,("TODO: Set rate =%02x.\n",rate) ); - - return TRUE; -} - - - - - -//Sets the radio configuration. -// 2004.06.14, by rcnjko. -BOOLEAN -MgntActSet_802_11_CONFIGURATION( - PADAPTER Adapter, - u2Byte BeaconPeriod, - u1Byte ChannelNumber -) -{ - PMGNT_INFO pMgntInfo= &Adapter->MgntInfo; - - // Change default value of beacon period. - pMgntInfo->Regdot11BeaconPeriod = BeaconPeriod; - - // Switch to channel specified. - MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(Adapter, ChannelNumber); - - return TRUE; -} - - - - - -//Sets the desired WEP key. -// <1>Set 4 Default key refered to pMgntInfo->SecurityInfo.DefaultKeyBuf. -// <2>Set SCR refered to pMgntInfo->SecurityInfo.EncAlgorithm. -BOOLEAN -MgntActSet_802_11_ADD_WEP( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLength, - pu1Byte KeyMaterial, - BOOLEAN IsDefaultKeyId -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - AESCCMP_BLOCK blockKey; - - RT_TRACE(COMP_SEC, DBG_LOUD, ("====> MgntActSet_802_11_ADD_WEP(): EncAlgorithm=%d, KeyIndex=0x%X, KeyLength=%d, IsDefaultKeyId=%d\n", - EncAlgorithm, KeyIndex, KeyLength, IsDefaultKeyId )); - pSecInfo->PairwiseEncAlgorithm = EncAlgorithm; - - KeyIndex = (KeyIndex < 4) ? KeyIndex : 0; - KeyLength = ( KeyLength <= 13 ) ? KeyLength : 13; - CopyMem( pSecInfo->KeyBuf[KeyIndex], KeyMaterial, KeyLength ); - pSecInfo->KeyLen[KeyIndex] = (u1Byte)KeyLength; - if( IsDefaultKeyId ){ - pSecInfo->DefaultTransmitKeyIdx = (u1Byte)KeyIndex; - } - - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_KEY_CHANGE; - - Adapter->HalFunc.SetKeyHandler(Adapter, KeyIndex, 0, FALSE, EncAlgorithm, TRUE, FALSE); - - - // add for set CKIP key exp. and AES_set Key( for MIC ) , by CCW - if( KeyLength==5 && KeyIndex<4 ) - { - CopyMem( pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex]+0*KeyLength , KeyMaterial, KeyLength ); - CopyMem( pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex]+1*KeyLength , KeyMaterial, KeyLength ); - CopyMem( pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex]+2*KeyLength , KeyMaterial, KeyLength ); - CopyMem( pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex]+3*KeyLength , KeyMaterial, 1 ); - } - else if( KeyLength==13 && KeyIndex<4 ) - { - CopyMem( pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex]+0*KeyLength , KeyMaterial, KeyLength ); - CopyMem( pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex]+1*KeyLength , KeyMaterial, CKIP_KEY_LEN-KeyLength ); - } - RT_PRINT_DATA( COMP_CKIP, DBG_LOUD, "CKIPKeyBuf", pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex], CKIP_KEY_LEN ); - - PlatformMoveMemory( blockKey.x, pSecInfo->pCkipPara->CKIPKeyBuf[KeyIndex], CKIP_KEY_LEN ); - - // When reset the WEP key, just reset the IV. - pSecInfo->TxIV = DEFAULT_INIT_TX_IV; - - AES_SetKey( blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pSecInfo->AESKeyBuf[KeyIndex] ); - - RT_TRACE(COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_ADD_WEP() <====\n")); - - return TRUE; -} - - - - - -//Removes the desired WEP key. -BOOLEAN -MgntActSet_802_11_REMOVE_WEP( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLength -) -{ - - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - KeyLength = ( KeyLength <= 13 ) ? KeyLength : 13; - if( KeyIndex < 4 ){ - PlatformZeroMemory( pMgntInfo->SecurityInfo.KeyBuf[KeyIndex], KeyLength); - pMgntInfo->SecurityInfo.KeyLen[KeyIndex] = 0; - }else{ - return FALSE; - } - - Adapter->HalFunc.SetKeyHandler(Adapter, KeyIndex, 0, FALSE, EncAlgorithm, TRUE, FALSE); - - - return TRUE; -} - - - - - -//Disassociates with the current SSID and turns off the radio. -NDIS_STATUS -MgntActSet_802_11_DISASSOCIATE( - PADAPTER Adapter, - u1Byte asRsn -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_DISASSOCIATE()====>\n")); - // - // Schedule an workitem to wake up for ps mode, 070109, by rcnjko. - // - if(pMgntInfo->mPss != eAwake) - { - // - // Using AwkaeTimer to prevent mismatch ps state. - // In the timer the state will be changed according to the RF is being awoke or not. By Bruce, 2007-10-31. - // - // PlatformScheduleWorkItem( &(pMgntInfo->AwakeWorkItem) ); - PlatformSetTimer( Adapter, &(pMgntInfo->AwakeTimer), 0 ); - } - - // Follow 8180 AP mode, 2005.05.30, by rcnjko. - if(ACTING_AS_AP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_DISASSOCIATE() ===> AP_DisassociateAllStation\n")); - AP_DisassociateAllStation(Adapter, unspec_reason); - return ndisStatus; - } - - pMgntInfo->RequestFromUplayer = FALSE; - - // In adhoc mode, update beacon frame. - if( pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - if( pMgntInfo->mIbss) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_DISASSOCIATE() ===> MgntDisconnectIBSS\n")); - - //should clear key here,if not , AES/TKIP Can not ping after use WAPI zhiyuan 2009/12/25 - RT_TRACE(COMP_SEC,DBG_LOUD,("MgntActSet_802_11_Disassociate sec mode = 0x%08X\n",pMgntInfo->SecurityInfo.PairwiseEncAlgorithm)); - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm==RT_ENC_ALG_SMS4 && WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - SecClearAllKeys(Adapter); - - MgntDisconnectIBSS( Adapter ); - } - - if( pMgntInfo->mAssoc ) - { - // We should leave LPS mode first. 2011.03.23. by tynli. - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - LeisurePSLeave(Adapter, LPS_DISABLE_SET_DISASSOCIATE); - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_DISASSOCIATE() ===> MgntDisconnectAP\n")); - MgntDisconnectAP(Adapter, asRsn); - - // We clear key here instead of MgntDisconnectAP() because that - // MgntActSet_802_11_DISASSOCIATE() is an interface called by OS, - // e.g. OID_802_11_DISASSOCIATE in Windows while as MgntDisconnectAP() is - // used to handle disassociation related things to AP, e.g. send Disassoc - // frame to AP. 2005.01.27, by rcnjko. - // The key shall be cleared after sending disassociate/deauth to AP because these disconnecting frames - // may be protected by the keys, we shall keep the key before sending the mgnt frames. - SecClearAllKeys(Adapter); - } - - // Inidicate Disconnect, 2005.02.23, by rcnjko. - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE); - } - else - { - if(pMgntInfo->bScanInProgress == TRUE || pMgntInfo->bDualModeScanStep != 0) - { //2013.05.14, Revised by Ping-Yan, to avoid skip scans when Port1 exists for single band chip. - MgntResetScanProcess(Adapter); - } - - ndisStatus = NDIS_STATUS_INVALID_STATE; - - } - - //Set SSID as dummy to stop the current join process. - SET_SSID_DUMMY(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - - return ndisStatus; -} - - - -// -// Deauthentication with the current SSID. -// Reference MgntActSet_802_11_DISASSOCIATE(). -// Added by Annie, 2006-05-04. -// -BOOLEAN -MgntActSet_802_11_DEAUTHENTICATION( - PADAPTER Adapter, - u1Byte asRsn -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(ACTING_AS_AP(Adapter)) - { // AP Mode. - // TODO: AP MODE. - return TRUE; - } - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return TRUE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return TRUE; - } - - // In adhoc mode, update beacon frame. - if( pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - if( pMgntInfo->mIbss ) - { // Ad-Hoc Mode: Following MgntActSet_802_11_DISASSOCIATE(). - MgntDisconnectIBSS( Adapter ); - } - if( pMgntInfo->mAssoc ) - { - // We should leave LPS mode first. 2011.03.23. by tynli. - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - LeisurePSLeave(Adapter, LPS_DISABLE_SET_DEAUTH); - } - - // We clear key here instead of MgntDisconnectAP() because that - // MgntActSet_802_11_DISASSOCIATE() is an interface called by OS, - // e.g. OID_802_11_DISASSOCIATE in Windows while as MgntDisconnectAP() is - // used to handle disassociation related things to AP, e.g. send Disassoc - // frame to AP. 2005.01.27, by rcnjko. - SecClearAllKeys(Adapter); - - MlmeDeauthenticateRequest( Adapter, pMgntInfo->Bssid, asRsn ); - } - - // Inidicate Disconnect, 2005.02.23, by rcnjko. - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE); - } - - //Set SSID as dummy to stop the current join process. - SET_SSID_DUMMY(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - - return TRUE; -} - - - - -//Sets the authentication mode to open, shared, auto-switch, WPA, WPA-PSK or WPA-None. -BOOLEAN -MgntActSet_802_11_AUTHENTICATION_MODE( - PADAPTER Adapter, - RT_AUTH_MODE authmode -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if( pMgntInfo->SecurityInfo.AuthMode != authmode ) - { - pMgntInfo->SecurityInfo.AuthMode = authmode; - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_AUTH_CHANGE; - } - - switch( authmode ){ - case RT_802_11AuthModeOpen: - pMgntInfo->AuthReq_auAlg = OPEN_SYSTEM; - break; - case RT_802_11AuthModeShared: - pMgntInfo->AuthReq_auAlg = SHARED_KEY; - break; - case RT_802_11AuthModeAutoSwitch: - pMgntInfo->AuthReq_auAlg = SHARED_KEY; // 2005.03.08, by rcnjko. - break; - case RT_802_11AuthModeWPA: - case RT_802_11AuthModeWPAPSK: - case RT_802_11AuthModeWPANone: - case RT_802_11AuthModeWPA2: // Added by Annie, 2005-09-14. - case RT_802_11AuthModeWPA2PSK: // Added by Annie, 2005-09-14. - case RT_802_11AuthModeMax: - case RT_802_11AuthModeCCKM: - case RT_802_11AuthModeWAPI: - case RT_802_11AuthModeCertificateWAPI: - //2004/07/24, kcwu, it should be "OPEN_SYSTEM" - //pMgntInfo->AuthReq_auAlg = SHARED_KEY; - pMgntInfo->AuthReq_auAlg = OPEN_SYSTEM; - default: - break; - } - - //add for RSNA IBSS ,by CCW - if( pMgntInfo->bRSNAPSKMode ) - { - if( !pMgntInfo->SecurityInfo.SWTxEncryptFlag || !pMgntInfo->SecurityInfo.SWRxDecryptFlag ) - { - // RSNA IBSS : use software encryption/decryption. - SecSetSwEncryptionDecryption(Adapter, TRUE, TRUE); - if(pMgntInfo->NdisVersion < RT_NDIS_VERSION_6_20) - Adapter->HalFunc.DisableHWSecCfgHandler(Adapter); - } - } - - return TRUE; -} - - - - - - - -//Sets to open or 802.1X filtering, zero is open, 1 is 802.1X filtering. -BOOLEAN -MgntActSet_802_11_PRIVACY_FILTER( - PADAPTER Adapter, - u4Byte param1 -) -{ - return TRUE; -} - - -//Performs a survey of potential BSSs. -BOOLEAN -MgntActSet_802_11_BSSID_LIST_SCAN( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u8Byte now_time, Diff_Time; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("====> MgntActSet_802_11_BSSID_LIST_SCAN()\n")); - - - // Follow 8180 AP mode, 2005.05.30, by rcnjko. - // The client may still want to scan in AP mode. - if(ACTING_AS_AP(Adapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntActSet_802_11_BSSID_LIST_SCAN(): in AP mode, return TRUE. <====\n")); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_FAILURE); - return TRUE; - } - - now_time = PlatformGetCurrentTime(); - Diff_Time = now_time - pMgntInfo->uConnectedTime; - if(Diff_Time/100000 <=100) - { - return TRUE; - } - - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_SITE_SURVEY); - - if( !MgntScanInProgress(pMgntInfo) && - !MgntIsLinkInProgress(pMgntInfo) ) - { - { - MgntLinkRequest( - Adapter, - TRUE, //bScanOnly - TRUE, //bActiveScan, - FALSE, //FilterHiddenAP // Asked by Netgear's Lancelot for 8187 should look like their damn wg111v1, 2005.02.01, by rcnjko. - FALSE, // Update parameters - NULL, //ssid2scan - 0, //NetworkType, - 0, //ChannelNumber, - 0, //BcnPeriod, - 0, //DtimPeriod, - 0, //mCap, - NULL, //SuppRateSet, - NULL //yIbpm, - ); - } - } - else - { - // In this case, the scan process is progressing, just return SUCCESS. - // 2006.11.15, by shien chang. - if ( MgntIsLinkInProgress(pMgntInfo) ) - { - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - } - } - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("MgntActSet_802_11_BSSID_LIST_SCAN(): return TRUE. <====\n")); - return TRUE; -} - - - - - - - -//Permitted to enable or disable encryption and the encryption modes. -BOOLEAN -MgntActSet_802_11_ENCRYPTION_STATUS( - PADAPTER Adapter, - u4Byte param1 -) -{ - return TRUE; -} - - - - - -// Sets results in the reloading of the available defaults for the specified type field. -BOOLEAN -MgntActSet_802_11_RELOAD_DEFAULTS( - PADAPTER Adapter, - u4Byte param1 -) -{ - return TRUE; -} - - - - - - - -//------------------------------------------------- -// WPA -//------------------------------------------------- -//Sets the desired key. -BOOLEAN -MgntActSet_802_11_ADD_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLength, - pu1Byte KeyMaterial, - pu1Byte MacAddress, - BOOLEAN IsGroupTransmitKey, - BOOLEAN IsGroup, - u8Byte KeyRSC // Instialized value used for received multicast packet. Only used when the input parameter "IsGroup" is set TRUE and "IsGroupTransmitKey" set FALSE and KeyIndex | ADD_KEY_IDX_RSC. -) -{ - - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - pu1Byte pKeyRSC = (pu1Byte)&KeyRSC; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("====> MgntActSet_802_11_ADD_KEY()\n") ); - -// RT_TRACE( COMP_SEC, DBG_LOUD, ("EncAlgorithm=%d, KeyIndex=0x%X, IsGroupTransmitKey=%d, IsGroup=%d, KeyRSC=0x%"i64fmt"X\n", - // EncAlgorithm, KeyIndex, IsGroupTransmitKey, IsGroup, KeyRSC ) ); - - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "KeyMaterial:\n", KeyMaterial, KeyLength ); - RT_PRINT_ADDR( COMP_SEC, DBG_LOUD, "MacAddress: ", MacAddress ); - - // - // 061122, rcnjko: Prevent malicious buffer overflow attack. - // - if(KeyLength > MAX_KEY_LEN) - { - RT_ASSERT(FALSE, ("MgntActSet_802_11_ADD_KEY(): KeyLength(%d) > MAX_KEY_LEN(%d) !!!\n", KeyLength, MAX_KEY_LEN)); - return FALSE; - } - - //2004/09/01, kcwu - if((KeyIndex & 0x00000003) > 3) - return FALSE; - - // - // When the mode is mix of TKIP and WEP for GroupTransmitKey, it should not enter this case!. - // Modified for testing over DTM XP 1.0c, by Bruce, 2007-07-26. - //2004/09/15, kcwu, for AES - // - if( !IsGroup && !IsGroupTransmitKey &&((KeyIndex & 0x00000003) == 0) && ((KeyLength != 32 && pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP)|| (KeyLength != 16 && pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP))) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_ADD_KEY(): key length not match <====\n") ); - return FALSE; - } - - //2004/09/01, kcwu - if( (KeyLength == 5) && ((KeyIndex & 0x00000003) < 4) && (pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER)){ - EncAlgorithm = RT_ENC_ALG_WEP40; - } - else if( (KeyLength == 13) && ((KeyIndex & 0x00000003) < 4) && (pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER)){ - EncAlgorithm = RT_ENC_ALG_WEP104; - } - else if( (KeyLength == 16) && ((KeyIndex & 0x00000003) < 4) && (pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER)) { - // 2009.03.30 Reject WEP 152 connection, add by hpfan - RT_TRACE(COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_ADD_KEY(): Wep with wrong key length <====\n") ); - return FALSE; - } - - if(IsGroup) - { - // Check the previous WOL event if the GTK triggered waking. - WolByGtkUpdate(Adapter); - } - - - // - // No need to check SecLvl in WEP mode, and it only depends on EncAlgorithm. - // Comment out for testing over DTM XP 1.0c, by Bruce, 2007-07-26. - // - if( pSecInfo->SecLvl == RT_SEC_LVL_NONE || Adapter->bInHctTest) - { - if(EncAlgorithm == RT_ENC_ALG_WEP40||EncAlgorithm == RT_ENC_ALG_WEP104) - { - MgntActSet_802_11_ADD_WEP( - Adapter, - EncAlgorithm, - (KeyIndex & 0x000000ff), - KeyLength, - KeyMaterial, - ( KeyIndex & 0x80000000 ) ? TRUE : FALSE - ); - - return TRUE; - } - } - - if(!IsGroup) // This key is pairwise key - { - // The pairwise key is updated, so are the Tx/Rx IV. By Bruce, 2010-11-04. - pSecInfo->TxIV = DEFAULT_INIT_TX_IV; - pSecInfo->RXUntiIV = DEFAULT_INIT_RX_IV; - } - - if(IsGroup) - { - // When the group key is updated, we need to update the rx IV. - // Note: - // Maybe we shall check the flag IsGroupTransmitKey as FALSE for RX group key case. - // By Bruce, 2010-11-04. - pSecInfo->RXMutiIV = DEFAULT_INIT_RX_IV; - } - - // - // Else: WPA or WPA2. - // - - if(KeyIndex & ADD_KEY_IDX_RSC) - {//kcwu: SetRSC - if(IsGroup) - { - // Record the RSC for multicast IV to avoid IV replay. - pSecInfo->RXMutiIV = - //LowPart - ( (u8Byte)( - (u4Byte)((u1Byte)*(pKeyRSC+0) << 8) | (u4Byte)((u1Byte)*(pKeyRSC+1) << 0) - | (u4Byte)((u1Byte)*(pKeyRSC+4) << 24) | (u4Byte)((u1Byte)*(pKeyRSC+5) << 16) - )<<32) - //HighPart - |((u4Byte)((u1Byte)*(pKeyRSC+2) << 8) | (u4Byte)((u1Byte)*(pKeyRSC+3) << 0)); - } - } - /* Remove It , Group Key Updata should not init Unicase IV - else - { - if(IsGroup) - { - pSecInfo->TxIV = 0; - } - } - */ - - KeyIndex &= 0x00000003; - - //kcwu: Indicate this key idx is used for TX - if(IsGroup){//Group transmit key - if(IsGroupTransmitKey){ - pSecInfo->GroupTransmitKeyIdx= (u1Byte)KeyIndex; - } - SecClearGroupKeyByIdx(Adapter, (u1Byte)KeyIndex); - CopyMem(pSecInfo->KeyBuf[KeyIndex], KeyMaterial, KeyLength ); - pSecInfo->KeyLen[KeyIndex]= (u1Byte)KeyLength; - }else{ - - //kcwu: clear keybuffer - SecClearPairwiseKeyByMacAddr(Adapter, 0); - CopyMem( pSecInfo->PairwiseKey, KeyMaterial, KeyLength ); - - //This is for pairwise key - pSecInfo->KeyLen[PAIRWISE_KEYIDX]= (u1Byte)KeyLength; - - // - // We had done 4-way - // - Adapter->MgntInfo.mDeauthCount = 0; - RT_TRACE( COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_ADD_KEY: Set Retry count to be 0!\n") ); - } - - - if(EncAlgorithm == RT_ENC_ALG_TKIP) - { - if((KeyIndex & ADD_KEY_IDX_AS)){//kcwu: Key is set by an Authenticator, exchange Tx/Rx MIC - u1Byte tmpbuf[TKIP_MIC_KEY_LEN]; - PlatformMoveMemory(tmpbuf, KeyMaterial+TKIP_ENC_KEY_LEN, TKIP_MIC_KEY_LEN); - PlatformMoveMemory(KeyMaterial+TKIP_ENC_KEY_LEN, - KeyMaterial+TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN, TKIP_MIC_KEY_LEN); - PlatformMoveMemory(KeyMaterial+TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN, tmpbuf, TKIP_MIC_KEY_LEN); - } - PlatformMoveMemory(pSecInfo->RxMICKey, KeyMaterial+TKIP_MICKEYRX_POS, TKIP_MIC_KEY_LEN); - PlatformMoveMemory(pSecInfo->TxMICKey, KeyMaterial+TKIP_MICKEYTX_POS, TKIP_MIC_KEY_LEN); - } - else if(EncAlgorithm == RT_ENC_ALG_AESCCMP) - { - //2004/09/07, kcwu, AES Key Initialize - AESCCMP_BLOCK blockKey; - PlatformMoveMemory(blockKey.x, pSecInfo->KeyBuf[IsGroup?KeyIndex:PAIRWISE_KEYIDX],16); - AES_SetKey(blockKey.x, - AESCCMP_BLK_SIZE*8, - (u4Byte *)pSecInfo->AESKeyBuf[IsGroup?KeyIndex:PAIRWISE_KEYIDX]); // run the key schedule - } - else if(EncAlgorithm==RT_ENC_ALG_WEP40 || EncAlgorithm==RT_ENC_ALG_WEP104) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_ADD_KEY(): SecLvl>0, EncAlgorithm=%d, IsGroup=%d\n", EncAlgorithm, IsGroup) ); - } - - - //kcwu: Maybe it can be removed. After add WPA feature, run 2c_wlan_wep - // to test the following flag - Adapter->MgntInfo.bMlmeStartReqRsn = MLMESTARTREQ_KEY_CHANGE; - - //No matter software en/de-cryption is turned on or not, always set key into hardware - Adapter->HalFunc.SetKeyHandler(Adapter, - KeyIndex, - MacAddress, - IsGroup, - EncAlgorithm, - FALSE, - FALSE); - - RT_TRACE( COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_ADD_KEY(): return TRUE. <====\n") ); - return TRUE; -} - - - -//Add for RSNA IBSS , by CCW -BOOLEAN -MgntActSet_RSNA_REMOVE_DEAULT_KEY( - PADAPTER Adapter, - u4Byte KeyIndex, - pu1Byte MacAddress -) -{ - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - ULONG index; - PPER_STA_DEFAULT_KEY_ENTRY pDefKey; - - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====> Remove Default Key\n")); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, " Station MAC : ", MacAddress); - pDefKey = pSecInfo->PerStaDefKeyTable; - - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pDefKey++) - { - if( pDefKey->Valid && (PlatformCompareMemory(MacAddress,pDefKey->MACAdrss, 6)==0)) - break; - } - - if( index == MAX_NUM_PER_STA_KEY ) - return FALSE; // Can't find it. return NDIS_STATUS_INVALID_DATA - else - PlatformZeroMemory(pDefKey->DefKeyBuf+KeyIndex, AESCCMP_BLK_SIZE_TOTAL); - - pDefKey->DefkeyValid[KeyIndex] = FALSE; - - for( index = 0 ; index < 4 ; index++ ) - { - if(pDefKey->DefkeyValid[index] == TRUE) - break; - } - - if( index == 4 ) - { - PlatformZeroMemory(pDefKey ,sizeof(PER_STA_DEFAULT_KEY_ENTRY)); - pDefKey->Valid = FALSE; - } - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====>Remove Default Key\n")); - return TRUE; -} - -//vivi added for new cam search flow, 2009102 -/* - vivi only modify add default key function but not remove default key function, - cause actually MgntActSet_RSNA_REMOVE_DEAULT_KEY will not be called, - and we reset all the key in N6CQuerySet_DOT11_RESET_REQUEST: SecClearAllKeys, - in that function all sw&hw key will be reset including RSNA IBSS key -*/ -BOOLEAN -MgntActSet_RSNA_ADD_DEAULT_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLen, - pu1Byte pKeyMaterial, - pu1Byte MacAddress -) -{ - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - ULONG index; - ULONG emptyindex; - PPER_STA_DEFAULT_KEY_ENTRY pDefKey; - AESCCMP_BLOCK blockKey; - u4Byte EntryId = 0; - u2Byte usConfig = 0; - //u1Byte CAM_CONST_BROAD[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - u1Byte NullMacadress[6] = {0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00}; - u1Byte MacAddress_Original[6] = {0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00}; - - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====> Add Default Key\n")); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, " Station MAC : ", MacAddress); - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, " KeyMaterial : ", pKeyMaterial, KeyLen); - RT_TRACE(COMP_RSNA, DBG_LOUD, (" EncAlgorithm: %02x, Key index : %02x \n", - EncAlgorithm, KeyIndex)); - emptyindex = MAX_NUM_PER_STA_KEY; - pDefKey = pSecInfo->PerStaDefKeyTable; - - if (IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT()) - { - //for sw, mac address 0 will be covered, so save the original mac address - PlatformMoveMemory(MacAddress_Original, MacAddress, 6); - } - - if(KeyLen != AESCCMP_BLK_SIZE) - { - return FALSE; - } - - if( MacAddress[0] == 0 && MacAddress[1] == 0 && - MacAddress[2] == 0 && MacAddress[3] == 0 && - MacAddress[4] == 0 && MacAddress[5] == 0 ) - { - // - // This is our group key. - // - PlatformMoveMemory(MacAddress,Adapter->CurrentAddress,6); - } - - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pDefKey++) - { - if( pDefKey->Valid && (PlatformCompareMemory(MacAddress,pDefKey->MACAdrss, 6)==0)) - break; // find out the same entry. - - if( !pDefKey->Valid && emptyindex == MAX_NUM_PER_STA_KEY ) - emptyindex = index; // find out one empty entry. - } - - if( index == MAX_NUM_PER_STA_KEY ) //Don't find the same entry - { - if( emptyindex == MAX_NUM_PER_STA_KEY ) - return FALSE; //return NIDS_STATUS_RESOURES - pDefKey = pSecInfo->PerStaDefKeyTable + emptyindex; - - //Set MAC - PlatformMoveMemory( pDefKey->MACAdrss , MacAddress , 6 ); - } - else // find the same entry - { - pDefKey = pSecInfo->PerStaDefKeyTable + index; - } - - //Set Key - PlatformMoveMemory( blockKey.x , pKeyMaterial , KeyLen); - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pDefKey->DefKeyBuf[KeyIndex] ); - - - pDefKey->DefkeyValid[KeyIndex] = TRUE; - pDefKey->Valid = TRUE; - //all above reserved, vivi. actually for sw en/decryption - - if (IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT()) - { - //1 vivi add new for hw encryption, 20091028 - //adhoc or infra sta in aes mode, pMacAddr equals 0 means tx broadcast key(adhoc) or rx broadcast key(infra) - if(PlatformCompareMemory(MacAddress_Original, NullMacadress, 6) == 0) - { - //set in entry 0-3, hw find key according to KeyIndex, not address - //MacAddress = CAM_CONST_BROAD; - int i; - EntryId = (u1Byte)KeyIndex; - //find the cam 0~3 for group key - for(i = 0 ; i < 4 ; i++) - { - if(Adapter->MgntInfo.SWCamTable[i].bUsed) - PlatformZeroMemory( & Adapter->MgntInfo.SWCamTable[i] , sizeof(SW_CAM_TABLE) ); - } - - //set SW CAM - Adapter->MgntInfo.SWCamTable[EntryId].bUsed = 1; - Adapter->MgntInfo.SWCamTable[EntryId].ulUseDK= KeyIndex; - PlatformMoveMemory(Adapter->MgntInfo.SWCamTable[EntryId].macAddress, MacAddress_Original, 6); - CopyMem( Adapter->MgntInfo.SWCamTable[EntryId].pucKey , pKeyMaterial , sizeof(Adapter->MgntInfo.SWCamTable[EntryId].pucKey) ); - Adapter->MgntInfo.SWCamTable[EntryId].ulEncAlg = EncAlgorithm; - Adapter->MgntInfo.SWCamTable[EntryId].ulKeyId = EntryId; //cam entryid in cam - Adapter->MgntInfo.SWCamTable[EntryId].portNumber = 0; // to ID different port - } - else //otherwise, set EntryId according to macaddr - { - //find EntryId, and also set sw cam, this sw cam table is consistent with hw table...later virtual also use sw cam table - EntryId = Sta_FindFreeEntry(Adapter, - MacAddress_Original, - KeyIndex, - EncAlgorithm, - pKeyMaterial); - if(EntryId == (Adapter->TotalCamEntry + 1)) - return FALSE; //return NIDS_STATUS_RESOURES - } - - //Set HW CAM - usConfig=usConfig|CFG_VALID|((u2Byte)(Sec_MapNewCipherToDepCipherAlg(pSecInfo->GroupEncAlgorithm))<<2)|(u1Byte)KeyIndex; - CAM_program_entry(Adapter, EntryId, MacAddress_Original, pKeyMaterial, usConfig); - - //vivi add for debug - RT_TRACE(COMP_RSNA, DBG_LOUD, (" SWCam Information: EntryId: %02x\n", EntryId)); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, " Station MAC : ", Adapter->MgntInfo.SWCamTable[EntryId].macAddress); - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, " KeyMaterial : ", Adapter->MgntInfo.SWCamTable[EntryId].pucKey, KeyLen); - RT_TRACE(COMP_RSNA, DBG_LOUD, (" EncAlgorithm: %02x\n", - Adapter->MgntInfo.SWCamTable[EntryId].ulEncAlg)); - RT_TRACE(COMP_RSNA, DBG_LOUD, (" KeyINdex: %02x\n", - Adapter->MgntInfo.SWCamTable[EntryId].ulUseDK)); - } - - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====>Add Default Key\n")); - return TRUE; - -} - - -BOOLEAN -MgntActSet_RSNA_REMOVE_MAPPING_KEY( - PADAPTER Adapter, - pu1Byte MacAddress -) -{ - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - ULONG index; - PPER_STA_MPAKEY_ENTRY pMAPKey; - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====> Remove Mapping Key\n")); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, " Station MAC : ", MacAddress); - - pMAPKey = pSecInfo->MAPKEYTable; - - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pMAPKey++) - { - if( pMAPKey->Valid && (PlatformCompareMemory(MacAddress,pMAPKey->MACAdrss, 6)==0)) - break; - } - - if( index == MAX_NUM_PER_STA_KEY ) - return FALSE; // Can't find it. return NDIS_STATUS_INVALID_DATA - else - PlatformZeroMemory(pMAPKey, sizeof(PER_STA_MPAKEY_ENTRY)); - - pMAPKey->Valid = FALSE; - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====>Remove Mapping Key\n")); - return TRUE; -} - - -BOOLEAN -MgntActSet_RSNA_ADD_MAPPING_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLen, - pu1Byte pKeyMaterial, - pu1Byte MacAddress -) -{ - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - ULONG index; - ULONG emptyindex; - PPER_STA_MPAKEY_ENTRY pMAPKey; - AESCCMP_BLOCK blockKey; - u4Byte EntryId = 0; - u2Byte usConfig = 0; - - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====> Add Mapping Key\n")); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, " Station MAC : ", MacAddress); - //RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, " KeyMaterial : ", pKeyMaterial, KeyLen); - RT_TRACE(COMP_RSNA, DBG_LOUD, (" EncAlgorithm: %02x, Key index : %02x \n", - EncAlgorithm, KeyIndex)); - - pMAPKey = pSecInfo->MAPKEYTable; - emptyindex = MAX_NUM_PER_STA_KEY; - - if(KeyLen != AESCCMP_BLK_SIZE) - { - return FALSE; - } - - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pMAPKey++) - { - if( pMAPKey->Valid && (PlatformCompareMemory(MacAddress,pMAPKey->MACAdrss, 6)==0)) - break; // find out the same entry. - - if( !pMAPKey->Valid && emptyindex == MAX_NUM_PER_STA_KEY ) - emptyindex = index; // find out one empty entry. - } - - if( index == MAX_NUM_PER_STA_KEY ) //Don't find the same entry - { - if( emptyindex == MAX_NUM_PER_STA_KEY ) - return FALSE; //return NIDS_STATUS_RESOURES - pMAPKey = pSecInfo->MAPKEYTable + emptyindex; - //Set MAC - PlatformMoveMemory( pMAPKey->MACAdrss , MacAddress , 6 ); - } - else // find the same entry - { - pMAPKey = pSecInfo->MAPKEYTable + index; - } - - //Set Key - PlatformMoveMemory( blockKey.x , pKeyMaterial , KeyLen); - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pMAPKey->MapKeyBuf ); - - pMAPKey->Valid = TRUE; - - if (IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT()) - { - //all above reserved, vivi. actually for sw en/decryption - - //1 vivi add new for hw encryption, 20091028 - //get EntryId according to macaddr - //find EntryId, and also set sw cam, this sw cam table is consistent with hw table...later virtual also use sw cam table - EntryId = Sta_FindFreeEntry(Adapter, - MacAddress, - KeyIndex, - EncAlgorithm, - pKeyMaterial); - - //Set HW CAM - usConfig=usConfig|CFG_VALID|((u2Byte)(pSecInfo->GroupEncAlgorithm)<<2)|(u1Byte)KeyIndex; - CAM_program_entry(Adapter, EntryId, MacAddress, pKeyMaterial, usConfig); - - //vivi add for debug - RT_TRACE(COMP_RSNA, DBG_LOUD, (" EntryId: %02x\n", EntryId)); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, " Station MAC : ", Adapter->MgntInfo.SWCamTable[EntryId].macAddress); - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, " KeyMaterial : ", Adapter->MgntInfo.SWCamTable[EntryId].pucKey, KeyLen); - RT_TRACE(COMP_RSNA, DBG_LOUD, (" EncAlgorithm: %02x\n", - Adapter->MgntInfo.SWCamTable[EntryId].ulEncAlg)); - RT_TRACE(COMP_RSNA, DBG_LOUD, (" KeyIndex: %02x\n", - Adapter->MgntInfo.SWCamTable[EntryId].ulUseDK)); - } - - RT_TRACE(COMP_RSNA, DBG_LOUD, ("====>Add Mapping Key\n")); - return TRUE; -} - -BOOLEAN -MgntActSet_802_11_REMOVE_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - pu1Byte BSSID, - BOOLEAN IsGroup -) -{ -//2004/08/23, kcwu, remove key -// PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - KeyIndex&=0x00000003; - if(IsGroup){ - SecClearGroupKeyByIdx(Adapter, (u1Byte)KeyIndex); - }else{ - SecClearPairwiseKeyByMacAddr(Adapter, BSSID); - } - - return TRUE; -} - - - - - -BOOLEAN -MgntActSet_802_11_WIRELESS_MODE( - PADAPTER Adapter, - WIRELESS_MODE WirelessMode -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte SupportedWirelessMode = Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter); - - if( (WirelessMode!=WIRELESS_MODE_AUTO) && - ((WirelessMode & SupportedWirelessMode) == 0) ) - { // Don't switch to unsupported wireless mode, 2006.02.15, by rcnjko. - RT_TRACE(COMP_DBG, DBG_SERIOUS, - ("MgntActSet_802_11_WIRELESS_MODE(): WirelessMode(0x%X) is not supported (0x%X)!\n", - WirelessMode, SupportedWirelessMode)); - return FALSE; - } - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return FALSE; - } - - FunctionIn(COMP_MLME); - - if(MgntScanInProgress(pMgntInfo)) - MgntResetScanProcess( Adapter ); - MgntActSet_802_11_DISASSOCIATE( Adapter, disas_lv_ss ); - if(MgntRoamingInProgress(pMgntInfo)) - MgntRoamComplete(Adapter, MlmeStatus_invalid); - MgntResetLinkProcess( Adapter ); - - Adapter->RegWirelessMode = WirelessMode; - - // In prevent of switching back to wrong band in scancallback(). 2004.12.10, by rcnjko. - pMgntInfo->SettingBeforeScan.WirelessMode = WirelessMode; - - switch(WirelessMode) - { - case WIRELESS_MODE_A: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_A\n")); - break; - case WIRELESS_MODE_B: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_B\n")); - break; - case WIRELESS_MODE_G: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_G\n")); - break; - case WIRELESS_MODE_AUTO: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_AUTO\n")); - break; - case WIRELESS_MODE_N_24G: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_N_24G\n")); - break; - case WIRELESS_MODE_AC_24G: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_AC_24G\n")); - break; - case WIRELESS_MODE_N_5G: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_N_5G\n")); - break; - case WIRELESS_MODE_AC_5G: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_AC_5G\n")); - break; - default: //For MacOs Warning: "WIRELESS_MODE_UNKNOWN" not handled in switch. - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set WIRELESS_MODE_UNKNOWN\n")); - break; - } - - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)Adapter->RegWirelessMode); - - // Adjust dot11CurrentChannelNumber here, we dot11CurrentChannelNumber is not - // a legal channel for current band, it will be reset to first legal channel - // of current band. 2004.06.09, by rcnjko. - MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(Adapter, pMgntInfo->dot11CurrentChannelNumber); - - FunctionOut(COMP_MLME); - - return TRUE; -} - - - -BOOLEAN -MgntActSet_802_11_RETRY_LIMIT( - PADAPTER Adapter, - u2Byte ShortRetryLimit, - u2Byte LongRetryLimit -) -{ - if( ShortRetryLimit != 0 ){ - //RTL8185_TODO: Set short retry limit - } - - if( LongRetryLimit != 0 ){ - //RTL8185_TODO: Set long retry limit - } - - RT_TRACE(COMP_INIT, DBG_SERIOUS,("TODO: Set short/long retry limit .\n") ); - - return TRUE; -} - -static BOOLEAN -MgntActSet_802_11_20MHZ_CHANNEL( - PADAPTER Adapter, - u1Byte channel -) -{ - -// Keep this function private: ----------------------------------------------------------------------------------------------- -// + If you want to switch channel in MAC common layer perspective, please use MgntActSet_802_11_CHANNEL_AND_BANDWIDTH(). -// + This can make sure which 20, 40, 80, 80+80, 160 channel you want to switch to -// ---------------------------------------------------------------------------------------------------------------------- - - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - RT_TRACE(COMP_MLME,DBG_LOUD,("====>MgntActSet_802_11_20MHZ_CHANNEL: %d\n", channel)); - - if(ACTING_AS_AP(Adapter) && pMgntInfo->bAutoSelChnl) - { // To prevent that UI set channel when bAutoSelChnl==TRUE. 2005.12.27, by rcnjko. - RT_TRACE(COMP_AP, DBG_LOUD, ("MgntActSet_802_11_20MHZ_CHANNEL(): reject to switch channel to %d under AP mode auto-channel selection process...\n",channel)); - } - - //Sherry added for dual band 20110517 - if(IS_DUAL_BAND_SUPPORT(Adapter)) - { - RT_CHNL_LIST_ENTRY ChnlListEntryArray[MAX_CHANNEL_NUM] = {0}; - u1Byte ChannelLen = 0, i = 0, firstLegalIndex = 0xFF; - - ChannelLen = RtGetDualBandChannel(Adapter, ChnlListEntryArray); - - if(ChannelLen == 0) - return FALSE; - - for(i = 0; i < ChannelLen; i ++) - { - if(ACTING_AS_AP(Adapter)) - { - if(!DFS_ApChnlLocked(Adapter, ChnlListEntryArray[i].ChannelNum)) - { - if(firstLegalIndex == 0xff){ - firstLegalIndex = i; - } - if(channel == ChnlListEntryArray[i].ChannelNum) - { - break; - } - } - } - else - { - if(firstLegalIndex == 0xff) - firstLegalIndex = 0; - if(channel == ChnlListEntryArray[i].ChannelNum) - { - break; - } - } - } - if(i == ChannelLen){ - // Prefast warning C6385: Reading invalid data from 'ChnlListEntryArray': the readable size is '760' bytes, but '5120' bytes may be read. - // false positive, disable it here -#pragma warning( disable: 6385 ) - channel = ChnlListEntryArray[firstLegalIndex].ChannelNum; - } - -#if 0 - if(channel <= 14) - { - if(IS_WIRELESS_MODE_5G(Adapter)) - pMgntInfo->dot11CurrentWirelessMode = WIRELESS_MODE_N_24G; - } - else - { - if(IS_WIRELESS_MODE_24G(Adapter)) - pMgntInfo->dot11CurrentWirelessMode = WIRELESS_MODE_N_5G; - } - - // Let Hardware WirelessMode Consistent --------------------------------------------------- - if(pHalData->CurrentWirelessMode != pMgntInfo->dot11CurrentWirelessMode) - { - Adapter->HalFunc.SetWirelessModeHandler(Adapter,pMgntInfo->dot11CurrentWirelessMode); - } - // ------------------------------------------------------------------------------------ - -#else - RT_TRACE_F(COMP_MLME,DBG_LOUD, ("ChangeWirelessModeHandler\n")); - HalChangeWirelessMode(Adapter,channel); - -// SetupWirelessMode(Adapter,channel); -#endif - - - } - else - { - channel = ToLegalChannel(Adapter, channel); - } - - - { // Update MAC Channel and Wireless Mode --------------------------------------------------- - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter != NULL) - { - pLoopAdapter->MgntInfo.dot11CurrentChannelNumber = channel; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pLoopAdapter->MgntInfo.dot11CurrentChannelNumber: %d\n", pLoopAdapter->MgntInfo.dot11CurrentChannelNumber)); - pLoopAdapter->MgntInfo.dot11CurrentWirelessMode = Adapter->MgntInfo.dot11CurrentWirelessMode; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - }// ---------------------------------------------------------------------------------- - - DFS_ApIfNeedMonitorChnl(Adapter); - - Mgnt_SwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber,1); - - return TRUE; -} - -// Use this interface to swith channel and bandwidth in MAC layer -------------- -VOID -MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - PADAPTER pAdapter, - u1Byte Primary20MhzChannel, - CHANNEL_WIDTH BandWidthMode, - EXTCHNL_OFFSET ExtChnlOffsetOf40MHz, - EXTCHNL_OFFSET ExtChnlOffsetOf80MHz, - u1Byte Secondary80MhzChannelCenterFrequency -) -{ - int i; - - FunctionIn(COMP_MLME); - - switch(BandWidthMode) - { - case CHANNEL_WIDTH_20: - RT_ASSERT(Primary20MhzChannel != 0, ("Wrong Primary20MhzChannel: %d\n", Primary20MhzChannel)); - break; - - case CHANNEL_WIDTH_40: - RT_ASSERT(Primary20MhzChannel != 0, ("Wrong Primary20MhzChannel: %d\n", Primary20MhzChannel)); - RT_ASSERT(ExtChnlOffsetOf40MHz == EXTCHNL_OFFSET_UPPER || ExtChnlOffsetOf40MHz == EXTCHNL_OFFSET_LOWER, ("Wrong ExtChnlOffsetOf40MHz: %d\n", ExtChnlOffsetOf40MHz)); - break; - - case CHANNEL_WIDTH_80: - RT_ASSERT(Primary20MhzChannel != 0, ("Wrong Primary20MhzChannel: %d\n", Primary20MhzChannel)); - RT_ASSERT(ExtChnlOffsetOf40MHz == EXTCHNL_OFFSET_UPPER || ExtChnlOffsetOf40MHz == EXTCHNL_OFFSET_LOWER, ("Wrong ExtChnlOffsetOf40MHz: %d\n", ExtChnlOffsetOf40MHz)); - RT_ASSERT(ExtChnlOffsetOf80MHz == EXTCHNL_OFFSET_UPPER || ExtChnlOffsetOf80MHz == EXTCHNL_OFFSET_LOWER, ("Wrong ExtChnlOffsetOf80MHz: %d\n", ExtChnlOffsetOf80MHz)); - break; - - case CHANNEL_WIDTH_160: - case CHANNEL_WIDTH_80_80: - RT_ASSERT(0, ("Currently No Use for BandwidthMode: %d\n", BandWidthMode)); - break; - - default: - RT_ASSERT(0, ("Wrong BandwidthMode: %d\n", BandWidthMode)); - break; - } - -//skip switch channel when channel is the same -//by sherry 20130117 - if(GetDefaultAdapter(pAdapter)->bInHctTest) - { - if(GET_HAL_DATA(pAdapter)->CurrentChannel == Primary20MhzChannel ) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("MgntActSet_802_11_CHANNEL_AND_BANDWIDTH: the channel is same return \n")); - return; - } - } - - // Switch to Primary 20Mhz Channel - //MgntActSet_802_11_20MHZ_CHANNEL(pAdapter, Primary20MhzChannel); - - // Currently do not consider VHT support: This should be extended for 802.11ac - CHNL_SetBwChnl(pAdapter, Primary20MhzChannel, BandWidthMode, ExtChnlOffsetOf40MHz); - - //wait for channel switch successful by sherry 20130117 - for(i = 0; i < 100; i++) - { - if(!RT_IsSwChnlAndBwInProgress(pAdapter) && !CHNL_SwChnlAndSetBwInProgress(pAdapter)) - break; - - RT_TRACE_F(COMP_MULTICHANNEL, DBG_LOUD, ("MgntActSet_802_11_CHANNEL_AND_BANDWIDTH:Delay 100 us Waiting for Switch Channel Complete!\n")); - delay_us(100); - } - - FunctionOut(COMP_MLME); -} -// ------------------------------------------------------------------- - - -BOOLEAN -MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH( - PADAPTER Adapter, - u1Byte channel -) -{ - PADAPTER pLoopAdapter = NULL; - BOOLEAN bSwitchOk = FALSE; - - bSwitchOk = MgntActSet_802_11_20MHZ_CHANNEL(Adapter, channel); - - if(bSwitchOk) - { // Update Reg MAC Channel -------------------------------------------------------------- - pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter != NULL) - { - pLoopAdapter->MgntInfo.Regdot11ChannelNumber = channel; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - }// ---------------------------------------------------------------------------------- - - return bSwitchOk; -} - -// Annie, 2004-12-27 -BOOLEAN -MgntActSet_802_11_CHANNELPLAN( - PADAPTER Adapter, - u2Byte ChannelPlan - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(pMgntInfo->bChnlPlanFromHW) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_CHANNELPLAN(): reject to set channel plan. (HW reject)\n")); - return FALSE; - } - - if(ChannelPlan >= RT_CHANNEL_DOMAIN_MAX) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_CHANNELPLAN(): not support this channel plan (%d > MAX: %d). (HW reject)\n", - ChannelPlan, RT_CHANNEL_DOMAIN_MAX)); - return FALSE; - } - pMgntInfo->ChannelPlan = (RT_CHANNEL_DOMAIN)ChannelPlan; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_CHANNELPLAN(): set channel plan (%d)\n", ChannelPlan)); - - return TRUE; -} - - -BOOLEAN -MgntActSet_802_11_PMKID( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN ULONG InformationBufferLength -) -{ - RT_TRACE( COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_PMKID(): Length=%d\n", InformationBufferLength) ); - RT_PRINT_DATA( COMP_SEC, DBG_TRACE, "OID Buffer", InformationBuffer, InformationBufferLength ); - - SecSetPMKID( Adapter, (PN5_802_11_PMKID)InformationBuffer ); - return TRUE; -} - - - -u4Byte -ComputeCrc( - IN pu1Byte Buffer, - IN u4Byte Length - ) -{ - u4Byte Crc, Carry; - u4Byte i, j; - u1Byte CurByte; - - Crc = 0xffffffff; - - for (i = 0; i < Length; i++) - { - CurByte = Buffer[i]; - for (j = 0; j < 8; j++) - { - Carry = ((Crc & 0x80000000) ? 1 : 0) ^ (CurByte & 0x01); - Crc <<= 1; - CurByte >>= 1; - if (Carry) - { - Crc = (Crc ^ 0x04c11db6) | Carry; - } - } - } - Crc = Crc & 0x0ff000000; // 95.05.04 Sid - return Crc; -} - - -VOID -GetMulticastBit( - IN u1Byte Address[6], - OUT u1Byte * Byte, - OUT u1Byte * Value - ) -{ - u4Byte Crc; - u4Byte BitNumber; - - Crc = ComputeCrc(Address, 6); - - // The bit number is now in the 6 most significant bits of CRC. - BitNumber = (u4Byte)((Crc >> 26) & 0x3f); - *Byte = (u1Byte)(BitNumber / 8); - *Value = (u1Byte)((u1Byte)1 << (BitNumber % 8)); -} - - -VOID -MgntActSet_802_3_MULTICAST_LIST( - PADAPTER Adapter, - pu1Byte MCListbuf, - u4Byte MCListlen, - BOOLEAN bAcceptAllMulticast -) -{ - u1Byte MCReg[8]; - u4Byte i; - u1Byte Byte; - u1Byte Bit; - u4Byte MCR[2]; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("MgntActSet_802_3_MULTICAST_LIST(): Length = %d, bAcceptAllMulticast = %d\n", MCListlen, bAcceptAllMulticast)); - - Adapter->MCAddrCount = MCListlen/6; - - if(Adapter->MCAddrCount > 0) - { - CopyMem( Adapter->MCList, MCListbuf, MCListlen); - } - else - { - PlatformZeroMemory(Adapter->MCList, (MAX_MCAST_LIST_NUM * ETHERNET_ADDRESS_LENGTH)); - } - - for( i=0; i<8; i++ ){ MCReg[i] = 0; } - - for( i=0; i < Adapter->MCAddrCount; i++ ) - { - RT_PRINT_ADDR(COMP_MLME | COMP_OID_SET, DBG_TRACE, "MgntActSet_802_3_MULTICAST_LIST: ", Adapter->MCList[i]); - if( i < MAX_MCAST_LIST_NUM ) - { - GetMulticastBit( Adapter->MCList[i], &Byte, &Bit ); - MCReg[Byte] |= Bit; - } - } - - if( ACTING_AS_AP(Adapter) || bAcceptAllMulticast ){ - MCR[0] = 0xffffffff; - MCR[1] = 0xffffffff; - } - else - { - MCR[0] = 0;MCR[1] = 0; - - for (i=0; i<4; i++) - { - MCR[0] = MCR[0] + ((MCReg[i])<<(8*i)); - } - for (i=4; i<8; i++) - { - MCR[1] = MCR[1] + ((MCReg[i])<<(8*(i-4))); - } - } - - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MULTICAST_REG, (pu1Byte)(&MCR[0]) ); - -} - - - -// -// Change current and default preamble mode. -// 2005.01.06, by rcnjko. -// -VOID -MgntActSet_802_11_PREAMBLE_MODE( - PADAPTER Adapter, - u1Byte PreambleMode -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - pMgntInfo->RegPreambleMode = PreambleMode; - pMgntInfo->dot11CurrentPreambleMode = PreambleMode; -} - - -// -// Change current and default preamble mode. -// 2005.01.06, by rcnjko. -// -BOOLEAN -MgntActSet_802_11_PowerSaveMode( - PADAPTER Adapter, - RT_PS_MODE rtPsMode -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - u1Byte FwPwrMode; - - // Currently, we do not change power save mode on IBSS mode. - if(pMgntInfo->mIbss) - return FALSE; - - if(pMgntInfo->dot11PowerSaveMode == rtPsMode) - return TRUE; - - // Update power save mode configured. - pMgntInfo->dot11PowerSaveMode = rtPsMode; - - // Determine ListenInterval. - if(pMgntInfo->dot11PowerSaveMode == eMaxPs) - { - pMgntInfo->ListenInterval = pMgntInfo->dot11DtimPeriod; - } - else - { - pMgntInfo->ListenInterval = 2; - } - - if(pMgntInfo->mPss != eAwake && rtPsMode == eActive) - PlatformSetTimer(Adapter, &(pMgntInfo->AwakeTimer), 0); - - if(!pPSC->bFwCtrlLPS) - { - // Awake immediately and notify the AP. - if(!pMgntInfo->bAwakePktSent && rtPsMode == eActive) - { - // Notify the AP we awke. - SendNullFunctionData(Adapter, pMgntInfo->Bssid, FALSE); - } - else if(rtPsMode != eActive) - { - // Notify the AP we are going to dozed. - SendNullFunctionData(Adapter, pMgntInfo->Bssid, TRUE); - } - } - - // - // 1. Enter PS mode - // Set RPWM to Fw to turn RF off and send H2C FwPwrMode cmd to set Fw into PS mode. - // 2. Leave PS mode - // Send H2C FwPwrMode cmd to Fw to set Fw into Active mode and set RPWM to turn RF on. - // By tynli. 2009.01.19. - if((pPSC->bFwCtrlLPS)) - { - if(pMgntInfo->dot11PowerSaveMode == eActive) - { - FwPwrMode = FW_PS_ACTIVE_MODE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_PWRMODE, (pu1Byte)(&FwPwrMode)); - } - else - { - if(GetFwLPS_Doze(Adapter)) - { - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_PWRMODE, (pu1Byte)(&pPSC->FWCtrlPSMode)); - } - else - { - // Reset the power save related parameters. - pMgntInfo->dot11PowerSaveMode = eActive; - } - } - } - - return TRUE; -} - - -// -// Change to either AP or STA mode. -// 2005.05.27, by rcnjko. -// -BOOLEAN -MgntActSet_ApMode( - PADAPTER Adapter, - BOOLEAN bApMode -) -{ - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if(bApMode) - { // AP mode. - - if(!ACTING_AS_AP(Adapter)) - { // Turn off IPS in AP mode for we shall always be active in this case, 070816, by rcnjko. - IPSDisable(Adapter,FALSE, IPS_DISABLE_DEF_OPMODE); - } - - pMgntInfo->bSwitchingAsApInProgress = TRUE; - MgntActSet_ApType(Adapter, TRUE); - - // We use SW encryption/decryption in this stage, - // and we should use HW encryption/decryption later. 2005.07.01, by rcnjko. - SecSetSwEncryptionDecryption(Adapter, FALSE, FALSE); - - AP_Reset(Adapter); - } - else - { // STA mode. - if(!ACTING_AS_AP(Adapter)){ - RT_TRACE(COMP_AP, DBG_LOUD, ("MgntActSet_ApMode(): Switch to STA. Do nothing since already in STA mode.\n")); - return TRUE; - } - - AP_DisassociateAllStation(Adapter, unspec_reason); - PlatformSleepUs(5000); - if(ACTING_AS_AP(Adapter)) - { // Restore original IPS setting, 070816, by rcnjko. - IPSReturn(Adapter, IPS_DISABLE_DEF_OPMODE); - } - -//sherry syn with 92C_92D 20110701 -//To indicate dissassociation in Vista/Win7 SoftAP Mode -//To let WZC show disconnect when change from AP to STA - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) //YJ,ADD,110504 - { - DrvIFIndicateDisassociation(Adapter, unspec_reason, pMgntInfo->Bssid); - } - - pMgntInfo->bSwitchingAsApInProgress = TRUE; - - MgntActSet_ApType(Adapter, FALSE); - - // - // 2012/01/17 CCW Add for fake soft ap & vwifi soft ap coexist mode. - // - PlatformZeroMemory(pMgntInfo->Bssid, 6); - - AP_Reset(Adapter); - - // I assume STA only using SW encryption/decryption. - SecSetSwEncryptionDecryption(Adapter, FALSE, FALSE); - } - - return TRUE; -} - -VOID -MgntActSet_802_11_DtimPeriod( - PADAPTER Adapter, - u1Byte u1DtimPeriod -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - pMgntInfo->Regdot11DtimPeriod = u1DtimPeriod; - pMgntInfo->dot11DtimPeriod = pMgntInfo->Regdot11DtimPeriod; -} - -// -// Update beacon interval. 2005.06.17, by rcnjko. -// -VOID -MgntActSet_802_11_BeaconInterval( - PADAPTER Adapter, - u2Byte u2BeaconPeriod -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if(u2BeaconPeriod != pMgntInfo->dot11BeaconPeriod) - { - pMgntInfo->Regdot11BeaconPeriod = u2BeaconPeriod; - pMgntInfo->dot11BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; - - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BEACON_INTERVAL, (pu1Byte)(&pMgntInfo->dot11BeaconPeriod) ); - } -} - - -// -// Send magic packet to each channel for WOL feature. -// Currently, we use the replace the probe request with magic packet to -// achive the feature, see ScanCallback(), ScanComplete() and PreTransmitTcb() for details. -// 2005.06.27, by rcnjko. -// -VOID -MgntActSet_802_11_ScanWithMagicPacket( - PADAPTER Adapter, - pu1Byte pDstAddr -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - pMgntInfo->bScanWithMagicPacket = TRUE; - PlatformMoveMemory(pMgntInfo->MagicPacketDstAddr, pDstAddr, 6); - - MgntActSet_802_11_BSSID_LIST_SCAN(Adapter); - - if(!pMgntInfo->bScanInProgress) - { - // Prevent the scan request failed, 2005.06.29, by rcnjko. - pMgntInfo->bScanWithMagicPacket = FALSE; - } -} - -VOID -MgntActSet_Passphrase( - PADAPTER Adapter, - POCTET_STRING posPassphrase - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PAUTH_GLOBAL_KEY_TAG pGlInfo = &(pMgntInfo->globalKeyInfo); - - RT_ASSERT( (posPassphrase->Length >= 8 && posPassphrase->Length <= 64), // Modify length from 1-61 to 8-63. Annie, 2005-11-21. - ("MgntActSet_Passphrase(): passphrase len: %d !!!", posPassphrase->Length)); // Modify length 63 to 64 for PMK 64-Hex mode - - if(ACTING_AS_AP(Adapter)) - { // AP mode. - - PlatformZeroMemory( pGlInfo->Passphrase, PASSPHRASE_LEN ); - if(posPassphrase->Length >= 8 && posPassphrase->Length <= 63) // Modify length from 1-61 to 8-63. Annie, 2005-11-21. - { - PlatformMoveMemory( pGlInfo->Passphrase, posPassphrase->Octet, posPassphrase->Length ); - pGlInfo->PassphraseLen = (u1Byte)posPassphrase->Length; - } - else - { - pGlInfo->PassphraseLen = 0; - } - - // - // Add for AP mode support PMK 64-Hex mode !! - // - if( posPassphrase->Length == 64 ) - { - // 1. Save PMK data for 32 byte - PlatformMoveMemory( pGlInfo->Passphrase, posPassphrase->Octet , 32 ); - // 2. Set PMK data - PlatformMoveMemory( pGlInfo->PMK , pGlInfo->Passphrase , 32 ); - // 3. Set PassphraseLen to 64 ... Point to 64-Hex mode !! - pGlInfo->PassphraseLen = 64; - } - -} -} - - - - -BOOLEAN -MgntActSet_ExcludedMacAddressList( - PADAPTER Adapter, - pu1Byte pMacAddrList, - u4Byte NumMacAddrList - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if (NumMacAddrList > MAX_EXCLUDED_MAC_ADDRESS_LIST) - { - return FALSE; - } - - PlatformMoveMemory( - pMgntInfo->ExcludedMacAddr, - pMacAddrList, - NumMacAddrList*6); - pMgntInfo->ExcludedMacAddrListLength = NumMacAddrList; - - return TRUE; -} - -VOID -Mgnt_SetLedForRfState( - IN PADAPTER Adapter, - IN RT_RF_POWER_STATE StateToSet, - IN RT_RF_CHANGE_SOURCE ChangeSource - ) -{ -} - -VOID -MgntReturnTxResource( - IN PADAPTER Adapter - ) -{ - -} - -// -// Description: -// Chang RF Power State. -// Note that, only MgntActSet_RF_State() is allowed to set HW_VAR_RF_STATE. -// -// Assumption: -// PASSIVE LEVEL. -// -BOOLEAN -MgntActSet_RF_State( - IN PADAPTER Adapter, - IN RT_RF_POWER_STATE StateToSet, - IN RT_RF_CHANGE_SOURCE ChangeSource, - IN BOOLEAN ProtectOrNot - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN bActionAllowed = FALSE; - BOOLEAN bConnectBySSID = FALSE; - RT_RF_POWER_STATE rtState; - u2Byte RFWaitCounter = 0; - PADAPTER tempAdapter = NULL; - BOOLEAN bHwOrSwRfChange=FALSE; - - RT_TRACE(COMP_RF, DBG_LOUD, ("====>MgntActSet_RF_State(): StateToSet(%d)\n",StateToSet)); - - if(ChangeSource >= RF_CHANGE_BY_HW) - { - bHwOrSwRfChange = TRUE; - } - - //1// - //1//<1>Prevent the race condition of RF state change. - //1// - // Only one thread can change the RF state at one time, and others should wait to be executed. By Bruce, 2007-11-28. - - if(!ProtectOrNot) - { - - while(TRUE) - { - PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - if(pMgntInfo->RFChangeInProgress) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntActSet_RF_State(): RF Change in progress! Wait to set..StateToSet(%d).\n", StateToSet)); - // Set RF after the previous action is done. - while(pMgntInfo->RFChangeInProgress) - { - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - RFWaitCounter ++; - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntActSet_RF_State(): Wait 1 ms (%d times)...\n", RFWaitCounter)); - - PlatformStallExecution(1000); // 1 ms - // Wait too long, return FALSE to avoid to be stuck here. - if(RFWaitCounter > 100) - { - RT_ASSERT(FALSE, ("MgntActSet_RF_State(): Wait too long to set RF\n")); - // TODO: Reset RF state? - return FALSE; - } - PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - } - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - } - else - { - pMgntInfo->RFChangeInProgress = TRUE; - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - break; - } - } - } - - if(Adapter->bDriverStopped || Adapter->bDriverIsGoingToPnpSetPowerSleep) - { - - if(!ProtectOrNot) - { - PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - pMgntInfo->RFChangeInProgress = FALSE; - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - } - return FALSE; - } - - Mgnt_SetLedForRfState(Adapter, StateToSet, ChangeSource); - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - - - switch(StateToSet) - { - case eRfOn: - // - // Turn On RF no matter the IPS setting because we need to update the RF state to Ndis under Vista, or - // the Windows does not allow the driver to perform site survey any more. By Bruce, 2007-10-02. - // - - pMgntInfo->RfOffReason &= (~ChangeSource); - - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntActSet_RF_State - eRfon RfOffReason= 0x%x, ChangeSource=0x%X\n", pMgntInfo->RfOffReason, ChangeSource)); - if(! pMgntInfo->RfOffReason) - { - pMgntInfo->RfOffReason = 0; - - if(rtState != eRfOn) - { - bActionAllowed = TRUE; - - Adapter->pPortCommonInfo->WdiData.bRFOffSwitchProgress = TRUE; - } - - if(rtState == eRfOff && ChangeSource >=RF_CHANGE_BY_HW && !Adapter->bInHctTest) - { - bConnectBySSID = TRUE; - } - } - else - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntActSet_RF_State - eRfon reject pMgntInfo->RfOffReason= 0x%x, ChangeSource=0x%X\n", pMgntInfo->RfOffReason, ChangeSource)); - - break; - - case eRfOff: - //Move the following assignment to later in order to carry out - //Let HW Radio off has little time - //by sherry 20091225 - - Adapter->pPortCommonInfo->WdiData.bRFOffSwitchProgress = TRUE; - - //pMgntInfo->RfOffReason |= ChangeSource; - //bActionAllowed = TRUE; - tempAdapter = GetDefaultAdapter(Adapter); - - while(tempAdapter !=NULL) - { - if(!ACTING_AS_AP(tempAdapter)) // 070125, rcnjko: we always keep connected in AP mode. - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_RF_State - is not AP mode.\n")); - //Porting from 8xb, by Maddest 20090921 - if ( (ChangeSource> RF_CHANGE_BY_PS) && - !(pMgntInfo->RfOffReason & (RF_CHANGE_BY_SW|RF_CHANGE_BY_HW)) ) - { - if((pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - && !(GET_TDLS_WIFITESTBED_RADIO_OFF(pMgntInfo)) - ) - { - - MgntDisconnect(tempAdapter, disas_lv_ss); - //for Win 7 it must indicate Roaming_Start and set Roaming state - //By doing this, OS does not set RESET_REQUEST within 10 seconds which may - //interrupt auto-connect mechanism activated by driver - //by sherry, 20091225 - //MgntLinkStatusSetRoamingState(tempAdapter, 0, RT_ROAMING_BY_DEAUTH, ROAMINGSTATE_SCANNING); - //DrvIFIndicateRoamingStart(tempAdapter); - } - - // Clear content of bssDesc[] and bssDesc4Query[] to avoid reporting old bss to UI. - // 2007.05.28, by shien chang. - //PlatformZeroMemory( pMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC ); - pMgntInfo->NumBssDesc = 0; - pMgntInfo->NumBssDesc4Query = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: MgntActSet_RF_State(), clear NumBssDesc4Query\n")); - - } - - pMgntInfo->RfOffReason |= ChangeSource; - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_RF_State - Disassociate all peers.\n")); - pMgntInfo->RfOffReason |= ChangeSource; - AP_DisassociateAllStation(tempAdapter, unspec_reason); - MgntIndicateMediaStatus( tempAdapter, RT_MEDIA_DISCONNECT, FORCE_INDICATE ); - } - - tempAdapter = GetNextExtAdapter(tempAdapter); - } - bActionAllowed = TRUE; - break; - - case eRfSleep: - pMgntInfo->RfOffReason |= ChangeSource; - bActionAllowed = TRUE; - - Adapter->pPortCommonInfo->WdiData.bRFOffSwitchProgress = TRUE; - break; - - default: - break; - } - - - // - // We should update RfOffReason for each port to keep consistency on multi-port architecture. - // 2013.09.04. - // - tempAdapter = GetDefaultAdapter(Adapter); - while(tempAdapter !=NULL){ - tempAdapter->MgntInfo.RfOffReason = pMgntInfo->RfOffReason; - tempAdapter = GetNextExtAdapter(tempAdapter); - } - - if(bActionAllowed) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("MgntActSet_RF_State(): Action is allowed.... StateToSet(%d), RfOffReason(%#X)\n", StateToSet, pMgntInfo->RfOffReason)); - - // We should leave device power state D2 prior to the following pipe configurations, added by Roger, 2010.03.30. - if((StateToSet == eRfOn) && (rtState ==eRfOff)) - { - Adapter->HalFunc.HalEnableTxHandler(Adapter); - Adapter->HalFunc.HalEnableRxHandler(Adapter); - Adapter->HalFunc.HalLeaveSSHandler(Adapter); - } - - // Config HW to the specified mode. - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&StateToSet)); - - // - // Background : - // When RF is turned to OFF by HW/SW, sometimes due to too much low rate retry packets in tx FIFO or - // a lot of RTS packets(no CTS rsp), it will spend a lot of time to tx all packets in Tx FIFO. - // Currently, after RF is turned off, there are possibility that HW FIFO not tx all the packets and then it's power is - // turned to OFF, these packets are just gone. - // We must handle this here to return all the tx packets to upper layer windows to avoid BSOD 0x9f or some strange condition. - // Solution: The following, when RF is turned off by HW/SW, we will return all the packets back to OS. - // - if(StateToSet == eRfOff && rtState == eRfOn && bHwOrSwRfChange) - { - // If RF is from Hw/Sw ON => OFF - MgntReturnTxResource(Adapter); - } - - // Turn on RF. - if(StateToSet == eRfOn) - { - if(rtState ==eRfOff) - { - Adapter->HalFunc.HalEnableTxHandler(Adapter); - Adapter->HalFunc.HalEnableRxHandler(Adapter); - - DrvIFIndicateCurrentPhyStatus(Adapter); - } - } - // Turn off RF. - else if(StateToSet == eRfOff) - { - Adapter->HalFunc.HalDisableRxHandler(Adapter); - Adapter->HalFunc.HalDisableTxHandler(Adapter); - - // - // If RF OFF control is set by this routine, which means the power state - // our device currently in D0. So we shedule Idle IRP request immediately. 2009.07.03. - // - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntActSet_RF_State(): Turn off RF!!\n")); - Adapter->HalFunc.HalEnterSSHandler(Adapter); - - // Prefast warning C28182 : Dereferencing NULL pointer. '((Adapter))->pPortCommonInfo->pDefaultAdapter' contains the same NULL value as 'tempAdapter' did. - if(((Adapter))->pPortCommonInfo->pDefaultAdapter != NULL) - CustomScan_TermReq(GET_CUSTOM_SCAN_INFO(Adapter), FALSE); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Terminate scan because of radio off\n")); - - if(pMgntInfo->RfOffReason > RF_CHANGE_BY_PS) - DrvIFIndicateCurrentPhyStatus(Adapter); - } - - Adapter->pPortCommonInfo->WdiData.bRFOffSwitchProgress = FALSE; - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("MgntActSet_RF_State(): Action is rejected.... StateToSet(%d), ChangeSource(%#X), RfOffReason(%#X)\n", StateToSet, ChangeSource, pMgntInfo->RfOffReason)); - } - - // Release RF spinlock - if(!ProtectOrNot) - { - PlatformAcquireSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - pMgntInfo->RFChangeInProgress = FALSE; - PlatformReleaseSpinLock(Adapter, RT_RF_STATE_SPINLOCK); - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("MgntActSet_RF_State() <====\n")); - return bActionAllowed; -} - -// -// Description: -// Update current transmit power level. -// TxPowerLevel Setting -// 0 => Default 1 => 100% 2 => 75% 3 => 50% 4 => 25% -// By Marsyang, 2008-02-04. -// -VOID -MgntActSet_TX_POWER_LEVEL( - PADAPTER Adapter, - int TxPowerLevel - ) -{ - s4Byte minPowerDBM = 0; - s4Byte maxPowerDBM = 0; - s4Byte PowerAmount =0; - - if(TxPowerLevel == 0) - { - return; - } - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_MIN_TX_POWER_DBM, (pu1Byte)&minPowerDBM); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_MAX_TX_POWER_DBM, (pu1Byte)&maxPowerDBM); - - RT_TRACE(COMP_RM, DBG_LOUD, ("MgntActSet_TX_POWER_LEVEL(): Power Range from Max TX Power Dbm(%d) To Min Dbm(%d)\n",maxPowerDBM,minPowerDBM )); - PowerAmount = ((maxPowerDBM - minPowerDBM)/6)*(TxPowerLevel+1); - - MgntActSet_TX_POWER_DBM(Adapter,(maxPowerDBM-PowerAmount)); - RT_TRACE(COMP_RM, DBG_LOUD, ("MgntActSet_TX_POWER_LEVEL(): Set TX Power(TX Power Level: %d) to Dbm(%d)\n",TxPowerLevel,(maxPowerDBM-PowerAmount))); - -} - -// -// Description: -// Update current transmit power level in dBm. -// By Bruce, 2008-02-04. -// -BOOLEAN -MgntActSet_TX_POWER_DBM( - PADAPTER Adapter, - s4Byte powerInDbm - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - PlatformAcquireSpinLock(Adapter, RT_RM_SPINLOCK); - if( !pMgntInfo->bUpdateTxPowerInProgress ) - { - RT_TRACE(COMP_RM, DBG_LOUD, ("MgntActSet_TX_POWER_DBM(): powerInDbm(%d)\n", powerInDbm)); - - pMgntInfo->bUpdateTxPowerInProgress = TRUE; - pMgntInfo->PowerToUpdateInDbm = powerInDbm; - PlatformReleaseSpinLock(Adapter, RT_RM_SPINLOCK); - - PlatformScheduleWorkItem(&(pMgntInfo->UpdateTxPowerWorkItem)); - - return TRUE; - } - else - { - RT_TRACE(COMP_RM, DBG_LOUD, ("MgntActSet_TX_POWER_DBM(): powerInDbm(%d), UpdateTxPowerWorkItem is in progress!!!\n", powerInDbm)); - - PlatformReleaseSpinLock(Adapter, RT_RM_SPINLOCK); - - return FALSE; - } -} - -// -// Description: -// callback function of UpdateTxPowerWorkItem. -// By Bruce, 2008-02-04. -// -VOID -UpdateTxPowerDbmWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - if(pAdapter->bDriverStopped) - return; - - pAdapter->HalFunc.UpdateTxPowerDbmHandler(pAdapter, pMgntInfo->PowerToUpdateInDbm); - - PlatformAcquireSpinLock(pAdapter, RT_RM_SPINLOCK); - pMgntInfo->bUpdateTxPowerInProgress = FALSE; - PlatformReleaseSpinLock(pAdapter, RT_RM_SPINLOCK); -} - -// -// Description: -// Change additioinal beacon IE. -// -RT_STATUS -MgntActSet_AdditionalBeaconIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - RT_STATUS Status = RT_STATUS_SUCCESS; - PVOID newBeaconIeData = NULL; - u4Byte newBeaconIeSize = 0; - - do - { - // - // allocate memory for the new IE data and copy the IEs - // - if (AdditionalIEBufLen > 0) - { - Status = PlatformAllocateMemory(pAdapter, - &newBeaconIeData, - AdditionalIEBufLen); - if (Status != RT_STATUS_SUCCESS) - { - break; - } - - PlatformMoveMemory(newBeaconIeData, - pAdditionalIEBuf, - AdditionalIEBufLen); - newBeaconIeSize = AdditionalIEBufLen; - } - else - {// the IE is cleared. - } - - - // - // free the old IEs - // - if (pMgntInfo->AdditionalBeaconIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalBeaconIEData, pMgntInfo->AdditionalBeaconIESize); - pMgntInfo->AdditionalBeaconIEData = NULL; - pMgntInfo->AdditionalBeaconIESize = 0; - } - - // - // cache new IEs. - // Note that if AdditionalIEBufLen == 0, pMgntInfo->AdditionalBeaconIEData is cleared. - // - pMgntInfo->AdditionalBeaconIEData = newBeaconIeData; - pMgntInfo->AdditionalBeaconIESize = (u2Byte)newBeaconIeSize; - newBeaconIeData = NULL; - } while(FALSE); - - return Status; -} - - -//merge from branch 1021 for WHCK Scan_AddtionalIE -RT_STATUS -MgntActSet_AdditionalProbeReqIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - RT_STATUS Status = RT_STATUS_SUCCESS; - PVOID newIeData = NULL; - u4Byte newIeSize = 0; - - do - { - // - // allocate memory for the new IE data and copy the IEs - // - if (AdditionalIEBufLen > 0) - { - Status = PlatformAllocateMemory(pAdapter, - &newIeData, - AdditionalIEBufLen); - if (Status != RT_STATUS_SUCCESS) - { - break; - } - - PlatformMoveMemory(newIeData, - pAdditionalIEBuf, - AdditionalIEBufLen); - newIeSize = AdditionalIEBufLen; - } - else - {// the IE is cleared. - } - - - // - // free the old IEs - // - if (pMgntInfo->AdditionalProbeReqIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalProbeReqIEData, pMgntInfo->AdditionalProbeReqIESize); - pMgntInfo->AdditionalProbeReqIEData = NULL; - pMgntInfo->AdditionalProbeReqIESize = 0; - } - - // - // cache new IEs. - // Note that if AdditionalIEBufLen == 0, pMgntInfo->AdditionalBeaconIEData is cleared. - // - pMgntInfo->AdditionalProbeReqIEData = newIeData; - pMgntInfo->AdditionalProbeReqIESize = (u2Byte)newIeSize; - newIeData = NULL; - } while(FALSE); - - return Status; -} - - - -// -// Description: -// Change additioinal probe rsp IE. -// -RT_STATUS -MgntActSet_AdditionalProbeRspIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - RT_STATUS Status = RT_STATUS_SUCCESS; - PVOID newProbeRspIeData = NULL; - u4Byte newProbeRspIeSize = 0; - - do - { - // - // allocate memory for the new IE data and copy the IEs - // - if (AdditionalIEBufLen > 0) - { - Status = PlatformAllocateMemory(pAdapter, - &newProbeRspIeData, - AdditionalIEBufLen); - if (Status != RT_STATUS_SUCCESS) - { - break; - } - - PlatformMoveMemory(newProbeRspIeData, - pAdditionalIEBuf, - AdditionalIEBufLen); - newProbeRspIeSize = AdditionalIEBufLen; - } - else - {// the IE is cleared. - } - - - // - // free the old IEs - // - if (pMgntInfo->AdditionalResponseIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalResponseIEData, pMgntInfo->AdditionalResponseIESize); - pMgntInfo->AdditionalResponseIEData = NULL; - pMgntInfo->AdditionalResponseIESize = 0; - } - - // - // cache new IEs - // - pMgntInfo->AdditionalResponseIEData = newProbeRspIeData; - pMgntInfo->AdditionalResponseIESize = (u2Byte)newProbeRspIeSize; - newProbeRspIeData = NULL; - } while(FALSE); - - return Status; -} - -RT_STATUS -MgntActSet_AdditionalAssocReqIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - RT_STATUS Status = RT_STATUS_SUCCESS; - PVOID newIeData = NULL; - u4Byte newIeSize = 0; - - do - { - // - // allocate memory for the new IE data and copy the IEs - // - if (AdditionalIEBufLen > 0) - { - Status = PlatformAllocateMemory(pAdapter, - &newIeData, - AdditionalIEBufLen); - if (Status != RT_STATUS_SUCCESS) - { - break; - } - - PlatformMoveMemory(newIeData, - pAdditionalIEBuf, - AdditionalIEBufLen); - newIeSize = AdditionalIEBufLen; - } - else - {// the IE is cleared. - } - - - // - // free the old IEs - // - if (pMgntInfo->AdditionalAssocReqIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalAssocReqIEData, pMgntInfo->AdditionalAssocReqIESize); - pMgntInfo->AdditionalAssocReqIEData = NULL; - pMgntInfo->AdditionalAssocReqIESize = 0; - } - - // - // cache new IEs. - // Note that if AdditionalIEBufLen == 0, pMgntInfo->AdditionalBeaconIEData is cleared. - // - pMgntInfo->AdditionalAssocReqIEData = newIeData; - pMgntInfo->AdditionalAssocReqIESize = (u2Byte)newIeSize; - newIeData = NULL; - } while(FALSE); - - return Status; -} - -RT_NDIS_VERSION -MgntTranslateNdisVersionToRtNdisVersion( - IN UINT NdisVersion - ) -{ - RT_NDIS_VERSION ret = RT_NDIS_VERSION_NONE_NDIS; - - if(NdisVersion == 0) - { - ret = RT_NDIS_VERSION_NONE_NDIS; - } - else if(NdisVersion <= NDIS_VERSION_BASE_5_0) - { - ret = RT_NDIS_VERSION_5_0; - } - else if(NdisVersion <= NDIS_VERSION_BASE_5_2) - { - ret = RT_NDIS_VERSION_5_1; - } - else if(NdisVersion <= NDIS_VERSION_BASE_6_0) - { - ret = RT_NDIS_VERSION_6_0; - } - else if(NdisVersion <= NDIS_VERSION_BASE_6_1) - { - ret = RT_NDIS_VERSION_6_1; - } - else if(NdisVersion <= NDIS_VERSION_BASE_6_20) - { - ret = RT_NDIS_VERSION_6_20; - } - else if(NdisVersion <= NDIS_VERSION_BASE_6_30) - { - ret = RT_NDIS_VERSION_6_30; - } - else if(NdisVersion <= NDIS_VERSION_BASE_6_40) - { - ret = RT_NDIS_VERSION_6_40; - } - else if(NdisVersion <= NDIS_VERSION_BASE_6_50) - { - ret = RT_NDIS_VERSION_6_50; - } - else - {// should not get here - - RT_ASSERT(0, ("Wrong NdisVersion: 0x%X\n", NdisVersion)); - - ret = RT_NDIS_VERSION_NONE_NDIS; - } - - RT_TRACE(COMP_INIT, DBG_LOUD, - ("MgntTranslateNdisVersionToRtNdisVersion(): %X => %X\n", NdisVersion, ret)); - - return ret; -} - - - -VOID -MgntActSet_ApType( - IN PADAPTER pAdapter, - IN BOOLEAN mActingAsAp - ) -{ - if(mActingAsAp) - { - pAdapter->MgntInfo.ApType = AP_DetermineApType(pAdapter); - } - else - { - pAdapter->MgntInfo.ApType = RT_AP_TYPE_NONE; - } - RT_TRACE(COMP_AP, DBG_LOUD, ("MgntActSet_ApType(): %u\n", pAdapter->MgntInfo.ApType)); -} - -// -// Description: -// Set WMM enable or disable. -// Argument: -// Adapter - -// NIC adapter context pointer. -// bWMMEnable - -// Enable(True) or Disable(FALSE) WMM. -// By Bruce, 2008-05-28. -// -VOID -MgntActSet_802_11_WMM_MODE( - IN PADAPTER Adapter, - IN BOOLEAN bWMMEnable - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING tmpSsid; - u1Byte tmpSsidBuf[32]; - RT_JOIN_ACTION join_action; - BOOLEAN bReconnect = FALSE; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("MgntActSet_802_11_WMM_MODE(): WMM is %s\n", (bWMMEnable ? "Enabled" : "Disabled"))); - - // Backup SSID. - tmpSsid.Octet = tmpSsidBuf; - tmpSsid.Length = sizeof(tmpSsidBuf); - CopySsid(tmpSsid.Octet, tmpSsid.Length, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - - if(pMgntInfo->bMediaConnect && pMgntInfo->mAssoc && !ACTING_AS_AP(Adapter)) - bReconnect = TRUE; - - // Disconnect before change WMM capability. 2007.01.15, by shien chang. - MgntActSet_802_11_DISASSOCIATE(Adapter, disas_lv_ss); - - // Restore SSID. - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, tmpSsid.Octet, tmpSsid.Length); - - if (bWMMEnable) - { - pMgntInfo->pStaQos->QosCapability |= QOS_WMM; - } - else - { - pMgntInfo->pStaQos->QosCapability &= ~QOS_WMM; - } - - if (ACTING_AS_AP(Adapter)) - { - AP_Reset(Adapter); - } - else if(bReconnect) - { - PRT_WLAN_BSS pRtBss; - - if(PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - return; - - join_action = SelectNetworkBySSID(Adapter, &pMgntInfo->Ssid, FALSE, pRtBss); - JoinRequest(Adapter, join_action, pRtBss); - - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - } -} - -// -// Description: -// Set WMM UPSD. -// Argument: -// Adapter - -// NIC adapter context pointer. -// WMM_UAPSD - -// Enable / Disable UPSD for each queue. -// By Bruce, 2008-05-28. -// -VOID -MgntActSet_802_11_WMM_UAPSD( - IN PADAPTER Adapter, - IN AC_UAPSD WMM_UAPSD - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING tmpSsid; - u1Byte tmpSsidBuf[32]; - RT_JOIN_ACTION join_action; - BOOLEAN bReconnect = FALSE; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("MgntActSet_802_11_WMM_UAPSD(): UPSD is %X\n", WMM_UAPSD)); - - // Backup SSID. - tmpSsid.Octet = tmpSsidBuf; - tmpSsid.Length = sizeof(tmpSsidBuf); - CopySsid(tmpSsid.Octet, tmpSsid.Length, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - - if(pMgntInfo->bMediaConnect && pMgntInfo->mAssoc && !ACTING_AS_AP(Adapter)) - bReconnect = TRUE; - - // Disconnect before change WMM capability. 2007.01.15, by shien chang. - MgntDisconnect(Adapter, disas_lv_ss); - - // Restore SSID. - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, tmpSsid.Octet, tmpSsid.Length); - - pMgntInfo->pStaQos->b4ac_Uapsd = WMM_UAPSD & 0x0F; - if(pMgntInfo->pStaQos->b4ac_Uapsd & 0x0F) - { - pMgntInfo->pStaQos->QosCapability |= QOS_WMM_UAPSD; - } - else - { - pMgntInfo->pStaQos->QosCapability &= ~QOS_WMM_UAPSD; - } - - // Use MSB 4 BIT for MaxSPLength - pMgntInfo->pStaQos->MaxSPLength = WMM_UAPSD>>4; - - if(bReconnect) - { - PRT_WLAN_BSS pRtBss; - - if(PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - return; - - join_action = SelectNetworkBySSID(Adapter, &pMgntInfo->Ssid, FALSE, pRtBss); - JoinRequest(Adapter, join_action, pRtBss); - - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - } -} - -BOOLEAN -MgntActSet_802_11_CustomizedAsocIE( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u1Byte InformationBufferLength - ) -{ -#if (WPS_SUPPORT == 1) - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte AsocIeLength = *((pu2Byte)(InformationBuffer)); - - // - // Minimum IE length should be larger than zero, - // Maximum IE length should be less/equal than 0xFF + IE ID + length (0xFF + 2) - // - - pMgntInfo->bCustomizedAsocIE = FALSE; - - if(AsocIeLength > 0 && AsocIeLength <= (MAX_IE_LEN+2)) - { - - pMgntInfo->bCustomizedAsocIE = TRUE; - pMgntInfo->CustomizedAsocIELength = AsocIeLength; - PlatformZeroMemory(pMgntInfo->CustomizedAsocIEBuf, sizeof(pMgntInfo->CustomizedAsocIEBuf)); - PlatformMoveMemory(pMgntInfo->CustomizedAsocIEBuf, (pu1Byte)InformationBuffer+2, pMgntInfo->CustomizedAsocIELength); - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_CustomizedAsocIE(): length = %d\n", pMgntInfo->CustomizedAsocIELength)); - RT_PRINT_DATA(COMP_MLME, DBG_TRACE, ("MgntActSet_802_11_CustomizedAsocIE():"), pMgntInfo->CustomizedAsocIEBuf, pMgntInfo->CustomizedAsocIELength); - - return TRUE; - } -#endif - return FALSE; -} - - -BOOLEAN -MgntActSet_802_11_Sigma_Capability( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u1Byte InformationBufferLength - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - HT_CAP_OP_CODE capability = (HT_CAP_OP_CODE)(*((pu1Byte)InformationBuffer)); - u4Byte neededLen = 1; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - if(InformationBufferLength < neededLen) - goto end; - - - switch(capability) - { - case HT_CAP_OP_40_INTOLERANT: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pHTInfo->b40Intolerant = (BOOLEAN)(*((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set 40 intolerant = %d\n", pHTInfo->b40Intolerant)); - } - break; - - case HT_CAP_OP_AMPDU: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pHTInfo->bAMPDUManual = (BOOLEAN)(*((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set AMPDU (manual) = %d\n", pHTInfo->bAMPDUManual)); - } - break; - - case HT_CAP_OP_STBC: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set HT_CAP_OP_STBC\n")); - if(RT_STATUS_SUCCESS != - (rtStatus = MgntActSet_802_11_STBC_MODE(Adapter, ((pu1Byte)InformationBuffer+1), InformationBufferLength - 1))) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] MgntActSet_802_11_STBC_MODE failed = %d\n", rtStatus)); - return FALSE; - } - } - break; - - case HT_CAP_OP_WIDTH: - { - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - if((CHANNEL_WIDTH)(*((pu1Byte)InformationBuffer+1)) == CHANNEL_WIDTH_20) - pChnlInfo->RegBWSetting = CHANNEL_WIDTH_20; - else if((CHANNEL_WIDTH)(*((pu1Byte)InformationBuffer+1)) == CHANNEL_WIDTH_40) - pChnlInfo->RegBWSetting = CHANNEL_WIDTH_40; - else if((CHANNEL_WIDTH)(*((pu1Byte)InformationBuffer+1)) == CHANNEL_WIDTH_80) - pChnlInfo->RegBWSetting = CHANNEL_WIDTH_80; - - RT_TRACE(COMP_HT, DBG_LOUD, ("Set Width = %s\n", (pChnlInfo->RegBWSetting==2)?"80MHz":(pChnlInfo->RegBWSetting==1)?"40MHz":"20MHz")); - } - break; - - case HT_CAP_OP_SEND_ADDBA: - { - PTX_TS_RECORD pTxTs = NULL; - u1Byte tid = (*((pu1Byte)InformationBuffer+1)); - - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - if(GetTs(Adapter, (PTS_COMMON_INFO*)(&pTxTs), pMgntInfo->Bssid, tid, TX_DIR, TRUE)) - { - TsStartAddBaProcess(Adapter, pTxTs); - RT_TRACE(COMP_HT, DBG_LOUD, ("Send addba request to associated AP with TID(%d)\n", tid)); - } - else - RT_TRACE(COMP_HT, DBG_LOUD, ("Fail to setup ts with TID(%d)\n", tid)); - } - break; - - case HT_CAP_OP_NOACK: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pMgntInfo->pStaQos->AcNoAck = (*(PAC_NOACK)((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set NoAckPolicy = %x\n", pMgntInfo->pStaQos->AcNoAck)); - } - break; - - case HT_CAP_OP_VHT_TXSP_STREAM: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pVHTInfo->nTxSPStream = (*((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set VHT TxSPStream = %d\n", pVHTInfo->nTxSPStream)); - } - break; - - case HT_CAP_OP_VHT_RXSP_STREAM: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pVHTInfo->nRxSPStream = (*((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set VHT RxSPStream = %d\n", pVHTInfo->nRxSPStream)); - } - break; - - case HT_CAP_OP_HT_TXSP_STREAM: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pHTInfo->nTxSPStream = (*((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set TxSPStream = %d\n", pHTInfo->nTxSPStream)); - } - break; - - case HT_CAP_OP_HT_RXSP_STREAM: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - pHTInfo->nRxSPStream = (*((pu1Byte)InformationBuffer+1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set RxSPStream = %d\n", pHTInfo->nRxSPStream)); - } - break; - - case HT_CAP_OP_OPMODE_NOTIF: - { - neededLen += 2; - if(InformationBufferLength < neededLen) - goto end; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set HT_CAP_OP_OPMODE_NOTIF\n")); - pVHTInfo->BWToSwitch = (CHANNEL_WIDTH)(*((pu1Byte)InformationBuffer+1)); - - DbgPrint("set value = %d\n", pVHTInfo->BWToSwitch); - - pVHTInfo->RxSSToSwitch = (*((pu1Byte)InformationBuffer+2)); - VHTSendOperatingModeNotification(Adapter, pMgntInfo->Bssid); - CHNL_SetBwChnl( Adapter, - pMgntInfo->dot11CurrentChannelNumber, - pVHTInfo->BWToSwitch, - pMgntInfo->pChannelInfo->Ext20MHzChnlOffsetOf40MHz); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set Bw to %d\n", pVHTInfo->BWToSwitch)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set RxSS to %d\n", pVHTInfo->RxSSToSwitch)); - } - break; - - case HT_CAP_OP_OPT_MD_NOTIF_IE: - { - neededLen += 2; - if(InformationBufferLength < neededLen) - goto end; - - pVHTInfo->RxSSToSwitch = (*((pu1Byte)InformationBuffer+1)); - if(pVHTInfo->RxSSToSwitch == 0) - { - pVHTInfo->bOpModeNotif = FALSE; - } - else - { - pVHTInfo->bOpModeNotif = TRUE; - pVHTInfo->BWToSwitch = (CHANNEL_WIDTH)(*((pu1Byte)InformationBuffer+2)); - - DbgPrint("set value = %d 222\n", pVHTInfo->BWToSwitch); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set RxSS to %d at asoc\n", pVHTInfo->RxSSToSwitch)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set Bw to %d at asoc\n", pVHTInfo->BWToSwitch)); - } - } - break; - - case HT_CAP_OP_TXBF: - case HT_CAP_OP_BEAMFORMING_CAP: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set HT_CAP_OP_BEAMFORMING_CAP\n")); - if(RT_STATUS_SUCCESS != - (rtStatus = MgntActSet_802_11_Beamforming_MODE(Adapter, ((pu1Byte)InformationBuffer+1), InformationBufferLength - 1))) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] MgntActSet_802_11_Beamforming_MODE failed = %d\n", rtStatus)); - return FALSE; - } - } - break; - - case HT_CAP_OP_SGI80: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - pVHTInfo->bRegShortGI80MHz = (BOOLEAN)(*((pu1Byte)InformationBuffer + 1)); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set HT_CAP_OP_SGI80 = %d\n", pVHTInfo->bRegShortGI80MHz)); - } - break; - - break; - - case HT_CAP_OP_BW_SIGNALING_CTRL: - { - u1Byte BWSignalingEnabled = (u1Byte)(*((pu1Byte)InformationBuffer+1)); - - if(BWSGNL_Enable == BWSignalingEnabled) - { - pVHTInfo->BWSignalingCtrl = (*((pu1Byte)InformationBuffer+2)); - pMgntInfo->ForcedProtectionMode = PROTECTION_MODE_FORCE_ENABLE; - pMgntInfo->ForcedProtectRate = MGN_24M; - pMgntInfo->ForcedProtectCCA = pVHTInfo->BWSignalingCtrl; - pMgntInfo->bForcedProtectRTSFrame = TRUE; - pMgntInfo->bForcedProtectCTSFrame = FALSE; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set RTS BW signaling = %d\n", pVHTInfo->BWSignalingCtrl)); - } - else if(BWSGNL_Disable == BWSignalingEnabled) - { - pMgntInfo->ForcedProtectionMode = PROTECTION_MODE_FORCE_DISABLE; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set RTS protection disabled\n")); - } - else //BWSGNL_Auto - { - pMgntInfo->ForcedProtectionMode = PROTECTION_MODE_AUTO; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set RTS protection to auto\n")); - } - } - break; - - case HT_CAP_OP_NSS_MCS_CAP: - { - neededLen += 2; - if(InformationBufferLength < neededLen) - goto end; - - pVHTInfo->bUpdateMcsCap = (BOOLEAN)(*((pu1Byte)InformationBuffer + 1)); - if(pVHTInfo->bUpdateMcsCap == 0) - pVHTInfo->McsCapability = 3; - else - pVHTInfo->McsCapability = (u1Byte)(*((pu1Byte)InformationBuffer+2)); - } - break; - - case HT_CAP_OP_TX_LGI_RATE: - { - neededLen += 3; - if(InformationBufferLength < neededLen) - goto end; - - pVHTInfo->bAssignTxLGIRate = (BOOLEAN)(*((pu1Byte)InformationBuffer + 1)); - if(pVHTInfo->bAssignTxLGIRate) - pVHTInfo->highestTxLGIRate = (u2Byte)(*((pu2Byte)((pu1Byte)InformationBuffer+2))); - } - break; - - case HT_CAP_OP_SGI20: - { - u1Byte shortGI = 0; - - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - shortGI = (u1Byte)(*((pu1Byte)InformationBuffer + 1)); - pHTInfo->bRegShortGI20MHz = (shortGI & BIT0) ? TRUE : FALSE; - pHTInfo->bRegShortGI40MHz = (shortGI & BIT1) ? TRUE : FALSE; - RT_TRACE(COMP_HT, DBG_LOUD, ("Set HT_CAP_OP_SGI20 = %d\n", shortGI)); - } - break; - - case HT_CAP_OP_VHT_TKIP: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - if(*((pu1Byte)InformationBuffer + 1) == 1) - { - pMgntInfo->VhtWeakSecurity |= BIT0; - } - else - { - pMgntInfo->VhtWeakSecurity &= ~BIT0; - } - RT_TRACE(COMP_HT, DBG_LOUD, ("Set VHT weak security [TKIP] = %d\n", pMgntInfo->VhtWeakSecurity)); - } - break; - - case HT_CAP_OP_VHT_WEP: - { - neededLen += 1; - if(InformationBufferLength < neededLen) - goto end; - - if(*((pu1Byte)InformationBuffer + 1) == 1) - { - pMgntInfo->VhtWeakSecurity |= BIT1; - } - else - { - pMgntInfo->VhtWeakSecurity &= ~BIT1; - } - RT_TRACE(COMP_HT, DBG_LOUD, ("Set VHT weak security [WEP] = %d\n", pMgntInfo->VhtWeakSecurity)); - } - break; - - case HT_CAP_OP_CTS_ENABLE: - { - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - u1Byte BWFallBackLvl = 0; - - pVHTInfo->DynamicCTSBW = (CHANNEL_WIDTH)((u1Byte)(*((pu1Byte)InformationBuffer+1))); - - if(pChnlInfo->RegBWSetting == CHANNEL_WIDTH_80) // If current BW is 80MHz - { - if(pVHTInfo->DynamicCTSBW == CHANNEL_WIDTH_40) - BWFallBackLvl = 1; - else if(pVHTInfo->DynamicCTSBW == CHANNEL_WIDTH_20) - BWFallBackLvl = 2; - } - else if(pChnlInfo->RegBWSetting == CHANNEL_WIDTH_40) - { - if(pVHTInfo->DynamicCTSBW == CHANNEL_WIDTH_20) - BWFallBackLvl = 1; - } - else if(pChnlInfo->RegBWSetting == CHANNEL_WIDTH_20) - { - BWFallBackLvl = 0; - } - else - { - RT_TRACE(COMP_HT, DBG_LOUD, ("Set HT_CAP_OP_CTS_ENABLE: Not support RegBWSetting=%d,\n", pVHTInfo->DynamicCTSBW)); - } - - Adapter->HalFunc.HalSetCTSDynamicBWSelectHandler(Adapter, BWFallBackLvl); - RT_TRACE(COMP_HT, DBG_LOUD, ("Set dynamic CTS BW = %d, RegBWSetting=%d, BWFallBackLvl(%d)\n", pVHTInfo->DynamicCTSBW, pChnlInfo->RegBWSetting, BWFallBackLvl)); - } - break; - - #if 0 - case HT_SIGMA_11N_CAP_RTS_DYNAMIC_BW: - { - pVHTInfo->bFixedRTSBW = (BOOLEAN)(*((pu1Byte)InformationBuffer+1)); - if(pVHTInfo->bFixedRTSBW) - pVHTInfo->DynamicRTSBW = (*((pu1Byte)InformationBuffer+2)); - // hpfan_todo: need fix rate for bw setting - RT_TRACE(COMP_HT, DBG_LOUD, ("Set dynamic RTS bw = %d\n", pVHTInfo->DynamicRTSBW)); - } - break; - #endif - - default: - break; - } - -end: - if(InformationBufferLength < neededLen) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] Not enough buffer length (%d) for needed (%d)\n", InformationBufferLength, neededLen)); - return FALSE; -} - - return TRUE; -} - -// -// Description: -// Set 802.11 Beanforming capability mode for VHT. -// Arguments: -// [in] Adapter - -// NIC adapter context pointer. -// [in] InformationBuffer - -// The content location -// [in] InformationBufferLength - -// The length in byte of InformationBuffer. -// Remark: -// Information Buffer contains one byte as the following setting. -// BIT0 - BEAMFORMING_VHT_BEAMFORMER_ENABLE, -// BIT1 - BEAMFORMING_VHT_BEAMFORMEE_ENABLE -// BIT2 - BEAMFORMING_VHT_BEAMFORMER_TEST (Transmiting Beamforming no matter the target supports it or not) -// BIT3 - BEAMFORMING_VHT_MU_BEAMFORMER_ENABLE -// BIT4 - BEAMFORMING_HT_BEAMFORMER_ENABLE, -// BIT5 - BEAMFORMING_HT_BEAMFORMEE_ENABLE -// BIT6 - BEAMFORMING_HT_BEAMFORMER_TEST (Transmiting Beamforming no matter the target supports it or not) -// BIT7 - BEAMFORMING_VHT_MU_BEAMFORMEE_ENABLE -// By Bruce, 2012-08-28. -// -RT_STATUS -MgntActSet_802_11_Beamforming_MODE( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ) -{ - PADAPTER tmpAdapter = GetDefaultAdapter(pAdapter); - PRT_HIGH_THROUGHPUT pTmpHTInfo = NULL; - PRT_VERY_HIGH_THROUGHPUT pTmpVHTInfo = NULL; - u1Byte userBeamformSet = 0; - BOOLEAN bHwSupportBeamformer = FALSE, bHwSupportBeamformee = FALSE; - BOOLEAN bHwSupportMUBeamformer = FALSE, bHwSupportMUBeamformee = FALSE; - - if(InformationBufferLength < sizeof(u1Byte)) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] Invalid buffer length (%d)\n", InformationBufferLength)); - return RT_STATUS_INVALID_PARAMETER; - } - - userBeamformSet = *(InformationBuffer); - - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Beamforming config = 0x%02X\n", userBeamformSet)); - - // Set for all adapters - do - { - pTmpVHTInfo = GET_VHT_INFO(&(tmpAdapter->MgntInfo)); - - CLEAR_FLAGS(pTmpVHTInfo->VhtBeamformCap); - if(userBeamformSet & BIT0) - { - if(bHwSupportBeamformer) - { - SET_FLAG(pTmpVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMER_ENABLE); - } - else - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support BEAMFORMER! Skip setting...\n")); - } - } - if(userBeamformSet & BIT1) - { - if(bHwSupportBeamformee) - { - SET_FLAG(pTmpVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMEE_ENABLE); - } - else - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support BEAMFORMEE! Skip setting...\n")); - } - } - if(userBeamformSet & BIT2) - { - if(bHwSupportBeamformer) - { - SET_FLAG(pTmpVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMER_TEST); - } - else - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support BEAMFORMER! Skip setting...\n")); - } - } - - - if(userBeamformSet & BIT3) - { - if(bHwSupportMUBeamformer) - { - SET_FLAG(pTmpVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_AP_ENABLE); - } - else - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support MU BEAMFORMER! Skip setting...\n")); - } - } - - if((userBeamformSet & BIT4) && bHwSupportBeamformer) - { - SET_FLAG(pTmpHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMER_ENABLE); - } - if((userBeamformSet & BIT5) && bHwSupportBeamformee) - { - SET_FLAG(pTmpHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMEE_ENABLE); - } - if((userBeamformSet & BIT6) && bHwSupportBeamformer) - { - SET_FLAG(pTmpHTInfo->HtBeamformCap, BEAMFORMING_HT_BEAMFORMER_TEST); - } - - if(userBeamformSet & BIT7) - { - if(bHwSupportMUBeamformee) - { - SET_FLAG(pTmpVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_STA_ENABLE); - } - else - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support MU BEAMFORMEE! Skip setting...\n")); - } - } - - tmpAdapter = GetNextExtAdapter(tmpAdapter); - }while(tmpAdapter != NULL); - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Set 802.11 LDPC mode for HT and VHT capability -// Arguments: -// [in] Adapter - -// NIC adapter context pointer. -// [in] InformationBuffer - -// The content location -// [in] InformationBufferLength - -// The length in byte of InformationBuffer. -// Remark: -// Information Buffer contains one byte as the following setting. -// BIT0 - LDPC_VHT_ENABLE_RX, -// BIT1 - LDPC_VHT_ENABLE_TX -// BIT2 - LDPC_VHT_TEST_TX_ENABLE(Don't care protocol, just sending VHT LDPC) -// -// BIT4 - LDPC_HT_ENABLE_RX -// BIT5 - LDPC_HT_ENABLE_TX -// BIT6 - LDPC_HT_TEST_TX_ENABLE (Don't care protocol, just sending HT LDPC) -// By Bruce, 2012-08-27. -// -RT_STATUS -MgntActSet_802_11_LDPC_MODE( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ) -{ - PADAPTER tmpAdapter = GetDefaultAdapter(pAdapter); - PRT_HIGH_THROUGHPUT pTmpHTInfo = NULL; - PRT_VERY_HIGH_THROUGHPUT pTmpVHTInfo = NULL; - u1Byte userLdpcSet = 0; - BOOLEAN bHwSupportLdpcTx = FALSE, bHwSupportLdpcRx = FALSE; - - if(InformationBufferLength < sizeof(u1Byte)) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] Invalid buffer length (%d)\n", InformationBufferLength)); - return RT_STATUS_INVALID_PARAMETER; - } - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_TX_LDPC, (pu1Byte)&bHwSupportLdpcTx); - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_RX_LDPC, (pu1Byte)&bHwSupportLdpcRx); - if(!bHwSupportLdpcTx && !bHwSupportLdpcRx) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't not support LDPC, skip setting...\n")); - return RT_STATUS_FAILURE; - } - - userLdpcSet = *(InformationBuffer); - - if(!bHwSupportLdpcTx && - ((userLdpcSet & LDPC_VHT_ENABLE_TX) || - (userLdpcSet & LDPC_VHT_TEST_TX_ENABLE) || - (userLdpcSet & LDPC_HT_ENABLE_TX) || - (userLdpcSet & LDPC_HT_TEST_TX_ENABLE))) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support set LDPC Tx\n")); - return RT_STATUS_FAILURE; - } - if(!bHwSupportLdpcRx && - ((userLdpcSet & LDPC_VHT_ENABLE_RX) || - (userLdpcSet & LDPC_HT_ENABLE_RX))) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't support set LDPC Rx\n")); - return RT_STATUS_FAILURE; - } - - SetRegLdpc(pAdapter, *(InformationBuffer) ); - - RT_TRACE_F(COMP_HT, DBG_LOUD, ("LDPC config = 0x%02X\n", userLdpcSet)); - - // Set for all adapters - do - { - pTmpHTInfo = GET_HT_INFO(&(tmpAdapter->MgntInfo)); - pTmpVHTInfo = GET_VHT_INFO(&(tmpAdapter->MgntInfo)); - - CLEAR_FLAGS(pTmpVHTInfo->VhtLdpcCap); - CLEAR_FLAGS(pTmpHTInfo->HtLdpcCap); - if(userLdpcSet & BIT0) - { - SET_FLAG(pTmpVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_RX); - } - if(userLdpcSet & BIT1) - { - SET_FLAG(pTmpVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_TX); - } - if(userLdpcSet & BIT2) - { - SET_FLAG(pTmpVHTInfo->VhtLdpcCap, LDPC_VHT_TEST_TX_ENABLE); - } - if(userLdpcSet & BIT4) - { - SET_FLAG(pTmpHTInfo->HtLdpcCap, LDPC_HT_ENABLE_RX); - } - if(userLdpcSet & BIT5) - { - SET_FLAG(pTmpHTInfo->HtLdpcCap, LDPC_HT_ENABLE_TX); - } - if(userLdpcSet & BIT6) - { - SET_FLAG(pTmpHTInfo->HtLdpcCap, LDPC_HT_TEST_TX_ENABLE); - } - tmpAdapter = GetNextExtAdapter(tmpAdapter); - }while(tmpAdapter != NULL); - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Set 802.11 STBC mode for HT and VHT capability -// Arguments: -// [in] Adapter - -// NIC adapter context pointer. -// [in] InformationBuffer - -// The content location -// [in] InformationBufferLength - -// The length in byte of InformationBuffer. -// Remark: -// Information Buffer contains one byte as the following setting. -// BIT0 - STBC_VHT_ENABLE_RX, -// BIT1 - STBC_VHT_ENABLE_TX -// BIT2 - STBC_VHT_TEST_TX_ENABLE(Don't care protocol, just sending VHT STBC), test mode. -// -// BIT4 - STBC_HT_ENABLE_RX -// BIT5 - STBC_HT_ENABLE_TX -// BIT6 - STBC_HT_TEST_TX_ENABLE (Don't care protocol, just sending HT STBC), test mode. -// By Bruce, 2012-11-07. -// -RT_STATUS -MgntActSet_802_11_STBC_MODE( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ) -{ - PADAPTER tmpAdapter = GetDefaultAdapter(pAdapter); - PRT_HIGH_THROUGHPUT pTmpHTInfo = NULL; - PRT_VERY_HIGH_THROUGHPUT pTmpVHTInfo = NULL; - u1Byte userStbcSet = 0; - BOOLEAN bHwSupportStbc = FALSE; - - if(InformationBufferLength < sizeof(u1Byte)) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] Invalid buffer length (%d)\n", InformationBufferLength)); - return RT_STATUS_INVALID_PARAMETER; - } - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_TX_STBC, (pu1Byte)&bHwSupportStbc); - - if(!bHwSupportStbc) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] HW doesn't not support STBC, skip setting...\n")); - return RT_STATUS_FAILURE; - } - userStbcSet = *(InformationBuffer); - SetRegStbc(pAdapter, *(InformationBuffer)); - - RT_TRACE_F(COMP_HT, DBG_LOUD, ("STBC config = 0x%02X\n", userStbcSet)); - - // Set for all adapters - do - { - pTmpHTInfo = GET_HT_INFO(&(tmpAdapter->MgntInfo)); - pTmpVHTInfo = GET_VHT_INFO(&(tmpAdapter->MgntInfo)); - - CLEAR_FLAGS(pTmpVHTInfo->VhtStbcCap); - CLEAR_FLAGS(pTmpHTInfo->HtStbcCap); - if(userStbcSet & BIT0) - { - SET_FLAG(pTmpVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_RX); - } - if(userStbcSet & BIT1) - { - SET_FLAG(pTmpVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_TX); - } - if(userStbcSet & BIT2) - { - SET_FLAG(pTmpVHTInfo->VhtStbcCap, STBC_VHT_TEST_TX_ENABLE); - } - if(userStbcSet & BIT4) - { - SET_FLAG(pTmpHTInfo->HtStbcCap, STBC_HT_ENABLE_RX); - } - if(userStbcSet & BIT5) - { - SET_FLAG(pTmpHTInfo->HtStbcCap, STBC_HT_ENABLE_TX); - } - if(userStbcSet & BIT6) - { - SET_FLAG(pTmpHTInfo->HtStbcCap, STBC_HT_TEST_TX_ENABLE); - } - tmpAdapter = GetNextExtAdapter(tmpAdapter); - }while(tmpAdapter != NULL); - - return RT_STATUS_SUCCESS; -} - - -VOID -MgntActSet_S5_WAKEUP_INFO( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_S5WakeUPInfo pS5WakeInfo = NULL; - - pS5WakeInfo = (PRT_S5WakeUPInfo)InformationBuffer; - - pMgntInfo->mPasspharseLen = pS5WakeInfo->PSKLen; - - PlatformMoveMemory(pMgntInfo->mbPassphrase, pS5WakeInfo->PSK, pMgntInfo->mPasspharseLen); - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "S5_WAKEUP_INFO PSK (Passphrase): \n", pMgntInfo->mbPassphrase, pMgntInfo->mPasspharseLen) - - SecStaGenPMKForS5(pAdapter); -} - - - -#if (P2P_SUPPORT == 1) -VOID -MgntActSet_P2PMode( - IN PADAPTER Adapter, - IN BOOLEAN bP2PMode, - IN BOOLEAN bGO, - IN u1Byte ListenChannel, - IN u1Byte IntendedOpChannel, - IN u1Byte GOIntent - ) -{ - PP2P_INFO pP2PInfo = (PP2P_INFO)(Adapter->MgntInfo.pP2PInfo); - BOOLEAN bCurrentP2PEnabled = P2P_ENABLED(pP2PInfo); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("bP2PMode(%u), bGO(%u), LsnCh(%u), OpCh(%u), GOIntent(%u)\n", - bP2PMode, bGO, ListenChannel, IntendedOpChannel, GOIntent)); - - if(!bCurrentP2PEnabled && !bP2PMode) - {// disabled and want to disable again => ignore - return; - } - - if(bCurrentP2PEnabled) - { - BOOLEAN bScanInProgress; - - // - // Stop any existing scan - // - bScanInProgress = MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - //DbgPrint("P2P_DOING_DEVICE_DISCOVERY\n"); - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); // P2P State is restored in this function. - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - //DbgPrint("bExtendedListening\n"); - P2PScanListCeaseScan(pP2PInfo); - P2PExtendedListenComplete(pP2PInfo); - } - else if(bScanInProgress) - {// Doing normal scan - //DbgPrint("bScanInProgress\n"); - P2PScanListCeaseScan(pP2PInfo); -// P2PNormalScanComplete(pP2PInfo); - } - } - - if(bP2PMode) - { - if(!P2P_ENABLED(pP2PInfo)) - { - P2PInitialize(pP2PInfo, Adapter, ListenChannel, IntendedOpChannel, GOIntent); - } - - if(bGO) - { - P2PGOStartAutomously(pP2PInfo); - } - else - { - } - } - else - { -//Disconnect when set P2P disable -//by sherry 20130117 - if(((MgntLinkStatusQuery(Adapter) == RT_MEDIA_CONNECT) || Adapter->MgntInfo.bIbssStarter)&&(GetDefaultAdapter(Adapter)->bInHctTest)) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("MgntActSet_P2PMode: media connect \n")); - MgntDisconnect(Adapter,disas_lv_ss); - } - P2PDisable(Adapter); - } -} - -VOID -MgntActSet_P2PProvisionIE( - IN PADAPTER Adapter, - IN pu1Byte Information, // along with OUI, no id and length - IN u2Byte InformationLen - ) -{ - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "MgntActSet_P2PProvisionIE:\n", - Information, InformationLen); - - P2P_SetWpsIe(Adapter, InformationLen, Information); -} - -VOID -MgntActSet_P2PFlushScanList( - IN PADAPTER Adapter - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - - if(P2P_ENABLED(pP2PInfo)) - { - P2PScanListClear(pP2PInfo); - WFD_ScanListClear(Adapter); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Flush P2P scan list!\n")); - } -} - -VOID -MgntActSet_P2PProvisioningResult( - IN PADAPTER Adapter, - IN P2P_PROVISIONING_RESULT ProvisioningResult - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - - if(P2P_ENABLED(pP2PInfo)) - { - pP2PInfo->ConnectionContext.ProvisioningResult = ProvisioningResult; - } -} - -// -// Description: -// Set P2P Channel List -// Arguments: -// [IN] Adapter - -// NIC adapter context pointer. -// [IN] ChannelListLen - -// number of channels in the pChannelList parameter -// [IN] pChannelList - -// a pointer to the buffer that contains the channel list to set -// Return: -// VOID -// Remark: -// Add the specified channel list to a list of supported regulatory class. A single channel -// may appear in multiple regulatory class. -// -VOID -MgntActSet_P2PChannelList( - IN PADAPTER Adapter, - IN u1Byte ChannelListLen, - IN pu1Byte pChannelList - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - u4Byte nRegClasses = 0; - u1Byte i = 0; - - if(!P2P_ENABLED(pP2PInfo)) - { - //return; - } - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ChannelList to set: ", pChannelList, ChannelListLen); - - nRegClasses = sizeof(P2PRegClass) / sizeof(P2PRegClass[0]) - 1; - - RT_ASSERT(nRegClasses <= P2P_MAX_REG_CLASSES, - ("MgntActSet_P2PChannelList(): not enough space for all regulatory class: %u > %u", - nRegClasses, P2P_MAX_REG_CLASSES)); - - // Reset channel entry list - pP2PInfo->ChannelEntryList.regClasses = 0; - - for(i = 0; P2PRegClass[i].RegClass; i++) // foreach regulatory class - { - P2P_REG_CLASS *pChEntry = &(pP2PInfo->ChannelEntryList.regClass[pP2PInfo->ChannelEntryList.regClasses]); - u1Byte Channel = 0; - PP2P_REG_CLASS_MAP pRecClass = &(P2PRegClass[i]); - - if(CHANNEL_WIDTH_40 == pRecClass->chWidth && - !(GET_HT_INFO(&Adapter->MgntInfo))->bEnableHT) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActSet_P2PChannelList(): skip reg class: %u because HT not enabled\n", - pRecClass->RegClass)); - continue; - } - - // Add regulatory class - pChEntry->regClass= pRecClass->RegClass; - pChEntry->channels= 0; - pP2PInfo->ChannelEntryList.regClasses++; - - for (Channel = pRecClass->MinChannel; - Channel <= pRecClass->MaxChannel; - Channel += pRecClass->ChannelGap) // foreach channels in the regulatory class - { - u1Byte j = 0; - - // The channel deriviated from the P2PRegClass is not in the input channel list - for(j = 0; j < ChannelListLen && pChannelList[j] != Channel; j++){} - if(j == ChannelListLen) continue; - - // - // Note that same channel can belong to different reg class - // - - pChEntry->channel[pChEntry->channels] = Channel; - pChEntry->channels++; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActSet_P2PChannelList: add channel: %4s: %4u, %4s: %4u\n", - "reg", pChEntry->regClass, - "ch", Channel)); - } - } -} - -VOID -MgntActSet_P2PListenChannel( - IN PADAPTER Adapter, - IN u1Byte ListenChannel - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - PADAPTER pDefAdapter = GetDefaultAdapter(Adapter); - PADAPTER pLoopAdapter = pDefAdapter; - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pDefAdapter); - BOOLEAN bSetChannel = TRUE; - - if(!P2P_ENABLED(pP2PInfo)) - { - return; - } - - // check each adapter if it is associated to the AP. - do - { - // AP mode. - if(ACTING_AS_AP(pLoopAdapter)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Adapter (%p) is acting as AP, skip setting channel!\n", pLoopAdapter)); - bSetChannel = FALSE; - break; - } - - // Client is assciated or connected. - if(RT_MEDIA_CONNECT == MgntLinkStatusQuery(pLoopAdapter) || MgntRoamingInProgress(&(pLoopAdapter->MgntInfo))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Adapter (%p) is in associating state, skip setting channel!\n", pLoopAdapter)); - bSetChannel = FALSE; - continue; - } - - if(MgntIsLinkInProgress(&pLoopAdapter->MgntInfo) || GET_HAL_DATA(pLoopAdapter)->SwChnlInProgress) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("MgntActSet_P2PListenChannel():Not set bw and channel because of linking in progress.\n")); - } - }while(NULL != (pLoopAdapter = GetNextExtAdapter(pLoopAdapter))); - - if(bSetChannel) - { - if(IS_NEED_EXT_IQK(pDefAdapter)) - { - pHalData->bNeedIQK = TRUE; - pHalData->DM_OutSrc.RFCalibrateInfo.bNeedIQK = TRUE; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntActSet_P2PListenChannel(): from %u to %u \n", - pP2PInfo->ListenChannel, ListenChannel)); - - pP2PInfo->pAdapter->MgntInfo.dot11CurrentChannelNumber = ListenChannel; - pP2PInfo->ListenChannel = ListenChannel; - - if(!pDefAdapter->MgntInfo.RegRfOff) - { - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)WIRELESS_MODE_G); - - CHNL_SetBwChnl( Adapter, - Adapter->MgntInfo.dot11CurrentChannelNumber, - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT - ); - } - } -} -#endif // #if (P2P_SUPPORT == 1) - -#if (WPS_SUPPORT == 1) -RT_STATUS -MgntActSet_WPS_Information( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u2Byte InformationBufferLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - u2Byte NeedLength = 3; // opcode + para length - u1Byte wpsinfoOpcode = WPS_INFO_NO_OPERATION; - u2Byte paraLength = 0; - RT_STATUS rtStatus = RT_STATUS_NOT_SUPPORT; - - if(pSimpleConfig == NULL) - goto End; - - if(pSimpleConfig->WpsIeVersion < SUPPORT_WPS_INFO_VERSION) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): Not support this version!\n")); - goto End; - } - - if(InformationBufferLength < NeedLength) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): No op-code or length specified!\n")); - rtStatus = RT_STATUS_RESOURCE; - goto End; - } - - wpsinfoOpcode = *((pu1Byte)InformationBuffer); - paraLength = *((pu2Byte)((pu1Byte)InformationBuffer+1)); - - NeedLength += paraLength; - if(InformationBufferLength < NeedLength) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): content length mismatch!\n")); - rtStatus = RT_STATUS_RESOURCE; - goto End; - } - - switch(wpsinfoOpcode) - { - case WPS_INFO_BEACON_IE: - { - pSimpleConfig->ieBeaconLen = paraLength; - PlatformFillMemory(pSimpleConfig->ieBeaconBuf, MAX_SIMPLE_CONFIG_IE_LEN_V2, 0); - CopyMem(pSimpleConfig->ieBeaconBuf, ((u1Byte *)InformationBuffer + 3), pSimpleConfig->ieBeaconLen); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): Beacon IE\n"), pSimpleConfig->ieBeaconBuf, pSimpleConfig->ieBeaconLen); - } - break; - - case WPS_INFO_ASOCREQ_IE: - { - pSimpleConfig->ieAsocReqLen = paraLength; - PlatformFillMemory(pSimpleConfig->ieAsocReqBuf, MAX_SIMPLE_CONFIG_IE_LEN_V2, 0); - CopyMem(pSimpleConfig->ieAsocReqBuf, ((u1Byte *)InformationBuffer + 3), pSimpleConfig->ieAsocReqLen); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): Asoc Req IE\n"), pSimpleConfig->ieAsocReqBuf, pSimpleConfig->ieAsocReqLen); - } - break; - - case WPS_INFO_ASOCRSP_IE: - { - pSimpleConfig->ieAsocRspLen = paraLength; - PlatformFillMemory(pSimpleConfig->ieAsocRspBuf, MAX_SIMPLE_CONFIG_IE_LEN_V2, 0); - CopyMem(pSimpleConfig->ieAsocRspBuf, ((u1Byte *)InformationBuffer + 3), pSimpleConfig->ieAsocRspLen); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): Asoc Rsp IE\n"), pSimpleConfig->ieAsocRspBuf, pSimpleConfig->ieAsocRspLen); - } - break; - - case WPS_INFO_PROBEREQ_IE: - { - pSimpleConfig->ieProbeReqLen = paraLength; - PlatformFillMemory(pSimpleConfig->ieProbeReqBuf, MAX_SIMPLE_CONFIG_IE_LEN_V2, 0); - CopyMem(pSimpleConfig->ieProbeReqBuf, ((u1Byte *)InformationBuffer + 3), pSimpleConfig->ieProbeReqLen); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): Probe Req IE\n"), pSimpleConfig->ieProbeReqBuf, pSimpleConfig->ieProbeReqLen); - } - break; - - case WPS_INFO_PROBERSP_IE: - { - pSimpleConfig->ieProbeRspLen = paraLength; - PlatformFillMemory(pSimpleConfig->ieProbeRspBuf, MAX_SIMPLE_CONFIG_IE_LEN_V2, 0); - CopyMem(pSimpleConfig->ieProbeRspBuf, ((u1Byte *)InformationBuffer + 3), pSimpleConfig->ieProbeRspLen); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): Probe Rsp IE\n"), pSimpleConfig->ieProbeRspBuf, pSimpleConfig->ieProbeRspLen); - if(pSimpleConfig->ieProbeRspLen > 2) - { -#if (P2P_SUPPORT == 1) - MgntActSet_P2PProvisionIE(Adapter, pSimpleConfig->ieProbeRspBuf + 2, pSimpleConfig->ieProbeRspLen - 2); -#endif - } - } - break; - - case WPS_INFO_QUERY_INFO: - { - pSimpleConfig->InfoCtrl = *((pu1Byte)(InformationBuffer+3)); - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): query information control (%d)\n", pSimpleConfig->InfoCtrl)); - } - break; - - default: - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActSet_WPS_Information(): No matching op-code (%d)\n", wpsinfoOpcode)); - break; - } - rtStatus = RT_STATUS_SUCCESS; - - End: - return rtStatus; -} -#endif - diff --git a/network/wlan/WDI/COMMON/MgntActSetParam.h b/network/wlan/WDI/COMMON/MgntActSetParam.h deleted file mode 100644 index f7e593a7..00000000 --- a/network/wlan/WDI/COMMON/MgntActSetParam.h +++ /dev/null @@ -1,602 +0,0 @@ -#ifndef __INC_MGNTACTSETPARAM_H -#define __INC_MGNTACTSETPARAM_H - -#define ADD_KEY_IDX_AS 0x10000000 -#define ADD_KEY_IDX_RSC 0x20000000 - - -// -// For switching AutoTurbo by 8186 or our original turbo mode mechanism. Added by Roger, 2006.12.07. -// Note: bit0 and bit1 should NOT both be 1 at the same time. -// - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef union _TURBOMODE_TYPE{ - u1Byte charData; - struct - { - u1Byte SupportTurboMode:1; - u1Byte AutoTurboBy8186:1; - u1Byte Reserved:6; - }field; -}TURBOMODE_TYPE, *PTURBOMODE_TYPE; - -typedef enum _HT_CAP_OP_CODE{ - //------------------------------------------// sigma spec - HT_CAP_OP_RESET_DEFAULT = 0, - HT_CAP_OP_40_INTOLERANT = 1, - HT_CAP_OP_ADDBA_REJECT = 2, - HT_CAP_OP_AMPDU = 3, - HT_CAP_OP_AMSDU = 4, - HT_CAP_OP_GREENFIELD = 5, - HT_CAP_OP_SGI20 = 6, - HT_CAP_OP_STBC = 7, - HT_CAP_OP_WIDTH = 8, - HT_CAP_OP_MCS_FIXEDRATE = 9, - HT_CAP_OP_MCS32 = 10, - HT_CAP_OP_SMPS = 11, - HT_CAP_OP_VHT_TXSP_STREAM = 12, - HT_CAP_OP_VHT_RXSP_STREAM = 13, - HT_CAP_OP_BAND = 14, - HT_CAP_OP_DYN_BW_SGNL = 15, - HT_CAP_OP_SGI80 = 16, - HT_CAP_OP_TXBF = 17, - HT_CAP_OP_LDPC = 18, - HT_CAP_OP_OPT_MD_NOTIF_IE = 19, - HT_CAP_OP_NSS_MCS_CAP = 20, - HT_CAP_OP_TX_LGI_RATE = 21, - HT_CAP_OP_ZERO_CRC = 22, - HT_CAP_OP_VHT_TKIP = 23, - HT_CAP_OP_VHT_WEP = 24, - HT_CAP_OP_BW_SGNL = 25, - HT_CAP_OP_CTS_ENABLE = 26, - //------------------------------------------// realtek custom - HT_CAP_OP_SEND_ADDBA = 0x81, - HT_CAP_OP_RTS_THRESHOLD = 0x82, - HT_CAP_OP_FRAGMENT = 0x83, - HT_CAP_OP_PREAMBLE = 0x84, - HT_CAP_OP_WIRELESS_MODE = 0x85, - HT_CAP_OP_POWERSAVE = 0x86, - HT_CAP_OP_NOACK = 0x87, - HT_CAP_OP_OPMODE_NOTIF = 0x88, - HT_CAP_OP_BW_SIGNALING_CTRL = 0x89, - HT_CAP_OP_HT_TXSP_STREAM = 0x8b, - HT_CAP_OP_HT_RXSP_STREAM = 0x8c, - HT_CAP_OP_BEAMFORMING_CAP = 0x8d, - HT_CAP_OP_RESET_OPMODE = 0x8e, -}HT_CAP_OP_CODE, *PHT_CAP_OP_CODE; - -#define BENoAck BIT0 -#define BKNoAck BIT1 -#define VINoAck BIT2 -#define VONoAck BIT3 - -#ifdef REMOVE_PACK -#pragma pack() -#endif - - -//------------------------------------------ -//Name : MgntActSet_RSNA_REMOVE_DEAULT_KEY -//Function : Remove Key from PerStable -//Input : Keyindex = Perstation DefKeybuf index. -// MacAddress = Per-station's MAC address -//------------------------------------------ -BOOLEAN -MgntActSet_RSNA_REMOVE_DEAULT_KEY( - PADAPTER Adapter, - u4Byte KeyIndex, - pu1Byte MacAddress -); - -//------------------------------------------ -//Name : MgntActSet_RSNA_ADD_DEAULT_KEY -//Function : Remove Key from PerStable -//Input : Keyindex = Perstation DefKeybuf index. -// pKeyMaterial = conent of key -// MacAddress = Per-station's MAC address -//------------------------------------------ -//vivi added for new cam search flow, 20091028 -BOOLEAN -MgntActSet_RSNA_ADD_DEAULT_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLen, - pu1Byte pKeyMaterial, - pu1Byte MacAddress -); -//------------------------------------------ -//Name : MgntActSet_RSNA_REMOVE_MAPPING_KEY -//Function : Remove Key from PerStable -//Input : -// MacAddress = Per-station's MAC address -//------------------------------------------ -BOOLEAN -MgntActSet_RSNA_REMOVE_MAPPING_KEY( - PADAPTER Adapter, - pu1Byte MacAddress -); - -//------------------------------------------ -//Name : MgntActSet_RSNA_ADD_MAPPING_KEY -//Function : Remove Key from PerStable -//Input : pKeyMaterial = conent of key -// MacAddress = Per-station's MAC address -//------------------------------------------ -//vivi added for new cam search flow, 20091028 -BOOLEAN -MgntActSet_RSNA_ADD_MAPPING_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLen, - pu1Byte pKeyMaterial, - pu1Byte MacAddress -); - -BOOLEAN -MgntActSet_802_11_REMOVE_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - pu1Byte BSSID, - BOOLEAN IsGroup -); -BOOLEAN -MgntActSet_802_11_ADD_KEY( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLength, - pu1Byte KeyMaterial, - pu1Byte MacAddress, - BOOLEAN IsGroupTransmitKey, - BOOLEAN IsGroup, - u8Byte KeyRSC -); - - -BOOLEAN -MgntActSet_802_3_MAC_ADDRESS( - PADAPTER Adapter, - pu1Byte addrbuf -); - - -//Sets the MAC address of the desired AP. -BOOLEAN -MgntActSet_802_11_BSSID( - PADAPTER Adapter, - pu1Byte bssidbuf -); - - - - - -// Sets the SSID to a specified value -// Select a Basic Service Set to join? -BOOLEAN -MgntActSet_802_11_SSID( - PADAPTER Adapter, - pu1Byte ssidbuf, - u2Byte ssidlen, - BOOLEAN JoinAfterSetSSID -); - - - -BOOLEAN -MgntActSet_802_11_INFRASTRUCTURE_MODE( - PADAPTER Adapter, - RT_JOIN_NETWORKTYPE networktype -); - - - -BOOLEAN -MgntActSet_802_11_ADD_WEP( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLength, - pu1Byte KeyMaterial, - BOOLEAN IsDefaultKeyId -); - - - - -BOOLEAN -MgntActSet_802_11_REMOVE_WEP( - PADAPTER Adapter, - RT_ENC_ALG EncAlgorithm, - u4Byte KeyIndex, - u4Byte KeyLength -); - - - -BOOLEAN -MgntActSet_802_11_TX_POWER_LEVEL( - PADAPTER Adapter, - u4Byte powerlevel -); - - - - -// Sets the fragmentation threshold in bytes. -BOOLEAN -MgntActSet_802_11_FRAGMENTATION_THRESHOLD( - PADAPTER Adapter, - u2Byte fragthres -); - - -//Sets the RTS threshold. -BOOLEAN -MgntActSet_802_11_RTS_THRESHOLD( - PADAPTER Adapter, - u2Byte RtsThres -); - -BOOLEAN -MgntActSet_802_11_RATE( - PADAPTER Adapter, - u1Byte rate // 0x02 := 1Mbps, .... -); - -NDIS_STATUS -MgntActSet_802_11_DISASSOCIATE( - PADAPTER Adapter, - u1Byte asRsn -); - -BOOLEAN -MgntActSet_802_11_DEAUTHENTICATION( - PADAPTER Adapter, - u1Byte asRsn -); - -BOOLEAN -MgntActSet_802_11_AUTHENTICATION_MODE( - PADAPTER Adapter, - RT_AUTH_MODE authmode -); - - - -BOOLEAN -MgntActSet_802_11_BSSID_LIST_SCAN( - PADAPTER Adapter -); - - -BOOLEAN -MgntActSet_802_11_WIRELESS_MODE( - PADAPTER Adapter, - WIRELESS_MODE WirelessMode -); - -BOOLEAN -MgntActSet_802_11_RETRY_LIMIT( - PADAPTER Adapter, - u2Byte ShortRetryLimit, - u2Byte LongRetryLimit -); - -// Use this interface to swith channel and bandwidth in MAC layer -------------- -VOID -MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - PADAPTER pAdapter, - u1Byte Primary20MhzChannel, - CHANNEL_WIDTH BandWidthMode, - EXTCHNL_OFFSET ExtChnlOffsetOf40MHz, - EXTCHNL_OFFSET ExtChnlOffsetOf80MHz, - u1Byte Secondary80MhzChannelCenterFrequency -); -//------------------------------------------------------------------- - -// Use this interface to change Reg 20Mhz channel ------------------------------ -BOOLEAN -MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH( - PADAPTER Adapter, - u1Byte channel -); -// ---------------------------------------------------------------------- - -// Annie, 2004-12-27 -BOOLEAN -MgntActSet_802_11_CHANNELPLAN( - PADAPTER Adapter, - u2Byte ChannelPlan -); - -BOOLEAN -MgntActSet_802_11_PMKID( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN ULONG InformationBufferLength -); - - -VOID -MgntActSet_802_3_MULTICAST_LIST( - PADAPTER Adapter, - pu1Byte MCListbuf, - u4Byte MCListlen, - BOOLEAN bAcceptAllMulticast -); - -VOID -MgntActSet_802_11_PREAMBLE_MODE( - PADAPTER Adapter, - u1Byte PreambleMode -); - -BOOLEAN -MgntActSet_802_11_CONFIGURATION( - PADAPTER Adapter, - u2Byte BeaconPeriod, - u1Byte ChannelNumber -); - -BOOLEAN -MgntActSet_802_11_PowerSaveMode( - PADAPTER Adapter, - RT_PS_MODE rtPsMode -); - -BOOLEAN -MgntActSet_ApMode( - PADAPTER Adapter, - BOOLEAN bApMode -); - -VOID -MgntActSet_802_11_DtimPeriod( - PADAPTER Adapter, - u1Byte u1DtimPeriod -); - -VOID -MgntActSet_802_11_BeaconInterval( - PADAPTER Adapter, - u2Byte u2BeaconPeriod -); - -VOID -MgntActSet_802_11_ScanWithMagicPacket( - PADAPTER Adapter, - pu1Byte pDstAddr -); - -VOID -MgntActSet_Passphrase( - PADAPTER Adapter, - POCTET_STRING posPassphrase -); - - -BOOLEAN -MgntActSet_ExcludedMacAddressList( - PADAPTER Adapter, - pu1Byte pMacAddrList, - u4Byte NumMacAddrList -); - - -// For turbo mode related, added by Roger. 2006.12.07. -BOOLEAN -MgntActSet_RT_TurboModeType( - IN PADAPTER Adapter, - IN pu1Byte pTurboModeType -); - -// For turbo mode related, added by Roger. 2006.12.07. -VOID -MgntActSet_EnterTurboMode( - IN PADAPTER Adapter, - IN BOOLEAN bEnterTurboMode -); - -BOOLEAN -MgntActSet_Locked_STA_Address( - IN PADAPTER Adapter, - IN pu1Byte LockedListBuf, - IN u4Byte LockedListCnt -); - - -BOOLEAN -MgntActSet_Accepted_STA_Address( - IN PADAPTER Adapter, - IN pu1Byte LockedListBuf, - IN u4Byte LockedListCnt -); - -BOOLEAN -MgntActSet_Rejected_STA_Address( - IN PADAPTER Adapter, - IN pu1Byte LockedListBuf, - IN u4Byte LockedListCnt -); - - -BOOLEAN -MgntActSet_RF_State( - IN PADAPTER Adapter, - IN RT_RF_POWER_STATE StateToSet, - IN RT_RF_CHANGE_SOURCE ChangeSource, - IN BOOLEAN FromGPIO -); - -VOID -MgntActSet_TX_POWER_LEVEL( - PADAPTER Adapter, - int TxPowerLevel - ); - -BOOLEAN -MgntActSet_TX_POWER_DBM( - PADAPTER Adapter, - s4Byte powerInDbm -); - -VOID -UpdateTxPowerDbmWorkItemCallback( - IN PVOID pContext -); - -RT_STATUS -MgntActSet_AdditionalProbeReqIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen -); - -RT_STATUS -MgntActSet_AdditionalBeaconIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen -); - -RT_STATUS -MgntActSet_AdditionalProbeRspIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen -); - -RT_STATUS -MgntActSet_AdditionalAssocReqIE( - IN PADAPTER pAdapter, - IN pu1Byte pAdditionalIEBuf, - IN u4Byte AdditionalIEBufLen -); - -VOID -MgntActSet_ApType( - IN PADAPTER pAdapter, - IN BOOLEAN mActingAsAp -); - -RT_NDIS_VERSION -MgntTranslateNdisVersionToRtNdisVersion( - IN UINT NdisVersion -); - -VOID -MgntActSet_802_11_WMM_MODE( - IN PADAPTER Adapter, - IN BOOLEAN bWMMEnable - ); - -VOID -MgntActSet_802_11_WMM_UAPSD( - IN PADAPTER Adapter, - IN AC_UAPSD WMM_UAPSD - ); - -BOOLEAN -MgntActSet_802_11_CustomizedAsocIE( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u1Byte InformationBufferLength - ); - -BOOLEAN -MgntActSet_802_11_Sigma_Capability( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u1Byte InformationBufferLength - ); - -RT_STATUS -MgntActSet_802_11_Beamforming_MODE( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ); - -RT_STATUS -MgntActSet_802_11_LDPC_MODE( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ); - -RT_STATUS -MgntActSet_802_11_STBC_MODE( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ); - -VOID -MgntActSet_S5_WAKEUP_INFO( - IN PADAPTER pAdapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength -); - -#if (P2P_SUPPORT == 1) -VOID -MgntActSet_P2PMode( - IN PADAPTER Adapter, - IN BOOLEAN bP2PMode, - IN BOOLEAN bGO, - IN u1Byte ListenChannel, - IN u1Byte IntendedOpChannel, - IN u1Byte GOIntent - ); - -VOID -MgntActSet_P2PProvisionIE( - IN PADAPTER Adapter, - IN pu1Byte Information, // along with OUI, no id and length - IN u2Byte InformationLen - ); - -VOID -MgntActSet_P2PFlushScanList( - IN PADAPTER Adapter - ); - -VOID -MgntActSet_P2PProvisioningResult( - IN PADAPTER Adapter, - IN P2P_PROVISIONING_RESULT ProvisioningResult - ); - -VOID -MgntActSet_P2PChannelList( - IN PADAPTER Adapter, - IN u1Byte ChannelListLen, - IN pu1Byte pChannelList - ); - -VOID -MgntActSet_P2PListenChannel( - IN PADAPTER Adapter, - IN u1Byte ListenChannel - ); -#endif // #if (P2P_SUPPORT == 1) - -#if ( WPS_SUPPORT == 1 ) -RT_STATUS -MgntActSet_WPS_Information( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u2Byte InformationBufferLength - ); -#endif - -#endif // #ifndef __INC_MGNTACTSETPARAM_H - diff --git a/network/wlan/WDI/COMMON/MgntConstructPacket.c b/network/wlan/WDI/COMMON/MgntConstructPacket.c deleted file mode 100644 index 34576a46..00000000 --- a/network/wlan/WDI/COMMON/MgntConstructPacket.c +++ /dev/null @@ -1,4096 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntConstructPacket.tmh" -#endif - -static u1Byte BroadcastAddress[6]={0xff,0xff,0xff,0xff,0xff,0xff}; - -VOID -AppendQoSElement( - OUT POCTET_STRING packet, - IN POCTET_STRING element, - IN u1Byte OUI_Subtype - ) -{ - u1Byte szQoSOUI[] ={221, 0, 0x00, 0x50, 0xf2, OUI_SUB_WMM, 0, 1}; - OCTET_STRING tmp; - - if (OUI_Subtype == OUI_SUBTYPE_QOS_CAPABI) - { - szQoSOUI[0] = 46; - szQoSOUI[1] = (u1Byte)element->Length; - FillOctetString(tmp, szQoSOUI, 2); - PacketAppendData(packet, tmp); - } - else - { - szQoSOUI[1] = element->Length + 6; - szQoSOUI[6] = OUI_Subtype; - FillOctetString(tmp, szQoSOUI, 8); - PacketAppendData(packet, tmp); - } - - // QoS Capability IE - PacketAppendData(packet, *element); -} - - -VOID -SelectSupportedRatesElement( - IN WIRELESS_MODE wirelessmode, - IN OCTET_STRING SuppRates, - IN BOOLEAN bFilterCck, - OUT POCTET_STRING pSuppRates, - OUT POCTET_STRING pExtSuppRates -) -{ - OCTET_STRING FilteredSuppRates; - u1Byte FilteredSuppRatesBuf[MAX_NUM_RATES]; - - FilteredSuppRates.Length = 0; - FilteredSuppRates.Octet = FilteredSuppRatesBuf; - - if(bFilterCck) - { - u2Byte i = 0; - - for(i = 0; i < SuppRates.Length; i++) - { - if(IS_CCK_RATE((SuppRates.Octet[i] & 0x7F))) - { - continue; - } - else - { - FilteredSuppRates.Octet[FilteredSuppRates.Length] = SuppRates.Octet[i]; - FilteredSuppRates.Length++; - } - } - } - else - { - PlatformMoveMemory(FilteredSuppRates.Octet, SuppRates.Octet, SuppRates.Length); - FilteredSuppRates.Length = SuppRates.Length; - } - - pSuppRates->Length = 0; - pExtSuppRates->Length = 0; - -#if 1 - if(wirelessmode & (WIRELESS_MODE_A|WIRELESS_MODE_B|WIRELESS_MODE_N_5G|WIRELESS_MODE_AC_5G)) - { - u2Byte cbCopied = ((FilteredSuppRates.Length <= 8) ? FilteredSuppRates.Length : 8); - - // NOTE! Length of Support Rates <= 8. - CopyMem( pSuppRates->Octet, FilteredSuppRates.Octet, cbCopied ); - pSuppRates->Length = cbCopied; - } - else if(wirelessmode & (WIRELESS_MODE_G|WIRELESS_MODE_N_24G|WIRELESS_MODE_AC_24G)) - { - u4Byte i; - - for(i = 0; i < FilteredSuppRates.Length; i++) - { - // There are only 4 rates in WIRELESS_MODE_B, just put them into SuppRateIE first. - // Always put B mode rate in SuppRateIE. - if(MgntIsRateValidForWirelessMode((FilteredSuppRates.Octet[i] & 0x7F), WIRELESS_MODE_B)) - { - pSuppRates->Octet[pSuppRates->Length] = FilteredSuppRates.Octet[i]; - pSuppRates->Length++; - } - // Put other rates to ExtSuppRatesIE first. (Also check if ExtSuppRatesIE length longer than 255.) - else if(pExtSuppRates->Length < 255) - { - pExtSuppRates->Octet[pExtSuppRates->Length] = FilteredSuppRates.Octet[i]; - pExtSuppRates->Length++; - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("SelectSupportedRatesElement(): ExtSuppRatesIE length larger than 255. \n")); - } - } - - // pSuppRates->Length must less than 4 at this point. - if((pSuppRates->Length + pExtSuppRates->Length) <= MAX_SUP_RATE_LEN) - { - CopyMem( pSuppRates->Octet+pSuppRates->Length, pExtSuppRates->Octet, pExtSuppRates->Length); - pSuppRates->Length = pSuppRates->Length + pExtSuppRates->Length; - pExtSuppRates->Length = 0; - } - else - { - u1Byte SupRateAddLen = 0, NewLen_ExtSupRate = 0; - u1Byte TmpRateBuffer[256] = {0}; - - SupRateAddLen = MAX_SUP_RATE_LEN - pSuppRates->Length; - NewLen_ExtSupRate = pExtSuppRates->Length - SupRateAddLen; - - CopyMem( pSuppRates->Octet+pSuppRates->Length, pExtSuppRates->Octet, SupRateAddLen); - pSuppRates->Length = MAX_SUP_RATE_LEN; - - CopyMem( TmpRateBuffer, pExtSuppRates->Octet+SupRateAddLen, NewLen_ExtSupRate); - CopyMem(pExtSuppRates->Octet, TmpRateBuffer, NewLen_ExtSupRate); - pExtSuppRates->Length = NewLen_ExtSupRate; - } - - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "pSuppRates", pSuppRates->Octet, pSuppRates->Length); - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "pExtSuppRates", pExtSuppRates->Octet, pExtSuppRates->Length); - } - else - { - RT_ASSERT(FALSE, ("SelectSupportedRatesElement(): Unknown wirelessmode: 0x%x\n", wirelessmode)); - } -#else - switch( wirelessmode ) - { - case WIRELESS_MODE_A: - case WIRELESS_MODE_B: - case WIRELESS_MODE_N_5G: //Added by Emily 2006.11.10 - case WIRELESS_MODE_AC_5G: - { - u2Byte cbCopied = ((FilteredSuppRates.Length <= 8) ? FilteredSuppRates.Length : 8); - - // NOTE! Length of Support Rates <= 8. - CopyMem( pSuppRates->Octet, FilteredSuppRates.Octet, cbCopied ); - pSuppRates->Length = cbCopied; - } - break; - - case WIRELESS_MODE_G: - case WIRELESS_MODE_N_24G: //Added by Emily 2006.11.10 - case WIRELESS_MODE_AC_24G: - { - u4Byte i; - - for(i = 0; i < FilteredSuppRates.Length; i++) - { - // There are only 4 rates in WIRELESS_MODE_B, just put them into SuppRateIE first. - // Always put B mode rate in SuppRateIE. - if(MgntIsRateValidForWirelessMode((FilteredSuppRates.Octet[i] & 0x7F), WIRELESS_MODE_B)) - { - pSuppRates->Octet[pSuppRates->Length] = FilteredSuppRates.Octet[i]; - pSuppRates->Length++; - } - // Put other rates to ExtSuppRatesIE first. (Also check if ExtSuppRatesIE length longer than 255.) - else if(pExtSuppRates->Length < 255) - { - pExtSuppRates->Octet[pExtSuppRates->Length] = FilteredSuppRates.Octet[i]; - pExtSuppRates->Length++; - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("SelectSupportedRatesElement(): ExtSuppRatesIE length larger than 255. \n")); - } - } - - // pSuppRates->Length must less than 4 at this point. - if((pSuppRates->Length + pExtSuppRates->Length) <= MAX_SUP_RATE_LEN) - { - CopyMem( pSuppRates->Octet+pSuppRates->Length, pExtSuppRates->Octet, pExtSuppRates->Length); - pSuppRates->Length = pSuppRates->Length + pExtSuppRates->Length; - pExtSuppRates->Length = 0; - } - else - { - u1Byte SupRateAddLen = 0, NewLen_ExtSupRate = 0; - u1Byte TmpRateBuffer[256] = {0}; - - SupRateAddLen = MAX_SUP_RATE_LEN - pSuppRates->Length; - NewLen_ExtSupRate = pExtSuppRates->Length - SupRateAddLen; - - CopyMem( pSuppRates->Octet+pSuppRates->Length, pExtSuppRates->Octet, SupRateAddLen); - pSuppRates->Length = MAX_SUP_RATE_LEN; - - CopyMem( TmpRateBuffer, pExtSuppRates->Octet+SupRateAddLen, NewLen_ExtSupRate); - CopyMem(pExtSuppRates->Octet, TmpRateBuffer, NewLen_ExtSupRate); - pExtSuppRates->Length = NewLen_ExtSupRate; - } - - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "pSuppRates", pSuppRates->Octet, pSuppRates->Length); - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "pExtSuppRates", pExtSuppRates->Octet, pExtSuppRates->Length); - } - break; - - // Note: HT rate is filled in HTCapability Information Element, so the supported MCS rate is not initialized here - default: - RT_ASSERT(FALSE, ("SelectSupportedRatesElement(): Unknown wirelessmode: 0x%x\n", wirelessmode)); - break; - } -#endif -} - - - -/* - * According to experiment, Realtek AP to STA (based on rtl8190) may achieve best performance - * if both STA and AP set limitation of aggregation size to 32K, that is, set AMPDU density to 2 - * (Ref: IEEE 11n specification). However, if Realtek STA associates to other AP, STA should set - * limitation of aggregation size to 8K, otherwise, performance of traffic stream from STA to AP - * will be much less than the traffic stream from AP to STA if both of the stream runs concurrently - * at the same time. - * - * Frame Format - * Element ID Length OUI Type1 Reserved - * 1 byte 1 byte 3 bytes 1 byte 1 byte - * - * OUI = 0x00, 0xe0, 0x4c, - * Type = 0x02 - * Reserved = 0x00 - * - * 2007.8.21 by Emily -*/ -VOID -ConstructRTKAggElement( - PADAPTER Adapter, - POCTET_STRING posRTKAggIE -) -{ - BOOLEAN bSupportRemoteWakeUp; - PlatformZeroMemory(posRTKAggIE->Octet, 7); - - posRTKAggIE->Octet[0] = 0x00; - posRTKAggIE->Octet[1] = 0xe0; - posRTKAggIE->Octet[2] = 0x4c; - posRTKAggIE->Octet[3] = 0x02; - posRTKAggIE->Octet[4] = 0x02; - - if(ACTING_AS_AP(Adapter)) - posRTKAggIE->Octet[5] |= RT_HT_CAP_USE_SOFTAP; - - if(IS_VENDOR_8812A_C_CUT(Adapter)) - posRTKAggIE->Octet[6] |= RT_HT_CAP_USE_JAGUAR_CCUT; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_WOWLAN , &bSupportRemoteWakeUp); - - if(bSupportRemoteWakeUp) - posRTKAggIE->Octet[5] |=RT_HT_CAP_USE_WOW; - - posRTKAggIE->Length = 7; -} - - - -VOID -ConstructBeaconFrame( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING DSParms; - OCTET_STRING IBSSParms; - u8Byte TimeStamp; - pu1Byte pbcn; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Extended Support Rates <= 255. - OCTET_STRING ERPInfo; - u1Byte ERPInfoContent[1]; - OCTET_STRING osEDCAInfoElem; - u1Byte EDCAInfo[1]; - OCTET_STRING IbssAdditionalIEs; - BOOLEAN bFilterCck = FALSE; - - pbcn = pMgntInfo->beaconframe.Octet; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - // Frame Control. - SET_80211_HDR_FRAME_CONTROL(pbcn, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pbcn, Type_Beacon); - - // Duration. - SET_80211_HDR_DURATION(pbcn, 0); - - // Addresses (DA/SA/BSSID). - SET_80211_HDR_ADDRESS1(pbcn, BroadcastAddress); - SET_80211_HDR_ADDRESS2(pbcn, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pbcn, Adapter->MgntInfo.Bssid); - - // - // Sequence Control. - // - // TODO: - // 1. If the beacon is send by TransmitTcb, Seq shall be 0, otherwise, we shall fill it with - // proper value. - // 2. We shall fix SendBeaconFrame to allow PCI use TransmitTCB to send beacon. - // - - SET_80211_HDR_FRAGMENT_SEQUENCE(pbcn, 0); - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - // Timestamp. - -// [87B WiFi Ad-Hoc issue] Added by Annie, 2006-06-07. -// 1. TSF field will be updated by HW beacon. -// 2. On purpose set 0 for SW beacon is used. It can prevent other STA to update this value. It's a workaround for WiFi test. - TimeStamp = 0; - SET_BEACON_PROBE_RSP_TIME_STAMP_LOW(pbcn, (u4Byte)(TimeStamp&0xffffffff)); - SET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(pbcn, (u4Byte)(TimeStamp >> 32)); -//--- - - // Beacon interval. - SET_BEACON_PROBE_RSP_BEACON_INTERVAL(pbcn, pMgntInfo->dot11BeaconPeriod); - - // Capability information. - if( ACTING_AS_AP(Adapter) ) - { - SET_BEACON_PROBE_RSP_CAPABILITY_INFO(pbcn, (pMgntInfo->mCap & ~cIBSS) ); - } - else - { - SET_BEACON_PROBE_RSP_CAPABILITY_INFO(pbcn, (pMgntInfo->mCap & ~cESS) ); - } - - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm!= RT_ENC_ALG_NO_CIPHER ) - { - UNION_BEACON_PROBE_RSP_CAPABILITY_INFO(pbcn, cPrivacy); - } - else - { - MASK_BEACON_PROBE_RSP_CAPABILITY_INFO(pbcn, cPrivacy); - } - - // Size of this Frame until last fixed size field. - pMgntInfo->beaconframe.Length = 36; - - // SSID. - if( !ACTING_AS_AP(Adapter) || !pMgntInfo->bHiddenSSID ) - { - PacketMakeElement(&pMgntInfo->beaconframe, EID_SsId, Adapter->MgntInfo.Ssid); - } - else - { // AP mode Hidden SSID. Added by Annie, 2006-02-15. - u1Byte NullSSID[1]; - OCTET_STRING HiddenSSID; - FillOctetString(HiddenSSID, NullSSID, 0); - PacketMakeElement(&pMgntInfo->beaconframe, EID_SsId, HiddenSSID); - } - - // Supported rate. - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - // Set supported and extended supported rate according to Wirelessmode and dot11OperationalRateSet. - - P2P_FilerCck(Adapter, &bFilterCck); - - SelectSupportedRatesElement( pMgntInfo->dot11CurrentWirelessMode, pMgntInfo->dot11OperationalRateSet, bFilterCck,&SuppRates, &ExtSuppRates ); - - PacketMakeElement(&pMgntInfo->beaconframe, EID_SupRates, SuppRates); - - // DS parameters element. - // Note: - // We should have changed the dot11CurrentChannelNumber before constructing beacon frame no matter when the media is connected. - DSParms.Octet = &pMgntInfo->dot11CurrentChannelNumber; - DSParms.Length = 1; - PacketMakeElement(&pMgntInfo->beaconframe, EID_DSParms, DSParms); - RT_TRACE(COMP_AP, DBG_TRACE, ("Constructure Beacon Mediaconnect %d dot11CurrentChannel %d dot11CurrentWirelessMode=%x\n", - pMgntInfo->bMediaConnect,pMgntInfo->dot11CurrentChannelNumber, pMgntInfo->dot11CurrentWirelessMode)); - - // For debugging channel - // RT_TRACE_F(COMP_P2P | COMP_MLME, DBG_LOUD, ("Channel Register: %x\n" , PHY_QueryRFReg(GetDefaultAdapter(Adapter), 0, RF_CHNLBW, bMaskDWord))); - - // Ibss or TIM element - if( !ACTING_AS_AP(Adapter)) - { - IBSSParms.Octet = (pu1Byte)(&pMgntInfo->mIbssParms.atimWin); - IBSSParms.Length = 2; - PacketMakeElement(&pMgntInfo->beaconframe, EID_IbssParms, IBSSParms); - } - else - { - // Update DTIM Count. - if(pMgntInfo->mDtimCount == 0) - pMgntInfo->mDtimCount = pMgntInfo->dot11DtimPeriod - 1; - else - pMgntInfo->mDtimCount--; - - AP_PS_FillTim(pMgntInfo); - - PacketMakeElement(&pMgntInfo->beaconframe, EID_Tim, pMgntInfo->Tim); - } - - DFS_ApConstructBeaconIEcsa(Adapter); - - // Wireless mode dependent elements. - if( IS_WIRELESS_OFDM_24G(Adapter)) - { - // Capability. - if(ACTING_AS_IBSS(Adapter) == FALSE) - UNION_BEACON_PROBE_RSP_CAPABILITY_INFO(pbcn, cShortSlotTime); - - if( IS_WIRELESS_MODE_G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)) - { - if(pMgntInfo->bUseProtection) - ERPInfoContent[0] = ERP_UseProtection; - - FillOctetString(ERPInfo, ERPInfoContent, 1); - PacketMakeElement(&pMgntInfo->beaconframe, EID_ERPInfo, ERPInfo); - } - - // Extended Supported Rates. - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&pMgntInfo->beaconframe, EID_ExtSupRates, ExtSuppRates); - } - } - // IS_WIRELESS_MODE_A() - - // - // Append Additional IEs from Ndis6, for DTM Vista 1.0c premium logo test. By Bruce, 2007-08-13. - // - if(!ACTING_AS_AP(Adapter)) - { - GetIbssAdditionalData(Adapter, &IbssAdditionalIEs); - if(IbssAdditionalIEs.Octet != NULL && IbssAdditionalIEs.Length != 0) - { - AppendAdditionalIEs(&pMgntInfo->beaconframe, IbssAdditionalIEs); - } - } - - RT_DISP(FBEACON, BCN_SHOW, - ("Support Mode=%x pMgntInfo->mIbss=%d pMgntInfo->dot11CurrentWirelessMode=%x\n", - Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter), pMgntInfo->mIbss, pMgntInfo->dot11CurrentWirelessMode)); - - // - // Include High Throuput capability and High Throuput info - // - Do not include HT if CurrentWirelessMode is less than N mode even if hardware support it - // - if(IS_WIRELESS_MODE_N(Adapter)) - { - // Construct HTCapability and HTInfo IE - OCTET_STRING osHTCap, osHTInfo; - - FillOctetString(osHTCap, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - FillOctetString(osHTInfo, &(pMgntInfo->pHTInfo->SelfHTInfo), sizeof(pMgntInfo->pHTInfo->SelfHTInfo)); - HTConstructCapabilityElement(Adapter, &osHTCap, FALSE); - HTConstructInfoElement(Adapter, &osHTInfo); - - // TODO: Construct CAP info element here - PacketMakeElement(&pMgntInfo->beaconframe, EID_HTCapability, osHTCap); - PacketMakeElement(&pMgntInfo->beaconframe, EID_HTInfo, osHTInfo); - - // Construct Realtek Proprietary Aggregation mode (Set AMPDU Factor to 2, 32k) - { - OCTET_STRING osRealtekIEType2; - FillOctetString(osRealtekIEType2, pMgntInfo->RTIEType2Buffer, sizeof(pMgntInfo->RTIEType2Buffer)); - ConstructRTKAggElement(Adapter, &osRealtekIEType2); - PacketMakeElement(&pMgntInfo->beaconframe, EID_Vendor, osRealtekIEType2); - } - } - - if(IS_WIRELESS_MODE_AC(Adapter)) - { - OCTET_STRING osVHTCap, osVHTOperation; - - FillOctetString(osVHTCap, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - FillOctetString(osVHTOperation, &(pMgntInfo->pVHTInfo->SelfVHTInfo), sizeof(pMgntInfo->pVHTInfo->SelfVHTInfo)); - VHTConstructCapabilityElement(Adapter, &osVHTCap, FALSE); - VHTConstructOperationElement(Adapter, &osVHTOperation); - - // TODO: Construct CAP & Operation element here - PacketMakeElement(&pMgntInfo->beaconframe, EID_VHTCapability, osVHTCap); - PacketMakeElement(&pMgntInfo->beaconframe, EID_VHTOperation, osVHTOperation); - } - - - //2004/07/22, kcwu, construct Security IE - //2004/09/15, kcwu, decide to construct which kind of element,WPA or WPA2 - if(pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch) - { - PacketMakeElement(&pMgntInfo->beaconframe, (pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA)?EID_Vendor:EID_WPA2, pMgntInfo->SecurityInfo.RSNIE); - } - - // - // Append Additional IEs from Ndis6, for DTM Vista 1.0c premium logo test. By Bruce, 2007-08-13. - // - if(ACTING_AS_IBSS(Adapter)) - { - GetIbssAdditionalData(Adapter, &IbssAdditionalIEs); - if(IbssAdditionalIEs.Octet != NULL && IbssAdditionalIEs.Length != 0) - { - AppendAdditionalIEs(&pMgntInfo->beaconframe, IbssAdditionalIEs); - } - - if(pMgntInfo->pStaQos->QosCapability != QOS_DISABLE) - { - FillOctetString(osEDCAInfoElem, EDCAInfo, 1); - PlatformZeroMemory(osEDCAInfoElem.Octet, 1); - AppendQoSElement(&pMgntInfo->beaconframe, &osEDCAInfoElem, OUI_SUBTYPE_WMM_INFO); - } - } - - // - // Append additional IEs. By haich, 2008.08.01. - // - if(ACTING_AS_AP(Adapter)) - { - if(pMgntInfo->AdditionalBeaconIESize > 0&& - pMgntInfo->AdditionalBeaconIEData != NULL && - pMgntInfo->beaconframe.Length + pMgntInfo->AdditionalBeaconIESize <= sMaxMpduLng) - { - OCTET_STRING osAdditionalBeaconIEs; - osAdditionalBeaconIEs.Length = (u2Byte)pMgntInfo->AdditionalBeaconIESize; - osAdditionalBeaconIEs.Octet = (pu1Byte)pMgntInfo->AdditionalBeaconIEData; - AppendAdditionalIEs(&pMgntInfo->beaconframe, osAdditionalBeaconIEs); - } - Ap_AppendWmmIe(Adapter, &pMgntInfo->beaconframe); - Ap_AppendCountryIE(Adapter, &pMgntInfo->beaconframe); - Ap_AppendPowerConstraintIE(Adapter, &pMgntInfo->beaconframe); - } - - WAPI_SecFuncHandler(WAPI_CONSTRUCTBEACON, Adapter, WAPI_END); - - WPS_ConstructBeaconFrame(Adapter); - - -#if (P2P_SUPPORT == 1) - P2P_Append_BeaconIe(Adapter); -#endif - - WFD_AppendBeaconIEs(Adapter, pMgntInfo->BcnSharedMemory.Length, &(pMgntInfo->beaconframe)); - -} - - -// -// Description: Construct a beacon frame according to current status and -// update the beacon to HW beacon queue. -// 2005.06.15, by rcnjko. -// -VOID -UpdateBeaconFrame( - PADAPTER Adapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - pDefaultAdapter->TxStats.NumTxBeaconUpdate++; - ConstructBeaconFrame(Adapter); - SendBeaconFrame(Adapter, BEACON_QUEUE); -} - -BOOLEAN -Isdot11acAvailable( - PADAPTER Adapter - ) -{ - u4Byte Availabledot11acCountry[] = {0x818, 0x368, 0x398, 0x417, 0x516, 0x643, 0x804, 0x360}; - u1Byte index, result; - - result = TRUE; - // RT_TRACE(COMP_INIT, DBG_LOUD, ("$$$ Isdot11acAvailable(): Adapter->bDisable11ac = %d\n", Adapter->bDisable11ac)); - if(Adapter->bDisable11ac) - { - result = FALSE; - return result; - } - for(index=0; index<(sizeof(Availabledot11acCountry)/4); index++) - { - if(SMBIOS_GET_COUNTRY_CODE(Adapter) == Availabledot11acCountry[index]) - { - result = FALSE; - break; - } - } - return result; -} - - -VOID -ConstructProbeRequest( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - BOOLEAN bBroadcastBssid, - BOOLEAN bAnySsid, - BOOLEAN bForcePowerSave - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING os; - OCTET_STRING ProbeReq; - pu1Byte pProbeRequestPartial; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Support Rates <= 255. - u1Byte RegSuppRatesIdx=0; - WIRELESS_MODE wirelessmode = WIRELESS_MODE_UNKNOWN; - - pProbeRequestPartial = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pProbeRequestPartial, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pProbeRequestPartial, Type_Probe_Req); - SET_80211_HDR_PWR_MGNT(pProbeRequestPartial, (bForcePowerSave) ? 1 : 0); - SET_80211_HDR_DURATION(pProbeRequestPartial, 0); - SET_80211_HDR_ADDRESS1(pProbeRequestPartial, BroadcastAddress); - SET_80211_HDR_ADDRESS2(pProbeRequestPartial, Adapter->CurrentAddress); - if(bBroadcastBssid) - { - SET_80211_HDR_ADDRESS3(pProbeRequestPartial, BroadcastAddress); - } - else - { - SET_80211_HDR_ADDRESS3(pProbeRequestPartial, Adapter->MgntInfo.Bssid); - } - - SET_80211_HDR_FRAGMENT_SEQUENCE(pProbeRequestPartial, 0); - - //3 Size of Probe Request, can not use sizeof(GeneralPacketPartial) - FillOctetString(ProbeReq, Buffer, 0x18); - - // TODO: Change length - if(bAnySsid) - { - FillOctetString(os, NULL, 0); - PacketMakeElement(&ProbeReq, EID_SsId, os); - } - else - { - PacketMakeElement(&ProbeReq, EID_SsId, pMgntInfo->Ssid); - } - - // Supported rates - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - - // - // Basic rate setting should follow default setting in registry - // instead of CurrentWirelessMode. Otherwise, previous connection may effect on - // later connection. Neo, 2011/11/9 - - // 2011/03/17 MH For 92D, we need to change RegWirelessMode when dual mac contrl algorithm - // want to switch between 2.4G & 5G. - if (IS_WIRELESS_MODE_24G(Adapter) ) - { - RegSuppRatesIdx = 2; - wirelessmode = WIRELESS_MODE_N_24G; - - if (Adapter->RegWirelessMode == WIRELESS_MODE_B) - { - RegSuppRatesIdx = 1; - wirelessmode = WIRELESS_MODE_B; - } - else if (Adapter->RegWirelessMode == WIRELESS_MODE_G) - wirelessmode = WIRELESS_MODE_G; - else if(Adapter->RegWirelessMode == WIRELESS_MODE_AC_24G) - wirelessmode = WIRELESS_MODE_AC_24G; - } - else if (IS_WIRELESS_MODE_5G(Adapter)) - { - RegSuppRatesIdx = 0; - - if(Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter) & WIRELESS_MODE_AC_5G) - wirelessmode = WIRELESS_MODE_AC_5G; - else - wirelessmode = WIRELESS_MODE_N_5G; - - if (Adapter->RegWirelessMode == WIRELESS_MODE_AC_5G) - wirelessmode = WIRELESS_MODE_AC_5G; - else if (Adapter->RegWirelessMode == WIRELESS_MODE_N_5G) - wirelessmode = WIRELESS_MODE_N_5G; - else if (Adapter->RegWirelessMode == WIRELESS_MODE_A) - wirelessmode = WIRELESS_MODE_A; - } -#if 0 - if(!Isdot11acAvailable(Adapter)) - { - if(wirelessmode == WIRELESS_MODE_AC_5G) - { - wirelessmode = WIRELESS_MODE_N_5G; - } - if(wirelessmode == WIRELESS_MODE_AC_24G) - { - wirelessmode = WIRELESS_MODE_N_24G; - } - RT_TRACE(COMP_MLME, DBG_TRACE, ("ConstructProbeRequest(): wirelessmode = %d\n", wirelessmode)); - } -#endif - - SelectSupportedRatesElement( wirelessmode, pMgntInfo->RegSuppRateSets[RegSuppRatesIdx], FALSE,&SuppRates, &ExtSuppRates ); - - PacketMakeElement(&ProbeReq, EID_SupRates, SuppRates); - // Extended supported rates - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&ProbeReq, EID_ExtSupRates, ExtSuppRates); - } - - - // - // Simple config IE. by CCW - copy from 818x - // - if(GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - { - WPS_AppendElement(Adapter, &ProbeReq, TRUE, WPS_INFO_PROBEREQ_IE); - } - - // - // For CCXv4 S59.2.3 - // - CCX_RM_AppendRmCapIE(Adapter, &ProbeReq); - - - //merge from 1020 to pass WHCK Scan_AdditionalIE - if( pMgntInfo->AdditionalProbeReqIESize > 0&& - pMgntInfo->AdditionalProbeReqIEData != NULL && - ProbeReq.Length + pMgntInfo->AdditionalProbeReqIESize <= sMaxMpduLng) - { - OCTET_STRING osAdditionalIEs; - osAdditionalIEs.Length = (u2Byte)pMgntInfo->AdditionalProbeReqIESize; - osAdditionalIEs.Octet = (pu1Byte)pMgntInfo->AdditionalProbeReqIEData; - - - AppendAdditionalIEs(&ProbeReq, osAdditionalIEs); - } - - - // - // HT Capability IE. by Joseph - according to 802.11n latest spec. - // - if( (Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter)>WIRELESS_MODE_AUTO) && - (Adapter->RegWirelessMode >= WIRELESS_MODE_AUTO)) - { - FillOctetString(os, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - HTConstructCapabilityElement(Adapter, &os, FALSE); - PacketMakeElement(&ProbeReq, EID_HTCapability, os); - } - - if(pMgntInfo->AdditionalProbeReqIESize > 0&& - pMgntInfo->AdditionalProbeReqIEData != NULL && - ProbeReq.Length + pMgntInfo->AdditionalProbeReqIESize <= sMaxMpduLng) - { - OCTET_STRING osAdditionalIEs; - osAdditionalIEs.Length = (u2Byte)pMgntInfo->AdditionalProbeReqIESize; - osAdditionalIEs.Octet = (pu1Byte)pMgntInfo->AdditionalProbeReqIEData; - - - AppendAdditionalIEs(&ProbeReq, osAdditionalIEs); - } - - if(wirelessmode == WIRELESS_MODE_AC_5G || wirelessmode == WIRELESS_MODE_AC_24G) - { - FillOctetString(os, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - VHTConstructCapabilityElement(Adapter, &os, FALSE); - PacketMakeElement(&ProbeReq, EID_VHTCapability, os); - } - -#if P2P_SUPPORT == 1 - // Solution for service discovery. - P2P_Append_ProbeReqIe(&ProbeReq, GET_P2P_INFO(Adapter)); -#endif - - // Append WFD Probe request IEs - WFD_AppendProbeReqIEs(Adapter, Adapter->MAX_TRANSMIT_BUFFER_SIZE, &ProbeReq); - - *pLength=ProbeReq.Length; -} - -// -// Description: -// Advanced version of ConstructProbeRequest, please refer to SendProbeReq for -// more information. -// 2006.12.20, by shien chang. -// -VOID -ConstructProbeRequestEx( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - OCTET_STRING Ssid, - BOOLEAN bForcePowerSave - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING ProbeReq; - pu1Byte pProbeRequestPartial; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Support Rates <= 255. - OCTET_STRING os; - u1Byte RegSuppRatesIdx=0; - WIRELESS_MODE wirelessmode = WIRELESS_MODE_UNKNOWN; - - pProbeRequestPartial = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pProbeRequestPartial, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pProbeRequestPartial, Type_Probe_Req); - SET_80211_HDR_PWR_MGNT(pProbeRequestPartial, (bForcePowerSave) ? 1 : 0); - SET_80211_HDR_DURATION(pProbeRequestPartial, 0); - SET_80211_HDR_ADDRESS1(pProbeRequestPartial, BroadcastAddress); - SET_80211_HDR_ADDRESS2(pProbeRequestPartial, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pProbeRequestPartial, BroadcastAddress); - - SET_80211_HDR_FRAGMENT_SEQUENCE(pProbeRequestPartial, 0); - - //3 Size of Probe Request, can not use sizeof(GeneralPacketPartial) - FillOctetString(ProbeReq, Buffer, 0x18); - - // Probe request with SSID. - PacketMakeElement(&ProbeReq, EID_SsId, Ssid); - - // Supported rates -// PacketMakeElement(&ProbeReq, EID_SupRates, Adapter->MgntInfo.SupportedRates); - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - - // - // Basic rate setting should follow default setting in registry - // instead of CurrentWirelessMode. Otherwise, previous connection may effect on - // later connection. Neo, 2011/11/9 - - // 2011/03/17 MH For 92D, we need to change RegWirelessMode when dual mac contrl algorithm - // want to switch between 2.4G & 5G. - if (IS_WIRELESS_MODE_24G(Adapter) ) - { - RegSuppRatesIdx = 2; - wirelessmode = WIRELESS_MODE_N_24G; - - if (Adapter->RegWirelessMode == WIRELESS_MODE_B) - { - RegSuppRatesIdx = 1; - wirelessmode = WIRELESS_MODE_B; - } - else if (Adapter->RegWirelessMode == WIRELESS_MODE_G) - wirelessmode = WIRELESS_MODE_G; - else if(Adapter->RegWirelessMode == WIRELESS_MODE_AC_24G) - wirelessmode = WIRELESS_MODE_AC_24G; - } - else if (IS_WIRELESS_MODE_5G(Adapter)) - { - RegSuppRatesIdx = 0; - - if(Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter) & WIRELESS_MODE_AC_5G) - wirelessmode = WIRELESS_MODE_AC_5G; - else - wirelessmode = WIRELESS_MODE_N_5G; - - if (Adapter->RegWirelessMode == WIRELESS_MODE_AC_5G) - wirelessmode = WIRELESS_MODE_AC_5G; - else if (Adapter->RegWirelessMode == WIRELESS_MODE_N_5G) - wirelessmode = WIRELESS_MODE_N_5G; - else if (Adapter->RegWirelessMode == WIRELESS_MODE_A) - wirelessmode = WIRELESS_MODE_A; - } - - SelectSupportedRatesElement( wirelessmode, pMgntInfo->RegSuppRateSets[RegSuppRatesIdx], FALSE,&SuppRates, &ExtSuppRates ); - PacketMakeElement(&ProbeReq, EID_SupRates, SuppRates); - // Extended supported rates - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&ProbeReq, EID_ExtSupRates, ExtSuppRates); - } - - // - // Simple config IE. by CCW - copy from 818x - // - if(GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - { - WPS_AppendElement(Adapter, &ProbeReq, TRUE, WPS_INFO_PROBEREQ_IE); - } - - // - // HT Capability IE. by Joseph - according to 802.11n latest spec. - // - if((Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter)>WIRELESS_MODE_AUTO) && - (Adapter->RegWirelessMode >= WIRELESS_MODE_AUTO)) - { - FillOctetString(os, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - HTConstructCapabilityElement(Adapter, &os, FALSE); - PacketMakeElement(&ProbeReq, EID_HTCapability, os); - } - -#if P2P_SUPPORT == 1 - // Solution for service discovery. - P2P_Append_ProbeReqIe(&ProbeReq, GET_P2P_INFO(Adapter)); -#endif - - // Append WFD Probe request IEs - WFD_AppendProbeReqIEs(Adapter, Adapter->MAX_TRANSMIT_BUFFER_SIZE, &ProbeReq); - - if((Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter) & WIRELESS_MODE_AC_5G) && - (Adapter->RegWirelessMode ==WIRELESS_MODE_AUTO || Adapter->RegWirelessMode == WIRELESS_MODE_AC_5G)) - { - FillOctetString(os, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - VHTConstructCapabilityElement(Adapter, &os, FALSE); - PacketMakeElement(&ProbeReq, EID_VHTCapability, os); - } - - *pLength=ProbeReq.Length; -} - -VOID -ConstructAuthenticatePacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte auStaAddr, - u1Byte AuthAlg, - u1Byte AuthSeq, - u1Byte AuthStatusCode, - OCTET_STRING AuthChallengetext - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte pAuthPartial = Buffer; - OCTET_STRING osAuthPkt = {Buffer, 0}; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> ConstructAuthenticatePacket()\n")); - - SET_80211_HDR_FRAME_CONTROL(osAuthPkt.Octet, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(osAuthPkt.Octet, Type_Auth); - SET_80211_HDR_DURATION(osAuthPkt.Octet, 0); - - SET_80211_HDR_ADDRESS1(osAuthPkt.Octet, auStaAddr); - SET_80211_HDR_ADDRESS2(osAuthPkt.Octet, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(osAuthPkt.Octet, Adapter->MgntInfo.Bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(osAuthPkt.Octet, 0); - - if(AuthSeq != 3) - { - //add for CCX NETWORK EAP (LEAP) 2006.07.31 ,by CCW - if( !Adapter->MgntInfo.bNETWORKEAP) - SET_AUTH_FRAME_AUTH_ALG_NUM(osAuthPkt.Octet, AuthAlg); // Auth Algorithm: Open system - else - SET_AUTH_FRAME_AUTH_ALG_NUM(osAuthPkt.Octet, NETWORK_EAP); //Auth Algorithm: NETWORK EAP - - SET_AUTH_FRAME_AUTH_SEQ_NUM(osAuthPkt.Octet, AuthSeq); // Auth Seq Num - SET_AUTH_FRAME_STATUS_CODE(osAuthPkt.Octet, AuthStatusCode); // Status Code: Reserved - - osAuthPkt.Length = 30; - - if( AuthChallengetext.Length != 0 ){ - pu1Byte buf = GET_AUTH_FRAME_CHALLENG_TEXT(osAuthPkt.Octet); - buf[0] = (u1Byte)EID_Ctext; - buf[1] = (u1Byte)AuthChallengetext.Length; - PlatformMoveMemory( buf + 2, AuthChallengetext.Octet, AuthChallengetext.Length); - osAuthPkt.Length += (AuthChallengetext.Length + 2); - } - else if(1 == AuthSeq) - { - //4 // RSN IE - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_AppendRSNIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &osAuthPkt // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("Fail (0x%08X) to append RSN IE\n", rtStatus)); - } - - //4 // Fast Transition MD IE - if(RT_STATUS_SUCCESS != (rtStatus = - FT_AppendMdIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &osAuthPkt // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_MLME, DBG_TRACE, ("Fail (0x%08X) to append MD IE\n", rtStatus)); - } - - //4 // Fast Transition FT IE - if(RT_STATUS_SUCCESS != (rtStatus = - FT_AppendFtIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &osAuthPkt // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_MLME, DBG_TRACE, ("Fail (0x%08X) to append FT IE\n", rtStatus)); - } - } - } - else - { // 3rd auth frame. 2005.03.08, by rcnjko. - // Set WEP bit, see also MgntGetEncryptionInfo(), 2005.08.18, by rcnjko. - SET_80211_HDR_WEP(osAuthPkt.Octet, 1); - - // Auth Alg Num. - *((UNALIGNED pu2Byte)(osAuthPkt.Octet+28)) = EF2Byte(AuthAlg); // 24+4+0, 802.11 Header + IV + field offset - // Auth Seq Num. - *((UNALIGNED pu2Byte)(osAuthPkt.Octet+30)) = EF2Byte(AuthSeq); // 24+4+2 - // Status Code. - *((UNALIGNED pu2Byte)(osAuthPkt.Octet+32)) = EF2Byte(AuthStatusCode); // 24+4+4 - osAuthPkt.Length = 34; // 24+4+6 - - // Challenge text. - if( AuthChallengetext.Length != 0 ) - { - pu1Byte buf = osAuthPkt.Octet + 34; // 24+4+6 - - buf[0] = (u1Byte)EID_Ctext; - buf[1] = (u1Byte)AuthChallengetext.Length; - PlatformMoveMemory( buf + 2, AuthChallengetext.Octet, AuthChallengetext.Length); - osAuthPkt.Length += (AuthChallengetext.Length + 2); - } - } - *pLength = osAuthPkt.Length; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== ConstructAuthenticatePacket()\n")); -} - -VOID -ConstructAssociateReqEpig( - IN PADAPTER Adapter, - IN POCTET_STRING pAsocReq, - IN POCTET_STRING pVHTCap - ) -{ - OCTET_STRING EpigIE; - u1Byte EpigIEContent[100]; - - if(Adapter->MgntInfo.bRegIOTBcm256QAM == FALSE) - return; - - FillOctetString(EpigIE, EpigIEContent, 0); - - { - u1Byte Epigram11ACCap[7] = {0x00, 0x90, 0x4C, 0x04, 0x08, 0xBF, 0x0C} ; - PlatformMoveMemory(EpigIEContent, Epigram11ACCap, 7); - PlatformMoveMemory(EpigIEContent+7, pVHTCap->Octet, pVHTCap->Length); - EpigIE.Length = 19; - PacketMakeElement(pAsocReq, EID_Vendor, EpigIE); - } - -} - - -VOID -ConstructAssociateReq( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocListenInterval, - OCTET_STRING asocSsid, - OCTET_STRING asocSuppRates - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING AsocReq; - pu1Byte pAsocPartial; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Extended Support Rates <= 255. - BOOLEAN bFilterCck = FALSE; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> ConstructAssociateReq()\n")); - - // - // Construct CCXv5 Special Association Req Packet for S64 Diagnostic Channel. - // By Bruce, 2009-09-21. - // - if (CCX_Construct_DiagChnl_AssocReq(Adapter, Buffer, pLength)) - return; - - pAsocPartial = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pAsocPartial, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pAsocPartial, Type_Asoc_Req); - SET_80211_HDR_DURATION(pAsocPartial, 0); - - SET_80211_HDR_ADDRESS1(pAsocPartial, asocStaAddr); - SET_80211_HDR_ADDRESS2(pAsocPartial, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pAsocPartial, Adapter->MgntInfo.Bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(pAsocPartial, 0); - - // TODO: Change this - SET_ASOC_REQ_CAPABILITY_INFO(pAsocPartial, asocCap); - SET_ASOC_REQ_LISTEN_INTERVAL(pAsocPartial, asocListenInterval); - - //3 Size of Associate Request, can not use sizeof(AssociateReqPartial) - FillOctetString(AsocReq, Buffer, 0x1c); - - // SSID element - PacketMakeElement(&AsocReq, EID_SsId, asocSsid); - - P2P_ConstructAssociateReqFilterCck(Adapter, AsocReq, &bFilterCck); - - // Supported rates element - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - SelectSupportedRatesElement( pMgntInfo->dot11CurrentWirelessMode, asocSuppRates, bFilterCck, &SuppRates, &ExtSuppRates ); - PacketMakeElement(&AsocReq, EID_SupRates, SuppRates); - - // Extended supported rates - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&AsocReq, EID_ExtSupRates, ExtSuppRates); - } - - if(!GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - { - // RSNIE. 2004/07/22, kcwu. - if(pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch) - { - //Fix WPA/WPA2 AP connect fail when wapi is support - //Modified by ylb, 20110906 - if (pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWAPI || pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeCertificateWAPI ) - { - WAPI_SecFuncHandler(WAPI_CONSTRUCTASSOCIATEREQ, Adapter, (PVOID)&AsocReq, WAPI_END); - } - else - { - //4 // WPA IE - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_AppendWPAIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &AsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("Fail (0x%08X) to append WPA IE\n", rtStatus)); - } - - //4 // RSN IE - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_AppendRSNIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &AsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("Fail (0x%08X) to append RSN IE\n", rtStatus)); - } - - //4 // Fast Transition MD IE - if(RT_STATUS_SUCCESS != (rtStatus = - FT_AppendMdIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &AsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Fail (0x%08X) to append MD IE\n", rtStatus)); - } - } - } - } - - DFS_StaConstructAssociateReq(Adapter, asocCap, AsocReq); - - if( pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE ) - { - PacketMakeElement( &AsocReq, EID_Vendor, pMgntInfo->pStaQos->WMMIE ); - } - - // Append CCX Aironet IE for CCXv1 S19, S13, CCXv4 S61. - CCX_AppendAironetIE(Adapter, &AsocReq); - - // CCX 2 S31 AP Control of Client Transmit Power (TPC). - CCX_AppendCcxCellPowerIE(Adapter, &AsocReq); - - // For CCX 2 S36, Radio Management Capability element, 2006.05.15, by rcnjko. - CCX_RM_AppendRmCapIE(Adapter, &AsocReq); - - // For CCX 2 S38, WLAN Device Version Number element. - CCX_AppendCcxVerIE(Adapter, &AsocReq); - - // For CCX S67 MFP - CCX_AppendCcxSFAIE(Adapter, &AsocReq); - - // Include High Throuput capability - if( pMgntInfo->pHTInfo->bCurrentHTSupport ) - { - // Construct HTCapability and HTInfo IE - OCTET_STRING osHTCap; - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): Trying to associate to an 802.11n HT AP\n")); - FillOctetString(osHTCap, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - HTConstructCapabilityElement(Adapter, &osHTCap, TRUE); - if(pMgntInfo->pHTInfo->ePeerHTSpecVer == HT_SPEC_VER_EWC) - PacketMakeElement(&AsocReq, EID_Vendor, osHTCap); - else - PacketMakeElement(&AsocReq, EID_HTCapability, osHTCap); - - BSS_AppendExentedCapElement(Adapter, &AsocReq); - } - - if(pMgntInfo->pVHTInfo->bCurrentVHTSupport ) - { - OCTET_STRING osVHTCap; - u1Byte opmode = 0; - OCTET_STRING osVHTNotif; - CHANNEL_WIDTH opNotifBW = CHNL_GetRegBWSupport(Adapter); - u1Byte opNotifNss = pMgntInfo->pVHTInfo->nRxSPStream; - - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): Trying to associate to an 802.11ac VHT AP\n")); - FillOctetString(osVHTCap, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - VHTConstructCapabilityElement(Adapter, &osVHTCap, TRUE); - PacketMakeElement(&AsocReq, EID_VHTCapability, osVHTCap); - - if(pMgntInfo->pVHTInfo->bOpModeNotif) - { - opNotifBW = pMgntInfo->pVHTInfo->BWToSwitch; - DbgPrint("pMgntInfo->pVHTInfo->bOpModeNotif = TRYE BW = %d\n", opNotifBW); - opNotifNss = pMgntInfo->pVHTInfo->RxSSToSwitch; - } - - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): carry operating mode notification with BW(%d) RxSS(%d)\n", opNotifBW, opNotifNss)); - FillOctetString(osVHTNotif, &opmode, sizeof(opmode)); - SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(&opmode, opNotifBW); - SET_VHT_OPERATING_MODE_FIELD_RX_NSS(&opmode, (opNotifNss-1)); - SET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(&opmode, pMgntInfo->pVHTInfo->RxSSTypeBfmeeToSwitch); - - PacketMakeElement(&AsocReq, EID_OpModeNotification, osVHTNotif); - } - - // For WiFi VHT Testbed, it requires special feature: VHT under TKIP & WEP mode - if(pMgntInfo->VhtWeakSecurity > 0) - { - OCTET_STRING osHTCap; - OCTET_STRING osVHTCap; - WIRELESS_MODE wirelessModeBackup = pMgntInfo->dot11CurrentWirelessMode; - - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): Trying to associate to an 802.11n HT AP\n")); - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): carry VHT IE due to WiFi tested special feature\n")); - FillOctetString(osHTCap, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - FillOctetString(osVHTCap, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - - pMgntInfo->dot11CurrentWirelessMode = WIRELESS_MODE_AC_5G; - MgntRefreshSuppRateSet(Adapter); - pMgntInfo->dot11CurrentWirelessMode = wirelessModeBackup; - - // HT IE - HTConstructCapabilityElement(Adapter, &osHTCap, TRUE); - PacketMakeElement(&AsocReq, EID_HTCapability, osHTCap); - // VHT IE - VHTConstructCapabilityElement(Adapter, &osVHTCap, TRUE); - PacketMakeElement(&AsocReq, EID_VHTCapability, osVHTCap); - } - - // Construct Realtek Proprietary Aggregation mode (Set AMPDU Factor to 2, 32k) - //2008.08.13 If connect to realtek ap, append realtek OUI for WOW - if(pMgntInfo->bRealtekAggCapExist) - { - OCTET_STRING osRealtekIEType2; - FillOctetString(osRealtekIEType2, pMgntInfo->RTIEType2Buffer, sizeof(pMgntInfo->RTIEType2Buffer)); - ConstructRTKAggElement(Adapter, &osRealtekIEType2); - PacketMakeElement(&AsocReq, EID_Vendor, osRealtekIEType2); - } - - // - // Simple config IE. by CCW - copy from 818x - // - if(GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - { - WPS_AppendElement(Adapter, &AsocReq, FALSE, WPS_INFO_ASOCREQ_IE); - } - - // - // CCX4 CAC -- TSPEC IE, 2006.06.26, by shien chang. - // - if (CCX_CAC_IsVoiceTsExist(Adapter)) - { - WMM_TSPEC tsVoice, tsSignal; - OCTET_STRING VoiceEle, SignalEle; - PQOS_TSTREAM pTs = NULL; - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte tidVoice = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("ConstructAssociateReq(): CCX_CAC_ConstructVoiceTspec...\n")); - CCX_CAC_ConstructVoiceTspec(Adapter, tsVoice); - FillOctetString(VoiceEle, &tsVoice[2], TSPEC_SIZE - 2); - PacketMakeElement( &AsocReq, EID_Vendor, VoiceEle ); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("ConstructAssociateReq(): CCX_CAC_ConstructSignalTspec...\n")); - CCX_CAC_ConstructSignalTspec(Adapter, tsSignal); - FillOctetString(SignalEle, &tsSignal[2], TSPEC_SIZE - 2); - PacketMakeElement( &AsocReq, EID_Vendor, SignalEle ); - - // TSRS IE - pTs = &(pStaQos->StaTsArray[tidVoice]); - if (QOS_RATE_TO_BPS( QosGetNPR(Adapter, pTs) ) >= - GET_TSPEC_MIN_PHY_RATE(pTs->OutStandingTSpec) ) - { - QosConstructTSRS(Adapter, pTs, &AsocReq); - } - } - -#if (WPS_SUPPORT == 1) - // Append customized IE, by hpfan - if(pMgntInfo->bCustomizedAsocIE) - { - OCTET_STRING osCustomizedIE; - - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, ("ConstructAssociateReq(): append customzied association req IE\n"), pMgntInfo->CustomizedAsocIEBuf, pMgntInfo->CustomizedAsocIELength); - osCustomizedIE.Length = pMgntInfo->CustomizedAsocIELength; - osCustomizedIE.Octet = &pMgntInfo->CustomizedAsocIEBuf[0]; - AppendAdditionalIEs(&AsocReq, osCustomizedIE); - } -#endif - - // - // Append additional IEs. By haich, 2008.11.27. - // - RT_PRINT_DATA(COMP_OID_SET | COMP_MLME, DBG_LOUD, "ConstructAssociateReq(): append AssocReqIE", - pMgntInfo->AdditionalAssocReqIEData, pMgntInfo->AdditionalAssocReqIESize); - - if(pMgntInfo->AdditionalAssocReqIESize > 0&& - pMgntInfo->AdditionalAssocReqIEData != NULL && - AsocReq.Length + pMgntInfo->AdditionalAssocReqIESize <= sMaxMpduLng) - { - OCTET_STRING osAdditionalIEs; - osAdditionalIEs.Length = (u2Byte)pMgntInfo->AdditionalAssocReqIESize; - osAdditionalIEs.Octet = (pu1Byte)pMgntInfo->AdditionalAssocReqIEData; - - - AppendAdditionalIEs(&AsocReq, osAdditionalIEs); - } - -#if (P2P_SUPPORT == 1) - P2P_Append_AssociationReqIe(&AsocReq, Adapter); -#endif - - WFD_AppendAssocReqIEs(Adapter, Adapter->MAX_TRANSMIT_BUFFER_SIZE, &AsocReq); - - *pLength=AsocReq.Length; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== ConstructAssociateReq()\n")); -} - -VOID -ConstructReAssociateReq( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte ReasocStaAddr, - u2Byte ReasocCap, - u2Byte ReasocListenInterval, - pu1Byte CurrentasocStaAddr, - OCTET_STRING ReasocSsid, - OCTET_STRING ReasocSuppRates - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING ReAsocReq; - pu1Byte pReAsocPartial; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Extended Support Rates <= 255. - OCTET_STRING CCKMIE; - u1Byte CCKMIEBuff[30] ={0}; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> ConstructReAssociateReq()\n")); - - pReAsocPartial = Buffer; - //Init CCKM IE - CCKMIE.Octet = CCKMIEBuff; - - SET_80211_HDR_FRAME_CONTROL(pReAsocPartial, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pReAsocPartial, Type_Reasoc_Req); - SET_80211_HDR_DURATION(pReAsocPartial, 0); - - SET_80211_HDR_ADDRESS1(pReAsocPartial, ReasocStaAddr); - SET_80211_HDR_ADDRESS2(pReAsocPartial, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pReAsocPartial, ReasocStaAddr); - SET_80211_HDR_FRAGMENT_SEQUENCE(pReAsocPartial, 0); - - // TODO: Change this - SET_REASOC_REQ_CAPABILITY_INFO(pReAsocPartial, ReasocCap); - SET_REASOC_REQ_LISTEN_INTERVAL(pReAsocPartial, ReasocListenInterval); - - PlatformMoveMemory( GET_REASOC_REQ_CURR_AP_ADDR(pReAsocPartial), CurrentasocStaAddr, 6); - - //3 Size of Associate Request, can not use sizeof(AssociateReqPartial) - FillOctetString(ReAsocReq, Buffer, 0x22); - - // SSID element - PacketMakeElement(&ReAsocReq, EID_SsId, ReasocSsid); - - // Supported rates element - // PacketMakeElement(&AsocReq, EID_SupRates, Adapter->MgntInfo.SupportedRates); - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - SelectSupportedRatesElement( pMgntInfo->dot11CurrentWirelessMode, ReasocSuppRates, FALSE, &SuppRates, &ExtSuppRates ); - PacketMakeElement(&ReAsocReq, EID_SupRates, SuppRates); - - // Extended supported rates - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&ReAsocReq, EID_ExtSupRates, ExtSuppRates); - } - - if(!GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - { - // RSNIE. 2004/07/22, kcwu. - if(pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch) - { - //Fix WPA/WPA2 AP connect fail when wapi is support - //Modified by ylb, 20110906 - if (pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWAPI || pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeCertificateWAPI ) - { - WAPI_SecFuncHandler(WAPI_CONSTRUCTASSOCIATEREQ, Adapter, (PVOID)&ReAsocReq, WAPI_END); - } - else if(pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch) - { - //4 // WPA IE - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_AppendWPAIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &ReAsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("Fail (0x%08X) to append WPA IE\n", rtStatus)); - } - - //4 // RSN IE - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_AppendRSNIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &ReAsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("Fail (0x%08X) to append RSN IE\n", rtStatus)); - } - - //4 // Fast Transition MD IE - if(RT_STATUS_SUCCESS != (rtStatus = - FT_AppendMdIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &ReAsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Fail (0x%08X) to append MD IE\n", rtStatus)); - } - - //4 // Fast Transition FT IE - if(RT_STATUS_SUCCESS != (rtStatus = - FT_AppendFtIE( - Adapter, // Adapter context - (CONTENT_PKT_TYPE_802_11 | CONTENT_PKT_TYPE_CLIENT), // content type - &(pMgntInfo->targetBSS), // target info - sizeof(RT_WLAN_BSS), // target info length - Adapter->MAX_TRANSMIT_BUFFER_SIZE, // Content max length capacity - &ReAsocReq // Packet Content octet string - ))) - { - RT_TRACE_F(COMP_MLME, DBG_TRACE, ("Fail (0x%08X) to append FT IE\n", rtStatus)); - } - } - } - } - - // WMM-IE. Added by Annie, 2005-11-08. - if( pMgntInfo->pStaQos->CurrentQosMode>QOS_DISABLE ) - { - PacketMakeElement(&ReAsocReq, EID_Vendor, pMgntInfo->pStaQos->WMMIE); - } - - // Append CCX Aironet IE for CCXv1 S19, S13, CCXv4 S61. - CCX_AppendAironetIE(Adapter, &ReAsocReq); - - // CCX 2 S31 AP Control of Client Transmit Power (TPC). - CCX_AppendCcxCellPowerIE(Adapter, &ReAsocReq); - - // For CCX 2 S36, Radio Management Capability element, 2006.05.15, by rcnjko. - CCX_RM_AppendRmCapIE(Adapter, &ReAsocReq); - - // For CCX 2 S38, WLAN Device Version Number element. - CCX_AppendCcxVerIE(Adapter, &ReAsocReq); - - // For CCX S67 MFP - CCX_AppendCcxSFAIE(Adapter, &ReAsocReq); - - // CCKM Fast Roam , by CCW - CCX_ConstructReAssociateReq(Adapter, &ReAsocReq); - - - // Include High Throuput capability && Realtek proprietary - if( pMgntInfo->pHTInfo->bCurrentHTSupport ) - { - // - // Construct HTCapability and HTInfo IE - // - OCTET_STRING osHTCap; - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): Trying to associate to an 802.11n HT AP\n")); - FillOctetString(osHTCap, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - HTConstructCapabilityElement(Adapter, &osHTCap, TRUE); - if(pMgntInfo->pHTInfo->ePeerHTSpecVer == HT_SPEC_VER_EWC) - PacketMakeElement(&ReAsocReq, EID_Vendor, osHTCap); - else - PacketMakeElement(&ReAsocReq, EID_HTCapability, osHTCap); - } - - if( pMgntInfo->pVHTInfo->bCurrentVHTSupport ) - { - OCTET_STRING osVHTCap; - u1Byte opmode = 0; - OCTET_STRING osVHTNotif; - CHANNEL_WIDTH opNotifBW = CHNL_GetRegBWSupport(Adapter); - u1Byte opNotifNss = pMgntInfo->pVHTInfo->nRxSPStream; - - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): Trying to associate to an 802.11ac VHT AP\n")); - FillOctetString(osVHTCap, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - VHTConstructCapabilityElement(Adapter, &osVHTCap, TRUE); - PacketMakeElement(&ReAsocReq, EID_VHTCapability, osVHTCap); - - if(pMgntInfo->pVHTInfo->bOpModeNotif) - { - opNotifBW = pMgntInfo->pVHTInfo->BWToSwitch; - DbgPrint("pMgntInfo->pVHTInfo->bOpModeNotif = TRYE BW = %d 222\n", opNotifBW); - opNotifNss = pMgntInfo->pVHTInfo->RxSSToSwitch; - } - - RT_TRACE(COMP_HT, DBG_LOUD, ("ConstructAssociateReq(): carry operating mode notification with BW(%d) RxSS(%d)\n", opNotifBW, opNotifNss)); - FillOctetString(osVHTNotif, &opmode, sizeof(opmode)); - SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(&opmode, opNotifBW); - SET_VHT_OPERATING_MODE_FIELD_RX_NSS(&opmode, (opNotifNss-1)); - SET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(&opmode, pMgntInfo->pVHTInfo->RxSSTypeBfmeeToSwitch); - - PacketMakeElement(&ReAsocReq, EID_OpModeNotification, osVHTNotif); - } - - // - // Construct Realtek Proprietary Aggregation mode (Set AMPDU Factor to 2, 32k) - // - //2008.08.13 If connect to realtek ap, append realtek OUI for WOW - if(pMgntInfo->bRealtekAggCapExist) - { - OCTET_STRING osRealtekIEType2; - FillOctetString(osRealtekIEType2, pMgntInfo->RTIEType2Buffer, sizeof(pMgntInfo->RTIEType2Buffer)); - ConstructRTKAggElement(Adapter, &osRealtekIEType2); - PacketMakeElement(&ReAsocReq, EID_Vendor, osRealtekIEType2); - } - - - // - // Simple config IE. by CCW - copy from 818x - // - if(GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - { - WPS_AppendElement(Adapter, &ReAsocReq, FALSE, WPS_INFO_ASOCREQ_IE); - } - - // - // CCX4 CAC -- TSPEC IE, 2006.06.26, by shien chang. - // - if (CCX_CAC_IsVoiceTsExist(Adapter)) - { - WMM_TSPEC tsVoice, tsSignal; - OCTET_STRING VoiceEle, SignalEle; - PQOS_TSTREAM pTs = NULL; - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte tidVoice = 0; - RT_DISP( FCCX, CCX_CAC, ( "VoTs exists, append Voice TSPEC Signal TSPEC in Reassoc Req\n" ) ); - - CCX_CAC_ConstructVoiceTspec(Adapter, tsVoice); - FillOctetString(VoiceEle, &tsVoice[2], TSPEC_SIZE - 2); - PacketMakeElement( &ReAsocReq, EID_Vendor, VoiceEle ); - - CCX_CAC_ConstructSignalTspec(Adapter, tsSignal); - FillOctetString(SignalEle, &tsSignal[2], TSPEC_SIZE - 2); - PacketMakeElement( &ReAsocReq, EID_Vendor, SignalEle ); - - // TSRS IE - pTs = &(pStaQos->StaTsArray[tidVoice]); - if (QOS_RATE_TO_BPS( QosGetNPR(Adapter, pTs) ) >= - GET_TSPEC_MIN_PHY_RATE(pTs->OutStandingTSpec) ) - { - RT_DISP( FCCX, CCX_CAC, ( "Append TSRS in Reassoc Req\n" ) ); - QosConstructTSRS(Adapter, pTs, &ReAsocReq); - } - } - -#if (P2P_SUPPORT == 1) - P2P_Append_AssociationReqIe(&ReAsocReq, Adapter); -#endif - - WFD_AppendAssocReqIEs(Adapter, Adapter->MAX_TRANSMIT_BUFFER_SIZE, &ReAsocReq); - - WriteEF4Byte(pLength, ReAsocReq.Length); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== ConstructReAssociateReq()\n")); -} - -// -// Description: Construct a Association Response packet. -// 2005.06.02, by rcnjko. -// -VOID -ConstructAssociateRsp( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocStatusCode, - u2Byte asocID, - BOOLEAN bReAssocRsp, - BOOLEAN bQosSTA - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING AsocRsp; - BOOLEAN bFilterCck = FALSE; - pu1Byte pAsocRspPartial; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Extended Support Rates <= 255. - - pAsocRspPartial = Buffer; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - // Frame Control. - SET_80211_HDR_FRAME_CONTROL(pAsocRspPartial, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pAsocRspPartial, (bReAssocRsp ? Type_Reasoc_Rsp : Type_Asoc_Rsp)); - SET_80211_HDR_DURATION(pAsocRspPartial, 0); - - // Addresses (DA/SA/BSSID). - SET_80211_HDR_ADDRESS1(pAsocRspPartial, asocStaAddr); - SET_80211_HDR_ADDRESS2(pAsocRspPartial, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pAsocRspPartial, pMgntInfo->Bssid); - - // Sequence Control. - SET_80211_HDR_FRAGMENT_SEQUENCE(pAsocRspPartial, 0); - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - // Capability information. - SET_ASOC_RSP_CAPABILITY_INFO(pAsocRspPartial, asocCap); - - // Status Code. - SET_ASOC_RSP_STATUS_CODE(pAsocRspPartial, asocStatusCode); - - // AID. - SET_ASOC_RSP_AID(pAsocRspPartial, (asocID | 0xC000) ); - - // Size of this Frame until last fixed size field. - AsocRsp.Length = 30; - AsocRsp.Octet = Buffer; - - // Supported rates element. - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - - P2P_FilerCck(Adapter, &bFilterCck); - - SelectSupportedRatesElement( pMgntInfo->dot11CurrentWirelessMode, pMgntInfo->dot11OperationalRateSet, bFilterCck, &SuppRates, &ExtSuppRates ); - PacketMakeElement(&AsocRsp, EID_SupRates, SuppRates); - - // Wireless mode dependent elements. - if( IS_WIRELESS_OFDM_24G(Adapter)) - { - // Extended Supported Rates. - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&AsocRsp, EID_ExtSupRates, ExtSuppRates); - } - } - - if(bQosSTA) - { - Ap_AppendWmmIe(Adapter, &AsocRsp); - } - - // Include High Throuput capability and High Throuput info, Guangan add this for 40MHz ap mode. - if(IS_WIRELESS_MODE_N(Adapter)) - { - OCTET_STRING osHTCap, osHTInfo; - FillOctetString(osHTCap, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - FillOctetString(osHTInfo, &(pMgntInfo->pHTInfo->SelfHTInfo), sizeof(pMgntInfo->pHTInfo->SelfHTInfo)); - HTConstructCapabilityElement(Adapter, &osHTCap, TRUE); - HTConstructInfoElement(Adapter, &osHTInfo); - - // TODO: Construct CAP info element here - PacketMakeElement(&AsocRsp, EID_HTCapability, osHTCap); - PacketMakeElement(&AsocRsp, EID_HTInfo, osHTInfo); - } - - if(IS_WIRELESS_MODE_AC(Adapter)) - { - OCTET_STRING osVHTCap, osVHTOperation; - FillOctetString(osVHTCap, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - FillOctetString(osVHTOperation, &(pMgntInfo->pVHTInfo->SelfVHTInfo), sizeof(pMgntInfo->pVHTInfo->SelfVHTInfo)); - VHTConstructCapabilityElement(Adapter, &osVHTCap, TRUE); - VHTConstructOperationElement(Adapter, &osVHTOperation); - - // TODO: Construct CAP info element here - PacketMakeElement(&AsocRsp, EID_VHTCapability, osVHTCap); - PacketMakeElement(&AsocRsp, EID_VHTOperation, osVHTOperation); - } - - if(ACTING_AS_AP(Adapter)) - { - // - // Append IE for AsocRsp from OS. - // - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, asocStaAddr); - - if(pEntry) - { - OCTET_STRING asocReqIe = {NULL, 0}; - OCTET_STRING wpsIe = {NULL, 0}; - - if(pEntry->AP_AsocRspIEFromOSLength > 0&& - pEntry->AP_AsocRspIEFromOS != NULL && - AsocRsp.Length + pEntry->AP_AsocRspIEFromOSLength <= sMaxMpduLng) - { - OCTET_STRING osAsocRspIEFromOS; - osAsocRspIEFromOS.Length = (u2Byte)pEntry->AP_AsocRspIEFromOSLength; - osAsocRspIEFromOS.Octet = pEntry->AP_AsocRspIEFromOS; - AppendAdditionalIEs(&AsocRsp, osAsocRspIEFromOS); - } - - if(pEntry->AP_RecvAsocReqLength) // for WDI this is 0 - { - FillOctetString(asocReqIe, pEntry->AP_RecvAsocReq, (u2Byte)pEntry->AP_RecvAsocReqLength); - wpsIe = PacketGetElement(asocReqIe, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUBTYPE_DONT_CARE); - if(wpsIe.Length > 0) - { - WPS_AppendElement(Adapter, &AsocRsp, TRUE, WPS_INFO_ASOCRSP_IE); - } - } - } - } - -#if (P2P_SUPPORT == 1) - P2P_Append_AssociationRspIe(&AsocRsp, Adapter); -#endif - - WFD_AppendAssocRspIEs(Adapter, Adapter->MAX_TRANSMIT_BUFFER_SIZE, &AsocRsp); - - WriteEF4Byte(pLength, AsocRsp.Length); -} - - -VOID -ConstructDeauthenticatePacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte auSta, - u1Byte asRsn -) -{ - pu1Byte pdeauth; - OCTET_STRING Deauth; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - - pdeauth = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pdeauth, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pdeauth, Type_Deauth); - SET_80211_HDR_DURATION(pdeauth, 0); - - SET_80211_HDR_ADDRESS1(pdeauth, auSta); - SET_80211_HDR_ADDRESS2(pdeauth, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pdeauth, Adapter->MgntInfo.Bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(pdeauth, 0); - - // Size of this Frame until last fixed size field. - Deauth.Octet = Buffer; - Deauth.Length = sMacHdrLng; - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - CCX_ConstructDeauthenticatePacket(Adapter, pdeauth, &Deauth); - - if( pMgntInfo->bInBIPMFPMode ) - { - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP && // Now we just support AES MFP !! - !(MacAddr_isBcst(auSta) )) - { - // Set WEP bit !! - SET_80211_HDR_WEP( pdeauth , 1 ); - - if(pSecInfo->EncryptionHeadOverhead > 0) - { - PlatformZeroMemory( ( Deauth.Octet+ Deauth.Length ) , pSecInfo->EncryptionHeadOverhead); - Deauth.Length += pSecInfo->EncryptionHeadOverhead; - } - } - } - - // Add reason code - WriteEF2Byte( ( Deauth.Octet+ Deauth.Length ) , asRsn ); - Deauth.Length += 2; - - // - // if need, Append MHDRIE - // - CCX_AppendMHDRIE( Adapter, &Deauth ); - - if( pMgntInfo->bInBIPMFPMode && (MacAddr_isBcst(auSta))) - { - SecAppenMMIE( Adapter, &Deauth ); - } - - *pLength = Deauth.Length; -} - - - - -VOID -ConstructDisassociatePacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte asSta, - u1Byte asRsn -) -{ - pu1Byte pdisassoc; - OCTET_STRING Disas; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - - pdisassoc = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pdisassoc, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pdisassoc, Type_Disasoc); - SET_80211_HDR_DURATION(pdisassoc, 0); - - SET_80211_HDR_ADDRESS1(pdisassoc, asSta); - SET_80211_HDR_ADDRESS2(pdisassoc, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pdisassoc, Adapter->MgntInfo.Bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(pdisassoc, 0); - - // Size of this Frame until last fixed size field. - Disas.Octet = Buffer; - Disas.Length = sMacHdrLng; - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - CCX_ConstructDisassociatePacket(Adapter, pdisassoc, &Disas); - - if( pMgntInfo->bInBIPMFPMode ) - { - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP && // Now we just support AES MFP !! - !(MacAddr_isBcst(asSta) )) - { - // Set WEP bit !! - SET_80211_HDR_WEP( pdisassoc , 1 ); - - if(pSecInfo->EncryptionHeadOverhead > 0) - { - PlatformZeroMemory( ( Disas.Octet+ Disas.Length ) , pSecInfo->EncryptionHeadOverhead); - Disas.Length += pSecInfo->EncryptionHeadOverhead; - } - } - - - } - - // Add reason code - WriteEF2Byte( ( Disas.Octet+ Disas.Length ) , asRsn ); - Disas.Length += 2; - - // - // if need, Append MHDRIE - // - CCX_AppendMHDRIE( Adapter, &Disas ); - - if( pMgntInfo->bInBIPMFPMode && (MacAddr_isBcst(asSta))) - { - SecAppenMMIE( Adapter, &Disas ); - } - - *pLength = Disas.Length; -} - -// -// Description: -// Construct a Probe Response packet. -// Arguments: -// [in] Adapter - -// The adapter context. -// [in] Buffer - -// The buffer for the constructed probe response. -// [out] pLength - -// Return the length in byte for the constructed probe response. -// [in] StaAddr - -// The target mac address. -// [in] bHideSSID - -// Hide our SSID in the SSID element. -// [in[ pRfdProbeReq - -// The RFD contains the probe request. This field may be NULL. -// [in] posProbeReq - -// The location of OCTET_STRING for the probe request. This filed may be NULL if no probe request -// is input. -// Return: -// None -// Remark: -// This construction function may check the probe request content and deside if some information should be -// included in the probe response. -// The input RFD pRfdProbeReq and posProbeReq may be NULL. In such case, this function only sends the -// default content of probe response. -// 2004.10.07, by rcnjko. -// Revised by Bruce, 2012-06-08. -// -VOID -ConstructProbeRsp( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte StaAddr, - IN BOOLEAN bHideSSID, - IN PRT_RFD pRfdProbeReq, - IN POCTET_STRING posProbeReq - ) -{ - PMGNT_INFO pMgntInfo; - pu1Byte pProbeRsp; - OCTET_STRING ProbeRspFrame; - u8Byte TimeStamp; - OCTET_STRING DSParms; - OCTET_STRING IBSSParms; - OCTET_STRING SuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - OCTET_STRING ExtSuppRates; - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Extended Support Rates <= 255. - OCTET_STRING ERPInfo; - u1Byte ERPInfoContent[1]; - - OCTET_STRING IbssAdditionalIEs; - OCTET_STRING osEDCAInfoElem; - u1Byte EDCAInfo[1]; - BOOLEAN bFilterCck = FALSE; - PMGNT_INFO pDefaultMgntInfo; - - pMgntInfo = &Adapter->MgntInfo; - pProbeRsp = Buffer; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - // Frame Control. - SET_80211_HDR_FRAME_CONTROL(pProbeRsp, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pProbeRsp, Type_Probe_Rsp); - SET_80211_HDR_DURATION(pProbeRsp, 0); - - // Addresses (DA/SA/BSSID). - SET_80211_HDR_ADDRESS1(pProbeRsp, StaAddr); - SET_80211_HDR_ADDRESS2(pProbeRsp, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pProbeRsp, Adapter->MgntInfo.Bssid); - - // Sequence Control. - SET_80211_HDR_FRAGMENT_SEQUENCE(pProbeRsp, 0); - - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - // Timestamp. - // I think this is not necessary, becuase our hw should fill timestamp. - TimeStamp = PlatformGetCurrentTime(); - SET_BEACON_PROBE_RSP_TIME_STAMP_LOW(pProbeRsp, (u4Byte)(TimeStamp&0xffffffff)); - SET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(pProbeRsp, (u4Byte)(TimeStamp >> 32)); - - // Beacon interval. - SET_BEACON_PROBE_RSP_BEACON_INTERVAL(pProbeRsp, pMgntInfo->dot11BeaconPeriod ); - - // Capability information. - if( ACTING_AS_AP(Adapter) ) - { - SET_BEACON_PROBE_RSP_CAPABILITY_INFO(pProbeRsp, (pMgntInfo->mCap & ~cIBSS) ); - } - else - { - SET_BEACON_PROBE_RSP_CAPABILITY_INFO(pProbeRsp, (pMgntInfo->mCap & ~cESS) ); - } - - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm!= RT_ENC_ALG_NO_CIPHER ) - { - UNION_BEACON_PROBE_RSP_CAPABILITY_INFO(pProbeRsp, cPrivacy); - } - else - { - MASK_BEACON_PROBE_RSP_CAPABILITY_INFO(pProbeRsp, cPrivacy); - } - - // Size of this Frame until last fixed size field. - ProbeRspFrame.Length = 36; - ProbeRspFrame.Octet = Buffer; - - // SSID. - if( bHideSSID && pMgntInfo->bHiddenSSID ) - { - u1Byte NullSSID[1]; - OCTET_STRING HiddenSSID; - FillOctetString(HiddenSSID, NullSSID, 0); - PacketMakeElement(&ProbeRspFrame, EID_SsId, HiddenSSID); - } - else - { - PacketMakeElement(&ProbeRspFrame, EID_SsId, Adapter->MgntInfo.Ssid); - } - - // Supported rate. - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - - P2P_FilerCck(Adapter, &bFilterCck); - - // Set supported and extended supported rate according to Wirelessmode and dot11OperationalRateSet. - SelectSupportedRatesElement( pMgntInfo->dot11CurrentWirelessMode, pMgntInfo->dot11OperationalRateSet, bFilterCck, &SuppRates, &ExtSuppRates ); - PacketMakeElement(&ProbeRspFrame, EID_SupRates, SuppRates); - - // DS parameters element. - DSParms.Octet = &pMgntInfo->dot11CurrentChannelNumber; - DSParms.Length = 1; - PacketMakeElement(&ProbeRspFrame, EID_DSParms, DSParms); - - RT_TRACE(COMP_AP, DBG_TRACE, ("Constructure Probe RSP Mediaconnect %d dot11CurrentChannel %d, dot11CurrentWirelessMode=%x\n", - pMgntInfo->bMediaConnect,pMgntInfo->dot11CurrentChannelNumber,pMgntInfo->dot11CurrentWirelessMode)); - - // Ibss or TIM element. - if( !ACTING_AS_AP(Adapter)){ - IBSSParms.Octet = (pu1Byte)(&pMgntInfo->mIbssParms.atimWin); - IBSSParms.Length = 2; - PacketMakeElement(&ProbeRspFrame, EID_IbssParms, IBSSParms); - } - - //2004/07/22, kcwu, construct Security IE - //2004/09/15, kcwu, decide to construct which kind of element,WPA or WPA2 - if(pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch) - { - PacketMakeElement(&ProbeRspFrame, (pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA)?EID_Vendor:EID_WPA2, pMgntInfo->SecurityInfo.RSNIE); - } - - // Wireless mode dependent elements. - if( IS_WIRELESS_OFDM_24G(Adapter)) - { - // Capability. - if(ACTING_AS_IBSS(Adapter) == FALSE) - UNION_BEACON_PROBE_RSP_CAPABILITY_INFO(pProbeRsp, cShortSlotTime); - - if( IS_WIRELESS_MODE_G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)) - { - ERPInfoContent[0] = 0; - if(pMgntInfo->bUseProtection) - ERPInfoContent[0] |= ERP_UseProtection; - - FillOctetString(ERPInfo, ERPInfoContent, 1); - PacketMakeElement(&ProbeRspFrame, EID_ERPInfo, ERPInfo); - } - - // Extended Supported Rates. - if(ExtSuppRates.Length != 0) - { - PacketMakeElement(&ProbeRspFrame, EID_ExtSupRates, ExtSuppRates); - } - } - - // - // Append Additional IEs from Ndis6, for DTM Vista 1.0c premium logo test. By Bruce, 2007-08-13. - // - if(ACTING_AS_IBSS(Adapter)) - { - GetIbssAdditionalData(Adapter, &IbssAdditionalIEs); - if(IbssAdditionalIEs.Octet != NULL && IbssAdditionalIEs.Length != 0) - { - AppendAdditionalIEs(&ProbeRspFrame, IbssAdditionalIEs); - } - - if(pMgntInfo->pStaQos->QosCapability != QOS_DISABLE) - { - FillOctetString(osEDCAInfoElem, EDCAInfo, 1); - PlatformZeroMemory(osEDCAInfoElem.Octet, 1); - AppendQoSElement(&ProbeRspFrame, &osEDCAInfoElem, OUI_SUBTYPE_WMM_INFO); - } - } - - // - // Append additional IEs. By haich, 2008.08.01. - // - if(ACTING_AS_AP(Adapter)) - { - if(pMgntInfo->AdditionalResponseIESize> 0&& - pMgntInfo->AdditionalResponseIEData!= NULL && - ProbeRspFrame.Length + pMgntInfo->AdditionalResponseIESize <= sMaxMpduLng) - { - OCTET_STRING osAdditionalProbeRspIEs; - osAdditionalProbeRspIEs.Length = (u2Byte)pMgntInfo->AdditionalResponseIESize; - osAdditionalProbeRspIEs.Octet = (pu1Byte)pMgntInfo->AdditionalResponseIEData; - AppendAdditionalIEs(&ProbeRspFrame, osAdditionalProbeRspIEs); - } - Ap_AppendWmmIe(Adapter, &ProbeRspFrame); - Ap_AppendCountryIE(Adapter, &ProbeRspFrame); - Ap_AppendPowerConstraintIE(Adapter, &ProbeRspFrame); - } - - // - // Include High Throuput capability and High Throuput info - // - Do not include HT if CurrentWirelessMode is less than N mode even if hardware support it - // - if(IS_WIRELESS_MODE_N(Adapter)) - { - OCTET_STRING osHTCap, osHTInfo; - - FillOctetString(osHTCap, &(pMgntInfo->pHTInfo->SelfHTCap), sizeof(pMgntInfo->pHTInfo->SelfHTCap)); - FillOctetString(osHTInfo, &(pMgntInfo->pHTInfo->SelfHTInfo), sizeof(pMgntInfo->pHTInfo->SelfHTInfo)); - HTConstructCapabilityElement(Adapter, &osHTCap, FALSE); - HTConstructInfoElement(Adapter, &osHTInfo); - - // TODO: Construct CAP info element here - PacketMakeElement(&ProbeRspFrame, EID_HTCapability, osHTCap); - PacketMakeElement(&ProbeRspFrame, EID_HTInfo, osHTInfo); - } - - // - // Construct Realtek Proprietary Aggregation mode (Set AMPDU Factor to 2, 32k) - // - { - OCTET_STRING osRealtekIEType2; - FillOctetString(osRealtekIEType2, pMgntInfo->RTIEType2Buffer, sizeof(pMgntInfo->RTIEType2Buffer)); - ConstructRTKAggElement(Adapter, &osRealtekIEType2); - PacketMakeElement(&ProbeRspFrame, EID_Vendor, osRealtekIEType2); - } - - if(IS_WIRELESS_MODE_AC(Adapter)) - { - OCTET_STRING osVHTCap, osVHTOperation; - - FillOctetString(osVHTCap, &(pMgntInfo->pVHTInfo->SelfVHTCap), sizeof(pMgntInfo->pVHTInfo->SelfVHTCap)); - FillOctetString(osVHTOperation, &(pMgntInfo->pVHTInfo->SelfVHTInfo), sizeof(pMgntInfo->pVHTInfo->SelfVHTInfo)); - VHTConstructCapabilityElement(Adapter, &osVHTCap, FALSE); - VHTConstructOperationElement(Adapter, &osVHTOperation); - - // TODO: Construct CAP & Operation element here - PacketMakeElement(&ProbeRspFrame, EID_VHTCapability, osVHTCap); - PacketMakeElement(&ProbeRspFrame, EID_VHTOperation, osVHTOperation); - } - - WAPI_SecFuncHandler(WAPI_CONSTRUCTPROBERSP, Adapter, (PVOID)&ProbeRspFrame, WAPI_END); - - // - // Simple config IE. by CCW - copy from 818x - // - pDefaultMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); - if(GET_SIMPLE_CONFIG_IE_LEN(pDefaultMgntInfo) > 0) - { - RT_TRACE(COMP_WPS, DBG_TRACE, ("AP Construct Probe Response \n")); - WPS_AppendElement(GetDefaultAdapter(Adapter), &ProbeRspFrame, FALSE, WPS_INFO_PROBERSP_IE); - } - -#if (P2P_SUPPORT == 1) - P2P_Append_GoProbeRspIe(&ProbeRspFrame, Adapter, Type_Probe_Rsp, pRfdProbeReq, posProbeReq); -#endif - - WFD_AppendProbeRspIEs(Adapter, Adapter->MAX_TRANSMIT_BUFFER_SIZE, &ProbeRspFrame, pRfdProbeReq, posProbeReq); - - *pLength = ProbeRspFrame.Length; -} - -// -// Description: Construct a customized Data frame. -// 2004.12.05, by rcnjko. -// -VOID -ConstructCustomizedData( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - u2Byte pktLength -) -{ - PMGNT_INFO pMgntInfo; - pu1Byte pHeader; - - pMgntInfo = &Adapter->MgntInfo; - pHeader = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_PWR_MGNT(pHeader, 0); - - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - *pLength = 24 + (u4Byte)pktLength; -} - - -// -// Description: Construct a customized Data frame. -// 2005.03.23, by rcnjko. -// -VOID -ConstructNullFunctionData( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte StaAddr, - IN BOOLEAN bQoS, - IN u1Byte AC, - IN BOOLEAN bEosp, - IN BOOLEAN bForcePowerSave - ) -{ - PMGNT_INFO pMgntInfo; - pu1Byte pHeader; - - pMgntInfo = &Adapter->MgntInfo; - pHeader = Buffer; - - // [APSD] QoS Null Function Data , 2006-06-22, by Isaiah - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, ( (bQoS) ? Type_QosNull: Type_Null_Frame) ); - SET_80211_HDR_PWR_MGNT(pHeader, (bForcePowerSave) ? 1 : 0 ); - - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_INFRASTRUCTURE: // 1,0 - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, StaAddr); - break; - case RT_OP_MODE_AP: // 0,1 - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS3(pHeader, Adapter->CurrentAddress); - break; - case RT_OP_MODE_IBSS: // 0,0 - default: - // Handle it as IBSS, 2004.08.21, by rcnjko. - SET_80211_HDR_ADDRESS1(pHeader, StaAddr ); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid ); - break; - } - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - if(bQoS) //[APSD] Isaiah for QoSNullFunc 2006-07-31 - { - SET_QOS_CTRL(pHeader, 0); - SET_QOS_CTRL_WMM_UP(pHeader, AC); - SET_QOS_CTRL_WMM_EOSP(pHeader, bEosp ? 1 : 0); - *pLength = 26; - } - else - *pLength = 24; -} - -VOID -ConstructBtNullFunctionData( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte StaAddr, - IN BOOLEAN bQoS, - IN u1Byte AC, - IN BOOLEAN bEosp, - IN BOOLEAN bForcePowerSave - ) -{ - PMGNT_INFO pMgntInfo; - pu1Byte pHeader; - - pMgntInfo = &Adapter->MgntInfo; - pHeader = Buffer; - - // [APSD] QoS Null Function Data , 2006-06-22, by Isaiah - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, ( (bQoS) ? Type_QosNull: Type_Null_Frame) ); - SET_80211_HDR_PWR_MGNT(pHeader, (bForcePowerSave) ? 1 : 0 ); - - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, Adapter->CurrentAddress); -#if 0 - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_INFRASTRUCTURE: // 1,0 - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, StaAddr); - break; - case RT_OP_MODE_AP: // 0,1 - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, Adapter->CurrentAddress); - break; - case RT_OP_MODE_IBSS: // 0,0 - default: - // Handle it as IBSS, 2004.08.21, by rcnjko. - SET_80211_HDR_ADDRESS1(pHeader, StaAddr ); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid ); - break; - } -#endif - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - if(bQoS) //[APSD] Isaiah for QoSNullFunc 2006-07-31 - { - SET_QOS_CTRL(pHeader, 0); - SET_QOS_CTRL_WMM_UP(pHeader, AC); - SET_QOS_CTRL_WMM_EOSP(pHeader, bEosp ? 1 : 0); - *pLength = 26; - } - else - *pLength = 24; -} - - -// -// Description: Construct a PS-Poll frame. -// 2005.02.15, by rcnjko. -// -VOID -ConstructPSPoll( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength -) -{ - pu1Byte pPSPoll; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - pPSPoll = Buffer; - - // Frame control. - SET_80211_HDR_FRAME_CONTROL(pPSPoll, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pPSPoll, Type_PS_poll); - SET_80211_HDR_PWR_MGNT(pPSPoll, 1); - - // AID. - SET_80211_PS_POLL_AID(pPSPoll, (pMgntInfo->mAId | 0xc000) ); - - - // BSSID. - SET_80211_PS_POLL_BSSID(pPSPoll, pMgntInfo->Bssid ); - - // TA. - SET_80211_PS_POLL_TA(pPSPoll, Adapter->CurrentAddress); - - *pLength = 16; -} - -// -// Description: Construct a magic packet. -// 2005.10.20, by rcnjko. -// -VOID -ConstructMagicPacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte StaAddr -) -{ - PMGNT_INFO pMgntInfo; - pu1Byte pHeader; - int i; - - pMgntInfo = &Adapter->MgntInfo; - pHeader = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_INFRASTRUCTURE: // 1,0 - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); - - // Old: - //PlatformMoveMemory( pHeader->Addr2, Adapter->CurrentAddress, 6 ); // SA - // New: Suggested by WCChu for 8187 wake up by unicast probereq: 2005.10.20, by rcnjko: - SET_80211_HDR_ADDRESS2(pHeader, StaAddr); // SA - - SET_80211_HDR_ADDRESS3(pHeader, StaAddr);// DA - break; - - case RT_OP_MODE_AP: // 0,1 - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); - - // Old: - //PlatformMoveMemory( pHeader->Addr2, pMgntInfo->Bssid, 6 ); // BSSID - // New: Suggested by WCChu for 8187 wake up by unicast probereq: 2005.10.20, by rcnjko: - SET_80211_HDR_ADDRESS2(pHeader, StaAddr);// BSSID - - SET_80211_HDR_ADDRESS3(pHeader, Adapter->CurrentAddress); // SA - break; - - case RT_OP_MODE_IBSS: // 0,0 - default: - // Handle it as IBSS, 2004.08.21, by rcnjko. - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); // DA - - // Old: - //PlatformMoveMemory( pHeader->Addr2, Adapter->CurrentAddress, 6 ); // SA - // New: Suggested by WCChu for 8187 wake up by unicast probereq: 2005.10.20, by rcnjko: - SET_80211_HDR_ADDRESS2(pHeader, StaAddr); // SA - - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); // BSSID - break; - } - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - // Set STA addr as Addr1. - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); - // FF FF FF FF FF FF. - for(i = 0; i < 6; i++) - { - Buffer[sMacHdrLng+i] = 0xFF; - } - // Repeat STA addr 16 times. - for(i = 0; i < 16; i++) - { - PlatformMoveMemory( Buffer+sMacHdrLng+6+i*6, StaAddr, 6 ); // BSSID. - } - *pLength = sMacHdrLng + 6 + 6*16; -} - -// -// Description: Construct an EAPOL-Key packet. -// 2005.07.01, by rcnjko. -// -VOID -ConstructEapolKeyPacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte StaAddr, - - pu1Byte pKCK, // Pointer to KCK (EAPOL-Key Confirmation Key). - pu1Byte pKEK, // Pointer to KEK (EAPOL-Key Encryption Key). - - KeyType eKeyType, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - BOOLEAN bInstall, // EAPOL-Key Information field: Install Flag. - BOOLEAN bKeyAck, // EAPOL-Key Information field: Key Ack bit. - BOOLEAN bKeyMIC, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - BOOLEAN bSecure, // EAPOL-Key Information field: Secure bit. - BOOLEAN bError, // EAPOL-Key Information field: Error bit. True for MIC failure report. - BOOLEAN bRequest, // EAPOL-Key Information field: Requst bit. - - u8Byte u8bKeyReplayCounter, // EAPOL-KEY Replay Counter field. - pu1Byte pKeyNonce, // EAPOL-Key Key Nonce field (32-byte). - u8Byte u8bKeyRSC, // EAPOL-Key Key RSC field (8-byte). - - POCTET_STRING posRSNIE, // Key Data field: Pointer to RSN IE. - pu1Byte pGTK, // Key Data field: Pointer to GTK. - BOOLEAN bEncrypt // encrypt the packet or not. added by Annie, 2005-07-11. -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pHeader = Buffer; - static u1Byte Snap802_1H[6] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00 }; - - PEAPOL_STRUCT pEapol = NULL; - PEAPOL_KEY_STRUCT pEapolKey = NULL; - OCTET_STRING osEapolKey; - KeyDescVer eKeyDescVer; - u2Byte u2bEapolKeyMsgSz = 0; - u2Byte u2bEapolKeyDataLen = 0; - u1Byte tmpBuf[256]; - OCTET_STRING osKeyNonce; - OCTET_STRING osEapolKeyIV; - OCTET_STRING osKeyRSC; - OCTET_STRING osKeyID; - - // Figure Key Data Length and size of EAPOL-Key Msg. - if(posRSNIE != NULL) - { - u2bEapolKeyDataLen += (2+posRSNIE->Length); - } - if(pGTK != NULL) - { - //AP-WPA AES test,CCW - if( pSecInfo->SecLvl==RT_SEC_LVL_WPA ) - { - if(pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP) - u2bEapolKeyDataLen += GTK_LEN_CCMP+8; - else - u2bEapolKeyDataLen += GTK_LEN; - } - else if( pSecInfo->SecLvl==RT_SEC_LVL_WPA2 ) - { - if(pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP) - u2bEapolKeyDataLen += 24+8+2; // 24 is KED lengh ,8 is AES-WRAP add ,2 is for RSNIE to 8's muitiple ; - else - u2bEapolKeyDataLen += 40+8+2; // 40 is KED lengh,8 is AES-WRAP add ,2 is for RSNIE to 8's muitiple - } - } - u2bEapolKeyMsgSz = EAPOLMSG_HDRLEN + u2bEapolKeyDataLen; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_INFRASTRUCTURE: // 1,0 - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); // BSSID - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); // SA - SET_80211_HDR_ADDRESS3(pHeader, StaAddr); // DA - break; - case RT_OP_MODE_AP: // 0,1 - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); // DA - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid); // BSSID - SET_80211_HDR_ADDRESS3(pHeader, Adapter->CurrentAddress); // SA - break; - case RT_OP_MODE_IBSS: // 0,0 - default: - // Handle it as IBSS, 2004.08.21, by rcnjko. - SET_80211_HDR_ADDRESS1(pHeader, StaAddr); // DA - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); // SA - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); // BSSID - break; - } - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - *pLength = sMacHdrLng; - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- -// if(eKeyType == type_Group) - if( bEncrypt ) - { // EAPOL-Key of Group key handshake will be encrypted via PTK, 2005.07.01, by rcnjko. - PlatformFillMemory( &(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead, 0x00); - *pLength += pSecInfo->EncryptionHeadOverhead; - } - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - // - // 1. LLC+TypeLen - // - PlatformMoveMemory( &(Buffer[*pLength]), Snap802_1H, LLC_HEADER_SIZE); - *pLength += LLC_HEADER_SIZE; - Buffer[*pLength] = 0x88; - Buffer[*pLength+1] = 0x8e; - *pLength += 2; - - // - // 2. EAPOL Header - // - pEapol = (PEAPOL_STRUCT)( &(Buffer[*pLength]) ); - pEapol->protocol_version = LIB1X_EAPOL_VER; - pEapol->packet_type = LIB1X_EAPOL_KEY; - short2net(u2bEapolKeyMsgSz, ((pu1Byte)&(pEapol->packet_body_length)) ); - *pLength += LIB1X_EAPOL_HDRLEN; - - // - // 3. EAPOL-Key descriptor. - // - pEapolKey = (PEAPOL_KEY_STRUCT)( &(Buffer[*pLength]) ); - FillOctetString(osEapolKey, pEapolKey, EAPOLMSG_HDRLEN); - - // 3.1 Descryptor Type. - Message_setDescType(osEapolKey, ((pSecInfo->SecLvl==RT_SEC_LVL_WPA) ? desc_type_RSN : desc_type_WPA2)); - - // 3.2 Key Information. - PlatformFillMemory(pEapolKey->key_info, 2, 0x00); - //AP-WPA AES test,CCW - eKeyDescVer = ((pSecInfo->PairwiseEncAlgorithm==RT_ENC_ALG_TKIP ) ? key_desc_ver1 : key_desc_ver2); - Message_setKeyDescVer(osEapolKey, eKeyDescVer); - Message_setKeyType(osEapolKey, ((eKeyType == type_Group) ? 0 : 1) ); - Message_setKeyIndex(osEapolKey, ((eKeyType == type_Group) ? 1 : 0) ); - Message_setInstall(osEapolKey, bInstall); - Message_setKeyAck(osEapolKey, bKeyAck); - Message_setKeyMIC(osEapolKey, bKeyMIC); - Message_setSecure(osEapolKey, bSecure); - Message_setError(osEapolKey, bError); - Message_setRequest(osEapolKey, bRequest); - Message_setEncryptedKeyData(osEapolKey, ((pSecInfo->SecLvl == RT_SEC_LVL_WPA2 && pGTK != NULL) ? TRUE : FALSE)); // It falls to a reserved bit. Marked by Annie, 2005-07-10. - - // 3.3 Key Length. - //AP-WPA AES test,CCW - Message_setKeyLength(osEapolKey, ((pSecInfo->PairwiseEncAlgorithm==RT_ENC_ALG_TKIP) ? 32 : 16)); - - // 3.4 Key Replay Counter. - PlatformMoveMemory( osEapolKey.Octet + ReplayCounterPos, &u8bKeyReplayCounter, 8); - - // 3.5 Key Nonce. - FillOctetString(osKeyNonce, pKeyNonce, KEY_NONCE_LEN); - Message_setKeyNonce(osEapolKey, osKeyNonce); - - // 3.6 EAPOL-Key IV. - PlatformFillMemory(tmpBuf, KEY_IV_LEN, 0); - FillOctetString(osEapolKeyIV, tmpBuf, KEY_IV_LEN); - Message_setKeyIV(osEapolKey, osEapolKeyIV); - - // 3.7 Key RSC. - FillOctetString(osKeyRSC, &(u8bKeyRSC), sizeof(u8bKeyRSC)); - Message_setKeyRSC(osEapolKey, osKeyRSC); - - // 3.8 Key ID? - PlatformFillMemory(tmpBuf, KEY_ID_LEN, 0); - FillOctetString(osKeyID, tmpBuf, KEY_ID_LEN); - Message_setKeyID(osEapolKey, osKeyID); - - // 3.9 Key MIC. We will fill it up later if required. - Message_clearMIC(osEapolKey); - - // 3.10 Key Data Length. - Message_setKeyDataLength(osEapolKey, u2bEapolKeyDataLen); - - // 3.11 Key Data. - // IE. - if(posRSNIE != NULL && posRSNIE->Length > 0) - { - PacketMakeElement( &osEapolKey, - (pSecInfo->SecLvl == RT_SEC_LVL_WPA) ? EID_Vendor : EID_WPA2, (*posRSNIE) ); - } - // KDE. - if(pGTK != NULL && pSecInfo->SecLvl == RT_SEC_LVL_WPA) - { - RT_ASSERT((pKEK!=NULL), ("ConstructEapolKeyPacket(): pGTK!=NULL pKCK=%p!!!", pKEK)); - //AP-WPA AES test,CCW - //PlatformMoveMemory( &(osEapolKey.Octet[osEapolKey.Length]), pGTK, GTK_LEN); - //osEapolKey.Length += GTK_LEN; - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - { - PlatformMoveMemory( &(osEapolKey.Octet[osEapolKey.Length]), pGTK, GTK_LEN_CCMP); - osEapolKey.Length += GTK_LEN_CCMP + 8; //When after AES-WRAP keydata length add 8; - } - else - { - PlatformMoveMemory( &(osEapolKey.Octet[osEapolKey.Length]), pGTK, GTK_LEN); - osEapolKey.Length += GTK_LEN; - } - if(pKEK) - { - // Encode Key Data field if necessary. - //RT_TRACE(COMP_WPAAES, DBG_LOUD, ("=========> Encrypt EAPOL ^^")); - EncEapolKeyData(Adapter, osEapolKey, pKEK, PTK_LEN_EAPOLENC); - } - } - else if( pGTK != NULL && pSecInfo->SecLvl == RT_SEC_LVL_WPA2 ) - { - PKDE_STRUCT pKDE = NULL; - u1Byte KEDOUI[] = {0x00,0x0F,0xAC}; //00-0F-AC - pKDE = (PKDE_STRUCT)( &(osEapolKey.Octet[osEapolKey.Length])); - // KeyID = bit0~bit2 - // TX = bit3 - // resved = bit4~bit7 and byte2 - // GTK data length = ( Length -6 ) - - pKDE->IEType= 0xdd; //IE ID = 0xDD - - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - { - pKDE->IELen = 0x16; // 18+4 = 22 - osEapolKey.Length += 24+8+2; - } - else if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP ) - { - pKDE->IELen = 0x26; // 34+4 = 38 - osEapolKey.Length += 40+8+2; - } - - PlatformMoveMemory(pKDE->OUI, KEDOUI, 3); - - pKDE->Datatype = 0x01; - - pKDE->KID = 0x01; //Set Group Key ID = 1; - - pKDE->Reserved = 0x00; // Set Reserved to all 0; - - PlatformZeroMemory(pKDE->GTK , 64 ); - - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - PlatformMoveMemory(pKDE->GTK , pGTK , 16); - else if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP ) - PlatformMoveMemory(pKDE->GTK , pGTK , 32); - - if(pKEK) - { - // Encode Key Data field if necessary. - EncEapolKeyData(Adapter, osEapolKey, pKEK, PTK_LEN_EAPOLENC); - } - } - *pLength += u2bEapolKeyMsgSz; - - // Figure out EAPOL-Key MIC if required. - if(bKeyMIC) - { - OCTET_STRING osEapolMsgToSend; - - RT_ASSERT((pKCK!=NULL), ("ConstructEapolKeyPacket(): bKeyMIC pKCK=%p!!!", pKCK)); - if(pKCK != NULL) - { - FillOctetString(osEapolMsgToSend, pEapol, (LIB1X_EAPOL_HDRLEN+u2bEapolKeyMsgSz) ); - CalcEapolMIC(osEapolMsgToSend, eKeyDescVer, pKCK, KEY_MIC_LEN); - } - } -} - - -// -// Description: Construct EAPOL-Star Packet Let AP try to re-key !! -// -VOID -ConstructEAPOLStartPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN BOOLEAN bEncrypt - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pHeader = Buffer; - static u1Byte Snap802_1H[6] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00 }; - PEAPOL_STRUCT pEapol = NULL; - u2Byte u2bEapol = 0; - - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_INFRASTRUCTURE: // 1,0 - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); // BSSID - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); // SA - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); // DA - break; - case RT_OP_MODE_AP: // 0,1 - SET_80211_HDR_FROM_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); // DA - SET_80211_HDR_ADDRESS2(pHeader, pMgntInfo->Bssid); // BSSID - SET_80211_HDR_ADDRESS3(pHeader, Adapter->CurrentAddress); // SA - break; - case RT_OP_MODE_IBSS: // 0,0 - default: - // Handle it as IBSS, 2004.08.21, by rcnjko. - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); // DA - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); // SA - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); // BSSID - break; - } - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - *pLength = sMacHdrLng; - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if( bEncrypt ) - { // EAPOL-Key of Group key handshake will be encrypted via PTK, 2005.07.01, by rcnjko. - PlatformFillMemory( &(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead, 0x00); - *pLength += pSecInfo->EncryptionHeadOverhead; - } - - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - // - // 1. LLC+TypeLen - // - PlatformMoveMemory( &(Buffer[*pLength]), Snap802_1H, LLC_HEADER_SIZE); - *pLength += LLC_HEADER_SIZE; - Buffer[*pLength] = 0x88; - Buffer[*pLength+1] = 0x8e; - *pLength += 2; - - // - // 2. EAPOL Header - // - pEapol = (PEAPOL_STRUCT)( &(Buffer[*pLength]) ); - pEapol->protocol_version = LIB1X_EAPOL_VER; - pEapol->packet_type = LIB1X_EAPOL_START; - short2net(u2bEapol, ((pu1Byte)&(pEapol->packet_body_length)) ); - *pLength += LIB1X_EAPOL_HDRLEN; - -} - - -// -// Description: Construct CCX Radio Measure Report packet. -// 2006.05.07, by rcnjko. -// -VOID -ConstructCcxRmReport( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN PRT_RM_REPORTS pRmReports - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pHeader = Buffer; - PRM_REPORT_PACKET pRmRptPkt = NULL; - POCTET_STRING posRpts = &(pRmReports->osMeasRptEles); - static u1Byte CiscoAironetSnap[CISCO_AIRONET_SNAP_LENGTH] = { 0xAA, 0xAA, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00}; - u2Byte IappIdLen; - - RT_TRACE(COMP_SEND, DBG_LOUD, ("+ ConstructCcxRmReport()\n")); - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - RT_ASSERT(pMgntInfo->OpMode==RT_OP_MODE_INFRASTRUCTURE, - ("ConstructCcxRmReport(): OpMode(%d) != RT_OP_MODE_INFRASTRUCTURE(%d)\n", pMgntInfo->OpMode, RT_OP_MODE_INFRASTRUCTURE)); - - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - *pLength = sMacHdrLng; - - //------------------------------------------------------------------------- - // Qos Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pStaQos->CurrentQosMode > QOS_DISABLE) - { - SET_80211_HDR_QOS_EN(pHeader, 1); - PlatformZeroMemory(&(Buffer[*pLength]), sQoSCtlLng); - *pLength += sQoSCtlLng; - } - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pSecInfo->EncryptionHeadOverhead > 0) - { - PlatformZeroMemory(&(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead); - *pLength += pSecInfo->EncryptionHeadOverhead; - } - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - pRmRptPkt = (PRM_REPORT_PACKET)(Buffer + *pLength); - - // - // 1. Cisco Aironet SNAP Header. - // - PlatformMoveMemory( pRmRptPkt->SnapHeader, CiscoAironetSnap, CISCO_AIRONET_SNAP_LENGTH); - *pLength += CISCO_AIRONET_SNAP_LENGTH; - - // - // 2. IAPP ID & Length - // - IappIdLen = (CISCO_RM_RPT_IAPP_LENGTH - CISCO_AIRONET_SNAP_LENGTH - 1) + posRpts->Length; - - RT_TRACE(COMP_SEND, DBG_LOUD, ("IAPP ID & Length: 0x%04X\n", IappIdLen)); - RT_ASSERT((IappIdLen < 0x1000), ("ConstructCcxRmReport(): IappIdLen(%#X) should < 0x1000 !!!\n", IappIdLen)); - SET_RMRPT_IAPPIDLEN(pRmRptPkt, IappIdLen); - - // - // 3. IAPP Type - // - SET_RMRPT_IAPPTYPE(pRmRptPkt, CCX_RM_IAPP_TYPE); - - // - // 4. IAPP SubType - // - SET_RMRPT_IAPPSUBTYPE(pRmRptPkt, CCX_RM_REPORT_IAPP_SUBTYPE); - - // - // 5. Destination MAC Address. - // - PlatformZeroMemory(pRmRptPkt->DstAddr, 6); - - // - // 6. Source MAC Address. - // - PlatformMoveMemory(pRmRptPkt->SrcAddr, Adapter->CurrentAddress, 6); - - // - // 7. Dialog Token. - // - if(pRmReports->bAutonomous == FALSE) - SET_RMRPT_DIALOGTOKEN(pRmRptPkt, pRmReports->DialogToken); - else - SET_RMRPT_DIALOGTOKEN(pRmRptPkt, 0); - - // - // 8. Measurement Report Elements. - // - PlatformMoveMemory(pRmRptPkt->Elements, posRpts->Octet, posRpts->Length); - *pLength += IappIdLen; - - RT_PRINT_DATA((COMP_RM|COMP_SEND), DBG_LOUD, ("CCX RM Report:\n"), Buffer, *pLength); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("- ConstructCcxRmReport()\n")); -} - -// -// Description: -// Construct the packet of dot11k radio measurment report. -// By Bruce, 2009-07-23. -// -VOID -ConstructDot11kRmReport( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN PRT_RM_REQUESTS pRmRequests, - IN PRT_RM_REPORTS pRmReports - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte pHeader = Buffer; - POCTET_STRING posRpts = &(pRmReports->osMeasRptEles); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("+ ConstructDot11kRmReport()\n")); - - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Action); - - SET_80211_HDR_ADDRESS1(pHeader, pRmRequests->SrcAddr); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - *pLength = sMacHdrLng; - - SET_ACTFRAME_CATEGORY_CODE(pHeader, ACT_CAT_RM); - SET_ACTFRAME_ACTION_CODE(pHeader, ACT_RM_REPORT); - SET_ACTFRAME_DIALOG_TOKEN(pHeader, pRmRequests->DialogToken); - *pLength += 3; - - // - // Measurement Report Elements. - // - PlatformMoveMemory((pHeader + *pLength), posRpts->Octet, posRpts->Length); - - *pLength += posRpts->Length; - - RT_PRINT_DATA((COMP_RM|COMP_SEND), DBG_LOUD, ("ConstructDot11kRmReport:\n"), Buffer, *pLength); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("- ConstructDot11kRmReport()\n")); -} - -//Add for ROGUE AP 2007.07.28 , by CCW -//Description: Construct CCX ROGUE AP Report packet. -VOID -ConstructCcxROGUEAPReport( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - int index -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pHeader = Buffer; - static u1Byte CiscoAironetSnap[CISCO_AIRONET_SNAP_LENGTH] = { 0xAA, 0xAA, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00}; - PROGUEAP_REPORT_PACKET pROGUEAPRptPkt = NULL; - static u1Byte ROGUEAPRptLen[2] = {0x00, 0x28}; - static u1Byte AuthTimeoutFailure[2] = {0x00,0x02}; - static u1Byte ChallengeFromApFailure[2] = {0x00,0x03}; - static u1Byte ChallengeToApFailure[2] = {0x00,0x04}; - static u1Byte Invalidauthenticationtype[2] = {0x00,0x01}; - ULONG ln; - //RT_TRACE(COMP_SEND), DBG_TRACE, ("+ ConstructCcxRmReport()\n")); - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); // BSSID - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); //SA - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); //DA - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - *pLength = sMacHdrLng; - - //------------------------------------------------------------------------- - // Qos Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pStaQos->CurrentQosMode > QOS_DISABLE) - { - SET_80211_HDR_QOS_EN(pHeader, 1); - PlatformZeroMemory(&(Buffer[*pLength]), sQoSCtlLng); - *pLength += sQoSCtlLng; - } - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pSecInfo->SecLvl > RT_SEC_LVL_NONE) - { - PlatformZeroMemory(&(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead); - *pLength += pSecInfo->EncryptionHeadOverhead; - } - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - pROGUEAPRptPkt = (PROGUEAP_REPORT_PACKET)(Buffer + *pLength); - - // - // 1. Cisco Aironet SNAP Header. - // - PlatformMoveMemory( pROGUEAPRptPkt->SnapHeader, CiscoAironetSnap, CISCO_AIRONET_SNAP_LENGTH); - - *pLength += CISCO_AIRONET_SNAP_LENGTH; - - - // - // 2.Set length :length in bytes of all the following fields including this field (40 bytes) - // - - PlatformMoveMemory(&(pROGUEAPRptPkt->ROGUEAPLen) , ROGUEAPRptLen , 2 ); - - // - // 3.message type : 0x40 - // - - pROGUEAPRptPkt->message_type = H2N1BYTE(ROGUEAP_message_type); - - // - // 4.function code : 0x8e - // - - pROGUEAPRptPkt->function_code = H2N1BYTE(ROGUEAP_function_code); - - // - // 5.Destination MAC Address. - // - PlatformMoveMemory(pROGUEAPRptPkt->DstAddr, pMgntInfo->Bssid, 6); - - // - // 6.Source MAC Address. - // - PlatformMoveMemory(pROGUEAPRptPkt->SrcAddr, Adapter->CurrentAddress, 6); - - // - // 7.Failure Reason - // - switch(pMgntInfo->ROGUE_AP_ENTEY[index].code) - { - case MH_CCX_ROGUE_AP_STATUS_AuthTimeoutFailure: - //pROGUEAPRptPkt->Failure_Reason = H2N2BYTE(AuthTimeoutFailure); - PlatformMoveMemory(&(pROGUEAPRptPkt->Failure_Reason) , AuthTimeoutFailure , 2 ); - break; - case MH_CCX_ROGUE_AP_STATUS_ChallengeFromApFailure: - //pROGUEAPRptPkt->Failure_Reason = H2N2BYTE(ChallengeFromApFailure); - PlatformMoveMemory(&(pROGUEAPRptPkt->Failure_Reason) , ChallengeFromApFailure , 2 ); - break; - case MH_CCX_ROGUE_AP_STATUS_ChallengeToApFailure: - //pROGUEAPRptPkt->Failure_Reason = H2N2BYTE(ChallengeToApFailure); - PlatformMoveMemory(&(pROGUEAPRptPkt->Failure_Reason) , ChallengeToApFailure , 2 ); - break; - case MH_CCX_ROGUE_AP_STATUS_Invalidauthenticationtype : - //pROGUEAPRptPkt->Failure_Reason = H2N2BYTE(Invalidauthenticationtype); - PlatformMoveMemory(&(pROGUEAPRptPkt->Failure_Reason) , Invalidauthenticationtype , 2 ); - break; - } - - - // - // 8. Rogue AP Mac address - // - PlatformMoveMemory(pROGUEAPRptPkt->RogueAPAddr, pMgntInfo->ROGUE_AP_ENTEY[index].bssid , 6); - - // - // 9.Rogue AP name - // - PlatformZeroMemory(pROGUEAPRptPkt->RogueAPname, 16); - - *pLength += 40; - - ln = *pLength; - - - //RT_PRINT_DATA((COMP_RM|COMP_SEND), DBG_LOUD, ("ROGUE AP Report: "), Buffer, *pLength); - -} - - -VOID -ConstructMaFrameHdr( - IN PADAPTER Adapter, - IN pu1Byte pAddr, - IN u1Byte Category, - IN u1Byte Action, - OUT POCTET_STRING posMaFrame - ) -{ - pu1Byte pMaPartial = posMaFrame->Octet; - u1Byte MaHdr[5]; - OCTET_STRING osTemp; - - SET_80211_HDR_FRAME_CONTROL(pMaPartial,0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pMaPartial,Type_Action); - SET_80211_HDR_DURATION(pMaPartial,0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pMaPartial,0); - SET_80211_HDR_ADDRESS1(pMaPartial, pAddr); - SET_80211_HDR_ADDRESS2(pMaPartial, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pMaPartial, Adapter->MgntInfo.Bssid); - posMaFrame->Length = sMacHdrLng; - - MaHdr[0] = Category; - MaHdr[1] = Action; - - FillOctetString(osTemp, MaHdr, 2); - PacketAppendData(posMaFrame, osTemp); - -} - -// -// Description: -// Append the additional IEs to the Beacon frame, by Bruce, 2007-08-13. -// Note: -// No need to specify the Element IDs, because the input buffer has included the ID and length. -// -VOID -AppendAdditionalIEs( - OUT POCTET_STRING packet, - IN OCTET_STRING ies - ) -{ - RT_TRACE(COMP_MLME, DBG_TRACE, ("AppendAdditionalIEs(): Length = %d\n", ies.Length)); - PacketAppendData(packet, ies); -} - -// -// Description: -// Construct Qos ADDTS packet by the input ts. -// -VOID -ConstructQosADDTSPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN u1Byte DialogToken, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); -// PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - OCTET_STRING osAddTs; - OCTET_STRING osTempField; - u4Byte i; - PQOS_TSTREAM pStream = pTs; - u1Byte WMM_Filed[4] = {0}; - - RT_ASSERT(pTs!=NULL, ("ConstructQosADDTSPacket(): pTs should not be NULL\n")); - - FillOctetString(osAddTs, Buffer, 0); - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - - SET_80211_HDR_FRAME_CONTROL(osAddTs.Octet, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(osAddTs.Octet, Type_Action); - SET_80211_HDR_ADDRESS1(osAddTs.Octet, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(osAddTs.Octet, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(osAddTs.Octet, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(osAddTs.Octet, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(osAddTs.Octet, 0); - osAddTs.Length += sMacHdrLng; - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - CCX_ConstructQosADDTSPacket(Adapter, &osAddTs); - - //------------------------------------------------------------------------- - //WMM Action Frame Fixed Field - //------------------------------------------------------------------------- - WMM_Filed[0] = WMM_ACTION_CATEGORY_CODE; // Category Code - WMM_Filed[1] = (u1Byte)ADDTS_REQ; // Action Code - WMM_Filed[2] = DialogToken; // Dialog Token - WMM_Filed[3] = 0; // Status Code - - FillOctetString(osTempField, WMM_Filed, sizeof(WMM_Filed)); - PacketAppendData(&osAddTs, osTempField); - - //------------------------------------------------------------------------- - // TSPEC IE & TSRS - //------------------------------------------------------------------------- - for (i = 0; i < numTspec; i ++) - { - // TSPEC - FillOctetString(osTempField, pStream->OutStandingTSpec, sizeof(WMM_TSPEC)); - PacketAppendData(&osAddTs, osTempField); - - // TSRS - // CCXv4 S54, A STA shall use the TSRS IE in the ADDTS request or (Re-)association Request. This value of Nominal PHY rate must be - // greater than or equal to the Minimum PHY rate expressed in the TSPEC IE. By Bruce, 2009-06-23. - if (QOS_RATE_TO_BPS( QosGetNPR(Adapter, pStream) ) >= - GET_TSPEC_MIN_PHY_RATE(pStream->OutStandingTSpec) ) - { - QosConstructTSRS(Adapter, pStream, &osAddTs); - } - - pStream->DialogToken = pStaQos->DialogToken; - pStream ++; - } - - //------------------------------------------------------------------------- - // MHDR IE for MFP - //------------------------------------------------------------------------- - CCX_AppendMHDRIE(Adapter, &osAddTs); - - *pLength = osAddTs.Length; -} - -// -// Description: -// Construct Qos DELTS packet by the input TS. -// -VOID -ConstructQosDELTSPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); -// PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - OCTET_STRING osDelTs; - OCTET_STRING osTempField; - u4Byte i; - PQOS_TSTREAM pStream = pTs; - u1Byte WMM_Filed[4] = {0}; - - RT_ASSERT(pTs!=NULL, ("ConstructQosDELTSPacket(): pTs should not be NULL\n")); - - FillOctetString(osDelTs, Buffer, 0); - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - SET_80211_HDR_FRAME_CONTROL(osDelTs.Octet, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(osDelTs.Octet, Type_Action); - SET_80211_HDR_ADDRESS1(osDelTs.Octet, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(osDelTs.Octet, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(osDelTs.Octet, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(osDelTs.Octet, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(osDelTs.Octet, 0); - osDelTs.Length += sMacHdrLng; - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - CCX_ConstructQosDELTSPacket(Adapter, &osDelTs); - - //------------------------------------------------------------------------- - // WMM Action Frame Fixed Field - //------------------------------------------------------------------------- - WMM_Filed[0] = WMM_ACTION_CATEGORY_CODE; // Category Code - WMM_Filed[1] = (u1Byte)DELTS; // Action Code - WMM_Filed[2] = 0; // Dialog Token - WMM_Filed[3] = 0; // Status Code - - FillOctetString(osTempField, WMM_Filed, sizeof(WMM_Filed)); - PacketAppendData(&osDelTs, osTempField); - - //------------------------------------------------------------------------- - // TSPEC IE - //------------------------------------------------------------------------- - for (i = 0; i < numTspec; i ++) - { - FillOctetString(osTempField, pStream->TSpec, sizeof(WMM_TSPEC)); - PacketAppendData(&osDelTs, osTempField); - pStream ++; - } - - //------------------------------------------------------------------------- - // MHDR IE for MFP - //------------------------------------------------------------------------- - CCX_AppendMHDRIE(Adapter, &osDelTs ); - - *pLength = osDelTs.Length; -} - -// -// Description: -// Construct the CCX packet of Neighbor List Polling to the Cisco AP. -// By Bruce, 2008-03-22. -// -VOID -ConstructCcxNeighborPoll( - IN PADAPTER Adapter, - OUT pu1Byte Buffer, - OUT pu4Byte pLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pHeader = Buffer; - static u1Byte CiscoAironetSnap[CISCO_AIRONET_SNAP_LENGTH] = { 0xAA, 0xAA, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00}; - u2Byte IappIdLen, tmp2Byte; - pu1Byte pIappPkt; - - // - // Figure out IAPP pakcet length. - // - IappIdLen = 0x10; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - SET_80211_HDR_TO_DS(pHeader, 1); - SET_80211_HDR_ADDRESS1(pHeader, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pHeader, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pHeader, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - *pLength = sMacHdrLng; - - //------------------------------------------------------------------------- - // Qos Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pStaQos->CurrentQosMode > QOS_DISABLE) - { - SET_80211_HDR_QOS_EN(pHeader, 1); - PlatformZeroMemory(&(Buffer[*pLength]), sQoSCtlLng); - *pLength += sQoSCtlLng; - } - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pSecInfo->EncryptionHeadOverhead > 0) - { - PlatformZeroMemory(&(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead); - *pLength += pSecInfo->EncryptionHeadOverhead; - } - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - pIappPkt = (Buffer + *pLength); - - // - // 1. Cisco Aironet SNAP Header. - // - SET_AARPT_IAPP_SNAP_HEADER(pIappPkt, CiscoAironetSnap, CISCO_AIRONET_SNAP_LENGTH); - *pLength += CISCO_AIRONET_SNAP_LENGTH; - - - // - // 2. IAPP length field: length of packet including this field. - // - tmp2Byte = H2N2BYTE(IappIdLen); - SET_AARPT_IAPPIDLEN(pIappPkt, &tmp2Byte); - *pLength += 2; - - // - // 3. IAPP type: 0x33 - // - SET_AARPT_IAPPTYPE(pIappPkt, CCX_L2ROAM_IAPP_TYPE); - *pLength += 1; - - // - // 4. Function code: 0x01 - // - SET_AARPT_IAPPFUNCTION(pIappPkt, 0x01); - *pLength += 1; - - // - // 5. Destination MAC Address. - // - SET_AARPT_IAPPDEST(pIappPkt, pMgntInfo->Bssid, 6); - *pLength += 6; - - // - // 6. Source MAC Address. - // - SET_AARPT_IAPPSRC(pIappPkt, Adapter->CurrentAddress, 6); - *pLength += 6; - - RT_PRINT_DATA(COMP_RM, DBG_LOUD, " ConstructCcxNeighborPoll:\n", Buffer, *pLength); -} - - -// -// Description: -// Construct the ARP response packet to support ARP offload. -// -VOID -ConstructARPResponse( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pIPAddress - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - //PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pARPRspPkt = Buffer; - static u1Byte ARPLLCHeader[8] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x08, 0x06}; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - SET_80211_HDR_FRAME_CONTROL(pARPRspPkt, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pARPRspPkt, Type_Data); - SET_80211_HDR_TO_DS(pARPRspPkt, 1); - SET_80211_HDR_ADDRESS1(pARPRspPkt, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pARPRspPkt, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pARPRspPkt, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(pARPRspPkt, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pARPRspPkt, 0); - *pLength = sMacHdrLng; - -//YJ,del,120503 -#if 0 - //------------------------------------------------------------------------- - // Qos Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pStaQos->CurrentQosMode > QOS_DISABLE) - { - SET_80211_HDR_QOS_EN(pARPRspPkt, 1); - PlatformZeroMemory(&(Buffer[*pLength]), sQoSCtlLng); - *pLength += sQoSCtlLng; - } -#endif - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pSecInfo->EncryptionHeadOverhead > 0) - { - PlatformZeroMemory(&(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead); - *pLength += pSecInfo->EncryptionHeadOverhead; - SET_80211_HDR_WEP(pARPRspPkt, 1); //Suggested by CCW. - } - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - pARPRspPkt = (pu1Byte)(Buffer + *pLength); - // LLC header - PlatformMoveMemory(pARPRspPkt, ARPLLCHeader, 8); - *pLength += 8; - - // ARP element - pARPRspPkt += 8; - SET_ARP_PKT_HW(pARPRspPkt, 0x0100); - SET_ARP_PKT_PROTOCOL(pARPRspPkt, 0x0008); // IP protocol - SET_ARP_PKT_HW_ADDR_LEN(pARPRspPkt, 6); - SET_ARP_PKT_PROTOCOL_ADDR_LEN(pARPRspPkt, 4); - SET_ARP_PKT_OPERATION(pARPRspPkt, 0x0200); // ARP response - SET_ARP_PKT_SENDER_MAC_ADDR(pARPRspPkt, Adapter->CurrentAddress); - SET_ARP_PKT_SENDER_IP_ADDR(pARPRspPkt, pIPAddress); - SET_ARP_PKT_TARGET_MAC_ADDR(pARPRspPkt, Adapter->CurrentAddress); - SET_ARP_PKT_TARGET_IP_ADDR(pARPRspPkt, pIPAddress); - *pLength += 28; - - RT_PRINT_DATA(COMP_INIT, DBG_LOUD, "ConstructARPResponse():\n", Buffer, *pLength); -} - -VOID -ConstructCtsPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pStaAddr - ) -{ - pu1Byte pCts; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> ConstructCtsPacket()\n")); - - pCts = Buffer; - - SET_80211_HDR_FRAME_CONTROL(pCts, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pCts, Type_CTS); - SET_80211_HDR_DURATION(pCts, 0); - - SET_80211_HDR_ADDRESS1(pCts, pStaAddr); - - *pLength = 10; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== ConstructCtsPacket()\n")); -} - - -// -// Description: -// Construct the IP66 NS packet to support NS offload. -// -// buffer : -// Packet buffer -// pLength : -// Packet Length after construct -// PTAAdress : -// IPv6 , Target Link address ( MAC address ) -VOID -ConstructNSPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pTAAddress - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - //PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pNSRspPkt = Buffer; - static u1Byte NSLLCHeader[8] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x86, 0xDD}; - static u1Byte IPv6HeadInfo[4] = {0x60, 0x00, 0x00, 0x00}; - static u1Byte IPv6HeadContx[4] = {0x00, 0x20, 0x3a, 0xff}; - static u1Byte ICMPv6Head[8] = {0x88, 0x00, 0x00, 0x00 , 0x60 , 0x00 , 0x00 , 0x00}; - - //------------------------------------------------------------------------- - // MAC Header. - //------------------------------------------------------------------------- - SET_80211_HDR_FRAME_CONTROL(pNSRspPkt, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pNSRspPkt, Type_Data); - SET_80211_HDR_TO_DS(pNSRspPkt, 1); - SET_80211_HDR_ADDRESS1(pNSRspPkt, pMgntInfo->Bssid); - SET_80211_HDR_ADDRESS2(pNSRspPkt, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(pNSRspPkt, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(pNSRspPkt, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pNSRspPkt, 0); - *pLength = sMacHdrLng; - - -#if 0 - //------------------------------------------------------------------------- - // Qos Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pStaQos->CurrentQosMode > QOS_DISABLE) - { - SET_80211_HDR_QOS_EN(pARPRspPkt, 1); - PlatformZeroMemory(&(Buffer[*pLength]), sQoSCtlLng); - *pLength += sQoSCtlLng; - } -#endif - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pSecInfo->EncryptionHeadOverhead > 0) - { - PlatformZeroMemory(&(Buffer[*pLength]), pSecInfo->EncryptionHeadOverhead); - *pLength += pSecInfo->EncryptionHeadOverhead; - SET_80211_HDR_WEP(pNSRspPkt, 1); //Suggested by CCW. - } - - //------------------------------------------------------------------------- - // Frame Body. - //------------------------------------------------------------------------- - pNSRspPkt = (pu1Byte)(Buffer + *pLength); - // LLC header - PlatformMoveMemory(pNSRspPkt, NSLLCHeader, 8); - pNSRspPkt += 8; - *pLength += 8; - - //------------------------------------------------------------------------- - // IPv6 Heard - //------------------------------------------------------------------------- - // 1 . Information (4 bytes): 0x60 0x00 0x00 0x00 - PlatformMoveMemory(pNSRspPkt, IPv6HeadInfo, 4); - pNSRspPkt += 4; - *pLength += 4; - // 2 . playload : 0x00 0x20 , NextProt : 0x3a (ICMPv6) HopLim : 0xff - PlatformMoveMemory(pNSRspPkt, IPv6HeadContx, 4); - pNSRspPkt += 4; - *pLength += 4; - // 3 . SA : 16 bytes , DA : 16 bytes ( Fw will filled ) - PlatformZeroMemory(pNSRspPkt , 32); - pNSRspPkt += 32; - *pLength += 32; - - //------------------------------------------------------------------------- - // ICMPv6 - //------------------------------------------------------------------------- - // 1. Type : 0x88 (NA) , Code : 0x00 , ChechSum : 0x00 0x00 (RSvd) NAFlag: 0x60 0x00 0x00 0x00 ( Solicited , Override) - PlatformMoveMemory(pNSRspPkt, ICMPv6Head, 8); - pNSRspPkt += 8; - *pLength += 8; - // 2. TA : 16 bytes - PlatformZeroMemory(pNSRspPkt , 16); - pNSRspPkt += 16; - *pLength += 16; - //------------------------------------------------------------------------- - // ICMPv6 Target Link Layer address - //------------------------------------------------------------------------- - pNSRspPkt[0] = 0x02 ; // Type - pNSRspPkt[1] = 0x01 ; // Len 1 unit of 8 octes - pNSRspPkt += 2; - *pLength += 2; - //PlatformMoveMemory(pNSRspPkt, pTAAddress, 6); - PlatformZeroMemory(pNSRspPkt , 6); - pNSRspPkt += 6; - *pLength += 6; - - RT_PRINT_DATA(COMP_INIT, DBG_LOUD, "ConstructNSPacket():\n", Buffer, *pLength); -} - -// -// Description: -// Construct SA Query request packet. -// [in] Adapter - -// The adapter context. -// [in] Buffer - -// The buffer for the constructed packet. -// [out] pLength - -// Return the length in byte for the constructed packet. -// [in] pTargetSta - -// Target STA which receives this frame. -// [in] Identifier - -// The identifier to fill in the SA query request. -// By Bruce, 2014-12-31. -// -VOID -ConstructSAQeuryReq( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING osFrame; - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("SA Identifier = 0x%04X\n", Identifier)); - - FillOctetString(osFrame, Buffer, 0); - - SET_80211_HDR_FRAME_CONTROL(osFrame.Octet, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(osFrame.Octet, Type_Action); - - SET_80211_HDR_ADDRESS1(osFrame.Octet, pTargetSta); - SET_80211_HDR_ADDRESS2(osFrame.Octet, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(osFrame.Octet, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(osFrame.Octet, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(osFrame.Octet, 0); - osFrame.Length = sMacHdrLng; - - SET_ACTFRAME_CATEGORY_CODE(osFrame.Octet, ACT_CAT_SAQ); - SET_ACTFRAME_ACTION_CODE(osFrame.Octet, ACT_SA_REQ); - SET_ACTFRAME_SA_QUERY_ID(osFrame.Octet, Identifier); - osFrame.Length += 4; - - *pLength = osFrame.Length; - - RT_PRINT_DATA((COMP_SEC), DBG_LOUD, ("ConstructSAQeuryReq:\n"), Buffer, *pLength); -} - - - -// -// Description: -// Construct SA Query response packet. -// [in] Adapter - -// The adapter context. -// [in] Buffer - -// The buffer for the constructed packet. -// [out] pLength - -// Return the length in byte for the constructed packet. -// [in] pTargetSta - -// Target STA which receives this frame. -// [in] Identifier - -// The identifier from the SA query request frame to fill in the SA query response. -// By Bruce, 2014-12-24. -// -VOID -ConstructSAQeuryRsp( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING osFrame; - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("SA Identifier = 0x%04X\n", Identifier)); - - FillOctetString(osFrame, Buffer, 0); - - SET_80211_HDR_FRAME_CONTROL(osFrame.Octet, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(osFrame.Octet, Type_Action); - - SET_80211_HDR_ADDRESS1(osFrame.Octet, pTargetSta); - SET_80211_HDR_ADDRESS2(osFrame.Octet, Adapter->CurrentAddress); - SET_80211_HDR_ADDRESS3(osFrame.Octet, pMgntInfo->Bssid); - - SET_80211_HDR_DURATION(osFrame.Octet, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(osFrame.Octet, 0); - osFrame.Length = sMacHdrLng; - - SET_ACTFRAME_CATEGORY_CODE(osFrame.Octet, ACT_CAT_SAQ); - SET_ACTFRAME_ACTION_CODE(osFrame.Octet, ACT_SA_RSP); - SET_ACTFRAME_SA_QUERY_ID(osFrame.Octet, Identifier); - osFrame.Length += 4; - - *pLength = osFrame.Length; - - RT_PRINT_DATA((COMP_SEC), DBG_LOUD, ("ConstructSAQeuryRsp:\n"), Buffer, *pLength); -} - -// -// Description: -// Append Fast Transition MD (Mobility Domain) IE to this packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] contentType - -// The type of content to append packet. This field also indicates which type of posOutContent. -// CONTENT_PKT_TYPE_xxx - -// [in] pInfoBuf - -// This field is determined by contentType and shall be casted to the corresponding type. -// pInfoBuf is PRT_WLAN_BSS if contentType is CONTENT_PKT_TYPE_CLIENT. -// [in] InfoBufLen - -// Length in byte of pInfoBuf. -// [in] maxBufLen - -// The max length of posOutContent buffer in byte. -// [out] posOutContent - -// The OCTECT_STRING structure for the content buffer and length. -// posOutContent is a 802.11 packet if contentType is CONTENT_PKT_TYPE_802_11. -// Return: -// RT_STATUS_SUCCESS, if the content is appended withour error. -// RT_STATUS_BUFFER_TOO_SHORT, if the max length of buffer is not long enough. -// RT_STATUS_INVALID_STATE, if the security parameter is mismatched. -// Remark: -// To determine what to append to the output content, the pTargetBss, contentType, and posOutContent -// shall be filled when calling this function. If MD IE will be appended to an association request frame in posOutContent, -// the 802.11 packet type and MAC header shall be filled in posOutContent before calling this function. -// By Bruce, 2015-12-16. -// -RT_STATUS -FT_AppendMdIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_SECURITY_T pSecInfo = &pAdapter->MgntInfo.SecurityInfo; - PFT_INFO_ENTRY pEntry = NULL; - OCTET_STRING osMdIe = {NULL, 0}; - PRT_WLAN_BSS pTargetBss = NULL; - u1Byte pktType = 0xFF; - - CHECK_NULL_RETURN_STATUS(posOutContent); - - do - { - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT | CONTENT_PKT_TYPE_AP | CONTENT_PKT_TYPE_IBSS)) - { - if(RT_SEC_LVL_WPA2 != pSecInfo->SecLvl) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("SecLvl (%d) != RT_SEC_LVL_WPA2\n", pSecInfo->SecLvl)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_802_11)) - { - pktType = PacketGetType(*posOutContent); - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - if(!pInfoBuf || InfoBufLen < sizeof(RT_WLAN_BSS)) - { - RT_TRACE_F(COMP_SEC, DBG_SERIOUS, ("Invalid input buffer or length, pInfoBuf = %p, InfoBufLen = %d\n", pInfoBuf, InfoBufLen)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - pTargetBss = (PRT_WLAN_BSS)pInfoBuf; - - if(NULL == (pEntry = FtGetEntry(pAdapter, pTargetBss->bdBssIdBuf))) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "FT_AppendMdIE() No Entry for BSSID = ", pTargetBss->bdBssIdBuf); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - // Do not append RSN IE in default. - rtStatus = RT_STATUS_INVALID_DATA; - switch(pktType) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case Type_Auth: - { - if(pEntry) - { - if(pEntry->PMKR0NameLen > 0 && pEntry->FTELen > 0 && pEntry->MDELen) - { - rtStatus = RT_STATUS_SUCCESS; - } - } - } - break; - - case Type_Asoc_Req: - case Type_Reasoc_Req: - rtStatus = RT_STATUS_SUCCESS; - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - // No need to append This IE - RT_TRACE_F(COMP_MLME, DBG_TRACE, ("pktType = 0x%02X, no need to append MD IE\n", pktType)); - break; - } - - // MD Element - FillOctetString(osMdIe, pEntry->MDE, (u2Byte)(pEntry->MDELen)); - } - else - { - //3 // ToDo: Support AP mode later. - rtStatus = RT_STATUS_NOT_SUPPORT; - break; - } - - if(maxBufLen < ((u4Byte)posOutContent->Length + osMdIe.Length)) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("maxBufLen (%d) <= packet + MDIE len (%d)\n", maxBufLen, (posOutContent->Length + osMdIe.Length))); - rtStatus = RT_STATUS_BUFFER_TOO_SHORT; - break; - } - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FT_AppendMdIE() Append MDIE:\n", osMdIe.Octet, osMdIe.Length); - AppendAdditionalIEs(posOutContent, osMdIe); - }while(FALSE); - - FunctionOut(COMP_MLME); - - return rtStatus; -} - -// -// Description: -// Append Fast Transition FT (Fast BSS transition) IE to this packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] contentType - -// The type of content to append packet. This field also indicates which type of posOutContent. -// CONTENT_PKT_TYPE_xxx - -// [in] pInfoBuf - -// This field is determined by contentType and shall be casted to the corresponding type. -// pInfoBuf is PRT_WLAN_BSS if contentType is CONTENT_PKT_TYPE_CLIENT. -// [in] InfoBufLen - -// Length in byte of pInfoBuf. -// [in] maxBufLen - -// The max length of posOutContent buffer in byte. -// [out] posOutContent - -// The OCTECT_STRING structure for the content buffer and length. -// posOutContent is a 802.11 packet if contentType is CONTENT_PKT_TYPE_802_11. -// Return: -// RT_STATUS_SUCCESS, if the content is appended withour error. -// RT_STATUS_BUFFER_TOO_SHORT, if the max length of buffer is not long enough. -// RT_STATUS_INVALID_STATE, if the security parameter is mismatched. -// Remark: -// To determine what to append to the output content, the pTargetBss, contentType, and posOutContent -// shall be filled when calling this function. If FT IE will be appended to an association request frame in posOutContent, -// the 802.11 packet type and MAC header shall be filled in posOutContent before calling this function. -// By Bruce, 2015-12-16. -// -RT_STATUS -FT_AppendFtIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_SECURITY_T pSecInfo = &pAdapter->MgntInfo.SecurityInfo; - PFT_INFO_ENTRY pEntry = NULL; - OCTET_STRING osFtIe = {NULL, 0}; - PRT_WLAN_BSS pTargetBss = NULL; - u1Byte pktType = 0xFF; - - CHECK_NULL_RETURN_STATUS(posOutContent); - - do - { - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT | CONTENT_PKT_TYPE_AP | CONTENT_PKT_TYPE_IBSS)) - { - if(RT_SEC_LVL_WPA2 != pSecInfo->SecLvl) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("SecLvl (%d) != RT_SEC_LVL_WPA2\n", pSecInfo->SecLvl)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_802_11)) - { - pktType = PacketGetType(*posOutContent); - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - if(!pInfoBuf || InfoBufLen < sizeof(RT_WLAN_BSS)) - { - RT_TRACE_F(COMP_SEC, DBG_SERIOUS, ("Invalid input buffer or length, pInfoBuf = %p, InfoBufLen = %d\n", pInfoBuf, InfoBufLen)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - pTargetBss = (PRT_WLAN_BSS)pInfoBuf; - - if(NULL == (pEntry = FtGetEntry(pAdapter, pTargetBss->bdBssIdBuf))) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "FT_AppendMdIE() No Entry for BSSID = ", pTargetBss->bdBssIdBuf); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - // Do not append RSN IE in default. - rtStatus = RT_STATUS_INVALID_DATA; - switch(pktType) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case Type_Auth: - { - if(pEntry) - { - if(pEntry->PMKR0NameLen > 0 && pEntry->FTELen > 0 && pEntry->MDELen) - { - rtStatus = RT_STATUS_SUCCESS; - } - } - } - break; - - case Type_Asoc_Req: - case Type_Reasoc_Req: - rtStatus = RT_STATUS_SUCCESS; - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - // No need to append This IE - RT_TRACE_F(COMP_MLME, DBG_TRACE, ("pktType = 0x%02X, no need to append Ft IE\n", pktType)); - break; - } - - // MD Element - FillOctetString(osFtIe, pEntry->FTE, (u2Byte)(pEntry->FTELen)); - } - else - { - //3 // ToDo: Support AP mode later. - rtStatus = RT_STATUS_NOT_SUPPORT; - break; - } - - if(maxBufLen < ((u4Byte)posOutContent->Length + osFtIe.Length)) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("maxBufLen (%d) <= packet + FTIE len (%d)\n", maxBufLen, (posOutContent->Length + osFtIe.Length))); - rtStatus = RT_STATUS_BUFFER_TOO_SHORT; - break; - } - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FT_AppendFtIE() Append FTIE:\n", osFtIe.Octet, osFtIe.Length); - AppendAdditionalIEs(posOutContent, osFtIe); - }while(FALSE); - - FunctionOut(COMP_MLME); - - return rtStatus; -} - diff --git a/network/wlan/WDI/COMMON/MgntConstructPacket.h b/network/wlan/WDI/COMMON/MgntConstructPacket.h deleted file mode 100644 index e095299b..00000000 --- a/network/wlan/WDI/COMMON/MgntConstructPacket.h +++ /dev/null @@ -1,353 +0,0 @@ -#ifndef __INC_MGNTCONSTRUCTPACKET_H -#define __INC_MGNTCONSTRUCTPACKET_H - -#include "1x_kmsm_eapolkey.h" -#include "RmDef.h" - -VOID -SelectSupportedRatesElement( - IN WIRELESS_MODE wirelessmode, - IN OCTET_STRING SuppRates, - IN BOOLEAN bFilterCck, - OUT POCTET_STRING pSuppRates, - OUT POCTET_STRING pExtSuppRates - ); - - -VOID -ConstructBeaconFrame( - PADAPTER Adapter - ); - -VOID -UpdateBeaconFrame( - PADAPTER Adapter - ); - -BOOLEAN -Isdot11acAvailable( - PADAPTER Adapter - ); - -VOID -ConstructProbeRequest( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - BOOLEAN bBroadcastBssid, - BOOLEAN bAnySsid, - BOOLEAN bForcePowerSave - ); - -VOID -ConstructProbeRequestEx( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - OCTET_STRING Ssid, - BOOLEAN bForcePowerSave - ); - -VOID -ConstructAuthenticatePacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte auStaAddr, - u1Byte AuthAlg, - u1Byte AuthSeq, - u1Byte AuthStatusCode, - OCTET_STRING AuthChallengetext - ); - -VOID -ConstructAssociateReq( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocListenInterval, - OCTET_STRING asocSsid, - OCTET_STRING asocSuppRates - ); - -VOID -ConstructReAssociateReq( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte ReasocStaAddr, - u2Byte ReasocCap, - u2Byte ReasocListenInterval, - pu1Byte CurrentasocStaAddr, - OCTET_STRING ReasocSsid, - OCTET_STRING ReasocSuppRates - ); - -VOID -ConstructAssociateRsp( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocStatusCode, - u2Byte asocID, - BOOLEAN bReAssocRsp, - BOOLEAN bQosSta - ); - -VOID -ConstructDeauthenticatePacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte auSta, - u1Byte asRsn - ); - -VOID -ConstructDisassociatePacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte asSta, - u1Byte asRsn - ); - -VOID -ConstructProbeRsp( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte StaAddr, - IN BOOLEAN bHideSSID, - IN PRT_RFD pRfdProbeReq, - IN POCTET_STRING posProbeReq - ); - -VOID -ConstructCustomizedData( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - OUT pu4Byte pLength, - IN u2Byte pktLength - ); - -VOID -ConstructNullFunctionData( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte StaAddr, - IN BOOLEAN bQoS, - IN u1Byte AC, - IN BOOLEAN bEosp, - IN BOOLEAN bForcePowerSave - ); - -VOID -ConstructBtNullFunctionData( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte StaAddr, - IN BOOLEAN bQoS, - IN u1Byte AC, - IN BOOLEAN bEosp, - IN BOOLEAN bForcePowerSave - ); - -VOID -ConstructPSPoll( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength - ); - -VOID -ConstructMagicPacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte StaAddr - ); - -VOID -ConstructEapolKeyPacket( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - pu1Byte StaAddr, - - pu1Byte pKCK, // Pointer to KCK (EAPOL-Key Confirmation Key). - pu1Byte pKEK, // Pointer to KEK (EAPOL-Key Encryption Key). - - KeyType eKeyType, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - BOOLEAN bInstall, // EAPOL-Key Information field: Install Flag. - BOOLEAN bKeyAck, // EAPOL-Key Information field: Key Ack bit. - BOOLEAN bKeyMIC, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - BOOLEAN bSecure, // EAPOL-Key Information field: Secure bit. - BOOLEAN bError, // EAPOL-Key Information field: Error bit. True for MIC failure report. - BOOLEAN bRequest, // EAPOL-Key Information field: Requst bit. - - u8Byte u8bKeyReplayCounter, // EAPOL-KEY Replay Counter field. - pu1Byte pKeyNonce, // EAPOL-Key Key Nonce field (32-byte). - u8Byte u8bKeyRSC, // EAPOL-Key Key RSC field (8-byte). - - POCTET_STRING posRSNIE, // Key Data field: Pointer to RSN IE. - pu1Byte pGTK, // Key Data field: Pointer to GTK. - BOOLEAN bEncrypt // encrypt the packet or not. added by Annie, 2005-07-11. -); - - -VOID -ConstructCcxRmReport( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN PRT_RM_REPORTS pRmReports - ); - -VOID -ConstructDot11kRmReport( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN PRT_RM_REQUESTS pRmRequests, - IN PRT_RM_REPORTS pRmReports - ); - -VOID -ConstructCcxROGUEAPReport( - PADAPTER Adapter, - pu1Byte Buffer, - pu4Byte pLength, - int index -); - - -// -// Add for all management action frame to filling frame header. -// -VOID -ConstructMaFrameHdr( - IN PADAPTER Adapter, - IN pu1Byte pAddr, - IN u1Byte Category, - IN u1Byte Action, - OUT POCTET_STRING posMaFrame - ); - -VOID -AppendAdditionalIEs( - OUT POCTET_STRING packet, - IN OCTET_STRING ies -); - -VOID -ConstructQosADDTSPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN u1Byte DialogToken, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ); - -VOID -ConstructQosDELTSPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ); - -VOID -ConstructCcxNeighborPoll( - IN PADAPTER Adapter, - OUT pu1Byte Buffer, - OUT pu4Byte pLength - ); - -VOID -AppendQoSElement( - OUT POCTET_STRING packet, - IN POCTET_STRING element, - IN u1Byte OUI_Subtype - ); - -VOID -ConstructEAPOLStartPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN BOOLEAN bEncrypt - ); - -VOID -ConstructARPResponse( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pIPAddres - ); - -VOID -ConstructCtsPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pStaAddr - ); - -VOID -ConstructNSPacket( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pTAAddress - ); - -VOID -ConstructSAQeuryReq( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ); - -VOID -ConstructSAQeuryRsp( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN pu4Byte pLength, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ); - -RT_STATUS -FT_AppendMdIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ); - -RT_STATUS -FT_AppendFtIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ); - -#endif // #ifndef __INC_MGNTCONSTRUCTPACKET_H - diff --git a/network/wlan/WDI/COMMON/MgntEngine.c b/network/wlan/WDI/COMMON/MgntEngine.c deleted file mode 100644 index 60296a83..00000000 --- a/network/wlan/WDI/COMMON/MgntEngine.c +++ /dev/null @@ -1,2480 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntEngine.tmh" -#endif - -//============================================================================= -// Private Definitions -//============================================================================= -// -// Description: -// Function prototype of action frame handler. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Return RT_STATUS_PKT_DROP if this packet shall be dropped after this function finishes. -// -typedef RT_STATUS -(*RT_ACTION_CMD_HANDLER)( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -typedef struct _RTL_DO11_ACTION_FRAME_CMD -{ - const ACT_PKT_TYPE PktType; // Action packet type - const RT_ACTION_CMD_HANDLER CmdHandler; // Command Action - const char* Name; // Command Name -}RTL_DO11_ACTION_FRAME_CMD, *PRTL_DO11_ACTION_FRAME_CMD; - -RTL_DO11_ACTION_FRAME_CMD ActionFrameCmd[] = -{ - //==BA==// - {ACT_PKT_BA_ADDBAREQ, OnADDBAReq, "OnADDBAReq"}, - {ACT_PKT_BA_ADDBARSP, OnADDBARsp, "OnADDBARsp"}, - {ACT_PKT_BA_DELBA, OnDELBA, "OnDELBA"}, - //==Public==// - {ACT_PKT_BSS_COEXIST, OnBssCoexistence, "OnBssCoexistence"}, - //==SA Query==// - {ACT_PKT_SA_QUERY_REQ, OnSAQueryReq, "OnSAQueryReq"}, - {ACT_PKT_SA_QUERY_RSP, OnSAQueryRsp, "OnSAQueryRsp"}, - {ACT_PKT_TDLS_DISC_RSP, TDLS_OnDiscoveryRsp, "TDLS_OnDiscoveryRsp"}, - //==RM==// - // DO NOT define function handler to NULL - //{ACT_PKT_RM_RM_REQ, OnDot11kRmRequest, "OnDot11kRmRequest"}, - //==HT==// - {ACT_PKT_HT_SM_PS, OnMimoPs, "OnMimoPs"}, - //==WMM==// - {ACT_PKT_WMM_ADDTSREQ, OnAddTsReq, "OnAddTsReq"}, - {ACT_PKT_WMM_ADDTSRSP, OnAddTsRsp, "OnAddTsRsp"}, - {ACT_PKT_WMM_DELTS, OnDelTs, "OnDelTs"}, - //==VHT==// - {ACT_PKT_VHT_OPMODE_NOTIFICATION, VHT_OnOpModeNotify, "VHT_OpModeNotification"}, - - // ===== P2P ===== -#if (P2P_SUPPORT == 1) - {ACT_PKT_P2P_GO_NEG_REQ, P2P_OnGONReq, "P2P_OnGONReq"}, - {ACT_PKT_P2P_GO_NEG_RSP, P2P_OnGONRsp, "P2P_OnGONRsp"}, - {ACT_PKT_P2P_GO_NEG_CONF, P2P_OnGONConfirm, "P2P_OnGONConfirm"}, - {ACT_PKT_P2P_INVIT_REQ, P2P_OnInvitationReq, "P2P_OnInvitationReq"}, - {ACT_PKT_P2P_INVIT_RSP, P2P_OnInvitationRsp, "P2P_OnInvitationRsp"}, - {ACT_PKT_P2P_DEV_DISCOVERABILITY_REQ, P2P_OnDeviceDiscoverabilityReq, "P2P_OnDeviceDiscoverabilityReq"}, - {ACT_PKT_P2P_PROV_DISC_REQ, P2P_OnProvisionDiscoveryReq, "P2P_OnProvisionDiscoveryReq"}, - {ACT_PKT_P2P_PROV_DISC_RSP, P2P_OnProvisionDiscoveryRsp, "P2P_OnProvisionDiscoveryRsp"}, - {ACT_PKT_P2P_PRESENCE_REQ, P2P_OnPresenceReq, "P2P_OnPresenceReq"}, - {ACT_PKT_P2P_GO_DISCOVERABILITY_REQ, P2P_OnGODiscoverabilityReq, "P2P_OnGODiscoverabilityReq"}, -#endif // end #if (P2P_SUPPORT == 1) - {ACT_PKT_GAS_INT_REQ, GAS_OnInitReq, "GAS_OnInitReq"}, - {ACT_PKT_GAS_INT_RSP, GAS_OnInitRsp, "GAS_OnInitRsp"}, - {ACT_PKT_GAS_COMEBACK_REQ, GAS_OnComebackReq, "GAS_OnComebackReq"}, - {ACT_PKT_GAS_COMEBACK_RSP, GAS_OnComebackRsp, "GAS_OnComebackRsp"}, - -#if (NAN_SUPPORT == 1) - {ACT_PKT_NAN_SDF, NAN_OnSDFReceived, "NAN_OnSDF"}, -#endif - // ===== Add new item above this line ===== - {ACT_PKT_TYPE_UNKNOWN, NULL, "NULL"} -}; - -// -// Description: -// Function prototype of encapsulated data frame handler. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// [in] contentOffset - -// The offset from 802.11 header (MAC header + Qos + Security + HC control ..) to the content. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Return RT_STATUS_PKT_DROP if this packet shall be dropped after this function finishes. -// -typedef RT_STATUS -(*RT_ENCAP_DATA_CMD_HANDLER)( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu, - IN u4Byte contentOffset - ); - -typedef struct _RTL_ENCAP_DATA_FRAME_CMD -{ - const ENCAP_DATA_PKT_TYPE PktType; // Encapsulated data packet type - const RT_ENCAP_DATA_CMD_HANDLER CmdHandler; // Command Action - const char* Name; // Command Name -}RTL_ENCAP_DATA_FRAME_CMD, *PRTL_ENCAP_DATA_FRAME_CMD; - -RTL_ENCAP_DATA_FRAME_CMD EncapDataFrameCmd[] = -{ - //==TDLS==// - {ENCAP_DATA_PKT_TDLS_SETUP_REQ, TDLS_OnSetupReq, "TDLS_OnSetupReq"}, - {ENCAP_DATA_PKT_TDLS_SETUP_RSP, TDLS_OnSetupRsp, "TDLS_OnSetupRsp"}, - {ENCAP_DATA_PKT_TDLS_SETUP_CONFIRM, TDLS_OnSetupConfirm, "TDLS_OnSetupConfirm"}, - {ENCAP_DATA_PKT_TDLS_TEARDOWN, TDLS_OnTearDown, "TDLS_OnTearDown"}, - {ENCAP_DATA_PKT_TDLS_DISC_REQ, TDLS_OnDiscoveryReq, "TDLS_OnDiscoveryReq"}, - {ENCAP_DATA_PKT_TDLS_TRAFFIC_INDI, TDLS_OnTrafficInd, "TDLS_OnTrafficInd"}, - {ENCAP_DATA_PKT_TDLS_TRAFFIC_RSP, TDLS_OnTrafficRsp, "TDLS_OnTrafficRsp"}, - {ENCAP_DATA_PKT_TDLS_CHNL_SW_REQ, TDLS_OnChnlSwitchReq, "TDLS_OnChnlSwitchReq"}, - {ENCAP_DATA_PKT_TDLS_CHNL_SW_RSP, TDLS_OnChnlSwitchRsp, "TDLS_OnChnlSwitchRsp"}, - {ENCAP_DATA_PKT_TDLS_PROBE_REQ, TDLS_OnTunneledProbeReq, "TDLS_OnTunneledProbeReq"}, - {ENCAP_DATA_PKT_TDLS_PROBE_RSP, TDLS_OnTunneledProbeRsp, "TDLS_OnTunneledProbeRsp"}, - {ENCAP_DATA_PKT_CCX_IAPP, CCX_OnIAPPPacket, "CCX_OnIAPPPacket"}, - // ===== Add new item above this line ===== - {ENCAP_DATA_PKT_UNKNOWN, NULL, "NULL"} -}; - -//============================================================================= -// Prototype of private functions. -//============================================================================= - - -//============================================================================= -// End of Prototype of private functions. -//============================================================================= - -//============================================================================= -// Private functions. -//============================================================================= - - -//============================================================================= -// End of Private functions. -//============================================================================= - - -RT_WLAN_BSS *BssDescDupSource( - PADAPTER Adapter, -// OCTET_STRING mmpdu - PRT_RFD pRfd -); - -VOID -DFS_OnBeacon_Bss( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc -); - - -// -// Description: -// Add new STA of the IBSS and indicate association start, -// association complete events for it. -// -BOOLEAN -AsocEntry_AddIbssPeerSta( - IN PADAPTER pAdapter, - IN PRT_WLAN_BSS pBssDesc - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - pu1Byte pTaddr = pBssDesc->bdMacAddressBuf; - PRT_WLAN_STA pEntry; - BOOLEAN bUseRAMask = FALSE; - BOOLEAN bAMSDUTestChk; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - // - // Add the STA into table and indicate association related event - // if this is the 1st time we hear Beacon from this STA. - // - if(AsocEntry_GetEntry(pMgntInfo, pTaddr) != NULL) - { - return FALSE; - } - - AsocEntry_AddStation(pAdapter, pTaddr, OPEN_SYSTEM); - pEntry = AsocEntry_GetEntry(pMgntInfo, pTaddr); - if(pEntry != NULL) - { - u1Byte i, rate; - - pEntry->AID = AsocEntry_AssignAvailableAID(pMgntInfo, pTaddr); - pEntry->IOTPeer = pBssDesc->Vender; - pEntry->AssociatedMacId = (u1Byte) MacIdRegisterMacIdForAssociatedID(pAdapter, MAC_ID_OWNER_AD_HOC, pEntry->AID); - - //YJ, add for TX RPT, 111213 - if(pMgntInfo->MaxMACID < pEntry->AssociatedMacId) - { - pMgntInfo->MaxMACID = (u2Byte) pEntry->AssociatedMacId; - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_TX_RPT_MAX_MACID, (pu1Byte)(&(pMgntInfo->MaxMACID))); - } - pEntry->bAssociated = TRUE; - AsocEntry_UpdateTimeStamp(pEntry); - - // - // Get the supported rate of the STA. - // - pEntry->bdSupportRateEXLen = pBssDesc->bdSupportRateEXLen; - CopyMem(pEntry->bdSupportRateEXBuf, pBssDesc->bdSupportRateEXBuf, pEntry->bdSupportRateEXLen); - - // - // Get highest supported rate of the STA. - // - pEntry->HighestOperaRate = pMgntInfo->LowestBasicRate & 0x7f; - for(i = 0; i < pEntry->bdSupportRateEXLen; i++) - { - if( (pEntry->bdSupportRateEXBuf[i] & 0x7f) > pEntry->HighestOperaRate) - pEntry->HighestOperaRate = pEntry->bdSupportRateEXBuf[i] & 0x7f; - } - - // Update Qos mode!! - pEntry->QosMode = pBssDesc->BssQos.bdQoSMode; - - // Update WirelessMode. - if(IS_WIRELESS_MODE_24G(pAdapter)) - { - pEntry->WirelessMode = WIRELESS_MODE_B; - for(i = 0; i < pEntry->bdSupportRateEXLen; i++) - { - rate = (pEntry->bdSupportRateEXBuf[i] & 0x7f); - if( !MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) && - MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_G) ) - { - pEntry->WirelessMode = WIRELESS_MODE_G; - break; - } - } - } - else - { - pEntry->WirelessMode = WIRELESS_MODE_A; - } - - // Update HT related information - if(pHTInfo->bCurrentHTSupport && pBssDesc->BssHT.bdSupportHT) - { - pu1Byte pHTCapEle = (pu1Byte)pBssDesc->BssHT.bdHTCapBuf; - - // Use tx adsud for 11n adhoc mode - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER) - { - - bAMSDUTestChk = FALSE; - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_AMSDU_TEST_SETTING, (pu1Byte)(&bAMSDUTestChk)); - if(bAMSDUTestChk) - { - if(pHTInfo->ForcedAMSDUMode == HT_AMSDU_ENABLE) - pEntry->IOTAction = HT_IOT_ACT_AMSDU_ENABLE; - else if(pHTInfo->ForcedAMSDUMode == HT_AMSDU_WITHIN_AMPDU) - pEntry->IOTAction = HT_IOT_ACT_AMSDU_AMPDU; - else - pEntry->IOTAction = 0; - } - } - - pEntry->HTInfo.bEnableHT = TRUE; - if(pEntry->WirelessMode == WIRELESS_MODE_A) - pEntry->WirelessMode = WIRELESS_MODE_N_5G; - else if(pEntry->WirelessMode == WIRELESS_MODE_G) - pEntry->WirelessMode = WIRELESS_MODE_N_24G; - - HTCheckHTCap(pAdapter, pEntry, pHTCapEle); - - if(pVHTInfo->bCurrentVHTSupport && pBssDesc->BssVHT.bdSupportVHT) - { - pu1Byte pVHTCapEle = (pu1Byte)pBssDesc->BssVHT.bdVHTCapBuf; - - pEntry->VHTInfo.bEnableVHT = TRUE; - if(pEntry->WirelessMode == WIRELESS_MODE_N_5G) - pEntry->WirelessMode = WIRELESS_MODE_AC_5G; - else - pEntry->WirelessMode = WIRELESS_MODE_AC_24G; - - VHTCheckVHTCap(pAdapter, pEntry, pVHTCapEle); - } - } - - // Porting from AP_OnAsocReq() to initialize the protection mechnism in IBSS mode. - // These part is lost before. 2010.11.02. Added by tynli. - // Enable protection mode and Disable short slot time if an [B-mode STA joined] or[ G-mode Connect to Soft N AP] - if(pEntry->WirelessMode == WIRELESS_MODE_B) - { - ActUpdate_ProtectionMode(pAdapter, TRUE); - - if(pEntry->WirelessMode == WIRELESS_MODE_B) - pMgntInfo->mCap &= (~cShortSlotTime); - else - pMgntInfo->mCap |= (cShortSlotTime); - - ActUpdate_mCapInfo(pAdapter, pMgntInfo->mCap); - } - - if( IS_WIRELESS_MODE_AC(pAdapter) && - pEntry->IOTPeer == HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP) - { - u2Byte JaguarPatch = (HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP << 8) | (RT_MEDIA_CONNECT); - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_JAGUAR_PATCH, (pu1Byte)(&JaguarPatch)); - } - - // Update the Operation mode field in HT Info element. - if(IS_WIRELESS_MODE_N(pAdapter) ) - { - if(pEntry->WirelessMode == WIRELESS_MODE_B || pEntry->WirelessMode == WIRELESS_MODE_G) - pHTInfo->CurrentOpMode = HT_OPMODE_MIXED; - else - { - if(CHNL_RUN_ABOVE_40MHZ(pMgntInfo) && (pEntry->WirelessMode == WIRELESS_MODE_N_24G)) - pHTInfo->CurrentOpMode = HT_OPMODE_40MHZ_PROTECT; - else - pHTInfo->CurrentOpMode = HT_OPMODE_NO_PROTECT; - - } - } - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - if(bUseRAMask) - { - AP_InitRateAdaptiveState(pAdapter, pEntry); - pMgntInfo->Ratr_State = 0; - pAdapter->HalFunc.UpdateHalRAMaskHandler(pAdapter, pEntry->AssociatedMacId, pEntry, pMgntInfo->Ratr_State); - } - else - { - pAdapter->HalFunc.UpdateHalRATRTableHandler( - pAdapter, - &pMgntInfo->dot11OperationalRateSet, - pMgntInfo->dot11HTOperationalRateSet,pEntry); - } - - - // Update RTS init rate after we set RA MASK. by tynli. 2010.11.25. - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)&pAdapter); - return TRUE; - } - else - { - RT_PRINT_ADDR(COMP_MLME, DBG_WARNING, ("AsocEntry_AddIbssPeerSta(): this station is already here: \n"), pTaddr); - return FALSE; - } -} - - - -VOID -OnBeacon_Scan( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - pMgntInfo->LinkDetectInfo.OnBeaconScanCnt_OnBeacon_Scan++; //cosa add for debug. - GetScanInfo( Adapter, pRfd); -} - - -void -ChangeRsnIEOnSameBssid( - PADAPTER Adapter, - PRT_RFD pRfd, - u1Byte Authtype -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING RSNIE; - OCTET_STRING mmpdu; - u1Byte *pCurr; - u1Byte count; - u1Byte PairwiseCipherCount = 0; - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - - RSNIE.Octet = NULL; - RSNIE.Length = 0; - - if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA2 ) - { - RSNIE = PacketGetElement(mmpdu, EID_WPA2, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - } - else if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA ) - { - RSNIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_WPA, OUI_SUBTYPE_DONT_CARE ); - } - - if( RSNIE.Length == 0 ) - return; - - //RT_PRINT_DATA(COMP_INDIC , DBG_LOUD, " Change :\n" , mmpdu.Octet , mmpdu.Length); - RT_TRACE(COMP_INDIC , DBG_LOUD , (" Authtype : %d\n",Authtype) ); - - RT_PRINT_DATA(COMP_INDIC, DBG_LOUD, " Change :\n" , RSNIE.Octet , RSNIE.Length); - pCurr = RSNIE.Octet; - - // SKIP Head - if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA) - { - pCurr+=4; - pCurr+=2; - } - else if(pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_WPA2) - { - pCurr+=2; - } - - // SKIP Group Chiper - pCurr += 3; - pCurr += 1; - - - // SKIP Uncase Chiper - PairwiseCipherCount = *pCurr; - pCurr+=2; // Munber two byte - - if(PairwiseCipherCount >0 ) - { - for(count = 0; count < PairwiseCipherCount; count++) - { - pCurr+=4; - } - } - - pCurr+=2; - // Get AKM suite - RT_PRINT_DATA(COMP_INDIC , DBG_LOUD , " AKM data: \n " , pCurr , 4 ); - pCurr[3] = Authtype; - RT_PRINT_DATA(COMP_INDIC , DBG_LOUD , "After AKM data: \n " , pCurr , 4 ); -} - - -VOID -OnBeacon_Join( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_WLAN_BSS pBssDesc = NULL; // Reduce stack size - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - pMgntInfo->LinkDetectInfo.OnBeaconJoinCnt_OnBeacon_Join++; //cosa add for debug. - - pBssDesc = &pMgntInfo->bssDesc_OnBeacon; - - GetValueFromBeaconOrProbeRsp( Adapter, pRfd, pBssDesc, FALSE); - - RT_PRINT_ADDR(COMP_MLME|COMP_BEACON, DBG_TRACE, "===> OnBeacon_Join():", pBssDesc->bdBssIdBuf); - RT_TRACE(COMP_MLME, DBG_TRACE, ("OnBeacon_Join(): channel = %d\n", pBssDesc->ChannelNumber)); - - // - // 061026, Rcnjko: - // 1. 8186 doesn't include Realtek CAP IE in ProbeRsp and therefore we - // determine bRealtekCapType1Exist here instead of SetupJoinInfraInfo. - // 2. awlays keep Realtek CAP IE. We might use it - // for 8186 Auto Turbo mode or other compatibility issue. - // 3. 8186 include this IE in Beacon when its Turbo Mode is configured - // as "Auto" or "Always". - // Added by Roger, 2006.12.08. - // - pMgntInfo->bRealtekCapType1Exist = pBssDesc->bRealtekCapType1Exist ; - pMgntInfo->bRealtekAggCapExist = pBssDesc->bRealtekAggCapExist; - - if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { // Infra-structure mode. - // For Hidden AP and EzConfig AP, their beacons won't contain the SSID - // we want, and therefore, either BSSID or SSID matched is acceptable. - // 2004.11.18, by rcnjko. - if( PlatformCompareMemory( pMgntInfo->Bssid, pBssDesc->bdBssIdBuf, 6) != 0 ) // BSSID mismatched - { - return; - } - } - else - { // IBSS or others. - if( PlatformCompareMemory( pMgntInfo->Bssid, pBssDesc->bdBssIdBuf, 6) != 0 || // BSSID mismatched. - !CompareSSID(pBssDesc->bdSsIdBuf, pBssDesc->bdSsIdLen, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length)) // SSID mismatchec. - { - return; - } - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - CopyWlanBss(&(pMgntInfo->targetBSS), pBssDesc); - - RT_PRINT_ADDR(COMP_MLME|COMP_BEACON, DBG_LOUD, "===> OnBeacon_Join():", pBssDesc->bdBssIdBuf); - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnBeacon_Join(): channel = %d\n", pBssDesc->ChannelNumber)); - - //Update Dtim period. - if(pMgntInfo->dot11DtimPeriod != pBssDesc->bdDtimPer) - { - pMgntInfo->dot11DtimPeriod = pBssDesc->bdDtimPer; - } - if(pMgntInfo->dot11PowerSaveMode !=eFastPs) - { - pMgntInfo->ListenInterval = pMgntInfo->dot11DtimPeriod; - } - - // Update beacon and peer information, 2006.11.14, by shien chang. - MgntUpdateAsocInfo(Adapter, UpdateAsocBeacon, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pBssDesc->bdMacAddressBuf, 6); - - CCX_SSIDLUpdateJoinBss(Adapter, pRfd, pBssDesc); - - pMgntInfo->TSFValue = pBssDesc->bdTstamp; // by tynli. - - //Set state_Synchronization_Sta - if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE ) - { - // For receiving beacon and preventing wrong restoration in ScanComplete() ------------------------------------- - pMgntInfo->state_Synchronization_Sta = pMgntInfo->state_Synchronization_Sta_BeforeScan = STATE_Bss; - RT_TRACE_F(COMP_SCAN, DBG_LOUD, ("Set Port (%d) pMgntInfo->state_Synchronization_Sta = %d\n", - GET_PORT_NUMBER(Adapter), Adapter->MgntInfo.state_Synchronization_Sta) - ); - // --------------------------------------------------------------------------------------------------- - } - else if( pMgntInfo->OpMode == RT_OP_MODE_IBSS ) - { - if(pMgntInfo->pHTInfo->bCurrentHTSupport == TRUE) - { - OCTET_STRING pduOS; - FillOctetString(pduOS, pMgntInfo->AsocInfo.Beacon, (u2Byte)pMgntInfo->AsocInfo.BeaconLength); - HTOnAssocRsp(Adapter, pduOS); - - if(pMgntInfo->pVHTInfo->bCurrentVHTSupport) - VHTOnAssocRsp(Adapter, pduOS); - - CHNL_SetBwChnlFromPeer(Adapter); - } - else - { - PlatformZeroMemory(pMgntInfo->dot11HTOperationalRateSet, 16); - CHNL_SetBwChnl(Adapter, pMgntInfo->dot11CurrentChannelNumber, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT); - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case IBSS\n")); - return; - } - - // - // 061205, rcnjko: Add new STA of the IBSS and indicate association start, - // association complete events for it. - // - if(AsocEntry_AddIbssPeerSta(Adapter, pBssDesc)) - { - // Preprocessing for association operation. 2006.11.14, by shien chang. - DrvIFIndicateAssociationStart(Adapter); - - // Postprocessing for association operation. 2006.11.14, by shien chang. - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - } - - // Postprocessing for completion of a connection request, 2006.10.24, by shien chang. - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case IBSS 2\n")); - return; - } - - // Sync from 91su branch, 2009.04.27. - if( !pMgntInfo->bInToSleep && - !MgntRoamingInProgress(pMgntInfo) && pMgntInfo->RequestFromUplayer) - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_SUCCESS); - else if(MgntRoamingInProgress(pMgntInfo)) - { - MgntRoamComplete(Adapter, MlmeStatus_success); - } - - pMgntInfo->bInToSleep = FALSE; - pMgntInfo->state_Synchronization_Sta = STATE_Ibss_Idle; - - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_LINK); - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD,("OnBeacon_Join(): Unknown OP mode\n")); - } - - // This function move to here for RATR table setting when IBSS. - MgntLinkStatusUpdateRxBeacon( Adapter ); - PlatformCancelTimer( Adapter, &pMgntInfo->JoinTimer); - PlatformCancelTimer( Adapter, &pMgntInfo->JoinProbeReqTimer); - if(pMgntInfo->pChannelInfo->bSwBwInProgress) - PlatformSetTimer(Adapter,&pMgntInfo->JoinConfirmTimer, 200); - else - PlatformSetTimer(Adapter,&pMgntInfo->JoinConfirmTimer, 0); - - TDLS_CheckCapability(Adapter); - - //PlatformFreeMemory(pBssDesc, sizeof(RT_WLAN_BSS)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== OnBeacon_Join()\n")); -} - - -VOID -OnBeacon_Bss( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_WLAN_BSS pBssDesc = NULL; - pu1Byte pbssid = pRfd->Buffer.VirtualAddress + 16; - - pMgntInfo->LinkDetectInfo.OnBeaconBssCnt_OnBeacon_Bss++; //cosa add for debug - - if( pMgntInfo->mAssoc == FALSE ) - return; - - // Check BSSID. - if( PlatformCompareMemory( pMgntInfo->Bssid, pbssid, 6) != 0 ) - { - // BSSID mismatched. - return; - } - - pBssDesc = &pMgntInfo->bssDesc_OnBeacon; - - - - if(pDefaultAdapter->MgntInfo.RegMultiChannelFcsMode == MULTICHANNEL_FCS_SUPPORT_GO) - { - u8Byte u8APTsf = 0; - u8Byte uCurrentTsf = 0; - - u8APTsf = GET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(pRfd->Buffer.VirtualAddress); - u8APTsf <<= 32; - u8APTsf |= GET_BEACON_PROBE_RSP_TIME_STAMP_LOW(pRfd->Buffer.VirtualAddress); - - uCurrentTsf = (((u8Byte)pRfd->Status.TimeStampHigh) << 32) + ((u8Byte)pRfd->Status.TimeStampLow); - - MultiChannel_OnBss(pDefaultAdapter, u8APTsf, uCurrentTsf); - - } - - GetValueFromBeaconOrProbeRsp( Adapter, pRfd, pBssDesc, FALSE); - - DFS_StaCheckCsaInfo(Adapter, pBssDesc); - -// We should not compare SSID for Hidden AP case. 2005.04.14, by rcnjko. -// // Check SSID. -// if( !CompareSSID(bssDesc.bdSsIdBuf, bssDesc.bdSsIdLen, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length) ) -// { -// // SSID mismatched. -// return; -// } -// - - // Filter beacon from IBSS, 2006.11.22, by shien chang. - if ( (pBssDesc->bdCap & cESS) == 0) - { - //PlatformFreeMemory(pBssDesc, sizeof(RT_WLAN_BSS)); - return; - } - - //Update Dtim period. - if(pMgntInfo->dot11DtimPeriod != pBssDesc->bdDtimPer) - { - pMgntInfo->dot11DtimPeriod = pBssDesc->bdDtimPer; - } - if(pMgntInfo->dot11PowerSaveMode !=eFastPs) - { - pMgntInfo->ListenInterval = pMgntInfo->dot11DtimPeriod; - } - - // Update beacon informaton, 2006.11.14, by shien chang. - // Just Update on Join step !! - //MgntUpdateAsocInfo(Adapter, UpdateAsocBeacon, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // For WMM QoS Info Field update (WMM Power Save Mode). Annie, 2005-11-14. - // Isaiah move it - if( pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE ) - { - QosOnBeaconUpdateParameter( Adapter, pBssDesc ); - } - - // For HT Capability and HT information Element update. - if( pMgntInfo->pHTInfo->bCurrentHTSupport ) - { - HTUpdateSelfAndPeerSetting( Adapter, pBssDesc ); - if(pMgntInfo->pVHTInfo->bCurrentVHTSupport) - VHTUpdateSelfAndPeerSetting(Adapter, pBssDesc); - - if( PlatformIsWorkItemScheduled(&(pMgntInfo->ChangeBwChnlFromPeerWorkitem)) == FALSE) - { - //RT_TRACE(COMP_MLME, DBG_LOUD, ("ScheduleWorkItem -> ChangeBwChnlFromPeerWorkitem.\n")); - PlatformScheduleWorkItem(&(pMgntInfo->ChangeBwChnlFromPeerWorkitem)); - } - } - - ActUpdate_mCapInfo( Adapter, pBssDesc->bdCap ); // Uncommented for slot time setting in Wireless mode auto. By Annie, 2005-10-31. - if(pBssDesc->bERPInfoValid) - { - ActUpdate_ERPInfo( Adapter, pBssDesc->bdERPInfo); - } - - if(!GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - // - // Parse TIM in Beacon for ps mode, 070109, by rcnjko. - // - if( pMgntInfo->mAssoc && - pMgntInfo->dot11PowerSaveMode != eActive ) // We are configured to power save mode. - { - OCTET_STRING mmpdu; - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - if(IN_LEGACY_POWER_SAVE(pMgntInfo->pStaQos)) - { - LPS_OnBeacon_BSS(Adapter, mmpdu); - } - else - { - WMMPS_OnBeacon_BSS(Adapter, mmpdu); - } - } - } - - - //------------------------------------------------------------------------- - // For 8186 Auto-Turbo mode. Added by Roger, 2006.12.07. - if( pMgntInfo->bRealtekCapType1Exist && pBssDesc->bRealtekCapType1Exist ) - { - // I don't want to enter original 8187 turbo mechanism in this case. Added by Roger, 2006.12.07. - // Still need to check the MgntActSet_EnterTurboModeByStyle function(should be moved!!). - - RT_ASSERT( (!pMgntInfo->bSupportTurboMode), ("OnBeacon_Bss(): bSupportTurboMode is TRUE in 8186 Auto Turbo Mdoe!!!\n") ); - - if( GET_RTIE_CAPABILITY_TURBO_MODE(&(pBssDesc->RealtekCap) ) ) - { // Auto Turbo Mode by 8186. - BOOLEAN bEnterTurbo = !GET_RTIE_CAPABILITY_DISABLE_TURBO(&(pBssDesc->RealtekCap)); - PRT_TURBO_CA pTurboCa = &(pMgntInfo->TurboChannelAccess); - - // For debug, added by Roger, 2006.12.11. - RT_TRACE(COMP_MLME, DBG_TRACE, - ("OnBeacon_Bss(): Auto Turbo Mode by 8186.\n")); - RT_TRACE(COMP_MLME, DBG_TRACE, - ("OnBeacon_Bss():bEnterTurbo = %d, pTurboCa->bEnabled = %d\n",bEnterTurbo, pTurboCa->bEnabled)); - - if( bEnterTurbo != pTurboCa->bEnabled ) - { - // For debug, added by Roger, 2006.12.11. - RT_TRACE(COMP_MLME, DBG_TRACE, - ("OnBeacon_Bss(): Enter Turbo Mode by 8186.\n")); - //Modefied by Roger, 2006.12.07. - MgntActSet_EnterTurboMode( Adapter, bEnterTurbo ); - } - } - } - - //------------------------------------------------------------------------- - - MgntLinkStatusUpdateRxBeacon( Adapter ); - //PlatformFreeMemory(pBssDesc, sizeof(RT_WLAN_BSS)); -} - - - - -VOID -OnBeacon_Ibss( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING pduOS; - PRT_WLAN_BSS pBssDesc = NULL; - pu1Byte pbssid, pTaddr; - PRT_WLAN_STA pEntry; - PRT_SECURITY_T pSecurityInfo = &(Adapter->MgntInfo.SecurityInfo); - RT_ENC_ALG PairwiseEncAlgo = pSecurityInfo->PairwiseEncAlgorithm; - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - OCTET_STRING mmpdu; - RT_WLAN_BSS *bssDescTmp; - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("=======> OnBeacon_Ibss!\n")); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - pMgntInfo->LinkDetectInfo.OnBeaconIbssCnt_OnBeacon_Ibss++; //cosa add for debug - - FillOctetString(pduOS, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pbssid = Frame_Addr3(pduOS); - pTaddr = Frame_Addr2(pduOS); - - // Skip it if we are not in IBSS mode. - if( pMgntInfo->mIbss == FALSE ) - { - return; - } - - bssDescTmp = BssDescDupSource( Adapter, pRfd ); - - pBssDesc = &pMgntInfo->bssDesc_OnBeacon; - - // Retrive information from beacon. - GetValueFromBeaconOrProbeRsp( Adapter, pRfd, pBssDesc, FALSE); - - // Check SSID. - if( !CompareSSID(pBssDesc->bdSsIdBuf, pBssDesc->bdSsIdLen, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length) ) - { - return; - } - - // Check bss type, 2006.11.22, by shien chang. - if ( (pBssDesc->bdCap & cIBSS) == 0) - { - return; - } - - // - // Get channel info and determine if this channel is valid to join. - // - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &(pBssDesc->ChannelNumber), &pChnlListEntry); - - // Invalid channel number. - if(!pChnlListEntry) - { - return; - } - - if(pChnlListEntry->ExInfo & CHANNEL_EXINFO_NO_IBSS_JOIN) - { - return; - } - - if( (pBssDesc->bdCap & cPrivacy) ) - { - if(PairwiseEncAlgo == RT_ENC_ALG_NO_CIPHER ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnBeacon_Ibss(): BSS Cap shows privacy, but PairwiseEncAlgo is RT_ENC_ALG_NO_CIPHER\n")); - return; - } - } - else - { - if( PairwiseEncAlgo != RT_ENC_ALG_NO_CIPHER ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnBeacon_Ibss(): BSS Cap shows no privacy, but PairwiseEncAlgo is %d\n", PairwiseEncAlgo)); - return; - } - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - // Check BSSID. - if( PlatformCompareMemory( pMgntInfo->Bssid, pbssid, 6) == 0 ) - { // Normal Case, BSSID and SSID matched. - - // Update beacon information, 2006.11.14, by shien chang. - MgntUpdateAsocInfo(Adapter, UpdateAsocBeacon, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - MgntLinkStatusUpdateRxBeacon( Adapter ); - - pEntry = AsocEntry_GetEntry(pMgntInfo, pTaddr); - if(pEntry != NULL) - { - // Update information about this STA. - AsocEntry_UpdateTimeStamp(pEntry); - } - else - { - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("MgntUpdateAsocInfo")); - - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pTaddr, 6); // 061204, rcnjko: this is a MUST before indicating association related event. - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return; - } - - // - // 061205, rcnjko: Add new STA of the IBSS and indicate association start, - // association complete events for it. - // - if(AsocEntry_AddIbssPeerSta(Adapter, pBssDesc)) - { - // Preprocessing for association operation. 2006.11.14, by shien chang. - DrvIFIndicateAssociationStart(Adapter); - - // Postprocessing for association operation. 2006.11.14, by shien chang. - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_LINK); - } - } - // Fixed by CCW, Bruce It will cause beacon channel number error when media connect - if( !pMgntInfo->bMediaConnect ) - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, GENERAL_INDICATE ); - } - else - { - WAPI_OptionHandler(Adapter, pTaddr,FALSE, FALSE, FALSE, FALSE, FALSE,FALSE); - } - - - if( bssDescTmp == NULL ) - { - do - { - // Add a new bssdesc entry - if( pMgntInfo->NumBssDesc < MAX_BSS_DESC) - { - bssDescTmp = &pMgntInfo->bssDesc[pMgntInfo->NumBssDesc]; - } - else - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("OnBeacon_Ibss(): ERROR! No bssdesc entry.\n")); - //return; - break; - } - - // ShuChen TODO: Check Broadcom AP's 1M-Short Preamble issue. - GetValueFromBeaconOrProbeRsp( Adapter, pRfd, bssDescTmp, FALSE); - - // Determine the receiving packet type for BSS weighting. - bssDescTmp->BssPacketType |= - (PacketGetType(mmpdu) == Type_Probe_Rsp) ? BSS_PKT_PROBE_RSP : BSS_PKT_BEACON; - - CopyWlanBss(pMgntInfo->bssDesc4Query+pMgntInfo->NumBssDesc, pMgntInfo->bssDesc+pMgntInfo->NumBssDesc); - pMgntInfo->NumBssDesc += 1; - pMgntInfo->NumBssDesc4Query = pMgntInfo->NumBssDesc; - - }while(0); - } - } - else - { // SSID matched but BSSID mismatched. - - u8Byte u8CurrTsf; - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnBeacon_Ibss() SSID matched but BSSID mismatched.\n")); - u8CurrTsf = pRfd->Status.TimeStampHigh; - u8CurrTsf <<= 32; - u8CurrTsf |= pRfd->Status.TimeStampLow; - - // Check TSF, 2005.02.02, by rcnjko. - if(u8CurrTsf bdTstamp) - { - RT_TRACE(COMP_MLME, DBG_LOUD, (" OnBeacon_Ibss() Merge two IBSSs. \n")); - // Merge two IBSSs. 2004.10.12, by rcnjko. - pMgntInfo->JoinAction = RT_JOIN_IBSS; - - pMgntInfo->bInToSleep = TRUE; - - JoinRequest( Adapter, pMgntInfo->JoinAction, pBssDesc ); - } - } -} - - - -BOOLEAN -OnBeacon( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING osMpdu = {pRfd->Buffer.VirtualAddress, pRfd->PacketLength}; - - RT_TRACE(COMP_RECV, DBG_TRACE,("OnBeacon!!!\n")); - - pMgntInfo->LinkDetectInfo.OnBeaconCnt_OnBeacon++; //cosa add for debug. - -#if (MULTICHANNEL_SUPPORT == 1) -{ - OCTET_STRING osPacket = {NULL, 0}; - osPacket.Length = pRfd->PacketLength; - osPacket.Octet = pRfd->Buffer.VirtualAddress; - - MultiChannelHandleReceivedBeacon(Adapter, osPacket); - - if(eqMacAddr(Frame_pBssid(osPacket), pMgntInfo->Bssid)) - { - RT_PRINT_ADDR(COMP_P2P, DBG_TRACE, "OnBeacon(): Client Associated BSSID: ", Adapter->MgntInfo.Bssid); - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("pMgntInfo->state_Synchronization_Sta: %d\n", pMgntInfo->state_Synchronization_Sta)); - } -} -#endif - - switch( pMgntInfo->state_Synchronization_Sta ) - { - case STATE_Act_Receive: - case STATE_Pas_Listen: - case STATE_Act_Listen: - OnBeacon_Scan( Adapter, pRfd ); - break; - case STATE_Join_Wait_Beacon: - OnBeacon_Join( Adapter, pRfd ); - break; - case STATE_Bss: - OnBeacon_Bss( Adapter, pRfd ); - break; - - case STATE_Ibss_Active: - case STATE_Ibss_Idle: - OnBeacon_Ibss( Adapter, pRfd ); - break; - - default: - break; - } - - P2P_OnBeacon(Adapter, pRfd, &osMpdu); - WFD_OnBeacon(Adapter, pRfd, &osMpdu); - NAN_OnBeaconReceived(Adapter, pRfd, &osMpdu); - - return TRUE; -} - -VOID -OnProbeRsp( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - OCTET_STRING osMpdu = {NULL, 0}; - - if(Adapter->MgntInfo.state_Synchronization_Sta == STATE_Join_Wait_Beacon) - { - RT_TRACE( COMP_MLME , DBG_LOUD , ( " Used ProbeRsp to Join!! \n" ) ); - OnBeacon_Join( Adapter, pRfd); - } - else - { - GetScanInfo( Adapter, pRfd ); - } - - FillOctetString(osMpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - CustomScan_OnProbeRspCb(GET_CUSTOM_SCAN_INFO(Adapter), pRfd); - P2P_OnProbeRsp(Adapter, pRfd, &osMpdu); - WFD_OnProbeRsp(Adapter, pRfd, &osMpdu); -} - - - - - - -BOOLEAN -OnAuth_even( - PADAPTER Adapter, - OCTET_STRING authpdu -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - AUTH_ALGORITHM auth_alg = OPEN_SYSTEM; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - -//Check Bssid - if( PlatformCompareMemory( pMgntInfo->Bssid, Frame_Addr3( authpdu ), 6 ) != 0 ){ - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===>OnAuth_even(): State_AuthReqService %d \n", pMgntInfo->State_AuthReqService)); - - - switch( pMgntInfo->State_AuthReqService ) - { - case STATE_Wait_Auth_Seq_2: - { - if( Frame_AuthTransactionSeqNum(authpdu) != 2){ - return FALSE; - } - - //TODO: Need to check source address?? - - if( Frame_AuthStatusCode(authpdu) != StatusCode_success ){ - - // - // If Responding station does NOT support the specified WEP Auth, - // we shall NOT retry the same WEP Auth algorithm any more. - // By Netgear Lancelot's request, added by Roger, 2007.11.23. - // - if((Frame_AuthStatusCode(authpdu) == StatusCode_notsupport_authalg) && - (pMgntInfo->SecurityInfo.AuthMode != RT_802_11AuthModeAutoSwitch) && - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104)) - { - pMgntInfo->AuthRetryCount = RT_AUTH_RETRY_LIMIT; - } - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_refused); - return FALSE; - } - - MgntUpdateAsocInfo(Adapter, UpdateAuthSeq2, authpdu.Octet, authpdu.Length); - - //Check Auth algorithm - auth_alg = (AUTH_ALGORITHM)Frame_AuthAlgorithmNum(authpdu); - if( ((pMgntInfo->AuthReq_auAlg == OPEN_SYSTEM) - && (auth_alg == OPEN_SYSTEM ) )|| - ( (auth_alg == NETWORK_EAP) && Adapter->MgntInfo.bNETWORKEAP)) //For NETWORK EAP - { - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_success); - } - else if( (pMgntInfo->AuthReq_auAlg == SHARED_KEY) - && (auth_alg == SHARED_KEY) ) - { - OCTET_STRING AuthChallengetext; - - // Cancel AuthTimer - PlatformCancelTimer( Adapter, &pMgntInfo->AuthTimer ); - - AuthChallengetext = PacketGetElement( authpdu, EID_Ctext, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - //Send 3rd auth frame - SendAuthenticatePacket( Adapter, pMgntInfo->Bssid, SHARED_KEY, 3, StatusCode_success, AuthChallengetext ); - - PlatformSetTimer( Adapter, &pMgntInfo->AuthTimer, AUTH_REQ_TIMEOUT ); - - pMgntInfo->State_AuthReqService = STATE_Wait_Auth_Seq_4; - } - else if(AUTH_ALG_FT == auth_alg) - { - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - FtUpdateEntryInfo(Adapter, FT_WAIT_OS_DECISION, pMgntInfo->Bssid, NULL, 0); - // Indicate to WDI to request the association request information for FT - PlatformIndicateCustomStatus( - Adapter, - RT_CUSTOM_EVENT_WDI_FT_ASSOC_NEEDED, - RT_CUSTOM_INDI_TARGET_WDI, - &rtStatus, - (u4Byte)sizeof(RT_STATUS)); - //MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_success); - } - else{ - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - RT_TRACE(COMP_MLME, DBG_LOUD, ("Mismatch auth_alg: %#X\n", auth_alg)); - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_invalid); - } - - } - break; - - case STATE_Wait_Auth_Seq_4: - { - if( Frame_AuthTransactionSeqNum(authpdu) != 4 ){ - return FALSE; - } - - //ShuChen TODO: receive 4th auth frame - auth_alg = (AUTH_ALGORITHM)Frame_AuthAlgorithmNum(authpdu); - if( !((pMgntInfo->AuthReq_auAlg == SHARED_KEY) - && (auth_alg == SHARED_KEY)) ) - { - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - RT_TRACE(COMP_INIT, DBG_LOUD,("Mismatch auth_alg\n")); - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_invalid); - return FALSE; - } - - if( Frame_AuthStatusCode(authpdu) != StatusCode_success ){ - // StaState(Adapter, auSta, StationState_not_auth); - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_refused); - return FALSE; - } - - // StaState(Adapter, auSta , StationState_auth_sharedkey); - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_success); - } - break; - - default: - break; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<====OnAuth_even(): State_AuthReqService %d \n", pMgntInfo->State_AuthReqService)); - -//Check Status Code - return TRUE; -} - - - - - - - - -BOOLEAN -OnAuth_odd( - PADAPTER Adapter, - OCTET_STRING authpdu -) -{ - return TRUE; -} - - - - - - - - - -BOOLEAN -OnAssocRsp( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING asocpdu; - BOOLEAN FlagReAsoc = FALSE; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - asocpdu.Octet = pRfd->Buffer.VirtualAddress; - asocpdu.Length = pRfd->PacketLength; - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Addr = ", Frame_Addr2(asocpdu)); - - //2004/08/23, kcwu, for ndtest - pMgntInfo->RspCapability = Frame_AssocCap(asocpdu); - pMgntInfo->RspStatusCode = Frame_AssocStatusCode(asocpdu); - pMgntInfo->RspAssociationID = Frame_AssocAID(asocpdu); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - switch( pMgntInfo->State_AsocService ) - { - case STATE_Wait_Asoc_Response: - { - //Check source address - if( PlatformCompareMemory( Frame_Addr2(asocpdu), pMgntInfo->Bssid, 6) != 0 ) { - return FALSE; - } - - // Update association information, 2006.11.14, by shien chang. - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pMgntInfo->Bssid, 6); - MgntUpdateAsocInfo(Adapter, UpdateAsocResp, asocpdu.Octet, asocpdu.Length); - MgntUpdateAsocInfo(Adapter, UpdateFlagReAsocResp, (UCHAR*)&FlagReAsoc, sizeof(BOOLEAN)); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnAssocRsp(): STATE_Wait_Asoc_Response => RspStatusCode: %d, RspAssociationID: %d\n", pMgntInfo->RspStatusCode, pMgntInfo->RspAssociationID)); - MlmeAssociateConfirm( Adapter, pRfd, &asocpdu, FALSE, MlmeStatus_success ); - } - break; - - case STATE_Wait_Reasoc_Response: - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnAssocRsp(): STATE_Wait_Reasoc_Response => RspStatusCode: %d, RspAssociationID: %d\n", pMgntInfo->RspStatusCode, pMgntInfo->RspAssociationID)); - break; - - case STATE_Asoc_Idle: - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnAssocRsp(): STATE_Asoc_Idle => RspStatusCode: %d, RspAssociationID: %d\n", pMgntInfo->RspStatusCode, pMgntInfo->RspAssociationID)); - break; - - default: - break; - } - - return TRUE; -} - - - -BOOLEAN -OnReAssocRsp( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING Reasocpdu; - BOOLEAN FlagReAsoc = TRUE; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - Reasocpdu.Octet = pRfd->Buffer.VirtualAddress; - Reasocpdu.Length = pRfd->PacketLength; - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Addr = ", Frame_Addr2(Reasocpdu)); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - switch( pMgntInfo->State_AsocService ) - { - case STATE_Wait_Asoc_Response: - //20070202 David . 3 com AP always send Reassocation - //RT_TRACE(COMP_MLME, DBG_LOUD, ("OnReAssocRsp(): STATE_Wait_Asoc_Response => RspStatusCode: %d, RspAssociationID: %d\n", Frame_AssocStatusCode(Reasocpdu), Frame_AssocAID(Reasocpdu))); - //break; - - case STATE_Wait_Reasoc_Response: - { - //Check source address - if( PlatformCompareMemory( Frame_Addr2(Reasocpdu), pMgntInfo->Bssid, 6) != 0 ) { - return FALSE; - } - - // Update reassociation information, 2006.11.14, by shien chang. - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pMgntInfo->Bssid, 6); - MgntUpdateAsocInfo(Adapter, UpdateAsocResp, Reasocpdu.Octet, Reasocpdu.Length); - MgntUpdateAsocInfo(Adapter, UpdateFlagReAsocResp, (UCHAR*)&FlagReAsoc, sizeof(BOOLEAN)); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnReAssocRsp(): STATE_Wait_Reasoc_Response => RspStatusCode: %d, RspAssociationID: %d\n", Frame_AssocStatusCode(Reasocpdu), Frame_AssocAID(Reasocpdu))); - MlmeAssociateConfirm( Adapter, pRfd, &Reasocpdu, TRUE, MlmeStatus_success ); - } - break; - - case STATE_Asoc_Idle: - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnReAssocRsp(): STATE_Asoc_Idle\n")); - break; - - default: - break; - } - - return TRUE; -} - - - -BOOLEAN -OnDisassoc( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING disassocpdu; - pu1Byte disassocBssid; - pu1Byte disassocSta; - u2Byte disassocReason; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - pMgntInfo->LinkDetectInfo.OnDisassocCnt++; //cosa add for debug - - disassocpdu.Octet = pRfd->Buffer.VirtualAddress; - disassocpdu.Length = pRfd->PacketLength; - - disassocBssid = Frame_pBssid(disassocpdu); - disassocSta = Frame_Addr2(disassocpdu); - - if(pMgntInfo->bSetPnpPwrInProgress) - return TRUE; - - // - // Verify if this packet length is valid, by Bruce, 2008-07-01. - // - if(pRfd->PacketLength < (sMacHdrLng + DISASSOC_REASON_SIZE)) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("OnDisassoc(): packet too short(%d) < (needed = %d)!\n", pRfd->PacketLength, (sMacHdrLng + DISASSOC_REASON_SIZE))); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - disassocReason = Frame_DeassocReasonCode(disassocpdu); - - if(!ACTING_AS_AP(Adapter)) - { // STA mode. - if( PlatformCompareMemory( pMgntInfo->Bssid, disassocBssid, 6 ) == 0 ) - { - u1Byte tmp_ssid[256]; - u2Byte tmp_len = pMgntInfo->Ssid.Length; - - if(!pMgntInfo->bMediaConnect || pMgntInfo->bDisconnectRequest) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("bMediaConnect %d bDisconnectRequest %d \n", pMgntInfo->bMediaConnect, pMgntInfo->bDisconnectRequest)); - return FALSE; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDisassoc in STA mode (mAssoc%d, mIbss:%d)\n", pMgntInfo->mAssoc, pMgntInfo->mIbss)); - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnDisassoc from\n", disassocSta); - - if((disassocReasondest_not_QSTA) ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDisassoc in STA mode with WRONG disassoc reason %x\n", disassocReason)); - return TRUE; - } - - // We should leave LPS mode first. 2011.03.23. by tynli. - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - LeisurePSLeave(Adapter, LPS_DISABLE_ON_DISASSOC); - } - - // Remember the rejected AP, if another AP in the same ESS is better, - // pick the better one in further connection. 2006.11.21, by shien chang. - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - - MultiChannelDisconnectClient(Adapter, FALSE); - - P2P_ClientOnDisassoc(Adapter, pRfd, &disassocpdu); - - // - // We should complete all SendNBLs before NDIS_STATUS_DOT11_DISASSOCIATION status is indicated - // to prevent MiniportReturnNetBufferLists routine will be called in the same thread context and Rx deadlock in N6PciReturnNetBufferLists - // routine might cause bug check code DPC_WATCHDOG_VIOLATION (133). - // - // Workaround for Win8 and later OS. Added by tynli. 2013.09.03. - ReleaseDataFrameQueued(Adapter); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return FALSE; - } - - // 2006.11.15, by shien chang. - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDisassoc(): ReasonCode = %X\n", Frame_DeassocReasonCode(disassocpdu))); - DrvIFIndicateDisassociation(Adapter, Frame_DeassocReasonCode(disassocpdu), pMgntInfo->Bssid); - - //2004/08/23, kcwu, the ssid should be retained - PlatformMoveMemory(tmp_ssid, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - tmp_len = pMgntInfo->Ssid.Length; - - ResetMgntVariables( Adapter ); - - //Fix WPA WPA2 issue , New key will set after re-handshaking, by CCW 20070521 - { - BOOLEAN bAPSuportCCKM = FALSE; - BOOLEAN bCCX8021xenable = FALSE; - - CCX_QueryCCKMSupport(Adapter, &bCCX8021xenable, &bAPSuportCCKM); - - if( pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch || - (bAPSuportCCKM && bCCX8021xenable) ) // In CCKM mode will Clear key - { - SecClearAllKeys(Adapter); - RT_TRACE(COMP_SEC, DBG_LOUD,("OnDisassoc():======>CCKM clear key...")); - } - } - - PlatformMoveMemory(pMgntInfo->Ssid.Octet, tmp_ssid, tmp_len); - pMgntInfo->Ssid.Length = tmp_len; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - - // Start Roaming and do not indicate status to OS (XP), so we still keep connected until retry failed. By Bruce, 2008-08-16. - // CCW said: we must indicate DISCONNECT when received DEAUTH frme include 4-way timeout. 2008-11-24 - if( pMgntInfo->mDeauthCount > 2 || pMgntInfo->IndicateByDeauth) - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - pMgntInfo->mDeauthCount = 0; - } - else - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, FORCE_NO_INDICATE); - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return FALSE; - } - - if( OS_SUPPORT_WDI(Adapter) == FALSE) - { - // Roaming, 2006.12.07, by shien chang. - if(!MgntRoamingInProgress(pMgntInfo)) - { - // Run as roaming to connect to the original AP. By Bruce, 2008-06-09. - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_DEAUTH, ROAMINGSTATE_SCANNING); - DrvIFIndicateRoamingStart(Adapter); - - CCX_SetAssocReason(Adapter, CCX_AR_DEAUTH_DISASSOC); - - // Roaming retry - if(!MgntRoamRetry(Adapter, FALSE)) // Raom again. - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - return FALSE; - } - MgntRoamComplete(Adapter, MlmeStatus_refused); // Roam failed. - } - } - } - } - } - else - { // AP mode. - if( PlatformCompareMemory( pMgntInfo->Bssid, disassocBssid, 6 ) == 0 ) - { - pu1Byte disassocSta = Frame_pSaddr(disassocpdu); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, disassocSta); - - if(pEntry != NULL) - { - // Added by Annie, 2005-07-12. - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK - ||pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPA2PSK - ||pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPA) - Authenticator_StateINITIALIZE( Adapter, pEntry ); - - // - // We should complete all SendNBLs before NDIS_STATUS_DOT11_DISASSOCIATION status is indicated - // to prevent MiniportReturnNetBufferLists routine will be called in the same thread context and Rx deadlock in N6PciReturnNetBufferLists - // routine might cause bug check code DPC_WATCHDOG_VIOLATION (133). - // 2013.06.26. - // - AsocEntry_BecomeDisassoc(Adapter, pEntry); - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX) - { - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, disassocSta, 6); - DrvIFIndicateDisassociation(Adapter, Frame_DeassocReasonCode(disassocpdu), disassocSta); - } - else if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - pMgntInfo->pCurrentSta = pEntry; - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDisassoc(): on VWIFI_AP ReasonCode = %X\n", Frame_DeassocReasonCode(disassocpdu))); - - DrvIFIndicateIncommingAssociationComplete(Adapter, Frame_DeassocReasonCode(disassocpdu)); - DrvIFIndicateDisassociation(Adapter, Frame_DeassocReasonCode(disassocpdu), disassocSta); - } - //AsocEntry_BecomeDisassoc(Adapter, pEntry); - } - } - } - - RemovePeerTS(Adapter, Frame_pSaddr(disassocpdu)); - - return TRUE; -} - - - -BOOLEAN -OnDeauth( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING deauthpdu; - pu1Byte deauBssid; - u1Byte QueueID; - PRT_TCB pTcb = NULL; - - pu1Byte deauSta; - u1Byte tmp_ssid[256]; - u2Byte tmp_len = pMgntInfo->Ssid.Length; - PRT_WLAN_STA pEntry = NULL; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - pMgntInfo->LinkDetectInfo.OnDeauthCnt++; //cosa add for debug - - deauthpdu.Octet = pRfd->Buffer.VirtualAddress; - deauthpdu.Length = pRfd->PacketLength; - - deauBssid = Frame_pBssid(deauthpdu); - deauSta = Frame_Addr2(deauthpdu); - - if(!IsDefaultAdapter(Adapter)&& - !ACTING_AS_AP(Adapter) ) - { - // Is it possible failing into this condition???? Neo Test 123 - // need to set assert here ? - return TRUE; - } - - if(pMgntInfo->bSetPnpPwrInProgress) - return TRUE; - - // - // Verify if this packet length is valid, by Bruce, 2008-07-01. - // - if(pRfd->PacketLength < (sMacHdrLng + DEAUTH_REASON_SIZE)) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("OnDeauth(): packet too short(%d) < (needed = %d)!\n", pRfd->PacketLength, (sMacHdrLng + DEAUTH_REASON_SIZE))); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - //RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "deauth:\n", deauthpdu.Octet, deauthpdu.Length); - - if( !ACTING_AS_AP(Adapter)) - { // STA mode. - - if( !MacAddr_isBcst(deauBssid)&&((PlatformCompareMemory( pMgntInfo->Bssid, deauBssid, 6 ) == 0) - || MgntIsMacAddrGroup( pMgntInfo->Bssid ))) - { - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_IBSS: - if(pMgntInfo->bDisconnectRequest) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("bMediaConnect %d bDisconnectRequest %d \n", pMgntInfo->bMediaConnect, pMgntInfo->bDisconnectRequest)); - break; - } - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnDeauth in IBSS by deauSta: \n", deauSta); - - pEntry = AsocEntry_GetEntry(pMgntInfo, deauSta); - if(pEntry == NULL) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDeauth in IBSS receive duplicate deauth \n")); - break; - } - - // - // We have to indicate the address of leaving peer STA to upper layer. - // for example, authenticator/supplicant. - // - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, deauSta, 6); - DrvIFIndicateDisassociation(Adapter, Frame_DeauthReasonCode(deauthpdu), deauSta); - - // - // In Win7 NDISTest AdhocInterop, it verifies that we indicate dissassoc for - // each IBSS member that sends deauth to us. - // We indicate a dummy assoc event so that we could indicate a dissassoc - // again later. - // 2008.08.05, haich. - // - //if(Adapter->bInHctTest == TRUE) -#if 0 - { - static u1Byte DummySta[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; - - // - // Indicate dummy STA assocation event. - // - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, DummySta, 6); - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - } -#endif - RT_TRACE_F(COMP_AP, DBG_LOUD, ("AsocEntry_RemoveStation\n")); - - AsocEntry_RemoveStation(Adapter, deauSta); - - break; - - case RT_OP_MODE_INFRASTRUCTURE: - default: - if(!pMgntInfo->bMediaConnect || pMgntInfo->bDisconnectRequest) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("bMediaConnect %d bDisconnectRequest %d \n", pMgntInfo->bMediaConnect, pMgntInfo->bDisconnectRequest)); - break; - } - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnDeauth in infra-BSS by deauSta: \n", deauSta); - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDeauth() reason %d\n",Frame_DeauthReasonCode(deauthpdu))); - - // We should leave LPS mode first. 2011.03.23. by tynli. - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - LeisurePSLeave(Adapter, LPS_DISABLE_ON_DEAUTH); - } - - // Remember the rejected AP, if another AP in the same ESS is better, - // pick the better one in further connection. 2006.11.21, by shien chang. - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm > RT_ENC_ALG_NO_CIPHER ) - { - if( SecIsTxKeyInstalled( Adapter,pMgntInfo->Bssid) ) - { - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - } - } - else - { - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - } - - P2P_ClientOnDeauth(Adapter, pRfd, &deauthpdu); - - // - // We should complete all SendNBLs before NDIS_STATUS_DOT11_DISASSOCIATION status is indicated - // to prevent MiniportReturnNetBufferLists routine will be called in the same thread context and Rx deadlock in N6PciReturnNetBufferLists - // routine might cause bug check code DPC_WATCHDOG_VIOLATION (133). - // - // Workaround for Win8 and later OS. Added by tynli. 2013.09.03. - ReleaseDataFrameQueued(Adapter); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return FALSE; - } - - // 2006.11.15, by shien chang. - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - DrvIFIndicateDisassociation(Adapter, Frame_DeauthReasonCode(deauthpdu), pMgntInfo->Bssid); - - //2004/08/23, kcwu, the ssid should be retained - PlatformMoveMemory(tmp_ssid, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - tmp_len = pMgntInfo->Ssid.Length; - - if(GET_TDLS_ENABLED(pMgntInfo)) - TDLS_Stop(Adapter); - - // Start Roaming and do not indicate status to OS (XP), so we still keep connected until retry failed. By Bruce, 2008-08-16. - // CCW said: we must indicate DISCONNECT when received DEAUTH frme include 4-way timeout. 2008-11-24 - if( pMgntInfo->mDeauthCount > 2 || pMgntInfo->IndicateByDeauth) - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - pMgntInfo->mDeauthCount = 0; - } - else - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, FORCE_NO_INDICATE); - } - - ResetMgntVariables( Adapter ); - - //Fix WPA WPA2 issue , New key will set after re-handshaking, by CCW 20070521 - { - BOOLEAN bAPSuportCCKM = FALSE; - BOOLEAN bCCX8021xenable = FALSE; - - CCX_QueryCCKMSupport(Adapter, &bCCX8021xenable, &bAPSuportCCKM); - - if( pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch || - (bAPSuportCCKM && bCCX8021xenable) ) // In CCKM mode will Clear key - { - SecClearAllKeys(Adapter); - RT_TRACE(COMP_SEC, DBG_LOUD,("OnDeauth():======>CCKM clear key...")); - } - } - - PlatformMoveMemory(pMgntInfo->Ssid.Octet, tmp_ssid, tmp_len); - pMgntInfo->Ssid.Length = tmp_len; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - return FALSE; - } - - if( OS_SUPPORT_WDI(Adapter) == FALSE ) - { - // Roaming, 2006.12.07, by shien chang. - if(!MgntRoamingInProgress(pMgntInfo)) - { - // Run as roaming to connect to the original AP. By Bruce, 2008-06-09. - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_DEAUTH, ROAMINGSTATE_SCANNING); - DrvIFIndicateRoamingStart(Adapter); - - // Note : - // SSID List Maybe not clear in Before !! - // FilterHiddenAP can't judge Add or not !! - // Side-effic : We can connect Hidde AP after OnDeauth !! - if( pMgntInfo->FilterHiddenAP == FALSE ) - { - RT_TRACE( COMP_MLME , DBG_LOUD , ("===> Add SSID to SCAN List ") ); - MgntAddSsidsToScan( Adapter, pMgntInfo->Ssid ); - } - - CCX_SetAssocReason(Adapter, CCX_AR_DEAUTH_DISASSOC); - - // Roaming retry - if(!MgntRoamRetry(Adapter, FALSE)) // Raom again. - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress MgntRoamRetry FAIL\n")); - return FALSE; - } - MgntRoamComplete(Adapter, MlmeStatus_refused); // Roam failed. - } - } - } - - //do not send buffered packets while STA is deauthed by AP. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) - { - // 2004.08.11, revised by rcnjko. - while(!RTIsListEmpty(&Adapter->TcbWaitQueue[QueueID])) - { - pTcb=(PRT_TCB)RTRemoveHeadList(&Adapter->TcbWaitQueue[QueueID]); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - } - for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) - { - while(!RTIsListEmpty(&Adapter->TcbAggrQueue[QueueID])) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&Adapter->TcbAggrQueue[QueueID]); - Adapter->TcbCountInAggrQueue[QueueID]--; - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - break; - } - } - } - else - { // AP mode. - if( PlatformCompareMemory( pMgntInfo->Bssid, deauBssid, 6 ) == 0) - { - if( MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX) - { - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, deauSta, 6); - pEntry = AsocEntry_GetEntry(pMgntInfo, deauSta); - if( pEntry != NULL ) - DrvIFIndicateDisassociation(Adapter, Frame_DeauthReasonCode(deauthpdu), deauSta); - } - else if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - pMgntInfo->pCurrentSta = AsocEntry_GetEntry(pMgntInfo, deauSta); - if(pMgntInfo->pCurrentSta != NULL) - { - if(pMgntInfo->pCurrentSta->bDisassociated) - { - RT_TRACE_F(COMP_AP, DBG_LOUD, ("AP_DisassociateStation in progress\n")); - return TRUE; - } - - DrvIFIndicateIncommingAssociationComplete(Adapter, Frame_DeauthReasonCode(deauthpdu)); - if(pMgntInfo->pCurrentSta->bAssociated) - { - // - // We should complete all SendNBLs before NDIS_STATUS_DOT11_DISASSOCIATION status is indicated - // to prevent MiniportReturnNetBufferLists routine will be called in the same thread context and Rx deadlock in N6PciReturnNetBufferLists - // routine might cause bug check code DPC_WATCHDOG_VIOLATION (133). - // 2013.06.26. - // - AsocEntry_BecomeDisassoc(Adapter, pMgntInfo->pCurrentSta); - - // HalMacId Remove the specific MacId associated with this peer --------- - MacIdDeregisterSpecificMacId(Adapter, pMgntInfo->pCurrentSta->AssociatedMacId); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnDeauth(): ReasonCode = %X\n", Frame_DeauthReasonCode(deauthpdu))); - - DrvIFIndicateDisassociation(Adapter, Frame_DeauthReasonCode(deauthpdu), pMgntInfo->pCurrentSta->MacAddr); - } - } - } - RT_TRACE_F(COMP_AP, DBG_LOUD, ("AsocEntry_RemoveStation case 2\n")); - - AsocEntry_RemoveStation(Adapter, deauSta); - } - } - - return TRUE; -} - - -// -// Description: -// Handle the Probe Request received. -// 2004.10.07, by rcnjko. -// -BOOLEAN -OnProbeReq( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo; - OCTET_STRING mmpdu; - OCTET_STRING ssidToScan; - u1Byte SrcAddr[6]; - BOOLEAN bSentProbRsp = FALSE; - - RT_TRACE(COMP_RECV, DBG_TRACE, ("=======> OnProbeReq!\n")); - - pMgntInfo = &(Adapter->MgntInfo); - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - PlatformMoveMemory(SrcAddr, Frame_Addr2(mmpdu), 6); - - do - { - //3 //Note, the sequence of conditions are very important. - // Skip ProbeReq if SSID is neither any nor our SSID. - ssidToScan = PacketGetElement(mmpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - - // Check if this packet should be handled by P2P - if(RT_STATUS_SUCCESS != P2P_OnProbeReq(Adapter, pRfd, &mmpdu)) - { - // RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnProbeReq(): Skip by P2P_OnProbeReq(), Addr = ", SrcAddr); - break; - } - - // Skip ProbeReq if we are not in AP mode or we are not a coordinator of IBSS mode. - if( !(ACTING_AS_AP(Adapter)) && - !(pMgntInfo->mIbss && !pMgntInfo->mDisable && pMgntInfo->bIbssCoordinator) ) - { - break; - } - - // Skip ProbeReq if we are scanning. - if( pMgntInfo->bScanInProgress && (Adapter->MgntInfo.dot11CurrentChannelNumber != RT_GetChannelNumber(Adapter))) - { - // RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnProbeReq(): Skip by ScanInProgress, Addr = ", SrcAddr); - // RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Adapter->MgntInfo.dot11CurrentChannelNumber (%d) != RT_GetChannelNumber(Adapter) (%d)\n", - // Adapter->MgntInfo.dot11CurrentChannelNumber, RT_GetChannelNumber(Adapter))); - break; - } - - // Skip ProbeReq if we are stop beacon to aviod client fast roaming and get error probe response. - // 1. PNP sleep 2. During SendDisassocWithOldChnl in AP mode. - if(pMgntInfo->BeaconState == BEACON_STOP) - { - // RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnProbeReq(): Skip by pMgntInfo->BeaconState == BEACON_STOP, Addr = ", SrcAddr); - break; - } - - if(P2P_IsGoAcceptProbeReq(Adapter, &mmpdu, &ssidToScan)) - { - bSentProbRsp = TRUE; - break; - } - else - { - // RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "OnProbeReq(): Skip by P2P_IsGoAcceptProbeReq == BEACON_STOP, Addr = ", SrcAddr); - } - - // Skip ProbeReq if SSID is neither any nor our SSID. - if( ssidToScan.Length > 0 && EqualOS(ssidToScan, pMgntInfo->Ssid) == FALSE) - break; - }while(FALSE); - - if(bSentProbRsp) - { - // Send ProbeRsp to respond the ProbeReq received. - SendProbeRsp(Adapter, SrcAddr, IsSSIDAny(ssidToScan), pRfd, &mmpdu); - } - - return TRUE; -} - - -VOID -MlmeDeauthenticateRequest( - PADAPTER Adapter, - pu1Byte auSta, - u1Byte asRsn - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - FunctionIn(COMP_MLME); - - // 2010.11.09 Sync with Association operation. Emily - RemovePeerTS(Adapter, auSta); - - SendDeauthentication( Adapter, auSta, asRsn ); - - if((PlatformCompareMemory( pMgntInfo->Bssid, auSta, 6 ) == 0) ||MgntIsMacAddrGroup( pMgntInfo->Bssid )) - { - u1Byte i; - - DrvIFIndicateDisassociation(Adapter, unspec_reason, pMgntInfo->Bssid); - - pMgntInfo->mAssoc = FALSE; - pMgntInfo->AsocTimestamp = 0; - for(i=0;i<6;i++) pMgntInfo->Bssid[i] = 0x22; //0x11; // Modified to 0x22 by Annie, I don't want it set addr[0] BIT0. 2006-05-04. - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - } - -} - - - -VOID -MlmeDisassociateRequest( - PADAPTER Adapter, - pu1Byte asSta, - u1Byte asRsn - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - FunctionIn(COMP_MLME); - - RemovePeerTS(Adapter, asSta); - - if(!ACTING_AS_AP(Adapter)) - { - if(pMgntInfo->RoamingState == ROAMINGSTATE_IDLE) - SendDisassociation( Adapter, asSta, asRsn ); - } - else - { - AP_DisassociateAllStation(Adapter, unspec_reason); - } - - if(PlatformCompareMemory( pMgntInfo->Bssid, asSta, 6 ) == 0) - { - u1Byte i; - - if(pMgntInfo->bMediaConnect) - DrvIFIndicateDisassociation(Adapter, asRsn, pMgntInfo->Bssid); - - if(!MgntRoamingInProgress(pMgntInfo)) - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - - pMgntInfo->mAssoc = FALSE; - pMgntInfo->AsocTimestamp = 0; - for(i=0;i<6;i++) pMgntInfo->Bssid[i] = 0x22; - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - - if(pMgntInfo->RoamingState == ROAMINGSTATE_IDLE) - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - } -} - - - -VOID -OnCls2err( - PADAPTER Adapter, - pu1Byte auSta) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_TRACE( COMP_RECV, DBG_LOUD, (" ==> OnCls2err()\n") ); - - if( ACTING_AS_AP(Adapter) ) - { // AP mode. - PRT_WLAN_STA pEntry; - BOOLEAN BAssoiciated; - - // 1. Send deauthentiation frame to the STA. - SendDeauthentication( Adapter, auSta, class2_err ); - - // 2. Get STA entry. - pEntry = AsocEntry_GetEntry(pMgntInfo, auSta); - if( pEntry == NULL ) - { - RT_TRACE( COMP_RECV, DBG_LOUD, ("OnCls2err(): Cannot find the STA in the table!!! drop it.\n") ); - return; - } - - BAssoiciated = pEntry->bAssociated; - - // 3. Mark the STA as disassoicated and related. - AsocEntry_BecomeDisassoc(Adapter, pEntry); - if(BAssoiciated) - MacIdDeregisterSpecificMacId(Adapter, pEntry->AssociatedMacId); - - // 4. To initialize WPA-PSK key mgnt state machine. Added by Annie, 2005-07-15. - if( Adapter->MgntInfo.SecurityInfo.AuthMode == RT_802_11AuthModeWPA ) - { - Authenticator_StateDISCONNECTED(Adapter, pEntry); - } - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - pMgntInfo->pCurrentSta = pEntry; - DrvIFIndicateIncommingAssociationComplete(Adapter, unspec_reason); - } - - // 5. Remove whole entry. - RT_TRACE_F(COMP_AP, DBG_LOUD, ("AsocEntry_RemoveStation case 3\n")); - - AsocEntry_RemoveStation( Adapter, auSta ); - } - else - { // TODO: STA mode. - //MlmeDeauthenticateRequest(Adapter, auSta, class2_err); - } - - RT_TRACE( COMP_RECV, DBG_LOUD, (" <== OnCls2err()\n") ); -} - - - -VOID -OnCls3err( - PADAPTER Adapter, - pu1Byte asSta) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_TRACE( COMP_RECV, DBG_LOUD, (" ==> OnCls3err()\n") ); - - if( ACTING_AS_AP(Adapter)) - { // AP mode. - PRT_WLAN_STA pEntry; - - // 1. Send disassoc frame to the STA. - SendDisassociation(Adapter, asSta, class3_err ); - - // 2. Get STA entry. - pEntry = AsocEntry_GetEntry(pMgntInfo, asSta); - if( pEntry == NULL ) - { - RT_TRACE( COMP_RECV, DBG_LOUD, ("OnCls3err(): Cannot find the STA in the table!!! drop it.\n") ); - return; - } - - // 3. Update its timestamp. - AsocEntry_UpdateTimeStamp(pEntry); - - // 4. Mark the STA as disassoicated and related. - AsocEntry_BecomeDisassoc(Adapter, pEntry); - - // 5. To initialize WPA-PSK key mgnt state machine. Added by Annie, 2005-07-15. - if( Adapter->MgntInfo.SecurityInfo.AuthMode == RT_802_11AuthModeWPA ) - { - Authenticator_StateDISCONNECTED(Adapter, pEntry); - } - } - else - { // TODO: STA mode. - //MlmeDisassociateRequest(Adapter, asSta, class3_err); - } - - RT_TRACE( COMP_RECV, DBG_LOUD, (" <== OnCls3err()\n") ); -} - -// -// Description: -// Handle action packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This parses the patterns of action frames and determine which type it is. -// By the packet type, it calls the corresponding function. -// By Bruce, 2012-03-12. -// -RT_STATUS -OnAction( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - ACT_PKT_TYPE pktType = ACT_PKT_TYPE_UNKNOWN; - u1Byte idx = 0; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - // - // Note: - // Most types of action frame are issued for the specified BSS (depend on BSSID), but some like - // measurement pilot of Public Action frame similar to a subset of a beacon is allowed to receive - // for any station when performing a scan process. - // If anyone implements such action frames, we shall not check the BSSID here. By Bruce, 2009-07-17. - // - - // [Accept Action Frame as AP mode] If the Address is correct and having Entry associated, we will process Action - // Frame received, 2009.08.20, by Bohn. - - // Note: - // We shall determine each packet in each packet process function. - - pktType = PacketGetActionFrameType(posMpdu); - if(ACT_PKT_TYPE_UNKNOWN == pktType) - { - // Move here by ylb 20130516 to print HT NDPA - - return RT_STATUS_NOT_RECOGNIZED; - } - - // Retrieve each packet type and find the matching handler - for(idx = 0; ACT_PKT_TYPE_UNKNOWN != ActionFrameCmd[idx].PktType; idx ++) - { - if(ActionFrameCmd[idx].PktType == pktType) - { - rtStatus = ActionFrameCmd[idx].CmdHandler(pAdapter, pRfd, posMpdu); - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, - ("[WARNING] Execute %s with status = %d\n", ActionFrameCmd[idx].Name, rtStatus)); - } - break; - } - } - - return rtStatus; -} - -VOID -Mgnt_Indicate( - PADAPTER Adapter, - PRT_RFD pRfd, - u1Byte error_code - ) -{ - OCTET_STRING mmpdu; - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - - if( error_code == class2 ) - { - pu1Byte auSta = mmpdu.Octet+10; - OnCls2err( Adapter, auSta ); - return; - } - else if( error_code == class3 ) - { - pu1Byte asSta = mmpdu.Octet+10; - OnCls3err( Adapter, asSta ); - return; - } - - switch( PacketGetType(mmpdu) ){ - - case Type_Asoc_Rsp: - if(PacketCheckIEValidity(mmpdu,pRfd)) - { - OnAssocRsp( Adapter, pRfd ); - } - break; - case Type_Reasoc_Rsp: - if(PacketCheckIEValidity(mmpdu,pRfd)) - { - OnReAssocRsp( Adapter, pRfd ); - } - break; - - case Type_Probe_Rsp: - if(PacketCheckIEValidity(mmpdu,pRfd)) - { - OnProbeRsp( Adapter, pRfd ); - } - break; - case Type_Beacon: - if(PacketCheckIEValidity(mmpdu,pRfd)) - { - OnBeacon( Adapter, pRfd ); - } - break; - - case Type_Auth: - if( (Frame_AuthTransactionSeqNum( mmpdu )%2) == 0 ) - { - RT_TRACE(COMP_MLME, DBG_TRACE,("auth_even\n")); - OnAuth_even( Adapter, mmpdu ); - } - else - { - RT_TRACE(COMP_MLME, DBG_TRACE,("auth_odd\n")); - if(ACTING_AS_AP(Adapter)) - { - AP_OnAuthOdd(Adapter, mmpdu); - } - else - { - OnAuth_odd( Adapter, mmpdu ); - } - } - RT_TRACE(COMP_MLME, DBG_TRACE,("auth\n")); - break; - case Type_Disasoc: - OnDisassoc( Adapter, pRfd ); - RT_TRACE(COMP_MLME, DBG_TRACE,("disassoc\n")); - break; - case Type_Deauth: - OnDeauth( Adapter, pRfd ); - RT_TRACE(COMP_MLME, DBG_TRACE,("deauth\n")); - break; - - case Type_Probe_Req: - OnProbeReq( Adapter, pRfd ); - break; - - case Type_Asoc_Req: - case Type_Reasoc_Req: - if(ACTING_AS_AP(Adapter)) - { - AP_OnAsocReq(Adapter, pRfd, mmpdu); - } - break; - - case Type_Action: - case Type_Action_No_Ack: - OnAction(Adapter, pRfd, &mmpdu); - break; - - default: - break; - } -} - -RT_STATUS -EncapDataFrame_ParsePkt( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - OCTET_STRING osMpdu, osContent; - ENCAP_DATA_PKT_TYPE encDataType = ENCAP_DATA_PKT_UNKNOWN; - u1Byte contentOffset = sMacHdrLng; - u4Byte idx = 0; - - osMpdu.Octet = pRfd->Buffer.VirtualAddress; - osMpdu.Length = pRfd->PacketLength; - - if(!IsDataFrame(osMpdu.Octet)) - { // It's not a data frame - return RT_STATUS_SUCCESS; - } - - if(IsQoSDataFrame(osMpdu.Octet)) - { - contentOffset += sQoSCtlLng; // +2 - } - - if(Frame_WEP(osMpdu)) - { - if(Frame_FromDS(osMpdu)) - { - contentOffset += pAdapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead; // 4 or 8 - } - else - { - contentOffset += 8; - } - } - - if(pRfd->PacketLength <= contentOffset) - { // No content - return RT_STATUS_SUCCESS; - } - - FillOctetString(osContent, osMpdu.Octet + contentOffset, (osMpdu.Length - contentOffset)); - - if(ENCAP_DATA_PKT_UNKNOWN == (encDataType = PacketGetEncapDataFrameType(&osContent))) - { // Cnnot recognize this frame - return RT_STATUS_NOT_RECOGNIZED; - } - - rtStatus = RT_STATUS_NOT_RECOGNIZED; - // Retrieve each packet type and find the matching handler - for(idx = 0; ENCAP_DATA_PKT_UNKNOWN != EncapDataFrameCmd[idx].PktType; idx ++) - { - if(EncapDataFrameCmd[idx].PktType == encDataType) - { - rtStatus = EncapDataFrameCmd[idx].CmdHandler(pAdapter, pRfd, &osMpdu, contentOffset); - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, - ("[WARNING] Execute %s with status = %d\n", EncapDataFrameCmd[idx].Name, rtStatus)); - } - break; - } - } - return rtStatus; -} - - - -VOID -CopyWlanBss( - IN PRT_WLAN_BSS dest, - IN PRT_WLAN_BSS src - ) -{ - PlatformMoveMemory(dest, src, sizeof(RT_WLAN_BSS)); - FillOctetString((dest)->IE, (dest)->IEBuf, (src)->IE.Length); - -#if (WPS_SUPPORT == 1) - FillOctetString((dest)->bdSimpleConfIE, (dest)->bdSimpleConfIEBuf, (src)->bdSimpleConfIE.Length); - FillOctetString((dest)->osBeaconWcnIe, (dest)->BeaconWcnIeBuf, (src)->osBeaconWcnIe.Length); - FillOctetString((dest)->osProbeRspWcnIe, (dest)->ProbeRspWcnIeBuf, (src)->osProbeRspWcnIe.Length); -#endif - FillOctetString((dest)->bdCountryIE, (dest)->bdCountryIEBuf, (src)->bdCountryIE.Length); - FillOctetString((dest)->BssQos.bdWMMIE, (dest)->BssQos.bdWMMIEBuf, (src)->BssQos.bdWMMIE.Length); - FillOctetString((dest)->WpaIe, (dest)->WpaIeBuf, (src)->WpaIe.Length); - FillOctetString((dest)->RsnIe, (dest)->RsnIeBuf, (src)->RsnIe.Length); - FillOctetString((dest)->osWmmAcParaIE, (dest)->WmmAcParaBuf, (src)->osWmmAcParaIE.Length); - FillOctetString((dest)->osPowerConstraintIe, (dest)->PowerConstraintBuf, (src)->osPowerConstraintIe.Length); -} - - diff --git a/network/wlan/WDI/COMMON/MgntEngine.h b/network/wlan/WDI/COMMON/MgntEngine.h deleted file mode 100644 index 6adfc283..00000000 --- a/network/wlan/WDI/COMMON/MgntEngine.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef __INC_MGNTENGINE_H -#define __INC_MGNTENGINE_H - -#define CopyMem(dest,src,len) \ - { \ - if( src != 0 ){ \ - PlatformMoveMemory( (PVOID)(dest), (PVOID)(src), len ); \ - } \ - } - -#define CopyMemOS(dest,src,len) \ - { \ - if( (src).Octet != 0 ){ \ - PlatformMoveMemory( (PVOID)((dest)->Octet), (PVOID)((src).Octet), len ); \ - (dest)->Length = len; \ - } \ - } - -enum StateErr // requests disassoc or deauth (MmIndicate signal) -{ - noerr = 1, - class2 = 2, - class3 = 3, -}; - - - - - -enum Synchronization_Sta_State{ - STATE_Min = 0, - STATE_No_Bss = 1, - STATE_Bss = 2, - STATE_Ibss_Active = 3, - STATE_Ibss_Idle = 4, - STATE_Act_Receive = 5, - STATE_Pas_Listen = 6, - STATE_Act_Listen = 7, - STATE_Join_Wait_Beacon = 8, - STATE_Max = 9, -}; - - - - -VOID -MlmeDeauthenticateRequest( - PADAPTER Adapter, - pu1Byte auSta, - u1Byte asRsn - ); - - -VOID -MlmeDisassociateRequest( - PADAPTER Adapter, - pu1Byte asSta, - u1Byte asRsn - ); - - -// ---------------------------------- -VOID -Mgnt_Indicate( - PADAPTER Adapter, - PRT_RFD pRfd, - u1Byte error_code - ); - -RT_STATUS -EncapDataFrame_ParsePkt( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ); - -VOID -CopyWlanBss( - IN PRT_WLAN_BSS dest, - IN PRT_WLAN_BSS src - ); - -#endif // #ifndef __INC_MGNTENGINE_H diff --git a/network/wlan/WDI/COMMON/MgntGen.c b/network/wlan/WDI/COMMON/MgntGen.c deleted file mode 100644 index ebcb3dae..00000000 --- a/network/wlan/WDI/COMMON/MgntGen.c +++ /dev/null @@ -1,4038 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntGen.tmh" -#endif - -#define BEACON_FRAME_LEN 512 - -static VOID -TbttPollingWorkItemCallback( - IN PVOID pContext - ); - - -BOOLEAN -IsMgntNDPA( - pu1Byte pdu -) -{ - BOOLEAN ret = FALSE; - if(IsMgntActionNoAck(pdu) && GET_80211_HDR_ORDER(pdu)) - { - if(GET_HT_CTRL_NDP_ANNOUNCEMENT(pdu+sMacHdrLng) == 1) - ret = TRUE; - } - return ret; -} - - -BOOLEAN -MgntIsRateSupport( - u1Byte nRate, - OCTET_STRING osRateSet - ) -{ - u1Byte i; - for(i = 0; i < osRateSet.Length; i++) - { - if((nRate & 0x7f) == (osRateSet.Octet[i] & 0x7f)) - return TRUE; - } - return FALSE; -} - - -// -// Description: -// Initialize RegSuppRateSets. -// -VOID -MgntInitRateSet( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - POCTET_STRING RegSuppRateSets = &(pMgntInfo->RegSuppRateSets[0]); - pu1Byte RegHTSuppRateSets = &(pMgntInfo->RegHTSuppRateSet[0]); - pu1Byte RegVHTSuppRateSets = &(pMgntInfo->RegVHTSuppRateSet[0]); - u1Byte i; - - FillOctetString( pMgntInfo->mBrates, pMgntInfo->mBratesBuf, 0 ); - FillOctetString( pMgntInfo->SupportRatesfromBCN, pMgntInfo->SupportRatesfromBCNBuf, 0 ); - FillOctetString( pMgntInfo->dot11OperationalRateSet, pMgntInfo->dot11OperationalRateBuf, 0 ); - FillOctetString( pMgntInfo->SupportedRates, pMgntInfo->SupportedRatesBuf, 0 ); - FillOctetString( pMgntInfo->Regdot11OperationalRateSet, pMgntInfo->Regdot11OperationalRateBuf, 0 ); - - for(i = 0; i < MAX_WIRELESS_MODE_CNT; i++) - { - FillOctetString( RegSuppRateSets[i], pMgntInfo->RegSuppRateSetsBuf[i], 0 ); - } - - // "|0x80" to tag it as basic rate. - - // WIRELESS_MODE_A: - // WIRELESS_MODE_N_5G: - // WIRELESS_MODE_AC_5G: - RegSuppRateSets[0].Octet[0] = MGN_6M | 0x80; - RegSuppRateSets[0].Octet[1] = MGN_9M; - RegSuppRateSets[0].Octet[2] = MGN_12M | 0x80; - RegSuppRateSets[0].Octet[3] = MGN_18M; - RegSuppRateSets[0].Octet[4] = MGN_24M | 0x80; - RegSuppRateSets[0].Octet[5] = MGN_36M; - RegSuppRateSets[0].Octet[6] = MGN_48M; - RegSuppRateSets[0].Octet[7] = MGN_54M; - RegSuppRateSets[0].Length = 8; - - // WIRELESS_MODE_B: - RegSuppRateSets[1].Octet[0] = MGN_1M | 0x80; - RegSuppRateSets[1].Octet[1] = MGN_2M | 0x80; - RegSuppRateSets[1].Octet[2] = MGN_5_5M | 0x80; - RegSuppRateSets[1].Octet[3] = MGN_11M | 0x80; - RegSuppRateSets[1].Length = 4; - - // WIRELESS_MODE_G: - // WIRELESS_MODE_N_24G: - // WIRELESS_MODE_AC_24G: - RegSuppRateSets[2].Octet[0] = MGN_1M | 0x80; - RegSuppRateSets[2].Octet[1] = MGN_2M | 0x80; - RegSuppRateSets[2].Octet[2] = MGN_5_5M | 0x80; - RegSuppRateSets[2].Octet[3] = MGN_11M | 0x80; - RegSuppRateSets[2].Octet[4] = MGN_6M; - RegSuppRateSets[2].Octet[5] = MGN_9M; - RegSuppRateSets[2].Octet[6] = MGN_12M; - RegSuppRateSets[2].Octet[7] = MGN_18M; - RegSuppRateSets[2].Octet[8] = MGN_24M; - RegSuppRateSets[2].Octet[9] = MGN_36M; - RegSuppRateSets[2].Octet[10] = MGN_48M; - RegSuppRateSets[2].Octet[11] = MGN_54M; - RegSuppRateSets[2].Length = 12; - - - // TODO: may be different if we have differnt number of antenna - RegHTSuppRateSets[0] = 0xFF; //support MCS 0~7 - RegHTSuppRateSets[1] = 0xFF; //support MCS 8~15 - RegHTSuppRateSets[2] = 0xFF; //support MCS 16~23 - - RegVHTSuppRateSets[0] = 0xff; //Support 1SS~3SS MCS 0~9 - RegVHTSuppRateSets[1] = 0xff; //Not support 4SS MCS 0~9 -} - - -// -// Description: -// Update SupportedRates to that of current wirles mode. -// -VOID -MgntRefreshSuppRateSet( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - switch(pMgntInfo->dot11CurrentWirelessMode) - { - case WIRELESS_MODE_A: - case WIRELESS_MODE_N_5G: - case WIRELESS_MODE_AC_5G: - case WIRELESS_MODE_AC_ONLY: - pMgntInfo->Regdot11OperationalRateSet = pMgntInfo->RegSuppRateSets[0]; - break; - - case WIRELESS_MODE_B: - pMgntInfo->Regdot11OperationalRateSet = pMgntInfo->RegSuppRateSets[1]; - break; - - case WIRELESS_MODE_G: - case WIRELESS_MODE_N_24G: - case WIRELESS_MODE_AC_24G: - pMgntInfo->Regdot11OperationalRateSet = pMgntInfo->RegSuppRateSets[2]; - break; - - default: - pMgntInfo->Regdot11OperationalRateSet.Length = 0; // No legacy rate support!! - break; - } - - if(IS_WIRELESS_MODE_N(Adapter)) - { - BOOLEAN b1SSSupport = FALSE; - u1Byte Rf_Type = RT_GetRFType(Adapter); - - PlatformMoveMemory( pMgntInfo->Regdot11HTOperationalRateSet, - pMgntInfo->RegHTSuppRateSet, - 16 ); - if(Rf_Type == RF_1T1R || Rf_Type == RF_1T2R) - b1SSSupport = TRUE; - else if(pHTInfo->nTxSPStream == 1 || pHTInfo->nRxSPStream == 1) - b1SSSupport = TRUE; - else if(Rf_Type == RF_2T2R || Rf_Type == RF_2T3R || Rf_Type == RF_2T4R) - pMgntInfo->Regdot11HTOperationalRateSet[2] = 0x00; - - if(b1SSSupport) - pMgntInfo->Regdot11HTOperationalRateSet[1] = pMgntInfo->Regdot11HTOperationalRateSet[2] = 0x00; - } - else - PlatformZeroMemory(pMgntInfo->Regdot11HTOperationalRateSet, 16); - - if(IS_WIRELESS_MODE_AC(Adapter)) - { - u1Byte Rf_Type = RT_GetRFType(Adapter); - - PlatformMoveMemory( pMgntInfo->Regdot11VHTOperationalRateSet, - pMgntInfo->RegVHTSuppRateSet, - 2 ); - if(Rf_Type == RF_1T1R || Rf_Type == RF_1T2R) - pMgntInfo->Regdot11VHTOperationalRateSet[0] = 0xfe; // Support 1SS MCS 0~9 - else if(pVHTInfo->nTxSPStream == 1 || pVHTInfo->nRxSPStream == 1) - pMgntInfo->Regdot11VHTOperationalRateSet[0] = 0xfe; // Support 1SS MCS 0~9 - else if(Rf_Type == RF_2T2R || Rf_Type == RF_2T3R || Rf_Type == RF_2T4R) - pMgntInfo->Regdot11VHTOperationalRateSet[0] = 0xfa; //Support 1SS ~ 2SS MCS 0~9 - else if(Rf_Type == RF_3T3R) - pMgntInfo->Regdot11VHTOperationalRateSet[0] = 0xea; //Support 1SS ~ 3SS MCS 0~9 - - if(pVHTInfo->bUpdateMcsCap) - VHTMaskSuppDataRate(pMgntInfo->Regdot11VHTOperationalRateSet, pVHTInfo->nRxSPStream, pVHTInfo->McsCapability); - - pMgntInfo->RegVHTHighestOperaRate = VHTGetHighestMCSRate( Adapter, - pMgntInfo->Regdot11VHTOperationalRateSet); - } - else - PlatformZeroMemory(pMgntInfo->Regdot11VHTOperationalRateSet, 2); - - // Fill up SupportedRates as Regdot11OperationalRateSet. - CopyMemOS( &pMgntInfo->SupportedRates, pMgntInfo->Regdot11OperationalRateSet, pMgntInfo->Regdot11OperationalRateSet.Length); -} - -// Allocate a fixed size buffer for general purpose using. -BOOLEAN -MgntAllocGenTempBuffer( - IN PADAPTER pAdapter - ) -{ - RT_STATUS Status; - PRT_GEN_TEMP_BUFFER pGenTmpBuf; - u4Byte i; - - pAdapter->GenTempBufferArray.Length = GEN_TEMP_BUFFER_NUM * sizeof(RT_GEN_TEMP_BUFFER); - Status = PlatformAllocateMemory(pAdapter, &pAdapter->GenTempBufferArray.Ptr, pAdapter->GenTempBufferArray.Length); - if(Status != RT_STATUS_SUCCESS) - return FALSE; - - PlatformZeroMemory(pAdapter->GenTempBufferArray.Ptr, pAdapter->GenTempBufferArray.Length); - RTInitializeListHead(&pAdapter->GenTempBufferQueue); - - pGenTmpBuf = (PRT_GEN_TEMP_BUFFER)pAdapter->GenTempBufferArray.Ptr; - for(i=0;iGenTempBufferQueue, &pGenTmpBuf[i].List, &pAdapter->NumGenTempBufferIdle); - } - - if (Status != RT_STATUS_SUCCESS) - return FALSE; - - return TRUE; -} - -BOOLEAN -MgntFreeGenTempBuffer( - IN PADAPTER pAdapter - ) -{ - u4Byte nFreed=0; - PRT_GEN_TEMP_BUFFER pGenTmpBuf; - BOOLEAN bReturn=TRUE; - - // - // 2012/02/09 MH According to win7 driver verifier test, the setting for below items - // A). Force pending I/O requests B). Low resource simulation C). IRP logging - // We may init fail in allocating MGNT memory. At this time, we can not use Adpter - // temp buffer quere to do any operation. - // - if(pAdapter->GenTempBufferArray.Ptr != NULL) - { - if(!RTIsListEmpty(&pAdapter->GenTempBufferQueue)) - { - while(!RTIsListEmpty(&pAdapter->GenTempBufferQueue)) - { - pGenTmpBuf = (PRT_GEN_TEMP_BUFFER)RTRemoveHeadListWithCnt(&pAdapter->GenTempBufferQueue, &pAdapter->NumGenTempBufferIdle); - - PlatformFreeMemory(pGenTmpBuf->Buffer.Ptr, GEN_TEMP_BUFFER_SIZE); - nFreed++; - } - RT_ASSERT((nFreed==GEN_TEMP_BUFFER_NUM),("Freed General buffer(%d) less than allocated(%d)!!\n", nFreed, GEN_TEMP_BUFFER_NUM)); - bReturn = FALSE; - } - - - { - PlatformFreeMemory(pAdapter->GenTempBufferArray.Ptr, pAdapter->GenTempBufferArray.Length); - } - } - - return bReturn; -} - -PRT_GEN_TEMP_BUFFER -GetGenTempBuffer( - IN PADAPTER Adapter, - IN u4Byte Length - ) -{ - PRT_GEN_TEMP_BUFFER pBuffer=NULL; - RT_STATUS Status; - - PlatformAcquireSpinLock(Adapter, RT_GEN_TEMP_BUF_SPINLOCK); - if(RTIsListEmpty(&Adapter->GenTempBufferQueue) || (Length > GEN_TEMP_BUFFER_SIZE)) - { - PlatformReleaseSpinLock(Adapter, RT_GEN_TEMP_BUF_SPINLOCK); - /* No free General Buffer, try to allocate one dynamically now */ - Status = PlatformAllocateMemory(Adapter, (PVOID*)&pBuffer, sizeof(RT_GEN_TEMP_BUFFER)+Length); - if(Status != RT_STATUS_SUCCESS) - { - RT_ASSERT(FALSE,("Get a General Buffer and Dynamical Allocate Failed!!\n")); - return NULL; - } - else - { - pBuffer->isDynaAlloc = TRUE; - pBuffer->Buffer.Ptr = (u1Byte *)pBuffer + sizeof(RT_GEN_TEMP_BUFFER); - pBuffer->Buffer.Length = Length; - PlatformZeroMemory((u1Byte *)pBuffer->Buffer.Ptr, Length); - } - } - else - { - pBuffer=(PRT_GEN_TEMP_BUFFER)RTRemoveHeadListWithCnt(&Adapter->GenTempBufferQueue, &Adapter->NumGenTempBufferIdle); - PlatformZeroMemory((u1Byte *)pBuffer->Buffer.Ptr, Length); - pBuffer->isDynaAlloc = FALSE; - PlatformReleaseSpinLock(Adapter, RT_GEN_TEMP_BUF_SPINLOCK); - } - - return pBuffer; -} - -VOID -ReturnGenTempBuffer( - IN PADAPTER Adapter, - IN PRT_GEN_TEMP_BUFFER pGenBuffer - ) -{ - if (pGenBuffer->isDynaAlloc) - { - PlatformFreeMemory((u1Byte *)pGenBuffer, sizeof(RT_GEN_TEMP_BUFFER)+pGenBuffer->Buffer.Length); - } - else - { - PlatformAcquireSpinLock(Adapter, RT_GEN_TEMP_BUF_SPINLOCK); - RTInsertTailListWithCnt(&Adapter->GenTempBufferQueue, &pGenBuffer->List, &Adapter->NumGenTempBufferIdle); - PlatformReleaseSpinLock(Adapter, RT_GEN_TEMP_BUF_SPINLOCK); - } -} - - -// -// Description: -// Allocate memory of COMMON\. -// -// Usage: -// Memory Allocation: -// step 1. Add DECLARE_RT_OBJECT(OBJECT_TYPE) into the the type -// (OBJECT_TYPE) to allocated. -// step 2. Use MGNT_ALLOC_RT_OBJECT(__ppObject, OBJECT_TYPE) to allocate memory -// for the type (OBJECT_TYPE) to specified address (__ppObject). -// -// Memory Release: -// The object allocated in MgntAllocateMemory() will be release at -// MgntFreeMemory() automatically. -// -// TODO: -// Allocate MGNT_INFO. -// -#define MGNT_ALLOC_RT_OBJECT(__pAdapter, __ObjectList, __ppObject, __OBJECT_TYPE) \ - ppObject = (__ppObject); \ - ALLOC_RT_OBJECT(__pAdapter, __ObjectList, __ppObject, __OBJECT_TYPE); \ - if(*ppObject == NULL) goto Error; - -RT_STATUS -MgntAllocMemory( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_LIST_ENTRY pObjectList = &(pMgntInfo->ObjectList); - RT_STATUS status = RT_STATUS_FAILURE; - PVOID* ppObject; - - INIT_RT_OBJECT_LIST(pObjectList); - do - { - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, (void**)&(pMgntInfo->pStaQos), STA_QOS); - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, (void**)&(pMgntInfo->SecurityInfo.pCkipPara),CKIP_PARAMETER); -#if (WPS_SUPPORT == 1) - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, &(pMgntInfo->pSimpleConfig), SIMPLE_CONFIG_T); -#endif - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, &(pMgntInfo->pDot11dInfo), RT_DOT11D_INFO); - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, (void **)&(pMgntInfo->pHTInfo), RT_HIGH_THROUGHPUT); - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, (void **)&(pMgntInfo->pVHTInfo), RT_VERY_HIGH_THROUGHPUT); - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, (void **)&(pMgntInfo->pChannelInfo), RT_CHANNEL_INFO); - - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, &(pMgntInfo->pChannelList), RT_CHANNEL_LIST); - - MGNT_ALLOC_RT_OBJECT(pAdapter, pObjectList, &(pMgntInfo->pApModeInfo), RT_AP_INFO); - - if(pAdapter == GetDefaultAdapter(pAdapter) && !CustomScan_AllocInfo(pAdapter)) - break; - - if( !AllocDrvLogMemory(pAdapter) ) - break; - - if( !MgntAllocHashTables(pAdapter) ) - break; - - if( !MgntAllocatePacketParser(pAdapter) ) - break; - - if( !MgntAllocGenTempBuffer(pAdapter) ) - break; - - if(RT_STATUS_SUCCESS != (status = P2P_AllocP2PInfo(pAdapter))) - break; - - if(RT_STATUS_SUCCESS != (status = NAN_Allocate(pAdapter))) - break; - - if(RT_STATUS_SUCCESS != (status = WFD_AllocateWfdInfo(pAdapter))) - break; - - if(RT_STATUS_SUCCESS != (status = TDLS_AllocateMemory(pAdapter))) - break; - - status = RT_STATUS_SUCCESS; - }while(FALSE); - -Error: - - if(status != RT_STATUS_SUCCESS) - { - MgntFreeMemory(pAdapter); - } - - return status; -} - - -// -// Description: -// Free memory of COMMON\. -// -// TODO: -// Allocate MGNT_INFO. -// -VOID -MgntFreeMemory( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_LIST_ENTRY pObjectList = &(pMgntInfo->ObjectList); - PRT_WLAN_STA pEntry = NULL; - u4Byte i = 0; - - RT_ASSERT((pObjectList->Flink != NULL && pObjectList->Blink != NULL), - ("MgntFreeMemory(): Flink(%p) Blink(%p)\n", pObjectList->Flink, pObjectList->Blink)); - - WFD_FreeWfdInfo(pAdapter); - - P2PFreeAllocatedMemory(pAdapter); - - P2P_FreeP2PInfo(pAdapter); - - NAN_Free(pAdapter); - - TDLS_FreeMemory(pAdapter); - - MgntFreePacketParser(pAdapter); - - MgntFreeHashTables(pAdapter); - - MgntFreeGenTempBuffer (pAdapter); - - if(pMgntInfo->AdditionalBeaconIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalBeaconIEData, pMgntInfo->AdditionalBeaconIESize); - pMgntInfo->AdditionalBeaconIESize = 0; - } - - if(pMgntInfo->AdditionalResponseIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalResponseIEData, pMgntInfo->AdditionalResponseIESize); - pMgntInfo->AdditionalResponseIESize = 0; - } - - if(pMgntInfo->AdditionalAssocReqIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalAssocReqIEData, pMgntInfo->AdditionalAssocReqIESize); - pMgntInfo->AdditionalAssocReqIESize= 0; - } - - if (pMgntInfo->AdditionalProbeReqIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalProbeReqIEData, pMgntInfo->AdditionalProbeReqIESize); - pMgntInfo->AdditionalProbeReqIESize = 0; - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pMgntInfo->AsocEntry[i]); - if(pEntry) - { - if(pEntry->AP_RecvAsocReqLength > 0) - PlatformFreeMemory(pEntry->AP_RecvAsocReq, - pEntry->AP_RecvAsocReqLength); - - if(pEntry->AP_SendAsocRespLength > 0) - PlatformFreeMemory(pEntry->AP_SendAsocResp, - pEntry->AP_SendAsocRespLength); - } - } - - // Release all allocated memory in the P2P_INFO structure ---- - //P2PFreeAllocatedMemory(pP2PInfo); - //--------------------------------------------------- - - while( HAS_RT_OBJECT(pObjectList) ) - { - FREE_RT_OBJECT(pObjectList); - } - - FreeDrvLogMemory(pAdapter); -} - - -VOID -MgntInitializeAllTimer( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - -#if (MULTICHANNEL_SUPPORT == 1) -{ - MultiChannelInitializeTimer(Adapter); -} -#endif - - PlatformInitializeTimer(Adapter, &pMgntInfo->ScanTimer, (RT_TIMER_CALL_BACK)ScanCallback, NULL, "ScanTimer"); - PlatformInitializeTimer(Adapter, &pMgntInfo->JoinTimer, (RT_TIMER_CALL_BACK)JoinTimeout, NULL, "JoinTimer"); - PlatformInitializeTimer(Adapter, &pMgntInfo->JoinConfirmTimer, (RT_TIMER_CALL_BACK)JoinConfirm, NULL, "JoinConfirm"); - PlatformInitializeTimer( Adapter, &pMgntInfo->JoinProbeReqTimer, (RT_TIMER_CALL_BACK)JoinProbeReq, NULL, "JoinProbeReq"); - PlatformInitializeTimer(Adapter, &pMgntInfo->AuthTimer, (RT_TIMER_CALL_BACK) AuthTimeout, NULL, "AuthTimer"); - PlatformInitializeTimer(Adapter, &pMgntInfo->AsocTimer, (RT_TIMER_CALL_BACK) AsocTimeout, NULL, "AsocTimer"); - PlatformInitializeTimer(Adapter, &pMgntInfo->SwBeaconTimer, (RT_TIMER_CALL_BACK)SwBeaconCallback, NULL, "SwBeaconTimer"); //use HW beacon Isaiah - PlatformInitializeTimer(Adapter, &pMgntInfo->globalKeyInfo.KeyMgntTimer, (RT_TIMER_CALL_BACK)KeyMgntTimeout, NULL, "globalKeyInfo.KeyMgntTimer"); // Added by Annie, 2005-06-29. - PlatformInitializeTimer(Adapter, &pMgntInfo->AwakeTimer, (RT_TIMER_CALL_BACK)AwakeTimerCallback, NULL, "AwakeTimer"); - PlatformInitializeTimer(Adapter, &pPSC->InactivePsTimer, (RT_TIMER_CALL_BACK)InactivePsTimerCallback, NULL, "InactivePsTimer"); - PlatformInitializeTimer( Adapter, &pMgntInfo->PnpWakeUpJoinTimer, (RT_TIMER_CALL_BACK)PnPWakeUpJoinTimerCallback, NULL, "PnPWakeUpJoinTimerCallback"); - PlatformInitializeTimer(Adapter, &pMgntInfo->LedTimer, (RT_TIMER_CALL_BACK)LedTimerCallback, NULL, "LedTimer"); - PlatformInitializeTimer(Adapter, &(pStaQos->ACMTimer), (RT_TIMER_CALL_BACK)QosACMTimerCallback, NULL, "ACMTimer"); - PlatformInitializeTimer(Adapter, &(pStaQos->AddTsTimer), (RT_TIMER_CALL_BACK)QosAddTsTimerCallback, NULL, "AddTsTimer"); - PlatformInitializeTimer(Adapter, &(pMgntInfo->DelaySendBeaconTimer), (RT_TIMER_CALL_BACK)DelaySendBeaconTimerCallback, NULL, "DelayStartTimer"); - PlatformInitializeTimer(Adapter, &(pMgntInfo->SecurityInfo.SAQueryTimer), (RT_TIMER_CALL_BACK)SAQueryTimerCallback, NULL, "SAQueryTimerCallback"); - - DFS_TimerContrl(Adapter, DFS_TIMER_INIT); - -#if (P2P_SUPPORT == 1) -{ - P2PInitializeTimer(Adapter); -} -#endif - - NAN_InitTimer(Adapter); - - - PlatformInitializeTimer( Adapter, &pMgntInfo->WaitingKeyTimer, (RT_TIMER_CALL_BACK)WaitingKeyTimerCallback, NULL, "WaitingKeyTimerCallback"); - - //Move from HTInitializeHTInfo for avoiding defining duplicately. by wl 2012-01-13 - PlatformInitializeTimer( Adapter, &(pChnlInfo->SwBwTimer), (RT_TIMER_CALL_BACK)CHNL_SetBwChnlCallback, NULL, "SwVHTBwTimer"); - -} - - -VOID -ResetPSCParameters(PADAPTER Adapter) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - //pPSC->bSwRfProcessing = FALSE ; - pPSC->ReturnPoint = IPS_CALLBACK_NONE; -} - -VOID -InitializeWatchDogTimer( - PADAPTER Adapter -) -{ - PlatformInitializeTimer(Adapter, &Adapter->MgntInfo.WatchDogTimer, (RT_TIMER_CALL_BACK)WatchDogTimerCallback, NULL, "WatchDogTimer"); -} - -VOID -CancelWatchDogTimer( - PADAPTER Adapter -) -{ - PlatformCancelTimer(Adapter, &Adapter->MgntInfo.WatchDogTimer); -} - -VOID -ReleaseWatchDogTimer( - PADAPTER Adapter -) -{ - PlatformReleaseTimer(Adapter, &Adapter->MgntInfo.WatchDogTimer); -} - - -VOID -MgntCancelAllTimer( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_CHANNEL_INFO pChannelInfo = pMgntInfo->pChannelInfo; - - FunctionIn(COMP_MLME); - - if(MgntScanInProgress(pMgntInfo)) - MgntResetScanProcess(Adapter); - - PlatformCancelTimer(Adapter, &pMgntInfo->ScanTimer); - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter->MgntInfo.bDualModeScanStep = 0; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - - PlatformCancelTimer(Adapter, &pMgntInfo->JoinTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->JoinConfirmTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->JoinProbeReqTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->AuthTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->AsocTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->SwBeaconTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->globalKeyInfo.KeyMgntTimer); // Added by Annie, 2005-06-29. - PlatformCancelTimer(Adapter, &pMgntInfo->AwakeTimer); - PlatformCancelTimer(Adapter, &pPSC->InactivePsTimer); - pPSC->ReturnPoint = IPS_CALLBACK_NONE; - PlatformCancelTimer(Adapter, &pMgntInfo->PnpWakeUpJoinTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->LedTimer); - PlatformCancelTimer(Adapter, &(pStaQos->ACMTimer)); - PlatformCancelTimer(Adapter, &(pStaQos->AddTsTimer)); - PlatformCancelTimer(Adapter, &(pMgntInfo->DelaySendBeaconTimer)); - - PlatformCancelTimer(Adapter, &(pMgntInfo->SecurityInfo.SAQueryTimer)); - - DFS_TimerContrl(Adapter, DFS_TIMER_CANCEL); - -#if (P2P_SUPPORT == 1) -{ - P2PCancelTimer(Adapter); -} -#endif - - NAN_CancelTimer(Adapter); - - PlatformCancelTimer(Adapter, &pMgntInfo->WaitingKeyTimer); - PlatformCancelTimer( Adapter, &(pChannelInfo->SwBwTimer)); - - FunctionOut(COMP_MLME); -} - -VOID -MgntReleaseAllTimer( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo =&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); -#if (P2P_SUPPORT == 1) - PP2P_INFO pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; -#endif - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_CHANNEL_INFO pChannelInfo = pMgntInfo->pChannelInfo; - -#if (MULTICHANNEL_SUPPORT == 1) -{ - MultiChannelReleaseTimer(Adapter); -} -#endif - - PlatformReleaseTimer(Adapter, &pMgntInfo->ScanTimer); - - PlatformReleaseTimer(Adapter, &pMgntInfo->JoinTimer ); - PlatformReleaseTimer(Adapter, &pMgntInfo->JoinConfirmTimer ); - PlatformReleaseTimer(Adapter, &pMgntInfo->JoinProbeReqTimer ); - PlatformReleaseTimer(Adapter, &pMgntInfo->AuthTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->AsocTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->SwBeaconTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->globalKeyInfo.KeyMgntTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->AwakeTimer); - PlatformReleaseTimer(Adapter, &pPSC->InactivePsTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->PnpWakeUpJoinTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->DelaySendBeaconTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->SecurityInfo.SAQueryTimer); - PlatformReleaseTimer(Adapter, &pMgntInfo->LedTimer); - PlatformReleaseTimer(Adapter, &(pStaQos->ACMTimer)); - PlatformReleaseTimer(Adapter, &(pStaQos->AddTsTimer)); - - DFS_TimerContrl(Adapter, DFS_TIMER_RELEASE); - -#if (P2P_SUPPORT == 1) -{ - P2PReleaseTimer(Adapter); -} -#endif - - NAN_ReleaseTimer(Adapter); - - - PlatformReleaseTimer(Adapter, &pMgntInfo->WaitingKeyTimer); - PlatformReleaseTimer( Adapter, &(pChannelInfo->SwBwTimer)); -} - -// -// Description: -// Initialize workitems at driver initialization. -// -VOID -MgntInitializeAllWorkItem( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->IbssStartRequestWorkItem), - IbssStartRequestCallback, - (PVOID)Adapter, - "IbssStartRequestWorkItem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->ApStartRequestWorkItem), - AP_StartApRequest, - (PVOID)Adapter, - "ApStartRequestWorkItem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->DropPacketWorkItem), - DropPacketWorkitemCallback, - (PVOID)Adapter, - "DropPacketWorkItem"); - - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->ApSendDisassocWithOldChnlWorkitem), - Ap_SendDisassocWithOldChnlWorkitemCallback, - (PVOID)Adapter, - "Ap_SendDisassocWithOldChnlWorkitem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->DozeWorkItem), - DozeWorkItemCallback, - (PVOID)Adapter, - "DozeWorkItem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->AwakeWorkItem), - AwakeWorkItemCallback, - (PVOID)Adapter, - "AwakeWorkItem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->TbttPollingWorkItem), - TbttPollingWorkItemCallback, - (PVOID)Adapter, - "TbttPollingWorkItem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->PowerSaveControl.InactivePsWorkItem), - InactivePsWorkItemCallback, - (PVOID)Adapter, - "InactivePsWorkItem"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->UpdateTxPowerWorkItem), - UpdateTxPowerDbmWorkItemCallback, - (PVOID)Adapter, - "UpdateTxPowerWorkItem"); - - // 2008/05/16 MH Add to do IC verification on debug command mode. -#if DBG_CMD - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->NICVerify), - (RT_WORKITEM_CALL_BACK)DBG_Verify_Console, - (PVOID)Adapter, - "NIC Verify Console"); -#endif - - - DFS_WorkItemContrl(Adapter, DFS_WORKITEM_INIT); - -#if (P2P_SUPPORT == 1) -{ - PP2P_INFO pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; - - PlatformInitializeWorkItem( - Adapter, - &(pP2PInfo->P2PPSWorkItem), - (RT_WORKITEM_CALL_BACK)P2PPsWorkItemCallback, - (PVOID)pP2PInfo, - "P2PPsTimeoutWorkItem"); -} -#endif - -#if (MULTICHANNEL_SUPPORT == 1) -{ - MultiChannelInitializeWorkItem(Adapter); -} -#endif - -#if(AUTO_CHNL_SEL_NHM == 1) - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->AutoChnlSel.AutoChnlSelWorkitem), - MgntAutoChnlSelWorkitemCallback, - (PVOID)Adapter, - "MgntAutoChnlSelWorkitemCallback"); -#endif - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->PowerSaveControl.FwPsClockOnWorkitem), - FwPsClockOnWorkitemCallback, - (PVOID)Adapter, - "FwPsClockOnWorkitemCallback"); - - PlatformInitializeWorkItem( - Adapter, - &(pMgntInfo->ChangeBwChnlFromPeerWorkitem), - CHNL_ChangeBwChnlFromPeerWorkitemCallBack, - (PVOID)Adapter, - "CHNL_ChangeBwChnlFromPeerWorkitemCallBack"); - -} - - -// -// Description: -// Free workitems at driver unload. -// -VOID -MgntFreeAllWorkItem( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - PlatformFreeWorkItem(&(pMgntInfo->IbssStartRequestWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->ApStartRequestWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->DropPacketWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->ApSendDisassocWithOldChnlWorkitem)); - PlatformFreeWorkItem(&(pMgntInfo->DozeWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->AwakeWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->TbttPollingWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->PowerSaveControl.InactivePsWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->UpdateTxPowerWorkItem)); - PlatformFreeWorkItem(&(pMgntInfo->PowerSaveControl.FwPsClockOnWorkitem)); - PlatformFreeWorkItem(&(pMgntInfo->ChangeBwChnlFromPeerWorkitem)); - -#if (AUTO_CHNL_SEL_NHM == 1) - PlatformFreeWorkItem(&(pMgntInfo->AutoChnlSel.AutoChnlSelWorkitem)); -#endif - -#if DBG_CMD - PlatformFreeWorkItem(&(pMgntInfo->NICVerify)); -#endif - DFS_WorkItemContrl(Adapter, DFS_WORKITEM_FREE); - - NAN_FreeAllWorkItem(Adapter); - -#if (P2P_SUPPORT == 1) -{ - PP2P_INFO pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; - PlatformFreeWorkItem(&(pP2PInfo->P2PPSWorkItem)); -// PlatformFreeWorkItem(&(pP2PInfo->P2POidPostProcessWorkItem)); -} -#endif - -#if (MULTICHANNEL_SUPPORT == 1) -{ - MultiChannelReleaseWorkItem(Adapter); -} -#endif - -} - -// -// Description: -// Reset current 802.11 management related setting. -// -VOID -ResetMgntVariables( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo =&(Adapter->MgntInfo); - u1Byte i; - int nIdx; - - FunctionIn(COMP_MLME); - - PlatformCancelTimer(Adapter, &pMgntInfo->JoinTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->JoinConfirmTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->JoinProbeReqTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->AuthTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->AsocTimer); - - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - pMgntInfo->AuthStatus = AUTH_STATUS_IDLE; - pMgntInfo->mDisable = TRUE; - pMgntInfo->mAssoc = FALSE; - pMgntInfo->mIbss = FALSE; - pMgntInfo->ListenInterval = 2; // The same as WG111T, 2005.04.08, by rcnjko. - pMgntInfo->AsocTimestamp = 0; // Timestamp when associated, 2006.11.23, by shien chang. - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; //set by user. select join network type - pMgntInfo->bInBIPMFPMode = FALSE; - CLEAR_FLAGS(pMgntInfo->targetAKMSuite); - pMgntInfo->RequestFromUplayer = FALSE; - pMgntInfo->bDisconnectRequest = FALSE; - pMgntInfo->bPrepareRoaming = FALSE; - pMgntInfo->PrepareRoamState = RT_PREPARE_ROAM_NONE; - pMgntInfo->PrepareRoamingCount = 0; - pMgntInfo->bStartDelayActionFrame = FALSE; - pMgntInfo->CntAfterLink = 0; - -#if 1 - if(GetFirstClientPort(Adapter) || GetFirstGOPort(Adapter)) - { - pMgntInfo->bScanOnly = TRUE; - //Set SSID as dummy to stop the current join process. - SET_SSID_DUMMY(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - } -#endif - - // - // We never stop the scan process, but the state_Synchronization_Sta should be "STATE_No_Bss" after scan completes. - // - if(!pMgntInfo->bScanInProgress) - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - else - pMgntInfo->state_Synchronization_Sta_BeforeScan = STATE_No_Bss; - - pMgntInfo->bJoinInProgress = FALSE; - - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_NONE; - MgntResetRoamingState(pMgntInfo); - MgntResetJoinCounter(pMgntInfo); - - ReleaseDataFrameQueued(Adapter); - - MgntLinkStatusResetRxBeacon(Adapter); - - for( i=0; iLinkDetectInfo.RxBcnNum[i] = 0; - } - pMgntInfo->LinkDetectInfo.SlotNum = 2; - pMgntInfo->LinkDetectInfo.SlotIndex = 0; - - MgntRefreshSuppRateSet( Adapter ); - - // Intialize IBSS related setting. 2004.12.10, by rcnjko. - pMgntInfo->dot11BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; // For 8187 WIFI, 2004.10.11, by rcnjko. - pMgntInfo->dot11DtimPeriod = pMgntInfo->Regdot11DtimPeriod; - - // Initialize wireless mode of current BSS. 2005.02.17, by rcnjko. - pMgntInfo->CurrentBssWirelessMode = WIRELESS_MODE_UNKNOWN; - - // Initialize SrcAddr, FragNum and LastRxUniSrcAddr of last received unicast packet. Annie, 2005-07-25. - for( nIdx=0; nIdx<6; nIdx++ ) - pMgntInfo->LastRxUniSrcAddr[nIdx] = 0xff; - - pMgntInfo->LastRxUniFragNum = 0xff; - pMgntInfo->LastRxUniSeqNum = 0xffff; - - - // Reset QoS related variables. Added by Annie, 2005-11-07. - QosInitializeSTA( Adapter ); - - // Reset HT related variables. - - //[win7 Two Port BW40Mhz issue] Extention Port obey the rule of Default Port - //2009.05.20, by Bohn - HTInitializeHTInfo( Adapter ); - - - //VHT - VHTInitializeVHTInfo(Adapter); - - - // Reset TS related variables. - TSInitialize( Adapter ); - - pMgntInfo->ExcludedMacAddrListLength = 0; - pMgntInfo->bExcludeUnencrypted = TRUE; - pMgntInfo->SafeModeEnabled = FALSE; - - // - // Reset all association entry for AP mode and AdHoc mode. - // - AsocEntry_ResetAll(Adapter); - - TDLS_Reset(Adapter); - - // Get default hidden ssid setting. This value will affect the DTM test result, ex PacketFilter_ext. - // By Bruce, 2008-09-26. - pMgntInfo->bHiddenSSIDEnable = DEFAULT_HIDDEN_SSID; - - if(pMgntInfo->AdditionalBeaconIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalBeaconIEData, pMgntInfo->AdditionalBeaconIESize); - pMgntInfo->AdditionalBeaconIESize = 0; - } - - if(pMgntInfo->AdditionalResponseIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalResponseIEData, pMgntInfo->AdditionalResponseIESize); - pMgntInfo->AdditionalResponseIESize = 0; - } - - if(pMgntInfo->AdditionalAssocReqIESize > 0) - { - PlatformFreeMemory(pMgntInfo->AdditionalAssocReqIEData, pMgntInfo->AdditionalAssocReqIESize); - pMgntInfo->AdditionalAssocReqIESize= 0; - } - - // - // Initialize SSID list to scan. - // - MgntInitSsidsToScan(Adapter); - - pMgntInfo->bIndicateConnectEvent = FALSE; - - pMgntInfo->bInToSleep = FALSE; -// pMgntInfo->bJoinInProgress = FALSE; - - if(Adapter->bSWInitReady) - { - ActUpdate_ProtectionMode(Adapter, FALSE); - } - - DFS_StaMgntResetVars(Adapter); - - // Initialize TIE and 802.11 MFP - pMgntInfo->TIE.Octet = pMgntInfo->TIEBuff; - pMgntInfo->TIE.Length = 0; - pMgntInfo->bInBIPMFPMode = FALSE; - - FunctionOut(COMP_MLME); - -} - -// -// Description: -// 1. Initialize management related S/W resource. -// 2. Initialize default value of management related attributes, RegXXX, and -// reset 802.11 management related variables to initial state. -// -// Assumption: -// This function shall be invoke once at driver initialization. -// -VOID -InitializeMgntVariables( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - int nIdx; - - Adapter->bFWReady = FALSE; - // 2008/02/18 MH We execute IO for 9x series after LBUS is enabled. - pMgntInfo->LPSDelayCnt= 0; - Adapter->bDriverIsGoingToUnload = FALSE; - // 09/08/17 MH From Clevo 830/840 test, we need to forbid DM when we try to enter S3/S4. - // The function os not enabled now!!!!! - pMgntInfo->bPwrSaveState = FALSE; - Adapter->bDriverIsGoingToPnpSetPowerSleep = FALSE; - Adapter->bHWSecurityInWoL = FALSE; - Adapter->bEnterPnpSleep = FALSE; - Adapter->bWakeFromPnpSleep = FALSE; - Adapter->bDriverShutdown = FALSE; - Adapter->bInWoWLANPowerState = FALSE; - Adapter->CPWMTimeoutCount = 0; - - pMgntInfo->DelayLPSLastTimeStamp = 0; - pMgntInfo->bReceiveSystemPSOID = FALSE; - - // Initialize timer and workitems. - MgntInitializeAllTimer(Adapter); - MgntInitializeAllWorkItem(Adapter); - - // Init watchdog timer - InitializeWatchDogTimer(Adapter); - - // - // Initialize default setting, which might be overrided as user desired ones. - // For example, registry in Windows case.. - // - - FillOctetString( pMgntInfo->Ssid, pMgntInfo->SsidBuf, 0 ); - -#if 1 - if(GetFirstClientPort(Adapter) || GetFirstGOPort(Adapter)) - { - //Set SSID as dummy to stop the current join process. - SET_SSID_DUMMY(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - } -#endif - - MgntInitRateSet(Adapter); - - pMgntInfo->FragThreshold=2347; - pMgntInfo->dot11RtsThreshold = 2346; - - // - // Max Raoming Count(Roaming Time = Roaming Count * Check_For_Hange_Period), by Bruce, 2009-02-13. - // - pMgntInfo->RegRoamingLimitCount = 2; - - pMgntInfo->Regdot11ChannelNumber = 1; - pMgntInfo->Regdot11BeaconPeriod = 100; // Asked by Owen, 2004.10.11, by rcnjko. - pMgntInfo->Regdot11DtimPeriod = 2; - - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; //set by user. select join network type - pMgntInfo->RegmCap = cESS | cIBSS /*| cPrivacy | cShortPreamble*/; - - // Initialize AP mode related variables. 2005.06.21, by rcnjko. - RTInitializeListHead( &(pMgntInfo->GroupPsQueue) ); - for(nIdx = 0; nIdx < ASSOCIATE_ENTRY_NUM; nIdx++) - { - RTInitializeListHead( &(pMgntInfo->AsocEntry[nIdx].PsQueue) ); - RTInitializeListHead( &(pMgntInfo->AsocEntry[nIdx].WmmPsQueue) ); - } - - // Initialzie Auto Select Channel related, 2006.1.26, by rcnjko. - pMgntInfo->bAutoSelChnl = FALSE; - pMgntInfo->ChnlWeightMode = 0; - - // Initialize AP mode hidden SSID and Locked STA Address List. Added by Annie, 2006-02-15. - pMgntInfo->bHiddenSSID = FALSE; - pMgntInfo->LockType = MAC_FILTER_DISABLE; - pMgntInfo->LockedSTACount = 0; - pMgntInfo->LockedSTACount_Reject= 0; - PlatformZeroMemory( pMgntInfo->LockedSTAList, MAX_LOCKED_STA_LIST_NUM*6 ); - PlatformZeroMemory( pMgntInfo->LockedSTAList_Reject, MAX_LOCKED_STA_LIST_NUM*6 ); - pMgntInfo->bDefaultPermited = TRUE; - // Initialize offset for querying cloud key - pMgntInfo->cloud_key_offset = 0; - pMgntInfo->StaCount = 0; - - - // SW RF state. 2006.12.18, by shien chang. - if(pMgntInfo->RegRfOff == TRUE) - pMgntInfo->eSwRfPowerState = eRfOff; - else - pMgntInfo->eSwRfPowerState = eRfOn; - - pMgntInfo->LinkDetectInfo.NumRxUnicastTxOkThresh = 8; - pMgntInfo->LinkDetectInfo.NumRxUnicastThresh = 2; - pMgntInfo->LinkDetectInfo.NumRxOkThresh = 0xff; - - // For inactive power save mode, 2007.07.16, by shien chang. - pMgntInfo->PowerSaveControl.bInactivePs = FALSE; - pMgntInfo->PowerSaveControl.bIPSModeBackup = FALSE; - // Default AC mode, wait for pnp notify to change it. - pMgntInfo->PowerSaveControl.PowerProfile = 1; - // Default No power saving level, wait for oid notify to change it. - pMgntInfo->PowerSaveControl.PowerSaveLevel = POWER_SAVING_NO_POWER_SAVING; - pMgntInfo->PowerSaveControl.PowerMode = POWER_SAVING_NO_POWER_SAVING; - pMgntInfo->PowerSaveControl.PowerPolicy = POWERCFG_MAX_POWER_SAVINGS; - pMgntInfo->keepAliveLevel = 0; - pMgntInfo->PowerSaveControl.bDisableLPSByOID = FALSE; - pMgntInfo->PowerSaveControl.bEnterLPSDuringSuspend = FALSE; - pMgntInfo->PowerSaveControl.bFindWakePacket = TRUE; // default set to TRUE - - // For network monitor mode, 2007.08.06, by shien chang. - pMgntInfo->bNetMonitorMode = FALSE; - - pMgntInfo->ClientConfigPwrInDbm = UNSPECIFIED_PWR_DBM; - - pMgntInfo->RegCapAKMSuite = DEFAULT_SUPPORT_AKM_SUITE; - - SecInit(Adapter); // 070106, by rcnjko. - - // - // Clear the rejected association AP, 2006.12.07, by shien chang. - // - MgntClearRejectedAsocAP(Adapter); - - Dot11d_Reset(Adapter); // 070315, by rcnjko. - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_INIT, NULL, NULL); - - // Initialize AP Mode Info - AP_InitializeVariables(Adapter); - - TDLS_Init(Adapter); - - - // - // Reset current management setting. - // - ResetMgntVariables(Adapter); - - // IHV support type - pMgntInfo->IhvType = IHV_SUPPORT_NONE; - - pMgntInfo->bDumpRegs = TRUE; - - pMgntInfo->ResumeBeaconTime = DELAY_START_BEACON; - - // - // 2010/12/28 MH We need to move the init start position. - // - // ===================================== - - WPS_Init(Adapter); - // 2011/01/12 MH Revice for WAPI. - WAPI_SecFuncHandler(WAPI_ENABLEWAPISUPPORT, Adapter, WAPI_END); - - // 2011/12/07 hpfan Add for Tcp Reorder - TcpReorder_Init(Adapter); - // ===================================== - - Adapter->bReceiveCpwmInt = FALSE; -#if (USB_TX_THREAD_ENABLE) - Adapter->bUseUsbTxThread = FALSE; -#endif - - - GET_POWER_SAVE_CONTROL(pMgntInfo)->bOSSupportProtocolOffload = TRUE; - - if(Adapter == GetDefaultAdapter(Adapter)) - CustomScan_Init(pMgntInfo->pCustomScanInfo, GetDefaultAdapter(Adapter), BIT45, DBG_LOUD); -} - - - -// -// Description: -// DeInitialize management related S/W resource. -// -// Assumption: -// This function shall be invoke once at driver unload. -// -VOID -DeInitializeMgntVariables( - PADAPTER Adapter - ) -{ - MgntCancelAllTimer(Adapter); - MgntReleaseAllTimer(Adapter); - MgntFreeAllWorkItem(Adapter); - RemoveAllTS(Adapter); - ReleaseAllTSTimer(Adapter); - TDLS_Release(Adapter); - - - - TcpReorder_Release(Adapter); - - CancelWatchDogTimer(Adapter); - ReleaseWatchDogTimer(Adapter); - - if(Adapter->MgntInfo.pCustomScanInfo) - { - CustomScan_Deinit(Adapter->MgntInfo.pCustomScanInfo); - CustomScan_FreeInfo(Adapter->MgntInfo.pCustomScanInfo); - } -} - - -BOOLEAN -MgntGetFWBuffer( - PADAPTER Adapter, - PRT_TCB *ppTcb, - PRT_TX_LOCAL_BUFFER *ppBuf - ) -{ - *ppBuf=GetLocalFWBuffer(Adapter); - if(*ppBuf!=NULL) - { - if(!RTIsListEmpty(&Adapter->TcbIdleQueue)) - { - *ppTcb=(PRT_TCB)RTRemoveHeadListWithCnt(&Adapter->TcbIdleQueue, &Adapter->NumIdleTcb); - - // Initialize the data rate. Annie, 2005-03-31 - (*ppTcb)->DataRate = UNSPECIFIED_DATA_RATE; - - return TRUE; - } - else - { - ReturnLocalFWBuffer(Adapter, *ppBuf); - } - } - return FALSE; -} - - -BOOLEAN -MgntGetBuffer( - PADAPTER pAdapter, - PRT_TCB *ppTcb, - PRT_TX_LOCAL_BUFFER *ppBuf - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - *ppBuf=GetLocalBuffer(pDefaultAdapter); - if(*ppBuf!=NULL) - { - if(!RTIsListEmpty(&pDefaultAdapter->TcbIdleQueue)) - { - *ppTcb=(PRT_TCB)RTRemoveHeadListWithCnt(&pDefaultAdapter->TcbIdleQueue, &pDefaultAdapter->NumIdleTcb); - - // Initialize the data rate. Annie, 2005-03-31 - (*ppTcb)->DataRate = UNSPECIFIED_DATA_RATE; - - return TRUE; - } - else - { - ReturnLocalBuffer(pDefaultAdapter, *ppBuf); - } - } - return FALSE; -} - -VOID -MgntSendPacket( - PADAPTER Adapter, - PRT_TCB pTcb, - PRT_TX_LOCAL_BUFFER pBuf, - u4Byte Length, - u1Byte QueueIndex, - u2Byte DataRate - ) -{ - //2 Start with first buffer, because we don't need to translate header - pTcb->BufferList[0]=pBuf->Buffer; - pTcb->BufferList[0].Length=Length; - pTcb->PacketLength=Length; - pTcb->BufferCount=1; - pTcb->Tailer.Length = 0; - - pTcb->ProtocolType=RT_PROTOCOL_802_11; - pTcb->BufferType=RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->SpecifiedQueueID=QueueIndex; - pTcb->DataRate=DataRate; - pTcb->bFromUpperLayer = FALSE; - pTcb->Reserved=pBuf; - pTcb->FragCount=1; - pTcb->TSID = DEFAULT_TSID; - pTcb->pAdapter = Adapter; - - if((pTcb->SpecifiedQueueID == BE_QUEUE) || - (!ACTING_AS_AP(Adapter) && - (pTcb->SpecifiedQueueID != HIGH_QUEUE && pTcb->SpecifiedQueueID != BEACON_QUEUE))) - pTcb->SpecifiedQueueID = NORMAL_QUEUE; // Always use normal queue to prevent corrupting BQ. - - // 20090406 Joseph: Send 6M instead of 1M when CCK is disable for IOT issue. - if(Adapter->MgntInfo.IOTAction & HT_IOT_ACT_DISABLE_CCK_RATE) - { - if(pTcb->DataRate == MGN_1M) - pTcb->DataRate = MGN_6M; - } - - if(Adapter->MgntInfo.bDisableCck && IS_CCK_RATE(pTcb->DataRate)) - { - pTcb->DataRate = MGN_6M; - } - - // 5G band should not send cck rate - if(IS_WIRELESS_MODE_5G(Adapter)) - { - if( pTcb->DataRate == MGN_1M ||pTcb->DataRate == MGN_2M || - pTcb->DataRate == MGN_5_5M ||pTcb->DataRate == MGN_11M) - pTcb->DataRate = MGN_6M; - } - - NicIFSendPacket(Adapter, pTcb); -} - -BOOLEAN -MgntRetryPacket( - PADAPTER pAdapter, - OCTET_STRING pduOS, - u1Byte packettype - ) -{ - pu1Byte pDaddr; - BOOLEAN retryPkt=FALSE; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - - u2Byte CurrentSeqNum = (u2Byte)Frame_SeqNum(pduOS); // 12 bits. - - pDaddr = Frame_Addr1(pduOS); - //DbgPrint("CurrentSeqNum = %d\n", CurrentSeqNum, CurrentSeqNum); - - if(!MacAddr_isMulticast(pDaddr)) - { - if(Frame_Retry(pduOS)) - { - switch(packettype) - { - case Type_Auth: - if(CurrentSeqNum == pMgntInfo->last_auth_seq) - retryPkt = TRUE; - break; - case Type_Asoc_Req: - if(CurrentSeqNum == pMgntInfo->last_asoc_req_seq) - retryPkt = TRUE; - break; - case Type_Asoc_Rsp: - if(CurrentSeqNum == pMgntInfo->last_asoc_rsp_seq) - retryPkt = TRUE; - break; - case Type_Disasoc: - if(CurrentSeqNum == pMgntInfo->last_Disassoc_seq) - retryPkt = TRUE; - break; - case Type_Deauth: - if(CurrentSeqNum == pMgntInfo->last_Deauth_seq) - retryPkt = TRUE; - break; - default: - break; - } - } -// else - { - switch(packettype) - { - case Type_Auth: - pMgntInfo->last_auth_seq = CurrentSeqNum; - break; - case Type_Asoc_Req: - pMgntInfo->last_asoc_req_seq = CurrentSeqNum; - break; - case Type_Asoc_Rsp: - pMgntInfo->last_asoc_rsp_seq = CurrentSeqNum; - break; - case Type_Disasoc: - pMgntInfo->last_Disassoc_seq = CurrentSeqNum; - break; - case Type_Deauth: - pMgntInfo->last_Deauth_seq = CurrentSeqNum; - break; - default: - break; - } - } - } - - return retryPkt; -} - -BOOLEAN -MgntDuplicatePacketDetection( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING pduOS; - pu1Byte pTaddr, pRaddr; - u1Byte CurrentFragNum; // 4 bits. - u2Byte CurrentSeqNum; // 12 bits. - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - - pTaddr = Frame_Addr2(pduOS); - pRaddr = Frame_Addr1(pduOS); - - if(MacAddr_isMulticast(pRaddr)) - return TRUE; - - // by Owen on 05/01/10 for filtering duplicated data frames and dropping these packets - // Only consider unicast and retry packet. 2005.06.21, by rcnjko. - // To keep the SeqNum, FragNum, SrcAddr for every packets and filter the retry packet which already received. - // For WMM, these information should be keep for each AC - // For 802.11e, these information shold be keep for each TID. Joseph, 2005-12-16 - // Here we just handle the duplicate retry packet which is received immediately after last packets. - // For the condition that receiving duplicate packets with Block Ack, we just handle it in RxReorder process. - // Joseph, 2007-09-27 - - #if 0 // Sequence Number & Duplicate Packet Indication Debug - { - DbgPrint("\n====================================================\n"); - RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, "Tx Address:", pTaddr); - RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, "Rx Address:", pRaddr); - DbgPrint("Frame_SeqNum(frame): %d\n", Frame_SeqNum(pduOS)); - DbgPrint("pRfd->Status.pRxTS: %p\n", pRfd->Status.pRxTS); - DbgPrint("====================================================\n"); - } - #endif - - CurrentFragNum = (u1Byte)Frame_FragNum(pduOS); - CurrentSeqNum = (u2Byte)Frame_SeqNum(pduOS); - - if(ACTING_AS_AP(Adapter)) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pTaddr); - - if(pEntry != NULL) - { - if(pRfd->Status.pRxTS==NULL) - { - if( Frame_Retry(pduOS) && - (CurrentFragNum == pEntry->LastRxUniFragNum) && - (CurrentSeqNum == pEntry->LastRxUniSeqNum) ) - { - return FALSE; - } - else - { - pEntry->LastRxUniFragNum = CurrentFragNum; - pEntry->LastRxUniSeqNum = CurrentSeqNum; - } - } - else - { - if( Frame_Retry(pduOS) && - (CurrentFragNum == pRfd->Status.pRxTS->RxLastFragNum) && - (CurrentSeqNum == pRfd->Status.pRxTS->RxLastSeqNum) ) - { - return FALSE; - } - else - { - pRfd->Status.pRxTS->RxLastFragNum = CurrentFragNum; - pRfd->Status.pRxTS->RxLastSeqNum = CurrentSeqNum; - } - } - } - else - { - //not retrun false,as 92d dual mac smart concurrent need. - //example:mac1 soft ap reset,but have no right time to disconnect all sta, so client still connect,need to send deauth fram as below process . - // zhiyuan 2011/11/18 - RT_TRACE(COMP_RECV,DBG_LOUD,("pEntry is null ,don't return false as 92d easy smart concurrent need\n")); - // return FALSE; - } - } - else - { - if(pRfd->Status.pRxTS==NULL) - { - if( Frame_Retry(pduOS) && - PlatformCompareMemory(pMgntInfo->LastRxUniSrcAddr, pTaddr, 6)== 0 && - (CurrentFragNum == pMgntInfo->LastRxUniFragNum) && - (CurrentSeqNum == pMgntInfo->LastRxUniSeqNum) ) - { - //RT_TRACE(COMP_RECV, DBG_LOUD, ("[SNDBG] STA MgntFilterReceivedPacket(): filtering duplicated data frames and dropping these packets\n")); - return FALSE; - } - else - { - pMgntInfo->LastRxUniFragNum = CurrentFragNum; - pMgntInfo->LastRxUniSeqNum = CurrentSeqNum; - PlatformMoveMemory( pMgntInfo->LastRxUniSrcAddr, pTaddr, 6 ); - //RT_TRACE(COMP_RECV, DBG_LOUD, ("[SNDBG] STA MgntFilterReceivedPacket(): Record it.\n" )); - } - } - else - { - if( Frame_Retry(pduOS) && - (CurrentFragNum == pRfd->Status.pRxTS->RxLastFragNum) && - (CurrentSeqNum == pRfd->Status.pRxTS->RxLastSeqNum) ) - { - return FALSE; - } - else - { - pRfd->Status.pRxTS->RxLastFragNum = CurrentFragNum; - pRfd->Status.pRxTS->RxLastSeqNum = CurrentSeqNum; - } - } - } - - return TRUE; -} - - -VOID -MgntWMMPSPacket( - PADAPTER Adapter, - OCTET_STRING pduOS -) -{ - pu1Byte pdu = pduOS.Octet; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - if((pMgntInfo->dot11PowerSaveMode !=eActive) && (!ACTING_AS_AP(Adapter))) - { - BOOLEAN bTriggerAC=FALSE; - - switch( GET_QOS_CTRL_WMM_UP(pdu) ) - { - case 0: - case 3: - bTriggerAC=GET_BE_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd); - break; - case 1: - case 2: - bTriggerAC=GET_BK_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd); - break; - case 4: - case 5: - bTriggerAC=GET_VI_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd); - break; - case 6: - case 7: - bTriggerAC=GET_VO_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd); - break; - } - - if(bTriggerAC) - { - // Temp solution for P2P Test Plan 6.1.13 and 7.1.5. By Bruce, 2010-06-30. - pMgntInfo->pStaQos->bWmmMoreData = Frame_MoreData(pduOS) ? TRUE : FALSE; - - if( GET_QOS_CTRL_WMM_EOSP(pdu) ) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("MgntFilterReceivedPacket(): <<<<<<<<<< Leave APSD service period <<<<<<<<<<\n")); - pMgntInfo->pStaQos->bInServicePeriod=FALSE; - } - } - else - { - if(!GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) // by tynli - { - if(pMgntInfo->dot11PowerSaveMode != eActive && (!ACTING_AS_AP(Adapter))) - { - if((Frame_MoreData(pduOS)==TRUE)) - { - OnMoreData(Adapter); - } - } - } - } - } -} - - - -BOOLEAN -MgntFilterReceivedPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING pduOS; - u1Byte WAIPkt = 0; - AUTH_STATUS_T state_auth; - ASOC_STATUS_T state_asoc; - BOOLEAN bAcceptable = TRUE; - BOOLEAN bValidAddr4; - BOOLEAN bToOtherSTA = FALSE; - PMGNT_INFO pDefaultMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); - pu1Byte pdu, pDaddr, pTaddr, pRaddr; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - //1 Return FALSE if this RFD should be freed - - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pdu = pRfd->Buffer.VirtualAddress; - pDaddr = Frame_pDaddr(pduOS); - pTaddr = Frame_Addr2(pduOS); - pRaddr = Frame_Addr1(pduOS); - bValidAddr4 = Frame_ValidAddr4(pduOS); - - //2 Filter out error packet - if( pRfd->Status.bHwError) - { - return FALSE; - } - - // - // Filter out unicast frames to other STA. - // Note that, it is to prevent unicast mgnt frame change our mgnt state machine, - // for example, deauth frame to other STA should cause us become deauthenitacted. - // 2006.01.11, by rcnjko. - // - if( !MacAddr_isMulticast(pRaddr) && !eqMacAddr(pRaddr, Adapter->CurrentAddress) ) - { // Unicast frame to other STA. - - if(pMgntInfo->bPSPXlinkMode == TRUE) - { - bToOtherSTA = TRUE; - pRfd->Status.bForward = TRUE; - } - else if(pMgntInfo->bNetMonitorMode == TRUE) - { - { - bToOtherSTA = TRUE; - pRfd->Status.bForward = TRUE; - } - } - else - return FALSE; - } - - // Filter out data packet that is not AMSDU but length >= 2k - if (Frame_ContainQc(pduOS) && (GET_QOS_CTRL_HC_CFP_USRSVD(pduOS.Octet) != 1) && (pRfd->PacketLength>= 2048)) - { - RT_TRACE(COMP_RECV, DBG_LOUD, - ("MgntFilterReceivedPacket(): Not AMSDU, but packet lenght > 2k, Dropped!!!===\n")); - return FALSE; - } - - // 8192U - if data frames don't decryption by hw then decrypt by sw - // 8190P/8192E - If data frames is not decrypted by hw then decrypt by sw - //RxCheckSWDecryption(Adapter, pRfd); - - //==================================== - // Filter packet - //---------------------------------------------- - // <1>Reject frames before connection established. - // <2>Reject Encrypted Management frame except 3rd auth frame. - // <3>Management frame filter - // <4>Control frame filter - // <5>filter frames from different BSS - // <6>Data frame filter - //------- - // return - // FALSE to free received frame - // TRUE to Defrag Packet - //---------------------------------------------- - // ---------------------------------------------------- - // <1>Reject frames before connection established. - // ---------------------------------------------------- - - if( IsMgntFrame(pdu) ) - { - if(MgntRetryPacket(Adapter, pduOS, PacketGetType(pduOS))) - return FALSE; - } - - // ---------------------------------------------------- - // <2>Reject Encrypted Management frame except 3rd auth frame. - // ---------------------------------------------------- - if( IsMgntFrame(pdu) ){ - if( Frame_WEP(pduOS) ) - { - if( IsMgntAuth(pdu) && Frame_AuthTransactionSeqNum(pduOS)==3 && pMgntInfo->AuthReq_auAlg==SHARED_KEY) - { - Mgnt_Indicate(Adapter, pRfd, noerr); - } - else - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): Reject Encrypted Management frame except 3rd auth frame.\n")); - } - return FALSE; - } - } - - MgntSsInquiry( Adapter, pTaddr, &state_auth, &state_asoc ); - - // ---------------------------------------------------- - // <3>Management frame filter - // ---------------------------------------------------- - if( IsMgntFrame(pdu) ){ - if (bToOtherSTA ) - return FALSE; - else - { - if( IsMgntBeacon(pdu) || IsMgntProbeReq(pdu) || IsMgntAction(pdu) || IsMgntActionNoAck(pdu)){ - Mgnt_Indicate(Adapter, pRfd, noerr); - } - else - { - if( IsMgntAuth(pdu) || IsMgntDeauth(pdu) || IsMgntAtim(pdu) || IsMgntProbeRsp(pdu) ){ - if( !MgntIsMacAddrGroup( pDaddr ) ){ - Mgnt_Indicate(Adapter, pRfd, noerr); - } - else{ - if( MacAddr_isBcst( pDaddr ) ){ - if( IsMgntDeauth(pdu) ){ - Mgnt_Indicate(Adapter, pRfd, noerr); - } - } - } - } - else if( IsMgntAsocReq(pdu) || IsMgntAsocRsp(pdu) || IsMgntReAsocReq(pdu) || IsMgntReAsocRsp(pdu) || IsMgntDisasoc(pdu) ){ - if( (state_auth == opensystem_auth) || (state_auth == sharedkey_auth) || (ft_auth == state_auth)){ - Mgnt_Indicate(Adapter, pRfd, noerr); - } - else{ - Mgnt_Indicate(Adapter, pRfd, class2); - } - } - } - return FALSE; - } - } - - // ---------------------------------------------------- - // <4>Control frame filter - // ---------------------------------------------------- - if( IsCtrlFrame(pdu) ) - { - if(bToOtherSTA) - return FALSE; - else if( IsCtrlPSpoll(pdu)) - { - if( ACTING_AS_AP(Adapter)) - { - if( state_asoc == assoc ) - AP_PS_OnPSPoll(Adapter, pduOS); - else - { - if( state_auth == not_auth ) - Mgnt_Indicate(Adapter, pRfd, class2); - else - Mgnt_Indicate(Adapter, pRfd, class3); - } - } - } - else if( IsCtrlNDPA(pdu)) - { - - RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "GetNDPAFrame:\n", pduOS.Octet, pduOS.Length); - } - else if(IsCtrlBFReportPoll(pdu)) - { - RT_PRINT_DATA(COMP_RECV, DBG_TRACE, "Get BFReportPoll:\n", pduOS.Octet, pduOS.Length); - } - else if(IsCtrlBlockAckReq(pdu)) - { - OnBAReq(Adapter, pRfd,pduOS); - } - return FALSE; - } - - - // ---------------------------------------------------- - // <5>filter frames from different BSS - // ---------------------------------------------------- - if( !bValidAddr4 && - !eqMacAddr(pMgntInfo->Bssid, Frame_pBssid(pduOS)) ) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): filter frames from different BSS.\n")); - RT_TRACE(COMP_RECV, DBG_LOUD, - ("bValidAddr4 =%d BSSID=[%02x-%02x-%02x-%02x-%02x-%02x]\n", - bValidAddr4, pMgntInfo->Bssid[0], pMgntInfo->Bssid[1], pMgntInfo->Bssid[2], - pMgntInfo->Bssid[3], pMgntInfo->Bssid[4], pMgntInfo->Bssid[5])); - - return FALSE; - } - - // - // Note : - // This is to fix the issue that if we failed to receive AssocRsp and - // the AP starts 4-way, indicating the EAPOL-KEY may crash the supplicant. - // Not sure if this has any impact on BT - // - if( IsDataFrame(pdu)) - { - if(!ACTING_AS_AP(Adapter)) - { - if( !pMgntInfo->bMediaConnect ) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): Media is Disconnect.\n")); - return FALSE; - } - - } - } - - // When WPS Enable We save the Packet then Drop the packet we won't pass to OS - if(GET_SIMPLE_CONFIG_ENABLED(pDefaultMgntInfo) && SecIsEAPOLPacket( Adapter, &pduOS )) - { - WPS_CopyRxEAPPacket(Adapter, pRfd); - return FALSE; - } - - WAPI_SecFuncHandler(WAPI_SECISWAIPACKET,Adapter,(PVOID)&pduOS,(PVOID)&WAIPkt,WAPI_END); - if(WAIPkt != 0)//WAI Pkt - { - RT_TRACE(COMP_SEC,DBG_LOUD,("MgntFilterReceivedPacket WAIPkt = %d\n",WAIPkt)); - return TRUE; - } - - if( ACTING_AS_AP(Adapter) ) - { // AP mode - - // 070209, rcnjko: Update STA information, e.g. rate and power save state. - AP_PS_UpdateStationPSState( Adapter, &pduOS); - - // - // AP mode: parse the EAPOL packets. Added by Annie, 2005-07-10. - // Our authenticator don't handle EAPOL on WDS, 2006.06.14, by rcnjko. - // - if( !bValidAddr4 && SecIsEAPOLPacket( Adapter, &pduOS ) && - MgntActQuery_ApType(Adapter) != RT_AP_TYPE_VWIFI_AP - && MgntActQuery_ApType(Adapter) != RT_AP_TYPE_LINUX ) - { - AP_OnEAPOL( Adapter, pRfd ); - return FALSE; - } - } - else - { // STA mode - - if(pMgntInfo->PowerSaveControl.WoWLANS5Support && SecIsEAPOLPacket(Adapter, &pduOS)) - { - SecStaGetANoseForS5(Adapter, &pduOS); - } - - if(IS_TDL_EXIST(pMgntInfo)) - TDLS_PS_UpdatePeerPSState(Adapter, &pduOS, FALSE); - } - - - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER ) - { // station without Encryption Algrithm. - if( Frame_WEP(pduOS) && !bValidAddr4 ) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): station without Encryption Algrithm.\n")); - bAcceptable = FALSE; - } - } - else - { // station with Encryption Algrithm. Only EAPOL packets allowed. - if( Frame_WEP(pduOS) == FALSE && !bValidAddr4 ) - { - BOOLEAN bMoreFrag = (BOOLEAN)Frame_MoreFrag(pduOS); - u1Byte FragNum = (u1Byte)Frame_FragNum(pduOS); - BOOLEAN bWPSEnable = FALSE; - - bWPSEnable = Adapter->pNdis62Common->bWPSEnable; - - // EAPOL Request may be fragments. 2004.10.05, by rcnjko. - if( (!bMoreFrag && FragNum == 0) && // Non-fragment - !SecIsEAPOLPacket(Adapter,&pduOS) - ) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): station with Encryption Algrithm. Only EAPOL packets allowed.\n")); - //for WLK1.5 softap_wps_ext - if (pMgntInfo->bExcludeUnencrypted &&(!bWPSEnable || !Adapter->bInHctTest)) - { - bAcceptable = FALSE; - - CountRxExcludedUnencryptedStatistics(Adapter, pRfd); - } - } - - if(pMgntInfo->IOTPeer == HT_IOT_PEER_MERU) - { - - // - // For Meru AP issue. by Neo and Emily, 20101019 - // Meru AP send first packet of eapol key right after association - // which may cause corruption of WZC stack. The root cause is - // driver should ignore all EAPOL packet until WZC is ready, but - // here, driver just drop the first two 1st eapol packet - if(SecIsEAPOLPacket(Adapter,&pduOS) && - pMgntInfo->AcceptFirstEAPOLPacket < 2 && - (pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPAPSK || pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPA2PSK)) - { - bAcceptable = FALSE; - pMgntInfo->AcceptFirstEAPOLPacket++; - } - } - - } - } - - - if( bAcceptable == FALSE ){ - return FALSE; - } - - // 2011.09.22 - Use pRaddr to verify if this packet is unicast or broadcast since in the AP mode, the client will unicast a brocast packet to AP. - // Indicate Rx Traffic Stream related information. - if( eqMacAddr(pRaddr, Adapter->CurrentAddress) && - !MacAddr_isMulticast(pRaddr) && - pMgntInfo->pStaQos->CurrentQosMode!=QOS_DISABLE && - IsQoSDataFrame(pdu) ) - { - RxTSIndicate(Adapter, pRfd); - } - else - { - pRfd->Status.pRxTS = NULL; - } - - -#if WLAN_ETW_SUPPORT - - pRfd->RfdFrameUniqueueID = RT_INC_RX_FRAME_UNIQUE_ID(Adapter); - - // - // No activity needs to be associated with this event, the ActivityId is optional and can be NULL. - // 2014.01.14. - // - EventWriteRxIndicationFromNIC( - NULL, //Without associated with the event - pRfd->RfdFrameUniqueueID, // FrameUniqueueID - (IsQoSDataFrame(pduOS.Octet)?Frame_QoSTID(pduOS, sMacHdrLng):0), // TID - 0, // PeerID - pRfd->Status.Seq_Num, //SequenceNumber - pRfd->PacketLength, // PayloadLength in bytes - 0, // QueueLength - Frame_Retry(pduOS),// Retransmit - 0, // Status - 0, // CustomData1 - 0, // CustomData2 - 0); // CustomData3 -#endif - - // 2011.09.22 - Use pRaddr to verify if this packet is unicast or broadcast since in the AP mode, the client will unicast a brocast packet to AP. - if(MgntDuplicatePacketDetection(Adapter, pRfd) == FALSE) - return FALSE; - - - // ---------------------------------------------------- - // <6>Data frame filter - // ---------------------------------------------------- - if( IsDataFrame(pdu) ) - { - if( IsMgntData(pdu) ) - { - - if( MgntIsMacAddrGroup( pDaddr ) && eqMacAddr(pTaddr, Adapter->CurrentAddress) ) - { - // Filter broadcast frame from this station. - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): Filter broadcast frame from this station.\n")); - return FALSE; - } - - // Our NIC send multicast to AP (ToDS), then AP reply to its clients (FromDS). - if( eqMacAddr(Adapter->CurrentAddress, Frame_pSaddr(pduOS)) ) - { - /* In network bridge case: - // To avoid 802.1 Bridge Spanning Tree packet infinite loop. - // We send Spanning Tree packet to AP, then AP forward our packet to its clients. - // 2009-04-16, Isaiah - */ - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): Filter Multicast from this station.\n")); - return FALSE; - } - - if(!GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) // by tynli - { - //Isaiah for APSD TestPlan 2006-07-31 - if((pMgntInfo->dot11PowerSaveMode != eActive && !MacAddr_isMulticast(pRaddr)) - && (!ACTING_AS_AP(Adapter))) - { - if(Frame_MoreData(pduOS)==TRUE) - { - OnMoreData(Adapter); - } - - } - } - }//Data - else if(IsQoSDataFrame(pdu)) //Qos Null or Qos data Isaiah 2006-07-25 - MgntWMMPSPacket(Adapter, pduOS); - else if( IsMgntNullFrame(pdu) ){ - //if( state_auth == not_auth ){ Mgnt_Indicate(Adapter, pRfd, class2); return FALSE; } - } - else if( IsMgntDataAck(pdu) || IsMgntDataPoll(pdu) || IsMgntDataPoll_Ack(pdu) || - IsMgntCfack(pdu) || IsMgntCfpoll(pdu) || IsMgntCfpollAck(pdu) ) - { //TODO: - } - - if(!bValidAddr4) - { // Return FALSE if station is not associated. - if( state_asoc != assoc ) - { - if( state_auth == not_auth ) - { - Mgnt_Indicate(Adapter, pRfd, class2); - } - else - { - Mgnt_Indicate(Adapter, pRfd, class3); - } - RT_TRACE(COMP_RECV, DBG_LOUD, ("MgntFilterReceivedPacket(): return FALSE if station is not associated.\n")); - return FALSE; - } - } - else - { // Filter out invalid WDS packets here. - if(!ACTING_AS_AP(Adapter)) - { - return FALSE; - } - - if(pMgntInfo->WdsMode == WDS_DISABLED) - { - return FALSE; - } - - if(!eqMacAddr(pTaddr, pMgntInfo->WdsApAddr)) - { - return FALSE; - } - } - } - - //Here, ONLY data frame from peer station exists!! - //==================================== - return TRUE; -} - -// -// Description: -// Return FALSE if this packet should not be indicated(only forward). -// If this packet have will be used in more than one purpose, -// we will copy it into local buffer. -// -// -// Revise AP_ForwardPacketWithFromDS(), AP_FromBssToWds(), -// and AP_FromWdsToBss() if QAP is implemented. -// -// 070214, by rcnjko. -// -BOOLEAN -MgntCheckForwarding( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING mpdu; - pu1Byte pTaddr; - pu1Byte pDstAddr; - BOOLEAN bValidAddr4; - BOOLEAN bNeedToIndicate = TRUE; - - FillOctetString(mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pTaddr = Frame_pTaddr(mpdu); - pDstAddr = Frame_pDaddr(mpdu); - bValidAddr4 = Frame_ValidAddr4(mpdu); - - if(!bValidAddr4) - { - if(AsocEntry_IsStationAssociated(pMgntInfo, pTaddr)) - { // If TA is an associated STA. - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pTaddr); - - // Update active time of the STA. - AsocEntry_UpdateTimeStamp(pEntry); - - if(!eqMacAddr(pDstAddr, Adapter->CurrentAddress)) - { // If destination address is not AP. - - if(MacAddr_isMulticast(pDstAddr)) - { // If destination address is bcst/mcst address, - // Forward the packe to WDS AP if required. - if(pMgntInfo->WdsMode != WDS_DISABLED) - { - AP_FromBssToWds(Adapter, pRfd, TRUE); - } - - } -#if (P2P_SUPPORT == 1) - else if(P2P_ENABLED(GET_P2P_INFO(Adapter)) && - !((GET_P2P_INFO(Adapter))->GroupCapability & gcIntraBSSDistribution)) - {// intra bss (forwarding) capability is disabled - // In this case, we only forward multicast frames. 2010.04.16, haich. - ReturnRFDList(Adapter, pRfd); - bNeedToIndicate = FALSE; - } -#endif - else if(AsocEntry_IsStationAssociated(pMgntInfo, pDstAddr)) - { // If destination is a STA associated. - // Forward the packet. - bNeedToIndicate = TRUE; - } - else - { - // In WDS mode: unicast frame not to BSS or us will beforwad to WDS AP and don't indicate it up. - if(pMgntInfo->WdsMode != WDS_DISABLED) - { - AP_FromBssToWds(Adapter, pRfd, TRUE); - } - - // Peer is not associated ----------------------------------- - ReturnRFDList(Adapter, pRfd); - bNeedToIndicate = FALSE; - // ----------------------------------------------------- - } - } - } - } - else - { // WDS frame received: Forward it to current BSS if required. - // Note that, if we fall into this case, pMgntInfo->bWdsMode should not be WDS_DISABLED and - // TA is a valid WDS AP, see also MgntFilterReceivedPacket(). - - if(!eqMacAddr(pDstAddr, Adapter->CurrentAddress)) - { // If destination address is not AP. - if(MacAddr_isMulticast(pDstAddr)) - { // If destination address is bcst/mcst address, we forard it to BSS and also indicate up. - - // Forward the packet to BSS. - AP_FromWdsToBss(Adapter, pRfd, TRUE); - - // We will indicate it up later. - } - else if(AsocEntry_IsStationAssociated(pMgntInfo, pDstAddr)) - { // If destination is a STA associated. - - // Forward the packet to BSS. - if(AP_FromWdsToBss(Adapter, pRfd, TRUE) == FALSE) - { - // If we failed to forward it, so just return the RFD here. - RT_TRACE(COMP_AP, DBG_WARNING, ("MgntCheckForwarding(): Failed to forward packet from WDS to BSS!\n")); - } - - // Don't indicate it up. - ReturnRFDList(Adapter, pRfd); - bNeedToIndicate = FALSE; - } - else - { - // Don't indicate it up. - ReturnRFDList(Adapter, pRfd); - bNeedToIndicate = FALSE; - } - } - - // If this is a unicast frame to us in AP mode, we'll indicate it up later. - } - - return bNeedToIndicate; -} - - -BOOLEAN -MgntFilterTransmitPacket( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if( pMgntInfo->mDisable==TRUE && pMgntInfo->bMediaConnect==FALSE ) - { - // - // Reject data frame if we are disconnected or mDisable. - // - if(pTcb->ProtocolType == RT_PROTOCOL_802_3) - { - return FALSE; - } - else if(pTcb->ProtocolType == RT_PROTOCOL_802_11) - { - if( IsFrameTypeData(pTcb->BufferList[0].VirtualAddress) ) - return FALSE; - } - } - - if( ACTING_AS_AP(Adapter) ) - { - pu1Byte pRaddr = NULL; - BOOLEAN bDataFrame = FALSE; - BOOLEAN bWithAddr4 = FALSE; - - // - // Get destination address and frame type. - // - if(pTcb->ProtocolType == RT_PROTOCOL_802_3) - { - pRaddr = pTcb->BufferList[2].VirtualAddress; - RT_ASSERT(pRaddr!=NULL, ("MgntFilterTransmitPacket(): 802.3 pRaddr==NULL\n")); - - bDataFrame = TRUE; - } - else if(pTcb->ProtocolType == RT_PROTOCOL_802_11) - { - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - RT_ASSERT(pHeader !=NULL, ("MgntFilterTransmitPacket(): 802.11 pHeader==NULL\n")); - - pRaddr = pHeader + 4; - RT_ASSERT(pRaddr!=NULL, ("MgntFilterTransmitPacket(): 802.11 pRaddr==NULL\n")); - - if( IsFrameTypeData(pHeader) ) - bDataFrame = TRUE; - - if( IsFrameWithAddr4(pHeader) ) - bWithAddr4 = TRUE; - } - - // - // Reject data frame dest STA is not associated. - // - if(pRaddr != NULL && !MacAddr_isMulticast(pRaddr) && bDataFrame) - { // Data frame with unicast destination. - if(!bWithAddr4) - { - if( pMgntInfo->WdsMode == WDS_DISABLED && - !AsocEntry_IsStationAssociated(pMgntInfo, pRaddr) ) - { // Destination STA is not associated. - RT_TRACE( COMP_AP, DBG_LOUD, - ("MgntFilterTransmitPacket(): Destination STA is not associated, pRaddr: %02X-%02X-%02X-%02X-%02X-%02X!\n", - pRaddr[0],pRaddr[1],pRaddr[2],pRaddr[3],pRaddr[4],pRaddr[5]) ); - return FALSE; - } - } - else - { - if(pMgntInfo->WdsMode == WDS_DISABLED) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("MgntFilterTransmitPacket(): bWithAddr4 but WdsMode is WDS_DISABLED!\n")); - return FALSE; - } - - if(!eqMacAddr(pRaddr, pMgntInfo->WdsApAddr)) - { - RT_TRACE( COMP_AP, DBG_LOUD, - ("MgntFilterTransmitPacket(): unknown WDS AP, pRaddr: %02X-%02X-%02X-%02X-%02X-%02X!\n", - pRaddr[0],pRaddr[1],pRaddr[2],pRaddr[3],pRaddr[4],pRaddr[5]) ); - return FALSE; - } - } - } - } - - return TRUE; -} - - -RT_STATUS -MgntAllocateBeaconBuf( - PADAPTER Adapter - ) -{ - RT_STATUS status; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - status = PlatformAllocateSharedMemory( - Adapter, - &pMgntInfo->BcnSharedMemory, - BEACON_FRAME_LEN - ); - - if( status == RT_STATUS_SUCCESS ){ - pMgntInfo->beaconframe.Octet = pMgntInfo->BcnSharedMemory.VirtualAddress; - pMgntInfo->beaconframe.Octet += Adapter->TXPacketShiftBytes; - pMgntInfo->beaconframe.Length = 0; - } - - return status; -} - - -VOID -MgntFreeBeaconBuf( - PADAPTER Adapter - ) -{ - PlatformFreeSharedMemory( Adapter, &Adapter->MgntInfo.BcnSharedMemory ); -} - - -BOOLEAN -MgntIsMacAddrGroup( - pu1Byte addr - ) -{ - if( (addr[0]&0x01) && (MacAddr_isBcst(addr)==FALSE) ) - return TRUE; - else - return FALSE; -} - - -VOID -MgntSsInquiry( - PADAPTER Adapter, - pu1Byte pSaddr, - PAUTH_STATUS_T state_auth, - PASOC_STATUS_T state_asoc - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - *state_auth = not_auth; - *state_asoc = disassoc; - - if(!ACTING_AS_AP(Adapter)) - { // STA mode. - if( pMgntInfo->AuthStatus == AUTH_STATUS_SUCCESSFUL ){ - if( pMgntInfo->AuthReq_auAlg == OPEN_SYSTEM ){ - *state_auth = opensystem_auth; - } - else if( pMgntInfo->AuthReq_auAlg == SHARED_KEY ){ - *state_auth = sharedkey_auth; - } - else if(AUTH_ALG_FT == pMgntInfo->AuthReq_auAlg) - { - *state_auth = ft_auth; - } - } - - if( pMgntInfo->mAssoc || pMgntInfo->mIbss ){ - *state_asoc = assoc; - } - } - else - { // AP mode. - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pSaddr); - - if(pEntry != NULL) - { - if(pEntry->AuthAlg == OPEN_SYSTEM && pEntry->AuthPassSeq == 2) - { - *state_auth = opensystem_auth; - } - else if(pEntry->AuthAlg == SHARED_KEY && pEntry->AuthPassSeq == 4) - { - *state_auth = sharedkey_auth; - } - - if(*state_auth != not_auth) - { - *state_asoc = (pEntry->bAssociated) ? assoc : disassoc; - } - } - } -} - - - - -// return TRUE if encryption invoked. -BOOLEAN -MgntGetEncryptionInfo( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN PSTA_ENC_INFO_T pEncInfo, - IN BOOLEAN bIncHead - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte pDestaddr = NULL; - pu1Byte pheader = pTcb->BufferList[0].VirtualAddress; - - if(pMgntInfo->bScanWithMagicPacket) - { // We don't want ot encrypt magic packet, so any frames sending in this period won't be encrypted. 2005.06.27, by rcnjok. - return FALSE; - } - - if( bIncHead ) - //xiong - //pheader += USB_HWDESC_HEADER_LEN; - { - pheader += Adapter->TXPacketShiftBytes; - } - - pEncInfo->bMFPPacket = FALSE; - - GetTcbDestaddr(Adapter, pTcb, &pDestaddr); - - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm!= RT_ENC_ALG_NO_CIPHER ) - { - if( !IsDataFrame(pheader) ) - { - if( IsMgntFrame(pheader) ) - { - OCTET_STRING osMgntFrame; - - FillOctetString(osMgntFrame, pheader, sMacHdrLng); - // Only 3rd auth management frame had set WEP bit, see also ConstructAuthenticatePacket(), 2005.08.18, by rcnjko. - if( IsMgntAuth(pheader) && Frame_WEP(osMgntFrame)) - { - // Encrypt it via SW encryption. 2005.06.27, by rcnjko. - pEncInfo->IsEncByHW = FALSE; - } - // MFP Case !! - else if(Frame_WEP(osMgntFrame) ) - { - pEncInfo->IsEncByHW = FALSE; - pEncInfo->bMFPPacket = TRUE; - } - else - { - return FALSE; - } - } - else - { - return FALSE; - } - } - else - { - OCTET_STRING pTxFrame; - - // Windows lets us do no encryption: DOT11_EXEMPT_ALWAYS - if( pEncInfo->ExemptionActionType == 2) - { - pEncInfo->IsEncByHW = FALSE; - return FALSE; - } - - if( IsNoDataFrame(pheader)) - { - // We SHOULD NOT encrypted such packet. - pEncInfo->IsEncByHW = FALSE; - return FALSE; - } - - // We had not yet implement WDS encryption/decryption. 2006.06.12, by rcnjko. - if(IsFrameWithAddr4(pheader)) - { - return FALSE; - } - - pEncInfo->IsEncByHW = TRUE; - - FillOctetString(pTxFrame, pheader, (u2Byte)pTcb->BufferList[0].Length); - // Only send EAP packet in open when AP do WPS Message exchange - - if(GET_SIMPLE_CONFIG_ENABLED(GetDefaultMgntInfo(Adapter)) && SecIsEAPOLPacket( Adapter, &pTxFrame )) - { - RT_TRACE(COMP_WPS,DBG_LOUD,("In WPS mode, IsEncByHW = false!\n")); - pEncInfo->IsEncByHW = FALSE; - return FALSE; - } - - if(!IsSecProtEapol(pEncInfo->SecProtInfo)) - { // Non-EAPOL packet. - // Set IsEncByHW to TRUE to let pMgntInfo->SecurityInfo.SWTxEncryptFlag to determine if this packet shall be encrypted by HW or SW. - pEncInfo->IsEncByHW = TRUE; - } - else - { // EAPOL packet. - if(IsSecProtEapolBeforeKeyInstalled(pEncInfo->SecProtInfo)) - { // Before PTK installed. - //RT_ASSERT(!IsSecProtEapolAfterKeyInstalled(pEncInfo->SecProtInfo), ("%s(): Invalid pEncInfo->SecProtInfo: %#X\n", __FUNCTION__, pEncInfo->SecProtInfo) ); - RT_ASSERT(!IsSecProtEapolAfterKeyInstalled(pEncInfo->SecProtInfo), ("MgntGetEncryptionInfo(): Invalid pEncInfo->SecProtInfo: %#lX\n", pEncInfo->SecProtInfo) ); - // We CANNOT encrypt the EAPOL packet before PTK installed. - pEncInfo->IsEncByHW = FALSE; - return FALSE; - } - else - { // After PTK installed. - // We want to encrypt EAPOL packet after PTK installed by "SW encryption". - pEncInfo->IsEncByHW = FALSE; - } - } - - //For WEP 802.1x Roam... EAPOL-Packet can't encode ... - { - BOOLEAN bAPSuportCCKM = FALSE; - BOOLEAN bCCX8021xenable = FALSE; - - CCX_QueryCCKMSupport(Adapter, &bCCX8021xenable, &bAPSuportCCKM); - - if( ( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm ==RT_ENC_ALG_WEP104 ) && // WEP mode - pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeOpen && // Open mode - !( bCCX8021xenable && bAPSuportCCKM ) // Not in CCKM mode - ) - { - - if( IsSecProtEapol(pEncInfo->SecProtInfo) ) - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("====> WEP EAPOL Packet No Encode ....\n")); - pEncInfo->IsEncByHW = FALSE; - return FALSE; - } - } - } - - RT_TRACE(COMP_SEC, DBG_TRACE, ("====> MgntGetEncryptionInfo() ExemptionActionType = %x \n",pEncInfo->ExemptionActionType)); - } - - // 2008.04.01 - if(Adapter->HalFunc.GetNmodeSupportBySWSecHandler(Adapter)) - { - pEncInfo->IsEncByHW = FALSE; - } - else if( MacAddr_isBcst(pDestaddr) ) - {//broadcast frame - - if( pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20 || - pMgntInfo->bConcurrentMode || - pMgntInfo->bBTMode) - pEncInfo->IsEncByHW = FALSE; - } - else if( MacAddr_isMulticast(pDestaddr) ) - {//multicast frame - - if( pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20 || - pMgntInfo->bConcurrentMode || - pMgntInfo->bBTMode) - pEncInfo->IsEncByHW = FALSE; - } - else - {//Unicast frame - - // - // In Win7 WEP and AD mdoe always used SW encrypt !! - // - if( pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20 || - pMgntInfo->bConcurrentMode || - pMgntInfo->bBTMode) - { - - if ( (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm== RT_ENC_ALG_WEP40) || - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm== RT_ENC_ALG_WEP104)|| - pMgntInfo->bRSNAPSKMode ) - { - pEncInfo->IsEncByHW = FALSE; - } - - if( pMgntInfo->OpMode == RT_OP_MODE_IBSS ) - { - pEncInfo->IsEncByHW = FALSE; - } - } - } - - //just for FPGA Verification: Adhoc throughput tset - //multicast, broadcast, unicast data frames all use HW encrypt - if(pMgntInfo->bRegAdhocUseHWSec && pMgntInfo->OpMode == RT_OP_MODE_IBSS) - { - pEncInfo->IsEncByHW = TRUE; - } - - pEncInfo->EncAlg = pMgntInfo->SecurityInfo.PairwiseEncAlgorithm; - pEncInfo->keyId = pMgntInfo->SecurityInfo.DefaultTransmitKeyIdx; - pEncInfo->keylen = pMgntInfo->SecurityInfo.KeyLen[pEncInfo->keyId]; - pEncInfo->keybuf = pMgntInfo->SecurityInfo.KeyBuf[pEncInfo->keyId]; - - return TRUE; - } - - return FALSE; -} - - - -u1Byte -MgntQuery_MgntFrameTxRate( - PADAPTER Adapter, - pu1Byte dstaddr - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte rate; - - if(pMgntInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) - { - rate = MgntQuery_TxRateExcludeCCKRates(pMgntInfo->mBrates); - RT_DISP(FDM, WA_IOT, ("MgntQuery_MgntFrameTxRate(), rate = 0x%x\n", rate)); - } - else - rate = pMgntInfo->CurrentBasicRate & 0x7f; - - if(rate == 0){ - // 2005.01.26, by rcnjko. - if( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) &&!pMgntInfo->pHTInfo->bCurSuppCCK)) - rate = MGN_6M; - else - rate = MGN_1M; - } - - return rate; -} - -u2Byte -MgntQuery_DataFrameTxRate( - PADAPTER Adapter, - pu1Byte dstaddr - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte rate = MGN_1M; - PADAPTER pDefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = &pDefAdapter->MgntInfo; - - if(pDefMgntInfo->ForcedDataRate != 0) - rate = pMgntInfo->ForcedDataRate; - else if(MacAddr_isMulticast(dstaddr)) - { // Bcst/Mcst. - if(pMgntInfo->ForcedBstDataRate != 0) - rate = pMgntInfo->ForcedBstDataRate; - else - rate = pMgntInfo->LowestBasicRate & 0x7f; - } - else if( ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, dstaddr); - - if(Adapter->RASupport) - { - if(pEntry != NULL) - { - u1Byte DecisionRate = pEntry->AssociatedMacId; - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_RA_DECISION_RATE, (pu1Byte)&DecisionRate); - rate = Adapter->HalFunc.GetHwRateFromMRateHandler(DecisionRate); - } - } - else - { - rate = CURRENT_RATE( pMgntInfo->dot11CurrentWirelessMode, - pMgntInfo->CurrentOperaRate, - pMgntInfo->HTHighestOperaRate); - - if(pEntry != NULL) - { - u1Byte PeerHighestOpRate; - - if(rate >= MGN_MCS0) - PeerHighestOpRate = pEntry->HTInfo.HTHighestOperaRate; - else - PeerHighestOpRate = pEntry->HighestOperaRate; - - if( rate > PeerHighestOpRate ) - { - rate = PeerHighestOpRate; - } - } - else - { - if( pMgntInfo->WdsMode != WDS_DISABLED && - eqMacAddr(dstaddr, pMgntInfo->WdsApAddr) ) - { - rate = pMgntInfo->CurrentOperaRate & 0x7f; - } - else - { - RT_PRINT_ADDR(COMP_SEND, DBG_WARNING, - "MgntQuery_DataFrameTxRate(): nonassociated STA:\n", dstaddr); - - rate = pMgntInfo->LowestBasicRate & 0x7f; - } - } - } - } - else - {//STA mode. - if(Adapter->RASupport) - { - u1Byte DecisionRate = 0; //0 - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_RA_DECISION_RATE, (pu1Byte)&DecisionRate); - rate = Adapter->HalFunc.GetHwRateFromMRateHandler(DecisionRate); - } - else - { - rate = CURRENT_RATE(pMgntInfo->dot11CurrentWirelessMode, - pMgntInfo->CurrentOperaRate, - pMgntInfo->HTHighestOperaRate); - - } - } - - if(rate == 0) - { - // 2005.01.13, by rcnjko. - if( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && !pMgntInfo->pHTInfo->bCurSuppCCK)) - rate = MGN_6M; - else - rate = MGN_1M; - } - - return rate; -} - -u2Byte -MgntQuery_FrameTxRate( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u2Byte rate =MGN_1M; - pu1Byte pRa = NULL; - - // We cannot use GeTcbDestaddr() here because it is not coalensed, 2005.07.05, by rcnjko. - RT_ASSERT(pTcb->ProtocolType==RT_PROTOCOL_802_11, ("MgntQuery_FrameTxRate(): ProtocolType: %x\n", pTcb->ProtocolType)); - GetTcbDestaddr(Adapter, pTcb, &pRa); - - if( IsFrameTypeData( pTcb->BufferList[0].VirtualAddress ) ) - { - if( (Adapter->MgntInfo.NdisVersion>=RT_NDIS_VERSION_6_20) - && Adapter->bInHctTest && ACTING_AS_AP(Adapter)) - { - if(!MacAddr_isMulticast(pRa)) - pTcb->DataRate=MGN_54M; - else - pTcb->DataRate=MGN_1M; - - pTcb->bTxUseDriverAssingedRate=TRUE; - rate = pTcb->DataRate; - } - else if( pTcb->DataRate == UNSPECIFIED_DATA_RATE ) - rate = MgntQuery_DataFrameTxRate( Adapter, pRa ); - else - rate = pTcb->DataRate; - } - else if( IsFrameTypeMgnt( pTcb->BufferList[0].VirtualAddress ) ){ - - // If data rate is already assigned, we don't have to query it again. Annie, 2005-03-31 - if( pTcb->DataRate == UNSPECIFIED_DATA_RATE ) - rate = MgntQuery_MgntFrameTxRate( Adapter, pRa ); - else - rate = pTcb->DataRate; - } - else{ - - if( pTcb->DataRate == UNSPECIFIED_DATA_RATE ) - { - if( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter)&& !Adapter->MgntInfo.pHTInfo->bCurSuppCCK)) - rate = MGN_6M; - else - rate = MGN_1M; - } - else - rate = pTcb->DataRate; - } - - return rate; -} - - -u1Byte -MgntQuery_NssTxRate( - IN u2Byte Rate - ) -{ - u1Byte NssNum = RF_TX_NUM_NONIMPLEMENT; - - if ( ( Rate >= MGN_MCS8 && Rate <= MGN_MCS15 ) || - ( Rate >= MGN_VHT2SS_MCS0 && Rate <= MGN_VHT2SS_MCS9 ) ) - NssNum = RF_2TX; - else if ( ( Rate >= MGN_MCS16 && Rate <= MGN_MCS23 ) || - ( Rate >= MGN_VHT3SS_MCS0 && Rate <= MGN_VHT3SS_MCS9 ) ) - NssNum = RF_3TX; - else if ( ( Rate >= MGN_MCS24 && Rate <= MGN_MCS31 ) || - ( Rate >= MGN_VHT4SS_MCS0 && Rate <= MGN_VHT4SS_MCS9 ) ) - NssNum = RF_4TX; - else - NssNum = RF_1TX; - - return NssNum; -} - - -u2Byte -MgntQuery_SequenceNumber( - PADAPTER Adapter, - pu1Byte pFrame, - BOOLEAN bBTTxPacket, - pu1Byte pDestAddr, - u1Byte TID -) -{ - u2Byte SeqNum; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(IsCtrlNDPA(pFrame)) - { - SeqNum = pMgntInfo->SoundingSequence; - if( pMgntInfo->SoundingSequence >= 0x3f ) - pMgntInfo->SoundingSequence = 0; - else - pMgntInfo->SoundingSequence++; - } - else if( bBTTxPacket || - IsFrameTypeMgnt(pFrame)|| IsLegacyDataFrame(pFrame) || - MacAddr_isBcst(pDestAddr) ||MacAddr_isMulticast(pDestAddr) ) - { // Management and Legacy Data - SeqNum = pMgntInfo->SequenceNumber; - if( pMgntInfo->SequenceNumber >= 0x0fff ) - pMgntInfo->SequenceNumber = 0; - else - pMgntInfo->SequenceNumber++; - - //RT_DISP(FQoS, QoS_INIT, ("MGNT_LEGACY SEQ=%d \r\n", pMgntInfo->SequenceNumber)); - } - else - { // QoS Data - PTX_TS_RECORD pTS; - if(GetTs(Adapter, ((PTS_COMMON_INFO *)&pTS), pDestAddr, TID, TX_DIR, TRUE)) - { - SeqNum = pTS->TxCurSeq; - //RT_DISP(FQoS, QoS_INIT, ("pTS->TxCurSeq=%04d\r\n", pTS->TxCurSeq)); - pTS->TxCurSeq = (SeqNum + 1) % 4096; - RT_DISP(FQoS, QoS_INIT, ("Qos data SEQ=%04d TID = %d\r\n", SeqNum, TID)); - }else - SeqNum = 0; - } - - return SeqNum; -} - - -BOOLEAN -MgntIsShortPreambleMode( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN IsShortPreamble = FALSE; - pu1Byte pDestaddr = NULL; - - GetTcbDestaddr(Adapter, pTcb, &pDestaddr); - - if( ACTING_AS_AP(Adapter)) - { - } - else - { - // 2005.01.06, by rcnjko. - if( pMgntInfo->dot11CurrentPreambleMode == PREAMBLE_SHORT ) - { - IsShortPreamble = TRUE; - } - } - - if(pTcb->bBTTxPacket) - { - IsShortPreamble = TRUE; - } - - return IsShortPreamble; - - -} - - - -BOOLEAN -MgntIsMulticastFrame( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - pu1Byte pDestaddr = NULL; - - GetTcbDestaddr(Adapter, pTcb, &pDestaddr); - - if( (pDestaddr[0]&0x01) && (MacAddr_isBcst(pDestaddr)==FALSE) ) - return TRUE; - else - return FALSE; -} - - - - - -BOOLEAN -MgntIsBroadcastFrame( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - pu1Byte pDestaddr = NULL; - - GetTcbDestaddr(Adapter, pTcb, &pDestaddr); - - if( MacAddr_isBcst(pDestaddr) ) - return TRUE; - else - return FALSE; -} - - -// -// We do not record QosNull and Null Frame to reduce traffic, -// then it will not enter busy traffic state frequently. 2009.04.08 by tynli. -// -BOOLEAN -MgntIsDataOnlyFrame( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - pu1Byte pHeader = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - - if(pTcb->bInsert8BytesForEarlyMode) - pHeader += 8; - - if(IsDataFrame(pHeader) && - (!IsMgntQosNull(pHeader)) && - (!IsMgntNullFrame(pHeader))) - { - return TRUE; - } - else - return FALSE; -} - - -BOOLEAN -MgntIsRateValidForWirelessMode( - u1Byte rate, - u1Byte wirelessmode - ) -{ - BOOLEAN bReturn = FALSE; - - switch(wirelessmode) - { - case WIRELESS_MODE_A: - if((rate >= MGN_6M) && (rate <= MGN_54M) && (rate != MGN_11M)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_B: - if((rate <= MGN_11M) && (rate != MGN_6M) && (rate != MGN_9M)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_G: - if((rate >= MGN_1M) && (rate <= MGN_54M)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_N_24G: - if((rate >= MGN_MCS0) && (rate <= MGN_MCS31)) - bReturn = TRUE; - else if((rate >= MGN_1M) && (rate <= MGN_54M)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_N_5G: - if((rate >= MGN_MCS0) && (rate <= MGN_MCS31)) - bReturn = TRUE; - else if((rate >= MGN_6M) && (rate <= MGN_54M) && (rate != MGN_11M)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_AC_5G: - if((rate >= MGN_MCS0) && (rate <= MGN_MCS31)) - bReturn = TRUE; - else if((rate >= MGN_6M) && (rate <= MGN_54M) && (rate != MGN_11M)) - bReturn = TRUE; - else if((rate >= MGN_VHT1SS_MCS0) && (rate <= MGN_VHT4SS_MCS9)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_AC_24G: - if((rate >= MGN_MCS0) && (rate <= MGN_MCS31)) - bReturn = TRUE; - else if((rate >= MGN_VHT1SS_MCS0) && (rate <= MGN_VHT4SS_MCS9)) - bReturn = TRUE; - else if((rate >= MGN_1M) && (rate <= MGN_54M)) - bReturn = TRUE; - break; - - case WIRELESS_MODE_AUTO: - RT_ASSERT( FALSE, ("MgntIsRateValidForWirelessMode(): wirelessmode should not be WIRELESS_MODE_AUTO\n")); - break; - - default: - RT_ASSERT( FALSE, ("MgntIsRateValidForWirelessMode(): Unknown wirelessmode: %d\n", wirelessmode)); - break; - } - - return bReturn; -} - - - -u4Byte -MgntGetChannelFrequency( - u4Byte channel - ) -{ // Return in MHz - - // 11b channel - if(channel <= 14) - return DSSS_Freq_Channel[channel]; - - // 11a channel - if(channel < 184) - return 5000+5*channel; - - // 11j channel - return 5000-5*(200-channel); -} - -VOID -MgntUpdateAsocInfo( - PADAPTER Adapter, - UPDATE_ASOC_INFO_ACTION Action, - pu1Byte Content, - u4Byte ContentLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PASOC_INFO pAsocInfo = &(pMgntInfo->AsocInfo); - - if (ContentLength > ASOC_INFO_IE_SIZE) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntUpdateAsocInfo:: The Memory Length(%d) of Action(%d) is exceed %d\n", ContentLength, Action, ASOC_INFO_IE_SIZE)); - - ContentLength= ASOC_INFO_IE_SIZE; - } - - switch (Action) - { - case UpdateAuthSeq1: - if(ContentLength <= sMacHdrLng) - { - RT_TRACE_F(COMP_MLME, DBG_SERIOUS, ("Incorrect ContentLength = %d by UpdateAuthSeq1\n", ContentLength)); - break; - } - PlatformMoveMemory( - pAsocInfo->AuthSeq1, - Content, - ContentLength); - pAsocInfo->AuthSeq1Length = ContentLength; - break; - - case UpdateAuthSeq2: - if(ContentLength <= sMacHdrLng) - { - RT_TRACE_F(COMP_MLME, DBG_SERIOUS, ("Incorrect ContentLength = %d by UpdateAuthSeq2\n", ContentLength)); - break; - } - - PlatformMoveMemory( - pAsocInfo->AuthSeq2, - Content, - ContentLength); - pAsocInfo->AuthSeq2Length = ContentLength; - break; - - case UpdateAsocReq: - PlatformMoveMemory( - pAsocInfo->AsocReq, - Content, - ContentLength); - pAsocInfo->AsocReqLength = ContentLength; - break; - - case UpdateAsocResp: - PlatformMoveMemory( - pAsocInfo->AsocResp, - Content, - ContentLength); - pAsocInfo->AsocRespLength = ContentLength; - break; - - case UpdateAsocBeacon: - PlatformMoveMemory( - pAsocInfo->Beacon, - Content, - ContentLength); - pAsocInfo->BeaconLength = ContentLength; - break; - - case UpdateAsocPeerAddr: - PlatformMoveMemory( - pAsocInfo->PeerAddr, - Content, - 6); - break; - - case UpdateFlagReAsocReq: - pAsocInfo->FlagReAsocReq = *((PBOOLEAN)Content); - break; - - case UpdateFlagReAsocResp: - pAsocInfo->FlagReAsocResp = *((PBOOLEAN)Content); - break; - - case UpdateDeauthAddr: - cpMacAddr(pAsocInfo->DeauthAddr, (pu1Byte)Content); - pAsocInfo->bDeauthAddrValid = TRUE; - break; - - default: - break; - } -} - -BOOLEAN -MgntIsInExcludedMACList( - PADAPTER Adapter, - pu1Byte pAddr - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - ULONG i; - - for (i=0; iExcludedMacAddrListLength; i++) - { - if (PlatformCompareMemory( - &pMgntInfo->ExcludedMacAddr[i], - pAddr, - 6) == 0) - { - return TRUE; - } - } - return FALSE; -} - -VOID -MgntInitSsidsToScan( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SSIDS_TO_SCAN pSsidsToScan = &(pMgntInfo->SsidsToScan); - u1Byte i; - - PlatformZeroMemory(pSsidsToScan->SsidBuf, MAX_SSID_TO_SCAN*MAX_SSID_LEN); - pSsidsToScan->NumSsid = 0; - for (i=0; iSsid[i].Octet = pSsidsToScan->SsidBuf[i]; - pSsidsToScan->Ssid[i].Length = 0; - } -} - -BOOLEAN -MgntAddSsidsToScan( - PADAPTER Adapter, - OCTET_STRING Ssid - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SSIDS_TO_SCAN pSsidsToScan = &(pMgntInfo->SsidsToScan); - u1Byte i; - - if(Ssid.Length == 0) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntAddSsidsToScan SSid length zero!\n")); - return FALSE; - } - - // Check if the SSID is already in. - for (i=0; iNumSsid; i++) - { - if ( CompareSSID(pSsidsToScan->Ssid[i].Octet, pSsidsToScan->Ssid[i].Length, - Ssid.Octet, Ssid.Length) == TRUE) - { - return TRUE; - } - } - - if (pSsidsToScan->NumSsid < MAX_SSID_TO_SCAN) - { - CopySsidOS(pSsidsToScan->Ssid[pSsidsToScan->NumSsid], Ssid); - RT_PRINT_STR(COMP_MLME, DBG_LOUD, "===> MgntAddSsidsToScan(): dest", pSsidsToScan->Ssid[pSsidsToScan->NumSsid].Octet, pSsidsToScan->Ssid[pSsidsToScan->NumSsid].Length); - - pSsidsToScan->NumSsid++; - return TRUE; - } - else - { - return FALSE; - } -} - -BOOLEAN -MgntRemoveSsidsToScan( - PADAPTER Adapter, - OCTET_STRING Ssid - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SSIDS_TO_SCAN pSsidsToScan = &(pMgntInfo->SsidsToScan); - u1Byte i, j; - - for (i=0; iNumSsid; i++) - { - if ( CompareSSID(pSsidsToScan->Ssid[i].Octet, pSsidsToScan->Ssid[i].Length, - Ssid.Octet, Ssid.Length) == TRUE) - { - for (j=i; jNumSsid-1; j++) - { - CopySsidOS(pSsidsToScan->Ssid[j], pSsidsToScan->Ssid[j+1]); - } - pSsidsToScan->NumSsid--; - return TRUE; - } - } - - return FALSE; -} - -VOID -MgntClearSsidsToScan( - PADAPTER Adapter - ) -{ - MgntInitSsidsToScan(Adapter); -} - -// The timer delay is based on the windows ndis thread scheduled delay time. -// By Bruce, 2010-12-27. -#define TBTT_POLLING_TIMER_DELAY_US (16 * sTU) // ms -// -// Description: -// Poll MAC's TSF register to simulate TBTT notification. -// -// Assumption: -// 1. Timer may be fired a little eariler or later than expected. -// 2. Overhead of Timer and wokritem is less than one Beacon Period. -// -// 070124, by rcnjko. -// -VOID -TbttPollingWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u8Byte Now; - u4Byte TimeToSleepInUs = 0; - u4Byte BcnPeriodUs = (pMgntInfo->dot11BeaconPeriod * sTU); - RT_RF_POWER_STATE rfState; - u4Byte timeSlotUs; - u1Byte SwBeaconType = BEACON_SEND_AUTO_SW; - pu1Byte pBeaconHeader = pMgntInfo->beaconframe.Octet; - u1Byte BeaconQueueID = BEACON_QUEUE; - u1Byte nMultiplier = 0; // For IBSS and BEACON_SEND_MANUAL - BOOLEAN PreGroupTimSet = FALSE; // Determine if the group traffic bit is set in the TIM info of the previous beacon. - - RT_TRACE(COMP_BEACON, DBG_TRACE, ("TbttPollingWorkItemCallback()====>\n")); - - if(RT_DRIVER_STOP(pAdapter)) - { - RT_TRACE(COMP_BEACON, DBG_WARNING, - ("TbttPollingWorkItemCallback(): bDriverStopped = %d, bSurpriseRemoved = %d, bDriverIsGoingToUnload = %d; return this workitem!!!\n", - pAdapter->bDriverStopped, pAdapter->bSurpriseRemoved, pAdapter->bDriverIsGoingToUnload)); - return; - } - - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - - if(rfState != eRfOn) - { - RT_TRACE(COMP_BEACON, DBG_WARNING, ("rfState = %d; return this workitem!!!\n", rfState)); - return; - } - - if(GetDefaultAdapter(pAdapter)->MgntInfo.bStartApDueToWakeup) - { - RT_TRACE(COMP_BEACON, DBG_WARNING, ("Tbtt bStartApDueToWakeup ==TRUE, return\n")); - return; - } - - - - // The Beacon state has been marked "stopped". - if(pMgntInfo->BeaconState == BEACON_STOP) - { - RT_TRACE(COMP_BEACON, DBG_WARNING, ("BeaconState = BEACON_STOP; return this workitem!!!\n")); - return; - } - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_HW_BEACON_SUPPORT, (pu1Byte)&SwBeaconType); - // Set the default queue id for beacon. - BeaconQueueID = (SwBeaconType <= BEACON_SEND_AUTO_SW) ? BEACON_QUEUE : NORMAL_QUEUE; - // The beacon queue may be different by the different ICs or buses. - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_BEACON_QUEUE, (pu1Byte)&BeaconQueueID); - - if(pMgntInfo->mIbss && SwBeaconType == BEACON_SEND_MANUAL && pMgntInfo->bMediaConnect) - { // Randomize beacon interval if we are not the only one of the IBSS, 2005.08.23, by rcnjko. - // To fair the Beacon distribution in IBSS, and prevent too many Beacons in the air. - // Only apply to the manual sending beacon beacuse in other cases the HW can fair the Beacon. - nMultiplier = (u1Byte)GetRandomNumber(0, 2); - } - - // - // Poll TSFR to determine the time to send S/W Beacon via ep2. - // - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_TSF_TIMER, (pu1Byte)&Now); - - // - // The Beacon sending by SW timer is very complex, so we seperate the beacon intrval into - // several parts A-B, B-C, and C-D as the following. - // TBTT Next TBTT - // || <------------------ Beacon Period --------------------- > || - // A B C D - // || <- 16 ms -> | <- Beacon Intval - (16*2) -> | <- 16 ms -> || - // || Send Mcast | Do Nothing | Update Becon || - // || -------------------------------------------------------- || - // AP mode - // a. The HW can send the Beacon in TBTT automatically (BEACON_SEND_AUTO_SW) - // (1) A-B: Check if it can send multicast packets now. - // (2) C-D: Prepare the beacon content and send it to the beacon queue. - // b. The SW should check the timing to send the Beacon packet by sw timer (BEACON_SEND_MANUAL) - // (1) A-B: Prepare the Beacon content and send it to the specificed queue. - // (2) A-B: After sending the Beacon, check if it can send multicasts now into the queue where the beacon sent into. - // IBSS mode - - // a. The HW can send the Beacon in TBTT automatically (BEACON_SEND_AUTO_SW) - // (1) C-D: Prepare the beacon content and send it to the beacon queue. - // b. The SW should check the timing to send the Beacon packet by sw timer (BEACON_SEND_MANUAL) - // (1) A-B: Prepare the Beacon content and send it to the specificied queue. - // Note: - // The reason why we use 16 ms is the max delay time when the workitem is woke up in Ndis. - // We use sTU(1024us) for each partition buffer. - // By Bruce, 2010-12-27. - // - - // Position where the current time is at which slot of beacon period. - timeSlotUs = (u4Byte)PlatformModular64(Now, (u8Byte)BcnPeriodUs); - - //RT_TRACE(COMP_AP, DBG_TRACE, ("TbttPollingWorkItemCallback(): Now: %"i64fmt"d >= timeSlot: %d\n", Now, timeSlotUs)); - - //3 // 1st case, A-B - if(timeSlotUs < (TBTT_POLLING_TIMER_DELAY_US + sTU)) - { - if(SwBeaconType == BEACON_SEND_AUTO_SW) - { - // AP mode - if(ACTING_AS_AP(pAdapter)) - { // We need to check the multicast packets. - AP_PS_SendAllMcastPkts(pAdapter, NORMAL_QUEUE); - } - // Wake up at point C before TBTT to update Beacon buffer - TimeToSleepInUs = (u4Byte)(BcnPeriodUs - TBTT_POLLING_TIMER_DELAY_US - timeSlotUs); - } - else if(SwBeaconType == BEACON_SEND_MANUAL) - { - // We need to update Beacon content and send the Beacon - ConstructBeaconFrame(pAdapter); - - - // Set Timestamp according to current value of our TSFR. - // Beacuse we shall send this Beacon by ourself in normal queue and the HW won't fill the - // timestamp for this Beacon, we need to fill the timestamp by ourself. - SET_BEACON_PROBE_RSP_TIME_STAMP_LOW(pBeaconHeader, ((u4Byte)(Now & 0xFFFFFFFF))); - SET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(pBeaconHeader, ((u4Byte)(Now >> 32))); - - // Note: In this case, this beacon packet may not be sent by HW Beacon Queue but any other normal queue. - SendBeaconFrame(pAdapter, BeaconQueueID); - - if(pMgntInfo->bDisSwDmaBcn) - { - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_DIS_SW_BCN, (pu1Byte)(&pAdapter)); - pMgntInfo->bDisSwDmaBcn = FALSE; - } - - if(ACTING_AS_AP(pAdapter) && (pMgntInfo->mDtimCount == 0)) - { - // Note: The Beacon Queue ID shall not be the HW Beacon Queue, or they shall be lost. - // Why we send the multicast packets by this queue beacause we want these packets - // are sent after the previous Beacon. By Bruce, 2011-01-19. - AP_PS_SendAllMcastPkts(pAdapter, BeaconQueueID); - } - // Wake up at point D at TBTT to update/send the next Beacon - TimeToSleepInUs = (u4Byte)(BcnPeriodUs - timeSlotUs + (nMultiplier * BcnPeriodUs)); - } - else - { - RT_TRACE(COMP_AP, DBG_WARNING, ("TbttPollingWorkItemCallback(): Wrong SwBeaconType(%d)! Return!\n", SwBeaconType)); - return; - } - } - //3 // 2nd Case C-D: Prepare beacon content and send bacon - else if(timeSlotUs >= (BcnPeriodUs - TBTT_POLLING_TIMER_DELAY_US - sTU)) - { - if(SwBeaconType == BEACON_SEND_AUTO_SW) - { - ConstructBeaconFrame(pAdapter); - // Note: We don't need to update timestamp because the HW will fill that. - - SendBeaconFrame(pAdapter, BeaconQueueID); - - if(pMgntInfo->bDisSwDmaBcn) - { - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_DIS_SW_BCN, (pu1Byte)(&pAdapter)); - pMgntInfo->bDisSwDmaBcn = FALSE; - } - - PreGroupTimSet = (BOOLEAN)pMgntInfo->TimBuf[2]; - - if(ACTING_AS_AP(pAdapter) && PreGroupTimSet) // If the Group Tim bit in AP mode was set, we need to send the multicast packets after TBTT. - { - // Wake up at point D if we have group traffic to send - TimeToSleepInUs = (u4Byte)(BcnPeriodUs - timeSlotUs); - } - else - { - // Wake up at next point C before next TBTT. - TimeToSleepInUs = (u4Byte)((BcnPeriodUs - timeSlotUs) + (BcnPeriodUs - TBTT_POLLING_TIMER_DELAY_US)); - } - } - else if(SwBeaconType == BEACON_SEND_MANUAL) - { - // Wake up at point D at TBTT to update/send the next Beacon - TimeToSleepInUs = (u4Byte)(BcnPeriodUs - timeSlotUs + (nMultiplier * BcnPeriodUs)); - } - else - { - RT_TRACE(COMP_AP, DBG_WARNING, ("TbttPollingWorkItemCallback(): Wrong SwBeaconType(%d)! Return!\n", SwBeaconType)); - return; - } - } - //3 // 3rd case B-C: Do Nothing and reschedule the next timer. - else - { - if(SwBeaconType == BEACON_SEND_AUTO_SW) - { - // Wake up at point C - TimeToSleepInUs = (u4Byte)(BcnPeriodUs - TBTT_POLLING_TIMER_DELAY_US - timeSlotUs); - } - else if(SwBeaconType == BEACON_SEND_MANUAL) - { - // Wake up at point D at TBTT to update/send the next Beacon - TimeToSleepInUs = (u4Byte)(BcnPeriodUs - timeSlotUs + (nMultiplier * BcnPeriodUs)); - } - else - { - RT_TRACE(COMP_AP, DBG_WARNING, ("TbttPollingWorkItemCallback(): Wrong SwBeaconType(%d)! Return!\n", SwBeaconType)); - return; - } - } - - if(!(RT_DRIVER_HALT(pAdapter))) - { - PlatformSetTimer( - pAdapter, - &(pMgntInfo->SwBeaconTimer), - (TimeToSleepInUs/1000)); - - RT_TRACE(COMP_BEACON, DBG_LOUD, ("TbttPollingWorkItemCallback(): SetTimer(%d ms)! Return!\n", TimeToSleepInUs/sTU)); - } -} - -// -// Description: -// Enable network monitor mode, all rx packets will be received. -// 2007.08.06, by shien chang. -// -VOID -MgntEnableNetMonitorMode( - PADAPTER Adapter, - BOOLEAN bInitState - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - pMgntInfo->bNetMonitorMode = TRUE; - - if(Adapter->bHWInitReady) - Adapter->HalFunc.AllowAllDestAddrHandler(Adapter, TRUE, !bInitState); - - IPSDisable(Adapter,FALSE, IPS_DISABLE_PROXIMITY); - - PlatformEnableNetworkMonitorMode(Adapter); -} - - -// -// Description: -// Disable network network monitor mode, only packets destinated to -// us will be received. -// 2007.08.06, by shien chang. -// -VOID -MgntDisableNetMonitorMode( - PADAPTER Adapter, - BOOLEAN bInitState - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - pMgntInfo->bNetMonitorMode = FALSE; - - if(Adapter->bHWInitReady) - Adapter->HalFunc.AllowAllDestAddrHandler(Adapter, FALSE, !bInitState); - - IPSReturn(Adapter, IPS_DISABLE_PROXIMITY); - PlatformDisableNetworkMonitorMode(Adapter); -} - - -// -// Description: -// Allocate hash tables. -// By Bruce, 2008-02-25. -// -BOOLEAN -MgntAllocHashTables( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - RT_HASH_TABLE_HANDLE hTmp; - - - // Qos TStream - hTmp = RtAllocateHashTable( - pAdapter, - MAX_AP_TS_COUNT, // Capacity - sizeof(QOS_TSTREAM), // ValueSize - QOS_TSTREAM_KEY_SIZE, // KeySize - QosTsHash); // pfHash - pStaQos->hApTsTable = hTmp; - if(hTmp == NULL) - return FALSE; - - if(hTmp == NULL) - return FALSE; - return TRUE; -} - -// -// Description: -// Free hash tables allocated in MgntAllocHashTables(). -// -VOID -MgntFreeHashTables( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - if(NULL != pStaQos) - RtFreeHashTable(pStaQos->hApTsTable); -} - - -u1Byte -MgntQuery_TxRateExcludeCCKRates( - IN OCTET_STRING BSSBasicRateSet) -{ - u2Byte i; - u1Byte QueryRate = 0; - u1Byte BasicRate; - - // - // Find the lowest rate in the BSSBasicRateSet except CCK rates. - // - - for( i = 0; i < BSSBasicRateSet.Length; i++) - { - BasicRate = BSSBasicRateSet.Octet[i] & 0x7F; - RT_DISP(FDM, WA_IOT, ("MgntQuery_TxRateExcludeCCKRates(), BasicRate = 0x%x\n", BasicRate)); - if(!IS_CCK_RATE(BasicRate)) - { - if(QueryRate == 0) - { - QueryRate = BasicRate; - RT_DISP(FDM, WA_IOT, ("Find first BasicRate = 0x%x\n", QueryRate)); - } - else - { - if(BasicRate < QueryRate) - { - QueryRate = BasicRate; - RT_DISP(FDM, WA_IOT, ("Find small BasicRate = 0x%x\n", QueryRate)); - } - } - } - } - - if(QueryRate == 0) - { - QueryRate = MGN_6M; // 6M - RT_DISP(FDM, WA_IOT, ("No BasicRate found!!\n")); - } - RT_DISP(FDM, WA_IOT, ("Final QueryRate = 0x%x\n", QueryRate)); - return QueryRate; -} - -// -// Description: -// Allocate packet parser for advanced analyze. -// -BOOLEAN -MgntAllocatePacketParser( - IN PADAPTER Adapter - ) -{ - BOOLEAN bReturn; - - bReturn = GPAllocateParser(Adapter, - GP_VOWLAN_SIP, - "CCX4_CAC SIP parser", - GPAllocateParserVoWlanSIP, - GPParserGateVoWlanSIP, - GPParserActionVoWlanSIP, - TRUE); - - return bReturn; -} - -// -// Description: -// Free packet parser allocated at MgntAllocatePacketParser(). -// -VOID -MgntFreePacketParser( - IN PADAPTER Adapter - ) -{ - GPFreeParser(Adapter, - GP_VOWLAN_SIP, - GPFreeParserVoWlanSIP); -} - -// -// Description: -// Check this packet if Power Management bit is invoked. -// By Bruce, 2007-10-26. -// -BOOLEAN -MgntGetPwrMgntInfo( - PADAPTER Adapter, - PRT_TCB pTcb, - BOOLEAN bIncHead - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - pu1Byte pheader = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - - - // ======================================================== - // Set PwrMgnt bit according to the following condition (arrange by priority): - // (1) Not associate to AP: False - // (2) IBSS or AP mode: False (We do not enter PS in IBSS now) - // (3) PS-Poll frame: True - // (4) Management Frame: False - // (5) Control frame: False - // (6) NULL Data: According to the original packet setting - // (7) Security Handshake process - // (8) WMM Test Plan(dot11PowerSaveMode & APSD) Data frame: True - // (9) TDLS PU Sleep STA (same as WMM-PS): True - // (10) Normal data frame, don't care PS mode: False - // By Bruce, 2007-11-09. - // ======================================================= - - // (1) Not associate to AP - // (2) IBSS or AP mode - if(!pMgntInfo->mAssoc || pMgntInfo->mIbss || ACTING_AS_AP(Adapter)) - return FALSE; - - // (3) PS-Poll: True - if(IsCtrlPSpoll(pheader)) - return TRUE; - - // (4) Management Frame: False - // (5) Control frame: False - if( IsMgntFrame(pheader) || IsCtrlFrame(pheader)) - return FALSE; - - // (6)NULL Data: According to the TCB setting - if(IsMgntNullFrame(pheader) || IsMgntQosNull(pheader)) - { - return (GET_80211_HDR_PWR_MGNT(pheader))? TRUE : FALSE; - } - - // (7) Security Handshake process - if(pMgntInfo->SecurityInfo.SecLvl > RT_SEC_LVL_NONE && !SecIsTxKeyInstalled(Adapter, pMgntInfo->Bssid)) - return FALSE; - - // FW control LPS. - // Always return false becuase Fw will fill this bit by itself during PS mode after 8723A. - if(IS_FW_POWER_SAVE(pMgntInfo)) - return FALSE; - - // (8) WMM Test Plan(dot11PowerSaveMode & APSD) Data frame: True - if(IS_WIFI_POWER_SAVE(pMgntInfo) ) - { - return TRUE; - } - - // (9) TDLS PU Sleep STA - if(TDLS_GetPwrMgntInfo(Adapter, pTcb)) - { - pTcb->bSleepPkt = TRUE; - return TRUE; - } - - // (10) Normal data frame, don't care PS mode: False - return FALSE; -} - - -VOID -LedTimerCallback( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte bLedTxCntBack,bLedRxBack; - - if (pMgntInfo->mAssoc != TRUE && pMgntInfo->mIbss != TRUE) - { - return; - } - - bLedTxCntBack = Adapter->LedTxCnt ; - if (Adapter->LedTxCnt > 0) - { - Adapter->HalFunc.LedControlHandler( Adapter, LED_CTL_TX ); - Adapter->LedTxCnt = 0; - } - - bLedRxBack = Adapter->LedRxCnt; - if (Adapter->LedRxCnt > 0) - { - Adapter->HalFunc.LedControlHandler( Adapter, LED_CTL_RX ); - Adapter->LedRxCnt = 0; - } - -} - - -RT_STATUS -ChnlCommAllocateMemory( - PADAPTER pDefaultAdapter -) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - rtStatus = PlatformAllocateMemory(pDefaultAdapter, (void **)&pDefaultAdapter->pPortCommonInfo->pChnlCommInfo, sizeof(CHANNEL_COMMON_CONTEXT)); - if(rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - - return RT_STATUS_FAILURE; - } - - PlatformZeroMemory(pDefaultAdapter->pPortCommonInfo->pChnlCommInfo, sizeof(CHANNEL_COMMON_CONTEXT)); - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Allocate BatchIndicationInfo Memory: Size: %d\n", __FUNCTION__, sizeof(CHANNEL_COMMON_CONTEXT))); - - return RT_STATUS_SUCCESS; -} - - -VOID -ChnlCommFreeMemory( - PADAPTER pDefaultAdapter -) -{ - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Free pChnlCommInfo Memory: Size: %d\n", __FUNCTION__, sizeof(CHANNEL_COMMON_CONTEXT))); - PlatformFreeMemory(pDefaultAdapter->pPortCommonInfo->pChnlCommInfo, sizeof(CHANNEL_COMMON_CONTEXT)); -} - - -// Let each port (Adapter) have common context -RT_STATUS -PortCommonInfoAllocateMemoryWithCriticalInitialization( - PADAPTER pDefaultAdapter -) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - rtStatus = PlatformAllocateMemory(pDefaultAdapter, (void **)&pDefaultAdapter->pPortCommonInfo, sizeof(PORT_COMMON_INFO)); - if(rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - - return RT_STATUS_FAILURE; - } - else - { - PlatformZeroMemory(pDefaultAdapter->pPortCommonInfo, sizeof(PORT_COMMON_INFO)); - - pDefaultAdapter->pPortCommonInfo->pDefaultAdapter = pDefaultAdapter; - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Allocate PortCommonInfo Memory: Size: %d\n", __FUNCTION__, sizeof(PORT_COMMON_INFO))); - } - - rtStatus = ChnlCommAllocateMemory(pDefaultAdapter); - if(rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - PortCommonInfoFreeMemory(pDefaultAdapter); - - return RT_STATUS_FAILURE; - } - - // Initialize MultiPort Feature ------------- - MultiPortInitializeContext(pDefaultAdapter); - // ----------------------------------- - - - return RT_STATUS_SUCCESS; - -} - -VOID -PortCommonInfoFreeMemory( - PADAPTER pDefaultAdapter -) -{ - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Free PortCommonInfo Memory: Size: %d\n", __FUNCTION__, sizeof(PORT_COMMON_INFO))); - - ChnlCommFreeMemory(pDefaultAdapter); - PlatformFreeMemory(pDefaultAdapter->pPortCommonInfo, sizeof(PORT_COMMON_INFO)); -} - -// -// Description: Check whether WoWLAN capability is enabled. -// The function only returns that whether we need to indicate WoWLAN capabilities to NDIS. -// -// Return value: TRUE, FALSE -// -BOOLEAN -MgntIsWoWLANCapabilityEnable( - PADAPTER pAdapter -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - BOOLEAN bResult; - - // - // 2009.09.02. Modified by tynli. - // Add condition "Adapter->bUnloadDriverwhenS3S4" and "pPSC->WoWLANMode". - // - if(pAdapter->bUnloadDriverwhenS3S4) - { // If driver is unload when S3/S4, it cannot support WoWLAN. - bResult = FALSE; - } - else - { - if(pPSC->WoWLANMode) // Registry WoWLANMode=1~3 - bResult = TRUE; - else //WoWLANMode=0 - bResult = FALSE; - } - -// RT_TRACE(COMP_INIT, DBG_TRACE, ("MgntIsWoWLANCapabilityEnable(): bUnloadDriverwhenS3S4 = %d, WoWLANMode = %d\n", -// pAdapter->bUnloadDriverwhenS3S4, pPSC->WoWLANMode)); - - return bResult; -} - -// -// Description: The function returns the result that if we allow the device to wake up host by wake event. -// Enable/disable WoWLAN Hw related actions will be controlled by the function -// -BOOLEAN -MgntIsSupportRemoteWakeUp( - PADAPTER pAdapter -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - BOOLEAN bResult; - - if(pPSC->bFakeWoWLAN || !(MgntIsWoWLANCapabilityEnable(pAdapter)) || !pPSC->bSupportWakeUp) - bResult = FALSE; - else - bResult = TRUE; - - return bResult; -} - -#if(AUTO_CHNL_SEL_NHM == 1) -// -// Description: -// NHM measurement for Auto channel selection mechanism. -// -// 2014.05.15, created by Roger. -// -VOID -MgntAutoChnlSelWorkitemCallback( - IN PVOID Context - ) -{ - - PADAPTER Adapter = (PADAPTER)Context; - PMGNT_INFO pMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); - u1Byte AutoChnlSelOp = 1; - - if(!IS_AUTO_CHNL_SUPPORT(Adapter)){ - RT_TRACE(COMP_P2P, DBG_TRACE, ("[ACS] MgntAutoChnlSelWorkitemCallback(): Do not support ACS function, so return!!\n")); - return; - } - - // - // To check another sync control flag which has already been assigned, 2014.07.31. - // - while(TRUE){ - - PlatformAcquireSpinLock(Adapter, RT_ACS_SPINLOCK); - if(!IS_AUTO_CHNL_IN_PROGRESS(Adapter)){ - RT_TRACE(COMP_P2P, DBG_WARNING, ("[ACS] MgntAutoChnlSelWorkitemCallback(): Waiting for the control flag which has already been assigned in another thread!!\n")); - PlatformReleaseSpinLock(Adapter, RT_ACS_SPINLOCK); - delay_ms(1); - } - else{ - PlatformReleaseSpinLock(Adapter, RT_ACS_SPINLOCK); - break; - } - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("---> [ACS] MgntAutoChnlSelWorkitemCallback(): OperationChnl(%d)\n", RT_GetChannelNumber(GetDefaultAdapter(Adapter)))); - - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AUTO_CHNL_SEL, (pu1Byte)&AutoChnlSelOp); - - SET_AUTO_CHNL_STATE(Adapter, ACS_AFTER_NHM);// Calculation is done - SET_AUTO_CHNL_PROGRESS(Adapter, FALSE); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<--- [ACS] MgntAutoChnlSelWorkitemCallback(): AutoChnlSelCalInProgress(%d)\n", pMgntInfo->AutoChnlSel.AutoChnlSelCalInProgress)); -} -#endif - diff --git a/network/wlan/WDI/COMMON/MgntGen.h b/network/wlan/WDI/COMMON/MgntGen.h deleted file mode 100644 index ae469efb..00000000 --- a/network/wlan/WDI/COMMON/MgntGen.h +++ /dev/null @@ -1,497 +0,0 @@ -#ifndef __INC_MGNTGEN_H -#define __INC_MGNTGEN_H - - -/*--------------------------Define -------------------------------------------*/ - -typedef enum _MGN_RATE_{ - MGN_1M = 0x02, - MGN_2M = 0x04, - MGN_5_5M = 0x0B, - MGN_6M = 0x0C, - MGN_9M = 0x12, - MGN_11M = 0x16, - MGN_12M = 0x18, - MGN_18M = 0x24, - MGN_24M = 0x30, - MGN_36M = 0x48, - MGN_48M = 0x60, - MGN_54M = 0x6C, - MGN_MCS32 = 0x7F, - MGN_MCS0 = 0x80, - MGN_MCS1, - MGN_MCS2, - MGN_MCS3, - MGN_MCS4, - MGN_MCS5, - MGN_MCS6, - MGN_MCS7 = 0x87, - MGN_MCS8, - MGN_MCS9, - MGN_MCS10, - MGN_MCS11, - MGN_MCS12, - MGN_MCS13, - MGN_MCS14, - MGN_MCS15, - MGN_MCS16 = 0x90, - MGN_MCS17, - MGN_MCS18, - MGN_MCS19, - MGN_MCS20, - MGN_MCS21, - MGN_MCS22, - MGN_MCS23, - MGN_MCS24 = 0x98, - MGN_MCS25, - MGN_MCS26, - MGN_MCS27, - MGN_MCS28, - MGN_MCS29, - MGN_MCS30, - MGN_MCS31, - MGN_VHT1SS_MCS0 = 0xa0, - MGN_VHT1SS_MCS1, - MGN_VHT1SS_MCS2, - MGN_VHT1SS_MCS3, - MGN_VHT1SS_MCS4, - MGN_VHT1SS_MCS5, - MGN_VHT1SS_MCS6, - MGN_VHT1SS_MCS7, - MGN_VHT1SS_MCS8, - MGN_VHT1SS_MCS9, - MGN_VHT2SS_MCS0 = 0xaa, - MGN_VHT2SS_MCS1 = 0xab, - MGN_VHT2SS_MCS2, - MGN_VHT2SS_MCS3, - MGN_VHT2SS_MCS4, - MGN_VHT2SS_MCS5 = 0xaf, - MGN_VHT2SS_MCS6 = 0xb0, - MGN_VHT2SS_MCS7, - MGN_VHT2SS_MCS8, - MGN_VHT2SS_MCS9 = 0xb3, - MGN_VHT3SS_MCS0 = 0xb4, - MGN_VHT3SS_MCS1, - MGN_VHT3SS_MCS2, - MGN_VHT3SS_MCS3, - MGN_VHT3SS_MCS4, - MGN_VHT3SS_MCS5, - MGN_VHT3SS_MCS6, - MGN_VHT3SS_MCS7 = 0xbb, - MGN_VHT3SS_MCS8 = 0xbc, - MGN_VHT3SS_MCS9 = 0xbd, - MGN_VHT4SS_MCS0 = 0xbe, - MGN_VHT4SS_MCS1, - MGN_VHT4SS_MCS2, - MGN_VHT4SS_MCS3, - MGN_VHT4SS_MCS4, - MGN_VHT4SS_MCS5, - MGN_VHT4SS_MCS6, - MGN_VHT4SS_MCS7, - MGN_VHT4SS_MCS8, - MGN_VHT4SS_MCS9 = 0xc7, - MGN_UNKNOWN -}MGN_RATE_E, *PMGN_RATE_E; - - -#define IS_HT_RATE(_rate) (_rate >= MGN_MCS0 && _rate <= MGN_MCS31) -#define IS_VHT_RATE(_rate) (_rate >= MGN_VHT1SS_MCS0 && _rate <= MGN_VHT4SS_MCS9) -#define IS_CCK_RATE(_rate) (MGN_1M == _rate || _rate == MGN_2M || _rate == MGN_5_5M || _rate == MGN_11M ) -#define IS_OFDM_RATE(_rate) (MGN_6M <= _rate && _rate <= MGN_54M && _rate != MGN_11M) - - - -#define GEN_TEMP_BUFFER_NUM 16 -#define GEN_TEMP_BUFFER_SIZE 4096 - -/*--------------------------Define MACRO--------------------------------------*/ - -#define IsMgntFrame(pdu) ( ((EF1Byte(pdu[0]) & 0x0C)==0x00) ? TRUE : FALSE ) -#define IsDataFrame(pdu) ( ((EF1Byte(pdu[0]) & 0x0C)==0x08) ? TRUE : FALSE ) -#define IsCtrlFrame(pdu) ( ((EF1Byte(pdu[0]) & 0x0C)==0x04) ? TRUE : FALSE ) -#define IsRetryFrame(pdu) ( ((EF1Byte(pdu[1]) & 0x08)==0x08) ? TRUE : FALSE )//add by ylb 20130808 - -#define IsMgntAsocReq(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Asoc_Req ) ? TRUE : FALSE) -#define IsMgntAsocRsp(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Asoc_Rsp ) ? TRUE : FALSE) -#define IsMgntReAsocReq(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Reasoc_Req ) ? TRUE : FALSE) -#define IsMgntReAsocRsp(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Reasoc_Rsp ) ? TRUE : FALSE) -#define IsMgntProbeReq(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Probe_Req ) ? TRUE : FALSE) -#define IsMgntProbeRsp(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Probe_Rsp ) ? TRUE : FALSE) -#define IsMgntBeacon(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Beacon ) ? TRUE : FALSE) -#define IsMgntAtim(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Atim ) ? TRUE : FALSE) -#define IsMgntDisasoc(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Disasoc ) ? TRUE : FALSE) -#define IsMgntAuth(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Auth ) ? TRUE : FALSE) -#define IsMgntDeauth(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Deauth ) ? TRUE : FALSE) -#define IsMgntAction(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Action ) ? TRUE : FALSE) -#define IsMgntActionNoAck(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Action_No_Ack ) ? TRUE : FALSE) -#define IsMgntCfend(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Cfend ) ? TRUE : FALSE) -#define IsMgntCfendAck(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Cfend_Ack ) ? TRUE : FALSE) -#define IsMgntData(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Data ) ? TRUE : FALSE) -#define IsMgntDataAck(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Data_Ack ) ? TRUE : FALSE) -#define IsMgntDataPoll(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Data_Poll ) ? TRUE : FALSE) -#define IsMgntDataPoll_Ack(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Data_Poll_Ack ) ? TRUE : FALSE) -#define IsMgntNullFrame(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Null_Frame ) ? TRUE : FALSE) -#define IsMgntCfack(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Cfack ) ? TRUE : FALSE) -#define IsMgntCfpoll(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Cfpoll ) ? TRUE : FALSE) -#define IsMgntCfpollAck(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Cfpoll_Ack ) ? TRUE : FALSE) -#define IsMgntQosData(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QosData ) ? TRUE : FALSE) -#define IsMgntQData_Ack(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QData_Ack ) ? TRUE : FALSE) -#define IsMgntQData_Poll(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QData_Poll ) ? TRUE : FALSE) -#define IsMgntQData_Poll_Ack(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QData_Poll_Ack ) ? TRUE : FALSE) -#define IsMgntQosNull(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QosNull ) ? TRUE : FALSE) -#define IsMgntQosCfpoll(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QosCfpoll ) ? TRUE : FALSE) -#define IsMgntQosCfpoll_Ack(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_QosCfpoll_Ack ) ? TRUE : FALSE) - -#define IsCtrlPSpoll(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_PS_poll ) ? TRUE : FALSE) -#define IsCtrlAck(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Ack ) ? TRUE : FALSE) -#define IsCtrlNDPA(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_NDPA) ? TRUE : FALSE) -#define IsCtrlBFReportPoll(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_Beamforming_Report_Poll) ? TRUE : FALSE) -#define IsCtrlBlockAckReq(pdu) ( ((EF1Byte(pdu[0]) & 0xFC) == Type_BlockAckReq) ? TRUE : FALSE) - -#define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(EF1Byte(pdu[0]) & FC_QOS_BIT)) ) // Added by Joseph, 2005-12-16. -#define IsQoSDataFrame(pdu) (IsDataFrame(pdu) && (EF1Byte(pdu[0]) & FC_QOS_BIT) ) -#define IsNoDataFrame(pdu) (IsDataFrame(pdu) && (EF1Byte(pdu[0]) & FC_NO_DATA_BIT) ) // Added by Annie, 2006-01-06. - -typedef enum _AUTH_STATUS_T{ - opensystem_auth = 0x00, - sharedkey_auth = 0x01, - ft_auth = 0x2, - not_auth = 0x03, -}AUTH_STATUS_T, *PAUTH_STATUS_T; - - -typedef enum _ASOC_STATUS_T{ - disassoc = 0x00, - assoc = 0x01, -}ASOC_STATUS_T, *PASOC_STATUS_T; - -BOOLEAN -IsMgntNDPA( - pu1Byte pdu -); - - -BOOLEAN -MgntIsRateSupport( - u1Byte nRate, - OCTET_STRING osRateSet - ); - -VOID -MgntRefreshSuppRateSet( - PADAPTER Adapter - ); - -RT_STATUS -MgntAllocMemory( - IN PADAPTER pAdapter - ); - -VOID -MgntFreeMemory( - IN PADAPTER pAdapter - ); - -VOID -ResetMgntVariables( - PADAPTER Adapter - ); - -VOID -InitializeMgntVariables( - PADAPTER Adapter - ); - - -VOID -DeInitializeMgntVariables( - PADAPTER Adapter - ); -VOID -MgntFreeAllWorkItem( - PADAPTER Adapter - ); - -VOID -CancelWatchDogTimer( - PADAPTER Adapter - ); - -VOID -MgntCancelAllTimer( - PADAPTER Adapter - ); - -VOID -MgntReleaseAllTimer( - PADAPTER Adapter - ); - - -BOOLEAN -MgntGetFWBuffer( - PADAPTER Adapter, - PRT_TCB *ppTcb, - PRT_TX_LOCAL_BUFFER *ppBuf - ); - -BOOLEAN -MgntGetBuffer( - PADAPTER Adapter, - PRT_TCB *ppTcb, - PRT_TX_LOCAL_BUFFER *ppBuf - ); - -VOID -MgntSendPacket( - PADAPTER Adapter, - PRT_TCB pTcb, - PRT_TX_LOCAL_BUFFER pBuf, - u4Byte Length, - u1Byte QueueIndex, - u2Byte DataRate - ); - -BOOLEAN -MgntFilterReceivedPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -BOOLEAN -MgntCheckForwarding( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -BOOLEAN -MgntFilterTransmitPacket( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -RT_STATUS -MgntAllocateBeaconBuf( - PADAPTER Adapter - ); - -VOID -MgntFreeBeaconBuf( - PADAPTER Adapter - ); - -BOOLEAN -MgntIsMacAddrGroup( - pu1Byte addr - ); - -VOID -MgntSsInquiry( - PADAPTER Adapter, - pu1Byte pSaddr, - PAUTH_STATUS_T state_auth, - PASOC_STATUS_T state_asoc - ); - -BOOLEAN -MgntGetEncryptionInfo( - PADAPTER Adapter, - PRT_TCB pTcb, - PSTA_ENC_INFO_T pEncInfo, - BOOLEAN bIncHead -); - -u1Byte -MgntQuery_MgntFrameTxRate( - PADAPTER Adapter, - pu1Byte dstaddr - ); - -u2Byte -MgntQuery_FrameTxRate( - PADAPTER Adapter, - PRT_TCB pTcb - ); - - -u1Byte -MgntQuery_NssTxRate( - IN u2Byte Rate - ); - - -u2Byte -MgntQuery_SequenceNumber( - PADAPTER Adapter, - pu1Byte pFrame, - BOOLEAN bBTTxPacket, - pu1Byte pDestAddr, - u1Byte TID -); - -BOOLEAN -MgntIsShortPreambleMode( - PADAPTER Adapter, - PRT_TCB pTcb -); - -BOOLEAN -MgntIsMulticastFrame( - PADAPTER Adapter, - PRT_TCB pTcb -); - -BOOLEAN -MgntIsBroadcastFrame( - PADAPTER Adapter, - PRT_TCB pTcb -); - -BOOLEAN -MgntIsDataOnlyFrame( - PADAPTER Adapter, - PRT_TCB pTcb -); - - -BOOLEAN -MgntIsRateValidForWirelessMode( - u1Byte rate, - u1Byte wirelessmode -); - - -u4Byte -MgntGetChannelFrequency( - u4Byte channel -); - -VOID -MgntUpdateAsocInfo( - PADAPTER Adapter, - UPDATE_ASOC_INFO_ACTION Action, - pu1Byte Content, - u4Byte ContentLength -); - -BOOLEAN -MgntIsInExcludedMACList( - PADAPTER Adapter, - pu1Byte pAddr -); - -VOID -MgntInitSsidsToScan( - PADAPTER Adapter -); - -BOOLEAN -MgntAddSsidsToScan( - PADAPTER Adapter, - OCTET_STRING Ssid -); - -BOOLEAN -MgntRemoveSsidsToScan( - PADAPTER Adapter, - OCTET_STRING Ssid -); - -VOID -MgntClearSsidsToScan( - PADAPTER Adapter -); - -VOID -MgntEnableNetMonitorMode( - PADAPTER Adapter, - BOOLEAN bInitState -); - -VOID -MgntDisableNetMonitorMode( - PADAPTER Adapter, - BOOLEAN bInitState -); - -BOOLEAN -MgntAllocHashTables( - IN PADAPTER pAdapter - ); - -VOID -MgntFreeHashTables( - IN PADAPTER pAdapter - ); - -u1Byte -MgntQuery_TxRateExcludeCCKRates( - IN OCTET_STRING BSSBasicRateSet - ); - -BOOLEAN -MgntAllocatePacketParser( - IN PADAPTER Adapter - ); - -VOID -MgntFreePacketParser( - IN PADAPTER Adapter - ); - -BOOLEAN -MgntGetPwrMgntInfo( - PADAPTER Adapter, - PRT_TCB pTcb, - BOOLEAN bIncHead - ); - -VOID -LedTimerCallback( - PRT_TIMER pTimer - ); - - -PRT_GEN_TEMP_BUFFER -GetGenTempBuffer( - IN PADAPTER Adapter, - IN u4Byte Length - ); - -VOID -ReturnGenTempBuffer( - IN PADAPTER Adapter, - IN PRT_GEN_TEMP_BUFFER pGenBuffer - ); - - -// Let each port (Adapter) have common context -RT_STATUS -PortCommonInfoAllocateMemoryWithCriticalInitialization( - PADAPTER pDefaultAdapter -); - -VOID -PortCommonInfoFreeMemory( - PADAPTER pDefaultAdapter -); - -BOOLEAN -MgntIsWoWLANCapabilityEnable( - PADAPTER pAdapter - ); - -BOOLEAN -MgntIsSupportRemoteWakeUp( - PADAPTER pAdapter - ); - - -#if(AUTO_CHNL_SEL_NHM == 1) -VOID -MgntAutoChnlSelWorkitemCallback( - IN PVOID Context - ); -#endif - -#endif // #ifndef __INC_MGNTGEN_H diff --git a/network/wlan/WDI/COMMON/MgntLink.c b/network/wlan/WDI/COMMON/MgntLink.c deleted file mode 100644 index a79a4684..00000000 --- a/network/wlan/WDI/COMMON/MgntLink.c +++ /dev/null @@ -1,11782 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntLink.tmh" -#endif - -BOOLEAN bDebugFixBssid=FALSE; -u1Byte debug_fixed_bssid[6]={0}; -/*------------------------ Local parameter------------------------------------*/ -u4Byte DSSS_Freq_Channel[]={ - 0, - 2412, - 2417, - 2422, - 2427, - 2432, - 2437, - 2442, - 2447, - 2452, - 2457, - 2462, - 2467, - 2472, - 2484, -}; - -// -// MAC address of AP for IOT -// -static u1Byte DLINK_ATHEROS_DIR635_1[3] = {0x00, 0x15, 0xe9}; -static u1Byte DLINK_ATHEROS_DIR635_2[3] = {0x00, 0x17, 0x9A}; -#if 1//(HARDWARE_TYPE_IS_RTL8192D == 1) -//vivi add for dlink 655, 20101125 -static u1Byte DLINK_ATHEROS_DIR655_1[3] = {0x00, 0x18, 0xe7}; -static u1Byte DLINK_ATHEROS_DIR655_2[3] = {0x00, 0x19, 0x5B}; -static u1Byte DLINK_ATHEROS_DIR655_3[3] = {0x00, 0x1B, 0x11}; -static u1Byte DLINK_ATHEROS_DIR655_4[3] = {0x00, 0x1C, 0xF0}; -static u1Byte DLINK_ATHEROS_DIR655_5[3] = {0x00, 0x1E, 0x58}; -static u1Byte DLINK_ATHEROS_DIR655_6[3] = {0x00, 0x21, 0x91}; -static u1Byte DLINK_ATHEROS_DIR655_7[3] = {0x00, 0x22, 0xB0}; -//static u1Byte DLINK_ATHEROS_DIR655_8[3] = {0x00, 0x24, 0x01};//dir855 -#endif - -static u1Byte DLINK_RALINK_DIR300[3] = {0xFC,0x75,0x16}; - -/* -static u1Byte LG_4G_LTE_HOT_SPOT_1[3] = {0x00, 0xAA, 0x70}; -static u1Byte LG_4G_LTE_HOT_SPOT_2[3] = {0x00, 0x1E, 0x75}; -static u1Byte LG_4G_LTE_HOT_SPOT_3[3] = {0x00, 0x1F, 0x6B}; -static u1Byte LG_4G_LTE_HOT_SPOT_4[3] = {0x00, 0x1F, 0xE3}; -static u1Byte LG_4G_LTE_HOT_SPOT_5[3] = {0x00, 0x21, 0xFB}; -static u1Byte LG_4G_LTE_HOT_SPOT_6[3] = {0x00, 0x22, 0xA9}; -static u1Byte LG_4G_LTE_HOT_SPOT_7[3] = {0x00, 0x24, 0x83}; -static u1Byte LG_4G_LTE_HOT_SPOT_8[3] = {0x00, 0x25, 0xE5}; -static u1Byte LG_4G_LTE_HOT_SPOT_9[3] = {0x00, 0x26, 0xE2}; -static u1Byte LG_4G_LTE_HOT_SPOT_10[3] = {0x00, 0xE0, 0x91}; -static u1Byte LG_4G_LTE_HOT_SPOT_11[3] = {0x10, 0xF9, 0x6F}; -static u1Byte LG_4G_LTE_HOT_SPOT_12[3] = {0x20, 0x21, 0xA5}; -static u1Byte LG_4G_LTE_HOT_SPOT_13[3] = {0x3C, 0xBD, 0xD8}; -static u1Byte LG_4G_LTE_HOT_SPOT_14[3] = {0x6C, 0xD6, 0x8A}; -static u1Byte LG_4G_LTE_HOT_SPOT_15[3] = {0x70, 0x05, 0x14}; -static u1Byte LG_4G_LTE_HOT_SPOT_16[3] = {0x74, 0xA7, 0x22}; -static u1Byte LG_4G_LTE_HOT_SPOT_17[3] = {0xA8, 0x16, 0xB2}; -static u1Byte LG_4G_LTE_HOT_SPOT_18[3] = {0xA8, 0x92, 0x2C}; -static u1Byte LG_4G_LTE_HOT_SPOT_19[3] = {0xC0, 0x41, 0xF6}; -static u1Byte LG_4G_LTE_HOT_SPOT_20[3] = {0xE8, 0x92, 0xA4}; -static u1Byte LG_4G_LTE_HOT_SPOT_21[3] = {0xF0, 0x1C, 0x13}; -static u1Byte LG_4G_LTE_HOT_SPOT_22[3] = {0xF8, 0x0C, 0xF3}; -*/ - -// 2011/11/03 MH Add for Netgear Germany case. We can not combine extention and primary channel. -static u1Byte NETGEAR_WNDAP3200_1[3] = {0xE0, 0x91, 0xF5}; -// 2011/11/03 MH Add for Netgear Germany case. We can not combine extention and primary channel. -static u1Byte NETGEAR_WNDAP4500_1[3] = {0xC0, 0x00, 0x12}; -// 2012/02/09 by wl.For Netgear3500v1 92d high power issue. -static u1Byte NETGEAR_WNDAP3500_1[3] = {0x00,0x24,0xb2}; -// 2012/06/25 Zhiyuan Add for Linksys E4200 V1 -//static u1Byte Linksys_E4200_1[3] = {0x58,0x6D,0x8F}; - -static u1Byte TPLINK_AC1750[3] = {0xE8,0x94,0xF6}; -static u1Byte CMW500[6] = {0x00,0x01,0x02, 0x03, 0x04, 05}; - -u4Byte RangePerLevel = 0; - -/*------------------------ Funtion Declaration-------------------------------------*/ -// The following function are called only in MgntLink.c -VOID -RecognizePeer( - PADAPTER Adapter, - POCTET_STRING pInmmpdu, - PRT_WLAN_BSS bssDesc); - - -/*------------------------ End of Funtion Declaration------------------------------*/ -RT_WLAN_BSS *BssDescDupSource( - PADAPTER Adapter, -// OCTET_STRING mmpdu - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte i; - OCTET_STRING bssIdBeacon,SsidBeacon; - OCTET_STRING mmpdu; - - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - - bssIdBeacon.Octet = Frame_Addr3(mmpdu); - bssIdBeacon.Length = ETHERNET_ADDRESS_LENGTH; - - SsidBeacon = PacketGetElement(mmpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - for(i=0; iNumBssDesc; i++) - { - if( PlatformCompareMemory(bssIdBeacon.Octet, pMgntInfo->bssDesc[i].bdBssIdBuf, 6) == 0 ) - { -// SsidBeacon = PacketGetElement(mmpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - // If one of them are hidden, then return dup !! - if(!IsHiddenSsid(SsidBeacon) && !BeHiddenSsid(pMgntInfo->bssDesc[i].bdSsIdBuf, pMgntInfo->bssDesc[i].bdSsIdLen)) - { // None of them is hidden AP, check if they have the same SSID - if( ! CompareSSID(pMgntInfo->bssDesc[i].bdSsIdBuf, pMgntInfo->bssDesc[i].bdSsIdLen, SsidBeacon.Octet, SsidBeacon.Length) ) - continue; - } - return &pMgntInfo->bssDesc[i]; - } - } - - return NULL; -} - -// -//Description: -// Check and find if the input BSS desc is matched with one of the BSS list in MgntInfo by -// comparison of the SSID and BSSID. -// Arguments: -// Adapter - -// NIC adapter context pointer. -// pRtBSS - -// The input BSS desc is examined to find which is the matched one in the scan list. -// Return: -// If one of the BSS desc in the scan list is matched with pRtBSS, then return it. -// Or return NULL. -// By Bruce, 2008-05-26. -// -PRT_WLAN_BSS -BssDescDupByDesc( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pRtBSS - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte i; - - for(i = 0; i < pMgntInfo->NumBssDesc; i ++) - { - if( PlatformCompareMemory(pRtBSS->bdBssIdBuf, pMgntInfo->bssDesc[i].bdBssIdBuf, ETHERNET_ADDRESS_LENGTH) == 0 ) - { - - // 1. Check security !! - // All Chiper need the same !! - if( pRtBSS->PairwiseChiper != pMgntInfo->bssDesc[i].PairwiseChiper) - { - // Suport differ security !! - if( CompareSSID( pRtBSS->bdSsIdBuf , pRtBSS->bdSsIdLen , pMgntInfo->bssDesc[i].bdSsIdBuf , pMgntInfo->bssDesc[i].bdSsIdLen ) ) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("BSSID&SSID the same replace security\n")); - } - else - continue; - } - - // 2. Check SSID !! - // Note : - // 1. one of BssDes is hidden - // 2. security is the same - // 3. BSSID is the same - // Then they are the same AP !! - if( !BeHiddenSsid( pRtBSS->bdSsIdBuf , pRtBSS->bdSsIdLen ) && !BeHiddenSsid( pMgntInfo->bssDesc[i].bdSsIdBuf , pMgntInfo->bssDesc[i].bdSsIdLen )) - { - if( !CompareSSID( pRtBSS->bdSsIdBuf , pRtBSS->bdSsIdLen , pMgntInfo->bssDesc[i].bdSsIdBuf , pMgntInfo->bssDesc[i].bdSsIdLen ) ) - { - // SSID is differ !! - continue; - } - } - - return &pMgntInfo->bssDesc[i]; - } - } - return NULL; -} - -// -//Description: -// Find the BSS descriptor by the BSSID. -// Arguments: -// [in] Adapter - -// NIC adapter context pointer. -// [in] pBssid - -// The input BSSID for BSS descriptor searching. -// Return: -// If one of the BSS desc in the scan list is matched with pBssid, then return it. -// Or return NULL. -// By Bruce, 2008-05-26. -// -PRT_WLAN_BSS -BssDescDupByBssid( - IN PADAPTER Adapter, - IN pu1Byte pBssid - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte i; - - for(i = 0; i < pMgntInfo->NumBssDesc; i ++) - { - if( PlatformCompareMemory(pBssid, pMgntInfo->bssDesc[i].bdBssIdBuf, ETHERNET_ADDRESS_LENGTH) == 0 ) - { - return &pMgntInfo->bssDesc[i]; - } - } - return NULL; -} - -PRT_WLAN_RSSI -BssDescDupByBssid4Rssi( - IN PADAPTER Adapter, - IN pu1Byte pBssid - ) -{ - u2Byte i; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - for(i = 0; i < pMgntInfo->NumBssDesc4Rssi; i ++) - { - if( PlatformCompareMemory(pBssid, pMgntInfo->bssDesc4Rssi[i].bdBssIdBuf, ETHERNET_ADDRESS_LENGTH) == 0 ) - { - return &pMgntInfo->bssDesc4Rssi[i]; - } - } - - return NULL; -} - -// -// Description: -// Check QBss Load of the BSS setting if it is sufficient to join especially for -// CCX CAC roaming. -// Argument: -// Adapter - -// NIC adapter context pointer. -// pRtBss - -// The BSS to be checked if it meets the specified settings. -// Return: -// TRUE if the BSS has sufficient utilization, or return FALSE. -// By Bruce, 2009-02-12. -// -BOOLEAN -CheckQBssLoad( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pRtBss - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PQOS_TSTREAM pTs = NULL; - - // - // Determine the insufficient AAC in QBSS Load. - // - if (CCX_CAC_IsVoiceTsExist(Adapter)) - { - if(pRtBss->BssQos.bQBssLoadValid) - { - pTs = QosGetTs(Adapter, 0, pMgntInfo->Bssid, Adapter->CurrentAddress); - if (pTs && pTs->bUsed) - { - u2Byte aac = GET_QBSS_LOAD_AVAILABLE_CAPACITY(pRtBss->BssQos.QBssLoad); - u2Byte mtime = GET_TSPEC_MEDIUM_TIME(pTs->TSpec); - RT_PRINT_ADDR(COMP_QOS, DBG_LOUD,"CheckQBssLoad(): ", pRtBss->bdBssIdBuf); - RT_TRACE(COMP_QOS, DBG_LOUD, ("CheckQBssLoad(): AAC = %d, MediumTime = %d\n", aac, mtime)); - if ( aac < mtime ) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("CheckQBssLoad(): insufficient bandwith, skip this bss\n ")); - return FALSE; - } - } - } - } - return TRUE; -} - -// -// Description: -// Check BSS setting such as security ... -// 2006.11.15, by shien chang. -// Move from "N6C_OidSet.c to here for the reference of SelectNetworkBySSID(). -// Argument: -// Adapter - -// NIC adapter context pointer. -// pRtBss - -// The BSS to be checked if it meets the specified settings. -// Return: -// TRUE if the BSS matches driver's setting, or return FALSE. -// Moved by Bruce, 2009-02-12. -// -BOOLEAN -CheckBSSSetting( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pRtBss - ) -{ - PRT_SECURITY_T pSecurityInfo = &(Adapter->MgntInfo.SecurityInfo); - RT_ENC_ALG PairwiseEncAlgo = pSecurityInfo->PairwiseEncAlgorithm; - BOOLEAN bPassCheck = TRUE; -#if (WPS_SUPPORT == 1) - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - - pMgntInfo->bWPSProcess = FALSE; - - if(pSimpleConfig->bEnabled) - { - RT_TRACE(COMP_MLME, DBG_TRACE, ("CheckBSSSetting(): skip security check when wps in progress.\n")); - return bPassCheck; - } -#endif - do - { - if( (pRtBss->bdCap & cPrivacy) ) - { - if(PairwiseEncAlgo == RT_ENC_ALG_NO_CIPHER ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("CheckBSSSetting(): BSS Cap shows privacy, but PairwiseEncAlgo is RT_ENC_ALG_NO_CIPHER\n")); - bPassCheck = FALSE; - break; - } -#if (WPS_SUPPORT == 1) - else if ( (pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) && - (pRtBss->PairwiseChiper > NONE_WPA) && - (pSimpleConfig->bEnabled == FALSE)) - { - pMgntInfo->bWPSProcess = TRUE; - } -#endif - } - else - { -#if (WPS_SUPPORT == 1) - if ( (pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) && - (pRtBss->PairwiseChiper == NONE_WPA) ) - { - pMgntInfo->bWPSProcess = TRUE; - } -#endif - if( PairwiseEncAlgo != RT_ENC_ALG_NO_CIPHER ) - { - // - // Note that this is for Win7 NDISTest ExcludeUnencrypted_ext preview 3, - // 2008.11.24, haich. - // - if(Adapter->MgntInfo.bExcludeUnencrypted) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("CheckBSSSetting(): BSS Cap shows no privacy, but PairwiseEncAlgo is %d\n", PairwiseEncAlgo)); - bPassCheck = FALSE; - break; - } - } - } - - // - // Check encryption setting. - // - if(pSecurityInfo->SecLvl > RT_SEC_LVL_NONE) - { - // - // The CCKM may be included in WPA2 or WPA IE, we should modify the SEC Level according - // to the auth mode from the BSS. By Bruce, 2011-02-09. - // It is not a good solution to set the security level here. - // - if(pSecurityInfo->AuthMode == RT_802_11AuthModeCCKM) - { - if(pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP) - { - // Check BSS support WPA2 TKIP - if(pRtBss->PairwiseChiper& WPA2_AES) - { - bPassCheck = TRUE; - break; - } - else if(pRtBss->PairwiseChiper& WPA_AES) - { - bPassCheck = TRUE; - break; - } - else - { - RT_PRINT_STR(COMP_MLME | COMP_SEC, DBG_LOUD, " RT_802_11AuthModeCCKM and PairwiseEnc = RT_ENC_ALG_AESCCMP but this BSS doesn't has AES for SSID = ", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - bPassCheck = FALSE; - break; - } - } - else if(pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) - { - // Check BSS support WPA2 TKIP - if(pRtBss->PairwiseChiper& WPA2_TKIP) - { - bPassCheck = TRUE; - break; - } - else if(pRtBss->PairwiseChiper& WPA_TKIP) - { - bPassCheck = TRUE; - break; - } - else - { - RT_PRINT_STR(COMP_MLME | COMP_SEC, DBG_LOUD, " RT_802_11AuthModeCCKM and PairwiseEnc = RT_ENC_ALG_TKIP but this BSS doesn't has TKIP for SSID = ", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - bPassCheck = FALSE; - break; - } - } - else - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("We don't support this encryption (0x%08X) for RT_802_11AuthModeCCKM!!!\n", pSecurityInfo->PairwiseEncAlgorithm)); - bPassCheck = FALSE; - break; - } - } - else - { - switch( pSecurityInfo->SecLvl ) - { - case RT_SEC_LVL_WPA : - if( pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP ) - { - // Check BSS support WPA TKIP - if( !(pRtBss->PairwiseChiper & WPA_TKIP) ) - { - RT_PRINT_STR(COMP_MLME | COMP_SEC, DBG_LOUD, " PairwiseEnc = WPA_TKIP but this BSS doesn't has TKIP for SSID = ", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - bPassCheck = FALSE; - break; - } - } - else if( pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - { - // Check BSS support WPA TKIP - if( !(pRtBss->PairwiseChiper & WPA_AES) ) - { - RT_PRINT_STR(COMP_MLME | COMP_SEC, DBG_LOUD, " PairwiseEnc = WPA_AES but this BSS doesn't has AES for SSID = ", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - bPassCheck = FALSE; - break; - } - } - break; - case RT_SEC_LVL_WPA2 : - if( pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP ) - { - // Check BSS support WPA2 TKIP - if( !(pRtBss->PairwiseChiper & WPA2_TKIP) ) - { - RT_PRINT_STR(COMP_MLME | COMP_SEC, DBG_LOUD, " PairwiseEnc = WPA2_TKIP but this BSS doesn't has TKIP for SSID = ", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - bPassCheck = FALSE; - break; - } - } - else if( pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - { - // Check BSS support WPA2 TKIP - if( !(pRtBss->PairwiseChiper& WPA2_AES) ) - { - RT_PRINT_STR(COMP_MLME | COMP_SEC, DBG_LOUD, " PairwiseEnc = WPA2_AES but this BSS doesn't has AES for SSID = ", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - bPassCheck = FALSE; - break; - } - } - break; - default : - RT_TRACE(COMP_MLME, DBG_LOUD , ("SelectNetworkBySSID() : secLvl = %x , Pairwise chiper = %x\n",pSecurityInfo->SecLvl, pSecurityInfo->PairwiseEncAlgorithm) ); - } - } - } - - } while (FALSE); - - return bPassCheck; -} - -VOID -CheckRateSet( - POCTET_STRING pSuppRateSet - ) -{ - u1Byte index0 = 0, index1=0, index2=0; - u1Byte AvailRateTable[] = {0x2, 0x4, 0xb, 0x16, 0xc, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c}; - - // Trace each rate in the SuppRateSet. - for(index0=0; index0Length; index0++) - { - // Check if the rate is available. - for(index1=0; index1Octet[index0]&0x7f) == AvailRateTable[index1]) - break; - } - - // If the rate is available, it will be keep in the SuppRateSet. - // If it is not, it will be clear. - if(index1 < sizeof(AvailRateTable)) - { - pSuppRateSet->Octet[index2] = pSuppRateSet->Octet[index0]; - index2++; - } - } - - pSuppRateSet->Length = index2; -} - -// -// Description: -// The callback function in client mode for the tx packet feedback. This callback checks the null packet was sent successfully and -// start scan process immediately. -// Arguments: -// [in] pAdapter - -// The adapter address of the caller. -// [in] pContext - -// The information address of RT_TX_FEEDBACK_INFO. -// Return: -// NULL -// Assumption: -// The RT_TX_SPINLOCK is acquired. -// Note: -// If the null packet wasn't sent to AP, we should send this null packet again or skip this scan process. -// Currently, we don't skip this scan process or resend this packet because we don't make sure the tx report -// is robust which means the report may be lost. -// By Bruce, 2011-10-25. -// -VOID -mgntScanTxFeedbackCallback( - IN PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo - ) -{ - PADAPTER pTargetAdapter = pTxFeedbackInfo->pAdapter; - PMGNT_INFO pTargetMgntInfo=&pTargetAdapter->MgntInfo; - - PMGNT_INFO pMgntInfo=&pAdapter->MgntInfo; - - if(NULL == pTxFeedbackInfo) - return; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("mgntScanTxFeedbackCallback()=====>\n")); - - // This tx packet feedback reason doen't match. - if(!(pTxFeedbackInfo->Reason & RT_TX_FEEDBACK_ID_SCAN_TX_NULL)) - return; - - // The scan state is invalid - if(!pMgntInfo->bScanInProgress) - return; - - //3 // Check the packet is transmitted ok - - RT_TRACE(COMP_MLME, DBG_WARNING, ("Scan callback immediately!\n")); - - //Using target adapter to make sure set the same scan process. - PlatformSetTimer(pTargetAdapter, &pTargetMgntInfo->ScanTimer, 0); -} - - -u2Byte -scanGetScanTimer( - IN PADAPTER pAdapter - ) -{ - PADAPTER ptmpAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO ptmpMgntInfo = NULL; - PMGNT_INFO pMgntInfo=&pAdapter->MgntInfo; - RT_LIST_ENTRY nullPktList; - PRT_LIST_ENTRY pEntry = NULL; - u2Byte scanTimer = 0; - PRT_TX_LOCAL_BUFFER pBuf = NULL; - PRT_TCB pTcb = NULL; - u8Byte curTime = PlatformGetCurrentTime(); - u8Byte lastActionTime = MultiportGetLastConnectionActionTime(pAdapter); - - if(curTime < MultiportGetLastConnectionActionTime(pAdapter) + 5 * 1000000) - { - scanTimer = 1000; - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Delay scan for curTime (%d), last (%d)\n", - (u4Byte)(curTime & 0xFFFFFFFF), (u4Byte)(lastActionTime & 0xFFFFFFFF))); - } - - RTInitializeListHead(&nullPktList); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - // check each adapter if it is associated to the AP. - do - { - ptmpMgntInfo = &ptmpAdapter->MgntInfo; - - // No need to care AP mode. - if(ACTING_AS_AP(ptmpAdapter)) - continue; - - // If the client is not assciated or connected. - if(!ptmpMgntInfo->mAssoc || !ptmpMgntInfo->bMediaConnect || MgntRoamingInProgress(ptmpMgntInfo)) - continue; - - if(!MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - break; - - ConstructNullFunctionData( - ptmpAdapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - ptmpMgntInfo->Bssid, - FALSE, - 0, - FALSE, - TRUE); - pTcb->pAdapter = ptmpAdapter; - - scanTimer += SCAN_DELAY_TIME_MS_SHORT; - - RTInsertTailList(&nullPktList, &pTcb->List); - }while(NULL != (ptmpAdapter = GetNextExtAdapter(ptmpAdapter))); - - while(RTIsListNotEmpty(&nullPktList)) - { - pEntry = RTRemoveHeadList(&nullPktList); - pTcb = (PRT_TCB)CONTAINING_RECORD(pEntry, RT_TCB, List); - - if(RTIsListEmpty(&nullPktList)) - { - if(TxFeedbackInstallTxFeedbackInfoForTcb(pAdapter, pTcb)) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - RT_TX_FEEDBACK_ID_SCAN_TX_NULL, - pAdapter, - mgntScanTxFeedbackCallback, - (PVOID)(pTcb->pAdapter) - ); - scanTimer = SCAN_DELAY_TIME_MS_LONG; - } - else - { - scanTimer = 100; - } - } - // Set pTcb->bTxUseDriverAssingedRate as "TRUE" for fixed rate packet, by hana 2015/04/13 - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(pTcb->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, pMgntInfo->LowestBasicRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - return scanTimer; -} - - - -// -// Description: -// To simplify the procedure in the MlmeAssociateConfirm(), segment the Association OK to here. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The poniter of the current packet to the 802.11 header. -// [in] bReassociate - -// TRUE if this packet is Reassociation response packet. FALSE if this packet is association response packet. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// By determining the result status code, handle the assoication process for client mode. -// Revised by Bruce, 2012-03-09. -// -RT_STATUS -MlmeOnAssocOK( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu, - IN BOOLEAN bReassociate - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - OCTET_STRING SuppRateSet; - u1Byte SuppRateSetBuf[MAX_NUM_RATES]; - OCTET_STRING ExtSuppRateSet; - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - u1Byte RetryLimit = HAL_RETRY_LIMIT_INFRA; - BOOLEAN bTypeIbss = FALSE; - PADAPTER pExtAdapter = GetFirstAPAdapter(Adapter) ? GetFirstAPAdapter(Adapter) : GetDefaultAdapter(Adapter); - BOOLEAN bUseRAMask = FALSE; - BOOLEAN bConnected =TRUE; - u1Byte AutoChnlSelOp = 0; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return RT_STATUS_FAILURE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return RT_STATUS_FAILURE; - } - - // Join a BSS !!!! - RT_TRACE(COMP_MLME, DBG_LOUD, ("Join a BSS succeeded!\n")); - pMgntInfo->mAssoc = TRUE; - pMgntInfo->mIbss = FALSE; - pMgntInfo->mDisable = FALSE; - pMgntInfo->mAId = Frame_AssocAID(*posMpdu); - pMgntInfo->AsocTimestamp = PlatformGetCurrentTime(); - pMgntInfo->bStartDelayActionFrame = TRUE; - pMgntInfo->CntAfterLink = 0; - Adapter->LedTxCnt=0; - Adapter->LedRxCnt=0; - - //Move MacId Register to SetupJoinInfraInfo(), by hana 2015/09/02 - // -- HalMacId: Set a specific MacId for this client --- - //pMgntInfo->mMacId = (u1Byte)MacIdRegisterMacIdForInfraClient(Adapter); - //pMgntInfo->mcastMacId = (u1Byte)MacIdRegisterMacIdForMCastClient(Adapter); - // ------------------------------------------- - - // - // Add Assoc OK counter !! - // - if(pMgntInfo->SecurityInfo.SecLvl > RT_SEC_LVL_NONE ) - pMgntInfo->mDeauthCount++; - - // Set basic/operational rate set. - // (1) Copy Supported Rate Set to a local bufer. - // 20110511 Joseph: Add length checking to prevent from RateSetBuf overflow. - SuppRateSet = PacketGetElement(*posMpdu, EID_SupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - CopyMem( SuppRateSetBuf, SuppRateSet.Octet, (SuppRateSet.Length>MAX_NUM_RATES)?MAX_NUM_RATES:SuppRateSet.Length ); - FillOctetString( SuppRateSet, SuppRateSetBuf, SuppRateSet.Length ); - // (2) Get Extened Supported Rate Set. - ExtSuppRateSet = PacketGetElement(*posMpdu, EID_ExtSupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - // (3) If Extened Supported Rate Set exists, append it to SuppRateSet (local buffer). - // 20110511 Joseph: Add length checking to prevent from RateSetBuf overflow. - if( (ExtSuppRateSet.Length != 0) && (SuppRateSet.Length MAX_NUM_RATES) - { - CopyMem( SuppRateSet.Octet+SuppRateSet.Length, ExtSuppRateSet.Octet, MAX_NUM_RATES-SuppRateSet.Length); - SuppRateSet.Length = MAX_NUM_RATES; - } - else - { - CopyMem( SuppRateSet.Octet+SuppRateSet.Length, ExtSuppRateSet.Octet, ExtSuppRateSet.Length); - SuppRateSet.Length += ExtSuppRateSet.Length; - } - } - - // 20110511 Joseph: Check if the rate set is correct. - CheckRateSet(&SuppRateSet); - if(SuppRateSet.Length == 0) - { - SuppRateSet.Length = 1; - SuppRateSet.Octet[0] = (IS_WIRELESS_MODE_5G(Adapter))?0x8c:0x82; - } - - //trigger wapi thread - WAPI_SecFuncHandler(WAPI_MLMEONASSOCOK, Adapter, (PVOID)posMpdu, WAPI_END); - - // 2007.07.17 lanhsin Reset issue for security. - //In CCKM Fast Roaming , we can't reset key in Assoc Rsp it will cause Fail - if (Adapter->ResetProgress == RESET_TYPE_NORESET && pMgntInfo->SecurityInfo.AuthMode != RT_802_11AuthModeCCKM) - { - // Clear KeyLen[] for TKIP/AES. - // 2004.10.09, by rcnjko. - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - { - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - u1Byte i = 0; - - for(i = 0; i < KEY_BUF_SIZE; i++) - { - PlatformZeroMemory( pSecInfo->KeyBuf[i], MAX_KEY_LEN ); - pSecInfo->KeyLen[i] = 0; - } - } - } - - // - //Set HW Register - // - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_AUTO; - // 2. BSSID - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - // 3. MSR - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_RETRY_LIMIT, (pu1Byte)(&RetryLimit)); - // 4. BcnIntv - // - //We only need to update beacon interval when IBSS, or it will fail when in WLK 1.4 test (VwifiInfraSoft_ext). - //It will cause update tsf too long so it will loss packet. By Maddest 06052009 - // - //if(pMgntInfo->mIbss) - // We should set beacon interval register for client mode otherwise it will cause TBTT does not sync with AP. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BEACON_INTERVAL, (pu1Byte)(&pMgntInfo->dot11BeaconPeriod) ); - // 5. Slot time - // To solve Win98 IRQL==PASIVE_LEVEL in timer callback function, - // we call ActUpdate_mCapInfo() here to make sure related IOs are perfomed in correct IRQL, - // that is, DISPATCH_LEVEL=>Asyn IO for this case. 2005.03.15, by rcnjko. - ActUpdate_mCapInfo(Adapter, Frame_AssocCap(*posMpdu)); - - // 6. Update QoS parameters. Added by Annie, 2005-11-12. - if( pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE ) - { - QosOnAssocRsp( Adapter, *posMpdu ); - } - else - { // Update AC_PARAM: follow Legacy setting. Annie, 2006-03-31. - QosSetLegacyACParam(Adapter); - } - - // - // 7. Update HT parameters - // - if (IS_NEED_EXT_IQK(Adapter)) - { - GET_HAL_DATA(Adapter)->bNeedIQK = TRUE; - GET_HAL_DATA(Adapter)->DM_OutSrc.RFCalibrateInfo.bNeedIQK = TRUE; - } - - if(pMgntInfo->pHTInfo->bCurrentHTSupport) - { - HTOnAssocRsp(Adapter, *posMpdu); - - if(pMgntInfo->pVHTInfo->bCurrentVHTSupport) - VHTOnAssocRsp(Adapter, *posMpdu); - - CHNL_SetBwChnlFromPeer(Adapter); - } - else - { - PlatformZeroMemory(pMgntInfo->dot11HTOperationalRateSet, 16); - CHNL_SetBwChnl( Adapter, - pMgntInfo->dot11CurrentChannelNumber, - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT - ); - } - - // (4) Select Rate Set. - SelectRateSet( Adapter, SuppRateSet ); - - Adapter->HalFunc.AllowErrorPacketHandler(Adapter, TRUE, TRUE); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_ENABLE_TXOK_INTERRUPT, (pu1Byte)&bConnected); - - - // - // 8. Update RATR table - // This function shall be called after HTOnAssocRsp() because we will select Tx MCS rate - // in HTOnAssocRsp() function. - // - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - if(bUseRAMask) - { - // we only need to set rate mask - pMgntInfo->Ratr_State = 0; - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State); - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mcastMacId, NULL, pMgntInfo->Ratr_State); - } - else - { - Adapter->HalFunc.UpdateHalRATRTableHandler( - Adapter, - &pMgntInfo->dot11OperationalRateSet, - pMgntInfo->dot11HTOperationalRateSet,NULL); - } - - // - // 2015/04/16 MH According to ODM input parameters, we need to send default port HAL datastructure's ODM - // Otherwise, ext port will send null HAL pointer and cause BSOD. - // - GetDefaultAdapter(Adapter)->HalFunc.RAPostActionHandler(&(((PHAL_DATA_TYPE)GetDefaultAdapter(Adapter)->HalData)->DM_OutSrc)); - - // Update RTS init rate after we set RA MASK. by tynli. 2010.11.25. - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)&Adapter); - - // 9. Set UsbRxAggr parameters - // This is just a temporary fix -#if (RX_AGGREGATION/* && HARDWARE_TYPE_IS_RTL8192D != 1*/) - if(!Adapter->bInHctTest) - { - if(!pMgntInfo->bWiFiConfg || IS_SET_RX_AGGR(Adapter)) - { - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); - PlatformScheduleWorkItem(&pHalData->RxAggrSettingWorkItem); - } - } -#endif - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return RT_STATUS_FAILURE; - } - - if (Adapter->ResetProgress == RESET_TYPE_NORESET) - { - pMgntInfo->uConnectedTime = PlatformGetCurrentTime(); - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, FORCE_INDICATE ); - } - else - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, GENERAL_INDICATE); - - // Half the time required to determine if we are disconneted. 2005.03.10, by rcnjko. - //Adapter->MgntInfo.LinkDetectInfo.SlotNum = 4 * (1 + pMgntInfo->dot11BeaconPeriod/500); - if(pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20 && Adapter->bInHctTest) // Neo test 123 - Adapter->MgntInfo.LinkDetectInfo.SlotNum = 1; - else - Adapter->MgntInfo.LinkDetectInfo.SlotNum = 2 * (1 + pMgntInfo->dot11BeaconPeriod/500); - - RT_ASSERT(pMgntInfo->LinkDetectInfo.SlotNum < RT_MAX_LD_SLOT_NUM, ("SlotNum exceeds!\n") ); - - // To prevent the immediately calling MgntLinkStatusWatchdog after association. Annie, 2005-04-22. - if( pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod==0 || - pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod==0 ) - { - pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod = 1; - pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod= 1; - } - - CCX_OnAssocOk(Adapter, posMpdu, bReassociate); - - TDLS_OnAsocOK(Adapter, *posMpdu); - - //[LPS] Reset LPS Setting - pPSC->LpsIdleCount=0; - - // Remove A2 entry since NO ICs support this - // Set A2 entry when starting win7 soft AP, otherwise, set CHECK_BSSID - /* - if(bUseRAMask && - ((MgntActQuery_ApType(pExtAdapter) == RT_AP_TYPE_VWIFI_AP) || - (MgntActQuery_ApType(pExtAdapter) == RT_AP_TYPE_EXT_AP))) - { - - // 2009.05.22 hpfan modify for fill A2 entry by AP's bssid - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_FILL_A2ENTRY, pExtAdapter->MgntInfo.Bssid); - } - else - */ - { - // 2007/10/16 MH MAC Will update TSF according to all received beacon, so we have - // To set CBSSID bit when link with any AP. - if(!IsAPModeExist(Adapter)) - { - bFilterOutNonAssociatedBSSID = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - - //Correct TSF value. Suggest by Scott. Added by tynli. 2009.12.01. - bTypeIbss = FALSE; - - if(MultiChannelSyncHwTsfNeeded(Adapter)) - { - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CORRECT_TSF, (pu1Byte)(&bTypeIbss)); - } - } - - // ACM parameter update timer, by Bruce, 2008-03-21. - if (pStaQos->CurrentQosMode > QOS_DISABLE) - { - PlatformSetTimer(Adapter, &pStaQos->ACMTimer, ACM_TIMEOUT); - } - - // Clear all rejected AP record, 2006.11.21, by shien chang. - MgntClearRejectedAsocAP(Adapter); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - return RT_STATUS_FAILURE; - } - - // 2006.11.15, by shien chang. - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - - (MgntRoamingInProgress(pMgntInfo)) ? - MgntRoamComplete(Adapter, MlmeStatus_success) : - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_SUCCESS); - - MgntResetJoinCounter(pMgntInfo); - MgntResetRoamingState(pMgntInfo); - - // From MSDN: - // After the 802.11 station successfully associates with an AP or peer station, the miniport driver must make - // an NDIS_STATUS_DOT11_LINK_QUALITY indication shortly after it makes the - // NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION indication. - // The WlanTimedLinkQuality rule specifies the NDIS_STATUS_DOT11_LINK_QUALITY indication is made in 15 - // seconds after a successful NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION. - // By Bruce, 2015-04-29. - LinkQualityReportCallback(Adapter); - - P2P_OnAssocOK(Adapter, pRfd, posMpdu); - WFD_OnAssocOK(Adapter, pRfd, posMpdu); - -#if (AUTO_CHNL_SEL_NHM == 1) - if(IS_AUTO_CHNL_SUPPORT(Adapter)){ - RT_TRACE(COMP_P2P, DBG_LOUD, ("[ACS] MlmeOnAssocOK(): Reset ACS statistics\n")); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AUTO_CHNL_SEL, (pu1Byte)&AutoChnlSelOp); - } -#endif - - //2013.11.18 Sinda BK set the same settings with BK. - //Otherwise BK have a lower priority and have more packet loss. - if( Adapter->bInHctTest == TRUE ) - { - PlatformEFIOWrite1Byte(Adapter, REG_EDCA_BK_PARAM, 43); - } - - FunctionOut(COMP_MLME); - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Select another BSS to join, and the selected BSS is not in the reected list. -// Arguments: -// Adapter - -// NIC adapter context pointer. -// Return: -// TRUE if an BSS had been selected to perform join or roam, or FALSE. -// Note: -// (1) Because "JoinTimeout(), MlmeAuthenticateRequest_Confirm(), -// and MlmeAssociateConfirm()" perform the same process, I merged -// them into this function. -// (2) Before calling this function, be sure that we have not indicated -// "AssocitionStart" event, or have indicated "AssocitionComplete" -// event to OS. Calling it will restart a complete association procedure. -// (3) This function won't indicate one of the events of "RoamingStart", -// "RoamingComplete", and "ConnectionComplete" to OS. -// By Bruce, 2009-02-12. -// -BOOLEAN -MgntConnectOtherBss( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bConnect = FALSE; - PRT_WLAN_BSS pRtBss; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - return FALSE; - } - - if(PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - return FALSE; - - if(MgntIsTimeOutForIndication(pMgntInfo)) - { - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - return FALSE; - } - - if(MgntRoamingInProgress(pMgntInfo)) - { // Roaming. - // Roaming retry - if(MgntRoamRetry(Adapter, FALSE)) // Raom again. - bConnect = TRUE; - else - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - return FALSE; - } - - if(SelectNetworkBySSID(Adapter, &(pMgntInfo->Ssid), FALSE, pRtBss) == RT_JOIN_INFRA) - { - if(!MgntIsInRejectedAPList(Adapter, pRtBss->bdBssIdBuf)) - { // Do not join the rejected AP. - MgntResetJoinCounter(pMgntInfo); - JoinRequest(Adapter, pMgntInfo->JoinAction, pRtBss); - bConnect = TRUE; - } - } - } - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntConnectOtherBss(): Roam Retry = %d!\n", bConnect)); - } - else - { // Fisrt connection. - // Has the other AP with the same SSID - if(SelectNetworkBySSID(Adapter, &(pMgntInfo->Ssid), FALSE, pRtBss) == RT_JOIN_INFRA) - { - if(!MgntIsInRejectedAPList(Adapter, pRtBss->bdBssIdBuf)) - { // Do not join the rejected AP. - MgntResetJoinCounter(pMgntInfo); - JoinRequest(Adapter, pMgntInfo->JoinAction, pRtBss); - bConnect = TRUE; - } - } - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntConnectOtherBss(): Connect other = %d!\n", bConnect)); - } - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - return bConnect; -} - - -// -// Description: -// Translate freq_channel (Hz or channel number) to an valid channel number. -// -u1Byte -ToLegalChannel( - PADAPTER Adapter, - u8Byte freq_channel -) -{ - PRT_CHANNEL_LIST pChanneList = NULL; - u2Byte i; - u2Byte firstLegalIndex=0xff; - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChanneList); - - for(i = 0; i < pChanneList->ChannelLen; i ++) - { - if(ACTING_AS_AP(Adapter)) - { - if(!DFS_ApChnlLocked(Adapter, pChanneList->ChnlListEntry[i].ChannelNum)) - { - if(firstLegalIndex == 0xff) - firstLegalIndex = i; - if(freq_channel == pChanneList->ChnlListEntry[i].ChannelNum) - { - return pChanneList->ChnlListEntry[i].ChannelNum; - } - } - } - else - { - if(firstLegalIndex == 0xff) - firstLegalIndex = 0; - if(freq_channel == pChanneList->ChnlListEntry[i].ChannelNum) - { - return pChanneList->ChnlListEntry[i].ChannelNum; - } - } - - if( (pChanneList->ChnlListEntry[i].ChannelNum <= 14) && (freq_channel == DSSS_Freq_Channel[pChanneList->ChnlListEntry[i].ChannelNum]*1000) ) - { - return pChanneList->ChnlListEntry[i].ChannelNum; - } - } - - // Prefast warning C6385: Reading invalid data from 'pChanneList->ChnlListEntry': the readable size is '760' bytes, but '5120' bytes may be read. - // false positive, disable it here. -#pragma warning( disable: 6385 ) - return pChanneList->ChnlListEntry[firstLegalIndex].ChannelNum; -} - -BOOLEAN IsPeer11G( - RT_WLAN_BSS *bssDesc -) -{ - u2Byte i; - u1Byte rate; - - // Check if it contains OFDM rates. - for(i = 0; i < bssDesc->bdSupportRateEXLen; i++) - { - rate = bssDesc->bdSupportRateEXBuf[i] & 0x7f; - if( !MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) && - MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_G) ) - { - return TRUE; - } - } - - return FALSE; -} - - -BOOLEAN -IsPeer11B( - RT_WLAN_BSS *bssDesc -) -{ - u2Byte i; - u1Byte rate; - - // Check if it contains OFDM rates. - for(i = 0; i < bssDesc->bdSupportRateEXLen; i++) - { - rate = bssDesc->bdSupportRateEXBuf[i] & 0x7f; - if(MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B)) - { - return TRUE; - } - } - - return FALSE; -} - -BOOLEAN -Is11bBasicRate( - RT_WLAN_BSS *bssDesc -) -{ - u2Byte i; - u1Byte rate; - - // Check if it contains OFDM rates. - for(i = 0; i < bssDesc->bdSupportRateEXLen; i++) - { - // Check 802.11B Basic Rate - if(bssDesc->bdSupportRateEXBuf[i] & 0x80) - { - rate = bssDesc->bdSupportRateEXBuf[i] & 0x7f; - if(!MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B)) - { - return FALSE; - } - } - } - - return TRUE; -} - - -// -// Parse Realtek information element (sent from 8186). Added by Roger, 2006.12.07. -// -VOID -GetRealtekIEContentForTurboMode( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc, - IN POCTET_STRING pRealtekIE - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte TypeOffset; - PRT_TURBO_MODE_IE_VALUE pRTIEValue; - - // Turbo mode switch check. - if( !pMgntInfo->bAutoTurboBy8186 && !pMgntInfo->bSupportTurboMode ) - { - return; - } - - // Input data Check. - if( !pBssDesc || !pRealtekIE->Octet ) - { - return; - } - - - // Length check. - // OUI(3), first type and length: total 5 bytes. - // - // 00-E0-4C-(Type)-(Length) - // 01 02 03 04 05 - if( pRealtekIE->Length <= (SIZE_OUI + SIZE_TYPE_AND_LEN) ) // 5 bytes - { - return; - } - - TypeOffset = SIZE_OUI; // 3 bytes OUI: Jump out "00-E0-4C". - do - { - pRTIEValue = (PRT_TURBO_MODE_IE_VALUE)( pRealtekIE->Octet + TypeOffset ); - - // Length Check. - if( (TypeOffset+SIZE_TYPE_AND_LEN+pRTIEValue->Length) > pRealtekIE->Length ) - { - break; - } - - switch( pRTIEValue->Type ) - { - case eRT_IE_TYPE1_TURBO_MODE: - { // Type 1: Capability. - RT_ASSERT( ( pRTIEValue->Length == sizeof(u2Byte) ), ("GetRealtekIEContentForTurboMode(): Length of type 1(Capability) is not 2 bytes!!!!! Go to tell SD4!\n") ); - pBssDesc->bRealtekCapType1Exist = TRUE; - PlatformMoveMemory(&(pBssDesc->RealtekCap), &(pRTIEValue->Value), 2); - } - break; - - default: - break; - } - - TypeOffset += (SIZE_TYPE_AND_LEN+pRTIEValue->Length); - }while(TRUE); -} - -u2Byte -RemoveWcnIeFromMmpdu( - IN OUT POCTET_STRING posMmpdu -) -/* - If Reatelk UI WPS is enabled, we shall not remove WCN IE except Win7 - otherwise we would fail to get the IE for WPS. -*/ -{ - OCTET_STRING osWcnIe = {0,0};// the WCN IE in the mmpdu - u2Byte RmvIeLen = 0; - u4Byte i, len; - - do - { - // - // Note that osWcnIe does not include EID and OUI. - // - osWcnIe = PacketGetElement(*posMmpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUBTYPE_DONT_CARE); - - if(osWcnIe.Octet == 0) - { - //RT_TRACE(COMP_SCAN, DBG_LOUD, ("RemoveWcnIeFromMmpdu(): ALL WCN IE removed.\n")); - break; - } - else - { - RmvIeLen += (osWcnIe.Length+2); - } - - //RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, - // "RemoveWcnIeFromMmpdu(): before", posMmpdu->Octet, posMmpdu->Length); - - // - // To make osWcnIe include EID and OUI. - // - osWcnIe.Octet -= 2; - osWcnIe.Length += 2; - - // - // Move the IEs after Wcn IE foreward. - // -------------------------------- - // | Hdr | prev IEs | Wcn IE | post IEs | - // -------------------------------- - // - len = (u4Byte)(posMmpdu->Length - (u2Byte)(osWcnIe.Octet - posMmpdu->Octet) - osWcnIe.Length); - for(i = 0; i < len; i++) - { - PlatformMoveMemory(osWcnIe.Octet + i, - osWcnIe.Octet + osWcnIe.Length + i, - 1); - } - posMmpdu->Length -= osWcnIe.Length; - } while(TRUE); - - //RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, - // "RemoveWcnIeFromMmpdu(): after", posMmpdu->Octet, posMmpdu->Length); - - return RmvIeLen; - -} - -VOID -UpdateBssWcnIe( - IN OUT PRT_WLAN_BSS pBssDesc, - IN POCTET_STRING posMmpdu -) -/* - If UI WPS enabled, we shall not remove WCN IE from mmpdu and update WCN IE except Win7. - Otherwise we will have duplicate WCN IE indicated up in N6CTranslateRtBssToDot11Bss(). -*/ -{ -#if (WPS_SUPPORT == 1) - POCTET_STRING posWcnIe; - OCTET_STRING osNewWcnIe; - - RT_ASSERT((pBssDesc->BeaconWcnIeBuf), - ("UpdateBssWcnIe(): pBssDesc->BeaconWcnIeBuf shuld not be null\n")); - RT_ASSERT((pBssDesc->ProbeRspWcnIeBuf), - ("UpdateBssWcnIe(): pBssDesc->ProbeRspWcnIeBuf shuld not be null\n")); - - //RT_TRACE(COMP_SCAN, DBG_LOUD, - // ("UpdateBssWcnIe(): packet type: %X\n", PacketGetType(*posMmpdu))); - - pBssDesc->osBeaconWcnIe.Octet = pBssDesc->BeaconWcnIeBuf; - pBssDesc->osProbeRspWcnIe.Octet = pBssDesc->ProbeRspWcnIeBuf; - - posWcnIe = (PacketGetType(*posMmpdu) == Type_Beacon ? - (&pBssDesc->osBeaconWcnIe) : (&pBssDesc->osProbeRspWcnIe)); - - osNewWcnIe = PacketGetElement(*posMmpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUBTYPE_DONT_CARE); - if(osNewWcnIe.Length + 2 < WCN_IE_BUF_LEN) // 2 = 1 (element id )+ 1 (oui). - { - // - // Store the Wcn IE from the frame. - // - if(osNewWcnIe.Length > 0) - { - posWcnIe->Length = 0; - PacketMakeElement(posWcnIe, EID_Vendor, osNewWcnIe); - } - else - { - //RT_TRACE(COMP_SCAN, DBG_WARNING, - //("No WCN IE.\n")); - } - } - else - { - RT_TRACE(COMP_SCAN, DBG_WARNING, - ("UpdateBssWcnIe(): length of the recvd Wcn IE (%u) greater than the maximum length (%u) we can deal with.\n", - osNewWcnIe.Length + 2, WCN_IE_BUF_LEN)); - } -/* - { - static u1Byte temp[]={0x00,0x12,0x0e,0x6c,0x13,0xc9}; - if(eqMacAddr(temp, Frame_pBssid((*posMmpdu)))) - { - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, - "UpdateBssWcnIe(): mmpdu:", posMmpdu->Octet, posMmpdu->Length); - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, - "UpdateBssWcnIe(): Wcn IE:", posWcnIe->Octet, posWcnIe->Length); - } - } -*/ -#endif -} - -BOOLEAN -AssembleFragmentWcnIeFromMmpdu( - IN PADAPTER Adapter, - IN PSIMPLE_CONFIG_T pSimpleConfig, - IN OUT POCTET_STRING posMmpdu -) -{ - OCTET_STRING osWcnIe; // the WCN IE in the mmpdu - OCTET_STRING ret; // the WCN IE in the mmpdu - u1Byte IENum; - int i =0; - BOOLEAN bRet = FALSE; - - if(!pSimpleConfig->bEnabled) - return bRet; - - // Check the IE Fragment - IENum = PacketGetElementNum(*posMmpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUBTYPE_DONT_CARE); - - // Get the fragment ie - if(IENum > 1) - { - u4Byte j=0,len =0; - RT_TRACE(COMP_WPS,DBG_LOUD,("The IE is Fragment, here will assemble it \n")); - - PlatformZeroMemory(pSimpleConfig->AssembleIEBuf, MAX_SIMPLE_CONFIG_IE_ASSEMBLE_LEN); - - for(i=0;iAssembleIEBuf, (osWcnIe.Octet-2), (osWcnIe.Length+2)); - pSimpleConfig->AssembleIELen = osWcnIe.Length +2; - } - else - { - // The later IE , we copy it from TLV skip OUI - PlatformMoveMemory((pSimpleConfig->AssembleIEBuf+pSimpleConfig->AssembleIELen), (osWcnIe.Octet+4), (osWcnIe.Length-4)); - pSimpleConfig->AssembleIELen += (osWcnIe.Length - 4); - - } - - // - // To make osWcnIe include EID and OUI. - // - osWcnIe.Octet -= 2; - osWcnIe.Length += 2; - - // - // Move the IEs after Wcn IE foreward. - // -------------------------------- - // | Hdr | prev IEs | Wcn IE | post IEs | - // -------------------------------- - // - len = (u4Byte)(posMmpdu->Length - (u2Byte)(osWcnIe.Octet - posMmpdu->Octet) - osWcnIe.Length); - - for(j = 0; j < len; j++) - { - PlatformMoveMemory(osWcnIe.Octet + j, - osWcnIe.Octet + osWcnIe.Length + j, - 1); - } - posMmpdu->Length -= osWcnIe.Length; - - } - - pSimpleConfig->AssembleIEBuf[1] = (pSimpleConfig->AssembleIELen -2); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "The Assemble IE : \n", pSimpleConfig->AssembleIEBuf, pSimpleConfig->AssembleIELen); - - // Remove WPS IE - RemoveWcnIeFromMmpdu(posMmpdu); - - //return osWcnIe; - PlatformMoveMemory((posMmpdu->Octet + posMmpdu->Length), - pSimpleConfig->AssembleIEBuf, - pSimpleConfig->AssembleIELen); - posMmpdu->Length +=pSimpleConfig->AssembleIELen; - - bRet = TRUE; - } - - return bRet; -} - - -u2Byte -RemoveWCNIE( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS bssDesc, - IN PSIMPLE_CONFIG_T pSimpleConfig, - IN POCTET_STRING mmpdu -) -{ - u2Byte ret = 0; - - if(!pSimpleConfig->bEnabled || - Adapter->bInHctTest) - {// If we remove WCN IE from mmpdu, simple config will not get the IE. Basically, simple config and WCN shall be exclusive. - UpdateBssWcnIe(bssDesc, mmpdu); - ret = RemoveWcnIeFromMmpdu(mmpdu); - } - - return ret; -} - -// -// Description: -// Get the current packet content of RFD and put into the BSS desc by parsing the IE and capabilities. -// Arguments: -// Adapter - The NIC adapter context -// pRfd - The current packet to be parsed -// bssDesc - The container of BSS information -// bUpdate - -// TRUE: The input bssDesc has been filled with the previous packet information. The bssDesc should not -// be cleaned but just update the IE/capabilities information. -// FALSE: The bssDesc will be cleaned before put into any information into the bssDesc. -// Note: -// The information contianied between Beacon and ProbeRsp may be different. Normally, the beacon shall be -// the final basis, and we shall not overwrite from the non-exist information to the exist information in the bssDesc -// if bUpdate is set true. The 2nd packet to be update is just a supplementary information. -// Revised by Bruce, 2009-07-07. -// -BOOLEAN -GetValueFromBeaconOrProbeRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - OUT RT_WLAN_BSS *bssDesc, - IN BOOLEAN bUpdate - ) -{ - OCTET_STRING ssidBeacon, IbssBeacon, BratesBeacon, TimBeacon, DsPmBeacon, HTInfoIE; - OCTET_STRING ExtratesBeacon, ERPInfo; - OCTET_STRING mmpdu; - OCTET_STRING RSNIE; - OCTET_STRING QBssLoad; - OCTET_STRING WMMElement; - OCTET_STRING RegulatoryElement; - OCTET_STRING PowerConstraint; - pu1Byte pframe; - pu1Byte pPeerHTInfo; - u1Byte LastRSSI; - OCTET_STRING RealtekElement; // Added by Roger, 2006.12.07. - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN bEDCAParms = FALSE; - OCTET_STRING Country; - static u1Byte sMFPBIPOui[] = {0x00, 0x0f, 0xac, 0x06}; - static u1Byte WPATag[] = {0x00, 0x50, 0xf2, 0x01}; - static u1Byte sRSNOui[] = {0x00, 0x0f, 0xac}; - - s4Byte preCumRecvSignalPower = bssDesc->CumRecvSignalPower; - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - pframe = mmpdu.Octet; - - if(!bUpdate) // Clean up the bssDesc. - { - PlatformZeroMemory(bssDesc, sizeof(RT_WLAN_BSS)); - } - - // Signal strength. - - LastRSSI = bssDesc->RSSI; - bssDesc->RSSI = pRfd->Status.SignalStrength; // 0-100 index. - bssDesc->RecvSignalPower = pRfd->Status.RecvSignalPower; // dBm. - - // Signal quality. - bssDesc->SignalQuality = pRfd->Status.SignalQuality; // 0-100 index. - - if(GET_HAL_DATA(Adapter)->CurrentBandType == BAND_ON_5G) - { - //OFDM Noise, only available in 5G - bssDesc->Noise = (s1Byte)pRfd->Status.RxPwr[0] - (s1Byte)pRfd->Status.RxSNR[0]; - } - else - { - //CCK noise, not accurate, just for estimation - bssDesc->Noise = -1*(pRfd->Status.RxSNR[0] /3) - 65; - } - - // Our TSF when receving thisp packet. - bssDesc->RecvTsfLow = pRfd->Status.TimeStampLow; - bssDesc->RecvTsfHigh = pRfd->Status.TimeStampHigh; - - // Check WPS IE format and defragment -#if (WPS_SUPPORT == 1) - { - BOOLEAN bIeFrag = FALSE; - u2Byte lengthBeforeAssemble = pRfd->PacketLength; - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - - bIeFrag = AssembleFragmentWcnIeFromMmpdu(Adapter,pSimpleConfig,&mmpdu); - - if(TRUE == bIeFrag) - { - pRfd->PacketLength = mmpdu.Length; - pRfd->ValidPacketLength -= (lengthBeforeAssemble - mmpdu.Length); - } - } -#endif - // - // 061124, rcnjko: keep frame body to get IE in later use and - // NDIS5 BSS list report. - // - // 2010/04/16 MH For DTM WNCIE_Ex.cmn test. We can not indicate too much. - // Incorrect indicate number will + 1; - // - // Proting by tynli from 92E svn revision 7281. 2010.09.07. - // - // 2011/05/26 probe rsp can overwrite beacon IE content but not in reverse, by hpfan - if(pRfd->ValidPacketLength == mmpdu.Length) - { - if(!bUpdate || (bssDesc->BssPacketType == BSS_PKT_BEACON) || (PacketGetType(mmpdu) == Type_Probe_Rsp) ) - { - CopyRtWlanBssIE(bssDesc, - mmpdu.Octet + sMacHdrLng, - mmpdu.Length - sMacHdrLng); - } - else - { - // Because we don't copy the content to the BSS, we don't parse the content to prevent - // mismatch between parsing result and IE. - // By Bruce, 2011-06-27. - return TRUE; - } - } - else if(pRfd->ValidPacketLength != 0) - { - CopyRtWlanBssIE(bssDesc, - mmpdu.Octet + sMacHdrLng, - pRfd->ValidPacketLength - sMacHdrLng); - } - - // Determine the receiving packet type for BSS weighting. - bssDesc->BssPacketType |= - (PacketGetType(mmpdu) == Type_Probe_Rsp) ? BSS_PKT_PROBE_RSP : BSS_PKT_BEACON; - - //bssid - CopyMem(bssDesc->bdBssIdBuf, Frame_Addr3(mmpdu), 6); - - //Src address - CopyMem(bssDesc->bdMacAddressBuf, Frame_Addr2(mmpdu), 6); - - //CumRecvSignalPower is shown on Antenna test (%) and RSSI (dBm) - if(!bUpdate) - { - PRT_WLAN_RSSI pBssRssi; - - pBssRssi = BssDescDupByBssid4Rssi(Adapter, bssDesc->bdBssIdBuf); - - if(pBssRssi) - bssDesc->CumRecvSignalPower = pBssRssi->CumRecvSignalPower; - else - bssDesc->CumRecvSignalPower = pRfd->Status.RecvSignalPower; // dBm. - } - else if(preCumRecvSignalPower >= 0) - { - bssDesc->CumRecvSignalPower = pRfd->Status.RecvSignalPower; // dBm. - } - else - { - bssDesc->CumRecvSignalPower = (preCumRecvSignalPower * 15 + pRfd->Status.RecvSignalPower) >> 4; - } - -// 1.Timestamp, 2005.06.27, by rcnjko. - bssDesc->bdTstamp = GET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(pframe); - bssDesc->bdTstamp <<= 32; - bssDesc->bdTstamp |= GET_BEACON_PROBE_RSP_TIME_STAMP_LOW(pframe); - -// 2.Beacon interval - bssDesc->bdBcnPer = GET_BEACON_PROBE_RSP_BEACON_INTERVAL(pframe); - -// 3.Capability information - bssDesc->bdCap = GET_BEACON_PROBE_RSP_CAPABILITY_INFO(pframe); - -// 4.SSID - ssidBeacon = PacketGetElement(mmpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - // - // Update SSID as the 2 conditions: - // (1) !bUpdate - This bssDesc is a new one, copy the ssid by all means. - // (2) !IsHiddenSsid(ssidBeacon) - This packet includes a non-Hidden SSID. The current bssDesc may conatin a hidden SSID by - // previous parsed packet, so update the SSID here. - // By Bruce, 2009-07-07. - // - if(!bUpdate || !IsHiddenSsid(ssidBeacon)) - { - CopySsid(bssDesc->bdSsIdBuf, bssDesc->bdSsIdLen, ssidBeacon.Octet, ssidBeacon.Length); - } - -// 5.Supported rate - BratesBeacon = PacketGetElement(mmpdu, EID_SupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( BratesBeacon.Length != 0) - { - CopyMem( bssDesc->bdSupportRateEXBuf, BratesBeacon.Octet, BratesBeacon.Length); - bssDesc->bdSupportRateEXLen= BratesBeacon.Length; - } - -// 7.DS parameter Set - DsPmBeacon = PacketGetElement(mmpdu, EID_DSParms, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( DsPmBeacon.Length != 0 ) //2.4G band - bssDesc->ChannelNumber = EF1Byte( *(u1Byte *)(DsPmBeacon.Octet) ); - //Get 5G Chnl info from IE, except 5G A mode - else if(GET_HAL_DATA(Adapter)->CurrentBandType == BAND_ON_5G) - { - HTInfoIE = PacketGetElement(mmpdu, EID_HTInfo, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if( HTInfoIE.Length !=0) - { - HTParsingHTInfoElement(Adapter, HTInfoIE, bssDesc); - pPeerHTInfo = (pu1Byte)bssDesc->BssHT.bdHTInfoBuf; - bssDesc->ChannelNumber = GET_HT_INFO_ELE_CHANNEL(pPeerHTInfo); - } - else - { - u1Byte halCurChnl=GET_HAL_DATA(Adapter)->CurrentChannel; - - if(bssDesc->LastChnlUpdatecount != pMgntInfo->Scancount) - { - if(halCurChnl >= 36) - bssDesc->ChannelNumber = halCurChnl; - } - else if(LastRSSI < bssDesc->RSSI) - { - //deal with AP singnal duplicate on 64-shifted channel problem: If same BSSID occur on two channels in one scan, select according to RSSI - if(halCurChnl >= 36) - bssDesc->ChannelNumber = halCurChnl; - } - - if(bssDesc->ChannelNumber < 36) - bssDesc->ChannelNumber = 36; - } - } - else - { - //should not get here - RT_TRACE(COMP_SCAN , DBG_LOUD , ("Can't get channel information\n")); - bssDesc->ChannelNumber = GET_HAL_DATA(Adapter)->CurrentChannel; - } - bssDesc->LastChnlUpdatecount = pMgntInfo->Scancount; - - if(IsHiddenSsid(ssidBeacon) ) - { - pMgntInfo->hiddenChannel = bssDesc->ChannelNumber; - } -#if (DFS_SUPPORT == 1) - if(pMgntInfo->DFSMgnt.staMode.bMonitorAfterSwitchIsDone) - { - if(pMgntInfo->DFSMgnt.staMode.dfsOldConnectedChannel == bssDesc->ChannelNumber) - pMgntInfo->DFSMgnt.staMode.dfsOldConnectedChannel =0; - } -#endif -// 9.IBSS parameter set - IbssBeacon = PacketGetElement(mmpdu, EID_IbssParms, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( IbssBeacon.Length != 0){ - bssDesc->bdIbssParms.atimWin = EF2Byte( *(UNALIGNED pu2Byte)(IbssBeacon.Octet) ); - } - -// 10.TIM - //bdDtimPer - TimBeacon = PacketGetElement(mmpdu, EID_Tim, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( TimBeacon.Length != 0) - { - bssDesc->bdDtimPer =EF1Byte(*(TimBeacon.Octet+1)); - } - -// 11. Country Information. - FillOctetString(bssDesc->bdCountryIE, bssDesc->bdCountryIEBuf, 0); - { - Country = PacketGetElement(mmpdu, EID_Country, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if(Country.Length != 0) - CopyMemOS(&bssDesc->bdCountryIE, Country, Country.Length ); - } - -// 13. QBSS Load. - QBssLoad = PacketGetElement(mmpdu, EID_QBSSLoad, OUI_SUB_DONT_CARE ,OUI_SUBTYPE_DONT_CARE); - if(QBssLoad.Length == QBSS_LOAD_SIZE) - { - bssDesc->BssQos.bQBssLoadValid = TRUE; - PlatformMoveMemory(bssDesc->BssQos.QBssLoad, QBssLoad.Octet, QBSS_LOAD_SIZE); - } - else if(!bUpdate) // The previous QBSS Load may be valid. - { - bssDesc->BssQos.bQBssLoadValid = FALSE; - } - - -// 14.RSN - // ShuChen TODO: Get RSN IE information - //2004/06/29, kcwu, parse RSN IE info - { - u1Byte count; - - //kcwu, initialize - bssDesc->SecLvl = RT_SEC_LVL_NONE; - bssDesc->GroupCipherSuite = RT_ENC_ALG_NO_CIPHER; - bssDesc->PairwiseCipherCount = 0; - bssDesc->AuthSuiteCount = 0; - for(count = 0; count < MAX_CIPHER_SUITE_NUM; count++){ - bssDesc->PairwiseCipherSuite[count] = RT_ENC_ALG_NO_CIPHER; - } - for(count = 0; count < MAX_AUTH_SUITE_NUM; count++){ - bssDesc->AuthSuite[count] = AKM_SUITE_NONE; - } - bssDesc->bPreAuth = FALSE; - bssDesc->NumOfPTKReplayCounter = 0; - bssDesc->NumOfGTKReplayCounter = 0; - } - - bssDesc->WpaIe.Octet = bssDesc->WpaIeBuf; - - bssDesc->RsnIe.Octet = bssDesc->RsnIeBuf; - bssDesc->WpaIe.Length = 0; - bssDesc->RsnIe.Length = 0; - bssDesc->bMFPC = 0; - bssDesc->bMFPR = 0; - bssDesc->bMFPBIP = 0; - - - RSNIE = PacketGetElement(mmpdu, EID_WPA2, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if(RSNIE.Length != 0) - { - bssDesc->SecLvl = RT_SEC_LVL_WPA2; - bssDesc->RsnIe.Length = RSNIE.Length+2; - PlatformMoveMemory (bssDesc->RsnIeBuf, RSNIE.Octet-2, RSNIE.Length+2); - - } - else - { - RSNIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_WPA, OUI_SUBTYPE_DONT_CARE ); - if(RSNIE.Length != 0) - { - bssDesc->SecLvl = RT_SEC_LVL_WPA; - bssDesc->WpaIe.Length = RSNIE.Length+2; - PlatformMoveMemory (bssDesc->WpaIeBuf, RSNIE.Octet-2, RSNIE.Length+2); - } - } - - if (bssDesc->WpaIe.Length == 0) - { - bssDesc->WpaIe = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_WPA, OUI_SUBTYPE_DONT_CARE ); - if(bssDesc->WpaIe.Length != 0) - { - bssDesc->WpaIe.Length += 2; - PlatformMoveMemory (bssDesc->WpaIeBuf, bssDesc->WpaIe.Octet-2, bssDesc->WpaIe.Length); - bssDesc->WpaIe.Octet = bssDesc->WpaIeBuf; - } - } - - if(RSNIE.Length != 0) - { - u1Byte *pCurr; - u1Byte count; - u4Byte Readlength =0; - - pCurr = RSNIE.Octet; - - //2004/09/15, kcwu, parse WPA2 packet - if(bssDesc->SecLvl == RT_SEC_LVL_WPA) - { - pCurr+=4; - CopyMem(&bssDesc->SecVersion, pCurr, 2); - pCurr+=2; - } - else if(bssDesc->SecLvl == RT_SEC_LVL_WPA2) - { - //pCurr+=2; - CopyMem(&bssDesc->SecVersion, pCurr, 2); - pCurr+=2; - Readlength = 2; - } - else - { - //NO WAY!!!! - } - Sec_MapOUITypeToCipherSuite(&(pCurr[0]), &(pCurr[3]), bssDesc->SecLvl, &(bssDesc->GroupCipherSuite)); - - pCurr += 3; - Readlength += 3; - pCurr += 1; - Readlength += 1; - - bssDesc->PairwiseCipherCount = *pCurr; - pCurr+=2; - Readlength += 2; - - if(bssDesc->PairwiseCipherCount >0 && bssDesc->PairwiseCipherCount < MAX_CIPHER_SUITE_NUM) - { - for(count = 0; count < bssDesc->PairwiseCipherCount; count++) - { - Sec_MapOUITypeToCipherSuite(&(pCurr[0]), &(pCurr[3]), bssDesc->SecLvl, &(bssDesc->PairwiseCipherSuite[count])); - pCurr+=4; - Readlength += 4; - } - } - bssDesc->AuthSuiteCount = *pCurr; - pCurr+=2; - Readlength += 2; - - - if(bssDesc->AuthSuiteCount > 0 && bssDesc->AuthSuiteCount < MAX_AUTH_SUITE_NUM) - { - for(count = 0; count < bssDesc->AuthSuiteCount; count++) - { - Sec_MapOUITypeToAKMSuite(&pCurr[0], &pCurr[3], bssDesc->SecLvl, &(bssDesc->AuthSuite[count])); - pCurr+=4; - Readlength += 4; - } - } - bssDesc->bPreAuth = (BOOLEAN)GET_RSN_CAP_PREAUTH(pCurr); - bssDesc->NumOfPTKReplayCounter = (u1Byte)GET_RSN_CAP_PTKSA_REPLAY_COUNTER(pCurr); - bssDesc->NumOfGTKReplayCounter = (u1Byte)GET_RSN_CAP_GTKSA_REPLAY_COUNTER(pCurr); - - - // - // Get MFP Capabile and Required , Just support "WPA2" - // - if( bssDesc->SecLvl == RT_SEC_LVL_WPA2 && Readlength < RSNIE.Length ) // NOTE may need to check Len !! - { - bssDesc->bMFPC = (u1Byte)GET_RSN_CAP_MFP_CAPABLE(pCurr); - bssDesc->bMFPR= (u1Byte)GET_RSN_CAP_MFP_REQUIRED(pCurr); - pCurr += 2; - Readlength += 2; - - // Check BIP support !! - // SKIP PMKIDs - pCurr += 2; - Readlength += 2; - if( Readlength < RSNIE.Length ) - { - if( !PlatformCompareMemory( pCurr, sRSNOui , 3) && - (DOT11_AuthKeyType_1X_SHA256 == pCurr[3] || DOT11_AuthKeyType_PSK_SHA256 == pCurr[3])) - bssDesc->bMFPBIP = TRUE; - else - bssDesc->bMFPBIP = FALSE; - } - } - } - - bssDesc->PairwiseChiper = NONE_WPA; - bssDesc->GroupChiper = 0; - CLEAR_FLAGS(bssDesc->AKMsuit); - - // 1. Get WPA2 chiper - RSNIE = PacketGetElement(mmpdu, EID_WPA2, OUI_SUB_DONT_CARE , OUI_SUBTYPE_DONT_CARE); - if( RSNIE.Length != 0 ) - { - u1Byte *pCurr; - u4Byte count,i; - u4Byte Readlength =0; - - //RT_PRINT_DATA( COMP_TEST, DBG_LOUD, " WPA2 IE : ", RSNIE.Octet , RSNIE.Length ); - pCurr = RSNIE.Octet; - - // 1. Skip Version - pCurr += 2; - Readlength +=2; - - // 2. Get Group Chiper - bssDesc->GroupChiper = pCurr[3] ; - pCurr += 4; - Readlength +=4; - - // 3. Get Pairwise chiper count - count = pCurr[0]; //+ (pCurr[1]>>8); - pCurr += 2; - Readlength +=2; - - // 4. Get Pairwise chiper type - for( i = 0 ; i < count ; i++ ) - { - if( pCurr[3] == 0x02 ) - bssDesc->PairwiseChiper += WPA2_TKIP; - else if( pCurr[3] == 0x04 ) - bssDesc->PairwiseChiper += WPA2_AES; - - pCurr += 4; - Readlength +=4; - } - - // 5. Get AKM Suit count - count = pCurr[0];// + (pCurr[1]>>8); - pCurr += 2; - Readlength +=2; - - // 6. Get AKM suit - for( i = 0 ; i < count ; i++ ) - { - - if( !PlatformCompareMemory(sRSNOui , pCurr , 3)) - { - if( pCurr[3] == 0x01 ) - SET_FLAG(bssDesc->AKMsuit, AKM_WPA2_1X); - else if( pCurr[3] == 0x02 ) - SET_FLAG(bssDesc->AKMsuit, AKM_WPA2_PSK); - else if( pCurr[3] == 0x03 ) - SET_FLAG(bssDesc->AKMsuit, AKM_FT_1X); - else if( pCurr[3] == 0x04 ) - SET_FLAG(bssDesc->AKMsuit, AKM_FT_PSK); - else if( pCurr[3] == 0x05 ) - SET_FLAG(bssDesc->AKMsuit, AKM_RSNA_1X_SHA256); - else if( pCurr[3] == 0x06 ) - SET_FLAG(bssDesc->AKMsuit, AKM_RSNA_PSK_SHA256); - } - else - { - RT_TRACE(COMP_TEST , DBG_LOUD , ("===> unknow AKM !!\n")); - } - pCurr += 4; - Readlength +=4; - } - - // 7. Get RSN Cap - bssDesc->bMFPC = GET_RSN_CAP_MFP_CAPABLE(pCurr); - bssDesc->bMFPR = GET_RSN_CAP_MFP_REQUIRED(pCurr); - pCurr += 2; - Readlength +=2; - - // 8. Get BIP - if( (Readlength + 5 ) < RSNIE.Length ) - { - // Skip PMKID - pCurr += 2; - Readlength +=2; - if(!PlatformCompareMemory( pCurr, sMFPBIPOui , 4)) - { - bssDesc->bMFPBIP = TRUE; - } - } - } - // 2. Get WPA Chiper - RSNIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_WPA , OUI_SUBTYPE_DONT_CARE); - if( RSNIE.Length != 0 ) - { - u1Byte *pCurr; - u4Byte count,i; - u4Byte Readlength =0; - - //RT_PRINT_DATA( COMP_TEST, DBG_LOUD, " WPA IE : ", RSNIE.Octet , RSNIE.Length ); - pCurr = RSNIE.Octet; - - // 1. SKIP WPA OUI , Version - pCurr += 6; - Readlength += 6; - - // 2. Get Group chiper - bssDesc->GroupChiper = pCurr[3] ; - pCurr += 4; - Readlength +=4; - - // 3. Get Pairwise chiper count - count = pCurr[0]; //+ (pCurr[1]>>8); - pCurr += 2; - Readlength +=2; - - // 4. Get Pairwise chiper type - for( i = 0 ; i < count ; i++ ) - { - if( pCurr[3] == 0x02 ) - bssDesc->PairwiseChiper += WPA_TKIP; - else if( pCurr[3] == 0x04 ) - bssDesc->PairwiseChiper += WPA_AES; - - pCurr += 4; - Readlength +=4; - } - - // 5. Get AKM Suit count - count = pCurr[0] ;//+ (pCurr[1]>>8); - pCurr += 2; - Readlength +=2; - - // 6. Get AKM suit - for( i = 0 ; i < count ; i++ ) - { - if( !PlatformCompareMemory(WPATag , pCurr , 3)) - { - if( pCurr[3] == 0x01 ) - SET_FLAG(bssDesc->AKMsuit, AKM_WPA_1X); - else if( pCurr[3] == 0x02 ) - SET_FLAG(bssDesc->AKMsuit, AKM_WPA_PSK); - } - else - { - RT_TRACE(COMP_TEST , DBG_LOUD , ("===> unknow AKM !!\n")); - } - pCurr += 4; - Readlength +=4; - } - } - - -// 14. QBSS Load element. (see 802.11e/D13.0, 7.2.3.1, p37.) (AnnieTODO) - -// 15. WMM Parameter Element. Added by Annie, 2005-11-08. - // Initialize BSS_QOS - QosInitializeBssDesc( &bssDesc->BssQos ); - - // Get WMM PARAM element: DD-18-00-50-F2-02. - WMMElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_WMM, OUI_SUBTYPE_WMM_PARAM); - - // Get WMM INFO element: DD-07-00-50-F2-02. - FillOctetString(bssDesc->osWmmAcParaIE, bssDesc->WmmAcParaBuf, 0); - if(WMMElement.Length == 0) - WMMElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_WMM, OUI_SUBTYPE_WMM_INFO); - else if(WMMElement.Length == WMM_PARAM_ELEMENT_SIZE) - CopyMemOS(&bssDesc->osWmmAcParaIE, WMMElement, WMMElement.Length ); - - if(WMMElement.Length == 0) - { - bEDCAParms = TRUE; - WMMElement = PacketGetElement( mmpdu, EID_EDCAParms, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - } - - if( WMMElement.Length != 0 ) - { // Parsing WMM Element - QosParsingQoSElement( Adapter, bEDCAParms, WMMElement, bssDesc ); - }else - { - bssDesc->BssQos.bdQoSMode &= ~QOS_WMM; - } - - FillOctetString(bssDesc->osPowerConstraintIe, bssDesc->PowerConstraintBuf, 0); - PowerConstraint = PacketGetElement(mmpdu, EID_POWER_CONSTRAINT, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(PowerConstraint.Length == MAX_DOT11_POWER_CONSTRAINT_IE_LEN) - CopyMemOS(&bssDesc->osPowerConstraintIe, PowerConstraint, MAX_DOT11_POWER_CONSTRAINT_IE_LEN); - -#if DBG_CMD -// 16. HT related element. - Peer_bssDesc.BssQos.bdQoSMode = bssDesc->BssQos.bdQoSMode; - // (1) Parse HTCap, and HTInfo, and record whether it is 11n AP - // (2) If peer is HT, but not WMM, call QosSetLegacyWMMParamWithHT() - // (3) Check whether peer is Realtek AP(for Realtek proprietary aggregation mode) -#endif - - HTGetValueFromBeaconOrProbeRsp(Adapter, &mmpdu, bssDesc); - VHTGetValueFromBeaconOrProbeRsp(Adapter, &mmpdu,bssDesc); - -// 19.Extended supported rates - ExtratesBeacon = PacketGetElement(mmpdu, EID_ExtSupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( ExtratesBeacon.Length != 0) - { - CopyMem( bssDesc->bdSupportRateEXBuf+bssDesc->bdSupportRateEXLen, ExtratesBeacon.Octet, ExtratesBeacon.Length); - bssDesc->bdSupportRateEXLen += ExtratesBeacon.Length; - } - - // Keep AP support rate from beacon or prob resp. 2010.10.29. by tynli. - if(pMgntInfo->mAssoc && - !MgntScanInProgress(pMgntInfo) && - !MgntIsLinkInProgress(pMgntInfo) && - !pMgntInfo->SnifferTurnOnFlag) - { - CopyMem(pMgntInfo->SupportRatesfromBCN.Octet, bssDesc->bdSupportRateEXBuf, bssDesc->bdSupportRateEXLen); - pMgntInfo->SupportRatesfromBCN.Length = bssDesc->bdSupportRateEXLen; - } - -// 20.ERP Information - ERPInfo = PacketGetElement(mmpdu, EID_ERPInfo, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( ERPInfo.Length != 0 ) - { - bssDesc->bdERPInfo = ERPInfo.Octet[0]; - bssDesc->bERPInfoValid = TRUE; - } - else - { - bssDesc->bdERPInfo = 0; - bssDesc->bERPInfoValid = FALSE; - } - -//------------------------------------------------------------------------ -// -// 21: Realtek Inforfation Element of 8186: 00-E0-4C. -// -// 051230, Annie: Asked by SD4 David, we have to recognize 8186 IE in AutoTurbo and EnableTurbo Mode. -// 061026, Rcnjko: 8187 has compatiblility issue with 8186, so we have to recognize 8186 and adjust HW parameter. -// Added by Roger, 2006.12.07. -// - bssDesc->bRealtekCapType1Exist = FALSE; // Initialize. - RealtekElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_REALTEK_TURBO, OUI_SUBTYPE_DONT_CARE); - GetRealtekIEContentForTurboMode( Adapter, bssDesc, &RealtekElement ); - -//------------------------------------------------------------------------ - -// 22.Supported Regulatory Classes Information - RegulatoryElement = PacketGetElement(mmpdu, EID_SupRegulatory, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( RegulatoryElement.Length != 0) - bssDesc->RegulatoryClass = EF1Byte(*(u1Byte *)RegulatoryElement.Octet); - else - bssDesc->RegulatoryClass = 0; - - DFS_StaGetValueFromBeacon(Adapter, mmpdu, bssDesc); - - -#if (WPS_SUPPORT == 1) -{ - OCTET_STRING SimpleConfigInfo; - // 22: Simple Config Element added by CCW copy from 818x - //if(pSimpleConfig->bEnabled) - { - SimpleConfigInfo = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUBTYPE_DONT_CARE); - - bssDesc->bdSimpleConfIE.Octet = bssDesc->bdSimpleConfIEBuf; - bssDesc->bdSimpleConfIE.Length = (SimpleConfigInfo.Length > MAX_SIMPLE_CONFIG_IE_LEN_V2) ? MAX_SIMPLE_CONFIG_IE_LEN_V2 : SimpleConfigInfo.Length; - CopyMem( bssDesc->bdSimpleConfIE.Octet, SimpleConfigInfo.Octet, bssDesc->bdSimpleConfIE.Length); - } -} -#endif // #if (WPS_SUPPORT == 1) - - if(!GET_SIMPLE_CONFIG_ENABLED(pMgntInfo) || Adapter->bInHctTest) - UpdateBssWcnIe(bssDesc, &mmpdu); - - if(bssDesc->ChannelNumber <= 14) - bssDesc->wirelessmode = IsPeer11G(bssDesc) ? WIRELESS_MODE_G : WIRELESS_MODE_B; - else - bssDesc->wirelessmode = WIRELESS_MODE_A; - -#if DBG_CMD - Peer_bssDesc.BssHT.bdSupportHT = bssDesc->BssHT.bdSupportHT; -#endif - - if(bssDesc->BssHT.bdSupportHT) - { - RT_DISP(FBEACON, BCN_PEER, ("GetValueFromBeaconOrProbeRsp HT N mode\r\n")); - if(bssDesc->wirelessmode == WIRELESS_MODE_A) - bssDesc->wirelessmode = WIRELESS_MODE_N_5G; - else if(bssDesc->wirelessmode & (WIRELESS_MODE_G|WIRELESS_MODE_B)) - bssDesc->wirelessmode = WIRELESS_MODE_N_24G; - - if(bssDesc->BssVHT.bdSupportVHT) - { - if(bssDesc->wirelessmode == WIRELESS_MODE_N_5G) - bssDesc->wirelessmode = WIRELESS_MODE_AC_5G; - else - bssDesc->wirelessmode = WIRELESS_MODE_AC_24G; - } - } - else - RT_DISP(FBEACON, BCN_PEER, ("GetValueFromBeaconOrProbeRsp Not HT N mode\r\n")); - - TDLS_GetValueFromBeaconOrProbeRsp(Adapter, &mmpdu, bssDesc); - - // - // IOT Action - // - bssDesc->Vender = HT_IOT_PEER_UNKNOWN; - bssDesc->bRealtekAggCapExist = FALSE; - RecognizePeer( Adapter,&mmpdu, bssDesc); - - return TRUE; -} - - -VOID -RecognizePeer( - PADAPTER Adapter, - POCTET_STRING pInmmpdu, - PRT_WLAN_BSS bssDesc - ) -{ - OCTET_STRING IElement; - OCTET_STRING mmpdu; - u4Byte Length = 0; - - FillOctetString(mmpdu, pInmmpdu->Octet, pInmmpdu->Length) - - // 2011/11/03 MH Add peer recognize for WNDAP3200 bad TP in HT40 auto channel mode. It will send - // illegal response packet in extension channel. All RTK IC will meet the same problem. - if (PlatformCompareMemory(bssDesc->bdBssIdBuf, NETGEAR_WNDAP3200_1, 3)==0) - { - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - bssDesc->Vender = HT_IOT_PEER_ATHEROS; - bssDesc->SubTypeOfVender = HT_IOT_PEER_ATHEROS_NETGEAR_WNDAP3200; - // ugly revise due to BW set is before HT IOT recognize in seup join info. We are afraid - // There are other AP which we have to disable channel combine ability. - pMgntInfo->IOTAction |=HT_IOT_ACT_DISABLE_EXT_CHNL_COMBINE; - return; - } - - if (PlatformCompareMemory(bssDesc->bdBssIdBuf, NETGEAR_WNDAP3500_1, 3)==0) - { - bssDesc->Vender = HT_IOT_PEER_MARVELL; - bssDesc->SubTypeOfVender = HT_IOT_PEER_ATHEROS_NETGEAR_WNDAP3500; - return; - } - - // 2011/11/28 MH Need to disable TXOP to prevent serious collision with the AP. - if (PlatformCompareMemory(bssDesc->bdBssIdBuf, NETGEAR_WNDAP4500_1, 3)==0) - { - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - bssDesc->Vender = HT_IOT_PEER_BROADCOM; - bssDesc->SubTypeOfVender = HT_IOT_PEER_BROADCOM_NETGEAR_WNDAP4500; - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_AC_TXOP; - //return; - } - - if (PlatformCompareMemory(bssDesc->bdBssIdBuf, CMW500, 6)==0) - { - bssDesc->Vender = HT_IOT_PEER_CMW500; - return; - } - - //3 Atheros OUI - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_ATHEROS_IE_1, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length == 0) - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_ATHEROS_IE_2, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_ATHEROS; - if(PlatformCompareMemory(bssDesc->bdBssIdBuf, DLINK_ATHEROS_DIR655_4, 3)==0) - bssDesc->SubTypeOfVender = HT_IOT_PEER_ATHEROS_DIR655; - else if(PlatformCompareMemory(bssDesc->bdBssIdBuf, TPLINK_AC1750, 3)==0) - bssDesc->SubTypeOfVender = HT_IOT_PEER_TPLINK_AC1750; - - return; - } - - // mark by hpfan 2009.08.04 For some version of DIR655 can not be recognized from mac address - // Some of the Dlink AP such as DIR655 or DIR855 does not contain OUI - if((PlatformCompareMemory(bssDesc->bdBssIdBuf, DLINK_ATHEROS_DIR635_1, 3)==0) || - (PlatformCompareMemory(bssDesc->bdBssIdBuf, DLINK_ATHEROS_DIR635_2, 3)==0)) - { - bssDesc->Vender = HT_IOT_PEER_ATHEROS; - bssDesc->SubTypeOfVender = HT_IOT_PEER_ATHEROS_DIR635; - return; - } - - - //3 Ralink OUI - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_RALINK_IE, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_RALINK; - if(!PlatformCompareMemory(bssDesc->bdBssIdBuf, DLINK_RALINK_DIR300, 3)) - { - bssDesc->SubTypeOfVender = HT_IOT_PEER_RALINK_DIR300; - } - return; - } - - //3 Cisco OUI - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_CISCO_IE, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_CISCO; - return; - } - - //3 Meru OUI - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_MERU_IE, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_MERU; - return; - } - - //2 BroadCom OUI - // 2008/01/25 MH Get Broadcom AP IE for manamgent frame CCK rate problem. - // AP can not receive CCK managemtn from from 92E. - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_BROADCOM_IE_1, OUI_SUBTYPE_DONT_CARE); - Length += IElement.Length; - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_BROADCOM_IE_2, OUI_SUBTYPE_DONT_CARE); - Length += IElement.Length; - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_BROADCOM_IE_3, OUI_SUBTYPE_DONT_CARE); - Length += IElement.Length; - if(Length > 0) - { - bssDesc->Vender = HT_IOT_PEER_BROADCOM; - Length = 0; - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_BROADCOM_LINKSYSE4200_IE_1, OUI_SUBTYPE_DONT_CARE); - Length += IElement.Length; - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_BROADCOM_LINKSYSE4200_IE_1, OUI_SUBTYPE_DONT_CARE); - Length += IElement.Length; - IElement = PacketGetElement( mmpdu, EID_Vendor, OUI_SUB_BROADCOM_LINKSYSE4200_IE_1, OUI_SUBTYPE_DONT_CARE); - Length += IElement.Length; - if(Length > 0) - bssDesc->SubTypeOfVender = HT_IOT_PEER_LINKSYS_E4200_V1; - - return; - } - - //3 Marvell OUI - IElement = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_MARVELL, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_MARVELL; - return; - } - - //3 Airgo OUI - IElement = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_AIRGO, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_AIRGO; - return; - } - - //3 Realtek OUI - IElement = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_REALTEK_AGG, OUI_SUBTYPE_DONT_CARE); - if(IElement.Length != 0) - { - bssDesc->Vender = HT_IOT_PEER_REALTEK; - bssDesc->bRealtekAggCapExist = TRUE; - - if(IElement.Length >= 5) - { - if(bssDesc->BssHT.bdSupportHT) - { - bssDesc->BssHT.RT2RT_HT_Mode |= RT_HT_CAP_USE_TURBO_AGGR; - - if(IElement.Octet[4]==1) - { - if(IElement.Octet[5] & RT_HT_CAP_USE_LONG_PREAMBLE) - bssDesc->BssHT.RT2RT_HT_Mode |= RT_HT_CAP_USE_LONG_PREAMBLE; - - if(IElement.Octet[5] & RT_HT_CAP_USE_92SE) - { - bssDesc->BssHT.RT2RT_HT_Mode |= RT_HT_CAP_USE_92SE; - bssDesc->Vender = HT_IOT_PEER_REALTEK_92SE; - } - } - } - - if(IElement.Octet[5] & RT_HT_CAP_USE_SOFTAP) - bssDesc->Vender = HT_IOT_PEER_REALTEK_SOFTAP; - - if(IElement.Octet[4] == 2) - { - if(IElement.Octet[6] & RT_HT_CAP_USE_JAGUAR_BCUT) - bssDesc->Vender = HT_IOT_PEER_REALTEK_JAGUAR_BCUTAP; - else if(IElement.Octet[6] & RT_HT_CAP_USE_JAGUAR_CCUT) - bssDesc->Vender = HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP; - } - - } - return; - } - -} - - - - - -BOOLEAN -bActiveScan( - PMGNT_INFO pMgntInfo, - PRT_CHNL_LIST_ENTRY pChnlListEntry -) -{ - BOOLEAN ret = FALSE; - PRT_SSIDS_TO_SCAN pSsidsToScan = &(pMgntInfo->SsidsToScan); - u2Byte i; - - if(pChnlListEntry->ScanType == SCAN_MIX) - { - if(IS_DOT11D_ENABLE(pMgntInfo) && (!IS_COUNTRY_IE_VALID(pMgntInfo))) - ret = FALSE; - else if(pMgntInfo->bScanOnly == FALSE || pSsidsToScan->NumSsid > 0) - { - u1Byte j; - PRT_CHANNEL_LIST pChannelList = GET_RT_CHANNEL_LIST(pMgntInfo); - for(j = 0; j < pChannelList->ChannelLen; j++) - { - if(pChannelList->ChnlListEntry[j].ChannelNum == pChnlListEntry->ChannelNum) - { - break; - } - } - if(j == pChannelList->ChannelLen) - ret = FALSE; - else if( pChannelList->EachChannelSTAs[j] > 0) - ret = TRUE; - else - ret = FALSE; - } - else - ret = FALSE; - } - else if(pChnlListEntry->ScanType == SCAN_PASSIVE) - { - if(DFS_5G_RADAR_CHANNEL(pChnlListEntry->ChannelNum)) - { - for(i=0;iNumBssDesc4Query;i++) - { -#if (DFS_SUPPORT == 1) - if(pMgntInfo->DFSMgnt.staMode.dfsOldConnectedChannel == pChnlListEntry->ChannelNum) - ret = FALSE; -#endif - if( (pMgntInfo->bssDesc4Query[i].HistoryCount == History_Count_Limit) && - (pMgntInfo->bssDesc4Query[i].ChannelNumber == pChnlListEntry->ChannelNum)) - ret = TRUE; - } - - } - else - { - ret = FALSE; - } - } - else if(pChnlListEntry->ScanType == SCAN_ACTIVE) - { - ret = TRUE; - } - - //2 Carrier Sense Test - // <20140414, Kordan> Under a carrier sense test (Adaptvity=1 && CarrierSense=1), we do not - // send the probe request on all sub-channels of current center frequency. (Asked by Yu Chen) - if (pMgntInfo->RegEnableAdaptivity && pMgntInfo->RegEnableCarrierSense && pMgntInfo->bMediaConnect == FALSE) - { - int channel = pChnlListEntry->ChannelNum; - DbgPrint("[kordan] (pChnlListEntry->ChannelNum, LastConnectedBandwidth, LastConnectedCenterFrequency) = (%d, %d, %d)\n", - channel, pMgntInfo->LinkDetectInfo.LastConnectedBandwidth, pMgntInfo->LinkDetectInfo.LastConnectedCenterFrequency); - switch (pMgntInfo->LinkDetectInfo.LastConnectedBandwidth) - { - case CHANNEL_WIDTH_40: - if (channel-4 <= pMgntInfo->LinkDetectInfo.LastConnectedCenterFrequency && - pMgntInfo->LinkDetectInfo.LastConnectedCenterFrequency <= channel+4) - ret = FALSE; - break; - case CHANNEL_WIDTH_80: - if (channel-8 <= pMgntInfo->LinkDetectInfo.LastConnectedCenterFrequency && - pMgntInfo->LinkDetectInfo.LastConnectedCenterFrequency <= channel+8) - ret = FALSE; - break; - default: - break; - } - - } - - return ret; -} - - -BOOLEAN -SelectChnlListEntry( - IN PADAPTER Adapter, - IN u1Byte ChannelNumber, - IN u1Byte DualBandArrayLen, - IN PRT_CHNL_LIST_ENTRY ChnlListDualBandArray, - OUT PRT_CHNL_LIST_ENTRY *pChnlListEntry - ) -{ - u1Byte i; - BOOLEAN ret = FALSE; - - if(IS_DUAL_BAND_SUPPORT(Adapter)) - { - for(i = 0; i < DualBandArrayLen; i++) - { - if(ChnlListDualBandArray[i].ChannelNum != ChannelNumber) - continue; - else - break; - } - - if(i == DualBandArrayLen) - ret = FALSE; - else - { - ret = TRUE; - *pChnlListEntry = ChnlListDualBandArray+i; - } - } - else - { - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &ChannelNumber, pChnlListEntry); - if(*pChnlListEntry == NULL) - ret = FALSE; - else - ret = TRUE; - } - - return ret; -} - -BOOLEAN -CheckSupportRate( - IN PADAPTER pAdapter, - IN RT_WLAN_BSS *bssdesc - ) -{ - - //3 // 802.11g only and 802.11a/g can not connect to 802.11b only AP - if(IS_WIRELESS_MODE_WITHOUT_B(pAdapter->RegOrigWirelessMode) && (bssdesc->wirelessmode & WIRELESS_MODE_B)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("CheckSupportRate(): 802.11g only and 802.11a/g cannot connect to 802.11b only AP\n")); - return TRUE; - } - - //3 // 802.11b only can not connect to 802.11g only and 802.11a/g AP - if(IS_WIRELESS_MODE_B_ONLY(pAdapter->RegWirelessMode) && !Is11bBasicRate(bssdesc)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("CheckSupportRate(): 802.11b only cannot connect to 802.11g only and 802.11a/g AP\n")); - return TRUE; - } - - return FALSE; -} - -VOID -GetScanInfo( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_WLAN_BSS *bssdesc; - OCTET_STRING mmpdu; - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - - mmpdu.Octet = pRfd->Buffer.VirtualAddress; - mmpdu.Length = pRfd->PacketLength; - - RT_TRACE(COMP_SCAN,DBG_TRACE, ("====>GetScanInfo(): portnumber %d NumBssDesc %d\n", Adapter->pNdis62Common->PortNumber, pMgntInfo->NumBssDesc)); - - if( (pMgntInfo->state_Synchronization_Sta < STATE_Act_Receive) || - (pMgntInfo->state_Synchronization_Sta > STATE_Act_Listen) - ) - { - RT_TRACE(COMP_SCAN, DBG_TRACE,("GetScanInfo(): ERROR pMgntInfo->state_Synchronization_Sta = %d\n", pMgntInfo->state_Synchronization_Sta)); - return; - } - - //if(Adapter->bInHctTest) - // - // FilterHiddenAP is set by MgntLinkRequest , - // Now MgntLinkRetry , FilterHiddenAP will same as bHiddenSSIDEnable - // normal case : - // In XP we always "NO" filter hidden - // In Vista/Win7 , we will filter hidden when OS set bHiddenSSIDEnable. - if(pMgntInfo->FilterHiddenAP && pMgntInfo->bHiddenSSIDEnable) - { - if( NullSSID(mmpdu) ){ - RT_TRACE(COMP_SCAN, DBG_LOUD,("HCT:GetScanInfo(): discard for null ssid\n")); - return; - } - } - - // Customer special requirement, it should supportby demand. - if (Adapter->RegWirelessMode == WIRELESS_MODE_AC_ONLY) - { - if (VHTModeSupport(Adapter, &mmpdu) == FALSE) - { - return; - } - } - - bssdesc = BssDescDupSource( Adapter, pRfd ); - if( bssdesc == NULL ) - { - // Add a new bssdesc entry - if( pMgntInfo->NumBssDesc < MAX_BSS_DESC) - { - bssdesc = &pMgntInfo->bssDesc[pMgntInfo->NumBssDesc]; - } - else - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("GetScanInfo(): ERROR! No bssdesc entry. NumBssDesc %d MAX_BSS_DESC %d\n", pMgntInfo->NumBssDesc, MAX_BSS_DESC)); - return; - } - - // ShuChen TODO: Check Broadcom AP's 1M-Short Preamble issue. - GetValueFromBeaconOrProbeRsp( Adapter, pRfd, bssdesc, FALSE); - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &(bssdesc->ChannelNumber), &pChnlListEntry); - - if(!pChnlListEntry) - return; - - if(CheckSupportRate(Adapter, bssdesc)) - return; - - // - // In theory, we cannot receive the probe responses at this channel with passive scan, so filter this probe response to - // prevent from joining the Hidden AP at passive scaning channel. By Bruce, 2008-09-08. - // - if( (PacketGetType(mmpdu) == Type_Probe_Rsp) && (bActiveScan(pMgntInfo,pChnlListEntry) == FALSE)) - { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("GetScanInfo(): Filter probe response at passive scaning channel(%d).\n", - bssdesc->ChannelNumber)); - return; - } - - - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("GetScanInfo(): create new BssDesc at ch %d, bss index:%d\n", bssdesc->ChannelNumber, pMgntInfo->NumBssDesc)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("GetScanInfo(): New SSID: %s \n",bssdesc->bdSsIdBuf)); - RT_PRINT_ADDR(COMP_SCAN, DBG_TRACE, "GetScanInfo(): new Bss BSSID:", bssdesc->bdBssIdBuf); - RT_PRINT_STR(COMP_SCAN, DBG_LOUD, "GetScanInfo(): new Bss SSID:", bssdesc->bdSsIdBuf, bssdesc->bdSsIdLen); - RT_TRACE(COMP_SCAN, DBG_TRACE, ("GetScanInfo(): new BssDesc is %d HT mode\n", bssdesc->BssHT.bdSupportHT)); - pMgntInfo->NumBssDesc += 1; - - if( pMgntInfo->bNeedSkipScan - && CompareSSID(pMgntInfo->Ssid.Octet,pMgntInfo->Ssid.Length,bssdesc->bdSsIdBuf,bssdesc->bdSsIdLen) ) - { - //pMgntInfo->bNeedSkipScan = FALSE; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("GetScanInfo():bCompleteScan %d \n", pMgntInfo->bCompleteScan)); - pMgntInfo->bCompleteScan = TRUE; - } - - } - else - { - u1Byte RSSI = bssdesc->RSSI; // 0-100 index.. - s4Byte RecvSignalPower = bssdesc->RecvSignalPower ; // dBm. - u1Byte SignalQuality = bssdesc->SignalQuality; // 0-100 index. - - GetValueFromBeaconOrProbeRsp(Adapter, pRfd, bssdesc, TRUE); - - // Update the exist BSS. - if(pRfd->Status.SignalStrength < RSSI) - { //3 Update signal information to a better packet - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - if(pHalData->CurrentChannel != bssdesc->ChannelNumber) - { - bssdesc->RSSI = RSSI; - bssdesc->RecvSignalPower = RecvSignalPower; - bssdesc->SignalQuality = SignalQuality; - } - } - - if(!GET_SIMPLE_CONFIG_ENABLED(pMgntInfo) || - Adapter->bInHctTest) - { - UpdateBssWcnIe(bssdesc, &mmpdu); - } - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &(bssdesc->ChannelNumber), &pChnlListEntry); - - if(!pChnlListEntry) - return; - - // - // In theory, we cannot receive the probe responses at this channel with passive scan, so filter this probe response to - // prevent from joining the Hidden AP at passive scaning channel. By Bruce, 2008-09-08. - // - if((PacketGetType(mmpdu) == Type_Probe_Rsp) && (pChnlListEntry->ScanType == SCAN_PASSIVE)) - { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("GetScanInfo(): Filter probe response at passive scaning channel(%d).\n", - bssdesc->ChannelNumber)); - return; - } - } - - if(bssdesc != NULL) - { - DFS_StaCheckRadarChnl(Adapter, bssdesc); - - // Check SSIDL for CCX S53. Slpit the beacon and insert into the list. - // Move it to scan complete - // CCXGetSSIDLToBssList(Adapter, bssdesc); - - // - // Moved from GetValueBeaconOrProbeRsp to here. We should check the channel is valid first and then update the country IE. - // By Bruce, 2008-11-12. - // - if(IS_DOT11D_ENABLE(pMgntInfo)) - { - if(bssdesc->bdCountryIE.Length != 0) - { - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, "GetScanInfo(): Country IE:", - bssdesc->bdCountryIE.Octet, bssdesc->bdCountryIE.Length); - if(!IS_COUNTRY_IE_VALID(pMgntInfo)) - { - Dot11d_UpdateCountryIe(Adapter, bssdesc->bdMacAddressBuf, &bssdesc->bdCountryIE); - } - else if( IS_EQUAL_CIE_SRC(pMgntInfo, bssdesc->bdMacAddressBuf) ) - { - RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, "GetScanInfo(): Dot11dCountry IE:", - GET_DOT11D_INFO(pMgntInfo)->CountryIeBuf, GET_DOT11D_INFO(pMgntInfo)->CountryIeLen); - // Check if this country IE is changed. - if(!IS_COUNTRY_IE_CHANGED(pMgntInfo, bssdesc->bdCountryIE)) - { - UPDATE_CIE_WATCHDOG(pMgntInfo); - } - } - } - } - - - } -} - -BOOLEAN -InPrefferedBssidList( - IN PADAPTER Adapter, - IN pu1Byte MacAddr - ) -{ - // check if debug mode, used for that we want to connect the AP with desired bssid - if(bDebugFixBssid) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("InPrefferedBssidList(): Fixed bssid!!!\n")); - if(eqMacAddr(debug_fixed_bssid, MacAddr)) - { - return TRUE; - } - else - return FALSE; - } - - return TRUE; -} - -// -// Description: -// Select an BSS according to the input SSID to be joined. -// We use the list "bssDesc4Query" in pMgntInfo instead of "bssDesc", because the scan list -// is consistent with the returned list for query to the OS. -// Argument: -// Adapter - -// NIC adapter context pointer. -// ssid2match - -// The SSID to be met. -// bRoaming - -// Roaming operation indicates to select a different BSSID with the current one. -// pRtBss - -// BSS descriptor object returned if it meets the selection conditions. I rewrote this variable -// definition by "copying all info into this desc" instead of pointer, because the Bss we selected -// in the scan list is probably chnaged from everywhere, and we need this desc's info for a long -// time. Therefore, it's safer copy this Bss to the local buffer. -// Return: -// RT_JOIN_ACTION. -// Note: -// In actual, there may be several BSSs that meet the required SSID, -// however, we choose the best one based on the various conditions. -// -// Revised by Bruce, 2009-02-09. -// -RT_JOIN_ACTION -SelectNetworkBySSID( - IN PADAPTER Adapter, - IN OCTET_STRING *ssid2match, - IN BOOLEAN bRoaming, - OUT PRT_WLAN_BSS pRtBss - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_JOIN_ACTION join_action = RT_NO_ACTION; - RT_JOIN_NETWORKTYPE CurrBSSType; - u4Byte i, MaxWeight = 0, CurrWeight = 0; - BOOLEAN bSameSSIDIbss = FALSE; - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - PRT_WLAN_BSS pRtMatchedBss = NULL, pRtTmpBss = NULL; - - u1Byte DualBandArrayLen = 0; - RT_CHNL_LIST_ENTRY pChnlListDualBandArray[MAX_CHANNEL_NUM] = {0}; - - - if(pRtBss == NULL) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("SelectNetworkBySSID(): pRtBss = NULL, return RT_NO_ACTION!!\n")); - return RT_NO_ACTION; - } - - CurrBSSType = MgntActQuery_802_11_INFRASTRUCTURE_MODE(Adapter); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SelectNetworkBySSID(): %s \n", ssid2match->Octet)); - RT_PRINT_STR(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID \n"), ssid2match->Octet, ssid2match->Length); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): BssDescNum = %d CurrBSSType %d\n", pMgntInfo->NumBssDesc4Query, CurrBSSType)); - - - if(IS_DUAL_BAND_SUPPORT(Adapter)) - DualBandArrayLen = RtGetDualBandChannel(Adapter, pChnlListDualBandArray); - - for(i = 0; i < pMgntInfo->NumBssDesc4Query; i ++) - { - // Get channel info and determine if this channel is valid to join. - pChnlListEntry = NULL; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): SSID:%s, at channel %d\n",pMgntInfo->bssDesc4Query[i].bdSsIdBuf,pMgntInfo->bssDesc4Query[i].ChannelNumber)); - RT_PRINT_STR(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID SSID \n"), pMgntInfo->bssDesc4Query[i].bdSsIdBuf, pMgntInfo->bssDesc4Query[i].bdSsIdLen); - RT_PRINT_ADDR(COMP_SCAN, DBG_LOUD, "SelectNetworkBySSID(): Bss BSSID:", pMgntInfo->bssDesc4Query[i].bdBssIdBuf); - - if(FALSE == SelectChnlListEntry(Adapter, pMgntInfo->bssDesc4Query[i].ChannelNumber, DualBandArrayLen, pChnlListDualBandArray, &pChnlListEntry)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): SelectChnlListEntry return FALSE\n")); - continue; - } - - - pRtTmpBss = &(pMgntInfo->bssDesc4Query[i]); - - CurrWeight = 0; - - //3 // Check SSID - if( !IsSSIDAny(*ssid2match) ) - { - if(CHECK_HIDDEN_SSID(Adapter)) - { - // 2013/10/15 MH When create adhoc, it will be aborted in open sapce if there is a hidden ap. Why the AC series - // execute different behavior with other IC?? in check in V4444. After discussing with Maddest, use XP compile - // flag to disable temporarily. Need to revise with better way. Only we will not consider XP case in the future~!? - if(!CompareSSID(pRtTmpBss->bdSsIdBuf, pRtTmpBss->bdSsIdLen, ssid2match->Octet, ssid2match->Length)) - { - continue; - } - - } - else if(!CompareSSID(pRtTmpBss->bdSsIdBuf, pRtTmpBss->bdSsIdLen, ssid2match->Octet, ssid2match->Length)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): SSID mismatch\n")); - continue; - } - - CurrWeight += WEIGHTING_SAME_SSID; - } - else - { - // 2007-11-30 Isaiah : Because SecurityInfo.PairwiseEncAlgorithm & SecLvl initial value is WPA2-PSK AES, - // We have a chance to connect OPEN-WEP AP and MacOS UI shows "connect" and "security field" = WAP2-PSK AES. - // Connection State would last few minutes, it looks strange said by QC.CCW solved it. - - if(pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeShared || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm > RT_ENC_ALG_NO_CIPHER) - { - pRtMatchedBss = NULL; - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Check security\n")); - break; - } - } - - //3 // User specify network infrastructure to match - if(((pRtTmpBss->bdCap & cESS) && (CurrBSSType == RT_JOIN_NETWORKTYPE_ADHOC)) || - ((pRtTmpBss->bdCap & cIBSS) && (CurrBSSType == RT_JOIN_NETWORKTYPE_INFRA))) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Matched bdCap and CurrBSSType\n")); - continue; - } - - //3 // Do not join the IBSS in this channel. - // 2011/04/28 MH For 92D BSOD case prevention, pChnlListEntry might be NULL for VS. Need better revise later. - if(pChnlListEntry) - { - if((pRtTmpBss->bdCap & cIBSS) && (pChnlListEntry->ExInfo & CHANNEL_EXINFO_NO_IBSS_JOIN)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): CHANNEL_EXINFO_NO_IBSS_JOIN\n")); - continue; - } - } - - // For the Connect BSS Selection Override, the best way is fill the target BSS using parameters from UE. -#if CONNECT_BSS_SELECTION_OVERRIDE - if(!InPrefferedBssidList(Adapter, pRtTmpBss->bdBssIdBuf) && !bRoaming) -#else - if(!InPrefferedBssidList(Adapter, pRtTmpBss->bdBssIdBuf)) -#endif - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): BSSID is not in the preffered bssid list\n")); - continue; - } - - //3 // Check if this BSSID is in the desired list - // It is always true except under Ndis6. By Bruce, 2008-05-27. - // In roaming case, we don't need to care about the desired BSSID list. -#if CONNECT_BSS_SELECTION_OVERRIDE - if (!IsInDesiredBSSIDList(Adapter, pRtTmpBss->bdBssIdBuf) && !bRoaming) -#else - if (!IsInDesiredBSSIDList(Adapter, pRtTmpBss->bdBssIdBuf)) -#endif - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): BSSID is not in the desired list\n")); - continue; - } - - //3 // Check the roaming condition. -#if CONNECT_BSS_SELECTION_OVERRIDE - if(bRoaming) - { - // We need select a different BSSID. - if(eqMacAddr(pMgntInfo->Bssid, pRtTmpBss->bdBssIdBuf)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Different BSSID\n")); - continue; - } - // Check QBSS Load - if(!CheckQBssLoad(Adapter, pRtTmpBss)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Check QBSS Load\n")); - continue; - } - } -#endif - - -#if (WPS_SUPPORT == 1) - { - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - - if(pSimpleConfig->bEnabled && (!BeHiddenSsid(pRtTmpBss->bdSsIdBuf,pRtTmpBss->bdSsIdLen)) && (CurrWeight >= WEIGHTING_SAME_SSID)) - { - if(eqMacAddr(pMgntInfo->Bssid, pRtTmpBss->bdBssIdBuf)) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): WPS BSSID Weight More\n"), pMgntInfo->Bssid); - CurrWeight += WEIGHTING_SAME_BSSID; - } - } - } -#endif - - //3 // Config for WPS - //For WPS connect to a AP, we lie to ndis and send out Auth request - //if WPS be enable modify by Mars on 12th April 2007 - //we modify here for wep in XP and modify it to fix XP and Vista -#if 0//(WPS_SUPPORT == 1) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - - RT_TRACE(COMP_WPS, DBG_LOUD,( "Simple Config WPS IS bEnabled %d \n",pSimpleConfig->bEnabled)); - if(pSimpleConfig->bEnabled && - CompareSSID(pRtTmpBss->bdSsIdBuf, pRtTmpBss->bdSsIdLen, ssid2match->Octet, ssid2match->Length)) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("SelectNetworkBySSID(): In WPS Lie to Autoconfig\n")); - if(pRtTmpBss->bdCap & cPrivacy) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("==>WPS changr security mode to open for connect\n")); -#ifdef NDIS60_MINIPORT - pRtTmpBss->bdCap = pRtTmpBss->bdCap & 0xffef; -#else - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_NO_CIPHER - || pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) - { - pRtTmpBss->bdCap = pRtTmpBss->bdCap & 0xffef; - } -#endif - } - } - - -} -#endif - - //3 // Check BSS security - if(!CheckBSSSetting(Adapter, pRtTmpBss)) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): BSS has incompatiable parameters, bssid -> ", pRtTmpBss->bdBssIdBuf); - if(Adapter->bInHctTest) - pMgntInfo->state_Synchronization_Sta = STATE_Pas_Listen; - - if(CurrBSSType == RT_JOIN_NETWORKTYPE_ADHOC) - bSameSSIDIbss = TRUE; - - continue; - } - - //3 //Check if This BSS is a cached bss. - if((0 < pRtTmpBss->HistoryCount) && (pRtTmpBss->HistoryCount < History_Count_Limit)) - { - if(pMgntInfo->AntennaTest != 1) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): cached BSDD, bssid Skip...-> ", pRtTmpBss->bdBssIdBuf); - continue; - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Antenna testing...\n")); - } - } - - //3 // Security Deny List - // Deny to link to the AP if TKIP MIC error occured twice in 60 sec. - // 2004.10.06, by rcnjko. - if(SecIsInDenyBssidList( &(pMgntInfo->SecurityInfo), pRtTmpBss->bdBssIdBuf)) - { - RT_PRINT_ADDR(COMP_MLME | COMP_SEC, DBG_LOUD, "SelectNetworkBySSID(): Security Deny bssid Skip...-> ", pRtTmpBss->bdBssIdBuf); - continue; - } - - // Excluded List - if(MgntIsInExcludedMACList(Adapter, pRtTmpBss->bdBssIdBuf)) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): Skip this BSSID because of excluded list! ", pRtTmpBss->bdBssIdBuf); - continue; - } - - // When antenna test, connect to AP which BSS power is the best. - if((pMgntInfo->AntennaTest == 1) && (pRtMatchedBss != NULL)) - { - if(pRtTmpBss->RecvSignalPower > pRtMatchedBss->RecvSignalPower) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): BssPower %d > %d\n", pRtTmpBss->RecvSignalPower, pRtMatchedBss->RecvSignalPower)); - CurrWeight += WEIGHTING_BEST_RSSI; - } - } - - //3 // Weight user selected prefer band. - if(((pMgntInfo->RegPreferBand == 1) && IS_24G_WIRELESS_MODE(pRtTmpBss->wirelessmode)) || - ((pMgntInfo->RegPreferBand == 2) && IS_5G_WIRELESS_MODE(pRtTmpBss->wirelessmode))) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Weight the prefer band\n")); - CurrWeight += WEIGHTING_PREFER_BAND; - } - - //3 // Caculate the weight of BSS to determine which BSS is the Best. - CurrWeight += pRtTmpBss->RSSI; - - //3 // Weight the probe response packet. - CurrWeight += (pRtTmpBss->BssPacketType & BSS_PKT_PROBE_RSP) ? WEIGHTING_PROBE_RSP : 0; - - //3 // Weight channel load. - // 1. For CCX test plan v4.59 6.2.1.1 and 6.2.1.2, 070625, by rcnjko. - // 2. Assume the channel utilization of BSS without channel load is 50%. - if(pRtTmpBss->BssQos.bQBssLoadValid) - { - u1Byte ChnlWeight = 0xff - GET_QBSS_LOAD_CHNL_UTILIZATION(pRtTmpBss->BssQos.QBssLoad); - ChnlWeight /= 8; // translate [0,255] to [0,31]. - CurrWeight += ChnlWeight; - } - else - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): No QBSS Load", pRtTmpBss->bdBssIdBuf); - CurrWeight += WEIGHTING_DEFAULT_QBSS_LOAD; - } - - //3 // Connect back to the origianl associated AP after S3/S4. - // Add bRoamingbySleep for DTM 1.0c test ,070823 - // In this case, we should connect back to the original AP by weighting the case of the same BSSID. - // By Bruce, 2008-05-23. - if( pMgntInfo->RoamingType == RT_ROAMING_BY_SLEEP || - pMgntInfo->RoamingType == RT_ROAMING_BY_DEAUTH) - { - if(eqMacAddr(pMgntInfo->Bssid, pRtTmpBss->bdBssIdBuf)) - { - RT_TRACE(COMP_MLME, DBG_TRACE, ("SelectNetworkBySSID(): RT_ROAMING_BY_SLEEP/RT_ROAMING_BY_DEAUTH Weight More\n")); - CurrWeight += WEIGHTING_SAME_BSSID; - } - } - - //3 // Reject AP List - if(MgntIsInRejectedAPList(Adapter, pRtTmpBss->bdBssIdBuf)) - { - if (CurrWeight > WEIGHTING_SAME_SSID + WEIGHTING_PROBE_RSP) - CurrWeight -= (WEIGHTING_SAME_SSID + WEIGHTING_PROBE_RSP); - else - CurrWeight = 0; - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): In Reject List --> \n", pRtTmpBss->bdBssIdBuf); - } - - //2 // ***Get The Best BSS by Comparing All Candidates*** - if( pRtMatchedBss == NULL ) - { - MaxWeight = CurrWeight; - pRtMatchedBss = pRtTmpBss; - } - else if(CurrWeight > MaxWeight) - { - MaxWeight = CurrWeight; - pRtMatchedBss = pRtTmpBss; - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): The current Max Weight of BSS: \n", pRtTmpBss->bdBssIdBuf); - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): BssPower = %d\n", pRtTmpBss->RecvSignalPower)); - } - }//end for( i=0; iNumBssDesc; i++) - - - if(pRtMatchedBss) - { // An BSS has been selected. - if(pRtMatchedBss->bdCap & cESS) - { - if(CurrBSSType != RT_JOIN_NETWORKTYPE_ADHOC) - join_action = RT_JOIN_INFRA; - } - else if(pRtMatchedBss->bdCap & cIBSS ) - { - if(CurrBSSType != RT_JOIN_NETWORKTYPE_INFRA ) - join_action = RT_JOIN_IBSS; - } - - // Copy to the input buffer. - PlatformZeroMemory(pRtBss, sizeof(RT_WLAN_BSS)); - CopyWlanBss(pRtBss, pRtMatchedBss); - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SelectNetworkBySSID(): macth bssid \n", pRtBss->bdBssIdBuf); - pMgntInfo->bIbssStarter = FALSE; - } - else - { //match not found - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): no BSS matched, Regdot11networktype = %d\n", pMgntInfo->Regdot11networktype)); - - join_action = RT_NO_ACTION; - - do - { - if( (CurrBSSType == RT_JOIN_NETWORKTYPE_INFRA)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Do not start IBSS if RT_JOIN_NETWORKTYPE_INFRA!<=== \n")); - break; - } - // Do not start IBSS if it is joined only. - else if(GetIbssbJoinOnly(Adapter)) - { - join_action = RT_NO_ACTION; - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Do not start IBSS for Join Only!<=== \n")); - break; - } - else if(bSameSSIDIbss) - { - join_action = RT_NO_ACTION; - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): Do not start IBSS for security mismatch<=== \n")); - break; - } - - //Will start a adhoc at channel:pMgntInfo->Regdot11ChannelNumber -#if 0 - if(IS_DUAL_BAND_SUPPORT(Adapter)) - { - WIRELESS_MODE wirelessmode; - - if(IS_WIRELESS_MODE_5G(Adapter)) - { - if(pMgntInfo->Regdot11ChannelNumber <= 14) - { - wirelessmode = WIRELESS_MODE_N_24G; - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)(wirelessmode)); - } - } - else if(IS_WIRELESS_MODE_24G(Adapter)) - { - if(pMgntInfo->Regdot11ChannelNumber > 14) - { - wirelessmode = WIRELESS_MODE_N_5G; - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)(wirelessmode)); - } - } - } -#else - RT_TRACE(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - HalChangeWirelessMode(Adapter, pMgntInfo->Regdot11ChannelNumber); -#endif - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &(pMgntInfo->Regdot11ChannelNumber), &pChnlListEntry); - - if(!pChnlListEntry) // Invalid channel - return RT_NO_ACTION; - - if(pChnlListEntry->ExInfo & CHANNEL_EXINFO_NO_IBSS_START) // Cannot start IBSS at this channel. - return RT_NO_ACTION; - - // - // Switch to channel specified before. - // NOTE: For an IBSS Creator, Regdot11ChannelNumber should be assigned before. - // Otherwise(e.g. wzcsvc), we should set it to a valid channel on current band. - // 2004.10.07, by rcnjko. - // - MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(Adapter, pMgntInfo->Regdot11ChannelNumber); - // Start an IBSS of given SSID. - join_action = RT_START_IBSS; - }while(FALSE); - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("SelectNetworkBySSID(): join_action = %d<=== \n", join_action)); - return join_action; -} - - - -// -// Description: -// Assign default preferance to each channel. -// 2005.12.27, by rcnjko -// -VOID -InitChannelWeight( - IN PCHANNEL_INFO pChnl, - IN u1Byte ChannelNumber -) -{ - int nWeight; - - RT_ASSERT(pChnl != NULL, ("InitChannelWeight(): pChnl should not be NULL !!!\n")); - - pChnl->ChannelNumber = ChannelNumber; - - switch(ChannelNumber) - { - case 1: - case 6: - case 11: - case 14: - nWeight = 5; - break; - - case 2: - case 5: - case 7: - case 10: - nWeight = -5; - break; - - default: - nWeight = 0; - break; - } - - pChnl->Weight = nWeight; -} - - - -// -// Description: -// Find a best channel from specific ChnlWeightList. -// Annie, 2006-07-26. -// -u1Byte -FindBestChannel( - PCHANNEL_INFO ChnlWeightList, - int nNumChnlFound, - CHANNEL_START_MODE InitMode, - CHANNEL_SELECT_MODE Behavior - ) -{ - int nChnlIdx, nCurIdx, InitIndex; - PCHANNEL_INFO pChnl = NULL; - int nBestChnlWeight; - u1Byte BestChnl; - - RT_ASSERT( ChnlWeightList!=NULL, ("FindBestChannel(): INPUT error - ChnlWeightList is NULL!\n") ); - RT_TRACE( COMP_SCAN, DBG_LOUD, ("FindBestChannel(): nNumChnlFound=%d, InitMode=%d, Behavior=%d\n", nNumChnlFound, InitMode, Behavior) ); - - if( Behavior == CH_SEL_RANDOM ) - { - Behavior = (CHANNEL_SELECT_MODE)GetRandomNumber(0,2); - RT_TRACE( COMP_SCAN, DBG_LOUD, ("Behavior=2: CH_SEL_RANDOM => %d\n", Behavior ) ); - } - - switch( InitMode ) - { - case CH_START_MIN: - InitIndex = 0; - break; - - case CH_START_MAX: - InitIndex = nNumChnlFound-1; - break; - - case CH_START_MIDDLE: - InitIndex = nNumChnlFound/2; - break; - - default: - InitIndex = 0; - break; - } - nBestChnlWeight = ChnlWeightList[InitIndex].Weight; - BestChnl = ChnlWeightList[InitIndex].ChannelNumber; - - for( nChnlIdx=0; nChnlIdxWeight > nBestChnlWeight) - { - nBestChnlWeight = pChnl->Weight; - BestChnl = pChnl->ChannelNumber; - } - } - - RT_TRACE( COMP_SCAN, DBG_LOUD, ("FindBestChannel(): nBestChnlWeight=%d, BestChnl=%d\n", nBestChnlWeight, BestChnl) ); - return BestChnl; -} - - - -// -// Description: -// Select a channel from latest scan result. -// 2005.12.27, by rcnjko -// -u1Byte -AutoSelectChannel( - PADAPTER Adapter, - PRT_WLAN_BSS pBssList, - int nNumBss -) -{ - #define MAX_NUM_CHANNEL_TO_SELECT 256 - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u2Byte listLen = 0; - PCHANNEL_INFO ChnlWeightList; - int nNumChnlFound = 0; - int nBssIdx; - int nChnlIdx, nChWindex; - PCHANNEL_INFO pChnl = NULL; - PRT_WLAN_BSS pBss = NULL; - u1Byte BestChnl; - PRT_CHANNEL_LIST pChannelList = NULL; - PRT_GEN_TEMP_BUFFER pGenBufChnlWeightList; - - RT_ASSERT(pBssList != NULL, ("AutoSelectChannel(): pBssList should not be NULL !!!\n")); - - // Initialize ChnlWeightList and nNumChnlFound. - - { - pChannelList = MgntActQuery_ChannelList(Adapter); - - if(!pChannelList) // Get channel list failed - return 1; - - pGenBufChnlWeightList = GetGenTempBuffer (Adapter, sizeof(CHANNEL_INFO)*MAX_NUM_CHANNEL_TO_SELECT); - ChnlWeightList = (CHANNEL_INFO *)pGenBufChnlWeightList->Buffer.Ptr; - - listLen = pChannelList->ChannelLen; - - RT_TRACE(COMP_MLME,DBG_LOUD,("AutoSelectChannel: listLen %d \n",listLen)); - - if(listLen > MAX_NUM_CHANNEL_TO_SELECT) - listLen = MAX_NUM_CHANNEL_TO_SELECT; - for(nChnlIdx = 0; nChnlIdx < listLen; nChnlIdx++) - { - InitChannelWeight( &(ChnlWeightList[nChnlIdx]), pChannelList->ChnlListEntry[nChnlIdx].ChannelNum); - } - - } - - nNumChnlFound = listLen; - - // Enumerate each BSS scanned and figure out weight of each channel. - for(nBssIdx = 0; nBssIdx < nNumBss; nBssIdx++) - { - pChnl = NULL; - pBss = &(pBssList[nBssIdx]); - - // Find channel of the BSS. - for(nChnlIdx = 0; nChnlIdx < nNumChnlFound; nChnlIdx++) - { - pChnl = &(ChnlWeightList[nChnlIdx]); - if(pChnl->ChannelNumber == pBss->ChannelNumber) - { - break; - } - } - - - // Add a new channel found into ChnlWeightList if we cannot find in ChnlWeightList. - if(nChnlIdx == nNumChnlFound) - { - if(nNumChnlFound < MAX_NUM_CHANNEL_TO_SELECT) - { - pChnl = &(ChnlWeightList[nNumChnlFound]); - pChnl->ChannelNumber = (u1Byte)pBss->ChannelNumber; - nNumChnlFound++; - } - else - { - // ChnlWeightList is full, so, we just skip BSS. - continue; - } - } - - // Update its weight. - RT_ASSERT(pChnl != NULL, ("AutoSelectChannel(): pChnl should not be NULL !!!\n")); - RT_ASSERT(pChnl->ChannelNumber != 0, ("AutoSelectChannel(): pChnl->ChannelNumber should not be 0 !!!\n")); - if(pChnl != NULL) - pChnl->Weight--; - } - - for( nChWindex = 0 ; nChWindex < nNumChnlFound ; nChWindex++ ) - { - // - // We should accord to the scan type of the channel which is determined by the channel plan - // to assign the weight to prevent an invalid channel being selected. e.g. Select ch12 or 13 in SoftAP mode. - // 2011.11.28. by tynli. - // - if(pChannelList->ChnlListEntry[nChWindex].ScanType != SCAN_ACTIVE) - { - ChnlWeightList[nChWindex].Weight = (-1)*MAX_BSS_DESC; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Channel %d cannot process active scan.\n", nChWindex)); - } - } - - // Find best channel; - if(nNumChnlFound > 0) - { - RT_TRACE( COMP_SCAN, DBG_LOUD, ("AutoSelectChannel(): ChnlWeightMode=%d\n", pMgntInfo->ChnlWeightMode ) ); - switch( pMgntInfo->ChnlWeightMode ) - { - case 0: - // 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 - BestChnl = FindBestChannel( ChnlWeightList, nNumChnlFound, CH_START_MAX, CH_SEL_DECREASE ); - break; - case 1: - // 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 - BestChnl = FindBestChannel( ChnlWeightList, nNumChnlFound, CH_START_MIN, CH_SEL_INCREASE ); - break; - case 2: - // 6, 7, 8, 9, 10, 11, 1, 2, 3, 4, 5 - BestChnl = FindBestChannel( ChnlWeightList, nNumChnlFound, CH_START_MIDDLE, CH_SEL_INCREASE ); - break; - case 3: - // 6, 5, 4, 3, 2, 1, 11, 10, 9, 8, 7 - BestChnl = FindBestChannel( ChnlWeightList, nNumChnlFound, CH_START_MIDDLE, CH_SEL_DECREASE ); - break; - case 4: - // Random Select: Increase or decrease. Start from Ch11. - BestChnl = FindBestChannel( ChnlWeightList, nNumChnlFound, CH_START_MAX, CH_SEL_RANDOM ); - break; - default: - // Random Select: Increase or decrease. Start from Ch1. - BestChnl = FindBestChannel( ChnlWeightList, nNumChnlFound, CH_START_MIN, CH_SEL_RANDOM ); - break; - } - } - else - { - BestChnl = pMgntInfo->Regdot11ChannelNumber; - } - - ReturnGenTempBuffer (Adapter, pGenBufChnlWeightList); - - return BestChnl; -} - - - -VOID -FilterSupportRate( - OCTET_STRING RegRate, - POCTET_STRING pSupRate, - BOOLEAN bFilterOutCCKRate - ) -{ - u2Byte i,j,k; - u1Byte rate; - - for(i=0,j=0;iLength;i++) - { - rate=pSupRate->Octet[i]&0x7f; - - // HT capability info indicate that whether the peer support CCK rate in 20/40 Mode. 2007.01.15 by Emily - if(bFilterOutCCKRate && (rate == MGN_1M || rate == MGN_2M || rate == MGN_5_5M || rate==MGN_11M)) - continue; - - for(k=0;kOctet[j++]=pSupRate->Octet[i]; - break; - } - } - } - pSupRate->Length=(u2Byte)j; -} - -/** -* Function: SelectRateSet -* -* Overview: Decide <1>dot11OperationalRateSet, <2>mBrates, <3>HighestBasicRate, -* <4>LowestBasicRate, <5>HighestOperaRate.<6>CurrentBasicRate, -* <7>CurrentOperaRate <8> SupportedRates -* -* Input: -* PADAPTER Adapter -* OCTET_STRING SuppRateSet // Rate sets copied from descriptor(Infrustructure -* STA more, IBSS join) or refereced from self setting(Infrastructure AP -* mode or IBSS Creator) -* -* Output: -* PRT_TCB pTcb -* (Frame in the Buffer of pTcb will be modified) -* -* Return: -* None -*/ - - -VOID -SelectRateSet( - PADAPTER Adapter, - OCTET_STRING SuppRateSet -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte i, idx; - u2Byte bi = 0; - u1Byte hBsRate, lBsRate, hOpRate, curRate; - BOOLEAN bFilterOutCCKRate = FALSE; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("====> SelectRateSet()\n")); - - // <1> dot11OperationalRateSet - CopyMemOS( &pMgntInfo->dot11OperationalRateSet, SuppRateSet, SuppRateSet.Length ); - - // HT capability info indicate that whether the peer support CCK rate in 20/40 Mode. 2007.01.15 by Emily - bFilterOutCCKRate = (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK == FALSE); - - FilterSupportRate( pMgntInfo->Regdot11OperationalRateSet, - &pMgntInfo->dot11OperationalRateSet, bFilterOutCCKRate); - - idx = (pMgntInfo->dot11OperationalRateSet.Length<64) ? pMgntInfo->dot11OperationalRateSet.Length : 64; - - // <2> mBrates, <3> HighestBasicRate, <4> LowestBasicRate, <5> HighestOperaRate - hBsRate = hOpRate = 0x00; // Assign an impossible value first. Annie, 2005-03-31. - lBsRate = 0x7f; - - for(i=0; idot11OperationalRateSet.Octet[i] & 0x7f; - if( hOpRate < curRate ) - hOpRate = curRate; - - if(pMgntInfo->dot11OperationalRateSet.Octet[i] & 0x80) - { - pMgntInfo->mBrates.Octet[bi] = pMgntInfo->dot11OperationalRateSet.Octet[i]; - bi++; - - // To decide the highest and lowest basic rates. Annie, 2005-03-31 - if( hBsRate < curRate ) hBsRate = curRate; - if( lBsRate > curRate ) lBsRate = curRate; - } - else - { - // - // We shall unite {dot11OperationalRateSet} with {6M,12M,24M} to extend basic rate. - // See 802.11g/D8.2 section 9.6 (p17) and section 19.1.1 (p20). 2005.12.22, by rcnjko. - // - if( (pMgntInfo->dot11OperationalRateSet.Octet[i] == MGN_6M) || // 6M - (pMgntInfo->dot11OperationalRateSet.Octet[i] == MGN_12M) || // 12M - (pMgntInfo->dot11OperationalRateSet.Octet[i] == MGN_24M) ) // 24M - { - pMgntInfo->mBrates.Octet[bi] = pMgntInfo->dot11OperationalRateSet.Octet[i]; - bi++; - - // To decide the highest and lowest basic rates. Annie, 2005-03-31 - if( hBsRate < curRate ) hBsRate = curRate; - if( lBsRate > curRate ) lBsRate = curRate; - } - } - } - - pMgntInfo->mBrates.Length = bi; - if( pMgntInfo->mBrates.Length == 0 ) - { - // If support rates in association response does not include basic rate, apply 0x02 as basic rate. - pMgntInfo->mBrates.Length = 1; - - // Apply the basic data rate by wireless mode. Annie, 2005-04-01 - if( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && !pMgntInfo->pHTInfo->bCurSuppCCK)) - { - pMgntInfo->mBrates.Octet[0] = 0x8c; // 6M - hBsRate = MGN_6M; - lBsRate = MGN_6M; - } - else - { - pMgntInfo->mBrates.Octet[0] = 0x82; // 1M - hBsRate = MGN_1M; - lBsRate = MGN_1M; - } - - } - - if( hOpRate == 0x00 ) // i.e. not been updated. Annie, 2005-04-01. - { - RT_TRACE( COMP_SYSTEM, DBG_WARNING, ("Warning: Operational rate set is empty !\n") ); - } - - pMgntInfo->HighestBasicRate = hBsRate; - pMgntInfo->LowestBasicRate = lBsRate; - pMgntInfo->HighestOperaRate = hOpRate; - - // <6> CurrentBasicRate - pMgntInfo->CurrentBasicRate = pMgntInfo->LowestBasicRate; - - // <7> CurrentOperaRate - pMgntInfo->CurrentOperaRate = pMgntInfo->HighestOperaRate; - - // <8> SupportedRates, 2005.11.25, by rcnjko. - CopyMemOS( &(pMgntInfo->SupportedRates), pMgntInfo->dot11OperationalRateSet, pMgntInfo->dot11OperationalRateSet.Length); - - IOTActForcedDataRate(Adapter); - - // <9> 2009/04/13 MH Before any link sequence, we must change to correct rate setting. - // Otherwise, auth may fail if peer AP or STA do not accept our ACK rate. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) ); - - // Keep the default basic rate. 2010.11.03. by tynli. - - RT_TRACE(COMP_MLME, DBG_TRACE, ("SelectRateSet(): return TRUE. <====\n")); -} - - -// -// Return BOOLEAN: TxRate is included in SupportedRates or not. -// Added by Annie, 2006-05-16, in SGS, for Cisco B mode AP. (with ERPInfoIE in its beacon.) -// -BOOLEAN -IncludedInSupportedRates( - IN PADAPTER Adapter, - IN u1Byte TxRate - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - POCTET_STRING pSupRateSet = &(pMgntInfo->SupportedRates); - u1Byte RateMask = 0x7F; - u1Byte idx; - BOOLEAN Found = FALSE; - u1Byte NaiveTxRate = TxRate&RateMask; - - - for( idx=0; idxLength; idx++ ) - { - if( (pSupRateSet->Octet[idx] & RateMask) == NaiveTxRate ) - { - Found = TRUE; - break; - } - } - - return Found; -} - -// -// Description: Update bUseProtection accoding to the rule = (default | Ext. port). -// The protection status of default port need to follow extension port and the -// extension port also need to follow default port when they are co-exist. -// 2010.11.02. Added by tynli. -// -VOID -ActUpdate_ProtectionMode( - PADAPTER Adapter, - BOOLEAN bProtection -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefaultMgntInfo = &(pDefaultAdapter->MgntInfo); - PADAPTER pExtAdapter = NULL; - PMGNT_INFO pExtMgntInfo = NULL; - u1Byte TwoPortStatus = (u1Byte)TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE; - - pExtAdapter = GetFirstExtAdapter(Adapter); - if(pExtAdapter == NULL) pExtAdapter = pDefaultAdapter; - - pExtMgntInfo = &(pExtAdapter->MgntInfo); - - GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__STATUS,NULL,&TwoPortStatus); - - if(IsDefaultAdapter(Adapter)) //Default adapter - { - pDefaultMgntInfo->bProtection = bProtection; - if( (TWO_PORT_STATUS)TwoPortStatus == TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT - || (TWO_PORT_STATUS)TwoPortStatus == TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20) - { - pDefaultMgntInfo->bUseProtection = (bProtection|pExtMgntInfo->bProtection); - } - else - { - pDefaultMgntInfo->bUseProtection = bProtection; - } - } - else - { - pExtMgntInfo->bProtection = bProtection; - if( (TWO_PORT_STATUS)TwoPortStatus == TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT - ||(TWO_PORT_STATUS)TwoPortStatus == TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20) - { - pExtMgntInfo->bUseProtection = (bProtection|pDefaultMgntInfo->bProtection); - } - else - { - pExtMgntInfo->bUseProtection = bProtection; - } - } -} - - -VOID -ActUpdate_mCapInfo( - PADAPTER Adapter, - u2Byte updateCap -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - pMgntInfo->mCap = updateCap; - - // Check preamble mode, 2005.01.06, by rcnjko. - // Mark to update preamble value forever, 2008.03.18 by lanhsin -// if( pMgntInfo->RegPreambleMode == PREAMBLE_AUTO ) - { - BOOLEAN ShortPreamble; - - if(pMgntInfo->mCap & cShortPreamble) - { // Short Preamble - if(pMgntInfo->dot11CurrentPreambleMode != PREAMBLE_SHORT) // PREAMBLE_LONG or PREAMBLE_AUTO - { - ShortPreamble = TRUE; - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_SHORT; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ACK_PREAMBLE, (UCHAR *)&ShortPreamble ); - } - } - else - { // Long Preamble - if(pMgntInfo->dot11CurrentPreambleMode != PREAMBLE_LONG) // PREAMBLE_SHORT or PREAMBLE_AUTO - { - ShortPreamble = FALSE; - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_LONG; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_ACK_PREAMBLE, (UCHAR *)&ShortPreamble ); - } - } - } - - // STA's shall set MAC variable aSlotTime to short slot value upon transmission or - // reception of Beacon, ProbeRsp, AssocRsp, and ReAssocRsp from the BSS that the - // STA has joined or started... (ref 802.11g/D8.2, sec. 7.3.1, p12.). - if( IS_WIRELESS_MODE_G(Adapter)) - { - u1Byte slot_time_val; - u1Byte CurSlotTime; - Adapter->HalFunc.GetHwRegHandler( Adapter, HW_VAR_SLOT_TIME, &(CurSlotTime) ); - - if( (updateCap & cShortSlotTime) && (!(pMgntInfo->pHTInfo->RT2RT_HT_Mode & RT_HT_CAP_USE_LONG_PREAMBLE))) - { // Short Slot Time - if(CurSlotTime != SHORT_SLOT_TIME) - { - slot_time_val = SHORT_SLOT_TIME; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_SLOT_TIME, &slot_time_val ); - } - } - else - { // Long Slot Time - if(CurSlotTime != NON_SHORT_SLOT_TIME) - { - slot_time_val = NON_SHORT_SLOT_TIME; - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_SLOT_TIME, &slot_time_val ); - } - } - } -} - - - -VOID -ActUpdate_ERPInfo( - PADAPTER Adapter, - u1Byte ERPInfo -) -{ - // [Win7] pChnlAccessSetting use the common part for both adapters. 2009.07.02, by Bohn - Adapter = GetDefaultAdapter(Adapter); - - if( ERPInfo & ERP_UseProtection ) - { - ActUpdate_ProtectionMode(Adapter, TRUE); - } - else - { - ActUpdate_ProtectionMode(Adapter, FALSE); - } - - - - // 2005.01.06, by rcnjko. - if( Adapter->MgntInfo.RegPreambleMode == PREAMBLE_AUTO ) - { - if( ERPInfo & ERP_BarkerPreambleMode ) - { - Adapter->MgntInfo.dot11CurrentPreambleMode = PREAMBLE_LONG; - } - } -} - - -VOID -EnableSingleAmpduorNot( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ) -{ - u1Byte value = 0; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - - if (!ENABLE_SINGLE_AMPDU(Adapter)) // Confirm in the future. - return; - - if(Adapter->bInHctTest) - return; - - if((pBssDesc->Vender==HT_IOT_PEER_CISCO) && (!ENABLE_SINGLE_AMPDU(Adapter))) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("For Cisco AP,we disable Earlymode!!!\n")); - pHalData->AMPDUBurstMode = RT_AMPDU_BRUST_NONE; - PlatformEFIOWrite1Byte(Adapter,0x4d3,0); - PlatformEFIOWrite1Byte(Adapter,0x4d0,0); - return; - } - else if(pHalData->AMPDUBurstModebackup != RT_AMPDU_BRUST_NONE && pHalData->AMPDUBurstMode == RT_AMPDU_BRUST_NONE) - { - //When connected with Cisco AP ,we disable earlymode. But if connected with other AP, we should restore it.by wl2012-01-12 - pHalData->AMPDUBurstMode = pHalData->AMPDUBurstModebackup; - if(pHalData->AMPDUBurstMode) - { - if(ENABLE_SINGLE_AMPDU(Adapter)) - PlatformEFIOWrite4Byte(Adapter,0x4d0,0x8104001f); - } - } - - if(!pHalData->AMPDUBurstMode) - return; - if((pBssDesc->Vender==HT_IOT_PEER_UNKNOWN)|| - (pBssDesc->Vender==HT_IOT_PEER_ATHEROS&&pBssDesc->SubTypeOfVender == HT_IOT_PEER_ATHEROS_DIR655)) - { - //Single AMPDU will cause DIR 655 RX bad. - value = 0; - //Left at least two packets in TX FIFO(Totoal 12 packets, first AMPDU 10 packets) to trigger early mode but avoid Single AMPDU. //By YJ,120210 - if(ENABLE_SINGLE_AMPDU(Adapter)) - PlatformEFIOWrite1Byte(Adapter, 0x04CA, 0x0A); - } - else - { - value = 0x80; - if(ENABLE_SINGLE_AMPDU(Adapter)) - PlatformEFIOWrite1Byte(Adapter, 0x04CA, 0x0B); - } - - if(ENABLE_SINGLE_AMPDU(Adapter)) - value |= BIT0; - - PlatformEFIOWrite1Byte(Adapter,0x4d3,value); -} - - -WIRELESS_MODE -SetupJoinWirelessMode( - PADAPTER Adapter, - BOOLEAN bSupportNmode, - WIRELESS_MODE bssWirelessMode -) -{ - WIRELESS_MODE JoinWirelessMode; - u2Byte SupportedWirelessMode = Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter); - - RT_TRACE(COMP_MLME,DBG_LOUD,("SetupJoinWirelessMode(), RegWirelessMode=%x bssWirelessMode=0x%x, SupportedWirelessMode=0x%x\n", Adapter->RegWirelessMode, bssWirelessMode, SupportedWirelessMode)); - if( (IS_24G_WIRELESS_MODE(Adapter->RegWirelessMode) && IS_24G_WIRELESS_MODE(bssWirelessMode)) || - (IS_5G_WIRELESS_MODE(Adapter->RegWirelessMode) && IS_5G_WIRELESS_MODE(bssWirelessMode)) ) - { - if(Adapter->RegWirelessMode < bssWirelessMode) // Why use the judgement? - { - JoinWirelessMode = Adapter->RegWirelessMode; - - if (bssWirelessMode == WIRELESS_MODE_AC_24G) - { - JoinWirelessMode = WIRELESS_MODE_AC_24G; - } - } - else - JoinWirelessMode = bssWirelessMode; - } - else if(Adapter->RegWirelessMode == WIRELESS_MODE_AUTO) - { - if(bssWirelessMode <= WIRELESS_MODE_N_24G) - { - // 2004.10.18, by rcnjko. - if(SupportedWirelessMode & (WIRELESS_MODE_G|WIRELESS_MODE_N_24G) && bssWirelessMode >=WIRELESS_MODE_G) - { - if( (SupportedWirelessMode & WIRELESS_MODE_N_24G) && bSupportNmode - && bssWirelessMode >=WIRELESS_MODE_N_24G && IS_HT_SUPPORTED(Adapter)) - { - JoinWirelessMode = WIRELESS_MODE_N_24G; - } - else - JoinWirelessMode = WIRELESS_MODE_G; - } - else - { - if( (SupportedWirelessMode&WIRELESS_MODE_A)&&(bssWirelessMode==WIRELESS_MODE_A)) - JoinWirelessMode = WIRELESS_MODE_A; - else if( (SupportedWirelessMode&WIRELESS_MODE_B)&&(bssWirelessMode==WIRELESS_MODE_B)) - JoinWirelessMode = WIRELESS_MODE_B; - else - JoinWirelessMode = WIRELESS_MODE_B; - } - } - else if (bssWirelessMode == WIRELESS_MODE_AC_24G) - { - JoinWirelessMode = WIRELESS_MODE_AC_24G; - } - else - { - if((SupportedWirelessMode & WIRELESS_MODE_AC_5G) && bSupportNmode - && bssWirelessMode >=WIRELESS_MODE_AC_5G && IS_VHT_SUPPORTED(Adapter)) - { - JoinWirelessMode = WIRELESS_MODE_AC_5G; - } - else if((SupportedWirelessMode & WIRELESS_MODE_N_5G) && bSupportNmode - && bssWirelessMode >=WIRELESS_MODE_N_5G && IS_HT_SUPPORTED(Adapter)) - { - JoinWirelessMode = WIRELESS_MODE_N_5G; - } - else - JoinWirelessMode = WIRELESS_MODE_A; - } - } - else - { - JoinWirelessMode = Adapter->RegWirelessMode; - } - - if((!bSupportNmode) && (JoinWirelessMode >= WIRELESS_MODE_N_24G)) - { - if(IS_5G_WIRELESS_MODE(JoinWirelessMode)) - JoinWirelessMode = WIRELESS_MODE_A; - else - JoinWirelessMode = WIRELESS_MODE_G; - } - - RT_TRACE(COMP_MLME,DBG_LOUD,("JoinWirelessMode = %x\n", JoinWirelessMode)); - - return JoinWirelessMode; -} - -WIRELESS_MODE -SetupStarWirelessMode( - PADAPTER Adapter, - BOOLEAN bSupportNmode -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - WIRELESS_MODE WirelessMode = 0; - u2Byte SupportedWirelessMode = Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter); - - if(Adapter->RegWirelessMode == WIRELESS_MODE_AUTO) - { - if(pMgntInfo->dot11CurrentChannelNumber <= 14) - { - // 2013/10/04 MH Add registry for 2.4G wireless mode VHT enabled. - if(pMgntInfo->bRegVht24g && (SupportedWirelessMode & (WIRELESS_MODE_AC_24G))) - { - WirelessMode = WIRELESS_MODE_AC_24G; - } - else if(SupportedWirelessMode & (WIRELESS_MODE_G|WIRELESS_MODE_N_24G)) - { - if( (SupportedWirelessMode & WIRELESS_MODE_N_24G) && bSupportNmode) - WirelessMode = WIRELESS_MODE_N_24G; - else - WirelessMode = WIRELESS_MODE_G; - } - else - WirelessMode = WIRELESS_MODE_B; - } - else - { - if((SupportedWirelessMode & WIRELESS_MODE_AC_5G) && bSupportNmode) - WirelessMode = WIRELESS_MODE_AC_5G; - else if((SupportedWirelessMode & WIRELESS_MODE_N_5G) && bSupportNmode) - WirelessMode = WIRELESS_MODE_N_5G; - else - WirelessMode = WIRELESS_MODE_A; - } - } - else - { - if( IS_5G_WIRELESS_MODE(Adapter->RegWirelessMode)) - { - if(pMgntInfo->dot11CurrentChannelNumber <= 14) - pMgntInfo->dot11CurrentChannelNumber = 36; - - if (bSupportNmode == FALSE) - WirelessMode = WIRELESS_MODE_A; - else - WirelessMode = Adapter->RegWirelessMode; - } - else if(IS_24G_WIRELESS_MODE(Adapter->RegWirelessMode)) - { - if(pMgntInfo->dot11CurrentChannelNumber > 14) - pMgntInfo->dot11CurrentChannelNumber = 1; - - // Set wireless mode to refresh all channel access related setting. 2006.02.16, by rcnjko. - if (Adapter->RegWirelessMode == WIRELESS_MODE_N_24G || Adapter->RegWirelessMode == WIRELESS_MODE_AC_24G) - { - if (bSupportNmode) - WirelessMode = Adapter->RegWirelessMode; - else - WirelessMode = WIRELESS_MODE_G; - } - else - WirelessMode = Adapter->RegWirelessMode; - } - } - - return WirelessMode; -} - -VOID -SetupIOTAction( - PADAPTER Adapter, - RT_WLAN_BSS *bssDesc -) -{ - BOOLEAN bIOTAction = 0; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - bIOTAction = IOTActWAIOTBroadcom(Adapter, bssDesc); // only broadcom - if(bIOTAction) - { - RT_DISP(FDM, WA_IOT, ("SetupJoinInfraInfo() set bIOTAction for HT_IOT_ACT_WA_IOT_Broadcom\n")); - pMgntInfo->IOTAction |= HT_IOT_ACT_WA_IOT_Broadcom; - } - - bIOTAction = IOTActBcmRxFailRelink(Adapter, bssDesc); - if(bIOTAction) - { - RT_DISP(FDM, WA_IOT, ("HTResetSelfAndSavePeerSetting() set bIOTAction for HT_IOT_ACT_WA_IOT_Broadcom\n")); - pMgntInfo->IOTAction |= HT_IOT_ACT_BCM_AP_RX_FAIL_RELINK; - } - - bIOTAction = IOTActIsDisableEDCATurbo(Adapter, bssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_DISABLE_EDCA_TURBO; - - bIOTAction = IOTActIsEnableBETxOPLimit(Adapter, bssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_FORCED_ENABLE_BE_TXOP; - - bIOTAction = IOTActIsForcedRTSCTS(Adapter, bssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_FORCED_RTS; - - bIOTAction = IOTActIsForcedCTS2Self(Adapter, bssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_FORCED_CTS2SELF; - - bIOTAction = IOTActIsNullDataPowerSaving(Adapter, bssDesc); - if(bIOTAction) - pMgntInfo->IOTAction |= HT_IOT_ACT_NULL_DATA_POWER_SAVING; - - bIOTAction = IOTActIsDisableTxPowerTraining(Adapter, bssDesc); - if(bIOTAction) - { - pMgntInfo->bDisableTXPowerTraining = TRUE; - } - - bIOTAction = IOTActIsDisableProtectionMode(Adapter, bssDesc); - if(bIOTAction) - { - pMgntInfo->ForcedProtectionMode = PROTECTION_MODE_FORCE_DISABLE; - } - - bIOTAction = IOTActIsForcedDataRate(Adapter, bssDesc); - if(bIOTAction) - { - pMgntInfo->IOTAction |= HT_IOT_ACT_FORCED_DATA_RATE; - } - - bIOTAction = IOTActIsDisableTxPowerTraining(Adapter, bssDesc); - if(bIOTAction) - { - pMgntInfo->bDecreaseTXPowerTraining = TRUE; - } - -} - - -VOID -SetupJoinInfraInfo( - PADAPTER Adapter, - RT_WLAN_BSS *bssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &pMgntInfo->SecurityInfo; - OCTET_STRING supprateEX; - BOOLEAN bSupportNmode = TRUE, bHalfSupportNmode = FALSE; // default aes or none encryption - u1Byte CurrCcxVerNumber = 0; - u2Byte nDataRate = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> SetupJoinInfraInfo()\n")); - - pMgntInfo->bJoinInProgress = TRUE; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - CopyWlanBss(&pMgntInfo->targetBSS, bssDesc); - - // Return to previous IPS mode. 2007.08. - if (!pMgntInfo->bSetPnpPwrInProgress) - IPSReturn(Adapter, IPS_DISABLE_DEF_OPMODE); - - //Emily. 20051005. In WPA/WPA2 mixed mode, group key cipher will not be set from WZC/UI, - // we have to get it from parsing of beacon. - if(pSecInfo->AuthMode > RT_802_11AuthModeAutoSwitch) - { - pSecInfo->bGroupKeyFixed = TRUE; - - if (pSecInfo->AuthMode != RT_802_11AuthModeWAPI && pSecInfo->AuthMode != RT_802_11AuthModeCertificateWAPI) - SecGetGroupCipherFromBeacon(Adapter, bssDesc); - } - - if(P2P_ADAPTER_OS_SUPPORT_P2P(Adapter) && P2P_ACTING_IS_CLIENT(Adapter)) - { - u1Byte BoostInitGainValue = 0; - - BoostInitGainValue = (u1Byte)(bssDesc->RecvSignalPower+110); - - McDynamicMachanismSet(Adapter, MC_DM_INIT_GAIN_BOOST_START, &BoostInitGainValue, sizeof(u1Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] JoinRequest, need to pause DIG and increase initial GAIN; SignalStrength(%#x)\n", bssDesc->RecvSignalPower)); - } - - //WIRELESS MODE - // Set wireless mode to N mode if using SW wep/tkip encyption - // Set wireless mode to half N mode if using HW wep/tkip encryption - // Set wireless mode to B/G mode if using WEP/TKIP encryption - // 2008.06.12 - // 2010/06/25 hpfan: determine IOT Peer before checking GetNmodeSupportBySecCfgHandler - ResetIOTSetting(pMgntInfo); - IOTPeerDetermine(Adapter, bssDesc); - bSupportNmode = Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter); - - if(!bSupportNmode) - { - bSupportNmode = FALSE; - bHalfSupportNmode = FALSE; - } - - // Added by Bruce, 2010-12-15. - // The WiFi Test Plan restricts the STA uses legacy mode in TKIP or WEP setting in Test 5.2.51/52. - if(bSupportNmode && pMgntInfo->bWiFiConfg) - { - if(pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP || (pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) || (pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40)) - bSupportNmode = FALSE; - } - - HTInitializeHTInfo(Adapter); - VHTInitializeVHTInfo(Adapter); - - pMgntInfo->CurrentBssWirelessMode = bssDesc->wirelessmode; // Keep wireless mode of Infra-BSS to join. 2005.02.17, by rcnjko. - pMgntInfo->SettingBeforeScan.WirelessMode = pMgntInfo->dot11CurrentWirelessMode;//For N solution won't be change the wireless mode in scan - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_ANT_SWITCH, (pu1Byte)(&pMgntInfo->dot11CurrentWirelessMode)); - // BSSID - CopyMem( pMgntInfo->Bssid, bssDesc->bdBssIdBuf, 6 ); - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "SetupJoinInfraInfo() BSSID:", pMgntInfo->Bssid); - - // SSID - if((BeHiddenSsid(bssDesc->bdSsIdBuf,bssDesc->bdSsIdLen)) && (CHECK_HIDDEN_SSID(Adapter))) - { - CopySsid(bssDesc->bdSsIdBuf, bssDesc->bdSsIdLen, pMgntInfo->SsidBuf, pMgntInfo->Ssid.Length); - } - else - { - pMgntInfo->Ssid.Octet = pMgntInfo->SsidBuf; - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, bssDesc->bdSsIdBuf, bssDesc->bdSsIdLen); - } - - // Supported rates - supprateEX.Octet = bssDesc->bdSupportRateEXBuf; - supprateEX.Length = bssDesc->bdSupportRateEXLen; - - // Beacon period - pMgntInfo->dot11BeaconPeriod = bssDesc->bdBcnPer; - - // DTIM period - pMgntInfo->dot11DtimPeriod = bssDesc->bdDtimPer; - - pMgntInfo->ChannelOffset = (EXTCHNL_OFFSET)GET_HT_INFO_ELE_EXT_CHL_OFFSET(bssDesc->BssHT.bdHTInfoBuf); - // Channel number - pMgntInfo->dot11CurrentChannelNumber = bssDesc->ChannelNumber; - - // Notify AP mode STA changes channel, bw and wireless mode - if((GetDefaultMgntInfo(Adapter))->RegMultiChannelFcsMode != MULTICHANNEL_FCS_SUPPORT_GO) - { - EXT_AP_NOTIFY_STA_LINK_CHANGE(pMgntInfo); - } - - // Capability, 2005.04.14, by rcnjko. - pMgntInfo->mCap = bssDesc->bdCap; - if( pMgntInfo->RegPreambleMode == PREAMBLE_AUTO ) - { - if( (pMgntInfo->mCap & cShortPreamble) ) - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_SHORT; - else - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_LONG; - } - - if(IS_WIRELESS_OFDM_24G(Adapter) && bssDesc->bERPInfoValid) - { - ActUpdate_ERPInfo(Adapter, bssDesc->bdERPInfo); - } - - pMgntInfo->mAssoc = FALSE; //Set TRUE while receiving association response - pMgntInfo->mIbss = FALSE; // - pMgntInfo->mDisable = TRUE; - - pMgntInfo->AsocTimestamp = 0; - pMgntInfo->AuthRetryCount = 0; - PlatformCancelTimer(Adapter, &pMgntInfo->AuthTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->AsocTimer); - - // -- HalMacId: Set a specific MacId for this client --- - pMgntInfo->mMacId = (u1Byte)MacIdRegisterMacIdForInfraClient(Adapter); - pMgntInfo->mcastMacId = (u1Byte)MacIdRegisterMacIdForMCastClient(Adapter); - // ------------------------------------------- - - //stop BE Queue and VI Queue when another port is connectiong to network with another channel - //by sherry 20130117 - { - PADAPTER pDefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = &pDefAdapter->MgntInfo; - u1Byte TxPauseCommand = 0x6; - - - if(Adapter == pDefAdapter) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("SetupjoinInfraInfo: defalut port to connect \n")); - if(GetFirstClientPort(Adapter) != NULL) - { - if((MgntLinkStatusQuery(GetFirstClientPort(Adapter)) == RT_MEDIA_CONNECT) && (pMgntInfo->dot11CurrentChannelNumber != GET_HAL_DATA(Adapter)->CurrentChannel)) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("p2p client is linked \n ")); - if(pDefMgntInfo->RegMultiChannelFcsMode == 0) - { - TxPauseCommand = 0x2; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TX_PAUSE, (pu1Byte)(&TxPauseCommand)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("Tx pause queue (%x)\n", TxPauseCommand)); - } - } - } - } - else - { - RT_TRACE(COMP_MLME,DBG_LOUD,("SetupjoinInfraInfo: client port to connect \n")); - if((MgntLinkStatusQuery(pDefAdapter) == RT_MEDIA_CONNECT) && (pMgntInfo->dot11CurrentChannelNumber != GET_HAL_DATA(Adapter)->CurrentChannel)) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("default port is linked \n ")); - if(pDefMgntInfo->RegMultiChannelFcsMode == 0) - { - TxPauseCommand = 0x4; - SendNullFunctionData(pDefAdapter,pDefMgntInfo->Bssid,TRUE); - PlatformStallExecution(10000); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TX_PAUSE, (pu1Byte)(&TxPauseCommand)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("Tx pause queue (%x)\n", TxPauseCommand)); - } - } - } - } - - // 2008.06.12, by Lanhsin. Support half n wireless for ralink ap - if((pMgntInfo->dot11CurrentWirelessMode == WIRELESS_MODE_N_24G) && (bHalfSupportNmode == TRUE)) - pMgntInfo->bHalfWiirelessN24GMode = TRUE; - else - pMgntInfo->bHalfWiirelessN24GMode = FALSE; - - // Set QoS mode. Added by Annie, 2005-11-09. Isaiah for WMM_APSD - if( pMgntInfo->pStaQos->QosCapability & QOS_WMM ) - { - pMgntInfo->pStaQos->CurrentQosMode= (bssDesc->BssQos.bdQoSMode) & - (pMgntInfo->pStaQos->QosCapability); - if(pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM_UAPSD) - { - u1Byte qosinfo; - - pMgntInfo->pStaQos->Curr4acUapsd = pMgntInfo->pStaQos->b4ac_Uapsd & 0x0F; - - SET_WMM_QOS_INFO_FIELD(&qosinfo, (pMgntInfo->pStaQos->Curr4acUapsd) & 0x0F); - SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(&qosinfo, (pMgntInfo->pStaQos->MaxSPLength) & 0x03); - SET_WMM_INFO_ELE_QOS_INFO_FIELD(pMgntInfo->pStaQos->pWMMInfoEle, qosinfo); - - }else //legacy AP or WMM AP - { - SET_WMM_INFO_ELE_QOS_INFO_FIELD(pMgntInfo->pStaQos->pWMMInfoEle, 0); - pMgntInfo->pStaQos->Curr4acUapsd = 0; - } - - pMgntInfo->pStaQos->QBssWirelessMode = bssDesc->wirelessmode; - } - else //legacy - { - pMgntInfo->pStaQos->CurrentQosMode = QOS_DISABLE; - pMgntInfo->pStaQos->QBssWirelessMode = WIRELESS_MODE_UNKNOWN; - } - - Adapter->HalFunc.SetWirelessModeHandler( Adapter, - SetupJoinWirelessMode(Adapter, bSupportNmode, bssDesc->wirelessmode)); - - // - // Set High Throughput Configuration - // - if( (pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) && - (pMgntInfo->pHTInfo->bEnableHT && bssDesc->BssHT.bdSupportHT)) - { - HTResetSelfAndSavePeerSetting(Adapter, bssDesc); - - if(pMgntInfo->pVHTInfo->bEnableVHT && bssDesc->BssVHT.bdSupportVHT) - VHTResetSelfAndSavePeerSetting(Adapter, bssDesc); - else - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - } - else - { - pMgntInfo->pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - } - - if((GetDefaultMgntInfo(Adapter))->RegMultiChannelFcsMode == MULTICHANNEL_FCS_SUPPORT_GO) - { - u2Byte OpCode = FCS_CHNL_OPMODE_JOINBSS; - - FCS_Notify(Adapter, FCS_NOTIFY_TYPE_CHANNEL, (pu1Byte)&OpCode, sizeof(OpCode)); - } - - RT_TRACE(COMP_MLME, DBG_TRACE, ("Wireless mode %#x \n", pMgntInfo->dot11CurrentWirelessMode)); - - // Change bandwidth before join process because the AP may send the Auth and Assoc Rsp frame with - // fixed rate in 40MHz/80Mhz. - CHNL_SetBwChnlFromPeer(Adapter); - - HTSetCCKSupport(Adapter, FALSE, NULL); - - SelectRateSet( Adapter, supprateEX ); - - SetupIOTAction(Adapter, bssDesc); - - // Reset TStream related, 070614, by rcnjko. - // If we are in calling session under CCX4, not to remove TSs. - // 2007.07.29, by shien chang. - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - - if ( ((pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) || - (pMgntInfo->pStaQos->CurrentQosMode & QOS_WMMSA)) && - ( CurrCcxVerNumber >= 4 ) ) - { - u1Byte idx; - PQOS_TSTREAM pTs; - for (idx=0; idx<2; idx++) - { - pTs = NULL; - pTs = QosGetTs(Adapter, idx, pMgntInfo->Bssid, Adapter->CurrentAddress); - if (pTs && pTs->bUsed) - pTs->bEstablishing = TRUE; - } - } - else - { - QosResetAllTs(Adapter); - } - - // Reset Hw sequence number. 2012.11.30. by tynli. - pMgntInfo->SequenceNumber = 0; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_NQOS_SEQ_NUM, (pu1Byte)&pMgntInfo->SequenceNumber); - - // For debugging ONLY. Annie, 2005-11-12. - QosParsingDebug_BssDesc( bssDesc ); - - // Initialize CCX setting to join the BSS, 070627, by rcnjko. - CCX_OnSetupJoinInfraInfo(Adapter, bssDesc); - - // For Turbo Mode resetting. Added by Roger, 2006.12.15. - pMgntInfo->TurboChannelAccess.bEnabled=FALSE; - MgntActSet_EnterTurboMode( Adapter, FALSE); - - pMgntInfo->targetAKMSuite = bssDesc->AKMsuit; - // - // Initialize 802.11 MFP - // - PlatformZeroMemory( pSecInfo->BIPKeyBuffer, MAX_KEY_LEN ); - - if( bssDesc->bMFPC && IS_AKM_SUPPORT_SHA_256(pMgntInfo->RegCapAKMSuite)) - { - pMgntInfo->bInBIPMFPMode = TRUE; - } - else - { - pMgntInfo->bInBIPMFPMode = FALSE; - - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return; - } - - // Preprocessing for starting a connection. 2006.10.17, by shien chang. - if (!MgntRoamingInProgress(pMgntInfo) && pMgntInfo->RequestFromUplayer) - { - DrvIFIndicateConnectionStart(Adapter); - } - - //vivi, dir655 can not receive single ampdu; so we have to turn off single ampdu when peer ap is dlink 655, 20101125 - //as we can not recongize dir655, atheros or ap which doesnot carry vender information will be treated as no single ampdu received - EnableSingleAmpduorNot(Adapter, bssDesc); - - nDataRate = ( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && !pMgntInfo->pHTInfo->bCurSuppCCK)) ? MGN_6M: MGN_1M; - - //For Win8 InstantConnect_ext test ,complete connect in 0.075s - if((Adapter->bInHctTest || pMgntInfo->IsAMDIOIC)) - { - SendProbeReq(Adapter, FALSE, nDataRate, TRUE); - SendProbeReq(Adapter, FALSE, nDataRate, TRUE); - } - - pSecInfo->TxIV = 0; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("SetupJoinInfraInfo(): bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("SetupJoinInfraInfo() <====\n")); -} - - -VOID -SetupJoinIBSSInfo( - PADAPTER Adapter, - RT_WLAN_BSS *bssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING supprateEX; - BOOLEAN bSupportNmode = FALSE; - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_IBSS; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> SetupJoinIBSSInfo()\n")); - - pMgntInfo->bJoinInProgress = TRUE; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - // Disable IPS, 2007.08.17, by shien chang. - IPSDisable(Adapter,FALSE, IPS_DISABLE_DEF_OPMODE); - //[Win7 Two Port Status] This init must before Set Wireless mode and every thing, 2009.07.31, by Bohn - pMgntInfo->mAssoc = FALSE; - pMgntInfo->mIbss = TRUE; - pMgntInfo->mDisable = TRUE; - pMgntInfo->bStartApDueToWakeup=FALSE; - - // WIRELESS MODE - // Set wireless mode to B/G mode if using WEP/TKIP encryption - //bSupportNmode = Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter); - if(pMgntInfo->bReg11nAdhoc || pMgntInfo->bRegVht24g) - bSupportNmode = TRUE; - - HTInitializeHTInfo(Adapter); - VHTInitializeVHTInfo(Adapter); - - pMgntInfo->CurrentBssWirelessMode = bssDesc->wirelessmode; // Keep wireless mode of IBSS to join. 2005.02.17, by rcnjko. - pMgntInfo->SettingBeforeScan.WirelessMode = pMgntInfo->dot11CurrentWirelessMode;//For N solution won't be change the wireless mode in scan - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_ANT_SWITCH, (pu1Byte)(&pMgntInfo->dot11CurrentWirelessMode)); - // BSSID - CopyMem( pMgntInfo->Bssid, bssDesc->bdBssIdBuf, 6 ); - - // SSID - CopyMem( pMgntInfo->SsidBuf, bssDesc->bdSsIdBuf, bssDesc->bdSsIdLen ); - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, bssDesc->bdSsIdBuf, bssDesc->bdSsIdLen); - - //Rate set - supprateEX.Octet = bssDesc->bdSupportRateEXBuf; - supprateEX.Length = bssDesc->bdSupportRateEXLen; - - pMgntInfo->dot11CurrentChannelNumber = bssDesc->ChannelNumber; - pMgntInfo->dot11BeaconPeriod = bssDesc->bdBcnPer; - - // Capability, 2005.03.15, by rcnjko. - pMgntInfo->mCap = bssDesc->bdCap; - if( pMgntInfo->RegPreambleMode == PREAMBLE_AUTO ) - { - if( (pMgntInfo->mCap & cShortPreamble) ) - { - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_SHORT; - } - else - { - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_LONG; - } - } - - // - // Disable Short slot time. Added by Annie, 2005-11-17. - // - // Ref: 802.11g/D8.2, sec. 7.3.1.4, p13. First line... - // "For IBSS, the Short Slot Time subfield shall be set to 0." - // - if( pMgntInfo->mCap & cShortSlotTime ) - { - pMgntInfo->mCap &= (~cShortSlotTime); - } - - if(IS_WIRELESS_OFDM_24G(Adapter) && bssDesc->bERPInfoValid) - { - ActUpdate_ERPInfo(Adapter, bssDesc->bdERPInfo); - } - - // Reset roaming status, 2004.10.12, by rcnjko. - pMgntInfo->AsocRetryCount = 0; - - // Add by hpfan to prevent infrastructure and adhoc mode connect at the same - PlatformCancelTimer( Adapter, &pMgntInfo->AuthTimer ); - - // 2008.06.12, by Lanhsin. - pMgntInfo->bHalfWiirelessN24GMode = FALSE; - - RT_TRACE(COMP_SEC , DBG_LOUD , ("====>SWRxDecryptFlag = %d \n",pMgntInfo->SecurityInfo.SWRxDecryptFlag) ); - - if(!pMgntInfo->SecurityInfo.SWRxDecryptFlag) - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - else - Adapter->HalFunc.DisableHWSecCfgHandler(Adapter); - - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm!= RT_ENC_ALG_NO_CIPHER) - pMgntInfo->mCap |= cPrivacy; - else - pMgntInfo->mCap &= ~cPrivacy; - - // Set QoS mode. Added by Annie, 2005-11-09. - if( (pMgntInfo->pStaQos->QosCapability & QOS_WMM) && (bssDesc->BssQos.bdQoSMode & QOS_WMM)) - { - RT_TRACE(COMP_QOS, DBG_LOUD, - ("SetupJoinIBSSInfo Set a CurrentQosMode = QOS_WMM\r\n")); - pMgntInfo->pStaQos->CurrentQosMode = QOS_WMM; - pMgntInfo->pStaQos->QBssWirelessMode = pMgntInfo->CurrentBssWirelessMode; - pMgntInfo->mCap |= cQos; - - // Use default EDCA parameters - SET_WMM_PARAM_ELE_AC_PARAMS(pMgntInfo->pStaQos->WMMParamEle, Adapter->STA_EDCA_PARAM); - } - else - { - RT_TRACE(COMP_QOS, DBG_LOUD, - ("SetupJoinIBSSInfo Set a CurrentQosMode = QOS_DISABLE\r\n")); - pMgntInfo->pStaQos->CurrentQosMode = QOS_DISABLE; - pMgntInfo->pStaQos->QBssWirelessMode = WIRELESS_MODE_UNKNOWN; - pMgntInfo->mCap &= ~cQos; - } - - // - // Set High Throughput Configuration - // - ResetIOTSetting(pMgntInfo); - if( (pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) && - (pMgntInfo->pHTInfo->bEnableHT && bssDesc->BssHT.bdSupportHT)) - { - HTResetSelfAndSavePeerSetting(Adapter, bssDesc); - - //Added by sherry for vht 2011227 - if(pMgntInfo->pVHTInfo->bEnableVHT && bssDesc->BssVHT.bdSupportVHT) - VHTResetSelfAndSavePeerSetting(Adapter, bssDesc); - else - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - } - else - { - pMgntInfo->pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - } - - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - - Adapter->HalFunc.SetWirelessModeHandler( Adapter, - SetupJoinWirelessMode(Adapter, bSupportNmode, bssDesc->wirelessmode)); - - // Change bandwidth before join process because the AP may send the Auth and Assoc Rsp frame with - // fixed rate in 40MHz/80Mhz. - CHNL_SetBwChnlFromPeer(Adapter); - - HTSetCCKSupport(Adapter, FALSE, NULL); - - SelectRateSet( Adapter, supprateEX ); - - IOTPeerDetermine(Adapter,bssDesc); - - // Reset TStream related, 070614, by rcnjko. - QosResetAllTs(Adapter); - - // Reset CCX related setting. - CCX_OnBssReset(Adapter); - - // For Turbo Mode resetting. Added by Roger, 2006.12.15. - pMgntInfo->TurboChannelAccess.bEnabled=FALSE; - MgntActSet_EnterTurboMode( Adapter, FALSE); - - // Reset all association entry. - AsocEntry_ResetAll(Adapter); - - // Preprocessing for starting a connection. 2006.10.17, by shien chang. - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, bssDesc->bdMacAddressBuf, 6); - - RT_TRACE(COMP_INIT, DBG_TRACE,("SetupJoinIBSSInfo(): \n")); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return; - } - - // - //Porting from 8xb to avoid IBSS could't reconnected issue after s3/s4, by Maddest. - // - if(!pMgntInfo->bInToSleep && - !MgntRoamingInProgress(pMgntInfo) && pMgntInfo->RequestFromUplayer) - DrvIFIndicateConnectionStart(Adapter); - else - { - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_NORMAL, ROAMINGSTATE_SCANNING); - DrvIFIndicateRoamingStart( Adapter ); - } - -// pMgntInfo->bJoinInProgress = TRUE; - RT_TRACE(COMP_MLME, DBG_TRACE, ("SetupJoinIBSSInfo(): bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("SetupJoinIBSSInfo() <====\n")); -} - - -void -SetupStartIBSSInfo( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bSupportNmode = TRUE; - OCTET_STRING SuppRateSets = pMgntInfo->Regdot11OperationalRateSet; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> SetupStartIBSSInfo() bIbssStarter: %x.\n", pMgntInfo->bIbssStarter)); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - // Disable IPS, 2007.08.17, by shien chang. - IPSDisable(Adapter,FALSE, IPS_DISABLE_DEF_OPMODE); - - if(!pMgntInfo->bIbssStarter) - { - // <1>BSSID - u1Byte rbssid[6]; - u4Byte sed= (u4Byte)(PlatformGetCurrentTime() & 0xffffffff); - - rbssid[0] = 0x0; - rbssid[1] = 0xe0; - rbssid[2] = (u1Byte)((sed & 0xff000000)>>24); - rbssid[3] = (u1Byte)((sed & 0x00ff0000)>>16); - rbssid[4] = (u1Byte)((sed & 0x0000ff00)>>8); - rbssid[5] = (u1Byte)((sed & 0x000000ff)); - PlatformMoveMemory(pMgntInfo->Bssid, rbssid, 6); - //Make sure this is a unicast address - pMgntInfo->Bssid[0] = (pMgntInfo->Bssid[0] & 0x0FC) | 0x02; - - pMgntInfo->bIbssStarter=TRUE; - } - - pMgntInfo->mAssoc = FALSE; - pMgntInfo->mIbss = TRUE; - pMgntInfo->mDisable = TRUE; - pMgntInfo->bStartApDueToWakeup=FALSE; - pMgntInfo->dot11BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; - - pMgntInfo->mCap |= cIBSS; - pMgntInfo->mCap &= (~cESS); - - // Preamble mode. - if(pMgntInfo->RegPreambleMode != PREAMBLE_LONG) - { - pMgntInfo->mCap |= cShortPreamble; - } - else - { - pMgntInfo->mCap &= (~cShortPreamble); - } - - // - // Disable Short slot time. Added by Annie, 2005-11-17. - // - // Ref: 802.11g/D8.2, sec. 7.3.1.4, p13. First line... - // "For IBSS, the Short Slot Time subfield shall be set to 0." - // - if( pMgntInfo->mCap & cShortSlotTime ) - { - pMgntInfo->mCap &= (~cShortSlotTime); - } - - // Set wireless mode to B/G mode if using WEP/TKIP encryption - //bSupportNmode = Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter); - HTInitializeHTInfo(Adapter); - VHTInitializeVHTInfo(Adapter); - - // Start N mode AP - // Start N mode IBSS, if register allow it. - if(ACTING_AS_AP(Adapter) == FALSE && pMgntInfo->bReg11nAdhoc == FALSE) - bSupportNmode = FALSE; - - if(pMgntInfo->bReg11nAdhoc || pMgntInfo->bRegVht24g) - bSupportNmode = TRUE; - - //Set dot11currentchannelnumber-------------- - pMgntInfo->dot11CurrentChannelNumber = pMgntInfo->Regdot11ChannelNumber; - Adapter->HalFunc.SetWirelessModeHandler(Adapter, SetupStarWirelessMode(Adapter, bSupportNmode)); - - // - // 060207, rcnjko: - // For 11d case, we are here only if we had acquired valid country IE - // (see also JoinRequest() for details), - // - pMgntInfo->dot11CurrentChannelNumber = ToLegalChannel(Adapter, pMgntInfo->dot11CurrentChannelNumber); - - //------------------------------------------ - - // Add by hpfan to prevent infrastructure and adhoc mode from connection at the same time - PlatformCancelTimer( Adapter, &pMgntInfo->AuthTimer ); - - pMgntInfo->CurrentBssWirelessMode = pMgntInfo->dot11CurrentWirelessMode; // Keep wireless mode of IBSS to start. 2005.02.17, by rcnjko. - - // 2008.06.12, by Lanhsin. - pMgntInfo->bHalfWiirelessN24GMode = FALSE; - - RT_TRACE(COMP_SEC , DBG_LOUD , ("====>SWRxDecryptFlag = %d \n",pMgntInfo->SecurityInfo.SWRxDecryptFlag) ); - - if(!pMgntInfo->SecurityInfo.SWRxDecryptFlag) - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - else - Adapter->HalFunc.DisableHWSecCfgHandler(Adapter); - - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm!= RT_ENC_ALG_NO_CIPHER) - pMgntInfo->mCap |= cPrivacy; - else - pMgntInfo->mCap &= ~cPrivacy; - - // Set QoS mode. Added by Annie, 2005-11-09. - if(pMgntInfo->pStaQos->QosCapability != QOS_DISABLE) - { - pMgntInfo->pStaQos->CurrentQosMode = QOS_WMM; - pMgntInfo->pStaQos->QBssWirelessMode = pMgntInfo->dot11CurrentWirelessMode; - pMgntInfo->mCap |= cQos; - - // Use default EDCA parameters - SET_WMM_PARAM_ELE_AC_PARAMS(pMgntInfo->pStaQos->WMMParamEle, Adapter->STA_EDCA_PARAM); - } - else - { - pMgntInfo->pStaQos->CurrentQosMode = QOS_DISABLE; - pMgntInfo->pStaQos->QBssWirelessMode = WIRELESS_MODE_UNKNOWN; - pMgntInfo->mCap &= ~cQos; - } - - // Set HT related capabilities - if((pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM)) - { - HTUseDefaultSetting(Adapter); - VHTUseDefaultSetting(Adapter); - } - else - { - pMgntInfo->pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - pMgntInfo->dot11CurrentChannelBandWidth = CHANNEL_WIDTH_20; - PlatformZeroMemory(pMgntInfo->dot11HTOperationalRateSet, 16); - } - - HTSetCCKSupport(Adapter, TRUE, NULL); - - SelectRateSet( Adapter, SuppRateSets ); - - if( IS_WIRELESS_MODE_G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK) ) - { - ActUpdate_ERPInfo(Adapter, 0); - } - - //Sherry Modified for dmsp mode 20110517 sync with 92C_92D 20110701 - //Vista/softAP not to set BW Mode here Sherry sync with 92C_92D_20110701 - { - AP_SetBandWidth(Adapter); - } - - // Reset TStream related, 070614, by rcnjko. - QosResetAllTs(Adapter); - - // Reset CCX related setting. - CCX_OnBssReset(Adapter); - - // For Turbo Mode resetting. Added by Roger, 2006.12.15. - pMgntInfo->TurboChannelAccess.bEnabled=FALSE; - MgntActSet_EnterTurboMode( Adapter, FALSE); - - // Reset all association entry. - AsocEntry_ResetAll(Adapter); - - pMgntInfo->bJoinInProgress = FALSE; - RT_TRACE(COMP_MLME, DBG_TRACE, ("SetupStartIBSSInfo(): bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("SetupStartIBSSInfo() <====\n")); -} - - - -// -// For 8187, we have to do the IOs with read operation in sync IO manner. -// 2005.01.06, by rcnjko. -// -void -IbssStartRequest( - PADAPTER Adapter -) -{ -#if USE_WORKITEM - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - // Make sure at most one IbssStartRequestWorkItem is executed. 2005.03.04, by rcnjko. - if( PlatformIsWorkItemScheduled(&(pMgntInfo->IbssStartRequestWorkItem)) == FALSE); - { - PlatformScheduleWorkItem( &(pMgntInfo->IbssStartRequestWorkItem) ); - } -#else - IbssStartRequestCallback((PVOID)Adapter); -#endif -} - - - -// -// Configure HW to start or join an IBSS. -// 2005.01.06, by rcnjko. -// -VOID -IbssStartRequestCallback( - IN PVOID Context - ) -{ - PADAPTER Adapter = (PADAPTER)Context; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - RT_OP_MODE btLinkStatus = RT_OP_MODE_NO_LINK; - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - u1Byte RetryLimit = HAL_RETRY_LIMIT_AP_ADHOC; - BOOLEAN bTypeIbss = FALSE; - u1Byte SwBeaconType = BEACON_SEND_AUTO_HW; - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_IBSS; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> IbssStartRequestCallback()\n")); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_HW_BEACON_SUPPORT, (pu1Byte)&SwBeaconType); - - pMgntInfo->BeaconState = BEACON_STARTING; - - //-------------------------------------------------------------------------------- - // IBSS HW Configuration. - //-------------------------------------------------------------------------------- - - // - // Clear MSR first, asked by Owen, 2005.01.27, by rcnjko. - // - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)&btLinkStatus ); - pMgntInfo->dot11CurrentPreambleMode = PREAMBLE_AUTO; // Added for short preamble peer. Added by Annie, 2006-06-08. - - - // - // Update Capability field related setting. - // - // To solve Win98 IRQL==PASIVE_LEVEL in timer callback function, - // we call ActUpdate_mCapInfo() here to make sure related IOs are perfomed in correct IRQL, - // that is, PASSIVE_LEVEL=>Syn IO for this case. 2005.03.15, by rcnjko. - // - ActUpdate_mCapInfo( Adapter, pMgntInfo->mCap ); - - // - // Set BSSID. - // - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - - - // - // Set Beacon related registers - // We shall update AtimWindow specified in Beacon of the IBSS if "every thing is ready." - // - pMgntInfo->dot11AtimWindow = 2; // ATIM Window (in unit of TU). - Adapter->HalFunc.SetBeaconRelatedRegistersHandler(Adapter, (PVOID)(&pMgntInfo->OpMode), \ - pMgntInfo->dot11BeaconPeriod, pMgntInfo->dot11AtimWindow); - - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - - // - // Set operation mode to IBSS. - // - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_RETRY_LIMIT, (pu1Byte)(&RetryLimit)); - - if(!pMgntInfo->bIbssStarter) - { - //Correct TSF value. Suggest by Scott. Added by tynli. 2009.12.01. - bTypeIbss = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CORRECT_TSF, (pu1Byte)(&bTypeIbss)); - } - - // - // Start to send beacon. - // - if(!ACTING_AS_AP(Adapter)) //For RT_AP_TYPE_IBSS_EMULATED CCK Hang,sherry sync with 92C_92D, 20110701 - { - if(SwBeaconType >= BEACON_SEND_AUTO_SW) // Using SW Beacon Timer - { // S/W Beacon. - PlatformSetTimer( Adapter, &pMgntInfo->SwBeaconTimer, 0 ); - } - else - { // H/W Beacon. - ConstructBeaconFrame( Adapter ); - SendBeaconFrame(Adapter, BEACON_QUEUE); - } - } - - // If connected, set RCR CBSSID bit to prevent wrong TSF for 819x series.. - bFilterOutNonAssociatedBSSID = pMgntInfo->bMediaConnect; // Set to FALSE for our NIC is ibss starter by tynli. - if(!pMgntInfo->bIbssStarter) - bFilterOutNonAssociatedBSSID = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - - // - // Set EDCA Parameter Set for QIBSS - // - if(pMgntInfo->pStaQos->CurrentQosMode != QOS_DISABLE) - { - // Update AC parameters to HW. - u1Byte eACI = 0; - for(eACI = 0; eACI < AC_MAX; eACI++) - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pMgntInfo->pStaQos->WMMParamEle, eACI) ); - } - else - { - // Using 802.11 defualt settings. - QosSetLegacyACParam(Adapter); - } - - if(!pMgntInfo->bWiFiConfg && !Adapter->bInHctTest) - Adapter->HalFunc.HalRxAggrHandler(Adapter,TRUE); - - //-------------------------------------------------------------------------------- - // IBSS SW Configuration. - //-------------------------------------------------------------------------------- - - - MgntResetLinkStatusWatchdogState(Adapter); - - if( pMgntInfo->JoinAction == RT_JOIN_IBSS ) - { - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, GENERAL_INDICATE ); - pMgntInfo->bJoinInProgress = FALSE; - RT_TRACE(COMP_MLME, DBG_TRACE, ("IbssStartRequestCallback(): bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - } - - // - // Reset bIbssCorordinator. - // - // 1. It will be update TRUE if we are winner of latest Beacon, FALSE otherwise. - // See also OnProbeReq() and NicIFHandleInterrupt() for details. - // 2. On 8187, we don't have interrupt mechanism to check if the we are winner of Beacon, - // so, bIbssCoordinator must be initialize to TRUE and no other place will change it. - // 2005.12.14, by rcnjko. - // - pMgntInfo->bIbssCoordinator = TRUE; - - // - // Set mDisable to FALSE after we had finished all configuration for the IBSS. - // 2005.12.13, by rcnjko. - // - pMgntInfo->mDisable = FALSE; - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_START_TO_LINK); - RT_TRACE(COMP_MLME, DBG_TRACE, ("IbssStartRequestCallback() <====\n")); -} - - -// -// Description: -// Remove idle STA of the IBSS. -// -VOID -IbssAgeFunction( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_WLAN_STA AsocEntry = pMgntInfo->AsocEntry; - u8Byte TimeDifference; - u2Byte idx, nBModeStaCnt = 0; - u1Byte nLegacyStaCnt = 0, n20MHzStaCnt = 0; - u8Byte CurrentTime = PlatformGetCurrentTime(); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - for(idx = 0; idx < ASSOCIATE_ENTRY_NUM; idx++) - { - if(AsocEntry[idx].bUsed) - { - // TimeDifference is in ms. - TimeDifference = PlatformDivision64((CurrentTime - AsocEntry[idx].LastActiveTime), 1000); - - // 20 second. - if(TimeDifference > 20000) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "IbssAgeFunction(): timeout\n", AsocEntry[idx].MacAddr); - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, AsocEntry[idx].MacAddr, 6); - DrvIFIndicateDisassociation(Adapter, unspec_reason, AsocEntry[idx].MacAddr); - - // In Win7 NDISTest AdhocInterop, it verifies that we indicate dissassoc for - // each IBSS member that sends deauth to us. - // We indicate a dummy assoc event so that we could indicate a dissassoc - // again later. - // 2008.08.05, haich. - // - //if(Adapter->bInHctTest == TRUE) -#if 0 - { - static u1Byte DummySta[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; - - // - // Indicate dummy STA assocation event. - // - RT_TRACE(COMP_MLME, DBG_LOUD, ("IbssAgeFunction indicate dummy assoc\n")); - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, DummySta, 6); - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - } -#endif - RT_TRACE(COMP_AP, DBG_LOUD, ("AsocEntry_RemoveStation\n")); - - AsocEntry_RemoveStation(Adapter, AsocEntry[idx].MacAddr); - - WAPI_SecFuncHandler(WAPI_RETURNONESTAINFO, Adapter, (PVOID)(AsocEntry[idx].MacAddr), WAPI_END); - - } - - // Set nBModeStaCnt, nLegacyStaCnt, n20MHzStaCnt. - // We do not set these values before. 2010.11.02. Added by tynli. - if(AsocEntry[idx].bAssociated) - { - if(AsocEntry[idx].WirelessMode == WIRELESS_MODE_B) - nBModeStaCnt++; - if(AsocEntry[idx].WirelessMode < WIRELESS_MODE_N_24G) - nLegacyStaCnt++; - else if(AsocEntry[idx].BandWidth == CHANNEL_WIDTH_20) - n20MHzStaCnt++; - } - } - } - - if(AsocEntry_AnyStationAssociated(pMgntInfo)==FALSE) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("IbssAgedFuction: AsocEntry_AnyStationAssociated() FALSE\n")); - // DrvIFIndicateDisassociation(Adapter, unspec_reason); - } - - // Disable protection mode and Enable short slot time if an B-mode STA joined. - if( IS_WIRELESS_MODE_G(Adapter)|| - (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)) - { - if(nBModeStaCnt == 0) - ActUpdate_ProtectionMode(Adapter, FALSE); - else - ActUpdate_ProtectionMode(Adapter, TRUE); - } - - // Update the Operation mode field in HT Info element. - if(IS_WIRELESS_MODE_N(Adapter)) - { - if(nLegacyStaCnt > 0) - { - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_MIXED; - } - else - { - if(CHNL_RUN_ABOVE_40MHZ(pMgntInfo) && (n20MHzStaCnt > 0)) - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_40MHZ_PROTECT; - else - pMgntInfo->pHTInfo->CurrentOpMode = HT_OPMODE_NO_PROTECT; - } - } - - // - // This setup the RTS rate set for rate adaptive in firmware. - // For the condition of the USE_PROTECTION bit is set in ERP IE, - // we shall set the RTS rate to 11b rate, else set all basic rate by default. - // Joseph, 20070131 - // - if( IS_WIRELESS_MODE_G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && pMgntInfo->pHTInfo->bCurSuppCCK)) - { - if(pMgntInfo->bUseProtection) - { - u1Byte CckRate[4] = { MGN_1M, MGN_2M, MGN_5_5M, MGN_11M }; - OCTET_STRING osCckRate; - FillOctetString(osCckRate, CckRate, 4); - FilterSupportRate(pMgntInfo->mBrates, &osCckRate, FALSE); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BASIC_RATE, (pu1Byte)&osCckRate); - } - else - { - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BASIC_RATE, (pu1Byte)(&pMgntInfo->mBrates) ); - } - } - else - { - // Periodically update RTS rate to prevent the RTS rate > init data rate. 2010.11.24. by tynli. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)(&Adapter)); - } - -} - - -void -MgntDisconnectAP( - PADAPTER Adapter, - u1Byte asRsn -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - BOOLEAN bConnected =FALSE; - - { - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - Adapter->HalFunc.AllowErrorPacketHandler(Adapter, FALSE, TRUE); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_ENABLE_TXOK_INTERRUPT, (pu1Byte)&bConnected); - - MultiChannelDisconnectClient(Adapter, TRUE); - - // 2004.10.11, by rcnjko. - MlmeDisassociateRequest( Adapter, pMgntInfo->Bssid, asRsn ); - - // In WPA WPA2 need to Clear all key ... because new key will set after new handshaking. - // We shall only clear the keys after sedning Mgnt frames because the frames may still be protected by these keys. - // By Bruce, 2015-01-10. - { - BOOLEAN bAPSuportCCKM = FALSE; - BOOLEAN bCCX8021xenable = FALSE; - - CCX_QueryCCKMSupport(Adapter, &bCCX8021xenable, &bAPSuportCCKM); - - if( pMgntInfo->SecurityInfo.AuthMode > RT_802_11AuthModeAutoSwitch || - (bAPSuportCCKM && bCCX8021xenable) ) // In CCKM mode will Clear key - { - SecClearAllKeys(Adapter); - RT_TRACE(COMP_SEC, DBG_LOUD,("======>CCKM clear key...")); - } - } - - pMgntInfo->mAssoc = FALSE; - pMgntInfo->AsocTimestamp = 0; -} - - - - -BOOLEAN -MgntDisconnect( - PADAPTER Adapter, - u1Byte asRsn -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnect()====>\n")); - pMgntInfo->bDisconnectInProgress = TRUE; - pMgntInfo->RequestFromUplayer = FALSE; - - // - // Schedule an workitem to wake up for ps mode, 070109, by rcnjko. - // - if(pMgntInfo->mPss != eAwake) - { - // - // Using AwkaeTimer to prevent mismatch ps state. - // In the timer the state will be changed according to the RF is being awoke or not. By Bruce, 2007-10-31. - // - // PlatformScheduleWorkItem( &(pMgntInfo->AwakeWorkItem) ); - PlatformSetTimer( Adapter, &(pMgntInfo->AwakeTimer), 0 ); - } - - // Follow 8180 AP mode, 2005.05.30, by rcnjko. - if(ACTING_AS_AP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnect() ===> AP_DisassociateAllStation\n")); - AP_DisassociateAllStation(Adapter, unspec_reason); - return TRUE; - } - - - //stop beacon when ibssstarter and no station joins - if( pMgntInfo->mIbss ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnect() ===> MgntDisconnectIBSS\n")); - - if (WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - { - WAPI_SecFuncHandler(WAPI_RETURNALLCAMENTRY,Adapter, WAPI_END); - SecClearAllKeys(Adapter); - } - MgntDisconnectIBSS( Adapter ); - } - - // In adhoc mode, update beacon frame. - if( pMgntInfo->bMediaConnect ) - { - BOOLEAN bConnected =FALSE; - - if( pMgntInfo->mAssoc ) - { - // We should leave LPS mode first. 2011.03.23. by tynli. - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - LeisurePSLeave(Adapter, LPS_DISABLE_MGNT_DISCONNECT); - } - - // We clear key here instead of MgntDisconnectAP() because that - // MgntActSet_802_11_DISASSOCIATE() is an interface called by OS, - // e.g. OID_802_11_DISASSOCIATE in Windows while as MgntDisconnectAP() is - // used to handle disassociation related things to AP, e.g. send Disassoc - // frame to AP. 2005.01.27, by rcnjko. - - WAPI_SecFuncHandler(WAPI_RETURNALLCAMENTRY,Adapter, WAPI_END); - - SecClearAllKeys(Adapter); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnect() ===> MgntDisconnectAP\n")); - MgntDisconnectAP(Adapter, asRsn); - } - - Adapter->HalFunc.AllowErrorPacketHandler(Adapter, FALSE, TRUE); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_ENABLE_TXOK_INTERRUPT, (pu1Byte)&bConnected); - - - // Inidicate Disconnect, 2005.02.23, by rcnjko. - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE); - } - pMgntInfo->bDisconnectInProgress = FALSE; - - FunctionOut(COMP_MLME); - return TRUE; -} - - - -void -MgntDisconnectIBSS( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte i; - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - PRT_WLAN_STA AsocEntry = pMgntInfo->AsocEntry; - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_DISABLE; - FunctionIn(COMP_MLME); - - pMgntInfo->mIbss = FALSE; - pMgntInfo->bIbssStarter = FALSE; - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - - // Disable Beacon early interrupt mask. - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - - //Stop Beacon. - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_BSSID, pMgntInfo->Bssid ); - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pMgntInfo->OpMode) ); - - // Stop SW Beacon. - MgntStopBeacon(Adapter); - - // - // Send every station in the ad hoc network a de-auth message and clear their - // association states. - // - for(i = 0;i < ASSOCIATE_ENTRY_NUM; i++) - { - if(AsocEntry[i].bUsed && AsocEntry[i].bAssociated) - { - SendDeauthentication(Adapter, AsocEntry[i].MacAddr, deauth_lv_ss); - AsocEntry[i].bAssociated = FALSE; - - MgntUpdateAsocInfo(Adapter, UpdateDeauthAddr, AsocEntry[i].MacAddr, 6); - DrvIFIndicateDisassociation(Adapter, unspec_reason, AsocEntry[i].MacAddr); - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Sending Deauth to:", AsocEntry[i].MacAddr); - } - } - - // If disconnect, clear RCR CBSSID bit - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - -// DrvIFIndicateDisassociation(Adapter, unspec_reason); - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - - AsocEntry_ResetAll(Adapter); - - // We should return IPS state when IBSS disconnect. Added by tynli. 2010.04.09. - // 20100414 Joseph: Add IPS return reason. - IPSReturn(Adapter, IPS_DISABLE_DEF_OPMODE); - -} - -VOID -MgntIndicateMediaDisconnectStatus( - PADAPTER Adapter -) -{ - BOOLEAN bSW20BW = FALSE; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - pMgntInfo->LinkDetectInfo.IndicateDisconnectCnt++;//cosa add for debug - pMgntInfo->bMediaConnect = FALSE; - pMgntInfo->DisconnectedSlotCount=0; - - - if(!ACTING_AS_AP(Adapter)) - { - if(!pMgntInfo->bIbssStarter) - { - if(IsDefaultAdapter(Adapter)) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("Now is Default Adapter.\n")); - - //Fix can not ping wapi ap with defaultport when stop hostednetwork, move it to here from below by ylb 20110915 - WAPI_SecFuncHandler(WAPI_RETURNALLSTAINFO,pDefaultAdapter, WAPI_END); - WAPI_SecFuncHandler(WAPI_RETURNALLCAMENTRY,pDefaultAdapter, WAPI_END); - - } - else - { - RT_TRACE(COMP_MLME,DBG_LOUD,("Now is Extension Adapter.\n")); - - if(pDefaultAdapter->MgntInfo.bMediaConnect== FALSE) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("Has no Def started.->20MHz\n")); - bSW20BW = TRUE; - } - } - - if(bSW20BW && !MgntScanInProgress(pMgntInfo)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - - HalChangeWirelessMode(Adapter,pMgntInfo->dot11CurrentChannelNumber); - CHNL_SetBwChnl( Adapter, - pMgntInfo->dot11CurrentChannelNumber, - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT - ); - } - pMgntInfo->pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - pMgntInfo->pStaQos->CurrentQosMode = QOS_DISABLE; - pMgntInfo->pStaQos->QBssWirelessMode = WIRELESS_MODE_UNKNOWN; - } - // Do this to reset TS data structure. - RemoveAllTS(Adapter); - } - - // - // We disable FW DIG while medium is disconnected. - // We currently do NOT update OpMode to allow roaming case in watchdog. - // 2008.11.27. - // Currently we do NOT need to enable DIG(i.e., it will reference MSR automatically). - // - if(!pMgntInfo->bIbssStarter) - { - RT_OP_MODE OpStatus = RT_OP_MODE_NO_LINK; // update HW operation mode here. - Adapter->HalFunc.SetHwRegHandler( pDefaultAdapter, HW_VAR_MEDIA_STATUS, (pu1Byte)&OpStatus); - } - Dot11d_Reset(Adapter); - -} - - -void -MgntIndicateMediaStatus( - PADAPTER Adapter, - RT_MEDIA_STATUS mstatus, - u1Byte Indicatemode -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - BOOLEAN bIndicate = FALSE; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - // For the first time indicating MEDIA_CONNECT. - if(mstatus==RT_MEDIA_CONNECT && pDefaultAdapter->ResetProgress==RESET_TYPE_NORESET)//?? - { - MgntResetLinkStatusWatchdogState(Adapter); - } - - // We don't know when this case will be triggered and it SHOULD NOT happend. - // So, we just skip AP mode's disconnected event indication here as a workaround and - // add assertion for debug purpose. 2005.08.16, by rcnjko. - if( ACTING_AS_AP(pDefaultAdapter) && mstatus==RT_MEDIA_DISCONNECT && - !(pMgntInfo->RfOffReason & (RF_CHANGE_BY_SW|RF_CHANGE_BY_HW)) ) - { - RT_ASSERT(TRUE, ("MgntIndicateMediaStatus(): AP mode should not indicate disconnected event!!!\n")); - return; - } - - if( mstatus == RT_MEDIA_CONNECT ) - { - if( pMgntInfo->bMediaConnect == FALSE ) - { - pMgntInfo->bMediaConnect = TRUE; - bIndicate = TRUE; - - // Only Ibss starter need to set check bssid=TRUE again. - // (fixed for DTM for beacon can't tx issue???) - // All IC need to do this?? or only 92C need to do?? - if(pMgntInfo->bIbssStarter) - { - bFilterOutNonAssociatedBSSID = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - - // H2C cmd for BT information. 2011.02.10. by tynli. - if(pMgntInfo->mIbss) - { - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_WLAN_INFO, (pu1Byte)(&mstatus)); - } - - RT_TRACE(COMP_MLME, DBG_WARNING, ("MEDIA_STATUS_CONNECT !!\n")); - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("MEDIA_STATUS_KEEP_CONNECT !!\n")); - } - } - else if( mstatus == RT_MEDIA_DISCONNECT ) - { - - if( pMgntInfo->bMediaConnect == TRUE ) - { - bIndicate = TRUE; - MgntIndicateMediaDisconnectStatus(Adapter); - RT_TRACE(COMP_MLME, DBG_WARNING, ("MEDIA_STATUS_DISCONNECT !!\n")); - - if(pMgntInfo->mAssoc && pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - u2Byte JaguarPatch = (pMgntInfo->IOTPeer << 8) | mstatus; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_JAGUAR_PATCH, (pu1Byte)(&JaguarPatch)); - - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { - LeisurePSLeave(Adapter, LPS_DISABLE_MGNT_INDI_DISCONNECT); - Hal_ClearRsvdCtrl(Adapter, RSVDPAGE_TYPE_LPS); - Adapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_H2C_FW_JOINBSSRPT, (pu1Byte)(&mstatus)); - } - - - // Deregister all MacIDs created by this adpater ------------ - MacIdDeregisterMacIdForInfraClient(Adapter, pMgntInfo->mMacId); - MacIdDeregisterSpecificMacId(Adapter, pMgntInfo->mcastMacId); - // -------------------------------------------------- - } - Adapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_H2C_WLAN_INFO, (pu1Byte)(&mstatus)); - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("MEDIA_STATUS_KEEP_DISCONNECT !!\n")); - } - - //Reset BCN related function. Suggested by TimChen. Added by tynli. 2009.12.03. - //This check only apply to two port, consider port 2 ap mode. - //CHECK_ADAPTER_SENDS_BEACON return zero in one port design and just reset tsf. - // - if(IsAPModeExist(Adapter)) // IS_ADAPTER_SENDS_BEACON(Adapter) - { - Adapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_DUAL_TSF_RST, 0); - } - // If we disconnet with AP or NIC, clear RCR CBSSID bit. - - { - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("Warning: Unknown link status !!\n")); - } - - if((bIndicate && Indicatemode != FORCE_NO_INDICATE) || (Indicatemode==FORCE_INDICATE)) - { - if(mstatus==RT_MEDIA_CONNECT) - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_LINK); - else - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_NO_LINK); - PlatformIndicateMediaStatus( Adapter, mstatus); - } - -#if (MULTICHANNEL_SUPPORT == 1) -{ - MultiChannelStatusWatchdog(Adapter); -} -#endif - -} - - - -void -AsocTimeout( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - OCTET_STRING nullpdu; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> AsocTimeout()\n")); - //Adapter->MgntInfo.bJoinInProgress = FALSE; - - nullpdu.Length = 0; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - -#if (P2P_SUPPORT == 1) - if(P2P_ADAPTER_OS_SUPPORT_P2P(Adapter) && P2P_ACTING_IS_CLIENT(Adapter)) - { - McDynamicMachanismSet(Adapter, MC_DM_INIT_GAIN_BOOST_END, NULL, 0); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] AsocTimeout...resume DIG\n")); - } -#endif - - //ShuChen TODO: Retry association request - - switch( pMgntInfo->State_AsocService ) - { - case STATE_Wait_Asoc_Response: - RT_TRACE(COMP_MLME, DBG_LOUD, ("AsocTimeout(): STATE_Wait_Asoc_Response.\n")); - MlmeAssociateConfirm(Adapter, NULL, &nullpdu, FALSE, MlmeStatus_timeout); - break; - case STATE_Wait_Reasoc_Response: - RT_TRACE(COMP_MLME, DBG_LOUD, ("AsocTimeout(): STATE_Wait_Reasoc_Response.\n")); - MlmeAssociateConfirm(Adapter, NULL, &nullpdu, TRUE, MlmeStatus_timeout); - break; - default: - break; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("AsocTimeout() <====\n")); -} - - - -BOOLEAN -MlmeAssociateRequest( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u4Byte asocTmot, - u2Byte asCap, - u2Byte asListenInterval, - BOOLEAN Reassociate -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> MlmeAssociateRequest()\n")); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - DrvIFIndicateAssociationStart(Adapter); - - if (CCX_MlmeAssociateRequest(Adapter)) - return TRUE; - - P2PMlmeAssociateRequest(Adapter, asocStaAddr, asocTmot, asCap, asListenInterval, Reassociate); - - if( Reassociate ){ - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAssociateRequest(): Send Reassociate Req\n")); - - SendReassociateReq( Adapter, asocStaAddr, asCap, asListenInterval, pMgntInfo->APaddrbeforeRoaming ); - pMgntInfo->State_AsocService = STATE_Wait_Reasoc_Response; - } - else{ - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAssociateRequest(): Send Associate Req\n")); - - SendAssociateReq( Adapter, asocStaAddr, asCap, asListenInterval); - pMgntInfo->State_AsocService = STATE_Wait_Asoc_Response; - } - - PlatformSetTimer( Adapter, &pMgntInfo->AsocTimer, asocTmot ); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAssociateRequest(): return TRUE. <====\n")); - return TRUE; -} - - -// -// Description: -// Confirm the assoication status. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// If this function is not triggered by rx packet, this field is assigned as NULL. -// [in] posMpdu - -// The poniter of the current packet to the 802.11 header. -// If this function is not triggered by rx packet, this field is assigned as NULL. -// [in] bReassociate - -// TRUE if this packet is Reassociation response packet. FALSE if this packet is association response packet. -// [in] result - -// The status of this confirm process. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// By determining the result status code, handle the assoication process for client mode. -// -RT_STATUS -MlmeAssociateConfirm( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu, - IN BOOLEAN bReassociate, - IN u2Byte result - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte asocStaAddr[6]; - u2Byte myCap; - u2Byte asListenInterval = pMgntInfo->ListenInterval; - u1Byte ErrorPoint = AssocSuccess; - u1Byte mstatus = RT_MEDIA_CONNECT; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("result: %d. Current Channel %d\n", result,pMgntInfo->dot11CurrentChannelNumber)); - - // Cancel AsocTimer - PlatformCancelTimer( Adapter, &pMgntInfo->AsocTimer ); - - pMgntInfo->State_AsocService = STATE_Asoc_Idle; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return RT_STATUS_FAILURE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return RT_STATUS_FAILURE; - } - - // - // To simplify handling association fail, I use ErrorPoint to indicate how to - // handle the assocaition failed process later. By Bruce, 2008-05-28. - // - ErrorPoint = AssocUnspecFail; - - if(result == MlmeStatus_success) - { - if(posMpdu->Length > 0) - { - if(Frame_AssocStatusCode(*posMpdu) == StatusCode_success) - { - u2Byte JaguarPatch; - RT_STATUS bMlmeOkState; - - ErrorPoint = AssocSuccess; - bMlmeOkState = MlmeOnAssocOK(Adapter, pRfd, posMpdu, bReassociate); - -#if (P2P_SUPPORT == 1) - if(P2P_ADAPTER_OS_SUPPORT_P2P(Adapter) && P2P_ACTING_IS_CLIENT(Adapter)) - { - u2Byte boostDelaySec = ASSOC_HANDSHAKE_DHCP_DELAY_SEC; - - McDynamicMachanismSet(Adapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] Asoc SUCCESS! resume DIG\n")); - } -#endif - - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { //For FW LPS. by tynli. To tell firmware we have connected to an AP. For 92SE/CE power save v2. - Hal_SetRsvdCtrl(Adapter, RSVDPAGE_TYPE_LPS); - } - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_WLAN_INFO, (pu1Byte)(&mstatus)); - - JaguarPatch = (pMgntInfo->IOTPeer << 8) | mstatus; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_JAGUAR_PATCH, (pu1Byte)(&JaguarPatch)); - - // New Connection is comming, we need to confirm new channel connect and start - // to judge if we need to start multi channel switch. - MultiChannelAssociateConfirm(Adapter, TRUE); - - // If return Fail , try to complete State On Reset Request by bJoinInProgress flag !! - if( !(bMlmeOkState == RT_STATUS_FAILURE && MgntResetOrPnPInProgress(Adapter)) ) - { - pMgntInfo->bJoinInProgress = FALSE; - } - - // Download rsvd page after all required bitmap is set - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_JOINBSSRPT, (pu1Byte)(&mstatus)); - - RT_TRACE(COMP_MLME, DBG_TRACE, ("MlmeAssociateConfrim(): - success, bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("return TRUE. <====\n")); - - return RT_STATUS_SUCCESS; - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("[WARNING] AssocFail, StatusCode = %d\n", Frame_AssocStatusCode(*posMpdu))); - } - } - } - else if(pMgntInfo->AsocRetryCount < RT_ASOC_RETRY_LIMIT && - !MgntIsTimeOutForIndication(pMgntInfo)) - { // Timeout... - ErrorPoint = AssocRetry ; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return RT_STATUS_FAILURE; - } - - switch(ErrorPoint) - { - case AssocRetry: - { // Try again - pMgntInfo->AsocRetryCount ++; - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAssociateConfirm(): failed(%d) => Asoc retry for AsocRetryCount(%d) < RT_ASOC_RETRY_LIMIT(%d)\n", result, pMgntInfo->AsocRetryCount, RT_ASOC_RETRY_LIMIT)); - - CopyMem( asocStaAddr, pMgntInfo->Bssid, 6 ); - myCap = pMgntInfo->mCap; - MlmeAssociateRequest( Adapter, asocStaAddr, ASSOC_REQ_TIMEOUT, myCap, asListenInterval, bReassociate ); - } - break; - - case AssocUnspecFail: - { // Try to connect to the other. - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAssociateConfirm(): failed(%d) => No Retry! Try to connect to the other one BSS!!\n", result)); - - // Remember the rejected AP, if another AP in the same ESS is better, - // pick the better one in further connection. 2006.11.21, by shien chang. - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - - // Postprocessing for completion of a association request, 2006,10.17, by shien chang. - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_NO_LINK); - - if(!MgntConnectOtherBss(Adapter)) - { // Connect to the Other BSS failed. - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return RT_STATUS_FAILURE; - } - - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - - if(MgntRoamingInProgress(pMgntInfo)) // Roaming. - MgntRoamComplete(Adapter, MlmeStatus_invalid); - else // First connection. - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - - pMgntInfo->bJoinInProgress = FALSE; - MultiChannelAssociateConfirm(Adapter, FALSE); - } - - // pMgntInfo->bJoinInProgress = FALSE; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("MlmeAssociateConfirm(): -fail 0, bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - } - break; - - default: - break; - } - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAssociateConfirm(): return FALSE. <====\n")); - return RT_STATUS_SUCCESS; -} - - - - -void -AuthTimeout( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> AuthTimeout()State_AuthReqService %d\n", Adapter->MgntInfo.State_AuthReqService)); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - switch( Adapter->MgntInfo.State_AuthReqService ) - { - case STATE_Wait_Auth_Seq_2: - case STATE_Wait_Auth_Seq_4: - - // StaState(Adapter, auSta, StationState_not_auth); - Adapter->MgntInfo.State_AuthReqService = STATE_Auth_Req_Idle; - MlmeAuthenticateRequest_Confirm(Adapter, MlmeStatus_timeout); - break; - default: - break; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<====AuthTimeout() State_AuthReqService %d\n", Adapter->MgntInfo.State_AuthReqService)); -} - - - - -BOOLEAN -MlmeAuthenticateRequest( - PADAPTER Adapter, - pu1Byte auStaAddr, - u1Byte auAlg, - u4Byte auTmot -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte AuthSeq; - u1Byte AuthStatusCode; - OCTET_STRING AuthChallengetext; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> MlmeAuthenticateRequest()\n")); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - AuthSeq = 1; - AuthStatusCode = StatusCode_success; - - //Since this is always the 1st authentication frame - AuthChallengetext.Length = 0; - - //Send authentication frame - SendAuthenticatePacket( Adapter, auStaAddr, auAlg, AuthSeq, AuthStatusCode, AuthChallengetext ); - - PlatformSetTimer( Adapter, &pMgntInfo->AuthTimer, auTmot ); - - //Set authentication state - pMgntInfo->State_AuthReqService = STATE_Wait_Auth_Seq_2; - RT_TRACE(COMP_MLME, DBG_LOUD, ("<====MlmeAuthenticateRequest(): return TRUE. State_AuthReqService %d\n", pMgntInfo->State_AuthReqService)); - return TRUE; -} - - -BOOLEAN -MlmeAuthenticateRequest_Confirm( - PADAPTER Adapter, - u2Byte result - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte auStaAddr[6]; - u1Byte asocStaAddr[6]; - u2Byte myCap; - u2Byte asListenInterval = pMgntInfo->ListenInterval; - u1Byte auAlg; - BOOLEAN bReassociation = FALSE; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> MlmeAuthenticateRequest_Confirm(): result: %d., opMode: %u\n", result, pMgntInfo->OpMode)); - - // Cancel AuthTimer - PlatformCancelTimer( Adapter, &pMgntInfo->AuthTimer ); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - if( result != MlmeStatus_success) - { - //Retry MlmeAuthenticateRequest - if( (pMgntInfo->AuthRetryCount++ < RT_AUTH_RETRY_LIMIT) && - result != MlmeStatus_invalid && - !MgntIsTimeOutForIndication(pMgntInfo)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAuthenticateRequest_Confirm(): Auth retry for AuthRetryCount(%d) < RT_AUTH_RETRY_LIMIT(%d)\n", pMgntInfo->AuthRetryCount, RT_AUTH_RETRY_LIMIT)); - - // Auto switch authentication mode if we are in WEP encryption. 2005.03.08, by rcnjko. - if( pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeAutoSwitch && - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) ) - { - // Change auth alg. - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAuthenticateRequest_Confirm(): Change auth alg\n")); - if(pMgntInfo->AuthReq_auAlg == OPEN_SYSTEM) - { - pMgntInfo->AuthReq_auAlg = SHARED_KEY; - } - else - { - pMgntInfo->AuthReq_auAlg = OPEN_SYSTEM; - } - } - - auAlg = pMgntInfo->AuthReq_auAlg; - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAuthenticateRequest_Confirm(): auAlg(%d)\n", auAlg)); - - CopyMem( auStaAddr, pMgntInfo->Bssid, 6 ); - MlmeAuthenticateRequest( Adapter, auStaAddr, auAlg, AUTH_REQ_TIMEOUT ); - pMgntInfo->AuthStatus = AUTH_STATUS_IN_PROGRESS; - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAuthenticateRequest_Confirm(): No more Auth retry for AuthRetryCount(%d) >= RT_AUTH_RETRY_LIMIT(%d)\n", pMgntInfo->AuthRetryCount, RT_AUTH_RETRY_LIMIT)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAuthenticateRequest_Confirm(): Reset roaming and AuthStatus!\n")); - -#if (P2P_SUPPORT == 1) - if(P2P_ADAPTER_OS_SUPPORT_P2P(Adapter) && P2P_ACTING_IS_CLIENT(Adapter)) - { - McDynamicMachanismSet(Adapter, MC_DM_INIT_GAIN_BOOST_END, NULL, 0); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] Auth Timeout...resume DIG\n")); - } -#endif - - // Remember the rejected AP, if another AP in the same ESS is better, - // pick the better one in further connection. 2006.11.21, by shien chang. - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - - pMgntInfo->AuthStatus = AUTH_STATUS_FAILED; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("MlemAuthenticateRequest_Confirm(): bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_NO_LINK); - - // Rewritten by Bruce, 2008-05-29. - if(!MgntConnectOtherBss(Adapter)) - { // Connect the Other BSS failed. - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return FALSE; - } - - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - - if(MgntRoamingInProgress(pMgntInfo)) // Roaming. - MgntRoamComplete(Adapter, MlmeStatus_invalid); - else // First connection. - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - - pMgntInfo->bJoinInProgress = FALSE; - MultiChannelAssociateConfirm(Adapter, FALSE); - } - } - return FALSE; - } - - - if( pMgntInfo->OpMode == RT_OP_MODE_IBSS ) - { - IbssStartRequest( Adapter ); - MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, GENERAL_INDICATE ); - } - else if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - CopyMem( asocStaAddr, pMgntInfo->Bssid, 6 ); - - // cESS - myCap = cESS; // Revised by rcnjko, 2005.01.06. - - // cPrivacy - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER ){ - myCap |= cPrivacy; - } - - // cShortPreamble, 2005.01.06, by rcnjko. - if( (pMgntInfo->mCap & cShortPreamble) ) - { // AP supports short and long preamble mode. - myCap |= cShortPreamble; - } - - // cQoS - if (pMgntInfo->pStaQos->CurrentQosMode) - { - myCap |= cQos; - } - - // cShortSlotTime - if(pMgntInfo->dot11CurrentWirelessMode != WIRELESS_MODE_B) - { - myCap |= cShortSlotTime; - } - - if( pMgntInfo->RoamingState == ROAMINGSTATE_AUTHENTICATION && - !Adapter->bInHctTest) // not to send reassociation if this is the association after wake up since we have sent disassociation to the AP before sleep , by haich. - { - pMgntInfo->RoamingState = ROAMINGSTATE_REASSOCIATION; - bReassociation = TRUE; - } - else - { - bReassociation = FALSE; - } - - // - // cDelayedBA & cImmediateBA - // This part shall be add later. - // - - //For 11h,Spectrum Management. - if( (pMgntInfo->mCap & cSpectrumMgnt) ) - { // AP supports short and long preamble mode. - myCap |= cSpectrumMgnt; - } - - MlmeAssociateRequest( Adapter, asocStaAddr, ASSOC_REQ_TIMEOUT, myCap, asListenInterval, bReassociation); - } - else{ - RT_TRACE(COMP_MLME, DBG_WARNING,("MlmeAuthenticateRequest_Confirm(): ERROR!!\n")); - } - - pMgntInfo->AuthStatus = AUTH_STATUS_SUCCESSFUL; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MlmeAuthenticateRequest_Confirm(): return TRUE. <====\n")); - return TRUE; -} - - - - - - - - - - - - - -//(1)Adhoc mode: Start an Ibss -//(2)Infrastructure mode: change pMgntInfo->state_Synchronization_Sta = STATE_no_BSS; - -VOID -JoinTimeout( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_TRACE(COMP_MLME, DBG_LOUD,("====> JoinTimeout(): Join timeout!\n")); - - // Synchronize the timer status, 2006.11.14, by shien chang. - pTimer->Status = RT_TIMER_STATUS_INITIALIZED; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - //pMgntInfo->bJoinInProgress = FALSE; - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - - RT_TRACE(COMP_MLME, DBG_TRACE, ("JoinTimeout(): bJoinInProgress = %d\n", pMgntInfo->bJoinInProgress)); - - PlatformCancelTimer(Adapter, &pMgntInfo->JoinProbeReqTimer ); - - // Remember the rejected AP, if another AP in the same ESS is better, - // pick the better one in further connection. 2006.11.21, by shien chang. - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - - if(MgntLinkRetry(Adapter, FALSE)) - { - RT_TRACE(COMP_MLME, DBG_LOUD,("JoinTimeout(): try to link again\n")); - return; - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD,("JoinTimeout(): can't perform link retry any more => reset roaming and Synchronization_Sta_State!\n")); - - if(MgntRoamingInProgress(pMgntInfo)) - { - // Roaming retry - if(MgntRoamRetry(Adapter, FALSE)) // Raom again. - return; - else // Roam failed. - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return; - } - - MgntRoamComplete(Adapter, MlmeStatus_timeout); - } - } - else - { - // Remember the rejected AP, if another AP in the same ESS is better, - // pick the better one in further connection. 2006.11.21, by shien chang. - MgntAddRejectedAsocAP(Adapter, pMgntInfo->Bssid); - - if(!MgntConnectOtherBss(Adapter) && - pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_INFRA) - { // Connect the Other BSS failed. - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - return; - } - - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - - if(MgntRoamingInProgress(pMgntInfo)) // Roaming. - MgntRoamComplete(Adapter, MlmeStatus_timeout); - else // First connection. - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - - pMgntInfo->bJoinInProgress = FALSE; - } - } - -// pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - - // Disable current QoS and HT setting since Join BSS process is failed. - pMgntInfo->pStaQos->CurrentQosMode = QOS_DISABLE; - pMgntInfo->pHTInfo->bCurrentHTSupport = FALSE; - pMgntInfo->pVHTInfo->bCurrentVHTSupport = FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return; - } - - if( pMgntInfo->Regdot11networktype != RT_JOIN_NETWORKTYPE_INFRA) - { - if(GetIbssbJoinOnly(Adapter)) - { - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - return; - } - else - { - // Proting by tynli from 92E svn revision 7396. 2010.09.07. - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_SUCCESS); - } - - // Check the IBSS starting channel is valid. - if(!CHNL_IsLegalChannel(Adapter, pMgntInfo->Regdot11ChannelNumber)) - return; - - // Start an IBSS network if Join infra or adhoc network fails! - RT_TRACE(COMP_MLME, DBG_LOUD,("JoinTimeout(): Start an IBSS\n")); - - pMgntInfo->OpMode = RT_OP_MODE_IBSS; - - if (pMgntInfo->JoinAction == RT_JOIN_IBSS) - { - pMgntInfo->JoinAction = RT_START_IBSS; - } - - pMgntInfo->bIbssStarter = TRUE; - - SetupStartIBSSInfo( Adapter ); - - IbssStartRequest( Adapter ); - pMgntInfo->state_Synchronization_Sta = STATE_Ibss_Active; - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD,("JoinTimeout(): indicate disconnect\n")); - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_NO_LINK); - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - } - - RT_TRACE(COMP_MLME, DBG_LOUD,("JoinTimeout(): Join timeout! <====\n")); -} - - - - - - - - - - - -/* - * JoinRequestReschedule: - * Check wheter reschedule of JoinRequest is required if RF is in OFF state - * Check whether reschedule is required - * If reschedule is required, Turn on RF, Save required parameter and - * reschedule for JoinRequest - * 2008/01/03 Emily - */ -VOID -JoinRequestReschedule( - PADAPTER Adapter, - RT_JOIN_ACTION JoinAction, - RT_WLAN_BSS *bssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PMGNT_INFO pDefaultMgntInfo = &GetDefaultAdapter(Adapter)->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pDefaultMgntInfo); - RT_RF_POWER_STATE rtState; - - //2//<1> Check whether reschedule is required - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - if (rtState == eRfOff) - { - // - // Check if in inactive power save mode. If yes, we should turn on rf and continue scan. - // 2007.07.16, by shien chang. - // - if (pMgntInfo->RfOffReason > RF_CHANGE_BY_IPS) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RescheduleJoinRequest(): RF is OFF. Reject JoinRequest\n")); - return; - - } - else if (!pMgntInfo->bSetPnpPwrInProgress) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("RescheduleJoinRequest(): Under inactive ps mode, turn on RF and continue.\n")); - - pPSC->tmpJoinAction = JoinAction; - if (bssDesc == NULL) - { - pPSC->bTmpBssDesc = FALSE; - } - else - { - pPSC->bTmpBssDesc = TRUE; - PlatformMoveMemory(&pPSC->tmpBssDesc, bssDesc, sizeof(RT_WLAN_BSS)); - } - - pPSC->ReturnPoint = IPS_CALLBACK_JOIN_REQUEST; - pPSC->ptmpAdapter = Adapter; - IPSLeave(Adapter,FALSE); - PlatformSetTimer(Adapter, &pPSC->InactivePsTimer, SWRF_TIMEOUT); - - return; - } - - } -} - - -VOID -JoinRequest( - PADAPTER Adapter, - RT_JOIN_ACTION JoinAction, - RT_WLAN_BSS *bssDesc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_RF_POWER_STATE rtState; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> JoinRequest()\n")); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - // Scan is currently performed, and mark bScanOnly to be FASLE to start join after scanning. - if(pMgntInfo->bScanInProgress && JoinAction != RT_NO_ACTION) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest Scan in progress! set bScanOnly to FALSE\n")); - pMgntInfo->bScanOnly = FALSE; - return; - } - - // - // When RF is off, we should not accept join request. - // 2007.02.07, by Roger. - // - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - if (rtState == eRfOff) - { - JoinRequestReschedule(Adapter, JoinAction, bssDesc); - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest() <====\n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - //sherry added for adhoc connection - //2010.02.03 - WAPI_SecFuncHandler(WAPI_RETURNALLSTAINFO,Adapter, WAPI_END); - - if(IS_DUAL_BAND_SUPPORT(Adapter) && (IsExtAPModeExist(Adapter))) - { - if((GET_HAL_DATA(Adapter)->CurrentBandType == BAND_ON_2_4G) && (bssDesc->ChannelNumber>14)) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("JoinRequest: avoid CCK Hang \n")); - pMgntInfo->bDisableCCKForDualBand = TRUE; - - { - PADAPTER pApAdapter = GetFirstAPAdapter(Adapter) ? GetFirstAPAdapter(Adapter) : GetDefaultAdapter(Adapter); - pApAdapter->MgntInfo.bDisableCCKRateForVWIFIChangeChannel = TRUE; - } - } - } - - - // - // After discussion with CCW, we should remove all TS here to avoid incorrect TS maintenance from - // any roaming process or re-connection process after resuming from system hibernation or sleep, media status changed - // or AP re-connection. Re-correction would reset all TS in AP site but we do NOT reset them identically. - // - // 2012.08.13. - // - if(JoinAction != RT_NO_ACTION) - { - RemoveAllTS(Adapter); - pMgntInfo->last_auth_seq = 0xffff; - pMgntInfo->last_asoc_req_seq = 0xffff; - pMgntInfo->last_asoc_rsp_seq = 0xffff; - pMgntInfo->last_Disassoc_seq = 0xffff; - pMgntInfo->last_Deauth_seq = 0xffff; - } - - switch(JoinAction) - { - case RT_JOIN_INFRA: - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest(): RT_JOIN_INFRA.......\n")); - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_START_TO_LINK); - pMgntInfo->OpMode = RT_OP_MODE_INFRASTRUCTURE; - - if((GET_POWER_SAVE_CONTROL(pMgntInfo)->bLeisurePs) && - (GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS)) - { - LeisurePSLeave(Adapter, LPS_DISABLE_JOIN_REQ); - } - - // Setup infrastructure variables - SetupJoinInfraInfo( Adapter, bssDesc ); - - // Start a join timer - PlatformSetTimer( Adapter, &pMgntInfo->JoinTimer, JOIN_TIMEOUT ); - - PlatformSetTimer(Adapter,&pMgntInfo->JoinProbeReqTimer, 200); - - // State: Wait beacon - pMgntInfo->state_Synchronization_Sta = STATE_Join_Wait_Beacon; - - break; - - case RT_JOIN_IBSS: - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest(): RT_JOIN_IBSS.......\n")); - - - pMgntInfo->OpMode = RT_OP_MODE_IBSS; - - GET_HAL_DATA(Adapter)->bNeedIQK = TRUE; - GET_HAL_DATA(Adapter)->DM_OutSrc.RFCalibrateInfo.bNeedIQK = TRUE; - - // Setup IBSS variables - SetupJoinIBSSInfo( Adapter, bssDesc ); - - // Start a join timer - PlatformSetTimer( Adapter, &pMgntInfo->JoinTimer, JOIN_TIMEOUT ); - - // State: Wait beacon - pMgntInfo->state_Synchronization_Sta = STATE_Join_Wait_Beacon; - - break; - - case RT_START_IBSS: - { - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - u1Byte Channel = pMgntInfo->Regdot11ChannelNumber; - BOOLEAN bStart = FALSE; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest(): RT_START_IBSS.......\n")); - - do - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - HalChangeWirelessMode(Adapter, Channel); - - // - // Get channel info. - // - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_CHANNEL, &Channel, &pChnlListEntry); - - if(!pChnlListEntry) // This channel is invlid. - break; - - if(pChnlListEntry->ExInfo & CHANNEL_EXINFO_NO_IBSS_START) // Do not start IBSS at this channel. - { - // - //When in NDISTest, SUT may start IBSS with channel 1. So we need should not break there. - //By Maddest 05132009. - // - if(!Adapter->bInHctTest) - break; - } - - pMgntInfo->OpMode = RT_OP_MODE_IBSS; - GET_HAL_DATA(Adapter)->bNeedIQK = TRUE; - GET_HAL_DATA(Adapter)->DM_OutSrc.RFCalibrateInfo.bNeedIQK = TRUE; - - // - //In some situation, we will send beacon in the wrong channel, such as send beacon on channel 10, - //but the beacon IE channel is 1. So that no one can connect to it. By Maddest 05132009 - // - - { - if(Channel != pMgntInfo->dot11CurrentChannelNumber) - Mgnt_SwChnl( Adapter, Channel, 1); - } - // - //Porting from 8xb to avoid IBSS can not relink after s3/s4 on Vista, by Maddest - // - if(pMgntInfo->bInToSleep) - pMgntInfo->bIbssStarter = TRUE; - - // Setup IBSS variables - SetupStartIBSSInfo( Adapter ); - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, ("JoinRequest(): RT_START_IBSS \n"), pMgntInfo->Bssid ); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress RT_START_IBSS\n")); - return; - } - - // - //Porting from 8xb to avoid IBSS can not relink after s3/s4 on Vista, by Maddest - // - // Preprocessing for starting a connection. 2006.10.17, by shien chang. - if((!pMgntInfo->bInToSleep || ACTING_AS_AP(Adapter)) && - !MgntRoamingInProgress(pMgntInfo) && pMgntInfo->RequestFromUplayer) - DrvIFIndicateConnectionStart(Adapter); - else if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingStart( Adapter); - - IbssStartRequest( Adapter ); - RT_TRACE(COMP_MLME, DBG_TRACE,("JoinRequest(): \n")); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 4\n")); - return; - } - // - //Porting from 8xb to avoid IBSS can not relink after s3/s4 on Vista, by Maddest - // - // Postprocessing for starting a connection, 2006.10.27, by shien chang. - if((!pMgntInfo->bInToSleep || ACTING_AS_AP(Adapter)) && - !MgntRoamingInProgress(pMgntInfo) && pMgntInfo->RequestFromUplayer) - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_SUCCESS); - else if (MgntRoamingInProgress(pMgntInfo)) - { - MgntRoamComplete(Adapter, MlmeStatus_success); - } - - // Sync from 91su branch, 2009.04.27. - pMgntInfo->bInToSleep = FALSE; - // State: Active Ibss - pMgntInfo->state_Synchronization_Sta = STATE_Ibss_Active; - - bStart = TRUE; - - }while(FALSE); - - if(!bStart) - { - pMgntInfo->JoinAction = RT_NO_ACTION; - RT_TRACE(COMP_SCAN, DBG_TRACE, ("JoinRequest():RT_START_IBSS - Do not start IBSS at channel(%d).\n", Channel)); - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - } - } - break; - - case RT_NO_ACTION: - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest(): RT_NO_ACTION !!!!!!!!!!!!\n")); - break; - - default: - RT_TRACE(COMP_MLME, DBG_WARNING, ("JoinRequest(): unknown JoinAction (%d)!!!\n", JoinAction)); - break; - } - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinRequest() <====\n")); -} - - - -VOID -JoinProbeReq( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - - u2Byte nDataRate = (IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter)&& !pMgntInfo->pHTInfo->bCurSuppCCK)) ? MGN_6M: MGN_1M; - - if(RT_DRIVER_STOP(Adapter)||Adapter->bDriverIsGoingToPnpSetPowerSleep) - return; - - if(!pMgntInfo->bJoinInProgress) - return; - - while(pHalData->SwChnlInProgress||pMgntInfo->pChannelInfo->bSwBwInProgress ) - { - PlatformSetTimer(Adapter,&pMgntInfo->JoinProbeReqTimer,50); - return; - } - - SendProbeReq(Adapter, FALSE, nDataRate, FALSE); - SendProbeReqEx(Adapter, nDataRate, FALSE); - - PlatformSetTimer(Adapter,&pMgntInfo->JoinProbeReqTimer,200); - -} - - - - -//(1)Adhoc mode: Send auth to Ibss -//(2)Infrastructure mode: Send auth to AP -VOID -JoinConfirm( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - RT_OP_MODE OpMode = pMgntInfo->OpMode; - u1Byte needauthreq = 0; - u1Byte auStaAddr[6]; - u1Byte auAlg = OPEN_SYSTEM; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("====> JoinConfirm()\n")); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - pMgntInfo->mDisable = FALSE; - - while(pHalData->SwChnlInProgress||pMgntInfo->pChannelInfo->bSwBwInProgress) - { - PlatformSetTimer(Adapter,&pMgntInfo->JoinConfirmTimer,50); - return; - } - - if( OpMode == RT_OP_MODE_INFRASTRUCTURE ){ - //(1)Infrastructure mode: Send auth to AP - //Send authentication request if received beacon during join period - needauthreq = 1; - } - else if( OpMode == RT_OP_MODE_IBSS ){ - //(2)Adhoc mode: Send auth to Ibss, or Start an IBSS - if(pMgntInfo->bIbssNeedAuth){ - needauthreq = 1; - } - else{ - IbssStartRequest( Adapter ); - } - } - else{ - RT_TRACE(COMP_INIT, DBG_TRACE,("JoinConfirm(): Unknown OP mode\n")); - } - - if( needauthreq ){ - CopyMem( auStaAddr, pMgntInfo->Bssid, 6 ); - - // If we are in auto switch mode, start with shared key authentication first. 2005.03.08, by rcnjko. - if(pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeAutoSwitch) - { - pMgntInfo->AuthReq_auAlg = SHARED_KEY; - } - - if(FtIsFtAuthReady(Adapter, pMgntInfo->Bssid)) - { - RT_PRINT_ADDR(COMP_SEC, DBG_LOUD, "Change auth alg to FT for BSSID = ", pMgntInfo->Bssid); - pMgntInfo->AuthReq_auAlg = AUTH_ALG_FT; - } - - auAlg = pMgntInfo->AuthReq_auAlg; - - if( pMgntInfo->RoamingState == ROAMINGSTATE_SCANNING){ - pMgntInfo->RoamingState = ROAMINGSTATE_AUTHENTICATION; - } - PlatformCancelTimer(Adapter, &pMgntInfo->AuthTimer); - pMgntInfo->AuthRetryCount = 0; - - MlmeAuthenticateRequest( Adapter, auStaAddr, auAlg, AUTH_REQ_TIMEOUT ); - } - - if(pHalData->bAutoAMPDUBurstMode) - { - // For Early mode timeout interrupt. - HAL_HW_TIMER_TYPE TimerType = HAL_TIMER_EARLYMODE; - u4Byte val = TimerType<<16; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_INIT, (pu1Byte)(&val)); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_RESTART, (pu1Byte)(&TimerType)); - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("JoinConfirm() <====\n")); -} - -// -// Description: -// Handle the actions (ex. event indications) after roaming is complete. -// Arguments: -// pAdapter - -// NIC Adapter context pointer. -// Result - -// The input roaming status indicating that roaming is success or fail. -// Note: -// We use "MlmeStatus" to indicate the roaming status for input, because the -// status is now enough and satisfied for the current roaming procedure. -// By Bruce, 2008-05-16. -// -VOID -MgntRoamComplete( - IN PADAPTER pAdapter, - IN u2Byte Result - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - - FunctionIn(COMP_MLME); - - if( (Result != MlmeStatus_success) ) - { // Roaming Failed. - if(!OS_SUPPORT_WDI(pAdapter)) - { - DrvIFIndicateAssociationStart(pAdapter); - DrvIFIndicateAssociationComplete(pAdapter, RT_STATUS_FAILURE); - DrvIFIndicateRoamingComplete(pAdapter, RT_STATUS_FAILURE); - } - - CCX_OnRoamFailed(pAdapter); - - if(pMgntInfo->bMediaConnect) - DrvIFIndicateDisassociation(pAdapter, dest_unreachable, pMgntInfo->Bssid);//unspec_reason); // for win8 dtm - - MgntIndicateMediaStatus(pAdapter, RT_MEDIA_DISCONNECT, FORCE_INDICATE); - - if(OS_SUPPORT_WDI(pAdapter)) - { - //20150415 Sinda - //We should invoke roaming complete if WDI had sent ROAM task. - if( pMgntInfo->bRoamRequest == TRUE ) - { - DrvIFIndicateConnectionComplete(pAdapter, RT_STATUS_FAILURE); - pMgntInfo->bRoamRequest = FALSE; - } - else - DrvIFIndicateRoamingComplete(pAdapter, RT_STATUS_FAILURE); - } - - // Reset all mgnt variables. - ResetMgntVariables(pAdapter); - } - else - { - if(OS_SUPPORT_WDI(pAdapter)) - { - //20141027 Sinda - //We should not indicate WDI_INDICATION_ASSOCIATION_RESULT and WDI_INDICATION_LINK_STATE_CHANGE - //Because they had indicated when association complete on roaming flow. - if( pMgntInfo->bRoamRequest == TRUE ) - { - DrvIFIndicateConnectionComplete(pAdapter, RT_STATUS_SUCCESS); - pMgntInfo->bRoamRequest = FALSE; - } - else - DrvIFIndicateRoamingComplete(pAdapter, RT_STATUS_SUCCESS); - } - else - DrvIFIndicateRoamingComplete(pAdapter, RT_STATUS_SUCCESS); - // Reset all variables about roaming. - MgntResetRoamingState(pMgntInfo); - MgntResetJoinCounter(pMgntInfo); - - //to avoid no linkquality indication - pAdapter->RxStats.LastLinkQuality = 0xFF; - } - - pMgntInfo->RegFakeRoamSignal[0] = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntRoamComplete(): Roaming is %s!!!\n", - (Result == MlmeStatus_success) ? "successful" : "failed")); - -} - - - -VOID -MgntSetScanTimer( - IN PADAPTER Adapter, - IN u4Byte TimerIntv) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, TimerIntv);// For WinXP, Vista, etc. -} - - -BOOLEAN -ScanSendProbeReq( - PADAPTER Adapter, - u1Byte Idx, - PRT_CHNL_LIST_ENTRY pChnlListEntry - ) -{ - BOOLEAN bAnySsid; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u2Byte nDataRate = IS_WIRELESS_MODE_5G(Adapter) ? MGN_6M: MGN_1M; - - if(!CustomScan_SendProbeCb(GET_CUSTOM_SCAN_INFO(Adapter), pChnlListEntry)) - return TRUE; - - // Send out 2 probe request for each channel - // 0. Dedicate probe (Low rate) - // 1. Any probe (Low rate) - - if( (IsSSIDAny( pMgntInfo->Ssid )) || - (IsSSIDDummy( pMgntInfo->Ssid )) || // This SSID is not regular. By Bruce, 2008-12-30. - (Idx%2!=0)) // Asked by owen, 2005.03.24. - { - //3 Any probe - if(!MgntRoamingInProgress(pMgntInfo)) - bAnySsid=TRUE; - else - return FALSE; - } - else - { //3 Dedicate probe - bAnySsid=FALSE; - } - - //20061212 david, in order to solve packet filter bug - if(pMgntInfo->bHiddenSSIDEnable == FALSE) - bAnySsid = TRUE; - - // TODO: Send Probe request use different data rate - // We should send ProbeReq in basic rate, o.w. pure-A or pure-G BSS - // won't respond to us. 2004.12.06, by rcnjko. - // We set PwrMgt bit of ProbeReq of original channel in prevent of ping packet loss. 2004.12.10, by rcnjko. - // - // We cannot send ProbeReq with PwrMgt bit, o.w. some hidden AP, e.g. WGR615v, will not - // response our ProbeRsp. 2005.03.23, by rcnjko. - // - if( pMgntInfo->mAssoc && - pChnlListEntry->ChannelNum == pMgntInfo->SettingBeforeScan.ChannelNumber&& - bAnySsid == TRUE && - pMgntInfo->RoamingType != RT_ROAMING_NORMAL && pMgntInfo->bMediaConnect) - { - if(!pMgntInfo->bScanWithMagicPacket) - { - SendProbeReq(Adapter, bAnySsid, nDataRate, TRUE); - - if(!pMgntInfo->bHiddenSSIDEnable) - SendProbeReqEx(Adapter, nDataRate, TRUE); - - if(Adapter->bInHctTest || CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter))) - { - SendProbeReq(Adapter, bAnySsid, nDataRate, TRUE); - SendProbeReq(Adapter, bAnySsid, nDataRate, TRUE); - } - } - else - { // 2005.06.27, by rcnjko. - SendMagicPacket(Adapter, pMgntInfo->MagicPacketDstAddr); - } - } - else - { - if(!pMgntInfo->bScanWithMagicPacket) - { - if(!pMgntInfo->bScanOnly && !Adapter->bInHctTest) - bAnySsid = FALSE; - - SendProbeReq(Adapter, bAnySsid, nDataRate, FALSE); - SendProbeReqEx(Adapter, nDataRate, FALSE); - if(Adapter->bInHctTest || CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter))) - { - SendProbeReq(Adapter, bAnySsid, nDataRate, FALSE); - SendProbeReq(Adapter, bAnySsid, nDataRate, FALSE); - } - } - else - { // 2005.06.27, by rcnjko. - SendMagicPacket(Adapter, pMgntInfo->MagicPacketDstAddr); - } - } - - return TRUE; -} - -VOID -ScanSwitchChannel( - PADAPTER Adapter, - PMGNT_INFO pMgntInfo, - PRT_CHNL_LIST_ENTRY pChnlListEntry -) -{ - WIRELESS_MODE WirelessModeInScan = pMgntInfo->SettingBeforeScan.WirelessMode; - - if(pMgntInfo->bResetInProgress) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("pMgntInfo->bResetInProgress\n")); - return; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanSwitchChannel():Switch to channel(%d) period (%d)\n", pChnlListEntry->ChannelNum, pChnlListEntry->ScanPeriod)); - - if(IS_DUAL_BAND_SUPPORT(Adapter)) - WirelessModeInScan = pMgntInfo->SettingBeforeScan.WirelessModeScanInProgress; - - if(WirelessModeInScan != pMgntInfo->dot11CurrentWirelessMode) - { - RT_TRACE(COMP_SCAN, DBG_WARNING, ("ScanSwitchChannel():Befor scan wirelessmode(%d) dot11wirelessmode (%d)\n", - WirelessModeInScan, pMgntInfo->dot11CurrentWirelessMode)); - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)(WirelessModeInScan)); - } - - Mgnt_SwChnl(Adapter, pChnlListEntry->ChannelNum, 1); - - // Go to next step. - pMgntInfo->ScanStep++; - - //Sinda 20150915, we use workitem to switch channel and os execute workitem after 15 ms. - //So we should set timer with 15 ms to avoid timer break off workitem. - MgntSetScanTimer(Adapter, 15); -} - -VOID -ScanSwitchComplete( - PADAPTER Adapter, - PMGNT_INFO pMgntInfo -) -{ - BOOLEAN bDoWMMFix; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===> ScanSwitchComplete(),scan complete restore.\n")); - - if(IS_DUAL_BAND_SUPPORT(Adapter)) - { - if(pMgntInfo->bDualModeScanStep == 1 && !pMgntInfo->bCompleteScan) - goto GOTO_NEXT_BAND_SCAN; - - if(pMgntInfo->bCompleteScan) - { - pMgntInfo->bDualModeScanStep = 2; - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> ScanSwitchComplete(),skip scan.\n")); - } - } - - CustomScan_PreScanCompleteCb(GET_CUSTOM_SCAN_INFO(Adapter)); - - // Scan completed. Restore original setting. - if( pMgntInfo->SettingBeforeScan.WirelessMode != pMgntInfo->dot11CurrentWirelessMode) - { - bDoWMMFix = FALSE; - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_WMM_NEED_FIX_PARAM, (pu1Byte)(&bDoWMMFix)); - if(bDoWMMFix) - { - if(PlatformCompareMemory(Adapter->MgntInfo.pStaQos->WMMParamEle, pMgntInfo->SettingBeforeScan.WMMParamEle,WMM_PARAM_ELEMENT_SIZE)) - { - PlatformMoveMemory(Adapter->MgntInfo.pStaQos->WMMParamEle, pMgntInfo->SettingBeforeScan.WMMParamEle,WMM_PARAM_ELEMENT_SIZE); - } - } - - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)(pMgntInfo->SettingBeforeScan.WirelessMode)); - } - - HAL_ChannelAndBandWidthRecoveryAfterScan(Adapter); - - GOTO_NEXT_BAND_SCAN: - // Wait for original status - pMgntInfo->ScanStep = 2; -// PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 1); - ScanComplete(Adapter); - FunctionOut(COMP_SCAN); - -} - - -VOID -ScanMergeResult( - PADAPTER Adapter, - PMGNT_INFO pMgntInfo - ) -{ - u2Byte CountBss,CountQueryBss, CountToMoveToBack, StartToMoveBackAddr; - u2Byte NumBssDesc4Query = pMgntInfo->NumBssDesc4Query; - u8Byte DiffTime=0, CurrentTime = PlatformGetCurrentTime(); - u8Byte DiffTimeThreshold = 0; - BOOLEAN bFoundBss[MAX_BSS_DESC] = {0}; - BOOLEAN bMoveToBack, bNeedToMove; - - //Fix Adhoc UI Issue for 8812AU, Merge from branch1022 - if(pMgntInfo->bCompleteScan && !pMgntInfo->bScanTimeExceed && !pMgntInfo->bNeedSkipScan) - return; - - if(pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20 && Adapter->bInHctTest) - { - DiffTimeThreshold = 10; - } - else - { - DiffTimeThreshold = 120; - } - - // Check all Desc4Query is in bssDesc - for(CountQueryBss = 0; CountQueryBss < NumBssDesc4Query; CountQueryBss++) - { - if(BssDescDupByDesc( Adapter, &pMgntInfo->bssDesc4Query[CountQueryBss])) - { - bFoundBss[CountQueryBss] = TRUE; - } - } - - - if(pMgntInfo->NumBssDesc4Query > pMgntInfo->NumBssDesc) - { - bNeedToMove = TRUE; - StartToMoveBackAddr = CountToMoveToBack = pMgntInfo->NumBssDesc4Query; - } - else - { - bNeedToMove = FALSE; - StartToMoveBackAddr = CountToMoveToBack = pMgntInfo->NumBssDesc; - } - - // If the bss is not in the lastest scan list, then decrease its history count, check its live time. - // Remove the bss, if history count is reach to zero. - // Remove the bss, if its live time out of 2 seconds. - for(CountQueryBss=0; CountQueryBss < NumBssDesc4Query && CountToMoveToBack < MAX_BSS_DESC; CountQueryBss++) - { - if(bFoundBss[CountQueryBss] == FALSE) - { - // If scan is reset because of reset, don't decrease the count otherwise the folowing - // SelectNetworkBySSID of connect request would return no action and force an - // unnecessary scan. - if(pMgntInfo->bssDesc4Query[CountQueryBss].HistoryCount > 0 - && !pMgntInfo->bResetInProgress - ) - pMgntInfo->bssDesc4Query[CountQueryBss].HistoryCount --; - - if( (pMgntInfo->bssDesc4Query[CountQueryBss].HistoryCount != 0) ) - { - if(CurrentTime > pMgntInfo->bssDesc4Query[CountQueryBss].HistoryTime) - DiffTime = PlatformDivision64(CurrentTime - pMgntInfo->bssDesc4Query[CountQueryBss].HistoryTime, 1000000); - else - DiffTime = PlatformDivision64(pMgntInfo->bssDesc4Query[CountQueryBss].HistoryTime - CurrentTime, 1000000); - - if(DiffTime < DiffTimeThreshold) - bMoveToBack = TRUE; // Keep it if keepalive - else - bMoveToBack = FALSE; // Remove it when timeout - } - else - bMoveToBack = FALSE; // Remove it when count zero - } - else - bMoveToBack = FALSE; //Keep it - - if(bMoveToBack) - { - CopyWlanBss(pMgntInfo->bssDesc4Query+CountToMoveToBack, pMgntInfo->bssDesc4Query+CountQueryBss); - CountToMoveToBack++; - } - if(bFoundBss[CountQueryBss] == FALSE) - { - //RT_TRACE(COMP_SCAN, DBG_TRACE, ("History %d DiffTime %"i64fmt"d channel %d\n",pMgntInfo->bssDesc4Query[CountQueryBss].HistoryCount, DiffTime, pMgntInfo->bssDesc4Query[CountQueryBss].ChannelNumber)); - RT_PRINT_STR(COMP_SCAN, DBG_TRACE,"Ssid", pMgntInfo->bssDesc4Query[CountQueryBss].bdSsIdBuf, pMgntInfo->bssDesc4Query[CountQueryBss].bdSsIdLen); - RT_PRINT_STR(COMP_SCAN, DBG_TRACE,"Bssid", pMgntInfo->bssDesc4Query[CountQueryBss].bdBssIdBuf, 6); - } - } - - pMgntInfo->NumBssDesc4Query = pMgntInfo->NumBssDesc; - // Move the lost Bss to the tail of Bss List - for( CountBss = pMgntInfo->NumBssDesc, CountQueryBss = StartToMoveBackAddr; - CountQueryBss < CountToMoveToBack; CountQueryBss++, CountBss++) - { - if(bNeedToMove) - CopyWlanBss(pMgntInfo->bssDesc4Query+CountBss, pMgntInfo->bssDesc4Query+CountQueryBss); - - pMgntInfo->NumBssDesc4Query++; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: ScanMergeResult(), NumBssDesc4Query=%d\n", pMgntInfo->NumBssDesc4Query)); - for(CountBss = 0; CountBss < pMgntInfo->NumBssDesc; CountBss++) - { - CopyWlanBss(pMgntInfo->bssDesc4Query+CountBss, pMgntInfo->bssDesc+CountBss); - pMgntInfo->bssDesc4Query[CountBss].HistoryCount = History_Count_Limit; - pMgntInfo->bssDesc4Query[CountBss].HistoryTime = CurrentTime; - } - - for(CountQueryBss = 0;CountQueryBss < pMgntInfo->NumBssDesc4Query;CountQueryBss++) - { - //RT_TRACE(COMP_SCAN, DBG_TRACE, ("# %d HistoryCount %d HistoryTime %"i64fmt"d\n",CountQueryBss, pMgntInfo->bssDesc4Query[CountQueryBss].HistoryCount, pMgntInfo->bssDesc4Query[CountQueryBss].HistoryTime)); - RT_PRINT_STR(COMP_SCAN, DBG_TRACE,"Ssid", pMgntInfo->bssDesc4Query[CountQueryBss].bdSsIdBuf, pMgntInfo->bssDesc4Query[CountQueryBss].bdSsIdLen); - } - - RxDesc_BackupScanList(Adapter); -} - - - -VOID -ScanByTimer( - PADAPTER Adapter, - BOOLEAN bActiveScan, - BOOLEAN bScanOnly - ) -{ - BOOLEAN bFilterOutNonAssociatedBSSID; - PADAPTER pDfAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDfMgntInfo = &pDfAdapter->MgntInfo; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - u2Byte scanTimer = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MAC %d: ===> ScanByTimer() port number %d CustomizedScanRequest %d ScanOnly %d\n",Adapter->interfaceIndex, Adapter->pNdis62Common->PortNumber, CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter)), bScanOnly)); - - if(RT_DRIVER_STOP(pDfAdapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== ScanByTimer(): bDriverStopped.\n")); - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - return; - } - - if(MgntScanInProgress(pMgntInfo) || (pMgntInfo->bDualModeScanStep==2) ) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== ScanByTimer(): scan in progress. MgntScanInProgress(pMgntInfo) %d bDualModeScanStep %d\n", MgntScanInProgress(pMgntInfo), pMgntInfo->bDualModeScanStep)); - - // An dirty workaround for scan process. If the scan is in progress, and it is called - // before connect. Then we set the scan flag again to let the last scan complete event - // be indicated. 2007.01.04, by shien chang. - if (pMgntInfo->bIndicateConnectEvent) - { - DrvIFIndicateScanStart(Adapter); - } - return; - } - else if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress\n")); - return; - } - - // For 40Mhz mode - pMgntInfo->bScan_20MHz = FALSE; - - // Save parameters --------------------------------------------- - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = TRUE; - if(pLoopAdapter->MgntInfo.Scancount==0xFF) - pLoopAdapter->MgntInfo.Scancount = 0; - else - pLoopAdapter->MgntInfo.Scancount++; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - // ----------------------------------------------------------- - - CustomScan_ScanByTimerCb(GET_CUSTOM_SCAN_INFO(Adapter)); - - //Sherry Sync with 92C_92D 20110701. To Avoid CCK Hang with 2.4G Send Beacon on CCK Rate - pDfMgntInfo->bDisableCCKForDualBand = TRUE; - - pMgntInfo->bActiveScan=bActiveScan; - pMgntInfo->bScanOnly=bScanOnly; - - pDfMgntInfo->bLoadIMRandIQKSettingFor2G = FALSE; - - // Reset scan state - pMgntInfo->ScanStep=0; - pMgntInfo->bResetScan = FALSE; - - // Save state_Synchronization_Sta parameters -------------------------------------------------------------------------- - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - RT_TRACE(COMP_SCAN, DBG_LOUD,("Set All Port's pMgntInfo->state_Synchronization_Sta = STATE_Act_Listen\n")); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.state_Synchronization_Sta_BeforeScan = pLoopAdapter->MgntInfo.state_Synchronization_Sta; - - pLoopAdapter->MgntInfo.state_Synchronization_Sta = STATE_Act_Listen; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - // ---------------------------------------------------------------------------------------------------------------- - - - //3 Construct channel list - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, NULL, NULL); - - DFS_StaUpdateRadarChnlScanType(Adapter); - - // Keep log for DOT11D verification. - if(IS_DOT11D_ENABLE(pMgntInfo) ) - { - if(bActiveScan) - { - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - - AddDrvLog(Adapter, LID_DOT11D_ACTIVE_SCAN_CHNL, pDot11dInfo->ChnlList, pDot11dInfo->ChnlListLen); - AddDrvLog(Adapter, LID_DOT11D_ACTIVE_SCAN_TXPWR, (UCHAR *)pDot11dInfo->MaxTxPwrDbmList, pDot11dInfo->ChnlListLen); - } - else - { - AddDrvLog(Adapter, LID_DOT11D_PASSIVE_SCAN_CHNL, (pu1Byte)GET_RT_CHANNEL_LIST(pMgntInfo), sizeof(RT_CHANNEL_LIST)); - } - } - - - //cosa masked 03302009 for lenovo. - // Because of the following ASPM flow, the HW_VAR_CHECK_BSSID will be at the wrong - // state when disconnet, so now we masked here and make sure the check bssid state - // will be set ok when scan. (even disconnect) - // 1. Enable ASPM - // 2. Disassociate - // 3. Scan - // 4. Disable ASPM - // Note: The io between 1. and 4. will be ignored. - //if(pMgntInfo->mIbss || pMgntInfo->mAssoc) - { - //xiong:for 8192 usb, need do this? consider it later - // Clear RCR_CBSSID to receive the frames from other BSSID. - // This is needed for IBSS mode or it cannot scan other BSS. - bFilterOutNonAssociatedBSSID = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - - Adapter->HalFunc.ScanOperationBackupHandler(Adapter, SCAN_OPT_BACKUP_BAND0); - - MultiChannelScanHandler(Adapter, TRUE, FALSE); - - // Joseph 20090703: Prepare to sniff the packets in the channel. This can be used to determine - // whether traffic is busy or not. - Adapter->RxStats.CurRxSniffMediaPktCnt = 0; - - // Tell AP we are in Power-Save mode. - Hal_PauseTx(Adapter, HW_DISABLE_TX_DATA); - - // In prevent of lossing ping packet during scanning. 2004.12.06, by rcnjko. - scanTimer = scanGetScanTimer(Adapter); - - PlatformSetTimer(Adapter, &Adapter->MgntInfo.ScanTimer, scanTimer); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MAC %d timer = %d ms <=== ScanByTimer()\n",Adapter->interfaceIndex, scanTimer)); -} - - -VOID -MgntConstructAnotherBandScanList( - IN PADAPTER Adapter -) -{ - WIRELESS_MODE wirelessmode; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(IS_WIRELESS_MODE_5G(Adapter)) - wirelessmode = WIRELESS_MODE_G; - else - wirelessmode = WIRELESS_MODE_A; - - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)(wirelessmode)); - pMgntInfo->SettingBeforeScan.WirelessModeScanInProgress = wirelessmode; - RT_TRACE(COMP_SCAN,DBG_LOUD,("Reconstruct scan list wireless mode 0x%x \n", wirelessmode)); - - // Reset scan state - pMgntInfo->ScanStep=0; - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_LIST, NULL, NULL); - - Adapter->HalFunc.ScanOperationBackupHandler(Adapter, SCAN_OPT_BACKUP_BAND1); -} - - -BOOLEAN -ScanSelectAntenna( - PADAPTER Adapter -) -{ - BOOLEAN ret = FALSE; - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(Adapter); - - // Note for CustomizedScanRequest - // If the scaning process is initiated by the CustomizedScanRequest, simply do the scan - // specified in the CustomizedScanRequest context. - - // The following codes conduct the normal scanning process again due to the antenna diversity. - - // 20100514 Joseph: Interrupt scan operation here. - // For SW antenna diversity before link, it needs to switch to another antenna and scan again. - // It compares the scan result and select beter one to do connection. - - if(CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter))) - ret = FALSE; - else if ((&pHalData->DM_OutSrc)->Adapter != NULL) - { - if(Adapter->HalFunc.SwAntDivCheckBeforeLinkHandler(&pHalData->DM_OutSrc)) - ret = TRUE; - else if(Adapter->HalFunc.PathDivCheckBeforeLinkHandler(&pHalData->DM_OutSrc)) - ret = TRUE; - } - return ret; -} - -VOID -ScanComplete( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - u2Byte i; - u4Byte OrgBssMunber = 0; - BOOLEAN bStopScan = FALSE; - - PLATFORM_WRITE_EVENT_LOG(Adapter, RT_SCAN_COMPLETE, 0); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MAC %d ===> ScanComplete() port number %d CustomizedScanRequest.bEnabled %d bCompleteScan %d bScanOnly %d\n",Adapter->interfaceIndex, Adapter->pNdis62Common->PortNumber, CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter)), pMgntInfo->bCompleteScan, pMgntInfo->bScanOnly)); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return; - } - - PlatformAcquireSpinLock(Adapter, RT_SCAN_SPINLOCK); - - bStopScan = pMgntInfo->bCompleteScan; - - //David 2006.05.16, switch band if we need to scan another band - // TODO: need to consider N only situation if we have n only in the future. - if(pMgntInfo->bDualModeScanStep == 1 && !pMgntInfo->bCompleteScan) - { - pMgntInfo->bDualModeScanStep++; - - MgntConstructAnotherBandScanList(Adapter); - - if(!CustomScan_DualBandScanCb(GET_CUSTOM_SCAN_INFO(Adapter))) - { - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 0); - /* 2007/05/04 MH Release spin lock. */ - PlatformReleaseSpinLock(Adapter, RT_SCAN_SPINLOCK); - return; - } - } - - if( pMgntInfo->bCheckScanTime == TRUE ) - pMgntInfo->bCheckScanTime = FALSE; - - // Clear the CustomizedScanRequest - // Prefast warning C6011: Dereferencing NULL pointer '((Adapter))->pPortCommonInfo->pDefaultAdapter'. - if(GetDefaultMgntInfo(Adapter) != NULL && - CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter))) - { -#if (P2P_SUPPORT==1) - // Clean the Stop Sending Probe Response Flag --------------------------------------------- - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - if(P2P_ENABLED(pP2PInfo)) - { - pP2PInfo->TimeStartToStopSendingProbeResponse = 0; - } - } - // ----------------------------------------------------------------------------------- - - // Start P2P Mgnt Timer ----------------------------------------------------------------- - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - if(P2P_ENABLED(pP2PInfo)) - { - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - } - // ----------------------------------------------------------------------------------- - - - // Restart P2PWaitForWpsReadyTimer For Connecting to GO ----------------------------------------------------- - // moved to p2pWaitForWpsReady_CustomScanCb - // ----------------------------------------------------------------------------------------------------- -#endif - } - - CustomScan_ScanCompleteCb(GET_CUSTOM_SCAN_INFO(Adapter)); - - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter->MgntInfo.bDualModeScanStep = 0; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - - //sherry added for wlk1.6 VWifiInfraSoftAP_ext - //20110927 - if(!Adapter->bInHctTest) - pMgntInfo->bLoadIMRandIQKSettingFor2G = FALSE; - //Restore previous corresponging DM settings. - Adapter->HalFunc.ScanOperationBackupHandler(Adapter, SCAN_OPT_RESTORE); - - // In order to prevent to call MgntLinkRetry immediately. Annie, 2005-04-25. - // Do not change these counters if we are in romaing state. 2005.05.27, by rcnjko. - if(!MgntRoamingInProgress(pMgntInfo) && - (pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod==0 || pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod==0 ) ) - { - pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod = 1; - pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod= 1; - } - - if(!MgntRoamingInProgress(pMgntInfo)) - { - if((pMgntInfo->mIbss && pMgntInfo->bMediaConnect) || pMgntInfo->mAssoc) - { - //xiong:for 8192 usb, need do this? consider it later - // Set RCR_CBSSID for connected IBSS. - if(!IsAPModeExist(Adapter)) - { - { - bFilterOutNonAssociatedBSSID = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - } - } - } - } - - // Joseph 20090703: Finish sniffing the packets in the channel. - if(Adapter->RxStats.CurRxSniffMediaPktCnt != 0) - Adapter->RxStats.LastRxSniffMediaPktCnt = Adapter->RxStats.CurRxSniffMediaPktCnt; - - // In prevent of lossing ping packet during scanning. - // 2004.12.06, by rcnjko. - // - { - PADAPTER ptmpAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO ptmpMgntInfo = NULL; - while(ptmpAdapter != NULL) - { - ptmpMgntInfo = &ptmpAdapter->MgntInfo; - if( ptmpMgntInfo->mAssoc && - !MgntRoamingInProgress(ptmpMgntInfo) && ptmpMgntInfo->bMediaConnect && - !ACTING_AS_AP(ptmpAdapter)) - { - SendNullFunctionData(ptmpAdapter, ptmpMgntInfo->Bssid, IS_WIFI_POWER_SAVE(ptmpMgntInfo) ? TRUE : FALSE); // 1st - } - ptmpAdapter = GetNextExtAdapter(ptmpAdapter); - } - } - - Hal_PauseTx(Adapter, HW_ENABLE_TX_ALL); - - // - // CCX SSIDL to construct NEW BssDesc - // - OrgBssMunber = pMgntInfo->NumBssDesc; - - if(!Adapter->bInHctTest) - { - ScanMergeResult(Adapter, pMgntInfo); - //3 Construct Scan Period - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_CONSTRUCT_SCAN_PERIOD, NULL, NULL); - } - else - { - // Update Bssid list for query - pMgntInfo->NumBssDesc4Query = pMgntInfo->NumBssDesc; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[REDX]: ScanComplete(), NumBssDesc4Query=%d\n", pMgntInfo->NumBssDesc4Query)); - for(i = 0; i < pMgntInfo->NumBssDesc4Query; i++) - { - CopyWlanBss(pMgntInfo->bssDesc4Query+i, pMgntInfo->bssDesc+i); - } - } - - // Restore state_Synchronization_Sta parameters -------------------------------------------------------------------------- - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - RT_TRACE(COMP_SCAN, DBG_LOUD,("Restore All Port's pMgntInfo->state_Synchronization_Sta\n")); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.state_Synchronization_Sta = pLoopAdapter->MgntInfo.state_Synchronization_Sta_BeforeScan; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("Restore Port (%d) pMgntInfo->state_Synchronization_Sta = %d\n", GET_PORT_NUMBER(pLoopAdapter), pLoopAdapter->MgntInfo.state_Synchronization_Sta)); - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - // ---------------------------------------------------------------------------------------------------------------- - - pMgntInfo->bScanWithMagicPacket = FALSE; // 2005.06.27, by rcnjko. - - - if(IS_DOT11D_ENABLE(pMgntInfo) ) - DOT11D_ScanComplete(Adapter); - - // Save the current time as the last scan complete time. - MultiportRecordLastScanTime(Adapter); - - //restore for hidden AP scan with 92d dual band. -// if(pMgntInfo->bCompleteScan && IS_DUAL_BAND_SUPPORT(Adapter)) - { - pMgntInfo->bNeedSkipScan = FALSE; - pMgntInfo->bCompleteScan = FALSE; - pMgntInfo->bScanTimeExceed = FALSE; - } - - // Handle the packet queued during scanning. -#if (MULTICHANNEL_SUPPORT == 1) -//multichannel mechnism sending packets after scan -//by sherry 20130117 - - // Prefast warning C6011 : Dereferencing NULL pointer '((Adapter))->pPortCommonInfo->pDefaultAdapter' - if(GetDefaultAdapter(Adapter) != NULL && GetDefaultAdapter(Adapter)->bInHctTest) - MultichannelHandlePacketDuringScan(Adapter,FALSE); - else - SendDataFrameQueued(Adapter); -#else - SendDataFrameQueued(Adapter); -#endif - - MultiChannelScanHandler(Adapter, FALSE, TRUE); - - PlatformReleaseSpinLock(Adapter, RT_SCAN_SPINLOCK); - - { - // Post process for scan operation. 2006.10.16, by shien chang. - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - } - - if(pMgntInfo->bScanOnly == FALSE && bStopScan == FALSE) - { - // - // Select a BSS to join or start if required. - // - RT_JOIN_ACTION join_action = RT_NO_ACTION; - PRT_WLAN_BSS pRtBss; - BOOLEAN bRoaming = (pMgntInfo->RoamingType == RT_ROAMING_NORMAL) ? TRUE : FALSE; - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress bScanOnly FALSE\n")); - return; - } - - PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)); - if(pRtBss != NULL) - { - join_action = SelectNetworkBySSID( Adapter, &pMgntInfo->Ssid, bRoaming, pRtBss); - RT_TRACE(COMP_MLME, DBG_LOUD, ("ScanComplete(): join_action(%d) bIbssStarter(%d)\n", join_action, pMgntInfo->bIbssStarter)); - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("RoamgingType %d, and JoinAction %d\n", pMgntInfo->RoamingType, join_action)); - // By Bruce, 2008-06-02. - if (MgntRoamingInProgress(pMgntInfo) && join_action == RT_NO_ACTION) - { - // Roaming retry - if(!MgntRoamRetry(Adapter, FALSE)) // Raom again. - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - if(pRtBss != NULL) - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - return ; - } - MgntRoamComplete(Adapter, MlmeStatus_timeout); // Roam failed. - } - } - else if(join_action == RT_NO_ACTION) - { - if(!MgntLinkRetry(Adapter, FALSE)) - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 3\n")); - if(pRtBss != NULL) - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - return ; - } - - // - // Indicate connection complete event if the first connection. - // - if(MgntRoamingInProgress(pMgntInfo)) - { - // Roam failed. - MgntRoamComplete(Adapter, MlmeStatus_timeout); - } - else if(pMgntInfo->bIndicateConnectEvent) - { - RT_OP_MODE rtOpMode = pMgntInfo->OpMode; - pMgntInfo->OpMode = RT_OP_MODE_INFRASTRUCTURE; - DrvIFIndicateConnectionStart(Adapter); - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - pMgntInfo->OpMode = rtOpMode; - pMgntInfo->bIndicateConnectEvent = FALSE; - } - else - { - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - } - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_NO_LINK); - } - } - else if( !pMgntInfo->bIbssStarter ) - { - pMgntInfo->JoinAction = join_action; - // pMgntInfo->RequestFromUplayer = FALSE; - JoinRequest(Adapter, join_action, pRtBss); - } - if(pRtBss != NULL) - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - } - else - { // scan only. - { - CCX_OnScanComplete(Adapter); - - BSS_OnScanComplete(Adapter); - - // Check PreAuth state - if( pMgntInfo->bMediaConnect && Adapter->bInHctTest ) //(!SecIsTxKeyInstalled( Adapter, pMgntInfo->Bssid )) - { - PlatformRequestPreAuthentication(Adapter , PRE_AUTH_INDICATION_REASON_ASSOCIATION); - } - - // For Auto Select Channel, 2005.12.27, by rcnjko. - if(ACTING_AS_AP(Adapter) && pMgntInfo->bAutoSelChnl) - { - pMgntInfo->Regdot11ChannelNumber = AutoSelectChannel(Adapter, pMgntInfo->bssDesc, pMgntInfo->NumBssDesc); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanComplete(): AutoSelectChnl: %d\n", pMgntInfo->Regdot11ChannelNumber)); - AP_Reset(Adapter); - } - - } - } - - CHNL_ReleaseOpLock(Adapter); - - PlatformHandleNLOnScanComplete(Adapter); - - // Prefast warning C6011: Dereferencing NULL pointer '((Adapter))->pPortCommonInfo->pDefaultAdapter'. - if(GetDefaultMgntInfo(Adapter) != NULL) - CustomScan_ScanCompleteReturnCb(GET_CUSTOM_SCAN_INFO(Adapter)); - - PLATFORM_WRITE_EVENT_LOG(Adapter, RT_SCAN_NUM, (ULONG)pMgntInfo->NumBssDesc4Query); - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("ScanComplete() <==== currentwireless mode 0x%x \n", pMgntInfo->dot11CurrentWirelessMode)); -} - - -VOID -ScanCallback( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter, pFirstDevicePort = NULL; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PADAPTER pDefAdapter = GetDefaultAdapter(Adapter); - PRT_CHNL_LIST_ENTRY pChnlListEntry; - u8Byte now_time; - u4Byte deltatime; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("==========> scancallback portnumber %d pMgntInfo->ScanStep %d \n", Adapter->pNdis62Common->PortNumber, pMgntInfo->ScanStep)); - - // Stop if driver is stopped - if(RT_DRIVER_STOP(pDefAdapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanCallback: bDriverStopped return \n")); - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - return; - } - else if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("reset in progress\n")); - return; - } - else if(pMgntInfo->bResetScan) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("bResetScan\n")); - pMgntInfo->bResetScan = FALSE; - return; - } - -#if(AUTO_CHNL_SEL_NHM == 1) - if(IS_AUTO_CHNL_SUPPORT(Adapter)){ - PlatformAcquireSpinLock(Adapter, RT_ACS_SPINLOCK); - if(IS_AUTO_CHNL_IN_PROGRESS(Adapter)) - { - PlatformReleaseSpinLock(Adapter, RT_ACS_SPINLOCK); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[ACS] ScanCallback: AutoChnlSelCalInProgress...return and wait for a while\n")); - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 2); - return; - } - else{ - PlatformReleaseSpinLock(Adapter, RT_ACS_SPINLOCK); - } - } -#endif - - if(MultiChannel_IsFCSInProgress(Adapter)) - { - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("FW is switching channel, waiting for FCS stop!\n")); - MultiChannelScanHandler(Adapter, TRUE, FALSE); - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5); - return; - } - - if( pMgntInfo->bCheckScanTime == TRUE && Adapter->bScanTimeCheck) { - RT_TRACE(COMP_SCAN, DBG_TRACE, ("ScanCallback: bCheckScanTime is TRUE\n")); - if( pMgntInfo->bScanOnly == TRUE ) - { - now_time = PlatformGetCurrentTime(); - deltatime = (ULONG)( (now_time - pMgntInfo->ScanOnlyStartTime) / 1000 ); // mini-second - - RT_TRACE(COMP_SCAN, DBG_TRACE, ("ScanCallback: bScanOnly is TRUE %d \n", deltatime)); - if( deltatime >= 2800 ) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanCallback: scan time is over 2800 mini-seconds and indicate scan complete to avoid scan time is too long\n")); - - pMgntInfo->bCompleteScan = TRUE; - pMgntInfo->bScanTimeExceed = TRUE; - ScanComplete(Adapter); - - // Scan completed. Restore original setting. - if( pMgntInfo->SettingBeforeScan.WirelessMode != pMgntInfo->dot11CurrentWirelessMode){ - Adapter->HalFunc.SetWirelessModeHandler(Adapter, (u1Byte)(pMgntInfo->SettingBeforeScan.WirelessMode)); - } - - HAL_ChannelAndBandWidthRecoveryAfterScan(Adapter); - - return; - } - } - } - - // Set this to make sure that scan process and bandwidth switching would not run at the same time. - if(pMgntInfo->pChannelInfo->ChnlOp != CHNLOP_SCAN) - { - if(!CHNL_AcquireOpLock(Adapter, CHNLOP_SCAN)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanCallback: CHNLOP_SCAN acquire fail \n")); - - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 1); - return; - } - } - - // Wait for previous channel switching complete before starting scan. - if(RT_IsSwChnlAndBwInProgress(Adapter) || CHNL_SwChnlAndSetBwInProgress(Adapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanCallback():Wait for previous channel switching\n")); - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 1); - return; - } - - // Make sure that bandwidth is switching to 20MHz mode - if(pMgntInfo->bScan_20MHz == FALSE) - { - if(HAL_SwitchTo20MHzBeforeScan(Adapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("ScanCallback: HAL_SwitchTo20MHzBeforeScan \n")); - - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 1); - return; - } - } - - switch(pMgntInfo->ScanStep) - { - case 0: - // 2012.11.15 Lansin Need consider more. - // 1. Shall Send null data after send data to AP - // 2. Shall not send null data on other channel. -#if (MULTICHANNEL_SUPPORT ==1 && P2P_SUPPORT == 1) - // Disable Tx Data --------------------------------------------------------------------- - if(Adapter->bInHctTest == TRUE ) - { - PADAPTER pClientPort = GetFirstClientPort(Adapter); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - //multichannel disable BE Queue and VI Queue by sherry 20130117 - MultichannelHandlePacketDuringScan(Adapter,TRUE); - } - // ---------------------------------------------------------------------------------- -#endif - { - BOOLEAN bComplete = !RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL, NULL, &pChnlListEntry); - - if(bComplete) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("channel list empty!! \n")); - if(ScanSelectAntenna(Adapter)) - return; - } - - if(IS_DUAL_BAND_SUPPORT(Adapter)) - bComplete |= (pMgntInfo->bCompleteScan || Adapter->bDriverIsGoingToUnload || Adapter->bSurpriseRemoved); - - if(bComplete) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("bCompleteScan %d bDriverIsGoingToUnload %d bSurpriseRemoved %d\n", pMgntInfo->bCompleteScan, Adapter->bDriverIsGoingToUnload, Adapter->bSurpriseRemoved)); - ScanSwitchComplete(Adapter, pMgntInfo); // Scan completed. - } - else // Switch channel. - { - u2Byte extendedDwellTime = 0; - - if(0 != (extendedDwellTime = CustomScan_PreSwChnlCb(GET_CUSTOM_SCAN_INFO(Adapter), pChnlListEntry))) - { - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, extendedDwellTime); - return; - } - -#if(AUTO_CHNL_SEL_NHM == 1) - if(IS_AUTO_CHNL_SUPPORT(Adapter)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[ACS] ScanCallback(): (1) RT_GetChannelNumber(%d), AUTO_CHNL_STATE(%d)\n", RT_GetChannelNumber(pDefAdapter),GET_AUTO_CHNL_STATE(Adapter))); - - PlatformAcquireSpinLock(Adapter, RT_ACS_SPINLOCK); - if((MgntLinkStatusQuery(pDefAdapter) == RT_MEDIA_DISCONNECT) && - P2PIsSocialChannel(RT_GetChannelNumber(pDefAdapter)) && - (GET_AUTO_CHNL_STATE(pDefAdapter) == ACS_BEFORE_NHM)) - { - PlatformReleaseSpinLock(Adapter, RT_ACS_SPINLOCK); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[ACS] ScanCallback(): (2) RT_GetChannelNumber(%d)\n", RT_GetChannelNumber(pDefAdapter))); - if( PlatformScheduleWorkItem( &(pMgntInfo->AutoChnlSel.AutoChnlSelWorkitem))) - { - SET_AUTO_CHNL_PROGRESS(Adapter, TRUE); - SET_AUTO_CHNL_STATE(Adapter, ACS_IN_NHM);// ACS is Calculating now by NHM measurement - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("[ACS] ScanCallback: Defer for NHM measurement in another WI Callback...\n")); - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, 5); - return; - } - } - else{ - PlatformReleaseSpinLock(Adapter, RT_ACS_SPINLOCK); - } - } -#endif - ScanSwitchChannel(Adapter, pMgntInfo, pChnlListEntry); - } - } - break; - - case 1: - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_POP_SCAN_CHANNEL, NULL, &pChnlListEntry); - - if(!pChnlListEntry) - { // Scan completed. - ScanComplete(Adapter); - return; - } - - // Add 30 ms for Stopping Sending Probe Response ----------------------------------------------------------------------------------- - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Cusstomized scan enabled: %d\n", CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter)))); - - pFirstDevicePort = GetFirstDevicePort(Adapter); - if(CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter)) && (NULL != pFirstDevicePort)) - { - PRT_CHNL_LIST_ENTRY pNextChnlListEntry = NULL; -#if P2P_SUPPORT == 1 - PP2P_INFO pDevicePortP2PInfo = GET_P2P_INFO(pFirstDevicePort); -#endif - - RtActChannelList(Adapter, RT_CHNL_LIST_ACTION_GET_SCAN_CHANNEL, NULL, &pNextChnlListEntry); - - //RT_TRACE(COMP_P2P, DBG_LOUD, ("pNextChnlListEntry: %d\n", pNextChnlListEntry)); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pChnlListEntry->ChannelNum: %d\n", pChnlListEntry->ChannelNum)); - - if(pNextChnlListEntry) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("pNextChnlListEntry->ChannelNum: %d\n", pNextChnlListEntry->ChannelNum)); - } - -#if P2P_SUPPORT == 1 - if(pNextChnlListEntry == NULL || pChnlListEntry->ChannelNum != pNextChnlListEntry->ChannelNum) - pDevicePortP2PInfo->TimeStartToStopSendingProbeResponse = PlatformGetCurrentTime() + pChnlListEntry->ScanPeriod * 1000 - P2P_RESERVED_TIME_FOR_ACTION_FRAME_MS * 1000; - else - pDevicePortP2PInfo->TimeStartToStopSendingProbeResponse = 0; - - //RT_TRACE(COMP_SCAN, DBG_LOUD, ("pDevicePortP2PInfo->TimeStartToStopSendingProbeResponse: %lld\n", pDevicePortP2PInfo->TimeStartToStopSendingProbeResponse)); -#endif - } - // ------------------------------------------------------------------------------------------------------------------------------------------------------------ - - CustomScan_OnChnlCb(GET_CUSTOM_SCAN_INFO(Adapter), pChnlListEntry); - - // Send probe request if active scan is used. - if((pMgntInfo->bActiveScan) && bActiveScan(pMgntInfo, pChnlListEntry)) - { - u1Byte i; - - for(i = 0; i < 2; i++) - { - if(ScanSendProbeReq(Adapter, i, pChnlListEntry) == FALSE) - break; - if (P2P_ScanCallback(Adapter) == FALSE) - break; - } - } - - // In prevent of lossing ping packet during scanning. - // Since we've send notification to AP, it is not necessary to - // switch back to original channel. 2004.12.06, by rcnjko. - pMgntInfo->ScanStep = 0; - //--------------------------------------------------------------------------- - - { -#if( MULTICHANNEL_SUPPORT ==1 && P2P_SUPPORT == 1) //add by ylb 201201029 ,WIN8 WHCK WFD Invitaion After Before Test: DUT will connect to AP after WFD connected, it will Send Disassotiate to SUT, SUT will roaming and do scan, but it still connect to AP, that scan process result in Packet loss or long Lantency between SUT and AP, So we send Packet in each scan step - if(Adapter->bInHctTest == TRUE ) - { - // Send packet when switch to connected chanel - //by sherry 20130117 - if(pChnlListEntry->ExInfo & CHANNEL_EXINFO_CONNECTED_CHANNEL) - MultichannelHandlePacketDuringScan(Adapter,FALSE); - // ------------------------------------------------------------------------------------------------------------------- - } -#endif - -#if(AUTO_CHNL_SEL_NHM == 1) - if(IS_AUTO_CHNL_SUPPORT(Adapter)) - { - SET_AUTO_CHNL_SCAN_PERIOD(Adapter, pChnlListEntry->ScanPeriod); - - RT_TRACE(COMP_SCAN, DBG_WARNING, ("[ACS] ScanCallback(): Current channel(%d) ScanPeriod(%d)!!!\n", - pChnlListEntry->ChannelNum, Adapter->MgntInfo.AutoChnlSel.AutoChnlSelPeriod)); - } -#endif - - if(CustomScan_PreSetDwellTimerCb(GET_CUSTOM_SCAN_INFO(Adapter), pChnlListEntry)) - { - PlatformSetTimer(Adapter, &pMgntInfo->ScanTimer, pChnlListEntry->ScanPeriod); - } - } - break; - - case 2: - ScanComplete(Adapter); - break; - - default: - RT_TRACE(COMP_SCAN, DBG_WARNING, ("ScanCallback(): Unexpected ScanStep(%d)!!!\n", pMgntInfo->ScanStep)); - break; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=========== scancallback portnumber %d\n", Adapter->pNdis62Common->PortNumber)); -} - - -// -// Description: -// Send out data frames queued. -// 2006.04.28, by rcnjko. -// -VOID -SendDataFrameQueued( - PADAPTER Adapter - ) -{ - u1Byte QueueID; - s1Byte Counter = 14; - RT_STATUS rtStatus; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) - { - if(QueueID == BEACON_QUEUE) - continue; - - while( !RTIsListEmpty(Get_WAIT_QUEUE(Adapter,QueueID)) && (Counter-- >0)) - { - PRT_TCB pTcb; - - pTcb=(PRT_TCB)RTRemoveHeadListWithCnt(Get_WAIT_QUEUE(Adapter,QueueID),GET_WAIT_QUEUE_CNT(Adapter,QueueID)); - - rtStatus = TransmitTCB(Adapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - { - RTInsertHeadListWithCnt(Get_WAIT_QUEUE(Adapter,QueueID), &pTcb->List,GET_WAIT_QUEUE_CNT(Adapter,QueueID)); - break; - } - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - -VOID -MgntResetScanProcess( - PADAPTER pAdapter -) -{ - PADAPTER Adapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - CHANNEL_WIDTH bw; - EXTCHNL_OFFSET extchnl20MHz,extchnl40MHz; - u1Byte centerfrequencyindex1; - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - PRT_CHANNEL_INFO pChnlInfo; - BOOLEAN bAdapterIsNull = FALSE; - - if(pAdapter->pNdis62Common) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntResetScanProcess(): padapter port number %d \n", pAdapter->pNdis62Common->PortNumber)); - } - -#if (MULTICHANNEL_SUPPORT == 1) - MultiChannelUpdateSettingBeforeScanOnResetRequest(pAdapter); - - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.ChannelNumber: %d\n", pMgntInfo->SettingBeforeScan.ChannelNumber)); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.ChannelBandwidth: %d\n", pMgntInfo->SettingBeforeScan.ChannelBandwidth)); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz: %d\n", pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz)); -#else - if(MgntLinkStatusQuery(Adapter) == RT_MEDIA_CONNECT) - { - bw = RT_GetBandWidth(Adapter); - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_BW40MHZ_EXTCHNL, (pu1Byte)(&extchnl20MHz)); - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_BW80MHZ_EXTCHNL, (pu1Byte)(&extchnl40MHz)); - centerfrequencyindex1 = RT_GetCenter_Frequency_Index1(Adapter); - - pMgntInfo->SettingBeforeScan.ChannelNumber = pMgntInfo->dot11CurrentChannelNumber; - pMgntInfo->SettingBeforeScan.ChannelBandwidth = bw; - pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz = extchnl20MHz; - pMgntInfo->SettingBeforeScan.Ext40MHzChnlOffsetOf80MHz = extchnl40MHz; - pMgntInfo->SettingBeforeScan.CenterFrequencyIndex1 = CHNL_GetCenterFrequency(pMgntInfo->SettingBeforeScan.ChannelNumber, bw, extchnl20MHz); - } -#endif - - if( pMgntInfo->bCheckScanTime == TRUE ) - pMgntInfo->bCheckScanTime = FALSE; - - if(!pMgntInfo->bScanInProgress && pMgntInfo->bDualModeScanStep ==0) - { - if( (IsAPModeExist(Adapter) == FALSE) && - (MgntLinkStatusQuery(Adapter) == RT_MEDIA_CONNECT || MgntLinkStatusQuery(GetFirstClientPort(pAdapter)) == RT_MEDIA_CONNECT) ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - - HalChangeWirelessMode(Adapter, pMgntInfo->SettingBeforeScan.ChannelNumber); - - MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - Adapter, - pMgntInfo->SettingBeforeScan.ChannelNumber, - pMgntInfo->SettingBeforeScan.ChannelBandwidth, - pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz, - pMgntInfo->SettingBeforeScan.Ext40MHzChnlOffsetOf80MHz, - 0 - ); - } - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - } - else - { - Adapter->HalFunc.CancelAllTimerHandler(Adapter); - RT_ResetSwChnlProgress(Adapter); - - if(!Adapter->bInHctTest) - pMgntInfo->bLoadIMRandIQKSettingFor2G = FALSE; - - while(pLoopAdapter) - { - pMgntInfo = &pLoopAdapter->MgntInfo; - pChnlInfo = pMgntInfo->pChannelInfo; - if(pChnlInfo->ChnlOp == CHNLOP_SCAN) - break; - else - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - - if(pLoopAdapter == NULL || ((pLoopAdapter == Adapter) && (pLoopAdapter->MgntInfo.pChannelInfo->ChnlOp == CHNLOP_NONE))) - { - // RT_ASSERT(FALSE, ("pLoopAdapter is NULL\n")); - bAdapterIsNull = TRUE; - pLoopAdapter = Adapter; - pMgntInfo = &pLoopAdapter->MgntInfo; - } - - { - if(!bAdapterIsNull) - { - if(pLoopAdapter->pNdis62Common) - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntResetScanProcess reset scan process port number %d!!!\n", pLoopAdapter->pNdis62Common->PortNumber)); - - pLoopAdapter->HalFunc.ScanOperationBackupHandler(pLoopAdapter, SCAN_OPT_RESTORE); - if(!PlatformCancelTimer(pLoopAdapter, &(pMgntInfo->ScanTimer))) - { - pLoopAdapter->MgntInfo.bResetScan = TRUE; - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntResetScanProcess cancel scantimer FAIL!!!\n")); - } - else - { - pLoopAdapter->MgntInfo.bResetScan = FALSE; - } - - PlatformHandleNLOnScanCancel(pLoopAdapter); - Hal_PauseTx(pLoopAdapter, HW_ENABLE_TX_ALL); - CHNL_ReleaseOpLock(pLoopAdapter); - } - - // - // Update latest BSS list for query immediately if scan process is broken by OID_DOT11_RESET_REQUEST. - // The reason why we need to do this is because WLAN AutoCfg would try to prepare connection request after radio status - // was changed from off to on. At the same time, OID_DOT11_RESET_REQUEST would be scheduled to break this scan process. - // 2014.03.06. - // - if(!Adapter->bInHctTest) - ScanMergeResult(Adapter, pMgntInfo);// ScanComplete shall be called in this function instead, so fix me!! - - // - // We should indicate failure status for current scan requirement when driver is going to suspend, - // otherwise wireless icon will be red X in resumption flow. - // 2013.12.26. - // - if(pMgntInfo->bDriverIsGoingToSleep) - DrvIFIndicateScanComplete(pLoopAdapter, RT_STATUS_FAILURE); - else - DrvIFIndicateScanComplete(pLoopAdapter, RT_STATUS_SUCCESS); - - - { // Reset ScanProcess -------------------------------------------------- - pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.state_Synchronization_Sta = pLoopAdapter->MgntInfo.state_Synchronization_Sta_BeforeScan; - - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter->MgntInfo.ScanStep = 0; -// pLoopAdapter->MgntInfo.RequestFromUplayer = FALSE; - pLoopAdapter->MgntInfo.bDualModeScanStep = 0; - pLoopAdapter->MgntInfo.bScanOnly = TRUE; - //pLoopAdapter->MgntInfo.bCompleteScan = TRUE; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } // ----------------------------------------------------------------- - } - } - - CustomScan_ScanResetCb(GET_CUSTOM_SCAN_INFO(pAdapter)); - - FunctionOut(COMP_SCAN); - -} - - -VOID -MgntResetLinkProcess( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte i; - - FunctionIn(COMP_MLME); - - MgntCancelAllTimer( Adapter ); - - pMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - pMgntInfo->AuthStatus = AUTH_STATUS_IDLE; - pMgntInfo->mDisable = TRUE; - pMgntInfo->mAssoc = FALSE; - pMgntInfo->mIbss = FALSE; - pMgntInfo->bMlmeStartReqRsn = MLMESTARTREQ_NONE; - pMgntInfo->bJoinInProgress = FALSE; - pMgntInfo->bScanOnly = TRUE; -// MgntResetRoamingState(pMgntInfo); - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - MgntResetJoinCounter(pMgntInfo); - - MgntLinkStatusResetRxBeacon(Adapter); - - for( i=0; iLinkDetectInfo.RxBcnNum[i] = 0; - } - - // Half the time required to determine if we are disconneted. 2005.03.10, by rcnjko. - //Adapter->MgntInfo.LinkDetectInfo.SlotNum = 5; - pMgntInfo->LinkDetectInfo.SlotNum = 2; - - pMgntInfo->LinkDetectInfo.SlotIndex = 0; - - FunctionOut(COMP_MLME); -} - -VOID -MgntResetJoinProcess( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - FunctionIn(COMP_MLME); - - if (pMgntInfo->state_Synchronization_Sta == STATE_Join_Wait_Beacon) - { - PlatformCancelTimer(Adapter, &pMgntInfo->JoinTimer); - PlatformCancelTimer(Adapter, &pMgntInfo->JoinConfirmTimer ); - PlatformCancelTimer(Adapter, &pMgntInfo->JoinProbeReqTimer ); - pMgntInfo->state_Synchronization_Sta = STATE_No_Bss; - pMgntInfo->JoinRetryCount = 0; - } - - if (pMgntInfo->State_AuthReqService != STATE_Auth_Req_Idle) - { - PlatformCancelTimer( Adapter, &pMgntInfo->AuthTimer ); - pMgntInfo->State_AuthReqService = STATE_Auth_Req_Idle; - pMgntInfo->AuthRetryCount = 0; - } - if (pMgntInfo->State_AsocService != STATE_Asoc_Idle) - { - PlatformCancelTimer( Adapter, &pMgntInfo->AsocTimer ); - pMgntInfo->State_AsocService = STATE_Asoc_Idle; - pMgntInfo->AsocRetryCount = 0; - } - - FunctionOut(COMP_MLME); -} - -BOOLEAN -MgntLinkRetry( - PADAPTER Adapter, - BOOLEAN bForceRetry - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - PADAPTER pDevicePort = NULL; - PP2P_INFO pP2PInfo = NULL; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(pMgntInfo->bSetPnpPwrInProgress) - return FALSE; - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - -#if P2P_SUPPORT == 1 - // Only scan in the idle device port ---------------------------- - pDevicePort = GetFirstDevicePort(Adapter); - - if(pDevicePort != NULL) - { - pP2PInfo = GET_P2P_INFO(pDevicePort); - - if((pP2PInfo->State != P2P_STATE_INITIALIZED) || pP2PInfo->bDeviceDiscoveryInProgress) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: NDIS_STATUS_DOT11_MEDIA_IN_USE\n", __FUNCTION__)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: pP2PInfo->State: %d bDeviceDiscoveryInProgress %d\n", __FUNCTION__, pP2PInfo->State, pP2PInfo->bDeviceDiscoveryInProgress)); - return FALSE; - } - } -#endif - -#if(MULTICHANNEL_SUPPORT ==1) - if(DefAdapter->MgntInfo.RegMultiChannelFcsMode == 0) - { - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - - { - PP2P_INFO pP2PInfoTmp = (PP2P_INFO)pMgntInfo->pP2PInfo; - if(pP2PInfoTmp->Role == P2P_CLIENT &&MgntLinkStatusQuery(DefAdapter) == RT_MEDIA_CONNECT ) - MultiChannelHandleChannelSwitchToCurrentPort(DefAdapter, Adapter); - } - } - else - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("Stop FW switch channel, temporary do nothing!\n")); -#endif - // - // If the media is disconnected, and the OS set the dummy (non-sense SSID), then the OS jsut wants - // the driver to be disconnected. When we have been disconnected, do not retry so that we can save - // scan operations. By Bruce, 2008-12-30. - // - if(IsSSIDDummy(pMgntInfo->Ssid)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkRetry(): Dummy SSID! Not to retry!\n") ); - return FALSE; - } - - if( bForceRetry || - ((pMgntInfo->Regdot11networktype != RT_JOIN_NETWORKTYPE_ADHOC||Adapter->bInHctTest) - && pMgntInfo->JoinRetryCount < MAX_JOIN_RETRY_COUNT && - !MgntIsTimeOutForIndication(pMgntInfo)) - ) - { - if(bForceRetry) - pMgntInfo->JoinRetryCount=MAX_JOIN_RETRY_COUNT; - else - pMgntInfo->JoinRetryCount++; - - if(pMgntInfo->RequestFromUplayer) - { -// pMgntInfo->RequestFromUplayer = FALSE; - if(!Adapter->bInHctTest) - pMgntInfo->JoinRetryCount=MAX_JOIN_RETRY_COUNT; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkRetry NEW!!(): bForceRetry(%d) RequestFromUplayer (%d) JoinRetryCount(%d)\n", bForceRetry, pMgntInfo->RequestFromUplayer, pMgntInfo->JoinRetryCount)); - - if (!MgntScanInProgress(pMgntInfo) && - !((pMgntInfo->bScanInProgress && !pMgntInfo->bScanOnly) || \ - (pMgntInfo->JoinTimer.Status&RT_TIMER_STATUS_SET) || \ - (pMgntInfo->JoinConfirmTimer.Status&RT_TIMER_STATUS_SET) || \ - (pMgntInfo->AuthTimer.Status&RT_TIMER_STATUS_SET) || \ - (pMgntInfo->AsocTimer.Status&RT_TIMER_STATUS_SET))) - { - MgntLinkRequest( - Adapter, - FALSE, //bScanOnly - TRUE, //bActiveScan, - pMgntInfo->bHiddenSSIDEnable, //TRUE, //FilterHiddenAP - FALSE, // Update parameters - NULL, //ssid2scan - 0, //NetworkType, - 0, //ChannelNumber, - 0, //BcnPeriod, - 0, //DtimPeriod, - 0, //mCap, - NULL, //SuppRateSet, - NULL //yIbpm, - ); - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkRetry(): scan is in progress.\n")); - pMgntInfo->bScanOnly = FALSE; - } - - - return TRUE; - } - - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkRetry(): return FALSE for JoinRetryCount(%d) >= MAX_JOIN_RETRY_COUNT(%d)\n", pMgntInfo->JoinRetryCount, MAX_JOIN_RETRY_COUNT)); - - return FALSE; -} - -// -// Description: -// Retry to roam to the other AP. Or it may roam back to the original associated AP. -// Arguments: -// Adapter - -// NIC adapter context pointer. -// bForceRetry - -// Be forced to roam no matter the roaming fail count. -// Retrun Value: -// TRUE - -// Roaming action is invoked. -// FALSE - -// No retry roaming. -// Note: -// This function named "MgntRoamRetry" does not only mean 802.11 roaming but also -// includes link retry using the "roaming event under Ndis6 or later" to meet DTM or -// customized request. -// So when calling this function, the driver whould not be sure to send reassociation packets. -// By Bruce, 2009-02-12. -// -BOOLEAN -MgntRoamRetry( - IN PADAPTER Adapter, - IN BOOLEAN bForceRetry - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bRetry = FALSE; - PRT_WLAN_BSS pRtBss = NULL; - RT_JOIN_ACTION join_action = RT_NO_ACTION; - - // Reset Join Retry count to re-join for roaming. - pMgntInfo->JoinRetryCount = 0; - pMgntInfo->AsocRetryCount = 0; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntRoamRetry(): Roaming Type = %d, RoamingFailCount = %d (Limit = %d)\n", - pMgntInfo->RoamingType, pMgntInfo->RoamingFailCount, pMgntInfo->RegRoamingLimitCount)); - -#if 0 - if(MgntIsLinkInProgress(pMgntInfo)|| // Case 1 : we in link process so don't it !! - (MgntScanInProgress(pMgntInfo)&& pMgntInfo->bScanOnly == FALSE)) // Case 2 : we in link after scan , so we do no thing !! - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("RETURN!! bScanInProgress %d bScanOnly %d JoinTimer.Status 0x%x JoinConfirmTimer.Status 0x%x JoinProbeReqTimer.Status 0x%x AuthTimer.Status 0x%x AsocTimer.Status 0x%x bJoinInProgress %d\n", pMgntInfo->bScanInProgress, pMgntInfo->bScanOnly, pMgntInfo->JoinTimer.Status, pMgntInfo->JoinConfirmTimer.Status, pMgntInfo->JoinProbeReqTimer.Status, pMgntInfo->AuthTimer.Status, pMgntInfo->AsocTimer.Status, pMgntInfo->bJoinInProgress )); - - return TRUE; - } -#endif - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("bResetInProgress\n")); - return FALSE; - } - - if(MgntIsTimeOutForIndication(pMgntInfo)) - return FALSE; - - pMgntInfo->RequestFromUplayer = FALSE; - - if(PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - return FALSE; - - if((pMgntInfo->RoamingFailCount > pMgntInfo->RegRoamingLimitCount + - ((pMgntInfo->RoamingType == RT_ROAMING_BY_SLEEP) ? 1 : 0)) // Wake up from sleep, more time to raom. - && !bForceRetry) - { // Exceeds Roaming Limit, do not try. - if(pMgntInfo->RoamingType != RT_ROAMING_NONE) - { - while(GetDesiredSSIDList(Adapter)) - { - join_action = SelectNetworkBySSID(Adapter, &(pMgntInfo->Ssid), TRUE, pRtBss); - // - // Select a different AP to roam. - // - if(join_action == RT_JOIN_INFRA) - { // An BSS has been selected. - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "MgntRoamRetry(): BSS to roam", pRtBss->bdBssIdBuf); - pMgntInfo->RoamingState = ROAMINGSTATE_SCANNING; - JoinRequest(Adapter, RT_JOIN_INFRA, pRtBss); - bRetry = TRUE; - break; - } - } - - if(join_action == RT_NO_ACTION) - bRetry = FALSE; - } - else - { - bRetry = FALSE; - } - } - else if(pMgntInfo->RoamingType == RT_ROAMING_NONE) - { - bRetry = FALSE; - } - else if(pMgntInfo->RoamingType == RT_ROAMING_BY_DEAUTH || - pMgntInfo->RoamingType == RT_ROAMING_BY_SLEEP) - { // Try to link to the original AP. - if(MgntLinkRetry(Adapter, FALSE)) - bRetry = TRUE; - else - bRetry = FALSE; - } - else - { // Roam to the other AP. - if(pRtBss != NULL) - join_action = SelectNetworkBySSID(Adapter, &(pMgntInfo->Ssid), TRUE, pRtBss); - // - // Select a different AP to roam. - // - if(join_action == RT_JOIN_INFRA) - { // An BSS has been selected. - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "MgntRoamRetry(): BSS to roam", pRtBss->bdBssIdBuf); - pMgntInfo->RoamingState = ROAMINGSTATE_SCANNING; - JoinRequest(Adapter, RT_JOIN_INFRA, pRtBss); - bRetry = TRUE; - } - else - { // No another AP can be selected, try to scan and to re-do join action. - if(MgntLinkRetry(Adapter, FALSE)) - bRetry = TRUE; - else - bRetry = FALSE; - } - } - - if(pRtBss != NULL) - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - FunctionOut(COMP_MLME); - - return bRetry; -} - - -/* - * MgntLinkRequestReschedule: - * Check wheter reschedule of JoinRequest is required if RF is in OFF state - * Check whether reschedule is required - * If reschedule is required, Turn on RF, Save required parameter and - * reschedule for MgntLinkRequestReschedule - * 2008/01/03 Emily - */ -BOOLEAN -MgntLinkRequestReschedule( - PADAPTER Adapter, - BOOLEAN bScanOnly, - BOOLEAN bActiveScan, - BOOLEAN bFilterHiddenAP, - BOOLEAN bUpdateParms, - POCTET_STRING pSsid2scan, - u1Byte NetworkType, - u1Byte ChannelNumber, - u2Byte BcnPeriod, - u1Byte DtimPeriod, - u2Byte mCap, - POCTET_STRING pSuppRateSet, - PIbssParms pIbpm -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PMGNT_INFO pDefaultMgntInfo = &GetDefaultAdapter(Adapter)->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pDefaultMgntInfo); - RT_RF_POWER_STATE rtState; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return TRUE; - } - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - if (rtState == eRfOff/* || rtState ==eRfSleep*/) - { - // - // Check if in inactive power save mode. If yes, we should turn on rf and continue scan. - // 2007.07.16, by shien chang. - // - if (pMgntInfo->RfOffReason > RF_CHANGE_BY_IPS) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntLinkRequestReschedule(): Dont scan beacuse RF is OFF.\n")); - if(bScanOnly) - { - if(MgntScanInProgress(pMgntInfo)) - MgntResetScanProcess( Adapter ); - } - else - { - DrvIFIndicateScanStart( Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return TRUE; - } - - if(MgntRoamingInProgress(pMgntInfo)) - { - MgntRoamComplete(Adapter, MlmeStatus_invalid) ; - } - else if (pMgntInfo->RequestFromUplayer) - { - DrvIFIndicateConnectionStart( Adapter); - DrvIFIndicateConnectionComplete( Adapter,RT_STATUS_FAILURE); - } - MgntResetLinkProcess(Adapter); - } - return TRUE; - } - else if (!pMgntInfo->bSetPnpPwrInProgress) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MgntLinkRequestReschedule(): Under inactive ps mode, turn on RF and continue.\n")); - pPSC->bTmpScanOnly = bScanOnly; - pPSC->bTmpActiveScan = bActiveScan; - pPSC->bTmpFilterHiddenAP = bFilterHiddenAP; - pPSC->bTmpUpdateParms = bUpdateParms; - pPSC->ptmpAdapter = Adapter; - if (pSsid2scan == NULL) - { - pPSC->bTmpSsid2Scan = FALSE; - } - else - { - pPSC->bTmpSsid2Scan = TRUE; - FillOctetString(pPSC->tmpSsid2Scan, - pPSC->tmpSsidBuf, - sizeof(pPSC->tmpSsidBuf) ); - CopyMemOS(&(pPSC->tmpSsid2Scan), - *pSsid2scan, pSsid2scan->Length); - } - pPSC->tmpNetworkType = NetworkType; - pPSC->tmpChannelNumber = ChannelNumber; - pPSC->tmpBcnPeriod = BcnPeriod; - pPSC->tmpDtimPeriod = DtimPeriod; - pPSC->tmpmCap = mCap; - if (pSuppRateSet == NULL) - { - pPSC->bTmpSuppRate = FALSE; - } - else - { - pPSC->bTmpSuppRate = TRUE; - FillOctetString(pPSC->tmpSuppRateSet, - pPSC->tmpSuppRateBuf, - sizeof(pPSC->tmpSuppRateBuf) ); - CopyMemOS(&(pPSC->tmpSuppRateSet), - *pSuppRateSet, pSuppRateSet->Length); - } - if (pIbpm == NULL) - { - pPSC->bTmpIbpm = FALSE; - } - else - { - pPSC->bTmpIbpm = TRUE; - PlatformMoveMemory(&(pPSC->tmpIbpm), pIbpm, sizeof(IbssParms)); - } - pPSC->ReturnPoint = IPS_CALLBACK_MGNT_LINK_REQUEST; // MgntLinkRequest - if(rtState == eRfOff && pMgntInfo->RfOffReason == RF_CHANGE_BY_IPS) - { - IPSLeave(Adapter,FALSE); - PlatformSetTimer(Adapter, &pPSC->InactivePsTimer, SWRF_TIMEOUT); - } - else if(pPSC->bSwRfProcessing) - { - IPSLeave(Adapter,FALSE); - PlatformSetTimer(Adapter, &pPSC->InactivePsTimer, SWRF_TIMEOUT); - } - - CustomScan_RescheduleCb(GET_CUSTOM_SCAN_INFO(Adapter)); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== MgntLinkRequestReschedule()\n")); - return TRUE; - - } - } - return TRUE; -} - - - -// <1>ScanByTimer -// <2>JoinRequest -BOOLEAN -MgntLinkRequest( - PADAPTER Adapter, - BOOLEAN bScanOnly, - BOOLEAN bActiveScan, - BOOLEAN bFilterHiddenAP, - BOOLEAN bUpdateParms, - POCTET_STRING pSsid2scan, - u1Byte NetworkType, - u1Byte ChannelNumber, - u2Byte BcnPeriod, - u1Byte DtimPeriod, - u2Byte mCap, - POCTET_STRING pSuppRateSet, - PIbssParms pIbpm -) -{ - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - u2Byte SupportedWirelessMode; - RT_RF_POWER_STATE rtState; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - BOOLEAN bIQKInProgress = FALSE; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("MAC %d ===> MgntLinkRequest() port number %d scanonly %d\n",Adapter->interfaceIndex, Adapter->pNdis62Common->PortNumber, bScanOnly)); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return FALSE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress \n")); - return FALSE; - } - - //2008.12.31 Added by tynli - if (pPSC->bSwRfProcessing) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("<=== MgntLinkRequest(): Rf is in switching state.\n")); - //2009.01.01 Added by tynli to fix the race condision problem when IPS is truning RF to off. - //1.Store the Link information - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - - if ((rtState == eRfOff) && (pPSC->BufConnectinfoBefore == FALSE)) - { - pPSC->bTmpScanOnly = bScanOnly; - if(!bScanOnly) - pPSC->BufConnectinfoBefore = TRUE; - pPSC->bTmpActiveScan = bActiveScan; - pPSC->bTmpFilterHiddenAP = bFilterHiddenAP; - pPSC->bTmpUpdateParms = bUpdateParms; - if (pSsid2scan == NULL) - { - pPSC->bTmpSsid2Scan = FALSE; - } - else - { - pPSC->bTmpSsid2Scan = TRUE; - FillOctetString(pPSC->tmpSsid2Scan, - pPSC->tmpSsidBuf, - sizeof(pPSC->tmpSsidBuf) ); - CopyMemOS(&(pPSC->tmpSsid2Scan), - *pSsid2scan, pSsid2scan->Length); - } - pPSC->tmpNetworkType = NetworkType; - pPSC->tmpChannelNumber = ChannelNumber; - pPSC->tmpBcnPeriod = BcnPeriod; - pPSC->tmpDtimPeriod = DtimPeriod; - pPSC->tmpmCap = mCap; - if (pSuppRateSet == NULL) - { - pPSC->bTmpSuppRate = FALSE; - } - else - { - pPSC->bTmpSuppRate = TRUE; - FillOctetString(pPSC->tmpSuppRateSet, - pPSC->tmpSuppRateBuf, - sizeof(pPSC->tmpSuppRateBuf) ); - CopyMemOS(&(pPSC->tmpSuppRateSet), - *pSuppRateSet, pSuppRateSet->Length); - } - if (pIbpm == NULL) - { - pPSC->bTmpIbpm = FALSE; - } - else - { - pPSC->bTmpIbpm = TRUE; - PlatformMoveMemory(&(pPSC->tmpIbpm), pIbpm, sizeof(IbssParms)); - } - //2. Set the LinkReqInIPSRFOffPgs bit to TRUE. It presents that we need to recall this fuction - // and do the link action when IPS RF off progress is finished. (e.g. Associstion) - pPSC->LinkReqInIPSRFOffPgs = TRUE; - } - - // 2010/05/10 MH For the timing test. We need to indicate a scan complete event - // to prevent OS stop to send scan request OID for 1~2 minutes. If driver is trying to - // enter or exit IPS when we execute scan request. - - - // - // We should perform above scan operation under IPS mode to prevent NULL scan list before - // BSS enumeration from upper layer, 2013.08.01. - // - if (pMgntInfo->RfOffReason > RF_CHANGE_BY_IPS) - { - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - return TRUE; - } - - } - - // When scan only condition, we save the scan start time and prevent - // the scan time from exceeding 4 minutes. - if(!pMgntInfo->bPendScanOID) - { - if( pMgntInfo->bCheckScanTime == FALSE && bScanOnly == TRUE ) - { - pMgntInfo->ScanOnlyStartTime = PlatformGetCurrentTime(); - pMgntInfo->bCheckScanTime = TRUE; - } - } - else - pMgntInfo->bPendScanOID = FALSE; - - // - // 1. Checking RF state for entering C3/C4 issue. - // 2. When RF is off, we should not accept link request. - // 3. 2007.02.09, by Roger. - // - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - if (rtState == eRfOff) - { - MgntLinkRequestReschedule(Adapter, bScanOnly, bActiveScan, bFilterHiddenAP, \ - bUpdateParms, pSsid2scan, NetworkType, ChannelNumber, BcnPeriod, \ - DtimPeriod, mCap, pSuppRateSet, pIbpm); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== MgntLinkRequest(): RF is OFF.\n")); - // We should not indicate scan complete here or it will cause acting the flow "IPS-> enter S3/S4 - // -> resume from S3/S4 -> IPS -> manually scan once" then OS WLAN icon shows "Red X" because - // we indicate a null scan list here. The scan complete should have been indicated after - // IPS re-scan flow. 2013.03.05, noted by tynli. - //DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - return TRUE; - } - - if( (pMgntInfo->mAssoc) && - ( pMgntInfo->bMediaConnect) && - !(pMgntInfo->bScanInProgress) && - !(pMgntInfo->bDualModeScanStep==2)) - { - LeisurePSLeave(Adapter, LPS_DISABLE_LINK_REQ); - } - - PlatformAcquireSpinLock(Adapter, RT_SCAN_SPINLOCK); - - if (Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_IQK_STATUS, (PBOOLEAN)&bIQKInProgress)) - { - if(bIQKInProgress) - { - MgntLinkRequestReschedule(Adapter, bScanOnly, bActiveScan, bFilterHiddenAP, \ - bUpdateParms, pSsid2scan, NetworkType, ChannelNumber, BcnPeriod, \ - DtimPeriod, mCap, pSuppRateSet, pIbpm); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== MgntLinkRequest(): IQK inprogress.\n")); - PlatformReleaseSpinLock(Adapter, RT_SCAN_SPINLOCK); - return TRUE; - } - } - - if(pMgntInfo->bScanInProgress || (pMgntInfo->bDualModeScanStep==2) ) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== MgntLinkRequest(): scan in progress.\n")); - - PlatformReleaseSpinLock(Adapter, RT_SCAN_SPINLOCK); - - RT_TRACE(COMP_MP, DBG_LOUD, ("== Scan Release Mutex of RF Protection ==\n")); - - // An dirty workaround for scan process. If the scan is in progress, and it is called - // before connect. Then we set the scan flag again to let the last scan complete event - // be indicated. 2007.01.04, by shien chang. - if (pMgntInfo->bIndicateConnectEvent) - { - DrvIFIndicateScanStart(Adapter); - // to connect after scan, see also scancomplete 2008 06 20 Neo - } - - // If the current request is a join action, mark this flag to join after scan. By Bruce, 2009-02-05. - if(bScanOnly == FALSE) - pMgntInfo->bScanOnly = FALSE; - return TRUE; - } - - pMgntInfo->bScanOnly = bScanOnly; - pMgntInfo->FilterHiddenAP = bFilterHiddenAP; - - pMgntInfo->bActiveScan = bActiveScan; - if(IS_DOT11D_ENABLE(pMgntInfo) ) - { - // - // Check if we still get the same country IE in this scan, - // if not, we shall reset it. - // - RESET_CIE_WATCHDOG(pMgntInfo); - } - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkRequest(): %s....\n", (pMgntInfo->bActiveScan ? "Active Scan": "Passive Scan"))); - - - if(bUpdateParms) - { - if( !bScanOnly ) - { - pMgntInfo->Regdot11networktype = NetworkType; - if( pSsid2scan->Length ) - { - CopySsidOS(pMgntInfo->Ssid, *pSsid2scan); - } - pMgntInfo->dot11CurrentChannelNumber = ChannelNumber; - pMgntInfo->dot11BeaconPeriod = BcnPeriod; - pMgntInfo->dot11DtimPeriod = DtimPeriod; - pMgntInfo->mCap = mCap; - if( pSuppRateSet->Length > 0) - { - pMgntInfo->SupportedRates.Length = (pSuppRateSet->Length > MAX_NUM_RATES) ? MAX_NUM_RATES : pSuppRateSet->Length; - CopyMem(pMgntInfo->SupportedRates.Octet, pSuppRateSet->Octet, pMgntInfo->SupportedRates.Length); - } - else - { - // Use Regdot11OperationalRateSet as default, 2004.11.16, by rcnjko. - CopyMemOS( &pMgntInfo->SupportedRates, - pMgntInfo->Regdot11OperationalRateSet, - pMgntInfo->Regdot11OperationalRateSet.Length ); - } - SelectRateSet( Adapter, pMgntInfo->SupportedRates ); - pMgntInfo->mIbssParms.atimWin = pIbpm->atimWin; - pPSC->BufConnectinfoBefore = FALSE; - } - - } - - HAL_HiddenSSIDHandleBeforeScan(Adapter); - - // TODO: In order to stable/optimize scan result, we might actually need to save the result for a certain time - // TODO: We will leave this as it is at this time since we want to see the ture RF performance - // Clear content of bssDesc[] before scanning. - if(!CustomScan_InProgress(GET_CUSTOM_SCAN_INFO(Adapter))) - {// customized scan shall not have effect on normal scan, here it should not clear the scan list, 2011.01.11, haich - if(!GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) //suggested by hpfan, added by page, 20120921 - pMgntInfo->NumBssDesc = 0; - } - pMgntInfo->bFlushScanList = FALSE; // We have flushed scan list. - - // Get supported wireless mode. - SupportedWirelessMode = Adapter->HalFunc.GetSupportedWirelessModeHandler(Adapter); - - //2 //Backup wireless setting before scan(restore in ScanComplete) - //The restore setting should be the default adapter setting when multiports. by Wl,2011.07.18 - { - CHANNEL_WIDTH bw = RT_GetBandWidth(Adapter); - EXTCHNL_OFFSET extchnl20MHz,extchnl40MHz; - u1Byte centerfrequencyindex1; - PADAPTER pDfAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDfMgntInfo = &pDfAdapter->MgntInfo; - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_BW40MHZ_EXTCHNL, (pu1Byte)(&extchnl20MHz)); - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_BW80MHZ_EXTCHNL, (pu1Byte)(&extchnl40MHz)); - centerfrequencyindex1 = RT_GetCenter_Frequency_Index1(Adapter); - - pMgntInfo->SettingBeforeScan.WirelessModeScanInProgress = pMgntInfo->dot11CurrentWirelessMode; - if(pDfMgntInfo->bMediaConnect) // If default Adapter not connected, we need not to restore to it's channel after scancomplete - pMgntInfo->SettingBeforeScan.WirelessMode = pDfMgntInfo->dot11CurrentWirelessMode; - else - pMgntInfo->SettingBeforeScan.WirelessMode = pMgntInfo->dot11CurrentWirelessMode; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("pDfMgntInfo->bMediaConnect %d pMgntInfo->SettingBeforeScan.WirelessMode 0x%x\n", pDfMgntInfo->bMediaConnect, pMgntInfo->SettingBeforeScan.WirelessMode)); - - if(IS_RSTO_WMM_AFTER_SCAN(Adapter))//add by ylb 20130627 for restore WMMParamEle after scan, Fix WMMParamEle changed during scan and set the wrong value of QOS Parameter( TxOP) - PlatformMoveMemory(pMgntInfo->SettingBeforeScan.WMMParamEle, Adapter->MgntInfo.pStaQos->WMMParamEle,WMM_PARAM_ELEMENT_SIZE); - - HAL_SetCorrentChannelAndWirelessModeBeforeScan(Adapter); - - if(pDfMgntInfo->bMediaConnect) - { - pMgntInfo->SettingBeforeScan.ChannelNumber = pDfMgntInfo->dot11CurrentChannelNumber; - } - else - { - //use P2P client connected channel when default port is disconnected - //by sherry 20130117 -#if (MULTICHANNEL_SUPPORT == 1) - PMULTICHANNEL_PORT_CONTEXT pClientPortContext; - if(GetFirstClientPort(Adapter) != NULL) - { - pClientPortContext = (PMULTICHANNEL_PORT_CONTEXT)(GetFirstClientPort(Adapter))->MultiChannel; - if(MgntLinkStatusQuery(GetFirstClientPort(Adapter)) == RT_MEDIA_CONNECT) - pMgntInfo->SettingBeforeScan.ChannelNumber = pClientPortContext->ConnectedPrimary20MhzChannel; - else - pMgntInfo->SettingBeforeScan.ChannelNumber = pMgntInfo->dot11CurrentChannelNumber; - } - // Comment the following code because pGoPortContext->ConnectedPrimary20MhzChannel may be 0 when the - // FCS mode is not enabled. By Bruce, 2014-12-15. - else if(GetFirstGOPort(Adapter) != NULL) - { - PMULTICHANNEL_PORT_CONTEXT pGoPortContext; - - pGoPortContext = (PMULTICHANNEL_PORT_CONTEXT)(GetFirstGOPort(Adapter))->MultiChannel; - - if(MgntLinkStatusQuery(GetFirstGOPort(Adapter)) == RT_MEDIA_CONNECT) - { - pMgntInfo->SettingBeforeScan.ChannelNumber = pGoPortContext->ConnectedPrimary20MhzChannel; - } - } - else - { - RT_TRACE(COMP_MLME,DBG_LOUD,("MgntLinkRequest: pMgntInfo->dot11CurrentChannelNumber: %d \n",pMgntInfo->dot11CurrentChannelNumber)); - - pMgntInfo->SettingBeforeScan.ChannelNumber = pMgntInfo->dot11CurrentChannelNumber; - - } -#else - pMgntInfo->SettingBeforeScan.ChannelNumber = pMgntInfo->dot11CurrentChannelNumber; -#endif - - } - - pMgntInfo->SettingBeforeScan.ChannelBandwidth = bw; - pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz = extchnl20MHz; - pMgntInfo->SettingBeforeScan.Ext40MHzChnlOffsetOf80MHz = extchnl40MHz; - pMgntInfo->SettingBeforeScan.CenterFrequencyIndex1 = CHNL_GetCenterFrequency(pMgntInfo->SettingBeforeScan.ChannelNumber, bw, extchnl20MHz); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("MgntLinkRequest(): chnl: %u, bw: %u, Offset: %u\n", - pMgntInfo->SettingBeforeScan.ChannelNumber, - pMgntInfo->SettingBeforeScan.ChannelBandwidth, - pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz)); - } - - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.WirelessMode: %d\n", pMgntInfo->SettingBeforeScan.WirelessMode)); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.ChannelNumber: %d\n", pMgntInfo->SettingBeforeScan.ChannelNumber)); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.ChannelBandwidth: %d\n", pMgntInfo->SettingBeforeScan.ChannelBandwidth)); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz: %d\n", pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz)); - - - // TODO: possiblely need to change here because of support of single band scan - // TODO: need to add other condifion if we change the regwirelessmode rule and support N only scan - - if( (Adapter->RegWirelessMode & WIRELESS_MODE_AUTO) && (IS_DUAL_BAND_SUPPORT(Adapter))) - pMgntInfo->bDualModeScanStep = 1; - else - pMgntInfo->bDualModeScanStep = 0; - - ScanByTimer( Adapter, pMgntInfo->bActiveScan, pMgntInfo->bScanOnly ); - - PlatformReleaseSpinLock(Adapter, RT_SCAN_SPINLOCK); - - RT_TRACE(COMP_MP, DBG_LOUD, ("== Scan Release Mutex of RF Protection ==\n")); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== MgntLinkRequest(): return TRUE.\n")); - return TRUE; -} - -VOID -MgntLinkStatusUpdateRxCounts( - PADAPTER Adapter, - pu4Byte TotalRxBcnNum, - pu4Byte TotalRxDataNum -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - u2Byte SlotIndex; - u1Byte i; - - *TotalRxBcnNum = 0; - *TotalRxDataNum = 0; - - // - //Add by CCW and Maddest with WLK 1.3 Performance_ext, - //To detect AP is disappear within 2 sec, 20090311. - // - if(Adapter->bInHctTest) - { - *TotalRxBcnNum = pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod; - *TotalRxDataNum = pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod; - } - else - { - SlotIndex = (pMgntInfo->LinkDetectInfo.SlotIndex++)%pMgntInfo->LinkDetectInfo.SlotNum; - pMgntInfo->LinkDetectInfo.RxBcnNum[SlotIndex] = pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod; - pMgntInfo->LinkDetectInfo.RxDataNum[SlotIndex] = pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod; - - for( i=0; iLinkDetectInfo.SlotNum; i++ ) - { - *TotalRxBcnNum += pMgntInfo->LinkDetectInfo.RxBcnNum[i]; - *TotalRxDataNum += pMgntInfo->LinkDetectInfo.RxDataNum[i]; - } - } - - //cosa add for debug 09/26/2007. Report to DbgCmd utility - if(pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod == 0) - pMgntInfo->LinkDetectInfo.ConnectButNoBcnInPeriodCnt++; - if(pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod == 0) - pMgntInfo->LinkDetectInfo.ConnectButNoDataInPeriodCnt++; - - if( (*TotalRxBcnNum+*TotalRxDataNum) == 0 ) - { - pMgntInfo->LinkDetectInfo.BecomeDisconnectedCnt++; //cosa add for debug - pMgntInfo->LinkDetectInfo.BecomeDisconnectedTime[pMgntInfo->LinkDetectInfo.BecomeDisconnectedIndex++] = PlatformGetCurrentTime();//cosa add for debug - if(pMgntInfo->LinkDetectInfo.BecomeDisconnectedIndex >= 10)//cosa add for debug - pMgntInfo->LinkDetectInfo.BecomeDisconnectedIndex = 0; - } -} - -/* - * MgntLinkStatusProcWhenRFIsOff - * This function is called when - * (1) Driver detect that no beacon or data is received because RF is Off in "Connected" state - * (2) Driver is in "Disconnected State" because RF is Off - */ -VOID -MgntLinkStatusProcWhenRFIsOff( - PADAPTER Adapter, - RT_MEDIA_STATUS ConnectedState -) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - switch(ConnectedState) - { - case RT_MEDIA_CONNECT: - // When Received number of Beacon and Data packet is zero because - // RF is in OFF state, do not start roaming, and we start indicating - // disconnected. By Bruce, 2007-10-03. - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusProcWhenRFIsOff(): RF OFF => inidcate disconnect and no more roaming\n")); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return ; - } - - if(MgntRoamingInProgress(pMgntInfo)) - MgntRoamComplete(Adapter, MlmeStatus_invalid); - - DrvIFIndicateDisassociation(Adapter, unspec_reason, pMgntInfo->Bssid); - - // We only do roaming in infra-structure mode, asked by Netgear, 2003.03.10, by rcnjko. -// MgntResetRoamingState(pMgntInfo); - - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, FORCE_INDICATE ); - - // Reset all association entry. - AsocEntry_ResetAll(Adapter); - break; - - case RT_MEDIA_DISCONNECT: - // If driver is in disconneted state because RF is Off, do not do MgntLinkRetry - // By Emily, 2008-01-02 - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusProcWhenRFIsOff(): ------- Keep DISCONNECTED ------- DisconnectedSlotCount(%d)\n", pMgntInfo->DisconnectedSlotCount)); - RT_TRACE(COMP_MLME, DBG_LOUD, - ("MgntLinkStatusProcWhenRFIsOff(): RF is OFF, mAssoc(%d), mIbss(%d), OpMode(%d), Regdot11networktype(%d)\n", - pMgntInfo->mAssoc, pMgntInfo->mIbss, pMgntInfo->OpMode, pMgntInfo->Regdot11networktype)); - //2009.01.01 Added by tynli. - if(pPSC->LinkReqInIPSRFOffPgs == TRUE) - { - pPSC->LinkReqInIPSRFOffPgs = FALSE; - MgntLinkRequest( - Adapter, - pPSC->bTmpScanOnly, - pPSC->bTmpActiveScan, - pPSC->bTmpFilterHiddenAP, - pPSC->bTmpUpdateParms, - (pPSC->bTmpSsid2Scan ? &(pPSC->tmpSsid2Scan) : NULL), - pPSC->tmpNetworkType, - pPSC->tmpChannelNumber, - pPSC->tmpBcnPeriod, - pPSC->tmpDtimPeriod, - pPSC->tmpmCap, - (pPSC->bTmpSuppRate ? &(pPSC->tmpSuppRateSet) : NULL), - (pPSC->bTmpIbpm ? &(pPSC->tmpIbpm) : NULL) ); - - //clean the link request info - pPSC->bTmpScanOnly = FALSE; - pPSC->bTmpActiveScan = FALSE; - pPSC->bTmpFilterHiddenAP = FALSE; - pPSC->bTmpUpdateParms = FALSE; - pPSC->bTmpSsid2Scan = FALSE; - pPSC->tmpSsid2Scan.Octet = 0; - pPSC->tmpSsid2Scan.Length = 0; - pPSC->tmpNetworkType = 0; - pPSC->tmpChannelNumber= 0; - pPSC->tmpBcnPeriod = 0; - pPSC->tmpDtimPeriod = 0; - pPSC->tmpmCap = FALSE; - pPSC->bTmpSuppRate = FALSE; - pPSC->tmpSuppRateSet.Octet = 0; - pPSC->tmpSuppRateSet.Length = 0; - pPSC->bTmpIbpm = FALSE; - pPSC->tmpIbpm.atimWin = 0; - - } - break; - - } -} - -VOID -SwitchCheckBSSID( - PADAPTER Adapter -) -{ - static u4Byte count = 0; - BOOLEAN Value; - - // In 92C, we do not switch BSSID anymore because Hw has fixed the bug. - // Suggested by Bruce. Added by tynli. 2009.11.26. - return; - - - if(count%2 == 0) - { - Value = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)&Value); - - }else - { - Value = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_CHECK_BSSID, (pu1Byte)&Value); - } - - count++; - -} - - -VOID -MgntLinkIotRelinkCheck( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bNeedRelink=FALSE; - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(pMgntInfo->IOTAction & HT_IOT_ACT_BCM_AP_RX_FAIL_RELINK) - { - if(pMgntInfo->bMediaConnect && - (pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) && - !MgntRoamingInProgress(pMgntInfo) && - (Adapter->RxStats.CurRxDataRate.RawValue != 0xffff ) && - (Adapter->RxStats.CurRxOfdmNum == 0) && - (GET_UNDECORATED_AVERAGE_RSSI(Adapter) > 15)) - { - bNeedRelink = TRUE; - } - - // execute relink procedure - if(bNeedRelink) - { - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return ; - } - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkIotRelinkCheck(): Infra. client => start roaming...\n")); - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_DEAUTH, ROAMINGSTATE_SCANNING); - PlatformMoveMemory( pMgntInfo->APaddrbeforeRoaming, pMgntInfo->Bssid, 6); - // Do this to reset TS data structure. - RemoveAllTS(Adapter); - - DrvIFIndicateRoamingStart(Adapter); - MgntLinkRetry(Adapter, TRUE); - } - } -} - -VOID -MgntCheckScanListEmpty( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = GetDefaultMgntInfo(Adapter); - RT_RF_POWER_STATE rfState; - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - - if((pMgntInfo->NumBssDesc4Query == 0) && - (rfState==eRfOn || (rfState==eRfOff && RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K) && - !(pMgntInfo->RfOffReason & (RF_CHANGE_BY_SW|RF_CHANGE_BY_HW))))) - { - if((pMgntInfo->DumpDbgRegCnt < RT_SCAN_EMPTY_DUMP_REG_CNT) && !MgntScanInProgress(pMgntInfo)) - { - // Dump all MAC and RF registers for debug - HAL_DumpHwAllRegisters(Adapter); - pMgntInfo->DumpDbgRegCnt++; - } - } - else - { - // Reset counter - pMgntInfo->DumpDbgRegCnt =0; - } - -} - -VOID -MgntLinkHandleIPS( - PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PADAPTER pAdapter = pDefaultAdapter; - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - PMGNT_INFO pMgntInfo = pDefMgntInfo; - RT_RF_POWER_STATE rfState; - - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS() ====>\n")); - if(pDefaultAdapter->bInHctTest) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(): return for Hct Test!!\n")); - return; - } - - if(IsDevicePortDiscoverable(Adapter) || GetFirstGOPort(Adapter) || GetFirstClientPort(Adapter)) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(): return for p2p!!\n")); - return; - } - - if(IsActiveAPModeExist(Adapter)) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(): return for active Ap!!\n")); - return; - } - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - if(rfState != eRfOn) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(): return for RF off!!\n")); - return; - } - - while(pAdapter != NULL) - { - if(MgntScanInProgress(pMgntInfo) ||MgntIsLinkInProgress(pMgntInfo) ||pMgntInfo->SnifferTurnOnFlag ) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(): return for scan or link progress!!\n")); - return; - } - - if ( (MgntLinkStatusQuery(pAdapter)==RT_MEDIA_CONNECT) || ACTING_AS_IBSS(pAdapter) || MgntRoamingInProgress(pMgntInfo)) - return; - - pAdapter = GetNextExtAdapter(pAdapter); - - if(pAdapter == NULL) break; - - pMgntInfo = &pAdapter->MgntInfo; - } - - // - // We should not enter IPS mode when the OID_DOT11_CURRENT_PHY_ID request for the value of the Extensible Station (ExtSTA) - // msDot11CurrentPhyID management are still under configuration on Win8 or later OS version. - // 2013.08.27. - // - if(!PLATFORM_GET_PHY_ID_READY(pDefaultAdapter)) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(): Value for the current PHY IDs are not ready!!\n")); - return; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): RF is ON ,ReturnPoint(%d), bSetPnpPwrInProgress(%d), bDriverIsGoingToPnpSetPowerSleep(%d)\n", - pDefMgntInfo->PowerSaveControl.ReturnPoint, pDefMgntInfo->bSetPnpPwrInProgress, pDefaultAdapter->bDriverIsGoingToPnpSetPowerSleep)); - - if((pDefMgntInfo->PowerSaveControl.ReturnPoint == IPS_CALLBACK_NONE) - && (pDefMgntInfo->bSetPnpPwrInProgress == FALSE ) && (!pDefaultAdapter->bDriverIsGoingToPnpSetPowerSleep) //tynli_Test add Adapter->bDriverIsGoingToUnload)) -#if (P2P_SUPPORT == 1) - && !P2P_DOING_DEVICE_DISCOVERY(GET_P2P_INFO(pDefaultAdapter))) // #if (P2P_SUPPORT == 1) -#else - ) -#endif - - { - // Enter IPS only when no InactivePsTimerCallback is scheduled, by Bruce, 2007-10-03. - // For inactive power save mode. 2007.07.16, by shien chang. - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS() call IPSEnter()\n")); - IPSEnter(pDefaultAdapter); - } - else - { - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS(), ReturnPoint=%d/ bSetPnpPwrInProgress=%d\n", - pDefMgntInfo->PowerSaveControl.ReturnPoint, pDefMgntInfo->bSetPnpPwrInProgress)); - } - RT_TRACE(COMP_RF, DBG_LOUD, ("MgntLinkHandleIPS() <====\n")); -} - -VOID -MgntLinkHandleLPS( - PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PADAPTER pAdapter = pDefaultAdapter; - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - PMGNT_INFO pMgntInfo = pDefMgntInfo; - BOOLEAN bEnterLPS = FALSE; //TRUE //Fix cannot enter LPS after start/stop Hostednetwork. By YJ,120405 - BOOLEAN bFwCurrentInPSMode=FALSE; - BOOLEAN bFwPSAwake=TRUE; -#if (USB_TX_THREAD_ENABLE) - BOOLEAN bSupportUsbTxThread; -#endif - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - if(IsDevicePortDiscoverable(Adapter) || GetFirstGOPort(Adapter) || GetFirstClientPort(Adapter)) - return; - - if(IsActiveAPModeExist(Adapter)) - return; - - while(pAdapter != NULL) - { - if(MgntScanInProgress(pMgntInfo) ||MgntIsLinkInProgress(pMgntInfo)||pMgntInfo->SnifferTurnOnFlag ) - return; - - if(pMgntInfo->bMediaConnect && !MgntInitAdapterInProgress(pMgntInfo)) - { - // Check busy traffic condition - // Always enter LPS mode during WHQL DPC ISR test for SDIO interface. - if( (!pMgntInfo->bSdioDpcIsr) && (((pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod + pMgntInfo->LinkDetectInfo.NumTxOkInPeriod) > - pMgntInfo->LinkDetectInfo.NumRxUnicastTxOkThresh) || - (pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod > pMgntInfo->LinkDetectInfo.NumRxUnicastThresh) || - (pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > pMgntInfo->LinkDetectInfo.NumRxOkThresh)) ) - { - if(pPSC->RegAdvancedLPs) - { - bEnterLPS = TRUE; - } - else - { - bEnterLPS = FALSE; - break; - } - } - else - { - bEnterLPS = TRUE; - } - - if(pMgntInfo->mIbss) - { - bEnterLPS = FALSE; - break; - } - - if( pMgntInfo->SecurityInfo.SecLvl > RT_SEC_LVL_NONE && - pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - //WPA and Infra mode , need check key is install - if(!SecIsTxKeyInstalled( Adapter, pMgntInfo->Bssid )) - { - bEnterLPS = FALSE; - RT_TRACE( COMP_MLME , DBG_LOUD , (" Now key is not ready !! \n") ); - break; - } - } - } - - pAdapter = GetNextExtAdapter(pAdapter); - - if(pAdapter == NULL) break; - - pMgntInfo = &pAdapter->MgntInfo; - - } - - -#if (USB_TX_THREAD_ENABLE) - pDefaultAdapter->HalFunc.GetHalDefVarHandler(pDefaultAdapter, HAL_DEF_USB_TX_THREAD, (PBOOLEAN)&bSupportUsbTxThread); - - if(bSupportUsbTxThread && pPSC->bLowPowerEnable && pPSC->bLeisurePs) - { - if(bEnterLPS) - { - // Before enter LPS mode, we should enable USB Tx thread first! 2012.08.23. by tynli. - pDefaultAdapter->bUseUsbTxThread = TRUE; - LeisurePSEnter(pDefaultAdapter); - } - else - { - LeisurePSLeave(pDefaultAdapter, LPS_DISABLE_WATCH_DOG_BUSY_TRAFFIC); - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PSMODE_STATUS, (pu1Byte)(&bFwCurrentInPSMode)); - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FWLPS_RF_ON, (pu1Byte)(&bFwPSAwake)); - // Set bUseUsbTxThread to FALSE after we really leave LPS mode by checking Hw regsiters. 2012.08.23. by tynli. - if((!bFwCurrentInPSMode) && bFwPSAwake) - { - pDefaultAdapter->bUseUsbTxThread = FALSE; - } - } - } - else -#endif - { - if(bEnterLPS) - { - LeisurePSEnter(pDefaultAdapter); - } - else - { - LeisurePSLeave(pDefaultAdapter, LPS_DISABLE_WATCH_DOG_BUSY_TRAFFIC); - } - } -} - -VOID -MgntLinkStatusWatchdogForSystemWide( - PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PADAPTER pAdapter = pDefaultAdapter; //add by ylb 20111130 - PMGNT_INFO pDefMgntInfo = &pDefaultAdapter->MgntInfo; - - -{ - if(!FwLPS_IsInPSAndSupportLowPower(Adapter)) - RT_TRACE(COMP_MLME, DBG_LOUD, ("Channel Register: %x\n" , PHY_QueryRFReg(GetDefaultAdapter(Adapter), 0, RF_CHNLBW, bMaskDWord))); - - // This checks the number of ports for each role in wifi-direct - N63CValidateRoleOfWifiDirectPorts(pDefaultAdapter); -} - -#if (MULTICHANNEL_SUPPORT == 1) -{ - MultiChannelStatusWatchdog(pDefaultAdapter); -} -#endif - - MgntCheckScanListEmpty(pDefaultAdapter); - - MgntLinkHandleIPS(pDefaultAdapter); - MgntLinkHandleLPS(pDefaultAdapter); - - //Move From MgntLinkHandleLPS() by ylb 20111130 for DTM error : Skip scan because of BustTraffic = 1 - while(pAdapter != NULL) - { - pAdapter->MgntInfo.LinkDetectInfo.NumRxOkInPeriod = 0; - pAdapter->MgntInfo.LinkDetectInfo.NumTxOkInPeriod = 0; - pAdapter->MgntInfo.LinkDetectInfo.NumRxUnicastOkInPeriod = 0; - - pAdapter = GetNextExtAdapter(pAdapter); - } - - CustomScan_WatchDogCb(GET_CUSTOM_SCAN_INFO(pDefaultAdapter)); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("OnBeacon(BSS) for def port = %d\n", pDefMgntInfo->LinkDetectInfo.OnBeaconBssCnt_OnBeacon_Bss)); - RT_TRACE(COMP_RECV, DBG_LOUD, ("NumIdleRfd (%x) , NumBusyRfd(%x) \n",pDefaultAdapter->NumIdleRfd,pDefaultAdapter->NumBusyRfd[0])); - RT_TRACE(COMP_RECV, DBG_LOUD, ("NextRxDescToFill (%x) , NextRxDescToCheck(%x) \n",pDefaultAdapter->NextRxDescToFill[0],pDefaultAdapter->NextRxDescToCheck[0])); -} - -VOID -MgntLinkMultiPortStatusWatchdog( - PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - MgntLinkStatusWatchdogForEachPortSpecific( pTargetAdapter); - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - //Move IPS/LPS here for multiport - MgntLinkStatusWatchdogForSystemWide(pDefaultAdapter); - - // wpp trace for debug monitor - EXdbgmon_AutoCollectStatisticsInfo(pDefaultAdapter); -} - -BOOLEAN -MgntLinkStatusIsWifiBusy( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); - PADAPTER pLoopAdapter=NULL; - - if( (pMgntInfo->bMediaConnect) ) // HS mode - { - if(pMgntInfo->LinkDetectInfo.bBusyTraffic) - return TRUE; - } - - if(IsExtAPModeExist(Adapter)) // AP mode wifi traffic - { - PADAPTER pExtAdapter = GetFirstExtAdapter(Adapter); - PMGNT_INFO pExtMgntInfo = NULL; - - pExtMgntInfo = &(pExtAdapter->MgntInfo); - - if( (pExtMgntInfo->LinkDetectInfo.bBusyTraffic)) - return TRUE; - } - - // p2p busy state - pLoopAdapter = GetDefaultAdapter(Adapter); - while(pLoopAdapter != NULL) - { - if(pLoopAdapter->MgntInfo.LinkDetectInfo.bBusyTraffic) - return TRUE; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - - return FALSE; -} - - -VOID -MgntLinkStatusWatchdogExtAp( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - BOOLEAN bBusyTraffic = FALSE,bTxBusyTraffic=FALSE,bRxBusyTraffic=FALSE; - BOOLEAN bHigherBusyTraffic = FALSE; - BOOLEAN bHigherBusyRxTraffic = FALSE; - - if( pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > BUSY_TRAFFIC_THREADHOLD || - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > BUSY_TRAFFIC_THREADHOLD ) - { - bBusyTraffic = TRUE; - - if(pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > pMgntInfo->LinkDetectInfo.NumTxOkInPeriod) - bRxBusyTraffic=TRUE; - else if(pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > pMgntInfo->LinkDetectInfo.NumRxOkInPeriod) - bTxBusyTraffic=TRUE; - } - - // Higher Tx/Rx data. - if( pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > BUSY_TRAFFIC_HIGH_THREADHOLD || - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > BUSY_TRAFFIC_HIGH_THREADHOLD ) - { - bHigherBusyTraffic = TRUE; - - if(pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > pMgntInfo->LinkDetectInfo.NumTxOkInPeriod) - bHigherBusyRxTraffic = TRUE; - else - bHigherBusyRxTraffic = FALSE; - } - - pMgntInfo->LinkDetectInfo.NumRxOkInPeriod = 0; - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod = 0; - pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod = 0; - pMgntInfo->LinkDetectInfo.bBusyTraffic = bBusyTraffic; - if(!pMgntInfo->LinkDetectInfo.bBusyTraffic) - pMgntInfo->LinkDetectInfo.continuousIdleCnt++; - else - pMgntInfo->LinkDetectInfo.continuousIdleCnt = 0; - pMgntInfo->LinkDetectInfo.bTxBusyTraffic = bTxBusyTraffic; - pMgntInfo->LinkDetectInfo.bRxBusyTraffic = bRxBusyTraffic; - pMgntInfo->LinkDetectInfo.bHigherBusyTraffic = bHigherBusyTraffic; - pMgntInfo->LinkDetectInfo.bHigherBusyRxTraffic = bHigherBusyRxTraffic; -} - -VOID -CheckInHighTPState( - IN PADAPTER pAdapter - ) -{ - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u4Byte TxThroughput=0; // Tx throughput in KBps. - u4Byte RxThroughput=0; // Rx throughput in KBps. - u4Byte TotalThroughput=0; // Total throughput in last interval in KBps. - - //Reset the static variable, avoid set the bBusyTrafficAccordingTP =true after wake up from S3 in the wrong state. It will causing ping loss. - if((pAdapter->TxStats.NumTxOkBytesTotalTxStats.LastNumTxOkBytesTotal)||(pAdapter->RxStats.NumRxOkBytesTotalRxStats.LastNumRxOkBytesTotal)) - { - //pAdapter->TxStats.LastNumTxOkBytesTotal = 0; - //pAdapter->RxStats.LastNumRxOkBytesTotal = 0; - } - - // Figure out throughput in last interval. - if( MgntLinkStatusQuery(pAdapter)==RT_MEDIA_CONNECT) - { - TxThroughput = ( (u4Byte)(pAdapter->TxStats.NumTxOkBytesTotal - pAdapter->TxStats.LastNumTxOkBytesTotal) )*8/2/1024 ; - RxThroughput = ( (u4Byte)(pAdapter->RxStats.NumRxOkBytesTotal - pAdapter->RxStats.LastNumRxOkBytesTotal) )*8/2/1024 ; - TotalThroughput = TxThroughput + RxThroughput; - - pAdapter->TxStats.LastNumTxOkBytesTotal = (u4Byte)pAdapter->TxStats.NumTxOkBytesTotal; - pAdapter->RxStats.LastNumRxOkBytesTotal = (u4Byte)pAdapter->RxStats.NumRxOkBytesTotal ; - - pAdapter->TxStats.CurrentTxTP_Kbps = (u4Byte)(TxThroughput); - pAdapter->RxStats.CurrentRxTP_Kbps = (u4Byte)(RxThroughput); - - pAdapter->TxStats.CurrentTxTP = (u2Byte)(TxThroughput/1024); - pAdapter->RxStats.CurrentRxTP = (u2Byte)(RxThroughput/1024); - - if(((TxThroughput/1024)>pHalData->TxHignTPThreshold) && ((RxThroughput/1024)>=pHalData->RxHignTPThreshold)) - { - pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP = TRUE; - } - else - { - pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP = FALSE; - } - - if(pHalData->RxHignTPThreshold==9) - pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP = TRUE; - else - pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP = FALSE; - - RT_TRACE(COMP_MLME,DBG_LOUD,("Tx: %d Mbps (%d Kbps) :Rx: %d Mbps (%d Kbps), ------> In HighTP %d\n", - pAdapter->TxStats.CurrentTxTP, - TxThroughput, - pAdapter->RxStats.CurrentRxTP, - RxThroughput, - pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP)); - } - - - -} - - -VOID -MgntLinkStatusWatchdogForEachPortSpecific( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - BOOLEAN bBusyTraffic = FALSE,bTxBusyTraffic=FALSE,bRxBusyTraffic=FALSE; - BOOLEAN bHigherBusyTraffic = FALSE; - BOOLEAN bHigherBusyRxTraffic = FALSE; - BOOLEAN bVeryHigherBusyTraffic = FALSE; - BOOLEAN bVeryHigherBusyRxTraffic = FALSE; - BOOLEAN bVeryHigherBusyTxTraffic = FALSE; - RT_RF_POWER_STATE rfState; - u8Byte u8TSF, u8TSFtmp; - u1Byte beacondelay = 30; //count as 0.1s - u1Byte u1tmp; - BOOLEAN bWiFiConfig = pMgntInfo->bWiFiConfg; - -#if MULTIPORT_SUPPORT == 1 -{ - FunctionIn(COMP_MLME); - MultiPortDumpPortStatus(Adapter); -} -#endif - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return; - } - - if(Adapter->bSurpriseRemoved) - return; - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress bScanOnly FALSE\n")); - return; - } - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - - // Caculate the roaming fail count to decide if the roaming procedure should be canceled. By Bruce, 2008-05-22. - if(MgntRoamingInProgress(pMgntInfo)) - pMgntInfo->RoamingFailCount ++; - - // Calculate the prepare roaming count to decide if the prepare roaming procedure should be canceled. By Sinda, 20150507. - if(pMgntInfo->bPrepareRoaming == TRUE) - pMgntInfo->PrepareRoamingCount++; - - DFS_StaMonitor(Adapter); - - LinkQualityReportCallback(Adapter); - - if( ACTING_AS_AP(Adapter) == FALSE && - !MgntScanInProgress(pMgntInfo) && - !MgntIsLinkInProgress(pMgntInfo) && - !pMgntInfo->SnifferTurnOnFlag ) - {// Link Status Observation. -#if ALLOW_INDICATE_FW_STALL - DrvIFIndicateFWStalled(Adapter); -#endif - - if( (MgntLinkStatusQuery(Adapter)==RT_MEDIA_CONNECT) - || MgntRoamingInProgress(pMgntInfo)) - { - // TODO: Add data packets observation. - u4Byte TotalRxBcnNum = 0; - u4Byte TotalRxDataNum = 0; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - - CheckInHighTPState(Adapter); - MgntLinkStatusUpdateRxCounts(Adapter, &TotalRxBcnNum, &TotalRxDataNum); - - // Switch RxReorder by Tx/Rx TP when RegRxReorder is 2. Add by Emerson 2015/01/29. - if( pMgntInfo->RegRxReorder == 2 ) - pHTInfo->bCurRxReorderEnable = ( Adapter->TxStats.CurrentTxTP > 20 || Adapter->RxStats.CurrentRxTP > 20 ) ? TRUE : FALSE ; - - // - // Age-out idle STA for Ad hoc mode. - // - if(pMgntInfo->mIbss) - { - IbssAgeFunction(Adapter); - - // - // According to DD Tim's explanation, the 8192C chip should modify the TSF in IBSS mode, because there - // is one issue in the TSF updating part which the TSF machine may update any beacon in air that cause - // the TSF cannot synchronize each other. - // This is very dirty fix for IBSS TSF here, we should move it to HAL or revise the whole fix procedure. - // The current process was added by chiyokolin and discussed with DD Tim. - // Comment added by Bruce, 2011-01-27. - // - if(!pMgntInfo->bIbssStarter) //for joiner only - { - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_TSF_TIMER, (pu1Byte)&u8TSFtmp); - - u8TSF = u8TSFtmp - PlatformModular64(u8TSFtmp, pMgntInfo->dot11BeaconPeriod*sTU) -sTU; //us, nextbeacon - - //RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog before read back TSF 0x%"i64fmt"x \n", u8TSFtmp)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x418 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x418))); - //RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog before pMgntInfo->NextBCN 0x%"i64fmt"x\n", pMgntInfo->NextBeacon)); - - if(pMgntInfo->NextBeacon > u8TSFtmp || ((u8TSFtmp - pMgntInfo->NowTSF) > (beacondelay * pMgntInfo->dot11BeaconPeriod * sTU))) - { - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TSF_TIMER, (pu1Byte)&u8TSF); - //RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog UPDATE TSF to 0x%"i64fmt"x !!!!!!\n", u8TSF)); - } - - pMgntInfo->NextBeacon = u8TSF; - pMgntInfo->NowTSF = u8TSFtmp; - - } - - } - -#if RX_AGGREGATION - // 2011/02/22 MH According to AP team's NAS test, we may meet a problem in WIN XP, - // when Fizela copy file throughput network disk, it may occupy ndis packet for a period - // of time. At the same time, driver RFD list will be empty. But if USB aggregation is enabled - // The rx bcn & data num will be zero and report incorrect disconnect information. - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - if( (TotalRxBcnNum+TotalRxDataNum) == 0 && !RTIsListEmpty(&Adapter->RfdTmpList)) // Disconnected -#else - if( (TotalRxBcnNum+TotalRxDataNum) == 0 ) // Disconnected. -#endif - { -#if RX_AGGREGATION - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); -#endif - pMgntInfo->LinkDetectInfo.LastConnectedCenterFrequency = pMgntInfo->pChannelInfo->CurrentChannelCenterFrequency; - pMgntInfo->LinkDetectInfo.LastConnectedBandwidth = pMgntInfo->dot11CurrentChannelBandWidth; - //1 Total Number of Received Beacon and Data packets is Zero - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): --- Become DISCONNECTED --- TotalRxBcnNum(%d) TotalRxDataNum(%d)\n", TotalRxBcnNum, TotalRxDataNum)); - - if(rfState == eRfOff) - { - // When RF OFF, do not start roaming, and we start indicating disconnected. By Bruce, 2007-10-03. - //For Win7 when HW & SW Radio Off, Donot Indicate Disassociation State by Sherry, 2009-12-25 - //Because driver indicate disconnected once RF is OFF and indicate roaming start, driver should not report disconnection here. Emily - if(pMgntInfo->RfOffReason < RF_CHANGE_BY_HW) - MgntLinkStatusProcWhenRFIsOff(Adapter, RT_MEDIA_CONNECT); - } - // - //To avoid when pMgntInfo->mAssoc is set to false we will jumping to deal with Adhoc mode, - //but we actually are in STA mode - // - else if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE ) - { - LeisurePSLeave(GetDefaultAdapter(Adapter), LPS_DISABLE_FOR_ROAMING); // by tynli. - - if( OS_SUPPORT_WDI(Adapter) ) - { - if(!MgntRoamingInProgress(pMgntInfo) && !pMgntInfo->bDisconnectRequest && pMgntInfo->bPrepareRoaming == FALSE) - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case POOR_LINK\n")); - return ; - } - pMgntInfo->LinkDetectInfo.InfraDisconnectRoamingStartCnt++; //cosa add for debug. - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): Infra. client => start roaming...\n")); - PlatformMoveMemory( pMgntInfo->APaddrbeforeRoaming, pMgntInfo->Bssid, 6); - Dot11d_Reset(Adapter); - // Do this to reset TS data structure. - RemoveAllTS(Adapter); - - // Stop multichannel switch - MultiChannelDisconnectClient(Adapter, FALSE); - - if(GET_TDLS_ENABLED(pMgntInfo)) - TDLS_Stop(Adapter); - - CCX_SetAssocReason(Adapter, CCX_AR_NORMAL_ROAM_POOR_LINK); - - DrvIFIndicateLinkStateChanged(Adapter, TRUE, 5); - DrvIFIndicateRoamingNeeded(Adapter, RT_PREPARE_ROAM_NORMAL_ROAM_POOR_LINK); - } - } - else - { - if(!MgntRoamingInProgress(pMgntInfo) && !pMgntInfo->bDisconnectRequest) - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case POOR_LINK\n")); - return ; - } - pMgntInfo->LinkDetectInfo.InfraDisconnectRoamingStartCnt++; //cosa add for debug. - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): Infra. client => start roaming...\n")); - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_DISCONNECT_POOR_LINK, ROAMINGSTATE_SCANNING); - PlatformMoveMemory( pMgntInfo->APaddrbeforeRoaming, pMgntInfo->Bssid, 6); - Dot11d_Reset(Adapter); - // Do this to reset TS data structure. - RemoveAllTS(Adapter); - - // Stop multichannel switch - MultiChannelDisconnectClient(Adapter, FALSE); - - if(GET_TDLS_ENABLED(pMgntInfo)) - TDLS_Stop(Adapter); - - CCX_SetAssocReason(Adapter, CCX_AR_NORMAL_ROAM_POOR_LINK); - - DrvIFIndicateRoamingStart(Adapter); - MgntLinkRetry(Adapter, TRUE); - } - else - { - pMgntInfo->LinkDetectInfo.InfraDisconnectRoamingFailCnt++; //cosa add for debug. - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): Infra. client RoamingFailCount(%d)\n", Adapter->MgntInfo.RoamingFailCount)); - - if(MgntRoamingInProgress(pMgntInfo)) - { - // Roaming retry - if(MgntRoamRetry(Adapter, FALSE)) // Raom again. - return; - else // Roam failed. - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - return; - } - - MgntRoamComplete(Adapter, MlmeStatus_timeout); - } - } - } - } - } - else - { - pMgntInfo->LinkDetectInfo.AdhocDisconnectCnt++; //cosa add for debug. - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): AdHoc mode => inidcate disconnect and no more roaming\n")); - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("reset in progress becomde disconnected IBSS\n")); - return; - } - - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingComplete(Adapter, RT_STATUS_FAILURE); - else if(pMgntInfo->bMediaConnect) - DrvIFIndicateDisassociation(Adapter, unspec_reason, pMgntInfo->Bssid); - - MgntResetJoinProcess(Adapter); - MgntResetRoamingState(pMgntInfo); - - if( (pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC) || - (pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_AUTO) ) - { - pMgntInfo->bIbssStarter = TRUE; // For we are the last one in this IBSS, 2005.07.11, by rcnjko. - } - - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, FORCE_INDICATE ); - - // Reset all association entry. - AsocEntry_ResetAll(Adapter); - // NOTE! For HCT WPA_AdHoc test, we should not link retry here. 2005.07.11, by rcnjko. - } - } - else - { -#if RX_AGGREGATION - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); -#endif - //1 Total Number of Received Beacon and Data packets is not Zero - - //Suggested by SD1 Isaac, add received beacon number message for FW debug, by hana 2015/08/05 - RT_TRACE(COMP_AP,DBG_LOUD,("[FW debug] Number of recv beacon in 2 sec = %d \n",pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod)); - - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): +++++++ Keep CONNECTED +++++++ TotalRxBcnNum(%d) TotalRxDataNum(%d)\n", TotalRxBcnNum, TotalRxDataNum)); - - BSS_IdleScanWatchDog(Adapter); - - // For infrastructure mode. Periodically update RTS rate to prevent the RTS rate > init data - // rate. 2010.11.24. by tynli. - if(!(FwLPS_IsInPSAndSupportLowPower(Adapter) && RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K))) - { - if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - Adapter->HalFunc.SetHwRegHandler( Adapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)(&Adapter)); - } - - if(GET_TDLS_ENABLED(pMgntInfo)) - { - TDLS_LinkStatusWatchDog(Adapter); - TDLS_UpdatePeerStatus(Adapter); - AsocEntry_AgeFunction(Adapter); - } - } - - pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod = 0; - pMgntInfo->LinkDetectInfo.NumRecvDataInPeriod = 0; - - if( OS_SUPPORT_WDI(Adapter) ) - { - if(pMgntInfo->bPrepareRoaming == TRUE) - { - pMgntInfo->LinkDetectInfo.InfraDisconnectRoamingFailCnt++; //cosa add for debug. - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): Prepare roaming. PrepareRoamingCount(%d), RoamingLimitCount(%d)\n", Adapter->MgntInfo.PrepareRoamingCount, Adapter->MgntInfo.RegRoamingLimitCount)); - - if( (pMgntInfo->PrepareRoamingCount > pMgntInfo->RegRoamingLimitCount) && (pMgntInfo->bPrepareRoaming == TRUE) ) - { - pMgntInfo->bPrepareRoaming = FALSE; - pMgntInfo->PrepareRoamState = RT_PREPARE_ROAM_NONE; - pMgntInfo->PrepareRoamingCount = 0; - - if( pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - if( pMgntInfo->mIbss ) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("MgntLinkStatusWatchdog() => MgntDisconnectIBSS\n") ); - MgntDisconnectIBSS(Adapter); - } - - if( pMgntInfo->mAssoc) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("MgntLinkStatusWatchdog() => MgntDisconnectAP\n") ); - MgntDisconnectAP(Adapter, disas_lv_ss); - } - } - } - } - } - } - else - { - //1 Driver is in Disconnected State - - switch(rfState) - { - case eRfOn: - pMgntInfo->DisconnectedSlotCount++; - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntLinkStatusWatchdog(): ------- Keep DISCONNECTED ------- DisconnectedSlotCount(%d)\n", pMgntInfo->DisconnectedSlotCount)); - RT_TRACE(COMP_MLME, DBG_LOUD, - ("MgntLinkStatusWatchdog(): RF is ON ,mAssoc(%d), mIbss(%d), bMediaConnect(%d), OpMode(%d), Regdot11networktype(%d)\n", - pMgntInfo->mAssoc, pMgntInfo->mIbss, pMgntInfo->bMediaConnect, pMgntInfo->OpMode, pMgntInfo->Regdot11networktype)); - - if( pMgntInfo->mIbss ) - { - // NOTE! For HCT WPA_AdHoc test, we should not link retry here. 2005.07.11, by rcnjko. - if(!Adapter->bInHctTest) - SwitchCheckBSSID(Adapter); - } - break; - - case eRfOff: - default: - MgntLinkStatusProcWhenRFIsOff(Adapter, RT_MEDIA_DISCONNECT); - break; - - } - } - - // Moved by tynli. 2009.02.17 - // - // Determine if our traffic is busy now, 060515, by rcnjko. - // - if(pMgntInfo->bMediaConnect && !MgntInitAdapterInProgress(pMgntInfo)) - { - - if(Adapter->bInHctTest) - { - if( pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > 666 || - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > 666 ) - { - bBusyTraffic = TRUE; - } - } - else - { - u4Byte busyThreshold=BUSY_TRAFFIC_THREADHOLD; - - - - if( pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > busyThreshold || - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > busyThreshold ) - { - bBusyTraffic = TRUE; - - if(pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > pMgntInfo->LinkDetectInfo.NumTxOkInPeriod) - bRxBusyTraffic=TRUE; - else if(pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > pMgntInfo->LinkDetectInfo.NumRxOkInPeriod) - bTxBusyTraffic=TRUE; - } - - // Higher Tx/Rx data. - if( pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > BUSY_TRAFFIC_HIGH_THREADHOLD || - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod > BUSY_TRAFFIC_HIGH_THREADHOLD ) - { - bHigherBusyTraffic = TRUE; - - // Extremely high Rx data. - if(pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > pMgntInfo->LinkDetectInfo.NumTxOkInPeriod) - bHigherBusyRxTraffic = TRUE; - else - bHigherBusyRxTraffic = FALSE; - } - - //if( pMgntInfo->LinkDetectInfo.NumTxOknPeriod > BUSY_TRAFFIC_VERY_HIGH_THREADHOLD) - if (Adapter->TxStats.CurrentTxTP > BUSY_TRAFFIC_VERY_HIGH_TP) - { - bVeryHigherBusyTraffic = TRUE; - bVeryHigherBusyTxTraffic = TRUE; - } - else - { - bVeryHigherBusyTraffic = FALSE; - bVeryHigherBusyTxTraffic = FALSE; - } - - //if( pMgntInfo->LinkDetectInfo.NumRxOkInPeriod > BUSY_TRAFFIC_VERY_HIGH_THREADHOLD ) - if (Adapter->RxStats.CurrentRxTP > BUSY_TRAFFIC_VERY_HIGH_TP) - { - bVeryHigherBusyTraffic = TRUE; - bVeryHigherBusyRxTraffic = TRUE; - } - else - bVeryHigherBusyRxTraffic = FALSE; - } - - RT_TRACE(COMP_SEND, DBG_LOUD, ("MgntLinkStatusWatchdog(): RxUnicastOk(%d) TxOk(%d) RxOk(%d)\n", - pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod, - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod, - pMgntInfo->LinkDetectInfo.NumRxOkInPeriod)); - } - } - else if(ACTING_AS_AP(Adapter)) - { - MgntLinkStatusWatchdogExtAp(Adapter); - AsocEntry_AgeFunction(Adapter); - } - - //This check is only for Win7/XP two port. - //Vista/XP one port don't need it. - //if(IsAPModeExist(Adapter)) // IS_ADAPTER_SENDS_BEACON(Adapter) - if(IsExtAPModeExist(Adapter)) - { - PADAPTER pExtAdapter = GetFirstExtAdapter(Adapter); - PMGNT_INFO pExtMgntInfo = NULL; - - pExtMgntInfo = &(pExtAdapter->MgntInfo); - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_TSF_TIMER, (pu1Byte)&u8TSFtmp); - - u8TSF = u8TSFtmp - PlatformModular64(u8TSFtmp , (pMgntInfo->dot11BeaconPeriod*sTU)) -sTU; //us, nextbeacon - -#if (WPP_SOFTWARE_TRACE == 0) - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back TSF %"i64fmt"d nextbeacon %"i64fmt"d\n", u8TSFtmp, u8TSF)); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before pMgntInfo->NextBCN %"i64fmt"d ; NowTSF %"i64fmt"d\n", pExtMgntInfo->NextBeacon, pExtMgntInfo->NowTSF)); -#endif - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x120 0x%x \n", PlatformEFIORead4Byte(Adapter, REG_HIMR))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x418 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x418))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x510 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x510))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x520 0x%x\n", PlatformEFIORead4Byte(Adapter, REG_TX_PTCL_CTRL))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x540 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x540))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x550 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x550))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x554 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x554))); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog before read back 0x55d 0x%x \n", PlatformEFIORead4Byte(Adapter, 0x55d))); - - if((pExtMgntInfo->NowTSF == 0 && !MultiChannelSwitchNeeded(Adapter)) || pExtMgntInfo->NextBeacon > u8TSFtmp || ((u8TSFtmp - pExtMgntInfo->NowTSF) > (beacondelay * pMgntInfo->dot11BeaconPeriod * sTU))) - { - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TSF_TIMER, (pu1Byte)&u8TSF); -#if (WPP_SOFTWARE_TRACE == 0) - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog UPDATE TSF to %"i64fmt"d !!!!!!!\n", u8TSF)); -#endif - } - - pExtMgntInfo->NextBeacon = u8TSF; - pExtMgntInfo->NowTSF = u8TSFtmp; - - if(Adapter->bInHctTest) - { - u1tmp = PlatformEFIORead1Byte(Adapter, rOFDM0_XAAGCCore1); - RT_TRACE(COMP_BEACON, DBG_LOUD, ("MgntLinkStatusWatchdog 0xc50 0x%x\n", u1tmp)); - if(u1tmp != 0x30) - PlatformEFIOWrite1Byte(Adapter, rOFDM0_XAAGCCore1, 0x30); - } - - //if(ACTING_AS_AP(Adapter)) - //{ - // AsocEntry_AgeFunction(Adapter); - //} - } - - PlatformHandleNLOnScanRequest( (PVOID) Adapter); - - - // In AP mode, GO shall skip scanning when client is sending Null Data for FCS. - // Check if client is switching channel. by hana, 2014.05.15 - - if(Adapter != GetDefaultAdapter(Adapter) && pMgntInfo->bWaitBeforeGoSkipScan != 0) - { - u1Byte RxNullDataNumThreshold = 3 ; - u1Byte WaitTimeThreshold = pMgntInfo->bWaitBeforeGoSkipScan; // Wait 2 * WaitTimeThreshold seconds before GO skip scanning - - if(pMgntInfo->LinkDetectInfo.RxNullDataNum > RxNullDataNumThreshold) - { - pMgntInfo->LinkDetectInfo.ClientAskForFCSNum++; - if(pMgntInfo->LinkDetectInfo.ClientAskForFCSNum >= WaitTimeThreshold) - { - pMgntInfo->LinkDetectInfo.bClientAskForFCS = TRUE ; - RT_TRACE(COMP_MLME, DBG_LOUD,("GO skip scan when client is switching channel : %d [%d]\n", - pMgntInfo->LinkDetectInfo.RxNullDataNum, - pMgntInfo->LinkDetectInfo.ClientAskForFCSNum)); - - pMgntInfo->LinkDetectInfo.ClientAskForFCSNum = 0; - } - } - else - { - pMgntInfo->LinkDetectInfo.bClientAskForFCS = FALSE ; - RT_TRACE(COMP_MLME, DBG_TRACE,("Client is not switching channel : %d [%d]\n", - pMgntInfo->LinkDetectInfo.RxNullDataNum, - pMgntInfo->LinkDetectInfo.ClientAskForFCSNum)); - } - - pMgntInfo->LinkDetectInfo.RxNullDataNum=0; - - } - - // CCX status watchdog. - CCX_OnLinkStatusWatchdog(Adapter); - - P2POnLinkStatusWatchdog(Adapter); - - RxStatisticsWatchdog(Adapter); - - if(ACTING_AS_AP(Adapter)) AP_StatusWatchdog(Adapter); - - // - // Determine if action frame is allowed - // - // If we need to delay action frame, then pMgntInfo->bStartDelayActionFrame should be set - // to TRUE and reset pMgntInfo->CntAfterLink to zero. - if(pMgntInfo->bStartDelayActionFrame && (pMgntInfo->CntAfterLink < RT_ACTION_FRAME_DELAY_CNT)) - { - pMgntInfo->CntAfterLink++; - } - else - { - pMgntInfo->CntAfterLink = RT_ACTION_FRAME_DELAY_CNT+ 1; - pMgntInfo->bStartDelayActionFrame = FALSE; - } - - if(!ACTING_AS_AP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, - ("MgntLinkStatusWatchdog(): RxUnicastOk: %d TxOk: %d => bBusyTraffic: %d bStableHigherBusyTraffic:%d\n", - pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod, pMgntInfo->LinkDetectInfo.NumTxOkInPeriod, bBusyTraffic,pMgntInfo->LinkDetectInfo.bStableHigherBusyTraffic)); - - pMgntInfo->LinkDetectInfo.bBusyTraffic = bBusyTraffic; - if(!pMgntInfo->LinkDetectInfo.bBusyTraffic) - pMgntInfo->LinkDetectInfo.continuousIdleCnt++; - else - pMgntInfo->LinkDetectInfo.continuousIdleCnt = 0; - pMgntInfo->LinkDetectInfo.bTxBusyTraffic = bTxBusyTraffic; - pMgntInfo->LinkDetectInfo.bRxBusyTraffic = bRxBusyTraffic; - pMgntInfo->LinkDetectInfo.bHigherBusyTraffic = bHigherBusyTraffic; - pMgntInfo->LinkDetectInfo.bHigherBusyRxTraffic = bHigherBusyRxTraffic; - pMgntInfo->LinkDetectInfo.bVeryHigherBusyTraffic = bVeryHigherBusyTraffic; - pMgntInfo->LinkDetectInfo.bVeryHigherBusyRxTraffic = bVeryHigherBusyRxTraffic; - pMgntInfo->LinkDetectInfo.bVeryHigherBusyTxTraffic = bVeryHigherBusyTxTraffic; - } - - - MgntLinkIotRelinkCheck(Adapter); -} - -VOID -MgntResetLinkStatusWatchdogState( - PADAPTER Adapter - ) -{ - //1 Reset disconnect state machine - - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - pMgntInfo->LinkDetectInfo.NumRecvBcnInPeriod = 1; -} - -RT_MEDIA_STATUS -MgntLinkStatusQuery( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = NULL; - RT_MEDIA_STATUS mStatus = RT_MEDIA_DISCONNECT; - - if(Adapter == NULL) - return RT_MEDIA_DISCONNECT; - - pMgntInfo = &Adapter->MgntInfo; - - if( (pMgntInfo->mIbss==TRUE) || (pMgntInfo->mAssoc==TRUE) ) - { - if( pMgntInfo->bMediaConnect == TRUE ) - { - mStatus = RT_MEDIA_CONNECT; - } - } - - return mStatus; -} - -VOID -SwBeaconCallback( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if(RT_CANNOT_IO(Adapter)) - return; - - //We need use default bDriverIsGoingToUnload to check driver is unload or not, or it will BSOD when in - //WLK 1.4 test (SoftAP_notification), by Maddest 06052009. - // - if(pDefaultAdapter->bDriverIsGoingToUnload) - return; - - if(pMgntInfo->BeaconState == BEACON_STOP) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("SwBeaconCallback(): BeaconState = BEACON_STOP, stop timer!!!\n")); - return; - } - - if(pDefaultAdapter->MgntInfo.bStartApDueToWakeup) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("SwBeaconCallback(): bStartApDueToWakeup ==TRUE, stop timer!!!\n")); - return; - } - - if(RT_DRIVER_STOP(Adapter)) - { - return; - } - - RT_TRACE(COMP_BEACON, DBG_TRACE, ("SwBeaconCallback(): S/W Beacon\n")); - if(((PRT_WORK_ITEM)(&pMgntInfo->TbttPollingWorkItem))->RefCount!=1) - { - PlatformSetTimer(Adapter, &(pMgntInfo->SwBeaconTimer), 1); // Wait the previous workitem complete. - RT_TRACE(COMP_BEACON, DBG_LOUD, ("SwBeaconCallback(): TbttPollingWorkItem refcount == %d\n", - ((PRT_WORK_ITEM)(&pMgntInfo->TbttPollingWorkItem))->RefCount)); - } - else - { - PlatformScheduleWorkItem( &(pMgntInfo->TbttPollingWorkItem) ); - } -} - - -// -// Generate a random integer number in the interval [MinIndex, MaxIndex). -// Annie, 2005-11-24. -// -int -GetRandomNumber( - IN int MinIndex, - IN int MaxIndex -) -{ - u1Byte Hashed[20]; - int iRdm, interval; - - // Input check - interval = MaxIndex - MinIndex; - if( interval <= 0 ) - { - RT_ASSERT( FALSE, ("GetRandomNumber(): Invalid Index!\n") ); - return MinIndex; - } - - GetRandomBuffer(Hashed); - - iRdm = *( (int *)Hashed ); // usd first 4 bytes only (int: 32 bits.) - if( iRdm < 0 ) iRdm = 0-iRdm; // make positive - iRdm = iRdm % interval; // Now iRdm is in [0, interval) - iRdm += MinIndex; // Now iRdm is in [MinIndex, MaxIndex) - - //RT_TRACE( COMP_DBG, DBG_LOUD, ("GetRandomNumber(): iRdm =%d\n", iRdm) ); - return iRdm; -} - - -// -// Generate a random u2Byte number in the interval [MinIndex, MaxIndex). -// Created by Roger, 2008-05-07. -// -u2Byte -GetRandomU2ByteNumber( - IN u2Byte MinIndex, - IN u2Byte MaxIndex -) -{ - u1Byte Hashed[20]; - u2Byte iRdm, interval; - - // Input check - interval = MaxIndex - MinIndex; - if( interval <= 0 ) - { - RT_ASSERT( FALSE, ("GetRandomU2ByteNumber(): Invalid Index!\n") ); - return MinIndex; - } - - GetRandomBuffer(Hashed); - - iRdm = *( (u2Byte *)Hashed ); // usd first 2 bytes only (short: 16 bits.) - //if( iRdm < 0 ) iRdm = 0-iRdm; // make positive - iRdm = iRdm % interval; // Now iRdm is in [0, interval) - iRdm += MinIndex; // Now iRdm is in [MinIndex, MaxIndex) - - //RT_TRACE( COMP_DBG, DBG_LOUD, ("GetRandomNumber(): iRdm =%d\n", iRdm) ); - return iRdm; -} - -// -// Use system time to generate a random 20-bytes-buffer. -// (SHA1HashSize: 20) -// -// Annie, 2005-11-24. -// -VOID -GetRandomBuffer( - OUT pu1Byte pHashed -) -{ - u1Byte i; - u1Byte Buffer[32]; - pu1Byte pSeed1, pSeed2, pTime; - u1Byte LenSeed1 = 32; - u1Byte LenSeed2 = 16; - u8Byte CurTime = PlatformGetCurrentTime(); - - // 1. Use current time to generate a 32-byte buffer. - pTime = (pu1Byte)&CurTime; - { - // byte 0~7 - CopyMem( Buffer, pTime, 8 ); - - for( i=0; i<8; i++ ) - { - // byte 8~15 - Buffer[8+i] = ~pTime[i]; - - // byte 16~23 - Buffer[16+i] = pTime[7-i]; - - // byte 24~31 - Buffer[24+i] = ~pTime[7-i]; - } - } - - // 2. Assign the seeds. - pSeed1 = Buffer; // Buffer[0]~Buffer[31], 32 bytes. - pSeed2 = Buffer+8; // Buffer[8]~Buffer[23], 16 bytes. - - // 3. Hash Function: hmac_sha1. // [AnnieNote] PasswordHash() takes about 350 ms!It's too long time! - hmac_sha1( pSeed1, LenSeed1, pSeed2, LenSeed2, pHashed ); - - //RT_PRINT_DATA( COMP_AP, DBG_LOUD, "GetRandomBuffer(): Hashed Buffer", pHashed, 20 ); -} - -VOID -MgntAddRejectedAsocAP( - IN PADAPTER Adapter, - IN pu1Byte AddrOfAP - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte i; - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "MgntAddRejectedAsocAP()", AddrOfAP); - - if ( MgntIsInRejectedAPList(Adapter, AddrOfAP) ) - { - return; - } - - if (pMgntInfo->NumRejectedAsocAP == MAX_REJECTED_ACCESS_AP) - { - for (i=1; iRejectedAsocAP[i-1], - pMgntInfo->RejectedAsocAP[i], - 6); - } - PlatformMoveMemory( - pMgntInfo->RejectedAsocAP[MAX_REJECTED_ACCESS_AP-1], - AddrOfAP, - 6); - } - else - { - PlatformMoveMemory( - pMgntInfo->RejectedAsocAP[pMgntInfo->NumRejectedAsocAP], - AddrOfAP, - 6); - pMgntInfo->NumRejectedAsocAP++; - } -} - -VOID -MgntClearRejectedAsocAP( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntClearRejectedAsocAP()...........\n")); - PlatformZeroMemory(pMgntInfo->RejectedAsocAP, 6*MAX_REJECTED_ACCESS_AP); - pMgntInfo->NumRejectedAsocAP = 0; -} - -u4Byte -MgntGetRejectedAPIndex( - IN PADAPTER Adapter, - IN pu1Byte AddrOfAP - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte i; - - for (i=0; iNumRejectedAsocAP; i++) - { - if ( eqNByte(pMgntInfo->RejectedAsocAP[i], AddrOfAP, 6) ) - { - return i; - } - } - - return MAX_REJECTED_ACCESS_AP; -} - -PRT_WLAN_BSS -MgntHasOtherAPwithSameSSID( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte i; - - for (i=0; iNumBssDesc4Query; i++) - { - if (CompareSSID( pMgntInfo->bssDesc4Query[i].bdSsIdBuf , pMgntInfo->bssDesc4Query[i].bdSsIdLen, - pMgntInfo->Ssid.Octet,pMgntInfo->Ssid.Length) == TRUE ) - { - if ( !MgntIsInRejectedAPList(Adapter, pMgntInfo->bssDesc4Query[i].bdBssIdBuf) ) - { - return &(pMgntInfo->bssDesc4Query[i]); - } - } - } - - return NULL; -} - -BOOLEAN -MgntIsInRejectedAPList( - IN PADAPTER Adapter, - IN pu1Byte AddrOfAP - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte i; - - for (i=0; iNumRejectedAsocAP; i++) - { - if ( eqNByte(pMgntInfo->RejectedAsocAP[i], AddrOfAP, 6) ) - { - return TRUE; - } - } - return FALSE; -} - -BOOLEAN -MgntTryToRoam( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte i; - BOOLEAN bNetworkToRoam = FALSE; - PRT_WLAN_BSS pRtBss = NULL; - - for (i=0; iNumBssDesc4Query; i++) - { - pRtBss = &(pMgntInfo->bssDesc4Query[i]); - if ( (pRtBss->bdSsIdLen == pMgntInfo->Ssid.Length) && - (PlatformCompareMemory( - pRtBss->bdSsIdBuf, - pMgntInfo->Ssid.Octet, - pMgntInfo->Ssid.Length) == 0) ) - { - if ( ((pRtBss->bdCap & cESS) && (pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE)) ) - { - if ( !MgntIsInRejectedAPList(Adapter, pMgntInfo->Bssid) ) - { - bNetworkToRoam = TRUE; - break; - } - } - } - } - - if (bNetworkToRoam && pRtBss != NULL) - { - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_NORMAL, ROAMINGSTATE_SCANNING); - PlatformMoveMemory( pMgntInfo->APaddrbeforeRoaming, pMgntInfo->Bssid, 6); - - JoinRequest(Adapter, (RT_JOIN_ACTION)pMgntInfo->OpMode, pRtBss); - } - - return bNetworkToRoam; -} - -// -// Description: -// Set up default configuration and allocate resource for Turbo Channel Access. -// -VOID -InitTurboChannelAccess( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TURBO_CA pTurboCa = &(pMgntInfo->TurboChannelAccess); - - pTurboCa->bEnabled = FALSE; - pTurboCa->CheckCnt = 1; - pTurboCa->CheckInterval = TCA_DEF_CHECK_INTERVAL; - - PlatformInitializeTimer( Adapter, &pMgntInfo->TurboChannelAccess.TcaCheckTimer, (RT_TIMER_CALL_BACK)TcaCheckTimerCallback, NULL, "TcaCheckTimer"); - -#if 0 // Disable TCA funcion in default, added by Roger, 2013.08.15 - if(!(RT_DRIVER_HALT(Adapter)) && !Adapter->bInHctTest) - { - PlatformSetTimer( Adapter, &(pTurboCa->TcaCheckTimer), TCA_CHECK_PERIOD ); - } -#endif - -} - - -// -// Description: -// DeInitialization for TCA. -// -VOID -DeInitTurboChannelAccess( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - PlatformCancelTimer(Adapter, &pMgntInfo->TurboChannelAccess.TcaCheckTimer ); - - PlatformReleaseTimer(Adapter, &pMgntInfo->TurboChannelAccess.TcaCheckTimer ); -} - - - -// -// Description: -// Periodical timer for Turbo Channel Access checking. -// 2006.08.15, by rcnjko. -// -VOID -TcaCheckTimerCallback( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_TURBO_CA pTurboCa = &(pMgntInfo->TurboChannelAccess); - -#if RTL8192SU_ASIC_VERIFICATION - return; -#endif - - //if(Adapter->bDriverStopped) - return; - - do{ - u4Byte TxThroughput; // Tx throughput in KBps. - u4Byte RxThroughput; // Rx throughput in KBps. - u4Byte TotalThroughput; // Total throughput in last interval in KBps. - u4Byte HighestOperaRateInMbps = (pMgntInfo->HighestOperaRate >= 2 ? (pMgntInfo->HighestOperaRate/2) : 1); // In Mbps - - // Figure out throughput in last interval. - TxThroughput = ( (u4Byte)(Adapter->TxStats.NumTxOkBytesTotal - pTurboCa->LastTxStats.NumTxOkBytesTotal) ) / TCA_CHECK_PERIOD; - RxThroughput = ( (u4Byte)(Adapter->RxStats.NumRxOkBytesTotal - pTurboCa->LastRxStats.NumRxOkBytesTotal) ) / TCA_CHECK_PERIOD; - TotalThroughput = TxThroughput + RxThroughput; - pTurboCa->TotalThroughput = TotalThroughput/1024; - - // Keep information about throughput of last interval. - pTurboCa->TxThroughput = TxThroughput; - pTurboCa->RxThroughput = RxThroughput; - PlatformMoveMemory(&(pTurboCa->LastTxStats), &(Adapter->TxStats), sizeof(RT_TX_STATISTICS)); - PlatformMoveMemory(&(pTurboCa->LastRxStats), &(Adapter->RxStats), sizeof(RT_RX_STATISTICS)); - - //2 Enter TCA if we are infrastructure mode STA and !bAutoTurboBy8186, FALSE otherwise. - if(!pMgntInfo->bSupportTurboMode) - { - break; - } - - if(pMgntInfo->bAutoTurboBy8186) - { - break; - } - - if(pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE) - { - break; - } - - if(!pMgntInfo->mAssoc || ACTING_AS_AP(Adapter)) - { - break; - } - - // If total throughput is smaller than 1/8 of highest operation rate, turn off TCA. - // For example, in G mode, if total throughput < 6.75 Mbps, we turn off TCA. - - if( ((TotalThroughput*8)/1000) < (HighestOperaRateInMbps/8) ) - { - if(pTurboCa->bEnabled) - { - RT_TRACE(COMP_MLME, DBG_LOUD, - ("----- Turn off TCA for TotalThroughput: %d KBps is not large enough, HighestOperaRate(%d).\n", - TotalThroughput, pMgntInfo->HighestOperaRate)); - MgntActSet_EnterTurboMode( Adapter, FALSE); - } - - pTurboCa->CheckCnt = 1; - pTurboCa->CheckInterval = TCA_DEF_CHECK_INTERVAL; - PlatformMoveMemory(&(pTurboCa->LastNormalTxStats), &(Adapter->TxStats), sizeof(RT_TX_STATISTICS)); - PlatformMoveMemory(&(pTurboCa->LastNormalRxStats), &(Adapter->RxStats), sizeof(RT_RX_STATISTICS)); - - break; - } - - // Change state of TCA in the boundary of (CheckInterval * TCA_CHECK_PERIOD) ms, or - // wait the comming of the boundary. - if(pTurboCa->CheckCnt % pTurboCa->CheckInterval == 0) - { - if(!pTurboCa->bEnabled) - { // TCA is OFF. - u4Byte NormalTxThroughput; // Tx throughput in KBps. - u4Byte NormalRxThroughput; // Rx throughput in KBps. - - // Figure out Total throughput in Non-TCA mode. - RT_ASSERT(pTurboCa->CheckInterval > 0, ("TcaCheckTimerCallback(): CheckInterval(%d) should > 0\n", pTurboCa->CheckInterval)); - NormalTxThroughput = ((u4Byte)(Adapter->TxStats.NumTxOkBytesTotal - pTurboCa->LastNormalTxStats.NumTxOkBytesTotal) ) / (TCA_CHECK_PERIOD * pTurboCa->CheckInterval); - NormalRxThroughput = ((u4Byte)(Adapter->RxStats.NumRxOkBytesTotal - pTurboCa->LastNormalRxStats.NumRxOkBytesTotal) ) / (TCA_CHECK_PERIOD * pTurboCa->CheckInterval); - pTurboCa->NormalTotalThroughput = NormalTxThroughput + NormalRxThroughput; - - // Turn on TCA. - RT_TRACE(COMP_MLME, DBG_LOUD, - ("+++++ Turn on TCA, CheckCnt(%d), CheckInterval(%d), NormalTotalThroughput: %d KBps.\n", - pTurboCa->CheckCnt, pTurboCa->CheckInterval, pTurboCa->NormalTotalThroughput)); - - // Modified by Roger, 2006.12.07. - MgntActSet_EnterTurboMode( Adapter, TRUE); - - // Reset CheckInterval to default setting for TCA on. - pTurboCa->CheckInterval = TCA_DEF_CHECK_INTERVAL; - } - else - { // TCA is ON. - s4Byte DeltaTotalThroughput; // Delta of Total throughput in KBps. - - //2 Figure out Delta of Total throughput. - DeltaTotalThroughput = (s4Byte)TotalThroughput - (s4Byte)(pTurboCa->NormalTotalThroughput); - - if(DeltaTotalThroughput < 0) //&& - //(u4Byte)(-1 * (DeltaTotalThroughput*200 / 125)) > HighestOperaRateInMbps ) - { - // Figure out CheckInterval such that loss of throughput <= 0.005* Highest Rate. - // => CheckInterVal = ceiling(Loss in Mbps / (0.005 * Highest Op Rate in Mbps)) - 1 - u4Byte LossInMbps = (u4Byte)(-1 * (DeltaTotalThroughput / 125)); // in Mbps: (-1 * DeltaTotalThroughput * 8) / 1000 - u4Byte PenalityFactor = 200; // 1 / 0.005. - - if( (LossInMbps * PenalityFactor) > HighestOperaRateInMbps ) - { - pTurboCa->CheckInterval = (((LossInMbps * PenalityFactor) + HighestOperaRateInMbps) / HighestOperaRateInMbps) - 1; - RT_TRACE(COMP_MLME, DBG_LOUD, ("DeltaTotalThroughput(%d) < 0 => 1. Update CheckInterval(%d)\n", DeltaTotalThroughput, pTurboCa->CheckInterval)); - } - else - { - pTurboCa->CheckInterval = 1; - RT_TRACE(COMP_MLME, DBG_LOUD, ("DeltaTotalThroughput(%d) < 0 => 2. Update CheckInterval(%d)\n", DeltaTotalThroughput, pTurboCa->CheckInterval)); - } - RT_ASSERT(pTurboCa->CheckInterval >= 1, ("TcaCheckTimerCallback(): pTurboCa->CheckInterval(%d) < !\n", pTurboCa->CheckInterval)); - - pTurboCa->CheckInterval += TCA_NG_EXTRA_CHECK_INTERVAL; - // Turn off TCA. - RT_TRACE(COMP_MLME, DBG_LOUD, - ("----- Turn off TCA for DeltaTotalThroughput(%d) < 0, NormalTotalThroughput(%d)\n", - DeltaTotalThroughput, pTurboCa->NormalTotalThroughput)); - - // Modified by Roger, 2006.12.07. - MgntActSet_EnterTurboMode( Adapter, FALSE); - - PlatformMoveMemory(&(pTurboCa->LastNormalTxStats), &(Adapter->TxStats), sizeof(RT_TX_STATISTICS)); - PlatformMoveMemory(&(pTurboCa->LastNormalRxStats), &(Adapter->RxStats), sizeof(RT_RX_STATISTICS)); - } - else - { - RT_TRACE(COMP_MLME, DBG_TRACE, ("DeltaTotalThroughput: %d > 0 => Keep turn on TCA\n", DeltaTotalThroughput)); - pTurboCa->CheckInterval = TCA_OK_CHECK_INTERVAL; - } - } - - // Reset CheckCnt to 1. - pTurboCa->CheckCnt = 1; - } - else - { - // Increase CheckCnt. - pTurboCa->CheckCnt++; - } - } while(FALSE); - - if(!Adapter->bInHctTest) - PlatformSetTimer( Adapter, &pMgntInfo->TurboChannelAccess.TcaCheckTimer, TCA_CHECK_PERIOD ); - - RT_TRACE( COMP_MLME, DBG_TRACE, ("<=== TcaCheckTimerCallback()\n") ); -} - - -VOID -PnPWakeUpJoinTimerCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)pTimer->Adapter; - - //PnpSetPower(pAdapter); - RT_TRACE(COMP_POWER, DBG_LOUD, ("===>PnPWakeUpJoinTimerCallback\n")); - - /* This can not be successfully compiled on xp. - if(pAdapter->bInHctTest) - { - // Wait for Pending Request - for(i=0;i<10;i++) - { - if(pAdapter->pNdisCommon->PendedRequest == NULL) - break; - PlatformStallExecution(20); - } - } -*/ - - MgntActSet_802_11_SSID(pAdapter, pAdapter->MgntInfo.Ssid.Octet, pAdapter->MgntInfo.Ssid.Length, TRUE ); -// pMgntInfo->bRoamingbySleep = FALSE; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("<===PnPWakeUpJoinTimerCallback\n")); -} - -// -// Description: -// Decide whether the BSSID of AP or peer address is agreed by desired list. -// 2006.11.14, by shien chang. -// Move it from N6C_OidSet.c to here. -// Argument: -// Adapter - -// NIC adapter context pointer. -// MacAddr - -// The mac address to be verified if it is in the desired list. -// Rewritten by Bruce, 2008-05-27. -// -BOOLEAN -IsInDesiredBSSIDList( - IN PADAPTER Adapter, - IN pu1Byte MacAddr - ) -{ - return PlatformIsInDesiredBSSIDList(Adapter, MacAddr); -} - -BOOLEAN -GetDesiredSSIDList( - IN PADAPTER Adapter - ) -{ - return PlatformGetDesiredSSIDList(Adapter); -} - - -VOID -WaitingKeyTimerCallback( - PRT_TIMER pTimer -) -{ - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - - MgntIndicateMediaStatus( Adapter, RT_MEDIA_DISCONNECT, FORCE_INDICATE); - //delay_ms(1000); - //MgntIndicateMediaStatus( Adapter, RT_MEDIA_CONNECT, FORCE_INDICATE ); - return; - -} - -// -// Description: -// Stop sending Beacon in AP mode or IBSS and stop the SW Beacon timer. Replace "AP_StopSendBeacon()" by this function. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// Return: -// None -// By Bruce, 2011-01-18. -// -VOID -MgntStopBeacon( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u1Byte SwBeaconType = BEACON_SEND_AUTO_HW; - - FunctionIn(COMP_MLME); - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_HW_BEACON_SUPPORT, (pu1Byte)&SwBeaconType); - - // Mark the Beacon state first to prevent the timer still going. - pMgntInfo->BeaconState = BEACON_STOP; - - PlatformCancelTimer(pAdapter, &pMgntInfo->SwBeaconTimer); - - // We need to stop HW beacon related configuration. - if(SwBeaconType <= BEACON_SEND_AUTO_SW) - { - BOOLEAN bStopSendBeacon = TRUE; - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_STOP_SEND_BEACON, (pu1Byte)&bStopSendBeacon); - } -} - -VOID -MgntResumeBeacon( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u1Byte SwBeaconType = BEACON_SEND_AUTO_HW; - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_HW_BEACON_SUPPORT, (pu1Byte)&SwBeaconType); - - // Mark the Beacon state first to prevent the timer still going. - pMgntInfo->BeaconState = BEACON_STARTED; - - if(SwBeaconType >= BEACON_SEND_AUTO_SW) // Using SW Beacon Timer - PlatformSetTimer( pAdapter, &pMgntInfo->SwBeaconTimer, 0); - - // We need to stop HW beacon related configuration. - if(SwBeaconType <= BEACON_SEND_AUTO_SW) - { - BOOLEAN bStopSendBeacon = FALSE; - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_STOP_SEND_BEACON, (pu1Byte)&bStopSendBeacon); - } -} - -BOOLEAN -MgntScanInProgress( - PMGNT_INFO pMgntInfo -) -{ - - PADAPTER pAdapter = (PADAPTER)CONTAINING_RECORD(pMgntInfo, ADAPTER, MgntInfo); - pAdapter = GetDefaultAdapter(pAdapter); - - while(pAdapter !=NULL) - { - if(pAdapter->MgntInfo.bScanInProgress) - return TRUE; - pAdapter = GetNextExtAdapter(pAdapter); - } - return FALSE; - -} - -BOOLEAN -MgntIsLinkInProgress( - PMGNT_INFO pMgntInfo -) -{ - PADAPTER pAdapter = (PADAPTER)CONTAINING_RECORD(pMgntInfo, ADAPTER, MgntInfo); - BOOLEAN bResult = FALSE; - - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - bResult = (pMgntInfo->bScanInProgress && !pMgntInfo->bScanOnly) || - ((pMgntInfo->JoinTimer.Status&RT_TIMER_STATUS_SET) && !(pMgntInfo->JoinTimer.Status&RT_TIMER_STATUS_CANCEL_NG)) || - ((pMgntInfo->JoinConfirmTimer.Status&RT_TIMER_STATUS_SET) && !(pMgntInfo->JoinConfirmTimer.Status&RT_TIMER_STATUS_CANCEL_NG)) || - ((pMgntInfo->JoinProbeReqTimer.Status&RT_TIMER_STATUS_SET) && !(pMgntInfo->JoinProbeReqTimer.Status&RT_TIMER_STATUS_CANCEL_NG)) || - ((pMgntInfo->AuthTimer.Status&RT_TIMER_STATUS_SET) && !(pMgntInfo->AuthTimer.Status&RT_TIMER_STATUS_CANCEL_NG)) || - ((pMgntInfo->AsocTimer.Status&RT_TIMER_STATUS_SET) && !(pMgntInfo->AsocTimer.Status&RT_TIMER_STATUS_CANCEL_NG)) || - (pMgntInfo->bJoinInProgress); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - - RT_TRACE(COMP_MLME, DBG_TRACE, ("MgntIsLinkInProgress %d\n", bResult)); - - return bResult; -} - -BOOLEAN -MgntIsTimeOutForIndication( - PMGNT_INFO pMgntInfo -) -{ - BOOLEAN bResult = FALSE; - - PADAPTER pAdapter = (PADAPTER)CONTAINING_RECORD(pMgntInfo, ADAPTER, MgntInfo); - u8Byte nowTime = 0, deltatime = 0; - - nowTime = PlatformGetCurrentTime(); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("RoamingType 0x%x\n", pMgntInfo->RoamingType)); - - if(MgntRoamingInProgress(pMgntInfo)) - deltatime = (ULONG)( (nowTime - pAdapter->LastRoamingStartIndicationTime) / 100000 ); // in 0.1 second. - else - deltatime = (ULONG)( (nowTime - pAdapter->LastConnectStartIndicationTime) / 100000 ); // in 0.1 second. - - if(deltatime > RT_CONNECT_ROAM_INDICATE_TIME_LIMIT) - { - if(MgntRoamingInProgress(pMgntInfo)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("LastRoamingStartIndicationTime %d\n", (u4Byte)pAdapter->LastRoamingStartIndicationTime)); - } - else - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("LastConnectStartIndicationTime %d\n", (u4Byte)pAdapter->LastConnectStartIndicationTime)); - } - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Time Out deltatime %d\n", (u4Byte)deltatime)); - bResult = TRUE; - } - - return bResult; -} - - -BOOLEAN -IsSendingBeacon( - PADAPTER Adapter - ) -{ - if(IsAPModeExist(Adapter) || GetDefaultAdapter(Adapter)->MgntInfo.mIbss) - return TRUE; - return FALSE; -} - -/*********************************************************************** -Function: Mgnt_SwChnl() - Merge all switch channel operation in 1 function -Parameter: - Channel: the channel number to switch - SwitchChannelMethod: 1: calling SwChnlByTimerHandler - 2: calling SwChnlByDelayHandler -************************************************************************/ - -VOID -Mgnt_SwChnl( - IN PADAPTER Adapter, - IN u1Byte Channel, - IN u1Byte SwitchChannelMethod -) -{ - - RT_TRACE(COMP_SCAN, DBG_LOUD,("============>Mgnt_SwChnl channel %d\n ",Channel)); - - if(!IS_HARDWARE_TYPE_OLDER_THAN_8812A(Adapter)) - { - if(SwitchChannelMethod == 1) - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("Mgnt_Swchnl: calling SwChnlAndSetBWHandler case \n")); - Adapter->HalFunc.SwChnlAndSetBWHandler( - Adapter, - TRUE, - FALSE, - Channel, - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_DEF, - EXTCHNL_OFFSET_NO_DEF, - Channel - ); - } - else if(SwitchChannelMethod == 2) - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("Mgnt_Swchnl: calling SwChnlByDelayHandler case \n")); - Adapter->HalFunc.SwChnlByDelayHandler(Adapter,Channel); - } - else - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("Mgnt_Swchnl: error case \n")); - } - } - else - { - if(SwitchChannelMethod == 1) - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("Mgnt_Swchnl: calling SwChnlByTimerHandler case \n")); - Adapter->HalFunc.SwChnlByTimerHandler(Adapter,Channel); - } - else if(SwitchChannelMethod == 2) - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("Mgnt_Swchnl: calling SwChnlByDelayHandler case \n")); - Adapter->HalFunc.SwChnlByDelayHandler(Adapter,Channel); - } - else - { - RT_TRACE(COMP_SCAN, DBG_LOUD,("Mgnt_Swchnl: error case \n")); - } - } -} - -VOID -Mgnt_BackupVarBeforeScan( - IN PADAPTER Adapter, - IN u1Byte wirelessMode, - IN u1Byte chnl, - IN CHANNEL_WIDTH bw, - IN EXTCHNL_OFFSET chExt - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - pMgntInfo->SettingBeforeScan.WirelessMode = (WIRELESS_MODE)wirelessMode; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("pMgntInfo->SettingBeforeScan.WirelessMode 0x%x\n", pMgntInfo->SettingBeforeScan.WirelessMode)); - - pMgntInfo->SettingBeforeScan.ChannelNumber = chnl; - pMgntInfo->SettingBeforeScan.ChannelBandwidth = bw; - pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz = chExt; -} - -// -// Descriptor: Recover FW offload machanisms for AOAC mode. Because we will alternate -// WoWLAN and normal FW when entering and leaving WoWLAN mode -// such that some machanisms be stoped by redownloading FW. -// During connection state, we should restart: -// (1) Rate adaptive -// (2) Download reserved page -// -// 2015.06.25. Added by tynli. -// -VOID -MgntRecoverFWOffloadMechanism( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN bUseRAMask = FALSE; - u1Byte mstatus = RT_MEDIA_CONNECT; - - - // HalMacId: Set a specific MacId for this client ----- - //pMgntInfo->mMacId = (u1Byte)MacIdRegisterMacIdForInfraClient(Adapter); - //pMgntInfo->mcastMacId = (u1Byte)MacIdRegisterMacIdForMCastClient(Adapter); - // ------------------------------------------- - - // - // Rate adaptive - // - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("[DBG] bUseRAMask(%u)\n", bUseRAMask)); - - if(bUseRAMask) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] 1\n")); - // we only need to set rate mask - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, 0); - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mcastMacId, NULL, 0); - - } - // - // 2015/04/16 MH According to ODM input parameters, we need to send default port HAL datastructure's ODM - // Otherwise, ext port will send null HAL pointer and cause BSOD. - // - GetDefaultAdapter(Adapter)->HalFunc.RAPostActionHandler(&(((PHAL_DATA_TYPE)GetDefaultAdapter(Adapter)->HalData)->DM_OutSrc)); - - // Update RTS init rate after we set RA MASK. by tynli. 2010.11.25. - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)&Adapter); - - // - // Reserved page related settings - // - - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS) - { //For FW LPS. by tynli. To tell firmware we have connected to an AP. For 92SE/CE power save v2. - Hal_SetRsvdCtrl(Adapter, RSVDPAGE_TYPE_LPS); - } - - // New Connection is comming, we need to confirm new channel connect and start - // to judge if we need to start multi channel switch. - //MultiChannelAssociateConfirm(Adapter, TRUE); - - // Download rsvd page after all required bitmap is set - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_H2C_FW_JOINBSSRPT, (pu1Byte)(&mstatus)); -} - -// -// Description: -// Clear all entries for Fast Transmition list. -// -VOID -FtResetEntryList( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte i = 0; - - for(i = 0; i < MAX_FT_ENTRY_NUM; i ++) - { - PlatformZeroMemory(&pMgntInfo->FtEntryList[i], sizeof(FT_INFO_ENTRY)); - } - - FunctionOut(COMP_MLME); -} - -// -// Description: -// Return a new FT entry. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [in] pTargetAddr - -// The target address to be the key of the returned entry. -// Return: -// If there is no empty FT entry, return NULL. -// Remark: -// When the returned entry is not NULL, this function has marked bValid flag as TRUE when this entry is returned. -// -PFT_INFO_ENTRY -FtGetNewEntry( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte i = 0; - - for(i = 0; i < MAX_FT_ENTRY_NUM; i ++) - { - if(!TEST_FLAG(pMgntInfo->FtEntryList[i].Flag, FT_INFO_VALID)) - { - PlatformZeroMemory(&pMgntInfo->FtEntryList[i], sizeof(FT_INFO_ENTRY)); - PlatformMoveMemory(pMgntInfo->FtEntryList[i].targetAddr, pTargetAddr, 6); - SET_FLAG(pMgntInfo->FtEntryList[i].Flag, FT_INFO_VALID); - return &pMgntInfo->FtEntryList[i]; - } - } - - return NULL; -} - -// -// Description: -// Return the corresponding FT entry according to the target address. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [in] pTargetAddr - -// The target address to be the key of the returned entry. -// Return: -// If there is no matching entry, return NULL. -// -PFT_INFO_ENTRY -FtGetEntry( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte i = 0; - - for(i = 0; i < MAX_FT_ENTRY_NUM; i ++) - { - if(TEST_FLAG(pMgntInfo->FtEntryList[i].Flag, FT_INFO_VALID) && - eqMacAddr(pMgntInfo->FtEntryList[i].targetAddr, pTargetAddr)) - return &pMgntInfo->FtEntryList[i]; - } - - return NULL; -} - -// -// Description: -// Clear all entries for Fast Transmition list. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [in] action - -// The action in FT_ENTRY_ACTION. -// [in] pTargetAddr - -// The target address of the key of the entry to update the info. -// [in] pInfoBuffer - -// The updated info buffer location. This field can be NULL only if BufLen is 0. -// [in] BufLen - -// The length in byte of pInfoBuffer. -// Return: -// RT_STATUS_SUCCESS if updating is OK. -// RT_STATUS_RESOURCE if there is no enough new entry to update. -// RT_STATUS_INVALID_LENGTH if the input BufLen is not correct. -// -RT_STATUS -FtUpdateEntryInfo( - IN PADAPTER pAdapter, - IN FT_ENTRY_ACTION action, - IN pu1Byte pTargetAddr, - IN PVOID pInfoBuffer, - IN u4Byte BufLen - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PFT_INFO_ENTRY pEntry = NULL; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - if(BufLen > 0 && !pInfoBuffer) - { - RT_TRACE_F(COMP_MLME, DBG_SERIOUS, ("Invalid BufLen (%d) and pInfoBuffer (%p)\n", BufLen, pInfoBuffer)); - return RT_STATUS_INVALID_DATA; - } - - if(NULL == (pEntry = FtGetEntry(pAdapter, pTargetAddr))) - { - pEntry = FtGetNewEntry(pAdapter, pTargetAddr); - } - - if(!pEntry) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("No More entry is available!\n")); - return RT_STATUS_RESOURCE; - } - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("FT action = %d\n", action)); - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "FtUpdateEntryInfo(): Addr = ", pTargetAddr); - if(pInfoBuffer && BufLen) - { - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "Data = \n", pInfoBuffer, BufLen); - } - - switch(action) - { - default: - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("Unknown action = %d\n", action)); - } - break; - - case FT_ENTRY_ACTION_DEL_TARGET: - { - pEntry->Flag = 0; - } - break; - - case FT_ENTRY_ACTION_UPDATE_MDE: - { - if(BufLen > (MAX_MD_IE_LEN + SIZE_EID_AND_LEN)) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("FT_ENTRY_ACTION_UPDATE_MDE: Input BufLen(%d) is too long\n", BufLen)); - rtStatus = RT_STATUS_INVALID_LENGTH; - break; - } - if(pInfoBuffer && BufLen > 0) - { - PlatformMoveMemory(pEntry->MDE, pInfoBuffer, BufLen); - } - pEntry->MDELen = (u2Byte)BufLen; - } - break; - - case FT_ENTRY_ACTION_UPDATE_FTE: - { - if(BufLen > 0 && - (BufLen > (MAX_FT_IE_LEN + SIZE_EID_AND_LEN) || BufLen < (MIN_FT_IE_LEN + SIZE_EID_AND_LEN))) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("FT_ENTRY_ACTION_UPDATE_FTE: Input BufLen(%d) is invalid\n", BufLen)); - rtStatus = RT_STATUS_INVALID_LENGTH; - break; - } - - if(pInfoBuffer && BufLen > 0) - { - PlatformMoveMemory(pEntry->FTE, pInfoBuffer, BufLen); - } - pEntry->FTELen = (u2Byte)BufLen; - } - break; - - case FT_ENTRY_ACTION_UPDATE_PMKR0_NAME: - { - if(BufLen > 0 && PMKID_LEN != BufLen) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("FT_ENTRY_ACTION_UPDATE_PMKR0_NAME: Input BufLen(%d) is invalid\n", BufLen)); - rtStatus = RT_STATUS_INVALID_LENGTH; - break; - } - - if(pInfoBuffer && BufLen > 0) - { - PlatformMoveMemory(pEntry->PMKR0Name, pInfoBuffer, BufLen); - } - pEntry->PMKR0NameLen = (u2Byte)BufLen; - } - break; - - case FT_ENTRY_ACTION_UPDATE_RSNE: - { - if(pInfoBuffer && BufLen > 0) - { - PlatformMoveMemory(pEntry->RSNE, pInfoBuffer, BufLen); - } - pEntry->RSNELen = (u2Byte)BufLen; - } - break; - - case FT_ENTRY_ACTION_UPDATE_ASSOC_INFO_STATUS: - { - if(BufLen < sizeof(u4Byte)) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("FT_ENTRY_ACTION_UPDATE_ASSOC_INFO_STATUS: Invalid BufLen(%d)\n", BufLen)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - pEntry->osAssocInfoStatus = *((pu4Byte)pInfoBuffer); - } - break; - - case FT_WAIT_OS_DECISION: - { - CLEAR_FLAG(pEntry->Flag, FT_INFO_OS_DECISION_MADE); - SET_FLAG(pEntry->Flag, FT_INFO_WAIT_OS_DECISION); - } - break; - - case FT_OS_DECISION_MADE: - { - CLEAR_FLAG(pEntry->Flag, FT_INFO_WAIT_OS_DECISION); - SET_FLAG(pEntry->Flag, FT_INFO_OS_DECISION_MADE); - } - break; - } - - FunctionOut(COMP_MLME); - - return rtStatus; -} - -// -// Description: -// Return if we can choose FT authentication algorithm for this target. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [in] pTargetAddr - -// The target address to be the key. -// Return: -// Return TRUE if the current information is enough to use FT authentication. -// -BOOLEAN -FtIsFtAuthReady( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte i = 0; - - for(i = 0; i < MAX_FT_ENTRY_NUM; i ++) - { - if(TEST_FLAG(pMgntInfo->FtEntryList[i].Flag, FT_INFO_VALID) && - eqMacAddr(pMgntInfo->FtEntryList[i].targetAddr, pTargetAddr)) - { - if(pMgntInfo->FtEntryList[i].MDELen > 0 && - pMgntInfo->FtEntryList[i].FTELen > 0 && - pMgntInfo->FtEntryList[i].PMKR0NameLen > 0) - { - return TRUE; - } - } - } - - return FALSE; -} - -// -// Description: -// Return if we can choose FT association req info set from the supplicant. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [in] pTargetAddr - -// The target address to be the key. -// Return: -// Return TRUE if the current information is enough to use FT association req info. -// -BOOLEAN -FtIsFtAssocReqReady( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte i = 0; - - for(i = 0; i < MAX_FT_ENTRY_NUM; i ++) - { - if(TEST_FLAGS(pMgntInfo->FtEntryList[i].Flag, FT_INFO_VALID | FT_INFO_OS_DECISION_MADE) && - eqMacAddr(pMgntInfo->FtEntryList[i].targetAddr, pTargetAddr)) - { - if(pMgntInfo->FtEntryList[i].MDELen > 0 && - pMgntInfo->FtEntryList[i].FTELen > 0 && - pMgntInfo->FtEntryList[i].PMKR0NameLen > 0 && - pMgntInfo->FtEntryList[i].RSNELen) - { - return TRUE; - } - } - } - - return FALSE; -} - -// -// Description: -// Get the address of the entry which is waiting for the OS decision. -// Arguments: -// [in] pAdapter - -// The NIC adapter context. -// [in] pTargetAddr - -// The target address which is waiting for the OS decision. -// This field is NOT filled if the returned status is not RT_STATUS_SUCCESS. -// Return: -// RT_STATUS_SUCCESS if there is an entry waiting for decision. -// RT_STATUS_INVALID_STATE if there is no entry in waiting decision state. -// -RT_STATUS -FtGetWaitOSDecisionAddr( - IN PADAPTER pAdapter, - OUT pu1Byte pAddr - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte i = 0; - - CHECK_NULL_RETURN_STATUS(pAddr); - - for(i = 0; i < MAX_FT_ENTRY_NUM; i ++) - { - if(TEST_FLAGS(pMgntInfo->FtEntryList[i].Flag, FT_INFO_VALID | FT_INFO_WAIT_OS_DECISION)) - { - cpMacAddr(pAddr, pMgntInfo->FtEntryList[i].targetAddr); - return RT_STATUS_SUCCESS; - } - } - - return RT_STATUS_INVALID_STATE; -} diff --git a/network/wlan/WDI/COMMON/MgntLink.h b/network/wlan/WDI/COMMON/MgntLink.h deleted file mode 100644 index 951693ea..00000000 --- a/network/wlan/WDI/COMMON/MgntLink.h +++ /dev/null @@ -1,873 +0,0 @@ -#ifndef __INC_MGNTLINK_H -#define __INC_MGNTLINK_H - -#define MAX_CHANNEL_PLAN 8 - -// -// Components in decreasing weight to select a BSS: -// - SSID matched: its weight should > sum of components below. -// - BSSID matched: its weight should > sum of components below. -// - From Probe Response: for Vista DTM, its weight should > sum of components below. -// - From Neighbor List: for CCX test plan v4.59 6.2.2.4, its weight should > sum of components below. -// - RSSI: 0-100. -// - channel load: 0-31, for CCX test plan v4.59 6.2.1.1 and 6.2.1.2. -// -#define WEIGHTING_SAME_SSID 0x8000 // This is for hidden AP (Hidden will not be given this weight) -#define WEIGHTING_BEST_RSSI 0x5000 -#define WEIGHTING_SAME_BSSID 0x4000 -#define WEIGHTING_PREFER_BAND 0x2000 -#define WEIGHTING_PROBE_RSP 0x1000 -#define WEIGHTING_NEIGHBOR_LIST 0x0800 -#define WEIGHTING_DEFAULT_QBSS_LOAD 0x000F // half of 32. - - - -#define JOIN_TIMEOUT 1000 //Timeout time to detect beacon after join an BSS/IBSS - -#define AUTH_REQ_TIMEOUT 1000 //Timeout time to detect beacon after join an BSS/IBSS -#define ASSOC_REQ_TIMEOUT 1000 //Timeout time to detect beacon after join an BSS/IBSS -#define ADDTS_TIMEOUT 1000 // Tmeout time to add the ts. - - -#define SWRF_TIMEOUT 50 -#define SWRF_TIMEOUT_ANT_DET 2000 - - -#define SW_BEACON_INTERVAL 1000 // Interval of SW beacons. -#define KEY_MGNT_INTERVAL 1000 // Interval of key management for WPA-PSK. - -#define FAST_RESUME_BEACON_TIME 1000 -#define DELAY_START_BEACON 20000 - -#define RT_AUTH_RETRY_LIMIT 3//5 -#define RT_ASOC_RETRY_LIMIT 3//5 - -#define RT_CONNECT_ROAM_INDICATE_TIME_LIMIT 90 //10sec, in 0.1 sec - -#define RECONNECT_SLOT_COUNT 3 -#define ROAM_RETRY_LIMIT 2 - -// -// 061207, Roger: -// Turbo mode related parameter. -// -#define TCA_CHECK_PERIOD 1000 // in ms. -#define TCA_DEF_CHECK_INTERVAL 2 // in # of TCA_CHECK_PERIOD. -#define TCA_NG_EXTRA_CHECK_INTERVAL 2 // in# of TCA_CHECK_PERIOD, extra penalty when TCA is NG. -#define TCA_OK_CHECK_INTERVAL 1 // in# of TCA_CHECK_PERIOD. - -// Justin, 2011.06.22 -// Define a packets count threadhold for the dection of running High Throughput testing -#define BUSY_TRAFFIC_THREADHOLD 100 // Tx/Rx packets in a certain period -#define BUSY_TRAFFIC_TP 10 // Tx/Rx packets in a certain period - - -//#define BUSY_TRAFFIC_HIGH_THREADHOLD 4000 // Tx/Rx packets in a certain period -#define BUSY_TRAFFIC_HIGH_THREADHOLD 2000 // Tx/Rx packets in a certain period, Justin: make this value smaller, so can adjust the USB aggregation faster -#define BUSY_TRAFFIC_HIGH_TP 80 // Tx/Rx packets in a certain period, Justin: make this value smaller, so can adjust the USB aggregation faster - -// 2014/09/25 MH Add for very high speed -#define BUSY_TRAFFIC_VERY_HIGH_THREADHOLD 10000 -#define BUSY_TRAFFIC_VERY_HIGH_TP 250 - -#define SCAN_DELAY_TIME_MS_LONG 1000 -#define SCAN_DELAY_TIME_MS_SHORT 50 - -#define ASSOC_HANDSHAKE_DHCP_DELAY_SEC 20 - -#if 0 -#define MgntIsLinkInProgress(_pMgntInfo) \ - ( \ - ((_pMgntInfo)->bScanInProgress && !(_pMgntInfo)->bScanOnly) || \ - ((_pMgntInfo)->JoinTimer.Status&RT_TIMER_STATUS_SET) || \ - ((_pMgntInfo)->JoinConfirmTimer.Status&RT_TIMER_STATUS_SET) || \ - ((_pMgntInfo)->JoinProbeReqTimer.Status&RT_TIMER_STATUS_SET) || \ - ((_pMgntInfo)->AuthTimer.Status&RT_TIMER_STATUS_SET) || \ - ((_pMgntInfo)->AsocTimer.Status&RT_TIMER_STATUS_SET) || \ - ((_pMgntInfo)->bJoinInProgress) \ - ) -#endif - -#define MgntLinkStatusUpdateRxBeacon(_Adapter) \ - _Adapter->MgntInfo.LinkDetectInfo.NumRecvBcnInPeriod ++; -#define MgntLinkStatusResetRxBeacon(_Adapter) \ - _Adapter->MgntInfo.LinkDetectInfo.NumRecvBcnInPeriod = 0; - -#define MgntLinkStatusUpdateRxData(_Adapter,_pSaddr) \ - _Adapter->MgntInfo.LinkDetectInfo.NumRecvDataInPeriod ++; - -#define MgntLinkStatusSetRoamingState(_Adapter, _RoamingFailCount, _RoamingType, _RoamingState) \ - _Adapter->MgntInfo.RoamingFailCount = (_RoamingFailCount); \ - _Adapter->MgntInfo.RoamingType = (_RoamingType); \ - _Adapter->MgntInfo.RoamingState = (_RoamingState); - -// -// Determine if the roaming is going now. By Bruce, 2008-05-16. -// -#define MgntRoamingInProgress(_pMgntInfo) \ - (!((_pMgntInfo)->RoamingType == RT_ROAMING_NONE)) - -#define MgntResetOrPnPInProgress(_Adapter) \ - ((_Adapter)->MgntInfo.bDriverIsGoingToSleep) || \ - ((_Adapter)->MgntInfo.bResetInProgress) - -// -// Reset the status of all variables about roaming in MGNT_INFO, by Bruce, 2008-05-16. -// -#define MgntResetRoamingState(_pMgntInfo) \ -{ \ - (_pMgntInfo)->RoamingType = RT_ROAMING_NONE; \ - (_pMgntInfo)->RoamingState = ROAMINGSTATE_IDLE; \ - (_pMgntInfo)->RoamingFailCount = 0; \ -} - -// -// Reset the counters of all variables about join actions in MGNT_INFO, by Bruce, 2008-05-16. -// -#define MgntResetJoinCounter(_pMgntInfo) \ -{ \ - (_pMgntInfo)->JoinRetryCount = 0; \ - (_pMgntInfo)->AuthRetryCount = 0; \ - (_pMgntInfo)->AsocRetryCount = 0; \ -} - -#define MgntInitAdapterInProgress(_pMgntInfo) \ - ((_pMgntInfo)->init_adpt_in_progress) - -#define IN_SEND_BEACON_MODE(_Adapter) \ - (( _Adapter->MgntInfo.OpMode == RT_OP_MODE_AP || \ - _Adapter->MgntInfo.OpMode == RT_OP_MODE_IBSS)?TRUE:FALSE) - -//---------------------------------------------------------------------------- -// Authenticate -//---------------------------------------------------------------------------- -enum _MlmeAuthenticateRequest_State{ - STATE_Auth_Req_Idle = 0, - STATE_Wait_Auth_Seq_2 = 2, - STATE_Wait_Auth_Seq_4 = 4 -}; - - -//---------------------------------------------------------------------------- -// Association -//---------------------------------------------------------------------------- -enum _MlmeAssociateRequest_State{ - STATE_Asoc_Idle, - STATE_Wait_Asoc_Response, - STATE_Wait_Reasoc_Response -}; - -// -// Used for MlmeAssociateConfirm() only. -// -enum MlmeAssocConfirmState -{ - AssocSuccess = 0, // Association Success - AssocUnspecFail, // Association Fail and select another one to join or indicate disconnected - AssocRetry, // Retry association again. -}; - - - -//---------------------------------------------------------------------------- -// Management status. parm of Mlme operation confirm -//---------------------------------------------------------------------------- -enum MlmeStatus { - MlmeStatus_success = 0, - MlmeStatus_invalid = 1, - MlmeStatus_timeout = 2, - MlmeStatus_refused = 3, - MlmeStatus_tomany_req = 4, - MlmeStatus_already_bss = 5 -}; - - -//---------------------------------------------------------------------------- -// 802.11 Management frame Status Code field -//---------------------------------------------------------------------------- -typedef enum _AUTH_STATUS{ - AUTH_STATUS_IDLE, //initialization state - AUTH_STATUS_IN_PROGRESS, //authentication packet exchange in progress - AUTH_STATUS_FAILED, //last authentication failed - AUTH_STATUS_SUCCESSFUL, //last authentication successed - AUTH_STATUS_METHOD_NOT_MATCH,//last authentication authenation did not started because of method does not match(open vs shared) -}AUTH_STATUS; - - -//---------------------------------------------------------------------------- -// 802.11 Management frame Status Code field -//---------------------------------------------------------------------------- -enum StatusCode -{ - StatusCode_success = 0, - StatusCode_Unspecified_failure = 1, - - // For 802.11z - StatusCode_TDLS_alternative_wakeup_schedule = 2, - StatusCode_TDLS_wakeup_schedule_reject = 3, - StatusCode_notallowed_by_BSS = 4, - StatusCode_security_disabled = 5, - StatusCode_unacceptable_lifetime = 6, - StatusCode_notsame_BSS = 7, - - StatusCode_notsupport_cap = 10, - StatusCode_reassoc_denied = 11, - StatusCode_assoc_denied = 12, - StatusCode_notsupport_authalg = 13, - StatusCode_error_seqnum = 14, - StatusCode_challenge_failure = 15, - StatusCode_auth_timeout = 16, - StatusCode_assoc_deniedbyap = 17, - StatusCode_assoc_deniedbyrate = 18, - - // For RTL8185 - StatusCode_assoc_notsupport_shortslottime = 25, - StatusCode_assoc_notsupport_DSSS_OFDM = 26, - - StatusCode_request_declined = 37, - StatusCode_invalid_ie = 40, - StatusCode_invalid_pairwise_cipher = 42, - StatusCode_invalid_AKMP = 43, - StatusCode_invalid_RSN_cap = 45, - StatusCode_invalid_FTIE = 55, // Defined in 802.11r -}; - - - - -//---------------------------------------------------------------------------- -// 802.11 Management frame Reason Code field -//---------------------------------------------------------------------------- -enum _ReasonCode{ - unspec_reason = 0x1, - auth_not_valid = 0x2, - deauth_lv_ss = 0x3, - inactivity = 0x4, - ap_overload = 0x5, - class2_err = 0x6, - class3_err = 0x7, - disas_lv_ss = 0x8, - asoc_not_auth = 0x9, - - //----MIC_CHECK - mic_failure = 0xe, - //----END MIC_CHECK - - // Reason code defined in 802.11i D10.0 p.28. - invalid_IE = 0x0d, - four_way_tmout = 0x0f, - two_way_tmout = 0x10, - IE_dismatch = 0x11, - invalid_Gcipher = 0x12, - invalid_Pcipher = 0x13, - invalid_AKMP = 0x14, - unsup_RSNIEver = 0x15, - invalid_RSNIE = 0x16, - auth_802_1x_fail= 0x17, - ciper_reject = 0x18, - - unreachable_TDLS_peer = 0x19, //25 Defined in 802.11z - teardown_unspec_reacon = 0x1a, //26 Defined in 802.11z - - // Reason code defined in 7.3.1.7, 802.1e D13.0, p.42. Added by Annie, 2005-11-15. - QoS_unspec = 0x20, // 32 - QAP_bandwidth = 0x21, // 33 - poor_condition = 0x22, // 34 - no_facility = 0x23, // 35 - // Where is 36??? - req_declined = 0x25, // 37 - invalid_param = 0x26, // 38 - req_not_honored= 0x27, // 39 - TS_not_created = 0x2F, // 47 - DL_not_allowed = 0x30, // 48 - dest_not_exist = 0x31, // 49 - dest_not_QSTA = 0x32, // 50 - dest_unreachable = 0x33, // 51 for win8 dtm -}; - - - -//---------------------------------------------------------------------------- -// 802.11 Preamble Mode -//---------------------------------------------------------------------------- -enum _REG_PREAMBLE_MODE{ - PREAMBLE_LONG = 1, - PREAMBLE_AUTO = 2, - PREAMBLE_SHORT = 3, -}; - - -extern u4Byte DSSS_Freq_Channel[]; - -extern BOOLEAN bDebugFixBssid; -extern u1Byte debug_fixed_bssid[]; - -BOOLEAN -AssembleFragmentWcnIeFromMmpdu( - IN PADAPTER Adapter, - IN PSIMPLE_CONFIG_T pSimpleConfig, - IN OUT POCTET_STRING posMmpdu -); - -PRT_WLAN_BSS -BssDescDupByDesc( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pRtBSS - ); - -PRT_WLAN_BSS -BssDescDupByBssid( - IN PADAPTER Adapter, - IN pu1Byte pBssid - ); - -PRT_WLAN_RSSI -BssDescDupByBssid4Rssi( - IN PADAPTER Adapter, - IN pu1Byte pBssid - ); - -u1Byte -ToLegalChannel( - PADAPTER Adapter, - u8Byte freq_channel -); - - -BOOLEAN -GetValueFromBeaconOrProbeRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - OUT RT_WLAN_BSS *bssDesc, - IN BOOLEAN bUpdate - ); - -VOID -GetScanInfo( - PADAPTER Adapter, - PRT_RFD pRfd -); - -VOID -FilterSupportRate( - OCTET_STRING RegRate, - POCTET_STRING pSupRate, - BOOLEAN bFilterOutCCKRate - ); - - -VOID -SelectRateSet( - PADAPTER Adapter, - OCTET_STRING SuppRateSet -); - - -WIRELESS_MODE -SetupJoinWirelessMode( - PADAPTER Adapter, - BOOLEAN bSupportNmode, - WIRELESS_MODE bssWirelessMode -); - - - -WIRELESS_MODE -SetupStarWirelessMode( - PADAPTER Adapter, - BOOLEAN bSupportNmode -); - - -BOOLEAN -IncludedInSupportedRates( - IN PADAPTER Adapter, - IN u1Byte TxRate -); - -VOID -ActUpdate_ProtectionMode( - PADAPTER Adapter, - BOOLEAN bUseProtection -); - - -VOID -ActUpdate_mCapInfo( - PADAPTER Adapter, - u2Byte updateCap -); - -VOID -ActUpdate_ERPInfo( - PADAPTER Adapter, - u1Byte ERPInfo -); - -RT_JOIN_ACTION -SelectNetworkBySSID( - IN PADAPTER Adapter, - IN OCTET_STRING *ssid2match, - IN BOOLEAN bRoaming, - OUT PRT_WLAN_BSS pRtBss - ); - -BOOLEAN -MlmeAssociateRequest( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u4Byte asocTmot, - u2Byte asCap, - u2Byte asListenInterval, - BOOLEAN Reassociate -); - -RT_STATUS -MlmeAssociateConfirm( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu, - IN BOOLEAN bReassociate, - IN u2Byte result - ); - -BOOLEAN -MlmeAuthenticateRequest( - PADAPTER Adapter, - pu1Byte auStaAddr, - u1Byte auAlg, - u4Byte auTmot -); - -BOOLEAN -MlmeAuthenticateRequest_Confirm( - PADAPTER Adapter, - u2Byte result - ); - -VOID -JoinConfirm( - PRT_TIMER pTimer -); - -VOID -JoinProbeReq( - PRT_TIMER pTimer -); - - -VOID -MgntRoamComplete( - IN PADAPTER pAdapter, - IN u2Byte Result - ); - -VOID -JoinProbeReq( - PRT_TIMER pTimer -); - -void -MgntDisconnectAP( - PADAPTER Adapter, - u1Byte asRsn -); - - -void -MgntDisconnectIBSS( - PADAPTER Adapter -) ; - - -#define GENERAL_INDICATE 0x00 -#define FORCE_INDICATE 0x01 -#define FORCE_NO_INDICATE 0x02 - - -void -MgntIndicateMediaStatus( - PADAPTER Adapter, - RT_MEDIA_STATUS mstatus, - u1Byte Indicatemode -); - -void -AsocTimeout( - PRT_TIMER pTimer -); - -void -AuthTimeout( - PRT_TIMER pTimer -); - -void -JoinTimeout( - PRT_TIMER pTimer - ); - -VOID -JoinRequest( - PADAPTER Adapter, - RT_JOIN_ACTION JoinAction, - RT_WLAN_BSS *bssDesc -); - -VOID -ScanByTimer( - PADAPTER Adapter, - BOOLEAN bActiveScan, - BOOLEAN bScanOnly - ); - -VOID -ScanComplete( - PADAPTER Adapter - ); - -VOID -ScanCallback( - PRT_TIMER pTimer - ); - -VOID -WatchDogTimerCallback( - IN PRT_TIMER pTimer -); - -VOID -SendDataFrameQueued( - PADAPTER Adapter - ); -// ------------------------------------------- -VOID -MgntResetScanProcess( - PADAPTER pAdapter -); - -VOID -MgntResetLinkProcess( - PADAPTER Adapter -); - -VOID -MgntResetJoinProcess( - PADAPTER Adapter -); - -BOOLEAN -MgntLinkRetry( - PADAPTER Adapter, - BOOLEAN bForceRetry - ); - -BOOLEAN -MgntRoamRetry( - IN PADAPTER Adapter, - IN BOOLEAN bForceRetry - ); - -BOOLEAN -MgntLinkRequest( - PADAPTER Adapter, - BOOLEAN bScanOnly, - BOOLEAN bActiveScan, - BOOLEAN bFilterHiddenAP, - BOOLEAN bUpdateParms, - POCTET_STRING pSsid2scan, - u1Byte NetworkType, - u1Byte ChannelNumber, - u2Byte BcnPeriod, - u1Byte DtimPeriod, - u2Byte mCap, - POCTET_STRING pSuppRateSet, - PIbssParms pIbpm - ); - - VOID -MgntLinkHandleIPS( - PADAPTER Adapter -); - - VOID -MgntLinkHandleLPS( - PADAPTER Adapter -); - -VOID -MgntLinkStatusWatchdogForSystemWide( - PADAPTER Adapter -); - -BOOLEAN -MgntLinkStatusIsWifiBusy( - IN PADAPTER Adapter - ); - -VOID -MgntLinkMultiPortStatusWatchdog( - PADAPTER Adapter -); - -VOID -MgntLinkStatusWatchdogForEachPortSpecific( - PADAPTER Adapter -); - -VOID -MgntResetLinkStatusWatchdogState( - PADAPTER Adapter - ); - -RT_MEDIA_STATUS -MgntLinkStatusQuery( - PADAPTER Adapter - ); - -VOID -SwBeaconCallback( - PRT_TIMER pTimer -); - -VOID -IbssStartRequestCallback( - IN PVOID Context -); - -VOID -IbssAgeFunction( - IN PADAPTER Adapter -); - -u2Byte -GetRandomU2ByteNumber( - IN u2Byte MinIndex, - IN u2Byte MaxIndex -); - -int -GetRandomNumber( - IN int MinIndex, - IN int MaxIndex -); - -VOID -GetRandomBuffer( - OUT pu1Byte pHashed -); - -VOID -MgntAddRejectedAsocAP( - IN PADAPTER Adapter, - IN pu1Byte AddrOfAP -); - -VOID -MgntClearRejectedAsocAP( - IN PADAPTER Adapter -); - -u4Byte -MgntGetRejectedAPIndex( - IN PADAPTER Adapter, - IN pu1Byte AddrOfAP -); - - -VOID -InitTurboChannelAccess( - PADAPTER Adapter -); - -VOID -DeInitTurboChannelAccess( - PADAPTER Adapter -); - - -VOID -TcaCheckTimerCallback( - PRT_TIMER pTimer -); - -// For Parsing Realtek information element (sent from 8186). Added by Roger, 2006.12.07. -VOID -GetRealtekIEContentForTurboMode( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc, - IN POCTET_STRING pRealtekIE -); - -PRT_WLAN_BSS -MgntHasOtherAPwithSameSSID( - IN PADAPTER Adapter -); - -BOOLEAN -MgntIsInRejectedAPList( - IN PADAPTER Adapter, - IN pu1Byte AddrOfAP -); - -BOOLEAN -MgntTryToRoam( - IN PADAPTER Adapter -); -BOOLEAN -MgntDisconnect( - IN PADAPTER Adapter, - IN u1Byte asRsn -); - - -VOID -WaitingKeyTimerCallback( - PRT_TIMER pTimer -); - - -//Keep Alive Mechanism, Isaiah 2008-08-16 -//VOID -//MgntLinkKeepAlive( -// IN PADAPTER pAdapter -//); - -BOOLEAN -IsInDesiredBSSIDList( - IN PADAPTER Adapter, - IN pu1Byte MacAddr - ); - -BOOLEAN -GetDesiredSSIDList( - IN PADAPTER Adapter - ); - -VOID -PnPWakeUpJoinTimerCallback( - IN PRT_TIMER pTimer - ); - -BOOLEAN -CheckBSSSetting( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pRtBss -); - - -VOID -MgntResumeBeacon( - IN PADAPTER pAdapter - ); - -VOID -MgntStopBeacon( - IN PADAPTER pAdapter - ); - -BOOLEAN -MgntScanInProgress( - PMGNT_INFO pMgntInfo -); - -BOOLEAN -MgntIsLinkInProgress( - PMGNT_INFO pMgntInfo -); - -BOOLEAN -MgntIsTimeOutForIndication( - PMGNT_INFO pMgntInfo -); - -u1Byte -AutoSelectChannel( - PADAPTER Adapter, - PRT_WLAN_BSS pBssList, - int nNumBss -); - -BOOLEAN -IsSendingBeacon( - PADAPTER Adapter -); - -VOID -Mgnt_SwChnl( - IN PADAPTER Adapter, - IN u1Byte Channel, - IN u1Byte SwitchChannelMethod -); -VOID -Mgnt_BackupVarBeforeScan( - IN PADAPTER Adapter, - IN u1Byte wirelessMode, - IN u1Byte chnl, - IN CHANNEL_WIDTH bw, - IN EXTCHNL_OFFSET chExt - ); - -VOID -MgntScanTxFeedbackCallback( - IN PADAPTER pAdapter, - IN PVOID pContext - ); - -extern VOID -Hal_PauseTx( - IN PADAPTER Adapter, - u1Byte type - ); - -VOID -MgntRecoverFWOffloadMechanism( - IN PADAPTER Adapter - ); - -VOID -FtResetEntryList( - IN PADAPTER pAdapter - ); - -PFT_INFO_ENTRY -FtGetNewEntry( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ); - -PFT_INFO_ENTRY -FtGetEntry( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ); - -RT_STATUS -FtUpdateEntryInfo( - IN PADAPTER pAdapter, - IN FT_ENTRY_ACTION action, - IN pu1Byte pTargetAddr, - IN PVOID pInfoBuffer, - IN u4Byte BufLen - ); - -BOOLEAN -FtIsFtAuthReady( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ); - -BOOLEAN -FtIsFtAssocReqReady( - IN PADAPTER pAdapter, - IN pu1Byte pTargetAddr - ); - -RT_STATUS -FtGetWaitOSDecisionAddr( - IN PADAPTER pAdapter, - OUT pu1Byte pAddr - ); - -#endif // #ifndef __INC_MGNTLINK_H - diff --git a/network/wlan/WDI/COMMON/MgntSendPacket.c b/network/wlan/WDI/COMMON/MgntSendPacket.c deleted file mode 100644 index 6fc5b560..00000000 --- a/network/wlan/WDI/COMMON/MgntSendPacket.c +++ /dev/null @@ -1,1628 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MgntSendPacket.tmh" -#endif - -// -// Description: -// Send SW Beacon: -// 1. SW auto beacon whose TBTT maintained by HW and beacon update timing maintained by driver (-> TbttPollingWorkItemCallback() ) -// ex. USB & SDIO Beacon (SwBeaconType == BEACON_SEND_AUTO_SW, send to Beacon Queue) -// -// 2. Manual Beacon whose TBTT and beacon update timing maintained by driver (-> TbttPollingWorkItemCallback() ) -// ex. Driver SW Beacon (SwBeaconType == BEACON_SEND_MANUAL, send to AC/Mgnt/High Queue) -// -// Arguments: -// [in] pAdapter - -// The adapter context. -// [in] QueueIndex - -// The target Queue for beacon -// [in] bcnlen - -// Beacon Length -// [in] TxRate - -// Beacon Tx Rate -// Remark: -// Please do not use this function outside of this module -// by Hana, 2015-08-05 -// -static VOID -SendSWBeacon( - IN PADAPTER pAdapter, - IN u1Byte QueueIndex, - IN u4Byte bcnlen, - IN u2Byte TxRate - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - u4Byte phyaddr; - pu1Byte virtualaddr; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - RT_STATUS rtStatus; - - phyaddr = pMgntInfo->BcnSharedMemory.PhysicalAddressLow; - virtualaddr = pMgntInfo->BcnSharedMemory.VirtualAddress; - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - // Set up beacon content. - PlatformMoveMemory(pBuf->Buffer.VirtualAddress, virtualaddr, bcnlen); - - // Set up TCB - pTcb->BufferList[0] = pBuf->Buffer; - pTcb->BufferList[0].Length = bcnlen; - pTcb->BufferCount = 1; - pTcb->PacketLength = pMgntInfo->beaconframe.Length; - pTcb->Tailer.Length = 0; - - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->SpecifiedQueueID = QueueIndex; - pTcb->DataRate = TxRate; - pTcb->bFromUpperLayer = FALSE; - pTcb->Reserved = pBuf; - pTcb->FragCount = 1; - pTcb->TSID = DEFAULT_TSID; - pTcb->FragLength[0] = (u2Byte)pTcb->PacketLength; - pTcb->FragBufCount[0] = pTcb->BufferCount; - - SET_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_PACKET_SHIFT); - pTcb->SourceAdapt = pAdapter; - - // Prevent Tx stuck, 2005.07.14, by rcnjko. - if( PlatformIsTxQueueAvailable(pAdapter, QueueIndex, 1) ) - { - rtStatus = TransmitTCB(pAdapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - { - // Insert it to tail of wait queue. - RT_TRACE(COMP_AP, DBG_LOUD, ("SendBeaconFrame(): !TransmitTCB() => Insert to wait queue of QueueIndex: %d\n", QueueIndex)); - RTInsertTailListWithCnt(Get_WAIT_QUEUE(pAdapter, pTcb->SpecifiedQueueID), &pTcb->List, GET_WAIT_QUEUE_CNT(pAdapter,pTcb->SpecifiedQueueID)); - } - } - else - { - // Insert it to tail of wait queue. - RT_TRACE(COMP_SEND, DBG_TRACE, ("SendBeaconFrame(): Insert to wait queue of QueueIndex: %d\n", QueueIndex)); - RTInsertTailListWithCnt(Get_WAIT_QUEUE(pAdapter, pTcb->SpecifiedQueueID), &pTcb->List, GET_WAIT_QUEUE_CNT(pAdapter,pTcb->SpecifiedQueueID)); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } - else - { - RT_TRACE(COMP_AP, DBG_SERIOUS, ("SendBeaconFrame(): out of pTcb or Local Buffer !!!\n")); - } - - -} - -// -// Description: -// Send HW Beacon whose TBTT maintained by HW and beacon update timing are handled by Beacon Early interrupt. -// ex. PCIE Beacon (SwBeaconType == BEACON_SEND_AUTO_HW, send to Beacon Queue) -// -// Arguments: -// [in] pAdapter - -// The adapter context. -// [in] QueueIndex - -// The target Queue for beacon -// [in] bcnlen - -// Beacon Length -// [in] TxRate - -// Beacon Tx Rate -// Remark: -// Please do not use this function outside of this module -// by Hana, 2015-08-05 -// - -static VOID -SendHWBeacon( - IN PADAPTER pAdapter, - IN u1Byte QueueIndex, - IN u4Byte bcnlen, - IN u2Byte TxRate - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - u4Byte phyaddr; - pu1Byte virtualaddr; - PRT_TCB pTcb; - PRT_GEN_TEMP_BUFFER pGenBufTcb; - - pGenBufTcb = GetGenTempBuffer (pAdapter, sizeof(RT_TCB)); - pTcb = (RT_TCB *)pGenBufTcb->Buffer.Ptr; - - PlatformZeroMemory(pTcb, sizeof(RT_TCB)); - - - phyaddr = pMgntInfo->BcnSharedMemory.PhysicalAddressLow; - virtualaddr = pMgntInfo->BcnSharedMemory.VirtualAddress; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - pTcb->SpecifiedQueueID = QueueIndex; - pTcb->BufferCount = 1; - pTcb->FragCount = 1; - pTcb->DataRate = TxRate; - pTcb->bMulticast = TRUE; - pTcb->bBroadcast = TRUE; - pTcb->bUseShortPreamble = FALSE; - pTcb->bUseShortGI = FALSE; - pTcb->bRTSEnable = FALSE; - pTcb->bCTSEnable = FALSE; - pTcb->bEncrypt = FALSE; - pTcb->TxDescDuration[0] = 0; - - // TODO: For experiment only It sholud be removed!!! 2007.1.10, Emily - pTcb->bTxDisableRateFallBack = TRUE; //it should be 1 by default - pTcb->bTxUseDriverAssingedRate = TRUE; //it should be 1 by default - pTcb->bTxCalculatedSwDur = TRUE; - pTcb->bTxEnableSwCalcDur = TRUE; //it sholud be 0 by default. - - // Rate adaptive - pTcb->RATRIndex = 0; - - // Protection frame settings. No protection for Beacon frame!! - pTcb->bRTSSTBC = 0; - pTcb->RTSRate = 0; - pTcb->RTSSC = 0; - pTcb->RTSCCA = 0; - pTcb->RTSBW = 0; - pTcb->bRTSShort = 0; - - // A-MPDU Aggregation - pTcb->bAMPDUEnable = FALSE; - - pTcb->FragBufCount[0] = 1; - pTcb->FragLength[0] = (u2Byte)bcnlen; - pTcb->BufferList[0].Length = bcnlen; - pTcb->BufferList[0].VirtualAddress = virtualaddr; - pTcb->BufferList[0].PhysicalAddressLow = phyaddr; - - pTcb->SourceAdapt = pAdapter; - - pAdapter->HalFunc.TxFillDescriptorHandler(pAdapter, pTcb, 0, 0, 0, 0); - ReturnGenTempBuffer(pAdapter, pGenBufTcb); - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - -} - - -// -// Description: Send Beacon Frame. -// 2005.06.14, by rcnjko. -// -VOID -SendBeaconFrame( - PADAPTER Adapter, - u1Byte QueueIndex - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u4Byte bcnlen; - u2Byte TxRate; - - -#if DBG_CMD - if (DBG_Var.DBG_Beacon_Stop == 0) - return; -#endif - - if(pMgntInfo->BeaconState == BEACON_STOP) - return; - - pMgntInfo->BeaconState = BEACON_STARTED; - - bcnlen = pMgntInfo->beaconframe.Length; - - bcnlen += Adapter->TXPacketShiftBytes; - - if(bcnlen > pMgntInfo->MaxBeaconSize) - pMgntInfo->MaxBeaconSize = bcnlen; - - if( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) && !pMgntInfo->pHTInfo->bCurSuppCCK)) - { - TxRate = MGN_6M; // 6M - RT_TRACE(COMP_SEND, DBG_TRACE, ("SendBeaconFrame(): Tx rate = 6 mbps!\n")); - } - else - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("SendBeaconFrame(): Tx rate = 1 mbps!\n")); - TxRate = MGN_1M; // 1M - } - - if(pMgntInfo->bDisableCck && IS_CCK_RATE(TxRate)) - { - TxRate = MGN_6M; - } - -#if (P2P_SUPPORT == 1) - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - PP2P_INFO pP2PInfo = (GET_P2P_INFO(Adapter)); - if(pP2PInfo->Role == P2P_GO) - TxRate = P2P_LOWEST_RATE; - } -#endif - - { - RT_TRACE(COMP_AP,DBG_TRACE,("SendBeaconFrame(): send SW auto/Manual beacon(send to beacon/Mgnt queue)\n")); - SendSWBeacon(Adapter, QueueIndex, bcnlen, TxRate); - } - - -} - -VOID -SendProbeReq( - PADAPTER Adapter, - BOOLEAN bAnySsid, - u2Byte DataRate, - BOOLEAN bForcePowerSave - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - -#if DBG_CMD - if (DBG_Var.DBG_ProbeReq_Send == 0) - return; -#endif - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructProbeRequest( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - TRUE, - bAnySsid, - bForcePowerSave); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("SendProbeReq(): Tx rate = %d\n", DataRate)); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -// -// Description: -// Advanced version of SendProbeReq. Calling this function will send dedicate -// probe request with SSID in pMgntInfo->SsidsToScan one by one, and send -// an probe request with broadcast SSID at the last. -// 2006.12.20, by shien chang. -// -VOID -SendProbeReqEx( - PADAPTER Adapter, - u2Byte DataRate, - BOOLEAN bForcePowerSave - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte index; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SSIDS_TO_SCAN pSsidsToScan = &(pMgntInfo->SsidsToScan); - -#if DBG_CMD - if (DBG_Var.DBG_ProbeReq_Send == 0) - return; -#endif - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // Send probe request with SSID in pMgntInfo.SsidsToScan. - for (index=0; indexNumSsid; index++) - { - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructProbeRequestEx( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pSsidsToScan->Ssid[index], - bForcePowerSave); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("SendProbeReqEx(): Tx rate = %d\n", DataRate)); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -VOID -SendAuthenticatePacket( - PADAPTER Adapter, - pu1Byte auStaAddr, - u1Byte AuthAlg, - u1Byte AuthSeq, - u1Byte AuthStatusCode, - OCTET_STRING AuthChallengetext - ) -{ - // AuthSeq can be 1~4 - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SendAuthenticatePacket()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructAuthenticatePacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - auStaAddr, - AuthAlg, - AuthSeq, - AuthStatusCode, - AuthChallengetext - ); - - if(1 == AuthSeq) - { - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pMgntInfo->Bssid, 6); - MgntUpdateAsocInfo(Adapter, UpdateAuthSeq1, pBuf->Buffer.VirtualAddress, pTcb->PacketLength); - } - - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate( Adapter, auStaAddr ); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== SendAuthenticatePacket()\n")); -} - - - - -VOID -SendAssociateReq( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocListenInterval - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - BOOLEAN FlagReAsoc = FALSE; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SendAssociateReq()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructAssociateReq( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - asocStaAddr, - asocCap, - asocListenInterval, - pMgntInfo->Ssid, - pMgntInfo->SupportedRates // 2005.11.25, by rcnjko. - ); - - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pMgntInfo->Bssid, 6); - MgntUpdateAsocInfo(Adapter, UpdateAsocReq, pBuf->Buffer.VirtualAddress, pTcb->PacketLength); - MgntUpdateAsocInfo(Adapter, UpdateFlagReAsocReq, (UCHAR*)&FlagReAsoc, sizeof(BOOLEAN)); - - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate( Adapter, asocStaAddr ); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== SendAssociateReq()\n")); -} - - - -VOID -SendReassociateReq( - PADAPTER Adapter, - pu1Byte ReasocStaAddr, - u2Byte ReasocCap, - u2Byte asocListenInterval, - pu1Byte CurrentasocStaAddr - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - BOOLEAN FlagReAsoc = TRUE; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SendReassociateReq()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructReAssociateReq( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - ReasocStaAddr, - ReasocCap, - asocListenInterval, - CurrentasocStaAddr, - Adapter->MgntInfo.Ssid, - Adapter->MgntInfo.SupportedRates // 2005.11.25, by rcnjko. - //Adapter->MgntInfo.Regdot11OperationalRateSet - ); - - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, pMgntInfo->Bssid, 6); - MgntUpdateAsocInfo(Adapter, UpdateAsocReq, pBuf->Buffer.VirtualAddress, pTcb->PacketLength); - MgntUpdateAsocInfo(Adapter, UpdateFlagReAsocReq, (UCHAR*)&FlagReAsoc, sizeof(BOOLEAN)); - - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate( Adapter, ReasocStaAddr ); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== SendReassociateReq()\n")); -} - - -VOID -SendAssociateRsp( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocStatusCode, - u2Byte asocID, - BOOLEAN bReAssocRsp, - BOOLEAN bQosSTA - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SendAssociateRsp()\n")); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructAssociateRsp( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - asocStaAddr, - asocCap, - asocStatusCode, - asocID, - bReAssocRsp, - bQosSTA - ); - - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate( Adapter, asocStaAddr ); - - AsocEntry_UpdateAsocInfo(Adapter, - asocStaAddr, - NULL, - pTcb->PacketLength, - ALLOCATE_ASOC_RSP); - - //vivi add this for vitrual ap.as pcie add 8 byte before mac header as early mode, 20101130 - if(pTcb->bInsert8BytesForEarlyMode) - { - AsocEntry_UpdateAsocInfo(Adapter, - asocStaAddr, - pBuf->Buffer.VirtualAddress+8, - pTcb->PacketLength-8, - UPDATE_ASOC_RSP); - } - else - { - AsocEntry_UpdateAsocInfo(Adapter, - asocStaAddr, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength, - UPDATE_ASOC_RSP); - } - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== SendAssociateRsp()\n")); -} - - - -VOID -SendDeauthentication( - PADAPTER Adapter, - pu1Byte auSta, - u1Byte asRsn -) -{ - - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SendDeauthentication()\n")); - -#if (MULTICHANNEL_SUPPORT == 1) - if(Adapter == GetFirstClientPort(Adapter) && MultiChannelGetPortConnected20MhzChannel(Adapter) != 0) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - - HalChangeWirelessMode(Adapter, MultiChannelGetPortConnected20MhzChannel(Adapter)); - - MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - Adapter, - MultiChannelGetPortConnected20MhzChannel(Adapter), - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT, - EXTCHNL_OFFSET_NO_EXT, - 0 - ); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Channel %d\n", MultiChannelGetPortConnected20MhzChannel(Adapter))); - } -#endif - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructDeauthenticatePacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - auSta, - asRsn ); - - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate( Adapter, auSta ); - - #if (MULTICHANNEL_SUPPORT == 1) - if(MultiChannelSwitchNeeded(Adapter)) - { // Let the Deauthentication go into AC Queue: MultiChannel Scheduler will let it go into right channel - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, BE_QUEUE, DataRate); - } - else - #endif - { - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - // Win8: For sending packets in the correct channel ---- - delay_ms(50); - // ---------------------------------------------- - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== SendDeauthentication()\n")); -} - - - - -VOID -SendDisassociation( - PADAPTER Adapter, - pu1Byte asSta, - u1Byte asRsn -) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - u1Byte TxPauseCommand = 0; - u4Byte MacIdPause = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("===> SendDisassociation()\n")); - -#if (MULTICHANNEL_SUPPORT == 1) - if(GetDefaultMgntInfo(Adapter)->RegMultiChannelFcsMode == 0) - { - if(Adapter == GetFirstClientPort(Adapter) && MultiChannelGetPortConnected20MhzChannel(Adapter) !=0 - && (GET_HAL_DATA(Adapter)->CurrentChannel != MultiChannelGetPortConnected20MhzChannel(Adapter))) //ylb 20121029 add "&& (GET_HAL_DATA(Adapter)->CurrentChannel != MultiChannelGetPortConnected20MhzChannel(Adapter))" - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - - HalChangeWirelessMode(Adapter, MultiChannelGetPortConnected20MhzChannel(Adapter)); - MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - Adapter, - MultiChannelGetPortConnected20MhzChannel(Adapter), - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT, - EXTCHNL_OFFSET_NO_EXT, - 0 - ); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Channel %d\n", MultiChannelGetPortConnected20MhzChannel(Adapter))); - { - int i = 0; - for( i = 0; i < 100; i++) //add by ylb 20121029: Win8 WFD Test: Fix GO Cannot Receive Disassociation send by Client, Because Client send it at Wrong Channel - { - if((GET_HAL_DATA(Adapter)->SwChnlInProgress == FALSE) - &&(GET_HAL_DATA(Adapter)->CurrentChannel == MultiChannelGetPortConnected20MhzChannel(Adapter))) - break; - RT_TRACE(COMP_P2P, DBG_LOUD, ("SendDisassociation: Delay 100 us, Waiting for Switch Channel Complete(%d vs %d)!\n", - GET_HAL_DATA(Adapter)->CurrentChannel, MultiChannelGetPortConnected20MhzChannel(Adapter))); - delay_us(100); - } - } - - } - } -#endif - - -//wait for Client is active when Go sending disassociation -//by sherry 20130117 - { - int i; - - if((Adapter == GetFirstGOPort(Adapter))) - { - for(i=0;i<20;i++) - { - if(!Adapter->bRecvEnterPSForGo) //ylb add "|| Adapter == GetFirstClientPort(Adapter)" - { - RT_TRACE(COMP_MLME,DBG_TRACE,("STA is active send immediately \n")); - break; - } - else - { - - - RT_TRACE(COMP_MLME,DBG_LOUD,("STA is active send wait for sta in active: i= %d \n",i)); - PlatformStallExecution(10000); - } - } - } - } - - //Enable BE Queue and VI Queue - //by sherry 20130117 - if(GetDefaultMgntInfo(Adapter)->RegMultiChannelFcsMode == 0) - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_TX_PAUSE, (pu1Byte)(&TxPauseCommand)); - else - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_MACID_PKT_SLEEP, (pu1Byte)(&MacIdPause)); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructDisassociatePacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - asSta, - asRsn ); - - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate( Adapter, asSta ); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - Adapter->LastConnectionActionTime = PlatformGetCurrentTime(); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<=== SendDisassociation()\n")); -} - -// -// Description: -// Send ProbeRsp. -// Arguments: -// [in] Adapter - -// The adapter context. -// [in] StaAddr - -// The target mac address. -// [in] bHideSSID - -// Hide our SSID in the SSID element. -// [in[ pRfdProbeReq - -// The RFD contains the probe request. This field may be NULL. -// [in] posProbeReq - -// The location of OCTET_STRING for the probe request. This field may be NULL if no probe request as input. -// 2004.10.07, by rcnjko. -// Revise by Bruce, 2012-06-08. -// -VOID -SendProbeRsp( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN BOOLEAN bHideSSID, - IN PRT_RFD pRfdProbeReq, - IN POCTET_STRING posProbeReq - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructProbeRsp( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - StaAddr, - bHideSSID, - pRfdProbeReq, - posProbeReq); - - if( !(ACTING_AS_AP(Adapter)) ) - { - // For IBSS mode, we want to use the lowest basic rate. - if( IS_WIRELESS_MODE_5G(Adapter) || - (IS_WIRELESS_MODE_HT_24G(Adapter) &&!pMgntInfo->pHTInfo->bCurSuppCCK)) - DataRate = MGN_6M; - else - DataRate = pMgntInfo->LowestBasicRate; - - } - else - { - DataRate = (u2Byte)MgntQuery_MgntFrameTxRate(Adapter, StaAddr); -#if (P2P_SUPPORT == 1) - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - if(pP2PInfo->Role == P2P_GO) - DataRate = P2P_LOWEST_RATE; - } -#endif - } - - RT_TRACE(COMP_SEND, DBG_TRACE, ("==SendProbeRsp(): Tx rate = %d\n", DataRate)); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -// -// Description: Send a customized Data frame. -// 2004.12.05, by rcnjko. -// -VOID -SendCustomizedData( - PADAPTER Adapter, - u2Byte pktLength, - u1Byte txRate -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructCustomizedData( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pktLength - ); - - // by Owen on 05/01/10 to fix the following issue: - // The AP Netgear WGT634U do not respond to RTL8187 hereafter after scanning. - // ps: WGT634U only acks to RTL8187. - /* - // If payload is zero-legth, some AP may not handle the packet - // with WEP correctly, Netgear 11b/g WGT634U. - // 2004.12.05, by rcnjko. - pTcb->PacketLength += 50; - */ - //((pu1Byte)pBuf->Buffer.VirtualAddress)[pTcb->PacketLength] = 0xaa; - //((pu1Byte)pBuf->Buffer.VirtualAddress)[pTcb->PacketLength+1] = 0xaa; - //pTcb->PacketLength += 2; - // - - //DataRate = pMgntInfo->CurrentOperaRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - DataRate = txRate; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, BE_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - -// -// Description: Send a Null function Data frame in client mode. -// 2005.03.23, by rcnjko. -// -VOID -SendNullFunctionData( - PADAPTER Adapter, - pu1Byte StaAddr, - BOOLEAN bForcePowerSave -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - - //Add bQoS parameter for QoS Null by Isaiah 2006-07-31 - ConstructNullFunctionData( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - StaAddr, - FALSE, - 0, - 0, - bForcePowerSave); - - DataRate = pMgntInfo->LowestBasicRate; // Annie, 2005-03-31 - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - - -// -// Description: Send PS-Poll. -// 2005.02.15, by rcnjko. -// -VOID -SendPSPoll( - PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructPSPoll( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength); - - DataRate = pMgntInfo->LowestBasicRate; // Annie, 2005-03-31 - - pTcb->bTxCalculatedSwDur = TRUE; - pTcb->bTxEnableSwCalcDur = TRUE; - - // Note: We need to send PS-poll in HIGH QUEUE and fw will revise AID number to fix previous fw bug. 2009.03.26 by tynli. - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, MGNT_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -// -// Description: Send a magic packet. -// 2005.06.27, by rcnjko. -// -VOID -SendMagicPacket( - PADAPTER Adapter, - pu1Byte StaAddr -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - RT_TRACE(COMP_SEND, DBG_LOUD, ("SendMagicPacket(): StaAddr: %02X-%02X-%02X-%02X-%02X-%02X\n", - StaAddr[0], StaAddr[1], StaAddr[2], StaAddr[3], StaAddr[4], StaAddr[5] )); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructMagicPacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - StaAddr); - - DataRate = pMgntInfo->LowestBasicRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -// -// Description: Send EAPOL-Key packet. -// 2005.07.01, by rcnjko. -// -VOID -SendEapolKeyPacket( - PADAPTER Adapter, - pu1Byte StaAddr, - - pu1Byte pKCK, // Pointer to KCK (EAPOL-Key Confirmation Key). - pu1Byte pKEK, // Pointer to KEK (EAPOL-Key Encryption Key). - - KeyType eKeyType, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - BOOLEAN bInstall, // EAPOL-Key Information field: Install Flag. - BOOLEAN bKeyAck, // EAPOL-Key Information field: Key Ack bit. - BOOLEAN bKeyMIC, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - BOOLEAN bSecure, // EAPOL-Key Information field: Secure bit. - BOOLEAN bError, // EAPOL-Key Information field: Error bit. True for MIC failure report. - BOOLEAN bRequest, // EAPOL-Key Information field: Requst bit. - - u8Byte u8bKeyReplayCounter, // EAPOL-KEY Replay Counter field. - pu1Byte pKeyNonce, // EAPOL-Key Key Nonce field (32-byte). - u8Byte u8bKeyRSC, // EAPOL-Key Key RSC field (8-byte). - - POCTET_STRING posRSNIE, // Key Data field: Pointer to RSN IE, NULL if - pu1Byte pGTK // Key Data field: Pointer to GTK, NULL if Key Data Length = 0. -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; -#if 1 //Added by Jay 0712 for - PRT_WLAN_STA pEntry; - BOOLEAN bEncrypt = FALSE; -#endif - - RT_PRINT_ADDR( (COMP_SEND|COMP_AUTHENTICATOR), DBG_LOUD, ("SendEapolKeyPacket(): StaAddr:\n"), StaAddr ); - - if( ACTING_AS_AP(Adapter) ) - { // AP mode. - pEntry = AsocEntry_GetEntry(pMgntInfo, StaAddr); - - if(pEntry == NULL) - return; - - if(pEntry->perSTAKeyInfo.TxMICKey != NULL) - bEncrypt = TRUE; - - // AP WPA AES ,CCW - if( pEntry->perSTAKeyInfo.AESKeyBuf[0] != 0) - { - bEncrypt = TRUE; - //RT_TRACE(COMP_WPAAES, DBG_LOUD, ("=====> Packet to Encrypt start")); - } - } - else - { // STA mode. Added by Annie, 2005-07-25. - // Follow the same condition in TranslateHeader(). - if( Adapter->MgntInfo.SecurityInfo.KeyLen[0] - +Adapter->MgntInfo.SecurityInfo.KeyLen[1] - +Adapter->MgntInfo.SecurityInfo.KeyLen[2] - +Adapter->MgntInfo.SecurityInfo.KeyLen[3] - +Adapter->MgntInfo.SecurityInfo.KeyLen[4] != 0) - { - bEncrypt = TRUE; - } - } - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructEapolKeyPacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &(pTcb->PacketLength), - StaAddr, - pKCK, // Pointer to KCK (EAPOL-Key Confirmation Key). - pKEK, // Pointer to KEK (EAPOL-Key Encryption Key). - eKeyType, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - bInstall, // EAPOL-Key Information field: Install Flag. - bKeyAck, // EAPOL-Key Information field: Key Ack bit. - bKeyMIC, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - bSecure, // EAPOL-Key Information field: Secure bit. - bError, // EAPOL-Key Information field: Error bit. True for MIC failure report. - bRequest, // EAPOL-Key Information field: Requst bit. - u8bKeyReplayCounter, // EAPOL-KEY Replay Counter field. - pKeyNonce, // EAPOL-Key Key Nonce field (32-byte). - u8bKeyRSC, // EAPOL-Key Key RSC field (8-byte). - posRSNIE, // Key Data field: Pointer to RSN IE, NULL if - pGTK, // Key Data field: Pointer to GTK, NULL if Key Data Length = 0. - bEncrypt // encrypt the packet or not. - ); - -// if(eKeyType == type_Group) - if( bEncrypt ) - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_AFTER_KEY_INSTALLED; - } - else - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_BEFORE_KEY_INSTALLED; - } - - // Check if this is a MIC failure report packet. 2005.09.06, by rcnjko. - if(bRequest && bError) - { - pTcb->EncInfo.SecProtInfo |= RT_SEC_MIC_FAILURE_REPORT; - } - - DataRate = pMgntInfo->LowestBasicRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, LOW_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -// -// Description: -// Send the raw packet to HW. This function may not work properly for all ICs, -// there are only 8192C series are verified. -// In normal sending case, use MgntSendSepcificPacket() instead of this function. -// We use this function test the duration and special packets. -// We simulate the CTS/NullData generation with the required duration for WiFi 11n -// TestPlan 5.2.3. -// Argumetns: -// [in] Adapter - -// The NIC adapter context. -// [in] pocPacketToSend - -// The raw packet to be sent in the air. -// [in] u1bTxRate - -// The sending rate for this packet. -// Return: -// If sending succeeds, return TRUE, and return FALSE otherwise. -// By Bruce, 2011-07-21. -// -BOOLEAN -MgntSendRawPacket( - IN PADAPTER Adapter, - IN POCTET_STRING pocPacketToSend, - IN u1Byte u1bTxRate - ) -{ - BOOLEAN bResult = FALSE; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - u4Byte Crc32 = 0; - pu1Byte pHeader = NULL; - - if( pocPacketToSend == NULL || - pocPacketToSend->Length > 1600 ) - { - return bResult; - } - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - do - { - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - pHeader = pBuf->Buffer.VirtualAddress; - - PlatformMoveMemory(pHeader, pocPacketToSend->Octet, pocPacketToSend->Length); - pTcb->PacketLength = pocPacketToSend->Length; - - // Caculate CRC - // The 8192C HW would not append the CRC for this packet when the RAW Packet bit is set in the Tx Desc. - Crc32 = crc32(pHeader, pTcb->PacketLength); - WriteEF4Byte(pHeader + pTcb->PacketLength, Crc32); - pTcb->PacketLength += 4; - - SET_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_RAW_DATA); - DataRate = u1bTxRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->bTxCalculatedSwDur = TRUE; - pTcb->bTxEnableSwCalcDur = TRUE; - - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - RT_PRINT_DATA(COMP_SEND, DBG_LOUD, "MgntSendRawPacket() Content:\n", pHeader, pTcb->PacketLength); - bResult = TRUE; - } - }while(FALSE); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - return bResult; -} - -// -// Description: Send an 802.11 frame whose content is specified in ocOctet. -// 2005.09.23, by rcnjko. -// -BOOLEAN -MgntSendSpecificPacket( - PADAPTER Adapter, - POCTET_STRING pocPacketToSend, - u1Byte u1bTxRate -) -{ - PMGNT_INFO pMgntInfo = NULL; - PSTA_QOS pStaQos = NULL; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - BOOLEAN bResult = FALSE; - PRT_SECURITY_T pSecInfo = NULL; - PADAPTER pSendAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefaultMgntInfo = GetDefaultMgntInfo(Adapter); - - //RT_TRACE(COMP_P2P, DBG_LOUD, ("MgntSendSpecificPacket(): send pkt with rate: %u\n", u1bTxRate)); - - if( pocPacketToSend == NULL || - pocPacketToSend->Length > 1600 ) - { - return bResult; - } - - - // check each adapter and find the one matching this packet - do - { - // If the client is not assciated or connected. - if(pSendAdapter->MgntInfo.mAssoc && eqMacAddr(Frame_pBssid((*pocPacketToSend)), pSendAdapter->MgntInfo.Bssid)) - break;; - }while(NULL != (pSendAdapter = GetNextExtAdapter(pSendAdapter))); - // If no adapter matches this packet, use default adapter. - if(pSendAdapter == NULL) - pSendAdapter = GetDefaultAdapter(Adapter); - - // Adopt the variables from sender adapter. - pMgntInfo = &(pSendAdapter->MgntInfo); - pStaQos = pMgntInfo->pStaQos; - pSecInfo = &(pMgntInfo->SecurityInfo); - - PlatformAcquireSpinLock(pSendAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pSendAdapter, &pTcb, &pBuf)) - { - if(IsDataFrame(pocPacketToSend->Octet) && pocPacketToSend->Length > sMacHdrLng) - { - u2Byte offset = 0; - - offset = sMacHdrLng; - - pTcb->PacketLength = 0; - - PlatformMoveMemory(pBuf->Buffer.VirtualAddress, pocPacketToSend->Octet, offset); - pTcb->PacketLength += sMacHdrLng; - - //------------------------------------------------------------------------- - // Qos Header: leave space for it if necessary. - //------------------------------------------------------------------------- - if(pStaQos->CurrentQosMode > QOS_DISABLE) - { - SET_80211_HDR_QOS_EN(pBuf->Buffer.VirtualAddress, 1); - PlatformZeroMemory((pBuf->Buffer.VirtualAddress + offset), sQoSCtlLng); - offset += sQoSCtlLng; - pTcb->PacketLength += sQoSCtlLng; - } - - //------------------------------------------------------------------------- - // Security Header: leave space for it if necessary. - // For WPS AP mode, We won't make EAP Packet with Security IE - //------------------------------------------------------------------------- - if((Frame_WEP(*pocPacketToSend) && pSecInfo->EncryptionHeadOverhead > 0 && WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) || - (pSecInfo->EncryptionHeadOverhead > 0 && (!GET_SIMPLE_CONFIG_ENABLED(pDefaultMgntInfo)) && FALSE == WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) ) - { - PlatformZeroMemory((pBuf->Buffer.VirtualAddress + offset), pSecInfo->EncryptionHeadOverhead); - offset += pSecInfo->EncryptionHeadOverhead; - pTcb->PacketLength += pSecInfo->EncryptionHeadOverhead; - } - PlatformMoveMemory((pBuf->Buffer.VirtualAddress + offset), (pocPacketToSend->Octet + sMacHdrLng), (pocPacketToSend->Length - sMacHdrLng)); - pTcb->PacketLength += (pocPacketToSend->Length - sMacHdrLng); - } - else - { - PlatformMoveMemory(pBuf->Buffer.VirtualAddress, pocPacketToSend->Octet, pocPacketToSend->Length); - pTcb->PacketLength = pocPacketToSend->Length; - } - - DataRate = u1bTxRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - - MgntSendPacket(pSendAdapter, pTcb, pBuf, pTcb->PacketLength, BE_QUEUE, DataRate); - bResult = TRUE; - } - - PlatformReleaseSpinLock(pSendAdapter, RT_TX_SPINLOCK); - - return bResult; -} - - -// -// Description: Send EAPOL-Start packet. -// -VOID -SendEAPOLStarPacket( - IN PADAPTER Adapter, - IN BOOLEAN bEncrypt - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - - RT_TRACE(COMP_SEND, DBG_TRACE, ("+ SendCcxRmReport()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructEAPOLStartPacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &(pTcb->PacketLength), - bEncrypt - ); - - if( bEncrypt ) - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_AFTER_KEY_INSTALLED; - } - else - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_BEFORE_KEY_INSTALLED; - } - - RT_PRINT_DATA(COMP_SEC , DBG_LOUD , "==> Send EAPOL Start \n" , pBuf->Buffer.VirtualAddress , pTcb->PacketLength); - - DataRate = pMgntInfo->LowestBasicRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, LOW_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - -} - -// -// Description: Send CCX Radio Measure Report packet. -// 2006.05.07, by rcnjko. -// -VOID -SendCcxRmReport( - IN PADAPTER Adapter, - IN PRT_RM_REPORTS pRmReports - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - - RT_TRACE(COMP_SEND, DBG_TRACE, ("+ SendCcxRmReport()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructCcxRmReport( - Adapter, - pBuf->Buffer.VirtualAddress, - &(pTcb->PacketLength), - pRmReports - ); - - DataRate = pMgntInfo->LowestBasicRate; - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, LOW_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("- SendCcxRmReport()\n")); -} - -// -// Description: -// Send Dot11k radiio measurement report. -// Argument: -// pRmRequests - The rm request information. -// pRmReports - The rm report information. -// By Bruce, 2009-07-23. -// -VOID -SendDot11kRmReport( - IN PADAPTER Adapter, - IN PRT_RM_REQUESTS pRmRequests, - IN PRT_RM_REPORTS pRmReports - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - - - RT_TRACE(COMP_SEND, DBG_TRACE, ("+ SendCcxRmReport()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructDot11kRmReport( - Adapter, - pBuf->Buffer.VirtualAddress, - &(pTcb->PacketLength), - pRmRequests, - pRmReports - ); - - pTcb->bTxUseDriverAssingedRate = TRUE; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, pMgntInfo->LowestBasicRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("- SendCcxRmReport()\n")); -} - - -// -// Description: -// Send ADDTS packet -// 2007.06.25, by shien chang. -// -VOID -SendQosAddTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("===> SendQosAddTs()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructQosADDTSPacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &(pTcb->PacketLength), - (++ pStaQos->DialogToken), - pTs, - numTspec - ); - - DataRate = pMgntInfo->LowestBasicRate; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_QOS, DBG_TRACE, ("<=== SendQosAddTs()\n")); -} - -// -// Description: -// Send DELTS packet -// 2007.06.25, by shien chang. -// -VOID -SendQosDelTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("===> SendQosDelTs()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructQosDELTSPacket( - Adapter, - pBuf->Buffer.VirtualAddress, - &(pTcb->PacketLength), - pTs, - numTspec - ); - - DataRate = pMgntInfo->LowestBasicRate; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_QOS, DBG_LOUD, ("<=== SendQosDelTs()\n")); -} - -// -// Description: -// AP Send Qos Null packet with EOSP bit set. -//Arguments: -// [in] Adapter - -// The NIC adapter. -// [in] StaAddr - -// The MAC address who will receive this qos null packet. -// [in] bQos - -// Determine if this packet is qos (wmm) packet. -// [in] AC - -// The qos AC queue filled in this Qos NULL fumction data. -// [in] bEosp - -// End of service bit indicates this packet ends the service period. -// Return: -// None. -// By Bruce, 2010-04-26. -// -VOID -ApSendNullPacket( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN BOOLEAN bQos, - IN u1Byte AC, - IN BOOLEAN bEosp - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - RT_TRACE(COMP_AP, DBG_TRACE, ("===> ApSendNullPacket()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - //Add bQoS parameter for QoS Null by Isaiah 2006-07-31 - ConstructNullFunctionData( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - StaAddr, - bQos, - AC, - bEosp, - FALSE); - - DataRate = pMgntInfo->LowestBasicRate; // Annie, 2005-03-31 - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->priority = AC; - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_AP, DBG_TRACE, ("<=== ApSendNullPacket()\n")); -} - -// -// Description: -// Send SA Query request packet. -//Arguments: -// [in] Adapter - -// The NIC adapter. -// [in] pTargetSta - -// Target STA which receives this frame. -// [in] Identifier - -// The identifier in the SA query request frame. -// Return: -// None. -// By Bruce, 2014-12-31. -// -VOID -SendSAQueryReq( - IN PADAPTER Adapter, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructSAQeuryReq( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pTargetSta, - Identifier); - - DataRate = pMgntInfo->LowestBasicRate; // Annie, 2005-03-31 - pTcb->bTxUseDriverAssingedRate = TRUE; - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "SendSAQueryReq(): Content:\n", pBuf, pTcb->PacketLength); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - -// -// Description: -// Send SA Query response packet. -//Arguments: -// [in] Adapter - -// The NIC adapter. -// [in] pTargetSta - -// Target STA which receives this frame. -// [in] Identifier - -// The identifier from the SA query request frame to fill in the SA query response. -// Return: -// None. -// By Bruce, 2014-12-25. -// -VOID -SendSAQueryRsp( - IN PADAPTER Adapter, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructSAQeuryRsp( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - pTargetSta, - Identifier); - - DataRate = pMgntInfo->LowestBasicRate; // Annie, 2005-03-31 - pTcb->bTxUseDriverAssingedRate = TRUE; - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "SendSAQueryRsp(): Content:\n", pBuf, pTcb->PacketLength); - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - diff --git a/network/wlan/WDI/COMMON/MgntSendPacket.h b/network/wlan/WDI/COMMON/MgntSendPacket.h deleted file mode 100644 index f09d83bb..00000000 --- a/network/wlan/WDI/COMMON/MgntSendPacket.h +++ /dev/null @@ -1,234 +0,0 @@ -#ifndef __INC_MGNTSENDPACKET_H -#define __INC_MGNTSENDPACKET_H - -#include "RmDef.h" - -VOID -SendBeaconFrame( - PADAPTER Adapter, - u1Byte QueueIndex - ); - -VOID -SendProbeReq( - PADAPTER Adapter, - BOOLEAN bAnySsid, - u2Byte DataRate, - BOOLEAN bForcePowerSave - ); - -VOID -SendProbeReqEx( - PADAPTER Adapter, - u2Byte DataRate, - BOOLEAN bForcePowerSave - ); - -VOID -SendAuthenticatePacket( - PADAPTER Adapter, - pu1Byte auStaAddr, - u1Byte AuthAlg, - u1Byte AuthSeq, - u1Byte AuthStatusCode, - OCTET_STRING AuthChallengetext - ); - - -VOID -SendAssociateReq( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocListenInterval - ); - -VOID -SendReassociateReq( - PADAPTER Adapter, - pu1Byte ReasocStaAddr, - u2Byte ReasocCap, - u2Byte asocListenInterval, - pu1Byte CurrentasocStaAddr - ); - -VOID -SendAssociateRsp( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u2Byte asocCap, - u2Byte asocStatusCode, - u2Byte asocID, - BOOLEAN bReAssocRsp, - BOOLEAN bQosSTA - ); - -VOID -SendDeauthentication( - PADAPTER Adapter, - pu1Byte auSta, - u1Byte asRsn - ); - - - -VOID -SendDisassociation( - PADAPTER Adapter, - pu1Byte asSta, - u1Byte asRsn - ); - -VOID -SendProbeRsp( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN BOOLEAN bHideSSID, - IN PRT_RFD pRfdProbeReq, - IN POCTET_STRING posProbeReq - ); - -VOID -SendCustomizedData( - PADAPTER Adapter, - u2Byte pktLength, - u1Byte txRate - ); - - -VOID -SendNullFunctionData( - PADAPTER Adapter, - pu1Byte StaAddr, - BOOLEAN bForcePowerSave - ); - - -VOID -SendPSPoll( - PADAPTER Adapter - ); - -VOID -SendMagicPacket( - PADAPTER Adapter, - pu1Byte StaAddr - ); - -VOID -SendEapolKeyPacket( - PADAPTER Adapter, - pu1Byte StaAddr, - - pu1Byte pKCK, // Pointer to KCK (EAPOL-Key Confirmation Key). - pu1Byte pKEK, // Pointer to KEK (EAPOL-Key Encryption Key). - - KeyType eKeyType, // EAPOL-Key Information field: Key Type bit: type_Group or type_Pairwise. - BOOLEAN bInstall, // EAPOL-Key Information field: Install Flag. - BOOLEAN bKeyAck, // EAPOL-Key Information field: Key Ack bit. - BOOLEAN bKeyMIC, // EAPOL-Key Information field: Key MIC bit. If true, we will calculate EAPOL MIC and fill it into Key MIC field. - BOOLEAN bSecure, // EAPOL-Key Information field: Secure bit. - BOOLEAN bError, // EAPOL-Key Information field: Error bit. True for MIC failure report. - BOOLEAN bRequest, // EAPOL-Key Information field: Requst bit. - - u8Byte u8bKeyReplayCounter, // EAPOL-KEY Replay Counter field. - pu1Byte pKeyNonce, // EAPOL-Key Key Nonce field (32-byte). - u8Byte u8bKeyRSC, // EAPOL-Key Key RSC field (8-byte). - - POCTET_STRING posRSNIE, // Key Data field: Pointer to RSN IE. - pu1Byte pGTK // Key Data field: Pointer to GTK. - ); - -BOOLEAN -MgntSendRawPacket( - IN PADAPTER Adapter, - IN POCTET_STRING pocPacketToSend, - IN u1Byte u1bTxRate - ); - -BOOLEAN -MgntSendSpecificPacket( - PADAPTER Adapter, - POCTET_STRING pocPacketToSend, - u1Byte u1bTxRate - ); - -VOID -SendCcxRmReport( - IN PADAPTER Adapter, - IN PRT_RM_REPORTS pRmReports - ); - -VOID -SendDot11kRmReport( - IN PADAPTER Adapter, - IN PRT_RM_REQUESTS pRmRequests, - IN PRT_RM_REPORTS pRmReports - ); - -VOID -SendCcxLinkTestReply( - IN PADAPTER Adapter, - IN POCTET_STRING posLinkRequest, - IN u2Byte FrameNumber, - IN u1Byte LastReplyRetryCount, - IN u1Byte RxPower - ); - - -VOID -ConstructCcxLinkTestReply( - IN PADAPTER Adapter, - IN POCTET_STRING posLinkRequest, - IN u2Byte FrameNumber, - IN u1Byte LastReplyRetryCount, - IN u1Byte RxPower, - OUT pu1Byte Buffer, - OUT pu4Byte pLength -); - -VOID -SendQosAddTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ); - -VOID -SendQosDelTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTspec - ); - -VOID -ApSendNullPacket( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN BOOLEAN bQos, - IN u1Byte AC, - IN BOOLEAN bEosp - ); - - -VOID -SendEAPOLStarPacket( - IN PADAPTER Adapter, - IN BOOLEAN bEncrypt - ); - -VOID -SendSAQueryReq( - IN PADAPTER Adapter, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ); - -VOID -SendSAQueryRsp( - IN PADAPTER Adapter, - IN pu1Byte pTargetSta, - IN u2Byte Identifier - ); - -#endif // #ifndef __INC_MGNTSENDPACKET_H diff --git a/network/wlan/WDI/COMMON/MimoPs.c b/network/wlan/WDI/COMMON/MimoPs.c deleted file mode 100644 index 1d7a115a..00000000 --- a/network/wlan/WDI/COMMON/MimoPs.c +++ /dev/null @@ -1,197 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MimoPs.tmh" -#endif - -VOID -SetSelfMimoPsMode( - IN PADAPTER Adapter, - IN u1Byte NewMimoPsMode - ) -{ - if((NewMimoPsMode == 2) || (NewMimoPsMode > 3)) - return; - - if(NewMimoPsMode == Adapter->MgntInfo.pHTInfo->SelfMimoPs) - return; - - - Adapter->MgntInfo.pHTInfo->SelfMimoPs = NewMimoPsMode; - - UpdateBeaconFrame(Adapter); -} - -RT_STATUS -OnMimoPs( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte MimoPs = MIMO_PS_NOLIMIT; - pu1Byte pSrcAddr = Frame_Addr2(*mmpdu); - PRT_WLAN_STA pEntry; - pu1Byte pMcsFilter; - BOOLEAN bUseRAMask = FALSE; - - switch(PacketGetType(*mmpdu)) - { - case Type_Action: - // CategoryCode(1) + ActionCode(1) + SMPSControlField(1) - if(mmpdu->Length < sMacHdrLng + 3) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] Invalid length(%d) of frame\n", mmpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - MimoPs = (GET_MIMOPS_FRAME_PS_ENABLE(mmpdu->Octet)==0)? MIMO_PS_NOLIMIT:(GET_MIMOPS_FRAME_PS_MODE(mmpdu->Octet)); - break; - - case Type_Asoc_Req: - case Type_Reasoc_Req: - { - OCTET_STRING HTCapIe = {0, 0}; - - HTCapIe = PacketGetElement(*mmpdu, EID_HTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(HTCapIe.Length == 0) - { - RT_TRACE_F(COMP_HT, DBG_WARNING, ("[WARNING] Cannot get HT Capability IE from (Re-)Assoc Packet!\n")); - return RT_STATUS_INVALID_DATA; - } - MimoPs = GET_HT_CAPABILITY_ELE_MIMO_PWRSAVE(HTCapIe.Octet); - } - break; - } - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USE_RA_MASK, &bUseRAMask); - - if(ACTING_AS_AP(Adapter) || pMgntInfo->mIbss) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, pSrcAddr); - if(pEntry != NULL) - { - RT_PRINT_ADDR(COMP_AP | COMP_HT, DBG_LOUD, "OnMimoPs(): Client = ", pEntry->MacAddr); - RT_TRACE(COMP_HT, DBG_LOUD, ("Entry Mimo PS = %d\n", MimoPs)); - pEntry->HTInfo.MimoPs = MimoPs; - - if(pEntry->HTInfo.MimoPs <= MIMO_PS_DYNAMIC) - pMcsFilter = MCS_FILTER_1SS; - else - pMcsFilter = MCS_FILTER_ALL; - - pEntry->HTInfo.HTHighestOperaRate = HTGetHighestMCSRate( - Adapter, - pEntry->HTInfo.McsRateSet, - pMcsFilter ); - - if(bUseRAMask) - { - AP_InitRateAdaptiveState(Adapter, pEntry); - pMgntInfo->Ratr_State = 0; - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pEntry->AssociatedMacId, pEntry, pMgntInfo->Ratr_State); - } - else - { - Adapter->HalFunc.UpdateHalRATRTableHandler( - Adapter, - &pMgntInfo->dot11OperationalRateSet, - pMgntInfo->dot11HTOperationalRateSet,pEntry); - } - } - } - else - { - if(MgntLinkStatusQuery(Adapter) != RT_MEDIA_CONNECT) - { - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Rx MimoPs when disconnected\n")); - return RT_STATUS_FAILURE; - } - - pMgntInfo->pHTInfo->PeerMimoPs = MimoPs; - - if(pMgntInfo->pHTInfo->PeerMimoPs <= MIMO_PS_STATIC) - pMcsFilter = MCS_FILTER_1SS; - else - pMcsFilter = MCS_FILTER_ALL; - - pMgntInfo->HTHighestOperaRate = HTGetHighestMCSRate( - Adapter, - pMgntInfo->dot11HTOperationalRateSet, - pMcsFilter ); - if(bUseRAMask) - { - // we only need to set rate mask - pMgntInfo->Ratr_State = 0; - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State); - } - else - { - Adapter->HalFunc.UpdateHalRATRTableHandler( - Adapter, - &pMgntInfo->dot11OperationalRateSet, - pMgntInfo->dot11HTOperationalRateSet, - NULL); - } - } - - return RT_STATUS_SUCCESS; -} - -VOID -ConstructMimoPsFrame( - IN PADAPTER Adapter, - IN pu1Byte pAddr, - IN u1Byte NewMimoPsMode, - OUT pu1Byte pBuffer, - OUT pu4Byte pLength - ) -{ - OCTET_STRING osMimoPsFrame, osTemp; - u1Byte Content; - - FillOctetString(osMimoPsFrame, pBuffer, 0); - *pLength = 0; - - if(NewMimoPsMode==3) - Content = 0; - else if(NewMimoPsMode==0) - Content = 1; - else if(NewMimoPsMode==1) - Content = 3; - else - return; - - ConstructMaFrameHdr(Adapter, pAddr, ACT_CAT_HT, ACT_MIMO_PWR_SAVE, &osMimoPsFrame); - - FillOctetString(osTemp, &Content, 1); - PacketAppendData(&osMimoPsFrame, osTemp); - *pLength = osMimoPsFrame.Length; -} - -VOID -SendMimoPsFrame( - IN PADAPTER Adapter, - IN pu1Byte pAddr, - IN u1Byte NewMimoPsMode - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = MgntQuery_MgntFrameTxRate(Adapter, pAddr); - - if((NewMimoPsMode!=0) && (NewMimoPsMode!=1) && (NewMimoPsMode!=3)) - return; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructMimoPsFrame(Adapter, pAddr ,NewMimoPsMode, pBuf->Buffer.VirtualAddress, &pTcb->PacketLength); - - if(pTcb->PacketLength != 0) - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} diff --git a/network/wlan/WDI/COMMON/MimoPs.h b/network/wlan/WDI/COMMON/MimoPs.h deleted file mode 100644 index e75b6e94..00000000 --- a/network/wlan/WDI/COMMON/MimoPs.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __INC_MIMOPS_H -#define __INC_MIMOPS_H - -VOID -SetSelfMimoPsMode( - IN PADAPTER Adapter, - IN u1Byte NewMimoPsMode - ); - -RT_STATUS -OnMimoPs( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING mmpdu - ); - -VOID -SendMimoPsFrame( - IN PADAPTER Adapter, - IN pu1Byte pAddr, - IN u1Byte NewMimoPsMode - ); - -#endif \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/Mp_Precomp.h b/network/wlan/WDI/COMMON/Mp_Precomp.h deleted file mode 100644 index a0e7fc0e..00000000 --- a/network/wlan/WDI/COMMON/Mp_Precomp.h +++ /dev/null @@ -1,2 +0,0 @@ -#include "Precomp.h" - diff --git a/network/wlan/WDI/COMMON/MultiChannels.h b/network/wlan/WDI/COMMON/MultiChannels.h deleted file mode 100644 index d00df943..00000000 --- a/network/wlan/WDI/COMMON/MultiChannels.h +++ /dev/null @@ -1,438 +0,0 @@ - -#ifndef __INC_MULTICHANNELS_H -#define __INC_MULTICHANNELS_H - -#define MULTICHANNEL_QUEUE_FOR_EXTSTA BE_QUEUE -#define MULTICHANNEL_QUEUE_FOR_EXTCLIENT VI_QUEUE -#define MULTICHANNEL_QUEUE_FOR_EXTGO BK_QUEUE - -#define MULTICHANNEL_ACTION_NONE 0 -#define MULTICHANNEL_ACTION_STARTED 1 -#define MULTICHANNEL_ACTION_PAUSED 2 - -#define MULTICHANNEL_FCS_SUPPORT_START 1 -#define MULTICHANNEL_FCS_SUPPORT_GO 4 - -#define FCS_STATE_ACTIVE BIT0 -#define FCS_STATE_CONNECTED BIT1 -#define FCS_STATE_PKT_PAUSED BIT2 -#define FCS_STATE_PKT_DROPPED BIT3 - -#define FCS_NOTIFY_TYPE_C2H 1 -#define FCS_NOTIFY_TYPE_CHANNEL 2 -#define FCS_NOTIFY_TYPE_BT_DISABLE 3 - -typedef enum _MULTICHANNEL_FCS_COMMON_INFO{ - MULTICHANNEL_FCS_COMMON_NUMCLIENT = 1, - MULTICHANNEL_FCS_COMMON_DURATION = 2, - MULTICHANNEL_FCS_PORT_ORDER = 3, - MULTICHANNEL_FCS_PORT_CHANNEL = 4, - MULTICHANNEL_FCS_PORT_BANDWIDTH = 5, - MULTICHANNEL_FCS_PORT_EXTOFFSET_40MHZ = 6, - MULTICHANNEL_FCS_PORT_EXTOFFSET_80MHZ = 7, - MULTICHANNEL_FCS_PORT_DURATION = 8, - MULTICHANNEL_FCS_PORT_RFETYPE = 9, - MULTICHANNEL_FCS_PORT_CHANNEL_TX_NULL = 10, - MULTICHANNEL_FCS_PORT_C2H_REPORT = 11, - MULTICHANNEL_FCS_PORT_CHANNEL_SCAN = 12, - MULTICHANNEL_FCS_PORT_ROLE = 13, - MULTICHANNEL_FCS_COMMON_NOA_DURATION = 14, - MULTICHANNEL_FCS_COMMON_NOA_STARTTIME = 15, - MULTICHANNEL_FCS_COMMON_STA_BEACONTIME = 16, - MULTICHANNEL_FCS_COMMON_QPKT_LEVEL = 17, - MULTICHANNEL_FCS_PORT_MACID_BITMAP = 18, -}MULTICHANNEL_FCS_COMMON_INFO; - -// Multi-channel switch role for each port -typedef enum _FCS_ROLE{ - FCS_ROLE_STA = 0, - FCS_ROLE_AP = 1, - FCS_ROLE_GC = 2, - FCS_ROLE_GO = 3, -}FCS_ROLE; - -// Represent Channel Tx Null setting -typedef enum _FCS_CHANNEL_TX_NULL{ - FCS_ENABLE_TX_NULL = 0, - FCS_DISABLE_TX_NULL = 1, -}FCS_CHANNEL_TX_NULL, *PFCS_CHANNEL_TX_NULL; - -// Represent Channel Scan -typedef enum _FCS_CHANNEL_SCAN{ - FCS_CHIDX = 0, - FCS_SCANCH_RSVD_LOC = 1, -}FCS_CHANNEL_SCAN, *PFCS_CHANNEL_SCAN; - -// Represent C2H Report setting -typedef enum _FCS_C2H_REPORT{ - FCS_C2H_REPORT_DISABLE = 0, - FCS_C2H_REPORT_FAIL_STATUS = 1, - FCS_C2H_REPORT_ALL_STATUS = 2, -}FCS_C2H_REPORT, *PFCS_C2H_REPORT; - -// Represent FW status report of channel switch -typedef enum _FCS_STATUS_RPT{ - FCS_RPT_SUCCESS = 0, - FCS_RPT_TXNULL_FAIL = 1, - FCS_RPT_STOPFCS = 2, - FCS_RPT_READY = 3, -}FCS_STATUS, *PFCS_STATUS; - -// Represent FW status -typedef enum _FCS_FW_STATE{ - FCS_FW_IDLE = 0, - FCS_FW_STARTING = 1, - FCS_FW_STOPPED = 2, -}FCS_FW_STATE, *PFCS_FW_STATE; - -// Represent channel switch operation mode -typedef enum _FCS_CHNL_OPMODE{ - FCS_CHNL_OPMODE_NONE = 0, - FCS_CHNL_OPMODE_RESET = 1, - FCS_CHNL_OPMODE_JOINBSS = 2, - FCS_CHNL_OPMODE_DISCONNECT = 3, - FCS_CHNL_OPMODE_JOINFAIL = 4, - FCS_CHNL_OPMODE_STARTMCC = 5, -}CHNL_OPMODE, *PCHNL_OPMODE; - -// Represent queue packet setting -typedef enum _FCS_QPKT_LEVEL{ - FCS_QPKT_DEFAULT = 0, - FCS_QPKT_BY_MACID_SLEEP = 1, - FCS_QPKT_BY_DRIVER_DROP = 2, - FCS_QPKT_BY_MACID_DROP = 4, -}FCS_QPKT_LEVEL, *PFCS_QPKT_LEVEL; - - -//============================================================================ -// Multiple Channel Supported -//============================================================================ - -// Context for Each Port Specific -typedef struct _MULTICHANNEL_PORT_CONTEXT { - - //================================================== - // Client-Related Elements - //================================================== - - // This controls the offset for this port to the HW TSF counter -- - BOOLEAN bBssLocalTsfValid; - s8Byte BssLocalTsfOffset; - u8Byte BssTimestamp; - u2Byte BssBeaconInterval; - // ----------------------------------------------------- - - // Channel Information ------------------------------------ - CHANNEL_WIDTH ConnectedBandWidthMode; - u1Byte ConnectedPrimary20MhzChannel; - EXTCHNL_OFFSET ConnectedExtChnlOffsetOf40MHz; - EXTCHNL_OFFSET ConnectedExtChnlOffsetOf80MHz; - - RT_WORK_ITEM MultiChannelSwitchChannelWorkItem; - // ----------------------------------------------------- - - // Configuration Time -------------------------------------------------------- - u2Byte ConnectionConfigurationTime; // For speeding up the WPS or DHCP packets: ms - // ------------------------------------------------------------------------ - - // Order for FW fast channel switch - u1Byte FCSOrder; - u1Byte FCSPortState; - - u1Byte FcsDuration; - u1Byte Role; - u2Byte MacIdBitmap; - -} MULTICHANNEL_PORT_CONTEXT, *PMULTICHANNEL_PORT_CONTEXT; - -#define MULTICHANNEL_SIZE_OF_PORT_CONTEXT sizeof(MULTICHANNEL_PORT_CONTEXT) - - - -// Common Context for All Ports (Only Valid in Default Port) -typedef struct _MULTICHANNEL_COMMON_CONTEXT { - - // Channel Switch Timer ------------------------------------- - // + Future Goal: Handle all channel swith actions for whole driver - ACTION_TIMER_HANDLE MultiChannelActionTimer; - // ------------------------------------------------------- - - - - // HW / SW Timer Switch -------------------------------- - BOOLEAN bUseHardwareTimer; - // ---------------------------------------------------- - - - - - // Channel Switch Scheduler Status -------------------- - BOOLEAN bChannelSwitchSchedulerStarted; - u1Byte MultiChannelState; - PADAPTER pAdapterBeforeSwitch; - // ------------------------------------------------ - - // Used for HwTsf Synchronization ----------------- - u1Byte TargetApBssid[6]; - BOOLEAN bSyncHwTsfBeaconUpdateReceived; - RT_WORK_ITEM MultiChannelSyncHwTsfWorkItem; - // -------------------------------------------- - - // Tx Report Indication -------------------------------- - BOOLEAN bWaitChannelSwitchTxReport; - // ------------------------------------------------- - - // For TxPause Read in Dispatch Level: USB and SDIO --- - u1Byte TxPauseCache; - // ---------------------------------------------- - - // Record current client count - u1Byte NumCurPort; - u1Byte FcsDuration; - BOOLEAN bDownloadRSVD; - BOOLEAN bStartFwFCS; - u1Byte uFCSReport; - u8Byte uSyncTsfDiff; - u1Byte MCCNoADuration; - u1Byte MCCNoAStartTime; - u1Byte MCCStaBeaconTime; - u1Byte MCCQPktLevel; - RT_WORK_ITEM MultiChannelC2HWorkItem; - RT_WORK_ITEM MultiChannelAdjustTsfWorkItem; - // ---------------------------------------------- - - u8Byte IGBoostEndTime; // us - u4Byte IGBoostStateFlag; -} MULTICHANNEL_COMMON_CONTEXT, *PMULTICHANNEL_COMMON_CONTEXT; - -#define MULTICHANNEL_SIZE_OF_COMMON_CONTEXT sizeof(MULTICHANNEL_COMMON_CONTEXT) - -typedef struct _FCS_C2H_NOTIFY{ - u1Byte status; - u1Byte channel; -}FCS_C2H_NOTIFY, *PFCS_C2H_NOTIFY; - -#define MC_DM_INIT_GAIN_BOOST_START 0x00000001 -#define MC_DM_INIT_GAIN_BOOST_END 0x00000002 -#define MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC 0x00000003 -#define MC_DM_INIT_GAIN_BOOST_CHECK 0x00000004 - - -#define MC_DM_STATE_INIT_GAIN_BOOST_STARTED BIT31 - -#define MC_DM_INIT_GAIN_BOOST_DEFAULT_DELAY_SEC 10 // 10 sec - - -//----------------------------------------------------------- -// Public Functions -//----------------------------------------------------------- - -VOID -MultiChannelWriteTxPauseCache( - PADAPTER pAdapter, - u1Byte TxPauseCommand -); - -u1Byte -MultiChannelReadTxPauseCache( - PADAPTER pAdapter -); - -VOID -MultiChannelAssociateConfirm( - PADAPTER pAdapter, - BOOLEAN bSuccess -); - -VOID -MultiChannelHandleReceivedBeacon( - PADAPTER pAdapter, - OCTET_STRING osPacket -); - -VOID -MultiChannelSwitchChannelWorkItemCallback( - IN PVOID pContext -); - -VOID -MultiChannelHandleChannelSwitchToCurrentPort( - PADAPTER pAdapterBeforeSwitch, - PADAPTER pCurrentPort -); - -VOID -MultiChannelSyncHwTsfWorkItemCallback( - IN PVOID pContext -); - -VOID -MultiChannelResetApStatus( - PADAPTER pAdapter, - BOOLEAN bSet -); - -VOID -MultiChannelStatusWatchdog( - PADAPTER pAdapter -); - -VOID -MultiChannelDumpHwQueueStatus( - PADAPTER pAdapter -); - -VOID -MultiChannelDisableEnableExactHwQueue( - PADAPTER pAdapter, - BOOLEAN bDisable -); - -VOID -MultiChannelStopChannelSwitchScheduler( - PADAPTER pAdapter, - BOOLEAN bEnableSwitchOperation -); - -BOOLEAN -MultiChannelSwitchNeeded( - PADAPTER pAdapter -); - -BOOLEAN -MultiChannelSyncHwTsfNeeded( - PADAPTER pAdapter -); - -u1Byte -MultiChannelRedirectPacketToSpecificQueue( - PRT_TCB pTcb -); - -VOID -MultiChannelUpdateSettingBeforeScanOnResetRequest( - PADAPTER pAdapter -); - -VOID -MultiChannelInitializeWorkItem( - PADAPTER pAdapter -); - -VOID -MultiChannelReleaseWorkItem( - PADAPTER pAdapter -); - -VOID -MultiChannelInitializeTimer( - PADAPTER pAdapter -); - -VOID -MultiChannelReleaseTimer( - PADAPTER pAdapter -); - -u1Byte -MultiChannelGetPortConnected20MhzChannel( - PADAPTER pAdapter -); - -VOID -MultichannelHandlePacketDuringScan( - PADAPTER pAdapter, - BOOLEAN bDisable -); - -VOID -MultichannelEnableGoQueue( - PADAPTER pAdapter -); - -PADAPTER -MultiChannelGetConnectionAdapter( - PADAPTER pAdapter, - u1Byte Order -); - -VOID -MultiChannelScanHandler( - PADAPTER pAdapter, - BOOLEAN bScan, - BOOLEAN bResume -); - -VOID -MultiChannelDisconnectClient( - PADAPTER pAdapter, - BOOLEAN bSendDisassociate -); - -VOID -MultiChannelDisconnectGo( - PADAPTER pAdapter -); - -BOOLEAN -MultiChannelCheckUpdateHwTsf( - PADAPTER pAdapter -); - -VOID -MultiChannelGetFcsCommonInfo( - PADAPTER pAdapter, - u1Byte FcsFlag, - pu1Byte value -); - -VOID -MultiChannelSetFcsCommonInfo( - PADAPTER pAdapter, - u1Byte FcsFlag, - pu1Byte value -); - -BOOLEAN -MultiChannel_IsFCSInProgress( - PADAPTER pAdapter -); - -VOID -MultiChannel_OnBss( - PADAPTER pAdapter, - u8Byte uAPTsf, - u8Byte uCurrentTsf -); - -RT_STATUS -FCS_Notify( - PADAPTER pAdapter, - ULONG NotifyType, - pu1Byte InformationBuffer, - ULONG InformationBufferLength -); - -#if (MULTICHANNEL_SUPPORT == 1) -u1Byte -MultiChannelGetConnectedChannels( - IN PADAPTER pAdapter, - OUT pu1Byte pChnlArray, - IN u1Byte maxChnlArrayNum - ); - -RT_STATUS -McDynamicMachanismSet( - IN PADAPTER pAdapter, - IN u4Byte ReqID, - IN PVOID pInputBuffer, - IN u4Byte InputBufferLen - ); - -#else // #if (MULTICHANNEL_SUPPORT != 1) - -#define MultiChannelGetConnectedChannels(_pAdapter, _pChnlArray, _maxChnlArrayNum) 0 -#define McDynamicMachanismSet(_pAdapter, _ReqID, _pInputBuffer, _InputBufferLen) RT_STATUS_NOT_SUPPORT -#endif // #if (MULTICHANNEL_SUPPORT == 1) - -#endif diff --git a/network/wlan/WDI/COMMON/MultiPorts.c b/network/wlan/WDI/COMMON/MultiPorts.c deleted file mode 100644 index dba3d6c4..00000000 --- a/network/wlan/WDI/COMMON/MultiPorts.c +++ /dev/null @@ -1,1236 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "MultiPorts.tmh" -#endif - -//============================================================================ -// All Type Port Supported -//============================================================================ - - -VOID -MultiPortSetAllPortsHWReadyStatus( - PADAPTER pAdapter, - BOOLEAN bReady -) -{ - PADAPTER pLoopAdapter = GetDefaultAdapter(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("MultiPortSetAllPortsHWReadyStatus(), set pAdapter->bHWInitReady=%d\n", (u4Byte)bReady)); - while(pLoopAdapter != NULL) - { - pLoopAdapter->bHWInitReady = bReady; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } -} - - -#if (MULTIPORT_SUPPORT == 1) - -//============================================================================ -// Multiple Port Supported -//============================================================================ - -// Please do not use this function outside of this module -static PMULTIPORT_COMMON_CONTEXT -MultiPortGetCommonContext( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - RT_ASSERT( - sizeof(pDefaultAdapter->pPortCommonInfo->MultiPortCommon) == sizeof(MULTIPORT_COMMON_CONTEXT), - ("MultiPort Common Context Memory Allocation Size Mismatch !") - ); - - return ((PMULTIPORT_COMMON_CONTEXT) pDefaultAdapter->pPortCommonInfo->MultiPortCommon); -} - -// Please do not use this function outside of this module -static PMULTIPORT_PORT_CONTEXT -MultiPortGetPortContext( - PADAPTER pAdapter -) -{ - if(pAdapter == NULL) return NULL; - - RT_ASSERT( - sizeof(pAdapter->MultiPort) == sizeof(MULTIPORT_PORT_CONTEXT), - ("MultiPort Port Context Memory Allocation Size Mismatch !") - ); - - return ((PMULTIPORT_PORT_CONTEXT) pAdapter->MultiPort); -} - -static PADAPTER -GetAdapterByListEntry( - PRT_LIST_ENTRY pListEntry -) -{ - - u4Byte offset1 = FIELD_OFFSET(ADAPTER, MultiPort); - u4Byte offset2 = FIELD_OFFSET(MULTIPORT_PORT_CONTEXT, MultiList); - - //==================================== - // NOTE: You can also find pAdapter by pMultiPort->pAdapter - //==================================== -#if 0 - PADAPTER pAdapter=(PADAPTER)(((pu1Byte) pListEntry) - offset1 - offset2); - PMULTIPORT_PORT_CONTEXT pMultiPort=(PMULTIPORT_PORT_CONTEXT)pListEntry; - - if(pAdapter != pMultiPort->pAdapter) - DbgPrint("GetAdapterByListEntry() Adapter mismatch!!, pAdapter=0x%x, pMultiPort->pAdapter=0x%x\n", pAdapter, pMultiPort->pAdapter); - return pAdapter; -#endif - - return (PADAPTER)(((pu1Byte) pListEntry) - offset1 - offset2); -} - -PADAPTER -GetNextExtAdapter( - PADAPTER pAdapter -) -{ - // Active Extension Adapter Only ---------------------------------------------- - PMULTIPORT_PORT_CONTEXT pMultiPort = MultiPortGetPortContext(pAdapter); - PRT_LIST_ENTRY pListEntry = RTNextEntryList(&pMultiPort->MultiList); - PADAPTER pExtAdapter = NULL; - - if( pListEntry == NULL ) - return NULL; - else - pExtAdapter = GetAdapterByListEntry(pListEntry); - - while(pExtAdapter != NULL) - { - pMultiPort = MultiPortGetPortContext(pExtAdapter); - - if (IsDefaultAdapter(pExtAdapter)) - break; - - if(pMultiPort->bActiveAdapter == TRUE) - { - return pExtAdapter; - } - - pListEntry = RTNextEntryList(&pMultiPort->MultiList); - pExtAdapter = GetAdapterByListEntry(pListEntry); - } - - return NULL; -} - - -PADAPTER -GetFirstAPAdapter( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pAPAdapter = pDefaultAdapter; - - while(pAPAdapter != NULL) - { - if(ACTING_AS_AP(pAPAdapter)) - break; - pAPAdapter = GetNextExtAdapter(pAPAdapter); - } - - return pAPAdapter; -} - -PADAPTER -GetFirstDevicePort( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pDevicePort = NULL; - - pDevicePort = pDefaultAdapter; - - while(pDevicePort != NULL) - { - - #if P2P_SUPPORT == 1 - if(P2P_ENABLED(GET_P2P_INFO(pDevicePort))) - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pDevicePort) && GET_P2P_INFO(pDevicePort)->Role == P2P_DEVICE) - break; - } - #endif - - pDevicePort = GetNextExtAdapter(pDevicePort); - } - - return pDevicePort; -} - -PADAPTER -GetFirstGOPort( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pGOPort = NULL; - - pGOPort = pDefaultAdapter; - - while(pGOPort != NULL) - { - - #if P2P_SUPPORT == 1 - if(P2P_ENABLED(GET_P2P_INFO(pGOPort))) - { - if(GET_P2P_INFO(pGOPort)->Role == P2P_GO) - { - if(P2P_ADAPTER_RTK_SUPPORT_P2P(pGOPort)) - { - pGOPort = GetFirstAPAdapter(pDefaultAdapter); - } - break; - } - } - #endif - - pGOPort = GetNextExtAdapter(pGOPort); - } - - return pGOPort; -} - -PADAPTER -GetFirstClientPort( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pClientPort = NULL; - - pClientPort = pDefaultAdapter; - - while(pClientPort != NULL) - { - - #if P2P_SUPPORT == 1 - if(P2P_ENABLED(GET_P2P_INFO(pClientPort))) - { - if(GET_P2P_INFO(pClientPort)->Role == P2P_CLIENT) - break; - } - #endif - - pClientPort = GetNextExtAdapter(pClientPort); - } - - return pClientPort; -} - -PADAPTER -MultiPortGetIdleExtAdapter( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMULTIPORT_PORT_CONTEXT pMultiPort = MultiPortGetPortContext(pDefaultAdapter); - PRT_LIST_ENTRY pListEntry = RTNextEntryList(&pMultiPort->MultiList); - PADAPTER pExtAdapter = GetAdapterByListEntry(pListEntry); - - while(!IsDefaultAdapter(pExtAdapter)) - { - pMultiPort = MultiPortGetPortContext(pExtAdapter); - - if(pMultiPort->bActiveAdapter == FALSE) - { - return pExtAdapter; - } - - pListEntry = RTNextEntryList(&pMultiPort->MultiList); - pExtAdapter = GetAdapterByListEntry(pListEntry); - } - - return NULL; -} - -PADAPTER -MultiPortRemoveExtAdapter( - PADAPTER pAdapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMULTIPORT_PORT_CONTEXT pMultiPortDefault = MultiPortGetPortContext(pDefaultAdapter); - PADAPTER pExtAdapter = NULL; - PRT_LIST_ENTRY pListEntry = NULL; - - if(!RTIsListEmpty(&pMultiPortDefault->MultiList)) - { - pListEntry = RTRemoveHeadList(&pMultiPortDefault->MultiList); - pExtAdapter = GetAdapterByListEntry(pListEntry); - } - - return pExtAdapter; -} - - - -BOOLEAN -MultiPortInsertIntoTargetAdapterList( - IN PADAPTER TargetAdapter, - OUT PADAPTER TargetList[], - OUT pu4Byte puCurrentTarget, - IN u4Byte uMaxTarget -) -{ - u4Byte i = 0; - BOOLEAN bExist = FALSE; - - for(i = 0; i < *puCurrentTarget; i++) - { - if(TargetList[i] == TargetAdapter) - { - bExist = TRUE; - break; - } - } - - // New item found - if(bExist == FALSE) - { - if(*puCurrentTarget >= uMaxTarget) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: Error: TargetList is Full!\n", __FUNCTION__)); - return FALSE; - } - else - { - TargetList[*puCurrentTarget] = TargetAdapter; - *puCurrentTarget = *puCurrentTarget + 1; - } - } - - // TargetAdapter will be in TargetList[] - - return TRUE; -} - -u4Byte -MultiPortGetTargetAdapterList( - PADAPTER pAdapter, - PRT_RFD pRfd, - OCTET_STRING osFrame, - PADAPTER TargetList[], - u4Byte uMaxTarget -) -{ - // Modified based on N62CSelectReceiveAdapter() - u4Byte uTargetAdapter = 0; - PADAPTER pExtAdapter = NULL; - PMGNT_INFO pExtMgntInfo = NULL; - BOOLEAN bMatch = FALSE; - - if( pRfd->Status.PacketReportType == TX_REPORT2 || - pRfd->Status.PacketReportType == C2H_PACKET) - { - pExtAdapter = GetDefaultAdapter(pAdapter); - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - return uTargetAdapter; - } - -#if (P2P_SUPPORT == 1) - // Based on the frame content, determine if this adapter accepts the frame - if(P2PAdapterAcceptFrame(GetDefaultAdapter(pAdapter), osFrame)) - { - MultiPortInsertIntoTargetAdapterList(GetDefaultAdapter(pAdapter), TargetList, &uTargetAdapter, uMaxTarget); - } - // Win8: Send packets to Device port -------------------------------------------------------------------- - pExtAdapter = GetFirstDevicePort(pAdapter); - if(pExtAdapter != NULL) - { - // Based on the frame content, determine if this adapter accepts the frame - if(P2PAdapterAcceptFrame(pExtAdapter, osFrame)) - { - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - } - } - - - - if(PacketGetActionFrameType(&osFrame) == ACT_PKT_GAS_INT_REQ) - {// Service Discovery Request: Only Send to Device Port - - // Here should have more consideration. - - // Win7 - pExtAdapter = GetDefaultAdapter(pAdapter); - - if(P2P_ENABLED(GET_P2P_INFO(pExtAdapter))) - { - //if(GET_P2P_INFO(pExtAdapter)->Role == P2P_DEVICE) // this blocks the SD req when we are GO under Win7 - { - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - } - } - - // Win8 - pExtAdapter = GetFirstDevicePort(pAdapter); - - if(pExtAdapter != NULL) - { - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - } - - return uTargetAdapter; - } -#endif - - // Probe Request Filter - if(PacketGetType(osFrame) == Type_Probe_Req) - { - // Normal AP - pExtAdapter = GetDefaultAdapter(pAdapter); - while(pExtAdapter != NULL) - { - if(IN_SEND_BEACON_MODE(pExtAdapter ) || pExtAdapter->MgntInfo.bNetMonitorMode) - { - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - } - - // Workaround for NdisTest-v8150 WFD_Group_ext test due to the SUT's not cleaning the resources ---------------- - // The WFD_Performance_ext test will therefore have two device ports, which is not valid. - // We let it can be discovered for passing the test. - #if (P2P_SUPPORT == 1) - if(P2P_ENABLED(GET_P2P_INFO(pExtAdapter))) - { - if(GET_P2P_INFO(pExtAdapter)->Role == P2P_DEVICE) - { - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - } - } - #endif - // -------------------------------------------------------------------------------------------------- - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - - return uTargetAdapter; - } - - // Probe Response Filter - RT_TRACE(COMP_P2P, DBG_TRACE, ("MultiPortGetTargetAdapterList: check probrsp\n")); - - if(PacketGetType(osFrame) == Type_Probe_Rsp) - { - pExtAdapter = GetDefaultAdapter(pAdapter); - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &(pExtAdapter->MgntInfo); - - if( ((pExtMgntInfo->state_Synchronization_Sta >= STATE_Act_Receive) || - (pExtMgntInfo->state_Synchronization_Sta <= STATE_Act_Listen)) && - eqMacAddr(Frame_pRaddr(osFrame), pExtAdapter->CurrentAddress) - ) - { - RT_TRACE(COMP_P2P, DBG_TRACE, ("MultiPortGetTargetAdapterList listen state: port number %d\n", pExtAdapter->pNdis62Common->PortNumber)); - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - bMatch = TRUE; - } - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - - } - - if(bMatch) - return uTargetAdapter; - - if(PacketGetType(osFrame) == Type_Beacon) - { - // Broadcast Packet Filter , Beacon - pExtAdapter = GetDefaultAdapter(pAdapter); - while(pExtAdapter != NULL) - { - RT_TRACE(COMP_P2P, DBG_TRACE, ("MultiPortGetTargetAdapterList Broadcast\n")); - pExtMgntInfo = &(pExtAdapter->MgntInfo); - if( (pExtMgntInfo->state_Synchronization_Sta >= STATE_Act_Receive) || - (pExtMgntInfo->state_Synchronization_Sta <= STATE_Act_Listen) - ) - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - return uTargetAdapter; - } - - bMatch = FALSE; - // BSSID Filter - RT_PRINT_ADDR(COMP_P2P, DBG_TRACE, "MultiPortGetTargetAdapterList(): receive Bss BSSID:", Frame_pBssid(osFrame)); - pExtAdapter = GetDefaultAdapter(pAdapter); - while(pExtAdapter != NULL) - { - RT_PRINT_ADDR(COMP_P2P, DBG_TRACE, "MultiPortGetTargetAdapterList(): new Bss BSSID:", pExtAdapter->MgntInfo.Bssid); - - RT_TRACE(COMP_P2P, DBG_TRACE, ("MultiPortGetTargetAdapterList: port number %d\n", pExtAdapter->pNdis62Common->PortNumber)); - if(eqMacAddr(Frame_pBssid(osFrame), pExtAdapter->MgntInfo.Bssid)) - { - RT_TRACE(COMP_P2P, DBG_TRACE, ("MultiPortGetTargetAdapterList eqMacAddr: port number %d\n", pExtAdapter->pNdis62Common->PortNumber)); - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - bMatch = TRUE; - } - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - - if(bMatch) - return uTargetAdapter; - - // Broadcast Packet Filter - pExtAdapter = GetDefaultAdapter(pAdapter); - while(pExtAdapter != NULL) - { - MultiPortInsertIntoTargetAdapterList(pExtAdapter, TargetList, &uTargetAdapter, uMaxTarget); - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - return uTargetAdapter; -} - - -PADAPTER -MultiPortFeedPacketToMultipleAdapter( - PADAPTER pAdapter, - PRT_RFD pRfd -) -{ - // NOTE: -------------------------------------------------------------- - // If only single adapter is needed, return that adapter. - // -------------------------------------------------------------------- - - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pDefaultAdapter); - PADAPTER pExtAdapter = NULL; - PRT_RFD pExtRfd = NULL; - u4Byte i = 0; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - // Assertion Check Variable - u4Byte uCurrentCloneRFDs; - - // Target List - u4Byte uTargetAdapter = 0; - PADAPTER TargetList[10]; - - - // Single MPDU - OCTET_STRING frame = {NULL, 0}; - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - if(pRfd->Status.bHwError) - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("MultiPortFeedPacketToMultipleAdapter(): Return because bHwError is true.\n")); - return NULL; - } - - // Information Source: pRfd Status Checking ------------------------------------------------------- - RT_ASSERT(pRfd->Buffer.VirtualAddress != NULL, ("Error: pRfd->Buffer.VirtualAddress is NULL!\n")); - RT_ASSERT(pRfd->Buffer.Length != 0, ("Error: pRfd->Buffer.Length is 0!\n")); - RT_ASSERT(pRfd->PacketLength <= pRfd->Buffer.Length, ("Error: Packet Too Long!\n")); - // ------------------------------------------------------------------------------------------ - - // Clone RFD Status Checking ---------------------------------------------------------------------------------------------------------------------- - PlatformAcquireSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - uCurrentCloneRFDs = pMultiPortCommon->uCloneRfdIdleQueueSize + pMultiPortCommon->uCloneRfdBusyQueueSize; - RT_ASSERT(uCurrentCloneRFDs == pMultiPortCommon->uNumberOfCloneRfds, ("Failure: Some Clone RFDs are Lost!uCurrentCloneRFDs=%d\n", uCurrentCloneRFDs)); - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - // --------------------------------------------------------------------------------------------------------------------------------------------- - - - // Get the target adapter list ----------------------------------------------------------------------------- - uTargetAdapter = MultiPortGetTargetAdapterList(pAdapter, pRfd, frame, TargetList, sizeof(TargetList) / sizeof(PADAPTER)); - //RT_TRACE(COMP_INIT, DBG_TRACE, ("%s: uTargetAdapter: %d \n", __FUNCTION__, uTargetAdapter)); - - if(uTargetAdapter == 0) - { - // Free the original RFD since the RFD is not necessary - RT_TRACE(COMP_INIT, DBG_TRACE, ("%s: No Target Adapter Found!\n", __FUNCTION__)); - return NULL; - } - else if(uTargetAdapter == 1) - { - // Single adapter is needed. Do not free the original RFD, and run the original path - return TargetList[0]; - } - // ---------------------------------------------------------------------------------------------------- - - - // Send to each adapter - for(i = 0; i < uTargetAdapter; i++) - { - // Get the target adapter element - pExtAdapter = TargetList[i]; - - PlatformAcquireSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - if(RTIsListEmpty(&pMultiPortCommon->CloneRfdIdleQueue)) - { - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s: No enough Clone RFD!\n", __FUNCTION__)); - break; - } - - // Acquire an idle Clone RFD and initialize the Clone RFD ----------------------------------------- - pExtRfd = (PRT_RFD) RTRemoveHeadListWithCnt( - &pMultiPortCommon->CloneRfdIdleQueue, - &pMultiPortCommon->uCloneRfdIdleQueueSize - ); - - // + Clone the original information - PlatformZeroMemory(pExtRfd, sizeof(RT_RFD)); - PlatformMoveMemory(pExtRfd, pRfd, sizeof(RT_RFD)); - - // + Record the needed memory length - pExtRfd->mbCloneRfdDataBuffer.Length = pRfd->Buffer.Length; - - // + Allocate the memory based on the needed memory length above - rtStatus = DrvIFAssociateRFD(pDefaultAdapter, pExtRfd); - - if(rtStatus != RT_STATUS_SUCCESS) - { - // Return the CloneRFD resource - RTInsertTailListWithCnt( - &pMultiPortCommon->CloneRfdIdleQueue, - &pExtRfd->List, - &pMultiPortCommon->uCloneRfdIdleQueueSize - ); - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - //RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s: No enough memory!\n", __FUNCTION__)); - break; - } - - //Sinda 20150903, Should assign Buffer's address according to it is clone RFD. - if(IsCloneRFD(pDefaultAdapter, pExtRfd)) - { - // + Attach the memory to the CloneRFD - pExtRfd->Buffer.VirtualAddress = pExtRfd->mbCloneRfdDataBuffer.Buffer; - pExtRfd->Buffer.Length = pExtRfd->mbCloneRfdDataBuffer.Length; - } - -#if RX_AGGREGATION - // + No Next RFD - pExtRfd->NextRfd = NULL; - - // + Only Single MPDU Packet - pExtRfd->nTotalFrag = 1; - - // + No Parent RFD - pExtRfd->ParentRfd = NULL; - - // + Not in the USB temp RFD list: pAdapter->RfdTmpList - pExtRfd->bIsTemp = FALSE; -#endif - - // Please be careful to handle pRfd->Buffer.VirtualAddress offset. - // + Move data - PlatformMoveMemory( - pExtRfd->Buffer.VirtualAddress, - pRfd->Buffer.VirtualAddress - pAdapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd), - (pRfd->PacketLength + pAdapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd))>pAdapter->MAX_RECEIVE_BUFFER_SIZE? pAdapter->MAX_RECEIVE_BUFFER_SIZE:(pRfd->PacketLength + pAdapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd)) - ); - - // + Get shifted bytes of starting address of 802.11 header (Sync the memory offset) - pExtRfd->Buffer.VirtualAddress += pAdapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd); - // ------------------------------------------------------------------------------------- - - // Insert into busy Clone RFD queue - RTInsertHeadListWithCnt( - &pMultiPortCommon->CloneRfdBusyQueue, - &pExtRfd->List, - &pMultiPortCommon->uCloneRfdBusyQueueSize - ); - - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - // Iteration Flag - pExtRfd->bFeedPacketToSingleAdapter = TRUE; - - // The pExtRfd will be free in ProcessReceivedPacket() - ProcessReceivedPacketForEachPortSpecific(pExtAdapter, pExtRfd); - } - - - // Free the original RFD since the CloneRFD is adopted. - return NULL; -} - -VOID -MultiPortReturnCloneRFD( - PADAPTER pAdapter, - PRT_RFD pRfd -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pDefaultAdapter); - - if(IsCloneRFD(pDefaultAdapter, pRfd)) - { - RT_ASSERT(pRfd->bFeedPacketToSingleAdapter == TRUE, ("Error: Clone RFD may be returned again!\n")); - - // Return the Multiport Clone RFDs ------------------------------------------- - if(pRfd->bFeedPacketToSingleAdapter) - { - // Clean the MultiPort Flag - pRfd->bFeedPacketToSingleAdapter = FALSE; - - // Return the data buffer - RT_ASSERT(pRfd->mbCloneRfdDataBuffer.Buffer != NULL, ("Multiport Clone RFD should have a data buffer!\n")); - DrvIFDisassociateRFD(pDefaultAdapter, pRfd); - - PlatformAcquireSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - // Remove the RFD from Busy Queue - RTRemoveEntryListWithCnt( - &pRfd->List, - &pMultiPortCommon->uCloneRfdBusyQueueSize - ); - - // Return the RFD to the Idle Queue - RTInsertTailListWithCnt( - &pMultiPortCommon->CloneRfdIdleQueue, - &pRfd->List, - &pMultiPortCommon->uCloneRfdIdleQueueSize - ); - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - } - } - else - { - RT_TRACE(COMP_RECV, DBG_WARNING, ("This RFD is not CloneRFD: 0x%p!\n", pRfd)); - } -} -BOOLEAN -IsMultiPortAllowDisableHWSecurity( - PADAPTER Adapter - ) -{ - PADAPTER pAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo);; - - while(pAdapter != NULL) - { - if(!pMgntInfo->SecurityInfo.SWTxEncryptFlag || !pMgntInfo->SecurityInfo.SWRxDecryptFlag) - return FALSE; - - pAdapter = GetNextExtAdapter(pAdapter); - pMgntInfo = &(pAdapter->MgntInfo); - } - return TRUE; -} - - -BOOLEAN -IsActiveAPModeExist( - PADAPTER Adapter -) -{ - PADAPTER pAdapter = GetDefaultAdapter(Adapter); - - while(pAdapter != NULL) - { - if(AP_DetermineAlive(pAdapter)) - return TRUE; - - pAdapter = GetNextExtAdapter(pAdapter); - } - - return FALSE; -} - -BOOLEAN -IsAPModeExist( - PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PADAPTER pAdapter = pDefaultAdapter; - while(pAdapter != NULL) - { - if(ACTING_AS_AP(pAdapter)) - return TRUE; - pAdapter = GetNextExtAdapter(pAdapter); - } - - - return FALSE; -} - -BOOLEAN -IsExtAPModeExist( - PADAPTER Adapter -) -{ - PADAPTER pAdapter = GetFirstExtAdapter(Adapter); - - while(pAdapter != NULL) - { - if(ACTING_AS_AP(pAdapter)) - return TRUE; - pAdapter = GetNextExtAdapter(pAdapter); - } - - return FALSE; -} - -BOOLEAN -IsDevicePortDiscoverable( - PADAPTER pAdapter -) -{ -#if P2P_SUPPORT == 1 - - PADAPTER pDevicePort = GetFirstDevicePort(pAdapter); - PP2P_INFO pDeviceP2PInfo = NULL; - - if(pDevicePort) - { - pDeviceP2PInfo = GET_P2P_INFO(pDevicePort); - - if(pDeviceP2PInfo->uListenStateDiscoverability) - return TRUE; - } -#endif - - return FALSE; -} - -BOOLEAN -IsCloneRFD( - PADAPTER pAdapter, - PRT_RFD pRfd -) -{ - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pAdapter); - PRT_RFD pRfdStart = (PRT_RFD) pMultiPortCommon->CloneRfdMemoryBuffer.Buffer; - u4Byte IndexMax = pMultiPortCommon->uNumberOfCloneRfds; - - if(pRfd >= pRfdStart && pRfd <= pRfdStart + IndexMax - 1) - { - return TRUE; - } - - return FALSE; -} - -VOID -MultiPortDumpPortStatus( - PADAPTER pAdapter -) -{ - PADAPTER pTargetAdapter = pAdapter; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - - u4Byte portNumber = pTargetAdapter->pNdis62Common->PortNumber; - MP_PORT_TYPE portType = pTargetAdapter->pNdis62Common->PortType; - MP_PORT_OP_STATE portState = pTargetAdapter->pNdis62Common->CurrentOpState; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("PORT_NUMBER: %d\n", portNumber)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("pAdapter: %p\n", pAdapter)); - RT_TRACE(COMP_MLME, DBG_LOUD, (", MP_PORT_TYPE: %s\n", - (portType == HELPER_PORT) ? "HELPER_PORT" : - (portType == EXTSTA_PORT) ? "EXTSTA_PORT" : - (portType == EXTAP_PORT) ? "EXTAP_PORT" : - (portType == EXT_P2P_DEVICE_PORT) ? "EXT_P2P_DEVICE_PORT" : - (portType == EXT_P2P_ROLE_PORT) ? "EXT_P2P_ROLE_PORT" : - "ERROR" - )); - -#if (P2P_SUPPORT == 1) - if(pMgntInfo->pP2PInfo) - { - PP2P_INFO pP2PInfo = (PP2P_INFO)(pMgntInfo->pP2PInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, (", P2PSupport Type: %d\n", pTargetAdapter->P2PSupport)); - - RT_TRACE(COMP_P2P, DBG_LOUD, (", P2P_ROLE: %s\n", - (pP2PInfo->Role == P2P_NONE) ? "P2P_NONE" : - (pP2PInfo->Role == P2P_DEVICE) ? "P2P_DEVICE" : - (pP2PInfo->Role == P2P_CLIENT) ? "P2P_CLIENT" : - (pP2PInfo->Role == P2P_GO) ? "P2P_GO" : - "ERROR" - )); - RT_TRACE(COMP_P2P, DBG_LOUD, (", P2P_STATE: %d\n", - pP2PInfo->State - )); - - P2PSvc_Dump(pTargetAdapter); - } -#endif - - RT_TRACE(COMP_MLME, DBG_LOUD, (", MP_PORT_OP_STATE: %s \n", - (portState == INIT_STATE) ? "INIT_STATE" : - (portState == OP_STATE) ? "OP_STATE" : - "ERROR" - )); - -} - - -RT_STATUS -MultiPortAllocateCloneRfdBuffer( - PADAPTER pAdapter, - PRT_RFD pRfd -) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - u4Byte MaxLen=pRfd->mbCloneRfdDataBuffer.Length; - - // Correctness Checking -------------------------------------- - RT_ASSERT( - pRfd->mbCloneRfdDataBuffer.Length != 0 && - pRfd->mbCloneRfdDataBuffer.Buffer == NULL, - ("DrvIFAssociateRFD: Wrong Parameters Observed!\n") - ); - - // Get the non-shared memory --------------------------------- - rtStatus = PlatformAllocateMemory( - pAdapter, - (PVOID*)&(pRfd->mbCloneRfdDataBuffer.Buffer), - MaxLen - ); - - - return rtStatus; -} - -VOID -MultiPortReleaseCloneRfdBuffer( - PRT_RFD pRfd -) -{ - - // Correctness Checking -------------------------------------- - RT_ASSERT( - pRfd->mbCloneRfdDataBuffer.Length != 0 && - pRfd->mbCloneRfdDataBuffer.Buffer != NULL, - ("DrvIFDisassociateRFD: Wrong Parameters Observed!\n") - ); - - RT_ASSERT( - pRfd->bFeedPacketToSingleAdapter == FALSE, - ("Error: Clone RFD in use should not be returned!\n") - ); - - // Free the non-shared memory -------------------------------- - PlatformFreeMemory( - pRfd->mbCloneRfdDataBuffer.Buffer, - pRfd->mbCloneRfdDataBuffer.Length - ); -} - -VOID -MultiPortInitializeCloneRfdQueue( - PADAPTER pAdapter -) -{ - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pAdapter); - - PlatformAcquireSpinLock(pAdapter, RT_RFD_SPINLOCK); - pMultiPortCommon->uCloneRfdIdleQueueSize = 0; - RTInitializeListHead(&pMultiPortCommon->CloneRfdIdleQueue); - - pMultiPortCommon->uCloneRfdBusyQueueSize = 0; - RTInitializeListHead(&pMultiPortCommon->CloneRfdBusyQueue); - PlatformReleaseSpinLock(pAdapter, RT_RFD_SPINLOCK); -} - -RT_STATUS -MultiPortPrepareCloneRfd( - PADAPTER pAdapter -) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PRT_RFD pRfd = NULL; - u4Byte i = 0; - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pAdapter); - - const u4Byte SIZE_OF_CLONE_RFD_QUEUE = 256; - - do - { - // Allocate memory for the Multiport Clone RFD ------------------------------------------------- - pMultiPortCommon->CloneRfdMemoryBuffer.Length = SIZE_OF_CLONE_RFD_QUEUE * sizeof(RT_RFD); - - rtStatus = PlatformAllocateMemory(pAdapter, - &pMultiPortCommon->CloneRfdMemoryBuffer.Buffer, - pMultiPortCommon->CloneRfdMemoryBuffer.Length - ); - - if(rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s: MultiPort Clone RFD: Memory Allocation Failure !\n", __FUNCTION__)); - break; - } - // --------------------------------------------------------------------------------------- - - // Insert the Clone RFDs into the queue -------------------------------------------------------- - pMultiPortCommon->uNumberOfCloneRfds = SIZE_OF_CLONE_RFD_QUEUE; - - PlatformZeroMemory( - pMultiPortCommon->CloneRfdMemoryBuffer.Buffer, - pMultiPortCommon->CloneRfdMemoryBuffer.Length - ); - PlatformAcquireSpinLock(pAdapter,RT_RFD_SPINLOCK); - pRfd = (PRT_RFD) pMultiPortCommon->CloneRfdMemoryBuffer.Buffer; - - for(i = 0; i < pMultiPortCommon->uNumberOfCloneRfds; i++) - { - RTInsertTailListWithCnt( - &pMultiPortCommon->CloneRfdIdleQueue, - &pRfd[i].List, - &pMultiPortCommon->uCloneRfdIdleQueueSize - ); - } - RT_TRACE(COMP_INIT, DBG_LOUD, ("MultiPortPrepareCloneRfd(), pMultiPortCommon->uCloneRfdIdleQueueSize = %d\n", - pMultiPortCommon->uCloneRfdIdleQueueSize)); - PlatformReleaseSpinLock(pAdapter,RT_RFD_SPINLOCK); - // --------------------------------------------------------------------------------------- - } while(FALSE); - - return rtStatus; -} - -VOID -MultiPortFreeCloneRfd( - PADAPTER pAdapter -) -{ - PRT_RFD pRfd = NULL; - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("\n==== MultiPort Clone RFD Status ====\n")); - RT_TRACE(COMP_INIT, DBG_LOUD, ("Clone RFD Allocated: %d\n", pMultiPortCommon->uNumberOfCloneRfds)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("Clone RFD Freed: %d\n", pMultiPortCommon->uCloneRfdIdleQueueSize)); - RT_ASSERT(pMultiPortCommon->uCloneRfdBusyQueueSize == 0, ("No Busy Clone RFD when in free status !!")); - RT_ASSERT(pMultiPortCommon->uNumberOfCloneRfds ==pMultiPortCommon->uCloneRfdIdleQueueSize, ("Freed RFD less than allocated!!\n")); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("====================================\n\n")); - - PlatformAcquireSpinLock(pAdapter, RT_RFD_SPINLOCK); - while(!RTIsListEmpty(&pMultiPortCommon->CloneRfdIdleQueue)) - { - pRfd = (PRT_RFD) RTRemoveHeadListWithCnt(&pMultiPortCommon->CloneRfdIdleQueue, &pMultiPortCommon->uCloneRfdIdleQueueSize); - } - PlatformReleaseSpinLock(pAdapter, RT_RFD_SPINLOCK); - - PlatformFreeMemory( - pMultiPortCommon->CloneRfdMemoryBuffer.Buffer, - pMultiPortCommon->CloneRfdMemoryBuffer.Length - ); -} - -VOID -MultiPortInitializeContext( - PADAPTER pDefaultAdapter -) -{ - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pDefaultAdapter); - PMULTIPORT_PORT_CONTEXT pMultiPortDefault = MultiPortGetPortContext(pDefaultAdapter); - - pMultiPortCommon->uNumberOfActiveExtAdapters = 0; - - RTInitializeListHead(&pMultiPortDefault->MultiList); - pMultiPortDefault->bActiveAdapter = TRUE; - pMultiPortDefault->pAdapter = pDefaultAdapter; -} - -// -// Description: -// Record the current scan complete time to all adapters. -// Arguments: -// [in] pAdapter - -// One of adapter list. -// Return: -// None -// Remark: -// This function save the current time as the scan complete mark into each -// adapter. -// The input adapter can be any one of the adapter list. -// By Bruce, 2012-03-02. -// -VOID -MultiportRecordLastScanTime( - IN PADAPTER pAdapter - ) -{ - PADAPTER pLoopAdapter = GetDefaultAdapter(pAdapter); - u8Byte CurrTime = PlatformGetCurrentTime(); - - while(pLoopAdapter) - { - pLoopAdapter->LastScanCompleteTime = CurrTime; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } -} - - -BOOLEAN -MultiPortCanCheckCheckBssid( - PADAPTER pAdapter -) -{ - BOOLEAN bCanCheckBssid = TRUE; - - do - { - if(pAdapter->MgntInfo.bWiFiConfg) - { - break; - } - - if(GetFirstClientPort(pAdapter)) - { - bCanCheckBssid = FALSE; - break; - } - - if(IsDevicePortDiscoverable(pAdapter)) - { - bCanCheckBssid = FALSE; - break; - } - - if(MultiChannelSwitchNeeded(pAdapter)) - { - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("MultiChannelSwitchNeeded() return FALSE!\n")); - bCanCheckBssid = FALSE; - break; - } - }while(FALSE); - - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bCanCheckBssid: %d\n", bCanCheckBssid)); - - return bCanCheckBssid; -} - -VOID -MultiPortInsertIdleExtAdapter( - PADAPTER pDefaultAdapter, - PADAPTER pAdapter -) -{ - PMULTIPORT_PORT_CONTEXT pMultiPortDefault = MultiPortGetPortContext(pDefaultAdapter); - PMULTIPORT_PORT_CONTEXT pMultiPort = MultiPortGetPortContext(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("Insert idle Ext Adapter %p\n", pAdapter)); - - pMultiPort->bActiveAdapter = FALSE; - pMultiPort->pAdapter = pAdapter; - - // + MultiPort Insert the Adapter into the Adapter Queue - RTInsertTailList( - &pMultiPortDefault->MultiList, - &pMultiPort->MultiList - ); -} - -VOID -MultiPortChangeExtAdapterActiveState( - PADAPTER pAdapter, - BOOLEAN bActive -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pDefaultAdapter); - PMULTIPORT_PORT_CONTEXT pMultiPort = MultiPortGetPortContext(pAdapter); - - RT_ASSERT(pMultiPort->bActiveAdapter != bActive, ("Same state changing is illegal !")); - - pMultiPort->bActiveAdapter = bActive; - - if(bActive) - { - pMultiPortCommon->uNumberOfActiveExtAdapters++; - } - else - { - pMultiPortCommon->uNumberOfActiveExtAdapters--; - } -} - -u4Byte -MultiPortGetNumberOfActiveExtAdapters( - PADAPTER pAdapter -) -{ - PMULTIPORT_COMMON_CONTEXT pMultiPortCommon = MultiPortGetCommonContext(pAdapter); - - return pMultiPortCommon->uNumberOfActiveExtAdapters; -} - -BOOLEAN -MultiPortIsPreallocatedExtAdapterExist( - PADAPTER pDefaultAdapter -) -{ - PMULTIPORT_PORT_CONTEXT pMultiPortDefault = MultiPortGetPortContext(pDefaultAdapter); - - return (!RTIsListEmpty(&pMultiPortDefault->MultiList)); -} - -BOOLEAN -MultiPortIsActiveExtAdapter( - PADAPTER pAdapter -) -{ - PMULTIPORT_PORT_CONTEXT pMultiPort = MultiPortGetPortContext(pAdapter); - - return pMultiPort->bActiveAdapter; -} - -// -// Description: -// Get the latest time of connection action from current. -// Arguments: -// [in] pAdapter - -// One of adapter list. -// Return: -// Time in micro-seconds for the last connection action. -// Remark: -// If the returned value is 0, there's no recorded time of connection. -// By Bruce, 2015-02-10. -// -u8Byte -MultiportGetLastConnectionActionTime( - IN PADAPTER pAdapter - ) -{ - PADAPTER pLoopAdapter = GetDefaultAdapter(pAdapter); - u8Byte tmpConnectionActionTime = 0; - - while(pLoopAdapter) - { - if(pLoopAdapter->LastConnectionActionTime > tmpConnectionActionTime) - tmpConnectionActionTime = pLoopAdapter->LastConnectionActionTime; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - return tmpConnectionActionTime; -} - -#else - -//============================================================================ -// Single Port Supported -//============================================================================ - -VOID -MultiportRecordLastScanTime( - IN PADAPTER pAdapter - ) -{ - u8Byte CurrTime = PlatformGetCurrentTime(); - PADAPTER DefAdapter = GetDefaultAdapter(pAdapter); - - DefAdapter->LastScanCompleteTime = CurrTime; - -} - - -#endif diff --git a/network/wlan/WDI/COMMON/MultiPorts.h b/network/wlan/WDI/COMMON/MultiPorts.h deleted file mode 100644 index c249bf33..00000000 --- a/network/wlan/WDI/COMMON/MultiPorts.h +++ /dev/null @@ -1,273 +0,0 @@ - -#ifndef __INC_MULTIPORTS_H -#define __INC_MULTIPORTS_H - - -//============================================================================ -// All Type Port Supported -//============================================================================ - -#define GetDefaultAdapter(_Adapter) ((_Adapter)->pPortCommonInfo->pDefaultAdapter) -#define GetDefaultMgntInfo(_Adapter) ((PMGNT_INFO)&(GetDefaultAdapter(_Adapter)->MgntInfo)) -#define IsDefaultAdapter(_Adapter) (GetDefaultAdapter(_Adapter) == (_Adapter)) -#define GetAdapterByMgntInfo(_pMgntInfo) ((PADAPTER)(((pu1Byte)(_pMgntInfo)) - FIELD_OFFSET(ADAPTER, MgntInfo))) - -VOID -MultiPortSetAllPortsHWReadyStatus( - PADAPTER pAdapter, - BOOLEAN bReady -); - - -#if (MULTIPORT_SUPPORT == 1) - -//============================================================================ -// Multiple Port Supported -//============================================================================ - -#define GetFirstExtAdapter(_Adapter) GetNextExtAdapter(GetDefaultAdapter(_Adapter)) -#define IsFirstGoAdapter(_Adapter) (_Adapter==GetFirstGOPort(_Adapter)) - -typedef struct _MULTIPORT_COMMON_CONTEXT { - - // Only for active extension adapters - u1Byte uNumberOfActiveExtAdapters; - - // For default port only: The RFDs will be used to clone the input RFDs (no physical shared memory allocated). - MEMORY_BUFFER CloneRfdMemoryBuffer; // The memory for the allocated RFD structures - u4Byte uNumberOfCloneRfds; // The total number of Clone RFDs - - RT_LIST_ENTRY CloneRfdIdleQueue; - u4Byte uCloneRfdIdleQueueSize; - - RT_LIST_ENTRY CloneRfdBusyQueue; - u4Byte uCloneRfdBusyQueueSize; - -} MULTIPORT_COMMON_CONTEXT, *PMULTIPORT_COMMON_CONTEXT; - -#define MULTIPORT_SIZE_OF_COMMON_CONTEXT sizeof(MULTIPORT_COMMON_CONTEXT) - - - -typedef struct _MULTIPORT_PORT_CONTEXT { - - RT_LIST_ENTRY MultiList; - BOOLEAN bActiveAdapter; - PADAPTER pAdapter; -} MULTIPORT_PORT_CONTEXT, *PMULTIPORT_PORT_CONTEXT; - -#define MULTIPORT_SIZE_OF_PORT_CONTEXT sizeof(MULTIPORT_PORT_CONTEXT) - - - -BOOLEAN -IsActiveAPModeExist( - PADAPTER Adapter -); - -BOOLEAN -IsAPModeExist( - PADAPTER Adapter -); - -BOOLEAN -IsExtAPModeExist( - PADAPTER Adapter - ); - -BOOLEAN -IsCloneRFD( - PADAPTER pAdapter, - PRT_RFD pRfd -); - -BOOLEAN -IsDevicePortDiscoverable( - PADAPTER pAdapter -); - -PADAPTER -GetNextExtAdapter( - PADAPTER pAdapter - ); - -PADAPTER -GetFirstAPAdapter( - PADAPTER pAdapter -); - -PADAPTER -GetFirstDevicePort( - PADAPTER pAdapter -); - -PADAPTER -GetFirstGOPort( - PADAPTER pAdapter -); - -PADAPTER -GetFirstClientPort( - PADAPTER pAdapter -); - -PADAPTER -MultiPortGetIdleExtAdapter( - PADAPTER pAdapter -); - -PADAPTER -MultiPortRemoveExtAdapter( - PADAPTER pAdapter -); - -BOOLEAN -MultiPortInsertIntoTargetAdapterList( - IN PADAPTER TargetAdapter, - OUT PADAPTER TargetList[], - OUT pu4Byte puCurrentTarget, - IN u4Byte uMaxTarget -); - -u4Byte -MultiPortGetTargetAdapterList( - PADAPTER pAdapter, - PRT_RFD pRfd, - OCTET_STRING osFrame, - PADAPTER TargetList[], - u4Byte uMaxTarget -); - -PADAPTER -MultiPortFeedPacketToMultipleAdapter( - PADAPTER pAdapter, - PRT_RFD pRfd -); - -VOID -MultiPortReturnCloneRFD( - PADAPTER pAdapter, - PRT_RFD pRfd -); - -VOID -MultiPortDumpPortStatus( - PADAPTER pAdapter -); - -RT_STATUS -MultiPortAllocateCloneRfdBuffer( - PADAPTER pAdapter, - PRT_RFD pRfd -); - -VOID -MultiPortReleaseCloneRfdBuffer( - PRT_RFD pRfd -); - -VOID -MultiPortInitializeCloneRfdQueue( - PADAPTER pAdapter -); - -RT_STATUS -MultiPortPrepareCloneRfd( - PADAPTER pAdapter -); - -VOID -MultiPortFreeCloneRfd( - PADAPTER pAdapter -); - -VOID -MultiPortInitializeContext( - PADAPTER pDefaultAdapter -); - - -BOOLEAN -MultiPortCanCheckCheckBssid( - PADAPTER pAdapter -); - -VOID -MultiPortInsertIdleExtAdapter( - PADAPTER pDefaultAdapter, - PADAPTER pAdapter -); - -VOID -MultiPortChangeExtAdapterActiveState( - PADAPTER pAdapter, - BOOLEAN bActive -); - -u4Byte -MultiPortGetNumberOfActiveExtAdapters( - PADAPTER pAdapter -); - -BOOLEAN -MultiPortIsPreallocatedExtAdapterExist( - PADAPTER pDefaultAdapter -); - -BOOLEAN -MultiPortIsActiveExtAdapter( - PADAPTER pAdapter -); -BOOLEAN -IsMultiPortAllowDisableHWSecurity( - PADAPTER Adapter - ); - -u8Byte -MultiportGetLastConnectionActionTime( - IN PADAPTER pAdapter - ); - -#else - -//============================================================================ -// Single Port Supported -//============================================================================ - -#define IsActiveAPModeExist(_Adapter) AP_DetermineAlive(_Adapter) -#define IsAPModeExist(_Adapter) ACTING_AS_AP(_Adapter) -#define IsExtAPModeExist(_Adapter) FALSE -#define IsDevicePortDiscoverable(_pAdapter) FALSE -#define IsCloneRFD(_pAdapter, _pRfd) FALSE -#define IsFirstGoAdapter(_Adapter) FALSE - -#define GetFirstAPAdapter(_Adapter) (ACTING_AS_AP(_Adapter) ? (_Adapter) : NULL) -#define GetFirstExtAdapter(_Adapter) NULL -#define GetFirstDevicePort(_Adapter) NULL -#define GetFirstGOPort(_Adapter) NULL -#define GetFirstClientPort(_Adapter) NULL -#define GetNextExtAdapter(_Adapter) NULL - -#define MultiPortAllocateCloneRfdBuffer(_pAdapter, _pRfd) RT_STATUS_FAILURE -#define MultiPortReleaseCloneRfdBuffer(_pRfd) -#define MultiPortReturnCloneRFD(_pAdapter, _pRfd) -#define MultiPortRemoveExtAdapter(_pAdapter) NULL -#define MultiPortInitializeContext(_pAdapter) -#define MultiPortCanCheckCheckBssid(_pAdapter) TRUE -#define MultiPortIsPreallocatedExtAdapterExist(_Adapter) FALSE -#define MultiPortInsertIdleExtAdapter(_pDefaultAdapter, _pAdapter) -#define MultiPortChangeExtAdapterActiveState(_pAdapter, _bActive) -#define MultiPortGetNumberOfActiveExtAdapters(_pAdapter) 0 -#define MultiPortIsActiveExtAdapter(_pAdapter) FALSE -#define IsMultiPortAllowDisableHWSecurity(_pAdapter) TRUE -#define MultiportGetLastConnectionActionTime(_pAdapter)((_pAdapter)->LastConnectionActionTime) -#endif - - -VOID -MultiportRecordLastScanTime( - IN PADAPTER pAdapter -); - - -#endif diff --git a/network/wlan/WDI/COMMON/OffChnlTx.h b/network/wlan/WDI/COMMON/OffChnlTx.h deleted file mode 100644 index bb673183..00000000 --- a/network/wlan/WDI/COMMON/OffChnlTx.h +++ /dev/null @@ -1,178 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_OFF_CHNL_TX_H -#define __INC_OFF_CHNL_TX_H - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- - -#define OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_CHNL_HIT BIT0 -#define OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_SENT BIT1 -#define OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_ACKED BIT2 - -#define OFF_CHNL_TX_PER_REQ_FLAG_RETRY BIT0 -#define OFF_CHNL_TX_PER_REQ_FLAG_COMPLETED BIT1 - -typedef struct _OFF_CHNL_TX_STATUS_FLAG -{ - u4Byte perTxAttemptFlag; - u4Byte perReqFlag; -}OFF_CHNL_TX_STATUS_FLAG; - -typedef enum _OFF_CHNL_TX_STATE -{ - OFF_CHNL_TX_STATE_CHNL_HIT = 0, - OFF_CHNL_TX_STATE_COMPLETE, - OFF_CHNL_TX_STATE_PRE_DESTROY, - OFF_CHNL_TX_STATE_RETRY, - OFF_CHNL_TX_STATE_FRAME_SENT, -}OFF_CHNL_TX_STATE; - -typedef -VOID -(*OFF_CHNL_TX_STATE_CB) -( - IN VOID *req, - IN int state, - IN VOID *pCtx -); - -//----------------------------------------------------------------------------- -// Function, process -//----------------------------------------------------------------------------- - -VOID * -OffChnlTx_AllocReq( - IN ADAPTER *pAdapter, - IN const u1Byte *mac, - IN OFF_CHNL_TX_STATE_CB stateCb, - IN VOID *stateCtx, - IN u4Byte cliRsvdLen - ); - -RT_STATUS -OffChnlTx_IssueReq( - IN ADAPTER *pAdapter, - IN VOID *req, - IN const char *typeInfo - ); - -RT_STATUS -OffChnlTx_AbortReq( - IN ADAPTER *pAdapter - ); - -//----------------------------------------------------------------------------- -// Function, setter -//----------------------------------------------------------------------------- -VOID -OffChnlTx_SetupCbCtx( - IN VOID *req, - IN OFF_CHNL_TX_STATE_CB stateCb, - IN VOID *stateCtx - ); - -FRAME_BUF * -OffChnlTx_GetTxFrameBuf( - IN VOID *req - ); - -FRAME_BUF * -OffChnlTx_GetProbeReqBuf( - IN VOID *req - ); - -RT_STATUS -OffChnlTx_SetProbeEnabled( - IN VOID *req, - IN BOOLEAN bEnableProbe - ); - -FRAME_BUF * -OffChnlTx_GetProbeReqBuf( - IN VOID *req - ); - -RT_STATUS -OffChnlTx_SetPostSearchListeningEnabled( - IN VOID *req, - IN BOOLEAN bEnablePostSeachListening, - IN u1Byte chnl, - IN u4Byte duration - ); - -RT_STATUS -OffChnlTx_SetTxChnl( - IN VOID *req, - IN u1Byte txChnl - ); - -u1Byte -OffChnlTx_GetTxChnl( - IN VOID *req - ); - -RT_STATUS -OffChnlTx_SetTxAttemptCount( - IN VOID *req, - IN u1Byte attemptCount - ); - -RT_STATUS -OffChnlTx_SetTimeBound( - IN VOID *req, - IN u4Byte timeBound - ); - -RT_STATUS -OffChnlTx_SetPostAckDwellTime( - IN VOID *req, - IN u4Byte postAckDwellTime - ); - -RT_STATUS -OffChnlTx_SetRetryIntermittentTime( - IN VOID *req, - IN u4Byte retryIntermittentTime - ); - -RT_STATUS -OffChnlTx_SetDataRate( - IN VOID *req, - IN u1Byte dataRate - ); - -OFF_CHNL_TX_STATUS_FLAG -OffChnlTx_GetTxStatusFlag( - IN VOID *req - ); - -RT_STATUS -OffChnlTx_SkipProbeTemporarilly( - IN VOID *req - ); - -VOID * -OffChnlTx_GetCliRsvdBuf( - IN VOID *req - ); - -RT_STATUS -OffChnlTx_SetShtPostAckDwellOnPositivelyAcked( - IN VOID *req, - IN u1Byte bShutPostAckDwellOnPositivelyAcked - ); - -//----------------------------------------------------------------------------- -// Function, dbg -//----------------------------------------------------------------------------- - -#endif // #ifndef __INC_OFF_CHNL_TX_H diff --git a/network/wlan/WDI/COMMON/P2P.c b/network/wlan/WDI/COMMON/P2P.c deleted file mode 100644 index 2e456fc4..00000000 --- a/network/wlan/WDI/COMMON/P2P.c +++ /dev/null @@ -1,13380 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -u8Byte RTL_P2P_AllocateMemory_count ; -u8Byte RTL_P2P_FreeMemory_count ; -u8Byte RTL_P2P_AllocateMemory_Len; -u8Byte RTL_P2P_FreeMemory_Len; - -//====================================================================== -// Wi-Fi Direct Start -//====================================================================== - -static u1Byte BroadcastAddress[6]={0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - -static u1Byte P2PSocialChannels[] = -{ - 1, - 6, - 11, -}; - -static u1Byte P2PWildcardSsid[] = {'D', 'I', 'R','E', 'C', 'T', '-'}; - -//====================================================================== -// Private Functions (Starting from Win8) (Keyword Static) -//====================================================================== - - -static BOOLEAN -P2PAdapterAcceptActionFrame( - PADAPTER pAdapter, - OCTET_STRING osPacket -) -{ - BOOLEAN bReturnValue = FALSE; - ACT_PKT_TYPE pktType = PacketGetActionFrameType(&osPacket); - - switch(pktType) - { - default: - break; - - // For Win8, these P2P handshake packets shall transfer to the device port. - case ACT_PKT_P2P_GO_NEG_REQ: - case ACT_PKT_P2P_GO_NEG_RSP: - case ACT_PKT_P2P_GO_NEG_CONF: - case ACT_PKT_P2P_PROV_DISC_REQ: - case ACT_PKT_P2P_PROV_DISC_RSP: - case ACT_PKT_P2P_INVIT_REQ: - case ACT_PKT_P2P_INVIT_RSP: - if(GET_P2P_INFO(pAdapter)->Role == P2P_DEVICE) bReturnValue = TRUE; // NOT Ready: - break; - } - - return bReturnValue; -} - - -static BOOLEAN -P2PAdapterAcceptMgntFrame( - PADAPTER pAdapter, - OCTET_STRING osPacket -) -{ - // Accept all management frames - - BOOLEAN bStatus = FALSE; - - switch(P2P_FRAME_GET_TYPE(osPacket.Octet)) - { - case Type_Probe_Req: - case Type_Probe_Rsp: - case Type_Beacon: - case Type_Asoc_Req: - case Type_Reasoc_Req: - case Type_Asoc_Rsp: - case Type_Reasoc_Rsp: - case Type_Deauth: - case Type_Disasoc: - bStatus = TRUE; - break; - } - - return bStatus; -} - -BOOLEAN -P2PAdapterAcceptFrame( - PADAPTER pAdapter, - OCTET_STRING osPacket -) -{ - BOOLEAN bStatus = FALSE; - - if(IsMgntAction(osPacket.Octet)) - { - bStatus = P2PAdapterAcceptActionFrame(pAdapter, osPacket); - } - else if(IsMgntFrame(osPacket.Octet)) - { - bStatus = P2PAdapterAcceptMgntFrame(pAdapter, osPacket); - } - - return bStatus; -} - -// The operations of the structure MEMORY_BUFFER -static VOID -P2PMemoryBufferFree( - PMEMORY_BUFFER pMemoryBuffer -) -{ - if(pMemoryBuffer->Length > 0) - { - PlatformFreeMemory(pMemoryBuffer->Buffer, pMemoryBuffer->Length); - - RTL_P2P_FreeMemory_count++; - RTL_P2P_FreeMemory_Len += pMemoryBuffer->Length; - } - - PlatformZeroMemory(pMemoryBuffer, sizeof(MEMORY_BUFFER)); - pMemoryBuffer->Length = 0; -} - -// The operations of the structure MEMORY_BUFFER -static BOOLEAN -P2PMemoryBufferClone( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pDestination, - PMEMORY_BUFFER pSource -) -{ - BOOLEAN bStatus = FALSE; - RT_STATUS rtStatus = RT_STATUS_FAILURE; - - if(pDestination->Length > 0) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: With Unloaded Memory!\n", __FUNCTION__)); - bStatus = FALSE; - } - else if(pSource->Length > 0 && pSource->Buffer == NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Illegal Source Memory!\n", __FUNCTION__)); - bStatus = FALSE; - } - else if(pSource->Length == 0) - { - *pDestination = *pSource; - bStatus = TRUE; - } - else - { - rtStatus = PlatformAllocateMemory( - pP2PInfo->pAdapter, - &pDestination->Buffer, - pSource->Length - ); - - if(rtStatus == RT_STATUS_SUCCESS) - { - pDestination->Length = pSource->Length; - - PlatformMoveMemory( - pDestination->Buffer, - pSource->Buffer, - pDestination->Length - ); - - bStatus = TRUE; - - RTL_P2P_AllocateMemory_count ++; - RTL_P2P_AllocateMemory_Len += pSource->Length; - } - else - { - PlatformZeroMemory(pDestination, sizeof(MEMORY_BUFFER)); - pDestination->Length = 0; - bStatus = FALSE; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - } - } - - return bStatus; -} - - -// The operations of the structure MEMORY_BUFFER -static BOOLEAN -P2PMemoryBufferCopy( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pDestination, - PMEMORY_BUFFER pSource -) -{ - BOOLEAN bStatus = FALSE; - RT_STATUS rtStatus = RT_STATUS_FAILURE; - - if(pDestination->Length > 0 && pSource->Length > 0) - { - if(pDestination->Length == pSource->Length) - { - if(PlatformCompareMemory(pDestination->Buffer, pSource->Buffer, pSource->Length) != 0) - CopyMem(pDestination->Buffer, pSource->Buffer, pSource->Length); - bStatus = TRUE; - } - } - - return bStatus; -} - - -static VOID -P2PDeviceListDump( - PP2P_DEVICE_LIST pDeviceList -) -{ - u4Byte i = 0; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("\n")); - - for(i = 0; i < pDeviceList->uNumberOfDevices; i++) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("=======================================================\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("DeviceList: Entry(%u)\n", i)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("=======================================================\n")); - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "MacAddress: ", pDeviceList->DeviceEntry[i].MacAddress); - if(pDeviceList->DeviceEntry[i].DeviceAddress != NULL) - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "DeviceAddress: ", pDeviceList->DeviceEntry[i].DeviceAddress); - RT_TRACE(COMP_P2P, DBG_LOUD, ("ChannelNumber: %d\n", pDeviceList->DeviceEntry[i].ChannelNumber)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("RecvSignalPower: %d\n", pDeviceList->DeviceEntry[i].RecvSignalPower)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("SignalStrength: %d\n", pDeviceList->DeviceEntry[i].SignalStrength)); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("ProbeResponseHostTimestamp: 0x%08X%08X\n", - (u4Byte)(pDeviceList->DeviceEntry[i].ProbeResponseHostTimestamp >> 32), - (u4Byte) pDeviceList->DeviceEntry[i].ProbeResponseHostTimestamp) - ); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("BeaconHostTimestamp: 0x%08X%08X\n", - (u4Byte)(pDeviceList->DeviceEntry[i].BeaconHostTimestamp >> 32), - (u4Byte) pDeviceList->DeviceEntry[i].BeaconHostTimestamp) - ); - } - RT_TRACE(COMP_P2P, DBG_LOUD, ("=======================================================\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Totally %d items in Device List dumped\n", i)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("=======================================================\n")); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("\n")); -} - -// Indicate Fake Invitation rsp frame to OS and make the state machine in OS go to next state. -// -BOOLEAN -P2PIndicateFakeInvitRsp( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_GEN_TEMP_BUFFER pGenBuf = NULL; - PP2P_DEVICE_LIST_ENTRY pListEntry = NULL; - OCTET_STRING osWFDIE, osProbeRspPkt; - FRAME_BUF fbuf; - - pListEntry = P2PDeviceListFind(&pP2PInfo->DeviceList, pP2PInfo->InvitationContext.InvitedDevice.DeviceAddress); - if(pListEntry == NULL) - { - return FALSE; - } - - if(NULL == (pGenBuf = GetGenTempBuffer(pAdapter, GEN_TEMP_BUFFER_SIZE))) - { - RT_TRACE_F(COMP_WFD, DBG_SERIOUS, ("[ERROR] Memory allocation failed!\n")); - return FALSE; - } - - FrameBuf_Init(GEN_TEMP_BUFFER_SIZE, 0, (pu1Byte)pGenBuf->Buffer.Ptr, &fbuf); - - // MAC Header - p2p_add_ActionFrameMacHdr(&fbuf, pP2PInfo->DeviceAddress, pP2PInfo->InvitationContext.InvitedDevice.DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(&fbuf, P2P_INVITATION_RSP, pP2PInfo->InvitationContext.DialogToken); - - // P2P IE - p2p_build_FakeInvitationRspIe(&fbuf, pP2PInfo, pP2PInfo->InvitationContext.InvitedDevice.DeviceAddress); - - FillOctetString(osProbeRspPkt, pListEntry->ProbeResponsePacket.Buffer, (u2Byte)pListEntry->ProbeResponsePacket.Length); - - osWFDIE = PacketGetElement(osProbeRspPkt, EID_Vendor, OUI_SUB_WIFI_DISPLAY, OUI_SUB_DONT_CARE); - - if(osWFDIE.Length > 0) - { - PacketMakeElement(&fbuf.os, EID_Vendor, osWFDIE); - } - - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_INVITATION_RESPONSE, - RT_STATUS_SUCCESS, - fbuf.os.Octet, - fbuf.os.Length); - - ReturnGenTempBuffer(pAdapter, pGenBuf); - return TRUE; -} - - -static VOID -P2PDeviceListClear( - PP2P_DEVICE_LIST pDeviceList -) -{ - u4Byte i = 0; - - for(i = 0; i < pDeviceList->uNumberOfDevices; i++) - { - P2PMemoryBufferFree(&pDeviceList->DeviceEntry[i].ProbeResponsePacket); - P2PMemoryBufferFree(&pDeviceList->DeviceEntry[i].BeaconPacket); - } - - PlatformZeroMemory(pDeviceList, sizeof(P2P_DEVICE_LIST)); -} - -PP2P_DEVICE_LIST_ENTRY -P2PDeviceListFind( - IN PP2P_DEVICE_LIST pDeviceList, - IN pu1Byte pMacAddress -) -{ - u4Byte i = 0; - - for(i = 0; i < pDeviceList->uNumberOfDevices; i++) - { - if(eqMacAddr(pDeviceList->DeviceEntry[i].MacAddress, pMacAddress)) - { - return &pDeviceList->DeviceEntry[i]; - } - } - - return NULL; -} - -static BOOLEAN -P2PDeviceListInsertTail( - IN PP2P_INFO pP2PInfo, - OUT PP2P_DEVICE_LIST pDeviceList, - IN PRT_RFD pRfd, - IN pu1Byte pMacAddress, - IN pu1Byte pDeviceAddress, - IN MEMORY_BUFFER mbPacket -) -{ -// PMGNT_INFO pMgntInfo = &pP2PInfo->pAdapter->MgntInfo; - BOOLEAN bStatus = FALSE; - u1Byte index = pDeviceList->uNumberOfDevices; - pu1Byte header = (pu1Byte) mbPacket.Buffer; - - if(index < P2P_MAX_DEVICE_LIST) - { - cpMacAddr(pDeviceList->DeviceEntry[index].MacAddress, pMacAddress); - - if(pDeviceAddress) cpMacAddr(pDeviceList->DeviceEntry[index].DeviceAddress, pDeviceAddress); - - pDeviceList->DeviceEntry[index].ChannelNumber= P2PGetChannel(pP2PInfo); - - pDeviceList->DeviceEntry[index].RecvSignalPower = pRfd->Status.RecvSignalPower; - pDeviceList->DeviceEntry[index].SignalStrength= pRfd->Status.SignalStrength; - - - if(IsMgntProbeRsp(header)) - { - pDeviceList->DeviceEntry[index].ProbeResponseHostTimestamp = PlatformGetCurrentTime(); - bStatus = P2PMemoryBufferClone(pP2PInfo, &pDeviceList->DeviceEntry[index].ProbeResponsePacket, &mbPacket); - } - else if(IsMgntBeacon(header)) - { - pDeviceList->DeviceEntry[index].BeaconHostTimestamp = PlatformGetCurrentTime(); - bStatus = P2PMemoryBufferClone(pP2PInfo, &pDeviceList->DeviceEntry[index].BeaconPacket, &mbPacket); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Wrong Mgnt Packet Type \n", __FUNCTION__)); - return FALSE; - } - - if(bStatus) - { - pDeviceList->uNumberOfDevices++; - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Clone Failure!\n", __FUNCTION__)); - } - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Size Limit Reached!\n", __FUNCTION__)); - } - - return bStatus; -} - -static BOOLEAN -P2PGetWpsSelectedRegistrar( - OCTET_STRING osWpsIE -) -{ - u1Byte WPS_OUI[] = {0x00, 0x50, 0xF2, 0x04}; - u4Byte offset = 0; - u1Byte SelectedRegistrarID[] = {0x10, 0x41}; - - if(!eqNByte(osWpsIE.Octet, WPS_OUI, sizeof(WPS_OUI))) - { - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Not a valid good WPS IE!\n", osWpsIE.Octet, osWpsIE.Length); - return FALSE; - } - - offset += sizeof(WPS_OUI); - - while(offset + 4 < osWpsIE.Length) - { - if(eqNByte(osWpsIE.Octet + offset, SelectedRegistrarID, sizeof(SelectedRegistrarID))) - { - // Length 2 Bytes and ID 2 Bytes - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Found: WpsSelectedRegistrar: %d\n", __FUNCTION__, osWpsIE.Octet[offset + 4])); - return (BOOLEAN)(osWpsIE.Octet[offset + 4]); - } - - // Length 2 Bytes and ID 2 Bytes - offset += 4 + P2P_WPS_ATTR_READ_EF_2_BYTE(osWpsIE.Octet + offset + 2); - } - - return FALSE; -} - -static VOID -P2PDeviceListUpdate ( - IN PP2P_INFO pP2PInfo, - OUT PP2P_DEVICE_LIST pDeviceList, - IN PRT_RFD pRfd, - IN pu1Byte pMacAddress, - IN pu1Byte pDeviceAddress, - IN MEMORY_BUFFER mbPacket -) -{ - PP2P_DEVICE_LIST_ENTRY pListEntry = NULL; - BOOLEAN bStatus = FALSE; - MEMORY_BUFFER mbObject = {NULL, 0}; - pu1Byte header = (pu1Byte) mbPacket.Buffer; - - -#if 0 // Debug MAC Address Filter -{ - #define MAX_MAX_FILTER 10 - - u1Byte Macfilter[MAX_MAX_FILTER][6] = { - {0x00, 0xe0, 0x4c, 0x78, 0x01, 0x1c}, - {0x00, 0xe0, 0x4c, 0x78, 0x00, 0x02}, - {0x00, 0xe0, 0x4c, 0x00, 0xf0, 0x2b}, - {0x00, 0xe0, 0x4c, 0x00, 0x50, 0x2b} - }; - - BOOLEAN update = TRUE; - u1Byte i = 0; - - for(i = 0; i < MAX_MAX_FILTER; i++) - { - if(eqMacAddr(pMacAddress, Macfilter[i])) - update = FALSE; - } - - if(update == FALSE) return; -} -#endif - - - // For the OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST and OID_DOT11_WFD_GROUP_START_PARAMETERS ------------------------- - if(P2P_CLIETN_JOIN_GROUP_WPS_STATE_SCANNING == pP2PInfo->ClientJoinGroupContext.WpsState) - { - OCTET_STRING osPacket = {mbPacket.Buffer, (u2Byte) mbPacket.Length}; - OCTET_STRING osSsid = {NULL, 0}; - OCTET_STRING osWpsIE = {NULL, 0}; - - osSsid = PacketGetElement(osPacket, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(CompareSSID(pP2PInfo->GroupTargetSSID, (u2Byte) pP2PInfo->uGroupTargetSSIDLength, osSsid.Octet, osSsid.Length)) - { - osWpsIE = PacketGetElement(osPacket, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUB_DONT_CARE); - - if(osWpsIE.Length != 0 && P2PGetWpsSelectedRegistrar(osWpsIE) == TRUE) - { - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Target GO WPS IE:\n", osWpsIE.Octet, osWpsIE.Length); - // Mark the WPS of the target is ready to join - pP2PInfo->ClientJoinGroupContext.WpsState = P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY; - P2PScanListCeaseScan(pP2PInfo); - } - else - { - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Target GO WPS IE: No Found! Keep waiting!\n", osWpsIE.Octet, osWpsIE.Length); - } - } - } - // -------------------------------------------------------------------------------------------------------------------- - - - pListEntry = P2PDeviceListFind(pDeviceList, pMacAddress); - - if(pListEntry == NULL) - { - bStatus = P2PDeviceListInsertTail(pP2PInfo, pDeviceList, pRfd, pMacAddress, pDeviceAddress, mbPacket); - - if(bStatus == FALSE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Insert Tail Failure!\n", __FUNCTION__)); - } - } - else - { - // Fill the list entry structure - if(pDeviceAddress) cpMacAddr(pListEntry->DeviceAddress, pDeviceAddress); - - - {// Query for the Correct Channel Information - OCTET_STRING osPacket = {mbPacket.Buffer, (u2Byte) mbPacket.Length}; - OCTET_STRING DsPmBeacon = {NULL, 0}; - - DsPmBeacon = PacketGetElement(osPacket, EID_DSParms, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(DsPmBeacon.Length != 0) - { - pListEntry->ChannelNumber= EF1Byte( *(u1Byte *)(DsPmBeacon.Octet) ); - } - else - { - pListEntry->ChannelNumber= RT_GetChannelNumber(pP2PInfo->pAdapter); - } - } - - - pListEntry->RecvSignalPower = pRfd->Status.RecvSignalPower; - pListEntry->SignalStrength= pRfd->Status.SignalStrength; - - if(IsMgntProbeRsp(header)) - { - pListEntry->ProbeResponseHostTimestamp = PlatformGetCurrentTime(); - - bStatus = P2PMemoryBufferCopy(pP2PInfo, &pListEntry->ProbeResponsePacket, &mbPacket); - - if(!bStatus) - { - bStatus = P2PMemoryBufferClone(pP2PInfo, &mbObject, &mbPacket); - - if(bStatus == TRUE) - { - P2PMemoryBufferFree(&pListEntry->ProbeResponsePacket); - pListEntry->ProbeResponsePacket = mbObject; - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Clone Failure!\n", __FUNCTION__)); - } - } - } - else if(IsMgntBeacon(header)) - { - pListEntry->BeaconHostTimestamp = PlatformGetCurrentTime(); - - bStatus = P2PMemoryBufferCopy(pP2PInfo, &pListEntry->BeaconPacket, &mbPacket); - - if(!bStatus) - { - bStatus = P2PMemoryBufferClone(pP2PInfo, &mbObject, &mbPacket); - - if(bStatus == TRUE) - { - P2PMemoryBufferFree(&pListEntry->BeaconPacket); - pListEntry->BeaconPacket= mbObject; - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Clone Failure!\n", __FUNCTION__)); - } - } - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Wrong Mgnt Packet Type \n", __FUNCTION__)); - } - } -} - -static VOID -P2PDeviceListCopyWithTimeStamp( - IN PP2P_INFO pP2PInfo, - OUT PP2P_DEVICE_LIST pDestination, - IN PP2P_DEVICE_LIST pSource -) -{ - u4Byte i = 0; //source - u4Byte j = 0; //destination - - u4Byte usTimeoutLimit = 3 * 60 * 1000 * 1000; // 3 minutes - - BOOLEAN bBeaconStatus = FALSE; - BOOLEAN bProbeResponseStatus = FALSE; - - MEMORY_BUFFER mbBeacon = {NULL, 0}; - MEMORY_BUFFER mbProbeResponse = {NULL, 0}; - - u8Byte usCurrentTime = PlatformGetCurrentTime(); - u8Byte usMaxHostTimestamp = 0; - - P2PDeviceListClear(pDestination); - - pDestination->uNumberOfDevices = 0; - - for(i = 0; i < pSource->uNumberOfDevices; i++) - { - - // Remove the stale device item ---------------------------------------------------------- - // + Find MAX - usMaxHostTimestamp = MAX( - pSource->DeviceEntry[i].BeaconHostTimestamp, - pSource->DeviceEntry[i].ProbeResponseHostTimestamp - ); - - // + Check the timestamp - if(usCurrentTime - usMaxHostTimestamp > usTimeoutLimit) - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: usCurrentTime: %lld\n", __FUNCTION__, usCurrentTime)); - //RT_TRACE(COMP_P2P, DBG_LOUD, ("usMaxHostTimestamp: %lld\n", usMaxHostTimestamp)); - //RT_TRACE(COMP_P2P, DBG_LOUD, ("usCurrentTime - usMaxHostTimestamp: %lld, usTimeoutLimit: %d\n", - // usCurrentTime - usMaxHostTimestamp, usTimeoutLimit) - // ); - - continue; - } - // ----------------------------------------------------------------------------------- - - bBeaconStatus = FALSE; - bProbeResponseStatus = FALSE; - - pDestination->DeviceEntry[j] = pSource->DeviceEntry[i]; - - // Beacon Packet - PlatformZeroMemory( - &pDestination->DeviceEntry[j].BeaconPacket, - sizeof(MEMORY_BUFFER) - ); - - PlatformZeroMemory(&mbBeacon , sizeof(MEMORY_BUFFER)); - bBeaconStatus = P2PMemoryBufferClone(pP2PInfo, &mbBeacon, &pSource->DeviceEntry[i].BeaconPacket); - - - // Probe Response Packet - PlatformZeroMemory( - &pDestination->DeviceEntry[j].ProbeResponsePacket, - sizeof(MEMORY_BUFFER) - ); - - PlatformZeroMemory(&mbProbeResponse , sizeof(MEMORY_BUFFER)); - bProbeResponseStatus = P2PMemoryBufferClone(pP2PInfo, &mbProbeResponse, &pSource->DeviceEntry[i].ProbeResponsePacket); - - - // Successful - if(bBeaconStatus && bProbeResponseStatus) - { - pDestination->DeviceEntry[j].BeaconPacket = mbBeacon; - pDestination->DeviceEntry[j].ProbeResponsePacket= mbProbeResponse; - - j++; - pDestination->uNumberOfDevices = (u1Byte) j; - } - else - { - // Error Recovery - if(bBeaconStatus == TRUE) - { - P2PMemoryBufferFree(&mbBeacon); - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Beacon Memory Clone Failure!\n", __FUNCTION__)); - } - if(bProbeResponseStatus == TRUE) - { - P2PMemoryBufferFree(&mbProbeResponse); - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Probe Response Memory Clone Failure!\n", __FUNCTION__)); - } - } - } -} - -//====================================================================== -// P2P Utility -//====================================================================== -PADAPTER -P2PGetGoAdapter( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - - RT_AP_TYPE DefApType = MgntActQuery_ApType(GetDefaultAdapter(pAdapter)); - RT_AP_TYPE ExtApType = MgntActQuery_ApType(GetFirstExtAdapter(pAdapter)); - - if(P2P_GO != pP2PInfo->Role) return pAdapter; - - //RT_ASSERT(!(0 < DefApType && 0 < ExtApType), ("Both Default port and ext port are acting as AP\n")); - //RT_ASSERT(!(0 == DefApType && 0 == ExtApType), ("Both Default port and ext port are NOT acting as AP but role is GO\n")); - - return (0 < DefApType) ? (GetDefaultAdapter(pAdapter)) : (GetFirstExtAdapter(pAdapter)); -} - -BOOLEAN -P2PIsN24GSupported( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pDefAdapter = pP2PInfo->pAdapter; - u2Byte SupportedWirelessMode = pDefAdapter->HalFunc.GetSupportedWirelessModeHandler(pDefAdapter); - - //RT_TRACE(COMP_P2P, DBG_LOUD, - // ("P2PIsN24GSupported(): SupportedWirelessMode: %u\n", - // SupportedWirelessMode)); - - if(IS_24G_WIRELESS_MODE(SupportedWirelessMode)) - { - return TRUE; - } - else - { - return FALSE; - } -} - -VOID -P2PGOSetBeaconInterval( - IN PP2P_INFO pP2PInfo, - u2Byte u2BeaconPeriod - ) -{ - // Note that if under Win7, ext port is used and if not, - // ADJUST_TO_ADAPTIVE_ADAPTER(pAdapter, FALSE) - // always return the only one adapter. - PADAPTER pAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - // - // Note that if beacon interval is changed, - // it is not recovered by only re-enabled P2P mode. - // - if(u2BeaconPeriod != pMgntInfo->dot11BeaconPeriod) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PGOSetBeaconInterval(): set beacon interval from (%u) to (%u)\n", - pMgntInfo->dot11BeaconPeriod, - u2BeaconPeriod)); - - pMgntInfo->Regdot11BeaconPeriod = u2BeaconPeriod; - pMgntInfo->dot11BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; - - pAdapter->HalFunc.SetHwRegHandler(pAdapter, - HW_VAR_BEACON_INTERVAL, - (pu1Byte)(&pMgntInfo->dot11BeaconPeriod)); - } -} - -BOOLEAN -P2PProvisioning( - IN PP2P_INFO pP2PInfo - ) -{ -#if (WPS_SUPPORT == 1) - PADAPTER pDefAdapter = GetDefaultAdapter(pP2PInfo->pAdapter); - - return GET_SIMPLE_CONFIG_ENABLED(&pDefAdapter->MgntInfo); -#endif - return FALSE; -} - -BOOLEAN -P2PDefaultPortConnected( - IN PP2P_INFO pP2PInfo -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pP2PInfo->pAdapter); - return (MgntLinkStatusQuery(pDefaultAdapter) == RT_MEDIA_CONNECT) ? (TRUE) : (FALSE); -} - -BOOLEAN -P2PIsSocialChannel( - IN u1Byte Channel - ) -{ - u1Byte i; - - for(i = 0; i < sizeof(P2PSocialChannels); i++) - { - if(P2PSocialChannels[i] == Channel) - { - return TRUE; - } - } - return FALSE; -} - -BOOLEAN -P2PTestU2SingleBitSet( - IN u2Byte u2Val - ) -{ - u2Byte i = sizeof(u2Byte) * 8; - u2Byte j; - BOOLEAN bHasBitSet = 0; - - for(j = 0; j < i; j++) - { - if(u2Val & 1) - { - if(bHasBitSet) - { - return FALSE; - } - else - { - bHasBitSet = 1; - } - } - u2Val = u2Val >> 1; - } - return TRUE; - -} - -u1Byte -P2PGetChannel( - IN PP2P_INFO pP2PInfo - ) -{ - return RT_GetChannelNumber(pP2PInfo->pAdapter); -} - -VOID -P2PSetChannel( - IN PP2P_INFO pP2PInfo, - IN u1Byte Channel - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - pAdapter->HalFunc.SwChnlByTimerHandler(pAdapter, Channel); -} - -VOID -P2PSetRole( - IN PP2P_INFO pP2PInfo, - IN P2P_ROLE Role - ) -{ - pP2PInfo->Role = Role; - P2PIndicateCurrentRole(pP2PInfo, Role); -} - -VOID -P2PSetOperatingState( - IN PP2P_INFO pP2PInfo - ) -{ - if(!P2P_ENABLED(pP2PInfo)) - { - return; - } - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); // P2P State is restored in this function. - } - - pP2PInfo->State = P2P_STATE_OPERATING; - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PSetOperatingState()\n")); -} - - -VOID -P2PStopResumeGOBeaconning( - IN PP2P_INFO pP2PInfo, - IN BOOLEAN bToStartBeaconning - ) -{ - // - // Sometimes beacon cant' resume immediately, - // so we don't do beacon stop/resume now or WPS - // is hare to get succeed. - // - return; -} -VOID -P2PGetRandomSeries( - IN u1Byte MinIndex, - IN u1Byte MaxIndex, - IN u1Byte nRandomSeriesToGen, - OUT pu1Byte SeriesBuf - ) -{ - u1Byte Hashed[20]; - u1Byte iRdm, interval; - u1Byte i; - - // Input check - interval = MaxIndex - MinIndex; - if( interval <= 0 ) - { - RT_ASSERT( FALSE, ("P2PGetRandomSeries(): Invalid Index!\n") ); - return; - } - - if(nRandomSeriesToGen > 20) - { - RT_ASSERT( FALSE, ("P2PGetRandomSeries(): nRandomSeriesToGen shall be less than 20!\n") ); - return; - } - - GetRandomBuffer(Hashed); - - for(i = 0; i < nRandomSeriesToGen; i++) - { - iRdm = *( (pu1Byte)Hashed + i); // usd first 1 bytes only - iRdm = iRdm % interval; // Now iRdm is in [0, interval) - iRdm += MinIndex; // Now iRdm is in [MinIndex, MaxIndex) - SeriesBuf[i] = iRdm; - } - - return; -} - -BOOLEAN -P2PGetRandomChars( - IN u1Byte nRandomCharToGen, - OUT char* SeriesBuf - ) -{ - // - // Get random num from upper case letters, lower case letters and numbers. - // Total possibility: 26+26+10 = 62 => index from 0 to 61 - // - - //int i = GetRandomNumber(0, 26 + 26 + 10); - u1Byte u1RandomArray[20]; - u1Byte i, j; - - if(nRandomCharToGen > 20) - { - return FALSE; - } - - // - // i to random char mapping: - // i = 0 to 9 => number - // i = 10 to 35 => lower case letter - // i = 36 to 61 => upper case letter - // - P2PGetRandomSeries(0, 26 + 26 + 10, nRandomCharToGen, u1RandomArray); - for(j = 0; j < nRandomCharToGen; j++) - { - char temp; - - i = u1RandomArray[j]; - - if(i >= 0 && i <= 9) - {// number - temp = '0' + (i); - } - else if(i >= 10 && i <= 35) - {// lower case - temp = 'a' + (i - 10); - } - else if(i >= 36 && i <= 61) - {// upper case - temp = 'A' + (i - 36); - } - else - { - return FALSE; - } - - SeriesBuf[j] = temp; - } - - return TRUE; -} - -BOOLEAN -P2PDetermineGOSsid( - IN PP2P_INFO pP2PInfo, - OUT pu1Byte SsidBuf, - OUT pu1Byte pSsidLen - ) -{ - // - // Clause 3.2.1: - // Each SSID shall begin with the ASCII characters "TBD-", - // where TBD is a short version of the technology name to - // be determined by the Marketing TG. This SSID requirement - // may enable users of Legacy Clients to differentiate between - // a P2P Group and an infrastructure network. - // - // Following "TBD-" the SSID shall contain two ASCII characters - // randomly selected with a unified distribution from the following character set: - // upper case letters, lower case letters and numbers. - // - // This SSID requirement makes the probability low that a Legacy Client - // encounters two P2P Groups with the same SSID and mistakenly - // attempt to roam between them. - // - static u1Byte P2PTechName[] = {'D', 'I', 'R','E', 'C', 'T', '-'}; - //static u1Byte P2PTechName[] = {'P', '2', 'P', '-'}; - char RandomChar[2]; - u1Byte index = 0; - - *pSsidLen = 0; - - if(RT_STATUS_SUCCESS == P2PSvc_DetermineGOSSID(pP2PInfo->pAdapter, SsidBuf, pSsidLen)) - { - return TRUE; - } - - if(pP2PInfo->regSSIDLen > 0) - { - // Note: - // This SSID may not include the prefix "DIRECT-" defined in P2P spec, but we do not - // limit and let our driver test by other SSIDs. - PlatformMoveMemory(SsidBuf, pP2PInfo->regSSIDBuf, pP2PInfo->regSSIDLen); - *pSsidLen = pP2PInfo->regSSIDLen; - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PDetermineGOSsid(): Using Reg SSID = \n", SsidBuf, *pSsidLen) - return TRUE; - } - - P2PGetRandomChars(2, RandomChar); - - // - // Copy P2PTechName and the 2 random series - // - *pSsidLen += (sizeof(P2PTechName) + sizeof(RandomChar)); - - PlatformMoveMemory(SsidBuf + index, P2PTechName, sizeof(P2PTechName)); - index += sizeof(P2PTechName); - - PlatformMoveMemory(SsidBuf + index, RandomChar, sizeof(RandomChar)); - index += sizeof(RandomChar); - - // - // Append SSID Postfix - // - *pSsidLen += (pP2PInfo->SSIDPostfixLen); - PlatformMoveMemory(SsidBuf + index, pP2PInfo->SSIDPostfixBuf, pP2PInfo->SSIDPostfixLen); - index += pP2PInfo->SSIDPostfixLen; - - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "P2PDetermineGOSsid(): Random SSID:\n", SsidBuf, *pSsidLen); - - return TRUE; - -} - -BOOLEAN -P2PIsWildcardSsid( - IN OCTET_STRING osSsid - ) -{ - u1Byte i; - if(osSsid.Length != sizeof(P2PWildcardSsid)) - { - return FALSE; - } - for(i = 0; i < sizeof(P2PWildcardSsid); i++) - { - if(osSsid.Octet[i] != P2PWildcardSsid[i]) - { - return FALSE; - } - } - return TRUE; -} - -BOOLEAN -P2PIsChnlInChnlList( - IN pu1Byte pChnlList, - IN u1Byte ChnlListSize, - IN u1Byte Chnl - ) -{ - u1Byte i; - - for(i = 0; i < ChnlListSize; i++) - { - if(pChnlList[i] == Chnl) - { - return TRUE; - } - } - return FALSE; -} - -BOOLEAN -P2PIsChnlInChnlEntryList( - IN P2P_CHANNELS *pChannelEntryList, - IN u1Byte Chnl - ) -{ - u1Byte i = 0, j = 0; - - for(i = 0; i < pChannelEntryList->regClasses; i++) - { - if(pChannelEntryList->regClass[i].channels> 0) - { - for(j = 0; j < pChannelEntryList->regClass[i].channels; j++) - { - if(Chnl == pChannelEntryList->regClass[i].channel[j]) - { - return TRUE; - } - } - } - } - - return FALSE; -} - -BOOLEAN -P2PIsDoingGroupFormation( - IN PP2P_INFO pP2PInfo - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PIsDoingGroupFormation(): state: %u, bPreGroupFormation: %u\n", - pP2PInfo->State, pP2PInfo->bPreGroupFormation)); - - if((pP2PInfo->State >= P2P_STATE_GO_NEGO_REQ_SEND && - pP2PInfo->State <= P2P_STATE_GO_NEGO_COMPLETE) || - pP2PInfo->bPreGroupFormation) - { - return TRUE; - } - return FALSE; -} - -OCTET_STRING -P2PWpsIEGetAttribute( - IN OCTET_STRING osWpsIEAttributes, - IN BOOLEAN bWpsAttributesInBE, - IN u2Byte Tag // note that this is BE - ) -{ - // - // Note that this function accepts osWpsIEAttributes in BE only. - // - u2Byte offset = 0; - u2Byte length = osWpsIEAttributes.Length; - OCTET_STRING ret={0, 0}; // used for return - u2Byte CurrentTag; - u2Byte CurrentLen; - BOOLEAN bTagMatched = FALSE; - - // - // Assumed format: - // [Tag (2) + Length (2) + Value (n)]* - // Return: - // OCTET_STRING: {pValue, Length} - // Example: get Device Name - // P2PWpsIEGetAttribute(osWpsAttributes, 0x1011) - // Will return a pointer to "Realtek xxx" and the length of the name - // - - do - { - if((offset + sizeof(CurrentTag) + sizeof(CurrentLen)) > length) - {// can't read Tag and Length - return ret; - } - - if(bWpsAttributesInBE) - {// BE - CurrentTag = N2H2BYTE(*((pu2Byte)(osWpsIEAttributes.Octet + offset))); - offset += sizeof(CurrentTag); - - CurrentLen = N2H2BYTE(*((pu2Byte)(osWpsIEAttributes.Octet + offset))); - offset += sizeof(CurrentLen); - } - else - {// LE - CurrentTag = ReadEF2Byte((pu2Byte)(osWpsIEAttributes.Octet + offset)); - offset += sizeof(CurrentTag); - - CurrentLen = ReadEF2Byte((pu2Byte)(osWpsIEAttributes.Octet + offset)); - offset += sizeof(CurrentLen); - } - - if(CurrentTag == Tag) - { - bTagMatched = TRUE; - } - - if(bTagMatched && (length >= offset + CurrentLen)) - { - FillOctetString(ret, osWpsIEAttributes.Octet + offset, CurrentLen); - break; - } - else - { - offset += CurrentLen; - } - }while(1); - - return ret; -} - -BOOLEAN -P2PDeviceTypeMatches( - IN PP2P_INFO pP2PInfo, - IN OCTET_STRING osWpsIE - ) -{ - OCTET_STRING ReqType; - OCTET_STRING osWpsAttributes; - u1Byte nRequestedDeviceTypeChecked = 0; - - if(osWpsIE.Octet && osWpsIE.Length > 4) - { - FillOctetString(osWpsAttributes, osWpsIE.Octet + 4, osWpsIE.Length - 4); // offset the OUI (4) - } - else - {// no Requested Device Type to check - return TRUE; - } - - do - { -#if P2P_WPS_ATTR_TRANSMITTED_USING_BE - ReqType = P2PWpsIEGetAttribute(osWpsAttributes, TRUE, P2P_WP2_ATTR_TAG_REQUESTED_DEVICE_TYPE); -#else - ReqType = P2PWpsIEGetAttribute(osWpsAttributes, FALSE, P2P_WP2_ATTR_TAG_REQUESTED_DEVICE_TYPE); -#endif - if(ReqType.Length == 2 + 4 + 2) // cat id(2) + oui(4) + sub cat id(2) = 8 - { - u2Byte CatId = P2P_WPS_ATTR_READ_EF_2_BYTE((pu2Byte)(ReqType.Octet)); - u2Byte SubCatId = P2P_WPS_ATTR_READ_EF_2_BYTE((pu2Byte)(ReqType.Octet + 2 + 4)); - - nRequestedDeviceTypeChecked++; - - // - // Check primary device type - // - if(CatId == pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId && - SubCatId == pP2PInfo->WpsAttributes.PrimaryDeviceType.SubCategoryId) - { - return TRUE; - } - else - { - // - // Check secondary device types - // - u1Byte i; - for(i = 0; i < pP2PInfo->WpsAttributes.SecondaryDeviceTypeLength; i++) - { - if(CatId == pP2PInfo->WpsAttributes.SecondaryDeviceTypeList[i].CategoryId && - SubCatId == pP2PInfo->WpsAttributes.SecondaryDeviceTypeList[i].SubCategoryId) - { - return TRUE; - } - } - } - } - }while(FALSE);//while(ReqType.Length > 0); - - if(nRequestedDeviceTypeChecked > 0) - {// not matched - return FALSE; - } - else - {// no Requested Device Type to check - return TRUE; - } - -} - -BOOLEAN -P2PDeviceIDMatches( - IN PP2P_INFO pP2PInfo, - IN const P2P_MESSAGE *msg - ) -{ - if(msg->_devId) - { - if(eqMacAddr(msg->devIdDevAddr, pP2PInfo->DeviceAddress)) - { - return TRUE; - } - else - { - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, - "P2PDeviceIDMatches(): DeviceID specified not match:\n", msg->devIdDevAddr); - return FALSE; - } - } - else - { - return TRUE; - } -} - -RT_STATUS -P2P_SetWpsIe( - IN const ADAPTER *pAdapter, - IN u2Byte iePayloadLen, - IN u1Byte *pIePayload - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - P2P_INFO *pP2PInfo = GET_P2P_INFO(pAdapter); - FRAME_BUF fbuf; - P2P_MESSAGE msg; - P2P_WPS_ATTRIBUTES *w = NULL; - - if(!P2P_ENABLED(pP2PInfo)) return RT_STATUS_INVALID_STATE; - - // Payload shall contain OUI and subtype, totally 4 bytes - - if(iePayloadLen < 3 + 1) return RT_STATUS_INVALID_DATA; - - FrameBuf_Init(iePayloadLen - 4, iePayloadLen - 4, pIePayload + 4, &fbuf); - - PlatformZeroMemory(&msg, sizeof(msg)); - msg.dbgLevel = DBG_LOUD; - - if(RT_STATUS_SUCCESS != (status = p2p_parse_WpsIe(&fbuf, &msg))) - { - return status; - } - - w = &pP2PInfo->WpsAttributes; - - if(msg._wpsConfigMethods) - w->ConfigMethod = msg.wpsConfigMethods; - - if(msg._wpsDevName) - { - w->DeviceNameLength = (u1Byte)msg.wpsDevNameLen; - p2p_MoveMemory(w->DeviceName, msg._wpsDevName, msg.wpsDevNameLen); - } - - if(msg._wpsDevPasswordId) - { - pP2PInfo->WpsDevPasswdId = msg.wpsDevPasswordId; - - w->DevicePasswdId = msg.wpsDevPasswordId; - - // - // Notify UI the current device password ID so that it can determine whether provisioning info is available - // Note that UI determines which peer config method we shall use for doing WPS - // - P2PIndicateCurrentDevPasswdId(pP2PInfo, pP2PInfo->WpsDevPasswdId); - } - - if(msg._wpsPrimaryDevType) - { - u2Byte cat = ReadN2H2BYTE(msg._wpsPrimaryDevType + 0); - u2Byte subCat = ReadN2H2BYTE(msg._wpsPrimaryDevType + 6); - - // We do this check because the WPS module set us a WPS IE with this attribute all 0 - if(0 != cat && 0 != subCat) - { - w->PrimaryDeviceType.CategoryId = cat; - p2p_MoveMemory(w->PrimaryDeviceType.Oui, msg._wpsPrimaryDevType + 2, 4); - w->PrimaryDeviceType.SubCategoryId = subCat; - } - } - - if(msg._wpsSecDevTypeList && msg.wpsSecDevTypeNum) - { - const u1Byte *pos = msg._wpsSecDevTypeList; - const u1Byte *end = msg._wpsSecDevTypeList + msg.wpsSecDevTypeListLen; - - w->SecondaryDeviceTypeLength = msg.wpsSecDevTypeNum; - - while(pos < end) - { - P2P_WPS_ATTRIBUTES_DEVICE_TYPE *s = &w->SecondaryDeviceTypeList[w->SecondaryDeviceTypeLength]; - - s->CategoryId = ReadN2H2BYTE(pos + 0); - p2p_MoveMemory(s->Oui, pos + 2, 4); - s->SubCategoryId = ReadN2H2BYTE(pos + 6); - - pos += 8; - } - } - - P2PDumpWpsAttributes(&pP2PInfo->WpsAttributes); - - return status; -} - -//====================================================================== -// Sub IE handlers -//====================================================================== - -BOOLEAN -P2POnP2PNoticeOfAbsence( - IN PP2P_INFO pP2PInfo, - IN OCTET_STRING osPacket, - IN P2P_MESSAGE *msg - ) -{ - u1Byte ID = P2P_ATTR_NOTICE_OF_ABSENCE; - u2Byte Index = 0; - u1Byte nNoADesc = 0; - u1Byte i; - P2P_POWERSAVE_SET p2pPsSet; - PMGNT_INFO pMgntInfo = &(pP2PInfo->pAdapter->MgntInfo); - - // Win8: NdisTest Trick for WFD_Concurrent_ext: ------------------------------ - // + SUT-Client -> DUT-GO and DUT-Client -> SUT-GO are in the same channel - // + Use TxPause in AP_PS_UpdateStationPSState() instead - if(pP2PInfo->pAdapter->bInHctTest) - return TRUE; - // ---------------------------------------------------------------------- - - - // Our role isn't client. - if(pP2PInfo->Role != P2P_CLIENT || !pMgntInfo->mAssoc) - return TRUE; - - // BSSID mismatch - // RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2POnP2PNoticeOfAbsence(): BSSID in packet = ", Frame_pBssid(osPacket)); - if(!eqMacAddr(Frame_pBssid(osPacket), pP2PInfo->pAdapter->MgntInfo.Bssid)) - return TRUE; - - // - // Length check - // - if((msg->noaLen - 2) % 13 != 0) // Len of a NoA Desc is 13 - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2POnP2PNoticeOfAbsence(): invalid length: %u\n", msg->noaLen)); - return FALSE; - } - else - { - nNoADesc = (msg->noaLen - 2) / 13; - } - - // The index hasn't changed. - if(pP2PInfo->bUpdateFromBeacon && msg->noaIndex == pP2PInfo->NoAIEIndex) - return TRUE; - - pP2PInfo->bUpdateFromBeacon = TRUE; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2POnP2PNoticeOfAbsence(): Role = %d, IE index = %d, MyCurIdx = %d\n", pP2PInfo->Role, msg->noaIndex, pP2PInfo->NoAIEIndex)); - - // CTWindow - p2pPsSet.bOppPs = msg->noaCtWindowAndOppPsParam >> 7; - p2pPsSet.CTWindow = msg->noaCtWindowAndOppPsParam & (~BIT7); - - Index = 2; - - // NoA Descriptors - for(i = 0; i < nNoADesc; i++) - { - // This NoA is valid. - p2pPsSet.NoASet[i].bNoAEn = TRUE; - - // Count/Type - p2pPsSet.NoASet[i].NoACnt = ReadEF1Byte(msg->_noa + Index); - Index += 1; - - // Duration - p2pPsSet.NoASet[i].NoADur = ReadEF4Byte(msg->_noa + Index); - Index += 4; - - // Interval - p2pPsSet.NoASet[i].NoAInt= ReadEF4Byte(msg->_noa + Index); - Index += 4; - - // Start Time - p2pPsSet.NoASet[i].bUseStartTime = TRUE; - p2pPsSet.NoASet[i].u4StartTime = ReadEF4Byte(msg->_noa + Index); - Index += 4; - } - - pP2PInfo->bUpdatePsParameter = TRUE; - P2PSetPowerSaveMode(pP2PInfo, &p2pPsSet, msg->noaIndex, FALSE); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("<=======\n")); - - return TRUE; -} - -//====================================================================== -// Dump Routine -//====================================================================== -VOID -P2PDumpWpsAttributes( - IN PP2P_WPS_ATTRIBUTES pP2PWpsAttributes - ) -{ - u1Byte i; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("WPS Attributes:\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Config Method: 0x%X\n", pP2PWpsAttributes->ConfigMethod)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Device Passwd ID: 0x%X\n", pP2PWpsAttributes->DevicePasswdId)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("PrimaryDevType: %u\n", pP2PWpsAttributes->PrimaryDeviceType.SubCategoryId)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("SecDevType Length: %u\n", pP2PWpsAttributes->SecondaryDeviceTypeLength)); - if(pP2PWpsAttributes->SecondaryDeviceTypeLength) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("SecDevTypes: \n")); - for(i = 0; i < pP2PWpsAttributes->SecondaryDeviceTypeLength; i++) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%u\n", pP2PWpsAttributes->SecondaryDeviceTypeList[i].SubCategoryId)); - } - } - if(pP2PWpsAttributes->DeviceNameLength > 0) - { - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "DeviceName: ", pP2PWpsAttributes->DeviceName, pP2PWpsAttributes->DeviceNameLength); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("DeviceName: has a invalid length: %u\n", pP2PWpsAttributes->DeviceNameLength)); - } -} - -VOID -P2PDumpDeviceCapability( - IN u1Byte DeviceCapability - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("=== Device Capability ===\n")); - - if(DeviceCapability & dcServiceDiscovery) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("dcServiceDiscovery\n")); - } - if(DeviceCapability & dcP2PClientDiscoverability) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("dcP2PClientDiscoverability\n")); - } - if(DeviceCapability & dcConcurrentOperation) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("dcConcurrentOperation\n")); - } - if(DeviceCapability & dcP2PInfrastructureManaged) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("dcP2PInfrastructureManaged\n")); - } - if(DeviceCapability & dcP2PDeviceLimit) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("dcP2PDeviceLimit\n")); - } - if(DeviceCapability & dcP2PInvitationProcedure) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("dcP2PInvitationProcedure\n")); - } - -} - -VOID -P2PDumpGroupCapability( - IN u1Byte GroupCapability - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("=== Group Capability ===\n")); - - if(GroupCapability & gcP2PGroupOwner) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcP2PGroupOwner\n")); - } - if(GroupCapability & gcPersistentP2PGroup) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcPersistentP2PGroup\n")); - } - if(GroupCapability & gcP2PGroupLimit) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcP2PGroupLimit\n")); - } - if(GroupCapability & gcIntraBSSDistribution) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcIntraBSSDistribution\n")); - } - if(GroupCapability & gcCrossConnection) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcCrossConnection\n")); - } - if(GroupCapability & gcPersistentReconnect) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcPersistentReconnect\n")); - } - if(GroupCapability & gcGroupFormation) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("gcGroupFormation\n")); - } -} - -VOID -P2PDumpClientInfoDescList( - IN PP2P_CLIENT_INFO_DISCRIPTOR P2PClientInfoDescList, - IN u1Byte P2PClientInfoDescListSize - ) -{ - u1Byte i; - - for(i = 0; i < P2PClientInfoDescListSize; i++) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("=== Client %d ===\n", i)); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "DevAddr: ", P2PClientInfoDescList[i].DeviceAddress); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "InterfaceAddr: ", P2PClientInfoDescList[i].InterfaceAddress); - P2PDumpDeviceCapability(P2PClientInfoDescList[i].DeviceCapability); - P2PDumpWpsAttributes(&(P2PClientInfoDescList[i].WpsAttributes)); - } - RT_TRACE(COMP_P2P, DBG_LOUD, ("Totally %d Clients dumped\n", i)); -} - -VOID -P2PDumpScanList( - IN PP2P_DEVICE_DISCRIPTOR pDevDescriptors, - IN u4Byte nDevDescriptors - ) -{ - u1Byte i; - - for(i = 0; i < nDevDescriptors; i++) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("====================================\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Scan List: %u\n", i)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("====================================\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Role: %u\n", pDevDescriptors[i].Role)); - P2PDumpGroupCapability(pDevDescriptors[i].GroupCapability); - P2PDumpDeviceCapability(pDevDescriptors[i].DeviceCapability); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "DevAddr: ", pDevDescriptors[i].DeviceAddress); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "IntAddr: ", pDevDescriptors[i].IntendedP2PInterfaceAddress); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "SSID: ", pDevDescriptors[i].SsidBuf, pDevDescriptors[i].SsidLen); - RT_TRACE(COMP_P2P, DBG_LOUD, ("ListenChnl: %u\n", pDevDescriptors[i].ListenChannel)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("OpChnl: %u\n", pDevDescriptors[i].OperatingChannel)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Channel List:\n", pDevDescriptors[i].ChannelPlanChannel, pDevDescriptors[i].ChannelPlanLength); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "UUID:\n", pDevDescriptors[i].WPS_UUID, 16); - P2PDumpWpsAttributes(&(pDevDescriptors[i].WpsAttributes)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Num of Clients: %x\n", pDevDescriptors[i].P2PClientDescriptorListLength)); - P2PDumpClientInfoDescList(pDevDescriptors[i].P2PClientDescriptorList, pDevDescriptors[i].P2PClientDescriptorListLength); - RT_TRACE(COMP_P2P, DBG_LOUD, ("ExtListenTimingPeriod: %u\n", pDevDescriptors[i].ExtendedListenTimingPeriod)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("ExtListenTimingDuration: %u\n", pDevDescriptors[i].ExtendedListenTimingDuration)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("SingalStrength: %d\n", pDevDescriptors[i].SignalStrength)); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "Manufacturer name: ", pDevDescriptors->manufacturerName, 65); - } - RT_TRACE(COMP_P2P, DBG_LOUD, ("====================================\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Totally %d items in Scan List dumped\n", i)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("====================================\n")); -} - -VOID -P2PDumpGroupFormationResult( - PP2P_INFO pP2PInfo - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("====================================\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Group Formation Result:\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("====================================\n")); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "DevAddr: ", pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "IntAddr: ", pP2PInfo->ConnectionContext.ConnectingDevice.IntendedP2PInterfaceAddress); - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("I'm GO\n")); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("I'm Client\n")); - } - RT_TRACE(COMP_P2P, DBG_LOUD, ("OpChnl: %u\n", pP2PInfo->OperatingChannel)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Channel List:\n", pP2PInfo->ConnectionContext.ConnectingDevice.ChannelPlanChannel, pP2PInfo->ConnectionContext.ConnectingDevice.ChannelPlanLength); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Status: %u\n", pP2PInfo->ConnectionContext.Status)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("DialogToken: %u\n", pP2PInfo->ConnectionContext.DialogToken)); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "SSID = ", pP2PInfo->ConnectionContext.ConnectingDevice.SsidBuf, pP2PInfo->ConnectionContext.ConnectingDevice.SsidLen); -} - -VOID -P2PDumpPacketType( - u1Byte TypeSubType, - u1Byte Category, - u1Byte OUISubType - ) -{ - switch(TypeSubType) - { - case Type_Beacon: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Beacon\n")); - break; - case Type_Probe_Req: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Probe_Req\n")); - break; - case Type_Probe_Rsp: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Probe_Rsp\n")); - break; - case Type_Asoc_Req: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Asoc_Req\n")); - break; - case Type_Asoc_Rsp: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Asoc_Rsp\n")); - break; - case Type_Reasoc_Req: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Reasoc_Req\n")); - break; - case Type_Reasoc_Rsp: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): Type_Reasoc_Rsp\n")); - break; - case Type_Action: - { - if(Category == WLAN_ACTION_PUBLIC) - { - if(OUISubType == P2P_PUB_ACT_GO_NEGO_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): GONReq\n")); - if(OUISubType == P2P_PUB_ACT_GO_NEGO_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): GONRsp\n")); - if(OUISubType == P2P_PUB_ACT_GO_NEGO_CONFIRM) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): GONConfirm\n")); - if(OUISubType == P2P_PUB_ACT_INVITATION_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): InvitationReq\n")); - if(OUISubType == P2P_PUB_ACT_INVITATION_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): InvitationRsp\n")); - if(OUISubType == P2P_PUB_ACT_DEV_DISCOVERABILITY_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): DevDiscoverabilityReq\n")); - if(OUISubType == P2P_PUB_ACT_DEV_DISCOVERABILITY_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): DevDiscoverabilityRsp\n")); - if(OUISubType == P2P_PUB_ACT_PROVISION_DISCOVERY_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): ProvisionDiscoveryReq\n")); - if(OUISubType == P2P_PUB_ACT_PROVISION_DISCOVERY_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): ProvisionDiscoveryRsp\n")); - if(OUISubType == P2P_PUB_ACT_GAS_INITIAL_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): ServiceDiscoveryReq (GAS Initial Req)\n")); - if(OUISubType == P2P_PUB_ACT_GAS_INITIAL_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): ServiceDiscoveryRsp (GAS Initial Rsp)\n")); - if(OUISubType == P2P_PUB_ACT_GAS_COMEBACK_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): ServiceDiscoveryReq (GAS Comeback Req)\n")); - if(OUISubType == P2P_PUB_ACT_GAS_COMEBACK_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): ServiceDiscoveryRsp (GAS Comeback Rsp)\n")); - } - else if(Category == WLAN_ACTION_VENDOR_SPECIFIC) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): TODO: P2P_ACTION_CATEGORY\n")); - if(OUISubType == P2P_ACT_NOTICE_OF_ABSENCE) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): NoticeOfAbsence\n")); - if(OUISubType == P2P_PUB_PRESENCE_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): PresenceReq\n")); - if(OUISubType == P2P_PUB_PRESENCE_RSP) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): PresenceRsp\n")); - if(OUISubType == P2P_PUB_GO_DISCOVERABILITY_REQ) - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): GODiscoverabilityReq\n")); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): unrecognized Action Category: %u\n", Category)); - } - } - break; - default: - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDumpPacketType(): unrecognized TypeSubType: %u\n", TypeSubType)); - break; - } -} - -//====================================================================== -// Client Info List Hander -//====================================================================== -u1Byte -P2PClientInfoGetCount( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - - PMGNT_INFO pExtMgntInfo = &pExtAdapter->MgntInfo; - PRT_WLAN_STA pEntry = NULL; - u1Byte nP2PClients = 0; - u1Byte i = 0; - - if(pExtAdapter == NULL || pExtMgntInfo == NULL) - { - return 0; - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pExtMgntInfo->AsocEntry[i]); - if(pEntry->bUsed && - pEntry->bAssociated && - pEntry->bP2PClient) - { - nP2PClients++; - } - } - - return nP2PClients; -} - -PP2P_CLIENT_INFO_DISCRIPTOR -P2PClientInfoFindByInterfaceAddress( - IN PP2P_INFO pP2PInfo, - IN pu1Byte InterfaceAddress - ) -{ - BOOLEAN bFound = FALSE; - - PADAPTER pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - - PMGNT_INFO pExtMgntInfo = &pExtAdapter->MgntInfo; - PRT_WLAN_STA pEntry = NULL; - u1Byte i = 0; - - if(pExtAdapter == NULL || pExtMgntInfo == NULL) - { - return 0; - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pExtMgntInfo->AsocEntry[i]); - if(pEntry->bUsed && - pEntry->bAssociated && - pEntry->bP2PClient) - { - if(eqMacAddr(pEntry->P2PClientInfoDesc.InterfaceAddress, InterfaceAddress)) - { - bFound = TRUE; - return &(pEntry->P2PClientInfoDesc); - } - } - } - - return NULL; -} - -PP2P_CLIENT_INFO_DISCRIPTOR -P2PClientInfoFindByDeviceAddress( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddress - ) -{ - BOOLEAN bFound = FALSE; - - PADAPTER pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - - PMGNT_INFO pExtMgntInfo = &pExtAdapter->MgntInfo; - PRT_WLAN_STA pEntry = NULL; - u1Byte i = 0; - - if(pExtAdapter == NULL || pExtMgntInfo == NULL) - { - return 0; - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pExtMgntInfo->AsocEntry[i]); - if(pEntry->bUsed && - pEntry->bAssociated && - pEntry->bP2PClient) - { - if(eqMacAddr(pEntry->P2PClientInfoDesc.DeviceAddress, DeviceAddress)) - { - bFound = TRUE; - return &(pEntry->P2PClientInfoDesc); - } - } - } - - return NULL; -} - -PP2P_CLIENT_INFO_DISCRIPTOR -P2PClientInfoEnumClients( - IN PP2P_INFO pP2PInfo, - IN u1Byte StartIndex, - OUT pu1Byte pIndex - ) -{ - BOOLEAN bFound = FALSE; - - PADAPTER pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - - - PMGNT_INFO pExtMgntInfo = &pExtAdapter->MgntInfo; - PRT_WLAN_STA pEntry = NULL; - u1Byte i = 0; - - if(StartIndex > ASSOCIATE_ENTRY_NUM - 1) - { - goto exit_P2PClientInfoEnumClients; - } - - if(pExtAdapter == NULL || pExtMgntInfo == NULL) - { - return 0; - } - - for(i = StartIndex; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pExtMgntInfo->AsocEntry[i]); - if(pEntry->bUsed && - pEntry->bAssociated && - pEntry->bP2PClient) - { - - bFound = TRUE; - if(pIndex) *pIndex = i; - return &(pEntry->P2PClientInfoDesc); - } - } - -exit_P2PClientInfoEnumClients: - - if(pIndex) *pIndex = (u1Byte)(-1); - return NULL; -} - -//====================================================================== -// Scan List Hander -//====================================================================== -PP2P_DEVICE_DISCRIPTOR -P2PScanListFind( - IN PP2P_DEVICE_DISCRIPTOR pScanList, - IN u4Byte ScanListSize, - IN pu1Byte DeviceAddress, - IN pu1Byte InterfaceAddress, - OUT pu4Byte pScanListIndex - ) -{ - u1Byte i; - BOOLEAN bFound = FALSE; - pu1Byte KeyAddr = (DeviceAddress) ? (DeviceAddress) : ((InterfaceAddress) ? (InterfaceAddress) : (NULL)); - BOOLEAN bDevAddressAsKey = (DeviceAddress) ? (TRUE) : (FALSE); - - if(!KeyAddr) - { - return NULL; - } - - for(i = 0; i < ScanListSize; i++) - { - pu1Byte AddrToCompare = (bDevAddressAsKey) ? - ((pScanList[i]).DeviceAddress) : - ((pScanList[i]).IntendedP2PInterfaceAddress); - if(eqMacAddr(AddrToCompare, KeyAddr)) - { - bFound = TRUE; - if(pScanListIndex) - { - *pScanListIndex = i; - } - return &(pScanList[i]); - } - } - - return NULL; -} - -BOOLEAN -P2PScanListAllFound( - IN PP2P_INFO pP2PInfo - ) -{ - u1Byte i = 0,j=0,uNumOfDeviceFoud=0; - BOOLEAN bAllFound = FALSE; - - if(pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs == 0 ||pP2PInfo->DeviceListForQuery.uNumberOfDevices ==0) - return FALSE; - - for(i=0;i<(pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs);i++)// - { - for(j = 0; j < (pP2PInfo->DeviceListForQuery.uNumberOfDevices); j++) - { - if(pP2PInfo->DeviceListForQuery.DeviceEntry[j].DeviceAddress != NULL) - { - if(eqMacAddr(pP2PInfo->ScanDeviceIDs.DeviceIDs[i], pP2PInfo->DeviceListForQuery.DeviceEntry[j].DeviceAddress) - &&pP2PInfo->DeviceListForQuery.DeviceEntry[j].ProbeResponseHostTimestamp != 0) - { - uNumOfDeviceFoud ++; - } - } - } - } - - if(uNumOfDeviceFoud == pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs) - { - bAllFound =TRUE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: All of DeviceID Found : Terminate Device Discovery!! !\n", __FUNCTION__)); - } - - return bAllFound; -} - -BOOLEAN -P2PScanListFindClient( - IN PP2P_DEVICE_DISCRIPTOR pScanList, - IN u4Byte ScanListSize, - IN pu1Byte DeviceAddress, - IN pu1Byte InterfaceAddress, - OUT PP2P_DEVICE_DISCRIPTOR *ppGODeviceDesc, - OUT PP2P_CLIENT_INFO_DISCRIPTOR *ppClientInfoDesc - ) -{ - u1Byte i, j; - BOOLEAN bFound = FALSE; - pu1Byte KeyAddr = (DeviceAddress) ? (DeviceAddress) : ((InterfaceAddress) ? (InterfaceAddress) : (NULL)); - BOOLEAN bDevAddressAsKey = (DeviceAddress) ? (TRUE) : (FALSE); - - *ppGODeviceDesc = NULL; - *ppClientInfoDesc = NULL; - - for(i = 0; i < ScanListSize; i++) - { - PP2P_CLIENT_INFO_DISCRIPTOR pClientInfo = pScanList[i].P2PClientDescriptorList; - u1Byte P2PClientDescriptorListLength = pScanList[i].P2PClientDescriptorListLength; - - for(j = 0; j < P2PClientDescriptorListLength; j++) - { - pu1Byte AddrToCompare = (bDevAddressAsKey) ? - ((pClientInfo[j]).DeviceAddress) : - ((pClientInfo[j]).InterfaceAddress); - if(KeyAddr != NULL && eqMacAddr(AddrToCompare, KeyAddr)) - { - bFound = TRUE; - *ppGODeviceDesc = (PP2P_DEVICE_DISCRIPTOR)(&(pScanList[i])); - *ppClientInfoDesc = (PP2P_CLIENT_INFO_DISCRIPTOR)(&(pClientInfo[j])); - goto exit_P2PScanListFindClient; - } - } - - } - -exit_P2PScanListFindClient: - return bFound; -} - -PP2P_DEVICE_DISCRIPTOR -P2PScanListAdd( - IN OUT PP2P_DEVICE_DISCRIPTOR pScanList, - IN OUT pu4Byte pScanListSize - ) -{ - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - - - if(*pScanListSize == P2P_MAX_SCAN_LIST) - {// no more space => return the last one - pP2PDeviceDesc = &(pScanList[*pScanListSize - 1]); - } - else - { - pP2PDeviceDesc = &(pScanList[*pScanListSize]); - (*pScanListSize)++; - } - - return pP2PDeviceDesc; -} - -VOID -P2PScanListClear( - IN P2P_INFO *pP2PInfo - ) -{ - pP2PInfo->ScanListSize = 0; - PlatformZeroMemory(pP2PInfo->ScanList, sizeof(pP2PInfo->ScanList)); - - pP2PInfo->ScanList4QuerySize = 0; - PlatformZeroMemory(pP2PInfo->ScanList4Query, sizeof(pP2PInfo->ScanList4Query)); - - p2p_DevList_Flush(&pP2PInfo->devList); - - return; -} - -VOID -P2PScanListCopy( - IN OUT PP2P_DEVICE_DISCRIPTOR pScanListDest, - IN OUT pu4Byte pScanListDestSize, - IN PP2P_DEVICE_DISCRIPTOR pScanListSrc, - IN u4Byte ScanListSrcSize - ) -{ - *pScanListDestSize = ScanListSrcSize; - PlatformMoveMemory(pScanListDest, - pScanListSrc, - (ScanListSrcSize * sizeof(P2P_DEVICE_DISCRIPTOR))); -} - -BOOLEAN -P2PScanListDumplicate( - IN PP2P_DEVICE_DISCRIPTOR pScanList, - IN u4Byte ScanListSize, - IN PP2P_DEVICE_DISCRIPTOR pDevDesc - ) -{ - // - // Test if pDevDesc is a duplicate item in pScanList. - // - - PP2P_DEVICE_DISCRIPTOR pTmpDevDesc = NULL; - - pTmpDevDesc = P2PScanListFind(pScanList, ScanListSize, pDevDesc->DeviceAddress, NULL, NULL); - if(pTmpDevDesc) - { - if(PlatformCompareMemory(pTmpDevDesc, - pDevDesc, sizeof(P2P_DEVICE_DISCRIPTOR)) == 0) - {// desc the same - return TRUE; - } - else - {// dese not the same - return FALSE; - } - } - else - {// no desc found - return FALSE; - } - - return FALSE; -} - -BOOLEAN -P2PScanListEqual( - IN PP2P_DEVICE_DISCRIPTOR pScanList1, - IN u4Byte ScanList1Size, - IN PP2P_DEVICE_DISCRIPTOR pScanList2, - IN u4Byte ScanList2Size - ) -{ - u4Byte i; - - //RT_TRACE(COMP_P2P, DBG_LOUD, - // ("P2PScanListEqual(): nlist1(%u), nlist2(%u)\n", ScanList1Size, ScanList2Size)); - - if(ScanList1Size != ScanList2Size) - { - return FALSE; - } - - // - // For each entry in scan list 1, check if the entry is duplicate in scan list 2, - // if all entries are duplicate, return TRUE; - // - for(i = 0; i < ScanList1Size; i++) - { - if(!P2PScanListDumplicate(pScanList2, ScanList2Size, &(pScanList1[i]))) - { - return FALSE; // this entry is not duplicate - } - } - - return TRUE; // all entries are duplicate -} - -BOOLEAN -P2PScanListIsGo( - IN PP2P_INFO pP2PInfo, - IN pu1Byte InterfaceAddr - ) -{ - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - pP2PDeviceDesc = P2PScanListFind(pP2PInfo->ScanList, pP2PInfo->ScanListSize, NULL, InterfaceAddr, NULL); - if(pP2PDeviceDesc) - { - if(pP2PDeviceDesc->Role == P2P_GO) - { - return TRUE; - } - } - return FALSE; -} - -VOID -P2PScanListEnterScanCompleteImmediately( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetDefaultAdapter(pP2PInfo->pAdapter); - PADAPTER pLoopAdapter = GetDefaultAdapter(pAdapter); - PRT_CHANNEL_INFO pChnlInfo; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - - if(!MgntScanInProgress(pMgntInfo)) - { - return; - } - - { - - while(pLoopAdapter) - { - pMgntInfo = &pLoopAdapter->MgntInfo; - pChnlInfo = pMgntInfo->pChannelInfo; - if(pChnlInfo->ChnlOp == CHNLOP_SCAN) - break; - else - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - - if(pLoopAdapter == NULL) - { - pLoopAdapter = pAdapter; - pMgntInfo = &pLoopAdapter->MgntInfo; - } - - if(pMgntInfo->ScanStep != 2) - { - pMgntInfo->ScanStep = 0; - } - - PlatformCancelTimer(pLoopAdapter, &(pMgntInfo->ScanTimer)); - PlatformSetTimer(pLoopAdapter, &(pMgntInfo->ScanTimer), 0); -} - -// -// This function is called to cease the current scan. -// The purpose is to stop the current scan to stay on the current channel for sending/receiving frames. -// If called in operating state, the current channel (op channel) shall be preserved. -// -u1Byte -P2PScanListCeaseScan( - IN PP2P_INFO pP2PInfo - ) -{ - u1Byte CurrentChnl; - PADAPTER pAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetDefaultAdapter(pP2PInfo->pAdapter); - - EXTCHNL_OFFSET hwBW40MOffset = EXTCHNL_OFFSET_NO_EXT; - EXTCHNL_OFFSET hwBW80MOffset = EXTCHNL_OFFSET_NO_EXT; - - // Get current channel. We want to know on what channel we cease the scan. - CurrentChnl = P2PGetChannel(pP2PInfo); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_BW40MHZ_EXTCHNL, (pu1Byte)(&hwBW40MOffset)); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_BW80MHZ_EXTCHNL, (pu1Byte)(&hwBW80MOffset)); - - if(!pAdapter->MgntInfo.bScanInProgress) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PScanListCeaseScan(): bScanInProgress is false\n")); - return CurrentChnl; - } - - RT_TRACE(COMP_SCAN,DBG_LOUD, ("===>P2PScanListCeaseScan portnumber %d\n", pAdapter->pNdis62Common->PortNumber)); - - if(pP2PInfo->bPreGroupFormation || (pP2PInfo->State == P2P_STATE_GO_NEGO_REQ_RECVD)) - { - PADAPTER pLoopAdapter = GetDefaultAdapter(pAdapter); - - CustomScan_TermReq(GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter), TRUE); - - while(pLoopAdapter) - { - - pLoopAdapter->MgntInfo.SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz = hwBW40MOffset; - - if(EXTCHNL_OFFSET_NO_EXT != hwBW80MOffset) - { - pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelBandwidth = CHANNEL_WIDTH_80; - } - else if(EXTCHNL_OFFSET_NO_EXT != hwBW40MOffset) - { - pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelBandwidth = CHANNEL_WIDTH_40; - } - else - { - pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelBandwidth = CHANNEL_WIDTH_20; - } - - pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelNumber = CurrentChnl; - pLoopAdapter->MgntInfo.SettingBeforeScan.CenterFrequencyIndex1 = CurrentChnl; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - else - { - CustomScan_TermReq(GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter), FALSE); - } - - //Cancel current scan timer, which may be triggered after a long time - // and set it again with no delay so that it will enter ScanComplete soon. - //P2PScanListEnterScanCompleteImmediately(pP2PInfo); - - // - // Extended listening may be ceased, so we have to clear the flag. - // - pP2PInfo->bExtendedListening = FALSE; - - pP2PInfo->bDeviceDiscoveryInProgress = FALSE; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<===P2PScanListCeaseScan()\n")); - - return CurrentChnl; -} - -static -VOID -p2p_ScanStateCb( - IN CUSTOM_SCAN_STATE state, - IN VOID *pCtx - ) -{ - ADAPTER *pAdapter = (ADAPTER *)pCtx; - - if(CUSTOM_SCAN_STATE_COMPLETED == state) - { - P2P_UpdateScanList(pAdapter); - } - - return; -} - -BOOLEAN -P2PConstructScanList( - IN P2P_INFO *pP2PInfo, - IN VOID *req, - IN u1Byte rate, - IN FRAME_BUF *probeReqBuf - ) -{ - RT_SCAN_TYPE scanType = SCAN_PASSIVE; - u2Byte duration = 0; - - // Scan period - if(pP2PInfo->State == P2P_STATE_LISTEN) - { - scanType = SCAN_PASSIVE; - - if( - pP2PInfo->bPreGroupFormation || - pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery || - pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe || - pP2PInfo->SDContext.bDoingServiceDiscovery - ) - { - duration = 50; - } - else - { - duration = (u2Byte)(100 * GetRandomNumber(1, 3 + 1) - 50); - } - } - else if(pP2PInfo->State == P2P_STATE_INITIALIZED) // Extended Listen - { - if(pP2PInfo->bSendProbeReqInExtendedListen) - { - scanType = SCAN_ACTIVE; - } - else - { - scanType = SCAN_PASSIVE; - } - - duration = pP2PInfo->ExtListenTimingDuration; - //*pDuration = (pP2PInfo->ExtListenTimingDuration / 2) * ListenStateDurationMultiplier; - RT_TRACE(COMP_P2P, DBG_TRACE, ("Extended Listening Duration: %u\n", duration)); - } - else if(pP2PInfo->State == P2P_STATE_SEARCH) - { - scanType = SCAN_ACTIVE; - duration = 20; // P2P_SCAN_PERIOD_SEARCH; - } - else if(pP2PInfo->State == P2P_STATE_SCAN) - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - scanType = pP2PInfo->ScanType; - duration = 50; - } - else - { - scanType = SCAN_ACTIVE; - duration = 50; - } - } - else if(pP2PInfo->State == P2P_STATE_INVITATION_REQ_SEND) - { - scanType = SCAN_ACTIVE; - duration = P2P_INVITATION_FRAME_TIMEOUT; - } - else if(pP2PInfo->State == P2P_STATE_PROVISION_DISCOVERY_REQ_SEND) - { - scanType = SCAN_ACTIVE; - duration = P2P_PROVISION_DISCOVERY_TIMEOUT; - } - else if(pP2PInfo->State == P2P_STATE_SERVICE_DISCOVERY_REQ_SEND) - { - scanType = SCAN_ACTIVE; - duration = P2P_SERVICE_DISCOVERY_TIMEOUT; - } - else if(pP2PInfo->State == P2P_STATE_DEVICE_DISCOVERABILITY_REQ_SEND) - { - scanType = SCAN_ACTIVE; - duration = P2P_DEVICE_DISCOVERABILITY_FRAME_TIMEOUT; - } - else - { - return FALSE; - } - - // Decide channels to scan - if(pP2PInfo->State == P2P_STATE_LISTEN || - pP2PInfo->State == P2P_STATE_INITIALIZED) // Extended Listen - {// the listen channel - CustomScan_AddScanChnl(req, pP2PInfo->ListenChannel, 1, scanType, duration, rate, probeReqBuf); - } - else if(pP2PInfo->State == P2P_STATE_SCAN) - { - // TODO: is this right? - - u1Byte i = 0; - PRT_CHANNEL_LIST pChList = MgntActQuery_ChannelList(pP2PInfo->pAdapter); - u2Byte SupportedWirelessMode = pP2PInfo->pAdapter->HalFunc.GetSupportedWirelessModeHandler(pP2PInfo->pAdapter); - WIRELESS_MODE CurrentWirelessModeBackup = pP2PInfo->pAdapter->MgntInfo.dot11CurrentWirelessMode; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2P_STATE_SCAN: pChList->ChannelLen: %d\n", pChList->ChannelLen)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2P_STATE_SCAN: SupportedWirelessMode: 0x%x CurrentWirelessMode 0x%x\n", SupportedWirelessMode, CurrentWirelessModeBackup)); - - pP2PInfo->pAdapter->MgntInfo.dot11CurrentWirelessMode = SupportedWirelessMode; - RtActChannelList(pP2PInfo->pAdapter, RT_CHNL_LIST_ACTION_CONSTRUCT, NULL, NULL); - RtActChannelList(pP2PInfo->pAdapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChList); - pP2PInfo->pAdapter->MgntInfo.dot11CurrentWirelessMode = CurrentWirelessModeBackup; - - // Instert the Listen Channel (Listen channel first due to fast discovery of NdisTest-WFD_discover_ext) - CustomScan_AddScanChnl(req, pP2PInfo->ListenChannel, 1, scanType, duration, rate, probeReqBuf); - - for(i = 0; i < pChList->ChannelLen; i++) - { - if(pChList->ChnlListEntry[i].ChannelNum != pP2PInfo->ListenChannel) - { - CustomScan_AddScanChnl(req, pChList->ChnlListEntry[i].ChannelNum, 1, scanType, duration, rate, probeReqBuf); - } - } - } - else if(pP2PInfo->State == P2P_STATE_INVITATION_REQ_SEND) - { - PP2P_DEVICE_DISCRIPTOR pDevDesc = &pP2PInfo->InvitationContext.InvitedDevice; - if(pDevDesc->Role == P2P_DEVICE) - {// GO/Client inviting a Dev, Instert current channel since we start to send InvitationReq upon ProbeReq or ProbeRsp is received from the Dev - if(0 != pP2PInfo->InvitationContext.Channel) - { - CustomScan_AddScanChnl(req, pP2PInfo->InvitationContext.Channel, 1, scanType, duration, rate, probeReqBuf); - } - else - { - CustomScan_AddScanChnl(req, 1, 1, scanType, duration, rate, probeReqBuf); - CustomScan_AddScanChnl(req, 6, 1, scanType, duration, rate, probeReqBuf); - CustomScan_AddScanChnl(req, 11, 1, scanType, duration, rate, probeReqBuf); - CustomScan_AddScanChnl(req, pP2PInfo->ListenChannel, 1, scanType, duration, rate, probeReqBuf); - } - } - else if(pDevDesc->Role == P2P_CLIENT) - {// Instert peer Op Channel - CustomScan_AddScanChnl(req, pDevDesc->OperatingChannel, 1, scanType, duration, rate, probeReqBuf); - } - else if(pDevDesc->Role == P2P_GO) - {// Instert peer Op Channel - CustomScan_AddScanChnl(req, pDevDesc->OperatingChannel, 1, scanType, duration, rate, probeReqBuf); - } - } - else if(pP2PInfo->State == P2P_STATE_PROVISION_DISCOVERY_REQ_SEND) - { - CustomScan_AddScanChnl(req, pP2PInfo->ProvisionDiscoveryContext.Channel, 1, scanType, duration, rate, probeReqBuf); - } - else if(pP2PInfo->State == P2P_STATE_SERVICE_DISCOVERY_REQ_SEND) - { - CustomScan_AddScanChnl(req, pP2PInfo->SDContext.Channel, 1, scanType, duration, rate, probeReqBuf); - } - else if(pP2PInfo->State == P2P_STATE_DEVICE_DISCOVERABILITY_REQ_SEND) - { - CustomScan_AddScanChnl(req, pP2PInfo->DeviceDiscoverabilityContext.GOChannel, 1, scanType, duration, rate, probeReqBuf); - } - else //P2P_STATE_SEARCH - { - // - // If Device Discovery is used for finding when the target is active on its listen channel, - // we can search only its listen channel to perserve time. - // - if(pP2PInfo->bPreGroupFormation) - {//DbgPrint("a: %u, %u\n", pP2PInfo->ConnectionContext.ConnectingDevice.Channel, *pNChannels); - CustomScan_AddScanChnl(req, pP2PInfo->ConnectionContext.ConnectingDevice.ListenChannel, 5, scanType, duration, rate, probeReqBuf); - } - else if(pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery) - { - CustomScan_AddScanChnl(req, pP2PInfo->ProvisionDiscoveryContext.Channel, 5, scanType, duration, rate, probeReqBuf); - } - else if(pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe && - pP2PInfo->InvitationContext.InvitedDevice.ListenChannel != 0) - { - CustomScan_AddScanChnl(req, pP2PInfo->InvitationContext.InvitedDevice.ListenChannel, 5, scanType, duration, rate, probeReqBuf); - } - else if(pP2PInfo->SDContext.bDoingServiceDiscovery) - { - CustomScan_AddScanChnl(req, pP2PInfo->SDContext.Channel, 5, scanType, duration, rate, probeReqBuf); - } - else - {// scan all social channels - CustomScan_AddScanChnl(req, 1, 5, scanType, duration, rate, probeReqBuf); - CustomScan_AddScanChnl(req, 6, 5, scanType, duration, rate, probeReqBuf); - CustomScan_AddScanChnl(req, 11, 5, scanType, duration, rate, probeReqBuf); - - if( GetDefaultMgntInfo(pP2PInfo->pAdapter)->WFDPeerOpChannel > 0 ) - { - CustomScan_AddScanChnl(req, GetDefaultMgntInfo(pP2PInfo->pAdapter)->WFDPeerOpChannel, 2, scanType, duration, rate, probeReqBuf); - } - } - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("LsnCh: %u, OpCh: %u\n", pP2PInfo->ListenChannel, pP2PInfo->OperatingChannel)); - - if(!CustomScan_NumAddedChnl(req)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Error: no channel in the list, state: %u\n", pP2PInfo->State)); - return FALSE; - } - else - { - CustomScan_SetupCbCtx(req, p2p_ScanStateCb, pP2PInfo->pAdapter); - return TRUE; - } -} - -//====================================================================== -// Wi-Fi Direct Packet Handler -//====================================================================== - -PP2P_DEVICE_DISCRIPTOR -P2PProcessSubElements( - IN PP2P_INFO pP2PInfo, - IN PRT_RFD pRfd, - IN pu1Byte DeviceAddress, - IN P2P_MESSAGE *msg, - IN BOOLEAN bCreateIfNotExist - ) -{ - P2P_DEVICE_DISCRIPTOR *pDesc = NULL; - - if(NULL == (pDesc = P2PScanListFind(pP2PInfo->ScanList, pP2PInfo->ScanListSize, DeviceAddress, NULL, NULL))) - { - if(!bCreateIfNotExist) - return NULL; - - if(NULL == (pDesc = P2PScanListAdd(pP2PInfo->ScanList, &pP2PInfo->ScanListSize))) - return NULL; - - PlatformZeroMemory(pDesc, sizeof(*pDesc)); - } - - p2p_parse_UpdateDevDesc(pRfd->Buffer.VirtualAddress, msg, pRfd->Status.SignalStrength, pDesc); - - return pDesc; -} - -VOID -p2pUpdateBssDescManageability( - IN ADAPTER *pAdapter, - IN u1Byte *bssid, - IN const P2P_MESSAGE *msg - ) -{ - if(msg->_manageability) - { - PRT_WLAN_BSS pBssDesc = BssDescDupByBssid(pAdapter, bssid); - if(pBssDesc) - { - pBssDesc->P2PManagedInfo = msg->manageability; - } - } - else - { - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("Managed P2P Device Info NULL\n")); - } - - return; -} - -// -// Description: -// Handle Beacon packet for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This function updates the P2P scan list and check the WPS state for join. -// -RT_STATUS -P2P_OnBeacon( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - OCTET_STRING ssidBeacon; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - MEMORY_BUFFER mb = {NULL, 0}; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) && pP2PInfo->bForceScanLegacyNetworks) - { - ssidBeacon = PacketGetElement(*posMpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(IsSSIDNdisTest(ssidBeacon) || !pAdapter->bInHctTest) - { - MEMORY_BUFFER mbPacket = {NULL, 0}; - mbPacket.Buffer = posMpdu->Octet; - mbPacket.Length = posMpdu->Length; - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "P2P_OnBeacon IsSSIDNdisTest:", ssidBeacon.Octet, ssidBeacon.Length); - - P2PDeviceListUpdate(pP2PInfo, &pP2PInfo->DeviceList, pRfd, Frame_pBssid(*posMpdu), NULL, mbPacket); - } - } - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_BEACON, pRfd, Frame_pBssid(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_BEACON]->msg; - - mb.Buffer = (u1Byte *)pDev; - mb.Length = sizeof(*pDev); - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_DEV_FOUND, &mb); - - if(!p2p_validate_Beacon(msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Update Managed P2P Device Info. - p2pUpdateBssDescManageability(pP2PInfo->pAdapter, Frame_pBssid(*posMpdu), msg); - - // Parse all Sub IEs - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->devAddr, msg, TRUE); - if(pP2PDeviceDesc == NULL) - { - RT_TRACE_F(COMP_P2P, DBG_TRACE, - ("reject because of invalid P2P Sub IE or the corresponding entry is not in the scan list\n")); - break; - } - - if(msg->_noa) - P2POnP2PNoticeOfAbsence(pP2PInfo, *posMpdu, msg); - - // Update the device lists -------------------------------------------------------------------------- - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - MEMORY_BUFFER mbPacket = {NULL, 0}; - mbPacket.Buffer = posMpdu->Octet; - mbPacket.Length = posMpdu->Length; - P2PDeviceListUpdate(pP2PInfo, &pP2PInfo->DeviceList, pRfd, msg->bssid, msg->devAddr, mbPacket); - } - - // Wait for join - if(pP2PInfo->DeviceDiscoverabilityContext.bWaitingBeaconFromGO && - pP2PInfo->State == P2P_STATE_DEVICE_DISCOVERABILITY_WAIT_BEACON && - eqMacAddr(pP2PInfo->DeviceDiscoverabilityContext.GoBssid, msg->bssid)) - { - if(p2p_FindClientInfoByDevAddr(pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress, msg, NULL)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("going to send DeviceDiscoverabilityReq to the GO\n")); - - pP2PInfo->DeviceDiscoverabilityContext.bWaitingBeaconFromGO = FALSE; - - pP2PInfo->State = P2P_STATE_DEVICE_DISCOVERABILITY_REQ_SEND; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - } - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - return rtStatus; -} - -BOOLEAN -P2PHasNon11BRateAsSupportingRate( - IN OCTET_STRING osPacket - ) -{ - OCTET_STRING BratesBeacon, ExtratesBeacon; - BOOLEAN bHasNon11bRate = FALSE; - u1Byte i; - - // - // Note: if no supported rate IE in osPacket, FALSE is returned. - // - - // Check Supported rate - BratesBeacon = PacketGetElement(osPacket, EID_SupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( BratesBeacon.Length != 0) - { - for(i = 0; i < BratesBeacon.Length; i++) - { - if(!IS_CCK_RATE((BratesBeacon.Octet)[i])) - { - bHasNon11bRate = TRUE; - break; - } - } - } - - if(!bHasNon11bRate) - { - // 19.Extended supported rates - ExtratesBeacon = PacketGetElement(osPacket, EID_ExtSupRates, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - if( ExtratesBeacon.Length != 0) - { - for(i = 0; i < ExtratesBeacon.Length; i++) - { - if(!IS_CCK_RATE((ExtratesBeacon.Octet)[i])) - { - bHasNon11bRate = TRUE; - break; - } - } - } - } - - return bHasNon11bRate; -} - -BOOLEAN -P2PAcceptProbeReq( - IN PP2P_INFO pP2PInfo, - IN const OCTET_STRING *posMpdu, - IN const P2P_MESSAGE *msg - ) -{ - BOOLEAN bRet = FALSE; - //OCTET_STRING osSsid = PacketGetElement(osPacket, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUB_DONT_CARE); - - // - // Check if we shall respond to the ProbeReq. - // Note that when in Op mode acting as GO, - // ProbeReq is not dealt with here. - // - do - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // Win8: Device port discoverability checking ------------------------------------------------------------ - if(GetFirstDevicePort(pP2PInfo->pAdapter) == pP2PInfo->pAdapter) - { - if(GET_P2P_INFO(GetFirstDevicePort(pP2PInfo->pAdapter))->uListenStateDiscoverability == 0) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Reject Probe Request: Device Port: pP2PInfo->uListenStateDiscoverability == 0\n")); - break; - } - } - } - - if(pP2PInfo->State == P2P_STATE_OPERATING) - { - if(P2P_ACTING_AS_GO(pP2PInfo)) - { - // check requested device type of the WPS IE matched - if(!P2PDeviceTypeMatches(pP2PInfo, msg->wpsAttributes.os)) - {//DbgPrint("i\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2PDeviceTypeMatches\n")); - break; - } - - // check Device ID matched - if(!P2PDeviceIDMatches(pP2PInfo, msg)) - {//DbgPrint("j\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2PDeviceIDMatches\n")); - break; - } - } - else - {// operating but not GO => client - if(FALSE == P2PSvc_Enabled(pP2PInfo->pP2PSvcInfo)) - {// client does not reply to a ProbeReq, unless P2PSvc is enabled - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: operating but not GO\n")); - break; - } - } - } - else if(pP2PInfo->State == P2P_STATE_INITIALIZED) - { - // don't reject - } -#if 0 - else if(pP2PInfo->State == P2P_STATE_INITIALIZED && - pP2PInfo->bExtendedListening) - {// doing extended listen - // don't reject - } -#endif - else if(pP2PInfo->State < P2P_STATE_DEV_DISC_START || - pP2PInfo->State > P2P_STATE_DEV_DISC_COMPLETE) - {// only accept probe req when doing dev discovery, note that probe req of GO is dealt with by ConstructProbeRsp(). - // Comment out because we hope to reduce extended listen timing while not to degrade the responsiveness - //break; - } - - // - // Clause 3.1.2.1.2 - // - if(pP2PInfo->State == P2P_STATE_SCAN) - {//DbgPrint("a\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2P_STATE_SCAN\n")); - - break; - } - if(pP2PInfo->Role == P2P_CLIENT) - {//DbgPrint("b\n"); - if(FALSE == P2PSvc_Enabled(pP2PInfo->pP2PSvcInfo)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2P_CLIENT\n")); - break; - } - } - //if(osP2PIE.Length != 0 && P2P_WILDCARD_SSID(osSsid) && pP2PInfo->Role != P2P_DEVICE) - //{// the ProbeReq is intended only for P2P Devices - //DbgPrint("c\n"); - // break; - //} - - // - // Clause 3.1.2.1.3 - // - if( pP2PInfo->State == P2P_STATE_SEARCH) - {//DbgPrint("d\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2P_STATE_SEARCH\n")); - break; - } - - // - // Clause 3.1.2.1.1 - // - if(pP2PInfo->State == P2P_STATE_LISTEN || pP2PInfo->State == P2P_STATE_INITIALIZED) - { - // This has already been checked. - //if(osP2PIE.Length == 0) - //{// no P2P IE - //DbgPrint("e\n"); - // break; - //} - if(!P2P_WILDCARD_MAC_ADDR(msg->bssid)) - {//DbgPrint("g\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2P_WILDCARD_MAC_ADDR pBssid\n")); - - break; - } - if(!(P2P_WILDCARD_MAC_ADDR(msg->da) || eqMacAddr(msg->da, pP2PInfo->DeviceAddress))) - {//DbgPrint("h\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2P_WILDCARD_MAC_ADDR pDaddr\n")); - - break; - } - - // check requested device type of the WPS IE matched - if(!P2PDeviceTypeMatches(pP2PInfo, msg->wpsAttributes.os)) - {//DbgPrint("i\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2PDeviceTypeMatches case 2\n")); - - break; - } - - // check Device ID matched - if(!P2PDeviceIDMatches(pP2PInfo, msg)) - {//DbgPrint("j\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2PDeviceIDMatches case 2\n")); - - break; - } - } - - // - // Clause 2.4.1: P2P Devices shall not respond to Probe Request frames that indicate support for 11b rates only. - // - if(!P2PHasNon11BRateAsSupportingRate(*posMpdu)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject Probe Request: P2PHasNon11BRateAsSupportingRate \n")); - - break; - } - - bRet = TRUE; - } while(FALSE); - - return bRet; -} - -/* -BOOLEAN -P2PToSendProvisionDiscoveryReq( - IN u2Byte ConfigMethod - ) -{ - // - // If peer's ConfigMethods is Display, Keypad or PBC, send ProvisionDiscoveryReq. - // - - BOOLEAN bRet = FALSE; - - switch(ConfigMethod) - { - case P2P_WPS_CONFIG_METHODS_LABEL: - break; - case P2P_WPS_CONFIG_METHODS_DISPLAY: - bRet = TRUE; - break; - case P2P_WPS_CONFIG_METHODS_PUSHBUTTON: - bRet = TRUE; - break; - case P2P_WPS_CONFIG_METHODS_KEYPAD: - bRet = TRUE; - break; - default: - break; - } - - return bRet; -} - - -WPS_CONFIG_METHODS -P2PDetermineConfigMethodToUse( - IN WPS_CONFIG_METHODS PeerConfigMethod - ) -{ - WPS_CONFIG_METHODS RetValue = 0xFF; // an impossible value - - switch(PeerConfigMethod) - { - case P2P_WPS_CONFIG_METHODS_LABEL: // use peer's label - RetValue = P2P_WPS_CONFIG_METHODS_KEYPAD; - break; - case P2P_WPS_CONFIG_METHODS_DISPLAY: // use peer's displayed PIN - RetValue = P2P_WPS_CONFIG_METHODS_KEYPAD; - break; - case P2P_WPS_CONFIG_METHODS_KEYPAD: // peer will enter my PIN - RetValue = P2P_WPS_CONFIG_METHODS_DISPLAY; - break; - case P2P_WPS_CONFIG_METHODS_PUSHBUTTON: // PBC - RetValue = P2P_WPS_CONFIG_METHODS_PUSHBUTTON; - break; - default: - break; - } - - return RetValue; -} -*/ - -BOOLEAN -P2PDetermineDevPasswdIdCompatible( - IN u2Byte PeerDevicePasswdID, - IN u2Byte SelfDevicePasswdID - ) -{ - WPS_DEVICE_PASSWD_ID selfDpid = (WPS_DEVICE_PASSWD_ID)SelfDevicePasswdID; - WPS_DEVICE_PASSWD_ID peerDpid = (WPS_DEVICE_PASSWD_ID)PeerDevicePasswdID; - - switch(selfDpid) - { - case P2P_WPS_DEV_PASSWD_ID_DEFAULT: - // - // Marked: Win8 GO Negotiation: Accept all since the Listener is at this state when in initialization - //if(PeerDevicePasswdID != P2P_WPS_DEV_PASSWD_ID_DEFAULT) - //{ - // return FALSE; - //} - // - break; - case P2P_WPS_DEV_PASSWD_ID_USER_SPEC: - if(peerDpid != P2P_WPS_DEV_PASSWD_ID_DEFAULT && - peerDpid != P2P_WPS_DEV_PASSWD_ID_REG_SPEC) - { - return FALSE; - } - break; - case P2P_WPS_DEV_PASSWD_ID_PBC: - if(peerDpid != P2P_WPS_DEV_PASSWD_ID_PBC) - { - return FALSE; - } - break; - case P2P_WPS_DEV_PASSWD_ID_REG_SPEC: - if(peerDpid != P2P_WPS_DEV_PASSWD_ID_USER_SPEC) - { - return FALSE; - } - break; - case P2P_WPS_DEV_PASSWD_ID_WFDS_DEFAULT_PIN: - //if(peerDpid != P2P_WPS_DEV_PASSWD_ID_WFDS_DEFAULT_PIN) - //{ - // return FALSE; - //} - return TRUE; - break; - default: - return FALSE; - break; - } - - return TRUE; -} - -BOOLEAN -P2PDetermineGONegoDevPasswdIdCompaible( - IN u2Byte selfDpid, - IN u2Byte peerDpid - ) -{ - // - // Check Device Password ID compatibility - // - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PDetermineGONegoDevPasswdIdCompaible(): recvd Dev Passwd ID (%u), mine (%u)\n", - peerDpid, selfDpid)); - - if(!P2PDetermineDevPasswdIdCompatible(peerDpid, selfDpid)) - {// dev passwd id incompatible - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PDetermineGONegoDevPasswdIdCompaible(): DevPasswdId Incompatible\n")); - return FALSE; - } - - return TRUE; -} - -// -// Description: -// Handle Probe Request packet for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_PKT_DROP if this packet is handled by P2P and can be droppd. -// If the returned status is RT_STATUS_SUCCESS, the next normal process should be executed. -// Remark: -// When the current state is P2P Go or AP mode, the probe request is handled by AP mode. -// This function only handles the probe request when the current state is P2P device mode. -// -RT_STATUS -P2P_OnProbeReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - OCTET_STRING osWpsIE = PacketGetElement(*posMpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUB_DONT_CARE); - BOOLEAN bHandled = FALSE; - P2P_ROLE p2pRole = pP2PInfo->Role; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - // If the state is AP mode or IBSS mode, we don't handle probe request here. - if(pAdapter == GetFirstGOPort(pAdapter) || - pMgntInfo->mIbss && !pMgntInfo->mDisable && pMgntInfo->bIbssCoordinator) - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("This pkt will be handled by GO!\n")); - return RT_STATUS_SUCCESS; - } - - if(P2P_DEVICE != pP2PInfo->Role) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Return because Not Device port!\n")); - return RT_STATUS_SUCCESS; - } - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_PROBE_REQ, - pRfd, Frame_pSaddr(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - // RT_TRACE(COMP_P2P, DBG_LOUD, ("Failed (0x%08X) from p2p_DevList_RxUpdate!\n", rtStatus)); - break; - } - - msg = pDev->rxFrames[P2P_FID_PROBE_REQ]->msg; - - if(!p2p_validate_ProbeReq(msg)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("RT_STATUS_MALFORMED_PKT!\n")); - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - if(!P2PAcceptProbeReq(pP2PInfo, posMpdu, msg)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("rejected by P2PAcceptProbeReq()\n")); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Transmitter Address: ", Frame_pTaddr(*posMpdu)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->State: %d\n", pP2PInfo->State)); - break; - } - - if(P2P_DEVICE == p2pRole - && pP2PInfo->State > P2P_STATE_GO_NEGO_COMPLETE - && FALSE == P2PSvc_Enabled(pP2PInfo->pP2PSvcInfo) - ) - {// when operating, ProbeReq is handled in OnProbeReq(), not here. - break; - } - - if(pP2PInfo->bExtendedListening) - { - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("recv ProbeReq in Extended Listen\n")); - //RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2P_OnProbeReq(): recv ProbeReq in Extended Listen\n", DeviceAddress); - } - - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->sa, msg, TRUE); - - bHandled = TRUE; - }while(FALSE); - - // Debug Device Discovery ------------------------------------------------------------ - pP2PInfo->ProbeRequestSequenceNum = (u2Byte) Frame_SeqNum(*posMpdu); // 12 bits. - // -------------------------------------------------------------------------------- - - - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("PlatformGetCurrentTime(): %d\n", (u4Byte)PlatformGetCurrentTime())); - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("pDevicePortP2PInfo->TimeStartToStopSendingProbeResponse: %d\n", (u4Byte)pP2PInfo->TimeStartToStopSendingProbeResponse)); - - // - // Send ProbeRsp - if(bHandled) - { - if(pP2PInfo->TimeStartToStopSendingProbeResponse == 0 || (s8Byte) (PlatformGetCurrentTime()) - pP2PInfo->TimeStartToStopSendingProbeResponse < 0) - { - p2p_Send_ProbeRsp(pP2PInfo, msg->sa, pRfd, posMpdu, &msg->p2pAttributes.os); - - // - // After sending probe request, return "RT_STATUS_PKT_DROP" to notify that this pakcet was handled - // here and it must be dropped. - // - rtStatus = RT_STATUS_PKT_DROP; - - } - else if((s8Byte)(PlatformGetCurrentTime()) - pP2PInfo->TimeStartToStopSendingProbeResponse > 2 * P2P_RESERVED_TIME_FOR_ACTION_FRAME_MS * 1000) - { - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("Reset pP2PInfo->TimeStartToStopSendingProbeResponse: from %d to 0\n", (u4Byte)pP2PInfo->TimeStartToStopSendingProbeResponse)); - pP2PInfo->TimeStartToStopSendingProbeResponse = 0; - rtStatus = RT_STATUS_PKT_DROP; - } - else - { - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("No probe rsp\n")); - } - } - - p2p_DevList_Unlock(&pP2PInfo->devList); - - return rtStatus; -} - -// -// Description: -// Handle probe response packet for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This function updates the P2P scan list and check the WPS state for join. -// -RT_STATUS -P2P_OnProbeRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - MEMORY_BUFFER mb = {NULL, 0}; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) && pP2PInfo->bForceScanLegacyNetworks) - { - MEMORY_BUFFER mbPacket = {NULL, 0}; - mbPacket.Buffer = posMpdu->Octet; - mbPacket.Length = posMpdu->Length; - P2PDeviceListUpdate(pP2PInfo, &pP2PInfo->DeviceList, pRfd, Frame_pBssid(*posMpdu), NULL, mbPacket); - } - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - // RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2P_OnProbeRsp(): ", Frame_pSaddr(*posMpdu)); - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_PROBE_RSP, - pRfd, Frame_pBssid(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_PROBE_RSP]->msg; - - mb.Buffer = (u1Byte *)pDev; - mb.Length = sizeof(*pDev); - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_DEV_FOUND, &mb); - - if(!p2p_validate_ProbeRsp(msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Update Managed P2P Device Info. - p2pUpdateBssDescManageability(pP2PInfo->pAdapter, msg->bssid, msg); - - if(NULL == (pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->devAddr, msg, TRUE))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Reject because of invalid P2P Sub IE\n")); - break; - } - - if(msg->_noa) - P2POnP2PNoticeOfAbsence(pP2PInfo, *posMpdu, msg); - - // Update the device lists -------------------------------------------------------------------------- - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - MEMORY_BUFFER mbPacket = {NULL, 0}; - mbPacket.Buffer = posMpdu->Octet; - mbPacket.Length = posMpdu->Length; - P2PDeviceListUpdate(pP2PInfo, &pP2PInfo->DeviceList, pRfd, msg->bssid, msg->devAddr, mbPacket); - - - if(pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs > 0) - { // Finding some device now - if(eqMacAddr(msg->devAddr, pP2PInfo->ScanDeviceIDs.DeviceIDs[0])) - { // Device is Found: Complete the Scan Immediately for speeding up GO Negotiation - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] cease scan for dev id matched\n")); - p2p_DevList_Unlock(&pP2PInfo->devList); - P2PScanListCeaseScan(pP2PInfo); - p2p_DevList_Lock(&pP2PInfo->devList); - } - } - } - // ---------------------------------------------------------------------------------------------- - - // - // In this case, we are in pre GO Nego phase. We will start a GO Nego procedure. - // - if(P2PCommonChannelArrived(pP2PInfo, pDev, *posMpdu)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("common channel arrived\n")); - //return; - } - - if(pP2PInfo->DeviceDiscoverabilityContext.bWaitingBeaconFromGO && - pP2PInfo->State == P2P_STATE_DEVICE_DISCOVERABILITY_WAIT_BEACON && - eqMacAddr(pP2PInfo->DeviceDiscoverabilityContext.GoBssid, msg->bssid)) - { - if(p2p_FindClientInfoByDevAddr(pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress, msg, NULL)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("going to send DeviceDiscoverabilityReq to the GO\n")); - - pP2PInfo->DeviceDiscoverabilityContext.bWaitingBeaconFromGO = FALSE; - - pP2PInfo->State = P2P_STATE_DEVICE_DISCOVERABILITY_REQ_SEND; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - } - - P2PSvc_OnProbeRsp(pP2PInfo->pP2PSvcInfo, msg->devAddr, &msg->p2pAttributes.os); - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - return rtStatus; -} - -// -// Description: -// Handle association packet for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This function is called after this client is determined successfully associated with our AP mode. -// This function checks the P2P IEs from the client and update it to the client list if it is a p2p client. -// By Bruce, 2012-03-12. -// -RT_STATUS -P2P_OnAssocReqAccept( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte InterfaceAddress = Frame_pSaddr(*posMpdu); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - PRT_WLAN_STA pAsocEntry = NULL; - - PMGNT_INFO pExtMgntInfo = &(pAdapter->MgntInfo); - - P2P_MESSAGE msg; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - do - { - if(RT_STATUS_SUCCESS == (rtStatus = p2p_parse_Ies(posMpdu, DBG_LOUD, &msg))) - if(!p2p_validate_AssocReq(&msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - if(NULL == (pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg.devAddr, &msg, TRUE))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] reject because of invalid P2P Sub IE\n")); - break; - } - - pAsocEntry = AsocEntry_GetEntry(&(pAdapter->MgntInfo), InterfaceAddress); - if(pAsocEntry) - { - pAsocEntry->bP2PClient = TRUE; - cpMacAddr(pAsocEntry->P2PClientInfoDesc.InterfaceAddress, pP2PDeviceDesc->IntendedP2PInterfaceAddress); - cpMacAddr(pAsocEntry->P2PClientInfoDesc.DeviceAddress, pP2PDeviceDesc->DeviceAddress); - pAsocEntry->P2PClientInfoDesc.DeviceCapability = pP2PDeviceDesc->DeviceCapability; - PlatformMoveMemory(&pAsocEntry->P2PClientInfoDesc.WpsAttributes, &(pP2PDeviceDesc->WpsAttributes), sizeof(P2P_WPS_ATTRIBUTES)); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2P_OnAssocReqAccept(): Copy into list with client = ", pAsocEntry->P2PClientInfoDesc.InterfaceAddress); - } - }while(FALSE); - - p2p_parse_FreeMessage(&msg); - - FunctionOut(COMP_P2P); - - return rtStatus; -} - -// -// Description: -// Handle deauth/disassoc packet in client mode for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This function updates the P2P capability from the reason code. -// -RT_STATUS -P2P_ClientOnDeauth( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - P2P_MESSAGE msg; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - do - { - if(RT_STATUS_SUCCESS == (rtStatus = p2p_parse_Ies(posMpdu, DBG_LOUD, &msg))) - if(!p2p_validate_Deauth(&msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // TODO: we may check whether this is from an AP (either WLAN AP or P2P GO) that has manageability attribute - - if(msg._minorReasonCode) - {// has valid minor reason code - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("minor rsn code: %u\n", msg.minorReasonCode)); - - switch(msg.minorReasonCode) - { - default: // Reserved - break; - - case P2P_MINOR_RESON_CROSS_CONNECTION: - pP2PInfo->bWlanApRejection_CrossConnection = TRUE; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("disable cross connection\n")); - pP2PInfo->GroupCapability &= ~gcCrossConnection; // disable cross connection - - // - // After disable cross connection, we shall reconnect to the wlan AP - // without corss connection bit set. - // - - break; - - case P2P_MINOR_RESON_MANAGED_BIT: - if(!(pP2PInfo->DeviceCapability & dcP2PInfrastructureManaged)) - { - pP2PInfo->bWlanApRejection_Unmanaged = TRUE; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("disable P2P mode because of minor reason code 2 => should not send any P2P IE in ProbeReq and (Re)AssocReq\n")); - MgntActSet_P2PMode(pP2PInfo->pAdapter, FALSE, FALSE, 1, 1, 1); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("Receive deauth with minor rsn code 2 when managed P2P is enabled => ignore it\n")); - - } - break; - - case P2P_MINOR_RESON_CONCURRENT_COEXISTENCE: - if(pP2PInfo->DeviceCapability & dcP2PInfrastructureManaged) - { - pu1Byte pBssid = Frame_pBssid(*posMpdu); - PRT_WLAN_BSS pBssDesc = NULL; - pP2PInfo->bWlanApRejection_IncompatibleCoexistenceParameters = TRUE; - - if(pP2PInfo->Role != P2P_GO) - break; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_SCAN_SPINLOCK); - pBssDesc = BssDescDupByBssid(pP2PInfo->pAdapter, pBssid); - - if(pBssDesc) - { - P2PUpdateWlanApManagedInfo(pP2PInfo, pBssDesc); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_SCAN_SPINLOCK); - //RT_TRACE_F(COMP_P2P, DBG_LOUD, - // ("disable P2P mode because of minor reason code 3\n")); - //P2PDisconnect(pP2PInfo); - //MgntActSet_P2PMode(pP2PInfo->pAdapter, FALSE, FALSE, 1, 1, 1); - } - break; - - case P2P_MINOR_RESON_INFRASTRUCTURE_MANAGED_BIT: - if(pP2PInfo->DeviceCapability & dcP2PInfrastructureManaged) - { - pP2PInfo->bWlanApRejection_IncompatibleP2POperation = TRUE; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("disable P2P mode because of minor reason code 4 and I'm a managed P2P Device\n")); - MgntActSet_P2PMode(pP2PInfo->pAdapter, FALSE, FALSE, 1, 1, 1); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("ignore the deauth with minor reason code 4 bceause I'm NOT a managed P2P Device\n")); - - } - break; - } - } - }while(FALSE); - - p2p_parse_FreeMessage(&msg); - - return rtStatus; -} - -// -// Description: -// Handle deauth/disassoc packet in client mode for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This function updates the P2P capability from the reason code. -// -RT_STATUS -P2P_ClientOnDisassoc( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - return P2P_ClientOnDeauth(pAdapter, pRfd, posMpdu); -} - -// -// Description: -// Handle P2P Go Negotiation Reqeust packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnGONReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - int go; - P2P_STATE CurrentState = pP2PInfo->State; // For bakcup state when neg failed. - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnGONReq():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_GO_NEG_REQ, - pRfd, Frame_pSaddr(*posMpdu), - pP2PInfo->ListenChannel, &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_GO_NEG_REQ]->msg; - - if(!p2p_validate_GoNegReq(msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->devAddr, msg, TRUE); - if(pP2PDeviceDesc == NULL) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] reject because of invalid P2P Sub IE\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // - // Check state - // - - if(pP2PInfo->Role == P2P_CLIENT) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Receive GoReq when we are client\n")); - P2PIndicateDeviceReqClientGoFormation(pP2PInfo, pP2PDeviceDesc); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_REJECTED_BY_USER; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONReq; - } - else if(!P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && pP2PInfo->State > P2P_STATE_DEV_DISC_COMPLETE) - { - RT_TRACE(COMP_P2P, DBG_WARNING, ("[WARNING] recv in an invalid state: %u\n", pP2PInfo->State)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // - // v1.07: - // If a Status attribute is present in the received GO Negotiation Request frame, - // the request is being used to signal user rejection of an earlier GO Negotiation Request - // sent by the receiving P2P Device and shall be discarded with no further action. - // - if(msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] has Status attr in GONegoReq, Status: %u\n", pP2PInfo->State)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Copy device descriptor - PlatformMoveMemory(&pP2PInfo->ConnectionContext.ConnectingDevice, - pP2PDeviceDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - - // Reject overllapped GONego Req - if(P2PIsDoingGroupFormation(pP2PInfo) && - !cpMacAddr(pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress, msg->sa)) - {// not to update the state machine - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] reject overllaped GONego Req\n")); - goto exit_P2POnGONReq; - } - - pP2PInfo->State = P2P_STATE_GO_NEGO_REQ_RECVD; - - if( P2P_DOING_DEVICE_DISCOVERY(pP2PInfo) ) - { - p2p_DevList_Unlock(&pP2PInfo->devList); - P2PScanListCeaseScan(pP2PInfo); - p2p_DevList_Lock(&pP2PInfo->devList); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - - // Determine GO - go = p2p_go_det(pP2PInfo->GOIntent, pP2PDeviceDesc->GOIntent); - if(go) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("I'm going to be the GO\n")); - - pP2PInfo->ConnectionContext.bGoingToBeGO = TRUE; - - // Determine GO SSID - P2PDetermineGOSsid(pP2PInfo, pP2PInfo->SSIDBuf, &pP2PInfo->SSIDLen); - } - else if(0 == go) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("the target device is going to be the GO\n")); - pP2PInfo->ConnectionContext.bGoingToBeGO = FALSE; - } - else - {// shall update the state machine - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] P2P_STATUS_FAIL_BOTH_P2P_DEVICES_INDICATED_GO_INTENT_OF_15\n")); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_BOTH_P2P_DEVICES_INDICATED_GO_INTENT_OF_15; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONReq; - } - - // Check Device Password ID compatibility - { - if(P2P_ADAPTER_RTK_SUPPORT_P2P(pAdapter) && - !P2PDetermineGONegoDevPasswdIdCompaible(pP2PInfo->WpsDevPasswdId, msg->wpsDevPasswordId)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Fail information is unavailable\n")); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - - // - // Check if peer is waiting for our user input - // - if(msg->wpsDevPasswordId == P2P_WPS_DEV_PASSWD_ID_PBC || - msg->wpsDevPasswordId == P2P_WPS_DEV_PASSWD_ID_DEFAULT || - msg->wpsDevPasswordId == P2P_WPS_DEV_PASSWD_ID_REG_SPEC) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Start waiting for user input for 2 min\n")); - pP2PInfo->bReinitiateConnection = TRUE; - cpMacAddr(pP2PInfo->DevAddrToReConnect, msg->devAddr); - pP2PInfo->TimeStartWaitingForReinitiate = PlatformGetCurrentTime(); - } - - goto exit_P2POnGONReq; - } - } - - // Check if channel is compatible - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { - p2p_Channel_Intersect(&pP2PInfo->ChannelEntryList, - &pDev->p2p->channels, - &pDev->p2p->commonChannels); - - if(pDev->p2p->commonChannels.regClasses) - { // Has Common Channel - // Check if our op channel is one of channels supported by peer - if(!p2p_Channel_InChannelEntryList(pP2PInfo->OperatingChannel, &pDev->p2p->commonChannels)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("going to be GO, change op ch from: %d to %d\n", - pP2PInfo->OperatingChannel, - pDev->p2p->commonChannels.regClass[0].channel[0])); - pP2PInfo->OperatingChannel = pDev->p2p->commonChannels.regClass[0].channel[0]; // alwyas use the first one - } - - } - // Win8 Go Negotiation Trick ----------------------------------------------------------------------------------------------------------------------- - else if(MgntLinkStatusQuery(GetDefaultAdapter(pP2PInfo->pAdapter)) == RT_MEDIA_CONNECT) - { - #if (MULTICHANNEL_SUPPORT == 1) // For Compilation: Only PCI-E Support MultiChannel Now - - pP2PInfo->OperatingChannel = MultiChannelGetPortConnected20MhzChannel(GetDefaultAdapter(pP2PInfo->pAdapter)); - - #endif - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("WHCK Test Trick: Going to be GO, change op ch to default port connected channel: %d\n", pP2PInfo->OperatingChannel)); - } - // --------------------------------------------------------------------------------------------------------------------------------------------- - else // No Common Channel - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no common channels\n")); - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "[WARNING] peer supported op chnl:\n", - pP2PDeviceDesc->ChannelPlanChannel, - pP2PDeviceDesc->ChannelPlanLength); - - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_NO_COMMON_CHANNELS; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONReq; - } - } - - // After here, we shall send a GONRsp of status success - pP2PDeviceDesc->Status = P2P_STATUS_SUCCESS; - - // - // Fill ConnectionContext, note that bGoingToBeGO has already been filled - // - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - pP2PInfo->ConnectionContext.DialogToken = pP2PDeviceDesc->DialogToken; - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = P2P_SCAN_FIND_PHASE_LOOP_TIMES; // no use - - // ========== exit_P2POnGONReq ========== -exit_P2POnGONReq: - - if(MgntRoamingInProgress(pMgntInfo)) - { - if(MgntResetOrPnPInProgress(pAdapter)) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("reset in progress case 1\n")); - return RT_STATUS_FAILURE; - } - - MgntRoamComplete(pAdapter, MlmeStatus_refused); - } - // < Note> If failed, we shall not modify the original state machine state. - if(P2P_STATUS_SUCCESS == pP2PDeviceDesc->Status) - WFD_OnP2PActionFrame(pAdapter, pRfd, posMpdu); - - // If failed, indicate as early as possible - if(pP2PDeviceDesc->Status != P2P_STATUS_SUCCESS && - FrameBuf_Length(&msg->wpsAttributes)) - { - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - } - else - { - if(!P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) // use OffChnlTx, don't extend dwell time here - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), P2P_GO_NEGO_FRAME_TIMEOUT); - } - - // For Win8: Indicate the reception of the GO negotiation request ------------------------- - // Wait for the command of OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - //in case OID not set - pP2PInfo->State = P2P_STATE_GO_NEGO_RSP_SEND; - } - else - { - // Send GONRsp - pP2PInfo->Status = pP2PInfo->ConnectionContext.Status; - - p2p_Send_GoNegRsp(pP2PInfo, pP2PDeviceDesc->DeviceAddress,pP2PDeviceDesc->DialogToken); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("send GORsp with status = %u, intent = %u, tie breaker: %u\n", - pP2PInfo->ConnectionContext.Status, - pP2PInfo->GOIntent >> 1, - pP2PInfo->GOIntent & 0x01)); - - // Update state machine - if(pP2PInfo->ConnectionContext.Status == P2P_STATUS_SUCCESS) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_RSP_SEND; - } - else if(!FrameBuf_Length(&msg->wpsAttributes)) - { - pP2PInfo->State = CurrentState; - } - else if(pP2PInfo->Role != P2P_CLIENT) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - } - - if( P2P_DOING_DEVICE_DISCOVERY(pP2PInfo) ) - { - p2p_DevList_Unlock(&pP2PInfo->devList); - P2PScanListCeaseScan(pP2PInfo); - p2p_DevList_Lock(&pP2PInfo->devList); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - } - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(RT_STATUS_SUCCESS == rtStatus) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_GO_NEGOTIATION_REQUEST, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("<=== status: %u, next state: %u\n", pP2PInfo->ConnectionContext.Status, pP2PInfo->State)); - - return rtStatus; -} - -// -// Description: -// Handle P2P Go Negotiation Response packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnGONRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - int go; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2P_OnGONRsp():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_GO_NEG_RSP, - pRfd, Frame_pSaddr(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_GO_NEG_RSP]->msg; - - if(!p2p_validate_GoNegRsp(pP2PInfo, msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Store the info in the P2P IE into pP2PDeviceDesc - if(!P2PScanListFind(pP2PInfo->ScanList, pP2PInfo->ScanListSize, msg->devAddr, NULL, NULL)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("peer is not in our scan list\n")); - P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - } - - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->devAddr, msg, FALSE); - if(pP2PDeviceDesc == NULL) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] reject because of invalid P2P Sub IE\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(!P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && pP2PInfo->State != P2P_STATE_GO_NEGO_RSP_WAIT) - {// althoug incorrect state, we still record info form the GONegoRsp - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("[WARNING] our state (%d) not in P2P_STATE_GO_NEGO_RSP_WAIT state\n", pP2PInfo->State)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // - // Update ConnectionContext.ConnectingDevice since after P2PProcessSubElements, - // its ChannelList or other elements may be modified. - // - PlatformMoveMemory(&pP2PInfo->ConnectionContext.ConnectingDevice, - pP2PDeviceDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - - // Compare DialogToken - if(!P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && pP2PDeviceDesc->DialogToken != pP2PInfo->ConnectionContext.DialogToken) - {// Dialog Token mismatch - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] dialog token mismatch, recvd: %u, self: %u\n", - pP2PDeviceDesc->DialogToken, - pP2PInfo->ConnectionContext.DialogToken)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - else - { - pP2PInfo->ConnectionContext.DialogToken++; - } - - if(pP2PDeviceDesc->Status != P2P_STATUS_SUCCESS) - {// Group Formation ends on reception of a GONRsp with status other than success - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] status (%u) of the GONRsp is not success\n", pP2PDeviceDesc->Status)); - - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - if(RUNTIME_OS_WIN_FROM_WIN8(pP2PInfo->pAdapter)) - { - break; // break with status success to indicate go neg rsp - } - - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - // - // Reject overlapped GONego Req - // - if(P2PIsDoingGroupFormation(pP2PInfo) && - !cpMacAddr(pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress, msg->sa)) - {// not to update the state machine - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Reject overlapped GONego Req\n")); - goto exit_P2POnGONRsp; - } - - // Determine GO - go = p2p_go_det(pP2PInfo->GOIntent, pP2PDeviceDesc->GOIntent); - if(go) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("I'm going to be the GO\n")); - - pP2PInfo->ConnectionContext.bGoingToBeGO = TRUE; - - // Determine GO SSID - P2PDetermineGOSsid(pP2PInfo, pP2PInfo->SSIDBuf, &pP2PInfo->SSIDLen); - } - else if(0 == go) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("the target device is going to be the GO\n")); - - pP2PInfo->ConnectionContext.bGoingToBeGO = FALSE; - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] P2P_STATUS_FAIL_BOTH_P2P_DEVICES_INDICATED_GO_INTENT_OF_15\n")); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_BOTH_P2P_DEVICES_INDICATED_GO_INTENT_OF_15; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONRsp; - } - - // Check Device Password ID compatibility - if(!P2PDetermineGONegoDevPasswdIdCompaible(pP2PInfo->WpsDevPasswdId, msg->wpsDevPasswordId)) - { - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONRsp; - } - - // Check if channel is compatible - - p2p_Channel_Intersect(&pP2PInfo->ChannelEntryList, - &pDev->p2p->channels, - &pDev->p2p->commonChannels); - - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { - if(pDev->p2p->commonChannels.regClasses) // use P2PMakeP2PChannelEntryList to test if we have common channels - { - // Check if our op channel is one of channels supported by peer - if(!p2p_Channel_InChannelEntryList(pP2PInfo->OperatingChannel, &pDev->p2p->commonChannels)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("going to be GO, change op ch from: %d to %d\n", - pP2PInfo->OperatingChannel, - pDev->p2p->commonChannels.regClass[0].channel[0])); - // TODO: we may not support the 1st channel supported by peer - pP2PInfo->OperatingChannel = pDev->p2p->commonChannels.regClass[0].channel[0]; // alwyas use the first one - } - - } - else // no common channel - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no common channels: %p\n", &pP2PInfo->ConnectionContext.ConnectingDevice)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ChnlList Recvd:\n", - pP2PDeviceDesc->ChannelPlanChannel, - pP2PDeviceDesc->ChannelPlanLength); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_NO_COMMON_CHANNELS; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONRsp; - } - } - else - {// Client - if(pDev->p2p->commonChannels.regClasses) // use P2PMakeP2PChannelEntryList to test if we have common channels - { - // Common Channel found - } - else // No common channel - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no common channel\n")); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_NO_COMMON_CHANNELS; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONRsp; - } - - pP2PInfo->OperatingChannel = pP2PDeviceDesc->OperatingChannel; - } - - // Fill ConnectionContext, note that bGoingToBeGO has already been filled - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - pP2PInfo->ConnectionContext.DialogToken = pP2PDeviceDesc->DialogToken; // no use - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = P2P_SCAN_FIND_PHASE_LOOP_TIMES; // no use - - -exit_P2POnGONRsp: - - if(P2P_STATUS_SUCCESS == pP2PDeviceDesc->Status) - WFD_OnP2PActionFrame(pAdapter, pRfd, posMpdu); - // - // If failed, indicate as early as possible - // - if(pP2PDeviceDesc->Status != P2P_STATUS_SUCCESS) - { - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - } - - { - BOOLEAN bSupportTxReport = FALSE; - - // - // Send GONConfirm - // - if(FALSE == P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - pP2PInfo->Status = pP2PInfo->ConnectionContext.Status; - p2p_Send_GoNegConfirm(pP2PInfo, pP2PDeviceDesc->DeviceAddress, pP2PDeviceDesc->DialogToken, &bSupportTxReport); - - // - // Update state machine - // - if(bSupportTxReport) - { - pP2PInfo->msTimeWaitGoNegoConfirmSent = 0; - pP2PInfo->State = P2P_STATE_GO_NEGO_CONFIRM_SENT_WAIT; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - else - { - pP2PInfo->msTimeWaitGoNegoConfirmSent = 0; - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 200); // in case P2P_STATE_GO_NEGO_COMPLETE, if w are GO, channel is switched to the op channel and the Confirm may be sent on the op channel instead of the listen channel - } - } - } - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(RT_STATUS_SUCCESS == rtStatus) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - } - - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("status: %u\n", pP2PInfo->ConnectionContext.Status)); - - return rtStatus; -} - -// -// Description: -// Handle P2P Go Negotiation Confirm packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnGONConfirm( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnGONConfirm():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_GO_NEG_CONF, - pRfd, Frame_pSaddr(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_GO_NEG_CONF]->msg; - - if(!p2p_validate_GoNegConfirm(pP2PInfo->ConnectionContext.bGoingToBeGO, msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Check state - // Possible states are confirmWait and RspSend - if(!OS_SUPPORT_WDI(pP2PInfo->pAdapter) - && !(pP2PInfo->State == P2P_STATE_GO_NEGO_CONFIRM_WAIT || pP2PInfo->State == P2P_STATE_GO_NEGO_RSP_SEND)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] state (%u) is not P2P_STATE_GO_NEGO_CONFIRM_WAIT or P2P_STATE_GO_NEGO_RSP_SEND\n", pP2PInfo->State)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->sa, msg, FALSE); - if(pP2PDeviceDesc == NULL) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("[WARNING] reject because of invalid P2P Sub IE\n")); - rtStatus = RT_STATUS_INVALID_CONTEXT; - break; - } - - // Check DialogToken - if(pP2PDeviceDesc->DialogToken != pP2PInfo->ConnectionContext.DialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] dialog token mismatch: mine(%u), peer(%u)\n", - pP2PInfo->ConnectionContext.DialogToken, - pP2PDeviceDesc->DialogToken)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - else - { - pP2PInfo->ConnectionContext.DialogToken++; - } - - if(pP2PDeviceDesc->Status != P2P_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WRNING] status of the GONConfirm is not success\n")); - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - - if(RUNTIME_OS_WIN_FROM_WIN8(pP2PInfo->pAdapter)) - { - break; // break with status success to indicate go neg conf - } - - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - PlatformMoveMemory(&pP2PInfo->ConnectionContext.ConnectingDevice, - pP2PDeviceDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - - // Check if channel is compatible - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { - // Check if our op channel is one of channels supported by peer - if(!P2PIsChnlInChnlList(pP2PDeviceDesc->ChannelPlanChannel, - pP2PDeviceDesc->ChannelPlanLength, - pP2PInfo->OperatingChannel)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("going to be GO, change op ch from: %d to %d\n", - pP2PInfo->OperatingChannel, - pP2PDeviceDesc->ChannelPlanChannel[0])); - // TODO: we may not support the 1st channel supported by peer - pP2PInfo->OperatingChannel = pP2PDeviceDesc->ChannelPlanChannel[0]; // alwyas use the first one - } - } - else - {// Client - if(!P2PIsChnlInChnlEntryList(&pP2PInfo->ChannelEntryList, - pP2PDeviceDesc->OperatingChannel)) - {// the intended chnl of the GO is not supported - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("the intended channel (%u) of the GO is not supported\n", - pP2PDeviceDesc->OperatingChannel)); - pP2PDeviceDesc->Status = P2P_STATUS_FAIL_NO_COMMON_CHANNELS; - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - goto exit_P2POnGONConfirm; - } - else - {// use the intended op chnl of the GO - pP2PInfo->OperatingChannel = pP2PDeviceDesc->OperatingChannel; - - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "P2P_OnGONConfirm(): I'm client, the target SSID = ", pP2PInfo->ConnectionContext.ConnectingDevice.SsidBuf, pP2PInfo->ConnectionContext.ConnectingDevice.SsidLen); - } - } - - pP2PDeviceDesc->Status = P2P_STATUS_SUCCESS; - -exit_P2POnGONConfirm: - - if(P2P_STATUS_SUCCESS == pP2PDeviceDesc->Status) - { - WFD_OnP2PActionFrame(pAdapter, pRfd, posMpdu); - } - else - { - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - } - - // Fill ConnectionContext - pP2PInfo->ConnectionContext.Status = pP2PDeviceDesc->Status; - - // Update state machine - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(RT_STATUS_SUCCESS == rtStatus) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("status: %u\n", pP2PInfo->ConnectionContext.Status)); - return rtStatus; -} - -// -// Description: -// Handle P2P Go Invitation request packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnInvitationReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PP2P_DEVICE_DISCRIPTOR pClientInvitationInfo = NULL; - static u8Byte TimeStamp = 0; - static u2Byte PreviousToken = 0xFFFF; - u8Byte CurrentTime = 0; - u4Byte ConfigurationTimeout = 0; // in ms, note that the configuration time out in the P2P IE is defined as units of 10ms - P2P_ROLE PeerRole = 0; - P2P_LIB_INVITATION_REQ_CONTEXT LibInvitationReq; - P2P_STATE StateBackup; - PRT_GEN_TEMP_BUFFER pGenBufClientInvitationInfo = NULL; - BOOLEAN bBackwardInvite = FALSE; - const u1Byte *pGrpBssid = NULL; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - // We should not accept InvitationReq too often. - CurrentTime = PlatformGetCurrentTime(); - if(CurrentTime - TimeStamp < 2000000 && TimeStamp != 0 && - (0xFFFF != PreviousToken && (u1Byte)PreviousToken == *((pu1Byte)posMpdu->Octet + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] recv InvitationReq too often => reject, time diff: %d, token = %d\n", - (u4Byte)(CurrentTime - TimeStamp), *((pu1Byte)posMpdu->Octet + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN))); - return RT_STATUS_MEDIA_BUSY; - } - - // we get here at the first time (since TimeStamp is 0), and we get the correct TimeStamp - TimeStamp = CurrentTime; - PreviousToken = *((pu1Byte)posMpdu->Octet + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnInvitationReq():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_INV_REQ, - pRfd, Frame_pSaddr(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_INV_REQ]->msg; - - if(!p2p_validate_InvitationReq(msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - pGenBufClientInvitationInfo = GetGenTempBuffer (pAdapter, sizeof(P2P_DEVICE_DISCRIPTOR)); - pClientInvitationInfo = (P2P_DEVICE_DISCRIPTOR *)pGenBufClientInvitationInfo->Buffer.Ptr; - - if(pP2PInfo->InvitationContext.bWaitingBackwardInvite && - eqMacAddr(pP2PInfo->InvitationContext.InvitedDevice.DeviceAddress, msg->devAddr)) - { - bBackwardInvite = TRUE; - } - - if(!bBackwardInvite) PlatformZeroMemory(&(pP2PInfo->InvitationContext), sizeof(P2P_INVITATION_CONTEXT)); - PlatformZeroMemory((pClientInvitationInfo), sizeof(P2P_DEVICE_DISCRIPTOR)); - - // TODO: check capability - - // If we are not P2P Device, reject, since the invitor can communicate with us by join our group. - if(!P2P_ACTING_AS_DEVICE(pP2PInfo)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] reject because current role is: %u, state is: %u\n", - pP2PInfo->Role, pP2PInfo->State)); - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_INVALID_PARAMETERS; - break; - } - - // - // Determine whether we are invited by a GO, Client or device. - // We also determine whether its a persistent invitation here. - // - pP2PInfo->InvitationContext.InvitorRole = eqMacAddr(msg->grpDevAddr, msg->devAddr) ? (P2P_GO) : (P2P_CLIENT); - pP2PInfo->InvitationContext.bPersistentInvitation = TEST_FLAG(msg->invitationFlags, BIT0); - cpMacAddr(pP2PInfo->InvitationContext.GODeviceAddress, msg->grpDevAddr); - CopySsid(pP2PInfo->InvitationContext.SsidBuf, pP2PInfo->InvitationContext.SsidLen, msg->grpSsid, msg->grpSsidLen); - PeerRole = pP2PInfo->InvitationContext.InvitorRole; - - // Parse the subelements and store the info in P2PDeviceDesc - p2p_parse_UpdateDevDesc(pRfd->Buffer.VirtualAddress, msg, pRfd->Status.SignalStrength, pClientInvitationInfo); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bAcceptInvitation: %u\n", pP2PInfo->bAcceptInvitation)); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "AccpetInvitationDeviceAddress", pP2PInfo->AccpetInvitationDeviceAddress); - - if(bBackwardInvite // accept backward invitation - || FALSE == pP2PInfo->InvitationContext.bPersistentInvitation // if pure invitation, always accept it - ) - { - pP2PInfo->InvitationContext.Status = P2P_STATUS_SUCCESS; - } - else if(pP2PInfo->bAcceptInvitation) - {// upper layer wants to accept invitation from a specific device - if(eqMacAddr(pP2PInfo->AccpetInvitationDeviceAddress, msg->devAddr)) - { - pP2PInfo->InvitationContext.Status = P2P_STATUS_SUCCESS; - } - else if(MacAddr_isBcst(pP2PInfo->AccpetInvitationDeviceAddress)) - {// to accept all - pP2PInfo->InvitationContext.Status = P2P_STATUS_SUCCESS; - } - else - { - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE; - } - } - else - { - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE; - } - - if(PeerRole == P2P_CLIENT && pP2PInfo->InvitationContext.bPersistentInvitation) - {// I'm the persistent GO, in this case, the invitation req may not have Group Bssid - pGrpBssid = pP2PInfo->InterfaceAddress; - } - else - { - pGrpBssid = pClientInvitationInfo->GroupBssid; - } - - if(0x00000004 <= P2P_VERSION // don't check profile if upper layer registered a lower version - && P2P_ADAPTER_RTK_SUPPORT_P2P(pP2PInfo->pAdapter) // don't check profile if running P2P natively supported by OS - ) - { - if(pP2PInfo->InvitationContext.bPersistentInvitation) - { - if(pP2PInfo->pProfileList) - { - u4Byte idxProfile = 0; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Profile list: %u profiles\n", pP2PInfo->pProfileList->nProfiles)); - - for(idxProfile = 0; idxProfile < pP2PInfo->pProfileList->nProfiles; idxProfile++) - { - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "Compare with SSID", pP2PInfo->pProfileList->profileList[idxProfile].ssidBuf, pP2PInfo->pProfileList->profileList[idxProfile].ssidBufLen); - if(CompareSSID(pP2PInfo->pProfileList->profileList[idxProfile].ssidBuf, pP2PInfo->pProfileList->profileList[idxProfile].ssidBufLen, pClientInvitationInfo->SsidBuf, pClientInvitationInfo->SsidLen) - && eqMacAddr(pP2PInfo->pProfileList->profileList[idxProfile].grpBssid, pGrpBssid) - ) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Profile matched\n")); - break; - } - } - - if(idxProfile == pP2PInfo->pProfileList->nProfiles) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("No matching profile\n")); - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP; - break; - } - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("No matching profile (pProfileList is NULL)\n")); - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP; - break; - } - } - } - - // - // Decide overlapped channel list and Op Channel - // - { - p2p_Channel_Intersect(&pP2PInfo->ChannelEntryList, &pDev->p2p->channels, &pDev->p2p->commonChannels); - - if(pDev->p2p->commonChannels.regClasses) - { // Has Common Channel - // Check if our op channel is one of channels supported by peer - if(PeerRole == P2P_CLIENT && pP2PInfo->InvitationContext.bPersistentInvitation) - {// I'm persistent GO - if(!p2p_Channel_InChannelEntryList(pP2PInfo->OperatingChannel, &pDev->p2p->channels)) - {// the opChannel we are going to use does not exist in peer's channel list - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("The opChannel (%u) we are going to use does not exist in peer's channel list\n", pP2PInfo->OperatingChannel)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "peer channel list:\n", pClientInvitationInfo->ChannelPlanChannel, pClientInvitationInfo->ChannelPlanLength); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Changed to 1st channel (%d) in overlapped list\n", pDev->p2p->commonChannels.regClass[0].channel[0])); - pP2PInfo->OperatingChannel = pDev->p2p->commonChannels.regClass[0].channel[0]; - } - } - } - else // No Common Channel - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no common channels\n")); - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "[WARNING] peer supported op chnl:\n", - pClientInvitationInfo->ChannelPlanChannel, - pClientInvitationInfo->ChannelPlanLength); - - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_NO_COMMON_CHANNELS; - break; - } - } - - if(MgntRoamingInProgress(pMgntInfo)) - MgntRoamComplete(pAdapter, MlmeStatus_refused); - - - // - // Copy required info for constructing InvitationRsp - pP2PInfo->InvitationContext.InvitorRole = PeerRole; - pP2PInfo->InvitationContext.DialogToken = msg->dialogToken; - PlatformMoveMemory(&pP2PInfo->InvitationContext.InvitedDevice, pClientInvitationInfo, sizeof(P2P_DEVICE_DISCRIPTOR)); - //pP2PInfo->InvitationContext.Status = pClientInvitationInfo->Status; - pP2PInfo->InvitationContext.bInvitor = FALSE; - PlatformMoveMemory(pP2PInfo->InvitationContext.SsidBuf, pClientInvitationInfo->SsidBuf, pClientInvitationInfo->SsidLen); - pP2PInfo->InvitationContext.SsidLen = pClientInvitationInfo->SsidLen; - cpMacAddr(pP2PInfo->InvitationContext.GroupBssid, pGrpBssid); - if(PeerRole == P2P_CLIENT && pP2PInfo->InvitationContext.bPersistentInvitation) - {// I'm the persistent GO, in this case, the invitation req may not have Group Bssid - pP2PInfo->InvitationContext.OpChannel = pP2PInfo->OperatingChannel; - } - else - { - pP2PInfo->InvitationContext.OpChannel = pClientInvitationInfo->OperatingChannel; - } - pP2PInfo->InvitationContext.Channel = P2PGetChannel(pP2PInfo); - - if(PeerRole == P2P_GO) - { - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - - pP2PDeviceDesc = P2PScanListFind(pP2PInfo->ScanList, pP2PInfo->ScanListSize, msg->devAddr, NULL, NULL); - if(NULL != pP2PDeviceDesc) - { - pP2PDeviceDesc->Role = PeerRole; - pP2PDeviceDesc->OperatingChannel = pClientInvitationInfo->OperatingChannel; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Update peer role GO, chnl to: %u\n", pClientInvitationInfo->OperatingChannel)); - } - } - - if(P2P_ADAPTER_RTK_SUPPORT_P2P(pP2PInfo->pAdapter) - && (TRUE == pP2PInfo->InvitationContext.bPersistentInvitation && PeerRole == P2P_GO - || FALSE == pP2PInfo->InvitationContext.bPersistentInvitation) - ) - { - if(RT_MEDIA_CONNECT == MgntLinkStatusQuery(GetDefaultAdapter(pAdapter))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] invited/reinvoke by GO but default port is connected, assume no client port\n")); - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - break; - } - } - - if(P2P_STATUS_SUCCESS == pP2PInfo->InvitationContext.Status - && FALSE == pP2PInfo->InvitationContext.bPersistentInvitation - ) - {// Invited by a P2P Group member to join the group - if(FALSE == P2PIsChnlInChnlEntryList(&pP2PInfo->ChannelEntryList, - pClientInvitationInfo->OperatingChannel)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] peer GO op chnl (%u) not supported, reply no common channels\n", pClientInvitationInfo->OperatingChannel)); - - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_NO_COMMON_CHANNELS; - pP2PInfo->ConnectionContext.Status = pP2PInfo->InvitationContext.Status; - break; - } - } - - - if(P2P_STATUS_SUCCESS == pP2PInfo->InvitationContext.Status - && TRUE == pP2PInfo->InvitationContext.bPersistentInvitation - && P2P_CLIENT == PeerRole - ) - {// reinvoked as a GO - BOOLEAN bToIndicDevDiscComp = FALSE; - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("P2P_DOING_DEVICE_DISCOVERY: P2PScanListCeaseScan\n")); - - p2p_DevList_Unlock(&pP2PInfo->devList); - P2PScanListCeaseScan(pP2PInfo); - p2p_DevList_Lock(&pP2PInfo->devList); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - bToIndicDevDiscComp = TRUE; - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("bExtendedListening: P2PScanListCeaseScan\n")); - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), P2P_INVITATION_FRAME_TIMEOUT); - ConfigurationTimeout = P2P_INVITATION_FRAME_TIMEOUT; - // P2PScanListCeaseScan(pP2PInfo); - // P2PExtendedListenComplete(pP2PInfo); - } - else if(MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo)) - {// Doing normal scan - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("bScanInProgress: P2PScanListCeaseScan\n")); - p2p_DevList_Unlock(&pP2PInfo->devList); - P2PScanListCeaseScan(pP2PInfo); - p2p_DevList_Lock(&pP2PInfo->devList); - } - - if(bToIndicDevDiscComp && P2P_DOING_PURE_DEVICE_DISCOVERY(pP2PInfo)) - { - P2PIndicateDeviceDiscoveryComplete(pP2PInfo); - } - } - - // - // If failed, we shall not modify the original state machine state. - // - - WFD_OnP2PActionFrame(pAdapter, pRfd, posMpdu); - }while(FALSE); - - if(FALSE == P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // - // Fill the request for indicate to upper layer - // - LibInvitationReq.DialogToken = msg->dialogToken; - LibInvitationReq.InvitorRole = PeerRole; - PlatformMoveMemory(LibInvitationReq.TargetDeviceAddress, msg->devAddr, 6); - LibInvitationReq.bPersistent = pP2PInfo->InvitationContext.bPersistentInvitation; - LibInvitationReq.OpChannel = pP2PInfo->InvitationContext.OpChannel; - PlatformMoveMemory(LibInvitationReq.GroupBssid, pP2PInfo->InvitationContext.GroupBssid, 6); - PlatformMoveMemory(LibInvitationReq.GroupDeviceAddress, pP2PInfo->InvitationContext.GODeviceAddress, 6); - LibInvitationReq.GroupSsidLen = pP2PInfo->InvitationContext.SsidLen; - PlatformMoveMemory(LibInvitationReq.GroupSsidBuf, pP2PInfo->InvitationContext.SsidBuf, pP2PInfo->InvitationContext.SsidLen); - - // - // Send Invitation Rsp - // - StateBackup = pP2PInfo->State; - pP2PInfo->State = P2P_STATE_INVITATION_REQ_RECVD; - pP2PInfo->Status = pP2PInfo->InvitationContext.Status; - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); - p2p_Send_InvitationRsp(pP2PInfo, msg->devAddr, LibInvitationReq.DialogToken); - - if(P2P_STATUS_SUCCESS == pP2PInfo->InvitationContext.Status - || P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE == pP2PInfo->InvitationContext.Status - || P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST == pP2PInfo->InvitationContext.Status - ) - { - // Indicate ScanList first to make sure that the SDK is having the list. - P2PIndicateScanList(pP2PInfo); - P2PIndicateOnInvitationReq(pP2PInfo, &LibInvitationReq); - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - (" send InvitationRsp with status = %u\n", - pP2PInfo->InvitationContext.Status)); - - pP2PInfo->State = StateBackup; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, ConfigurationTimeout); - } - - if(pGenBufClientInvitationInfo) - ReturnGenTempBuffer (pAdapter, pGenBufClientInvitationInfo); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(RT_STATUS_SUCCESS == rtStatus) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_INVITATION_REQUEST, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("<=== status: %u\n", pP2PInfo->InvitationContext.Status)); - - return rtStatus; -} - -// -// Description: -// Handle P2P Go Invitation response packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnInvitationRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - static u8Byte TimeStamp = 0; - u4Byte ConfigurationTimeout = 0; // in ms, note that the configuration time out in the P2P IE is defined as units of 10ms - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2POnInvitationRsp(): port number %d state %d\n", pP2PInfo->pAdapter->pNdis62Common->PortNumber, pP2PInfo->State)); - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnInvitationRsp():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_INV_RSP, - pRfd, Frame_pSaddr(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_INV_RSP]->msg; - - if(!p2p_validate_InvitationRsp(pP2PInfo->InvitationContext.InvitorRole, msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Check state - if(!P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && pP2PInfo->State != P2P_STATE_INVITATION_RSP_WAIT) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] recv InvitationRsp in an invalid state: %u\n", pP2PInfo->State)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("dialog token: %u\n", msg->dialogToken)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2P_OnInvitationRsp():\n", posMpdu->Octet, posMpdu->Length); - - // Process subelements so that the status element would be stored in the device descriptor. - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->sa, msg, TRUE); - if(pP2PDeviceDesc == NULL) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] reject because of invalid P2P Sub IE\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Update ConnectionContext.ConnectingDevice since after P2PProcessSubElements, - // its ChannelList or other elements may be modified. - PlatformMoveMemory(&pP2PInfo->InvitationContext.InvitedDevice, - pP2PDeviceDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - - // If we'll be the client, we shall wait for AP configuration timeout - pP2PInfo->InvitationContext.Status = (P2P_STATUS_CODE)pP2PDeviceDesc->Status; - if(pP2PInfo->InvitationContext.Status == P2P_STATUS_SUCCESS) - { - WFD_OnP2PActionFrame(pAdapter, pRfd, posMpdu); - - if(eqMacAddr(pP2PInfo->InvitationContext.GODeviceAddress, pP2PInfo->DeviceAddress)) - {// I'm going to be the GO - ConfigurationTimeout = 0; //(10 * MAX(pP2PInfo->GOConfigurationTimeout, pP2PInfo->InvitationContext.InvitedDevice.ClientConfigurationTimeout)); - } - else - {// I'm going to be the Client => wait for peer to be ready for connection - ConfigurationTimeout = (10 * MAX(pP2PInfo->ClientConfigurationTimeout, pP2PInfo->InvitationContext.InvitedDevice.GOConfigurationTimeout)); - } - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("ConfigurationTimeout: %d (ms)\n", ConfigurationTimeout)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING]status: %u\n", pP2PInfo->InvitationContext.Status)); - } - - if(P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE == pP2PInfo->InvitationContext.Status) - { - pP2PInfo->InvitationContext.bWaitingBackwardInvite = TRUE; - } - - // For Win8: Indicate the reception of the invitation response --------------------------- - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - pP2PInfo->State = P2P_STATE_INVITATION_COMPLETE; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, ConfigurationTimeout); - break; - } - // ----------------------------------------------------------------------------- - - P2PScanListEnterScanCompleteImmediately(pP2PInfo); - - pP2PInfo->State = P2P_STATE_INVITATION_COMPLETE; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, ConfigurationTimeout); - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(RT_STATUS_SUCCESS == rtStatus) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_INVITATION_RESPONSE, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - } - - return rtStatus; -} - -// -// Description: -// Handle P2P Device Discoverability Request packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnDeviceDiscoverabilityReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte StaInterfaceAddress = NULL; - u1Byte i = 0; - PRT_WLAN_STA pEntry = NULL; - u1Byte Status = P2P_STATUS_SUCCESS; - - PADAPTER pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - - PMGNT_INFO pExtMgntInfo = &pExtAdapter->MgntInfo; - - P2P_MESSAGE msg; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - if(!P2P_ACTING_AS_GO(pP2PInfo)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Not act as GO!\n")); - return RT_STATUS_INVALID_STATE; - } - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnDeviceDiscoverabilityReq():\n", posMpdu->Octet, posMpdu->Length); - - do - { - if(RT_STATUS_SUCCESS == (rtStatus = p2p_parse_Action(posMpdu, DBG_LOUD, &msg))) - if(!p2p_validate_DevDiscReq(&msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Find STA Interface Address - for(i = 0;i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = &(pExtMgntInfo->AsocEntry[i]); - if(pEntry->bUsed && - pEntry->bAssociated && - pEntry->bP2PClient) - { - if(eqMacAddr(pEntry->P2PClientInfoDesc.DeviceAddress, msg.devIdDevAddr)) - { - StaInterfaceAddress = pEntry->P2PClientInfoDesc.InterfaceAddress; - break; - } - } - } - - if(StaInterfaceAddress == NULL) - { - Status = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - goto send_DevDiscRsp; - } - - // Send Go Discoverability Request to our client. - p2p_Send_GoDiscoverabilityReq(pP2PInfo, StaInterfaceAddress, 1); - -send_DevDiscRsp: - - // Send DeviceDiscoverabilityRsp to the SA of DeviceDiscoverabilityReq - p2p_Send_DevDiscRsp(pP2PInfo, msg.sa, msg.dialogToken, Status); - }while(FALSE); - - p2p_parse_FreeMessage(&msg); - - FunctionOut(COMP_P2P); - return rtStatus; -} - -// -// Description: -// Handle P2P Device Discoverability Response packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnDeviceDiscoverabilityRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_CLIENT_INFO_DISCRIPTOR pClient = NULL; - PP2P_DEVICE_DISCRIPTOR pGO = NULL; - - P2P_MESSAGE msg; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnDeviceDiscoverabilityRsp():\n", posMpdu->Octet, posMpdu->Length); - - do - { - if(RT_STATUS_SUCCESS == (rtStatus = p2p_parse_Action(posMpdu, DBG_LOUD, &msg))) - if(!p2p_validate_DevDiscRsp(&msg)) - { - rtStatus =RT_STATUS_MALFORMED_PKT; - break; - } - - // Check state - if(pP2PInfo->State != P2P_STATE_DEVICE_DISCOVERABILITY_RSP_WAIT) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Mismatch state = %d\n", pP2PInfo->State)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - // Check DialogToken - if(msg.dialogToken != pP2PInfo->DeviceDiscoverabilityContext.DialogToken) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - else - { - pP2PInfo->DeviceDiscoverabilityContext.DialogToken++; - } - - // Get status - pP2PInfo->DeviceDiscoverabilityContext.Status = (P2P_STATUS_CODE)msg.status; - - // Find the client and its GO - if(!P2PScanListFindClient(pP2PInfo->ScanList, pP2PInfo->ScanListSize, - pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress, - NULL, - &pGO, &pClient)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("client not found\n")); - break; - } - - if(!pClient) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("client not found\n")); - break; - } - - // - // Check Capability - // - if(!(pClient->DeviceCapability & dcP2PClientDiscoverability)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] dcP2PClientDiscoverability bit in client is not set!\n")); - break; - } - PlatformMoveMemory(&(pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress), - pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress, 6); - pP2PInfo->ConnectionContext.Status = P2P_STATUS_SUCCESS; - pP2PInfo->ConnectionContext.DialogToken = IncreaseDialogToken(pP2PInfo->DialogToken); - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = P2P_SCAN_FIND_PHASE_LOOP_TIMES; - pP2PInfo->ConnectionContext.bGoingToBeGO = FALSE; - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ConnectionContext.ConnectingDevice:\n", &pP2PInfo->ConnectionContext.ConnectingDevice, sizeof(P2P_DEVICE_DISCRIPTOR)); - - pP2PInfo->State = P2P_STATE_DEVICE_DISCOVERABILITY_COMPLETE; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - }while(FALSE); - - p2p_parse_FreeMessage(&msg); - - return rtStatus; -} - -// -// Description: -// The client recived the GO discoverability request packet, leave PS mode for while. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnGODiscoverabilityReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PMGNT_INFO pMgntInfo = &(pP2PInfo->pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - FunctionIn(COMP_P2P); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2P_OnGODiscoverabilityReq():\n", - posMpdu->Octet, posMpdu->Length); - if(pPSC->bLeisurePs || pMgntInfo->dot11PowerSaveMode != eActive) - { - pMgntInfo->LPSDelayCnt = (pMgntInfo->LPSDelayCnt < 10) ? 10 : pMgntInfo->LPSDelayCnt; - // Send one null frame to notify AP that we are awkae. - MgntActSet_802_11_PowerSaveMode(pP2PInfo->pAdapter, eActive); - } - return rtStatus; -} - -// -// Description: -// Handle P2P Provision Discovery Request packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnProvisionDiscoveryReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - u8Byte CurrentTime = PlatformGetCurrentTime(); - static u8Byte LastTime = 0; - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - BOOLEAN bToSendPDRsp = TRUE; - u2Byte rspConfigMethod = 0; - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnDeviceDiscoverabilityRsp():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - BOOLEAN bFirstSeen = TRUE; - - bFirstSeen = (NULL == p2p_DevList_Find(&pP2PInfo->devList, Frame_pSaddr(*posMpdu), P2P_DEV_TYPE_DEV)); - - p2p_DevList_FlushActionFrames(&pP2PInfo->devList, Frame_pSaddr(*posMpdu), P2P_DEV_TYPE_DEV); - - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_PD_REQ, - pRfd, Frame_pSaddr(*posMpdu), - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_PD_REQ]->msg; - - if(!p2p_validate_PDReq(msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - if(CurrentTime - LastTime < 1000000) - {// this is to prevent the device from showing notifications to user too often - rtStatus = RT_STATUS_PKT_DROP; - break; - } - else - { - LastTime = CurrentTime; - } - - pP2PDeviceDesc = P2PProcessSubElements(pP2PInfo, pRfd, msg->devAddr, msg, TRUE); - if(pP2PDeviceDesc == NULL) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] reject because of invalid P2P Sub IE\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Check ConfigMethod compatible - if(pP2PInfo->WpsAttributes.ConfigMethod & msg->wpsConfigMethods) - { - rspConfigMethod = msg->wpsConfigMethods; - } - else - {// config method not compatible - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("[WARNING] recvd CM (%u) not compatible with my CM (%u)\n", - msg->wpsConfigMethods, pP2PInfo->WpsAttributes.ConfigMethod)); - rspConfigMethod = 0; // set to NULL to indicate failure - } - - // Indicate OnPDReq before P2PSvc processes it - if(bFirstSeen) - { - // Indicate ScanList first to make sure that the SDK is having the list. - P2PIndicateScanList(pP2PInfo); - } - - // Indicate to upper layer - P2PIndicateOnProvisionDiscoveryReq(pP2PInfo, rspConfigMethod, msg->devAddr, &pP2PDeviceDesc->WpsAttributes); - - P2PSvc_OnPDReq(pP2PInfo->pP2PSvcInfo, msg->devAddr, msg->wpsConfigMethods, &msg->p2pAttributes.os, &bToSendPDRsp); - if(bToSendPDRsp && 0 == pP2PDeviceDesc->ListenChannel) - {// We need to send PD rsp, and we don't have peer's Listen Channel - if(msg->_listenChannel) - pP2PDeviceDesc->ListenChannel = msg->listenChannel; - } - - // Update the latest scan list to upper layer. - P2PScanListCopy(pP2PInfo->ScanList4Query, &pP2PInfo->ScanList4QuerySize, - pP2PInfo->ScanList, pP2PInfo->ScanListSize); - P2PIndicateScanList(pP2PInfo); - - WFD_OnP2PActionFrame(pAdapter, pRfd, posMpdu); - - if(FALSE == P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(bToSendPDRsp) - { - BOOLEAN bSupportTxReport = FALSE; - - // - // Send ProvisionDiscoveryRsp - // - if(P2P_DEVICE == pP2PInfo->Role) - { - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); - } - p2p_Send_PDRsp(pP2PInfo, msg->devAddr, msg->dialogToken, &msg->p2pAttributes.os, rspConfigMethod, &bSupportTxReport); - - if(FALSE == bSupportTxReport) - { - P2PSvc_OnPDRspSent(pP2PInfo->pP2PSvcInfo, TRUE); - } - } - } - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(rtStatus == RT_STATUS_SUCCESS) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - } - - FunctionOut(COMP_P2P); - - return rtStatus; -} - -// -// Description: -// Handle P2P Provistion Discovery Response packet for P2P function. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnProvisionDiscoveryRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_MESSAGE *msg = NULL; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnDeviceDiscoverabilityRsp():\n", posMpdu->Octet, posMpdu->Length); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = p2p_DevList_RxUpdate(&pP2PInfo->devList, - P2P_FID_PD_RSP, - pRfd, - pP2PInfo->ProvisionDiscoveryContext.go - ? pP2PInfo->ProvisionDiscoveryContext.goBssid - : pP2PInfo->ProvisionDiscoveryContext.devAddr, - RT_GetChannelNumber(pP2PInfo->pAdapter), &pDev)) - ) - { - break; - } - - msg = pDev->rxFrames[P2P_FID_PD_RSP]->msg; - - if(!p2p_validate_PDRsp(msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Check DialogToken - if(!P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && msg->dialogToken != pDev->txFrames[P2P_FID_PD_REQ]->token - ) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] dialog token mismatch: peer(%u), mine(%u)\n", - msg->dialogToken, pDev->txFrames[P2P_FID_PD_REQ]->token)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - p2p_DevList_DialogTokenUpdate(pDev); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("CM requested: %u, CM responded: %u\n", - pDev->p2p->pdConfigMethod, msg->wpsConfigMethods)); - - if(!P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pDev->p2p->pdConfigMethod == msg->wpsConfigMethods) - { - pP2PInfo->ConnectionContext.Status = P2P_STATUS_SUCCESS; - } - else - { - pP2PInfo->ConnectionContext.Status = P2P_STATUS_FAIL_PROVISION_DISCOVERY_FAILED; - } - } - - p2p_DevList_Unlock(&pP2PInfo->devList); - CustomScan_TermReq(GET_CUSTOM_SCAN_INFO(pAdapter), FALSE); - p2p_DevList_Lock(&pP2PInfo->devList); - - P2PSvc_OnPDRsp(pP2PInfo->pP2PSvcInfo, - pDev->mac, - pDev->p2p->pdConfigMethod, - msg->wpsConfigMethods, - &msg->p2pAttributes.os - ); - - pP2PInfo->State = P2P_STATE_PROVISION_DISCOVERY_COMPLETE; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 1); - }while(FALSE); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, (" %u\n", pP2PInfo->ConnectionContext.Status)); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(rtStatus == RT_STATUS_SUCCESS) - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE, - RT_STATUS_SUCCESS, - posMpdu->Octet, - posMpdu->Length); - } - - return rtStatus; -} - -// -// Description: -// Handle Service Discovery Request packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnSDReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte SrcAddr = Frame_pSaddr(*posMpdu); // this shall be the Device Address - u1Byte DialogToken; - PP2P_SERVICE_REQ_TLV pSDReqRecvd = NULL; - pu1Byte pSDReqRecvdSize = NULL; - pu1Byte pTLVStart = posMpdu->Octet + FRAME_OFFSET_GAS_INIT_REQ_SERVICE_REQ_TLV; - pu1Byte pTLVCurrent = NULL; - BOOLEAN bFragmentSDRsp = FALSE; - u1Byte i; - BOOLEAN bToSendSDRsp = TRUE; - - FunctionIn(COMP_P2P); - - if(pP2PInfo->SDContext.bDoingServiceDiscovery) - {// we are doing service disocvery, ignore further requests - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] we are doing service disocvery, ignore further requests!\n")); - return RT_STATUS_INVALID_STATE; - } - - pP2PInfo->SDContext.bDoingServiceDiscovery = TRUE; - - // - // Make sure we can read all the mandatory field of the SDReq - // - if(posMpdu->Length < FRAME_OFFSET_GAS_INIT_REQ_SERVICE_REQ_TLV) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] frame lengh (%u) < min SDReq lenght (%u)\n", - posMpdu->Length, FRAME_OFFSET_GAS_INIT_REQ_SERVICE_REQ_TLV)); - return RT_STATUS_MALFORMED_PKT; - } - - //RT_PRINT_DATA(COMP_P2P, DBG_LOUD, - // "The ServiceDiscoveryReq Content : ", - // osPacket.Octet, osPacket.Length); - - // - // Set the Status to success - // - pP2PInfo->SDContext.Status = P2P_SD_STATUS_SUCCESS; - - // - // Store Source Device Address - // - cpMacAddr(pP2PInfo->SDContext.TargetDeviceAddress, SrcAddr); - - // - // Store Dialog Token - // - DialogToken = *((pu1Byte)(posMpdu->Octet + FRAME_OFFSET_GAS_INIT_REQ_DIALOG_TOKEN)); - pP2PInfo->SDContext.DialogToken = DialogToken; - - // - // Reset the buffer we used to store the received SDReq - // - pSDReqRecvd = pP2PInfo->SDContext.ServiceReqRecvd; - pSDReqRecvdSize = &pP2PInfo->SDContext.ServiceReqRecvdSize; - - PlatformZeroMemory(pSDReqRecvd, sizeof(P2P_SERVICE_REQ_TLV) * P2P_SD_MAX_SERVICES); - *pSDReqRecvdSize = 0; - - // - // Get ALL Service Req TLVs - // - pTLVCurrent = pTLVStart; - while(TRUE) - { - u2Byte TLVLenField; - u2Byte QueryDataLen; - - // Check if we have enough room for the TLV - if(*pSDReqRecvdSize >= P2P_SD_MAX_SERVICES) - { - break; - } - - // Validate the TLV length - if((pTLVCurrent + OFFSET_SERVICE_REQ_TLV_QUERY_DATA) > - (posMpdu->Octet + posMpdu->Length)) - { - //pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_REQUEST; - break; - } - - // Read the length field of the TLV - TLVLenField = ReadEF2Byte(pTLVCurrent + OFFSET_SERVICE_REQ_TLV_LEN); - if(TLVLenField < (u2Byte)(OFFSET_SERVICE_REQ_TLV_QUERY_DATA - OFFSET_SERVICE_REQ_TLV_SERVICE_PROT_TYPE)) - {// invalid TLV len - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_REQUEST; - break; - } - if((pTLVCurrent + 2 + TLVLenField) > (posMpdu->Octet + posMpdu->Length)) - {// invalid TLV len - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_REQUEST; - break; - } - - // Read Sercive Protocol Type - pSDReqRecvd[*pSDReqRecvdSize].ServiceDesc.ServiceType = (P2P_SD_PROTOCOL) - ( *((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_REQ_TLV_SERVICE_PROT_TYPE)) ); - - // Read Service Transaction ID - pSDReqRecvd[*pSDReqRecvdSize].TransactionID = - *((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_REQ_TLV_SERVICE_TRANSACTION_ID)); - - // Get Query Data length - QueryDataLen = TLVLenField - 2; // exclude ServiceProtType(1) and ServiceTransactionID(1) - - // Check if we can copy the Query Data to our buffer - if(QueryDataLen > P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN) - { - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_REQUEST; - break; - } - - // Copy Query Data - PlatformMoveMemory(pSDReqRecvd[*pSDReqRecvdSize].ServiceDesc.Buffer, - pTLVCurrent + OFFSET_SERVICE_REQ_TLV_QUERY_DATA, - QueryDataLen); - pSDReqRecvd[*pSDReqRecvdSize].ServiceDesc.BufferLength = QueryDataLen; - - (*pSDReqRecvdSize)++; - - if(*pSDReqRecvdSize == P2P_SD_MAX_SERVICES) - { - break; - } - - // Update pTLVCurrent - pTLVCurrent += (2 + TLVLenField); - } - - if(pP2PInfo->SDContext.ServiceReqRecvdSize == 0) - { - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_REQUEST; - } - - if(pP2PInfo->SDContext.Status != P2P_SD_STATUS_SUCCESS) - { - goto Exit_P2POnSDReq; - } - - P2PSvc_OnSDReq(pP2PInfo->pP2PSvcInfo, SrcAddr, DialogToken, *pSDReqRecvdSize, pSDReqRecvd, &bToSendSDRsp); - if(!bToSendSDRsp) - { - pP2PInfo->SDContext.bDoingServiceDiscovery = FALSE; - goto Exit_P2POnSDReqNoRsp; - } - - // - // Print all Service Req TLVs recvd - // - for(i = 0; i < *pSDReqRecvdSize; i++) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Servicd Req TLV %u: Protocol: %u\n", - i, pSDReqRecvd[i].ServiceDesc.ServiceType)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, - "Query Data", - pSDReqRecvd[i].ServiceDesc.Buffer, pSDReqRecvd[i].ServiceDesc.BufferLength); - } - -Exit_P2POnSDReq: - - if(pP2PInfo->SDContext.Status == P2P_SD_STATUS_SUCCESS) - { - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), P2P_SERVICE_DISCOVERY_TIMEOUT); - P2PIndicateOnSDReq(pP2PInfo, &pP2PInfo->SDContext); - } - else - { - p2p_Send_SDRsp(pP2PInfo, SrcAddr, DialogToken, pP2PInfo->SDContext.Status, bFragmentSDRsp); - } - -Exit_P2POnSDReqNoRsp: - RT_TRACE_F(COMP_P2P, DBG_LOUD, - (" Status: %u, DialogToken: %u\n", - pP2PInfo->SDContext.Status, - DialogToken)); - - return rtStatus; -} - -// -// Description: -// Handle Service Discovery Response packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnSDRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2P_SD_CONTEXT pSDContext = &pP2PInfo->SDContext; - pu1Byte pTLVStart = posMpdu->Octet + FRAME_OFFSET_GAS_INIT_RSP_TLV; - pu1Byte pTLVCurrent = NULL; - u2Byte QueryRspLen; - u2Byte TLVLen = 0; - BOOLEAN bFragment = FALSE; - - FunctionIn(COMP_P2P); - - // Check state - //if(pP2PInfo->State != P2P_STATE_SERVICE_DISCOVERY_RSP_WAIT) - //{ - // RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] current state (%d) is invalid!\n", pP2PInfo->State)); - // return RT_STATUS_INVALID_STATE; - //} - - // Check if the SDRsp is from the intended peer - if(!eqMacAddr(pSDContext->TargetDeviceAddress, - Frame_pSaddr(*posMpdu))) - { - RT_PRINT_ADDR(COMP_P2P, DBG_WARNING, "P2P_OnSDRsp():[WARNING] mismatch addr = ", pSDContext->TargetDeviceAddress); - return RT_STATUS_INVALID_DATA; - } - - // Check length - if(posMpdu->Length < FRAME_OFFSET_GAS_INIT_RSP_QUERY_DATA) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Invalid length of packet!\n")); - return RT_STATUS_MALFORMED_PKT; - } - - // - // Check Dialog Token - // After Check length, we are safe to read Dialog Token - // - if(*((pu1Byte)(posMpdu->Octet + FRAME_OFFSET_GAS_INIT_RSP_DIALOG_TOKEN)) != pSDContext->DialogToken) - - {// Dialog Token mismatch - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] mismatch token target (%d) and mine (%d)!\n", - *((pu1Byte)(posMpdu->Octet + FRAME_OFFSET_GAS_INIT_RSP_DIALOG_TOKEN)), pSDContext->DialogToken)); - return RT_STATUS_INVALID_DATA; - } - - // - // Clear ServiceRspRecvd for storing the Rsp we recvd - // - PlatformZeroMemory(pSDContext->ServiceRspRecvd, sizeof(P2P_SERVICE_RSP_TLV) * P2P_SD_MAX_SERVICES); - pSDContext->ServiceRspRecvdSize = 0; - - // - // Get SDRsp fields - // - { - // Status (11u) - // Ignore - - // GAS Comeback Delay - if(ReadEF2Byte(posMpdu->Octet + FRAME_OFFSET_GAS_INIT_RSP_COMEBACK_DELAY)) - { - bFragment = TRUE; - goto Exit_P2POnSDRsp; // the SDRsp shall be empty in this case - - // Fragment is the only case that there is no TLV in the SDRsp - // So below we can assume that we shall have at lease 1 TLV. - } - - // AD Prot IE - // Ignore - - // Query Rsp Len - QueryRspLen = ReadEF2Byte(posMpdu->Octet + FRAME_OFFSET_GAS_INIT_RSP_LEN); // ignore - - // Service update indicator - pSDContext->ServiceUpdateIndicator = ReadEF2Byte(posMpdu->Octet + FRAME_OFFSET_GAS_INIT_RSP_SERVICE_UPDATE_INDICATOR); // ignore - - // - // Read the TLVs, a valid Rsp shall have at lease 1 TLV - // - { - u1Byte index; - - pTLVCurrent = pTLVStart; - - PlatformZeroMemory(pP2PInfo->SDContext.ServiceRspRecvd, sizeof(P2P_SERVICE_RSP_TLV) * P2P_SD_MAX_SERVICES); - pP2PInfo->SDContext.ServiceRspRecvdSize = 0; - index = pP2PInfo->SDContext.ServiceRspRecvdSize; - - while(TRUE) - { - u2Byte ResponseDataLen = 0; - u1Byte TransactionId = 0; - - // Check if we have enough room for the TLV - if(index >= P2P_SD_MAX_SERVICES) - { - break; - } - - // Make sure we can read until the end of Status Code filed, which is right before RSP_DATA - if((pTLVCurrent + OFFSET_SERVICE_RSP_TLV_RSP_DATA) > - (posMpdu->Octet + posMpdu->Length)) - { - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_RESPONSE_1; - break; - } - - // Length - TLVLen = (ReadEF2Byte(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_LEN)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("TLVLen: %u\n", TLVLen)); - if(TLVLen < (u2Byte)(OFFSET_SERVICE_RSP_TLV_RSP_DATA - OFFSET_SERVICE_RSP_TLV_SERVICE_PROT_TYPE)) - {// invalid TLV len - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_RESPONSE_2; - break; - } - if((pTLVCurrent + 2 + TLVLen) > (posMpdu->Octet + posMpdu->Length)) - {// invalid TLV len - pP2PInfo->SDContext.Status = P2P_SD_STATUS_BAD_RESPONSE_3; - break; - } - - // Service Protocol Type - (pP2PInfo->SDContext.ServiceRspRecvd)[index].ServiceDesc.ServiceType = (P2P_SD_PROTOCOL) - (*((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_SERVICE_PROT_TYPE)) ); - - // Transactio ID - TransactionId = (*((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_SERVICE_TRANSACTION_ID))); - - // Status Code - (pP2PInfo->SDContext.ServiceRspRecvd)[index].Status = (P2P_SD_STATUS_CODE) - (*((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_STATUS)) ); - // For the last status (status of the entire SDRsp), we currently get it from the last TLV - pP2PInfo->SDContext.Status = (pP2PInfo->SDContext.ServiceRspRecvd)[index].Status; - - // Response Data - if((pP2PInfo->SDContext.ServiceRspRecvd)[index].Status == P2P_SD_STATUS_SUCCESS) - { - ResponseDataLen = TLVLen - 3; - if(ResponseDataLen > P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN) - {// buffer overflow - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Buffer size overflow: (%u) > (%u) \n", - ResponseDataLen, - P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN)); - break; - } - - PlatformMoveMemory((pP2PInfo->SDContext.ServiceRspRecvd)[index].ServiceDesc.Buffer, - pTLVCurrent + OFFSET_SERVICE_RSP_TLV_RSP_DATA, - ResponseDataLen); - - (pP2PInfo->SDContext.ServiceRspRecvd)[index].ServiceDesc.BufferLength = ResponseDataLen; - - RT_PRINT_STR(COMP_P2P, DBG_LOUD, - "Recv TLV: ", - (pP2PInfo->SDContext.ServiceRspRecvd)[index].ServiceDesc.Buffer, - (pP2PInfo->SDContext.ServiceRspRecvd)[index].ServiceDesc.BufferLength); - } - - if(P2P_SD_PROTOCOL_P2PSVC == (pP2PInfo->SDContext.ServiceRspRecvd)[index].ServiceDesc.ServiceType) - { - BOOLEAN bNeedFurtherProcess = FALSE; - P2PSvc_OnSDRsp(pP2PInfo->pP2PSvcInfo, Frame_pSaddr(*posMpdu), TransactionId, pP2PInfo->SDContext.ServiceRspRecvd + index, &bNeedFurtherProcess); - if(!bNeedFurtherProcess) - { - goto Exit_P2POnSDRsp_SilentExit; // so current dev disc will not be ceased - } - } - - pP2PInfo->SDContext.ServiceRspRecvdSize++; - index++; - - // Go to next TLV - pTLVCurrent += (5 + ResponseDataLen); // 5 = length(2) + SvcProtType(1), SvcTransactionID(1), Status(1) - - // Check if this is the last TLV - if(pTLVCurrent >= (posMpdu->Octet+ posMpdu->Length)) - { - break; - } - } - } - } - -Exit_P2POnSDRsp: - - if(bFragment) - { - // Update SDContext - pSDContext->bDoingServiceDiscovery = TRUE; - pSDContext->bFragment = TRUE; - pSDContext->FragmentID = 0; // we are expecting FragmentID 0 - pSDContext->ServiceRspRecvdSize = 0; - - pSDContext->ANQPQueryRspFieldToSendSize = 0; - pSDContext->ANQPQueryRspFieldToSendOffset = 0; - - // - // Since P2PMgntTimerCallback() checks bScanInProgress before it enters the state machine, - // we can't use the state machine to deal with the comeback procedure. - // - p2p_Send_SDComebackReq(pP2PInfo, - pP2PInfo->SDContext.TargetDeviceAddress, - pP2PInfo->SDContext.DialogToken); - - pP2PInfo->State = P2P_STATE_SERVICE_DISCOVERY_COMEBACK_RSP_WAIT; - } - else - { - pP2PInfo->State = P2P_STATE_SERVICE_DISCOVERY_COMPLETE; - - if(pSDContext->Status == P2P_SD_STATUS_SUCCESS) - { - P2PIndicateOnSDRsp(pP2PInfo, pSDContext); - } - - // Entery ScanComplete immediately - P2PScanListEnterScanCompleteImmediately(pP2PInfo); - - // Entery P2P_STATE_SERVICE_DISCOVERY_COMPLETE (almost) right after ScanComplete - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 100); - } - -Exit_P2POnSDRsp_SilentExit: - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("status: %u, bFragment: %u\n", pSDContext->Status, bFragment)); - - return rtStatus; -} - -// -// Description: -// Handle Service Discovery Request comback packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnSDComebackReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte SrcAddr = Frame_pSaddr(*posMpdu); - u1Byte DialogToken = 0; - BOOLEAN bMoreData = FALSE; - u2Byte BytesToCopy; - u2Byte RemainingBytes; - - FunctionIn(COMP_P2P); - // - // Check status - // - if(!(pP2PInfo->SDContext.bDoingServiceDiscovery && - pP2PInfo->SDContext.bFragment)) - {// not expecting Comeback Req - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Not expect comeback request pkt!\n")); - return RT_STATUS_INVALID_STATE; - } - - // - // Check peer - // - if(!eqMacAddr(pP2PInfo->SDContext.TargetDeviceAddress, SrcAddr)) - { - RT_PRINT_ADDR(COMP_P2P, DBG_WARNING, "P2P_OnSDComebackReq():[WARNING] mismatch addr = ", SrcAddr); - return RT_STATUS_INVALID_DATA; - } - - // - // Check Length - // - if(posMpdu->Length < FRAME_OFFSET_GAS_COMEBACK_REQ_DIALOG_TOKEN + 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] frame lengh (%u) < min SDReq lenght (%u)\n", - posMpdu->Length, FRAME_OFFSET_GAS_COMEBACK_REQ_DIALOG_TOKEN + 1)); - return RT_STATUS_MALFORMED_PKT; - } - - // - // Check DialogToken - // - DialogToken = *((pu1Byte)posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_REQ_DIALOG_TOKEN); - if(DialogToken != pP2PInfo->SDContext.DialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("[WARNING] Target DialogToken (%d) and mine (%d) are mismatch\n", DialogToken, pP2PInfo->SDContext.DialogToken)); - return RT_STATUS_INVALID_DATA; - } - - // - // Decide value of bMoreData - // - if(pP2PInfo->SDContext.ANQPQueryRspFieldToSendOffset >= - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("[WARNING] no more data to send\n")); - return RT_STATUS_INVALID_STATE; - } - else if(pP2PInfo->SDContext.ANQPQueryRspFieldToSendOffset< - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize) - { - u2Byte BytesSent = pP2PInfo->SDContext.ANQPQueryRspFieldToSendOffset; - u2Byte TotalBytes = pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize; - - RemainingBytes = TotalBytes - BytesSent; - - if(RemainingBytes > pP2PInfo->SDRspFragmtntThreshold) - { - bMoreData = TRUE; - BytesToCopy = pP2PInfo->SDRspFragmtntThreshold; - } - else - { - bMoreData = FALSE; - BytesToCopy = RemainingBytes; - } - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("Remaining bytes(%u), Bytes to Copy(%u), bMoreData(%u)\n", - RemainingBytes, - BytesToCopy, - bMoreData)); - - pP2PInfo->SDWaitForComebackReqSlotCount = 0; - - p2p_Send_SDComebackRsp(pP2PInfo, - SrcAddr, - DialogToken, - BytesToCopy, - bMoreData); - - pP2PInfo->SDContext.ANQPQueryRspFieldToSendOffset += BytesToCopy; - pP2PInfo->SDContext.FragmentID++; - - if(!bMoreData) - { - PlatformZeroMemory(&pP2PInfo->SDContext, sizeof(P2P_SD_CONTEXT)); - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), P2P_SERVICE_DISCOVERY_COMEBACK_TIMEOUT); - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("bMoreData: %u\n", bMoreData)); - - return rtStatus; -} - -P2P_SD_STATUS_CODE -P2POnANQPQueryRspField( - IN PP2P_INFO pP2PInfo, - IN pu1Byte ANQPQueryRspFieldBuf, - IN u2Byte ANQPQueryRspFieldSize, - IN OUT PP2P_SERVICE_RSP_TLV ServiceRspTLVList, - IN OUT pu1Byte pServiceRspTLVListSize - ) -{ - // - // ANQP Query Rsp Field format: - // InfoID(2), Length(2), OI(3), OUISubType(1), SvcUpdateIndic(2), TLVs - // - // Note that we can store maximul P2P_SD_MAX_SERVICES TLVs - // - - pu1Byte pTLVStart = ANQPQueryRspFieldBuf + 2 + 2 + 3 + 1 + 2; - pu1Byte pTLVCurrent = pTLVStart; - u2Byte TLVLen; - - P2P_SD_STATUS_CODE Ret = P2P_SD_STATUS_SUCCESS; - - // - // Reset the output TLV list - // - *pServiceRspTLVListSize = 0; - - while(TRUE) - { - u2Byte ResponseDataLen = 0; - - // Check if we have enough room for the TLV - if(*pServiceRspTLVListSize >= P2P_SD_MAX_SERVICES) - { - break; - } - - // Validate the TLV length - if((pTLVCurrent + OFFSET_SERVICE_RSP_TLV_RSP_DATA) > - (ANQPQueryRspFieldBuf + ANQPQueryRspFieldSize)) - { - Ret = P2P_SD_STATUS_BAD_RESPONSE_1; - break; - } - - // Length - TLVLen = (ReadEF2Byte(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_LEN)); - if(TLVLen < (u2Byte)(OFFSET_SERVICE_RSP_TLV_RSP_DATA - OFFSET_SERVICE_RSP_TLV_SERVICE_PROT_TYPE)) - {// invalid TLV len - Ret = P2P_SD_STATUS_BAD_RESPONSE_2; - break; - } -// if((u8Byte)(pTLVCurrent + 2 + TLVLen) > (u8Byte)(ANQPQueryRspFieldBuf + ANQPQueryRspFieldSize)) - if((pTLVCurrent + 2 + TLVLen) > (ANQPQueryRspFieldBuf + ANQPQueryRspFieldSize)) - {// invalid TLV len - Ret = P2P_SD_STATUS_BAD_RESPONSE_3; - break; - } - - // Service Protocol Type - (ServiceRspTLVList)[*pServiceRspTLVListSize].ServiceDesc.ServiceType = - (P2P_SD_PROTOCOL) *((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_SERVICE_PROT_TYPE)); - - // Status Code - (ServiceRspTLVList)[*pServiceRspTLVListSize].Status = - (P2P_SD_STATUS_CODE) *((pu1Byte)(pTLVCurrent + OFFSET_SERVICE_RSP_TLV_STATUS)); - // For the last status (status of the entire SDComebackRsp), we currently get it from the last TLV - Ret = (ServiceRspTLVList)[*pServiceRspTLVListSize].Status; - //DbgPrint("Status: %u\n", Ret); - - // Response Data - if((ServiceRspTLVList)[*pServiceRspTLVListSize].Status == P2P_SD_STATUS_SUCCESS) - { - ResponseDataLen = TLVLen - 3; - if(ResponseDataLen > P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN) - {// buffer overflow - RT_TRACE(COMP_P2P,DBG_LOUD, - ("Buffer size overflow: (%u) > (%u) \n", - ResponseDataLen, - P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN)); - break; - } - - PlatformMoveMemory((ServiceRspTLVList)[*pServiceRspTLVListSize].ServiceDesc.Buffer, - pTLVCurrent + OFFSET_SERVICE_RSP_TLV_RSP_DATA, - ResponseDataLen); - (ServiceRspTLVList)[*pServiceRspTLVListSize].ServiceDesc.BufferLength = ResponseDataLen; - //DbgPrint("ResponseDataLen: %u\n", ResponseDataLen); - } - - (*pServiceRspTLVListSize)++; - - // Go to next TLV - pTLVCurrent += (5 + ResponseDataLen); // 5 = length(2) + SvcProtType(1), SvcTransactionID(1), Status(1) - - // Check if this is the last TLV -// if((u8Byte)pTLVCurrent >= (u8Byte)(ANQPQueryRspFieldBuf + ANQPQueryRspFieldSize)) - if(pTLVCurrent >= (ANQPQueryRspFieldBuf + ANQPQueryRspFieldSize)) - { - break; - } - } - - return Ret; -} - -// -// Description: -// Handle Service Discovery Response comback packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// None -// -RT_STATUS -P2P_OnSDComebackRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - BOOLEAN bMoreData = FALSE; - u1Byte FragmentID = 0; - u2Byte QueryRspLen = 0; - BOOLEAN bBufferOut = FALSE; - - FunctionIn(COMP_P2P); - // - // Check state - // - if(pP2PInfo->State != P2P_STATE_SERVICE_DISCOVERY_COMEBACK_RSP_WAIT) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Invalid state (%d)!\n", pP2PInfo->State)); - return RT_STATUS_INVALID_STATE; - } - - // Check if the SDRsp is from the intended peer - if(!eqMacAddr(pP2PInfo->SDContext.TargetDeviceAddress, Frame_pSaddr(*posMpdu))) - { - RT_PRINT_ADDR(COMP_P2P, DBG_WARNING, "P2P_OnSDComebackRsp():[WARNING] Mismatch for src addr = ", Frame_pSaddr(*posMpdu)); - return RT_STATUS_INVALID_DATA; - } - - // - // Check Length - // - if(posMpdu->Length < FRAME_OFFSET_GAS_COMEBACK_RSP_TLV) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Invalid pkt length!\n")); - return RT_STATUS_MALFORMED_PKT; - } - - // - // Check Dialog Token - // - if(*((pu1Byte)posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_RSP_DIALOG_TOKEN) != - pP2PInfo->SDContext.DialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Pkt DialogToken (%d) and mine (%d) are mismatch\n", - *((pu1Byte)posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_RSP_DIALOG_TOKEN), pP2PInfo->SDContext.DialogToken)); - return RT_STATUS_INVALID_DATA; - } - - // - // Get FragmentID field (including MoreData bit and FragmentID) - // - { - u1Byte GASQueryRspFragmentID = *((pu1Byte)posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_RSP_FRAG_ID); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("GASQueryRspFragmentID: %u\n", GASQueryRspFragmentID)); - - if(GASQueryRspFragmentID & 0x80) - { - bMoreData = TRUE; - } - FragmentID = GASQueryRspFragmentID & (0x7F); - } - - // - // Check FragmentID - // - if(FragmentID != pP2PInfo->SDContext.FragmentID) - { - RT_TRACE(COMP_P2P, DBG_WARNING, - ("[WARNING] expected FragmentID mismatch: expected (%u), recvd (%u)\n", - pP2PInfo->SDContext.FragmentID, FragmentID)); - return RT_STATUS_INVALID_DATA; - } - else - { - pP2PInfo->SDContext.FragmentID++; // indicates that we are expecting the next fragment - } - - // - // Get SDComebackRsp fields - // - { - // Status (11u) - // Ignore - - // GAS Rsp Fragment ID - // Already processed - - // GAS Comeback Delay - // Ignore - - // AD Prot IE - // Ignore - - // Query Rsp Len - QueryRspLen = ReadEF2Byte(posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_RSP_LEN); // ignore - - // - // Defrag ANQP Query Rsp Field - // - if(FRAME_OFFSET_GAS_COMEBACK_RSP_QUERY_RSP + QueryRspLen <= posMpdu->Length) - { - if(pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize + QueryRspLen <= P2P_MAX_SERVICE_BUF_SIZE) - { - PlatformMoveMemory(pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf + pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize, - posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_RSP_QUERY_RSP, - QueryRspLen); - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize += QueryRspLen; - } - else - { - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_P2P, DBG_SERIOUS, - ("[ERROR] no enough buf for the ComebackRsp: buflen(%u) + QueryRspLen(%u) > bufsize(%u)\n", - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize, - QueryRspLen, - P2P_MAX_SERVICE_BUF_SIZE)); - bBufferOut = TRUE; - } - } - - // Service update indicator - if(FragmentID == 0) - { - pP2PInfo->SDContext.ServiceUpdateIndicator = - ReadEF2Byte(posMpdu->Octet + FRAME_OFFSET_GAS_COMEBACK_RSP_SERVICE_UPDATE_INDICATOR); - } - - if(QueryRspLen == 0) - { - return rtStatus; - } - } - - if(bMoreData) - { - p2p_Send_SDComebackReq(pP2PInfo, - pP2PInfo->SDContext.TargetDeviceAddress, - pP2PInfo->SDContext.DialogToken); - } - else - { - if(!bBufferOut) - { - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ANQP Defrag result: ", - pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize); - - pP2PInfo->SDContext.Status = P2POnANQPQueryRspField(pP2PInfo, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize, - pP2PInfo->SDContext.ServiceRspRecvd, - &pP2PInfo->SDContext.ServiceRspRecvdSize); - - if(pP2PInfo->SDContext.Status == P2P_SD_STATUS_SUCCESS) - { - P2PIndicateOnSDRsp(pP2PInfo, &pP2PInfo->SDContext); - } - } - - pP2PInfo->State = P2P_STATE_SERVICE_DISCOVERY_COMPLETE; - P2PScanListEnterScanCompleteImmediately(pP2PInfo); - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("Status: %u, Recvd FragID: %u, nRspTLVs got from defragmented ANQP: %u\n", - pP2PInfo->SDContext.Status, FragmentID, pP2PInfo->SDContext.ServiceRspRecvdSize)); - - return rtStatus; -} - -BOOLEAN -P2PCommonChannelArrived( - IN PP2P_INFO pP2PInfo, - IN P2P_DEV_LIST_ENTRY *pDev, - IN OCTET_STRING osPacket - ) -{ - BOOLEAN bPacketTypeValid = FALSE; - BOOLEAN bCommonChannelArrived = FALSE; - P2P_STATE NextState = P2P_STATE_INITIALIZED; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - u4Byte BoostInitGainValue = 0; - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("p2p state 0x%x bPreGroupFormation %d bDoingProvisionDiscovery %d bToSendInvitationReqOnProbe %d\n", pP2PInfo->State, pP2PInfo->bPreGroupFormation, pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery, pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe)); - - if(pP2PInfo->bPreGroupFormation) - {// In this case, we are in pre GO Nego phase. We will start a GO Nego procedure. - switch(P2P_FRAME_GET_TYPE(osPacket.Octet)) - { - case Type_Probe_Req: - bPacketTypeValid = TRUE; - break; - case Type_Probe_Rsp: - bPacketTypeValid = TRUE; - break; - default: - break; - } - - if(!bPacketTypeValid) - { - return FALSE; - } - - // - // PF #3: - // if the target is a GO, then it replies ProbeRsp with its Interface Addr, - // so here, we have to compare using its Interface Address instead of Device Address. - // 2010.05.11, haich. - // - if(pP2PInfo->ConnectionContext.ConnectingDevice.Role == P2P_GO) - { - if(!eqMacAddr(pP2PInfo->ConnectionContext.ConnectingDevice.IntendedP2PInterfaceAddress, pDev->mac)) - { - return FALSE; - } - } - else - { - if(!eqMacAddr(pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress, pDev->mac)) - { - return FALSE; - } - } - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("P2PScanListCeaseScan\n")); - p2p_DevList_Unlock(&pP2PInfo->devList); - P2PScanListCeaseScan(pP2PInfo); - p2p_DevList_Lock(&pP2PInfo->devList); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PCommonChannelArrived(): Recv ProbeRsp from the target device = > start Group Formation\n")); - pP2PInfo->bPreGroupFormation = FALSE; - - if(pP2PInfo->State == P2P_STATE_GO_NEGO_REQ_RECVD || - pP2PInfo->State == P2P_STATE_GO_NEGO_RSP_SEND || - pP2PInfo->State == P2P_STATE_GO_NEGO_CONFIRM_WAIT || - pP2PInfo->State == P2P_STATE_GO_NEGO_COMPLETE) - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("already do GONego!!\n")); - pP2PInfo->bPreGroupFormation = FALSE; - return FALSE; - } - - NextState = P2P_STATE_GO_NEGO_REQ_SEND; - - bCommonChannelArrived = TRUE; - } - - if(pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery) - { - u1Byte *pdTargetMac = NULL; - - if(pP2PInfo->ProvisionDiscoveryContext.go) - pdTargetMac = pP2PInfo->ProvisionDiscoveryContext.goBssid; - else - pdTargetMac = pP2PInfo->ProvisionDiscoveryContext.devAddr; - - if(eqMacAddr(pDev->mac, pdTargetMac)) - {// source is the device we are trying to invite - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PCommonChannelArrived(): Recv Probe from the provision discovery request target, state: %u\n", - pP2PInfo->State)); - - // - // Retrieve specific P2P device info. from Win8 Specific Device Information Pool to initiate boost initial gain - // 2014.03.23. - // - pP2PDeviceListEntry = P2PDeviceListFind(&pP2PInfo->DeviceList, pDev->mac); - if(pP2PDeviceListEntry) - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - BoostInitGainValue = TRUE; - BoostInitGainValue = (BoostInitGainValue | ((pP2PDeviceListEntry->RecvSignalPower+110) << 8)); - pP2PInfo->pAdapter->HalFunc.SetHwRegHandler(pP2PInfo->pAdapter, HW_VAR_BOOST_INIT_GAIN_OS, (pu1Byte)&BoostInitGainValue); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATE_PROVISION_DISCOVERY_REQ_SEND: SignalStrength(%#x)\n", pP2PDeviceListEntry->RecvSignalPower)); - } - } - - pP2PInfo->State = P2P_STATE_PROVISION_DISCOVERY_REQ_SEND; - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter), - P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? P2P_PROVISION_DISCOVERY_SHORT_TIMEOUT : P2P_PROVISION_DISCOVERY_TIMEOUT - ); - - IncreaseDialogToken(pP2PInfo->DialogToken); - p2p_Send_PDReq(pP2PInfo, pDev->mac, P2P_DEV_TYPE_GO == pDev->type, pP2PInfo->DialogToken, pDev->p2p->pdConfigMethod); - - pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery = FALSE; - - NextState = P2P_STATE_PROVISION_DISCOVERY_RSP_WAIT; - - bCommonChannelArrived = TRUE; - } - } - - if(pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe) - { - - if(eqMacAddr(pDev->mac, pP2PInfo->InvitationContext.InvitedDevice.DeviceAddress)) - {// source is the device we are trying to invite - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PCommonChannelArrived(): Recv Probe from the invitee device = > to send invitation req, state: %u\n", - pP2PInfo->State)); - - pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe = FALSE; - //pP2PInfo->InvitationContext.Channel = P2PScanListCeaseScan(pP2PInfo); - - pP2PInfo->State = P2P_STATE_INVITATION_REQ_SEND; - - // - // Retrieve specific P2P device info. from Win8 Specific Device Information Pool to initiate boost initial gain - // 2013.10.15. - // - pP2PDeviceListEntry = P2PDeviceListFind(&pP2PInfo->DeviceList, pDev->mac); - if(pP2PDeviceListEntry) - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - BoostInitGainValue = TRUE; - BoostInitGainValue = (BoostInitGainValue | ((pP2PDeviceListEntry->RecvSignalPower+110) << 8)); - pP2PInfo->pAdapter->HalFunc.SetHwRegHandler(pP2PInfo->pAdapter, HW_VAR_BOOST_INIT_GAIN_OS, (pu1Byte)&BoostInitGainValue); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATE_INVITATION_REQ_SEND: SignalStrength(%#x)\n", pP2PDeviceListEntry->RecvSignalPower)); - } - } - - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter), P2P_INVITATION_FRAME_TIMEOUT); - - p2p_Send_InvitationReq(pP2PInfo, pDev->mac); - - NextState = P2P_STATE_INVITATION_RSP_WAIT; - - bCommonChannelArrived = TRUE; - } - } - - if(pP2PInfo->SDContext.bDoingServiceDiscovery) - { - PP2P_SD_CONTEXT pServiceDiscvoery = &(pP2PInfo->SDContext); - - if(eqMacAddr(pServiceDiscvoery->TargetDeviceAddress, pDev->mac)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PCommonChannelArrived(): Recv Probe from the service discovery request target, state: %u\n", - pP2PInfo->State)); - pP2PInfo->SDContext.bDoingServiceDiscovery = FALSE; - - //pP2PInfo->SDContext.Channel = P2PScanListCeaseScan(pP2PInfo); - pP2PInfo->State = P2P_STATE_SERVICE_DISCOVERY_REQ_SEND; - - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter), P2P_SERVICE_DISCOVERY_TIMEOUT); - - p2p_Send_SDReq(pP2PInfo, pDev->mac); - - NextState = P2P_STATE_SERVICE_DISCOVERY_RSP_WAIT; - - bCommonChannelArrived = TRUE; - } - } - - // - // Go to the intended state immediately if common channel arrived. - // - if(bCommonChannelArrived) - { - BOOLEAN bScanInProgress = MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); - u4Byte msDelayStart = 0; - - // Wait more time for the response packet. - if(NextState == P2P_STATE_PROVISION_DISCOVERY_RSP_WAIT || - NextState == P2P_STATE_INVITATION_RSP_WAIT || - NextState == P2P_STATE_SERVICE_DISCOVERY_RSP_WAIT) - { - msDelayStart += 100; // Wait 100 ms for the rsp packet - } - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - msDelayStart += 10; // if scan in progress, we have to wait until ScanComplete() finishes - //P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - //P2PScanListCeaseScan(pP2PInfo); - P2PExtendedListenComplete(pP2PInfo); - } - else if(bScanInProgress) - {// Doing normal scan - msDelayStart += 10; // if scan in progress, we have to wait until ScanComplete() finishes - //P2PScanListCeaseScan(pP2PInfo); - } - - pP2PInfo->State = NextState; - - // PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - // PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, msDelayStart); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Set P2PMgntTimer %d ms!\n", msDelayStart)); - } - - return bCommonChannelArrived; -} - -//====================================================================== -// P2P Managmement -//====================================================================== - -VOID -P2PInitializeChannelEntryList( - PP2P_INFO pP2PInfo -) -{ - // - // Channel entry list. - // Set to the channels we support by default. - // - - PADAPTER pAdapter = pP2PInfo->pAdapter; - u1Byte i; - u2Byte SupportedWirelessMode = pAdapter->HalFunc.GetSupportedWirelessModeHandler(pAdapter); - WIRELESS_MODE CurrentWirelessModeBackup = pAdapter->MgntInfo.dot11CurrentWirelessMode; - PRT_CHANNEL_LIST pChannelList = NULL; - u1Byte chList[CHANNEL_MAX_NUMBER] = {0}; - u1Byte nChList = 0; - - pAdapter->MgntInfo.dot11CurrentWirelessMode = SupportedWirelessMode; - RtActChannelList(pAdapter, RT_CHNL_LIST_ACTION_CONSTRUCT, NULL, NULL); - RtActChannelList(pAdapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_LIST, NULL, &pChannelList); - pAdapter->MgntInfo.dot11CurrentWirelessMode = CurrentWirelessModeBackup; - - // - // Init channel entry list - // - pAdapter->MgntInfo.ChannelPlan = GetDefaultAdapter(pAdapter)->MgntInfo.ChannelPlan; - - PlatformZeroMemory(&pP2PInfo->ChannelEntryList, sizeof(pP2PInfo->ChannelEntryList)); - - pChannelList = GET_RT_CHANNEL_LIST(&pAdapter->MgntInfo);//MgntActQuery_ChannelList(pP2PInfo->pAdapter); - - for(i = 0; i < pChannelList->ChannelLen; i++) - { - chList[nChList++] = pChannelList->ChnlListEntry[i].ChannelNum; - } - - MgntActSet_P2PChannelList(pAdapter, nChList, chList); -} - -VOID -P2PInitialize( - IN PP2P_INFO pP2PInfo, - IN PADAPTER pAdapter, - IN u1Byte ListenChannel, - IN u1Byte IntendedOpChannel, - IN u1Byte GOIntent - ) -{ - BOOLEAN bBoostIgi = FALSE; - BOOLEAN bSupportHwP2pPs = FALSE; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PInitialize(): \n")); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "CurrentAddress: ", pAdapter->CurrentAddress); - - pP2PInfo->P2PVersion = 1; - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PVersion initialized to %u\n", pP2PInfo->P2PVersion)); - - if(pAdapter == GetDefaultAdapter(pAdapter)) // Default adapter means this is Realtek P2P - { - pAdapter->P2PSupport = P2P_SUPPORT_STATE_RTK_SUPPORT; - } - else - { - pAdapter->P2PSupport = P2P_SUPPORT_STATE_OS_SUPPORT; - } - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P Support Type = %s\n", (P2P_SUPPORT_STATE_RTK_SUPPORT == pAdapter->P2PSupport) ? "RTK_SUPPORT" : "OS_SUPPORT")); - // Win8: Point to self adapter - pP2PInfo->pAdapter = pAdapter; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PInitialize(): port number %d\n", pP2PInfo->pAdapter->pNdis62Common->PortNumber)); - - P2PSetRole(pP2PInfo, P2P_NONE); - pP2PInfo->State = P2P_STATE_INITIALIZED; - pP2PInfo->PreviouslyIndicatedState = P2P_STATE_MAX; - pP2PInfo->PreviouslyIndicateStateTime = 0; - - if(P2P_ADAPTER_RTK_SUPPORT_P2P(pAdapter)) - { - bBoostIgi = TRUE; - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_BOOST_INIT_GAIN, &bBoostIgi); - } - - cpMacAddr(pP2PInfo->DeviceAddress, pAdapter->CurrentAddress); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "pP2PInfo->DeviceAddress: ", pP2PInfo->DeviceAddress); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - // Win8: Let the interface address be the permanent address - cpMacAddr(pP2PInfo->InterfaceAddress, pAdapter->PermanentAddress); - } - else - { - // In Win7: pAdapter->CurrentAddress == pAdapter->PermanentAddress - cpMacAddr(pP2PInfo->InterfaceAddress, pAdapter->CurrentAddress); - } - - // - // Capability - // - pP2PInfo->DeviceCapability = 0; - pP2PInfo->DeviceCapability |= dcServiceDiscovery; - pP2PInfo->DeviceCapability |= dcP2PClientDiscoverability; - pP2PInfo->DeviceCapability |= dcP2PInvitationProcedure; - //pP2PInfo->DeviceCapability |= dcP2PInfrastructureManaged; - - pP2PInfo->GroupCapability = 0; - pP2PInfo->GroupCapability |= gcCrossConnection; - pP2PInfo->GroupCapability |= gcIntraBSSDistribution; - pP2PInfo->GroupCapability |= gcPersistentP2PGroup; - - // - // GO Intent - // - pP2PInfo->GOIntent = GOIntent; - - // - // Channel - // - pP2PInfo->RegulatoryClass = 81; - - if(0 == MultiChannelGetConnectedChannels(pAdapter, &pP2PInfo->OperatingChannel, 1)) - { - pP2PInfo->OperatingChannel = IntendedOpChannel; - } - - pP2PInfo->ListenChannel = ListenChannel; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("GOIntent = %d, OP Chnl = %d, ListenChnl = %d\n", pP2PInfo->GOIntent, pP2PInfo->OperatingChannel, pP2PInfo->ListenChannel)); - - if(FALSE == P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) || pAdapter->pNdis62Common->PortType == EXT_P2P_DEVICE_PORT) - { - MgntActSet_P2PListenChannel(pAdapter, ListenChannel); - } - - pP2PInfo->CountryString[0] = 0x55; //US - pP2PInfo->CountryString[1] = 0x53; - pP2PInfo->CountryString[2] = 0x04; - - // - // Channel entry list. - // Set to the channels we support by default. - // - P2PInitializeChannelEntryList(pP2PInfo); - - // - //WPS - // - { - // - // Not to clear the WPS IE because we should use the one set by normal UI, - // The testing UI does not know the exact WPS IE. - // - //pP2PInfo->WpsInfoLen = 0; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PInitialize(): primary dev type: %u\n", - pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId)); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "P2PInitialize(): Device Name:\n", - pP2PInfo->WpsAttributes.DeviceName, pP2PInfo->WpsAttributes.DeviceNameLength); - } - - // Configuration Timeout, in units of 10ms - pP2PInfo->GOConfigurationTimeout = P2P_GO_CONFIG_TIMEOUT; - pP2PInfo->ClientConfigurationTimeout = P2P_CLIENT_CONFIG_TIMEOUT; - - // - // Scan List - // - pP2PInfo->ScanListSize = 0; - PlatformZeroMemory(pP2PInfo->ScanList, P2P_MAX_SCAN_LIST * sizeof(P2P_DEVICE_DISCRIPTOR)); - pP2PInfo->ScanList4QuerySize = 0; - PlatformZeroMemory(pP2PInfo->ScanList4Query, P2P_MAX_SCAN_LIST * sizeof(P2P_DEVICE_DISCRIPTOR)); - pP2PInfo->ForceScanListIndicateSlotCount = 0; - pP2PInfo->bDeviceDiscoveryInProgress = 0; - - pP2PInfo->P2PGONoClientSlotCount = 0; - pP2PInfo->P2PClientDisconnectedSlotCount = 0; - pP2PInfo->ExtListenTimingPeriodSlotCount = 0; - pP2PInfo->bExtendedListening = FALSE; - - pP2PInfo->DialogToken = 1; - - PlatformZeroMemory(&pP2PInfo->ConnectionContext, sizeof(P2P_CONNECTION_CONTEXT)); - pP2PInfo->bReinitiateConnection= FALSE; - pP2PInfo->TimeStartWaitingForReinitiate = 0; - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)0; - - PlatformZeroMemory(&pP2PInfo->InvitationContext, sizeof(P2P_INVITATION_CONTEXT)); - pP2PInfo->bAcceptInvitation = FALSE; - PlatformZeroMemory(pP2PInfo->AccpetInvitationDeviceAddress, 6); - PlatformZeroMemory(&pP2PInfo->DeviceDiscoverabilityContext, sizeof(P2P_DEVICE_DISCOVERABILITY_CONTEXT)); - - pP2PInfo->ExtListenTimingPeriod = P2P_EXT_LISTEN_TIMING_PERIOD_MS; - pP2PInfo->ExtListenTimingDuration = P2P_EXT_LISTEN_TIMING_DURATION_MS; - - pP2PInfo->bSendProbeReqInExtendedListen = FALSE; - - PlatformZeroMemory(&pP2PInfo->ProvisionDiscoveryContext, sizeof(P2P_PROVISION_DISCOVERY_CONTEXT)); - - // Service Discovery - PlatformZeroMemory(&pP2PInfo->SDContext, sizeof(P2P_SD_CONTEXT)); - pP2PInfo->SDRspFragmtntThreshold = P2P_SERVICE_MAX_RSP_FRAG_THRESHOLD; - pP2PInfo->SDWaitForComebackReqSlotCount = 0; - - //PlatformZeroMemory(&pP2PInfo->PersistentProfile, sizeof(P2P_PERSISTENT_PROFILE)); - - // ICS - pP2PInfo->CurrentIcsStatus = P2P_CURRENT_ICS_STATUS_UNKNOWN; - - // Profile list - pP2PInfo->profileListLen = 0; - pP2PInfo->pProfileList = NULL; - - //====================================================================== - // Power Save related - //====================================================================== - // Clear the PS level first. - RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_LPS_P2P_PS); - pP2PInfo->bUpdateFromBeacon = FALSE; - pP2PInfo->bUpdatePsParameter = FALSE; - pP2PInfo->PsFlag = 0; - pP2PInfo->NextTimeout = 0; - pP2PInfo->P2pPsState = P2P_PS_AWAKE; - pP2PInfo->NoAIEIndex = 0; - pP2PInfo->CTWindow = 0; - pP2PInfo->bOppPS = 0; - //pP2PInfo->SSIDLen = 0; - PlatformZeroMemory(pP2PInfo->NoADescriptors, sizeof(P2P_NOA_DESCRIPTOR) * 2); - - // Determine whether this chip can support P2P ps mode. - pP2PInfo->psExeType = RT_P2P_PS_EXE_BY_NONE; - if(!pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_HW_P2P_PS_SUPPORT, (pu1Byte)&bSupportHwP2pPs)) - { - bSupportHwP2pPs = FALSE; - } - if(bSupportHwP2pPs && pAdapter->MgntInfo.bWiFiConfg) - { - pP2PInfo->psExeType = RT_P2P_PS_EXE_BY_HW; - } - else if(bSupportHwP2pPs && GetDefaultAdapter(pAdapter)->MgntInfo.RegMultiChannelFcsMode >= MULTICHANNEL_FCS_SUPPORT_GO) - { - pP2PInfo->psExeType = RT_P2P_PS_EXE_BY_HW; - } - else - { - pP2PInfo->psExeType = RT_P2P_PS_EXE_BY_SW_TIMER; - } - - if(pP2PInfo->psExeType > RT_P2P_PS_EXE_BY_HW) - { - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - pPSC->bFwCtrlLPS = FALSE; - } - - //====================================================================== - // P2P Managed - //====================================================================== - pP2PInfo->bWlanApRejection_CrossConnection = FALSE; - pP2PInfo->bWlanApRejection_Unmanaged = FALSE; - pP2PInfo->bWlanApRejection_IncompatibleCoexistenceParameters = FALSE; - pP2PInfo->bWlanApRejection_IncompatibleP2POperation = FALSE; - - //====================================================================== - // Other - //====================================================================== - - P2PSetPsState(pP2PInfo, P2P_PS_CANCEL_ALL_PS, P2P_PS_AWAKE, 0); - - if(pAdapter->MgntInfo.bDisableCck) - { - SelectRateSet(pAdapter, pAdapter->MgntInfo.Regdot11OperationalRateSet); - } - - // - // Ask for disconnection, note that these function can only be called when P2PInfo is initialized - // - //P2PIndicateStopApRequest(pP2PInfo); - //P2PIndicateDisconnectClientRequest(pP2PInfo); - - P2P_AddIe_Init(&pP2PInfo->AdditionalIEs); - - p2p_DevList_Init(&pP2PInfo->devList); - - // For Win 8: OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY ----------------------------- - // The macro P2P_ENABLED() will be modified due to the Win 8. - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - pP2PInfo->uListenStateDiscoverability = 0; // Zero for not discoverable - } - else - { - pP2PInfo->uListenStateDiscoverability = 100; // Set a non-zero value - } - // ----------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_DISCOVER_REQUEST ------------------------------------------------------ - pP2PInfo->DiscoverSequence = P2P_DISCOVERY_SCAN_PHASE | P2P_DISCOVERY_FIND_PHASE; - pP2PInfo->ScanType = SCAN_ACTIVE; - P2PClearScanDeviceID(&pP2PInfo->ScanDeviceIDs); - pP2PInfo->bForceScanLegacyNetworks = FALSE; - pP2PInfo->bDeviceDiscoveryIndicateToOS = FALSE; - pP2PInfo->bDiscoverForSpecificChannels = FALSE; - PlatformZeroMemory(pP2PInfo->DiscoverForSpecificChannels, sizeof(pP2PInfo->DiscoverForSpecificChannels)); - pP2PInfo->uNumberOfDiscoverForSpecificChannels = 0; - pP2PInfo->uNumberOfDiscoverRounds = 0; - - // + Win8 Trick to Speed up GO Negotiation Procedure - pP2PInfo->LastDeviceDiscoveryOidIssueTime = 0; - pP2PInfo->LastDeviceDiscoveryIndicatedTime = 0; - // ------------------------------------------------------------------------------------------------ - - // Device List ------------------------------------------------------------------------- - PlatformZeroMemory(&pP2PInfo->DeviceList, sizeof(P2P_DEVICE_LIST)); - PlatformZeroMemory(&pP2PInfo->DeviceListForQuery, sizeof(P2P_DEVICE_LIST)); - //----------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST -------------------------------------- - pP2PInfo->ProvisionRequestGroupCapability = 0; - pP2PInfo->bProvisionRequestUseGroupID = FALSE; - PlatformZeroMemory(pP2PInfo->ProvisionRequestGroupIDDeviceAddress, 6); - PlatformZeroMemory(pP2PInfo->ProvisionRequestGroupIDSSID, MAX_SSID_LEN); - pP2PInfo->uProvisionRequestGroupIDSSIDLength = 0; - - // ------------------------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE -------------------------------------- - PlatformZeroMemory(pP2PInfo->ProvisionResponseReceiverDeviceAddress, 6); - pP2PInfo->ProvisionResponseDialogToken = 0; - // ------------------------------------------------------------------------------------------------- - - // For delaying operations from the OID command --------------------------------------------------------- - pP2PInfo->bPostoneP2POidPostProcessWorkItem = FALSE; - // RT_WORK_ITEM P2POidPostProcessWorkItem; Initialized in MgntInitializeAllWorkItem and MgntFreeAllWorkItem - pP2PInfo->OidOperation = OID_OPERATION_NO_OPERATION; - pP2PInfo->PacketSentInWorkItemCallback = (P2P_PUBLIC_ACTION_TYPE) 0xFF; // Send no packet - //------------------------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST --------------------------- - //PlatformZeroMemory(pP2PInfo->NegotiationRequestIntendedInterfaceAddress, 6); - pP2PInfo->NegotiationRequestGOIntent = 0; - pP2PInfo->NegotiationRequestGroupCapability = 0; - // --------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE ------------------------ - PlatformZeroMemory(pP2PInfo->NegotiationResponsePeerDeviceAddress, 6); - pP2PInfo->NegotiationResponseDialogToken = 0; - pP2PInfo->NegotiationResponseStatus = 0; - pP2PInfo->NegotiationResponseGroupOwnerIntent = 0; - //PlatformZeroMemory(pP2PInfo->NegotiationResponseIntendedInterfaceAddress, 6); - pP2PInfo->NegotiationResponseGroupCapability = 0; - PlatformZeroMemory(pP2PInfo->NegotiationResponseGroupIDDeviceAddress, 6); - PlatformZeroMemory(pP2PInfo->NegotiationResponseGroupIDSSID, MAX_SSID_LEN); - pP2PInfo->uNegotiationResponseGroupIDSSIDLength = 0; - pP2PInfo->bNegotiationResponseUseGroupID = FALSE; - - //--------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM --------------------------- - PlatformZeroMemory(pP2PInfo->NegotiationConfirmPeerDeviceAddress, 6); - pP2PInfo->NegotiationConfirmDialogToken = 0; - pP2PInfo->NegotiationConfirmStatus = 0; - pP2PInfo->NegotiationConfirmGroupCapability = 0; - PlatformZeroMemory(pP2PInfo->NegotiationConfirmGroupIDDeviceAddress, 6); - PlatformZeroMemory(pP2PInfo->NegotiationConfirmGroupIDSSID, MAX_SSID_LEN); - pP2PInfo->uNegotiationConfirmGroupIDSSIDLength = 0; - pP2PInfo->bNegotiationConfirmUseGroupID = FALSE; - - //--------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_INVITATION_REQUEST ------------------------------- - PlatformZeroMemory(pP2PInfo->InvitationRequestGroupBSSID, 6); - pP2PInfo->bInvitationRequestUseGroupBSSID = FALSE; - pP2PInfo->uInvitationRequestOperatingChannelNumber = 0; - pP2PInfo->bInvitationRequestUseSpecifiedOperatingChannel = FALSE; - PlatformZeroMemory(pP2PInfo->InvitationRequestGroupIDDeviceAddress, 6); - PlatformZeroMemory(pP2PInfo->InvitationRequestGroupIDSSID, MAX_SSID_LEN); - pP2PInfo->uInvitationRequestGroupIDSSIDLength = 0; - pP2PInfo->bInvitationRequestLocalGO = FALSE; - - //--------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_INVITATION_RESPONSE ------------------------------ - PlatformZeroMemory(pP2PInfo->InvitationResponseReceiverDeviceAddress, 6); - pP2PInfo->InvitationResponseDialogToken = 0; - pP2PInfo->InvitationResponseStatus = 0; - PlatformZeroMemory(pP2PInfo->InvitationResponseGroupBSSID, 6); - pP2PInfo->bInvitationResponseUseGroupBSSID = FALSE; - pP2PInfo->uInvitationResponseOperatingChannelNumber = 0; - pP2PInfo->bInvitationResponseUseSpecifiedOperatingChannel = FALSE; - pP2PInfo->bInvitationResponseIndicateToOS = FALSE; - //--------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_GROUP_JOIN_PARAMETERS ------------------------------------ - P2PResetClientJoinGroupContext(pP2PInfo); - // ----------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_DESIRED_GROUP_ID ------------------------------------------ - PlatformZeroMemory(pP2PInfo->DesiredTargetMacAddress, sizeof(pP2PInfo->DesiredTargetMacAddress)); - pP2PInfo->uGroupTargetSSIDLength = 0; - PlatformZeroMemory(pP2PInfo->GroupTargetSSID, sizeof(pP2PInfo->GroupTargetSSID)); - // ----------------------------------------------------------------------------------- - - - // Debug Device Discovery ------------------- - pP2PInfo->ProbeRequestSequenceNum = 0; - // ---------------------------------------- - - // Trick for knowing next channel switch time ----------- - pP2PInfo->TimeStartToStopSendingProbeResponse = 0; - // ----------------------------------------------- - - - // Start Mgnt Timer ----------------------------------------------------------------- - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - if(!pP2PInfo->pAdapter->bInHctTest) - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - // -------------------------------------------------------------------------------- - - P2PSetRole(pP2PInfo, P2P_DEVICE); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PInitialize()\n")); -} - -VOID -P2PResetCommonChannelArrivingProcess( - IN PP2P_INFO pP2PInfo - ) -{ - FunctionIn(COMP_P2P); - // connection - pP2PInfo->bPreGroupFormation = FALSE; - PlatformZeroMemory(&pP2PInfo->ConnectionContext, sizeof(P2P_CONNECTION_CONTEXT)); - - // invitation - pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe = FALSE; - PlatformZeroMemory(&pP2PInfo->InvitationContext, sizeof(P2P_INVITATION_CONTEXT)); - - // provision discovery - pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery = FALSE; - PlatformZeroMemory(&pP2PInfo->ProvisionDiscoveryContext, sizeof(P2P_PROVISION_DISCOVERY_CONTEXT)); - - // sd - pP2PInfo->SDContext.bDoingServiceDiscovery = FALSE; - PlatformZeroMemory(&pP2PInfo->SDContext, sizeof(P2P_SD_CONTEXT)); - - FunctionOut(COMP_P2P); -} - -// -// This function guarantees to preserve: -// * P2P State -// * Channel -// -BOOLEAN -P2PDeviceDiscovery( - IN PP2P_INFO pP2PInfo, - IN u1Byte FindPhaseLoopTimes - ) -{ - BOOLEAN bScanInProgress; - u4Byte msDelayStart = 0; - BOOLEAN bToIndicDevDiscComp = FALSE; - - if(!P2P_ENABLED(pP2PInfo)) - { - return FALSE; - } - - // - // Stop any existing scan - // - bScanInProgress = MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PDeviceDiscovery(): State: %u, bScanInProgres: %u port number %d\n", - pP2PInfo->State, bScanInProgress, pP2PInfo->pAdapter->pNdis62Common->PortNumber)); - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - msDelayStart += 10; // if scan in progress, we have to wait until ScanComplete() finishes - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - bToIndicDevDiscComp = TRUE; - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - P2PScanListCeaseScan(pP2PInfo); - P2PExtendedListenComplete(pP2PInfo); - } - else if(bScanInProgress) - {// Doing normal scan - msDelayStart += 10; // if scan in progress, we have to wait until ScanComplete() finishes - P2PScanListCeaseScan(pP2PInfo); - } - - if(FindPhaseLoopTimes == P2P_DEV_DISC_STOP) - { - if(bToIndicDevDiscComp && P2P_DOING_PURE_DEVICE_DISCOVERY(pP2PInfo)) - { - P2PIndicateDeviceDiscoveryComplete(pP2PInfo); - } - return TRUE; - } - - pP2PInfo->bDeviceDiscoveryInProgress = TRUE; - pP2PInfo->StateBeforeScan = pP2PInfo->State; - - if(pP2PInfo->Role == P2P_GO) - { - P2PStopResumeGOBeaconning(pP2PInfo, FALSE); - } - - // - // Clear scan list before scan. - // If we are a GO, we shall not clear our scan list since when a client associates, - // it provides its info to us in AssocReq, and we record the info in our scan list. - // If we clear this info, we will lost the info of the associated clients. - // - if(pP2PInfo->Role != P2P_GO && - P2P_DOING_PURE_DEVICE_DISCOVERY(pP2PInfo)) // Can't use P2P_ACTING_AS_GO since the state now is P2P_STATE_SCAN, not operating - { - P2PScanListClear(pP2PInfo); - } - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - P2P_INC_REF_CNT(pP2PInfo); - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - -// pP2PInfo->StateBeforeScan = pP2PInfo->State; - - pP2PInfo->State = P2P_STATE_DEV_DISC_START; -// pP2PInfo->bDeviceDiscoveryInProgress = TRUE; - - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = FindPhaseLoopTimes; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PDeviceDiscovery(): delay start after %d (ms), StateBeforeScan: %u\n", - msDelayStart, pP2PInfo->StateBeforeScan)); - - //if(MgntActQuery_802_11_CHANNEL_NUMBER((GetDefaultAdapter(pP2PInfo->pAdapter))) != pP2PInfo->ListenChannel) - //{ - // // Reset Listen Channel to see if we have chance to switch current channel back to the Listen Channel. - // MgntActSet_P2PListenChannel(pP2PInfo->pAdapter, pP2PInfo->ListenChannel); - //} - - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - P2P_DEC_REF_CNT(pP2PInfo); - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, msDelayStart); - return TRUE; -} - -VOID -P2PDeviceDiscoverForSpecificChannels( - PP2P_INFO pP2PInfo, - pu1Byte ChannelList, - u1Byte uNumberOfChannel -) -{ - VOID *customScanInfo = GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter); - VOID *req = NULL; - FRAME_BUF *probeReqBuf = NULL; - u4Byte itChnl = 0; - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - { - return; - } - - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probeReqBuf, pP2PInfo); - - for(itChnl = 0; itChnl < uNumberOfChannel; itChnl++) - { - CustomScan_AddScanChnl(req, ChannelList[itChnl], 3, SCAN_ACTIVE, 20, MGN_6M, probeReqBuf); - } - - CustomScan_SetupCbCtx(req, p2p_ScanStateCb, pP2PInfo->pAdapter); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "spec chnl disc"); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2PDeviceDiscoverForSpecificChannels issued\n")); - - return; -} - -VOID -P2PDeviceDiscoveryComplete( - IN PP2P_INFO pP2PInfo, - IN BOOLEAN bRecoverState - ) -{ - // - // We do some clean up task here. - // - - // For Win8 P2P Indication ------------------------------------------------------------ - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) && pP2PInfo->bDeviceDiscoveryIndicateToOS == TRUE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: P2P_EVENT_DEVICE_DISCOVERY_COMPLETE\n", __FUNCTION__)); - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_DEVICE_DISCOVERY_COMPLETE, NULL); - - // Trick Adopted for Speeding up the Go Negotiation - pP2PInfo->LastDeviceDiscoveryIndicatedTime = PlatformGetCurrentTime(); - - P2PClearScanDeviceID(&pP2PInfo->ScanDeviceIDs); - pP2PInfo->bDeviceDiscoveryIndicateToOS = FALSE; - - pP2PInfo->bDiscoverForSpecificChannels = FALSE; - PlatformZeroMemory( - pP2PInfo->DiscoverForSpecificChannels, - sizeof(pP2PInfo->DiscoverForSpecificChannels) - ); - pP2PInfo->uNumberOfDiscoverForSpecificChannels = 0; - pP2PInfo->uNumberOfDiscoverRounds = 0; - } - // -------------------------------------------------------------------------------- - - - if(pP2PInfo->Role == P2P_GO) - { - P2PStopResumeGOBeaconning(pP2PInfo, TRUE); - } - - - if(bRecoverState) - { - // discovery complete, back to original state - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PDeviceDiscoveryComplete(): P2P_STATE_DEV_DISC_COMPLETE: back to state (%u) from (%u)\n", - pP2PInfo->StateBeforeScan, pP2PInfo->State)); - pP2PInfo->State = pP2PInfo->StateBeforeScan; - } - - pP2PInfo->bDeviceDiscoveryInProgress = FALSE; - - P2PSvc_OnDevDiscComplete(pP2PInfo->pP2PSvcInfo); - -} - - -VOID -P2PExtendedListenStart( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - - VOID *customScanInfo = GET_CUSTOM_SCAN_INFO(pAdapter); - VOID *req = NULL; - FRAME_BUF *probeReqBuf = NULL; - BOOLEAN bActiveScan = pP2PInfo->bSendProbeReqInExtendedListen; - - if(MgntIsLinkInProgress(GetDefaultMgntInfo(pP2PInfo->pAdapter))) - { - return; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PExtendedListenStart()\n")); - -#if (MULTICHANNEL_SUPPORT == 1) - // Do not support 3 channel swtich: This will mess up our multichannl swtich ----------------------------------------------- - if(MultiChannelSwitchNeeded(pAdapter)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Do not support extended listening on MultiChannel environment\n", __FUNCTION__)); - FunctionOut(COMP_P2P); - return; - } - // ------------------------------------------------------------------------------------------------------------- -#endif - - // Do not use extended listening if group is constructed ------------------------------------------------------ - if(GetFirstGOPort(pAdapter) || GetFirstClientPort(pAdapter)) - { - ADAPTER *cli = GetFirstClientPort(pAdapter); - - if(cli && GET_P2P_INFO(cli) - && (P2P_CLIETN_JOIN_GROUP_WPS_STATE_SCANNING == (GET_P2P_INFO(cli))->ClientJoinGroupContext.WpsState - || P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY == (GET_P2P_INFO(cli))->ClientJoinGroupContext.WpsState - || P2P_CLIETN_JOIN_GROUP_WPS_STATE_ASSOCIATING == (GET_P2P_INFO(cli))->ClientJoinGroupContext.WpsState - )) - {// don't do scan in this case - RT_TRACE_F(COMP_P2P, DBG_LOUD, - ("do not use extended listen when cli port is doing WPS join group, state: %u\n", - (GET_P2P_INFO(cli))->ClientJoinGroupContext.WpsState)); - FunctionOut(COMP_P2P); - return; - } - } - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - ADAPTER *pDev = GetFirstDevicePort(pP2PInfo->pAdapter); - - if(pDev) - { - P2P_INFO *p2p = GET_P2P_INFO(pP2PInfo->pAdapter); - - if(!p2p->uListenStateDiscoverability) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s:Do not use extended listening if not set to be discoverable\n", __FUNCTION__)); - FunctionOut(COMP_P2P); - return; - } - } - } - // -------------------------------------------------------------------------------------------------- - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: listen channel: %d, Current Channel: %d\n", - __FUNCTION__, pP2PInfo->ListenChannel, RT_GetChannelNumber(pAdapter)) - ); - - // At the same channel, no need to scan and switch channel. - if(pP2PInfo->ListenChannel == RT_GetChannelNumber(pAdapter)) - { - // RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: In the Same Channel: %d\n", __FUNCTION__, pP2PInfo->ListenChannel)); - return; - } - - pP2PInfo->bExtendedListening = TRUE; // set to false in ScanComplete() - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - { - return; - } - - probeReqBuf = CustomScan_GetProbeReqBuf(req); - - p2p_Construct_ProbeReq(probeReqBuf, pP2PInfo); - - CustomScan_AddScanChnl(req, - pP2PInfo->ListenChannel, 1, - (pP2PInfo->bSendProbeReqInExtendedListen) ? SCAN_ACTIVE : SCAN_PASSIVE, - pP2PInfo->ExtListenTimingDuration, P2P_LOWEST_RATE, probeReqBuf); - - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "ext listen"); - - FunctionOut(COMP_P2P); - -} - -VOID -P2PExtendedListenResetCounter( - IN PP2P_INFO pP2PInfo -) -{ - FunctionIn(COMP_P2P); - pP2PInfo->ExtListenTimingPeriodSlotCount = 0; -} - -VOID -P2PExtendedListenComplete( - IN PP2P_INFO pP2PInfo - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PExtendedListenComplete()\n")); - pP2PInfo->bExtendedListening = FALSE; - - if(MgntActQuery_802_11_CHANNEL_NUMBER((GetDefaultAdapter(pP2PInfo->pAdapter))) != pP2PInfo->ListenChannel && - !MgntIsLinkInProgress(GetDefaultMgntInfo(pP2PInfo->pAdapter))) - { - // Reset Listen Channel to see if we have chance to switch current channel back to the Listen Channel. - MgntActSet_P2PListenChannel(pP2PInfo->pAdapter, pP2PInfo->ListenChannel); - } - - FunctionOut(COMP_P2P); -} - -BOOLEAN -P2PProvisionDiscovery( - IN PP2P_INFO pP2PInfo, - IN pu1Byte MacAddress, // shall be the device address - IN u2Byte ConfigMethod // should have exactly 1 bit set - ) -{ - PP2P_PROVISION_DISCOVERY_CONTEXT pProvisionDiscContext = &pP2PInfo->ProvisionDiscoveryContext; - P2P_DEV_LIST_ENTRY *pDev = NULL; - - // - // Check state - // - if(pP2PInfo->State > P2P_STATE_DEV_DISC_COMPLETE - && FALSE == P2P_ACTING_AS_GO(pP2PInfo) - ) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PDeviceDiscovery(): Invalid state: %u\n",pP2PInfo->State)); - return FALSE; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PProvisionDiscovery(): ConfigMethod: 0x%X\n", ConfigMethod)); - - p2p_DevList_Lock(&pP2PInfo->devList); - - do - { - P2P_DEVICE_DISCRIPTOR desc; - const u1Byte *devAddr = NULL; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bProvisionRequestUseGroupID) - pDev = p2p_DevList_GetGo(&pP2PInfo->devList, MacAddress); - else - pDev = p2p_DevList_Get(&pP2PInfo->devList, MacAddress, P2P_DEV_TYPE_DEV); - - if(NULL == pDev) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PProvisionDiscovery(): device entry not found\n")); - p2p_DevList_Dump(&pP2PInfo->devList); - break; - } - } - else - { - if(NULL == (pDev = p2p_DevList_GetGo(&pP2PInfo->devList, MacAddress))) - { - if(NULL == (pDev = p2p_DevList_Get(&pP2PInfo->devList, MacAddress, P2P_DEV_TYPE_DEV))) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PProvisionDiscovery(): device entry not found\n")); - p2p_DevList_Dump(&pP2PInfo->devList); - break; - } - } - } - - p2p_DevList_TranslateDev(pDev, &desc); - - devAddr = desc.DeviceAddress; - - // - // For Sigma - // - if(ConfigMethod == 0) - { - if(desc.WpsAttributes.DevicePasswdId == P2P_WPS_DEV_PASSWD_ID_PBC) - ConfigMethod = P2P_WPS_CONFIG_METHODS_PUSHBUTTON; - else if(desc.WpsAttributes.DevicePasswdId == P2P_WPS_DEV_PASSWD_ID_USER_SPEC) - ConfigMethod = P2P_WPS_CONFIG_METHODS_KEYPAD; - else if(desc.WpsAttributes.DevicePasswdId == P2P_WPS_DEV_PASSWD_ID_REG_SPEC) - ConfigMethod = P2P_WPS_CONFIG_METHODS_DISPLAY; - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PProvisionDiscovery(): ConfigMethod is 0 and we don't know peer's DPID\n")); - break; - } - } - - if(!P2PTestU2SingleBitSet(ConfigMethod)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PProvisionDiscovery(): ConfigMethod has multiple bit set: %u\n", ConfigMethod)); - p2p_DevList_Unlock(&pP2PInfo->devList); - return FALSE; - } - - // - // Fill Provision Discovery Context - // - P2PResetCommonChannelArrivingProcess(pP2PInfo); - cpMacAddr(pProvisionDiscContext->devAddr, devAddr); - pProvisionDiscContext->go = (P2P_DEV_TYPE_GO == pDev->type); - if(P2P_DEV_TYPE_GO == pDev->type) - { - cpMacAddr(pProvisionDiscContext->goBssid, pDev->mac); - CopySsid(pProvisionDiscContext->SsidBuf, pProvisionDiscContext->SsidLen, - desc.SsidBuf, desc.SsidLen); - } - pProvisionDiscContext->bDoingProvisionDiscovery = TRUE; - pDev->p2p->pdStatus = P2P_SC_SUCCESS; - pDev->p2p->pdConfigMethod = ConfigMethod; - if(P2P_DEV_TYPE_GO == pDev->type) - { - if(0 != desc.OperatingChannel) - pProvisionDiscContext->Channel = desc.OperatingChannel; - else - pProvisionDiscContext->Channel = desc.ListenChannel; - } - else - { - pProvisionDiscContext->Channel = desc.ListenChannel; - } - - p2p_DevList_FlushActionFrames(&pP2PInfo->devList, pDev->mac, pDev->type); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(&pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 12); - else - P2PDeviceDiscovery(pP2PInfo, 36); - } - else - { - if(&pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 12); - else - P2PDeviceDiscovery(pP2PInfo, P2P_SCAN_FIND_PHASE_LOOP_TIMES); - } - }while(FALSE); - - p2p_DevList_Unlock(&pP2PInfo->devList); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PProvisionDiscovery(): ch %u\n", pProvisionDiscContext->Channel)); - return TRUE; -} - -VOID -P2PServiceDiscoveryReq( - PP2P_INFO pP2PInfo, - PP2P_SD_REQ_CONTEXT pServiceQueryContent - ) -{ - PP2P_DEVICE_DISCRIPTOR pDevDesc; - PP2P_SD_CONTEXT pSDContext = &(pP2PInfo->SDContext); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PServiceDiscoveryReq(): TLVs: %u\n", pServiceQueryContent->ServiceReqTLVSize)); - - if(!P2P_ENABLED(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PServiceDiscoveryReq(): P2P NOT enabled\n")); - return; - } - - if(pP2PInfo->SDContext.bDoingServiceDiscovery) - {// note that bDoingServiceDiscovery is cleared when common channel arrived - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PServiceDiscoveryReq(): SD in progress\n")); - return; - } - - if(P2P_DOING_SERVICE_DISCOVERY_REQ(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PServiceDiscoveryReq(): SD in progress (frame exhange started)\n")); - return; - } - - // - // Validate TLV list length - // - if(pServiceQueryContent->ServiceReqTLVSize < 1) // must have at least 1 query TLV - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PServiceDiscoveryReq(): error: must have at least 1 query TLV\n")); - return; - } - - if(pServiceQueryContent->ServiceReqTLVSize > P2P_SD_MAX_SERVICES) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PServiceDiscoveryReq(): error: can have at most %u TLVs\n", P2P_SD_MAX_SERVICES)); - return; - } - - RT_PRINT_ADDRS(COMP_P2P,DBG_LOUD, - ("P2PServiceDiscoveryReq(): target DevAddr: "), - pServiceQueryContent->TargetDeviceAddress, 1); - - pDevDesc = P2PScanListFind(pP2PInfo->ScanList, - pP2PInfo->ScanListSize, - pServiceQueryContent->TargetDeviceAddress, - NULL, - NULL); - if(pDevDesc == NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PServiceDiscoveryReq(): target device not found in the scan list\n")); - return; - } - - // - // Fill SDContext - // - P2PResetCommonChannelArrivingProcess(pP2PInfo); - { - // - // Copy the SD req - // - cpMacAddr(pSDContext->UserSDReq.TargetDeviceAddress, pServiceQueryContent->TargetDeviceAddress); - pSDContext->UserSDReq.ServiceReqTLVSize = pServiceQueryContent->ServiceReqTLVSize; - - PlatformMoveMemory(&pSDContext->UserSDReq.ServiceReqTLVList, - pServiceQueryContent->ServiceReqTLVList, - sizeof(P2P_SERVICE_REQ_TLV) * pServiceQueryContent->ServiceReqTLVSize); - - // Store target listen channel, although we will store the channel when - // ProbeRsp is received, the target listen channel - // can still be a hint for where to search for its ProbeRsp - pSDContext->Channel = pDevDesc->ListenChannel; - - // Set to Start Service Dicovery - pSDContext->bDoingServiceDiscovery = TRUE; - - pSDContext->bRequester = TRUE; - - pSDContext->DialogToken = IncreaseDialogToken(pP2PInfo->DialogToken); - - pSDContext->TransactionID = pServiceQueryContent->ServiceReqTLVList[0].TransactionID; - - pSDContext->FragmentID = 0; - pSDContext->ANQPQueryRspFieldToSendOffset = 0; - - cpMacAddr(pSDContext->TargetDeviceAddress, pServiceQueryContent->TargetDeviceAddress); - } - - // - // Do device discovery to find out when the target device is in Listen State. - // - P2PDeviceDiscovery(pP2PInfo, P2P_SCAN_FIND_PHASE_LOOP_TIMES); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PServiceDiscoveryReq()\n")); - -} - -VOID -P2PServiceDiscoveryRsp( - PP2P_INFO pP2PInfo, - PP2P_SD_RSP_CONTEXT pServiceRspContent - ) -{ - BOOLEAN bFragmentSDRsp = FALSE; - PP2P_SD_CONTEXT pSDContext = &pP2PInfo->SDContext; - - if(!P2P_ENABLED(pP2PInfo)) - { - return; - } - - if(!pSDContext->bDoingServiceDiscovery) - { - return; - } - - // - // Copy service info if we have enough space for the TLVs - // - if(pServiceRspContent->ServiceRspTLVSize > P2P_SD_MAX_SERVICES) - { - return; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PServiceDiscoveryRsp()\n")); - - // - // Construct Rsp TLV list from pP2PInfo->SDRspContext - // - p2p_Construct_AnqpQueryRspField(pP2PInfo, pServiceRspContent, pSDContext); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PServiceDiscoveryRsp(): ANQPQueryRsp Size: %u, Frag Threshold: %u\n", - pSDContext->ANQPQueryRspFieldToSendSize, - pP2PInfo->SDRspFragmtntThreshold)); - //RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ANQPQueryRsp constructed: ", - // pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf, - // pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize); - - // To send from offset 0 - pSDContext->ANQPQueryRspFieldToSendOffset = 0; - - if(pSDContext->ANQPQueryRspFieldToSendSize > pP2PInfo->SDRspFragmtntThreshold) - { - bFragmentSDRsp = TRUE; - - // - // Fill P2P_SD_CONTEXT for doing fragmentation - // We've already filled DialogToken, TransactionID and ServiceReqRecvd. - // - pSDContext->Status = pServiceRspContent->SDStatus; - pSDContext->bFragment = TRUE; - pSDContext->FragmentID = 0; // we are going to send ComebackRsp with FragmentID 0 - pSDContext->bDoingServiceDiscovery = TRUE; - pSDContext->bRequester = FALSE; - pSDContext->Channel = P2PGetChannel(pP2PInfo); - cpMacAddr(pSDContext->TargetDeviceAddress, pServiceRspContent->SourceDeviceAddress); - } - - p2p_Send_SDRsp(pP2PInfo, - pSDContext->TargetDeviceAddress, - pSDContext->DialogToken, - pSDContext->Status, - bFragmentSDRsp); - - if(bFragmentSDRsp) - { - pP2PInfo->SDWaitForComebackReqSlotCount = 0; - } - else - { - PlatformZeroMemory(&pP2PInfo->SDContext, sizeof(P2P_SD_CONTEXT)); - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pP2PInfo->pAdapter), - P2P_SERVICE_DISCOVERY_COMEBACK_TIMEOUT); - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PServiceDiscoveryRsp()\n")); - -} - -BOOLEAN -P2PConnect( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddress - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - - // For the case when we are connecting to a P2P Client - PP2P_DEVICE_DISCRIPTOR pGODeviceDesc = NULL; - PP2P_CLIENT_INFO_DISCRIPTOR pClientInfoDesc = NULL; - - if(!P2P_ENABLED(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PConnect(): P2P Disabled\n")); - return FALSE; - } - - // - // Find the descriptor in scan list (GO and Device are in this list) - // - pP2PDeviceDesc = P2PScanListFind(pP2PInfo->ScanList, pP2PInfo->ScanListSize, DeviceAddress, NULL, NULL); - - // - // Find the descriptor in client info list of each GO if it can't be found in the scan list - // - if(pP2PDeviceDesc == NULL) - { - if(!P2PScanListFindClient(pP2PInfo->ScanList, - pP2PInfo->ScanListSize, - DeviceAddress, - NULL, - &pGODeviceDesc, - &pClientInfoDesc)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PConnect(): can't find the device in either the scan list or the client info lists\n")); - return FALSE; - } - - // - // The target device is a P2P Client - // - pP2PDeviceDesc = pGODeviceDesc; - } - - // - // Before calling this function, the upper layer shall make sure that - // 1. Device Name is included in WPS IE - // 2. Device Password ID is included in WPS IE (Clause 3.1.2.4.1) - // - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PConnect()\n")); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Target Device: ", DeviceAddress); - - if(pP2PInfo->State > P2P_STATE_DEV_DISC_COMPLETE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PConnect(): State: %u\n", pP2PInfo->State)); - return FALSE; - } - - if(pP2PDeviceDesc == NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PConnect(): Target device entry not found\n")); - return FALSE; - } - - if(pP2PDeviceDesc->Role == P2P_DEVICE) - { - // Fill ConnectionContext - P2PResetCommonChannelArrivingProcess(pP2PInfo); - PlatformMoveMemory(&pP2PInfo->ConnectionContext.ConnectingDevice, - pP2PDeviceDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - pP2PInfo->ConnectionContext.Status = P2P_STATUS_SUCCESS; - pP2PInfo->ConnectionContext.DialogToken = IncreaseDialogToken(pP2PInfo->DialogToken); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = 36; - else - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = P2P_SCAN_FIND_PHASE_LOOP_TIMES; - - pP2PInfo->ConnectionContext.bGoingToBeGO = FALSE; - - pP2PInfo->bPreGroupFormation = TRUE; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(&pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 12); - else - P2PDeviceDiscovery(pP2PInfo, 36); - } - else - { - if(&pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 12); - else - P2PDeviceDiscovery(pP2PInfo, P2P_SCAN_FIND_PHASE_LOOP_TIMES); - } - - // GO Formation should be initiated in P2POnProbeReq() - } - else if(pP2PDeviceDesc->Role == P2P_GO) - {// note that in this case, the mac addr is the interface addr of the GO - if(pClientInfoDesc) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PConnect(): peer is a P2P Client\n")); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, - "GO DevAddr:\n", pP2PDeviceDesc->DeviceAddress); - - // - // Do discoverability request and then GO formation - // - P2PDeviceDiscoverabilityReq(pP2PInfo, DeviceAddress, TRUE); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PConnect(): peer is a GO\n")); - - // - // Now we shall have the dev addr and interface addr of the GO - // - // PF #2, Atheros device use different Dev and Int Addr. - // UI send DevAddr as the MacAddress and we shall not use - // it as the IntAddr. - /* - pP2PDeviceDesc = P2PScanListFind(pP2PInfo->ScanList, - pP2PInfo->ScanListSize, - NULL, - MacAddress, - NULL); // we use intended addr here - */ - - if(pP2PDeviceDesc && pP2PDeviceDesc->SsidLen) - { - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - BOOLEAN bScanInProgress = MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); - - P2PResetCommonChannelArrivingProcess(pP2PInfo); - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - P2PScanListCeaseScan(pP2PInfo); - P2PExtendedListenComplete(pP2PInfo); - } - else if(bScanInProgress) - {// Doing normal scan - P2PScanListCeaseScan(pP2PInfo); - } - - // Fill ConnectionContext - PlatformMoveMemory(&pP2PInfo->ConnectionContext.ConnectingDevice, - pP2PDeviceDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - pP2PInfo->ConnectionContext.Status = P2P_STATUS_SUCCESS; - pP2PInfo->ConnectionContext.DialogToken = 0; - pP2PInfo->ConnectionContext.FindPhaseLoopTimes = 0; - pP2PInfo->ConnectionContext.bGoingToBeGO = FALSE; - - pP2PInfo->bPreGroupFormation = FALSE; - - pP2PInfo->State = P2P_STATE_PRE_PROVISIONING; - PlatformCancelTimer(pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 100); - } - else - {// failed to scan the GO - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PConnect(): the target is not in the scan list\n")); - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - - pP2PInfo->State = P2P_STATE_INITIALIZED; - } - } - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("<=== P2PConnect() peer role is incorrect: %u\n", pP2PDeviceDesc->Role)); - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - return FALSE; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PConnect()\n")); - return TRUE; -} - -VOID -P2PGOStartAutomously( - IN PP2P_INFO pP2PInfo - ) -{ - P2P_PROFILE P2PProfile; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PGOStartAutomously()\n")); - - P2PProfile.OpChannel = pP2PInfo->OperatingChannel; - P2PDetermineGOSsid(pP2PInfo, P2PProfile.SsidBuf, &P2PProfile.SsidBufLen); - CopySsid(pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen, P2PProfile.SsidBuf, P2PProfile.SsidBufLen); - - P2PSetRole(pP2PInfo, P2P_GO); - P2PSetOperatingState(pP2PInfo); - pP2PInfo->bGOStartedAutonomously = TRUE; - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)P2P_STATUS_MAX; - - P2PIndicateStartApRequest(pP2PInfo, &P2PProfile); - - // - // For PF #1, if we do this, legacy STA without WPS can't associate with us - // (associated, but the STA keeps sending AssocReq) when we are an autonomous GO. - // This may not be necessary to notify the UI that we are an GO now. - // - /*P2PIndicateGOFormatedInfo(pP2PInfo, - P2P_STATUS_SUCCESS, - TRUE, - NULL); - */ - - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PGOStartAutomously()\n")); -} - -VOID -P2PDisconnect( - IN PP2P_INFO pP2PInfo - ) -{ - BOOLEAN bScanInProgress; - - if(!P2P_ENABLED(pP2PInfo)) - { - return; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PDisconnect()\n")); - - // - // Stop any existing scan - // - P2PResetCommonChannelArrivingProcess(pP2PInfo); - - bScanInProgress = MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PDisconnect(): State: %u, bScanInProgres: %u\n", - pP2PInfo->State, bScanInProgress)); - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - P2PExtendedListenComplete(pP2PInfo); - } - else if(bScanInProgress) - {// Doing normal scan - } - - // Reset disconnect slot count - pP2PInfo->P2PGONoClientSlotCount = 0; - pP2PInfo->P2PClientDisconnectedSlotCount = 0; - - pP2PInfo->bOppPS = FALSE; - PlatformZeroMemory(pP2PInfo->NoADescriptors, sizeof(P2P_NOA_DESCRIPTOR) * P2P_MAX_NUM_NOA_DESC); - - P2PSetRole(pP2PInfo, P2P_DEVICE); - - pP2PInfo->State = P2P_STATE_INITIALIZED; - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - P2PSvc_OnDisconnect(pP2PInfo->pP2PSvcInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PDisconnect()\n")); - -} - -// -// Description: -// Send the device discoverability request to ask the client in the group to be discoverable. -// The receiver for this packet is the GO which the client belongs to. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// [in] DeviceAddress - -// The target address of P2P client that this request sent to. -// [in] bConnect - -// TRUE if go to connect the target in the next step; otherwise, just send device discoverability request. -// Return: -// TRUE if this action is accepted. -// -BOOLEAN -P2PDeviceDiscoverabilityReq( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddress, - IN BOOLEAN bConnect - ) -{ - // - // This function is to send a DevDiscoverabilityReq to a P2P Client - // so that it will keep available for a duration of at least 100TU. - // - PP2P_CLIENT_INFO_DISCRIPTOR pClient = NULL; - PP2P_DEVICE_DISCRIPTOR pGO = NULL; - BOOLEAN bScanInProgress; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PDeviceDiscoverabilityReqStart()\n")); - - PlatformZeroMemory(&pP2PInfo->DeviceDiscoverabilityContext, sizeof(P2P_DEVICE_DISCOVERABILITY_CONTEXT)); - - // - // Find the client and its GO - // - if(!P2PScanListFindClient(pP2PInfo->ScanList, pP2PInfo->ScanListSize, - DeviceAddress, - NULL, - &pGO, &pClient)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PDeviceDiscoverabilityReqStart(): client not found\n")); - return FALSE; - } - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, - "P2PDeviceDiscoverabilityReqStart(): to send DeviceDiscoverabilityReq to the GO:\n", - pGO->DeviceAddress); - - // - // Record GO info for constructing P2P GroupID Attribute - // - cpMacAddr(pP2PInfo->DeviceDiscoverabilityContext.GODeviceAddr, pGO->DeviceAddress); - CopySsid(pP2PInfo->DeviceDiscoverabilityContext.GOSsidBuf, pP2PInfo->DeviceDiscoverabilityContext.GOSsidLen, - pGO->SsidBuf, pGO->SsidLen); - - // - // Check Capability - // - if(!(pClient->DeviceCapability & dcP2PClientDiscoverability)) - { - return FALSE; - } - - // - // Stop any existing scan - // - bScanInProgress = MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - {// Doing P2P Device Discovery - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - else if(pP2PInfo->bExtendedListening) - {// Doing extended listening - P2PScanListCeaseScan(pP2PInfo); - P2PExtendedListenComplete(pP2PInfo); - } - else if(bScanInProgress) - {// Doing normal scan - P2PScanListCeaseScan(pP2PInfo); - } - - // - // Fill the context - // - cpMacAddr(pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress, pClient->DeviceAddress); - cpMacAddr(pP2PInfo->DeviceDiscoverabilityContext.GoBssid, pGO->IntendedP2PInterfaceAddress); - pP2PInfo->DeviceDiscoverabilityContext.DialogToken = IncreaseDialogToken(pP2PInfo->DialogToken); - pP2PInfo->DeviceDiscoverabilityContext.Status = P2P_STATUS_SUCCESS; - pP2PInfo->DeviceDiscoverabilityContext.GOChannel = pGO->OperatingChannel; - pP2PInfo->DeviceDiscoverabilityContext.OriginalChannel = P2PGetChannel(pP2PInfo); - pP2PInfo->DeviceDiscoverabilityContext.OriginalState = pP2PInfo->State; - pP2PInfo->DeviceDiscoverabilityContext.bWaitingBeaconFromGO = TRUE; - pP2PInfo->DeviceDiscoverabilityContext.bGoConnect = bConnect; - - // - // Send Device Discoverability to the GO of the client when beacon is received - // - P2PSetChannel(pP2PInfo, pGO->OperatingChannel); - - pP2PInfo->State = P2P_STATE_DEVICE_DISCOVERABILITY_WAIT_BEACON; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEVICE_DISCOVERABILITY_BEACON_TIMEOUT); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PDeviceDiscoverabilityReqStart(): GO Ch: %u, \n", pP2PInfo->DeviceDiscoverabilityContext.GOChannel)); - return TRUE; -} - -BOOLEAN -P2PInvitePeerStart( - IN PP2P_INFO pP2PInfo, - IN PP2P_LIB_INVITATION_REQ_CONTEXT pLibInvittionContext - ) -{ - // - // At current stage, - // 1. IntAddr - // 2. SSID - // are valid only when bInvokePersistent is TRUE. - // - - BOOLEAN bRet = FALSE; - PP2P_DEVICE_DISCRIPTOR pDevDesc = NULL; - - // Win8: NdisTest -------------------------------------------------------------------------------- - // + If the peer does not exist, still do the invitation procedure as device - PRT_GEN_TEMP_BUFFER pRtBuffer = NULL; - PP2P_DEVICE_DISCRIPTOR pPseudoDevicePeer = NULL; - - pRtBuffer = GetGenTempBuffer(GetDefaultAdapter(pP2PInfo->pAdapter), sizeof(P2P_DEVICE_DISCRIPTOR)); - pPseudoDevicePeer = (PP2P_DEVICE_DISCRIPTOR) pRtBuffer->Buffer.Ptr; - //---------------------------------------------------------------------------------------------- - - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> P2PInvitePeerStart():() port number %d state %d\n", pP2PInfo->pAdapter->pNdis62Common->PortNumber, pP2PInfo->State)); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "DevAddr:\n", pLibInvittionContext->TargetDeviceAddress); - RT_TRACE(COMP_P2P, DBG_LOUD, ("bPersistent: %u\n", pLibInvittionContext->bPersistent)); - - // - // Check state - // - if(!P2P_ENABLED(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PInvitePeerStart(): P2P not enabled\n")); - goto exit_P2PInvitePeerStart; - } - - // - // Clear invitation context - // - PlatformZeroMemory(&(pP2PInfo->InvitationContext), sizeof(P2P_INVITATION_CONTEXT)); - - // - // Check self capability - // - if(!(pP2PInfo->DeviceCapability & dcP2PInvitationProcedure)) - {// this device does not support invitation procedure - RT_TRACE(COMP_P2P, DBG_LOUD, ("error: my DeviceCapability is %u\n", pP2PInfo->DeviceCapability)); - goto exit_P2PInvitePeerStart; - } - - // - // Get the target descriptor - // - pDevDesc = P2PScanListFind(pP2PInfo->ScanList, pP2PInfo->ScanListSize, pLibInvittionContext->TargetDeviceAddress, NULL, NULL); - if(pDevDesc == NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Peer not found in the scan list\n")); - - // Win8: For passing NdisTest: WFD_Group_ext-Invitation --------------------- - PlatformZeroMemory(pPseudoDevicePeer, sizeof(P2P_DEVICE_DISCRIPTOR)); - pDevDesc = pPseudoDevicePeer; - pDevDesc->Role = P2P_DEVICE; - pDevDesc->ListenChannel = P2P_DEFAULT_LISTEN_CHANNEL; - cpMacAddr(pDevDesc->DeviceAddress, pLibInvittionContext->TargetDeviceAddress); - // ------------------------------------------------------------------- - - //goto exit_P2PInvitePeerStart; - } - - -// Win8: Mark for passing the NdisTest: WFD_Group_ext-Invitation ------------------------------------------ -#if 0 - // - // Check peer device capability - // - if(!(pDevDesc->DeviceCapability & dcP2PInvitationProcedure)) - {// peer device does not support invitation procedure - RT_TRACE(COMP_P2P, DBG_LOUD, ("error: peer DeviceCapability is %u, does not support invitation\n", - pDevDesc->DeviceCapability)); - goto exit_P2PInvitePeerStart; - } -#endif -// ------------------------------------------------------------------------------------------------ - - - // - // If to invoke persistent, check peer group capability - // - if(pLibInvittionContext->bPersistent) - { - /* group cap is valid only when the device is a GO - if(!(pDevDesc->GroupCapability & gcPersistentP2PGroup)) - {// peer device does not support persistent group - RT_TRACE(COMP_P2P, DBG_LOUD, ("error: peer GroupCapability is %u, does not support persistent\n", - pDevDesc->DeviceCapability)); - goto exit_P2PInvitePeerStart; - } - */ - } - - // - // Fill invitation context - // - P2PResetCommonChannelArrivingProcess(pP2PInfo); - pP2PInfo->InvitationContext.InvitorRole= pLibInvittionContext->InvitorRole; - pP2PInfo->InvitationContext.bPersistentInvitation = pLibInvittionContext->bPersistent; - pP2PInfo->InvitationContext.DialogToken = IncreaseDialogToken(pP2PInfo->DialogToken); - PlatformMoveMemory(&pP2PInfo->InvitationContext.InvitedDevice, pDevDesc, sizeof(P2P_DEVICE_DISCRIPTOR)); - pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe = FALSE; - pP2PInfo->InvitationContext.bInvitor = TRUE; - pP2PInfo->InvitationContext.OpChannel = pLibInvittionContext->OpChannel; - RT_TRACE(COMP_P2P, DBG_LOUD, ("DialogToken: %u, state: %u\n", - pP2PInfo->InvitationContext.DialogToken, pP2PInfo->State)); - - // - // Customization for different peer roles - // - RT_TRACE(COMP_P2P, DBG_LOUD, ("Peer Role: %u, My role: %u\n", pDevDesc->Role, pP2PInfo->Role)); - if(pDevDesc->Role == P2P_DEVICE) - {// need to send InvitationReq when common chnl arrive - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set bToSendInvitationReqOnProbe\n")); - pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe = TRUE; - } - else if(pDevDesc->Role == P2P_CLIENT) - {// need to make sure that the client can receive our InvitationReq - pP2PInfo->InvitationContext.bToUseDeviceDiscoverability = TRUE; - } - else if(pDevDesc->Role == P2P_GO) - {// need to make sure that the GO is awake for receiving our InvitationReq - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("error: unknown peer role: %u\n", pDevDesc->Role)); - goto exit_P2PInvitePeerStart; - } - - // - // Fill Group ID (Device Addr and SSID) and Group BSSID - // - cpMacAddr(pP2PInfo->InvitationContext.GroupBssid, pLibInvittionContext->GroupBssid); - cpMacAddr(pP2PInfo->InvitationContext.GODeviceAddress, pLibInvittionContext->GroupDeviceAddress); - CopySsid(pP2PInfo->InvitationContext.SsidBuf, pP2PInfo->InvitationContext.SsidLen, - pLibInvittionContext->GroupSsidBuf, pLibInvittionContext->GroupSsidLen); - - // - // Decide when to send the InvitationReq - // - if(pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe) - {// in this case, we send the req when ProbeReq from the peer is recvd - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 6); - else - P2PDeviceDiscovery(pP2PInfo, 36); - } - else - { - if(pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 6); - else - P2PDeviceDiscovery(pP2PInfo, P2P_SCAN_FIND_PHASE_LOOP_TIMES); - } - - bRet = TRUE; - } - else - {// we send the req immediately - pP2PInfo->State = P2P_STATE_INVITATION_REQ_SEND; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - -exit_P2PInvitePeerStart: - - ReturnGenTempBuffer(GetDefaultAdapter(pP2PInfo->pAdapter), pRtBuffer); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<=== P2PInvitePeerStart()\n")); - return bRet; -} - -VOID -P2PInvitePeerComplete( - IN PP2P_INFO pP2PInfo - ) -{ - if(P2P_ACTING_AS_GO(pP2PInfo)) - {// GO - // TODO: - } - else if(P2P_ACTING_AS_CLIENT(pP2PInfo)) - {// P2P Client - SendNullFunctionData(pP2PInfo->pAdapter, pP2PInfo->pAdapter->MgntInfo.Bssid, FALSE); - } - else - {// P2P Device - - } -} - -//====================================================================== -// Customized Indications -//====================================================================== - -VOID -P2PIndicateOnProvisionDiscoveryRsp( - IN PP2P_INFO pP2PInfo, - IN u2Byte ConfigMethod, - IN pu1Byte DeviceAddress - ) -{ - pu1Byte pBuf = NULL; - u4Byte BufSize = sizeof(u2Byte) + 6; - PlatformAllocateMemory(pP2PInfo->pAdapter, (void**)&pBuf, BufSize); - if(pBuf == NULL) return; - PlatformMoveMemory(pBuf, &ConfigMethod, sizeof(u2Byte)); - PlatformMoveMemory(pBuf + sizeof(u2Byte), DeviceAddress, 6); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PIndicateOnProvisionDiscoveryRsp", pBuf, BufSize); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_ON_PROVISION_DISC_RSP, - RT_CUSTOM_INDI_TARGET_IHV, - pBuf, - sizeof(u2Byte) + 6); - PlatformFreeMemory(pBuf, BufSize); -} - -VOID -P2PIndicateOnInvitationReq( - IN PP2P_INFO pP2PInfo, - IN PP2P_LIB_INVITATION_REQ_CONTEXT pLibInvitationReq - ) -{ - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_ON_INVITATION_REQ, - RT_CUSTOM_INDI_TARGET_IHV, - pLibInvitationReq, - sizeof(P2P_LIB_INVITATION_REQ_CONTEXT)); -} - -VOID -P2PIndicateOnInvitationRsp( - IN PP2P_INFO pP2PInfo, - IN P2P_STATUS_CODE Status, - IN BOOLEAN bPersistent, - IN u1Byte OpChannel, - IN P2P_ROLE Role, - IN u1Byte GroupSsidLen, - IN pu1Byte GroupSsidBuf - ) -{ - P2P_LIB_INVITATION_RSP_CONTEXT LibInvitationRsp; - LibInvitationRsp.Role= Role; - LibInvitationRsp.bPersistent = bPersistent; - LibInvitationRsp.OpChannel = OpChannel; - LibInvitationRsp.Status = Status; - CopySsid(LibInvitationRsp.GroupSsidBuf, LibInvitationRsp.GroupSsidLen, GroupSsidBuf, GroupSsidLen); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_ON_INVITATION_RSP, - RT_CUSTOM_INDI_TARGET_IHV, - &LibInvitationRsp, - sizeof(LibInvitationRsp)); -} - -VOID -P2PIndicateOnProvisionDiscoveryReq( - IN PP2P_INFO pP2PInfo, - IN u2Byte ConfigMethod, - IN pu1Byte DeviceAddress, - IN PP2P_WPS_ATTRIBUTES pWpsAttributes - ) -{ - pu1Byte pBuf = NULL; - u4Byte BufSize = sizeof(u2Byte) + 6 + sizeof(P2P_WPS_ATTRIBUTES); - PlatformAllocateMemory(pP2PInfo->pAdapter, (void**)&pBuf, BufSize); - if(pBuf == NULL) return; - PlatformMoveMemory(pBuf, &ConfigMethod, sizeof(u2Byte)); - PlatformMoveMemory(pBuf + sizeof(u2Byte), DeviceAddress, 6); - PlatformMoveMemory(pBuf + sizeof(u2Byte) + 6, pWpsAttributes, sizeof(P2P_WPS_ATTRIBUTES)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PIndicateOnProvisionDiscoveryReq", pBuf, BufSize); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_ON_PROVISION_DISC_REQ, - RT_CUSTOM_INDI_TARGET_IHV, - pBuf, - BufSize); - PlatformFreeMemory(pBuf, BufSize); -} - -VOID -P2PIndicateStartApRequest( - IN PP2P_INFO pP2PInfo, - IN PP2P_PROFILE pP2PProfile - ) -{ - P2P_PROFILE P2PProfile; - BOOLEAN bDefPortConnected = P2PDefaultPortConnected(pP2PInfo); - BOOLEAN bCrossConnectionEnabled = pP2PInfo->GroupCapability & gcCrossConnection; - BOOLEAN bToEnableICS = FALSE; - - P2PProfile.OpChannel = pP2PProfile->OpChannel; - P2PProfile.SsidBufLen = pP2PProfile->SsidBufLen; - PlatformMoveMemory(P2PProfile.SsidBuf, pP2PProfile->SsidBuf, pP2PProfile->SsidBufLen); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PIndicateStartApRequest(): Indicate NDIS_STATUS_P2P_START_AP_REQ, OpChannel: %u\n", - pP2PProfile->OpChannel)); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "SSID:\n", - pP2PProfile->SsidBuf, pP2PProfile->SsidBufLen); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PIndicateStartApRequest(): bDefPortConnected: %u, bCrossConnectionEnabled: %u\n", - bDefPortConnected, bCrossConnectionEnabled)); - - if(bDefPortConnected && bCrossConnectionEnabled) - { - bToEnableICS = TRUE; - } - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_ENABLE_ICS, - RT_CUSTOM_INDI_TARGET_IHV, - &bToEnableICS, - sizeof(BOOLEAN)); - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_START_AP_REQ, - RT_CUSTOM_INDI_TARGET_IHV, - &P2PProfile, - sizeof(P2P_PROFILE)); - -} - -VOID -P2PIndicateStopApRequest( - IN PP2P_INFO pP2PInfo - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateStopApRequest()\n")); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_STOP_AP_REQ, - RT_CUSTOM_INDI_TARGET_IHV, - NULL, - 0); -} - -VOID -P2PIndicateDisconnectClientRequest( - IN PP2P_INFO pP2PInfo - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateDisconnectClientRequest()\n")); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_DISCONNECT_CLIENT_REQ, - RT_CUSTOM_INDI_TARGET_IHV, - NULL, - 0); -} - -VOID -P2PIndicateGOFormatedInfo( - IN PP2P_INFO pP2PInfo, - IN u1Byte Status, - IN BOOLEAN bGoingToBeGO, - IN PP2P_DEVICE_DISCRIPTOR pDevDesc - ) -{ -// P2P_GO_FORMATED_INFO P2PGOFormatedInfo; - PP2P_GO_FORMATED_INFO pP2PGOFormatedInfo; - PRT_GEN_TEMP_BUFFER pGenBufP2PGOFormatedInfo; - PADAPTER Adapter = pP2PInfo->pAdapter; - - pGenBufP2PGOFormatedInfo = GetGenTempBuffer (Adapter, sizeof(P2P_GO_FORMATED_INFO)); - pP2PGOFormatedInfo = (P2P_GO_FORMATED_INFO *)pGenBufP2PGOFormatedInfo->Buffer.Ptr; - - pP2PGOFormatedInfo->p2pRole = (Status != P2P_STATUS_SUCCESS) ? (P2P_DEVICE) : ((bGoingToBeGO) ? (P2P_GO) : (P2P_CLIENT)); - if(pDevDesc) - { - PlatformMoveMemory(&(pP2PGOFormatedInfo->targetDesc), - pDevDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); - pP2PGOFormatedInfo->targetDesc.Status = Status; - - if(P2P_GO == pP2PGOFormatedInfo->p2pRole) - { - pP2PGOFormatedInfo->targetDesc.SsidLen = pP2PInfo->SSIDLen; - PlatformMoveMemory(pP2PGOFormatedInfo->targetDesc.SsidBuf, pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen); - pP2PGOFormatedInfo->targetDesc.OperatingChannel = pP2PInfo->OperatingChannel; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateGOFormatedInfo(): Status: %u, Role: %u\n", - Status, - pP2PGOFormatedInfo->p2pRole)); - //P2PDumpScanList(pDevDesc, 1); - } - else - { - PlatformZeroMemory(&(pP2PGOFormatedInfo->targetDesc), sizeof(P2P_DEVICE_DISCRIPTOR)); - } - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_GO_FORMATED, - RT_CUSTOM_INDI_TARGET_IHV, - pP2PGOFormatedInfo, - sizeof(P2P_GO_FORMATED_INFO)); - - ReturnGenTempBuffer (Adapter, pGenBufP2PGOFormatedInfo); -} - -VOID -P2PIndicateCurrentState( - IN PP2P_INFO pP2PInfo, - IN P2P_STATE CurrentState - ) -{ - u8Byte CurrentTime = PlatformGetCurrentTime(); - BOOLEAN bToIndicate = FALSE; - u8Byte TimeDiff = CurrentTime - pP2PInfo->PreviouslyIndicateStateTime; - - if(pP2PInfo->PreviouslyIndicatedState != CurrentState) // to prevent redundent indication - { - bToIndicate = TRUE; - } - else if(TimeDiff > 4000000) // 4sec - { - bToIndicate = TRUE; - } - - if(bToIndicate) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateCurrentState(): State: %u, Role: %u, nScanList: %u, nScanList4Q: %u, IntfIndex: %u portnumber %d\n", - CurrentState, - pP2PInfo->Role, - pP2PInfo->ScanListSize, - pP2PInfo->ScanList4QuerySize, - pP2PInfo->pAdapter->interfaceIndex, - pP2PInfo->pAdapter->pNdis62Common->PortNumber)); - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_CURRENT_STATE, - RT_CUSTOM_INDI_TARGET_IHV, - &CurrentState, - sizeof(P2P_STATE)); - pP2PInfo->PreviouslyIndicatedState = CurrentState; - pP2PInfo->PreviouslyIndicateStateTime = PlatformGetCurrentTime(); - } -} - -VOID -P2PIndicateCurrentRole( - IN PP2P_INFO pP2PInfo, - IN P2P_ROLE CurrentRole - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateCurrentRole(): Role: %u state %d\n", pP2PInfo->Role, pP2PInfo->State)); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_CURRENT_ROLE, - RT_CUSTOM_INDI_TARGET_IHV, - &CurrentRole, - sizeof(P2P_ROLE)); -} - -VOID -P2PIndicateCurrentDevPasswdId( - IN PP2P_INFO pP2PInfo, - IN u2Byte CurrentDevPasswdId - ) -{ - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateCurrentDevPasswdId(): DevPasswdId: %u\n", CurrentDevPasswdId)); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_CURRENT_DEV_PASSWD_ID, - RT_CUSTOM_INDI_TARGET_IHV, - &CurrentDevPasswdId, - sizeof(u2Byte)); -} - -// -// Description: -// Indicate that one device wants to do GO formation when we are the P2P client. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// [in] pDevDesc - -// The descriptor info for this request of device. -// -VOID -P2PIndicateDeviceReqClientGoFormation( - IN PP2P_INFO pP2PInfo, - IN PP2P_DEVICE_DISCRIPTOR pDevDesc - ) -{ - if(pDevDesc == NULL) - return; - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2PIndicateDeviceReqClientGoFormation(): ", pDevDesc->DeviceAddress); - //P2PDumpScanList(pDevDesc, 1); - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_DEV_REQ_CLIENT_GO_FORMATION, - RT_CUSTOM_INDI_TARGET_IHV, - pDevDesc, - sizeof(P2P_DEVICE_DISCRIPTOR)); -} - -VOID -P2PIndicateClientConnected( - IN PP2P_INFO pP2PInfo, - IN pu1Byte ClientInterfaceAddr - ) -{ - if(ClientInterfaceAddr == NULL) - return; - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2PIndicateClientConnected(): ", ClientInterfaceAddr); - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_CLIENT_CONNECTED, - RT_CUSTOM_INDI_TARGET_IHV, - ClientInterfaceAddr, - 6); -} - -VOID -P2PIndicateClientDisconnected( - IN PP2P_INFO pP2PInfo, - IN pu1Byte ClientInterfaceAddr - ) -{ - if(ClientInterfaceAddr == NULL) - return; - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2PIndicateClientDisconnected(): ", ClientInterfaceAddr); - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_CLIENT_DISCONNECTED, - RT_CUSTOM_INDI_TARGET_IHV, - ClientInterfaceAddr, - 6); -} - -VOID -P2PIndicateDeviceDiscoveryComplete( - IN PP2P_INFO pP2PInfo - ) -{ - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateDeviceDiscoveryComplete()\n")); - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_DEV_DISC_COMPLETE, - RT_CUSTOM_INDI_TARGET_IHV, - NULL, - 0); -} - -VOID -P2PIndicateOnSDRsp( - IN PP2P_INFO pP2PInfo, - IN PP2P_SD_CONTEXT pSDContext - ) -{ - u1Byte i = 0; - u4Byte BufSize = FIELD_OFFSET(P2P_SD_RSP_CONTEXT, ServiceRspTLVList) + - pSDContext->ServiceRspRecvdSize * sizeof(P2P_SERVICE_RSP_TLV); - PP2P_SD_RSP_CONTEXT pSDRspContext = NULL; - - PlatformAllocateMemory(pP2PInfo->pAdapter, (void**)&pSDRspContext, BufSize); - - if(!pSDRspContext) return; - if(!pSDContext->bRequester) return; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateOnSDRsp: Recv Service Rsp TLVs:\n")); - - // Fill the SDRspContext - pSDRspContext->SDStatus= pSDContext->Status; - cpMacAddr(pSDRspContext->SourceDeviceAddress, pSDContext->TargetDeviceAddress); - pSDRspContext->ServiceUpdateIndicator = pSDContext->ServiceUpdateIndicator; - pSDRspContext->ServiceRspTLVSize = pSDContext->ServiceRspRecvdSize; - for(i = 0; i < pSDContext->ServiceRspRecvdSize; i++) - {// copy each Rsp TLV - RT_TRACE(COMP_P2P, DBG_LOUD, ("TLV %u, Protocol ID: %u\n", - i, pSDContext->ServiceRspRecvd[i].ServiceDesc.ServiceType)); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "Recv Service Rsp TLV:", - pSDContext->ServiceRspRecvd[i].ServiceDesc.Buffer, - pSDContext->ServiceRspRecvd[i].ServiceDesc.BufferLength); - - PlatformMoveMemory(&(pSDRspContext->ServiceRspTLVList[i]), - &(pSDContext->ServiceRspRecvd[i]), - sizeof(P2P_SERVICE_RSP_TLV)); - } - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_SD_RSP, - RT_CUSTOM_INDI_TARGET_IHV, - pSDRspContext, - BufSize); - - PlatformFreeMemory(pSDRspContext, BufSize); -} - -VOID -P2PIndicateOnSDReq( - IN PP2P_INFO pP2PInfo, - IN PP2P_SD_CONTEXT pSDContext - ) -{ - u1Byte i = 0; - u4Byte BufSize = FIELD_OFFSET(P2P_SD_REQ_CONTEXT, ServiceReqTLVList) + - pSDContext->ServiceReqRecvdSize * sizeof(P2P_SERVICE_REQ_TLV); - PP2P_SD_REQ_CONTEXT pSDReqContext = NULL; - - if(pSDContext->bRequester) return; - - PlatformAllocateMemory(pP2PInfo->pAdapter, (void**)&pSDReqContext, BufSize); - - if(!pSDReqContext) return; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateOnSDReq()\n")); - - // Fill the SDReqContext - cpMacAddr(pSDReqContext->TargetDeviceAddress, pSDContext->TargetDeviceAddress); - pSDReqContext->ServiceReqTLVSize = pSDContext->ServiceReqRecvdSize; - for(i = 0; i < pSDContext->ServiceReqRecvdSize; i++) - {// copy each Rsp TLV - RT_TRACE(COMP_P2P, DBG_LOUD, ("TLV %u, Protocol ID: %u\n", - i, pSDContext->ServiceRspRecvd[i].ServiceDesc.ServiceType)); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "Recv Service Req TLV:", - pSDContext->ServiceRspRecvd[i].ServiceDesc.Buffer, - pSDContext->ServiceRspRecvd[i].ServiceDesc.BufferLength); - - PlatformMoveMemory(&(pSDReqContext->ServiceReqTLVList[i]), - &(pSDContext->ServiceReqRecvd[i]), - sizeof(P2P_SERVICE_REQ_TLV)); - } - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_SD_REQ, - RT_CUSTOM_INDI_TARGET_IHV, - pSDReqContext, - BufSize); - - PlatformFreeMemory(pSDReqContext, BufSize); -} - -VOID -P2PIndicateScanList( - IN PP2P_INFO pP2PInfo - ) -{ - u4Byte BufSize = 0; - pu1Byte pBuf = NULL; - u4Byte idxScanList = 0; - BOOLEAN bAlloc = TRUE; - - do - { - //p2p_DevList_Translate(&pP2PInfo->devList, P2P_MAX_SCAN_LIST, &pP2PInfo->ScanList4QuerySize, pP2PInfo->ScanList4Query); - - if(0 == pP2PInfo->ScanList4QuerySize) - { - break; - } - - if(0x00000000 == pP2PInfo->P2PVersion) - {// v0 - PP2P_DEVICE_DESCRIPTOR_V0 pDesc = NULL; - - BufSize = sizeof(P2P_DEVICE_DESCRIPTOR_V0) * pP2PInfo->ScanList4QuerySize; - if(0 == BufSize) break; - PlatformAllocateMemory(pP2PInfo->pAdapter, &pBuf, BufSize); - if(NULL == pBuf) break; - - pDesc = (PP2P_DEVICE_DESCRIPTOR_V0)pBuf; - - for(idxScanList = 0; idxScanList < pP2PInfo->ScanList4QuerySize; idxScanList++) - { - memcpy(pDesc + idxScanList, &pP2PInfo->ScanList4Query[idxScanList], sizeof(P2P_DEVICE_DESCRIPTOR_V0)); - } - } - else if(0x00000001 == pP2PInfo->P2PVersion) - {// v1 - PP2P_DEVICE_DESCRIPTOR_V1 pDesc = NULL; - - BufSize = sizeof(P2P_DEVICE_DESCRIPTOR_V1) * pP2PInfo->ScanList4QuerySize; - if(0 == BufSize) break; - PlatformAllocateMemory(pP2PInfo->pAdapter, &pBuf, BufSize); - if(NULL == pBuf) break; - - pDesc = (PP2P_DEVICE_DESCRIPTOR_V1)pBuf; - - for(idxScanList = 0; idxScanList < pP2PInfo->ScanList4QuerySize; idxScanList++) - { - memcpy(pDesc + idxScanList, &pP2PInfo->ScanList4Query[idxScanList], sizeof(P2P_DEVICE_DESCRIPTOR_V1)); - } - } - else - {// v2/v3 - pBuf = (pu1Byte)pP2PInfo->ScanList4Query; - BufSize = sizeof(P2P_DEVICE_DESCRIPTOR_V2) * pP2PInfo->ScanList4QuerySize; - bAlloc = FALSE; - } - }while(FALSE); - - if(pBuf || (NULL == pBuf && 0 == BufSize)) - { - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_SCAN_LIST, - RT_CUSTOM_INDI_TARGET_IHV, - pBuf, BufSize); - - if(bAlloc && pBuf) PlatformFreeMemory(pBuf, BufSize); - } -} - -VOID -P2PIndicateChangingApChnl( - IN PP2P_INFO pP2PInfo, - IN u1Byte oldChnl, - IN u1Byte newChnl - ) -{ - u1Byte buf[2]; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PIndicateChangingApChnl(): %u -> %u\n", oldChnl, newChnl)); - - buf[0] = oldChnl; - buf[1] = newChnl; - - PlatformIndicateCustomStatus( - pP2PInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_CHANGING_AP_CHANNEL, - RT_CUSTOM_INDI_TARGET_IHV, - buf, - sizeof(buf)); -} - -//====================================================================== -// P2P Managmement -//====================================================================== -VOID -P2PMgntTimerCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - BOOLEAN bToFireTimer = TRUE; - PADAPTER pLoopAdapter = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - u4Byte BoostInitGainValue = 0; - - BOOLEAN bScanInProgress; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - - VOID *customScanInfo = GET_CUSTOM_SCAN_INFO(pAdapter); - VOID *req = NULL; - FRAME_BUF *probeReqBuf = NULL; - - pP2PInfo->LastTimerFired = PlatformGetCurrentTime(); - - if(!P2P_ENABLED(pP2PInfo)) - { - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - return; - } - - if(RT_DRIVER_STOP(pAdapter)) - { - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - return; - } - - PlatformAcquireSpinLock(pAdapter, RT_P2P_SPIN_LOCK); - if(P2P_GET_REF_CNT(pP2PInfo) > 0) - { - PlatformReleaseSpinLock(pAdapter, RT_P2P_SPIN_LOCK); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("The P2P command is setting in progress (RefCnt = %d), skip timer and set later!\n", pP2PInfo->RefCnt)); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEFAULT_MGNT_PERIOD); - goto exit_P2PMgntTimerCallback; - } - PlatformReleaseSpinLock(pAdapter, RT_P2P_SPIN_LOCK); - - - // Let the default port can connect to AP ----------------------------------------------------------- - { - PADAPTER pClientPort = GetFirstClientPort(pP2PInfo->pAdapter); - PADAPTER pDefaultPort = GetDefaultAdapter(pP2PInfo->pAdapter); - - if(pClientPort == NULL) pClientPort = pDefaultPort; - - if(MgntIsLinkInProgress(&pDefaultPort->MgntInfo) || MgntIsLinkInProgress(&pClientPort->MgntInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("MgntIsLinkInProgress(): default/client port link in progress\n")); - - return; - } - } - // ------------------------------------------------------------------------------------------- - - - // - // We assume that the optional Privision Discovery has already been done by the WPS module in the upper layer. - // - - // - // Indicate P2P State to IHVSvc - // - if(P2P_ADAPTER_RTK_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - P2PIndicateCurrentState(pP2PInfo, pP2PInfo->State); - - // - // Force scan list indication - // - pP2PInfo->ForceScanListIndicateSlotCount++; - if(pP2PInfo->ForceScanListIndicateSlotCount == P2P_FORCE_SCAN_LIST_INDICATE_PERIOD_SC) - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Forced scan list indication\n")); - pP2PInfo->ForceScanListIndicateSlotCount = 0; - PlatformIndicateCustomStatus( - pAdapter, - RT_CUSTOM_EVENT_P2P_INDICATE_SCAN_LIST, - RT_CUSTOM_INDI_TARGET_IHV, - pP2PInfo->ScanList4Query, - (sizeof(P2P_DEVICE_DISCRIPTOR) * pP2PInfo->ScanList4QuerySize)); - } - } - - // - // Notify UI the current device password ID so that it can determine whether provisioning info is available - // Note that UI determines which peer config method we shall use for doing WPS - //// TODO: this may be too regular, but note that UI may counting on this indication for determine provision info timeout - //P2PIndicateCurrentDevPasswdId(pP2PInfo, pP2PInfo->WpsDevPasswdId); - - if(pP2PInfo->State == P2P_STATE_INITIALIZED) - { - pP2PInfo->ExtListenTimingPeriodSlotCount++; - } - else - {// start counting in only initialized state - pP2PInfo->ExtListenTimingPeriodSlotCount = 0; - } - - if(pP2PInfo->bReinitiateConnection) - { - if(PlatformGetCurrentTime() - pP2PInfo->TimeStartWaitingForReinitiate > 120000000) - {// 120 sec timeout - pP2PInfo->bReinitiateConnection = FALSE; - pP2PInfo->TimeStartWaitingForReinitiate = 0; - } - } - - // Timeout mechanism for Comeback Request - if(pP2PInfo->SDContext.bDoingServiceDiscovery && pP2PInfo->SDContext.bFragment && !pP2PInfo->SDContext.bRequester) - { - pP2PInfo->SDWaitForComebackReqSlotCount++; - if(pP2PInfo->SDWaitForComebackReqSlotCount == P2P_SD_COMEBACK_REQ_TIMEOUT_SC) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): timeout waiting for ComebackReq\n")); - PlatformZeroMemory(&pP2PInfo->SDContext, sizeof(P2P_SD_CONTEXT)); - pP2PInfo->SDWaitForComebackReqSlotCount = 0; - } - } - - /*RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): dc: %u, gc: %u, ExtSlot: %u, bExtListen: %u, bPreGroupFormation: %u\n", - pP2PInfo->DeviceCapability, - pP2PInfo->GroupCapability, - pP2PInfo->ExtListenTimingPeriodSlotCount, - pP2PInfo->bExtendedListening, - pP2PInfo->bPreGroupFormation)); - */ - - // Add "pHalData->SwChnlInProgress" to protect the 92D IQK process. - if(pHalData->SwChnlInProgress) - { - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_SWITCH_CHNL_PERIOD); - goto exit_P2PMgntTimerCallback; - } - - bScanInProgress = MgntScanInProgress(pMgntInfo); - - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): state: %u\n", pP2PInfo->State)); - - if(bScanInProgress) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): scan in progress\n")); - - if(pP2PInfo->State == P2P_STATE_GO_NEGO_REQ_SEND || - pP2PInfo->State == P2P_STATE_PROVISION_DISCOVERY_REQ_SEND || - pP2PInfo->State == P2P_STATE_INVITATION_REQ_SEND || - pP2PInfo->State == P2P_STATE_SERVICE_DISCOVERY_REQ_SEND) - { - // - // For these state, we shall enter them ASAP so that when the packet is sent, - // the peer is still on the listen channel. - // However, we can't arbitrarily change the timer because that will make extended listen - // timing incorrect. - // - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_SWITCH_CHNL_PERIOD); - goto exit_P2PMgntTimerCallback; - } - else - { - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_SCAN_PERIOD_SCAN); - goto exit_P2PMgntTimerCallback; - } - - - } - else - {// this is by referencing InactivePsTimerCallback() - PADAPTER pDefaultAdapter = GetDefaultAdapter(pP2PInfo->pAdapter); - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pDefaultMgntInfo); - - // - // If processing, we may have issued a customized scan and InactivePsWorkItemCallback - // is still processing. In this case, bScanInProgress is false (but we expect it to be true). - // If we let it go down, the P2P state machine will go to next state immediately, - // and the action should be taken in the previous state will not be done. - // - if (pPSC->bSwRfProcessing) - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback():bSwRfProcessing\n")); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_SCAN_PERIOD_SCAN); - goto exit_P2PMgntTimerCallback; - } - } - - switch(pP2PInfo->State) - { - case P2P_STATE_INITIALIZED: - { - u8Byte curTime = PlatformGetCurrentTime(); - - if(!P2PIsN24GSupported(pP2PInfo)) - {// don't do extended listening if 2.4G is not supported - break; - } - - if(pP2PInfo->bExtendedListening) - { - P2PExtendedListenComplete(pP2PInfo); - } - - - if(pP2PInfo->ExtListenTimingPeriodSlotCount >= (u4Byte)P2P_EXT_LISTEN_TIMING_PERIOD_SC - && MultiportGetLastConnectionActionTime(pAdapter) + P2P_BLOCK_NORMAL_SCAN_PERIOD <= curTime - ) - {// enter Listen State for pP2PInfo->ExtListenTimingDuration - pP2PInfo->ExtListenTimingPeriodSlotCount = 1; // this slot also be the first slot - - if(pP2PInfo->ExtListenTimingDuration > 0) - { - P2PExtendedListenStart(pP2PInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): Wait for ExtListen: P2P_EXT_LISTEN_TIMING_PERIOD_SC = %d\n", - P2P_EXT_LISTEN_TIMING_PERIOD_SC)); - - // - // Next time we get in P2P_STATE_INITIALIZED is when Extended Listen complete. - // - } - - break; - } - } - break; - - //====================================================================== - // Device Discovery - //====================================================================== - case P2P_STATE_DEV_DISC_START: - { - if(!P2PIsN24GSupported(pP2PInfo)) - {// don't do find and listen phase on 5G - pP2PInfo->State = P2P_STATE_SCAN; - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - break; - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probeReqBuf, pP2PInfo); - P2PConstructScanList(pP2PInfo, req, P2P_LOWEST_RATE, probeReqBuf); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "dev disc start"); - - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - break; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Start Device Discovery: loop times: %u\n", - pP2PInfo->ConnectionContext.FindPhaseLoopTimes)); - - pP2PInfo->State = P2P_STATE_SCAN; // enter Scan Phase - - if(pP2PInfo->bPreGroupFormation|| - pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe || - pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery || - pP2PInfo->SDContext.bDoingServiceDiscovery || - pP2PInfo->ConnectionContext.FindPhaseLoopTimes == 0xFC) - {// this is a discovery issued by invitation procedure => - //don't need the scan phase, enter listen state directly - pP2PInfo->State = P2P_STATE_SEARCH; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bDiscoverForSpecificChannels) - { - P2PDeviceDiscoverForSpecificChannels( - pP2PInfo, - pP2PInfo->DiscoverForSpecificChannels, - pP2PInfo->uNumberOfDiscoverForSpecificChannels - ); - - pP2PInfo->State = P2P_STATE_SPECIAL_PEER_SEARCH; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 50); - bToFireTimer = FALSE; - break; - } - } - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // For Win 8: OID_DOT11_WFD_DISCOVER_REQUEST ------------------------------------------ - if(pP2PInfo->DiscoverSequence & P2P_DISCOVERY_SCAN_PHASE) - { - RT_TRACE(COMP_P2P,DBG_LOUD, ("DiscoverSequence & P2PDiscovery_scan_phase\n")); - } - else - { - //Jump to the search state directly since the scan is not needed - pP2PInfo->State = P2P_STATE_SEARCH; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - // ------------------------------------------------------------------------------------ - } -//Sinda: temporarily mark. Because OS does not care bForceScanLegacyNetworks and it is always 0. -//So at this condition, we do not check bForceScanLegacyNetworks and always do legacy scan. -#if 0 - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bForceScanLegacyNetworks == FALSE) - { - RT_TRACE(COMP_P2P,DBG_LOUD, ("pP2PInfo->bForceScanLegacyNetworks is FALSE and goto search state to scan social channel\n")); - - //Jump to the search state directly since the scan is not needed - pP2PInfo->State = P2P_STATE_SEARCH; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - } -#endif - } - /*FALL THROUGH*/ - case P2P_STATE_SCAN: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Scan Phase\n")); - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - break; - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probeReqBuf, pP2PInfo); - P2PConstructScanList(pP2PInfo, req, MGN_1M, probeReqBuf); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "scan phase"); - - pP2PInfo->State = P2P_STATE_LISTEN; // enter Listen State - } - break; - case P2P_STATE_LISTEN: - { - if(pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs > 0) - { - u1Byte i = 0; - BOOLEAN bFound = FALSE; - - for(i = 0; i < pP2PInfo->DeviceListForQuery.uNumberOfDevices; i++) - { - if(pP2PInfo->DeviceListForQuery.DeviceEntry[i].DeviceAddress != NULL) - { - if( // Make sure the probe response is received - eqMacAddr(pP2PInfo->ScanDeviceIDs.DeviceIDs[0], pP2PInfo->DeviceListForQuery.DeviceEntry[i].DeviceAddress) && - pP2PInfo->DeviceListForQuery.DeviceEntry[i].ProbeResponseHostTimestamp != 0 - ) - { - bFound = TRUE; - } - } - } - - if(bFound == TRUE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: DeviceID Found : Terminate Search State !\n", __FUNCTION__)); - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - } - - // For Win 8: OID_DOT11_WFD_DISCOVER_REQUEST ------------------------------------------ - if(!(pP2PInfo->DiscoverSequence & P2P_DISCOVERY_FIND_PHASE) && P2PScanListAllFound(pP2PInfo)) - { - //Bypass the find phase - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Find device\n")); - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - // ------------------------------------------------------------------------------------ - - if(pP2PInfo->ConnectionContext.FindPhaseLoopTimes != 0) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Listen State\n")); - - - if(P2P_SKIP_SCAN_LOOP_CNT > 0) - { - BOOLEAN portConnected = FALSE; - pLoopAdapter = GetDefaultAdapter(pAdapter); - - pP2PInfo->findPhaseSkipCnt = (pP2PInfo->findPhaseSkipCnt + 1) % (P2P_SKIP_SCAN_LOOP_CNT + 1); - while(pLoopAdapter) - { - if(pLoopAdapter->MgntInfo.mAssoc) - { - portConnected = TRUE; - break; - } - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - if(portConnected && P2P_SKIP_SCAN_LOOP_CNT == pP2PInfo->findPhaseSkipCnt) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("[P2P] Skip next P2P (%d) scan\n", pP2PInfo->findPhaseSkipCnt)); - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, P2P_SKIP_SCAN_DURATION_MS); - bToFireTimer = FALSE; - break; - } - } - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - break; - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probeReqBuf, pP2PInfo); - P2PConstructScanList(pP2PInfo, req, P2P_LOWEST_RATE, probeReqBuf); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "listen state"); - - pP2PInfo->State = P2P_STATE_SEARCH; // enter Search State - break; - } - else - { - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - /*FALL THROUGH*/ - } - } - case P2P_STATE_DEV_DISC_COMPLETE: - { - P2P_STATE NextState = pP2PInfo->StateBeforeScan; - BOOLEAN bFailedToArriveCommonChannel = FALSE; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Device Discovery Complete\n")); - if(pP2PInfo->bPreGroupFormation) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Pre Group Formation Failed\n")); - pP2PInfo->ConnectionContext.Status = P2P_STATUS_FAIL_COMMON_CHANNEL_NOT_ARRIVED; - bFailedToArriveCommonChannel = TRUE; - NextState = pP2PInfo->StateBeforeScan; - - pP2PInfo->bPreGroupFormation = FALSE; - - // - // GO Nego failed, indicate to UI - // - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - - PlatformZeroMemory(&pP2PInfo->ConnectionContext, sizeof(pP2PInfo->ConnectionContext)); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE, - RT_STATUS_FAILURE, - NULL, 0); - } - else if(pP2PInfo->InvitationContext.bToSendInvitationReqOnProbe) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Failed to send InvitationReq to peer\n")); - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_COMMON_CHANNEL_NOT_ARRIVED; - bFailedToArriveCommonChannel = TRUE; - NextState = P2P_STATE_INVITATION_COMPLETE; - - // For Win8: OID_DOT11_WFD_SEND_INVITATION_REQUEST ----------------------------------------------------- - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - MEMORY_BUFFER mbObject = {NULL, 0}; - P2P_EVENT_DATA eventData; - - PlatformZeroMemory(&eventData, sizeof(P2P_EVENT_DATA)); - eventData.rtStatus = RT_STATUS_FAILURE; - - mbObject.Buffer = (pu1Byte) &eventData; - mbObject.Length = sizeof(P2P_EVENT_DATA); - - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE, &mbObject); - } - //------------------------------------------------------------------------------------------------------ - } - else if(pP2PInfo->ProvisionDiscoveryContext.bDoingProvisionDiscovery) - { - P2P_DEV_LIST_ENTRY *pDev = NULL; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bProvisionRequestUseGroupID) - pDev = p2p_DevList_GetGo(&pP2PInfo->devList, pP2PInfo->ProvisionDiscoveryContext.devAddr); - else - pDev = p2p_DevList_Get(&pP2PInfo->devList, pP2PInfo->ProvisionDiscoveryContext.devAddr, P2P_DEV_TYPE_DEV); - } - else - { - if(NULL == (pDev = p2p_DevList_GetGo(&pP2PInfo->devList, pP2PInfo->ProvisionDiscoveryContext.devAddr))) - pDev = p2p_DevList_Get(&pP2PInfo->devList, pP2PInfo->ProvisionDiscoveryContext.devAddr, P2P_DEV_TYPE_DEV); - } - - if(pDev){ - pDev->p2p->pdStatus = P2P_SC_FAIL_COMMON_CHANNEL_NOT_ARRIVED; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Failed to send ProvisionDiscReq to peer\n")); - - bFailedToArriveCommonChannel = TRUE; - NextState = P2P_STATE_PROVISION_DISCOVERY_COMPLETE; - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE, - RT_STATUS_FAILURE, - NULL, 0); - } - else if (pP2PInfo->SDContext.bDoingServiceDiscovery) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Failed to send ServiceDiscoveryReq to peer\n")); - pP2PInfo->SDContext.Status = P2P_SD_STATUS_COMMON_CHANNEL_NOT_ARRIVED; - bFailedToArriveCommonChannel = TRUE; - NextState = P2P_STATE_SERVICE_DISCOVERY_COMPLETE; - } - else - {// the loop between listen and find phase has been completed - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - - } - - if(P2P_DOING_PURE_DEVICE_DISCOVERY(pP2PInfo)) - { - P2PIndicateDeviceDiscoveryComplete(pP2PInfo); - } - - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); - - if(bFailedToArriveCommonChannel) - { - pP2PInfo->State = NextState; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - } - break; - - - case P2P_STATE_SPECIAL_PEER_SEARCH: - { - if(pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs > 0) - { - u1Byte i = 0; - BOOLEAN bFound = FALSE; - - for(i = 0; i < pP2PInfo->DeviceListForQuery.uNumberOfDevices; i++) - { - if(pP2PInfo->DeviceListForQuery.DeviceEntry[i].DeviceAddress != NULL) - { - if( // Make sure the probe response is received - eqMacAddr(pP2PInfo->ScanDeviceIDs.DeviceIDs[0], pP2PInfo->DeviceListForQuery.DeviceEntry[i].DeviceAddress) && - pP2PInfo->DeviceListForQuery.DeviceEntry[i].ProbeResponseHostTimestamp != 0 - ) - { - bFound = TRUE; - } - } - } - - if(bFound == TRUE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: DeviceID Found : Terminate Search State !\n", __FUNCTION__)); - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - } - - if(pP2PInfo->uNumberOfDiscoverRounds == 0) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: pP2PInfo->uNumberOfDiscoverRounds == 0: Terminate Search State!\n", __FUNCTION__)); - - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - else - { - pP2PInfo->uNumberOfDiscoverRounds--; - - P2PDeviceDiscoverForSpecificChannels( - pP2PInfo, - pP2PInfo->DiscoverForSpecificChannels, - pP2PInfo->uNumberOfDiscoverForSpecificChannels - ); - - pP2PInfo->State = P2P_STATE_SPECIAL_PEER_SEARCH; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 50); - bToFireTimer = FALSE; - break; - } - } - break; - - - case P2P_STATE_SEARCH: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Search State\n")); - // For Win 8: OID_DOT11_WFD_DISCOVER_REQUEST ------------------------------------------ - if(!(pP2PInfo->DiscoverSequence & P2P_DISCOVERY_FIND_PHASE)&& P2PScanListAllFound(pP2PInfo)) - { - //Bypass the find phase - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Find device\n")); - pP2PInfo->State = P2P_STATE_DEV_DISC_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - break; - } - // ------------------------------------------------------------------------------------ - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - break; - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probeReqBuf, pP2PInfo); - P2PConstructScanList(pP2PInfo, req, P2P_LOWEST_RATE, probeReqBuf); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "search state"); - - pP2PInfo->State = P2P_STATE_LISTEN; // enter Listen State - - if(pP2PInfo->ConnectionContext.FindPhaseLoopTimes > 0) - { - if(pP2PInfo->ConnectionContext.FindPhaseLoopTimes == 0xFF || - pP2PInfo->ConnectionContext.FindPhaseLoopTimes == 0xFC) // i can't set it to 0xff in d.exe - {// will loop infinitely - } - else - { - pP2PInfo->ConnectionContext.FindPhaseLoopTimes--; - } - } - } - break; - //====================================================================== - // Provision Discovery - //====================================================================== - case P2P_STATE_PROVISION_DISCOVERY_REQ_SEND: - p2p_DevList_Lock(&pP2PInfo->devList); - { - P2P_DEV_LIST_ENTRY *pDev = NULL; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): Sending Provision Discovery Req\n")); - - pDev = p2p_DevList_Get(&pP2PInfo->devList, - pP2PInfo->ProvisionDiscoveryContext.go ? pP2PInfo->ProvisionDiscoveryContext.goBssid : pP2PInfo->ProvisionDiscoveryContext.devAddr, - pP2PInfo->ProvisionDiscoveryContext.go ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV); - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - break; - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_PDReq(pP2PInfo, probeReqBuf, pDev->mac, pDev->p2p->dialogToken, pDev->p2p->pdConfigMethod); - P2PConstructScanList(pP2PInfo, req, P2P_LOWEST_RATE, probeReqBuf); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "to send pd req"); - - pP2PInfo->State = P2P_STATE_PROVISION_DISCOVERY_RSP_WAIT; - PlatformSetTimer( - pAdapter, - &pP2PInfo->P2PMgntTimer, - P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) ? P2P_PROVISION_DISCOVERY_SHORT_TIMEOUT : P2P_PROVISION_DISCOVERY_TIMEOUT); - bToFireTimer = FALSE; - } - p2p_DevList_Unlock(&pP2PInfo->devList); - break; - case P2P_STATE_PROVISION_DISCOVERY_RSP_WAIT: - p2p_DevList_Lock(&pP2PInfo->devList); - { - P2P_DEV_LIST_ENTRY *pDev = NULL; - - pDev = p2p_DevList_Get(&pP2PInfo->devList, - pP2PInfo->ProvisionDiscoveryContext.go ? pP2PInfo->ProvisionDiscoveryContext.goBssid : pP2PInfo->ProvisionDiscoveryContext.devAddr, - pP2PInfo->ProvisionDiscoveryContext.go ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): Timeout waiting for Provision Discovery Rsp\n")); - - // Comment out because we use off chnl tx to do pd retry if OS support P2P natively - if(0)//if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - pP2PInfo->ProvisionReqRetryCnt ++; - if(pP2PInfo->ProvisionReqRetryCnt < P2P_PROVISION_DISCOVERY_RETRY_CNT) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Retry ProvisionReq!, retry = %d\n", pP2PInfo->ProvisionReqRetryCnt)); - pP2PInfo->State = P2P_STATE_INITIALIZED; - p2p_DevList_Unlock(&pP2PInfo->devList); - if(P2PProvisionDiscovery( - pP2PInfo, - pP2PInfo->ProvisionDiscoveryContext.devAddr, - pDev->p2p->pdConfigMethod) - ) - { - PlatformSetTimer( - pAdapter, - &pP2PInfo->P2PMgntTimer, - P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) ? P2P_PROVISION_DISCOVERY_SHORT_TIMEOUT : P2P_PROVISION_DISCOVERY_TIMEOUT); - bToFireTimer = FALSE; - p2p_DevList_Unlock(&pP2PInfo->devList); - break; - } - } - } - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_PROVISION_DISCOVERY_RSP!, retry = 0\n")); - pP2PInfo->ProvisionReqRetryCnt = 0; - pP2PInfo->State = P2P_STATE_PROVISION_DISCOVERY_COMPLETE; - pDev->p2p->pdStatus = P2P_SC_FAIL_TIMEOUT_WAITING_FOR_PROVISION_DISCOVERY_RSP; - /* FALL THROUGH */ - } - p2p_DevList_Unlock(&pP2PInfo->devList); - //break; - case P2P_STATE_PROVISION_DISCOVERY_COMPLETE: - { - BOOLEAN bExtLsn = FALSE; - - p2p_DevList_Lock(&pP2PInfo->devList); - { - BOOLEAN bSucceed = FALSE; - P2P_DEV_LIST_ENTRY *pDev = NULL; - - pDev = p2p_DevList_Get(&pP2PInfo->devList, - pP2PInfo->ProvisionDiscoveryContext.go ? pP2PInfo->ProvisionDiscoveryContext.goBssid : pP2PInfo->ProvisionDiscoveryContext.devAddr, - pP2PInfo->ProvisionDiscoveryContext.go ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV); - - if(NULL == pDev) - { - RT_TRACE_F(COMP_P2P, DBG_SERIOUS, ("pDev = NULL\n")); - RT_ASSERT(FALSE, ("pDev = NULL")); - PlatformZeroMemory(&pP2PInfo->ProvisionDiscoveryContext, sizeof(pP2PInfo->ProvisionDiscoveryContext)); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - p2p_DevList_Unlock(&pP2PInfo->devList); - break; - } - - if(NULL == pDev->p2p) - { - RT_TRACE_F(COMP_P2P, DBG_SERIOUS, ("pDev->p2p = NULL\n")); - RT_ASSERT(FALSE, ("pDev->p2p = NULL")); - PlatformZeroMemory(&pP2PInfo->ProvisionDiscoveryContext, sizeof(pP2PInfo->ProvisionDiscoveryContext)); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - p2p_DevList_Unlock(&pP2PInfo->devList); - break; - } - - bSucceed = (P2P_SC_SUCCESS == pDev->p2p->pdStatus); - - pP2PInfo->ProvisionReqRetryCnt = 0; - // - // Retrieve specific P2P device info. from Win8 Specific Device Information Pool to initiate boost initial gain - // 2014.03.23. - // - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - u2Byte boostDelaySec = WPS_HANDSHAKE_TIMEOUT_SEC; - - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATE_PROVISION_DISCOVERY_COMPLETE:\n")); - } - - if(bSucceed) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): Provision Discovery succeed: %u\n", - pDev->p2p->pdStatus)); - - P2PIndicateOnProvisionDiscoveryRsp(pP2PInfo, - pDev->p2p->pdConfigMethod, - pDev->mac); // Set the ConfigMethod parameter to FFFF to indicate timeout - - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); - bExtLsn = TRUE; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - // this is now handled in the call back from OffChnlTx - //p2p_IndicatePdReqSent(pDev, pP2PInfo); - //p2p_IndicatePdRspReceived(pDev, pP2PInfo); - }///if - } - else if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) && pDev->txFrames[P2P_FID_PD_REQ]) - {// Note if we use OffChnlTx to send PD, it won't get here - pDev->p2p->pdStatus = P2P_SC_SUCCESS; - p2p_IndicatePdReqSent(pDev, pP2PInfo); - p2p_IndicateFakePdRspReceived(pDev, pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); - bExtLsn = TRUE; - } - else - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE, - RT_STATUS_FAILURE, - NULL, - 0 - ); - } - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): Provision Discovery failed: %u\n", pDev->p2p->pdStatus)); - - if(pDev->p2p->pdStatus == P2P_SC_FAIL_COMMON_CHANNEL_NOT_ARRIVED) - { - pDev->p2p->pdConfigMethod = 0xFE; - } - else if(pDev->p2p->pdStatus == P2P_SC_FAIL_TIMEOUT_WAITING_FOR_PROVISION_DISCOVERY_RSP) - { - pDev->p2p->pdConfigMethod = 0xFF; - } - - P2PSvc_OnSendPDReqFailure(pP2PInfo->pP2PSvcInfo, - pDev->mac, - pDev->p2p->pdStatus - ); - - P2PIndicateOnProvisionDiscoveryRsp(pP2PInfo, - pDev->p2p->pdConfigMethod, - pDev->mac); // Set the ConfigMethod parameter to FFFF to indicate timeout - - if(pDev->p2p->pdStatus != P2P_STATUS_FAIL_COMMON_CHANNEL_NOT_ARRIVED) - { - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); // state is recovered - } - else - { - pP2PInfo->State = pP2PInfo->StateBeforeScan; - } - } - - PlatformZeroMemory(&pP2PInfo->ProvisionDiscoveryContext, sizeof(pP2PInfo->ProvisionDiscoveryContext)); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - p2p_DevList_Unlock(&pP2PInfo->devList); - - if(bExtLsn) - { - P2PExtendedListenStart(pP2PInfo); - } - } - - break; - - //====================================================================== - // Group Formation - //====================================================================== - case P2P_STATE_GO_NEGO_REQ_SEND: - p2p_DevList_Lock(&pP2PInfo->devList); - { - P2P_DEV_LIST_ENTRY *pDev = NULL; - - pDev = p2p_DevList_Get(&pP2PInfo->devList, - pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress, - P2P_DEV_TYPE_DEV); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Group Formating\n")); - // Pause default adapter's traffic if group formating - MultichannelHandlePacketDuringScan(GetDefaultAdapter(pAdapter), TRUE); - - // - // Retrieve specific P2P device info. from Win8 Specific Device Information Pool to initiate boost initial gain - // 2014.04.03. - // - pP2PDeviceListEntry = P2PDeviceListFind(&pP2PInfo->DeviceList, pDev->mac); - if(pP2PDeviceListEntry) - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - BoostInitGainValue = TRUE; - BoostInitGainValue = (BoostInitGainValue | ((pP2PDeviceListEntry->RecvSignalPower+110) << 8)); - pP2PInfo->pAdapter->HalFunc.SetHwRegHandler(pP2PInfo->pAdapter, HW_VAR_BOOST_INIT_GAIN_OS, (pu1Byte)&BoostInitGainValue); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATE_GO_NEGO_REQ_SEND: SignalStrength(%#x)\n", pP2PDeviceListEntry->RecvSignalPower)); - } - } - - if(FALSE == P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - pP2PInfo->GOIntent = ((pP2PInfo->GOIntent & 0xFE) | !(pP2PInfo->GOIntent & 0x01)); - - p2p_Send_GoNegReq(pP2PInfo, pDev->mac, TRUE); - - pP2PInfo->State = P2P_STATE_GO_NEGO_RSP_WAIT; - PlatformCancelTimer(pAdapter, &pP2PInfo->P2PMgntTimer); - pP2PInfo->lastStateu8Time = PlatformGetCurrentTime(); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_GO_NEGO_FRAME_TIMEOUT); - bToFireTimer = FALSE; - } - p2p_DevList_Unlock(&pP2PInfo->devList); - break; - case P2P_STATE_GO_NEGO_RSP_SEND: - { - pP2PInfo->State = P2P_STATE_GO_NEGO_CONFIRM_WAIT; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_GO_NEGO_FRAME_TIMEOUT); - bToFireTimer = FALSE; - } - break; - case P2P_STATE_GO_NEGO_RSP_WAIT: - { - if(PlatformGetCurrentTime() < (pP2PInfo->lastStateu8Time + (P2P_GO_NEGO_FRAME_TIMEOUT * 1000))) - { - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("CurTime=%"i64fmt"d < lastTime = %"i64fmt"d + %d, skip this timeout!\n", PlatformGetCurrentTime(), pP2PInfo->lastStateu8Time, (P2P_GO_NEGO_FRAME_TIMEOUT * 1000))); - break; - } - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Timeout waiting for GO Nego Rsp\n")); - - // - // Retrieve specific P2P device info. from Win8 Specific Device Information Pool to initiate boost initial gain - // 2014.04.03. - // - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - BoostInitGainValue = FALSE; - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_BOOST_INIT_GAIN_OS, (pu1Byte)&BoostInitGainValue); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GON_RSP:\n")); - } - - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - pP2PInfo->ConnectionContext.Status = P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GON_RSP; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - } - break; - case P2P_STATE_GO_NEGO_CONFIRM_WAIT: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Timeout waiting for GO Nego Confirm\n")); - - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - pP2PInfo->ConnectionContext.Status = P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GON_CONFIRM; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - } - break; - case P2P_STATE_GO_NEGO_COMPLETE: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): GO Nego Complete: %u\n", - pP2PInfo->ConnectionContext.Status)); - - // - // Retrieve specific P2P device info. from Win8 Specific Device Information Pool to initiate boost initial gain - // 2014.04.03. - // - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - u2Byte boostDelaySec = WPS_HANDSHAKE_TIMEOUT_SEC; - - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATE_GO_NEGO_COMPLETE:\n")); - } - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - { - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - } - - pP2PInfo->PreviousGONegoResult = (P2P_STATUS_CODE)pP2PInfo->ConnectionContext.Status; - - if(pP2PInfo->ConnectionContext.Status == P2P_STATUS_SUCCESS) - { - // - // Indicate GO formated info to ask UI to start provisioning - // - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { // Only copy the infomration in GO from our P2P info because these info shall be from ours but not the target (client). - pP2PInfo->ConnectionContext.ConnectingDevice.OperatingChannel = pP2PInfo->OperatingChannel; - CopySsid(pP2PInfo->ConnectionContext.ConnectingDevice.SsidBuf, pP2PInfo->ConnectionContext.ConnectingDevice.SsidLen, pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen); - } - //P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - P2PDumpGroupFormationResult(pP2PInfo); - P2PIndicateGOFormatedInfo(pP2PInfo, - pP2PInfo->ConnectionContext.Status, - pP2PInfo->ConnectionContext.bGoingToBeGO, - &pP2PInfo->ConnectionContext.ConnectingDevice); - - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - {// Indicate to the upper layer to start a P2P Role Port of type GO - P2P_PROFILE P2PProfile; - - P2PProfile.OpChannel = pP2PInfo->OperatingChannel; - - // - // GO SSID is determined when GONegoReq or GONegoRsp is received - // and it is stored in pP2PInfo->SSIDBuf - // - CopySsid(P2PProfile.SsidBuf, P2PProfile.SsidBufLen, pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen); - - // - // We use this to modify the SSID of the SoftAP - // - P2PIndicateStartApRequest(pP2PInfo, &P2PProfile); - } - - pP2PInfo->State = P2P_STATE_INITIALIZED; - } - else - { - // - // GO Nego failed, indicate to UI - // For the failure case, indicate earlier when we determine the negotiation is failed. - // - //P2PIndicateGOFormatedInfo(pP2PInfo, - // pP2PInfo->ConnectionContext.Status, - // pP2PInfo->ConnectionContext.bGoingToBeGO, - // &pP2PInfo->ConnectionContext.ConnectingDevice); - - PlatformZeroMemory(&pP2PInfo->ConnectionContext, sizeof(pP2PInfo->ConnectionContext)); - pP2PInfo->State = P2P_STATE_INITIALIZED; - } - - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - - //====================================================================== - // WPS - //====================================================================== - case P2P_STATE_PRE_PROVISIONING: - { - u4Byte ConfigurationTimeout; // in ms, note that the configuration time out in the P2P IE is defined as units of 10ms - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): P2P_STATE_PRE_PROVISIONING\n")); - - // Reset WPS related flags - pP2PInfo->ConnectionContext.bDoingProvisioning = FALSE; - - // - // Clause 3.1.4.3: - // Group Formation bit in the P2P Group Cap shall be set to 1 until Provisioning succeeds. - // - pP2PInfo->GroupCapability |= gcGroupFormation; // set the bit - - if(pP2PInfo->ConnectionContext.bGoingToBeGO && - !P2P_ACTING_AS_GO(pP2PInfo)) // for the case that we invite a Dev to join our group, we shall not change SSID or restart AP - {// start AP mode - P2PSetRole(pP2PInfo, P2P_GO); - - // - // GO does not check if provisioning succeed. - // - pP2PInfo->ConnectionContext.bDoingProvisioning = TRUE; - pP2PInfo->ConnectionContext.ProvisioningResult = P2P_PROVISIONING_RESULT_SUCCEED; - } - else - {//P2P Client, will connect to the GO later - pP2PInfo->ConnectionContext.bDoingProvisioning = TRUE; - pP2PInfo->ConnectionContext.ProvisioningResult = P2P_PROVISIONING_RESULT_UNKNOWN; - } - - // - // Clause 3.1.3.4: - // To allow for P2P Device configuration, P2P Devices may delay starting the Provisioning phase - // until the expiration of the max of the P2P GO's GO Config Time and the Client's Client Config Time. - // - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - {// I'm going to be the GO => just enter provisioning state without waiting for configuration timeout - ConfigurationTimeout = 0; //(10 * MAX(pP2PInfo->GOConfigurationTimeout, pP2PInfo->ConnectionContext.ConnectingDevice.ClientConfigurationTimeout)); - } - else - {// I'm going to be the Client - ConfigurationTimeout = (10 * MAX(pP2PInfo->ClientConfigurationTimeout, pP2PInfo->ConnectionContext.ConnectingDevice.GOConfigurationTimeout)); - } - - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // For Win 8: Return back to the initialization state ----------------------------------------- - PlatformZeroMemory(&pP2PInfo->ConnectionContext, sizeof(pP2PInfo->ConnectionContext)); - pP2PInfo->Role = P2P_DEVICE; - pP2PInfo->State = P2P_STATE_INITIALIZED; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - // ---------------------------------------------------------------------------------- - } - else - { - // - // Wait for configuration before starting provisioning - // - pP2PInfo->State = P2P_STATE_PROVISIONING; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, ConfigurationTimeout); // wait for configuration - bToFireTimer = FALSE; - } - } - break; - case P2P_STATE_PROVISIONING: - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): P2P_STATE_PROVISIONING\n")); - - //if(pP2PInfo->ConnectionContext.bDoingProvisioning) - {// doing provisioning - // - // During the time waiting for provisioning complete, we keep in P2P_STATE_PROVISIONING. - // Once ProvisioningResult is set, we infer that provisioning completed. - // - - if(pP2PInfo->ConnectionContext.ProvisioningResult == P2P_PROVISIONING_RESULT_SUCCEED) - {// Provisioning succeed - P2PSetOperatingState(pP2PInfo); - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { - } - else - {// set client role - P2PSetRole(pP2PInfo, P2P_CLIENT); - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): provisioning succeed\n")); - } - - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - else if(pP2PInfo->ConnectionContext.ProvisioningResult == P2P_PROVISIONING_RESULT_FAILED) - {// Provisioning failed => indicate Group Formation failed - // - // Clause 3.1.4.3: End the P2P Group session as described in Clause 3.2.9 - // - SendDeauthentication(pP2PInfo->pAdapter, BroadcastAddress, deauth_lv_ss); - - pP2PInfo->State = P2P_STATE_INITIALIZED; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEFAULT_MGNT_PERIOD); - bToFireTimer = FALSE; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): provisioning failed\n")); - } - else - {// Provisioning in progress => keep waiting - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): wait for provisioning\n")); - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEFAULT_MGNT_PERIOD); - bToFireTimer = FALSE; - break; - } - - if(pP2PInfo->ConnectionContext.ProvisioningResult != P2P_PROVISIONING_RESULT_UNKNOWN) - {// Provisioning has been done, either failed or succeed - // - // Clause 3.1.4.3: - // Group Formation bit in the P2P Group Cap shall be set to 1 until Provisioning succeeds. - // - pP2PInfo->GroupCapability &= ~gcGroupFormation; // clear the bit - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): provisioning done\n")); - - // - // Reset ConnectionContext since this connection session is completed - // - PlatformZeroMemory(&pP2PInfo->ConnectionContext, sizeof(pP2PInfo->ConnectionContext)); - } - } - } - break; - - //====================================================================== - // Group Operation - //====================================================================== - case P2P_STATE_OPERATING: - { - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // Do nothing: Just Waiting for Win8 OID - } - else - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): P2P_STATE_OPERATING\n")); - if(P2P_ACTING_AS_GO(pP2PInfo)) - { - - if(P2PClientInfoGetCount(pP2PInfo) == 0 && - !pP2PInfo->bGOStartedAutonomously) // not to check this if GO started autonomously - {// no client - pP2PInfo->P2PGONoClientSlotCount++; - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): no client slot count: %d\n", - pP2PInfo->P2PGONoClientSlotCount)); - } - else - { - pP2PInfo->ExtListenTimingPeriodSlotCount = 0; - } - - if(pP2PInfo->P2PGONoClientSlotCount == P2P_NO_CLIENT_PERIOD_SC) - { - P2PDisconnect(pP2PInfo); // to stop the SoftAP and back to init state - pP2PInfo->P2PGONoClientSlotCount = 0; - - // Comment out because these are handled in P2PDisconnect. - //pP2PInfo->State = P2P_STATE_INITIALIZED; - //pP2PInfo->Role = P2P_DEVICE; - - bToFireTimer = FALSE; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): Stop GO and back to P2P_STATE_INITIALIZED\n")); - } - } - else if(P2P_ACTING_AS_CLIENT(pP2PInfo)) - {// operating as a client, check if we are still connected - if(!P2PDefaultPortConnected(pP2PInfo) && !P2PProvisioning(pP2PInfo)) - { - pP2PInfo->P2PClientDisconnectedSlotCount++; - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): P2P Client disconnected slot count: %d\n", - pP2PInfo->P2PClientDisconnectedSlotCount)); - } - else - {// def port connected or doing provisioning - pP2PInfo->P2PClientDisconnectedSlotCount = 0; - } - - if(pP2PInfo->P2PClientDisconnectedSlotCount == P2P_CLIENT_DISCONNECTED_PERIOD_SC) - { - P2PDisconnect(pP2PInfo); // will back to init state - pP2PInfo->P2PClientDisconnectedSlotCount = 0; - pP2PInfo->State = P2P_STATE_INITIALIZED; - P2PSetRole(pP2PInfo, P2P_DEVICE); - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): back to P2P_STATE_INITIALIZED because we are acting as Client but default port is disconnected\n")); - - } - } - } - - - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEFAULT_MGNT_PERIOD); - bToFireTimer = FALSE; - } - break; - //====================================================================== - // Invitation - //====================================================================== - case P2P_STATE_INVITATION_REQ_SEND: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): P2P_STATE_INVITATION_REQ_SEND\n")); - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - break; - probeReqBuf = CustomScan_GetProbeReqBuf(req); - p2p_Construct_InvitationReq(pP2PInfo, probeReqBuf, - pP2PInfo->InvitationContext.InvitedDevice.DeviceAddress, - pP2PInfo->InvitationContext.DialogToken); - P2PConstructScanList(pP2PInfo, req, P2P_LOWEST_RATE, probeReqBuf); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "to send inv req"); - - pP2PInfo->State = P2P_STATE_INVITATION_RSP_WAIT; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_INVITATION_FRAME_TIMEOUT); - bToFireTimer = FALSE; - } - break; - case P2P_STATE_INVITATION_RSP_WAIT: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Timeout waiting for InvitationRsp\n")); - pP2PInfo->State = P2P_STATE_INVITATION_COMPLETE; - pP2PInfo->InvitationContext.Status = P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_INVITATION_RSP; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) && !pP2PInfo->pAdapter->bInHctTest) - { - if(P2PIndicateFakeInvitRsp(pP2PInfo)) - { - pP2PInfo->InvitationContext.Status = P2P_STATUS_SUCCESS; - } - } - /*FALL THROUGH*/ - } - //break; - case P2P_STATE_INVITATION_COMPLETE: - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): P2P_STATE_INVITATION_COMPLETE, status: %u, persistent: %u, ch: %u\n", - pP2PInfo->InvitationContext.Status, pP2PInfo->InvitationContext.bPersistentInvitation, pP2PInfo->InvitationContext.OpChannel)); - - // - // Resume boost initial gain for P2P invitation response timeout or process completion. - // 2013.10.15. - // - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - u2Byte boostDelaySec = ASSOC_HANDSHAKE_DHCP_DELAY_SEC; - - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS] P2P_STATE_INVITATION_COMPLETE:\n")); - } - - // - // We use P2PDeviceDiscovery() to arrive common chnll before sendding InvitationReq, - // In P2PDeviceDiscovery(), beacon is stopped, so we have to resume beaconning here. - // - // If P2P_STATUS_FAIL_COMMON_CHANNEL_NOT_ARRIVED, - // P2PDeviceDiscoveryComplete() is called in P2P_STATE_DEV_DISC_COMPLETE case, - // so we don' t have to call it again - // - if(pP2PInfo->InvitationContext.Status != P2P_STATUS_FAIL_COMMON_CHANNEL_NOT_ARRIVED) - { - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); - } - else - { - pP2PInfo->State = pP2PInfo->StateBeforeScan; - } - - P2PInvitePeerComplete(pP2PInfo); - - P2PIndicateOnInvitationRsp(pP2PInfo, - pP2PInfo->InvitationContext.Status, - pP2PInfo->InvitationContext.bPersistentInvitation, - pP2PInfo->InvitationContext.OpChannel, - pP2PInfo->InvitationContext.InvitorRole, - pP2PInfo->InvitationContext.SsidLen, - pP2PInfo->InvitationContext.SsidBuf); - - // Indicating InvitationRsp may trigger a connect request which may further triger a reset request, - // and reset request resets all timers including the P2P mgnt timer. - // Indicate current state immediately so that upper layers will not show "inviting" for a long time. - //P2PIndicateCurrentState(pP2PInfo, pP2PInfo->State); - - if(!pP2PInfo->InvitationContext.bWaitingBackwardInvite) - { - PlatformZeroMemory(&(pP2PInfo->InvitationContext), sizeof(P2P_INVITATION_CONTEXT)); - } - - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - - //====================================================================== - // Device Discoverability - //====================================================================== - case P2P_STATE_DEVICE_DISCOVERABILITY_WAIT_BEACON: - {// timeout waiting for beacon from the GO - pP2PInfo->DeviceDiscoverabilityContext.Status = P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GO_BEACON; - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): P2P_STATE_DEVICE_DISCOVERABILITY_WAIT_BEACON: Timeout waiting for GO Beacon\n")); - pP2PInfo->State = P2P_STATE_DEVICE_DISCOVERABILITY_COMPLETE; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - - case P2P_STATE_DEVICE_DISCOVERABILITY_REQ_SEND: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): P2P_STATE_INVITATION_REQ_SEND\n")); - - p2p_Send_DevDiscReq(pP2PInfo, pP2PInfo->DeviceDiscoverabilityContext.GoBssid, - pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress, - pP2PInfo->DeviceDiscoverabilityContext.DialogToken); - - - pP2PInfo->State = P2P_STATE_DEVICE_DISCOVERABILITY_RSP_WAIT; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEVICE_DISCOVERABILITY_FRAME_TIMEOUT); - bToFireTimer = FALSE; - } - break; - - case P2P_STATE_DEVICE_DISCOVERABILITY_RSP_WAIT: - {// timeout waithing for DeviceDiscoverabilityRsp - pP2PInfo->DeviceDiscoverabilityContext.Status = P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_DEVICE_DISCOVERABILITY_RSP; - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): P2P_STATE_DEVICE_DISCOVERABILITY_RSP_WAIT: Timeout waiting for DeviceDiscoverabilityRsp\n")); - } - /*FALL THROUGH*/ - - case P2P_STATE_DEVICE_DISCOVERABILITY_COMPLETE: - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): P2P_STATE_DEVICE_DISCOVERABILITY_COMPLETE: Status(%u)\n", - pP2PInfo->DeviceDiscoverabilityContext.Status)); - - - pP2PInfo->DeviceDiscoverabilityContext.bWaitingBeaconFromGO = FALSE; - - if(!pP2PInfo->DeviceDiscoverabilityContext.bGoConnect) - { - pP2PInfo->State = P2P_STATE_INITIALIZED; - P2PSetChannel(pP2PInfo, pP2PInfo->DeviceDiscoverabilityContext.OriginalChannel); - } - else - { - pP2PInfo->State = P2P_STATE_GO_NEGO_REQ_SEND; - } - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - //====================================================================== - // Service Discovery - //====================================================================== - case P2P_STATE_SERVICE_DISCOVERY_REQ_SEND: - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): P2P_STATE_SERVICE_DISCOVERY_REQ_SEND\n")); - - /* we will never reach here, see P2PCommonChannelArrived */ - } - break; - - case P2P_STATE_SERVICE_DISCOVERY_COMEBACK_RSP_WAIT: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Timeout waiting for ComebackRsp\n")); - - pP2PInfo->SDContext.Status = P2P_SD_STATUS_COMEBACK_RSP_TIMEOUT; - - pP2PInfo->State = P2P_STATE_SERVICE_DISCOVERY_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - - case P2P_STATE_SERVICE_DISCOVERY_RSP_WAIT: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PMgntTimerCallback(): Timeout waiting for SDRsp\n")); - - pP2PInfo->SDContext.Status = P2P_SD_STATUS_SERVICE_RSP_TIMEOUT; - - pP2PInfo->State = P2P_STATE_SERVICE_DISCOVERY_COMPLETE; - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - - case P2P_STATE_SERVICE_DISCOVERY_COMPLETE: - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("P2PMgntTimerCallback(): SD Complete: Status (%u)\n", - pP2PInfo->SDContext.Status)); - - if(pP2PInfo->SDContext.Status != P2P_SD_STATUS_COMMON_CHANNEL_NOT_ARRIVED) - { - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); - } - else - { - pP2PInfo->State = pP2PInfo->StateBeforeScan; - } - - if(!(pP2PInfo->SDContext.Status == P2P_SD_STATUS_SUCCESS)) // handled when status is determined to be success - { - // Notify the SDRsp - P2PIndicateOnSDRsp(pP2PInfo, &pP2PInfo->SDContext); - } - - // Clear SDContext - PlatformZeroMemory(&pP2PInfo->SDContext, sizeof(P2P_SD_CONTEXT)); - - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - bToFireTimer = FALSE; - } - break; - - default: - break; - } - - if(pP2PInfo->Role == P2P_NONE) - { - bToFireTimer = FALSE; - } - - if(bToFireTimer) - { - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, P2P_DEFAULT_MGNT_PERIOD); - } - -exit_P2PMgntTimerCallback: - return; - -} - -VOID -P2PMlmeAssociateRequest( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u4Byte asocTmot, - u2Byte asCap, - u2Byte asListenInterval, - BOOLEAN Reassociate - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - PRT_WLAN_BSS pBssDesc ; - - if(!P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - return; - } - - pBssDesc = BssDescDupByBssid(pP2PInfo->pAdapter, asocStaAddr); - - if(pBssDesc) - { - if(!(pBssDesc->P2PManagedInfo & maP2PCrossConnectionPermitted) && - (pP2PInfo->GroupCapability & gcCrossConnection)) - {// we support cross conn but the connecting ap does not allow that - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, - "P2PMlmeAssociateRequest(): Cross connection is not allowed by the AP => disable cross connection\n", asocStaAddr); - pP2PInfo->GroupCapability &= ~gcCrossConnection; - } - } - - return; -} - -// -// Description: -// Handle association response packet with status "suceess" for P2P function. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] pRfd - -// The packet container including the information of packet. -// [in] posMpdu - -// The location address of full 802.11 frame. -// -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// Remark: -// This function updates the listen channel and operating channel if the client is assocating to -// the legacy AP. -// -RT_STATUS -P2P_OnAssocOK( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - pu1Byte DeviceAddress = NULL; - pu1Byte InterfaceAddress = Frame_pSaddr(*posMpdu); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - PADAPTER pLoopAdapter = NULL; - PP2P_INFO pLoopP2PInfo = NULL; - - P2P_MESSAGE msg; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("connected with Legacy AP\n")); - - FunctionIn(COMP_P2P); - - PlatformZeroMemory(&msg, sizeof(P2P_MESSAGE)); - - do - { - BOOLEAN bGo = FALSE; - - for(pLoopAdapter = GetDefaultAdapter(pAdapter), pLoopP2PInfo = (pLoopAdapter ? GET_P2P_INFO(pLoopAdapter) : NULL); - pLoopAdapter && pLoopP2PInfo; - pLoopAdapter = GetNextExtAdapter(pLoopAdapter), - pLoopP2PInfo = (pLoopAdapter ? GET_P2P_INFO(pLoopAdapter) : NULL)) - { - if(!P2P_ENABLED(pLoopP2PInfo)) - continue; - - if(P2P_CLIENT != pLoopP2PInfo->Role && P2P_GO != pLoopP2PInfo->Role) - { - pLoopP2PInfo->OperatingChannel = pMgntInfo->dot11CurrentChannelNumber; - if(P2PIsSocialChannel(pLoopP2PInfo->OperatingChannel)) - pLoopP2PInfo->ListenChannel = pLoopP2PInfo->OperatingChannel; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P op chnl changed to %u, listenChnl = %d for adapter (%p)\n", - pLoopP2PInfo->OperatingChannel, pLoopP2PInfo->ListenChannel, pLoopAdapter)); - } - } - - // Prefast warning C28182: Dereferencing NULL pointer. '((pAdapter))->pPortCommonInfo->pDefaultAdapter' contains the same NULL value as 'pLoopAdapter' did. - if(((pAdapter))->pPortCommonInfo->pDefaultAdapter != NULL && !P2P_ENABLED(GET_P2P_INFO(pAdapter))) - { - rtStatus = RT_STATUS_SUCCESS; - break; - } - - if(RT_STATUS_SUCCESS == (rtStatus = p2p_parse_Ies(posMpdu, DBG_LOUD, &msg))) - if(!p2p_validate_AssocRsp(&msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // - // Clause 4.2.5, At least 1 P2P IE is always included in the AssocRsp frame. - // - // osP2PIE = PacketGetElement(asocpdu, EID_Vendor, OUI_SUB_WIFI_DIRECT, OUI_SUB_DONT_CARE); - bGo = (NULL != FrameBuf_Head(&msg.p2pAttributes)); - - // Update scan list for query so that upper layers can query the most up to date scan list to determine - // whether the connecting AP is a GO. - P2P_UpdateScanList(pAdapter); - - // - // Check if the connecting AP is actually a GO - // Note that the P2P IE may contain no P2P attributes, so we don't check osP2PIE.Length > 0 - // - if(bGo) - {// the AssocRsp is from a P2P Device - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("connected with GO: Role is %d, State is %d\n", pP2PInfo->Role, pP2PInfo->State)); - if(pP2PInfo->Role == P2P_DEVICE && - pP2PInfo->State != P2P_STATE_PROVISIONING) - { - P2PSetRole(pP2PInfo, P2P_CLIENT); - P2PSetOperatingState(pP2PInfo); - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - P2PIndicateCurrentState(pP2PInfo, pP2PInfo->State); // update op-state immediately - } - } - else - {// connect to a legacy AP - if(P2PIsSocialChannel(pMgntInfo->dot11CurrentChannelNumber)) - { - pP2PInfo->OperatingChannel = MgntActQuery_802_11_CHANNEL_NUMBER(pP2PInfo->pAdapter); - pP2PInfo->ListenChannel = MgntActQuery_802_11_CHANNEL_NUMBER(pP2PInfo->pAdapter); - - // Also adjust GO intent to 15 so that we won't become a P2P Client after negotiation. - { - pP2PInfo->GOIntent = ((15 << 1) | (pP2PInfo->GOIntent & 0x01)); - } - - // - // Readiness event: for 7.1.5 - // - if(pP2PInfo->Role == P2P_CLIENT) - {// we are a P2P Client and now connecting to a legacy AP => back to device role - P2PSetRole(pP2PInfo, P2P_DEVICE); - pP2PInfo->State = P2P_STATE_INITIALIZED; - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P listen chnl changed to %u\n", pMgntInfo->dot11CurrentChannelNumber)); - } - } - - PlatformSetTimer(pAdapter, &(pP2PInfo->P2PMgntTimer), 0); - }while(FALSE); - - p2p_parse_FreeMessage(&msg); - - return rtStatus; -} - -// -// Description: -// Set P2P Power Save mode for GO. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// [in] pP2pPs - -// The address of P2P power save setting. -// [in] NoAIndex - -// The NoA index, only applied to Client. -// [in] psReason - -// It't the reason why or who updates the power save configuration. -// Return: -// If success, return RT_STATUS_SUCCESS; Otherwise, return an error code. -// Note: -// The current setting is only applied to the PCI interface since we must get the TSF timer -// directly from the NIC's register. -// By Bruce, 2011-02-10. -// -u4Byte -P2PSetPowerSaveMode( - IN PP2P_INFO pP2PInfo, - IN PP2P_POWERSAVE_SET pP2pPs, - IN u1Byte NoAIndex, - IN P2P_PS_UPDATE_REASON psReason - ) -{ - PADAPTER pAdapter = NULL; - - if(!P2P_ENABLED(pP2PInfo)) - return RT_STATUS_FAILURE; - - if(!pP2pPs || !pP2PInfo) - return RT_STATUS_FAILURE; - - pAdapter = pP2PInfo->pAdapter; - - // Clear the PS level first. - RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_LPS_P2P_PS); - - // Invalid role - if((pP2PInfo->Role != P2P_GO) && (pP2PInfo->Role != P2P_CLIENT)) - return RT_STATUS_FAILURE; - - P2PSetPsState(pP2PInfo, P2P_PS_CANCEL_ALL_PS, P2P_PS_AWAKE, 0); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PSetPowerSaveMode(): Reason = %d\n", psReason)); - - PlatformMoveMemory(&pP2PInfo->P2pPsConfgSet, pP2pPs, sizeof(P2P_POWERSAVE_SET)); - - if(psReason == P2P_PS_UPDATE_BY_USER && pP2PInfo->Role == P2P_CLIENT) - { - // This is a presence request in p2p client. - return P2PPresenceReq(pP2PInfo, &pP2PInfo->P2pPsConfgSet); - } - - if(pP2PInfo->Role == P2P_GO) - pP2PInfo->NoAIEIndex = ((u2Byte)(pP2PInfo->NoAIEIndex + 1) > 0xFF) ? 0 : (pP2PInfo->NoAIEIndex + 1); - else - pP2PInfo->NoAIEIndex = NoAIndex; - - pP2PInfo->bUpdatePsParameter = TRUE; - - // For non-PCI interface, we always schedule workitem to update P2P PS mode. - if(!PlatformIsWorkItemScheduled(&(pP2PInfo->P2PPSWorkItem))) - PlatformScheduleWorkItem(&(pP2PInfo->P2PPSWorkItem)); - return RT_STATUS_SUCCESS; - - P2PUpdatePowerSavePara(pP2PInfo); - - if(pP2PInfo->psExeType == RT_P2P_PS_EXE_BY_SW_HW_TIMER) - { // Driver Timer - P2PPsTimeout(pAdapter); - } - else if(pP2PInfo->psExeType == RT_P2P_PS_EXE_BY_HW && pAdapter->MgntInfo.bWiFiConfg) - { // HW caculate - P2PSetPsState(pP2PInfo, P2P_PS_CANCEL_ALL_PS, P2P_PS_AWAKE, 0); - } - else - { - // Not support. - return RT_STATUS_FAILURE; - } - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Update the P2P power save setting from the configuration. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// Return: -// If success, return RT_STATUS_SUCCESS; Otherwise, return an error code. -// Assumption: -// Before calling this function, make sure the bus interface so that we can directly access -// the HW register, such as passive level. -// By Bruce, 2011-02-11. -// -u4Byte -P2PUpdatePowerSavePara( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - u8Byte curTsf = 0, u8StartTime = 0, nextAdvancedTsf = 0, usBeaconInterval = 0, usCtWindow = 0; - u1Byte i = 0; - - if(!P2P_ENABLED(pP2PInfo)) - return RT_STATUS_FAILURE; - - if(!pP2PInfo->bUpdatePsParameter) - return RT_STATUS_FAILURE; - - usBeaconInterval = pP2PInfo->pAdapter->MgntInfo.dot11BeaconPeriod * sTU; - - pP2PInfo->bOppPS = pP2PInfo->P2pPsConfgSet.bOppPs; - usCtWindow = pP2PInfo->P2pPsConfgSet.CTWindow * sTU; - - // Check if the CTWindow is not valid - if(usCtWindow < (P2P_PS_MIN_CTWIN * sTU) || usCtWindow > usBeaconInterval) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("CTWindow is not valid (%d)\n", pP2PInfo->P2pPsConfgSet.CTWindow)); - pP2PInfo->bOppPS = FALSE; - pP2PInfo->CTWindow = 0; - } - else - { - pP2PInfo->CTWindow = pP2PInfo->P2pPsConfgSet.CTWindow; - } - - - // We don't accept both NoA with Count = 1 - if(pP2PInfo->P2pPsConfgSet.NoASet[0].bNoAEn && pP2PInfo->P2pPsConfgSet.NoASet[1].bNoAEn && - pP2PInfo->P2pPsConfgSet.NoASet[0].NoACnt == 1 && pP2PInfo->P2pPsConfgSet.NoASet[1].NoACnt == 1) - { - RT_TRACE(COMP_P2P, DBG_WARNING, ("Don't accept bith NoA with count = 1, mark NoA1 as disable\n")); - pP2PInfo->P2pPsConfgSet.NoASet[1].bNoAEn = FALSE; - } - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_TSF_TIMER, (pu1Byte)(&curTsf)); - - // Update NoA - for(i = 0; i < P2P_MAX_NUM_NOA_DESC; i ++) - { - pP2PInfo->NoADescriptors[i].bValid = pP2PInfo->P2pPsConfgSet.NoASet[i].bNoAEn; - - // If the interval is not long enough to get into awake state, mark it as no NoA. - if((pP2PInfo->P2pPsConfgSet.NoASet[i].NoADur < 4 * P2P_PS_TIMEOUT_TOLERANCE) || - ((pP2PInfo->P2pPsConfgSet.NoASet[i].NoADur + 10000) > pP2PInfo->P2pPsConfgSet.NoASet[i].NoAInt && pP2PInfo->P2pPsConfgSet.NoASet[i].NoACnt != 1 && pP2PInfo->NoADescriptors[i].bValid)) - { - pP2PInfo->NoADescriptors[i].bValid = FALSE; - RT_TRACE(COMP_P2P, DBG_WARNING, (" Setting Values are invalid: Duration (0x%08X), Interval (0x%08X) and count = %d\n", - pP2PInfo->P2pPsConfgSet.NoASet[i].NoADur, pP2PInfo->P2pPsConfgSet.NoASet[i].NoAInt, pP2PInfo->P2pPsConfgSet.NoASet[i].NoACnt)); - } - - pP2PInfo->NoADescriptors[i].CountOrType = (pP2PInfo->NoADescriptors[i].bValid) ? pP2PInfo->P2pPsConfgSet.NoASet[i].NoACnt : 0; - pP2PInfo->NoADescriptors[i].Duration = (pP2PInfo->NoADescriptors[i].bValid) ? pP2PInfo->P2pPsConfgSet.NoASet[i].NoADur : 0; - pP2PInfo->NoADescriptors[i].Interval = (pP2PInfo->NoADescriptors[i].bValid) ? pP2PInfo->P2pPsConfgSet.NoASet[i].NoAInt : 0; - if(pP2PInfo->NoADescriptors[i].bValid) - { - // Modify the start time to be the mod of beacon interval. - // If the user didn't specify the shift time, using the defualt value 500 ms. - u8StartTime = (pP2PInfo->P2pPsConfgSet.NoASet[i].bUseStartTime) ? - ((curTsf & UINT64_C(0xFFFFFFFF00000000)) | pP2PInfo->P2pPsConfgSet.NoASet[i].u4StartTime) : PlatformDivision64(curTsf, usBeaconInterval) * usBeaconInterval + 5 * usBeaconInterval; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bUseStartTime = %d, u8StartTime = 0x%08X %08X, div = 0x%08X\n", pP2PInfo->P2pPsConfgSet.NoASet[i].bUseStartTime, (u4Byte)(u8StartTime >> 32), (u4Byte)u8StartTime, (u4Byte)PlatformDivision64(curTsf, usBeaconInterval))); - - // Store the exact TSF timer for timeout reference. - pP2PInfo->NoADescriptors[i].u8StartTime = u8StartTime; - - // Extract the low 4 bytes. - pP2PInfo->NoADescriptors[i].StartTime = (u4Byte)(u8StartTime & 0xFFFFFFFF); - - nextAdvancedTsf = (pP2PInfo->NoADescriptors[i].u8StartTime & UINT64_C(0xFFFFFFFF00000000)) + UINT64_C(0x0000000100000000); - - if(pP2PInfo->NoADescriptors[i].CountOrType == 0xFF) - { // count is 255 - pP2PInfo->NoADescriptors[i].u8EndTime = UINT64_C(0xFFFFFFFFFFFFFFFF); - } - else if(pP2PInfo->NoADescriptors[i].CountOrType == 1) - { - pP2PInfo->NoADescriptors[i].u8EndTime = (u8Byte)(pP2PInfo->NoADescriptors[i].u8StartTime + pP2PInfo->NoADescriptors[i].Duration); - } - else - { - pP2PInfo->NoADescriptors[i].u8EndTime = (u8Byte)(pP2PInfo->NoADescriptors[i].u8StartTime + - (pP2PInfo->NoADescriptors[i].CountOrType * pP2PInfo->NoADescriptors[i].Interval) - - (pP2PInfo->NoADescriptors[i].Interval - pP2PInfo->NoADescriptors[i].Duration)); - } - - if(pP2PInfo->NoADescriptors[i].u8EndTime <= curTsf + 10 * sTU) // The end time is too closed to the current TSF, skip this NoA. - { - pP2PInfo->NoADescriptors[i].bValid = FALSE; - } - } - - // Reset all variables if this NoA is invalid. - if(!pP2PInfo->NoADescriptors[i].bValid) - { - PlatformZeroMemory(&pP2PInfo->NoADescriptors[i], sizeof(P2P_NOA_DESCRIPTOR)); - } - } - - // Swap the two descriptors to let the 2nd NoA descriptor end always first. - if(pP2PInfo->NoADescriptors[1].u8EndTime > pP2PInfo->NoADescriptors[0].u8EndTime) - { - P2P_NOA_DESCRIPTOR tmpP2pNoADesc; - - PlatformMoveMemory(&tmpP2pNoADesc, &pP2PInfo->NoADescriptors[1], sizeof(P2P_NOA_DESCRIPTOR)); - PlatformMoveMemory(&pP2PInfo->NoADescriptors[1], &pP2PInfo->NoADescriptors[0], sizeof(P2P_NOA_DESCRIPTOR)); - PlatformMoveMemory(&pP2PInfo->NoADescriptors[0], &tmpP2pNoADesc, sizeof(P2P_NOA_DESCRIPTOR)); - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("bOppPs = %d, CTWin = %X\n", pP2PInfo->bOppPS, pP2PInfo->CTWindow)); - for(i = 0; i < 2; i ++) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("-----NoA[%d]-----\nbValid = %d, Count = %X, Duration = 0x%08X (Dec = %d), Interval = 0x%08X (Dec = %d)\nu8StartTime = 0x%08X %08X (Low Dec = %d), \nu8EndTime = 0x%08X %08X (Low Dec = %d)\n------------\n", - i, - pP2PInfo->NoADescriptors[i].bValid, - pP2PInfo->NoADescriptors[i].CountOrType, - pP2PInfo->NoADescriptors[i].Duration, - pP2PInfo->NoADescriptors[i].Duration, - pP2PInfo->NoADescriptors[i].Interval, - pP2PInfo->NoADescriptors[i].Interval, - (u4Byte)(pP2PInfo->NoADescriptors[i].u8StartTime >> 32), - (u4Byte)(pP2PInfo->NoADescriptors[i].u8StartTime), - (u4Byte)(pP2PInfo->NoADescriptors[i].u8StartTime), - (u4Byte)(pP2PInfo->NoADescriptors[i].u8EndTime >> 32), - (u4Byte)(pP2PInfo->NoADescriptors[i].u8EndTime), - (u4Byte)(pP2PInfo->NoADescriptors[i].u8EndTime))); - } - // Reset the timeout to pass this information to timeout function. - pP2PInfo->NextTimeout = 0; - - pP2PInfo->bUpdatePsParameter = FALSE; - - if(pP2PInfo->bOppPS || pP2PInfo->NoADescriptors[0].bValid || pP2PInfo->NoADescriptors[1].bValid) - { - RT_SET_PS_LEVEL(pAdapter, RT_RF_LPS_P2P_PS); - } - - return RT_STATUS_SUCCESS; -} - -#define P2P_PS_TIME_STATE_NO_PS 0 // No State -#define P2P_PS_TIME_STATE_IN_CTWIN BIT0 // In CTWin, we shall keep awake. -#define P2P_PS_TIME_STATE_OUT_CTWIN BIT1 // Out of CTWin, we shall enter PS. -#define P2P_PS_TIME_STATE_OUT_CTWIN_CLIENT_AWAKE BIT2 // Out of CTWin, but we must keep awake for the reason of GO with at least one acitve client or our client in active mode. -#define P2P_PS_TIME_STATE_IN_1TIME_NOA0 BIT3 // In one time NoA in desc 0 -#define P2P_PS_TIME_STATE_IN_1TIME_NOA1 BIT4 // In one time NoA in desc 1 -#define P2P_PS_TIME_STATE_IN_NOA0 BIT5 // In periodic NoA in desc 0 of PS. (sleep) -#define P2P_PS_TIME_STATE_IN_NOA1 BIT6 // In periodic NoA in desc 1 of PS. (sleep) -#define P2P_PS_TIME_STATE_OUT_NOA0 BIT7 // Out of periodic NoA in desc 0 of PS. (awake) -#define P2P_PS_TIME_STATE_OUT_NOA1 BIT8 // Out of periodic NoA in desc 1 of PS. (awake) -#define P2P_PS_TIME_STATE_IN_TBTT BIT9 // In TBTT time, we shall keep active to send the Beacon - -// -// Description: -// This P2P PowerSave workitem is only scheudled for usb interface because the ps procedure -// needs to read/write the register. When the P2P ps mode is periodically occurs, it needs the -// while loop and to sleep for simulating the timeout and triggering the event to perform on/off. -// When the P2P ps mode is disabled, this workitem function is closed and scheduled new one -// at next time whenever the ps mode is set again. -// Arguments: -// [in] - pContext - -// The P2P context address. -// Return: -// None -// By Bruce, 2010-12-13. -// -VOID -P2PPsWorkItemCallback( - IN PVOID pContext - ) -{ - PP2P_INFO pP2PInfo = (PP2P_INFO)pContext; - - if(!pP2PInfo) - return; - - if(!P2P_ENABLED(pP2PInfo)) - return; - - do - { - if(RT_CANNOT_IO(pP2PInfo->pAdapter)) - break; - - pP2PInfo->usSleepTime = 0; - if(pP2PInfo->bUpdatePsParameter) - { - P2PUpdatePowerSavePara(pP2PInfo); - } - - if(pP2PInfo->psExeType == RT_P2P_PS_EXE_BY_SW_TIMER) - { // Driver Timer - P2PPsTimeout(pP2PInfo->pAdapter); - } - else if(pP2PInfo->psExeType == RT_P2P_PS_EXE_BY_HW) - { // HW caculate - P2PSetPsState(pP2PInfo, 0, 0, 0); - break; - } - else - { // Unknown state - break; - } - - // We don't need work item any more. - if(pP2PInfo->usSleepTime == 0) - break; - - if(pP2PInfo->usSleepTime > P2P_PS_TIMEOUT_TOLERANCE) - PlatformSleepUs((pP2PInfo->usSleepTime - P2P_PS_TIMEOUT_TOLERANCE)); - }while(TRUE); -} - -// -// Description: -// On receiving a P2P PS timeout event, review the TSF timer and check all the condition whether the state is going into. -// Arguemtns: -// [in] pP2PInfo - -// The P2P context. -// Return: -// None. -// By Bruce, 2010-03-18. -// -VOID -P2PPsTimeout( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); // should be the default mgnt info - PP2P_INFO pP2PInfo = pMgntInfo->pP2PInfo; - PADAPTER pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) ? pAdapter : GetFirstExtAdapter(pAdapter); - BOOLEAN bNoA0Valid = FALSE, bNoA1Valid = FALSE; - BOOLEAN bUpdatePsMode = FALSE; - u8Byte curTsf = 0, preTbtt = 0, nextTbtt = 0, timeDiff = 0; - u8Byte nextNoA0Start = 0, nextNoA1Start = 0, nextNoA0End = 0, nextNoA1End = 0, next1TimeNoAStart = 0; - u8Byte tmpNoAStartTime = 0, tmpNextDozeTime = 0; - u4Byte tmpNoAIntvl = 0, tmpNoADur = 0; - u8Byte usBeaconInterval = 0, usCTWindow = 0; - P2P_POWERSAVE_SET P2pPsSet; - u1Byte i = 0; - u4Byte P2pPsTimeState = P2P_PS_TIME_STATE_NO_PS; - u4Byte psStateToSet = P2P_PS_AWAKE; - u4Byte psSourceToSet = P2P_PS_CANCEL_ALL_PS; - u8Byte psTimeoutToSet = 0; - - - FunctionIn(COMP_P2P); - - // The role is incorrect - if(pP2PInfo->Role != P2P_GO && pP2PInfo->Role != P2P_CLIENT) - return; - - - if(P2P_CLIENT == pP2PInfo->Role && !pMgntInfo->mAssoc) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] P2P_CLIENT but not associated! Skip...\n")); - return; - } - - // No P2P PS mode and the power state is awake. - if(pP2PInfo->PsFlag == P2P_PS_CANCEL_ALL_PS && pP2PInfo->P2pPsState == P2P_PS_AWAKE && pP2PInfo->CTWindow == 0 && - pP2PInfo->NoADescriptors[0].u8StartTime == 0 && pP2PInfo->NoADescriptors[1].u8StartTime == 0) - { - return; - } - - usBeaconInterval = pP2PInfo->pAdapter->MgntInfo.dot11BeaconPeriod * sTU; - usCTWindow = pP2PInfo->CTWindow * sTU; - - if(usBeaconInterval < P2P_PS_TIMEOUT_TOLERANCE) - { - //RT_TRACE(COMP_P2P, DBG_WARNING, ("Error: usBeaconInterval(%"i64fmt"d) < %d\n", usBeaconInterval, P2P_PS_TIMEOUT_TOLERANCE)); - return; - } - - // If the interface is usb, we cannot do the p2p process directly, but schedule the workitem to - // do it instead. - // By Bruce, 2010-12-13. - - if(!PlatformIsWorkItemScheduled(&(pP2PInfo->P2PPSWorkItem))) - { - PlatformScheduleWorkItem(&(pP2PInfo->P2PPSWorkItem)); - return; - } - // The workitem is scheduled, just wait the workitem to do it. - if(pP2PInfo->usSleepTime != 0) - return; - - // - // Cleint is in the awake state, the CTWindow doen't apply now. - // if(pP2PInfo->Role == P2P_CLIENT && - // (pP2PInfo->pAdapter->MgntInfo.dot11PowerSaveMode == eActive)) - //{ - // usCTWindow = 0; - //} - - pP2PInfo->pAdapter->HalFunc.GetHwRegHandler(pP2PInfo->pAdapter, HW_VAR_TSF_TIMER, (pu1Byte)(&curTsf)); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("TSF = 0x%08X %08X (Low Dec = %d)\n", (u4Byte)(curTsf >> 32), (u4Byte)curTsf, (u4Byte)curTsf)); - - if(pP2PInfo->NextTimeout != 0 && (curTsf + P2P_PS_TIMEOUT_TOLERANCE) < pP2PInfo->NextTimeout) - { - // Ahead of time - psStateToSet = pP2PInfo->P2pPsState; - psSourceToSet = pP2PInfo->PsFlag; - psTimeoutToSet = pP2PInfo->NextTimeout; - goto setPs; - } - - // Evaluate the current TBTT and next TBTT. - if(PlatformModular64(curTsf, usBeaconInterval) > (usBeaconInterval - P2P_PS_TIMEOUT_TOLERANCE)) - { - preTbtt = (PlatformDivision64(curTsf, usBeaconInterval) + 1) * usBeaconInterval; - nextTbtt = (PlatformDivision64(curTsf, usBeaconInterval) + 2) * usBeaconInterval; - } - else - { - preTbtt = PlatformDivision64(curTsf, usBeaconInterval) * usBeaconInterval; - nextTbtt = (PlatformDivision64(curTsf, usBeaconInterval) + 1) * usBeaconInterval; - } - - PlatformZeroMemory(&P2pPsSet, sizeof(P2P_POWERSAVE_SET)); - - P2pPsSet.bOppPs = pP2PInfo->bOppPS; - P2pPsSet.CTWindow = pP2PInfo->CTWindow; - - // We shall verify if the current NoA is valid now. - for(i = 0; i < P2P_MAX_NUM_NOA_DESC; i ++) - { - P2pPsSet.NoASet[i].bNoAEn = pP2PInfo->NoADescriptors[i].bValid; - P2pPsSet.NoASet[i].NoADur = pP2PInfo->NoADescriptors[i].Duration; - P2pPsSet.NoASet[i].NoAInt = pP2PInfo->NoADescriptors[i].Interval; - P2pPsSet.NoASet[i].NoACnt = pP2PInfo->NoADescriptors[i].CountOrType; - P2pPsSet.NoASet[i].bUseStartTime = TRUE; - P2pPsSet.NoASet[i].u4StartTime = pP2PInfo->NoADescriptors[i].StartTime; - - if(pP2PInfo->NoADescriptors[i].bValid) - { - // Time 's up - if(curTsf >= pP2PInfo->NoADescriptors[i].u8EndTime - P2P_PS_TIMEOUT_TOLERANCE) - { - P2pPsSet.NoASet[i].bNoAEn = FALSE; - bUpdatePsMode = TRUE; - } - - // The upper 4 TSF timer changed. - if((curTsf & UINT64_C(0xFFFFFFFF00000000)) != (pP2PInfo->NoADescriptors[i].u8StartTime & UINT64_C(0xFFFFFFFF00000000))) - { - if(pP2PInfo->NoADescriptors[i].CountOrType != 0xFF) - { // In this case, disable this NoA no matter the end of NoA reaches. - P2pPsSet.NoASet[i].bNoAEn = FALSE; - } - else - { // It is continuous NoA, the start time can be set a new one. - P2pPsSet.NoASet[i].u4StartTime = 0; - } - - bUpdatePsMode = TRUE; - } - } - } - - if(bUpdatePsMode) - { - P2PSetPowerSaveMode(pP2PInfo, &P2pPsSet, pP2PInfo->NoAIEIndex, FALSE); - return; - } - - //3 //==============Evaluate the Current Time State===============// - //4 // (1) NoA count == 1 - if(pP2PInfo->NoADescriptors[0].bValid && - (pP2PInfo->NoADescriptors[0].u8StartTime <= (curTsf + P2P_PS_TIMEOUT_TOLERANCE))) - { - bNoA0Valid = TRUE; - } - - if(pP2PInfo->NoADescriptors[1].bValid && - (pP2PInfo->NoADescriptors[1].u8StartTime <= (curTsf + P2P_PS_TIMEOUT_TOLERANCE))) - { - bNoA1Valid = TRUE; - } - - // Note: - // We assum that no two 1 Time NoA can run concurrently. - // 1 Time NoA - if(pP2PInfo->NoADescriptors[0].CountOrType == 1) - { - if(bNoA0Valid) - { // 1Time NoA had Started - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_1TIME_NOA0; - } - else if(P2pPsSet.NoASet[0].bNoAEn) - { - next1TimeNoAStart = pP2PInfo->NoADescriptors[0].u8StartTime; - } - } - else if(pP2PInfo->NoADescriptors[1].CountOrType == 1) - { - if(bNoA0Valid) - { // 1Time NoA had Started - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_1TIME_NOA1; - } - else if(P2pPsSet.NoASet[1].bNoAEn) - { - next1TimeNoAStart = pP2PInfo->NoADescriptors[1].u8StartTime; - } - } - - //4 // (2) TBTT - // Under this case, the NIC just sends the Beacon Frame only, but no data frames. - if((PlatformModular64(curTsf, usBeaconInterval) < P2P_PS_TIMEOUT_TOLERANCE) || - (PlatformModular64(curTsf, usBeaconInterval) > usBeaconInterval - P2P_PS_TIMEOUT_TOLERANCE)) - { - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_TBTT; - } - - //4 // (3) CTWindow - if(usCTWindow > 0) - { // Caculate if we are out of CTWindow - if((PlatformModular64(curTsf, usBeaconInterval) < (usCTWindow - P2P_PS_TIMEOUT_TOLERANCE)) || - (PlatformModular64(curTsf, usBeaconInterval) > (usBeaconInterval - P2P_PS_TIMEOUT_TOLERANCE))) - { - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_CTWIN; - } - else - { - // We are out of CTWin - P2pPsTimeState |= P2P_PS_TIME_STATE_OUT_CTWIN; - - // We need to check if any client is in active mode (including ourself if we are client mode). - if(pP2PInfo->Role == P2P_GO) - { // Check if the GO shall keep awake. - PRT_WLAN_STA pEntry = NULL; - - // Find out if any station is in active mode; - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i ++) - { - pEntry = AsocEntry_EnumStation(pExtAdapter, i); - - if(!pEntry) - continue; - - if(!pEntry->bPowerSave) - { // There is one client in active mode, don't enter PS. - P2pPsTimeState |= P2P_PS_TIME_STATE_OUT_CTWIN_CLIENT_AWAKE; - break; - } - } - } - else if(pP2PInfo->Role == P2P_CLIENT && - (pP2PInfo->pAdapter->MgntInfo.dot11PowerSaveMode == eActive)) - { // Cleint is in the awake state, the CTWindow doen't apply now. - // If there exists periodic NoA, we shall follow the rule of NoA. - P2pPsTimeState |= P2P_PS_TIME_STATE_OUT_CTWIN_CLIENT_AWAKE; - } - } - } - - //4 // (4) NoA Count > 1 - if(bNoA0Valid && (pP2PInfo->NoADescriptors[0].CountOrType > 1)) - { - tmpNoAStartTime = pP2PInfo->NoADescriptors[0].u8StartTime; - tmpNoAIntvl = pP2PInfo->NoADescriptors[0].Interval; - tmpNoADur = pP2PInfo->NoADescriptors[0].Duration; - - timeDiff = (curTsf < tmpNoAStartTime) ? 0: (curTsf - tmpNoAStartTime); - - if(PlatformModular64(timeDiff, tmpNoAIntvl) < (tmpNoADur - P2P_PS_TIMEOUT_TOLERANCE)) - { - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_NOA0; - nextNoA0End = tmpNoAStartTime + (PlatformDivision64(timeDiff, tmpNoAIntvl) * tmpNoAIntvl + tmpNoADur); - } - else if(PlatformModular64(timeDiff, tmpNoAIntvl) > (tmpNoAIntvl - P2P_PS_TIMEOUT_TOLERANCE)) - { - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_NOA0; - nextNoA0End = tmpNoAStartTime + ((PlatformDivision64(timeDiff, tmpNoAIntvl) + 1) * tmpNoAIntvl + tmpNoADur); - } - else - { - P2pPsTimeState |= P2P_PS_TIME_STATE_OUT_NOA0; - nextNoA0Start = tmpNoAStartTime + ((PlatformDivision64(timeDiff, tmpNoAIntvl) + 1) * tmpNoAIntvl); - } - } - if(bNoA1Valid && (pP2PInfo->NoADescriptors[1].CountOrType > 1)) - { - tmpNoAStartTime = pP2PInfo->NoADescriptors[1].u8StartTime; - tmpNoAIntvl = pP2PInfo->NoADescriptors[1].Interval; - tmpNoADur = pP2PInfo->NoADescriptors[1].Duration; - - timeDiff = (curTsf < tmpNoAStartTime) ? 0: (curTsf - tmpNoAStartTime); - - if(PlatformModular64(timeDiff, tmpNoAIntvl) < (tmpNoADur - P2P_PS_TIMEOUT_TOLERANCE)) - { - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_NOA1; - nextNoA1End = tmpNoAStartTime + (PlatformDivision64(timeDiff, tmpNoAIntvl) * tmpNoAIntvl + tmpNoADur); - } - else if(PlatformModular64(timeDiff, tmpNoAIntvl) > (tmpNoAIntvl - P2P_PS_TIMEOUT_TOLERANCE)) - { - P2pPsTimeState |= P2P_PS_TIME_STATE_IN_NOA1; - nextNoA1End = tmpNoAStartTime + ((PlatformDivision64(timeDiff, tmpNoAIntvl) + 1) * tmpNoAIntvl + tmpNoADur); - } - else - { - P2pPsTimeState |= P2P_PS_TIME_STATE_OUT_NOA1; - nextNoA1Start = tmpNoAStartTime + ((PlatformDivision64(timeDiff, tmpNoAIntvl) + 1) * tmpNoAIntvl); - } - } - - //3 //==============Evaluate the Ps State and Timeout value===============// - - //4 // 1-Time NoA - if(P2pPsTimeState & P2P_PS_TIME_STATE_IN_1TIME_NOA0) - { - psTimeoutToSet = pP2PInfo->NoADescriptors[0].u8EndTime; - psSourceToSet = P2P_PS_ENTER_PS_BY_1TIME_NOA; - psStateToSet = P2P_PS_DOZE_SEND_MGNT; - goto setPs; - } - - if(P2pPsTimeState & P2P_PS_TIME_STATE_IN_1TIME_NOA1) - { - psTimeoutToSet = pP2PInfo->NoADescriptors[1].u8EndTime; - psSourceToSet = P2P_PS_ENTER_PS_BY_1TIME_NOA; - psStateToSet = P2P_PS_DOZE_SEND_MGNT; - goto setPs; - } - - //4 // CTWindow. - if(P2pPsTimeState & P2P_PS_TIME_STATE_IN_CTWIN) - { - tmpNextDozeTime = preTbtt + usCTWindow; - - // Next 1 Time NoA is earlier than the End of CTWin. - if(next1TimeNoAStart > 0 && next1TimeNoAStart < tmpNextDozeTime) - tmpNextDozeTime = next1TimeNoAStart; - - psTimeoutToSet = tmpNextDozeTime; - psSourceToSet = P2P_PS_LEAVE_PS_BY_CTWIN_TBTT; - psStateToSet = P2P_PS_AWAKE; - goto setPs; - } - else if(P2pPsTimeState & P2P_PS_TIME_STATE_OUT_CTWIN) - { - if(!(P2pPsTimeState & P2P_PS_TIME_STATE_OUT_CTWIN_CLIENT_AWAKE)) - { // Out of CTWin (the priority is higher than periodic NoA), Next TBTT must wake up. - psTimeoutToSet = nextTbtt; - psSourceToSet = P2P_PS_ENTER_PS_BY_CTWIN; - psStateToSet = P2P_PS_DOZE; - goto setPs; - } - } - - //4 // Periodic NoA - if(P2pPsTimeState & (P2P_PS_TIME_STATE_IN_NOA0 | P2P_PS_TIME_STATE_IN_NOA1)) - { - if(P2pPsTimeState & P2P_PS_TIME_STATE_IN_TBTT) - { // After sending Beacon (Mgnt frame), go back dozed. - if(PlatformModular64(curTsf, usBeaconInterval) < P2P_PS_TIMEOUT_TOLERANCE) - { - tmpNextDozeTime = (PlatformDivision64(curTsf, usBeaconInterval) * usBeaconInterval + 5000); - } - else - { - tmpNextDozeTime = ((PlatformDivision64(curTsf, usBeaconInterval) + 1) * usBeaconInterval + 5000); - } - psTimeoutToSet = tmpNextDozeTime; - psSourceToSet = P2P_PS_LEAVE_PS_BY_TBTT; - psStateToSet = P2P_PS_DOZE_SEND_MGNT; - goto setPs; - } - else - { // Enter dozed state and caculate the next awake time. - u8Byte tmpNextAwakeTime = nextNoA0End; - - // If the NoA1 and NoA2 are overlapped, caculate the latest end time of NoA. - if(tmpNextAwakeTime < nextNoA1End) - tmpNextAwakeTime = nextNoA1End; - - // Do not cross the TBTT - if(tmpNextAwakeTime > nextTbtt) - tmpNextAwakeTime = nextTbtt; - - psTimeoutToSet = tmpNextAwakeTime; - psSourceToSet = P2P_PS_ENTER_PS_BY_PERIODIC_NOA; - psStateToSet = P2P_PS_DOZE; - goto setPs; - } - } - else if(P2pPsTimeState & (P2P_PS_TIME_STATE_OUT_NOA0 | P2P_PS_TIME_STATE_OUT_NOA1)) - { // Enter Awake state and caculate the next doze time. - if(pP2PInfo->Role == P2P_CLIENT) - { - // Retrigger if the previous SP is ended by the NoA. - if(!IN_LEGACY_POWER_SAVE(pMgntInfo->pStaQos) && pP2PInfo->bEospByNoA) - { - u1Byte AC = 0; - if(GET_VO_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd)) - AC = 7; - else if(GET_VI_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd)) - AC = 5; - else if(GET_BE_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd)) - AC = 3; - else if(GET_BK_UAPSD(pMgntInfo->pStaQos->Curr4acUapsd)) - AC = 2; - - SendQoSNullFunctionData(pP2PInfo->pAdapter, pMgntInfo->Bssid, AC, TRUE); - pMgntInfo->pStaQos->bInServicePeriod = TRUE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PPSTimeout(): Re-trigger the SP!\n")); - } - } - pP2PInfo->bEospByNoA = FALSE; - - tmpNextDozeTime = nextNoA0Start; - // Find the earliet NoA start time - if(nextNoA1Start > 0 && tmpNextDozeTime > nextNoA1Start) - tmpNextDozeTime = nextNoA1Start; - - // If the next doze time cross TBTT, set the timeout to TBTT - if(tmpNextDozeTime > 0 && tmpNextDozeTime > nextTbtt) - tmpNextDozeTime = nextTbtt; - - psTimeoutToSet = tmpNextDozeTime; - psSourceToSet = P2P_PS_LEAVE_PS_BY_NOA; - psStateToSet = P2P_PS_AWAKE; - goto setPs; - } - else - { // No one Periodic NoA is valid, and this state shall be kept awake until next CTWin comes, or all clients enter dozed, or one NoA becomes valid. - // If next CTWin exists, set the next doze time as next CTWin because we will keep awake cross the next TBTT until the end of CTWin. - tmpNextDozeTime = (usCTWindow > 0 && pP2PInfo->bOppPS) ? (nextTbtt + usCTWindow) : 0; - - // Next NoA0 start time. - if(pP2PInfo->NoADescriptors[0].bValid && pP2PInfo->NoADescriptors[0].u8StartTime > curTsf) - { - if(tmpNextDozeTime == 0 || pP2PInfo->NoADescriptors[0].u8StartTime < tmpNextDozeTime) - tmpNextDozeTime = pP2PInfo->NoADescriptors[0].u8StartTime; - } - - // Next NoA1 start time comes earlier than NoA1 - if(pP2PInfo->NoADescriptors[1].bValid && pP2PInfo->NoADescriptors[1].u8StartTime > curTsf) - { - if(tmpNextDozeTime == 0 || pP2PInfo->NoADescriptors[1].u8StartTime < tmpNextDozeTime) - tmpNextDozeTime = pP2PInfo->NoADescriptors[1].u8StartTime; - } - - if(P2pPsTimeState & P2P_PS_TIME_STATE_OUT_CTWIN_CLIENT_AWAKE) - { - psTimeoutToSet = tmpNextDozeTime; - psSourceToSet = P2P_PS_LEAVE_PS_BY_OUT_CTWIN_ClIENT_AWAKE; - psStateToSet = P2P_PS_AWAKE; - goto setPs; - } - else - { - psTimeoutToSet = tmpNextDozeTime; - psSourceToSet = P2P_PS_CANCEL_ALL_PS; - psStateToSet = P2P_PS_AWAKE; - goto setPs; - } - } - -setPs: - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2pPsTimeState = 0x%X, TimeDiff = %d\n", P2pPsTimeState, (u4Byte)(psTimeoutToSet - curTsf))); - pP2PInfo->usSleepTime = (u4Byte)(psTimeoutToSet - curTsf); - if(psTimeoutToSet < (curTsf + P2P_PS_TIMEOUT_TOLERANCE) && psTimeoutToSet != 0) - { - RT_TRACE(COMP_P2P, DBG_WARNING, ("P2PPsTimeout(): psTimeoutToSet = Timeout is less than TSF\n")); - } - - // Temp solution for P2P Test Plan 6.1.13 and 7.1.5. By Bruce, 2010-06-30. - if(P2pPsTimeState & (P2P_PS_TIME_STATE_IN_NOA0 | P2P_PS_TIME_STATE_IN_NOA1) || psSourceToSet & P2P_PS_ENTER_PS_BY_PERIODIC_NOA) - { - // Check the WMM-PS SPs are ended by the NoAs. - // Temp solution for P2P Test Plan 6.1.13 and 7.1.5. By Bruce, 2010-06-30. - if(pP2PInfo->Role == P2P_GO) - { - PRT_WLAN_STA pEntry = NULL; - - // Find out if any station in active mode; - // If any client of P2P client in WMM-PS mode, end its SP. - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - while(pAdapter != NULL) - { - if(pAdapter->pNdis62Common->PortType == EXT_P2P_ROLE_PORT && pP2PInfo->Role == P2P_GO) - break; - pExtAdapter = GetNextExtAdapter(pAdapter); - } - if(pExtAdapter == NULL) - return; - } - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i ++) - { - pEntry = AsocEntry_EnumStation(pExtAdapter, i); - if(!pEntry) - break; - - if(pEntry->bPowerSave && ((pEntry->WmmStaQosInfo & 0xF) != 0)) - { - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "P2PPsTimeout(): End SP for the client: ", pEntry->MacAddr); - // if(RTIsListNotEmpty(&(pEntry->WmmPsQueue))) - // { - // RT_TRACE(COMP_P2P, DBG_LOUD, ("Some WMM packets for this client, need trigger frame!\n")); - // } - } - } - } - else if(pP2PInfo->Role == P2P_CLIENT) - { - // End the SP, and mark the SP is ended by the NoA, and we shall re-trigger if the NoA is in presence period. - if(!IN_LEGACY_POWER_SAVE(pMgntInfo->pStaQos) && IS_WIFI_POWER_SAVE(pMgntInfo) && pMgntInfo->pStaQos->bInServicePeriod && pMgntInfo->pStaQos->bWmmMoreData) - { - pMgntInfo->pStaQos->bInServicePeriod = FALSE; - pP2PInfo->bEospByNoA = TRUE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PPsTimeout(): Cleint SP is ended by the NoA\n")); - } - } - } - - P2PSetPsState(pP2PInfo, psSourceToSet, (P2P_PS_STATE)psStateToSet, psTimeoutToSet); - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PPsTimeout(): <=====\n")); - return; -} - -VOID -P2PInitializeTimer( - PADAPTER pAdapter -) -{ - - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PP2P_INFO pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; - - PlatformInitializeTimer(pAdapter, &(pP2PInfo->P2PMgntTimer), (RT_TIMER_CALL_BACK)P2PMgntTimerCallback, NULL, "P2PMgntTimer"); - PlatformInitializeTimer(pAdapter, &(pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer), (RT_TIMER_CALL_BACK)P2PWaitForWpsReadyTimerCallback, NULL, "P2PWaitForWpsReadyTimer"); - PlatformInitializeTimer(pAdapter, &(pP2PInfo->P2POidPostProcessTimer), (RT_TIMER_CALL_BACK)P2POidPostProcessTimerCallback, NULL, "P2POidPostProcessTimer"); - - pP2PInfo->P2PActionTimer = ActionTimerAllocate( - pAdapter, - "P2PActionTimer", - HW_TSF_CLOCK, - HW_TSF_CLOCK_PS_TIMER - ); -} - -VOID -P2PCancelTimer( - PADAPTER pAdapter -) -{ - - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PP2P_INFO pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; - - PlatformCancelTimer(pAdapter, &(pP2PInfo->P2PMgntTimer)); - PlatformCancelTimer(pAdapter, &(pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer)); - PlatformCancelTimer(pAdapter, &(pP2PInfo->P2POidPostProcessTimer)); -} - -VOID -P2PReleaseTimer( - PADAPTER pAdapter -) -{ - - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PP2P_INFO pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; - - PlatformReleaseTimer(pAdapter, &(pP2PInfo->P2PMgntTimer)); - PlatformReleaseTimer(pAdapter, &(pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer)); - PlatformReleaseTimer(pAdapter, &(pP2PInfo->P2POidPostProcessTimer)); - - ActionTimerRelease(pAdapter, pP2PInfo->P2PActionTimer); -} - -static VOID -P2PActionTimerCallback( - const ACTION_TIMER_ITEM * const pOneShotActionItem -) -{ - PADAPTER pAdapter = (PADAPTER) pOneShotActionItem->pContext; - - P2PPsTimeout(pAdapter); -} - -// -// Description: -// Save the P2P PS state and time value and configure the HW setting. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// [in] Source - -// Identify the reason why the PS state is going. -// [in] P2pState - -// The P2P power save state to set. -// [in] Timeout - -// The next timeout value. -// Return: -// None. -// -VOID -P2PSetPsState( - IN PP2P_INFO pP2PInfo, - IN u4Byte Source, - IN P2P_PS_STATE P2pState, - IN u8Byte Timeout - ) -{ - PADAPTER pAdapter = NULL; - ACTION_TIMER_ITEM ActionItem; - PMGNT_INFO pMgntInfo = NULL; - - if(!P2P_ENABLED(pP2PInfo)) - return; - - pAdapter = pP2PInfo->pAdapter; - pMgntInfo = &pAdapter->MgntInfo; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Source = 0x%X, P2pState = 0x%X, Timeout = 0x%08X %08X (Low Dec = %d)\n", Source, P2pState, (u4Byte)(Timeout >> 32), (u4Byte)Timeout, (u4Byte)Timeout)); - - pP2PInfo->P2pPsState = P2pState; - pP2PInfo->PsFlag = Source; - pP2PInfo->NextTimeout = Timeout; - - if(pMgntInfo->bWiFiConfg) - { - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_P2P_PS_MODE, (pu1Byte)pP2PInfo); - } - else - { - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_FCS_NOA, (pu1Byte)pP2PInfo); - } - - // Set up the HW timer - if(RT_P2P_PS_EXE_BY_SW_HW_TIMER == pP2PInfo->psExeType) - { - // + Flush the previous Action Item - ActionTimerFlushActionItem(pAdapter, pP2PInfo->P2PActionTimer, ACTION_TYPE_P2P_POWERSAVE); - - PlatformZeroMemory(&ActionItem, sizeof(ActionItem)); - - ActionItem.ActionType = ACTION_TYPE_P2P_POWERSAVE; - ActionItem.CallbackFunc = P2PActionTimerCallback; - ActionItem.pContext = pP2PInfo->pAdapter; - ActionItem.usTimeout = pP2PInfo->NextTimeout; - - ActionTimerRegisterActionItem(pAdapter, &ActionItem, pP2PInfo->P2PActionTimer); - } - -} - -// -// Description: -// When the TSD BIT32 toggled (which means this bit changed), call this function to reset the -// P2P NoA power save parameter. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// Return: -// None. -// By Bruce, 2011-03-03. -// -VOID -P2PPsTsf_Bit32_Toggle( - IN PP2P_INFO pP2PInfo - ) -{ - P2P_POWERSAVE_SET P2pPsSet; - u1Byte i = 0; - BOOLEAN bUpdatePsMode = FALSE; - - if(!P2P_ENABLED(pP2PInfo)) - return; - - if((P2P_GO != pP2PInfo->Role) && (P2P_CLIENT != pP2PInfo->Role)) - return; - - PlatformZeroMemory(&P2pPsSet, sizeof(P2P_POWERSAVE_SET)); - - P2pPsSet.bOppPs = pP2PInfo->bOppPS; - P2pPsSet.CTWindow = pP2PInfo->CTWindow; - - // We shall verify if the current NoA is valid now. - for(i = 0; i < P2P_MAX_NUM_NOA_DESC; i ++) - { - if(P2P_GO == pP2PInfo->Role) - { - // Re-enable the NoA. - // If the role is client, no need to set noa parameters. - P2pPsSet.NoASet[i].bNoAEn = pP2PInfo->NoADescriptors[i].bValid; - P2pPsSet.NoASet[i].NoADur = pP2PInfo->NoADescriptors[i].Duration; - P2pPsSet.NoASet[i].NoAInt = pP2PInfo->NoADescriptors[i].Interval; - P2pPsSet.NoASet[i].NoACnt = pP2PInfo->NoADescriptors[i].CountOrType; - - if(MultiChannel_IsFCSInProgress(pP2PInfo->pAdapter)) - { - // Re-calculate NoAStartTime for FCS - u1Byte NoAStart = 0; - u8Byte uCurrentTsf = 0; - u8Byte uNoAStartTsf = 0; - PMGNT_INFO pMgntInfo = &(pP2PInfo->pAdapter->MgntInfo); - - pP2PInfo->pAdapter->HalFunc.GetHwRegHandler(pP2PInfo->pAdapter, HW_VAR_TSF_TIMER, (pu1Byte)(&uCurrentTsf)); - MultiChannelGetFcsCommonInfo(pP2PInfo->pAdapter, MULTICHANNEL_FCS_COMMON_NOA_STARTTIME, &NoAStart); - uNoAStartTsf = uCurrentTsf - PlatformModular64(uCurrentTsf, pMgntInfo->dot11BeaconPeriod*sTU); - uNoAStartTsf += NoAStart*sTU; - uNoAStartTsf += (pMgntInfo->dot11BeaconPeriod)*sTU; // next beacon - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("Start NoA TSF 0x%08X %08X modular %d\n", (u4Byte)(uNoAStartTsf>>32), (u4Byte)uNoAStartTsf, (u4Byte)PlatformModular64(uNoAStartTsf, pMgntInfo->dot11BeaconPeriod*sTU))); - - P2pPsSet.NoASet[i].bUseStartTime = TRUE; - P2pPsSet.NoASet[i].u4StartTime = (u4Byte)uNoAStartTsf & 0xffffffff; - } - else - { - P2pPsSet.NoASet[i].bUseStartTime = FALSE; - P2pPsSet.NoASet[i].u4StartTime = pP2PInfo->NoADescriptors[i].StartTime; - } - } - - if(pP2PInfo->NoADescriptors[i].bValid) - { - bUpdatePsMode = TRUE; - } - } - - if(bUpdatePsMode) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reset the P2P PS for NoA\n")); - if(MultiChannel_IsFCSInProgress(pP2PInfo->pAdapter)) - { - P2PSetPowerSaveMode(pP2PInfo, &P2pPsSet, 0, 0); - pP2PInfo->pAdapter->HalFunc.SetHwRegHandler(pP2PInfo->pAdapter, HW_VAR_FCS_NOA, (pu1Byte)pP2PInfo); - } - else - { - P2PSetPowerSaveMode(pP2PInfo, &P2pPsSet, pP2PInfo->NoAIEIndex, FALSE); - } - } - return; -} - -// -// Description: -// Notify the client has changed its power save state and we shall update it so that the -// P2P GO can enter PS or leave PS for CTWin. -VOID -P2PNotifyClientPSChange( - IN PP2P_INFO pP2PInfo - ) -{ - PADAPTER pAdapter = NULL, pExtAdapter = NULL; - u1Byte i = 0; - PRT_WLAN_STA pEntry = NULL; - BOOLEAN bAllClientSleep = TRUE; - - if(!P2P_ENABLED(pP2PInfo)) - return; - - pAdapter = pP2PInfo->pAdapter; - - pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) ? pP2PInfo->pAdapter : GetFirstExtAdapter(pP2PInfo->pAdapter); - - - if(pP2PInfo->Role != P2P_GO) - return; - - if(!pP2PInfo->bOppPS) - return; - - if(pP2PInfo->psExeType == RT_P2P_PS_EXE_BY_HW) - { - // Find out if any station is in active mode; - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i ++) - { - pEntry = AsocEntry_EnumStation(pExtAdapter, i); - - if(!pEntry) - continue; - - if(!pEntry->bAssociated) - continue; - - if(!pEntry->bPowerSave) - { // There is one client in active mode, don't enter PS. - bAllClientSleep = FALSE; - break; - } - } - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_P2P_CLIENT_PS_STATE, (pu1Byte)&bAllClientSleep); - } -} - - -// -// Description: -// The P2P watch dog for monitoring the status on P2P. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// Return: -// None. -// By Bruce, 2010-03-20. -// -VOID -P2POnLinkStatusWatchdog( - IN PADAPTER Adapter - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - u8Byte CurrentTime = 0; - BOOLEAN bFirstDevicePortEnabled = FALSE; - PADAPTER pDevAadpter = NULL; - - - if(!pP2PInfo) - return; - else if(!P2P_ENABLED(pP2PInfo)) - return; - - P2PSvc_OnWatchdog(pP2PInfo->pP2PSvcInfo); - pDevAadpter = GetFirstDevicePort(Adapter); - if(!pDevAadpter) - return; - else - { - PP2P_INFO pP2PDevInfo = GET_P2P_INFO(pDevAadpter); - bFirstDevicePortEnabled = (pP2PDevInfo->uListenStateDiscoverability == 0)?FALSE:TRUE; - } - - if(P2P_ADAPTER_OS_SUPPORT_P2P(Adapter) && GetFirstGOPort(Adapter) == NULL && GetFirstClientPort(Adapter) == NULL && bFirstDevicePortEnabled == FALSE) - { - return; - } - - if(pP2PInfo->Role == P2P_GO && pP2PInfo->pAdapter->MgntInfo.mAssoc) - { - //if(pP2PInfo->ManagedUpdateCnt == 0) - { // Update the P2P managed info - PRT_WLAN_BSS pBssDesc = NULL; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_SCAN_SPINLOCK); - pBssDesc = BssDescDupByBssid(pP2PInfo->pAdapter, pP2PInfo->pAdapter->MgntInfo.Bssid); - - if(pBssDesc) - { - if(pBssDesc->P2PManagedInfo & maP2PDeviceManagement) - P2PUpdateWlanApManagedInfo(pP2PInfo, pBssDesc); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_SCAN_SPINLOCK); - pP2PInfo->ManagedUpdateCnt = P2P_UPDATE_MANAGED_INFO_PERIOD; - } - //else - // pP2PInfo->ManagedUpdateCnt --; - } - - CurrentTime = PlatformGetCurrentTime(); - - if(CurrentTime - pP2PInfo->LastTimerFired > 2000000) // 2sec - {// the timer callback has not been executed for more than 2 sec - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2POnLinkStatusWatchdog(): re-fire timer\n")); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - - if(pP2PInfo->bOppPS || pP2PInfo->NoADescriptors[0].bValid || pP2PInfo->NoADescriptors[1].bValid) - { - if(RT_P2P_PS_EXE_BY_SW_HW_TIMER == pP2PInfo->psExeType) - P2PPsTimeout(Adapter); - } -} - -// -// Description: -// Issue a client's presence request to the AP for the specified NoA. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// [in] pP2pPs - -// The address of P2P power save setting. -// Return: -// If success, return RT_STATUS_SUCCESS; Otherwise, return an error code. -// By Bruce, 2010-05-06. -// -u4Byte -P2PPresenceReq( - IN PP2P_INFO pP2PInfo, - IN PP2P_POWERSAVE_SET pP2pPs - ) -{ - if(pP2PInfo == NULL || pP2pPs == NULL) - return RT_STATUS_FAILURE; - - // Only sent by p2p client. - if(pP2PInfo->Role != P2P_CLIENT) - return RT_STATUS_FAILURE; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PPresenceReq()=====>\n")); - - p2p_Send_PresenceReq(pP2PInfo, pP2pPs, pP2PInfo->pAdapter->MgntInfo.Bssid, 1); - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Handle the P2P presence request from the client in the GO. If the GO accept the NoA, it will change its NoA attribute -// and broadcast this info in the Beacon frame. The GO then sends the Presence Response with status which determines -// the GO accept the client's request or not. -// Arguments: -// See P2P_OnBeacon() -// Return: -// Return RT_STATUS_SUCCESS if the parsing succeeds. -// By Bruce, 2010-05-07. -// -RT_STATUS -P2P_OnPresenceReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - P2P_POWERSAVE_SET tmpP2PPsSet; - u1Byte Status = P2P_STATUS_SUCCESS; - u1Byte NoADesc = 0, PreType, DiagToken, i; - u4Byte PreNoADuration, PreNoAInterval; - BOOLEAN bMyClient = TRUE; - pu1Byte pSaAddr = Frame_pTaddr(*posMpdu); - - P2P_MESSAGE msg; - - if(!P2P_ENABLED(GET_P2P_INFO(pAdapter))) - return RT_STATUS_SUCCESS; - - FunctionIn(COMP_P2P); - - if(pP2PInfo->Role != P2P_GO) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] The role is not Go!\n")); - return RT_STATUS_INVALID_STATE; - } - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2P_OnDeviceDiscoverabilityRsp():\n", posMpdu->Octet, posMpdu->Length); - - do - { - if(RT_STATUS_SUCCESS == (rtStatus = p2p_parse_Action(posMpdu, DBG_LOUD, &msg))) - if(!p2p_validate_PresenceReq(&msg)) - { - rtStatus = RT_STATUS_MALFORMED_PKT; - break; - } - - // Check if this is our client's request. - if(P2PClientInfoFindByInterfaceAddress(pP2PInfo, pSaAddr) == NULL) - { - bMyClient = FALSE; - RT_PRINT_ADDR(COMP_P2P, DBG_WARNING, "P2P_OnPresenceReq():[WARNING] not my client: ", pSaAddr); - // return; - } - - PlatformZeroMemory(&tmpP2PPsSet, sizeof(P2P_POWERSAVE_SET)); - - // Fill the CTWin. The Presence request does not apply in this field. - tmpP2PPsSet.bOppPs = pP2PInfo->bOppPS; - tmpP2PPsSet.CTWindow = pP2PInfo->CTWindow; - - NoADesc = (msg.noaLen == (13 + 2)) ? 1 : (msg.noaLen == (2 * 13 + 2)) ? 2 : 0; - - // Invalid Length - if(msg.noaLen != 2 && NoADesc == 0) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Invalid Length!!\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - DiagToken = GET_P2P_VENDOR_ACT_FRAME_DIALOG_TOKEN(posMpdu->Octet); - - for(i = 0; i < NoADesc; i ++) - { - PreType = ReadEF1Byte(msg._noa + (13 * i) + 2); - PreNoADuration = ReadEF4Byte(msg._noa + (13 * i) + 3); - PreNoAInterval = ReadEF4Byte(msg._noa + (13 * i) + 7); - - if(PreType < 1 || PreType > 2) - { // NoA Type is invalid. - Status = P2P_STATUS_FAIL_INVALID_PARAMETERS; - break; - } - - // The duration or interval is not acceptable. - if(PreNoADuration < 1024 || PreNoADuration > PreNoAInterval) - { // NoA count is invalid. - Status = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - break; - } - - tmpP2PPsSet.NoASet[i].bNoAEn = ((PreNoAInterval - PreNoADuration) > 0) ? TRUE : FALSE; // If the PreNoAInterval equals to duration, that means the client needs always be awake. - tmpP2PPsSet.NoASet[i].NoACnt = 0xFF; - tmpP2PPsSet.NoASet[i].NoADur = (PreNoAInterval - PreNoADuration); - tmpP2PPsSet.NoASet[i].NoAInt = PreNoAInterval; - } - - // We don't accpet the presence request for any client, because we do not support NoA/Opps in all ICs. - // By Bruce, 2010-12-15. - Status = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - - if(Status == P2P_STATUS_SUCCESS) - P2PSetPowerSaveMode(pP2PInfo, &tmpP2PPsSet, 0, TRUE); - - p2p_Send_PresenceRsp(pP2PInfo, pSaAddr, DiagToken, Status); - }while(FALSE); - - p2p_parse_FreeMessage(&msg); - - return rtStatus; -} - -// -// Description: -// Update the managed information from the AP which supports P2P managed device. -// Arguments: -// [in] pP2PInfo - -// The P2P context. -// [in] pBssDesc - -// The BSS descriptor from the scan list. -// Return: -// None. -// By Bruce, 2010-05-14. -// -VOID -P2PUpdateWlanApManagedInfo( - IN PP2P_INFO pP2PInfo, - IN PRT_WLAN_BSS pBssDesc - ) -{ - PRT_AP_INFO pApInfo = NULL; - - // We need check if the BSS support P2P device management, but now the WLAN AP may not have this info in Beacon, - // and it just disassociates us with the P2P deauth reason. Check this bit if the test plan has modified. By Bruce, 2010-05-14. - // if(!(pBssDesc->P2PManagedInfo & maP2PDeviceManagement)) - // return; - - PADAPTER pDefaultAdapter = GetDefaultAdapter(pP2PInfo->pAdapter); - PADAPTER pAdapter = pDefaultAdapter; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - while(pAdapter!=NULL) - { - if(pAdapter->pNdis62Common->PortType == EXT_P2P_ROLE_PORT && pP2PInfo->Role == P2P_GO) - break; - pAdapter = GetNextExtAdapter(pAdapter); - } - if(pAdapter == NULL) - return; - } - - pApInfo = (PRT_AP_INFO)(pAdapter->MgntInfo.pApModeInfo); - - if(pBssDesc->osWmmAcParaIE.Length == WMM_PARAM_ELEMENT_SIZE) - { - CopyMemOS(&pApInfo->osWmmAcParaIE, pBssDesc->osWmmAcParaIE, WMM_PARAM_ELEMENT_SIZE) - pApInfo->bSupportWmm = TRUE; - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PUpdateWlanApManagedInfo() osWmmAcParaIE:\n", pApInfo->osWmmAcParaIE.Octet, pApInfo->osWmmAcParaIE.Length); - } - if(pBssDesc->bdCountryIE.Length > 0) - { - CopyMemOS(&pApInfo->osCountryIe, pBssDesc->bdCountryIE, pBssDesc->bdCountryIE.Length); - pApInfo->bSupportCountryIe = TRUE; - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PUpdateWlanApManagedInfo() osCountryIe:\n", pApInfo->osCountryIe.Octet, pApInfo->osCountryIe.Length); - } - if(pBssDesc->osPowerConstraintIe.Length == MAX_DOT11_POWER_CONSTRAINT_IE_LEN) - { - CopyMemOS(&pApInfo->osPowerConstraintIe, pBssDesc->osPowerConstraintIe, MAX_DOT11_POWER_CONSTRAINT_IE_LEN); - pApInfo->bSupportPowerConstraint= TRUE; - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PUpdateWlanApManagedInfo() osCountryIe:\n", pApInfo->osPowerConstraintIe.Octet, pApInfo->osPowerConstraintIe.Length); - } - - -} - -// -// Description: -// Disable the P2P mode and clear the related variables. -// Arguments: -// Return: -// None. -// By Bruce, 2010-05-14. -// -VOID -P2PDisable( - IN PADAPTER Adapter - ) -{ - BOOLEAN bBoostIgi = FALSE; - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - RT_TRACE(COMP_P2P, DBG_LOUD, ("======>P2PDisable()\n")); - - P2PSetRole(pP2PInfo, P2P_NONE); - p2p_DevList_Free(&pP2PInfo->devList); - - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - - pP2PInfo->State = P2P_STATE_DISABLED; - pP2PInfo->bUpdateFromBeacon = FALSE; - pP2PInfo->bUpdatePsParameter = FALSE; - pP2PInfo->PsFlag = 0; - pP2PInfo->NextTimeout = 0; - pP2PInfo->usSleepTime = 0; - pP2PInfo->P2pPsState = P2P_PS_AWAKE; - pP2PInfo->NoAIEIndex = 0; - pP2PInfo->bOppPS = FALSE; - pP2PInfo->CTWindow = 0; - PlatformZeroMemory(pP2PInfo->NoADescriptors, sizeof(P2P_NOA_DESCRIPTOR) * P2P_MAX_NUM_NOA_DESC); - pP2PInfo->bEospByNoA = FALSE; - - if(pP2PInfo->pProfileList) - { - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Freeing previous profile list: %u profiles\n", pP2PInfo->pProfileList->nProfiles)); - PlatformFreeMemory(pP2PInfo->pProfileList, pP2PInfo->profileListLen); - pP2PInfo->profileListLen = 0; - pP2PInfo->pProfileList = NULL; - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - } - - // Make sure the PS related HW configuration is cleared. - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_P2P_PS_MODE, (pu1Byte)pP2PInfo); - - if(P2P_ADAPTER_RTK_SUPPORT_P2P(Adapter)) - { - P2PIndicateCurrentState(pP2PInfo, pP2PInfo->State); - } - - // Free allocated memory --------------------- - P2PFreeAllocatedMemory(pP2PInfo->pAdapter); - // ----------------------------------------- - - if(P2P_ADAPTER_RTK_SUPPORT_P2P(Adapter)) - { - bBoostIgi = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_BOOST_INIT_GAIN, &bBoostIgi); - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("<======P2PDisable()\n")); -} - -VOID -P2PTranslateP2PInfoToDevDescV0( - IN PP2P_INFO pP2PInfo, - OUT PP2P_DEVICE_DESCRIPTOR_V0 pDevDesc - ) -{ - u1Byte i = 0, j = 0; - - PlatformFillMemory(pDevDesc, sizeof(PP2P_DEVICE_DESCRIPTOR_V0), 0); - - pDevDesc->Role = pP2PInfo->Role; - pDevDesc->DeviceCapability = pP2PInfo->DeviceCapability; - pDevDesc->GroupCapability = pP2PInfo->GroupCapability; - cpMacAddr(pDevDesc->DeviceAddress, pP2PInfo->DeviceAddress); - PlatformMoveMemory(&pDevDesc->WpsAttributes, &pP2PInfo->WpsAttributes, sizeof(P2P_WPS_ATTRIBUTES)); - pDevDesc->RegulatoryClass = pP2PInfo->RegulatoryClass; - pDevDesc->ListenChannel = pP2PInfo->ListenChannel; - pDevDesc->OperatingChannel = pP2PInfo->OperatingChannel; - PlatformMoveMemory(pDevDesc->CountryString, pP2PInfo->CountryString, 3); - if(RT_STATUS_SUCCESS != MgntActQuery_P2PChannelList(pP2PInfo->pAdapter, sizeof(pDevDesc->ChannelPlanChannel), &pDevDesc->ChannelPlanLength, pDevDesc->ChannelPlanChannel)) - { - RT_TRACE(COMP_P2P, DBG_WARNING, ("P2PTranslateP2PInfoToDevDesc(): MgntActQuery_P2PChannelList returns error\n")); - } - - { - u1Byte StartIndex = 0; - u1Byte CurrentIndex = 0; - PP2P_CLIENT_INFO_DISCRIPTOR pClientInfoDesc = NULL; - - pDevDesc->P2PClientDescriptorListLength = 0; - - while((pClientInfoDesc = P2PClientInfoEnumClients(pP2PInfo, StartIndex, &CurrentIndex)) != NULL) - { - PlatformMoveMemory(&(pDevDesc->P2PClientDescriptorList[pDevDesc->P2PClientDescriptorListLength]), - pClientInfoDesc, - sizeof(P2P_CLIENT_INFO_DISCRIPTOR)); - pDevDesc->P2PClientDescriptorListLength++; - - StartIndex = CurrentIndex + 1; - pClientInfoDesc = NULL; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PTranslateP2PInfoToDevDesc(): %u clients enumerated\n", pDevDesc->P2PClientDescriptorListLength)); - } - - PlatformMoveMemory(pDevDesc->SsidBuf, pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen); - pDevDesc->SsidLen = pP2PInfo->SSIDLen; - pDevDesc->GOIntent = pP2PInfo->GOIntent; - pDevDesc->GOConfigurationTimeout = pP2PInfo->GOConfigurationTimeout; - pDevDesc->ClientConfigurationTimeout = pP2PInfo->ClientConfigurationTimeout; - pDevDesc->DialogToken = pP2PInfo->DialogToken; - //cpMacAddr(pDevDesc->GroupBssid, pP2PInfo->GroupBssid); - cpMacAddr(pDevDesc->IntendedP2PInterfaceAddress, pP2PInfo->InterfaceAddress); - pDevDesc->Status = pP2PInfo->Status; - pDevDesc->MinorReasonCode = pP2PInfo->MinorReasonCode; - pDevDesc->ExtendedListenTimingPeriod = pP2PInfo->ExtListenTimingPeriod; - pDevDesc->ExtendedListenTimingDuration = pP2PInfo->ExtListenTimingDuration; -} - -VOID -P2PTranslateP2PInfoToDevDescV1( - IN PP2P_INFO pP2PInfo, - OUT PP2P_DEVICE_DESCRIPTOR_V1 pDevDesc - ) -{ - P2PTranslateP2PInfoToDevDescV0(pP2PInfo, (PP2P_DEVICE_DESCRIPTOR_V0)pDevDesc); - pDevDesc->SignalStrength = 0; -} - -u4Byte -P2PTranslateP2PInfoToDevDesc( - IN PP2P_INFO pP2PInfo, - OUT PVOID pvDevDesc - ) -{ - u4Byte BytesWritten = 0; - - if(0x00000000 == pP2PInfo->P2PVersion) - {// v0 - P2PTranslateP2PInfoToDevDescV0(pP2PInfo, (PP2P_DEVICE_DESCRIPTOR_V0)pvDevDesc); - BytesWritten = sizeof(P2P_DEVICE_DESCRIPTOR_V0); - } - else if(0x00000001 == pP2PInfo->P2PVersion) - {// v1 - P2PTranslateP2PInfoToDevDescV1(pP2PInfo, (PP2P_DEVICE_DESCRIPTOR_V1)pvDevDesc); - BytesWritten = sizeof(P2P_DEVICE_DESCRIPTOR_V1); - } - else - {// v2/v3 - PP2P_DEVICE_DESCRIPTOR_V2 pLatestDevDesc = pvDevDesc; - P2PTranslateP2PInfoToDevDescV1(pP2PInfo, (PP2P_DEVICE_DESCRIPTOR_V1)pvDevDesc); - pLatestDevDesc->version = pP2PInfo->P2PVersion; - PlatformFillMemory(pLatestDevDesc->manufacturerName, 65, 0); - BytesWritten = sizeof(P2P_DEVICE_DESCRIPTOR_V2); - } - - return BytesWritten; -} - -VOID -P2P_StartApRequest( - IN PADAPTER Adapter - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - {//DbgPrint("AP_StartApRequest: fire timer again\n"); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Fire P2PMgntTimer!\n")); - PlatformSetTimer( Adapter, &((GET_P2P_INFO(Adapter))->P2PMgntTimer), 0); - } -} - -VOID -P2P_APRemoveKey( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - if(/*pSTA->bAssociated && bAssociated has been cleared*/ pSTA->perSTAKeyInfo.SecLvl == RT_SEC_LVL_WPA2 && pSTA->perSTAKeyInfo.PairwiseCipherSuite[0] == RT_ENC_ALG_AESCCMP) - {// P2P Clients are always WPA2AES - - P2PIndicateClientDisconnected(GET_P2P_INFO(Adapter), pSTA->MacAddr); - } - } -} - - -VOID -P2P_APSetkey( - IN PADAPTER Adapter, - IN u1Byte *pucMacAddr, - IN u4Byte ulEncAlg - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - if(ulEncAlg == CAM_AES) - - { - P2PIndicateClientConnected(GET_P2P_INFO(Adapter), - pucMacAddr); - } - } -} - - -VOID -P2P_FilerCck( - IN PADAPTER Adapter, - IN OUT BOOLEAN *pbFilterCck - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - *pbFilterCck = TRUE; - } -} - -VOID -P2P_ConstructAssociateReqFilterCck( - IN PADAPTER Adapter, - IN OCTET_STRING AsocReq, - IN OUT BOOLEAN *pbFilterCck - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - if(P2PScanListIsGo(GET_P2P_INFO(Adapter), Frame_pDaddr(AsocReq))) - {// to P2P GO - *pbFilterCck = TRUE; - } - else - {// to wlan AP - *pbFilterCck = FALSE; - } - } - -} - -// -// Description: -// Determine if we shall accept this probe request when the current state is P2P GO mode. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] posMpdu - -// The location address of full 802.11 frame. -// [in] posSsidToScan - -// The SSID in this probe request. -// Return: -// Return TRUE if -// a. we shall send probe response for this probe reqeust in P2P GO mode, or -// b. this action is ignored if P2P is not enabled. -// Return FALSE if the P2P inforamtion in this packet is mismatch and we shall not send probe response. -// Remark: -// When this function returns FALSE, it means the probe requst is a P2P probe request but the check information -// is not match for our P2P GO. So this probe request must be dropped and not be responsed. -// if the SSID is P2P Wildcard SSID (DIRECT-), this function changes the length of SSID to 0 so that our -// AP can response this request by passing SSID check. -// -BOOLEAN -P2P_IsGoAcceptProbeReq( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN POCTET_STRING posSsidToScan - ) -{ - BOOLEAN bAccept = TRUE; - if(P2P_ENABLED(GET_P2P_INFO(pAdapter))) - { - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - P2P_MESSAGE msg; - - if((GetDefaultAdapter(pAdapter)->MgntInfo.RegMultiChannelFcsMode >= MULTICHANNEL_FCS_SUPPORT_GO) && - (MultiChannelSwitchNeeded(pAdapter))) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Reject p2p probe request because fw switching is running!\n")); - bAccept = FALSE; - return bAccept; - } - - if(RT_STATUS_SUCCESS != (rtStatus = p2p_parse_Ies(posMpdu, DBG_TRACE, &msg))) - { - return bAccept; - } - - GET_P2P_INFO(pAdapter)->bProbeReqByLegacyClient = (msg.p2pAttributes.os.Length) ? (FALSE) : (TRUE); - if(!GET_P2P_INFO(pAdapter)->bProbeReqByLegacyClient) - { - OCTET_STRING osWpsIE = PacketGetElement(*posMpdu, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUB_DONT_CARE); - if(P2PIsWildcardSsid(*posSsidToScan)) - {// Clause 3.2.2: P2P Wildcard SSID shall be treated the same as the Wildcard SSID - posSsidToScan->Length = 0; // so that it does not return false when SSID is neither any nor our SSID - } - - if(!P2PAcceptProbeReq(GET_P2P_INFO(pAdapter), posMpdu, &msg)) - { - bAccept = FALSE; - } - } - - p2p_parse_FreeMessage(&msg); - } - return bAccept; -} - -VOID -P2P_UpdateScanList( - IN PADAPTER Adapter - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(Adapter)) - { - - // Update the device list for the OS query ------------------ - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_COPY_TO_QUERY_LIST, - NULL, NULL, NULL - ); - - //P2PDeviceListActionInterface( - // pP2PInfo, - // P2P_DEVICE_LIST_ACTION_DUMP, - // &pP2PInfo->DeviceList, - // NULL, NULL - // ); - - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_DUMP, - &pP2PInfo->DeviceListForQuery, - NULL, NULL - ); - //---------------------------------------------------- - } - - if(P2PScanListEqual(pP2PInfo->ScanList, pP2PInfo->ScanListSize, - pP2PInfo->ScanList4Query, pP2PInfo->ScanList4QuerySize)) - { - //RT_TRACE(COMP_P2P, DBG_LOUD, - // ("ScanComplete(): scan list the same, not to update ScanList4Query\n")); - } - else - { - P2PScanListCopy(pP2PInfo->ScanList4Query, - &pP2PInfo->ScanList4QuerySize, - pP2PInfo->ScanList, - pP2PInfo->ScanListSize); - - P2PIndicateScanList(pP2PInfo); - } - - P2PSvc_OnP2PScanComplete(pP2PInfo->pP2PSvcInfo); - } - -} - - -BOOLEAN -P2P_ScanCallback( - IN PADAPTER Adapter - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); - - // - // Send 2 ProbeReq only when we are in Search State or Scan Phase. - // This is to prevent the case, for example, when we are using customized - // scan to send a ProvisionDiscReq to a P2P Device, we don't send two - // ProvisionDiscReq. - // - if(pP2PInfo->State != P2P_STATE_SEARCH && - pP2PInfo->State != P2P_STATE_SCAN) - { - //break; - return FALSE; - } - } - return TRUE; -} - - -VOID -P2P_InactivePsCallback( - IN PADAPTER pAdapter, - IN u1Byte InactievPsState - ) -{ - if(P2P_ENABLED(GET_P2P_INFO(pAdapter))) - { - // - // This workitem cancels all timer (including P2P Mgnt Timer), - // and this has an effect on our Extended Listening Counter, - // so we have to re set the timer here. - // - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - // TODO: Should not set timer in workitem - if(!GetDefaultAdapter(pAdapter)->bDriverIsGoingToUnload) - { - //if(pPSC->eInactivePowerState == eRfOff) - if(InactievPsState == eRfOff) - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - } -} - -// -// Description: -// Set the service response fragment threshold. -// Arguments: -// [in] pAdapter - -// The NIC context pointer. -// [in] serviceThreshold - -// The fragment threshold for the service threshold. -// Return: -// RT_STATUS_SUCCESS if success. Otherwise return the RT_STATUS error code. -// By Bruce, 2011-05-31. -// -RT_STATUS -P2PSetServiceFragThreshold( - IN PADAPTER pAdapter, - IN u2Byte serviceThreshold - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(!pP2PInfo) - return RT_STATUS_INVALID_CONTEXT; - - if(serviceThreshold < P2P_SERVICE_MIN_RSP_FRG_THRESHOLD || serviceThreshold > P2P_SERVICE_MAX_RSP_FRAG_THRESHOLD) - return RT_STATUS_INVALID_PARAMETER; - - pP2PInfo->SDRspFragmtntThreshold = serviceThreshold; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("P2PSetServiceFragThreshold(): Set threshold = %d\n", pP2PInfo->SDRspFragmtntThreshold)); - return RT_STATUS_SUCCESS; -} - -RT_STATUS -P2PSetProfileList( - IN PADAPTER pAdapter, - IN PP2P_PROFILE_LIST pProfileList - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - u4Byte allocSize = FIELD_OFFSET(P2P_PROFILE_LIST, profileList) + pProfileList->nProfiles * sizeof(P2P_PROFILE_LIST_ENTRY); - - if(!pP2PInfo) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("RT_STATUS_INVALID_CONTEXT\n")); - return RT_STATUS_INVALID_CONTEXT; - } - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - - do - { - if(pP2PInfo->pProfileList) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Freeing previous profile list: %u profiles\n", pP2PInfo->pProfileList->nProfiles)); - PlatformFreeMemory(pP2PInfo->pProfileList, pP2PInfo->profileListLen); - pP2PInfo->profileListLen = 0; - pP2PInfo->pProfileList = NULL; - } - - if(RT_STATUS_SUCCESS != (rtStatus = PlatformAllocateMemory(pAdapter, &pP2PInfo->pProfileList, allocSize))) - { - break; - } - - pP2PInfo->profileListLen = allocSize; - PlatformMoveMemory(pP2PInfo->pProfileList, pProfileList, allocSize); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Set profile list: %u profiles\n", pP2PInfo->pProfileList->nProfiles)); - - }while(FALSE); - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - - return rtStatus; -} - -// -// Description: -// Get the service response fragment threshold. -// Arguments: -// [in] pAdapter - -// The NIC context pointer. -// [in] pServiceThreshold - -// The fragment threshold pointer for the service threshold. -// Return: -// RT_STATUS_SUCCESS if success. Otherwise return the RT_STATUS error code. -// By Bruce, 2011-05-31. -// -RT_STATUS -P2PGetServiceFragThreshold( - IN PADAPTER pAdapter, - IN pu2Byte pServiceThreshold - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(!pP2PInfo || !pServiceThreshold) - return RT_STATUS_INVALID_CONTEXT; - - *pServiceThreshold = pP2PInfo->SDRspFragmtntThreshold; - - return RT_STATUS_SUCCESS; -} - -#if 1 -//------------------------------------------------------------------------------- -// For delaying sending the peer response packet from the OID command -//------------------------------------------------------------------------------- -VOID -P2POidPostProcessTimerCallback( - IN PRT_TIMER pTimer -) -{ - PADAPTER pAdapter = (PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - u1Byte i = 0; - - // For IRQL Maintaince ------------------------------ -// BOOLEAN bIrqlRestoreRequired = FALSE; -// KIRQL BackupIrql = PASSIVE_LEVEL; - // ----------------------------------------------- - - FunctionIn(COMP_P2P); - - if(RT_DRIVER_STOP(pAdapter)) - { - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - return; - } - - // ---------------------------------------------------------------------- - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: P2PGetChannel: %d\n", __FUNCTION__, P2PGetChannel(pP2PInfo))); - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: KeGetCurrentIrql(): %d\n", __FUNCTION__, KeGetCurrentIrql())); - - switch(pP2PInfo->OidOperation) - { - case OID_OPERATION_INDICATE_DISCOVERY_COMPLETE: - { -#if 0 - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Delay 10 ms to avoid too fast indication for WlanSvc!\n")); - delay_ms(10); -#endif - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: P2P_EVENT_DEVICE_DISCOVERY_COMPLETE\n", __FUNCTION__)); - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_DEVICE_DISCOVERY_COMPLETE, NULL); - } break; - - case OID_OPERATION_SEND_PACKET: - { - p2p_DevList_Lock(&pP2PInfo->devList); - - if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_PROVISION_DISCOVERY_RSP) - { - // Start sending provision discovery response --------------------------------------------------- - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_PDRsp( - pP2PInfo, - pP2PInfo->ProvisionResponseReceiverDeviceAddress, - pP2PInfo->ProvisionResponseDialogToken, - NULL, - 0, // It is no use in Win8 since WPS IEs are generated by the OS - NULL - ); - - delay_ms(10); - } - else if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_INVITATION_RSP) - { - P2P_STATE StateBackup = pP2PInfo->State; - - pP2PInfo->State = P2P_STATE_INVITATION_REQ_RECVD; - - // Start sending invitation response ----------------------------------------------------------- - //CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_InvitationRsp( - pP2PInfo, - pP2PInfo->InvitationResponseReceiverDeviceAddress, - pP2PInfo->InvitationResponseDialogToken - ); - - pP2PInfo->State = StateBackup; - - // Postpone the extended listening - P2PExtendedListenResetCounter(pP2PInfo); - - // Update the state machine immediately - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - } - else if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_GO_NEGO_RSP) - { - // Start sending GO negotiation response --------------------------------------------------- - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_GoNegRsp( - pP2PInfo, - pP2PInfo->NegotiationResponsePeerDeviceAddress, - pP2PInfo->NegotiationResponseDialogToken - ); - - // Sync the status between Win8 and Win7 - pP2PInfo->ConnectionContext.Status = pP2PInfo->NegotiationResponseStatus; - - // + Update the state machine - if(pP2PInfo->ConnectionContext.Status == P2P_STATUS_SUCCESS) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_RSP_SEND; - } - else if(pP2PInfo->Role != P2P_CLIENT) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P state 0x%x\n", pP2PInfo->State)); - - // Update the state machine immediately - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - } - else if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_GO_NEGO_CONFIRM) - { - // Start sending GO negotiation confirmation ---------------------------------------------------- - //CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - BOOLEAN bSupportTxReport = FALSE; - p2p_Send_GoNegConfirm( - pP2PInfo, - pP2PInfo->NegotiationConfirmPeerDeviceAddress, - pP2PInfo->NegotiationConfirmDialogToken, - &bSupportTxReport - ); - - // + Update the state machine - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - - // Update the state machine immediately - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 100); // In order not to switch channel - - delay_ms(10); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Illegal Packet Type!\n", __FUNCTION__)); - } - - // Reset the packet type ------------------------------------------------- - pP2PInfo->PacketSentInWorkItemCallback = (P2P_PUBLIC_ACTION_TYPE) 0xFF; - // -------------------------------------------------------------------- - - p2p_DevList_Unlock(&pP2PInfo->devList); - } break; - - default: - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Wrong Operation Mode in WorkItem!\n", __FUNCTION__)); - break; - } - -#if 0 - // Restore the IRQL Back --------------------- - if(bIrqlRestoreRequired) KeLowerIrql(BackupIrql); - // ---------------------------------------- -#endif - - FunctionOut(COMP_P2P); -} - -#else - -//------------------------------------------------------------------------------- -// For delaying sending the peer response packet from the OID command -//------------------------------------------------------------------------------- -VOID -P2POidPostProcessWorkItemCallback( - IN PVOID pContext -) -{ - PP2P_INFO pP2PInfo = (PP2P_INFO) pContext; - u1Byte i = 0; - - // For IRQL Maintaince ------------------------------ - BOOLEAN bIrqlRestoreRequired = FALSE; - KIRQL BackupIrql = PASSIVE_LEVEL; - // ----------------------------------------------- - - FunctionIn(COMP_P2P); - - for(i = 0; i < 10; i++) - { - - if(pP2PInfo->bPostoneP2POidPostProcessWorkItem) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: delay_ms(5) for other PASSIVE_LEVEL thread running~\n", __FUNCTION__)); - delay_ms(5); - } - else - break; - } - - // Let this OID routine run faster than the P2POidPostProcessWorkItemCallback ------ - if(KeGetCurrentIrql() == PASSIVE_LEVEL) - { - bIrqlRestoreRequired = TRUE; - KeRaiseIrql(DISPATCH_LEVEL, &BackupIrql); - } - // ---------------------------------------------------------------------- - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: P2PGetChannel: %d\n", __FUNCTION__, P2PGetChannel(pP2PInfo))); - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: KeGetCurrentIrql(): %d\n", __FUNCTION__, KeGetCurrentIrql())); - - switch(pP2PInfo->OidOperation) - { - case OID_OPERATION_INDICATE_DISCOVERY_COMPLETE: - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Delay 10 ms to avoid too fast indication for WlanSvc!\n")); - delay_ms(10); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: P2P_EVENT_DEVICE_DISCOVERY_COMPLETE\n", __FUNCTION__)); - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_DEVICE_DISCOVERY_COMPLETE, NULL); - } break; - - case OID_OPERATION_SEND_PACKET: - { - if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_PROVISION_DISCOVERY_RSP) - { - // Start sending provision discovery response --------------------------------------------------- - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_PDRsp( - pP2PInfo, - pP2PInfo->ProvisionResponseReceiverDeviceAddress, - pP2PInfo->ProvisionResponseDialogToken, - 0 // It is no use in Win8 since WPS IEs are generated by the OS - ); - } - else if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_INVITATION_RSP) - { - P2P_STATE StateBackup = pP2PInfo->State; - - pP2PInfo->State = P2P_STATE_INVITATION_REQ_RECVD; - - // Start sending invitation response ----------------------------------------------------------- - //CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_InvitationReq( - pP2PInfo, - pP2PInfo->InvitationResponseReceiverDeviceAddress, - pP2PInfo->InvitationResponseDialogToken - ); - - pP2PInfo->State = StateBackup; - - // Postpone the extended listening - P2PExtendedListenResetCounter(pP2PInfo); - - // Update the state machine immediately - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - } - else if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_GO_NEGO_RSP) - { - // Start sending GO negotiation response --------------------------------------------------- - CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_GoNegRsp( - pP2PInfo, - pP2PInfo->NegotiationResponsePeerDeviceAddress, - pP2PInfo->NegotiationResponseDialogToken - ); - - // Sync the status between Win8 and Win7 - pP2PInfo->ConnectionContext.Status = pP2PInfo->NegotiationResponseStatus; - - // + Update the state machine - if(pP2PInfo->ConnectionContext.Status == P2P_STATUS_SUCCESS) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_RSP_SEND; - } - else if(pP2PInfo->Role != P2P_CLIENT) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - } - - // Update the state machine immediately - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - - } - else if(pP2PInfo->PacketSentInWorkItemCallback == P2P_PUB_ACT_GO_NEGO_CONFIRM) - { - BOOLEAN bSupportTxReport = FALSE; - // Start sending GO negotiation confirmation ---------------------------------------------------- - //CustomScan_ExtendDwellTime(GET_CUSTOM_SCAN_INFO(pAdapter), 100); // In order not to switch channel - p2p_Send_GoNegConfirm( - pP2PInfo, - pP2PInfo->NegotiationConfirmPeerDeviceAddress, - pP2PInfo->NegotiationConfirmDialogToken, - &bSupportTxReport - ); - - // + Update the state machine - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - - // Update the state machine immediately - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 100); // In order not to switch channel - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Illegal Packet Type!\n", __FUNCTION__)); - } - - // Reset the packet type ------------------------------------------------- - pP2PInfo->PacketSentInWorkItemCallback = (P2P_PUBLIC_ACTION_TYPE) 0xFF; - // -------------------------------------------------------------------- - } break; - - default: - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Wrong Operation Mode in WorkItem!\n", __FUNCTION__)); - break; - } - - - // Restore the IRQL Back --------------------- - if(bIrqlRestoreRequired) KeLowerIrql(BackupIrql); - // ---------------------------------------- - - FunctionOut(COMP_P2P); -} -#endif - -// ----------------------------------------- -// Reset the Client Join Group Context -// ----------------------------------------- -VOID -P2PResetClientJoinGroupContext( - PP2P_INFO pP2PInfo -) -{ - pP2PInfo->ClientJoinGroupContext.bInGroupFormation = FALSE; - pP2PInfo->ClientJoinGroupContext.WpsState = P2P_CLIETN_JOIN_GROUP_WPS_STATE_NONE; - pP2PInfo->ClientJoinGroupContext.uWaitForWpsSlotCount = 0; // 100 ms per slot - - PlatformCancelTimer( - pP2PInfo->pAdapter, - &pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer - ); -} - -//------------------------------------------------------------------------------- -// For delaying connection to wait for GO WPS ready -//------------------------------------------------------------------------------- -static -VOID -p2pWaitForWpsReady_CustomScanCb( - IN CUSTOM_SCAN_STATE state, - IN VOID *pCtx - ) -{ - P2P_INFO *info = (P2P_INFO *)pCtx; - MGNT_INFO *mgnt = &info->pAdapter->MgntInfo; - u4Byte it = 0; - - if(!P2P_ENABLED(info)) - return; - - if(CUSTOM_SCAN_STATE_COMPLETED == state) - { - if(P2P_CLIETN_JOIN_GROUP_WPS_STATE_NONE != info->ClientJoinGroupContext.WpsState) - { - PlatformSetTimer(info->pAdapter, &info->ClientJoinGroupContext.P2PWaitForWpsReadyTimer, 1); - } - - mgnt->NumBssDesc4Query = mgnt->NumBssDesc; - for(it = 0; it < mgnt->NumBssDesc4Query; it++) - { - CopyWlanBss(mgnt->bssDesc4Query + it, mgnt->bssDesc + it); - } - } - - return; -} - -VOID -P2PWaitForWpsReadyTimerCallback( - IN PRT_TIMER pTimer -) -{ - PADAPTER pAdapter = (PADAPTER) pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - VOID *customScanInfo = GET_CUSTOM_SCAN_INFO(pAdapter); - VOID *req = NULL; - FRAME_BUF *probeReqBuf = NULL; - - FunctionIn(COMP_P2P); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(MgntScanInProgress(pMgntInfo)) - { - PlatformSetTimer(pAdapter, &pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer, 16); - return; - } - - switch(pP2PInfo->ClientJoinGroupContext.WpsState) - { - default: - // Reset the variable in OID_DOT11_WFD_GROUP_START_PARAMETERS ------------------ - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Unknown wps state = %d\n", pP2PInfo->ClientJoinGroupContext.WpsState)); - P2PResetClientJoinGroupContext(pP2PInfo); - break; - - case P2P_CLIETN_JOIN_GROUP_WPS_STATE_SCANNING: - { - if(0 == pP2PInfo->ClientJoinGroupContext.uWaitForWpsSlotCount) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("WPS slot count is 0, stop scan!\n")); - // Reset the variable in OID_DOT11_WFD_GROUP_START_PARAMETERS ------------------ - P2PResetClientJoinGroupContext(pP2PInfo); - break; - } - pP2PInfo->ClientJoinGroupContext.uWaitForWpsSlotCount --; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Call Customzied Scan to find out WPS Group!\n")); - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - return; - - // Call customized scan to scan the WPS group. - if(pP2PInfo->uGroupTargetSSIDLength > 0 && pP2PInfo->uGroupTargetSSIDLength <= 32) - { - u4Byte bufLen = 0; - - PlatformMoveMemory(pMgntInfo->Ssid.Octet, pP2PInfo->GroupTargetSSID, pP2PInfo->uGroupTargetSSIDLength); - pMgntInfo->Ssid.Length = (u2Byte)(pP2PInfo->uGroupTargetSSIDLength); - - // Send probe req with the interface address as the SA and we shall append P2P IE in this case, - // otherwise the ProbeRsp would be regarded as from a legacy device and would not be processed. - probeReqBuf = CustomScan_GetProbeReqBuf(req); - ConstructProbeRequest(pAdapter, FrameBuf_MHead(probeReqBuf), &bufLen, TRUE, FALSE, FALSE); - FrameBuf_Add(probeReqBuf, (u2Byte)bufLen); - } - - CustomScan_AddScanChnl(req, pP2PInfo->OperatingChannel, 1, SCAN_ACTIVE, P2P_SCAN_WPS_GROUP_PERIOD, MGN_6M, probeReqBuf); - CustomScan_AddScanChnl(req, pP2PInfo->ListenChannel, 1, SCAN_ACTIVE, 100, MGN_6M, probeReqBuf); - CustomScan_SetRepeatCount(req, 16); - CustomScan_SetupCbCtx(req, p2pWaitForWpsReady_CustomScanCb, pP2PInfo); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "cli join grp wps scanning"); - } - break; - - case P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY: - { - OCTET_STRING ssidStr = {NULL, 0}; - PRT_WLAN_BSS pRtBss = NULL; - RT_JOIN_ACTION joinAction = RT_NO_ACTION; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY\n")); - -//Sinda: temporarily mark. If OS care bForceScanLegacyNetworks flag -//and un-mark the flag checking at case P2P_STATE_DEV_DISC_START of P2PMgntTimerCallback function. -//We need to do legacy scan to update scan list to avoid to get out-of-date information of GO. -#if 0 - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Target WPS info is ready but the BSS maybe out-of-date in the scan list, try to customized scan...\n")); - // Call customized scan to scan the WPS group. - if(pP2PInfo->uGroupTargetSSIDLength > 0 && pP2PInfo->uGroupTargetSSIDLength <= 32) - { - u4Byte bufLen = 0; - PlatformMoveMemory(pMgntInfo->Ssid.Octet, pP2PInfo->GroupTargetSSID, pP2PInfo->uGroupTargetSSIDLength); - pMgntInfo->Ssid.Length = (u2Byte)(pP2PInfo->uGroupTargetSSIDLength); - ConstructProbeRequest(pAdapter, &(pScanReq->ProbeReqBuf[0]), (pu4Byte)&bufLen, TRUE, FALSE, FALSE); - - pScanReq->ProbeReqLen = (u2Byte)bufLen; - } - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY: MgntActSet_802_11_CustomizedScanRequest\n")); - MgntActSet_802_11_CustomizedScanRequest(pAdapter, pScanReq); -#endif - - if(PlatformAllocateMemory(pAdapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - return; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY: try to connect selected network by SSID(%s)\n", pP2PInfo->GroupTargetSSID)); - - FillOctetString(ssidStr, pP2PInfo->GroupTargetSSID, (u2Byte)(pP2PInfo->uGroupTargetSSIDLength)); - joinAction = SelectNetworkBySSID(pAdapter, &ssidStr, FALSE, pRtBss); - if(pRtBss) - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - if(RT_JOIN_INFRA == joinAction) - { // The target is in the scan list, try to join it. - pP2PInfo->ClientJoinGroupContext.WpsState = P2P_CLIETN_JOIN_GROUP_WPS_STATE_ASSOCIATING; - PlatformSetTimer(pAdapter, &pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer, 0); - return; - } - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - return; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Target WPS info is ready but the BSS is not in the scan list, try to customized scan...\n")); - // Call customized scan to scan the WPS group. - if(pP2PInfo->uGroupTargetSSIDLength > 0 && pP2PInfo->uGroupTargetSSIDLength <= 32) - { - u4Byte bufLen = 0; - PlatformMoveMemory(pMgntInfo->Ssid.Octet, pP2PInfo->GroupTargetSSID, pP2PInfo->uGroupTargetSSIDLength); - pMgntInfo->Ssid.Length = (u2Byte)(pP2PInfo->uGroupTargetSSIDLength); - - probeReqBuf = CustomScan_GetProbeReqBuf(req); - ConstructProbeRequest(pAdapter, FrameBuf_MHead(probeReqBuf), &bufLen, TRUE, FALSE, FALSE); - FrameBuf_Add(probeReqBuf, (u2Byte)bufLen); - } - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY: CustomScan_IssueReq\n")); - - CustomScan_AddScanChnl(req, pP2PInfo->OperatingChannel, 2, SCAN_ACTIVE, P2P_SCAN_WPS_GROUP_PERIOD, MGN_6M, probeReqBuf); - CustomScan_AddScanChnl(req, pP2PInfo->ListenChannel, 2, SCAN_ACTIVE, P2P_SCAN_WPS_GROUP_PERIOD, MGN_6M, probeReqBuf); - CustomScan_SetupCbCtx(req, p2pWaitForWpsReady_CustomScanCb, pP2PInfo); - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_P2P, "cli join grp wps go ready"); - } - break; - - case P2P_CLIETN_JOIN_GROUP_WPS_STATE_ASSOCIATING: - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P_CLIETN_JOIN_GROUP_WPS_STATE_ASSOCIATING\n")); - pAdapter->pNdis62Common->CurrentOpState = OP_STATE; - - ndisStatus = N6CSet_DOT11_CONNECT_REQUEST( - pAdapter, - NULL, 0, 0, 0 // Don't Care - ); - pP2PInfo->ClientJoinGroupContext.WpsState = P2P_CLIETN_JOIN_GROUP_WPS_STATE_HANDSHAKING; - } - break; - - case P2P_CLIETN_JOIN_GROUP_WPS_STATE_HANDSHAKING: - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("P2P_CLIETN_JOIN_GROUP_WPS_STATE_HANDSHAKING\n")); - } - break; - } - } - -} - -//------------------------------------------------------------------------------- -// Public P2P Utility Functions -//------------------------------------------------------------------------------- - -// The public interface for operating the device lists outside this file -BOOLEAN -P2PDeviceListActionInterface( - PP2P_INFO pP2PInfo, - IN u1Byte uAction, - IN PP2P_DEVICE_LIST pDeviceList, - IN PMEMORY_BUFFER pInputBuffer, - OUT PMEMORY_BUFFER pOutputBuffer -) -{ - BOOLEAN bStatus = FALSE; - - switch(uAction) - { - case P2P_DEVICE_LIST_ACTION_COPY_TO_QUERY_LIST: - { - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - P2PDeviceListCopyWithTimeStamp( - pP2PInfo, - &pP2PInfo->DeviceListForQuery, - &pP2PInfo->DeviceList - ); - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - - bStatus = TRUE; - } break; - - case P2P_DEVICE_LIST_ACTION_CLEAR: - { - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - P2PDeviceListClear(pDeviceList); - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_P2P_SPIN_LOCK); - bStatus = TRUE; - } break; - - case P2P_DEVICE_LIST_ACTION_DUMP: - { - P2PDeviceListDump(pDeviceList); - bStatus = TRUE; - } break; - - default: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Illegal Action Failure!\n", __FUNCTION__)); - } break; - } - - return bStatus; -} - -BOOLEAN -P2PAddScanDeviceID( - PP2P_DEVICE_ID_TO_SCAN pScanDeviceIDs, - pu1Byte pDeviceID -) -{ - BOOLEAN bStatus = FALSE; - ULONG i; - BOOLEAN bDuplicate; - - do - { - if(pScanDeviceIDs->uNumOfDeviceIDs > P2P_MAX_DEVICE_ID_TO_SCAN) - break; - - bDuplicate = FALSE; - - for(i = 0; i < pScanDeviceIDs->uNumOfDeviceIDs; i++) - { - if(eqMacAddr(pDeviceID, pScanDeviceIDs->DeviceIDs[i])) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Found the MAC. Index: %d\n", i)); - bDuplicate = TRUE; - } - } - - if(bDuplicate == FALSE) - { - cpMacAddr( - pScanDeviceIDs->DeviceIDs[pScanDeviceIDs->uNumOfDeviceIDs], - pDeviceID - ); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Add MAC to Device list. Index: %d\n", pScanDeviceIDs->uNumOfDeviceIDs)); - - pScanDeviceIDs->uNumOfDeviceIDs++; - } - - bStatus = TRUE; - - }while (FALSE); - - return bStatus; -} - -VOID -P2PClearScanDeviceID( - PP2P_DEVICE_ID_TO_SCAN pScanDeviceIDs -) -{ - FunctionIn(COMP_P2P); - PlatformZeroMemory(pScanDeviceIDs, sizeof(P2P_DEVICE_ID_TO_SCAN)); - FunctionOut(COMP_P2P); -} - -// Free all allocated memory: PVOID or MEMORY_BUFFER -VOID -P2PFreeAllocatedMemory( - IN PADAPTER pAdapter -) -{ - PP2P_INFO pP2PInfo = pAdapter->MgntInfo.pP2PInfo; - - P2P_AddIe_Free(&pP2PInfo->AdditionalIEs); - - // Free the allocated memory of the device list ----------------------------------------------------------------- - P2PDeviceListClear(&pP2PInfo->DeviceList); - P2PDeviceListClear(&pP2PInfo->DeviceListForQuery); - // ------------------------------------------------------------------------------------------------------ -} - -// -// Description: -// Free P2P information memory allocated by P2P_AllocP2PInfo(). -// Arguments: -// [in] pAdapter - -// The adapter context which the P2P info belongs to. -// Return: -// None. -// -VOID -P2P_FreeP2PInfo( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PP2P_INFO pP2PInfo = NULL; - - FunctionIn(COMP_P2P); - - if(NULL == pMgntInfo->pP2PInfo) - return; - - pP2PInfo = (PP2P_INFO)pMgntInfo->pP2PInfo; - - if(pP2PInfo->pProfileList) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Freeing previous profile list: %u profiles\n", pP2PInfo->pProfileList->nProfiles)); - PlatformFreeMemory(pP2PInfo->pProfileList, pP2PInfo->profileListLen); - pP2PInfo->profileListLen = 0; - pP2PInfo->pProfileList = NULL; - } - - P2PSvc_Free_P2PSvcInfo(pMgntInfo->pP2PInfo); - - PlatformFreeMemory(pP2PInfo, sizeof(P2P_INFO)); - - pMgntInfo->pP2PInfo = NULL; - - FunctionOut(COMP_P2P); -} - -// -// Description: -// Allocate the P2P information memory which contains all P2P variables. -// Arguments: -// [in] pAdapter - -// The adapter context which the P2P info belongs to. -// Return: -// If allocation process succeeded, return RT_STATUS_SUCESS. If the system cannot allocate enough memory -// the context, return RT_STATUS_RESOURCE. Otherwise, return the RT_STATUS error code. -// Remark: -// This function allocates memory by structure "P2P_INFO" and initialize the default context. The caller must call -// P2P_FreeP2PInfo() to free the allocated memory. -// -RT_STATUS -P2P_AllocP2PInfo( - IN PADAPTER pAdapter - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PP2P_INFO pP2pInfo = NULL; - - FunctionIn(COMP_P2P); - do - { - pMgntInfo->pP2PInfo = NULL; - if(RT_STATUS_SUCCESS != (rtStatus = PlatformAllocateMemory(pAdapter, &(pMgntInfo->pP2PInfo), sizeof(P2P_INFO)))) - break; - - PlatformZeroMemory(pMgntInfo->pP2PInfo, sizeof(P2P_INFO)); - pAdapter->P2PSupport = P2P_SUPPORT_STATE_UNINITIALIZED; - pP2pInfo = (PP2P_INFO)(pMgntInfo->pP2PInfo); - // Pointer to the default adapter, then after OS/RTL initialized the info, the adapter pointer will be - // asigned to the corresponding context. - pP2pInfo->pAdapter = GetDefaultAdapter(pAdapter); - - pP2pInfo->pP2PSvcInfo = NULL; - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocP2PSvcInfo(pMgntInfo->pP2PInfo))) - break; - - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_WFD, DBG_SERIOUS, ("[ERROR] Allocation failed with error (%d)!!!\n", rtStatus)); - P2PSvc_Free_P2PSvcInfo(pMgntInfo->pP2PInfo); - P2P_FreeP2PInfo(pAdapter); - } - - FunctionOut(COMP_P2P); - - return rtStatus; -} - -// -// Description: -// Set the SSID which will be the GO SSID used in the auto GO or Go negotiation. -// Arguments: -// [in] pAdapter - -// The adapter context which the P2P info belongs to. -// [in] pSsidBuf - -// The location points the SSID buffer. -// [in] ssidLen - -// The length for the SSID in pSsidBuf. -// Return: -// If set process succeeds, return RT_STATUS_SUCESS. -// Remark: -// This function does NOT check the valid SSID as defined in P2P spec (such as DIRECT-xxx). -// If the ssidLen is 0, the SSID will be set as random. -// -RT_STATUS -P2P_SetP2PGoFullSSID( - IN PADAPTER pAdapter, - IN pu1Byte pSsidBuf, - IN u4Byte ssidLen - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(ssidLen > MAX_SSID_LEN) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Invalid SSID length = %d\n", ssidLen)); - return RT_STATUS_INVALID_DATA; - } - - pP2PInfo->regSSIDLen = (u1Byte)ssidLen; - - if(pP2PInfo->regSSIDLen > 0) - { - PlatformMoveMemory(pP2PInfo->regSSIDBuf, pSsidBuf, pP2PInfo->regSSIDLen); - } - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2P_SetP2PGoFullSSID(): SSID =\n", pP2PInfo->regSSIDBuf, pP2PInfo->regSSIDLen); - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Get the SSID which will be the GO SSID used in the auto GO or Go negotiation. -// Arguments: -// [in] pAdapter - -// The adapter context which the P2P info belongs to. -// [in] maxSsidBufLen - -// The max length in pSsidBuf. -// [out] pSsidBuf - -// The location points the SSID buffer. -// [out] pSsidLen - -// The length for the SSID in pSsidBuf. -// Return: -// If set process succeeds, return RT_STATUS_SUCESS. -// Remark: -// This function does NOT check the valid SSID as defined in P2P spec (such as DIRECT-xxx). -// If the ssidLen is 0, the SSID will be set as random. -// -RT_STATUS -P2P_GetP2PGoFullSSID( - IN PADAPTER pAdapter, - IN u4Byte maxSsidBufLen, - IN pu1Byte pSsidBuf, - IN pu4Byte pSsidLen - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(maxSsidBufLen < (u4Byte)pP2PInfo->regSSIDLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] maxSsidBufLen = %d < SSID Len (%d)\n", maxSsidBufLen, pP2PInfo->regSSIDLen)); - return RT_STATUS_BUFFER_TOO_SHORT; - } - - *pSsidLen = (u4Byte)pP2PInfo->regSSIDLen; - - if(pP2PInfo->regSSIDLen > 0) - { - PlatformMoveMemory(pSsidBuf, pP2PInfo->regSSIDBuf, pP2PInfo->regSSIDLen); - } - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2P_GetP2PGoFullSSID(): SSID =\n", pSsidBuf, *pSsidLen); - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Check if any p2p device exists. -// [in] pAdapter - -// The adapter context for any port. -// Return: -// Return TRUE if any p2p port is found. -// Remark: -// The input adapter can be from any port and this function checks each port adapter. -// -BOOLEAN -IsP2PDeviceExisting( - IN PADAPTER pAdapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pDevicePort = NULL; - - pDevicePort = pDefaultAdapter; - - while(pDevicePort != NULL) - { - if(P2P_ENABLED(GET_P2P_INFO(pDevicePort))) - { - return TRUE; - } - pDevicePort = GetNextExtAdapter(pDevicePort); - } - - return FALSE; -} - -// -// Description: -// Check if the RTK P2P device exists. -// [in] pAdapter - -// The adapter context for any port. -// Return: -// Return TRUE if any RTK p2p port is found. -// Remark: -// The input adapter can be from any port and this function checks each port adapter. -// -BOOLEAN -IsRTKP2PDeviceExisting( - IN PADAPTER pAdapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pDevicePort = NULL; - - pDevicePort = pDefaultAdapter; - - while(pDevicePort != NULL) - { - // If any RTK P2P exists, return FALSE. - if(P2P_ENABLED(GET_P2P_INFO(pDevicePort)) && P2P_ADAPTER_RTK_SUPPORT_P2P(pDevicePort)) - { - return TRUE; - } - - // ToDo, check other P2P conditions. - pDevicePort = GetNextExtAdapter(pDevicePort); - } - - return FALSE; -} - - -// -// Description: -// Check if the IPS is accessible. -// [in] pAdapter - -// The adapter context for any port. -// Return: -// Return TRUE if IPS is accessible for P2P mode. -// Remark: -// The input adapter can be from any port and this function checks each port adapter. -// -BOOLEAN -P2P_IPS_Accessible( - IN PADAPTER pAdapter - ) -{ - if(IsRTKP2PDeviceExisting(pAdapter)) - { - return FALSE; - } - - return TRUE; -} - -VOID -P2P_Construct_ProbeReqEx( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte ssidLen, - IN const u1Byte *ssidBuf - ) -{ - p2p_Construct_ProbeReqEx(pBuf, pP2PInfo, da, ssidLen, ssidBuf); - return; -} - -VOID -P2P_Construct_ProbeReq( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - p2p_Construct_ProbeReq(pBuf, pP2PInfo); -} - -// -// Description: -// Change the primary (and sub) device category if the setting in P2P info is unknown. -// Sometimes the OS may just set the primary category as 0 (reserved in WPS spec) if -// there is one application applying P2P or miracast sink function, -// and we shall change the device category. -// Arguments: -// [in] pAdapter - -// The adapter context for any port. -// Return: -// If setting process succeeds, return RT_STATUS_SUCESS. -// -RT_STATUS -P2P_CorrectDeviceCategory( - IN PADAPTER pAdapter - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - WFD_DEV_TYPE devType = WFD_DEV_TYPE_SOURCE; - const FRAME_BUF *pAddIeBuf = NULL; - u4Byte wfdInfoLen = 0; - u2Byte priCategory = WPS_PRI_DEV_TYPE_CATEGORY_PC; - - if(!P2P_ENABLED(pP2PInfo)) - return RT_STATUS_INVALID_STATE; - - do - { - if(WPS_PRI_DEV_TYPE_CATEGORY_UNKNOWN == pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId || - WPS_PRI_DEV_TYPE_CATEGORY_PC == pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId) - { - // Change it when the category is unknown or PC - } - else - { - // Do nothing - break; - } - - if(NULL != (pAddIeBuf = P2P_AddIe_Get(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_PROBE_RESPONSE))) - { - OCTET_STRING osTemp = pAddIeBuf->os; - - wfdInfoLen = sizeof(WFD_DEV_TYPE); - if(RT_STATUS_SUCCESS == (rtStatus = WFD_GetInfoOnIEs(pAdapter, WFD_INFO_DEVICE_TYPE, &osTemp, (pu1Byte)&devType, &wfdInfoLen))) - { - if(WFD_DEV_TYPE_SOURCE == devType) - { - priCategory = WPS_PRI_DEV_TYPE_CATEGORY_PC; - } - else - { - priCategory = WPS_PRI_DEV_TYPE_CATEGORY_DISPLAY; - } - } - } - - pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId = priCategory; - pP2PInfo->WpsAttributes.PrimaryDeviceType.SubCategoryId = WPS_PRI_DEV_TYPE_SUB_CATEGORY_NO_SUB; - PlatformMoveMemory(pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui, - WPS_NO_SUB_CAT_OUI, 4); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Changed WPS Category = 0x%04X, SubCategory = 0x%04X\n", - pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId, - pP2PInfo->WpsAttributes.PrimaryDeviceType.SubCategoryId)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2P_CorrectDeviceCategory(): OUI =\n", - pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui, 4); - }while(FALSE); - - return rtStatus; -} - -//====================================================================== -// Wi-Fi Direct End -//====================================================================== - -#endif // #if (P2P_SUPPORT == 1) - diff --git a/network/wlan/WDI/COMMON/P2P.h b/network/wlan/WDI/COMMON/P2P.h deleted file mode 100644 index 5f2c4b32..00000000 --- a/network/wlan/WDI/COMMON/P2P.h +++ /dev/null @@ -1,2443 +0,0 @@ -#ifndef __INC_P2P_11_H -#define __INC_P2P_11_H - - -#define P2P_VERSION 0x00000005 - -// For Intel Graphics driver running as Miracast source, it checks the transmit speed and determines the support resolutions. -// The min speed to support 1920x1080 is 300Mbps. -#define INTEL_HIGH_RESOLUTION_MIN_XMIT_SPEED 300000000 // bps - - -//====================================================================== -// Wi-Fi Direct Start -//====================================================================== - -// For simulating managed AP in soft AP mode. -#define P2P_SIMULATE_MANAGED_AP 0 - - -#ifndef MIN - #define MIN(a, b) ((a) < (b)? a : b) -#endif // MIN -#ifndef MAX - #define MAX(a, b) ((a) > (b)? a : b) -#endif // MAX - - -#define IS_5G_CHANNEL(__channel) \ - ((__channel) >= 36 && (__channel) <= 165) // TODO: this is a incorrect definition - -#define P2P_UPDATE_MANAGED_INFO_PERIOD 3 // * watchdog - -#define P2P_MAX_NUM_NOA_DESC 2 - -#define P2P_PS_TIMEOUT_TOLERANCE 1024 // 1 TU -#define P2P_TBTT_SEND_BEACON_TIME (5 * 1024) // 5 TUs - -// Scan Related -#define P2P_MAX_DISCOVERABLE_INTERVAL 3 -#define P2P_MIN_DISCOVERABLE_INTERVAL 1 -#define P2P_DEFAULT_MGNT_PERIOD 100 //MS -#define P2P_DEFAULT_MGNT_PERIOD_SHORT 20 //MS - -#define P2P_SCAN_PERIOD_SCAN P2P_DEFAULT_MGNT_PERIOD //ms -#define P2P_SCAN_PERIOD_SEARCH 100 - 20 //ms -#define P2P_SWITCH_CHNL_PERIOD 5 //ms - -#define P2P_SCAN_FIND_PHASE_LOOP_TIMES 32 // times of looping between listen and find phase before sending GONReq - -// Block the scan request from the default port to prevent channel switching which causes P2P handshake fail. -#define P2P_BLOCK_NORMAL_SCAN_PERIOD 3000000 // us - -// -// Device Discovery code -// -#define P2P_DEV_DISC_SCAN_ONLY 0x00 -#define P2P_DEV_DISC_STOP 0xFD -#define P2P_DEV_DISC_INFINITE 0xFF - -// Configuration Timeout, in units of 10ms -#define P2P_GO_CONFIG_TIMEOUT 0xFF // 2550ms -#define P2P_CLIENT_CONFIG_TIMEOUT 0x00 - -// Frame exchange timeout -#define P2P_GO_NEGO_FRAME_TIMEOUT 2000 //ms -#define P2P_INVITATION_FRAME_TIMEOUT 500 //ms -#define P2P_DEVICE_DISCOVERABILITY_FRAME_TIMEOUT 1000 //ms, need to consider peer client power saving mode -#define P2P_DEVICE_DISCOVERABILITY_BEACON_TIMEOUT 1000 // ms -#define P2P_PROVISION_DISCOVERY_TIMEOUT 2000 //ms - -#define P2P_PROVISION_DISCOVERY_SHORT_TIMEOUT 300 //ms -#define P2P_PROVISION_DISCOVERY_RETRY_CNT 3 -#define P2P_SERVICE_DISCOVERY_TIMEOUT 3000 // ms, this is the time for the entire SD protocol exchange including Comeback Req/Rsp -#define P2P_SERVICE_DISCOVERY_COMEBACK_TIMEOUT 300 // ms -#define P2P_SCAN_WPS_GROUP_PERIOD 50 //ms - -#define P2P_MS_TO_SLOTCOUNT(_Time) (((_Time)/P2P_DEFAULT_MGNT_PERIOD)) - -#define P2P_EXT_LISTEN_TIMING_DURATION_MS 400 //ms -#define P2P_EXT_LISTEN_TIMING_PERIOD_MS 3000 // ms - -#define P2P_EXT_LISTEN_TIMING_PERIOD_SC P2P_MS_TO_SLOTCOUNT(pP2PInfo->ExtListenTimingPeriod) - -#define P2P_NO_CLIENT_MAX_DURATION_MS 60000 //ms -#define P2P_NO_CLIENT_PERIOD_SC P2P_MS_TO_SLOTCOUNT(P2P_NO_CLIENT_MAX_DURATION_MS) - -#define P2P_CLIENT_DISCONNECTED_MAX_DURATION_MS 10000 //ms -#define P2P_CLIENT_DISCONNECTED_PERIOD_SC P2P_MS_TO_SLOTCOUNT(P2P_CLIENT_DISCONNECTED_MAX_DURATION_MS) - -#define P2P_FORCE_SCAN_LIST_INDICATE_DURATION_MS 5000 //ms -#define P2P_FORCE_SCAN_LIST_INDICATE_PERIOD_SC P2P_MS_TO_SLOTCOUNT(P2P_FORCE_SCAN_LIST_INDICATE_DURATION_MS) - -#define P2P_SD_COMEBACK_REQ_TIMEOUT_MS 1000 //ms -#define P2P_SD_COMEBACK_REQ_TIMEOUT_SC P2P_MS_TO_SLOTCOUNT(P2P_SD_COMEBACK_REQ_TIMEOUT_MS) - -#define P2P_ELEMENT_ID 0xDD - -#define P2P_MAX_P2P_CLIENT 16 // shall be no greater than ASSOCIATE_ENTRY_NUM - -#define P2P_MAX_SCAN_LIST 64 - -typedef enum _P2P_SUPPORT_STATE -{ - P2P_SUPPORT_STATE_NOT_SUPPORT = 0, - P2P_SUPPORT_STATE_UNINITIALIZED = 1, - P2P_SUPPORT_STATE_RTK_SUPPORT = 2, - P2P_SUPPORT_STATE_OS_SUPPORT = 3, -}P2P_SUPPORT_STATE, *PP2P_SUPPORT_STATE; - -#define P2P_ADAPTER_OS_SUPPORT_P2P(_pAdapter) \ - ((P2P_SUPPORT_STATE_OS_SUPPORT == (_pAdapter)->P2PSupport) ? TRUE : FALSE) - - -#define P2P_ADAPTER_RTK_SUPPORT_P2P(_pAdapter) \ - ((P2P_SUPPORT_STATE_RTK_SUPPORT == (_pAdapter)->P2PSupport) ? TRUE : FALSE) - - -#define P2P_SERVICE_DESC_LIST_SIZE 8 // we may have a list to record the info of the services we have -#define P2P_SERVICE_MAX_RSP_FRAG_THRESHOLD 1500 // in bytes -#define P2P_SERVICE_MIN_RSP_FRG_THRESHOLD 32 // in bytes - -// P2P IE Length field related -#define P2P_MAX_ATTRIBUTE_LEN 0xFFFF -#define P2P_IE_ATTR_LEN_WRITE_EF(_ptr, _val) (WriteEF2Byte(_ptr, _val)) -#define P2P_IE_ATTR_LEN_READ_EF(_ptr) (ReadEF2Byte(_ptr)) - -#define P2P_SKIP_SCAN_LOOP_CNT 1 // Skip scan countr when any adapter is in connected state. -#define P2P_SKIP_SCAN_DURATION_MS 150 // millisecond to skip P2P scan (at least one Beacon) - -// -// We can't send frame of CCK rate to a P2P Device. -// -// -#define P2P_LOWEST_RATE MGN_6M - -#if ( P2P_SUPPORT == 1 ) -#define P2P_ENABLED(_pP2P_INFO) ( ((_pP2P_INFO)->Role) != P2P_NONE) -#else -#define P2P_ENABLED(_pP2P_INFO) 0 -#endif -#define P2P_FRAME_GET_TYPE(_pBuf) (EF1Byte((_pBuf)[0]) & 0xFC) - -#define P2P_WILDCARD_MAC_ADDR(_addr) \ -( \ - ( ((_addr)[0] == 0xff) && ((_addr)[1] == 0xff) && \ - ((_addr)[2] == 0xff) && ((_addr)[3] == 0xff) && \ - ((_addr)[4] == 0xff) && ((_addr)[5] == 0xff) ) ? TRUE : FALSE \ -) - -typedef enum _P2P_MINOR_RESON_CODE -{ - P2P_MINOR_RESON_RESERVED = 0, - P2P_MINOR_RESON_CROSS_CONNECTION = 1, - P2P_MINOR_RESON_MANAGED_BIT = 2, - P2P_MINOR_RESON_CONCURRENT_COEXISTENCE = 3, - P2P_MINOR_RESON_INFRASTRUCTURE_MANAGED_BIT = 4, -}P2P_MINOR_RESON_CODE, *PP2P_MINOR_RESON_CODE; - - -#define FRAME_OFFSET_P2P_PUB_ACT_CATEGORY (sMacHdrLng + 0) -#define FRAME_OFFSET_P2P_PUB_ACT_ACTION (sMacHdrLng + 1) -#define FRAME_OFFSET_P2P_PUB_ACT_OUI (sMacHdrLng + 2) -#define FRAME_OFFSET_P2P_PUB_ACT_OUI_TYPE (sMacHdrLng + 5) -#define FRAME_OFFSET_P2P_PUB_ACT_OUI_SUBTYPE (sMacHdrLng + 6) -#define FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN (sMacHdrLng + 7) -#define FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS (sMacHdrLng + 8) - - -// -// GAS Init Req Frame -// -#define FRAME_OFFSET_GAS_INIT_REQ_CATEGORY (sMacHdrLng + 0) -#define FRAME_OFFSET_GAS_INIT_REQ_ACTION (sMacHdrLng + 1) -#define FRAME_OFFSET_GAS_INIT_REQ_DIALOG_TOKEN (sMacHdrLng + 2) -#define FRAME_OFFSET_GAS_INIT_REQ_AD_PROT_IE (sMacHdrLng + 3) -#define FRAME_OFFSET_GAS_INIT_REQ_LEN (sMacHdrLng + 7) -#define FRAME_OFFSET_GAS_INIT_REQ_QUERY_REQ_INFO_ID (sMacHdrLng + 9) -#define FRAME_OFFSET_GAS_INIT_REQ_QUERY_REQ_LEN (sMacHdrLng + 11) -#define FRAME_OFFSET_GAS_INIT_REQ_QUERY_REQ_OI (sMacHdrLng + 13) -#define FRAME_OFFSET_GAS_INIT_REQ_OUI_SUBTYPE (sMacHdrLng + 16) -#define FRAME_OFFSET_GAS_INIT_REQ_SERVICE_UPDATE_INDICATOR (sMacHdrLng + 17) -#define FRAME_OFFSET_GAS_INIT_REQ_SERVICE_REQ_TLV (sMacHdrLng + 19) - -// -// Service Request TLV -// -#define OFFSET_SERVICE_REQ_TLV_LEN 0 -#define OFFSET_SERVICE_REQ_TLV_SERVICE_PROT_TYPE 2 -#define OFFSET_SERVICE_REQ_TLV_SERVICE_TRANSACTION_ID 3 -#define OFFSET_SERVICE_REQ_TLV_QUERY_DATA 4 - -// -// GAS Init Rsp Frame -// -#define FRAME_OFFSET_GAS_INIT_RSP_CATEGORY (sMacHdrLng + 0) -#define FRAME_OFFSET_GAS_INIT_RSP_ACTION (sMacHdrLng + 1) -#define FRAME_OFFSET_GAS_INIT_RSP_DIALOG_TOKEN (sMacHdrLng + 2) -#define FRAME_OFFSET_GAS_INIT_RSP_STATUS_CODE_11U (sMacHdrLng + 3) -#define FRAME_OFFSET_GAS_INIT_RSP_COMEBACK_DELAY (sMacHdrLng + 5) -#define FRAME_OFFSET_GAS_INIT_RSP_AD_PROT_IE (sMacHdrLng + 7) -#define FRAME_OFFSET_GAS_INIT_RSP_LEN (sMacHdrLng + 11) -#define FRAME_OFFSET_GAS_INIT_RSP_QUERY_DATA (sMacHdrLng + 13) -#define FRAME_OFFSET_GAS_INIT_RSP_QUERY_RSP_INFO_ID (sMacHdrLng + 13) -#define FRAME_OFFSET_GAS_INIT_RSP_QUERY_RSP_LEN (sMacHdrLng + 15) -#define FRAME_OFFSET_GAS_INIT_RSP_QUERY_RSP_OI (sMacHdrLng + 17) -#define FRAME_OFFSET_GAS_INIT_RSP_OUI_SUBTYPE (sMacHdrLng + 20) -#define FRAME_OFFSET_GAS_INIT_RSP_SERVICE_UPDATE_INDICATOR (sMacHdrLng + 21) -#define FRAME_OFFSET_GAS_INIT_RSP_TLV (sMacHdrLng + 23) - -// -// Service Response TLV -// -#define OFFSET_SERVICE_RSP_TLV_LEN 0 -#define OFFSET_SERVICE_RSP_TLV_SERVICE_PROT_TYPE 2 -#define OFFSET_SERVICE_RSP_TLV_SERVICE_TRANSACTION_ID 3 -#define OFFSET_SERVICE_RSP_TLV_STATUS 4 -#define OFFSET_SERVICE_RSP_TLV_RSP_DATA 5 - -// -// GAS Comeback Req -// -#define FRAME_OFFSET_GAS_COMEBACK_REQ_CATEGORY (sMacHdrLng + 0) -#define FRAME_OFFSET_GAS_COMEBACK_REQ_ACTION (sMacHdrLng + 1) -#define FRAME_OFFSET_GAS_COMEBACK_REQ_DIALOG_TOKEN (sMacHdrLng + 2) - -// -// GAS Comeback Rsp -// -#define FRAME_OFFSET_GAS_COMEBACK_RSP_CATEGORY (sMacHdrLng + 0) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_ACTION (sMacHdrLng + 1) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_DIALOG_TOKEN (sMacHdrLng + 2) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_STATUS_11U (sMacHdrLng + 3) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_FRAG_ID (sMacHdrLng + 5) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_COMEBACK_DELAY (sMacHdrLng + 6) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_AD_PROT_IE (sMacHdrLng + 8) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_LEN (sMacHdrLng + 12) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_QUERY_RSP (sMacHdrLng + 14) // Start of Query Response -#define FRAME_OFFSET_GAS_COMEBACK_RSP_QUERY_RSP_INFO_ID (sMacHdrLng + 14) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_QUERY_RSP_LEN (sMacHdrLng + 16) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_QUERY_RSP_OI (sMacHdrLng + 18) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_OUI_SUBTYPE (sMacHdrLng + 21) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_SERVICE_UPDATE_INDICATOR (sMacHdrLng + 22) -#define FRAME_OFFSET_GAS_COMEBACK_RSP_TLV (sMacHdrLng + 24) - -#define SET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(__pHeader, __Value) WriteEF1Byte(((pu1Byte)(__pHeader)) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN, __Value) -#define GET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(__pHeader) ReadEF1Byte(((pu1Byte)(__pHeader)) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN) - -typedef enum _P2P_PUBLIC_ACTION_TYPE { - P2P_PUB_ACT_GO_NEGO_REQ = 0, - P2P_PUB_ACT_GO_NEGO_RSP, - P2P_PUB_ACT_GO_NEGO_CONFIRM, - P2P_PUB_ACT_INVITATION_REQ, - P2P_PUB_ACT_INVITATION_RSP, - P2P_PUB_ACT_DEV_DISCOVERABILITY_REQ, - P2P_PUB_ACT_DEV_DISCOVERABILITY_RSP, - P2P_PUB_ACT_PROVISION_DISCOVERY_REQ, - P2P_PUB_ACT_PROVISION_DISCOVERY_RSP, - P2P_PUB_ACT_GAS_INITIAL_REQ = 10, - P2P_PUB_ACT_GAS_INITIAL_RSP = 11, - P2P_PUB_ACT_GAS_COMEBACK_REQ = 12, - P2P_PUB_ACT_GAS_COMEBACK_RSP = 13, -}P2P_PUBLIC_ACTION_TYPE, *PP2P_PUBLIC_ACTION_TYPE; - -typedef enum _P2P_ACTION_TYPE { - P2P_ACT_NOTICE_OF_ABSENCE = 0, - P2P_PUB_PRESENCE_REQ, - P2P_PUB_PRESENCE_RSP, - P2P_PUB_GO_DISCOVERABILITY_REQ, -}P2P_ACTION_TYPE, *PP2P_ACTION_TYPE; - -#pragma pack(1) - -typedef enum _DEVICE_CAPABILITY { - dcServiceDiscovery = 0x01, - dcP2PClientDiscoverability = 0x02, - dcConcurrentOperation = 0x04, - dcP2PInfrastructureManaged = 0x08, - dcP2PDeviceLimit = 0x10, - dcP2PInvitationProcedure = 0x20, -} DEVICE_CAPABILITY, *PDEVICE_CAPABILITY; - -typedef enum _GROUP_CAPABILITY { - gcP2PGroupOwner = 0x01, - gcPersistentP2PGroup = 0x02, - gcP2PGroupLimit = 0x04, - gcIntraBSSDistribution = 0x08, - gcCrossConnection = 0x10, - gcPersistentReconnect = 0x20, - gcGroupFormation = 0x40, // set to 1 when the P2P Dev is operating as a GO in the Provisioning Phase of Group Formation and set to 0 otherwise -} GROUP_CAPABILITY, *PGROUP_CAPABILITY; - -typedef enum _MANAGEABILITY_BITMAP -{ - maP2PDeviceManagement = BIT0, // The P2P Device Management field set to 1 indicates that the WLAN AP supports Managed P2P Device. - maP2PCrossConnectionPermitted = BIT1, // The Cross Connection Permitted field set to 1 indicates that the WLAN AP permits P2P Concurrent Devices to offer Cross Connection. - maP2PCoexistenceOptional = BIT2, -}MANAGEABILITY_BITMAP, *PMANAGEABILITY_BITMAP; - -typedef enum _INVITATION_FLAGS { - ifP2PInvitationType = 0x01, -} INVITATION_FLAGS, *PINVITATION_FLAGS; - -typedef struct _P2P_WPS_ATTRIBUTES_DEVICE_TYPE { - u2Byte CategoryId; - u1Byte Oui[4]; - u2Byte SubCategoryId; -} P2P_WPS_ATTRIBUTES_DEVICE_TYPE, *PP2P_WPS_ATTRIBUTES_DEVICE_TYPE; - -typedef struct _P2P_WPS_ATTRIBUTES { - u2Byte ConfigMethod; - u2Byte DevicePasswdId; - P2P_WPS_ATTRIBUTES_DEVICE_TYPE PrimaryDeviceType; - u1Byte SecondaryDeviceTypeLength; - P2P_WPS_ATTRIBUTES_DEVICE_TYPE SecondaryDeviceTypeList[8]; - u1Byte DeviceName[32]; - u1Byte DeviceNameLength; -} P2P_WPS_ATTRIBUTES, *PP2P_WPS_ATTRIBUTES; - -// -// WPS IE is big endian (network order) -// We store WPS attributes as host order, but when -// 1. a WPS attribute is recvd, we translate from network order to host order -// 2. transmitting a WPS attribute, we translate from host order to network order. -// -#define P2P_WPS_ATTR_TRANSMITTED_USING_BE 1 - -#if P2P_WPS_ATTR_TRANSMITTED_USING_BE - #define P2P_WPS_ATTR_WRITE_EF_2_BYTE(_ptr, _val) ((*((UNALIGNED pu2Byte)(_ptr))) = H2N2BYTE(_val)) - #define P2P_WPS_ATTR_READ_EF_2_BYTE(_ptr) (N2H2BYTE((*((UNALIGNED pu2Byte)(_ptr))))) -#else - #define P2P_WPS_ATTR_WRITE_EF_2_BYTE(_ptr, _val) (WriteEF2Byte(_ptr, _val)) - #define P2P_WPS_ATTR_READ_EF_2_BYTE(_ptr) (ReadEF2Byte(_ptr)) -#endif - -typedef struct _P2P_CLIENT_INFO_DISCRIPTOR { - u1Byte DeviceAddress[6]; - u1Byte InterfaceAddress[6]; - u1Byte DeviceCapability; - P2P_WPS_ATTRIBUTES WpsAttributes; -} P2P_CLIENT_INFO_DISCRIPTOR, *PP2P_CLIENT_INFO_DISCRIPTOR; - -typedef enum _P2P_ROLE { - P2P_NONE = 0, // default - P2P_DEVICE = 1, - P2P_CLIENT = 2, - P2P_GO = 3, -} P2P_ROLE, *PP2P_ROLE; - -// -// For these macros, actually gcP2PGroupOwner implies P2P_GO role. -// We do redundent check only for accuracy. -// Note that a GO may not be in operating state since it may be in invitation complete, scan complete,... -// -#define P2P_ACTING_AS_GO(_pP2PInfo) ((_pP2PInfo)->Role == P2P_GO) -#define P2P_ACTING_AS_CLIENT(_pP2PInfo) ((_pP2PInfo)->State == P2P_STATE_OPERATING && !P2P_ACTING_AS_GO((_pP2PInfo))) // operating but not GO -#define P2P_ACTING_AS_DEVICE(_pP2PInfo) ((_pP2PInfo)->Role == P2P_DEVICE) -#define P2P_DOING_PROVISION_DISCOVERY(_pP2PInfo) ((_pP2PInfo)->State >= P2P_STATE_PROVISION_DISCOVERY_REQ_SEND && (_pP2PInfo)->State <= P2P_STATE_GO_NEGO_COMPLETE) - -#define P2P_DOING_SERVICE_DISCOVERY_REQ(_pP2PInfo) ((_pP2PInfo)->State <= P2P_STATE_SERVICE_DISCOVERY_COMEBACK_RSP_WAIT && (_pP2PInfo)->State >= P2P_STATE_SERVICE_DISCOVERY_REQ_SEND) - -#define GET_P2P_PUBLIC_ACT_FRAME_DIALOG_TOKEN(__Start) ReadEF1Byte(((pu1Byte)__Start) + 31) -#define SET_P2P_PUBLIC_ACT_FRAME_DIALOG_TOKEN(__Start, __Val) WriteEF1Byte((pu1Byte)(__Start) + 31, __Val) - -#define GET_P2P_VENDOR_ACT_FRAME_DIALOG_TOKEN(__Start) ReadEF1Byte(((pu1Byte)__Start) + 30) -#define SET_P2P_VENDOR_ACT_FRAME_DIALOG_TOKEN(__Start, __Val) WriteEF1Byte((pu1Byte)(__Start) + 30, __Val) - -typedef enum _P2P_PROVISIONING_RESULT { - P2P_PROVISIONING_RESULT_UNKNOWN = 0, - P2P_PROVISIONING_RESULT_SUCCEED, - P2P_PROVISIONING_RESULT_FAILED, -} P2P_PROVISIONING_RESULT, *PP2P_PROVISIONING_RESULT; - -typedef enum _P2P_CURRENT_ICS_STATUS { - P2P_CURRENT_ICS_STATUS_OFF = 0, - P2P_CURRENT_ICS_STATUS_ON = 1, - P2P_CURRENT_ICS_STATUS_UNKNOWN = 2, -} P2P_CURRENT_ICS_STATUS, *PP2P_CURRENT_ICS_STATUS; - -typedef enum _P2P_STATE -{ - P2P_STATE_DISABLED = 0, - P2P_STATE_INITIALIZED = 1, - //P2P_STATE_DISCONNECT = 2, // obsolete - - //====================================================================== - // Device Discovery - //====================================================================== - P2P_STATE_DEV_DISC_START = 11, - P2P_STATE_SCAN = 12, - P2P_STATE_LISTEN = 13, - P2P_STATE_SEARCH = 14, - P2P_STATE_SPECIAL_PEER_SEARCH = 15, // Newly-added for finding specific peers - P2P_STATE_DEV_DISC_COMPLETE = 16, - - //====================================================================== - // Provision Discovery - //====================================================================== - P2P_STATE_PROVISION_DISCOVERY_REQ_SEND = 21, - P2P_STATE_PROVISION_DISCOVERY_RSP_WAIT = 22, - P2P_STATE_PROVISION_DISCOVERY_COMPLETE = 23, - - //====================================================================== - // Group Formation - //====================================================================== - // formator: pre formation -> req send -> rsp wait -> comp - // formatee: req recvd -> rsp send -> confirm wait -> comp - //P2P_STATE_PRE_GROUP_FORMATION = 31, - P2P_STATE_GO_NEGO_REQ_SEND = 32, - P2P_STATE_GO_NEGO_REQ_RECVD = 33, - P2P_STATE_GO_NEGO_RSP_SEND = 34, - P2P_STATE_GO_NEGO_RSP_WAIT = 35, - P2P_STATE_GO_NEGO_CONFIRM_WAIT = 36, - P2P_STATE_GO_NEGO_COMPLETE = 37, - P2P_STATE_GO_NEGO_CONFIRM_SENT_WAIT = 38, - - //====================================================================== - // WPS - //====================================================================== - P2P_STATE_PRE_PROVISIONING = 41, - P2P_STATE_PROVISIONING = 42, - - //====================================================================== - // Group Operation - //====================================================================== - P2P_STATE_OPERATING = 51, - - //====================================================================== - // Invitation - //====================================================================== - // invitor: req send -> rsp wait -> rsp recvd -> comp - // invitee: req recvd -> rsp send -> comp - P2P_STATE_INVITATION_REQ_SEND = 61, - P2P_STATE_INVITATION_RSP_WAIT = 62, - P2P_STATE_INVITATION_REQ_RECVD = 63, - P2P_STATE_INVITATION_COMPLETE = 64, - - //====================================================================== - // Device Discoverability - //====================================================================== - P2P_STATE_DEVICE_DISCOVERABILITY_WAIT_BEACON = 71, - P2P_STATE_DEVICE_DISCOVERABILITY_REQ_SEND = 72, - P2P_STATE_DEVICE_DISCOVERABILITY_RSP_WAIT = 73, - //P2P_STATE_GO_DISCOVERABILITY_REQ_SEND = 74, - //P2P_STATE_GO_DISCOVERABILITY_REQ_RECVD = 75, - P2P_STATE_DEVICE_DISCOVERABILITY_COMPLETE = 76, - //====================================================================== - // Service Discovery - //====================================================================== - // invitor: req send -> rsp wait -> rsp recvd -> comp - // invitee: req recvd -> rsp send -> comp - P2P_STATE_SERVICE_DISCOVERY_REQ_SEND = 81, - P2P_STATE_SERVICE_DISCOVERY_RSP_WAIT = 82, // not to be dealt in the state machine - //P2P_STATE_SERVICE_DISCOVERY_REQ_RECVD = 83, - P2P_STATE_SERVICE_DISCOVERY_COMPLETE = 84, - //P2P_STATE_SERVICE_DISCOVERY_COMEBACK_REQ_SEND = 85, // For the requestor to send ComebackReq - P2P_STATE_SERVICE_DISCOVERY_COMEBACK_RSP_WAIT = 86, // For the requestor to wait ComebackRsp - //P2P_STATE_SERVICE_DISCOVERY_COMEBACK_REQ_WAIT = 87, // For the requestee to wait ComebackReq - - P2P_STATE_MAX = 0xFF, -} P2P_STATE, *PP2P_STATE; - -typedef struct _P2P_DEVICE_DISCRIPTOR { - u1Byte WPS_UUID[16]; - P2P_ROLE Role; - - // From P2P Capability subelement - u1Byte DeviceCapability; - u1Byte GroupCapability; - - // From P2P Device Info - u1Byte DeviceAddress[6]; // the key - P2P_WPS_ATTRIBUTES WpsAttributes; - - // Channel - u1Byte RegulatoryClass; - u1Byte ListenChannel; - u1Byte OperatingChannel; - u1Byte CountryString[3]; - u1Byte ChannelPlanChannel[32]; - u1Byte ChannelPlanLength; - - // P2P Group Info - P2P_CLIENT_INFO_DISCRIPTOR P2PClientDescriptorList[P2P_MAX_P2P_CLIENT]; - u1Byte P2PClientDescriptorListLength; - - // SSID - u1Byte SsidBuf[32]; - u1Byte SsidLen; - - u1Byte GOIntent; - - // Configuration Timeout - u1Byte GOConfigurationTimeout; - u1Byte ClientConfigurationTimeout; - - u1Byte DialogToken; - - u1Byte GroupBssid[6]; //1 used for invitation - - // - // This is valid after AsocReq, AsocRsp, GONReq, GONRsp is recvd - // - u1Byte IntendedP2PInterfaceAddress[6]; - - u1Byte Status; - u1Byte MinorReasonCode; - - u2Byte ExtendedListenTimingPeriod; //ms - u2Byte ExtendedListenTimingDuration; // ms - - // v1Spec - s2Byte SignalStrength; - - // v2Spec - u4Byte version; - u1Byte manufacturerName[65]; - -} P2P_DEVICE_DISCRIPTOR, *PP2P_DEVICE_DISCRIPTOR; - -typedef struct _P2P_DEVICE_DESCRIPTOR_V0 { - u1Byte WPS_UUID[16]; - P2P_ROLE Role; - - // From P2P Capability subelement - u1Byte DeviceCapability; - u1Byte GroupCapability; - - // From P2P Device Info - u1Byte DeviceAddress[6]; // the key - P2P_WPS_ATTRIBUTES WpsAttributes; - - // Channel - u1Byte RegulatoryClass; - u1Byte ListenChannel; - u1Byte OperatingChannel; - u1Byte CountryString[3]; - u1Byte ChannelPlanChannel[32]; - u1Byte ChannelPlanLength; - - // P2P Group Info - P2P_CLIENT_INFO_DISCRIPTOR P2PClientDescriptorList[P2P_MAX_P2P_CLIENT]; - u1Byte P2PClientDescriptorListLength; - - // SSID - u1Byte SsidBuf[32]; - u1Byte SsidLen; - - u1Byte GOIntent; - - // Configuration Timeout - u1Byte GOConfigurationTimeout; - u1Byte ClientConfigurationTimeout; - - u1Byte DialogToken; - - u1Byte GroupBssid[6]; //1 used for invitation - - // - // This is valid after AsocReq, AsocRsp, GONReq, GONRsp is recvd - // - u1Byte IntendedP2PInterfaceAddress[6]; - - u1Byte Status; - u1Byte MinorReasonCode; - - u2Byte ExtendedListenTimingPeriod; //ms - u2Byte ExtendedListenTimingDuration; // ms -} P2P_DEVICE_DESCRIPTOR_V0, *PP2P_DEVICE_DESCRIPTOR_V0; - -typedef struct _P2P_DEVICE_DESCRIPTOR_V1 { - P2P_DEVICE_DESCRIPTOR_V0 descV0; - s2Byte SignalStrength; -} P2P_DEVICE_DESCRIPTOR_V1, *PP2P_DEVICE_DESCRIPTOR_V1; - -typedef struct _P2P_DEVICE_DESCRIPTOR_V2 { - P2P_DEVICE_DESCRIPTOR_V1 descV1; - u4Byte version; - u1Byte manufacturerName[65]; -} P2P_DEVICE_DESCRIPTOR_V2, *PP2P_DEVICE_DESCRIPTOR_V2; - - -typedef struct _P2P_PROFILE { - u1Byte OpChannel; - u1Byte SsidBufLen; - u1Byte SsidBuf[32]; -}P2P_PROFILE, *PP2P_PROFILE; - -// Description: -// Set by upper layer to let driver know the current profile list. -// Used when receiving reinvoke request to determine whether we have corresponding profile. -// Reply unknown group if we don't. -// -typedef struct _P2P_PROFILE_LIST_ENTRY -{ - P2P_ROLE selfRole; - UCHAR ssidBufLen; - UCHAR ssidBuf[32]; - UCHAR grpBssid[6]; -}P2P_PROFILE_LIST_ENTRY, *PP2P_PROFILE_LIST_ENTRY; - -typedef struct _P2P_PROFILE_LIST -{ - u4Byte nProfiles; - P2P_PROFILE_LIST_ENTRY profileList[1]; -}P2P_PROFILE_LIST, *PP2P_PROFILE_LIST; - -typedef struct _P2P_GO_FORMATED_INFO { - P2P_ROLE p2pRole; // The role this device will be. Only GO and Client are vliad. - P2P_DEVICE_DISCRIPTOR targetDesc; // The target descriptor that will be joined. -}P2P_GO_FORMATED_INFO, *PP2P_GO_FORMATED_INFO; - -typedef struct _P2P_LIB_INVITATION_REQ_CONTEXT -{ - u1Byte DialogToken; - P2P_ROLE InvitorRole; - u1Byte TargetDeviceAddress[6]; - BOOLEAN bPersistent; - u1Byte OpChannel; - u1Byte GroupBssid[6]; - u1Byte GroupDeviceAddress[6]; - u1Byte GroupSsidLen; - u1Byte GroupSsidBuf[32]; -}P2P_LIB_INVITATION_REQ_CONTEXT, *PP2P_LIB_INVITATION_REQ_CONTEXT; - -typedef struct _P2P_LIB_INVITATION_RSP_CONTEXT -{ - u4Byte Status; - BOOLEAN bPersistent; - u1Byte OpChannel; - P2P_ROLE Role; - u1Byte GroupSsidLen; - u1Byte GroupSsidBuf[32]; -}P2P_LIB_INVITATION_RSP_CONTEXT, *PP2P_LIB_INVITATION_RSP_CONTEXT; - -typedef struct _P2P_POWERSAVE_NOA_SET -{ - BOOLEAN bNoAEn; // Indicate wheter the NoA is enabled. - u4Byte NoADur; // The duration of NoA in micro-second. - u4Byte NoAInt; // The interval of NoA in micro-second. - BOOLEAN bUseStartTime; // If this is true, use the u4Start time as the start time, otherwisr caculate the start time automatically through the current TSF. - u4Byte u4StartTime; - u1Byte NoACnt; // The number of NoA. -}P2P_POWERSAVE_NOA_SET, *PP2P_POWERSAVE_NOA_SET; - -#define P2P_PS_MIN_CTWIN 10 // 10 ms - -typedef struct _P2P_POWERSAVE_SET -{ - BOOLEAN bOppPs; // if true, the GO will enter PS mode out of CTWindows. - u1Byte CTWindow; // The period of time in TU after a TBTT during which the P2P GO is present. - P2P_POWERSAVE_NOA_SET NoASet[P2P_MAX_NUM_NOA_DESC]; // The array of NoA power settings. -}P2P_POWERSAVE_SET, *PP2P_POWERSAVE_SET; - -typedef enum _P2P_SD_PROTOCOL -{ - P2P_SD_PROTOCOL_ALL_TYPE, - P2P_SD_PROTOCOL_BONJOUR, - P2P_SD_PROTOCOL_UPNP, - P2P_SD_PROTOCOL_WS_DISCOVERY, - P2P_SD_PROTOCOL_RSVD_4, - P2P_SD_PROTOCOL_RSVD_5, - P2P_SD_PROTOCOL_RSVD_6, - P2P_SD_PROTOCOL_RSVD_7, - P2P_SD_PROTOCOL_RSVD_8, - P2P_SD_PROTOCOL_RSVD_9, - P2P_SD_PROTOCOL_RSVD_10, - P2P_SD_PROTOCOL_P2PSVC, - P2P_SD_PROTOCOL_VENDOR_SPECIFIC = 255, -}P2P_SD_PROTOCOL, *PP2P_SD_PROTOCOL; - -typedef enum _P2P_SD_STATUS_CODE -{ - P2P_SD_STATUS_SUCCESS, - P2P_SD_STATUS_SERVICE_PROTOCOL_TYPE_UNAVAIABLE, - P2P_SD_STATUS_REQUESTED_INFO_UNAVAIABLE, - P2P_SD_STATUS_BAD_REQUEST, - - // Defined by Realtek - P2P_SD_STATUS_SERVICE_RSP_TIMEOUT, - P2P_SD_STATUS_COMEBACK_REQ_TIMEOUT, - P2P_SD_STATUS_COMEBACK_RSP_TIMEOUT, - P2P_SD_STATUS_COMMON_CHANNEL_NOT_ARRIVED, - P2P_SD_STATUS_BAD_RESPONSE_1, - P2P_SD_STATUS_BAD_RESPONSE_2, - P2P_SD_STATUS_BAD_RESPONSE_3, - P2P_SD_STATUS_WAIT_FOR_COMEBACK_REQ, - P2P_SD_STATUS_WAIT_FOR_COMEBACK_RSP, -}P2P_SD_STATUS_CODE, *PP2P_SD_STATUS_CODE; - -#define P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN 1024 -typedef struct _P2P_SERVICE_DESCRIPTOR -{ - P2P_SD_PROTOCOL ServiceType; - u2Byte BufferLength; - u1Byte Buffer[P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN]; // The ServiceInfo is for the serivice info we provide -}P2P_SERVICE_DESCRIPTOR, *PP2P_SERVICE_DESCRIPTOR; - -typedef struct _P2P_SERVICE_REQ_TLV -{ - u1Byte TransactionID; - P2P_SERVICE_DESCRIPTOR ServiceDesc; -}P2P_SERVICE_REQ_TLV, *PP2P_SERVICE_REQ_TLV; - -typedef struct _P2P_SERVICE_RSP_TLV -{ - u1Byte TransactionID; - P2P_SERVICE_DESCRIPTOR ServiceDesc; - P2P_SD_STATUS_CODE Status; -}P2P_SERVICE_RSP_TLV, *PP2P_SERVICE_RSP_TLV; - -// -// This is the structure filled by UI to issue a SD Request -// -#define P2P_SD_MAX_SERVICES 10 -typedef struct _P2P_SD_REQ_CONTEXT -{ - u1Byte TargetDeviceAddress[6]; // specifies the peer to query - u1Byte ServiceReqTLVSize; - P2P_SERVICE_REQ_TLV ServiceReqTLVList[1]; -}P2P_SD_REQ_CONTEXT, *PP2P_SD_REQ_CONTEXT; - -typedef struct _P2P_SD_RSP_CONTEXT -{ - P2P_SD_STATUS_CODE SDStatus; - u1Byte SourceDeviceAddress[6]; - u2Byte ServiceUpdateIndicator; - u1Byte ServiceRspTLVSize; - P2P_SERVICE_RSP_TLV ServiceRspTLVList[1]; -}P2P_SD_RSP_CONTEXT, *PP2P_SD_RSP_CONTEXT; - -#define P2P_MAX_SERVICE_BUF_SIZE (sizeof(P2P_SD_RSP_CONTEXT) + (P2P_SD_MAX_SERVICES - 1) * sizeof(P2P_SERVICE_RSP_TLV)) - -#pragma pack() - -typedef enum _P2P_STATUS_CODE { - P2P_STATUS_SUCCESS = 0, - P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE = 1, - P2P_STATUS_FAIL_INCOMPATIBLE_PARAMETERS = 2, - P2P_STATUS_FAIL_LIMIT_REACHED = 3, - P2P_STATUS_FAIL_INVALID_PARAMETERS = 4, - P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST = 5, - P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERROR_OR_DISRUPTIVE_BEHAVIOR = 6, - P2P_STATUS_FAIL_NO_COMMON_CHANNELS = 7, - P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP = 8, - P2P_STATUS_FAIL_BOTH_P2P_DEVICES_INDICATED_GO_INTENT_OF_15 = 9, - P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD = 10, - P2P_STATUS_FAIL_REJECTED_BY_USER = 11, - P2P_STATUS_SUCCESS_ACCEPTED_BY_USER = 12, - - P2P_STATUS_FAIL_COMMON_CHANNEL_NOT_ARRIVED = 200, - P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GON_RSP, - P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GON_CONFIRM, - P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_GO_BEACON, - P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_DEVICE_DISCOVERABILITY_RSP, - P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_PROVISION_DISCOVERY_RSP, - - P2P_STATUS_FAIL_TIMEOUT_WAITING_FOR_INVITATION_RSP, - - P2P_STATUS_FAIL_PROVISION_DISCOVERY_FAILED, - - P2P_STATUS_FAIL_SERVICE_DISCOVERY_FAILED, - - P2P_STATUS_MAX = 255, -} P2P_STATUS_CODE, *PP2P_STATUS_CODE; - -typedef struct _P2P_CONNECTION_CONTEXT { - P2P_DEVICE_DISCRIPTOR ConnectingDevice; - u1Byte Status; - u1Byte DialogToken; - u1Byte FindPhaseLoopTimes; - BOOLEAN bGoingToBeGO; - - // WPS - - // Set after P2P_STATE_PRE_PROVISIONING until Provisioning succeeds - BOOLEAN bDoingProvisioning; - - P2P_PROVISIONING_RESULT ProvisioningResult; - - BOOLEAN bProbePeerChannelList; -} P2P_CONNECTION_CONTEXT, *PP2P_CONNECTION_CONTEXT; - -typedef struct _P2P_INVITATION_CONTEXT { - P2P_ROLE InvitorRole; - BOOLEAN bPersistentInvitation; - u1Byte DialogToken; - P2P_DEVICE_DISCRIPTOR InvitedDevice; - BOOLEAN bToSendInvitationReqOnProbe; // when inviting a P2P Device, we have to wait for its ProbeReq so that we know its current chnl - BOOLEAN bToUseDeviceDiscoverability; - P2P_STATUS_CODE Status; - BOOLEAN bInvitor; - u1Byte SsidBuf[32]; - u1Byte SsidLen; - u1Byte GroupBssid[6]; - u1Byte GODeviceAddress[6]; - u1Byte Channel; // channel that will be used to send the invitation req - u1Byte OpChannel; // op channel in the invitation request - - BOOLEAN bWaitingBackwardInvite; - -}P2P_INVITATION_CONTEXT, *PP2P_INVITATION_CONTEXT; - -typedef struct _P2P_PROVISION_DISCOVERY_CONTEXT { - BOOLEAN bDoingProvisionDiscovery; - u1Byte devAddr[6]; - BOOLEAN go; - u1Byte goBssid[6]; - u1Byte Channel; - - u1Byte SsidBuf[32]; - u1Byte SsidLen; - -}P2P_PROVISION_DISCOVERY_CONTEXT, *PP2P_PROVISION_DISCOVERY_CONTEXT; - -typedef struct _P2P_PERSISTENT_PROFILE { - u1Byte SsidBuf[32]; - u1Byte SsidLen; - u1Byte GroupBssid[6]; - u1Byte GODeviceAddress[6]; -}P2P_PERSISTENT_PROFILE, *PP2P_PERSISTENT_PROFILE; - -typedef struct _P2P_DEVICE_DISCOVERABILITY_CONTEXT { - BOOLEAN bWaitingBeaconFromGO; - u1Byte GoBssid[6]; - u1Byte GODeviceAddr[6]; - u1Byte GOSsidBuf[32]; - u1Byte GOSsidLen; - u1Byte ClientDeviceAddress[6]; - u1Byte DialogToken; - u1Byte GOChannel; - P2P_STATUS_CODE Status; - u1Byte OriginalChannel; - P2P_STATE OriginalState; - BOOLEAN bGoConnect; // Try to connect it if discoverability request is sent successfully. -}P2P_DEVICE_DISCOVERABILITY_CONTEXT, *PP2P_DEVICE_DISCOVERABILITY_CONTEXT; - -typedef enum _WPS_ATTRIBUTE_TAG { // network order - P2P_WPS_ATTR_TAG_CONFIG_METHODS = 0x1008, - P2P_WPS_ATTR_TAG_DEVICE_NAME = 0x1011, - P2P_WPS_ATTR_TAG_DEVICE_PASSWORD_ID = 0x1012, - P2P_WPS_ATTR_TAG_UUID_E = 0x1047, - P2P_WPS_ATTR_TAG_VERSION = 0x104A, - P2P_WPS_ATTR_TAG_PRIMARY_DEVICE_TYPE = 0x1054, - P2P_WPS_ATTR_TAG_SEC_DEVICE_TYPE_LIST = 0x1055, - P2P_WP2_ATTR_TAG_REQUESTED_DEVICE_TYPE = 0x106A, - P2P_WP2_ATTR_TAG_MANUFACTURER_NAME = 0x1021, -} WPS_ATTRIBUTE_TAG, *PWPS_ATTRIBUTE_TAG; - -typedef enum _WPS_CONFIG_METHODS -{ - P2P_WPS_CONFIG_METHODS_LABEL = 0x04, - P2P_WPS_CONFIG_METHODS_DISPLAY = 0x08, - P2P_WPS_CONFIG_METHODS_PUSHBUTTON = 0x80, - P2P_WPS_CONFIG_METHODS_KEYPAD = 0x100, - P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN = 0x1000, -}WPS_CONFIG_METHODS, *PWPS_CONFIG_METHODS; - -typedef enum _WPS_DEVICE_PASSWD_ID -{ - P2P_WPS_DEV_PASSWD_ID_DEFAULT =0x0000, - P2P_WPS_DEV_PASSWD_ID_USER_SPEC =0x0001, - P2P_WPS_DEV_PASSWD_ID_MACHINE_SPEC =0x0002, - P2P_WPS_DEV_PASSWD_ID_REKEY =0x0003, - P2P_WPS_DEV_PASSWD_ID_PBC =0x0004, - P2P_WPS_DEV_PASSWD_ID_REG_SPEC =0x0005, - P2P_WPS_DEV_PASSWD_ID_RESERVED =0x0006, - P2P_WPS_DEV_PASSWD_ID_WFDS_DEFAULT_PIN = 0x0008, -}WPS_DEVICE_PASSWD_ID , *PWPS_DEVICE_PASSWD_ID; - -typedef struct _P2P_SD_CONTEXT -{ - BOOLEAN bDoingServiceDiscovery; // set when P2PServiceDiscoveryReq is successfully called and cleared when common channel arrived or failed - BOOLEAN bRequester; - - P2P_SD_REQ_CONTEXT UserSDReq; // Set from upper layer and used to construct SDReq - P2P_SERVICE_REQ_TLV UserSDReqTLVList[P2P_SD_MAX_SERVICES - 1]; - - u1Byte DialogToken; - u1Byte TransactionID; - - u1Byte TargetDeviceAddress[6]; - - u2Byte ServiceUpdateIndicator; - - // The request we recieve - u1Byte ServiceReqRecvdSize; - P2P_SERVICE_REQ_TLV ServiceReqRecvd[P2P_SD_MAX_SERVICES]; - u1Byte ServiceRspRecvdSize; - P2P_SERVICE_RSP_TLV ServiceRspRecvd[P2P_SD_MAX_SERVICES]; - - // The buffer we used to construct Rsp TLV list - u2Byte ANQPQueryRspFieldToSendSize; - u1Byte ANQPQueryRspFieldToSendBuf[P2P_MAX_SERVICE_BUF_SIZE]; - u2Byte ANQPQueryRspFieldToSendOffset; - - P2P_SD_STATUS_CODE Status; - u1Byte Channel; // the channel on which SDReq shall be sent or SDReq is recvd - - // For fragmentation - BOOLEAN bFragment; - u1Byte FragmentID; -}P2P_SD_CONTEXT, *PP2P_SD_CONTEXT; - -typedef struct _P2P_NOA_DESCRIPTOR -{ - BOOLEAN bValid; - u1Byte CountOrType; - u4Byte Duration; - u4Byte Interval; - u4Byte StartTime; - u8Byte u8StartTime; // For timeout reference purpose, and if need, update the beacon. - u8Byte u8EndTime; // For NoA end reference or when need to update the beacon. -}P2P_NOA_DESCRIPTOR , *PP2P_NOA_DESCRIPTOR ; - -#define P2P_PS_CANCEL_ALL_PS 0 // Cancel PS, keep awake -#define P2P_PS_LEAVE_PS_BY_OUT_CTWIN_ClIENT_AWAKE BIT0 // Leave sleep because one client is in active or our client is active. -#define P2P_PS_LEAVE_PS_BY_NOA BIT1 // Leave sleep because now is not in NoA. -#define P2P_PS_ENTER_PS_BY_PERIODIC_NOA BIT2 // Enter sleep because now is in periodic NoA. -#define P2P_PS_ENTER_PS_BY_CTWIN BIT3 // Enter sleep because now is out of CTWin (and no client is in active mode) -#define P2P_PS_LEAVE_PS_BY_CTWIN_TBTT BIT4 // Leave sleep because we are in CTWin. -#define P2P_PS_LEAVE_PS_BY_TBTT BIT5 // Leave sleep because we are in TBTT to send the Beacon -#define P2P_PS_ENTER_PS_BY_1TIME_NOA BIT6 // Enter sleep because we are in 1-time NoA - -typedef enum _P2P_PS_STATE -{ - P2P_PS_AWAKE = 0, - P2P_PS_DOZE_SEND_MGNT = 1, // For GO, it means scan process, just stop data queue. - P2P_PS_DOZE = 2, -}P2P_PS_STATE, *PP2P_PS_STATE; - -typedef enum _P2P_PS_UPDATE_REASON -{ - P2P_PS_UPDATE_NONE = 0, // Not Specified - P2P_PS_UPDATE_BY_USER = 1, // Send presence req for Client, or update NoA IE for GO - P2P_PS_UPDATE_BY_PRESENCE_REQ = 2, // Our GO receives the presence req from its client - P2P_PS_UPDATE_BY_BEACON = 3, // Our client receives the Beacon or Action frame including NoA IE. - P2P_PS_UPDATE_BY_CLI_PS_MODE = 4, // The Power Save mode changed -}P2P_PS_UPDATE_REASON, *PP2P_PS_UPDATE_REASON; - -typedef struct _P2P_REG_CLASS_MAP { - u1Byte RegClass; - u1Byte MinChannel; - u1Byte MaxChannel; - u1Byte ChannelGap; - CHANNEL_WIDTH chWidth; - EXTCHNL_OFFSET chOffsest; -}P2P_REG_CLASS_MAP, *PP2P_REG_CLASS_MAP; - -static P2P_REG_CLASS_MAP P2PRegClass[] = -{ -/* {81, 1, 13, 1}, - {82, 14, 14, 1}, - {115, 36, 48, 4}, - {124, 149, 161, 4}, - {116, 36, 44, 8}, - {117, 40, 48, 8}, - {126, 149, 157, 8}, - {127, 153, 161, 8}, - {125, 165, 165, 1}, - { 0, 0, 0, 0} -*/ - {81, 1, 13, 1, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT}, - {82, 14, 14, 1, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT}, - - //{83, 1, 6, 1, CHANNEL_WIDTH_40, EXTCHNL_OFFSET_UPPER}, - //{84, 7, 13, 1, CHANNEL_WIDTH_40, EXTCHNL_OFFSET_NO_EXT}, - - {115, 36, 48, 4, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT}, - - {116, 36, 44, 8, CHANNEL_WIDTH_40, EXTCHNL_OFFSET_UPPER}, - {117, 40, 48, 8, CHANNEL_WIDTH_40, EXTCHNL_OFFSET_NO_EXT}, - - {124, 149, 161, 4, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT}, - - {126, 149, 157, 8, CHANNEL_WIDTH_40, EXTCHNL_OFFSET_UPPER}, - {127, 153, 161, 8, CHANNEL_WIDTH_40, EXTCHNL_OFFSET_NO_EXT}, - - {125, 165, 165, 1, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT}, - //--------------------------------------------------------------------------------- - { 0, 0, 0, 0, CHANNEL_WIDTH_20, EXTCHNL_OFFSET_NO_EXT} -}; - - -// For Win 8: OID_DOT11_WFD_DISCOVER_REQUEST ----------- -#define P2P_DISCOVERY_SCAN_PHASE BIT0 -#define P2P_DISCOVERY_FIND_PHASE BIT1 -typedef ULONG P2P_DISCOVER_SEQUENCE; - - -#define P2P_MAX_DEVICE_ID_TO_SCAN 8 -typedef struct _P2P_DEVICE_ID_TO_SCAN { - ULONG uNumOfDeviceIDs; - u1Byte DeviceIDs[P2P_MAX_DEVICE_ID_TO_SCAN][6]; -} P2P_DEVICE_ID_TO_SCAN, * PP2P_DEVICE_ID_TO_SCAN; -//---------------------------------------------------------------------------- - -// Save the raw packets of the devices found in the channel ------------------------------- -typedef struct _P2P_DEVICE_LIST_ENTRY { - - // From MPDU - u1Byte MacAddress[6]; - u1Byte DeviceAddress[6]; - - MEMORY_BUFFER BeaconPacket; - u8Byte BeaconHostTimestamp; - - MEMORY_BUFFER ProbeResponsePacket; - u8Byte ProbeResponseHostTimestamp; - - u1Byte ChannelNumber; - - // From RT_RFD_STATUS - s4Byte RecvSignalPower; - u1Byte SignalStrength; - -} P2P_DEVICE_LIST_ENTRY, *PP2P_DEVICE_LIST_ENTRY; - -#define P2P_MAX_DEVICE_LIST 64 -#define P2P_MAX_DEVICE_LIST_WHCK 15 - -typedef struct _P2P_DEVICE_LIST { - u1Byte uNumberOfDevices; - P2P_DEVICE_LIST_ENTRY DeviceEntry[P2P_MAX_DEVICE_LIST]; -} P2P_DEVICE_LIST, *PP2P_DEVICE_LIST; - -// + Action codes for the device list operation -#define P2P_DEVICE_LIST_ACTION_COPY_TO_QUERY_LIST 0x01 -#define P2P_DEVICE_LIST_ACTION_CLEAR 0x02 -#define P2P_DEVICE_LIST_ACTION_DUMP 0x03 -//---------------------------------------------------------------------------- - -// Memory buffer action codes ---------------------------------------------------- -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_BEACON 0x01 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_PROBE_RESPONSE 0x02 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_DEFAULT_REQUEST 0x03 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_PROBE_REQUEST 0x04 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_PROVISION_DISCOVERY_REQUEST 0x05 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_PROVISION_DISCOVERY_RESPONSE 0x06 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_GO_NEGOTIATION_REQUEST 0x07 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_GO_NEGOTIATION_RESPONSE 0x08 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_GO_NEGOTIATION_CONFIRM 0x09 -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_INVITATION_REQUEST 0x0A -#define P2P_MEMORY_BUFFER_ACTION_ADDITIONAL_IE_INVITATION_RESPONSE 0x0B -//---------------------------------------------------------------------------- - -// Event ID for PlatformIndicateP2PEvent() ----------------------------------------- -#define P2P_EVENT_NONE 0x00 -#define P2P_EVENT_DEVICE_DISCOVERY_COMPLETE 0x01 -#define P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE 0x02 -#define P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST 0x03 -#define P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE 0x04 -#define P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE 0x05 -#define P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE 0x06 -#define P2P_EVENT_RECEIVED_GO_NEGOTIATION_REQUEST 0x07 -#define P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE 0x08 -#define P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE 0x09 -#define P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE 0x0A -#define P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM 0x0B -#define P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE 0x0C -#define P2P_EVENT_RECEIVED_INVITATION_REQUEST 0x0D -#define P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE 0x0E -#define P2P_EVENT_RECEIVED_INVITATION_RESPONSE 0x0F -#define P2P_EVENT_GO_OPERATING_CHANNEL 0x10 -#define P2P_EVENT_DEV_FOUND 0x11 - - -typedef union _P2P_EVENT_DATA { - RT_STATUS rtStatus; - MEMORY_BUFFER Packet; -} P2P_EVENT_DATA, *PP2P_EVENT_DATA; -// --------------------------------------------------------------------------- - -// Win8: For OID post process workitem -------------------------------------------------------------------- -typedef enum _P2P_OID_POST_PROCESS_OPERATION { - OID_OPERATION_NO_OPERATION, - OID_OPERATION_SEND_PACKET, - OID_OPERATION_INDICATE_DISCOVERY_COMPLETE -} P2P_OID_POST_PROCESS_OPERATION, * PP2P_OID_POST_PROCESS_OPERATION; -//---------------------------------------------------------------------------------------------------- - -typedef enum _P2P_CLIETN_JOIN_GROUP_WPS_STATE -{ - P2P_CLIETN_JOIN_GROUP_WPS_STATE_NONE = 0, // No WPS state - P2P_CLIETN_JOIN_GROUP_WPS_STATE_SCANNING, // Scan WPS Group - P2P_CLIENT_JOIN_GROUP_WPS_STATE_GO_READY, // The WPS information of target GO is ready. - P2P_CLIETN_JOIN_GROUP_WPS_STATE_ASSOCIATING, // 802.11 Associating - P2P_CLIETN_JOIN_GROUP_WPS_STATE_HANDSHAKING, // WPS handshaking -}P2P_CLIETN_JOIN_GROUP_WPS_STATE, *PP2P_CLIETN_JOIN_GROUP_WPS_STATE; - -// Win8: Information when Client starts to connect to GO ------------------------------------------------------ -typedef struct _P2P_CLIENT_JOIN_GROUP_CONTEXT{ - - BOOLEAN bInGroupFormation; - P2P_CLIETN_JOIN_GROUP_WPS_STATE WpsState; - - u1Byte uWaitForWpsSlotCount; // 100 ms per slot - RT_TIMER P2PWaitForWpsReadyTimer; - -} P2P_CLIENT_JOIN_GROUP_CONTEXT, *PP2P_CLIENT_JOIN_GROUP_CONTEXT; -// ---------------------------------------------------------------------------------------------------- - -// Win8: Set the Default Listen Channel and Operating Channel ---------- -#define P2P_DEFAULT_LISTEN_CHANNEL 11 -#define P2P_DEFAULT_OPERATING_CHANNEL 11 -// ------------------------------------------------------------- - -// Win8: ----------------------------------------------------------- -#define P2P_RESERVED_TIME_FOR_ACTION_FRAME_MS 30 -//----------------------------------------------------------------- -#define P2P_DEFAULT_GO_INTENT 14 -#define P2P_DEFAULT_GO_INTENT_TIE_BREAKER 1 - -typedef struct _P2P_INFO { - DECLARE_RT_OBJECT(P2P_INFO); - - //====================================================================== - // Common - //====================================================================== - u4Byte P2PVersion; - P2P_ROLE Role; - u8Byte lastStateu8Time; - P2P_STATE State; - P2P_STATE PreviouslyIndicatedState; - u8Byte PreviouslyIndicateStateTime; - - u1Byte DeviceAddress[6]; - u1Byte InterfaceAddress[6]; - - u1Byte DeviceCapability; - u1Byte GroupCapability; - - u1Byte GOIntent; - - BOOLEAN bProbeReqByLegacyClient; - - // Channel - u1Byte RegulatoryClass; - u1Byte OperatingChannel; // intended or preferred or actual op chnl - u1Byte ListenChannel; - u1Byte CountryString[3]; - //u1Byte ChannelPlanChannel[32]; // this is not to be modified but for reference only - //u1Byte ChannelPlanLength; - P2P_CHANNELS ChannelEntryList; - - //WPS - P2P_WPS_ATTRIBUTES WpsAttributes; - WPS_DEVICE_PASSWD_ID WpsDevPasswdId; // this is the source of our provisioning info - - // Configuration Timeout, in units of 10ms - u1Byte GOConfigurationTimeout; - u1Byte ClientConfigurationTimeout; - - // Scan List - P2P_DEVICE_DISCRIPTOR ScanList[P2P_MAX_SCAN_LIST]; - u4Byte ScanListSize; - P2P_DEVICE_DISCRIPTOR ScanList4Query[P2P_MAX_SCAN_LIST]; - u4Byte ScanList4QuerySize; - P2P_STATE StateBeforeScan; - u4Byte ForceScanListIndicateSlotCount; - BOOLEAN bDeviceDiscoveryInProgress; - - // Connection - P2P_CONNECTION_CONTEXT ConnectionContext; - P2P_STATUS_CODE PreviousGONegoResult; // this is for Sigma query - BOOLEAN bReinitiateConnection; - u1Byte DevAddrToReConnect[6]; - u8Byte TimeStartWaitingForReinitiate; - u4Byte msTimeWaitGoNegoConfirmSent; - - // Ext Listen Timing - u4Byte ExtListenTimingPeriodSlotCount; - BOOLEAN bExtendedListening; - u2Byte ExtListenTimingPeriod; - u2Byte ExtListenTimingDuration; - - // Status - u1Byte Status; - u1Byte MinorReasonCode; - - u1Byte DialogToken; - u1Byte oidDialogToken; - - P2P_INVITATION_CONTEXT InvitationContext; - BOOLEAN bAcceptInvitation; - u1Byte AccpetInvitationDeviceAddress[6]; - P2P_DEVICE_DISCOVERABILITY_CONTEXT DeviceDiscoverabilityContext; - - // ICS - P2P_CURRENT_ICS_STATUS CurrentIcsStatus; - - // Provision Discovery - P2P_PROVISION_DISCOVERY_CONTEXT ProvisionDiscoveryContext; - u1Byte ProvisionReqRetryCnt; - - BOOLEAN bPreGroupFormation; - - BOOLEAN bSendProbeReqInExtendedListen; - - // Service Discovery - P2P_SD_CONTEXT SDContext; // Used to do Service Discovery - u2Byte SDRspFragmtntThreshold; - u4Byte SDWaitForComebackReqSlotCount; - - // Profile list - u4Byte profileListLen; - PP2P_PROFILE_LIST pProfileList; - - //====================================================================== - // GO Specific - //====================================================================== - BOOLEAN bGOStartedAutonomously; - u4Byte P2PGONoClientSlotCount; - u4Byte P2PClientDisconnectedSlotCount; - u1Byte SSIDLen; - u1Byte SSIDBuf[32]; - u1Byte SSIDPostfixLen; - u1Byte SSIDPostfixBuf[32-9]; //32 -len("DIRECT-xx") - u1Byte regSSIDBuf[32]; // Set by the upper layer - u1Byte regSSIDLen; - - // PS related - RT_P2P_PS_EXE_TYPE psExeType; - BOOLEAN bUpdateFromBeacon; // When the inforamtion had ever updated, this flag set true. - BOOLEAN bUpdatePsParameter; // We need to update the PS parameter for USB interface in the next process. - P2P_POWERSAVE_SET P2pPsConfgSet; // The temp p2p power save configuration for later use. - u4Byte PsFlag; - u8Byte NextTimeout; - u4Byte usSleepTime; - P2P_PS_STATE P2pPsState; - u1Byte NoAIEIndex; - BOOLEAN bOppPS; - u1Byte CTWindow; - P2P_NOA_DESCRIPTOR NoADescriptors[P2P_MAX_NUM_NOA_DESC]; - - //====================================================================== - // P2P Managed - //====================================================================== - BOOLEAN bWlanApRejection_CrossConnection; // set because of minor reason code 1 in deauth/disassoc from wlan ap - BOOLEAN bWlanApRejection_Unmanaged; // minor reason code 2 - BOOLEAN bWlanApRejection_IncompatibleCoexistenceParameters; // minor reason code 3 - BOOLEAN bWlanApRejection_IncompatibleP2POperation; // minor reason code 4 - - //====================================================================== - // Other 802.11 Info, to be carried in ProbeRsp constructed by IHV Service - //====================================================================== - - //====================================================================== - // Temporary Fields - //====================================================================== - PADAPTER pAdapter; // this shall be the default adapter under win7 - - - // ActionTimer -------------------------------------------- - // + This may be used to replace P2PMgntTimer - ACTION_TIMER_HANDLE P2PActionTimer; - // ------------------------------------------------------- - - - RT_TIMER P2PMgntTimer; - u8Byte LastTimerFired; - - u1Byte ManagedUpdateCnt; // Update the managed info from Wlan AP. - // - // If true, the SP is ended by the NoA, and the client must re-send the trigger frame to the P2P GO for a new SP. - // In the P2P GO mode, it must automatically end all SPs for all clients no matter the final frame with the EOSP bit set, and shall - // not send any WMM-PS packets to those clients without receiving the trigger frames. In P2P TestPlan 6.1.13 and 7.1.5. - // By Bruce, 2010-06-29. - BOOLEAN bEospByNoA; - - // For P2P Power Save workitem. - RT_WORK_ITEM P2PPSWorkItem; - - - PVOID pP2PSvcInfo; - - P2P_ADD_IES AdditionalIEs; - - //====================================================================== - // Integrated device list - //====================================================================== - P2P_DEV_LIST devList; - - // For Win 8: OID_DOT11_WFD_GROUP_JOIN_PARAMETERS ----------------------- - P2P_CLIENT_JOIN_GROUP_CONTEXT ClientJoinGroupContext; - // ---------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_DESIRED_GROUP_ID ----------------------------- - u1Byte DesiredTargetMacAddress[6]; - u4Byte uGroupTargetSSIDLength; - u1Byte GroupTargetSSID[MAX_SSID_LEN]; - // ---------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_ADDITIONAL_IE ----------------------------- - // ------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY ----------------------------- - ULONG uListenStateDiscoverability; // How frequently the device will be found: Default(0) - // ----------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_DISCOVER_REQUEST ------------------------------------------------------- - P2P_DISCOVER_SEQUENCE DiscoverSequence; // Determine the discovery phases - u1Byte findPhaseSkipCnt; // Counter to skip scanning when the other ports in connected state. - RT_SCAN_TYPE ScanType; // Determine the scan type in the scan phase - P2P_DEVICE_ID_TO_SCAN ScanDeviceIDs; // The Device IDs for the scan process - BOOLEAN bForceScanLegacyNetworks; // Scan the legacy networks - BOOLEAN bDeviceDiscoveryIndicateToOS; // Let the OID indicated only once - // + Search for Specific Channel - BOOLEAN bDiscoverForSpecificChannels; // Flag for enabling the search - u1Byte DiscoverForSpecificChannels[10]; // Specific Channels - u1Byte uNumberOfDiscoverForSpecificChannels; // Number of Specific Channel - u1Byte uNumberOfDiscoverRounds; // Number of Discovery Rounds - // + Save the Device Discovery Timing - u8Byte LastDeviceDiscoveryOidIssueTime; // Save the OS-Triggered Discovery Start Time - u8Byte LastDeviceDiscoveryIndicatedTime; // Save the OS-Triggered Discovery Complete Time - // ------------------------------------------------------------------------------------------------- - - // For saving the received raw packets ---------------------------------------------- - // NOTE: These should be merged with the ScanList if the UI and IHV are all stable. - P2P_DEVICE_LIST DeviceList; - P2P_DEVICE_LIST DeviceListForQuery; - // ----------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST -------------------------------------- - u1Byte ProvisionRequestGroupCapability; - BOOLEAN bProvisionRequestUseGroupID; - u1Byte ProvisionRequestGroupIDDeviceAddress[6]; - u1Byte ProvisionRequestGroupIDSSID[MAX_SSID_LEN]; - u1Byte uProvisionRequestGroupIDSSIDLength; - // ------------------------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE -------------------------------------- - u1Byte ProvisionResponseReceiverDeviceAddress[6]; - u1Byte ProvisionResponseDialogToken; - u1Byte ProvisionResponseConfigMethod; - // ------------------------------------------------------------------------------------------------- - - // For delaying operations from the OID command ---------------------------- - BOOLEAN bPostoneP2POidPostProcessWorkItem; -// RT_WORK_ITEM P2POidPostProcessWorkItem; - RT_TIMER P2POidPostProcessTimer; - P2P_OID_POST_PROCESS_OPERATION OidOperation; - P2P_PUBLIC_ACTION_TYPE PacketSentInWorkItemCallback; - //-------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST ------------------------- - u1Byte NegotiationRequestGroupCapability; - u1Byte NegotiationRequestGOIntent; - //u1Byte NegotiationRequestIntendedInterfaceAddress[6]; - //-------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE ------------------------ - u1Byte NegotiationResponsePeerDeviceAddress[6]; - u1Byte NegotiationResponseDialogToken; - u1Byte NegotiationResponseStatus; - u1Byte NegotiationResponseGroupOwnerIntent; - //u1Byte NegotiationResponseIntendedInterfaceAddress[6]; - u1Byte NegotiationResponseGroupCapability; - u1Byte NegotiationResponseGroupIDDeviceAddress[6]; - u1Byte NegotiationResponseGroupIDSSID[MAX_SSID_LEN]; - u1Byte uNegotiationResponseGroupIDSSIDLength; - BOOLEAN bNegotiationResponseUseGroupID; - //--------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM --------------------------- - u1Byte NegotiationConfirmPeerDeviceAddress[6]; - u1Byte NegotiationConfirmDialogToken; - u1Byte NegotiationConfirmStatus; - u1Byte NegotiationConfirmGroupCapability; - u1Byte NegotiationConfirmGroupIDDeviceAddress[6]; - u1Byte NegotiationConfirmGroupIDSSID[MAX_SSID_LEN]; - u1Byte uNegotiationConfirmGroupIDSSIDLength; - BOOLEAN bNegotiationConfirmUseGroupID; - //--------------------------------------------------------------------------------- - - // For Win 8: OID_DOT11_WFD_SEND_INVITATION_REQUEST --------------------------- - u1Byte InvitationRequestGroupBSSID[6]; - BOOLEAN bInvitationRequestUseGroupBSSID; - u2Byte uInvitationRequestOperatingChannelNumber; - BOOLEAN bInvitationRequestUseSpecifiedOperatingChannel; - u1Byte InvitationRequestGroupIDDeviceAddress[6]; - u1Byte InvitationRequestPeerDeviceAddress[6]; - u1Byte InvitationRequestGroupIDSSID[MAX_SSID_LEN]; - u1Byte uInvitationRequestGroupIDSSIDLength; - BOOLEAN bInvitationRequestLocalGO; - //--------------------------------------------------------------------------------- - - - // For Win 8: OID_DOT11_WFD_SEND_INVITATION_RESPONSE ------------------------------ - u1Byte InvitationResponseReceiverDeviceAddress[6]; - u1Byte InvitationResponseDialogToken; - u1Byte InvitationResponseStatus; - u1Byte InvitationResponseGroupBSSID[6]; - BOOLEAN bInvitationResponseUseGroupBSSID; - u2Byte uInvitationResponseOperatingChannelNumber; - BOOLEAN bInvitationResponseUseSpecifiedOperatingChannel; - - // + Set the indication to OS when the invitation response completes - BOOLEAN bInvitationResponseIndicateToOS; - //--------------------------------------------------------------------------------- - - - // Debug Device Discovery ------------------- - u2Byte ProbeRequestSequenceNum; - // ---------------------------------------- - - - // Trick for knowing next channel switch time ------- - s8Byte TimeStartToStopSendingProbeResponse; - // ------------------------------------------- - - u1Byte RefCnt; // If RefCnt > 0, the P2P configuration is on going. - - // ECSA - BOOLEAN bChannelSwitch; - WDI_P2P_CHANNEL_INDICATE_REASON P2PChannelIndicationReason; -} P2P_INFO, *PP2P_INFO; - -#define P2P_INC_REF_CNT(_pP2pInfo) ((_pP2pInfo)->RefCnt ++) -#define P2P_DEC_REF_CNT(_pP2pInfo) \ -{ \ - if((_pP2pInfo)->RefCnt == 0) \ - { \ - ;\ - } \ - else \ - { \ - ((_pP2pInfo)->RefCnt --); \ - } \ -} -#define P2P_GET_REF_CNT(_pP2pInfo) ((_pP2pInfo)->RefCnt) - -//====================================================================== -// P2P Utility -//====================================================================== -BOOLEAN -P2PIsN24GSupported( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PSetRole( - IN PP2P_INFO pP2PInfo, - IN P2P_ROLE Role - ); - -VOID -P2PGOSetBeaconInterval( - IN PP2P_INFO pP2PInfo, - u2Byte u2BeaconPeriod - ); - -BOOLEAN -P2PIsChnlInChnlList( - IN pu1Byte pChnlList, - IN u1Byte ChnlListSize, - IN u1Byte Chnl - ); - -BOOLEAN -P2PIsDoingGroupFormation( - IN PP2P_INFO pP2PInfo - ); - -BOOLEAN -P2PCommonChannelArrived( - IN PP2P_INFO pP2PInfo, - IN P2P_DEV_LIST_ENTRY *pDev, - IN OCTET_STRING osPacket - ); - -OCTET_STRING -P2PWpsIEGetAttribute( - IN OCTET_STRING osWpsIEAttributes, - IN BOOLEAN bWpsAttributesInBE, - IN u2Byte Tag - ); - -BOOLEAN -P2PDeviceTypeMatches( - IN PP2P_INFO pP2PInfo, - IN OCTET_STRING osWpsIE - ); - -//====================================================================== -// Dump Routine -//====================================================================== - -VOID -P2PDumpDeviceCapability( - IN u1Byte DeviceCapability - ); - -VOID -P2PDumpGroupCapability( - IN u1Byte GroupCapability - ); - -VOID -P2PDumpGroupFormationResult( - PP2P_INFO pP2PInfo - ); - -//====================================================================== -// Scan List Hander -//====================================================================== -u1Byte -P2PClientInfoGetCount( - IN PP2P_INFO pP2PInfo - ); - -PP2P_CLIENT_INFO_DISCRIPTOR -P2PClientInfoFindByInterfaceAddress( - IN PP2P_INFO pP2PInfo, - IN pu1Byte InterfaceAddress - ); - -PP2P_CLIENT_INFO_DISCRIPTOR -P2PClientInfoFindByDeviceAddress( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddress - ); - -PP2P_CLIENT_INFO_DISCRIPTOR -P2PClientInfoEnumClients( - IN PP2P_INFO pP2PInfo, - IN u1Byte StartIndex, - OUT pu1Byte pIndex - ); - -PP2P_DEVICE_DISCRIPTOR -P2PScanListFind( - IN PP2P_DEVICE_DISCRIPTOR pScanList, - IN u4Byte ScanListSize, - IN pu1Byte DeviceAddress, - IN pu1Byte InterfaceAddress, - OUT pu4Byte pScanListIndex - ); - -BOOLEAN -P2PScanListAllFound( - IN PP2P_INFO pP2PInfo - ); - -PP2P_DEVICE_DISCRIPTOR -P2PScanListAdd( - IN OUT PP2P_DEVICE_DISCRIPTOR pScanList, - IN OUT pu4Byte pScanListSize - ); - -BOOLEAN -P2PScanListDumplicate( - IN PP2P_DEVICE_DISCRIPTOR pScanList, - IN u4Byte ScanListSize, - IN PP2P_DEVICE_DISCRIPTOR pDevDesc - ); - -VOID -P2PResetCommonChannelArrivingProcess( - IN PP2P_INFO pP2PInfo - ); - -BOOLEAN -P2PConstructScanList( - IN P2P_INFO *pP2PInfo, - IN VOID *req, - IN u1Byte rate, - IN FRAME_BUF *probeReqBuf - ); - -//====================================================================== -// Packet Constructor -//====================================================================== - -//====================================================================== -// Customized Indications -//====================================================================== -VOID -P2PIndicateOnProvisionDiscoveryRsp( - IN PP2P_INFO pP2PInfo, - IN u2Byte ConfigMethod, - IN pu1Byte DeviceAddress - ); - -VOID -P2PIndicateOnProvisionDiscoveryReq( - IN PP2P_INFO pP2PInfo, - IN u2Byte ConfigMethod, - IN pu1Byte DeviceAddress, - IN PP2P_WPS_ATTRIBUTES pWpsAttributes - ); - -VOID -P2PIndicateOnInvitationReq( - IN PP2P_INFO pP2PInfo, - IN PP2P_LIB_INVITATION_REQ_CONTEXT pLibInvitationReq - ); - -VOID -P2PIndicateOnInvitationRsp( - IN PP2P_INFO pP2PInfo, - IN P2P_STATUS_CODE Status, - IN BOOLEAN bPersistent, - IN u1Byte OpChannel, - IN P2P_ROLE Role, - IN u1Byte GroupSsidLen, - IN pu1Byte GroupSsidBuf - ); - -VOID -P2PIndicateStartApRequest( - IN PP2P_INFO pP2PInfo, - IN PP2P_PROFILE pP2PProfile - ); - -VOID -P2PIndicateStopApRequest( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PIndicateGOFormatedInfo( - IN PP2P_INFO pP2PInfo, - IN u1Byte Status, - IN BOOLEAN bGoingToBeGO, - IN PP2P_DEVICE_DISCRIPTOR pDevDesc - ); - -VOID -P2PIndicateCurrentState( - IN PP2P_INFO pP2PInfo, - IN P2P_STATE CurrentState - ); - -VOID -P2PIndicateCurrentRole( - IN PP2P_INFO pP2PInfo, - IN P2P_ROLE CurrentRole - ); - -VOID -P2PIndicateDeviceReqClientGoFormation( - IN PP2P_INFO pP2PInfo, - IN PP2P_DEVICE_DISCRIPTOR pDevDesc - ); - -VOID -P2PIndicateDeviceDiscoveryComplete( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PIndicateOnSDRsp( - IN PP2P_INFO pP2PInfo, - IN PP2P_SD_CONTEXT pSDContext - ); - -VOID -P2PIndicateOnSDReq( - IN PP2P_INFO pP2PInfo, - IN PP2P_SD_CONTEXT pSDContext - ); - -VOID -P2PIndicateScanList( - IN PP2P_INFO pP2PInfo - ); - -//====================================================================== -// P2P Managmement -//====================================================================== -#define P2P_MGNT_PERIOD 100 // in ms. -#define P2P_MGNT_MS_TO_SLOTCOUNT(_Time) (((_Time)/P2P_MGNT_PERIOD) + 1) - -VOID -P2PInitializeChannelEntryList( - PP2P_INFO pP2PInfo -); - -VOID -P2PDeviceDiscoverForSpecificChannels( - PP2P_INFO pP2PInfo, - pu1Byte ChannelList, - u1Byte uNumberOfChannel -); - -BOOLEAN -P2PDeviceDiscovery( - IN PP2P_INFO pP2PInfo, - IN u1Byte FindPhaseLoopTimes - ); - -VOID -P2PExtendedListenStart( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PExtendedListenResetCounter( - IN PP2P_INFO pP2PInfo -); - -#if 0 -VOID -P2PNormalScanComplete( - IN PP2P_INFO pP2PInfo - ); -#endif - -BOOLEAN -P2PProvisionDiscovery( - IN PP2P_INFO pP2PInfo, - IN pu1Byte MacAddress, // shall be the device address - IN u2Byte ConfigMethod // should have exactly 1 bit set - ); - -BOOLEAN -P2PConnect( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddress - ); - -VOID -P2PDisconnect( - IN PP2P_INFO pP2PInfo - ); - -BOOLEAN -P2PInvitePeerStart( - IN PP2P_INFO pP2PInfo, - IN PP2P_LIB_INVITATION_REQ_CONTEXT pLibInvittionContext - ); - -VOID -P2PInvitePeerComplete( - IN PP2P_INFO pP2PInfo - ); - -BOOLEAN -P2PDeviceDiscoverabilityReq( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddress, - IN BOOLEAN bConnect - ); - -RT_STATUS -P2P_OnAssocOK( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -u4Byte -P2PSetPowerSaveMode( - IN PP2P_INFO pP2PInfo, - IN PP2P_POWERSAVE_SET pP2pPs, - IN u1Byte NoAIndex, - IN P2P_PS_UPDATE_REASON psReason - ); - -u4Byte -P2PUpdatePowerSavePara( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PInitializeTimer( - PADAPTER pAdapter -); - -VOID -P2PCancelTimer( - PADAPTER pAdapter -); - -VOID -P2PReleaseTimer( - PADAPTER pAdapter -); - -VOID -P2PSetPsState( - IN PP2P_INFO pP2PInfo, - IN u4Byte Source, - IN P2P_PS_STATE P2pState, - IN u8Byte Timeout - ); - -VOID -P2PPsTsf_Bit32_Toggle( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PNotifyClientPSChange( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PServiceDiscoveryReq( - PP2P_INFO pP2PInfo, - PP2P_SD_REQ_CONTEXT pServiceQueryContent - ); - -VOID -P2PServiceDiscoveryRsp( - PP2P_INFO pP2PInfo, - PP2P_SD_RSP_CONTEXT pServiceRspContent - ); - -u4Byte -P2PPresenceReq( - IN PP2P_INFO pP2PInfo, - IN PP2P_POWERSAVE_SET pP2pPs - ); - -typedef struct _RT_WLAN_BSS RT_WLAN_BSS, *PRT_WLAN_BSS; -VOID -P2PUpdateWlanApManagedInfo( - IN PP2P_INFO pP2PInfo, - IN PRT_WLAN_BSS pBssDesc - ); - -//====================================================================== -// Public Functions (Starting from Win8) -//====================================================================== -#if 0 -//------------------------------------------------------------------------------- -// For delaying sending the peer response packet from the OID command -//------------------------------------------------------------------------------- -VOID -P2POidPostProcessWorkItemCallback( - IN PVOID pContext -); -#else -//------------------------------------------------------------------------------- -// For delaying sending the peer response packet from the OID command -//------------------------------------------------------------------------------- -VOID -P2POidPostProcessTimerCallback( - IN PRT_TIMER pTimer -); -#endif - -//------------------------------------------------------------------------------- -// For delaying connection to wait for GO WPS ready -//------------------------------------------------------------------------------- -VOID -P2PWaitForWpsReadyTimerCallback( - IN PRT_TIMER pTimer -); - -// ----------------------------------------- -// Reset the Client Join Group Context -// ----------------------------------------- -VOID -P2PResetClientJoinGroupContext( - PP2P_INFO pP2PInfo -); - -//------------------------------------------------------------------------------- -// Public P2P Utility Functions -//------------------------------------------------------------------------------- - -BOOLEAN -P2PDeviceListActionInterface( - PP2P_INFO pP2PInfo, - IN u1Byte uAction, - IN PP2P_DEVICE_LIST pDeviceList, - IN PMEMORY_BUFFER pInputBuffer, - OUT PMEMORY_BUFFER pOutputBuffer -); - -PP2P_DEVICE_LIST_ENTRY -P2PDeviceListFind( - IN PP2P_DEVICE_LIST pDeviceList, - IN pu1Byte pMacAddress -); - -BOOLEAN -P2PAddScanDeviceID( - PP2P_DEVICE_ID_TO_SCAN pScanDeviceIDs, - pu1Byte pDeviceID -); - -VOID -P2PClearScanDeviceID( - PP2P_DEVICE_ID_TO_SCAN pScanDeviceIDs -); - -u1Byte -P2PGetChannel( - IN PP2P_INFO pP2PInfo -); - -BOOLEAN -P2PAdapterAcceptFrame( - PADAPTER pAdapter, - OCTET_STRING osPacket -); - -#if (P2P_SUPPORT == 1) - -#define P2P_DOING_DEVICE_DISCOVERY(_pP2PInfo) ((_pP2PInfo)->bDeviceDiscoveryInProgress || ((_pP2PInfo)->bDeviceDiscoveryIndicateToOS == TRUE) ) -#define GET_P2P_INFO(__pAdapter) \ - (P2P_ADAPTER_OS_SUPPORT_P2P(__pAdapter) ? ((PP2P_INFO)(((__pAdapter)->MgntInfo).pP2PInfo)) : \ - ((PP2P_INFO)((GetDefaultAdapter(__pAdapter))->MgntInfo.pP2PInfo))) -#define P2P_DOING_PURE_DEVICE_DISCOVERY(_pP2PInfo) (\ - !(((_pP2PInfo)->bPreGroupFormation || ((P2P_STATE_GO_NEGO_REQ_SEND <= (_pP2PInfo)->State) && (_pP2PInfo)->State <= P2P_STATE_GO_NEGO_COMPLETE)) || \ - (_pP2PInfo)->InvitationContext.bToSendInvitationReqOnProbe ||\ - (_pP2PInfo)->ProvisionDiscoveryContext.bDoingProvisionDiscovery ||\ - (_pP2PInfo)->SDContext.bDoingServiceDiscovery\ - )\ -) -#define P2P_ACTING_IS_GO(_Adapter) (P2P_ACTING_AS_GO(GET_P2P_INFO(_Adapter))) -#define P2P_ACTING_IS_CLIENT(_Adapter) (P2P_ACTING_AS_CLIENT(GET_P2P_INFO(_Adapter))) -#define P2P_ACTING_IS_DEVICE(_Adapter) (P2P_ACTING_AS_DEVICE(GET_P2P_INFO(_Adapter))) - -BOOLEAN -P2P_IsGoAcceptProbeReq( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu, - IN POCTET_STRING posSsidToScan - ); - -RT_STATUS -P2P_OnBeacon( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnProbeReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnProbeRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnAssocReqAccept( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_ClientOnDeauth( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_ClientOnDisassoc( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnGONReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnGONRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnGONConfirm( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnInvitationReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnInvitationRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnDeviceDiscoverabilityReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnDeviceDiscoverabilityRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnProvisionDiscoveryReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnProvisionDiscoveryRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnPresenceReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnGODiscoverabilityReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnSDReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnSDRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnSDComebackReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -P2P_OnSDComebackRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -VOID -P2PFreeAllocatedMemory( - IN PADAPTER pAdapter -); - -VOID -P2P_FreeP2PInfo( - IN PADAPTER pAdapter - ); - -RT_STATUS -P2P_AllocP2PInfo( - IN PADAPTER pAdapter - ); - -BOOLEAN -P2PIsWildcardSsid( - IN OCTET_STRING osSsid - ); - -BOOLEAN -P2PIsChnlInChnlEntryList( - IN P2P_CHANNELS *pChannelEntryList, - IN u1Byte Chnl - ); - -RT_STATUS -P2P_SetWpsIe( - IN const ADAPTER *pAdapter, - IN u2Byte iePayloadLen, - IN u1Byte *pIePayload - ); - -VOID -P2PDumpWpsAttributes( - IN PP2P_WPS_ATTRIBUTES pP2PWpsAttributes - ); - -VOID -P2PDumpScanList( - IN PP2P_DEVICE_DISCRIPTOR pDevDescriptors, - IN u4Byte nDevDescriptors - ); - -VOID -P2PScanListClear( - IN P2P_INFO *pP2PInfo - ); - -VOID -P2PScanListCopy( - IN OUT PP2P_DEVICE_DISCRIPTOR pScanListDest, - IN OUT pu4Byte pScanListDestSize, - IN PP2P_DEVICE_DISCRIPTOR pScanListSrc, - IN u4Byte ScanListSrcSize - ); - -BOOLEAN -P2PScanListEqual( - IN PP2P_DEVICE_DISCRIPTOR pScanList1, - IN u4Byte ScanList1Size, - IN PP2P_DEVICE_DISCRIPTOR pScanList2, - IN u4Byte ScanList2Size - ); - -BOOLEAN -P2PScanListIsGo( - IN PP2P_INFO pP2PInfo, - IN pu1Byte DeviceAddr - ); - -u1Byte -P2PScanListCeaseScan( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PInitialize( - IN PP2P_INFO pP2PInfo, - IN PADAPTER pAdapter, - IN u1Byte ListenChannel, - IN u1Byte IntendedOpChannel, - IN u1Byte GOIntent - ); - -VOID -P2PDeviceDiscoveryComplete( - IN PP2P_INFO pP2PInfo, - IN BOOLEAN bRecoverState - ); - -VOID -P2PExtendedListenComplete( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PGOStartAutomously( - IN PP2P_INFO pP2PInfo - ); - -VOID -P2PIndicateCurrentDevPasswdId( - IN PP2P_INFO pP2PInfo, - IN u2Byte CurrentDevPasswdId - ); - -VOID -P2PIndicateClientConnected( - IN PP2P_INFO pP2PInfo, - IN pu1Byte ClientInterfaceAddr - ); - -VOID -P2PIndicateClientDisconnected( - IN PP2P_INFO pP2PInfo, - IN pu1Byte ClientInterfaceAddr - ); - -VOID -P2PIndicateChangingApChnl( - IN PP2P_INFO pP2PInfo, - IN u1Byte oldChnl, - IN u1Byte newChnl - ); - -VOID -P2PMgntTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -P2PMlmeAssociateRequest( - PADAPTER Adapter, - pu1Byte asocStaAddr, - u4Byte asocTmot, - u2Byte asCap, - u2Byte asListenInterval, - BOOLEAN Reassociate - ); - -VOID -P2PPsWorkItemCallback( - IN PVOID pContext - ); - -VOID -P2PPsTimeout( - IN PADAPTER pAdapter - ); - -VOID -P2POnLinkStatusWatchdog( - IN PADAPTER Adapter - ); - -VOID -P2PDisable( - IN PADAPTER Adapter - ); - -u4Byte -P2PTranslateP2PInfoToDevDesc( - IN PP2P_INFO pP2PInfo, - OUT PVOID pvDevDesc - ); - -VOID -P2P_StartApRequest( - IN PADAPTER Adapter - ); - -VOID -P2P_APRemoveKey( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pSTA - ); - -VOID -P2P_APSetkey( - IN PADAPTER Adapter, - IN u1Byte *pucMacAddr, - IN u4Byte ulEncAlg - ); - -VOID -P2P_FilerCck( - IN PADAPTER Adapter, - IN OUT BOOLEAN *pbFilterCck - ); - -VOID -P2P_ConstructAssociateReqFilterCck( - IN PADAPTER Adapter, - IN OCTET_STRING AsocReq, - IN OUT BOOLEAN *pbFilterCck - ); - -VOID -P2P_UpdateScanList( - IN PADAPTER Adapter - ); - -BOOLEAN -P2P_ScanCallback( - IN PADAPTER Adapter - ); - -VOID -P2P_InactivePsCallback( - IN PADAPTER pAdapter, - IN u1Byte InactievPsState - ); - -RT_STATUS -P2PSetServiceFragThreshold( - IN PADAPTER pAdapter, - IN u2Byte serviceThreshold - ); - -RT_STATUS -P2PGetServiceFragThreshold( - IN PADAPTER pAdapter, - IN pu2Byte pServiceThreshold - ); - -RT_STATUS -P2PSetProfileList( - IN PADAPTER pAdapter, - IN PP2P_PROFILE_LIST pProfileList - ); - -RT_STATUS -P2P_SetP2PGoFullSSID( - IN PADAPTER pAdapter, - IN pu1Byte pSsidBuf, - IN u4Byte ssidLen - ); - -RT_STATUS -P2P_GetP2PGoFullSSID( - IN PADAPTER pAdapter, - IN u4Byte maxSsidBufLen, - IN pu1Byte pSsidBuf, - IN pu4Byte pSsidLen - ); - -BOOLEAN -IsP2PDeviceExisting( - IN PADAPTER pAdapter - ); - -BOOLEAN -IsRTKP2PDeviceExisting( - IN PADAPTER pAdapter - ); - -BOOLEAN -P2P_IPS_Accessible( - IN PADAPTER pAdapter - ); - -VOID -P2P_Construct_ProbeReqEx( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte ssidLen, - IN const u1Byte *ssidBuf - ); - -VOID -P2P_Construct_ProbeReq( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ); - -RT_STATUS -P2P_CorrectDeviceCategory( - IN PADAPTER pAdapter - ); - -//====================================================================== -// P2P Utility -//====================================================================== -BOOLEAN -P2PIsSocialChannel( - IN u1Byte Channel - ); - -#else // #if (P2P_SUPPORT != 1) -#define GET_P2P_INFO(__pAdapter) NULL -#define P2P_ACTING_IS_GO(_Adapter) FALSE -#define P2P_ACTING_IS_CLIENT(_Adapter) FALSE -#define P2P_ACTING_IS_DEVICE(_Adapter) FALSE -#define P2P_IsGoAcceptProbeReq(_pAdapter, _posMpdu, _posSsidToScan) TRUE -#define P2P_OnBeacon(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnProbeReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnProbeRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnAssocReqAccept(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnAssocOK(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_ClientOnDeauth(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_ClientOnDisassoc(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnGONReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnGONRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnGONConfirm(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnInvitationReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnInvitationRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnDeviceDiscoverabilityReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnDeviceDiscoverabilityRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnProvisionDiscoveryReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnProvisionDiscoveryRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnPresenceReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnGODiscoverabilityReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnSDReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnSDRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnSDComebackReq(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2P_OnSDComebackRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define P2PFreeAllocatedMemory(_pAdapter) -#define P2P_FreeP2PInfo(_pAdapter) -#define P2P_AllocP2PInfo(_pAdapter) RT_STATUS_SUCCESS -#define P2PNotifyClientPSChange(_pP2PInfo) -#define P2PIsWildcardSsid(_osSsid) FALSE -#define P2PIsChnlInChnlEntryList(_pChannelEntryList, _Chnl) FALSE -#define P2P_SetWpsIe(__pAdapter, __iePayloadLen, __pIePayload) RT_STATUS_SUCCESS -#define P2PDumpWpsAttributes(_pP2PWpsAttributes) -#define P2PDumpScanList(_pDevDescriptors, _nDevDescriptors) -#define P2PScanListClear(_pP2PInfo) -#define P2PScanListCopy(_pScanListDest, _pScanListDestSize, _pScanListSrc, _ScanListSrcSize) -#define P2PScanListEqual(_pScanList1, _ScanList1Size, _pScanList2, _ScanList2Size) FALSE -#define P2PScanListIsGo(_pP2PInfo, _InterfaceAddr) FALSE -#define P2PScanListCeaseScan(_pP2PInfo) 0 -#define P2PInitialize(_pP2PInfo, _pAdapter, _ListenChannel, _IntendedOpChannel, _GOIntent) {(_pAdapter)->P2PSupport = P2P_SUPPORT_STATE_NOT_SUPPORT;} -#define P2PDeviceDiscoveryComplete(_pP2PInfo, _RecoverState) -#define P2PExtendedListenComplete(_pP2PInfo) -#define P2PGOStartAutomously(_pP2PInfo) -#define P2PIndicateClientConnected(_pP2PInfo, _ClientInterfaceAddr) -#define P2PIndicateClientDisconnected(_pP2PInfo, _ClientInterfaceAddr) -#define P2PIndicateChangingApChnl(pP2PInfo, oldChnl, newChnl) -#define P2PMgntTimerCallback(_pTimer) -#define P2PMlmeAssociateRequest(_Adapter, _asocStaAddr, _asocTmot, _asCap, _asListenInterval, _Reassociate) -#define P2PPsWorkItemCallback(_pContext) -#define P2PPsTimeout(_pAdapter) -#define P2POnLinkStatusWatchdog(_Adapter) -#define P2PDisable(_Adapter) -#define P2PTranslateP2PInfoToDevDesc(_pP2PInfo, _pDevDesc) -#define P2P_StartApRequest(_Adapter) -#define P2P_APRemoveKey(_Adapter, _pSTA) -#define P2P_APSetkey(_Adapter, _pucMacAddr, _ulEncAlg) -#define P2P_FilerCck(_Adapter, _pbFilterCck) -#define P2P_ConstructAssociateReqFilterCck(_Adapter, _AsocReq, _pbFilterCck) -#define P2P_UpdateScanList(_Adapter) -#define P2P_ScanCallback(_Adapter) TRUE -#define P2P_InactivePsCallback(_pAdapter, _InactievPsState) -#define P2PSetServiceFragThreshold(_pAdapter, _serviceThreshold) RT_STATUS_FAILURE -#define P2PGetServiceFragThreshold(_pAdapter, _pServiceThreshold) RT_STATUS_FAILURE -#define P2PSetProfileList(_pAdapter, _pProfileList) RT_STATUS_FAILURE -#define P2P_SetP2PGoFullSSID(_pAdapter, _pSsidBuf, _pSsidLen) RT_STATUS_FAILURE -#define P2P_GetP2PGoFullSSID(_pAdapter, _maxSsidBufLen, _pSsidBuf, _pSsidLen) RT_STATUS_FAILURE -#define IsP2PDeviceExisting(_pAdapter) FALSE -#define IsRTKP2PDeviceExisting(_pAdapter) FALSE -#define P2P_IPS_Accessible(_pAdapter) TRUE -#define P2P_Construct_ProbeReq(_pBuf, _pP2PInfo) -#define P2P_DOING_PURE_DEVICE_DISCOVERY(_pP2PInfo) FALSE -#define P2P_DOING_DEVICE_DISCOVERY(_pP2PInfo) FALSE -#define GET_P2P_INFO(__pAdapter) NULL -#define P2PIsSocialChannel(_Channel) FALSE -#define P2P_CorrectDeviceCategory(__pAdapter) RT_STATUS_NOT_SUPPORT -#endif // #if (P2P_SUPPORT == 1) - -#endif // #ifndef __INC_P2P_11_H - diff --git a/network/wlan/WDI/COMMON/P2PSvc.c b/network/wlan/WDI/COMMON/P2PSvc.c deleted file mode 100644 index d3f61a75..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc.c +++ /dev/null @@ -1,1493 +0,0 @@ -// -// Description: -// Implement P2PSvc interface to other part of the driver. -// -// Namespace: -// Local: p2psvc -// Exported: P2PSvc -// - -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -//3 ----------------------------------------------------------------------------- -//3 Local -//3 ----------------------------------------------------------------------------- - -// -// Description: -// This function frees the P2PSvc info of pAdapter. -// Everything that is dynamically allocated for the P2PSvc info is freed. -// -VOID -p2psvc_Free_P2PSvcInfo( - IN PP2P_INFO pP2PInfo - ) -{ - PP2PSVC_INFO pP2PSvcInfo = NULL; - - P2PSVC_CHECK_NULL(pP2PInfo); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - if(NULL == pP2PInfo) break; - - pP2PSvcInfo = (PP2PSVC_INFO)pP2PInfo->pP2PSvcInfo; - - if(!pP2PSvcInfo->bEnabled) break; - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - { - P2PSvc_Free_AdvSvcList(&pP2PSvcInfo->advSvcList, &pP2PSvcInfo->advSvcListCnt, 0); - P2PSvc_Free_SeekReqList(&pP2PSvcInfo->seekReqList, &pP2PSvcInfo->seekReqListCnt, 0); - P2PSvc_Free_SearchResultObjList(&pP2PSvcInfo->searchResultList, &pP2PSvcInfo->searchResultListCnt); - P2PSvc_Free_PDSessionList(&pP2PSvcInfo->pdSessionList, &pP2PSvcInfo->pdSessionListCnt); - - pP2PSvcInfo->bEnabled = FALSE; - } - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - PLATFORM_FREE_RT_SPINLOCK(pP2PSvcInfo->lock); - }while(FALSE); - - if(pP2PSvcInfo) - { - PlatformZeroMemory(pP2PSvcInfo, sizeof(P2PSVC_INFO)); - } - - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("%-32s: %u\n", "Alloc count", gP2PSvcMemAllocCount)); - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("%-32s: %u\n", "Free count", gP2PSvcMemFreeCount)); - - gP2PSvcMemAllocCount = 0; - gP2PSvcMemFreeCount = 0; - - P2PSVC_FUNC_OUT(DBG_LOUD, 0); - - return; -} - -RT_STATUS -p2psvc_Set_Enable( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_CHECK_NULL(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PP2PSVC_OBJ_LIST pObjList = (PP2PSVC_OBJ_LIST)(((PRT_OBJECT_HEADER)infoBuf)->Value); - PRT_OBJECT_HEADER pBEnableObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_BENABLE, 0); - BOOLEAN bEnable = *(PBOOLEAN)pBEnableObj->Value; - - if(bEnable) - {// To enable - if(pP2PSvcInfo->bEnabled) - {// already enabled => free the old and re-init - p2psvc_Free_P2PSvcInfo(pP2PInfo); - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Already enable, the old one will be freed!\n")); - } - - PlatformZeroMemory(pP2PSvcInfo, sizeof(P2PSVC_INFO)); - - PLATFORM_INIT_RT_SPINLOCK(pP2PSvcInfo->lock); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - { - pP2PSvcInfo->bEnabled = TRUE; - RTInitializeListHead(&pP2PSvcInfo->advSvcList); - RTInitializeListHead(&pP2PSvcInfo->seekReqList); - RTInitializeListHead(&pP2PSvcInfo->searchResultList); - RTInitializeListHead(&pP2PSvcInfo->pdSessionList); - - pP2PSvcInfo->advSvcListCnt = 0; - pP2PSvcInfo->seekReqListCnt = 0; - pP2PSvcInfo->searchResultListCnt = 0; - pP2PSvcInfo->pdSessionListCnt = 0; - - pP2PSvcInfo->connCap = P2PSVC_CONN_CAP_BMP_NONE; - pP2PSvcInfo->pAdapter = pAdapter; - } - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - } - else - {// To disable - if(!pP2PSvcInfo->bEnabled) - { - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - p2psvc_Free_P2PSvcInfo(pP2PInfo); - } - }while(FALSE); - - *pBytesRead = 0; - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_Query_Enable( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - PRT_OBJECT_HEADER pObjHdr = NULL; - - P2PSVC_CHECK_NULL(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - *pBytesNeeded = RT_OBJECT_HEADER_SIZE + sizeof(u1Byte); - - if(outBufLen < *pBytesNeeded) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Buffer (%d) too short for required (%d)!\n", outBufLen, *pBytesNeeded)); - rtStatus = RT_STATUS_INVALID_LENGTH; - break; - } - - pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - - RT_ASSIGN_OBJECT_HEADER( - pObjHdr, - RT_OB_HDR_TYPE_QUERY, - P2PSVC_OBJ_HDR_ID_DATA_BENABLE, - pP2PSvcInfo->curVer, - sizeof(u1Byte)); - - *((pu1Byte)(pObjHdr->Value)) = (P2PSVC_ENABLED(pP2PSvcInfo)) ? (1) : (0); - - *pBytesWritten = *pBytesNeeded; - - }while(FALSE); - - *pBytesRead = 0; - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// This table maps the request from upper layer to a specifi handler. -// -P2PSVC_REQUEST_ID_MAP lP2PSvcRequestIdMap[] = -{ - // Set Enable/Disable - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_ENABLE, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - p2psvc_Set_Enable - }, - - // Query enabled - { - RT_OB_HDR_TYPE_QUERY, - P2PSVC_OBJ_HDR_ID_ACT_ENABLE, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - p2psvc_Query_Enable - }, - - // Set seek - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_SEEK, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_Seek - }, - - // Set cancel seek - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_CANCEL_SEEK, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_CancelSeek - }, - - // Set advertise - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_ADVERTISE, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_AdvSvc - }, - - // Set cancel advertise - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_CANCEL_ADVERTISE, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_CancelAdvSvc - }, - - // Set svc status - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_SVC_STATUS, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_SvcStatus - }, - - // PD Req data - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_PD_REQ, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_PDReq - }, - - // Conn cap - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_CONN_CAP, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_ConnCap - }, - - // Follow on PD req - { - RT_OB_HDR_TYPE_SET, - P2PSVC_OBJ_HDR_ID_ACT_FOPD_REQ, - P2PSVC_MIN_SUPPORT_VER, - P2PSVC_MAX_SUPPORT_VER, - P2PSvc_Set_RspdorFOPDReq - }, - - // ===== Insert new map above this line ===== // - { - RT_OB_HDR_TYPE_UNKNOWN, - P2PSVC_OBJ_HDR_ID_UNKNOWN, - P2PSVC_OBJECT_VERSION_INVLAID, - P2PSVC_OBJECT_VERSION_INVLAID, - NULL - } -}; - - -//3 ----------------------------------------------------------------------------- -//3 Exported -//3 ----------------------------------------------------------------------------- - -BOOLEAN -P2PSvc_Enabled( - IN PVOID pvP2PSvcInfo - ) -{ - return P2PSVC_ENABLED((PP2PSVC_INFO)pvP2PSvcInfo); -} - -VOID -P2PSvc_Dump( - IN PADAPTER pAdapter - ) -{ - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, (", nAdvSvc: %u", pP2PSvcInfo->advSvcListCnt)); - RT_TRACE(COMP_P2P, DBG_LOUD, (", nSeekReq: %u", pP2PSvcInfo->seekReqListCnt)); - RT_TRACE(COMP_P2P, DBG_LOUD, (", nSearchResult: %u", pP2PSvcInfo->searchResultListCnt)); - RT_TRACE(COMP_P2P, DBG_LOUD, (", nPDSession: %u", pP2PSvcInfo->pdSessionListCnt)); - - RT_TRACE(COMP_P2P, DBG_LOUD, (", allocCnt: %u", gP2PSvcMemAllocCount)); - RT_TRACE(COMP_P2P, DBG_LOUD, (", freeCnt: %u", gP2PSvcMemFreeCount)); - - return; -} - -RT_STATUS -P2PSvc_Request( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - P2PSvc_ReqHdlr reqHdlr = NULL; - PRT_OBJECT_HEADER pObjHdr = NULL; - u4Byte idx = 0; - BOOLEAN bMismatchVer = FALSE; - PP2PSVC_OBJ_LIST pObjList = NULL; - - P2PSVC_CHECK_NULL(pAdapter); - P2PSVC_CHECK_NULL(pBytesWritten); - P2PSVC_CHECK_NULL(pBytesRead); - P2PSVC_CHECK_NULL(pBytesNeeded); - - *pBytesWritten = 0; - *pBytesRead = 0; - *pBytesNeeded = RT_OBJECT_HEADER_SIZE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - if(outBufLen < *pBytesNeeded) - { - RT_TRACE_F(COMP_P2P | COMP_OID_SET, DBG_WARNING, ("[WARNING] Buffer (%d) too short for required (%d)!\n", outBufLen, *pBytesNeeded)); - rtStatus = RT_STATUS_BUFFER_TOO_SHORT; - break; - } - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2PSvc_Request:", infoBuf, inBufLen); - - pObjHdr = (PRT_OBJECT_HEADER)infoBuf; - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_ValidateReqInfo(infoBuf, inBufLen, pBytesNeeded))) - { - break; - } - - if(RT_OB_HDR_TYPE_SET == pObjHdr->Type) - { - // The ObjList is right after an obj header. - // The obj header is used for oid. - pObjList = (PP2PSVC_OBJ_LIST)(((PRT_OBJECT_HEADER)infoBuf)->Value); - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_ValidateActionParam(pObjHdr->Id, pObjList))) - { - break; - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_ValidateParamContent(pObjList))) - { - break; - } - } - - // Check if P2PSvc is enabled if the action is not query/set enable - if(P2PSVC_OBJ_HDR_ID_ACT_ENABLE != pObjHdr->Id) - { - if(!P2PSVC_ENABLED(pP2PSvcInfo)) - { - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - } - - for(idx = 0; P2PSVC_OBJ_HDR_ID_UNKNOWN != lP2PSvcRequestIdMap[idx].id; idx++) - { - // Check Request is matching - if(pObjHdr->Type == lP2PSvcRequestIdMap[idx].type && pObjHdr->Id == lP2PSvcRequestIdMap[idx].id) - {// type and id matched - // Check Version - if(pObjHdr->Version >= lP2PSvcRequestIdMap[idx].minVer - && pObjHdr->Version <= lP2PSvcRequestIdMap[idx].maxVer) - { - reqHdlr = lP2PSvcRequestIdMap[idx].reqHdlr; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("request type = %d, pObjHdr->Id = 0x%08X\n", pObjHdr->Type, pObjHdr->Id)); - break; - } - else - { - bMismatchVer = TRUE; - } - } - } - - if(reqHdlr) - { // Execute the request handler - rtStatus = reqHdlr(pAdapter, infoBuf, inBufLen, outBufLen, pBytesWritten, pBytesRead, pBytesNeeded); - break; - } - else if(bMismatchVer) - { - RT_TRACE_F(COMP_P2P | COMP_OID_SET, DBG_WARNING, ("[WARNING] Mismatch version (%d) for req ID (%d)!\n", pObjHdr->Version, pObjHdr->Type)); - rtStatus = RT_STATUS_NOT_SUPPORT; - break; - } - else - { - RT_TRACE_F(COMP_P2P | COMP_OID_SET, DBG_WARNING, ("[WARNING] Unknown req ID (%d)!\n", pObjHdr->Type)); - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// P2PSvcInfo has the same life time of P2PInfo. -// -RT_STATUS -P2PSvc_AllocP2PSvcInfo( - IN PP2P_INFO pP2PInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - P2PSVC_CHECK_NULL(pP2PInfo); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &pP2PInfo->pP2PSvcInfo, sizeof(P2PSVC_INFO)))) - { - break; - } - - PlatformZeroMemory(pP2PInfo->pP2PSvcInfo, sizeof(P2PSVC_INFO)); - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// P2PSvcInfo has the same life time of P2PInfo. -// -RT_STATUS -P2PSvc_Free_P2PSvcInfo( - IN PP2P_INFO pP2PInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pP2PInfo->pP2PSvcInfo; - - P2PSVC_CHECK_NULL(pP2PInfo); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - p2psvc_Free_P2PSvcInfo(pP2PInfo); - - PlatformFreeMemory(pP2PSvcInfo, sizeof(P2PSVC_INFO)); - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -//----------------------------------------------------------------------------- -// Process probe event -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_OnP2PScanComplete( - IN PVOID pvP2PSvcInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PRT_LIST_ENTRY pListHead = &pP2PSvcInfo->searchResultList; - PRT_LIST_ENTRY pEntry = NULL; - - for(pEntry = RTGetHeadList(pListHead); pEntry != pListHead; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_SR_LIST_ENTRY pSREntry = (PP2PSVC_SR_LIST_ENTRY)pEntry; - - if(pSREntry->bDirty) - { - P2PSvc_Indicate(pP2PSvcInfo, P2PSVC_OBJ_LIST_LEN(&pSREntry->srObjList), &pSREntry->srObjList); - pSREntry->bDirty = FALSE; - } - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// On receiving dev disc complete, we need to free: -// - all the seek requests -// - the search result -// -RT_STATUS -P2PSvc_OnDevDiscComplete( - IN PVOID pvP2PSvcInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - {// To erase all seek reqs (if SD is needed, it's done when probing) - P2PSvc_Free_SeekReqList(&pP2PSvcInfo->seekReqList, &pP2PSvcInfo->seekReqListCnt, 0); - P2PSvc_Free_SearchResultObjList(&pP2PSvcInfo->searchResultList, &pP2PSvcInfo->searchResultListCnt); - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// On receiving P2PProbeRsp, -// - -//check for every seek req to see if it is done by -// checking whether it has svc-info-req or svc-name is ended with * (i.e., whether SD is needed). -// If it is done, indicate search result. -// If it needs further SD req, indicate search result up when SD req is done. -// -RT_STATUS -P2PSvc_OnProbeRsp( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - OCTET_STRING osAdvSvcInfo = {NULL, 0}; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(devAddr); - P2PSVC_CHECK_NULL(posP2PAttrs); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - // Filter out ProbeRsp w/o dev info and adv svc info (not from a P2PS dev) - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_ADV_SVC_INFO, 4, &osAdvSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_TRACE); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PRT_LIST_ENTRY pEntry = NULL; - PP2PSVC_SR_LIST_ENTRY pSREntry = NULL; - - for(pEntry = RTGetHeadList(&pP2PSvcInfo->seekReqList); pEntry != &pP2PSvcInfo->seekReqList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PRT_OBJECT_HEADER pSeekDevAddrObj = NULL; - PP2PSVC_SR_LIST_ENTRY pSREntryInList = NULL; - PRT_OBJECT_HEADER pSvcInfoReqObj = NULL; - PRT_OBJECT_HEADER pSeekSearchIdObj = NULL; - u1Byte searchId = 0; - BOOLEAN bDuplicatedEntry = FALSE; - - // Address filter - pSeekDevAddrObj = P2PSvc_GetParam(&pSeekInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0); - if(!MacAddr_isBcst(pSeekDevAddrObj->Value) && !eqMacAddr(pSeekDevAddrObj->Value, devAddr)) - {// searching for specific dev and the probe rsp is not from it => ignore it - continue; - } - - // Get self search id, this is used as an key to find previous search result - pSeekSearchIdObj = P2PSvc_GetParam(&pSeekInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0); - searchId = *(pu1Byte)pSeekSearchIdObj->Value; - - // If the search result entry has been updated by SD rsp, don't update it again with ProbeRsp - if(!P2PSvc_ToProcessProbeRsp(pP2PSvcInfo, searchId, devAddr)) - { - break; - } - - // Make data for indication - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeSearchResultDataFromProbeRsp(pP2PSvcInfo, pSeekInfoEntry, devAddr, posP2PAttrs, osAdvSvcInfo, &pSREntry))) - { - break; - } - - P2PSVC_CHECK_NULL(pSREntry); - - // Update the search result list - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_UpdateSearchResult(pP2PSvcInfo, searchId, devAddr, pSREntry, &bDuplicatedEntry, &pSREntryInList))) - { - P2PSvc_FreeMem(pSREntry, P2PSVC_SR_LIST_LEN(pSREntry)); - break; - } - - pSREntryInList->probeRspRxTime = PlatformGetCurrentTime(); - - // Check whether to indicate - if(bDuplicatedEntry) - {// already have same entry in the list => free this one - P2PSvc_FreeMem(pSREntry, P2PSVC_SR_LIST_LEN(pSREntry)); - } - else - { - pSREntryInList->bDirty = TRUE; - } - - //4 Check if SD is required - if(P2PSvc_SeekReqNeedSD(&pSeekInfoEntry->objList, pSREntryInList, &pSvcInfoReqObj)) - { - //1 Note that SD req is sent for each seek req that requires SD req, each has its own transaction id - //1 The transaction id is set to the search id so we can distinguish from the SD rsp of different seek req - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_SDReq(pP2PSvcInfo, devAddr, pSeekInfoEntry, pSvcInfoReqObj, *(pu1Byte)pSeekSearchIdObj->Value))) - { - break; - } - - pSREntryInList->sdReqTxTime = PlatformGetCurrentTime(); - } - else if(!P2PSvc_SeekReqIsBcst(&pSeekInfoEntry->objList)) - {// search for specific dev => done here - PRT_LIST_ENTRY pForeEntry = RTForeEntryList(pEntry); - - // Remove the seek entry since it is completed - RTRemoveEntryListWithCnt(pEntry, &pP2PSvcInfo->seekReqListCnt); - P2PSvc_FreeMem(pEntry, P2PSVC_REQ_INFO_LIST_LEN(pSeekInfoEntry)); - pEntry = pForeEntry; - } - else - {// search for all dev addr - continue; // continue searching - } - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_TRACE, rtStatus); - - return rtStatus; -} - -// -// Description -// Make P2PIE for ProbeRsp. According to addendum v0.1, it shall contain -// the following attributes: -// * adv-svc-info (id: 23) -// -// If it is too big to fit into a single P2PIE, it will be splited into -// several. -// -RT_STATUS -P2PSvc_MakeProbeRspIE( - IN PVOID pvP2PSvcInfo, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf, - OUT PBOOLEAN pbToSendProbeRsp - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = NULL; - PP2P_INFO pP2PInfo = NULL; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(posP2PAttrs); - P2PSVC_CHECK_NULL(pBuf); - P2PSVC_CHECK_NULL(pbToSendProbeRsp); - - pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - pP2PInfo = (PP2P_INFO)(CONTAINING_RECORD(pP2PSvcInfo, P2P_INFO, pP2PSvcInfo)); - - *pbToSendProbeRsp = TRUE; // to send probe rsp by default - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - do - { - OCTET_STRING osSvcNameHash = {NULL, 0}; - - if(NULL == posP2PAttrs) - {// no P2P attr, just ignore - rtStatus = RT_STATUS_SUCCESS; - break; - } - - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_SVC_HASH, 6, &osSvcNameHash)) - {// no svc-nams-hash, just return success to make respond with a normal P2P ProbeRsp - if(P2P_CLIENT == pP2PInfo->Role) - {// if acting as P2P Client, only respond to Probe when it is a WFDS Probe - *pbToSendProbeRsp = FALSE; - } - break; - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeAdvSvcInfo(pP2PSvcInfo, &osSvcNameHash, pBuf))) - { - *pbToSendProbeRsp = FALSE; // peer is probing a svc we don't have => not to respond - break; - } - }while(FALSE); - - return rtStatus; -} - -RT_STATUS -P2PSvc_MakeProbeReqIE( - IN PVOID pvP2PSvcInfo, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(pBuf); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeSvcNameHash(pP2PSvcInfo, pBuf))) - { - break; - } - - }while(FALSE); - - return rtStatus; -} - -//----------------------------------------------------------------------------- -// Process SD event -//----------------------------------------------------------------------------- - -// -// Description: -// Handle SD req for P2P Services. -// The ANQP query data field of the SD req shall contain: -// svc-name-len(1), svc-name(n), svc-info-req-len(1), svc-info-req(n) -// - Do exact svc-name matching if the query svc-name does not contain * -// otherwise match substring. -// - Add svc-info if svc-info-req len is not 0 -// The ANQP query rsp data is constructed -// -RT_STATUS -P2PSvc_OnSDReq( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte dlgToken, - IN u1Byte SDReqRecvdSize, - IN PVOID pvSDReqRecvd, - OUT PBOOLEAN pbToSendSDRsp - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - PP2P_SERVICE_REQ_TLV pSvcReqTlv = (PP2P_SERVICE_REQ_TLV)pvSDReqRecvd; - pu1Byte pBuf = NULL; - FRAME_BUF fbuf; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(devAddr); - P2PSVC_CHECK_NULL(pvSDReqRecvd); - P2PSVC_CHECK_NULL(pbToSendSDRsp); - - *pbToSendSDRsp = TRUE; - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_INVALID_STATE; - if(P2P_SD_PROTOCOL_P2PSVC != pSvcReqTlv->ServiceDesc.ServiceType) return RT_STATUS_INVALID_DATA; - - P2PSVC_FUNC_IN(DBG_TRACE); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - u1Byte svcNameLen = 0; - pu1Byte svcNameBuf = NULL; - u1Byte svcInfoReqLen = 0; - pu1Byte svcInfoReqBuf = NULL; - - u1Byte nAddedAdvSvc = 0; - - PRT_LIST_ENTRY pEntry = NULL; - - // Get info from the SD req - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_ParseAnqpQueryReq(pSvcReqTlv, &svcNameLen, &svcNameBuf, &svcInfoReqLen, &svcInfoReqBuf))) - { - break; - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pSvcInfoDescBuf\n")); - break; - } - - FrameBuf_Init(P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN, 0, pBuf, &fbuf); - - // For each advertised svc, check if svc-name matches - for(pEntry = RTGetHeadList(&pP2PSvcInfo->advSvcList); pEntry != &pP2PSvcInfo->advSvcList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pAdvInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - - // Match svc-name - if(!P2PSvc_SDMatchSvcName(pAdvInfoEntry, svcNameLen, svcNameBuf)) continue; - - // Attach svc info desc to - P2PSvc_MakeSvcInfoDesc(pP2PSvcInfo, pAdvInfoEntry, svcInfoReqLen, svcInfoReqBuf, &fbuf); - - nAddedAdvSvc++; - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_SDRsp(pP2PSvcInfo, devAddr, dlgToken, pSvcReqTlv->TransactionID, nAddedAdvSvc, &fbuf))) - { - break; - } - - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - if(RT_STATUS_SUCCESS == rtStatus) - {// SD rsp has been sent in P2PSvc_SDRsp() - *pbToSendSDRsp = FALSE; - } - - if(pBuf) - { - P2PSvc_FreeMem(pBuf, P2P_MAX_SERVICE_DESCRIPTOR_BUFFER_LEN); - } - - P2PSVC_FUNC_OUT(DBG_TRACE, rtStatus); - - return rtStatus; -} - -// -// Description: -// Handle SD rsp with P2PSvc protocol type. -// -// -RT_STATUS -P2PSvc_OnSDRsp( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte transactionId, - IN PVOID pvSvcRspTlv, - OUT PBOOLEAN pbNeedFurtherProcess - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - PP2P_SERVICE_RSP_TLV pSvcRspTlv = (PP2P_SERVICE_RSP_TLV)pvSvcRspTlv; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(devAddr); - P2PSVC_CHECK_NULL(pvSvcRspTlv); - - *pbNeedFurtherProcess = TRUE; - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_INVALID_STATE; - - // If P2PSvc is enabled, there shall be no further process of this SD rsp, - // otherwise P2P state will be changed incorrectly in P2P_OnSDRsp() - *pbNeedFurtherProcess = FALSE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PRT_LIST_ENTRY pEntry = NULL; - - for(pEntry = RTGetHeadList(&pP2PSvcInfo->seekReqList); pEntry != &pP2PSvcInfo->seekReqList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PRT_OBJECT_HEADER pSeekSearchIdObj = NULL; - u1Byte searchId = 0; - BOOLEAN bDuplicatedEntry = FALSE; - - PP2PSVC_SR_LIST_ENTRY pSREntry = NULL; - PP2PSVC_SR_LIST_ENTRY pSREntryInList = NULL; - - // Match transaction id, this SD rsp may be the one for other seek req - pSeekSearchIdObj = P2PSvc_GetParam(&pSeekInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0); - searchId = *(pu1Byte)pSeekSearchIdObj->Value; - if(transactionId != searchId) - { - continue; - } - - if(!P2PSvc_ToProcessSDRsp(pP2PSvcInfo, searchId, devAddr)) - { - break; - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeSearchResultDataFromSDRsp(pP2PSvcInfo, searchId, devAddr, pSvcRspTlv, &pSREntry))) - { - break; - } - - // Update search result - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_UpdateSearchResult(pP2PSvcInfo, searchId, devAddr, pSREntry, &bDuplicatedEntry, &pSREntryInList))) - { - break; - } - - pSREntryInList->sdRspRxTime = PlatformGetCurrentTime(); - - // Check if indicat is needed - if(bDuplicatedEntry) - {// already have same entry in the list => free this one - P2PSvc_FreeMem(pSREntry, P2PSVC_SR_LIST_LEN(pSREntry)); - } - else - { - pSREntryInList->bDirty = TRUE; - } - - // Check if the seek is completed - if(!P2PSvc_SeekReqIsBcst(&pSeekInfoEntry->objList)) - {// search for specific dev => done here - PRT_LIST_ENTRY pForeEntry = RTForeEntryList(pEntry); - RTRemoveEntryListWithCnt(pEntry, &pP2PSvcInfo->seekReqListCnt); - P2PSvc_FreeMem(pEntry, P2PSVC_REQ_INFO_LIST_LEN(pSeekInfoEntry)); - pEntry = pForeEntry; - } - else - {// search for all dev addr - continue; // continue searching - } - - } - - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - if(RT_STATUS_SUCCESS == rtStatus) - { - *pbNeedFurtherProcess = FALSE; - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -//----------------------------------------------------------------------------- -// Process PD event -//----------------------------------------------------------------------------- - -// -// Description: -// Process PD req complete event. -// -RT_STATUS -P2PSvc_OnPDRsp( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte reqConfigMethod, - IN u2Byte rspConfigMethod, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(devAddr); - P2PSVC_CHECK_NULL(posP2PAttrs); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - if(P2PSvc_IsLegacyPD(posP2PAttrs)) - { - rtStatus = RT_STATUS_SUCCESS; - break; - } - - if(!P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(pPDEntry->bInitor) - {// initor, check PD rsp status, if 1, expect follow on PD req from peer - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_InitorOnPDRsp(pP2PSvcInfo, devAddr, pPDEntry, reqConfigMethod, rspConfigMethod, posP2PAttrs))) - { - break; - } - } - else - {// rspdor, this is a follow on PD rsp - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_RspdorOnFOPDRsp(pP2PSvcInfo, devAddr, pPDEntry, reqConfigMethod, rspConfigMethod, posP2PAttrs))) - { - break; - } - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// This function handles PD req. -// The P2P module is expected NOT to send PD rsp if this function returns error. -// -RT_STATUS -P2PSvc_OnPDReq( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte configMethod, - IN POCTET_STRING posP2PAttrs, - OUT PBOOLEAN pbToSendPDRsp - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(devAddr); - P2PSVC_CHECK_NULL(posP2PAttrs); - P2PSVC_CHECK_NULL(pbToSendPDRsp); - - *pbToSendPDRsp = TRUE; - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - if(P2PSvc_IsLegacyPD(posP2PAttrs)) - { - rtStatus = RT_STATUS_SUCCESS; - *pbToSendPDRsp = TRUE; - break; - } - - if(P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - if(pPDEntry->bInitor) - {// initor, this shall be a follow on PD req - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_InitorOnFOPDReq(pP2PSvcInfo, devAddr, configMethod, pPDEntry, posP2PAttrs))) - { - break; - } - } - else - {// rspdor, currently involved in another session - // Will attach status attr with code 2 when constructing PD rsp - } - } - else - {// no session, we are the rspdor, create a PD session - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AddPDRspdorData(pP2PSvcInfo, devAddr, configMethod, posP2PAttrs))) - { - break; - } - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - if(RT_STATUS_SUCCESS != rtStatus) - { - *pbToSendPDRsp = FALSE; - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - - - -RT_STATUS -P2PSvc_OnPDRspSent( - IN PVOID pvP2PSvcInfo, - IN BOOLEAN bSendOk - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - if(!P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - break; - } - - if(bSendOk) - { - if(pPDEntry->bInitor) - {// initor, FOPD rsp sent - P2PSvc_PDSessionSucceeded(pP2PSvcInfo, pPDEntry); - } - else - {// rspdor, PD rsp sent - if(!pPDEntry->bDeferred) - { - P2PSvc_PDSessionSucceeded(pP2PSvcInfo, pPDEntry); - } - } - } - - break; - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_MakePDReqIE( - IN PVOID pvP2PSvcInfo, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(pBuf); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - if(!P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - break; - } - - if(pPDEntry->bInitor) - {// make PD req IE - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeInitorPDReqIE(pP2PSvcInfo, pPDEntry, pBuf))) - { - break; - } - } - else - {// make follow on PD req IE - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeRspdorFOPDReqIE(pP2PSvcInfo, pPDEntry, pBuf))) - { - break; - } - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_MakePDRspIE( - IN PVOID pvP2PSvcInfo, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(pBuf); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_CHECK_NULL(posP2PAttrs); - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - if(!P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - break; - } - - if(pPDEntry->bInitor) - {// initor, recv follow on PD req, make follow on PD rsp IE - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeInitorFOPDRspIE(pP2PSvcInfo, pPDEntry, posP2PAttrs, pBuf))) - { - break; - } - } - else - {// rspdor, attach status attr with code 1 if !auto-accept - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_MakeRspdorPDRspIE(pP2PSvcInfo, pPDEntry, posP2PAttrs, pBuf))) - { - break; - } - } - - // If the session is completed, it will be freed when PD rsp sent. - - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// This function handles the case when the PD initor fails to send PD req. -// -// -RT_STATUS -P2PSvc_OnSendPDReqFailure( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte p2pStatus - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - P2PSVC_CHECK_NULL(devAddr); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_INVALID_STATE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - OCTET_STRING osStatus = {NULL, 0}; - P2P_STATUS_CODE pdStatus = 0; - - if(!P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(pPDEntry->bInitor) - {// failed to send PD req - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_InitorOnSendPDReqFailure(pP2PSvcInfo, pPDEntry, p2pStatus))) - { - break; - } - } - else - {// failed to send FOPD req - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_RspdorOnSendFOPDReqFailure(pP2PSvcInfo, pPDEntry, p2pStatus))) - { - break; - } - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_OnWatchdog( - IN PVOID pvP2PSvcInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - // Timeout out dated PD session - P2PSvc_PDSessionAgeFunc(pP2PSvcInfo); - - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_OnDisconnect( - IN PVOID pvP2PSvcInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = (PP2PSVC_INFO)pvP2PSvcInfo; - - P2PSVC_CHECK_NULL(pvP2PSvcInfo); - - if(!P2PSVC_ENABLED(pP2PSvcInfo)) return RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - P2PSvc_Free_PDSessionList(&pP2PSvcInfo->pdSessionList, &pP2PSvcInfo->pdSessionListCnt); - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - - -//----------------------------------------------------------------------------- -// Override default P2P behavior -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_DetermineGOSSID( - IN PADAPTER pAdapter, - OUT pu1Byte ssidBuf, - OUT pu1Byte pSsidLen - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PADAPTER pDefAdapter = GetDefaultAdapter(pAdapter); - PP2PSVC_INFO pDefP2PSVcInfo = P2PSVC_GET_INFO(pDefAdapter); - - P2PSVC_CHECK_NULL(pAdapter); - P2PSVC_CHECK_NULL(ssidBuf); - P2PSVC_CHECK_NULL(pSsidLen); - - *pSsidLen = 0; - - if(!P2PSVC_ENABLED(pDefP2PSVcInfo)) return RT_STATUS_INVALID_STATE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - P2PSvc_DeterminePDSessionGOSsid(pDefP2PSVcInfo, ssidBuf, pSsidLen); - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) diff --git a/network/wlan/WDI/COMMON/P2PSvc.h b/network/wlan/WDI/COMMON/P2PSvc.h deleted file mode 100644 index 3eb74388..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc.h +++ /dev/null @@ -1,253 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2013 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// P2P Service interface to other part of the driver -// - -#ifndef __INC_P2P_SVC_H -#define __INC_P2P_SVC_H - -#ifndef P2PSVC_SUPPORT - #define P2PSVC_SUPPORT 1 -#endif - -#if (P2P_SUPPORT != 1) -// Note: -// P2P Services depends on P2P function. -#undef P2PSVC_SUPPORT -#endif - -#if (P2PSVC_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -BOOLEAN -P2PSvc_Enabled( - IN PVOID pvP2PSvcInfo - ); - -VOID -P2PSvc_Dump( - IN PADAPTER pAdapter - ); - -RT_STATUS -P2PSvc_Request( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_AllocP2PSvcInfo( - IN PP2P_INFO pP2PInfo - ); - -RT_STATUS -P2PSvc_Free_P2PSvcInfo( - IN PP2P_INFO pP2PInfo - ); - -//----------------------------------------------------------------------------- -// Process probe event -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_OnP2PScanComplete( - IN PVOID pvP2PSvcInfo - ); - -RT_STATUS -P2PSvc_OnDevDiscComplete( - IN PVOID pvP2PSvcInfo - ); - -RT_STATUS -P2PSvc_OnProbeRsp( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN POCTET_STRING posP2PAttrs - ); - -RT_STATUS -P2PSvc_MakeProbeRspIE( - IN PVOID pvP2PSvcInfo, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf, - OUT PBOOLEAN pbToSendProbeRsp - ); - -RT_STATUS -P2PSvc_MakeProbeReqIE( - IN PVOID pvP2PSvcInfo, - OUT FRAME_BUF *pBuf - ); - -//----------------------------------------------------------------------------- -// Process SD event -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_OnSDReq( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte dlgToken, - IN u1Byte SDReqRecvdSize, - IN PVOID pvSDReqRecvd, - OUT PBOOLEAN pbToSendSDRsp - ); - -RT_STATUS -P2PSvc_OnSDRsp( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte transactionId, - IN PVOID pvSvcRspTlv, - OUT PBOOLEAN pbNeedFurtherProcess - ); - -//----------------------------------------------------------------------------- -// Process PD event -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_OnPDRsp( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte reqConfigMethod, - IN u2Byte rspConfigMethod, - IN POCTET_STRING posP2PAttrs - ); - -RT_STATUS -P2PSvc_OnPDReq( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte configMethod, - IN POCTET_STRING posP2PAttrs, - OUT PBOOLEAN bToSendPDRsp - ); - -RT_STATUS -P2PSvc_OnPDRspSent( - IN PVOID pvP2PSvcInfo, - IN BOOLEAN bSendOk - ); - -RT_STATUS -P2PSvc_MakePDReqIE( - IN PVOID pvP2PSvcInfo, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakePDRspIE( - IN PVOID pvP2PSvcInfo, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_OnSendPDReqFailure( - IN PVOID pvP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte p2pStatus - ); - -RT_STATUS -P2PSvc_OnWatchdog( - IN PVOID pvP2PSvcInfo - ); - -RT_STATUS -P2PSvc_OnDisconnect( - IN PVOID pvP2PSvcInfo - ); - -//----------------------------------------------------------------------------- -// Override default P2P behavior -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_DetermineGOSSID( - IN PADAPTER pAdapter, - OUT pu1Byte ssidBuf, - OUT pu1Byte pSsidLen - ); - -#else - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -#define P2PSvc_Enabled(__pvP2PSvcInfo) FALSE - -#define P2PSvc_Dump(__pAdapter) - -#define P2PSvc_Request(__pAdapter, __infoBuf, __inBufLen, __outBufLen, __pBytesWritten, __pBytesRead, __pBytesNeeded) RT_STATUS_SUCCESS - -#define P2PSvc_AllocP2PSvcInfo(__pP2PInfo) RT_STATUS_SUCCESS - -#define P2PSvc_Free_P2PSvcInfo(__pP2PInfo) RT_STATUS_SUCCESS - -//----------------------------------------------------------------------------- -// Process probe event -//----------------------------------------------------------------------------- - -#define P2PSvc_OnP2PScanComplete(__pvP2PSvcInfo) RT_STATUS_SUCCESS - -#define P2PSvc_OnDevDiscComplete(__pvP2PSvcInfo) RT_STATUS_SUCCESS - -#define P2PSvc_OnProbeRsp(__pvP2PSvcInfo, __devAddr, __posP2PAttrs) RT_STATUS_SUCCESS - -#define P2PSvc_MakeProbeRspIE(__pvP2PSvcInfo, __posP2PAttrs, __pBuf, __pbToSendProbeRsp) RT_STATUS_SUCCESS - -#define P2PSvc_MakeProbeReqIE(__pvP2PSvcInfo, __pBuf) RT_STATUS_SUCCESS - -//----------------------------------------------------------------------------- -// Process SD event -//----------------------------------------------------------------------------- - -#define P2PSvc_OnSDReq(__pvP2PSvcInfo, __devAddr, __dlgToken, __SDReqRecvdSize, __pvSDReqRecvd, __pbToSendSDRsp) RT_STATUS_SUCCESS - -#define P2PSvc_OnSDRsp(__pvP2PSvcInfo, __devAddr, __transactionId, __pvSvcRspTlv, __pbNeedFurtherProcess) RT_STATUS_SUCCESS - -//----------------------------------------------------------------------------- -// Process PD event -//----------------------------------------------------------------------------- - -#define P2PSvc_OnPDRsp(__pvP2PSvcInfo, __devAddr, __reqConfigMethod, __rspConfigMethod, __posP2PAttrs) RT_STATUS_SUCCESS - -#define P2PSvc_OnPDReq(__pvP2PSvcInfo, __devAddr, __conifgMethod, __posP2PAttrs, __pbToSendPDRsp) RT_STATUS_SUCCESS - -#define P2PSvc_OnPDRspSent(__pvP2PSvcInfo, __bSendOk) RT_STATUS_SUCCESS - -#define P2PSvc_MakePDReqIE(__pvP2PSvcInfo, __pBuf) RT_STATUS_SUCCESS - -#define P2PSvc_MakePDRspIE(__pvP2PSvcInfo, __posP2PAttrs, __pBuf) RT_STATUS_SUCCESS - -#define P2PSvc_OnSendPDReqFailure(__pvP2PSvcInfo,__devAddr, __p2pStatus) RT_STATUS_SUCCESS - -#define P2PSvc_OnWatchdog(__pvP2PSvcInfo) RT_STATUS_SUCCESS - -#define P2PSvc_OnDisconnect(__pvP2PSvcInfo) RT_STATUS_SUCCESS - -//----------------------------------------------------------------------------- -// Override default P2P behavior -//----------------------------------------------------------------------------- - -#define P2PSvc_DetermineGOSSID(__pAdapter, __ssidBuf, __pSsidLen) RT_STATUS_SUCCESS - -#endif // #if (P2PSVC_SUPPORT == 1) - -#endif // #ifndef __INC_P2P_SVC_H diff --git a/network/wlan/WDI/COMMON/P2PSvcType.h b/network/wlan/WDI/COMMON/P2PSvcType.h deleted file mode 100644 index 09e33d7e..00000000 --- a/network/wlan/WDI/COMMON/P2PSvcType.h +++ /dev/null @@ -1,245 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2013 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// P2P Service interface for upper layers -// - -#ifndef __INC_P2P_SVC_TYPE_H -#define __INC_P2P_SVC_TYPE_H - -//----------------------------------------------------------------------------- -// P2PSVC Version -//----------------------------------------------------------------------------- - -// The current support version of WFD -#define P2PSVC_MIN_SUPPORT_VER 0 -#define P2PSVC_MAX_SUPPORT_VER 0 - -#define P2PSVC_OBJECT_VERSION_DONT_CARE 0 -#define P2PSVC_OBJECT_VERSION_INVLAID 0xFFFFFFFF - -//----------------------------------------------------------------------------- -// Reason string -//----------------------------------------------------------------------------- -typedef u4Byte P2PSVC_REASON, *PP2PSVC_REASON; - -#define P2PSVC_REASON_NONE ((P2PSVC_REASON)0x00000000) -#define P2PSVC_REASON_PEER_UNRECOGNIZED ((P2PSVC_REASON)0x00000001) -#define P2PSVC_REASON_ADV_ID_MISMATCH ((P2PSVC_REASON)0x00000002) -#define P2PSVC_REASON_CONFIG_METHOD_MISMATCH ((P2PSVC_REASON)0x00000003) -#define P2PSVC_REASON_INVALID_CONN_CAP ((P2PSVC_REASON)0x00000004) -#define P2PSVC_REASON_NO_MATCHING_SVC ((P2PSVC_REASON)0x00000005) -#define P2PSVC_REASON_REQ_SVC_NOT_AVAILABLE ((P2PSVC_REASON)0x00000006) -#define P2PSVC_REASON_MISS_ATTR_STATUS ((P2PSVC_REASON)0x00000007) -#define P2PSVC_REASON_MISS_ATTR_CONN_CAP ((P2PSVC_REASON)0x00000008) -#define P2PSVC_REASON_MISS_ATTR_GRP_ID ((P2PSVC_REASON)0x00000009) -#define P2PSVC_REASON_MISS_ATTR_INTF_ADDR ((P2PSVC_REASON)0x0000000A) -#define P2PSVC_REASON_MISS_ATTR_OP_CHNL ((P2PSVC_REASON)0x0000000B) -#define P2PSVC_REASON_MISS_ATTR_SESSION_ID_INFO ((P2PSVC_REASON)0x0000000C) -#define P2PSVC_REASON_MISS_ATTR_DEV_INFO ((P2PSVC_REASON)0x0000000D) - -#define P2PSVC_DEFINE_REASON(__reasonStr) (#__reasonStr) - -static char* P2PSVC_REASON_STR_TAB[] = -{ - P2PSVC_DEFINE_REASON(P2PSVC_REASON_NONE), // 0x00000000 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_PEER_UNRECOGNIZED), // 0x00000001 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_ADV_ID_MISMATCH), // 0x00000002 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_CONFIG_METHOD_MISMATCH), // 0x00000003 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_INVALID_CONN_CAP), // 0x00000004 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_NO_MATCHING_SVC), // 0x00000005 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_REQ_SVC_NOT_AVAILABLE), // 0x00000006 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_STATUS), // 0x00000007 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_CONN_CAP), // 0x00000008 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_GRP_ID), // 0x00000009 - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_INTF_ADDR), // 0x0000000A - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_OP_CHNL), // 0x0000000B - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_SESSION_ID_INFO), // 0x0000000C - P2PSVC_DEFINE_REASON(P2PSVC_REASON_MISS_ATTR_DEV_INFO), // 0x0000000D -}; - -//----------------------------------------------------------------------------- -// Object Header -//----------------------------------------------------------------------------- - -#define P2PSVC_OBJ_HDR_ID_BMP_DATA ((u4Byte)BIT28) -#define P2PSVC_OBJ_HDR_ID_BMP_ACTION ((u4Byte)BIT29) -#define P2PSVC_OBJ_HDR_ID_BMP_INDICATE ((u4Byte)BIT30) -#define P2PSVC_OBJ_HDR_ID_BMP_RSVD_2 ((u4Byte)BIT31) - -#define P2PSVC_OBJ_HDR_ID_UNKNOWN ((u4Byte)0x00000000) - -// Data obj ID -#define P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN ((u4Byte)0x00000000 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_OBJ_LIST ((u4Byte)0x00000001 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_BENABLE ((u4Byte)0x00000002 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME ((u4Byte)0x00000003 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH ((u4Byte)0x00000004 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO_REQ ((u4Byte)0x00000005 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO ((u4Byte)0x00000006 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_AUTO_ACCEPT ((u4Byte)0x00000007 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS ((u4Byte)0x00000008 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_ADV_ID ((u4Byte)0x00000009 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR ((u4Byte)0x0000000A | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID ((u4Byte)0x0000000B | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME ((u4Byte)0x0000000C | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST ((u4Byte)0x0000000D | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SESSION_INFO ((u4Byte)0x0000000E | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_NETWORK_ROLE ((u4Byte)0x0000000F | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_CONN_CAP ((u4Byte)0x00000010 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID ((u4Byte)0x00000011 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED ((u4Byte)0x00000012 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SVC_COUNT ((u4Byte)0x00000013 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_P2P_STATUS ((u4Byte)0x00000014 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_P2P_ATTRIBUTES ((u4Byte)0x00000015 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_SSID ((u4Byte)0x00000016 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_INTF_ADDR ((u4Byte)0x00000017 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_OP_CHNL ((u4Byte)0x00000018 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_CONFIG_METHOD ((u4Byte)0x00000019 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_DEFERRED ((u4Byte)0x0000001A | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_IS_SD_DONE ((u4Byte)0x0000001B | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_IS_PERSISTENT ((u4Byte)0x0000001C | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_CONN_ACTION ((u4Byte)0x0000001D | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_REASON ((u4Byte)0x0000001E | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_NETWORK_CONFIG ((u4Byte)0x0000001F | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_GET_NETWORK_CONFIG_PIN ((u4Byte)0x00000020 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_NETWORK_CONFIG_PIN ((u4Byte)0x00000021 | P2PSVC_OBJ_HDR_ID_BMP_DATA) -#define P2PSVC_OBJ_HDR_ID_DATA_GRP_DEV_ADDR ((u4Byte)0x00000022 | P2PSVC_OBJ_HDR_ID_BMP_DATA) - -// Action obj ID -#define P2PSVC_OBJ_HDR_ID_ACT_UNKNOWN ((u4Byte)0x00000000 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_ENABLE ((u4Byte)0x00000001 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_SEEK ((u4Byte)0x00000002 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_CANCEL_SEEK ((u4Byte)0x00000003 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_ADVERTISE ((u4Byte)0x00000004 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_CANCEL_ADVERTISE ((u4Byte)0x00000005 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_SVC_STATUS ((u4Byte)0x00000006 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_PD_REQ ((u4Byte)0x00000007 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_FOPD_REQ ((u4Byte)0x00000008 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) -#define P2PSVC_OBJ_HDR_ID_ACT_CONN_CAP ((u4Byte)0x00000009 | P2PSVC_OBJ_HDR_ID_BMP_ACTION) - -// Indication obj ID -#define P2PSVC_OBJ_HDR_ID_INDIC_UNKNOWN ((u4Byte)0x00000000 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) - -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_PD_REQ_SENT ((u4Byte)0x00000100 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_PD_RSP ((u4Byte)0x00000101 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_FOPD_REQ ((u4Byte)0x00000102 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_FOPD_RSP_SENT ((u4Byte)0x00000103 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_PD_REQ_SEND_FAILED ((u4Byte)0x00000104 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_PD_TOPOLOGY ((u4Byte)0x00000105 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_BAD_PD_RSP ((u4Byte)0x00000106 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_BAD_FOPD_REQ ((u4Byte)0x00000107 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) - -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_PD_REQ ((u4Byte)0x00000200 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_PD_RSP_SENT ((u4Byte)0x00000201 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_FOPD_REQ_SENT ((u4Byte)0x00000202 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_FOPD_RSP ((u4Byte)0x00000203 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_FOPD_REQ_SEND_FAILED ((u4Byte)0x00000204 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_PD_TOPOLOGY ((u4Byte)0x00000205 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_BAD_PD_REQ ((u4Byte)0x00000206 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_BAD_FOPD_RSP ((u4Byte)0x00000207 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) - -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_REQ_SENT ((u4Byte)0x00000400 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_RSP_RECVD ((u4Byte)0x00000401 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_CONF_SENT ((u4Byte)0x00000402 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_REQ_SEND_FAILED ((u4Byte)0x00000403 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_CONF_SEND_FAILED ((u4Byte)0x00000404 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) - -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_REQ_RECVD ((u4Byte)0x00000800 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_RSP_SENT ((u4Byte)0x00000801 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_CONF_RECVD ((u4Byte)0x00000802 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) -#define P2PSVC_OBJ_HDR_ID_INDIC_NEGO_RSP_SEND_FAILED ((u4Byte)0x00000803 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) - -#define P2PSVC_OBJ_HDR_ID_INDIC_SEARCH_RESULT ((u4Byte)0x00000C00 | P2PSVC_OBJ_HDR_ID_BMP_INDICATE) - -#define P2PSVC_MAX_OBJ_LIST_ENTRIES 32 - -#define P2PSVC_WIFI_WFDS_SERVICE_NAME "org.wi-fi.wfds" - -#define P2PSVC_WIFI_WFDS_MAX_SERVICE_NAME_LEN 255 - - -typedef struct _P2PSVC_SVC_NAME_HASH_TAB -{ - WCHAR svcName[256]; - UCHAR hash[6]; -}P2PSVC_SVC_NAME_HASH_TAB, *PP2PSVC_SVC_NAME_HASH_TAB; - -static P2PSVC_SVC_NAME_HASH_TAB gP2PSVC_NameHashTab[] = -{ - {L"org.wi-fi.wfds", {0x6d, 0xb8, 0x71, 0x03, 0x11, 0xf8}}, - - {L"org.wi-fi.wfds.send.rx", {0xeb, 0xac, 0xb9, 0x5f, 0x37, 0x4e}}, - {L"org.wi-fi.wfds.send.tx", {0x28, 0x6d, 0xef, 0xe4, 0x6d, 0xd5}}, - - {L"org.wi-fi.wfds.play.rx", {0x20, 0xcd, 0xdd, 0x02, 0x10, 0xca}}, - {L"org.wi-fi.wfds.play.tx", {0xe8, 0x19, 0x14, 0x6c, 0x33, 0xe3}}, - - {L"org.wi-fi.wfds.display.rx", {0x9e, 0x26, 0x60, 0x5a, 0x4f, 0xd4}}, - {L"org.wi-fi.wfds.display.tx", {0x0b, 0x8c, 0x3c, 0xd4, 0x22, 0x05}}, - - {L"org.wi-fi.wfds.print.rx", {0xe8, 0x52, 0xf0, 0xab, 0xd5, 0x8b}}, - {L"org.wi-fi.wfds.print.tx", {0x94, 0x63, 0x35, 0xc3, 0xdf, 0xd7}}, - //------------------------------------------------------------ - {L"", {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}, -}; - -#pragma pack(1) -typedef struct _P2PSVC_OBJ_LIST -{ - // Hdr - RT_OBJECT_HEADER hdr; // len is form Value to the end of the structure including the var len field - - // Fixed - u4Byte nObjs; - u4Byte ObjTab[P2PSVC_MAX_OBJ_LIST_ENTRIES]; - - // Var - u1Byte varStart[1]; -}P2PSVC_OBJ_LIST, *PP2PSVC_OBJ_LIST; -#pragma pack() - -// Return ptr to the obj in the obj list of a specifc index -// If index is beyond the # of objs in the list, return NULL -#define P2PSVC_OBJ_LIST_GET_OBJ(__pObjList, __index) \ - (((__index) < ((__pObjList)->nObjs)) ? \ - (((PRT_OBJECT_HEADER)(((__pObjList)->varStart) + ((__pObjList)->ObjTab)[(__index)]))) : \ - (NULL)) - -// Return the length of the total obj list structure including the var field -// Assume the obj list is valid -#define P2PSVC_OBJ_LIST_LEN(__pObjList) ((FIELD_OFFSET(RT_OBJECT_HEADER, Value) + ((__pObjList)->hdr.Length))) - -#define P2PSVC_OBJ_LIST_VAR_LEN(__pObjList) (((__pObjList)->hdr.Length) - (FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart) - FIELD_OFFSET(RT_OBJECT_HEADER, Value))) - -#define P2PSVC_OBJ_LIST_INIT(__pObjList, __type, __id, __ver)\ -{\ - RT_ASSIGN_OBJECT_HEADER(&(__pObjList)->hdr, __type, __id, __ver, FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart) - FIELD_OFFSET(RT_OBJECT_HEADER, Value));\ - (__pObjList)->nObjs = 0;\ -} - -// -// P2P Services connection capability bitmap -// -#define P2PSVC_CONN_CAP_BMP_NONE ((u1Byte)0) -#define P2PSVC_CONN_CAP_BMP_NEW ((u1Byte)BIT0) -#define P2PSVC_CONN_CAP_BMP_CLI ((u1Byte)BIT1) -#define P2PSVC_CONN_CAP_BMP_GO ((u1Byte)BIT2) - -// -// P2P Services connection methods -// -#define P2PSVC_CONN_METHOD_NONE ((u4Byte)0x00000000) -#define P2PSVC_CONN_METHOD_INIT_NEGO ((u4Byte)0x00000001) // Init GO Negotiation -#define P2PSVC_CONN_METHOD_WAIT_NEGO ((u4Byte)0x00000002) // Wait GO Negotiation -#define P2PSVC_CONN_METHOD_JOIN_BY ((u4Byte)0x00000003) // Peer will join existing group -#define P2PSVC_CONN_METHOD_JOIN ((u4Byte)0x00000004) // Join existing group peer is hosting -#define P2PSVC_CONN_METHOD_AUTO_GO ((u4Byte)0x00000005) // Start Auto GO for peer to join - - -#endif // #ifndef __INC_P2P_SVC_TYPE_H - - diff --git a/network/wlan/WDI/COMMON/P2PSvc_ActionInfo.c b/network/wlan/WDI/COMMON/P2PSvc_ActionInfo.c deleted file mode 100644 index 6b116700..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_ActionInfo.c +++ /dev/null @@ -1,523 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) - -#if (P2PSVC_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -// -// Description: -// Add the req info (obj hdr + obj list) to the info list. -// Assume the req info has been validated by P2PSvc_ValidateReqInfo -// -RT_STATUS -p2psvc_AddReqInfoToList( - IN PADAPTER pAdapter, - IN PP2PSVC_INFO pP2PSvcInfo, - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt, - IN PRT_OBJECT_HEADER pObjHdr - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_OBJ_LIST pObjList = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - if(!pP2PSvcInfo->bEnabled) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] P2PSvc not enabled!")); - P2PSVC_FUNC_OUT(DBG_LOUD, RT_STATUS_INVALID_STATE); - - return RT_STATUS_INVALID_STATE; - } - - do - { - u4Byte reqBufSize = 0; - u4Byte objListLen = 0; - PP2PSVC_REQ_INFO_ENTRY pReqInfoEntry = NULL; - - pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - objListLen = P2PSVC_OBJ_LIST_LEN(pObjList); - reqBufSize = FIELD_OFFSET(P2PSVC_REQ_INFO_ENTRY, objList) + objListLen; - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pAdapter, &pReqInfoEntry, reqBufSize))) - { - RT_TRACE_F(COMP_OID_SET | COMP_WFD, DBG_WARNING, ("[WARNING] Failed to allocate memory for req info\n")); - rtStatus = RT_STATUS_RESOURCE; - break; - } - - // Construct req info entry - pReqInfoEntry->P2PSvcReqId = pObjHdr->Id; - PlatformMoveMemory(&pReqInfoEntry->objList, pObjList, objListLen); - - // Add to the list - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - RTInsertTailListWithCnt(pListHead, &pReqInfoEntry->List, pListCnt); - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "p2psvc_AddReqInfoToList(): add req info:\n", &pReqInfoEntry->objList, objListLen); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- -BOOLEAN -P2PSvc_Free_AdvSvcList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt, - IN u4Byte advId - ) -{ - PRT_LIST_ENTRY pEntry = NULL; - BOOLEAN bFreeAll = (0 == advId) ? (TRUE) : (FALSE); - BOOLEAN bFreed = FALSE; - - for(pEntry = RTGetHeadList(pListHead); pEntry != pListHead; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PP2PSVC_OBJ_LIST pAdvSvcObjList = &pInfoEntry->objList; - PRT_OBJECT_HEADER pAdvIdObj = NULL; - u4Byte curAdvId = 0; - BOOLEAN bFree = FALSE; - - P2PSVC_CHECK_NULL(pEntry); - if(!pEntry) break; - - pAdvIdObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - curAdvId = *(pu4Byte)pAdvIdObj->Value; - - // Assume that cancel advertising advId 0 (ASP) is to cancel ALL services - - if(bFreeAll) - { - bFree = TRUE; - } - else - { - if(advId == curAdvId) bFree = TRUE; - } - - if(bFree) - { - PRT_LIST_ENTRY pForeEntry = RTForeEntryList(pEntry); - - RTRemoveEntryListWithCnt(pEntry, pListCnt); - P2PSvc_FreeMem(pEntry, FIELD_OFFSET(P2PSVC_REQ_INFO_ENTRY, objList) + P2PSVC_OBJ_LIST_LEN(pAdvSvcObjList)); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("svc with id: %u canceled, pEntry is: %p\n", curAdvId, pEntry)); - - pEntry = pForeEntry; - - bFreed = TRUE; - } - - if(!bFreeAll && bFree) break; - } - - return bFreed; -} - -BOOLEAN -P2PSvc_Free_SeekReqList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt, - IN u1Byte seekId - ) -{ - PRT_LIST_ENTRY pEntry = NULL; - BOOLEAN bFreeAll = (0 == seekId) ? (TRUE) : (FALSE); - BOOLEAN bFreed = FALSE; - - for(pEntry = RTGetHeadList(pListHead); pEntry != pListHead; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PP2PSVC_OBJ_LIST pSeekObjList = &pInfoEntry->objList; - PRT_OBJECT_HEADER pSeekIdObj = NULL; - u4Byte curSeekId = 0; - BOOLEAN bFree = FALSE; - - P2PSVC_CHECK_NULL(pEntry); - if(!pEntry) break; - - pSeekIdObj = P2PSvc_GetParam(pSeekObjList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0); - curSeekId = *(pu1Byte)pSeekIdObj->Value; - - // Assume that cancel searchId 0 (ASP) is to cancel ALL seek requests - - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("cur search ID: %u search ID to cancel: %u\n", curSeekId, seekId)); - - if(bFreeAll) - { - bFree = TRUE; - } - else - { - if(seekId == curSeekId) bFree = TRUE; - } - - if(bFree) - { - PRT_LIST_ENTRY pForeEntry = RTForeEntryList(pEntry); - - RTRemoveEntryListWithCnt(pEntry, pListCnt); - P2PSvc_FreeMem(pEntry, FIELD_OFFSET(P2PSVC_REQ_INFO_ENTRY, objList) + P2PSVC_OBJ_LIST_LEN(&pInfoEntry->objList)); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("seek req of ID: %u canceled, pEntry is: %p\n", curSeekId, pEntry)); - - pEntry = pForeEntry; - - bFreed = TRUE; - } - - if(!bFreeAll && bFree) break; - } - - return bFreed; -} - -RT_STATUS -P2PSvc_Set_AdvSvc( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - - if(RT_STATUS_SUCCESS != (rtStatus = p2psvc_AddReqInfoToList(pAdapter, pP2PSvcInfo, &pP2PSvcInfo->advSvcList, &pP2PSvcInfo->advSvcListCnt, pObjHdr))) - { - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_Set_CancelAdvSvc( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - PP2PSVC_OBJ_LIST pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - - PRT_OBJECT_HEADER pAdvIdObj = NULL; - u4Byte advIdToCancel = 0; - - pAdvIdObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - advIdToCancel = *(pu4Byte)pAdvIdObj->Value; - - if(!P2PSvc_Free_AdvSvcList(&pP2PSvcInfo->advSvcList, &pP2PSvcInfo->advSvcListCnt, advIdToCancel)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_Set_SvcStatus( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - PP2PSVC_OBJ_LIST pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - - PRT_OBJECT_HEADER pAdvIdObj = NULL; - PRT_OBJECT_HEADER pSvcStatusObj = NULL; - - u4Byte advIdToSet = 0; - u1Byte svcStatusToSet = 0; - - PRT_LIST_ENTRY pEntry = NULL; - - // Get adv-id and svc-status to set - pAdvIdObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - advIdToSet = *(pu4Byte)pAdvIdObj->Value; - - pSvcStatusObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, 0); - svcStatusToSet = *(pu1Byte)pSvcStatusObj->Value; - - for(pEntry = RTGetHeadList(&pP2PSvcInfo->advSvcList); pEntry != &pP2PSvcInfo->advSvcList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PP2PSVC_OBJ_LIST pAdvSvcObjList = &pInfoEntry->objList; - u4Byte curAdvId = 0; - - // Get current adv svc's adv id for matching - pAdvIdObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - curAdvId = *(pu4Byte)pAdvIdObj->Value; - - if(curAdvId == advIdToSet) - { - pu1Byte pCurSvcStatus = NULL; - - pSvcStatusObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, 0); - pCurSvcStatus = (pu1Byte)pSvcStatusObj->Value; - *pCurSvcStatus = svcStatusToSet; - - break; - } - } - - if(pEntry == &pP2PSvcInfo->advSvcList) - { - rtStatus = RT_STATUS_INVALID_PARAMETER; - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_Set_Seek( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - - if(RT_STATUS_SUCCESS != (rtStatus = p2psvc_AddReqInfoToList(pAdapter, pP2PSvcInfo, &pP2PSvcInfo->seekReqList, &pP2PSvcInfo->seekReqListCnt, pObjHdr))) - { - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_Set_CancelSeek( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - PP2PSVC_OBJ_LIST pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - - PRT_OBJECT_HEADER pSearchIdObj = NULL; - u1Byte searchIdToCancel = 0; - - pSearchIdObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0); - searchIdToCancel = *(pu1Byte)pSearchIdObj->Value; - - if(!P2PSvc_Free_SeekReqList(&pP2PSvcInfo->seekReqList, &pP2PSvcInfo->seekReqListCnt, searchIdToCancel)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_Set_ConnCap( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - PRT_OBJECT_HEADER pObjHdr = NULL; - PP2PSVC_OBJ_LIST pObjList = NULL; - PRT_OBJECT_HEADER pConnCapObj = NULL; - - pObjHdr = (PRT_OBJECT_HEADER)infoBuf; - pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - - pConnCapObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_CONN_CAP, 0); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - { - pP2PSvcInfo->connCap = *(pu1Byte)pConnCapObj->Value; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("conn cap set to: %u\n", pP2PSvcInfo->connCap)); - } - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_Set_PDReq( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AddPDInitorData(pAdapter, infoBuf, inBufLen, outBufLen))) - { - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_Set_RspdorFOPDReq( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - - P2PSVC_FUNC_IN(DBG_LOUD); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PRT_OBJECT_HEADER pObjHdr = NULL; - PP2PSVC_OBJ_LIST pObjList = NULL; - PRT_OBJECT_HEADER pObj = NULL; - BOOLEAN bUserAccepted = FALSE; - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - pObjHdr = (PRT_OBJECT_HEADER)infoBuf; - pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - - pObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED, 0); - bUserAccepted = *((PBOOLEAN)pObj->Value); - - if(P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - P2PSvc_RspdorSetFOPDReq(pP2PSvcInfo, pPDEntry, bUserAccepted); - } - else - { - rtStatus = RT_STATUS_INVALID_STATE; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("No PD session in progress\n")); - break; - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) diff --git a/network/wlan/WDI/COMMON/P2PSvc_Construct.c b/network/wlan/WDI/COMMON/P2PSvc_Construct.c deleted file mode 100644 index 3a8428b3..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_Construct.c +++ /dev/null @@ -1,992 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -BOOLEAN -p2psvc_MatchSvcNameHash_org_wi_fi_wfds( - IN POCTET_STRING posSvcNameHash -) -{ - BOOLEAN bMatched = FALSE; - - u4Byte nHashes = posSvcNameHash->Length / 6; - u4Byte iterReqHash = 0; - - for(iterReqHash = 0; iterReqHash < nHashes; iterReqHash++) - { - if(0 == PlatformCompareMemory(posSvcNameHash->Octet + (6 * iterReqHash), gP2PSVC_NameHashTab[0].hash, 6)) - {// check if it is prefix search - bMatched = TRUE; - break; - } - } - - return bMatched; -} - -BOOLEAN -p2psvc_MatchSvcNameHash( - IN PP2PSVC_REQ_INFO_ENTRY pInfoEntry, - IN POCTET_STRING posSvcNameHash - ) -{ - BOOLEAN bMatch = FALSE; - PRT_OBJECT_HEADER pSvcNameHashObj = NULL; - u4Byte nHashes = posSvcNameHash->Length / 6; - u4Byte iterReqHash = 0; - - if(NULL == (pSvcNameHashObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, 0))) - {// shall not happen since we have validated when set this req - return FALSE; - } - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "adv svc hash:\n", pSvcNameHashObj->Value, pSvcNameHashObj->Length); - - for(iterReqHash = 0; iterReqHash < nHashes; iterReqHash++) - { - if(0 == PlatformCompareMemory(posSvcNameHash->Octet + (6 * iterReqHash), pSvcNameHashObj->Value, 6)) - { - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "Match svc-name-hash:\n", pSvcNameHashObj->Value, pSvcNameHashObj->Length); - bMatch = TRUE; - break; - } - } - - return bMatch; -} - -u2Byte -p2psvc_EvalSvcAdvInfoAttrLen( - IN PP2PSVC_INFO pP2PSvcInfo, - IN POCTET_STRING posSvcNameHash - ) -{ - u2Byte reqLen = 0; - u1Byte nSvcToAttach = 0; - - do - { - PRT_LIST_ENTRY pEntry = NULL; - - if(p2psvc_MatchSvcNameHash_org_wi_fi_wfds(posSvcNameHash)) - {// Spec 3.4.3.2: if prefix search, send org.wi-fi.wfds service name - - reqLen += (u2Byte)( sizeof(u4Byte) // adv-id - + 2 // config-method - + sizeof(u1Byte) // svc-name len - + strlen(P2PSVC_WIFI_WFDS_SERVICE_NAME) // svc-name - + 0); - - nSvcToAttach++; - } - else - { - for(pEntry = RTGetHeadList(&pP2PSvcInfo->advSvcList); pEntry != &pP2PSvcInfo->advSvcList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PRT_OBJECT_HEADER pAdvIdObj = NULL; - PRT_OBJECT_HEADER pSvcNameObj = NULL; - - if(!p2psvc_MatchSvcNameHash(pInfoEntry, posSvcNameHash)) continue; - - pAdvIdObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - pSvcNameObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0); - - reqLen += (u2Byte)(pAdvIdObj->Length // adv-id - + 2 // config-method - + sizeof(u1Byte) // svc-name len - + pSvcNameObj->Length // svc-name - + 0); - - nSvcToAttach++; - } - } - }while(FALSE); - - if(0 == nSvcToAttach) reqLen = 0; - - return reqLen; -} - -RT_STATUS -p2psvc_MakePDSvcNameHash( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - pu1Byte pLen = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_LIST_ENTRY pEntry = NULL; - - PP2PSVC_PD_ENTRY pPDEntry = NULL; - PRT_OBJECT_HEADER pSvcNameHashObj = NULL; - - if(!P2PSvc_PDSessionInProgress(pP2PSvcInfo, &pPDEntry)) - { - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(!pPDEntry->bInitor) - { - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(NULL == (pSvcNameHashObj = P2PSvc_GetParam(P2PSvc_Get_PDEntryObjList(pPDEntry), P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, 0)) - || 6 != pSvcNameHashObj->Length - ) - {// shall not happen since we have validated when set this req - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_SVC_HASH); - FrameBuf_Add_le_u2(pBuf, (u2Byte)pSvcNameHashObj->Length); - FrameBuf_Add_Data(pBuf, pSvcNameHashObj->Value, (u2Byte)pSvcNameHashObj->Length); - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - - -RT_STATUS -p2psvc_MakeSeekSvcNameHash( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - pu1Byte pLen = NULL; - - P2PSVC_FUNC_IN(DBG_TRACE); - - do - { - PRT_LIST_ENTRY pEntry = NULL; - pu2Byte pAttrLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_SVC_HASH); - FrameBuf_Add_le_u2(pBuf, (u2Byte) pP2PSvcInfo->seekReqListCnt * 6); - - // Construct the hash list - for(pEntry = RTGetHeadList(&pP2PSvcInfo->seekReqList); pEntry != &pP2PSvcInfo->seekReqList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PRT_OBJECT_HEADER pSvcNameHashObj = NULL; - - pSvcNameHashObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, 0); - FrameBuf_Add_Data(pBuf, pSvcNameHashObj->Value, 6); - } - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_TRACE, rtStatus); - - return rtStatus; -} - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - - - -// -// Description: -// Make adv-svc-info attr. -// The attr is carried in a independent P2P IE and if the IE is too big -// to fit in a single P2P IE, it is splitted into several. -// If error occurs during the process, length of the posMsdu member -// will not be updated therefore no change is made to the original -// constructing frame. -// -RT_STATUS -P2PSvc_MakeAdvSvcInfo( - IN PP2PSVC_INFO pP2PSvcInfo, - IN POCTET_STRING posSvcNameHash, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - pu1Byte pLen = NULL; - - P2PSVC_FUNC_IN(DBG_TRACE); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - PRT_LIST_ENTRY pEntry = NULL; - u2Byte attrLen = 0; - u2Byte bytesWritten = 0; - - if(0 == (attrLen = p2psvc_EvalSvcAdvInfoAttrLen(pP2PSvcInfo, posSvcNameHash))) - {// no matching svc - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(0 == attrLen) break; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - // Attr id and len - FrameBuf_Add_u1(pBuf, P2P_ATTR_ADV_SVC_INFO); - FrameBuf_Add_le_u2(pBuf, attrLen); - - // advertise-svc-desc - if(p2psvc_MatchSvcNameHash_org_wi_fi_wfds(posSvcNameHash)) - {// Spec 3.4.3.2: if prefix search, send org.wi-fi.wfds service name - - u4Byte AdvIdZero = 0; - - // Main spec v0.43: - // If ASP finds a match with the Service Hash value of - // "org.wi-fi.wfds" (i.e. advertises one of the Wi-Fi alliance - // defined services listed in 3.2), then the ConfigMethods value - // in Probe Response shall be ignored. - - // Attach [adv-id, config-method, svc-name len, svc-name] - FrameBuf_Add_le_u4(pBuf, AdvIdZero); - FrameBuf_Add_le_u2(pBuf, 0); - FrameBuf_Add_u1(pBuf, (u1Byte)(strlen(P2PSVC_WIFI_WFDS_SERVICE_NAME))); - FrameBuf_Add_Data(pBuf, P2PSVC_WIFI_WFDS_SERVICE_NAME, (u2Byte) strlen(P2PSVC_WIFI_WFDS_SERVICE_NAME)); - } - else - { - // Attr payload - for(pEntry = RTGetHeadList(&pP2PSvcInfo->advSvcList); pEntry != &pP2PSvcInfo->advSvcList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - u2Byte svcConfigMethod = pP2PInfo->WpsAttributes.ConfigMethod; - - PRT_OBJECT_HEADER pNetworkConfigObj = NULL; - PRT_OBJECT_HEADER pAdvIdObj = NULL; - PRT_OBJECT_HEADER pSvcNameObj = NULL; - - if(!p2psvc_MatchSvcNameHash(pInfoEntry, posSvcNameHash)) continue; - - pAdvIdObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - pSvcNameObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0); - pNetworkConfigObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_NETWORK_CONFIG, 0); - - if(2 == *(PUCHAR)pNetworkConfigObj->Value) - {// WSC PIN method only - CLEAR_FLAG(svcConfigMethod, P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN); - } - - // Attach [adv-id, config-method, svc-name len, svc-name] - FrameBuf_Add_le_u4(pBuf, *(pu4Byte)pAdvIdObj->Value); - FrameBuf_Add_be_u2(pBuf, svcConfigMethod); - FrameBuf_Add_u1(pBuf, (u1Byte)pSvcNameObj->Length); - FrameBuf_Add_Data(pBuf, pSvcNameObj->Value, (u2Byte)pSvcNameObj->Length); - - //RT_PRINT_STR(COMP_P2P, DBG_TRACE, "Advertise svc-name:\n", pSvcNameObj->Value, pSvcNameObj->Length); - } - } - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_TRACE, rtStatus); - - return rtStatus; -} - -// -// Description: -// Build independent P2P IEs for carrying the hash values -// -RT_STATUS -P2PSvc_MakeSvcNameHash( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_TRACE); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - - do - { - if(pP2PSvcInfo->pdSessionListCnt) - { - if(RT_STATUS_SUCCESS != (rtStatus = p2psvc_MakePDSvcNameHash(pP2PSvcInfo, pBuf))) - { - break; - } - } - else if(pP2PSvcInfo->seekReqListCnt) - { - if(RT_STATUS_SUCCESS != (rtStatus = p2psvc_MakeSeekSvcNameHash(pP2PSvcInfo, pBuf))) - { - break; - } - } - else - { - break; - } - }while(FALSE); - - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - - P2PSVC_FUNC_OUT(DBG_TRACE, rtStatus); - - return rtStatus; -} - - -RT_STATUS -P2PSvc_MakeInitorPDReqIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - pu1Byte pLen = NULL; - - do - { - PRT_OBJECT_HEADER pObj = NULL; - pu1Byte peerDevAddr = NULL; - u4Byte advId = 0; - pu1Byte selfDevAddr = NULL; - u4Byte sessionId = 0; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - // Comment out because already appended by P2PConstructProvisionDiscoveryReq - // P2P-cap, always present - //bytesCopied = P2PMakeP2PCapability(pP2PInfo, Type_Action, osAttr.Octet + osAttr.Length); - //osAttr.Length += bytesCopied; - - // Comment out because already appended by P2PConstructProvisionDiscoveryReq - // P2P-dev-info, always present - //bytesCopied = P2PMakeP2PDeviceInfo(pP2PInfo, Type_Action, osAttr.Octet + osAttr.Length); - //osAttr.Length += bytesCopied; - - // Group-id, contains NEW or GO - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_ID); - FrameBuf_Add_le_u2(pBuf, 6 + pPDEntry->selfGrpInfo.ssidLen); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.grpDevAddr, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.ssidBuf, pPDEntry->selfGrpInfo.ssidLen); - } - - // Intended-intf-addr, contains NEW or GO - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_INTENDED_INTERFACE_ADDRESS); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.grpIntfAddr, 6); - } - - // Status, NONE - - // Operating-channel, contains NEW or GO - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - } - - // Channel-list, contains NEW - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW)) - { - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - } - - // session-info-data-info (n <= 144), present if session-info is not 0 - pObj = P2PSvc_GetParam(&pInitorPDEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SESSION_INFO, 0); - if(0 < pObj->Length && pObj->Length < 144) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_SESSION_INFO_DATA_INFO); - FrameBuf_Add_le_u2(pBuf, (u2Byte)pObj->Length); - FrameBuf_Add_Data(pBuf, pObj->Value, (u2Byte)pObj->Length); - } - - // conn-cap, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_CONN_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, pPDEntry->selfConnCap); - - // adv-id (adv-id, svc-mac), always present - pObj = P2PSvc_GetParam(&pInitorPDEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0); - peerDevAddr = pObj->Value; - pObj = P2PSvc_GetParam(&pInitorPDEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - advId = *(pu4Byte)pObj->Value; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_ADV_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, advId); - FrameBuf_Add_Data(pBuf, peerDevAddr, 6); - - // Config-timeout, contains NEW or GO - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - P2PAttr_Make_ConfigTimeout(pBuf, pP2PInfo->GOConfigurationTimeout, pP2PInfo->ClientConfigurationTimeout); - } - - // Listen-channel, contains NEW or CLI - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_CLI)) - { - P2PAttr_Make_ListenChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->ListenChannel); - } - - // session-id (session-id, self dev-addr), always present - selfDevAddr = pP2PInfo->DeviceAddress; - pObj = P2PSvc_GetParam(&pInitorPDEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID, 0); - sessionId = *(pu4Byte)pObj->Value; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_SESSION_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, sessionId); - FrameBuf_Add_Data(pBuf, selfDevAddr, 6); - - // Feature-cap, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_FEATURE_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 2); - FrameBuf_Add_le_u2(pBuf, 0x0001); - - // Persistent-grp-info, present if persistent grp available and ASP intent using it - // TODO: - - //4 Indicate P2P attrs sent - P2PSvc_IndicateFrameSent(pP2PSvcInfo, - P2PSVC_OBJ_HDR_ID_INDIC_INITOR_PD_REQ_SENT, - peerDevAddr, - (u2Byte)(FrameBuf_Tail(pBuf) - 1 - pLen), - pLen + 1); - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - return rtStatus; -} - -RT_STATUS -P2PSvc_MakeRspdorFOPDReqIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - pu1Byte pLen = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - // Comment out because already appended by P2PConstructProvisionDiscoveryReq - // P2P-cap, always present - //bytesCopied = P2PMakeP2PCapability(pP2PInfo, Type_Action, osAttr.Octet + osAttr.Length); - //osAttr.Length += bytesCopied; - - // Comment out because already appended by P2PConstructProvisionDiscoveryReq - // Dev-info, always present - //bytesCopied = P2PMakeP2PDeviceInfo(pP2PInfo, Type_Action, osAttr.Octet + osAttr.Length); - //osAttr.Length += bytesCopied; - - // Group-id, contains NEW or GO - if(TEST_FLAG(pRspdorPDEntry->fopdReqConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_ID); - FrameBuf_Add_le_u2(pBuf, 6 + pPDEntry->selfGrpInfo.ssidLen); - FrameBuf_Add_Data(pBuf, pP2PInfo->DeviceAddress, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.ssidBuf, pPDEntry->selfGrpInfo.ssidLen); - } - - // Intended-intf-addr, contains NEW or GO - if(TEST_FLAG(pRspdorPDEntry->fopdReqConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_INTENDED_INTERFACE_ADDRESS); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.grpIntfAddr, 6); - } - - // Status, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_STATUS); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, (u1Byte)pRspdorPDEntry->fopdReqStatus); - - // Op-channel, contains NEW or GO - if(TEST_FLAG(pRspdorPDEntry->fopdReqConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - } - - // Channel-list, contains NEW - if(TEST_FLAG(pRspdorPDEntry->fopdReqConnCap, P2PSVC_CONN_CAP_BMP_NEW)) - { - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - } - - // Session-info-data-info, NONE - - // Conn-cap, present if accepted - if(P2P_STATUS_SUCCESS_ACCEPTED_BY_USER == pRspdorPDEntry->fopdReqStatus) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_CONN_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, pRspdorPDEntry->fopdReqConnCap); - } - - // Adv-id (adv-id, svc-mac), always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_ADV_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, pRspdorPDEntry->super.advId); - FrameBuf_Add_Data(pBuf, pP2PInfo->DeviceAddress, 6); - - // Config-timeout, contains NEW or GO - if(TEST_FLAG(pRspdorPDEntry->fopdReqConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - P2PAttr_Make_ConfigTimeout(pBuf, pP2PInfo->GOConfigurationTimeout, pP2PInfo->ClientConfigurationTimeout); - } - - // Listen-channel, contains NEW or CLI - if(TEST_FLAG(pRspdorPDEntry->fopdReqConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_CLI)) - { - P2PAttr_Make_ListenChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->ListenChannel); - } - - // Session-id-info, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_SESSION_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, pRspdorPDEntry->super.sessionId); - FrameBuf_Add_Data(pBuf, pRspdorPDEntry->super.peerDevAddr, 6); - - // Feature-cap, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_FEATURE_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 2); - FrameBuf_Add_le_u2(pBuf, 0x0001); - - // Persistent-grp-info, present if persistent grp available and ASP intend using it - // TODO: - - //4 Indicate P2P attrs sent - P2PSvc_IndicateFrameSent(pP2PSvcInfo, - P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_FOPD_REQ_SENT, - pRspdorPDEntry->super.peerDevAddr, - (u2Byte)(FrameBuf_Tail(pBuf) - 1 - pLen), - pLen + 1); - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_MakeInitorFOPDRspIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - pu1Byte pLen = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - OCTET_STRING osConnCap = {NULL, 0}; - PRT_OBJECT_HEADER pObj = NULL; - pu1Byte peerDevAddr = NULL; - u4Byte advId = 0; - PP2P_WPS_ATTRIBUTES pWps = &pP2PInfo->WpsAttributes; - - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_CONN_CAP_INFO, 1, &osConnCap)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - // P2P-cap, always present - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - pP2PInfo->GroupCapability); - - // Dev-info, always present - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, - pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, - pWps->DeviceName); - - // Group-id, connCap IS GO - if(P2PSVC_CONN_CAP_BMP_GO == pInitorPDEntry->fopdRspConnCap) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_ID); - FrameBuf_Add_le_u2(pBuf, 6 + pPDEntry->selfGrpInfo.ssidLen); - FrameBuf_Add_Data(pBuf, pP2PInfo->DeviceAddress, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.ssidBuf, pPDEntry->selfGrpInfo.ssidLen); - } - - // Intended-intf-addr, connCap IS GO - if(P2PSVC_CONN_CAP_BMP_GO == pInitorPDEntry->fopdRspConnCap) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_INTENDED_INTERFACE_ADDRESS); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.grpIntfAddr, 6); - } - - // Status, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_STATUS); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, (u1Byte)pInitorPDEntry->fopdRspStatus); - - // Op-channel, connCap IS GO - if(P2PSVC_CONN_CAP_BMP_GO == pInitorPDEntry->fopdRspConnCap) - { - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - } - - // Channel-list, IS CLI or GO - if(P2PSVC_CONN_CAP_BMP_GO == pInitorPDEntry->fopdRspConnCap - || P2PSVC_CONN_CAP_BMP_CLI == pInitorPDEntry->fopdRspConnCap - ) - { - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - } - - // Session-info-data-info, NONE - - // Conn-cap, always present? - if(P2P_STATUS_SUCCESS == pInitorPDEntry->fopdRspStatus) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_CONN_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, pInitorPDEntry->fopdRspConnCap); - } - - // Adv-id (adv-id, svc-mac), always present - pObj = P2PSvc_GetParam(&pInitorPDEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0); - peerDevAddr = pObj->Value; - pObj = P2PSvc_GetParam(&pInitorPDEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - advId = *(pu4Byte)pObj->Value; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_ADV_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, advId); - FrameBuf_Add_Data(pBuf, pInitorPDEntry->super.peerDevAddr, 6); - - // Config-timeout, IS GO or CLI - // Always add config-time out since WFA is checking this even when PD is failed - //if(P2PSVC_CONN_CAP_BMP_GO == pInitorPDEntry->fopdRspConnCap - // || P2PSVC_CONN_CAP_BMP_CLI == pInitorPDEntry->fopdRspConnCap - // ) - { - P2PAttr_Make_ConfigTimeout(pBuf, pP2PInfo->GOConfigurationTimeout, pP2PInfo->ClientConfigurationTimeout); - } - - // Listen-channel, NONE - - // Session-id-info, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_SESSION_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, pInitorPDEntry->super.sessionId); - FrameBuf_Add_Data(pBuf, pP2PInfo->DeviceAddress, 6); - - // Feature-cap, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_FEATURE_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 2); - FrameBuf_Add_le_u2(pBuf, 0x0001); - - // Persistent-grp-info, NONE - - //4 Indicate P2P attrs sent - P2PSvc_IndicateFrameSent(pP2PSvcInfo, - P2PSVC_OBJ_HDR_ID_INDIC_INITOR_FOPD_RSP_SENT, - peerDevAddr, - (u2Byte)(FrameBuf_Tail(pBuf) - 1 - pLen), - pLen + 1); - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_MakeRspdorPDRspIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - pu1Byte pLen = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PP2P_WPS_ATTRIBUTES pWps = &pP2PInfo->WpsAttributes; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - // P2P-cap, always present - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - pP2PInfo->GroupCapability); - - // P2P-dev-info, always present - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, - pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, - pWps->DeviceName); - - // Group-id, IS GO - if(P2PSVC_CONN_CAP_BMP_GO == pRspdorPDEntry->pdRspConnCap) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_ID); - FrameBuf_Add_le_u2(pBuf, 6 + pPDEntry->selfGrpInfo.ssidLen); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.grpDevAddr, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.ssidBuf, pPDEntry->selfGrpInfo.ssidLen); - } - - // Intended-intf-addr, contains NEW or GO - if(TEST_FLAG(pRspdorPDEntry->pdRspConnCap, P2PSVC_CONN_CAP_BMP_GO)) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_INTENDED_INTERFACE_ADDRESS); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, pPDEntry->selfGrpInfo.grpIntfAddr, 6); - } - - // Status, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_STATUS); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, pRspdorPDEntry->pdRspStatus); - - // Operating-channel, IS GO - if(P2PSVC_CONN_CAP_BMP_GO == pRspdorPDEntry->pdRspConnCap) - { - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - } - - // Channel-list, IS CLI or GO - if(P2PSVC_CONN_CAP_BMP_GO == pRspdorPDEntry->pdRspConnCap - || P2PSVC_CONN_CAP_BMP_CLI == pRspdorPDEntry->pdRspConnCap - ) - { - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - } - - // session-info-data-info, NONE - - // conn-cap, always present, present if SUCCESS - if(P2P_STATUS_SUCCESS == pRspdorPDEntry->pdRspStatus) - { - FrameBuf_Add_u1(pBuf, P2P_ATTR_CONN_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, pRspdorPDEntry->pdRspConnCap); - } - - // adv-id (adv-id, svc-mac), always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_ADV_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, pRspdorPDEntry->super.advId); - FrameBuf_Add_Data(pBuf, pP2PInfo->DeviceAddress, 6); - - // Config-timeout, IS GO or CLI - // Always add config-timeout since WFA is checking this even status is failed - //if(P2PSVC_CONN_CAP_BMP_GO == pRspdorPDEntry->pdRspConnCap - // || P2PSVC_CONN_CAP_BMP_CLI == pRspdorPDEntry->pdRspConnCap - // ) - { - P2PAttr_Make_ConfigTimeout(pBuf, pP2PInfo->GOConfigurationTimeout, pP2PInfo->ClientConfigurationTimeout); - } - - // Listen-channel, NONE - - // Session-id-info, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_SESSION_ID_INFO); - FrameBuf_Add_le_u2(pBuf, 4 + 6); - FrameBuf_Add_le_u4(pBuf, pRspdorPDEntry->super.sessionId); - FrameBuf_Add_Data(pBuf, pRspdorPDEntry->super.peerDevAddr, 6); - - // Feature-cap, always present - FrameBuf_Add_u1(pBuf, P2P_ATTR_FEATURE_CAP_INFO); - FrameBuf_Add_le_u2(pBuf, 2); - FrameBuf_Add_le_u2(pBuf, 0x0001); - - // Persistent-grp-info, present if persistent grp known and ASP intent using it - // TODO: - - //4 Indicate P2P attrs sent - P2PSvc_IndicateFrameSent(pP2PSvcInfo, - P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_PD_RSP_SENT, - pRspdorPDEntry->super.peerDevAddr, - (u2Byte)(FrameBuf_Tail(pBuf) - 1 - pLen), - pLen + 1); - - p2p_update_IeHdrLen(pBuf, pLen); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_MakeSvcInfoDesc( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_REQ_INFO_ENTRY pAdvInfoEntry, - IN u1Byte svcInfoReqLen, - IN pu1Byte pSvcInfoReqBuf, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - PP2PSVC_OBJ_LIST pAdvSvcObjList = &pAdvInfoEntry->objList; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pAdvIdObj = NULL; - PRT_OBJECT_HEADER pNetworkConfigObj = NULL; - PRT_OBJECT_HEADER pSvcNameObj = NULL; - PRT_OBJECT_HEADER pSvcStatusObj = NULL; - PRT_OBJECT_HEADER pSvcInfoObj = NULL; - - u2Byte svcConfigMethod = pP2PInfo->WpsAttributes.ConfigMethod; - - // Get info from the advertised svc - if(NULL == (pAdvIdObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0))) - { - break; - } - - if(NULL == (pNetworkConfigObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_NETWORK_CONFIG, 0))) - { - break; - } - - if(NULL == (pSvcNameObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0))) - { - break; - } - - if(NULL == (pSvcStatusObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, 0))) - { - break; - } - - if(NULL == (pSvcInfoObj = P2PSvc_GetParam(pAdvSvcObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO, 0))) - { - break; - } - - // Construct svc info desc (ref addendum v0.43 Table G3) - // [adv-id(4), config-method(2), svc-name-len(1), svc-name(n), svc-status(1), svc-info-len(2), svc-info(n)] - - // adv-id - FrameBuf_Add_le_u4(pBuf, *(pu4Byte)pAdvIdObj->Value); - - // config-method - // TODO: (v0.43) set to the config method set from upper layer - //P2PSVC_SET_ATTR_2Byte(&rtStatus, posSvcInfoDesc, maxBufLen, 1); - if(2 == *(PUCHAR)pNetworkConfigObj->Value) - {// WSC PIN method only - CLEAR_FLAG(svcConfigMethod, P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN); - } - FrameBuf_Add_be_u2(pBuf, svcConfigMethod); - - // svc-name-len - FrameBuf_Add_u1(pBuf, (u1Byte)pSvcNameObj->Length); - - // svc-name - FrameBuf_Add_Data(pBuf, pSvcNameObj->Value, (u2Byte)pSvcNameObj->Length); - - // svc-status - FrameBuf_Add_u1(pBuf, *(pu1Byte)pSvcStatusObj->Value); - - // svc-info - if(P2PSvc_MatchSubstring(pSvcInfoObj->Value, pSvcInfoObj->Length, pSvcInfoReqBuf, svcInfoReqLen)) - { - // svc-info-len - FrameBuf_Add_le_u2(pBuf, (u2Byte)pSvcInfoObj->Length); - - // svc-info - FrameBuf_Add_Data(pBuf, pSvcInfoObj->Value, (u2Byte)pSvcInfoObj->Length); - } - else - { - // svc-info-len - FrameBuf_Add_le_u2(pBuf, 0); - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) diff --git a/network/wlan/WDI/COMMON/P2PSvc_Internal.h b/network/wlan/WDI/COMMON/P2PSvc_Internal.h deleted file mode 100644 index b8e67198..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_Internal.h +++ /dev/null @@ -1,980 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2013 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// P2P Service interface for internal implementation -// - -// -// The P2PSvc code is arranged as the following (regarding to visibility): -// -// -------------------------------- -// Other part of the driver -// -------------------------------- -// P2PSvc.h -// -------------------------------- -// P2PSvc.c -// -------------------------------- -// P2PSvc_Internal.h -// -------------------------------- -// ActionInfo, Construct, Object, ParamSpec, PD, SD, SearchResult,... -// -// P2PSvcType.h is visible to all P2PSvc modules. -// - - -#ifndef __INC_P2P_SVC_INTERNAL_H -#define __INC_P2P_SVC_INTERNAL_H - -#include "P2PSvcType.h" -#include "p2p.h" -#include "P2P_Internal.h" - -#if (P2P_SUPPORT != 1) -// Note: -// P2P Services depends on P2P function. -#undef P2PSVC_SUPPORT -#endif - -#define P2PSVC_DATA_SEC -#define P2PSVC_LOCAL_FUNC_SEC -#define P2PSVC_PUBLIC_FUNC_SEC - -#define P2PSVC_LEAST_PROBE_RSP_TIME_uS 1000000 // 1000 ms -#define P2PSVC_LEAST_SD_RSP_TIME_uS 300000 // 300 ms -#define P2PSVC_TIMEOUT_WAIT_SD_RSP_uS 500000 // 1000 ms -#define P2PSVC_TIMEOUT_PD_SESSION_TIMEOUT_uS 120000000 // 120000 ms - -typedef struct _P2PSVC_INFO -{ - u4Byte curVer; - BOOLEAN bEnabled; - RT_SPIN_LOCK lock; - - // A list of P2PSVC_REQ_INFO_ENTRY each - // representing an advertised service - RT_LIST_ENTRY advSvcList; - u4Byte advSvcListCnt; - - // A list of P2PSVC_REQ_INFO_ENTRY each - // representing a seek request - RT_LIST_ENTRY seekReqList; - u4Byte seekReqListCnt; - - // A list of P2PSVC_SEARCH_RESULT_LIST_ENTRY each - // representing the search result of a device - RT_LIST_ENTRY searchResultList; - u4Byte searchResultListCnt; - - // A list of P2PSVC_PD_ENTRY each - // representing a provision discovery session - RT_LIST_ENTRY pdSessionList; - u4Byte pdSessionListCnt; - - // The SSID that will be used for starting - // P2P Group - u1Byte goSsidBuf[32]; - u1Byte goSsidLen; - - // Connection capability bitmap, bit0: new, bit1: cli, bit2: GO - u1Byte connCap; - - // The adapter this P2PSVC_INFO is attached to - PADAPTER pAdapter; -}P2PSVC_INFO, *PP2PSVC_INFO; - -#define P2PSVC_GET_INFO(__pAdapter) ((PP2PSVC_INFO)((GET_P2P_INFO((__pAdapter)))->pP2PSvcInfo)) -#define P2PSVC_ENABLED(__pP2PSvcInfo) (((PP2PSVC_INFO)(__pP2PSvcInfo))->bEnabled) - -// P2PSVC request handler prototype -typedef RT_STATUS (*P2PSvc_ReqHdlr)( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -typedef struct _P2PSVC_REQUEST_ID_MAP -{ - const u4Byte type; // Request Type - const u4Byte id; // Request ID - const u4Byte minVer; // The minimum supported version, 0 means don't care. - const u4Byte maxVer; // The maxmum supported version, 0 means don't care. - const P2PSvc_ReqHdlr reqHdlr; // Handler function for this combination of Request ID, bSet, minVer, and maxVer. -}P2PSVC_REQUEST_ID_MAP, *PP2PSVC_REQUEST_ID_MAP; - -typedef struct _P2PSVC_REQ_INFO_ENTRY -{ - RT_LIST_ENTRY List; - u4Byte P2PSvcReqId; - P2PSVC_OBJ_LIST objList; -}P2PSVC_REQ_INFO_ENTRY, *PP2PSVC_REQ_INFO_ENTRY; - -#define P2PSVC_REQ_INFO_LIST_LEN(__pReqInfo) \ - (FIELD_OFFSET(P2PSVC_REQ_INFO_ENTRY, objList) + P2PSVC_OBJ_LIST_LEN(&((__pReqInfo)->objList))) - -#define P2PSVC_MAX_ACTION_PARAM_ID P2PSVC_MAX_OBJ_LIST_ENTRIES - 1 // minus 1 for sentinel -typedef struct _P2PSVC_ACTION_SPEC_ENTRY -{ - u4Byte actId; - u4Byte paramList[P2PSVC_MAX_OBJ_LIST_ENTRIES]; // reserve 1 for sentinel -}P2PSVC_ACTION_SPEC_ENTRY, *PP2PSVC_ACTION_SPEC_ENTRY; - -typedef struct _P2PSVC_PARAM_SPEC_ENTRY -{ - u4Byte paramId; - u4Byte minLen; - u4Byte maxLen; -}P2PSVC_PARAM_SPEC_ENTRY, *PP2PSVC_PARAM_SPEC_ENTRY; - -typedef struct _P2PSVC_SR_LIST_ENTRY -{ - RT_LIST_ENTRY List; - u8Byte probeRspRxTime; - u8Byte sdReqTxTime; - u8Byte sdRspRxTime; - BOOLEAN bDirty; - P2PSVC_OBJ_LIST srObjList; -}P2PSVC_SR_LIST_ENTRY, *PP2PSVC_SR_LIST_ENTRY; - -#define P2PSVC_SR_LIST_LEN(__srEntry) \ - (FIELD_OFFSET(P2PSVC_SR_LIST_ENTRY, srObjList) + P2PSVC_OBJ_LIST_VAR_LEN(&((__srEntry)->srObjList))) - -typedef struct _P2PSVC_GROUP_INFO -{ - u1Byte grpDevAddr[6]; - u1Byte grpIntfAddr[6]; - u1Byte ssidLen; - u1Byte ssidBuf[32]; - u1Byte opChnl; -}P2PSVC_GROUP_INFO, *PP2PSVC_GROUP_INFO; - -typedef struct _P2PSVC_PD_CONN_TOPOLOGY -{ - BOOLEAN bInitor; - BOOLEAN bDeferred; - BOOLEAN bPersistent; - u4Byte connAction; - P2PSVC_GROUP_INFO grpInfo; -}P2PSVC_PD_CONN_TOPOLOGY, *PP2PSVC_PD_CONN_TOPOLOGY; - -typedef struct _P2PSVC_PD_ENTRY -{ - RT_LIST_ENTRY List; - - BOOLEAN bInitor; - BOOLEAN bDeferred; - u8Byte createTime; - - // - // If bDone, we have status from the last PD rsp, - // and if the status is success, we have the topology, - // which records how we are going to connect with the - // peer dev. - // - BOOLEAN bDone; - P2P_STATUS_CODE status; - u1Byte connCap; // the resulting connCap - P2PSVC_PD_CONN_TOPOLOGY connTopology; - - u4Byte sessionId; - u1Byte peerDevAddr[6]; - u4Byte advId; - - // If initor, the conn cap sent in the PD req - // If rspdor, the conn cap in the recvd PD req - u1Byte pdReqConnCap; - - // The connCap from P2PSvcInfo. - // Filled when session is created. - u1Byte selfConnCap; - - P2PSVC_GROUP_INFO selfGrpInfo; - -}P2PSVC_PD_ENTRY, *PP2PSVC_PD_ENTRY; - -typedef struct _P2PSVC_INITOR_PD_ENTRY -{ - // Common info shared by all PD sessions - P2PSVC_PD_ENTRY super; - - // PD req info - u2Byte pdReqConfigMethod; - - // PD rsp info - u8Byte pdRspRxTime; // time the initor recvs the PD rsp - P2P_STATUS_CODE pdRspStatus; // the status in PD rsp - u1Byte pdRspConnCap; // conn cap in recvd PD rsp - - // FOPD info, valid if bDeferred is true - u8Byte fopdReqRxTime; // time the initor recvs the FOPD req - P2P_STATUS_CODE fopdReqStatus; // the status in FOPD req, shall be either accept or reject - u1Byte fopdReqConnCap; // conn cap in recvd FOPD req, valid only when FOPD req status is success - - P2P_STATUS_CODE fopdRspStatus; // the status to be sent in FOPD rsp - u1Byte fopdRspConnCap; // the conn cap to be sent in FOPD rsp, valid only when FOPD rsp status is success - - P2PSVC_REASON rxBadPDRspReason; - P2PSVC_REASON rxBadFOPDReqReason; - - // If initor, this member contains the obj list from the upper layer (P2PSvc_AddPDInitorData) - P2PSVC_OBJ_LIST objList; -}P2PSVC_INITOR_PD_ENTRY, *PP2PSVC_INITOR_PD_ENTRY; - -typedef struct _P2PSVC_RSPDOR_PD_ENTRY -{ - // Common info shared by all PD sessions - P2PSVC_PD_ENTRY super; - - // PD req info - u2Byte configMethod; // config method from PD req - u8Byte pdReqRxTime; // time the rspdor recvs the PD req - - // PD rsp info - P2P_STATUS_CODE pdRspStatus; // the status to be sent in PD rsp - u1Byte pdRspConnCap; // the conn cap to be sent in PD rsp, valid only when PD rsp is success - - // FOPD info, valid if bDeferred is true - u8Byte fopdRspRxTime; // time the rspdor recvs the FOPD rsp - - P2P_STATUS_CODE fopdReqStatus; - - // the status to be sent in FOPD req - u1Byte fopdReqConnCap; // the conn cap to be sent in FOPD req, valid only whe FOPD req status is success - - P2P_STATUS_CODE fopdRspStatus; // the status in recvd FOPD rsp - u1Byte fopdRspConnCap; // the conn cap in recvd FOPD rsp, valid only when FOPD rsp status is success - - P2PSVC_REASON rxBadPDReqReason; - P2PSVC_REASON rxBadFOPDRspReason; - - // If rspdor, this member contains the info parsed from thd requested svc (P2PSvc_AddPDRspdorData) - P2PSVC_OBJ_LIST objList; -}P2PSVC_RSPDOR_PD_ENTRY, *PP2PSVC_RSPDOR_PD_ENTRY; - -typedef struct _P2PSVC_CONN_CAP_MAP_ENTRY -{ - u1Byte reqConnCap; - u1Byte selfConnCap; - u1Byte rspConnCap; - pu1Byte pDesc; -}P2PSVC_CONN_CAP_MAP_ENTRY, *PP2PSVC_CONN_CAP_MAP_ENTRY; - -//----------------------------------------------------------------------------- -// P2PSvc.c -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// P2PSvc_Utility.c -//----------------------------------------------------------------------------- - -#define P2PSVC_FUNC_IN(__level) RT_TRACE(COMP_P2P, (__level), ("===> %s\n", __FUNCTION__)) -#define P2PSVC_FUNC_OUT(__level, __rtStatus) RT_TRACE(COMP_P2P, (__level), ("<=== %s(0x%08x)\n", __FUNCTION__, (__rtStatus))) -#define P2PSVC_CHECK_NULL(__ptr) RT_ASSERT((__ptr), ("%s(): %s is NULL!!!\n", __FUNCTION__, #__ptr)); - -extern u4Byte gP2PSvcMemAllocCount; -extern u4Byte gP2PSvcMemFreeCount; - -RT_STATUS -P2PSvc_AllocMem( - IN PVOID Adapter, - OUT PVOID *ppPtr, - IN u4Byte len - ); - -VOID -P2PSvc_FreeMem( - IN PVOID pPtr, - IN u4Byte len - ); - -RT_STATUS -P2PSvc_GetAdvSvcByAdvId( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte advId, - OUT PP2PSVC_REQ_INFO_ENTRY *ppAdvSvcEntry - ); - -BOOLEAN -P2PSvc_GetP2PAttr( - IN POCTET_STRING posP2PAttrs, - IN u1Byte attrId, - IN u4Byte minLen, - OUT POCTET_STRING posAttr - ); - -RT_STATUS -P2PSvc_Indicate( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte bufLen, - IN PVOID pvBuf - ); - -RT_STATUS -P2PSvc_IndicateFrameSent( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte id, - IN pu1Byte peerMac, - IN u2Byte attrLen, - IN pu1Byte pAttrs - ); - -RT_STATUS -P2PSvc_Notify( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte id - ); - -BOOLEAN -P2PSvc_SeekReqIsBcst( - IN PP2PSVC_OBJ_LIST pObjList - ); - -BOOLEAN -P2PSvc_MatchSubstring( - IN pu1Byte targetBuf, - IN u4Byte targetBufLen, - IN pu1Byte patternBuf, - IN u4Byte patternBufLen - ); - -RT_STATUS -P2PSvc_GetDevNameFromDevInfoAttr( - IN POCTET_STRING posP2PAttrs, - OUT POCTET_STRING posDevName - ); - -//----------------------------------------------------------------------------- -// P2PSvc_Object.c -//----------------------------------------------------------------------------- - -u4Byte -P2PSvc_MakeObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte id, - IN u4Byte bufLEn, - IN PVOID pBuf - ); - -u4Byte -P2PSvc_MakeSvcDescObjList( - IN PP2PSVC_OBJ_LIST pObjList, - OUT PP2PSVC_OBJ_LIST *ppSvcDescObjList - ); - -u4Byte -P2PSvc_MakeTimeObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte paramId, - IN u8Byte time - ); - -u4Byte -P2PSvc_MakeSearchIdObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry, - OUT pu1Byte pSearchId - ); - -u4Byte -P2PSvc_MakeDevAddrObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN pu1Byte pDevAddr - ); - -u4Byte -P2PSvc_MakeDevNameObj_FromP2PAttrs( - IN PP2PSVC_OBJ_LIST pObjList, - IN POCTET_STRING posP2PAttrs - ); - -u4Byte -P2PSvc_MakeDevNameObj_FromDevNameOctet( - IN PP2PSVC_OBJ_LIST pObjList, - IN OCTET_STRING osDevName - ); - -u4Byte -P2PSvc_MakeAdvIdObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte advId - ); - -u4Byte -P2PSvc_MakeSessionIdObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte sessionId - ); - -u4Byte -P2PSvc_MakeSvcNameObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte svcNameBufLen, - IN pu1Byte pSvcNameBuf - ); - -u4Byte -P2PSvc_MakeSvcInfoObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u2Byte svcInfoBufLen, - IN pu1Byte pSvcInfoBuf - ); - -u4Byte -P2PSvc_MakeAutoAcceptObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bAutoAccept - ); - -u4Byte -P2PSvc_MakeSvcStatusObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte svcStatus - ); - -u4Byte -P2PSvc_MakeUserAcceptedObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bUserAccepted - ); - -u4Byte -P2PSvc_MakeSvcCountObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte svcCount - ); - -u4Byte -P2PSvc_MakeP2PStatusObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN P2P_STATUS_CODE P2PStatus - ); - -u4Byte -P2PSvc_MakeSsidObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte ssidLen, - IN pu1Byte ssidBuf - ); - -u4Byte -P2PSvc_MakeIntfAddrObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN pu1Byte intfAddr - ); - -u4Byte -P2PSvc_MakeOpChannelObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte opChannel - ); - -u4Byte -P2PSvc_MakeConfigMethodObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u2Byte configMethod - ); - -u4Byte -P2PSvc_MakeP2PAttrsObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u2Byte attrLen, - IN pu1Byte pAttrs - ); - -u4Byte -P2PSvc_MakeDeferredObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bDeferred - ); - -u4Byte -P2PSvc_MakeIsSDDoneObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bSDDone - ); - - -u4Byte -P2PSvc_MakeIsPersistentObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bPersistent - ); - -u4Byte -P2PSvc_MakeConnActionObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte connAction - ); - -u4Byte -P2PSvc_MakeReasonObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN P2PSVC_REASON reason - ); - -u4Byte -P2PSvc_MakeSessionInfoDataInfoObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN OCTET_STRING osSessionInfoDataInfo - ); - -u4Byte -P2PSvc_MakeGrpDevAddrObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN pu1Byte pGrpDevAddr - ); - -//----------------------------------------------------------------------------- -// P2PSvc_Construct.c -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_MakeAdvSvcInfo( - IN PP2PSVC_INFO pP2PSvcInfo, - IN POCTET_STRING posSvcNameHash, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakeSvcNameHash( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakeInitorPDReqIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakeRspdorFOPDReqIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakeInitorFOPDRspIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakeRspdorPDRspIE( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs, - OUT FRAME_BUF *pBuf - ); - -RT_STATUS -P2PSvc_MakeSvcInfoDesc( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_REQ_INFO_ENTRY pAdvInfoEntry, - IN u1Byte svcInfoReqLen, - IN pu1Byte pSvcInfoReqBuf, - OUT FRAME_BUF *pBuf - ); - -//----------------------------------------------------------------------------- -// P2PSvc_ParamSpec.c -//----------------------------------------------------------------------------- - -PP2PSVC_PARAM_SPEC_ENTRY -P2PSvc_GetParamSpec( - IN u4Byte actId - ); - -RT_STATUS -P2PSvc_ValidateReqInfo( - IN PVOID infoBuf, - IN u4Byte inBufLen, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_ValidateActionParam( - IN u4Byte id, - IN PP2PSVC_OBJ_LIST pObjList - ); - -RT_STATUS -P2PSvc_ValidateParamContent( - IN PP2PSVC_OBJ_LIST pObjList - ); - -PRT_OBJECT_HEADER -P2PSvc_GetParam( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte paramId, - IN u4Byte fromIdx - ); - -RT_STATUS -P2PSvc_UpdateParam( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte paramId, - IN u4Byte fromIdx, - IN u4Byte bufLen, - IN PVOID pBuf - ); - -//----------------------------------------------------------------------------- -// P2PSvc_PD.c -//----------------------------------------------------------------------------- - -VOID -P2PSvc_DeterminePDSessionGOSsid( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT pu1Byte ssidBuf, - OUT pu1Byte pSsidLen - ); - -PP2PSVC_OBJ_LIST -P2PSvc_Get_PDEntryObjList( - IN PP2PSVC_PD_ENTRY pPDEntry - ); - -VOID -P2PSvc_Free_PDSessionListEntry( - IN PP2PSVC_PD_ENTRY pPDEntry, - IN pu4Byte pListCnt - ); - -VOID -P2PSvc_Free_PDSessionList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt - ); - - -BOOLEAN -P2PSvc_PDSessionInProgress( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT PP2PSVC_PD_ENTRY *ppPDEntry - ); - -RT_STATUS -P2PSvc_AddPDInitorData( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen - ); - -RT_STATUS -P2PSvc_AddPDRspdorData( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte configMethod, - IN POCTET_STRING posP2PAttrs - ); - -RT_STATUS -P2PSvc_RspdorSetFOPDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN BOOLEAN bAccepted - ); - -RT_STATUS -P2PSvc_InitorOnPDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u2Byte reqConfigMethod, - IN u2Byte rspConfigMethod, - IN POCTET_STRING posP2PAttrs - ); - -RT_STATUS -P2PSvc_InitorOnFOPDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte configMethod, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ); - -RT_STATUS -P2PSvc_RspdorOnFOPDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u2Byte reqConfigMethod, - IN u2Byte rspConfigMethod, - IN POCTET_STRING posP2PAttrs - ); - -RT_STATUS -P2PSvc_InitorOnSendPDReqFailure( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u1Byte p2pStatus - ); - -RT_STATUS -P2PSvc_RspdorOnSendFOPDReqFailure( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u1Byte p2pStatus - ); - -BOOLEAN -P2PSvc_IsLegacyPD( - IN POCTET_STRING posP2PAttrs - ); - -VOID -P2PSvc_PDSessionSucceeded( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry - ); - -VOID -P2PSvc_PDSessionFailed( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry - ); - -VOID -P2PSvc_PDSessionAgeFunc( - IN PP2PSVC_INFO pP2PSvcInfo - ); - -//----------------------------------------------------------------------------- -// P2PSvc_SD.c -//----------------------------------------------------------------------------- - -RT_STATUS -P2PSvc_ParseAnqpQueryReq( - IN PP2P_SERVICE_REQ_TLV pAnqpQueryReq, - OUT pu1Byte pSvcNameLen, - OUT pu1Byte *ppSvcNameBuf, - OUT pu1Byte pSvcInfoReqLen, - OUT pu1Byte *ppSvcInfoReqBuf - ); - -RT_STATUS -P2PSvc_ParseAnqpQueryRsp( - IN PP2P_SERVICE_RSP_TLV pAnqpQueryRsp, - IN u1Byte index, - OUT pu1Byte pSvcNameLen, - OUT pu1Byte *ppSvcNameBuf, - OUT pu4Byte pAdvId, - OUT pu1Byte pSvcStatus, - OUT pu2Byte pSvcInfoLen, - OUT pu1Byte *ppSvcInfoBuf - ); - -RT_STATUS -P2PSvc_SDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry, - IN PRT_OBJECT_HEADER pSvcInfoReqObj, - IN u1Byte searchId - ); - -RT_STATUS -P2PSvc_SDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte dlgToken, - IN u1Byte transactionId, - IN u1Byte nSvcInfoDesc, - IN FRAME_BUF *pSvcInfoDescBuf - ); - -BOOLEAN -P2PSvc_SDMatchSvcName( - IN PP2PSVC_REQ_INFO_ENTRY pAdvInfoEntry, - IN u1Byte svcNameLen, - IN pu1Byte svcNameBuf - ); - -BOOLEAN -P2PSvc_ToProcessSDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr - ); - -//----------------------------------------------------------------------------- -// P2PSvc_SearchResult.c -//----------------------------------------------------------------------------- - -VOID -P2PSvc_Free_SearchResultObjList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt - ); - -BOOLEAN -P2PSvc_ToProcessProbeRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr - ); - -RT_STATUS -P2PSvc_GetSearchResult( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntry - ); - -BOOLEAN -P2PSvc_SeekReqNeedSD( - IN PP2PSVC_OBJ_LIST pSeekObjList, - IN PP2PSVC_SR_LIST_ENTRY pSREntryInList, - OUT PRT_OBJECT_HEADER *ppSvcInfoReqObj - ); - -RT_STATUS -P2PSvc_UpdateSearchResult( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr, - IN PP2PSVC_SR_LIST_ENTRY pSREntryToUpdate, - OUT PBOOLEAN pbDuplicatedEntry, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntryOut - ); - -RT_STATUS -P2PSvc_MakeSearchResultDataFromProbeRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry, - IN pu1Byte devAddr, - IN POCTET_STRING posP2PAttrs, - IN OCTET_STRING osAdvSvcInfo, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntryOut - ); - -RT_STATUS -P2PSvc_MakeSearchResultDataFromSDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr, - IN PP2P_SERVICE_RSP_TLV pSvcRspTlv, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntryOut - ); - -//----------------------------------------------------------------------------- -// P2PSvc_ActionInfo.c -//----------------------------------------------------------------------------- -BOOLEAN -P2PSvc_Free_AdvSvcList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt, - IN u4Byte advId - ); - -BOOLEAN -P2PSvc_Free_SeekReqList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt, - IN u1Byte seekId - ); - -RT_STATUS -P2PSvc_Set_AdvSvc( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_CancelAdvSvc( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_SvcStatus( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_Seek( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_CancelSeek( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_ConnCap( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_PDReq( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -P2PSvc_Set_RspdorFOPDReq( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -#endif // #ifndef __INC_P2P_SVC_INTERNAL_H diff --git a/network/wlan/WDI/COMMON/P2PSvc_Object.c b/network/wlan/WDI/COMMON/P2PSvc_Object.c deleted file mode 100644 index cfa5dafd..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_Object.c +++ /dev/null @@ -1,691 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -u4Byte -p2psvc_AttachObjToObjList( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte type, - IN u4Byte id, - IN u4Byte ver, - IN u4Byte len, - IN PVOID buf - ) -{ - // Assume that - // * the obj list is valid - // * the object to attach is valid - // - - ULONG bytesWritten = 0; - PRT_OBJECT_HEADER pObjToFill = NULL; - - if(0 == pObjList->nObjs) - { - pObjList->ObjTab[0] = 0; - pObjToFill = (PRT_OBJECT_HEADER)(pObjList->varStart + pObjList->ObjTab[0]); - } - else - { - PRT_OBJECT_HEADER pPrevObj = (PRT_OBJECT_HEADER)(pObjList->varStart + pObjList->ObjTab[pObjList->nObjs - 1]); - u4Byte prevObjLen = RT_OBJECT_HEADER_SIZE + pPrevObj->Length; - - pObjList->ObjTab[pObjList->nObjs] = pObjList->ObjTab[pObjList->nObjs - 1] + prevObjLen; - pObjToFill = (PRT_OBJECT_HEADER)(pObjList->varStart + pObjList->ObjTab[pObjList->nObjs]); - } - - // Fill the obj - RT_ASSIGN_OBJECT_HEADER(pObjToFill, - type, - id, - ver, - len); - - if(0 < len) - { - PlatformMoveMemory(pObjToFill->Value, buf, len); - } - - bytesWritten = RT_OBJECT_HEADER_SIZE + len; - - // Update obj list header - pObjList->nObjs++; - pObjList->hdr.Length += bytesWritten; - - return bytesWritten; -} - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -u4Byte -P2PSvc_MakeObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte id, - IN u4Byte bufLEn, - IN PVOID pBuf - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - id, - P2PSVC_MIN_SUPPORT_VER, - bufLEn, - pBuf); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSvcDescObjList( - IN PP2PSVC_OBJ_LIST pObjList, - OUT PP2PSVC_OBJ_LIST *ppSvcDescObjList - ) -{ - u4Byte bytesWritten = 0; - P2PSVC_OBJ_LIST objList; - - do - { - PlatformZeroMemory(&objList, sizeof(objList)); - P2PSVC_OBJ_LIST_INIT(&objList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST, - P2PSVC_MIN_SUPPORT_VER); - - // p2psvc_AttachObjToObjList will make obj hdr for us, - // so we copy from the fild right after the obj hdr. - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST, - P2PSVC_MIN_SUPPORT_VER, - FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart) - FIELD_OFFSET(RT_OBJECT_HEADER, Value), - (pu1Byte)(&objList) + FIELD_OFFSET(RT_OBJECT_HEADER, Value)); - - if(ppSvcDescObjList) - { - *ppSvcDescObjList = (PP2PSVC_OBJ_LIST)(pObjList->varStart + pObjList->ObjTab[pObjList->nObjs - 1]); - } - }while(FALSE); - - return bytesWritten; -} - -// -// Description: -// Currently not used -// -u4Byte -P2PSvc_MakeTimeObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte paramId, - IN u8Byte time - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - paramId, - P2PSVC_MIN_SUPPORT_VER, - sizeof(time), - &time); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSearchIdObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry, - OUT pu1Byte pSearchId - ) -{ - u4Byte bytesWritten = 0; - - do - { - PRT_OBJECT_HEADER pSearchIdObj = NULL; - - if(NULL == (pSearchIdObj = P2PSvc_GetParam(&pSeekInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0))) - { - break; - } - - if(1 != pSearchIdObj->Length) - { - break; - } - - if(pSearchId) *pSearchId = *((pu1Byte)pSearchIdObj->Value); - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, - P2PSVC_MIN_SUPPORT_VER, - pSearchIdObj->Length, - pSearchIdObj->Value); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeDevAddrObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN pu1Byte pDevAddr - ) -{ - u4Byte bytesWritten = 0; - u1Byte bcstAddr[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, - P2PSVC_MIN_SUPPORT_VER, - 6, - (NULL == pDevAddr) ? (bcstAddr) : (pDevAddr)); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeDevNameObj_FromP2PAttrs( - IN PP2PSVC_OBJ_LIST pObjList, - IN POCTET_STRING posP2PAttrs - ) -{ - u4Byte bytesWritten = 0; - OCTET_STRING osDevName = {NULL, 0}; - - do - { - if(RT_STATUS_SUCCESS != P2PSvc_GetDevNameFromDevInfoAttr(posP2PAttrs, &osDevName)) - { - break; - } - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME, - P2PSVC_MIN_SUPPORT_VER, - osDevName.Length, - osDevName.Octet); - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2PSvc_MakeDevNameObj_FromP2PAttrs():\n", osDevName.Octet, osDevName.Length); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeDevNameObj_FromDevNameOctet( - IN PP2PSVC_OBJ_LIST pObjList, - IN OCTET_STRING osDevName - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME, - P2PSVC_MIN_SUPPORT_VER, - osDevName.Length, - osDevName.Octet); - }while(FALSE); - - return bytesWritten; -} - - -u4Byte -P2PSvc_MakeAdvIdObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte advId - ) -{ - u4Byte bytesWritten = 0; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, - P2PSVC_MIN_SUPPORT_VER, - sizeof(advId), - &advId); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSessionIdObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte sessionId - ) -{ - u4Byte bytesWritten = 0; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID, - P2PSVC_MIN_SUPPORT_VER, - sizeof(sessionId), - &sessionId); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSvcNameObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte svcNameBufLen, - IN pu1Byte pSvcNameBuf - ) -{ - u4Byte bytesWritten = 0; - - do - { - // The svc-name shall be encoded in UTF-8 and - // it is upper's responsibility to translate - // it to other format (e.g., UTF-16). - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, - P2PSVC_MIN_SUPPORT_VER, - svcNameBufLen, - pSvcNameBuf); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSvcInfoObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u2Byte svcInfoBufLen, - IN pu1Byte pSvcInfoBuf - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO, - P2PSVC_MIN_SUPPORT_VER, - svcInfoBufLen, - pSvcInfoBuf); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeAutoAcceptObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bAutoAccept - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_AUTO_ACCEPT, - P2PSVC_MIN_SUPPORT_VER, - sizeof(bAutoAccept), - &bAutoAccept); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSvcStatusObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte svcStatus - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, - P2PSVC_MIN_SUPPORT_VER, - 1, - &svcStatus); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeUserAcceptedObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bUserAccepted - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED, - P2PSVC_MIN_SUPPORT_VER, - sizeof(bUserAccepted), - &bUserAccepted); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSvcCountObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte svcCount - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SVC_COUNT, - P2PSVC_MIN_SUPPORT_VER, - sizeof(svcCount), - &svcCount); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeP2PStatusObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN P2P_STATUS_CODE P2PStatus - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_P2P_STATUS, - P2PSVC_MIN_SUPPORT_VER, - sizeof(P2PStatus), - &P2PStatus); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSsidObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte ssidLen, - IN pu1Byte ssidBuf - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SSID, - P2PSVC_MIN_SUPPORT_VER, - ssidLen, - ssidBuf); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeIntfAddrObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN pu1Byte intfAddr - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_INTF_ADDR, - P2PSVC_MIN_SUPPORT_VER, - 6, - intfAddr); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeOpChannelObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u1Byte opChannel - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_OP_CHNL, - P2PSVC_MIN_SUPPORT_VER, - sizeof(opChannel), - &opChannel); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeConfigMethodObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u2Byte configMethod - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_CONFIG_METHOD, - P2PSVC_MIN_SUPPORT_VER, - sizeof(configMethod), - &configMethod); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeP2PAttrsObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u2Byte attrLen, - IN pu1Byte pAttrs - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_P2P_ATTRIBUTES, - P2PSVC_MIN_SUPPORT_VER, - attrLen, - pAttrs); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeDeferredObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bDeferred - ) -{ - u4Byte bytesWritten = 0; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_DEFERRED, - P2PSVC_MIN_SUPPORT_VER, - sizeof(bDeferred), - &bDeferred); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeIsSDDoneObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bSDDone - ) -{ - u4Byte bytesWritten = 0; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_IS_SD_DONE, - P2PSVC_MIN_SUPPORT_VER, - sizeof(bSDDone), - &bSDDone); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeIsPersistentObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN BOOLEAN bPersistent - ) -{ - u4Byte bytesWritten = 0; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_IS_PERSISTENT, - P2PSVC_MIN_SUPPORT_VER, - sizeof(bPersistent), - &bPersistent); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeConnActionObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte connAction - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_CONN_ACTION, - P2PSVC_MIN_SUPPORT_VER, - sizeof(connAction), - &connAction); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeReasonObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN P2PSVC_REASON reason - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_REASON, - P2PSVC_MIN_SUPPORT_VER, - sizeof(reason), - &reason); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeSessionInfoDataInfoObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN OCTET_STRING osSessionInfoDataInfo - ) -{ - u4Byte bytesWritten = 0; - - do - { - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_SESSION_INFO, - P2PSVC_MIN_SUPPORT_VER, - osSessionInfoDataInfo.Length, - osSessionInfoDataInfo.Octet); - }while(FALSE); - - return bytesWritten; -} - -u4Byte -P2PSvc_MakeGrpDevAddrObj( - IN PP2PSVC_OBJ_LIST pObjList, - IN pu1Byte pGrpDevAddr - ) -{ - u4Byte bytesWritten = 0; - - bytesWritten = p2psvc_AttachObjToObjList(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_DATA_GRP_DEV_ADDR, - P2PSVC_MIN_SUPPORT_VER, - 6, - pGrpDevAddr); - - return bytesWritten; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/P2PSvc_PD.c b/network/wlan/WDI/COMMON/P2PSvc_PD.c deleted file mode 100644 index c47d9fe0..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_PD.c +++ /dev/null @@ -1,2821 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -static P2PSVC_CONN_CAP_MAP_ENTRY P2PSvcConnCapMap[] = -{ - // requesting NEW - { - P2PSVC_CONN_CAP_BMP_NEW, - P2PSVC_CONN_CAP_BMP_NEW, - P2PSVC_CONN_CAP_BMP_NEW, - "GO nego resulting in a new group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW, - P2PSVC_CONN_CAP_BMP_CLI, - P2PSVC_CONN_CAP_BMP_CLI, - "Join initor's group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW, - P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW, // initor can be either GO or Cli - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, // initor shall join the existing group - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW, // initor can be either GO or Cli - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup and can also join a group - P2PSVC_CONN_CAP_BMP_GO, // initor shall join the existing group - "Peer shall join our existing group" - }, - - // requesting CLI - { - P2PSVC_CONN_CAP_BMP_CLI, - P2PSVC_CONN_CAP_BMP_NEW, - P2PSVC_CONN_CAP_BMP_GO, // to start auto GO - "To start auto GO" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI, - P2PSVC_CONN_CAP_BMP_CLI, - P2PSVC_CONN_CAP_BMP_NONE, // X - "ERROR:Do not support Cli/Cli" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI, - P2PSVC_CONN_CAP_BMP_GO, // we have existing group - P2PSVC_CONN_CAP_BMP_GO, // initor shall join the existing group - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI, // initor can be either GO or Cli - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, // initor shall join the existing group - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI, // initor can be either GO or Cli - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup and can join a group - P2PSVC_CONN_CAP_BMP_GO, // initor shall join the existing group - "Peer shall join our existing group" - }, - - // requesting GO - { - P2PSVC_CONN_CAP_BMP_GO, // initor can be only GO - P2PSVC_CONN_CAP_BMP_NEW, // we can be either GO or Cli - P2PSVC_CONN_CAP_BMP_CLI, // join initor's group - "Join peer's existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_CLI, // we can be only Cli - P2PSVC_CONN_CAP_BMP_CLI, // join initor's group - "Join peer's existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_NONE, // X - "ERROR: Do not support GO/GO" - }, - - { - P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, // we can be GO or a cli - P2PSVC_CONN_CAP_BMP_CLI, // join initor's group - "Join peer's existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup and can also join a group - P2PSVC_CONN_CAP_BMP_CLI, // initor shall join the existing group - "Join peer's existing group" - }, - - // requesting (NEW, GO) - { - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_NEW, // we can be either GO or Cli after negotiation - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our auto GO" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_CLI, // we can be only Cli - P2PSVC_CONN_CAP_BMP_CLI, // join initor's group - "Join peer's existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - // requesting (CLI, GO) - { - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_NEW, // we can be either GO or Cli after negotiation - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_CLI, // we can be only Cli - P2PSVC_CONN_CAP_BMP_CLI, // join initor's group - "Join peer's existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - { - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, - P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO, // we have existing grpup - P2PSVC_CONN_CAP_BMP_GO, - "Peer shall join our existing group" - }, - - //-------------------------------------------------------------------------- - { - P2PSVC_CONN_CAP_BMP_NONE, - P2PSVC_CONN_CAP_BMP_NONE, - P2PSVC_CONN_CAP_BMP_NONE, - "ERROR: configuration not supported" - } -}; - - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -P2P_STATUS_CODE -p2psvc_GetP2PStatusFromAttrs( - IN POCTET_STRING posP2PAttrs - ) -{ - OCTET_STRING osStatus = {NULL, 0}; - P2P_STATUS_CODE p2pStatus = P2P_STATUS_MAX; - - do - { - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_STATUS, 1, &osStatus)) - { - break; - } - - if(osStatus.Octet != NULL) - p2pStatus = (P2P_STATUS_CODE)(*(pu1Byte)osStatus.Octet); - } - while(FALSE); - - return p2pStatus; -} - -u1Byte -p2psvc_GetConnCapFromAttrs( - IN POCTET_STRING posP2PAttrs - ) -{ - OCTET_STRING osConnCap = {NULL, 0}; - u1Byte connCap = 0; - - do - { - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_CONN_CAP_INFO, 1, &osConnCap)) - { - break; - } - - if(osConnCap.Octet != NULL) - connCap = *(pu1Byte)osConnCap.Octet; - }while(FALSE); - - return connCap; -} - -VOID -p2psvc_FillGroupInfo( - IN pu1Byte grpDevAddr, - IN pu1Byte grpIntfAddr, - IN u1Byte ssidLen, - IN pu1Byte ssidBuf, - IN u1Byte opChnl, - OUT PP2PSVC_GROUP_INFO pGrpInfo - ) -{ - PlatformMoveMemory(pGrpInfo->grpDevAddr, grpDevAddr, 6); - PlatformMoveMemory(pGrpInfo->grpIntfAddr, grpIntfAddr, 6); - pGrpInfo->ssidLen = ssidLen; - PlatformMoveMemory(pGrpInfo->ssidBuf, ssidBuf, ssidLen); - pGrpInfo->opChnl = opChnl; - - return; -} - -RT_STATUS -p2psvc_GetGroupInfoFromP2PAttrs( - IN POCTET_STRING posP2PAttrs, - OUT PP2PSVC_REASON pBadReason, - OUT PP2PSVC_GROUP_INFO pGrpInfo - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_ASSERT(pBadReason, ("%s(): pBadReason is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(pGrpInfo, ("%s(): pGrpInfo is NULL!!!\n", __FUNCTION__)); - - *pBadReason = P2PSVC_REASON_NONE; - - do - { - OCTET_STRING osGrpId = {NULL, 0}; - OCTET_STRING osIntfAddr = {NULL, 0}; - OCTET_STRING osOpChnl = {NULL, 0}; - - // group id, [grpDevAddr(6), grpSsid(n)] - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_GROUP_ID, 6 + 1, &osGrpId)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no P2P GroupID attr (ID: %u) in PD req/rsp\n", - P2P_ATTR_GROUP_ID)); - *pBadReason = P2PSVC_REASON_MISS_ATTR_GRP_ID; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // intended intf addr - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_INTENDED_INTERFACE_ADDRESS, 6, &osIntfAddr)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no P2P IntfAddr attr (ID: %u) in PD req/rsp\n", - P2P_ATTR_INTENDED_INTERFACE_ADDRESS)); - *pBadReason = P2PSVC_REASON_MISS_ATTR_INTF_ADDR; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // op channel, [countryStr(3), regClass(1), chnl(1)] - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_OP_CHANNEL, 3 + 1 + 1, &osOpChnl)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] no P2P OpChannel attr (ID: %u) in PD req/rsp\n", - P2P_ATTR_OP_CHANNEL)); - *pBadReason = P2PSVC_REASON_MISS_ATTR_OP_CHNL; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // copy info - if (osOpChnl.Octet != NULL) - { - p2psvc_FillGroupInfo(osGrpId.Octet + 0, // grpDevAddr - osIntfAddr.Octet, // grpIntfAddr - osGrpId.Length - 6, // ssidLen - osGrpId.Octet + 6, // ssidBuf - *((pu1Byte)(osOpChnl.Octet + 3 + 1)), // opChnl - pGrpInfo); - } - - }while(FALSE); - - return rtStatus; -} - -VOID -p2psvc_Init_PDSessionInfo( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN BOOLEAN bInitor, - IN u4Byte sessionId, - IN pu1Byte peerDevAddr, - IN u4Byte advId, - IN u1Byte pdReqConnCap, - IN u1Byte selfConnCap - ) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - - PlatformZeroMemory(pPDEntry, sizeof(P2PSVC_PD_ENTRY)); - - RTInitializeListHead(&pPDEntry->List); - - pPDEntry->bInitor = bInitor; - pPDEntry->bDeferred = FALSE; - pPDEntry->createTime = PlatformGetCurrentTime(); - - pPDEntry->bDone = FALSE; - pPDEntry->status = P2P_STATUS_MAX; - - pPDEntry->sessionId = sessionId; - PlatformMoveMemory(pPDEntry->peerDevAddr, peerDevAddr, 6); - pPDEntry->advId = advId; - - pPDEntry->pdReqConnCap = pdReqConnCap; - - pPDEntry->selfConnCap = selfConnCap; - - if(TEST_FLAG(selfConnCap, P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO)) - { - UCHAR ssidBuf[32] = {0}; - UCHAR ssidLen = 0; - - P2PSvc_DeterminePDSessionGOSsid(pP2PSvcInfo, ssidBuf, &ssidLen); - - p2psvc_FillGroupInfo(pP2PInfo->DeviceAddress, - pP2PInfo->InterfaceAddress, - ssidLen, - ssidBuf, - pP2PInfo->OperatingChannel, - &pPDEntry->selfGrpInfo); - } - - return; -} - -VOID -p2psvc_Set_PDResult( - IN PP2PSVC_PD_ENTRY pPDEntry, - IN P2P_STATUS_CODE status, - IN u1Byte connCap - ) -{ - pPDEntry->bDone = TRUE; - pPDEntry->status = status; - pPDEntry->connCap = connCap; - - return; -} - -RT_STATUS -p2psvc_New_InitorPDSessionInfo( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_OBJ_LIST pObjList, - OUT PP2PSVC_INITOR_PD_ENTRY *ppInitorPDEntry - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pEntry = NULL; - - u4Byte objListLen = P2PSVC_OBJ_LIST_LEN(pObjList); - u4Byte reqBufSize = FIELD_OFFSET(P2PSVC_INITOR_PD_ENTRY, objList) + objListLen; - - *ppInitorPDEntry = NULL; - - do - { - PRT_OBJECT_HEADER pObj = NULL; - - u4Byte sessionId = 0; - pu1Byte peerDevAddr = NULL; - u4Byte advId = 0; - - //4 Get info req for init base class from obj list - // session-id - pObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID, 0); - sessionId = *(pu4Byte)pObj->Value; - - // svc-mac - pObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0); - peerDevAddr = pObj->Value; - - // adv-id - pObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - advId = *(pu4Byte)pObj->Value; - - //4 Allocate memory - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pEntry, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pInitorPDSessionEntry\n")); - break; - } - - //4 Zero memory - PlatformZeroMemory(pEntry, sizeof(P2PSVC_INITOR_PD_ENTRY)); - - //4 Init base class - p2psvc_Init_PDSessionInfo(pP2PSvcInfo, - &pEntry->super, - TRUE, - sessionId, - peerDevAddr, - advId, - pP2PSvcInfo->connCap, - pP2PSvcInfo->connCap); - - //4 Init self - pEntry->pdReqConfigMethod = 0; - pEntry->pdRspRxTime = 0; - pEntry->pdRspStatus = P2P_STATUS_MAX; - pEntry->fopdReqRxTime = 0; - pEntry->fopdReqStatus = P2P_STATUS_MAX; - pEntry->fopdReqConnCap = 0; - pEntry->fopdRspStatus = P2P_STATUS_MAX; - pEntry->fopdRspConnCap = 0; - PlatformMoveMemory(&pEntry->objList, pObjList, objListLen); - - //4 Done - *ppInitorPDEntry = pEntry; - }while(FALSE); - - return rtStatus; -} - -VOID -p2psvc_Del_InitorPDSessionEntry( - IN PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry - ) -{ - u4Byte objListLen = 0; - u4Byte totalLen = 0; - - objListLen = P2PSVC_OBJ_LIST_LEN(&pInitorPDEntry->objList); - totalLen = FIELD_OFFSET(P2PSVC_INITOR_PD_ENTRY, objList) + objListLen; - - P2PSvc_FreeMem(pInitorPDEntry, totalLen); -} - -RT_STATUS -p2psvc_New_RspdorPDSessionInfo( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte initorDevAddr, - IN PP2PSVC_REQ_INFO_ENTRY pAdvSvcInfoEntry, - IN POCTET_STRING posPDReqP2PAttrs, - IN u2Byte configMethod, - OUT PP2PSVC_REASON pBadReason, - OUT PP2PSVC_RSPDOR_PD_ENTRY *ppRspdorPDEntry - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pEntry = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - *pBadReason = P2PSVC_REASON_NONE; - *ppRspdorPDEntry = NULL; - - do - { - // Info from self adv svc - PRT_OBJECT_HEADER pSvcNameObj = NULL; - PRT_OBJECT_HEADER pAutoAcceptObj = NULL; - PRT_OBJECT_HEADER pSvcStatusObj = NULL; - PRT_OBJECT_HEADER pAdvIdObj = NULL; - - // Info from peer PD req info - OCTET_STRING osSessionId = {NULL, 0}; - OCTET_STRING osDevName = {NULL, 0}; - u1Byte pdReqConnCap = 0; - - // Obj list - u4Byte reqBufSize = 0; - - //4 Get info from SELF adv svc - pSvcNameObj = P2PSvc_GetParam(&pAdvSvcInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0); - pAutoAcceptObj = P2PSvc_GetParam(&pAdvSvcInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_AUTO_ACCEPT, 0); - pSvcStatusObj = P2PSvc_GetParam(&pAdvSvcInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, 0); - pAdvIdObj = P2PSvc_GetParam(&pAdvSvcInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - - if(NULL == pSvcNameObj - || NULL == pAutoAcceptObj - || NULL == pSvcStatusObj - || NULL == pAdvIdObj - ) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - //4 Get info form peer PD req - - // Get peer connCap - if(0 == (pdReqConnCap = p2psvc_GetConnCapFromAttrs(posPDReqP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("peer PD req contains conn cap 0\n")); - *pBadReason = P2PSVC_REASON_MISS_ATTR_CONN_CAP; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Get peer session-id and dev-addr - if(!P2PSvc_GetP2PAttr(posPDReqP2PAttrs, P2P_ATTR_SESSION_ID_INFO, 4 + 6, &osSessionId)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid sessionIDInfo attr\n")); - *pBadReason = P2PSVC_REASON_MISS_ATTR_SESSION_ID_INFO; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Get peer dev-name - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_GetDevNameFromDevInfoAttr(posPDReqP2PAttrs, &osDevName))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("failed to get peer dev name\n")); - *pBadReason = P2PSVC_REASON_MISS_ATTR_DEV_INFO; - break; - } - - //4 Eval req buf len - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_RSPDOR_PD_ENTRY, objList); - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // user accept - reqBufSize += (RT_OBJECT_HEADER_SIZE + 4); // session-id - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // peer dev addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + 4); // adv-id - reqBufSize += (RT_OBJECT_HEADER_SIZE + pSvcNameObj->Length); // svc-name - reqBufSize += (RT_OBJECT_HEADER_SIZE + osDevName.Length); // dev-name - reqBufSize += (RT_OBJECT_HEADER_SIZE + pSvcStatusObj->Length); // adv svc-status - reqBufSize += (RT_OBJECT_HEADER_SIZE + 2); // peer config method - reqBufSize += (RT_OBJECT_HEADER_SIZE + posPDReqP2PAttrs->Length); // P2P attrs in the PD req - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bDeferred - - //4 Alloc mem - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pEntry, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for PD rspdor session\n")); - break; - } - - PlatformZeroMemory(pEntry, reqBufSize); - - //4 Init base class - if (osSessionId.Octet != NULL) - { - p2psvc_Init_PDSessionInfo(pP2PSvcInfo, - &pEntry->super, - FALSE, - *(pu4Byte)osSessionId.Octet, - initorDevAddr, - *(pu4Byte)pAdvIdObj->Value, - pdReqConnCap, - pP2PSvcInfo->connCap); - } - - // Check if is deferred case - if(FALSE == *(PBOOLEAN)pAutoAcceptObj->Value) - {// autoAccept == false - pEntry->super.bDeferred = TRUE; - } - else - {// autoAccept - if(P2P_WPS_CONFIG_METHODS_KEYPAD == (WPS_CONFIG_METHODS)configMethod - || P2P_WPS_CONFIG_METHODS_PUSHBUTTON == (WPS_CONFIG_METHODS)configMethod - ) - { - pEntry->super.bDeferred = TRUE; - } - else - { - pEntry->super.bDeferred = FALSE; - } - } - - //4 Init self - pEntry->configMethod = configMethod; - pEntry->pdReqRxTime = PlatformGetCurrentTime(); - pEntry->pdRspStatus = P2P_STATUS_MAX; - pEntry->pdRspConnCap = 0; - pEntry->fopdRspRxTime = 0; - pEntry->fopdReqStatus = P2P_STATUS_MAX; - pEntry->fopdReqConnCap = 0; - pEntry->fopdRspStatus = P2P_STATUS_MAX; - pEntry->fopdRspConnCap = 0; - - P2PSVC_OBJ_LIST_INIT(&pEntry->objList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_PD_REQ, - P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeUserAcceptedObj(&pEntry->objList, FALSE); - //Prefast warning C6011: Dereferencing NULL pointer 'osSessionId.Octet'. - if(osSessionId.Octet != NULL) - P2PSvc_MakeSessionIdObj(&pEntry->objList, *(pu4Byte)osSessionId.Octet); - - P2PSvc_MakeDevAddrObj(&pEntry->objList, initorDevAddr); - P2PSvc_MakeDevNameObj_FromDevNameOctet(&pEntry->objList, osDevName); - P2PSvc_MakeAdvIdObj(&pEntry->objList, *(pu4Byte)pAdvIdObj->Value); - P2PSvc_MakeSvcNameObj(&pEntry->objList, (u1Byte)pSvcNameObj->Length, pSvcNameObj->Value); - P2PSvc_MakeSvcStatusObj(&pEntry->objList, *(pu1Byte)pSvcStatusObj->Value); - P2PSvc_MakeConfigMethodObj(&pEntry->objList, pEntry->configMethod); - P2PSvc_MakeP2PAttrsObj(&pEntry->objList, posPDReqP2PAttrs->Length, posPDReqP2PAttrs->Octet); - P2PSvc_MakeDeferredObj(&pEntry->objList, pEntry->super.bDeferred); - - *ppRspdorPDEntry = pEntry; - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -VOID -p2psvc_Del_RspdorPDSessionEntry( - IN PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry - ) -{ - u4Byte objListLen = 0; - u4Byte totalLen = 0; - - objListLen = P2PSVC_OBJ_LIST_LEN(&pRspdorPDEntry->objList); - totalLen = FIELD_OFFSET(P2PSVC_RSPDOR_PD_ENTRY, objList) + objListLen; - - P2PSvc_FreeMem(pRspdorPDEntry, totalLen); -} - -RT_STATUS -p2psvc_GetPDRequestedSvc( - IN PP2PSVC_INFO pP2PSvcInfo, - IN POCTET_STRING posP2PAttrs, - OUT PP2PSVC_REQ_INFO_ENTRY *ppInfoEntry, - OUT pu4Byte pAdvId - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - do - { - OCTET_STRING osAdvId = {NULL, 0}; - u4Byte peerReqAdvId = 0; - PP2PSVC_REQ_INFO_ENTRY pAdvSvcEntry = NULL; - - // Get peer requested adv-id - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_ADV_ID_INFO, 4 + 6, &osAdvId)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(osAdvId.Octet != NULL) - peerReqAdvId = *((pu4Byte)osAdvId.Octet); - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_GetAdvSvcByAdvId(pP2PSvcInfo, peerReqAdvId, &pAdvSvcEntry))) - { - break; - } - - if(ppInfoEntry) *ppInfoEntry = pAdvSvcEntry; - if(pAdvId) *pAdvId = peerReqAdvId; - break; - }while(FALSE); - - return rtStatus; -} - -BOOLEAN -p2psvc_GetAdvSvcAvailability( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_REQ_INFO_ENTRY pInfoEntry - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - BOOLEAN bAvailable = FALSE; - - do - { - PRT_OBJECT_HEADER pSvcStatuObj = NULL; - u1Byte advSvcStatus = 0; - - pSvcStatuObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, 0); - if(NULL == pSvcStatuObj) - { - break; - } - - advSvcStatus = *(pu1Byte)pSvcStatuObj->Value; - - if(TEST_FLAG(advSvcStatus, BIT0)) - { - bAvailable = TRUE; - } - - break; - - }while(FALSE); - - return bAvailable; -} - -BOOLEAN -p2psvc_MatchAdvId( - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - PRT_OBJECT_HEADER pSvcNameObj = NULL; - BOOLEAN bMatch = FALSE; - - do - { - OCTET_STRING osAdvId = {NULL, 0}; - - u4Byte peerAdvId = 0; - pu1Byte pSvcMac = NULL; - - // Get peer adv-id info attr: [adv-id(4), svc-mac(6)] - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_ADV_ID_INFO, 4 + 6, &osAdvId)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Drop for no/invalid adv id attr\n")); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "posP2PAttrs:\n", posP2PAttrs->Octet, posP2PAttrs->Length); - break; - } - - if (osAdvId.Octet != NULL) - { - peerAdvId = *(pu4Byte)osAdvId.Octet; - pSvcMac = (osAdvId.Octet + 4); - } - - // Get self adv-id - if(pPDEntry->advId != peerAdvId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Drop for mismatched adv id (self: %u, peer: %u)\n", pPDEntry->advId, peerAdvId)); - break; - } - - bMatch = TRUE; - - }while(FALSE); - - return bMatch; -} - -RT_STATUS -p2psvc_IndicateRxBadPD( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte pPeerDevAddr, - IN BOOLEAN bInitor, - IN BOOLEAN bReq, - IN P2PSVC_REASON reason, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - u4Byte indicId = 0; - PP2PSVC_OBJ_LIST pObjList = NULL; - - if(bInitor) - { - indicId = (bReq) - ? (P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_BAD_FOPD_REQ) // req - : (P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_BAD_PD_RSP); // rsp - } - else - { - indicId = (bReq) - ? (P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_BAD_PD_REQ) // req - : (P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_BAD_FOPD_RSP); // rsp - } - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // peer dev-addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(P2PSVC_REASON)); // PDRsp status code - reqBufSize += (RT_OBJECT_HEADER_SIZE + posP2PAttrs->Length); // P2P attrs in PD rsp - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - PlatformZeroMemory(pBuf, reqBufSize); - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - // Fill obj list - P2PSVC_OBJ_LIST_INIT(pObjList, - RT_OB_HDR_TYPE_DATA, - indicId, - P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeDevAddrObj(pObjList, pPeerDevAddr); - P2PSvc_MakeReasonObj(pObjList, reason); - P2PSvc_MakeP2PAttrsObj(pObjList, posP2PAttrs->Length, posP2PAttrs->Octet); - - P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pBuf); - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - - -RT_STATUS -p2psvc_IndicateInitorOnPDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - PP2PSVC_PD_CONN_TOPOLOGY pConnTopology = &pPDEntry->connTopology; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("super.status: %u\n", pInitorPDEntry->super.status)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pInitorPDEntry->pdRspStatus: %u\n", pInitorPDEntry->pdRspStatus)); - - do - { - PP2PSVC_OBJ_LIST pObjList = NULL; - - OCTET_STRING osDevName; - - // Get dev-name - if(RT_STATUS_SUCCESS != P2PSvc_GetDevNameFromDevInfoAttr(posP2PAttrs, &osDevName)) - { - FillOctetString(osDevName, NULL, 0); - } - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // peer dev-addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(P2P_STATUS_CODE)); // PDRsp status code - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bDeferred - reqBufSize += (RT_OBJECT_HEADER_SIZE + 2); // config method in PD req - reqBufSize += (RT_OBJECT_HEADER_SIZE + posP2PAttrs->Length); // P2P attrs in PD rsp - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // session-id - reqBufSize += (RT_OBJECT_HEADER_SIZE + osDevName.Length); // dev-name - - if(P2P_STATUS_SUCCESS == pInitorPDEntry->super.status) - { - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bPersistent - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // connAction - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpDevAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpIntfAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + pConnTopology->grpInfo.ssidLen); // SSID - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u1Byte)); // opChnl - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - PlatformZeroMemory(pBuf, reqBufSize); - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - // Fill obj list - P2PSVC_OBJ_LIST_INIT(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_PD_RSP, - P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeDevAddrObj(pObjList, pInitorPDEntry->super.peerDevAddr); - P2PSvc_MakeP2PStatusObj(pObjList, pInitorPDEntry->pdRspStatus); - P2PSvc_MakeDeferredObj(pObjList, pInitorPDEntry->super.bDeferred); - P2PSvc_MakeConfigMethodObj(pObjList, pInitorPDEntry->pdReqConfigMethod); - P2PSvc_MakeP2PAttrsObj(pObjList, posP2PAttrs->Length, posP2PAttrs->Octet); - P2PSvc_MakeSessionIdObj(pObjList, pPDEntry->sessionId); - P2PSvc_MakeDevNameObj_FromDevNameOctet(pObjList, osDevName); - - if(P2P_STATUS_SUCCESS == pInitorPDEntry->super.status) - { - P2PSvc_MakeIsPersistentObj(pObjList, pConnTopology->bPersistent); - P2PSvc_MakeConnActionObj(pObjList, pConnTopology->connAction); - P2PSvc_MakeGrpDevAddrObj(pObjList, pConnTopology->grpInfo.grpDevAddr); - P2PSvc_MakeIntfAddrObj(pObjList, pConnTopology->grpInfo.grpIntfAddr); - P2PSvc_MakeSsidObj(pObjList, pConnTopology->grpInfo.ssidLen, pConnTopology->grpInfo.ssidBuf); - P2PSvc_MakeOpChannelObj(pObjList, pConnTopology->grpInfo.opChnl); - } - - P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pBuf); - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_IndicateInitorOnFOPDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - PP2PSVC_PD_CONN_TOPOLOGY pConnTopology = &pPDEntry->connTopology; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("super.status: %u\n", pInitorPDEntry->super.status)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pInitorPDEntry->fopdRspStatus: %u\n", pInitorPDEntry->fopdRspStatus)); - - do - { - PP2PSVC_OBJ_LIST pObjList = NULL; - - OCTET_STRING osDevName; - - // Get dev-name - if(RT_STATUS_SUCCESS != P2PSvc_GetDevNameFromDevInfoAttr(posP2PAttrs, &osDevName)) - { - FillOctetString(osDevName, NULL, 0); - } - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // peer dev-addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(P2P_STATUS_CODE)); // FOPDRsp status code - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bDeferred - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // accepted by peer user - reqBufSize += (RT_OBJECT_HEADER_SIZE + 2); // config method in PD req - reqBufSize += (RT_OBJECT_HEADER_SIZE + posP2PAttrs->Length); // P2P attrs in FOPD req - reqBufSize += (RT_OBJECT_HEADER_SIZE + osDevName.Length); // dev-name - - if(P2P_STATUS_SUCCESS == pInitorPDEntry->super.status) - { - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bPersistent - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // connAction - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpDevAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpIntfAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + pConnTopology->grpInfo.ssidLen); // SSID - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u1Byte)); // opChnl - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - PlatformZeroMemory(pBuf, reqBufSize); - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - // Prefast warning -#pragma warning( disable:6063 ) - RT_ASSERT(pInitorPDEntry->super.bDeferred, ("%s(): initor recv PD req but bDeferred is not set\n")); - - // Fill obj list - P2PSVC_OBJ_LIST_INIT(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_INDIC_INITOR_ON_FOPD_REQ, - P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeDevAddrObj(pObjList, pInitorPDEntry->super.peerDevAddr); - P2PSvc_MakeP2PStatusObj(pObjList, pInitorPDEntry->fopdRspStatus); - P2PSvc_MakeDeferredObj(pObjList, pInitorPDEntry->super.bDeferred); - P2PSvc_MakeUserAcceptedObj(pObjList, (P2P_STATUS_SUCCESS_ACCEPTED_BY_USER == pInitorPDEntry->fopdReqStatus)); - P2PSvc_MakeConfigMethodObj(pObjList, pInitorPDEntry->pdReqConfigMethod); - P2PSvc_MakeP2PAttrsObj(pObjList, posP2PAttrs->Length, posP2PAttrs->Octet); - P2PSvc_MakeDevNameObj_FromDevNameOctet(pObjList, osDevName); - - if(P2P_STATUS_SUCCESS == pInitorPDEntry->super.status) - { - P2PSvc_MakeIsPersistentObj(pObjList, pConnTopology->bPersistent); - P2PSvc_MakeConnActionObj(pObjList, pConnTopology->connAction); - P2PSvc_MakeGrpDevAddrObj(pObjList, pConnTopology->grpInfo.grpDevAddr); - P2PSvc_MakeIntfAddrObj(pObjList, pConnTopology->grpInfo.grpIntfAddr); - P2PSvc_MakeSsidObj(pObjList, pConnTopology->grpInfo.ssidLen, pConnTopology->grpInfo.ssidBuf); - P2PSvc_MakeOpChannelObj(pObjList, pConnTopology->grpInfo.opChnl); - } - - P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pBuf); - - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_IndicateRspdorOnFOPDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN P2P_STATUS_CODE p2pStatus, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - PP2PSVC_PD_CONN_TOPOLOGY pConnTopology = &pPDEntry->connTopology; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("super.status: %u\n", pRspdorPDEntry->super.status)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pRspdorPDEntry->fopdRspStatus: %u\n", pRspdorPDEntry->fopdRspStatus)); - - do - { - PP2PSVC_OBJ_LIST pObjList = NULL; - PRT_OBJECT_HEADER pStatusObj = NULL; - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // peer dev-addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(P2P_STATUS_CODE)); // FOPDRsp status code - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bDeferred - reqBufSize += (RT_OBJECT_HEADER_SIZE + 2); // config method from the intial PD req - reqBufSize += (RT_OBJECT_HEADER_SIZE + posP2PAttrs->Length); // P2P attrs in FOPD rsp - - if(P2P_STATUS_SUCCESS == pRspdorPDEntry->super.status) - { - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bPersistent - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // connAction - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpDevAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpIntfAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + pConnTopology->grpInfo.ssidLen); // SSID - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u1Byte)); // opChnl - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - PlatformZeroMemory(pBuf, reqBufSize); - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - // Prefast warning -#pragma warning( disable:6063 ) - RT_ASSERT(pRspdorPDEntry->super.bDeferred, ("%s(): rspdor recv PD rsp but bDeferred is not set\n")); - - // Fill obj list - P2PSVC_OBJ_LIST_INIT(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_FOPD_RSP, - P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeDevAddrObj(pObjList, pRspdorPDEntry->super.peerDevAddr); - P2PSvc_MakeP2PStatusObj(pObjList, pRspdorPDEntry->fopdRspStatus); - P2PSvc_MakeConfigMethodObj(pObjList, pRspdorPDEntry->configMethod); - P2PSvc_MakeDeferredObj(pObjList, pRspdorPDEntry->super.bDeferred); - P2PSvc_MakeP2PAttrsObj(pObjList, posP2PAttrs->Length, posP2PAttrs->Octet); - - if(P2P_STATUS_SUCCESS == pRspdorPDEntry->super.status) - { - P2PSvc_MakeIsPersistentObj(pObjList, pConnTopology->bPersistent); - P2PSvc_MakeConnActionObj(pObjList, pConnTopology->connAction); - P2PSvc_MakeGrpDevAddrObj(pObjList, pConnTopology->grpInfo.grpDevAddr); - P2PSvc_MakeIntfAddrObj(pObjList, pConnTopology->grpInfo.grpIntfAddr); - P2PSvc_MakeSsidObj(pObjList, pConnTopology->grpInfo.ssidLen, pConnTopology->grpInfo.ssidBuf); - P2PSvc_MakeOpChannelObj(pObjList, pConnTopology->grpInfo.opChnl); - } - - P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pBuf); - - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_IndicateRspdorOnPDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u2Byte configMethod, - IN POCTET_STRING posP2PAttrs, - IN PP2PSVC_PD_ENTRY pPDEntry - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("super.status: %u\n", pRspdorPDEntry->super.status)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pRspdorPDEntry->pdRspStatus: %u\n", pRspdorPDEntry->pdRspStatus)); - - do - { - OCTET_STRING osSessionInfoDataInfo; - OCTET_STRING osDevName; - PP2PSVC_OBJ_LIST pObjList = NULL; - PP2PSVC_PD_CONN_TOPOLOGY pConnTopology = &pPDEntry->connTopology; - - // Get session-info-data-info (optional) - P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_SESSION_INFO_DATA_INFO, 0, &osSessionInfoDataInfo); - - // Get dev-name - if(RT_STATUS_SUCCESS != P2PSvc_GetDevNameFromDevInfoAttr(posP2PAttrs, &osDevName)) - { - FillOctetString(osDevName, NULL, 0); - } - - // Eval size of buf required - reqBufSize = 0; - reqBufSize += P2PSVC_OBJ_LIST_LEN(&pRspdorPDEntry->objList); - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(P2P_STATUS_CODE)); // status in PD rsp - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u2Byte)); // configMethod - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // advId - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // sessionId - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // sessionMac - reqBufSize += (RT_OBJECT_HEADER_SIZE + osSessionInfoDataInfo.Length); // session-info-data-info - reqBufSize += (RT_OBJECT_HEADER_SIZE + osDevName.Length); // dev-name - - if(P2P_STATUS_SUCCESS == pRspdorPDEntry->super.status) - { - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // bPersistent - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u4Byte)); // connAction - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpDevAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // grpIntfAddr - reqBufSize += (RT_OBJECT_HEADER_SIZE + pConnTopology->grpInfo.ssidLen); // SSID - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u1Byte)); // opChnl - } - - // Alloc mem - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - PlatformZeroMemory(pBuf, reqBufSize); - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - PlatformMoveMemory(pObjList, &pRspdorPDEntry->objList, P2PSVC_OBJ_LIST_LEN(&pRspdorPDEntry->objList)); - - // Fill obj list - pObjList->hdr.Id = P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_ON_PD_REQ; - - P2PSvc_MakeP2PStatusObj(pObjList, pRspdorPDEntry->pdRspStatus); - P2PSvc_MakeConfigMethodObj(pObjList, configMethod); - P2PSvc_MakeAdvIdObj(pObjList, pRspdorPDEntry->super.advId); - P2PSvc_MakeSessionIdObj(pObjList, pRspdorPDEntry->super.sessionId); - P2PSvc_MakeDevAddrObj(pObjList, pRspdorPDEntry->super.peerDevAddr); - P2PSvc_MakeSessionInfoDataInfoObj(pObjList, osSessionInfoDataInfo); - P2PSvc_MakeDevNameObj_FromDevNameOctet(pObjList, osDevName); - - if(P2P_STATUS_SUCCESS == pRspdorPDEntry->super.status) - { - P2PSvc_MakeIsPersistentObj(pObjList, pConnTopology->bPersistent); - P2PSvc_MakeConnActionObj(pObjList, pConnTopology->connAction); - P2PSvc_MakeGrpDevAddrObj(pObjList, pConnTopology->grpInfo.grpDevAddr); - P2PSvc_MakeIntfAddrObj(pObjList, pConnTopology->grpInfo.grpIntfAddr); - P2PSvc_MakeSsidObj(pObjList, pConnTopology->grpInfo.ssidLen, pConnTopology->grpInfo.ssidBuf); - P2PSvc_MakeOpChannelObj(pObjList, pConnTopology->grpInfo.opChnl); - } - - if(P2P_STATUS_SUCCESS != (rtStatus = P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pObjList))) - { - break; - - } - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -BOOLEAN -p2psvc_ValidateConnCapComination( - IN u1Byte reqConnCap, - IN u1Byte rspConnCap - ) -{ - BOOLEAN bValid = FALSE; - - do - - { - if(P2PSVC_CONN_CAP_BMP_NEW == reqConnCap) - { - if(P2PSVC_CONN_CAP_BMP_NEW == rspConnCap - || P2PSVC_CONN_CAP_BMP_CLI == rspConnCap - || P2PSVC_CONN_CAP_BMP_GO == rspConnCap - ) - { - bValid = TRUE; - break; - } - } - else if(P2PSVC_CONN_CAP_BMP_CLI == reqConnCap) - { - if(P2PSVC_CONN_CAP_BMP_GO == rspConnCap) - { - bValid = TRUE; - break; - } - } - else if(P2PSVC_CONN_CAP_BMP_GO == reqConnCap) - { - if(P2PSVC_CONN_CAP_BMP_CLI == rspConnCap) - { - bValid = TRUE; - break; - } - } - else if((P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO) == reqConnCap) - { - if(P2PSVC_CONN_CAP_BMP_NEW == rspConnCap - || P2PSVC_CONN_CAP_BMP_CLI == rspConnCap - || P2PSVC_CONN_CAP_BMP_GO == rspConnCap - ) - { - bValid = TRUE; - break; - } - } - else if((P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO) == reqConnCap) - { - if(P2PSVC_CONN_CAP_BMP_CLI == rspConnCap - || P2PSVC_CONN_CAP_BMP_GO == rspConnCap - ) - { - bValid = TRUE; - break; - } - } - else - { - break; - } - - // Invalid - break; - - }while(FALSE); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("reqConnCap: %u, rspConnCap: %u, bValid: %u\n", - reqConnCap, rspConnCap, bValid)); - - return bValid; -} - -BOOLEAN -p2psvc_IsWscPinCollector( - IN PP2PSVC_PD_ENTRY pPDEntry - ) -{ - BOOLEAN bWscPinCollector = FALSE; - - RT_ASSERT(pPDEntry->bDone, ("%s(): try to determine WSC PIN collector when PD is not yet done\n", __FUNCTION__)); - - do - { - if(pPDEntry->bInitor) - { - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - - bWscPinCollector = (P2P_WPS_CONFIG_METHODS_DISPLAY == pInitorPDEntry->pdReqConfigMethod); - } - else - { - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - bWscPinCollector = (P2P_WPS_CONFIG_METHODS_KEYPAD == pRspdorPDEntry->configMethod); - } - }while(FALSE); - - return bWscPinCollector; -} - -BOOLEAN -p2psvc_IsWfdsDefaultPinUsed( - IN PP2PSVC_PD_ENTRY pPDEntry - ) -{ - BOOLEAN bWfdsDefaultPinUsed = FALSE; - - RT_ASSERT(pPDEntry->bDone, ("%s(): try to determine WSC PIN collector when PD is not yet done\n", __FUNCTION__)); - - do - { - if(pPDEntry->bInitor) - { - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - - bWfdsDefaultPinUsed = (P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN == pInitorPDEntry->pdReqConfigMethod); - } - else - { - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - bWfdsDefaultPinUsed = (P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN == pRspdorPDEntry->configMethod); - } - }while(FALSE); - - return bWfdsDefaultPinUsed; -} - -RT_STATUS -p2psvc_AccessTopology_InitorImmediate( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("peer connCap: %u, self connCap: %u\n", pPDEntry->connCap, pPDEntry->selfConnCap)); - - do - { - // - // In initor immediate success case, the connCap is - // from rspdor PD rsp, the P2P attrs are also from PD rsp. - // - - pPDEntry->connTopology.bInitor = TRUE; - - switch(pPDEntry->connCap) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case P2PSVC_CONN_CAP_BMP_NEW: - // Peer agreed to form a new group - pPDEntry->connTopology.bPersistent = FALSE; - - if(p2psvc_IsWfdsDefaultPinUsed(pPDEntry) - || p2psvc_IsWscPinCollector(pPDEntry) - ) - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_INIT_NEGO; - } - else - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_WAIT_NEGO; - } - - break; - - case P2PSVC_CONN_CAP_BMP_CLI: - // Peer agreed to join our group - pPDEntry->connTopology.bPersistent = FALSE; - - if((P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO) == pPDEntry->selfConnCap - || (P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO) == pPDEntry->selfConnCap - || (P2PSVC_CONN_CAP_BMP_GO == pPDEntry->selfConnCap) && GetFirstGOPort(pP2PSvcInfo->pAdapter) // our connCap is GO and we have an existing GO - ) - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN_BY; - } - else if(P2PSVC_CONN_CAP_BMP_NEW == pPDEntry->selfConnCap - || P2PSVC_CONN_CAP_BMP_GO == pPDEntry->selfConnCap // our connCap is GO but we don't have an existing GO - ) - - {// start auto GO - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_AUTO_GO; - - p2psvc_FillGroupInfo(pPDEntry->selfGrpInfo.grpDevAddr, - pPDEntry->selfGrpInfo.grpIntfAddr, - pPDEntry->selfGrpInfo.ssidLen, - pPDEntry->selfGrpInfo.ssidBuf, - pPDEntry->selfGrpInfo.opChnl, - &pPDEntry->connTopology.grpInfo); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("rx invalid peer connCap\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - break; - - case P2PSVC_CONN_CAP_BMP_GO: - // Peer has an existing GO that we can join - if(TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_CLI) - || TEST_FLAG(pPDEntry->selfConnCap, P2PSVC_CONN_CAP_BMP_NEW) - ) - { - pPDEntry->connTopology.bPersistent = FALSE; - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN; - rtStatus = p2psvc_GetGroupInfoFromP2PAttrs(posP2PAttrs, &pInitorPDEntry->rxBadPDRspReason, &pPDEntry->connTopology.grpInfo); - if(RT_STATUS_SUCCESS != rtStatus) break; - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("rx invalid peer connCap\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_AccessTopology_InitorDeferred( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("peer connCap: %u, self connCap: %u\n", pPDEntry->connCap, pPDEntry->selfConnCap)); - - do - { - // - // In initor deferred success case, the connCap is - // from self FOPD rsp, the P2P attrs are also from FOPD req. - // - - pPDEntry->connTopology.bInitor = TRUE; - - switch(pPDEntry->connCap) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case P2PSVC_CONN_CAP_BMP_NEW: - // To form a new group - pPDEntry->connTopology.bPersistent = FALSE; - - if(p2psvc_IsWfdsDefaultPinUsed(pPDEntry) - || FALSE == p2psvc_IsWscPinCollector(pPDEntry) - ) - - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_WAIT_NEGO; - } - else - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_INIT_NEGO; - } - - break; - - case P2PSVC_CONN_CAP_BMP_CLI: - // To join an auto GO or existing group - pPDEntry->connTopology.bPersistent = FALSE; - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN; - - rtStatus = p2psvc_GetGroupInfoFromP2PAttrs(posP2PAttrs, &pInitorPDEntry->rxBadFOPDReqReason, &pPDEntry->connTopology.grpInfo); - if(RT_STATUS_SUCCESS != rtStatus) break; - - break; - - case P2PSVC_CONN_CAP_BMP_GO: - // We have an existing GO that peer can join - pPDEntry->connTopology.bPersistent = FALSE; - - if(GetFirstGOPort(pP2PSvcInfo->pAdapter)) - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN_BY; - } - else - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_AUTO_GO; - } - - p2psvc_FillGroupInfo(pPDEntry->selfGrpInfo.grpDevAddr, - pPDEntry->selfGrpInfo.grpIntfAddr, - pPDEntry->selfGrpInfo.ssidLen, - pPDEntry->selfGrpInfo.ssidBuf, - pPDEntry->selfGrpInfo.opChnl, - &pPDEntry->connTopology.grpInfo); - - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_AccessTopology_RspdorImmediate( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("connCap in PD rsp: %u, self connCap: %u\n", pRspdorPDEntry->pdRspConnCap, pPDEntry->selfConnCap)); - - do - { - // - // In rspdor immediate success case, the connCap is - // from self PD rsp, the P2P attrs are also from PD req. - // - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pdRspConnCap: %u\n", pRspdorPDEntry->pdRspConnCap)); - - switch(pRspdorPDEntry->pdRspConnCap) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case P2PSVC_CONN_CAP_BMP_NEW: - // To form a new group - pPDEntry->connTopology.bPersistent = FALSE; - - if(p2psvc_IsWfdsDefaultPinUsed(pPDEntry) - || FALSE == p2psvc_IsWscPinCollector(pPDEntry) - ) - - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_WAIT_NEGO; - } - else - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_INIT_NEGO; - } - - break; - - case P2PSVC_CONN_CAP_BMP_CLI: - // To join an auto GO or existing group - pPDEntry->connTopology.bPersistent = FALSE; - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN; - - rtStatus = p2psvc_GetGroupInfoFromP2PAttrs(posP2PAttrs, &pRspdorPDEntry->rxBadPDReqReason, &pPDEntry->connTopology.grpInfo); - if(RT_STATUS_SUCCESS != rtStatus) break; - - break; - - case P2PSVC_CONN_CAP_BMP_GO: - pPDEntry->connTopology.bPersistent = FALSE; - - if(GetFirstGOPort(pP2PSvcInfo->pAdapter)) - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN_BY; - } - else - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_AUTO_GO; - } - - p2psvc_FillGroupInfo(pPDEntry->selfGrpInfo.grpDevAddr, - pPDEntry->selfGrpInfo.grpIntfAddr, - pPDEntry->selfGrpInfo.ssidLen, - pPDEntry->selfGrpInfo.ssidBuf, - pPDEntry->selfGrpInfo.opChnl, - &pPDEntry->connTopology.grpInfo); - - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("connAction: %u\n", pPDEntry->connTopology.connAction)); - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -p2psvc_AccessTopology_RspdorDeferred( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - P2PSVC_FUNC_IN(DBG_LOUD); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("peer connCap: %u, self connCap: %u\n", pPDEntry->connCap, pPDEntry->selfConnCap)); - - do - { - // - // In rspdor deferred success case, the connCap is - // from peer FOPD rsp, the P2P attrs are also from FOPD rsp. - // - switch(pPDEntry->connCap) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case P2PSVC_CONN_CAP_BMP_NEW: - // Peer agreed to form a new group - pPDEntry->connTopology.bPersistent = FALSE; - - if(p2psvc_IsWfdsDefaultPinUsed(pPDEntry) - || p2psvc_IsWscPinCollector(pPDEntry) - ) - - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_INIT_NEGO; - } - else - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_WAIT_NEGO; - } - - break; - - case P2PSVC_CONN_CAP_BMP_CLI: - // Peer agreed to join our group - pPDEntry->connTopology.bPersistent = FALSE; - if((P2PSVC_CONN_CAP_BMP_NEW | P2PSVC_CONN_CAP_BMP_GO) == pPDEntry->selfConnCap - || (P2PSVC_CONN_CAP_BMP_CLI | P2PSVC_CONN_CAP_BMP_GO) == pPDEntry->selfConnCap - || (P2PSVC_CONN_CAP_BMP_GO == pPDEntry->selfConnCap) && GetFirstGOPort(pP2PSvcInfo->pAdapter) // our connCap is GO and we have an existing GO - ) - {// we have existing group - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN_BY; - } - else if(P2PSVC_CONN_CAP_BMP_GO == pPDEntry->selfConnCap // our connCap is GO but we don't have an existing GO - || P2PSVC_CONN_CAP_BMP_NEW == pPDEntry->selfConnCap - ) - { - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_AUTO_GO; - - p2psvc_FillGroupInfo(pPDEntry->selfGrpInfo.grpDevAddr, - pPDEntry->selfGrpInfo.grpIntfAddr, - pPDEntry->selfGrpInfo.ssidLen, - pPDEntry->selfGrpInfo.ssidBuf, - pPDEntry->selfGrpInfo.opChnl, - &pPDEntry->connTopology.grpInfo); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("rx invalid peer connCap\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - break; - - case P2PSVC_CONN_CAP_BMP_GO: - // Peer has an existing GO that we can join - pPDEntry->connTopology.bPersistent = FALSE; - pPDEntry->connTopology.connAction = P2PSVC_CONN_METHOD_JOIN; - - rtStatus = p2psvc_GetGroupInfoFromP2PAttrs(posP2PAttrs, &pRspdorPDEntry->rxBadFOPDRspReason, &pPDEntry->connTopology.grpInfo); - if(RT_STATUS_SUCCESS != rtStatus) break; - - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// This function determines conn cap to be used in responding PDRsp/FOPDRsp -// when PDReq/FOPDReq is received. -// That is: -// If initor recv FOPDReq, it determines conn cap in FOPDRsp -// If rspdor recv PDReq, it determines conn cap in PDRsp -// -BOOLEAN -p2psvc_AccessConnectability( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - OUT pu1Byte pRspConnCap, - OUT PP2P_STATUS_CODE pPDRspStatus - ) -{ - BOOLEAN bConnectable = FALSE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - u4Byte connCapMapIdx = 0; - PP2PSVC_CONN_CAP_MAP_ENTRY pConnCapEntry = NULL; - u1Byte selfConnCap = pP2PSvcInfo->connCap; - u1Byte reqConnCap = 0; - - *pRspConnCap = P2PSVC_CONN_CAP_BMP_NONE; - *pPDRspStatus = P2P_STATUS_MAX; - - if(pPDEntry->bInitor) - { - reqConnCap = ((PP2PSVC_INITOR_PD_ENTRY)pPDEntry)->fopdReqConnCap; - } - else - { - reqConnCap = pPDEntry->pdReqConnCap; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("req: %u, self: %u\n", reqConnCap, selfConnCap)); - - if(0 == reqConnCap) - { - break; - } - - for(connCapMapIdx = 0, pConnCapEntry = NULL; - P2PSVC_CONN_CAP_BMP_NONE != P2PSvcConnCapMap[connCapMapIdx].reqConnCap; - connCapMapIdx++ - ) - { - pConnCapEntry = &(P2PSvcConnCapMap[connCapMapIdx]); - - // Match conn cap entry - if(P2PSvcConnCapMap[connCapMapIdx].reqConnCap != reqConnCap) continue; - if(P2PSvcConnCapMap[connCapMapIdx].selfConnCap != selfConnCap) continue; - - pConnCapEntry = &(P2PSvcConnCapMap[connCapMapIdx]); - break; - } - - if(NULL == pConnCapEntry) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Configuration not supported: req: %u, self: %u\n", reqConnCap, selfConnCap)); - *pPDRspStatus = P2P_STATUS_FAIL_INCOMPATIBLE_PARAMETERS; - break; - } - else if(P2PSVC_CONN_CAP_BMP_NONE == pConnCapEntry->rspConnCap) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Configuration infeasible: req: %u, self: %u, msg: %s\n", reqConnCap, selfConnCap, pConnCapEntry->pDesc)); - *pPDRspStatus = P2P_STATUS_FAIL_INCOMPATIBLE_PARAMETERS; - break; - } - - // Connectable - *pRspConnCap = pConnCapEntry->rspConnCap; - *pPDRspStatus = P2P_STATUS_SUCCESS; - bConnectable = TRUE; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Connectable, msg: %s\n", pConnCapEntry->pDesc)); - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, bConnectable); - - return bConnectable; -} - -u2Byte -p2psvc_GetCorrespondingConfigMethod( - IN u2Byte configMethod - ) -{ - u2Byte cm = 0; - - P2PSVC_FUNC_IN(DBG_LOUD); - - if((u2Byte)P2P_WPS_CONFIG_METHODS_DISPLAY == cm) - cm = (u2Byte)P2P_WPS_CONFIG_METHODS_KEYPAD; - else if((u2Byte)P2P_WPS_CONFIG_METHODS_KEYPAD == cm) - cm = (u2Byte)P2P_WPS_CONFIG_METHODS_DISPLAY; - else if((u2Byte)P2P_WPS_CONFIG_METHODS_PUSHBUTTON == cm) - cm = (u2Byte)P2P_WPS_CONFIG_METHODS_PUSHBUTTON; - else if((u2Byte)P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN == cm) - cm = (u2Byte)P2P_WPS_CONFIG_METHODS_SVC_DEFAULT_PIN; - else - { - cm = 0; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Invalid configMethod: %u\n", configMethod)); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, RT_STATUS_SUCCESS); - - return cm; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -// -// Description: -// To determine the SSID that will be used in PD. -// -VOID -P2PSvc_DeterminePDSessionGOSsid( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT pu1Byte ssidBuf, - OUT pu1Byte pSsidLen - ) -{ - static u1Byte p2pTechName[] = {'D', 'I', 'R','E', 'C', 'T', '-'}; - static u1Byte p2pRandomChars[] = {'R', 'T'}; - pu1Byte pRandField = NULL; - - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - - - *pSsidLen = 0; - - // SSID prefix - PlatformMoveMemory(ssidBuf + (*pSsidLen), p2pTechName, sizeof(p2pTechName)); - *pSsidLen += sizeof(p2pTechName); - - // Random chars - PlatformMoveMemory(ssidBuf + (*pSsidLen), p2pRandomChars, sizeof(p2pRandomChars)); - *pSsidLen += sizeof(p2pRandomChars); - - // SSID Postfix, optional - if(pP2PInfo->SSIDPostfixLen) - { - PlatformMoveMemory(ssidBuf + (*pSsidLen), pP2PInfo->SSIDPostfixBuf, pP2PInfo->SSIDPostfixLen); - *pSsidLen += (pP2PInfo->SSIDPostfixLen); - } - - // Display result - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "P2PSvc_DeterminePDSessionGOSsid():\n", ssidBuf, *pSsidLen); - - return; - -} - -PP2PSVC_OBJ_LIST -P2PSvc_Get_PDEntryObjList( - IN PP2PSVC_PD_ENTRY pPDEntry - ) -{ - if(pPDEntry->bInitor) - { - return &(((PP2PSVC_INITOR_PD_ENTRY)pPDEntry)->objList); - } - else - { - return &(((PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry)->objList); - } -} - -// -// Assumption: -// pP2PSvcInfo->lock has been acquired before calling this function. -// -VOID -P2PSvc_Free_PDSessionListEntry( - IN PP2PSVC_PD_ENTRY pPDEntry, - IN pu4Byte pListCnt - ) -{ - P2PSVC_FUNC_IN(DBG_LOUD); - - RTRemoveEntryListWithCnt((PRT_LIST_ENTRY)pPDEntry, pListCnt); - - if(pPDEntry->bInitor) - { - p2psvc_Del_InitorPDSessionEntry((PP2PSVC_INITOR_PD_ENTRY)pPDEntry); - } - else - { - p2psvc_Del_RspdorPDSessionEntry((PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, RT_STATUS_SUCCESS); - - return; -} - -VOID -P2PSvc_Free_PDSessionList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt - ) -{ - P2PSVC_FUNC_IN(DBG_LOUD); - - while(RTIsListNotEmpty(pListHead)) - { - PVOID pEntry = NULL; - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - pEntry = RTGetHeadList(pListHead); - pPDEntry = (PP2PSVC_PD_ENTRY)pEntry; - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Free PD session with peer:\n", pPDEntry->peerDevAddr); - - P2PSvc_Free_PDSessionListEntry(pPDEntry, pListCnt); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, RT_STATUS_SUCCESS); - - return; -} - -// -// Description: -// Check if we have on going PD session. -// -BOOLEAN -P2PSvc_PDSessionInProgress( - IN PP2PSVC_INFO pP2PSvcInfo, - OUT PP2PSVC_PD_ENTRY *ppPDEntry - ) -{ - BOOLEAN bPDSessionInProgress = FALSE; - - do - { - if(ppPDEntry) *ppPDEntry = NULL; - - if(!RTIsListEmpty(&pP2PSvcInfo->pdSessionList)) - { - PP2PSVC_PD_ENTRY pPDEntry = NULL; - - pPDEntry = (PP2PSVC_PD_ENTRY)RTGetHeadList(&pP2PSvcInfo->pdSessionList); - - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("There's an outstanding PD session\n")); - bPDSessionInProgress = TRUE; - if(ppPDEntry) *ppPDEntry = pPDEntry; - break; - } - - bPDSessionInProgress = FALSE; - break; - - }while(FALSE); - - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("bPDSessionInProgress: %u\n", bPDSessionInProgress)); - - return bPDSessionInProgress; -} - -RT_STATUS -P2PSvc_AddPDInitorData( - IN PADAPTER pAdapter, - IN PVOID infoBuf, - IN u4Byte inBufLen, - IN u4Byte outBufLen - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INFO pP2PSvcInfo = P2PSVC_GET_INFO(pAdapter); - PRT_OBJECT_HEADER pObjHdr = NULL; - PP2PSVC_OBJ_LIST pObjList = NULL; - - P2PSVC_CHECK_NULL(pAdapter); - - if(!pP2PSvcInfo->bEnabled) return RT_STATUS_INVALID_STATE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PP2PSVC_INITOR_PD_ENTRY pPDInitorEntry = NULL; - - pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - - //4 Check state - if(P2PSvc_PDSessionInProgress(pP2PSvcInfo, NULL)) - { - P2PSvc_Free_PDSessionList(&pP2PSvcInfo->pdSessionList, &pP2PSvcInfo->pdSessionListCnt); - } - - //4 New a PD initor session - if(RT_STATUS_SUCCESS != (rtStatus = p2psvc_New_InitorPDSessionInfo(pP2PSvcInfo, pObjList, &pPDInitorEntry))) - { - break; - } - - //4 Add record to the list - PLATFORM_ACQUIRE_RT_SPINLOCK(pP2PSvcInfo->lock); - RTInsertTailListWithCnt(&pP2PSvcInfo->pdSessionList, &pPDInitorEntry->super.List, &pP2PSvcInfo->pdSessionListCnt); - PLATFORM_RELEASE_RT_SPINLOCK(pP2PSvcInfo->lock); - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - - -RT_STATUS -P2PSvc_AddPDRspdorData( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte configMethod, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pPDRspdorEntry = NULL; - P2PSVC_REASON badPDReqReason = P2PSVC_REASON_NONE; - - - if(!pP2PSvcInfo->bEnabled) return RT_STATUS_INVALID_STATE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PP2PSVC_REQ_INFO_ENTRY pAdvSvcInfoEntry = NULL; - u4Byte peerReqAdvId = 0; - BOOLEAN bSvcAvailable = FALSE; - - //4 Get requested svc - rtStatus = p2psvc_GetPDRequestedSvc(pP2PSvcInfo, - posP2PAttrs, - &pAdvSvcInfoEntry, - &peerReqAdvId); - if(RT_STATUS_SUCCESS != rtStatus) - { - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, FALSE, TRUE, P2PSVC_REASON_NO_MATCHING_SVC, posP2PAttrs); - break; - } - - if(NULL == pAdvSvcInfoEntry) - { - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, FALSE, TRUE, P2PSVC_REASON_NO_MATCHING_SVC, posP2PAttrs); - rtStatus = RT_STATUS_NOT_SUPPORT; - break; - } - - if(p2psvc_GetAdvSvcAvailability(pP2PSvcInfo, pAdvSvcInfoEntry)) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("The requested svc is available\n")); - bSvcAvailable = TRUE; - } - else - { - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, FALSE, TRUE, P2PSVC_REASON_REQ_SVC_NOT_AVAILABLE, posP2PAttrs); - } - - //4 New a rspdor PD session - rtStatus = p2psvc_New_RspdorPDSessionInfo(pP2PSvcInfo, - devAddr, - pAdvSvcInfoEntry, - posP2PAttrs, - configMethod, - &badPDReqReason, - &pPDRspdorEntry); - if(RT_STATUS_SUCCESS != rtStatus) - { - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, FALSE, TRUE, badPDReqReason, posP2PAttrs); - break; - } - - //4 Determine PD rsp status - if(FALSE == bSvcAvailable) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("The requested svc is not in available state, set status to 5\n")); - pPDRspdorEntry->pdRspStatus = P2P_STATUS_FAIL_UNABLE_TO_ACCOMODATE_REQUEST; - pPDRspdorEntry->pdRspConnCap = P2PSVC_CONN_CAP_BMP_NONE; - pPDRspdorEntry->super.bDeferred = FALSE; - } - else if(pPDRspdorEntry->super.bDeferred) - {// to defer - pPDRspdorEntry->pdRspStatus = P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE; - } - else - {// immediate rsp - BOOLEAN bConnectable = FALSE; - - bConnectable = p2psvc_AccessConnectability(pP2PSvcInfo, - &pPDRspdorEntry->super, - &pPDRspdorEntry->pdRspConnCap, // connCap to be used in responding PD rsp - &pPDRspdorEntry->pdRspStatus); // status to be used in responding PD rsp - - p2psvc_Set_PDResult(&pPDRspdorEntry->super, pPDRspdorEntry->pdRspStatus, pPDRspdorEntry->pdRspConnCap); - - if(bConnectable) - { - rtStatus = p2psvc_AccessTopology_RspdorImmediate(pP2PSvcInfo, &pPDRspdorEntry->super, posP2PAttrs); - if(RT_STATUS_SUCCESS != rtStatus) - { - badPDReqReason = pPDRspdorEntry->rxBadPDReqReason; - break; - } - } - } - - //4 Add record to the list. Note: If not deferred, the entry will be freed later after PD rsp is sent, - //4 see P2PSvc_MakeRspdorPDRspIE() - RTInsertTailListWithCnt(&pP2PSvcInfo->pdSessionList, - &pPDRspdorEntry->super.List, - &pP2PSvcInfo->pdSessionListCnt); - - //4 Indicate (after status is updated) - if(bSvcAvailable) - {// if svc not available, don't bother user - p2psvc_IndicateRspdorOnPDReq(pP2PSvcInfo, configMethod, posP2PAttrs, &pPDRspdorEntry->super); - } - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, FALSE, TRUE, badPDReqReason, posP2PAttrs); - if(pPDRspdorEntry) p2psvc_Del_RspdorPDSessionEntry(pPDRspdorEntry); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_RspdorSetFOPDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN BOOLEAN bAccepted - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - - do - { - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - P2PSvc_UpdateParam(&pRspdorPDEntry->objList, - P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED, - 0, sizeof(bAccepted), &bAccepted); - - pRspdorPDEntry->fopdReqStatus = (bAccepted) - ? (P2P_STATUS_SUCCESS_ACCEPTED_BY_USER) - : (P2P_STATUS_FAIL_REJECTED_BY_USER); - - pRspdorPDEntry->fopdReqConnCap = (bAccepted) - ? (pP2PSvcInfo->connCap) - : (P2PSVC_CONN_CAP_BMP_NONE); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bUserAccepted set to: %u\n", bAccepted)); - }while(FALSE); - - return rtStatus; -} - -// -// Description: -// PD initiator receives PD rsp from the responder. -// We update the PD session entry and indicate the PD rsp. -// -RT_STATUS -P2PSvc_InitorOnPDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u2Byte reqConfigMethod, - IN u2Byte rspConfigMethod, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - P2P_STATUS_CODE pdRspStatus = P2P_STATUS_MAX; - u1Byte pdRspConnCap = 0; - - if(!eqMacAddr(devAddr, pInitorPDEntry->super.peerDevAddr)) - {// not from the peer - // Don't set rtStatus so session won't be freed - break; - } - - if(!p2psvc_MatchAdvId(&pInitorPDEntry->super, posP2PAttrs)) - { - pInitorPDEntry->rxBadPDRspReason = P2PSVC_REASON_ADV_ID_MISMATCH; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(P2P_STATUS_MAX == (pdRspStatus = p2psvc_GetP2PStatusFromAttrs(posP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Drop for no status attr in PD rsp to initor\n")); - pInitorPDEntry->rxBadPDRspReason = P2PSVC_REASON_MISS_ATTR_STATUS; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(P2P_STATUS_SUCCESS == pdRspStatus - && reqConfigMethod != rspConfigMethod) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("drop for reqConfigMethod(%u) != rspConfigMethod(%u) and status in PDRsp is success\n", reqConfigMethod, rspConfigMethod)); - pInitorPDEntry->rxBadPDRspReason = P2PSVC_REASON_CONFIG_METHOD_MISMATCH; - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(P2P_STATUS_SUCCESS == pdRspStatus) - { - if(0 == (pdRspConnCap = p2psvc_GetConnCapFromAttrs(posP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("peer respond success but conn cap is 0\n")); - pInitorPDEntry->rxBadPDRspReason = P2PSVC_REASON_MISS_ATTR_CONN_CAP; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(FALSE == p2psvc_ValidateConnCapComination(pInitorPDEntry->super.pdReqConnCap, pdRspConnCap)) - { - pInitorPDEntry->rxBadPDRspReason = P2PSVC_REASON_INVALID_CONN_CAP; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - } - else - { - pdRspConnCap = P2PSVC_CONN_CAP_BMP_NONE; - } - - pInitorPDEntry->super.bDeferred = (P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE == pdRspStatus); - pInitorPDEntry->pdReqConfigMethod = reqConfigMethod; - pInitorPDEntry->pdRspRxTime = PlatformGetCurrentTime(); - pInitorPDEntry->pdRspStatus = pdRspStatus; - pInitorPDEntry->pdRspConnCap = pdRspConnCap; - - if(!pInitorPDEntry->super.bDeferred) - {// immediate rsp, no further frame exchg - p2psvc_Set_PDResult(&pInitorPDEntry->super, pdRspStatus, pdRspConnCap); - - if(P2P_STATUS_SUCCESS == pdRspStatus) - {// immediate success - rtStatus = p2psvc_AccessTopology_InitorImmediate(pP2PSvcInfo, pPDEntry, posP2PAttrs); - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - } - else - {// PD explicitly failed - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("PD rsp status: %u\n", pdRspStatus)); - } - } - - //4 Indicate on PD rsp - p2psvc_IndicateInitorOnPDRsp(pP2PSvcInfo, &pInitorPDEntry->super, posP2PAttrs); - - if(P2P_STATUS_SUCCESS == pdRspStatus) - {// PD succeeded - P2PSvc_PDSessionSucceeded(pP2PSvcInfo, pPDEntry); - } - else if(P2P_STATUS_FAIL_INFORMATION_IS_UNAVAILABLE == pdRspStatus) - { - } - else - {// PD explicitly failed, but rtStatus is success - P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - } - - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("free PD session for error: 0x%08X\n", rtStatus)); - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, TRUE, FALSE, pInitorPDEntry->rxBadPDRspReason, posP2PAttrs); - P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -// -// Description: -// PD requestor handles PD req. -// Returns error if FOPD rsp shall not be sent. -// -RT_STATUS -P2PSvc_InitorOnFOPDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN u2Byte configMethod, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_INITOR_PD_ENTRY pInitorPDEntry = (PP2PSVC_INITOR_PD_ENTRY)pPDEntry; - BOOLEAN bToSendFOPDRsp = FALSE; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - P2P_STATUS_CODE fopdReqStatus = P2P_STATUS_MAX; - u1Byte fopdReqConnCap = 0; - - if(!eqMacAddr(devAddr, pInitorPDEntry->super.peerDevAddr)) - {// not from the peer - // Don't set rtStatus so session won't be freed - break; - } - - if(!p2psvc_MatchAdvId(&pInitorPDEntry->super, posP2PAttrs)) - { - pInitorPDEntry->rxBadFOPDReqReason = P2PSVC_REASON_ADV_ID_MISMATCH; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - //4 Check if it is actually a FOPD req by checking whether it has status attribute - if(P2P_STATUS_MAX == (fopdReqStatus = p2psvc_GetP2PStatusFromAttrs(posP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Drop for no status attr in PD rsp to initor\n")); - pInitorPDEntry->rxBadFOPDReqReason = P2PSVC_REASON_MISS_ATTR_STATUS; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Check whether PD rsp has been received - if(0 == pInitorPDEntry->pdRspRxTime) - {// PD rsp not received, but now receiving the FOPD req - // Prefast warning -#pragma warning( disable:6063 ) - RT_ASSERT(FALSE == pInitorPDEntry->super.bDeferred, ("%s(): didn't rx PD rsp but bDeferred is set\n")); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Rx FOPD req before PD rsp, ignore PD rsp and assume deferred case\n")); - pInitorPDEntry->super.bDeferred = TRUE; - pInitorPDEntry->pdReqConfigMethod = p2psvc_GetCorrespondingConfigMethod(configMethod); - } - - if(P2P_STATUS_SUCCESS_ACCEPTED_BY_USER == fopdReqStatus) - { - if(0 == (fopdReqConnCap = p2psvc_GetConnCapFromAttrs(posP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("peer FOPDReq is accepted by user but conn cap is 0\n")); - pInitorPDEntry->rxBadFOPDReqReason = P2PSVC_REASON_MISS_ATTR_CONN_CAP; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - } - else - { - fopdReqConnCap = 0; - } - - pInitorPDEntry->fopdReqRxTime = PlatformGetCurrentTime(); - pInitorPDEntry->fopdReqStatus = fopdReqStatus; - pInitorPDEntry->fopdReqConnCap = fopdReqConnCap; - - //4 Check if rejected by peer user, if rejected, FOPD rsp shall not be sent - - if(P2P_STATUS_SUCCESS_ACCEPTED_BY_USER == fopdReqStatus) - { - BOOLEAN bConnectable = FALSE; - - bToSendFOPDRsp = TRUE; - bConnectable = p2psvc_AccessConnectability(pP2PSvcInfo, - &pInitorPDEntry->super, - &pInitorPDEntry->fopdRspConnCap, - &pInitorPDEntry->fopdRspStatus); - - p2psvc_Set_PDResult(&pInitorPDEntry->super, pInitorPDEntry->fopdRspStatus, pInitorPDEntry->fopdRspConnCap); - - if(bConnectable) - { - rtStatus = p2psvc_AccessTopology_InitorDeferred(pP2PSvcInfo, &pInitorPDEntry->super, posP2PAttrs); - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - } - } - else - { - p2psvc_Set_PDResult(&pInitorPDEntry->super, fopdReqStatus, P2PSVC_CONN_CAP_BMP_NONE); - - if(P2P_STATUS_FAIL_REJECTED_BY_USER == fopdReqStatus) - {// not to respond with PD rsp - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Rejected by peer user\n")); - } - else - {// unexpected status, will free the session - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - } - - //4 Indicate on PD req - p2psvc_IndicateInitorOnFOPDReq(pP2PSvcInfo, &pInitorPDEntry->super, posP2PAttrs); - - }while(FALSE); - - if(!bToSendFOPDRsp) - { - rtStatus = RT_STATUS_FAILURE; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - if(P2PSVC_REASON_NONE != pInitorPDEntry->rxBadFOPDReqReason) - { - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, TRUE, TRUE, pInitorPDEntry->rxBadFOPDReqReason, posP2PAttrs); - } - P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_RspdorOnFOPDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u2Byte reqConfigMethod, - IN u2Byte rspConfigMethod, - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_RSPDOR_PD_ENTRY pRspdorPDEntry = (PP2PSVC_RSPDOR_PD_ENTRY)pPDEntry; - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - P2P_STATUS_CODE fopdRspStatus = P2P_STATUS_MAX; - u1Byte fopdRspConnCap = 0; - - PP2PSVC_OBJ_LIST pObjList = NULL; - - if(!eqMacAddr(devAddr, pRspdorPDEntry->super.peerDevAddr)) - {// not from peer - // Don't set rtStatus so session won't be freed - break; - } - - if(!p2psvc_MatchAdvId(&pRspdorPDEntry->super, posP2PAttrs)) - { - pRspdorPDEntry->rxBadFOPDRspReason = P2PSVC_REASON_ADV_ID_MISMATCH; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(P2P_STATUS_MAX == (fopdRspStatus = p2psvc_GetP2PStatusFromAttrs(posP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Drop for no status attr in PD rsp to initor\n")); - pRspdorPDEntry->rxBadFOPDRspReason = P2PSVC_REASON_MISS_ATTR_STATUS; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(P2P_STATUS_SUCCESS == fopdRspStatus - && reqConfigMethod != rspConfigMethod) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("drop for reqConfigMethod(%u) != rspConfigMethod(%u) and status in PDRsp is success\n", reqConfigMethod, rspConfigMethod)); - pRspdorPDEntry->rxBadFOPDRspReason = P2PSVC_REASON_CONFIG_METHOD_MISMATCH; - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(P2P_STATUS_SUCCESS == fopdRspStatus) - { - if(P2PSVC_CONN_CAP_BMP_NONE == (fopdRspConnCap = p2psvc_GetConnCapFromAttrs(posP2PAttrs))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("peer respond success but conn cap is 0\n")); - pRspdorPDEntry->rxBadFOPDRspReason = P2PSVC_REASON_INVALID_CONN_CAP; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(FALSE == p2psvc_ValidateConnCapComination(pRspdorPDEntry->fopdReqConnCap, fopdRspConnCap)) - { - pRspdorPDEntry->rxBadFOPDRspReason = P2PSVC_REASON_INVALID_CONN_CAP; - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - } - else - { - fopdRspConnCap = P2PSVC_CONN_CAP_BMP_NONE; - } - - pRspdorPDEntry->fopdRspRxTime = PlatformGetCurrentTime(); - pRspdorPDEntry->fopdRspStatus = fopdRspStatus; - pRspdorPDEntry->fopdRspConnCap = fopdRspConnCap; - - p2psvc_Set_PDResult(&pRspdorPDEntry->super, fopdRspStatus, fopdRspConnCap); - - if(P2P_STATUS_SUCCESS == fopdRspStatus) - { - rtStatus = p2psvc_AccessTopology_RspdorDeferred(pP2PSvcInfo, &pRspdorPDEntry->super, posP2PAttrs); - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - } - - // Indicate - p2psvc_IndicateRspdorOnFOPDRsp(pP2PSvcInfo, &pRspdorPDEntry->super, fopdRspStatus, posP2PAttrs); - - if(P2P_STATUS_SUCCESS == fopdRspStatus) - {// PD succeeded - P2PSvc_PDSessionSucceeded(pP2PSvcInfo, pPDEntry); - } - else - {// PD explicitly failed, but rtStatus is success - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("FOPD rsp status: %u\n", fopdRspStatus)); - P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - } - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("free PD session for error: 0x%08X\n", rtStatus)); - p2psvc_IndicateRxBadPD(pP2PSvcInfo, devAddr, FALSE, FALSE, pRspdorPDEntry->rxBadFOPDRspReason, posP2PAttrs); - P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_InitorOnSendPDReqFailure( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u1Byte p2pStatus - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - PP2PSVC_OBJ_LIST pObjList = NULL; - - do - { - reqBufSize = 0 - + P2PSVC_OBJ_LIST_LEN(P2PSvc_Get_PDEntryObjList(pPDEntry)) // the whole objs in PD session - + (RT_OBJECT_HEADER_SIZE + sizeof(P2P_STATUS_CODE)); // the status code - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - PlatformMoveMemory(pBuf, P2PSvc_Get_PDEntryObjList(pPDEntry), P2PSVC_OBJ_LIST_LEN(P2PSvc_Get_PDEntryObjList(pPDEntry))); - - if(0 == P2PSvc_MakeP2PStatusObj(pObjList, p2pStatus)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - pObjList->hdr.Id = P2PSVC_OBJ_HDR_ID_INDIC_INITOR_PD_REQ_SEND_FAILED; - - P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pBuf); - - P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - return rtStatus; -} - -RT_STATUS -P2PSvc_RspdorOnSendFOPDReqFailure( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry, - IN u1Byte p2pStatus - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - u4Byte reqBufSize = 0; - pu1Byte pBuf = NULL; - PP2PSVC_OBJ_LIST pObjList = NULL; - PRT_OBJECT_HEADER pStatusObj = NULL; - - do - { - reqBufSize = 0 - + P2PSVC_OBJ_LIST_LEN(P2PSvc_Get_PDEntryObjList(pPDEntry)) // the whole objs in PD session - + (RT_OBJECT_HEADER_SIZE + sizeof(P2P_STATUS_CODE)); // the status code - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuf\n")); - break; - } - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - - PlatformMoveMemory(pBuf, P2PSvc_Get_PDEntryObjList(pPDEntry), P2PSVC_OBJ_LIST_LEN(P2PSvc_Get_PDEntryObjList(pPDEntry))); - - if(NULL != (pStatusObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_P2P_STATUS, 0))) - { - // invalidate the prev status obj if exist - pStatusObj->Id = P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN; - } - - if(0 == P2PSvc_MakeP2PStatusObj(pObjList, p2pStatus)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - pObjList->hdr.Id = P2PSVC_OBJ_HDR_ID_INDIC_RSPDOR_FOPD_REQ_SEND_FAILED; - - P2PSvc_Indicate(pP2PSvcInfo, reqBufSize, pBuf); - - // NOT to free the PD session because there may be a retry for sending FOPD req - // and an "in progress" PD session is required when sending FOPD req. - // See P2PSvc_Set_RspdorFOPDReq. - // If sending FOPD req failed in the end, it shall be recycled in when P2PDisconnect or - // P2PSvc_PDSessionAgeFunc is called. - //P2PSvc_PDSessionFailed(pP2PSvcInfo, pPDEntry); - - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - return rtStatus; -} - -BOOLEAN -P2PSvc_IsLegacyPD( - IN POCTET_STRING posP2PAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - BOOLEAN bLegacyPD = TRUE; - - P2PSVC_CHECK_NULL(posP2PAttrs); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - OCTET_STRING osAdvId = {NULL, 0}; - - // If PD req does not contain adv-id attr, it should be from a legacy P2P Device - bLegacyPD = (P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_ADV_ID_INFO, 4 + 6, &osAdvId)) - ? (FALSE) - : (TRUE); - - if(bLegacyPD) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Rx legacy PD (PD w/o AdvID attr)\n")); - } - - break; - - }while(FALSE); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return bLegacyPD; -} - -VOID -P2PSvc_PDSessionSucceeded( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry - ) -{ - P2PSvc_Free_PDSessionListEntry(pPDEntry, &pP2PSvcInfo->pdSessionListCnt); - return; -} - -VOID -P2PSvc_PDSessionFailed( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_PD_ENTRY pPDEntry - ) -{ - P2PSvc_Free_PDSessionListEntry(pPDEntry, &pP2PSvcInfo->pdSessionListCnt); - return; -} - -VOID -P2PSvc_PDSessionAgeFunc( - IN PP2PSVC_INFO pP2PSvcInfo - ) -{ - PRT_LIST_ENTRY pListHead = &pP2PSvcInfo->pdSessionList; - PRT_LIST_ENTRY pEntry = RTGetHeadList(&pP2PSvcInfo->pdSessionList); - - while(pEntry != pListHead) - { - PP2PSVC_PD_ENTRY pPDEntry = (PP2PSVC_PD_ENTRY)pEntry; - PRT_LIST_ENTRY pForeEntry = RTNextEntryList(pEntry); - - if(P2PSVC_TIMEOUT_PD_SESSION_TIMEOUT_uS < PlatformGetCurrentTime() - pPDEntry->createTime) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Timeout an old PD session\n")); - P2PSvc_Free_PDSessionListEntry(pPDEntry, &pP2PSvcInfo->pdSessionListCnt); - } - - pEntry = pForeEntry; - } - - return; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/P2PSvc_ParamSpec.c b/network/wlan/WDI/COMMON/P2PSvc_ParamSpec.c deleted file mode 100644 index 4f13a420..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_ParamSpec.c +++ /dev/null @@ -1,502 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -// -// Description: -// This table defines the parameters of the supported actions. -// The table is used for validating action request from upper layer. -// -P2PSVC_ACTION_SPEC_ENTRY lP2PSvcActionSpecTab[] = -{ - { - P2PSVC_OBJ_HDR_ID_ACT_ENABLE, - { - P2PSVC_OBJ_HDR_ID_DATA_BENABLE, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_SEEK, - { - P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, - P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, - P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, - P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, - P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO_REQ, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_CANCEL_SEEK, - { - P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_ADVERTISE, - { - P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, - P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, - P2PSVC_OBJ_HDR_ID_DATA_SVC_AUTO_ACCEPT, - P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO, - P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, - P2PSVC_OBJ_HDR_ID_DATA_NETWORK_CONFIG, - P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_CANCEL_ADVERTISE, - { - P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_SVC_STATUS, - { - P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, - P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_PD_REQ, - { - P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID, - P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, - P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, - P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, - P2PSVC_OBJ_HDR_ID_DATA_SESSION_INFO, - P2PSVC_OBJ_HDR_ID_DATA_NETWORK_ROLE, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_FOPD_REQ, - { - P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - { - P2PSVC_OBJ_HDR_ID_ACT_CONN_CAP, - { - P2PSVC_OBJ_HDR_ID_DATA_CONN_CAP, - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, - - //---------------------------------------------- - { - P2PSVC_OBJ_HDR_ID_ACT_UNKNOWN, - { - //----------------------------------- - P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN // sentinel - } - }, -}; - -P2PSVC_PARAM_SPEC_ENTRY lP2PSvcParamSpecTab[] = -{ - {P2PSVC_OBJ_HDR_ID_DATA_BENABLE, sizeof(BOOLEAN), sizeof(BOOLEAN)}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 1, 255}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME_HASH, 6, 6}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO_REQ, 0, 65535}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO, 0, 65535}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_AUTO_ACCEPT, sizeof(BOOLEAN), sizeof(BOOLEAN)}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, sizeof(u1Byte), sizeof(u1Byte)}, - {P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, sizeof(u4Byte), sizeof(u4Byte)}, - {P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 6, 6}, - {P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 1, 1}, - {P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME, 1, 32}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST, 1, 65535}, - {P2PSVC_OBJ_HDR_ID_DATA_SESSION_INFO, 1, 144}, - {P2PSVC_OBJ_HDR_ID_DATA_NETWORK_ROLE, sizeof(u1Byte), sizeof(u1Byte)}, - {P2PSVC_OBJ_HDR_ID_DATA_CONN_CAP, sizeof(u1Byte), sizeof(u1Byte)}, - {P2PSVC_OBJ_HDR_ID_DATA_SESSION_ID, sizeof(u4Byte), sizeof(u4Byte)}, - {P2PSVC_OBJ_HDR_ID_DATA_USER_ACCEPTED, sizeof(BOOLEAN), sizeof(BOOLEAN)}, - {P2PSVC_OBJ_HDR_ID_DATA_SVC_COUNT, sizeof(u1Byte), sizeof(u1Byte)}, - //-------------------------------------------------------------------------- - {P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN, 0, 0} -}; - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - - -PP2PSVC_PARAM_SPEC_ENTRY -P2PSvc_GetParamSpec( - IN u4Byte actId - ) -{ - u4Byte paramSpecIdx = 0; - PP2PSVC_PARAM_SPEC_ENTRY pParamSpec = NULL; - - for(paramSpecIdx = 0; P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN != lP2PSvcParamSpecTab[paramSpecIdx].paramId; paramSpecIdx++) - { - if(actId == lP2PSvcParamSpecTab[paramSpecIdx].paramId) - { - pParamSpec = &(lP2PSvcParamSpecTab[paramSpecIdx]); - break; - } - } - - return pParamSpec; - -} - -// -// Description: -// Validate if the input buffer contains an object with obj list as its payload -// -RT_STATUS -P2PSvc_ValidateReqInfo( - IN PVOID infoBuf, - IN u4Byte inBufLen, - OUT pu4Byte pBytesNeeded - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - u4Byte bytesNeeded = 0; - - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - PRT_OBJECT_HEADER pObjHdr = NULL; - PP2PSVC_OBJ_LIST pObjList = NULL; - u4Byte objIter = 0; - - // Check if we can read the obj hdr - bytesNeeded = RT_OBJECT_HEADER_SIZE; - - if(inBufLen < bytesNeeded) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Buffer (%d) too short for required (%d)!\n", inBufLen, bytesNeeded)); - rtStatus = RT_STATUS_INVALID_LENGTH; - break; - } - - // Check if the in buf is large enough to hold the data whose length is declared in the obj header - pObjHdr = (PRT_OBJECT_HEADER)(infoBuf); - - if(inBufLen < bytesNeeded + pObjHdr->Length) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] in buf is not large enough to hold the value, value len: %u, inbuf len: %u!\n", pObjHdr->Length, inBufLen)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Check if the payload is a valid obj list - pObjList = (PP2PSVC_OBJ_LIST)(pObjHdr->Value); - bytesNeeded += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - if(inBufLen < bytesNeeded) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] in buf is not large enough to hold an obj list, inbuf len: %u!\n", inBufLen)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Validate the obj hdr of the info list - if(P2PSVC_OBJ_HDR_ID_DATA_OBJ_LIST != pObjList->hdr.Id) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] payload is not an obj list, its id is: %u\n", pObjList->hdr.Id)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Check if the objs in the obj list has valid length - for(objIter = 0; objIter < pObjList->nObjs; objIter++) - { - PRT_OBJECT_HEADER pCurObj = NULL; - - // Check we can read the obj hdr of the current obj - if(inBufLen < bytesNeeded + pObjList->ObjTab[objIter] + RT_OBJECT_HEADER_SIZE) - { - bytesNeeded = bytesNeeded + pObjList->ObjTab[objIter] + RT_OBJECT_HEADER_SIZE; - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] obj with index %u is not valid\n", objIter)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - // Get the obj - pCurObj = P2PSVC_OBJ_LIST_GET_OBJ(pObjList, objIter); - - // Check the hdr of the cur obj - if(inBufLen < bytesNeeded + pObjList->ObjTab[objIter] + RT_OBJECT_HEADER_SIZE + pCurObj->Length) - { - bytesNeeded = bytesNeeded + pObjList->ObjTab[objIter] + RT_OBJECT_HEADER_SIZE + pCurObj->Length; - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] inbuf (len: %u) is not large enough to hold the obj (index: %u, len: %u)\n", inBufLen, objIter, pCurObj->Length)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - }while(FALSE); - - *pBytesNeeded = bytesNeeded; - - // Dump raw data if invalid - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] info req invalid, bytesNeeded: %u\n", *pBytesNeeded)); - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "InBuf:\n", infoBuf, inBufLen); - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - - - -// -// Description: -// Validate the object list contains all the required parameters of the id. -// E.g., for P2PSVC_OBJ_HDR_ID_ACT_SEEK, the obj list shall contain list of -// [svc-name, svc-hash, svc-info-req]. -// Each required obj shall appear just once. -// Order is not important. -// -RT_STATUS -P2PSvc_ValidateActionParam( - IN u4Byte id, - IN PP2PSVC_OBJ_LIST pObjList - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - - int actSpecIdx = 0; - int nParams = 0; - int paramIdx = 0; - PP2PSVC_ACTION_SPEC_ENTRY pActSpec = NULL; - - do - { - // Search table - for(actSpecIdx = 0; P2PSVC_OBJ_HDR_ID_ACT_UNKNOWN != lP2PSvcActionSpecTab[actSpecIdx].actId; actSpecIdx++) - { - if(id == lP2PSvcActionSpecTab[actSpecIdx].actId) - { - pActSpec = &(lP2PSvcActionSpecTab[actSpecIdx]); - break; - } - } - - RT_ASSERT(pActSpec, ("p2psvc_AddSeekInfo(): Spec of P2PSVC_OBJ_HDR_ID_ACT_SEEK not specified in the action spec table\n")); - - // Count # of parameters - if (pActSpec != NULL) - { - for (nParams = 0; P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN != pActSpec->paramList[nParams]; nParams++) {} - } - - // Shall have exactly 1 set of parameters - for(paramIdx = 0; paramIdx < nParams; paramIdx++) - {// foreach required parameter - u4Byte objIter = 0; - PRT_OBJECT_HEADER pCurObj = NULL; - u4Byte nOccurrence = 0; - - for(objIter = 0; objIter < pObjList->nObjs; objIter++) - { - pCurObj = P2PSVC_OBJ_LIST_GET_OBJ(pObjList, objIter); - if(pCurObj->Id == pActSpec->paramList[paramIdx]) nOccurrence++; - } - - if(0 == nOccurrence) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("param (0x%08X) not found\n", pActSpec->paramList[paramIdx])); - rtStatus = RT_STATUS_INVALID_PARAMETER; - break; - } - else if(1 < nOccurrence - && P2PSVC_OBJ_HDR_ID_DATA_UNKNOWN != pActSpec->paramList[paramIdx] - ) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("id of cur obj (%u) occur more than once: %u\n", pCurObj->Id, nOccurrence)); - rtStatus = RT_STATUS_INVALID_PARAMETER; - break; - } - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - }while(FALSE); - - // Dump raw data if invalid - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] info action param\n")); - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "ObjList:\n", pObjList, P2PSVC_OBJ_LIST_LEN(pObjList)); - } - - return rtStatus; -} - -// -// Description: -// Validate all params specified by the objcts in the obj list. -// -RT_STATUS -P2PSvc_ValidateParamContent( - IN PP2PSVC_OBJ_LIST pObjList - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_OBJECT_HEADER pCurObj = NULL; - u4Byte objIter = 0; - u4Byte paramSpecIdx = 0; - PP2PSVC_PARAM_SPEC_ENTRY pParamSpec = NULL; - - do - { - u4Byte valLen = 0; - - for(objIter = 0, pParamSpec = NULL; NULL != (pCurObj = P2PSVC_OBJ_LIST_GET_OBJ(pObjList, objIter)); objIter++) - { - valLen = pCurObj->Length; - - if(NULL == (pParamSpec = P2PSvc_GetParamSpec(pCurObj->Id))) - { - //RT_TRACE(COMP_P2P, DBG_LOUD, ("%s(): param id (0x%08X) can't be found in the param spec tab\n", __FUNCTION__, pCurObj->Id)); - //rtStatus = RT_STATUS_INVALID_PARAMETER; - //break; - continue; - } - - if(!(pParamSpec->minLen <= valLen && valLen <= pParamSpec->maxLen)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s(): param id (0x%08X) with invalid len: %u, shall between %u and %u\n", __FUNCTION__, pCurObj->Id, valLen, pParamSpec->minLen, pParamSpec->maxLen)); - rtStatus = RT_STATUS_INVALID_LENGTH; - break; - } - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "ObjList:\n", pObjList, P2PSVC_OBJ_LIST_LEN(pObjList)); - } - - return rtStatus; -} - -PRT_OBJECT_HEADER -P2PSvc_GetParam( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte paramId, - IN u4Byte fromIdx - ) -{ - PRT_OBJECT_HEADER pParamObj = NULL; - PRT_OBJECT_HEADER pCurObj = NULL; - u4Byte objIter = 0; - - P2PSVC_CHECK_NULL(pObjList); - - do - { - // Index out of range - if(!(fromIdx < pObjList->nObjs)) break; - - // Search next appearence of the 1st param of the action - for(objIter = fromIdx; NULL != (pCurObj = P2PSVC_OBJ_LIST_GET_OBJ(pObjList, objIter)); objIter++) - { - if(pCurObj->Id == paramId) - { - pParamObj = pCurObj; - break; - } - } - - if(NULL == pParamObj) - {// not found - break; - } - - }while(FALSE); - - return pParamObj; -} - -RT_STATUS -P2PSvc_UpdateParam( - IN PP2PSVC_OBJ_LIST pObjList, - IN u4Byte paramId, - IN u4Byte fromIdx, - IN u4Byte bufLen, - IN PVOID pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_OBJECT_HEADER pObj = NULL; - - P2PSVC_CHECK_NULL(pObjList); - - do - { - if(NULL == (pObj = P2PSvc_GetParam(pObjList, paramId, fromIdx))) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(pObj->Length != bufLen) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - PlatformMoveMemory(pObj->Value, pBuf, bufLen); - - }while(FALSE); - - return rtStatus; -} - - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) diff --git a/network/wlan/WDI/COMMON/P2PSvc_SD.c b/network/wlan/WDI/COMMON/P2PSvc_SD.c deleted file mode 100644 index 301ffb26..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_SD.c +++ /dev/null @@ -1,379 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - - -RT_STATUS -P2PSvc_ParseAnqpQueryReq( - IN PP2P_SERVICE_REQ_TLV pAnqpQueryReq, - OUT pu1Byte pSvcNameLen, - OUT pu1Byte *ppSvcNameBuf, - OUT pu1Byte pSvcInfoReqLen, - OUT pu1Byte *ppSvcInfoReqBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - u1Byte svcNameLen = 0; - pu1Byte svcNameBuf = NULL; - u1Byte svcInfoReqLen = 0; - pu1Byte svcInfoReqBuf = NULL; - - pu1Byte anqpQueryReqBuf = pAnqpQueryReq->ServiceDesc.Buffer; - u2Byte anqpQueryReqLen = pAnqpQueryReq->ServiceDesc.BufferLength; - - do - { - u2Byte idx = 0; - - // svc-name-len - if(anqpQueryReqLen < idx + 1) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - svcNameLen = *(pu1Byte)(anqpQueryReqBuf + idx); - idx += 1; - - // svc-name - if(anqpQueryReqLen < idx + svcNameLen) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - svcNameBuf = (pu1Byte)(anqpQueryReqBuf + idx); - idx += svcNameLen; - - // svc-info-req-len - if(anqpQueryReqLen < idx + 1) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - svcInfoReqLen = *(pu1Byte)(anqpQueryReqBuf + idx); - idx += 1; - - // svc-info-req - if(anqpQueryReqLen < idx + svcInfoReqLen) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - svcInfoReqBuf = (pu1Byte)(anqpQueryReqBuf + idx); - idx += svcInfoReqLen; - - if(pSvcNameLen) *pSvcNameLen = svcNameLen; - if(ppSvcNameBuf) *ppSvcNameBuf = svcNameBuf; - if(pSvcInfoReqLen) *pSvcInfoReqLen = svcInfoReqLen; - if(ppSvcInfoReqBuf) *ppSvcInfoReqBuf = svcInfoReqBuf; - }while(FALSE); - - return rtStatus; -} - -RT_STATUS -P2PSvc_ParseAnqpQueryRsp( - IN PP2P_SERVICE_RSP_TLV pAnqpQueryRsp, - IN u1Byte index, - OUT pu1Byte pSvcNameLen, - OUT pu1Byte *ppSvcNameBuf, - OUT pu4Byte pAdvId, - OUT pu1Byte pSvcStatus, - OUT pu2Byte pSvcInfoLen, - OUT pu1Byte *ppSvcInfoBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - u1Byte nSvcInfoDesc = 0; - u1Byte svcNameLen = 0; - pu1Byte svcNameBuf = NULL; - u4Byte advId = 0; - u2Byte configMethod = 0; - u1Byte svcStatus = 0; - u2Byte svcInfoLen = 0; - pu1Byte svcInfoBuf = NULL; - - pu1Byte anqpQueryRspBuf = pAnqpQueryRsp->ServiceDesc.Buffer; - u2Byte anqpQueryRspLen = pAnqpQueryRsp->ServiceDesc.BufferLength; - - do - { - u2Byte offset = 0; - u2Byte idxSvcInfoDesc = 0; - - // number of svc info desc - if(anqpQueryRspLen < offset + 1) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - nSvcInfoDesc = *(pu1Byte)(anqpQueryRspBuf + offset); - offset += 1; - - //DbgPrint("%s(): nSvcInfoDesc: %u, index: %u\n", __FUNCTION__, nSvcInfoDesc, index); - - if(nSvcInfoDesc <= index) - { - rtStatus = RT_STATUS_INVALID_PARAMETER; - break; - } - - for(idxSvcInfoDesc = 0; idxSvcInfoDesc < nSvcInfoDesc; idxSvcInfoDesc++) - { - // Addendum v0.43 - // svc-info-desc: [[adv-svc-desc], svc-status(1), svc-info-len(2), svc-info(n)] - // where adv-svc-desc: [adv-id(4), config-method(2), svc-name-len(1), svc-name(n)] - - // adv-id - if(anqpQueryRspLen < offset + 4) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {advId = *(pu4Byte)(anqpQueryRspBuf + offset);} - offset += 4; - - // config-method - if(anqpQueryRspLen < offset + 2) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {configMethod = *(pu2Byte)(anqpQueryRspBuf + offset);} - offset += 2; - - // svc-name-len - if(anqpQueryRspLen < offset + 1) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {svcNameLen = *(pu1Byte)(anqpQueryRspBuf + offset);} - offset += 1; - - // svc-name - if(anqpQueryRspLen < offset + svcNameLen) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {svcNameBuf = (pu1Byte)(anqpQueryRspBuf + offset);} - offset += svcNameLen; - - // svc-status - if(anqpQueryRspLen < offset + 1) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {svcStatus = *(pu1Byte)(anqpQueryRspBuf + offset);} - offset += 1; - - // svc-info-len - if(anqpQueryRspLen < offset + 2) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {svcInfoLen = *(pu2Byte)(anqpQueryRspBuf + offset);} - offset += 2; - - // svc-info-req - if(anqpQueryRspLen < offset + svcInfoLen) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - else {svcInfoBuf = (pu1Byte)(anqpQueryRspBuf + offset);} - offset += svcInfoLen; - - if(idxSvcInfoDesc == index) - { - break; - } - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - DbgPrint("ng: 0x%08X, offset: %u\n", rtStatus, offset); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ANQP Query Rsp:\n", anqpQueryRspBuf, anqpQueryRspLen); - break; - } - - if(pSvcNameLen) *pSvcNameLen = svcNameLen; - if(ppSvcNameBuf) *ppSvcNameBuf = svcNameBuf; - if(pAdvId) *pAdvId = advId; - if(pSvcStatus) *pSvcStatus = svcStatus; - if(pSvcInfoLen) *pSvcInfoLen = svcInfoLen; - if(ppSvcInfoBuf) *ppSvcInfoBuf = svcInfoBuf; - }while(FALSE); - - return rtStatus; -} - - -RT_STATUS -P2PSvc_SDReq( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry, - IN PRT_OBJECT_HEADER pSvcInfoReqObj, - IN u1Byte searchId - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - PP2P_SD_CONTEXT pSDContext = &(pP2PInfo->SDContext); - PRT_OBJECT_HEADER pSvcNameObj = P2PSvc_GetParam(&pSeekInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0); - u2Byte bytesWritten = 0; - - P2PSVC_FUNC_IN(DBG_LOUD); - - cpMacAddr(pSDContext->UserSDReq.TargetDeviceAddress, devAddr); - cpMacAddr(pSDContext->TargetDeviceAddress, devAddr); - - pSDContext->UserSDReq.ServiceReqTLVSize = 1; - - pSDContext->UserSDReq.ServiceReqTLVList[0].TransactionID = searchId; - pSDContext->UserSDReq.ServiceReqTLVList[0].ServiceDesc.ServiceType = P2P_SD_PROTOCOL_P2PSVC; - - // svc-name-len - pSDContext->UserSDReq.ServiceReqTLVList[0].ServiceDesc.Buffer[bytesWritten] = (u1Byte)pSvcNameObj->Length; - bytesWritten += 1; - - // svc-name - PlatformMoveMemory(pSDContext->UserSDReq.ServiceReqTLVList[0].ServiceDesc.Buffer + bytesWritten, - pSvcNameObj->Value, - pSvcNameObj->Length); - bytesWritten += (u2Byte)pSvcNameObj->Length; - - // svc-info-req-len - pSDContext->UserSDReq.ServiceReqTLVList[0].ServiceDesc.Buffer[bytesWritten] = (u1Byte)pSvcInfoReqObj->Length; - bytesWritten += 1; - - // svc-info-req - PlatformMoveMemory(pSDContext->UserSDReq.ServiceReqTLVList[0].ServiceDesc.Buffer + bytesWritten, - pSvcInfoReqObj->Value, - pSvcInfoReqObj->Length); - bytesWritten += (u2Byte)pSvcInfoReqObj->Length; - - pSDContext->UserSDReq.ServiceReqTLVList[0].ServiceDesc.BufferLength = bytesWritten; - - pSDContext->bRequester = TRUE; - pSDContext->DialogToken = IncreaseDialogToken(pP2PInfo->DialogToken); - //pSDContext->TransactionID = 0xAA; // seems this is for parsing recvd SDRsp - pSDContext->FragmentID = 0; - pSDContext->ANQPQueryRspFieldToSendOffset = 0; - - p2p_Send_SDReq(pP2PInfo, devAddr); - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Send P2PSvc SD req to:\n", devAddr); - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_SDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN pu1Byte devAddr, - IN u1Byte dlgToken, - IN u1Byte transactionId, - IN u1Byte nSvcInfoDesc, - IN FRAME_BUF *pSvcInfoDescBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pP2PSvcInfo->pAdapter); - PP2P_SD_CONTEXT pSDContext = &(pP2PInfo->SDContext); - - - P2P_SD_RSP_CONTEXT sdRspCtx; - - // Fill a SD rsp context - PlatformFillMemory(&sdRspCtx, sizeof(sdRspCtx), 0); - sdRspCtx.SDStatus = P2P_SD_STATUS_SUCCESS; - PlatformMoveMemory(sdRspCtx.SourceDeviceAddress, pP2PInfo->DeviceAddress, 6); - sdRspCtx.ServiceUpdateIndicator = 0; - sdRspCtx.ServiceRspTLVSize = 1; - sdRspCtx.ServiceRspTLVList[0].TransactionID = transactionId; - sdRspCtx.ServiceRspTLVList[0].Status = P2P_SD_STATUS_SUCCESS; - sdRspCtx.ServiceRspTLVList[0].ServiceDesc.ServiceType = P2P_SD_PROTOCOL_P2PSVC; - sdRspCtx.ServiceRspTLVList[0].ServiceDesc.BufferLength = 1 + FrameBuf_Length(pSvcInfoDescBuf); - sdRspCtx.ServiceRspTLVList[0].ServiceDesc.Buffer[0] = nSvcInfoDesc; - PlatformMoveMemory(sdRspCtx.ServiceRspTLVList[0].ServiceDesc.Buffer + 1, FrameBuf_MHead(pSvcInfoDescBuf), FrameBuf_Length(pSvcInfoDescBuf)); - - //RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "SD Rsp data:\n", sdRspCtx.ServiceRspTLVList[0].ServiceDesc.Buffer, sdRspCtx.ServiceRspTLVList[0].ServiceDesc.BufferLength); - - p2p_Construct_AnqpQueryRspField(pP2PInfo, &sdRspCtx, pSDContext); - - // To send from offset 0 - pSDContext->ANQPQueryRspFieldToSendOffset = 0; - - p2p_Send_SDRsp(pP2PInfo, devAddr, dlgToken, P2P_SD_STATUS_SUCCESS, FALSE); - - return rtStatus; - -} - -BOOLEAN -P2PSvc_SDMatchSvcName( - IN PP2PSVC_REQ_INFO_ENTRY pAdvInfoEntry, - IN u1Byte svcNameLen, - IN pu1Byte svcNameBuf - ) -{ - PRT_OBJECT_HEADER pSvcNameObj = NULL; - BOOLEAN bMatch = FALSE; - - do - { - if(NULL == (pSvcNameObj = P2PSvc_GetParam(&pAdvInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0))) - { - break; - } - - // Check if it is prefix search - if('*' == svcNameBuf[svcNameLen - 1]) - {// ended with *, assume UTF-8 encode of * uses only a single byte - if(svcNameLen - 1 <= (u1Byte)pSvcNameObj->Length) - {// the svcName minus the * is no longer the the advertised svc name - if(0 == PlatformCompareMemory(svcNameBuf, pSvcNameObj->Value, svcNameLen - 1)) - { - bMatch = TRUE; - break; - } - } - } - - if(svcNameLen != pSvcNameObj->Length) break; - - if(0 != PlatformCompareMemory(svcNameBuf, pSvcNameObj->Value, pSvcNameObj->Length)) break; - - bMatch = TRUE; - - }while(FALSE); - - return bMatch; -} - - -BOOLEAN -P2PSvc_ToProcessSDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_SR_LIST_ENTRY pSREntryInList = NULL; - BOOLEAN bAccept = FALSE; - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_GetSearchResult(pP2PSvcInfo, searchId, devAddr, &pSREntryInList))) - { - break; - } - - P2PSVC_CHECK_NULL(pSREntryInList); - - if(NULL == pSREntryInList) - { - bAccept = FALSE; - break; - } - else - {// already have an entry in search result list - u8Byte curTime = PlatformGetCurrentTime(); - - if(0 == pSREntryInList->sdRspRxTime) - { - bAccept = TRUE; - break; - } - - if(0 != pSREntryInList->sdRspRxTime && P2PSVC_LEAST_SD_RSP_TIME_uS < curTime - pSREntryInList->sdRspRxTime) - {// we've received a SD rsp but it is a long time ago - bAccept = TRUE; - break; - } - } - }while(FALSE); - - if(!bAccept) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Reject SD rsp\n")); - } - - return bAccept; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/P2PSvc_SearchResult.c b/network/wlan/WDI/COMMON/P2PSvc_SearchResult.c deleted file mode 100644 index 0302e31b..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_SearchResult.c +++ /dev/null @@ -1,669 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -u4Byte -p2psvc_EvalSearchResultObjListLen( - IN POCTET_STRING posP2PAttrs, - IN OCTET_STRING osAdvSvcInfo, - IN u4Byte svcInfoLen, - OUT pu1Byte pnAdvSvc - ) -{ - u4Byte reqBufSize = 0; - - OCTET_STRING osDevName = {NULL, 0}; - - u4Byte totalSvcNameLen_1 = 0; - u4Byte totalSvcNameLen_2 = 0; - u1Byte nAdvSvc = 0; - - do - { - u4Byte idxAdvSvcInfoBuf = 0; - - if(RT_STATUS_SUCCESS != P2PSvc_GetDevNameFromDevInfoAttr(posP2PAttrs, &osDevName)) - { - break; - } - - //RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "osAdvSvcInfo:\n", osAdvSvcInfo.Octet, osAdvSvcInfo.Length); - - while(idxAdvSvcInfoBuf < osAdvSvcInfo.Length) - { - u1Byte curSvcNameLen = 0; - - // adv-id - idxAdvSvcInfoBuf += 4; - - // config-method (addendm v0.43) - idxAdvSvcInfoBuf += 2; - - // svc-name-len - curSvcNameLen = (*(pu1Byte)(osAdvSvcInfo.Octet + idxAdvSvcInfoBuf)); - totalSvcNameLen_2 += curSvcNameLen; - idxAdvSvcInfoBuf += 1; - - // svc-name - //RT_PRINT_STR(COMP_P2P, DBG_LOUD, "svc-name:\n", osAdvSvcInfo.Octet + i, curSvcNameLen); - idxAdvSvcInfoBuf += curSvcNameLen; - - // TODO: shall check if the svc matches our req because hashes of other seek req may be carried in our ProbeReq so we may get more svc names then we actually want - - nAdvSvc++; - } - - totalSvcNameLen_1 = osAdvSvcInfo.Length - (nAdvSvc * (4 + 2 + 1)); // minus adv-id(4), config-method(2) and svc-name-length(1) - - if(totalSvcNameLen_1 != totalSvcNameLen_2) - { - //RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] totalSvcNameLen_1(%u) != totalSvcNameLen_2(%u)\n", totalSvcNameLen_1, totalSvcNameLen_2)); - //RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "osAdvSvcInfo:\n", osAdvSvcInfo.Octet, osAdvSvcInfo.Length); - break; - } - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + 1); // search-id - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // dev-addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + osDevName.Length); // dev-name, no more than 32 - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(u1Byte)); // svc count - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // is SD done - reqBufSize += nAdvSvc * (FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart)); - reqBufSize += nAdvSvc * (RT_OBJECT_HEADER_SIZE + 4); // adv-id - reqBufSize += nAdvSvc * (RT_OBJECT_HEADER_SIZE + 2); // config-method (addendum v0.43) - reqBufSize += (nAdvSvc * (RT_OBJECT_HEADER_SIZE)) + totalSvcNameLen_1; // svc-name - - if(pnAdvSvc) *pnAdvSvc = nAdvSvc; - }while(FALSE); - - return reqBufSize; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - - -VOID -P2PSvc_Free_SearchResultObjList( - IN PRT_LIST_ENTRY pListHead, - IN pu4Byte pListCnt - ) -{ - while(RTIsListNotEmpty(pListHead)) - { - PVOID pEntry = NULL; - PP2PSVC_SR_LIST_ENTRY pSREntry = NULL; - - pEntry = RTRemoveHeadListWithCnt(pListHead, pListCnt); - pSREntry = (PP2PSVC_SR_LIST_ENTRY)pEntry; - P2PSvc_FreeMem(pEntry, P2PSVC_SR_LIST_LEN(pSREntry)); - } -} - -BOOLEAN -P2PSvc_ToProcessProbeRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_SR_LIST_ENTRY pSREntryInList = NULL; - BOOLEAN bAccept = FALSE; - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_GetSearchResult(pP2PSvcInfo, searchId, devAddr, &pSREntryInList))) - { - break; - } - - if(NULL == pSREntryInList) - { - bAccept = TRUE; - break; - } - else - {// already have an entry in search result list - u8Byte curTime = PlatformGetCurrentTime(); - - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("curTime: %I64u, lastProbeRspTime: %I64u\n", curTime, pSREntryInList->probeRspRxTime)); - - // Check if we receive a bunch of probe rsp in a very short time - if(curTime - pSREntryInList->probeRspRxTime < P2PSVC_LEAST_PROBE_RSP_TIME_uS) - { - break; - } - - // Check if we have a outstanding SD req, if we process the probe rsp in this case, we'll send another SD req and may flood the channel - if(0 != pSREntryInList->sdReqTxTime && 0 == pSREntryInList->sdRspRxTime) - {// we've sent SD req but SD rsp is not yet recvd - // Check if we've recv SD rsp within timeout - if(P2PSVC_TIMEOUT_WAIT_SD_RSP_uS < curTime - pSREntryInList->sdReqTxTime) - { - // Prefast warning -#pragma warning( disable:6328 ) - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Timeout waiting for SD rsp, try again by accept probe rsp, sdReqTxTime: %u\n", pSREntryInList->sdReqTxTime)); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Target dev addr:\n", devAddr); - - pSREntryInList->sdReqTxTime = 0; - bAccept = TRUE; - break; - } - else - {// still waiting for SD rsp - break; - } - } - - // Check if we've received a SD rsp from peer and we don't want the content of this probe rsp to cover the content of SD rsp - if(0 != pSREntryInList->sdRspRxTime) - {// we've received a SD rsp - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("Drop for we got SD rsp already\n")); - break; - } - } - - }while(FALSE); - - if(bAccept) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Accept probe rsp\n")); - } - - return bAccept; -} - - - -// -// Description: -// Search the search result list with search id and devAddr as the key. -// If entry found, the pointer to the entry is returned. -// If not found, the pointer is set to NULL. -// -RT_STATUS -P2PSvc_GetSearchResult( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntry - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_LIST_ENTRY pEntry = NULL; - - if(ppSREntry) *ppSREntry = NULL; - - do - { - for(pEntry = RTGetHeadList(&pP2PSvcInfo->searchResultList); pEntry != &pP2PSvcInfo->searchResultList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_SR_LIST_ENTRY pSREntry = (PP2PSVC_SR_LIST_ENTRY)pEntry; - PRT_OBJECT_HEADER pSearchIdObj = NULL; - PRT_OBJECT_HEADER pDevAddrObj = NULL; - - // Match search id - if(NULL == (pSearchIdObj = P2PSvc_GetParam(&pSREntry->srObjList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0))) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(searchId != *(pu1Byte)pSearchIdObj->Value) - { - continue;; - } - - // Match dev addr - if(NULL == (pDevAddrObj = P2PSvc_GetParam(&pSREntry->srObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0))) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - if(!eqMacAddr(devAddr, pDevAddrObj->Value)) - { - continue; - } - - // Target found - if(ppSREntry) *ppSREntry = pSREntry; - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) break; - }while(FALSE); - - return rtStatus; - } - - -BOOLEAN -P2PSvc_SeekReqNeedSD( - IN PP2PSVC_OBJ_LIST pSeekObjList, - IN PP2PSVC_SR_LIST_ENTRY pSREntryInList, - OUT PRT_OBJECT_HEADER *ppSvcInfoReqObj - ) -{ - PRT_OBJECT_HEADER pSeekSvcInfoReqObj = NULL; - PRT_OBJECT_HEADER pSvcDescObjList = NULL; - PRT_OBJECT_HEADER pSvcInfoObj = NULL; - BOOLEAN bNeedSD = FALSE; - - do - { - //4 Check if seek req contains svc-info-req - if(NULL == (pSeekSvcInfoReqObj = P2PSvc_GetParam(pSeekObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO_REQ, 0))) - {// shall not happen - break; - } - - if(0 == pSeekSvcInfoReqObj->Length) - { - PRT_OBJECT_HEADER pSeekSvcNameObj = NULL; - if(NULL == (pSeekSvcNameObj = P2PSvc_GetParam(pSeekObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, 0))) - {// shall not happen - break; - } - - if('*' == *((pu1Byte)pSeekSvcNameObj->Value + pSeekSvcNameObj->Length - 1)) - {// ended with *, assume UTF-8 encode of * uses only a single byte - bNeedSD = TRUE; - break; - } - - break; - } - - //4 Check if we've already done SD - // Get a svc desc - if(NULL == (pSvcDescObjList = P2PSvc_GetParam(&pSREntryInList->srObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_DESC_LIST, 0))) - { - break; - } - - // Check if the svc desc has svc-info - if(NULL == (pSvcInfoObj = P2PSvc_GetParam((PP2PSVC_OBJ_LIST)pSvcDescObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO, 0))) - { - bNeedSD = TRUE; - break; - } - else - {// already got svc-info from peer by SD - break; - } - - }while(FALSE); - - if(bNeedSD) - { - if(ppSvcInfoReqObj) *ppSvcInfoReqObj = pSeekSvcInfoReqObj; - } - - return bNeedSD; -} - -// -// Description: -// Update search result list if -// 1. the input entry can be found in the list and the content is different -// 2. the input entry can't be found in the list -// -// Return the entry in the list if no error occurs. -// -RT_STATUS -P2PSvc_UpdateSearchResult( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr, - IN PP2PSVC_SR_LIST_ENTRY pSREntryToUpdate, - OUT PBOOLEAN pbDuplicatedEntry, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntryOut - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_SR_LIST_ENTRY pSREntryInList = NULL; - - do - { - if(ppSREntryOut) *ppSREntryOut = NULL; - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_GetSearchResult(pP2PSvcInfo, searchId, devAddr, &pSREntryInList))) - { - break; - } - - if(pSREntryInList) - {// remove the old one and insert the new to the head - - if(P2PSVC_OBJ_LIST_LEN(&pSREntryToUpdate->srObjList) == P2PSVC_OBJ_LIST_LEN(&pSREntryInList->srObjList) && - 0 == PlatformCompareMemory(&pSREntryToUpdate->srObjList, &pSREntryInList->srObjList, P2PSVC_OBJ_LIST_LEN(&pSREntryToUpdate->srObjList))) - - {// has same entry in the list - if(ppSREntryOut) *ppSREntryOut = pSREntryInList; - if(pbDuplicatedEntry) *pbDuplicatedEntry = TRUE; - } - else - {// different => replace the entry - PRT_LIST_ENTRY pEntry = (PRT_LIST_ENTRY)pSREntryInList; - PRT_LIST_ENTRY pForeEntry = RTForeEntryList(pEntry); - - RTRemoveEntryListWithCnt(pEntry, &pP2PSvcInfo->searchResultListCnt); - P2PSvc_FreeMem(pSREntryInList, P2PSVC_SR_LIST_LEN(pSREntryInList)); - pEntry = pForeEntry; - RTInsertHeadListWithCnt(&pP2PSvcInfo->searchResultList, &pSREntryToUpdate->List, &pP2PSvcInfo->searchResultListCnt); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Update SR entry:\n", pSREntryToUpdate, P2PSVC_SR_LIST_LEN(pSREntryToUpdate)); - - if(ppSREntryOut) *ppSREntryOut = pSREntryToUpdate; - } - } - else - {// entry not found in the search result list - RTInsertHeadListWithCnt(&pP2PSvcInfo->searchResultList, &pSREntryToUpdate->List, &pP2PSvcInfo->searchResultListCnt); - if(ppSREntryOut) *ppSREntryOut = pSREntryToUpdate; - } - }while(FALSE); - - return rtStatus; - -} - -// -// Description: -// Make search result data from ProbeRsp, memory is allocated, -// svc-info is empty. -// -// Fixed fields including: -// search-id, dev-addr, dev-name, -// -// Var fields describing each services advertised by the dev are: -// adv-id, svc-name, (no svc-info), svc-status -// -// The advertised svc desc carried in advertised svc info attr contains: -// adv-id, svc-name-len, svc-name -// -// Indicate seek result event including the following info: -// 1. search-id (4) -// 2. dev-addr (6) -// 3. dev-name (n, n <= 32) -//---------------------------- -// 4. adv-id (4) -// 5. config-method (2) (addendum v0.43) -// 6. svc-name (n, n <= 255) -// 7. svc-info (n, n <= 65535) -// 8. svc-status (1) -// -RT_STATUS -P2PSvc_MakeSearchResultDataFromProbeRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN PP2PSVC_REQ_INFO_ENTRY pSeekInfoEntry, - IN pu1Byte devAddr, - IN POCTET_STRING posP2PAttrs, - IN OCTET_STRING osAdvSvcInfo, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntryOut - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_OBJ_LIST pObjList = NULL; - PP2PSVC_SR_LIST_ENTRY pSREntry = NULL; - u4Byte reqBufSize = 0; - - P2PSVC_CHECK_NULL(ppSREntryOut); - - P2PSVC_FUNC_IN(DBG_TRACE); - - do - { - u4Byte idxAdvSvc = 0, idxAdvSvcInfoBuf = 0; - u1Byte nAdvSvc = 0; - - *ppSREntryOut = NULL; - - if(0 == (reqBufSize = p2psvc_EvalSearchResultObjListLen(posP2PAttrs, osAdvSvcInfo, 0, &nAdvSvc))) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - reqBufSize += FIELD_OFFSET(P2PSVC_SR_LIST_ENTRY, srObjList); - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pSREntry, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pSREntry\n")); - break; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("alloc mem for size: %u\n", reqBufSize)); - - PlatformFillMemory(pSREntry, reqBufSize, 0xFE); - pSREntry->probeRspRxTime = 0; - pSREntry->sdReqTxTime = 0; - pSREntry->sdRspRxTime = 0; - pSREntry->bDirty = FALSE; - - pObjList = &pSREntry->srObjList; - - P2PSVC_OBJ_LIST_INIT(pObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_INDIC_SEARCH_RESULT, - P2PSVC_MIN_SUPPORT_VER); - - //1 Note that because we have search id in the obj, the search result would belong to a specific seek req - - // Make required objs, nObjs is updated accordingly - if(0 == P2PSvc_MakeSearchIdObj(pObjList, pSeekInfoEntry, NULL)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - if(0 == P2PSvc_MakeDevAddrObj(pObjList, devAddr)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - if(0 == P2PSvc_MakeDevNameObj_FromP2PAttrs(pObjList, posP2PAttrs)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - if(0 == P2PSvc_MakeSvcCountObj(pObjList, nAdvSvc)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - if(0 == P2PSvc_MakeIsSDDoneObj(pObjList, FALSE)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - - // Make svc desc obj list for each svc found - for(idxAdvSvc = 0, idxAdvSvcInfoBuf = 0; idxAdvSvc < nAdvSvc; idxAdvSvc++) - { - PP2PSVC_OBJ_LIST pSvcDescObjList = NULL; - u1Byte svcNameLen = 0; - - if(0 == P2PSvc_MakeSvcDescObjList(pObjList, &pSvcDescObjList)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - - // adv-id - P2PSvc_MakeAdvIdObj(pSvcDescObjList, *((pu4Byte)(osAdvSvcInfo.Octet + idxAdvSvcInfoBuf))); - idxAdvSvcInfoBuf += 4; - - // config-method (addendum v0.43) - P2PSvc_MakeConfigMethodObj(pSvcDescObjList, *((pu2Byte)(osAdvSvcInfo.Octet + idxAdvSvcInfoBuf))); - idxAdvSvcInfoBuf += 2; - - svcNameLen = *((pu1Byte)(osAdvSvcInfo.Octet + idxAdvSvcInfoBuf)); - idxAdvSvcInfoBuf += 1; - - // svc-name - P2PSvc_MakeSvcNameObj(pSvcDescObjList, svcNameLen, osAdvSvcInfo.Octet + idxAdvSvcInfoBuf); - idxAdvSvcInfoBuf += svcNameLen; - - pObjList->hdr.Length += P2PSVC_OBJ_LIST_VAR_LEN(pSvcDescObjList); - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - - *ppSREntryOut = pSREntry; - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, "P2PSvc_MakeSearchResultDataFromProbeRsp():\n", pObjList, P2PSVC_OBJ_LIST_LEN(pObjList)); - - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - if(pSREntry) P2PSvc_FreeMem(pSREntry, reqBufSize); - *ppSREntryOut = NULL; - } - - P2PSVC_FUNC_OUT(DBG_TRACE, rtStatus); - - return rtStatus; -} - -RT_STATUS -P2PSvc_MakeSearchResultDataFromSDRsp( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u1Byte searchId, - IN pu1Byte devAddr, - IN PP2P_SERVICE_RSP_TLV pSvcRspTlv, - OUT PP2PSVC_SR_LIST_ENTRY *ppSREntryOut - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2PSVC_SR_LIST_ENTRY pOldSREntry = NULL; - PP2PSVC_SR_LIST_ENTRY pNewSREntry = NULL; - PP2PSVC_OBJ_LIST pOldObjList = NULL; - PP2PSVC_OBJ_LIST pNewObjList = NULL; - u4Byte reqBufSize = 0; - - P2PSVC_CHECK_NULL(ppSREntryOut); - - P2PSVC_FUNC_IN(DBG_LOUD); - - do - { - u1Byte svcNameLen = 0; - pu1Byte pSvcNameBuf = NULL; - u4Byte advId = 0; - u1Byte svcStatus = 0; - u2Byte svcInfoLen = 0; - pu1Byte pSvcInfoBuf = NULL; - - u1Byte nSvcInfoDesc = 0; - u4Byte totalSvcNameLen = 0; - u4Byte totalSvcInfoLen = 0; - - PRT_OBJECT_HEADER pSearchIdObj = NULL; - PRT_OBJECT_HEADER pDevAddrObj = NULL; - PRT_OBJECT_HEADER pDevNameObj = NULL; - PRT_OBJECT_HEADER pIsSDDoneObj = NULL; - - u1Byte idxSvcInfoDesc = 0; - - while(RT_STATUS_SUCCESS == P2PSvc_ParseAnqpQueryRsp(pSvcRspTlv, nSvcInfoDesc, &svcNameLen, &pSvcNameBuf, &advId, &svcStatus, &svcInfoLen, &pSvcInfoBuf)) - { - totalSvcNameLen += svcNameLen; - totalSvcInfoLen += svcInfoLen; - nSvcInfoDesc++; - } - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_GetSearchResult(pP2PSvcInfo, searchId, devAddr, &pOldSREntry))) - { - break; - } - - pOldObjList = &pOldSREntry->srObjList; - - pSearchIdObj = P2PSvc_GetParam(pOldObjList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, 0); - pDevAddrObj = P2PSvc_GetParam(pOldObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0); - pDevNameObj = P2PSvc_GetParam(pOldObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME, 0); - pIsSDDoneObj = P2PSvc_GetParam(pOldObjList, P2PSVC_OBJ_HDR_ID_DATA_IS_SD_DONE, 0); - - if(pIsSDDoneObj && FALSE == *(PBOOLEAN)pIsSDDoneObj->Value) - { - *(PBOOLEAN)pIsSDDoneObj->Value = TRUE; - } - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_SR_LIST_ENTRY, srObjList); - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart); - reqBufSize += (RT_OBJECT_HEADER_SIZE + 1); // search-id - reqBufSize += (RT_OBJECT_HEADER_SIZE + 6); // dev-addr - reqBufSize += (RT_OBJECT_HEADER_SIZE + pDevNameObj->Length); // dev-name, no more than 32 - reqBufSize += (RT_OBJECT_HEADER_SIZE + 1); // svc count - reqBufSize += (RT_OBJECT_HEADER_SIZE + sizeof(BOOLEAN)); // is SD done - reqBufSize += nSvcInfoDesc * (FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart)); - reqBufSize += nSvcInfoDesc * (RT_OBJECT_HEADER_SIZE + 4); // adv-id - reqBufSize += (nSvcInfoDesc * (RT_OBJECT_HEADER_SIZE)) + totalSvcNameLen; // svc-name - reqBufSize += (nSvcInfoDesc * (RT_OBJECT_HEADER_SIZE)) + totalSvcInfoLen; // svc-info - reqBufSize += nSvcInfoDesc * (RT_OBJECT_HEADER_SIZE + 1); // svc-status - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pNewSREntry, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pSREntry\n")); - break; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("alloc mem for size: %u\n", reqBufSize)); - - PlatformFillMemory(pNewSREntry, reqBufSize, 0xFE); - pNewSREntry->probeRspRxTime = pOldSREntry->probeRspRxTime; - pNewSREntry->sdReqTxTime = 0; - pNewSREntry->sdRspRxTime = 0; - pNewSREntry->bDirty = FALSE; - - pNewObjList = &pNewSREntry->srObjList; - - P2PSVC_OBJ_LIST_INIT(pNewObjList, - RT_OB_HDR_TYPE_DATA, - P2PSVC_OBJ_HDR_ID_INDIC_SEARCH_RESULT, - P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeObj(pNewObjList, P2PSVC_OBJ_HDR_ID_DATA_SEARCH_ID, pSearchIdObj->Length, pSearchIdObj->Value); - P2PSvc_MakeObj(pNewObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, pDevAddrObj->Length, pDevAddrObj->Value); - P2PSvc_MakeObj(pNewObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_NAME, pDevNameObj->Length, pDevNameObj->Value); - P2PSvc_MakeObj(pNewObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_COUNT, sizeof(nSvcInfoDesc), &nSvcInfoDesc); - - if(pIsSDDoneObj != NULL) - P2PSvc_MakeObj(pNewObjList, P2PSVC_OBJ_HDR_ID_DATA_IS_SD_DONE, sizeof(BOOLEAN), pIsSDDoneObj->Value); - - for(idxSvcInfoDesc = 0; idxSvcInfoDesc < nSvcInfoDesc; idxSvcInfoDesc++) - { - PP2PSVC_OBJ_LIST pSvcDescObjList = NULL; - u1Byte svcNameLen = 0; - - if(0 == P2PSvc_MakeSvcDescObjList(pNewObjList, &pSvcDescObjList)) {rtStatus = RT_STATUS_INVALID_DATA ; break;} - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_ParseAnqpQueryRsp(pSvcRspTlv, idxSvcInfoDesc, &svcNameLen, &pSvcNameBuf, &advId, &svcStatus, &svcInfoLen, &pSvcInfoBuf))) - { - break; - } - - P2PSvc_MakeObj(pSvcDescObjList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, sizeof(advId), &advId); - P2PSvc_MakeObj(pSvcDescObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_NAME, svcNameLen, pSvcNameBuf); - P2PSvc_MakeObj(pSvcDescObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_INFO, svcInfoLen, pSvcInfoBuf); - P2PSvc_MakeObj(pSvcDescObjList, P2PSVC_OBJ_HDR_ID_DATA_SVC_STATUS, sizeof(svcStatus), &svcStatus); - - pNewObjList->hdr.Length += P2PSVC_OBJ_LIST_VAR_LEN(pSvcDescObjList); - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - - *ppSREntryOut = pNewSREntry; - - // Free the old one - RTRemoveEntryListWithCnt((PRT_LIST_ENTRY)pOldSREntry, &pP2PSvcInfo->searchResultListCnt); - P2PSvc_FreeMem(pOldSREntry, P2PSVC_SR_LIST_LEN(pOldSREntry)); - - }while(FALSE); - - if(RT_STATUS_SUCCESS != rtStatus) - { - if(pNewSREntry) P2PSvc_FreeMem(pNewSREntry, reqBufSize); - *ppSREntryOut = NULL; - } - - P2PSVC_FUNC_OUT(DBG_LOUD, rtStatus); - - return rtStatus; -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) diff --git a/network/wlan/WDI/COMMON/P2PSvc_Utility.c b/network/wlan/WDI/COMMON/P2PSvc_Utility.c deleted file mode 100644 index 02952c17..00000000 --- a/network/wlan/WDI/COMMON/P2PSvc_Utility.c +++ /dev/null @@ -1,379 +0,0 @@ -#include "Mp_Precomp.h" - -#include "P2PSvc_Internal.h" - -#if (P2P_SUPPORT == 1) -#if (P2PSVC_SUPPORT == 1) - -u4Byte gP2PSvcMemAllocCount = 0; -u4Byte gP2PSvcMemFreeCount = 0; - - -RT_STATUS -P2PSvc_AllocMem( - IN PVOID Adapter, - OUT PVOID *ppPtr, - IN u4Byte len - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - rtStatus = PlatformAllocateMemory(Adapter, ppPtr, len); - if(RT_STATUS_SUCCESS == rtStatus) gP2PSvcMemAllocCount++; - else rtStatus = RT_STATUS_RESOURCE; - - return rtStatus; -} - -VOID -P2PSvc_FreeMem( - IN PVOID pPtr, - IN u4Byte len - ) -{ - PlatformFreeMemory(pPtr, len); - gP2PSvcMemFreeCount++; -} - -RT_STATUS -P2PSvc_GetAdvSvcByAdvId( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte advId, - OUT PP2PSVC_REQ_INFO_ENTRY *ppAdvSvcEntry - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - do - { - PRT_LIST_ENTRY pEntry = NULL; - - for(pEntry = RTGetHeadList(&pP2PSvcInfo->advSvcList); pEntry != &pP2PSvcInfo->advSvcList; pEntry = RTNextEntryList(pEntry)) - { - PP2PSVC_REQ_INFO_ENTRY pInfoEntry = (PP2PSVC_REQ_INFO_ENTRY)pEntry; - PRT_OBJECT_HEADER pObj = NULL; - - pObj = P2PSvc_GetParam(&pInfoEntry->objList, P2PSVC_OBJ_HDR_ID_DATA_ADV_ID, 0); - if(sizeof(u4Byte) != pObj->Length) {rtStatus = RT_STATUS_INVALID_LENGTH; break;} - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("compare peer adv-id(%u) with self (%u)\n", advId, *(pu4Byte)pObj->Value)); - if(advId != *(pu4Byte)pObj->Value) continue; - - if(ppAdvSvcEntry) *ppAdvSvcEntry = pInfoEntry; - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - break; - } - - }while(FALSE); - - return rtStatus; - -} - -BOOLEAN -P2PSvc_GetP2PAttr( - IN POCTET_STRING posP2PAttrs, - IN u1Byte attrId, - IN u4Byte minLen, - OUT POCTET_STRING posAttr - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - u1Byte *pos = NULL; - u1Byte *end = NULL; - - posAttr->Length = 0; - posAttr->Octet = NULL; - - pos = posP2PAttrs->Octet; - end = pos + posP2PAttrs->Length; - - while(pos < end) - { - u2Byte attrLen = 0; - - if(RT_STATUS_SUCCESS != (status = p2p_parse_ValidateAttribute(pos, end, &attrLen))) - { - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "rx invalid attribute\n", posP2PAttrs->Octet, posP2PAttrs->Length); - break; - } - - // Parse the attribute - if(attrId == pos[0]) - { - posAttr->Length = ReadEF2Byte(pos + 1); - posAttr->Octet = pos + 3; - break; - } - - // Parse next attribute - pos += 3 + attrLen; - } - - return (posAttr->Octet) ? (TRUE) : (FALSE); -} - -// -// Description: -// To indicate event with associated data (represented in object list) to upper layer. -// -RT_STATUS -P2PSvc_Indicate( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte bufLen, - IN PVOID pvBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - do - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("indicate a buf with length: %u\n", bufLen)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "indicated data:\n", pvBuf, bufLen); - - if(RT_STATUS_SUCCESS != (rtStatus = PlatformIndicateCustomStatus(pP2PSvcInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_SVC, - RT_CUSTOM_INDI_TARGET_IHV, - pvBuf, bufLen) - ) - ) - { - break; - } - - }while(FALSE); - - return rtStatus; - -} - -RT_STATUS -P2PSvc_IndicateFrameSent( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte id, - IN pu1Byte peerMac, - IN u2Byte attrLen, - IN pu1Byte pAttrs - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PVOID pBuf = NULL; - u4Byte reqBufSize = 0; - - do - { - PP2PSVC_OBJ_LIST pObjList = NULL; - - reqBufSize = 0 - + FIELD_OFFSET(P2PSVC_OBJ_LIST, varStart) - + (RT_OBJECT_HEADER_SIZE + 6) - + (RT_OBJECT_HEADER_SIZE + attrLen) - ; - - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuff\n")); - break; - } - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - P2PSVC_OBJ_LIST_INIT(pObjList, RT_OB_HDR_TYPE_DATA, id, P2PSVC_MIN_SUPPORT_VER); - - P2PSvc_MakeDevAddrObj(pObjList, peerMac); - P2PSvc_MakeP2PAttrsObj(pObjList, attrLen, pAttrs); - - if(RT_STATUS_SUCCESS != (rtStatus = PlatformIndicateCustomStatus(pP2PSvcInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_SVC, - RT_CUSTOM_INDI_TARGET_IHV, - pObjList, reqBufSize) - ) - ) - { - break; - } - - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - return rtStatus; - -} - - -// -// Description: -// To indicate event with no data to upper layer. -// -RT_STATUS -P2PSvc_Notify( - IN PP2PSVC_INFO pP2PSvcInfo, - IN u4Byte id - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PVOID pBuf = NULL; - u4Byte reqBufSize = 0; - - do - { - PP2PSVC_OBJ_LIST pObjList = NULL; - - reqBufSize = 0; - reqBufSize += FIELD_OFFSET(P2PSVC_OBJ_LIST, ObjTab); - - if(RT_STATUS_SUCCESS != (rtStatus = P2PSvc_AllocMem(pP2PSvcInfo->pAdapter, &pBuf, reqBufSize))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Failed to allocate memory for pBuff\n")); - break; - } - - pObjList = (PP2PSVC_OBJ_LIST)pBuf; - P2PSVC_OBJ_LIST_INIT(pObjList, RT_OB_HDR_TYPE_DATA, id, P2PSVC_MIN_SUPPORT_VER); - - if(RT_STATUS_SUCCESS != (rtStatus = PlatformIndicateCustomStatus(pP2PSvcInfo->pAdapter, - RT_CUSTOM_EVENT_P2P_SVC, - RT_CUSTOM_INDI_TARGET_IHV, - pObjList, reqBufSize) - ) - ) - { - break; - } - - }while(FALSE); - - if(pBuf) P2PSvc_FreeMem(pBuf, reqBufSize); - - return rtStatus; - -} - -BOOLEAN -P2PSvc_SeekReqIsBcst( - IN PP2PSVC_OBJ_LIST pObjList - ) -{ - PRT_OBJECT_HEADER pSeekDevAddrObj = NULL; - BOOLEAN bIsBcst = FALSE; - - do - { - pSeekDevAddrObj = P2PSvc_GetParam(pObjList, P2PSVC_OBJ_HDR_ID_DATA_DEV_ADDR, 0); - if(MacAddr_isBcst(pSeekDevAddrObj->Value)) - { - bIsBcst = TRUE; - } - }while(FALSE); - - return bIsBcst; -} - -BOOLEAN -P2PSvc_MatchSubstring( - IN pu1Byte targetBuf, - IN u4Byte targetBufLen, - IN pu1Byte patternBuf, - IN u4Byte patternBufLen - ) -{ - u4Byte targetIdx = 0; - u4Byte patternIdx = 0; - BOOLEAN bMatch = FALSE; - - if(targetBufLen < patternBufLen) return FALSE; - - while(targetIdx < targetBufLen && patternIdx < patternBufLen) - { - if(targetBuf[targetIdx] == patternBuf[patternIdx]) - { - ++targetIdx; - ++patternIdx; - } - else - { - targetIdx = targetIdx + 1 - patternIdx; - patternIdx = 0; - } - } - - if(patternIdx == patternBufLen) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("match, idx: %u\n", patternIdx)); - bMatch = TRUE; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bMatch: %u\n", bMatch)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "target:\n", targetBuf, targetBufLen); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "pattern:\n", patternBuf, patternBufLen); - - return bMatch; -} - -RT_STATUS -P2PSvc_GetDevNameFromDevInfoAttr( - IN POCTET_STRING posP2PAttrs, - OUT POCTET_STRING posDevName - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - // dev-info format: - // evAddr(6), configMethod(2), primDevType(8), nSecDevTypes(1), secDevTypeList(8*n), devName TLV(2 + 2 + n) - // - - do - { - OCTET_STRING osDevInfo = {NULL, 0}; - u2Byte offsetNSecDevTypes = 0; - u1Byte nSecDevTypes = 0; - u2Byte offsetDevName = 0; - u2Byte devNameLen = 0; - - if(!P2PSvc_GetP2PAttr(posP2PAttrs, P2P_ATTR_DEVICE_INFO, 6 + 2 + 8 + 1, &osDevInfo)) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - RT_PRINT_DATA(COMP_P2P, DBG_TRACE, - "P2PSvc_GetDevNameFromDevInfoAttr(): osDevInfo:\n", - osDevInfo.Octet, osDevInfo.Length); - - offsetNSecDevTypes = 6 + 2 + 8; - - if (osDevInfo.Octet != NULL) - { - nSecDevTypes = *(pu1Byte)(osDevInfo.Octet + offsetNSecDevTypes); - } - offsetDevName = offsetNSecDevTypes + 1 + (8 * nSecDevTypes) + 2 + 2; - - if(osDevInfo.Length < offsetDevName + 1) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(osDevInfo.Length - 6 + 2 + 8 + 1 + 8 * nSecDevTypes + 2 + 2 <= 0) - { - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - devNameLen = osDevInfo.Length - (6 + 2 + 8 + 1 + 8 * nSecDevTypes + 2 + 2); - - posDevName->Octet = osDevInfo.Octet + offsetDevName; - posDevName->Length = devNameLen; - - }while(FALSE); - - return rtStatus; - -} - -#endif // #if (P2PSVC_SUPPORT == 1) -#endif // #if (P2P_SUPPORT == 1) diff --git a/network/wlan/WDI/COMMON/P2P_AdditionalIe.c b/network/wlan/WDI/COMMON/P2P_AdditionalIe.c deleted file mode 100644 index bf943808..00000000 --- a/network/wlan/WDI/COMMON/P2P_AdditionalIe.c +++ /dev/null @@ -1,131 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_AdditionalIe.tmh" -#endif - -#include "P2P_AdditionalIe.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -P2P_AddIe_Init( - IN PP2P_ADD_IES addIes - ) -{ - PlatformZeroMemory(addIes, sizeof(*addIes)); - - return; -} - -VOID -P2P_AddIe_Free( - IN PP2P_ADD_IES addIes - ) -{ - u4Byte itAddIe = 0; - - for(itAddIe = 0; itAddIe < P2P_ADD_IE_MAX; itAddIe++) - { - if(addIes->addIe[itAddIe]) - { - FrameBuf_Free(addIes->addIe[itAddIe]); - addIes->addIe[itAddIe] = NULL; - } - } -} - -BOOLEAN -P2P_AddIe_Set( - IN PP2P_ADD_IES addIes, - IN P2P_ADD_IE_ID id, - IN u4Byte bufLen, - IN u1Byte *pBuf - ) -{ - FRAME_BUF srcBuf; - FRAME_BUF *pClonedSrcBuf = NULL; - FRAME_BUF **ppDestBuf = NULL; - - if(P2P_ADD_IE_MAX < id) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: invalid id: %u!\n", __FUNCTION__, id)); - return FALSE; - } - - FrameBuf_Init((u2Byte)bufLen, (u2Byte)bufLen, pBuf, &srcBuf); - - - ppDestBuf = &(addIes->addIe[id]); - - if(NULL == (pClonedSrcBuf = FrameBuf_Clone(&srcBuf))) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Frame buffer clone Failure!\n", __FUNCTION__)); - return FALSE; - } - - if(*ppDestBuf) FrameBuf_Free(*ppDestBuf); - - *ppDestBuf = pClonedSrcBuf; - - return TRUE; -} - -const FRAME_BUF * -P2P_AddIe_Get( - IN const PP2P_ADD_IES addIes, - IN P2P_ADD_IE_ID id - ) -{ - FRAME_BUF *pBuf = NULL; - - if(P2P_ADD_IE_MAX < id) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: invalid id: %u!\n", __FUNCTION__, id)); - return NULL; - } - - if (addIes->addIe != NULL) - { - // Prefast warning C6385: Reading invalid data from 'addIes->addIe': the readable size is '44' bytes, but 'id' bytes may be read. - // false positive, disable it here. -#pragma warning( disable: 6385 ) - pBuf = addIes->addIe[id]; - } - - return pBuf; -} - -u2Byte -P2P_AddIe_Append( - IN const PP2P_ADD_IES addIes, - IN P2P_ADD_IE_ID id, - IN FRAME_BUF *pBuf - ) -{ - const FRAME_BUF *pAddIeBuf = NULL; - u2Byte bytesWritten = 0; - - pAddIeBuf = P2P_AddIe_Get(addIes, id); - - if(pAddIeBuf) - { - if(FrameBuf_Append(pBuf, pAddIeBuf)) - { - bytesWritten = FrameBuf_Length(pAddIeBuf); - } - FrameBuf_Dump(pAddIeBuf, 0, DBG_LOUD, __FUNCTION__); - } - - return bytesWritten; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_AdditionalIe.h b/network/wlan/WDI/COMMON/P2P_AdditionalIe.h deleted file mode 100644 index c5bb89eb..00000000 --- a/network/wlan/WDI/COMMON/P2P_AdditionalIe.h +++ /dev/null @@ -1,66 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_ADDITIONAL_IE_H -#define __INC_P2P_ADDITIONAL_IE_H - -typedef enum _P2P_ADD_IE_ID -{ - P2P_ADD_IE_BEACON = 0, - P2P_ADD_IE_PROBE_RESPONSE, - P2P_ADD_IE_DEFAULT_REQUEST, - P2P_ADD_IE_PROBE_REQUEST, - P2P_ADD_IE_PROVISION_DISCOVERY_REQUEST, - P2P_ADD_IE_PROVISION_DISCOVERY_RESPONSE, - P2P_ADD_IE_GO_NEGOTIATION_REQUEST, - P2P_ADD_IE_GO_NEGOTIATION_RESPONSE, - P2P_ADD_IE_GO_NEGOTIATION_CONFIRM, - P2P_ADD_IE_INVITATION_REQUEST, - P2P_ADD_IE_INVITATION_RESPONSE, - //------------------------------------------------------------------------ - P2P_ADD_IE_MAX -}P2P_ADD_IE_ID, *PP2P_ADD_IE_ID; - -typedef struct _P2P_ADD_IES -{ - FRAME_BUF *addIe[P2P_ADD_IE_MAX]; -}P2P_ADD_IES, *PP2P_ADD_IES; - -VOID -P2P_AddIe_Init( - IN PP2P_ADD_IES addIes - ); - -VOID -P2P_AddIe_Free( - IN PP2P_ADD_IES addIes - ); - -BOOLEAN -P2P_AddIe_Set( - IN PP2P_ADD_IES addIes, - IN P2P_ADD_IE_ID id, - IN u4Byte bufLen, - IN u1Byte *pBuf - ); - -const FRAME_BUF * -P2P_AddIe_Get( - IN const PP2P_ADD_IES addIes, - IN P2P_ADD_IE_ID id - ); - -u2Byte -P2P_AddIe_Append( - IN const PP2P_ADD_IES addIes, - IN P2P_ADD_IE_ID id, - IN FRAME_BUF *pBuf - ); - -#endif // #ifndef __INC_P2P_ADDITIONAL_IE_H diff --git a/network/wlan/WDI/COMMON/P2P_Attribute.c b/network/wlan/WDI/COMMON/P2P_Attribute.c deleted file mode 100644 index 1c2e20d8..00000000 --- a/network/wlan/WDI/COMMON/P2P_Attribute.c +++ /dev/null @@ -1,660 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Attribute.tmh" -#endif - -#if (P2P_SUPPORT == 1) -#include "P2P_Internal.h" - -#ifdef MOD_TRACE_TAG -#undef MOD_TRACE_TAG -#endif -#define MOD_TRACE_TAG "P2PAttr" - -#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] -#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static -VOID -p2pattr_make_DevType( - IN FRAME_BUF *pBuf, - IN u2Byte catId, - IN const u1Byte *oui, - IN u2Byte subCatId - ) -{ - FrameBuf_Add_be_u2(pBuf, catId); - FrameBuf_Add_Data(pBuf, oui, 4); - FrameBuf_Add_be_u2(pBuf, subCatId); - - return; -} - -static -VOID -p2pattr_make_WpsDevType( - IN FRAME_BUF *pBuf, - IN const P2P_WPS_ATTRIBUTES_DEVICE_TYPE *type - ) -{ - p2pattr_make_DevType(pBuf, type->CategoryId, type->Oui, type->SubCategoryId); - - return; -} - -static -VOID -p2pattr_make_WpsSecDevTypeList( - IN FRAME_BUF *pBuf, - IN u1Byte numSecDevType, - IN const P2P_WPS_ATTRIBUTES_DEVICE_TYPE *pSecDevTypeList - ) -{ - u1Byte itTypeList = 0; - - FrameBuf_Add_u1(pBuf, numSecDevType); - for(itTypeList = 0; itTypeList < numSecDevType; itTypeList++) - { - p2pattr_make_WpsDevType(pBuf, pSecDevTypeList + itTypeList); - } - - return; -} - -static -VOID -p2pattr_make_DevName( - IN FRAME_BUF *pBuf, - IN u1Byte devNameLen, - IN const u1Byte *devName - ) -{ - FrameBuf_Add_be_u2(pBuf, P2P_WPS_ATTR_TAG_DEVICE_NAME); - FrameBuf_Add_be_u2(pBuf, devNameLen); - FrameBuf_Add_Data(pBuf, devName, devNameLen); - - return; -} - -static -VOID -p2pattr_make_CliInfoDesc( - IN FRAME_BUF *pBuf, - IN const RT_WLAN_STA *pCli - ) -{ - const P2P_CLIENT_INFO_DISCRIPTOR *pDesc = &pCli->P2PClientInfoDesc; - const P2P_WPS_ATTRIBUTES *pWps = &pDesc->WpsAttributes; - u1Byte *pLen = NULL; - u2Byte initBufLen = 0; - - if(NULL == (pLen = FrameBuf_Add(pBuf, 1))) return; - - initBufLen = FrameBuf_Length(pBuf); - - FrameBuf_Add_Data(pBuf, pDesc->DeviceAddress, 6); - FrameBuf_Add_Data(pBuf, pDesc->InterfaceAddress, 6); - FrameBuf_Add_u1(pBuf, pDesc->DeviceCapability); - FrameBuf_Add_be_u2(pBuf, pWps->ConfigMethod); - p2pattr_make_WpsDevType(pBuf, &pWps->PrimaryDeviceType); - p2pattr_make_WpsSecDevTypeList(pBuf, pWps->SecondaryDeviceTypeLength, pWps->SecondaryDeviceTypeList); - p2pattr_make_DevName(pBuf, pWps->DeviceNameLength, pWps->DeviceName); - - if(FrameBuf_Length(pBuf) - initBufLen > 0 && FrameBuf_Length(pBuf) - initBufLen < 0xFF) - { - *pLen = (u1Byte)(FrameBuf_Length(pBuf) - initBufLen); - } - - return; -} - -static -VOID -p2pattr_make_CliInfoDescList( - IN FRAME_BUF *pBuf, - IN const RT_WLAN_STA *pCliList - ) -{ - u1Byte itList = 0; - - for(itList = 0; itList < ASSOCIATE_ENTRY_NUM; itList++) - { - const RT_WLAN_STA *pEntry = pCliList + itList; - - if(!(pEntry->bUsed && pEntry->bAssociated && pEntry->bP2PClient)) - continue; - - p2pattr_make_CliInfoDesc(pBuf, pEntry); - } - - return; -} - -static -VOID -p2pattr_make_IntfAddrList( - IN FRAME_BUF *pBuf, - IN u1Byte numIntfAddr, - IN const pu1Byte intfAddrList - ) -{ - u1Byte itList = 0; - - FrameBuf_Add_u1(pBuf, numIntfAddr); - - for(itList = 0; itList < numIntfAddr; itList++) - { - FrameBuf_Add_Data(pBuf, intfAddrList + (6 * itList), 6); - } - - return; -} - -VOID -p2pattr_Make_ChannelEntryList( - IN FRAME_BUF *pBuf, - IN const P2P_CHANNELS *commonChannels - ) -{ - u1Byte it = 0; - - for(it = 0; it < commonChannels->regClasses; it++) - { - if(!commonChannels->regClass[it].channels) - continue; - - P2PAttr_Make_ChannelEntry(pBuf, - commonChannels->regClass[it].regClass, - commonChannels->regClass[it].channels, - commonChannels->regClass[it].channel); - } - - return; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -P2PAttr_Update_AttrHdrLen( - IN FRAME_BUF *pBuf, - IN const u1Byte *pLen - ) -{ - WriteEF2Byte(pLen, (u2Byte)(FrameBuf_Tail(pBuf) - pLen - 2)); - return; -} - -VOID -P2PAttr_Make_Status( - IN FRAME_BUF *pBuf, - IN u1Byte status - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_STATUS); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, status); - - //RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] statue: %u, channel: %u\n", MOD_TRACE_TAG, status)); - - return; -} - -VOID -P2PAttr_Make_MinorReasonCode( - IN FRAME_BUF *pBuf, - IN u1Byte minorReasonCode - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_MINOR_REASON_CODE); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, minorReasonCode); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] minor reason code: %u\n", MOD_TRACE_TAG, minorReasonCode)); - - return; -} - -VOID -P2PAttr_Make_Capability( - IN FRAME_BUF *pBuf, - IN u1Byte devCap, - IN u1Byte grpCap - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_CAPABILITY); - FrameBuf_Add_le_u2(pBuf, 2); - FrameBuf_Add_u1(pBuf, devCap); - FrameBuf_Add_u1(pBuf, grpCap); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] devCap: %02X, grpCap: %02X\n", MOD_TRACE_TAG, devCap, grpCap)); - - return; -} - -VOID -P2PAttr_Make_DevId( - IN FRAME_BUF *pBuf, - IN const pu1Byte devAddr - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_DEVICE_ID); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, devAddr, 6); - - //RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] devAddr: " MACSTR "\n", MOD_TRACE_TAG, MAC2STR(devAddr))); - - return; -} - -VOID -P2PAttr_Make_GoIntent( - IN FRAME_BUF *pBuf, - IN u1Byte intent - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_OWNER_INTENT); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, intent); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] intent: %u, tie: %u\n", MOD_TRACE_TAG, intent >> 1, intent & 0x01)); - - return; -} - -VOID -P2PAttr_Make_ConfigTimeout( - IN FRAME_BUF *pBuf, - IN u1Byte goTimeout, - IN u1Byte cliTimeout - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_CONFIGURATION_TIMEOUT); - FrameBuf_Add_le_u2(pBuf, 2); - FrameBuf_Add_u1(pBuf, goTimeout); - FrameBuf_Add_u1(pBuf, cliTimeout); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] goTimeout: %u (10ms), cliTimeout: %u (10ms)\n", MOD_TRACE_TAG, goTimeout, cliTimeout)); - - return; -} - -VOID -P2PAttr_Make_ListenChannel( - IN FRAME_BUF *pBuf, - IN const char * country, - IN u1Byte regClass, - IN u1Byte channel - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_LISTEN_CHANNEL); - FrameBuf_Add_le_u2(pBuf, 5); - FrameBuf_Add_Data(pBuf, country, 3); - FrameBuf_Add_u1(pBuf, regClass); - FrameBuf_Add_u1(pBuf, channel); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] country: %c%c(0x%02x), reg class: %u, channel: %u\n", MOD_TRACE_TAG, country[0], country[1], country[2], regClass, channel)); - - return; -} - -VOID -P2PAttr_Make_GroupBssid( - IN FRAME_BUF *pBuf, - IN const pu1Byte grpBssid - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_BSSID); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, grpBssid, 6); - - //RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] grpBssid: " MACSTR "\n", MOD_TRACE_TAG, MAC2STR(grpBssid))); - - return; -} - -VOID -P2PAttr_Make_ExtListenTiming( - IN FRAME_BUF *pBuf, - IN u2Byte period, - IN u2Byte interval - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_EXT_LISTEN_TIMING); - FrameBuf_Add_le_u2(pBuf, 4); - FrameBuf_Add_le_u2(pBuf, period); - FrameBuf_Add_le_u2(pBuf, interval); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] period: %u (ms), interval: %u (ms)\n", MOD_TRACE_TAG, period, interval)); - - return; -} - -VOID -P2PAttr_Make_IntendedIntfAddr( - IN FRAME_BUF *pBuf, - IN const pu1Byte intfAddr - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_INTENDED_INTERFACE_ADDRESS); - FrameBuf_Add_le_u2(pBuf, 6); - FrameBuf_Add_Data(pBuf, intfAddr, 6); - - //RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] intended intf Addr: " MACSTR "\n", MOD_TRACE_TAG, MAC2STR(intfAddr))); - - return; -} - -VOID -P2PAttr_Make_Manageability( - IN FRAME_BUF *pBuf, - IN u1Byte manageability - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_MANAGEABILITY); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, manageability); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] manageability: %u\n", MOD_TRACE_TAG, manageability)); - - return; -} - -VOID -P2PAttr_Make_ChannelEntry( - IN FRAME_BUF *pBuf, - IN u1Byte regClass, - IN u1Byte nChannels, - IN const u1Byte *channelList - ) -{ - u1Byte it = 0; - - if(0 == nChannels) - return; - - // Regulatory class - FrameBuf_Add_u1(pBuf, regClass); - - // Number of channels - FrameBuf_Add_u1(pBuf, nChannels); - - // Channel list - for(it = 0; it < nChannels; it++) - FrameBuf_Add_u1(pBuf, channelList[it]); - - return; -} - -VOID -P2PAttr_Make_ChannelList( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const P2P_CHANNELS *channels - ) -{ - u1Byte *pLen = NULL; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // If the default port is connected, then only use the default port channel ---------------------- - if(MgntLinkStatusQuery(GetDefaultAdapter(pP2PInfo->pAdapter)) == RT_MEDIA_CONNECT) - { - #if 0 - #if (MULTICHANNEL_SUPPORT == 1) // For Compilation: Only PCI-E Support MultiChannel Now - - u1Byte uPortConnected20MhzChannel = MultiChannelGetPortConnected20MhzChannel(GetDefaultAdapter(pP2PInfo->pAdapter)); - - MgntActSet_P2PChannelList( - pP2PInfo->pAdapter, - 1, - &uPortConnected20MhzChannel - ); - - #endif - #endif - } - else - { - P2PInitializeChannelEntryList(pP2PInfo); - } - } - // ---------------------------------------------------------------------------------- - - FrameBuf_Add_u1(pBuf, P2P_ATTR_CHANNEL_LIST); - pLen = FrameBuf_Add(pBuf, 2); - FrameBuf_Add_Data(pBuf, pP2PInfo->CountryString, sizeof(pP2PInfo->CountryString)); - p2pattr_Make_ChannelEntryList(pBuf, channels); - - P2PAttr_Update_AttrHdrLen(pBuf, pLen); - - return; -} - -VOID -P2PAttr_Make_Noa( - IN FRAME_BUF *pBuf, - IN u1Byte noaIEIndex, - IN BOOLEAN bOppPS, - IN u1Byte ctWindow, - IN u1Byte noaDescNum, - IN const P2P_NOA_DESCRIPTOR *noaDesc - ) -{ - pu1Byte pLen = NULL; - u1Byte oppPsAndCtWindow = 0; - u1Byte itNoaDesc = 0; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_NOTICE_OF_ABSENCE); - if(NULL == (pLen = FrameBuf_Add(pBuf, 2))) return; - - FrameBuf_Add_u1(pBuf, noaIEIndex); - - oppPsAndCtWindow = 0; - oppPsAndCtWindow |= (bOppPS) ? BIT7 : 0; - oppPsAndCtWindow |= (ctWindow & (~BIT7)); - FrameBuf_Add_u1(pBuf, oppPsAndCtWindow); - - for(itNoaDesc = 0; itNoaDesc < noaDescNum; itNoaDesc++) - { - if(!noaDesc[itNoaDesc].bValid) continue; - - FrameBuf_Add_u1(pBuf, noaDesc[itNoaDesc].CountOrType); - FrameBuf_Add_le_u4(pBuf, noaDesc[itNoaDesc].Duration); - FrameBuf_Add_le_u4(pBuf, noaDesc[itNoaDesc].Interval); - FrameBuf_Add_le_u4(pBuf, noaDesc[itNoaDesc].StartTime); - } - - P2PAttr_Update_AttrHdrLen(pBuf, pLen); - - return; -} - -VOID -P2PAttr_Make_NoaFromPsSet( - IN FRAME_BUF *pBuf, - IN const P2P_POWERSAVE_SET *pPs - ) -{ - pu1Byte pLen = NULL; - u4Byte itNoaDesc = 0; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_NOTICE_OF_ABSENCE); - if(NULL == (pLen = FrameBuf_Add(pBuf, 2))) return; - - for(itNoaDesc = 0; itNoaDesc < P2P_MAX_NUM_NOA_DESC; itNoaDesc++) - { - u1Byte countType = 0; - - if(FALSE == pPs->NoASet[itNoaDesc].bNoAEn) continue; - - if(2 < pPs->NoASet[itNoaDesc].NoACnt || pPs->NoASet[itNoaDesc].NoACnt < 1) - countType = 1; - else - countType = pPs->NoASet[itNoaDesc].NoACnt; - - FrameBuf_Add_u1(pBuf, countType); - FrameBuf_Add_le_u4(pBuf, pPs->NoASet[itNoaDesc].NoADur); - FrameBuf_Add_le_u4(pBuf, pPs->NoASet[itNoaDesc].NoAInt); - } - - P2PAttr_Update_AttrHdrLen(pBuf, pLen); - - return; -} - -VOID -P2PAttr_Make_DevInfo( - IN FRAME_BUF *pBuf, - IN const u1Byte *devAddr, - IN u2Byte configMethods, - IN const P2P_WPS_ATTRIBUTES_DEVICE_TYPE *pPrimDevType, - IN u1Byte numSecDevType, - IN const P2P_WPS_ATTRIBUTES_DEVICE_TYPE *pSecDevTypeList, - IN u1Byte devNameLen, - IN const u1Byte *devName - ) -{ - u1Byte *pLen = NULL; - u1Byte itTypeList = 0; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_DEVICE_INFO); - if(NULL == (pLen = FrameBuf_Add(pBuf, 2))) return; - - FrameBuf_Add_Data(pBuf, devAddr, 6); - FrameBuf_Add_be_u2(pBuf, configMethods); - p2pattr_make_WpsDevType(pBuf, pPrimDevType); - p2pattr_make_WpsSecDevTypeList(pBuf, numSecDevType, pSecDevTypeList); - p2pattr_make_DevName(pBuf, devNameLen, devName); - - P2PAttr_Update_AttrHdrLen(pBuf, pLen); - - //FrameBuf_DumpFrom(pBuf, pLen - 1, COMP_P2P, FrameBuf_DbgLevel(pBuf), __FUNCTION__); - - return; -} - -VOID -P2PAttr_Make_GroupInfo( - IN FRAME_BUF *pBuf, - IN const RT_WLAN_STA *pCliList - ) -{ - - pu1Byte pLen = NULL; - FRAME_BUF tBuf; - - FrameBuf_Init(FrameBuf_TailRoom(pBuf), 0, FrameBuf_MTail(pBuf), &tBuf); - - FrameBuf_Add_u1(&tBuf, P2P_ATTR_GROUP_INFO); - if(NULL == (pLen = FrameBuf_Add(&tBuf, 2))) return; - - p2pattr_make_CliInfoDescList(&tBuf, pCliList); - - P2PAttr_Update_AttrHdrLen(&tBuf, pLen); - - if(0 == FrameBuf_Length(&tBuf)) - { - // Clause 3.2.4: the p2p group owner shall not - // include a p2p group info subelement if it - // has zero connected p2p clients - return; - } - - FrameBuf_Add(pBuf, FrameBuf_Length(&tBuf)); - - //FrameBuf_DumpFrom(pBuf, pLen - 1, COMP_P2P, FrameBuf_DbgLevel(pBuf), __FUNCTION__); - - return; -} - -VOID -P2PAttr_Make_GroupId( - IN FRAME_BUF *pBuf, - IN const pu1Byte grpDevAddr, - IN const pu1Byte grpSsid, - IN u1Byte grpSsidLen - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_GROUP_ID); - FrameBuf_Add_le_u2(pBuf, 6 + grpSsidLen); - FrameBuf_Add_Data(pBuf, grpDevAddr, 6); - FrameBuf_Add_Data(pBuf, grpSsid, grpSsidLen); - - //RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] grpDevAddr: " MACSTR "\n", MOD_TRACE_TAG, MAC2STR(grpDevAddr))); - RT_PRINT_DATA(COMP_P2P, FrameBuf_DbgLevel(pBuf), "grpSsid", grpSsid, grpSsidLen); - - return; -} - - -VOID -P2PAttr_Make_Interface( - IN FRAME_BUF *pBuf, - IN const pu1Byte devAddr, - IN u1Byte numIntfAddr, - IN const pu1Byte intfAddrList - ) -{ - pu1Byte pLen = NULL; - - FrameBuf_Add_u1(pBuf, P2P_ATTR_INTERFACE); - if(NULL == (pLen = FrameBuf_Add(pBuf, 2))) return; - - FrameBuf_Add_Data(pBuf, devAddr, 6); - p2pattr_make_IntfAddrList(pBuf, numIntfAddr, intfAddrList); - - P2PAttr_Update_AttrHdrLen(pBuf, pLen); - - //FrameBuf_DumpFrom(pBuf, pLen - 1, COMP_P2P, DBG_LOUD, __FUNCTION__); - - return; -} - -VOID -P2PAttr_Make_OperatingChannel( - IN FRAME_BUF *pBuf, - IN const char * country, - IN u1Byte regClass, - IN u1Byte channel - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_OP_CHANNEL); - FrameBuf_Add_le_u2(pBuf, 5); - FrameBuf_Add_Data(pBuf, country, 3); - FrameBuf_Add_u1(pBuf, regClass); - FrameBuf_Add_u1(pBuf, channel); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] country: 0x%02X%02X%02X, reg class: %u, channel: %u\n", MOD_TRACE_TAG, country[0], country[1], country[2], regClass, channel)); - - return; -} - -VOID -P2PAttr_Make_InvitationFlags( - IN FRAME_BUF *pBuf, - IN u1Byte flags - ) -{ - FrameBuf_Add_u1(pBuf, P2P_ATTR_INVITATION_FLAGS); - FrameBuf_Add_le_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, flags); - - RT_TRACE_F(COMP_P2P, FrameBuf_DbgLevel(pBuf), ("[%s] flags: 0x%02X\n", MOD_TRACE_TAG, flags)); - - return; -} - -#endif - -#undef MOD_TRACE_TAG - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Attribute.h b/network/wlan/WDI/COMMON/P2P_Attribute.h deleted file mode 100644 index 305260dd..00000000 --- a/network/wlan/WDI/COMMON/P2P_Attribute.h +++ /dev/null @@ -1,170 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_ATTRIBUTE_H -#define __INC_P2P_ATTRIBUTE_H - -VOID -P2PAttr_Update_AttrHdrLen( - IN FRAME_BUF *pBuf, - IN const u1Byte *pLen - ); - -VOID -P2PAttr_Make_Status( - IN FRAME_BUF *pBuf, - IN u1Byte status - ); - -VOID -P2PAttr_Make_MinorReasonCode( - IN FRAME_BUF *pBuf, - IN u1Byte minorReasonCode - ); - -VOID -P2PAttr_Make_Capability( - IN FRAME_BUF *pBuf, - IN u1Byte devCap, - IN u1Byte grpCap - ); - -VOID -P2PAttr_Make_DevId( - IN FRAME_BUF *pBuf, - IN const pu1Byte devAddr - ); - -VOID -P2PAttr_Make_GoIntent( - IN FRAME_BUF *pBuf, - IN u1Byte intent - ); - -VOID -P2PAttr_Make_ConfigTimeout( - IN FRAME_BUF *pBuf, - IN u1Byte goTimeout, - IN u1Byte cliTimeout - ); - -VOID -P2PAttr_Make_ListenChannel( - IN FRAME_BUF *pBuf, - IN const char * country, - IN u1Byte regClass, - IN u1Byte channel - ); - -VOID -P2PAttr_Make_GroupBssid( - IN FRAME_BUF *pBuf, - IN const pu1Byte grpBssid - ); - -VOID -P2PAttr_Make_ExtListenTiming( - IN FRAME_BUF *pBuf, - IN u2Byte period, - IN u2Byte interval - ); - -VOID -P2PAttr_Make_IntendedIntfAddr( - IN FRAME_BUF *pBuf, - IN const pu1Byte intfAddr - ); - -VOID -P2PAttr_Make_Manageability( - IN FRAME_BUF *pBuf, - IN u1Byte manageability - ); - -VOID -P2PAttr_Make_ChannelEntry( - IN FRAME_BUF *pBuf, - IN u1Byte regClass, - IN u1Byte nChannels, - IN const u1Byte *channelList - ); - -VOID -P2PAttr_Make_ChannelList( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const P2P_CHANNELS *channels - ); - -VOID -P2PAttr_Make_Noa( - IN FRAME_BUF *pBuf, - IN u1Byte noaIEIndex, - IN BOOLEAN bOppPS, - IN u1Byte ctWindow, - IN u1Byte noaDescNum, - IN const P2P_NOA_DESCRIPTOR *noaDesc - ); - - -VOID -P2PAttr_Make_NoaFromPsSet( - IN FRAME_BUF *pBuf, - IN const P2P_POWERSAVE_SET *pPs - ); - -VOID -P2PAttr_Make_DevInfo( - IN FRAME_BUF *pBuf, - IN const u1Byte *devAddr, - IN u2Byte configMethods, - IN const P2P_WPS_ATTRIBUTES_DEVICE_TYPE *pPrimDevType, - IN u1Byte numSecDevType, - IN const P2P_WPS_ATTRIBUTES_DEVICE_TYPE *pSecDevTypeList, - IN u1Byte devNameLen, - IN const u1Byte *devName - ); - -VOID -P2PAttr_Make_GroupInfo( - IN FRAME_BUF *pBuf, - IN const RT_WLAN_STA *pCliList - ); - -VOID -P2PAttr_Make_GroupId( - IN FRAME_BUF *pBuf, - IN const pu1Byte grpDevAddr, - IN const pu1Byte grpSsid, - IN u1Byte grpSsidLen - ); - -VOID -P2PAttr_Make_Interface( - IN FRAME_BUF *pBuf, - IN const pu1Byte devAddr, - IN u1Byte numIntfAddr, - IN const pu1Byte intfAddrList - ); - -VOID -P2PAttr_Make_OperatingChannel( - IN FRAME_BUF *pBuf, - IN const char * country, - IN u1Byte regClass, - IN u1Byte channel - ); - -VOID -P2PAttr_Make_InvitationFlags( - IN FRAME_BUF *pBuf, - IN u1Byte flags - ); - -#endif // #ifndef __INC_P2P_ATTRIBUTE_H diff --git a/network/wlan/WDI/COMMON/P2P_Build.c b/network/wlan/WDI/COMMON/P2P_Build.c deleted file mode 100644 index 8b3a901a..00000000 --- a/network/wlan/WDI/COMMON/P2P_Build.c +++ /dev/null @@ -1,175 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Build.tmh" -#endif - -#include "P2P_Internal.h" - -#define P2P_BUILD_P2P_IE_HDR_LEN (1 + 1 + 4) -#define P2P_BUILD_MAX_ATTR_LEN_PER_IE (240) - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -static -VOID -p2p_write_IeLength( - IN FRAME_BUF *pBuf, - IN pu1Byte pLen - ) -{ - WriteEF1Byte(pLen, (u1Byte)((FrameBuf_Tail(pBuf) - 1) - pLen)); - return; -} - -static -VOID -p2p_build_AttrIe( - IN FRAME_BUF *pBuf, - IN const FRAME_BUF *pAttr - ) -{ - const u1Byte *pos = FrameBuf_Head(pAttr); - const u1Byte *end = pos + FrameBuf_Length(pAttr); - - while(pos < end) - { - u2Byte fragLen = (u2Byte)(end - pos); - pu1Byte pLen = NULL; - - if(P2P_BUILD_MAX_ATTR_LEN_PER_IE < fragLen) - fragLen = P2P_BUILD_MAX_ATTR_LEN_PER_IE; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) break; - - FrameBuf_Add_Data(pBuf, pos, fragLen); - - p2p_write_IeLength(pBuf, pLen); - } - - return; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -u1Byte * -p2p_add_IEHdr( - IN FRAME_BUF *pBuf - ) -{ - u1Byte *pLen = NULL; - - FrameBuf_Add_u1(pBuf, (u1Byte)EID_Vendor); - - pLen = FrameBuf_Add(pBuf, 1); - - FrameBuf_Add_be_u4(pBuf, P2P_IE_VENDOR_TYPE); - - return pLen; -} - -VOID -p2p_update_IeHdrLen( - IN FRAME_BUF *pBuf, - IN u1Byte *pLen - ) -{ - FRAME_BUF attrBuf; - FRAME_BUF *pDupAttrBuf = NULL; - u2Byte attrLen = (u2Byte)(FrameBuf_Tail(pBuf) - 1 - pLen); - - if(attrLen <= P2P_BUILD_MAX_ATTR_LEN_PER_IE) - { - p2p_write_IeLength(pBuf, pLen); - return; - } - else - { - FrameBuf_Init(attrLen, attrLen, pLen + 1, &attrBuf); - - pDupAttrBuf = FrameBuf_Clone(&attrBuf); - - if(!pDupAttrBuf) return; - - FrameBuf_Minus(pBuf, P2P_BUILD_P2P_IE_HDR_LEN); - - p2p_build_AttrIe(pBuf, pDupAttrBuf); - - FrameBuf_Free(pDupAttrBuf); - } - - return; -} - -VOID - - - -p2p_add_ActionFrameMacHdr( - IN FRAME_BUF *pBuf, - IN const u1Byte *dest, - IN const u1Byte *src, - IN const u1Byte *bssid - ) -{ - pu1Byte buf = NULL; - - if(NULL == (buf = FrameBuf_Add(pBuf, 24))) return; - - SET_80211_HDR_FRAME_CONTROL(buf, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(buf, Type_Action); - SET_80211_HDR_DURATION(buf, 0); - SET_80211_HDR_ADDRESS1(buf, dest); - SET_80211_HDR_ADDRESS2(buf, src); - SET_80211_HDR_ADDRESS3(buf, bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(buf, 0); - - return; -} - -VOID -p2p_add_MgntFrameMacHdr( - IN FRAME_BUF *pBuf, - IN TYPE_SUBTYPE typeSubtype, - IN const u1Byte *dest, - IN const u1Byte *src, - IN const u1Byte *bssid - ) -{ - pu1Byte buf = NULL; - - if(NULL == (buf = FrameBuf_Add(pBuf, 24))) return; - - SET_80211_HDR_FRAME_CONTROL(buf, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(buf, typeSubtype); - SET_80211_HDR_DURATION(buf, 0); - - SET_80211_HDR_FRAGMENT_SEQUENCE(buf, 0); - SET_80211_HDR_ADDRESS1(buf, dest); - SET_80211_HDR_ADDRESS2(buf, src); - SET_80211_HDR_ADDRESS3(buf, bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(buf, 0); - - return; -} - -VOID -p2p_add_PublicActionHdr( - IN FRAME_BUF *pBuf, - IN u1Byte actionCode, - IN u1Byte dialogToken - ) -{ - FrameBuf_Add_u1(pBuf, WLAN_ACTION_PUBLIC); - FrameBuf_Add_u1(pBuf, actionCode); - FrameBuf_Add_u1(pBuf, dialogToken); - - return; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Build_Action.c b/network/wlan/WDI/COMMON/P2P_Build_Action.c deleted file mode 100644 index 9db51145..00000000 --- a/network/wlan/WDI/COMMON/P2P_Build_Action.c +++ /dev/null @@ -1,417 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Build_Action.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static -VOID -p2p_add_P2PActionHdr( - IN FRAME_BUF *pBuf, - IN u1Byte subtype, - IN u1Byte dialogToken - ) -{ - FrameBuf_Add_u1(pBuf, WLAN_ACTION_VENDOR_SPECIFIC); - FrameBuf_Add_be_u4(pBuf, P2P_IE_VENDOR_TYPE); - FrameBuf_Add_u1(pBuf, subtype); - FrameBuf_Add_u1(pBuf, dialogToken); - - return; -} - -static -VOID -p2p_build_PresenceReqIe( - IN FRAME_BUF *pBuf, - IN const P2P_POWERSAVE_SET *pPs - ) -{ - pu1Byte pLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - P2PAttr_Make_NoaFromPsSet(pBuf, pPs); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_PresenceRspIe( - IN FRAME_BUF *pBuf, - IN u1Byte status, - IN const P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - P2PAttr_Make_Status(pBuf, status); - P2PAttr_Make_Noa(pBuf, - pP2PInfo->NoAIEIndex, - pP2PInfo->bOppPS, - pP2PInfo->CTWindow, - P2P_MAX_NUM_NOA_DESC, - pP2PInfo->NoADescriptors); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_GoDiscoverabilityReq( - IN FRAME_BUF *pBuf, - IN const P2P_INFO *pP2PInfo - ) -{ - // There is no Element field in a GO Discoverability Request frame. - return; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_Construct_PresenceReq( - IN P2P_INFO *pP2PInfo, - IN const P2P_POWERSAVE_SET *pP2pPs, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf - ) -{ - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_P2PActionHdr(pBuf, P2P_PRESENCE_REQ, dialogToken); - - // P2P IE - p2p_build_PresenceReqIe(pBuf, pP2pPs); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - return; -} - -VOID -p2p_Construct_PresenceRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u1Byte status, - IN FRAME_BUF *pBuf - ) -{ - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_P2PActionHdr(pBuf, P2P_PRESENCE_RSP, dialogToken); - - // P2P IE - p2p_build_PresenceRspIe(pBuf, status, pP2PInfo); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - return; -} - -VOID -p2p_Copnstruct_GoDiscoverabilityReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf - ) -{ - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->InterfaceAddress); - - // Action Header - p2p_add_P2PActionHdr(pBuf, P2P_GO_DISC_REQ, dialogToken); - - // P2P IE - p2p_build_GoDiscoverabilityReq(pBuf, pP2PInfo); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - return; -} - -VOID -p2p_Construct_SDReq( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ) -{ - u1Byte *pQueryReqLen = NULL; - u1Byte *pAnqpQueryReqLen = NULL; - u1Byte itSvcTlv = 0; - - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_PublicActionHdr(pBuf, WLAN_PA_GAS_INITIAL_REQ, pP2PInfo->SDContext.DialogToken); - - // Advertisement Protocol Info IE - FrameBuf_Add_u1(pBuf, 108); // Element ID - FrameBuf_Add_u1(pBuf, 2); // Legnth - FrameBuf_Add_u1(pBuf, 0); // Query Response Length Limit and PAME-BI - FrameBuf_Add_u1(pBuf, 0); // Advertisment Protocol ID - - //Query Request Length - pQueryReqLen = FrameBuf_Add(pBuf, 2); - - // ANQP Query Request - FrameBuf_Add_u1(pBuf, 0xDD); // Info ID, first - FrameBuf_Add_u1(pBuf, 0xDD); // Info ID, second - pAnqpQueryReqLen = FrameBuf_Add(pBuf, 2); // Lenghth - FrameBuf_Add_be_u4(pBuf, P2P_IE_VENDOR_TYPE); // OUI (OI) and subtype - FrameBuf_Add_le_u2(pBuf, 0); // Service update indicator, in req we always fill 0 - - // Service TLVs - for(itSvcTlv = 0; itSvcTlv < pP2PInfo->SDContext.UserSDReq.ServiceReqTLVSize; itSvcTlv++) - { - const P2P_SERVICE_REQ_TLV *tlv = &(pP2PInfo->SDContext.UserSDReq.ServiceReqTLVList[itSvcTlv]); - u1Byte *pContentLen = NULL; - - pContentLen = FrameBuf_Add(pBuf, 2); // Length - FrameBuf_Add_u1(pBuf, tlv->ServiceDesc.ServiceType); // Service Protocol Type - FrameBuf_Add_u1(pBuf, tlv->TransactionID); // Service Transaction ID - FrameBuf_Add_Data(pBuf, // Query Data - tlv->ServiceDesc.Buffer, - tlv->ServiceDesc.BufferLength); - - WriteEF2Byte(pContentLen, // Write back length - FrameBuf_Tail(pBuf) - (pContentLen + 2)); - } - - WriteEF2Byte(pQueryReqLen, FrameBuf_Tail(pBuf) - (pQueryReqLen + 2)); // Write back query length - WriteEF2Byte(pAnqpQueryReqLen, FrameBuf_Tail(pBuf) - (pAnqpQueryReqLen + 2)); // Write back ANQP query length - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_SDRsp( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN P2P_SD_STATUS_CODE status, - IN BOOLEAN bFrag - ) -{ - u1Byte *pQueryRspLen = NULL; - - FunctionIn(COMP_P2P); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bFragment: %u\n", bFrag)); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_PublicActionHdr(pBuf, WLAN_PA_GAS_INITIAL_RESP, dialogToken); - - // Status code (11u): 2 octets - FrameBuf_Add_le_u2(pBuf, 0); - - // GAS Comeback Delay: 0: no frag, 1: frag - FrameBuf_Add_le_u2(pBuf, bFrag); - - // Advertisement Protocol Info IE - FrameBuf_Add_u1(pBuf, 108); // Element ID - FrameBuf_Add_u1(pBuf, 2); // Legnth - FrameBuf_Add_u1(pBuf, 0x7F); // Query Response Length Limit and PAME-BI. - // The Response Length set to 1111111 PAME-BI is 0 - FrameBuf_Add_u1(pBuf, 0); // Advertisment Protocol ID - - // Query Request Length - pQueryRspLen = FrameBuf_Add(pBuf, 2); - - // ANQP Query Response - if(!bFrag) - {// append the entire ANQP Query Rsp Field - FrameBuf_Add_Data(pBuf, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Adding query rsp:\n", - pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendSize); - } - - WriteEF2Byte(pQueryRspLen, FrameBuf_Tail(pBuf) - (pQueryRspLen + 2)); // Write back length - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_SDComebackReq( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_PublicActionHdr(pBuf, WLAN_PA_GAS_COMEBACK_REQ, dialogToken); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_SDComebackRsp( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u2Byte bytesToCopy, - IN BOOLEAN bMoreData - ) -{ - // - // Note: if comeback is used, we send only 1 Service Rsp TLV in the ComebackRsp - // - - u1Byte fragId = 0; - u1Byte *pQueryRspLen = NULL; - - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_PublicActionHdr(pBuf, WLAN_PA_GAS_COMEBACK_RESP, dialogToken); - - // Status code (11u): 2 octets - FrameBuf_Add_le_u2(pBuf, 0); - - // GAS Query Response Fragment ID - fragId = pP2PInfo->SDContext.FragmentID; - if(bMoreData) - SET_FLAG(fragId, BIT7); - FrameBuf_Add_u1(pBuf, fragId); - - // GAS Comeback Delay: 0: no frag, 1: frag - FrameBuf_Add_le_u2(pBuf, 0); - - // Advertisement Protocol Info IE - FrameBuf_Add_u1(pBuf, 108); // Element ID - FrameBuf_Add_u1(pBuf, 2); // Legnth - FrameBuf_Add_u1(pBuf, 0x7F); // Query Response Length Limit and PAME-BI. - // The Response Length set to 1111111 PAME-BI is 0 - FrameBuf_Add_u1(pBuf, 0); // Advertisment Protocol ID - - // Query Request Length - pQueryRspLen = FrameBuf_Add(pBuf, 2); - - // Payload - FrameBuf_Add_Data(pBuf, - pP2PInfo->SDContext.ANQPQueryRspFieldToSendBuf + pP2PInfo->SDContext.ANQPQueryRspFieldToSendOffset, - bytesToCopy); - - WriteEF2Byte(pQueryRspLen, FrameBuf_Tail(pBuf) - (pQueryRspLen + 2)); // Write back length - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_AnqpQueryRspField( - IN const P2P_INFO *pP2PInfo, - IN P2P_SD_RSP_CONTEXT *pRspCtx, - OUT P2P_SD_CONTEXT *pSdCtx - ) -{ - // - // We construct an un-fragmented ANQP Query Rsp Field according to the Service Req TLVs - // - - FRAME_BUF fbuf; - - const P2P_SERVICE_RSP_TLV *pSvcRspTLVs = pRspCtx->ServiceRspTLVList; - u1Byte *pAnqpQueryRspLen = NULL; - - FrameBuf_Init(sizeof(pSdCtx->ANQPQueryRspFieldToSendBuf), - 0, - pSdCtx->ANQPQueryRspFieldToSendBuf, - &fbuf); - - FrameBuf_Add_u1(&fbuf, 0xDD); - FrameBuf_Add_u1(&fbuf, 0xDD); - pAnqpQueryRspLen = FrameBuf_Add(&fbuf, 2); - - FrameBuf_Add_be_u4(&fbuf, P2P_IE_VENDOR_TYPE); // OUI (OI) and subtype - FrameBuf_Add_le_u2(&fbuf, pRspCtx->ServiceUpdateIndicator); // Service update indicator - - // Service TLVs, it could be multi TLV for multi service type - if(pRspCtx->SDStatus == P2P_SD_STATUS_SUCCESS) - { - u1Byte itSvcTlv = 0; - - for(itSvcTlv = 0; itSvcTlv < pRspCtx->ServiceRspTLVSize; itSvcTlv++) - { - u1Byte *pLen = NULL; - - pLen = FrameBuf_Add(&fbuf, 2); - FrameBuf_Add_u1(&fbuf, pSvcRspTLVs[itSvcTlv].ServiceDesc.ServiceType); // Service Protocol Type - FrameBuf_Add_u1(&fbuf, pSvcRspTLVs[itSvcTlv].TransactionID); // Service Transation ID - FrameBuf_Add_u1(&fbuf, pSvcRspTLVs[itSvcTlv].Status); // Status - FrameBuf_Add_Data(&fbuf, // Response Data - pSvcRspTLVs[itSvcTlv].ServiceDesc.Buffer, - pSvcRspTLVs[itSvcTlv].ServiceDesc.BufferLength); - WriteEF2Byte(pLen, FrameBuf_Tail(&fbuf) - (pLen + 2)); // Write back length - } - } - else - { - u1Byte *pLen = NULL; - - pLen = FrameBuf_Add(&fbuf, 2); - FrameBuf_Add_u1(&fbuf, P2P_SD_PROTOCOL_ALL_TYPE); // Service Protocol Type - FrameBuf_Add_u1(&fbuf, 0); // Service Transation ID - FrameBuf_Add_u1(&fbuf, pRspCtx->SDStatus); // Status - - WriteEF2Byte(pLen, FrameBuf_Tail(&fbuf) - (pLen + 2)); // Write back length - } - - pSdCtx->ANQPQueryRspFieldToSendSize = FrameBuf_Length(&fbuf); - - return; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Build_Mgnt.c b/network/wlan/WDI/COMMON/P2P_Build_Mgnt.c deleted file mode 100644 index f8f092a9..00000000 --- a/network/wlan/WDI/COMMON/P2P_Build_Mgnt.c +++ /dev/null @@ -1,675 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Build_Mgnt.tmh" -#endif - -#if (P2P_SUPPORT == 1) -#include "P2P_Internal.h" - -static u1Byte BroadcastAddress[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static -VOID -p2p_Make_SupportedRate( - IN FRAME_BUF *pBuf, - IN const MGNT_INFO *pMgntInfo - ) -{ - OCTET_STRING SuppRates, ExtSuppRates; - u1Byte SuppRatesContent[8]; // NOTE! Length of Support Rates <= 8. - u1Byte ExtSuppRatesContent[255]; // NOTE! Length of Support Rates <= 255. - - FillOctetString(SuppRates, SuppRatesContent, 0); - FillOctetString(ExtSuppRates, ExtSuppRatesContent, 0); - - SelectSupportedRatesElement(pMgntInfo->dot11CurrentWirelessMode, - pMgntInfo->SupportedRates, - TRUE, - &SuppRates, - &ExtSuppRates); - - // Supported Rates - FrameBuf_Add_u1(pBuf, EID_SupRates); - FrameBuf_Add_u1(pBuf, (u1Byte)SuppRates.Length); - FrameBuf_Add_Data(pBuf, SuppRates.Octet, SuppRates.Length); - - // Extended Supported Rates - if(ExtSuppRates.Length != 0) - { - FrameBuf_Add_u1(pBuf, EID_ExtSupRates); - FrameBuf_Add_u1(pBuf, (u1Byte)ExtSuppRates.Length); - FrameBuf_Add_Data(pBuf, ExtSuppRates.Octet, ExtSuppRates.Length); - } -} - -static -VOID -p2p_build_TimeStamp( - IN FRAME_BUF *pBuf - ) -{ - u8Byte timeStamp = 0; - - timeStamp = PlatformGetCurrentTime(); - - FrameBuf_Add_le_u4(pBuf, (u4Byte)(timeStamp & 0xffffffff)); - FrameBuf_Add_le_u4(pBuf, (u4Byte)(timeStamp >> 32)); - - return; -} - -static -VOID -p2p_build_ProbeReqIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - 0); - - // The P2P Device ID attribute may be present in the - // Probe Request frame when using the discovery - // protocol to find a P2P Device with a specific Device - // Address. - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->ScanDeviceIDs.uNumOfDeviceIDs > 0) - { - P2PAttr_Make_DevId(pBuf, pP2PInfo->ScanDeviceIDs.DeviceIDs[0]); - } - } - - P2PAttr_Make_ListenChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->ListenChannel); - P2PAttr_Make_ExtListenTiming(pBuf, pP2PInfo->ExtListenTimingDuration, pP2PInfo->ExtListenTimingPeriod); - if(P2P_GO == pP2PInfo->Role) - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_ProbeRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - P2P_WPS_ATTRIBUTES *pWps = &pP2PInfo->WpsAttributes; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - 0); - - P2PAttr_Make_ExtListenTiming(pBuf, pP2PInfo->ExtListenTimingDuration, pP2PInfo->ExtListenTimingPeriod); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, pWps->DeviceName); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_GoProbeRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - u1Byte grpCap = 0; - const P2P_WPS_ATTRIBUTES *pWps = &pP2PInfo->WpsAttributes; - const ADAPTER *pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) ? pP2PInfo->pAdapter : GetFirstGOPort(pP2PInfo->pAdapter); - const MGNT_INFO *pExtMgntInfo = &pExtAdapter->MgntInfo; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - { - grpCap = pP2PInfo->GroupCapability; - if(p2p_Doing_Provisioning(pP2PInfo)) - SET_FLAG(grpCap, P2P_GROUP_CAP_GROUP_FORMATION); - if(p2p_Check_GroupLimitReached(pP2PInfo)) - SET_FLAG(grpCap, P2P_GROUP_CAP_GROUP_LIMIT); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid role\n")); - } - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - P2PAttr_Make_ExtListenTiming(pBuf, pP2PInfo->ExtListenTimingDuration, pP2PInfo->ExtListenTimingPeriod); - if(P2P_GO == pP2PInfo->Role) - P2PAttr_Make_Noa(pBuf, pP2PInfo->NoAIEIndex, pP2PInfo->bOppPS, pP2PInfo->CTWindow, P2P_MAX_NUM_NOA_DESC, pP2PInfo->NoADescriptors); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, - pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, - pWps->DeviceName); - - if(P2P_GO == pP2PInfo->Role) - P2PAttr_Make_GroupInfo(pBuf, pExtMgntInfo->AsocEntry); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_BeaconIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - u1Byte grpCap = 0; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - { - grpCap = pP2PInfo->GroupCapability; - if(p2p_Doing_Provisioning(pP2PInfo)) - SET_FLAG(grpCap, P2P_GROUP_CAP_GROUP_FORMATION); - if(p2p_Check_GroupLimitReached(pP2PInfo)) - SET_FLAG(grpCap, P2P_GROUP_CAP_GROUP_LIMIT); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid role\n")); - } - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - P2PAttr_Make_DevId(pBuf, pP2PInfo->DeviceAddress); - - P2PAttr_Make_Noa(pBuf, - pP2PInfo->NoAIEIndex, - pP2PInfo->bOppPS, - pP2PInfo->CTWindow, - P2P_MAX_NUM_NOA_DESC, - pP2PInfo->NoADescriptors); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_ManagedIe( - IN FRAME_BUF *pBuf - ) -{ -#if P2P_SIMULATE_MANAGED_AP == 1 - pu1Byte pLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - P2PAttr_Make_Manageability(pBuf, maP2PDeviceManagement); - - p2p_update_IeHdrLen(pBuf, pLen); -#endif - - return; -} - -static -VOID -p2p_build_AssociationReqIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - const P2P_WPS_ATTRIBUTES *pWps = &pP2PInfo->WpsAttributes; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability, - 0); - - P2PAttr_Make_ExtListenTiming(pBuf, pP2PInfo->ExtListenTimingDuration, pP2PInfo->ExtListenTimingPeriod); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, - pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, - pWps->DeviceName); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_AssociationReqToWlanApIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - P2PAttr_Make_Capability(pBuf, pP2PInfo->DeviceCapability, pP2PInfo->GroupCapability); - - P2PAttr_Make_Interface(pBuf, pP2PInfo->DeviceAddress, 1, pP2PInfo->InterfaceAddress); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_AssociationRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - u1Byte grpCap = 0; - const P2P_WPS_ATTRIBUTES *pWps = &pP2PInfo->WpsAttributes; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - P2PAttr_Make_Status(pBuf, pP2PInfo->Status); - - if(!p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - - grpCap = pP2PInfo->GroupCapability; - if(p2p_Doing_Provisioning(pP2PInfo)) - SET_FLAG(grpCap, P2P_GROUP_CAP_GROUP_FORMATION); - if(p2p_Check_GroupLimitReached(pP2PInfo)) - SET_FLAG(grpCap, P2P_GROUP_CAP_GROUP_LIMIT); - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - P2PAttr_Make_ExtListenTiming(pBuf, pP2PInfo->ExtListenTimingDuration, pP2PInfo->ExtListenTimingPeriod); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_Construct_ProbeReqEx( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte ssidLen, - IN const u1Byte *ssidBuf - ) -{ - // MAC Header - p2p_add_MgntFrameMacHdr(pBuf, Type_Probe_Req, da, pP2PInfo->DeviceAddress, da); - - // SSID - FrameBuf_Add_u1(pBuf, EID_SsId); - FrameBuf_Add_u1(pBuf, ssidLen); - FrameBuf_Add_Data(pBuf, ssidBuf, ssidLen); - - // Supported Rates - p2p_Make_SupportedRate(pBuf, &(pP2PInfo->pAdapter->MgntInfo)); - - // P2P IE - p2p_build_ProbeReqIe(pBuf, pP2PInfo); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_DEFAULT_REQUEST, pBuf); - - // WFDS IE - P2PSvc_MakeProbeReqIE(pP2PInfo->pP2PSvcInfo, pBuf); - - // WPS IE - WPS_AppendElement(pP2PInfo->pAdapter, &pBuf->os, TRUE, WPS_INFO_PROBEREQ_IE); - - // WFD IE - WFD_AppendProbeReqIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - FrameBuf_Dump(pBuf, 0, FrameBuf_DbgLevel(pBuf), __FUNCTION__); - - return; -} - -VOID -p2p_Construct_ProbeReq( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - u1Byte ssidLen = P2P_WILDCARD_SSID_LEN; - u1Byte *ssidBuf = P2P_WILDCARD_SSID; - - if(P2P_STATE_SCAN == pP2PInfo->State) - { - ssidLen = 0; - ssidBuf = NULL; - } - - p2p_Construct_ProbeReqEx(pBuf, pP2PInfo, BroadcastAddress, ssidLen, ssidBuf); - - return; -} - -BOOLEAN -p2p_Construct_ProbeRsp( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN RT_RFD *rfdProbeReq, - IN OCTET_STRING *posProbeReq, - IN OCTET_STRING *posAttrs - ) -{ - ADAPTER *pAdapter = pP2PInfo->pAdapter; - u1Byte ssidLen = P2P_WILDCARD_SSID_LEN; - u1Byte *ssidBuf = P2P_WILDCARD_SSID; - u1Byte channel = 0; - - BOOLEAN bToSendProbeRsp = TRUE; - - // MAC Header - p2p_add_MgntFrameMacHdr(pBuf, Type_Probe_Rsp, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Time Stamp - // I think this is not necessary, becuase our hw should fill timestamp. - p2p_build_TimeStamp(pBuf); - - // Beacon Interval - FrameBuf_Add_le_u2(pBuf, pP2PInfo->pAdapter->MgntInfo.dot11BeaconPeriod); - - // Capability Info - FrameBuf_Add_le_u2(pBuf, 0); - - // SSID - if(P2P_GO == pP2PInfo->Role) - {// TODO: we shall not get here since ProbeRsp of a GO is constructed else where - ssidLen = (u1Byte)pAdapter->MgntInfo.Ssid.Length; - ssidBuf = pAdapter->MgntInfo.Ssid.Octet; - } - FrameBuf_Add_u1(pBuf, EID_SsId); - FrameBuf_Add_u1(pBuf, ssidLen); - FrameBuf_Add_Data(pBuf, ssidBuf, ssidLen); - - // Supported Rates - p2p_Make_SupportedRate(pBuf, &(pP2PInfo->pAdapter->MgntInfo)); - - // DS Parameter - if(pP2PInfo->State == P2P_STATE_LISTEN) - channel = pP2PInfo->ListenChannel; - else if(pP2PInfo->State == P2P_STATE_OPERATING) - channel = pP2PInfo->OperatingChannel; - else - channel = pP2PInfo->ListenChannel; - FrameBuf_Add_u1(pBuf, EID_DSParms); - FrameBuf_Add_u1(pBuf, 1); - FrameBuf_Add_u1(pBuf, channel); - - // P2P IE - p2p_build_ProbeRspIe(pBuf, pP2PInfo); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_PROBE_RESPONSE, pBuf); - - // WFDS IE - P2PSvc_MakeProbeRspIE(pP2PInfo->pP2PSvcInfo, posAttrs, pBuf, &bToSendProbeRsp); - - // WPS IE - WPS_AppendElement(pP2PInfo->pAdapter, &pBuf->os, TRUE, WPS_INFO_PROBERSP_IE); - - // WFD IE - WFD_AppendProbeRspIEs(pAdapter, FrameBuf_Cap(pBuf), &pBuf->os, rfdProbeReq, posProbeReq); - - // Debug IE - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - FrameBuf_Add_u1(pBuf, EID_Vendor); - FrameBuf_Add_u1(pBuf, 5); - FrameBuf_Add_u1(pBuf, 0x00); - FrameBuf_Add_u1(pBuf, 0xe0); - FrameBuf_Add_u1(pBuf, 0x4c); - FrameBuf_Add_le_u2(pBuf, pP2PInfo->ProbeRequestSequenceNum); // TODO: the original code use H2N2BYTE, but it should be LE - } - - FrameBuf_Dump(pBuf, 0, FrameBuf_DbgLevel(pBuf), __FUNCTION__); - - return bToSendProbeRsp; -} - -//----------------------------------------------------------------------------- -// Exported: public -//----------------------------------------------------------------------------- - -VOID -P2P_Append_GoProbeRspIe( - IN OCTET_STRING *posFrame, - IN ADAPTER *pAdapter, - IN u1Byte reason, - IN RT_RFD *rfdProbeReq, - IN OCTET_STRING *posProbeReq - ) -{ - FRAME_BUF fbuf; - P2P_INFO *pP2PInfo = GET_P2P_INFO(pAdapter); - - do - { - FrameBuf_Init(FRAME_BUF_CAP_UNKNOWN, posFrame->Length, posFrame->Octet, &fbuf); - - if(P2P_ENABLED(pP2PInfo)) - { - FRAME_BUF p2pAttrs; - BOOLEAN bToSendProbeRsp = FALSE; - - if(NULL == posProbeReq) - {// No probe request. - break; - } - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_PROBE_RESPONSE, &fbuf); - - // Clause 3.2.2: GO shall not include P2P IE in ProbeRsp if the ProbeReq does not include a P2P IE - if(0 == PacketGetElementNum(*posProbeReq, EID_Vendor, OUI_SUB_WIFI_DIRECT, OUI_SUB_DONT_CARE)) - {// No P2P IE, no need to append P2P element in the probe response. - break; - } - - // P2P IE - p2p_build_GoProbeRspIe(&fbuf, pP2PInfo); - - // Get assembled P2P attributes - p2p_parse_AssembleIe(rfdProbeReq->Buffer.VirtualAddress, rfdProbeReq->PacketLength, OUI_SUB_WIFI_DIRECT, &p2pAttrs); - - // WFDS IE - P2PSvc_MakeProbeRspIE(pP2PInfo->pP2PSvcInfo, &p2pAttrs.os, &fbuf, &bToSendProbeRsp); - - // Free assembled P2P attributes - p2p_parse_FreeAssembledIe(&p2pAttrs); - } - else - {// P2P Managed Function simulator for test only. - p2p_build_ManagedIe(&fbuf); - } - }while(FALSE); - - // Synch octet string with frame buffer - FillOctetString(*posFrame, FrameBuf_MHead(&fbuf), FrameBuf_Length(&fbuf)); - - FrameBuf_Dump(&fbuf, 0, FrameBuf_DbgLevel(&fbuf), __FUNCTION__); - - return; -} - -VOID -P2P_Append_BeaconIe( - IN ADAPTER *pAdapter - ) -{ - FRAME_BUF fbuf; - P2P_INFO *pP2PInfo = GET_P2P_INFO(pAdapter); - MGNT_INFO *pMgntInfo = &pAdapter->MgntInfo; - - FrameBuf_Init(FRAME_BUF_CAP_UNKNOWN, pMgntInfo->beaconframe.Length, pMgntInfo->beaconframe.Octet, &fbuf); - - if(P2P_ENABLED(pP2PInfo)) - { - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_BEACON, &fbuf); - - // P2P IE - p2p_build_BeaconIe(&fbuf, pP2PInfo); - } - else - {// P2P Managed Function simulator for test only. - p2p_build_ManagedIe(&fbuf); - } - - // Synch octet string with frame buffer - FillOctetString(pMgntInfo->beaconframe, FrameBuf_MHead(&fbuf), FrameBuf_Length(&fbuf)); - - FrameBuf_Dump(&fbuf, 0, FrameBuf_DbgLevel(&fbuf), __FUNCTION__); - - return; -} - -VOID -P2P_Append_AssociationReqIe( - IN OCTET_STRING *posFrame, - IN ADAPTER *pAdapter - ) -{ - FRAME_BUF fbuf; - P2P_INFO *pP2PInfo = GET_P2P_INFO(pAdapter); - - FrameBuf_Init(FRAME_BUF_CAP_UNKNOWN, posFrame->Length, posFrame->Octet, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - // Append P2P IE - if(P2P_ENABLED(GET_P2P_INFO(pAdapter))) - { - if(P2PScanListIsGo(pP2PInfo, Frame_pDaddr(*posFrame))) - {// to P2P GO - p2p_build_AssociationReqIe(&fbuf, pP2PInfo); - } - else - {// to wlan AP - p2p_build_AssociationReqToWlanApIe(&fbuf, pP2PInfo); - } - } - - // Synch octet string with frame buffer - FillOctetString(*posFrame, FrameBuf_MHead(&fbuf), FrameBuf_Length(&fbuf)); - - FrameBuf_Dump(&fbuf, 0, FrameBuf_DbgLevel(&fbuf), __FUNCTION__); - - return; -} - - -VOID -P2P_Append_AssociationRspIe( - IN OCTET_STRING *posFrame, - IN ADAPTER *pAdapter - ) -{ - FRAME_BUF fbuf; - P2P_INFO *pP2PInfo = GET_P2P_INFO(pAdapter); - MGNT_INFO *pMgntInfo = &pAdapter->MgntInfo; - - FrameBuf_Init(FRAME_BUF_CAP_UNKNOWN, posFrame->Length, posFrame->Octet, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - // Append P2P IE - if(P2P_ENABLED(pP2PInfo)) - { - p2p_build_AssociationRspIe(&fbuf, pP2PInfo); - } - else - {// P2P Managed Function simulator for test only. - p2p_build_ManagedIe(&fbuf); - } - - // Synch octet string with frame buffer - FillOctetString(*posFrame, FrameBuf_MHead(&fbuf), FrameBuf_Length(&fbuf)); - - FrameBuf_Dump(&fbuf, 0, FrameBuf_DbgLevel(&fbuf), __FUNCTION__); - - return; -} - -VOID -P2P_Append_ProbeReqIe( - IN OCTET_STRING *posFrame, - IN P2P_INFO *pP2PInfo - ) -{ - FRAME_BUF fbuf; - - FrameBuf_Init(FRAME_BUF_CAP_UNKNOWN, posFrame->Length, posFrame->Octet, &fbuf); - - if(P2P_ENABLED(pP2PInfo)) - { - p2p_build_ProbeReqIe(&fbuf, pP2PInfo); - - // Synch octet string with frame buffer - FillOctetString(*posFrame, FrameBuf_MHead(&fbuf), FrameBuf_Length(&fbuf)); - } - return; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Build_PublicAction.c b/network/wlan/WDI/COMMON/P2P_Build_PublicAction.c deleted file mode 100644 index a048e74d..00000000 --- a/network/wlan/WDI/COMMON/P2P_Build_PublicAction.c +++ /dev/null @@ -1,1060 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Build_PublicAction.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static -VOID -p2p_build_GoNegReqIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - u1Byte grpCap = 0; - P2P_WPS_ATTRIBUTES *pWps = &pP2PInfo->WpsAttributes; - - u1Byte intent = 0; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - grpCap = (u1Byte)pP2PInfo->NegotiationRequestGroupCapability; - } - else - grpCap = pP2PInfo->GroupCapability; - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - if(pP2PInfo->ConnectionContext.bProbePeerChannelList) - intent = 0; // make sure that peer will become the GO, note that the tie breaker bit is 0 - else - intent = pP2PInfo->GOIntent; - P2PAttr_Make_GoIntent(pBuf, intent); - - P2PAttr_Make_ConfigTimeout(pBuf, pP2PInfo->GOConfigurationTimeout, pP2PInfo->ClientConfigurationTimeout); - P2PAttr_Make_ListenChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->ListenChannel); - P2PAttr_Make_ExtListenTiming(pBuf, pP2PInfo->ExtListenTimingDuration, pP2PInfo->ExtListenTimingPeriod); - P2PAttr_Make_IntendedIntfAddr(pBuf, pP2PInfo->InterfaceAddress); - - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, pWps->DeviceName); - - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Op Chnl: %d\n", pP2PInfo->OperatingChannel)); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_GoNegRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - pu1Byte pLen = NULL; - u1Byte grpCap = 0; - PP2P_WPS_ATTRIBUTES pWps = &pP2PInfo->WpsAttributes; - - u1Byte status = 0; - u1Byte intent = 0; - pu1Byte pGrpDevAddr = NULL; - pu1Byte pGrpSsidBuf = NULL; - u1Byte grpSsidLen = 0; - - const P2P_DEV_LIST_ENTRY *pDev = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - pDev = p2p_DevList_Find(&pP2PInfo->devList, da, P2P_DEV_TYPE_DEV); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - status = pP2PInfo->NegotiationResponseStatus; - else - status = pP2PInfo->Status; - P2PAttr_Make_Status(pBuf, status); - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - grpCap = (u1Byte)pP2PInfo->NegotiationResponseGroupCapability; - } - else - grpCap = pP2PInfo->GroupCapability; - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - intent = pP2PInfo->GOIntent; - } - else - { - // TODO: this is bad doing jobs other than making IE here!!! - // The tie breaker bit in a GONRsp shall be toggled from the corresponding GONReq - // - pP2PInfo->GOIntent = (pP2PInfo->GOIntent | !(pP2PInfo->ConnectionContext.ConnectingDevice.GOIntent & 0x01)); - - intent = pP2PInfo->GOIntent; - } - - P2PAttr_Make_GoIntent(pBuf, intent); - - P2PAttr_Make_ConfigTimeout(pBuf, pP2PInfo->GOConfigurationTimeout, pP2PInfo->ClientConfigurationTimeout); - P2PAttr_Make_IntendedIntfAddr(pBuf, pP2PInfo->InterfaceAddress); - - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pDev->p2p->commonChannels); - else - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, pWps->DeviceName); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bNegotiationResponseUseGroupID) - { - pGrpDevAddr = pP2PInfo->NegotiationResponseGroupIDDeviceAddress; - pGrpSsidBuf = pP2PInfo->NegotiationResponseGroupIDSSID; - grpSsidLen = pP2PInfo->uNegotiationResponseGroupIDSSIDLength; - } - } - else - { - if(pP2PInfo->ConnectionContext.bGoingToBeGO && - P2P_STATUS_SUCCESS == pP2PInfo->ConnectionContext.Status) - { - pGrpDevAddr = pP2PInfo->DeviceAddress; - pGrpSsidBuf = pP2PInfo->SSIDBuf; - grpSsidLen = pP2PInfo->SSIDLen; - } - } - - if(pGrpDevAddr) - P2PAttr_Make_GroupId(pBuf, pGrpDevAddr, pGrpSsidBuf, grpSsidLen); - - // - // Going to be GO: - // The Operating Channel attribute shall indicate the intended Operating Channel - // of the P2P Group. The channel indicated in the Operating Channel attribute shall - // be one of the channels in the Channel List attribute in the GO Negotiation Response - // frame. - // - // Going to be Client: - // The Operating Channel attribute may indicate a preferred Operating Channel of the - // P2P Group, or may be omitted. Any channel indicated in the Operating Channel attribute - // shall be one of the channels in the Channel List attribute in the GO Negotiation Response frame. - // - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, pP2PInfo->OperatingChannel); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_GoNegConfIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - pu1Byte pLen = NULL; - u1Byte grpCap = 0; - - u1Byte status = 0; - pu1Byte pGrpDevAddr = NULL; - pu1Byte pGrpSsidBuf = NULL; - u1Byte grpSsidLen = 0; - u1Byte opChannel = 0; - - const P2P_DEV_LIST_ENTRY *pDev = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - pDev = p2p_DevList_Find(&pP2PInfo->devList, da, P2P_DEV_TYPE_DEV); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - status = pP2PInfo->NegotiationConfirmStatus; - else - status = pP2PInfo->Status; - P2PAttr_Make_Status(pBuf, pP2PInfo->Status); - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - grpCap = (u1Byte)pP2PInfo->NegotiationConfirmGroupCapability; - } - else - grpCap = pP2PInfo->GroupCapability; - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pDev->p2p->commonChannels); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bNegotiationConfirmUseGroupID) - { - pGrpDevAddr = pP2PInfo->NegotiationConfirmGroupIDDeviceAddress; - pGrpSsidBuf = pP2PInfo->NegotiationConfirmGroupIDSSID; - grpSsidLen = pP2PInfo->uNegotiationConfirmGroupIDSSIDLength; - } - } - else - { - if(pP2PInfo->ConnectionContext.bGoingToBeGO && - P2P_STATUS_SUCCESS == pP2PInfo->ConnectionContext.Status) - { - pGrpDevAddr = pP2PInfo->DeviceAddress; - pGrpSsidBuf = pP2PInfo->SSIDBuf; - grpSsidLen = pP2PInfo->SSIDLen; - } - } - - if(pGrpDevAddr) - P2PAttr_Make_GroupId(pBuf, pGrpDevAddr, pGrpSsidBuf, grpSsidLen); - - // - // Going to be GO: - // The Operating Channel attribute shall indicate the intended Operating Channel of the - // P2P Group. The channel indicated in the Operating Channel attribute shall be one of the - // channels in the Channel List attribute in the GO Negotiation Confirmation frame. - // - // Going to be Client: - // The Operating Channel attribute in the GO Negotiation Confirmation frame shall be the - // Operating Channel attribute from the GO Negotiation Response frame. - // - if(pP2PInfo->ConnectionContext.bGoingToBeGO) - { - opChannel = pP2PInfo->OperatingChannel; - } - else - {//Chnl from the GONRsp - opChannel = pP2PInfo->ConnectionContext.ConnectingDevice.OperatingChannel; - } - - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, opChannel); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_InvitationReqIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - pu1Byte pLen = NULL; - PP2P_WPS_ATTRIBUTES pWps = &pP2PInfo->WpsAttributes; - - u1Byte goTimeout = 0; - u1Byte cliTimeout = 0; - u1Byte opChannel = 0; - u1Byte invitFlag = 0; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(pP2PInfo->InvitationContext.bPersistentInvitation) - {// in persistent case, we have to tell the peer our conf time - // No matter GO or client, we fill them with the max value - goTimeout = pP2PInfo->GOConfigurationTimeout; - cliTimeout = pP2PInfo->ClientConfigurationTimeout; - } - else - {// otherwise, we're either a GO or client in operating phase, wo we don't have to fill the conf time - // Ref Clause 3.1.5.1, a normal invitation always have them to be 0 - goTimeout = 0; - cliTimeout = 0; - } - P2PAttr_Make_ConfigTimeout(pBuf, goTimeout, cliTimeout); - - P2PAttr_Make_GroupBssid(pBuf, pP2PInfo->InvitationContext.GroupBssid); - - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pP2PInfo->ChannelEntryList); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, - pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, - pWps->DeviceName); - - P2PAttr_Make_GroupId(pBuf, - pP2PInfo->InvitationContext.GODeviceAddress, - pP2PInfo->InvitationContext.SsidBuf, - pP2PInfo->InvitationContext.SsidLen); - - // - // GO: - // the Operating Channel attribute indicates the Operating Channel of the P2P Group - // - // Peristent GO: - // the Operating Channel attribute indicates the intended Operating Channel of the P2P Group - // - // Client: - // an Operating Channel attribute shall also be present, indicating the Operating Channel of the P2P Group - // - // Persistent Client: - // an Operating Channel attribute may be present to indicate a preferred Operating Channel - // - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && 0 != pP2PInfo->uInvitationRequestOperatingChannelNumber - ) - { - opChannel = (u1Byte)pP2PInfo->uInvitationRequestOperatingChannelNumber; - } - else - { - if(pP2PInfo->InvitationContext.bPersistentInvitation) - { - if(0 == pP2PInfo->InvitationContext.OpChannel) - {// follow op ch - opChannel = pP2PInfo->OperatingChannel; - } - else - {// forced op ch - opChannel = pP2PInfo->InvitationContext.OpChannel; - } - } - else - { - opChannel = pP2PInfo->InvitationContext.OpChannel; - } - } - - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, opChannel); - - if(pP2PInfo->InvitationContext.bPersistentInvitation) - SET_FLAG(invitFlag, P2P_INVITATION_FLAGS_TYPE); - - P2PAttr_Make_InvitationFlags(pBuf, invitFlag); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_InvitationRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - pu1Byte pLen = NULL; - - u1Byte status = 0; - u1Byte goTimeout = 0; - u1Byte cliTimeout = 0; - u1Byte opChannel = 0; - - const P2P_DEV_LIST_ENTRY *pDev = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - pDev = p2p_DevList_Find(&pP2PInfo->devList, da, P2P_DEV_TYPE_DEV); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - status = pP2PInfo->InvitationResponseStatus; - else - status = pP2PInfo->Status; - - P2PAttr_Make_Status(pBuf, status); - - if(pP2PInfo->InvitationContext.bPersistentInvitation) - {// in persistent case, we have to tell the peer our conf time - // No matter GO or client, we fill them with the max value - goTimeout = pP2PInfo->GOConfigurationTimeout; - cliTimeout = pP2PInfo->ClientConfigurationTimeout; - } - else - {// non persistent case - goTimeout = 0; - cliTimeout = 0; - } - P2PAttr_Make_ConfigTimeout(pBuf, goTimeout, cliTimeout); - - P2PAttr_Make_GroupBssid(pBuf, pP2PInfo->InvitationContext.GroupBssid); - - P2PAttr_Make_ChannelList(pBuf, pP2PInfo, &pDev->p2p->commonChannels); - - // - // GO or Persisstent GO: - // intended Operating Channel - // - // Client or Persistent Client (optional): - // not specified in the spec - // - if(pP2PInfo->InvitationContext.bPersistentInvitation) - { - // - // if GO => intended op chnl, shall be one of the channels in the channel list in the InvitationReq - // if Client => intended op chnl. - // - if(P2P_CLIENT == pP2PInfo->InvitationContext.InvitorRole // peer is Cli - && pP2PInfo->InvitationContext.bPersistentInvitation // persistent - ) - {// I'm persistent GO - opChannel = pP2PInfo->InvitationContext.OpChannel; - } - else - { - opChannel = pP2PInfo->InvitationContext.InvitedDevice.OperatingChannel; - } - } - else - {// we are invited - // - // Not defined in the spec. - // Follow the op channel of the peer. - // - opChannel = pP2PInfo->InvitationContext.InvitedDevice.OperatingChannel; - } - - P2PAttr_Make_OperatingChannel(pBuf, pP2PInfo->CountryString, pP2PInfo->RegulatoryClass, opChannel); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_DevDiscReqIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - - PP2P_DEVICE_DISCOVERABILITY_CONTEXT pDevDiscContext = &pP2PInfo->DeviceDiscoverabilityContext; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - P2PAttr_Make_DevId(pBuf, pP2PInfo->DeviceDiscoverabilityContext.ClientDeviceAddress); - P2PAttr_Make_GroupId(pBuf, pDevDiscContext->GODeviceAddr, pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_DevDiscRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN u1Byte status - ) -{ - pu1Byte pLen = NULL; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - P2PAttr_Make_Status(pBuf, status); - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_PdReqIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - pu1Byte pLen = NULL; - PP2P_WPS_ATTRIBUTES pWps = &pP2PInfo->WpsAttributes; - u1Byte grpCap = 0; - - pu1Byte pGrpDevAddr = NULL; - pu1Byte pGrpSsidBuf = NULL; - u1Byte grpSsidLen = 0; - - if(NULL == (pLen = p2p_add_IEHdr(pBuf))) return; - - if(p2p_ActingAs_Go(pP2PInfo)) - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Invalid role\n")); - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - grpCap = (u1Byte)pP2PInfo->ProvisionRequestGroupCapability; - } - else - grpCap = pP2PInfo->GroupCapability; - - P2PAttr_Make_Capability(pBuf, - pP2PInfo->DeviceCapability & ~P2P_DEV_CAP_CLIENT_DISCOVERABILITY, // this cap valid only in P2P Group Info and AssocReq - grpCap); - - P2PAttr_Make_DevInfo(pBuf, - pP2PInfo->DeviceAddress, - pWps->ConfigMethod, - &pWps->PrimaryDeviceType, - pWps->SecondaryDeviceTypeLength, - pWps->SecondaryDeviceTypeList, - pWps->DeviceNameLength, - pWps->DeviceName); - - if(pP2PInfo->ProvisionDiscoveryContext.go) - {// connecting to GO - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - if(pP2PInfo->bProvisionRequestUseGroupID) - { - pGrpDevAddr = pP2PInfo->ProvisionRequestGroupIDDeviceAddress; - pGrpSsidBuf = pP2PInfo->ProvisionRequestGroupIDSSID; - grpSsidLen = pP2PInfo->uProvisionRequestGroupIDSSIDLength; - } - } - else - { - pGrpDevAddr = pP2PInfo->ProvisionDiscoveryContext.devAddr; - pGrpSsidBuf = pP2PInfo->ProvisionDiscoveryContext.SsidBuf; - grpSsidLen = pP2PInfo->ProvisionDiscoveryContext.SsidLen; - } - - if(pGrpDevAddr) - P2PAttr_Make_GroupId(pBuf, pGrpDevAddr, pGrpSsidBuf, grpSsidLen); - } - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -static -VOID -p2p_build_PdRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ) -{ - /* Nothing to Append */ - return; -} - -static -VOID -p2p_add_WpsIeConfigMethods( - IN FRAME_BUF *pBuf, - IN u2Byte configMethods - ) -{ - pu1Byte pLen = NULL; - - FrameBuf_Add_u1(pBuf, (u1Byte)EID_Vendor); - - pLen = FrameBuf_Add(pBuf, 1); - - FrameBuf_Add_be_u4(pBuf, 0x0050F204); - - // Version - FrameBuf_Add_be_u2(pBuf, P2P_WPS_ATTR_TAG_VERSION); - FrameBuf_Add_be_u2(pBuf, 1); - FrameBuf_Add_u1(pBuf, 0x10); - - // Config Method - FrameBuf_Add_be_u2(pBuf, P2P_WPS_ATTR_TAG_CONFIG_METHODS); - FrameBuf_Add_be_u2(pBuf, 2); - FrameBuf_Add_be_u2(pBuf, configMethods); - - p2p_update_IeHdrLen(pBuf, pLen); - - return; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_add_P2PPublicActionHdr( - IN FRAME_BUF *pBuf, - IN u1Byte subtype, - IN u1Byte dialogToken - ) -{ - RT_TRACE_F(COMP_P2P, pBuf->dbgLevel, ("token: %u\n", dialogToken)); - - FrameBuf_Add_u1(pBuf, WLAN_ACTION_PUBLIC); - FrameBuf_Add_u1(pBuf, WLAN_PA_VENDOR_SPECIFIC); - FrameBuf_Add_be_u4(pBuf, P2P_IE_VENDOR_TYPE); - FrameBuf_Add_u1(pBuf, subtype); - FrameBuf_Add_u1(pBuf, dialogToken); - - return; -} - -VOID -p2p_Construct_GoNegReq( - IN P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_GO_NEG_REQ, dialogToken); - - // P2P IE - p2p_build_GoNegReqIe(pBuf, pP2PInfo); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_GO_NEGOTIATION_REQUEST, pBuf); - - // WPS IE - WPS_AppendElement(pP2PInfo->pAdapter, &pBuf->os, TRUE, WPS_INFO_PROBEREQ_IE); - - // WFD IE - WFD_AppendP2pGoNegReqIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("%s(): intent = %u, tie breaker: %u, dialog token: %u\n", - __FUNCTION__, - pP2PInfo->GOIntent >> 1, - pP2PInfo->GOIntent & 0x01, - dialogToken)); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_GoNegRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_GO_NEG_RSP, dialogToken); - - // P2P IE - p2p_build_GoNegRspIe(pBuf, pP2PInfo, da); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_GO_NEGOTIATION_RESPONSE, pBuf); - - // WPS IE - WPS_AppendElement(pP2PInfo->pAdapter, &pBuf->os, TRUE, WPS_INFO_PROBERSP_IE); - - // WFD IE - WFD_AppendP2pGoNegRspIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("%s(): intent = %u, tie breaker: %u, dialog token: %u\n", - __FUNCTION__, - pP2PInfo->GOIntent >> 1, - pP2PInfo->GOIntent & 0x01, - dialogToken)); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_GoNegConf( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_GO_NEG_CONF, dialogToken); - - // P2P IE - p2p_build_GoNegConfIe(pBuf, pP2PInfo, da); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_GO_NEGOTIATION_CONFIRM, pBuf); - - // WFD IE - WFD_AppendP2pGoNegConfirmIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_InvitationReq( - IN P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_INVITATION_REQ, dialogToken); - - // P2P IE - p2p_build_InvitationReqIe(pBuf, pP2PInfo, da); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_INVITATION_REQUEST, pBuf); - - /* Below use octet string ONLY */ - { - WFD_AppendP2pInvitationReqIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - } - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_InvitationRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ) -{ - // - // Assume that pP2PInfo->Status has been set. - // - - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_INVITATION_RSP, dialogToken); - - // P2P IE - p2p_build_InvitationRspIe(pBuf, pP2PInfo, da); - - // Additional IE - P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_INVITATION_RESPONSE, pBuf); - - // WFD IE - WFD_AppendP2pInvitationRspIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_DevDiscReq( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN const u1Byte *bssid - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, bssid, pP2PInfo->DeviceAddress, bssid); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_DEV_DISC_REQ, dialogToken); - - // P2P IE - p2p_build_DevDiscReqIe(pBuf, pP2PInfo); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_DevDiscRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte status - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_DEV_DISC_RSP, dialogToken); - - // P2P IE - p2p_build_DevDiscRspIe(pBuf, pP2PInfo, status); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_PDReq( - IN P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u2Byte configMethod - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, da); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_PROV_DISC_REQ, dialogToken); - - // P2P IE - p2p_build_PdReqIe(pBuf, pP2PInfo); - - // Additional IE - if(0 == P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_PROVISION_DISCOVERY_REQUEST, pBuf)) - { - p2p_add_WpsIeConfigMethods(pBuf, configMethod); - } - - // WFDS IE - P2PSvc_MakePDReqIE(pP2PInfo->pP2PSvcInfo, pBuf); - - // WFD IE - WFD_AppendP2pProvDiscoveryReqIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_Construct_PDRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN OCTET_STRING *posP2PAttrs, - IN u2Byte configMethod, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ) -{ - FunctionIn(COMP_P2P); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pP2PInfo->DeviceAddress, pP2PInfo->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_PROV_DISC_RSP, dialogToken); - - // P2P IE - p2p_build_PdRspIe(pBuf, pP2PInfo); - - // Additional IE - if(0 == P2P_AddIe_Append(&pP2PInfo->AdditionalIEs, P2P_ADD_IE_PROVISION_DISCOVERY_RESPONSE, pBuf)) - { - // TODO: we temporarilly accept all confing method in ProvisionDiscoveryReq - p2p_add_WpsIeConfigMethods(pBuf, configMethod); - } - - // WFDS IE - P2PSvc_MakePDRspIE(pP2PInfo->pP2PSvcInfo, posP2PAttrs, pBuf); - - // WFD IE - WFD_AppendP2pProvDiscoveryRspIEs(pP2PInfo->pAdapter, FrameBuf_Cap(pBuf), &pBuf->os); - - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_P2P); - - return; -} - -VOID -p2p_build_FakeInvitationRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - p2p_build_InvitationRspIe(pBuf, pP2PInfo, da); - - return; -} - -// -// Description: -// Construct fake provision discovery response frame by the device which is considered as the -// respondor and fill the content by the previous received information. -// Arguments: -// [in] pP2PInfo - -// P2P information context. -// [in] pRspDev - -// The device which sends the provision discovery response frame. -// [in] da - -// The destination which the response frame is sent to. -// [out] -pBuf -// The context of FRAME_BUF to put the frame. -// Return: -// Return RT_STATUS_SUCCESS if the construction of this response frame succeeds. -// By Bruce, 2015-02-17. -// -RT_STATUS -p2p_Construct_FakePDRsp( - IN P2P_INFO *pP2PInfo, - IN P2P_DEV_LIST_ENTRY *pRspDev, - IN const u1Byte *da, - OUT FRAME_BUF *pBuf - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - pu1Byte pPdReqFrame = NULL; - OCTET_STRING osPdReq, osTmpIe; - pu1Byte pPdRspTa = NULL;; - - FunctionIn(COMP_P2P); - - do - { - if(!pRspDev) - { - RT_ASSERT(FALSE, ("pRspDev = NULL\n")); - rtStatus = RT_STATUS_INVALID_PARAMETER; - break; - } - - if(!pRspDev->txFrames[P2P_FID_PD_REQ]) - { - RT_ASSERT(FALSE, ("pRspDev->txFrames[P2P_FID_PD_REQ] = NULL\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(0 == pRspDev->txFrames[P2P_FID_PD_REQ]->frameLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("pRspDev->txFrames[P2P_FID_PD_REQ].frameLen = 0\n")); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - FillOctetString(osPdReq, pRspDev->txFrames[P2P_FID_PD_REQ]->frame, pRspDev->txFrames[P2P_FID_PD_REQ]->frameLen); - - pPdReqFrame = pRspDev->txFrames[P2P_FID_PD_REQ]->frame; - pPdRspTa = Frame_pDaddr(osPdReq); - - // MAC Header - p2p_add_ActionFrameMacHdr(pBuf, da, pPdRspTa, pPdRspTa); - - // Action Header - p2p_add_P2PPublicActionHdr(pBuf, P2P_PROV_DISC_RSP, pRspDev->txFrames[P2P_FID_PD_REQ]->token); - - // WPS IE, getting from the original PD request - osTmpIe = PacketGetElement(osPdReq, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUB_DONT_CARE); - if(osTmpIe.Length > 0) - { - PacketMakeElement(&(pBuf->os), EID_Vendor, osTmpIe); - } - - // WFD IE - if(pRspDev->rxFrames[P2P_FID_PROBE_RSP]->frameLen > 0) - { - osTmpIe = PacketGetElement(osPdReq, EID_Vendor, OUI_SUB_WIFI_DISPLAY, OUI_SUB_DONT_CARE); - if(osTmpIe.Length > 0) - { - PacketMakeElement(&(pBuf->os), EID_Vendor, osTmpIe); - } - } - FrameBuf_Dump(pBuf, 0, DBG_LOUD, __FUNCTION__); - }while(FALSE); - - FunctionOut(COMP_P2P); - - return rtStatus; -} - -#endif - diff --git a/network/wlan/WDI/COMMON/P2P_Channel.c b/network/wlan/WDI/COMMON/P2P_Channel.c deleted file mode 100644 index 121ab9d8..00000000 --- a/network/wlan/WDI/COMMON/P2P_Channel.c +++ /dev/null @@ -1,252 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Channel.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -VOID -p2p_channel_AddRegClass( - IN P2P_REG_CLASS *pRegCls, - IN u1Byte regClass, - IN u1Byte nChannels, - IN const u1Byte *channelList - ) -{ - pRegCls->regClass = regClass; - pRegCls->channels = nChannels; - p2p_MoveMemory(pRegCls->channel, channelList, nChannels); - - return; -} - -VOID -p2p_channel_IntersectRegClass( - IN const P2P_REG_CLASS *a, - IN const P2P_REG_CLASS *b, - OUT P2P_REG_CLASS *res - ) -{ - u1Byte ita = 0; - u1Byte itb = 0; - - PlatformZeroMemory(res, sizeof(*res)); - - res->regClass = a->regClass; - res->channels = 0; - - for(ita = 0; ita < a->channels; ita++) - { - for(itb = 0; itb < b->channels; itb++) - { - if(a->channel[ita] != b->channel[itb]) - continue; - - res->channel[res->channels++] = a->channel[ita]; - if(P2P_MAX_REG_CLASS_CHANNELS == res->channels) - return; - } - } -} - -VOID -p2p_channel_Dump( - IN const P2P_CHANNELS *channels - ) -{ - u1Byte itRegCls = 0; - u1Byte itChnl = 0; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("# reg class: %u\n", channels->regClasses)); - - for(itRegCls = 0; itRegCls < channels->regClasses; itRegCls++) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("reg: %u, ", channels->regClass[itRegCls].regClass)); - for(itChnl = 0; itChnl < channels->regClass[itRegCls].channels; itChnl++) - RT_TRACE(COMP_P2P, DBG_LOUD, ("%u ", channels->regClass[itRegCls].channel[itChnl])); - RT_TRACE(COMP_P2P, DBG_LOUD, ("\n")); - } -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -BOOLEAN -p2p_Channel_Add( - IN P2P_CHANNELS *channels, - IN u1Byte regClass, - IN u1Byte nChannels, - IN const u1Byte *channelList - ) -{ - u1Byte itRegClass = 0; - u1Byte itChannel = 0; - BOOLEAN bAdded = FALSE; - - if(P2P_MAX_REG_CLASS_CHANNELS < nChannels) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("too many channels: %u\n", nChannels)); - return FALSE; - } - - for(itRegClass = 0; itRegClass < channels->regClasses; itRegClass++) - { - P2P_REG_CLASS *pRegCls = &channels->regClass[itRegClass]; - - if(regClass != pRegCls->regClass) - continue; - - // Override all the orignal channels - p2p_channel_AddRegClass(pRegCls, regClass, nChannels, channelList); - bAdded = TRUE; - break; - } - - if(!bAdded) - { - if(P2P_MAX_REG_CLASSES <= channels->regClasses) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("no more reg class could be added\n")); - return FALSE; - } - - p2p_channel_AddRegClass(&channels->regClass[channels->regClasses++], regClass, nChannels, channelList); - bAdded = TRUE; - } - - return bAdded; -} - -VOID -p2p_Channel_Reset( - IN P2P_CHANNELS *channels - ) -{ - PlatformZeroMemory(channels, sizeof(*channels)); - - return; -} - -VOID -p2p_Channel_Intersect( - IN const P2P_CHANNELS *a, - IN const P2P_CHANNELS *b, - OUT P2P_CHANNELS *res - ) -{ - u1Byte itRegClsA = 0; - u1Byte itRegClsB = 0; - - p2p_Channel_Reset(res); - - if(!a->regClasses || !b->regClasses) - return; - - for(itRegClsA = 0; itRegClsA < a->regClasses; itRegClsA++) - { - // Match reg class - for(itRegClsB = 0; itRegClsB < b->regClasses; itRegClsB++) - if(a->regClass[itRegClsA].regClass == b->regClass[itRegClsB].regClass) - break; - - // The class can't be found in b - if(itRegClsB == b->regClasses) - continue; - - p2p_channel_IntersectRegClass(&a->regClass[itRegClsA], &b->regClass[itRegClsB], &res->regClass[res->regClasses]); - if(res->regClass[res->regClasses].channels) - { - res->regClasses++; - if(P2P_MAX_REG_CLASSES == res->regClasses) - return; - } - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("a:\n")); - p2p_channel_Dump(a); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("b:\n")); - p2p_channel_Dump(b); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("res:\n")); - p2p_channel_Dump(res); - - return; -} - -BOOLEAN -p2p_Channel_ChannelListAttrToChannels( - IN u2Byte chnlListAttrLen, - IN const u1Byte *chnlListAttr, - OUT P2P_CHANNELS *pChannels - ) -{ - const u1Byte *pos = chnlListAttr; - const u1Byte *end = chnlListAttr + chnlListAttrLen; - - if(!chnlListAttr) - return FALSE; - - if(!chnlListAttrLen) - return FALSE; - - pChannels->regClasses = 0; - - while(pos < end) - { - P2P_REG_CLASS *regClass = pChannels->regClass + pChannels->regClasses; - u1Byte channels = 0; - - // class - regClass->regClass = pos[0]; - pos++; - - // number of channels - channels = pos[1]; - pos++; - - if(sizeof(regClass->channel) < channels) - channels = sizeof(regClass->channel); - - // channel list - for(regClass->channels = 0; regClass->channels < channels; regClass->channels++) - { - regClass->channel[regClass->channels] = pos[0]; - pos++; - } - - pChannels->regClasses++; - } - - return TRUE; -} - -BOOLEAN -p2p_Channel_InChannelEntryList( - IN u1Byte channel, - IN const P2P_CHANNELS *pChannels - ) -{ - u1Byte itRegClass = 0; - - for(itRegClass = 0; itRegClass < pChannels->regClasses; itRegClass++) - { - const P2P_REG_CLASS *regClass = pChannels->regClass + itRegClass; - u1Byte itChannel = 0; - - for(itChannel = 0; itChannel < regClass->channels; itChannel++) - { - if(regClass->channel[itChannel] == channel) - return TRUE; - } - } - - return FALSE; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Channel.h b/network/wlan/WDI/COMMON/P2P_Channel.h deleted file mode 100644 index 17b833a4..00000000 --- a/network/wlan/WDI/COMMON/P2P_Channel.h +++ /dev/null @@ -1,41 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_CHANNEL_H -#define __INC_P2P_CHANNEL_H - -// P2P_MAX_REG_CLASSES - Maximum number of regulatory classes -#define P2P_MAX_REG_CLASSES 10 - -// P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class -#define P2P_MAX_REG_CLASS_CHANNELS 20 - -#define P2P_REG_CLASS_NONE 0 - -typedef struct _P2P_CHANNEL -{ - u1Byte regClass; - u1Byte channel; -}P2P_CHANNEL; - -typedef struct _P2P_REG_CLASS -{ - u1Byte regClass; - u1Byte channel[P2P_MAX_REG_CLASS_CHANNELS]; - u1Byte channels; -}P2P_REG_CLASS; - -typedef struct _P2P_CHANNELS -{ - P2P_REG_CLASS regClass[P2P_MAX_REG_CLASSES]; - u1Byte regClasses; -}P2P_CHANNELS; - - -#endif // #ifndef __INC_P2P_CHANNEL_H \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/P2P_DevList.c b/network/wlan/WDI/COMMON/P2P_DevList.c deleted file mode 100644 index d651cbd6..00000000 --- a/network/wlan/WDI/COMMON/P2P_DevList.c +++ /dev/null @@ -1,1283 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_DevList.tmh" -#endif - -#include "P2P_DevList.h" -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -static const char *signature = "P2P_DevList_Signature"; - -#define P2P_DEV_LIST_DEV_ENTRY_LIFETIME_MS (10 * 60 * 1000) - -//----------------------------------------------------------------------------- -// Foreward declaration -//----------------------------------------------------------------------------- -static -VOID -p2p_devlist_FreeDev( - IN P2P_DEV_LIST *dlist, - IN P2P_DEV_LIST_ENTRY *pDev - ); - -static -const char * -p2p_devlist_DevTypeStr( - IN P2P_DEV_TYPE type - ); - -static -u8Byte -p2p_devlist_RxFrameElapsedTimeMs( - IN const P2P_FRAME_INFO *finfo - ); - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -static -u4Byte -p2p_devlist_RemoveDatedDev( - IN P2P_DEV_LIST *dlist - ) -{ - RT_LIST_ENTRY *pEntry, *pn = NULL; - u4Byte nFreedDev = 0; - - RtEntryListForEachSafe(&dlist->list, pEntry, pn) - { - P2P_DEV_LIST_ENTRY *pDev = (P2P_DEV_LIST_ENTRY *)pEntry; - - if(RTIsListNotEmpty(&pDev->rxFrameQ)) - { - const P2P_FRAME_INFO *lastRxFrame = (P2P_FRAME_INFO *)RTGetTailList(&pDev->rxFrameQ); - u8Byte lastRxElapsed = p2p_devlist_RxFrameElapsedTimeMs(lastRxFrame); - - if(lastRxElapsed <= P2P_DEV_LIST_DEV_ENTRY_LIFETIME_MS) - continue; - - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Freeing "MACSTR", type: %s for no rx for %llu ms\n", - //MAC2STR(pDev->mac), p2p_devlist_DevTypeStr(pDev->type), lastRxElapsed)); - - p2p_devlist_FreeDev(dlist, pDev); - nFreedDev++; - } - } - - return nFreedDev; -} - -static -u4Byte -p2p_devlist_RemoveProbeReqOnlyDev( - IN P2P_DEV_LIST *dlist - ) -{ - RT_LIST_ENTRY *pEntry, *pn = NULL; - u4Byte nFreedDev = 0; - - RtEntryListForEachSafe(&dlist->list, pEntry, pn) - { - P2P_DEV_LIST_ENTRY *pDev = (P2P_DEV_LIST_ENTRY *)pEntry; - P2P_FRAME_INFO *pFrame = NULL; - u4Byte rxFrames = 0; - - RtEntryListForEach(&pDev->rxFrameQ, pEntry) - { - rxFrames++; - } - - if(1 == rxFrames && pDev->rxFrames[P2P_FID_PROBE_REQ]) - { - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Freeing "MACSTR", type: %s for we've rx only probe req from it\n", - //MAC2STR(pDev->mac), p2p_devlist_DevTypeStr(pDev->type))); - - p2p_devlist_FreeDev(dlist, pDev); - nFreedDev++; - } - } - - return nFreedDev; -} - -static -u4Byte -p2p_devlist_AgeFunction( - IN P2P_DEV_LIST *dlist - ) -{ - u4Byte nFreedDev = 0; - - nFreedDev += p2p_devlist_RemoveDatedDev(dlist); - nFreedDev += p2p_devlist_RemoveProbeReqOnlyDev(dlist); - - return nFreedDev; -} - -static -P2P_DEV_LIST_ENTRY * -p2p_devlist_NewDev( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type - ) -{ - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_DEV_INFO *pInfo = NULL; - - if(NULL == (pDev = (P2P_DEV_LIST_ENTRY *)Pool_Acquire(&dlist->entryPool))) - { - if(!p2p_devlist_AgeFunction(dlist)) - { - return NULL; - } - - pDev = (P2P_DEV_LIST_ENTRY *)Pool_Acquire(&dlist->entryPool); - } - - if(P2P_DEV_TYPE_LEGACY != type) - { - if(NULL == (pInfo = (P2P_DEV_INFO *)Pool_Acquire(&dlist->p2pDevInfoPool))) - { - Pool_Release(&dlist->entryPool, pDev); - return NULL; - } - - PlatformZeroMemory(pInfo, sizeof(*pInfo)); - } - - PlatformZeroMemory(pDev, sizeof(*pDev)); - - RTInitializeListHead(&pDev->rxFrameQ); - cpMacAddr(pDev->mac, mac); - pDev->type = type; - pDev->p2p = pInfo; - - RTInsertTailListWithCnt(&dlist->list, &pDev->list, &dlist->count); - - return pDev; -} - -static -VOID -p2p_devlist_FreeRxFrames( - IN P2P_DEV_LIST *dlist, - IN P2P_DEV_LIST_ENTRY *pDev, - IN BOOLEAN bActionOnly - ) -{ - u4Byte it = 0; - u4Byte start = bActionOnly ? P2P_FID_ACTION_START : 0; - - for(it = start; it < P2P_FID_MAX; it++) - { - if(pDev->rxFrames[it]) - { - RTRemoveEntryList(&pDev->rxFrames[it]->list); - if(pDev->rxFrames[it]->msg) - { - p2p_parse_FreeMessage(pDev->rxFrames[it]->msg); - Pool_Release(&dlist->rxMsgPool, pDev->rxFrames[it]->msg); - pDev->rxFrames[it]->msg = NULL; - } - Pool_Release(&dlist->framePool, pDev->rxFrames[it]); - pDev->rxFrames[it] = NULL; - } - } - - return; -} - -static -VOID -p2p_devlist_FreeTxFrames( - IN P2P_DEV_LIST *dlist, - IN P2P_DEV_LIST_ENTRY *pDev, - IN BOOLEAN bActionOnly - ) -{ - u4Byte it = 0; - u4Byte start = bActionOnly ? P2P_FID_ACTION_START : 0; - - for(it = start; it < P2P_FID_MAX; it++) - { - if(pDev->txFrames[it]) - { - Pool_Release(&dlist->framePool, pDev->txFrames[it]); - pDev->txFrames[it] = NULL; - } - } - - return; -} - -static -VOID -p2p_devlist_FreeDev( - IN P2P_DEV_LIST *dlist, - IN P2P_DEV_LIST_ENTRY *pDev - ) -{ - RTRemoveEntryList(&pDev->list); - - p2p_devlist_FreeRxFrames(dlist, pDev, FALSE); - p2p_devlist_FreeTxFrames(dlist, pDev, FALSE); - - if(pDev->p2p) - { - Pool_Release(&dlist->p2pDevInfoPool, pDev->p2p); - pDev->p2p = NULL; - } - - PlatformZeroMemory(pDev, sizeof(*pDev)); - - Pool_Release(&dlist->entryPool, pDev); - - return; -} - -static -RT_STATUS -p2p_devlist_ParseFrame( - IN P2P_FRAME_TYPE frameType, - IN u2Byte frameLen, - IN u1Byte *frame, - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - const OCTET_STRING mpdu = {frame, frameLen}; - - if(P2P_FID_ACTION_START <= frameType) - status = p2p_parse_Action(&mpdu, DBG_LOUD, msg); - else - status = p2p_parse_Ies(&mpdu, DBG_TRACE, msg); - - return status; -} - -static -RT_STATUS -p2p_devlist_UpdateFrameInfo( - IN P2P_DEV_LIST *dlist, - IN u2Byte frameLen, - IN const u1Byte *frame, - IN P2P_FRAME_TYPE type, - IN u1Byte token, - IN P2P_MESSAGE *msg, - IN u8Byte time, - IN u1Byte channel, - IN s4Byte sigPower, - IN u1Byte sigStrength, - OUT P2P_FRAME_INFO *finfo - ) -{ - if(sizeof(finfo->frame) < frameLen) - { - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Unable to copy frame, frame size: %u, buf size: %u\n", - frameLen, sizeof(finfo->frame))); - - return RT_STATUS_BUFFER_TOO_SHORT; - } - - p2p_MoveMemory(finfo->frame, frame, frameLen); - finfo->frameLen = frameLen; - finfo->type = type; - finfo->token = token; - if(msg) - { - if(finfo->msg) - { - p2p_parse_FreeMessage(finfo->msg); - Pool_Release(&dlist->rxMsgPool, finfo->msg); - } - finfo->msg = msg; - } - finfo->time = time; - finfo->channel = channel; - finfo->sigPower = sigPower; - finfo->sigStrength = sigStrength; - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_devlist_RxUpdateFrameInfo( - IN P2P_DEV_LIST *dlist, - IN P2P_DEV_LIST_ENTRY *pEntry, - IN const RT_RFD *rfd, - IN u1Byte rxChnl, - IN P2P_FRAME_TYPE type, - IN P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - if(!pEntry->rxFrames[type]) - { - if(!(pEntry->rxFrames[type] = Pool_Acquire(&dlist->framePool))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Unable to acquire from frame pool\n")); - return RT_STATUS_RESOURCE; - } - } - - status = p2p_devlist_UpdateFrameInfo(dlist, - rfd->PacketLength, - rfd->Buffer.VirtualAddress, - type, - msg->dialogToken, - msg, - PlatformGetCurrentTime(), - (msg->_dsParam) ? (msg->dsParam) : (rxChnl), - rfd->Status.RecvSignalPower, - rfd->Status.SignalStrength, - pEntry->rxFrames[type]); - - if(RT_STATUS_SUCCESS != status) - { - Pool_Release(&dlist->framePool, pEntry->rxFrames[type]); - pEntry->rxFrames[type] = NULL; - return status; - } - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_devlist_TxUpdateFrameInfo( - IN P2P_DEV_LIST *dlist, - IN P2P_DEV_LIST_ENTRY *pEntry, - IN const FRAME_BUF *buf, - IN P2P_FRAME_TYPE type, - IN u1Byte token, - IN u1Byte channel - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - if(!pEntry->txFrames[type]) - { - if(!(pEntry->txFrames[type] = Pool_Acquire(&dlist->framePool))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Unable to acquire from frame pool\n")); - return RT_STATUS_RESOURCE; - } - } - - status = p2p_devlist_UpdateFrameInfo(dlist, - FrameBuf_Length(buf), - FrameBuf_Head(buf), - type, - token, - NULL, - PlatformGetCurrentTime(), - channel, - 0, - 0, - pEntry->txFrames[type]); - - if(RT_STATUS_SUCCESS != status) - { - Pool_Release(&dlist->framePool, pEntry->txFrames[type]); - pEntry->txFrames[type] = NULL; - return status; - } - - return RT_STATUS_SUCCESS; -} - -static -P2P_DEV_LIST_ENTRY * -p2p_devlist_Get( - IN const P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RtEntryListForEach(&dlist->list, pEntry) - { - P2P_DEV_LIST_ENTRY *pDev = (P2P_DEV_LIST_ENTRY *)pEntry; - - if(pDev->type != type) - continue; - - if(!eqMacAddr(pDev->mac, mac)) - continue; - - return pDev; - } - - return NULL; -} - -static -P2P_DEV_LIST_ENTRY * -p2p_devlist_GetGo( - IN const P2P_DEV_LIST *dlist, - IN const u1Byte *devAddr - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RtEntryListForEach(&dlist->list, pEntry) - { - P2P_DEV_LIST_ENTRY *pDev = (P2P_DEV_LIST_ENTRY *)pEntry; - - if(P2P_DEV_TYPE_GO != pDev->type) - continue; - - if(pDev->rxFrames[P2P_FID_BEACON] - && pDev->rxFrames[P2P_FID_BEACON]->msg->devIdDevAddr - && eqMacAddr(pDev->rxFrames[P2P_FID_BEACON]->msg->devIdDevAddr, devAddr) - ) - { - return pDev; - } - - if(pDev->rxFrames[P2P_FID_PROBE_RSP] - && pDev->rxFrames[P2P_FID_PROBE_RSP]->msg->devInfoDevAddr - && eqMacAddr(pDev->rxFrames[P2P_FID_PROBE_RSP]->msg->devInfoDevAddr, devAddr) - ) - { - return pDev; - } - } - - return NULL; -} - -static -VOID -p2p_devlist_Flush( - IN P2P_DEV_LIST *dlist - ) -{ - while(RTIsListNotEmpty(&dlist->list)) - { - p2p_devlist_FreeDev(dlist, (P2P_DEV_LIST_ENTRY *)RTGetHeadList(&dlist->list)); - } - - return; -} - -static -u8Byte -p2p_devlist_RxFrameElapsedTimeMs( - IN const P2P_FRAME_INFO *finfo - ) -{ - return (PlatformGetCurrentTime() - finfo->time) / 1000; -} - -static -const char * -p2p_devlist_FrameTypeStr( - IN P2P_FRAME_TYPE type - ) -{ - const char *typeStr = NULL; - - if(P2P_FID_BEACON == type) - typeStr = "BEACON"; - else if(P2P_FID_PROBE_REQ == type) - typeStr = "ProbeReq"; - else if(P2P_FID_PROBE_RSP == type) - typeStr = "ProbeRsp"; - else if(P2P_FID_GO_NEG_REQ == type) - typeStr = "GoNegReq"; - else if(P2P_FID_GO_NEG_RSP == type) - typeStr = "GoNegRsp"; - else if(P2P_FID_GO_NEG_CONF == type) - typeStr = "GoNegConf"; - else if(P2P_FID_INV_REQ == type) - typeStr = "InvReq"; - else if(P2P_FID_INV_RSP == type) - typeStr = "InvRsp"; - else if(P2P_FID_PD_REQ == type) - typeStr = "PdReq"; - else if(P2P_FID_PD_RSP == type) - typeStr = "PdRsp"; - else - typeStr = "unknown"; - - return typeStr; -} - -static -const char * -p2p_devlist_DevTypeStr( - IN P2P_DEV_TYPE type - ) -{ - const char *typeStr = NULL; - - if(P2P_DEV_TYPE_LEGACY == type) - typeStr = "Legacy"; - else if(P2P_DEV_TYPE_GO == type) - typeStr = "GO"; - else if(P2P_DEV_TYPE_DEV == type) - typeStr = "Device"; - else - typeStr = "unknown"; - - return typeStr; -} - -static -VOID -p2p_devlist_DumpFrameInfo( - IN const P2P_FRAME_INFO *finfo - ) -{ - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("***\n")); - - // Type - RT_TRACE(COMP_P2P, DBG_LOUD, ("type: %s\n", p2p_devlist_FrameTypeStr(finfo->type))); - - // Time - RT_TRACE(COMP_P2P, DBG_LOUD, ("elapsed time: %u (ms)\n", (u4Byte)(PlatformGetCurrentTime() - finfo->time) / 1000)); - - // Channel - RT_TRACE(COMP_P2P, DBG_LOUD, ("channel: %u\n", finfo->channel)); - - // Signal power - RT_TRACE(COMP_P2P, DBG_LOUD, ("sig pow: %d\n", finfo->sigPower)); - - // Signal strength - RT_TRACE(COMP_P2P, DBG_LOUD, ("sig strength: %u\n", finfo->sigStrength)); - -} - -static -VOID -p2p_devlist_DumpDev( - IN const P2P_DEV_LIST_ENTRY *pDev - ) -{ - RT_LIST_ENTRY *pRxFrame = NULL; - u4Byte it = 0; - - if(P2P_DEV_TYPE_LEGACY == pDev->type) - { - if(!(pDev->rxFrames[P2P_FID_BEACON] && pDev->rxFrames[P2P_FID_PD_RSP])) - return; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("---\n")); - - // MAC address - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("mac: "MACSTR"\n", MAC2STR(pDev->mac))); - - // Type - RT_TRACE(COMP_P2P, DBG_LOUD, ("dev type: %s\n", p2p_devlist_DevTypeStr(pDev->type))); - - // Dev name - for(it = 0; it < P2P_FID_MAX; it++) - { - if(pDev->rxFrames[it] && pDev->rxFrames[it]->msg->_wpsDevName) - { - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Dev name: ", pDev->rxFrames[it]->msg->_wpsDevName, pDev->rxFrames[it]->msg->wpsDevNameLen); - break; - } - } - - // Manufacturer - for(it = 0; it < P2P_FID_MAX; it++) - { - if(pDev->rxFrames[it] && pDev->rxFrames[it]->msg->_wpsManufacturer) - { - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Manufacturer: ", pDev->rxFrames[it]->msg->_wpsManufacturer, pDev->rxFrames[it]->msg->wpsManufacturerLen); - break; - } - } - - // Rx frames - RT_TRACE(COMP_P2P, DBG_LOUD, ("Rx frames in chronological order\n")); - - RtEntryListForEach(&pDev->rxFrameQ, pRxFrame) - { - p2p_devlist_DumpFrameInfo((P2P_FRAME_INFO *)pRxFrame); - } - - // Tx frames - RT_TRACE(COMP_P2P, DBG_LOUD, ("Tx frames\n")); - - for(it = 0; it < P2P_FID_MAX; it++) - { - if(!pDev->txFrames[it]) - continue; - p2p_devlist_DumpFrameInfo(pDev->txFrames[it]); - } - - // PD config method - RT_TRACE(COMP_P2P, DBG_LOUD, ("pdConfigMethod: 0x%02X\n", pDev->p2p->pdConfigMethod)); -} - -static -P2P_FRAME_TYPE -p2p_devlist_GetCorrespReqActionCode( - IN P2P_FRAME_TYPE frameType - ) -{ - if(P2P_FID_GO_NEG_RSP == frameType) - return P2P_FID_GO_NEG_REQ; - - if(P2P_FID_GO_NEG_CONF == frameType) - return P2P_FID_GO_NEG_RSP; - - if(P2P_FID_INV_RSP == frameType) - return P2P_FID_INV_REQ; - - if(P2P_FID_PD_RSP == frameType) - return P2P_FID_PD_REQ; - - return P2P_FID_MAX; -} - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -RT_STATUS -p2p_DevList_Init( - IN P2P_DEV_LIST *dlist - ) -{ - PlatformZeroMemory(dlist, sizeof(*dlist)); - - p2p_InitLock(&dlist->lock); - - dlist->count = 0; - RTInitializeListHead(&dlist->list); - dlist->sig = signature; - - Pool_Init(&dlist->entryPool, "DevPool", sizeof(dlist->entryPoolRsvd), dlist->entryPoolRsvd, sizeof(dlist->entryPoolRsvd[0]), 0, DBG_LOUD); - Pool_Init(&dlist->p2pDevInfoPool, "P2PDevInfoPool", sizeof(dlist->p2pDevInfoPoolRsvd), dlist->p2pDevInfoPoolRsvd, sizeof(dlist->p2pDevInfoPoolRsvd[0]), 0, DBG_LOUD); - Pool_Init(&dlist->framePool, "FramePool", sizeof(dlist->framePoolRsvd), dlist->framePoolRsvd, sizeof(dlist->framePoolRsvd[0]), 0, DBG_LOUD); - Pool_Init(&dlist->rxMsgPool, "RxMsgPool", sizeof(dlist->rxMsgPoolRsvd), dlist->rxMsgPoolRsvd, sizeof(dlist->rxMsgPoolRsvd[0]), 0, DBG_LOUD); - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -p2p_DevList_Flush( - IN P2P_DEV_LIST *dlist - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - FunctionIn(COMP_P2P); - - p2p_AcquireLock(&dlist->lock); - - RtEntryListForEach(&dlist->list, pEntry) - { - P2P_DEV_LIST_ENTRY *pDev = (P2P_DEV_LIST_ENTRY *)pEntry; - - pDev->bDirty = FALSE; - } - - p2p_ReleaseLock(&dlist->lock); - - FunctionOut(COMP_P2P); - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -p2p_DevList_Free( - IN P2P_DEV_LIST *dlist - ) -{ - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - p2p_AcquireLock(&dlist->lock); - - p2p_devlist_Flush(dlist); - - dlist->sig = NULL; - - p2p_ReleaseLock(&dlist->lock); - - p2p_FreeLock(&dlist->lock); - - Pool_Dump(&dlist->entryPool); - Pool_Dump(&dlist->p2pDevInfoPool); - Pool_Dump(&dlist->framePool); - Pool_Dump(&dlist->rxMsgPool); - - return RT_STATUS_SUCCESS; -} - -VOID -p2p_DevList_Lock( - IN P2P_DEV_LIST *dlist - ) -{ - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - p2p_AcquireLock(&dlist->lock); -} - -VOID -p2p_DevList_Unlock( - IN P2P_DEV_LIST *dlist - ) -{ - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - p2p_ReleaseLock(&dlist->lock); -} - -RT_STATUS -p2p_DevList_RxUpdate( - IN P2P_DEV_LIST *dlist, - IN P2P_FRAME_TYPE frameType, - IN const RT_RFD *rfd, - IN u1Byte *mac, - IN u1Byte rxChnl, - OUT P2P_DEV_LIST_ENTRY **ppDev - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - P2P_MESSAGE *msg = NULL; - P2P_DEV_LIST_ENTRY *pDev = NULL; - P2P_DEV_TYPE type; - P2P_FRAME_TYPE reqFrameType = P2P_FID_MAX; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - if(ppDev) - *ppDev = NULL; - - if(NULL == (msg = (P2P_MESSAGE *)Pool_Acquire(&dlist->rxMsgPool))) - { - if(!p2p_devlist_AgeFunction(dlist)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Failed to acquire new msg from the rx msg pool\n")); - return RT_STATUS_RESOURCE; - } - - msg = (P2P_MESSAGE *)Pool_Acquire(&dlist->rxMsgPool); - } - - if(RT_STATUS_SUCCESS != (status = p2p_devlist_ParseFrame(frameType, rfd->PacketLength, rfd->Buffer.VirtualAddress, msg))) - { - Pool_Release(&dlist->rxMsgPool, msg); - return status; - } - - if(P2P_DEV_TYPE_LEGACY == (type = p2p_MessageSrcType(msg, frameType))) - { - p2p_parse_FreeMessage(msg); - Pool_Release(&dlist->rxMsgPool, msg); - return RT_STATUS_NOT_RECOGNIZED; - } - - if(NULL != (pDev = p2p_devlist_Get(dlist, mac, P2P_DEV_TYPE_GO)) - && P2P_FID_PD_RSP == frameType - && pDev->txFrames[P2P_FID_PD_REQ] - ) - {// the peer has dual role, and we are doing PD with it, choose the GO - type = P2P_DEV_TYPE_GO; - } - - reqFrameType = p2p_devlist_GetCorrespReqActionCode(frameType); - - do - { - // Get existing/new device - if(NULL == (pDev = p2p_devlist_Get(dlist, mac, type))) - { - if(P2P_FID_MAX != reqFrameType) - { - // Shall have corresponding req frame, but there's even no - // device entry for the peer, this port is not the one which - // sent the corresponding req frame. - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid ctx, mac: %02X:%02X:%02X:%02X:%02X:%02X, type: %u\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], type)); - status = RT_STATUS_INVALID_CONTEXT; - break; - } - - if(NULL == (pDev = p2p_devlist_NewDev(dlist, mac, type))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Failed to acquire new dev entry from the pool\n")); - status = RT_STATUS_RESOURCE; - break; - } - - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Add "MACSTR", type: %s for rx: %s\n", - //MAC2STR(mac), - //p2p_devlist_DevTypeStr(type), - //p2p_devlist_FrameTypeStr(frameType))); - } - - // Check dialog token - if(P2P_FID_ACTION_START <= frameType - && pDev->rxFrames[frameType] - ) - {// updating an action - if(msg->dialogToken == pDev->rxFrames[frameType]->msg->dialogToken) - { - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("rx duplicated %s from "MACSTR", drop it\n", - // p2p_devlist_FrameTypeStr(frameType), - // MAC2STR(mac))); - status = RT_STATUS_PKT_DROP; - break; - } - } - - if(P2P_FID_MAX != reqFrameType) - {// this is a rsp action - if(!pDev->txFrames[reqFrameType]) - {// this port didn't send the req action - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("no corresp tx frame %u, mac: %02X:%02X:%02X:%02X:%02X:%02X, type: %u\n", reqFrameType, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], type)); - status = RT_STATUS_INVALID_CONTEXT; - break; - } - - if(msg->dialogToken != pDev->txFrames[reqFrameType]->token) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("token mismatch, drop frame, req token: %u, rsp token: %u\n", pDev->txFrames[reqFrameType]->token, msg->dialogToken)); - status = RT_STATUS_PKT_DROP; - break; - } - } - - // If already rx this type of rame, remove it from rxFrameQ - if(pDev->rxFrames[frameType]) - { - RTRemoveEntryList(&pDev->rxFrames[frameType]->list); - } - - // Update rx frame - if(RT_STATUS_SUCCESS != (status = p2p_devlist_RxUpdateFrameInfo(dlist, pDev, rfd, rxChnl, frameType, msg))) - { - break; - } - - // Channel list - if(P2P_DEV_TYPE_LEGACY != type && msg->_channelList) - { - p2p_Channel_Reset(&pDev->p2p->channels); - p2p_parse_ChannelEntryList(msg->channelEntryListLen, msg->channelEntryList, &pDev->p2p->channels); - } - - // Instert to the tail of the rxFrameQ - if(pDev->rxFrames[frameType] != NULL) - RTInsertTailList(&pDev->rxFrameQ, &pDev->rxFrames[frameType]->list); - - pDev->bDirty = TRUE; - - if(P2P_FID_ACTION_START <= frameType) - p2p_devlist_DumpDev(pDev); - }while(FALSE); - - if(RT_STATUS_SUCCESS != status && msg) - { - p2p_parse_FreeMessage(msg); - Pool_Release(&dlist->rxMsgPool, msg); - } - - if(ppDev) - *ppDev = pDev; - - return status; -} - -RT_STATUS -p2p_DevList_FlushActionFrames( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE devType - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - P2P_DEV_LIST_ENTRY *pDev = NULL; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - if(NULL != (pDev = p2p_devlist_Get(dlist, mac, devType))) - { - p2p_devlist_FreeRxFrames(dlist, pDev, TRUE); - p2p_devlist_FreeTxFrames(dlist, pDev, TRUE); - } - - return status; -} - -RT_STATUS -p2p_DevList_TxUpdate( - IN P2P_DEV_LIST *dlist, - IN P2P_FRAME_TYPE frameType, - IN const u1Byte *mac, - IN P2P_DEV_TYPE devType, - IN const FRAME_BUF *buf, - IN u1Byte token, - IN u1Byte channel - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - P2P_DEV_LIST_ENTRY *pDev = NULL; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - do - { - // Get existing/new device - if(NULL == (pDev = p2p_devlist_Get(dlist, mac, devType))) - { - if(NULL == (pDev = p2p_devlist_NewDev(dlist, mac, devType))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Failed to acquire new dev entry from the pool\n")); - status = RT_STATUS_RESOURCE; - break; - } - - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Add "MACSTR", type: %s for tx: %s", - //MAC2STR(mac), - //p2p_devlist_DevTypeStr(devType), - //p2p_devlist_FrameTypeStr(frameType))); - } - - // Update tx frame - if(frameType < P2P_FID_ACTION_START && token) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("token (%u) specified when updating a mgnt frame, reset it to 0\n", token)); - token = 0; - } - - if(RT_STATUS_SUCCESS != (status = p2p_devlist_TxUpdateFrameInfo(dlist, pDev, buf, frameType, token, channel))) - { - break; - } - - // set dialog token for action frame tx to the one actually set - pDev->p2p->dialogToken = token; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("token updated to: %u\n", token)); - - }while(FALSE); - - return status; -} - -VOID -p2p_DevList_DialogTokenUpdate( - IN P2P_DEV_LIST_ENTRY *pDev - ) -{ - pDev->p2p->dialogToken++; - if(0 == pDev->p2p->dialogToken) - pDev->p2p->dialogToken = 1; - return; -} - -const P2P_DEV_LIST_ENTRY * -p2p_DevList_Find( - IN const P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type - ) -{ - const P2P_DEV_LIST_ENTRY *pDev = NULL; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - pDev = p2p_devlist_Get(dlist, mac, type); - - return pDev; -} - -P2P_DEV_LIST_ENTRY * -p2p_DevList_Get( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type - ) -{ - P2P_DEV_LIST_ENTRY *pDev = NULL; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - pDev = p2p_devlist_Get(dlist, mac, type); - - if(pDev && !pDev->bDirty) - {// no rx frame since last flush - return NULL; - } - - return pDev; -} - -P2P_DEV_LIST_ENTRY * -p2p_DevList_GetGo( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *devAddr - ) -{ - return p2p_devlist_GetGo(dlist, devAddr); -} - -RT_STATUS -p2p_DevList_Translate( - IN P2P_DEV_LIST *dlist, - IN u4Byte maxDevices, - OUT u4Byte *pNumDevCopied, - OUT P2P_DEVICE_DISCRIPTOR *descList - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - RT_LIST_ENTRY *pEntry = NULL; - u4Byte nCopied = 0; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - *pNumDevCopied = 0; - - do - { - RtEntryListForEach(&dlist->list, pEntry) - { - P2P_DEV_LIST_ENTRY *pDev = (P2P_DEV_LIST_ENTRY *)pEntry; - - if(P2P_DEV_TYPE_LEGACY == pDev->type) - continue; - - if(!pDev->bDirty) - { - //RT_TRACE_F(COMP_P2P, DBG_TRACE, - //("skip "MACSTR" for no rx after previous flush\n", MAC2STR(pDev->mac))); - continue; - } - - if(!pDev->rxFrames[P2P_FID_PROBE_RSP] - && !pDev->rxFrames[P2P_FID_GO_NEG_REQ] - && !pDev->rxFrames[P2P_FID_GO_NEG_RSP] - && !pDev->rxFrames[P2P_FID_INV_REQ] - && !pDev->rxFrames[P2P_FID_PD_REQ] - ) - { - //RT_TRACE_F(COMP_P2P, DBG_LOUD, - //("skip "MACSTR" for not rx frames with dev info (no dev name)\n", MAC2STR(pDev->mac))); - continue; - } - - if(maxDevices <= nCopied) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Unable to copy all descriptors: max: %u, total: %u\n", maxDevices, dlist->count)); - status = RT_STATUS_RESOURCE; - break; - } - - p2p_DevList_TranslateDev(pDev, descList + nCopied); - - nCopied++; - } - - *pNumDevCopied = nCopied; - - }while(FALSE); - - return status; -} - -VOID -p2p_DevList_TranslateDev( - IN const P2P_DEV_LIST_ENTRY *pDev, - OUT P2P_DEVICE_DISCRIPTOR *desc - ) -{ - RT_LIST_ENTRY *pRxFrame = NULL; - - PlatformZeroMemory(desc, sizeof(*desc)); - - RtEntryListForEach(&pDev->rxFrameQ, pRxFrame) - { - P2P_FRAME_INFO * finfo = (P2P_FRAME_INFO *)pRxFrame; - - p2p_parse_UpdateDevDesc(finfo->frame, - finfo->msg, - finfo->sigStrength, - desc); - } - - return; -} - -VOID -p2p_DevList_Dump( - IN P2P_DEV_LIST *dlist - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("@@@\n")); - RT_TRACE(COMP_P2P, DBG_LOUD, ("count: %u\n", dlist->count)); - - do - { - RtEntryListForEach(&dlist->list, pEntry) - { - p2p_devlist_DumpDev((P2P_DEV_LIST_ENTRY *)pEntry); - } - - }while(FALSE); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("@@@\n")); - - return; -} - -VOID -p2p_DevList_DumpDev( - IN const P2P_DEV_LIST_ENTRY *pDev - ) -{ - p2p_devlist_DumpDev(pDev); - return; -} - -u8Byte -p2p_DevList_RxFrameElapsedTimeMs( - IN P2P_DEV_LIST *dlist, - IN const P2P_DEV_LIST_ENTRY *pDev, - IN P2P_FRAME_TYPE frameType - ) -{ - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - - if(!pDev) - return 0; - - if(NULL == pDev->rxFrames[frameType]) - return 0; - - return p2p_devlist_RxFrameElapsedTimeMs(pDev->rxFrames[frameType]); -} - -BOOLEAN -p2p_DevList_ActionProcessed( - IN const OCTET_STRING *posMpdu, - IN P2P_DEV_LIST *dlist, - IN const P2P_DEV_LIST_ENTRY *pDev, - IN P2P_FRAME_TYPE frameType - ) -{ - RT_ASSERT(signature == dlist->sig, ("Uninitialized list\n")); - RT_ASSERT(P2P_FID_ACTION_START <= frameType, ("%s(): not an action frame: %u\n", __FUNCTION__, frameType)); - - if(!pDev) - return FALSE; - - if(NULL == pDev->rxFrames[frameType]) - return FALSE; - - if(pDev->rxFrames[frameType]->token == *(posMpdu->Octet + sMacHdrLng + 1 + 1 + 3 + 1 + 1)) - return TRUE; - else - return FALSE; -} - -u1Byte -p2p_DevList_GetDevChnl( - IN P2P_DEV_LIST_ENTRY *dev - ) -{ - u1Byte chnl = 0; - RT_LIST_ENTRY *entry = RTGetTailList(&dev->rxFrameQ); - - while(entry != &dev->rxFrameQ) - { - P2P_FRAME_INFO *finfo = (P2P_FRAME_INFO *)entry; - - // beacon/probe - if(P2P_FID_BEACON == finfo->type - || P2P_FID_PROBE_RSP == finfo->type - ) - { - if(finfo->msg->_dsParam) - chnl = finfo->msg->dsParamBuf[0]; - else - chnl = finfo->channel; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("get from beacon/probe, dsParam exist: %u, chnl: %u\n", finfo->msg->_dsParam ? 1 : 0, chnl)); - break; - } - - // action - if(!finfo->msg) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("a frame in rx frame queue does not have corresp. parsed msg\n")); - p2p_DevList_DumpDev(dev); - } - else if(P2P_FID_INV_REQ == finfo->type) - { - if(finfo->msg->_grpId - && eqMacAddr(finfo->msg->grpDevAddr, finfo->msg->sa) - && finfo->msg->_opChannel - ) - { - chnl = finfo->msg->opChannel; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("get from invReq sent by go, chnl: %u\n", chnl)); - break; - } - } - else if(P2P_FID_INV_RSP == finfo->type) - { - P2P_FRAME_INFO *req = dev->txFrames[P2P_FID_INV_REQ]; - - if(req) - { - chnl = req->channel; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("get from the chnl on which we sent inv req, chnl: %u\n", chnl)); - break; - } - } - else if(P2P_FID_GO_NEG_RSP == finfo->type) - { - if(finfo->msg->_status && P2P_ATTR_STATUS == finfo->msg->status - && finfo->msg->_grpId && !eqMacAddr(finfo->msg->grpDevAddr, finfo->msg->da) // i'm not the go, i.e., peer is the go - && finfo->msg->_opChannel - ) - { - chnl = finfo->msg->opChannel; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("get from go neg rsp sent by go, chnl: %u\n", chnl)); - break; - } - } - else if(P2P_FID_GO_NEG_CONF == finfo->type) - { - if(finfo->msg->_status && P2P_ATTR_STATUS == finfo->msg->status - && finfo->msg->_grpId && !eqMacAddr(finfo->msg->grpDevAddr, finfo->msg->da) // i'm not the go, i.e., peer is the go - && finfo->msg->_opChannel - ) - { - chnl = finfo->msg->opChannel; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("get from go neg conf sent by go, chnl: %u\n", chnl)); - break; - } - } - - entry = RTForeEntryList(entry); - } - - return chnl; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_DevList.h b/network/wlan/WDI/COMMON/P2P_DevList.h deleted file mode 100644 index 40c06cf2..00000000 --- a/network/wlan/WDI/COMMON/P2P_DevList.h +++ /dev/null @@ -1,135 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_DEV_LIST_H -#define __INC_P2P_DEV_LIST_H - -RT_STATUS -p2p_DevList_Init( - IN P2P_DEV_LIST *dlist - ); - -RT_STATUS -p2p_DevList_Flush( - IN P2P_DEV_LIST *dlist - ); - -RT_STATUS -p2p_DevList_Free( - IN P2P_DEV_LIST *dlist - ); - -VOID -p2p_DevList_Lock( - IN P2P_DEV_LIST *dlist - ); - -VOID -p2p_DevList_Unlock( - IN P2P_DEV_LIST *dlist - ); - -RT_STATUS -p2p_DevList_RxUpdate( - IN P2P_DEV_LIST *dlist, - IN P2P_FRAME_TYPE frameType, - IN const RT_RFD *rfd, - IN u1Byte *mac, - IN u1Byte rxChnl, - OUT P2P_DEV_LIST_ENTRY **ppDev - ); - -RT_STATUS -p2p_DevList_FlushActionFrames( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE devType - ); - -RT_STATUS -p2p_DevList_TxUpdate( - IN P2P_DEV_LIST *dlist, - IN P2P_FRAME_TYPE frameType, - IN const u1Byte *mac, - IN P2P_DEV_TYPE devType, - IN const FRAME_BUF *buf, - IN u1Byte token, - IN u1Byte channel - ); - -VOID -p2p_DevList_DialogTokenUpdate( - IN P2P_DEV_LIST_ENTRY *pDev - ); - -const P2P_DEV_LIST_ENTRY * -p2p_DevList_Find( - IN const P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type - ); - -P2P_DEV_LIST_ENTRY * -p2p_DevList_Get( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type - ); - -P2P_DEV_LIST_ENTRY * -p2p_DevList_GetGo( - IN P2P_DEV_LIST *dlist, - IN const u1Byte *devAddr - ); - -RT_STATUS -p2p_DevList_Translate( - IN P2P_DEV_LIST *dlist, - IN u4Byte maxDevices, - OUT u4Byte *pNumDevCopied, - OUT P2P_DEVICE_DISCRIPTOR *descList - ); - -VOID -p2p_DevList_TranslateDev( - IN const P2P_DEV_LIST_ENTRY *pDev, - OUT P2P_DEVICE_DISCRIPTOR *desc - ); - -VOID -p2p_DevList_Dump( - IN P2P_DEV_LIST *dlist - ); - -VOID -p2p_DevList_DumpDev( - IN const P2P_DEV_LIST_ENTRY *pDev - ); - -u8Byte -p2p_DevList_RxFrameElapsedTimeMs( - IN P2P_DEV_LIST *dlist, - IN const P2P_DEV_LIST_ENTRY *pDev, - IN P2P_FRAME_TYPE frameType - ); - -BOOLEAN -p2p_DevList_ActionProcessed( - IN const OCTET_STRING *posMpdu, - IN P2P_DEV_LIST *dlist, - IN const P2P_DEV_LIST_ENTRY *pDev, - IN P2P_FRAME_TYPE frameType - ); - -u1Byte -p2p_DevList_GetDevChnl( - IN P2P_DEV_LIST_ENTRY *dev - ); - -#endif // #ifndef __INC_P2P_DEV_LIST_H diff --git a/network/wlan/WDI/COMMON/P2P_Indication.c b/network/wlan/WDI/COMMON/P2P_Indication.c deleted file mode 100644 index 28a39bcb..00000000 --- a/network/wlan/WDI/COMMON/P2P_Indication.c +++ /dev/null @@ -1,310 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Indication.tmh" -#endif - -#include "P2P_Internal.h" -#include "P2P_Indication.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -static -VOID -p2p_IndicateEvent( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN const PP2P_EVENT_DATA pEventData - ) -{ - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - MEMORY_BUFFER mbObject = {NULL, 0}; - - mbObject.Buffer = (pu1Byte) pEventData; - mbObject.Length = sizeof(P2P_EVENT_DATA); - - PlatformIndicateP2PEvent(pP2PInfo, eventId, &mbObject); - } - else - { - // Not implemented - } - - return; -} - -static -VOID -p2p_IndicateActionFrameReceivedWithToken( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen, - IN u1Byte token - ) -{ - u1Byte origToken = GET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(pFrameBuf); - - SET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(pFrameBuf, token); - - p2p_IndicateActionFrameReceived(pP2PInfo, eventId, rtStatus, pFrameBuf, frameLen); - - SET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(pFrameBuf, origToken); - - return; -} - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_IndicateActionFrameSendComplete( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen - ) -{ - P2P_EVENT_DATA eventData; - - PlatformZeroMemory(&eventData, sizeof(P2P_EVENT_DATA)); - - if(RT_STATUS_SUCCESS == rtStatus) - { - eventData.Packet.Buffer = pFrameBuf; - eventData.Packet.Length = frameLen; - } - else - { - eventData.rtStatus = rtStatus; - } - - p2p_IndicateEvent(pP2PInfo, eventId, &eventData); - - return; -} - -VOID -p2p_IndicateActionFrameReceived( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen - ) -{ - P2P_EVENT_DATA eventData; - - PlatformZeroMemory(&eventData, sizeof(P2P_EVENT_DATA)); - - if(RT_STATUS_SUCCESS == rtStatus) - { - eventData.Packet.Buffer = pFrameBuf; - eventData.Packet.Length = frameLen; - } - else - { - eventData.rtStatus = rtStatus; - } - - p2p_IndicateEvent(pP2PInfo, eventId, &eventData); - - return; -} - -VOID -p2p_IndicateActionFrameSendCompleteWithToken( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen, - IN u1Byte token - ) -{ - u1Byte origToken = 0; - - if(RT_STATUS_SUCCESS == rtStatus) - { - origToken = GET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(pFrameBuf); - SET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(pFrameBuf, token); - } - - p2p_IndicateActionFrameSendComplete(pP2PInfo, eventId, rtStatus, pFrameBuf, frameLen); - - if(RT_STATUS_SUCCESS == rtStatus) - { - SET_P2P_PUB_ACT_FRAME_DIALOG_TOKEN(pFrameBuf, origToken); - } - - return; -} - -VOID -p2p_IndicatePdReqSent( - IN P2P_DEV_LIST_ENTRY *pDev, - IN P2P_INFO *pP2PInfo - ) -{ - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // Change dialog token to make sure the token is the same as the previous query. - p2p_IndicateActionFrameSendCompleteWithToken(pP2PInfo, - P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pDev->txFrames[P2P_FID_PD_REQ]->frame, - pDev->txFrames[P2P_FID_PD_REQ]->frameLen, - pP2PInfo->oidDialogToken); - } - else - { - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pDev->txFrames[P2P_FID_PD_REQ]->frame, - pDev->txFrames[P2P_FID_PD_REQ]->frameLen); - } -} - -VOID -p2p_IndicatePdRspReceived( - IN P2P_DEV_LIST_ENTRY *pDev, - IN P2P_INFO *pP2PInfo - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - u1Byte *rxFrame = NULL; - u2Byte rxFrameLen = 0; - - if(pDev->rxFrames[P2P_FID_PD_RSP]) - { - RT_ASSERT(pDev->txFrames[P2P_FID_PD_REQ], ("%s(): no corresponding tx frame\n", __FUNCTION__)); - - rxFrame = pDev->rxFrames[P2P_FID_PD_RSP]->frame; - rxFrameLen = pDev->rxFrames[P2P_FID_PD_RSP]->frameLen; - } - else - {// failed to rx rsp frame - status = RT_STATUS_FAILURE; - } - - // Handle PD req dialog token - // Note that if status is not success, frame and frameLen could be 0 - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - && RT_STATUS_SUCCESS == status - ) - { - // Change dialog token to make sure the token is the same as the previous query. - p2p_IndicateActionFrameReceivedWithToken(pP2PInfo, - P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE, - status, - rxFrame, - rxFrameLen, - pP2PInfo->oidDialogToken); - } - else - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE, - status, - rxFrame, - rxFrameLen); - } - - return; -} - -// -// Description: -// Indiacate the fake provision discovery response to the upper layer. -// Arguments: -// [in] pDev - -// The device entry which is considered as the respondor for the provision discovery. -// [in] pP2PInfo - -// P2P information context. -// Return: -// Return RT_STATUS_SUCCESS if the indication of fake reponse succeeds. -// By Bruce, 2015-02-17. -// -RT_STATUS -p2p_IndicateFakePdRspReceived( - IN P2P_DEV_LIST_ENTRY *pDev, - IN P2P_INFO *pP2PInfo - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - pu1Byte pRxFrame = NULL; - FRAME_BUF fbuf; - PRT_GEN_TEMP_BUFFER pGenBuf = NULL; - - FunctionIn(COMP_P2P); - - do - { - if(NULL == (pGenBuf = GetGenTempBuffer(pAdapter, GEN_TEMP_BUFFER_SIZE))) - { - RT_TRACE_F(COMP_P2P, DBG_SERIOUS, ("[ERROR] Memory allocation failed!\n")); - rtStatus = RT_STATUS_RESOURCE; - break; - } - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, (pu1Byte)(pGenBuf->Buffer.Ptr), &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - if(RT_STATUS_SUCCESS != (rtStatus = p2p_Construct_FakePDRsp( - pP2PInfo, - pDev, - pP2PInfo->DeviceAddress, - &fbuf - ))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("Failed (0x%08X) from p2p_Construct_FakePDRsp()\n", rtStatus)); - break; - } - - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, "Fake provision response frame:\n", fbuf.os.Octet, fbuf.os.Length); - - // Handle PD req dialog token - // Note that if status is not success, frame and frameLen could be 0 - if(P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter)) - { - // Change dialog token to make sure the token is the same as the previous query. - p2p_IndicateActionFrameReceivedWithToken(pP2PInfo, - P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE, - rtStatus, - fbuf.os.Octet, - fbuf.os.Length, - pP2PInfo->oidDialogToken); - } - else - { - p2p_IndicateActionFrameReceived(pP2PInfo, - P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE, - rtStatus, - fbuf.os.Octet, - fbuf.os.Length); - } - }while(FALSE); - - - if(pGenBuf) - { - ReturnGenTempBuffer (pAdapter, pGenBuf); - pGenBuf = NULL; - } - - FunctionOut(COMP_P2P); - - return rtStatus; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Indication.h b/network/wlan/WDI/COMMON/P2P_Indication.h deleted file mode 100644 index c530bfcd..00000000 --- a/network/wlan/WDI/COMMON/P2P_Indication.h +++ /dev/null @@ -1,58 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_INDICATION_H -#define __INC_P2P_INDICATION_H - -VOID -p2p_IndicateActionFrameSendComplete( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen - ); - -VOID -p2p_IndicateActionFrameSendCompleteWithToken( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen, - IN u1Byte token - ); - -VOID -p2p_IndicateActionFrameReceived( - IN P2P_INFO *pP2PInfo, - IN u4Byte eventId, - IN RT_STATUS rtStatus, - IN u1Byte *pFrameBuf, - IN u4Byte frameLen - ); - -VOID -p2p_IndicatePdReqSent( - IN P2P_DEV_LIST_ENTRY *pDev, - IN P2P_INFO *pP2PInfo - ); - -VOID -p2p_IndicatePdRspReceived( - IN P2P_DEV_LIST_ENTRY *pDev, - IN P2P_INFO *pP2PInfo - ); - -RT_STATUS -p2p_IndicateFakePdRspReceived( - IN P2P_DEV_LIST_ENTRY *pDev, - IN P2P_INFO *pP2PInfo - ); -#endif // #ifndef __INC_P2P_INDICATION_H \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/P2P_Internal.h b/network/wlan/WDI/COMMON/P2P_Internal.h deleted file mode 100644 index a7ffa58d..00000000 --- a/network/wlan/WDI/COMMON/P2P_Internal.h +++ /dev/null @@ -1,571 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_INTERNAL_H -#define __INC_P2P_INTERNAL_H - -#include "P2P_ProtocolSpec.h" -#include "P2P_Attribute.h" -#include "WPS_Def.h" - -#include "P2P_DevList.h" -#include "P2P_Indication.h" - -#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5] -#define MACSTR "%02X:%02X:%02X:%02X:%02X:%02X" - -//--------------------------------------------------------------------------- -// P2P_Util -//--------------------------------------------------------------------------- -VOID -p2p_MoveMemory( - IN VOID *dest, - IN const VOID *src, - IN u4Byte len - ); - -int -p2p_go_det( - IN u1Byte selfVal, - IN u1Byte peerVal - ); - -BOOLEAN -p2p_ActingAs_Go( - IN P2P_INFO *pP2PInfo - ); - - -BOOLEAN -p2p_Doing_Provisioning( - IN const P2P_INFO *pP2PInfo - ); - -BOOLEAN -p2p_Check_GroupLimitReached( - IN P2P_INFO *pP2PInfo - ); - -P2P_DEV_TYPE -p2p_MessageSrcType( - IN const P2P_MESSAGE *msg, - IN P2P_FRAME_TYPE frameType - ); - -BOOLEAN -p2p_FindClientInfoByDevAddr( - IN const u1Byte *devAddr, - IN const P2P_MESSAGE *msg, - OUT const u1Byte **ppCliInfo - ); - -//--------------------------------------------------------------------------- -// P2P_Build -//--------------------------------------------------------------------------- - -u1Byte * -p2p_add_IEHdr( - IN FRAME_BUF *pBuf - ); - -VOID -p2p_update_IeHdrLen( - IN FRAME_BUF *pBuf, - IN u1Byte *pLen - ); - -VOID -p2p_add_ActionFrameMacHdr( - IN FRAME_BUF *pBuf, - IN const u1Byte *dest, - IN const u1Byte *src, - IN const u1Byte *bssid - ); - -VOID -p2p_add_MgntFrameMacHdr( - IN FRAME_BUF *pBuf, - IN TYPE_SUBTYPE typeSubtype, - IN const u1Byte *dest, - IN const u1Byte *src, - IN const u1Byte *bssid - ); - -VOID -p2p_add_PublicActionHdr( - IN FRAME_BUF *pBuf, - IN u1Byte actionCode, - IN u1Byte dialogToken - ); - -//--------------------------------------------------------------------------- -// P2P_Build_PublicAction -//--------------------------------------------------------------------------- - -VOID -p2p_add_P2PPublicActionHdr( - IN FRAME_BUF *pBuf, - IN u1Byte subtype, - IN u1Byte dialogToken - ); - -VOID -p2p_Construct_GoNegReq( - IN P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Construct_GoNegRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ); - -VOID -p2p_Construct_GoNegConf( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ); - -VOID -p2p_Construct_InvitationReq( - IN P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Construct_InvitationRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ); - -VOID -p2p_Construct_DevDiscReq( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN const u1Byte *bssid - ); - -VOID -p2p_Construct_DevDiscRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte status - ); - -VOID -p2p_Construct_PDReq( - IN P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u2Byte configMethod - ); - -VOID -p2p_Construct_PDRsp( - IN P2P_INFO *pP2PInfo, - IN u1Byte dialogToken, - IN OCTET_STRING *posP2PAttrs, - IN u2Byte configMethod, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ); - -VOID -p2p_build_FakeInvitationRspIe( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ); - -RT_STATUS -p2p_Construct_FakePDRsp( - IN P2P_INFO *pP2PInfo, - IN P2P_DEV_LIST_ENTRY *pRspDev, - IN const u1Byte *da, - IN FRAME_BUF *pBuf - ); - - -//--------------------------------------------------------------------------- -// P2P_Build_Action -//--------------------------------------------------------------------------- -VOID -p2p_Construct_PresenceReq( - IN P2P_INFO *pP2PInfo, - IN const P2P_POWERSAVE_SET *pP2pPs, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf - ); - -VOID -p2p_Construct_PresenceRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u1Byte status, - IN FRAME_BUF *pBuf - ); - -VOID -p2p_Copnstruct_GoDiscoverabilityReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN FRAME_BUF *pBuf - ); - -VOID -p2p_Construct_SDReq( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da - ); - -VOID -p2p_Construct_SDRsp( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN P2P_SD_STATUS_CODE status, - IN BOOLEAN bFrag - ); - -VOID -p2p_Construct_SDComebackReq( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Construct_SDComebackRsp( - IN const P2P_INFO *pP2PInfo, - IN FRAME_BUF *pBuf, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u2Byte bytesToCopy, - IN BOOLEAN bMoreData - ); - - -VOID -p2p_Construct_AnqpQueryRspField( - IN const P2P_INFO *pP2PInfo, - IN P2P_SD_RSP_CONTEXT *pRspCtx, - OUT P2P_SD_CONTEXT *pSdCtx - ); - -//--------------------------------------------------------------------------- -// P2P_Build_Mgnt -//--------------------------------------------------------------------------- - -VOID -p2p_Construct_ProbeReqEx( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte ssidLen, - IN const u1Byte *ssidBuf - ); - -VOID -p2p_Construct_ProbeReq( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo - ); - -BOOLEAN -p2p_Construct_ProbeRsp( - IN FRAME_BUF *pBuf, - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN RT_RFD *rfdProbeReq, - IN OCTET_STRING *posProbeReq, - IN OCTET_STRING *posAttrs - ); - -//--------------------------------------------------------------------------- -// P2P_SendAction: public action -//--------------------------------------------------------------------------- - -VOID -p2p_Send_GoNegReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN BOOLEAN bSend - ); - -VOID -p2p_Send_GoNegRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Send_GoNegConfirm( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - OUT PBOOLEAN pbSupportTxReport - ); - -VOID -p2p_Send_InvitationReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ); - -VOID -p2p_Send_InvitationRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Send_DevDiscReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *bssid, - IN const u1Byte *da, - IN u1Byte dialogToken - );; - -VOID -p2p_Send_DevDiscRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u1Byte status - ); - -VOID -p2p_Send_PDReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *mac, - IN BOOLEAN bGo, - IN u1Byte dialogToken, - IN u2Byte configMethod - ); - -VOID -p2p_Send_PDRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN OCTET_STRING *posP2PAttrs, // TODO: make it constant - IN u2Byte configMethod, - OUT PBOOLEAN pbSupportTxReport - ); - -//--------------------------------------------------------------------------- -// P2P_SendAction: P2P action -//--------------------------------------------------------------------------- - -VOID -p2p_Send_PresenceReq( - IN P2P_INFO *pP2PInfo, - IN const P2P_POWERSAVE_SET *pPs, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Send_PresenceRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u1Byte status - ); - -VOID -p2p_Send_GoDiscoverabilityReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Send_SDReq( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da - ); - -VOID -p2p_Send_SDRsp( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN P2P_SD_STATUS_CODE status, - IN BOOLEAN bFrag - ); - -VOID -p2p_Send_SDComebackReq( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ); - -VOID -p2p_Send_SDComebackRsp( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u2Byte bytesToCopy, - IN BOOLEAN bMoreData - ); - -//--------------------------------------------------------------------------- -// P2P_SendMgnt -//--------------------------------------------------------------------------- - -VOID -p2p_Send_ProbeRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN RT_RFD *rfdProbeReq, - IN OCTET_STRING *posProbeReq, - IN OCTET_STRING *posAttrs - ); - -//--------------------------------------------------------------------------- -// P2P_Parse -//--------------------------------------------------------------------------- -VOID -p2p_parse_VendorIEConcat( - IN const u1Byte *ies, - IN u2Byte iesLen, - IN OUI_TYPE ouiType, - OUT FRAME_BUF *pBuf - ); - -VOID -p2p_parse_AssembleIe( - IN u1Byte *pMpdu, - IN u2Byte mpduLen, - IN OUI_TYPE ouiType, - OUT FRAME_BUF *pBuf - ); - -VOID -p2p_parse_FreeAssembledIe( - IN FRAME_BUF *pBuf - ); - -VOID -p2p_parse_FreeMessage( - IN P2P_MESSAGE *msg - ); - -RT_STATUS -p2p_parse_ValidateAttribute( - IN const u1Byte *pos, - IN const u1Byte *end, - OUT u2Byte *len - ); - -RT_STATUS -p2p_parse_P2PIe( - IN const FRAME_BUF *pAttr, // a series of P2P attributes - OUT P2P_MESSAGE *msg - ); - -RT_STATUS -p2p_parse_WpsIe( - IN const FRAME_BUF *pAttr, - OUT P2P_MESSAGE *msg - ); - -RT_STATUS -p2p_parse_Ies( - IN const OCTET_STRING *posMpdu, - IN u4Byte dbgLevel, - OUT P2P_MESSAGE *msg - ); - -RT_STATUS -p2p_parse_Action( - IN const OCTET_STRING *posMpdu, - IN u4Byte dbgLevel, - OUT P2P_MESSAGE *msg - ); - -RT_STATUS -p2p_parse_UpdateDevDesc( - IN const u1Byte *pHdr, - IN const P2P_MESSAGE *msg, - IN u1Byte sigStrength, - OUT P2P_DEVICE_DISCRIPTOR *pDesc - ); - -RT_STATUS -p2p_parse_ChannelEntryList( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_CHANNELS *channels - ); - -//--------------------------------------------------------------------------- -// P2P_Channel -//--------------------------------------------------------------------------- - -BOOLEAN -p2p_Channel_Add( - IN P2P_CHANNELS *channels, - IN u1Byte regClass, - IN u1Byte nChannels, - IN const u1Byte *channelList - ); - -VOID -p2p_Channel_Reset( - IN P2P_CHANNELS *channels - ); - -VOID -p2p_Channel_Intersect( - IN const P2P_CHANNELS *a, - IN const P2P_CHANNELS *b, - OUT P2P_CHANNELS *res - ); - -BOOLEAN -p2p_Channel_ChannelListAttrToChannels( - IN u2Byte chnlListAttrLen, - IN const u1Byte *chnlListAttr, - OUT P2P_CHANNELS *pChannels - ); - -BOOLEAN -p2p_Channel_InChannelEntryList( - IN u1Byte channel, - IN const P2P_CHANNELS *pChannels - ); - -#endif // #ifndef __INC_P2P_INTERNAL_H diff --git a/network/wlan/WDI/COMMON/P2P_Parse.c b/network/wlan/WDI/COMMON/P2P_Parse.c deleted file mode 100644 index 4fe34f9f..00000000 --- a/network/wlan/WDI/COMMON/P2P_Parse.c +++ /dev/null @@ -1,1775 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Parse.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -static -RT_STATUS -p2p_parse_Status( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_status = data; - msg->status = data[0]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("%u\n", msg->status)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_MinorReasonCode( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_minorReasonCode= data; - msg->minorReasonCode = data[0]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("%u\n", msg->minorReasonCode)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_Capability( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_capability= data; - msg->devCap = data[0]; - msg->grpCap = data[1]; - - // pDevDescriptor->Role = P2P_GO; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("devCap: 0x%02X, grpCap: 0x%02X\n", msg->devCap, msg->grpCap)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_DevId( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 6) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_devId = data; - msg->devIdDevAddr = data; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, (MACSTR "\n", MAC2STR(msg->devIdDevAddr))); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_GoIntent( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_goIntent = data; - msg->goIntent = data[0]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("intent: %u, tie: %u\n", msg->goIntent >> 1, msg->goIntent & 0x01)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_ConfigTimeout( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_configTimeout = data; - msg->goConfigTimeout = data[0]; - msg->cliConfigTimeout = data[1]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("goConfigTimeout: %u, cliConfigTimeout: %u\n", msg->goConfigTimeout, msg->cliConfigTimeout)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_ListenChannel( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 5) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_listenChannel = data; - msg->listenChannel = data[4]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("country: %c%c(0x%02x), class: %u, channel: %u\n", - data[0], data[1], data[2], - data[3], - msg->listenChannel)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_GrpBssid( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 6) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_grpBssid = data; - msg->grpBssid = data; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, (MACSTR "\n", MAC2STR(msg->grpBssid))); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_ExtListenTiming( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 4) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_extListenTiming = data; - msg->extListenPeriod = ReadEF2Byte(data); - msg->extListenInterval = ReadEF2Byte(data + 2); - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("period: %u (ms), interval: %u (ms)\n", msg->extListenPeriod, msg->extListenInterval)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_IntendedIntfAddr( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 6) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_intendedIntfAddr = data; - msg->intfAddr = data; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, (MACSTR "\n", MAC2STR(msg->intfAddr))); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_Manageability( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_manageability = data; - msg->manageability = data[0]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("%u\n", msg->manageability)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_ChannelList( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - - if(len < 3) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_channelList = data; - msg->channelListLen = len; - - msg->channelListCountry = pos; - pos += 3; - - msg->channelEntryList = pos; - msg->channelEntryListLen = (u2Byte)(data + len - pos); - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("country: %c%c(0x%02x)\n", - msg->channelListCountry[0], msg->channelListCountry[1], msg->channelListCountry[2])); - - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "ChannelEntryList:\n", msg->channelEntryList, msg->channelEntryListLen); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_NoA( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - - if(len < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_noa = data; - msg->noaLen = len; - - msg->noaIndex = pos[0]; - pos += 1; - - msg->noaCtWindowAndOppPsParam = pos[0]; - pos += 1; - - msg->noaDescriptors = pos; - msg->noaDescriptorLen = (u2Byte)(data + len - pos); - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("index: %u, ctWindowAndOppPsParam: 0x%02X\n", msg->noaIndex, msg->noaCtWindowAndOppPsParam)); - - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "NoA Descriptors:\n", msg->noaDescriptors, msg->noaDescriptorLen); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_DevInfo( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - u1Byte devNameLen = 0; - - if(len < 6 + 2 + 8 + 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_devInfo = data; - - msg->devInfoDevAddr = pos; - pos += 6; - - msg->configMethod = ReadN2H2BYTE(pos); // In BE - pos += 2; - - msg->primDevType = pos; - pos += 8; - - msg->numSecDevType = pos[0]; - pos += 1; - - if(data + len - pos < 8 * msg->numSecDevType) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u, buf can't contain all sec dev types: %u\n", len, msg->numSecDevType)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->secDevTypeList = (0 < msg->numSecDevType) ? (pos) : (NULL); - pos += (msg->numSecDevType * 8); - - if(data + len - pos < 4) // WPS attr type (2) and length (2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u, buf can't contain WPS dev name attr\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - if(ATTR_DEV_NAME != ReadN2H2BYTE(pos)) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid WPS attr ID: 0x%02X, expecting: 0x%02X\n", N2H2BYTE(*(u2Byte *)pos), ATTR_DEV_NAME)); - return RT_STATUS_INVALID_DATA; - } - - pos += 2; - - devNameLen = ReadN2H2BYTE(pos); - pos += 2; - - if(data + len - pos < devNameLen || 32 < devNameLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid dev name len: %u, remain buf len: %u\n", devNameLen, (u4Byte)(data + len - pos))); - return RT_STATUS_INVALID_LENGTH; - } - - msg->devNameLen = devNameLen; - msg->devName = pos; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("devAddr: " MACSTR ", primDevType(id-oui-subid): %u-0x%08X-%u, configMethod: 0x%X\n", - //MAC2STR(msg->devInfoDevAddr), - //ReadN2H2BYTE(msg->primDevType + 0), ReadN2H4BYTE(msg->primDevType + 2), ReadN2H2BYTE(msg->primDevType + 6), - //msg->configMethod)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_GrpInfo( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 0) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_grpInfo = data; - msg->cliInfoDescList = data; - msg->cliInfoDescListLen = len; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "Group Info:\n", msg->cliInfoDescList, msg->cliInfoDescListLen); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_GrpId( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - - if(len < 6 || 6 + 32 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_grpId = data; - - msg->grpDevAddr = pos; - pos += 6; - - msg->grpSsidLen = (u1Byte)len - 6; - - if(data + len - pos < msg->grpSsidLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid ssid len: %u, remain buf len: %u\n", msg->grpSsidLen, (u4Byte)(data + len - pos))); - return RT_STATUS_INVALID_LENGTH; - } - - msg->grpSsid = (msg->grpSsidLen) ? (pos) : (NULL); - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("grpDevAddr: " MACSTR "\n", MAC2STR(msg->grpDevAddr))); - RT_PRINT_STR(COMP_P2P, msg->dbgLevel, "grpSsid:\n", msg->grpSsid, msg->grpSsidLen); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_Interface( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - u1Byte itIntfAddr = 0; - - if(len < 6 + 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_intf = data; - - msg->intfDevAddr = pos; - pos += 6; - - msg->intfAddrCount = pos[0]; - pos += 1; - - if(data + len - pos < 6 * msg->intfAddrCount) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid intf addr count: %u, length: %u\n", msg->intfAddrCount, len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->intfAddrList = pos; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("intfDevAddr: " MACSTR "\n", MAC2STR(msg->intfDevAddr))); - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("intf addr list:\n")); - //for(itIntfAddr = 0; itIntfAddr < msg->intfAddrCount; itIntfAddr++) - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, (MACSTR "\n", MAC2STR(msg->intfAddrList + 6 * itIntfAddr))); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_OpChannel( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 5) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_opChannel = data; - msg->opChannel = data[4]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("country: %c%c(0x%02x), class: %u, channel: %u\n", - data[0], data[1], data[2], - data[3], - msg->opChannel)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_InvitationFlags( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_invitationFlags = data; - msg->invitationFlags = data[0]; - - // pP2PInfo->InvitationContext.bPersistentInvitation = (*(pu1Byte)osP2PSubIEs.Octet & ifP2PInvitationType) ? (TRUE) : (FALSE); - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("%u\n", msg->invitationFlags)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_SvcHash( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - u2Byte itSvcHash = 0; - if(len < 6) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_svcHash = data; - msg->svcHashLen = len; - msg->svcHashNum = len / 6; - msg->svcHashList = data; - - //for(itSvcHash = 0; itSvcHash < msg->svcHashNum; itSvcHash++) - //{ - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, (MACSTR "\n", MAC2STR(msg->svcHashList + 6 * itSvcHash))); - //} - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_SessionInfoDataInfo( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 0) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_sessionInfoDataInfo = data; - msg->sessionInfoLen = len; - msg->sessionInfo = data; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "Session Info:\n", msg->sessionInfo, msg->sessionInfoLen); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_ConnCap( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_connCap = data; - msg->connCap = data[0]; - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("connCap: %u\n", msg->connCap)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_AdvId( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - - if(len < 4 + 6) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_advId = data; - - msg->advId = ReadEF4Byte(pos); - pos += 4; - - msg->svcMac = pos; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("advId: %u (%08X), svcMac: " MACSTR "\n", msg->advId, msg->advId, MAC2STR(msg->svcMac))); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_AdvSvcDesc( - IN const P2P_MESSAGE *msg, - IN u2Byte len, - IN const u1Byte *data, - OUT u4Byte *pAdvId, - OUT u2Byte *pConfigMethod, - OUT u1Byte *pSvcNameLen, - OUT const u1Byte **ppSvcName, - OUT u2Byte *lenRead - ) -{ - const u1Byte *pos = data; - - if(len < 4 + 2 + 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - *pAdvId = ReadEF4Byte(pos); - pos += 4; - - *pConfigMethod = ReadN2H2BYTE(pos); - pos += 2; - - *pSvcNameLen = pos[0]; - pos += 1; - - if(data + len - pos < *pSvcNameLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("svc name overflow: svc name len: %u, remain buf len: %u\n", *pSvcNameLen, (u4Byte)(data + len - pos))); - return RT_STATUS_INVALID_LENGTH; - } - - *ppSvcName = pos; - pos += *pSvcNameLen; - - *lenRead = (u2Byte)(pos - data); - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("advId: %u (%08X), configMethod: %04X\n", *pAdvId, *pAdvId, *pConfigMethod)); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "service name:\n", *ppSvcName, *pSvcNameLen); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_AdvSvc( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - - if(len < 0) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_advSvc = data; - msg->advSvcLen = len; - msg->advSvcNum = 0; - - while(0 < data + len - pos) - { - RT_STATUS status = RT_STATUS_SUCCESS; - u4Byte advId = 0; - u2Byte configMethod = 0; - u1Byte svcNameLen = 0; - const u1Byte *pSvcName = NULL; - u2Byte lenRead = 0; - - if(RT_STATUS_SUCCESS != (status = p2p_parse_AdvSvcDesc(msg, (u2Byte)(data + len - pos), pos, &advId, &configMethod, &svcNameLen, &pSvcName, &lenRead))) - return status; - pos += lenRead; - msg->advSvcNum++; - } - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_SessionId( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - const u1Byte *pos = data; - - if(len < 4 + 6) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_sessionId = data; - - msg->sessionId = ReadEF4Byte(pos); - pos += 4; - - msg->sessionMac = pos; - - //RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("sessionId: %u (%08X), sessionMac: " MACSTR "\n", msg->sessionId, msg->sessionId, MAC2STR(msg->sessionMac))); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_FeatureCap( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - if(len < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - - msg->_featureCap = data; - msg->featureCap = ReadEF2Byte(data); - - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("connCap: 0x%04X\n", msg->featureCap)); - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_Attributes( - IN u1Byte id, - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - switch(id) - { - default: - break; - - case P2P_ATTR_STATUS: - status = p2p_parse_Status(len, data, msg); break; - - case P2P_ATTR_MINOR_REASON_CODE: - status = p2p_parse_MinorReasonCode(len, data, msg); break; - - case P2P_ATTR_CAPABILITY: - status = p2p_parse_Capability(len, data, msg); break; - - case P2P_ATTR_DEVICE_ID: - status = p2p_parse_DevId(len, data, msg); break; - - case P2P_ATTR_GROUP_OWNER_INTENT: - status = p2p_parse_GoIntent(len, data, msg); break; - - case P2P_ATTR_CONFIGURATION_TIMEOUT: - status = p2p_parse_ConfigTimeout(len, data, msg); break; - - case P2P_ATTR_LISTEN_CHANNEL: - status = p2p_parse_ListenChannel(len, data, msg); break; - - case P2P_ATTR_GROUP_BSSID: - status = p2p_parse_GrpBssid(len, data, msg); break; - - case P2P_ATTR_EXT_LISTEN_TIMING: - status = p2p_parse_ExtListenTiming(len, data, msg); break; - - case P2P_ATTR_INTENDED_INTERFACE_ADDRESS: - status = p2p_parse_IntendedIntfAddr(len, data, msg); break; - - case P2P_ATTR_MANAGEABILITY: - status = p2p_parse_Manageability(len, data, msg); break; - - case P2P_ATTR_CHANNEL_LIST: - status = p2p_parse_ChannelList(len, data, msg); break; - - case P2P_ATTR_NOTICE_OF_ABSENCE: - status = p2p_parse_NoA(len, data, msg); break; - - case P2P_ATTR_DEVICE_INFO: - status = p2p_parse_DevInfo(len, data, msg); break; - - case P2P_ATTR_GROUP_INFO: - status = p2p_parse_GrpInfo(len, data, msg); break; - - case P2P_ATTR_GROUP_ID: - status = p2p_parse_GrpId(len, data, msg); break; - - case P2P_ATTR_INTERFACE: - status = p2p_parse_Interface(len, data, msg); break; - - case P2P_ATTR_OP_CHANNEL: - status = p2p_parse_OpChannel(len, data, msg); break; - - case P2P_ATTR_INVITATION_FLAGS: - status = p2p_parse_InvitationFlags(len, data, msg); break; - - case P2P_ATTR_SVC_HASH: - status = p2p_parse_SvcHash(len, data, msg); break; - - case P2P_ATTR_SESSION_INFO_DATA_INFO: - status = p2p_parse_SessionInfoDataInfo(len, data, msg); break; - - case P2P_ATTR_CONN_CAP_INFO: - status = p2p_parse_ConnCap(len, data, msg); break; - - case P2P_ATTR_ADV_ID_INFO: - status = p2p_parse_AdvId(len, data, msg); break; - - case P2P_ATTR_ADV_SVC_INFO: - status = p2p_parse_AdvSvc(len, data, msg); break; - - case P2P_ATTR_SESSION_ID_INFO: - status = p2p_parse_SessionId(len, data, msg); break; - - case P2P_ATTR_FEATURE_CAP_INFO: - status = p2p_parse_FeatureCap(len, data, msg); break; - } - - if(RT_STATUS_SUCCESS != status) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("parse attr id %u failed, status: 0x%X, attr content:\n", id, status)); - RT_PRINT_DATA(COMP_P2P, DBG_WARNING, __FUNCTION__, data, len); - } - - return status; -} - -static -RT_STATUS -p2p_parse_WpsAttributes( - IN u2Byte type, - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - WPS_ATTRIBUTE wpsAttr = (WPS_ATTRIBUTE)type; - const u1Byte *pos = data; - const u1Byte *end = pos + len; - - switch(type) - { - default: - break; - - case ATTR_CONFIG_METHODS: - if(len < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for config methods: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsConfigMethods = data; - msg->wpsConfigMethods = ReadN2H2BYTE(data); - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("config Method: 0x%04X\n", msg->wpsConfigMethods)); - break; - - case ATTR_DEV_NAME: - if(32 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for device name: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsDevName = data; - msg->wpsDevNameLen = len; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("Device Name:\n")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "", msg->_wpsDevName, msg->wpsDevNameLen); - break; - - case ATTR_DEV_PASSWORD_ID: - if(len < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for dev password id: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsDevPasswordId = data; - msg->wpsDevPasswordId = ReadN2H2BYTE(data); - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("dev password id: 0x%04X\n", msg->wpsDevPasswordId)); - break; - - case ATTR_MANUFACTURER: - if(64 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for manufacturer: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsManufacturer = data; - msg->wpsManufacturerLen = len; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("Manufacturer:\n")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "", msg->_wpsManufacturer, msg->wpsManufacturerLen); - break; - - case ATTR_MODEL_NAME: - if(32 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for model name: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsModelName = data; - msg->wpsModelNameLen = len; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("Model Name:\n")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "", msg->_wpsModelName, msg->wpsModelNameLen); - break; - - case ATTR_MODEL_NUMBER: - if(32 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for model number: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsModelNumber = data; - msg->wpsModelNumberLen = len; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("Model Number:\n")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "", msg->_wpsModelNumber, msg->wpsModelNumberLen); - break; - - case ATTR_SERIAL_NUMBER: - if(32 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for serial number: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsSerialNumber = data; - msg->wpsSerialNumberLen = len; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("Serial Number:\n")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "", msg->_wpsSerialNumber, msg->wpsSerialNumberLen); - break; - - case ATTR_PRIMARY_DEV_TYPE: - if(len < 8) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for primary device type: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsPrimaryDevType = data; - msg->wpsPrimaryDevTypeLen = len; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("PrimDevType(id-oui-subid): %u-0x%08X-%u\n", - ReadN2H2BYTE(msg->_wpsPrimaryDevType + 0), - ReadN2H4BYTE(msg->_wpsPrimaryDevType + 2), - ReadN2H2BYTE(msg->_wpsPrimaryDevType + 6))); - break; - - case ATTR_SECONDARY_DEV_TYPE_LIST: - msg->_wpsSecDevTypeList = data; - msg->wpsSecDevTypeListLen = len; - msg->wpsSecDevTypeNum = 0; - - while(pos + 8 <= end) - { - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("SecDevType(id-oui-subid)[%u]: %u-0x%08X-%u\n", - msg->wpsSecDevTypeNum, - ReadN2H2BYTE(pos + 0), - ReadN2H4BYTE(pos + 2), - ReadN2H2BYTE(pos + 6))); - msg->wpsSecDevTypeNum++; - - pos += 8; - } - break; - - case ATTR_UUID_E: - if(16 < len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid length for UUID-E: %u\n", len)); - return RT_STATUS_INVALID_LENGTH; - } - msg->_wpsUuidE = data; - msg->wpsUuidELen = len; - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "UUID-E:\n", msg->_wpsUuidE, msg->wpsUuidELen); - break; - } - - return status; -} - -static -u1Byte -p2p_parse_WpsDevType( - IN const u1Byte *pType, - OUT u2Byte *catId, - OUT u1Byte *oui, - OUT u2Byte *subCatId - ) -{ - *catId = ReadN2H2BYTE(pType); - p2p_MoveMemory(oui, pType + 2, 4); - *subCatId = ReadN2H2BYTE(pType + 2 + 4); - - return 2 + 4 + 2; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- -VOID -p2p_parse_VendorIEConcat( - IN const u1Byte *ies, - IN u2Byte iesLen, - IN OUI_TYPE ouiType, - OUT FRAME_BUF *pBuf - ) -{ - OCTET_STRING osIEs; - OCTET_STRING osie; - const u1Byte *end, *pos; - - pos = ies; - end = ies + iesLen; - - FillOctetString(osIEs, pos, (u2Byte)(end - pos)); - - // Get the payload of the IE, ID and length is not included - osie = IEGetElement(osIEs, EID_Vendor, ouiType, OUI_SUBTYPE_DONT_CARE); - - while(osie.Length) - { - if(4 <= osie.Length) - {// for case length equals to 4, FrameBuf_Add_Data will simply copies nothing - // Copy P2P Attributes, skip OUI (3) and OUI type (1) - FrameBuf_Add_Data(pBuf, osie.Octet + 4, osie.Length - 4); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("concatenating invalid ie (len: %u)\n", osie.Length)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ie:\n", osie.Octet, osie.Length); - } - - pos = osie.Octet + osie.Length; - - FillOctetString(osIEs, pos, (u2Byte)(end - pos)); - - osie = IEGetElement(osIEs, EID_Vendor, ouiType, OUI_SUBTYPE_DONT_CARE); - } - - return; -} - -VOID -p2p_parse_AssembleIe( - IN u1Byte *pMpdu, - IN u2Byte mpduLen, - IN OUI_TYPE ouiType, - OUT FRAME_BUF *pBuf - ) -{ - OCTET_STRING osMpdu; - u2Byte ieOffset = 0; - u1Byte *buf = NULL; - u2Byte allocSize = mpduLen; - - FillOctetString(osMpdu, pMpdu, mpduLen); - - if(!PacketGetIeOffset(&osMpdu, &ieOffset)) - { - return; - } - - if(osMpdu.Length < ieOffset) - {// make sure osMpdu.Length - ieOffset won't underflow - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("rx frame with invalid len: %u", osMpdu.Length)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "frame:\n", osMpdu.Octet, osMpdu.Length); - return; - } - - PlatformAllocateMemory(NULL, &buf, allocSize); - - if(!buf) - { - return; - } - - FrameBuf_Init(allocSize, 0, buf, pBuf); - - p2p_parse_VendorIEConcat(osMpdu.Octet + ieOffset, osMpdu.Length - ieOffset, ouiType, pBuf); - - return; -} - -VOID -p2p_parse_FreeAssembledIe( - IN FRAME_BUF *pBuf - ) -{ - PlatformFreeMemory(FrameBuf_MHead(pBuf), FrameBuf_Cap(pBuf)); - - return; -} - -VOID -p2p_parse_FreeMessage( - IN P2P_MESSAGE *msg - ) -{ - if(FrameBuf_Head(&msg->wpsAttributes)) - p2p_parse_FreeAssembledIe(&msg->wpsAttributes); - FrameBuf_Init(0, 0, NULL, &msg->wpsAttributes); - - if(FrameBuf_Head(&msg->p2pAttributes)) - p2p_parse_FreeAssembledIe(&msg->p2pAttributes); - FrameBuf_Init(0, 0, NULL, &msg->p2pAttributes); -} - -RT_STATUS -p2p_parse_ValidateAttribute( - IN const u1Byte *pos, - IN const u1Byte *end, - OUT u2Byte *len - ) -{ - u2Byte attrLen = 0; - - // Check if we can read the length field - if(end < pos + 3) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("rx invalid P2P attr: malformed attribute: can't read length field\n")); - return RT_STATUS_MALFORMED_PKT; - } - - // Read attr len - attrLen = ReadEF2Byte(pos + 1); - - // Check if the attribute actually contains enough length as declared in its length field - if(end < pos + 3 + attrLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("rx invalid attr: invalid length field value (%u)\n", attrLen)); - return RT_STATUS_MALFORMED_PKT; - } - - *len = attrLen; - - return RT_STATUS_SUCCESS; -} - -static -RT_STATUS -p2p_parse_P2PIe( - IN const FRAME_BUF *pAttr, // a series of P2P attributes - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - const u1Byte *pos = FrameBuf_Head(pAttr); - const u1Byte *end = pos + FrameBuf_Length(pAttr); - - while(pos < end) - { - u2Byte attrLen = 0; - - // Check if we can read the length field - if(end < pos + 3) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("rx invalid P2P attr: malformed attribute: can't read length field\n")); - FrameBuf_DumpFrom(pAttr, pos, 0, DBG_WARNING, __FUNCTION__); - status = RT_STATUS_MALFORMED_PKT; - break; - } - - // Read attr len - attrLen = ReadEF2Byte(pos + 1); - - // Check if the attribute actually contains enough length as declared in its length field - if(end < pos + 3 + attrLen) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("rx invalid attr: invalid length field value (%u)\n", attrLen)); - FrameBuf_DumpFrom(pAttr, pos, 0, DBG_WARNING, __FUNCTION__); - status = RT_STATUS_MALFORMED_PKT; - break; - } - - // Parse the attribute - if(RT_STATUS_SUCCESS != (status = p2p_parse_Attributes(pos[0], attrLen, pos + 3, msg))) - { - break; - } - - // Parse next attribute - pos += 3 + attrLen; - } - - return status; -} - -RT_STATUS -p2p_parse_WpsIe( - IN const FRAME_BUF *pAttr, - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - const u1Byte *pos = FrameBuf_Head(pAttr); - const u1Byte *end = pos + FrameBuf_Length(pAttr); - - while(pos < end) - { - u2Byte type = 0; - u2Byte len = 0; - - // Check if we can read the length field - if(end < pos + 4) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("rx invalid WPS attr: malformed attribute: can't read length field\n")); - FrameBuf_DumpFrom(pAttr, pos, 0, DBG_WARNING, __FUNCTION__); - status = RT_STATUS_MALFORMED_PKT; - break; - } - - // Read type - type = ReadN2H2BYTE(pos); - pos += 2; - - // Read len - len = ReadN2H2BYTE(pos); - pos += 2; - - // Check if the attribute actually contains enough length as declared in its length field - if(end < pos + len) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("rx invalid WPS attr: invalid length field value (%u)\n", len)); - FrameBuf_DumpFrom(pAttr, pos, 0, DBG_WARNING, __FUNCTION__); - status = RT_STATUS_MALFORMED_PKT; - break; - } - - // Parse the attribute - if(RT_STATUS_SUCCESS != (status = p2p_parse_WpsAttributes(type, len, pos, msg))) - { - break; - } - - // Parse next attribute - pos += len; - } - - return status; -} - - -RT_STATUS -p2p_parse_Ies( - IN const OCTET_STRING *posMpdu, - IN u4Byte dbgLevel, - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - OCTET_STRING os; - - PlatformZeroMemory(msg, sizeof(*msg)); - - msg->dbgLevel = dbgLevel; - - /* MAC header */ - cpMacAddr(msg->da, Frame_pDaddr(*posMpdu)); - cpMacAddr(msg->sa, Frame_pSaddr(*posMpdu)); - cpMacAddr(msg->bssid, Frame_pBssid(*posMpdu)); - - do - { - /* WPS IE */ - p2p_parse_AssembleIe(posMpdu->Octet, posMpdu->Length, OUI_SUB_SimpleConfig, &msg->wpsAttributes); - - if(FrameBuf_Length(&msg->wpsAttributes)) - { - if(RT_STATUS_SUCCESS != (status = p2p_parse_WpsIe(&msg->wpsAttributes, msg))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("failed to parse WPS IE\n")); - FrameBuf_Dump(&msg->wpsAttributes, 0, DBG_WARNING, __FUNCTION__); - break; - } - } - - /* P2P IE */ - p2p_parse_AssembleIe(posMpdu->Octet, posMpdu->Length, OUI_SUB_WIFI_DIRECT, &msg->p2pAttributes); - - if(FrameBuf_Length(&msg->p2pAttributes)) - { - if(RT_STATUS_SUCCESS == (status = p2p_parse_P2PIe(&msg->p2pAttributes, msg))) - { - if(msg->_devInfo) - msg->devAddr = FrameBuf_MHead(&msg->p2pAttributes) + (msg->devInfoDevAddr - FrameBuf_Head(&msg->p2pAttributes)); - else if(msg->_capability && TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER) // go - && msg->_devId - ) - {// note that dev id in probe req specifies the target dev to search, not its own dev addr - msg->devAddr = FrameBuf_MHead(&msg->p2pAttributes) + (msg->devIdDevAddr - FrameBuf_Head(&msg->p2pAttributes)); - } - else - msg->devAddr = msg->sa; - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("failed to parse P2P IE\n")); - FrameBuf_Dump(&msg->p2pAttributes, 0, DBG_WARNING, __FUNCTION__); - break; - } - } - else - {// note that PD rsp may not have P2P IE - msg->devAddr = msg->sa; - } - }while(FALSE); - - if(RT_STATUS_SUCCESS != status) - { - p2p_parse_FreeMessage(msg); - return status; - } - - /* SSID */ - os = PacketGetElement(*posMpdu, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(os.Length) - { - if(os.Length <= 32) - { - p2p_MoveMemory(msg->ssidBuf, os.Octet, os.Length); - - msg->_ssid = msg->ssidBuf; - msg->ssidLen = (u1Byte)os.Length; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("ssid:\n")); - RT_PRINT_DATA(COMP_P2P, msg->dbgLevel, "", msg->_ssid, msg->ssidLen); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid ssid len: %u\n", os.Length)); - } - } - - /* DS Param */ - os = PacketGetElement(*posMpdu, EID_DSParms, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(os.Length) - { - if(os.Length == 1) - { - p2p_MoveMemory(msg->dsParamBuf, os.Octet, os.Length); - - msg->_dsParam = msg->dsParamBuf; - msg->dsParam = os.Octet[0]; - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("DS Param: %u\n", msg->dsParam)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid ds param len: %u\n", os.Length)); - } - } - - return status; -} - -RT_STATUS -p2p_parse_Action( - IN const OCTET_STRING *posMpdu, - IN u4Byte dbgLevel, - OUT P2P_MESSAGE *msg - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_STATUS_SUCCESS != (status = p2p_parse_Ies(posMpdu, dbgLevel, msg))) - { - return status; - } - - msg->_dialogToken = msg->dialogTokenBuf; - p2p_MoveMemory(msg->dialogTokenBuf, posMpdu->Octet + sMacHdrLng + 1 + 1 + 3 + 1 + 1, 1); - msg->dialogToken = ReadEF1Byte(msg->_dialogToken); - - if(msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, msg->dbgLevel, ("dialog token: %u\n", msg->dialogToken)); - } - - return status; -} - -RT_STATUS -p2p_parse_UpdateDevDesc( - IN const u1Byte *pHdr, - IN const P2P_MESSAGE *msg, - IN u1Byte sigStrength, - OUT P2P_DEVICE_DISCRIPTOR *pDesc - ) -{ - u4Byte it = 0; - RT_STATUS status = RT_STATUS_SUCCESS; - - if(msg->_wpsUuidE) - p2p_MoveMemory(pDesc->WPS_UUID, msg->_wpsUuidE, msg->wpsUuidELen); - - if(msg->_capability) - { - pDesc->Role = TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER) ? (P2P_GO) : (P2P_DEVICE); - pDesc->DeviceCapability = msg->devCap; - pDesc->GroupCapability = msg->grpCap; - } - - cpMacAddr(pDesc->DeviceAddress, msg->devAddr); - - if(msg->_wpsConfigMethods) - pDesc->WpsAttributes.ConfigMethod = msg->wpsConfigMethods; - - if(msg->_wpsDevPasswordId) - pDesc->WpsAttributes.DevicePasswdId = msg->wpsDevPasswordId; - - if(msg->_devInfo) - { - P2P_WPS_ATTRIBUTES *w = &pDesc->WpsAttributes; - - p2p_parse_WpsDevType(msg->primDevType, - &w->PrimaryDeviceType.CategoryId, - w->PrimaryDeviceType.Oui, - &w->PrimaryDeviceType.SubCategoryId); - - w->SecondaryDeviceTypeLength = msg->numSecDevType; - for(it = 0; it < msg->numSecDevType; it++) - { - P2P_WPS_ATTRIBUTES_DEVICE_TYPE *t = w->SecondaryDeviceTypeList + it; - - p2p_parse_WpsDevType(msg->secDevTypeList + it * 6, - &t->CategoryId, - t->Oui, - &t->SubCategoryId); - } - w->DeviceNameLength = msg->devNameLen; - p2p_MoveMemory(w->DeviceName, msg->devName, msg->devNameLen); - } - - if(msg->_listenChannel) - { - pDesc->ListenChannel = msg->listenChannel; - p2p_MoveMemory(pDesc->CountryString, msg->_listenChannel, 3); - pDesc->RegulatoryClass = msg->_listenChannel[3]; - } - - if(msg->_opChannel) - { - pDesc->OperatingChannel = msg->opChannel; - p2p_MoveMemory(pDesc->CountryString, msg->_opChannel, 3); - pDesc->RegulatoryClass = msg->_opChannel[3]; - } - - if(msg->_channelList) - { - const u1Byte *pos = msg->channelEntryList; - const u1Byte *end = msg->channelEntryList + msg->channelEntryListLen; - - pDesc->ChannelPlanLength = 0; - PlatformZeroMemory(pDesc->ChannelPlanChannel, sizeof(pDesc->ChannelPlanChannel)); - - while(pos < end) - { - u1Byte itChnl = 0; - u1Byte nChnls = 0; - u1Byte opClass = 0; - - if(end <= pos + 2) break; - - opClass = pos[0]; - pos += 1; - - nChnls = pos[0]; - pos += 1; - - if(end < pos + nChnls) break; - - for(itChnl = 0; itChnl < nChnls; itChnl++) - { - if(sizeof(pDesc->ChannelPlanChannel) <= pDesc->ChannelPlanLength) - { - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Unable to record all the channels in the channel entry list, max is %u, discarding channel: %u\n", - sizeof(pDesc->ChannelPlanChannel), pos[itChnl])); - continue; - } - - if(DFS_5G_RADAR_CHANNEL(pos[itChnl])) - { - //RT_TRACE_F(COMP_P2P, DBG_WARNING, - //("Discarding radar channel channel: %u\n", - //sizeof(pDesc->ChannelPlanChannel), pos[itChnl])); - continue; - } - - pDesc->ChannelPlanChannel[pDesc->ChannelPlanLength] = pos[itChnl]; - pDesc->ChannelPlanLength++; - } - - pos += nChnls; - } - } - - if(msg->_grpInfo && TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER)) - { - const u1Byte *pos = msg->cliInfoDescList; - const u1Byte *end = msg->cliInfoDescList + msg->cliInfoDescListLen; - - pDesc->P2PClientDescriptorListLength = 0; - PlatformZeroMemory(pDesc->P2PClientDescriptorList, sizeof(pDesc->P2PClientDescriptorList)); - - while(pos < end) - { - u1Byte n = pDesc->P2PClientDescriptorListLength; - P2P_CLIENT_INFO_DISCRIPTOR *p = pDesc->P2PClientDescriptorList + n; - P2P_WPS_ATTRIBUTES *w = &p->WpsAttributes; - u1Byte len = 0; - const u1Byte *infoend = NULL; - - len = pos[0]; - pos += 1; - - infoend = pos + len; - if(end < infoend) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("client info length field overflow: %u\n", len)); - break; - } - - if(len < 6 + 6 + 1 + 2 + 8 + 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid client info length field: %u\n", len)); - break; - } - - cpMacAddr(p->DeviceAddress, pos); - pos += 6; - - cpMacAddr(p->InterfaceAddress, pos); - pos += 6; - - p->DeviceCapability = pos[0]; - pos += 1; - - w->ConfigMethod = ReadN2H2BYTE(pos); - pos += 2; - - pos += p2p_parse_WpsDevType(pos, - &w->PrimaryDeviceType.CategoryId, - w->PrimaryDeviceType.Oui, - &w->PrimaryDeviceType.SubCategoryId); - - w->SecondaryDeviceTypeLength = pos[0]; - pos += 1; - - if(infoend < pos + w->SecondaryDeviceTypeLength * 8) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("client info sec dev type list overflow\n")); - break; - } - - for(it = 0; it < w->SecondaryDeviceTypeLength; it++) - { - P2P_WPS_ATTRIBUTES_DEVICE_TYPE *t = w->SecondaryDeviceTypeList + it; - - pos += p2p_parse_WpsDevType(pos, - &t->CategoryId, - t->Oui, - &t->SubCategoryId); - } - - w->DeviceNameLength = (u1Byte)(infoend - pos); - p2p_MoveMemory(w->DeviceName, pos, w->DeviceNameLength); - pos += w->DeviceNameLength; - } - } - - if(msg->_grpId) - { - if(0 == pDesc->DeviceAddress[0] - && 0 == pDesc->DeviceAddress[1] - && 0 == pDesc->DeviceAddress[2] - && 0 == pDesc->DeviceAddress[3] - && 0 == pDesc->DeviceAddress[4] - && 0 == pDesc->DeviceAddress[5] - ) - { - cpMacAddr(pDesc->DeviceAddress, msg->grpDevAddr); - } - CopySsid(pDesc->SsidBuf, pDesc->SsidLen, msg->grpSsid, msg->grpSsidLen); - } - - if(msg->_ssid) - { - pDesc->SsidLen = msg->ssidLen; - p2p_MoveMemory(pDesc->SsidBuf, msg->_ssid, msg->ssidLen); - } - - if(msg->_goIntent) - pDesc->GOIntent = msg->goIntent; - - if(msg->_configTimeout) - { - pDesc->GOConfigurationTimeout = msg->goConfigTimeout; - pDesc->ClientConfigurationTimeout = msg->cliConfigTimeout; - } - - if(msg->_dialogToken) - pDesc->DialogToken = msg->dialogToken; - - if(msg->_grpBssid) - cpMacAddr(pDesc->GroupBssid, msg->grpBssid); - - if(msg->_intendedIntfAddr) - cpMacAddr(pDesc->IntendedP2PInterfaceAddress, msg->intfAddr); - - if(msg->_status) - pDesc->Status = msg->status; - - if(msg->_minorReasonCode) - pDesc->MinorReasonCode = msg->minorReasonCode; - - if(msg->_extListenTiming) - { - pDesc->ExtendedListenTimingDuration = msg->extListenInterval; - pDesc->ExtendedListenTimingPeriod = msg->extListenPeriod; - } - - if(IsMgntBeacon(pHdr) || IsMgntProbeRsp(pHdr)) - { - // Update only if the signal strength is changed over 5%. - if(0 == pDesc->SignalStrength || - (sigStrength > pDesc->SignalStrength + 5) || - (pDesc->SignalStrength >= 5 && sigStrength < pDesc->SignalStrength - 5)) - { - pDesc->SignalStrength = sigStrength; - } - } - - if(msg->_wpsManufacturer) - { - PlatformZeroMemory(pDesc->manufacturerName, sizeof(pDesc->manufacturerName)); - p2p_MoveMemory(pDesc->manufacturerName, msg->_wpsManufacturer, msg->wpsManufacturerLen); - - } - - if(IsMgntBeacon(pHdr)) // from P2P_OnBeacon - { - // Get Operating Channel, parse DS Parameter for the channel - if(msg->_dsParam) - pDesc->OperatingChannel = msg->dsParam; - - cpMacAddr(pDesc->IntendedP2PInterfaceAddress, msg->sa); - } - - if(IsMgntProbeRsp(pHdr)) // from P2P_OnProbeRsp - { - if(P2P_GO == pDesc->Role) - cpMacAddr(pDesc->IntendedP2PInterfaceAddress, msg->sa); - - if(msg->_dsParam) - {// Get Listen/Operating Channel, parse DS Parameter for the channel - if(pDesc->Role == P2P_GO) - pDesc->OperatingChannel = msg->dsParam; - else if(pDesc->Role == P2P_DEVICE) - pDesc->ListenChannel= msg->dsParam; - } - } - - if(IsMgntAsocReq(pHdr)) // from P2P_OnAssocReqAccept - { - cpMacAddr(pDesc->IntendedP2PInterfaceAddress, msg->sa); - } - - return status; -} - -RT_STATUS -p2p_parse_ChannelEntryList( - IN u2Byte len, - IN const u1Byte *data, - OUT P2P_CHANNELS *channels - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - const u1Byte *pos = data; - const u1Byte *end = data + len; - - while(pos < end) - { - if(data + len - pos < 2) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("no valid channel entry list, remain len is: %u\n", (u4Byte)(data + len - pos))); - status = RT_STATUS_INVALID_LENGTH; - break; - } - - if(data + len - pos < 2 + pos[1]) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("no valid channel entry list, #chanels is: %u, remain len is: %u\n", pos[1], (u4Byte)(data + len - pos))); - status = RT_STATUS_INVALID_LENGTH; - break; - } - - p2p_Channel_Add(channels, pos[0], pos[1], pos + 2); - - pos += (2 + pos[1]); - } - - return RT_STATUS_SUCCESS; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_ProtocolSpec.h b/network/wlan/WDI/COMMON/P2P_ProtocolSpec.h deleted file mode 100644 index 74eb2e58..00000000 --- a/network/wlan/WDI/COMMON/P2P_ProtocolSpec.h +++ /dev/null @@ -1,125 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2015 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// Defines values specified in the WFA P2P Specification. -// - -#ifndef __INC_P2P_PROTOCOL_SPEC_H -#define __INC_P2P_PROTOCOL_SPEC_H - -#define P2P_WILDCARD_SSID "DIRECT-" -#define P2P_WILDCARD_SSID_LEN 7 - -#define P2P_MAX_GO_INTENT 15 - -typedef enum _P2P_ATTR_ID -{ - P2P_ATTR_STATUS = 0, - P2P_ATTR_MINOR_REASON_CODE = 1, - P2P_ATTR_CAPABILITY = 2, - P2P_ATTR_DEVICE_ID = 3, - P2P_ATTR_GROUP_OWNER_INTENT = 4, - P2P_ATTR_CONFIGURATION_TIMEOUT = 5, - P2P_ATTR_LISTEN_CHANNEL = 6, - P2P_ATTR_GROUP_BSSID = 7, - P2P_ATTR_EXT_LISTEN_TIMING = 8, - P2P_ATTR_INTENDED_INTERFACE_ADDRESS = 9, - P2P_ATTR_MANAGEABILITY = 10, - P2P_ATTR_CHANNEL_LIST = 11, - P2P_ATTR_NOTICE_OF_ABSENCE = 12, - P2P_ATTR_DEVICE_INFO = 13, - P2P_ATTR_GROUP_INFO = 14, - P2P_ATTR_GROUP_ID = 15, - P2P_ATTR_INTERFACE = 16, - P2P_ATTR_OP_CHANNEL= 17, - P2P_ATTR_INVITATION_FLAGS = 18, - //----------------------------------------- - // P2P service addendum - P2P_ATTR_RSVD_19 = 19, - P2P_ATTR_RSVD_20 = 20, - P2P_ATTR_SVC_HASH = 21, - P2P_ATTR_SESSION_INFO_DATA_INFO = 22, - P2P_ATTR_CONN_CAP_INFO = 23, - P2P_ATTR_ADV_ID_INFO = 24, - P2P_ATTR_ADV_SVC_INFO = 25, - P2P_ATTR_SESSION_ID_INFO = 26, - P2P_ATTR_FEATURE_CAP_INFO = 27, - - P2P_ATTR_VENDOR_SPECIFIC = 221 -}P2P_ATTR_ID, *PP2P_ATTR_ID; - - -// Invitation Flags -#define P2P_INVITATION_FLAGS_TYPE 0x01 - -// P2P Capability -#define P2P_DEV_CAP_SERVICE_DISCOVERY BIT0 -#define P2P_DEV_CAP_CLIENT_DISCOVERABILITY BIT1 -#define P2P_DEV_CAP_CONCURRENT_OPER BIT2 -#define P2P_DEV_CAP_INFRA_MANAGED BIT3 -#define P2P_DEV_CAP_DEVICE_LIMIT BIT4 -#define P2P_DEV_CAP_INVITATION_PROCEDURE BIT5 - -// P2P Capability -#define P2P_GROUP_CAP_GROUP_OWNER BIT0 -#define P2P_GROUP_CAP_PERSISTENT_GROUP BIT1 -#define P2P_GROUP_CAP_GROUP_LIMIT BIT2 -#define P2P_GROUP_CAP_INTRA_BSS_DIST BIT3 -#define P2P_GROUP_CAP_CROSS_CONN BIT4 -#define P2P_GROUP_CAP_PERSISTENT_RECONN BIT5 -#define P2P_GROUP_CAP_GROUP_FORMATION BIT6 -#define P2P_GROUP_CAP_IP_ADDR_ALLOCATION BIT7 - -// P2P action frames -typedef enum _P2P_ACTION_FRAME_TYPES -{ - P2P_NOA = 0, - P2P_PRESENCE_REQ = 1, - P2P_PRESENCE_RSP = 2, - P2P_GO_DISC_REQ = 3 -}P2P_ACTION_FRAME_TYPES, *PP2P_ACTION_FRAME_TYPES; - -// P2P public action frames -typedef enum _P2P_PUBLIC_ACTION_FRAME_TYPES -{ - P2P_GO_NEG_REQ = 0, - P2P_GO_NEG_RSP = 1, - P2P_GO_NEG_CONF = 2, - P2P_INVITATION_REQ = 3, - P2P_INVITATION_RSP = 4, - P2P_DEV_DISC_REQ = 5, - P2P_DEV_DISC_RSP = 6, - P2P_PROV_DISC_REQ = 7, - P2P_PROV_DISC_RSP = 8 -}P2P_PUBLIC_ACTION_FRAME_TYPES, *PP2P_PUBLIC_ACTION_FRAME_TYPES; - -#define OUI_WFA 0x506F9A -#define P2P_IE_VENDOR_TYPE 0x506f9a09 - -#define P2P_SC_SUCCESS (u1Byte)0 -#define P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE (u1Byte)1 -#define P2P_SC_FAIL_INCOMPATIBLE_PARAMS (u1Byte)2 -#define P2P_SC_FAIL_LIMIT_REACHED (u1Byte)3 -#define P2P_SC_FAIL_INVALID_PARAMS (u1Byte)4 -#define P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE (u1Byte)5 -#define P2P_SC_FAIL_PREV_PROTOCOL_ERROR (u1Byte)6 -#define P2P_SC_FAIL_NO_COMMON_CHANNELS (u1Byte)7 -#define P2P_SC_FAIL_UNKNOWN_GROUP (u1Byte)8 -#define P2P_SC_FAIL_BOTH_GO_INTENT_15 (u1Byte)9 -#define P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD (u1Byte)10 -#define P2P_SC_FAIL_REJECTED_BY_USER (u1Byte)11 - -#define P2P_SC_FAIL_COMMON_CHANNEL_NOT_ARRIVED (u1Byte)200 -#define P2P_SC_FAIL_TIMEOUT_WAITING_FOR_GON_RSP (u1Byte)201 -#define P2P_SC_FAIL_TIMEOUT_WAITING_FOR_GON_CONFIRM (u1Byte)202 -#define P2P_SC_FAIL_TIMEOUT_WAITING_FOR_GO_BEACON (u1Byte)203 -#define P2P_SC_FAIL_TIMEOUT_WAITING_FOR_DEVICE_DISCOVERABILITY_RSP (u1Byte)204 -#define P2P_SC_FAIL_TIMEOUT_WAITING_FOR_PROVISION_DISCOVERY_RSP (u1Byte)205 -#define P2P_SC_FAIL_TIMEOUT_WAITING_FOR_INVITATION_RSP (u1Byte)206 -#define P2P_SC_FAIL_FAIL_PROVISION_DISCOVERY_FAILED (u1Byte)207 -#define P2P_SC_FAIL_FAIL_SERVICE_DISCOVERY_FAILED (u1Byte)208 - -#endif // #ifndef __INC_P2P_PROTOCOL_SPEC_H diff --git a/network/wlan/WDI/COMMON/P2P_Public.h b/network/wlan/WDI/COMMON/P2P_Public.h deleted file mode 100644 index eeea5cf5..00000000 --- a/network/wlan/WDI/COMMON/P2P_Public.h +++ /dev/null @@ -1,156 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_PUBLIC_H -#define __INC_P2P_PUBLIC_H - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// P2P_Build_Mgnt -//----------------------------------------------------------------------------- - -VOID -P2P_Append_GoProbeRspIe( - IN OCTET_STRING *posFrame, - IN ADAPTER *pAdapter, - IN u1Byte reason, - IN RT_RFD *rfdProbeReq, - IN OCTET_STRING *posProbeReq - ); - -VOID -P2P_Append_BeaconIe( - IN ADAPTER *pAdapter - ); - -VOID -P2P_Append_AssociationReqIe( - IN OCTET_STRING *posFrame, - IN ADAPTER *pAdapter - ); - -VOID -P2P_Append_AssociationRspIe( - IN OCTET_STRING *posFrame, - IN ADAPTER *pAdapter - ); - -VOID -P2P_Append_ProbeReqIe( - IN OCTET_STRING *posFrame, - IN P2P_INFO *pP2PInfo - ); - -//----------------------------------------------------------------------------- -// P2P_Receive -//----------------------------------------------------------------------------- -BOOLEAN -p2p_validate_Beacon( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_ProbeReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_ProbeRsp( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_AssocReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_AssocRsp( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_Deauth( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_GoNegReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_GoNegRsp( - IN const P2P_INFO *info, - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_GoNegConfirm( - IN BOOLEAN go, - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_InvitationReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_InvitationRsp( - IN P2P_ROLE invitorRole, - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_DevDiscReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_DevDiscRsp( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_PDReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_PDRsp( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_PresenceReq( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_PresenceRsp( - IN P2P_MESSAGE *msg - ); - -BOOLEAN -p2p_validate_GoDiscoverabilityReq( - IN P2P_MESSAGE *msg - ); - -#else - -#define P2P_Append_GoProbeRspIe(_posFrame, _pAdapter, _reason, _rfdProbeReq, _posProbeReq) -#define P2P_Append_BeaconIe(_pAdapter) -#define P2P_Append_AssociationReqIe(_posFrame, _pAdapter) -#define P2P_Append_AssociationRspIe(_posFrame, _pAdapter) -#define P2P_Append_ProbeReqIe(_posFrame, _pP2PInfo) - -#endif -#endif // #ifndef __INC_P2P_PUBLIC_H diff --git a/network/wlan/WDI/COMMON/P2P_Receive.c b/network/wlan/WDI/COMMON/P2P_Receive.c deleted file mode 100644 index 858e8231..00000000 --- a/network/wlan/WDI/COMMON/P2P_Receive.c +++ /dev/null @@ -1,744 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Receive.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -// Exported: public -//----------------------------------------------------------------------------- - -BOOLEAN -p2p_validate_Beacon( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!FrameBuf_Length(&msg->p2pAttributes)) - { - break; - } - - if(!msg->_devId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev id attr\n")); - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_ProbeReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!FrameBuf_Length(&msg->p2pAttributes)) - { - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_opChannel && TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER)) - { - // PF #2, some vender don't send ProbeReq with op channel - // do not filter - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_ProbeRsp( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!FrameBuf_Length(&msg->p2pAttributes)) - { - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_devInfo) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr\n")); - break; - } - - if(!msg->_dsParam) // from P2P_OnProbersp - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no ds param ie\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_AssocReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_devInfo) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_AssocRsp( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - /*if(!msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no status attr\n")); - break; - }*/ - - /*if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - }*/ - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_Deauth( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - /*if(!msg->_minorReasonCode) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no minor reason code attr\n")); - break; - }*/ - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_GoNegReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_goIntent) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no go intent attr\n")); - break; - } - - if(!msg->_configTimeout) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no config timeout attr\n")); - break; - } - - if(!msg->_listenChannel) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no listen channel attr\n")); - break; - } - - if(!msg->_intendedIntfAddr) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no intended interface address attr\n")); - break; - } - - if(!msg->_channelList) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no channel list attr\n")); - break; - } - - if(!msg->_devInfo) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr\n")); - break; - } - - if(!msg->_opChannel) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no op channel attr\n")); - break; - } - - if(!msg->_wpsDevPasswordId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no WPS device password id attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_GoNegRsp( - IN const P2P_INFO *info, - IN P2P_MESSAGE *msg - ) -{ - int go = 0; - - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no status attr\n")); - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_goIntent) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no go intent attr\n")); - break; - } - - go = p2p_go_det(info->GOIntent, msg->goIntent); - - if(!msg->_intendedIntfAddr) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no intended interface address attr\n")); - break; - } - - if(!msg->_channelList) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no channel list attr\n")); - break; - } - - if(!msg->_devInfo) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr\n")); - break; - } - - if(!msg->_grpId && !go) - {// peer is GO and no group id - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group id attr, self intent: %u, peer intent: %u\n", info->GOIntent, msg->goIntent)); - break; - } - - if(!msg->_opChannel && !go) - {// peer is GO and no op channel - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no op channel attr, self intent: %u, peer intent: %u\n", info->GOIntent, msg->goIntent)); - break; - } - - if(P2P_SC_SUCCESS == msg->status && !msg->_wpsDevPasswordId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("status is success but no WPS device password id attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_GoNegConfirm( - IN BOOLEAN go, - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no status attr\n")); - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_channelList) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no channel list attr\n")); - break; - } - - if(!msg->_grpId && !go) - {// peer is GO and no group id - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group id attr when peer will be go\n")); - break; - } - - if(!msg->_opChannel) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no op channel attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_InvitationReq( - IN P2P_MESSAGE *msg - ) -{ - P2P_ROLE invitorRole; - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_configTimeout) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no config timeout attr\n")); - break; - } - - if(!msg->_grpId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group id attr\n")); - break; - } - - invitorRole = (eqMacAddr(msg->grpDevAddr, msg->sa)) ? (P2P_GO) : (P2P_CLIENT); - - if(!msg->_grpBssid && P2P_GO == invitorRole) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group bssid attr\n")); - break; - } - - if(!msg->_channelList) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no channel list attr\n")); - break; - } - - if(!msg->_devInfo) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr\n")); - break; - } - - if(!msg->_grpId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group id attr\n")); - break; - } - - if(!msg->_opChannel && P2P_GO == invitorRole) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no op channel attr when invitor role is GO\n")); - break; - } - - if(!msg->_invitationFlags) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no invitation flags attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_InvitationRsp( - IN P2P_ROLE invitorRole, - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no status attr\n")); - break; - } - - if(!msg->_channelList) - { - // Although the channel list attribute is mandatory for the successful case of - // invitation response, actually the information is not important because the - // pairing devices can go to next association by the OP channel attribute. - // Then, we defined it as optional and this would fix the invitation failure - // with Netgear PTV3000 (FW:2.4.12 or later) under Win8. - // By Bruce, 2013-09-03. - } - - if(!msg->_opChannel && P2P_CLIENT == invitorRole && 0 == msg->status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no op channel attr when invitor role is GO\n")); - break; - } - - if(!msg->_grpBssid && P2P_CLIENT == invitorRole && 0 == msg->status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group bssid attr when invitor role is GO\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_DevDiscReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_devId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no device id attr\n")); - break; - } - - if(!msg->_grpId) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no group id attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_DevDiscRsp( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no status attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_PDReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_capability) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no capability attr\n")); - break; - } - - if(!msg->_devInfo) - { - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr\n")); - //break; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dev info attr, use sa as devAddr\n")); - msg->devAddr = msg->sa; - } - - if(!msg->_wpsConfigMethods) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no WPS config method attr\n")); - break; - } - - // TODO: if this is a PD req to join our GO, group id is mandatory - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_PDRsp( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_wpsConfigMethods) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no WPS config method attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_PresenceReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_noa) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no noa attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_PresenceRsp( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - if(!msg->_status) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no status attr\n")); - break; - } - - if(!msg->_noa) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no noa attr\n")); - break; - } - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -BOOLEAN -p2p_validate_GoDiscoverabilityReq( - IN P2P_MESSAGE *msg - ) -{ - BOOLEAN bValid = FALSE; - - do - { - if(!msg->_dialogToken) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("no dialog token\n")); - break; - } - - // Thter is no Elements field in a GO Discoverability Request frame - - - bValid = TRUE; - }while(FALSE); - - return bValid; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_SendAction.c b/network/wlan/WDI/COMMON/P2P_SendAction.c deleted file mode 100644 index bd6d9ade..00000000 --- a/network/wlan/WDI/COMMON/P2P_SendAction.c +++ /dev/null @@ -1,898 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_SendAction.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -static -VOID -p2p_Send_DumpTxReport( - IN const RT_TX_FEEDBACK_INFO_TX_PROFILE * const pTxProfile - ) -{ - if(NULL == pTxProfile) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pTxProfile: is NULL!!!\n")); - return; - } - - if(pTxProfile->bPktOk.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bPktOk: %u\n", pTxProfile->bPktOk.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bPktOk: N/A\n")); - } - - if(pTxProfile->bRetryOver.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bRetryOver: %u\n", pTxProfile->bRetryOver.Data));} - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bRetryOver: N/A\n")); - } - - if(pTxProfile->bLifeTimeOver.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bLifeTimeOver: %u\n", pTxProfile->bLifeTimeOver.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bLifeTimeOver: N/A\n")); - } - - if(pTxProfile->bUnicast.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bUnicast: %u\n", pTxProfile->bUnicast.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("bUnicast: N/A\n")); - } - - if(pTxProfile->uQueueID.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uQueueID: %u\n", pTxProfile->uQueueID.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uQueueID: N/A\n")); - } - - if(pTxProfile->uMacID.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uMacID: %u\n", pTxProfile->uMacID.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uMacID: N/A\n")); - } - - if(pTxProfile->uDataRetryCount.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uDataRetryCount: %u\n", pTxProfile->uDataRetryCount.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uDataRetryCount: N/A\n")); - } - - if(pTxProfile->uQueueTimeUs.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uQueueTimeUs: %u\n", pTxProfile->uQueueTimeUs.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uQueueTimeUs: N/A\n")); - } - - if(pTxProfile->uFinalDataRateIndex.bVaild) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uFinalDataRateIndex: %u\n", pTxProfile->uFinalDataRateIndex.Data)); - } - else - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("uFinalDataRateIndex: N/A\n")); - } - - return; -} - -static -BOOLEAN -p2p_GetSentFrame( - IN P2P_INFO *info, - IN u1Byte *devAddr, - IN P2P_DEV_TYPE devType, - IN P2P_FRAME_TYPE frameType, - OUT FRAME_BUF *buf - ) -{ - BOOLEAN bFound = FALSE; - - do - { - P2P_DEV_LIST_ENTRY *dev = NULL; - - FrameBuf_Init(0, 0, NULL, buf); - - if(NULL == (dev = p2p_DevList_Get(&info->devList, devAddr, devType))) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("dev not found: %02X:%02X:%02X:%02X:%02X:%02X\n", - devAddr[0], devAddr[1], devAddr[2], devAddr[3], devAddr[4], devAddr[5])); - break; - } - - if(NULL == dev->txFrames[frameType]->frame) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("no tx frame recorded: %02X:%02X:%02X:%02X:%02X:%02X\n", - devAddr[0], devAddr[1], devAddr[2], devAddr[3], devAddr[4], devAddr[5])); - break; - } - - FrameBuf_Init(dev->txFrames[frameType]->frameLen, dev->txFrames[frameType]->frameLen, dev->txFrames[frameType]->frame, buf); - - bFound = TRUE; - }while(FALSE); - - return bFound; -} - -static -VOID -p2p_IndicateFrameSent( - IN P2P_INFO *info, - IN u1Byte *devAddr, - IN P2P_DEV_TYPE devType, - IN P2P_FRAME_TYPE frameType, - IN u4Byte eventId, - IN RT_STATUS rtStatus - ) -{ - p2p_DevList_Lock(&info->devList); - - do - { - FRAME_BUF buf; - - if(!p2p_GetSentFrame(info, devAddr, devType, frameType, &buf)) - { - break; - } - - p2p_IndicateActionFrameSendComplete(info, - eventId, - rtStatus, - buf.os.Octet, - buf.os.Length); - - }while(FALSE); - - p2p_DevList_Unlock(&info->devList); - - return; -} - -static -VOID -p2p_GoNegConfirmSent( - IN PADAPTER pAdapter, - IN const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo - ) -{ - PP2P_INFO pP2PInfo = (pTxFeedbackInfo) ? - (pTxFeedbackInfo->pContext) : (NULL); - u1Byte dataRate = P2P_LOWEST_RATE; - - if(NULL == pTxFeedbackInfo) return; - - // This tx packet feedback reason doen't match. - if(!(pTxFeedbackInfo->Reason & RT_TX_FEEDBACK_ID_P2P_NEGO_TX)) return; - - FunctionIn(COMP_P2P); - - do - { - if(pTxFeedbackInfo->TxProfile.bPktOk.bVaild && pTxFeedbackInfo->TxProfile.bPktOk.Data) - { - pP2PInfo->State = P2P_STATE_GO_NEGO_COMPLETE; - pP2PInfo->ConnectionContext.Status = P2P_STATUS_SUCCESS; - PlatformSetTimer( pAdapter, &pP2PInfo->P2PMgntTimer, 0); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("sent OK\n")); - } - else if(P2P_STATE_GO_NEGO_CONFIRM_SENT_WAIT == pP2PInfo->State) - { - BOOLEAN bSupportTxReport = FALSE; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("failed, try again\n")); - p2p_Send_DumpTxReport(&pTxFeedbackInfo->TxProfile); - - p2p_DevList_Lock(&pP2PInfo->devList); - - p2p_Send_GoNegConfirm(pP2PInfo, - pP2PInfo->ConnectionContext.ConnectingDevice.DeviceAddress, - pP2PInfo->ConnectionContext.DialogToken, - &bSupportTxReport); - - p2p_DevList_Unlock(&pP2PInfo->devList); - } - }while(FALSE); - - FunctionOut(COMP_P2P); - - return; - -} - -VOID -p2p_PDRspSent( - IN PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo - ) -{ - PP2P_INFO pP2PInfo = (pTxFeedbackInfo) ? (pTxFeedbackInfo->pContext) : (NULL); - BOOLEAN bSendOk = FALSE; - - if(NULL == pTxFeedbackInfo) return; - - // This tx packet feedback reason doen't match. - if(!(pTxFeedbackInfo->Reason & RT_TX_FEEDBACK_ID_P2P_PD_RSP_TX)) return; - - FunctionIn(COMP_P2P); - - do - { - p2p_Send_DumpTxReport(&pTxFeedbackInfo->TxProfile); - - bSendOk = (pTxFeedbackInfo->TxProfile.bPktOk.bVaild && pTxFeedbackInfo->TxProfile.bPktOk.Data); - - if(bSendOk) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("send OK\n")); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("send failed\n")); - } - - P2PSvc_OnPDRspSent(pP2PInfo->pP2PSvcInfo, bSendOk); - - }while(FALSE); - - FunctionOut(COMP_P2P); - - return; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_Send_GoNegReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN BOOLEAN bSend - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb = NULL; - PRT_TX_LOCAL_BUFFER pBuf = NULL; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - u1Byte dialogToken = pP2PInfo->ConnectionContext.DialogToken; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_GoNegReq(pP2PInfo, &fbuf, da, dialogToken); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength); - - if(bSend) - { - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_GO_NEG_REQ, - da, P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - else - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("update dev list only\n")); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - return; -} - -VOID -p2p_Send_GoNegRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_GoNegRsp(pP2PInfo, dialogToken, &fbuf, da); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength); - - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_GO_NEG_RSP, - da, P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_GoNegConfirm( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - OUT PBOOLEAN pbSupportTxReport - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_GoNegConf(pP2PInfo, dialogToken, &fbuf, da); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength); - - *pbSupportTxReport = TxFeedbackInstallTxFeedbackInfoForTcb(pAdapter, pTcb); - - if(*pbSupportTxReport) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - RT_TX_FEEDBACK_ID_P2P_NEGO_TX, - pAdapter, - p2p_GoNegConfirmSent, - pP2PInfo - ); - } - - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_GO_NEG_CONF, - da, P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_InvitationReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - u1Byte dialogToken = pP2PInfo->InvitationContext.DialogToken; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_InvitationReq(pP2PInfo, &fbuf, da, dialogToken); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength); - - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_INV_REQ, - da, P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_InvitationRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_InvitationRsp(pP2PInfo, dialogToken, &fbuf, da); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength); - - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_INV_RSP, - da, P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_DevDiscReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *bssid, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_DevDiscReq(pP2PInfo, dialogToken, &fbuf, da, bssid); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_DevDiscRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u1Byte status - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_DevDiscRsp(pP2PInfo, dialogToken, &fbuf, da, status); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Send Packet! status = %d\n", status)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_PDReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *mac, - IN BOOLEAN bGo, - IN u1Byte dialogToken, - IN u2Byte configMethod - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - // Increase the dialog token. - IncreaseDialogToken(pP2PInfo->DialogToken); - - p2p_Construct_PDReq(pP2PInfo, &fbuf, mac, dialogToken, configMethod); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_PD_REQ, - mac, bGo ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_PDRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN OCTET_STRING *posP2PAttrs, - IN u2Byte configMethod, - OUT PBOOLEAN pbSupportTxReport - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - BOOLEAN bSupportTxReport = FALSE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(pbSupportTxReport) *pbSupportTxReport = FALSE; - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_PDRsp(pP2PInfo, dialogToken, posP2PAttrs, configMethod, &fbuf, da); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - p2p_IndicateActionFrameSendComplete(pP2PInfo, - P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE, - RT_STATUS_SUCCESS, - pBuf->Buffer.VirtualAddress, - pTcb->PacketLength); - - if(TRUE == (bSupportTxReport = TxFeedbackInstallTxFeedbackInfoForTcb(pAdapter, pTcb))) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - RT_TX_FEEDBACK_ID_P2P_PD_RSP_TX, - pAdapter, - p2p_PDRspSent, - (PVOID)(pP2PInfo) - ); - } - - if(pbSupportTxReport) *pbSupportTxReport = bSupportTxReport; - - p2p_DevList_TxUpdate(&pP2PInfo->devList, P2P_FID_PD_RSP, - da, P2P_DEV_TYPE_DEV, &fbuf, - dialogToken, RT_GetChannelNumber(pP2PInfo->pAdapter)); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_PresenceReq( - IN P2P_INFO *pP2PInfo, - IN const P2P_POWERSAVE_SET *pPs, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_PresenceReq(pP2PInfo, pPs, da, dialogToken, &fbuf); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_PresenceRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u1Byte status - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_PresenceRsp(pP2PInfo, da, dialogToken, status, &fbuf); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_GoDiscoverabilityReq( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Copnstruct_GoDiscoverabilityReq(pP2PInfo, da, dialogToken, &fbuf); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - MgntSendPacket(pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -VOID -p2p_Send_SDReq( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pP2PInfo->pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_SDReq(pP2PInfo, &fbuf, da); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - MgntSendPacket(pP2PInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - return; -} - -VOID -p2p_Send_SDRsp( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN P2P_SD_STATUS_CODE status, - IN BOOLEAN bFrag - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pP2PInfo->pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_SDRsp(pP2PInfo, &fbuf, da, dialogToken, status, bFrag); - - pTcb->PacketLength = FrameBuf_Length(&fbuf); - - MgntSendPacket(pP2PInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - return; -} - -VOID -p2p_Send_SDComebackReq( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pP2PInfo->pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_SDComebackReq(pP2PInfo, &fbuf, da, dialogToken); - - MgntSendPacket(pP2PInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - return; -} - -VOID -p2p_Send_SDComebackRsp( - IN const P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN u1Byte dialogToken, - IN u2Byte bytesToCopy, - IN BOOLEAN bMoreData - ) -{ - PADAPTER pAdapter = pP2PInfo->pAdapter; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pP2PInfo->pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - FrameBuf_SetDbgLevel(&fbuf, DBG_LOUD); - - p2p_Construct_SDComebackRsp(pP2PInfo, &fbuf, da, dialogToken, bytesToCopy, bMoreData); - - MgntSendPacket(pP2PInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - return; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_SendMgnt.c b/network/wlan/WDI/COMMON/P2P_SendMgnt.c deleted file mode 100644 index b465d459..00000000 --- a/network/wlan/WDI/COMMON/P2P_SendMgnt.c +++ /dev/null @@ -1,58 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_SendMgnt.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_Send_ProbeRsp( - IN P2P_INFO *pP2PInfo, - IN const u1Byte *da, - IN RT_RFD *rfdProbeReq, - IN OCTET_STRING *posProbeReq, - IN OCTET_STRING *posAttrs - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte dataRate = P2P_LOWEST_RATE; - - PlatformAcquireSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(pP2PInfo->pAdapter, &pTcb, &pBuf)) - { - FRAME_BUF fbuf; - - FrameBuf_Init(pP2PInfo->pAdapter->MAX_TRANSMIT_BUFFER_SIZE, 0, pBuf->Buffer.VirtualAddress, &fbuf); - - if(p2p_Construct_ProbeRsp(&fbuf, pP2PInfo, da, rfdProbeReq, posProbeReq, posAttrs)) - { - pTcb->PacketLength = FrameBuf_Length(&fbuf); - MgntSendPacket(pP2PInfo->pAdapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, dataRate); - } - else - { - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->BufferList[0] = pBuf->Buffer; - pTcb->Reserved = pBuf; - ReturnTCB(pP2PInfo->pAdapter, pTcb, RT_STATUS_SUCCESS); - } - } - - PlatformReleaseSpinLock(pP2PInfo->pAdapter, RT_TX_SPINLOCK); -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Synch.c b/network/wlan/WDI/COMMON/P2P_Synch.c deleted file mode 100644 index 6a81e110..00000000 --- a/network/wlan/WDI/COMMON/P2P_Synch.c +++ /dev/null @@ -1,51 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Synch.tmh" -#endif - -#include "P2P_Synch.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -VOID -p2p_InitLock( - IN P2P_LOCK *lock - ) -{ - NdisAllocateSpinLock(lock); -} - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -_IRQL_raises_(DISPATCH_LEVEL) -VOID -p2p_AcquireLock( - IN P2P_LOCK *lock - ) -{ - NdisAcquireSpinLock(lock); -} - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -_IRQL_requires_(DISPATCH_LEVEL) -VOID -p2p_ReleaseLock( - IN P2P_LOCK *lock - ) -{ - NdisReleaseSpinLock(lock); -} - -VOID -p2p_FreeLock( - IN P2P_LOCK *lock - ) -{ - NdisFreeSpinLock(lock); - lock = NULL; -} - -#endif diff --git a/network/wlan/WDI/COMMON/P2P_Synch.h b/network/wlan/WDI/COMMON/P2P_Synch.h deleted file mode 100644 index d2a7e3b3..00000000 --- a/network/wlan/WDI/COMMON/P2P_Synch.h +++ /dev/null @@ -1,39 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_P2P_LOCK_H -#define __INC_P2P_LOCK_H - - typedef NDIS_SPIN_LOCK P2P_LOCK; - -VOID -p2p_InitLock( - IN P2P_LOCK *lock - ); - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -VOID -_IRQL_raises_(DISPATCH_LEVEL) -p2p_AcquireLock( - IN P2P_LOCK *lock - ); - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -VOID -_IRQL_requires_(DISPATCH_LEVEL) -p2p_ReleaseLock( - IN P2P_LOCK *lock - ); - -VOID -p2p_FreeLock( - IN P2P_LOCK *lock - ); - -#endif // #ifndef __INC_P2P_LOCK_H \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/P2P_TempPublic.h b/network/wlan/WDI/COMMON/P2P_TempPublic.h deleted file mode 100644 index 33d389e3..00000000 --- a/network/wlan/WDI/COMMON/P2P_TempPublic.h +++ /dev/null @@ -1,305 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//------------------------------------------------------------------------------ -// -// Description: -// Definitions shall be internal but put as public because P2P_INFO -// refers to them. -// Note that P2P_INFO shall also be internal. -// - -#ifndef __INC_TEMP_P2P_PUBLIC_H -#define __INC_TEMP_P2P_PUBLIC_H - -#include "P2P_Channel.h" // to be removed because this shall be private -#include "P2P_Synch.h" - -typedef struct _P2P_MESSAGE -{ - /* MAC header */ - u1Byte da[6]; - u1Byte sa[6]; - u1Byte bssid[6]; - - u1Byte *devAddr; - - /* IE raw data */ - FRAME_BUF p2pAttributes; // concatenated P2P attributes - FRAME_BUF wpsAttributes; // concatenated WPS attributes - - /* Action frame specific */ - const u1Byte *_dialogToken; - u1Byte dialogTokenBuf[1]; - u1Byte dialogToken; - - /* P2P IE, pointers into the raw IE data */ - const u1Byte *_status; - u1Byte status; - - const u1Byte *_minorReasonCode; - u1Byte minorReasonCode; - - const u1Byte *_capability; - u1Byte grpCap; - u1Byte devCap; - - const u1Byte *_devId; - const u1Byte *devIdDevAddr; - - const u1Byte *_goIntent; - u1Byte goIntent; - - const u1Byte *_configTimeout; - u1Byte goConfigTimeout; - u1Byte cliConfigTimeout; - - const u1Byte *_listenChannel; - u1Byte listenChannel; - - const u1Byte *_grpBssid; - const u1Byte *grpBssid; - - const u1Byte *_extListenTiming; - u2Byte extListenPeriod; - u2Byte extListenInterval; - - const u1Byte *_intendedIntfAddr; - const u1Byte *intfAddr; - - const u1Byte *_manageability; - u1Byte manageability; - - const u1Byte *_channelList; - u2Byte channelListLen; - const u1Byte *channelListCountry; - u2Byte channelEntryListLen; - const u1Byte *channelEntryList; - - const u1Byte *_noa; - u2Byte noaLen; - u1Byte noaIndex; - u1Byte noaCtWindowAndOppPsParam; - u2Byte noaDescriptorLen; - const u1Byte *noaDescriptors; - - const u1Byte *_devInfo; - const u1Byte *devInfoDevAddr; - u2Byte configMethod; - const u1Byte *primDevType; - u1Byte numSecDevType; - const u1Byte *secDevTypeList; - u1Byte devNameLen; - const u1Byte *devName; - - const u1Byte *_grpInfo; - u2Byte cliInfoDescListLen; - const u1Byte *cliInfoDescList; - - const u1Byte *_grpId; - const u1Byte *grpDevAddr; - u1Byte grpSsidLen; - const u1Byte *grpSsid; - - const u1Byte *_intf; - const u1Byte *intfDevAddr; - u1Byte intfAddrCount; - const u1Byte *intfAddrList; - - const u1Byte *_opChannel; - u1Byte opChannel; - - const u1Byte *_invitationFlags; - u1Byte invitationFlags; - - /* P2P IE, WFDS addendum */ - const u1Byte *_svcHash; - u2Byte svcHashLen; - u2Byte svcHashNum; - const u1Byte *svcHashList; - - const u1Byte *_sessionInfoDataInfo; - u2Byte sessionInfoLen; - const u1Byte *sessionInfo; - - const u1Byte *_connCap; - u1Byte connCap; - - const u1Byte *_advId; - u4Byte advId; - const u1Byte *svcMac; - - const u1Byte *_advSvc; - u2Byte advSvcLen; - u2Byte advSvcNum; - - const u1Byte *_sessionId; - u4Byte sessionId; - const u1Byte *sessionMac; - - const u1Byte *_featureCap; - u2Byte featureCap; - - /* WPS IE */ - const u1Byte *_wpsConfigMethods; // WPS config methods - u2Byte wpsConfigMethods; - - const u1Byte *_wpsDevName; - u2Byte wpsDevNameLen; - - const u1Byte *_wpsDevPasswordId; // Device password id - u2Byte wpsDevPasswordId; - - const u1Byte *_wpsManufacturer; // WPS manufacturer - u2Byte wpsManufacturerLen; - - const u1Byte *_wpsModelName; // WPS model name - u2Byte wpsModelNameLen; - - const u1Byte *_wpsModelNumber; // WPS model number - u2Byte wpsModelNumberLen; - - const u1Byte *_wpsSerialNumber; // WPS serial number - u2Byte wpsSerialNumberLen; - - const u1Byte *_wpsPrimaryDevType; // WPS primary device type - u2Byte wpsPrimaryDevTypeLen; - - const u1Byte *_wpsSecDevTypeList; - u2Byte wpsSecDevTypeListLen; - u1Byte wpsSecDevTypeNum; // Number of secondary device type - - const u1Byte *_wpsUuidE; - u2Byte wpsUuidELen; - - /* SSID IE */ - const u1Byte *_ssid; - u1Byte ssidBuf[32]; - u1Byte ssidLen; - - /* DS Parameter IE */ - const u1Byte *_dsParam; - u1Byte dsParamBuf[1]; - u1Byte dsParam; - - /* Debug */ - u4Byte dbgLevel; - RT_STATUS rtStatus; - -}P2P_MESSAGE; - -#define P2P_MAX_DEV_LIST 256 -#define P2P_MAX_P2P_DEV_INFO_POOL_ENTRIES 32 -#define P2P_MAX_FRAME_POOL_ENTRIES 256 -#define P2P_MAX_FRAME_BUF_SIZE 640 -#define P2P_MAX_MSG_POOL_ENTRIES 32 - -typedef enum _P2P_DEV_TYPE -{ - P2P_DEV_TYPE_LEGACY, - P2P_DEV_TYPE_GO, - P2P_DEV_TYPE_DEV -}P2P_DEV_TYPE; - -typedef enum _P2P_FRAME_TYPE -{ - P2P_FID_BEACON = 0, - P2P_FID_PROBE_REQ, - P2P_FID_PROBE_RSP, - P2P_FID_ACTION_START, - P2P_FID_GO_NEG_REQ = P2P_FID_ACTION_START, - P2P_FID_GO_NEG_RSP, - P2P_FID_GO_NEG_CONF, - P2P_FID_INV_REQ, - P2P_FID_INV_RSP, - P2P_FID_PD_REQ, - P2P_FID_PD_RSP, - //-------------------------------------------------------------------------- - P2P_FID_MAX -}P2P_FRAME_TYPE; - -typedef struct _P2P_FRAME_INFO -{ - RT_LIST_ENTRY list; - - // Contains the raw frame - u2Byte frameLen; - u1Byte frame[P2P_MAX_FRAME_BUF_SIZE]; - P2P_FRAME_TYPE type; - - // Dialog token, valid only when frame type is action - u1Byte token; - - // Parsed message, valid only when this is a rx frame - P2P_MESSAGE *msg; - - // Meta data - u8Byte time; - u1Byte channel; - s4Byte sigPower; - u1Byte sigStrength; -}P2P_FRAME_INFO; - -typedef struct _P2P_DEV_INFO -{ - // Channel list - P2P_CHANNELS channels; - P2P_CHANNELS commonChannels; - - // Dialog token to be use for action frame tx - u1Byte dialogToken; - - // PD Info - u2Byte pdConfigMethod; - u1Byte pdStatus; -}P2P_DEV_INFO; - -/* - * Contains information of either a legacy AP, a GO or a P2P Device. - */ -typedef struct _P2P_DEV_LIST_ENTRY -{ - RT_LIST_ENTRY list; - - // TA from the received frame, if from a P2P Device, it is the Device - // Address, otherwise it is either the Interface Address or the BSSID - u1Byte mac[6]; - - // Type of the device - P2P_DEV_TYPE type; - - BOOLEAN bDirty; - - // Rx frames - P2P_FRAME_INFO *rxFrames[P2P_FID_MAX]; - RT_LIST_ENTRY rxFrameQ; - - // Tx frames - P2P_FRAME_INFO *txFrames[P2P_FID_MAX]; - - // P2P Device/GO specific info, valid only when type is not legacy - P2P_DEV_INFO *p2p; -}P2P_DEV_LIST_ENTRY; - -typedef struct _P2P_DEV_LIST -{ - u4Byte count; - RT_LIST_ENTRY list; - P2P_LOCK lock; - const char *sig; - - POOL entryPool; - P2P_DEV_LIST_ENTRY entryPoolRsvd[P2P_MAX_DEV_LIST]; - - POOL p2pDevInfoPool; - P2P_DEV_INFO p2pDevInfoPoolRsvd[P2P_MAX_P2P_DEV_INFO_POOL_ENTRIES]; - - POOL framePool; - P2P_FRAME_INFO framePoolRsvd[P2P_MAX_FRAME_POOL_ENTRIES]; - - POOL rxMsgPool; - P2P_MESSAGE rxMsgPoolRsvd[P2P_MAX_MSG_POOL_ENTRIES]; -}P2P_DEV_LIST; - -#endif // #ifndef __INC_TEMP_P2P_PUBLIC_H diff --git a/network/wlan/WDI/COMMON/P2P_Util.c b/network/wlan/WDI/COMMON/P2P_Util.c deleted file mode 100644 index a1f3666c..00000000 --- a/network/wlan/WDI/COMMON/P2P_Util.c +++ /dev/null @@ -1,219 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "P2P_Util.tmh" -#endif - -#include "P2P_Internal.h" - -#if (P2P_SUPPORT == 1) - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -p2p_MoveMemory( - IN VOID *dest, - IN const VOID *src, - IN u4Byte len - ) -{ - u4Byte it = 0; - - for(it = 0; it < len; it++) - *(((u1Byte *)dest) + it) = *(((u1Byte *)src) + it); -} - -int -p2p_go_det( - IN u1Byte selfVal, - IN u1Byte peerVal - ) -{ - u1Byte selfIntent = selfVal >> 1; - u1Byte peerIntent = peerVal >> 1; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("self intent: %u, tie: %u, peer intent: %u, tie: %u\n", - selfVal >> 1, selfVal & 0x01, peerVal >> 1, peerVal & 0x01)); - - if(selfIntent == peerIntent) - { - if (P2P_MAX_GO_INTENT == selfIntent) - return -1; /* both devices want to become GO */ - - /* Use tie breaker bit to determine GO */ - return (peerVal & 0x01) ? 0 : 1; - } - - return selfIntent > peerIntent; -} - - -BOOLEAN -p2p_ActingAs_Go( - IN P2P_INFO *pP2PInfo - ) -{ - BOOLEAN bGo = FALSE; - ADAPTER *pExtAdapter = P2P_ADAPTER_OS_SUPPORT_P2P(pP2PInfo->pAdapter) - ? pP2PInfo->pAdapter - : GetFirstGOPort(pP2PInfo->pAdapter); - - bGo = (P2P_GO == pP2PInfo->Role && ACTING_AS_AP(pExtAdapter)); // copied from P2PMakeP2PCapability - - if(bGo) - { - SET_FLAG(pP2PInfo->GroupCapability, P2P_GROUP_CAP_GROUP_OWNER); - } - else - { - CLEAR_FLAG(pP2PInfo->GroupCapability, P2P_GROUP_CAP_GROUP_OWNER); - } - - return bGo; -} - -BOOLEAN -p2p_Doing_Provisioning( - IN const P2P_INFO *pP2PInfo - ) -{ - PMGNT_INFO pDefaultMgntInfo = &(GetDefaultAdapter(pP2PInfo->pAdapter)->MgntInfo); - - if(0 < GET_SIMPLE_CONFIG_IE_LEN(pDefaultMgntInfo) && GET_SIMPLE_CONFIG_ENABLED(pDefaultMgntInfo)) - { - return TRUE; - } - - return FALSE; -} - -BOOLEAN -p2p_Check_GroupLimitReached( - IN P2P_INFO *pP2PInfo - ) -{ - if(p2p_ActingAs_Go(pP2PInfo)) - { - if(P2P_MAX_P2P_CLIENT <= P2PClientInfoGetCount(pP2PInfo)) - {// no further P2P connections are supported - SET_FLAG(pP2PInfo->GroupCapability, P2P_GROUP_CAP_GROUP_LIMIT); - return TRUE; - } - } - - return FALSE; -} - -P2P_DEV_TYPE -p2p_MessageSrcType( - IN const P2P_MESSAGE *msg, - IN P2P_FRAME_TYPE frameType - ) -{ - if(frameType < P2P_FID_ACTION_START - && !FrameBuf_Length(&msg->p2pAttributes) - ) - { - return P2P_DEV_TYPE_LEGACY; - } - - if(msg->_dialogToken) - {// action frame - if(msg->_capability) - { - if(TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER)) - { - if(P2P_FID_GO_NEG_REQ == frameType - || P2P_FID_GO_NEG_RSP == frameType - || P2P_FID_GO_NEG_CONF == frameType - ) - { - return P2P_DEV_TYPE_DEV; // Actiontec ScreenBeam sends GO Neg Rsp with GO bit set - } - return P2P_DEV_TYPE_GO; - } - else - return P2P_DEV_TYPE_DEV; - } - - return P2P_DEV_TYPE_DEV; - } - else - { - if(!FrameBuf_Length(&msg->p2pAttributes)) - return P2P_DEV_TYPE_LEGACY; - - if(msg->_capability) - { - if(TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER)) - return P2P_DEV_TYPE_GO; - else - return P2P_DEV_TYPE_DEV; - } - } - - return P2P_DEV_TYPE_LEGACY; -} - -BOOLEAN -p2p_FindClientInfoByDevAddr( - IN const u1Byte *devAddr, - IN const P2P_MESSAGE *msg, - OUT const u1Byte **ppCliInfo - ) -{ - BOOLEAN bFound = FALSE; - - if(msg->_grpInfo && TEST_FLAG(msg->grpCap, P2P_GROUP_CAP_GROUP_OWNER)) - { - const u1Byte *pos = msg->cliInfoDescList; - const u1Byte *end = msg->cliInfoDescList + msg->cliInfoDescListLen; - - while(pos < end) - { - u1Byte len = 0; - const u1Byte *infostart = NULL; - const u1Byte *infoend = NULL; - - infostart = pos; - - len = pos[0]; - pos += 1; - - infoend = pos + len; - if(end < infoend) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("client info length field overflow: %u\n", len)); - break; - } - - if(len < 6 + 6 + 1 + 2 + 8 + 1) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("invalid client info length field: %u\n", len)); - break; - } - - if(eqMacAddr(pos, devAddr)) - { - bFound = TRUE; - if(ppCliInfo) - *ppCliInfo = infostart; - break; - } - else - { - pos = infoend; - } - } - } - - return bFound; -} - -#endif \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/ParserGen.c b/network/wlan/WDI/COMMON/ParserGen.c deleted file mode 100644 index df264db2..00000000 --- a/network/wlan/WDI/COMMON/ParserGen.c +++ /dev/null @@ -1,2292 +0,0 @@ -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - ParserGen.c - -Abstract: - Parse MSDU to match the specified type, fetch fixed offset. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2007-06-11 shienchang Create. - 2008-03-11 Bruce Modify from 818xB. - ---*/ - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "ParserGen.tmh" -#endif - -// Global protocols and the corresponding actions. -static GP_RULE GPGlobalRule[] = -{ - { PROTO_ETHERNET, PROTO_IP, 12, 2, GPParserHandlerEthernet }, - { PROTO_WLAN_80211, PROTO_WLAN_LLC, 0, 2, GPParserHandlerWlan }, - { PROTO_WLAN_LLC, PROTO_IP, 6, 2, GPParserHandlerWlanLlc }, - { PROTO_IP, PROTO_TCP, 9, 1, GPParserHandlerIP }, - { PROTO_IP, PROTO_UDP, 9, 1, GPParserHandlerIP }, - {0}, -}; - -// The SIP protocol definitions and the corresponding actions. -static GP_RULE GPVoWlanSipRule[] = -{ - { PROTO_UDP, PROTO_SIP_INVITE, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleUDP2SIP }, - { PROTO_UDP, PROTO_SIP_STATUS, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleUDP2SIP }, - { PROTO_UDP, PROTO_SIP_BYE, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleUDP2SIP }, - { PROTO_SIP_INVITE, PROTO_SIP_SDP, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleSIP2SDP }, - { PROTO_SIP_STATUS, PROTO_SIP_SDP, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleSIP2SDP }, - { PROTO_SIP_STATUS, PROTO_UNKNOWN, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleSIPSTATUS }, - { PROTO_SIP_SDP, PROTO_UNKNOWN, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleSDP }, - { PROTO_SIP_BYE, PROTO_UNKNOWN, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleSIPBYE }, - { PROTO_UDP, PROTO_RTP, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleUDP2RTP }, - { PROTO_RTP, PROTO_RTP_G711, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleRTP2G711 }, - { PROTO_RTP_G711, PROTO_UNKNOWN, UNKNOWN_SIG, UNKNOWN_SIG, GPParserCustomHandleG711 }, - {0}, -}; -//============================================================================= -// Prototype of protected function. -//============================================================================= -TR_ACTION -ParseBuffer( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken - ); - -VOID -RuleMatchingProcess( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken, - IN PGENERIC_PARSER pParser - ); - -BOOLEAN -MatchingByRule( - IN PADAPTER Adapter, - IN PGP_RULE pRule, - IN PGPPARSE_TOKEN pToken, - IN PGENERIC_PARSER pParser - ); - -BOOLEAN -GetSignatureAndAdvanceToNextProtocol( - IN PGPPARSE_TOKEN pToken, - IN u4Byte DataOffset, - IN u4Byte HeaderLength, - IN PVOID pDataBuffer, - IN u4Byte DataBufLength - ); - -BOOLEAN -GetNextLine( - IN PGPPARSE_TOKEN pToken, - IN BOOLEAN bNoAdvance, - OUT pu1Byte pOutBuffer, - IN u4Byte OutBufferLen - ); - -BOOLEAN -UngetLine( - IN PGPPARSE_TOKEN pToken - ); - -BOOLEAN -AdvanceAndGetDataByOffset( - IN PGPPARSE_TOKEN pToken, - IN u4Byte DataOffset, - IN BOOLEAN bNoAdvance, - OUT PVOID pDataBuffer, - IN u4Byte DataBufLength - ); - -//============================================================================= -// End of Prototype of protected function. -//============================================================================= - -//============================================================================= -// Private utility function. -//============================================================================= - -#if DBG -// -// Description: -// Debug routine of protocol. -// 2007.07.10, by shien chang. -// -VOID -DbgProtocol( - IN u4Byte protocol - ) -{ - switch (protocol) - { - case PROTO_UNKNOWN: - RT_TRACE(COMP_CCX, DBG_TRACE, ("\n")); - break; - case PROTO_ETHERNET: - RT_TRACE(COMP_CCX, DBG_TRACE, ("ethernet -> ")); - break; - case PROTO_WLAN_80211: - RT_TRACE(COMP_CCX, DBG_TRACE, ("wlan -> ")); - break; - case PROTO_WLAN_LLC: - RT_TRACE(COMP_CCX, DBG_TRACE, ("llc -> ")); - break; - case PROTO_IP: - RT_TRACE(COMP_CCX, DBG_TRACE, ("ip -> ")); - break; - case PROTO_TCP: - RT_TRACE(COMP_CCX, DBG_TRACE, ("tcp -> ")); - break; - case PROTO_UDP: - RT_TRACE(COMP_CCX, DBG_TRACE, ("udp -> ")); - break; - case PROTO_RTP: - RT_TRACE(COMP_CCX, DBG_TRACE, ("rtp -> ")); - break; - case PROTO_SIP_INVITE: - RT_TRACE(COMP_CCX, DBG_TRACE, ("sip invite -> ")); - break; - case PROTO_SIP_STATUS: - RT_TRACE(COMP_CCX, DBG_TRACE, ("sip status -> ")); - break; - case PROTO_SIP_BYE: - RT_TRACE(COMP_CCX, DBG_TRACE, ("sip bye -> ")); - break; - case PROTO_SIP_NOTIFY: - RT_TRACE(COMP_CCX, DBG_TRACE, ("sip notify -> ")); - break; - case PROTO_SIP_SDP: - RT_TRACE(COMP_CCX, DBG_TRACE, ("sip sdp -> ")); - break; - case PROTO_RTP_G711: - RT_TRACE(COMP_CCX, DBG_TRACE, ("rtp g711 -> ")); - break; - default: - RT_TRACE(COMP_CCX, DBG_TRACE, ("protocol: %d -> ", protocol)); - break; - } -} -#endif - - -// -// Description: -// Request every parser to parse the tx or rx packet. -// 2007.07.10, by shien chang. -// -TR_ACTION -ParseBuffer( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte i; - PGENERIC_PARSER pParser; - TR_ACTION trAction = TR_ACTION_CONTINUE; - - for (i=0; i < MAX_PARSER_NUM; i++) - { - pParser = *(((PGENERIC_PARSER*)pMgntInfo->pGenericParser) + i); - if ( pParser ) - { - // - // Drive the parser go through the registered rules. - // - if ( pParser->Gate && pParser->Gate(Adapter, pParser) ) - { - RuleMatchingProcess(Adapter, pToken, pParser); - if (pParser->Action != NULL) - trAction = pParser->Action(Adapter, pToken, pParser); - if (trAction != TR_ACTION_CONTINUE) - break; - } - } - } - - return trAction; -} - -// -// Description: -// This routine drive parser according to parsing rules. -// 2007.07.10, by shien chang. -// -VOID -RuleMatchingProcess( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken, - IN PGENERIC_PARSER pParser - ) -{ - PGP_RULE pRule = NULL; - BOOLEAN bMatched = FALSE; - PGP_RULE pRuleSet[2]; - u4Byte i=0; - - pRuleSet[0] = pParser->pParseRules; - pRuleSet[1] = GPGlobalRule; - - while ( i < sizeof(pRuleSet) / sizeof(PGP_RULE) ) - { - // - // Go through parser's rules & global rules. - // - bMatched = FALSE; - - for (pRule = pRuleSet[i]; - (pRule != NULL) && (pRule->CurrProtocol != 0); - pRule ++) - { - if (pRule->CurrProtocol == pToken->currProtocol) - { - bMatched = MatchingByRule(Adapter, - pRule, - pToken, - pParser); - if (bMatched) - break; - } - } - - if (bMatched) - { - if (pRule->NextProtocol != PROTO_UNKNOWN) - { - i = 0; - } - else - { - break; - } - } - else - i ++; - } - - if (!bMatched) - { - DbgProtocol(pToken->currProtocol); - if (pToken->ProtocolCount < MAX_PROTOCOL_NUM) - pToken->ProtocolSuite[pToken->ProtocolCount++] = pToken->currProtocol; - } - DbgProtocol(PROTO_UNKNOWN); -} - -// -// Description: -// Try to match a rule. -// 2007.7.13, by shien chang. -// -BOOLEAN -MatchingByRule( - IN PADAPTER Adapter, - IN PGP_RULE pRule, - IN PGPPARSE_TOKEN pToken, - IN PGENERIC_PARSER pParser - ) -{ - u1Byte SigBuffer[MAX_SIG_LENGTH]; - BOOLEAN bApply = FALSE; - BOOLEAN bMatched = FALSE; - BOOLEAN bAdv=FALSE; - u4Byte currIndex, currOffset; - u4Byte hdrLen=0; - - if ( pRule->SigLength <= MAX_SIG_LENGTH) - { - currIndex = pToken->currBufferIndex; - currOffset = pToken->currBufferOffset; - hdrLen = PROTO_UNKNOWN_HDRLEN; - - // - // Check signature. - // case 1: if signature is unknown, invoke the customer routine - // and advance to next protocol if success. - // case 2: if signature is known, get the signature first and then - // invoke the costomer routine. - // - if ( pRule->SigLength == UNKNOWN_SIG ) - { - bApply = pRule->ParseHandler( - Adapter, - pParser->ParserContext, - pToken->currProtocol, - pRule->NextProtocol, - NULL, - 0, - pToken, - &hdrLen); - - if (hdrLen == PROTO_UNKNOWN_HDRLEN) - { - pToken->currBufferIndex = currIndex; - pToken->currBufferOffset = currOffset; - bAdv = TRUE; - } - else if (bApply) - { - bAdv = GetSignatureAndAdvanceToNextProtocol( - pToken, - pRule->SigStart, - hdrLen, - NULL, - 0); - } - - if (bApply && bAdv) - { - DbgProtocol(pToken->currProtocol); - if (pToken->ProtocolCount < MAX_PROTOCOL_NUM) - pToken->ProtocolSuite[pToken->ProtocolCount++] = pToken->currProtocol; - - if (pRule->NextProtocol != PROTO_UNKNOWN) - pToken->currProtocol = pRule->NextProtocol; - bMatched = TRUE; - } - - } - else - { - if (AdvanceAndGetDataByOffset( - pToken, - pRule->SigStart, - TRUE, - SigBuffer, - pRule->SigLength)) - { - bApply = pRule->ParseHandler( - Adapter, - pParser->ParserContext, - pToken->currProtocol, - pRule->NextProtocol, - SigBuffer, - pRule->SigLength, - pToken, - &hdrLen); - - if (hdrLen == PROTO_UNKNOWN_HDRLEN) - { - pToken->currBufferIndex = currIndex; - pToken->currBufferOffset = currOffset; - bAdv = TRUE; - } - else if (bApply) - { - bAdv = GetSignatureAndAdvanceToNextProtocol( - pToken, - pRule->SigStart, - hdrLen, - NULL, - 0); - } - - if (bApply && bAdv) - { - DbgProtocol(pToken->currProtocol); - if (pToken->ProtocolCount < MAX_PROTOCOL_NUM) - pToken->ProtocolSuite[pToken->ProtocolCount++] = pToken->currProtocol; - - if (pRule->NextProtocol != PROTO_UNKNOWN) - pToken->currProtocol = pRule->NextProtocol; - bMatched = TRUE; - } - } - - } - } - else - { - RT_TRACE(COMP_CCX, DBG_WARNING, ("Signature length is too long (limit = %d)\n", MAX_SIG_LENGTH)); - } - - return bMatched; -} - -// -// Description: -// Get signature at DataOffset and advance to the begining of -// next protocol. -// -// Arguments: -// pToken - the parsing token which maintain by parser. -// DataOffset - start offset of signature. -// HeaderLength -length of current protocol. -// pDataBuffer - buffer to store the read signature. -// DataBufLength - lenght of signature to be read. -// -// Return: -// TRUE if read success. -// FALSE if read failed. -// -// Note: -// If pDataBuffer is NULL or DataBufLength is zero, this routine will -// just advance to DataOffset and doesn't read any data. -// -// 2007.07.10, by shien chang. -// -BOOLEAN -GetSignatureAndAdvanceToNextProtocol( - IN PGPPARSE_TOKEN pToken, - IN u4Byte DataOffset, - IN u4Byte HeaderLength, - IN PVOID pDataBuffer, - IN u4Byte DataBufLength - ) -{ - - if (pDataBuffer!=NULL && DataBufLength!=0) - { - if (AdvanceAndGetDataByOffset(pToken, - DataOffset, - FALSE, - pDataBuffer, - DataBufLength)) - { - if (AdvanceAndGetDataByOffset(pToken, - HeaderLength-DataOffset, - FALSE, - NULL, - 0)) - { - return TRUE; - } - } - } - else - { - if (AdvanceAndGetDataByOffset(pToken, - HeaderLength, - FALSE, - NULL, - 0)) - { - return TRUE; - } - } - - return FALSE; -} - -// -// Description: -// Get next line of protocol such as SIP, SDP ... which are -// end with every line a "0x0d 0x0a" seprator. This routine will -// advance to begining of next line after current line has read -// according to bNoAdvance flag. -// -// Arguments: -// pToken - the parsing token which maintain by parser. -// bNoAdvance - TRUE: advance to next line. -// FALSE: don't advance to next line. -// pOutBuffer - buffer to store the read data. -// OutBufferLen - length of pOutBuffer. -// -// Return: -// TRUE if read success. -// FALSE if read failed. -// -// Assumption: -// pOutBuffer can't be NULL. -// OutBufferLen can't be zero. -// -// 2007.07.10, by shien chang. -// -BOOLEAN -GetNextLine( - IN PGPPARSE_TOKEN pToken, - IN BOOLEAN bNoAdvance, - OUT pu1Byte pOutBuffer, - IN u4Byte OutBufferLen - ) -{ - u4Byte BytesRead = 0; - u4Byte i, j; - u4Byte start; - - PlatformZeroMemory(pOutBuffer, OutBufferLen); - - for(i = pToken->currBufferIndex; i < pToken->BufferCount; i ++) - { - if (i == pToken->currBufferIndex) - start = pToken->currBufferOffset; - else - start = 0; - - for (j = start; j < pToken->BufferList[i].Length; j ++) - { - pOutBuffer[BytesRead ++] = pToken->BufferList[i].VirtualAddress[j]; - - if (pOutBuffer[BytesRead-2]==0x0d && - pOutBuffer[BytesRead-1]==0x0a) - { - if (!bNoAdvance) - { - if (j == pToken->BufferList[i].Length-1) - { - if (i + 1 < pToken->BufferCount) - { - pToken->currBufferIndex = i + 1; - pToken->currBufferOffset = 0; - } - else - { - pToken->currBufferIndex = i; - pToken->currBufferOffset = j; - } - } - else - { - pToken->currBufferIndex = i; - pToken->currBufferOffset = j + 1; - } - } - return TRUE; - } - if (BytesRead==OutBufferLen) - return FALSE; - } - } - - return FALSE; -} - -// -// Description: -// Retreat the point back to previous line. This is -// a reverse operation of GetNextLine. -// -// Argument: -// pToken - the parsing token which maintain by parser. -// -// Return: -// TRUE if retreat success. -// FALSE if retreat failed. -// -// 2007.07.10, by shien chang. -// -BOOLEAN -UngetLine( - IN PGPPARSE_TOKEN pToken - ) -{ - u4Byte i, j, len; - u1Byte found = 0, sta = 0; - u4Byte m=0,n=0; - - for (i = pToken->currBufferIndex + 1; i > 0; i --) - { - if (i==pToken->currBufferIndex+1) - len = pToken->currBufferOffset; - else - len = pToken->BufferList[i-1].Length; - - for (j = len; j > 0; j --) - { - if (pToken->BufferList[i-1].VirtualAddress[j-1] == 0x0a) - { - sta++; - continue; - } - if (pToken->BufferList[i-1].VirtualAddress[j-1] == 0x0d) - { - if (sta == 1) - { - found++; - if (found == 2) - { - pToken->currBufferIndex = m; - pToken->currBufferOffset = n; - return TRUE; - } - } - else - sta = 0; - } - - sta = 0; - m = i-1; - n = j-1; - } - - } - - return FALSE; -} - -// -// Description: -// Advance to the offset specific by DataOffset and get following -// bytes into buffer. -// -// Arguments: -// pToken - the parsing token which maintain by parser. -// DataOffset - the offset parser will advance before get data. -// bNoAdvance - TRUE: only get data at DataOffset, not advance to. -// FALSE: advance to DataOffset, and get data. -// pDataBuffer -buffer to store the read data. -// DataBufferLength - lenght of pDataBuffer and bytes to read. -// -// Return: -// TRUE if read success. -// FALSE if read failed. -// -// Note: -// If pDataBuffer is NULL or DataBufLength is zero, this routine will -// just advance to DataOffset and doesn't read any data. -// -// 2007.07.10, by shien chang. -// -BOOLEAN -AdvanceAndGetDataByOffset( - IN PGPPARSE_TOKEN pToken, - IN u4Byte DataOffset, - IN BOOLEAN bNoAdvance, - OUT PVOID pDataBuffer, - IN u4Byte DataBufLength - ) -{ - BOOLEAN bResult = TRUE; - u4Byte BytesRead = 0; - u4Byte i; - u4Byte offset = 0; - pu1Byte pBuffer = (pu1Byte)pDataBuffer; - u4Byte len; - u4Byte tmpIndex=0, tmpOffset=0; - BOOLEAN bOnlyAdvance = (pDataBuffer==NULL || DataBufLength==0) ? TRUE : FALSE; - BOOLEAN bOnlyAdvanceComplete = FALSE; - - for(i = pToken->currBufferIndex;i < pToken->BufferCount; i ++) - { - if(pToken->BufferList[i].Length==0) - continue; - - if (i == pToken->currBufferIndex) - { - len = pToken->BufferList[i].Length - pToken->currBufferOffset; - } - else - { - len = pToken->BufferList[i].Length; - } - - for (; (BytesRead!=DataBufLength) || bOnlyAdvance; BytesRead ++) - { - if ( (len + offset) > (DataOffset + BytesRead) ) - { - u4Byte ByteIndexToCopy = - (i == pToken->currBufferIndex) ? - (DataOffset+BytesRead + pToken->currBufferOffset ) - offset : - (DataOffset+BytesRead) - offset; - - - if (!bOnlyAdvance) - pBuffer[BytesRead] = pToken->BufferList[i].VirtualAddress[ByteIndexToCopy]; - - if (BytesRead == 0) - { - tmpIndex = i; - tmpOffset = ByteIndexToCopy; - - if (bOnlyAdvance) - { - bOnlyAdvanceComplete = TRUE; - break; - } - } - } - else - break; - } - - if (bOnlyAdvance) - { - if (bOnlyAdvanceComplete) - break; - } - else - { - if (BytesRead == DataBufLength) - break; - } - offset += len; - } - - if (!bOnlyAdvance && BytesRead != DataBufLength) - { - RT_TRACE(COMP_CCX, DBG_LOUD, ("AdvanceAndGetDataByOffset(): some data can not be retrived\n")); - bResult = FALSE; - } - - if (bResult && !bNoAdvance) - { - pToken->currBufferIndex = tmpIndex; - pToken->currBufferOffset = tmpOffset; - } - - return bResult; -} - - -//============================================================================= -// End of Private utility function. -//============================================================================= - - - - -//============================================================================= -// Public parser interface. -//============================================================================= - -// -// Description: -// Use high performance parser. -// 2007.07.12, by shien chang. -// -VOID -GPUseHPParser( - IN PGENERIC_PARSER pParser - ) -{ - PGP_HP_ENTRY pEntry, pTmpEntry; - PGP_HP_NODE pNode; - PGP_RULE pRuleSet[2]; - PGP_RULE pRule; - u4Byte i, j; - u4Byte entryIndex = 0; - u4Byte nodeIndex = 0; - u4Byte currNode=0, nextNode=0; - PRT_LIST_ENTRY pListEntry; - - if (pParser->pParsingTree == NULL) - { - pParser->bUseHP = FALSE; - return; - } - - pRuleSet[0] = GPGlobalRule; - pRuleSet[1] = pParser->pParseRules; - - for (i = 0; i < 2; i ++) - { - for (pRule = pRuleSet[i]; - (pRule != NULL) && (pRule->CurrProtocol != 0); - pRule ++) - { - for (j = 0; j < nodeIndex; j ++) - { - pNode = GP_HP_GET_NODE_BY_INDEX(pParser->pParsingTree, j); - if (pNode->ProtocolId == pRule->CurrProtocol) - { - currNode = j; - break; - } - } - if (j == nodeIndex) - { - currNode = nodeIndex; - pNode = GP_HP_GET_NODE_BY_INDEX(pParser->pParsingTree, currNode); - pNode->ProtocolId = pRule->CurrProtocol; - pNode->bUsed = TRUE; - RTInitializeListHead(&(pNode->Link)); - nodeIndex ++; - if (nodeIndex == MAX_HP_PROTOCOL_PER_PARSER) - { - pParser->bUseHP = FALSE; - return; - } - } - - for (j = 0; j < nodeIndex; j ++) - { - pNode = GP_HP_GET_NODE_BY_INDEX(pParser->pParsingTree, j); - if (pNode->ProtocolId == pRule->NextProtocol) - { - nextNode = j; - break; - } - } - if (j == nodeIndex) - { - nextNode = nodeIndex; - pNode = GP_HP_GET_NODE_BY_INDEX(pParser->pParsingTree, nextNode); - pNode->ProtocolId = pRule->NextProtocol; - pNode->bUsed = TRUE; - RTInitializeListHead(&(pNode->Link)); - nodeIndex++; - if (nodeIndex == MAX_HP_PROTOCOL_PER_PARSER) - { - pParser->bUseHP = FALSE; - return; - } - } - - pEntry = GP_HP_GET_ENTRY_BY_INDEX(pParser->pParsingTree, entryIndex); - pNode = GP_HP_GET_NODE_BY_INDEX(pParser->pParsingTree, currNode); - - // Check overwrite. - for (pListEntry = (&pNode->Link)->Flink; - pListEntry != &pNode->Link; - pListEntry = pListEntry->Flink) - { - pTmpEntry = (PGP_HP_ENTRY)pListEntry; - if ( (pTmpEntry->pRule->CurrProtocol == pRule->CurrProtocol) && - (pTmpEntry->pRule->NextProtocol == pRule->NextProtocol) ) - { - RTRemoveEntryList(pListEntry); - break; - } - } - - pEntry->pRule = pRule; - pEntry->index = (u1Byte)nextNode; - RTInsertTailList(&(pNode->Link), &(pEntry->Link)); - entryIndex++; - if (entryIndex == MAX_HP_RULES_PER_PARSER) - { - pParser->bUseHP = FALSE; - return; - } - - } - } - - pParser->bUseHP = TRUE; -} - -// -// Description: -// This routine parse ethernet header. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserHandlerEthernet( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u2Byte typeLength; - BOOLEAN bResult = FALSE; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - if (pSigBuffer == NULL) return FALSE; - - typeLength = N2H2BYTE( *((UNALIGNED pu2Byte)pSigBuffer) ); - - switch (NextProtocol) - { - case PROTO_IP: - if (typeLength == 0x0800) - { - *AdvBytes = PROTO_ETHERNET_HDRLEN; - bResult = TRUE; - } - break; - - default: - break; - } - - return bResult; -} - -// -// Description: -// This routine parse 802.11 wlan header. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserHandlerWlan( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte QosCtrlLen = 0; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - if (pSigBuffer == NULL) - return FALSE; - - if ( IsDataFrame(pSigBuffer) ) - { - if( IsQoSDataFrame( pToken->BufferList[0].VirtualAddress ) ) - { - QosCtrlLen = sQoSCtlLng; - } - - *AdvBytes = sMacHdrLng+QosCtrlLen+pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - return TRUE; - } - - return FALSE; -} - -// -// Description: -// This routine parse 802.11 wlan LLC header. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserHandlerWlanLlc( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u2Byte typeLength; - BOOLEAN bResult = FALSE; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - if (pSigBuffer == NULL) - return FALSE; - typeLength = N2H2BYTE( *((UNALIGNED pu2Byte)pSigBuffer) ); - - switch (NextProtocol) - { - case PROTO_IP: - if (typeLength == 0x0800) - { - *AdvBytes = PROTO_WLAN_LLC_HDRLEN; - bResult = TRUE; - } - break; - - default: - break; - } - - return bResult; -} - -// -// Description: -// This routine parse ip header. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserHandlerIP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u1Byte type = *pSigBuffer; - BOOLEAN bResult = FALSE; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - if (pSigBuffer == NULL) - return FALSE; - - switch (NextProtocol) - { - case PROTO_TCP: - if (type == 0x06) - { - *AdvBytes = PROTO_IP_HDRLEN; - bResult = TRUE; - } - break; - - case PROTO_UDP: - if (type == 0x11) - { - *AdvBytes = PROTO_IP_HDRLEN; - bResult = TRUE; - } - break; - - default: - break; - } - - return bResult; -} - -// -// Description: -// Allocate a parser and associate the parser with a gate -// routine which checks parsing criteria and a action routine -// which decides how to handle the parsed packet. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPAllocateParser( - IN PADAPTER Adapter, - IN u1Byte Pid, - IN const char* strParserName, - IN ifAllocateParser AllocateRoutine, - IN GPParserGate ParserGateRoutine, - IN GPParserAction ParserActionRoutine, - IN BOOLEAN bUseHP - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - RT_STATUS Status; - u4Byte i; - BOOLEAN bFound = FALSE; - PGENERIC_PARSER pParser; - - // - // Allocate global data structure first. - // - if (pMgntInfo->pGenericParser == NULL) - { - Status = PlatformAllocateMemory( - Adapter, - &(pMgntInfo->pGenericParser), - sizeof(PGENERIC_PARSER) * MAX_PARSER_NUM); - if (Status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_CCX, DBG_SERIOUS, ("GPAllocateParser(): Failed to allocate parsers\n")); - return FALSE; - } - - PlatformZeroMemory(pMgntInfo->pGenericParser, - sizeof(PGENERIC_PARSER) * MAX_PARSER_NUM); - } - - // - // Try to allocate parser. - // - for (i = 0; i < MAX_PARSER_NUM; i ++) - { - if ( *(((PGENERIC_PARSER*)pMgntInfo->pGenericParser) + i) == NULL) - { - // - // Allocate parser - // - Status = PlatformAllocateMemory( - Adapter, - (PVOID*)&pParser, - sizeof(GENERIC_PARSER)); - if (Status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_CCX, DBG_SERIOUS, ("GPAllocateParser(): Failed to allocate parser\n")); - return FALSE; - } - - PlatformZeroMemory(pParser, sizeof(GENERIC_PARSER)); - - pParser->PID = Pid; - PlatformZeroMemory(pParser->ParserName, MAX_PARSER_NAME); - if (strParserName) - { - ASCII_STR_COPY(pParser->ParserName, strParserName, MAX_PARSER_NAME); - } - pParser->Gate = ParserGateRoutine; - pParser->Action = ParserActionRoutine; - pParser->bUseHP = bUseHP; - - if (bUseHP) - { - // - // Allocate HP rule structure. - // - Status = PlatformAllocateMemory( - Adapter, - (PVOID*)&pParser->pParsingTree, - MAX_HP_PROTOCOL_PER_PARSER * sizeof(GP_HP_NODE) + - MAX_HP_RULES_PER_PARSER * sizeof(GP_HP_ENTRY)); - if (Status != RT_STATUS_SUCCESS) - { - pParser->pParsingTree = NULL; - } - - PlatformZeroMemory(pParser->pParsingTree, - MAX_HP_PROTOCOL_PER_PARSER * sizeof(GP_HP_NODE) + - MAX_HP_RULES_PER_PARSER * sizeof(GP_HP_ENTRY)); - } - else - { - pParser->pParsingTree = NULL; - } - - // - // Allocate specific data. - // - if (AllocateRoutine) - { - if (! AllocateRoutine(Adapter, pParser)) - { - GPFreeParser(Adapter, Pid, NULL); - return FALSE; - } - } - - *(((PGENERIC_PARSER*)pMgntInfo->pGenericParser) + i) = pParser; - - bFound = TRUE; - break; - } - } - - return bFound; -} - -// -// Description: -// Deallocate parser allocated at GPAllocateParser. -// 2007.07.10, by shien chang. -// -VOID -GPFreeParser( - IN PADAPTER Adapter, - IN u1Byte Pid, - IN ifFreeParser FreeRoutine - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN bClear = TRUE; - u4Byte i; - PGENERIC_PARSER pParser; - - if (pMgntInfo->pGenericParser == NULL) - return; - - // - // Try to free parser. - // - for (i = 0; i < MAX_PARSER_NUM; i++) - { - pParser = *(((PGENERIC_PARSER*)pMgntInfo->pGenericParser) + i); - if (pParser) - { - if (pParser->PID == Pid) - { - if (FreeRoutine) - FreeRoutine(Adapter, pParser); - - if (pParser->pParsingTree) - { - PlatformFreeMemory( - pParser->pParsingTree, - MAX_HP_PROTOCOL_PER_PARSER * sizeof(GP_HP_NODE) + - MAX_HP_RULES_PER_PARSER * sizeof(GP_HP_ENTRY)); - } - - PlatformFreeMemory(pParser, sizeof(GENERIC_PARSER)); - - *(((PGENERIC_PARSER*)pMgntInfo->pGenericParser)+i) = NULL; - break; - } - } - } - - // - // Free all pointer if no parser. - // - for (i=0; i < MAX_PARSER_NUM; i++) - { - pParser = *(((PGENERIC_PARSER*)pMgntInfo->pGenericParser) + i); - if (pParser) - { - bClear = FALSE; - break; - } - } - - if (bClear) - { - PlatformFreeMemory(pMgntInfo->pGenericParser, - sizeof(PGENERIC_PARSER) * MAX_PARSER_NUM); - } -} - - - -// -// Description: -// Parse Tx packet which started as InitProtocol. -// 2007.07.10, by shien chang. -// -TR_ACTION -GPParseTCB( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN PROTO_ID InitProtocol - ) -{ - GPPARSE_TOKEN token; - PGPPARSE_TOKEN pToken = &token; - - PlatformZeroMemory(pToken, sizeof(GPPARSE_TOKEN)); - - PlatformMoveMemory(pToken->BufferList, - pTcb->BufferList, - sizeof(SHARED_MEMORY) * MAX_PER_PACKET_BUFFER_LIST_LENGTH); - pToken->BufferCount = pTcb->BufferCount; - pToken->currBufferIndex = 0; - pToken->currBufferOffset = 0; - pToken->currProtocol = InitProtocol; - pToken->pDataObj = pTcb; - pToken->gpFlag = GPFLAG_TX; - - return ParseBuffer(Adapter, pToken); - -} - -// -// Description: -// Parse Rx packet which started as InitProtocol. -// 2007.07.10, by shien chang. -// -TR_ACTION -GPParseRFD( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN PROTO_ID InitProtocol - ) -{ - GPPARSE_TOKEN token; - PGPPARSE_TOKEN pToken = &token; - - PlatformZeroMemory(pToken, sizeof(GPPARSE_TOKEN)); - - pToken->BufferList[0].VirtualAddress = pRfd->Buffer.VirtualAddress + pRfd->FragOffset; - pToken->BufferList[0].Length = pRfd->FragLength; - pToken->BufferCount = 1; - pToken->currBufferIndex = 0; - pToken->currBufferOffset = 0; - pToken->currProtocol = InitProtocol; - pToken->pDataObj = pRfd; - pToken->gpFlag = GPFLAG_RX; - - return ParseBuffer(Adapter, pToken); - -} - - -//============================================================================= -// End of Public parser interface. -//============================================================================= - -//============================================================================= -// Custom parser routines. -//============================================================================= - -// -// Description: -// Gate routine of VOWLAN parser. -// If return TRUE, parser rules will be driven. -// If return FALSE, parser will skip it's work. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserGateVoWlanSIP( - IN PADAPTER Adapter, - IN PVOID pParser - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - // - // Check if WMM is enabled, CCX is version 4 - // - if (pMgntInfo->mAssoc) - { - if ( (pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) || - (pMgntInfo->pStaQos->CurrentQosMode & QOS_WMMSA) ) - { - u1Byte CurrCcxVerNumber = 0; - - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - - if ( CurrCcxVerNumber >= 4 ) - { - pu1Byte param = GET_WMM_PARAM_ELE_AC_PARAM(pStaQos->WMMParamEle); - u1Byte acmVO = GET_WMM_AC_PARAM_ACM(param + AC3_VO * 4); - - if (acmVO) - return TRUE; - } - } - } - - return FALSE; -} - -// -// Description: -// Allocation routine of VOWLAN parser. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPAllocateParserVoWlanSIP( - IN PADAPTER Adapter, - IN PGENERIC_PARSER pParser - ) -{ - PGP_VOWLAN_CONTEXT pContext; - RT_STATUS Status; - - Status = PlatformAllocateMemory(Adapter, - (PVOID*)&pContext, - sizeof(GP_VOWLAN_CONTEXT)); - if (Status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_CCX, DBG_SERIOUS, ("GPAllocateParserVoWlanSIP(): Failed to allocate memory\n")); - return FALSE; - } - - PlatformZeroMemory(pContext, sizeof(GP_VOWLAN_CONTEXT)); - - GP_REGISTER_RULES(pParser, GPVoWlanSipRule); - GP_BIND_CONTEXT(pParser, pContext); - - if (pParser->pParsingTree && pParser->bUseHP) - GPUseHPParser(pParser); - - return TRUE; -} - -// -// Description: -// Deallocation routine of VOWLAN parser. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPFreeParserVoWlanSIP( - IN PADAPTER Adapter, - IN PGENERIC_PARSER pParser - ) -{ - PGP_VOWLAN_CONTEXT pContext; - - pContext = (PGP_VOWLAN_CONTEXT)GP_GET_CONTEXT(pParser); - if (pContext) - { - PlatformFreeMemory(pContext, sizeof(GP_VOWLAN_CONTEXT)); - } - - GP_UNBIND_CONTEXT(pParser); - GP_UNREGISTER_RULES(pParser); - - return TRUE; -} - -// -// Description: -// Action routine of VOWLAN parser. -// 2007.07.10, by shien chang. -// -TR_ACTION -GPParserActionVoWlanSIP( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken, - IN PVOID pParser - ) -{ - TR_ACTION trAction = TR_ACTION_CONTINUE; - //PGENERIC_PARSER pGPParser = (PGENERIC_PARSER)pParser; - //PGP_VOWLAN_CONTEXT pContext = (PGP_VOWLAN_CONTEXT)pGPParser->ParserContext; - - return trAction; -} - - -// -// Description: -// Custom routine to parse UDP to SIP. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleUDP2SIP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte line[256]; - const char* InviteSig = "INVITE sip:"; - const char* StatusSig = "SIP/2.0"; - const char* ByeSig = "BYE sip:"; - const char* NotifySig = "NOTIFY sip:"; - const char* AckSig = "ACK sip:"; - BOOLEAN bReturn = FALSE; - RT_SPINLOCK_TYPE SpinLockType; - BOOLEAN bQosData = FALSE; - BOOLEAN bRejectData = FALSE; - - RT_ASSERT( ((pToken->gpFlag == GPFLAG_TX)||(pToken->gpFlag == GPFLAG_RX)), - ("GPParserCustomHandleUDP2SIP(): Parser flag must either be GPFLAG_TX or GPFLAG_RX\n")); - - if (pToken->gpFlag == GPFLAG_TX) - SpinLockType = RT_TX_SPINLOCK; - else if (pToken->gpFlag == GPFLAG_RX) - SpinLockType = RT_RX_SPINLOCK; - else - return bReturn; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - if (!GetNextLine(pToken, TRUE, line, sizeof(line)) ) - return FALSE; - - switch (NextProtocol) - { - case PROTO_SIP_INVITE: - if (PlatformCompareMemory( - &(line[PROTO_UDP_HDRLEN]), (PVOID)InviteSig, 11) == 0) - { - RT_TRACE(COMP_CCX , DBG_LOUD, ("GPParserCustomHandleUDP2SIP(): PROTO_SIP_INVITE, pToken->gpFlag = %02X\n", pToken->gpFlag)); - CCX_GPParserCustomHandleUDP2SIP(Adapter, SpinLockType, &bQosData, &bReturn, &bRejectData); - } - break; - - case PROTO_SIP_STATUS: - if (PlatformCompareMemory( - &line[PROTO_UDP_HDRLEN], - (PVOID)StatusSig, - 7) == 0) - { - if (CCX_CAC_IsVoiceTsExist(Adapter)) - { - bQosData = TRUE; - bReturn = TRUE; - } - else if(pToken->gpFlag == GPFLAG_TX) - { // Reject the status packet responding to the in-call. - bRejectData = TRUE; - } - } - break; - - case PROTO_SIP_BYE: - if (PlatformCompareMemory( - &line[PROTO_UDP_HDRLEN], - (PVOID)ByeSig, - 8) == 0) - { - PlatformReleaseSpinLock(Adapter, SpinLockType); - RT_TRACE(COMP_CCX, DBG_LOUD, ("GPParserCustomHandleUDP2SIP(): PROTO_SIP_BYE, pToken->gpFlag = %02X\n", pToken->gpFlag)); - CCX_CAC_DelTs(Adapter); - PlatformAcquireSpinLock(Adapter, SpinLockType); - bReturn = TRUE; - } - break; - - case PROTO_SIP_NOTIFY: - if (PlatformCompareMemory( - &line[PROTO_UDP_HDRLEN], - (PVOID)NotifySig, - 11) == 0) - { - //if (CCX_CAC_IsSignalTsExist(Adapter)) - if (CCX_CAC_IsVoiceTsExist(Adapter)) - bQosData = TRUE; - bReturn = TRUE; - } - break; - - case PROTO_SIP_ACK: - if (PlatformCompareMemory( - &line[PROTO_UDP_HDRLEN], - (PVOID)AckSig, - 8) == 0) - { - //if (CCX_CAC_IsSignalTsExist(Adapter)) - if (CCX_CAC_IsVoiceTsExist(Adapter)) - bQosData = TRUE; - bReturn = TRUE; - } - break; - - default: - break; - } - - if (bQosData) - { - *AdvBytes = PROTO_UDP_HDRLEN; - if (pToken->gpFlag == GPFLAG_TX) - { - PQOS_TSTREAM pTs = NULL; - PRT_TCB pTcb = (PRT_TCB)pToken->pDataObj; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - if (pTcb) - { - pTcb->DataRate = RT_CCX_CAC_MIN_PHY_RATE(Adapter); - pTcb->TSID = 0; - pTcb->priority = 6; - SET_80211_HDR_QOS_EN(pHeader, 1); - - if (!ACTING_AS_AP(Adapter)) - { - pTs = &(pStaQos->StaTsArray[pTcb->TSID]); - if (pTs && pTs->bUsed) - { - pTcb->DataRate = QosGetNPR(Adapter, pTs); - } - } - } - } - } - else if (bRejectData) - { - PRT_TCB pTcb = (PRT_TCB)pToken->pDataObj; - if (pTcb) pTcb->TSID = SESSION_REJECT_TSID; - } - - return bReturn; -} - -// -// Description: -// Custom routine to parse SIP to SDP. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleSIP2SDP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u1Byte line[256]; - const char* AudioSig = "m=audio"; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - while (GetNextLine(pToken, FALSE, line, sizeof(line)) ) - { - if (PlatformCompareMemory(line, (PVOID)AudioSig, 7) == 0) - { - return TRUE; - } - } - - return FALSE; -} - -// -// Description: -// Custom routine to handle SIP STATUS message. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleSIPSTATUS( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u1Byte line[256]; - u1Byte callId[MAX_SESSION_ID]; - u4Byte callIdLen; - RT_SPINLOCK_TYPE SpinLockType; - - RT_ASSERT( ((pToken->gpFlag == GPFLAG_TX)||(pToken->gpFlag == GPFLAG_RX)), - ("GPParserCustomHandleUDP2SIP(): Parser flag must either be GPFLAG_TX or GPFLAG_RX\n")); - - if (pToken->gpFlag == GPFLAG_TX) - SpinLockType = RT_TX_SPINLOCK; - else if (pToken->gpFlag == GPFLAG_RX) - SpinLockType = RT_RX_SPINLOCK; - else - return FALSE; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - if (GetNextLine(pToken, TRUE, line, sizeof(line)) ) - { - // - // SIP reponse status code: - // 1XX Provisional 100 Trying - // 2XX Successful 200 OK - // 3XX Redirection 302 Moved Temporarily - // 4XX Client Error 404 Not Found - // 5XX Server Error 504 Server Time-out - // 6XX Global Failure 603 Decline - // By Bruce, 2008-03-17. - // - if ( (line[8] == '4') || (line[8] == '5' || (line[8] == '6') )) - { - if (GetCallId(pToken, FALSE, callId, &callIdLen)) - { - RemoveSession((PGP_VOWLAN_CONTEXT)pParserContext, callId, callIdLen); - } - - PlatformReleaseSpinLock(Adapter, SpinLockType); - RT_TRACE(COMP_CCX, DBG_LOUD, ("GPParserCustomHandleSIPSTATUS(): Remove Session(reason = %02X), pToken->gpFlag = %02X\n", line[8], pToken->gpFlag)); - CCX_CAC_DelTs(Adapter); - PlatformAcquireSpinLock(Adapter, SpinLockType); - - if (pToken->gpFlag == GPFLAG_TX) - { - PRT_TCB pTcb = (PRT_TCB)pToken->pDataObj; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - if (pTcb) - { - pTcb->TSID = DEFAULT_TSID; - pTcb->priority = 0; - SET_80211_HDR_QOS_EN(pHeader, 0); - } - } - } - } - - return TRUE; -} - -// -// Description: -// Get call id which is contained in SIP message. -// 2007.07.10, by shien chang. -// -BOOLEAN -GetCallId( - IN PGPPARSE_TOKEN pToken, - IN BOOLEAN bNoAdvance, - OUT pu1Byte callId, - OUT pu4Byte callIdLen - ) -{ - u1Byte buf[256]; - u4Byte i; - const char* CallSig = "Call-ID:"; - - while (GetNextLine(pToken, bNoAdvance, buf, sizeof(buf))) - { - if (PlatformCompareMemory(buf, (PVOID)CallSig, 8) == 0) - { - for (i=9; i MAX_SESSION_ID) - return; - - for (i = 0; i < MAX_SESSION; i ++) - { - if ( (pContext->Session[i].bUsed == TRUE) && - (pContext->Session[i].sessionIdLen == sessionIdLen) && - (PlatformCompareMemory( - pContext->Session[i].sessionId, - sessionId, - sessionIdLen) == 0) ) - { - RT_PRINT_STR(COMP_CCX, DBG_LOUD, "RemoveSession():\n", pContext->Session[i].sessionId, pContext->Session[i].sessionIdLen); - pContext->Session[i].bUsed = FALSE; - break; - } - } - -} - -// -// Description: -// Custom routine to handle SDP. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleSDP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u1Byte line[256]; - u2Byte port = 0; - u2Byte type = 65535; - u1Byte charTable[] = { '0','1','2','3','4','5','6','7','8','9' }; - u4Byte i,j; - u1Byte callId[MAX_SESSION_ID]; - u4Byte callIdLen; - BOOLEAN bReturn = FALSE; - u4Byte hdrLen=0; - const char* RtpSig = "RTP/AVP"; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - if (GetCallId(pToken, FALSE, callId, &callIdLen)) - { - if (!AddSession((PGP_VOWLAN_CONTEXT)pParserContext, callId, callIdLen)) - { - RT_TRACE(COMP_CCX, DBG_LOUD, ("GPParserCustomHandleUDP2SIP(): Failed to add a call\n")); - return FALSE; - } - } - else - return FALSE; - - if (GPParserCustomHandleSIP2SDP(Adapter, - pParserContext, - CurrProtocol, - NextProtocol, - pSigBuffer, - SigBufferLen, - pToken, - &hdrLen)) - { - if (!UngetLine(pToken)) - return FALSE; - } - else - return FALSE; - - if (!GetNextLine(pToken, TRUE, line, sizeof(line)) ) - return FALSE; - - // get port num - for (i = 8; i < sizeof(line); i ++) - { - for (j = 0; j < sizeof(charTable); j ++) - { - if (line[i] == charTable[j]) - break; - } - - if (j==sizeof(charTable)) - break; - - port = (port*10)+(u2Byte)j; - } - - if (port) - { - i ++; - if ((i + 7 < 256) && PlatformCompareMemory( - &(line[i]), - (PVOID)RtpSig, - 7) == 0) - { - i += 7; - while (line[i] != 0x0d) - { - i ++; - type = 65535; - - for (; i < sizeof(line); i ++) - { - for (j = 0; j < sizeof(charTable); j ++) - { - if (line[i] == charTable[j]) - break; - } - - if (j==sizeof(charTable)) - break; - - if (type==65535) - type=0; - type = (type*10) + (u2Byte)j; - } - - if (type == 0 || type == 8) - { - if (pToken->gpFlag == GPFLAG_TX) - { // Update Port Num - UpdateSessionInfo((PGP_VOWLAN_CONTEXT)pParserContext, callId, callIdLen, port, 0); - bReturn = TRUE; - } - else if (pToken->gpFlag == GPFLAG_RX) - { - // Update Port Num - UpdateSessionInfo((PGP_VOWLAN_CONTEXT)pParserContext, callId, callIdLen, 0, port); - bReturn = TRUE; - } - else - { - RT_TRACE(COMP_CCX, DBG_LOUD, ("GPParserCustomHandleSDP(): Invalid flag\n")); - } - - break; - } - } - } - } - - return bReturn; -} - -// -// Description: -// Session Management - add a new session. -// 2007.07.10, by shien chang. -// -BOOLEAN -AddSession( - IN PGP_VOWLAN_CONTEXT pContext, - IN pu1Byte sessionId, - IN u4Byte sessionIdLen - ) -{ - u4Byte i; - - if (sessionIdLen > MAX_SESSION_ID) - { - RT_TRACE(COMP_CCX, DBG_WARNING, ("AddSession(): Failed, sessionIDLen(%d) > Max(%d)\n", sessionIdLen, MAX_SESSION_ID)); - return FALSE; - } - - RT_PRINT_STR(COMP_CCX, DBG_LOUD, "AddSession():\n", sessionId, sessionIdLen); - - // - // Check if an call can be added. - // - for (i = 0; i < MAX_SESSION; i ++) - { - if (pContext->Session[i].bUsed) - { - if ( (sessionIdLen == pContext->Session[i].sessionIdLen) && - (PlatformCompareMemory(sessionId, - pContext->Session[i].sessionId, - sessionIdLen) == 0) ) - { - RT_TRACE(COMP_CCX, DBG_LOUD, ("AddSession(): This session has been existed!\n")); - return TRUE; - } - } - - if (!pContext->Session[i].bUsed) break; - } - - if (i != MAX_SESSION) - { - PlatformZeroMemory(pContext->Session[i].sessionId, MAX_SESSION_ID); - PlatformMoveMemory(pContext->Session[i].sessionId, sessionId, sessionIdLen); - pContext->Session[i].sessionIdLen = sessionIdLen; - pContext->Session[i].bUsed = TRUE; - return TRUE; - } - - RT_TRACE(COMP_CCX, DBG_WARNING, ("AddSession(): Add Session Failed SessionNum = %d > Max(%d) \n", i, MAX_SESSION)); - - return FALSE; -} - -// -// Description: -// Session Management - update a session information. -// 2007.07.10, by shien chang. -// -BOOLEAN -UpdateSessionInfo( - IN PGP_VOWLAN_CONTEXT pContext, - IN pu1Byte sessionId, - IN u4Byte sessionIdLen, - IN u2Byte srcPort, - IN u2Byte dstPort - ) -{ - u4Byte i; - - if (sessionIdLen > MAX_SESSION_ID) - return FALSE; - - for (i = 0; i < MAX_SESSION; i ++) - { - if ( (pContext->Session[i].bUsed == TRUE) && - (pContext->Session[i].sessionIdLen == sessionIdLen) && - (PlatformCompareMemory( - pContext->Session[i].sessionId, - sessionId, - sessionIdLen) == 0) ) - { - if (srcPort) - pContext->Session[i].srcPort = srcPort; - if (dstPort) - pContext->Session[i].dstPort = dstPort; - return TRUE; - } - } - - return FALSE; -} - -// -// Description: -// Session Management - match a session by port. -// 2007.07.10, by shien chang. -// -BOOLEAN -MatchSession( - IN PGP_VOWLAN_CONTEXT pContext, - IN u2Byte Port, - IN u1Byte Flag - ) -{ - u4Byte i; - - if ( (Flag != GPFLAG_TX) && (Flag != GPFLAG_RX) ) - return FALSE; - if (Port == 0) - return FALSE; - - for (i = 0; i < MAX_SESSION; i ++) - { - if (pContext->Session[i].bUsed) - { - if ( (Flag == GPFLAG_TX) && (pContext->Session[i].srcPort == Port) ) - return TRUE; - if ( (Flag == GPFLAG_RX) && (pContext->Session[i].dstPort == Port) ) - return TRUE; - } - } - - return FALSE; -} - - -// -// Description: -// Custom routine to handle SIP BYE message. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleSIPBYE( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u1Byte callId[MAX_SESSION_ID]; - u4Byte callIdLen; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - if (GetCallId(pToken, FALSE, callId, &callIdLen)) - { - RemoveSession((PGP_VOWLAN_CONTEXT)pParserContext, callId, callIdLen); - } - - return TRUE; -} - -// -// Description: -// Custom routine to parse UDP to RTP. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleUDP2RTP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u2Byte PortBuf=0; - u2Byte Port; - u4Byte offset; - BOOLEAN bReturn = FALSE; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - if ( (pToken->gpFlag == GPFLAG_TX) || (pToken->gpFlag == GPFLAG_RX) ) - { - offset = 0; - } - else - { - return FALSE; - } - - if (AdvanceAndGetDataByOffset(pToken, - offset, - TRUE, - (pu1Byte)&PortBuf, - sizeof(PortBuf)) ) - { - Port = N2H2BYTE(PortBuf); - if ( MatchSession((PGP_VOWLAN_CONTEXT)pParserContext, Port, pToken->gpFlag) ) - { - *AdvBytes = PROTO_UDP_HDRLEN; - bReturn = TRUE; - } - } - - return bReturn; -} - -// -// Description: -// Custom routine to parse RTP to G.711. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleRTP2G711( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - u1Byte type; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - - if (AdvanceAndGetDataByOffset(pToken, - 1, - TRUE, - &type, - sizeof(type)) ) - { - // - // RTP payload types: - // 0x0: PCMU(mu-law G.711) Audio Clock rate = 8000 - // 0x08: PCMA(A-law G.711) Audio Clock rate = 8000 - // By Bruce, 2008-03-18. - // - if (type==0x00 || type==0x08) - return TRUE; - } - - return FALSE; -} - -// -// Description: -// Custom routine to handle G.711 packet. -// 2007.07.10, by shien chang. -// -BOOLEAN -GPParserCustomHandleG711( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs = NULL; - - *AdvBytes = PROTO_UNKNOWN_HDRLEN; - if (pToken->gpFlag == GPFLAG_TX) - { - PRT_TCB pTcb = (PRT_TCB)pToken->pDataObj; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - if (pTcb) - { - pTcb->DataRate = RT_CCX_CAC_MIN_PHY_RATE(Adapter); - pTcb->TSID = 0; - pTcb->priority = 6; - SET_80211_HDR_QOS_EN(pHeader, 1); - - if (!ACTING_AS_AP(Adapter)) - { - pTs = &(pStaQos->StaTsArray[pTcb->TSID]); - if (pTs && pTs->bUsed) - { - pTcb->DataRate = QosGetNPR(Adapter, pTs); - } - } - } - } - return TRUE; -} - -// -// Must call After TranslateHandleRxDot11FrameHeader -// Note : No Qos , IV , HTC 802.11 frame !! -// And Data frame !! -// - -BOOLEAN -GPGetParseRFDInfo( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN PRX_FILTER_INFO pRxfiterInfo - ) -{ - /* - typedef struct _RX_FILTER_INFO{ - // MAC - pu1Byte pDA; - pu1Byte pSA; - u1Byte PacketType; // RX_PACKET_TYPE - pu1Byte pEtherType; // 2 bytes : IPv4 , IPv6 , ARP ... - // IP - u1Byte ARPOption; // Request or Response - pu1Byte ARPSPA; // ARP Sender IP - pu1Byte ARPTPA; // ARP Target IP - u1Byte Protocol; // UDP : 0x11 , TCP : 0x06 - //UDP - pu1Byte pDestinationPort; // 2 bytes - }RX_FILTER_INFO,*PRX_FILTER_INFO; - */ - OCTET_STRING frame; - //PRX_FILTER_INFO pRxfiterInfo = &(pRfd->D0FilterCoalPktInfo); - pu1Byte pCurrentbuf; - u1Byte ArpType[2] = {0x08 ,0x06}; - u1Byte IPv4Type[2] = {0x08 ,0x00}; - u1Byte IPv6Type[2] = {0x86 ,0xdd}; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress+PLATFORM_GET_FRAGOFFSET(pRfd), pRfd->PacketLength); - - PlatformZeroMemory(pRxfiterInfo, sizeof(RX_FILTER_INFO)); - - // Just for Data packet !! - if(!IsDataFrame(frame.Octet)) - { - pRxfiterInfo->PacketType = RXPacketTypeUndefined; - return FALSE; - } - - // MAC !! - pRxfiterInfo->pDA = Frame_pDaddr(frame); - pRxfiterInfo->pSA = Frame_pSaddr(frame); - - if( MacAddr_isBcst(pRxfiterInfo->pDA)) - { - pRxfiterInfo->PacketType = RXPacketTypeBroadcast; - } - else if( MacAddr_isMulticast(pRxfiterInfo->pDA) ) - { - pRxfiterInfo->PacketType = RXPacketTypeMulticast; - } - else - { - pRxfiterInfo->PacketType = RXPacketTypeUnicast; - return TRUE; - } - /* - if( Frame_ValidAddr4(frame) ) - { - offset += 6; May no Address4 frame !! - } - */ - - //RT_PRINT_DATA(COMP_TEST, DBG_LOUD, "===> GPGetParseRFDInfo:\n", frame.Octet, frame.Length); - pRxfiterInfo->pEtherType = frame.Octet + sMacHdrLng + LLC_HEADER_SIZE; - - pCurrentbuf = frame.Octet + sMacHdrLng + LLC_HEADER_SIZE + TYPE_LENGTH_FIELD_SIZE; - - // IP !! - if( PlatformCompareMemory(pRxfiterInfo->pEtherType , ArpType, 2) == 0) - { - // ARP - pRxfiterInfo->ARPOption = pCurrentbuf + 6; - pRxfiterInfo->ARPSPA = pCurrentbuf + 6 + 2 + 6; // 6 Option offset , 2 Option Len , 6 SPA Mac Len - pRxfiterInfo->ARPTPA = pCurrentbuf + 6 + 2 + 6 + 4 + 6 ; // // 6 Option offset , 2 Option Len , 6 SPA Mac Len , 4 SPA len , 6 TPA Mac Len - } - else if(PlatformCompareMemory(pRxfiterInfo->pEtherType , IPv4Type, 2) == 0) - { - pRxfiterInfo->Protocol = pCurrentbuf[9]; - // UDP !! - if(pRxfiterInfo->Protocol == 0x11) - { - u1Byte IPv4len = (pCurrentbuf[0]&0x0f) * 4; - pRxfiterInfo->pDestinationPort = pCurrentbuf + IPv4len + 2; // (pCurrentbuf[0]>>4) IPv4 Heard len 2 Source Port - //RT_PRINT_DATA(COMP_TEST, DBG_LOUD, "IPV4 pRxfiterInfo->pDestinationPort :\n", pRxfiterInfo->pDestinationPort, 2); - } - //RT_TRACE(COMP_TEST, DBG_LOUD , ("===> pRfd nTotalSubframe (%d) \n" , pRfd->nTotalSubframe) ); - } - else if(PlatformCompareMemory(pRxfiterInfo->pEtherType , IPv6Type, 2) == 0) - { - - pRxfiterInfo->Protocol = pCurrentbuf[6]; - // UDP !! - if(pRxfiterInfo->Protocol == 0x11) - { - pRxfiterInfo->pDestinationPort = pCurrentbuf + 40 + 2; // 40 IPv6 Len , 2 Source Port - //RT_PRINT_DATA(COMP_TEST, DBG_LOUD, "IPV6 pRxfiterInfo->pDestinationPort :\n", pRxfiterInfo->pDestinationPort, 2); - } - //RT_TRACE(COMP_TEST, DBG_LOUD , ("===> pRfd nTotalSubframe (%d) \n" , pRfd->nTotalSubframe) ); - } - - - return TRUE; - -} - - -//============================================================================= -// End of Custom parser routines. -//============================================================================= - diff --git a/network/wlan/WDI/COMMON/ParserGen.h b/network/wlan/WDI/COMMON/ParserGen.h deleted file mode 100644 index c956945e..00000000 --- a/network/wlan/WDI/COMMON/ParserGen.h +++ /dev/null @@ -1,540 +0,0 @@ -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - ParserGen.h - -Abstract: - Parse MSDU to match the specified type, fetch fixed offset. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2007-06-11 shienchang Create. - 2008-03-10 Bruce Modify from 818xB. - ---*/ -#ifndef __INC_PARSERGEN_H -#define __INC_PARSERGEN_H -///////////////////////////////////////////////////////// -// Global defines -///////////////////////////////////////////////////////// - -// -// Protocol identity define. -// Add your own id here if new parser need. -// -#define PROTO_UNKNOWN 0 -#define PROTO_ETHERNET 1 -#define PROTO_WLAN_80211 2 -#define PROTO_WLAN_LLC 3 -#define PROTO_IP 4 -#define PROTO_TCP 5 -#define PROTO_UDP 6 -#define PROTO_RTP 7 -#define PROTO_SIP_INVITE 8 -#define PROTO_SIP_STATUS 9 -#define PROTO_SIP_BYE 10 -#define PROTO_SIP_NOTIFY 11 -#define PROTO_SIP_ACK 12 -#define PROTO_SIP_SDP 13 -#define PROTO_RTP_G711 14 - -// -// Protocol fixed header length -// -#define PROTO_UNKNOWN_HDRLEN 0 -#define PROTO_ETHERNET_HDRLEN (12+2) -#define PROTO_WLAN_LLC_HDRLEN (6+2) -#define PROTO_IP_HDRLEN 20 -#define PROTO_UDP_HDRLEN 8 - -// Flag defines. -#define GPFLAG_TX 1 -#define GPFLAG_RX 2 - - -// Basic parse block -#define MAX_PROTOCOL_NUM 32 - -// -// Main generic parser defines. -// -#define MAX_PARSER_NUM 16 -#define MAX_PARSER_NAME 32 -#define MAX_SIG_LENGTH 32 - -#define MAX_HP_PROTOCOL_PER_PARSER 32 -#define MAX_HP_RULES_PER_PARSER 64 - -//////////////////////////////////////////////////////// -// Macro Definition -//////////////////////////////////////////////////////// - -#define GP_REGISTER_RULES(_parser, _rules) \ - (_parser)->pParseRules = (_rules) - -#define GP_UNREGISTER_RULES(_parser) \ - (_parser)->pParseRules = NULL - -#define GP_GET_CONTEXT(_parser) \ - (_parser)->ParserContext - -#define GP_HP_GET_NODE_START(_pTree) \ - (_pTree) - -#define GP_HP_GET_ENTRY_START(_pTree) \ - ((_pTree) + MAX_HP_PROTOCOL_PER_PARSER) - -#define GP_BIND_CONTEXT(_parser, _context) \ - (_parser)->ParserContext = (_context) - -#define GP_UNBIND_CONTEXT(_parser) \ - (_parser)->ParserContext = NULL - -#define GP_HP_GET_NODE_BY_INDEX(_pTree, _idx) \ - ((PGP_HP_NODE)GP_HP_GET_NODE_START(_pTree)) + (_idx) - -#define GP_HP_GET_ENTRY_BY_INDEX(_pTree, _idx) \ - ((PGP_HP_ENTRY)GP_HP_GET_ENTRY_START(_pTree)) + (_idx) - - -typedef u4Byte PROTO_ID, *PPROTO_ID; - -typedef struct _GPPARSE_TOKEN -{ - SHARED_MEMORY BufferList[MAX_PER_PACKET_BUFFER_LIST_LENGTH]; - u4Byte BufferCount; - u4Byte currBufferIndex; - u4Byte currBufferOffset; - PROTO_ID currProtocol; - PROTO_ID ProtocolSuite[MAX_PROTOCOL_NUM]; - u1Byte ProtocolCount; - PVOID pDataObj; - u1Byte gpFlag; -} GPPARSE_TOKEN, *PGPPARSE_TOKEN; - - -// For TCB/RFD action, 2007.06.21 by shien chang. -typedef enum{ - TR_ACTION_CONTINUE = 0, - TR_ACTION_HANDLED = 1, - TR_ACTION_DROPPED = 2, -}TR_ACTION; - -typedef BOOLEAN - (*GPParseHandler)( - IN PADAPTER Adapter, - IN PVOID pParseContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - - -typedef struct _GP_RULE -{ - u4Byte CurrProtocol; - u4Byte NextProtocol; - u4Byte SigStart; - u4Byte SigLength; - GPParseHandler ParseHandler; -} GP_RULE, *PGP_RULE; - -typedef BOOLEAN - (*GPParserGate)( - IN PADAPTER Adapter, - IN PVOID pParser - ); - -typedef TR_ACTION - (*GPParserAction)( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken, - IN PVOID pParser - ); - -typedef struct _GP_HP_ENTRY -{ - RT_LIST_ENTRY Link; - PGP_RULE pRule; - u1Byte index; -} GP_HP_ENTRY, *PGP_HP_ENTRY; - - -typedef struct _GP_HP_NODE -{ - RT_LIST_ENTRY Link; - PROTO_ID ProtocolId; - BOOLEAN bUsed; -} GP_HP_NODE, *PGP_HP_NODE; - - -// -// Description: -// PID: -// This generic parser identifier. -// ParserName: -// The name of this generic parser. -// ParserRules: -// The corrresponding handler and the next protocol to the current protocol. -// ParserContext: -// The input context about for this parser. -// Gate: -// A routine to determine if this parser should go parsing it or not. -// Action: -// An action routine to handle parserd packet. -// pParsingTree: -// -// bUseHP: -// Use high performance parser. -// By Bruce, 2008-03-11. -// -typedef struct _GENERIC_PARSER -{ - u1Byte PID; - u1Byte ParserName[MAX_PARSER_NAME]; - PGP_RULE pParseRules; - PVOID ParserContext; - GPParserGate Gate; - GPParserAction Action; - PGP_HP_NODE pParsingTree; - BOOLEAN bUseHP; -} GENERIC_PARSER, *PGENERIC_PARSER; - -// -// Interface. -// -typedef BOOLEAN - (*ifAllocateParser)( - IN PADAPTER Adapter, - IN PGENERIC_PARSER pParser - ); - -typedef BOOLEAN - (*ifFreeParser)( - IN PADAPTER Adapter, - IN PGENERIC_PARSER pParser - ); - - - -//============================================================================= -// Prototype of public function in ParserGen.c. -//============================================================================= - -// -// Parser routines. -// -#if DBG -VOID -DbgProtocol( - IN u4Byte protocol - ); -#else - #define DbgProtocol(_p) -#endif - - -VOID -GPUseHPParser( - IN PGENERIC_PARSER pParser - ); - -BOOLEAN -GPParserHandlerEthernet( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserHandlerWlan( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserHandlerWlanLlc( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserHandlerIP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPAllocateParser( - IN PADAPTER Adapter, - IN u1Byte Pid, - IN const char* strParserName, - IN ifAllocateParser AllocateRoutine, - IN GPParserGate ParserGateRoutine, - IN GPParserAction ParserActionRoutine, - IN BOOLEAN bUseHP - ); - -VOID -GPFreeParser( - IN PADAPTER Adapter, - IN u1Byte Pid, - IN ifFreeParser FreeRoutine - ); - - -TR_ACTION -GPParseTCB( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN PROTO_ID InitProtocol - ); - -TR_ACTION -GPParseRFD( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN PROTO_ID InitProtocol - ); - - - - - -//============================================================================= -// End of Prototype of public function in ParserGen.c. -//============================================================================= - -//============================================================================= -// Customized parser section of GP_VOWLAN_SIP. -//============================================================================= - -// -// Custom parser defines. -// -#define GP_VOWLAN_SIP 1 // The SIP Custom ID - -#define MAX_SESSION 16 -#define MAX_SESSION_ID 80 - -// Signature start. -#define UNKNOWN_SIG 0 - -typedef struct _SESSION -{ - u2Byte srcPort; - u2Byte dstPort; - u1Byte sessionId[MAX_SESSION_ID]; - u4Byte sessionIdLen; - BOOLEAN bUsed; -} SESSION, *PSESSION; - -typedef struct _GP_VOWLAN_CONTEXT -{ - SESSION Session[MAX_SESSION]; -} GP_VOWLAN_CONTEXT, *PGP_VOWLAN_CONTEXT; - -BOOLEAN -GPParserGateVoWlanSIP( - IN PADAPTER Adapter, - IN PVOID pParser - ); - -TR_ACTION -GPParserActionVoWlanSIP( - IN PADAPTER Adapter, - IN PGPPARSE_TOKEN pToken, - IN PVOID pParser - ); - -BOOLEAN -GPAllocateParserVoWlanSIP( - IN PADAPTER Adapter, - IN PGENERIC_PARSER pParser - ); - - -BOOLEAN -GPFreeParserVoWlanSIP( - IN PADAPTER Adapter, - IN PGENERIC_PARSER pParser - ); - -BOOLEAN -GPParserCustomHandleUDP2SIP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserCustomHandleSIP2SDP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserCustomHandleSIPSTATUS( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GetCallId( - IN PGPPARSE_TOKEN pToken, - IN BOOLEAN bNoAdvance, - OUT pu1Byte callId, - OUT pu4Byte callIdLen - ); - -BOOLEAN -AddSession( - IN PGP_VOWLAN_CONTEXT pContext, - IN pu1Byte sessionId, - IN u4Byte sessionIdLen - ); - - -VOID -RemoveSession( - IN PGP_VOWLAN_CONTEXT pContext, - IN pu1Byte sessionId, - IN u4Byte sessionIdLen - ); - -BOOLEAN -UpdateSessionInfo( - IN PGP_VOWLAN_CONTEXT pContext, - IN pu1Byte sessionId, - IN u4Byte sessionIdLen, - IN u2Byte srcPort, - IN u2Byte dstPort - ); - -BOOLEAN -MatchSession( - IN PGP_VOWLAN_CONTEXT pContext, - IN u2Byte Port, - IN u1Byte Flag - ); - -BOOLEAN -GPParserCustomHandleSDP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserCustomHandleSIPBYE( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserCustomHandleUDP2RTP( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserCustomHandleRTP2G711( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPParserCustomHandleG711( - IN PADAPTER Adapter, - IN PVOID pParserContext, - IN PROTO_ID CurrProtocol, - IN PROTO_ID NextProtocol, - OUT pu1Byte pSigBuffer, - IN u4Byte SigBufferLen, - IN PGPPARSE_TOKEN pToken, - OUT pu4Byte AdvBytes - ); - -BOOLEAN -GPGetParseRFDInfo( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN PRX_FILTER_INFO pRxfiterInfo - ); - - -//============================================================================= -// End of Customized parser section of GP_VOWLAN_SIP. -//============================================================================= - - -#endif // end of __INC_PARSERGEN_H - diff --git a/network/wlan/WDI/COMMON/PowerSave.h b/network/wlan/WDI/COMMON/PowerSave.h deleted file mode 100644 index aa10b31b..00000000 --- a/network/wlan/WDI/COMMON/PowerSave.h +++ /dev/null @@ -1,322 +0,0 @@ -#ifndef __INC_POWERSAVE_H -#define __INC_POWERSAVE_H - -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - HalUsb.h - -Abstract: - Prototype of HalUsbXXX() and related data structure. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2006-11-06 Rcnjko Create. - ---*/ - - -//================================================================================ -// Helper macros. -//================================================================================ -#define IN_LEGACY_POWER_SAVE(__pStaQos) (((__pStaQos)->Curr4acUapsd & 0x0f) == 0) -#define GET_POWER_SAVE_CONTROL(_pMgntInfo) ((PRT_POWER_SAVE_CONTROL)(&((_pMgntInfo)->PowerSaveControl))) -// -// Get Wifi Mode Power Save, if it is true, follow PS-POLL or WMM APSD specification. Or use NULL-frame to -// implement power save mode. By Bruce, 2008-09-17. -// -#define IS_WIFI_POWER_SAVE(_pMgntInfo) \ - ((_pMgntInfo)->dot11PowerSaveMode != eActive && (_pMgntInfo)->PsPollType != 2 &&\ - ((_pMgntInfo)->bWiFiConfg || (_pMgntInfo)->PsPollType == 1 || \ - !((_pMgntInfo)->IOTAction & HT_IOT_ACT_NULL_DATA_POWER_SAVING))) - -#define IS_FW_POWER_SAVE(_pMgntInfo) \ - ((_pMgntInfo)->dot11PowerSaveMode != eActive && GET_POWER_SAVE_CONTROL(_pMgntInfo)->bFwCtrlLPS) - - -#define RT_SET_PS_LEVEL(_pAdapter, _PS_FLAG) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel |= _PS_FLAG) -#define RT_CLEAR_PS_LEVEL(_pAdapter, _PS_FLAG) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel &= (~(_PS_FLAG))) -#define RT_GET_CUR_PS_LEVEL(_pAdapter) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel) -#define RT_IN_PS_LEVEL(_pAdapter, _PS_FLAG) ((RT_GET_CUR_PS_LEVEL(_pAdapter) & _PS_FLAG) ? TRUE : FALSE) - -// -// Currently we only take PCIe interface into consideration for RTD3 function. -// 2013.02.08. -// - - #define IS_RTD3_SUPPORT(_pAdapter) FALSE - #define RTD3_GET_DEV_PWR_STATE PowerDeviceD0 - -// Currently we support the machanism on 8723BS A to D-cut for Intel Baytrail-CR old BIOS behavior. -// 2014.04.09 by tynli. -#define IS_CARD_DISABLE_IN_FW_LOW_PWR_STATE(_pAdapter) \ - (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CardDisableInLowClk && IS_VENDOR_8723B_D_CUT_BEFORE(_pAdapter)) - -// -// Only allow enter WoWLAN mode in infrastructure mode or no link. Do not support WoWLAN if adapter is -// operating in AP or IBSS mode. -// -#define IS_WOWLAN_OPERATING_MODE(_pMgntInfo) \ - ((_pMgntInfo)->OpMode == RT_OP_MODE_INFRASTRUCTURE || \ - (_pMgntInfo)->OpMode == RT_OP_MODE_NO_LINK) - - -#define IPS_DISABLE_DEF_OPMODE BIT0 // Disable IPS by default port OpMode (IBSS, AP) -#define IPS_DISABLE_EXT_OPMODE BIT1 // Disable IPS by Extension port OpMode (VWifi) -#define IPS_DISABLE_PROXIMITY BIT2 // Disable IPS by PROXIMITY Mode -#define IPS_DISABLE_BT_ON BIT3 // Disable IPS by BT3.0+HS -#define IPS_DISABLE_BY_OID BIT4 - - -#define LPS_DISABLE_AP_MODE BIT0 -#define LPS_DISABLE_BT_HS_CONNECTION BIT1 -#define LPS_DISABLE_TURN_OFF_ADAPTER BIT2 -#define LPS_DISABLE_UPDATE_LPS_STATUS_HNDR BIT3 -#define LPS_DISABLE_DEBUG_CONTROL BIT4 -#define LPS_DISABLE_INTEL_PROX_MODE BIT5 -#define LPS_DISABLE_SET_DISASSOCIATE BIT6 -#define LPS_DISABLE_SET_DEAUTH BIT7 -#define LPS_DISABLE_ON_DISASSOC BIT8 -#define LPS_DISABLE_ON_DEAUTH BIT9 -#define LPS_DISABLE_MGNT_DISCONNECT BIT10 -#define LPS_DISABLE_MGNT_INDI_DISCONNECT BIT11 -#define LPS_DISABLE_JOIN_REQ BIT12 -#define LPS_DISABLE_LINK_REQ BIT13 -#define LPS_DISABLE_FOR_ROAMING BIT14 -#define LPS_DISABLE_WATCH_DOG_BUSY_TRAFFIC BIT15 -#define LPS_DISABLE_WATCH_DOG_MEDIA_DISCONNEC BIT16 -#define LPS_DISABLE_OID_SET BIT17 -#define LPS_DISABLE_LEAVE_ALL_PS BIT18 -#define LPS_DISABLE_LEAVE_CHK_RDY BIT19 -#define LPS_DISABLE_RX_DETECT_BUSY BIT20 -#define LPS_DISABLE_TX_EAPOL_PKT BIT21 -#define LPS_DISABLE_TX_DHCP_PKT BIT22 -#define LPS_DISABLE_TX_ARP_PKT BIT23 -#define LPS_DISABLE_TX_SPECIAL_PKT BIT24 -#define LPS_DISABLE_TX_DETECT_BUSY BIT25 -#define LPS_DISABLE_BT_COEX BIT26 -#define LPS_DISABLE_DEVICE_DISCOVERY BIT27 -//================================================================================ -// Variable Definition. -//================================================================================ -typedef enum _POWER_LEVEL_CONFIG -{ - POWER_SAVING_NO_POWER_SAVING, // Maximal Performance - POWER_SAVING_FAST_PSP, // Low Power Saving - POWER_SAVING_MAX_PSP, // Medium Power Saving - POWER_SAVING_MAXIMUM_LEVEL, // Maximal Power Saving -}POWER_LEVEL_CONFIG; - -typedef enum _POWER_SETTING_CONFIG -{ - POWERGUID_MAX_POWER_SAVINGS, // Power Saver - POWERGUID_TYPICAL_POWER_SAVINGS, // Banlanced - POWERGUID_MIN_POWER_SAVINGS, // High performance - POWERGUID_UNDEFINED, -}POWER_SETTING_CONFIG; - -typedef enum _POWER_POLICY_CONFIG -{ - POWERCFG_MAX_POWER_SAVINGS, // Enter IPS, LPS when DC mode - POWERCFG_GLOBAL_POWER_SAVINGS, // Enter IPS, LPS when DC mode and PowerSaver config. Depends on OS configuration. - POWERCFG_LOCAL_POWER_SAVINGS, // Enter IPS, LPS when DC mode and not Maximum Performance config. Depends on Wifi configuration. - POWERCFG_LENOVO, // Enter IPS, LPS when DC mode and not Maximum Performance, AC mode and Maximum Power Saving. - POWERCFG_LENOVO_JANPEN, // Enter IPS, LPS when OS config to Banlanced or PowerSave. Don't care about AC/DC mode. - POWERCFG_SAMSUNG, // Enter IPS, LPS when OS config to PowerSave. Don't care about AC/DC mode. - POWERCFG_HP, // Enter IPS, LPS when OS config to PowerSave. Don't care about AC/DC mode. -}POWER_POLICY_CONFIG; - - -//================================================================================ -// Callback routines of timers and workitems. -//================================================================================ -VOID -OnMoreData( - IN PADAPTER pAdapter - ); - -BOOLEAN -IsOurFrameBuffred( - IN OCTET_STRING Tim, - IN u2Byte AId - ); - -BOOLEAN -IsMcstFrameBuffered( - IN OCTET_STRING octetTim - ); - -VOID -DozeWorkItemCallback( - IN PVOID pContext - ); - - -VOID -AwakeTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -AwakeWorkItemCallback( - IN PVOID pContext - ); - -VOID -InactivePsWorkItemCallback( - IN PVOID pContext - ); - -VOID -InactivePsTimerCallback( - IN PRT_TIMER pTimer - ); - -//================================================================================ -// 802.11 legacy power save. -//================================================================================ -VOID -LPS_OnBeacon_BSS( - IN PADAPTER pAdapter, - IN OCTET_STRING osBeacon - ); - -VOID -LPS_DozeStart( - PADAPTER pAdapter - ); - -VOID -LPS_DozeComplete( - IN PADAPTER pAdapter - ); - -VOID -LPS_AwakeComplete( - IN PADAPTER pAdapter - ); - -BOOLEAN -LPS_OnTx( - IN PADAPTER pAdapter, - IN PRT_TCB pTcb - ); - -//================================================================================ -// WMM power save. -//================================================================================ -VOID -WMMPS_OnBeacon_BSS( - IN PADAPTER pAdapter, - IN OCTET_STRING osBeacon - ); - -VOID -WMMPS_DozeStart( - PADAPTER pAdapter - ); - -VOID -WMMPS_DozeComplete( - IN PADAPTER pAdapter - ); - -VOID -WMMPS_AwakeComplete( - IN PADAPTER pAdapter - ); - -BOOLEAN -WMMPS_OnTx( - IN PADAPTER pAdapter, - IN PRT_TCB pTcb - ); - -BOOLEAN -GetQosQueueIDMaskAPSD( - u1Byte QueueID, - AC_UAPSD APSD - ); - -BOOLEAN -GetPS_Doze( - IN PADAPTER pAdapter - ); - - - -//================================================================================ -// Inactive power save. -//================================================================================ - -VOID -IPSEnter( - IN PADAPTER pAdapter - ); - -VOID -IPSLeave( - IN PADAPTER pAdapter, - IN BOOLEAN bForceEnter - ); - -VOID -IPSEnable( - IN PADAPTER pAdapter - ); - -VOID -IPSDisable( - IN PADAPTER pAdapter, - IN BOOLEAN bForceEnter , - IN u1Byte nReason - ); - -VOID -IPSReturn( - IN PADAPTER pAdapter, - IN u1Byte nReason - ); - -//================================================================================ -// Leisure Power Save in linked state. -//================================================================================ - -VOID -LeisurePSEnter( - IN PADAPTER pAdapter - ); - -VOID -LeisurePSLeave( - IN PADAPTER pAdapter, - IN u4Byte reason - ); - -//================================================================================ -// Fw control LPS. -//================================================================================ - -BOOLEAN -GetFwLPS_Doze( - IN PADAPTER pAdapter - ); - -VOID -LeaveAllPowerSaveMode( - IN PADAPTER Adapter - ); - -BOOLEAN -LPSLeaveAndCheckReady( - IN PADAPTER Adapter - ); - -VOID -FwPsClockOnWorkitemCallback( - IN PVOID Context - ); - -#endif diff --git a/network/wlan/WDI/COMMON/Protocol802_11.c b/network/wlan/WDI/COMMON/Protocol802_11.c deleted file mode 100644 index 176c6528..00000000 --- a/network/wlan/WDI/COMMON/Protocol802_11.c +++ /dev/null @@ -1,1638 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Protocol802_11.tmh" -#endif - -static u2Byte sPacketIEOffsetTable[] = -{ - sMacHdrLng + 4, //SubType_Asoc_Req = 0, - sMacHdrLng + 6, //SubType_Asoc_Rsp = 1, - sMacHdrLng + 10, //SubType_Reasoc_Req = 2, - sMacHdrLng + 6, //SubType_Reasoc_Rsp = 3, - sMacHdrLng + 0, //SubType_Probe_Req = 4, - sMacHdrLng + 12, //SubType_Probe_Rsp = 5, - 0, // rsvd = 6, x - 0, // rsvd = 7, x - sMacHdrLng + 12, //SubType_Beacon = 8, - 0, //SubType_Atim = 9, x - 0, //SubType_Disasoc = 10, x - sMacHdrLng + 6, //SubType_Auth = 11, - 0, //SubType_Deauth = 12, x -}; - -// Pattern Array -// Qos (0x1) -u1Byte PAT_ACT_QOS_ADDTSREQ[] = {0x01, 0x00}; -u1Byte PAT_ACT_QOS_ADDTSRSP[] = {0x01, 0x01}; -u1Byte PAT_ACT_QOS_DELTS[] = {0x01, 0x02}; -u1Byte PAT_ACT_QOS_SCHEDULE[] = {0x01, 0x03}; -// DLS (0x2) -u1Byte PAT_ACT_DLS_DLSREQ[] = {0x02, 0x00}; -u1Byte PAT_ACT_DLS_DLSRSP[] = {0x02, 0x01}; -u1Byte PAT_ACT_DLS_DLSTEARDOWN[] = {0x02, 0x02}; -// BA (0x3) -u1Byte PAT_ACT_BA_ADDBAREQ[] = {0x03, 0x00}; -u1Byte PAT_ACT_BA_ADDBARSP[] = {0x03, 0x01}; -u1Byte PAT_ACT_BA_DELBA[] = {0x03, 0x02}; -// Public (0x4) -u1Byte PAT_ACT_BSS_COEXIST[] = {0x04, 0x00}; -u1Byte PAT_ACT_TDLS_DISC_RSP[] = {0x04, 0x0E}; -u1Byte PAT_ACT_P2P_GO_NEG_REQ[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x00}; // P2P GO Negotiation Request -u1Byte PAT_ACT_P2P_GO_NEG_RSP[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x01}; // P2P GO Negotiation Response -u1Byte PAT_ACT_P2P_GO_NEG_CONF[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x02}; // P2P GO Negotiation Confirm -u1Byte PAT_ACT_P2P_INVIT_REQ[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x03}; // P2P Invitation Request -u1Byte PAT_ACT_P2P_INVIT_RSP[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x04}; // P2P Invitation Response -u1Byte PAT_ACT_P2P_DEV_DISCOVERABILITY_REQ[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x05}; // P2P Device Discoverability Request -u1Byte PAT_ACT_P2P_DEV_DISCOVERABILITY_RSP[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x06}; // P2P Device Discoverability Response -u1Byte PAT_ACT_P2P_PROV_DISC_REQ[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x07}; // P2P Provision Discovery Request -u1Byte PAT_ACT_P2P_PROV_DISC_RSP[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x09, 0x08}; // P2P Provision Discovery Response -u1Byte PAT_ACT_NAN_SDF[] = {0x04, 0x09, 0x50, 0x6F, 0x9A, 0x13}; // NAN SDF -u1Byte PAT_ACT_GAS_INT_REQ[] = {0x04, 0x0A}; // GAS Initial Request -u1Byte PAT_ACT_GAS_INT_RSP[] = {0x04, 0x0B}; // GAS Initial Response -u1Byte PAT_ACT_GAS_COMEBACK_REQ[] = {0x04, 0x0C}; // GAS Comeback Request -u1Byte PAT_ACT_GAS_COMEBACK_RSP[] = {0x04, 0x0D}; // GAS Comeback Response -// Radio Measurement - 11k (0x5) -u1Byte PAT_ACT_RM_RM_REQ[] = {0x05, 0x00}; // Radio Measurement Request -u1Byte PAT_ACT_RM_RM_RPT[] = {0x05, 0x01}; // Radio Measurement Report -u1Byte PAT_ACT_RM_LM_REQ[] = {0x05, 0x02}; // Link Measurement Request -u1Byte PAT_ACT_RM_LM_RPT[] = {0x05, 0x03}; // Link Measurement Report -u1Byte PAT_ACT_RM_NR_REQ[] = {0x05, 0x04}; // Neighbor Report Request -u1Byte PAT_ACT_RM_NR_RSP[] = {0x05, 0x05}; // Neighbor Report Response -// High Throughput - 11n (0x7) -u1Byte PAT_ACT_HT_NOTI_CHNL_WIDTH[] = {0x07, 0x00}; // Notify Channel Width -u1Byte PAT_ACT_HT_SM_PS[] = {0x07, 0x01}; // SM Power Save -u1Byte PAT_ACT_HT_PSMP[] = {0x07, 0x02}; // PSMP -u1Byte PAT_ACT_HT_SET_PCO_PHASE[] = {0x07, 0x03}; // Set PCO Phase -u1Byte PAT_ACT_HT_CSI[] = {0x07, 0x04}; // CSI -u1Byte PAT_ACT_HT_NON_COMPRESS_BEAMFORMING[] = {0x07, 0x05}; // Noncompressed Beamforming -u1Byte PAT_ACT_HT_COMPRESS_BEAMFORMING[] = {0x07, 0x06}; // Compressed Beamforming -u1Byte PAT_ACT_HT_ASEL_FEEDBACK[] = {0x07, 0x07}; // ASEL Indices Feedback -// SA Query (0x8) -u1Byte PAT_ACT_SA_QUERY_REQ[] = {0x08, 0x00}; // SA Query Request -// TDLS-11z (0x0C) -u1Byte PAT_ACT_TDLS_REQ[] = {0x0C, 0x00}; // TDLS Setup Request -u1Byte PAT_ACT_TDLS_RSP[] = {0x0C, 0x01}; // TDLS Setup Response -u1Byte PAT_ACT_TDLS_CONFIRM[] = {0x0C, 0x02}; // TDLS Setup Confirm -u1Byte PAT_ACT_TDLS_TEARDOWN[] = {0x0C, 0x03}; // TDLS Setup Teardown -u1Byte PAT_ACT_TDLS_PEER_TRAFIC_IND[] = {0x0C, 0x04}; // TDLS Peer Traffic Indication -u1Byte PAT_ACT_TDLS_CHNL_SW_REQ[] = {0x0C, 0x05}; // TDLS Channel Switch Request -u1Byte PAT_ACT_TDLS_CHNL_SW_RSP[] = {0x0C, 0x06}; // TDLS Channel Switch Response -u1Byte PAT_ACT_TDLS_PEER_PSM_REQ[] = {0x0C, 0x07}; // TDLS Peer PSM Request -u1Byte PAT_ACT_TDLS_PEER_PSM_RSP[] = {0x0C, 0x08}; // TDLS Peer PSM Response -u1Byte PAT_ACT_TDLS_PEER_TRAFIC_RSP[] = {0x0C, 0x09}; // TDLS Peer Traffic Response -u1Byte PAT_ACT_TDLS_DISC_REQ[] = {0x0C, 0x0A}; // TDLS Discovery Request -// WMM (0x11) -u1Byte PAT_ACT_WMM_ADDTSREQ[] = {0x11, 0x00}; -u1Byte PAT_ACT_WMM_ADDTSRSP[] = {0x11, 0x01}; -u1Byte PAT_ACT_WMM_DELTS[] = {0x11, 0x02}; -// VHT (0x15) -u1Byte PAT_ACT_VHT_COMPRESSED_BEAMFORMING[] = {0x15, 0x00}; -u1Byte PAT_ACT_VHT_GROUPID_MANAGEMENT[] = {0x15, 0x01}; -u1Byte PAT_ACT_VHT_OPMODE_NOTIFICATION[] = {0x15, 0x02}; -//Vendor Specific (0x7F) -u1Byte PAT_ACT_P2P_NOA[] = {0x7F, 0x50, 0x6F, 0x9A, 0x09, 0x00}; // P2P Notice of Absence -u1Byte PAT_ACT_P2P_PRESENCE_REQ[] = {0x7F, 0x50, 0x6F, 0x9A, 0x09, 0x01}; // P2P Presence Request -u1Byte PAT_ACT_P2P_PRESENCE_RSP[] = {0x7F, 0x50, 0x6F, 0x9A, 0x09, 0x02}; // P2P Presence Response -u1Byte PAT_ACT_P2P_GO_DISCOVERABILITY_REQ[] = {0x7F, 0x50, 0x6F, 0x9A, 0x09, 0x03}; // P2P GO Discoverability Request - -#define FILL_PATTERN_MAP(_Type, _Pattern) {_Type, sizeof(_Pattern), _Pattern} - -// The pattern array of action frames. -// By Bruce, 2012-03-09. -PKT_PATTERN_MAP PktActPatternsMap[] = -{ - // Qos (0x1) - FILL_PATTERN_MAP(ACT_PKT_QOS_ADDTSREQ, PAT_ACT_QOS_ADDTSREQ), - FILL_PATTERN_MAP(ACT_PKT_QOS_ADDTSRSP, PAT_ACT_QOS_ADDTSRSP), - FILL_PATTERN_MAP(ACT_PKT_QOS_DELTS, PAT_ACT_QOS_DELTS), - FILL_PATTERN_MAP(ACT_PKT_QOS_SCHEDULE, PAT_ACT_QOS_SCHEDULE), - // DLS (0x2) - FILL_PATTERN_MAP(ACT_PKT_DLS_DLSREQ, PAT_ACT_DLS_DLSREQ), - FILL_PATTERN_MAP(ACT_PKT_DLS_DLSRSP, PAT_ACT_DLS_DLSRSP), - FILL_PATTERN_MAP(ACT_PKT_DLS_DLSTEARDOWN, PAT_ACT_DLS_DLSTEARDOWN), - // BA (0x3) - FILL_PATTERN_MAP(ACT_PKT_BA_ADDBAREQ, PAT_ACT_BA_ADDBAREQ), - FILL_PATTERN_MAP(ACT_PKT_BA_ADDBARSP, PAT_ACT_BA_ADDBARSP), - FILL_PATTERN_MAP(ACT_PKT_BA_DELBA, PAT_ACT_BA_DELBA), - // Public (0x4) - FILL_PATTERN_MAP(ACT_PKT_BSS_COEXIST, PAT_ACT_BSS_COEXIST), - FILL_PATTERN_MAP(ACT_PKT_TDLS_DISC_RSP, PAT_ACT_TDLS_DISC_RSP), - FILL_PATTERN_MAP(ACT_PKT_P2P_GO_NEG_REQ, PAT_ACT_P2P_GO_NEG_REQ), - FILL_PATTERN_MAP(ACT_PKT_P2P_GO_NEG_RSP, PAT_ACT_P2P_GO_NEG_RSP), - FILL_PATTERN_MAP(ACT_PKT_P2P_GO_NEG_CONF, PAT_ACT_P2P_GO_NEG_CONF), - FILL_PATTERN_MAP(ACT_PKT_P2P_INVIT_REQ, PAT_ACT_P2P_INVIT_REQ), - FILL_PATTERN_MAP(ACT_PKT_P2P_INVIT_RSP, PAT_ACT_P2P_INVIT_RSP), - FILL_PATTERN_MAP(ACT_PKT_P2P_DEV_DISCOVERABILITY_REQ, PAT_ACT_P2P_DEV_DISCOVERABILITY_REQ), - FILL_PATTERN_MAP(ACT_PKT_P2P_DEV_DISCOVERABILITY_RSP, PAT_ACT_P2P_DEV_DISCOVERABILITY_RSP), - FILL_PATTERN_MAP(ACT_PKT_P2P_PROV_DISC_REQ, PAT_ACT_P2P_PROV_DISC_REQ), - FILL_PATTERN_MAP(ACT_PKT_P2P_PROV_DISC_RSP, PAT_ACT_P2P_PROV_DISC_RSP), - FILL_PATTERN_MAP(ACT_PKT_NAN_SDF, PAT_ACT_NAN_SDF), - FILL_PATTERN_MAP(ACT_PKT_GAS_INT_REQ, PAT_ACT_GAS_INT_REQ), - FILL_PATTERN_MAP(ACT_PKT_GAS_INT_RSP, PAT_ACT_GAS_INT_RSP), - FILL_PATTERN_MAP(ACT_PKT_GAS_COMEBACK_REQ, PAT_ACT_GAS_COMEBACK_REQ), - FILL_PATTERN_MAP(ACT_PKT_GAS_COMEBACK_RSP, PAT_ACT_GAS_COMEBACK_RSP), - // Radio Measurement - 11k (0x5) - FILL_PATTERN_MAP(ACT_PKT_RM_RM_REQ, PAT_ACT_RM_RM_REQ), - FILL_PATTERN_MAP(ACT_PKT_RM_RM_RPT, PAT_ACT_RM_RM_RPT), - FILL_PATTERN_MAP(ACT_PKT_RM_LM_REQ, PAT_ACT_RM_LM_REQ), - FILL_PATTERN_MAP(ACT_PKT_RM_LM_RPT, PAT_ACT_RM_LM_RPT), - FILL_PATTERN_MAP(ACT_PKT_RM_NR_REQ, PAT_ACT_RM_NR_REQ), - FILL_PATTERN_MAP(ACT_PKT_RM_NR_RSP, PAT_ACT_RM_NR_RSP), - // High Throughput - 11n (0x7) - FILL_PATTERN_MAP(ACT_PKT_HT_NOTI_CHNL_WIDTH, PAT_ACT_HT_NOTI_CHNL_WIDTH), - FILL_PATTERN_MAP(ACT_PKT_HT_SM_PS, PAT_ACT_HT_SM_PS), - FILL_PATTERN_MAP(ACT_PKT_HT_PSMP, PAT_ACT_HT_PSMP), - FILL_PATTERN_MAP(ACT_PKT_HT_SET_PCO_PHASE, PAT_ACT_HT_SET_PCO_PHASE), - FILL_PATTERN_MAP(ACT_PKT_HT_CSI, PAT_ACT_HT_CSI), - FILL_PATTERN_MAP(ACT_PKT_HT_NON_COMPRESSED_BEAMFORMING, PAT_ACT_HT_NON_COMPRESS_BEAMFORMING), - FILL_PATTERN_MAP(ACT_PKT_HT_COMPRESSED_BEAMFORMING, PAT_ACT_HT_COMPRESS_BEAMFORMING), - FILL_PATTERN_MAP(ACT_PKT_HT_ASEL_FEEDBACK, PAT_ACT_HT_ASEL_FEEDBACK), - // SA Query - 11w(0x8) - FILL_PATTERN_MAP(ACT_PKT_SA_QUERY_REQ, PAT_ACT_SA_QUERY_REQ), - // TDLS-11z (0x0C) - FILL_PATTERN_MAP(ACT_PKT_TDLS_REQ, PAT_ACT_TDLS_REQ), - FILL_PATTERN_MAP(ACT_PKT_TDLS_RSP, PAT_ACT_TDLS_RSP), - FILL_PATTERN_MAP(ACT_PKT_TDLS_CONFIRM, PAT_ACT_TDLS_CONFIRM), - FILL_PATTERN_MAP(ACT_PKT_TDLS_TEARDOWN, PAT_ACT_TDLS_TEARDOWN), - FILL_PATTERN_MAP(ACT_PKT_TDLS_PEER_TRAFIC_IND, PAT_ACT_TDLS_PEER_TRAFIC_IND), - FILL_PATTERN_MAP(ACT_PKT_TDLS_CHNL_SW_REQ, PAT_ACT_TDLS_CHNL_SW_REQ), - FILL_PATTERN_MAP(ACT_PKT_TDLS_CHNL_SW_RSP, PAT_ACT_TDLS_CHNL_SW_RSP), - FILL_PATTERN_MAP(ACT_PKT_TDLS_PEER_PSM_REQ, PAT_ACT_TDLS_PEER_PSM_REQ), - FILL_PATTERN_MAP(ACT_PKT_TDLS_PEER_PSM_RSP, PAT_ACT_TDLS_PEER_PSM_RSP), - FILL_PATTERN_MAP(ACT_PKT_TDLS_PEER_TRAFIC_RSP, PAT_ACT_TDLS_PEER_TRAFIC_RSP), - FILL_PATTERN_MAP(ACT_PKT_TDLS_DISC_REQ, PAT_ACT_TDLS_DISC_REQ), - // WMM (0x11) - FILL_PATTERN_MAP(ACT_PKT_WMM_ADDTSREQ, PAT_ACT_WMM_ADDTSREQ), - FILL_PATTERN_MAP(ACT_PKT_WMM_ADDTSRSP, PAT_ACT_WMM_ADDTSRSP), - FILL_PATTERN_MAP(ACT_PKT_WMM_DELTS, PAT_ACT_WMM_DELTS), - // VHT (0x15) - FILL_PATTERN_MAP(ACT_PKT_VHT_COMPRESSED_BEAMFORMING, PAT_ACT_VHT_COMPRESSED_BEAMFORMING), - FILL_PATTERN_MAP(ACT_PKT_VHT_GROUPID_MANAGEMENT, PAT_ACT_VHT_GROUPID_MANAGEMENT), - FILL_PATTERN_MAP(ACT_PKT_VHT_OPMODE_NOTIFICATION, PAT_ACT_VHT_OPMODE_NOTIFICATION), - //Vendor Specific (0x7F) - FILL_PATTERN_MAP(ACT_PKT_P2P_NOA, PAT_ACT_P2P_NOA), - FILL_PATTERN_MAP(ACT_PKT_P2P_PRESENCE_REQ, PAT_ACT_P2P_PRESENCE_REQ), - FILL_PATTERN_MAP(ACT_PKT_P2P_PRESENCE_RSP, PAT_ACT_P2P_PRESENCE_RSP), - FILL_PATTERN_MAP(ACT_PKT_P2P_GO_DISCOVERABILITY_REQ, PAT_ACT_P2P_GO_DISCOVERABILITY_REQ), - - // ===== Insert new item above this line ===== - {ACT_PKT_TYPE_UNKNOWN, 0, NULL} -}; - -// 802.11 Action Frame IE offset -PKT_IE_OFFSET_MAP ActPktIeOffsetMap[] = -{ - // Qos (0x1) - {ACT_PKT_QOS_ADDTSREQ, (sMacHdrLng + 3)}, - {ACT_PKT_QOS_ADDTSRSP, (sMacHdrLng + 5)}, - {ACT_PKT_QOS_SCHEDULE, (sMacHdrLng + 2)}, - // DLS (0x2) - {ACT_PKT_DLS_DLSREQ, (sMacHdrLng + 18)}, - {ACT_PKT_DLS_DLSRSP, (sMacHdrLng + 18)}, - // Public (0x4) - {ACT_PKT_BSS_COEXIST, (sMacHdrLng + 2)}, - {ACT_PKT_TDLS_DISC_RSP, (sMacHdrLng + 5)}, - {ACT_PKT_P2P_GO_NEG_REQ, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_GO_NEG_RSP, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_GO_NEG_CONF, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_INVIT_REQ, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_INVIT_RSP, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_DEV_DISCOVERABILITY_REQ, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_DEV_DISCOVERABILITY_RSP, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_PROV_DISC_REQ, (sMacHdrLng + 8)}, - {ACT_PKT_P2P_PROV_DISC_RSP, (sMacHdrLng + 8)}, - // WMM (0x11) - {ACT_PKT_WMM_ADDTSREQ, (sMacHdrLng + 4)}, - {ACT_PKT_WMM_ADDTSRSP, (sMacHdrLng + 4)}, - {ACT_PKT_WMM_DELTS, (sMacHdrLng + 4)}, - //Vendor Specific (0x7F) - {ACT_PKT_P2P_NOA, (sMacHdrLng + 7)}, - {ACT_PKT_P2P_PRESENCE_REQ, (sMacHdrLng + 7)}, - {ACT_PKT_P2P_PRESENCE_RSP, (sMacHdrLng + 7)}, - {ACT_PKT_P2P_GO_DISCOVERABILITY_REQ, (sMacHdrLng + 7)}, - - // ===== Insert new item above this line ===== - {ACT_PKT_TYPE_UNKNOWN, 0} -}; - -// Pattern Array -//TDLS -u1Byte PAT_ENCAP_DATA_TDLS_SETUP_REQ[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x00}; -u1Byte PAT_ENCAP_DATA_TDLS_SETUP_RSP[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x01}; -u1Byte PAT_ENCAP_DATA_TDLS_SETUP_CONFIRM[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x02}; -u1Byte PAT_ENCAP_DATA_TDLS_TEARDOWN[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x03}; -u1Byte PAT_ENCAP_DATA_TDLS_TRAFFIC_INDI[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x04}; -u1Byte PAT_ENCAP_DATA_TDLS_CHNL_SW_REQ[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x05}; -u1Byte PAT_ENCAP_DATA_TDLS_CHNL_SW_RSP[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x06}; -u1Byte PAT_ENCAP_DATA_TDLS_PSM_REQ[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x07}; -u1Byte PAT_ENCAP_DATA_TDLS_PSM_RSP[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x08}; -u1Byte PAT_ENCAP_DATA_TDLS_TRAFFIC_RSP[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x09}; -u1Byte PAT_ENCAP_DATA_TDLS_DISC_REQ[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x0C, 0x0A}; -u1Byte PAT_ENCAP_DATA_TDLS_PROBE_REQ[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x7F, 0x50, 0x6F, 0x9A, 0x04}; -u1Byte PAT_ENCAP_DATA_TDLS_PROBE_RSP[] = {0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00, 0x89, 0x0D, 0x02, 0x7F, 0x50, 0x6F, 0x9A, 0x05}; - -// CCX -u1Byte PAT_ENCAP_DATA_CCX_IAPP[] = {0xAA, 0xAA, 0x03, 0x00, 0x40, 0x96, 0x00, 0x00}; - -// The pattern array of encapsulated data frames. -// By Bruce, 2012-03-23. -PKT_PATTERN_MAP PktEncapDataPatternsMap[] = -{ - // TDLS - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_SETUP_REQ, PAT_ENCAP_DATA_TDLS_SETUP_REQ), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_SETUP_RSP, PAT_ENCAP_DATA_TDLS_SETUP_RSP), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_SETUP_CONFIRM, PAT_ENCAP_DATA_TDLS_SETUP_CONFIRM), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_TEARDOWN, PAT_ENCAP_DATA_TDLS_TEARDOWN), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_TRAFFIC_INDI, PAT_ENCAP_DATA_TDLS_TRAFFIC_INDI), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_CHNL_SW_REQ, PAT_ENCAP_DATA_TDLS_CHNL_SW_REQ), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_CHNL_SW_RSP, PAT_ENCAP_DATA_TDLS_CHNL_SW_RSP), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_PSM_REQ, PAT_ENCAP_DATA_TDLS_PSM_REQ), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_PSM_RSP, PAT_ENCAP_DATA_TDLS_PSM_RSP), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_TRAFFIC_RSP, PAT_ENCAP_DATA_TDLS_TRAFFIC_RSP), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_DISC_REQ, PAT_ENCAP_DATA_TDLS_DISC_REQ), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_PROBE_REQ, PAT_ENCAP_DATA_TDLS_PROBE_REQ), - FILL_PATTERN_MAP(ENCAP_DATA_PKT_TDLS_PROBE_RSP, PAT_ENCAP_DATA_TDLS_PROBE_RSP), - - // CCX RM - FILL_PATTERN_MAP(ENCAP_DATA_PKT_CCX_IAPP, PAT_ENCAP_DATA_CCX_IAPP), - - // ===== Insert new item above this line ===== - {ENCAP_DATA_PKT_UNKNOWN, 0, NULL} -}; - - - -BOOLEAN -EqualOS( - IN OCTET_STRING os1, - IN OCTET_STRING os2 - ) -{ - if( os1.Length!=os2.Length ) - return FALSE; - - if( os1.Length==0 ) - return FALSE; - - return (PlatformCompareMemory(os1.Octet,os2.Octet,os1.Length)==0) ? TRUE:FALSE; -} - - -BOOLEAN -IsSSIDAny( - IN OCTET_STRING ssid - ) -{ - BOOLEAN retValue = FALSE; - - if(ssid.Length == 0) // a kind of "ANY SSID" - retValue = TRUE; - else if(ssid.Length == 3) - { - if( (ssid.Octet[0]=='A' || ssid.Octet[0]=='a') && - (ssid.Octet[1]=='N' || ssid.Octet[1]=='n') && - (ssid.Octet[2]=='Y' || ssid.Octet[2]=='y') ) - retValue = TRUE; - } - - return retValue; -} - - -BOOLEAN -IsSSIDDummy( - IN OCTET_STRING ssid - ) -{ - u2Byte i; - u1Byte ch; - - if(ssid.Length == 0) // a kind of "ANY SSID" - return FALSE; - for(i = 0; i < ssid.Length; i++) - { - ch = ssid.Octet[i]; - if( (ch >= 0x20) && (ch <= 0x7e) ) //wifi, printable ascii code must be supported - ;//ok - else - { - // If the SSID contain Any Illeagl ASCII Code - // It should be reganize as dummy SSID. - // It modified for No Link any If UI does no Set the OID or registery - // Modifid by Mars, 20090722 - // 2010/04/12 MH For SEC Korea SSID case, we will not treat it as dummy SSID. - // if the SSID length is not 32. - if (ssid.Length == MAX_SSID_LEN) - return TRUE; - } - } - return FALSE; -} - -BOOLEAN -IsSSIDNdisTest( - IN OCTET_STRING ssid - ) -{ - if(ssid.Length ==0) // a kind of "ANY SSID" - { - return TRUE; - } - - if( (ssid.Length >= 8) && - ( (ssid.Octet[0]=='N' || ssid.Octet[0]=='n') && - (ssid.Octet[1]=='D' || ssid.Octet[1]=='d') && - (ssid.Octet[2]=='I' || ssid.Octet[2]=='i') && - (ssid.Octet[3]=='S' || ssid.Octet[2]=='s') && - (ssid.Octet[4]=='T' || ssid.Octet[2]=='t') && - (ssid.Octet[5]=='E' || ssid.Octet[2]=='e') && - (ssid.Octet[6]=='S' || ssid.Octet[2]=='s') && - (ssid.Octet[7]=='T' || ssid.Octet[2]=='t')) ) - { - return TRUE; - } - else - { - return FALSE; - } - -} - -// -// Description: -// Checks whether a packet contains any invalid IE. -// Implemented based on PacketGetElement(). -// -// 2008.12.32, haich -// -BOOLEAN -PacketCheckIEValidity( - IN OCTET_STRING packet, - IN PRT_RFD pRfd - ) -{ - u2Byte PacketSubType; - u2Byte offset = 0; // current offset to the packet - BOOLEAN bRet = TRUE; // used for return - u1Byte u1EID; // EID of current IE - u1Byte u1ELength; // Length of current IE - u2Byte ValidPacketLength=0; - - do - { - if(sMacHdrLng > packet.Length) - {// not able to get packet type - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("PacketCheckIEValidity(): sMacHdrLng(%u) > packet.Length (%u)\n", sMacHdrLng, packet.Length)); - bRet = FALSE; - break; - } - - if(!IsMgntFrame(packet.Octet)) - {// not a mangaement frame - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("PacketCheckIEValidity(): frame type: %u\n", Frame_Type(packet))); - bRet = FALSE; - break; - } - - PacketSubType = Frame_Subtype(packet); - - if(PacketSubType > 12) - {// beyond deauth - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("PacketCheckIEValidity(): wrong subtype: %u\n", PacketSubType)); - bRet = FALSE; - break; - } - - if(!(offset = sPacketIEOffsetTable[PacketSubType])) - {// not a sub type of frame that could have IEs - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("PacketCheckIEValidity(): not a sub type of frame that could have IEs, subtype: %u\n", PacketSubType)); - bRet = FALSE; - break; - } - - do // for all IEs - { - if(offset + 2 >= packet.Length) - {// [malicious attack] not ok to read EID and Element Length - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("PacketCheckIEValidity(): [malicious attack] not ok to read EID and Element Length\n")); - bRet = TRUE; - break; - } - - u1EID = packet.Octet[offset]; // Get current Element ID. - u1ELength = packet.Octet[offset+1]; // Get current length of the IE. - - if(!IsIELengthValid(u1EID, u1ELength)) - { - bRet = FALSE; - break; - } - - if(offset + 2 + u1ELength < packet.Length) - {// Jump to the position of length of next IE. (2 byte is for the ID and length field.) - offset = offset + 2 + u1ELength; // incr at least 2 for every loop - ValidPacketLength = offset; - } - else if(offset + 2 + u1ELength == packet.Length) - {// the IEs in the packet are all valid. - bRet = TRUE; - ValidPacketLength = offset + 2 + u1ELength; - break; - } - else - {// [malicious attack] length of IE exceeds packet length - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("PacketCheckIEValidity(): [malicious attack] length of IE exceeds packet length\n")); - bRet = TRUE; - break; - } - }while(TRUE); - - }while(FALSE); - - if(!bRet) - { - RT_PRINT_DATA(COMP_SCAN, DBG_TRACE, "Packet with wrong IE:", packet.Octet, packet.Length); - } - pRfd->ValidPacketLength = ValidPacketLength; - return bRet; - -} - -// -// Description: -// Determine the packet type of the action frame. -// Argument: -// [in] posMpdu - -// The full 802.11 packet. -// Return: -// If this packet is determined successfully, return the ACT_PKT_xxx. -// If this function cannot recognize this packet, return ACT_PKT_TYPE_UNKNOWN. -// Remark: -// It checks the category, action field (if there is such one) and OUI information to determine the type. -// Do not input non-action frame to this function and it doesn't check if this packet is action frame. -// By Bruce, 2012-03-09. -// -ACT_PKT_TYPE -PacketGetActionFrameType( - IN POCTET_STRING posMpdu - ) -{ - u4Byte idx = 0; - - if(posMpdu->Length <= sMacHdrLng) - { - RT_TRACE_F(COMP_DBG, DBG_WARNING, ("[WARNING] Invalid length (%d) for this packet!\n", posMpdu->Length)); - return ACT_PKT_TYPE_UNKNOWN; - } - - //Retrieve the table and check the patterns - for(idx = 0; ACT_PKT_TYPE_UNKNOWN != (ACT_PKT_TYPE)(PktActPatternsMap[idx].PktType); idx ++) - { - // Packet length mismatch - if((posMpdu->Length - sMacHdrLng) < PktActPatternsMap[idx].PatternLen) - continue; - - // Compare pattern - if(0 == PlatformCompareMemory(Frame_FrameBody(*posMpdu), PktActPatternsMap[idx].Pattern, PktActPatternsMap[idx].PatternLen)) - { - return (ACT_PKT_TYPE)(PktActPatternsMap[idx].PktType); - } - } - return ACT_PKT_TYPE_UNKNOWN; -} - -// -// Description: -// Determine the packet type of the encapsulated data frame. -// Argument: -// [in] posDataContent - -// The full data content after 802.11 header(including Qos + Security header + HC control header). -// It should be the header of LLC. -// Return: -// If this packet is determined successfully, return the ENCAP_DATA_PKT_xxx. -// If this function cannot recognize this packet, return ENCAP_DATA_PKT_UNKNOWN. -// Remark: -// It checks the LLC/SNAP header, and the following patters. -// This function does not check the security or any 802.11 condition. -// By Bruce, 2012-03-23. -// -ENCAP_DATA_PKT_TYPE -PacketGetEncapDataFrameType( - IN POCTET_STRING posDataContent - ) -{ - u4Byte idx = 0; - - //Retrieve the table and check the patterns - for(idx = 0; ENCAP_DATA_PKT_UNKNOWN != (ACT_PKT_TYPE)(PktEncapDataPatternsMap[idx].PktType); idx ++) - { - // Packet length mismatch - if(posDataContent->Length < PktEncapDataPatternsMap[idx].PatternLen) - continue; - - // Compare pattern - if(0 == PlatformCompareMemory(posDataContent->Octet, PktEncapDataPatternsMap[idx].Pattern, PktEncapDataPatternsMap[idx].PatternLen)) - { - return (ENCAP_DATA_PKT_TYPE)(PktEncapDataPatternsMap[idx].PktType); - } - } - return ENCAP_DATA_PKT_UNKNOWN; -} - - -// -// Description: -// Get the offset according to the packet type. -// Arguments: -// [in] posMpdu - -// The full 802.11 packet. -// [out] pOffset - -// The returned offset for the fist IE. -// Return: -// If this executes without any error, return FALSE. -// If this packet has no IE, return FALSE. -// Remark: -// None. -// By Bruce, 2012-03-09. -// -BOOLEAN -PacketGetIeOffset( - IN POCTET_STRING posMpdu, - OUT pu2Byte pOffset - ) -{ - BOOLEAN bValid = TRUE; - u4Byte idx = 0; - - switch(PacketGetType(*posMpdu)) - { - default: - bValid = FALSE; - break; - - case Type_Auth: - *pOffset = (sMacHdrLng + 6); - break; - - case Type_Probe_Req: - *pOffset = (sMacHdrLng + 0); - break; - - case Type_Beacon: - case Type_Probe_Rsp: - *pOffset = (sMacHdrLng + 12); - break; - - case Type_Reasoc_Req: - *pOffset = (sMacHdrLng + 10); - break; - - case Type_Asoc_Req: - *pOffset = (sMacHdrLng + 4); - break; - - case Type_Asoc_Rsp: - case Type_Reasoc_Rsp: - *pOffset = (sMacHdrLng + 6); - break; - - case Type_Disasoc: - case Type_Deauth: - *pOffset = (sMacHdrLng + 2); - break; - - case Type_Action: - { - ACT_PKT_TYPE actType = PacketGetActionFrameType(posMpdu); - - bValid = FALSE; - if(ACT_PKT_TYPE_UNKNOWN == actType) - { - RT_TRACE_F(COMP_DBG, DBG_WARNING, ("[WARNING] Unrecognized action frame type!\n")); - break; - } - for(idx = 0; ACT_PKT_TYPE_UNKNOWN != (ACT_PKT_TYPE)(ActPktIeOffsetMap[idx].PktType); idx ++) - { - if(actType == (ACT_PKT_TYPE)(ActPktIeOffsetMap[idx].PktType)) - { - *pOffset = ActPktIeOffsetMap[idx].IeOffset; - bValid = TRUE; - break; - } - } - - if(!bValid) - { - RT_TRACE_F(COMP_DBG, DBG_WARNING, ("[WARNING] cannot find offset for action frame type = %d!\n", actType)); - } - } - break; - } - - return bValid; -} - -// -// Parsing Information Elements. -// -// This function is used to search the WPS Fragment IE -// In WPS 2.0. It wil content more then 2 IE is the forment -// DD-Len-00-50-f2-04-xxxxx-DD-Len-00-50-f2-04 -// -u1Byte -PacketGetElementNum( - IN OCTET_STRING packet, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ) -{ - u2Byte offset; - OCTET_STRING IEs; - OCTET_STRING ret={0,0}; // used for return - u1Byte IENum = 0; - - if(!PacketGetIeOffset(&packet, &offset)) - { - return 0; - } - - if(offset < packet.Length) - { - pu1Byte pIE; - u2Byte IELen = (packet.Length - offset); - - pIE = (packet.Octet + offset); - FillOctetString(IEs, pIE,IELen); - - RT_PRINT_DATA(COMP_WPS, DBG_TRACE, "The IE in the packet :\n", pIE, IELen); - do - { - ret= IEGetElement(IEs, ID, OUIType, OUISubType); - if(ret.Length > 0) - { - IENum++; - RT_TRACE(COMP_WPS, DBG_TRACE,("We find a WPS IE in probe or beacon Fragment num is %d \n",IENum)); - IELen = IELen - ((u2Byte)(ret.Octet - pIE) + ret.Length); - pIE = (ret.Octet + ret.Length); - FillOctetString(IEs, pIE,IELen); - RT_PRINT_DATA(COMP_WPS, DBG_TRACE, "The IE after WPS IE in the packet :\n", pIE, IELen); - } - else - { - RT_TRACE(COMP_WPS, DBG_TRACE,("There is no WPS IE in the probe or beacon\n")); - } - } - while(ret.Length != 0); - - return IENum; - } - else - { - return IENum; - } -} - - -// -// Parsing Information Elements. -// -// Added a parameter "OUISubType" and rewrited by Annie, 2005-11-08, -// since the element ID of WPA-IE and WMM-IE are the same(0xDD=221). -// -OCTET_STRING -PacketGetElement( - IN OCTET_STRING packet, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ) -{ - u2Byte offset; - OCTET_STRING IEs; - OCTET_STRING ret={0,0}; // used for return - - if(!PacketGetIeOffset(&packet, &offset)) - return ret; - - if(offset < packet.Length) - { - FillOctetString(IEs, (packet.Octet + offset), (packet.Length - offset)); - return IEGetElement(IEs, ID, OUIType, OUISubType); - } - else - { - return ret; - } -} - -VOID -PacketMakeElement( - IN POCTET_STRING packet, - IN ELEMENT_ID ID, - IN OCTET_STRING info - ) -{ - pu1Byte buf = packet->Octet + packet->Length; - - buf[0] = (u1Byte)ID; - buf[1] = (u1Byte)info.Length; - - if(info.Length > 0) - { - PlatformMoveMemory( buf + 2, info.Octet, info.Length); - } - - packet->Length += info.Length + 2; -} - -VOID -PacketAppendData( - IN POCTET_STRING packet, - IN OCTET_STRING data - ) -{ - pu1Byte buf = packet->Octet + packet->Length; - - PlatformMoveMemory( buf, data.Octet, data.Length); - - packet->Length = packet->Length + data.Length; -} - -BOOLEAN -TimGetBcMcBit( - IN OCTET_STRING Tim - ) -{ - return ((Tim.Octet[2] & 0x01) == 0x01); -} - -BOOLEAN -TimGetAIDBit( - IN OCTET_STRING Tim, - IN u2Byte AID - ) -{ - BOOLEAN result; - u2Byte offset,offset_byte; - u1Byte offset_bit; - u2Byte FirstStationInTim; - - FirstStationInTim = (Tim.Octet[2] & 0xFE) * 8; - if( AID= (FirstStationInTim+(Tim.Length-3)*8) ) - { // Out of the range(too large) - return FALSE; - } - else - { - - offset = AID - FirstStationInTim; - - offset_byte = offset >>3; - offset_bit = (unsigned char)(offset & 0x7); - - // Look up in the partial virtual bitmap - result = Tim.Octet[3 + offset_byte]&(0x01< 0) && (ssid.Octet[0] == 0x0 ) ) || - (ssid.Length == 0) ) - { - return TRUE; - } - return FALSE; -} - - -BOOLEAN -BeHiddenSsid( - pu1Byte ssidbuf, - u1Byte ssidlen - ) -{ - if( ((ssidlen == 1) && (ssidbuf[0] == 0x20) ) || - ((ssidlen > 0) && (ssidbuf[0] == 0x0 ) ) || - (ssidlen == 0) ) - { - return TRUE; - } - return FALSE; -} - - - -BOOLEAN -NullSSID( - OCTET_STRING bcnPkt - ) -{ - OCTET_STRING ssIdBeacon; - u1Byte i; - BOOLEAN athHdnAP; //sean,20030410, fix for linksys BEFW11S4 - -// ssIdBeacon = PacketGetElement( bcnPkt, EID_SsId ); // Rewrited for new added parameter. Annie, 2005-11-08. -// ssIdBeacon = PacketGetElement( bcnPkt, EID_SsId, OUI_SUB_DONT_CARE ); - ssIdBeacon = PacketGetElement( bcnPkt, EID_SsId, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE ); - for(i=0;i AckRate) - AckRate = BasicRate; - } - - // Make sure the AckRate is in the same modulation of DataRate, - // otherwise we it shall use highest mandatory rate of PHY - // that is less than or equal to DataRate. - switch(DataRate) - { - // CCK. - case MGN_1M: - case MGN_2M: - case MGN_5_5M: - case MGN_11M: - if(AckRate == 0 || !IS_CCK_RATE(AckRate) ) - AckRate = MGN_1M; - break; - - // OFDM. - case 12: - case 18: - case 24: - case 36: - case 48: - case 72: - case 96: - case 108: - if( AckRate == 0 || IS_CCK_RATE(AckRate) ) - { - if(DataRate >= 48) - { // 24M - AckRate = 48; - } - else if(DataRate >= 24) - { // 12M - AckRate = 24; - } - else - { // 6M - AckRate = 12; - } - } - break; - - default: - RT_TRACE(COMP_DBG, DBG_SERIOUS, ("ComputeAckRate(): unsupported rate %#02X !!!\n", DataRate)); - if(AckRate == 0) - AckRate = MGN_1M; - break; - } - - RT_ASSERT(AckRate != 0, ("ComputeAckRate(): AckRate should not be 0 !!!\n")); - - return AckRate; -} - -// -// Description: -// Check if current offset of the MPDU is a valid IE. -// -BOOLEAN -HasNextIE( - IN POCTET_STRING posMpdu, - IN u4Byte Offset - ) -{ - if(Offset + 2 > posMpdu->Length) // 2 = 1(ID) + 1(Length). - return FALSE; - - if(Offset + 2 + *(posMpdu->Octet + Offset + 1) > posMpdu->Length) - return FALSE; - - return TRUE; -} - -// -// Description: -// Wrap the IE in an RT_DOT11_IE object and advance offset -// to next IE. -// -// Assumption: -// Currnet offset contains a valid IE, that is, HasNextIE() -// returns TRUE before calling this function. -// -RT_DOT11_IE -AdvanceToNextIE( - IN POCTET_STRING posMpdu, - IN OUT pu4Byte pOffset - ) -{ - RT_DOT11_IE Ie; - - Ie.Id = *(posMpdu->Octet + *pOffset); - Ie.Content.Length = *(posMpdu->Octet + *pOffset + 1); - Ie.Content.Octet = posMpdu->Octet + *pOffset + 2; - - *pOffset += (2 + *(posMpdu->Octet + *pOffset + 1)); - return Ie; -} - -// -// Description: -// Get the number of IE elements and extract the interested element for return. -// Arguments: -// [in] IEs - -// The IE elements to be retrived. -// [in] ID - -// The referenced element ID in the IEs to be extracted. -// [in] OUIType - -// Vendor specified OUI to be determined in the element. -// [in] OUISubType - -// The oui subtype of the element -// Return: -// The number of the IEs. -// Revised by Bruce, 2012-03-26. -// -u1Byte -IEGetElementNum( - IN OCTET_STRING IEs, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ) -{ - u1Byte IENum = 0; - OCTET_STRING osTmp, osSingleIE; - u2Byte offset = 0; - - do - { - if(offset >= IEs.Length) - break; - - FillOctetString(osTmp, IEs.Octet + offset, (IEs.Length - offset)); - - osSingleIE = IEGetElement(osTmp, ID, OUIType, OUISubType); - if(osSingleIE.Length > 0) - { - IENum ++; - - offset += (SIZE_EID_AND_LEN + osSingleIE.Length); - } - else - { - break; - } - } - while(TRUE); - - return IENum; -} - - -// -// Description: -// Parse the IE elements and extract the interested element for return. -// Arguments: -// IEs - -// The IE elements to be retrived. -// ID - -// The referenced element ID in the IEs to be extracted. -// OUISubType - -// Vendor specified OUI to be determined in the element. -// Revised by Bruce, 2009-02-12. -// -OCTET_STRING -IEGetElement( - IN OCTET_STRING IEs, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ) -{ - u2Byte offset = 0; - u2Byte length = IEs.Length; - OCTET_STRING ret={0,0}; // used for return - u1Byte temp; - BOOLEAN bIEMatched = FALSE; - OCTET_STRING osOuiSub; - u1Byte MaxElementLen; - - static u1Byte WPATag[] = {0x00, 0x50, 0xf2, 0x01}; - static u1Byte WMMTag[] = {0x00, 0x50, 0xf2, 0x02}; // Added by Annie, 2005-11-08. - static u1Byte Simpleconf[]={0x00, 0x50, 0xF2, 0x04}; //added by David, 2006-10-02 - static u1Byte CcxRmCapTag[] = {0x00, 0x40, 0x96, 0x01}; // For CCX 2 S36, Radio Management Capability element, 2006.05.15, by rcnjko. - static u1Byte CcxVerNumTag[] = {0x00, 0x40, 0x96, 0x03}; // For CCX 2 S38, WLAN Device Version Number element. Annie, 2006-08-20. - static u1Byte WPA2GTKTag[] = {0x00, 0x0f, 0xac, 0x01}; // For MAC GTK data IE by CCW - static u1Byte CcxTsmTag[] = {0x00, 0x40, 0x96, 0x07}; // For CCX4 S56, Traffic Stream Metrics, 070615, by rcnjko. - static u1Byte CcxSSIDLTag[] = {0x00, 0x50, 0xf2, 0x05}; - static u1Byte RealtekTurboModeTag[] = {0x00, 0xE0, 0x4C, 0x01}; // Added by Annie, 2005-12-27 - static u1Byte RealtekAggModeTag[] = {0x00, 0xe0, 0x4c, 0x02}; - static u1Byte RealtekBTIOTModeTag[] = {0x00, 0xe0, 0x4c, 0x03}; // Add for BT IOT - static u1Byte RealtekBtHsTag[] = {0x00, 0xe0, 0x4c, 0x04}; // Add for BT HS - static u1Byte Epigram[] = {0x00,0x90,0x4c}; - static u1Byte EWC11NHTCap[] = {0x00, 0x90, 0x4c, 0x033}; // For 11n EWC definition, 2007.07.17, by Emily - static u1Byte EWC11NHTInfo[] = {0x00, 0x90, 0x4c, 0x034}; // For 11n EWC definition, 2007.07.17, by Emily - static u1Byte Epigram11ACCap[] = {0x00, 0x90, 0x4c, 0x04, 0x08, 0xBF, 0x0C}; // For 11ac Epigram definition - static u1Byte BroadcomCap_1[] = {0x00, 0x10, 0x18}; - static u1Byte BroadcomCap_2[] = {0x00, 0x0a, 0xf7}; - static u1Byte BroadcomCap_3[] = {0x00, 0x05, 0xb5}; - static u1Byte BroadcomLinksysE4200Cap_1[] = {0x00, 0x10, 0x18,0x02,0x00,0xf0,0x3c}; // for Linksys E4200 - static u1Byte BroadcomLinksysE4200Cap_2[] = {0x00, 0x10, 0x18,0x02,0x01,0xf0,0x3c}; - static u1Byte BroadcomLinksysE4200Cap_3[] = {0x00, 0x10, 0x18,0x02,0x00,0xf0,0x2c}; - static u1Byte CiscoCap[] = {0x00, 0x40, 0x96}; // For Cisco AP IOT issue, by Emily - static u1Byte MeruCap[] = {0x00, 0x0c, 0xe6}; - static u1Byte RalinkCap[] ={0x00, 0x0c, 0x43}; - static u1Byte AtherosCap_1[] = {0x00,0x03,0x7F}; - static u1Byte AtherosCap_2[] = {0x00,0x13,0x74}; - static u1Byte MarvellCap[] = {0x00, 0x50, 0x43}; - static u1Byte AirgoCap[] = {0x00, 0x0a, 0xf5}; - static u1Byte CcxSFA[] = {0x00, 0x40, 0x96, 0x14}; - static u1Byte CcxDiagReqReason[] = {0x00, 0x40, 0x96, 0x12}; - static u1Byte CcxMHDR[] = {0x00, 0x40, 0x96, 0x10}; - static u1Byte P2P_OUI_WITH_TYPE[] = {0x50, 0x6F, 0x9A, WLAN_PA_VENDOR_SPECIFIC}; - static u1Byte WFD_OUI_WITH_TYPE[] = {0x50, 0x6F, 0x9A, WFD_OUI_TYPE}; - static u1Byte NAN_OUI_WITH_TYPE[] = {0x50, 0x6F, 0x9A, 0x13}; - static u1Byte RealtekTDLSTag[] = {0x00, 0xe0, 0x4c, 0x03}; - - //Mix mode can't get DHCP in MacOS Driver. CCW revice offset 2008-04-15 - //offset = 12; - - do - { - if( (offset + 2) >= length ) - { - return ret; - } - - temp = IEs.Octet[offset]; // Get current Element ID. - - if( temp == ID ) - { - if( ID == EID_Vendor ) - { // EID_Vendor(=0xDD=221): Vendor Specific, currently we have to consider WPA and WMM Information Element. - switch(OUIType) - { - case OUI_SUB_WPA: - FillOctetString(osOuiSub, WPATag, sizeof(WPATag)); - break; - case OUI_SUB_WPA2GTK: - FillOctetString(osOuiSub, WPA2GTKTag, sizeof(WPA2GTKTag)); - break; - - case OUI_SUB_CCX_TSM: - FillOctetString(osOuiSub, CcxTsmTag, sizeof(CcxTsmTag)); - break; - - case OUI_SUB_SSIDL: - FillOctetString(osOuiSub, CcxSSIDLTag, sizeof(CcxSSIDLTag)); - break; - - case OUI_SUB_WMM: - FillOctetString(osOuiSub, WMMTag, sizeof(WMMTag)); - break; - - case OUI_SUB_REALTEK_TURBO: - FillOctetString(osOuiSub, RealtekTurboModeTag, sizeof(RealtekTurboModeTag)); - break; - - case OUI_SUB_REALTEK_AGG: - FillOctetString(osOuiSub, RealtekAggModeTag, sizeof(RealtekAggModeTag)); - break; - - case OUI_SUB_SimpleConfig: - FillOctetString(osOuiSub, Simpleconf, sizeof(Simpleconf)); - break; - - case OUI_SUB_CCX_RM_CAP: - FillOctetString(osOuiSub, CcxRmCapTag, sizeof(CcxRmCapTag)); - break; - - case OUI_SUB_CCX_VER_NUM: - FillOctetString(osOuiSub, CcxVerNumTag, sizeof(CcxVerNumTag)); - break; - - case OUI_SUB_EPIG_IE: - FillOctetString(osOuiSub, Epigram, sizeof(Epigram)); - break; - - case OUI_SUB_11N_EWC_HT_CAP: - FillOctetString(osOuiSub, EWC11NHTCap, sizeof(EWC11NHTCap)); - break; - - case OUI_SUB_11N_EWC_HT_INFO: - FillOctetString(osOuiSub, EWC11NHTInfo, sizeof(EWC11NHTInfo)); - break; - - case OUI_SUB_11AC_EPIG_VHT_CAP: - FillOctetString(osOuiSub, Epigram11ACCap, sizeof(Epigram11ACCap)); - break; - - case OUI_SUB_BROADCOM_IE_1: - FillOctetString(osOuiSub, BroadcomCap_1, sizeof(BroadcomCap_1)); - break; - - case OUI_SUB_BROADCOM_IE_2: - FillOctetString(osOuiSub, BroadcomCap_2, sizeof(BroadcomCap_2)); - break; - - case OUI_SUB_BROADCOM_IE_3: - FillOctetString(osOuiSub, BroadcomCap_3, sizeof(BroadcomCap_3)); - break; - - case OUI_SUB_BROADCOM_LINKSYSE4200_IE_1: - FillOctetString(osOuiSub, BroadcomLinksysE4200Cap_1, sizeof(BroadcomLinksysE4200Cap_1)); - break; - - case OUI_SUB_BROADCOM_LINKSYSE4200_IE_2: - FillOctetString(osOuiSub, BroadcomLinksysE4200Cap_2, sizeof(BroadcomLinksysE4200Cap_2)); - break; - - case OUI_SUB_BROADCOM_LINKSYSE4200_IE_3: - FillOctetString(osOuiSub, BroadcomLinksysE4200Cap_3, sizeof(BroadcomLinksysE4200Cap_3)); - break; - - case OUI_SUB_CISCO_IE: - FillOctetString(osOuiSub, CiscoCap, sizeof(CiscoCap)); - break; - - case OUI_SUB_MERU_IE: - FillOctetString(osOuiSub, MeruCap, sizeof(MeruCap)); - break; - - case OUI_SUB_RALINK_IE: - FillOctetString(osOuiSub, RalinkCap, sizeof(RalinkCap)); - break; - - case OUI_SUB_ATHEROS_IE_1: - FillOctetString(osOuiSub, AtherosCap_1, sizeof(AtherosCap_1)); - break; - - case OUI_SUB_ATHEROS_IE_2: - FillOctetString(osOuiSub, AtherosCap_2, sizeof(AtherosCap_2)); - break; - - case OUI_SUB_MARVELL: - FillOctetString(osOuiSub, MarvellCap, sizeof(MarvellCap)); - break; - - case OUI_SUB_AIRGO: - FillOctetString(osOuiSub, AirgoCap, sizeof(AirgoCap)); - break; - - case OUI_SUB_CCX_SFA: - FillOctetString(osOuiSub, CcxSFA, sizeof(CcxSFA)); - break; - - case OUI_SUB_CCX_DIAG_REQ_REASON: - FillOctetString(osOuiSub, CcxDiagReqReason, sizeof(CcxDiagReqReason)); - break; - - case OUI_SUB_CCX_MFP_MHDR: - FillOctetString(osOuiSub, CcxMHDR, sizeof(CcxMHDR)); - break; - - case OUI_SUB_WIFI_DIRECT: - FillOctetString(osOuiSub, P2P_OUI_WITH_TYPE, sizeof(P2P_OUI_WITH_TYPE)); - break; - - case OUI_SUB_WIFI_DISPLAY: - FillOctetString(osOuiSub, WFD_OUI_WITH_TYPE, sizeof(WFD_OUI_WITH_TYPE)); - break; - - case OUI_SUB_NAN: - FillOctetString(osOuiSub, NAN_OUI_WITH_TYPE, sizeof(NAN_OUI_WITH_TYPE)); - break; - - case OUI_SUB_REALTEK_TDLS: - FillOctetString(osOuiSub, RealtekTDLSTag, sizeof(RealtekTDLSTag)); - break; - - case OUI_SUB_REALTEK_BT_IOT : - FillOctetString(osOuiSub, RealtekBTIOTModeTag, sizeof(RealtekBTIOTModeTag)); - break; - - case OUI_SUB_REALTEK_BT_HS: - FillOctetString(osOuiSub, RealtekBtHsTag, sizeof(RealtekBtHsTag)); - break; - - default: - FillOctetString(osOuiSub, NULL, 0); - break; - } - if( osOuiSub.Length > 0 && (length >= (offset + 2 + osOuiSub.Length)) ) // Prevent malicious attack. - { - if( PlatformCompareMemory( - (IEs.Octet + offset + 2), - osOuiSub.Octet, - osOuiSub.Length) == 0 ) - { // OUI field and subtype field are matched - bIEMatched = TRUE; - - // - // 060801, Isaiah: - // [UAPSD Logo] Marvel AP has similar element, [DD 07 00 50 F2 02 05 01 24]. - // - if( (OUI_SUB_WMM == OUIType) && - (length >= (offset + 2 + osOuiSub.Length + 1)) ) - { // WMM-IE Matched! - u1Byte WmmSubtype = *(IEs.Octet+offset+2+sizeof(WMMTag)); - - if(WmmSubtype != OUISubType) - bIEMatched = FALSE; - } - } - } - } - else - { // Other ID: Matched! - bIEMatched = TRUE; - } - } - - if(bIEMatched && - (length >= offset + 2 + IEs.Octet[offset+1]) ) // Prevent malicious attack. - { // IE matched! break to return. - // - // Get the length of current IE. - // We also perform length checking here to pervent malicious attack. - // - switch(ID) - { - case EID_SsId: - MaxElementLen = MAX_SSID_LEN; - break; - case EID_SupRates: - MaxElementLen = 12; //Because Belkin 11AC on g Mode only has 12 Octets in this IE - break; - case EID_FHParms: - MaxElementLen = MAX_FH_PARM_LEN; - break; - case EID_DSParms: - MaxElementLen = MAX_DS_PARM_LEN; - break; - case EID_CFParms: - MaxElementLen = MAX_CF_PARM_LEN; - break; - case EID_Tim: - MaxElementLen = MAX_TIM_PARM_LEN; - break; - case EID_IbssParms: - MaxElementLen = MAX_IBSS_PARM_LEN; - break; - case EID_QBSSLoad: - MaxElementLen = MAX_QBSS_LOAD_LEN; - break; - case EID_EDCAParms: - MaxElementLen = MAX_EDCA_PARM_LEN; - break; - case EID_TSpec: - MaxElementLen = MAX_TSPEC_LEN; - break; - case EID_Schedule: - MaxElementLen = MAX_SCHEDULE_LEN; - break; - case EID_Ctext: - MaxElementLen = MAX_CTEXT_LEN; - break; - case EID_ERPInfo: - MaxElementLen = MAX_ERP_INFO_LEN; - break; - case EID_TSDelay: - MaxElementLen = MAX_TS_DELAY_LEN; - break; - case EID_TCLASProc: - MaxElementLen = MAX_TC_PROC_LEN; - break; - case EID_HTCapability: - MaxElementLen = MAX_HT_CAP_LEN; - break; - case EID_HTInfo: - MaxElementLen = MAX_HT_INFO_LEN; - break; - case EID_QoSCap: - MaxElementLen = MAX_QOS_CAP; - break; - case EID_ExtSupRates: - MaxElementLen = MAX_EXT_SUP_RATE_LEN; - break; - - case EID_WAPI: - MaxElementLen = MAX_WAPI_IE_LEN; - break; - case EID_LinkIdentifier: - MaxElementLen = MAX_LINKID_LEN; - break; - case EID_SupportedChannels: - MaxElementLen = MAX_SUPCHNL_LEN; - break; - case EID_SupRegulatory: - MaxElementLen = MAX_SUPREGULATORY_LEN; - break; - case EID_SecondaryChnlOffset: - MaxElementLen = MAX_SECONDARYOFFSET_LEN; - break; - case EID_ChnlSwitchTimeing: - MaxElementLen = MAX_CHNLSWITCHTIMING_LEN; - break; - case EID_VHTCapability: - MaxElementLen = MAX_VHT_CAP_LEN; - break; - default: - MaxElementLen = MAX_IE_LEN; - break; - } - ret.Length = (IEs.Octet[offset+1] <= MaxElementLen) ? IEs.Octet[offset+1] : MaxElementLen; - - // - // Get pointer to the first byte (ElementID and length are not included). - // - ret.Octet = IEs.Octet + offset + 2; - - break; - } - else - { // Different. - temp = IEs.Octet[offset+1]; // Get the length of current IE. - offset += (temp+2); // Jump to the position of length of next IE. (2 byte is for the ID and length field.) - } - }while(1); - - return ret; -} - - -// -// Description: -// Verify if specific IE length is valid. -// -BOOLEAN -IsIELengthValid( - IN u1Byte IDIE, - IN u1Byte IELength - ) -{ - BOOLEAN bRet = TRUE; - u1Byte MaxIELength = MAX_IE_LEN; - - switch(IDIE) - { - case EID_SsId: - MaxIELength = MAX_SSID_LEN; - break; - - case EID_SupRates: - MaxIELength = 12;//Because Belkin 11AC on g Mode only has 12 Octets in this IE - break; - - case EID_FHParms: - MaxIELength = MAX_FH_PARM_LEN; - break; - - case EID_DSParms: - MaxIELength = MAX_DS_PARM_LEN; - break; - - case EID_CFParms: - MaxIELength = MAX_CF_PARM_LEN; - break; - - case EID_Tim: - MaxIELength = MAX_TIM_PARM_LEN; - break; - - case EID_IbssParms: - MaxIELength = MAX_IBSS_PARM_LEN; - break; - - case EID_QBSSLoad: - MaxIELength = MAX_QBSS_LOAD_LEN; - break; - - case EID_EDCAParms: - MaxIELength = MAX_EDCA_PARM_LEN; - break; - - case EID_TSpec: - MaxIELength = MAX_TSPEC_LEN; - break; - - case EID_Schedule: - MaxIELength = MAX_SCHEDULE_LEN; - break; - - case EID_Ctext: - MaxIELength = MAX_CTEXT_LEN; - break; - - case EID_ERPInfo: - MaxIELength = MAX_ERP_INFO_LEN; - break; - - case EID_TSDelay: - MaxIELength = MAX_TS_DELAY_LEN; - break; - - case EID_TCLASProc: - MaxIELength = MAX_TC_PROC_LEN; - break; - - case EID_QoSCap: - MaxIELength = MAX_QOS_CAP; - break; - - case EID_ExtSupRates: - MaxIELength = MAX_EXT_SUP_RATE_LEN; - break; - - case EID_WAPI: - MaxIELength = MAX_WAPI_IE_LEN; - break; - - case EID_LinkIdentifier: - MaxIELength = MAX_LINKID_LEN; - break; - - case EID_SupportedChannels: - MaxIELength = MAX_SUPCHNL_LEN; - break; - - case EID_SupRegulatory: - MaxIELength = MAX_SUPREGULATORY_LEN; - break; - - case EID_SecondaryChnlOffset: - MaxIELength = MAX_SECONDARYOFFSET_LEN; - break; - - case EID_ChnlSwitchTimeing: - MaxIELength = MAX_CHNLSWITCHTIMING_LEN; - break; - - default: - MaxIELength = MAX_IE_LEN; - } - - if(IELength > MaxIELength) - bRet = FALSE; - - return bRet; -} - diff --git a/network/wlan/WDI/COMMON/Protocol802_11.h b/network/wlan/WDI/COMMON/Protocol802_11.h deleted file mode 100644 index 5f6e3a6c..00000000 --- a/network/wlan/WDI/COMMON/Protocol802_11.h +++ /dev/null @@ -1,1069 +0,0 @@ -#ifndef __INC_PROTOCOL802_11_H -#define __INC_PROTOCOL802_11_H - -#define MAX_DOT11_POWER_CONSTRAINT_IE_LEN 1 - -typedef struct _RT_RFD RT_RFD, *PRT_RFD; - - -// This enumeration is the list of the content appending type. -typedef u4Byte CONTENT_PKT_TYPE, *PCONTENT_PKT_TYPE; -#define CONTENT_PKT_TYPE_802_11 BIT0 -#define CONTENT_PKT_TYPE_IES BIT1 -#define CONTENT_PKT_TYPE_CLIENT BIT2 -#define CONTENT_PKT_TYPE_AP BIT3 -#define CONTENT_PKT_TYPE_IBSS BIT4 - - - -#define sAckCtsLng 112 // bits in ACK and CTS frames -#define sCrcLng 4 // octets for crc32 (FCS, ICV) -#define aSifsTime ((IS_WIRELESS_MODE_5G(Adapter)|| IS_WIRELESS_MODE_N_24G(Adapter))? 16 : 10) -#define sMacHdrLng 24 // octets in data header, no WEP -#define sMaxMpduLng 2346 - -// This value is tested by WiFi 11n Test Plan 5.2.3. -// This test verifies the WLAN NIC can update the NAV through sending the CTS with large duration. -#define WiFiNavUpperUs 30000 // 30 ms - -#define Frame_ProtocolVer(f) ( GET_80211_HDR_PROTOCOL_VERSION ((f).Octet) ) -#define Frame_Type(f) ( GET_80211_HDR_TYPE ((f).Octet) ) -#define Frame_Subtype(f) ( GET_80211_HDR_SUBTYPE ((f).Octet) ) -#define Frame_ToDS(f) ( GET_80211_HDR_TO_DS ((f).Octet) ) -#define Frame_FromDS(f) ( GET_80211_HDR_FROM_DS ((f).Octet) ) -#define Frame_MoreFrag(f) ( GET_80211_HDR_MORE_FRAG ((f).Octet) ) -#define Frame_Retry(f) ( GET_80211_HDR_RETRY ((f).Octet) ) -#define Frame_PwrMgt(f) ( GET_80211_HDR_PWR_MGNT ((f).Octet) ) -#define Frame_MoreData(f) ( GET_80211_HDR_MORE_DATA ((f).Octet) ) -#define Frame_WEP(f) ( GET_80211_HDR_WEP ((f).Octet) ) -#define Frame_Order(f) ( GET_80211_HDR_ORDER ((f).Octet) ) -#define Frame_DurID(f) ( EF2Byte( *((UNALIGNED pu2Byte)((f).Octet+2)) ) ) -#define Frame_Addr1(f) ( (f).Octet+4 ) // return pu1Byte -#define Frame_Addr2(f) ( (f).Octet+10 ) // return pu1Byte -#define Frame_Addr3(f) ( (f).Octet+16 ) // return pu1Byte -#define Frame_FragNum(f) ( GET_80211_HDR_FRAGMENT( (f).Octet )) -#define Frame_SeqNum(f) ( GET_80211_HDR_SEQUENCE( (f).Octet )) -#define Frame_Addr4(f) ( (f).Octet+24 ) // return pu1Byte -#define Frame_ValidAddr4(f) ( Frame_ToDS(f)&&Frame_FromDS(f) ) -#define Frame_ContainQc(f) ( ( IsDataFrame((f).Octet) ) && (Frame_Subtype(f) & 0x08) ) - -#define Frame_ContainHTC(f) ( (( IsQoSDataFrame((f).Octet) ) && (Frame_Order(f) & 0x1) ) || \ - (( IsMgntFrame((f).Octet) ) && (Frame_Order(f) & 0x1) ) ) - - -#define Frame_FrameBody(f) ( Frame_Addr4(f)+6*Frame_ValidAddr4(f) ) // return pu1Byte -#define Frame_FrameHdrLng(f) ( sMacHdrLng + 6*Frame_ValidAddr4(f) +2*IsQoSDataFrame((f).Octet) ) // return lenght of 802.11 data frame header. - -#define Frame_GAS_QueryReq(f) ( Frame_FrameBody(f) + 1 + 1 + 1 + 4 + 2 ) -//Category(1 byte), Action(1 byte), DialogToken(1 byte), Advertisement protocol IE(4 bytes), Query Request Length(2 bytes) - -#define Frame_GAS_QueryReq_OUI(f) ( Frame_GAS_QueryReq(f) + 2 + 2 ) -//Info ID(2 bytes), Length(2 bytes) - -#define Frame_GAS_QueryReq_Type(f) ( Frame_GAS_QueryReq_OUI(f) + 3 ) -//OUI(3 bytes) - -#define Frame_GAS_QueryRsp(f) ( Frame_FrameBody(f) + 1 + 1 + 1 + 2 + 2 + 4 + 2 ) -//Category(1 byte), Action(1 byte), DialogToken(1 byte), Status code(2 bytes), GAS Comeback Delay(2 bytes), Advertisement protocol IE(4 bytes), Query Response Length(2 bytes) - -#define Frame_GAS_QueryRsp_OUI(f) ( Frame_GAS_QueryRsp(f) + 2 + 2 ) -//Info ID(2 bytes), Length(2 bytes) - -#define Frame_GAS_QueryRsp_Type(f) ( Frame_GAS_QueryRsp_OUI(f) + 3 ) -//OUI(3 bytes) - -#define Frame_GAS_ComebackRsp(f) ( Frame_FrameBody(f) + 1 + 1 + 1 + 2 + 1 + 2 + 4 + 2 ) -//Category(1 byte), Action(1 byte), DialogToken(1 byte), Status code(2 bytes), GAS Query Response Fragment ID(1 byte), GAS Comeback Delay(2 bytes), Advertisement protocol IE(4 bytes), Query Response Length(2 bytes) - -#define Frame_GAS_ComebackRsp_OUI(f) ( Frame_GAS_ComebackRsp(f) + 2 + 2 ) -//Info ID(2 bytes), Length(2 bytes) - -#define Frame_GAS_ComebackRsp_Type(f) ( Frame_GAS_ComebackRsp_OUI(f) + 3 ) -//OUI(3 bytes) - -#define Frame_QoSTID(f, offset) (EF1Byte( *((f).Octet +offset )) & 0x0f) -#define Frame_IVKeyID(f,offset) ( EF1Byte(*((f).Octet+offset)) <<6 & 0x03) - -#define Frame_AuthAlgorithmNum(f) EF2Byte( *((UNALIGNED pu2Byte)( Frame_FrameBody(f) + (Frame_WEP(f)?4:0) )) ) -#define Frame_AuthTransactionSeqNum(f) EF2Byte( *((UNALIGNED pu2Byte)( Frame_FrameBody(f) + 2 + (Frame_WEP(f)?4:0)) ) ) -#define Frame_AuthStatusCode(f) EF2Byte( *((UNALIGNED pu2Byte)( Frame_FrameBody(f) + 4 + (Frame_WEP(f)?4:0)) ) ) -#define Frame_AuthChallengeText(f) ( Frame_FrameBody(f) + 6 + (Frame_WEP(f)?4:0) ) // return pu1Byte - -#define Frame_AssocCap(f) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(f)) ) ) -#define Frame_AssocStatusCode(f) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(f)+2) ) ) -#define Frame_AssocAID(f) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(f)+4) ) & 0x3FFF ) - -#define Frame_DeassocReasonCode(f) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(f)) ) ) -#define Frame_DeauthReasonCode(f) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(f)) ) ) - - -#define Frame_Addr1OS(a,f) { CopyMem((a).Octet, (f).Octet+4, 6); (a).Length=6; } -#define Frame_Addr2OS(a,f) { CopyMem((a).Octet, (f).Octet+10, 6); (a).Length=6; } -#define Frame_Addr3OS(a,f) { CopyMem((a).Octet, (f).Octet+16, 6); (a).Length=6; } - - -#define FillOctetString(_os,_octet,_len) \ - (_os).Octet=(pu1Byte)(_octet); \ - (_os).Length=(_len); - -#define IsFrameTypeMgnt(pframe) ( ((EF1Byte(pframe[0]) & 0x0C)==0x00) ? TRUE : FALSE ) -#define IsFrameTypeCtrl(pframe) ( ((EF1Byte(pframe[0]) & 0x0C)==0x04) ? TRUE : FALSE ) -#define IsFrameTypeData(pframe) ( ((EF1Byte(pframe[0]) & 0x0C)==0x08) ? TRUE : FALSE ) -#define IsFrameWithAddr4(pframe) ( ((EF1Byte(pframe[1]) & 0x03)==0x03) ? TRUE : FALSE ) - -#define PacketGetType(_packet) (EF1Byte((_packet).Octet[0]) & 0xFC) - -#define Frame_pRaddr(pduOS) Frame_Addr1(pduOS) -#define Frame_pTaddr(pduOS) Frame_Addr2(pduOS) - -#define Frame_pDaddr(pduOS) ( (pduOS).Octet + ( Frame_ToDS(pduOS) ? 16 : 4 ) ) -#define Frame_pSaddr(pduOS) ( (pduOS).Octet + \ - ((Frame_FromDS(pduOS) == 0) ? \ - 10 : ((Frame_ToDS(pduOS) == 0) ? \ - 16 : 24)) ) - -#define Frame_pBssid(pduOS) ( (pduOS).Octet + \ - (Frame_ToDS(pduOS) ? \ - 4 : (Frame_FromDS(pduOS) ? \ - 10 : 16)) ) - -#define FrameAction_Cat_Act(f) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(f)) ) ) - -// Time Unit (TU): 1024 us -#define sTU 1024 -// Convert TU to the unit of 4us -#define TU_TO_US4(__TU) ((__TU) << 8) -// Convert the unit of 4us to TU -#define US4_TO_TU(__US) ((__US) >> 8) - -#define MMPDU_BODY(__pMmpduBuf) ((pu1Byte)(__pMmpduBuf) + sMacHdrLng) -#define MMPDU_BODY_LEN(__mmpduLen) (((__mmpduLen) > sMacHdrLng) ? ((__mmpduLen) - sMacHdrLng) : 0) - -//---------------------------------------------------------------------------- -// 802.11 Management frame Status Code field -//---------------------------------------------------------------------------- -typedef struct _OCTET_STRING{ - pu1Byte Octet; - u2Byte Length; - BOOLEAN bDefaultStr; -}OCTET_STRING, *POCTET_STRING; - - -#define SIZE_EID_AND_LEN 2 // Size of Element ID and Length. Added by Roger, 2006.12.07. -#define SIZE_OUI 3 // Size of OUI. Added by Roger, 2006.12.07. -#define SIZE_OUI_TYPE 1 // Size of OUI type. -#define SIZE_TYPE_AND_LEN 2 // Size of "8186 Realtek Information Element" Type and Length. Added by Roger, 2006.12.07. - -// -// Max length of variable element defined in 802.11 spec. -// -#define MAX_IE_LEN 0xFF -#define MAX_SSID_LEN 32 -#define MAX_SUP_RATE_LEN 8 -#define MAX_FH_PARM_LEN 5 -#define MAX_DS_PARM_LEN 1 -#define MAX_CF_PARM_LEN 6 -#define MAX_TIM_PARM_LEN 254 -#define MAX_IBSS_PARM_LEN 2 -#define MAX_QBSS_LOAD_LEN 5 -#define MAX_EDCA_PARM_LEN 18 -#define MAX_TSPEC_LEN 55 -#define MAX_SCHEDULE_LEN 14 -#define MAX_CTEXT_LEN 253 -#define MAX_ERP_INFO_LEN 1 -#define MAX_TS_DELAY_LEN 4 -#define MAX_TC_PROC_LEN 1 -#define MAX_HT_CAP_LEN 26 -#define MAX_HT_INFO_LEN 22 -#define MAX_QOS_CAP 1 -#define MAX_EXT_SUP_RATE_LEN 255 -#define MAX_LINKID_LEN 18 -//#define MAX_EXTCAP_LEN 8 // Do not define ext capabilities length because it is a variable in 802.11 sepc. -#define MAX_SUPCHNL_LEN 127 -#define MAX_SUPREGULATORY_LEN 255 -#define MAX_SECONDARYOFFSET_LEN 1 -#define MAX_CHNLSWITCHTIMING_LEN 4 -#define DEAUTH_REASON_SIZE 2 -#define DISASSOC_REASON_SIZE 2 -#define MAX_VHT_CAP_LEN 12 -#define MAX_WAPI_IE_LEN 255 -#define MAX_MD_IE_LEN 3 -#define MAX_FT_IE_LEN 255 -#define MIN_FT_IE_LEN 82 - -static u1Byte WFA_OUI[SIZE_OUI] = {0x50, 0x6F, 0x9A}; - - -static u1Byte MAC_BROADCAST_ADDR[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - - -typedef enum _ELEMENT_ID{ - EID_SsId = 0, /* service set identifier (0:32) */ - EID_SupRates = 1, /* supported rates (1:8) */ - EID_FHParms = 2, /* FH parameter set (5) */ - EID_DSParms = 3, /* DS parameter set (1) */ - EID_CFParms = 4, /* CF parameter set (6) */ - EID_Tim = 5, /* Traffic Information Map (4:254) */ - EID_IbssParms = 6, /* IBSS parameter set (2) */ - EID_Country = 7, /* */ - - // Form 7.3.2: Information elements in 802.11E/D13.0, page 46. - EID_QBSSLoad = 11, - EID_EDCAParms = 12, - EID_TSpec = 13, - EID_TClass = 14, - EID_Schedule = 15, - // - - EID_Ctext = 16, /* challenge text*/ - EID_POWER_CONSTRAINT = 32, /* Power Constraint*/ - - //vivi for WIFITest, 802.11h AP, 20100427 - // 2010/12/26 MH The definition we can declare always!! - EID_PowerCap = 33, - EID_SupportedChannels = 36, - EID_ChlSwitchAnnounce = 37, - - EID_MeasureRequest = 38, // Measurement Request - EID_MeasureReport = 39, // Measurement Report - - EID_ERPInfo = 42, - - // Form 7.3.2: Information elements in 802.11E/D13.0, page 46. - EID_TSDelay = 43, - EID_TCLASProc = 44, - EID_HTCapability = 45, - EID_QoSCap = 46, - // - - EID_WPA2 = 48, - EID_ExtSupRates = 50, - - EID_FTIE = 55, // Defined in 802.11r - EID_Timeout = 56, // Defined in 802.11r - - EID_SupRegulatory = 59, // Supported Requlatory Classes 802.11y - EID_HTInfo = 61, - EID_SecondaryChnlOffset = 62, - EID_WAPI = 68, - - EID_BSSCoexistence = 72, // 20/40 BSS Coexistence - EID_BSSIntolerantChlReport = 73, - EID_OBSS = 74, // Overlapping BSS Scan Parameters - - EID_LinkIdentifier = 101, // Defined in 802.11z - EID_WakeupSchedule = 102, // Defined in 802.11z - EID_ChnlSwitchTimeing = 104, // Defined in 802.11z - EID_PTIControl = 105, // Defined in 802.11z - EID_PUBufferStatus = 106, // Defined in 802.11z - - EID_EXTCapability = 127, // Extended Capabilities - // From S19:Aironet IE and S21:AP IP address IE in CCX v1.13, p16 and p18. - EID_Aironet = 133, // 0x85: Aironet Element for Cisco CCX - EID_CiscoIP = 149, // 0x95: IP Address IE for Cisco CCX - - EID_CellPwr = 150, // 0x96: Cell Power Limit IE. Ref. 0x96. - - EID_CCKM = 156, - - EID_VHTCapability = 191, // Based on 802.11ac D2.0 - EID_VHTOperation = 192, // Based on 802.11ac D2.0 - EID_OpModeNotification = 199, // Based on 802.11ac D3.0 - - EID_Vendor = 221, // 0xDD: Vendor Specific -}ELEMENT_ID, *PELEMENT_ID; - -/* Action frame categories (IEEE 802.11-2007, 7.3.1.11, Table 7-24) */ -#define WLAN_ACTION_SPECTRUM_MGMT 0 -#define WLAN_ACTION_QOS 1 -#define WLAN_ACTION_DLS 2 -#define WLAN_ACTION_BLOCK_ACK 3 -#define WLAN_ACTION_PUBLIC 4 -#define WLAN_ACTION_RADIO_MEASUREMENT 5 -#define WLAN_ACTION_FT 6 -#define WLAN_ACTION_HT 7 -#define WLAN_ACTION_SA_QUERY 8 -#define WLAN_ACTION_PROTECTED_DUAL 9 -#define WLAN_ACTION_WNM 10 -#define WLAN_ACTION_UNPROTECTED_WNM 11 -#define WLAN_ACTION_TDLS 12 -#define WLAN_ACTION_WMM 17 /* WMM Specification 1.1 */ -#define WLAN_ACTION_VENDOR_SPECIFIC 127 - -/* Public action codes */ -#define WLAN_PA_20_40_BSS_COEX 0 -#define WLAN_PA_VENDOR_SPECIFIC 9 -#define WLAN_PA_GAS_INITIAL_REQ 10 -#define WLAN_PA_GAS_INITIAL_RESP 11 -#define WLAN_PA_GAS_COMEBACK_REQ 12 -#define WLAN_PA_GAS_COMEBACK_RESP 13 -#define WLAN_TDLS_DISCOVERY_RESPONSE 14 - -/* Protected Dual of Public Action frames */ -#define WLAN_PROT_DSE_ENABLEMENT 1 -#define WLAN_PROT_DSE_DEENABLEMENT 2 -#define WLAN_PROT_EXT_CSA 4 -#define WLAN_PROT_MEASUREMENT_REQ 5 -#define WLAN_PROT_MEASUREMENT_REPORT 6 -#define WLAN_PROT_DSE_POWER_CONSTRAINT 8 -#define WLAN_PROT_VENDOR_SPECIFIC 9 -#define WLAN_PROT_GAS_INITIAL_REQ 10 -#define WLAN_PROT_GAS_INITIAL_RESP 11 -#define WLAN_PROT_GAS_COMEBACK_REQ 12 -#define WLAN_PROT_GAS_COMEBACK_RESP 13 - -typedef struct _RT_DOT11_IE{ - u1Byte Id; - OCTET_STRING Content; -}RT_DOT11_IE, *PRT_DOT11_IE; - - -// -// Define the OUI sub type enumeration to distinguish WPA-IE and WMM-IE. -// Added by Annie, 2005-11-08. -// -typedef enum _OUI_SUBTYPE{ - OUI_SUB_DONT_CARE, - OUI_SUB_WPA, - OUI_SUB_WMM, - OUI_SUB_CCX_RM_CAP, // For CCX 2 S36, Radio Management Capability element, 2006.05.15, by rcnjko. - OUI_SUB_CCX_VER_NUM, // For CCX 2 S38, WLAN Device Version Number element. Annie, 2006-08-20. - OUI_SUB_REALTEK_TURBO, // (Asked by SD4). Added for 8186 AutoTurbo mode. Annie, 2005-12-27. - OUI_SUB_REALTEK_AGG, - OUI_SUB_SimpleConfig, - OUI_SUB_EPIG_IE, // 00:90:4c - OUI_SUB_11N_EWC_HT_CAP, // 00:90:4c:33 - OUI_SUB_11N_EWC_HT_INFO, // 00:90:4c:34 - OUI_SUB_11AC_EPIG_VHT_CAP, // 00:90:4c:04:08 - OUI_SUB_BROADCOM_IE_1, // 208/01/25 MH to make sure broadcom AP only - OUI_SUB_BROADCOM_IE_2, - OUI_SUB_BROADCOM_IE_3, - OUI_SUB_BROADCOM_LINKSYSE4200_IE_1, // 2012/04/28 zhiyuan to make sure Linksys E4200 AP 5G only - OUI_SUB_BROADCOM_LINKSYSE4200_IE_2, - OUI_SUB_BROADCOM_LINKSYSE4200_IE_3, - OUI_SUB_CISCO_IE, // 2008/05/12 Emily. Recognize Cisco AP - OUI_SUB_MERU_IE, - OUI_SUB_RALINK_IE, - OUI_SUB_ATHEROS_IE_1, - OUI_SUB_ATHEROS_IE_2, - OUI_SUB_WPA2GTK, - OUI_SUB_MARVELL, - OUI_SUB_AIRGO, - OUI_SUB_SSIDL, // For CCX v4 s53 SSIDL,070702 by CCW - OUI_SUB_CCX_TSM, // For CCX4 S56, Traffic Stream Metrics, 070615, by rcnjko. - OUI_SUB_CCX_SFA, // For CCX5, CCX Support Features Advertisement - OUI_SUB_CCX_DIAG_REQ_REASON, // For CCX5, CCX Diagnostic Channel Request Reason - OUI_SUB_CCX_MFP_MHDR, // For CCX5, CCX Manggement frame Header IE (MHDRIE) - - OUI_SUB_WIFI_DIRECT, - OUI_SUB_WIFI_DISPLAY, // WiFi-Display - OUI_SUB_REALTEK_TDLS, // For 802.11z TDLS realtek tag - OUI_SUB_REALTEK_BT_IOT, - OUI_SUB_REALTEK_BT_HS, - OUI_SUB_NAN, -} OUI_TYPE,*POUI_TYPE; - -// define OUI subtype for WMM and WMMSA -#define OUI_SUBTYPE_DONT_CARE 255 -#define OUI_SUBTYPE_WMM_INFO 0 -#define OUI_SUBTYPE_WMM_PARAM 1 -#define OUI_SUBTYPE_TSPEC 2 -#define OUI_SUBTYPE_QOS_CAPABI 5 -#define OUI_SUBTYPE_TCLAS 6 -#define OUI_SUBTYPE_TCLAS_PROC 7 -#define OUI_SUBTYPE_TS_DELAY 8 -#define OUI_SUBTYPE_SCHEDULE 9 -#define OUI_SUBTYPE_TSINFO 10 - -typedef enum _CAPABILITY{ - cESS = 0x0001, - cIBSS = 0x0002, - cPollable = 0x0004, - cPollReq = 0x0008, - cPrivacy = 0x0010, - cShortPreamble = 0x0020, - cPBCC = 0x0040, - cChannelAgility = 0x0080, - cSpectrumMgnt = 0x0100, - cQos = 0x0200, // For HCCA, use with CF-Pollable and CF-PollReq - cShortSlotTime = 0x0400, - cAPSD = 0x0800, - cRM = 0x1000, // RRM (Radio Request Measurement) - cDSSS_OFDM = 0x2000, - cDelayedBA = 0x4000, - cImmediateBA = 0x8000, -}CAPABILITY, *PCAPABILITY; - -typedef enum _TYPE_SUBTYPE{ - // Management Frame - Type_Asoc_Req = 0x00, - Type_Asoc_Rsp = 0x10, - Type_Reasoc_Req = 0x20, - Type_Reasoc_Rsp = 0x30, - Type_Probe_Req = 0x40, - Type_Probe_Rsp = 0x50, - Type_Beacon = 0x80, - Type_Atim = 0x90, - Type_Disasoc = 0xa0, - Type_Auth = 0xb0, - Type_Deauth = 0xc0, - Type_Action = 0xd0, - Type_Action_No_Ack = 0xe0, - - // Control Frame - Type_Beamforming_Report_Poll = 0x44, //= MkString(S8(0,0,1,0,0,0,1,0)); - Type_NDPA = 0x54,//= MkString(S8(0,0,1,0,1,0,1,0)); - Type_BlockAckReq = 0x84,//= MkString(S8(0,0,1,0,0,0,0,1)); - Type_BlockAck = 0x94,//= MkString(S8(0,0,1,0,1,0,0,1)); - Type_PS_poll = 0xa4,//= MkString(S8(0,0,1,0,0,1,0,1)); - Type_RTS = 0xb4,//= MkString(S8(0,0,1,0,1,1,0,1)); - Type_CTS = 0xc4,//= MkString(S8(0,0,1,0,0,0,1,1)); - Type_Ack = 0xd4,//= MkString(S8(0,0,1,0,1,0,1,1)); - Type_Cfend = 0xe4,//= MkString(S8(0,0,1,0,0,1,1,1)); - Type_Cfend_Ack = 0xf4,//= MkString(S8(0,0,1,0,1,1,1,1)); - - // Data Frame - Type_Data = 0x08,//= MkString(S8(0,0,0,1,0,0,0,0)); - Type_Data_Ack = 0x18,//= MkString(S8(0,0,0,1,1,0,0,0)); - Type_Data_Poll = 0x28,//= MkString(S8(0,0,0,1,0,1,0,0)); - Type_Data_Poll_Ack = 0x38,//= MkString(S8(0,0,0,1,1,1,0,0)); - Type_Null_Frame = 0x48,//= MkString(S8(0,0,0,1,0,0,1,0)); - Type_Cfack = 0x58,//= MkString(S8(0,0,0,1,1,0,1,0)); - Type_Cfpoll = 0x68,//= MkString(S8(0,0,0,1,0,1,1,0)); - Type_Cfpoll_Ack = 0x78,//= MkString(S8(0,0,0,1,1,1,1,0)); - Type_QosData = 0x88,//= MkString(S8(0,0,0,1,0,0,0,1)); - Type_QData_Ack = 0x98,//= MkString(S8(0,0,0,1,1,0,0,1)); - Type_QData_Poll = 0xa8,//= MkString(S8(0,0,0,1,0,1,0,1)); - Type_QData_Poll_Ack= 0xb8,//= MkString(S8(0,0,0,1,1,1,0,1)); - Type_QosNull = 0xc8,//= MkString(S8(0,0,0,1,0,0,1,1)); - // Note: 0xd8 is reserved in 11e/13.0. - Type_QosCfpoll = 0xe8,//= MkString(S8(0,0,0,1,0,1,1,1)); - Type_QosCfpoll_Ack = 0xf8,//= MkString(S8(0,0,0,1,1,1,1,1)); -}TYPE_SUBTYPE, *PTYPE_SUBTYPE; - - -typedef enum _ERP_T{ - ERP_NonERPpresent = 0x01, - ERP_UseProtection = 0x02, - ERP_BarkerPreambleMode = 0x04, -} ERP_T; - -typedef enum _AUTH_ALGORITHM{ - OPEN_SYSTEM = 0, - SHARED_KEY = 1, - AUTH_ALG_FT = 2, - NETWORK_EAP = 0x80, -}AUTH_ALGORITHM, *PAUTH_ALGORITHM; - -typedef enum _ACT_CATEGORY{ - ACT_CAT_SPECTRUM_MGNT = 0, // Spectrum management - ACT_CAT_QOS = 1, // Qos - ACT_CAT_DLS = 2, // Direct Link Protocol (DLS) - ACT_CAT_BA = 3, // Block Ack - ACT_CAT_PUBLIC = 4, // Public - ACT_CAT_RM = 5, // Radio Measurement (RM) - ACT_CAT_FT = 6, // Fast BSS Transition - ACT_CAT_HT = 7, // High Throughput - ACT_CAT_SAQ = 8, // Security Association Query - ACT_CAT_SAQ_PD_PUBLIC = 9, // Protected Dual of Public Action - ACT_CAT_TDLS = 12, // Tunneled Direct Link Setup - ACT_CAT_WMM = 17, // WMM - ACT_CAT_VHT = 21, // VHT - ACT_CAT_VENDOR_PROTECT = 126, // Vendor-specific Protected - ACT_CAT_VENDOR = 127, // Vendor-specific -} ACT_CATEGORY, *PACT_CATEGORY; - -typedef enum _ACT_QOS_ACTION -{ - ACT_QOS_ADDTSREQ = 0, - ACT_QOS_ADDTSRSP = 1, - ACT_QOS_DELTS = 2, - ACT_QOS_SCHEDULE = 3, -}ACT_QOS_ACTION, *PACT_QOS_ACTION; - -typedef enum _ACT_DLS_ACTION{ - ACT_DLS_REQ = 0, - ACT_DLS_RSP = 1, - ACT_DLS_TEARDOWN = 2, -} ACT_DLS_ACTION, *PACT_DLS_ACTION; - -typedef enum _BA_ACTION{ - ACT_ADDBAREQ = 0, - ACT_ADDBARSP = 1, - ACT_DELBA = 2, -} BA_ACTION, *PBA_ACTION; - -typedef enum _PUBLIC_ACTION{ - ACT_PUBLIC_BSSCOEXIST = 0, // 20/40 BSS Coexistence - ACT_PUBLiC_MP = 7, // Measurement Pilot - ACT_PUBLIC_TDLS_DISCOVERYRSP = 14, -}PUBLIC_ACTION, *PPUBLIC_ACTION; - -typedef enum _HT_ACTION{ - ACT_RECOMMAND_WIDTH = 0, - ACT_MIMO_PWR_SAVE = 1, - ACT_PSMP = 2, - ACT_SET_PCO_PHASE = 3, - ACT_MIMO_CHL_MEASURE = 4, - ACT_RECIPROCITY_CORRECT = 5, - ACT_MIMO_CSI_MATRICS = 6, - ACT_MIMO_NOCOMPR_STEER = 7, - ACT_MIMO_COMPR_STEER = 8, - ACT_ANTENNA_SELECT = 9, -} HT_ACTION, *PHT_ACTION; - -// SA Query Action frame -typedef enum _SA_ACTION{ - ACT_SA_REQ = 0, - ACT_SA_RSP = 1, -} SA_ACTION, *PSA_ACTION; - - -typedef enum _RM_ACTION{ - ACT_RM_REQUEST = 0, // Radio Measurement Request - ACT_RM_REPORT = 1, // Radio Measurement Report - ACT_RM_LINK_MEASURE_REQUEST = 2, // Link Measurement Request - ACT_RM_LINK_MEASURE_REPORT = 3, // Link Measurement Report - ACT_RM_NEIGHBOR_RRT_REQUEST = 4, // Neighbor Report Request - ACT_RM_NEIGHBOT_RPT_RESPONSE = 5, // Neighbor Report Response -}RM_ACTION, *PRM_ACTION; - -typedef enum _TDLS_ACTION{ - ACT_TDLS_SETUPREQ = 0, - ACT_TDLS_SETUPRSP = 1, - ACT_TDLS_SETUPCONFIRM = 2, - ACT_TDLS_TEARDOWN = 3, - ACT_TDLS_PEERTRAFFICIND = 4, - ACT_TDLS_CHNLSWITCHREQ = 5, - ACT_TDLS_CHNLSWITCHRSP = 6, - ACT_TDLS_PEERPSMREQ = 7, - ACT_TDLS_PEERPSMRSP = 8, - ACT_TDLS_PEERTRAFFICRSP = 9, - ACT_TDLS_DISCOVERYREQ = 10, - ACT_TDLS_MAX = 11, -}TDLS_ACTION, *PTDLS_ACTION; - - -// -// WMM Management Action Frame Codes -// -typedef enum _ACTION_CODE{ - ADDTS_REQ = 0, - ADDTS_RSP = 1, - DELTS = 2, -}ACTION_CODE, *PACTION_CODE; - -typedef enum _VHT_ACTION{ - ACT_VHT_COMPRESSED_BEAMFORMING = 0, - ACT_VHT_GROUPID_MANAGEMENT = 1, - ACT_VHT_OPMODE_NOTIFICATION = 2, -}VHT_ACTION, *PVHT_ACTION; - - -// Driver Defined Action Frame Type -typedef enum _ACT_PKT_TYPE -{ - ACT_PKT_TYPE_UNKNOWN, // Invalid or unrecognized frame - - // Qos (0x1) - ACT_PKT_QOS_ADDTSREQ, - ACT_PKT_QOS_ADDTSRSP, - ACT_PKT_QOS_DELTS, - ACT_PKT_QOS_SCHEDULE, - // DLS (0x2) - ACT_PKT_DLS_DLSREQ, - ACT_PKT_DLS_DLSRSP, - ACT_PKT_DLS_DLSTEARDOWN, - // BA (0x3) - ACT_PKT_BA_ADDBAREQ, - ACT_PKT_BA_ADDBARSP, - ACT_PKT_BA_DELBA, - // Public (0x4) - ACT_PKT_BSS_COEXIST, - ACT_PKT_TDLS_DISC_RSP, - ACT_PKT_P2P_GO_NEG_REQ, // P2P Go Negotiation Request - ACT_PKT_P2P_GO_NEG_RSP, // P2P Go Negotiation Response - ACT_PKT_P2P_GO_NEG_CONF, // P2P Go Negotiation Confirm - ACT_PKT_P2P_INVIT_REQ, // P2P Invitation Request - ACT_PKT_P2P_INVIT_RSP, // P2P Invitation Response - ACT_PKT_P2P_DEV_DISCOVERABILITY_REQ, // P2P Device Discoverability Request - ACT_PKT_P2P_DEV_DISCOVERABILITY_RSP, // P2P Device Discoverability Response - ACT_PKT_P2P_PROV_DISC_REQ, - ACT_PKT_P2P_PROV_DISC_RSP, - ACT_PKT_NAN_SDF, - ACT_PKT_GAS_INT_REQ, - ACT_PKT_GAS_INT_RSP, - ACT_PKT_GAS_COMEBACK_REQ, - ACT_PKT_GAS_COMEBACK_RSP, - // Radio Resource Measurement (0x5) - ACT_PKT_RM_RM_REQ, // Radio Measurement Request - ACT_PKT_RM_RM_RPT, // Radio Measurement Report - ACT_PKT_RM_LM_REQ, // Link Measurement Request - ACT_PKT_RM_LM_RPT, // Link Measurement Report - ACT_PKT_RM_NR_REQ, // Neighbor Report Request - ACT_PKT_RM_NR_RSP, // Neighbor Report Response - // High Throughput (0x7) - ACT_PKT_HT_NOTI_CHNL_WIDTH, // Notify Channel Width - ACT_PKT_HT_SM_PS, // SM Power Save - ACT_PKT_HT_PSMP, // PSMP - ACT_PKT_HT_SET_PCO_PHASE, // Set PCO Phase - ACT_PKT_HT_CSI, // CSI - ACT_PKT_HT_NON_COMPRESSED_BEAMFORMING, // Noncompressed Beamforming - ACT_PKT_HT_COMPRESSED_BEAMFORMING, // Compressed Beamforming - ACT_PKT_HT_ASEL_FEEDBACK, // ASEL Indices Feedback - // SA Query (0x8) - ACT_PKT_SA_QUERY_REQ, // SA query request - ACT_PKT_SA_QUERY_RSP, // Sa query response - // TDLS-11z (0x0C) - ACT_PKT_TDLS_REQ, - ACT_PKT_TDLS_RSP, - ACT_PKT_TDLS_CONFIRM, - ACT_PKT_TDLS_TEARDOWN, - ACT_PKT_TDLS_PEER_TRAFIC_IND, - ACT_PKT_TDLS_CHNL_SW_REQ, - ACT_PKT_TDLS_CHNL_SW_RSP, - ACT_PKT_TDLS_PEER_PSM_REQ, - ACT_PKT_TDLS_PEER_PSM_RSP, - ACT_PKT_TDLS_PEER_TRAFIC_RSP, - ACT_PKT_TDLS_DISC_REQ, - // WMM (0x11) - ACT_PKT_WMM_ADDTSREQ, - ACT_PKT_WMM_ADDTSRSP, - ACT_PKT_WMM_DELTS, - // VHT (0x15) - ACT_PKT_VHT_COMPRESSED_BEAMFORMING, - ACT_PKT_VHT_GROUPID_MANAGEMENT, - ACT_PKT_VHT_OPMODE_NOTIFICATION, - //Vendor Specific (0x7F) - ACT_PKT_P2P_NOA, - ACT_PKT_P2P_PRESENCE_REQ, - ACT_PKT_P2P_PRESENCE_RSP, - ACT_PKT_P2P_GO_DISCOVERABILITY_REQ, -}ACT_PKT_TYPE, *PACT_PKT_TYPE; - -// Encapsulated data frame type -typedef enum _ENCAP_DATA_PKT_TYPE -{ - ENCAP_DATA_PKT_UNKNOWN = 0, - - // TDLS - ENCAP_DATA_PKT_TDLS_SETUP_REQ, // TDLS Setup Request - ENCAP_DATA_PKT_TDLS_SETUP_RSP, // TDLS Setup Response - ENCAP_DATA_PKT_TDLS_SETUP_CONFIRM, // TDLS Setup Confirm - ENCAP_DATA_PKT_TDLS_TEARDOWN, // TDLS Teardown - ENCAP_DATA_PKT_TDLS_TRAFFIC_INDI, // TDLS Peer Traffic Indication - ENCAP_DATA_PKT_TDLS_CHNL_SW_REQ, // TDLS Channel Switch Request - ENCAP_DATA_PKT_TDLS_CHNL_SW_RSP, // TDLS Channel Switch Response - ENCAP_DATA_PKT_TDLS_PSM_REQ, // TDLS Peer PSM Request - ENCAP_DATA_PKT_TDLS_PSM_RSP, // TDLS Peer PSM Response - ENCAP_DATA_PKT_TDLS_TRAFFIC_RSP, // TDLS Peer Traffic Response - ENCAP_DATA_PKT_TDLS_DISC_REQ, // TDLS Discovery Request - ENCAP_DATA_PKT_TDLS_PROBE_REQ, // TDLS Probe request - ENCAP_DATA_PKT_TDLS_PROBE_RSP, // TDLS Probe response - - // CCX IAPP - ENCAP_DATA_PKT_CCX_IAPP, // CCX IAPP -}ENCAP_DATA_PKT_TYPE, *PENCAP_DATA_PKT_TYPE; - -// -// Pattern structure for pattern parser. -// -typedef struct _PKT_PATTERN_MAP -{ - u4Byte PktType; // Packet Type - u2Byte PatternLen; // The length in byte of the Pattern - pu1Byte Pattern; // Point to the pattern array -}PKT_PATTERN_MAP, *PPKT_PATTERN_MAP; - -// -// Packet and IE offset map -// -typedef struct _PKT_IE_OFFSET_MAP -{ - u4Byte PktType; // Packet Type - u2Byte IeOffset; // IE Offset -}PKT_IE_OFFSET_MAP, *PPKT_IE_OFFSET_MAP; - - -#define SET_80211_HDR_PROTOCOL_VERSION(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 0, 2, _val) -#define SET_80211_HDR_TYPE(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 2, 2, _val) -#define SET_80211_HDR_SUBTYPE(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 4, 4, _val) -#define SET_80211_HDR_TO_DS(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 8, 1, _val) -#define SET_80211_HDR_FROM_DS(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 9, 1, _val) -#define SET_80211_HDR_MORE_FRAG(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 10, 1, _val) -#define SET_80211_HDR_RETRY(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 11, 1, _val) -#define SET_80211_HDR_PWR_MGNT(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 12, 1, _val) -#define SET_80211_HDR_MORE_DATA(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 13, 1, _val) -#define SET_80211_HDR_WEP(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 14, 1, _val) -#define SET_80211_HDR_ORDER(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 15, 1, _val) -#define SET_80211_HDR_QOS_EN(_hdr, _val) SET_BITS_TO_LE_2BYTE(_hdr, 7, 1, _val) - -#define GET_80211_HDR_PROTOCOL_VERSION(_hdr) LE_BITS_TO_2BYTE(_hdr, 0, 2) -#define GET_80211_HDR_TYPE(_hdr) LE_BITS_TO_2BYTE(_hdr, 2, 2) -#define GET_80211_HDR_SUBTYPE(_hdr) LE_BITS_TO_2BYTE(_hdr, 4, 4) -#define GET_80211_HDR_TO_DS(_hdr) LE_BITS_TO_2BYTE(_hdr, 8, 1) -#define GET_80211_HDR_FROM_DS(_hdr) LE_BITS_TO_2BYTE(_hdr, 9, 1) -#define GET_80211_HDR_MORE_FRAG(_hdr) LE_BITS_TO_2BYTE(_hdr, 10, 1) -#define GET_80211_HDR_RETRY(_hdr) LE_BITS_TO_2BYTE(_hdr, 11, 1) -#define GET_80211_HDR_PWR_MGNT(_hdr) LE_BITS_TO_2BYTE(_hdr, 12, 1) -#define GET_80211_HDR_MORE_DATA(_hdr) LE_BITS_TO_2BYTE(_hdr, 13, 1) -#define GET_80211_HDR_WEP(_hdr) LE_BITS_TO_2BYTE(_hdr, 14, 1) -#define GET_80211_HDR_ORDER(_hdr) LE_BITS_TO_2BYTE(_hdr, 15, 1) -#define GET_80211_HDR_QOS_EN(_hdr) LE_BITS_TO_2BYTE(_hdr, 7, 1) - -#define SET_80211_HDR_FRAME_CONTROL(_hdr, _val) WriteEF2Byte(_hdr, _val) -#define SET_80211_HDR_TYPE_AND_SUBTYPE(_hdr, _val) WriteEF1Byte(_hdr, _val) - - -// Byte[0] BIT7 in Frame Control is reserved for QoS. Added by Annie, 2005-12-02. -#define FC_QOS_BIT BIT7 - -// Byte[0] BIT6 in Frame Control seems to be reserved for "No Data". Added by Annie, 2006-01-06. -#define FC_NO_DATA_BIT BIT6 - - - - -#define FRAME_OFFSET_FRAME_CONTROL 0 -#define FRAME_OFFSET_DURATION 2 -#define FRAME_OFFSET_ADDRESS1 4 -#define FRAME_OFFSET_ADDRESS2 10 -#define FRAME_OFFSET_ADDRESS3 16 -#define FRAME_OFFSET_SEQUENCE 22 -#define FRAME_OFFSET_ADDRESS4 24 - -#define SET_80211_HDR_DURATION(_hdr, _val) \ - WriteEF2Byte((pu1Byte)(_hdr)+FRAME_OFFSET_DURATION, _val) -#define SET_80211_HDR_ADDRESS1(_hdr, _val) \ - cpMacAddr((pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS1, (pu1Byte)(_val)) -#define SET_80211_HDR_ADDRESS2(_hdr, _val) \ - cpMacAddr((pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS2, (pu1Byte)(_val)) -#define SET_80211_HDR_ADDRESS3(_hdr, _val) \ - cpMacAddr((pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS3, (pu1Byte)(_val)) -#define SET_80211_HDR_FRAGMENT_SEQUENCE(_hdr, _val) \ - WriteEF2Byte((pu1Byte)(_hdr)+FRAME_OFFSET_SEQUENCE, _val) -#define SET_80211_HDR_ADDRESS4(_hdr, _val) \ - cpMacAddr((pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS4, (pu1Byte)(_val)) -#define GET_80211_HDR_DURATION(_hdr) \ - ReadEF2Byte((pu1Byte)(_hdr)+FRAME_OFFSET_DURATION) -#define GET_80211_HDR_ADDRESS1(_hdr, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS1) -#define GET_80211_HDR_ADDRESS2(_hdr, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS2) -#define GET_80211_HDR_ADDRESS3(_hdr, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS3) -#define GET_80211_HDR_FRAGMENT_SEQUENCE(_hdr) \ - ReadEF2Byte((pu1Byte)(_hdr)+FRAME_OFFSET_SEQUENCE) -#define GET_80211_HDR_ADDRESS4(_hdr, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_hdr)+FRAME_OFFSET_ADDRESS4) - -#define SET_80211_HDR_FRAGMENT(_hdr, _val) SET_BITS_TO_LE_2BYTE(((pu1Byte)(_hdr))+FRAME_OFFSET_SEQUENCE, 0, 4, _val) -#define SET_80211_HDR_SEQUENCE(_hdr, _val) SET_BITS_TO_LE_2BYTE(((pu1Byte)(_hdr))+FRAME_OFFSET_SEQUENCE, 4, 12, _val) -#define GET_80211_HDR_FRAGMENT(_hdr) LE_BITS_TO_2BYTE(((pu1Byte)(_hdr))+FRAME_OFFSET_SEQUENCE, 0, 4) -#define GET_80211_HDR_SEQUENCE(_hdr) LE_BITS_TO_2BYTE(((pu1Byte)(_hdr))+FRAME_OFFSET_SEQUENCE, 4, 12) - -// -// PS Poll packet. -// -// Revised by Bruce for 802.11 layer packet. -#define SET_80211_PS_POLL_AID(_hdr, _val) WriteEF2Byte(((pu1Byte)(_hdr))+2, _val) -#define GET_80211_PS_POLL_AID(_hdr) ReadEF2Byte(((pu1Byte)(_hdr))+2) -#define SET_80211_PS_POLL_BSSID(_hdr, _val) cpMacAddr(((pu1Byte)(_hdr))+4, (pu1Byte)(_val)) -#define GET_80211_PS_POLL_BSSID(_hdr, _val) cpMacAddr((pu1Byte)(_val), ((pu1Byte)(_hdr))+4) -#define SET_80211_PS_POLL_TA(_hdr, _val) cpMacAddr(((pu1Byte)(_hdr))+10, (pu1Byte)(_val)) -#define GET_80211_PS_POLL_TA(_hdr, _val) cpMacAddr((pu1Byte)(_val), ((pu1Byte)(_hdr))+10) - -// -// Beacon/Probe Response frame. -// -#define GET_BEACON_PROBE_RSP_TIME_STAMP_LOW(__pHeader) ReadEF4Byte(((pu1Byte)(__pHeader)) + 24) -#define SET_BEACON_PROBE_RSP_TIME_STAMP_LOW(__pHeader, __Value) WriteEF4Byte(((pu1Byte)(__pHeader)) + 24, __Value) - -#define GET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(__pHeader) ReadEF4Byte(((pu1Byte)(__pHeader)) + 28) -#define SET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(__pHeader, __Value) WriteEF4Byte(((pu1Byte)(__pHeader)) + 28, __Value) - -#define GET_BEACON_PROBE_RSP_BEACON_INTERVAL(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 32) -#define SET_BEACON_PROBE_RSP_BEACON_INTERVAL(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 32, __Value) - -#define GET_BEACON_PROBE_RSP_CAPABILITY_INFO(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 34) -#define SET_BEACON_PROBE_RSP_CAPABILITY_INFO(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 34, __Value) -#define UNION_BEACON_PROBE_RSP_CAPABILITY_INFO(__pHeader, __Value) \ - SET_BEACON_PROBE_RSP_CAPABILITY_INFO(\ - __pHeader, \ - (GET_BEACON_PROBE_RSP_CAPABILITY_INFO(__pHeader) | (__Value))) - -#define MASK_BEACON_PROBE_RSP_CAPABILITY_INFO(__pHeader, __Value) \ - SET_BEACON_PROBE_RSP_CAPABILITY_INFO(\ - __pHeader, \ - (GET_BEACON_PROBE_RSP_CAPABILITY_INFO(__pHeader) & (~(__Value)))) - -// -// Authentication frame. -// -#define GET_AUTH_FRAME_AUTH_ALG_NUM(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 24) -#define SET_AUTH_FRAME_AUTH_ALG_NUM(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 24, __Value) - -#define GET_AUTH_FRAME_AUTH_SEQ_NUM(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 26) -#define SET_AUTH_FRAME_AUTH_SEQ_NUM(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 26, __Value) - -#define GET_AUTH_FRAME_STATUS_CODE(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 28) -#define SET_AUTH_FRAME_STATUS_CODE(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 28, __Value) - -#define GET_AUTH_FRAME_CHALLENG_TEXT(__pHeader) (((pu1Byte)(__pHeader)) + 30) - -// -// Associate Request frame. -// -#define GET_ASOC_REQ_CAPABILITY_INFO(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 24) -#define SET_ASOC_REQ_CAPABILITY_INFO(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 24, __Value) - -#define GET_ASOC_REQ_LISTEN_INTERVAL(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 26) -#define SET_ASOC_REQ_LISTEN_INTERVAL(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 26, __Value) - -// -// Associate Reponse frame. -// -#define GET_ASOC_RSP_CAPABILITY_INFO(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 24) -#define SET_ASOC_RSP_CAPABILITY_INFO(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 24, __Value) - -#define GET_ASOC_RSP_STATUS_CODE(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 26) -#define SET_ASOC_RSP_STATUS_CODE(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 26, __Value) - -#define GET_ASOC_RSP_AID(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 28) -#define SET_ASOC_RSP_AID(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 28, __Value) - -// -// ReAssociation Request -// -#define GET_REASOC_REQ_CAPABILITY_INFO(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 24) -#define SET_REASOC_REQ_CAPABILITY_INFO(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 24, __Value) - -#define GET_REASOC_REQ_LISTEN_INTERVAL(__pHeader) ReadEF2Byte(((pu1Byte)(__pHeader)) + 26) -#define SET_REASOC_REQ_LISTEN_INTERVAL(__pHeader, __Value) WriteEF2Byte(((pu1Byte)(__pHeader)) + 26, __Value) - -#define GET_REASOC_REQ_CURR_AP_ADDR(__pHeader) (((pu1Byte)(__pHeader)) + 28) - -// -// Management action frame -// -#define GET_ACTFRAME_CATEGORY_CODE(__pHeader) ReadEF1Byte( ((pu1Byte)(__pHeader)) + 24) -#define SET_ACTFRAME_CATEGORY_CODE(__pHeader, __Value) WriteEF1Byte( ((pu1Byte)(__pHeader)) + 24, __Value) - -#define GET_ACTFRAME_ACTION_CODE(__pHeader) ReadEF1Byte( ((pu1Byte)(__pHeader)) + 25) -#define SET_ACTFRAME_ACTION_CODE(__pHeader, __Value) WriteEF1Byte( ((pu1Byte)(__pHeader)) + 25, __Value) - -#define GET_ACTFRAME_DIALOG_TOKEN(__pHeader) ReadEF1Byte( ((pu1Byte)(__pHeader)) + 26) -#define SET_ACTFRAME_DIALOG_TOKEN(__pHeader, __Value) WriteEF1Byte( ((pu1Byte)(__pHeader)) + 26, __Value) - -#define GET_ACTFRAME_STATUS_CODE(__pHeader) ReadEF1Byte( ((pu1Byte)(__pHeader)) + 27) -#define SET_ACTFRAME_STATUS_CODE(__pHeader, __Value) WriteEF1Byte( ((pu1Byte)(__pHeader)) + 27, __Value) - -#define MIN_ACTION_SA_QUERY_FRAME_LEN 28 -#define GET_ACTFRAME_SA_QUERY_ID(__pHeader) ReadEF2Byte( ((pu1Byte)(__pHeader)) + 26) -#define SET_ACTFRAME_SA_QUERY_ID(__pHeader, __Value) WriteEF2Byte( ((pu1Byte)(__pHeader)) + 26, __Value) - - - -#define SET_SSID_DUMMY(_pSsid, __SsidLen) \ -{ \ - PlatformZeroMemory(_pSsid, MAX_SSID_LEN); \ - __SsidLen = MAX_SSID_LEN; \ -} - -// -// ARP packet -// -// LLC Header -#define GET_ARP_PKT_LLC_TYPE(__pHeader) ReadEF2Byte( ((pu1Byte)(__pHeader)) + 6) - -//ARP element -#define GET_ARP_PKT_OPERATION(__pHeader) ReadEF2Byte( ((pu1Byte)(__pHeader)) + 6) -#define GET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr((pu1Byte)(_val), ((pu1Byte)(__pHeader))+8) -#define GET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr((pu1Byte)(_val), ((pu1Byte)(__pHeader))+14) -#define GET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr((pu1Byte)(_val), ((pu1Byte)(__pHeader))+18) - -#define SET_ARP_PKT_HW(__pHeader, __Value) WriteEF2Byte( ((pu1Byte)(__pHeader)) + 0, __Value) -#define SET_ARP_PKT_PROTOCOL(__pHeader, __Value) WriteEF2Byte( ((pu1Byte)(__pHeader)) + 2, __Value) -#define SET_ARP_PKT_HW_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((pu1Byte)(__pHeader)) + 4, __Value) -#define SET_ARP_PKT_PROTOCOL_ADDR_LEN(__pHeader, __Value) WriteEF1Byte( ((pu1Byte)(__pHeader)) + 5, __Value) -#define SET_ARP_PKT_OPERATION(__pHeader, __Value) WriteEF2Byte( ((pu1Byte)(__pHeader)) + 6, __Value) -#define SET_ARP_PKT_SENDER_MAC_ADDR(__pHeader, _val) cpMacAddr(((pu1Byte)(__pHeader))+8, (pu1Byte)(_val)) -#define SET_ARP_PKT_SENDER_IP_ADDR(__pHeader, _val) cpIpAddr(((pu1Byte)(__pHeader))+14, (pu1Byte)(_val)) -#define SET_ARP_PKT_TARGET_MAC_ADDR(__pHeader, _val) cpMacAddr(((pu1Byte)(__pHeader))+18, (pu1Byte)(_val)) -#define SET_ARP_PKT_TARGET_IP_ADDR(__pHeader, _val) cpIpAddr(((pu1Byte)(__pHeader))+24, (pu1Byte)(_val)) - - -#define MAX_NUM_RATES 264 // Max num of support rates element: 8, Max num of ext. support rate: 255. 061122, by rcnjko. - - -BOOLEAN -EqualOS( - IN OCTET_STRING os1, - IN OCTET_STRING os2 - ); - -BOOLEAN -IsSSIDAny( - IN OCTET_STRING ssid - ); - -BOOLEAN -IsSSIDDummy( - IN OCTET_STRING ssid - ); - -BOOLEAN -IsSSIDNdisTest( - IN OCTET_STRING ssid - ); - -ACT_PKT_TYPE -PacketGetActionFrameType( - IN POCTET_STRING posMpdu - ); - -ENCAP_DATA_PKT_TYPE -PacketGetEncapDataFrameType( - IN POCTET_STRING posDataContent - ); - -BOOLEAN -PacketCheckIEValidity( - IN OCTET_STRING packet, - IN PRT_RFD pRfd - ); - -BOOLEAN -PacketGetIeOffset( - IN POCTET_STRING posMpdu, - OUT pu2Byte pOffset - ); - -u1Byte -PacketGetElementNum( - IN OCTET_STRING packet, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ); - -OCTET_STRING -PacketGetElement( - IN OCTET_STRING packet, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ); - -VOID -PacketMakeElement( - IN POCTET_STRING packet, - IN ELEMENT_ID ID, - IN OCTET_STRING info - ); - -VOID -PacketAppendData( - IN POCTET_STRING packet, - IN OCTET_STRING data - ); - -BOOLEAN -TimGetBcMcBit( - IN OCTET_STRING Tim - ); - -BOOLEAN -TimGetAIDBit( - IN OCTET_STRING Tim, - IN u2Byte AID - ); - -u2Byte -ComputeTxTime( - IN u2Byte FrameLength, - IN u4Byte DataRate, - IN BOOLEAN bManagementFrame, - IN BOOLEAN bShortPreamble - ); - - -BOOLEAN -IsHiddenSsid( - OCTET_STRING ssid - ); - -BOOLEAN -BeHiddenSsid( - pu1Byte ssidbuf, - u1Byte ssidlen - ); - -BOOLEAN -NullSSID( - OCTET_STRING bcnPkt - ); - -BOOLEAN -CompareSSID( - pu1Byte ssidbuf1, - u2Byte ssidlen1, - pu1Byte ssidbuf2, - u2Byte ssidlen2 -); - -#define CopySsid(__pDstBuf, __DstLen, __pSrcBuf, __SrcLen) \ - {(__DstLen) = ( ((__SrcLen) > MAX_SSID_LEN) ? MAX_SSID_LEN : (__SrcLen) ); \ - CopyMem((__pDstBuf), (__pSrcBuf), (__DstLen));} - -#define CopySsidOS(__osDst, __osSrc) \ - CopySsid((__osDst).Octet, (__osDst).Length, (__osSrc).Octet, (__osSrc).Length) - -u1Byte -ComputeAckRate( - IN OCTET_STRING BSSBasicRateSet, - IN u1Byte DataRate - ); - -BOOLEAN -HasNextIE( - IN POCTET_STRING posMpdu, - IN u4Byte Offset - ); - -RT_DOT11_IE -AdvanceToNextIE( - IN POCTET_STRING posMpdu, - IN OUT pu4Byte pOffset - ); - -u1Byte -IEGetElementNum( - IN OCTET_STRING IEs, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ); - -OCTET_STRING -IEGetElement( - IN OCTET_STRING IEs, - IN ELEMENT_ID ID, - IN OUI_TYPE OUIType, - IN u1Byte OUISubType - ); - -BOOLEAN -IsIELengthValid( - IN u1Byte IDIE, - IN u1Byte IELength - ); - -BOOLEAN -IsSSIDNdisTest( - IN OCTET_STRING ssid - ); - -#endif // #ifndef __INC_PROTOCOL802_11_H - diff --git a/network/wlan/WDI/COMMON/QosGen.c b/network/wlan/WDI/COMMON/QosGen.c deleted file mode 100644 index dba375ef..00000000 --- a/network/wlan/WDI/COMMON/QosGen.c +++ /dev/null @@ -1,2359 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "QosGen.tmh" -#endif - -//============================================================================= -// Public function for Debugging Qos. -//============================================================================= -#if DBG -// -// Description: -// Dump the TSPEC IE content. -// -VOID -QosParsingDebug_TspecIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer - ) -{ - pu1Byte pIe = pOsBuffer->Octet; - - RT_TRACE( COMP_QOS, DBG_LOUD, ("======= TSPEC IE =======\n")); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("TrafficType: %d\n", GET_TSPEC_TSINFO_TRAFFIC_TYPE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("TSID: %d\n", GET_TSPEC_TSINFO_TSID(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("Direction: %d\n", GET_TSPEC_TSINFO_DIRECTION(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("AccessPolicy: %d\n", GET_TSPEC_TSINFO_ACCESS_POLICY(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("Aggregation: %d\n", GET_TSPEC_TSINFO_AGGREGATION(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("PSB: %d\n", GET_TSPEC_TSINFO_PSB(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("UP: %d\n", GET_TSPEC_TSINFO_UP(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("AckPolicy: %d\n", GET_TSPEC_TSINFO_ACK_POLICY(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("Schedule: %d\n", GET_TSPEC_TSINFO_SCHEDULE(pIe) )); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("NominalMsduSize: %d\n", GET_TSPEC_NOMINAL_MSDU_SIZE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MaxMsduSize: %d\n", GET_TSPEC_MAX_MSDU_SIZE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MinServiceInterval: %d\n", GET_TSPEC_MIN_SERVICE_INTERVAL(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MaxServiceInterval: %d\n", GET_TSPEC_MAX_SERVICE_INTERVAL(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("InactivityInterval: %d\n", GET_TSPEC_INACTIVITY_INTERVAL(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("SupensionInterval: %d\n", GET_TSPEC_SUSPENSION_INTERVAL(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("ServiceStartTime: %d\n", GET_TSPEC_SERVICE_START_TIME(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MinDataRate: %d\n", GET_TSPEC_MIN_DATA_RATE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MeanDataRate: %d\n", GET_TSPEC_MEAN_DATA_RATE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("PeakDataRate: %d\n", GET_TSPEC_PEAK_DATA_RATE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MaxBurstSize: %d\n", GET_TSPEC_MAX_BURST_SIZE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("DelayBound: %d\n", GET_TSPEC_DELAY_BOUND(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MinPhyRate: %d\n", GET_TSPEC_MIN_PHY_RATE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("SurplusBandwith: %d\n", GET_TSPEC_SURPLUS_BANDWITH_ALLOWANCE(pIe) )); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MediumTime: %d\n", GET_TSPEC_MEDIUM_TIME(pIe) )); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("===== end of TSPEC IE =====\n")); -} - -// -// Description: -// Dump the TSRS IE content -// -VOID -QosParsingDebug_TsrsIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer - ) -{ - - u1Byte TSID; - u1Byte Length; - u1Byte i; - u1Byte rate; - - RT_TRACE( COMP_QOS, DBG_LOUD, ("======= TSRS IE =======\n")); - - Length = (*(pOsBuffer->Octet + 1)) - 5; - TSID = *(pOsBuffer->Octet + 6); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("TSID: %d\n", TSID)); - for (i = 0; i < Length; i ++) - { - rate = *(pOsBuffer->Octet + 7 + i); - RT_TRACE( COMP_QOS, DBG_LOUD, ("Rate: 0x%x\n", rate)); - } - - RT_TRACE( COMP_QOS, DBG_LOUD, ("===== end of TSRS IE =====\n")); - -} - -// -// Description: -// Dump the MSDU Lifetime IE content -// -VOID -QosParsingDebug_MsduLifetimeIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer - ) -{ - u1Byte TSID; - u2Byte MsduLifetime; - - RT_TRACE( COMP_QOS, DBG_LOUD, ("======= MSDU Lifetime IE =======\n")); - - TSID = *(pOsBuffer->Octet+6); - MsduLifetime = N2H2BYTE( *((UNALIGNED pu2Byte)(pOsBuffer->Octet+7)) ); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("TSID: %d\n", TSID)); - RT_TRACE( COMP_QOS, DBG_LOUD, ("MsduLifetime: %d\n", MsduLifetime)); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("===== end of MSDU Lifetime IE =====\n")); - -} - -#endif - -// -// Initialize QoS parameters. -// Ref: RTL8185B_InitQoSPara() in 8185 QoS code. -// -VOID -QosInitializeSTA( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - u1Byte szQoSOUI[] = {0x00, 0x50, 0xf2, 0x02}; - - pStaQos->CurrentQosMode = QOS_DISABLE; - - pStaQos->bInServicePeriod = FALSE; //[APSD] Isaiah 2006-07-24 - PlatformZeroMemory( pStaQos->WMMIEBuf, sizeof(pStaQos->WMMIEBuf) ); - pStaQos->WMMIE.Octet = pStaQos->WMMIEBuf; - pStaQos->WMMIE.Length = 0; - pStaQos->pWMMInfoEle = pStaQos->WMMIEBuf; - - // Default OUI & type: 00-50-F2-02 -// CopyMem( pStaQos->WMMIE.Octet, szQoSOUI, 4 ); - PlatformMoveMemory(pStaQos->WMMIE.Octet, szQoSOUI, 4); - SET_WMM_INFO_ELE_OUI_SUBTYPE(pStaQos->pWMMInfoEle, 0x00); // WMM-IE - SET_WMM_INFO_ELE_VERSION(pStaQos->pWMMInfoEle, 0x01); - SET_WMM_INFO_ELE_QOS_INFO_FIELD(pStaQos->pWMMInfoEle,0); - - pStaQos->WMMIE.Length = 7; - - // Decide ACM method. Annie, 2005-12-13. - pStaQos->AcmMethod = eAcmWay2_SW; - - // Reset TStream related, 070614, by rcnjko. - QosResetAllTs(Adapter); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosInitializeSTA(): pStaQos->CurrentQosMode = %d\n", pStaQos->CurrentQosMode ) ); -} - -// -// Deinitialize all resources allocated at QosInitializeSTA -// -VOID -QosDeinitializeSTA( - IN PADAPTER Adapter - ) -{ - QosRemoveAllTs(Adapter); -} - - - -VOID -QosInitializeBssDesc( - IN PBSS_QOS pBssQos - ) -{ - //RT_TRACE( COMP_QOS, DBG_LOUD, ("QosInitializeBssDesc()\n") ); - - pBssQos->bdQoSMode = QOS_DISABLE; - - PlatformZeroMemory( pBssQos->bdWMMIEBuf, sizeof(pBssQos->bdWMMIEBuf) ); - pBssQos->bdWMMIE.Octet = pBssQos->bdWMMIEBuf; - pBssQos->bdWMMIE.Length = 0; - - pBssQos->EleSubType = QOSELE_TYPE_INFO; - pBssQos->pWMMInfoEle = NULL; - pBssQos->pWMMParamEle = NULL; -} - - -// -// Parsing WMM Information element or parameter element. -// Ref: RTL8185B_InitQoSPara() in 8185 QoS code. -// -VOID -QosParsingQoSElement( - IN PADAPTER Adapter, - IN BOOLEAN bEDCAParms, - IN OCTET_STRING WMMElement, - OUT PRT_WLAN_BSS pBssDesc - ) -{ - u1Byte qosinfo = 0; - - if( WMMElement.Length > MAX_WMMELE_LENGTH ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosParsingWMMElement(): WMM Element length is too long!\n") ); - return; - } - - pBssDesc->BssQos.bdQoSMode |= QOS_WMM; // [Isaiah] when to pBssDesc->BssQos.bdQoSMode &= ~QOS_WMM ?? - - - if(WMMElement.Length >0) - { - // AC parameter maybe disorder - CopyMem( pBssDesc->BssQos.bdWMMIEBuf, WMMElement.Octet, WMMElement.Length ); - FillOctetString( pBssDesc->BssQos.bdWMMIE, pBssDesc->BssQos.bdWMMIEBuf, WMMElement.Length ); - } - - if(bEDCAParms) - pBssDesc->BssQos.bdQoSMode |= QOS_EDCA; - - PlatformZeroMemory(&qosinfo, sizeof(qosinfo)); - - if(WMMElement.Octet != NULL) - pBssDesc->BssQos.EleSubType = (QOS_ELE_SUBTYPE)EF1Byte(WMMElement.Octet[4]); - - switch( pBssDesc->BssQos.EleSubType ) - { - case QOSELE_TYPE_INFO: - pBssDesc->BssQos.pWMMInfoEle = pBssDesc->BssQos.bdWMMIE.Octet; - qosinfo= GET_WMM_INFO_ELE_QOS_INFO_FIELD(pBssDesc->BssQos.pWMMInfoEle); - break; - - case QOSELE_TYPE_PARAM: - pBssDesc->BssQos.pWMMParamEle = pBssDesc->BssQos.bdWMMIE.Octet; - qosinfo= GET_WMM_PARAM_ELE_QOS_INFO_FIELD(pBssDesc->BssQos.pWMMParamEle); - break; - - default: - break; - } - - - //[APSD] Indicate QosMode whether WMM AP supports WMM Power Save or not. - if(Adapter->MgntInfo.pStaQos->QosCapability & QOS_WMM_UAPSD) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("[APSD] qosinfo=%x\n", qosinfo)); - if(qosinfo & 0x80 ) //U_APSD (bit 7) - pBssDesc->BssQos.bdQoSMode |= QOS_WMM_UAPSD; - else - pBssDesc->BssQos.bdQoSMode &=~ QOS_WMM_UAPSD; - } - - - //RT_TRACE( COMP_QOS, DBG_LOUD, ("[WMM] AP bdQoSMode=%x\n", pBssDesc->BssQos.bdQoSMode)); - - // For debugging ONLY. Annie, 2005-11-12. - //QosParsingDebug_BssDesc( pBssDesc ); - -} - - -VOID -QosSetLegacyWMMParamWithHT( - IN PADAPTER Adapter, - OUT PRT_WLAN_BSS pBssDesc - ) -{ - // [AnnieWorkaround] Is this OK? 2005-11-12. - pBssDesc->BssQos.bdQoSMode |= QOS_WMM; // [Isaiah] when to pBssDesc->BssQos.bdQoSMode &= ~QOS_WMM ?? - - pBssDesc->BssQos.bdQoSMode &=~ QOS_WMM_UAPSD; - - FillOctetString(pBssDesc->BssQos.bdWMMIE, pBssDesc->BssQos.bdWMMIEBuf, WMM_PARAM_ELEMENT_SIZE); - pBssDesc->BssQos.pWMMParamEle = pBssDesc->BssQos.bdWMMIE.Octet; - SET_WMM_PARAM_ELE_AC_PARAMS(pBssDesc->BssQos.pWMMParamEle, Adapter->STA_EDCA_PARAM); - - - RT_TRACE( COMP_QOS, DBG_LOUD, ("[WMM] QosSetLegacyWMMParamWithHT(): AP bdQoSMode=%x\n", pBssDesc->BssQos.bdQoSMode)); - - // For debugging ONLY. Annie, 2005-11-12. - // QosParsingDebug_BssDesc( pBssDesc ); - -} - - - -// -// -// -VOID -QosSetLegacyACParam( - IN PADAPTER Adapter - ) -{ - // [Win7] pChnlAccessSetting use the common part for both adapters. 2009.07.02, by Bohn - PCHANNEL_ACCESS_SETTING pChnlAccessSetting = &(GetDefaultMgntInfo(Adapter)->ChannelAccessSetting); - AC_CODING eACI; - u4Byte AcParam=0; - pu1Byte pTmp_WMMParamEle=NULL; - - // - // 1. Follow 802.11 seeting to AC parameter, all AC shall use the same parameter. - // 2. Note that, 85B's throughput with Cisco1231 and Broadcom testbed are less than 20M, so we change the contention window from 0xA5 to 0x73. - // With CW=0x73, the throughput are 21M~22M. - // If there in any side event with 0x73, we should test 0xA4 first (following spec). Annie, 2006-04-04. - // - SET_WMM_AC_PARAM_AIFSN(&AcParam, 2); // Follow 802.11 DIFS. - SET_WMM_AC_PARAM_ACM(&AcParam, 0); - SET_WMM_AC_PARAM_ECWMIN(&AcParam, pChnlAccessSetting->CWminIndex); - SET_WMM_AC_PARAM_ECWMAX(&AcParam, pChnlAccessSetting->CWmaxIndex); - SET_WMM_AC_PARAM_TXOP_LIMIT(&AcParam, 0); - - - pTmp_WMMParamEle = (pu1Byte)GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos_WMMParamEle - ,Adapter->MgntInfo.pStaQos->WMMParamEle,NULL); - - RT_ASSERT(pTmp_WMMParamEle != NULL, ("QosSetLegacyACParam(): Get Null WMMParamEle.\n")); - - for(eACI = 0; eACI < AC_MAX; eACI++) - { - if(eACI == AC3_VO) - { - // For Wifi-Direct Device Discovery: MgntQueue should be fast ---------------------------------------- - u4Byte VOQueueAcParam = 0; - SET_WMM_AC_PARAM_AIFSN(&VOQueueAcParam, 0); - SET_WMM_AC_PARAM_ACM(&VOQueueAcParam, 0); - SET_WMM_AC_PARAM_ECWMIN(&VOQueueAcParam, 2); - SET_WMM_AC_PARAM_ECWMAX(&VOQueueAcParam, 3); - SET_WMM_AC_PARAM_TXOP_LIMIT(&VOQueueAcParam, (u1Byte) 0x2f); - - SET_WMM_AC_PARAM_ACI(&VOQueueAcParam, (u1Byte)eACI ); - SET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pTmp_WMMParamEle, eACI, &VOQueueAcParam); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AC_PARAM, (pu1Byte)(&VOQueueAcParam)); - // ------------------------------------------------------------------------------------------- - } - else - { - SET_WMM_AC_PARAM_ACI(&AcParam, (u1Byte)eACI ); - SET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pTmp_WMMParamEle, eACI, &AcParam); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AC_PARAM, (pu1Byte)(&AcParam)); - } -} -} - - -// -// Parsing WMM Information element or parameter element. -// Ref: QOS_OnAssociationResponse() in 8185 QoS code: -// TODO: -// (1)Config QoS mode, MSR reister for EDCA/HCCA mode -// (2) Config ACM reqirement -// (2.1) Config driver parameter for ACM control -// (2.2) Configure WME parameter register -// (2.3) Configure WiFi mode ACM -// (3) Config Queue Size Request Mode -// (4) Turn on accumulated duration field if required -// (5)Create AddTspec action management frame -// -VOID -QosOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu -) -{ - OCTET_STRING WMMParaEle; - PSTA_QOS pStaQos = Adapter->MgntInfo.pStaQos; - u1Byte index; - pu1Byte AcParamPtr; - AC_CODING eACI = 0; - - RT_TRACE( COMP_QOS, DBG_LOUD, ("===> QosOnAssocRsp()\n") ); - - if( pStaQos->CurrentQosMode == QOS_DISABLE ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== QosOnAssocRsp(): QOS_DISABLE\n") ); - return; - } - - if( asocpdu.Length == 0 ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== QosOnAssocRsp(): No input frame!!\n") ); - return; - } - - WMMParaEle = PacketGetElement( asocpdu, EID_Vendor, OUI_SUB_WMM, OUI_SUBTYPE_WMM_PARAM); - - if(WMMParaEle.Length ==0 || WMMParaEle.Length > MAX_WMMELE_LENGTH ) - { - // There is no valid WMM parameter!! Using WMM parameter we retrieved from BEACON. - if(pStaQos->WMMIE.Length<=8) - SET_WMM_PARAM_ELE_AC_PARAMS(pStaQos->WMMParamEle, Adapter->STA_EDCA_PARAM); - - FillOctetString(WMMParaEle, pStaQos->WMMParamEle, WMM_PARAM_ELEMENT_SIZE); - } - - //copy OUI ~ Reserved (8 bytes), because Joseph say AC Parameters may disorder. - //They would store later. - CopyMem( pStaQos->WMMParamEle, WMMParaEle.Octet, 8 ); - - // For debugging ONLY. Annie, 2005-11-12. - QosParsingDebug_STA( Adapter ); - - // Update AC parameters to HW. - for(index = 0; index < AC_MAX; index++) - { - AcParamPtr = GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(WMMParaEle.Octet, index); - if(AcParamPtr != NULL) - eACI = GET_WMM_AC_PARAM_ACI(AcParamPtr); - - // Filter out ACI and ACM which is not related to EDCA parameters and check if the - // value is all NULL. If the value is all NULL, we shall use EDCA default value. - //Prefast warning C28182: Dereferencing NULL pointer. 'AcParamPtr' contains the same NULL value as 'WMMParaEle.Octet' did. - if(AcParamPtr != NULL && - EF4Byte( *((UNALIGNED pu4Byte)AcParamPtr) & 0xffffff0f)==0) - SET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, eACI, &(Adapter->STA_EDCA_PARAM[eACI]) ); - else - SET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, eACI, AcParamPtr); - - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pStaQos->WMMParamEle, eACI)); - - pStaQos->acm[eACI].UsedTime = 0; - pStaQos->acm[eACI].MediumTime = 0; - pStaQos->acm[eACI].HwAcmCtl = FALSE; - } - - - // TODO: ACM is not yet implemented. - - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== QosOnAssocRsp()\n") ); -} - - -// -// Update AC parameter and hardware registers when QoS Info field (parameter set count) changed. -// Added by Annie, 2005-12-06. -// -VOID -QosOnBeaconUpdateParameter( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc -) -{ - PSTA_QOS pStaQos = Adapter->MgntInfo.pStaQos; - - RT_ASSERT( pStaQos->QosCapability, ("QosOnBeaconUpdateParameter(): QosCapability == WMM_Disable!!!\n")); - - if(pBssDesc->BssQos.EleSubType != QOSELE_TYPE_PARAM) - return; - else - { - - pu1Byte pWMMPE_STA= pStaQos->WMMParamEle; - u1Byte index = 0; - pu1Byte staAcParamPtr; - pu1Byte bssAcParamPtr; - u4Byte staAcParam; - u4Byte bssAcParam; - u1Byte AcIdx; - - for(index=0; index<4; index++) - { - bssAcParamPtr = GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pBssDesc->BssQos.pWMMParamEle, index); - AcIdx = GET_WMM_AC_PARAM_ACI(bssAcParamPtr); - - staAcParamPtr = GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pWMMPE_STA, AcIdx); - - staAcParam = EF4Byte(*((UNALIGNED pu4Byte)staAcParamPtr)); - bssAcParam = EF4Byte(*((UNALIGNED pu4Byte)bssAcParamPtr)); - - if((staAcParam != bssAcParam) && ((bssAcParam & 0xffffff0f)!=0)) - { - // Update EDCA parameters. - SET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pWMMPE_STA, AcIdx, bssAcParamPtr); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AC_PARAM, GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(pWMMPE_STA, AcIdx) ); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosOnBeaconUpdateParameter(): Update WMMPE" ) ); - } - } - } -} - - - -// -// QoS Data header fill. -// -VOID -QosFillHeader( - IN PADAPTER Adapter, - IN PRT_TCB pTcb -) -{ - u1Byte i; - u2Byte FragIndex = 0; - u2Byte FragBufferIndex = 0; - pu1Byte pHeader = (pu1Byte)(GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb)); - PSTA_QOS pStaQos = Adapter->MgntInfo.pStaQos; - - // Note: subtype of QoS data has already changed in TranslateHeader(). - // Thus I use FC byte[0] bit7 to determine filling QoS control field or not. - // Annie, 2005-12-06. - if( IsQoSDataFrame(pHeader) && !IsMgntQosNull(pHeader)) - { - u2Byte QosCtrl; - // 1. Fill QoS Control Field - SET_QOS_CTRL(pHeader, 0); - SET_QOS_CTRL_STA_DATA_AMSDU(pHeader, ((pTcb->bAggregate)?1:0) ); - SET_QOS_CTRL_WMM_UP(pHeader, pTcb->priority); - SET_QOS_CTRL_WMM_ACK_POLICY(pHeader, - (WMMUP_TO_RT_AC_BIT(pTcb->priority) & pStaQos->AcNoAck) ? 1 : 0); // Set Ack Policy by the UP setting - - // 2. Consider fragmentation case. - QosCtrl=GET_QOS_CTRL(pHeader); - - for( i=0; iBufferCount; i++ ) - { - if( FragBufferIndex == 0 ) // fragmentation header - { - pu1Byte pFrame; - - pFrame = (pu1Byte)&pTcb->BufferList[i].VirtualAddress[Adapter->TXPacketShiftBytes]; - - - // Fill QoS control field - SET_QOS_CTRL(pFrame, QosCtrl); - } - - FragBufferIndex++; - if( FragBufferIndex == pTcb->FragBufCount[FragIndex] ) - { // Next Fragment... - FragIndex++; - FragBufferIndex = 0; - } - } - - // 3. Queue Mapping - switch( pTcb->priority ) - { - case 0: - case 3: - pTcb->SpecifiedQueueID = BE_QUEUE; // 1 - break; - - case 1: - case 2: - pTcb->SpecifiedQueueID = BK_QUEUE; // 0 - break; - - case 4: - case 5: - pTcb->SpecifiedQueueID = VI_QUEUE; // 2 - break; - - case 6: - case 7: - pTcb->SpecifiedQueueID = VO_QUEUE; // 3 - break; - - default: - RT_ASSERT( FALSE, ("QosFillHeader(): Invalid UP: %d !!!\n", pTcb->priority ) ); - break; - } - } - else - { - pTcb->SpecifiedQueueID = LOW_QUEUE; - } - -} - - -// -// For QoS data parsing and checking. -// Return value (BOOLEAN): Is pFrame a QoS data frame or not. -// Added by Annie, 2005-12-23. -// -BOOLEAN -QosDataCheck( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pFrame - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - // Check 1: Is it QoS data? - if( IsQoSDataFrame(pFrame->Octet) ) - { - // Check 2: Is it unicast? - if( MacAddr_isMulticast(Frame_Addr1(*pFrame)) ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosDataCheck(): [Warning] Mcst/Bcst Qos Data!!\n") ); - } - - // Check 3: Current QoS Mode. - if( pMgntInfo->pStaQos->CurrentQosMode == QOS_DISABLE ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosDataCheck(): [Warning] Recvd Qos Data in QOS_DISABLE mode!\n") ); - } - - // Note: "Check 4: QoS bit in Rx status descriptor" should be verified in HAL. - // I write it in QueryRxDescStatus8185(). - - return TRUE; - } - else - { - return FALSE; - } -} - -// -// Get Qos user priority from packet. -// 2008.01.10, by shien chang. -// -u1Byte -QosGetUserPriority( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pFrame - ) -{ - u1Byte QosCtl; - - if( IsQoSDataFrame(pFrame->Octet) ) - { - QosCtl = GET_QOS_CTRL_WMM_UP(pFrame->Octet); - return QosCtl; - } - else - { - return 0; - } -} - - -// -// QoS element parsing debug on Bss Descriptor. Added by Annie, 2005-11-12. -// -VOID -QosParsingDebug_BssDesc( - IN PRT_WLAN_BSS pBssDesc - ) -{ - if( pBssDesc->BssQos.bdQoSMode == QOS_DISABLE ) - { - return; - } - - RT_TRACE( COMP_QOS, DBG_LOUD, ("-----------------------------------------\n" ) ); - RT_TRACE( COMP_QOS, DBG_LOUD, ("===> QosParsingDebug_BssDesc()\n") ); - RT_PRINT_STR( COMP_QOS, DBG_LOUD, "SSID", pBssDesc->bdSsIdBuf, pBssDesc->bdSsIdLen ); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== QosParsingDebug_BssDesc()\n") ); -} - - - -// -// QoS element parsing debug on station. Added by Annie, 2005-11-12. -// -VOID -QosParsingDebug_STA( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - RT_TRACE( COMP_QOS, DBG_LOUD, ("===> QosParsingDebug_STA()\n") ); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosParsingDebug_STA(): CurrentQosMode is %d\n", pStaQos->CurrentQosMode ) ); - if( pStaQos->CurrentQosMode == QOS_DISABLE ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== QosParsingDebug_STA(): QOS_DISABLE.\n") ); - return; - } - - // 0. Show current SSID. - RT_PRINT_STR( COMP_QOS, DBG_LOUD, "SSID", pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length ); - - // 1. WMM Information Element. - RT_TRACE( COMP_QOS, DBG_LOUD, ("--------------- WMM Information Element Content ---------------\n") ); - - - // 2. WMM Parameter Element. - RT_TRACE( COMP_QOS, DBG_LOUD, ("--------------- WMM Parameter Element Content ----------------\n") ); - - QosParsingDebug_ParaElement( pStaQos->WMMParamEle ); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("------------------------------------------------------------\n") ); - RT_TRACE( COMP_QOS, DBG_LOUD, ("<=== QosParsingDebug_STA()\n") ); -} - - - - - - -// -// QoS parameter element parsing debug. Added by Annie, 2005-11-12. -// - -VOID -QosParsingDebug_ParaElement( - IN pu1Byte pWMMParamEle - ) -{ - AC_CODING eACI; - pu1Byte pAcParam; - pu1Byte oui; - - if( pWMMParamEle == NULL ) - { - RT_TRACE( COMP_QOS, DBG_LOUD, ("[Warning] QosParsingDebug_ParaElement(): pWMMParaEle is NULL!return!") ); - return; - } - - oui = GET_WMM_PARAM_ELE_OUI(pWMMParamEle); - RT_TRACE( COMP_QOS, DBG_LOUD, ("OUI: %02X- %02X- %02X\n", oui[0], oui[1], oui[2] )); - - RT_TRACE( COMP_QOS, DBG_LOUD, ("OUI Type: 0x%02X\n", GET_WMM_PARAM_ELE_OUI_TYPE(pWMMParamEle)) ); - RT_TRACE( COMP_QOS, DBG_LOUD, ("OUI sub Type: 0x%02X\n",GET_WMM_PARAM_ELE_OUI_SUBTYPE(pWMMParamEle)) ); - RT_TRACE( COMP_QOS, DBG_LOUD, ("Version: 0x%02X\n", GET_WMM_PARAM_ELE_VERSION(pWMMParamEle)) ); - RT_TRACE( COMP_QOS, DBG_LOUD, ("QosInfo: 0x%02X\n", GET_WMM_PARAM_ELE_QOS_INFO_FIELD(pWMMParamEle)) ); - - pAcParam = GET_WMM_PARAM_ELE_AC_PARAMS(pWMMParamEle); - for( eACI=0; eACIMgntInfo); - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u2Byte DataRate; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - ConstructNullFunctionData( - Adapter, - pBuf->Buffer.VirtualAddress, - &pTcb->PacketLength, - StaAddr, - TRUE, - AC, - FALSE, - bForcePowerSave); - - DataRate = pMgntInfo->LowestBasicRate; // Annie, 2005-03-31 - - pTcb->priority = AC; - - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, LOW_QUEUE, DataRate); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - - -VOID -QosConstructEDCAParamElem( - IN PADAPTER Adapter, - OUT POCTET_STRING posEDCAParamElem - ) -{ - //1REWRITE this part!!! - PlatformZeroMemory(posEDCAParamElem->Octet, 2); //(Qos Info field + reserved) for WMM - - CopyMem(posEDCAParamElem->Octet + 2, Adapter->STA_EDCA_PARAM, AC_MAX * AC_PARAM_SIZE); - - posEDCAParamElem->Length = WMM_PARAM_ELE_BODY_LEN; -} - -// -// Description: -// Utility function to construct TSPEC IE. -// (include EID and length) -// -VOID -QosConstructTSPEC( - IN PADAPTER Adapter, - IN pu1Byte pBuffer, - OUT pu4Byte pLength, - IN u1Byte TID, - IN u1Byte Direction, - IN BOOLEAN bPSB, - IN BOOLEAN bSchedule, - IN u1Byte AccessPolicy, - IN BOOLEAN bAggregation, - IN u1Byte AckPolicy, - IN u1Byte TrafficType, - IN u1Byte UserPriority, - IN u2Byte NominalMsduSize, - IN u2Byte MaxMsduSize, - IN u4Byte MinServiceItv, - IN u4Byte MaxServiceItv, - IN u4Byte InactivityItv, - IN u4Byte SuspensionItv, - IN u4Byte ServiceStartTime, - IN u4Byte MinDataRate, - IN u4Byte MeanDataRate, - IN u4Byte PeakDataRate, - IN u4Byte MaxBurstSize, - IN u4Byte DelayBound, - IN u4Byte MinPhyRate, - IN u2Byte SurplusBandwithAllow, - IN u2Byte MediumTime - ) -{ - pu1Byte pTspec = pBuffer; - u1Byte WmmOUI[] = { 0x00, 0x50, 0xf2 }; - - // TSPEC element - SET_TSPEC_ID(pTspec, EID_Vendor); - SET_TSPEC_LENGTH(pTspec, 61); // OUI(3) + Type(1) + SubType(1) + Version (1) + TSPEC Body(55) - SET_TSPEC_OUI(pTspec, WmmOUI); - SET_TSPEC_OUI_TYPE(pTspec, 2); - SET_TSPEC_OUI_SUBTYPE(pTspec, 2); - SET_TSPEC_VERSION(pTspec, 1); - - // TSINFO - SET_TSPEC_TSINFO_TSID(pTspec, TID); - SET_TSPEC_TSINFO_DIRECTION(pTspec, Direction); - SET_TSPEC_TSINFO_PSB(pTspec, (bPSB ? 1:0)); - SET_TSPEC_TSINFO_SCHEDULE(pTspec, (bSchedule ? 1:0)); - SET_TSPEC_TSINFO_ACCESS_POLICY(pTspec, AccessPolicy); - SET_TSPEC_TSINFO_AGGREGATION(pTspec, (bAggregation ? 1:0)); - SET_TSPEC_TSINFO_ACK_POLICY(pTspec, AckPolicy); - SET_TSPEC_TSINFO_TRAFFIC_TYPE(pTspec, TrafficType); - SET_TSPEC_TSINFO_UP(pTspec, UserPriority); - - // TSPEC Body - SET_TSPEC_NOMINAL_MSDU_SIZE(pTspec, NominalMsduSize); - SET_TSPEC_MAX_MSDU_SIZE(pTspec, MaxMsduSize); - SET_TSPEC_MIN_SERVICE_INTERVAL(pTspec, MinServiceItv); - SET_TSPEC_MAX_SERVICE_INTERVAL(pTspec, MaxServiceItv); - SET_TSPEC_INACTIVITY_INTERVAL(pTspec, InactivityItv); - SET_TSPEC_SUSPENSION_INTERVAL(pTspec, SuspensionItv); - SET_TSPEC_SERVICE_START_TIME(pTspec, ServiceStartTime); - SET_TSPEC_MIN_DATA_RATE(pTspec, MinDataRate); - SET_TSPEC_MEAN_DATA_RATE(pTspec, MeanDataRate); - SET_TSPEC_PEAK_DATA_RATE(pTspec, PeakDataRate); - SET_TSPEC_MAX_BURST_SIZE(pTspec, MaxBurstSize); - SET_TSPEC_DELAY_BOUND(pTspec, DelayBound); - SET_TSPEC_MIN_PHY_RATE(pTspec, MinPhyRate); - SET_TSPEC_SURPLUS_BANDWITH_ALLOWANCE(pTspec, SurplusBandwithAllow); - SET_TSPEC_MEDIUM_TIME(pTspec, MediumTime); - - *pLength = TSPEC_SIZE; -} - - -// -// Description: -// Initialize a TS object. -// -// Assumption: -// RT_QOS_SPINLOCK is acquired. -// -VOID -QosInitTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u1Byte TSID, - IN PWMM_TSPEC pTSpec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - RT_ASSERT(pTs != NULL, ("QosInitTs(): pTs should NOT be NULL!!!\n")); - RT_ASSERT(pTSpec != NULL, ("QosInitTs(): pTSpecElm should NOT be NULL!!!\n")); - RT_ASSERT(TSID < MAX_STA_TS_COUNT, ("QosInitTs(): invalid TSID(%d)!!!\n", TSID)); - - pTs->bUsed = TRUE; - pTs->bEstablishing = TRUE; - pTs->DialogToken = pStaQos->DialogToken; - RTInitializeListHead(&(pTs->BufferedPacketList)); - pTs->MsduLifetime = 0; - pTs->TimeSlotCount = 0; - PlatformZeroMemory(&(pTs->TSpec), sizeof(WMM_TSPEC)); - PlatformMoveMemory(&(pTs->OutStandingTSpec), pTSpec, sizeof(WMM_TSPEC)); - pTs->NominalPhyRate = (u1Byte) QOS_BPS_TO_RATE( GET_TSPEC_MIN_PHY_RATE(pTSpec) ); - pTs->UserPriority = GET_TSPEC_TSINFO_UP(pTSpec); - - - RT_TRACE(COMP_QOS, DBG_LOUD, ("========================================\n")); - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosInitTs(): pTs(%p), TSID(%d)\n", pTs, TSID)); - RT_PRINT_DATA(COMP_QOS, DBG_LOUD, "TSPEC: ", &(pTs->TSpec), sizeof(pTs->TSpec)); - RT_TRACE(COMP_QOS, DBG_LOUD, ("========================================\n")); -} - - -// -// Description: -// Flush buffered list in TS (ONLY for STA) -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// RT_QOS_SPINLOCK is not acquired. -// -VOID -QosFlushTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ) -{ - PRT_TCB pTcb; - - if(!ACTING_AS_AP(Adapter)) - { - while ( !RTIsListEmpty(&(pTs->BufferedPacketList)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pTs->BufferedPacketList)); - - pTcb->bFromUpperLayer = FALSE; - NicIFSendPacket(Adapter, pTcb); - - } - } -} - -// -// Description: -// Add a TS object to using pool for new created traffic stream. -// If the TS object is already there, we will update TSPEC. -// -// Input: -// TSID: Traffic stream ID, WMM: 0-7, CAC: 8,9, 11e: 8-15 -// RA: Receiver MAC address. -// TA: Transmitter MAC address. -// pTSpec: TSPEC of the traffic stream, its content will be copied into the QOS_TSTREAM object. -// -// Output: -// Pointer to the TS object for new created traffic stream if succeeded, -// NULL otherwise. -// -// Assumption: -// 1. RT_QOS_SPINLOCK is NOT acquired. -// -PQOS_TSTREAM -QosAddTs( - IN PADAPTER Adapter, - IN u1Byte TSID, - IN pu1Byte RA, - IN pu1Byte TA, - IN PWMM_TSPEC pTSpec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs = NULL; - - RT_ASSERT(RA != NULL, ("QosAddTs(): RA cannot be NULL!!!\n")); - RT_ASSERT(TA != NULL, ("QosAddTs(): TA cannot be NULL!!!\n")); - - - if(!ACTING_AS_AP(Adapter)) - { - if(TSID < MAX_STA_TS_COUNT) - { - pTs = &(pStaQos->StaTsArray[TSID]); - } - } - else - { - u1Byte Key[QOS_TSTREAM_KEY_SIZE]; - - Key[0] = TSID; - PlatformMoveMemory(Key+1, RA, 6); - PlatformMoveMemory(Key+7, TA, 6); - pTs = (PQOS_TSTREAM)RtPutKeyToHashTable(pStaQos->hApTsTable, Key); - } - - if(pTs != NULL) - { - if (pTs->bUsed) - QosUpdateTs(Adapter, pTs, pTSpec); - else - QosInitTs(Adapter, pTs, TSID, pTSpec); - } - else - { - RT_ASSERT(FALSE, ("QosAddTs(): mActingAsAp(%d), TSID(%d) => pTs is NULL!!!\n", ACTING_AS_AP(Adapter), TSID)); - } - - return pTs; -} - -// -// Description: -// Get a TS object according to given (TSID, RA, TA). -// -// Input: -// TSID: Traffic stream ID, WMM: 0-7, CAC: 8,9, 11e: 8-15 -// RA: Receiver MAC address. It can be NULL for STA mode. -// TA: Transmitter MAC address. It can be NULL for STA mode. -// -// Output: -// Pointer to a TS object if found, NULL otherwise. -// -// Assumption: -// 1. We MIGHT acquired RT_QOS_SPINLOCK before calling this function, -// so, we should not acquire it in this function. -// -PQOS_TSTREAM -QosGetTs( - IN PADAPTER Adapter, - IN u1Byte TSID, - IN pu1Byte RA, - IN pu1Byte TA - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs = NULL; - - if(!ACTING_AS_AP(Adapter)) - { - if( TSID < MAX_STA_TS_COUNT && - pStaQos->StaTsArray[TSID].bUsed ) - { - pTs = &(pStaQos->StaTsArray[TSID]); - } - } - else - { - u1Byte Key[QOS_TSTREAM_KEY_SIZE]; - - RT_ASSERT(RA != NULL, ("QosGetTs(): RA cannot be NULL!!!\n")); - RT_ASSERT(TA != NULL, ("QosGetTs(): TA cannot be NULL!!!\n")); - - Key[0] = TSID; - PlatformMoveMemory(Key+1, RA, 6); - PlatformMoveMemory(Key+7, TA, 6); - pTs = (PQOS_TSTREAM)RtGetValueFromHashTable(pStaQos->hApTsTable, Key); - } - - return pTs; -} - -// -// Assumption: -// Only invoked by QosAddTs(). -// -VOID -QosUpdateTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN PWMM_TSPEC pTSpec - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - RT_ASSERT(pTs != NULL, ("QosUpdateTs(): pTs should NOT be NULL!!!\n")); - RT_ASSERT(pTSpec != NULL, ("QosUpdateTs(): pTSpec should NOT be NULL!!!\n")); - - pTs->DialogToken = pStaQos->DialogToken; - pTs->TimeSlotCount = 0; - PlatformMoveMemory(&(pTs->OutStandingTSpec), pTSpec, sizeof(WMM_TSPEC)); - pTs->UserPriority = GET_TSPEC_TSINFO_UP(pTSpec); - pTs->NominalPhyRate = (u1Byte) QOS_BPS_TO_RATE( GET_TSPEC_MIN_PHY_RATE(pTSpec) ); -} - -// -// Description: -// Actually send QOS ADDTS frame. -// -VOID -QosSendAddTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTs - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTStream = pTs; - u4Byte i; - - for (i = 0; i < numTs; i ++) - { - if (pTStream && pTStream->bUsed) - pTStream->TimeSlotCount = 1; - pTStream ++; - } - - PlatformSetTimer(Adapter, - &(pStaQos->AddTsTimer), - ADDTS_TIME_SLOT); - SendQosAddTs(Adapter, pTs, numTs); - -} - -// -// Description: -// Actually send QOS DELTS frame. -// -VOID -QosSendDelTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTs - ) -{ - if (pTs && (numTs > 0)) - SendQosDelTs(Adapter, pTs, numTs); -} - - -// -// Description: -// Hash from (TSID, RA, TA) to [0, MAX_AP_TS_COUNT-1]. -// -// Input: -// Key: 13-byte array: 1-byte TSID, 6-byte RA, and 6-byte TA. -// -UINT -QosTsHash( - IN RT_HASH_KEY Key - ) -{ - UINT result = 0; - u4Byte idx; - - RT_PRINT_DATA(COMP_QOS, DBG_TRACE, "TSID, RA, TA: ", Key, RM_STA_RX_POWER_KEY_SIZE); - - for(idx = 1; idx < QOS_TSTREAM_KEY_SIZE; idx ++) - result += Key[idx]; - - result = result % MAX_AP_TS_COUNT; - RT_TRACE(COMP_QOS, DBG_TRACE, ("QosTsHash() result: %d\n", result)); - - return result; -} - -// -// Description: -// ADDTS req timer callback, if ADDTS rsp not received -// after we sent ADDTS req, we remove the TS. -// AP mode doesn't handle this case. -// -VOID -QosAddTsTimerCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte i; - PQOS_TSTREAM pTs; - BOOLEAN bRescheduleTimer = FALSE; - - if (!ACTING_AS_AP(Adapter)) - { - for (i = 0; i < MAX_STA_TS_COUNT; i ++) - { - pTs = &(pStaQos->StaTsArray[i]); - if (pTs && pTs->bUsed) - { - // If ADDTS has sent out, TimeSlotCount should not be zero. - if (pTs->TimeSlotCount) - pTs->TimeSlotCount ++; - - if (pTs->TimeSlotCount == (ADDTS_TIMEOUT / ADDTS_TIME_SLOT) ) - { // Time is up, remove this ts, do not request ts. - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosAddTsTimerCallback(): ADDTS Timeout!\n")); - if (pTs->bEstablishing) - QosRemoveTs(Adapter, pTs); - pTs->TimeSlotCount = 0; - } - else if (pTs->TimeSlotCount != 0) - { - bRescheduleTimer = TRUE; - } - } - } - - if (bRescheduleTimer) - { - PlatformSetTimer(Adapter, - &(pStaQos->AddTsTimer), - ADDTS_TIME_SLOT); - } - } - -} - -// -// Description: -// Remove a TS object from using pool when a traffic stream tore down. -// -// Input: -// pTs: Pointer to the TS obejct to remove. -// -// Assumption: -// RT_QOS_SPINLOCK is NOT acquired. -// -VOID -QosRemoveTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - - RT_ASSERT(pTs != NULL, ("QosRemoveTs(): pTS should NOT be NULL!!!\n")); - RT_ASSERT(pTs->bUsed, ("QosRemoveTs(): pTS(%p) is not used!!!\n", pTs)); - - QosResetTs(Adapter, pTs); - if(ACTING_AS_AP(Adapter)) - { - u1Byte Key[QOS_TSTREAM_KEY_SIZE]; - - PlatformMoveMemory(Key, pTs->__HashEntry.Key, QOS_TSTREAM_KEY_SIZE); - RtRemvoeKeyFromVaHashTable(pStaQos->hApTsTable, Key); - } - -} - -// -// Description: -// Reset an TS object. -// -// Assumption: -// RT_QOS_SPINLOCK is acquired. -// -VOID -QosResetTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ) -{ - PRT_TCB pTcb; - - RT_ASSERT(pTs != NULL, ("QosResetTs(): pTs should NOT be NULL!!!\n")); - - pTs->bUsed = FALSE; - pTs->bEstablishing = FALSE; - pTs->DialogToken = 0; - pTs->TimeSlotCount = 0; - pTs->MsduLifetime = 0; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_MSDU_LIFE_TIME, (pu1Byte)pTs); - PlatformZeroMemory(pTs->TSpec, sizeof(WMM_TSPEC)); - PlatformZeroMemory(pTs->OutStandingTSpec, sizeof(WMM_TSPEC)); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - while ( !RTIsListEmpty(&(pTs->BufferedPacketList)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pTs->BufferedPacketList)); - - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -// -// Description: -// Reset TS related variables to initiailzed state. -// -// Assumption: -// RT_QOS_SPINLOCK is NOT acquired. -// -BOOLEAN -QosResetAllTs( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs; - u4Byte idx; - PRT_LIST_ENTRY pList; - PRT_LIST_ENTRY pEntry; - - - for(idx = 0; idx < MAX_STA_TS_COUNT; idx++) - { - pTs = &(pStaQos->StaTsArray[idx]); - if(pTs->bUsed) - QosResetTs(Adapter, pTs); - } - - pList = RtGetAllValuesFromHashTable(pStaQos->hApTsTable); - for(pEntry = pList->Flink; - pEntry != pList; - pEntry = pEntry->Flink) - { - pTs = (PQOS_TSTREAM)pEntry; - RT_ASSERT(pTs->bUsed, ("QosResetAllTs(): pTs(%p) bUsed==FALSE !!!\n", pTs)); - QosResetTs(Adapter, pTs); - } - RtResetHashTable(pStaQos->hApTsTable); - - - return FALSE; -} - -// -// Description: -// Remove all TS added. -// -// Assumption: -// RT_QOS_SPINLOCK is NOT acquired. -// -VOID -QosRemoveAllTs( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs; - PRT_LIST_ENTRY pList, pEntry; - u1Byte i; - - - for (i = 0; i < MAX_STA_TS_COUNT; i ++) - { - pTs = &(pStaQos->StaTsArray[i]); - if (pTs->bUsed) - QosRemoveTs( Adapter, pTs ); - } - - pList = RtGetAllValuesFromHashTable(pStaQos->hApTsTable); - for(pEntry = pList->Flink; - pEntry != pList; - pEntry = pEntry->Flink) - { - pTs = (PQOS_TSTREAM)pEntry; - RT_ASSERT(pTs->bUsed, ("QosRemoveAllTs(): pTs(%p) bUsed==FALSE !!!\n", pTs)); - QosRemoveTs(Adapter, pTs); - } - RtResetHashTable(pStaQos->hApTsTable); - -} - - - -// -// Description: -// Handle the reception of MSDU Lifetime IE. -// -VOID -QosRecvMsduLifetimeIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte TSID; - PQOS_TSTREAM pTs = NULL; - u1Byte Length; - - Length = *(pOsBuffer->Octet + 1); - if (Length != 7) - return; - - if (!ACTING_AS_AP(Adapter)) - { - if ( (source==QOSIE_SRC_ADDTSRSP) || - (source==QOSIE_SRC_REASOCRSP) ) - { - TSID = *(pOsBuffer->Octet + 6); - pTs = &(pStaQos->StaTsArray[TSID]); - if (pTs && pTs->bUsed) - { - pTs->MsduLifetime = EF2Byte( *((UNALIGNED pu2Byte)(pOsBuffer->Octet + 7)) ); - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosRecvMsduLifetimeIE(): Receive Life Time %d TUs for TSID (%d)\n", pTs->MsduLifetime, TSID)); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_MSDU_LIFE_TIME, (pu1Byte)pTs); - } - } - } -} - - - -// -// Description: -// Parse the Qos traffic stream related IE and handle it. -// -VOID -QosParsingTrafficStreamIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN u4Byte offset, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ) -{ - static u1Byte TspecOui[] = { 0x00, 0x50, 0xF2, 0x02, 0x02, 0x01 }; - static u1Byte TsrsOui[] = { 0x00, 0x40, 0x96, 0x08 }; - static u1Byte MsduLifeOui[] = { 0x00, 0x40, 0x96, 0x09 }; - static u1Byte CcxTsmOui[] = {0x00, 0x40, 0x96, 0x07}; // For CCX4 S56, Traffic Stream Metrics, 070615, by rcnjko. - u4Byte BytesRead = offset; - OCTET_STRING osIE; - RT_DOT11_IE Dot11Ie; - - while (HasNextIE(pOsBuffer, BytesRead)) - { - Dot11Ie = AdvanceToNextIE(pOsBuffer, &BytesRead); - if (Dot11Ie.Id == 0xDD) - { - osIE.Octet = Dot11Ie.Content.Octet - 2; - osIE.Length = Dot11Ie.Content.Length + 2; - - if (PlatformCompareMemory( - Dot11Ie.Content.Octet, - TspecOui, - sizeof(TspecOui)) == 0) - { - QosRecvTspecIE(Adapter, &osIE, source, rspStatus); - QosParsingDebug_TspecIE(Adapter, &osIE); - } - else if (PlatformCompareMemory( - Dot11Ie.Content.Octet, - TsrsOui, - sizeof(TsrsOui)) == 0) - { - QosRecvTsrsIE(Adapter, &osIE, source, rspStatus); - QosParsingDebug_TsrsIE(Adapter, &osIE); - } - else if (PlatformCompareMemory( - Dot11Ie.Content.Octet, - MsduLifeOui, - sizeof(MsduLifeOui)) == 0) - { - QosRecvMsduLifetimeIE(Adapter, &osIE, source, rspStatus); - QosParsingDebug_MsduLifetimeIE(Adapter, &osIE); - } - else if (PlatformCompareMemory( - Dot11Ie.Content.Octet, - CcxTsmOui, - sizeof(CcxTsmOui)) == 0) - { - - } - } - } -} - -// -// Description: -// Handle the reception of TSPEC IE. -// -VOID -QosRecvTspecIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte TSID; - PQOS_TSTREAM pTs = NULL; - - if (!ACTING_AS_AP(Adapter)) - { - if ( ((source == QOSIE_SRC_ADDTSRSP) || - (source == QOSIE_SRC_REASOCRSP)) && - (rspStatus == TRUE) ) - { - TSID = GET_TSPEC_TSINFO_TSID(pOsBuffer->Octet); - pTs = &(pStaQos->StaTsArray[TSID]); - if (pTs && pTs->bUsed) - { - pTs->TimeSlotCount = 0; - - // Update TS parameter. - RT_ASSERT( (pOsBuffer->Length == sizeof(WMM_TSPEC)), - ("QosRecvTspecIE(): Invalid TSPEC IE length\n")); - PlatformMoveMemory(&(pTs->TSpec), - pOsBuffer->Octet, - sizeof(WMM_TSPEC)); - QosIncAdmittedTime(Adapter, pTs); - - if (pTs->bEstablishing) - { - u1Byte CurrCcxVerNumber = 0; - - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - - pTs->bEstablishing = FALSE; - - if (CurrCcxVerNumber >= 4) - { - //if ((pStaQos->StaTsArray[0].bUsed) && - // (!pStaQos->StaTsArray[0].bEstablishing) && - // (pStaQos->StaTsArray[1].bUsed) && - // (!pStaQos->StaTsArray[1].bEstablishing)) - { - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - CCX_FlushAllTs(Adapter); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - else - { - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - QosFlushTs(Adapter, pTs); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - - } - } - } - else if (source == QOSIE_SRC_DELTS) - { - TSID = GET_TSPEC_TSINFO_TSID(pOsBuffer->Octet); - - QosDecAdmittedTime(Adapter, pTs); - pTs = &(pStaQos->StaTsArray[TSID]); - if (pTs && pTs->bUsed) - { - QosRemoveTs(Adapter, pTs); - } - } - - } - else - { - // TODO: AP mode. - } -} - -// -// Description: -// Handle the reception of TSRS IE. -// -VOID -QosRecvTsrsIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte TSID; - PQOS_TSTREAM pTs = NULL; - u1Byte Length; - u1Byte i; - u1Byte rate; - - Length = (*(pOsBuffer->Octet+1)) -5; - if ( (Length==0) || (Length>8) ) - return; - TSID = *(pOsBuffer->Octet+6); - - if (!ACTING_AS_AP(Adapter)) - { - if ( (source == QOSIE_SRC_ADDTSRSP) || - (source == QOSIE_SRC_REASOCRSP) ) - { - pTs = &(pStaQos->StaTsArray[TSID]); - - for (i = 0; i < Length; i ++) - { - rate = *(pOsBuffer->Octet + 7 + i); - if (rate & 0x80) - { - rate &= ~0x80; - if (rate != QosGetNPR(Adapter, pTs)) - { - RT_TRACE(COMP_QOS, DBG_LOUD, - ("QosRecvTsrsIE(): returned NPR (%d) is not one we requested (%d) \n", rate, QosGetNPR(Adapter, pTs))); - QosSetNPR(Adapter, pTs, rate); - - if (!rspStatus) - { - // TODO: resent ADDTS request. - } - - break; - } - } - } - } - } - else - { - // TODO: AP mode. - } -} - - -// -// Description: -// Construct traffic stream rate set element. -// -VOID -QosConstructTSRS( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN POCTET_STRING pOsAddTsPkt - ) -{ - // - // TS Rate Set Format defined in CCXv4 S54.2.6 as the following: - // Fields Value - // ----- ----- - // ElementID 221 (Vendor Specific) - // Length 6-13 - // OUI 00:40:96 (Cisco) - // OUI Type 8 (TS rate set) - // TSID ID in ranage of 0-7 - // TS Rates TS Rate Values (1-8 Bytes) - // By Bruce, 2008-03-17. - // - u1Byte TSRS[] = { 0xdd, 0x06, 0x00, 0x40, 0x96, 0x08, 0x00, 0x00 }; - u1Byte TSID; - - if (pTs && pTs->bUsed) - { - TSID = GET_TSPEC_TSINFO_TSID(pTs->TSpec); - TSRS[6] = TSID; - TSRS[7] = pTs->NominalPhyRate; - PlatformMoveMemory(pOsAddTsPkt->Octet + pOsAddTsPkt->Length, - TSRS, - sizeof(TSRS)); - pOsAddTsPkt->Length += sizeof(TSRS); - } -} - -// -// Description: -// Increase admitted time of AC which contains in pTs. -// 2007.09.03, by shien chang. -// -VOID -QosIncAdmittedTime( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte UserPriority; - u2Byte MediumTime; - AC_CODING eACI = 0; - BOOLEAN bAcm; - - RT_ASSERT(pTs != NULL, ("QosIncAdmittedTime(): pTs should not be NULL\n")); - if (!pTs->bUsed) - return; - - bAcm = (BOOLEAN)GET_WMM_AC_PARAM_ACM(pTs->TSpec); - if (!bAcm) - return; - - UserPriority = GET_TSPEC_TSINFO_UP(pTs->TSpec); - MediumTime = GET_TSPEC_MEDIUM_TIME(pTs->TSpec); - - switch (UserPriority) - { - case 0: - case 3: - eACI = AC0_BE; - break; - case 1: - case 2: - eACI = AC1_BK; - break; - case 4: - case 5: - eACI = AC2_VI; - break; - case 6: - case 7: - eACI = AC3_VO; - break; - } - //RT_TRACE(COMP_QOS, DBG_LOUD, ("QosIncAdmittedTime(): ADDTS: AC(%d) AdmitTime(%"i64fmt"d) MediumTime(%d)\n", - // eACI, pStaQos->acm[eACI].MediumTime, MediumTime)); - pStaQos->acm[eACI].MediumTime += MediumTime; -} - -// -// Description: -// Decrease admitted time of AC which contains in pTs. -// 2007.09.03, by shien chang. -// -VOID -QosDecAdmittedTime( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - u1Byte UserPriority; - u2Byte MediumTime; - AC_CODING eACI = 0; - - RT_ASSERT(pTs != NULL, ("QosIncAdmittedTime(): pTs should not be NULL\n")); - if (!pTs->bUsed) - return; - - UserPriority = GET_TSPEC_TSINFO_UP(pTs->TSpec); - MediumTime = GET_TSPEC_MEDIUM_TIME(pTs->TSpec); - - switch (UserPriority) - { - case 0: - case 3: - eACI = AC0_BE; - break; - case 1: - case 2: - eACI = AC1_BK; - break; - case 4: - case 5: - eACI = AC2_VI; - break; - case 6: - case 7: - eACI = AC3_VO; - break; - } - //RT_TRACE(COMP_QOS, DBG_LOUD, ("QosDecAdmittedTime(): DELTS: AC(%d) AdmitTime(%"i64fmt"d) MediumTime(%d)\n", - // eACI, pStaQos->acm[eACI].MediumTime, MediumTime)); - if (pStaQos->acm[eACI].MediumTime > MediumTime) - pStaQos->acm[eACI].MediumTime -= MediumTime; - else - pStaQos->acm[eACI].MediumTime = 0; -} - -// -// Description: -// ACM timer callback. -// 2007.08.21, by shien chang. -// -VOID -QosACMTimerCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - AC_CODING eACI; - pu1Byte pacParam; - BOOLEAN bAcm; - - for(eACI = 0; eACI < AC_MAX; eACI ++) - { - pacParam = (pu1Byte)(GET_WMM_PARAM_ELE_AC_PARAM(pStaQos->WMMParamEle)+(4 * eACI)); - bAcm = (BOOLEAN)GET_WMM_AC_PARAM_ACM(pacParam); - if (bAcm) - { - if (pStaQos->acm[eACI].MediumTime > pStaQos->acm[eACI].UsedTime) - { - pStaQos->acm[eACI].UsedTime = 0; - } - else - { - pStaQos->acm[eACI].UsedTime = pStaQos->acm[eACI].UsedTime - - pStaQos->acm[eACI].MediumTime; - } - } - } - - CCX_UpdateUsedTime( Adapter ); - - if (!RT_DRIVER_HALT(Adapter) && - pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE && - pMgntInfo->bMediaConnect && - !Adapter->bInHctTest) - { - PlatformSetTimer(Adapter, &pStaQos->ACMTimer, ACM_TIMEOUT); - } -} - -// -// Description: -// Get nominal phy rate of the TS. -// -u1Byte -QosGetNPR( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ) -{ - if (pTs && pTs->bUsed) - return pTs->NominalPhyRate; - return 0; -} - -// -// Description: -// Set nominal phy rate for the TS. -// -VOID -QosSetNPR( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u1Byte rate - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte MinPhyRate = 0; - - if (!MgntIsRateValidForWirelessMode(rate, pMgntInfo->dot11CurrentWirelessMode)) - { - RT_TRACE(COMP_QOS, DBG_WARNING, ("QosSetNPR(): Invalid data rate to set!\n")); - return; - } - - if (pTs && pTs->bUsed) - { - MinPhyRate = GET_TSPEC_MIN_PHY_RATE(pTs->TSpec); - if ((MinPhyRate == 0) || - (QOS_RATE_TO_BPS(rate) < MinPhyRate) ) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosSetNPR(): Invalid normal phy rate!")); - return; - } - - pTs->NominalPhyRate = rate; - } -} - -// -// Description: -// Search established TS and if -// 1. No TS -- drop the packet. -// 2. TS is establishing -- buffer the packet. -// 3. TS is established -- transmit the packet. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -BOOLEAN -QosAdmissionControl( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PQOS_TSTREAM pTs; - BOOLEAN bHandled = FALSE; - u1Byte CurrCcxVerNumber = 0; - - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - - if (CurrCcxVerNumber >= 4) - { - return CCX_CallAdmissionControl(Adapter, pTcb); - } - - if (ACTING_AS_AP(Adapter)) return FALSE; - - if (pTcb->TSID <= MAX_TSPEC_TSID) - { - pTs = QosGetTs(Adapter, - pTcb->TSID, - pMgntInfo->Bssid, - Adapter->CurrentAddress); - - // No TS, drop the packet. - if (pTs == NULL || !pTs->bUsed) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosAdmissionControl(): Drop packet for invalid TSID\n")); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - bHandled = TRUE; - } - else - { - if (pTs->bEstablishing) - { - // If TS is establishing, queue the packet. - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosAdmissionControl(): Queue packet for establishing TS\n")); - RTInsertTailList(&(pTs->BufferedPacketList), &(pTcb->List)); - bHandled = TRUE; - } - else - { - // If Ts is found, transmit the packet. - bHandled = FALSE; - } - } - } - - if (!bHandled) - { - BOOLEAN bAdmit; - bAdmit = QosCalcUsedTimeAndAdmitPacket(Adapter, pTcb); - if (!bAdmit) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - bHandled = TRUE; - } - } - - return bHandled; -} - -// -// Description: -// Calc used time and admit packet. -// 2007.08.23, by shien chang. -// -BOOLEAN -QosCalcUsedTimeAndAdmitPacket( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - AC_CODING eACI; - pu1Byte pacParam; - BOOLEAN bAcm; - u8Byte UsedTime; - BOOLEAN bDetermined = FALSE; - u8Byte AccUsedTime; - BOOLEAN bReturn = TRUE; - - if (pStaQos->CurrentQosMode == QOS_DISABLE) - return TRUE; - - switch (pTcb->priority) - { - case 0: - case 3: - eACI = AC0_BE; - break; - case 1: - case 2: - eACI = AC1_BK; - break; - case 4: - case 5: - eACI = AC2_VI; - break; - case 6: - case 7: - eACI = AC3_VO; - break; - default: - RT_ASSERT(FALSE, ("QosCalcUsedTimeAndAdmitPacket(): invalid pTcb->priority: %d!!!\n", pTcb->priority)); - eACI = AC0_BE; - break; - } - - do - { - pacParam = (pu1Byte)(GET_WMM_PARAM_ELE_AC_PARAM(pStaQos->WMMParamEle)+(4*eACI)); - bAcm = (BOOLEAN)GET_WMM_AC_PARAM_ACM(pacParam); - - if (bAcm) - { - // 1. Calc used time - UsedTime = ((pTcb->PacketLength * 8 * 2) / (pTcb->DataRate)) / 32; - AccUsedTime = pStaQos->acm[eACI].UsedTime + UsedTime; - - // 2. Admit packet. - if (AccUsedTime >= pStaQos->acm[eACI].MediumTime) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosCalcUsedTimeAndAdmitPacket(): Used time > Medium time\n")); - - switch (eACI) - { - case AC3_VO: - eACI = AC2_VI; - pTcb->priority = 5; - break; - case AC2_VI: - eACI = AC0_BE; - pTcb->priority = 3; - break; - case AC1_BK: - bReturn = FALSE; - bDetermined = TRUE; - break; - case AC0_BE: - eACI = AC1_BK; - pTcb->priority = 2; - break; - } - - } - else - { - pStaQos->acm[eACI].UsedTime = AccUsedTime; - bDetermined = TRUE; - } - } - else - bDetermined = TRUE; - - } while (!bDetermined); - - return bReturn; -} - -// -// Description: -// Return all pending tx msdu buffered during ADDTS period. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -VOID -QosReturnAllPendingTxMsdu( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs; - PRT_LIST_ENTRY pList, pEntry; - u1Byte i; - PRT_TCB pTcb; - - - for(i = 0; i < MAX_STA_TS_COUNT; i ++) - { - pTs = &(pStaQos->StaTsArray[i]); - if(pTs->bUsed) - { - while ( !RTIsListEmpty(&(pTs->BufferedPacketList)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pTs->BufferedPacketList)); - - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - } - } - - pList = RtGetAllValuesFromHashTable(pStaQos->hApTsTable); - for(pEntry = pList->Flink; - pEntry != pList; - pEntry = pEntry->Flink) - { - pTs = (PQOS_TSTREAM)pEntry; - RT_ASSERT(pTs->bUsed, ("QosReturnAllPendingTxMsdu(): pTs(%p) bUsed==FALSE !!!\n", pTs)); - while ( !RTIsListEmpty(&(pTs->BufferedPacketList)) ) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&(pTs->BufferedPacketList)); - - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - } - -} - -// -// Description: -// WMM Add Ts(Tspec) request packet. -// -RT_STATUS -OnAddTsReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - pu1Byte pTaddr; - pu1Byte pRaddr; - - if (!ACTING_AS_AP(Adapter)) - { - RT_TRACE_F(COMP_QOS, DBG_WARNING, ("[WARNING] Not AP mode!\n")); - return RT_STATUS_INVALID_STATE; - } - - // WMM fixed fields: CategoryCode(1) + ActionCode(1) + DialogToken(1) + StatusCode(1) - if(posMpdu->Length < sMacHdrLng + 4) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnAddTsReq(): Invalid length(%d) of frame\n", posMpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - - pTaddr = Frame_Addr2(*posMpdu); - pRaddr = Frame_Addr1(*posMpdu); - - QosParsingTrafficStreamIE(Adapter, - posMpdu, - (sMacHdrLng + 4), // The first IE in this action frame. - QOSIE_SRC_ADDTSREQ, - FALSE ); - - return RT_STATUS_SUCCESS; -} - - -// -// Description: -// Handle the ADDDTS rsp received. -// 2007.06.26, by shien chang. -// -RT_STATUS -OnAddTsRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PQOS_TSTREAM pTs; - u1Byte i; - u1Byte DialogToken, StatusCode; - u1Byte CurrCcxVerNumber = 0; - - if(ACTING_AS_AP(Adapter)) - return RT_STATUS_SUCCESS; - - // WMM fixed fields: CategoryCode(1) + ActionCode(1) + DialogToken(1) + StatusCode(1) - if(posMpdu->Length < sMacHdrLng + 4) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnAddTsRsp(): Invalid length(%d) of frame\n", posMpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - - DialogToken = GET_ACTFRAME_DIALOG_TOKEN(posMpdu->Octet); - StatusCode = GET_ACTFRAME_STATUS_CODE(posMpdu->Octet); - - RT_TRACE(COMP_QOS, DBG_LOUD, ("===> OnAddTsRsp(): StatusCode(%d)\n", StatusCode)); - - // Cancel the ADDTS timer - for (i = 0; i < MAX_STA_TS_COUNT; i ++) - { - pTs = &(pStaQos->StaTsArray[i]); - if (pTs && pTs->bUsed) - { - if ( pTs->DialogToken==DialogToken ) - pTs->TimeSlotCount = 0; - } - } - - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - - if (CurrCcxVerNumber >= 4) - { - if (CCX_QosReturnAllPendingTxMsdu(Adapter)) - return RT_STATUS_SUCCESS; - } - - if (StatusCode == 0) - { // Success. - QosParsingTrafficStreamIE(Adapter, - posMpdu, - (sMacHdrLng + 4), - QOSIE_SRC_ADDTSRSP, - TRUE ); - } - else - { // Failed. - if (CurrCcxVerNumber >= 4) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("OnAddTsRsp(): ADDTS failed, try to roaming...\n")); - - CCX_OnAddTsRspSet(Adapter); - - MgntActSet_802_11_BSSID_LIST_SCAN(Adapter); - } - else - { - for (i = 0; i < MAX_STA_TS_COUNT; i ++) - { - pTs = &(pStaQos->StaTsArray[i]); - if (pTs && pTs->bUsed) - { - if ( pTs->DialogToken==DialogToken ) - { - pTs->TimeSlotCount = 0; - if (pTs->bEstablishing) - QosRemoveTs(Adapter, pTs); - } - } - } - } - - } - - //return (StatusCode == 0); - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Handle the DELTS received. -// 2007.06.26, by shien chang. -// -RT_STATUS -OnDelTs( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - pu1Byte pTaddr; - pu1Byte pRaddr; - - // WMM fixed fields: CategoryCode(1) + ActionCode(1) + DialogToken(1) + StatusCode(1) - if(posMpdu->Length < sMacHdrLng + 4) - { - RT_TRACE(COMP_QOS, DBG_SERIOUS, ("OnDelTs(): Invalid length(%d) of frame\n", posMpdu->Length)); - return RT_STATUS_MALFORMED_PKT; - } - - pTaddr = Frame_Addr2(*posMpdu); - pRaddr = Frame_Addr1(*posMpdu); - - QosParsingTrafficStreamIE(Adapter, - posMpdu, - (sMacHdrLng + 4), - QOSIE_SRC_DELTS, - FALSE ); - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Determine if this packet is the trigger frame for the specified sta UAPSD setting. -// Arguments: -// [in] pMpduOS - -// The packet to be checked. -// [in] StaUapsd - -// The UAPSD setting for the client. -// Return: -// TRUE if this packet is the trigger frame. -// FALSE if this packet isn't the trigger frame. -// By Bruce, 2010-10-05. -// -BOOLEAN -IsStaQosTriggerFrame( - IN POCTET_STRING pOSMpdu, - IN AC_UAPSD StaUapsd - ) -{ - BOOLEAN bTriggerAC = FALSE; - if(!IsQoSDataFrame(pOSMpdu->Octet)) - return FALSE; - - switch(GET_QOS_CTRL_WMM_UP(pOSMpdu->Octet)) - { - case 0: - case 3: - bTriggerAC = GET_BE_UAPSD(StaUapsd); - break; - case 1: - case 2: - bTriggerAC=GET_BK_UAPSD(StaUapsd); - break; - case 4: - case 5: - bTriggerAC = GET_VI_UAPSD(StaUapsd); - break; - case 6: - case 7: - bTriggerAC = GET_VO_UAPSD(StaUapsd); - break; - } - - return bTriggerAC; -} - -// -// Description: Reset Rx TS for initializing sequence number by sending DELBA. -// -// Added by tynli. 2015.01.22. -// -VOID -QosResetRxTS( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRX_TS_RECORD pRxTs = NULL; - - if(pHTInfo->bAcceptAddbaReq) - { - if(GetTs(Adapter, (PTS_COMMON_INFO*)(&pRxTs), pMgntInfo->Bssid, 0, RX_DIR, FALSE)) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("QosResetRxTS(): call TsInitDelBA()\n")); - TsInitDelBA(Adapter, (PTS_COMMON_INFO)pRxTs, RX_DIR); - } - } -} - diff --git a/network/wlan/WDI/COMMON/QosGen.h b/network/wlan/WDI/COMMON/QosGen.h deleted file mode 100644 index aa194efb..00000000 --- a/network/wlan/WDI/COMMON/QosGen.h +++ /dev/null @@ -1,391 +0,0 @@ -#ifndef __INC_QOSGEN_H -#define __INC_QOSGEN_H - -//============================================================================= -// Prototype function for Debugging Qos. -//============================================================================= -#if DBG -// -// Description: -// Dump the TSPEC IE content. -// -VOID -QosParsingDebug_TspecIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer - ); - -VOID -QosParsingDebug_TsrsIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer - ); - -VOID -QosParsingDebug_MsduLifetimeIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer - ); - -#else - #define QosParsingDebug_TspecIE(__Adapter, __pOsBuffer) - #define QosParsingDebug_TsrsIE(__Adapter, __pOsBuffer) - #define QosParsingDebug_MsduLifetimeIE(__Adapter, __pOsBuffer) -#endif // #if DBG -//============================================================================= -// End of Prototype function for Debugging Qos. -//============================================================================= - - -VOID -QosInitializeSTA( - IN PADAPTER Adapter - ); - -VOID -QosDeinitializeSTA( - IN PADAPTER Adapter - ); - -VOID -QosInitializeBssDesc( - IN PBSS_QOS pBssQos - ); - - -VOID -QosParsingQoSElement( - IN PADAPTER Adapter, - IN BOOLEAN bEDCAParms, - IN OCTET_STRING WMMElement, - OUT PRT_WLAN_BSS pBssDesc - ); - -VOID -QosSetLegacyWMMParamWithHT( - IN PADAPTER Adapter, - OUT PRT_WLAN_BSS pBssDesc - ); - -VOID -QosSetLegacyACParam( - IN PADAPTER Adapter - ); - -VOID -QosOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu - ); - - -VOID -QosOnBeaconUpdateParameter( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc - ); - - -VOID -QosFillHeader( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ); - - -BOOLEAN -QosDataCheck( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pFrame - ); - -u1Byte -QosGetUserPriority( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pFrame - ); - -VOID -QosParsingDebug_BssDesc( - IN PRT_WLAN_BSS pBssDesc - ); - - -VOID -QosParsingDebug_STA( - IN PADAPTER Adapter - ); - - - -VOID -QosParsingDebug_ParaElement( - IN pu1Byte pWMMParaEle - ); - - -VOID -QosParsingDebug_AcParam( - IN pu1Byte pAcParam - ); - - -VOID -QosParsingDebug_QosCtrlField( - IN pu1Byte pFrameHeader - ); - -VOID -SendQoSNullFunctionData( - IN PADAPTER Adapter, - IN pu1Byte StaAddr, - IN u1Byte AC, - IN BOOLEAN bForcePowerSave - ); - -VOID -QosConstructEDCAParamElem( - IN PADAPTER Adapter, - OUT POCTET_STRING posBuffer - ); - -VOID -QosConstructTSPEC( - IN PADAPTER Adapter, - IN pu1Byte pBuffer, - OUT pu4Byte pLength, - IN u1Byte TID, - IN u1Byte Direction, - IN BOOLEAN bPSB, - IN BOOLEAN bSchedule, - IN u1Byte AccessPolicy, - IN BOOLEAN bAggregation, - IN u1Byte AckPolicy, - IN u1Byte TrafficType, - IN u1Byte UserPriority, - IN u2Byte NominalMsduSize, - IN u2Byte MaxMsduSize, - IN u4Byte MinServiceItv, - IN u4Byte MaxServiceItv, - IN u4Byte InactivityItv, - IN u4Byte SuspensionItv, - IN u4Byte ServiceStartTime, - IN u4Byte MinDataRate, - IN u4Byte MeanDataRate, - IN u4Byte PeakDataRate, - IN u4Byte MaxBurstSize, - IN u4Byte DelayBound, - IN u4Byte MinPhyRate, - IN u2Byte SurplusBandwithAllow, - IN u2Byte MediumTime - ); - -VOID -QosInitTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u1Byte TSID, - IN PWMM_TSPEC pTSpec - ); - -VOID -QosFlushTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ); - -PQOS_TSTREAM -QosAddTs( - IN PADAPTER Adapter, - IN u1Byte TSID, - IN pu1Byte RA, - IN pu1Byte TA, - IN PWMM_TSPEC pTSpec - ); - -PQOS_TSTREAM -QosGetTs( - IN PADAPTER Adapter, - IN u1Byte TSID, - IN pu1Byte RA, - IN pu1Byte TA - ); - -VOID -QosUpdateTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN PWMM_TSPEC pTSpec - ); - -VOID -QosSendAddTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTs - ); - -VOID -QosSendDelTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u4Byte numTs - ); - - -UINT -QosTsHash( - IN RT_HASH_KEY Key - ); - -VOID -QosAddTsTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -QosRemoveTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ); - -VOID -QosResetTs( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ); - -BOOLEAN -QosResetAllTs( - IN PADAPTER Adapter - ); - -VOID -QosRemoveAllTs( - IN PADAPTER Adapter - ); - -VOID -QosRecvMsduLifetimeIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ); - -VOID -QosParsingTrafficStreamIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN u4Byte offset, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ); - -VOID -QosRecvTspecIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ); - -VOID -QosRecvTsrsIE( - IN PADAPTER Adapter, - IN POCTET_STRING pOsBuffer, - IN QOSIE_SOURCE source, - IN BOOLEAN rspStatus - ); - - -VOID -QosConstructTSRS( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN POCTET_STRING pOsAddTsPkt - ); - -VOID -QosIncAdmittedTime( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ); - -VOID -QosDecAdmittedTime( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ); - -VOID -QosACMTimerCallback( - IN PRT_TIMER pTimer - ); - -u1Byte -QosGetNPR( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs - ); - -VOID -QosSetNPR( - IN PADAPTER Adapter, - IN PQOS_TSTREAM pTs, - IN u1Byte rate - ); - -BOOLEAN -QosAdmissionControl( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ); - -BOOLEAN -QosCalcUsedTimeAndAdmitPacket( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ); - -VOID -QosReturnAllPendingTxMsdu( - IN PADAPTER Adapter - ); - -RT_STATUS -OnAddTsReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -OnAddTsRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - - -RT_STATUS -OnDelTs( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -BOOLEAN -IsStaQosTriggerFrame( - IN POCTET_STRING pOSMpdu, - IN AC_UAPSD StaUapsd - ); - -VOID -QosResetRxTS( - IN PADAPTER Adapter - ); - -#endif // #ifndef __INC_QOSGEN_H diff --git a/network/wlan/WDI/COMMON/RC4.h b/network/wlan/WDI/COMMON/RC4.h deleted file mode 100644 index 9a765e24..00000000 --- a/network/wlan/WDI/COMMON/RC4.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef __INC_RC4_H -#define __INC_RC4_H - -#define CRC32_POLY 0x04c11db7 - -void -EncodeWEP( - pu1Byte key, - s4Byte keysize, - pu1Byte plaintext, - s4Byte len, - pu1Byte out); -BOOLEAN -DecodeWEP( - pu1Byte key, - s4Byte keysize, - pu1Byte ciphertext, - s4Byte len, - pu1Byte out); - -u1Byte -ReverseBit( - u1Byte data - ); - -// Isaiah note: previous declaration in libkern.h -// uint32_t crc32(uint32_t crc, const void *bufp, size_t len); - -u1Byte -ReverseBit( - u1Byte data - ); - - -ULONG -crc32( - pu1Byte buf, - u4Byte len); - - -void init_crc32(void); -typedef struct -{ - u4Byte x; - u4Byte y; - u1Byte state[256]; -}ArcfourContext; - -#endif //#ifndef __INC_RC4_H diff --git a/network/wlan/WDI/COMMON/ROGUEAP.h b/network/wlan/WDI/COMMON/ROGUEAP.h deleted file mode 100644 index df3927bd..00000000 --- a/network/wlan/WDI/COMMON/ROGUEAP.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef __INC_ROGUEAP_H -#define __INC_ROGUEAP_H - - -typedef struct _ROGUEAP_REPORT_PACKET{ - u1Byte SnapHeader[8]; // Cisco Aironet SNAP header: AAAA 0300 4096 0000 - u2Byte ROGUEAPLen; //always 40 bytes - u1Byte message_type; // 0x40. - u1Byte function_code; // 0x8e. - u1Byte DstAddr[6]; // MAC address of the AP. - u1Byte SrcAddr[6]; // Reporting STA's MAC address. - u2Byte Failure_Reason; - u1Byte RogueAPAddr[6]; //MAC address of the client reporting the AP. - u1Byte RogueAPname[16]; // All Null if not known -}ROGUEAP_REPORT_PACKET, *PROGUEAP_REPORT_PACKET; - - -typedef struct _MH_CCX_ROGUE_AP_STATUS{ - u4Byte length; - u4Byte version; - u4Byte code; - u1Byte bssid[6]; - -} MH_CCX_ROGUE_AP_STATUS,*PMH_CCX_ROGUE_AP_STATUS; - -#define ROGUEAP_message_type 0x40 -#define ROGUEAP_function_code 0x8e - - - -#define MH_CCX_ROGUE_AP_STATUS_LENGTH 18 -#define MH_CCX_ROGUE_AP_STATUS_VERSION 1 - -#define MH_CCX_ROGUE_AP_STATUS_AuthTimeoutFailure 1 -#define MH_CCX_ROGUE_AP_STATUS_ChallengeFromApFailure 2 -#define MH_CCX_ROGUE_AP_STATUS_ChallengeToApFailure 3 -#define MH_CCX_ROGUE_AP_STATUS_AuthSuccess 4 -#define MH_CCX_ROGUE_AP_STATUS_ClearRogues 5 -#define MH_CCX_ROGUE_AP_STATUS_Invalidauthenticationtype 6 - - -//----------------------------------------------------- -//name : CCX_Add_ROGUE_AP_Entry -//function : Add an Entry to ROGUE AP List -//Input : ROGUEAP => Aegis offer data about ROGUE AP -//----------------------------------------------------- -void -CCX_Add_ROGUE_AP_Entry( - PADAPTER Adapter, - MH_CCX_ROGUE_AP_STATUS *ROGUEAP ); - -//----------------------------------------------------- -//name : CCX_Add_ROGUE_AP_Authfail_Entry -//function : Add an Entry to ROGUE AP List for fail code : 0x00 0x01 -//Input : -//----------------------------------------------------- -void -CCX_Add_ROGUE_AP_Authfail_Entry( - PADAPTER Adapter ); - -//----------------------------------------------------- -//name : CCX_Del_ROGUE_AP_Entry -//function : Del an Entry to ROGUE AP List When successful connent to AP -//Input : ROGUEAP => Aegis offer data about ROGUE AP -//----------------------------------------------------- -void -CCX_Del_ROGUE_AP_Entry( - PADAPTER Adapter, - MH_CCX_ROGUE_AP_STATUS *ROGUEAP ); - -//----------------------------------------------------- -//name : CCX_Clear_ROGUE_AP_All_Entry -//function : Del an Entry to ROGUE AP List When all AP connent fail. -//Input : -//----------------------------------------------------- -void -CCX_Clear_ROGUE_AP_All_Entry( - PADAPTER Adapter ); - -//----------------------------------------------------- -//name : SendCcxROGUEAPReport -//function : Send all ROGUE AP report in list to AP ( which connected successful ) -//Input : -//----------------------------------------------------- -void -SendCcxROGUEAPReport( - PADAPTER Adapter ); - -#endif diff --git a/network/wlan/WDI/COMMON/RadioMeasurement.h b/network/wlan/WDI/COMMON/RadioMeasurement.h deleted file mode 100644 index 8db1b7d4..00000000 --- a/network/wlan/WDI/COMMON/RadioMeasurement.h +++ /dev/null @@ -1,145 +0,0 @@ -#ifndef __INC_RADIOMEASUREMENT_H -#define __INC_RADIOMEASUREMENT_H - -#define GET_RM_INFO(_pMgntInfo) ((PRT_RM_INFO)(_pMgntInfo->pRmInfo)) -#define RT_LOCAL_RM_TOKEN 0xFE - -// RM action status -typedef enum _RT_RM_ACTION_STATUS{ - RT_RM_ACTION_STATUS_SUCCESS = 0, // The rm is performed successfully and the report is valid. - RT_RM_ACTION_STATUS_FAIL = 1, // The rm had been tried but it failed. - RT_RM_ACTION_STATUS_GOING = 2, // The rm is still going. -}RT_RM_ACTION_STATUS, *PRT_RM_ACTION_STATUS; - - -// RM action status -typedef enum _RT_RM_HASH_TABLE{ - RT_RM_TABLE_FRAME_REPORT = 0, // - RT_RM_TABLE_NEIGHBOR = 1, // - RT_RM_TABLE_MAX, // The rm is still going. -}_RT_RM_HASH_TABLE, *P_RT_RM_HASH_TABLE; - - -VOID -HandleRmRequests( - IN PADAPTER Adapter -); - -BOOLEAN -IsCcxRmRequestPacket( - IN PADAPTER Adapter, - IN POCTET_STRING posMPDU -); - -u4Byte -OnCcxRmRequestPacket( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -RmMonitorSignalStrength( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -BOOLEAN -StopCcxTsm( - IN PADAPTER Adapter, - IN u1Byte TSID - ); - -BOOLEAN -StartCcxTsm( - IN PADAPTER Adapter, - IN u1Byte TSID, - IN u2Byte MeasurementInterval // in TU - ); - -VOID -ResetCcxTsmMechanism( - IN PADAPTER Adapter - ); - - -VOID -TsmTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -OnCcxTsmIE( - IN PADAPTER Adapter, - IN POCTET_STRING posCcxTsmIE - ); - -VOID -HandleCCXRmRequests( - IN PADAPTER Adapter, - IN PRT_RM_REQUESTS pRmRequests, - OUT PRT_RM_REPORTS pRmReports - ); - -VOID -HandleDot11kRmRequests( - IN PADAPTER Adapter, - IN PRT_RM_REQUESTS pRmRequests, - OUT PRT_RM_REPORTS pRmReports - ); - - -VOID -RmWorkitemCallback( - IN PVOID pContext - ); - -BOOLEAN -RmSetChannelLoad( - IN PADAPTER Adapter, - IN u1Byte Channel, - IN u2Byte Duration - ); - -RT_RM_ACTION_STATUS -RmQueryChannelLoad( - IN PADAPTER Adapter, - IN pu1Byte pChLoad - ); - -BOOLEAN -RmSetNoiseHistogram( - IN PADAPTER Adapter, - IN u1Byte Channel, - IN u2Byte Duration - ); - -RT_RM_ACTION_STATUS -RmQueryNoiseHistogram( - IN PADAPTER Adapter, - IN pu1Byte pIPI, - IN u1Byte IPILen, - IN pu1Byte pANPI - ); - -VOID -RM_SetHashTable( - IN PADAPTER Adapter, - IN u1Byte TableType, - IN RT_HASH_TABLE_HANDLE Table - ); - -#if (CCX_SUPPORT == 1) - -RT_STATUS -OnDot11kRmRequest( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -#else // #if (CCX_SUPPORT != 1) - -#define OnDot11kRmRequest NULL - -#endif // #if (CCX_SUPPORT == 1) -#endif // #ifndef __INC_RADIOMEASUREMENT_H diff --git a/network/wlan/WDI/COMMON/Receive.c b/network/wlan/WDI/COMMON/Receive.c deleted file mode 100644 index 66cd1fe6..00000000 --- a/network/wlan/WDI/COMMON/Receive.c +++ /dev/null @@ -1,2658 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Receive.tmh" -#endif - -/* - * Note: Encryption overhead handling - * 1. MPDU tail overhead will be removed before defragment(ex. ICV) - * 2. MPDU head overhead(except first fragment) will be removed in defragment (ex. IV) - * 3. MSDU tail overhead will be removed after defragment (ex. MIC) - * 4. MSDU head overhead will be removed in TranslateRxPacketHeader (ex. IV for first fragment, CKIP head overhead) -*/ - -// 20100311 Joseph: Move from HAL folder to COMMON\Receive.c. -// This kind of modification may be used in all PCI solution. - -VOID -InitializeRxVariables( - PADAPTER Adapter - ) -{ - u2Byte QueueID; - - Adapter->NumRfd = Adapter->MAX_NUM_RFD; - for(QueueID=0 ; QueueID < MAX_RX_QUEUE ; QueueID++) - Adapter->NumRxDesc[QueueID]= Adapter->MAX_NUM_RX_DESC; - -#if (MAX_RX_QUEUE ==2) - Adapter->NumRxDesc[RX_CMD_QUEUE] = RX_DESC_NUM; -#endif - -#if (MULTIPORT_SUPPORT == 1) -{ - // Workaround: MultiPortInitializeCloneRfdQueue should be called only once and only by the default adapter - // - Currently - The extension adapter will call this function - - if(IsDefaultAdapter(Adapter)) - { - MultiPortInitializeCloneRfdQueue(Adapter); - } -} -#endif - - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - RTInitializeListHead(&Adapter->RfdIdleQueue); - for(QueueID=0 ; QueueID < MAX_RX_QUEUE ; QueueID++) - RTInitializeListHead(&Adapter->RfdBusyQueue[QueueID]); - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - - ResetRxStatistics(Adapter); - - Adapter->MgntInfo.NumforRxFastbatch = 12; - -} - -// 20100311 Joseph: Add new function release Rx Timer and Workitem. -VOID -DeInitializeRxVariables( - PADAPTER Adapter - ) -{ -} - -// -// Description: For the purpose of RFD list debugging. -// Added by Roger, 2008.06.20. -// -BOOLEAN -ChkValidRFDs( - PADAPTER Adapter, - pu4Byte pRfdAddr - ) -{ - BOOLEAN bValid = FALSE; - u2Byte RfdIdx; - - - for(RfdIdx = 0; RfdIdx < Adapter->NumRfd + 1; RfdIdx++) - { - if(Adapter->RfdListAddr[RfdIdx] == pRfdAddr) - return TRUE; - } - return bValid; -} - -// -// Description: For the purpose of VirtualAddress in RFD list debugging. -// Added by Roger, 2008.06.20. -// -BOOLEAN -ChkValidVAs( - PADAPTER Adapter, - pu4Byte pVirtualAddr - ) -{ - BOOLEAN bValid = FALSE; - u2Byte RfdIdx; - - for(RfdIdx = 0; RfdIdxNumRfd; RfdIdx++) - { - if(Adapter->RfdVirtualAddr[RfdIdx] == pVirtualAddr) - return TRUE; - } - return bValid; -} - -RT_STATUS -PrepareRFDs( - PADAPTER Adapter - ) -{ - - u2Byte i; - PRT_RFD pRfd; - RT_STATUS status; - -#if (MULTIPORT_SUPPORT == 1) -{ // Allocate the Multiport Clone RFDs - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before MultiPortPrepareCloneRfd \n")); - - status = MultiPortPrepareCloneRfd(Adapter); - - if(status != RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("MultiPortPrepareCloneRfd fail\n")); - MultiPortFreeCloneRfd(Adapter); - return status; - } -} -#endif - - do{ - Adapter->RfdBuffer.Length=Adapter->NumRfd*sizeof(RT_RFD); - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before RfdBuffer\n")); - - status=PlatformAllocateMemory(Adapter, &Adapter->RfdBuffer.Ptr,Adapter->RfdBuffer.Length); - if(status!=RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("RfdBuffer fail\n")); - return status; - } - PlatformZeroMemory(Adapter->RfdBuffer.Ptr,Adapter->RfdBuffer.Length); - -#if DBG_CMD - DBG_Var.PseudoRfd.Ptr = Adapter->RfdBuffer.Ptr; - DBG_Var.PseudoRfd.Length = Adapter->NumRfd*sizeof(RT_RFD); -#endif - - pRfd=(PRT_RFD)Adapter->RfdBuffer.Ptr; - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before DrvIFAssociateRFD\n")); - - for(i=0;iNumRfd;i++) - { - status=DrvIFAssociateRFD(Adapter,&pRfd[i]); - pRfd[i].SeqNum = i; - Adapter->RfdListAddr[i] = (pu4Byte)&pRfd[i]; - Adapter->RfdVirtualAddr[i] = (pu4Byte)pRfd[i].Buffer.VirtualAddress; - - if(status!=RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("DrvIFAssociateRFD fail\n")); - return status; - } - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - RTInsertTailListWithCnt(&Adapter->RfdIdleQueue, &pRfd[i].List, &Adapter->NumIdleRfd); - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - } - // To keep track the head of RfdIdleQueue. 2008.06.03. - Adapter->RfdListAddr[i] = (pu4Byte)&Adapter->RfdIdleQueue; - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before pAMSDU\n")); - - status = PlatformAllocateMemory(Adapter, (PVOID *)&Adapter->pAMSDU, Adapter->MAX_SUBFRAME_TOTAL_COUNT*sizeof(ALIGNED_SHARED_MEMORY)); - if(status != RT_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("pAMSDU fail\n")); - return status; - } - - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("before MAX_SUBFRAME_TOTAL_COUNT pAMSDU\n")); - - for(i=0;i < Adapter->MAX_SUBFRAME_TOTAL_COUNT;i++) - { - status=PlatformAllocateAlignedSharedMemory(Adapter, Adapter->pAMSDU+i, NIC_MAX_PACKET_SIZE); - if( status != RT_STATUS_SUCCESS ) - { - RT_TRACE_F(COMP_INIT, DBG_TRACE, ("MAX_SUBFRAME_TOTAL_COUNT pAMSDU fail\n")); - return status; - } - } - - }while(FALSE); - - DefragInitialize(Adapter); - -#if RX_AGGREGATION - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - RTInitializeListHead(&Adapter->RfdTmpList); - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - for(i=0; iRfdTmpArray[i]); - pRfd->nChildCnt = 0; - pRfd->ParentRfd = NULL; - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - RTInsertTailList(&Adapter->RfdTmpList, &pRfd->List); - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - } -#endif - -#if( WDI_SUPPORT == TRUE ) - { - status = PlatformAllocateMemory(Adapter, &Adapter->pThrottle, sizeof(NDIS_RECEIVE_THROTTLE_PARAMETERS)); - if( status == RT_STATUS_SUCCESS ) - { - Adapter->pThrottle->MaxNblsToIndicate = AMSDU_MAX_NUM; - } - } -#endif - - return status; -} - -VOID -FreeRFDs( - PADAPTER Adapter, - BOOLEAN bReset - ) -{ - int i; - u4Byte nFreed; - PRT_RFD pRfd; - u1Byte QueueID; - - if(Adapter->bInChaosTest) - return; - - DefragReset(Adapter); - - //2 Put all RFD into idle queue - - for(QueueID = 0; QueueID < MAX_RX_QUEUE; QueueID++) - { - u2Byte rfdbusy[MAX_RX_QUEUE] = {0}; - - RT_ASSERT(QueueIDRfdBusyQueue[QueueID])) - { - pRfd=(PRT_RFD)RTRemoveHeadListWithCnt(&Adapter->RfdBusyQueue[QueueID], &Adapter->NumBusyRfd[QueueID]); - RT_ASSERT(ChkValidRFDs(Adapter, (pu4Byte)&(pRfd->List)), ("(1)FreeRFDs(): Invalid RFD\n")); - RTInsertTailListWithCnt(&Adapter->RfdIdleQueue, &pRfd->List, &Adapter->NumIdleRfd); - - if (rfdbusy[QueueID]++ > Adapter->MAX_NUM_RX_DESC) - { - // 2011/03/30 MH This is an ASSERTION CASE need debug for RFD busy queue pointer!!! - // We already found two case may cause incorrect RFD busy queue pointer A). ISR DPC is - // executed after driver is goinfto unload or surpeised removes. B). DTM card we will indicate - // packets twice and return RFD, this may cause incorrect idle RFD pointer!!! We need to - // declare dould RFD number more than RX_DESC. We ae afraid of third case, so add a - // workaround method for unknow case temporarily. - // If we escape from the case, the RFD aligned share memory may not be released. after a - // period of long time. resource may be insufficient. - RT_ASSERT(TRUE, ("FreeRFDs(): Something Wrong!\n")); - break; - } - } - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - } - - if(!bReset) - { - //2 Free idle queue - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - if(!RTIsListEmpty(&Adapter->RfdIdleQueue)) - { - nFreed=0; - while(!RTIsListEmpty(&Adapter->RfdIdleQueue)) - { - pRfd=(PRT_RFD)RTRemoveHeadListWithCnt(&Adapter->RfdIdleQueue, - &Adapter->NumIdleRfd); - RT_ASSERT(ChkValidRFDs(Adapter, (pu4Byte)&(pRfd->List)), ("(2)FreeRFDs(): Invalid RFD\n")); - - // If starting address of rx buffer is shifted because of the existence of QoS - // control(in 818xb and 8190) or the existence of RxDrvInfo(in 8190), driver - // sholud shift it back, otherwise, it returns wrong address. 2006.1.5 by emily - if(pRfd->Status.bShift) - { - pRfd->Buffer.VirtualAddress -= Adapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd); - pRfd->Status.bShift = 0; - } - - DrvIFDisassociateRFD(Adapter,pRfd); - - nFreed++; - } - if(nFreed != Adapter->NumRfd){ - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Freed RFD less than allocated!nFreed:%d alloc:%d .\n",nFreed,Adapter->NumRfd)); - } - RT_ASSERT(nFreed==Adapter->NumRfd,("Freed RFD less than allocated!!\n")); - } - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - - if(Adapter->RfdBuffer.Ptr != NULL) - { - PlatformFreeMemory(Adapter->RfdBuffer.Ptr,Adapter->RfdBuffer.Length); - } - - if(Adapter->pAMSDU != NULL) - { - for(i = 0;i MAX_SUBFRAME_TOTAL_COUNT; i++) - { - PlatformFreeAlignedSharedMemory(Adapter, Adapter->pAMSDU+i); - } - - PlatformFreeMemory((PVOID)Adapter->pAMSDU, Adapter->MAX_SUBFRAME_TOTAL_COUNT*sizeof(ALIGNED_SHARED_MEMORY)); - } - - } - - -#if (MULTIPORT_SUPPORT == 1) -{ // Only Free the Multiport Clone RFDs: No Need to Reset (Busy Clone RFD is used by OS Protocol Stack) - - if(!bReset) - { - MultiPortFreeCloneRfd(Adapter); - } -} -#endif - -#if (WDI_SUPPORT == 1) - if(!bReset) - { - PlatformFreeMemory(Adapter->pThrottle, sizeof(NDIS_RECEIVE_THROTTLE_PARAMETERS)); - } -#endif -} - -VOID -PrepareAllRxDescBuffer( - PADAPTER Adapter - ) -{ -} - - -VOID -SpareRxDesc( - PADAPTER Adapter - ) -{ - DefragRemoveOldest(Adapter); - PrepareAllRxDescBuffer(Adapter); -} - - - -VOID -ResetRxStatistics( - PADAPTER Adapter - ) -{ - // Joseph 20090703: Restore last sniff value. - u4Byte temp = Adapter->RxStats.LastRxSniffMediaPktCnt; - - PlatformZeroMemory( &Adapter->RxStats, sizeof(RT_RX_STATISTICS) ); - - // Joseph 20090703: Restore last sniff value. - Adapter->RxStats.LastRxSniffMediaPktCnt = temp; - Adapter->RxStats.LastLinkQuality = 0xFF; - -} - -VOID -CountRxFragmentStatistics( - PADAPTER Adapter - ) -{ - RT_RF_POWER_STATE rtState; - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - if (rtState == eRfOff) - { - return; - } - - Adapter->RxStats.NumRxFramgment++; - -} - -VOID -CountRxStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pDaddr; - RT_RF_POWER_STATE rtState; - pu1Byte pdu; - BOOLEAN bLedBlinking=TRUE; - u4Byte rateIndex; //Add by Jacken 2008/03/12 - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - pu1Byte pTaddr; - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. - if (rtState == eRfOff) - { - return; - } - - if(!pMgntInfo->bMediaConnect || MgntRoamingInProgress(pMgntInfo)) - Adapter->RxStats.LastLinkQuality = 0xFF; - // - // Note: - // If Vista, the packet is 802.11 and we shift for header translation just as Qos/Security, so the packet header of offset should be shifted. - // In other platforms, the FragOffset indicates the 802.3 header, and the virtual address indicates the 802.11 header. - // This procedure is a temporal solution and should be improved later like adding the indication of 802.11 or 802.3 header, - // and the FragOffset should be re-defined more precisely. By Bruce, 2008-09-24. - // - - FillOctetString(pduOS, pRfd->Buffer.VirtualAddress + PLATFORM_GET_FRAGOFFSET(pRfd), pRfd->PacketLength); - pdu = pRfd->Buffer.VirtualAddress + PLATFORM_GET_FRAGOFFSET(pRfd); - - pDaddr = Frame_pDaddr(pduOS); - pTaddr = Frame_Addr2(pduOS); - - if( pRfd->Status.bCRC || pRfd->Status.bICV || pRfd->Status.bHwError ) - { - // Statistics for error packets are now handled in CountRxErrStatistics(). - // 2004.06.10, by rcnjko. - } - // - //Add by Maddest for DTM 1.0c test, 070823 - //We should spearate the Date and Mgnt packet to avoid dectet roaming case in watchdog(no packet receive) - // - else if (IsMgntFrame(pdu)) - { - Adapter->RxStats.NumRxMgntPacket++; - bLedBlinking=FALSE; - } - else if(IsDataFrame(pdu)) - { - Adapter->RxStats.NumRxOkTotal ++; - Adapter->RxStats.NumRxOkBytesTotal += pRfd->PacketLength; - Adapter->MgntInfo.LinkDetectInfo.NumRecvDataInPeriod++; - Adapter->MgntInfo.LinkDetectInfo.NumRxOkInPeriod++; - - if(pRfd->PacketLength < 500) - Adapter->RxStats.NumRxOKSmallPacket++; - else if(pRfd->PacketLength < 1000) - Adapter->RxStats.NumRxOKMiddlePacket++; - else - Adapter->RxStats.NumRxOKLargePacket++; - - rateIndex = pRfd->Status.DataRateIdx; - // We get the rate index and save it when do QueryRxStatus - - Adapter->RxStats.ReceivePacketDataRateCounter[rateIndex]++; //for Rx Data Rate Counter , by Jacken 2008/03/12 - - if(GET_TDLS_ENABLED(pMgntInfo) && pMgntInfo->bMediaConnect && pMgntInfo->mAssoc) - { - if(PlatformCompareMemory(pTaddr, pMgntInfo->Bssid, 6)==0) - Adapter->RxStats.ReceivedRateFromAPHistogram[rateIndex]++; - } - - } - - if( MacAddr_isBcst( pDaddr ) ){ - Adapter->RxStats.NumRxBroadcast ++; - Adapter->RxStats.NumRxBytesBroadcast += pRfd->PacketLength ; - } - else if( MacAddr_isMulticast( pDaddr ) ){ - Adapter->RxStats.NumRxMulticast ++; - Adapter->RxStats.NumRxBytesMulticast += pRfd->PacketLength ; - } - else{ - if(pRfd->bIsAggregateFrame) - Adapter->RxStats.NumRxUnicast += pRfd->nTotalSubframe; - else - Adapter->RxStats.NumRxUnicast ++; - Adapter->RxStats.NumRxBytesUnicast += pRfd->PacketLength; - Adapter->RxStats.NumRxDecryptSuccessUnicast++; - - if(IsDataFrame(pdu)) - { - if(pRfd->bIsAggregateFrame) - Adapter->MgntInfo.LinkDetectInfo.NumRxUnicastOkInPeriod+=pRfd->nTotalSubframe; - else - Adapter->MgntInfo.LinkDetectInfo.NumRxUnicastOkInPeriod++; - - // 2009.03.03 Leave DC mode immediately when detect high traffic - if(pMgntInfo->bMediaConnect && !MgntInitAdapterInProgress(pMgntInfo)) - { - if( ((pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod + pMgntInfo->LinkDetectInfo.NumTxOkInPeriod) > 8 ) || - (pMgntInfo->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) ) - { - if(!pPSC->RegAdvancedLPs && !pMgntInfo->bSdioDpcIsr) - { - LeisurePSLeave(Adapter, LPS_DISABLE_RX_DETECT_BUSY); - } - } - } - } - } - - if( pRfd->Status.BandWidth == 1) - - Adapter->RxStats.NumRx40MHzPacket++; - else - Adapter->RxStats.NumRx20MHzPacket++; - - - //To avoid led always blink when in rx, by Maddest 20080307; - if(bLedBlinking) - { - if(Adapter->bInHctTest) - { - Adapter->HalFunc.LedControlHandler( Adapter, LED_CTL_RX ); - } - else - { - if (Adapter->LedRxCnt == 0) - PlatformSetTimer(Adapter, &pMgntInfo->LedTimer, 50); - } - Adapter->LedRxCnt++; - } -} - - - -VOID -CountRxErrStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - RT_RF_POWER_STATE rtState; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - OCTET_STRING pduOS; - pu1Byte pRaddr; - pu1Byte pBssid; - BOOLEAN bAddrMatch = FALSE; - BOOLEAN bIsMulticast = FALSE; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - - pRaddr = Frame_pRaddr(pduOS); - pBssid = Frame_pBssid(pduOS); - bAddrMatch = (PlatformCompareMemory(Adapter->CurrentAddress, pRaddr, ETHERNET_ADDRESS_LENGTH)) ? FALSE : TRUE; - bIsMulticast = (MacAddr_isMulticast(pRaddr)); - - - if(pRfd->Status.bCRC) - Adapter->RxStats.NumRxCrxErrorPacket++; - - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - if (rtState == eRfOff) - { - return; - } - - // Check BSSID - if(!eqMacAddr(Adapter->MgntInfo.Bssid, pBssid)) - { // BSSID match. - return; - } - - // Check if this packet is belong to our NIC or multicast. - if(!bAddrMatch && !bIsMulticast) - { - return; - } - - if(pRfd->Status.bCRC || pRfd->Status.bICV || pRfd->Status.bHwError) - { - if(bAddrMatch) - Adapter->RxStats.NumRxErrTotalUnicast++; - else if(bIsMulticast) - Adapter->RxStats.NumRxErrTotalMulticast++; - if ( (pSecInfo->GroupEncAlgorithm == RT_ENC_ALG_AESCCMP) || - (pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP) ) - { - CountRxCCMPDecryptErrorsStatistics(Adapter, pRfd); - } - } - - if(pRfd->Status.bCRC) - { // CRC error packet. - if(pRfd->PacketLength < 500) - Adapter->RxStats.NumRxCrcErrSmallPacket++; - else if(pRfd->PacketLength < 1000) - Adapter->RxStats.NumRxCrcErrMiddlePacket++; - else - Adapter->RxStats.NumRxCrcErrLargePacket++; - } - else - { // CRC OK packet. - if( IsFrameTypeData(pduOS.Octet) && - Frame_Retry(pduOS)) - { // Type data && Retry bit set. - Adapter->RxStats.NumRxRetryCount++; - - - if(pRfd->PacketLength < 500) - Adapter->RxStats.NumRxRetrySmallPacket++; - else if(pRfd->PacketLength < 1000) - Adapter->RxStats.NumRxRetryMiddlePacket++; - else - Adapter->RxStats.NumRxRetryLargePacket++; - } - } - - if(pRfd->Status.bICV) - { // ICV error. - RT_ENC_ALG alg = RT_ENC_ALG_NO_CIPHER; - - Adapter->RxStats.NumRxIcvErr ++; - - alg = (bAddrMatch) ? pSecInfo->PairwiseEncAlgorithm : pSecInfo->GroupEncAlgorithm; - - switch(alg) - { - case RT_ENC_ALG_WEP40: - case RT_ENC_ALG_WEP104: - CountWEPICVErrorStatistics(Adapter, pRfd); - break; - - case RT_ENC_ALG_TKIP: - CountTKIPICVErrorStatistics(Adapter, pRfd); - break; - default: //Isaiah for MacOS compiler warning "ACESCCMP_Encryption" ...not handled in switch - break; - - } - } - - if(!pMgntInfo->SecurityInfo.SWRxDecryptFlag) - { - if(!pRfd->Status.Decrypted) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("CountRxErrStatistics:() CountRxDecryptErrorStatistics\n")); - - CountRxDecryptErrorStatistics(Adapter, pRfd); - - if(pSecInfo->GroupEncAlgorithm == RT_ENC_ALG_WEP40 || - pSecInfo->GroupEncAlgorithm == RT_ENC_ALG_WEP104 || - pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP104) - { - CountWEPUndecryptableStatistics(Adapter, pRfd); - } - } - else - CountRxDecryptSuccessStatistics(Adapter, pRfd); - } -} - -VOID -CountRxMediaStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PADAPTER DefaultAdapter = GetDefaultAdapter(Adapter); - if(DefaultAdapter->MgntInfo.bScanInProgress) - DefaultAdapter->RxStats.CurRxSniffMediaPktCnt++; -} - -VOID -CountRxExcludedUnencryptedStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if ( MacAddr_isBcst(pRaddr) ) - { - Adapter->RxStats.NumRxExcludeUnencryptedBroadcast ++; - } - else if ( MacAddr_isMulticast(pRaddr) ) - { - Adapter->RxStats.NumRxExcludeUnencryptedMulticast ++; - } - else - { - Adapter->RxStats.NumRxExcludeUnencryptedUnicast ++; - } - -} - -VOID -CountRxTKIPLocalMICFailuresStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if ( MacAddr_isBcst(pRaddr) ) - { - Adapter->RxStats.NumRxTKIPLocalMICFailuresBroadcast ++; - } - else if ( MacAddr_isMulticast(pRaddr) ) - { - Adapter->RxStats.NumRxTKIPLocalMICFailuresMulticast ++; - } - else - { - Adapter->RxStats.NumRxTKIPLocalMICFailuresUnicast ++; - } -} - -// -// Description: -// Count the Rx TKIP MIC error for mgnt packets. -// By Bruce, 2009-10-16. -// -VOID -CountRxMgntTKIPLocalMICFailuresStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntTKIPMICFailures ++; -} - - -// -// Description: -// Count the statistics of TKIP decryption with ICV errors. -// By Bruce, 2009-09-09. -// -VOID -CountRxTKIPDecryptErrorsStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if ( MacAddr_isBcst(pRaddr) ) - { - Adapter->RxStats.NumRxTKIPICVErrorBroadcast ++; - } - else if ( MacAddr_isMulticast(pRaddr) ) - { - Adapter->RxStats.NumRxTKIPICVErrorMulticast ++; - } - else - { - Adapter->RxStats.NumRxTKIPICVErrorUnicast ++; - } - -} - - -VOID -CountRxCCMPDecryptErrorsStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if ( MacAddr_isBcst(pRaddr) ) - { - Adapter->RxStats.NumRxCCMPDecryptErrorsBroadcast ++; - } - else if ( MacAddr_isMulticast(pRaddr) ) - { - Adapter->RxStats.NumRxCCMPDecryptErrorsMulticast ++; - } - else - { - Adapter->RxStats.NumRxCCMPDecryptErrorsUnicast ++; - } - -} - -VOID -CountWEPICVErrorStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if ( MacAddr_isBcst(pRaddr) ) - { - Adapter->RxStats.NumRxWEPICVErrorBroadcast ++; - } - else if ( MacAddr_isMulticast(pRaddr) ) - { - Adapter->RxStats.NumRxWEPICVErrorMulticast ++; - } - else - { - Adapter->RxStats.NumRxWEPICVErrorUnicast ++; - } - -} - - -VOID -CountTKIPICVErrorStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pDaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pDaddr = Frame_pDaddr(pduOS); - - if ( MacAddr_isBcst(pDaddr) ) - { - Adapter->RxStats.NumRxTKIPICVErrorBroadcast ++; - } - else if ( MacAddr_isMulticast(pDaddr) ) - { - Adapter->RxStats.NumRxTKIPICVErrorMulticast ++; - } - else - { - Adapter->RxStats.NumRxTKIPICVErrorUnicast ++; - } - -} - - - - -VOID -CountRxDecryptSuccessStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pDaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pDaddr = Frame_pDaddr(pduOS); - - if ( MacAddr_isBcst(pDaddr) ) - { - Adapter->RxStats.NumRxDecryptSuccessBroadcast++; - } - else if ( MacAddr_isMulticast(pDaddr) ) - { - Adapter->RxStats.NumRxDecryptSuccessMulticast++; - } -} - - - -VOID -CountRxDecryptErrorStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pDaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pDaddr = Frame_pDaddr(pduOS); - - if ( MacAddr_isBcst(pDaddr) ) - { - Adapter->RxStats.NumRxDecryptFailureBroadcast++; - } - else if ( MacAddr_isMulticast(pDaddr) ) - { - Adapter->RxStats.NumRxDecryptFailureMulticast++; - } - else - { - Adapter->RxStats.NumRxDecryptFailureUnicast++; - } - -} - -VOID -CountWEPUndecryptableStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pDaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pDaddr = Frame_pDaddr(pduOS); - - if ( MacAddr_isBcst(pDaddr) ) - { - Adapter->RxStats.NumRxWEPUndecryptableBroadcast++; - } - else if ( MacAddr_isMulticast(pDaddr) ) - { - Adapter->RxStats.NumRxWEPUndecryptableMulticast++; - } - else - { - Adapter->RxStats.NumRxWEPUndecryptableUnicast++; - } - -} - - - -// -// Description: -// Count the IV Replay condition for TKIP. -// By Bruce, 2009-09-09. -// -VOID -CountRxTKIPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if(MacAddr_isMulticast(pRaddr)) - { - Adapter->RxStats.NumRxTKIPReplayMulticast ++; - } - else - { - Adapter->RxStats.NumRxTKIPReplayUnicast ++; - } - -} - -// -// Description: -// Count the IV Replay condition for CCMP. -// By Bruce, 2009-09-09. -// -VOID -CountRxCCMPRelpayStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING pduOS; - pu1Byte pRaddr; - - pduOS.Octet = pRfd->Buffer.VirtualAddress; - pduOS.Length = pRfd->PacketLength; - pRaddr = Frame_pRaddr(pduOS); - - if(MacAddr_isMulticast(pRaddr)) - { - Adapter->RxStats.NumRxCCMPReplayMulticast ++; - } - else - { - Adapter->RxStats.NumRxCCMPReplayUnicast ++; - } - -} - -// -// Description: -// Count the IV Replay condition for TKIP mgnt packets. -// By Bruce, 2009-10-16. -// -VOID -CountRxMgntTKIPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntTKIPReplay ++; -} - -// -// Description: -// Count the IV Replay condition for AES mgnt packets. -// By Bruce, 2009-10-16. -// -VOID -CountRxMgntCCMPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntCCMPReplay ++; -} - -// -// Description: -// Count the number of unencrypted mgnt TKIP packets for encryption mode is enabled (CCXv5 S67 MFP). -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// By Bruce, 2009-10-15. -// -VOID -CountRxMgntTKIPNoEncryptStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntTKIPNoEncrypt ++; -} - -// -// Description: -// Count the number of unencrypted mgnt AES packets for encryption mode is enabled (CCXv5 S67 MFP). -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// By Bruce, 2009-10-15. -// -VOID -CountRxMgntCCMPNoEncryptStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntCCMPNoEncrypt ++; -} - -// -// Description: -// Count the number of CCXv5 MFP TKIP MHDRIE invalid. -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// By Bruce, 2009-10-15. -// -VOID -CountRxMgntMFPTKIPMHDRStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntTKIPMHDRError ++; -} - -// -// Description: -// Count the number of mgnt TKIP packet descrypted error. -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// By Bruce, 2009-10-16. -// -VOID -CountRxMgntTKIPDecryptErrorsStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntTKIPICVError ++; -} - -// -// Description: -// Count the number of mgnt AES packet descrypted error. -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// By Bruce, 2009-10-16. -// -VOID -CountRxMgntCCMPDecryptErrorsStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - Adapter->RxStats.NumRxMgntCCMPDecryptError ++; -} - -VOID -RxStatisticsWatchdog( - IN PADAPTER Adapter - ) -{ - u1Byte idx = 0, slct_idx = 0; - u4Byte slct_cnt = 0; - u1Byte legacy_rate[12] = {0x02 , 0x04 , 0x0b , 0x16 , 0x0c , 0x12 , 0x18 , 0x24 , 0x30 , 0x48 , 0x60 , 0x6c}; - static u1Byte rate_1M_delay = 0; - - Adapter->RxStats.CurRxOfdmNum = 0; - Adapter->RxStats.CurRxCckNum = 0; - - for(idx=0; idx<77; idx++) - { - if(slct_cnt <= Adapter->RxStats.ReceivePacketDataRateCounter[idx]) - { - slct_idx = idx; - slct_cnt = Adapter->RxStats.ReceivePacketDataRateCounter[idx]; - } - - if(idx < 4) - Adapter->RxStats.CurRxCckNum++; - else - Adapter->RxStats.CurRxOfdmNum++; - - Adapter->RxStats.ReceivePacketDataRateCounter[idx] = 0; - } - - if(slct_cnt == 0 || slct_idx == 76) - { - Adapter->RxStats.CurRxDataRate.RawValue= 0xffff; - rate_1M_delay = 0; - } - else - { - if(slct_idx == 0) - { - rate_1M_delay++; - - if(rate_1M_delay==2) - { - Adapter->RxStats.CurRxDataRate.RawValue = MGN_1M; - rate_1M_delay = 0; - } - - } - else - { - rate_1M_delay = 0; - - if(slct_idx >= 12) - { - Adapter->RxStats.CurRxDataRate.HT = 1; - Adapter->RxStats.CurRxDataRate.RateIdx = ((slct_idx-12)%16); - Adapter->RxStats.CurRxDataRate.Bw = ((slct_idx-12)/32); - Adapter->RxStats.CurRxDataRate.SGI = (((slct_idx-12)/16))%2; - Adapter->RxStats.CurRxDataRate.Rsvd = 0; - } - else - { - Adapter->RxStats.CurRxDataRate.RawValue= legacy_rate[slct_idx]; - } - - } - } - - //DbgPrint("Current Rx Rate = %x\n", Adapter->RxStats.CurRxDataRate); -} - - - -#if SW_CRC_CHECK -/** -* Function: SwCrcCheck -* -* Overview: This function do Crc check to received packets. -* It returns FALSE if the SW CRC check is not identical to HW CRC check. -* -* Input: -* PRT_RFD pRfd -* -* Output: -* None -* -* Return: -* TRUE: SW CRC check is identical to HW CRC check. -* FALSE: SW CRC check is not identical to HW CRC check. -*/ -BOOLEAN -SwCrcCheck( - PRT_RFD pRfd - ) -{ - pu1Byte pFCS = pRfd->Buffer.VirtualAddress + pRfd->PacketLength; - u4Byte CRC = crc32(pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - u4Byte FCS = EF4Byte(*((UNALIGNED pu4Byte)(pFCS))); - - if(FCS != CRC) - { - if(!pRfd->Status.bCRC) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("RxDesc CRC: %x \n", (pRfd->Status.bCRC)?1:0)); - RT_TRACE(COMP_RECV, DBG_LOUD, ("HwFCS: %x, SwCRC: %x\n", FCS, CRC)); - return FALSE; - } - } - - return TRUE; -} -#endif - - -u1Byte -AMSDU_ReassemblePacket( - PADAPTER Adapter, - PRT_RFD pRfd, - PRT_RFD *PRfd_Array - ) -{ - u1Byte index = 0; - OCTET_STRING frame; - u1Byte nHeaderSize = 0; - PRT_RFD pTmpRfd; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->FragLength); - nHeaderSize = 26 + (Frame_ValidAddr4(frame)?6:0); - - PlatformAcquireSpinLock(Adapter, RT_RFD_SPINLOCK); - for(index = 0; index < pRfd->nTotalSubframe; index++) - { - if(!RTIsListEmpty(GET_RFD_IDLE_QUEUE(Adapter))) - { - pTmpRfd = (PRT_RFD)RTRemoveHeadListWithCnt(GET_RFD_IDLE_QUEUE(Adapter), GET_NUM_IDLE_RFD(Adapter)); - RT_ASSERT(ChkValidRFDs(GetDefaultAdapter(Adapter), (pu4Byte)&(pTmpRfd->List)), ("AMSDU_ReassemblePacket(): Invalid RFD\n")); - } - else - { - RT_ASSERT(FALSE, ("AMSDU_Deaggregation(): there is not enough rfd!!\n")); - break; - } - - pTmpRfd->Status.bIsQosData = pRfd->Status.bIsQosData; - pTmpRfd->Status.bContainHTC = pRfd->Status.bContainHTC; - pTmpRfd->Status.bCRC = pRfd->Status.bCRC; - pTmpRfd->Status.bICV = pRfd->Status.bICV; - pTmpRfd->Status.bHwError = pRfd->Status.bHwError; - pTmpRfd->NextRfd = NULL; - pTmpRfd->FragOffset = 0; - pTmpRfd->PacketLength = nHeaderSize + pRfd->SubframeLenArray[index]; - pTmpRfd->FragLength = pTmpRfd->PacketLength; - - PlatformMoveMemory(pTmpRfd->Buffer.VirtualAddress, frame.Octet, nHeaderSize); - PlatformMoveMemory(pTmpRfd->Buffer.VirtualAddress + nHeaderSize, pRfd->SubframeArray[index], pRfd->SubframeLenArray[index]); - - PRfd_Array[index] = pTmpRfd; - } - PlatformReleaseSpinLock(Adapter, RT_RFD_SPINLOCK); - - return index; -} - -u1Byte -ParseSubframe( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING frame; - u2Byte LLCOffset=sMacHdrLng; - u2Byte EncryptionMPDUHeadOverhead, EncryptionMSDUHeadOverhead, EncryptionHeadOverhead=0; - u2Byte ChkLength; - BOOLEAN bIsAggregateFrame = FALSE; - u2Byte nRemain_Length; - u2Byte nSubframe_Length; - u1Byte nPadding_Length = 0; - u2Byte SeqNum=0; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->FragLength); - - SeqNum = (u2Byte)Frame_SeqNum(frame); - - // Added for QoS control length. Annie, 2005-12-22. - if( pRfd->Status.bIsQosData ) - { - LLCOffset += sQoSCtlLng; - - if(GET_QOS_CTRL_HC_CFP_USRSVD(frame.Octet) == 1) - bIsAggregateFrame = TRUE; - } - - if(pRfd->Status.bContainHTC) - LLCOffset += sHTCLng; - - // Null packet, don't indicate it to upper layer - ChkLength = LLCOffset + (Frame_WEP(frame)!=0 ?Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead:0); - - if( pRfd->PacketLength <= ChkLength ) - { - return 0; - } - - // - // Record AMSDU size if it is a valid AMSDU packet - // - AMSDU_UpdateRxAMSDUSizeHistogram(Adapter, pRfd->PacketLength); - - - if(Frame_WEP(frame)!=0) - { // For MPDU and MSDU head overhead in first frag - SecGetEncryptionOverhead( - Adapter, - &EncryptionMPDUHeadOverhead, - NULL, - &EncryptionMSDUHeadOverhead, - NULL, - TRUE, - MacAddr_isMulticast(Frame_pDaddr(frame))); - - EncryptionHeadOverhead=EncryptionMPDUHeadOverhead;// + EncryptionMSDUHeadOverhead; - } - - LLCOffset +=EncryptionHeadOverhead; - nRemain_Length = pRfd->PacketLength - LLCOffset; - - pRfd->bIsAggregateFrame = bIsAggregateFrame; - - if(!bIsAggregateFrame) - { - pRfd->nTotalSubframe = 1; - pRfd->SubframeArray[0] = frame.Octet + LLCOffset; - pRfd->SubframeLenArray[0] = pRfd->FragLength - LLCOffset; - return 1; - } - else - { - pRfd->nTotalSubframe = 0; - while(nRemain_Length > ETHERNET_HEADER_SIZE) - { - nSubframe_Length = N2H2BYTE(*((UNALIGNED pu2Byte)(frame.Octet + LLCOffset + 12))); - - // - // Prevent unexpected MDL length requirement when packet indicateion, which might - // cause system using improper addresses, added by Roger, 2010.05.26. - // - if(nSubframe_Length<1) - { - RT_ASSERT(FALSE, ("Invalid A-MSDU subframe size: %d, drop it!!\n", nSubframe_Length)); - break; - } - - if(nRemain_Length<(ETHERNET_HEADER_SIZE + nSubframe_Length)) - { - #if 0//cosa - RT_ASSERT( - (nRemain_Length>=(ETHERNET_HEADER_SIZE + nSubframe_Length)), - ("ParseSubframe(): A-MSDU subframe parse error!! Subframe Length: %d\n", nSubframe_Length) ); - #endif - //DbgPrint("ParseSubframe(): A-MSDU subframe parse error!! pRfd->nTotalSubframe : %d\n", pRfd->nTotalSubframe); - //DbgPrint("ParseSubframe(): A-MSDU subframe parse error!! Subframe Length: %d\n", nSubframe_Length); - //DbgPrint("nRemain_Length is %d and nSubframe_Length is : %d\n",nRemain_Length,nSubframe_Length); - //DbgPrint("The Packet SeqNum is %d\n",SeqNum); - return 0; - } - - LLCOffset += ETHERNET_HEADER_SIZE; - pRfd->SubframeArray[pRfd->nTotalSubframe] = frame.Octet + LLCOffset; - pRfd->SubframeLenArray[pRfd->nTotalSubframe] = nSubframe_Length; - pRfd->nTotalSubframe++; - - if(pRfd->nTotalSubframe >= MAX_SUBFRAME_COUNT) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("ParseSubframe(): Too many Subframes! Packets dropped!\n")); - break; - } - - nRemain_Length = nRemain_Length - ETHERNET_HEADER_SIZE - nSubframe_Length; - if(nRemain_Length != 0) - { - nPadding_Length = 4 - ((nSubframe_Length + ETHERNET_HEADER_SIZE) % 4); - if(nPadding_Length == 4) - nPadding_Length = 0; - - - if(nRemain_Length < nPadding_Length) - { - RT_ASSERT( - (nRemain_Length >= nPadding_Length), - ("ParseSubframe(): A-MSDU subframe parse error!!! Remain Length: %d\n", nRemain_Length)); - return 0; - } - - nRemain_Length -= nPadding_Length; - LLCOffset = LLCOffset + nSubframe_Length + nPadding_Length; - } - } - AMSDU_UpdateRxAMSDUNumHistogram(Adapter, pRfd->nTotalSubframe); - return pRfd->nTotalSubframe; - } -} - -/* RxCheckSWDecryption - Return False if decryption error -*/ -BOOLEAN -RxCheckSWDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - BOOLEAN bFreeRfd = FALSE; - OCTET_STRING frame; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - if(pMgntInfo->SecurityInfo.SWRxDecryptFlag) - { - RT_SEC_STATUS secStatus = RT_SEC_STATUS_SUCCESS; - // - // Case : Used SW Decrypt all Packet - // - - if(RT_SEC_STATUS_SUCCESS != (secStatus = SecSoftwareDecryption(Adapter, pRfd))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Failed (0x%08X) from SecSoftwareDecryption()\n", secStatus)); - bFreeRfd = TRUE; - } - } // 2008.06.12 - else if(Adapter->HalFunc.GetNmodeSupportBySWSecHandler(Adapter)) - { - // - // Case : SWRxDecryptFlag == False , in WEP or TKIP & 24N-mode & bHalfWiirelessN24GMode - // - - if(!SecSoftwareDecryption(Adapter, pRfd)) - { - bFreeRfd = TRUE; - } - } - - return bFreeRfd; -} - - - - - -VOID -ProcessReceivedPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - -// ========================================================================= -// Here handles and monitors the system/driver state for Rx path. Please place codes here. -// ========================================================================= - - // Get shifted bytes of Starting address of 802.11 header. 2006.09.28, by Emily - pRfd->Buffer.VirtualAddress += Adapter->HalFunc.GetRxPacketShiftBytesHandler(pRfd); - - pRfd->bRxBTdata = FALSE; - -// ========================================================================= -// Here starts to enable sniffer mode. Please let all packets get into this, including error packets. -// ========================================================================= - -// ========================================================================= -// Here after starts to feed to each port. Please do not change the coding structure. -// ========================================================================= -#if (MULTIPORT_SUPPORT == 1) -{ - // NOTE: ----------------------------------------------------------------------- - // This function is a packet distributor for each port. Please distrubute your packet herein. - - PADAPTER pSingleAdapter = MultiPortFeedPacketToMultipleAdapter(Adapter, pRfd); - - if(pSingleAdapter == NULL) - { - ReturnRFDList(Adapter, pRfd); - return; - } - else - { - // Change the adapter to the target adapter - Adapter = pSingleAdapter; - } - // ----------------------------------------------------------------------------- -} -#endif - - ProcessReceivedPacketForEachPortSpecific(Adapter, pRfd); - -} - -VOID -ProcessReceivedPacketForEachPortSpecific( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - BOOLEAN bFreeRfd = FALSE; - BOOLEAN bQueued = FALSE; - OCTET_STRING frame = {NULL, 0}; - PMGNT_INFO pMgntInfo = NULL; - u1Byte index = 0; - // [Get Frame Element After Translation] After the do{}while(FALSE), the "frame" STRING would be "translate" to 802.3 - // and could be no longer used. Therefore, we will keep some frame element. 2009.08.26, by Bohn - BOOLEAN bSecEAPOLPacket = FALSE; // Remenber the IsSecEAPOL, 2009.08.26, by Bohn - BOOLEAN bIhvFrameLogMode = FALSE; - pu1Byte pSaddr_ori = NULL; - pu1Byte pSaddr = NULL; - u1Byte Saddr[6]; - RT_SEC_STATUS secStatus = RT_SEC_STATUS_SUCCESS; - BOOLEAN bSupportRemoteWakeUp; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_WOWLAN , &bSupportRemoteWakeUp); - - /* 2007/01/16 MH Add RX command packet handle here. */ - /* 2007/03/01 MH We have to release RFD and return if rx pkt is cmd pkt. */ - if (Adapter->HalFunc.RxCommandPacketHandler(Adapter, pRfd)) - { - ReturnRFDList(Adapter, pRfd); - return; - } - - // - // Check and parse wake packet - // - if(Adapter->bWakeFromPnpSleep && bSupportRemoteWakeUp) - { - if(WoL_HandleReceivedPacket(Adapter, pRfd)) - { - ReturnRFDList(Adapter, pRfd); - return; - } - } - - // ========================================================================= - // Here defines and handles signle MPDU for a single port. Please let it be the first line - // ========================================================================= - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - // ---------------------------------------------------------------------------------- - - if(!Adapter->bSWInitReady) - { - ReturnRFDList(Adapter, pRfd); - return; - } - - GetDefaultAdapter(Adapter)->bRemoveTsInRxPath = TRUE; - - bSecEAPOLPacket = SecIsEAPOLPacket( Adapter, &frame);// Remenber the IsSecEAPOL, 2009.08.26, by Bohn - - pSaddr_ori= Frame_pSaddr(frame); - PlatformMoveMemory(Saddr, pSaddr_ori, 6); - PlatformMoveMemory(pRfd->Address3,Frame_Addr3(frame),6); - - pSaddr = Saddr; - pMgntInfo = &Adapter->MgntInfo; - - //Go determines Client is active or not by sherry 20130117 - if((IsMgntNullFrame(frame.Octet)) && eqMacAddr(Frame_pRaddr(frame), Adapter->CurrentAddress)) - { - if(Adapter == GetFirstGOPort(Adapter)) - { - // RT_TRACE(COMP_MLME,DBG_LOUD,("It is Go port receive packet \n")); - // RT_PRINT_DATA(COMP_MLME, DBG_LOUD,"recv null function data: \n",frame.Octet,frame.Length); - pMgntInfo->LinkDetectInfo.RxNullDataNum++; - - if(Frame_PwrMgt(frame)) - Adapter->bRecvEnterPSForGo = TRUE; - else - Adapter->bRecvEnterPSForGo = FALSE; - } - - } - -#if (STATISTIC_SUPPORT == 1) - CountRxMediaStatistics(Adapter, pRfd); - CountRxErrStatistics(Adapter, pRfd); - CountRxFragmentStatistics(Adapter); -#endif - - -#if SW_CRC_CHECK - SwCrcCheck(); -#endif - - do{ - // For QoS data checking. Annie, 2005-12-23. - pRfd->Status.bIsQosData = QosDataCheck( Adapter, pRfd, &frame ); - pRfd->Status.UserPriority = QosGetUserPriority(Adapter, pRfd, &frame); - pRfd->Status.bContainHTC = HTCCheck( Adapter, pRfd, &frame ); - - if(pRfd->Status.bHwError) - { - bFreeRfd = TRUE; - break; - } - - // - // Check Length need call after QosDataCheck , QosGetUserPriority , HTCCheck, modify by Maddest suggest by CCW - // - if( !RxCheckLength(Adapter,pRfd)) - { - bFreeRfd = TRUE; - break; - } - - if(TDLS_IsRxTDLSPacket(Adapter, pRfd)) - pRfd->bTDLPacket = TRUE; - else - pRfd->bTDLPacket = FALSE; - - // - // Check descryption and descrypt the packet here if need, and return error if the descryption checking process fails. - // By Bruce, 2009-10-09. - // - secStatus = SecRxDescryption(Adapter, pRfd); - if(secStatus != RT_SEC_STATUS_SUCCESS) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("Drop this packet from the sec status (0x%08X)\n", secStatus)); - bFreeRfd = TRUE; - break; - } - - if (pMgntInfo->bNetMonitorMode) - { - break; - } - - CCX_QueryIHVSupport(Adapter, &bIhvFrameLogMode); - - if(!MgntFilterReceivedPacket(Adapter, pRfd) && !bIhvFrameLogMode) - { - if (IsMgntFrame(frame.Octet)) - break; - bFreeRfd=TRUE; - break; - } - - if(bSecEAPOLPacket && Frame_WEP(frame)) - RT_TRACE(COMP_SEC , DBG_LOUD , ("====> 2-way EAPOL Packet !!\n") ); - - - // TODO: SecurityCheckMPDU - - if(!DefragPacket(Adapter, &pRfd, &bQueued)) - { - bFreeRfd=TRUE; - break; - } - else if(bQueued) - break; - - if(RT_STATUS_PKT_DROP == EncapDataFrame_ParsePkt(Adapter, pRfd)) - { - RT_TRACE_F(COMP_RECV, DBG_LOUD, ("EncapDataFrame_ParsePkt(): RT_STATUS_PKT_DROP!\n")); - bFreeRfd = TRUE; - break; - } - - - if(IS_TDL_EXIST(pMgntInfo)) - TDLS_PS_UpdatePeerPSState(Adapter, &frame, FALSE); - - if(RT_STATUS_SUCCESS == WAPI_SecFuncHandler(WAPI_PROCESSRECEIVEDPACKET, Adapter, (PVOID)pRfd, WAPI_END)) - { - bFreeRfd = TRUE; - break; - } - - // TODO: SecurityCheckMSDU - - if(Frame_ContainQc(frame) && GET_QOS_CTRL_HC_CFP_USRSVD(frame.Octet) == 1) - { //2Here we handle the condition of multiple packets in single frame - if(ParseSubframe(Adapter, pRfd) == 0) - { - bFreeRfd=TRUE; - break; - } - if(pMgntInfo->OpMode==RT_OP_MODE_AP) - { - PRT_RFD PRFD_Array[MAX_SUBFRAME_COUNT]; - BOOLEAN bIndicate_Array[MAX_SUBFRAME_COUNT] = {0}; - u1Byte nIndicateCnt = 0; - u1Byte nReassembleCnt = 0; - - // 20100611 Joseph: Handle Packet Forwarding and Rx A-MSDU more reasonable. - // We shall reassemble as many packets as possible and forword them. - nReassembleCnt = AMSDU_ReassemblePacket(Adapter, pRfd, PRFD_Array); - - // 20100611 Joseph: Forwarding reassembled packets. - // Recording the information about which subframe shall be indicated later. - for(index = 0; index < nReassembleCnt; index++) - { - if(!MgntCheckForwarding(Adapter, PRFD_Array[index])) - { // In here, this packet only need forward(no indication) - bIndicate_Array[index] = FALSE; - } - else - { // In this case, we return duplicated packets in PRFD_Array, and indicate original pRfd later. - bIndicate_Array[index] = TRUE; - ReturnRFDList(Adapter, PRFD_Array[index]); - } - } - - // 20100611 Joseph: Drop the subframes that do not need to be indicated. - for(index=0; indexSubframeArray[nIndicateCnt] = pRfd->SubframeArray[index]; - pRfd->SubframeLenArray[nIndicateCnt] = pRfd->SubframeLenArray[index]; - nIndicateCnt++; - } - } - - // 20100611 Joseph: Since "nReassembleCnt" may be less than "pRfd->nTotalSubframe" due to - // out of RFD in AMSDU_ReassemblePacket() function, we need to handle this condition. - // Indicate all other subframes that do not checkforwarding. - for(index=nReassembleCnt; indexnTotalSubframe; index++) - { - pRfd->SubframeArray[nIndicateCnt] = pRfd->SubframeArray[index]; - pRfd->SubframeLenArray[nIndicateCnt] = pRfd->SubframeLenArray[index]; - nIndicateCnt++; - } - - pRfd->nTotalSubframe = nIndicateCnt; - - //workaround for BSOD when MSDU packets received in vwifi mode - if(Adapter->bStartVwifi ) - { - bFreeRfd = TRUE; - break; - } - - if(nIndicateCnt == 0 ) - { - bFreeRfd = TRUE; - break; - } - } - - if(!TranslateHandleRxDot11FrameHeader(Adapter, pRfd)) - { - bFreeRfd=TRUE; - break; - } - } - else - { //2Here is normal condition. - - pRfd->nTotalSubframe = 0; // This indicates that this is not an aggregation frame. - pRfd->bIsAggregateFrame = FALSE; - - if(pMgntInfo->OpMode==RT_OP_MODE_AP) - { - // - // Win7 handles intra-BSS bridging through the regular reception and transmission path, - // i.e. miniport does not have to build the logic of forwarding intra-BSS frames to appropriate peers. - // - if(!MgntCheckForwarding(Adapter, pRfd)) - { // In here, this packet only need forward(no indication) - // MgntCheckForwarding() will forward it if necessary We can now return this packet. 2005.06.03, by rcnjko. - bQueued = TRUE; - RT_DISP(FRX, RX_PATH_AP_MODE, ("AP mode NOT need to indicate\n")); - // - // 2010/06/07 Simple modification for AP mode rereder consideration. - // When we forward the packet between clients, we woll always indicated the - // packet from client to AP immediately. - // We need to consider forwarding RX reorder between clients and AP later. - // - if(ACTING_AS_AP(Adapter)) - { - // Flush pending Rx Packets. - FlushAllRxTsPendingPkts(Adapter); - } - break; - } - else - { - RT_DISP(FRX, RX_PATH_AP_MODE, ("AP mode need to indicate\n")); - } - - } - - // Parse the RFD. - if (CCX_ParseRfd(Adapter, pRfd, frame, &bFreeRfd)) - { - break; - } - - if(!TranslateHandleRxDot11FrameHeader(Adapter, pRfd)) - { - bFreeRfd=TRUE; - break; - } - } - }while(FALSE); - - if(bFreeRfd) - { -#if RX_AGGREGATION - if(pRfd->RxAggrInfo.bIsRxAggr && pRfd->RxAggrInfo.bIsLastPkt) - RxReorderAggrBatchFlushBuf(Adapter); -#endif - // Management packet should set bFreeRfd to TRUE - ReturnRFDList(Adapter, pRfd); - } - else if(!bQueued) - { - BOOLEAN bReorder = FALSE; - BOOLEAN bStopRxreorder = FALSE; - - CountRxStatistics(Adapter, pRfd); - - if(ACTING_AS_AP(Adapter)) - { - // For Win8 NdisTest - WFD_DataTransmission_ext: - if( pRfd->Status.pRxTS != NULL - && (!bSecEAPOLPacket) - && pMgntInfo->pHTInfo->bCurRxReorderEnable ) - { - bReorder = TRUE; - } - } - else - { - if( pMgntInfo->pHTInfo->bCurrentHTSupport - && pMgntInfo->pHTInfo->bCurRxReorderEnable - && pRfd->Status.pRxTS!=NULL && (!bSecEAPOLPacket)) - bReorder = TRUE; - - // If driver detect the peer AP use AMSDU aggregation, then disable AMSDU and indicates all of - // the packets buffered (becuase of RX-Reordering mechanism) to upper layer. CCW, 2008/12/16 - if( pRfd->nTotalSubframe >= 1 && // AMSDU found !! - pMgntInfo->pHTInfo->bCurRxReorderEnable && // Now we used Rxreorder !! - pRfd->Status.pRxTS != NULL - ) - { - if(pRfd->Status.pRxTS->RxTotalSubframeCount+pRfd->nTotalSubframe >= Adapter->MAX_SUBFRAME_TOTAL_COUNT) - { - bStopRxreorder = TRUE; - bReorder = FALSE; - } - } - } - - GetDefaultAdapter(Adapter)->bRemoveTsInRxPath = FALSE; - - { - if(bReorder) - { -#if RX_AGGREGATION - if(pRfd->RxAggrInfo.bIsRxAggr) - RxReorderAggrBatchIndicate(Adapter, pRfd); - else -#endif - RxReorderIndicatePacket(Adapter, pRfd); - } - else - { -#if RX_AGGREGATION - if(pRfd->RxAggrInfo.bIsRxAggr && pRfd->RxAggrInfo.bIsLastPkt) - RxReorderAggrBatchFlushBuf(Adapter); -#endif - // We Inicate All Packet in RxReorderList !! - if( bStopRxreorder ) - { - RT_TRACE(COMP_RECV , DBG_LOUD , ("=======> Stop Rx Reorder !! \n") ); - - // Flush pending Rx Packets. - FlushAllRxTsPendingPkts(Adapter); - } - - DrvIFIndicatePacket(Adapter, pRfd); - if(pRfd->Status.pRxTS!=NULL) - pRfd->Status.pRxTS->RxIndicateSeq = (pRfd->Status.Seq_Num+1)%4096; - } - } - } - -} - -BOOLEAN -DefragPacket( - PADAPTER Adapter, - PRT_RFD *ppRfd, - PBOOLEAN pbQueued - ) -{ - //1 Return FALSE if this RFD should be freed - - OCTET_STRING frame; - PRT_RFD RetMsdu = NULL; - pu1Byte pSenderAddr; - u1Byte TID; - u2Byte SeqNum; - u1Byte FragNum; - BOOLEAN bMoreFrag; - BOOLEAN bEncrypted; - u2Byte EncryptionOverhead; - u4Byte i; - BOOLEAN bReturn = TRUE; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - FillOctetString(frame, (*ppRfd)->Buffer.VirtualAddress + (*ppRfd)->FragOffset, (*ppRfd)->FragLength); - - pSenderAddr=Frame_Addr2(frame); - TID=((Frame_ContainQc(frame)?Frame_QoSTID(frame, sMacHdrLng):16)); - SeqNum=Frame_SeqNum(frame); - FragNum=(u1Byte)Frame_FragNum(frame); - bMoreFrag=(BOOLEAN)Frame_MoreFrag(frame); - bEncrypted=(BOOLEAN)Frame_WEP(frame); - - RT_TRACE_F(COMP_RECV, DBG_TRACE, ("SeqNum %d FragNum %d bMoreFrag %d bEncrypted %d\n", SeqNum, FragNum, bMoreFrag, bEncrypted)); - - *pbQueued=FALSE; - - if(bEncrypted && !pMgntInfo->SafeModeEnabled) - { - //2 Remove MPDU tail overhead(ex. ICV) - SecGetEncryptionOverhead( - Adapter, - NULL, - &EncryptionOverhead, - NULL, - NULL, - TRUE, - MacAddr_isMulticast(Frame_pDaddr(frame))); - - MAKE_RFD_OFFSET_AT_BACK(*ppRfd, EncryptionOverhead); - } - - //2 Do Defragment - if((bMoreFrag || FragNum > 0) && !pMgntInfo->SafeModeEnabled) - { - RetMsdu=DefragAddRFD(Adapter, - *ppRfd, - pSenderAddr, - TID, - SeqNum, - FragNum, - bMoreFrag, - bEncrypted); - - if(RetMsdu) - { - *ppRfd=RetMsdu; - - //2 We must do this again, because ppRfd is changed - FillOctetString(frame, (*ppRfd)->Buffer.VirtualAddress + (*ppRfd)->FragOffset, (*ppRfd)->FragLength); - } - else - *pbQueued=TRUE; - } - - // At this point, we check the number of free RFDs. - // If it is lower than LowRfdThreshold, just release the LRU entry of DefragArray and - // return associate RFDs. 2006.07.25, by shien chang - // Note 1: The reason we didn't recycle RFDs at the above codes is even no fragment - // received, the # of RFDs is probably run low. - // Note 2: If RetMsdu is TRUE, we didn't recycle RFD. Because it is dangurous if the - // recycled entry is just the RFDs of returned MSDU. - if (RetMsdu == NULL) - { - for (i=0; i<*GET_LOW_RFD_THRESHOLD(Adapter); i++) - { - // for 92se test we disable to prevent the check - //Alghouth there many be more than one rx queuem but there should be only one - //queue for received data. 2006.1.3, by Emily - //if (Adapter->NumIdleRfd+Adapter->NumBusyRfd[RX_MPDU_QUEUE] < Adapter->LowRfdThreshold) - if ((*GET_NUM_IDLE_RFD(Adapter)+*GET_NUM_BUSY_RFD(Adapter, RX_MPDU_QUEUE))< *GET_LOW_RFD_THRESHOLD(Adapter)) - { - RT_TRACE(COMP_RECV, DBG_LOUD, - ("DefragPacket(): Number of RFDs (%d) is lower than threshold (%d).", - Adapter->NumIdleRfd, Adapter->LowRfdThreshold)); - DefragRecycleRFD(Adapter); - } - else - break; - } - } - - if(!(*pbQueued)) - { - //1 Note: We must get all ppRfd information again - //1 At this point, this RFD list contain complete MSDU - - // Should be the same for all fragment - bEncrypted=(BOOLEAN)Frame_WEP(frame); - - if(bEncrypted && !pMgntInfo->SafeModeEnabled) - { - //2 Check MIC and remove MIC - - //2004/07/07, kcwu, check mic - bReturn = SecCheckMIC(Adapter, *ppRfd); - - SecGetEncryptionOverhead( - Adapter, - NULL, - NULL, - NULL, - &EncryptionOverhead, - TRUE, - MacAddr_isMulticast(Frame_pDaddr(frame))); - MAKE_RFD_LIST_OFFSET_AT_BACK(Adapter, *ppRfd, EncryptionOverhead); - } - } - return bReturn; -} - -BOOLEAN -TranslateRxPacketHeader( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - u2Byte i; - OCTET_STRING frame; - BOOLEAN RemoveLLCFlag=FALSE; - u2Byte LLCOffset; - u2Byte offset; - u2Byte EncryptionMPDUHeadOverhead, EncryptionMSDUHeadOverhead, EncryptionHeadOverhead=0; - u1Byte SrcAddr[6]; - u1Byte DestAddr[6]; - - u2Byte NeedCheckTypes=1; - static u1Byte LLCHeader[1][5]={ // Remember to check NeedCheckTypes - {0x00,0x00,0x00,0x81,0x37}, - }; -// BOOLEAN bIPARPPacket = FALSE; - u2Byte ChkLength; - static u1Byte SNAP_CKIP[5] = {0x00,0x40,0x96,0x00,0x02}; // For CKIP MIC case, added by Annie, 2006-08-18. - - FillOctetString(frame, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->FragLength); - - // - // Figure out "LLCOffset", and - // "offset", the offset to advance from 802.11 frame to 802.3. - // - LLCOffset = Frame_FrameHdrLng(frame); - offset = Frame_FrameHdrLng(frame) - ETHERNET_HEADER_SIZE; // In No security and QoS case 802.11 hdr is 24, eth header is 14, 24-14=10(keep LLC case). - - // - // HTC check shall be modified as Qos control!! - // - if(pRfd->Status.bContainHTC) - { - LLCOffset += sHTCLng; - offset += sHTCLng; - } - - // Null packet, don't indicate it to upper layer - ChkLength = LLCOffset + (Frame_WEP(frame)!=0 ?Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead:0); - - if( pRfd->PacketLength <= ChkLength ) - { - return FALSE; - } - - if(Frame_WEP(frame)!=0) - { // For MPDU and MSDU head overhead in first frag - SecGetEncryptionOverhead( - Adapter, - &EncryptionMPDUHeadOverhead, - NULL, - &EncryptionMSDUHeadOverhead, - NULL, - TRUE, - MacAddr_isMulticast(Frame_pDaddr(frame))); - - EncryptionHeadOverhead=EncryptionMPDUHeadOverhead;// + EncryptionMSDUHeadOverhead; - } - - - LLCOffset +=EncryptionHeadOverhead; - offset +=EncryptionHeadOverhead; - - if( EF1Byte( frame.Octet[LLCOffset + 0] )==0xaa && - EF1Byte( frame.Octet[LLCOffset + 1] )==0xaa && - EF1Byte( frame.Octet[LLCOffset + 2] )==0x03 - ) - { // check if need remove LLC header - - RemoveLLCFlag=TRUE; - for(i=0;iPacketLength-LLCOffset; - - (frame.Octet+offset)[12]=( (u1Byte)(len>>8) ); - (frame.Octet+offset)[13]=( (u1Byte)(len&0xff) ); - } - - // - // Advance offset. - // - MAKE_RFD_LIST_OFFSET_AT_FRONT(pRfd, offset); - - return TRUE; -} - - - -// -// For NDIS6 802.11 Rx frame handling. -// Added by Annie, 2006-10-20. -// -BOOLEAN -TranslateHandleRxDot11FrameHeader( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING frame; - //BOOLEAN RemoveLLCFlag=FALSE; - u2Byte LLCOffset=sMacHdrLng; - u2Byte offset=0; // 24-24=0 - u2Byte EncryptionMPDUHeadOverhead, EncryptionMSDUHeadOverhead, EncryptionHeadOverhead=0; - u2Byte ChkLength; - pu1Byte pHeader; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - - FillOctetString(frame, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->FragLength); - pHeader = frame.Octet; - - // Added for QoS control length. Annie, 2005-12-22. - if( pRfd->Status.bIsQosData ) - { - LLCOffset += sQoSCtlLng; - offset += sQoSCtlLng; - - SET_80211_HDR_QOS_EN(pHeader, 0); - } - - if( pRfd->Status.bContainHTC) - { - LLCOffset += sHTCLng; - offset += sHTCLng; - } - - if(Frame_ValidAddr4(frame)) - { - LLCOffset += 6; - offset += 6; - } - - // Null packet, don't indicate it to upper layer - ChkLength = LLCOffset + (Frame_WEP(frame)!=0 ?Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead:0); - - if( pRfd->PacketLength <= ChkLength ) - { - return FALSE; - } - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX ) - { - // - // 061227, rcnjko: - // Translate header for NDIS6 faked AP mode (UI make upper layer take us as AdHoc mode). - // - if( pMgntInfo->OpMode == RT_OP_MODE_AP ) - { - if(GET_80211_HDR_TO_DS(pHeader) == 1 && GET_80211_HDR_FROM_DS(pHeader) == 0) - { // Translate (1,0) to (0,0) - u1Byte tmpAddr[6]; - u1Byte tmpAddr2[6]; - - SET_80211_HDR_FROM_DS(pHeader, 0); - SET_80211_HDR_TO_DS(pHeader, 0); - - GET_80211_HDR_ADDRESS1(pHeader, tmpAddr); - GET_80211_HDR_ADDRESS3(pHeader, tmpAddr2); - SET_80211_HDR_ADDRESS1(pHeader, tmpAddr2); - SET_80211_HDR_ADDRESS3(pHeader, tmpAddr); - } - else if(GET_80211_HDR_TO_DS(pHeader) == 1 && GET_80211_HDR_FROM_DS(pHeader) == 1) - { // Translate (1,1) to (0,0) - SET_80211_HDR_FROM_DS(pHeader, 0); - SET_80211_HDR_TO_DS(pHeader, 0); - - - cpMacAddr(Frame_Addr1(frame), Frame_Addr3(frame)); - cpMacAddr(Frame_Addr2(frame), Frame_Addr4(frame)); - cpMacAddr(Frame_Addr3(frame), pMgntInfo->Bssid); - } - } - } - else if(IS_TDL_EXIST(pMgntInfo)) - { - TDLS_RxTranslateHeader(Adapter, frame); - } - - if(Frame_WEP(frame)!=0 && !pMgntInfo->SafeModeEnabled) - { // For MPDU and MSDU head overhead in first frag - SecGetEncryptionOverhead( - Adapter, - &EncryptionMPDUHeadOverhead, - NULL, - &EncryptionMSDUHeadOverhead, - NULL, - TRUE, - MacAddr_isMulticast(Frame_pDaddr(frame))); - - EncryptionHeadOverhead=EncryptionMPDUHeadOverhead;// + EncryptionMSDUHeadOverhead; - } - - LLCOffset +=EncryptionHeadOverhead; - offset +=EncryptionHeadOverhead; - - if ( offset != 0) - { - u1Byte buffer[32]; - u4Byte BufLength = LLCOffset - offset; - - PlatformMoveMemory( buffer, frame.Octet, BufLength ); - PlatformMoveMemory( frame.Octet+offset, buffer, BufLength ); - } - - MAKE_RFD_LIST_OFFSET_AT_FRONT(pRfd, offset); - return TRUE; -} - -VOID -TranslateRxLLCHeaders( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - u2Byte i, j; - BOOLEAN RemoveLLCFlag=FALSE; - pu1Byte pLLC, pFrame; - u1Byte srcaddr[6]; - u1Byte DestinationAddress[6]; - u2Byte NeedCheckTypes=1; - static u1Byte LLCHeader[1][5]={ // Remember to check NeedCheckTypes - {0x00,0x00,0x00,0x81,0x37}, - }; - - for(j = 0; j < pRfd->nTotalSubframe; j++) - { - pLLC = pRfd->SubframeArray[j]; - - // Get Source Address and Destination Address - cpMacAddr(DestinationAddress, pLLC - ETHERNET_HEADER_SIZE); - cpMacAddr(srcaddr, pLLC - ETHERNET_HEADER_SIZE + ETHERNET_ADDRESS_LENGTH); - - - pFrame = pLLC -ETHERNET_HEADER_SIZE; - if( *(pLLC + 0) == 0xaa && - *(pLLC + 1) == 0xaa && - *(pLLC + 2) == 0x03 - ) - { // check if need remove LLC header - - RemoveLLCFlag=TRUE; - for(i=0;iSubframeLenArray[j]; - - *(pFrame + 12)=(u1Byte)(len>>8); - *(pFrame + 13)=(u1Byte)(len&0xff); - } - - pRfd->SubframeArray[j] = pFrame; - pRfd->SubframeLenArray[j] = pRfd->SubframeLenArray[j] + ETHERNET_HEADER_SIZE - ((RemoveLLCFlag)?8:0); - } - -} - - - -VOID -ReturnRFD( - PADAPTER pAdapter, - PRT_RFD pRfd -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - -#if RX_AGGREGATION - PRT_RFD pParentRfd = NULL; -#endif - -#if RX_AGGREGATION - pParentRfd = pRfd->ParentRfd; - pRfd->ParentRfd = NULL; - - if(pRfd->bIsTemp) - { - PlatformAcquireSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - RTInsertTailList(&pDefaultAdapter->RfdTmpList, &pRfd->List); - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - } - else // Fall-Through -#endif - if(IsCloneRFD(pDefaultAdapter,pRfd)) - { - MultiPortReturnCloneRFD(pAdapter, pRfd); - } - else - { - RT_ASSERT(ChkValidRFDs(pDefaultAdapter, (pu4Byte)&(pRfd->List)), ("ReturnRFDList(): Invalid RFD\n")); - PlatformAcquireSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - RTInsertTailListWithCnt(&(pDefaultAdapter->RfdIdleQueue), &(pRfd->List), &pDefaultAdapter->NumIdleRfd); - PlatformReleaseSpinLock(pDefaultAdapter, RT_RFD_SPINLOCK); - } - -#if RX_AGGREGATION - if(pParentRfd != NULL) - { - RT_ASSERT(pParentRfd->nChildCnt>0, ("ReturnRFDList(): Error handle Parent Rfd\n")); - - pParentRfd->nChildCnt--; - - if(pParentRfd->nChildCnt==0) - ReturnRFDList(pAdapter, pParentRfd); - } -#endif -} - - -VOID -ReturnRFDList( - PADAPTER pAdapter, - PRT_RFD pRfd -) -{ - u2Byte nTotalRFD,nRFDFreed = 0; - PRT_RFD NextRfd = pRfd; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - if(pRfd->bReturnDirectly) - { - // Clean the return the flag - pRfd->bReturnDirectly = FALSE; - ReturnRFD(pAdapter, pRfd); - return; - } - else if(pDefaultAdapter->bInChaosTest) - return; - - nTotalRFD = pRfd->nTotalFrag; - - do{ - pRfd = NextRfd; - NextRfd = pRfd->NextRfd; - - //2004/09/03, kcwu - pRfd->NextRfd = NULL; - - ReturnRFD(pAdapter, pRfd); - nRFDFreed++; - }while(NextRfd); - - if(nTotalRFD != 0) - RT_ASSERT(nTotalRFD==nRFDFreed, ("nTotalRFD not equal to nRFDFreed !!\n")); -} - -VOID -MakeRFDListOffsetAtBack( - PADAPTER Adapter, - PRT_RFD pRfd, - u2Byte offset - ) -{ - PRT_RFD pCurrentRfd, pPreviousRfd; - - if(pRfd->nTotalFrag==1) - { - MAKE_RFD_OFFSET_AT_BACK(pRfd, offset); - } - else - { - pPreviousRfd=pRfd; - pCurrentRfd=pRfd->NextRfd; - - //2 Find last 2 RFDs in list - while(pCurrentRfd->NextRfd) - { - pPreviousRfd=pCurrentRfd; - pCurrentRfd=pCurrentRfd->NextRfd; - } - - if(pCurrentRfd->FragLength > offset) - { - pCurrentRfd->FragLength-=offset; - } - else - { - //2 We need to remove last RFD - pPreviousRfd->FragLength-=(offset - pCurrentRfd->FragLength); - - pCurrentRfd->bReturnDirectly = TRUE; - ReturnRFDList(Adapter, pCurrentRfd); - - pRfd->nTotalFrag--; - pPreviousRfd->NextRfd=NULL; - } - - pRfd->PacketLength-= offset; - } -} - -RESET_TYPE -RxCheckStuck( - IN PADAPTER Adapter - ) -{ - { - if(Adapter->HalFunc.RxCheckStuckHandler(Adapter)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("RxStuck Condition\n")); - return RESET_TYPE_SILENT; - } - } - return RESET_TYPE_NORESET; -} - -VOID -RxCheckStuckDbg( - IN PADAPTER Adapter - ) -{ -} - -BOOLEAN -RxCheckResource( - PADAPTER pAdapter - ) -{ - if( (*GET_NUM_IDLE_RFD(pAdapter) + *GET_NUM_BUSY_RFD(pAdapter,RX_MPDU_QUEUE)) > RFD_LOWER_BOUND ) - return TRUE; - else - return FALSE; -} -BOOLEAN -RxCheckLength( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - OCTET_STRING frame; - u4Byte NeedLength = 0; - - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // - // 2013/07/01 MH TPLINK report a strange bug the packet length is over rx max buffer? - // We can only temporarily igore the packet. The packet length seems overflow. But only - // happend once and by USB XHCI?? - // - if (pRfd->PacketLength > 32768) // 32K max rx aggregation packet. - return FALSE; - - if(!IsDataFrame(frame.Octet)) - return TRUE; - - if(IsMgntNullFrame(frame.Octet)) - return TRUE; - - if(IsMgntQosNull(frame.Octet)) - return TRUE; - - - NeedLength = sMacHdrLng; - - if(pRfd->bRxBTdata) - return TRUE; - - // - if( pRfd->Status.bIsQosData ) - { - NeedLength += sQoSCtlLng; - } - - if( pRfd->Status.bContainHTC) - NeedLength += sHTCLng; - - if( Frame_WEP(frame)) - { - RT_ENC_ALG EncAlgorithm_M/*, EncAlgorithm_B*/; - u1Byte DestAddr[6]; - //SecGetEncryptionOverhead(PADAPTER Adapter, pu2Byte pMPDUHead, pu2Byte pMPDUTail, pu2Byte pMSDUHead, pu2Byte pMSDUTail, BOOLEAN bByPacket, BOOLEAN bIsBroadcastPkt) - - NeedLength += pSec->EncryptionHeadOverhead + pSec->EncryptionTailOverhead; - - // 2010/04/30 MH Add TKIP MIC length check. - // 2010/05/13 MH Add broadcast tkip length check. Multicast will corver broadcast. - PlatformMoveMemory(DestAddr, Frame_Addr1(frame), ETHERNET_ADDRESS_LENGTH); - EncAlgorithm_M = (MacAddr_isMulticast(DestAddr)?pSec->GroupEncAlgorithm:pSec->PairwiseEncAlgorithm); - //EncAlgorithm_B = (MacAddr_isBcst(DestAddr)?pSec->GroupEncAlgorithm:pSec->PairwiseEncAlgorithm); - if (EncAlgorithm_M == RT_ENC_ALG_TKIP/* || EncAlgorithm_B == RT_ENC_ALG_TKIP*/) - NeedLength += TKIP_MIC_LEN; - } - - return ( pRfd->PacketLength >= NeedLength ) ? TRUE:FALSE; - - -} - -// -// Description: -// This thread handles all Data/Mgnt frames notification on rx flow. -// -VOID -RxNotifyThreadCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = ((PRT_THREAD)pContext)->Adapter; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = NULL; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - u4Byte index = 0; - - while(TRUE) - { - if( PlatformAcquireSemaphore(&(pNdisCommon->RxNotifySemaphore)) != RT_STATUS_SUCCESS ) - break; - - if(pAdapter->bDriverIsGoingToUnload == TRUE) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[Rx Thread] Driver is going to unload\n")); - break; - } - - /**************************************************************************************************** - * 20150707 Sinda - * WDI will check MAC address in frame header when TID is WDI_EXT_TID_UNKNOWN(0x1f) or PeerId is Wildcard(0xffff) - * 1. We indicate frames with TID=0x10(Non-QoS) before connection establishment - * 2. We indicate frames with TID=0x1f(WDI_EXT_TID_UNKNOWN) after connection establishment - ****************************************************************************************************/ - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(index=0; index < MAX_PEER_NUM; index++) - { - if( !N6CIsNblWaitQueueEmpty(pDefaultAdapter->RxPeerQueue[index]) ) - { - if( pDefaultAdapter->RxPeerTable[index].bUsed == TRUE ) - { - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)pDefaultAdapter->RxPeerTable[index].uPortId); - if( pTargetAdapter != NULL ) - { - if( index < MP_DEFAULT_NUMBER_OF_PORT ) - DrvIFIndicateDataInQueue(pTargetAdapter, 0x10, (u2Byte)(index), RT_RX_INDICATION_GENERAL); - else - DrvIFIndicateDataInQueue(pTargetAdapter, WDI_EXT_TID_UNKNOWN, (u2Byte)(index), RT_RX_INDICATION_GENERAL); - } - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } - else - RT_TRACE(COMP_RECV, DBG_WARNING, ("[Rx Thread] There are data in queue, but the entry is unused\n")); - } - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } -} - diff --git a/network/wlan/WDI/COMMON/Receive.h b/network/wlan/WDI/COMMON/Receive.h deleted file mode 100644 index 8601c179..00000000 --- a/network/wlan/WDI/COMMON/Receive.h +++ /dev/null @@ -1,352 +0,0 @@ -#ifndef __INC_RECEIVE_H -#define __INC_RECEIVE_H - -// Sw calculate crc for debug usage -#define SW_CRC_CHECK FALSE -#define RX_DESC_NUM 64 - - // - // We set Maximum Rx Buffer Size to 16K to avoid USB BABBLE error status. 2008.06.20. - // Revise Maximal Receive buffer size to 32K to overcome Rx FIFO overflow issue. - // Suggeseted by Scott, 2008.10.03. - // - // 2011/05/31 MH We will fine tue RX aggregation size for USB later. - // -#define RX_AGG_BLOCK_SIZE 512 // hardware defined the size of a block, for USB mode -#define RX_AGG_PAGE_SIZE 128 // hardware defined the size of a page, for DMA mode - -#define MAX_RX_AGG_BLKCNT 60 // Maximum available RX aggregation block count - -#define RX_INTERRUPT_BUFFER_SIZE_8812AU 60 -#define RX_INTERRUPT_BUFFER_SIZE_8192EU 60 -#define RX_INTERRUPT_BUFFER_SIZE_88EU 60 -#define RX_INTERRUPT_BUFFER_SIZE_92CU 56 -#define MAX_INTERRUPT_TRANSFER_PACKET_SIZE 64 // 1024Bytes for High speed, 64Bytes for Full speed. - - -#define IsThereVacancyRxDesc(_Adapter, _QueueID) \ - ((_Adapter)->nBufInRxDesc[_QueueID] < (_Adapter)->NumRxDesc[_QueueID]) - -#define IsThereBufferInRxDesc(_Adapter, _QueueID) \ - ((_Adapter)->nBufInRxDesc[_QueueID] > 0) - -#define IncrementRxDescToFill(_Adapter, _QueueID) \ - (_Adapter)->NextRxDescToFill[_QueueID]=((_Adapter)->NextRxDescToFill[_QueueID]+1)%(_Adapter)->NumRxDesc[_QueueID]; \ - (_Adapter)->nBufInRxDesc[_QueueID]++; - -#define IncrementRxDescToCheck(_Adapter, _QueueID) \ - (_Adapter)->NextRxDescToCheck[_QueueID]=((_Adapter)->NextRxDescToCheck[_QueueID]+1)%(_Adapter)->NumRxDesc[_QueueID]; \ - (_Adapter)->nBufInRxDesc[_QueueID]--; - - -#define MAKE_RFD_OFFSET_AT_FRONT(_pRfd, _offset) \ - (_pRfd)->FragOffset+=_offset; \ - (_pRfd)->FragLength-=_offset; \ - (_pRfd)->PacketLength-=_offset; - -#define MAKE_RFD_OFFSET_AT_BACK(_pRfd, _offset) \ - (_pRfd)->FragLength-=_offset; \ - (_pRfd)->PacketLength-=_offset; - -#define MAKE_RFD_LIST_OFFSET_AT_FRONT(_pRfd, _offset) \ - MAKE_RFD_OFFSET_AT_FRONT(_pRfd, _offset) - -#define MAKE_RFD_LIST_OFFSET_AT_BACK(_Adapter, _pRfd, _offset) \ - MakeRFDListOffsetAtBack(_Adapter, _pRfd, _offset) - -// Records of received packet not yet returned, 2007.01.19, by shien chang. -#define RT_INC_RCV_REF(_Adapter) ((_Adapter)->RcvRefCount++) -#define RT_DEC_RCV_REF(_Adapter) (((_Adapter)->RcvRefCount>0)?((_Adapter)->RcvRefCount--):((_Adapter)->RcvRefCount=0)) -#define RT_GET_RCV_REF(_Adapter) ((_Adapter)->RcvRefCount) -#define RT_INC_N_RCV_REF(_Adapter, _n) ((_Adapter)->RcvRefCount+=_n) - -#if WLAN_ETW_SUPPORT -#define RT_INC_TX_FRAME_UNIQUE_ID(_Adapter) ((GetDefaultAdapter(_Adapter))->TxFrameUniqueueID++) -#define RT_GET_TX_FRAME_UNIQUE_ID(_Adapter) ((GetDefaultAdapter(_Adapter))->TxFrameUniqueueID) -#define RT_INC_RX_FRAME_UNIQUE_ID(_Adapter) ((GetDefaultAdapter(_Adapter))->RxFrameUniqueueID++) -#define RT_GET_RX_FRAME_UNIQUE_ID(_Adapter) ((GetDefaultAdapter(_Adapter))->RxFrameUniqueueID) -#endif - -VOID -InitializeRxVariables( - PADAPTER Adapter - ); - -VOID -DeInitializeRxVariables( - PADAPTER Adapter - ); - -BOOLEAN -ChkValidRFDs( - PADAPTER Adapter, - pu4Byte pRfdAddr - ); - - -BOOLEAN -ChkValidVAs( - PADAPTER Adapter, - pu4Byte pRfdAddr - ); - -RT_STATUS -PrepareRFDs( - PADAPTER Adapter - ); - -VOID -FreeRFDs( - PADAPTER Adapter, - BOOLEAN bReset - ); - -VOID -PrepareAllRxDescBuffer( - PADAPTER Adapter - ); - -VOID -PrepareOneRxDescBuffer8814AE( - PADAPTER Adapter - ); - -VOID -SpareRxDesc( - PADAPTER Adapter - ); - -VOID -ResetRxStatistics( - PADAPTER Adapter - ); - -VOID -CountRxFragmentStatistics( - PADAPTER Adapter - ); - -VOID -CountRxStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - - -VOID -CountRxErrStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountRxExcludedUnencryptedStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountRxTKIPLocalMICFailuresStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountRxMgntTKIPLocalMICFailuresStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxTKIPDecryptErrorsStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountRxCCMPDecryptErrorsStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountWEPICVErrorStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountRxTKIPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntTKIPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntCCMPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxCCMPRelpayStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntTKIPNoEncryptStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntCCMPNoEncryptStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntMFPTKIPMHDRStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntTKIPDecryptErrorsStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -CountRxMgntCCMPDecryptErrorsStatistics( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -RxStatisticsWatchdog( - IN PADAPTER Adapter - ); - -VOID -CountTKIPICVErrorStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - - -VOID -CountRxDecryptSuccessStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - - -VOID -CountRxDecryptErrorStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -CountWEPUndecryptableStatistics( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -BOOLEAN -RxCheckSWDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -PADAPTER -SelectReceiveAdapter( - PADAPTER Adapter, - OCTET_STRING frame -); - -VOID -ProcessReceivedPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -ProcessReceivedPacketForEachPortSpecific( - PADAPTER Adapter, - PRT_RFD pRfd -); - -BOOLEAN -DefragPacket( - PADAPTER Adapter, - PRT_RFD *ppRfd, - PBOOLEAN pbQueued - ); - -BOOLEAN -TranslateRxPacketHeader( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -BOOLEAN -TranslateHandleRxDot11FrameHeader( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -TranslateRxLLCHeaders( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -ReturnRFDList( - PADAPTER pAdapter, - PRT_RFD pRfd -); - -VOID -MakeRFDListOffsetAtBack( - PADAPTER Adapter, - PRT_RFD pRfd, - u2Byte offset - ); - -RESET_TYPE -RxCheckStuck( - IN PADAPTER Adapter - ); - -VOID -RxCheckStuckDbg( - IN PADAPTER Adapter - ); - -BOOLEAN -RxCheckLength( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -BOOLEAN -RxCheckResource( - PADAPTER pAdapter - ); - -VOID -RxNotifyThreadCallback( - IN PVOID pContext - ); - - -#endif // #ifndef __INC_RECEIVE_H diff --git a/network/wlan/WDI/COMMON/RxReorder.c b/network/wlan/WDI/COMMON/RxReorder.c deleted file mode 100644 index ca7cb009..00000000 --- a/network/wlan/WDI/COMMON/RxReorder.c +++ /dev/null @@ -1,497 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "RxReorder.tmh" -#endif - - -BOOLEAN -InsertRxReorderList( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN PRX_TS_RECORD pTS, - IN u2Byte SeqNum - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRX_REORDER_ENTRY pReorderEntry; - PRT_LIST_ENTRY pList = &pTS->RxPendingPktList; - - if(!RTIsListEmpty(&pMgntInfo->RxReorder_Unused_List)) - { - pReorderEntry = (PRX_REORDER_ENTRY)RTRemoveHeadList(&pMgntInfo->RxReorder_Unused_List); - - // Make a reorder entry and insert into a the packet list. - pReorderEntry->SeqNum = SeqNum; - pReorderEntry->pRfd = pRfd; - - while(pList->Blink != &pTS->RxPendingPktList) - { - if( SN_LESS(pReorderEntry->SeqNum, ((PRX_REORDER_ENTRY)pList->Blink)->SeqNum) ) - { - // Not reach correct position yet!! - pList = pList->Blink; - } - else if( SN_EQUAL(pReorderEntry->SeqNum, ((PRX_REORDER_ENTRY)pList->Blink)->SeqNum) ) - { - // Duplicate entry is found!! Do not insert current entry. - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("InsertRxReorderList(): Duplicate packet is dropped!! IndicateSeq: %d, NewSeq: %d\n", pTS->RxIndicateSeq, SeqNum)); - - RTInsertTailList(&pMgntInfo->RxReorder_Unused_List, &pReorderEntry->List); - return FALSE; - } - else - { - break; - } - } - - pReorderEntry->List.Blink = pList->Blink; - pReorderEntry->List.Blink->Flink = &pReorderEntry->List; - pReorderEntry->List.Flink = pList; - pList->Blink = &pReorderEntry->List; - - RT_TRACE(COMP_RX_REORDER, DBG_TRACE, ("InsertRxReorderList(): Pkt insert into buffer!! IndicateSeq: %d, NewSeq: %d\n", pTS->RxIndicateSeq, SeqNum)); - return TRUE; - } - else - { - // This part shall be modified!! We can just indicate all the packets in buffer and get reorder entries. - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("InsertRxReorderList(): There is no reorder entry!! Packet is dropped!!\n")); - return FALSE; - } -} - -VOID -IndicateRxReorderList( - IN PADAPTER Adapter, - IN PRX_TS_RECORD pTS, - IN BOOLEAN bForced - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = pMgntInfo->pHTInfo; - PRX_REORDER_ENTRY pReorderEntry = NULL; - u2Byte index = 0; - BOOLEAN bPktInBuf = FALSE; -// PRT_RFD pRfdIndicateArray[REORDER_WIN_SIZE]; - PRT_RFD *pRfdIndicateArray; - PRT_GEN_TEMP_BUFFER pGenBuf; - - Adapter->rxReorderIndEnterCnt++; - - if(PlatformAtomicExchange(&Adapter->rxReorderRefCount, TRUE) == TRUE) - { - Adapter->rxReorderIndRejectCnt[0]++; - RT_TRACE(COMP_INIT, DBG_LOUD, ("IndicateRxReorderList(): There is already another thread running by AtomicExchange, happened %d times!!!\n", Adapter->rxReorderIndRejectCnt[0])); - return; - } - - // Check if there is any other indication thread running. - if(pTS->RxIndicateState == RXTS_INDICATE_PROCESSING) - { - PlatformAtomicExchange(&Adapter->rxReorderRefCount, FALSE); - Adapter->rxReorderIndRejectCnt[1]++; - RT_TRACE(COMP_INIT, DBG_LOUD, ("IndicateRxReorderList(): There is already another thread running by RXTS_INDICATE_PROCESSING, happened %d times!!!\n", Adapter->rxReorderIndRejectCnt[1])); - return; - } - - // Handling some condition for forced indicate case. - if(bForced) - { - if(RTIsListEmpty(&pTS->RxPendingPktList)) - { - PlatformAtomicExchange(&Adapter->rxReorderRefCount, FALSE); - Adapter->rxReorderIndRejectCnt[2]++; - RT_TRACE(COMP_INIT, DBG_LOUD, ("IndicateRxReorderList(): There is already another thread running by ListEmpty, happened %d times!!!\n", Adapter->rxReorderIndRejectCnt[2])); - return; - } - else - { - pReorderEntry = (PRX_REORDER_ENTRY)RTGetHeadList(&pTS->RxPendingPktList); - pTS->RxIndicateSeq = pReorderEntry->SeqNum; - } - } - - Adapter->rxReorderIndAllowCnt++; - - pGenBuf = GetGenTempBuffer (Adapter, sizeof(PRT_RFD)*REORDER_WIN_SIZE); - pRfdIndicateArray = (PRT_RFD *)pGenBuf->Buffer.Ptr; - - // Prepare indication list and indication. - do{ - // Check if there is any packet need indicate. - while(!RTIsListEmpty(&pTS->RxPendingPktList)) - { - pReorderEntry = (PRX_REORDER_ENTRY)RTGetHeadList(&pTS->RxPendingPktList); - - if(!SN_LESS(pTS->RxIndicateSeq, pReorderEntry->SeqNum)) - { - // This protect buffer from overflow. - if(index >= REORDER_WIN_SIZE) - { - RT_ASSERT(FALSE, ("IndicateRxReorderList(): Buffer overflow!! \n")); - bPktInBuf = TRUE; - break; - } - if(index > 0) - { - if(PlatformCompareMemory(pReorderEntry->pRfd->Address3,pRfdIndicateArray[index-1]->Address3,6) != 0) - { - bPktInBuf = TRUE; - break; - } - } - - pReorderEntry = (PRX_REORDER_ENTRY)RTRemoveHeadList(&pTS->RxPendingPktList); - - if(SN_EQUAL(pReorderEntry->SeqNum, pTS->RxIndicateSeq)) - pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096; - - RT_TRACE(COMP_RX_REORDER, DBG_LOUD, ("RxReorderIndicatePacket(): Packets indication!! IndicateSeq: %d\n", pReorderEntry->SeqNum)); - pRfdIndicateArray[index] = pReorderEntry->pRfd; - index++; - - RTInsertTailList(&pMgntInfo->RxReorder_Unused_List, &pReorderEntry->List); - } - else - { - bPktInBuf = TRUE; - break; - } - } - - // Handling pending timer. Set this timer to prevent from long time Rx buffering. - if(index>0) - { - // Cancel previous pending timer. - { - PlatformCancelTimer(Adapter, &pTS->RxPktPendingTimer); - - // Set this as a lock to make sure that only one thread is indicating packet. - pTS->RxIndicateState = RXTS_INDICATE_PROCESSING; - } - - // Indicate packets - RT_ASSERT((index<=REORDER_WIN_SIZE), ("RxReorderIndicatePacket(): Rx Reorder buffer full!! \n")); - - // Packets indication. - DrvIFIndicatePackets(Adapter, pRfdIndicateArray, index); - - // Update local variables. - //bPktInBuf = FALSE; - index = 0; - } - else - { - break; - } - }while(TRUE); - - ReturnGenTempBuffer(Adapter, pGenBuf); - - // Release the indication lock and set to new indication step. - if(bPktInBuf) - { - u1Byte set_penf_timer=FALSE; - - { - if(pTS->RxIndicateState != RXTS_INDICATE_REORDER) - set_penf_timer = TRUE; - } - - if (set_penf_timer == TRUE) - { - // Set new pending timer. - pTS->RxIndicateState = RXTS_INDICATE_REORDER; - PlatformSetTimer(Adapter, &pTS->RxPktPendingTimer, pHTInfo->RxReorderPendingTime); - } - } - else - { - pTS->RxIndicateState = RXTS_INDICATE_IDLE; - } - - PlatformAtomicExchange(&Adapter->rxReorderRefCount, FALSE); -} - - -BOOLEAN -ISinWindow( - IN u2Byte NewSeqNum, - IN u2Byte RxIndicateSeq - ) -{ - if( NewSeqNum == RxIndicateSeq) - return TRUE; - - if( NewSeqNum > RxIndicateSeq ) - { - if( ( NewSeqNum - RxIndicateSeq ) < REORDER_WIN_SIZE ) - return TRUE; - else - return FALSE; - } - else - { - if( ( NewSeqNum + 4096 - RxIndicateSeq ) < REORDER_WIN_SIZE ) - return TRUE; - else - return FALSE; - } -} - -BOOLEAN -CheckRxTsIndicateSeq( - IN PADAPTER Adapter, - IN PRX_TS_RECORD pTS, - IN u2Byte NewSeqNum - ) -{ - PRT_HIGH_THROUGHPUT pHTInfo = Adapter->MgntInfo.pHTInfo; - u1Byte WinSize = pHTInfo->RxReorderWinSize; - u2Byte WinEnd = (pTS->RxIndicateSeq + WinSize -1)%4096; - - // Rx Reorder initialize condition. - if(pTS->RxIndicateSeq == 0xffff) - pTS->RxIndicateSeq = NewSeqNum; - - // Drop out the packet which SeqNum is smaller than WinStart - if( SN_LESS(NewSeqNum, pTS->RxIndicateSeq ) ) - { - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("CheckRxTsIndicateSeq(): Packet Drop! IndicateSeq: %d, NewSeq: %d\n", pTS->RxIndicateSeq, NewSeqNum)); - return FALSE; - } - - // - // SeqNum "MUST" in Window Size !! - // - if( !ISinWindow(NewSeqNum , pTS->RxIndicateSeq ) ) - { - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("CheckRxTsIndicateSeq(): out-off squence !! Packet Drop! IndicateSeq: %d, NewSeq: %d\n", pTS->RxIndicateSeq, NewSeqNum)); - return FALSE; - } - - // - // Sliding window manipulation. Conditions includes: - // 1. Incoming SeqNum is equal to WinStart =>Window shift 1 - // 2. Incoming SeqNum is larger than the WinEnd => Window shift N - // - if( SN_EQUAL(NewSeqNum, pTS->RxIndicateSeq) ) - { - pTS->RxIndicateSeq = (pTS->RxIndicateSeq + 1) % 4096; - } - else if(SN_LESS(WinEnd, NewSeqNum)) - { - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("CheckRxTsIndicateSeq(): Window Shift! IndicateSeq: %d, NewSeq: %d\n", pTS->RxIndicateSeq, NewSeqNum)); - if(NewSeqNum >= (WinSize - 1)) - pTS->RxIndicateSeq = NewSeqNum + 1 -WinSize; - else - pTS->RxIndicateSeq = 4095 - (WinSize - (NewSeqNum +1)) + 1; - } - - return TRUE; -} - -VOID -FlushRxTsPendingPkts( - IN PADAPTER Adapter, - IN PRX_TS_RECORD pTS - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRX_REORDER_ENTRY pRxReorderEntry; -// PRT_RFD RfdArray[REORDER_WIN_SIZE]; - PRT_RFD *RfdArray; - u2Byte RfdCnt = 0; - PRT_GEN_TEMP_BUFFER pGenBuf; - - - if(RTIsListEmpty(&pTS->RxPendingPktList)) - { - pTS->RxIndicateSeq = 0xffff; - pTS->RxIndicateState = RXTS_INDICATE_IDLE; - return; - } - - pGenBuf = GetGenTempBuffer (Adapter, sizeof(PRT_RFD)*REORDER_WIN_SIZE); - RfdArray = (PRT_RFD *)pGenBuf->Buffer.Ptr; - - PlatformCancelTimer(Adapter, &pTS->RxPktPendingTimer); - while(!RTIsListEmpty(&pTS->RxPendingPktList)) - { - pRxReorderEntry = (PRX_REORDER_ENTRY)RTRemoveHeadList(&pTS->RxPendingPktList); - RfdArray[RfdCnt] = pRxReorderEntry->pRfd; - RfdCnt = RfdCnt + 1; - RTInsertTailList(&pMgntInfo->RxReorder_Unused_List, &pRxReorderEntry->List); - } - DrvIFIndicatePackets(Adapter, RfdArray, RfdCnt); - - ReturnGenTempBuffer(Adapter, pGenBuf); - - pTS->RxIndicateSeq = 0xffff; - pTS->RxIndicateState = RXTS_INDICATE_IDLE; -} - -VOID -FlushAllRxTsPendingPkts( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRX_TS_RECORD pTS_Record = (PRX_TS_RECORD) RTGetHeadList(&pMgntInfo->Rx_TS_Admit_List); - - while((&pTS_Record->TsCommonInfo.List) != (&pMgntInfo->Rx_TS_Admit_List)) - { - FlushRxTsPendingPkts(Adapter, pTS_Record); - - pTS_Record = (PRX_TS_RECORD)RTNextEntryList(&pTS_Record->TsCommonInfo.List); - } -} - -#if RX_AGGREGATION -VOID -RxReorderAggrBatchIndicate( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = pMgntInfo->pHTInfo; - PRX_TS_RECORD pTS = pRfd->Status.pRxTS; - u2Byte SeqNum = pRfd->Status.Seq_Num; - u1Byte TmpCnt; - - if(!CheckRxTsIndicateSeq(Adapter, pTS, SeqNum)) - { - pHTInfo->RxReorderDropCounter++; - ReturnRFDList(Adapter, pRfd); - return; - } - - //3 Current packet is going to be inserted into pending list. - if(!InsertRxReorderList(Adapter, pRfd, pTS, SeqNum)) - { - ReturnRFDList(Adapter, pRfd); - } - else - { - TmpCnt = 0; - while((TmpCntIndicateTsCnt) && (pMgntInfo->IndicateTsArray[TmpCnt]!=pTS)) - TmpCnt++; - - if(TmpCnt == pMgntInfo->IndicateTsCnt) - { - pMgntInfo->IndicateTsArray[pMgntInfo->IndicateTsCnt] = pTS; - pMgntInfo->IndicateTsCnt++; - } - } - - if(pRfd->RxAggrInfo.bIsLastPkt) - { - for(TmpCnt=0; TmpCntIndicateTsCnt; TmpCnt++) - IndicateRxReorderList(Adapter, pMgntInfo->IndicateTsArray[TmpCnt], FALSE); - - pMgntInfo->IndicateTsCnt = 0; - } -} - -VOID -RxReorderAggrBatchFlushBuf( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte TmpCnt; - - for(TmpCnt=0; TmpCntIndicateTsCnt; TmpCnt++) - IndicateRxReorderList(Adapter, pMgntInfo->IndicateTsArray[TmpCnt], FALSE); - - pMgntInfo->IndicateTsCnt = 0; -} -#endif - - -VOID -RxReorderIndicatePacket( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = pMgntInfo->pHTInfo; - PRX_TS_RECORD pTS = pRfd->Status.pRxTS; - u2Byte SeqNum = pRfd->Status.Seq_Num; - - RT_TRACE(COMP_RX_REORDER, DBG_TRACE, ("==>RxReorderIndicatePacket()\n")); - - if(!CheckRxTsIndicateSeq(Adapter, pTS, SeqNum)) - { - pHTInfo->RxReorderDropCounter++; - ReturnRFDList(Adapter, pRfd); - RT_TRACE(COMP_RX_REORDER, DBG_TRACE, ("<==RxReorderIndicatePacket(): Packet Drop!!\n")); - return; - } - - // Insert all packet into Reorder Queue to maintain its ordering. - if(!InsertRxReorderList(Adapter, pRfd, pTS, SeqNum)) - ReturnRFDList(Adapter, pRfd); - - // - // Indication process. - // After Packet dropping and Sliding Window shifting as above, we can now just indicate the packets - // with the SeqNum smaller than latest WinStart and buffer other packets. - // - // For Rx Reorder condition: - // 1. All packets with SeqNum smaller than WinStart => Indicate - // 2. All packets with SeqNum larger than or equal to WinStart => Buffer it. - // - IndicateRxReorderList(Adapter, pTS, FALSE); - - RT_TRACE(COMP_RX_REORDER, DBG_TRACE, ("<==RxReorderIndicatePacket():\n")); -} - -VOID -RxPktPendingTimeout( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PRX_TS_RECORD pRxTS = (PRX_TS_RECORD)pTimer->Context; - BOOLEAN bSupportAvoidRxDpcWatchdogVoilation = FALSE; - - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("==>RxPktPendingTimeout()\n")); - - //Only 8814AE set bSupportAvoidRxDpcWatchdogVoilation ture now. - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_AVOID_RX_DPC_WATCHDOG_VIOLATION, (pu1Byte)(&bSupportAvoidRxDpcWatchdogVoilation)); - if(bSupportAvoidRxDpcWatchdogVoilation) - { - if(Adapter->IntrInterruptRefCount == TRUE) - { - PlatformSetTimer(Adapter, &pRxTS->RxPktPendingTimer, 1); - return; - } - if(PlatformAtomicExchange(&Adapter->RxPktPendingTimeoutRefCount, TRUE) == TRUE) - { - PlatformSetTimer(Adapter, &pRxTS->RxPktPendingTimer, 1); - return; - } - } - - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - - // Only do indication process in Batch and Reorder state in this function. - if(pRxTS->RxIndicateState==RXTS_INDICATE_BATCH) - IndicateRxReorderList(Adapter, pRxTS, FALSE); - else if(pRxTS->RxIndicateState==RXTS_INDICATE_REORDER) - IndicateRxReorderList(Adapter, pRxTS, TRUE); - - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - if(bSupportAvoidRxDpcWatchdogVoilation) - PlatformAtomicExchange(&Adapter->RxPktPendingTimeoutRefCount, FALSE); - - RT_TRACE(COMP_RX_REORDER, DBG_WARNING, ("<==RxPktPendingTimeout()\n")); - -} - diff --git a/network/wlan/WDI/COMMON/RxReorder.h b/network/wlan/WDI/COMMON/RxReorder.h deleted file mode 100644 index 30bcdbe8..00000000 --- a/network/wlan/WDI/COMMON/RxReorder.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef __INC_RXREORDER_H -#define __INC_RXREORDER_H - - -#define RXTS_INDICATE_IDLE 0 // Idle, No packet needs to process. -#define RXTS_INDICATE_BATCH 1 // Batch, Waiting for other packets to do batch indication -#define RXTS_INDICATE_REORDER 2 // Reorder, Waiting for other packets because of ordering -#define RXTS_INDICATE_PROCESSING 3 // Processing, Packets are indicating now -#define RXTS_INDICATE_FAST 4 // Fast indicate in rx batch indication - -#define RX_BATCH_PACKET_NUM 10 - -typedef enum _RX_REORDER_ACTION { - NOT_INDICATE, - INDICATED, - RX_REORDER_INDICATE -}RX_REORDER_ACTION; - - - -VOID -IndicateRxReorderList( - IN PADAPTER Adapter, - IN PRX_TS_RECORD pTS, - IN BOOLEAN bForced - ); - -VOID -FlushRxTsPendingPkts( - IN PADAPTER Adapter, - IN PRX_TS_RECORD pTS - ); - -VOID -FlushAllRxTsPendingPkts( - IN PADAPTER Adapter - ); - -#if RX_AGGREGATION -VOID -RxReorderAggrBatchIndicate( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -RxReorderAggrBatchFlushBuf( - IN PADAPTER Adapter - ); -#endif - - -VOID -RxReorderIndicatePacket( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -RxPktPendingTimeout( - PRT_TIMER pTimer - ); - -#endif \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/SMBios.h b/network/wlan/WDI/COMMON/SMBios.h deleted file mode 100644 index 6c84d8a1..00000000 --- a/network/wlan/WDI/COMMON/SMBios.h +++ /dev/null @@ -1,128 +0,0 @@ -#ifndef __INC_SMBIOS_H -#define __INC_SMBIOS_H - -#if (SMBIOS_SUPPORT == 1) - -#define SMBIOSBUFSize 0x1000 - -typedef enum _SMBIOS_TYPE{ - SMBIOS_BIOS_INFORMATION = 0, - SMBIOS_SYSTEM_INFORMATION = 1, - SMBIOS_BASE_BOARD_INFORMATION = 2, - SMBIOS_SYSTEM_ENCLOSURE_OR_CHASSIS = 3, - SMBIOS_PROCESSOR_INFORMATION = 4, - SMBIOS_MEMORY_CONTROLLER_INFORMATION = 5, - SMBIOS_MEMORY_MODULE_INFORMATION = 6, - SMBIOS_CACHE_INFORMATION = 7, - SMBIOS_PORT_CONNECTOR_INFORMATION = 8, - SMBIOS_SYSTEM_SLOTS = 9, - SMBIOS_ON_BOARD_DEVICES_INFORMATION = 10, - SMBIOS_OEM_STRINGS = 11, - SMBIOS_MUTUAL_AUTHENTICATION = 133, - SMBIOS_MAX = 127, - SMBIOS_SKU = 248 -}SMBIOS_TYPE; - -typedef enum _SMBIOS_STATUS{ - SMBIOS_STATUS_SUCCESS = 0, - SMBIOS_STATUS_WMIOpenBlockFail = 1, - SMBIOS_STATUS_AllocateMemFail = 2, - SMBIOS_STATUS_WMIQueryDataFail = 3, - SMBIOS_STATUS_MutualAuthSuccess = 4, - SMBIOS_STATUS_MutualAuthFail = 5, - SMBIOS_STATUS_FAILURE = 6 -}SMBIOS_STATUS; - -typedef enum _UEFI_STATUS{ - UEFI_STATUS_SUCCESS = 0, - UEFI_STATUS_AllocateMemFail = 1, - UEFI_STATUS_GetUEFIFail = 2, - UEFI_STATUS_ProfileNotDefined = 3, - UEFI_STATUS_ProfileUnknown = 4, - UEFI_STATUS_UnsupportedOS = 5, - UEFI_STATUS_FAILURE = 6 -}UEFI_STATUS; - -typedef enum _UEFI_PROFILE{ - UEFI_PROFILE_UNDEFINED = 0, - UEFI_PROFILE_LENOVO_CHINA = 1, - UEFI_PROFILE_MAX = 100 -}UEFI_PROFILE; - -typedef struct _SMBIOS_DATA{ - u4Byte country; - u1Byte SAR_Power; - - u8Byte ProcessorID; - - BOOLEAN bAsusTX201; - BOOLEAN bWABTSeries; - BOOLEAN bB550; - -#if(MUTUAL_AUTHENTICATION == 1) - SMBIOS_STATUS MutualAuth; - BOOLEAN MutualAuthEnable; - BOOLEAN MutualAuthFail; -#endif -}SMBIOS_DATA, *PSMBIOS_DATA; - -#if(MUTUAL_AUTHENTICATION == 1) -#define SMBIOS_SET_MA_ENABLE(_Adapter, _Enable) (GET_HAL_DATA(_Adapter)->SmbiosData.MutualAuthEnable = _Enable) -#define SMBIOS_GET_MA_STATUS(_Adapter) (GET_HAL_DATA(_Adapter)->SmbiosData.MutualAuthFail) -#endif -#define SMBIOS_GET_COUNTRY_CODE(_Adapter) (GET_HAL_DATA(_Adapter)->SmbiosData.country) -#define SMBIOS_GET_SAR_TABLE(_Adapter) (GET_HAL_DATA(_Adapter)->SmbiosData.SAR_Power) - -#define SMBIOS_GET_PROCESSOR_ID(_Adapter) (GET_HAL_DATA(_Adapter)->SmbiosData.ProcessorID) - -#define SMBIOS_GET_IS_B550(_Adapter) (GET_HAL_DATA(_Adapter)->SmbiosData.bB550) - -VOID -SmbiosCheckSystemInfo( - IN PADAPTER Adapter - ); - -VOID -UEFICheckSystemInfo( - IN PADAPTER Adapter - ); - -#if(MUTUAL_AUTHENTICATION == 1) -VOID -SmbiosGetMutualAuth( - IN PADAPTER Adapter, - IN pu1Byte pSMBIOSData, - IN ULONG RemainLen - ); -VOID -MutualAuthWorkItemCallback( - IN PVOID pContext - ); -VOID -SmbiosCheckMutualAuth( - IN PADAPTER Adapter - ); -#else -#define SmbiosGetMutualAuth(_Adapter, _pSMBIOSData, _RemainLen) -#define SmbiosCheckMutualAuth(_Adapter) -#endif - -#else -#define SMBIOS_DATA u1Byte - -#define SMBIOS_GET_MA_STATUS(_Adapter) FALSE -#define SMBIOS_GET_COUNTRY_CODE(_Adapter) 0 -#define SMBIOS_GET_SAR_TABLE(_Adapter) 0 - -#define SMBIOS_GET_PROCESSOR_ID(_Adapter) 0 -#define SMBIOS_GET_IS_B550(_Adapter) 0 - -#define UEFICheckSystemInfo(_Adapter) -#define SmbiosCheckSystemInfo(_Adapter) -#define SmbiosGetMutualAuth(_Adapter, _pSMBIOSData, _RemainLen) -#define MutualAuthWorkItemCallback(_pContext) NULL -#define SmbiosCheckMutualAuth(_Adapter) - -#endif - -#endif diff --git a/network/wlan/WDI/COMMON/SecurityGen.c b/network/wlan/WDI/COMMON/SecurityGen.c deleted file mode 100644 index 23abf5b4..00000000 --- a/network/wlan/WDI/COMMON/SecurityGen.c +++ /dev/null @@ -1,6062 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "SecurityGen.tmh" -#endif - - -//===========Define Local Function Protype=================== - -BOOLEAN -SecCheckMIC( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING frame; - u1Byte DestAddr[6]; - RT_ENC_ALG EncAlgorithm; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - BOOLEAN bResult = TRUE; - - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - //2004/07/12, kcwu, - //Check if the packet is encrypted - if(!Frame_WEP(frame)) - { - return bResult; - } - - //2004/07/12, kcwu - //Find the algorithm that should be used - PlatformMoveMemory(DestAddr, Frame_Addr1(frame), ETHERNET_ADDRESS_LENGTH); - EncAlgorithm = (MacAddr_isMulticast(DestAddr)?pSec->GroupEncAlgorithm:pSec->PairwiseEncAlgorithm); - switch(EncAlgorithm){ - case RT_ENC_ALG_TKIP: - bResult = SecCheckTKIPMIC(Adapter, pRfd); - break; - case RT_ENC_ALG_AESCCMP: - //2004/07/12, kcwu - //Check AES MIC - break; - default: - bResult = TRUE; - } - return bResult; - -} - - -// -// Description: -// Figure out TKIP MIC from packet content and compare it to -// MIC of packet received. -// -// 2004.10.08, by rcnjko. -// -BOOLEAN -SecCheckTKIPMIC( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - u1Byte DestAddr[6]; - u1Byte SrcAddr[6]; - u1Byte Keyidx = 0; - u1Byte Qos[4]; - MicData micdata; - u1Byte mic_for_check[8], mic_from_packet[8]; - OCTET_STRING frame = {0}; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - PRT_RFD pPrevRfd = NULL; - PRT_RFD pCurrRfd = NULL; - pu1Byte pCurrBuffer = NULL; - int CurrBufferLen = 0; - PRT_WLAN_STA pEntry =NULL; - u1Byte IVOffset; // Added by Annie, 2005-12-23. - u1Byte IVKeyIdOffset; - - // This is just a workaround for HCT 12.1, 2005.07.11, by rcnjko. - if(pMgntInfo->mIbss) - { - return TRUE; - } - - // This is just a workaround for WiFi 5.2.2.4 S2 might failed - // in unknown condition. For example, we think the packets received is TKIP MIC error - // during this test and finally trigger counter measure. 2005.09.06, by rcnjko. - // Prefast warning C28182: Dereferencing NULL pointer. 'pRfd' contains NULL. - if(pRfd != NULL && pRfd->nTotalFrag > 1) - { - return TRUE; - } - - // Initialize first buffer of the packet to as header. - // Prefast warning C6011: Dereferencing NULL pointer 'pRfd'. - if (pRfd != NULL) - { - FillOctetString(frame, pRfd->Buffer.VirtualAddress, (u2Byte)pRfd->FragLength); - } - //PRINT_DATA("Recieved Packet==>", pRfd->Buffer.VirtualAddress, pRfd->FragLength); - - // Get offset. Added by Annie, 2005-12-22. - if(pRfd != NULL && pRfd->Status.bIsQosData ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - // Prefast warning C6011: Dereferencing NULL pointer 'pRfd'. - if(pRfd != NULL && pRfd->Status.bContainHTC) - IVOffset += sHTCLng; - - IVKeyIdOffset = IVOffset + KEYID_POS_IN_IV; - - - // Packet length check. - if(pRfd != NULL && pRfd->PacketLength < IVOffset ) - { - RT_TRACE(COMP_DBG, DBG_LOUD, ("SecCheckTKIPMIC(): pRfd->PacketLength < IVOffset\n")); - return FALSE; // Drop the packet. - } - - // Prefast warning C6011: Dereferencing NULL pointer 'frame.Octet'. - if (frame.Octet != NULL) - { - // Get DestAddr from header. //Modified by Jay 0713 - PlatformMoveMemory(DestAddr, Frame_pDaddr(frame), ETHERNET_ADDRESS_LENGTH); - - // Get SrcAddr from header. - PlatformMoveMemory(SrcAddr, Frame_pSaddr(frame), ETHERNET_ADDRESS_LENGTH); - } - - // Step 1. Set key. - // Prefast warning C6011: Dereferencing NULL pointer 'frame.Octet' - if(ACTING_AS_AP(Adapter) && frame.Octet != NULL) //Added by Jay for SwAP 0708 - { // AP Mode. - pEntry = AsocEntry_GetEntry(pMgntInfo, Frame_pSaddr(frame)); - - if(pEntry == NULL) - return FALSE; - - if(pEntry->perSTAKeyInfo.RxMICKey == NULL) - return FALSE; - - SecMICSetKey(&micdata, pEntry->perSTAKeyInfo.RxMICKey); - } - else if(pRfd != NULL && pRfd->bTDLPacket) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, Frame_pSaddr(frame)); - - if(pEntry == NULL) - return FALSE; - - if(pEntry->perSTAKeyInfo.TxMICKey == NULL) - return FALSE; - - SecMICSetKey(&micdata, pEntry->perSTAKeyInfo.TxMICKey); - } - else - { // STA Mode. - // Get key index. - // Prefast warning C6011: Dereferencing NULL pointer 'frame.Octet' - if(frame.Octet != NULL) - Keyidx = SecGetRxKeyIdx( Adapter, DestAddr, ((frame.Octet[IVKeyIdOffset]>>6)&0x03) ); // Changed by Annie, 2005-12-22. - - //RT_TRACE(COMP_DBG, DBG_LOUD, ("SecCheckTKIPMIC(): Keyidx: %d\n", Keyidx)); - if(Keyidx > 4) - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("SecCheckTKIPMIC(): Keyidx: %d > 4\n", Keyidx)); - return FALSE; // Drop the packet. - } - - SecMICSetKey(&micdata, pSec->KeyBuf[Keyidx]+TKIP_MICKEYTX_POS); - - } - - // Step 2. Append DestAddr and SrcAddr into micdata. - SecMICAppend(&micdata, DestAddr, ETHERNET_ADDRESS_LENGTH); - SecMICAppend(&micdata, SrcAddr, ETHERNET_ADDRESS_LENGTH); - - // Step 3. Append Qos into micdata. - PlatformZeroMemory(Qos, 4); - if(pRfd != NULL && pRfd->Status.bIsQosData ) - { - // Parsing priority to calculate TKIP MIC. Annie, 2005-12-22. - Qos[0] = GET_QOS_CTRL_WMM_UP(frame.Octet); - } - - SecMICAppend(&micdata, Qos, 4); - - // Step 4. Append each buffers of the packet into micdata. - pCurrRfd = pRfd; - pPrevRfd = pRfd; // 2010/04/30 MH Prevent BSOD when copy mem from NULL ptr at below case. - //Exclude header of first buffer of the packet. - // Prefast warning C28182: Dereferencing NULL pointer. 'pCurrRfd' contains NULL - if (pCurrRfd != NULL) - { - pCurrBuffer = pCurrRfd->Buffer.VirtualAddress + (IVOffset + pSec->EncryptionHeadOverhead); - CurrBufferLen = (int)(pCurrRfd->FragLength) - ((int)(IVOffset)+(int)(pSec->EncryptionHeadOverhead)); - } - while(pCurrRfd != NULL) - { - // Get MIC of the Last buffer and exclude MIC from it. - if(pCurrRfd->NextRfd == NULL) - { - if(CurrBufferLen >= TKIP_MIC_LEN) - { // MIC is not fragmented. - - // Get MIC. - PlatformMoveMemory( - mic_from_packet, - pCurrBuffer + CurrBufferLen - TKIP_MIC_LEN, - TKIP_MIC_LEN); - - // Adjust size to append into micdata. - CurrBufferLen -= TKIP_MIC_LEN; - } - else - { // MIC is fragmented into two part. - int cbMicInPrev = TKIP_MIC_LEN - CurrBufferLen; - - RT_ASSERT(pPrevRfd != NULL, ("SecCheckTKIPMIC(): pRevRfd should not be NULL in this case.\n")); - - // Get MIC. - PlatformMoveMemory( - mic_from_packet, - pPrevRfd->Buffer.VirtualAddress + pPrevRfd->FragLength - cbMicInPrev, - cbMicInPrev); - PlatformMoveMemory( - mic_from_packet + cbMicInPrev, - pCurrBuffer, - CurrBufferLen); - - // Adjust size to append into micdata. - CurrBufferLen = 0; - } - } - else if(pCurrRfd->NextRfd->NextRfd == NULL) - { // In case if MIC is fragmented, we must take care about the last two fragment. - - if(pCurrRfd->NextRfd->FragLength < TKIP_MIC_LEN) - { // MIC is fragmented. - int cbMicInPrev = TKIP_MIC_LEN - pCurrRfd->NextRfd->FragLength; - - RT_ASSERT(CurrBufferLen >= TKIP_MIC_LEN, ("SecCheckTKIPMIC(): the length of last two buffer: %d\n", CurrBufferLen)); - // Adjust size to append into micdata. - CurrBufferLen -= cbMicInPrev; - } - } - - // Append this buffer into micdata. - if(CurrBufferLen > 0) - { - SecMICAppend(&micdata, pCurrBuffer, CurrBufferLen); - } - - // Next one. - pPrevRfd = pCurrRfd; - pCurrRfd = pCurrRfd->NextRfd; - if(pCurrRfd != NULL) - { - pCurrBuffer = pCurrRfd->Buffer.VirtualAddress + pCurrRfd->FragOffset; - CurrBufferLen = pCurrRfd->FragLength; - } - else - { - pCurrBuffer = NULL; - CurrBufferLen = 0; - } - } - - // Figure out MIC from micdata. - SecMICGetMIC(&micdata, mic_for_check); -// PRINT_DATA((const void*)"mic_for_check===>", (const void*)mic_for_check, TKIP_MIC_LEN); -// PRINT_DATA((const void*)"mic_from_packet===>", (const void*)mic_from_packet, TKIP_MIC_LEN); - - // Compare two MICs. - if(PlatformCompareMemory(mic_for_check, mic_from_packet,TKIP_MIC_LEN)) - { // Different! - BOOLEAN bMcstDest = MacAddr_isMulticast(DestAddr); - - // Prefast warning 6011: Dereferencing NULL pointer 'pRfd'. - if (pRfd != NULL) - { - RT_TRACE(COMP_SEC, DBG_WARNING, - ("Rx:TKIP_MIC Error, Decrypted: %x, bMcstDest: %d\n", - pRfd->Status.Decrypted, bMcstDest)); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "SecCheckTKIPMIC(): TKIP_MIC Error packet", pRfd->Buffer.VirtualAddress, pRfd->FragLength); - } - - if (frame.Octet != NULL) - { - if (IsDataFrame(frame.Octet)) - CountRxTKIPLocalMICFailuresStatistics(Adapter, pRfd); - else if (IsMgntFrame(frame.Octet)) - CountRxMgntTKIPLocalMICFailuresStatistics(Adapter, pRfd); - } - - // Handle TKIP MIC error. - if(ACTING_AS_AP(Adapter)) //Added by Jay 0708. - { // AP Mode. - //Enter integrity failure state... - Authenticator_StateINTEGRITYFAILURE(Adapter, pEntry); - } - else if(pRfd != NULL && pRfd->bTDLPacket) - { - Authenticator_StateINTEGRITYFAILURE(Adapter, pEntry); - } - else - { // STA Mode. - - // We don't indication MIC ERROR in MFP Packet !! - // Prefast warning C28182: Dereferencing NULL pointer. 'pRfd' contains the same NULL value as 'pCurrRfd' did. - if(pRfd != NULL && !pRfd->Status.bRxMFPPacket ) - PlatformHandleTKIPMICError(Adapter, bMcstDest, Keyidx, SrcAddr); - } - - return FALSE; - } - else - { // The same. - - RT_TRACE(COMP_DBG, DBG_LOUD, ("Rx:TKIP_MIC Ok\n")); - return TRUE; - } -} - - - -u1Byte -SecGetRxKeyIdx( - PADAPTER Adapter, - pu1Byte pDestAddr, - u1Byte IVKeyIdx - ) -{ - u1Byte keyidx = PAIRWISE_KEYIDX; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - //pairwise keyidx in our driver is 4 - - - if(MacAddr_isMulticast(pDestAddr)) - { - //2004/07/07, kcwu, if it is a multicast packet - //keyidx = ((pSec->KeyLen[pSec->GroupTransmitKeyIdx]==0)?5:pSec->GroupTransmitKeyIdx); - - // Use IV's Key ID for group key. - // 2004.10.06, by rcnjko. - if(pSec->KeyLen[IVKeyIdx] == 0) - { - keyidx = 5; - } - else - { - keyidx = IVKeyIdx; - } - } - else - { - //2004/07/07, kcwu, if it is a unicast packet - if(pSec->KeyLen[PAIRWISE_KEYIDX] == 0) - { - //2004/07/07, kcwu, if there is no pairwise key - keyidx = ((pMgntInfo->mIbss&&pSec->KeyLen[pSec->GroupTransmitKeyIdx]!=0)?pSec->GroupTransmitKeyIdx:5); - } - } - return keyidx; -} - - - -/*2004/06/28, kcwu -We don't fill security header of all fragment here, the for statement should in the outside function, -not in this function. So just simply provide the start of packet. - -*/ -VOID -SecHeaderFillIV( - PADAPTER Adapter, - pu1Byte PacketStart - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - OCTET_STRING oFrame = {0,0}; - RT_ENC_ALG SelectEncAlgorithm = pSec->PairwiseEncAlgorithm; - BOOLEAN show = FALSE; - - //Address 1 is always receiver's address - pu1Byte pRA = PacketStart+4; - pu1Byte pSecHeader = PacketStart + sMacHdrLng; - - if(pMgntInfo->SafeModeEnabled) - return; - - if( IsQoSDataFrame(PacketStart) ) - { - pSecHeader += sQoSCtlLng; - } - - // Check address 4 valiaddr , add for BT - // Note : AP WDS mode need to do .... - oFrame.Octet = PacketStart; - - if( Frame_ValidAddr4( oFrame ) ) - { - RT_TRACE( COMP_SEC , DBG_LOUD, ("===>SecHeaderFillIV() : 4 address data \n") ); - SelectEncAlgorithm = RT_ENC_ALG_AESCCMP; - pSecHeader += 6; - show = TRUE; - } - - switch(SelectEncAlgorithm){ - case RT_ENC_ALG_WEP104: - case RT_ENC_ALG_WEP40: - { - // CKIP should also go into this case. - pSecHeader[0] = EF1Byte( (u1Byte) (((pSec->TxIV&0x00000000ffffffff) >>16) & 0xff) ); - pSecHeader[1] = EF1Byte( (u1Byte) (((pSec->TxIV&0x00000000ffffffff) >>8) & 0xff) ); - pSecHeader[2] = EF1Byte( (u1Byte) (((pSec->TxIV&0x00000000ffffffff) >>0) & 0xff) ); - - - pSec->TxIV = (pSec->TxIV == 0xffffff)?0:pSec->TxIV+1; - //Default Key ID - pSecHeader[3] = EF1Byte( (u1Byte)((pSec->DefaultTransmitKeyIdx<<6)&0xc0) ); - } - break; - - case RT_ENC_ALG_TKIP: - { - if(!ACTING_AS_AP(Adapter)) - { // STA. - u2Byte u2IV16 = (u2Byte)(pSec->TxIV& UINT64_C(0x000000000000ffff) ); - u4Byte u4IV32 = (u4Byte)(((pSec->TxIV& UINT64_C(0x0000ffffffff0000) ) >> 16)& UINT64_C(0x00000000ffffffff) ); - pSec->TxIV++; - - //keyid is always 0 for STA - TKIP_TSC_DECIMAL2ARRAY(u2IV16, u4IV32, 0, pSecHeader); - } - else - { // AP. - if(!MacAddr_isMulticast(pRA)) - { // Unicast. - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_WLAN_STA pEntry; - u2Byte u2IV16; - u4Byte u4IV32; - - pEntry = AsocEntry_GetEntry(pMgntInfo, pRA); - - // Annie for debug, 2005-07-25. - RT_ASSERT( pEntry!=NULL, ("SecHeaderFillIV(): pEntry is NULL!\n")); - if( pEntry==NULL ) - return; - u2IV16 = (u2Byte)(pEntry->perSTAKeyInfo.TxIV & UINT64_C(0x000000000000ffff) ); - u4IV32 = (u4Byte)(((pEntry->perSTAKeyInfo.TxIV& UINT64_C(0x0000ffffffff0000) ) >> 16)& UINT64_C(0x00000000ffffffff) ); - pEntry->perSTAKeyInfo.TxIV++; - - //keyid is always 0 for STA - TKIP_TSC_DECIMAL2ARRAY(u2IV16, u4IV32, 0, pSecHeader); - } - else - { // Mcst/Bcst - u2Byte u2IV16 = (u2Byte)(pSec->TxIV& UINT64_C(0x000000000000ffff) ); - u4Byte u4IV32 = (u4Byte)(((pSec->TxIV& UINT64_C( 0x0000ffffffff0000) ) >> 16)& UINT64_C(0x00000000ffffffff)); - pSec->TxIV++; - - // This is just a workaround, we assume group keyid=1. - TKIP_TSC_DECIMAL2ARRAY(u2IV16, u4IV32, 1, pSecHeader); - } - } - } - break; - - case RT_ENC_ALG_AESCCMP: - if(!pMgntInfo->bRSNAPSKMode && !ACTING_AS_AP(Adapter) ) - { - if(show) - { - RT_TRACE( COMP_SEC , DBG_LOUD , ("===>ccw Ok \n") ); - } - - PN_DECIMAL2ARRAY((pSec->TxIV& UINT64_C(0xffffffff00000000) ), - (pSec->TxIV& UINT64_C(0x00000000ffffffff)), - PAIRWISE_KEYIDX, //keyid = 0 for pairwise packet - pSecHeader); - pSec->TxIV++; - } - else if( ACTING_AS_AP(Adapter) ) - { - - if(!MacAddr_isMulticast(pRA)) - { // Pairwise traffic. - - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_WLAN_STA pEntry; - - pEntry = AsocEntry_GetEntry(pMgntInfo, pRA); - - if( pEntry==NULL ) - return; - - PN_DECIMAL2ARRAY((pEntry->perSTAKeyInfo.TxIV& UINT64_C(0xffffffff00000000)), - (pEntry->perSTAKeyInfo.TxIV& UINT64_C(0x00000000ffffffff)), - 0, //keyid = 0 for pairwise packet - pSecHeader); - pEntry->perSTAKeyInfo.TxIV++; - } - else - { // Group traffic. - PN_DECIMAL2ARRAY((pSec->TxIV& UINT64_C(0xffffffff00000000)), - (pSec->TxIV& UINT64_C(0x00000000ffffffff)), - pSec->GroupTransmitKeyIdx,// 0, - pSecHeader); - pSec->TxIV++; - } - - } - else - { - if(!MacAddr_isMulticast(pRA)) - { // Pairwise traffic. - PN_DECIMAL2ARRAY((pSec->TxIV& UINT64_C(0xffffffff00000000) ), - (pSec->TxIV&0x00000000ffffffff), - PAIRWISE_KEYIDX, //keyid = 0 for pairwise packet - pSecHeader); - } - else - { // Group traffic. - PN_DECIMAL2ARRAY((pSec->TxIV& UINT64_C(0xffffffff00000000) ), - (pSec->TxIV& UINT64_C(0x00000000ffffffff) ), - pSec->DefaultTransmitKeyIdx, - pSecHeader); - } - pSec->TxIV++; - } - - break; - - case RT_ENC_ALG_SMS4: - WAPI_SecFuncHandler(WAPI_SECHEADERFILLIV, Adapter, (PVOID)pRA,(PVOID)pSecHeader,WAPI_END); - break; - - case RT_ENC_ALG_NO_CIPHER: - default: - return; - } -} - - -// -//Note : SecInit() need to Used after SecClearAllKeys(); -// Because Clear CAM Key will check SecInfo Key Buffer Length -// If Length = 0, CAM entey will "NO" Clear .... - -VOID -SecInit( - PADAPTER Adapter - ) -{ - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - s1Byte i = 0; - - pSec->PairwiseEncAlgorithm = pSec->GroupEncAlgorithm = RT_ENC_ALG_AESCCMP; - - pSec->DefaultTransmitKeyIdx = 0; - pSec->GroupTransmitKeyIdx = 0; - SecSetSwEncryptionDecryption(Adapter, FALSE, FALSE); - pSec->SWRxAESMICFlag = FALSE; - pSec->bGroupKeyFixed = FALSE; - - pSec->AuthMode = RT_802_11AuthModeWPA2; - pSec->EncryptionStatus = RT802_11EncryptionDisabled; - pSec->TxIV = DEFAULT_INIT_TX_IV; - - // 2007.08.08 We must initialize this value, otherwise, software decryption - // without initilization of AES mode cause Assertion in Vista. By Lanhsin - pSec->AESCCMPMicLen = 8; - - PlatformZeroMemory(pSec->RSNIEBuf, MAXRSNIELEN); - pSec->RSNIE.Length = 0; - FillOctetString(pSec->RSNIE, pSec->RSNIEBuf, pSec->RSNIE.Length); - - pSec->SecLvl = RT_SEC_LVL_WPA2; - - //2004/09/07, kcwu, initialize key buffer - for(i = 0;iAESKeyBuf[i], MAX_KEY_LEN); - PlatformZeroMemory(pSec->KeyBuf[i], MAX_KEY_LEN); - pSec->KeyLen[i] = 0; - } - - //kcwu_todo: Clear key buffer - - //Point Pairwise key to appropriate index - pSec->PairwiseKey = pSec->KeyBuf[PAIRWISE_KEYIDX]; - pSec->UseDefaultKey = FALSE; - - // WPA2 Pre-Authentication related. Added by Annie, 2006-05-07. - pSec->EnablePreAuthentication = pSec->RegEnablePreAuth; // Added by Annie, 2005-02-15. - PlatformZeroMemory(pSec->PMKIDList, sizeof(RT_PMKID_LIST)*NUM_PMKID_CACHE); - for( i=0; iPMKIDList[i].Ssid, pSec->PMKIDList[i].SsidBuf, 0 ); - } - - PlatformZeroMemory(pSec->szCapability, 256); - - init_crc32(); - - // Initialize TKIP MIC error related, 2004.10.06, by rcnjko. - pSec->LastPairewiseTKIPMICErrorTime = 0; - pSec->bToDisassocAfterMICFailureReportSend = FALSE; - for(i = 0; i < MAX_DENY_BSSID_LIST_CNT; i++) - { - pSec->DenyBssidList[i].bUsed = FALSE; - } - -} - -/* - - IN PADAPTER Adapter, - IN u4Byte KeyIndex, - IN pu1Byte pMacAddr, - IN BOOLEAN IsGroup, - IN u1Byte EncAlgo, - IN BOOLEAN IsWEPKey//if OID = OID_802_11_WEP -*/ - -// -//Note : SecClearAllKeys() need to Used before SecInit(); -// Because Clear CAM Key will check SecInfo Key Buffer Length -// If Length = 0, CAM entey will "NO" Clear .... - -VOID -SecClearAllKeys( - PADAPTER Adapter - ) -{ - int i; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - - PlatformZeroMemory(pSec->TxMICKey, TKIP_MIC_KEY_LEN); - PlatformZeroMemory(pSec->RxMICKey, TKIP_MIC_KEY_LEN); - pSec->DefaultTransmitKeyIdx = 0; - Adapter->HalFunc.SetKeyHandler(Adapter, 0, 0, 0, 0, 0, TRUE); - - // - // Clear keys used for RSNA IBSS. - // - for(i = 0; i < MAX_NUM_PER_STA_KEY; i++) - { - PlatformZeroMemory( &(pSec->PerStaDefKeyTable[i]), sizeof(PER_STA_DEFAULT_KEY_ENTRY) ); - PlatformZeroMemory( &(pSec->MAPKEYTable[i]), sizeof(PER_STA_MPAKEY_ENTRY) ); - } -} - -VOID -SecClearGroupKeyByIdx( - PADAPTER Adapter, - u1Byte paraIndex -){ - PlatformZeroMemory(Adapter->MgntInfo.SecurityInfo.KeyBuf[paraIndex], MAX_KEY_LEN); - Adapter->MgntInfo.SecurityInfo.KeyLen[paraIndex] = 0; - Adapter->HalFunc.SetKeyHandler(Adapter, paraIndex, 0, TRUE, - Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm, FALSE, FALSE); -} - -VOID -SecClearWEPKeyByIdx( - PADAPTER Adapter, - u1Byte paraIndex - ) -{ - PlatformZeroMemory(Adapter->MgntInfo.SecurityInfo.KeyBuf[paraIndex], MAX_KEY_LEN); - Adapter->MgntInfo.SecurityInfo.KeyLen[paraIndex] = 0; - Adapter->HalFunc.SetKeyHandler(Adapter, paraIndex, 0, TRUE, - Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm, FALSE, FALSE); -} -//for AP mode -VOID -SecClearPairwiseKeyByMacAddr( - PADAPTER Adapter, - pu1Byte paraMacAddr - ) -{ - //2004/09/15, kcwu - PlatformZeroMemory(Adapter->MgntInfo.SecurityInfo.PairwiseKey, MAX_KEY_LEN); - Adapter->MgntInfo.SecurityInfo.KeyLen[PAIRWISE_KEYIDX] = 0; - //2004/09/07, kcwu, disable the key entry in cam - Adapter->HalFunc.SetKeyHandler(Adapter, PAIRWISE_KEYIDX, paraMacAddr, FALSE, - Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm, FALSE, FALSE); -} - -// -// Description: -// Select one AKM suite according to the input self AKM suite and the target info. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] AuthMode - -// The self AKM suite. -// [in] contentType - -// The type of pInfoBuf. -// [in] pInfoBuf - -// This field is determined by contentType and shall be casted to the corresponding type. -// pInfoBuf is PRT_WLAN_BSS if contentType is CONTENT_PKT_TYPE_CLIENT. -// This field may be NULL according to contentType. -// [in] InfoBufLen - -// Length in byte of pInfoBuf. -// [OUT] pAKM - -// Return the selected AKM. -// Return: -// RT_STATUS_SUCCESS, if the content is appended withour error. -// RT_STATUS_INVALID_DATA, if any of pInfoBuf or InfoBufLen is incorrect. -// RT_STATUS_INVALID_STATE, if the security parameter is mismatched. -// Remark: -// If targetAKMSuite is 0, this function ignores the target setting and only reference the self AuthMode to -// determine the final AKM_SUITE_TYPE. -// By Bruce, 2015-12-16. -// -RT_STATUS -Sec_SelAkmFromAuthMode( - IN PADAPTER pAdapter, - IN RT_AUTH_MODE AuthMode, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - OUT PAKM_SUITE_TYPE pAKM - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - BOOLEAN bCCX8021xenable = FALSE; - BOOLEAN bAPSuportCCKM = FALSE; - PRT_WLAN_BSS pTargetBss = NULL; - u4Byte ftMDIeLen = 0; - AKM_SUITE_TYPE targetAKMSuites = AKM_SUITE_NONE; - - CHECK_NULL_RETURN_STATUS(pAKM); - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - PFT_INFO_ENTRY pEntry = NULL; - - if(!pInfoBuf || InfoBufLen < sizeof(RT_WLAN_BSS)) - { - RT_TRACE_F(COMP_SEC, DBG_SERIOUS, ("Invalid input buffer or length, pInfoBuf = %p, InfoBufLen = %d\n", pInfoBuf, InfoBufLen)); - return RT_STATUS_INVALID_DATA; - } - pTargetBss = (PRT_WLAN_BSS)pInfoBuf; - - targetAKMSuites = pTargetBss->AKMsuit; - - CCX_QueryCCKMSupport(pAdapter, &bCCX8021xenable, &bAPSuportCCKM); - - // Check we shall choose Fast Transition as the AKM - if(((TEST_FLAG(pTargetBss->AKMsuit, AKM_FT_1X) && TEST_FLAG(pAdapter->MgntInfo.RegCapAKMSuite, AKM_FT_1X)) || - (TEST_FLAG(pTargetBss->AKMsuit, AKM_FT_PSK) && TEST_FLAG(pAdapter->MgntInfo.RegCapAKMSuite, AKM_FT_PSK))) && - (pEntry = FtGetEntry(pAdapter, pTargetBss->bdBssIdBuf))) - { - ftMDIeLen = pEntry->MDELen; - } - } - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("AuthMode = %d, RegCapAKMSuite = 0x%08X\n", AuthMode, pAdapter->MgntInfo.RegCapAKMSuite)); - - switch (AuthMode) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case RT_802_11AuthModeWPA: - if(bCCX8021xenable && bAPSuportCCKM) - { - *pAKM = AKM_WPA_CCKM; - } - else - { - *pAKM = AKM_WPA_1X; - } - break; - - case RT_802_11AuthModeWPA2: - if(bCCX8021xenable && bAPSuportCCKM) - { - *pAKM = AKM_WPA2_CCKM; - } - else if(ftMDIeLen > 0) - { - *pAKM = AKM_FT_1X; - } - else if(TEST_FLAG(targetAKMSuites, AKM_RSNA_1X_SHA256) && TEST_FLAG(pAdapter->MgntInfo.RegCapAKMSuite, AKM_RSNA_1X_SHA256)) - { - *pAKM = AKM_RSNA_1X_SHA256; - } - else - { - *pAKM = AKM_WPA2_1X; - } - break; - - case RT_802_11AuthModeWPAPSK: - *pAKM = AKM_WPA_PSK; - break; - - case RT_802_11AuthModeWPA2PSK: - { - if(ftMDIeLen > 0) - { - *pAKM = AKM_FT_PSK; - } - else if(TEST_FLAG(targetAKMSuites, AKM_RSNA_PSK_SHA256) && TEST_FLAG(pAdapter->MgntInfo.RegCapAKMSuite, AKM_RSNA_PSK_SHA256)) - { - *pAKM = AKM_RSNA_PSK_SHA256; - } - else - { - *pAKM = AKM_WPA2_PSK; - } - } - break; - } - - return rtStatus; -} - -// -// Description: -// Get the OUI and OUI type from the AKM suite. -// Arguments: -// [in] AKMSuite - -// The AKM suite. -// [out] pOUI - -// Return the OUI with 3 bytes if returned status is RT_STATUS_SUCCESS. -// If AKMSuite is AKM_SUITE_NONE , return all 0 in pOUI. -// [out] pOUIType - -// Return the OUI type with 1 byte if returned status is RT_STATUS_SUCCESS. -// If AKMSuite is AKM_SUITE_NONE , return 0 in pOUIType. -// Return: -// RT_STATUS_SUCCESS, if the translation succeeds. -// RT_STATUS_NOT_RECOGNIZED, if the AKMSuite is not recognized. -// -RT_STATUS -Sec_MapAKMSuiteToOUIType( - IN AKM_SUITE_TYPE AKMSuite, - OUT pu1Byte pOUI, - OUT pu1Byte pOUIType - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - switch(AKMSuite) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case AKM_SUITE_NONE: - { - PlatformZeroMemory(pOUI, SIZE_OUI); - PlatformZeroMemory(pOUIType, SIZE_OUI_TYPE); - } - break; - - case AKM_WPA_1X: - { - PlatformMoveMemory(pOUI, WPA_OUI, SIZE_OUI); - *pOUIType = AKM_WPA_1X_OUI_TYPE; - } - break; - - case AKM_WPA_PSK: - { - PlatformMoveMemory(pOUI, WPA_OUI, SIZE_OUI); - *pOUIType = AKM_WPA_PSK_OUI_TYPE; - } - break; - - case AKM_WPA_CCKM: - { - PlatformMoveMemory(pOUI, CCKM_OUI, SIZE_OUI); - *pOUIType = CCKM_OUI_TYPE; - } - break; - - case AKM_WPA2_1X: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_AKM_SUITE_OUI_TYPE_RSN_1X; - } - break; - - case AKM_WPA2_PSK: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_AKM_SUITE_OUI_TYPE_RSN_PSK; - } - break; - - case AKM_WPA2_CCKM: - { - PlatformMoveMemory(pOUI, CCKM_OUI, SIZE_OUI); - *pOUIType = CCKM_OUI_TYPE; - } - break; - - case AKM_RSNA_1X_SHA256: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_AKM_SUITE_OUI_TYPE_1X_SHA256; - } - break; - - case AKM_RSNA_PSK_SHA256: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_AKM_SUITE_OUI_TYPE_PSK_SHA256; - } - break; - - case AKM_FT_1X: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_AKM_SUITE_OUI_TYPE_FT_1X; - } - break; - - case AKM_FT_PSK: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_AKM_SUITE_OUI_TYPE_FT_PSK; - } - break; - } - - return rtStatus; -} - -// -// Description: -// Get the AKM suite in AKM_SUITE_TYPE from OUI and OUI type. -// Arguments: -// [out] pOUI - -// The OUI with 3 bytes. -// If the input is all 0 in pOUI, return AKM_SUITE_NONE. -// [out] pOUIType - -// The OUI type with 1 byte. -// If the input is all 0 in pOUIType, return AKM_SUITE_NONE. -// [in] secLevl - -// Input the security level related to OUI and OUIType -// [in] pAKMSuite - -// Return The tcipher suite. -// Return: -// RT_STATUS_SUCCESS, if the translation succeeds. -// RT_STATUS_NOT_RECOGNIZED, if the pOUI/pOUIType is not recognized. -// RT_STATUS_INVALID_DATA, if any of pOUI, pOUIType, or secLevl is invalid. -// -RT_STATUS -Sec_MapOUITypeToAKMSuite( - IN pu1Byte pOUI, - IN pu1Byte pOUIType, - IN RT_SECURITY_LEVEL secLevl, - OUT PAKM_SUITE_TYPE pAKMSuite - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - CHECK_NULL_RETURN_STATUS(pOUI); - CHECK_NULL_RETURN_STATUS(pOUIType); - CHECK_NULL_RETURN_STATUS(pAKMSuite); - - if(RT_SEC_LVL_NONE == secLevl) - { - *pAKMSuite = AKM_SUITE_NONE; - } - else if(RT_SEC_LVL_WPA == secLevl) - { - if(eqOUI(pOUI, WPA_OUI)) - { - switch(*pOUIType) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case AKM_WPA_1X_OUI_TYPE: - *pAKMSuite = AKM_WPA_1X; - break; - - case AKM_WPA_PSK_OUI_TYPE: - *pAKMSuite = AKM_WPA_PSK; - break; - } - } - else if(eqOUI(pOUI, CCKM_OUI) && CCKM_OUI_TYPE == *pOUIType) - { - *pAKMSuite = AKM_WPA_CCKM; - } - else - { - rtStatus = RT_STATUS_NOT_RECOGNIZED; - } - } - else if(RT_SEC_LVL_WPA2 == secLevl) - { - if(eqOUI(pOUI, RSN_OUI)) - { - switch(*pOUIType) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case RSN_AKM_SUITE_OUI_TYPE_RSN_1X: - *pAKMSuite = AKM_WPA2_1X; - break; - - case RSN_AKM_SUITE_OUI_TYPE_RSN_PSK: - *pAKMSuite = AKM_WPA2_PSK; - break; - - case RSN_AKM_SUITE_OUI_TYPE_FT_1X: - *pAKMSuite = AKM_FT_1X; - break; - - case RSN_AKM_SUITE_OUI_TYPE_FT_PSK: - *pAKMSuite = AKM_FT_PSK; - break; - - case RSN_AKM_SUITE_OUI_TYPE_1X_SHA256: - *pAKMSuite = AKM_RSNA_1X_SHA256; - break; - - case RSN_AKM_SUITE_OUI_TYPE_PSK_SHA256: - *pAKMSuite = AKM_RSNA_PSK_SHA256; - break; - } - } - else if(eqOUI(pOUI, CCKM_OUI) && CCKM_OUI_TYPE == *pOUIType) - { - *pAKMSuite = AKM_WPA2_CCKM; - } - else - { - rtStatus = RT_STATUS_NOT_RECOGNIZED; - } - } - - return RT_STATUS_NOT_SUPPORT; -} - - -// -// Description: -// Get the OUI and OUI type from the cipher suite in RT_ENC_ALG. -// Arguments: -// [in] cipherSuite - -// The cipher suite. -// [in] secLevl - -// Security level such WPA or WPA2. -// [out] pOUI - -// Return the OUI with 3 bytes if returned status is RT_STATUS_SUCCESS. -// If cipherSuite is RT_ENC_ALG_NO_CIPHER , return all 0 in pOUI. -// [out] pOUIType - -// Return the OUI type with 1 byte if returned status is RT_STATUS_SUCCESS. -// If AKMSuite is RT_ENC_ALG_NO_CIPHER , return 0 in pOUIType. -// Return: -// RT_STATUS_SUCCESS, if the translation succeeds. -// RT_STATUS_NOT_RECOGNIZED, if the cipherSuite is not recognized. -// RT_STATUS_INVALID_DATA, if the cipherSuite is invalid. -// -RT_STATUS -Sec_MapCipherSuiteToOUIType( - IN RT_ENC_ALG cipherSuite, - IN RT_SECURITY_LEVEL secLevl, - OUT pu1Byte pOUI, - OUT pu1Byte pOUIType - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - if(RT_SEC_LVL_NONE == secLevl) - { - PlatformZeroMemory(pOUI, SIZE_OUI); - PlatformZeroMemory(pOUIType, SIZE_OUI_TYPE); - } - else if(RT_SEC_LVL_WPA == secLevl) - { - switch(cipherSuite) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case RT_ENC_ALG_NO_CIPHER: - { - PlatformZeroMemory(pOUI, SIZE_OUI); - PlatformZeroMemory(pOUIType, SIZE_OUI_TYPE); - } - break; - - case RT_ENC_ALG_TKIP: - { - PlatformMoveMemory(pOUI, WPA_OUI, SIZE_OUI); - *pOUIType = WPA_CIPHER_SUITE_OUI_TYPE_TKIP; - } - break; - - case RT_ENC_ALG_AESCCMP: - { - PlatformMoveMemory(pOUI, WPA_OUI, SIZE_OUI); - *pOUIType = WPA_CIPHER_SUITE_OUI_TYPE_CCMP; - } - break; - - case RT_ENC_ALG_WEP40: - { - PlatformMoveMemory(pOUI, WPA_OUI, SIZE_OUI); - *pOUIType = WPA_CIPHER_SUITE_OUI_TYPE_WEP40; - } - break; - - case RT_ENC_ALG_WEP104: - { - PlatformMoveMemory(pOUI, WPA_OUI, SIZE_OUI); - *pOUIType = WPA_CIPHER_SUITE_OUI_TYPE_WEP104; - } - break; - - case RT_ENC_ALG_WEP: - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Invalid Cipher suite RT_ENC_ALG_WEP to map OUI\n")); - rtStatus = RT_STATUS_INVALID_DATA; - } - break; - - case RT_ENC_ALG_SMS4: - { // WAPI does NOT have the cipher suite OUI/Type - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Invalid Cipher suite RT_ENC_ALG_SMS4 to map OUI\n")); - rtStatus = RT_STATUS_INVALID_DATA; - } - break; - } - } - else if(RT_SEC_LVL_WPA2 == secLevl) - { - switch(cipherSuite) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case RT_ENC_ALG_NO_CIPHER: - { - PlatformZeroMemory(pOUI, SIZE_OUI); - PlatformZeroMemory(pOUIType, SIZE_OUI_TYPE); - } - break; - - case RT_ENC_ALG_USE_GROUP: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_USE_GROUP_CIPHER; - } - break; - - case RT_ENC_ALG_TKIP: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_TKIP; - } - break; - - case RT_ENC_ALG_AESCCMP: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_CCMP; - } - break; - - case RT_ENC_ALG_WEP40: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_WEP40; - } - break; - - case RT_ENC_ALG_WEP104: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_WEP104; - } - break; - - case RT_ENC_ALG_WEP: - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Invalid Cipher suite RT_ENC_ALG_WEP to map OUI\n")); - rtStatus = RT_STATUS_INVALID_DATA; - } - break; - - case RT_ENC_ALG_SMS4: - { // WAPI does NOT have the cipher suite OUI/Type - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Invalid Cipher suite RT_ENC_ALG_SMS4 to map OUI\n")); - rtStatus = RT_STATUS_INVALID_DATA; - } - break; - - case RT_ENC_ALG_BIP: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_BIP; - } - break; - - case RT_ENC_ALG_GROUP_ADDR_TRAFFIC_DISALLOWED: - { - PlatformMoveMemory(pOUI, RSN_OUI, SIZE_OUI); - *pOUIType = RSN_CIPHER_SUITE_OUI_TYPE_GRP_ADDR_DISALLOWED; - } - break; - } - } - else - { - rtStatus = RT_STATUS_NOT_RECOGNIZED; - } - - return rtStatus; -} - -// -// Description: -// Get the cipher suite in RT_ENC_ALG from OUI and OUI type. -// Arguments: -// [out] pOUI - -// The OUI with 3 bytes. -// If the input is all 0 in pOUI, return RT_ENC_ALG_NO_CIPHER. -// [out] pOUIType - -// The OUI type with 1 byte. -// If the input is all 0 in pOUIType, return RT_ENC_ALG_NO_CIPHER. -// [in] secLevl - -// Input the security level related to OUI and OUIType -// [in] pCipherSuite - -// Return The tcipher suite. -// Return: -// RT_STATUS_SUCCESS, if the translation succeeds. -// RT_STATUS_NOT_RECOGNIZED, if the pOUI/pOUIType is not recognized. -// RT_STATUS_INVALID_DATA, if any of pOUI, pOUIType, or secLevl is invalid. -// -RT_STATUS -Sec_MapOUITypeToCipherSuite( - IN pu1Byte pOUI, - IN pu1Byte pOUIType, - IN RT_SECURITY_LEVEL secLevl, - OUT PRT_ENC_ALG pCipherSuite - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - CHECK_NULL_RETURN_STATUS(pOUI); - CHECK_NULL_RETURN_STATUS(pOUIType); - CHECK_NULL_RETURN_STATUS(pCipherSuite); - - if(RT_SEC_LVL_NONE == secLevl) - { - *pCipherSuite = RT_ENC_ALG_NO_CIPHER; - } - else if(RT_SEC_LVL_WPA == secLevl) - { - if(eqOUI(pOUI, WPA_OUI)) - { - switch(*pOUIType) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case WPA_CIPHER_SUITE_OUI_TYPE_NONE: - *pCipherSuite = RT_ENC_ALG_NO_CIPHER;; - break; - - case WPA_CIPHER_SUITE_OUI_TYPE_WEP40: - *pCipherSuite = RT_ENC_ALG_WEP40;; - break; - - case WPA_CIPHER_SUITE_OUI_TYPE_TKIP: - *pCipherSuite = RT_ENC_ALG_TKIP;; - break; - - case WPA_CIPHER_SUITE_OUI_TYPE_CCMP: - *pCipherSuite = RT_ENC_ALG_AESCCMP;; - break; - - case WPA_CIPHER_SUITE_OUI_TYPE_WEP104: - *pCipherSuite = RT_ENC_ALG_WEP104;; - break; - } - } - else - { - rtStatus = RT_STATUS_NOT_RECOGNIZED; - } - } - else if(RT_SEC_LVL_WPA2 == secLevl) - { - if(eqOUI(pOUI, RSN_OUI)) - { - switch(*pOUIType) - { - default: - rtStatus = RT_STATUS_NOT_RECOGNIZED; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_USE_GROUP_CIPHER: - *pCipherSuite = RT_ENC_ALG_USE_GROUP;; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_WEP40: - *pCipherSuite = RT_ENC_ALG_WEP40;; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_TKIP: - *pCipherSuite = RT_ENC_ALG_TKIP;; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_CCMP: - *pCipherSuite = RT_ENC_ALG_AESCCMP;; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_WEP104: - *pCipherSuite = RT_ENC_ALG_WEP104;; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_BIP: - *pCipherSuite = RT_ENC_ALG_BIP;; - break; - - case RSN_CIPHER_SUITE_OUI_TYPE_GRP_ADDR_DISALLOWED: - *pCipherSuite = RT_ENC_ALG_GROUP_ADDR_TRAFFIC_DISALLOWED;; - break; - } - } - else - { - rtStatus = RT_STATUS_NOT_RECOGNIZED; - } - } - - return RT_STATUS_NOT_SUPPORT; -} - -// -// Description: -// Get the old (deprecated) cipher suite from current RT_ENC_ALGs. -// This function is used to translate the old definition such as FW. -// Arguments: -// [IN] newCipherSuite - -// The new cipher suite defined in RT_ENC_ALG. -// Return: -// The cipher suite defined in RT_ENC_ALG_DEP. -// -RT_ENC_ALG_DEP -Sec_MapNewCipherToDepCipherAlg( - IN RT_ENC_ALG newCipherSuite - ) -{ - RT_ENC_ALG_DEP depCipher = NO_Encryption; - switch(newCipherSuite) - { - default: - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Unknown newCipherSuite(0x%08X) to map\n", newCipherSuite)); - } - break; - - case RT_ENC_ALG_NO_CIPHER: - depCipher = NO_Encryption; - break; - - case RT_ENC_ALG_TKIP: - depCipher = TKIP_Encryption; - break; - - case RT_ENC_ALG_AESCCMP: - depCipher = AESCCMP_Encryption; - break; - - case RT_ENC_ALG_WEP40: - depCipher = WEP40_Encryption; - break; - - case RT_ENC_ALG_WEP104: - depCipher = WEP104_Encryption; - break; - - case RT_ENC_ALG_WEP: - depCipher = WEP_Encryption; - break; - - case RT_ENC_ALG_SMS4: - depCipher = SMS4_Encryption; - break; - } - - return depCipher; -} - - -RT_ENC_ALG -SecGetEncryptionOverhead( - PADAPTER Adapter, - UNALIGNED pu2Byte pMPDUHead, - UNALIGNED pu2Byte pMPDUTail, - UNALIGNED pu2Byte pMSDUHead, - UNALIGNED pu2Byte pMSDUTail, - BOOLEAN bByPacket, - BOOLEAN bIsBroadcastPkt - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_ENC_ALG ulSwitchCondition = (bByPacket&&bIsBroadcastPkt)? \ - pMgntInfo->SecurityInfo.GroupEncAlgorithm:pMgntInfo->SecurityInfo.PairwiseEncAlgorithm; - - // Decide EncryptionOverhead according to Encryption algorithm - switch( ulSwitchCondition ) - { - case RT_ENC_ALG_NO_CIPHER: - if(pMPDUHead){ *pMPDUHead=0; } - if(pMPDUTail){ *pMPDUTail=0; } - if(pMSDUHead){ *pMSDUHead=0; } - if(pMSDUTail){ *pMSDUTail=0; } - break; - - case RT_ENC_ALG_WEP40: - case RT_ENC_ALG_WEP104: - // CKIP should also go into this case. - if(pMPDUHead){ *pMPDUHead=4; } - if(pMPDUTail){ *pMPDUTail=4; } - if(pMSDUHead){ *pMSDUHead=0; } - if(pMSDUTail){ *pMSDUTail=0; } - break; - - case RT_ENC_ALG_TKIP: - if(pMPDUHead){ *pMPDUHead=8; } - if(pMPDUTail){ *pMPDUTail=4; } - if(pMSDUHead){ *pMSDUHead=0; } - if(pMSDUTail){ *pMSDUTail=8; } - break; - - case RT_ENC_ALG_AESCCMP: - if(pMPDUHead){ *pMPDUHead=8; } - if(pMPDUTail){ *pMPDUTail=8; } - if(pMSDUHead){ *pMSDUHead=0; } - if(pMSDUTail){ *pMSDUTail=0; } - break; - - case RT_ENC_ALG_SMS4: - if(pMPDUHead){ *pMPDUHead=18; } - if(pMPDUTail){ *pMPDUTail=16; } - if(pMSDUHead){ *pMSDUHead=0; } - if(pMSDUTail){ *pMSDUTail=0; } - break; - - default: - break; - } - - return ulSwitchCondition; - -} - -VOID -SecGetGroupCipherFromBeacon( - PADAPTER Adapter, - PRT_WLAN_BSS pbssDesc) -{ - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - - pSecInfo->GroupEncAlgorithm = pbssDesc->GroupCipherSuite; - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecGetGroupCipherFromBeacon(): GroupEncAlgorithm = %d\n", pSecInfo->GroupEncAlgorithm) ); - - SecConstructRSNIE(Adapter); -} - -VOID -SecConstructRSNIE( - PADAPTER Adapter - ) -{ -//kcwu: NOTICE===> -//The frame format of WPA/WPA2 are different - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - BOOLEAN bCCX8021xenable = FALSE; - BOOLEAN bAPSuportCCKM = FALSE; - pu1Byte pIeHead = Adapter->MgntInfo.SecurityInfo.RSNIEBuf; - u2Byte IeLen = 0; - u1Byte tmpOUI[SIZE_OUI] = {0}; - u1Byte tmpOUIType = 0; - u2Byte AddSize; - AKM_SUITE_TYPE selAKM = AKM_SUITE_NONE; - - Adapter->MgntInfo.SecurityInfo.RSNIE.Length = 0; - - // Select the AKM - Sec_SelAkmFromAuthMode( - Adapter, - pSecInfo->AuthMode, - CONTENT_PKT_TYPE_AP, - NULL, - 0, - &selAKM); - - if(pSecInfo->SecLvl == RT_SEC_LVL_WPA) - { - // WPA OUI and Type - SET_WPA_IE_OUI_AND_TYPE(pIeHead); - IeLen += 4; - - // WPA Version - SET_WPA_IE_VERSION(pIeHead, WPA_VER1); - IeLen += 2; - - // - // 2. Group Cipher Suite. - // - Sec_MapCipherSuiteToOUIType(pSecInfo->GroupEncAlgorithm, RT_SEC_LVL_WPA, tmpOUI, &tmpOUIType); - SET_WPA_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(pIeHead, tmpOUI, tmpOUIType); - IeLen += 4; - - // Pairwise cipher suite OUI/Type - Sec_MapCipherSuiteToOUIType(pSecInfo->PairwiseEncAlgorithm, RT_SEC_LVL_WPA, tmpOUI, &tmpOUIType); - - // Initialize Pairwise Suite count - SET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(pIeHead, 0); - IeLen += 2; - - // Pairwise cipher suite. We may add more pairwise cipher suites here for AP mode. - ADD_WPA_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(pIeHead, tmpOUI, tmpOUIType); - IeLen += 4; - - // Intialize AKM suite count - SET_WPA_IE_AKM_SUITE_CNT(pIeHead, 0); - IeLen += 2; - - // AKM suite list - Sec_MapAKMSuiteToOUIType(selAKM, tmpOUI, &tmpOUIType); - ADD_WPA_IE_AKM_SUITE_OUI_W_TYPE(pIeHead, tmpOUI, tmpOUIType); - IeLen += 4; - - // Capabilities - SET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(pIeHead, 0); - SET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(pIeHead, 0); - IeLen += 2; - } - else - { // Default: WPA2. Changed from WPA by Annie, 2006-04-26. - SET_RSN_IE_VERSION(pIeHead, RSN_VER1); - IeLen += 2; - - // Group cipher suite OUI/Type - Sec_MapCipherSuiteToOUIType(pSecInfo->GroupEncAlgorithm, RT_SEC_LVL_WPA2, tmpOUI, &tmpOUIType); - SET_RSN_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(pIeHead, tmpOUI, tmpOUIType); - IeLen += 4; - - // Pairwise cipher suite OUI/Type - Sec_MapCipherSuiteToOUIType(pSecInfo->PairwiseEncAlgorithm, RT_SEC_LVL_WPA2, tmpOUI, &tmpOUIType); - - // RT_TRACE_F(COMP_SEC, DBG_LOUD, ("PairwiseEncAlgorithm = 0x%08X, OUI = %02X-%02X-%02X-%02X\n", pSecInfo->PairwiseEncAlgorithm, tmpOUI[0], tmpOUI[1], tmpOUI[2], tmpOUIType)); - - // Intialize pairwise count - SET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(pIeHead, 0); - IeLen += 2; - - // We may add more pairwise cipher suites here for AP mode. - ADD_RSN_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(pIeHead, tmpOUI, tmpOUIType); - IeLen += 4; - - // Intialize AKM suite count - SET_RSN_IE_AKM_SUITE_CNT(pIeHead, 0); - IeLen += 2; - - Sec_MapAKMSuiteToOUIType(selAKM, tmpOUI, &tmpOUIType); - ADD_RSN_IE_AKM_SUITE_OUI_W_TYPE(pIeHead, tmpOUI, tmpOUIType); - IeLen += 4; - - - // - //3 // RSN Capabilities. - // - - // (1) Pre-Authentication (bit0) - // WPA: Reserver. - // WPA2: "A non-AP STA sets the Pre-authentication subfield to zero", in 802.11iD10.0, 7.3.2.25.3 RSN Capabilities, page34. Added by Annie, 2006-05-08. - SET_RSN_IE_CAP_PREAUTH(pIeHead, 0); - - // (2) PairwiseAsDefaultKey (bit1) - //No Pairwise = false - SET_RSN_IE_CAP_NO_PAIRWISE(pIeHead, 0); - - //Replay Counter - //kcwu?: Should we implement multiple replay counters? - // (3) NumOfPTKSAReplayCounter (bit2,3) - SET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(pIeHead, 0); - // (4) NumOfGTKSAReplayCounter (bit4,5) - SET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(pIeHead, 0); - - IeLen += 2; - } - - Adapter->MgntInfo.SecurityInfo.RSNIE.Length = IeLen; - - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, ("SecConstructRSNIE(): RSNIE:\n"), pSecInfo->RSNIE.Octet, pSecInfo->RSNIE.Length); -} - -// -// Description: -// Append security IEs to this authentication packet. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] contentType - -// The type of content to append this WPA IE. This field also indicates which type of posOutContent. -// CONTENT_PKT_TYPE_xxx - -// [in] pInfoBuf - -// This field is determined by contentType and shall be casted to the corresponding type. -// pInfoBuf is PRT_WLAN_BSS if contentType is CONTENT_PKT_TYPE_CLIENT. -// [in] InfoBufLen - -// Length in byte of pInfoBuf. -// [in] maxBufLen - -// The max length of posOutContent buffer in byte. -// [out] posOutContent - -// The OCTECT_STRING structure for the content buffer and length. -// posOutContent is a 802.11 packet if contentType is CONTENT_PKT_TYPE_802_11. -// Return: -// RT_STATUS_SUCCESS, if the content is appended withour error. -// RT_STATUS_BUFFER_TOO_SHORT, if the max length of buffer is not long enough. -// RT_STATUS_INVALID_STATE, if the security parameter is mismatched. -// Remark: -// To determine the RSN content to append to the output content, the pTargetBss, contentType, and posOutContent -// shall be filled when calling this function. If RSN IE will be appended to an association request frame in posOutContent, -// the 802.11 packet type and MAC header shall be filled in posOutContent before calling this function. -// By Bruce, 2015-09-22. -// -RT_STATUS -Sec_AppendWPAIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &pAdapter->MgntInfo.SecurityInfo; - u1Byte rsnBuf[MAX_IE_LEN - SIZE_EID_AND_LEN] = {0}; - OCTET_STRING osRsn; - u1Byte pktType = 0xFF; - AKM_SUITE_TYPE akmSuite = AKM_SUITE_NONE; - u1Byte tmpOUI[SIZE_OUI] = {0}; - u1Byte tmpOUIType = 0; - PRT_WLAN_BSS pBssDesc = NULL; - AKM_SUITE_TYPE selAKM = AKM_SUITE_NONE; - - FillOctetString(osRsn, rsnBuf, 0); - - do - { - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT | CONTENT_PKT_TYPE_AP | CONTENT_PKT_TYPE_IBSS)) - { - if(RT_SEC_LVL_WPA != pSecInfo->SecLvl) - { - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("SecLvl (%d) != RT_SEC_LVL_WPA\n", pSecInfo->SecLvl)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_802_11)) - { - pktType = PacketGetType(*posOutContent); - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - if(NULL == pInfoBuf || InfoBufLen < sizeof(RT_WLAN_BSS)) - { - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("pInfoBuf (%p) = NULL or InfoBufLen < required of sizeof(RT_WLAN_BSS) = %d\n", pInfoBuf, sizeof(RT_WLAN_BSS))); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - pBssDesc = (PRT_WLAN_BSS)pInfoBuf; - - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_SelAkmFromAuthMode( - pAdapter, - pSecInfo->AuthMode, - CONTENT_PKT_TYPE_CLIENT, - pBssDesc, - sizeof(RT_WLAN_BSS), - &selAKM))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Failed (0x%08X) from Sec_SelAkmFromAuthMode(), pSecInfo->AuthMode = %d, pBssDesc->AKMsuit = 0x%08X\n", - rtStatus, pSecInfo->AuthMode, pBssDesc->AKMsuit)); - break; - - } - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("selAKM = 0x%08X\n", selAKM)); - - // Do not append RSN IE in default. - rtStatus = RT_STATUS_INVALID_DATA; - switch(pktType) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case Type_Asoc_Req: - case Type_Reasoc_Req: - rtStatus = RT_STATUS_SUCCESS; - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - // No need to append RSN IE - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("pktType = 0x%02X, no need to append RSN IE\n", pktType)); - break; - } - } - - // OUI + type - SET_WPA_IE_OUI_AND_TYPE(osRsn.Octet); - osRsn.Length += 4; - - // WPA version - SET_WPA_IE_VERSION(osRsn.Octet, WPA_VER1); - osRsn.Length += 2; - - // Group cipher suite - if(RT_STATUS_SUCCESS != ( - rtStatus = Sec_MapCipherSuiteToOUIType(pSecInfo->GroupEncAlgorithm, RT_SEC_LVL_WPA, tmpOUI, &tmpOUIType))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Fail (0x%08X) to get OUI/Type from group EncAlg(0x%08X)\n", rtStatus, pSecInfo->GroupEncAlgorithm)); - break; - } - SET_WPA_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - - // Pairwise cipher suite OUI/Type - if(RT_STATUS_SUCCESS != - (rtStatus = Sec_MapCipherSuiteToOUIType(pSecInfo->PairwiseEncAlgorithm, RT_SEC_LVL_WPA, tmpOUI, &tmpOUIType))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Fail (0x%08X) to get OUI/Type from pairwise EncAlg(0x%08X)\n", rtStatus, pSecInfo->PairwiseEncAlgorithm)); - break; - - } - - // Initialize Pairwise Suite count - SET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(osRsn.Octet, 0); - osRsn.Length += 2; - - // Pairwise cipher suite. We may add more pairwise cipher suites here for AP mode. - ADD_WPA_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - - // Intialize AKM suite count - SET_WPA_IE_AKM_SUITE_CNT(osRsn.Octet, 0); - osRsn.Length += 2; - - // AKM suite list - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - if(RT_STATUS_SUCCESS != (rtStatus = Sec_MapAKMSuiteToOUIType(selAKM, tmpOUI, &tmpOUIType))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Failed (0x%08X) from Sec_MapAKMSuiteToOUIType() for selAKM = 0x%08X, AuthMode = %d, targetAKMSuite = 0x%08X\n", - rtStatus, selAKM, pSecInfo->AuthMode, pMgntInfo->targetAKMSuite)); - break; - } - ADD_WPA_IE_AKM_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - } - else - { - // ToDo - rtStatus = RT_STATUS_NOT_SUPPORT; - break; - } - - // Capabilities - SET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(osRsn.Octet, 0); - SET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(osRsn.Octet, 0); - osRsn.Length += 2; - }while(FALSE); - - if(RT_STATUS_SUCCESS == rtStatus) - { - if((maxBufLen - posOutContent->Length) < osRsn.Length) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, - ("maxBufLen (%d) - posOutContent.Length (%d) < osRsn.Length(%d)\n", maxBufLen, posOutContent->Length, osRsn.Length)); - rtStatus = RT_STATUS_BUFFER_TOO_SHORT; - } - else - { - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "Append IE data:\n", osRsn.Octet, osRsn.Length); - PacketMakeElement(posOutContent, EID_Vendor, osRsn); - } - } - - return rtStatus; -} - -// -// Description: -// Append RSN IE to this packet or content. -// Arguments: -// [in] pAdapter - -// The location of target adapter. -// [in] contentType - -// The type of content to append this RSN IE. This field also indicates which type of posOutContent. -// CONTENT_PKT_TYPE_xxx - -// [in] pInfoBuf - -// This field is determined by contentType and shall be casted to the corresponding type. -// pInfoBuf is PRT_WLAN_BSS if contentType is CONTENT_PKT_TYPE_CLIENT. -// [in] InfoBufLen - -// Length in byte of pInfoBuf. -// [in] maxBufLen - -// The max length of posOutContent buffer in byte. -// [out] posOutContent - -// The OCTECT_STRING structure for the content buffer and length. -// posOutContent is a 802.11 packet if contentType is CONTENT_PKT_TYPE_802_11. -// Return: -// RT_STATUS_SUCCESS, if the content is appended withour error. -// RT_STATUS_BUFFER_TOO_SHORT, if the max length of buffer is not long enough. -// RT_STATUS_INVALID_STATE, if the security parameter is mismatched. -// Remark: -// To determine the RSN content to append to the output content, the pTargetBss, contentType, and posOutContent -// shall be filled when calling this function. If RSN IE will be appended to an association request frame in posOutContent, -// the 802.11 packet type and MAC header shall be filled in posOutContent before calling this function. -// By Bruce, 2015-09-22. -// -RT_STATUS -Sec_AppendRSNIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &pAdapter->MgntInfo.SecurityInfo; - u1Byte rsnBuf[MAX_IE_LEN - SIZE_EID_AND_LEN] = {0}; - OCTET_STRING osRsn; - u1Byte pktType = 0xFF; - AKM_SUITE_TYPE akmSuite = AKM_SUITE_NONE; - u1Byte tmpOUI[SIZE_OUI] = {0}; - u1Byte tmpOUIType = 0; - PRT_WLAN_BSS pBssDesc = NULL; - AKM_SUITE_TYPE selAKM = AKM_SUITE_NONE; - PFT_INFO_ENTRY pFtEntry = NULL; - - CHECK_NULL_RETURN_STATUS(posOutContent); - - FillOctetString(osRsn, rsnBuf, 0); - - do - { - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT | CONTENT_PKT_TYPE_AP | CONTENT_PKT_TYPE_IBSS)) - { - if(RT_SEC_LVL_WPA2 != pSecInfo->SecLvl) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("SecLvl (%d) != RT_SEC_LVL_WPA2\n", pSecInfo->SecLvl)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_802_11)) - { - pktType = PacketGetType(*posOutContent); - } - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - BOOLEAN bFtIeFromEntry = FALSE; - if(NULL == pInfoBuf || InfoBufLen < sizeof(RT_WLAN_BSS)) - { - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("pInfoBuf (%p) = NULL or InfoBufLen < required of sizeof(RT_WLAN_BSS) = %d\n", pInfoBuf, sizeof(RT_WLAN_BSS))); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - pBssDesc = (PRT_WLAN_BSS)pInfoBuf; - - if(RT_STATUS_SUCCESS != (rtStatus = - Sec_SelAkmFromAuthMode( - pAdapter, - pSecInfo->AuthMode, - CONTENT_PKT_TYPE_CLIENT, - pBssDesc, - sizeof(RT_WLAN_BSS), - &selAKM))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Failed (0x%08X) from Sec_SelAkmFromAuthMode(), pSecInfo->AuthMode = %d, pBssDesc->AKMsuit = 0x%08X\n", - rtStatus, pSecInfo->AuthMode, pBssDesc->AKMsuit)); - break; - - } - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("selAKM = 0x%08X\n", selAKM)); - - // Check if the entry has PMKID - if(AKM_FT_1X == selAKM || AKM_FT_PSK == selAKM) - { - pFtEntry = FtGetEntry(pAdapter, pBssDesc->bdBssIdBuf); - } - - // Do not append RSN IE in default. - rtStatus = RT_STATUS_INVALID_DATA; - switch(pktType) - { - default: - rtStatus = RT_STATUS_INVALID_DATA; - break; - - case Type_Auth: - { - if(FtIsFtAuthReady(pAdapter, pBssDesc->bdBssIdBuf)) - { - rtStatus = RT_STATUS_SUCCESS; - } - } - break; - - case Type_Asoc_Req: - case Type_Reasoc_Req: - { - if(FtIsFtAssocReqReady(pAdapter, pBssDesc->bdBssIdBuf)) - { - // Prefast warning C6011: Dereferencing NULL pointer 'pFtEntry'. - if(pFtEntry != NULL && pFtEntry->RSNELen > SIZE_EID_AND_LEN) - { - FillOctetString(osRsn, pFtEntry->RSNE + SIZE_EID_AND_LEN, (pFtEntry->RSNELen - SIZE_EID_AND_LEN)); - bFtIeFromEntry = TRUE; - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("RSN IE content from FT entry\n")); - } - - } - rtStatus = RT_STATUS_SUCCESS; - } - break; - } - - if(RT_STATUS_SUCCESS != rtStatus) - { - // No need to append RSN IE - RT_TRACE_F(COMP_SEC, DBG_TRACE, ("pktType = 0x%02X, no need to append RSN IE\n", pktType)); - break; - } - - // The content has been filled. - if(bFtIeFromEntry) - break; - } - - SET_RSN_IE_VERSION(osRsn.Octet, RSN_VER1); - osRsn.Length += 2; - - // Group cipher suite OUI/Type - if(RT_STATUS_SUCCESS != - (rtStatus = Sec_MapCipherSuiteToOUIType(pSecInfo->GroupEncAlgorithm, RT_SEC_LVL_WPA2, tmpOUI, &tmpOUIType))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Fail (0x%08X) to get OUI/Type from group EncAlg(0x%08X)\n", rtStatus, pSecInfo->GroupEncAlgorithm)); - break; - - } - SET_RSN_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - - // Pairwise cipher suite OUI/Type - if(RT_STATUS_SUCCESS != - (rtStatus = Sec_MapCipherSuiteToOUIType(pSecInfo->PairwiseEncAlgorithm, RT_SEC_LVL_WPA2, tmpOUI, &tmpOUIType))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Fail (0x%08X) to get OUI/Type from pairwise EncAlg(0x%08X)\n", rtStatus, pSecInfo->PairwiseEncAlgorithm)); - break; - - } - - // RT_TRACE_F(COMP_SEC, DBG_LOUD, ("PairwiseEncAlgorithm = 0x%08X, OUI = %02X-%02X-%02X-%02X\n", pSecInfo->PairwiseEncAlgorithm, tmpOUI[0], tmpOUI[1], tmpOUI[2], tmpOUIType)); - - // Intialize pairwise count - SET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(osRsn.Octet, 0); - osRsn.Length += 2; - - // We may add more pairwise cipher suites here for AP mode. - ADD_RSN_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - - // Intialize AKM suite count - SET_RSN_IE_AKM_SUITE_CNT(osRsn.Octet, 0); - osRsn.Length += 2; - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - if(RT_STATUS_SUCCESS != (rtStatus = Sec_MapAKMSuiteToOUIType(selAKM, tmpOUI, &tmpOUIType))) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("Failed (0x%08X) from Sec_MapAKMSuiteToOUIType() for selAKM = 0x%08X, AuthMode = %d, targetAKMSuite = 0x%08X\n", - rtStatus, selAKM, pSecInfo->AuthMode, pMgntInfo->targetAKMSuite)); - break; - } - ADD_RSN_IE_AKM_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - } - else - { - // ToDo - rtStatus = RT_STATUS_NOT_SUPPORT; - break; - } - - - // - //3 // RSN Capabilities. - // - - // (1) Pre-Authentication (bit0) - // WPA: Reserver. - // WPA2: "A non-AP STA sets the Pre-authentication subfield to zero", in 802.11iD10.0, 7.3.2.25.3 RSN Capabilities, page34. Added by Annie, 2006-05-08. - SET_RSN_IE_CAP_PREAUTH(osRsn.Octet, 0); - - // (2) PairwiseAsDefaultKey (bit1) - //No Pairwise = false - SET_RSN_IE_CAP_NO_PAIRWISE(osRsn.Octet, 0); - - //Replay Counter - //kcwu?: Should we implement multiple replay counters? - // (3) NumOfPTKSAReplayCounter (bit2,3) - SET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(osRsn.Octet, 0); - // (4) NumOfGTKSAReplayCounter (bit4,5) - SET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(osRsn.Octet, 0); - - osRsn.Length += 2; - - if(TEST_FLAG(contentType, CONTENT_PKT_TYPE_CLIENT)) - { - pu1Byte pPmkIdBuf = NULL; - int pmkIdx = -1; - BOOLEAN bGroupMgntCipher = FALSE; - - // Append PMKID - if(pFtEntry) - { // FT PMKID - if(pFtEntry->PMKR0NameLen > 0) - { - pPmkIdBuf = pFtEntry->PMKR0Name; - } - } - else if((pmkIdx = SecIsInPMKIDList(pAdapter, pBssDesc->bdBssIdBuf)) >= 0) - { - pPmkIdBuf = pSecInfo->PMKIDList[pmkIdx].PMKID; - } - - // Group Management Cipher Suite (Protected Management Frame Protocol) - if(pBssDesc->bMFPC && pMgntInfo->bInBIPMFPMode) - { - SET_RSN_IE_CAP_MFP_CAPABLE(osRsn.Octet, 1); - if(RT_STATUS_SUCCESS == Sec_MapCipherSuiteToOUIType(RT_ENC_ALG_BIP, RT_SEC_LVL_WPA2, tmpOUI, &tmpOUIType)) - { - bGroupMgntCipher = TRUE; - } - } - - // Intialize PMKID count if there is any more content to avoid IOT issue - if(pPmkIdBuf || bGroupMgntCipher) - { - SET_RSN_IE_PMKID_CNT(osRsn.Octet, 0); - osRsn.Length += 2; - } - - if(pPmkIdBuf) - { - ADD_RSN_IE_PMKID(osRsn.Octet, pPmkIdBuf); - osRsn.Length += PMKID_LEN; - } - - if(bGroupMgntCipher) - { - SET_RSN_IE_GROUP_MGNT_CIPHER_SUITE_OUI_W_TYPE(osRsn.Octet, tmpOUI, tmpOUIType); - osRsn.Length += 4; - } - } - }while(FALSE); - - if(RT_STATUS_SUCCESS == rtStatus) - { - if((maxBufLen - posOutContent->Length) < osRsn.Length) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, - ("maxBufLen (%d) - posOutContent.Length (%d) < osRsn.Length(%d)\n", maxBufLen, posOutContent->Length, osRsn.Length)); - rtStatus = RT_STATUS_BUFFER_TOO_SHORT; - } - else - { - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "Append IE data:\n", osRsn.Octet, osRsn.Length); - PacketMakeElement(posOutContent, EID_WPA2, osRsn); - } - } - - return rtStatus; -} - - -u1Byte -SecGetTxKeyIdx( - PADAPTER Adapter, - pu1Byte pMacAddr // Not used now... - ) -{ - //pairwise keyidx in our driver is 0 (in WPA-PSK or WPA2-PSK.) - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - u1Byte keyidx = PAIRWISE_KEYIDX; - - //2004/06/29, kcwu, - //check if pairwise key exists - if(pSec->KeyLen[keyidx] == 0) - { - if(Adapter->MgntInfo.mIbss) - { // Ad Hoc Mode. - return (pSec->KeyLen[pSec->GroupTransmitKeyIdx]==0)?5:pSec->GroupTransmitKeyIdx; - } - else - { // Infrastructure Mode. - return 5; - } - } - else - { - return keyidx; - } - -} - - -VOID -SecCalculateMIC( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSec = &(pMgntInfo->SecurityInfo); - - switch(pSec->PairwiseEncAlgorithm) - { - case RT_ENC_ALG_WEP40: - case RT_ENC_ALG_WEP104: - if( pSec->pCkipPara->bIsMIC ) - { // CKIP MIC case. - SecCalculateCKIPMIC(Adapter, pTcb); - } - break; - - case RT_ENC_ALG_TKIP: - SecCalculateTKIPMIC(Adapter, pTcb); - break; - - case RT_ENC_ALG_AESCCMP: - break; - - default: - break; - } -} - - -// -// Descriptin: -// Append TKIP MIC of given tx packet to send. -// -// Note: -// 1. TKIP MIC input: DA(6) + SA(6) + Priority(1) + Zero(3) + Data(n) -// where Data field shall conform 802.2 LLC and 802.1 bridging. -// For example, Data is begined with LLC/SNAP. -// -// Assumption: -// 1. The tx packet repsented by RT_TCB here is an 802.11 MPDU -// translated from an MSDU before doing fragmentation. -// -// Revision History: -// 061028, rcnjko: -// Generalize the way to retrive MSDU payload. -// -VOID -SecCalculateTKIPMIC( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSec = &(pMgntInfo->SecurityInfo); - u4Byte idx = 0; - u1Byte keyidx = SecGetTxKeyIdx(Adapter, pTcb->DestinationAddress); - MicData micdata; - u1Byte Qos[4]; - PRT_WLAN_STA pEntry = NULL; - - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - u4Byte FrameHdrLng = sMacHdrLng + pSec->EncryptionHeadOverhead; - u4Byte OffsetToByPass = 0; - - - // - // MIC Key. - // - if(ACTING_AS_AP(Adapter)) - { - if(MacAddr_isMulticast(pTcb->DestinationAddress)) - { - //Check if set GTK was completed - if(pMgntInfo->globalKeyInfo.GTK[0] == 0) - return; - - //Set Tx Group Key - SecMICSetKey(&micdata, &pMgntInfo->globalKeyInfo.GTK[16]); - } - else - { - //Check if STA within associated lsit table - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry == NULL) - return; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.TxMICKey == NULL) - return; - - //Set Tx Pairwise Key by destination Address - SecMICSetKey(&micdata, pEntry->perSTAKeyInfo.TxMICKey); - } - } - else if(pTcb->bTDLPacket) - { - //Check if STA within associated lsit table - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry == NULL) - return; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.TxMICKey == NULL) - return; - - //Set Tx Pairwise Key by destination Address - SecMICSetKey(&micdata, pEntry->perSTAKeyInfo.TxMICKey); - } - else - { - if(pSec->PairwiseEncAlgorithm != RT_ENC_ALG_TKIP) { - RT_TRACE(COMP_SEC, DBG_LOUD, ("PairwiseEncAlg=%d\n", pSec->PairwiseEncAlgorithm) ); - return; - } - - if(pMgntInfo->mAssoc) - { - SecMICSetKey(&micdata, pSec->KeyBuf[keyidx]+TKIP_MICKEYRX_POS); - } - else - { - SecMICSetKey(&micdata, pSec->KeyBuf[keyidx]+TKIP_MICKEYTX_POS); - } - - } - - // - // DA, SA. - // - SecMICAppend(&micdata, pTcb->DestinationAddress, ETHERNET_ADDRESS_LENGTH); - SecMICAppend(&micdata, pTcb->SourceAddress, ETHERNET_ADDRESS_LENGTH); - - // - // Qos - // - PlatformZeroMemory(Qos, 4); - - if(IsQoSDataFrame(pHeader)) - Qos[0] = pTcb->priority; // Added by Annie, 2005-12-21. - - - SecMICAppend(&micdata, Qos, 4); - - if(IsQoSDataFrame(pHeader)) - FrameHdrLng += sQoSCtlLng; - - // - // Data. - // - OffsetToByPass = FrameHdrLng; - for(idx = 0;idx < pTcb->BufferCount; idx++) - { - if(pTcb->BufferList[idx].Length <= OffsetToByPass) - { - OffsetToByPass -= pTcb->BufferList[idx].Length; - continue; - } - else - { - SecMICAppend( - &micdata, - pTcb->BufferList[idx].VirtualAddress + OffsetToByPass, - pTcb->BufferList[idx].Length - OffsetToByPass); - } - } - - // - // Append MIC to tail. - // - SecMICGetMIC(&micdata, pTcb->Tailer.VirtualAddress); - pTcb->Tailer.Length = TKIP_MIC_LEN; - - pTcb->BufferList[pTcb->BufferCount] = pTcb->Tailer; - pTcb->BufferCount++; - pTcb->PacketLength += TKIP_MIC_LEN; - - //PRINT_DATA("TX_MIC======>", pTcb->Tailer.VirtualAddress, 8); -} - - - -// -// Calculate CKIP MIC. -// Ported from CKIP code, Annie, 2006-08-11. -// -VOID -SecCalculateCKIPMIC( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - u1Byte keyidx = pSec->DefaultTransmitKeyIdx; - u4Byte idx = 0; - pu1Byte pucMIC; -// u1Byte MICdata[2000] = {0}; - pu1Byte MICdata; - int datalen = 0; - PRT_GEN_TEMP_BUFFER pGenBufMICdata; - - RT_TRACE( COMP_CKIP, DBG_TRACE, ("==> SecCalculateCKIPMIC()\n") ); - - if( !pSec->pCkipPara->bIsMIC) // if not support MIC retun , added by CCW - return; - - pGenBufMICdata = GetGenTempBuffer (Adapter, 2000); - MICdata = (pu1Byte)pGenBufMICdata->Buffer.Ptr; - - //ckip_miccalc(Adapter, key, pDA, pSA, dcr, dcrlen, calcmic, mickeyid); - // key = wep key , dcr = payload ( | LLC | SNAP |MIC |SEQ |eth-payload |) - for(idx=1;idxBufferCount;idx++){ // Only check first nonzero buffer - if(pTcb->BufferList[idx].Length==0) - continue; - - PlatformMoveMemory( - MICdata + datalen, - pTcb->BufferList[idx].VirtualAddress, - pTcb->BufferList[idx].Length ); - - datalen += pTcb->BufferList[idx].Length; - } - - pucMIC = pTcb->BufferList[1].VirtualAddress + 8 ; // Set MIC file point - - - ckip_miccalc( Adapter , pSec->pCkipPara->CKIPKeyBuf[keyidx] , pTcb->DestinationAddress ,pTcb->SourceAddress - , MICdata ,datalen , pucMIC , keyidx ); - - ReturnGenTempBuffer (Adapter, pGenBufMICdata); - - RT_TRACE( COMP_CKIP, DBG_TRACE, ("<== SecCalculateCKIPMIC()\n") ); -} - -VOID -SecSoftwareEncryption( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - RT_ENC_ALG SelectEncAlgorithm; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(pMgntInfo->SafeModeEnabled) - { - RT_TRACE_F(COMP_SEND, DBG_LOUD, ("Do not use software encrypt when safemode enable\n")); - return; - } - - if( pTcb->bBTTxPacket ) - { - if(pTcb->EncInfo.IsEncByHW) - { - RT_TRACE( COMP_SEC , DBG_LOUD , (" ===> BT used HW encrypt !!No enter Sw encrypt !!\n") ); - return; - } - else - SelectEncAlgorithm = RT_ENC_ALG_AESCCMP; - } - else - SelectEncAlgorithm = Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm; - - switch(SelectEncAlgorithm) - { - case RT_ENC_ALG_WEP40: - case RT_ENC_ALG_WEP104: - if( !Adapter->MgntInfo.SecurityInfo.pCkipPara->bIsKP ) - { // WEP case. - SecSWWEPEncryption(Adapter, pTcb); - } - else - { // CKIP case. - SecSWCKIPEncryption(Adapter, pTcb); - } - break; - case RT_ENC_ALG_TKIP: - SecSWTKIPEncryption(Adapter, pTcb); - break; - case RT_ENC_ALG_AESCCMP: - SecSWAESEncryption(Adapter, pTcb); - break; - - case RT_ENC_ALG_SMS4: - WAPI_SecFuncHandler(WAPI_SECSWSMS4ENCRYPTION, Adapter, (PVOID)pTcb, WAPI_END); - break; - - default: - break; - } -} - - -// From kcwu 2004/09/24. -VOID -SecSWTKIPEncryption( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u4Byte FragIndex = 0; - u4Byte BufferIndex = 0; - u2Byte FragBufferCount = 0; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - //u1Byte SecBuffer[2000]; - u4Byte SpecificHeadOverhead = 0; - u4Byte SecBufLen = 0; - u4Byte SecBytesCopied = 0; - u4Byte SecBufIndex = 0; - u4Byte FragBufferIndexStart = 0; - pu1Byte SecPtr = 0; - u4Byte SecLenForCopy = 0; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - u1Byte key[16]; - u2Byte u2IV16; - u4Byte u4IV32; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_WLAN_STA pEntry = NULL;// = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - u1Byte IVOffset; // Added by Annie, 2005-12-23. - u1Byte DataOffset; // Added by Annie, 2005-12-23. - - SpecificHeadOverhead = Adapter->TXPacketShiftBytes; - - pHeader += SpecificHeadOverhead; - - - // AP mode: get key. - if(ACTING_AS_AP(Adapter)) - { // AP mode. - if(MacAddr_isMulticast(pTcb->DestinationAddress)) - { - // [AnnieNote] Current GTK is 12345678...12345678, so it's OK. - // It's better to modify it by GTK length if we use PRF-X to generate GTK later. 2005-12-23. - // - - //Check if set GTK was completed - if(Adapter->MgntInfo.globalKeyInfo.GTK[0] == 0) - return; - } - else - { - //Check if STA within associated lsit table - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry == NULL) - return; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.TempEncKey == NULL) - return; - } - } - - - // Get offset. Annie, 2005-12-23. - if( IsQoSDataFrame(pHeader) ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - DataOffset = IVOffset + EXT_IV_LEN; - - - // Get u2IV16 and u4IV32. - u2IV16 = ((u2Byte)(*(pHeader+IVOffset + 0)) << 8) + \ - ((u2Byte)(*(pHeader+IVOffset + 2)) << 0); - - u4IV32 = ((u4Byte) (*(pHeader+IVOffset + 4)) << 0) + \ - ((u4Byte) (*(pHeader+IVOffset + 5)) << 8) + \ - ((u4Byte) (*(pHeader+IVOffset + 6)) << 16) + \ - ((u4Byte) (*(pHeader+IVOffset + 7)) << 24); - - - if(ACTING_AS_AP(Adapter)) - { // AP mode. - if(MacAddr_isMulticast(pTcb->DestinationAddress)) - { - TKIPGenerateKey(key, u4IV32, u2IV16, pMgntInfo->Bssid, &Adapter->MgntInfo.globalKeyInfo.GTK[0]); - } - else - { - if(pEntry != NULL) - TKIPGenerateKey(key, u4IV32, u2IV16, pMgntInfo->Bssid, pEntry->perSTAKeyInfo.TempEncKey); - } - } - else - { // STA mode. - TKIPGenerateKey(key, u4IV32, u2IV16, pTcb->SourceAddress, pSec->KeyBuf[SecGetTxKeyIdx(Adapter, pTcb->DestinationAddress)]); - } - //TKIP_TSC_DECIMAL2ARRAY(pSec->SWTKIPu2IV16, pSec->SWTKIPu4IV32, ulKeyIndex, pucIV); - - for(FragIndex = 0; FragIndex < pTcb->FragCount; FragIndex++) - { - FragBufferIndexStart = BufferIndex; - SecBufLen = 0; - - //2004/09/14, kcwu, clear the Security Coalesce Buffer - PlatformZeroMemory(pSec->SecBuffer, SW_ENCRYPT_BUF_SIZE); - - //2004/09/14, kcwu, to show how many buffers are there used by this fragment - FragBufferCount = pTcb->FragBufCount[FragIndex]; - - //2004/09/14, kcwu, data to be encrypted start at the second buffer - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - BufferIndex = FragBufferIndexStart+1; - FragBufferCount--; // 2005.11.04, by rcnjko. - } - - // Concatenate buffers to be encrypted into the buffer, SecBuffer. - // SecBuffer for TKIP does not include 802.11 header and IV. - while(FragBufferCount-- > 0) - { - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - if(pTcb->BufferList[BufferIndex].Length > (SpecificHeadOverhead+DataOffset)) - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress + (SpecificHeadOverhead+DataOffset); - SecLenForCopy = pTcb->BufferList[BufferIndex].Length - (SpecificHeadOverhead+DataOffset); - } - } - else - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress; - SecLenForCopy = pTcb->BufferList[BufferIndex].Length; - } - - // 20110819 Joseph: Prevent from buffer overflow. - if((SecBufLen + SecLenForCopy)>SW_ENCRYPT_BUF_SIZE) - { - SecLenForCopy = SW_ENCRYPT_BUF_SIZE - SecBufLen; - FragBufferCount = 0; - RT_TRACE( COMP_SEC, DBG_SERIOUS, ("SecSWTKIPEncryption(): Packet is too large. Truncate!!\n") ); - } - - PlatformMoveMemory( - pSec->SecBuffer + SecBufLen, // 2005.11.04, by rcnjko. - SecPtr, - SecLenForCopy); - - SecBufLen += SecLenForCopy; - - BufferIndex++; - //DbgPrint("FragBufferCount = %d, SecBufLen = %d, BufferIndex = %d\n", - // FragBufferCount, SecBufLen, BufferIndex); - - } - - if(SecBufLen <= 0) - { - continue; - } - //PRINT_DATA("SecSWWEPEncryption_before_encrypted==>", SecBuffer, SecBufLen); - - EncodeWEP(key, - 16, - pSec->SecBuffer, - SecBufLen, - pSec->SecBuffer); - //PRINT_DATA("SecSWWEPEncryption_after_encrypted==>", SecBuffer, SecBufLen+4); - - // For WEP ICV. - SecBufLen += 4; - - SecBytesCopied = 0; - - // 2005.11.04, by rcnjko. - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - SecBufIndex = FragBufferIndexStart+1; - FragBufferCount = 1; - } - else - { - SecBufIndex = FragBufferIndexStart; - FragBufferCount = 0; - } - // - - //2004/09/14, then copy SecBuffer back to the buffer - - // 2005.11.04, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress+(SpecificHeadOverhead+DataOffset), - pSec->SecBuffer+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length-(SpecificHeadOverhead+DataOffset) - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length-(SpecificHeadOverhead+DataOffset); - SecBufIndex++; - FragBufferCount++; - } - // - - while(FragBufferCount < pTcb->FragBufCount[FragIndex]){ - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress, - pSec->SecBuffer+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length; - SecBufIndex++; - FragBufferCount++; - } - - // Copy WEP ICV. - // 2005.11.04, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER) || pTcb->FragCount == 1) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex-1].VirtualAddress+pTcb->BufferList[SecBufIndex-1].Length, - pSec->SecBuffer+SecBytesCopied, - pSec->EncryptionTailOverhead - ); - pTcb->BufferList[SecBufIndex-1].Length += pSec->EncryptionTailOverhead; //4; //Fix MPE SUT System Hang,120715, by YJ. - SecBytesCopied += pSec->EncryptionTailOverhead; - pTcb->FragLength[FragIndex] += pSec->EncryptionTailOverhead; - pTcb->PacketLength += pSec->EncryptionTailOverhead; - } - else - { - // TODO: non-coalesce and fragmneted case. - } - } -} - -// From kcwu 2004/09/24. -VOID -SecSWWEPEncryption( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u4Byte FragIndex = 0; - u4Byte BufferIndex = 0; - u2Byte FragBufferCount = 0; - u1Byte key[16]; - u4Byte wepIV=0; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - //u1Byte SecBuffer[2000]; // 3000 -> 2000 to prevent stack overflow problem in Win98, 2005.03.15, by rcnjko. - u4Byte SpecificHeadOverhead = 0; - u4Byte SecBufLen = 0; - u4Byte SecBytesCopied = 0; - u4Byte SecBufIndex = 0; - u4Byte FragBufferIndexStart = 0; - pu1Byte SecPtr = 0; - u4Byte SecLenForCopy = 0; - pu1Byte pHeader; - u1Byte IVOffset; // Added by Annie, 2005-12-23. - u1Byte DataOffset; // Added by Annie, 2005-12-23. - - pHeader = pTcb->BufferList[FragBufferIndexStart].VirtualAddress; - - SpecificHeadOverhead = Adapter->TXPacketShiftBytes; - - pHeader += SpecificHeadOverhead; - - - // Get offset. Annie, 2005-12-23. - if( IsQoSDataFrame(pHeader) ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - DataOffset = IVOffset + WEP_IV_LEN; - - - //2004/09/14, kcwu, the IV has been calculate, just get from current IV - //wepIV.ul = (u4Byte) ((pSec->TxIV == 0)?0x00fffffe:((pSec->TxIV-1)&0x00ffffff)); - SET_WEP_IV_INITVECTOR(&wepIV, *(UNALIGNED pu4Byte)(pHeader+IVOffset)); - - SET_WEP_IV_KEYID(& wepIV, pSec->DefaultTransmitKeyIdx); - - - //PRINT_DATA("SecSWWEPEncryption==>", (pu1Byte)&wepIV, 4); - - PlatformMoveMemory(key, (pHeader+IVOffset), 3); - PlatformMoveMemory(key+3, pSec->KeyBuf[pSec->DefaultTransmitKeyIdx], - (pSec->PairwiseEncAlgorithm==RT_ENC_ALG_WEP104)?13:5); - - for(FragIndex = 0; FragIndex < pTcb->FragCount; FragIndex++) - { - FragBufferIndexStart = BufferIndex; - SecBufLen = 0; - - //2004/09/14, kcwu, clear the Security Coalesce Buffer - PlatformZeroMemory(pSec->SecBuffer, SW_ENCRYPT_BUF_SIZE); // 3000 -> 2000 to prevent stack overflow problem in Win98, 2005.03.15, by rcnjko. - - //2004/09/14, kcwu, to show how many buffers are there used by this fragment - FragBufferCount = pTcb->FragBufCount[FragIndex]; - - // For non-coalesce case, data to be encrypted start at the second buffer. - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - BufferIndex = FragBufferIndexStart+1; - FragBufferCount--; // 2005.11.07, by rcnjko. - } - - // Concatenate buffers to be encrypted into the buffer, SecBuffer. - // SecBuffer for WEP does not include 802.11 header and IV. - while(FragBufferCount-- > 0) - { - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - if(pTcb->BufferList[BufferIndex].Length > (SpecificHeadOverhead+DataOffset)) - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress + (SpecificHeadOverhead+DataOffset); - SecLenForCopy = pTcb->BufferList[BufferIndex].Length - (SpecificHeadOverhead+DataOffset); - } - } - else - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress; - SecLenForCopy = pTcb->BufferList[BufferIndex].Length; - } - - // 20110819 Joseph: Prevent from buffer overflow. - if((SecBufLen + SecLenForCopy)>SW_ENCRYPT_BUF_SIZE) - { - SecLenForCopy = SW_ENCRYPT_BUF_SIZE - SecBufLen; - FragBufferCount = 0; - RT_TRACE( COMP_SEC, DBG_SERIOUS, ("SecSWWEPEncryption(): Packet is too large. Truncate!!\n") ); - } - - PlatformMoveMemory( - pSec->SecBuffer + SecBufLen, // 2005.11.07, by rcnjko. - SecPtr, - SecLenForCopy); - - SecBufLen += SecLenForCopy; - - BufferIndex++; - //DbgPrint("FragBufferCount = %d, SecBufLen = %d, BufferIndex = %d\n", - // FragBufferCount, SecBufLen, BufferIndex); - } - - if(SecBufLen <= 0) - { - continue; - } - - //PRINT_DATA("SecSWWEPEncryption_before_encrypted==>", pSec->SecBuffer, SecBufLen); - EncodeWEP(key, - (pSec->PairwiseEncAlgorithm==RT_ENC_ALG_WEP104)?16:8, - pSec->SecBuffer, - SecBufLen, - pSec->SecBuffer); - //PRINT_DATA("SecSWWEPEncryption_after_encrypted==>", pSec->SecBuffer, SecBufLen+4); - - // For WEP ICV. - SecBufLen += 4; - - SecBytesCopied = 0; - - // 2005.11.07, by rcnjko. - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - SecBufIndex = FragBufferIndexStart+1; - FragBufferCount = 1; - } - else - { - SecBufIndex = FragBufferIndexStart; - FragBufferCount = 0; - } - // - - //2004/09/14, then copy SecBuffer back to the buffer - // 2005.11.04, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress+(SpecificHeadOverhead+DataOffset), - pSec->SecBuffer+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length-(SpecificHeadOverhead+DataOffset) - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length-(SpecificHeadOverhead+DataOffset); - SecBufIndex++; - FragBufferCount++; - } - // - - while(FragBufferCount < pTcb->FragBufCount[FragIndex]) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress, - pSec->SecBuffer+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length; - SecBufIndex++; - FragBufferCount++; - } - - // Copy WEP ICV. - // 2005.11.07, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex-1].VirtualAddress+pTcb->BufferList[SecBufIndex-1].Length, - pSec->SecBuffer+SecBytesCopied, - pSec->EncryptionTailOverhead - ); - pTcb->BufferList[SecBufIndex-1].Length += pSec->EncryptionTailOverhead; // 4; //Fix MPE SUT System Hang,120715, by YJ. - SecBytesCopied += pSec->EncryptionTailOverhead; - pTcb->FragLength[FragIndex] += pSec->EncryptionTailOverhead; - pTcb->PacketLength += pSec->EncryptionTailOverhead; - } - else - { - // For non-coalesce case, the WEP ICV cannot append to last buffer of the fragment directly, - // because the buffer might belong to upper layer and we are NOT allow to change its length. - if(pTcb->FragCount == 1) - { - PlatformMoveMemory( - pTcb->Tailer.VirtualAddress, - pSec->SecBuffer+SecBytesCopied, - pSec->EncryptionTailOverhead - ); - pTcb->Tailer.Length = pSec->EncryptionTailOverhead; - - pTcb->BufferList[pTcb->BufferCount] = pTcb->Tailer; - pTcb->BufferCount++; - - pTcb->FragLength[FragIndex] += pSec->EncryptionTailOverhead; - pTcb->FragBufCount[FragIndex]++; - pTcb->PacketLength += pSec->EncryptionTailOverhead; - - SecBytesCopied += pSec->EncryptionTailOverhead; - } - else - { - // TODO: non-coalesce and fragmneted case. - } - } - // - } -} - -VOID -SecSWAESEncryption( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u4Byte keyidx=0; - u4Byte FragIndex = 0; - u4Byte BufferIndex = 0; - u2Byte FragBufferCount = 0; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - //u1Byte SecBuffer[2000]; - u4Byte SpecificHeadOverhead = 0; - u4Byte SecBufLen = 0; - u4Byte SecBytesCopied = 0; - u4Byte SecBufIndex = 0; - u4Byte FragBufferIndexStart = 0; - pu1Byte SecPtr = 0; - u4Byte SecLenForCopy = 0; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - u1Byte IVOffset; // Added by Annie, 2005-12-23. - u1Byte DataOffset; // Added by Annie, 2005-12-23. - PRT_WLAN_STA pEntry; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING frame; - - SpecificHeadOverhead = Adapter->TXPacketShiftBytes; - - pHeader += SpecificHeadOverhead; - - FillOctetString(frame, pHeader, (u2Byte)pTcb->PacketLength); - - // Get offset. Annie, 2005-12-23. - if( IsQoSDataFrame(pHeader) ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - - // check address 4 - if( Frame_ValidAddr4(frame) ) - { - RT_TRACE( COMP_SEC , DBG_LOUD , ("====>ccw BT data SecSWAESEncryption \n") ); - IVOffset += ETHERNET_ADDRESS_LENGTH; - } - - DataOffset = IVOffset + EXT_IV_LEN; - - - if(ACTING_AS_AP(Adapter)) - { - if(MacAddr_isMulticast(pTcb->DestinationAddress)) - { - // TODO: - //keyidx = - } - else - { - // TODO: - //keyidx = - } - } - else - { - keyidx = SecGetTxKeyIdx(Adapter, pTcb->DestinationAddress); - } - - for(FragIndex = 0; FragIndex < pTcb->FragCount; FragIndex++) - { - FragBufferIndexStart = BufferIndex; - SecBufLen = 0; - - //2004/09/14, kcwu, clear the Security Coalesce Buffer - PlatformZeroMemory(pSec->SecBuffer, SW_ENCRYPT_BUF_SIZE); - - //2004/09/14, kcwu, to show how many buffers are there used by this fragment - FragBufferCount = pTcb->FragBufCount[FragIndex]; - - // Concatenate buffers to be encrypted into the buffer, SecBuffer. - // SecBuffer for AES contains 802.11 header and IV information to encrypt data. - while(FragBufferCount-- > 0) - { - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - if(pTcb->BufferList[BufferIndex].Length > SpecificHeadOverhead) - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress + SpecificHeadOverhead; - SecLenForCopy = pTcb->BufferList[BufferIndex].Length - SpecificHeadOverhead; - } - } - else - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress; - SecLenForCopy = pTcb->BufferList[BufferIndex].Length; - } - - // 20110819 Joseph: Prevent from buffer overflow. - if((SecBufLen + SecLenForCopy)>SW_ENCRYPT_BUF_SIZE) - { - SecLenForCopy = SW_ENCRYPT_BUF_SIZE - SecBufLen; - FragBufferCount = 0; - RT_TRACE( COMP_SEC, DBG_SERIOUS, ("SecSWAESEncryption(): Packet is too large. Truncate!!\n") ); - } - - PlatformMoveMemory( - pSec->SecBuffer + SecBufLen, // 2005.11.07, by rcnjko. - SecPtr, - SecLenForCopy); - - SecBufLen += SecLenForCopy; - - BufferIndex++; - //DbgPrint("FragBufferCount = %d, SecBufLen = %d, BufferIndex = %d\n", - // FragBufferCount, SecBufLen, BufferIndex); - } - - if(SecBufLen <= 0) - { - continue; - } - -#ifdef SW_TXENCRYPTION_DBG - RT_TRACE(COMP_SEC, DBG_LOUD, ("\n\nKeyIndex = %d\n", SecGetTxKeyIdx(Adapter, pTcb->DestinationAddress))); - PRINT_DATA("AESKeyBuf===>", pSec->AESKeyBuf[SecGetTxKeyIdx(Adapter, pTcb->DestinationAddress)], 16); - PRINT_DATA("SecBuffer_before ====>", pSec->SecBuffer, SecBufLen); -#endif - if(pTcb->bTDLPacket) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry == NULL) - return; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.AESKeyBuf[0] == 0) - return; - - SecRSNAEncodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pEntry->perSTAKeyInfo.AESKeyBuf, - 0, - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - } - else if( !Adapter->MgntInfo.bRSNAPSKMode && !ACTING_AS_AP(Adapter) ) - { // NO RSNA-PSK and AP-mode - if(pTcb->EncInfo.bMFPPacket && pMgntInfo->bInBIPMFPMode) - { - SecMFPEncodeAESCCM_1W( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)Adapter->MgntInfo.SecurityInfo.AESKeyBuf[0], - keyidx, - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - //RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "BIP AES EncData:\n", pHeader, pTcb->PacketLength); - } - else - { - SecEncodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)Adapter->MgntInfo.SecurityInfo.AESKeyBuf[keyidx], - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - } - } - //AP WPA AES, CCW - else if( ACTING_AS_AP(Adapter) ) - { // AP mode - - - if(MacAddr_isMulticast(pTcb->DestinationAddress)) - {// Multicase packet , used AESGTK - //RT_TRACE(COMP_WPAAES, DBG_LOUD, ("<===== AP WPA AES Multicase\n")); - //Check if set GTK was completed - if(Adapter->MgntInfo.globalKeyInfo.AESGTK[0] == 0) - return; - SecRSNAEncodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)Adapter->MgntInfo.globalKeyInfo.AESGTK, - pSec->GroupTransmitKeyIdx, - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - //RT_TRACE(COMP_WPAAES, DBG_LOUD, ("=====> AP WPA AES Multicase\n")); - } - else - { // unitcase packet , used Entry Pairwise key - //RT_TRACE(COMP_WPAAES, DBG_LOUD, ("<===== AP WPA AES unitcase\n")); - //Check if STA within associated lsit table - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry == NULL) - return; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.AESKeyBuf[0] == 0) - return; - - SecRSNAEncodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pEntry->perSTAKeyInfo.AESKeyBuf, - 0, - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - //RT_TRACE(COMP_WPAAES, DBG_LOUD, ("=====> AP WPA AES unitcase\n")); - } - } - else - { // RSNA-PSK mode - OCTET_STRING pduOS; - pu1Byte pRA; - pu1Byte pTA; - u4Byte index; - - FillOctetString(pduOS, pHeader, IVOffset); - pRA = Frame_Addr1(pduOS); - pTA = Frame_Addr2(pduOS); - - RT_TRACE(COMP_RSNA, DBG_LOUD,( "=====>RSNA IBSS Send Encrypt packet \n")); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, "RSNA RA : ", pRA); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, "RSNA TA : ", pTA); - if(MacAddr_isMulticast(pRA)) - { - PPER_STA_DEFAULT_KEY_ENTRY pDefKey; // Add by CCW - - // - // TODO: remvoe our group key from PerStaDefKeyTable[] - // - - //Multicast packet - //Find out Default KEY Entry - pDefKey = pSec->PerStaDefKeyTable; - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pDefKey++) - { - if( pDefKey->Valid && (PlatformCompareMemory(pDefKey->MACAdrss , pTA, 6)==0)) - break; - } - - if(index != MAX_NUM_PER_STA_KEY) - { - RT_TRACE(COMP_RSNA, DBG_LOUD, ("DefaultTransmitKeyIdx: %d\n", pSec->DefaultTransmitKeyIdx)); - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, " Multicase Default key : ", pDefKey->DefKeyBuf[pSec->DefaultTransmitKeyIdx], 16); - SecRSNAEncodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pDefKey->DefKeyBuf[pSec->DefaultTransmitKeyIdx], - pSec->DefaultTransmitKeyIdx, - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - } - else - { // no key found! - RT_PRINT_ADDR(COMP_RSNA, DBG_WARNING, ("SecSWAESEncryption(): No group key found for pTA: \n"), pTA); - } - } - else - { - PPER_STA_MPAKEY_ENTRY pMAPkey; // Add by CCW - - //unicast packet - //Find out MAPPING Key Entry. - pMAPkey = pSec->MAPKEYTable; - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pMAPkey++) - { - if( pMAPkey->Valid && (PlatformCompareMemory(pMAPkey->MACAdrss , pRA, 6)==0)) - break; - } - - if(index != MAX_NUM_PER_STA_KEY) - { - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, " Unicase Key Mapping key : ", pMAPkey->MapKeyBuf , 16); - SecRSNAEncodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pMAPkey->MapKeyBuf, - 0, // default = 0. - pSec->SecBuffer, - IVOffset, - SecBufLen - ); - } - else - { // no key found! - RT_PRINT_ADDR(COMP_RSNA, DBG_WARNING, ("SecSWAESEncryption(): No pairwse key found for pRA: \n"), pRA); - } - } - } - // For AES MIC. - SecBufLen += 8; - -#ifdef SW_TXENCRYPTION_DBG - PRINT_DATA("SecBuffer_after ====>", pSec->SecBuffer, SecBufLen); - if(SecBufLen == 147) - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("SecSWAESEncryption:SecBufLen = %d\n", SecBufLen)); - } -#endif - - SecBytesCopied = 0; - - // 2005.11.07, by rcnjko. - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - SecBufIndex = FragBufferIndexStart+1; - FragBufferCount = 1; - } - else - { - SecBufIndex = FragBufferIndexStart; - FragBufferCount = 0; - } - // - - //2004/09/14, then copy SecBuffer back to the buffer - // 2005.11.07, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress + (SpecificHeadOverhead+DataOffset), - pSec->SecBuffer+DataOffset+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length - (SpecificHeadOverhead+DataOffset) - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length - (SpecificHeadOverhead+DataOffset); - SecBufIndex++; - FragBufferCount++; - } - // - - while(FragBufferCount < pTcb->FragBufCount[FragIndex]) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress, - pSec->SecBuffer+DataOffset+SecBytesCopied, // 2005.11.07, by rcnjko. - pTcb->BufferList[SecBufIndex].Length - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length; - SecBufIndex++; - FragBufferCount++; - } - - // Copy AES MIC. - // 2005.11.07, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex-1].VirtualAddress+pTcb->BufferList[SecBufIndex-1].Length, - pSec->SecBuffer+DataOffset+SecBytesCopied, - 8//pSec->EncryptionTailOverhead - ); - pTcb->BufferList[SecBufIndex-1].Length += 8;//pSec->EncryptionTailOverhead; - SecBytesCopied += 8;//pSec->EncryptionTailOverhead; - pTcb->FragLength[FragIndex] += 8;//pSec->EncryptionTailOverhead; - pTcb->PacketLength += 8;//pSec->EncryptionTailOverhead; - } - else - { - // For non-coalesce case, the AES MIC cannot append to last buffer of the fragment directly, - // because the buffer might belong to upper layer and we are NOT allow to change its length. - if(pTcb->FragCount == 1) - { - PlatformMoveMemory( - pTcb->Tailer.VirtualAddress, - pSec->SecBuffer+DataOffset+SecBytesCopied, - 8//pSec->EncryptionTailOverhead - ); - pTcb->Tailer.Length = 8;//pSec->EncryptionTailOverhead; - - pTcb->BufferList[pTcb->BufferCount] = pTcb->Tailer; - pTcb->BufferCount++; - - pTcb->FragLength[FragIndex] += 8;//pSec->EncryptionTailOverhead; - pTcb->FragBufCount[FragIndex]++; - pTcb->PacketLength += 8;//pSec->EncryptionTailOverhead; - - SecBytesCopied += 8;//pSec->EncryptionTailOverhead; - } - else - { - // TODO: non-coalesce and fragmneted case. - } - } - // - } -} - - -// -// Software encryption for CKIP. -// Ported from CKIP code, Annie, 2006-08-11. [AnnieTODO] -// -VOID -SecSWCKIPEncryption( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u4Byte FragIndex = 0; - u4Byte BufferIndex = 0; - u2Byte FragBufferCount = 0; - u4Byte FragBufferIndexStart = 0; - u4Byte SecBufLen = 0; - u4Byte SecBufIndex = 0; - pu1Byte SecPtr = 0; - u4Byte SecLenForCopy = 0; - pu1Byte pucIV =0; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - ULONG keyidx = pSec->DefaultTransmitKeyIdx; - //UCHAR key[16] = {0}; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - //u1Byte SecBuffer[2000] = {0}; - u4Byte SpecificHeadOverhead = 0; - u1Byte IVOffset; - u1Byte DataOffset; - u4Byte SecBytesCopied = 0; - - RT_TRACE( COMP_CKIP, DBG_TRACE, ("==> SecSWCKIPEncryption()\n") ); - - SpecificHeadOverhead = Adapter->TXPacketShiftBytes; - - pHeader += SpecificHeadOverhead; - - - if( !pSec->pCkipPara->bIsKP ) - { //Pure WEP - RT_TRACE( COMP_CKIP, DBG_LOUD, ("SecSWCKIPEncryption(): Use pure WEP encryption.\n") ); - SecSWWEPEncryption(Adapter,pTcb); - } - else - { // Do Key Permutation - RT_TRACE( COMP_CKIP, DBG_TRACE, ("SecSWCKIPEncryption(): CKIP case: Do Key Permutation.\n") ); - for(FragIndex = 0; FragIndex < pTcb->FragCount; FragIndex++) - { - FragBufferIndexStart = BufferIndex; - SecBufLen = 0; - - if( IsQoSDataFrame(pHeader) ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - DataOffset = IVOffset + WEP_IV_LEN; - - PlatformZeroMemory(pSec->SecBuffer, SW_ENCRYPT_BUF_SIZE); - - FragBufferCount = pTcb->FragBufCount[FragIndex]; - - //2004/09/14, kcwu, data to be encrypted start at the second buffer - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - BufferIndex = FragBufferIndexStart+1; - FragBufferCount--; // 2005.11.04, by rcnjko. - } - - // Concatenate buffers to be encrypted into the buffer, SecBuffer. - // SecBuffer for TKIP does not include 802.11 header and IV. - while(FragBufferCount-- > 0) - { - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - if(pTcb->BufferList[BufferIndex].Length > (SpecificHeadOverhead+DataOffset)) - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress + (SpecificHeadOverhead+DataOffset); - SecLenForCopy = pTcb->BufferList[BufferIndex].Length - (SpecificHeadOverhead+DataOffset); - // to get IV , by CCW - pucIV = pTcb->BufferList[BufferIndex].VirtualAddress + (SpecificHeadOverhead+IVOffset); - } - } - else - { - SecPtr = pTcb->BufferList[BufferIndex].VirtualAddress; - SecLenForCopy = pTcb->BufferList[BufferIndex].Length; - } - - // 20110819 Joseph: Prevent from buffer overflow. - if((SecBufLen + SecLenForCopy)>SW_ENCRYPT_BUF_SIZE) - { - SecLenForCopy = SW_ENCRYPT_BUF_SIZE - SecBufLen; - FragBufferCount = 0; - RT_TRACE( COMP_SEC, DBG_SERIOUS, ("SecSWCKIPEncryption(): Packet is too large. Truncate!!\n") ); - } - - PlatformMoveMemory( - pSec->SecBuffer + SecBufLen, // 2005.11.04, by rcnjko. - SecPtr, - SecLenForCopy); - - SecBufLen += SecLenForCopy; - - BufferIndex++; - //DbgPrint("FragBufferCount = %d, SecBufLen = %d, BufferIndex = %d\n", - // FragBufferCount, SecBufLen, BufferIndex); - - } - - if(SecBufLen <= 0) - { - continue; - } - - ckip_encrypt( pSec->pCkipPara->CKIPKeyBuf[keyidx] , pucIV , pSec->SecBuffer , SecBufLen ); - - // For CKIP ICV. - SecBufLen += 4; - SecBytesCopied = 0; - - - // 2005.11.04, by rcnjko. - if(!TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - SecBufIndex = FragBufferIndexStart+1; - FragBufferCount = 1; - } - else - { - SecBufIndex = FragBufferIndexStart; - FragBufferCount = 0; - } - // - - //2004/09/14, then copy SecBuffer back to the buffer - - // 2005.11.04, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress+(SpecificHeadOverhead+DataOffset), - pSec->SecBuffer+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length-(SpecificHeadOverhead+DataOffset) - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length-(SpecificHeadOverhead+DataOffset); - SecBufIndex++; - FragBufferCount++; - } - // - - while(FragBufferCount < pTcb->FragBufCount[FragIndex]){ - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex].VirtualAddress, - pSec->SecBuffer+SecBytesCopied, - pTcb->BufferList[SecBufIndex].Length - ); - SecBytesCopied += pTcb->BufferList[SecBufIndex].Length; - SecBufIndex++; - FragBufferCount++; - } - - - // Copy WEP ICV. - // 2005.11.07, by rcnjko. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - PlatformMoveMemory( - pTcb->BufferList[SecBufIndex-1].VirtualAddress+pTcb->BufferList[SecBufIndex-1].Length, - pSec->SecBuffer+SecBytesCopied, - pSec->EncryptionTailOverhead - ); - pTcb->BufferList[SecBufIndex-1].Length += 4; - SecBytesCopied += pSec->EncryptionTailOverhead; - pTcb->FragLength[FragIndex] += pSec->EncryptionTailOverhead; - pTcb->PacketLength += pSec->EncryptionTailOverhead; - } - else - { - // For non-coalesce case, the WEP ICV cannot append to last buffer of the fragment directly, - // because the buffer might belong to upper layer and we are NOT allow to change its length. - if(pTcb->FragCount == 1) - { - PlatformMoveMemory( - pTcb->Tailer.VirtualAddress, - pSec->SecBuffer+SecBytesCopied, - pSec->EncryptionTailOverhead - ); - pTcb->Tailer.Length = pSec->EncryptionTailOverhead; - - pTcb->BufferList[pTcb->BufferCount] = pTcb->Tailer; - pTcb->BufferCount++; - - pTcb->FragLength[FragIndex] += pSec->EncryptionTailOverhead; - pTcb->FragBufCount[FragIndex]++; - pTcb->PacketLength += pSec->EncryptionTailOverhead; - - SecBytesCopied += pSec->EncryptionTailOverhead; - } - else - { - // TODO: non-coalesce and fragmneted case. - } - } - } - - } - - RT_TRACE( COMP_CKIP, DBG_TRACE, ("<== SecSWCKIPEncryption()\n") ); -} - - -// -// Check IV increase -// -// In Encrypt mode , IV is not increase ,and return FALSE. -// -RT_SEC_STATUS -SecRxCheckIV( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - RT_ENC_ALG DecryptAlgorithm; - RT_SEC_STATUS secStatus = RT_SEC_STATUS_SUCCESS; - pu1Byte DestAddr; - OCTET_STRING Mpdu; - BOOLEAN bMulticastDest; - u2Byte EncryptionMPDUHeadOverhead, EncryptionMPDUTailOverhead; - u2Byte EncryptionMSDUHeadOverhead, EncryptionMSDUTailOverhead; - u2Byte MinEncPktSize; - u1Byte IVOffset; // Added by Annie, 2005-12-23. - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - - - FillOctetString(Mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - DestAddr = Frame_pDaddr(Mpdu); - bMulticastDest = MacAddr_isMulticast(DestAddr); - - if(!Frame_WEP(Mpdu)) - { // Skip the non-encrypted frame, 2005.06.28, by rcnjko. - return RT_SEC_STATUS_SUCCESS; - } - - if(ACTING_AS_AP(Adapter)) - return RT_SEC_STATUS_SUCCESS; - - SecGetEncryptionOverhead( - Adapter, - &EncryptionMPDUHeadOverhead, - &EncryptionMPDUTailOverhead, - &EncryptionMSDUHeadOverhead, - &EncryptionMSDUTailOverhead, - TRUE, - bMulticastDest); - MinEncPktSize = Frame_FrameHdrLng(Mpdu) + - EncryptionMPDUHeadOverhead + EncryptionMSDUHeadOverhead + - EncryptionMSDUTailOverhead + EncryptionMPDUTailOverhead; - if(Mpdu.Length < MinEncPktSize) - { // 061214, rcnjo: Discard invalid length frame to prevent memory access violation. - return RT_SEC_STATUS_INVALID_PKT_LEN; - } - - - if(bMulticastDest) - { - DecryptAlgorithm = Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm; - } - else - { - DecryptAlgorithm = Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm; - } - - // Get offset. Annie, 2005-12-23. - if( pRfd->Status.bIsQosData ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - - if(pRfd->Status.bContainHTC) - IVOffset += sHTCLng; - - switch(DecryptAlgorithm) - { - case RT_ENC_ALG_WEP104: - case RT_ENC_ALG_WEP40: - { - u4Byte TempIV = 0; - - // Get IV - TempIV = (((u4Byte)( Mpdu.Octet[IVOffset] )) << 16 ) + - (((u4Byte)( Mpdu.Octet[IVOffset+1] )) << 8 ) + - (((u4Byte)( Mpdu.Octet[IVOffset+2] )) << 0 ); - - // Check IV - // The 2 situations are not IV replay: (1) current IV of Pkt is greater than the rx IV (2) the current pkt is retry and IV is the same - if(TempIV > pSec->RXUntiIV || (Frame_Retry(Mpdu) && pSec->RXUntiIV == TempIV)) - pSec->RXUntiIV = TempIV; - else - secStatus = RT_SEC_STATUS_DATA_UNICAST_IV_REPLAY; - - } - break; - - case RT_ENC_ALG_TKIP: - case RT_ENC_ALG_AESCCMP: - { - u2Byte u2IV16; - u4Byte u4IV32; - u8Byte TempIV; - - // Get u2IV16 and u4IV32. - u2IV16 = ((u2Byte)(*(Mpdu.Octet+IVOffset + 0)) << 8)+ \ - ((u2Byte)(*(Mpdu.Octet+IVOffset + 2)) << 0); - - u4IV32 = ((u4Byte) (*(Mpdu.Octet+IVOffset + 4)) << 0)+ \ - ((u4Byte) (*(Mpdu.Octet+IVOffset + 5)) << 8)+ \ - ((u4Byte) (*(Mpdu.Octet+IVOffset + 6)) << 16)+ \ - ((u4Byte) (*(Mpdu.Octet+IVOffset + 7)) << 24); - - // Get IV - TempIV = u2IV16 + ((u8Byte)u4IV32 << 16 ); - - if( bMulticastDest ) - { - // The 2 situations are not IV replay: (1) current IV of Pkt is greater than the rx IV (2) the current pkt is retry and IV is the same - if( TempIV > pSec->RXMutiIV || (Frame_Retry(Mpdu) && pSec->RXMutiIV == TempIV)) - pSec->RXMutiIV = TempIV; - else - secStatus = RT_SEC_STATUS_DATA_MULTICAST_IV_REPLAY; - } - else - { - // The 2 situations are not IV replay: (1) current IV of Pkt is greater than the rx IV (2) the current pkt is retry and IV is the same - if( TempIV > pSec->RXUntiIV || (Frame_Retry(Mpdu) && pSec->RXUntiIV == TempIV)) - pSec->RXUntiIV = TempIV; - else - secStatus = RT_SEC_STATUS_DATA_UNICAST_IV_REPLAY; - } - } - break; - - default: - break; - } - - if(secStatus != RT_SEC_STATUS_SUCCESS) - { // Count Relay statistics - if(IsDataFrame(Mpdu.Octet)) - { - switch(DecryptAlgorithm) - { - case RT_ENC_ALG_TKIP: - CountRxTKIPRelpayStatistics(Adapter, pRfd); - break; - - case RT_ENC_ALG_AESCCMP: - CountRxCCMPRelpayStatistics(Adapter, pRfd); - break; - - default: //for MacOSX Compiler warning. - break; - } - } - else if(IsMgntFrame(Mpdu.Octet)) - { - secStatus = RT_SEC_STATUS_MGNT_IV_REPLAY; - switch(DecryptAlgorithm) - { - case RT_ENC_ALG_TKIP: - CountRxMgntTKIPRelpayStatistics(Adapter, pRfd); - break; - - case RT_ENC_ALG_AESCCMP: - CountRxMgntCCMPRelpayStatistics(Adapter, pRfd); - break; - - default: //for MacOSX Compiler warning. - break; - } - } - } - - return secStatus; -} - - -RT_SEC_STATUS -SecSoftwareDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - RT_ENC_ALG DecryptAlgorithm; - RT_SEC_STATUS secStatus = RT_SEC_STATUS_SUCCESS; - BOOLEAN bResult= TRUE; - pu1Byte DestAddr; - OCTET_STRING Mpdu; - BOOLEAN bMulticastDest; - u2Byte EncryptionMPDUHeadOverhead, EncryptionMPDUTailOverhead; - u2Byte EncryptionMSDUHeadOverhead, EncryptionMSDUTailOverhead; - u2Byte MinEncPktSize; - - FillOctetString(Mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - DestAddr = Frame_pDaddr(Mpdu); - bMulticastDest = MacAddr_isMulticast(DestAddr); - - do - { - if(!Frame_WEP(Mpdu)) - { // Skip the non-encrypted frame, 2005.06.28, by rcnjko. - secStatus = RT_SEC_STATUS_SUCCESS; - break; - } - - if(!pRfd->bRxBTdata) - { - if(!eqMacAddr(Frame_pBssid(Mpdu), Adapter->MgntInfo.Bssid)) - { - // RT_PRINT_ADDR(COMP_SEC, DBG_WARNING, "Mismatched BSSID (RT_SEC_STATUS_UNKNOWN_TA):\nFrame_pBssid: ", Frame_pBssid(Mpdu)); - // RT_PRINT_ADDR(COMP_SEC, DBG_WARNING, "MgntInfo.Bssid: ", Adapter->MgntInfo.Bssid); - secStatus = RT_SEC_STATUS_UNKNOWN_TA; - break; - } - } - - SecGetEncryptionOverhead( - Adapter, - &EncryptionMPDUHeadOverhead, - &EncryptionMPDUTailOverhead, - &EncryptionMSDUHeadOverhead, - &EncryptionMSDUTailOverhead, - TRUE, - bMulticastDest); - MinEncPktSize = Frame_FrameHdrLng(Mpdu) + - EncryptionMPDUHeadOverhead + EncryptionMSDUHeadOverhead + - EncryptionMSDUTailOverhead + EncryptionMPDUTailOverhead; - if(Mpdu.Length < MinEncPktSize) - { // 061214, rcnjo: Discard invalid length frame to prevent memory access violation. - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("RT_SEC_STATUS_INVALID_PKT_LEN, mpduLength(%d) < MinEncPktSize(%d)\n", Mpdu.Length, MinEncPktSize)); - secStatus = RT_SEC_STATUS_INVALID_PKT_LEN; - break; - } - - if(bMulticastDest) - { - DecryptAlgorithm = Adapter->MgntInfo.SecurityInfo.GroupEncAlgorithm; - } - else - { - DecryptAlgorithm = Adapter->MgntInfo.SecurityInfo.PairwiseEncAlgorithm; - } - - if(pRfd->bRxBTdata) - { - DecryptAlgorithm = RT_ENC_ALG_AESCCMP; - } - - switch(DecryptAlgorithm) - { - case RT_ENC_ALG_WEP104: - case RT_ENC_ALG_WEP40: - if( !Adapter->MgntInfo.SecurityInfo.pCkipPara->bIsKP ) - { // WEP decryption - bResult = SecSWWEPDecryption(Adapter, pRfd); - } - else - { // CKIP decryption - bResult = SecSWCKIPDecryption(Adapter, pRfd); - } - break; - - case RT_ENC_ALG_TKIP: - bResult = SecSWTKIPDecryption(Adapter, pRfd); - break; - - case RT_ENC_ALG_AESCCMP: - bResult = SecSWAESDecryption(Adapter, pRfd); - break; - - case RT_ENC_ALG_SMS4: - if(RT_STATUS_SUCCESS == WAPI_SecFuncHandler(WAPI_SECSWSMS4DECRYPTION, Adapter, (PVOID)pRfd, WAPI_END)) - bResult = TRUE; - break; - - default: - break; - } - - if(!bResult) - { - secStatus = RT_SEC_STATUS_ICV_ERROR; - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "SecSoftwareDecryption:() RT_SEC_STATUS_ICV_ERROR:\n", Mpdu.Octet, Mpdu.Length); - if(Adapter->MgntInfo.uLastDecryptedErrorSeqNum == Frame_SeqNum(Mpdu)) - { - break; - } - - RT_TRACE(COMP_RECV, DBG_TRACE, ("SecSoftwareDecryption:() CountRxDecryptErrorStatistics\n")); - - CountRxDecryptErrorStatistics(Adapter, pRfd); - - switch(DecryptAlgorithm) - { - case RT_ENC_ALG_WEP104: - case RT_ENC_ALG_WEP40: - if( !Adapter->MgntInfo.SecurityInfo.pCkipPara->bIsKP ) - { // WEP decryption - CountWEPUndecryptableStatistics(Adapter, pRfd); - CountWEPICVErrorStatistics(Adapter, pRfd); - } - - break; - - case RT_ENC_ALG_TKIP: - CountTKIPICVErrorStatistics(Adapter, pRfd); - break; - - case RT_ENC_ALG_AESCCMP: - CountRxCCMPDecryptErrorsStatistics(Adapter, pRfd); - break; - - default: - break; - } - - Adapter->MgntInfo.uLastDecryptedErrorSeqNum = Frame_SeqNum(Mpdu); - - break; - } - else - CountRxDecryptSuccessStatistics(Adapter, pRfd); - - if(RT_SEC_STATUS_SUCCESS != secStatus) - break; - - //3 // Check IV Replay - // - // In fact, we should discard this packet because of IV replay. - // However, some packets may still be transmitted in disorder because the IV counter is filled by - // driver but not HW. So these packets are indicated to the upper layer. - // By Bruce, 2009-10-14. - // - - secStatus = SecRxCheckIV(Adapter, pRfd); - - switch(secStatus) - { - case RT_SEC_STATUS_MGNT_IV_REPLAY: - { - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "RT_SEC_STATUS_MGNT_IV_REPLAY:\n", Mpdu.Octet, Mpdu.Length); - } - break; - - default: - // Skip normal case no matter if it is data IV replay. - secStatus = RT_SEC_STATUS_SUCCESS; - break; - } - }while(FALSE); - - return secStatus; -} - -BOOLEAN -SecSWAESDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - u1Byte keyidx; - u4Byte micOK; - u1Byte IVOffset; // Added by Annie, 2005-12-23. - u1Byte IVKeyIdOffset; // Added by Annie, 2005-12-23. - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; // Add by CCW - PRT_WLAN_STA pEntry; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - OCTET_STRING frame; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - IVOffset = sMacHdrLng; - if( pRfd->Status.bIsQosData ) - { - IVOffset += sQoSCtlLng; - } - if( pRfd->Status.bContainHTC) - IVOffset += sHTCLng; - - // check address 4 - if( Frame_ValidAddr4(frame) ) - { - IVOffset += ETHERNET_ADDRESS_LENGTH; - } - - IVKeyIdOffset = IVOffset + 3; - - keyidx = SecGetRxKeyIdx( - Adapter, - pRfd->Buffer.VirtualAddress+4, - ((pRfd->Buffer.VirtualAddress[IVKeyIdOffset]>>6)&0x03) - ); - - if(pRfd->bTDLPacket) - { - pu1Byte pTA; - OCTET_STRING pduOS; - - FillOctetString(pduOS, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pTA = Frame_Addr2(pduOS); - - pEntry = AsocEntry_GetEntry(pMgntInfo, pTA); - if(pEntry == NULL) - return FALSE; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.AESKeyBuf[0] == 0) - return FALSE; - - micOK = SecDecodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pEntry->perSTAKeyInfo.AESKeyBuf, - pRfd->Buffer.VirtualAddress, - IVOffset, - pRfd->PacketLength - ); - } - else if( !Adapter->MgntInfo.bRSNAPSKMode && !ACTING_AS_AP(Adapter)) - { - if ( pMgntInfo->bInBIPMFPMode && pRfd->Status.bRxMFPPacket ) - { - //RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Decrypt Rx Mgnt Frame\n")); - micOK = SecMFPDecodeAESCCM_1W( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)Adapter->MgntInfo.SecurityInfo.AESKeyBuf[0], // 802.11 MFP used Pawise key to encrypt !! - pRfd->Buffer.VirtualAddress, - IVOffset, - pRfd->PacketLength - ); - if(!micOK) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("[WARNING] Decryption failed, keyIdx = %d\n", keyidx)); - } - } - else - { - micOK = SecDecodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)Adapter->MgntInfo.SecurityInfo.AESKeyBuf[keyidx], - pRfd->Buffer.VirtualAddress, - IVOffset, - pRfd->PacketLength - ); - } - - - } - else if( ACTING_AS_AP(Adapter) ) - { - pu1Byte pTA; - OCTET_STRING pduOS; - - FillOctetString(pduOS, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pTA = Frame_Addr2(pduOS); - - pEntry = AsocEntry_GetEntry(pMgntInfo, pTA); - if(pEntry == NULL) - return FALSE; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.AESKeyBuf[0] == 0) - return FALSE; - - micOK = SecDecodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pEntry->perSTAKeyInfo.AESKeyBuf, - pRfd->Buffer.VirtualAddress, - IVOffset, - pRfd->PacketLength - ); - } - else - { - OCTET_STRING pduOS; - pu1Byte pRA; - pu1Byte pTA; - u4Byte index; - - FillOctetString(pduOS, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pRA = Frame_Addr1(pduOS); - pTA = Frame_Addr2(pduOS); - - RT_TRACE(COMP_RSNA , DBG_LOUD , (" =====> RSNA IBSS Recive Encrypt Packet\n")); - keyidx = ((pRfd->Buffer.VirtualAddress[IVKeyIdOffset]>>6)&0x03); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, "RSNA RA : ", pRA); - RT_PRINT_ADDR(COMP_RSNA, DBG_LOUD, "RSNA TA : ", pTA); - RT_TRACE(COMP_RSNA , DBG_LOUD , (" KEY ID : %02x \n" ,keyidx )); - if(MacAddr_isMulticast(pRA)) - { - PPER_STA_DEFAULT_KEY_ENTRY pDefKey; // Add by CCW - - //Multicast packet - //Find out Default KEY Entry - pDefKey = pSec->PerStaDefKeyTable; - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++, pDefKey++) - { - if( pDefKey->Valid && (PlatformCompareMemory(pDefKey->MACAdrss , pTA, 6)==0)) - break; - } - if(index == MAX_NUM_PER_STA_KEY) - { // no key found! - RT_PRINT_ADDR(COMP_RSNA, DBG_WARNING, ("SecSWAESDecryption(): No group key found for pTA: \n"), pTA); - return FALSE; - } - - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, "Multicase Per-station key : ", pDefKey->DefKeyBuf[keyidx], 16); - RT_TRACE(COMP_RSNA , DBG_LOUD , (" KEY Valid : %x \n" ,pDefKey->Valid )); - micOK = SecDecodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pDefKey->DefKeyBuf[keyidx], - pRfd->Buffer.VirtualAddress, - IVOffset, - pRfd->PacketLength - ); - //micOK = TRUE; - } - else - { - PPER_STA_MPAKEY_ENTRY pMAPkey; // Add by CCW - - //unicast packet - //Find out MAPPING Key Entry. - pMAPkey = pSec->MAPKEYTable; - for( index = 0 ; index < MAX_NUM_PER_STA_KEY; index++, pMAPkey++) - { - if( pMAPkey->Valid && (PlatformCompareMemory(pMAPkey->MACAdrss , pTA, 6)==0)) - break; - } - - if(index != MAX_NUM_PER_STA_KEY) - { - RT_PRINT_DATA(COMP_RSNA, DBG_LOUD, "Unicase Key-Mapping key : ", pMAPkey->MapKeyBuf, 16); - - micOK = SecDecodeAESCCM( - &Adapter->MgntInfo.SecurityInfo, - (u4Byte *)pMAPkey->MapKeyBuf, - pRfd->Buffer.VirtualAddress, - IVOffset, - pRfd->PacketLength - ); - } - else - { // no key found! - RT_PRINT_ADDR(COMP_RSNA, DBG_WARNING, ("SecSWAESDecryption(): No pairwise key found for pTA: \n"), pTA); - return FALSE; - } - - - } - RT_TRACE(COMP_RSNA, DBG_LOUD, (" micOK : %x\n", micOK)); - } - - return micOK?TRUE:FALSE; -} - - -BOOLEAN -SecSWTKIPDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - u1Byte keyidx; - u1Byte SrcAddr[6]; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - u2Byte u2IV16 = (u2Byte)((pSec->TxIV-1)& UINT64_C(0x000000000000ffff)); - u4Byte u4IV32 = (u4Byte)((((pSec->TxIV-1)& UINT64_C(0x0000ffffffff0000)) >> 16)& UINT64_C(0x00000000ffffffff)); - u1Byte key[16]; - pu1Byte data; - u4Byte datalen; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_WLAN_STA pEntry = NULL;// = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - u1Byte IVOffset; // Added by Annie, 2005-12-23. - u1Byte IVKeyIdOffset; - pu1Byte pHeader = pRfd->Buffer.VirtualAddress; - - // Get offset. Annie, 2005-12-23. - if( pRfd->Status.bIsQosData ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - if(pRfd->Status.bContainHTC) - IVOffset += sHTCLng; - IVKeyIdOffset = IVOffset + KEYID_POS_IN_IV; - - // Get Key Index. - keyidx = SecGetRxKeyIdx(Adapter, pHeader+4, ((pHeader[IVKeyIdOffset]>>6)&0x03) ); - - PlatformMoveMemory(SrcAddr, pHeader+10, ETHERNET_ADDRESS_LENGTH); - - if(ACTING_AS_AP(Adapter)) - { - if(MacAddr_isMulticast(SrcAddr)) - { - // [AnnieNote] Current GTK is 12345678...12345678, so it's OK. - // It's better to modify it by GTK length if we use PRF-X to generate GTK later. 2005-12-23. - // - - //Check if set GTK was completed - if(Adapter->MgntInfo.globalKeyInfo.GTK[0] == 0) - { - //RT_TRACE( COMP_AP, DBG_LOUD, ("SecSWTKIPDecryption(): GTK[0] == 0\n") ); - return FALSE; - } - } - else - { - //Check if STA within associated lsit table - pEntry = AsocEntry_GetEntry(pMgntInfo, SrcAddr); - if(pEntry == NULL) - return FALSE; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.TempEncKey == NULL) - return FALSE; - } - } - else if(pRfd->bTDLPacket) - { - //Check if STA within associated lsit table - pEntry = AsocEntry_GetEntry(pMgntInfo, SrcAddr); - if(pEntry == NULL) - return FALSE; - - //Check if set PTK was completed - if(pEntry->perSTAKeyInfo.TempEncKey == NULL) - return FALSE; - } - - - // Get u2IV16 and u4IV32. - u2IV16 = ((u2Byte)(*(pHeader+IVOffset + 0)) << 8)+ \ - ((u2Byte)(*(pHeader+IVOffset + 2)) << 0); - - u4IV32 = ((u4Byte) (*(pHeader+IVOffset + 4)) << 0)+ \ - ((u4Byte) (*(pHeader+IVOffset + 5)) << 8)+ \ - ((u4Byte) (*(pHeader+IVOffset + 6)) << 16)+ \ - ((u4Byte) (*(pHeader+IVOffset + 7)) << 24); - -#if 1 //Added by Jay 0712 for security IV - if( ACTING_AS_AP(Adapter) ) // Added by Annie. We should not enter here when STA mode. 2005-07-21. - { - u8Byte tempIV = 0; - - tempIV |= ((u8Byte)u4IV32) << 16; - tempIV |= (u8Byte)u2IV16; - - // Prefast warning C6011: Dereferencing NULL pointer 'pEntry' - if(pEntry != NULL && - (tempIV - pEntry->perSTAKeyInfo.RxIV) >= 1000000) - { - //RT_TRACE(COMP_SEC, DBG_LOUD, ("Error: tempIV = 0x%16"i64fmt"x\n", tempIV)); - //RT_TRACE(COMP_SEC, DBG_LOUD, ("Error: pEntry->perSTAKeyInfo.RxIV = 0x%16"i64fmt"x\n", pEntry->perSTAKeyInfo.RxIV)); - - //Process IV Error... - } - else - { - // Prefast warning C6011: Dereferencing NULL pointer 'pEntry'. - if (pEntry != NULL) - { - if (tempIV - pEntry->perSTAKeyInfo.RxIV != 1) - { - //RT_TRACE(COMP_SEC, DBG_LOUD, ("minor issue: tempIV = 0x%16"i64fmt"x\n", tempIV)); - //RT_TRACE(COMP_SEC, DBG_LOUD, ("minor issue: pEntry->perSTAKeyInfo.RxIV = 0x%16"i64fmt"x\n", pEntry->perSTAKeyInfo.RxIV)); - } - - pEntry->perSTAKeyInfo.RxIV = tempIV; - pEntry->perSTAKeyInfo.RxIV &= UINT64_C(0x0000ffffffffffff); - } - } - } - else if(pRfd->bTDLPacket) - { - u8Byte tempIV = 0; - - tempIV |= ((u8Byte)u4IV32) << 16; - tempIV |= (u8Byte)u2IV16; - - // Prefast warning C6011: Dereferencing NULL pointer 'pEntry'. - if (pEntry != NULL) - { - if (tempIV - pEntry->perSTAKeyInfo.RxIV >= 1000000) - { - //RT_TRACE(COMP_SEC, DBG_LOUD, ("Error: tempIV = 0x%16"i64fmt"x\n", tempIV)); - //RT_TRACE(COMP_SEC, DBG_LOUD, ("Error: pEntry->perSTAKeyInfo.RxIV = 0x%16"i64fmt"x\n", pEntry->perSTAKeyInfo.RxIV)); - - //Process IV Error... - } - else - { - if (tempIV - pEntry->perSTAKeyInfo.RxIV != 1) - { - //RT_TRACE(COMP_SEC, DBG_LOUD, ("minor issue: tempIV = 0x%16"i64fmt"x\n", tempIV)); - //RT_TRACE(COMP_SEC, DBG_LOUD, ("minor issue: pEntry->perSTAKeyInfo.RxIV = 0x%16"i64fmt"x\n", pEntry->perSTAKeyInfo.RxIV)); - } - - pEntry->perSTAKeyInfo.RxIV = tempIV; - pEntry->perSTAKeyInfo.RxIV &= UINT64_C(0x0000ffffffffffff); - } - } - } -#endif - - - if(ACTING_AS_AP(Adapter)) - { // AP Mode. - if(MacAddr_isMulticast(SrcAddr)) - { - TKIPGenerateKey(key, u4IV32, u2IV16, SrcAddr, &Adapter->MgntInfo.globalKeyInfo.GTK[0]); - } - else - { - if(pEntry != NULL) - TKIPGenerateKey(key, u4IV32, u2IV16, SrcAddr, pEntry->perSTAKeyInfo.TempEncKey); - } - } - else if(pRfd->bTDLPacket) - { - // Prefast warning C6011: Dereferencing NULL pointer 'pEntry' - if(pEntry != NULL) - TKIPGenerateKey(key, u4IV32, u2IV16, SrcAddr, pEntry->perSTAKeyInfo.TempEncKey); - } - else - { // STA Mode. - TKIPGenerateKey(key,u4IV32,u2IV16,SrcAddr,pSec->KeyBuf[keyidx]); - } - - - data = pHeader + IVOffset + pSec->EncryptionHeadOverhead; - datalen = pRfd->PacketLength - (IVOffset + pSec->EncryptionHeadOverhead); - //PRINT_DATA((const void*)"Decode: Cichpertext==>", data, datalen); - if(!DecodeWEP(key,16,data,datalen,data)) - { -// PRINT_DATA((const void*)"Decode: plaintext==>", data, datalen); - RT_TRACE(COMP_SEC, DBG_LOUD,("Rx:TKIP Error\n")); - - if( ACTING_AS_AP(Adapter) ) - { - if (pEntry != NULL) - { - pEntry->perSTAKeyInfo.WEPErrorCnt++; - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("Rx:TKIP Error: %d\n", pEntry->perSTAKeyInfo.WEPErrorCnt)); - } - } - else if(pRfd->bTDLPacket) - { - if (pEntry != NULL) - { - pEntry->perSTAKeyInfo.WEPErrorCnt++; - RT_TRACE(COMP_AUTHENTICATOR, DBG_LOUD, ("Rx:TKIP Error: %d\n", pEntry->perSTAKeyInfo.WEPErrorCnt)); - } - } - - return FALSE; - } - RT_TRACE(COMP_SEC, DBG_LOUD,("Rx:TKIP OK\n")); - return TRUE; - -} -BOOLEAN -SecSWWEPDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - u1Byte keyidx; - u1Byte key[16]; - s4Byte keysize; - pu1Byte data; - u4Byte datalen; - u1Byte IVOffset; // Added by Annie, 2005-12-23. - pu1Byte pHeader = pRfd->Buffer.VirtualAddress; - - //Fix SW WEP descryption multicase fail. 2009,12,08 - - u2Byte EncryptionMPDUHeadOverhead, EncryptionMPDUTailOverhead; - u2Byte EncryptionMSDUHeadOverhead, EncryptionMSDUTailOverhead; - - pu1Byte DestAddr; - OCTET_STRING Mpdu; - BOOLEAN bMulticastDest; - RT_ENC_ALG TempALg; - - FillOctetString(Mpdu, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - DestAddr = Frame_pDaddr(Mpdu); - bMulticastDest = MacAddr_isMulticast(DestAddr); - - if( pSec->SecLvl == RT_SEC_LVL_NONE ) - bMulticastDest = FALSE; - - SecGetEncryptionOverhead( - Adapter, - &EncryptionMPDUHeadOverhead, - &EncryptionMPDUTailOverhead, - &EncryptionMSDUHeadOverhead, - &EncryptionMSDUTailOverhead, - TRUE, - bMulticastDest - ); - - if( !bMulticastDest ) - TempALg = pSec->PairwiseEncAlgorithm; - else - TempALg = pSec->GroupEncAlgorithm; - - // Get offset. Annie, 2005-12-23. - if( pRfd->Status.bIsQosData ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - if(pRfd->Status.bContainHTC) - IVOffset += sHTCLng; - - - // Get IV. (Because 802.11 and key both are little endian) - PlatformMoveMemory(key, pHeader+IVOffset , 3); - - // Prepare Key. - keyidx = GET_WEP_IV_KEYID(pHeader+IVOffset); - keysize = (TempALg==RT_ENC_ALG_WEP104) ? 16 : 8; - PlatformMoveMemory(key+3, pSec->KeyBuf[keyidx], keysize-3); - - // Set up input data. - data = pHeader + IVOffset + 4;//pSec->EncryptionHeadOverhead; - datalen = pRfd->PacketLength - (IVOffset +4);// pSec->EncryptionHeadOverhead); - - //RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "Decode: Ciphertext==>", data, datalen); - if( !DecodeWEP( key, keysize, data, datalen, data ) ) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecSWWEPDecryption(): WEP software decrypted Fail!!! (datalen=%d)\n", datalen) ); - RT_PRINT_DATA( COMP_SEC, DBG_TRACE, "WEP decoded packet", data, datalen ); - return FALSE; - } - - return TRUE; -} - -// -// Software decryption for CKIP. -// Ported from CKIP code, Annie, 2006-08-11. [AnnieTODO] -// -BOOLEAN -SecSWCKIPDecryption( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - pu1Byte pHeader = pRfd->Buffer.VirtualAddress; - u1Byte keyidx; - u1Byte IVOffset; - int DEcok = 0; - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - - // Get offset. Annie, 2005-12-23. - if( pRfd->Status.bIsQosData ) - { - IVOffset = sMacHdrLng + sQoSCtlLng; - } - else - { - IVOffset = sMacHdrLng; - } - if(pRfd->Status.bContainHTC) - IVOffset += sHTCLng; - - //Get IV - keyidx= GET_WEP_IV_KEYID( pHeader+IVOffset); - - DEcok = DecodeCKIP( Adapter , (UCHAR *)pHeader , pRfd->PacketLength , pSec->pCkipPara->CKIPKeyBuf[keyidx] , keyidx ); - RT_TRACE( COMP_CKIP, DBG_LOUD, ("SecSWCKIPDecryption(): DEcok=0x%X\n", DEcok) ); - - return ( (DEcok==1)? TRUE : FALSE ); -} - - -// -// Desription: -// Used for deny link to MIC failure AP in 60 seconds. -// 2004.10.06, by rcnjo. -// -BOOLEAN -SecInsertDenyBssidList ( - PRT_SECURITY_T pSec, - u1Byte BssidToDeny[6], - u8Byte DenyStartTime -) -{ - PRT_DENY_BSSID pBssidToDeny = NULL; - u8Byte EarlyestStartTime = PlatformGetCurrentTime(); - int EarlyestIdx = 0; - int i; - - for(i = 0; i < MAX_DENY_BSSID_LIST_CNT; i++) - { - if(pSec->DenyBssidList[i].bUsed) - { - if(pSec->DenyBssidList[i].StartTime < EarlyestStartTime) - { - EarlyestStartTime = pSec->DenyBssidList[i].StartTime; - EarlyestIdx = i; - } - } - else - { - pBssidToDeny = pSec->DenyBssidList + i; - break; - } - } - - if(pBssidToDeny == NULL) - { - // Use the oldest one. - pBssidToDeny = pSec->DenyBssidList + EarlyestIdx; - } - - PlatformMoveMemory(pBssidToDeny->Bssid, BssidToDeny, 6); - pBssidToDeny->StartTime = DenyStartTime; - pBssidToDeny->bUsed = TRUE; - - return TRUE; -} - -// -// Desription: -// Used for deny link to MIC failure AP in 60 seconds. -// 2004.10.06, by rcnjo. -// -BOOLEAN -SecIsInDenyBssidList ( - PRT_SECURITY_T pSec, - u1Byte BssidToCheck[6] -) -{ - BOOLEAN bToDeny = FALSE; - PRT_DENY_BSSID pBssidToDeny; - u8Byte CurrTime = PlatformGetCurrentTime(); - int i; - - for(i = 0; i < MAX_DENY_BSSID_LIST_CNT; i++) - { - pBssidToDeny = pSec->DenyBssidList + i; - if(pBssidToDeny->bUsed) - { - // Check StartTime. - if((CurrTime - pBssidToDeny->StartTime) < MIC_CHECK_TIME) // Diff < 60 seconds. - { - // Check BSSID. - if( PlatformCompareMemory(pBssidToDeny->Bssid, BssidToCheck, 6) == 0 ) - { // The same BSSID. - bToDeny = TRUE; - break; - } - } - else - { - // Clear the entry if it is overdue. - pBssidToDeny->bUsed = FALSE; - continue; - } - } - } - - return bToDeny; -} - -// -// Desription: -// Fill up WEP bit and IV of each fragment in the TCB if necessary. -// Output: -// 1. Return TRUE if this packet has to be encrypted. -// 2. Set up pTcb->EncInfo. -// 2005.06.27, by rcnjo. -// -BOOLEAN -SecFillHeader( - PADAPTER Adapter, - PRT_TCB pTcb) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - int i; - int FragIndex = 0; - int FragBufferIndex = 0; - BOOLEAN bEncrypt; - PSTA_ENC_INFO_T pEncInfo = &pTcb->EncInfo; - - bEncrypt = MgntGetEncryptionInfo( Adapter, pTcb, pEncInfo,TRUE); - - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_NOTSETENCMACHEADER, 0)) - return FALSE; - - if(!bEncrypt) - { - RT_TRACE( COMP_CKIP, DBG_TRACE, ("SecFillHeader(): !bEncrypt => return FALSE!\n")); - return FALSE; - } - - for(i = 0;i < pTcb->BufferCount; i++) - { - // Fill WEP bit, IV. - if(FragBufferIndex == 0) - { - pu1Byte pFrame; - - pFrame = (pu1Byte)&pTcb->BufferList[i].VirtualAddress[Adapter->TXPacketShiftBytes]; - - // WEP bit. - SET_80211_HDR_WEP(pFrame, 1); - - // IV. - SecHeaderFillIV(Adapter, pFrame); - } - - FragBufferIndex++; - if(FragBufferIndex == pTcb->FragBufCount[FragIndex]) - { - FragIndex++; - FragBufferIndex = 0; - } - } - - RT_TRACE( COMP_CKIP, DBG_TRACE, ("SecFillHeader(): retrun TRUE\n")); - return TRUE; -} - - - -// -// Return: Is the content of pPduOS an EAPOL frame or not. (88-8e) -// Added by Annie, 2005-12-25. -// -BOOLEAN -SecIsEAPOLPacket( - IN PADAPTER Adapter, - IN POCTET_STRING pPduOS - ) -{ - BOOLEAN IsEAPOLPkt = FALSE; - u1Byte Offset_TypeEAPOL = sMacHdrLng + LLC_HEADER_SIZE; // 30 - - if( IsQoSDataFrame(pPduOS->Octet) ) - { - Offset_TypeEAPOL += sQoSCtlLng; // +2 - } - - if( Frame_WEP(*pPduOS)) - { - Offset_TypeEAPOL += Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead; // 4 or 8 - } - - // Length Check - if( pPduOS->Length < (Offset_TypeEAPOL+1) ) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("SecIsEAPOLPacket(): invalid length(%d)\n", pPduOS->Length ) ); - return FALSE; - } - - // 888e? - if( (pPduOS->Octet[Offset_TypeEAPOL]==0x88) && (pPduOS->Octet[Offset_TypeEAPOL+1]==0x8e) ) - { - IsEAPOLPkt = TRUE; - } - - //RT_TRACE( COMP_SEC, DBG_LOUD, ("SecIsEAPOLPacket(): Recvd EAPOL frame. IsEAPOLPkt(%d)\n", IsEAPOLPkt )); - return IsEAPOLPkt; -} - -// -// Return: Is the content of pPduOS an EAPOL frame or not. (88-8e) -// Added by Annie, 2005-12-25. -// -BOOLEAN -SecIsEAPOLKEYPacket( - IN PADAPTER Adapter, - IN POCTET_STRING pPduOS - ) -{ - BOOLEAN IsEAPOLKeyPkt = FALSE; - u1Byte Offset_TypeEAPOL = sMacHdrLng + LLC_HEADER_SIZE; // 30 - - if( IsQoSDataFrame(pPduOS->Octet) ) - { - Offset_TypeEAPOL += sQoSCtlLng; // +2 - } - - if( Frame_WEP(*pPduOS)) - { - Offset_TypeEAPOL += Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead; // 4 or 8 - } - - // Length Check - if( pPduOS->Length < (Offset_TypeEAPOL+1) ) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("SecIsEAPOLKEYPacket(): invalid length(%d)\n", pPduOS->Length ) ); - return FALSE; - } - - // 888e && Type is Key - if( (pPduOS->Octet[Offset_TypeEAPOL]==0x88) && (pPduOS->Octet[Offset_TypeEAPOL+1]==0x8e) - && (pPduOS->Octet[Offset_TypeEAPOL+3]==0x03) ) - { - IsEAPOLKeyPkt = TRUE; - } - - RT_TRACE( COMP_SEC, DBG_TRACE, ("SecIsEAPOLKEYPacket(): Recvd EAPOL frame. IsEAPOLPkt(%d)\n", IsEAPOLKeyPkt )); - //Here is for Verify 2008/03/20 - //RT_TRACE( COMP_SEC, DBG_LOUD, ("==m==>SecIsEAPOLKEYPacket(): Recvd EAPOL frame. IsEAPOLPkt(%d)<==m==\n", IsEAPOLKeyPkt )); - return IsEAPOLKeyPkt; -} - - -// -// Ported from 8185: WMacSetPMKID(). -// Added by Annie, 2006-05-07. -// -VOID -SecSetPMKID( - IN PADAPTER Adapter, - IN PN5_802_11_PMKID pPMKid - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PN5_BSSID_INFO pBssidInfo = (PN5_BSSID_INFO)(pPMKid->BSSIDInfo); - u4Byte ulIndex, i, j; - BOOLEAN blInserted = FALSE; - u1Byte NullMacadress[6] = {0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 }; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecSetPMKID(): Number Of PMKID on list = %d\n", pPMKid->BSSIDInfoCount) ); - - - // - // Clear all entry , when PMK-count = 1 and MAC address all zero !! - // - if( (pPMKid->BSSIDInfoCount == 1 )&& - (PlatformCompareMemory(pBssidInfo->BSSID , NullMacadress , 6 )==0)) - { - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed = FALSE; - PlatformZeroMemory(pSecInfo->PMKIDList[ulIndex].Bssid, sizeof(pSecInfo->PMKIDList[ulIndex].Bssid)); - pSecInfo->PMKIDList[ulIndex].Ssid.Length = 0; - - } - return; - } - - // - // Clear the entry with different SSID from the AP we are associating with. - // - for( ulIndex=0; ulIndexSsid.Octet, pSecInfo->PMKIDList[ulIndex].SsidBuf, pMgntInfo->Ssid.Length) || - (pMgntInfo->Ssid.Length != pSecInfo->PMKIDList[ulIndex].Ssid.Length) ) - { // SSID is not matched => Clear the entry! - pSecInfo->PMKIDList[ulIndex].bUsed = FALSE; - PlatformZeroMemory(pSecInfo->PMKIDList[ulIndex].Bssid, sizeof(pSecInfo->PMKIDList[ulIndex].Bssid)); - pSecInfo->PMKIDList[ulIndex].Ssid.Length = 0; - } - } - - - // - // Insert or cover with new PMKID. - // - for( i=0; iBSSIDInfoCount; i++ ) - { - if( i >= NUM_PMKID_CACHE ) - { - RT_TRACE( COMP_SEC, DBG_WARNING, ("SecSetPMKID(): BSSIDInfoCount is more than NUM_PMKID_CACHE!%d\n", pPMKid->BSSIDInfoCount) ); - break; - } - - blInserted = FALSE; - for(j=0 ; jPMKIDList[j].bUsed && eqMacAddr(pSecInfo->PMKIDList[j].Bssid, pBssidInfo->BSSID) ) - { // BSSID is matched, the same AP => rewrite with new PMKID. - CopyMem(pSecInfo->PMKIDList[j].PMKID, pBssidInfo->PMKID, sizeof(pBssidInfo->PMKID)); - blInserted = TRUE; - break; - } - } - - if(blInserted) - { - pBssidInfo ++; // pointer to next BSSID_INFO. - continue; - } - else - { - // Find a new entry - for( j=0 ; jPMKIDList[j].bUsed == FALSE) - { - pSecInfo->PMKIDList[j].bUsed = TRUE; - CopyMem(pSecInfo->PMKIDList[j].Bssid, pBssidInfo->BSSID, 6); - CopyMem(pSecInfo->PMKIDList[j].PMKID, pBssidInfo->PMKID, PMKID_LEN); - CopySsid(pSecInfo->PMKIDList[j].SsidBuf, pSecInfo->PMKIDList[j].Ssid.Length, pMgntInfo->SsidBuf, pMgntInfo->Ssid.Length); - - break; - } - } - } - - pBssidInfo ++; // pointer to next BSSID_INFO. - } - - - // - // For debug purpose: Check current PMKID list. - // - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("[PMKID %d]\n", ulIndex ) ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecSetPMKID(): PMKIDList[%d].bUsed is TRUE\n", ulIndex) ); - RT_PRINT_STR( COMP_SEC, DBG_LOUD, "SSID", pSecInfo->PMKIDList[ulIndex].Ssid.Octet, pSecInfo->PMKIDList[ulIndex].Ssid.Length); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "BSSID", pSecInfo->PMKIDList[ulIndex].Bssid, 6); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "PMKID", pSecInfo->PMKIDList[ulIndex].PMKID, sizeof(pBssidInfo->PMKID)); - } - } -} - - - -// -// Ported from 8185: IsInPreAuthKeyList(). (Renamed from SecIsInPreAuthKeyList(), 2006-10-13.) -// Added by Annie, 2006-05-07. -// -// Search by BSSID, -// Return Value: -// -1 :if there is no pre-auth key in the table -// >=0 :if there is pre-auth key, and return the entry id -// -int -SecIsInPMKIDList( - IN PADAPTER Adapter, - IN pu1Byte bssid - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - int i; - - for( i=0; iPMKIDList[i].bUsed && eqMacAddr(pSecInfo->PMKIDList[i].Bssid, bssid) ) - { - break; - } - else - { - continue; - } - } - - if( i == NUM_PMKID_CACHE ) - { // Could not find. - i = -1; - } - else - { // There is one Pre-Authentication Key for the specific BSSID. - } - - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecIsInPMKIDList(): i=%d\n", i) ); - return i; -} - - -// -// Ported from 8185: WMacCatPMKID(). -// Added by Annie, 2006-05-07. -// -VOID -SecCatPMKID( - IN PADAPTER Adapter, - IN pu1Byte CurAPbssid, - IN PRT_WLAN_BSS pBssDesc - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - pu1Byte pIECurrent = NULL; - int iEntry = 0; - BOOLEAN bCCX8021xenable = FALSE; - BOOLEAN bAPSuportCCKM = FALSE; - - u1Byte BIPOui[4] = {0x00, 0x0f , 0xac , 0x06}; - - // Note: PMKID can only be included in (Re)Association. - if( ACTING_AS_AP(Adapter) || pMgntInfo->mIbss ) - { - return; - } - - // Note: PMKID fileds are defined in WPA2. - if( pSecInfo->SecLvl < RT_SEC_LVL_WPA2 ) - return; - - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0) && pSecInfo->SecLvl == RT_SEC_LVL_WAPI) - return; - - // - // CCKM mode return. - // Note: - // Putting PMKID and CCKM together in the reassociation request must confuse the AP and - // make it no response after reassociation request packet. - // - CCX_QueryCCKMSupport(Adapter, &bCCX8021xenable, &bAPSuportCCKM); - - if( bCCX8021xenable && bAPSuportCCKM) - { - return; - } - - // - // 1. Search PMKID list (pSecInfo->PMKIDList[i]) by BSSID. - // - iEntry = SecIsInPMKIDList( Adapter, CurAPbssid ); - if( iEntry < 0 ) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecCatPMKID(): AP is not in current PMKID List => do nothing.\n") ); - - // Check Need to add MFP IE or not !! - if( pBssDesc->bMFPC && pMgntInfo->bInBIPMFPMode) - { - pIECurrent = pSecInfo->RSNIE.Octet + pSecInfo->RSNIE.Length - 2; // Point to RSN Capablite - SET_RSN_CAP_MFP_CAPABLE(pIECurrent , 1 ); - - if( pBssDesc->bMFPR ) - { - // Removed by Bruce, 2014-12-08. - // From MSDN: - // Management Frame Protection Required (MFPR) enforcement on Windows 8 is not supported. Hence miniport drivers should never set - // this bit in the RSN capabilities of RSN IE during an association request. For policy, the access point may advertise MFPR which will - // allow MFP-capable STA to associate. Access points not supporting MFP capability will fail association. If MFPR is set by an access point - // and STA is not MFP capable, Windows 8 will treat the network as mismatched in capability and not send an association request to the - // miniport. http://msdn.microsoft.com/en-us/library/windows/hardware/ff547688(v=vs.85).aspx - // - // SET_RSN_IE_CAP_MFP_REQUIRED(pIECurrent, 1); - } - pIECurrent += 2; - - if( pBssDesc->bMFPBIP ) - { - // Add PMKID counter = 0x00 0x00 - PlatformZeroMemory( pIECurrent , 2 ); - pIECurrent += 2; - - // Add BIP oui - PlatformMoveMemory( pIECurrent ,BIPOui , 4 ); - - pSecInfo->RSNIE.Length += 6; - } - } - - return; - } - - // - // 2. Cat PMKID to RSNIE. - // - pIECurrent = pSecInfo->RSNIE.Octet + pSecInfo->RSNIE.Length; - ((PDOT11_RSN_IE_PMKID)pIECurrent)->SuiteCount = NUM_CAT_PMKID; // NUM_CAT_PMKID=1 - CopyMem( ((PDOT11_RSN_IE_PMKID)pIECurrent)->PMKList, - pSecInfo->PMKIDList[iEntry].PMKID, - sizeof(pSecInfo->PMKIDList[iEntry].PMKID) - ); - pSecInfo->RSNIE.Length += ( sizeof( ((PDOT11_RSN_IE_PMKID)pIECurrent)->SuiteCount ) + // 2 bytes for PMKID count. - PMKID_LEN*NUM_CAT_PMKID ); // 16*s bytes for PMKID List. - - // - // Note : 802.11w sample RSN PMK and BIP support at same time !! - // - - // Check Need to add MFP IE or not !! - if( pBssDesc->bMFPC && pMgntInfo->bInBIPMFPMode ) - { - pIECurrent = pIECurrent - 2; // Point to RSN Capablite - SET_RSN_IE_CAP_MFP_CAPABLE(pIECurrent , 1 ); - - if( pBssDesc->bMFPR ) - { - SET_RSN_CAP_MFP_REQUIRED(pIECurrent, 1); - } - - pIECurrent = pSecInfo->RSNIE.Octet + pSecInfo->RSNIE.Length; - - if( pBssDesc->bMFPBIP ) - { - // Add BIP oui - PlatformMoveMemory( pIECurrent ,BIPOui , 4 ); - - pSecInfo->RSNIE.Length += 4; - } - } - - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "SecCatPMKID(): New RSNIE", pSecInfo->RSNIE.Octet, pSecInfo->RSNIE.Length ); -} - - -// -// If there is no key when security enabled, drop data frames. -// Added by Annie, 2006-08-15. -// -BOOLEAN -SecDropForKeyAbsent( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - BOOLEAN bDrop = FALSE; - pu1Byte pRa = NULL; - BOOLEAN bFindMatchPeer = FALSE; - - RT_TRACE( COMP_SEC, DBG_TRACE, ("==> SecDropForKeyAbsent()\n") ); - - GetTcbDestaddr(Adapter, pTcb, &pRa); - - // - if(ACTING_AS_AP(Adapter)) - { - return bDrop; - } - - if ( pSecInfo->SecLvl == RT_SEC_LVL_WAPI) - { - if(RT_STATUS_SUCCESS == WAPI_SecFuncHandler(WAPI_DROPFORSECKEYABSENT,Adapter, (PVOID)pRa, WAPI_END)) - bDrop = TRUE; - } - else - { - if(pMgntInfo->SafeModeEnabled || pMgntInfo->mIbss) - { - return bDrop; - } - - if( pTcb->EncInfo.SecProtInfo == RT_SEC_NORMAL_DATA ) - { - // Data frame, not EAPOL packet. - if(RT_STATUS_SUCCESS == WAPI_SecFuncHandler(WAPI_DROPFORSECKEYABSENT,Adapter, (PVOID)pRa, WAPI_END)) - bDrop = TRUE; - - if( pSecInfo->SecLvl > RT_SEC_LVL_NONE ) - { // WPA or WPA2. - if( MacAddr_isMulticast(pRa) ) - { // Need group key. - if(pSecInfo->KeyLen[pSecInfo->GroupTransmitKeyIdx]==0) - { - bDrop = TRUE; - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecDropForKeyAbsent(): Tx Data Without Group Key %d\n", pSecInfo->GroupTransmitKeyIdx ) ); - } - } - else - { // Need pairwise key. - if(pSecInfo->KeyLen[PAIRWISE_KEYIDX]==0) - { - bDrop = TRUE; - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecDropForKeyAbsent(): Tx Data Without Pairwise Key!\n") ); - } - } - } - else - { // Check WEP - if( pSecInfo->EncryptionStatus==RT802_11Encryption1Enabled ) // Is this OK?? Annie, 2006-05-04. - { - if(pSecInfo->KeyLen[pSecInfo->DefaultTransmitKeyIdx]==0) - { - bDrop = TRUE; - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecDropForKeyAbsent(): Tx Data Without WEP Key %d\n", pSecInfo->DefaultTransmitKeyIdx ) ); - } - } - } - } - } - if(bDrop) - { - RT_TRACE( COMP_SEC, DBG_WARNING, ("SecDropForKeyAbsent(): Not to send data frame since there is no key!\n") ); - RT_PRINT_DATA(COMP_SEC, DBG_TRACE, "Discarded Packet", pTcb->BufferList[0].VirtualAddress, pTcb->BufferList[0].Length); - } - RT_TRACE( COMP_SEC, DBG_TRACE, ("<== SecDropForKeyAbsent(), bDrop=%d\n", bDrop) ); - - return bDrop; -} - -VOID -SecSetSwEncryptionDecryption( - PADAPTER Adapter, - BOOLEAN bSWTxEncrypt, - BOOLEAN bSWRxDecrypt - ) -{ - PRT_SECURITY_T pSec = &Adapter->MgntInfo.SecurityInfo; - - // Tx Sw Encryption. - if ( (pSec->RegSWTxEncryptFlag == EncryptionDecryptionMechanism_Auto) || - (pSec->RegSWTxEncryptFlag >= EncryptionDecryptionMechanism_Undefined) ) - { - pSec->SWTxEncryptFlag = bSWTxEncrypt; - } - else if ( pSec->RegSWTxEncryptFlag == EncryptionDecryptionMechanism_Hw ) - { - pSec->SWTxEncryptFlag = FALSE; - } - else if ( pSec->RegSWTxEncryptFlag == EncryptionDecryptionMechanism_Sw ) - { - pSec->SWTxEncryptFlag = TRUE; - } - - // If the encryption mechanism differs between driver determined and registry determined. - // Print an warning message. - if (pSec->RegSWTxEncryptFlag != bSWTxEncrypt) - { - RT_TRACE(COMP_SEC, DBG_WARNING, - ("SecSetSwEncryptionDecryption(): Warning! User and driver determined encryption mechanism mismatch.\n")); - RT_TRACE(COMP_SEC, DBG_WARNING, - ("SecSetSwEncryptionDecryption(): RegSWTxEncryptFlag = %d, bSWTxEncrypt = %d\n", - pSec->RegSWTxEncryptFlag, bSWTxEncrypt)); - } - - // Rx Sw Decryption. - if ( (pSec->RegSWRxDecryptFlag == EncryptionDecryptionMechanism_Auto) || - (pSec->RegSWRxDecryptFlag == EncryptionDecryptionMechanism_Undefined) ) - { - pSec->SWRxDecryptFlag = bSWRxDecrypt; - } - else if ( pSec->RegSWRxDecryptFlag == EncryptionDecryptionMechanism_Hw ) - { - pSec->SWRxDecryptFlag = FALSE; - } - else if ( pSec->RegSWRxDecryptFlag == EncryptionDecryptionMechanism_Sw) - { - pSec->SWRxDecryptFlag = TRUE; - } - - // If the decryption mechanism differs between driver determined and registry determined. - // Print an warning message. - if (pSec->RegSWRxDecryptFlag != bSWRxDecrypt) - { - RT_TRACE(COMP_SEC, DBG_WARNING, - ("SecSetSwEncryptionDecryption(): Warning! User and driver determined decryption mechanism mismatch.\n")); - RT_TRACE(COMP_SEC, DBG_WARNING, - ("SecSetSwEncryptionDecryption(): RegSWRxDecryptFlag = %d, bSWRxDecrypt = %d\n", - pSec->RegSWRxDecryptFlag, bSWRxDecrypt)); - } - -} - -// -// Description: -// Determine if the specifed key is available for RA -// -BOOLEAN -SecIsTxKeyInstalled( - IN PADAPTER pAdapter, - IN pu1Byte pRA - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - - if (ACTING_AS_AP(pAdapter) && MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_LINUX ) - {// AP mode - if(!MacAddr_isMulticast(pRA)) - { - PRT_WLAN_STA pEntry; - pEntry = AsocEntry_GetEntry(pMgntInfo,pRA); - if(pEntry == NULL) - return FALSE; - else if(pEntry->keyindex != 0) - return TRUE; - else - return FALSE; - } - else - { - return FALSE; - } - } - - if( !pMgntInfo->bRSNAPSKMode ) - { - if( pSecInfo->KeyLen[0] == 0 && - pSecInfo->KeyLen[1] == 0 && - pSecInfo->KeyLen[2] == 0 && - pSecInfo->KeyLen[3] == 0 && - pSecInfo->KeyLen[4] == 0 - && 0 == WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_ISCAMUSED, 0) - ) - { - return FALSE; - } - else - { - // Check Pawise Key only !! - if(!ACTING_AS_AP(pAdapter) && pSecInfo->SecLvl > RT_SEC_LVL_NONE ) - { - // - // Check Tx key - // Note: - // This is special case for WPA-2 (RSN). - // When the CCX service (supplicant) receives the ANoce packet in the 1st packet of 4-way, - // the supplicant set the Group Key to driver and thus the driver then sends the SNonce packet "encrypted" - // to AP by an empty PTK just because the driver determine that the Keys has been installed - // from the procedure SecIsTxKeyInstalled(). - // We find this behavior of CCX service in the CCX SDK version 1.1.13. - // Advised from CCW, and edited by Bruce, 2009-09-04. - // - if( pSecInfo->KeyLen[0] == 0 - && 0 == WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_ISCAMUSED, 0) - ) - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("SecIsTxKeyInstalled(): pSecInfo->KeyLen[0] == 0, Tx Key is not installed!\n")); - return FALSE; - } - } - - return TRUE; - } - } - else - { // RSNA IBSS mode. - u4Byte index; - - if(!MacAddr_isMulticast(pRA)) - { - PPER_STA_MPAKEY_ENTRY pMapKey; - - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++) - { - pMapKey = &(pSecInfo->MAPKEYTable[index]); - - if( pMapKey->Valid && eqMacAddr(pMapKey->MACAdrss , pRA) ) - { - return TRUE; - } - } - - return FALSE; - } - else - { - PPER_STA_DEFAULT_KEY_ENTRY pDefKey; - - // - // TODO: remvoe our group key from PerStaDefKeyTable[] - // - for( index = 0 ; index < MAX_NUM_PER_STA_KEY ; index++) - { - pDefKey = &(pSecInfo->PerStaDefKeyTable[index]); - - if( pDefKey->Valid && eqMacAddr(pDefKey->MACAdrss, pAdapter->CurrentAddress) ) - { - return TRUE; - } - } - - return FALSE; - } - } -} - -// -// Description: -// Descrypt the mgnt frame by SW and check if this packet is valid. -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// Return: -// RT_SEC_STATUS_SUCCESS if this packet is descrypted successfully, and otherwise if any error(this packet should be dropped). -// Assumption: -// Before calling this function, be sure these conditions are correct, -// (1) This packet is mgnt frame. -// (2) MFP is enabled. -// By Bruce, 2009-10-08. -// -RT_SEC_STATUS -SecSWMFPDecryption( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_SECURITY_T pSec = &(pMgntInfo->SecurityInfo); - RT_SEC_STATUS secStatus = RT_SEC_STATUS_SUCCESS; - - if(RT_SEC_STATUS_SUCCESS != (secStatus = SecSoftwareDecryption(pAdapter, pRfd))) - { - switch(pSec->PairwiseEncAlgorithm) - { - case RT_ENC_ALG_TKIP: - CountRxMgntTKIPDecryptErrorsStatistics(pAdapter, pRfd); - break; - - case RT_ENC_ALG_AESCCMP: - CountRxMgntCCMPDecryptErrorsStatistics(pAdapter, pRfd); - break; - - default: //for MacOSX Compiler warning. - break; - } - - RT_TRACE(COMP_SEC , DBG_WARNING , ("SecSWMFPDecryption(): Fail (0x%08X) MFP packe decrypt !!\n", secStatus) ); - return secStatus; - } - else if( pMgntInfo->bInBIPMFPMode) - { // 802.11 MFP - OCTET_STRING frame; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // Remove IV, but we haven't remove MIC - if(frame.Length > (sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead)) - { - PlatformMoveMemory((frame.Octet+ sMacHdrLng), - (frame.Octet + sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead), - (frame.Length - (sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead))); - - // Clear the WEP bit because we have removed the IV field. - SET_80211_HDR_WEP(pRfd->Buffer.VirtualAddress, 0); - } - else - { - RT_TRACE(COMP_SEC , DBG_WARNING , ("SecSWMFPDecryption(): Check Packet Length failed!!\n") ); - return RT_SEC_STATUS_INVALID_PKT_LEN; - } - } - - else - { - OCTET_STRING frame; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // Check MHDR IE for TKIP... - if(pSec->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) - { - // Remove the ICV so that we can caculate the MIC. - MAKE_RFD_OFFSET_AT_BACK(pRfd, pMgntInfo->SecurityInfo.EncryptionTailOverhead); - - // Check the length is valid including MHDRIE and MIC - if(frame.Length < (sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead + 2 + CCX_MFP_TKIP_MHDR_IE_LEN + TKIP_MIC_LEN)) // MHDRIE (2 + 12) + MIC (8) - return RT_SEC_STATUS_INVALID_PKT_LEN; - - if(!CCX_VerifyRxMFP_MHDRIE(pAdapter, pRfd)) - { - RT_PRINT_DATA(COMP_SEC, DBG_WARNING, " Verify MFP MHDRIE Error, content:\n", frame.Octet, frame.Length); - CountRxMgntMFPTKIPMHDRStatistics(pAdapter, pRfd); - return RT_SEC_STATUS_MFP_MGNT_MHDR_FAILURE; - } - - RT_PRINT_DATA(COMP_CCX, DBG_LOUD, " Content:\n", pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - // GET_80211_HDR_MORE_FRAG(frame.Octet) may need to chech more frg bit not set !! - if(!SecCheckMIC( pAdapter , pRfd )) - { - return RT_SEC_STATUS_MGNT_MIC_FAILURE; - } - } - - // Remove IV, but we haven't remove MIC and MHDR IE - if(frame.Length > (sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead)) - { - PlatformMoveMemory((frame.Octet+ sMacHdrLng), - (frame.Octet + sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead), - (frame.Length - (sMacHdrLng + pMgntInfo->SecurityInfo.EncryptionHeadOverhead))); - - // Clear the WEP bit because we have removed the IV field. - SET_80211_HDR_WEP(pRfd->Buffer.VirtualAddress, 0); - - } - else - { - RT_TRACE(COMP_SEC , DBG_WARNING , ("SecSWMFPDecryption(): Check Packet Length failed!!\n") ); - return RT_SEC_STATUS_INVALID_PKT_LEN; - } - } - RT_TRACE(COMP_SEC, DBG_LOUD , ("SecSWMFPDecryption(): SW Descryption OK!\n") ); - return RT_SEC_STATUS_SUCCESS; -} - - -// -// Description: -// Handle 802.11w BIP MIC . -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// Return: -// RT_SEC_STATUS_SUCCESS if MIC and MMIE are OK , and otherwise if any error(this packet should be dropped and Do nothing !!). -// - -RT_SEC_STATUS -SecCheckMMIE( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ) -{ - OCTET_STRING frame; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_SECURITY_T pSec = &(pMgntInfo->SecurityInfo); - u1Byte Micdata[256] = {0}; - u4Byte MACTextLength = 8; - u1Byte PlantData[256] = {0}; - pu1Byte pCurrent = PlantData; - u1Byte PlantDataLen = 0; - u1Byte MMIE[2] = { 0x4c , 0x10 }; // ID and Len - PMMIE_STRUC pMMIE = NULL; - u1Byte index = 0; - - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - if( frame.Length > 256 || frame.Length < 18 ) - return RT_SEC_STATUS_MFP_MGNT_LEN_FAILURE; - - if( pSec->BIPKeyBuffer[0] == 0 ) - { - RT_TRACE( COMP_SEC , DBG_TRACE , ("===> BIP key no install !!\n")); - return RT_SEC_STATUS_SUCCESS; - } - //Check MMIE exit !! - if( PlatformCompareMemory( MMIE , frame.Octet + frame.Length - 18, 2 )) - { - return RT_SEC_STATUS_MFP_MGNT_MMIE_FAILURE; - } - - // Get MMIE - pMMIE = (PMMIE_STRUC)( frame.Octet + frame.Length - 18 ); - - - if(0 == PlatformCompareMemory(pMMIE->IPN, pSec->IPN, 6)) - { - RT_PRINT_DATA(COMP_SEC, DBG_WARNING, "[WARNING] Skip this frame because we received the same IPN = \n", pMMIE->IPN, 6); - return RT_SEC_STATUS_MGNT_IV_REPLAY; - } - // Check PN - for( index = 0 ; index < 6 ; index++ ) - { - if(pMMIE->IPN[5 - index] > pSec->IPN[5- index]) - break; - else if(pMMIE->IPN[5 - index] < pSec->IPN[5- index]) - { - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "MMIE PN Data:", pMMIE->IPN, 6); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "My PN Data:", pSec->IPN, 6); - return RT_SEC_STATUS_MFP_MGNT_MMIE_FAILURE; // PN error !! - } - else - continue; - } - - // Constr ADD | frame body - PlatformZeroMemory( PlantData , 256 ); - PlatformMoveMemory( pCurrent , frame.Octet , 2 ); // FC - // Reset Retry , PW_MGN and MORE bit - SET_80211_HDR_RETRY(PlantData, 0); - SET_80211_HDR_PWR_MGNT(PlantData, 0); - SET_80211_HDR_MORE_DATA(PlantData, 0); - pCurrent += 2; - - // A1 , A2 and A3 - PlatformMoveMemory( pCurrent , frame.Octet + 4 , 18 ); - pCurrent += 18; - - // Frame body - PlatformMoveMemory( pCurrent , frame.Octet + 24 , frame.Length - 24 ); - - // PlantData length = AAD + PacketLen - Hardlen - PlantDataLen = 20 + frame.Length - 24 ; - - // Clear MIC Fild - PlatformZeroMemory( (PlantData + PlantDataLen - 8 ) , 8); - - RT_PRINT_DATA(COMP_SEC , DBG_LOUD , " PlantData :\n" , PlantData , PlantDataLen); - - // Calculate MIC - AES_CMAC_1W( PlantData , PlantDataLen , pSec->BIPKeyBuffer , 16 , Micdata , &MACTextLength); - - // Compare MIC - if(!PlatformCompareMemory( Micdata , pMMIE->MIC , 8 ) ) - { - PlatformMoveMemory(pSec->IPN, pMMIE->IPN, 6); - return RT_SEC_STATUS_SUCCESS; - } - - RT_PRINT_DATA(COMP_SEC, DBG_WARNING, "[WARNING] Mismatched MIC for MMIE=\n", pMMIE->MIC, 8); - RT_PRINT_DATA(COMP_SEC, DBG_WARNING, "[WARNING] Mismatched MIC for Mine=\n", Micdata, MACTextLength); - - return RT_SEC_STATUS_MFP_MGNT_MMIE_MIC_FAILURE; -} - - -// -// Description: -// Handle Rx Packet encryption status and descrypt it if need. -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pRfd - -// The Rx buffer and information. -// Return: -// RT_SEC_STATUS_SUCCESS if this packet is descrypted successfully, and otherwise if any error(this packet should be dropped). -// By Bruce, 2009-10-15. -// -RT_SEC_STATUS -SecRxDescryption( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_SECURITY_T pSec = &(pMgntInfo->SecurityInfo); - OCTET_STRING frame; - RT_SEC_STATUS secStatus = RT_SEC_STATUS_SUCCESS; - - // Default mark this packet isn't MFP packet. - pRfd->Status.bRxMFPPacket = FALSE; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - //3 // Check Frame WEP bit - // This packet should not be descrypted. - if(!Frame_WEP(frame)) - { - if(!eqMacAddr(pMgntInfo->Bssid, Frame_Addr3(frame))) - return RT_SEC_STATUS_SUCCESS; - - if(!((IsMgntDeauth(frame.Octet) || IsMgntDisasoc(frame.Octet)))) // Just check Deauth/Disassoc - return RT_SEC_STATUS_SUCCESS; - - if(ACTING_AS_AP(pAdapter) || ACTING_AS_IBSS(pAdapter)) // Don't support in AP mode - return RT_SEC_STATUS_SUCCESS; - - if(MacAddr_isMulticast(Frame_Addr1(frame))) - { - if(CCX_IS_MFP_ENABLED(pAdapter)) // CCX MFP does NOT support multicast - return RT_SEC_STATUS_SUCCESS; - else if(pMgntInfo->bInBIPMFPMode) - { - if(RT_SEC_STATUS_SUCCESS == (secStatus = SecCheckMMIE( pAdapter , pRfd ))) - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Check MMIE OK!\n")); - pRfd->Status.bRxMFPPacket = TRUE; - return RT_SEC_STATUS_SUCCESS; - } - else - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Failed (0x%08X) from SecCheckMMIE()\n", secStatus)); - return secStatus; - } - } - else - { - return RT_SEC_STATUS_SUCCESS; - } - } - else // Unicast - { - if(CCX_IS_MFP_ENABLED(pAdapter)) - { - // Do nothing. - } - else if(pMgntInfo->bInBIPMFPMode) - { - if(((IsMgntDeauth(frame.Octet) && class3_err == Frame_DeauthReasonCode(frame)) - || (IsMgntDisasoc(frame.Octet) && class3_err == Frame_DeassocReasonCode(frame))) && - RT_SA_QUERY_STATE_UNINITIALIZED == pSec->pmfSaState) - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Received deauth/disassoc frame wit reason = 7 in PMF mode, start SA query process\n")); - pSec->pmfSaState = RT_SA_QUERY_STATE_SA_DETECTED; - PlatformSetTimer(pAdapter, &(pSec->SAQueryTimer), 100); - } - } - else - { - return RT_SEC_STATUS_SUCCESS; - } - - if(!SecIsTxKeyInstalled(pAdapter, pMgntInfo->Bssid)) - return RT_SEC_STATUS_SUCCESS; - - if(IsMgntDisasoc(frame.Octet) || IsMgntDeauth(frame.Octet) || (IsMgntAction(frame.Octet) && !CCX_IS_MFP_ENABLED(pAdapter))) - { - // CCXv5 S67 MFP enabled, these packets should be encrypted, if not, count the statistic. - switch(pSec->PairwiseEncAlgorithm) - { - case RT_ENC_ALG_TKIP: - CountRxMgntTKIPNoEncryptStatistics(pAdapter, pRfd); - break; - - case RT_ENC_ALG_AESCCMP: - CountRxMgntCCMPNoEncryptStatistics(pAdapter, pRfd); - break; - - default: //for MacOSX Compiler warning. - break; - } - RT_PRINT_DATA(COMP_SEC, DBG_WARNING, "[WARNING] Received mgnt frame without protection bit\n", frame.Octet, frame.Length); - return RT_SEC_STATUS_MGNT_FRAME_UNENCRYPT; - } - } - return RT_SEC_STATUS_SUCCESS; - } - - - //3 // Descryption for Mgnt Frame. - if(IsMgntFrame(frame.Octet)) - { - // Open Share Key mode, we do not handle this condition here. - if( IsMgntAuth(frame.Octet) && - (pSec->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || pSec->PairwiseEncAlgorithm == RT_ENC_ALG_WEP104)) - { - return SecSoftwareDecryption(pAdapter, pRfd); - } - - if(!eqMacAddr(pMgntInfo->Bssid, Frame_Addr3(frame))) - return RT_SEC_STATUS_SUCCESS; - - // - // 802.11 MFP AES - // - if(pMgntInfo->bInBIPMFPMode || CCX_IS_MFP_ENABLED(pAdapter)) - { - // Mark this packet as MFP Packet to make sure the Descryption process fills the correct values in the fields. - pRfd->Status.bRxMFPPacket = TRUE; - RT_PRINT_DATA(COMP_SEC , DBG_LOUD, "SecRxDescryption(): Received Unicast Mgnt Frame with protection:\n" , frame.Octet, frame.Length ); - - secStatus = SecSWMFPDecryption(pAdapter, pRfd); - - return secStatus; - } - else - { - RT_TRACE(COMP_SEC, DBG_WARNING, ("SecRxDescryption(): Error!!! Receive Mgnt Frame with WEP bit (Not support)!")); - return RT_SEC_STATUS_PKT_TYPE_NOT_SUPPORT; - } - - return secStatus; - } - - //3 // Data packet. - if(IsDataFrame(frame.Octet)) - { - if(pSec->SWRxDecryptFlag) - { - if(pMgntInfo->SafeModeEnabled) - { - RT_TRACE_F(COMP_RECV, DBG_LOUD, ("Do not use SecSoftwareDecryption when SafeModeEnabled\n")); - return RT_SEC_STATUS_SUCCESS; - } - - if(RT_SEC_STATUS_SUCCESS != (secStatus = SecSoftwareDecryption(pAdapter, pRfd))) - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("SecRxDescryption(): SW Descrypt Fail(0x%08X) for data packet\n", secStatus) ); - return secStatus; - } - return RT_SEC_STATUS_SUCCESS; - } - - // Win7 SW Descryption Special Case - if( pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20 || - pMgntInfo->bConcurrentMode || - pMgntInfo->bBTMode ) - { - BOOLEAN bSWSec = FALSE; - - if( ( MacAddr_isBcst(Frame_pDaddr(frame)) || - MacAddr_isMulticast(Frame_pDaddr(frame)) ) && - MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_NONE) - bSWSec = TRUE; - else if( pSec->PairwiseEncAlgorithm == RT_ENC_ALG_WEP104 || - pSec->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) - bSWSec = TRUE; - else if( pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC && - MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_NONE) - bSWSec = TRUE; - else if(!pMgntInfo->SecurityInfo.SWRxDecryptFlag && Frame_WEP(frame) && pRfd->Status.Decrypted == 0) - bSWSec = TRUE; - else - bSWSec = FALSE; - - //for win7 FPGA Verification, Adhoc TP test - if(pMgntInfo->bRegAdhocUseHWSec && pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC) - bSWSec = FALSE; - - if(bSWSec) - { - if(RT_SEC_STATUS_SUCCESS != (secStatus = SecSoftwareDecryption(pAdapter, pRfd))) - { - { - RT_TRACE(COMP_SEC , DBG_TRACE , ("===>Fail Win7 SW decrypt\n") ); - return RT_SEC_STATUS_FAILURE; - } - } - } - } - - // Normal Case with HW Descryption - return RT_SEC_STATUS_SUCCESS; - } - - RT_TRACE(COMP_SEC, DBG_WARNING, ("SecRxDescryption(): Error!!! Receive Frame(Type = 0x%02X) with WEP bit (Not support)!", frame.Octet[0])); - return RT_SEC_STATUS_PKT_TYPE_NOT_SUPPORT; -} - - -// -// Description: -// Append 802.11w MFP MMIE , just for AP mode !! -// Input : -// posFrame : Action or mgnt frame , DA is broadcast !! -// -void -SecAppenMMIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ) -{ - if( !(ACTING_AS_AP(pAdapter) )) - return; - - // TO DO !! - RT_TRACE(COMP_SEC, DBG_LOUD , ( " ===> AP mode support MFP ??\n" )); - return; -} - - -BOOLEAN -SecStaGetANoseForS5( - IN PADAPTER Adapter, - IN POCTET_STRING pPduOS - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte Offset_TypeEAPOL = sMacHdrLng + LLC_HEADER_SIZE; // 30 - OCTET_STRING EapMessage; - OCTET_STRING EapKeyMessage; - OCTET_STRING ANonce; - - if( IsQoSDataFrame(pPduOS->Octet) ) - { - Offset_TypeEAPOL += sQoSCtlLng; // +2 - } - - if( Frame_WEP(*pPduOS)) - { - Offset_TypeEAPOL += Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead; // 4 or 8 - } - - // Length Check - if( pPduOS->Length < (Offset_TypeEAPOL+1) ) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("SecGetANoseForS5(): invalid length(%d)\n", pPduOS->Length ) ); - return FALSE; - } - - // 888e? - if( (pPduOS->Octet[Offset_TypeEAPOL]==0x88) && (pPduOS->Octet[Offset_TypeEAPOL+1]==0x8e) ) - { - //TYPE_LENGTH_FIELD_SIZE - EapMessage.Octet = pPduOS->Octet+(Offset_TypeEAPOL+TYPE_LENGTH_FIELD_SIZE); - EapMessage.Length = pPduOS->Length - (Offset_TypeEAPOL+TYPE_LENGTH_FIELD_SIZE); - //RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "===> SecStaGetANoseForS5 \n", EapMessage.Octet, EapMessage.Length); - - if( (u1Byte)( *(EapMessage.Octet+1) ) == LIB1X_EAPOL_KEY ) - { - FillOctetString(EapKeyMessage, EapMessage.Octet+LIB1X_EAPOL_HDRLEN, EapMessage.Length-LIB1X_EAPOL_HDRLEN ); - - if( Message_KeyType(EapKeyMessage) == type_Pairwise && - Message_KeyMIC(EapKeyMessage) == FALSE) // 1st message of 4-Way - { - ANonce = Message_KeyNonce(EapKeyMessage); - PlatformMoveMemory(pMgntInfo->mbS5ANose,ANonce.Octet,KEY_NONCE_LEN); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "===> SecStaGetANoseForS5 \n", pMgntInfo->mbS5ANose,KEY_NONCE_LEN); - } - - } - - } - - return FALSE; - -} - -BOOLEAN -SecStaGenPMKForS5( - IN PADAPTER Adapter - ) -{ - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - PasswordHash(pMgntInfo->mbPassphrase,pMgntInfo->mPasspharseLen, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, pMgntInfo->mbS5PMK); - - // Calcut PTK - CalcPTK(pMgntInfo->Bssid , Adapter->CurrentAddress, - pMgntInfo->mbS5ANose, pMgntInfo->mbS5SNose, - pMgntInfo->mbS5PMK, PMK_LEN, pMgntInfo->mbS5PTK, PTK_LEN_TKIP); - - PlatformMoveMemory(pMgntInfo->PMDot11RSNRekeyPara.KCK , pMgntInfo->mbS5PTK , PTK_LEN_EAPOLMIC); // - PlatformMoveMemory(pMgntInfo->PMDot11RSNRekeyPara.KEK , pMgntInfo->mbS5PTK+PTK_LEN_EAPOLMIC , PTK_LEN_EAPOLENC); - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "===>SecStaGenPMKForS5 PMK : \n", pMgntInfo->mbS5PMK, PMK_LEN); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "===>SecStaGenPMKForS5 PTK : \n", pMgntInfo->mbS5PTK, PTK_LEN_TKIP); - - return TRUE; -} - -// -// Description: -// Received the SA query packet from the STA. -// -RT_STATUS -OnSAQueryReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "OnSAQueryReq(): Content:\n", posMpdu->Octet, posMpdu->Length); - - do - { - if(!pRfd->Status.bRxMFPPacket) - { - if(pMgntInfo->bInBIPMFPMode) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("[WARNING] Received an unproteced SA query frame in PMF mode\n")); - } - rtStatus = RT_STATUS_PKT_DROP; - break; - } - - if(posMpdu->Length < MIN_ACTION_SA_QUERY_FRAME_LEN) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("[WARNING] Received Length (%d) of SA Query Req < %d, skip this frame\n", posMpdu->Length, MIN_ACTION_SA_QUERY_FRAME_LEN)); - rtStatus = RT_STATUS_INVALID_LENGTH; - } - - SendSAQueryRsp(pAdapter, Frame_Addr2(*posMpdu), GET_ACTFRAME_SA_QUERY_ID(posMpdu->Octet)); - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Send SA Query Rsp with Identifier = 0x%04X\n", GET_ACTFRAME_SA_QUERY_ID(posMpdu->Octet))); - }while(FALSE); - - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Received the SA query response packet from the STA. -// -RT_STATUS -OnSAQueryRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "OnSAQueryRsp(): Content:\n", posMpdu->Octet, posMpdu->Length); - - do - { - if(!pRfd->Status.bRxMFPPacket) - { - if(pMgntInfo->bInBIPMFPMode) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("[WARNING] Received an unproteced SA query frame in PMF mode\n")); - } - rtStatus = RT_STATUS_PKT_DROP; - break; - } - - if(posMpdu->Length < MIN_ACTION_SA_QUERY_FRAME_LEN) - { - RT_TRACE_F(COMP_SEC, DBG_WARNING, ("[WARNING] Received Length (%d) of SA Query Req < %d, skip this frame\n", posMpdu->Length, MIN_ACTION_SA_QUERY_FRAME_LEN)); - rtStatus = RT_STATUS_INVALID_LENGTH; - } - - if(!pMgntInfo->mAssoc) - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Received SA query response without association, skip it\n")); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - if(RT_SA_QUERY_STATE_SA_REQ_IN_PROGRESS != pSecInfo->pmfSaState) - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Received SA query response mismaching my pmfState (%d), skip it\n", pSecInfo->pmfSaState)); - rtStatus = RT_STATUS_INVALID_STATE; - break; - } - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Idendifier = 0x%04X, my Identifier = 0x%04X\n", GET_ACTFRAME_SA_QUERY_ID(posMpdu->Octet), pSecInfo->SAReqIdentifier)); - - if(GET_ACTFRAME_SA_QUERY_ID(posMpdu->Octet) != pSecInfo->SAReqIdentifier) - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Received mismatched Idendifier = 0x%04X, my Identifier = 0x%04X, skip it\n", GET_ACTFRAME_SA_QUERY_ID(posMpdu->Octet), pSecInfo->SAReqIdentifier)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("SA Query process OK, cancel timer\n")); - pSecInfo->pmfSaState = RT_SA_QUERY_STATE_UNINITIALIZED; - PlatformCancelTimer(pAdapter, &(pSecInfo->SAQueryTimer)); - }while(FALSE); - - - return RT_STATUS_SUCCESS; -} - - -// -// Description: -// Fill and move IV and offset if this tx management frame shall be proteced. -// Arguments: -// [in] Adapter - -// The NIC context. -// [in] pTcb - -// The context of tx frame. -// Return: -// TRUE if this frame is filled and reserved with security content. -// FALSE if this frame is returned without any change. -// Remark: -// This function checks the association condition and determine if the current frame -// needs to be proteced. If yes, this frame is filled with WEP bit set in the header. -// By Bruce-2014-12-26. -// -BOOLEAN -SecFillProtectTxMgntFrameHeader( - IN PADAPTER pAdapter, - IN PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - OCTET_STRING osMpdu; - BOOLEAN bProtected = FALSE; - - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(pAdapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - do - { - // Currently, we only checks the action frame because some mgnt frames like deauth/disassociation are filled - // with IV and WEP bit in the construction function, but others mgnt frames excluding deauth/disassociation/action - // frame shall be sent without protection. - // By Bruce, 2014-12-26. - if(!IsMgntAction(osMpdu.Octet)) - { - break; - } - - if(!pMgntInfo->bInBIPMFPMode) - { - break; - } - - // We only support AES in PMF. - if(RT_ENC_ALG_AESCCMP != pSecInfo->PairwiseEncAlgorithm) - { - break; - } - - // We don't support PMF in AP mode. - if(MacAddr_isMulticast(Frame_Addr1(osMpdu))) - { - break; - } - - if(0 == pSecInfo->EncryptionHeadOverhead) - break; - - bProtected = TRUE; - }while(FALSE); - - if(bProtected) - { - //3 // Determine different kind of frames before fill the IV - // ToDo - - //RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "SecFillProtectTxMgntFrameHeader(): Before extend IV content:\n", osMpdu.Octet, osMpdu.Length); - // Set WEP bit !! - SET_80211_HDR_WEP(osMpdu.Octet, 1); - - PlatformMoveMemory(pSecInfo->SecBuffer, (osMpdu.Octet + sMacHdrLng), (osMpdu.Length - sMacHdrLng)); - - PlatformMoveMemory((osMpdu.Octet+ sMacHdrLng + pSecInfo->EncryptionHeadOverhead), - pSecInfo->SecBuffer, - (osMpdu.Length - sMacHdrLng)); - PlatformZeroMemory(osMpdu.Octet + sMacHdrLng , pSecInfo->EncryptionHeadOverhead); - osMpdu.Length += pSecInfo->EncryptionHeadOverhead; - pTcb->BufferList[0].Length += pSecInfo->EncryptionHeadOverhead; - pTcb->PacketLength += pSecInfo->EncryptionHeadOverhead; - //RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "SecFillProtectTxMgntFrameHeader(): After extend IV content:\n", osMpdu.Octet, osMpdu.Length); - } - - return bProtected; -} - -// Description: -// Timer callback function to handle SA query mechanism. -VOID -SAQueryTimerCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_SECURITY_T pSec = &pAdapter->MgntInfo.SecurityInfo; - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("pmfSaState = %d\n", pSec->pmfSaState)); - if(!pMgntInfo->mAssoc) - { - pSec->pmfSaState = RT_SA_QUERY_STATE_UNINITIALIZED; - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("State is not associated, skip SA query\n")); - return; - } - - if(RT_SA_QUERY_STATE_SA_DETECTED == pSec->pmfSaState) - { - pSec->SAReqIdentifier = (pSec->SAReqIdentifier + 1) % 0xFFFFFFFF; - pSec->pmfSaState = RT_SA_QUERY_STATE_SA_REQ_IN_PROGRESS; - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Send SA query request with ID = %04X to AP\n", pSec->SAReqIdentifier)); - SendSAQueryReq(pAdapter, pMgntInfo->Bssid, pSec->SAReqIdentifier); - PlatformSetTimer(pAdapter, &(pSec->SAQueryTimer), 1000); - } - else if(RT_SA_QUERY_STATE_SA_REQ_IN_PROGRESS == pSec->pmfSaState) - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("Disconnect from the AP\n")); - MgntDisconnectAP(pAdapter, unspec_reason); - pSec->pmfSaState = RT_SA_QUERY_STATE_UNINITIALIZED; - } - else - { - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("[WARNING] Unknown pmfstate = %d\n", pSec->pmfSaState)); - } -} - - -// -// 2011/03/04 MH Move all new CAN search metho to here forcommon binary . -// We need to reorganize the locaton in he future. -// --------------------------------------------------------------- -// -#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1) - -VOID -SEC_AsocEntry_ResetEntry( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry - ) -{ - u1Byte i; - - for( i = 4 ; i < Adapter->TotalCamEntry ; i++) - { - if( (Adapter->MgntInfo.SWCamTable[i].bUsed) - &&(PlatformCompareMemory(pEntry->MacAddr, Adapter->MgntInfo.SWCamTable[i].macAddress, 6)==0)) - { - CamDeleteOneEntry( Adapter , pEntry->MacAddr, i); - PlatformZeroMemory( & Adapter->MgntInfo.SWCamTable[i] , sizeof(SW_CAM_TABLE) ); - } - } -} - -#endif // #if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1) - -VOID -SecUpdateSWGroupKeyInfo( - IN PADAPTER Adapter, - IN u4Byte KeyIndex, - IN u4Byte KeyLength, - IN pu1Byte KeyMaterial -) -{ - PRT_SECURITY_T pSecInfo = &Adapter->MgntInfo.SecurityInfo; - RT_ENC_ALG EncAlgorithm; - - EncAlgorithm = pSecInfo->GroupEncAlgorithm; - RT_TRACE( COMP_INIT, DBG_LOUD, ("SecUpdateSWGroupKeyInfo(): SecLvl>0, Group EncAlgorithm=0x%08X, Pairwise EncAlgo=0x%08X\n", - EncAlgorithm, pSecInfo->PairwiseEncAlgorithm) ); - - SecClearGroupKeyByIdx(Adapter, (u1Byte)KeyIndex); - CopyMem(pSecInfo->KeyBuf[KeyIndex], KeyMaterial, KeyLength ); - pSecInfo->KeyLen[KeyIndex]= (u1Byte)KeyLength; - - if(EncAlgorithm == RT_ENC_ALG_TKIP) - { - if((KeyIndex & ADD_KEY_IDX_AS)){//kcwu: Key is set by an Authenticator, exchange Tx/Rx MIC - u1Byte tmpbuf[TKIP_MIC_KEY_LEN]; - PlatformMoveMemory(tmpbuf, KeyMaterial+TKIP_ENC_KEY_LEN, TKIP_MIC_KEY_LEN); - PlatformMoveMemory(KeyMaterial+TKIP_ENC_KEY_LEN, - KeyMaterial+TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN, TKIP_MIC_KEY_LEN); - PlatformMoveMemory(KeyMaterial+TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN, tmpbuf, TKIP_MIC_KEY_LEN); - } - PlatformMoveMemory(pSecInfo->RxMICKey, KeyMaterial+TKIP_MICKEYRX_POS, TKIP_MIC_KEY_LEN); - PlatformMoveMemory(pSecInfo->TxMICKey, KeyMaterial+TKIP_MICKEYTX_POS, TKIP_MIC_KEY_LEN); - } - else if(EncAlgorithm == RT_ENC_ALG_AESCCMP) - { - //2004/09/07, kcwu, AES Key Initialize - AESCCMP_BLOCK blockKey; - PlatformMoveMemory(blockKey.x, pSecInfo->KeyBuf[KeyIndex],16); - AES_SetKey(blockKey.x, - AESCCMP_BLK_SIZE*8, - (u4Byte *)pSecInfo->AESKeyBuf[KeyIndex]); // run the key schedule - } - else if(EncAlgorithm==RT_ENC_ALG_WEP40 || EncAlgorithm==RT_ENC_ALG_WEP104) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("MgntActSet_802_11_ADD_KEY(): SecLvl>0, EncAlgorithm=%d\n", EncAlgorithm) ); - } -} - -// -// --------------------------------------------------------------- -// 2011/03/04 MH Move all new CAN search metho to here forcommon binary . -// We need to reorganize the locaton in he future. -// diff --git a/network/wlan/WDI/COMMON/SecurityGen.h b/network/wlan/WDI/COMMON/SecurityGen.h deleted file mode 100644 index a37214e5..00000000 --- a/network/wlan/WDI/COMMON/SecurityGen.h +++ /dev/null @@ -1,1052 +0,0 @@ -#ifndef __INC_SECURITYGEN_H -#define __INC_SECURITYGEN_H - -#define PAIRWISE_KEYIDX 0 - -/* - WDK TKIP key format defintion: - Bit(28) of Key Index |Bit 0-127 |Bit 128-191 |Bit 192-255 - ------------------------+-------------------+---------------+----------- - 0(supplicant) |Encryption key |Rx MIC key |Tx MIC Key - 1(Authenticator) |Rncryption key |Tx MIC key |Rx MIC Key - - Linux TKIP key format defintion: - Bit 0-127 |Bit 128-191 |Bit 192-255 - ----------------+---------------+----------- - Encryption key |Tx MIC key |Rx MIC Key -*/ -#define TKIP_ENCKEY_POS 0 -#define TKIP_MICKEYTX_POS TKIP_ENC_KEY_LEN // for station mode, this is for RX MIC key -#define TKIP_MICKEYRX_POS (TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN) // for station mode, this is for TX MIC key - -#define NDIS_802_11_AI_REQFI_CAPABILITIES 1 -#define NDIS_802_11_AI_REQFI_LISTENINTERVAL 2 -#define NDIS_802_11_AI_REQFI_CURRENTAPADDRESS 4 - -#define NDIS_802_11_AI_RESFI_CAPABILITIES 1 -#define NDIS_802_11_AI_RESFI_STATUSCODE 2 -#define NDIS_802_11_AI_RESFI_ASSOCIATIONID 4 - -typedef u4Byte RT_SEC_STATUS; - -#define RT_SEC_STATUS_SUCCESS (RT_SEC_STATUS)0x00000000 // Encryption/Decryption Success -#define RT_SEC_STATUS_FAILURE (RT_SEC_STATUS)0x00000001 // Unspecified Failure -#define RT_SEC_STATUS_PKT_TYPE_NOT_SUPPORT (RT_SEC_STATUS)0x00000002 // The type of packet is invalid to encrypt or decrypt. -#define RT_SEC_STATUS_INVALID_PKT_LEN (RT_SEC_STATUS)0x00000003 // The length of packet is invalid to encrypt or decrypt. -#define RT_SEC_STATUS_MGNT_FRAME_UNENCRYPT (RT_SEC_STATUS)0x00000004 // This is unencrypted packet, but the encryption type is enbled. -#define RT_SEC_STATUS_DATA_UNICAST_IV_REPLAY (RT_SEC_STATUS)0x00000005 // This is unicast data packet with IV replay. -#define RT_SEC_STATUS_DATA_MULTICAST_IV_REPLAY (RT_SEC_STATUS)0x00000006 // This is multicast data packet with IV replay. -#define RT_SEC_STATUS_MGNT_IV_REPLAY (RT_SEC_STATUS)0x00000007 // This is mgnt frame with IV replay. -#define RT_SEC_STATUS_DATA_MIC_FAILURE (RT_SEC_STATUS)0x00000008 // TKIP data packet is MIC failure -#define RT_SEC_STATUS_MGNT_MIC_FAILURE (RT_SEC_STATUS)0x00000009 // TKIP mgnt packet is MIC failure -#define RT_SEC_STATUS_MFP_MGNT_MHDR_FAILURE (RT_SEC_STATUS)0x0000000A // CCXv5 MFP TKIP MHDRIE is invalid -#define RT_SEC_STATUS_MFP_MGNT_LEN_FAILURE (RT_SEC_STATUS)0x0000000B // 802.11w BIP data to long -#define RT_SEC_STATUS_MFP_MGNT_MMIE_FAILURE (RT_SEC_STATUS)0x0000000C // 802.11w MMIE fail -#define RT_SEC_STATUS_MFP_MGNT_MMIE_MIC_FAILURE (RT_SEC_STATUS)0x0000000D // 802.11w MMIE Mic fail -#define RT_SEC_STATUS_UNKNOWN_TA (RT_SEC_STATUS)0x0000000E // Unknow TA, no Key to decrypt -#define RT_SEC_STATUS_ICV_ERROR (RT_SEC_STATUS)0x0000000F // Decryption fail, ICV error - - - - -#define PN_DECIMAL2ARRAY(ul16, ul32, keyid, pucOut)\ - pucOut[0] = (UCHAR)(ul32 >> 0) & 0xff;\ - pucOut[1] = (UCHAR)(ul32 >> 8) & 0xff;\ - pucOut[2] = 0x0;\ - pucOut[3] = (0x20 | (UCHAR)((keyid << 6) & 0xc0) );\ - pucOut[4] = (UCHAR)(ul32 >> 16) & 0xff;\ - pucOut[5] = (UCHAR)(ul32 >> 24) & 0xff;\ - pucOut[6] = (UCHAR)(ul16 >> 0) & 0xff;\ - pucOut[7] = (UCHAR)(ul16 >> 8) & 0xff; - -#define TKIP_TSC_DECIMAL2ARRAY(IV16, IV32, keyid, TSC)\ - TSC[0] = EF1Byte( (UCHAR)((IV16>>8) & 0xff) );\ - TSC[1] = EF1Byte( (UCHAR)(0x20 | (TSC[0]&0x7f)) );\ - TSC[2] = EF1Byte( (UCHAR)((IV16>>0) & 0xff) );\ - TSC[3] = EF1Byte( (UCHAR)(0x20 | (keyid<<6)) );\ - TSC[4] = EF1Byte( (UCHAR)((IV32>>0) & 0xff) );\ - TSC[5] = EF1Byte( (UCHAR)((IV32>>8) & 0xff) );\ - TSC[6] = EF1Byte( (UCHAR)((IV32>>16) & 0xff) );\ - TSC[7] = EF1Byte( (UCHAR)((IV32>>24) & 0xff) ); - -//add for CKIP , by CCW -#define CKIP_SEQ_DECIMAL2ARRAY(ul32,pucOut)\ - pucOut[0] = EF1Byte( (UCHAR)((ul32 >> 24) & 0xff) );\ - pucOut[1] = EF1Byte( (UCHAR)((ul32 >> 16) & 0xff) );\ - pucOut[2] = EF1Byte( (UCHAR)((ul32 >> 8) & 0xff) );\ - pucOut[3] = EF1Byte( (UCHAR)((ul32 >> 0) & 0xff) ); - -/* -//#define CKIP_IV_DECIMAL2ARRAY(ul32,pucOut, keyid)\ -// pucOut[0] = (UCHAR)((ul32 >> 16) & 0xff);\ -// pucOut[1] = (UCHAR)((ul32 >> 8) & 0xff);\ -// pucOut[2] = (UCHAR)((ul32 >> 0) & 0xff);\ -// pucOut[3] = (UCHAR)((keyid<< 6) & 0xff); -*/ - -// MFP Support type !! -typedef enum _MFP_SECURITY_TYPE{ - MFP_NONE = 0x0, - MFP_CCX = 0x1, - MFP_80211_W = 0x2, -}MFP_SECURITY_TYPE,*PMFP_SECURITY_TYPE; - -#define ENCRYPTION_MAX_OVERHEAD 128 // Follow 8185, 2005.04.14, by rcnjko. - -typedef struct -{ - u4Byte K0, K1; // Key - u4Byte L, R; // Current state - u4Byte M; // Message accumulator (single word) - u4Byte nBytesInM; // # bytes in M -}MicData; - - -// -// Redefine NDIS5 PMKID related data structure for multi-platform consideration. -// 070418, by rcnjko. -// -typedef struct _N5_BSSID_INFO -{ - u1Byte BSSID[6]; - u1Byte PMKID[16]; -} N5_BSSID_INFO, *PN5_BSSID_INFO; - -typedef struct _N5_802_11_PMKID -{ - u4Byte Length; - u4Byte BSSIDInfoCount; - N5_BSSID_INFO BSSIDInfo[1]; -} N5_802_11_PMKID, *PN5_802_11_PMKID; -//--------------------------------- -// Add For 802.1w AES CMAC -//--------------------------------- - -/* AES definition & structure */ -#define AES_STATE_ROWS_1W 4 /* Block size: 4*4*8 = 128 bits */ -#define AES_STATE_COLUMNS_1W 4 -#define AES_BLOCK_SIZES_1W AES_STATE_ROWS_1W*AES_STATE_COLUMNS_1W -#define AES_KEY_ROWS_1W 4 -#define AES_KEY_COLUMNS_1W 8 /*Key length: 4*{4,6,8}*8 = 128, 192, 256 bits */ -#define AES_KEY128_LENGTH_1W 16 -#define AES_KEY192_LENGTH_1W 24 -#define AES_KEY256_LENGTH_1W 32 -#define AES_CBC_IV_LENGTH_1W 16 - - -// -// Need to move TypeDef.h ..... -// -typedef struct _MMIE_STRUC{ - u1Byte ID; - u1Byte Length; - u1Byte KeyID[2]; - u1Byte IPN[6]; - u1Byte MIC[8]; -}MMIE_STRUC,*PMMIE_STRUC; - -typedef struct { - u1Byte State[AES_STATE_ROWS_1W][AES_STATE_COLUMNS_1W]; - u1Byte KeyWordExpansion[AES_KEY_ROWS_1W][AES_KEY_ROWS_1W*((AES_KEY256_LENGTH_1W >> 2) + 6 + 1)]; -} AES_CTX_STRUC, *PAES_CTX_STRUC; - - -/* AES operations */ -VOID -AES_KeyExpansion_1W( - u1Byte Key[], - u4Byte KeyLength, - AES_CTX_STRUC *paes_ctx -); - -VOID -AES_Encrypt_1W( - u1Byte PlainBlock[], - u4Byte PlainBlockSize, - u1Byte Key[], - u4Byte KeyLength, - u1Byte CipherBlock[], - u4Byte *CipherBlockSize -); - - -/* AES-CMAC operations */ -VOID -AES_CMAC_GenerateSubKey_1W( - u1Byte Key[], - u4Byte KeyLength, - u1Byte SubKey1[], - u1Byte SubKey2[] -); - -VOID AES_CMAC_1W ( - u1Byte PlainText[], - u4Byte PlainTextLength, - u1Byte Key[], - u4Byte KeyLength, - u1Byte MACText[], - u4Byte *MACTextLength -); - -void SecMFPEncodeAESCCM_1W( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u4Byte keyid, - u1Byte *plaintext, - u4Byte headerLen, - u4Byte totalLen -); - -int SecMFPDecodeAESCCM_1W( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u1Byte *data, - u4Byte headerLen, - u4Byte totalLen -); - - -//--------------------------------- -// End of 802.1w -//--------------------------------- - -void -TKIPGenerateKey( - UCHAR *RC4KEY, - ULONG IV32, - USHORT IV16, - const UCHAR *TA, - const UCHAR *TK -); - -void -SecEncodeAESCCM( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u1Byte *plaintext, - u4Byte headerLen, - u4Byte totalLen -); - -//------------------------------------------------ -// Name : SecRSNAEncodeAESCCM -// Function : Add for RSNA AES-CCMP Encode -// input : plaintext = [Header] + [IV] + [Data] + [AES MIC] -//------------------------------------------------- -void SecRSNAEncodeAESCCM( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u4Byte keyid, - u1Byte *plaintext, - u4Byte headerLen, - u4Byte totalLen - -); - -//------------------------------------------------ -// Name : SecMFPEncodeAESCCM -// Function : Add for RSNA AES-CCMP Encode -// input : plaintext = [Header] + [IV] + [Data] + [AES MIC] -//------------------------------------------------- -void SecMFPEncodeAESCCM( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u4Byte keyid, - u1Byte *plaintext, - u4Byte headerLen, - u4Byte totalLen -); - -int -SecDecodeAESCCM( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u1Byte *data, - u4Byte headerLen, - u4Byte totalLen -); - -int SecMFPDecodeAESCCM( - PRT_SECURITY_T pSec, - u4Byte pulKey[], - u1Byte *data, - u4Byte headerLen, - u4Byte totalLen -); - -VOID -SecHeaderFillIV( - PADAPTER Adapter, - pu1Byte PacketStart -); - -BOOLEAN -SecCheckMIC( - PADAPTER Adapter, - PRT_RFD pRfd -); - -VOID -SecGetGroupCipherFromBeacon( - PADAPTER Adapter, - PRT_WLAN_BSS pbssDesc -); - -VOID -SecConstructRSNIE( - PADAPTER Adapter -); - -RT_STATUS -Sec_AppendWPAIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ); - -RT_STATUS -Sec_AppendRSNIE( - IN PADAPTER pAdapter, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - IN u4Byte maxBufLen, - OUT POCTET_STRING posOutContent - ); - -RT_ENC_ALG -SecGetEncryptionOverhead( - PADAPTER Adapter, - UNALIGNED pu2Byte pMPDUHead, - UNALIGNED pu2Byte pMPDUTail, - UNALIGNED pu2Byte pMSDUHead, - UNALIGNED pu2Byte pMSDUTail, - BOOLEAN bByPacket, - BOOLEAN bIsBroadcastPkt - ); - -VOID -SecInit( - PADAPTER Adapter -); - -BOOLEAN -SecCheckTKIPMIC( - PADAPTER Adapter, - PRT_RFD pRfd -); - -//BOOLEAN -//SecCheckCKIPMIC( -// PADAPTER Adapter, -// PRT_RFD pRfd -//); - -BOOLEAN -SecSWWEPDecryption( - PADAPTER Adapter, - PRT_RFD pRfd -); - -BOOLEAN -SecSWTKIPDecryption( - PADAPTER Adapter, - PRT_RFD pRfd -); - -BOOLEAN -SecSWAESDecryption( - PADAPTER Adapter, - PRT_RFD pRfd -); - -BOOLEAN -SecSWCKIPDecryption( - PADAPTER Adapter, - PRT_RFD pRfd -); - -VOID -SecClearAllKeys( - PADAPTER Adapter -); - -VOID -SecClearGroupKeyByIdx( - PADAPTER Adapter, - u1Byte paraIndex -); - -VOID -SecClearWEPKeyByIdx( - PADAPTER Adapter, - u1Byte paraIndex -); - - - -//for AP mode -VOID -SecClearPairwiseKeyByMacAddr( - PADAPTER Adapter, - pu1Byte paraMacAddr -); - -RT_STATUS -Sec_SelAkmFromAuthMode( - IN PADAPTER pAdapter, - IN RT_AUTH_MODE AuthMode, - IN CONTENT_PKT_TYPE contentType, - IN PVOID pInfoBuf, - IN u4Byte InfoBufLen, - OUT PAKM_SUITE_TYPE pAKM - ); - -RT_STATUS -Sec_MapAKMSuiteToOUIType( - IN AKM_SUITE_TYPE AKMSuite, - OUT pu1Byte pOUI, - OUT pu1Byte pOUIType - ); - -RT_STATUS -Sec_MapOUITypeToAKMSuite( - IN pu1Byte pOUI, - IN pu1Byte pOUIType, - IN RT_SECURITY_LEVEL secLevl, - OUT PAKM_SUITE_TYPE pAKMSuite - ); - -RT_STATUS -Sec_MapCipherSuiteToOUIType( - IN RT_ENC_ALG cipherSuite, - IN RT_SECURITY_LEVEL secLevl, - OUT pu1Byte pOUI, - OUT pu1Byte pOUIType - ); - -RT_STATUS -Sec_MapOUITypeToCipherSuite( - IN pu1Byte pOUI, - IN pu1Byte pOUIType, - IN RT_SECURITY_LEVEL secLevl, - OUT PRT_ENC_ALG pCipherSuite - ); - -RT_ENC_ALG_DEP -Sec_MapNewCipherToDepCipherAlg( - IN RT_ENC_ALG newCipherSuite - ); - -u1Byte -SecGetTxKeyIdx( - PADAPTER Adapter, - pu1Byte pMacAddr -); - -u1Byte -SecGetRxKeyIdx( - PADAPTER Adapter, - pu1Byte pDestAddr, - u1Byte IVKeyIdx -); - -#define GET_WEP_IV_INITVECTOR(__pWepIv) LE_BITS_TO_4BYTE(__pWepIv, 0, 24) -#define SET_WEP_IV_INITVECTOR(__pWepIv, _val) SET_BITS_TO_LE_4BYTE(__pWepIv, 0, 24, _val) - -#define GET_WEP_IV_KEYID(__pWepIv) ( (u1Byte)LE_BITS_TO_4BYTE(__pWepIv, 30, 2) ) -#define SET_WEP_IV_KEYID(__pWepIv, _val) SET_BITS_TO_LE_4BYTE(__pWepIv, 30, 2, _val) - -VOID SecCalculateMIC( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID SecSWTKIPEncryption( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID SecSWWEPEncryption( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID SecSWAESEncryption( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID SecSWCKIPEncryption( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID SecSoftwareEncryption( - PADAPTER Adapter, - PRT_TCB pTcb -); - -RT_SEC_STATUS -SecSoftwareDecryption( - PADAPTER Adapter, - PRT_RFD pRfd -); - -VOID SecCalculateTKIPMIC( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID SecCalculateCKIPMIC( - PADAPTER Adapter, - PRT_TCB pTcb -); - -RT_SEC_STATUS -SecRxCheckIV( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -typedef enum{ - RSNIE_TYPE_WPA = 1, - RSNIE_TYPE_WPA2 = 2 -}RSNIE_TYPE; - -//typedef enum { -// ERROR_BUFFER_TOO_SMALL = -1, -// ERROR_INVALID_PARA = -2, -// ERROR_INVALID_RSNIE = -3, -// ERROR_INVALID_MULTICASTCIPHER = -4, -// ERROR_INVALID_UNICASTCIPHER = -5, -// ERROR_INVALID_AUTHKEYMANAGE = -6, -// ERROR_UNSUPPORTED_RSNEVERSION = -7, -//} RSNIE_ERROR; - -#define RSN_STRERROR_BUFFER_TOO_SMALL "WPA Info Element : Input Buffer too small" -#define RSN_STRERROR_INVALID_PARAMETER "WPA Info Element : Invalid RSN Parameter" -#define RSN_STRERROR_INVALID_RSNIE "WPA Info Element : Invalid RSNIE" -#define RSN_STRERROR_INVALID_MULTICASTCIPHER "WPA Info Element : Invalid MulticastCipher" -#define RSN_STRERROR_UNSUPPORTED_RSNEVERSION "WPA Info Element : Unsupported RSN Version" - -#define RSN_ELEMENT_ID 0xDD -#define RSN_VER1 0x01 -#define WPA_VER1 0x01 -#define DOT11_MAX_CIPHER_ALGORITHMS 0x0a - -// -// For pairwise cipher suite and -// Authentication and Key Management Suite List in RSN IE. -// -typedef struct _DOT11_RSN_IE_SUITE{ - u1Byte OUI[3]; - u1Byte Type; -}DOT11_RSN_IE_SUITE; - -// Minimum length of RSN IE: -// Version(2) + Group Cipher OUI/Type (4) + Pairwise Cipher Cnt (2) + Pairwise Cipher Suite * 1 (4) + AKM Cnt (2) + AKM * 1 (4) + RSN Capability (2) -#define RSN_IE_MIN_LEN 20 - -#define GET_RSNIE_SUITE_COUNT(__pPtr) ReadEF2Byte(__pPtr) -#define SET_RSNIE_SUITE_COUNT(__pPtr, __Value) WriteEF2Byte(__pPtr, __Value) -#define GET_RSNIE_SUITE_PTR(__pPtr, __Idx) (((DOT11_RSN_IE_SUITE *)((pu1Byte)(__pPtr) + 2)) + (__Idx)) - -// -// For pairwise cipher suite and -// Authentication and Key Management Suite List in RSN IE. -// -#define GET_RSN_CAP_PREAUTH(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 0, 1) -#define SET_RSN_CAP_PREAUTH(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 0, 1, __Value) -#define GET_RSN_CAP_NO_PAIRWISE(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 1, 1) -#define SET_RSN_CAP_NO_PAIRWISE(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 1, 1, __Value) -#define GET_RSN_CAP_PTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 2, 2) -#define SET_RSN_CAP_PTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 2, 2, __Value) -#define GET_RSN_CAP_GTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 4, 2) -#define SET_RSN_CAP_GTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 4, 2, __Value) -#define GET_RSN_CAP_PEERKEY_ENABLED(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 9, 1) -#define SET_RSN_CAP_PEERKEY_ENABLED(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 9, 1, __Value) -#define GET_RSN_CAP_MFP_CAPABLE(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 7, 1) -#define SET_RSN_CAP_MFP_CAPABLE(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 7, 1, __Value) -#define GET_RSN_CAP_MFP_REQUIRED(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 6, 1) -#define SET_RSN_CAP_MFP_REQUIRED(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 6, 1, __Value) - - -//2 // Note: -//2 // The RSN setting macros shall be set sequentially to make sure that each offset/count is correct. -// RSN IE format with bytes count: -// | Version (2) | Group Ciher Suite (4) | Pairwise Cipher Suite Cnt (2) | Pairwise Cipher Suite List (4 * m) | AKM Suite Cnt (2) | AKM Suite List (4 * n) | RSN Cap (2) | PMK-ID (16 * s) | -#define GET_RSN_IE_VERSION(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart)) -#define SET_RSN_IE_VERSION(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart), _Value) - -#define GET_RSN_IE_GROUP_CIPHER_SUITE(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 2) -#define SET_RSN_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 2), _OUI, _Type) - -#define GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 6) -#define SET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 6, _Value) - -#define GET_RSN_IE_PAIRWISE_CIPHER_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 8 + ((_Idx) * 4)) -#define ADD_RSN_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \ -{ \ - SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 8 + GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4), _OUI, _Type); \ - SET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) + 1); \ -} - -#define GET_RSN_IE_AKM_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 8 + GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) -#define SET_RSN_IE_AKM_SUITE_CNT(_pStart, _Value) \ - WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 8 + GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4, _Value) - -#define GET_RSN_IE_AKM_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 10 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + ((_Idx) * 4)) -#define ADD_RSN_IE_AKM_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \ -{ \ - SET_OUI_WITH_TYPE((UNALIGNED pu1Byte)(_pStart) + 10 + \ - (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + \ - (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4), \ - _OUI, _Type); \ - SET_RSN_IE_AKM_SUITE_CNT(_pStart, GET_RSN_IE_AKM_SUITE_CNT(_pStart) + 1); \ -} - - -#define GET_RSN_IE_CAP_PTR(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 10 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4)) - -#define GET_RSN_IE_CAP_PREAUTH(_pStart) GET_RSN_CAP_PREAUTH(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_PREAUTH(_pStart, __Value) SET_RSN_CAP_PREAUTH(GET_RSN_IE_CAP_PTR(_pStart), __Value) - -#define GET_RSN_IE_CAP_NO_PAIRWISE(_pStart) GET_RSN_CAP_NO_PAIRWISE(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_NO_PAIRWISE(_pStart, __Value) SET_RSN_CAP_NO_PAIRWISE(GET_RSN_IE_CAP_PTR(_pStart), __Value) - -#define GET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart) GET_RSN_CAP_PTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart, __Value) SET_RSN_CAP_PTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart), __Value) - -#define GET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart) GET_RSN_CAP_GTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart, __Value) SET_RSN_CAP_GTKSA_REPLAY_COUNTER(GET_RSN_IE_CAP_PTR(_pStart), __Value) - -#define GET_RSN_IE_CAP_PEERKEY_ENABLED(_pStart) GET_RSN_CAP_PEERKEY_ENABLED(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_PEERKEY_ENABLED(_pStart, __Value) SET_RSN_CAP_PEERKEY_ENABLED(GET_RSN_IE_CAP_PTR(_pStart), __Value) - -#define GET_RSN_IE_CAP_MFP_CAPABLE(_pStart) GET_RSN_CAP_MFP_CAPABLE(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_MFP_CAPABLE(_pStart, __Value) SET_RSN_CAP_MFP_CAPABLE(GET_RSN_IE_CAP_PTR(_pStart), __Value) - -#define GET_RSN_IE_CAP_MFP_REQUIRED(_pStart) GET_RSN_CAP_MFP_REQUIRED(GET_RSN_IE_CAP_PTR(_pStart)) -#define SET_RSN_IE_CAP_MFP_REQUIRED(_pStart, __Value) SET_RSN_CAP_MFP_REQUIRED(GET_RSN_IE_CAP_PTR(_pStart), __Value) - - -#define GET_RSN_IE_PMKID_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4)) -#define SET_RSN_IE_PMKID_CNT(_pStart, _Value) \ - WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4), _Value) - -#define GET_RSN_IE_PMKID_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4) + ((_Idx) * 16)) -#define ADD_RSN_IE_PMKID(_pStart, _pPMKID) \ -{ \ - PlatformMoveMemory(GET_RSN_IE_PMKID_LIST(_pStart, GET_RSN_IE_PMKID_CNT(_pStart)), _pPMKID, PMKID_LEN); \ - SET_RSN_IE_PMKID_CNT(_pStart, GET_RSN_IE_PMKID_CNT(_pStart) + 1); \ -} - -#define GET_RSN_IE_GROUP_MGNT_CIPHER_SUITE(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_RSN_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_AKM_SUITE_CNT(_pStart) * 4) + (GET_RSN_IE_PMKID_CNT(_pStart) * 16)) -#define SET_RSN_IE_GROUP_MGNT_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) SET_OUI_WITH_TYPE(GET_RSN_IE_GROUP_MGNT_CIPHER_SUITE(_pStart), _OUI, _Type) - - -// Note: -//2 // The WPA setting macros shall be set sequentially to make sure that each offset/count is correct. -// WPA IE format with bytes count: -// |OUI/Type (4) | Version (2) | Group Ciher Suite (4) | Pairwise Cipher Suite Cnt (2) | Pairwise Cipher Suite List (4 * m) | AKM Suite Cnt (2) | AKM Suite List (4 * n) | Cap (2) - -#define WPA_IE_MIN_LEN 24 - - -#define SET_WPA_IE_OUI_AND_TYPE(_pStart) SET_OUI_WITH_TYPE((UNALIGNED pu1Byte)(_pStart), WPA_OUI, WPAIE_OUI_TYPE) - -#define GET_WPA_IE_VERSION(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 4) -#define SET_WPA_IE_VERSION(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 4, _Value) - -#define GET_WPA_IE_GROUP_CIPHER_SUITE(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 6) -#define SET_WPA_IE_GROUP_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 6), _OUI, _Type) - -#define GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 10) -#define SET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, _Value) WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 10, _Value) - -#define GET_WPA_IE_PAIRWISE_CIPHER_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 12 + ((_Idx) * 4)) -#define ADD_WPA_IE_PAIRWISE_CIPHER_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \ -{ \ - SET_OUI_WITH_TYPE(((UNALIGNED pu1Byte)(_pStart) + 12 + GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4), _OUI, _Type); \ - SET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart, GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) + 1); \ -} - -#define GET_WPA_IE_AKM_SUITE_CNT(_pStart) ReadEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) -#define SET_WPA_IE_AKM_SUITE_CNT(_pStart, _Value) \ - WriteEF2Byte((UNALIGNED pu1Byte)(_pStart) + 12 + GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4, _Value) - -#define GET_WPA_IE_AKM_SUITE_LIST(_pStart, _Idx) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + ((_Idx) * 4)) -#define ADD_WPA_IE_AKM_SUITE_OUI_W_TYPE(_pStart, _OUI, _Type) \ -{ \ - SET_OUI_WITH_TYPE((UNALIGNED pu1Byte)(_pStart) + 14 + \ - (GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + \ - (GET_WPA_IE_AKM_SUITE_CNT(_pStart) * 4), \ - _OUI, _Type); \ - SET_WPA_IE_AKM_SUITE_CNT(_pStart, GET_WPA_IE_AKM_SUITE_CNT(_pStart) + 1); \ -} - -#define GET_WPA_IE_CAP_PTR(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 14 + (GET_WPA_IE_PAIRWISE_CIPHER_SUITE_CNT(_pStart) * 4) + (GET_WPA_IE_AKM_SUITE_CNT(_pStart) * 4)) - -#define GET_WPA_CAP_PTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 2, 2) -#define SET_WPA_CAP_PTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 2, 2, __Value) -#define GET_WPA_CAP_GTKSA_REPLAY_COUNTER(__pPtr) LE_BITS_TO_2BYTE(__pPtr, 4, 2) -#define SET_WPA_CAP_GTKSA_REPLAY_COUNTER(__pPtr, __Value) SET_BITS_TO_LE_2BYTE(__pPtr, 4, 2, __Value) - -#define GET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart) GET_WPA_CAP_PTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart)) -#define SET_WPA_IE_CAP_PTKSA_REPLAY_COUNTER(_pStart, __Value) SET_WPA_CAP_PTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart), __Value) - -#define GET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart) GET_WPA_CAP_GTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart)) -#define SET_WPA_IE_CAP_GTKSA_REPLAY_COUNTER(_pStart, __Value) SET_WPA_CAP_GTKSA_REPLAY_COUNTER(GET_WPA_IE_CAP_PTR(_pStart), __Value) - - -// Reference: 802.11i D10.0 Table23, Authentication and Key Management Suite Selectors, page33. -typedef enum{ - DOT11_AuthKeyType_None = 0, - DOT11_AuthKeyType_RSN = 1, // 802.1x. - DOT11_AuthKeyType_RSNPSK = 2, // Pre-Shared Key. - DOT11_AuthKeyType_FT_OVER_1X = 3, // FT authentication negotiated over IEEE 802.1X - DOT11_AuthKeyType_FT_OVER_PSK = 4, // FT authentication using PSK - DOT11_AuthKeyType_1X_SHA256 = 5, // Authentication negotiated over IEEE 802.1X or using PMKSA caching with SHA256 Key Derivation - DOT11_AuthKeyType_PSK_SHA256 = 6, // PSK with SHA256 Key Derivation - DOT11_AuthKeyType_TPK = 7, // 802.11z TDLS Peer Key Handshake - DOT11_AuthKeyType_SAE_SHA256 = 8, // SAE Authentication with SHA-256 or using PMKSA caching with SHA-256 key derivation - DOT11_AuthKeyType_FT_OVER_SAE_SHA256 = 9, // FT authentication over SAE with SHA-256 -} DOT11_AuthKey_TYPE; - -// AKM OUI type with OUI 0x00 0F AC -#define RSN_AKM_SUITE_OUI_TYPE_RSN_1X 1 // 802.1x. -#define RSN_AKM_SUITE_OUI_TYPE_RSN_PSK 2 // Pre-Shared Key. -#define RSN_AKM_SUITE_OUI_TYPE_FT_1X 3 // FT authentication negotiated over IEEE 802.1X -#define RSN_AKM_SUITE_OUI_TYPE_FT_PSK 4 // FT authentication using PSK -#define RSN_AKM_SUITE_OUI_TYPE_1X_SHA256 5 // Authentication negotiated over IEEE 802.1X or using PMKSA caching with SHA256 Key Derivation -#define RSN_AKM_SUITE_OUI_TYPE_PSK_SHA256 6 // PSK with SHA256 Key Derivation -#define RSN_AKM_SUITE_OUI_TYPE_TPK 7 // 802.11z TDLS Peer Key Handshake -#define RSN_AKM_SUITE_OUI_TYPE_SAE_SHA256 8 // SAE Authentication with SHA-256 or using PMKSA caching with SHA-256 key derivation -#define RSN_AKM_SUITE_OUI_TYPE_FT_SAE_SHA256 9 // FT authentication over SAE with SHA-256 - -// RSN Cipher suite OUI type with OUI 0x00 0F AC -#define RSN_CIPHER_SUITE_OUI_TYPE_USE_GROUP_CIPHER 0 // Use group cipher suite -#define RSN_CIPHER_SUITE_OUI_TYPE_WEP40 1 // WEP-40 -#define RSN_CIPHER_SUITE_OUI_TYPE_TKIP 2 // TKIP -#define RSN_CIPHER_SUITE_OUI_TYPE_RESERVED 3 // Reserved -#define RSN_CIPHER_SUITE_OUI_TYPE_CCMP 4 // CCMP ¡V default pairwise cipher suite and default group cipher suite for data frames in an RSNA -#define RSN_CIPHER_SUITE_OUI_TYPE_WEP104 5 // WEP-104 -#define RSN_CIPHER_SUITE_OUI_TYPE_BIP 6 // BIP¡Xdefault group management cipher suite in an RSNA with management frame protection enabled -#define RSN_CIPHER_SUITE_OUI_TYPE_GRP_ADDR_DISALLOWED 7 // Group addressed traffic not allowed - -// WPA Cipher suite OUI type with OUI 0x00 0F AC -#define WPA_CIPHER_SUITE_OUI_TYPE_NONE 0 // None -#define WPA_CIPHER_SUITE_OUI_TYPE_WEP40 1 // WEP-40 -#define WPA_CIPHER_SUITE_OUI_TYPE_TKIP 2 // TKIP -#define WPA_CIPHER_SUITE_OUI_TYPE_WRAP 3 // WRAP -#define WPA_CIPHER_SUITE_OUI_TYPE_CCMP 4 // CCMP ¡V default pairwise cipher suite and default group cipher suite for data frames in an RSNA -#define WPA_CIPHER_SUITE_OUI_TYPE_WEP104 5 // WEP-104 - - -//2004/06/29, kcwu TKIP_MIC implement in TKIP_MIC.c -u4Byte -SecMICGetUINT32( - pu1Byte p - ); - -VOID -SecMICPutUINT32( - pu1Byte p, - u4Byte val -); - -VOID -SecMICClear( - MicData *micdata -); - -VOID -SecMICSetKey( - MicData *micdata, - pu1Byte key -); - -VOID -SecMICAppendByte( - MicData *micdata, - u1Byte b -); - -VOID -SecMICAppend( - MicData *micdata, - pu1Byte src, - s4Byte nBytes -); - -VOID -SecMICGetMIC( - MicData *micdata, - pu1Byte dst -); -//end MIC - -//2004/09/15, kcwu -//u4Byte *AES_SetKey(const u4Byte in_key[], const u4Byte key_len, u4Byte e_key[]); -pu4Byte -AES_SetKey( - const u4Byte in_key[], - const u4Byte key_len, - u4Byte e_key[] -); - -void AES_WRAP(PADAPTER Adapter, - u1Byte* plain, int plain_len, - u1Byte * iv, int iv_len, - u1Byte * kek, int kek_len, - u1Byte *cipher, u2Byte *cipher_len -); - - - -void AES_UnWRAP(PADAPTER Adapter, - u1Byte * cipher, int cipher_len, - u1Byte * kek, int kek_len, - u1Byte * plain); - - -void TestAES_WRAP(PADAPTER Adapter); -//Add for CKIP , by CCW - -//---------------------------------------------------------------------------- -//CKIP.c -//---------------------------------------------------------------------------- -void -CKIP_TEST( - ADAPTER * Adapter - ); - -int -DecodeCKIP( - ADAPTER * Adapter, - UCHAR *pkt, - int pktlen, - UCHAR *key, - int mickeyid - ); - -int -EncodeCKIP( - ADAPTER * Adapter, - UCHAR *pkt, - int pktlen, - UCHAR *hdr, - UCHAR *key, - int keylen, - int mickeyid - ); - -int -ckip_miccalc( - ADAPTER * Adapter, - UCHAR *CK, - UCHAR *pDA, - UCHAR *pSA, - UCHAR *payload, - int payloadlen, - UCHAR *calcmic, - int mickeyid - ); - -int -ckip_encrypt( - UCHAR *CK, - UCHAR *iv, - UCHAR *ecr, - int ecrlen - ); - -void -AES_Encrypt( - const ULONG in_blk[4], - ULONG out_blk[4], - ULONG e_key[] - ); - - -BOOLEAN -SecInsertDenyBssidList( - PRT_SECURITY_T pSec, - u1Byte BssidToDeny[6], - u8Byte DenyStartTime -); - -BOOLEAN -SecIsInDenyBssidList( - PRT_SECURITY_T pSec, - u1Byte BssidToCheck[6] -); - -BOOLEAN -SecFillHeader( - PADAPTER Adapter, - PRT_TCB pTcb -); - - -BOOLEAN -SecIsEAPOLPacket( - IN PADAPTER Adapter, - IN POCTET_STRING pPduOS -); - -BOOLEAN -SecIsEAPOLKEYPacket( - IN PADAPTER Adapter, - IN POCTET_STRING pPduOS - ); - -VOID -SecSetPMKID( - IN PADAPTER Adapter, - IN PN5_802_11_PMKID pPMKid -); - - -int -SecIsInPMKIDList( - IN PADAPTER Adapter, - IN pu1Byte bssid -); - - -VOID -SecCatPMKID( - IN PADAPTER Adapter, - IN pu1Byte CurAPbssid, - IN PRT_WLAN_BSS pBssDesc -); - - -BOOLEAN -SecDropForKeyAbsent( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID -SecSetSwEncryptionDecryption( - PADAPTER Adapter, - BOOLEAN bSWTxEncrypt, - BOOLEAN bSWRxDecrypt -); - -BOOLEAN -SecIsTxKeyInstalled( - IN PADAPTER pAdapter, - IN pu1Byte pRA -); - -void -Supplicant_AES_UnWRAP( - PADAPTER Adapter, - u1Byte * cipher, - int cipher_len, - u1Byte * kek, - int kek_len, - u1Byte * plain -); - -RT_SEC_STATUS -SecSWMFPDecryption( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ); - -RT_SEC_STATUS -SecRxDescryption( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ); - -void -SecAppenMMIE( - IN PADAPTER pAdapter, - OUT POCTET_STRING posFrame - ); - -BOOLEAN -SecStaGetANoseForS5( - IN PADAPTER Adapter, - IN POCTET_STRING pPduOS - ); - -BOOLEAN -SecStaGenPMKForS5( - IN PADAPTER Adapter - ); - -RT_STATUS -OnSAQueryReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -OnSAQueryRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -BOOLEAN -SecFillProtectTxMgntFrameHeader( - IN PADAPTER pAdapter, - IN PRT_TCB pTcb - ); - -VOID -SAQueryTimerCallback( - IN PRT_TIMER pTimer - ); - -// -// --------------------------------------------------------------- -// 2011/03/04 MH Move all new CAN search metho to here forcommon binary . -// We need to reorganize the locaton in he future. -// - -VOID -SecUpdateSWGroupKeyInfo( - IN PADAPTER Adapter, - IN u4Byte KeyIndex, - IN u4Byte KeyLength, - IN pu1Byte KeyMaterial - ); - -#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1) -#define IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT() TRUE - -VOID -SEC_AsocEntry_ResetEntry( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry - ); - -#else //#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1) -#define IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT() FALSE -#define SEC_AsocEntry_ResetEntry(_Adapter, _pEntry) - -#endif //#if (HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW == 1) - - -// -// 2011/03/04 MH Move all new CAN search metho to here forcommon binary . -// We need to reorganize the locaton in he future. -// --------------------------------------------------------------- -// - -//#define HW_EN_DE_CRYPTION_FOR_NEW_CAM_SEARCH_FLOW 1 - - -#endif // #ifndef __INC_SECURITYGEN_H diff --git a/network/wlan/WDI/COMMON/Supplicant.h b/network/wlan/WDI/COMMON/Supplicant.h deleted file mode 100644 index bd11d0a1..00000000 --- a/network/wlan/WDI/COMMON/Supplicant.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef __INC_SUPPLICANT_H -#define __INC_SUPPLICANT_H - - -#endif // #ifndef __INC_SUPPLICANT_H - diff --git a/network/wlan/WDI/COMMON/TCPOFFLOADGen.h b/network/wlan/WDI/COMMON/TCPOFFLOADGen.h deleted file mode 100644 index 3b5c07bc..00000000 --- a/network/wlan/WDI/COMMON/TCPOFFLOADGen.h +++ /dev/null @@ -1,41 +0,0 @@ -#include "Mp_Precomp.h" - -#if TCP_OFFLOAD_SUPPORT -// -// Description: -// Get Register or Hal info to Set up Support TCP-Offload Mode -VOID -TCP_OFFLOAD_Init( - IN PADAPTER pAdapter -); - -// -// Description: -// Set Current by OID or User mode -// -// Note : -// PRT_SUPPORT_TCPOFFLOAD_CAP "Must" call TCP_OFFLOAD_CheckSupport before call TCP_OFFLOAD_SetCap - -VOID -TCP_OFFLOAD_SetCap( - IN PADAPTER pAdapter, - IN PRT_SUPPORT_TCPOFFLOAD_CAP pSetSupTCPCap -); - -// -// Description: -// Check support or not !! -// -BOOLEAN -TCP_OFFLOAD_CheckSupport( - IN PADAPTER pAdapter, - IN PRT_SUPPORT_TCPOFFLOAD_CAP pSetSupTCPCap -); - -#else // #if !TCP_OFFLOAD_SUPPORT - -#define TCP_OFFLOAD_Init(_pAdapter) -#define TCP_OFFLOAD_SetCap(_pAdapter, _pSetSupTCPCap) -#define TCP_OFFLOAD_CheckSupport(_pAdapter, _pSetSupTCPCap) FALSE - -#endif // #if TCP_OFFLOAD_SUPPORT \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/TCPOFFLOAD_Typt.h b/network/wlan/WDI/COMMON/TCPOFFLOAD_Typt.h deleted file mode 100644 index 1686fefa..00000000 --- a/network/wlan/WDI/COMMON/TCPOFFLOAD_Typt.h +++ /dev/null @@ -1,157 +0,0 @@ -#ifndef __INC_TCPOFFLOAD_H -#define __INC_TCPOFFLOAD_H -/* -typedef struct _NDIS_TASK_TCP_IP_CHECKSUM { - struct { - ULONG IpOptionsSupported; - ULONG TcpOptionsSupported; - ULONG TcpChecksum; - ULONG UdpChecksum; - ULONG IpChecksum; - } V4Transmit; - struct { - ULONG IpOptionsSupported; - ULONG TcpOptionsSupported; - ULONG TcpChecksum; - ULONG UdpChecksum; - ULONG IpChecksum; - } V4Receive; - struct { - ULONG IpOptionsSupported; - ULONG TcpOptionsSupported; - ULONG TcpChecksum; - ULONG UdpChecksum; - } V6Transmit; - struct { - ULONG IpOptionsSupported; - ULONG TcpOptionsSupported; - ULONG TcpChecksum; - ULONG UdpChecksum; - } V6Receive; -} NDIS_TASK_TCP_IP_CHECKSUM, *PNDIS_TASK_TCP_IP_CHECKSUM; - -*/ -typedef struct _RT_SUPPORT_CHECKSUM_TYPE{ - u4Byte IpOptionsSupported; - u4Byte TcpOptionsSupported; - u4Byte TcpChecksum; - u4Byte UdpChecksum; - u4Byte IpChecksum; -}RT_SUPPORT_CHECKSUM_TYPE, *PRT_SUPPORT_CHECKSUM_TYPE; - - - -typedef struct _RT_SUPPORT_TCPOFFLOAD_CAP{ - RT_SUPPORT_CHECKSUM_TYPE IPV4Send; - RT_SUPPORT_CHECKSUM_TYPE IPV4Recv; - RT_SUPPORT_CHECKSUM_TYPE IPV6Send; - RT_SUPPORT_CHECKSUM_TYPE IPV6Recv; -}RT_SUPPORT_TCPOFFLOAD_CAP, *PRT_SUPPORT_TCPOFFLOAD_CAP; - - - -// IPv4 used Tx : bit1 , Rx : bit2 -// IPv6 used Tx : bit5 , Rx : bit6 -typedef enum _RT_SUPPORT_TCPOFFLOAD_MODE{ - TCPOFFLOAD_DISAB = 0x00, - TCPOFFLOAD_IPV4_TX = 0x01, - TCPOFFLOAD_IPV4_RX = 0x02, - TCPOFFLOAD_IPV4_TRX = 0x03, - TCPOFFLOAD_IPV6_TX = 0x10, - TCPOFFLOAD_IPV6_RX = 0x20, - TCPOFFLOAD_IPV6_TRX = 0x30, - TCPOFFLOAD_IPV46_TX = 0x11, - TCPOFFLOAD_IPV46_RX = 0x22, - TCPOFFLOAD_IPV46_TRX = 0x33, -}RT_SUPPORT_TCPOFFLOAD_MODE,*PRT_SUPPORT_TCPOFFLOAD_MODE; - - -typedef enum _RT_TCPOFFLOAD_TX_MODE{ - TCPOFFLOAD_TX_DISAB = 0x00, - TCPOFFLOAD_TX_IPV4_IP = 0x01, - TCPOFFLOAD_TX_IPV4_TCP = 0x02, - TCPOFFLOAD_TX_IPV4_UDP = 0x04, - TCPOFFLOAD_TX_IPV6_IP = 0x10, - TCPOFFLOAD_TX_IPV6_TCP = 0x20, - TCPOFFLOAD_TX_IPV6_UDP = 0x40, -}RT_TCPOFFLOAD_TX_MODE,*PRT_TCPOFFLOAD_TX_MODE; - - -#define TCPOFFLOAD_SUPPORT_OPTION(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV4Recv.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV4Recv.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV4Send.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV6Recv.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV6Send.TcpOptionsSupported == 1) \ - ) - -#define TCPOFFLOAD_SUPPORT_IPV4(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV4Recv.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV4Recv.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV4Recv.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Recv.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Recv.UdpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV4Send.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.UdpChecksum == 1) \ - ) - -#define TCPOFFLOAD_SUPPORT_IPV4_TX(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV4Send.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV4Send.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Send.UdpChecksum == 1) \ - ) - -#define TCPOFFLOAD_SUPPORT_IPV4_RX(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV4Recv.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV4Recv.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV4Recv.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Recv.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV4Recv.UdpChecksum == 1) \ - ) - - - -#define TCPOFFLOAD_SUPPORT_IPV6(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV6Recv.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV6Recv.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.UdpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV6Send.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.UdpChecksum == 1) \ - ) - -#define TCPOFFLOAD_SUPPORT_IPV6_TX(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV6Send.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV6Send.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Send.UdpChecksum == 1) \ - ) - -#define TCPOFFLOAD_SUPPORT_IPV6_RX(_pSetSupTCPCap) \ - ( \ - ((_pSetSupTCPCap)->IPV6Recv.IpOptionsSupported == 1 ) || \ - ((_pSetSupTCPCap)->IPV6Recv.TcpOptionsSupported == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.IpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.TcpChecksum == 1) || \ - ((_pSetSupTCPCap)->IPV6Recv.UdpChecksum == 1) \ - ) -#endif diff --git a/network/wlan/WDI/COMMON/TDLSGen.h b/network/wlan/WDI/COMMON/TDLSGen.h deleted file mode 100644 index 3a8af444..00000000 --- a/network/wlan/WDI/COMMON/TDLSGen.h +++ /dev/null @@ -1,370 +0,0 @@ -#ifndef __INC_TDLSGEN_H -#define __INC_TDLSGEN_H - -#if (TDLS_SUPPORT == 1) -VOID -TDLS_Init( - PADAPTER Adapter - ); - -VOID -TDLS_Reset( - PADAPTER Adapter - ); - -VOID -TDLS_QueryCapability( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -TDLS_IndicatePacket( - PADAPTER Adapter, - POCTET_STRING pPduOS - ); - -BOOLEAN -TDLS_IsRxTDLSPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -BOOLEAN -TDLS_IsTxTDLSPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -TDLS_OnAsocOK( - PADAPTER Adapter, - OCTET_STRING asocpdu - ); - -VOID -TDLS_OnAddBaRsp( - PADAPTER Adapter, - POCTET_STRING pPduOS - ); - -VOID -TDLS_OnBeacon_BSS( - PADAPTER pAdapter, - OCTET_STRING osBeacon - ); - -PRT_WLAN_STA -TDLS_PS_CheckPsTx( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -TDLS_PS_OnTx( - PADAPTER pAdapter, - PRT_WLAN_STA pEntry, - PRT_TCB pTcb - ); - -PRT_WLAN_STA -TDLS_PS_UpdatePeerPSState( - PADAPTER Adapter, - POCTET_STRING pPduOS, - BOOLEAN bTriggerFrame - ); - -VOID -TDLS_PS_Sleep( - PADAPTER Adapter, - RT_TDLS_PS_STATE StateToSet - ); - -BOOLEAN -TDLS_CS_BufferCSTx( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -TDLS_PrepareTxFeedback( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -TDLS_UpdatePeer( - PADAPTER Adapter, - PRT_WLAN_STA pEntry - ); - -VOID -TDLS_UpdatePeerStatus( - PADAPTER Adapter - ); - -BOOLEAN -TDLS_GetPwrMgntInfo( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -TDLS_SetConfiguration( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength - ); - -BOOLEAN -TDLS_CheckPeer( - PADAPTER Adapter, - pu1Byte Addr - ); - -VOID -TDLS_RemovePeer( - PADAPTER Adapter, - pu1Byte Addr - ); - -VOID -TDLS_LinkStatusWatchDog( - PADAPTER Adapter - ); - -VOID -TDLS_Stop( - PADAPTER Adapter - ); - -VOID -TDLS_Release( - PADAPTER Adapter - ); - -RT_STATUS -TDLS_AllocateMemory( - IN PADAPTER Adapter - ); - -VOID -TDLS_FreeMemory( - IN PADAPTER Adapter - ); - -RT_STATUS -TDLS_OnDiscoveryRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS - ); - -RT_STATUS -TDLS_OnSetupReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnSetupRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnSetupConfirm( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnTearDown( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnDiscoveryReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnTrafficInd( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnTrafficRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnChnlSwitchReq( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnChnlSwitchRsp( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnTunneledProbeReq( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -RT_STATUS -TDLS_OnTunneledProbeRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING pPduOS, - IN u4Byte contentOffset - ); - -VOID -TDLS_CountTxStatistics( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - ); - -VOID -TDLS_GetTxMacId( - IN PADAPTER Adapter, - IN pu1Byte Addr, - OUT pu4Byte MacID - ); - -VOID -TDLS_GetHtAMPDU( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PRT_TCB pTcb - ); - -VOID -TDLS_GetTxRatrIndex( - IN PADAPTER Adapter, - IN pu1Byte Addr, - OUT pu1Byte RatrIndex - ); - -VOID -TDLS_CheckCapability( - IN PADAPTER Adapter - ); - -VOID -TDLS_GetValueFromBeaconOrProbeRsp( - IN PADAPTER Adapter, - IN POCTET_STRING pMmpdu, - IN PRT_WLAN_BSS pBssDesc - ); - -VOID -TDLS_RxTranslateHeader( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -TDLS_TxTranslateHeader( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN PROTOCOL_TYPE Type - ); - -VOID -TDLS_CheckAggregation( - IN PADAPTER Adapter, - IN pu1Byte Addr, - IN PRT_TCB pTcb - ); - -#else // #if (TDLS_SUPPORT != 1) -#define TDLS_Init(Adapter) -#define TDLS_Reset(Adapter) -#define TDLS_QueryCapability(Adapter, pTcb) -#define TDLS_IndicatePacket(Adapter, pPduOS) (FALSE) -#define TDLS_IsRxTDLSPacket(Adapter, pRfd) (FALSE) -#define TDLS_IsTxTDLSPacket(Adapter, pTcb) (FALSE) -#define TDLS_OnAsocOK(Adapter, asocpdu) -#define TDLS_OnAddBaRsp(Adapter, pPduOS) -#define TDLS_OnBeacon_BSS(pAdapter, osBeacon) -#define TDLS_PS_CheckPsTx(Adapter, pTcb) (NULL) -#define TDLS_PS_OnTx(pAdapter, pEntry, pTcb) (FALSE) -#define TDLS_PS_UpdatePeerPSState(Adapter, pPduOS, bTriggerFrame) (NULL) -#define TDLS_PS_Sleep(Adapter, StateToSet) -#define TDLS_CS_BufferCSTx(Adapter, pTcb) (FALSE) -#define TDLS_PrepareTxFeedback(Adapter, pTcb) (FALSE) -#define TDLS_UpdatePeer(Adapter, pEntry) -#define TDLS_UpdatePeerStatus(Adapter) -#define TDLS_GetPwrMgntInfo(Adapter,pTcb) (FALSE) -#define TDLS_SetConfiguration(Adapter, InformationBuffer, InformationBufferLength) -#define TDLS_CheckPeer(Adapter, Addr) (FALSE) -#define TDLS_RemovePeer(Adapter,Addr) -#define TDLS_LinkStatusWatchDog(Adapter) -#define TDLS_Stop(Adapter) -#define TDLS_Release(Adapter) -#define TDLS_AllocateMemory(Adapter) (RT_STATUS_SUCCESS) -#define TDLS_FreeMemory(Adapter) -#define TDLS_ResetAsocEntry(_pAdapter, _pEntry) -#define TDLS_CountTxStatistics(_pAdapter, _pTcb) -#define TDLS_GetTxMacId(_pAdapter, _Addr, _MacID) -#define TDLS_GetHtAMPDU(_pAdapter, _Addr, _pTcb) -#define TDLS_GetTxRatrIndex(_pAdapter, _Addr, _RatrIndex) -#define TDLS_CheckCapability(_pAdapter) -#define TDLS_GetValueFromBeaconOrProbeRsp(_pAdapter, _pMmpdu, _pBssDesc) -#define TDLS_RxTranslateHeader(_pAdapter, _pRfd) -#define TDLS_TxTranslateHeader(_pAdapter, _pTcb, _Type) -#define TDLS_CheckAggregation(_pAdapter, _Addr, _pTcb) - -__inline RT_STATUS TDLS_OnDiscoveryRsp(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnSetupReq(PADAPTER pAdapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnSetupRsp(PADAPTER pAdapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnSetupConfirm(PADAPTER pAdapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnTearDown(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnDiscoveryReq(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnTrafficInd(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnTrafficRsp(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnChnlSwitchReq(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnChnlSwitchRsp(PADAPTER Adapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnTunneledProbeReq(PADAPTER pAdapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} -__inline RT_STATUS TDLS_OnTunneledProbeRsp(PADAPTER pAdapter, PRT_RFD pRfd, POCTET_STRING pPduOS, u4Byte contentOffset) {return RT_STATUS_SUCCESS;} - -#define GET_TDLS_ENABLED(__pMgntInfo) FALSE -#define SET_TDLS_ENABLED(__pMgntInfo, _value) -#define GET_TDLS_WIFITEST(__pMgntInfo) FALSE -#define IS_TDL_EXIST(_pMgntInfo) FALSE -#define GET_TDLS_WIFITESTBED_RADIO_OFF(__pMgntInfo) FALSE - -#endif // end of else of #if (TDLS_SUPPORT == 1) - - -#endif diff --git a/network/wlan/WDI/COMMON/TSGen.c b/network/wlan/WDI/COMMON/TSGen.c deleted file mode 100644 index 36543f4b..00000000 --- a/network/wlan/WDI/COMMON/TSGen.c +++ /dev/null @@ -1,735 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "TSGen.tmh" -#endif - -VOID -TsAddBaProcess( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PTX_TS_RECORD pTxTs = (PTX_TS_RECORD)pTimer->Context; - - TsInitAddBA(Adapter, pTxTs, BA_POLICY_IMMEDIATE, FALSE); - RT_TRACE(COMP_QOS, DBG_LOUD, ("TsAddBaProcess(): ADDBA Req is started!! \n")); -} - - -VOID -ResetTsCommonInfo( - PTS_COMMON_INFO pTsCommonInfo - ) -{ - PlatformZeroMemory(pTsCommonInfo->Addr, 6); - PlatformZeroMemory(&pTsCommonInfo->TSpec, WMM_TSPEC_BODY_LENGTH); - PlatformZeroMemory(&pTsCommonInfo->TClass, sizeof(QOS_TCLAS)*TCLAS_NUM); - pTsCommonInfo->TClasProc = 0; - pTsCommonInfo->TClasNum = 0; -} - -VOID -ResetTxTsEntry( - PTX_TS_RECORD pTS - ) -{ - ResetTsCommonInfo(&pTS->TsCommonInfo); - pTS->TxCurSeq = 0; - pTS->bAddBaReqInProgress = FALSE; - pTS->bAddBaReqDelayed = FALSE; - pTS->bUsingBa = FALSE; - ResetBaEntry(&pTS->TxAdmittedBARecord); //For BA Originator - ResetBaEntry(&pTS->TxPendingBARecord); -} - -VOID -ResetRxTsEntry( - PRX_TS_RECORD pTS - ) -{ - ResetTsCommonInfo(&pTS->TsCommonInfo); - pTS->RxIndicateSeq = 0xffff; // This indicate the RxIndicateSeq is not used now!! - pTS->RxIndicateState = 0; // Reset indicate state!! - ResetBaEntry(&pTS->RxAdmittedBARecord); // For BA Recepient - - //Init it for avoid drop first packet. - pTS->RxLastFragNum = 0xff; - pTS->RxLastSeqNum = 0xffff; -} - -VOID -TSInitialize( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PTX_TS_RECORD pTxTS = pMgntInfo->TxTsRecord; - PRX_TS_RECORD pRxTS = pMgntInfo->RxTsRecord; - PRX_REORDER_ENTRY pRxReorderEntry = pMgntInfo->RxReorderEntry; - u2Byte count = 0; - - RT_TRACE(COMP_QOS, DBG_LOUD, ("===>TSInitialize()\r\n")); - - // Initialize Tx TS related info. - RTInitializeListHead(&pMgntInfo->Tx_TS_Admit_List); - RTInitializeListHead(&pMgntInfo->Tx_TS_Pending_List); - RTInitializeListHead(&pMgntInfo->Tx_TS_Unused_List); - for(count = 0; count < TOTAL_TS_NUM; count++) - { - // - // The timers for the operation of Traffic Stream and Block Ack. - // DLS related timer will be add here in the future!! - // - PlatformInitializeTimer( - Adapter, - &pTxTS->TsAddBaTimer, - (RT_TIMER_CALL_BACK)TsAddBaProcess, - (PVOID)pTxTS, - "TxTsAddBaTimer" ); - - PlatformInitializeTimer( - Adapter, - &pTxTS->TxPendingBARecord.Timer, - (RT_TIMER_CALL_BACK)BaSetupTimeOut, - (PVOID)pTxTS, - "TxPendingBARecordTimer"); - - PlatformInitializeTimer( - Adapter, - &pTxTS->TxAdmittedBARecord.Timer, - (RT_TIMER_CALL_BACK)TxBaInactTimeout, - (PVOID) pTxTS, - "TxAdmittedBARecordTimer" ); - - ResetTxTsEntry(pTxTS); - RTInsertTailList(&pMgntInfo->Tx_TS_Unused_List, &pTxTS->TsCommonInfo.List); - pTxTS++; - } - - // Initialize Rx TS related info. - RTInitializeListHead(&pMgntInfo->Rx_TS_Admit_List); - RTInitializeListHead(&pMgntInfo->Rx_TS_Pending_List); - RTInitializeListHead(&pMgntInfo->Rx_TS_Unused_List); - for(count = 0; count < TOTAL_TS_NUM; count++) - { - RTInitializeListHead(&pRxTS->RxPendingPktList); - - PlatformInitializeTimer( - Adapter, - &pRxTS->RxAdmittedBARecord.Timer, - (RT_TIMER_CALL_BACK)RxBaInactTimeout, - (PVOID)pRxTS, - "RxAdmittedBARecordTimer"); - - PlatformInitializeTimer( - Adapter, - &pRxTS->RxPktPendingTimer, - (RT_TIMER_CALL_BACK)RxPktPendingTimeout, - (PVOID)pRxTS, - "RxPktPendingTimer"); - - ResetRxTsEntry(pRxTS); - RTInsertTailList(&pMgntInfo->Rx_TS_Unused_List, &pRxTS->TsCommonInfo.List); - pRxTS++; - } - - // Initialize unused Rx Reorder List. - RTInitializeListHead(&pMgntInfo->RxReorder_Unused_List); - for(count = 0; count < REORDER_ENTRY_NUM; count++) - { - RTInsertTailList(&pMgntInfo->RxReorder_Unused_List, &pRxReorderEntry->List); - pRxReorderEntry++; - } -} - -VOID -AdmitTS( - PADAPTER Adapter, - PTS_COMMON_INFO pTsCommonInfo, - u4Byte InactTime - ) -{ -} - -VOID -ExtendRxTS( - PADAPTER Adapter, - PRX_TS_RECORD pRxTS - ) -{ - // TS part needs to be implemented in the future. -} - -PRT_LIST_ENTRY -SearchTSList( - PRT_LIST_ENTRY pTSList, - pu1Byte Addr, - u1Byte TID, - DIRECTION_VALUE Dir - ) -{ - BOOLEAN bIsFound = FALSE; - PTS_COMMON_INFO pTS_Record = (PTS_COMMON_INFO) RTGetHeadList(pTSList); - - while(&pTS_Record->List != pTSList) - { - if( PlatformCompareMemory(pTS_Record->Addr, Addr, 6) == 0 ) - { - if(GET_TSPEC_BODY_TSINFO_TSID(pTS_Record->TSpec) == TID) - { - if(GET_TSPEC_BODY_TSINFO_DIRECTION(pTS_Record->TSpec) == Dir) - { - bIsFound = TRUE; - break; - } - } - } - pTS_Record = (PTS_COMMON_INFO)RTNextEntryList(&pTS_Record->List); - } - - if(bIsFound) - return &pTS_Record->List; - else - return NULL; -} - - -PTS_COMMON_INFO -SearchAdmitTRStream( - PMGNT_INFO pMgntInfo, - pu1Byte Addr, - u1Byte TID, - TR_SELECT TxRxSelect //Tx:0, Rx:1 -) -{ - //DIRECTION_VALUE dir; - u1Byte dir; - BOOLEAN search_dir[4] = {0, 0, 0, 0}; - PRT_LIST_ENTRY psearch_list = NULL; - PTS_COMMON_INFO pRet=NULL; - - if(pMgntInfo->ApType > 0) - { - if(TxRxSelect == TX_DIR) - { - search_dir[DIR_DOWN] = TRUE; - search_dir[DIR_BI_DIR]= TRUE; - } - else - { - search_dir[DIR_UP] = TRUE; - search_dir[DIR_BI_DIR]= TRUE; - } - } - else if(pMgntInfo->mIbss) - { - if(TxRxSelect == TX_DIR) - search_dir[DIR_UP] = TRUE; - else - search_dir[DIR_DOWN] = TRUE; - } - else - { - if(TxRxSelect == TX_DIR) - { - search_dir[DIR_UP] = TRUE; - search_dir[DIR_BI_DIR]= TRUE; - search_dir[DIR_DIRECT]= TRUE; - } - else - { - search_dir[DIR_DOWN] = TRUE; - search_dir[DIR_BI_DIR]= TRUE; - search_dir[DIR_DIRECT]= TRUE; - } - } - - if(TxRxSelect == TX_DIR) - psearch_list = &pMgntInfo->Tx_TS_Admit_List; - else - psearch_list = &pMgntInfo->Rx_TS_Admit_List; - - //for(dir = DIR_UP; dir <= DIR_BI_DIR; dir++) - for(dir = 0; dir <= DIR_BI_DIR; dir++) - { - if(search_dir[dir] ==FALSE ) - continue; - - pRet = (PTS_COMMON_INFO)SearchTSList(psearch_list, Addr, TID, (DIRECTION_VALUE)dir); - - if(pRet != NULL) - break; - } - - if(pRet != NULL) - return pRet ; - else - return NULL; -} - -VOID -MakeTSEntry( - OUT PTS_COMMON_INFO pTsCommonInfo, - IN pu1Byte Addr, - IN pu1Byte pTSPEC, - IN PQOS_TCLAS pTCLAS, - IN u1Byte TCLAS_Num, - IN u1Byte TCLAS_Proc - ) -{ - u1Byte count; - - if(pTsCommonInfo == NULL) - return; - - PlatformMoveMemory(pTsCommonInfo->Addr, Addr, 6); - - if(pTSPEC != NULL) - PlatformMoveMemory((pu1Byte)(&(pTsCommonInfo->TSpec)), (pu1Byte)pTSPEC, WMM_TSPEC_BODY_LENGTH); - - for(count = 0; count < TCLAS_Num; count++) - PlatformMoveMemory((pu1Byte)(&(pTsCommonInfo->TClass[count])), (pu1Byte)pTCLAS, sizeof(QOS_TCLAS)); - - pTsCommonInfo->TClasProc = TCLAS_Proc; - pTsCommonInfo->TClasNum = TCLAS_Num; -} - - -BOOLEAN -GetTs( - PADAPTER Adapter, - PTS_COMMON_INFO *ppTS, - pu1Byte Addr, - u1Byte TID, - TR_SELECT TxRxSelect, //Rx:1, Tx:0 - BOOLEAN bAddNewTs - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte UP=0; - - // - // We do not build any TS for Broadcast or Multicast stream. - // So reject these kinds of search here. - // - if(MacAddr_isBcst(Addr) || MacAddr_isMulticast(Addr)) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("Broad or multicast return\r\n")); - return FALSE; - } - - if(pMgntInfo->pStaQos->CurrentQosMode == QOS_DISABLE) - {//only use one TS - UP = 0; - } - else if(pMgntInfo->pStaQos->CurrentQosMode & QOS_WMM) - { - // In WMM case: we use 4 TID only - - // - // We use 7 TIDs to fit differentiated service from IP layer - // to meet different implementation of APs. - // 2008.12.18. - // - UP = TID; - } - - *ppTS = SearchAdmitTRStream( - pMgntInfo, - Addr, - UP, - TxRxSelect); - - if(*ppTS != NULL) - { - RT_TRACE(COMP_QOS, DBG_TRACE, ("SearchAdmitTRStream get ppTS\r\n")); - return TRUE; - } - else - { - if(bAddNewTs == FALSE) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("bAddNewTs == FALSE\r\n")); - return FALSE; - } - else - { - // - // Create a new Traffic stream for current Tx/Rx - // This is for EDCA and WMM to add a new TS. - // For HCCA or WMMSA, TS cannot be addmit without negotiation. - // - u1Byte TSpec[WMM_TSPEC_BODY_LENGTH]={0}; - - pu1Byte pTSInfo= TSpec; - PRT_LIST_ENTRY pUnusedList = - (TxRxSelect == TX_DIR)? - (&pMgntInfo->Tx_TS_Unused_List): - (&pMgntInfo->Rx_TS_Unused_List); - - PRT_LIST_ENTRY pAddmitList = - (TxRxSelect == TX_DIR)? - (&pMgntInfo->Tx_TS_Admit_List): - (&pMgntInfo->Rx_TS_Admit_List); - - DIRECTION_VALUE Dir = - (ACTING_AS_AP(Adapter))? - ((TxRxSelect==TX_DIR)?DIR_DOWN:DIR_UP): - ((TxRxSelect==TX_DIR)?DIR_UP:DIR_DOWN); - RT_TRACE(COMP_QOS, DBG_TRACE, ("GetTs(): Add New TS %s Entry.\n", TxRxSelect?"Rx":"Tx")); - RT_PRINT_ADDR(COMP_QOS, DBG_TRACE, "PeerAddress:", Addr); - RT_TRACE(COMP_QOS, DBG_TRACE, ("UserPriority: %d\n", UP)); - if(!RTIsListEmpty(pUnusedList)) - { - (*ppTS) = (PTS_COMMON_INFO)RTRemoveHeadList(pUnusedList); - - if(TxRxSelect==TX_DIR) - ResetTxTsEntry((PTX_TS_RECORD) *ppTS); - else - ResetRxTsEntry((PRX_TS_RECORD) *ppTS); - - // Prepare TS Info releated field - SET_TSPEC_BODY_TSINFO_TRAFFIC_TYPE(pTSInfo, 0); // Traffic type: WMM is reserved in this field - SET_TSPEC_BODY_TSINFO_TSID(pTSInfo, UP); // TSID - SET_TSPEC_BODY_TSINFO_DIRECTION(pTSInfo, Dir); // Direction: if there is DirectLink, this need additional consideration. - SET_TSPEC_BODY_TSINFO_ACCESS_POLICY(pTSInfo, 1); // Access policy - SET_TSPEC_BODY_TSINFO_AGGREGATION(pTSInfo, 0); // Aggregation - SET_TSPEC_BODY_TSINFO_PSB(pTSInfo, 0); // Aggregation - SET_TSPEC_BODY_TSINFO_UP(pTSInfo, UP); // User priority - SET_TSPEC_BODY_TSINFO_ACK_POLICY(pTSInfo, 0); // Ack policy - SET_TSPEC_BODY_TSINFO_SCHEDULE(pTSInfo, 0); // Schedule - - MakeTSEntry(*ppTS, Addr, TSpec, NULL, 0, 0); - AdmitTS(Adapter, *ppTS, 0); - RTInsertTailList(pAddmitList, &((*ppTS)->List)); - - // if there is DirectLink, we need to do additional operation here!! - - - return TRUE; - } - else - { - RT_ASSERT(FALSE, ("ManageTSInformation(): There is not enough TS record to be used!!")); - return FALSE; - } - } - } - -} - -VOID -RemoveTsEntry( - PADAPTER Adapter, - PTS_COMMON_INFO pTs, - TR_SELECT TxRxSelect - ) -{ - BOOLEAN bInRxProgress = FALSE; - - TsInitDelBA(Adapter, pTs, TxRxSelect); - - RT_TRACE(COMP_QOS, DBG_TRACE, ("RemoveTsEntry(): Remove %s Entry.\n", TxRxSelect?"Rx":"Tx")); - RT_PRINT_ADDR(COMP_QOS, DBG_TRACE, "PeerAddress:", pTs->Addr); - - if(TxRxSelect == RX_DIR) - { - PRX_REORDER_ENTRY pRxReorderEntry; - PRX_TS_RECORD pRxTS = (PRX_TS_RECORD)pTs; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if( PlatformCancelTimer(Adapter, &pRxTS->RxPktPendingTimer) == FALSE ) - { - pRxTS->RxIndicateState = RXTS_INDICATE_IDLE; - } - - if(!GetDefaultAdapter(Adapter)->bRemoveTsInRxPath) - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - else - bInRxProgress = TRUE; - - while(!RTIsListEmpty(&pRxTS->RxPendingPktList)) - { - pRxReorderEntry = (PRX_REORDER_ENTRY)RTRemoveHeadList(&pRxTS->RxPendingPktList); - pRxTS->RxBatchCount--; - ReturnRFDList(Adapter, pRxReorderEntry->pRfd); - RTInsertTailList(&pMgntInfo->RxReorder_Unused_List, &pRxReorderEntry->List); - } - - if(!bInRxProgress) - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - } - else - { - PTX_TS_RECORD pTxTS = (PTX_TS_RECORD)pTs; - PlatformCancelTimer(Adapter, &pTxTS->TsAddBaTimer); - } -} - -VOID -RemovePeerTS( - PADAPTER Adapter, - pu1Byte Addr - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PTS_COMMON_INFO pTS, pTmpTS; - - pTS = (PTS_COMMON_INFO)RTGetHeadList(&pMgntInfo->Tx_TS_Pending_List); - while(&pTS->List != &pMgntInfo->Tx_TS_Pending_List) - { - if(PlatformCompareMemory(pTS->Addr, Addr, 6) == 0) - { - pTmpTS = pTS; - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - RTRemoveEntryList(&pTmpTS->List); - RemoveTsEntry(Adapter, pTmpTS, TX_DIR); -// RemoveMAEntry(Adapter, &pTmpTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Tx_TS_Unused_List, &pTmpTS->List); - } - else - { - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - } - } - - pTS = (PTS_COMMON_INFO)RTGetHeadList(&pMgntInfo->Tx_TS_Admit_List); - while(&pTS->List != &pMgntInfo->Tx_TS_Admit_List) - { - if(PlatformCompareMemory(pTS->Addr, Addr, 6) == 0) - { - pTmpTS = pTS; - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - RTRemoveEntryList(&pTmpTS->List); - RemoveTsEntry(Adapter, pTmpTS, TX_DIR); -// RemoveMAEntry(Adapter, &pTmpTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Tx_TS_Unused_List, &pTmpTS->List); - } - else - { - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - } - } - - pTS = (PTS_COMMON_INFO)RTGetHeadList(&pMgntInfo->Rx_TS_Pending_List); - while(&pTS->List != &pMgntInfo->Rx_TS_Pending_List) - { - if(PlatformCompareMemory(pTS->Addr, Addr, 6) == 0) - { - pTmpTS = pTS; - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - RTRemoveEntryList(&pTmpTS->List); - RemoveTsEntry(Adapter, pTmpTS, RX_DIR); -// RemoveMAEntry(Adapter, &pTmpTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Rx_TS_Unused_List, &pTmpTS->List); - } - else - { - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - } - } - - pTS = (PTS_COMMON_INFO)RTGetHeadList(&pMgntInfo->Rx_TS_Admit_List); - while(&pTS->List != &pMgntInfo->Rx_TS_Admit_List) - { - if(PlatformCompareMemory(pTS->Addr, Addr, 6) == 0) - { - pTmpTS = pTS; - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - RTRemoveEntryList(&pTmpTS->List); - RemoveTsEntry(Adapter, pTmpTS, RX_DIR); -// RemoveMAEntry(Adapter, &pTmpTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Rx_TS_Unused_List, &pTmpTS->List); - } - else - { - pTS = (PTS_COMMON_INFO)RTNextEntryList(&pTS->List); - } - } -} - -VOID -ReleaseAllTSTimer( - PADAPTER Adapter) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PTX_TS_RECORD pTxTS = pMgntInfo->TxTsRecord; - PRX_TS_RECORD pRxTS = pMgntInfo->RxTsRecord; - u1Byte count = 0; - - for(count = 0; count < TOTAL_TS_NUM; count++) - { - // - // The timers for the operation of Traffic Stream and Block Ack. - // DLS related timer will be add here in the future!! - // - PlatformReleaseTimer( - Adapter, - &pTxTS->TsAddBaTimer); - - PlatformReleaseTimer( - Adapter, - &pTxTS->TxPendingBARecord.Timer); - - PlatformReleaseTimer( - Adapter, - &pTxTS->TxAdmittedBARecord.Timer); - - pTxTS++; - } - - for(count = 0; count < TOTAL_TS_NUM; count++) - { - PlatformReleaseTimer( - Adapter, - &pRxTS->RxAdmittedBARecord.Timer); - - PlatformReleaseTimer( - Adapter, - &pRxTS->RxPktPendingTimer); - - pRxTS++; - } -} - - - -VOID -RemoveAllTS( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PTS_COMMON_INFO pTS; - - while(!RTIsListEmpty(&pMgntInfo->Tx_TS_Pending_List)) - { - pTS = (PTS_COMMON_INFO)RTRemoveHeadList(&pMgntInfo->Tx_TS_Pending_List); - RemoveTsEntry(Adapter, pTS, TX_DIR); -// RemoveMAEntry(Adapter, &pTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Tx_TS_Unused_List, &pTS->List); - } - - while(!RTIsListEmpty(&pMgntInfo->Tx_TS_Admit_List)) - { - pTS = (PTS_COMMON_INFO)RTRemoveHeadList(&pMgntInfo->Tx_TS_Admit_List); - RemoveTsEntry(Adapter, pTS, TX_DIR); -// RemoveMAEntry(Adapter, &pTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Tx_TS_Unused_List, &pTS->List); - } - - while(!RTIsListEmpty(&pMgntInfo->Rx_TS_Pending_List)) - { - pTS = (PTS_COMMON_INFO)RTRemoveHeadList(&pMgntInfo->Rx_TS_Pending_List); - RemoveTsEntry(Adapter, pTS, RX_DIR); -// RemoveMAEntry(Adapter, &pTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Rx_TS_Unused_List, &pTS->List); - } - - while(!RTIsListEmpty(&pMgntInfo->Rx_TS_Admit_List)) - { - pTS = (PTS_COMMON_INFO)RTRemoveHeadList(&pMgntInfo->Rx_TS_Admit_List); - RemoveTsEntry(Adapter, pTS, RX_DIR); -// RemoveMAEntry(Adapter, &pTS->Ts_MAInfo); - RTInsertTailList(&pMgntInfo->Rx_TS_Unused_List, &pTS->List); - } -} - -VOID -TsStartAddBaProcess( - PADAPTER Adapter, - PTX_TS_RECORD pTxTS - ) -{ - if(Adapter->MgntInfo.SafeModeEnabled) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("TsStartAddBaProcess ABORT becuase SafeModeEnable\n")); - return; - } - - if(pTxTS->bAddBaReqInProgress == FALSE) - { - pTxTS->bAddBaReqInProgress = TRUE; - - if(pTxTS->bAddBaReqDelayed) - { - RT_TRACE(COMP_QOS, DBG_TRACE, ("TsStartAddBaProcess(): Delayed Start ADDBA after 60 sec!!\n")); - PlatformSetTimer(Adapter, &pTxTS->TsAddBaTimer, TS_ADDBA_DELAY); - } - else - { - RT_TRACE(COMP_QOS, DBG_TRACE, ("TsStartAddBaProcess(): Immediately Start ADDBA now!!\n")); - PlatformSetTimer(Adapter, &pTxTS->TsAddBaTimer, 0); - } - } -} - -VOID -RxTSIndicate( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - OCTET_STRING frame; - u1Byte tid; - u2Byte SeqNum; - - frame.Octet = pRfd->Buffer.VirtualAddress; - frame.Length = pRfd->PacketLength; - tid = Frame_QoSTID(frame, sMacHdrLng); - SeqNum = Frame_SeqNum(frame); - - if(GetTs( - Adapter, - (PTS_COMMON_INFO*) &(pRfd->Status.pRxTS), - Frame_Addr2(frame), - tid, - RX_DIR, - TRUE)) - { - ExtendRxTS(Adapter, pRfd->Status.pRxTS); - - if(pRfd->Status.bIsAMPDU) - ExtendBAEntry(Adapter, &(pRfd->Status.pRxTS->RxAdmittedBARecord)); - - // Reserve for later usage by RxReorder. - pRfd->Status.Seq_Num = SeqNum; - - // For 819X series turbo mode!! - // 2012/09/13 MH This should move to HAL layer. - // 2012/09/14 MH IN a special case, TPLINK WR741ND Atheros AR9341 AP. - // When tested in win7 OS, every 45-50s, AP will send a TID=6 packet to - // NIC for 3 times(6 sec). Then RTWLANU will disable EDCA turbo mode temporarily - // So the throughput will downgrade. We need to ignore the special case. - { - if(tid!=0 && tid!=3) - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - if (Adapter->MgntInfo.bWiFiConfg) - { - pHalData->bIsAnyNonBEPkts = TRUE; - } - else - { - // - // How to Judge,? In busy trafic and then BE packets > VI/VO more than 90%. - // Then in busy traffic and VI/VO > 1M?? - // - } - Adapter->MgntInfo.NumNonBePkt++; - } - else - { - Adapter->MgntInfo.NumBePkt++; - } - } - } - else - { - pRfd->Status.pRxTS = NULL; - - RT_TRACE(COMP_RECV, DBG_LOUD, ("RxTSIndicate(): No TS!! Skip the check!!\n")); - RT_ASSERT(FALSE, ("RxTSIndicate(): No TS allocated!!")); - } -} diff --git a/network/wlan/WDI/COMMON/TSGen.h b/network/wlan/WDI/COMMON/TSGen.h deleted file mode 100644 index bb870e52..00000000 --- a/network/wlan/WDI/COMMON/TSGen.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef __INC_TSGEN_H -#define __INC_TSGEN_H - -// These definition is used for Rx packet reordering. -#define SN_LESS(a, b) (((a-b)&0x800)!=0) -#define SN_EQUAL(a, b) (a == b) - -// Note : -// Window size must < REORDER_ENTRY_NUM - -#define REORDER_WIN_SIZE RX_REORDER_ENTRY_NUM //128 -#define REORDER_ENTRY_NUM RX_REORDER_ENTRY_NUM //tynli_test. ori value = 128 -#define REORDER_WAIT_TIME 10 // (ms) - -VOID -TSInitialize( - PADAPTER Adapter - ); - -VOID -ReleaseAllTSTimer( - PADAPTER Adapter - ); - -BOOLEAN -GetTs( - PADAPTER Adapter, - PTS_COMMON_INFO *ppTS, - pu1Byte Addr, - u1Byte TID, - TR_SELECT TxRxSelect, //Rx:1, Tx:0 - BOOLEAN bAddNewTs - ); - -VOID -RemovePeerTS( - PADAPTER Adapter, - pu1Byte Addr - ); - -VOID -RemoveAllTS( - PADAPTER Adapter - ); - -VOID -TsStartAddBaProcess( - PADAPTER Adapter, - PTX_TS_RECORD pTxTS - ); - -VOID -RxTSIndicate( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -#endif - diff --git a/network/wlan/WDI/COMMON/TcpCheck.h b/network/wlan/WDI/COMMON/TcpCheck.h deleted file mode 100644 index 80323e98..00000000 --- a/network/wlan/WDI/COMMON/TcpCheck.h +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef __INC_TCP_H -#define __INC_TCP_H - -#if TCPREORDER_SUPPORT - -#define TX_TCP_SEQ_CHECK FALSE -#define RX_TCP_SEQ_CHECK FALSE - -#define TCP_SEQ_CHECK_THRESHOLD 100 -#define MAX_HOLD_TCP_TIME 10 //ms -#define MAX_TCP_INTERVAL 50 //ms - - -#define MAX_TCP_BURST_NUM 128 -#define TCP_CONN_CHECK_NUM 8 -#define AVAILABLE_TCP_ENTRY 256 - -typedef struct _TCP_SEQ_REORDER_ENTRY{ - RT_LIST_ENTRY List; - u2Byte nTcpSrcPortNum; - u2Byte nTcpDstPortNum; - u2Byte nTcpLength; - u4Byte nTcpSeqNum; - u1Byte nTcpConnIdx; - PRT_TCB pTcb; -}TCP_SEQ_REORDER_ENTRY, *PTCP_SEQ_REORDER_ENTRY; - -typedef struct _TCP_CONN_ENTRY{ - u2Byte nTcpSrcPortNum; - u2Byte nTcpDestPortNum; - u4Byte nLastTCPSeq; - u4Byte nNextTCPSeq; // expected TCP sequence to send/recv - u4Byte nMinSkipTcpSeq; - u4Byte nMaxTcpSeq; // out-of-order TCP sequence - u4Byte nMaxTcpLength; - u2Byte nBlockNum; - u8Byte usLastArriveTimeStamp; -} TCP_CONN_ENTRY, *PTCP_CONN_ENTRY; - -typedef struct _TCP_SEQ_CHECKER{ - u4Byte nTcpAbnormalCnt; - TCP_CONN_ENTRY TcpConnection[TCP_CONN_CHECK_NUM]; -} TCP_SEQ_CHECKER, *PTCP_SEQ_CHECKER; - -VOID -TxTcpSeqCheck( - PADAPTER Adapter, - PRT_TCB pTcb, - u1Byte SkipBuffers - ); - -VOID -RxTcpSeqCheck( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -TcpReorder_Init( - PADAPTER Adapter - ); - -VOID -TcpReorder_Release( - PADAPTER Adapter - ); - -VOID -TcpReorder_Send( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -#else -#define TcpReorder_Init(_Adapter) -#define TcpReorder_Release(_Adapter) -#define TcpReorder_Send(_Adapter,_Tcb) -#endif - -#endif \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/Transmit.c b/network/wlan/WDI/COMMON/Transmit.c deleted file mode 100644 index 226b7a1a..00000000 --- a/network/wlan/WDI/COMMON/Transmit.c +++ /dev/null @@ -1,3800 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "Transmit.tmh" -#endif - -#define RT_PS_TX_STATUS u4Byte -#define RT_PS_TX_STATUS_SEND_PKT 0 -#define RT_PS_TX_STATUS_PKT_BUFFERED 1 -#define RT_PS_TX_STATUS_PKT_DROPPED 2 - - -RT_PS_TX_STATUS -VerifyPsOnTx( - PADAPTER pAdapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - RT_PS_TX_STATUS txPsStauts = RT_PS_TX_STATUS_SEND_PKT; - OCTET_STRING osMpdu; - pu1Byte pRaddr; - - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(pAdapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_PRE_TRANSMIT)) - { - CLEAR_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_PRE_TRANSMIT); - PreTransmitTCB(pAdapter, pTcb); - return RT_PS_TX_STATUS_PKT_BUFFERED; - } - - if(!IsDataFrame(osMpdu.Octet)) - return txPsStauts; - - pRaddr = Frame_pRaddr(osMpdu); - - if(ACTING_AS_AP(pAdapter)) - { - if( !MacAddr_isMulticast(pRaddr) ) - { // Unicast. - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pRaddr); - - // No entry. - if(pEntry == NULL) - { - // Prefast warning C6011 : Dereferencing NULL pointer 'pEntry'. - //RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "[WARNING] VerifyPsOnTx(): No Entry for client = ", pEntry->MacAddr); - RT_TRACE(COMP_AP, DBG_LOUD, ("[WARNING] VerifyPsOnTx(): No Entry for client!\n")); - return txPsStauts; - } - - // Queue the unicast packet if dest STA is in power-save mode. - if(pEntry->bPowerSave) - { - BOOLEAN bEospPkt = FALSE; - BOOLEAN bUAPSD = FALSE; - if(IsQoSDataFrame(osMpdu.Octet)) - { - // Check the UP for this packet and the UAPSD info from the assoication. - switch( GET_QOS_CTRL_WMM_UP(osMpdu.Octet) ) - { - case 0: - case 3: - bUAPSD = GET_BE_UAPSD(pEntry->WmmStaQosInfo); - break; - case 1: - case 2: - bUAPSD = GET_BK_UAPSD(pEntry->WmmStaQosInfo); - break; - case 4: - case 5: - bUAPSD = GET_VI_UAPSD(pEntry->WmmStaQosInfo); - break; - case 6: - case 7: - bUAPSD = GET_VO_UAPSD(pEntry->WmmStaQosInfo); - break; - } - } - bEospPkt = GET_QOS_CTRL_WMM_EOSP(osMpdu.Octet); - - if(bUAPSD) - { - if(bEospPkt) - { - // It's an ESOP packet, we shall send it. - } - else if(pEntry->WmmEosp != RT_STA_EOSP_STATE_OPENED || !RTIsListEmpty(&(pEntry->WmmPsQueue))) - { - // - // If the packets from the upper layer are queued, such as ping, the protocol layer or the socket - // will block the packets sent until these queued packets are returned. It causes the ping rate with - // large packet size low and fail in the P2P Test item 6.1.12/6.1.13/7.1.5. - // To speed up the sending rate of packets, we copy the system packet to local buffer and indicate - // to os (Ndis) as early. - // By Bruce, 2010-10-15. - // - TCB_CopySystemPacketToLocal(pAdapter, pTcb); - // The SP is ended or the WmmPsQueue is not empty, the following packets shall be queued. - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "VerifyPsOnTx(): Queue ps pkt for wmm client = ", pEntry->MacAddr); - RTInsertTailList(&(pEntry->WmmPsQueue), &(pTcb->List)); - txPsStauts = RT_PS_TX_STATUS_PKT_BUFFERED; - } - else - { // We can send packet immediately because the service period is opend. - BOOLEAN bSupportTxFeedback = FALSE; - - // Check if this chip supports per tx packet feedback. - bSupportTxFeedback = TxFeedbackInstallTxFeedbackInfoForTcb(pAdapter, pTcb); - - if(bSupportTxFeedback) - { - TxFeedbackFillTxFeedbackInfoUserConfiguration( - pTcb, - RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING, - pAdapter, - Ap_PsTxFeedbackCallback, - (PVOID) pEntry - ); - } - - if(bSupportTxFeedback) - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDING; - else - pEntry->WmmEosp = RT_STA_EOSP_STATE_ENDED; - - SET_QOS_CTRL_WMM_EOSP(osMpdu.Octet, 1); - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "VerifyPsOnTx(): Send packet directly wmm open client = ", pEntry->MacAddr); - } - } - else - { - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_REPLY_PS_POLL)) - { // This packet is polled by ps-poll, we shoud send it immediately. - if(!RTIsListEmpty(&(pEntry->PsQueue))) - { // There are still packets queued in the queue, set the more data bit. - SET_80211_HDR_MORE_DATA(osMpdu.Octet, 1); - } - CLEAR_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_REPLY_PS_POLL); - } - else - { - // Legacy PS. - // RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "VerifyPsOnTx(): Queue ps pkt for legacy client = ", pEntry->MacAddr); - RTInsertTailList(&(pEntry->PsQueue), &(pTcb->List)); - txPsStauts = RT_PS_TX_STATUS_PKT_BUFFERED; - } - } - } - } - else - { // Bcst/Mcst. - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_MCAST_DTIM)) - { // DTIM - if(!RTIsListEmpty(&(pMgntInfo->GroupPsQueue))) - { // There are still packets queued in the queue, set the more data bit. - SET_80211_HDR_MORE_DATA(osMpdu.Octet, 1); - } - CLEAR_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_PS_MCAST_DTIM); - } - // Queue the Mcst/Bcst packet if one ore more STA is in power-save mode. - else if(pMgntInfo->PowerSaveStationNum > 0) - { - // RT_TRACE_F(COMP_AP, DBG_LOUD, ("Queue Mcst/Bcst pkt\n")); - RTInsertTailList(&(pMgntInfo->GroupPsQueue), &(pTcb->List)); - txPsStauts = RT_PS_TX_STATUS_PKT_BUFFERED; - } - } - } - else - { - PRT_WLAN_STA pTDLSPsEntry=TDLS_PS_CheckPsTx(pAdapter, pTcb); - - if(pTDLSPsEntry!=NULL) - { - if(TDLS_PS_OnTx(pAdapter, pTDLSPsEntry, pTcb)) - txPsStauts = RT_PS_TX_STATUS_PKT_BUFFERED; - - return txPsStauts; - } - - // Set PwrMgnt bit, by Bruce, 2007-11-09. - //RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "packet:\n", osMpdu.Octet, osMpdu.Length); - SET_80211_HDR_PWR_MGNT(osMpdu.Octet, MgntGetPwrMgntInfo(pAdapter, pTcb, TRUE)); - // - // Move from PreTransmitTCB() becsauce the TCBs in the wait queues sent without passing - // through PreTransmitTCB(). - // Only those packets without pwr mgnt bit set are considered as sent in awake - // By Bruce, 2008-01-18. - // - if(!GET_80211_HDR_PWR_MGNT(osMpdu.Octet)) - pMgntInfo->bAwakePktSent = TRUE; - if(pMgntInfo->mPss != eAwake) - { - do - { - // Note, if the NULL frame without pwr mgnt bit set, the packet still should be inserted into the queue. - if(IsMgntNullFrame(osMpdu.Octet) && GET_80211_HDR_PWR_MGNT(osMpdu.Octet)) - break; - - if(IN_LEGACY_POWER_SAVE(pMgntInfo->pStaQos)) - LPS_OnTx(pAdapter, pTcb); - else - WMMPS_OnTx(pAdapter, pTcb); - txPsStauts = RT_PS_TX_STATUS_PKT_BUFFERED; - }while(FALSE); - } - else - { - // - // If we have sent the trigger frame of the current APSD, set up service period to remain awake. By Bruce, 2007-11-15. - // - if(!IN_LEGACY_POWER_SAVE(pMgntInfo->pStaQos)) - { - if(IsStaQosTriggerFrame(&osMpdu, pMgntInfo->pStaQos->Curr4acUapsd)) - { - pMgntInfo->pStaQos->bInServicePeriod = TRUE; - } - } - } - } - - /* - if(txPsStauts == RT_PS_TX_STATUS_SEND_PKT) - { - // Set PwrMgnt bit, by Bruce, 2007-11-09. - SET_80211_HDR_PWR_MGNT(osMpdu.Octet, MgntGetPwrMgntInfo(pAdapter, pTcb, TRUE)); - - // - // Move from PreTransmitTCB() becsauce the TCBs in the wait queues sent without passing - // through PreTransmitTCB(). - // Only those packets without pwr mgnt bit set are considered as sent in awake - // By Bruce, 2008-01-18. - // - if(!GET_80211_HDR_PWR_MGNT(osMpdu.Octet)) - pMgntInfo->bAwakePktSent = TRUE; - } - */ - - return txPsStauts; -} - - - - -VOID -InitializeTxVariables( - PADAPTER Adapter - ) -{ - u2Byte i; - BOOLEAN bSupportEarlyMode; - - // Initialize each queue with the same number of TxDesc, - // except for BEACON_QUEUE. 2005.11.14, by rcnjko. - for(i = 0; i < MAX_TX_QUEUE;i++) - { - Adapter->NumTxDesc[i] = Adapter->RT_TXDESC_NUM; - } - // TODO: Emily 2006.11.15. If we are implmemting multiple BSSID feature, more - // TODO: than two descriptors may be required. - Adapter->NumTxDesc[BEACON_QUEUE] = 2; // BEACON_QUEUE - Adapter->NumTxDesc[BE_QUEUE] = Adapter->RT_TXDESC_NUM_BE_QUEUE; // BE queue need more descriptor for performance consideration - - Adapter->NumTcb = Adapter->RT_TCB_NUM; - Adapter->NumLocalBuffer = Adapter->RT_LOCAL_BUF_NUM; - Adapter->NumLocalFWBuffer = Adapter->RT_LOCAL_FW_BUF_NUM; - - - bSupportEarlyMode = FALSE; - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_EARLY_MODE_SUPPORT, (pu1Byte)(&bSupportEarlyMode)); - if(bSupportEarlyMode) - { - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_EARLY_MODE_THRESHOLD, &(Adapter->EarlyMode_Threshold)); - for(i=0 ; i<8 ; i++) - Adapter->EarlyMode_QueueNum[i] = 0; - - } - - RTInitializeListHead(&Adapter->TcbIdleQueue); - for(i=0;iTcbWaitQueue[i]); - RTInitializeListHead(&Adapter->TcbBusyQueue[i]); - RTInitializeListHead(&Adapter->TcbAggrQueue[i]); - Adapter->TcbCountInAggrQueue[i] = 0; - } - RTInitializeListHead(&Adapter->LocalBufferQueue); - RTInitializeListHead(&Adapter->LocalFWBufferQueue); - - ResetTxStatistics(Adapter); - -} - -RT_STATUS -PrepareTCBs( - PADAPTER Adapter - ) -{ - u2Byte i,j; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pLocalBuffer; - RT_STATUS status; - u4Byte BufferLength,offset; - BufferLength = MAX_LLC_LENGTH + - MAX_802_11_HEADER_LENGTH*MAX_FRAGMENT_COUNT + - MAX_802_11_TRAILER_LENGTH + - MAX_FIRMWARE_INFORMATION_SIZE + - AMSDU_SUBHEADER_LENGTH; - do{ - //2 Allocate TCBs - Adapter->TcbBuffer.Length=Adapter->NumTcb*sizeof(RT_TCB); - status=PlatformAllocateMemory(Adapter, &Adapter->TcbBuffer.Ptr,Adapter->TcbBuffer.Length); - if(status!=RT_STATUS_SUCCESS) - return status; - - PlatformZeroMemory(Adapter->TcbBuffer.Ptr,Adapter->TcbBuffer.Length); - - pTcb=(PRT_TCB)Adapter->TcbBuffer.Ptr; - for(i=0;iNumTcb;i++) - { - status = PlatformAllocateSharedMemory(Adapter, &pTcb[i].Buffer, BufferLength); - if(status!=RT_STATUS_SUCCESS) - return status; - PlatformZeroMemory(pTcb[i].Buffer.VirtualAddress , BufferLength); - - GET_SHARED_MEMORY_WITH_OFFSET( - &pTcb[i].Buffer, - &pTcb[i].LLC, - 0, - MAX_LLC_LENGTH); - offset=MAX_LLC_LENGTH; - for(j=0;jTcbIdleQueue, &pTcb[i].List, &Adapter->NumIdleTcb); - } - - //2 Allocate local buffers - Adapter->LocalBufferArray.Length=Adapter->NumLocalBuffer*sizeof(RT_TX_LOCAL_BUFFER); - status=PlatformAllocateMemory(Adapter, &Adapter->LocalBufferArray.Ptr,Adapter->LocalBufferArray.Length); - if(status!=RT_STATUS_SUCCESS) - return status; - - PlatformZeroMemory(Adapter->LocalBufferArray.Ptr,Adapter->LocalBufferArray.Length); - - pLocalBuffer=(PRT_TX_LOCAL_BUFFER)Adapter->LocalBufferArray.Ptr; - for(i=0;iNumLocalBuffer;i++) - { - status = PlatformAllocateSharedMemory(Adapter, &pLocalBuffer[i].Buffer, Adapter->MAX_TRANSMIT_BUFFER_SIZE); - if(status!=RT_STATUS_SUCCESS) - return status; - - RTInsertTailListWithCnt(&Adapter->LocalBufferQueue, &pLocalBuffer[i].List, &Adapter->NumLocalBufferIdle); - } - - //2 Allocate Firmware local buffers - Adapter->LocalFWBufferArray.Length=Adapter->NumLocalFWBuffer*sizeof(RT_TX_LOCAL_BUFFER); - status=PlatformAllocateMemory(Adapter, &Adapter->LocalFWBufferArray.Ptr,Adapter->LocalFWBufferArray.Length); - if(status!=RT_STATUS_SUCCESS) - return status; - - PlatformZeroMemory(Adapter->LocalFWBufferArray.Ptr,Adapter->LocalFWBufferArray.Length); - - pLocalBuffer=(PRT_TX_LOCAL_BUFFER)Adapter->LocalFWBufferArray.Ptr; - - for(i=0;iNumLocalFWBuffer;i++) - { - status = PlatformAllocateSharedMemory(Adapter, &pLocalBuffer[i].Buffer, RT_LOCAL_FW_BUF_SIZE+Adapter->HWDescHeadLength); - - if(status!=RT_STATUS_SUCCESS) - { - return status; - } - RTInsertTailListWithCnt(&Adapter->LocalFWBufferQueue, &pLocalBuffer[i].List, &Adapter->NumLocalFWBufferIdle); - } - }while(FALSE); - - return status; -} - -// -// Assumption: RT_TX_SPINLOCK is acquired. -// -VOID -FreeTCBs( - PADAPTER Adapter, - BOOLEAN bReset - ) -{ - u1Byte QueueID; - u4Byte nFreed; - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pLocalBuffer; - - RT_ASSERT(IS_TX_LOCKED(Adapter) == TRUE, ("FreeTCBs(): bTxLocked(%x) should be TRUE\n!", Adapter->bTxLocked)); - - //2 Return all TCB to Idle queue first - //2 And free Packet, RFD or local buffer hide in reserved field - for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) - { - // 2004.08.11, revised by rcnjko. - while(!RTIsListEmpty(&Adapter->TcbBusyQueue[QueueID])) - { - pTcb=(PRT_TCB)RTRemoveHeadList(&Adapter->TcbBusyQueue[QueueID]); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - Adapter->nBufInTxDesc[QueueID] = 0; - - while(!RTIsListEmpty(&Adapter->TcbWaitQueue[QueueID])) - { - pTcb=(PRT_TCB)RTRemoveHeadList(&Adapter->TcbWaitQueue[QueueID]); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - - // Joseph test for A-MSDU aggregation - while(!RTIsListEmpty(&Adapter->TcbAggrQueue[QueueID])) - { - pTcb=(PRT_TCB)RTRemoveHeadList(&Adapter->TcbAggrQueue[QueueID]); - Adapter->TcbCountInAggrQueue[QueueID]--; - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - } - - if(!bReset) - { - //2 Free local buffers - if(!RTIsListEmpty(&Adapter->LocalBufferQueue)) - { - nFreed=0; - while(!RTIsListEmpty(&Adapter->LocalBufferQueue)) - { - pLocalBuffer=(PRT_TX_LOCAL_BUFFER)RTRemoveHeadListWithCnt(&Adapter->LocalBufferQueue, &Adapter->NumLocalBufferIdle); - - PlatformFreeSharedMemory(Adapter, &pLocalBuffer->Buffer); - nFreed++; - } - RT_ASSERT(nFreed==Adapter->NumLocalBuffer,("Freed local buffer(%ld) less than allocated(%ld)!!\n", nFreed, Adapter->NumLocalBuffer)); - } - if(Adapter->LocalBufferArray.Ptr != NULL) - { - PlatformFreeMemory(Adapter->LocalBufferArray.Ptr,Adapter->LocalBufferArray.Length); - } - - //2 Free Firmware local buffers - if(!RTIsListEmpty(&Adapter->LocalFWBufferQueue)) - { - nFreed=0; - while(!RTIsListEmpty(&Adapter->LocalFWBufferQueue)) - { - pLocalBuffer=(PRT_TX_LOCAL_BUFFER)RTRemoveHeadListWithCnt(&Adapter->LocalFWBufferQueue, &Adapter->NumLocalFWBufferIdle); - - PlatformFreeSharedMemory(Adapter, &pLocalBuffer->Buffer); - nFreed++; - } - RT_ASSERT(nFreed==Adapter->NumLocalFWBuffer,("Freed FW local buffer(%ld) less than allocated(%ld)!!\n", nFreed, Adapter->NumLocalFWBuffer)); - } - if(Adapter->LocalFWBufferArray.Ptr != NULL) - { - PlatformFreeMemory(Adapter->LocalFWBufferArray.Ptr,Adapter->LocalFWBufferArray.Length); - } - - - //2 Free idle queue - if(!RTIsListEmpty(&Adapter->TcbIdleQueue)) - { - nFreed=0; - while(!RTIsListEmpty(&Adapter->TcbIdleQueue)) - { - pTcb=(PRT_TCB)RTRemoveHeadListWithCnt(&Adapter->TcbIdleQueue, &Adapter->NumIdleTcb); - - PlatformFreeSharedMemory(Adapter, &pTcb->Buffer); - nFreed++; - } - RT_ASSERT(nFreed==Adapter->NumTcb,("Freed TCB(%ld) less than allocated(%ld)!!\n", nFreed, Adapter->NumTcb)); - } - if(Adapter->TcbBuffer.Ptr != NULL) - { - PlatformFreeMemory(Adapter->TcbBuffer.Ptr,Adapter->TcbBuffer.Length); - } - } -} - -VOID -RemoveZeroLengthBuffer( - PRT_TCB pTcb - ) -{ - u2Byte i,j; - u2Byte k = 0; - - for(i=0,j=0;iBufferCount;i++) - { - if(pTcb->BufferList[i].Length==0) - continue; - - if(i!=j) - { - pTcb->BufferList[j]=pTcb->BufferList[i]; - - if(IS_REMOVE_ZERO_LEN_BUF(pTcb->SourceAdapt)) - { - if(pTcb->SubHdrIndexAry[k] == (u1Byte)i) - { - pTcb->SubHdrIndexAry[k] = (u1Byte)j; - k++; - } - } - } - j++; - } - pTcb->BufferCount=j; -} - -BOOLEAN -RetrieveSegmentDataFromTCB( - PRT_TCB pTcb, - u1Byte SkipBuffers, - u4Byte DataOffset, - PVOID pDataBuffer, - u4Byte DataBufLength - ) -{ - BOOLEAN bResult = TRUE; - u4Byte BytesRead = 0; - u4Byte i; - u4Byte offset = 0; - pu1Byte pBuffer = (pu1Byte)pDataBuffer; - - for(i=SkipBuffers;iBufferCount;i++) - { - if(pTcb->BufferList[i].Length==0) - continue; - - for (; BytesRead!=DataBufLength; BytesRead++) - { - if ( (pTcb->BufferList[i].Length + offset) > (DataOffset + BytesRead) ) - { - pBuffer[BytesRead] = pTcb->BufferList[i].VirtualAddress[DataOffset+BytesRead-offset]; - } - else - break; - } - - if (BytesRead == DataBufLength) break; - - offset +=pTcb->BufferList[i].Length; - } - - if (BytesRead != DataBufLength) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("RetrieveSegmentDataFromTCB(): some data can not be retrived\n")); - bResult = FALSE; - } - - return bResult; -} - -/** -* Function: TcbGetTOSField -* -* Overview: Get TOS field of IP header in TCB buffer. -* Input the TCB pointer and indicate SkipBuffer number for this function to get the -* Ethernet packet sent from upper layer. -* Using this function before packet conversion. (TranslateHeader()) -* -* Input: -* PRT_TCB pTcb -* u1Byte SkipBuffers -* -* Output: -* None -* -* Return: -* TOS value -*/ -u1Byte -TcbGetTOSField( - PRT_TCB pTcb, - u1Byte SkipBuffers - ) -{ - u2Byte TypeLength; - u1Byte TypeLengthBuf[2]; - u1Byte TOS = 0; - - RetrieveSegmentDataFromTCB( - pTcb, - SkipBuffers, - 12, - TypeLengthBuf, - sizeof(TypeLengthBuf)); - - TypeLength = (((u2Byte)TypeLengthBuf[0])<<8) + TypeLengthBuf[1]; - - if(TypeLength == 0x0800) - { - RetrieveSegmentDataFromTCB( - pTcb, - SkipBuffers, - 15, - &TOS, - sizeof(TOS)); - TOS = TOS>>5; - } - - return TOS; -} - - -VOID -TranslateHeader( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u2Byte i; - u4Byte offset=0; - u2Byte TypeLength; - u1Byte TypeLengthBuf[2]; - u1Byte TOS; - static u1Byte SnapBridgeTunnel[6] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0xF8 }; - static u1Byte Snap802_1H[6] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x00 }; - static u1Byte Snap_CKIP_MIC[8] = { 0xAA, 0xAA, 0x03, 0x00, 0x40, 0x96, 0x00, 0x02 }; - pu1Byte pHeader; - u2Byte DAOffset,SAOffset,BSSIDOffset; - u1Byte PAEGroupAddress[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x03}; - u1Byte seqv[4]; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN bCCX8021xenable = FALSE; - BOOLEAN bAPSuportCCKM = FALSE; - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PRT_WLAN_STA pSTA=NULL; - u1Byte IP_Protocol, IP_HeaderLen, DHCP_Port[4]; - u2Byte DHCP_Src_Port, DHCP_Dst_Port; - u1Byte Addr1[6]; - u1Byte additionalHeaderLen = ETHERNET_ADDRESS_LENGTH*2 + ETHERNET_HEADER_SIZE + WAPI_EXT_LEN + 2 + 16 - 14; - - //2 Fill wireless header - pHeader=pTcb->BufferList[0].VirtualAddress; - - //1 Note: BufferList[0] is reserved for 802.11 header - //1 BufferList[1] is reserved for LLC - - pTcb->bBroadcast = MacAddr_isBcst(pTcb->BufferList[2].VirtualAddress); - if( pTcb->bBroadcast == FALSE ) - pTcb->bMulticast = MacAddr_isMulticast(pTcb->BufferList[2].VirtualAddress); - else - pTcb->bMulticast = FALSE; - - if( (CheckFragment(Adapter, pTcb, Adapter->TXPacketShiftBytes) == FALSE) && - ( (pTcb->PacketLength + additionalHeaderLen ) <= FRAGMENT_THRESHOLD(Adapter) ) ) - { - - } - - { - SET_80211_HDR_FRAME_CONTROL(pHeader, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(pHeader, Type_Data); - - pTcb->bTDLPacket = FALSE; - - switch(pMgntInfo->OpMode) - { - case RT_OP_MODE_IBSS: // 0,0 - DAOffset=4; - SAOffset=10; - BSSIDOffset=16; - break; - case RT_OP_MODE_AP: // 0,1 - SET_80211_HDR_FROM_DS(pHeader, 1); - DAOffset=4; - SAOffset=16; - BSSIDOffset=10; - break; - case RT_OP_MODE_INFRASTRUCTURE: // 1,0 - DAOffset=16; - SAOffset=10; - BSSIDOffset=4; - SET_80211_HDR_TO_DS(pHeader, 1); - break; - default: - RT_ASSERT(FALSE, ("TranslateHeader(): Unknown OpMode: %d\n", pMgntInfo->OpMode)); - // Handle it as IBSS, 2004.08.21, by rcnjko. - DAOffset=4; - SAOffset=10; - BSSIDOffset=16; - break; - } - SET_80211_HDR_DURATION(pHeader, 0); - PlatformMoveMemory(&pTcb->BufferList[0].VirtualAddress[BSSIDOffset], pMgntInfo->Bssid, ETHERNET_ADDRESS_LENGTH); - - // If in PSP XLink mode, pass the source address in 802.3 header rather than current MAC address. - // 2006.09.04, by shien chang. - if (pMgntInfo->bPSPXlinkMode) - { - PlatformMoveMemory(&pTcb->BufferList[0].VirtualAddress[SAOffset], &pTcb->BufferList[2].VirtualAddress[6], ETHERNET_ADDRESS_LENGTH); - PlatformMoveMemory(pTcb->SourceAddress, &pTcb->BufferList[2].VirtualAddress[6], ETHERNET_ADDRESS_LENGTH); - } - else - { - //2004/07/22, kcwu - PlatformMoveMemory(&pTcb->BufferList[0].VirtualAddress[SAOffset], Adapter->CurrentAddress, ETHERNET_ADDRESS_LENGTH); - PlatformMoveMemory(pTcb->SourceAddress, Adapter->CurrentAddress, ETHERNET_ADDRESS_LENGTH); - } - - PlatformMoveMemory(&pTcb->BufferList[0].VirtualAddress[DAOffset], pTcb->BufferList[2].VirtualAddress, ETHERNET_ADDRESS_LENGTH); - //2004/07/22, kcwu - PlatformMoveMemory(pTcb->DestinationAddress, pTcb->BufferList[2].VirtualAddress, ETHERNET_ADDRESS_LENGTH); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - } - - //Get Address1 for later use. 2007.04.03, by shien chang. - GET_80211_HDR_ADDRESS1(pHeader, Addr1); - -#if TX_TCP_SEQ_CHECK - TxTcpSeqCheck(Adapter, pTcb, 2); -#endif - - //2 Add LLC if need - // Find TypeLength, 2006.10.27, refined by shien chang. - RetrieveSegmentDataFromTCB( - pTcb, - 2, // The number of buffer in bufferlist to skip. - 12, // The TypeLength offset. - TypeLengthBuf, // 2 Byte buffer for TypeLength data. - sizeof(TypeLengthBuf)); // Buffer length. - - TypeLength=(((u2Byte)EF1Byte(TypeLengthBuf[0]))<<8) + EF1Byte(TypeLengthBuf[1]); - - if(TypeLength == 0x888e) - { // EAPOL packet. - int nTmpOffset = 0; - u1Byte btTmp = 0; - - // For delaying enter PS mode for FW control LPS. by tynli. - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS && - GET_POWER_SAVE_CONTROL(pMgntInfo)->bLeisurePs) - { - //DbgPrint("EAPOL packet----->\n"); - pMgntInfo->DelayLPSLastTimeStamp = PlatformGetCurrentTime(); - - // 20100902 Joseph: Since we send NULL frame in LeisurePSLeave() function, TX_SPINLOCK - // shall be release for all product and OS. Originally, TX_SPINLOCK is raised twice here and - // system hang immediately. - // We should call LeisurePSLeave to turn the RF on to receive EAPOL/DHCP/ARP packets, - // and release TX spinlock first beacuse we will acquire TX spinlock for FW H2C commands in 92su. - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - LeisurePSLeave(Adapter, LPS_DISABLE_TX_EAPOL_PKT); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - - if( !SecIsTxKeyInstalled(Adapter, Addr1) ) - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_BEFORE_KEY_INSTALLED; - } - else - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_AFTER_KEY_INSTALLED; - } - - // Send in lowest basic rate to get more time for adding key. 2005.04.19, by rcnjko. - if(pMgntInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) - { - pTcb->DataRate = MgntQuery_TxRateExcludeCCKRates(pMgntInfo->mBrates);//0xc;//ofdm 6m - pTcb->bTxDisableRateFallBack = FALSE; - } - else - { - pTcb->DataRate = Adapter->MgntInfo.LowestBasicRate; - //disable rate fallback for EAPOL packate to resolve 5G ad hoc cck hang. zhiyuan 2012/04/28 - if(IS_WIRELESS_MODE_A(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter)) - pTcb->bTxDisableRateFallBack = TRUE; - } - - RT_DISP(FDM, WA_IOT, ("EAPOL TranslateHeader(), pTcb->DataRate = 0x%x\n", pTcb->DataRate)); - pTcb->bTxUseDriverAssingedRate = TRUE; - - // Check if this is a MIC failure report packet. 2005.09.06, by rcnjko. - for(i = 2; i < pTcb->BufferCount; i++) - { - if(pTcb->BufferList[i].Length == 0) - continue; - - if(pTcb->BufferList[i].Length + nTmpOffset > 19) - { - btTmp = EF1Byte(pTcb->BufferList[i].VirtualAddress[19-nTmpOffset]); - - if(btTmp == 0x0d || btTmp == 0x0f) - { - pTcb->EncInfo.SecProtInfo |= RT_SEC_MIC_FAILURE_REPORT; - } - - break; - } - - nTmpOffset += pTcb->BufferList[i].Length; - } - } - else - { // Non-EAPOL packets. - pTcb->EncInfo.SecProtInfo = RT_SEC_NORMAL_DATA; - } - - CCX_QueryCCKMSupport(Adapter, &bCCX8021xenable, &bAPSuportCCKM); - - { - // Insert LLC in need - if(TypeLength > (MAXIMUM_ETHERNET_PACKET_SIZE-ETHERNET_HEADER_SIZE) ) - { - if ((TypeLength == 0x8137) || (TypeLength == 0x80F3)) - { // Bridge tunneling - PlatformMoveMemory( - pTcb->BufferList[1].VirtualAddress, - SnapBridgeTunnel, - LLC_HEADER_SIZE); - - pTcb->BufferList[1].Length=LLC_HEADER_SIZE; - pTcb->PacketLength += LLC_HEADER_SIZE; - } - //else if( pSecInfo->pCkipPara->bIsMIC) It will add SNAP to EAPOL packet in 802.1x ,2006.10.04 CCW - else if(pSecInfo->pCkipPara->bIsMIC && (pTcb->EncInfo.SecProtInfo != RT_SEC_EAPOL_BEFORE_KEY_INSTALLED) - && !(( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pSecInfo->PairwiseEncAlgorithm ==RT_ENC_ALG_WEP104 ) && // WEP mode - pSecInfo->AuthMode == RT_802_11AuthModeOpen && // Open mode - !( bCCX8021xenable && bAPSuportCCKM ) && // Not in CCKM mode - IsSecProtEapol(pTcb->EncInfo.SecProtInfo) == TRUE) // Is EPAOL Packet - ) - { // CKIP MIC SNAP - RT_TRACE( COMP_CKIP, DBG_LOUD, ("[CKIP] TranslateHeader(): CMIC snap case!\n") ); - - // Set CKIP Snap - PlatformMoveMemory( - pTcb->BufferList[1].VirtualAddress, - Snap_CKIP_MIC, - 8); - // Set MIC and SEQ to zero - PlatformZeroMemory( - pTcb->BufferList[1].VirtualAddress + 8, - 8); - - //Set SEQ - CKIP_SEQ_DECIMAL2ARRAY( pSecInfo->pCkipPara->ulSeqUpLink, seqv ); - PlatformMoveMemory( - pTcb->BufferList[1].VirtualAddress + 12, - seqv, - 4); - pSecInfo->pCkipPara->ulSeqUpLink += 2; - - pTcb->BufferList[1].Length=16; - pTcb->PacketLength += 16; - } - else - { // 802.1h - PlatformMoveMemory( - pTcb->BufferList[1].VirtualAddress, - Snap802_1H, - LLC_HEADER_SIZE); - - pTcb->BufferList[1].Length=LLC_HEADER_SIZE; - pTcb->PacketLength += LLC_HEADER_SIZE; - } - - offset=ETHERNET_HEADER_SIZE - TYPE_LENGTH_FIELD_SIZE; - } - else - { - offset=ETHERNET_HEADER_SIZE; - } - } - - // - // Parsing the DSCP in IP header TOS field. - // Set default priority for the packets other than IP. Revised by Joseph - // - if( TypeLength == 0x0800 ) // IP header - { - RetrieveSegmentDataFromTCB( - pTcb, - 2, - 15, - &TOS, - sizeof(TOS)); - pTcb->priority = TOS>>5; - RT_DISP(FQoS, QoS_INIT, ("Translate Header pTcb->priority = %d\r\n", pTcb->priority)); - } - else - { - pTcb->priority = 0; - } - - //************************************************************************* - // cosa added 03/12/2008 - // The following is for DHCP and ARP packet, we use cck1M to tx these packets to prevent - // DHCP protocol fail - if( TypeLength == 0x0800 ) // IP header - { - RetrieveSegmentDataFromTCB( - pTcb, - 2, - 14+9, - &IP_Protocol, - sizeof(IP_Protocol)); - - if(IP_Protocol == 0x11) // UDP protocol - { - //DbgPrint("UDP Protocol !!\n"); - RetrieveSegmentDataFromTCB( - pTcb, - 2, - 14, // 14 is the start of the IP Header - &IP_HeaderLen, // each unit = 4 bytes. - sizeof(IP_HeaderLen)); - IP_HeaderLen &= 0xf; //bit0~3 - IP_HeaderLen *= 4; //Bytes of IP Header. - //DbgPrint("IP_HeaderLen = %d\n", IP_HeaderLen); - - RetrieveSegmentDataFromTCB( - pTcb, - 2, - 14+IP_HeaderLen, // 14 is the start of the IP Header - DHCP_Port, // each unit = 4 bytes. - sizeof(DHCP_Port)); - //DbgPrint("DHCP_Port = [0]=%x,[1]=%x, [2]=%x, [3]=%x \n", DHCP_Port[0], DHCP_Port[1], DHCP_Port[2], DHCP_Port[3]); - DHCP_Src_Port = (((u2Byte)DHCP_Port[0])<<8) + DHCP_Port[1]; - DHCP_Dst_Port = (((u2Byte)DHCP_Port[2])<<8) + DHCP_Port[3]; - //DbgPrint("DHCP_Src_Port = %d, DHCP_Dst_Port = %d \n", DHCP_Src_Port, DHCP_Dst_Port); - if((DHCP_Src_Port == 68 && DHCP_Dst_Port == 67) || - (DHCP_Src_Port == 67 && DHCP_Dst_Port == 68)) - { - OCTET_STRING osMpdu; - pu1Byte pRaddr = NULL; - - //Note: - // osMpdu may not include the packet content but just 802.11 header. - FillOctetString(osMpdu, pTcb->BufferList[0].VirtualAddress, (u2Byte)pTcb->BufferList[0].Length); - pRaddr = Frame_pRaddr(osMpdu); - - // - // Translate the DHCP offer packet from multicast packet to unicast so that the client - // can receive the DHCP response easier. By Bruce, 2011-01-06. - // - if(ACTING_AS_AP(pTcb->SourceAdapt) && MacAddr_isMulticast(pRaddr)) - { - u1Byte ClientMac[6]; - PRT_WLAN_STA pEntry; - - // Get the Mac address in DHCP packet. - RetrieveSegmentDataFromTCB( - pTcb, - 2, - IP_HeaderLen + 14 + 8 + 28, // UDP header(8) + Client Mac Address offset (28) - ClientMac, // each unit = 4 bytes. - 6); - - // Check if this mac address is belong to one of the clients. - pEntry = AsocEntry_GetEntry(&pTcb->SourceAdapt->MgntInfo, ClientMac); - - if(pEntry != NULL) - { - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "Replace the DHCP receiver address from multicast to ", ClientMac); - PlatformMoveMemory(pRaddr, ClientMac, 6); - PlatformMoveMemory(pTcb->DestinationAddress, ClientMac, 6); - } - } - // 68 : UDP BOOTP client - // 67 : UDP BOOTP server - //DbgPrint("DHCP Protocol !!\n"); - // Use low rate to send DHCP packet. - if(pMgntInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) - { - pTcb->DataRate = MgntQuery_TxRateExcludeCCKRates(pMgntInfo->mBrates);//0xc;//ofdm 6m - pTcb->bTxDisableRateFallBack = FALSE; - } - else - pTcb->DataRate = Adapter->MgntInfo.LowestBasicRate; - RT_DISP(FDM, WA_IOT, ("DHCP TranslateHeader(), pTcb->DataRate = 0x%x\n", pTcb->DataRate)); - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->specialDataType = PACKET_DHCP; - pMgntInfo->LPSDelayCnt= - GET_POWER_SAVE_CONTROL(pMgntInfo)->LPSAwakeIntvl*2; - // For delaying enter PS mode for FW control LPS. by tynli. - if( GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS && - GET_POWER_SAVE_CONTROL(pMgntInfo)->bLeisurePs) - { //by tynli - pMgntInfo->DelayLPSLastTimeStamp = PlatformGetCurrentTime(); - - // 20100902 Joseph: Since we send NULL frame in LeisurePSLeave() function, TX_SPINLOCK - // shall be release for all product and OS. Originally, TX_SPINLOCK is raised twice here and - // system hang immediately. - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - LeisurePSLeave(Adapter, LPS_DISABLE_TX_DHCP_PKT); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - } - } - if( TypeLength == 0x0806 ) // IP ARP packet - { - //DbgPrint("IP ARP !!\n"); - pMgntInfo->LPSDelayCnt = pMgntInfo->mDtimCount; - if(pMgntInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) - { - pTcb->DataRate = MgntQuery_TxRateExcludeCCKRates(pMgntInfo->mBrates);//0xc;//ofdm 6m - pTcb->bTxDisableRateFallBack = FALSE; - } - else - pTcb->DataRate = pMgntInfo->LowestBasicRate; - RT_DISP(FDM, WA_IOT, ("ARP TranslateHeader(), pTcb->DataRate = 0x%x\n", pTcb->DataRate)); - pTcb->bTxUseDriverAssingedRate = TRUE; - pTcb->specialDataType = PACKET_ARP; - if( GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS && - GET_POWER_SAVE_CONTROL(pMgntInfo)->bLeisurePs) - { // by tynli - //DbgPrint("ARP packet----->\n"); - pMgntInfo->DelayLPSLastTimeStamp = PlatformGetCurrentTime(); - - // 20100902 Joseph: Since we send NULL frame in LeisurePSLeave() function, TX_SPINLOCK - // shall be release for all product and OS. Originally, TX_SPINLOCK is raised twice here and - // system hang immediately. - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - LeisurePSLeave(Adapter, LPS_DISABLE_TX_ARP_PKT); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - //************************************************************************* - - TDLS_TxTranslateHeader(Adapter, pTcb, RT_PROTOCOL_802_3); - - // Remove 802.3 header - pTcb->PacketLength -= offset; - - //3 Add SecurityHeader - if(!IsSecProtEapolBeforeKeyInstalled(pTcb->EncInfo.SecProtInfo)) - { - u1Byte CurrCcxVerNumber = 0; - - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - - if(!(( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pSecInfo->PairwiseEncAlgorithm ==RT_ENC_ALG_WEP104 ) && // WEP mode - pSecInfo->AuthMode == RT_802_11AuthModeOpen && // Open mode - !( bCCX8021xenable && bAPSuportCCKM && CurrCcxVerNumber >= 2 ) && // Not in CCKM mode - IsSecProtEapol(pTcb->EncInfo.SecProtInfo) == TRUE // Is EPAOL Packet - )) - { - pTcb->BufferList[0].Length = (sMacHdrLng + pSecInfo->EncryptionHeadOverhead); - } - else - { - if(!PlatformCompareMemory(PAEGroupAddress, pTcb->DestinationAddress, ETHERNET_ADDRESS_LENGTH)) - { // Does this case happen after PTK installed? - PlatformMoveMemory(pTcb->DestinationAddress, pMgntInfo->Bssid, ETHERNET_ADDRESS_LENGTH); - } - - pTcb->BufferList[0].Length = sMacHdrLng; - } - } - else - { - if(!PlatformCompareMemory(PAEGroupAddress, pTcb->DestinationAddress, ETHERNET_ADDRESS_LENGTH)) - { // Does this case happen after PTK installed? - PlatformMoveMemory(pTcb->DestinationAddress, pMgntInfo->Bssid, ETHERNET_ADDRESS_LENGTH); - } - - pTcb->BufferList[0].Length = sMacHdrLng; - } - - //3 Added QoS Control - if(ACTING_AS_AP(Adapter) || Adapter->MgntInfo.mIbss ) - pSTA = AsocEntry_GetEntry(pMgntInfo, Addr1); - - RT_DISP(FQoS, QoS_INIT, ("TranslateHeader QoS header\r\n")); - - if( (pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE ) && - (((ACTING_AS_AP(Adapter) || pMgntInfo->mIbss) && pSTA != NULL)?((pSTA->QosMode)>QOS_DISABLE):TRUE) && - (MacAddr_isMulticast(Addr1)==FALSE) && - (MacAddr_isBcst(Addr1)==FALSE) ) - { - // 1. Reserve 2-bytes QoS Control Field for unicast QoS Data frame. - pTcb->BufferList[0].Length += sQoSCtlLng; - - if(pMgntInfo->pHTInfo->bRDGEnable) - { - pTcb->BufferList[0].Length += 4; //HTC len - SET_80211_HDR_ORDER(pHeader,1); - pTcb->BufferList[0].VirtualAddress[24+2+3] = 0x80; - } - - // 2. Change SubType in Frame Control. - SET_80211_HDR_QOS_EN(pHeader, 1); - - // 4. Use highest priority to send EPAOL-Key packet. Annie, 2005-12-22. - // Ref: 802.11e/D13.0, 8.5.2, in page 67: - // "When priority processing of data frames is supported, a STA's SME should send EAPOL-Key frames at the highest priority." - if( TypeLength == 0x888e ) - { - pTcb->priority = 7; - } - } - - pTcb->PacketLength += pTcb->BufferList[0].Length; - - for(i=2;iBufferCount && offset > 0;i++) - { - if(pTcb->BufferList[i].Length==0) - continue; - - if(pTcb->BufferList[i].Length >= offset) - { - MAKE_SHARED_MEMORY_OFFSET_AT_FRONT(&pTcb->BufferList[i], offset); - offset=0; - } - else - { - offset-=pTcb->BufferList[i].Length; - pTcb->BufferList[i].Length=0; - } - } - - // If original 802.3 header size is small than 4 byte, append it to LLC header and remove it. - if(pTcb->BufferList[1].Length > 0) - { - for(i=2;iBufferCount;i++) - { // Only check first nonzero buffer - if(pTcb->BufferList[i].Length==0) - continue; - - if(pTcb->BufferList[i].Length < MIN_DESC_BUFFER_LENGTH) - { - PlatformMoveMemory( - &pTcb->BufferList[1].VirtualAddress[pTcb->BufferList[1].Length], - pTcb->BufferList[i].VirtualAddress, - pTcb->BufferList[i].Length); - pTcb->BufferList[1].Length += pTcb->BufferList[i].Length; - pTcb->BufferList[i].Length=0; - } - break; - } - } - -} - -// 20100309 Joseph: Revise special frame parsing in Tx path. -// Also handling the packets saved in LOCAL_BUFFER. The buffer offset and index is different from the -// buffer in SYSTEM_BUFFER. -BOOLEAN -CheckSpecialTxPktContentFromHighLayer( - PRT_TCB pTcb - ) -{ - u1Byte IP_Protocol, IP_HeaderLen; - u2Byte IP_Src_Port = 0, IP_Dst_Port = 0; - u2Byte u2Tmp = 0; - - u1Byte Check_Buf_Index, Check_Buf_Offset; - - if(pTcb->BufferType==RT_TCB_BUFFER_TYPE_LOCAL) - { - // 20100309 Joseph: Add packet parsing for LOCAL BUFFER case. - // Payload is saved in buffer 1. - // Since LLC header is coalesced with oter payload in buffer 1, we just skip first 8 bytes LLC - // in front of buffer to get the paylaod. - Check_Buf_Index = 1; - Check_Buf_Offset = 8; - } - else - { - // 20100309 Joseph: Normal case. - // Payload is saved in buffer 2 and LLC is separate with it in buffer 1. - Check_Buf_Index = 2; - Check_Buf_Offset = 0; - } - - RetrieveSegmentDataFromTCB( - pTcb, - Check_Buf_Index, - 9+Check_Buf_Offset, // Get payload offset 9 to get protocol type. - &IP_Protocol, - sizeof(IP_Protocol)); - - // DbgPrint("IP_Protocol = %d\n", IP_Protocol); - RetrieveSegmentDataFromTCB( - pTcb, - Check_Buf_Index, - 0+Check_Buf_Offset, // Offset 0 is the start of the IP Header - &IP_HeaderLen, // each unit = 4 bytes. - sizeof(IP_HeaderLen)); - IP_HeaderLen &= 0xf; //bit0~3 - IP_HeaderLen *= 4; //Bytes of IP Header. - //DbgPrint("IP_HeaderLen = %d\n", IP_HeaderLen); - - if(0x11 == IP_Protocol || 0x06 == IP_Protocol) - { - // Get source port - RetrieveSegmentDataFromTCB( - pTcb, - Check_Buf_Index, - IP_HeaderLen+Check_Buf_Offset, - &u2Tmp, - 2); - IP_Src_Port = H2N2BYTE(u2Tmp); - - // Get source port - RetrieveSegmentDataFromTCB( - pTcb, - Check_Buf_Index, - IP_HeaderLen + Check_Buf_Offset + 2, - &u2Tmp, - 2); - IP_Dst_Port = H2N2BYTE(u2Tmp); - } - - if(IP_Protocol == 0x11) // UDP protocol - { - pTcb->IPType = TX_IPTYPE_UDP; - - //DbgPrint("DHCP_Src_Port = %d, DHCP_Dst_Port = %d \n", DHCP_Src_Port, DHCP_Dst_Port); - if((IP_Src_Port == 68 && IP_Dst_Port == 67) || - (IP_Src_Port == 67 && IP_Dst_Port == 68)) - { - OCTET_STRING osMpdu; - pu1Byte pRaddr = NULL; - - //Note: - // osMpdu may not include the packet content but just 802.11 header. - FillOctetString(osMpdu, pTcb->BufferList[0].VirtualAddress, (u2Byte)pTcb->BufferList[0].Length); - pRaddr = Frame_pRaddr(osMpdu); - - // - // Translate the DHCP offer packet from multicast packet to unicast so that the client - // can receive the DHCP response easier. By Bruce, 2011-01-06. - // - if(ACTING_AS_AP(pTcb->SourceAdapt) && MacAddr_isMulticast(pRaddr)) - { - u1Byte ClientMac[6]; - PRT_WLAN_STA pEntry; - - // Get the Mac address in DHCP packet. - RetrieveSegmentDataFromTCB( - pTcb, - Check_Buf_Index, - IP_HeaderLen + Check_Buf_Offset + 8 + 28, // UDP header(8) + Client Mac Address offset (28) - ClientMac, // each unit = 4 bytes. - 6); - - // Check if this mac address is belong to one of the clients. - pEntry = AsocEntry_GetEntry(&pTcb->SourceAdapt->MgntInfo, ClientMac); - - if(pEntry != NULL) - { - RT_PRINT_ADDR(COMP_AP, DBG_LOUD, "Replace the DHCP receiver address from multicast to ", ClientMac); - // Copy the client mac address to the ra. - PlatformMoveMemory(pRaddr, ClientMac, 6); - PlatformMoveMemory(pTcb->DestinationAddress, ClientMac, 6); - } - } - - return TRUE; - } - else - { - return FALSE; - } - } - else if(0x06 == IP_Protocol) // TCP - { - pTcb->IPType = TX_IPTYPE_TCP; - - // DbgPrint("TCP src port = %d, dst port = %d\n", IP_Src_Port, IP_Dst_Port); - if(IP_Src_Port == 7236 || IP_Dst_Port == 7236 || - IP_Src_Port == 8554 || IP_Dst_Port == 8554) - { - u1Byte offset = Check_Buf_Index; - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("[MIRACAST/P2P] Tx Display Packet:\n")); - for(offset = Check_Buf_Index; offset < pTcb->BufferCount; offset ++) - { - if(0 == pTcb->BufferList[offset].Length) - continue; - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "", - pTcb->BufferList[offset].VirtualAddress, pTcb->BufferList[offset].Length); - } - } - } - return FALSE; -} - -// -// For NDIS6 802.11 Tx frame handling. -// Added by Annie, 2006-10-20. -// -VOID -FillPartialHeader( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u2Byte TypeLength; - u1Byte TypeLengthBuf[2]; - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - u1Byte PAEGroupAddress[6] = {0x01, 0x80, 0xc2, 0x00, 0x00, 0x03}; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - u1Byte Addr1[6]; - BOOLEAN bIsSpecialPkt = FALSE; - - //2 Fill wireless header (Some field is filled by upper layer) - SET_80211_HDR_DURATION(pHeader, 0); - SET_80211_HDR_FRAGMENT_SEQUENCE(pHeader, 0); - - pTcb->bTDLPacket = FALSE; - - // - if( GET_80211_HDR_TO_DS(pHeader)==0 && GET_80211_HDR_FROM_DS(pHeader)==0) - { - // IBSS - GET_80211_HDR_ADDRESS2(pHeader, pTcb->SourceAddress); - GET_80211_HDR_ADDRESS1(pHeader, pTcb->DestinationAddress); - - if( MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED - || MgntActQuery_ApType(Adapter) == RT_AP_TYPE_LINUX) - { - // - // 061227, rcnjko: - // Translate header for NDIS6 faked AP mode (UI make upper layer take us as AdHoc mode). - // - if( pMgntInfo->OpMode == RT_OP_MODE_AP && IsFrameTypeData((pTcb->BufferList[0].VirtualAddress)) ) - { - u1Byte tmpAddr[6]; - u1Byte tmpAddr2[6]; - - SET_80211_HDR_TO_DS(pHeader, 0); - SET_80211_HDR_FROM_DS(pHeader, 1); - - GET_80211_HDR_ADDRESS2(pHeader,tmpAddr); - GET_80211_HDR_ADDRESS3(pHeader,tmpAddr2); - SET_80211_HDR_ADDRESS2(pHeader,tmpAddr2); - SET_80211_HDR_ADDRESS3(pHeader,tmpAddr); - } - } - } - else if (GET_80211_HDR_TO_DS(pHeader) == 1 && GET_80211_HDR_FROM_DS(pHeader) == 0) - { - // From STA to AP. - GET_80211_HDR_ADDRESS2(pHeader,pTcb->SourceAddress); - GET_80211_HDR_ADDRESS3(pHeader,pTcb->DestinationAddress); - - } - else if (GET_80211_HDR_TO_DS(pHeader) == 0 && GET_80211_HDR_FROM_DS(pHeader) == 1) - { - // From AP to STA. - GET_80211_HDR_ADDRESS3(pHeader,pTcb->SourceAddress); - GET_80211_HDR_ADDRESS1(pHeader,pTcb->DestinationAddress); - } - else - { - // WDS - // - } - - pTcb->bBroadcast = MacAddr_isBcst(pTcb->DestinationAddress); - if( pTcb->bBroadcast == FALSE ) - pTcb->bMulticast = MacAddr_isMulticast(pTcb->DestinationAddress); - else - pTcb->bMulticast = FALSE; - - GET_80211_HDR_ADDRESS1(pHeader, Addr1); - - // Find TypeLength, 2006.10.27, refined by shien chang. - RetrieveSegmentDataFromTCB( - pTcb, - 0, // The number of buffer in bufferlist to skip. - 30, // The TypeLength offset. 24 for Wireless header, 6 for LLC - TypeLengthBuf, // 2 Byte buffer for TypeLength data. - sizeof(TypeLengthBuf)); // Buffer length. - - TypeLength=(((u2Byte)TypeLengthBuf[0])<<8) + TypeLengthBuf[1]; - - if(TypeLength == 0x888e) - { // EAPOL packet. - - bIsSpecialPkt = TRUE; - pTcb->specialDataType = PACKET_EAPOL; - - if(!SecIsTxKeyInstalled(Adapter, Addr1) ) - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_BEFORE_KEY_INSTALLED; - } - else - { - pTcb->EncInfo.SecProtInfo = RT_SEC_EAPOL_AFTER_KEY_INSTALLED; - } - } - else - { // Non-EAPOL packets. - pTcb->EncInfo.SecProtInfo = RT_SEC_NORMAL_DATA; - } - -#if TX_TCP_SEQ_CHECK - TxTcpSeqCheck(Adapter, pTcb, 2); -#endif - - - //************************************************************************* - // cosa added 03/12/2008 - // The following is for DHCP and ARP packet, we use cck1M to tx these packets to prevent - // DHCP protocol fail - // 20100309 Joseph: Revise special frame parsing in Tx path. - if( TypeLength == 0x0800 ) // IP header - { - bIsSpecialPkt = CheckSpecialTxPktContentFromHighLayer(pTcb); - if(bIsSpecialPkt) - pTcb->specialDataType = PACKET_DHCP; - } - else if( TypeLength == 0x0806 ) // IP ARP packet - { - bIsSpecialPkt = TRUE; - pTcb->specialDataType = PACKET_ARP; - } - - if(bIsSpecialPkt) - { - // Use low rate to send DHCP packet. - if(pMgntInfo->IOTAction & HT_IOT_ACT_WA_IOT_Broadcom) - { - pTcb->DataRate = MgntQuery_TxRateExcludeCCKRates(pMgntInfo->mBrates);//0xc;//ofdm 6m - pTcb->bTxDisableRateFallBack = FALSE; - } - else - { - pTcb->DataRate = pMgntInfo->HighestBasicRate; - //disable rate fallback for EAPOL packate to resolve 5G ad hoc cck hang. zhiyuan 2012/04/28 - //SUT disconnect,DUT will indication OS start association succuss,and send eapol packet in AES MODE.this will cause cck hang on 5G. - if(IS_WIRELESS_MODE_A(Adapter) || IS_WIRELESS_MODE_N_5G(Adapter)) - pTcb->bTxDisableRateFallBack = TRUE; - } - - RT_DISP(FDM, WA_IOT, ("DHCP TranslateHeader(), pTcb->DataRate = 0x%x\n", pTcb->DataRate)); - pTcb->bTxUseDriverAssingedRate = TRUE; - - // For delaying enter PS mode for FW control LPS. by tynli. - pMgntInfo->LPSDelayCnt= GET_POWER_SAVE_CONTROL(pMgntInfo)->LPSAwakeIntvl*2; - if(GET_POWER_SAVE_CONTROL(pMgntInfo)->bFwCtrlLPS && - GET_POWER_SAVE_CONTROL(pMgntInfo)->bLeisurePs) - { //by tynli - pMgntInfo->DelayLPSLastTimeStamp = PlatformGetCurrentTime(); - - // 20100902 Joseph: Since we send NULL frame in LeisurePSLeave() function, TX_SPINLOCK - // shall be release for all product and OS. Originally, TX_SPINLOCK is raised twice here and - // system hang immediately. - if(!(pPSC->RegAdvancedLPs && (pTcb->specialDataType == PACKET_ARP))) - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - LeisurePSLeave(Adapter, LPS_DISABLE_TX_SPECIAL_PKT); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - } - //************************************************************************* - - - //3 Add SecurityHeader - if(!IsSecProtEapolBeforeKeyInstalled(pTcb->EncInfo.SecProtInfo) && MgntGetEncryptionInfo(Adapter,pTcb,&pTcb->EncInfo,FALSE) - && !pMgntInfo->SafeModeEnabled) - { - pTcb->BufferList[0].Length += pSecInfo->EncryptionHeadOverhead; - pTcb->PacketLength += pSecInfo->EncryptionHeadOverhead; - } - else - { - if(!PlatformCompareMemory(PAEGroupAddress, pTcb->DestinationAddress, ETHERNET_ADDRESS_LENGTH)) - { // Does this case happen after PTK installed? - PlatformMoveMemory(pTcb->DestinationAddress, Adapter->MgntInfo.Bssid, ETHERNET_ADDRESS_LENGTH); - } - - pTcb->BufferList[0].Length = sMacHdrLng; - } - - RT_DISP(FQoS, QoS_INIT, ("FillPartialHeader CurrentQosMode=%d\r\n", pMgntInfo->pStaQos->CurrentQosMode)); - - //3 Added QoS Control - if(!MacAddr_isMulticast(Addr1) && (pMgntInfo->pStaQos->CurrentQosMode > QOS_DISABLE )) - { - BOOLEAN bInsertQoS = FALSE; - if(ACTING_AS_AP(Adapter)|| ACTING_AS_IBSS(Adapter)) - { - pu1Byte dstaddr = (pu1Byte)pTcb->DestinationAddress; - PRT_WLAN_STA pSTA = AsocEntry_GetEntry( pMgntInfo, dstaddr); - - if(pSTA!=NULL) - { - if(pSTA->QosMode > QOS_DISABLE ) - bInsertQoS = TRUE; - } - } - else// if(pMgntInfo->mActingAsAp && pSTA!=NULL) - bInsertQoS = TRUE; - - if(bInsertQoS == TRUE) - { - pTcb->BufferList[0].Length += sQoSCtlLng; - pTcb->PacketLength += sQoSCtlLng; // 2006.10.21, by Annie. - - // 2. Change SubType in Frame Control. - SET_80211_HDR_QOS_EN(pHeader, 1); - - // 4. Use highest priority to send EPAOL-Key packet. Annie, 2005-12-22. - // Ref: 802.11e/D13.0, 8.5.2, in page 67: - // "When priority processing of data frames is supported, a STA's SME should send EAPOL-Key frames at the highest priority." - if( TypeLength == 0x888e ) - { - pTcb->priority = 7; - } - } - } - - TDLS_TxTranslateHeader(Adapter, pTcb, RT_PROTOCOL_802_11); -} - - -#define MAC_BUFFER0_LENGTH 200 -#define MAX_SUBFRAME_HEADER_LENGTH 18 // header 14 + padding 4 - - -BOOLEAN -TxDoCoalescePciE( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - return FALSE; -} - - -pu1Byte -GET_FRAME_OF_FIRST_FRAG( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - return (pu1Byte)&pTcb->BufferList[0].VirtualAddress[Adapter->TXPacketShiftBytes]; -} - -pu1Byte -DOT11_HEADER_FROM_TCB( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - return pTcb->BufferList[0].VirtualAddress + Adapter->TXPacketShiftBytes; -} - -VOID -GetTcbDestaddr( - PADAPTER Adapter, - PRT_TCB pTcb, - pu1Byte * ppDestaddr -) -{ - if( pTcb->ProtocolType==RT_PROTOCOL_802_3 ) - { - *ppDestaddr = pTcb->BufferList[0].VirtualAddress; - } - else - { - *ppDestaddr = pTcb->BufferList[0].VirtualAddress+4; - } - if( TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER) || - TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_PACKET_SHIFT)) - *ppDestaddr += Adapter->TXPacketShiftBytes; - -} - - -/* -* Attention!! We will do Coalesce if we using SW encryption!! -* But for A-MSDU, the packet length may larger than local buffer size. -* SW encryption + A-MSDU may cause error!! -*/ - -BOOLEAN -PreTransmitTxDoCoalesce( - PADAPTER Adapter, - PRT_TCB pTcb, - pu1Byte *pHeader// '*' add by ylb 20130508 for pHeader is wrong when enable AMSDU -) -{ - BOOLEAN bColoaseResult = TRUE; - - if(pTcb->ColoaseMethod == 2) - bColoaseResult = TxDoCoalescePciE(Adapter, pTcb); - else - { - bColoaseResult = TxDoCoalesce(Adapter, pTcb); - } - - if(!bColoaseResult) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - return FALSE; - } - - // pTcb->BufferList[0] is changed after coalesced. - // 8187 must be coalesced and inerted Tx descriptor into beginning of buffer. - *pHeader = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb);// '*' add by ylb 20130508 for pHeader is wrong when enable AMSDU - return TRUE; -} - -BOOLEAN -PreTransmitWaitQueue( - PADAPTER Adapter, - PRT_TCB pTcb, - PBOOLEAN bImmediateComplete -) -{ - if(!RTIsListEmpty(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID))) - { - RT_TRACE( COMP_SEND, DBG_TRACE, - ("PreTransmitTCB(): there is already packets queued in wait queue(%d)\n", - pTcb->SpecifiedQueueID)); - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List, GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - - // If buffer is coalesced, packet should be returned immediately in Platform. - // 2007.07.17, by shien chang. - if ( (ACTING_AS_AP(Adapter) == FALSE) && - (pTcb->BufferType == RT_TCB_BUFFER_TYPE_SYSTEM) && - (TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) && - (Adapter->NumIdleTcb < TCB_RESOURCE_THRESHOLD) ) - { - if(!pTcb->bAggregate && !pTcb->bAMSDUProcessed) - *bImmediateComplete = TRUE; - } - return TRUE; - } - return FALSE; -} - - - - -BOOLEAN -PreTransmitTCB( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - //1 Note: Buffer list in pTcb may contain zero-length buffer(include first one) - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - pu1Byte pHeader = pTcb->BufferList[0].VirtualAddress; - BOOLEAN bMicFailureReport = FALSE; - RT_RF_POWER_STATE rtState; - BOOLEAN bCheckLocalToWds = FALSE; - BOOLEAN bImmediateComplete = FALSE; - RT_PS_TX_STATUS psTxStatus; - pu1Byte pRevAddr=NULL; - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefaultMgntInfo =&(DefAdapter->MgntInfo); - RT_STATUS rtStatus; - - pTcb->SourceAdapt = Adapter; - - Adapter->ShortcutIndex = 0; - - if( Adapter->SNForShortcut >= 255 ) - Adapter->SNForShortcut = 1; - else - Adapter->SNForShortcut++; - pTcb->SNForShortcut = Adapter->SNForShortcut; - - if(RT_DRIVER_STOP(Adapter)) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - return FALSE; - } - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - - if(rtState == eRfOff) - { // This packet should not be sent if RF is OFF, drop it !! - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SEND, DBG_LOUD, ("PreTransmitTCB(): RF is off, returnTCB!\n")); - return FALSE; - } -//Go skip sending probeRsp when scanning -//by sherry 20130117 - if((GetFirstGOPort(Adapter)!= NULL) && (MgntScanInProgress(&DefAdapter->MgntInfo)) && IsMgntProbeRsp(pTcb->BufferList[0].VirtualAddress)&& GetDefaultAdapter(Adapter)->bInHctTest) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("===>PreTransmitTCB(): GO do not send any packet during default port is in scan\n")); - RT_PRINT_DATA(COMP_MLME,DBG_LOUD,"send data content: \n",pTcb->BufferList[0].VirtualAddress,24); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - return FALSE; - } - - do{ - - { - if(pTcb->bAMSDUProcessed == FALSE) - { - - if(!MgntFilterTransmitPacket(Adapter, pTcb) && !GET_SIMPLE_CONFIG_ENABLED(pDefaultMgntInfo)) - { // This packet should not be sent, drop it !! - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - - //2 Set all unspecified data to valid value - if(pTcb->ProtocolType==RT_PROTOCOL_802_3) - { - RT_DISP(FQoS, QoS_INIT, ("RT_PROTOCOL_802_3 PreTransmitTCB\n")); - - TranslateHeader(Adapter, pTcb); - - pTcb->ProtocolType=RT_PROTOCOL_802_11; - - // We only check if GroupTransmitKey exists when - // sending non-EAPPacket in Ad-Hoc mode with AES or TKIP encryption. - // 2004.11.30, by rcnjko. - if( pMgntInfo->mIbss && !IsSecProtEapol(pTcb->EncInfo.SecProtInfo) ) - { - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP || - pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP ) - { - if(pSecInfo->KeyLen[pSecInfo->DefaultTransmitKeyIdx] == 0) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - } - } - - // Not to send packet if there is no key. Added by Annie , 2006-04-27. - if( SecDropForKeyAbsent( Adapter, pTcb ) ) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - - bCheckLocalToWds = TRUE; - } - else - { - if( ACTING_AS_AP(Adapter) ) - { - OCTET_STRING pduOS; - pduOS.Octet = pTcb->BufferList[0].VirtualAddress; - pduOS.Length = (u2Byte)pTcb->BufferList[0].Length; - CopyMem(pTcb->DestinationAddress, Frame_pDaddr(pduOS), ETHERNET_ADDRESS_LENGTH); - CopyMem(pTcb->SourceAddress, Frame_pSaddr(pduOS), ETHERNET_ADDRESS_LENGTH); - } - - if (pTcb->bFromUpperLayer == TRUE) - { - RT_DISP(FQoS, QoS_INIT, ("Data from upper layer FillPartialHeader\n")); - // - if( pTcb->BufferList[0].VirtualAddress[0] == Type_Data ) - { - FillPartialHeader( Adapter, pTcb ); - bCheckLocalToWds = TRUE; - - if(SecDropForKeyAbsent( Adapter, pTcb ) ) - { - RT_TRACE(COMP_SEC,DBG_LOUD,("PreTransmit :SecDropForKeyAbsent: drop data \n")); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - } - } - else - { - OCTET_STRING pduOS; - pduOS.Octet = pTcb->BufferList[0].VirtualAddress; - pduOS.Length = (u2Byte)pTcb->BufferList[0].Length; - CopyMem(pTcb->DestinationAddress, Frame_pDaddr(pduOS), ETHERNET_ADDRESS_LENGTH); - CopyMem(pTcb->SourceAddress, Frame_pSaddr(pduOS), ETHERNET_ADDRESS_LENGTH); - - MgntGetEncryptionInfo(Adapter, pTcb, &pTcb->EncInfo, FALSE); - } - } - - // - // Our parser only apply to data frame from upper layer. - // So as admission control. 2007.06.28, by shien chang. - // - if( IsDataFrame(pHeader) && (pTcb->bFromUpperLayer == TRUE)) - { - BOOLEAN bCcxCACEnable = FALSE; - u1Byte CurrCcxVerNumber = 0; - - CCX_QueryVersionNum(Adapter, &CurrCcxVerNumber); - CCX_QueryCACSupport(Adapter, &bCcxCACEnable); - - if((bCcxCACEnable) && CurrCcxVerNumber >= 4) - { - TR_ACTION trAction = TR_ACTION_CONTINUE; - // Parse the packet and decide which action should be take. - trAction = GPParseTCB(Adapter, pTcb, PROTO_WLAN_80211); - if (trAction != TR_ACTION_CONTINUE) - { - // Note: We assume packet were handled in GPParseTCB. - RT_TRACE(COMP_SEND, DBG_TRACE, ("PreTransmitTCB(): Packet were handled\n")); - if (trAction == TR_ACTION_DROPPED) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - } - break; - } - } - - // Admission control by SW. By Bruce, 2009-03-25. - if(pMgntInfo->pStaQos->AcmMethod == eAcmWay2_SW) - { - // - // In admission cotrolled queue, the packet should be - // (1) sent as the UP defined, or - // (2) dropped, if the TSID is defined but the TS is invalid/rejected/non-used, or - // (3) buffered, if the TSID and TS is valid but the used time exceeds the admitted time, or - // (4) mapped to the lower UP that does not require ACM (WiFi test). - // Note: - // If the pMgntInfo->pStaQos->AcmMethod is set eAcmWay2_SW, the ACM is absolutely - // handled by SW and the actions follow the 4 items described of the above. - // By Bruce, 2009-03-25. - // - if (QosAdmissionControl(Adapter, pTcb) ) - { - break; - } - } - - if(RT_SA_QUERY_STATE_UNINITIALIZED != pSecInfo->pmfSaState && !ACTING_AS_AP(Adapter)) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - } - - if(AMSDUTransmitTCB(Adapter, &pTcb, pHeader) == FALSE) - return FALSE; - } - - SecFillProtectTxMgntFrameHeader(Adapter, pTcb); - - // - // We need to move this code to TDLS. - if(Adapter->TDLSSupport && pTcb->bTDLPacket && pTcb->bNeedTxReport) - { - if(!TDLS_PrepareTxFeedback(Adapter, pTcb)) - { - RT_TRACE_F(COMP_TDLS, DBG_WARNING, ("TDLS_PrepareTxFeedback failed!\n")); - } - } - - // Forward the frame from local machine to WDS if necessary. - if(bCheckLocalToWds && ACTING_AS_AP(Adapter) && pMgntInfo->WdsMode != WDS_DISABLED) - { - AP_WdsTx(Adapter, pTcb); - } - - bMicFailureReport = IsSecProtMicFailureReport(pTcb->EncInfo.SecProtInfo); - - // Query management for data rate - pTcb->DataRate = MgntQuery_FrameTxRate( Adapter, pTcb ); - - // Calculate TKIP MIC if this packet will be encrypted by HW or SW. - if( (IsFrameTypeData(pHeader) && !IsMgntNullFrame(pHeader)) && // Do not calc MIC for Null Function Data frame. 2005.03.23, by rcnjko. - (!IsSecProtEapolBeforeKeyInstalled(pTcb->EncInfo.SecProtInfo)) && // Do not calc MIC for EAPOL packet before PTK installed. - (!IsFrameWithAddr4(pHeader)) ) // Don't calc MIC for WDS frame since we don't plan to implement TKIP for WDS. 2006.06.12, by rcnjko. - { - SecCalculateMIC(Adapter, pTcb); - }else if( pTcb->EncInfo.bMFPPacket ) - { - // TKIP MFP case - RT_TRACE( COMP_CCX , DBG_LOUD , ("===> TKIP MFP Calculate MIC \n") ); - SecCalculateMIC(Adapter, pTcb); - } - - RemoveZeroLengthBuffer(pTcb); - //2 After this point, the TCB should never contain zero-length buffer - //2 Because all zero-length buffers are reserved for header translation - if( IsFrameTypeData(pHeader) ) - { - if(RT_STATUS_SUCCESS == WAPI_SecFuncHandler(WAPI_PRETRANSMITTCB, Adapter, (PVOID)pTcb, WAPI_END)) - break; - } - - }// end if(pTcb->bDrvAggrProcessed == FALSE) - - if(TxCheckCoalesce(Adapter, pTcb)) - { - if(PreTransmitTxDoCoalesce(Adapter, pTcb, &pHeader) == FALSE)// '&' add by ylb 20130508 for pHeader is wrong when enable AMSDU - break; - } - - //1 Caution: Don't add any code between coalesce and fragment. - //1 Because the length information may be wrong. - if(CheckFragment(Adapter, pTcb, Adapter->TXPacketShiftBytes)) - { - FragmentTCB(Adapter, pTcb); - } - - - //1 Note: In fragment case, we should use FragLength instead of PacketLength - - // Update fragment information for non-fragment case. 2005.03.08, by rcnjko. - if(pTcb->FragCount==1) - { - pTcb->FragLength[0]=(u2Byte)pTcb->PacketLength; - pTcb->FragBufCount[0]=pTcb->BufferCount; - } - - // - // Do not enter QosFillHeader if the frame is NULL frame, because the function will modify - // the QueueID of the TCB. By Bruce, 2008-01-18. - // - if( IsDataFrame(pHeader) && !IsMgntNullFrame(pHeader) && (pMgntInfo->bNicVerifyPkt!=TRUE)) - { - QosFillHeader( Adapter, pTcb ); - } - - RT_ASSERT( pTcb->SpecifiedQueueID!=UNSPECIFIED_QUEUE_ID, ("PreTransmitTCB(): %d: SpecifiedQueueID should not be UNSPECIFIED!!\n", pTcb->SpecifiedQueueID ) ); - - // Fill up WEP bit and IV of each fragment in the TCB if necessary. - if (SecFillHeader(Adapter, pTcb)) - { - // Do software encryption if necessary. - if( !pTcb->EncInfo.IsEncByHW || pSecInfo->SWTxEncryptFlag ) - { - SecSoftwareEncryption(Adapter, pTcb); - } - } - - - // Try to Get SNose for S5 - if( !ACTING_AS_AP(Adapter) && pMgntInfo->PowerSaveControl.WoWLANS5Support) - { - pu1Byte pEapMess = NULL; - u4Byte EapPkLen =0; - BOOLEAN bEncrypt = MgntGetEncryptionInfo( Adapter, pTcb, &pTcb->EncInfo,TRUE); - // We need call this after Coalesce , and EAPoL all need to Coalesced - // EAPoL can't be Fragment !! - if( IsSecProtEapol(pTcb->EncInfo.SecProtInfo) ) - { - // Get 4-Way 2nd Packet!! EAP_HDR_LEN - pEapMess = pTcb->BufferList[0].VirtualAddress + EAP_HDR_LEN; - EapPkLen = pTcb->PacketLength - EAP_HDR_LEN; - if( bEncrypt ) - { - pEapMess = pEapMess + pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - EapPkLen = EapPkLen - pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - } - - if(IsQoSDataFrame(pHeader)) - { - pEapMess = pEapMess + sQoSCtlLng; - EapPkLen = EapPkLen - sQoSCtlLng; - } - //RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "S5 EAPOL remove HDR \n", pEapMess, EapPkLen); - if( (u1Byte)( *(pEapMess+1) ) == LIB1X_EAPOL_KEY) - { - OCTET_STRING pEapKeyMess; - - pEapKeyMess.Octet = pEapMess + LIB1X_EAPOL_HDRLEN; - pEapKeyMess.Length = (u2Byte)(EapPkLen- LIB1X_EAPOL_HDRLEN); - - - if( Message_KeyType(pEapKeyMess) == type_Pairwise ) - { - pu1Byte mbS5SNose = NULL; - u1Byte indexSn = 0; - - mbS5SNose = pEapKeyMess.Octet + KeyNoncePos; - for(indexSn = 0 ; indexSn < KEY_NONCE_LEN ; indexSn++) - { - // Check SNonse != all 0 - if( mbS5SNose[indexSn] != 0 ) - { - PlatformMoveMemory(pMgntInfo->mbS5SNose, mbS5SNose , KEY_NONCE_LEN); - break; - } - } - - } - - } - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "S5 mbS5SNose \n", pMgntInfo->mbS5SNose , KEY_NONCE_LEN); - - } - } - - // - // This packet is queued, and just return immediately. - // This is a temporal solution. A known issue between tx aggregation and PS may cause TCBs corrupted. - // Do not check-in this code into the 92SU project. - // By Bruce, 2010-06-02. - psTxStatus = VerifyPsOnTx(Adapter, pTcb); - if(psTxStatus == RT_PS_TX_STATUS_PKT_DROPPED) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - else if(psTxStatus == RT_PS_TX_STATUS_PKT_BUFFERED) - { - // RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "PreTransmitTCB(): Packet Buffered pTcb->DestinationAddress: ", pTcb->DestinationAddress); - break; - } - - // - // Map channel switch pkt to power save condition - // TRUE: buffer pkt - // FALSE: send pkt immediately - if(TDLS_CS_BufferCSTx(Adapter, pTcb)) - { - break; - } -//move redirect Queue for TransmitTCB to here, to fix queue is error after scan -//by sherry 20130117 -#if (MULTICHANNEL_SUPPORT == 1) - { // Redirect packets to specific queue in order to use TxPause to cease packet transmission for a client easily - u1Byte QueueID; - if( - MgntLinkStatusQuery(GetFirstGOPort(Adapter)) == RT_MEDIA_CONNECT || - MgntLinkStatusQuery(GetFirstClientPort(Adapter)) == RT_MEDIA_CONNECT - ) - { - - // Redirect to Specific Queue ------------------------------------------------------- - - // - // We should not redirect queue ID for upper Miracast application, it might cause - // compatibility issue for multi-queue transmission on DMP site. And we need to decide TCB priority for HW-AC mapping - // as well to prevent incorrect TXDMA mapping, e.g., VI_QUEUE(LOW_QUEUE for Non-Qos and default specific queue in AP mode) - // map to QSLT_BE. - // 2013.10.14. - // - if(GetDefaultAdapter(Adapter)->bInHctTest) - QueueID = pTcb->SpecifiedQueueID = MultiChannelRedirectPacketToSpecificQueue(pTcb); - else - QueueID = pTcb->SpecifiedQueueID; - - // ------------------------------------------------------------------------------ - - // SW-AC Queue and HW-AC Queue Coherence (cf. MapHwQueueToFirmwareQueue) --- - switch(QueueID) - { - case BE_QUEUE: pTcb->priority = QSLT_BE; break; - case BK_QUEUE: pTcb->priority = QSLT_BK; break; - case VI_QUEUE: pTcb->priority = QSLT_VI; break; - case VO_QUEUE: pTcb->priority = QSLT_VO; break; - } - // ------------------------------------------------------------------------ - } - RT_TRACE(COMP_MULTICHANNEL, DBG_TRACE,("pretransmitTCB: pTcb->SpecifiedQueueID = %d \n",pTcb->SpecifiedQueueID)); - - // - // Drop miracast RTP packet if necessary - // - { - PMULTICHANNEL_PORT_CONTEXT pPortContext = (PMULTICHANNEL_PORT_CONTEXT)(pTcb->SourceAdapt->MultiChannel); - if(TEST_FLAG(pPortContext->FCSPortState, FCS_STATE_PKT_DROPPED) && (TX_IPTYPE_UDP == pTcb->IPType) ) - { - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - break; - } - } - } -#endif - - if(pHalData->bAutoAMPDUBurstMode && pTcb->SpecifiedQueueID < BEACON_QUEUE) - { - if(pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP && pMgntInfo->bMediaConnect && (Adapter->bInHctTest==FALSE)) - { - if( IsFrameTypeData(pHeader)) - { - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List, GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - return FALSE; - } - } - - if(!pMgntInfo->LinkDetectInfo.bBusyTrafficAccordingTP && (*GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID))> 0) - { - HAL_HW_TIMER_TYPE TimerType = HAL_TIMER_EARLYMODE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_HW_REG_TIMER_RESTART, (pu1Byte)(&TimerType)); - } - } - - // - // 1. We should insert the packet into tail of TcbWaitQueue, - // and transmit it TxHandleInterrupt() or UsbIoCompeleteSentXXX() - // with TransmitTCB(). - // 2. Other conditions: - // Out of TCB, TxDesc, NetworkSetupInProgress(). - if( (IsFrameTypeData(pHeader) && - - ((pMgntInfo->bScanInProgress) || GET_HAL_DATA(Adapter)->bNeedQueuePacketInIQKProgress) && // Marked: To shorten the Ping roundtrip time. Use TxPause to hold packets. - - !IsMgntNullFrame(pHeader) && - !pMgntInfo->bScanWithMagicPacket ) || - FwLPSCheckChangeTxBoundary(Adapter)) // For WOL feature, we must pass data frame in this case. 2005.06.27, by rcnjko. - { - - // We must queue the packet to send during scanning, otherwise - // scan with ping will loss packet. 2004.11.30, by rcnjko. - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List,GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - - // If buffer is coalesced, packet should be returned immediately in Platform. - // 2007.07.17, by shien chang. - if ( (ACTING_AS_AP(Adapter) == FALSE) && - (pTcb->BufferType == RT_TCB_BUFFER_TYPE_SYSTEM) && - (TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) && - (Adapter->NumIdleTcb < TCB_RESOURCE_THRESHOLD) ) - { - { - if(!pTcb->bAggregate && !pTcb->bAMSDUProcessed) - bImmediateComplete = TRUE; - } - } - break; - } - - // Buffer this MPDU if there is already packets in wait queue. 2006.09.22, by rcnjko. - if(PreTransmitWaitQueue(Adapter, pTcb, &bImmediateComplete) == TRUE) - break; - - if(GET_HAL_DATA(Adapter)->AMPDUBurstMode == RT_AMPDU_BRUST_92D || - (GET_HAL_DATA(Adapter)->AMPDUBurstMode == RT_AMPDU_BRUST_8814A )|| - (GET_HAL_DATA(Adapter)->AMPDUBurstMode == RT_AMPDU_BRUST_8822B)) - { - GetTcbDestaddr(Adapter, pTcb, &pRevAddr); - // Check if the A-MPDU aggreagtion is allowed and get its aggregation capabilities/ - MgntQuery_AggregationCapability(Adapter, pRevAddr, pTcb); - //If we use 92D early mode, just insert into WaitQueue for Qos Data. pTcb->bAMPDUEnable not used. - if( pTcb->bAMPDUEnable && Adapter->EarlyMode_QueueNum[pTcb->priority] > Adapter->EarlyMode_Threshold) - { - RTInsertTailList(&Adapter->TcbWaitQueue[pTcb->SpecifiedQueueID], &pTcb->List); - RT_TRACE(COMP_SEND,DBG_LOUD,("InsertTailList(&Adapter->TcbWaitQueue--3.Adapter->EarlyMode_QueueNum[%d]:%d\n",pTcb->priority,Adapter->EarlyMode_QueueNum[pTcb->priority])); - break; - } - } - - if( IsFrameTypeData(pHeader) ) - { - // Start Timer for LED Tx/Rx blinking - if(Adapter->bInHctTest) - { - Adapter->HalFunc.LedControlHandler( Adapter, LED_CTL_TX); - } - else - { - if (Adapter->LedTxCnt == 0) - PlatformSetTimer(Adapter, &pMgntInfo->LedTimer, 50); - } - - Adapter->LedTxCnt++; - } - - // - // NOTE! DO NOT ACCESS pTcb after TransmitTCB() return sucessfully. - // Otherwise, it will cause Tx dead locked at USB path. - // 061122, by rcnjko. - // - rtStatus = TransmitTCB(Adapter, pTcb); - if(RT_STATUS_SUCCESS != rtStatus && RT_STATUS_PKT_DROP != rtStatus) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("TransmitTcb fail\n")); - RTInsertTailListWithCnt(Get_WAIT_QUEUE(Adapter, pTcb->SpecifiedQueueID), &pTcb->List, GET_WAIT_QUEUE_CNT(Adapter,pTcb->SpecifiedQueueID)); - - // If buffer is coalesced, packet should be returned immediately in Platform. - // 2007.07.17, by shien chang. - if ( (ACTING_AS_AP(Adapter) == FALSE) && - (pTcb->BufferType == RT_TCB_BUFFER_TYPE_SYSTEM) && - (TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) && - (Adapter->NumIdleTcb < TCB_RESOURCE_THRESHOLD) ) - { - { - if(!pTcb->bAggregate && !pTcb->bAMSDUProcessed) - { - //pTcb->Reserved = NULL; - bImmediateComplete = TRUE; - } - } - //return TRUE; - } - } - - // - // 041005, rcnjko: - // Disassociate from the AP after MIC failure report sent - // if twice MIC error occured in 60 seconds. - // - if( bMicFailureReport && // Replaced with a local varible to prevent access pTcb after TransmitTCB(), 061122, by rcnjko. - pSecInfo->bToDisassocAfterMICFailureReportSend ) // Modified by Annie for WiFi WPA2 Test in SGS, 2006-06-14. - { - // For debug purpose. - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "PreTransmitTCB(): Send MIC Report", pTcb->BufferList[0].VirtualAddress, pTcb->BufferList[0].Length); - - // Reset bToDisassocAfterMICFailureReportSend. - // bToDisassocAfterMICFailureReportSend has better to be reset - // if the MIC failure report is not sent by upper layer after a period. - pSecInfo->bToDisassocAfterMICFailureReportSend = FALSE; - - // Disassociate from AP. - // Note that, we must relase Tx spinlock before calling MgntActSet_802_11_DISASSOCIATE() - // because SendDisassociation() will acquire it again, which will cause OS hang. - // 2005.08.02, by rcnjko. - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - MgntActSet_802_11_DEAUTHENTICATION(Adapter, mic_failure); // Modified for WiFi Mandatory Testplan v1.2: We shall send Deauthentication packet instead of Disassociation packet. Annie, 2006-05-04. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - }while(FALSE); - return bImmediateComplete; -} - -BOOLEAN -TxCheckCoalesce( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - return TRUE; -} - -BOOLEAN -TxDoCoalesce( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u2Byte i ,BytesCopied=0; - u2Byte FragThreshold, FragLength, Offset, Length; - u1Byte QosCtrlLen = 0; // Added by Annie, 2006-01-08. - BOOLEAN bFragment; - PRT_TX_LOCAL_BUFFER pCoalseceBuffer; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - //2 Note: Fragment header and encryption header should be reserved here. - - pCoalseceBuffer=GetLocalBuffer(Adapter); - if(pCoalseceBuffer==NULL) - return FALSE; - - // Note that! we have not yet reserved Tx Desc for 8187, so header offset is 0. - bFragment=CheckFragment(Adapter, pTcb, 0); - BytesCopied = Adapter->TXPacketShiftBytes; - - // Consider QoS data frame. Added by Annie, 2006-01-08. - if( IsQoSDataFrame( pTcb->BufferList[0].VirtualAddress ) ) - { - QosCtrlLen = sQoSCtlLng; - } - - //2 Coalesce data - if(!bFragment) - { - for(i=0;iBufferCount;i++) - { - PlatformMoveMemory( - pCoalseceBuffer->Buffer.VirtualAddress+BytesCopied, - pTcb->BufferList[i].VirtualAddress, - pTcb->BufferList[i].Length); - BytesCopied += (u2Byte)pTcb->BufferList[i].Length; - } - - RT_ASSERT(BytesCopied==(pTcb->PacketLength+Adapter->TXPacketShiftBytes), ("Coalesce length mismatch !!\n")); - } - else - { - FragThreshold=FRAGMENT_THRESHOLD(Adapter); - Offset=0; - FragLength=0; - for(i=0;iBufferCount;) - { - if(((pTcb->BufferList[i].Length - Offset) + FragLength) > FragThreshold) - Length=FragThreshold - FragLength; - else - Length=(u2Byte)(pTcb->BufferList[i].Length - Offset); - - PlatformMoveMemory( - pCoalseceBuffer->Buffer.VirtualAddress+BytesCopied, - pTcb->BufferList[i].VirtualAddress + Offset, - Length); - BytesCopied += Length; - FragLength += Length; - Offset += Length; - - if(Offset==pTcb->BufferList[i].Length) - { - Offset=0; - i++; - } - - if(FragLength==FragThreshold && i!=pTcb->BufferCount) - { - BytesCopied += Adapter->TXPacketShiftBytes; - - // Add for ICV or MIC , 2007/12/28 by CCW - BytesCopied += pMgntInfo->SecurityInfo.EncryptionTailOverhead; - - BytesCopied += (sMacHdrLng + QosCtrlLen + pMgntInfo->SecurityInfo.EncryptionHeadOverhead); - FragLength = (sMacHdrLng + QosCtrlLen + pMgntInfo->SecurityInfo.EncryptionHeadOverhead); - } - } - } - - //2 Modify buffer list - pTcb->BufferList[0]=pCoalseceBuffer->Buffer; - pTcb->BufferList[0].Length=BytesCopied; - pTcb->BufferCount=1; - - pTcb->pCoalesceBuffer=pCoalseceBuffer; - SET_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER); - - return TRUE; -} - -BOOLEAN -CheckFragment( - PADAPTER Adapter, - PRT_TCB pTcb, - int nHdrOffset // This is the offset of 802.11 header, e.g. 8185=>0, 8187=>USB_HWDESC_HEADER_LEN. - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte pHeader = NULL; - pu1Byte pRaddr = NULL; - - pHeader = pTcb->BufferList[0].VirtualAddress+ nHdrOffset; - - pRaddr = pHeader + 4; - - - if(pTcb->bBTTxPacket) - return FALSE; - - //2 Check length - if(pTcb->PacketLength <= FRAGMENT_THRESHOLD(Adapter)) - { - return FALSE; - } - - //2 Check multicast/broadcast - if(MacAddr_isMulticast(pRaddr)) - { - return FALSE; - } - - // Don't perform fragmentation on WDS frame. - if(IsFrameWithAddr4(pHeader)) - { - return FALSE; - } - - //2 Check A-MPDU and A-MSDU aggregation condition - if( pMgntInfo->pHTInfo->bCurrentHTSupport && - (pMgntInfo->pHTInfo->bCurrentAMPDUEnable || - pMgntInfo->pHTInfo->bCurrent_AMSDU_Support || - pMgntInfo->pHTInfo->ForcedAMPDUMode == HT_AMPDU_ENABLE || - (ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter))) - ) - { - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntry( pMgntInfo, pTcb->DestinationAddress); - if(pEntry != NULL) - { - if(pEntry->IOTAction & HT_IOT_ACT_AMSDU_ENABLE) - return FALSE; - else if(pEntry->IOTAction & HT_IOT_ACT_AMSDU_AMPDU) - return FALSE; - } - } - else - return FALSE; - } - - // Don't do fragmentation on EAP Packet - if( IsSecProtEapol(pTcb->EncInfo.SecProtInfo)== TRUE ) - { - return FALSE; - } - - return TRUE; -} - -VOID -FragmentTCB( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u2Byte i, AddLen, Length, Offset=0; - u2Byte FragThreshold; - u2Byte FragIndex=0, FragLen, FragBufferCount; - u2Byte ReadBufferIndex, WriteBufferIndex=0; - u2Byte BufferCount; - SHARED_MEMORY CoalesceBuffer, BufferList[MAX_PER_PACKET_BUFFER_LIST_LENGTH]; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u1Byte QosCtrlLen = 0; // Added by Annie, 2006-01-09. - - if(CheckFragment(Adapter, pTcb, Adapter->TXPacketShiftBytes) == FALSE) - return; - - FragThreshold=FRAGMENT_THRESHOLD(Adapter); - - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { // Coalesce case - //2 Note: In this case, header and encryption overhead is already reserved. - - CoalesceBuffer=pTcb->BufferList[0]; - - FragThreshold += Adapter->TXPacketShiftBytes; - - do{ - if((CoalesceBuffer.Length-Offset) > FragThreshold) - { - - Length = FragThreshold; - - } - else - { - Length=(u2Byte)(CoalesceBuffer.Length-Offset); - } - - GET_SHARED_MEMORY_WITH_OFFSET( - &CoalesceBuffer, - &pTcb->BufferList[FragIndex], - Offset, - Length); - - pTcb->FragLength[FragIndex]=Length; - pTcb->FragBufCount[FragIndex]=1; - - Offset+=Length; - - // offset ICV or MIC fild ,2007/12/28 by CCW - Offset += pMgntInfo->SecurityInfo.EncryptionTailOverhead; - - FragIndex++; - }while(OffsetFragCount=FragIndex; - pTcb->BufferCount=FragIndex; - } - else - { - // Consider QoS data frame. Added by Annie, 2006-01-09. - if( IsQoSDataFrame( pTcb->BufferList[0].VirtualAddress ) ) - { - QosCtrlLen = sQoSCtlLng; - } - - //2 Duplicate buffer list - BufferCount=pTcb->BufferCount; - PlatformMoveMemory(BufferList, pTcb->BufferList, BufferCount*sizeof(SHARED_MEMORY)); - - FragLen=0; - FragBufferCount=0; - - //2 Get new buffer list and generate fragment information - for(ReadBufferIndex=0; ReadBufferIndex < BufferCount;) - { - if(FragLen + BufferList[ReadBufferIndex].Length > FragThreshold) - { - AddLen=FragThreshold-FragLen; - - pTcb->BufferList[WriteBufferIndex]=BufferList[ReadBufferIndex]; - pTcb->BufferList[WriteBufferIndex].Length=AddLen; - - MAKE_SHARED_MEMORY_OFFSET_AT_FRONT( - &BufferList[ReadBufferIndex], - AddLen); - } - else - { - pTcb->BufferList[WriteBufferIndex]=BufferList[ReadBufferIndex]; - ReadBufferIndex++; - } - FragLen +=(u2Byte)pTcb->BufferList[WriteBufferIndex].Length; - WriteBufferIndex++; - FragBufferCount++; - - if(FragLen==FragThreshold || ReadBufferIndex == BufferCount) - { - pTcb->FragLength[FragIndex]=FragLen; - pTcb->FragBufCount[FragIndex++]=FragBufferCount; - - if(ReadBufferIndex != BufferCount) - { //2 Insert header for 2~ fragment - pTcb->Header[FragIndex].Length=sMacHdrLng+QosCtrlLen+pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - pTcb->BufferList[WriteBufferIndex++]=pTcb->Header[FragIndex]; - - FragLen=sMacHdrLng+QosCtrlLen+pMgntInfo->SecurityInfo.EncryptionHeadOverhead; - FragBufferCount=1; - } - } - } - pTcb->FragCount=FragIndex; - pTcb->BufferCount=WriteBufferIndex; - } - - //2 Duplicate header and set fragment number and more frag - SET_80211_HDR_MORE_FRAG(pTcb->BufferList[0].VirtualAddress+Adapter->TXPacketShiftBytes, 1); // Set more frag - - FragIndex=pTcb->FragBufCount[0]; - for(i=1;iFragCount;i++) - { - PlatformMoveMemory( - pTcb->BufferList[FragIndex].VirtualAddress + Adapter->TXPacketShiftBytes, - pTcb->BufferList[0].VirtualAddress + Adapter->TXPacketShiftBytes, - sMacHdrLng); - - if(i==(pTcb->FragCount-1)) - { - SET_80211_HDR_MORE_FRAG(pTcb->BufferList[FragIndex].VirtualAddress+Adapter->TXPacketShiftBytes, 0); // Clear more frag for last fragment - } - - SET_80211_HDR_FRAGMENT(pTcb->BufferList[FragIndex].VirtualAddress+Adapter->TXPacketShiftBytes, (u1Byte)i); - - FragIndex+=pTcb->FragBufCount[i]; - } -} - -/*----------------------------------------------------------------------------- -// Procedure: Transmit one packet -// - Description: Emily 2006/04/30, For 8190 PCI - When configure tx descriptor under 8190Pci hardware, reserve the - first one descriptor for Firmware Info(not insert, cause the descriptor - address nust be contineous). Then, fill descriptor for each packet - buffer from the second descriptor. Configure first descriptor and - pTcb->nDescUsed++ before set Own bit. - - Joseph 2006/10/13, Revision - Integrate the procedure of protection mode determination and duration - calculation into single function respectively. - TransmitTcb() handle the information of each MSDU. - For further improvement, we can add an function like "HandleMPDUInfo" - to handle specific information of every fragment of MSDU. But now there - are only TxTime calculation is specific to each MPDU, so just leave this - idea for future extension. - Return value: - TransmitTCB returns RT_STATUS_RESOURCE if TransmitTCB occur some error and cannot Tx. - TransmitTCB returns RT_STATUS_PKT_DROP if The current link was teardown, and need to drop packet here. - TransmitTCB returns RT_STATUS_SUCCESS if TransmitTCB OK. -//-----------------------------------------------------------------------------*/ -RT_STATUS -TransmitTCB( - PADAPTER pAdapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - s2Byte i; - u2Byte firstDesc=0,curDesc=0; - u2Byte FragIndex=0, FragBufferIndex=0, FragBufCount=0; - u2Byte SequenceNumber = 0; - pu1Byte pFrame = GET_FRAME_OF_FIRST_FRAG(pAdapter, pTcb); - u1Byte QueueID = pTcb->SpecifiedQueueID; - pu1Byte pRecvAddr = NULL; - s2Byte BufferCount; - RT_RF_POWER_STATE rfState; - PADAPTER Adapter = GetDefaultAdapter(pAdapter); - - - pMgntInfo = &(Adapter->MgntInfo); - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - - if(rfState != eRfOn) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("TransmitTCB return by rfoff, return RT_STATUS_RESOURCE\n")); - return RT_STATUS_RESOURCE; - } - else if (Adapter->ResetProgress != RESET_TYPE_NORESET) - { //cosa add for debug use. 08/23/2007 - return RT_STATUS_RESOURCE; - } - -{ //tynli_test_32k 2011.02.25. - u1Byte FwPSState; - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pAdapter, FwPSState)) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("TransmitTCB(): CANNOT TX---> Wake up Hw. return RT_STATUS_RESOURCE\n")); - if( PlatformIsWorkItemScheduled(&(pMgntInfo->PowerSaveControl.FwPsClockOnWorkitem)) == FALSE) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("ScheduleWorkItem -> FwPsClockOnWorkitem.\n")); - PlatformScheduleWorkItem(&(pMgntInfo->PowerSaveControl.FwPsClockOnWorkitem)); - } - return RT_STATUS_RESOURCE; - } -} - - Adapter->TxStats.NumTransmitTCBCalled[QueueID]++; - - GetTcbDestaddr(Adapter, pTcb, &pRecvAddr); - - // - // Revise following condition to check specific Tx queue for aggregation case. - // -#if TX_AGGREGATION - if(FALSE == pTcb->outPending) - { - if(FALSE == PlatformIsTxQueueAvailable(Adapter, QueueID, pTcb->BufferCount)) - { - Adapter->TxStats.NumTransmitTCBNotAvailable[QueueID]++; - return RT_STATUS_RESOURCE; - } - } - - if(TRUE == pTcb->isUsbTxAgg){ - Adapter->HalFunc.TxFillDescriptorHandler(Adapter, pTcb, 0, 0, 0, 0); - return RT_STATUS_SUCCESS; - } - -#else - if(FALSE == PlatformIsTxQueueAvailable(Adapter, QueueID, pTcb->BufferCount)) - { - Adapter->TxStats.NumTransmitTCBNotAvailable[QueueID]++; - return RT_STATUS_RESOURCE; - } -#endif - - - // Note: - // To prevent lossing tx report from the HW restriction, make sure only one tcb - // with tx feedback info in HW queue. - if(TxFeedbackIsTxFeedbackInfoInstalled(pTcb)) - { - // If this tcb needs tx report, check all queues if there is one tcb with tx - // feedback already in HW tx queues. - if(TxFeedbackExistActiveTxFeedbackInfo(Adapter)) - { - RT_TRACE_F(COMP_CMD, DBG_LOUD, ("Already one tcb with tx feedback in Tx Queue, return FALSE to insert this TCB into wait queue! return RT_STATUS_RESOURCE\n")); - return RT_STATUS_RESOURCE; - } - } - - if(RT_IN_PS_LEVEL(Adapter, RT_RF_LPS_DISALBE_2R)) - { - BOOLEAN Disable2R = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_RF_2R_DISABLE, (pu1Byte)&Disable2R); - } - - // - // Fill the settings into TCB - // - pTcb->bBroadcast = MgntIsBroadcastFrame( Adapter, pTcb ); - pTcb->bMulticast = MgntIsMulticastFrame( Adapter, pTcb ); - pTcb->bEncrypt = pTcb->EncInfo.IsEncByHW; - - { - MgntQuery_PreambleMode(Adapter, pTcb); - - MgntQuery_TxRateSelectMode(pTcb->SourceAdapt, pTcb); - - if(pTcb->macId == MAC_ID_STATIC_UNSPECIFIED_MACID) - { - RT_TRACE_F(COMP_CMD, DBG_LOUD, ("Return TRUE because Entry was release and the data frame needs to drop, return RT_STATUS_RESOURCE\n")); - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - return RT_STATUS_PKT_DROP; - }//if - - // Check if the A-MPDU aggreagtion is allowed and get its aggregation capabilities/ - MgntQuery_AggregationCapability(pTcb->SourceAdapt, pRecvAddr, pTcb); - - /* 2007/03/06 MH This function check if short GI is enabled, and current - transmit bandwidth for TX firmware info in RTL8190. */ - MgntQuery_ShortGI(pTcb->SourceAdapt, pTcb); - - // Get the state if this packet sent by LDPC - MgntQuery_Tx_LDPC(pTcb->SourceAdapt, pTcb); - - // Get the state if this packet sent by STBC - MgntQuery_Tx_STBC(pTcb->SourceAdapt, pTcb); - - // Choose Bandwidth and sub-channel settings - MgntQuery_BandwidthMode(pTcb->SourceAdapt, pTcb); - - // Check if 802.11z is supported - if(pTcb->SourceAdapt->TDLSSupport) - TDLS_QueryCapability(pTcb->SourceAdapt, pTcb); - - - - // - // This function will determine if we need to send protection frame and how to send protection frame. - // And save the result in TCB. - // Although protection mode is determined for each MSDU. This function will use the first fragment of - // the MSDU to make decision and apply the decision to other fragment in this MSDU. - // - MgntQuery_ProtectionFrame(pTcb->SourceAdapt, pTcb); - - } - // - // Sequence number should be the same for every fragment of this packet. 2005.04.14, by rcnjko. - // Management frame and Legacy Data frame use the same number sequence. - // Qos Data frame will use individual number sequence according to destination address and TID. - // - SequenceNumber = MgntQuery_SequenceNumber( - pTcb->SourceAdapt, - pFrame, - pTcb->bBTTxPacket, - pRecvAddr, - pTcb->priority - ); - // - // This function will calculate the duration for each fragmentation(MPDU) of this MSDU. - // The result will save in TCB. - // - MgntQuery_TxTime(pTcb->SourceAdapt, pTcb); - - // - // Filling the information into frame header. - // Duration field and SeqNum field is now handled in this function. - // - FillFrameField(Adapter, pTcb, SequenceNumber); - -#if WLAN_ETW_SUPPORT - // - // Assign sequence number - // - pTcb->TcbSequence = SequenceNumber; -#endif - - //cosa add for debug use. 08/23/2007 - Adapter->TxStats.NumTransmitTCBAvailable[QueueID]++; - - // - // Fill Tx Descriptor - // - if(IS_RW_PTR(Adapter)) - firstDesc=0; - else - firstDesc = curDesc = Adapter->NextTxDescToFill[QueueID]; - - pTcb->nDescUsed=0; - pTcb->nFragSent = 0; - pTcb->nFragCompleted = 0; - Adapter->nFragDescUsed=0; - - BufferCount = pTcb->BufferCount; - - for(i=0;i< pTcb->BufferCount;i++) - { - BOOLEAN bFirstSeg, bLastSeg; - - if(IS_RW_PTR(Adapter)) - { - if(FragBufferIndex == 0) - { - FragBufCount = pTcb->FragBufCount[FragIndex]; - pTcb->nDescUsed++; - Adapter->nFragDescUsed++; - } - } - else - { - if(FragBufferIndex == 0) - FragBufCount = pTcb->FragBufCount[FragIndex]; - Adapter->nFragDescUsed = 1; - pTcb->nDescUsed++; - } - -#if !defined(MUTIPLE_BULK_OUT) - // - // 050413, rcnjko: - // For 8187, we must keep at most one Irp Pending in each endpoint, - // so, we send one fragment in TransmitTCB() and will handle other fragment - // in the complete handler of this endpoint. - // - if(pTcb->nDescUsed == 1) -#endif - { - if(FragBufferIndex == (FragBufCount-1)) - pTcb->nFragSent++; - - if(IS_RW_PTR(Adapter)) - curDesc = Adapter->CurrentTXWritePoint[QueueID]; - -#if WLAN_ETW_SUPPORT - - // - // No activity needs to be associated with this event, the ActivityId is optional and can be NULL. - // 2014.01.14. - // - EventWriteTxSubmissionToNIC( - NULL, //Without associated with the event - pTcb->TcbFrameUniqueueID, //FrameUniqueueID - 0, // QueueLength - 0, // QueueState - 0, // Status - 0, // CustomData1 - 0, // CustomData2 - 0); // CustomData3 -#endif - - Adapter->HalFunc.TxFillDescriptorHandler(Adapter, pTcb, i, FragIndex, FragBufferIndex, curDesc); - } - - bFirstSeg = (FragBufferIndex == 0); - bLastSeg = (FragBufferIndex==(pTcb->FragBufCount[FragIndex]-1) ); - - FragBufferIndex++; - if(FragBufferIndex == FragBufCount) - { - FragIndex++; - FragBufferIndex=0; - } - - if(!IS_RW_PTR(Adapter)) - curDesc=(curDesc+1)%Adapter->NumTxDesc[QueueID]; - - } - - return RT_STATUS_SUCCESS; -} - - - - - -VOID -ResetTxStatistics( - PADAPTER Adapter - ) -{ - PlatformZeroMemory( &Adapter->TxStats, sizeof(RT_TX_STATISTICS) ); -} - - - -VOID -CountTxStatistics( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - RT_RF_POWER_STATE rtState; - - Adapter->HalFunc.GetHwRegHandler(GetDefaultAdapter(Adapter), HW_VAR_RF_STATE, (pu1Byte)(&rtState)); - - // When RF is off, we should not count the packet for hw/sw synchronize - // reason, ie. there may be a duration while sw switch is changed and hw - // switch is being changed. 2006.12.04, by shien chang. - if (rtState == eRfOff) - { - return; - } - - if( pTcb->status.TOK ) - { - - //Just record data packets to reduce the traffic flow. 2009.02.02 by tynli. - if(MgntIsDataOnlyFrame(Adapter, pTcb)) - { - Adapter->TxStats.NumTxOkTotal++; - if((pMgntInfo->StaCount > 0)&&(ACTING_AS_AP(Adapter))) - Adapter->TxStats.NumTxOkBytesTotal += pTcb->PacketLength; - else if(!ACTING_AS_AP(Adapter)) - Adapter->TxStats.NumTxOkBytesTotal += pTcb->PacketLength; - pMgntInfo->LinkDetectInfo.NumTxOkInPeriod++; - } - - if(MgntIsMulticastFrame(Adapter, pTcb)) - { - Adapter->TxStats.NumTxMulticast++; - Adapter->TxStats.NumTxBytesMulticast += pTcb->PacketLength; - } - else if(MgntIsBroadcastFrame(Adapter, pTcb)) - { - Adapter->TxStats.NumTxBroadcast++; - Adapter->TxStats.NumTxBytesBroadcast += pTcb->PacketLength; - } - else - { - Adapter->TxStats.NumTxUnicast++; - Adapter->TxStats.NumTxBytesUnicast += pTcb->PacketLength; - - TDLS_CountTxStatistics(Adapter, pTcb); - } - } - else - { - Adapter->TxStats.NumTxErrTotal++; - Adapter->TxStats.NumTxErrBytesTotal += pTcb->PacketLength; - - if(MgntIsMulticastFrame(Adapter, pTcb)) - { - Adapter->TxStats.NumTxErrMulticast++; - } - else if(MgntIsBroadcastFrame(Adapter, pTcb)) - { - Adapter->TxStats.NumTxErrBroadcast++; - } - else - { - Adapter->TxStats.NumTxErrUnicast++; - } - } - Adapter->TxStats.NumTxRetryCount += pTcb->status.DataRetryCount; - -} - -/* - Function:UpdateEarlyModeInfo - Decide the packet whether using Early Mode and the max mumber of packet can be pre-connected. - Just for 92D.by wl. -*/ -BOOLEAN -UpdateEarlyModeInfo( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN PRT_LIST_ENTRY plistHead - ) -{ - PRT_TCB pNextTcb=NULL; - PRT_LIST_ENTRY pEntry=NULL; - pu1Byte pFrame = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - RT_ENC_ALG ulSwitchCondition =pMgntInfo->SecurityInfo.PairwiseEncAlgorithm; - u1Byte additionLen=0, maxPktNum = EARLY_MODE_MAX_PKT_NUM; - - switch(GET_HAL_DATA(Adapter)->AMPDUBurstMode){ - case RT_AMPDU_BRUST_92D: - maxPktNum = EARLY_MODE_MAX_PKT_NUM_92D; - break; - case RT_AMPDU_BRUST_88E: - maxPktNum = EARLY_MODE_MAX_PKT_NUM_88E; - break; - case RT_AMPDU_BRUST_8812_4: - maxPktNum = 4; - break; - case RT_AMPDU_BRUST_8812_8: - maxPktNum = 8; - break; - case RT_AMPDU_BRUST_8812_12: - maxPktNum = 12; - break; - case RT_AMPDU_BRUST_8812_15: - maxPktNum = EARLY_MODE_MAX_PKT_NUM_8812; - break; - case RT_AMPDU_BRUST_8723B: - maxPktNum = EARLY_MODE_MAX_PKT_NUM_8723B; - break; - case RT_AMPDU_BRUST_8814A: - maxPktNum = EARLY_MODE_MAX_PKT_NUM_8814A; - break; - case RT_AMPDU_BRUST_8822B: - maxPktNum = EARLY_MODE_MAX_PKT_NUM_8822B; - break; - default: - maxPktNum = 0; - break; - } - - if(GET_HAL_DATA(Adapter)->AMPDUBurstNum < maxPktNum) - maxPktNum = GET_HAL_DATA(Adapter)->AMPDUBurstNum; - - switch( ulSwitchCondition ) - { - case RT_ENC_ALG_NO_CIPHER: - additionLen = 4; - break; - - case RT_ENC_ALG_WEP40: - case RT_ENC_ALG_WEP104: - additionLen = 8; - break; - - case RT_ENC_ALG_TKIP: - additionLen = 16; - break; - - case RT_ENC_ALG_AESCCMP: - additionLen = 12; - break; - - case RT_ENC_ALG_SMS4: - additionLen = 20; - break; - - case RT_ENC_ALG_WEP: - default: - break; - } - - if(MacAddr_isBcst(pTcb->DestinationAddress) ||MacAddr_isMulticast(pTcb->DestinationAddress) || !IsQoSDataFrame(pFrame)) - return FALSE; - - // Prefast warning 6011 - if(plistHead != NULL && RTIsListEmpty(plistHead)) - return FALSE; - - // Prefast warning 6011 - if (plistHead != NULL) - { - pEntry = RTGetHeadList(plistHead); - } - - pTcb->EMPktNum = 0; - do{ - pNextTcb = (PRT_TCB)pEntry; - // Prefast warning C6011: Dereferencing NULL pointer 'pNextTcb'. - if((pNextTcb != NULL) && (PlatformCompareMemory(pTcb->DestinationAddress,pNextTcb->DestinationAddress,ETHERNET_ADDRESS_LENGTH) == 0) - && (pTcb->priority == pNextTcb->priority)) - { - pTcb->EMPktLen[pTcb->EMPktNum] =pNextTcb->FragLength[0]+additionLen; - pTcb->EMPktNum ++; - } - else - break; - - // Prefast warning C6011: Dereferencing NULL pointer 'pEntry'. - if (pEntry != NULL) - { - pEntry = pEntry->Flink; - } - }while(pEntry && pEntry != plistHead && pTcb->EMPktNum < maxPktNum); - - return TRUE; -} - -/* -* -* First added: 2006.11.19 by emily -*/ -RESET_TYPE -TxCheckStuck( - IN PADAPTER Adapter - ) -{ - BOOLEAN bCheckFwTxCnt = FALSE; - u1Byte QueueID; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_TCB pTcb; - u1Byte ResetThreshold=NIC_SEND_HANG_THRESHOLD_NORMAL; - - // - // Decide Stuch threshold according to current power save mode - // - - switch (pMgntInfo->dot11PowerSaveMode) - { - // The threshold value may required to be adjusted . - case eActive: // Active/Continuous access. - ResetThreshold = NIC_SEND_HANG_THRESHOLD_NORMAL; - break; - case eMaxPs: // Max power save mode. - ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; - break; - case eFastPs: // Fast power save mode. - ResetThreshold = NIC_SEND_HANG_THRESHOLD_POWERSAVE; - break; - default: //for MacOS comipler warning: "eAutoPs" not handled in switch - break; - } - - // - // Check whether specific tcb has been queued for a specific time - // - for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) - { - - if(RTIsListEmpty(&Adapter->TcbBusyQueue[QueueID])) - continue; - else - { - pTcb = (PRT_TCB)RTGetHeadList(&Adapter->TcbBusyQueue[QueueID]); - pTcb->nStuckCount++; - - if(pTcb->nStuckCount > ResetThreshold) - { - RT_TRACE( COMP_SEND, DBG_SERIOUS, ("<== TxCheckStuck()\n") ); - return RESET_TYPE_SILENT; - } - - bCheckFwTxCnt = TRUE; - } - } - - - if(bCheckFwTxCnt) - { - if(Adapter->HalFunc.TxCheckStuckHandler(Adapter)) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("TxCheckStuck(): Fw indicates no Tx condition! \n")); - return RESET_TYPE_SILENT; - } - } - - return RESET_TYPE_NORESET; -} -#if TX_AGGREGATION -// -// Assumption: RT_TX_SPINLOCK is acquired. -// -VOID -_ReturnTCB( - PADAPTER pAdapter, - PRT_TCB pTcb, - RT_STATUS status - ) -{ - PADAPTER Adapter = GetDefaultAdapter(pAdapter); - RT_ASSERT(IS_TX_LOCKED(Adapter) == TRUE, ("ReturnTCB(): bTxLocked(%x) should be TRUE\n!", Adapter->bTxLocked)); - - if(pTcb == NULL) - { - // Prevent access violation, 2005.03.06, by rcnjko. - RT_TRACE(COMP_SEND, DBG_SERIOUS, ("ReturnTCB(): pTcb==NULL !!! \n")); - return; - } - - if (TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER) && (pTcb->pCoalesceBuffer != NULL)) - { - ReturnLocalBuffer(Adapter, pTcb->pCoalesceBuffer); - } - - switch(pTcb->BufferType) - { - case RT_TCB_BUFFER_TYPE_SYSTEM: - // We MUST release tx spin lock acquired before DrvIFCompletePacket(). - // Otherwise, nested lock acquiration might happen. - // For example, when we plug two 8187 in one machine, it will cause - // OS hangs at RtUsbSend(). 2005.11.17, by rcnjko. - if(pTcb->Reserved != NULL) - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - DrvIFCompletePacket(Adapter, pTcb, status); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - break; - - case RT_TCB_BUFFER_TYPE_LOCAL: - ReturnLocalBuffer(Adapter, (PRT_TX_LOCAL_BUFFER)pTcb->Reserved); - break; - - case RT_TCB_BUFFER_TYPE_BT_LOCAL: - break; - - case RT_TCB_BUFFER_TYPE_RFD: - ReturnRFDList(Adapter, (PRT_RFD)pTcb->Reserved); - break; - - case RT_TCB_BUFFER_TYPE_FW_LOCAL: - ReturnLocalFWBuffer(Adapter, (PRT_TX_LOCAL_BUFFER)pTcb->Reserved); - break; - - default: - RT_ASSERT(FALSE, ("ReturnTCB: unknow pTcb->BufferType: 0x%x!!!\n", pTcb->BufferType)); - break; - } - - if(pTcb->bAggregate) - { - u1Byte i; - for(i = 0; i < pTcb->AggregateNum; i++) - ReturnTCB(Adapter, pTcb->AggregatedTCB[i], RT_STATUS_SUCCESS); - } - - // Initialize TCB before insert it into TcbIdleQueue, 2005.07.06, by rcnjko. - CLEAR_FLAGS(pTcb->tcbFlags); - pTcb->DataRate=UNSPECIFIED_DATA_RATE; - pTcb->bSpecifShortGI = FALSE; - pTcb->bUseShortGI = FALSE; - pTcb->bLDPC = FALSE; - pTcb->bSTBC = FALSE; - pTcb->PacketLength = 0; - pTcb->BufferCount = 0; - pTcb->Reserved = NULL; - pTcb->priority = 0; - pTcb->EncInfo.SecProtInfo = RT_SEC_NORMAL_DATA; - pTcb->EncInfo.IsEncByHW = FALSE; // Null Function Data Len_Adjust debug, Annie, 2006-01-06. - pTcb->bFromUpperLayer = FALSE; - pTcb->TSID = DEFAULT_TSID; - pTcb->BWOfPacket = CHANNEL_WIDTH_20; - pTcb->bAggregate = FALSE; - pTcb->bAMSDUProcessed = FALSE; - pTcb->nStuckCount = 0; - pTcb->bAMPDUEnable = FALSE; - pTcb->AMPDUDensity = 0; - pTcb->AMPDUFactor = 0; - pTcb->bTxDisableRateFallBack = FALSE; - pTcb->bTxUseDriverAssingedRate = FALSE; - pTcb->bTxCalculatedSwDur = FALSE; - pTcb->bTxEnableSwCalcDur = FALSE; - pTcb->specialDataType = PACKET_NORMAL; - pTcb->macId = 0; - pTcb->P_AID = 0; - pTcb->G_ID = 0; - pTcb->bBTTxPacket = FALSE; - pTcb->BT_macId = 0; - pTcb->sysTime[0] = 0; - pTcb->sysTime[1] = 0; - pTcb->sysTime[2] = 0; - pTcb->sysTime[3] = 0; - pTcb->TxBFPktType = RT_BF_PKT_TYPE_NONE; - - pTcb->TcpOffloadMode = 0; - pTcb->MACHeardLen = 0; - - pTcb->outPending = FALSE; - pTcb->isUsbTxAgg = FALSE; - pTcb->aggNum = 0; - - pTcb->bNeedTxReport = FALSE; - pTcb->bTDLPacket = FALSE; - pTcb->bSendPTIRsp = FALSE; - pTcb->bSleepPkt = FALSE; - if(GET_HAL_DATA(Adapter)->AMPDUBurstMode) - { - pTcb->bEnableEarlyMode = FALSE; - pTcb->EMPktNum = 0; - PlatformZeroMemory(pTcb->EMPktLen,sizeof(pTcb->EMPktLen)); - } - RESET_CCX_PACKET_TX_INFO(pTcb); - - TxFeedbackDeInstallTxFeedbackInfoForTcb(Adapter, pTcb); - - RTInsertTailListWithCnt(&Adapter->TcbIdleQueue, &pTcb->List, &Adapter->NumIdleTcb); - RT_TRACE(COMP_SEND, DBG_LOUD, ("_ReturnTCB(), Adapter->NumIdleTcb = %d\n", Adapter->NumIdleTcb)); -} - - -VOID -ReturnTCB( - PADAPTER pAdapter, - PRT_TCB pTcb, - RT_STATUS status - ) -{ - if(pTcb->isUsbTxAgg) - { - RT_LIST_ENTRY aggList; - - if(RTIsListEmpty(&pTcb->aggListHead)){ - _ReturnTCB(pAdapter, pTcb, status); - return; - } - - RTInitializeListHead(&aggList); - RTSwitchListHead(&pTcb->aggListHead, &aggList); - _ReturnTCB(pAdapter, pTcb, status); - - while(RTIsListNotEmpty(&aggList)) - { - PRT_TCB pAggTcb = (PRT_TCB)RTRemoveHeadList(&aggList); - _ReturnTCB(pAdapter, pAggTcb, status); - } - } - else - _ReturnTCB(pAdapter, pTcb, status); -} - - -#else -// -// Assumption: RT_TX_SPINLOCK is acquired. -// -VOID -ReturnTCB( - PADAPTER pAdapter, - PRT_TCB pTcb, - RT_STATUS status - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pDefaultAdapter); - - RT_ASSERT(IS_TX_LOCKED(pDefaultAdapter) == TRUE, ("ReturnTCB(): bTxLocked(%x) should be TRUE\n!", pDefaultAdapter->bTxLocked)); - - if(pTcb == NULL) - { - // Prevent access violation, 2005.03.06, by rcnjko. - RT_TRACE(COMP_SEND, DBG_SERIOUS, ("ReturnTCB(): pTcb==NULL !!! \n")); - return; - } - - if (TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_USE_COALESCE_BUFFER)) - { - ReturnLocalBuffer(pDefaultAdapter, pTcb->pCoalesceBuffer); // coalesece buffer is belong to each adapter. - } - - switch(pTcb->BufferType) - { - case RT_TCB_BUFFER_TYPE_SYSTEM: - - if(pTcb->ColoaseMethod == 2) - { - u1Byte i=0; - - for (i=0; iBufferBackCount; i++) - { - //pTcb->BufferList[i+1] = pTcb->BufferListBack[i]; - //pTcb->BufferList[i+1].Length= pTcb->BufferListBack[i].Length; - pTcb->BufferList[i] = pTcb->BufferListBack[i]; - } - } - - // We MUST release tx spin lock acquired before DrvIFCompletePacket(). - // Otherwise, nested lock acquiration might happen. - // For example, when we plug two 8187 in one machine, it will cause - // OS hangs at RtUsbSend(). 2005.11.17, by rcnjko. - if(pTcb->Reserved != NULL) - { - PlatformReleaseSpinLock(pDefaultAdapter, RT_TX_SPINLOCK); - DrvIFCompletePacket(pDefaultAdapter, pTcb, status); - PlatformAcquireSpinLock(pDefaultAdapter, RT_TX_SPINLOCK); - } - break; - - case RT_TCB_BUFFER_TYPE_LOCAL: - if(pTcb->bTxCompleteLater) - { - PlatformReleaseSpinLock(pDefaultAdapter, RT_TX_SPINLOCK); - DrvIFCompletePacket(pDefaultAdapter, pTcb, RT_STATUS_SUCCESS); - PlatformAcquireSpinLock(pDefaultAdapter, RT_TX_SPINLOCK); - } - ReturnLocalBuffer(pDefaultAdapter, (PRT_TX_LOCAL_BUFFER)pTcb->Reserved); - break; - - case RT_TCB_BUFFER_TYPE_BT_LOCAL: - BT_ReturnDataBuffer(pDefaultAdapter, (PRT_TX_LOCAL_BUFFER)pTcb->Reserved); - break; - - case RT_TCB_BUFFER_TYPE_RFD: - ReturnRFDList(pDefaultAdapter, (PRT_RFD)pTcb->Reserved); - break; - - case RT_TCB_BUFFER_TYPE_FW_LOCAL: - ReturnLocalFWBuffer(pDefaultAdapter, (PRT_TX_LOCAL_BUFFER)pTcb->Reserved); - break; - - default: - RT_ASSERT(FALSE, ("ReturnTCB: unknow pTcb->BufferType: 0x%x!!!\n", pTcb->BufferType)); - break; - } - - if(pTcb->bAggregate) - { - u1Byte i; - for(i = 0; i < pTcb->AggregateNum; i++) - ReturnTCB(pDefaultAdapter, pTcb->AggregatedTCB[i], RT_STATUS_SUCCESS); - } - - // Initialize TCB before insert it into TcbIdleQueue, 2005.07.06, by rcnjko. - CLEAR_FLAGS(pTcb->tcbFlags); - if(pTcb->bTxCompleteLater) - { - pTcb->bTxCompleteLater = FALSE; - pTcb->ReservedBack = NULL; - } - pTcb->DataRate=UNSPECIFIED_DATA_RATE; - pTcb->bSpecifShortGI = FALSE; - pTcb->bUseShortGI = FALSE; - pTcb->bLDPC = FALSE; - pTcb->bSTBC = FALSE; - pTcb->PacketLength = 0; - pTcb->BufferCount = 0; - pTcb->BufferType = RT_TCB_BUFFER_TYPE_NONE; - pTcb->Reserved = NULL; - pTcb->priority = 0; - pTcb->EncInfo.SecProtInfo = RT_SEC_NORMAL_DATA; - pTcb->EncInfo.IsEncByHW = FALSE; // Null Function Data Len_Adjust debug, Annie, 2006-01-06. - pTcb->bFromUpperLayer = FALSE; - pTcb->TSID = DEFAULT_TSID; - pTcb->BWOfPacket = CHANNEL_WIDTH_20; - pTcb->bAggregate = FALSE; - pTcb->bAMSDUProcessed = FALSE; - pTcb->nStuckCount = 0; - pTcb->bAMPDUEnable = FALSE; - pTcb->AMPDUDensity = 0; - pTcb->AMPDUFactor = 0; - pTcb->bTxDisableRateFallBack = FALSE; - pTcb->bTxUseDriverAssingedRate = FALSE; - pTcb->bTxCalculatedSwDur = FALSE; - pTcb->bTxEnableSwCalcDur = FALSE; - pTcb->specialDataType = PACKET_NORMAL; - pTcb->macId = 0; - pTcb->P_AID = 0; - pTcb->G_ID = 0; - pTcb->bBTTxPacket = FALSE; - pTcb->BT_macId = 0; - pTcb->EncInfo.bMFPPacket = FALSE; // CCX V65 Reset - pTcb->sysTime[0] = 0; - pTcb->sysTime[1] = 0; - pTcb->sysTime[2] = 0; - pTcb->sysTime[3] = 0; - - pTcb->TcpOffloadMode = 0; - pTcb->MACHeardLen = 0; - pTcb->IPType = 0; - - -#if TX_AGGREGATION - pTcb->outPending = FALSE; - pTcb->isUsbTxAgg = FALSE; -#endif - - pTcb->bNeedTxReport = FALSE; - pTcb->bTDLPacket = FALSE; - pTcb->bSendPTIRsp = FALSE; - pTcb->bSleepPkt = FALSE; - pTcb->bInsert8BytesForEarlyMode = FALSE; - pTcb->status.TOK=FALSE; - pTcb->CurrentWritePoint = 0; - pTcb->bHwProtection = FALSE; - -#if WLAN_ETW_SUPPORT - // - // - // - pTcb->TcbFrameUniqueueID = 0; -#endif - - if(GET_HAL_DATA(pDefaultAdapter)->AMPDUBurstMode) - { - pTcb->bEnableEarlyMode = FALSE; - pTcb->EMPktNum = 0; - PlatformZeroMemory(pTcb->EMPktLen,sizeof(pTcb->EMPktLen)); - } - - RESET_CCX_PACKET_TX_INFO(pTcb); - - TxFeedbackDeInstallTxFeedbackInfoForTcb(pDefaultAdapter, pTcb); - - RTInsertTailListWithCnt(&pDefaultAdapter->TcbIdleQueue, &pTcb->List, &pDefaultAdapter->NumIdleTcb); - RT_TRACE(COMP_SEND, DBG_LOUD, ("ReturnTCB(), pAdapter->NumIdleTcb = %d\n", pDefaultAdapter->NumIdleTcb)); -} -#endif - -PRT_TX_LOCAL_BUFFER -GetLocalFWBuffer( - PADAPTER Adapter - ) -{ - PRT_TX_LOCAL_BUFFER pBuffer; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - if(RTIsListEmpty(&pDefaultAdapter->LocalFWBufferQueue)) - return NULL; - - pBuffer=(PRT_TX_LOCAL_BUFFER)RTRemoveHeadListWithCnt(&pDefaultAdapter->LocalFWBufferQueue, &pDefaultAdapter->NumLocalFWBufferIdle); - - return pBuffer; -} - -PRT_TX_LOCAL_BUFFER -GetLocalBuffer( - PADAPTER pAdapter - ) -{ - PRT_TX_LOCAL_BUFFER pBuffer; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - if(RTIsListEmpty(&pDefaultAdapter->LocalBufferQueue)) - return NULL; - - pBuffer=(PRT_TX_LOCAL_BUFFER)RTRemoveHeadListWithCnt(&pDefaultAdapter->LocalBufferQueue, &pDefaultAdapter->NumLocalBufferIdle); - - return pBuffer; -} - -VOID -ReturnLocalBuffer( - PADAPTER pAdapter, - PRT_TX_LOCAL_BUFFER pLocalBuffer - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - //RTInsertTailList(&Adapter->LocalBufferQueue, &pLocalBuffer->List); - RTInsertTailListWithCnt(&pDefaultAdapter->LocalBufferQueue, &pLocalBuffer->List, &pDefaultAdapter->NumLocalBufferIdle); - -} - -VOID -ReturnLocalFWBuffer( - PADAPTER Adapter, - PRT_TX_LOCAL_BUFFER pLocalBuffer - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - RTInsertTailListWithCnt(&pDefaultAdapter->LocalFWBufferQueue, &pLocalBuffer->List, &pDefaultAdapter->NumLocalFWBufferIdle); -} - -// -// Description: -// Wait all the packets queued in the tx busy queues until these packets completed or timeout. -// Return Value: -// TRUE: All packets are completed. -// FALSE: Timeout, but not all packets are completed. -// Assumption: -// PASSIVE_LEVEL -// Note: -// (1) If this procedure should be separated by HAL Code based, move it to HAL. -// By Bruce, 2008-01-17. -// -BOOLEAN -WaitTxBusyQueueComplete( - PADAPTER Adapter - ) -{ - BOOLEAN bResult = TRUE; - u1Byte QueueID; - int WaitingCnt; - - for(QueueID = 0, WaitingCnt = 0; QueueID < MAX_TX_QUEUE; ) - { - if(RTIsListEmpty(&Adapter->TcbBusyQueue[QueueID])) - { - QueueID++; - continue; - } - else - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("WaitTxBusyQueueComplete(): %d times TcbBusyQueue[%d] !=0 !\n", (WaitingCnt+1), QueueID)); - PlatformSleepUs(10); - WaitingCnt ++; - } - - if(WaitingCnt >= MAX_DOZE_WAITING_TIMES) - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("\n\nWaitTxBusyQueueComplete(): %d times TcbBusyQueue[%d] != 0 !!!\n\n\n", MAX_DOZE_WAITING_TIMES, QueueID)); - bResult = FALSE; - break; - } - } - return bResult; -} - -// -// Description: -// Release all the packets from Tx/Rx Wait queues and return them to the upper layer. -// Assumption: -// RT_TX_SPIN_LOCK is not acquired. -// By Bruce, 2008-11-28. -// -VOID -ReleaseDataFrameQueued( - IN PADAPTER pAdapter - ) -{ - u1Byte QueueID; - PRT_TCB pTcb; - PRT_LIST_ENTRY pEntry; - u4Byte RtnCnt=0; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - // Return all packets in Tcb wait queues. - for(QueueID = 0; QueueID < MAX_TX_QUEUE; QueueID++) - { - pEntry = RTGetHeadList(Get_WAIT_QUEUE(pAdapter, QueueID)); - - while(!RTIsListHead((Get_WAIT_QUEUE(pAdapter,QueueID)), pEntry)) - { - pTcb = (PRT_TCB)pEntry; - pEntry = RTNextEntryList(pEntry); - - if(pAdapter == pTcb->SourceAdapt) - { - RTRemoveEntryListWithCnt((PRT_LIST_ENTRY)pTcb, GET_WAIT_QUEUE_CNT(pAdapter, QueueID)); - RtnCnt++; - ReturnTCB(pAdapter, pTcb, RT_STATUS_SUCCESS); - } - } - } - - RT_TRACE(COMP_SEND, DBG_LOUD, ("ReleaseDataFramemQueued(), free %d pTcb from TcbWaitQueue[].\n", RtnCnt)); - - if(!OS_SUPPORT_WDI(pAdapter)) - { - // Return all packets in platform wait queue. - PlatformReleaseDataFrameQueued(pAdapter); - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - -// -// Description: -// Copy the packet from the os to the local buffer. -// Arguments: -// [in] pAdapter - -// The adpater context. -// [in, out] pTcb - -// The TCB to colesce. -// Return: -// Return TRUE if coalescence is performed, or return FALSE. -// Note: -// RT_TX_SPINLOCK is already acquired. -// By Bruce, 2010-10-14. -// -BOOLEAN -TCB_CopySystemPacketToLocal( - IN PADAPTER pAdapter, - IN OUT PRT_TCB pTcb - ) -{ - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte i = 0; - SHARED_MEMORY tmpBufferList[MAX_PER_PACKET_BUFFER_LIST_LENGTH]; - u4Byte localBufOffset = 0; - - // If the buffer type is already local buffer, do nothing. - if(pTcb->BufferType != RT_TCB_BUFFER_TYPE_SYSTEM) - return FALSE; - - pBuf = GetLocalBuffer(pAdapter); - if(pBuf == NULL) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("[WARNING] No local buffer to copy this packet to local!\n")); - return FALSE; - } - - for(i = 0; i < pTcb->BufferCount; i ++) - { - // Point to the local buffer. - tmpBufferList[i].VirtualAddress = pBuf->Buffer.VirtualAddress + localBufOffset; - tmpBufferList[i].PhysicalAddressLow = pBuf->Buffer.PhysicalAddressLow + localBufOffset; - tmpBufferList[i].PhysicalAddressHigh = pBuf->Buffer.PhysicalAddressHigh; - if(tmpBufferList[i].PhysicalAddressLow < pBuf->Buffer.PhysicalAddressLow) - tmpBufferList[i].PhysicalAddressHigh ++; - - if(pTcb->BufferList[i].Length > 0) - { - PlatformMoveMemory(tmpBufferList[i].VirtualAddress, pTcb->BufferList[i].VirtualAddress, pTcb->BufferList[i].Length); - } - tmpBufferList[i].Length = pTcb->BufferList[i].Length; - - localBufOffset += pTcb->BufferList[i].Length; - } - - // Complete this packet to OS. - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - DrvIFCompletePacket(pAdapter, pTcb, RT_STATUS_SUCCESS); - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - // Resotre the content buffer - for(i = 0; i < pTcb->BufferCount; i ++) - { - pTcb->BufferList[i] = tmpBufferList[i]; - } - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - pTcb->Reserved = pBuf; - - return TRUE; -} - - - - - -#if 1 -//================================================== -// For general tx handle thread -//================================================== -VOID -tx_generalThreadCallback( - IN PVOID pContext - ) -{ - PADAPTER Adapter=((PRT_THREAD)pContext)->Adapter; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("[TX], tx_generalThreadCallback() can only run under PASSIVE_LEVEL!!\n")); - return; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], Tx general thread is started!!!\n")); - } - - while(1) - { - if(RT_DRIVER_HALT(Adapter)) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("[TX], Tx general thread is stopped because bDriverStopped(%d) or bSurpriseRemoved(%d)!!!\n", - Adapter->bDriverStopped, Adapter->bSurpriseRemoved)); - break; - } - - if( PlatformAcquireSemaphore(&Adapter->txGen.txGenSemaphore) != RT_STATUS_SUCCESS ) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("[TX], Acquire Tx general thread semaphore not successful !!!\n")); - break; - } - else - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("[TX], Tx general thread to execute normal routine !!!\n")); - DrvIFCheckTxCredit(Adapter); - } - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], Tx general thread is ended!!!\n")); -} - - -VOID -TX_InitThreads( - IN PADAPTER Adapter - ) -{ - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], TX_InitThreads()\n")); - - PlatformInitializeSemaphore(&Adapter->txGen.txGenSemaphore, 0); - - PlatformInitializeThread( - Adapter, - &Adapter->txGen.txGenThread, - (RT_THREAD_CALL_BACK)tx_generalThreadCallback, - "tx_generalThreadCallback", - FALSE, - 0, - NULL); - - PlatformRunThread( - Adapter, - &Adapter->txGen.txGenThread, - PASSIVE_LEVEL, - NULL); -} - -VOID -TX_DeInitThreads( - IN PADAPTER Adapter - ) -{ - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], TX_DeInitThreads()\n")); - - PlatformReleaseSemaphore(&Adapter->txGen.txGenSemaphore); - PlatformFreeSemaphore(&Adapter->txGen.txGenSemaphore); - - PlatformWaitThreadEnd(Adapter, &(Adapter->txGen.txGenThread)); - PlatformCancelThread(Adapter, &(Adapter->txGen.txGenThread)); - PlatformReleaseThread(Adapter, &(Adapter->txGen.txGenThread)); -} - -VOID -TX_InitializeVariables( - IN PADAPTER Adapter - ) -{ - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], TX_InitializeVariables()\n")); -} - -VOID -TX_InitializeSpinlock( - IN PADAPTER Adapter - ) -{ - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], TX_InitializeSpinlock()\n")); - -} - -VOID -TX_FreeSpinlock( - IN PADAPTER Adapter - ) -{ - RT_TRACE(COMP_INIT, DBG_LOUD, ("[TX], TX_FreeSpinlock()\n")); - -} - -#endif - - - diff --git a/network/wlan/WDI/COMMON/Transmit.h b/network/wlan/WDI/COMMON/Transmit.h deleted file mode 100644 index 3595bfcd..00000000 --- a/network/wlan/WDI/COMMON/Transmit.h +++ /dev/null @@ -1,267 +0,0 @@ -#ifndef __INC_TRANSMIT_H -#define __INC_TRANSMIT_H -/*---------------------------Define---------------------------------------------*/ - -// -// We using different FW fragment size for PCIe and Usb interface respectively. -// 2009.05.05. -// - #define RT_LOCAL_FW_BUF_SIZE 0x8000 // size 32k - - #if TX_AGGREGATION - #define MAX_TX_AGG_PKT 15 - #endif - -#define PACKET_NORMAL 0 -#define PACKET_DHCP 1 -#define PACKET_ARP 2 -#define PACKET_EAPOL 3 - - -#define MAX_FIRMWARE_CODE_SIZE 0x40000//0x5000 // Firmware Local buffer size. 92C should not use the buffer. - -#define UNSPECIFIED_QUEUE_ID 0xff -#define UNSPECIFIED_DATA_RATE 0xffff - -#define RT_TCB_FLAG_USE_COALESCE_BUFFER BIT0 // Set if coalesce is turned ON -#define RT_TCB_FLAG_USE_PACKET_SHIFT BIT1 -#define RT_TCB_FLAG_PS_REPLY_PS_POLL BIT2 // This packet is sent from replying the PS-Poll sent by the PS mode client. -#define RT_TCB_FLAG_PS_MCAST_DTIM BIT3 // DTIM reaches, send the multicast packet. -#define RT_TCB_FLAG_PS_PRE_TRANSMIT BIT4 // Means that we set it in PS queue before PreTransmitTCB(), we should send it in PreTransmitTCB(). -#define RT_TCB_FLAG_RAW_DATA BIT5 // Sent by raw data. Do not change the content. - -#define NIC_SEND_HANG_THRESHOLD_NORMAL 4 -#define NIC_SEND_HANG_THRESHOLD_POWERSAVE 8 -#define MAX_DOZE_WAITING_TIMES 100 // The time of micro-second * 10 to wait before config RF OFF/Sleep. - -#define TCB_RESOURCE_THRESHOLD 10 - -// To prevent too many data packets exhaust all TCB resource which blocks the Beacon or Mgnt packets sent, -// reserve some TCBs for important (MGNT) frames. -// By Bruce, 2013-04-10. -#define RT_RESERVED_TCB_NUM_FOR_MGNT 2 - - -// -// Note: -// Reserve 1 tx desc to avoid tx stuck under the test "sendrecvstress_cmn" in Vista DTM WLK1.3. -// We still have no ideal why the HW DMA apears stuck frequently if the num of descs is exhaused with -// all of the own bits set; however, once 1 desc is reserved, the HW never gets stuck anymore. -// W-MAC also has the same trick to keep one buffer desc from the discussion with SD1 Jone. -// This issue only happens on the PCI interface cards. -// By Bruce, 2009-05-06. -// -#define VacancyTxDescNum(_Adapter, _Queue) \ - ((_Adapter)->NumTxDesc[_Queue] - (_Adapter)->nBufInTxDesc[_Queue] - 1) - -#define IsThereBufferInTxDesc(_Adapter, _Queue) \ - ((_Adapter)->nBufInTxDesc[_Queue] > 0) - -#define IncrementTxDescToFill(_Adapter, _Queue, _N) \ - (_Adapter)->NextTxDescToFill[_Queue]=((_Adapter)->NextTxDescToFill[_Queue]+_N)%(_Adapter)->NumTxDesc[_Queue]; \ - (_Adapter)->nBufInTxDesc[_Queue]+=_N; - -#define IncrementTxDescToCheck(_Adapter, _Queue, _N) \ - (_Adapter)->NextTxDescToCheck[_Queue]=((_Adapter)->NextTxDescToCheck[_Queue]+_N)%(_Adapter)->NumTxDesc[_Queue]; \ - (_Adapter)->nBufInTxDesc[_Queue] -=_N; - -// TODO: Modify this !! -#define FRAGMENT_THRESHOLD(_Adapter) ((u2Byte)((_Adapter)->MgntInfo.FragThreshold-4)) - -#define IS_DRVAGGR_TCB(pTcb) (pTcb->bDrvAggrFirstPacket || pTcb->bDrvAggrSubframe) - -pu1Byte -GET_FRAME_OF_FIRST_FRAG( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -pu1Byte -DOT11_HEADER_FROM_TCB( - PADAPTER Adapter, - PRT_TCB pTcb -); - -VOID -GetTcbDestaddr( - PADAPTER Adapter, - PRT_TCB pTcb, - pu1Byte * ppDestaddr -); - -VOID -InitializeTxVariables( - PADAPTER Adapter - ); - -RT_STATUS -PrepareTCBs( - PADAPTER Adapter - ); - -VOID -FreeTCBs( - PADAPTER Adapter, - BOOLEAN bReset - ); - -VOID -RemoveZeroLengthBuffer( - PRT_TCB pTcb - ); - -u1Byte -TcbGetTOSField( - PRT_TCB pTcb, - u1Byte SkipBuffers - ); - -BOOLEAN -RetrieveSegmentDataFromTCB( - PRT_TCB pTcb, - u1Byte SkipBuffers, - u4Byte DataOffset, - PVOID pDataBuffer, - u4Byte DataBufLength - ); - -VOID -TranslateHeader( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -FillPartialHeader( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -PreTransmitTCB( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -TxCheckCoalesce( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -TxDoCoalesce( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -BOOLEAN -CheckFragment( - PADAPTER Adapter, - PRT_TCB pTcb, - int nHdrOffset - ); - -VOID -FragmentTCB( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -RT_STATUS -TransmitTCB( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -ResetTxStatistics( - PADAPTER Adapter - ); - -VOID -CountTxStatistics( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -RESET_TYPE -TxCheckStuck( - IN PADAPTER Adapter - ); - -VOID -ReturnTCB( - PADAPTER Adapter, - PRT_TCB pTcb, - RT_STATUS status - ); - -PRT_TX_LOCAL_BUFFER -GetLocalFWBuffer( - PADAPTER Adapter - ); - -PRT_TX_LOCAL_BUFFER -GetLocalBuffer( - PADAPTER Adapter - ); - -VOID -ReturnLocalFWBuffer( - PADAPTER Adapter, - PRT_TX_LOCAL_BUFFER pLocalBuffer - ); - -VOID -ReturnLocalBuffer( - PADAPTER Adapter, - PRT_TX_LOCAL_BUFFER pLocalBuffer - ); - -BOOLEAN -WaitTxBusyQueueComplete( - PADAPTER Adapter - ); - -VOID -ReleaseDataFrameQueued( - IN PADAPTER pAdapter - ); - -BOOLEAN -UpdateEarlyModeInfo( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN PRT_LIST_ENTRY plistHead - ); - - -BOOLEAN -TCB_CopySystemPacketToLocal( - IN PADAPTER pAdapter, - IN OUT PRT_TCB pTcb - ); - -VOID -TX_InitThreads( - IN PADAPTER Adapter - ); -VOID -TX_DeInitThreads( - IN PADAPTER Adapter - ); -VOID -TX_InitializeVariables( - IN PADAPTER Adapter - ); -VOID -TX_InitializeSpinlock( - IN PADAPTER Adapter - ); -VOID -TX_FreeSpinlock( - IN PADAPTER Adapter - ); - -#endif // #ifndef __INC_TRANSMIT_H diff --git a/network/wlan/WDI/COMMON/TransmitDesc.c b/network/wlan/WDI/COMMON/TransmitDesc.c deleted file mode 100644 index 7c460c5d..00000000 --- a/network/wlan/WDI/COMMON/TransmitDesc.c +++ /dev/null @@ -1,1277 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "TransmitDesc.tmh" -#endif - -/** -* Function: MgntQuery_ProtectionFrame -* -* Overview: Decide whether protection mode is required to be enabled -* If protection is required to be enabled, decide how to send protection frame -* -* Input: -* PADAPTER Adapter, -* PRT_TCB pTcb -* -* Output: -* PRT_TCB pTcb -* -* (Following content of TCB will be changed) -* pTcb->bRTSEnable -* pTcb->bCTSEnable -* pTcb->RTSRate -* pTcb->RTSSC -* pTcb->RTSCCA -* pTcb->RTSBW -* pTcb->bRTSSTBC -* pTcb->bRTSShort -* pTcb->bNeedAckReply -* pTcb->bNeedCRCAppend -* -* Return: None -*/ -BOOLEAN -_IOT_ProtectionFrame( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - BOOLEAN Ret = FALSE; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(pMgntInfo->IOTAction & HT_IOT_ACT_FORCED_RTS) - { - pTcb->bRTSEnable = TRUE; - pTcb->bCTSEnable = FALSE; - pTcb->RTSRate = MGN_11M; - Ret = TRUE; - } - else if(pMgntInfo->IOTAction & HT_IOT_ACT_FORCED_CTS2SELF) - { - pTcb->bRTSEnable = FALSE; - pTcb->bCTSEnable = TRUE; - Ret = TRUE; - } - - return Ret; -} - -void _RTS_CTS_settingframe( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(_IOT_ProtectionFrame(Adapter, pTcb)) - return; - - if(Adapter->RegWirelessMode <= WIRELESS_MODE_G) - { - pTcb->bRTSEnable = pMgntInfo->bForcedProtectRTSFrame; - pTcb->bCTSEnable = pMgntInfo->bForcedProtectCTSFrame; - } - else - { - pTcb->bRTSEnable = TRUE; - pTcb->bCTSEnable = FALSE; - } -} - - -BOOLEAN -_HT_ProtectionFrame( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = pMgntInfo->pHTInfo; - u1Byte HTOpMode = pHTInfo->CurrentOpMode; - BOOLEAN bIsPeerDynamicMimoPs = FALSE; - - if(pHTInfo->bCurrentHTSupport == FALSE) - return FALSE; - - //3 Check HTInfo Operation Mode - if((HTOpMode == HT_OPMODE_MIXED) && - (CHNL_RUN_ABOVE_40MHZ(pMgntInfo) || - !CHNL_RUN_ABOVE_40MHZ(pMgntInfo))) - { - pTcb->RTSRate = MGN_24M; // Rate is 24Mbps. - pTcb->bRTSEnable = TRUE; - return TRUE; - } - - - //3 Check Dynamic MIMO Power save condition - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - - if(pEntry != NULL) - { - if(pEntry->HTInfo.MimoPs == MIMO_PS_DYNAMIC) - bIsPeerDynamicMimoPs = TRUE; - } - } - else - { - if(pHTInfo->PeerMimoPs == MIMO_PS_DYNAMIC) - bIsPeerDynamicMimoPs = TRUE; - } - - if(bIsPeerDynamicMimoPs) - { - pTcb->RTSRate = MGN_24M; // Rate is 24Mbps. - pTcb->bRTSEnable = TRUE; - return TRUE; - } - - //3 Check A-MPDU aggregation for TXOP - if(pTcb->bAMPDUEnable) - { - pTcb->RTSRate = MGN_24M; // Rate is 24Mbps. - // According to 8190 design, firmware sends CF-End only if RTS/CTS is enabled. However, it degrads - // throughput around 10M, so we disable of this mechanism. 2007.08.03 by Emily - if(DISABLE_RTS_ON_AMPDU(Adapter)) - pTcb->bRTSEnable = FALSE; - else - { - pTcb->bRTSEnable = TRUE; - - if(IsFirstGoAdapter(Adapter) && - (AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress) != NULL)) - { - pTcb->bRTSEnable = FALSE; - pTcb->bCTSEnable = TRUE; - pTcb->bHwProtection = TRUE; - if(!Adapter->RASupport) - pTcb->RTSRate = MGN_24M; // Rate is 24Mbps. - } - } - - return (pTcb->bRTSEnable||pTcb->bCTSEnable); - } - else - { - if(IsFirstGoAdapter(Adapter) && - (AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress) != NULL)) - { - pTcb->bRTSEnable = FALSE; - pTcb->bCTSEnable = TRUE; - if(!Adapter->RASupport) - pTcb->RTSRate = MGN_24M; // Rate is 24Mbps. - - return (pTcb->bRTSEnable||pTcb->bCTSEnable); - } - } - - return FALSE; -} - - -VOID -MgntQuery_ProtectionFrame( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - pu1Byte pFrame = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte RtsRate = 0; - - // Common Settings - pTcb->bRTSSTBC = FALSE; - pTcb->bRTSShort = FALSE; // Since protection frames are always sent by legacy rate, ShortGI will never be used. - pTcb->bCTSEnable = FALSE; // Most of protection using RTS/CTS - pTcb->RTSSC = 0; // 20MHz: Don't care; 40MHz: Duplicate. - pTcb->RTSCCA = 0; - pTcb->RTSBW = 0; // RTS frame bandwidth is always 20MHz - - - //When Bt only, we do not need to send RTS/CTS for better TP. - //But when connect to N mode AP with cuncurrent, we need send RTS/CTS - if(pTcb->bBTTxPacket && pMgntInfo->mAssoc) - { - pTcb->bRTSSTBC = FALSE; - pTcb->bRTSShort = FALSE; // Since protection frames are always sent by legacy rate, ShortGI will never be used. - pTcb->bCTSEnable = FALSE; // Most of protection using RTS/CTS - pTcb->RTSSC = 0; // 20MHz: Don't care; 40MHz: Duplicate. - pTcb->RTSCCA = 0; - pTcb->RTSBW = 0; // RTS frame bandwidth is always 20MHz - //pTcb->bRTSEnable =TRUE; - //pTcb->RTSRate =MGN_11M; - return; - } - else if(IsFrameTypeCtrl(pFrame)) - { // Check Control type frame: Control frame do not need protection!! - pTcb->bNeedAckReply = FALSE; - pTcb->bNeedCRCAppend = FALSE; - goto NO_PROTECTION; - } - else if(pTcb->bBroadcast || pTcb->bMulticast) - { // Check multicast/broadcast: Protection doesn't apply to broadcast and multicast frame!! - pTcb->bNeedAckReply = FALSE; - pTcb->bNeedCRCAppend = TRUE; - goto NO_PROTECTION; - } - else - { // Unicast packet case - pTcb->bNeedAckReply = TRUE; - pTcb->bNeedCRCAppend = TRUE; - - if(MacAddr_isBcst((pFrame+16))) - goto NO_PROTECTION; - - // hpfan_add for debug dynamic 20MHz with marvell - else if(pTcb->specialDataType != PACKET_NORMAL) - { - goto NO_PROTECTION; - } - - //3 Forced Protection mode - if(pMgntInfo->ForcedProtectionMode == PROTECTION_MODE_FORCE_ENABLE) - { - _RTS_CTS_settingframe(Adapter, pTcb); - pTcb->RTSBW = pMgntInfo->ForcedProtectBW; - pTcb->RTSSC = pMgntInfo->ForcedProtectSC; - pTcb->RTSCCA = pMgntInfo->ForcedProtectCCA; - pTcb->RTSRate = pMgntInfo->ForcedProtectRate; - return; - } - else if(pMgntInfo->ForcedProtectionMode == PROTECTION_MODE_FORCE_DISABLE) - { - goto NO_PROTECTION; - } - - //3 RTS Threshold, but think about AMSDU in N mode - if ( (pTcb->FragLength[0] > MgntActQuery_802_11_RTS_THRESHOLD(Adapter)) && (pTcb->bAggregate == FALSE)) - { - if(IS_WIRELESS_MODE_N(Adapter)) - { - pTcb->RTSRate = MGN_24M; // Rate is 24Mbps. - } - else - { - pTcb->RTSRate = ComputeAckRate( pMgntInfo->mBrates, pMgntInfo->HighestBasicRate ); - } - - pTcb->bRTSEnable = TRUE; - } - //3 ERP Use_Protection - else if(pMgntInfo->bUseProtection && IS_CCK_RATE(pTcb->DataRate) == FALSE) - { - pTcb->RTSRate = MGN_11M; // Rate is 11Mbps. - _RTS_CTS_settingframe(Adapter, pTcb); - } - //3 11n High throughput case. - else - { - while(TRUE) - { - // Temporarily disable IOT protection setting - if(_IOT_ProtectionFrame(Adapter, pTcb)) - break; - - if(_HT_ProtectionFrame(Adapter, pTcb)) - break; - - // Totally no protection case!! - goto NO_PROTECTION; - } - } - } - - if(IS_88E_SERIES(Adapter)) - { - // - // We should take RTL8723B into consideration, 2012.10.08 - // - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_INIT_RTS_RATE, (pu1Byte)(&RtsRate)); - pTcb->RTSRate = Adapter->HalFunc.GetHwRateFromMRateHandler(RtsRate); - } - - - // Determine RTS frame preamble mode. - if(pTcb->RTSRate == MGN_1M) - pTcb->bRTSShort = FALSE; - else - pTcb->bRTSShort = MgntIsShortPreambleMode( Adapter, pTcb ); - - return; - -NO_PROTECTION: - pTcb->bRTSEnable = FALSE; - pTcb->bCTSEnable = FALSE; - pTcb->RTSRate = 0; - pTcb->RTSSC = 0; - pTcb->RTSCCA = 0; - pTcb->RTSBW = 0; -} - -/** -* Function: MgntQuery_PreambleMode -* -* OverView: This Function will refer to Data Rate, so call this function after the rate is decided. -* This function will refer to protection mode, so call this function after MgntQuery_ProtectionFrame(). -* The preamble mode will be returned and set in TCB. -* -* Input: -* PADAPTER Adapter, -* PRT_TCB pTcb -* -* Output: -* PRT_TCB pTcb -* -* (Following content of TCB will be changed) -* pTcb->bUseShortPreamble -* -* Return: None -*/ -VOID -MgntQuery_PreambleMode( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - // 1M can only use Long Preamble. Ref. 802.11b 18.2.2.2. 2005.01.18, by rcnjko. - if(pTcb->DataRate == MGN_1M) - pTcb->bUseShortPreamble = FALSE; - else - pTcb->bUseShortPreamble = MgntIsShortPreambleMode( Adapter, pTcb ); -} - - -/** -* Function: MgntQuery_TxTime -* -* OverView: Calculate Tx duration and RTS duration. -* This function needs to refer to protection mode, so calling this function after -* protection mode is determined. -* This function needs to refer to preamble mode, so calling this function after -* protection mode is determined. -* Input: -* PADAPTER Adapter, -* PRT_TCB pTcb, -* u1Byte FragIndex -* -* Output: -* PRT_TCB pTcb -* -* pTcb->TxDescDuration[FragIndex] -* pTcb->DurationFieldVal[FragIndex] -* -* Return: None -*/ -VOID -MgntQuery_TxTime( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - u2Byte ThisFrameTime; - u1Byte AckRate = 0, CtsRate = 0; - u2Byte AckTime= 0, RtsTime = 0, CtsTime = 0; - u1Byte FragIndex = 0; - - if(pTcb->bTxCalculatedSwDur == FALSE) - return; - - if(pTcb->bNeedAckReply) - { - // Figure out ACK rate according to BSS basic rate and Tx rate, 2006.03.08 by rcnjko. - AckRate = ComputeAckRate( Adapter->MgntInfo.mBrates, (u1Byte)(pTcb->DataRate) ); - // Figure out ACK time according to the AckRate and assume long preamble is used on receiver, 2006.03.08, by rcnjko. - AckTime = ComputeTxTime( sAckCtsLng/8, AckRate, FALSE, FALSE); - } - - - for(FragIndex = 0; FragIndex < pTcb->FragCount; FragIndex++) - { - //2 Initialize - pTcb->TxDescDuration[FragIndex] = 0; - pTcb->DurationFieldVal[FragIndex] = 0; - - //2 Frame transmission time (Frame Body) - ThisFrameTime = ComputeTxTime( - pTcb->FragLength[FragIndex]+((pTcb->bNeedCRCAppend)?sCrcLng:0), - pTcb->DataRate, - FALSE, - pTcb->bUseShortPreamble); - - pTcb->TxDescDuration[FragIndex] += ThisFrameTime; - - // Add this fragment TxTime to the duration field of previous fragment - if(FragIndex > 0) - pTcb->DurationFieldVal[FragIndex-1] += (ThisFrameTime + 2*aSifsTime + AckTime); - - - //2 Ack transmission time (SIFS + ACK) - if(pTcb->bNeedAckReply) - { - pTcb->TxDescDuration[FragIndex] += (aSifsTime + AckTime); - pTcb->DurationFieldVal[FragIndex] += (aSifsTime + AckTime); - } - - //2Protection frame time (RTS + SIFS + CTS + SIFS) - if(pTcb->bRTSEnable) - { - if(pTcb->bCTSEnable) - { - CtsTime = ComputeTxTime( sAckCtsLng/8, pTcb->RTSRate, FALSE, FALSE); - - pTcb->TxDescDuration[FragIndex] += (CtsTime + aSifsTime); - } - else - { - RtsTime = ComputeTxTime( sAckCtsLng/8, pTcb->RTSRate, FALSE, FALSE); - CtsRate = ComputeAckRate( Adapter->MgntInfo.mBrates, (u1Byte)(pTcb->RTSRate) ); - CtsTime = ComputeTxTime( sAckCtsLng/8, CtsRate, FALSE, FALSE); - - pTcb->TxDescDuration[FragIndex] += (RtsTime + 2*aSifsTime); - } - } - } -} - - - -/** -* Function: MgntQuery_AggregationCapability -* -* Overview: Query whether the packet is allowed to be AMPDU aggregated. -* Query the Aggregation Capability. Including MPDUFactor and AMPDUDensity. -* -* Input: -* PADAPTER Adapter -* pu1Byte dstaddr -* PRT_TCB pTcb -* -* Output: -* PRT_TCB pTcb -* Return: -* None -*/ -VOID -MgntQuery_AggregationCapability( - PADAPTER Adapter, - pu1Byte dstaddr, - PRT_TCB pTcb - ) -{ - - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pu1Byte pFrame = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - PTX_TS_RECORD pTxTs; - PRT_WLAN_STA pEntry = NULL; -#if (P2P_SUPPORT == 1) - PP2P_INFO pP2PInfo = GET_P2P_INFO(Adapter); -#endif - - pTcb->bAMPDUEnable = FALSE; - - if(!pHTInfo->bCurrentHTSupport) - { - if(!TDLS_CheckPeer(Adapter, dstaddr)) - return; - } - - if(GET_SIMPLE_CONFIG_ENABLED(pMgntInfo)) - return; - - if(pTcb->bBTTxPacket || pTcb->bBroadcast || pTcb->bMulticast) - return; - - // - // The packet should not be aggregated in legacy power saving mode. By Bruce, 2009-10-12. - // - //if(pMgntInfo->dot11PowerSaveMode != eActive) - //return; - - if(!IsQoSDataFrame(pFrame) || IsSecProtEapol(pTcb->EncInfo.SecProtInfo) ) - return; - - // Joseph 20090617: Fix TP low due to DHCP frame transmission. - // Some weird Ralink AP lease IP address only 60s. This produces a lot of DHCP frames. - // We just stop A-MPDU aggregation within first 4s after connection. - // At the rest of time, we do not aggregate DHCP and ARP packets and do not affect other packets. - if( (pTcb->specialDataType == PACKET_DHCP||pTcb->specialDataType == PACKET_ARP||pTcb->specialDataType == PACKET_EAPOL)||//pTcb->specialDataType != PACKET_NORMAL || //change by ylb 20141222, Fix ICMP cannot aggregate AMPDU - ((GetDefaultAdapter(Adapter)==Adapter) && - (GetDefaultAdapter(Adapter)->MgntInfo.CntAfterLink<2)) ) - return; - - if(pMgntInfo->IOTAction & HT_IOT_ACT_TX_NO_AGGREGATION) - return; - - // For RTL819X, if pairwisekey = wep/tkip, we don't aggrregation. - if(!Adapter->HalFunc.GetNmodeSupportBySecCfgHandler(Adapter)) - return; - - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_NOTSETENCMACHEADER, 0)) - return; - - // Note : pHTInfo->bCurrentAMPDUEnable should be enabled only when AMPDU is enabled - // in registry and current operation mode is HT. - if(pHTInfo->bCurrentAMPDUEnable == FALSE) - return; - - pTcb->AMPDUBufferSize = 0; - - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry==NULL) - { - RT_PRINT_ADDR(COMP_SEND, DBG_LOUD, "Unknown entry address\n", pTcb->DestinationAddress); - RT_TRACE(COMP_SEND, DBG_LOUD, ("A-MPDU setting failed 3\n")); - return; - } - else if(pEntry->WirelessMode < WIRELESS_MODE_N_24G) - return; - else if(pEntry->IOTAction & HT_IOT_ACT_AMSDU_ENABLE) - return; - else if(pTcb->PacketLength >= 4096) - { - if(pEntry->IOTAction & HT_IOT_ACT_AMSDU_AMPDU) - ; - else - return; - } - } - else if(pTcb->PacketLength >= 4096) - { - if(pMgntInfo->IOTAction & HT_IOT_ACT_AMSDU_AMPDU) - ; - else - return; - } - - - // - // This part shall be integrate to other function. - // - RT_TRACE(COMP_QOS, DBG_TRACE, ("GetTs=%d\r\n", pMgntInfo->SecurityInfo.SecLvl)); - - if(GetTs(Adapter, (PTS_COMMON_INFO*)(&pTxTs), dstaddr, pTcb->priority, TX_DIR, TRUE)) - { - if(pTxTs->TxAdmittedBARecord.bValid == FALSE) - { - // - // Caution: Now we just establish ADDBA protocol and use A-MPDU for - // every transmission. - // - // For Vwifi to support AMPDU, while keep the default port behavior, by Bohn , 2009.10.01 - //For Vwifi to support Tx AMPDU, 2009.11.20, by Bohn - BOOLEAN bSecIsTxKeyInstalled; - if (ACTING_AS_AP(Adapter)) - {// AP mode - if(!MacAddr_isMulticast(pTcb->DestinationAddress)) - { - //For AP mode, now is able to accept AddBaReq and other Action Frame. 2009.08.20, by Bohn - PRT_WLAN_STA pEntry; - pEntry = AsocEntry_GetEntry(pMgntInfo,pTcb->DestinationAddress); - if(pEntry == NULL) - bSecIsTxKeyInstalled = FALSE; - else if(pEntry->keyindex != 0) - bSecIsTxKeyInstalled = TRUE; - else - bSecIsTxKeyInstalled = FALSE; - } - else - { - bSecIsTxKeyInstalled = FALSE; - } - } - else - {// STA mode or Ad hoc mode - bSecIsTxKeyInstalled = SecIsTxKeyInstalled(Adapter, pMgntInfo->Bssid); - } - - if(pMgntInfo->SecurityInfo.SecLvl > RT_SEC_LVL_NONE && !bSecIsTxKeyInstalled) - { - RT_TRACE(COMP_QOS, DBG_TRACE, ("pMgntInfo->SecurityInfo.SecLv=%d\r\n", pMgntInfo->SecurityInfo.SecLvl)); - } - else if(pHTInfo->ForcedAMPDUMode != HT_AMPDU_DISABLE) - { - RT_TRACE(COMP_QOS, DBG_LOUD, ("pTxTs->TxAdmittedBARecord.bValid == FALSE)\r\n")); - TsStartAddBaProcess(Adapter, pTxTs); - } - - goto FORCED_AGG_SETTING; - } - else if(pTxTs->bUsingBa == FALSE) - { - if(SN_LESS(GET_BA_START_SQECTRL_FIELD_SEQ_NUM(&(pTxTs->TxAdmittedBARecord.BaStartSeqCtrl)), (pTxTs->TxCurSeq+1)%4096)) - pTxTs->bUsingBa = TRUE; - else - goto FORCED_AGG_SETTING; - } - - - //2 //(1)Decide whether aggregation is required according to protocol handshake - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, dstaddr); - if(pEntry && pEntry->HTInfo.bEnableHT) - { - pTcb->bAMPDUEnable = TRUE; - pTcb->AMPDUFactor = pEntry->HTInfo.AMPDU_Factor; - pTcb->AMPDUDensity = pEntry->HTInfo.MPDU_Density; - pTcb->AMPDUBufferSize = pTxTs->TxAdmittedBARecord.BufferSize; - } - else - { - pTcb->bAMPDUEnable = FALSE; - } - } - else - { - if( (pTcb->bAggregate) && - ((pMgntInfo->IOTAction & HT_IOT_ACT_AMSDU_AMPDU) == 0)) - goto FORCED_AGG_SETTING; - - pTcb->bAMPDUEnable = TRUE; - pTcb->AMPDUFactor = pHTInfo->CurrentAMPDUFactor; - pTcb->AMPDUDensity = pHTInfo->CurrentMPDUDensity; - pTcb->AMPDUBufferSize = pTxTs->TxAdmittedBARecord.BufferSize; - - if(TDLS_IsTxTDLSPacket(Adapter, pTcb)) - { - TDLS_GetHtAMPDU(Adapter, dstaddr, pTcb); - } - } - - } - else if(pMgntInfo->IOTAction & HT_IOT_ACT_AMSDU_ENABLE) - { - // If driver does not use AMPDU by default but use A-MSDU instead, and packet - // size is small. We do this because we hope TCP ack packet can be aggregated - if(pTcb->bAggregate == FALSE && pTcb->PacketLength <= 200 && - pMgntInfo->IOTPeer!= HT_IOT_PEER_REALTEK_92SE && - pMgntInfo->IOTPeer!=HT_IOT_PEER_REALTEK ) - { - pTcb->bAMPDUEnable = TRUE; - pTcb->AMPDUFactor = pHTInfo->CurrentAMPDUFactor; - pTcb->AMPDUDensity = pHTInfo->CurrentMPDUDensity; - } - } - else if(TDLS_IsTxTDLSPacket(Adapter, pTcb)) - { - TDLS_CheckAggregation(Adapter, dstaddr, pTcb); - } - -FORCED_AGG_SETTING: - //2// - //2 //(2) The OID control may overwrite protocol handshake - //2// - switch(pHTInfo->ForcedAMPDUMode ) - { - case HT_AMPDU_AUTO: - // Do Nothing - if((pMgntInfo->IOTPeerSubtype == HT_IOT_PEER_LINKSYS_E4200_V1) && IS_WIRELESS_MODE_N_5G(Adapter)) - { - // Temply used to fix long run chariot may drop half ,as AMPDU not enable(Add BA not success).zhiyuan 2012/05/09 - pTcb->bAMPDUEnable = TRUE; - pTcb->AMPDUDensity = pHTInfo->ForcedMPDUDensity; - pTcb->AMPDUFactor = pHTInfo->ForcedAMPDUFactor; - } - break; - - case HT_AMPDU_ENABLE: - pTcb->bAMPDUEnable = TRUE; - pTcb->AMPDUDensity = pHTInfo->ForcedMPDUDensity; - pTcb->AMPDUFactor = pHTInfo->ForcedAMPDUFactor; - break; - - case HT_AMPDU_DISABLE: - pTcb->bAMPDUEnable = FALSE; - pTcb->AMPDUDensity = 0; - pTcb->AMPDUFactor = 0; - break; - - default: - break; - - } -} - - -BOOLEAN -MgntQuery_RA_ShortGI( - IN PADAPTER Adapter, - IN u1Byte macId, - IN PRT_WLAN_STA pEntry, - IN WIRELESS_MODE WirelessMode, - IN CHANNEL_WIDTH ChnlBW -) -{ - BOOLEAN bShortGI; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - BOOLEAN bShortGI20MHz = FALSE,bShortGI40MHz = FALSE, bShortGI80MHz = FALSE; - - if(IS_N_WIRELESS_MODE(WirelessMode)) - { - if(macId == MAC_ID_STATIC_FOR_BROADCAST_MULTICAST) - bShortGI20MHz = bShortGI40MHz = FALSE; - else if(pEntry != NULL) - { - bShortGI20MHz = pEntry->HTInfo.bShortGI20M; - bShortGI40MHz = pEntry->HTInfo.bShortGI40M; - } - else - { - bShortGI20MHz = pHTInfo->bCurShortGI20MHz; - bShortGI40MHz = pHTInfo->bCurShortGI40MHz; - } - } - - if(IS_AC_WIRELESS_MODE(WirelessMode)) - { - if(macId == MAC_ID_STATIC_FOR_BROADCAST_MULTICAST) - bShortGI80MHz = FALSE; - else if(pEntry != NULL) - bShortGI80MHz = pEntry->VHTInfo.bShortGI80M; - else - bShortGI80MHz = pVHTInfo->bCurShortGI80MHz; - } - - switch(ChnlBW){ - case CHANNEL_WIDTH_40: - bShortGI = bShortGI40MHz; - break; - case CHANNEL_WIDTH_80: - bShortGI = bShortGI80MHz; - break; - default:case CHANNEL_WIDTH_20: - bShortGI = bShortGI20MHz; - break; - } - - return bShortGI; -} - - -VOID -MgntQuery_ShortGI( - PADAPTER Adapter, - PRT_TCB pTcb) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - - if(pHTInfo->bCurrentHTSupport == FALSE) - pTcb->bUseShortGI = FALSE; - else if(pHTInfo->ForcedShortGI==SHORTGI_FORCE_ENABLE) - pTcb->bUseShortGI = TRUE; - else if(pHTInfo->ForcedShortGI==SHORTGI_FORCE_DISABLE) - pTcb->bUseShortGI = FALSE; - else if(MgntIsDataOnlyFrame(Adapter, pTcb) == FALSE) - pTcb->bUseShortGI = FALSE; - else - { - u1Byte bUseSGI; - - if(Adapter->RASupport) - { - bUseSGI = pTcb->macId; - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_RA_SGI, (pu1Byte)&bUseSGI); - if(bUseSGI) - pTcb->bUseShortGI = TRUE; - else - pTcb->bUseShortGI = FALSE; - } - else - { - OCTET_STRING osMpdu; - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - pu1Byte pRaddr = Frame_pRaddr(osMpdu); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pRaddr); - if(pEntry == NULL) - pTcb->bUseShortGI = FALSE; - else if(pTcb->bTxUseDriverAssingedRate && pTcb->bSpecifShortGI == TRUE) - ; - else - pTcb->bUseShortGI = MgntQuery_RA_ShortGI(Adapter, pTcb->macId, pEntry, pEntry->WirelessMode, pEntry->BandWidth); - } - else - pTcb->bUseShortGI = MgntQuery_RA_ShortGI(Adapter, pTcb->macId, NULL, pMgntInfo->dot11CurrentWirelessMode, pMgntInfo->dot11CurrentChannelBandWidth); - } - } -} /* MgntQuery_ShortGI */ - - -VOID -MgntQuery_Tx_LDPC( - PADAPTER Adapter, - PRT_TCB pTcb) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - OCTET_STRING osMpdu; - - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - if(pTcb->bMulticast || pTcb->bBroadcast || pTcb->DataRate < MGN_MCS0) - pTcb->bLDPC = FALSE; - else if(IsFrameTypeCtrl(osMpdu.Octet) || IsFrameTypeMgnt(osMpdu.Octet)) - pTcb->bLDPC = FALSE; - else - - if(pVHTInfo->VhtLdpcCap & LDPC_VHT_TEST_TX_ENABLE) - pTcb->bLDPC = TRUE; - else if(pHTInfo->bCurrentHTSupport == FALSE) - pTcb->bLDPC = FALSE; - else if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - pu1Byte pRaddr = Frame_pRaddr(osMpdu); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pRaddr); - - if(pEntry == NULL) - pTcb->bLDPC = FALSE; - else if(IS_AC_WIRELESS_MODE(pEntry->WirelessMode)) - { - if(TEST_FLAG(pEntry->VHTInfo.LDPC, LDPC_VHT_ENABLE_TX)) - pTcb->bLDPC = TRUE; - else - pTcb->bLDPC = FALSE; - } - else if(IS_N_WIRELESS_MODE(pEntry->WirelessMode)) - { - if(TEST_FLAG(pEntry->HTInfo.LDPC, LDPC_HT_ENABLE_TX)) - pTcb->bLDPC = TRUE; - else - pTcb->bLDPC = FALSE; - } - else - pTcb->bLDPC = FALSE; - } - else - { - if(IS_WIRELESS_MODE_AC(Adapter)) - { - if(TEST_FLAG(pVHTInfo->VhtCurLdpc, LDPC_VHT_ENABLE_TX) ) - pTcb->bLDPC =TRUE; - else - pTcb->bLDPC = FALSE; - } - else - { - if(TEST_FLAG(pHTInfo->HtCurLdpc, LDPC_HT_ENABLE_TX) ) - pTcb->bLDPC =TRUE; - else - pTcb->bLDPC = FALSE; - } - } -} /* MgntQuery_LDPC */ - - -VOID -MgntSet_TX_LDPC( - PADAPTER Adapter, - u1Byte MacId, - BOOLEAN bLDPC - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - MAC_ID_OWNER_TYPE MacIdOwnerType = MacIdGetOwnerType(Adapter, MacId); - - if(MacIdOwnerType == MAC_ID_OWNER_INFRA_AP || MacIdOwnerType == MAC_ID_OWNER_AD_HOC || MacIdOwnerType == MAC_ID_OWNER_TDLS) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntryByMacId(pMgntInfo, MacId); - - if(pEntry == NULL) - return; - - if(pEntry->WirelessMode == WIRELESS_MODE_AC_5G || pEntry->WirelessMode == WIRELESS_MODE_AC_24G) - { - if(bLDPC && TEST_FLAG(pEntry->VHTInfo.LDPC, LDPC_VHT_CAP_TX)) - SET_FLAG(pEntry->VHTInfo.LDPC, LDPC_VHT_ENABLE_TX); - else - CLEAR_FLAG(pEntry->VHTInfo.LDPC, LDPC_VHT_ENABLE_TX); - } - else if(pEntry->WirelessMode == WIRELESS_MODE_N_5G || pEntry->WirelessMode == WIRELESS_MODE_N_24G) - { - if(bLDPC && TEST_FLAG(pEntry->HTInfo.LDPC, LDPC_HT_CAP_TX)) - SET_FLAG(pEntry->HTInfo.LDPC, LDPC_HT_ENABLE_TX); - else - CLEAR_FLAG(pEntry->HTInfo.LDPC, LDPC_HT_ENABLE_TX); - - } - } - else if(MacIdOwnerType == MAC_ID_OWNER_DEFAULT_PORT || MacIdOwnerType == MAC_ID_OWNER_INFRA_STA) - { - if(IS_WIRELESS_MODE_AC(Adapter)) - { - if(bLDPC && TEST_FLAG(pVHTInfo->VhtCurLdpc, LDPC_VHT_CAP_TX)) - SET_FLAG(pVHTInfo->VhtCurLdpc, LDPC_VHT_ENABLE_TX); - else - CLEAR_FLAG(pVHTInfo->VhtCurLdpc, LDPC_VHT_ENABLE_TX); - } - else - { - if(bLDPC && TEST_FLAG(pHTInfo->HtCurLdpc, LDPC_HT_CAP_TX)) - SET_FLAG(pHTInfo->HtCurLdpc, LDPC_HT_ENABLE_TX); - else - CLEAR_FLAG(pHTInfo->HtCurLdpc, LDPC_HT_ENABLE_TX); - } - } - - RT_DISP(FIOCTL, IOCTL_STATE, ("MacId %d bLDPC %d\n", MacId, bLDPC)); -} - - - -VOID -MgntQuery_Tx_STBC( - IN PADAPTER Adapter, - IN OUT PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - OCTET_STRING osMpdu; - u1Byte Beamform_cap = 0; - - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - if(pTcb->bMulticast || pTcb->bBroadcast || pTcb->DataRate < MGN_MCS0) - pTcb->bSTBC = FALSE; - else if(IsFrameTypeCtrl(osMpdu.Octet) || IsFrameTypeMgnt(osMpdu.Octet)) - pTcb->bSTBC = FALSE; - else - - if(TEST_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_TEST_TX_ENABLE)) // Test Mode - pTcb->bSTBC = TRUE; - else if(pHTInfo->bCurrentHTSupport == FALSE) - pTcb->bSTBC = FALSE; - else if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - pu1Byte pRaddr = Frame_pRaddr(osMpdu); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pRaddr); - - if(pEntry == NULL) - pTcb->bSTBC = FALSE; - else - { - if(IS_AC_WIRELESS_MODE(pEntry->WirelessMode)) - { - if(pEntry->VHTInfo.STBC) - { - pTcb->bSTBC = TRUE; - } - else - pTcb->bSTBC = FALSE; - } - else if(IS_N_WIRELESS_MODE(pEntry->WirelessMode)) - { - if(pEntry->HTInfo.STBC) - { - pTcb->bSTBC = TRUE; - } - else - pTcb->bSTBC = FALSE; - } - else - pTcb->bSTBC = FALSE; - } - } - else - { - if(IS_WIRELESS_MODE_AC(Adapter)) - { - if(TEST_FLAG(pVHTInfo->VhtCurStbc, STBC_VHT_ENABLE_TX) ) - { - pTcb->bSTBC = TRUE; - } - else - pTcb->bSTBC = FALSE; - } - else - { - if(TEST_FLAG(pHTInfo->HtCurStbc, STBC_HT_ENABLE_TX) ) - { - pTcb->bSTBC =TRUE; - } - else - pTcb->bSTBC = FALSE; - } - } -} - - -VOID -MgntQuery_BandwidthMode( - PADAPTER Adapter, - PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - OCTET_STRING osMpdu; - - FillOctetString(osMpdu, GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb), (u2Byte)pTcb->BufferList[0].Length); - - if(pHTInfo->bCurrentHTSupport == FALSE) - return; - else if(IsFrameTypeCtrl(osMpdu.Octet) || IsFrameTypeMgnt(osMpdu.Octet)) - return; - else if(pTcb->bMulticast || pTcb->bBroadcast || pTcb->DataRate < MGN_MCS0) - return; - else if(pMgntInfo->IOTAction & HT_IOT_ACT_DISABLE_TX_40_MHZ) - return; - - if(pVHTInfo->bFixedRTSBW) - { - pTcb->BWOfPacket = pVHTInfo->DynamicRTSBW; - return; - } - - if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - { - pu1Byte pRaddr = Frame_pRaddr(osMpdu); - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo, pRaddr); - - if(pEntry == NULL) - pTcb->BWOfPacket = CHANNEL_WIDTH_20; - else - { - if((GetDefaultAdapter(Adapter)->MgntInfo.bForceGoTxData20MBw == TRUE) && IsFirstGoAdapter(Adapter)) - pTcb->BWOfPacket = CHANNEL_WIDTH_20; - else - pTcb->BWOfPacket = pEntry->BandWidth; - } - - } - else - pTcb->BWOfPacket = pMgntInfo->dot11CurrentChannelBandWidth; - - if(pTcb->DataRate >= MGN_MCS0 && pTcb->DataRate <= MGN_MCS31) - { - if(pTcb->BWOfPacket > CHANNEL_WIDTH_40) - pTcb->BWOfPacket = CHANNEL_WIDTH_40; - } - -} - - -VOID -MgntSet_RA_Ratr_Index( - IN PMGNT_INFO pMgntInfo, - IN MAC_ID_OWNER_TYPE MacIdOwnerType, - IN u1Byte ratr_index, - IN PRT_WLAN_STA pEntry - ) -{ - switch(MacIdOwnerType){ - - case MAC_ID_OWNER_BT: - pMgntInfo->BT_RatrInx = ratr_index; - break; - case MAC_ID_OWNER_INFRA_STA: - case MAC_ID_OWNER_DEFAULT_PORT: - pMgntInfo->ratr_index = ratr_index; - break; - case MAC_ID_OWNER_BROADCAST_MULTICAST: - pMgntInfo->Multi_RatrInx = ratr_index; - break; - case MAC_ID_OWNER_AD_HOC: - case MAC_ID_OWNER_INFRA_AP: - case MAC_ID_OWNER_TDLS: - if(pEntry != NULL) - pEntry->ratr_index = ratr_index; - break; - } -} - - - -VOID -MgntQuery_TxRateSelectMode( - PADAPTER Adapter, - PRT_TCB pTcb -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_WLAN_STA pEntry; - pu1Byte pFrame = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - - if(!IsDataFrame(pFrame)) - { - pTcb->bTxDisableRateFallBack = TRUE; - pTcb->bTxUseDriverAssingedRate = TRUE; - } - else if(pMgntInfo->ForcedDataRate!= 0) - { - if(pMgntInfo->ForcedTxDisableRateFallBack == 2) - pTcb->bTxDisableRateFallBack = FALSE; - else - pTcb->bTxDisableRateFallBack = TRUE; - - pTcb->bTxUseDriverAssingedRate = TRUE; - } - else if( (pMgntInfo->ForcedBstDataRate != 0) && (pTcb->bBroadcast || pTcb->bMulticast)) - { - pTcb->bTxDisableRateFallBack = TRUE; - pTcb->bTxUseDriverAssingedRate = TRUE; - } - - // Obtain MacID for This Tx Packet ----------------- - pTcb->macId = (u1Byte) MacIdGetTxMacId(Adapter, pTcb); - - if(pTcb->macId == MAC_ID_STATIC_UNSPECIFIED_MACID) - return; - // --------------------------------------------- - - if(!pTcb->bBTTxPacket) - { - // STA mode - if(pMgntInfo->mAssoc && !ACTING_AS_AP(Adapter)) - { - //Sinda 20150827, should assign a value to OdmAid to avoud ODM access NULL. - // 0 mean station entry of default port. - pTcb->OdmAid = 0; - } - else if(pMgntInfo->mIbss || ACTING_AS_AP(Adapter)) - { - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - - if(pEntry != NULL) - { - // This is used for ODM Luke's requirement, they want to use AID corresponding SUM ID num for - // collect RX PHY status info, we should take multi-port consideration, - // revised by Roger, 2013.10.15. - pTcb->OdmAid = pEntry->MultiPortStationIdx; - } - else - { - //Sinda 20150827, should assign a value to OdmAid to avoud ODM access NULL. - // 0 mean station entry of default port. - pTcb->OdmAid = 0; - } - - if(pTcb->bTxUseDriverAssingedRate == FALSE) - { - if(pTcb->bBroadcast || pTcb->bMulticast) - { - pTcb->DataRate = pMgntInfo->LowestBasicRate; - - pTcb->bTxUseDriverAssingedRate = TRUE; - } - else if(pEntry != NULL) - { - if((pEntry->AssociatedMacId >= MacIdHalGetMaxHWMacId(Adapter)) && (pEntry->DataRate != 0)) - { - pTcb->DataRate = pEntry->DataRate; - pTcb->bSpecifShortGI = TRUE; - pTcb->bUseShortGI = pEntry->bUseShortGI; - pTcb->bTxUseDriverAssingedRate = TRUE; - } - } - } - } - else - { - pTcb->OdmAid = 0; - } - } - else - { - //Sinda 20150827, should assign a value to OdmAid to avoud ODM access NULL. - // 0 mean station entry of default port. - pTcb->OdmAid = 0; - } - - //3 Assign RATR Index - if(pTcb->bTxDisableRateFallBack == FALSE) - { - u1Byte ratr_index = pMgntInfo->Multi_RatrInx; - - if(pTcb->bBTTxPacket) - ratr_index = pMgntInfo->BT_RatrInx; - else if(ACTING_AS_AP(Adapter) || ACTING_AS_IBSS(Adapter)) - {//AP - pEntry = AsocEntry_GetEntry(pMgntInfo, pTcb->DestinationAddress); - if(pEntry != NULL) - ratr_index = pEntry->ratr_index; - } - else - {//STA - ratr_index = pMgntInfo->ratr_index; - - if(TDLS_IsTxTDLSPacket(Adapter, pTcb)) - { - TDLS_GetTxRatrIndex(Adapter, pTcb->DestinationAddress, &ratr_index); - } - } - - pTcb->RATRIndex = ratr_index; - - } -} - - -/** -* Function: FillFrameField -* -* Overview: Filling the per frame information into each frame header. -* Now we only insert duration field and seqeunce number in this function. -* -* Input: -* PRT_TCB pTcb, -* u2Byte SeqNum -* -* Output: -* PRT_TCB pTcb -* (Frame in the Buffer of pTcb will be modified) -* -* Return: -* None -*/ -VOID -FillFrameField( - PADAPTER Adapter, - PRT_TCB pTcb, - u2Byte SeqNum - ) -{ - u1Byte FragIndex, BufferIndex; - pu1Byte pFrame = GET_FRAME_OF_FIRST_FRAG(Adapter, pTcb); - u1Byte HwDescOffset =0; - - if(TEST_FLAG(pTcb->tcbFlags, RT_TCB_FLAG_RAW_DATA)) - return; - - HwDescOffset = Adapter->TXPacketShiftBytes; // Default HW Tx packet offset. - - for(FragIndex=0, BufferIndex=0; FragIndex < pTcb->FragCount; FragIndex++) - { - if(pTcb->bTxCalculatedSwDur) - { - SET_80211_HDR_DURATION(pTcb->BufferList[BufferIndex].VirtualAddress+HwDescOffset, pTcb->DurationFieldVal[FragIndex]); - } - - // Seq numbers are not assigned to control frames. - if(IsCtrlFrame(pFrame) == FALSE) - { - SET_80211_HDR_SEQUENCE(pTcb->BufferList[BufferIndex].VirtualAddress+HwDescOffset, SeqNum); - } - - BufferIndex += pTcb->FragBufCount[FragIndex]; - } -} diff --git a/network/wlan/WDI/COMMON/TransmitDesc.h b/network/wlan/WDI/COMMON/TransmitDesc.h deleted file mode 100644 index 7310b5ed..00000000 --- a/network/wlan/WDI/COMMON/TransmitDesc.h +++ /dev/null @@ -1,99 +0,0 @@ -#ifndef __INC_TRANSMITDESC_H -#define __INC_TRANSMITDESC_H - -VOID -MgntQuery_ProtectionFrame( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -MgntQuery_PreambleMode( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -MgntQuery_TxTime( - PADAPTER Adapter, - PRT_TCB pTcb - ); - -VOID -MgntQuery_AggregationCapability( - PADAPTER Adapter, - pu1Byte dstaddr, - PRT_TCB pTcb - ); - - -BOOLEAN -MgntQuery_RA_ShortGI( - IN PADAPTER Adapter, - IN u1Byte macId, - IN PRT_WLAN_STA pEntry, - IN WIRELESS_MODE WirelessMode, - IN CHANNEL_WIDTH ChnlBW -); - - -VOID -MgntQuery_ShortGI( - PADAPTER Adapter, - PRT_TCB pTcb - ); - - -VOID -MgntQuery_Tx_LDPC( - PADAPTER Adapter, - PRT_TCB pTcb - ); - - -VOID -MgntSet_TX_LDPC( - PADAPTER Adapter, - u1Byte MacId, - BOOLEAN bLDPC - ); - - -VOID -MgntQuery_Tx_STBC( - IN PADAPTER Adapter, - IN OUT PRT_TCB pTcb - ); - - -VOID -MgntQuery_BandwidthMode( - PADAPTER Adapter, - PRT_TCB pTcb - ); - - -VOID -MgntSet_RA_Ratr_Index( - IN PMGNT_INFO pMgntInfo, - IN MAC_ID_OWNER_TYPE MacIdOwnerType, - IN u1Byte ratr_index, - IN PRT_WLAN_STA pEntry - ); - - -VOID -MgntQuery_TxRateSelectMode( - PADAPTER Adapter, - PRT_TCB pTcb - ); - - -VOID -FillFrameField( - PADAPTER Adapter, - PRT_TCB pTcb, - u2Byte SeqNum - ); - -#endif diff --git a/network/wlan/WDI/COMMON/UsbModeSwitch.h b/network/wlan/WDI/COMMON/UsbModeSwitch.h deleted file mode 100644 index a7645c39..00000000 --- a/network/wlan/WDI/COMMON/UsbModeSwitch.h +++ /dev/null @@ -1,181 +0,0 @@ -#ifndef __INC_USBMODESWITCH_H -#define __INC_USBMODESWITCH_H - -typedef enum _USB_MODE -{ - USB_MODE_AUTO, - USB_MODE_U2, - USB_MODE_U3, -}USB_MODE, *PUSB_MODE; - - -typedef struct _USB_MODE_MECH -{ - BOOLEAN bUsbModeMechOn; - u1Byte CurUsbMode; // USB mode read from HW when initialization. This represent real USB mode now. (0:unknown, 1:usb2, 2: usb3) - u1Byte RegUsbMode; // USB mode read from Registry when inialization. This represent USB mode set last time. (0:unknown, 1:usb2, 2: usb3) - u1Byte SetUsbMode; // USB mode set. This represent USB mode going to be set be the mechanism. (0:unknown, 1:usb2, 2: usb3) - u1Byte HubUsbMode; // USB mode set. This represent USB mode going to be set be the mechanism. (0:unknown, 1:usb2, 2: usb3) - u1Byte RegForcedUsbMode; //Forced USB mode. (0:not define, 1:usb2, 2: usb3) - u1Byte RegUsbCurMode; //Current USB mode. (0:not define, 1:usb2, 2: usb3) - u1Byte RegUsbSwFast; // COntrol USB switch ability. - u1Byte RegUsbWps; // Check if WPS will not return USB switch true; - u1Byte RegUsbSp; // Thss round is enabled ue to usb switch and only scan one channel. - u1Byte RegUsbChnl; // After USB switch, we only need to scan the channel at first. - u1Byte RegUsbSwitchSpeed; // USB switch speed level - u1Byte RegUsbSwitchThL; // RSSI Low Threshold to Switch USB - u1Byte RegUsbSwitchThH; // RSSI High Threshold to Switch USB - u1Byte RegUsbSwitchThRssi; // RSSI thresh for first link - u1Byte RegUsbSwBy; // USB switch by service or driver itself. - u1Byte RegUsbRfSet; // USB switch by RF setting - u1Byte UsbSwitchRefreshCnt; // USB switch fast mode thresh value. - u1Byte UsbSwitchByCnt; // USB switch fast mode thresh value. - u8Byte Usb2BitMap; // FOr controlling USB2.0 TX SS power index utility - u1Byte Usb2PwrIdx; - BOOLEAN bHardToRaise; - BOOLEAN bWpsRunning; - BOOLEAN bFirstScanOver; //To distinguish NEC WPS dummy profile - RT_WORK_ITEM UsbModeSwitchWorkitem; - RT_TIMER UsbModeSwitchTimer; - u1Byte SwByUIChnl; - BOOLEAN bPauseEDCCAForConnection; -} USB_MODE_MECH, *PUSB_MODE_MECH; - -#define UsbModeSwitch_SetUsbModeMechOn(_Adapter, _UsbModeOn) \ - (_Adapter)->UsbModeMechanism.bUsbModeMechOn = (_UsbModeOn) -#define UsbModeSwitch_SetRegUsbMode(_Adapter, _RegUsbMode) \ - (_Adapter)->UsbModeMechanism.RegUsbMode = (_RegUsbMode) -#define UsbModeSwitch_SetCurUsbMode(_Adapter, _CurUsbMode) \ - (_Adapter)->UsbModeMechanism.CurUsbMode = (_CurUsbMode) -#define UsbModeSwitch_SetForcedUsbMode(_Adapter, _ForcedUsbMode) \ - (_Adapter)->UsbModeMechanism.RegForcedUsbMode = (_ForcedUsbMode) -#define UsbModeSwitch_SetCurrentUsbMode(_Adapter, _CurrentUsbMode) \ - (_Adapter)->UsbModeMechanism.RegUsbCurMode = (_CurrentUsbMode) -#define UsbModeSwitch_SetCurrentHubUsbMode(_Adapter, _CurrentHubUsbMode) \ - (_Adapter)->UsbModeMechanism.HubUsbMode = (_CurrentHubUsbMode) -#define UsbModeSwitch_SetUsbRaiseStatus(_Adapter, _bUsbRaiseStatus) \ - (_Adapter)->UsbModeMechanism.bHardToRaise = (_bUsbRaiseStatus) -#define UsbModeSwitch_SetUsbWpsStatus(_Adapter, _bWpsStatus) \ - (_Adapter)->UsbModeMechanism.bWpsRunning = (_bWpsStatus) -#define UsbModeSwitch_SetFirstScanOver(_Adapter, _bFirstScanOver) \ - (_Adapter)->UsbModeMechanism.bFirstScanOver = (_bFirstScanOver) -#define UsbModeSwitch_SetUsbSwitchFast(_Adapter, _UsbSwitchFast) \ - (_Adapter)->UsbModeMechanism.RegUsbSwFast = (_UsbSwitchFast) -#define UsbModeSwitch_SetUsbSwitchWps(_Adapter, _UsbSwitchWps) \ - (_Adapter)->UsbModeMechanism.RegUsbWps = (_UsbSwitchWps) -#define UsbModeSwitch_SetUsbSwitchPostive(_Adapter, _UsbSwitchPositive) \ - (_Adapter)->UsbModeMechanism.RegUsbSp = (_UsbSwitchPositive) -#define UsbModeSwitch_SetUsbSwitchChannel(_Adapter, _UsbSwitchChnl) \ - (_Adapter)->UsbModeMechanism.RegUsbChnl = (_UsbSwitchChnl) -#define UsbModeSwitch_SetUsbSwitchSpeed(_Adapter, _UsbSwitchSpeed) \ - (_Adapter)->UsbModeMechanism.RegUsbSwitchSpeed = (_UsbSwitchSpeed) -#define UsbModeSwitch_SetUsbSwitchThL(_Adapter, _UsbSwitchThL) \ - (_Adapter)->UsbModeMechanism.RegUsbSwitchThL = (_UsbSwitchThL) -#define UsbModeSwitch_SetUsbSwitchThH(_Adapter, _UsbSwitchThH) \ - (_Adapter)->UsbModeMechanism.RegUsbSwitchThH = (_UsbSwitchThH) -#define UsbModeSwitch_SetUsbSwitchThRssi(_Adapter, _UsbSwitchThRssi) \ - (_Adapter)->UsbModeMechanism.RegUsbSwitchThRssi = (_UsbSwitchThRssi) -#define UsbModeSwitch_SetUsbSwitchBy(_Adapter, _UsbSwitchBy) \ - (_Adapter)->UsbModeMechanism.RegUsbSwBy = (_UsbSwitchBy) -#define UsbModeSwitch_SetUsbSwitchRfSet(_Adapter, _UsbSwitchRfSet) \ - (_Adapter)->UsbModeMechanism.RegUsbRfSet = (_UsbSwitchRfSet) - - -VOID -UsbModeSwitchInit( - PADAPTER Adapter - ); - -VOID -UsbModeSwitchDeinit( - PADAPTER Adapter - ); - -BOOLEAN -UsbModeSwitchCheck( - PADAPTER Adapter, - pu1Byte BSSID - ); - -u4Byte -UsbModeCurrentStateQuery( - PADAPTER Adapter - ); - -BOOLEAN -UsbModeSwitchStartTransition( - PADAPTER Adapter - ); - -BOOLEAN -UsbModeSwitchConfirm( - PADAPTER Adapter - ); - -VOID -UsbModeForcedTransition( - PADAPTER Adapter - ); - -VOID -UsbModeSetHubUsbType( - PADAPTER Adapter, - pu1Byte UsbHostType - ); - -u1Byte -UsbModeQueryHubUsbType( - PADAPTER Adapter - ); - -u1Byte -UsbModeQueryDeviceUsbType( - PADAPTER Adapter - ); - -u1Byte -UsbModeQuerySwitchPositive( - PADAPTER Adapter - ); - -u1Byte -UsbModeQuerySwitchChannel( - PADAPTER Adapter - ); - -VOID -UsbModeSwitchCheckExt( - PADAPTER Adapter - ); - -u1Byte -UsbModeQueryRfTransmitPath( - PADAPTER Adapter, - u1Byte RfType - ); - -VOID -UsbModeSelectAMPDUPreTx( - PADAPTER Adapter - ); - -VOID -UsbModeSelectRaMask( - PADAPTER Adapter, - pu8Byte BitMap, - CHANNEL_WIDTH BandWidth - ); - -VOID -UsbModeSelect3ssPwrInU2( - PADAPTER Adapter, - CHANNEL_WIDTH BandWidth, - u1Byte Channel - ); - -u1Byte -UsbModeQueryRfSet( - PADAPTER Adapter - ); - -#endif diff --git a/network/wlan/WDI/COMMON/VHTGen.c b/network/wlan/WDI/COMMON/VHTGen.c deleted file mode 100644 index d9c0b4b2..00000000 --- a/network/wlan/WDI/COMMON/VHTGen.c +++ /dev/null @@ -1,1302 +0,0 @@ - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "VHTGen.tmh" -#endif - -#if (VHT_SUPPORT == 1) - -// 20/40/80, ShortGI, MCS Rate -const u2Byte VHT_MCS_DATA_RATE[3][2][30] = - { { {13, 26, 39, 52, 78, 104, 117, 130, 156, 156, - 26, 52, 78, 104, 156, 208, 234, 260, 312, 312, - 39, 78, 117, 156, 234, 312, 351, 390, 468, 520}, // Long GI, 20MHz - {14, 29, 43, 58, 87, 116, 130, 144, 173, 173, - 29, 58, 87, 116, 173, 231, 260, 289, 347, 347, - 43, 87, 130, 173, 260, 347,390, 433, 520, 578} }, // Short GI, 20MHz - { {27, 54, 81, 108, 162, 216, 243, 270, 324, 360, - 54, 108, 162, 216, 324, 432, 486, 540, 648, 720, - 81, 162, 243, 324, 486, 648, 729, 810, 972, 1080}, // Long GI, 40MHz - {30, 60, 90, 120, 180, 240, 270, 300,360, 400, - 60, 120, 180, 240, 360, 480, 540, 600, 720, 800, - 90, 180, 270, 360, 540, 720, 810, 900, 1080, 1200}}, // Short GI, 40MHz - { {59, 117, 176, 234, 351, 468, 527, 585, 702, 780, - 117, 234, 351, 468, 702, 936, 1053, 1170, 1404, 1560, - 176, 351, 527, 702, 1053, 1404, 1580, 1755, 2106, 2340}, // Long GI, 80MHz - {65, 130, 195, 260, 390, 520, 585, 650, 780, 867, - 130, 260, 390, 520, 780, 1040, 1170, 1300, 1560,1734, - 195, 390, 585, 780, 1170, 1560, 1755, 1950, 2340, 2600} } // Short GI, 80MHz - }; - -VOID -VHTDebugVHTCapability( - u4Byte DebugLevel, - PADAPTER Adapter, - POCTET_STRING pocCap, - pu1Byte TitleString - -) -{ - pu1Byte pCapELE = (pu1Byte)&pocCap->Octet[0]; - pu1Byte pMCS; - - pMCS= GET_VHT_CAPABILITY_ELE_RX_MCS(pCapELE); - - RT_TRACE(COMP_HT, DebugLevel, (". Called by %s\n", TitleString )); - - RT_TRACE(COMP_HT, DebugLevel, ("\tSupported Channel Width = %d\n", (GET_VHT_CAPABILITY_ELE_CHL_WIDTH(pCapELE) ))); - RT_TRACE(COMP_HT, DebugLevel, ("\tSupport Short GI for 80M = %s\n", (GET_VHT_CAPABILITY_ELE_SHORT_GI80M(pCapELE))?"YES": "NO")); - RT_TRACE(COMP_HT, DebugLevel, ("\tSupport TX STBC = %s\n", (GET_VHT_CAPABILITY_ELE_TX_STBC(pCapELE))?"YES": "NO")); - RT_TRACE(COMP_HT, DebugLevel, ("\tMax MPDU Size = %s\n", (GET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pCapELE))?"3839": "7935")); - RT_TRACE(COMP_HT, DebugLevel, ("\tMPDU Density = %d\n", GET_HT_CAPABILITY_ELE_MPDU_DENSITY(pCapELE))); - RT_TRACE(COMP_HT, DebugLevel, ("\tRx MCS Rate Set = [%x][%x][%x][%x]\n", pMCS[0], pMCS[1], pMCS[2], pMCS[3])); - RT_TRACE(COMP_HT, DebugLevel, ("\tRx LDPC = %d\n", GET_VHT_CAPABILITY_ELE_RX_LDPC(pCapELE))); - RT_TRACE(COMP_HT, DebugLevel, ("\n")); - -} - - -u2Byte -VHTMcsToDataRate( - PADAPTER Adapter, - u2Byte VHTMcsRate - ) -{ - BOOLEAN isShortGI = FALSE; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = pMgntInfo->pHTInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = pMgntInfo->pVHTInfo; - - VHTMcsRate -=MGN_VHT1SS_MCS0; - - switch(pMgntInfo->dot11CurrentChannelBandWidth){ - case CHANNEL_WIDTH_20: - isShortGI = pHTInfo->bCurShortGI20MHz?1:0; - break; - case CHANNEL_WIDTH_40: - isShortGI = pHTInfo->bCurShortGI40MHz?1:0; - break; - case CHANNEL_WIDTH_80: - isShortGI = pVHTInfo->bCurShortGI80MHz?1:0; - break; - } - - return VHT_MCS_DATA_RATE[pMgntInfo->dot11CurrentChannelBandWidth][isShortGI][VHTMcsRate]; -} - - -BOOLEAN -VHTFilterMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pSupportMCS, - OUT pu1Byte pOperateMCS -) -{ - u1Byte i = 0, j = 0; - u1Byte RegRate, dot11Rate, OpRate; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - for(i = 0; i < 2; i++) - { - pOperateMCS[i] = 0; - - for(j = 0; j < 8; j+=2) - { - RegRate = (pMgntInfo->Regdot11VHTOperationalRateSet[i] >> j) & 3; - dot11Rate = (pSupportMCS[i] >> j) & 3; - if(RegRate == 3 || dot11Rate == 3) //0x3 indicates not supported that num of SS - OpRate = 3; - else if(RegRate > dot11Rate) - OpRate = dot11Rate; - else - OpRate = RegRate; - - pOperateMCS[i] |= (OpRate << j); - } - } - - return TRUE; -} - - -u1Byte -RateToSpatialStream( - pu1Byte pVHTRate -) -{ - u1Byte i,j , tmpRate; - u1Byte NumSS = 0; - - for(i = 0; i < 2; i++) - { - for(j = 0; j < 8; j+=2) - { - tmpRate = (pVHTRate[i] >> j) & 3; - - switch(tmpRate){ - case 2: - case 1: - case 0: - NumSS++; - break; - - default: - break; - } - } - - } - RT_TRACE(COMP_HT, DBG_LOUD, ("RateToSpatialStream(): Number of Spatial Stream supported = %d\n", NumSS)); - - return NumSS; -} - - -VOID -SpatialStreamToRate( - PADAPTER Adapter, - u1Byte NumSS, - pu1Byte pVHTRate -) -{ - u1Byte i = 0, j = 0; - u1Byte RegRate, dot11Rate, OpRate; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - for(i = 0; i < 2; i++) - { - pVHTRate[i] = 0; - - for(j = 0; j < 8; j+=2) - { - RegRate = (pMgntInfo->Regdot11VHTOperationalRateSet[i] >> j) & 3; - dot11Rate = (pVHTRate[i] >> j) & 3; - if(RegRate == 3) //0x3 indicates not supported that num of SS - OpRate = 3; - else if(NumSS <= j) - OpRate = 3; - else if(RegRate > dot11Rate) - OpRate = dot11Rate; - else - OpRate = RegRate; - - pVHTRate[i] |= (OpRate << j); - } - } -} - - -u1Byte -VHTIOTActIsAMsduEnable( - PADAPTER Adapter -) -{ - HT_IOT_ACTION_E retValue = (HT_IOT_ACTION_E)0; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - if(pMgntInfo->pHTInfo->ForcedAMSDUMode == HT_AMSDU_ENABLE) - retValue = HT_IOT_ACT_AMSDU_ENABLE; - else if(pMgntInfo->pHTInfo->ForcedAMSDUMode == HT_AMSDU_WITHIN_AMPDU) - retValue = HT_IOT_ACT_AMSDU_AMPDU; - - return retValue; -} - - - -VOID -VHTConstructOpModeNotification( - IN PADAPTER Adapter, - IN pu1Byte Addr, - OUT pu1Byte Buffer, - OUT pu4Byte pLength - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - u1Byte opmode = 0; - OCTET_STRING osNotifFrame, tmp; - - FillOctetString(osNotifFrame, Buffer, 0); - *pLength = 0; - - ConstructMaFrameHdr( - Adapter, - Addr, - ACT_CAT_VHT, - ACT_VHT_OPMODE_NOTIFICATION, - &osNotifFrame); - - // Operating Mode - SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(&opmode, pVHTInfo->BWToSwitch); - - SET_VHT_OPERATING_MODE_FIELD_RX_NSS(&opmode, (pVHTInfo->RxSSToSwitch-1)); - SET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(&opmode, pVHTInfo->RxSSTypeBfmeeToSwitch); - - FillOctetString(tmp, &opmode, 1); - PacketAppendData(&osNotifFrame, tmp); - - *pLength = osNotifFrame.Length; -} - - -/* - The setting used in this functoin shall be our HT Rx capability that we want to inform the peer STA. - Both AP and STA Attach the Capailbity Element - AP/STA should include this element only if HTEnable is turned on. -*/ -VOID -VHTConstructCapabilityElement( - PADAPTER Adapter, - POCTET_STRING posVHTCap, - BOOLEAN bAssoc -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - pu1Byte pCapELE = NULL, pCapVHTMCS; - u2Byte HighestRate; - - u1Byte VHtSTBC = 0; - - PlatformZeroMemory(posVHTCap->Octet, posVHTCap->Length); - - pCapELE = (pu1Byte)posVHTCap->Octet; - posVHTCap->Length = 12; - - // B0 B1 Maximum MPDU Length - // in Current AC AP, we can only declare 4K MPDU support, the performance will be better. - // Need to add IOT pattern later. - //SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(pCapELE, 2); - - - // B2 B3 Supported Channel Width Set - SET_VHT_CAPABILITY_ELE_CHL_WIDTH(pCapELE, 0); //indicate we don't support neither 160M nor 80+80M bandwidth. by page - - // B4 Rx LDPC - if(TEST_FLAG(pVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_RX)) - { - SET_VHT_CAPABILITY_ELE_RX_LDPC(pCapELE, 1); - } - - // B5 ShortGI for 80MHz - SET_VHT_CAPABILITY_ELE_SHORT_GI80M(pCapELE, pVHTInfo->bRegShortGI80MHz ? 1 : 0); // We can receive Short GI of 80M - // B6 ShortGI for 160MHz - SET_VHT_CAPABILITY_ELE_SHORT_GI160M(pCapELE, 0); // We can not receive 160M Short GI - - // B7 Tx STBC - if(TEST_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_TX)) - { - SET_VHT_CAPABILITY_ELE_TX_STBC(pCapELE, 1); //now HW support both tx/rx STBC. by page 20111108 - } - - // B8 B9 B10 Rx STBC - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_RX_STBC, (pu1Byte)&VHtSTBC); - if(TEST_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_RX)) - { - SET_VHT_CAPABILITY_ELE_RX_STBC(pCapELE, VHtSTBC); - } - - // B11 SU Beamformer Capable - if(TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMER_ENABLE)) - { - SET_VHT_CAPABILITY_ELE_SU_BFER(pCapELE, TRUE); - SET_VHT_CAPABILITY_ELE_SOUNDING_DIMENSIONS(pCapELE, HAL_QueryBeamformerCap(Adapter)); - } - - // B12 SU Beamformee Capable - if(TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMEE_ENABLE)) - { - SET_VHT_CAPABILITY_ELE_SU_BFEE(pCapELE, TRUE); - SET_VHT_CAPABILITY_ELE_BFER_ANT_SUPP(pCapELE, HAL_QueryBeamformeeCap(Adapter)); - } - - - // B19 MU Beamformer Capable - if (TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_AP_ENABLE)){ - SET_VHT_CAPABILITY_ELE_MU_BFER(pCapELE, TRUE); - SET_VHT_CAPABILITY_ELE_SOUNDING_DIMENSIONS(pCapELE, HAL_QueryBeamformerCap(Adapter)); - } - // B20 MU Beamformee Capable - if (TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_STA_ENABLE)){ - SET_VHT_CAPABILITY_ELE_MU_BFEE(pCapELE, TRUE); - SET_VHT_CAPABILITY_ELE_BFER_ANT_SUPP(pCapELE, HAL_QueryBeamformeeCap(Adapter)); - } - // B21 VHT TXOP PS - SET_VHT_CAPABILITY_ELE_TXOP_PS(pCapELE, 0); - // B22 +HTC-VHT Capable - SET_VHT_CAPABILITY_ELE_HTC_VHT(pCapELE, 1); - // B23 24 25 Maximum A-MPDU Length Exponent - if (pMgntInfo->RegAMfactor < 0x7) - { - SET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pCapELE, pMgntInfo->RegAMfactor); // 8812A can receive AMPDU that has no length limit. by page, 20111111 - } - else - { - SET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pCapELE, 7); // 8812A can receive AMPDU that has no length limit. by page, 20111111 - } - - // B26 27 VHT Link Adaptation Capable - SET_VHT_CAPABILITY_ELE_LINK_ADAPTION(pCapELE, 0); - - pCapVHTMCS = GET_VHT_CAPABILITY_ELE_RX_MCS(pCapELE); - PlatformMoveMemory(pCapVHTMCS, pMgntInfo->Regdot11VHTOperationalRateSet, 2); - - pCapVHTMCS = GET_VHT_CAPABILITY_ELE_TX_MCS(pCapELE); - PlatformMoveMemory(pCapVHTMCS, pMgntInfo->Regdot11VHTOperationalRateSet, 2); - - HighestRate = VHT_MCS_DATA_RATE[pMgntInfo->dot11CurrentChannelBandWidth][FALSE][((pMgntInfo->RegVHTHighestOperaRate - MGN_VHT1SS_MCS0)&0x3f)]; - HighestRate = (HighestRate+1) >> 1; - - SET_VHT_CAPABILITY_ELE_MCS_RX_HIGHEST_RATE(pCapELE, HighestRate); //indicate we support highest rx rate is 600Mbps. - if(pVHTInfo->bAssignTxLGIRate) - HighestRate = pVHTInfo->highestTxLGIRate; - SET_VHT_CAPABILITY_ELE_MCS_TX_HIGHEST_RATE(pCapELE, HighestRate); //indicate we support highest tx rate is 600Mbps. - - RT_PRINT_DATA(COMP_HT, DBG_TRACE, "Construct VHTCap in Beacon/Assoc/ReAssoc", posVHTCap->Octet, posVHTCap->Length); - VHTDebugVHTCapability(DBG_TRACE, Adapter, posVHTCap, (pu1Byte)"VHTConstructCapability()"); -} - - -VOID -VHTConstructOperationElement( - PADAPTER Adapter, - POCTET_STRING posVHTOperation -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte pOpELE = NULL; - CHANNEL_WIDTH ChnlWidth; - - pOpELE = (pu1Byte)posVHTOperation->Octet; - posVHTOperation->Length = 5; - - //Set BandWidth - if( (pMgntInfo->dot11CurrentChannelBandWidth == CHANNEL_WIDTH_20) || - (pMgntInfo->dot11CurrentChannelBandWidth == CHANNEL_WIDTH_40) ) - ChnlWidth = (CHANNEL_WIDTH)0; - else if(pMgntInfo->dot11CurrentChannelBandWidth == CHANNEL_WIDTH_80) - ChnlWidth = (CHANNEL_WIDTH)1; - - SET_VHT_OPERATION_ELE_CHL_WIDTH(pOpELE, ChnlWidth); - //center frequency - SET_VHT_OPERATION_ELE_CHL_CENTER_FREQ1(pOpELE,pMgntInfo->pChannelInfo->CurrentChannelCenterFrequency); - SET_VHT_OPERATION_ELE_CHL_CENTER_FREQ2(pOpELE,0); - SET_VHT_OPERATION_ELE_BASIC_MCS_SET(pOpELE, 0xFFFF); -} - -VOID -VHTSendOperatingModeNotification( - IN PADAPTER Adapter, - IN pu1Byte Addr - ) -{ - PRT_TCB pTcb; - PRT_TX_LOCAL_BUFFER pBuf; - u1Byte DataRate = MgntQuery_MgntFrameTxRate(Adapter, Addr); - - RT_TRACE(COMP_HT, DBG_LOUD, ("=====>Send Operating Mode Notification()\n")); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(MgntGetBuffer(Adapter, &pTcb, &pBuf)) - { - VHTConstructOpModeNotification(Adapter, Addr, pBuf->Buffer.VirtualAddress, &pTcb->PacketLength); - - if(pTcb->PacketLength != 0) - { - if(ACTING_AS_AP(Adapter)) - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, BE_QUEUE, DataRate); - else - MgntSendPacket(Adapter, pTcb, pBuf, pTcb->PacketLength, NORMAL_QUEUE, DataRate); - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - - -RT_STATUS -VHT_OnOpModeNotify( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - pu1Byte opmodenotif = NULL; - CHANNEL_WIDTH targetbw = (CHANNEL_WIDTH)0; - u1Byte targetrxss = 0, currentrxss = 0; - BOOLEAN bUpdateRA = FALSE; - - // CategoryCode(1) + ActionCode(1) + OpModeNotification(1) - if(posMpdu->Length < sMacHdrLng + 3) - { - RT_TRACE(COMP_HT, DBG_SERIOUS, ("VHT_OnOpModeNotify(): Invalid length(%d) of frame\n", posMpdu->Length)); - return RT_STATUS_INVALID_DATA; - } - - opmodenotif = posMpdu->Octet + sMacHdrLng + 2; - targetbw = (CHANNEL_WIDTH)GET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(opmodenotif); - targetrxss = (GET_VHT_OPERATING_MODE_FIELD_RX_NSS(opmodenotif) + 1); - RT_TRACE(COMP_MLME, DBG_LOUD, ("VHT_OnOpModeNotify(): bw = %d, ss = %d\n", targetbw, targetrxss)); - - if(targetbw != pMgntInfo->currentRABw) - { - RT_TRACE(COMP_HT, DBG_LOUD, ("VHT_OnOpModeNotify(): operating mode notification change BW\n")); - bUpdateRA = TRUE; - } - - currentrxss = RateToSpatialStream(pMgntInfo->dot11VHTOperationalRateSet); - if( (targetrxss != currentrxss) || bUpdateRA ) - { - RT_TRACE(COMP_HT, DBG_LOUD, ("VHT_OnOpModeNotify(): operating mode notification change tx spatial stream\n")); - - SpatialStreamToRate(Adapter, targetrxss, pMgntInfo->dot11VHTOperationalRateSet); - - pMgntInfo->Ratr_State = 0; - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State); - - } - return RT_STATUS_SUCCESS; -} - -VOID -VHTOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu -) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - pu1Byte pPeerVHTCap, pPeerVHTInfo, pCapMCS; - OCTET_STRING osTmp; - - RT_TRACE(COMP_MLME, DBG_LOUD,("==============>VHTOnAssocRsp \n ")); - - if( pVHTInfo->bCurrentVHTSupport == FALSE ) - { - RT_TRACE( COMP_MLME, DBG_LOUD, ("<=== VHTOnAssocRsp(): VHT_DISABLE\n") ); - return; - } - - PlatformZeroMemory(pVHTInfo->PeerVHTCapBuf, sizeof(pVHTInfo->PeerVHTCapBuf)); - PlatformZeroMemory(pVHTInfo->PeerVHTInfoBuf, sizeof(pVHTInfo->PeerVHTInfoBuf)); - - // Get VHT CAP and copy into buffer - osTmp= PacketGetElement( asocpdu, EID_VHTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(pMgntInfo->bRegIOTBcm256QAM && osTmp.Length == 0) - { - osTmp = PacketGetElement(asocpdu, EID_Vendor, OUI_SUB_11AC_EPIG_VHT_CAP, OUI_SUBTYPE_DONT_CARE); - if(osTmp.Length != 0) - { - osTmp.Octet += 7; - osTmp.Length = MAX_VHT_CAP_LEN; - } - } - - osTmp.Length = osTmp.Length > sizeof(pVHTInfo->PeerVHTCapBuf)?\ - sizeof(pVHTInfo->PeerVHTCapBuf):osTmp.Length; //prevent from overflow - - if(osTmp.Length > 0) - CopyMem(pVHTInfo->PeerVHTCapBuf, osTmp.Octet, osTmp.Length); - - // Get VHT Operation and copy into buffer - osTmp= PacketGetElement( asocpdu, EID_VHTOperation, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(pMgntInfo->bRegIOTBcm256QAM && osTmp.Length == 0) - { - OCTET_STRING EpigIE = PacketGetElement(asocpdu, EID_Vendor, OUI_SUB_EPIG_IE, OUI_SUBTYPE_DONT_CARE); - if(EpigIE.Length == 26) - { - osTmp.Octet = EpigIE.Octet+21; - osTmp.Length = 5; - } - } - - osTmp.Length = osTmp.Length>sizeof(pVHTInfo->PeerVHTInfoBuf)?\ - sizeof(pVHTInfo->PeerVHTInfoBuf):osTmp.Length; //prevent from overflow - - if(osTmp.Length > 0) - CopyMem(pVHTInfo->PeerVHTInfoBuf, osTmp.Octet, osTmp.Length); - - pPeerVHTCap = (pu1Byte)(pVHTInfo->PeerVHTCapBuf); - - pPeerVHTInfo = (pu1Byte)(pVHTInfo->PeerVHTInfoBuf); - - RT_DISP(FMLME, LINK_STS, - ("VHTOnAssocRsp(): call VHTSetBandWidthOnAsocRsp VHT_CAP=%04x VHT_INFO=%04x\n", - EF2Byte(*((UNALIGNED pu2Byte)pPeerVHTCap)), EF2Byte(*((UNALIGNED pu2Byte)pPeerVHTInfo))) ); - - // B4 Rx LDPC - if(TEST_FLAG(pVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_TX)) - { - SET_FLAG(pVHTInfo->VhtCurLdpc, GET_VHT_CAPABILITY_ELE_RX_LDPC(pPeerVHTCap) ? (LDPC_VHT_ENABLE_TX | LDPC_VHT_CAP_TX) : 0); - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Target BSS support VHT LDPC, enable Tx LDPC!\n")); - } - - // B5 Short GI for 80 MHz - pVHTInfo->bCurShortGI80MHz = (GET_VHT_CAPABILITY_ELE_SHORT_GI80M(pPeerVHTCap) & pVHTInfo->bRegShortGI80MHz) ? TRUE : FALSE; - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Current ShortGI80MHz = %d\n", pVHTInfo->bCurShortGI80MHz)); - - // B8 B9 B10 Rx STBC - if( TEST_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_TX) && GET_VHT_CAPABILITY_ELE_RX_STBC(pPeerVHTCap)) - { - SET_FLAG(pVHTInfo->VhtCurStbc, (STBC_VHT_ENABLE_TX | STBC_VHT_CAP_TX) ); - } - - // B11 SU Beamformer Capable, the target supports Beamformer and we are Beamformee - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMER_ENABLE) && - GET_VHT_CAPABILITY_ELE_SU_BFEE(pPeerVHTCap)) - { - SET_FLAG(pVHTInfo->VhtCurBeamform, BEAMFORMING_VHT_BEAMFORMEE_ENABLE); - // Shift to BEAMFORMING_VHT_BEAMFORMER_STS_CAP - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(pPeerVHTCap)<<8); - } - - // B12 SU Beamformee Capable, the target supports Beamformee and we are Beamformer - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMEE_ENABLE) && - GET_VHT_CAPABILITY_ELE_SU_BFER(pPeerVHTCap)) - { - SET_FLAG(pVHTInfo->VhtCurBeamform, BEAMFORMING_VHT_BEAMFORMER_ENABLE); - // Shit to BEAMFORMING_VHT_BEAMFORMEE_SOUND_DIM - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFER_SOUND_DIM_NUM(pPeerVHTCap)<<12); - } - - // B19 MU Beamformer Capable, the target supports Beamformer and we are Beamformee - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_AP_ENABLE) && - GET_VHT_CAPABILITY_ELE_MU_BFEE(pPeerVHTCap)) - { - SET_FLAG(pVHTInfo->VhtCurBeamform, BEAMFORMING_VHT_MU_MIMO_STA_ENABLE); - // Shift to BEAMFORMING_VHT_BEAMFORMER_STS_CAP - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(pPeerVHTCap)<<8); - } - - // B20 MU Beamformee Capable, the target supports Beamformee and we are Beamformer - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_STA_ENABLE) && - GET_VHT_CAPABILITY_ELE_MU_BFER(pPeerVHTCap)) - { - SET_FLAG(pVHTInfo->VhtCurBeamform, BEAMFORMING_VHT_MU_MIMO_AP_ENABLE); - // Shit to BEAMFORMING_VHT_BEAMFORMEE_SOUND_DIM - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFER_SOUND_DIM_NUM(pPeerVHTCap)<<12); - } - - RT_TRACE_F(COMP_HT, DBG_LOUD, ("Current VHT Beamforming Setting = %02X\n", pVHTInfo->VhtCurBeamform)); - - // B23 B24 B25 Maximum A-MPDU Length Exponent - pVHTInfo->AMPDU_Len = GET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(pPeerVHTCap); - if(pVHTInfo->AMPDU_Len > pHTInfo->CurrentAMPDUFactor) - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_FACTOR, &pVHTInfo->AMPDU_Len); - - pCapMCS = GET_VHT_CAPABILITY_ELE_RX_MCS(pPeerVHTCap); - VHTFilterMCSRate(Adapter, pCapMCS, pMgntInfo->dot11VHTOperationalRateSet); - pMgntInfo->VHTHighestOperaRate = VHTGetHighestMCSRate( - Adapter, - pMgntInfo->dot11VHTOperationalRateSet); - - pVHTInfo->PeerChnlBW = (CHANNEL_WIDTH)GET_VHT_OPERATION_ELE_CHL_WIDTH(pVHTInfo->PeerVHTInfoBuf); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_MAX_TIME, &pMgntInfo->VHTHighestOperaRate); -} - - -/* -* This function is called when -* (1) MPInitialization Phase -* (2) Receiving of Deauthentication from AP -*/ - -// TODO: Should this funciton be called when receiving of Disassociation? -VOID -VHTInitializeVHTInfo( - IN PADAPTER Adapter -) -{ - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = Adapter->MgntInfo.pVHTInfo; - - // These parameters will be reset when receiving deauthentication packet - pVHTInfo->bCurrentVHTSupport = FALSE; - - // LDPC support - CLEAR_FLAGS(pVHTInfo->VhtCurLdpc); - - // STBC support - CLEAR_FLAGS(pVHTInfo->VhtCurStbc); - - // Short GI support - pVHTInfo->bCurShortGI80MHz = FALSE; - - // Sounding support - CLEAR_FLAGS(pVHTInfo->VhtCurBeamform); - - // Initialize all of the parameters related to 11n - PlatformZeroMemory((PVOID)(&(pVHTInfo->SelfVHTCap)), sizeof(pVHTInfo->SelfVHTCap)); - PlatformZeroMemory((PVOID)(&(pVHTInfo->SelfVHTInfo)), sizeof(pVHTInfo->SelfVHTInfo)); - PlatformZeroMemory((PVOID)(&(pVHTInfo->PeerVHTCapBuf)), sizeof(pVHTInfo->PeerVHTCapBuf)); - PlatformZeroMemory((PVOID)(&(pVHTInfo->PeerVHTInfoBuf)), sizeof(pVHTInfo->PeerVHTInfoBuf)); -} - - -VOID -VHTParsingVHTCapElement( - IN PADAPTER Adapter, - IN OCTET_STRING VHTCapIE, - OUT PRT_WLAN_BSS pBssDesc -) -{ - if( VHTCapIE.Length > sizeof(pBssDesc->BssVHT.bdVHTCapBuf) ) - { - RT_TRACE( COMP_HT, DBG_LOUD, ("VHTParsingVHTCapElement(): VHT Capability Element length is too long!\n") ); - return; - } - - VHTCapIE.Length = VHTCapIE.Length > sizeof(pBssDesc->BssVHT.bdVHTCapBuf)?\ - sizeof(pBssDesc->BssVHT.bdVHTCapBuf):VHTCapIE.Length; //prevent from overflow - - CopyMem(pBssDesc->BssVHT.bdVHTCapBuf, VHTCapIE.Octet, VHTCapIE.Length); - pBssDesc->BssVHT.bdVHTCapLen = VHTCapIE.Length; - -} - -VOID -VHTParsingVHTOperationElement( - IN PADAPTER Adapter, - IN OCTET_STRING VHTOperIE, - OUT PRT_WLAN_BSS pBssDesc -) -{ - if( VHTOperIE.Length > sizeof(pBssDesc->BssVHT.bdVHTOperBuf) ) - { - RT_TRACE( COMP_HT, DBG_LOUD, ("HTParsingHTCapElement(): VHT Operation Element length is too long!\n") ); - return; - } - - VHTOperIE.Length = VHTOperIE.Length > sizeof(pBssDesc->BssVHT.bdVHTOperBuf)?\ - sizeof(pBssDesc->BssVHT.bdVHTOperBuf):VHTOperIE.Length; //prevent from overflow - - CopyMem(pBssDesc->BssVHT.bdVHTOperBuf, VHTOperIE.Octet, VHTOperIE.Length); - pBssDesc->BssVHT.bdVHTOperLen = VHTOperIE.Length; -} - - -VOID -VHTParsingVHTOpModeNotification( - IN PADAPTER Adapter, - IN OCTET_STRING VHTNotifIE, - OUT PRT_WLAN_BSS pBssDesc -) -{ - if( VHTNotifIE.Length > sizeof(pBssDesc->BssVHT.bdVHTOpModeNotifBuf) ) - { - RT_TRACE( COMP_HT, DBG_LOUD, ("VHTParsingVHTOpModeNotification(): VHT Operating Mode Notification length is too long!\n") ); - return; - } - - VHTNotifIE.Length = VHTNotifIE.Length > sizeof(pBssDesc->BssVHT.bdVHTOpModeNotifBuf)?\ - sizeof(pBssDesc->BssVHT.bdVHTOpModeNotifBuf):VHTNotifIE.Length; //prevent from overflow - - CopyMem(pBssDesc->BssVHT.bdVHTOpModeNotifBuf, VHTNotifIE.Octet, VHTNotifIE.Length); - pBssDesc->BssVHT.bdVHTOpModeNotifLen = VHTNotifIE.Length; -} - - -VOID -VHTUseDefaultSettingFromReg( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - pVHTInfo->bCurShortGI80MHz= TRUE; - - pVHTInfo->VhtCurLdpc = pVHTInfo->VhtLdpcCap; - pVHTInfo->VhtCurStbc = pVHTInfo->VhtStbcCap; - pVHTInfo->VhtCurBeamform = pVHTInfo->VhtBeamformCap; - - pVHTInfo->AMPDU_Len = VHT_AGG_SIZE_1024K; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_FACTOR, &pVHTInfo->AMPDU_Len); - - PlatformMoveMemory(pMgntInfo->dot11VHTOperationalRateSet, pMgntInfo->Regdot11VHTOperationalRateSet, 2); - - pMgntInfo->VHTHighestOperaRate = pMgntInfo->RegVHTHighestOperaRate; - - pMgntInfo->dot11CurrentChannelBandWidth = CHNL_GetRegBWSupport(Adapter); -} - -VOID -VHTUseDefaultSettingFromDefault( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = &DefAdapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pDefVHTInfo = pDefMgntInfo->pVHTInfo; - - //===== The ones that not follow ====== - pVHTInfo->bCurShortGI80MHz = TRUE; - pVHTInfo->VhtCurLdpc = pVHTInfo->VhtLdpcCap; - pVHTInfo->VhtCurStbc = pVHTInfo->VhtStbcCap; - pVHTInfo->VhtCurBeamform = pVHTInfo->VhtBeamformCap; - - PlatformMoveMemory(pMgntInfo->dot11VHTOperationalRateSet, pMgntInfo->Regdot11VHTOperationalRateSet, 2); - - pMgntInfo->VHTHighestOperaRate = pMgntInfo->RegVHTHighestOperaRate; - //============================== - - pVHTInfo->AMPDU_Len = pDefVHTInfo->AMPDU_Len; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_AMPDU_FACTOR, &pVHTInfo->AMPDU_Len); - - pMgntInfo->dot11CurrentChannelBandWidth = pDefMgntInfo->dot11CurrentChannelBandWidth; -} - - -VOID -VHTUseDefaultSetting( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - u1Byte TwoPortStatus =(u1Byte) TWO_PORT_STATUS__DEFAULT_ONLY; - - if(pVHTInfo->bEnableVHT) - { - pVHTInfo->bCurrentVHTSupport = TRUE; - - //[Win7] [Vista/XP] Cross Platform Capbility Enable!, 2009.07.31, by Bohn - GetTwoPortSharedResource(Adapter,TWO_PORT_SHARED_OBJECT__STATUS,NULL,&TwoPortStatus); - - //[win7 Two Port BW40Mhz issue] Extention Port Use Reg's Default Value. 2009.05.20, by bohn - if( TwoPortStatus==TWO_PORT_STATUS__DEFAULT_ONLY || - TwoPortStatus==TWO_PORT_STATUS__EXTENSION_ONLY || - TwoPortStatus==TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE) - { - VHTUseDefaultSettingFromReg(Adapter); - } - else if(TwoPortStatus==TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT) - { - //[win7 Two Port BW40Mhz issue] Extention Port obey the rule of Default Port. 2009.05.20, by bohn - VHTUseDefaultSettingFromDefault(Adapter); - } - else if( TwoPortStatus==TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20 || - TwoPortStatus==TWO_PORT_STATUS__DEFAULT_A_EXTENSION_N20 || - TwoPortStatus==TWO_PORT_STATUS__ADHOC) - { - //[Win7] Now is the Default-G Extension-N20 case, we need to reset all HT value and forced to N20 - // 2009.07.09, by Bohn - VHTUseDefaultSettingFromReg(Adapter); - } - } - else - { - pVHTInfo->bCurrentVHTSupport = FALSE; - } -} - -/* -* Description: -* This function will get the highest speed rate in input MCS set. -* -* /param Adapter Pionter to Adapter entity -* pMCSRateSet Pointer to MCS rate bitmap -* pMCSFilter Pointer to MCS rate filter -* -* /return Highest MCS rate included in pMCSRateSet and filtered by pMCSFilter. -* -*/ -u1Byte -VHTGetHighestMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pVHTMCSRateSet - ) -{ - u1Byte i, j; - u1Byte bitMap; - u1Byte VHTMcsRate = 0; - - for(i = 0; i < 2; i++) - { - if(pVHTMCSRateSet[i] != 0xff) - { - for(j = 0; j < 8; j += 2) - { - bitMap = (pVHTMCSRateSet[i] >> j) & 3; - - if(bitMap != 3) - VHTMcsRate = MGN_VHT1SS_MCS7 + 10*j/2 + i*40 + bitMap; //VHT rate indications begin from 0x90 - } - } - } - return VHTMcsRate; -} - - -VOID -VHTCheckVHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN pu1Byte pVHTCap -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - u1Byte VHtSTBC = 0; - - // B2 B3 Supported Channel Width Set - if(CHNL_RUN_ABOVE_80MHZ(pMgntInfo) && pEntry->BandWidth == CHANNEL_WIDTH_40) - pEntry->BandWidth = CHANNEL_WIDTH_80; - - // B4 Rx LDPC - if(TEST_FLAG(pVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_TX)) - SET_FLAG(pEntry->VHTInfo.LDPC, GET_VHT_CAPABILITY_ELE_RX_LDPC(pVHTCap) ? (LDPC_VHT_ENABLE_TX | LDPC_VHT_CAP_TX) : 0); - - // B5 Short GI for 80 MHz - pEntry->VHTInfo.bShortGI80M = GET_VHT_CAPABILITY_ELE_SHORT_GI80M(pVHTCap); - - // B8 B9 B10 Rx STBC - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_TX_STBC, (pu1Byte)&VHtSTBC); - if(!TEST_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_TX)) - VHtSTBC = 0; - - if(VHtSTBC < GET_HT_CAPABILITY_ELE_RX_STBC(pVHTCap)) - pEntry->VHTInfo.STBC = VHtSTBC; - else - pEntry->VHTInfo.STBC = GET_HT_CAPABILITY_ELE_RX_STBC(pVHTCap); - - CLEAR_FLAGS(pEntry->VHTInfo.VhtCurBeamform); - // B11 SU Beamformer Capable, we are Beamformee - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMEE_ENABLE) && - GET_VHT_CAPABILITY_ELE_SU_BFER(pVHTCap)) - { - SET_FLAG(pEntry->VHTInfo.VhtCurBeamform, BEAMFORMING_VHT_BEAMFORMER_ENABLE); - // Shift to BEAMFORMING_VHT_BEAMFORMER_STS_CAP - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(pVHTCap)<<8); - } - - // B12 SU Beamformee Capable, we are Beamformer - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_BEAMFORMER_ENABLE) && - GET_VHT_CAPABILITY_ELE_SU_BFEE(pVHTCap)) - { - SET_FLAG(pEntry->VHTInfo.VhtCurBeamform, BEAMFORMING_VHT_BEAMFORMEE_ENABLE); - // Shit to BEAMFORMING_VHT_BEAMFORMEE_SOUND_DIM - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFER_SOUND_DIM_NUM(pVHTCap)<<12); - } - - // B19 MU Beamformer Capable, we are Beamformee - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_STA_ENABLE) && - GET_VHT_CAPABILITY_ELE_MU_BFER(pVHTCap)) - { - SET_FLAG(pEntry->VHTInfo.VhtCurBeamform, BEAMFORMING_VHT_MU_MIMO_AP_ENABLE); - // Shift to BEAMFORMING_VHT_BEAMFORMER_STS_CAP - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(pVHTCap)<<8); - } - - // B20 MU Beamformee Capable, we are Beamformer - if( TEST_FLAG(pVHTInfo->VhtBeamformCap, BEAMFORMING_VHT_MU_MIMO_AP_ENABLE) && - GET_VHT_CAPABILITY_ELE_MU_BFEE(pVHTCap)) - { - SET_FLAG(pEntry->VHTInfo.VhtCurBeamform, BEAMFORMING_VHT_MU_MIMO_STA_ENABLE); - // Shit to BEAMFORMING_VHT_BEAMFORMEE_SOUND_DIM - SET_FLAG(pVHTInfo->VhtCurBeamform, GET_VHT_CAPABILITY_ELE_SU_BFER_SOUND_DIM_NUM(pVHTCap)<<12); - } - - RT_DISP(FBEAM, FBEAM_FUN, ("Client VHT Beaforming Cap = 0x%02X\n", pEntry->VHTInfo.VhtCurBeamform)); - - VHTFilterMCSRate(Adapter, GET_VHT_CAPABILITY_ELE_RX_MCS(pVHTCap), pEntry->VHTInfo.VHTRateSet); -} - - -/*********************************************************** -Function: Recovery to Initialize value -Auther: sherry -Date: 20111117 -************************************************************/ -VOID -VHTInitializeBssDesc( - IN PBSS_VHT pBssVHT - ) -{ - pBssVHT->bdSupportVHT = FALSE; - PlatformZeroMemory(pBssVHT->bdVHTCapBuf, sizeof(pBssVHT->bdVHTCapBuf)); - pBssVHT->bdVHTCapLen = 0; - PlatformZeroMemory(pBssVHT->bdVHTOperBuf, sizeof(pBssVHT->bdVHTOperBuf)); - pBssVHT->bdVHTOperLen = 0; -} - - -BOOLEAN -VHTModeSupport( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu -) -{ - OCTET_STRING VHTCapIE, mmpdu; - - mmpdu.Octet = pSRCmmpdu->Octet; - mmpdu.Length = pSRCmmpdu->Length; - // Get VHT Capability IE: - VHTCapIE = PacketGetElement(mmpdu, EID_VHTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(VHTCapIE.Length != 0) - { - return TRUE; - } - else - return FALSE; -} - - -/*********************************************************** -Function: To parsing VHT Related IE from Beacon or ProbeRsp -Auther: Page and sherry -Date: 20111117 -************************************************************/ -VOID -VHTGetValueFromBeaconOrProbeRsp( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu, - PRT_WLAN_BSS bssDesc -) -{ - OCTET_STRING VHTCapIE, VHTOperIE, VHTNotifIE, mmpdu; - - mmpdu.Octet = pSRCmmpdu->Octet; - mmpdu.Length = pSRCmmpdu->Length; - - //Initialize VHT BSSDesc - VHTInitializeBssDesc(&bssDesc->BssVHT); - - if(Adapter->bInHctTest) - return; - - // Get VHT Capability IE - VHTCapIE = PacketGetElement(mmpdu, EID_VHTCapability, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(VHTCapIE.Length != 0) - VHTParsingVHTCapElement(Adapter, VHTCapIE, bssDesc); - else if(Adapter->MgntInfo.bRegIOTBcm256QAM) - { - VHTCapIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_11AC_EPIG_VHT_CAP, OUI_SUBTYPE_DONT_CARE); - - if(VHTCapIE.Length != 0) - { - VHTCapIE.Octet += 7; - VHTCapIE.Length = MAX_VHT_CAP_LEN; - VHTParsingVHTCapElement(Adapter, VHTCapIE, bssDesc); - } - } - - RT_DISP(FBEACON, BCN_SHOW, ("EID_VHTCapability VHTCapIE.Length=%d\r\n", VHTCapIE.Length)); - - // Get VHT Opration IE - VHTOperIE = PacketGetElement(mmpdu, EID_VHTOperation, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - - if(VHTOperIE.Length != 0) - VHTParsingVHTOperationElement(Adapter, VHTOperIE, bssDesc); - else if(Adapter->MgntInfo.bRegIOTBcm256QAM) - { - OCTET_STRING EpigIE = PacketGetElement(mmpdu, EID_Vendor, OUI_SUB_EPIG_IE, OUI_SUBTYPE_DONT_CARE); - if(EpigIE.Length >= 26) - { - VHTOperIE.Octet = EpigIE.Octet+21; - VHTOperIE.Length = 5; - } - - if(VHTOperIE.Length != 0) - VHTParsingVHTOperationElement(Adapter, VHTOperIE, bssDesc); - } - - if(VHTCapIE.Length != 0) - { - bssDesc->BssVHT.bdSupportVHT = TRUE; - } - - // Operating Mode Notification - VHTNotifIE = PacketGetElement(mmpdu, EID_OpModeNotification, OUI_SUB_DONT_CARE, OUI_SUBTYPE_DONT_CARE); - if(VHTNotifIE.Length != 0) - VHTParsingVHTOpModeNotification(Adapter, VHTNotifIE, bssDesc); - - //2<4>Check peer configuration - if(VHTOperIE.Length!=0 && VHTOperIE.Octet != NULL) - { - CHANNEL_WIDTH ChnlBW = (CHANNEL_WIDTH)(GET_VHT_OPERATION_ELE_CHL_WIDTH(VHTOperIE.Octet)); - if(ChnlBW == 1) - bssDesc->bdBandWidth = CHANNEL_WIDTH_80; - else if(ChnlBW == 2) - bssDesc->bdBandWidth = CHANNEL_WIDTH_160; - else if(ChnlBW == 3) - bssDesc->bdBandWidth = CHANNEL_WIDTH_80_80; - } -} - -/************************************************************************* -Fuction: To Restore VHT setting -Author: Sherry -Date: 20111117 -*************************************************************************/ -VOID -VHTResetSelfAndSavePeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{ - - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - // - // Save Peer Setting before Association - // - if( pVHTInfo->bEnableVHT && pBssDesc->BssVHT.bdSupportVHT) - { - pVHTInfo->bCurrentVHTSupport = TRUE; - - // Save VHT Cap and VHT Operation information Element - if(pBssDesc->BssVHT.bdVHTCapLen > 0 && pBssDesc->BssVHT.bdVHTCapLen <= sizeof(pVHTInfo->PeerVHTCapBuf)) - CopyMem(pVHTInfo->PeerVHTCapBuf, pBssDesc->BssVHT.bdVHTCapBuf, pBssDesc->BssVHT.bdVHTCapLen); - - if(pBssDesc->BssVHT.bdVHTOperLen> 0 && pBssDesc->BssVHT.bdVHTOperLen <= sizeof(pVHTInfo->PeerVHTInfoBuf)) - CopyMem(pVHTInfo->PeerVHTInfoBuf,pBssDesc->BssVHT.bdVHTOperBuf, pBssDesc->BssVHT.bdVHTOperLen); - - if(pBssDesc->BssVHT.bdVHTOperLen != 0) - pVHTInfo->PeerChnlBW = (CHANNEL_WIDTH)GET_VHT_OPERATION_ELE_CHL_WIDTH(pBssDesc->BssVHT.bdVHTOperBuf); - else - pVHTInfo->PeerChnlBW = (CHANNEL_WIDTH)CHANNEL_WIDTH_20; - - pMgntInfo->IOTAction |= VHTIOTActIsAMsduEnable(Adapter); - } - else - { - pVHTInfo->bCurrentVHTSupport = FALSE; - pVHTInfo->PeerChnlBW = CHANNEL_WIDTH_20; - } -} - - -VOID -VHTUpdateSelfAndPeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - - if(pVHTInfo->bCurrentVHTSupport) - { - if(pBssDesc->BssVHT.bdVHTOperLen != 0) - pVHTInfo->PeerChnlBW = (CHANNEL_WIDTH)GET_VHT_OPERATION_ELE_CHL_WIDTH(pBssDesc->BssVHT.bdVHTOperBuf); - - if(pBssDesc->BssVHT.bdVHTOpModeNotifLen > 0) - { - CHANNEL_WIDTH chnlBW = CHANNEL_WIDTH_20; - u1Byte targetrxSS, currentrxSS; - BOOLEAN bUpdateRA = FALSE; - - chnlBW = (CHANNEL_WIDTH)GET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(pBssDesc->BssVHT.bdVHTOpModeNotifBuf); - targetrxSS = (GET_VHT_OPERATING_MODE_FIELD_RX_NSS(pBssDesc->BssVHT.bdVHTOpModeNotifBuf) + 1); - RT_TRACE(COMP_MLME, DBG_LOUD, ("VHTUpdateSelfAndPeerSetting(): bw = %d, ss = %d\n", chnlBW, targetrxSS)); - - if(chnlBW != pMgntInfo->currentRABw) - { - RT_TRACE(COMP_HT, DBG_LOUD, ("VHTUpdateSelfAndPeerSetting(): operating mode notification change bandwidth\n")); - bUpdateRA = TRUE; - } - - currentrxSS = RateToSpatialStream(pMgntInfo->dot11VHTOperationalRateSet); - if(targetrxSS != currentrxSS ) - { - RT_TRACE(COMP_HT, DBG_LOUD, ("VHTUpdateSelfAndPeerSetting(): operating mode notification change tx spatial stream\n")); - - SpatialStreamToRate(Adapter, targetrxSS, pMgntInfo->dot11VHTOperationalRateSet); - - pMgntInfo->Ratr_State = 0; - Adapter->HalFunc.UpdateHalRAMaskHandler(Adapter, pMgntInfo->mMacId, NULL, pMgntInfo->Ratr_State); - - } - } - } -} - - -// -// Description: -// Update VHT Rate mask Regdot11OperationalRateSet. -// -// Arguments: -// [in] pVHTRate - -// Pointer of Regdot11OperationalRateSet -// [in] maxSS - -// Maximum spatial stream that will be modified -// [in] mcsCap - -// MCS capability of each spatial 0:0-7/1:0-8/2:0-9 -// -VOID -VHTMaskSuppDataRate( - pu1Byte pVHTRate, - u1Byte maxSS, - u1Byte mcsCap - ) -{ - u1Byte i=0, j=0, nSS = 0; - u1Byte RegRate = 0; - - for (i=0; i<2; i++) - { - for(j = 0; j < 8; j+=2) - { - RegRate = (pVHTRate[i] >> j) & 3; - - if(nSS < maxSS) - { - if(RegRate != 3 && mcsCap <= RegRate) - pVHTRate[i] = (pVHTRate[i] & ~(0x03 << j) ) | (mcsCap << j); - } - else - { - return; - } - nSS++; - } - } -} - - -#else -u2Byte -VHTMcsToDataRate( - PADAPTER Adapter, - u2Byte nMcsRate -) -{ - return 0; -} - - -VOID -VHTConstructCapabilityElement( - PADAPTER Adapter, - POCTET_STRING posVHTInfo, - BOOLEAN bAssoc) -{} - -VOID -VHTConstructOperationElement( - PADAPTER Adapter, - POCTET_STRING posVHTOperation -) -{} - - -u1Byte -VHTIOTActIsAMsduEnable( - PADAPTER Adapter -) -{return 0;} - - -VOID -VHTSendOperatingModeNotification( - IN PADAPTER Adapter, - IN pu1Byte Addr - ) -{} - -RT_STATUS -VHT_OnOpModeNotify( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ) -{ - return RT_STATUS_SUCCESS; -} - -u1Byte -VHTGetHighestMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pMCSRateSet -) -{ - return 0; -} - -VOID -VHTCheckVHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN pu1Byte pVHTCap -) -{ -} - -VOID -VHTOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu -) -{} - -VOID -VHTInitializeVHTInfo( - PADAPTER Adapter) -{} - - -VOID -VHTGetValueFromBeaconOrProbeRsp( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu, - PRT_WLAN_BSS bssDesc -) -{} - - -VOID -VHTResetSelfAndSavePeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{} - - -VOID -VHTUseDefaultSetting( - PADAPTER Adapter -) -{} - - -VOID -VHTUpdateSelfAndPeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -) -{} - -VOID -VHTMaskSuppDataRate( - pu1Byte pVHTRate, - u1Byte maxSS, - u1Byte mcsCap - ) -{ -} - -BOOLEAN -VHTModeSupport( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu -) -{ - return FALSE; -} - -#endif - diff --git a/network/wlan/WDI/COMMON/VHTGen.h b/network/wlan/WDI/COMMON/VHTGen.h deleted file mode 100644 index 72eeb421..00000000 --- a/network/wlan/WDI/COMMON/VHTGen.h +++ /dev/null @@ -1,337 +0,0 @@ -#ifndef __INC_VHTGEN_H -#define __INC_VHTGEN_H - -#define GET_VHT_INFO(_pMgntInfo) ((PRT_VERY_HIGH_THROUGHPUT)((_pMgntInfo)->pVHTInfo)) - -//VHT capability info -#define SET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 2, _val) -#define SET_VHT_CAPABILITY_ELE_CHL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 2, 2, _val) -#define SET_VHT_CAPABILITY_ELE_RX_LDPC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 4, 1, _val) -#define SET_VHT_CAPABILITY_ELE_SHORT_GI80M(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 5, 1, _val) -#define SET_VHT_CAPABILITY_ELE_SHORT_GI160M(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 6, 1, _val) -#define SET_VHT_CAPABILITY_ELE_TX_STBC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 7, 1, _val) -#define SET_VHT_CAPABILITY_ELE_RX_STBC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 0, 3, _val) -#define SET_VHT_CAPABILITY_ELE_SU_BFER(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 3, 1, _val) // B11 -#define SET_VHT_CAPABILITY_ELE_SU_BFEE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 4, 1, _val) // B12 -#define SET_VHT_CAPABILITY_ELE_BFER_ANT_SUPP(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 5, 3, _val) // B13~B15 -#define SET_VHT_CAPABILITY_ELE_SOUNDING_DIMENSIONS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 0, 3, _val) // B16~B18 -#define SET_VHT_CAPABILITY_ELE_MU_BFER(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 3, 1, _val) // B19 -#define SET_VHT_CAPABILITY_ELE_MU_BFEE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 4, 1, _val) // B20 -#define SET_VHT_CAPABILITY_ELE_TXOP_PS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 5, 1, _val) -#define SET_VHT_CAPABILITY_ELE_HTC_VHT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 6, 1, _val) -#define SET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+2, 7, 3, _val) //B23~B25 -#define SET_VHT_CAPABILITY_ELE_LINK_ADAPTION(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+3, 2, 2, _val) // B26~B27 -#define SET_VHT_CAPABILITY_ELE_MCS_RX_MAP(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+4, 0, 16, _val) //B0~B15 indicate Rx MCS MAP, we write 0 to indicate MCS0~7. by page -#define SET_VHT_CAPABILITY_ELE_MCS_RX_HIGHEST_RATE(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+6, 0, 13, _val) -#define SET_VHT_CAPABILITY_ELE_MCS_TX_MAP(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+8, 0, 16, _val) //B0~B15 indicate Tx MCS MAP, we write 0 to indicate MCS0~7. by page -#define SET_VHT_CAPABILITY_ELE_MCS_TX_HIGHEST_RATE(_pEleStart, _val) SET_BITS_TO_LE_2BYTE((_pEleStart)+10, 0, 13, _val) - - -#define GET_VHT_CAPABILITY_ELE_MAX_MPDU_LENGTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 2) -#define GET_VHT_CAPABILITY_ELE_CHL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 2, 2) -#define GET_VHT_CAPABILITY_ELE_RX_LDPC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 4, 1) -#define GET_VHT_CAPABILITY_ELE_SHORT_GI80M(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 5, 1) -#define GET_VHT_CAPABILITY_ELE_SHORT_GI160M(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 6, 1) -#define GET_VHT_CAPABILITY_ELE_TX_STBC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1) -#define GET_VHT_CAPABILITY_ELE_RX_STBC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 3) -#define GET_VHT_CAPABILITY_ELE_SU_BFER(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 3, 1) -#define GET_VHT_CAPABILITY_ELE_SU_BFEE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 4, 1) -#define GET_VHT_CAPABILITY_ELE_SU_BFEE_STS_CAP(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+1, 5, 3) -#define GET_VHT_CAPABILITY_ELE_SU_BFER_SOUND_DIM_NUM(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+2, 0, 3) -#define GET_VHT_CAPABILITY_ELE_MU_BFER(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 3, 1) -#define GET_VHT_CAPABILITY_ELE_MU_BFEE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 4, 1) -#define GET_VHT_CAPABILITY_ELE_TXOP_PS(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 5, 1) -#define GET_VHT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(_pEleStart) LE_BITS_TO_2BYTE((_pEleStart)+2, 7, 3) -#define GET_VHT_CAPABILITY_ELE_RX_MCS(_pEleStart) ((_pEleStart)+4) -#define GET_VHT_CAPABILITY_ELE_TX_MCS(_pEleStart) ((_pEleStart)+8) - - -//VHT Operation Information Element -#define SET_VHT_OPERATION_ELE_CHL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 8, _val) -#define SET_VHT_OPERATION_ELE_CHL_CENTER_FREQ1(_pEleStart, _val) SET_BITS_TO_LE_2BYTE(_pEleStart+1, 0, 8, _val) -#define SET_VHT_OPERATION_ELE_CHL_CENTER_FREQ2(_pEleStart, _val) SET_BITS_TO_LE_2BYTE(_pEleStart+2, 0, 8, _val) -#define SET_VHT_OPERATION_ELE_BASIC_MCS_SET(_pEleStart, _val) SET_BITS_TO_LE_2BYTE(_pEleStart+3, 0, 16, _val) - -#define GET_VHT_OPERATION_ELE_CHL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart,0,8) -#define GET_VHT_OPERATION_ELE_CENTER_FREQ1(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1,0,8) -#define GET_VHT_OPERATION_ELE_CENTER_FREQ2(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2,0,8) - -//VHT Operating Mode -#define SET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 2, _val) -#define SET_VHT_OPERATING_MODE_FIELD_RX_NSS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 4, 3, _val) -#define SET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 7, 1, _val) -#define GET_VHT_OPERATING_MODE_FIELD_CHNL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 2) -#define GET_VHT_OPERATING_MODE_FIELD_RX_NSS(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 4, 3) -#define GET_VHT_OPERATING_MODE_FIELD_RX_NSS_TYPE(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1) - -#define SET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+7, 6, 1, _val) -#define GET_EXT_CAPABILITY_ELE_OP_MODE_NOTIF(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+7, 6, 1) - -// VHT GID Management Frame Info. -#define GET_VHT_GID_MGNT_INFO_MEMBERSHIP_STATUS(_pStart) LE_BITS_TO_1BYTE((_pStart), 0, 8) -#define GET_VHT_GID_MGNT_INFO_USER_POSITION(_pStart) LE_BITS_TO_1BYTE((_pStart), 0, 8) - -// VHT Beamforming Report Poll -#define SET_VHT_BF_REPORT_POLL_RA(_hdr, _val) cpMacAddr(((pu1Byte)(_hdr))+4, (pu1Byte)(_val)) -#define SET_VHT_BF_REPORT_POLL_TA(_hdr, _val) cpMacAddr(((pu1Byte)(_hdr))+10, (pu1Byte)(_val)) -#define SET_VHT_BF_REPORT_POLL_FEEDBACK_SEG_RETRAN_BITMAP(_hdr, _val) SET_BITS_TO_LE_1BYTE((_hdr)+16, 0, 8, (_val)) - -typedef enum _VHT_DATA_SC{ - VHT_DATA_SC_DONOT_CARE = 0, - VHT_DATA_SC_20_UPPER_OF_80MHZ = 1, - VHT_DATA_SC_20_LOWER_OF_80MHZ = 2, - VHT_DATA_SC_20_TOP_OF_80MHZ = 3, - VHT_DATA_SC_20_BOTTOM_OF_80MHZ = 4, - VHT_DATA_SC_20_RECV1 = 5, - VHT_DATA_SC_20_RECV2 = 6, - VHT_DATA_SC_20_RECV3 = 7, - VHT_DATA_SC_20_RECV4 = 8, - VHT_DATA_SC_40_UPPER_OF_80MHZ = 9, - VHT_DATA_SC_40_LOWER_OF_80MHZ = 10, -}VHT_DATA_SC, *PVHT_DATA_SC_E; - -typedef enum _PROTECTION_MODE{ - PROTECTION_MODE_AUTO = 0, - PROTECTION_MODE_FORCE_ENABLE = 1, - PROTECTION_MODE_FORCE_DISABLE = 2, -}PROTECTION_MODE, *PPROTECTION_MODE; - -typedef enum _RT_BEAMFORMING_PKT_TYPE{ - RT_BF_PKT_TYPE_NONE = 0, - RT_BF_PKT_TYPE_UNICAST_NDPA = 1, - RT_BF_PKT_TYPE_BROADCAST_NDPA = 2, - RT_BF_PKT_TYPE_BF_REPORT_POLL = 3, - RT_BF_PKT_TYPE_FINAL_BF_REPORT_POLL = 4, -}RT_BEAMFORMING_PKT_TYPE; - -#define LDPC_VHT_ENABLE_RX BIT0 -#define LDPC_VHT_ENABLE_TX BIT1 -#define LDPC_VHT_TEST_TX_ENABLE BIT2 -#define LDPC_VHT_CAP_TX BIT3 - -#define STBC_VHT_ENABLE_RX BIT0 -#define STBC_VHT_ENABLE_TX BIT1 -#define STBC_VHT_TEST_TX_ENABLE BIT2 -#define STBC_VHT_CAP_TX BIT3 - - -#define BEAMFORMING_VHT_BEAMFORMER_ENABLE BIT0 // Declare our NIC supports beamformer -#define BEAMFORMING_VHT_BEAMFORMEE_ENABLE BIT1 // Declare our NIC supports beamformee -#define BEAMFORMING_VHT_MU_MIMO_AP_ENABLE BIT2 // Declare our NIC support MU-MIMO AP mode -#define BEAMFORMING_VHT_MU_MIMO_STA_ENABLE BIT3 // Declare our NIC support MU-MIMO STA mode -#define BEAMFORMING_VHT_BEAMFORMER_TEST BIT4 // Transmiting Beamforming no matter the target supports it or not -#define BEAMFORMING_VHT_BEAMFORMER_STS_CAP (BIT8|BIT9|BIT10) // Asoc rsp cap -#define BEAMFORMING_VHT_BEAMFORMEE_SOUND_DIM (BIT12|BIT13|BIT14) // Asoc rsp cap - -// -// VHT Group ID (GID) Management Frame -// -#define FRAME_OFFSET_VHT_GID_MGNT_CATEGORY (sMacHdrLng + 0) -#define FRAME_OFFSET_VHT_GID_MGNT_ACTION (sMacHdrLng + 1) -#define FRAME_OFFSET_VHT_GID_MGNT_MEMBERSHIP_STATUS_ARRAY (sMacHdrLng + 2) -#define FRAME_OFFSET_VHT_GID_MGNT_USER_POSITION_ARRAY (sMacHdrLng + 10) - -typedef struct _RT_VERY_HIGH_THROUGHPUT{ - DECLARE_RT_OBJECT(_RT_VERY_HIGH_THROUGHPUT); - - BOOLEAN bEnableVHT; - BOOLEAN bCurrentVHTSupport; - - BOOLEAN bRegBW80MHz; // Tx 80MHz channel capablity - - BOOLEAN bRegShortGI80MHz; // Capability setting for Tx Short GI for 80MHz - BOOLEAN bCurShortGI80MHz; // Tx Short GI for 80MHz - - u1Byte VhtLdpcCap; // Capability combination of VHT LDPC LDPC_VHT_XXX - u1Byte VhtCurLdpc; // Current combination of VHT LDPC LDPC_VHT_XXX of target connection supports LDPC - - u1Byte VhtStbcCap; // Capability combination of STBC_VHT_XXX. - u1Byte VhtCurStbc; // Current setting of STBC - - u2Byte VhtBeamformCap; // Capability combination of VHT LDPC LDPC_VHT_XXX - u2Byte VhtCurBeamform; // Current combination of BEAMFORMING_VHT_XXX in BSS connection - - u1Byte AMPDU_Len; // Maximum A-MPUD Length Exponent - - // VHT related information for "Self" - u1Byte SelfVHTCap[26]; //HT_CAPABILITY_ELE SelfHTCap; // This is HT cap element sent to peer STA, which also indicate HT Rx capabilities. - u1Byte SelfVHTInfo[22]; // This is HT info element sent to peer STA, which also indicate HT Rx capabilities. - - // VHT related information for "Peer" - u1Byte PeerVHTCapBuf[32]; - u1Byte PeerVHTInfoBuf[32]; - - // 40MHz Channel Offset settings. - CHANNEL_WIDTH PeerChnlBW; - - // Operating Mode Notification - BOOLEAN bOpModeNotif; - CHANNEL_WIDTH BWToSwitch; - u1Byte RxSSToSwitch; - BOOLEAN RxSSTypeBfmeeToSwitch; - - // Sigma related - BOOLEAN bFixedRTSBW; - CHANNEL_WIDTH DynamicRTSBW; - u1Byte BWSignalingCtrl; - u1Byte nTxSPStream; - u1Byte nRxSPStream; - BOOLEAN bUpdateMcsCap; - u1Byte McsCapability; - BOOLEAN bAssignTxLGIRate; - u2Byte highestTxLGIRate; - CHANNEL_WIDTH DynamicCTSBW; -}RT_VERY_HIGH_THROUGHPUT, *PRT_VERY_HIGH_THROUGHPUT; - - - -typedef struct _RT_VHTINFO_STA_ENTRY{ - BOOLEAN bEnableVHT; - - u1Byte LDPC; - u1Byte STBC; - - BOOLEAN bShortGI80M; - - u2Byte VhtCurBeamform; // Beamforming Settings. - - u2Byte AMSDU_MaxSize; - u1Byte VHTRateSet[2]; -}RT_VHTINFO_STA_ENTRY, *PRT_VHTINFO_STA_ENTRY; - - -//------------------------------------------------------------ -// The Data structure is used to keep VHT related variable for "each AP" -// when card is configured as "STA mode" -//------------------------------------------------------------ - -typedef struct _BSS_VHT{ - - BOOLEAN bdSupportVHT; - - // VHT related elements - u1Byte bdVHTCapBuf[13]; - u2Byte bdVHTCapLen; - u1Byte bdVHTOperBuf[6]; - u2Byte bdVHTOperLen; - u1Byte bdVHTOpModeNotifBuf[1]; - u2Byte bdVHTOpModeNotifLen; -}BSS_VHT, *PBSS_VHT; - - -u2Byte -VHTMcsToDataRate( - PADAPTER Adapter, - u2Byte nMcsRate -); - -u1Byte -RateToSpatialStream( - pu1Byte pVHTRate -); - - -u1Byte -VHTIOTActIsAMsduEnable( - PADAPTER Adapter -); - - -VOID -VHTConstructOpModeNotification( - PADAPTER Adapter, - pu1Byte Addr, - pu1Byte Buffer, - pu4Byte pLength - ); - -VOID -VHTConstructCapabilityElement( - PADAPTER Adapter, - POCTET_STRING posVHTInfo, - BOOLEAN bAssoc -); - - -VOID -VHTConstructOperationElement( - PADAPTER Adapter, - POCTET_STRING posVHTOperation -); - -VOID -VHTSendOperatingModeNotification( - IN PADAPTER Adapter, - IN pu1Byte Addr - ); - -u1Byte -VHTGetHighestMCSRate( - IN PADAPTER Adapter, - IN pu1Byte pVHTMCSRateSet - ); - -RT_STATUS -VHT_OnOpModeNotify( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -VOID -VHTOnAssocRsp( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu); - -VOID -VHTInitializeVHTInfo( - PADAPTER Adapter -); - -VOID -VHTCheckVHTCap( - IN PADAPTER Adapter, - IN PRT_WLAN_STA pEntry, - IN pu1Byte pVHTCap -); - -BOOLEAN -VHTModeSupport( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu -); - -VOID -VHTGetValueFromBeaconOrProbeRsp( - PADAPTER Adapter, - POCTET_STRING pSRCmmpdu, - PRT_WLAN_BSS bssDesc -); - -VOID -VHTResetSelfAndSavePeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc -); - - -VOID -VHTUseDefaultSetting( - PADAPTER Adapter -); - - -VOID -VHTUpdateSelfAndPeerSetting( - PADAPTER Adapter, - PRT_WLAN_BSS pBssDesc - ); - -VOID -VHTMaskSuppDataRate( - pu1Byte pVHTRate, - u1Byte maxSS, - u1Byte mcsCap - ); - -#endif diff --git a/network/wlan/WDI/COMMON/WOLPattern.c b/network/wlan/WDI/COMMON/WOLPattern.c deleted file mode 100644 index af01f65c..00000000 --- a/network/wlan/WDI/COMMON/WOLPattern.c +++ /dev/null @@ -1,913 +0,0 @@ -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - WOLPattern.c - -Abstract: - 1. This source file is going to be implemented the functions about Wake-on WLAN (WOL). - - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2009.06.15 tynli Create version 0. Implement GetWOLWakeUpPattern(). - 2009.06.16 tynli Implement CalculateWOLPatternCRC(), CRC16_CCITT(). - 2009.06.19 tynli Implement ResetWoLPara(). ---*/ - - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "WOLPattern.tmh" -#endif - - -// -// Description: Get the wake up frame pattern for wake-on WLAN (WOL). -// -// pWOLMaskToHW -It is an output. We must to set bit mask to HW in a reverse order, and -// sometimes to shift some bits because the payload offset from OS may -// be different from real wake up pattern. -// 2009.06.15. by tynli. -// -VOID -GetWOLWakeUpPattern( - IN PADAPTER pAdapter, - IN pu1Byte pWOLPatternMask, - IN u4Byte WOLPatternMaskSize, - IN pu1Byte pWOLPatternContent, - IN u4Byte WOLPatternContentSize, - IN u1Byte Index, - IN BOOLEAN bMgntFrame -) -{ - u4Byte i=0, j=0; - u4Byte len=0, mask[4]; - u2Byte CRCRemainder; - u1Byte MaskToHW[MAX_WOL_BIT_MASK_SIZE]; - u1Byte WOLWakeupPattern[MAX_WOL_PATTERN_SIZE]; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - // Set the pattern match flag. - pWoLPatternInfo[Index].IsPatternMatch = 1; - - // 8723A Hw just can save 12 patterns mask and CRC in registers, for the DTM reqirement, - // the device should support 16 patterns, so the remain 4 patterns will be handled by Fw. - // Keep all the pattern masks and contents, then download them in HaltAdapter(). 2012.03.19. by tynli. - // To support wake pattern parsing so we need to store the pattern info. 2013.01.10, by tynli. - AddWoLPatternEntry(pAdapter, pWOLPatternMask, WOLPatternMaskSize, pWOLPatternContent, WOLPatternContentSize, Index); - - PlatformZeroMemory((pu1Byte)WOLWakeupPattern, MAX_WOL_PATTERN_SIZE); - PlatformZeroMemory((pu1Byte)mask, MAX_WOL_BIT_MASK_SIZE); - PlatformZeroMemory((pu1Byte)MaskToHW, MAX_WOL_BIT_MASK_SIZE); - - //RT_PRINT_DATA( (COMP_OID_QUERY|COMP_AP), DBG_LOUD, ("GetWOLWakeUpPattern() Mask: "), - //pWOLPatternMask, WOLPatternMaskSize); - - //RT_PRINT_DATA( (COMP_OID_QUERY|COMP_AP), DBG_LOUD, ("GetWOLWakeUpPattern() Pattern: "), - //pWOLPatternContent, WOLPatternContentSize); - - //1. Compare if DA = our MAC ADDR - - -/* - // 2009.07.09. - //for DTM bit mask, it will macth from the highest bit of a byte, so we reverse each of byte. - for(i=0; i>(i%8))&0x01) - { - WOLWakeupPattern[len] = pWOLPatternContent[i+24]; - //DbgPrint("pWOLWakeupPattern[%d] = 0x%x\n", len, WOLWakeupPattern[len]); - len++; - } - } - - } - else - { - //2. To macth HW design, we need to change bit mask. HW catch payload which begin from LLC - //in 802.11 packet, but OS set the wake up pattern in 802.3 format (DA[6]|SA[6]|Type[2]|Data), - //so (1) we need to shift bit mask left for 6 bits to filter out DA[6], and the type is at the last 2 bits - //in LLC[8], so (2) we also need to set bit 0-5 to zero in the new bit mask which means SA[6] - //to prevent CRC error (HW count from LLC, it is not a SA). by tynli. 2009.07.03. - - for(i=0; i<(WOLPatternMaskSize-1); i++) //(1) Shift 6 bits - { - MaskToHW[i] = pWOLPatternMask[i]>>6; - MaskToHW[i] |= (pWOLPatternMask[i+1]&0x3F)<<2; - } - MaskToHW[i] = (pWOLPatternMask[i]>>6)&0x3F; - MaskToHW[0] &= 0xC0; //(2) Set bit 0-5 to zero - - //3. To get the wake up pattern from the mask. - //We do not count first 12 bits which means DA[6] and SA[6] in the pattern to match HW design. - for(i=12; i>(i%8))&0x01) - { - WOLWakeupPattern[len] = pWOLPatternContent[i]; - //DbgPrint("pWOLWakeupPattern[%d] = 0x%x\n", len, WOLWakeupPattern[len]); - len++; - } - } - } - - //4. Calculate CRC remainder - CRCRemainder = CalculateWOLPatternCRC(WOLWakeupPattern, len); - pWoLPatternInfo[Index].CrcRemainder = CRCRemainder; - RT_TRACE(COMP_POWER, DBG_LOUD, - ("GetWOLWakeUpPattern(): CrcRemainder = %x\n",pWoLPatternInfo[Index].CrcRemainder)); - - //5. Change the byte order of the bit mask to macth HW design. - for(i=0; i<= (MAX_WOL_BIT_MASK_SIZE-4); i=i+4, j++) - { - mask[j] = MaskToHW[i]; - mask[j] |= (MaskToHW[i+1]<<8); - mask[j] |= (MaskToHW[i+2]<<16); - mask[j] |= (MaskToHW[i+3]<<24); - //DbgPrint("mask[%d] = %x\n", j, mask[j]); - pWoLPatternInfo[Index].Mask[j] = mask[j]; - //DbgPrint("pWoLPatternInfo[Index].Mask[%d] = %x\n", j, pWoLPatternInfo[Index].Mask[j]); - } - - { - // Download them in HaltAdapter() on 8723A. 2012.07.17, by tynli. - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_WF_MASK, (pu1Byte)(&Index)); - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_WF_CRC, (pu1Byte)(&Index)); - } -} - - -// -// Description: -// To calculate the CRC remainder for the WOL wake up pattern. -// Input: -// A WOL Pattern, pattern length -// Output: -// The CRC remainder for the pattern -// 2009.06.16. by tynli. -// -u2Byte -CalculateWOLPatternCRC( - pu1Byte Pattern, - u4Byte PatternLength -) -{ -// unsigned char data[2]={0xC6,0xAA}; - u2Byte CRC=0xffff; - u4Byte i; - - for(i=0; iMgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWOLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - u1Byte i; - - PlatformZeroMemory(pPmWOLPatternInfo, - sizeof(RT_PM_WOL_PATTERN_INFO)*(MAX_SUPPORT_WOL_PATTERN_NUM(Adapter))); - for(i=0; iHalFunc.SetHwRegHandler(Adapter, HW_VAR_RESET_WFCRC, 0); -} - -VOID -ConstructUserDefinedWakeUpPattern( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - //u1Byte AuthBuf[100]; - u4Byte AuthBufLen; - OCTET_STRING AuthChallengetext; - u1Byte AuthMaskBuf; - u1Byte AuthMaskBufLen; - u1Byte Index; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - pu1Byte AuthBuf; - PRT_GEN_TEMP_BUFFER pGenBufAuthPacket; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("===> ConstructUserDefinedWakeUpPattern()\n")); - - if(ACTING_AS_AP(Adapter) && pPSC->APOffloadEnable) - { - pGenBufAuthPacket = GetGenTempBuffer (Adapter, 100); - AuthBuf = (u1Byte *)pGenBufAuthPacket->Buffer.Ptr; - - // - // 1. Auth - // - //Since this is always the 1st authentication frame - AuthChallengetext.Length = 0; - - //Send authentication frame - ConstructAuthenticatePacket( - Adapter, - AuthBuf, - &AuthBufLen, - pMgntInfo->Bssid, - 0, - 1, - StatusCode_success, - AuthChallengetext); - - RT_PRINT_DATA(COMP_POWER, DBG_TRACE, "ConstructUserDefinedWakeUpPattern(): Auth ", - &AuthBuf, AuthBufLen); - - AuthMaskBuf = 0x0F; - AuthMaskBufLen = 1; - - //Find the index of the first empty entry. - for(Index=0; Index= MAX_SUPPORT_WOL_PATTERN_NUM(Adapter)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, - ("SET OID_PM_ADD_WOL_PATTERN: The number of wake up pattern is more than MAX_SUPPORT_WOL_PATTERN_NUM or the pattern Id is exist.\n")); - } - - // Set the pattern information. - pPmWoLPatternInfo[Index].PatternId = 0xFFFF; //for temp - pPmWoLPatternInfo[Index].PatternType = eUnicastPattern; - pPmWoLPatternInfo[Index].IsUserDefined = 1; - - GetWOLWakeUpPattern( - Adapter, - &AuthMaskBuf, - AuthMaskBufLen, - AuthBuf, - AuthBufLen, - Index, - TRUE); - - pPSC->WoLPatternNum++; - - ReturnGenTempBuffer(Adapter, pGenBufAuthPacket); - } -} - -// -// Description: -// When GTK is updated, check if the Wake on WLAN event happened before, and if yes indicate -// event to the upper layer. -// Argumets: -// [in] pAdapter - -// The adapter context. -// Return: -// NONE. -// By Bruce, 2011-06-09. -// -VOID -WolByGtkUpdate( - IN PADAPTER pAdapter - ) -{ - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL((&pAdapter->MgntInfo)); - - if((pPSC->WakeUpReason & (WOL_REASON_GTK_UPDATE | WOL_REASON_PTK_UPDATE)) != 0) - { - if(PlatformGetCurrentTime() <= pPSC->LastWakeUpTime + 20000000) // 10 sec - { - RT_TRACE_F(COMP_POWER, DBG_LOUD, ("Wake up by GTK and Indicate the WOL by GTK event!\n")); - PlatformIndicateCustomStatus( - pAdapter, - RT_CUSTOM_EVENT_WOL_GTK, - RT_CUSTOM_INDI_TARGET_IHV, - &pPSC->SleepMode, - sizeof(pPSC->SleepMode)); - } - else - { - RT_TRACE_F(COMP_POWER, DBG_LOUD, ("The current timt of updating GTK is too long from the last WOL time! Skip indication....\n")); - } - pPSC->WakeUpReason &= ~(WOL_REASON_GTK_UPDATE | WOL_REASON_PTK_UPDATE); - } -} - -VOID -RemoveUserDefinedWoLPattern( - IN PADAPTER Adapter -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - u1Byte Index; - - for(Index=0; IndexHalFunc.SetHwRegHandler(Adapter, HW_VAR_WF_MASK, (pu1Byte)(&Index)); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_WF_CRC, (pu1Byte)(&Index)); - pPmWoLPatternInfo[Index].HwWFMIndex = 0xff; // reset the value after clear HW/CAM entry. - - pPSC->WoLPatternNum--; - } - } - -} - -// -// Description: Save the wake patten masks and contents. -// -VOID -AddWoLPatternEntry( - IN PADAPTER Adapter, - IN pu1Byte pWOLPatternMask, - IN u4Byte WOLPatternMaskSize, - IN pu1Byte pWOLPatternContent, - IN u4Byte WOLPatternContentSize, - IN u1Byte Index -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - u1Byte i, j; - - // Reset the entry. - PlatformZeroMemory(&(pWoLPatternInfo[Index].FwPattern),sizeof(H2C_WOL_PATTERN_MATCH_INFO)); - - // - // Add bit mask entry. - // - for(i=0; i>j)&0x01) - { - pWoLPatternInfo[Index].FwPattern.ValidBitNum++; - } - } - - } - - // - // Add pattern content entry. - // - for(i=0; iMgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - u1Byte i=0; - u1Byte MinNum = 0xFF, NextMinNum=0xFF; - u1Byte NumOfSelected=0; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("GetWoLPatternMatchOffloadEntries(): Number of entries=%d\n", EntryNum)); - - // Find the minimun number of bits. - for(i=0; i EntryNum) - break; - pWoLPatternInfo[i].IsSupportedByFW = 1; - NumOfSelected++; - //DbgPrint("Find the littler index(%d)\n", i); - } - else if(pWoLPatternInfo[i].FwPattern.ValidBitNum > MinNum) - { - if(pWoLPatternInfo[i].FwPattern.ValidBitNum <= NextMinNum) - { - NextMinNum = pWoLPatternInfo[i].FwPattern.ValidBitNum; - } - } - } - //DbgPrint("NextMinNum=%d\n", NextMinNum); - MinNum = NextMinNum; - } - while((NumOfSelected < EntryNum) && (NumOfSelected < pPSC->WoLPatternNum)); - -} - -VOID -WoL_TranslateDot11FrameToDot3( - PADAPTER Adapter, - PRT_RFD pRfd, - pu1Byte pDot3Buffer, - pu2Byte pDot3BufLen -) -{ - OCTET_STRING frame = {NULL, 0}; - pu1Byte pHeader; - BOOLEAN bToDS, bFromDS; - u1Byte MacDestAddr[6]={0}, MacSrcAddr[6]={0}; - u1Byte offset=0; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pHeader = frame.Octet; - - RT_PRINT_DATA(COMP_INIT, DBG_TRACE, "WoL_TranlateDot11FrameToDot3(): frame \n",frame.Octet,frame.Length); - - bToDS = (Frame_ToDS(frame) ? TRUE : FALSE); - bFromDS = (Frame_FromDS(frame) ? TRUE : FALSE); - - if(bToDS && !bFromDS) - { - GET_80211_HDR_ADDRESS3(pHeader, MacDestAddr); // DA - GET_80211_HDR_ADDRESS2(pHeader, MacSrcAddr); // SA - } - else if(!bToDS && bFromDS) - { - GET_80211_HDR_ADDRESS1(pHeader, MacDestAddr); - GET_80211_HDR_ADDRESS3(pHeader, MacSrcAddr); - } - else if(bToDS && bFromDS) - { - GET_80211_HDR_ADDRESS3(pHeader, MacDestAddr); - GET_80211_HDR_ADDRESS4(pHeader, MacSrcAddr); - } - else - { - GET_80211_HDR_ADDRESS1(pHeader, MacDestAddr); - GET_80211_HDR_ADDRESS2(pHeader, MacSrcAddr); - } - offset += sMacHdrLng; - - if( pRfd->Status.bIsQosData ) - { - offset += sQoSCtlLng; - } - - if( pRfd->Status.bContainHTC) - { - offset += sHTCLng; - } - - if(Frame_ValidAddr4(frame)) - { - offset += 6; - } - - if(Frame_WEP(frame)) - { - offset += Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead; - } - - if(frame.Length <= offset) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("WoL_TranslateDot11FrameToDot3(): Error frame length!\n")); - return; - } - - // - if(IsDataFrame(frame.Octet)) - { - // Remove LLC header length (6 bytes) to get IP type feild.] - // LLC_HEADER_SIZE - if((frame.Length-offset) > LLC_HEADER_SIZE) // check length - { - if(*(pHeader+offset) == 0xaa && - *(pHeader+offset+1) == 0xaa && - *(pHeader+offset+2) == 0x03) - { - offset += LLC_HEADER_SIZE; - //DbgPrint("Find LLC header!!\n"); - } - } - } - - RT_TRACE(COMP_INIT, DBG_TRACE, ("WoL_TranslateDot11FrameToDot3(): offset = %d\n", offset)); - - // Mapping to 802.3 packet format. - PlatformMoveMemory(pDot3Buffer, MacDestAddr, 6); // DA - PlatformMoveMemory(pDot3Buffer+6, MacSrcAddr, 6); // SA - PlatformMoveMemory(pDot3Buffer+12, pHeader+offset, (frame.Length-offset)); //IP type+data - *pDot3BufLen = 12 + frame.Length - offset; - - RT_PRINT_DATA(COMP_INIT, DBG_TRACE, "WoL_TranlateDot11FrameToDot3(): pDot3Buffer \n",pDot3Buffer, *pDot3BufLen); -} - -// -// Description: Check the received packet if a magic packet. -// 2012.07.31, by tynli. -// -BOOLEAN -WoL_IsMagicPacket( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - OCTET_STRING frame = {NULL, 0}; - pu1Byte pHeader; - u1Byte offset=0, i, j; - u2Byte PayloadLen; - BOOLEAN bMatchPacket=FALSE; - - FillOctetString(frame, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - pHeader = frame.Octet; - - //RT_PRINT_DATA(COMP_RECV, DBG_LOUD,"WoL_IsMagicPacket(): frame \n",frame.Octet,frame.Length); - - // Get payload start offset. - offset += sMacHdrLng; - - if( pRfd->Status.bIsQosData ) - { - offset += sQoSCtlLng; - } - - if( pRfd->Status.bContainHTC) - { - offset += sHTCLng; - } - - if(Frame_ValidAddr4(frame)) - { - offset += 6; - } - - if(Frame_WEP(frame)) - { - offset += Adapter->MgntInfo.SecurityInfo.EncryptionHeadOverhead; - } - - if(frame.Length <= offset) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("WoL_IsMagicPacket(): Error frame length!\n")); - return bMatchPacket; - } - - RT_TRACE(COMP_RECV, DBG_TRACE, ("WoL_IsMagicPacket(): offset = %d\n", offset)); - - pHeader += offset; - PayloadLen = frame.Length - offset; - - // Search for magic packet pattern - for(i = 0; i PayloadLen) // check remain buffer length - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("WoL_IsMagicPacket(): Packet length error. 1\n")); - break; - } - - // Find FF FF FF FF FF FF pattern. - if(*(pHeader+i+1) == 0xFF && *(pHeader+i+2) == 0xFF && - *(pHeader+i+3) == 0xFF && *(pHeader+i+4) == 0xFF && - *(pHeader+i+5) == 0xFF) - { - i += 6; - if((i+16*6) > PayloadLen) // check remain buffer length - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("WoL_IsMagicPacket(): Packet length error. 2\n")); - break; - } - - // Repeat STA addr 16 times. - for(j=0; j<16; j++) - { - if(PlatformCompareMemory((pHeader+i+j*6), Adapter->CurrentAddress, 6) == 0) - { // Match - if(j == 15) - { - //Adapter->HwWakeUpEvent = 2; - bMatchPacket =TRUE; - RT_TRACE(COMP_POWER, DBG_LOUD, ("WoL_IsMagicPacket(): Find magic packet\n")); - } - } - else - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("WoL_IsMagicPacket(): Unmatch!!\n")); - break; - } - } - } - else - { - i += 1; - } - } - else - { - i += 1; - } - - } - - return bMatchPacket; -} - -// -// Description: Check the received packet if a pattern match packet. -// We should translate the reveived packet format to 802.3 format to match the pattern content -// set from the upper layer. If there is one pattern packet be matched, then return TRUE. -// 2012.07.31, by tynli. -// -BOOLEAN -WoL_IsPatternMatchPacket( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - u1Byte Index, i, j; - BOOLEAN bMatchPacket=TRUE; - u1Byte offset = 0; - pu1Byte pDot3Packet; - PRT_GEN_TEMP_BUFFER pGenBufPacket; - u2Byte Dot3PacketLen; - - pGenBufPacket = GetGenTempBuffer (Adapter, pRfd->PacketLength); - pDot3Packet = (u1Byte *)pGenBufPacket->Buffer.Ptr; - - // Translate 802.11 packet format to 802.3 format to match the pattern match content set by OID. - WoL_TranslateDot11FrameToDot3(Adapter, pRfd, pDot3Packet, &Dot3PacketLen); - - for(Index=0; IndexHwWakeUpEvent = 3 | (Index<<4); - RT_TRACE(COMP_POWER, DBG_LOUD, ("Find the pattern match wake packet!!Index(%d)\n", Index)); - break; - } - } - else - { - bMatchPacket = FALSE; - } - } - - if(bMatchPacket) - { - RT_PRINT_DATA(COMP_DBG, DBG_TRACE, "Dump pattern bitmask \n", pPmWoLPatternInfo[Index].FwPattern.BitMask, 16); - RT_PRINT_DATA(COMP_DBG, DBG_TRACE, "Dump pattern content \n", pPmWoLPatternInfo[Index].FwPattern.PatternContent, 128); - } - - ReturnGenTempBuffer(Adapter, pGenBufPacket); - - return bMatchPacket; -} - -// -// Description: Handle WoWLAN related Rx packets. -// -// Return value: TRUE - It is a wake packet. -// FALSE - It is a normal packet, and should be handled by normal Rx path. -// -BOOLEAN -WoL_HandleReceivedPacket( - PADAPTER Adapter, - PRT_RFD pRfd -) -{ - //OCTET_STRING frame = {NULL, 0}; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - //static BOOLEAN bWakePacket = FALSE; - PRT_RFD_STATUS pRtRfdStatus = &pRfd->Status; - BOOLEAN bResult=FALSE; - - if(pPSC->bFindWakePacket) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("Already found the first wake packet and return!\n")); - return FALSE; - } - - if(HW_SUPPORT_PARSING_WAKE_PACKET(Adapter)) - { - if(!pRtRfdStatus->WakeMatch) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("Not a wake packet and return!\n")); - return FALSE; - } - bResult = TRUE; - pPSC->bFindWakePacket = TRUE; - - if(pPSC->WakeUpReason == 0) // To prevent from covering Hw reason - { - if(pRtRfdStatus->WakeMatch & BIT0) - pPSC->WakeUpReason = WOL_REASON_UNICAST_PKT; - else if(pRtRfdStatus->WakeMatch & BIT1) - pPSC->WakeUpReason = WOL_REASON_MAGIC_PKT; - else if(pRtRfdStatus->WakeMatch & BIT2) - pPSC->WakeUpReason = WOL_REASON_PATTERN_PKT; - } - RT_TRACE(COMP_POWER, DBG_LOUD, ("~~~~~~~~ It is a wake packet(%d)!\n", pRtRfdStatus->WakeMatch)); - //RT_PRINT_DATA(COMP_INIT, DBG_LOUD,"WoL_HandleReceivedPacket: \n", pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - - } - else - { - - // RT_PRINT_DATA(COMP_INIT, DBG_LOUD,"WoL_HandleReceivedPacket: \n",frame.Octet,frame.Length); - - // Find the wake packet. - if(WoL_IsMagicPacket(Adapter, pRfd)) - { - pPSC->bFindWakePacket = TRUE; - bResult = TRUE; - if(pPSC->WakeUpReason == 0) // To prevent from covering Hw reason - pPSC->WakeUpReason = WOL_REASON_MAGIC_PKT; - } - else if(WoL_IsPatternMatchPacket(Adapter, pRfd)) - { - pPSC->bFindWakePacket = TRUE; - bResult = TRUE; - if(pPSC->WakeUpReason == 0) // To prevent from covering Hw reason - pPSC->WakeUpReason = WOL_REASON_PATTERN_PKT; - } - } - - // Indicate PM wake reason and packet to the OS. - if(pPSC->bFindWakePacket) - { - PlatformIndicatePMWakeReason(Adapter, TRUE, pRfd->Buffer.VirtualAddress, pRfd->PacketLength); - } - - return bResult; -} - - diff --git a/network/wlan/WDI/COMMON/WOLPattern.h b/network/wlan/WDI/COMMON/WOLPattern.h deleted file mode 100644 index 5048d6f8..00000000 --- a/network/wlan/WDI/COMMON/WOLPattern.h +++ /dev/null @@ -1,95 +0,0 @@ -#ifndef __INC_WOLPATTERN_H -#define __INC_WOLPATTERN_H - - -//#define MAX_SUPPORT_WOL_PATTERN_NUM 8 - -//#define MAX_WOL_BIT_MASK_SIZE 16 //unit: byte -//#define MAX_WOL_PATTERN_SIZE 128 - -#define WOL_REASON_PTK_UPDATE BIT0 // Pairwise key update event triggers this NIC to wake up -#define WOL_REASON_GTK_UPDATE BIT1 // Group key update event triggers this NIC to wake up -#define WOL_REASON_DISASSOC BIT2 // Disassociation event triggers this NIC to wake up -#define WOL_REASON_DEAUTH BIT3 // Deauthentication event triggers this NIC to wake up -#define WOL_REASON_AP_LOST BIT4 // FW decision disconnection event triggers this NIC to wake up -#define WOL_REASON_MAGIC_PKT BIT5 -#define WOL_REASON_UNICAST_PKT BIT6 -#define WOL_REASON_PATTERN_PKT BIT7 -#define WOL_REASON_RTD3_SSID_MATCH BIT8 -#define WOL_REASON_REALWOW_V2_WAKEUPPKT BIT9 -#define WOL_REASON_REALWOW_V2_ACKLOST BIT10 -#define WOL_REASON_NLO_SSID_MATCH BIT11 - -VOID -GetWOLWakeUpPattern( - IN PADAPTER pAdapter, - IN pu1Byte pWOLPatternMask, - IN u4Byte WOLPatternMaskSize, - IN pu1Byte pWOLPatternContent, - IN u4Byte WOLPatternContentSize, - IN u1Byte Index, - IN BOOLEAN bMgntFrame - ); - -u2Byte -CalculateWOLPatternCRC( - pu1Byte Pattern, - u4Byte PatternLength - ); - -u2Byte -CRC16_CCITT( - u1Byte data, - u2Byte CRC - ); - -VOID -ResetWoLPara( - IN PADAPTER Adapter - ); - -VOID -ConstructUserDefinedWakeUpPattern( - IN PADAPTER Adapter -); - -VOID -WolByGtkUpdate( - IN PADAPTER pAdapter - ); - -VOID -RemoveUserDefinedWoLPattern( - IN PADAPTER Adapter - ); - -VOID -AddWoLPatternEntry( - IN PADAPTER Adapter, - IN pu1Byte pWOLPatternMask, - IN u4Byte WOLPatternMaskSize, - IN pu1Byte pWOLPatternContent, - IN u4Byte WOLPatternContentSize, - IN u1Byte Index - ); - -VOID -GetWoLPatternMatchOffloadEntries( - IN PADAPTER Adapter, - IN u1Byte EntryNum - ); - -BOOLEAN -WoL_HandleReceivedPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -WoL_ParsingRxBufferPacket( - PADAPTER Adapter - ); - - -#endif //#ifndef __INC_WOLPATTERN_H - diff --git a/network/wlan/WDI/COMMON/WPS.c b/network/wlan/WDI/COMMON/WPS.c deleted file mode 100644 index 6aa96fd3..00000000 --- a/network/wlan/WDI/COMMON/WPS.c +++ /dev/null @@ -1,442 +0,0 @@ -/****************************************************************************** - - (c) Copyright 2011, RealTEK Technologies Inc. All Rights Reserved. - - Module: WPS.c (RTL8190 Source C File) - - Note: Declare some variable which will be used by any debug command. - - Function: - - Export: - - Abbrev: - - History: - Data Who Remark - - 06/15/2011 MH_Chen Create initial version. - Move WPS relative functio to the files. - - -******************************************************************************/ -/* Header Files. */ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "WPS.tmh" -#endif - -/*---------------------------Define Local Constant---------------------------*/ -/*---------------------------Define Local Constant---------------------------*/ - - -/*------------------------Define global variable-----------------------------*/ -/*------------------------Define global variable-----------------------------*/ - - -/*------------------------Define local variable------------------------------*/ -/*------------------------Define local variable------------------------------*/ - - -/*--------------------Define export function prototype-----------------------*/ -/*--------------------Define export function prototype-----------------------*/ - -/*---------------------Define local function prototype-----------------------*/ -/*---------------------Define local function prototype-----------------------*/ -#if (WPS_SUPPORT == 1) - -BOOLEAN -wps_IsWPSIEReady( - IN PADAPTER Adapter - ) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&(GetDefaultAdapter(Adapter)->MgntInfo)); - BOOLEAN wpsIEReady = FALSE; - - if(pSimpleConfig->ieBeaconLen == 0 || pSimpleConfig->ieAsocReqLen == 0 || pSimpleConfig->ieAsocRspLen == 0 - || pSimpleConfig->ieProbeReqLen == 0 ||pSimpleConfig->ieProbeRspLen == 0) - { - return wpsIEReady; - } - - wpsIEReady = TRUE; - return wpsIEReady; -} - - -VOID -WPS_Init( - IN PADAPTER Adapter - ) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&(GetDefaultAdapter(Adapter)->MgntInfo)); - - Adapter->WPSSupport = TRUE; - pSimpleConfig->WpsIeVersion = SUPPORT_WPS_INFO_VERSION; -} - - -BOOLEAN -WPS_OnAsocReq( - IN PADAPTER Adapter, - OUT BOOLEAN *pbIndicate - ) -{ -// PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PMGNT_INFO pDefaultMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pDefaultMgntInfo); - - if(pSimpleConfig->bEnabled || pSimpleConfig->IELen > 0) - {// don't check RSNIE whenever WPS is enabled, 20100528, haich. - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Support WPS, don't indicate to OS!\n")); - *pbIndicate = FALSE; - } - else - { - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Check RSN-IE if necessary. return FALSE<====\n")); - return FALSE; - } - return TRUE; - -} - - -BOOLEAN -WPS_MgntActSet_802_11_SSID( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&(Adapter->MgntInfo)); - - if( MgntIsLinkInProgress(pMgntInfo) && pSimpleConfig->bEnabled) - { - RT_TRACE(COMP_WPS, DBG_LOUD, ("MgntActSet_802_11_SSID(): In WPS process, do not connect to the same AP\n")); - return TRUE; - } - - return FALSE; - -} - - -VOID -WPS_ConstructBeaconFrame( - IN PADAPTER Adapter - ) -{ - // - // Simple config IE. by CCW - copy from 818x - // - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSIMPLE_CONFIG_T pSimpleConfig ; - OCTET_STRING SimpleConfigInfo; - PMGNT_INFO pDefaultMgntInfo; - - if(ACTING_AS_IBSS(Adapter)) - return; - - if(!ACTING_AS_AP(Adapter)) - return; - - pDefaultMgntInfo = &(GetDefaultAdapter(Adapter)->MgntInfo); - - pSimpleConfig = GET_SIMPLE_CONFIG(pDefaultMgntInfo); - - if( ((pSimpleConfig->WpsIeVersion < SUPPORT_WPS_INFO_VERSION) || (wps_IsWPSIEReady(Adapter) == FALSE)) && pSimpleConfig->IELen > 0) - { // Original method carrying WPS IE - RT_TRACE(COMP_WPS, DBG_TRACE, ("AP Construct Beacon \n")); - FillOctetString(SimpleConfigInfo, pSimpleConfig->IEBuf, pSimpleConfig->IELen); - PacketMakeElement( &pMgntInfo->beaconframe, EID_Vendor, SimpleConfigInfo); - } - else if(pSimpleConfig->WpsIeVersion == SUPPORT_WPS_INFO_VERSION) - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->ieBeaconBuf, pSimpleConfig->ieBeaconLen); - if(pSimpleConfig->ieBeaconLen > 0) - PacketAppendData(&pMgntInfo->beaconframe, SimpleConfigInfo); - } - -} - - -VOID -WPS_AppendElement( - IN PADAPTER Adapter, - IN POCTET_STRING posFrame, - IN BOOLEAN bCheckFrag, - IN WPS_INFO_OPCODE frameType - ) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&(GetDefaultAdapter(Adapter)->MgntInfo)); - OCTET_STRING SimpleConfigInfo; - - FunctionIn(COMP_WPS); - #if 0 - if(bCheckFrag) - { - // WPS 2.0 Support IE Fragment for Testbed function - if(pSimpleConfig->bFragmentIE && pSimpleConfig->IELen <= MAX_SIMPLE_CONFIG_IE_LEN) - { - u1Byte tempBuf[MAX_SIMPLE_CONFIG_IE_LEN]; - pu1Byte currPtr; - pu1Byte currPtrAftOui; - RT_TRACE(COMP_WPS,DBG_LOUD,("ConstructProbeRequest: in Fragment IE\n")); - PlatformZeroMemory(tempBuf, MAX_SIMPLE_CONFIG_IE_LEN); - //Copy the OUI - currPtr = pSimpleConfig->IEBuf; - //Tesplan to copy the first octet in the first fragment - PlatformMoveMemory(tempBuf, currPtr, SIZE_OUI + SIZE_OUI_TYPE); - currPtr += (SIZE_OUI + SIZE_OUI_TYPE); - currPtrAftOui = &tempBuf[SIZE_OUI + SIZE_OUI_TYPE]; - - // the first octet - PlatformMoveMemory(currPtrAftOui, currPtr, 1); - currPtr += 1; - FillOctetString(SimpleConfigInfo,tempBuf,(SIZE_OUI + SIZE_OUI_TYPE +1)); - PacketMakeElement( posFrame, EID_Vendor, SimpleConfigInfo); - - // the rest octet - PlatformZeroMemory(currPtrAftOui, 1); - PlatformMoveMemory(currPtrAftOui, currPtr, (pSimpleConfig->IELen-(SIZE_OUI + SIZE_OUI_TYPE)-1) ); - - FillOctetString(SimpleConfigInfo,tempBuf,(pSimpleConfig->IELen-1)); - PacketMakeElement( posFrame, EID_Vendor, SimpleConfigInfo); - - } - else if(pSimpleConfig->IELen > MAX_SIMPLE_CONFIG_IE_LEN) - { - u1Byte tempBuf[MAX_SIMPLE_CONFIG_IE_LEN]; - pu1Byte currPtr; - pu1Byte currPtrAftOui; - PlatformZeroMemory(tempBuf, MAX_SIMPLE_CONFIG_IE_LEN); - //Copy the OUI - currPtr = pSimpleConfig->IEBuf; - //Tesplan to copy the first octet in the first fragment - PlatformMoveMemory(tempBuf, currPtr, SIZE_OUI + SIZE_OUI_TYPE); - currPtr += (SIZE_OUI + SIZE_OUI_TYPE); - currPtrAftOui = &tempBuf[SIZE_OUI + SIZE_OUI_TYPE]; - - // the first fragment - PlatformMoveMemory(currPtrAftOui, currPtr, (MAX_SIMPLE_CONFIG_IE_LEN - (SIZE_OUI + SIZE_OUI_TYPE))); - currPtr += (MAX_SIMPLE_CONFIG_IE_LEN - (SIZE_OUI + SIZE_OUI_TYPE)); - FillOctetString(SimpleConfigInfo,tempBuf,(MAX_SIMPLE_CONFIG_IE_LEN - (SIZE_OUI + SIZE_OUI_TYPE))); - PacketMakeElement( posFrame, EID_Vendor, SimpleConfigInfo); - - // the rest octet - PlatformZeroMemory(currPtrAftOui, (MAX_SIMPLE_CONFIG_IE_LEN - (SIZE_OUI + SIZE_OUI_TYPE))); - PlatformMoveMemory(currPtrAftOui, currPtr, (pSimpleConfig->IELen-MAX_SIMPLE_CONFIG_IE_LEN) ); - - FillOctetString(SimpleConfigInfo,tempBuf,(pSimpleConfig->IELen-MAX_SIMPLE_CONFIG_IE_LEN)); - PacketMakeElement( posFrame, EID_Vendor, SimpleConfigInfo); - - } - else - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->IEBuf, pSimpleConfig->IELen); - PacketMakeElement( posFrame, EID_Vendor, SimpleConfigInfo); - } - } - else - #endif - { - if(((pSimpleConfig->WpsIeVersion < SUPPORT_WPS_INFO_VERSION) || (wps_IsWPSIEReady(Adapter) == FALSE)) && pSimpleConfig->IELen > 0) - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->IEBuf, pSimpleConfig->IELen); - PacketMakeElement( posFrame, EID_Vendor, SimpleConfigInfo); - } - else if(pSimpleConfig->WpsIeVersion == SUPPORT_WPS_INFO_VERSION) - { - switch(frameType) - { - case WPS_INFO_ASOCREQ_IE: - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->ieAsocReqBuf, pSimpleConfig->ieAsocReqLen); - if(pSimpleConfig->ieAsocReqLen > 0) - PacketAppendData(posFrame, SimpleConfigInfo); - } - break; - - case WPS_INFO_ASOCRSP_IE: - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->ieAsocRspBuf, pSimpleConfig->ieAsocRspLen); - if(pSimpleConfig->ieAsocRspLen > 0) - PacketAppendData(posFrame, SimpleConfigInfo); - } - break; - - case WPS_INFO_PROBEREQ_IE: - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->ieProbeReqBuf, pSimpleConfig->ieProbeReqLen); - if(pSimpleConfig->ieProbeReqLen > 0) - PacketAppendData(posFrame, SimpleConfigInfo); - } - break; - - case WPS_INFO_PROBERSP_IE: - { - FillOctetString(SimpleConfigInfo, pSimpleConfig->ieProbeRspBuf, pSimpleConfig->ieProbeRspLen); - if(pSimpleConfig->ieProbeRspLen > 0) - PacketAppendData(posFrame, SimpleConfigInfo); - } - break; - - default: //for MacOS warning. - break; - - } - } - } -} - - - -VOID -WPS_CopyRxEAPPacket( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&(GetDefaultAdapter(Adapter)->MgntInfo)); - pu1Byte RecieveBufPtrt,RfdBufferPtr; - - pu1Byte BufferPtr = (pu1Byte)&(pRfd->PacketLength ); - RT_TRACE(COMP_WPS, DBG_LOUD, ("In WPS Copy EAP Packet\n")); - pRfd->PacketLength -= 18;//18 is the length we don't want - PlatformFillMemory(pSimpleConfig->RecieveBuf, 1500, 0); - PlatformMoveMemory(pSimpleConfig->RecieveBuf,BufferPtr, 2); - RecieveBufPtrt = (pu1Byte)pSimpleConfig->RecieveBuf+2; - RfdBufferPtr =pRfd->Buffer.VirtualAddress+4; //skip Version DATA TYPE fream control - PlatformMoveMemory(RecieveBufPtrt,RfdBufferPtr, ETHERNET_ADDRESS_LENGTH*2); - RecieveBufPtrt += (ETHERNET_ADDRESS_LENGTH*2); - RfdBufferPtr += (ETHERNET_ADDRESS_LENGTH*2); - RfdBufferPtr += 14;//Skip LLC Until 888E - if(pRfd->Buffer.VirtualAddress[0] & 0x80) {//Skip QoS - RfdBufferPtr += 2; - RT_TRACE(COMP_WPS, DBG_LOUD, ("The Data is %x and QoS is Set\n",RfdBufferPtr[0])); - pRfd->PacketLength -= 2;//18 is the length we don't want - PlatformMoveMemory(pSimpleConfig->RecieveBuf,BufferPtr, 2); - - } - PlatformMoveMemory(RecieveBufPtrt,RfdBufferPtr,(pRfd->PacketLength -(ETHERNET_ADDRESS_LENGTH*2)) ); - pSimpleConfig->bRecievePacket = TRUE; - pSimpleConfig->RecieveLength = (pRfd->PacketLength+2);// 2 is the packet length we reserved for report to lib - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "EAP Packet Content:", pSimpleConfig->RecieveBuf, pRfd->PacketLength); - -} - - -RT_STATUS -WPS_QueryRxEAPPacket( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&(Adapter->MgntInfo)); - RT_STATUS status = RT_STATUS_SUCCESS; - - RT_TRACE(COMP_WPS, DBG_LOUD, ("WPS Check Recieve Buffer:\n")); - if( InformationBufferLength < pSimpleConfig->RecieveLength) - { - *BytesNeeded = pSimpleConfig->RecieveLength; - *BytesWritten = 0; - return RT_STATUS_INVALID_CONTEXT; - } - - if(!pSimpleConfig->bRecievePacket) - { - *BytesNeeded =0; - //*BytesWritten = 0; - } - else - { - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "Driver report Info Buffer before copy:", InformationBuffer, 16); - InformationBufferLength = pSimpleConfig->RecieveLength;//Set For packet length - PlatformMoveMemory( InformationBuffer, pSimpleConfig->RecieveBuf, pSimpleConfig->RecieveLength); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "Driver report Info Buffer After copy:", InformationBuffer, 16); - *BytesWritten = pSimpleConfig->RecieveLength; - pSimpleConfig->bRecievePacket = FALSE; - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "Driver report EAP Packet Content:", pSimpleConfig->RecieveBuf, pSimpleConfig->RecieveLength); - } - return status; -} - -#else - -VOID -WPS_Init( - IN PADAPTER Adapter - ) -{ - Adapter->WPSSupport = FALSE; -} - - -BOOLEAN -WPS_OnAsocReq( - IN PADAPTER Adapter, - OUT BOOLEAN *pbIndicate - ) -{ - return TRUE; -} - - -BOOLEAN -WPS_MgntActSet_802_11_SSID( - IN PADAPTER Adapter - ) -{ - return FALSE; -} - - -VOID -WPS_ConstructBeaconFrame( - IN PADAPTER Adapter - ) -{ - -} - -VOID -WPS_AppendElement( - IN PADAPTER Adapter, - IN POCTET_STRING posFrame, - IN BOOLEAN bCheckFrag, - IN WPS_INFO_OPCODE frameType - ) -{ - -} - -VOID -WPS_CopyRxEAPPacket( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - -} - -RT_STATUS -WPS_QueryRxEAPPacket( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ) -{ - return RT_STATUS_SUCCESS; -} - - -#endif // WPS_SUPPORT - - -/* End of WPS.c */ - diff --git a/network/wlan/WDI/COMMON/WPS.h b/network/wlan/WDI/COMMON/WPS.h deleted file mode 100644 index 35f42560..00000000 --- a/network/wlan/WDI/COMMON/WPS.h +++ /dev/null @@ -1,159 +0,0 @@ -/***************************************************************************** - * Copyright 2011, RealTEK Technology Inc. All Right Reserved. - * - * Module: WPS.h (RTL8190 Header H File) - * - * - * Note: Declare some variable which will be used by any debug command. - * - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * 06/15/2011 MHC Create initial version in different filed. - * Move WPS relative define to the header file. - * - *****************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __WPS_H__ -#define __WPS_H__ - - -/*--------------------------Define Parameters-------------------------------*/ - -#define MAX_SIMPLE_CONFIG_IE_LEN 255 -#define MAX_SIMPLE_CONFIG_IE_LEN_V2 512 -#define MAX_SIMPLE_CONFIG_IE_ASSEMBLE_LEN 512 -#define MAX_SIMPLE_Return_PacketLength 2500 -#define MAX_SUB_WPS_IE_LENGTH 251 - -// Define support WPS IE version -#define SUPPORT_WPS_INFO_VERSION 0x01 - -/*--------------------------Define structure--------------------------------*/ - -typedef enum _WPS_INFO_OPCODE{ - WPS_INFO_NO_OPERATION = 0, - WPS_INFO_SUPPORT_VERSION = 1, - WPS_INFO_BEACON_IE = 2, - WPS_INFO_ASOCREQ_IE = 3, - WPS_INFO_ASOCRSP_IE = 4, - WPS_INFO_PROBEREQ_IE = 5, - WPS_INFO_PROBERSP_IE = 6, - WPS_INFO_QUERY_INFO = 7, -}WPS_INFO_OPCODE; - -/*------------------------------Define structure----------------------------*/ - - -// -// Simple Config. by CCW copy from 818x -// -typedef struct _SIMPLE_CONFIG_T{ - DECLARE_RT_OBJECT(_SIMPLE_CONFIG_T); - - BOOLEAN bEnabled; // TRUE if simple config is enabled and we have to handle corresponding IE in scan, (re)association. - u2Byte IELen; // Length of our Simple Config IE. - u1Byte IEBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; // Buffer to keep our Simple Config IE. - BOOLEAN bAPEnabled; // For AP mode WPS - u1Byte WpsIeVersion; - - u1Byte InfoCtrl; - u2Byte ieBeaconLen; - u1Byte ieBeaconBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; - u2Byte ieAsocReqLen; - u1Byte ieAsocReqBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; - u2Byte ieAsocRspLen; - u1Byte ieAsocRspBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; - u2Byte ieProbeReqLen; - u1Byte ieProbeReqBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; - u2Byte ieProbeRspLen; - u1Byte ieProbeRspBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; - - u1Byte AssembleIEBuf[MAX_SIMPLE_CONFIG_IE_ASSEMBLE_LEN]; // Buffer to assemble fragment IE. - u2Byte AssembleIELen; - u1Byte RecieveBuf[MAX_SIMPLE_Return_PacketLength];//Save The packet we Recieve - u2Byte RecieveLength; - BOOLEAN bRecievePacket;//Flag to check we recieve Packet or not - BOOLEAN bFragmentIE; -}SIMPLE_CONFIG_T, *PSIMPLE_CONFIG_T; - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -/*------------------------Export global variable----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ - -#if WPS_SUPPORT -#define GET_SIMPLE_CONFIG(__pMgntInfo) ((PSIMPLE_CONFIG_T)((__pMgntInfo)->pSimpleConfig)) -#define GET_SIMPLE_CONFIG_ENABLED(__pMgntInfo) (GET_SIMPLE_CONFIG(__pMgntInfo)->bEnabled) -#define GET_SIMPLE_CONFIG_IE_LEN(__pMgntInfo) (GET_SIMPLE_CONFIG(__pMgntInfo)->IELen) -#define SET_SIMPLE_CONFIG_IE_LEN(__pMgntInfo, __len) ( (GET_SIMPLE_CONFIG(__pMgntInfo)->IELen) = (__len) ) -#else -#define GET_SIMPLE_CONFIG(__pMgntInfo) NULL -#define GET_SIMPLE_CONFIG_ENABLED(__pMgntInfo) FALSE -#define GET_SIMPLE_CONFIG_IE_LEN(__pMgntInfo) 0 -#define SET_SIMPLE_CONFIG_IE_LEN(__pMgntInfo, __len) -#endif - -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ -VOID -WPS_Init( - IN PADAPTER Adapter - ); - -BOOLEAN -WPS_OnAsocReq( - IN PADAPTER Adapter, - OUT BOOLEAN *pbIndicate - ); - -BOOLEAN -WPS_MgntActSet_802_11_SSID( - IN PADAPTER Adapter - ); - -VOID -WPS_ConstructBeaconFrame( - IN PADAPTER Adapter - ); - -VOID -WPS_AppendElement( - IN PADAPTER Adapter, - IN POCTET_STRING posFrame, - IN BOOLEAN bCheckFrag, - IN WPS_INFO_OPCODE frameType - ); - - -VOID -WPS_CopyRxEAPPacket( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -RT_STATUS -WPS_QueryRxEAPPacket( - IN PADAPTER Adapter, - IN pu1Byte InformationBuffer, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ); - -/*--------------------------Exported Function prototype---------------------*/ - - -#endif /* __WPS_H__ */ - -/* End of WPS.h */ diff --git a/network/wlan/WDI/COMMON/WPS_Def.h b/network/wlan/WDI/COMMON/WPS_Def.h deleted file mode 100644 index 0675c6df..00000000 --- a/network/wlan/WDI/COMMON/WPS_Def.h +++ /dev/null @@ -1,124 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// Contains WPS definitions specified in the spec. -// - -#ifndef __INC_WPS_DEF_H -#define __INC_WPS_DEF_H - -typedef enum _WPS_ATTRIBUTE { - ATTR_AP_CHANNEL = 0x1001, - ATTR_ASSOC_STATE = 0x1002, - ATTR_AUTH_TYPE = 0x1003, - ATTR_AUTH_TYPE_FLAGS = 0x1004, - ATTR_AUTHENTICATOR = 0x1005, - ATTR_CONFIG_METHODS = 0x1008, - ATTR_CONFIG_ERROR = 0x1009, - ATTR_CONFIRM_URL4 = 0x100a, - ATTR_CONFIRM_URL6 = 0x100b, - ATTR_CONN_TYPE = 0x100c, - ATTR_CONN_TYPE_FLAGS = 0x100d, - ATTR_CRED = 0x100e, - ATTR_ENCR_TYPE = 0x100f, - ATTR_ENCR_TYPE_FLAGS = 0x1010, - ATTR_DEV_NAME = 0x1011, - ATTR_DEV_PASSWORD_ID = 0x1012, - ATTR_E_HASH1 = 0x1014, - ATTR_E_HASH2 = 0x1015, - ATTR_E_SNONCE1 = 0x1016, - ATTR_E_SNONCE2 = 0x1017, - ATTR_ENCR_SETTINGS = 0x1018, - ATTR_ENROLLEE_NONCE = 0x101a, - ATTR_FEATURE_ID = 0x101b, - ATTR_IDENTITY = 0x101c, - ATTR_IDENTITY_PROOF = 0x101d, - ATTR_KEY_WRAP_AUTH = 0x101e, - ATTR_KEY_ID = 0x101f, - ATTR_MAC_ADDR = 0x1020, - ATTR_MANUFACTURER = 0x1021, - ATTR_MSG_TYPE = 0x1022, - ATTR_MODEL_NAME = 0x1023, - ATTR_MODEL_NUMBER = 0x1024, - ATTR_NETWORK_INDEX = 0x1026, - ATTR_NETWORK_KEY = 0x1027, - ATTR_NETWORK_KEY_INDEX = 0x1028, - ATTR_NEW_DEVICE_NAME = 0x1029, - ATTR_NEW_PASSWORD = 0x102a, - ATTR_OOB_DEVICE_PASSWORD = 0x102c, - ATTR_OS_VERSION = 0x102d, - ATTR_POWER_LEVEL = 0x102f, - ATTR_PSK_CURRENT = 0x1030, - ATTR_PSK_MAX = 0x1031, - ATTR_PUBLIC_KEY = 0x1032, - ATTR_RADIO_ENABLE = 0x1033, - ATTR_REBOOT = 0x1034, - ATTR_REGISTRAR_CURRENT = 0x1035, - ATTR_REGISTRAR_ESTABLISHED = 0x1036, - ATTR_REGISTRAR_LIST = 0x1037, - ATTR_REGISTRAR_MAX = 0x1038, - ATTR_REGISTRAR_NONCE = 0x1039, - ATTR_REQUEST_TYPE = 0x103a, - ATTR_RESPONSE_TYPE = 0x103b, - ATTR_RF_BANDS = 0x103c, - ATTR_R_HASH1 = 0x103d, - ATTR_R_HASH2 = 0x103e, - ATTR_R_SNONCE1 = 0x103f, - ATTR_R_SNONCE2 = 0x1040, - ATTR_SELECTED_REGISTRAR = 0x1041, - ATTR_SERIAL_NUMBER = 0x1042, - ATTR_WPS_STATE = 0x1044, - ATTR_SSID = 0x1045, - ATTR_TOTAL_NETWORKS = 0x1046, - ATTR_UUID_E = 0x1047, - ATTR_UUID_R = 0x1048, - ATTR_VENDOR_EXT = 0x1049, - ATTR_VERSION = 0x104a, - ATTR_X509_CERT_REQ = 0x104b, - ATTR_X509_CERT = 0x104c, - ATTR_EAP_IDENTITY = 0x104d, - ATTR_MSG_COUNTER = 0x104e, - ATTR_PUBKEY_HASH = 0x104f, - ATTR_REKEY_KEY = 0x1050, - ATTR_KEY_LIFETIME = 0x1051, - ATTR_PERMITTED_CFG_METHODS = 0x1052, - ATTR_SELECTED_REGISTRAR_CONFIG_METHODS = 0x1053, - ATTR_PRIMARY_DEV_TYPE = 0x1054, - ATTR_SECONDARY_DEV_TYPE_LIST = 0x1055, - ATTR_PORTABLE_DEV = 0x1056, - ATTR_AP_SETUP_LOCKED = 0x1057, - ATTR_APPLICATION_EXT = 0x1058, - ATTR_EAP_TYPE = 0x1059, - ATTR_IV = 0x1060, - ATTR_KEY_PROVIDED_AUTO = 0x1061, - ATTR_802_1X_ENABLED = 0x1062, - ATTR_APPSESSIONKEY = 0x1063, - ATTR_WEPTRANSMITKEY = 0x1064, - ATTR_REQUESTED_DEV_TYPE = 0x106a, - ATTR_EXTENSIBILITY_TEST = 0x10fa /* _NOT_ defined in the spec */ -}WPS_ATTRIBUTE, *PWPS_ATTRIBUTE; - -#define WPS_PRI_DEV_TYPE_CATEGORY_UNKNOWN 0x0000 -#define WPS_PRI_DEV_TYPE_CATEGORY_PC 0x0001 -#define WPS_PRI_DEV_TYPE_CATEGORY_INPUT_DEVICE 0x0002 -#define WPS_PRI_DEV_TYPE_CATEGORY_PRINTERS 0x0003 -#define WPS_PRI_DEV_TYPE_CATEGORY_CAMERA 0x0004 -#define WPS_PRI_DEV_TYPE_CATEGORY_STORAGE 0x0005 -#define WPS_PRI_DEV_TYPE_CATEGORY_NETWORK_INFRA 0x0006 -#define WPS_PRI_DEV_TYPE_CATEGORY_DISPLAY 0x0007 -#define WPS_PRI_DEV_TYPE_CATEGORY_MULTIMEDIA 0x0008 -#define WPS_PRI_DEV_TYPE_CATEGORY_GAMING 0x0009 -#define WPS_PRI_DEV_TYPE_CATEGORY_TELEPHONE 0x000A -#define WPS_PRI_DEV_TYPE_CATEGORY_AUDIO 0x000B - -#define WPS_PRI_DEV_TYPE_CATEGORY_OTHERS 0x00FF - -#define WPS_PRI_DEV_TYPE_SUB_CATEGORY_NO_SUB 0x0000 - -static u1Byte WPS_NO_SUB_CAT_OUI[4] = {0x00, 0x50, 0xF2, 0x00}; - -#define WPS_HANDSHAKE_TIMEOUT_SEC 120 -#endif // #ifndef __INC_WPS_DEF_H diff --git a/network/wlan/WDI/COMMON/Wapi.h b/network/wlan/WDI/COMMON/Wapi.h deleted file mode 100644 index bf45131d..00000000 --- a/network/wlan/WDI/COMMON/Wapi.h +++ /dev/null @@ -1,478 +0,0 @@ -#ifndef __INC_WAPI_H -#define __INC_WAPI_H - - //add by ylb for WAPI IHV Support 20111114 -#define DOT11_AUTH_ALGO_WAPI_PSK DOT11_AUTH_ALGO_IHV_START + 0x00000010L -#define DOT11_AUTH_ALGO_WAPI_CERTIFICATE DOT11_AUTH_ALGO_IHV_START + 0x00000011L -#define DOT11_CIPHER_ALGO_WAPI_SMS4 DOT11_CIPHER_ALGO_IHV_START + 0x00000010L - -#define WAPI_END NULL -typedef enum _RT_WAPI_CALLBACK_FUNC_DEF -{ - //One Param - WAPI_ENABLEWAPISUPPORT=0, - WAPI_INIT=1, - WAPI_RETURNALLCAMENTRY=2, - WAPI_RETURNALLSTAINFO=3, - WAPI_FREEALLSTAINFO=4, - WAPI_CONSTRUCTBEACON=5, - //Two Param - WAPI_CONSTRUCTASSOCIATEREQ=6, - WAPI_CONSTRUCTPROBERSP=7, - WAPI_ENABLEHWSECCONFIG=8, - WAPI_MLMEONASSOCOK=9, - WAPI_PRETRANSMITTCB=10, - WAPI_PROCESSRECEIVEDPACKET=11, - WAPI_DROPFORRXREORDER=12, - WAPI_DROPFORSECKEYABSENT= 13, - WAPI_RETURNONESTAINFO=14, - WAPI_RETURNONESTACAMENTRY=15, - WAPI_SECSWSMS4ENCRYPTION= 16, - WAPI_SECSWSMS4DECRYPTION=17, - //Three Param - WAPI_SECHEADERFILLIV = 18, - WAPI_SECISWAIPACKET = 19, - WAPI_SETAUTHENCRYPTSTATE = 20, - //four Param - WAPI_SETCAMENTRY = 21, - - WAPI_MAX =100, -}RT_WAPI_FUNC_E; - - -#if (WAPI_SUPPORT == 1) -#define WAPI_MAXARGS 3 -#define WAPI_QUERY 0 -#define WAPI_SET 1 -typedef enum _RT_WAPI_QUERYSET_VARIABLE -{ - WAPI_VAR_WAPISUPPORT, - WAPI_VAR_WAPIENABLE, - WAPI_VAR_WAPIIHVSUPPORT, - WAPI_VAR_ISCAMUSED, - WAPI_VAR_FIRSTAUTHENTIATEINPROGRESS, - WAPI_VAR_NOTSETENCMACHEADER, - WAPI_VAR_WAPIPSK, - - WAPI_VAR_MAX =255, -}RT_WAPI_QUERYSET_VARIABLE; - -typedef enum _WAPI_REQUEST_TYPE -{ - WAPI_REQUEST_QUERY, - WAPI_REQUEST_SET, - WAPI_REQUEST_METHOD, -} WAPI_REQUEST_TYPE, *PWAPI_REQUEST_TYPE; - - -typedef union _WAPI_REQUEST_DATA -{ - struct _WAPI_QUERY_INFO - { - ULONG Oid; - ULONG BytesWritten; - ULONG BytesNeeded; - ULONG InformationBufferLength; - UCHAR InformationBuffer[1]; - } WAPI_QUERY_INFO; - - struct _WAPI_SET_INFO - { - ULONG Oid; - ULONG BytesRead; - ULONG BytesNeeded; - ULONG InformationBufferLength; - UCHAR InformationBuffer[1]; - } WAPI_SET_INFO; - - struct _WAPI_METHOD_INFO - { - ULONG Oid; - ULONG BytesWritten; - ULONG BytesNeeded; - ULONG BytesRead; - ULONG InputBufferLength; - ULONG InformationBufferLength; - UCHAR InformationBuffer[1]; - } WAPI_METHOD_INFO; - -} WAPI_REQUEST_DATA, *PWAPI_REQUEST_DATA; - - -typedef struct _WAPI_REQUEST -{ - ULONG wapiRequestLen; // length of entire structure - UCHAR wapiRequestOUI[4]; // vendor specific OUI value - WAPI_REQUEST_TYPE wapiRequestType; - WAPI_REQUEST_DATA wapiRequestData; -} WAPI_REQUEST, *PWAPI_REQUEST; - - - //add by ylb for WAPI IHV Support 20111114 -#define DOT11_AUTH_ALGO_WAPI_PSK DOT11_AUTH_ALGO_IHV_START + 0x00000010L -#define DOT11_AUTH_ALGO_WAPI_CERTIFICATE DOT11_AUTH_ALGO_IHV_START + 0x00000011L -#define DOT11_CIPHER_ALGO_WAPI_SMS4 DOT11_CIPHER_ALGO_IHV_START + 0x00000010L - - -#define WAPI_LITTLE_ENDIAN -#define ENCRYPT 0 -#define DECRYPT 1 -typedef unsigned char muint8; -typedef unsigned short muint16; -typedef unsigned int muint32; - -static const muint8 Sbox_WAPI[256] = { -0xd6,0x90,0xe9,0xfe,0xcc,0xe1,0x3d,0xb7,0x16,0xb6,0x14,0xc2,0x28,0xfb,0x2c,0x05, -0x2b,0x67,0x9a,0x76,0x2a,0xbe,0x04,0xc3,0xaa,0x44,0x13,0x26,0x49,0x86,0x06,0x99, -0x9c,0x42,0x50,0xf4,0x91,0xef,0x98,0x7a,0x33,0x54,0x0b,0x43,0xed,0xcf,0xac,0x62, -0xe4,0xb3,0x1c,0xa9,0xc9,0x08,0xe8,0x95,0x80,0xdf,0x94,0xfa,0x75,0x8f,0x3f,0xa6, -0x47,0x07,0xa7,0xfc,0xf3,0x73,0x17,0xba,0x83,0x59,0x3c,0x19,0xe6,0x85,0x4f,0xa8, -0x68,0x6b,0x81,0xb2,0x71,0x64,0xda,0x8b,0xf8,0xeb,0x0f,0x4b,0x70,0x56,0x9d,0x35, -0x1e,0x24,0x0e,0x5e,0x63,0x58,0xd1,0xa2,0x25,0x22,0x7c,0x3b,0x01,0x21,0x78,0x87, -0xd4,0x00,0x46,0x57,0x9f,0xd3,0x27,0x52,0x4c,0x36,0x02,0xe7,0xa0,0xc4,0xc8,0x9e, -0xea,0xbf,0x8a,0xd2,0x40,0xc7,0x38,0xb5,0xa3,0xf7,0xf2,0xce,0xf9,0x61,0x15,0xa1, -0xe0,0xae,0x5d,0xa4,0x9b,0x34,0x1a,0x55,0xad,0x93,0x32,0x30,0xf5,0x8c,0xb1,0xe3, -0x1d,0xf6,0xe2,0x2e,0x82,0x66,0xca,0x60,0xc0,0x29,0x23,0xab,0x0d,0x53,0x4e,0x6f, -0xd5,0xdb,0x37,0x45,0xde,0xfd,0x8e,0x2f,0x03,0xff,0x6a,0x72,0x6d,0x6c,0x5b,0x51, -0x8d,0x1b,0xaf,0x92,0xbb,0xdd,0xbc,0x7f,0x11,0xd9,0x5c,0x41,0x1f,0x10,0x5a,0xd8, -0x0a,0xc1,0x31,0x88,0xa5,0xcd,0x7b,0xbd,0x2d,0x74,0xd0,0x12,0xb8,0xe5,0xb4,0xb0, -0x89,0x69,0x97,0x4a,0x0c,0x96,0x77,0x7e,0x65,0xb9,0xf1,0x09,0xc5,0x6e,0xc6,0x84, -0x18,0xf0,0x7d,0xec,0x3a,0xdc,0x4d,0x20,0x79,0xee,0x5f,0x3e,0xd7,0xcb,0x39,0x48 -}; - -static const muint32 CK[32] = { - 0x00070e15, 0x1c232a31, 0x383f464d, 0x545b6269, - 0x70777e85, 0x8c939aa1, 0xa8afb6bd, 0xc4cbd2d9, - 0xe0e7eef5, 0xfc030a11, 0x181f262d, 0x343b4249, - 0x50575e65, 0x6c737a81, 0x888f969d, 0xa4abb2b9, - 0xc0c7ced5, 0xdce3eaf1, 0xf8ff060d, 0x141b2229, - 0x30373e45, 0x4c535a61, 0x686f767d, 0x848b9299, - 0xa0a7aeb5, 0xbcc3cad1, 0xd8dfe6ed, 0xf4fb0209, - 0x10171e25, 0x2c333a41, 0x484f565d, 0x646b7279 }; - -#define Rotl(_x, _y) (((_x) << (_y)) | ((_x) >> (32 - (_y)))) - -#define ByteSub(_A) (Sbox_WAPI[(_A) >> 24 & 0xFF] << 24 ^ \ - Sbox_WAPI[(_A) >> 16 & 0xFF] << 16 ^ \ - Sbox_WAPI[(_A) >> 8 & 0xFF] << 8 ^ \ - Sbox_WAPI[(_A) & 0xFF]) - -#define L1(_B) ((_B) ^ Rotl(_B, 2) ^ Rotl(_B, 10) ^ Rotl(_B, 18) ^ Rotl(_B, 24)) -#define L2(_B) ((_B) ^ Rotl(_B, 13) ^ Rotl(_B, 23)) - - -/*--------------------------------------------------------------------------- -WAPI Related OID ------------------------------------------------------------------------------*/ -#define OID_RT_WAPI_GET_INFO 0xFFEDC201 -#define OID_RT_WAPI_SET_KEY 0xFFEDC202 -#define OID_RT_WAPI_GET_PN 0xFFEDC203 -#define OID_RT_WAPI_RECEIVE_PACKET 0xFFEDC204 -#define OID_RT_WAPI_SET_DESTNATION_ADDRESS 0xFFEDC205 -#define OID_RT_WAPI_SEND_WAI_PACKET 0xFFEDC206 -#define OID_WAPI_ASUE_CREATE_THREAD 0xFFEDC207 -#define OID_WAPI_ASUE_SET_MUTICAST_PN 0xFFEDC208 -#define OID_RT_WAPI_SUPPORT 0xFFEDC209 -#define OID_RT_WAPI_AE_START 0xFFEDC20A -#define OID_RT_WAPI_IHV_SUPPORT 0xFFEDC20B //For WAPI IHV service support add by ylb 20111114 -#define OID_RT_WAPI_ENABLE 0xFFEDC20C //For WAPI Enbale. add by YJ, 20121112 - -#define WAPI_MAX_BKID_NUM 64 -#define WAPI_MAX_RECEIVE_NUM 128 -#define WAPI_MAX_OPTION_NUM 64 -#define WAPI_CAM_ENTRY_NUM 14 // 28/2=14 - -// -// 2011/01/11 MH Add for WAPI callback function table. -// -typedef struct tag_Wapi_Handler_Def -{ - //char *name; /* Wapi function string */ - //char *desc; /* Description */ - //char *usage; /* Usage of the command */ - //int directory; /* Directory */ - INT32 wapi_func_name; /* Use enum to define the function name. */ - RT_STATUS (*wapi_func1) - ( IN PADAPTER pAdapter); - RT_STATUS (*wapi_func2) - ( IN PADAPTER pAdapter, - IN PVOID pWapiParam); - RT_STATUS (*wapi_func3) - ( IN PADAPTER pAdapter, - IN PVOID pWapiParam1, - IN PVOID pWapiParam2); - RT_STATUS (*wapi_func4) - ( IN PADAPTER pAdapter, - IN PVOID pWapiParam1, - IN PVOID pWapiParam2, - IN PVOID pWapiParam3); - /* WAPI function pointer */ -}WAPI_T; - -// 2011/01/12 MH Define All the WAPI functio from the entry point -// typedef enum _RT_WAPI_CALLBACK_FUNC_DEF -// { -// //One Param -// WAPI_ENABLEWAPISUPPORT=0, -// WAPI_INIT=1, -// WAPI_RETURNALLCAMENTRY=2, -// WAPI_RETURNALLSTAINFO=3, -// WAPI_FREEALLSTAINFO=4, -// WAPI_CONSTRUCTBEACON=5, -// //Two Param -// WAPI_CONSTRUCTASSOCIATEREQ=6, -// WAPI_CONSTRUCTPROBERSP=7, -// WAPI_ENABLEHWSECCONFIG=8, -// WAPI_MLMEONASSOCOK=9, -// WAPI_PRETRANSMITTCB=10, -// WAPI_PROCESSRECEIVEDPACKET=11, -// WAPI_DROPFORRXREORDER=12, -// WAPI_DROPFORSECKEYABSENT= 13, -// WAPI_RETURNONESTAINFO=14, -// WAPI_RETURNONESTACAMENTRY=15, -// WAPI_SECSWSMS4ENCRYPTION= 16, -// WAPI_SECSWSMS4DECRYPTION=17, -// //Three Param -// WAPI_SECHEADERFILLIV = 18, -// WAPI_SECISWAIPACKET = 19, -// WAPI_SETAUTHENCRYPTSTATE = 20, -// //four Param -// WAPI_SETCAMENTRY = 21, -// -// WAPI_MAX =100, -// }RT_WAPI_FUNC_E; - - -typedef struct _RT_WAPI_BKID -{ - RT_LIST_ENTRY list; - u1Byte bkid[16]; -}RT_WAPI_BKID,*PRT_WAPI_BKID; - -typedef struct _RT_WAPI_KEY -{ - u1Byte dataKey[16]; - u1Byte micKey[16]; - u1Byte keyId; - BOOLEAN bSet; - BOOLEAN bTxEnable; - - //For recording the write-cam idx. - u1Byte CamIdx; -}RT_WAPI_KEY,*PRT_WAPI_KEY; - -typedef struct _RT_WAPI_RECEIVE -{ - RT_LIST_ENTRY list; - BOOLEAN bAuthenticator; - u1Byte recvBuff[1500]; - u2Byte recvBuffLength; - u1Byte destAddr[6]; -}RT_WAPI_RECEIVE,*PRT_WAPI_RECEIVE; - -typedef struct _RT_WAPI_OPTION -{ - RT_LIST_ENTRY list; - u1Byte option; - u1Byte macAddr[6]; -}RT_WAPI_OPTION,*PRT_WAPI_OPTION; - -typedef enum _RT_WAPI_AE_OPTION -{ - WAPI_AE_NONE=0, - WAPI_AE_RECV_WAI_PACKET=1, - WAPI_AE_UPDATE_BK=2, - WAPI_AE_UPDATE_USK=3, - WAPI_AE_UPDATE_MSK=4, - WAPI_AE_FIRST_AUTHENTICATOR=5, - WAPI_AE_DISCONNECT=6 -}RT_WAPI_AE_OPTION; - -typedef enum _RT_WAPI_ASUE_OPTION -{ - WAPI_ASUE_NONE=0, - WAPI_ASUE_RECV_WAI_PACKET=1, - WAPI_ASUE_UPDATE_BK=2, - WAPI_ASUE_UPDATE_USK=3, - WAPI_ASUE_DISCONNECT=4 -}RT_WAPI_ASUE_OPTION; - -typedef enum _RT_WAPI_PACKET_TYPE -{ - WAPI_NONE = 0, - WAPI_PREAUTHENTICATE=1, - WAPI_STAKEY_REQUEST=2, - WAPI_AUTHENTICATE_ACTIVE=3, - WAPI_ACCESS_AUTHENTICATE_REQUEST=4, - WAPI_ACCESS_AUTHENTICATE_RESPONSE=5, - WAPI_CERTIFICATE_AUTHENTICATE_REQUEST=6, - WAPI_CERTIFICATE_AUTHENTICATE_RESPONSE=7, - WAPI_USK_REQUEST=8, - WAPI_USK_RESPONSE=9, - WAPI_USK_CONFIRM=10, - WAPI_MSK_NOTIFICATION=11, - WAPI_MSK_RESPONSE=12 -}RT_WAPI_PACKET_TYPE; - -typedef struct _RT_WAPI_STA_INFO -{ - RT_LIST_ENTRY list; - u1Byte PeerMacAddr[6]; - RT_WAPI_KEY wapiUsk; - RT_WAPI_KEY wapiUskUpdate; - RT_WAPI_KEY wapiMsk; - RT_WAPI_KEY wapiMskUpdate; - u1Byte lastRxUnicastPN[16]; - u1Byte lastTxUnicastPN[16]; - u1Byte lastRxMulticastPN[16]; - u1Byte lastRxUnicastPNBEQueue[16]; - u1Byte lastRxUnicastPNBKQueue[16]; - u1Byte lastRxUnicastPNVIQueue[16]; - u1Byte lastRxUnicastPNVOQueue[16]; - BOOLEAN bSetkeyOk; - BOOLEAN bAuthenticateInProgress; - BOOLEAN bAuthenticatorInUpdata; - BOOLEAN bAESetkeyOk; -}RT_WAPI_STA_INFO,*PRT_WAPI_STA_INFO; - -//Added for HW wapi en/decryption -typedef struct _RT_WAPI_CAM_ENTRY{ - //RT_LIST_ENTRY list; - u1Byte IsUsed; - u1Byte entry_idx;//for cam entry - u1Byte keyidx; // 0 or 1,new or old key - u1Byte PeerMacAddr[6]; - u1Byte type; //should be 110,wapi -}RT_WAPI_CAM_ENTRY,*PRT_WAPI_CAM_ENTRY; - -typedef struct _RT_WAPI_T -{ -//WAPI IE - u1Byte assoReqWapiIE[256]; - u1Byte assoReqWapiIELength; - u1Byte assoRspWapiIE[256]; - u1Byte assoRspWapiIELength; - u1Byte sendbeaconWapiIE[256]; - u1Byte sendbeaconWapiIELength; -//BKID - RT_WAPI_BKID wapiBKID[WAPI_MAX_BKID_NUM]; - RT_LIST_ENTRY wapiBKIDIdleList; - RT_LIST_ENTRY wapiBKIDStoreList; -//Key for Tx Multicast/Broadcast - RT_WAPI_KEY wapiTxMsk; -// RT_WAPI_KEY wapiTxMskUpdate; - -//Option - RT_WAPI_OPTION wapiAEOption[WAPI_MAX_OPTION_NUM]; - RT_LIST_ENTRY wapiAEOptionIdleList; - RT_LIST_ENTRY wapiAEOptionUsedList; - RT_WAPI_OPTION wapiASUEOption[WAPI_MAX_OPTION_NUM]; - RT_LIST_ENTRY wapiASUEOptionIdleList; - RT_LIST_ENTRY wapiASUEOptionUsedList; -//Receive Packet - RT_WAPI_RECEIVE wapiRecvPacket[WAPI_MAX_RECEIVE_NUM]; - RT_LIST_ENTRY wapiRxIdleList; - RT_LIST_ENTRY wapiRxBusyList; - u1Byte wapiDestMacAddr[6]; - BOOLEAN bAuthenticator; -//sec related - u1Byte lastTxMulticastPN[16]; - RT_WAPI_STA_INFO wapiSta[WAPI_MAX_OPTION_NUM]; - RT_LIST_ENTRY wapiSTAIdleList; - RT_LIST_ENTRY wapiSTAUsedList; -// - BOOLEAN bWapiEnable; - BOOLEAN bUpdateUsk; - BOOLEAN bUpdateMsk; -//store WAPI IE - u1Byte wapiIE[256]; - u1Byte wapiIELength; - BOOLEAN bWapiNotSetEncMacHeader; - BOOLEAN bWapiPSK; - BOOLEAN bFirstAuthentiateInProgress; -//last sequece number for wai packet - u2Byte wapiSeqnumAndFragNum; - -//For HW wapi - RT_WAPI_CAM_ENTRY wapiCamEntry[WAPI_CAM_ENTRY_NUM]; - //RT_LIST_ENTRY wapiCamIdleList; - //RT_LIST_ENTRY wapiCamUsedList; - -// For WAPI IHV Support - u1Byte bIsWapiIHVSupport; - -}RT_WAPI_T,*PRT_WAPI_T; - - -typedef struct _WLAN_HEADER_WAPI_EXTENSION -{ - u1Byte KeyIdx; - u1Byte Reserved; - u1Byte PN[16]; - -} WLAN_HEADER_WAPI_EXTENSION, *PWLAN_HEADER_WAPI_EXTENSION; - -NDIS_STATUS -WAPI_EventQuerySetInformation( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - -void -WAPI_OptionHandler( - PADAPTER Adapter, - pu1Byte DestAddr, - BOOLEAN bUpdateBK, - BOOLEAN bUpdateUSK, - BOOLEAN bUpdateMSK, - BOOLEAN bAERecvPacket, - BOOLEAN bASUERecvPacket, - BOOLEAN bDisconnect -); - -RT_STATUS -WAPI_SecFuncHandler( - IN UINT32 WapiFunc, - IN PVOID pWapiParam, - ... -); - -RT_STATUS -WAPI_OidHandler( - IN PADAPTER pAdapter, - IN u1Byte PlatformFlag, - IN u1Byte SetQuery, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWrittenOrRead, - OUT PULONG BytesNeeded - ); - -u1Byte -WAPI_QuerySetVariable( - IN PADAPTER Adapter, - IN u1Byte QuerySet, - IN u1Byte VariableName, - IN u1Byte VariableParam - ); - -#else -#define WAPI_OptionHandler(Adapter, DestAddr, bUpdateBK, bUpdateUSK, bUpdateMSK, bAERecvPacket, bASUERecvPacket, bDisconnect) -#define WAPI_OidHandler(pAdapter,PlatformFlag,SetQuery,Oid,InformationBuffer,InformationBufferLength,BytesWrittenOrRead,BytesNeeded) NDIS_STATUS_NOT_RECOGNIZED -#define WAPI_EventQuerySetInformation(pAdapter,Oid,InformationBuffer,InputBufferLength,OutputBufferLength,MethodId,BytesWritten,BytesRead,BytesNeeded) NDIS_STATUS_INVALID_OID -#define WAPI_QuerySetVariable(pAdapter, QuerySet,VariableName,VariableParam) 0 - - -__inline RT_STATUS WAPI_SecFuncHandler(UINT32 WapiFunc, PVOID pWapiParam,...){ return RT_STATUS_NOT_SUPPORT;} - -#endif // #ifndef __INC_SUPPLICANT_H -#endif - diff --git a/network/wlan/WDI/COMMON/Widi.h b/network/wlan/WDI/COMMON/Widi.h deleted file mode 100644 index 7554470b..00000000 --- a/network/wlan/WDI/COMMON/Widi.h +++ /dev/null @@ -1,236 +0,0 @@ -#ifndef __INC_WIDI_11_H -#define __INC_WIDI_11_H - -#if (P2P_SUPPORT != 1) -// Note: -// WiFi Display depends on P2P function. -#undef WIDI_SUPPORT -#endif - -#if (WIDI_SUPPORT == 1) - -RT_STATUS -WFD_AppendProbeReqIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendAssocReqIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendAssocRspIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendProbeRspIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu, - IN PRT_RFD pRfdProbeReq, - IN POCTET_STRING posProbeReq - ); - -RT_STATUS -WFD_AppendTunneledProbeRspIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pGoNegReqIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pGoNegRspIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pGoNegConfirmIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pInvitationReqIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pInvitationRspIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pProvDiscoveryReqIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendP2pProvDiscoveryRspIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendBeaconIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -RT_STATUS -WFD_AppendTDLSSetupIEs( - IN PADAPTER pAdapter, - IN u4Byte maxBufLen, - OUT POCTET_STRING posMsdu - ); - -VOID -WFD_ScanListClear( - IN PADAPTER pAdapter - ); - -RT_STATUS -WFD_AllocateWfdInfo( - IN PADAPTER pAdapter - ); - -VOID -WFD_FreeWfdInfo( - IN PADAPTER pAdapter - ); - -RT_STATUS -WFD_Query_Reqeust( - IN PADAPTER pAdapter, - IN PVOID informationBuffer, - IN ULONG inputBufferLength, - OUT PULONG pBytesWritten, - OUT PULONG pBytesNeeded - ); - -RT_STATUS -WFD_Reqeust( - IN PADAPTER pAdapter, - IN PVOID informationBuffer, - IN u4Byte inputBufferLength, - IN u4Byte outputBufferLength, - OUT pu4Byte pBytesWritten, - OUT pu4Byte pBytesRead, - OUT pu4Byte pBytesNeeded - ); - -RT_STATUS -WFD_OnBeacon( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -WFD_OnProbeRsp( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -WFD_OnAssocReqAccept( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -WFD_OnAssocOK( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -VOID -WFD_RemoveAssocClient( - IN PADAPTER pAdapter, - IN pu1Byte pDeviceAddr - ); - -RT_STATUS -WFD_OnP2PActionFrame( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -RT_STATUS -WFD_OnTunneledMgntFrame( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu, - IN u4Byte ieOffset - ); - -RT_STATUS -WFD_GetInfoOnIEs( - IN PADAPTER pAdapter, - IN u4Byte InfoID, - IN const POCTET_STRING pOsIEs, - OUT pu1Byte pOutputBuffer, - IN OUT pu4Byte pOutputBufferLen - ); -#else // #if (WIDI_SUPPORT != 1) - -#define WFD_AppendProbeReqIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendAssocReqIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendAssocRspIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendProbeRspIEs(_pAdapter, _maxBufLen, _posMsdu, pRfdProbeReq, posProbeReq) RT_STATUS_SUCCESS -#define WFD_AppendTunneledProbeRspIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pGoNegReqIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pGoNegRspIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pGoNegConfirmIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pInvitationReqIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pInvitationRspIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pProvDiscoveryReqIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendP2pProvDiscoveryRspIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendBeaconIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_AppendTDLSSetupIEs(_pAdapter, _maxBufLen, _posMsdu) RT_STATUS_SUCCESS -#define WFD_ScanListClear(_pAdapter) -#define WFD_AllocateWfdInfo(_pAdapter) RT_STATUS_SUCCESS -#define WFD_FreeWfdInfo(_pAdapter) -#define WFD_Query_Reqeust(_pAdapter, _informationBuffer, _inputBufferLength, _pBytesWritten, _pBytesNeeded) RT_STATUS_NOT_SUPPORT -#define WFD_Reqeust(_pAdapter, _informationBuffer, _inputBufferLength, _outputBufferLength, \ - _pBytesWritten, _pBytesRead, _pBytesNeeded) \ - RT_STATUS_NOT_SUPPORT -#define WFD_OnBeacon(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define WFD_OnProbeRsp(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define WFD_OnAssocReqAccept(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define WFD_OnAssocOK(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define WFD_OnP2PActionFrame(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define WFD_OnTunneledMgntFrame(_pAdapter, _pRfd, _posMpdu, _ieOffset) RT_STATUS_SUCCESS -#define WFD_RemoveAssocClient(_pAdapter, _pDeviceAddr) -#define WFD_GetInfoOnIEs(_pAdapter, _InfoID, _pOsIEs, _pOutputBuffer, _pOutputBufferLen) RT_STATUS_NOT_SUPPORT -#endif // #if (WIDI_SUPPORT == 1) -#endif // #ifndef __INC_WIDI_11_H diff --git a/network/wlan/WDI/COMMON/common.vcxproj b/network/wlan/WDI/COMMON/common.vcxproj deleted file mode 100644 index e86697c2..00000000 --- a/network/wlan/WDI/COMMON/common.vcxproj +++ /dev/null @@ -1,523 +0,0 @@ - - - - - Win10 Debug - Arm - - - Win10 Debug - Win32 - - - Win10 Debug - x64 - - - Win10 Release - Arm - - - Win10 Release - Win32 - - - Win10 Release - x64 - - - - WindowsKernelModeDriver10.0 - StaticLibrary - KMDF - $(ProjectName) - Win10 Debug - - - - 1.0 - $(Configuration.Replace(' ','')) - $(BUILD_ALT_DIR)\$(Platform)\ - $(BUILD_ALT_DIR)\ - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\ - - - - - - {956B060D-1055-4584-9CF4-9FE14C428545} - - - Windows10 - True - Universal - - - - - Windows10 - False - Universal - - - - - True - Universal - - - Win8 - True - - - Windows10 - False - Universal - - - Windows10 - True - Universal - - - Windows10 - False - Universal - - - DbgengKernelDebugger - DbgengRemoteDebugger - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - - - $(VC_ReferencesPath_x86); - $(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86); - *.cdf;*.cache;*.obj;*.ilk;*.ipdb;*.iobj;*.resources;*.tlb;*.tli;*.tlh;*.tmp;*.rsp;*.pgc;*.pgd;*.meta;*.tlog;*.manifest;*.res;*.pch;*.exp;*.idb;*.rep;*.xdc;*.pdb;*_manifest.rc;*.bsc;*.sbr;*.xml;*.metagen;*.bi - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencePath_x86); - $(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencePath_Arm); - $(VC_LibraryPath_Arm);$(WindowsSDK_LibraryPath_Arm);$(NETFXKitsDir)Lib\um\arm - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_arm); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencePath_Arm); - $(VC_LibraryPath_Arm);$(WindowsSDK_LibraryPath_Arm);$(NETFXKitsDir)Lib\um\arm - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_arm); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x64); - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x64); - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64); - - - - _X86_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - Disabled - Default - false - Cdecl - Default - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\; - Neither - false - false - false - true - - - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - true - false - false - false - false - false - false - false - false - Prompt - true - - - - - $(OutDir)$(TargetName)$(TargetExt) - true - - - false - - - - - true - Disabled - Default - false - Neither - false - false - false - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\; - _X86_;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - true - None - - - $(OutDir)$(TargetName)$(TargetExt) - - - true - - - false - - - - - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\; - None - true - Disabled - Default - false - Neither - false - false - false - _ARM_;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - true - - - false - - - - - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\; - - - - - None - - - - - true - Disabled - Default - false - Neither - false - false - false - _ARM_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - true - - - false - - - - - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\; - true - Disabled - Default - false - Neither - false - false - false - _X64_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - - - true - - - false - - - - - true - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\; - true - Disabled - Default - false - Neither - false - false - false - _X64_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - - - $(OutDir)$(TargetName)$(TargetExt) - - - true - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(KIT_SHARED_INC_PATH) - true - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/pool.c b/network/wlan/WDI/COMMON/pool.c deleted file mode 100644 index 3eab9574..00000000 --- a/network/wlan/WDI/COMMON/pool.c +++ /dev/null @@ -1,191 +0,0 @@ -#include "Mp_Precomp.h" - -#include "pool.h" - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- - -// Signature -static const char *pool_sig = "RT_POOL"; - -static -BOOLEAN -pool_OnBoundary( - IN const POOL *pool, - IN const VOID *entry - ) -{ - BOOLEAN bOnBoundary = FALSE; - - do - { - if(pool->end <= (u1Byte *)entry) - break; - - if((u1Byte *)entry < pool->start) - break; - - if(((u1Byte *)entry - pool->start) % pool->entrySize) - break; - - bOnBoundary = TRUE; - - }while(FALSE); - - if(!bOnBoundary) - { - RT_TRACE_F(pool->dbgComp, DBG_WARNING, ("invalid entry: 0x%p\n", entry)); - } - - return bOnBoundary; -} - -static -VOID -pool_DumpListEntry( - IN const POOL *pool, - IN const RT_LIST_ENTRY *pEntry - ) -{ - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("---\n")); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("entry: %p\n", pEntry)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, (" flink: %p\n", pEntry->Flink)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, (" blink: %p\n", pEntry->Blink)); -} - -static -VOID -pool_DumpFreeList( - IN const POOL *pool - ) -{ - RT_LIST_ENTRY *pEntry = NULL; - - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("Head:\n")); - pool_DumpListEntry(pool, &pool->freeList); - - for(pEntry = RTGetHeadList(&pool->freeList); - pEntry != &pool->freeList; - pEntry = RTNextEntryList(pEntry) - ) - { - pool_DumpListEntry(pool, pEntry); - } -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -VOID -Pool_Init( - IN POOL *pool, - IN char *name, - IN u4Byte buflen, - IN VOID *buf, - IN u4Byte entrySize, - IN u8Byte dbgComp, - IN u4Byte dbgLevel - ) -{ - const u1Byte *pos = (u1Byte *)buf, *end = (u1Byte *)buf + buflen; - - RT_ASSERT(sizeof(RT_LIST_ENTRY) < entrySize, ("Invalid size: %u\n", entrySize)); - - pool->sig = pool_sig; - pool->name = name; - pool->start = pos; - pool->end = end; - pool->entrySize = entrySize; - - RTInitializeListHead(&pool->freeList); - pool->freeCount = 0; - - while(pos + entrySize <= end) - { - RTInsertTailListWithCnt(&pool->freeList, (RT_LIST_ENTRY *)pos, &pool->freeCount); - pos += entrySize; - pool->cap++; - } - - pool->cap = pool->freeCount; - pool->lowMark = pool->freeCount; - - pool->dbgComp = dbgComp; - pool->dbgLevel = dbgLevel; - - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("name: %s, cap: %u\n", pool->name, pool->cap)); - - return; -} - -VOID * -Pool_Acquire( - IN POOL *pool - ) -{ - VOID *entry = NULL; - - RT_ASSERT(pool, ("%s(): pool is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(pool_sig == pool->sig, ("%s(): invalid pool\n", __FUNCTION__)); - - if(RTIsListEmpty(&pool->freeList)) return NULL; - - entry = (VOID *)RTRemoveHeadListWithCnt(&pool->freeList, &pool->freeCount); - - if(pool->freeCount < pool->lowMark) - { - pool->lowMark = pool->freeCount; - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("%s: lowMark: %u, cap: %u\n", pool->name, pool->freeCount, pool->cap)); - } - - return entry; -} - -VOID -Pool_Release( - IN POOL *pool, - IN VOID *entry - ) -{ - RT_ASSERT(pool, ("%s(): pool is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(pool_sig == pool->sig, ("%s(): invalid pool\n", __FUNCTION__)); - - RT_ASSERT(entry < (VOID *)pool->end, ("%s(): entry (%p) beyond end (%p)\n", __FUNCTION__, entry, pool->end)); - RT_ASSERT((VOID *)pool->start <= entry, ("%s(): entry (%p) below start (%p)\n", __FUNCTION__, entry, pool->start)); - - if(pool_OnBoundary(pool, entry)) - { - RTInsertTailListWithCnt(&pool->freeList, (RT_LIST_ENTRY *)entry, &pool->freeCount); - } - else - { - Pool_Dump(pool); - } - - return; -} - -VOID -Pool_Dump( - IN const POOL *pool - ) -{ - RT_ASSERT(pool, ("%s(): pool is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(pool_sig == pool->sig, ("%s(): invalid pool\n", __FUNCTION__)); - - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("---\n")); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("name: %s\n", pool->name)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("start addr: %p\n", pool->start)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("end addr: %p\n", pool->end)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("free count: %u\n", pool->freeCount)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("capacity: %u\n", pool->cap)); - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("low mark: %u\n", pool->lowMark)); - - RT_TRACE_F(pool->dbgComp, pool->dbgLevel, ("Free list:\n")); - //pool_DumpFreeList(pool); - - return; -} - diff --git a/network/wlan/WDI/COMMON/pool.h b/network/wlan/WDI/COMMON/pool.h deleted file mode 100644 index 9c61df6d..00000000 --- a/network/wlan/WDI/COMMON/pool.h +++ /dev/null @@ -1,64 +0,0 @@ -//--------------------------------------------------------------------------- -// -// Copyright (c) 2014 Realtek Semiconductor, Inc. All rights reserved. -// -//--------------------------------------------------------------------------- -// Description: -// -// - -#ifndef __INC_POOL_H -#define __INC_POOL_H - - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- -typedef struct _POOL -{ - const char *sig; - const char *name; - const u1Byte *start; - const u1Byte *end; - u4Byte entrySize; - RT_LIST_ENTRY freeList; - u4Byte freeCount; - u4Byte cap; - u4Byte lowMark; - - u8Byte dbgComp; - u4Byte dbgLevel; -}POOL; - -//----------------------------------------------------------------------------- -// Function -//----------------------------------------------------------------------------- - -VOID -Pool_Init( - IN POOL *pool, - IN char *name, - IN u4Byte buflen, - IN VOID *buf, - IN u4Byte entrySize, - IN u8Byte dbgComp, - IN u4Byte dbgLevel - ); - -VOID * -Pool_Acquire( - IN POOL *pool - ); - -VOID -Pool_Release( - IN POOL *pool, - IN VOID *entry - ); - -VOID -Pool_Dump( - IN const POOL *pool - ); - -#endif // #ifndef __INC_POOL_H \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/sha256.h b/network/wlan/WDI/COMMON/sha256.h deleted file mode 100644 index b4b0013d..00000000 --- a/network/wlan/WDI/COMMON/sha256.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * SHA256 hash implementation and interface functions - * Copyright (c) 2003-2006, Jouni Malinen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Alternatively, this software may be distributed under the terms of BSD - * license. - * - * See README and COPYING for more details. - */ - -#ifndef SHA256_H -#define SHA256_H - -#define SHA256_MAC_LEN 32 - -// debug hpfan -void sha256_vector2(int num_elem, const u8 *addr, const int *len, - u8 *mac); - -void hmac_sha256_vector(const u8 *key, int key_len, int num_elem, - const u8 *addr[], const int *len, u8 *mac); -void hmac_sha256(const u8 *key, int key_len, const u8 *data, - int data_len, u8 *mac); -void sha256_prf(const u8 *key, int key_len, const char *label, - const u8 *data, int data_len, u8 *buf, int buf_len); - - -#endif /* SHA256_H */ diff --git a/network/wlan/WDI/COMMON/sources.props b/network/wlan/WDI/COMMON/sources.props deleted file mode 100644 index bbaffa80..00000000 --- a/network/wlan/WDI/COMMON/sources.props +++ /dev/null @@ -1,18 +0,0 @@ - - - - common - $(TMP_TARGET_DIR) - DRIVER_LIBRARY - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - $(SRC_ROOT)\Header; - $(HAL_INC_DIRS); - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/sources.sample.list b/network/wlan/WDI/COMMON/sources.sample.list deleted file mode 100644 index 80682747..00000000 --- a/network/wlan/WDI/COMMON/sources.sample.list +++ /dev/null @@ -1,72 +0,0 @@ -// -// Command: +(OS, ...) -(OS, ...) [FILE] -// //: Comment at the beginning -// OS: * Ebd6 Ebd7 WinXP Vista Win7 Win8 WinBlue -// +: Add for OS -// -: Remove for OS -// - -+(*) [Debug.c] -+(*) [CustomizedScan.c] -+(*) [HashTable.c] -+(*) [GeneralFunc.c] -+(*) [DriverInterface.c] -+(*) [Transmit.c] -+(*) [Receive.c] -+(*) [MgntGen.c] -+(*) [MgntConstructPacket.c] -+(*) [MgntSendPacket.c] -+(*) [MgntLink.c] -+(*) [Defrag.c] -+(*) [QosGen.c] -+(*) [Protocol802_11.c] -+(*) [Frame_Buf.c] -+(*) [Pool.c] -+(*) [P2P_Synch.c] -+(*) [P2P_Util.c] -+(*) [P2P_AdditionalIe.c] -+(*) [P2P_Attribute.c] -+(*) [P2P_Build.c] -+(*) [P2P_Build_Action.c] -+(*) [P2P_Build_PublicAction.c] -+(*) [P2P_Indication.c] -+(*) [P2P_SendAction.c] -+(*) [P2P_Build_Mgnt.c] -+(*) [P2P_SendMgnt.c] -+(*) [P2P_Parse.c] -+(*) [P2P_Receive.c] -+(*) [P2P_Channel.c] -+(*) [P2P_DevList.c] -+(*) [P2P.c] -+(*) [P2PSvc.c] -+(*) [P2PSvc_Construct.c] -+(*) [P2PSvc_ActionInfo.c] -+(*) [P2PSvc_PD.c] -+(*) [P2PSvc_SD.c] -+(*) [P2PSvc_Object.c] -+(*) [P2PSvc_Utility.c] -+(*) [P2PSvc_ParamSpec.c] -+(*) [P2PSvc_SearchResult.c] -+(*) [Hotspot20.c] -+(*) [MgntEngine.c] -+(*) [MgntActSetParam.c] -+(*) [MgntActQueryParam.c] -+(*) [ApEngine.c] -+(*) [Authenticator.c] -+(*) [HTGen.c] -+(*) [TSGen.c] -+(*) [TransmitDesc.c] -+(*) [BAGen.c] -+(*) [Dot11d.c] -+(*) [DrvLogImp.c] -+(*) [ParserGen.c] -+(*) [RxReorder.c] -+(*) [BssCoexistence.c] -+(*) [WOLPattern.c] -+(*) [DFS.c] -+(*) [WPS.c] -+(*) [ChannelInfo.c] -+(*) [VHTGen.c] -+(*) [MultiPorts.c] -+(*) [MimoPs.c] -+(*) [SecurityGen.c] diff --git a/network/wlan/WDI/COMMON/sources.tpl.sample b/network/wlan/WDI/COMMON/sources.tpl.sample deleted file mode 100644 index f4c46f37..00000000 --- a/network/wlan/WDI/COMMON/sources.tpl.sample +++ /dev/null @@ -1,22 +0,0 @@ - - - - common - $(TMP_TARGET_DIR) - DRIVER_LIBRARY - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - $(SRC_ROOT)\Header; - $(HAL_INC_DIRS); - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/COMMON/sources.tpl.win b/network/wlan/WDI/COMMON/sources.tpl.win deleted file mode 100644 index 7e31cac4..00000000 --- a/network/wlan/WDI/COMMON/sources.tpl.win +++ /dev/null @@ -1,24 +0,0 @@ -TARGETNAME=common -TARGETPATH=. -TARGETTYPE=LIBRARY - -PRECOMPILED_INCLUDE=Mp_Precomp.h -PRECOMPILED_PCH=precomp.pch -PRECOMPILED_OBJ=precomp.obj - -# -# IC dependent directories are defined in -# the environment variable HAL_INC_DIRS. -# -INCLUDES=\ - .; \ - $(SRC_ROOT)\Header; \ - $(HAL_INC_DIRS); \ - $(OMNIPEEK_INC_DIRS); \ - -# -# OS and Bus dependent setting. -# -!include $(SRC_ROOT)\$(PLATFORM_INC) - -SOURCES = diff --git a/network/wlan/WDI/HAL/DIRS.WlanS b/network/wlan/WDI/HAL/DIRS.WlanS deleted file mode 100644 index 09660bac..00000000 --- a/network/wlan/WDI/HAL/DIRS.WlanS +++ /dev/null @@ -1,3 +0,0 @@ -DIRS=\ - EFUSE \ - HALSOURCE diff --git a/network/wlan/WDI/HAL/HAL.mk b/network/wlan/WDI/HAL/HAL.mk deleted file mode 100644 index e1176d3b..00000000 --- a/network/wlan/WDI/HAL/HAL.mk +++ /dev/null @@ -1,143 +0,0 @@ -$(MODULE_NAME)-objs += HAL/HalEEPROM.o -$(MODULE_NAME)-objs += HAL/HalCommon.o -$(MODULE_NAME)-objs += HAL/halDbgCmd.o -$(MODULE_NAME)-objs += HAL/HalCam.o -$(MODULE_NAME)-objs += HAL/HalSIC.o -$(MODULE_NAME)-objs += HAL/HalBT.o -$(MODULE_NAME)-objs += HAL/HalFw.o -$(MODULE_NAME)-objs += HAL/HalPwrSeqCmd.o -$(MODULE_NAME)-objs += HAL/HalPhy.o -$(MODULE_NAME)-objs += HAL/HalDM.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalEfuse.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192SEfuse.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CEfuse.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192DEfuse.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EEfuse.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AEfuse.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/MPT_HelperFunc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/MPT_Main.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/MPT_Phy.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/MPT_Req.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/MPT_RF.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/MPT_Bt.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalBtCoexist.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalBtcCsr1Ant.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalBtcCsr2Ant.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalBtc8723.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalBtc87231Ant.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalBtc87232Ant.o - -ifeq ("$(USE_INTERFACE)", "RT_USB_INTERFACE") -$(MODULE_NAME)-objs += HAL/HalUsb.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CUHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192DUHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8723UHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8723UMPHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EUHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AUHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CUsbTxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CUsbRxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EUsbTxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EUsbRxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AUsbTxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AUsbRxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalUSBLed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AUsbLed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CUsbLed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EUsbLed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CUsbGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EUsbGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AUsbGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CUsbDM.o -endif - -ifeq ("$(USE_INTERFACE)", "RT_PCI_INTERFACE") -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CEHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192DEHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8723EHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EEHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AEHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8723EMPHWImg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CETxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CERxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EETxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EERxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192EETxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192EERxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812ETxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812ERxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalPCIELed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AELed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CELed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EELed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812AELed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CEGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EEGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812EGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192EEGen.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CEIsr.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EEIsr.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812EIsr.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192EEIsr.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CEDM.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EEDM.o -endif - -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CHWImgForWoWLAN.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EHWImgForWoWLAN.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalComTxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalComRxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CTxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CRxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188ETxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188ERxDesc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812Desc.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalComLed.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalComPhyCfg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CPhyCfg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192DPhyCfg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EPhyCfg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812PhyCfg.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CCom.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188ECom.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812Com.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CFirmware.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EFirmware.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812Firmware.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CRf8225.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CPhy8256.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CRf6052.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8192CRf6052_92D.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188ERf6052.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812Rf6052.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8723PwrSeq.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188EPwrSeq.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8812PwrSeq.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8821APwrSeq.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_interface.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_debug.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_HWConfig.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_RTL8192C.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_RTL8192D.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_RTL8188E.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_RegConfig8723A.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8723A_MAC.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8723A_FW.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8723A_RF.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8723A_BB.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalPhyRf.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalPhyRf_8188e.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8188ERateAdaptive.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8188E_MAC.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8188E_RF.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8188E_BB.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8188E_TestChip_MAC.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8188E_TestChip_RF.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8188E_TestChip_BB.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_RegConfig8188E.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/Hal8723AHWImgForWoWLAN.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8812A_MAC.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8812A_RF.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/HalHWImg8812A_BB.o -$(MODULE_NAME)-objs += HAL/HALSOURCE/odm_RegConfig8812A.o diff --git a/network/wlan/WDI/HAL/HALSOURCE/Mp_Precomp.h b/network/wlan/WDI/HAL/HALSOURCE/Mp_Precomp.h deleted file mode 100644 index 4215bf67..00000000 --- a/network/wlan/WDI/HAL/HALSOURCE/Mp_Precomp.h +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/network/wlan/WDI/HAL/HALSOURCE/hal.vcxproj b/network/wlan/WDI/HAL/HALSOURCE/hal.vcxproj deleted file mode 100644 index 7fe68165..00000000 --- a/network/wlan/WDI/HAL/HALSOURCE/hal.vcxproj +++ /dev/null @@ -1,274 +0,0 @@ - - - - - Win10 Debug - Arm - - - Win10 Debug - Win32 - - - Win10 Debug - x64 - - - Win10 Release - Arm - - - Win10 Release - Win32 - - - Win10 Release - x64 - - - WinBlue Debug - Arm - - - Win8 Debug - Arm - - - WinBlue Release - Arm - - - Win8 Release - Arm - - - WinBlue Debug - Win32 - - - Win8 Debug - Win32 - - - Win7 Debug - Win32 - - - Vista Debug - Win32 - - - WinBlue Release - Win32 - - - Win8 Release - Win32 - - - Win7 Release - Win32 - - - Vista Release - Win32 - - - WinBlue Debug - x64 - - - Win8 Debug - x64 - - - Win7 Debug - x64 - - - Vista Debug - x64 - - - WinBlue Release - x64 - - - Win8 Release - x64 - - - Win7 Release - x64 - - - Vista Release - x64 - - - - $(MSBUILD_PLATFORM_TOOLSET) - StaticLibrary - KMDF - - - Win8 Debug - - - - 1.0 - $(Configuration.Replace(' ','')) - $(BUILD_ALT_DIR)\$(Platform)\ - $(BUILD_ALT_DIR)\x86\ - $(IntDir) - - - - - - {316BB9D3-0947-4431-BC09-1C71C7201001} - - - WindowsV6.3 - True - - - Windows10 - True - Mobile - - - Win8 - True - - - WindowsV6.3 - False - - - Windows10 - False - Mobile - - - Win8 - False - - - WindowsV6.3 - True - - - Windows10 - True - - - Win8 - True - - - Win7 - True - - - Vista - True - - - WindowsV6.3 - False - - - Windows10 - False - - - Win8 - False - - - Win7 - False - - - Vista - False - - - WindowsV6.3 - True - - - Windows10 - True - - - Win8 - True - - - Win7 - True - - - Vista - True - - - WindowsV6.3 - False - - - Windows10 - False - - - Win8 - False - - - Win7 - False - - - Vista - False - - - DbgengKernelDebugger - DbgengRemoteDebugger - - - - - - - - - - - - - - - - - - - $(KIT_SHARED_INC_PATH) - true - - - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/HAL/HalADCSampling.h b/network/wlan/WDI/HAL/HalADCSampling.h deleted file mode 100644 index e08088e6..00000000 --- a/network/wlan/WDI/HAL/HalADCSampling.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef __INC_ADCSMP_H -#define __INC_ADCSMP_H - -typedef struct _RT_ADCSMP_STRING{ - pu4Byte Octet; - u4Byte Length; - u4Byte buffer_size; - u4Byte start_pos; -}RT_ADCSMP_STRING, *PRT_ADCSMP_STRING; - - -typedef enum _RT_ADCSMP_TRIG_SEL -{ - ADCSMP_BB_TRIG, - ADCSMP_MAC_TRIG, -}RT_ADCSMP_TRIG_SEL, *PRT_ADCSMP_TRIG_SEL; - - -typedef enum _RT_ADCSMP_TRIG_SIG_SEL -{ - ADCSMP_TRIG_CRCOK, - ADCSMP_TRIG_CRCFAIL, - ADCSMP_TRIG_CCA, - ADCSMP_TRIG_REG, -}RT_ADCSMP_TRIG_SIG_SEL, *PRT_ADCSMP_TRIG_SIG_SEL; - - -typedef enum _RT_ADCSMP_STATE -{ - ADCSMP_STATE_IDLE, - ADCSMP_STATE_SET, - ADCSMP_STATE_QUERY, -}RT_ADCSMP_STATE, *PRT_ADCSMP_STATE; - - -typedef struct _RT_ADCSMP -{ - RT_ADCSMP_STRING ADCSmpBuf; - RT_ADCSMP_STATE ADCSmpState; - RT_ADCSMP_TRIG_SEL ADCSmpTrigSel; - RT_ADCSMP_TRIG_SIG_SEL ADCSmpTrigSigSel; - u1Byte ADCSmpDmaDataSigSel; - u1Byte ADCSmpTriggerTime; - u2Byte ADCSmpPollingTime; -}RT_ADCSMP, *PRT_ADCSMP; - - -VOID -ADCSmpWorkItemCallback( - IN PVOID pContext - ); - - -VOID -ADCSmp_Set( - IN PADAPTER Adapter, - IN RT_ADCSMP_TRIG_SEL TrigSel, - IN RT_ADCSMP_TRIG_SIG_SEL TrigSigSel, - IN u1Byte DmaDataSigSel, - IN u1Byte TriggerTime, - IN u2Byte PollingTime - ); - - -RT_STATUS -ADCSmp_Query( - IN PADAPTER Adapter, - IN ULONG InformationBufferLength, - OUT PVOID InformationBuffer, - OUT PULONG BytesWritten - ); - -VOID -ADCSmp_Stop( - IN PADAPTER Adapter - ); - -VOID -ADCSmp_Init( - PADAPTER Adapter - ); - - -VOID -ADCSmp_DeInit( - PADAPTER Adapter - ); - -VOID -Dump_MAC( - PADAPTER Adapter - ); - -VOID -Dump_BB( - PADAPTER Adapter - ); - -VOID -Dump_RF( - PADAPTER Adapter - ); - -#endif - diff --git a/network/wlan/WDI/HAL/HalCam.h b/network/wlan/WDI/HAL/HalCam.h deleted file mode 100644 index 70069cac..00000000 --- a/network/wlan/WDI/HAL/HalCam.h +++ /dev/null @@ -1,169 +0,0 @@ -#include "Mp_Precomp.h" - - -#define CAM_CONTENT_COUNT 8 -#define CAM_PAIRWISE_KEY_POSITION 4 - -// 0~3 : Default Key -// 4 : Default Port Station Key ( Pairwise key ) -// 5~HALF_CAM_ENTRY - MAX_BT_ASOC_ENTRY_NUM : TDSL -// HALF_CAM_ENTRY ~ TOTAL_CAM_ENTRY-1 : ExtAP( VWifi , XP-ExtAP and Win7/8 ExtAP ) -// CAM_EXTSTA_PAIRWISE_KEY_POSITION : ExtSta key ( Pairwise key ) -#define CAM_TDSL_START_INDEX 5 - -#define CFG_DEFAULT_KEY BIT5 -#define CFG_VALID BIT15 - - -//add for AP HW , CCW - -u1Byte AP_CamAddOneEntry( - PADAPTER Adapter, - u1Byte *pucMacAddr, - u4Byte ulKeyId, - u4Byte ulEncAlg, - u4Byte ulUseDK, - u1Byte *pucKey -); - -u1Byte AP_Setkey( - PADAPTER Adapter, - u1Byte *pucMacAddr, - u4Byte ulKeyId, - u4Byte ulEncAlg, - u4Byte ulUseDK, - u1Byte *pucKey); - - -u4Byte AP_FindFreeEntry( - PADAPTER Adapter, - pu1Byte Macaddr - ); - -void AP_ClearAllKey( - PADAPTER Adapter); - - -void AP_RemoveKey( - PADAPTER Adapter, - PRT_WLAN_STA pSTA); - -//Add for AP enc ,CCW -//====================== -u1Byte CamAddOneEntry( - PADAPTER Adapter, - u1Byte *pucMacAddr, - u4Byte ulKeyId, - u4Byte ulEntryId, - u4Byte ulEncAlg, - u4Byte ulUseDK, - u1Byte *pucKey -); -int CamDeleteOneEntry( - PADAPTER Adapter, - u1Byte *pucMacAddr, - u4Byte ulKeyId -); - -void CAMtest( - PADAPTER Adapter, - u1Byte ucTestItem); - -void test_cam( - PADAPTER Adapter); - -//---------------------------------------- -//Function declartion for internal usage of CAM.c -//---------------------------------------- - -u1Byte CAM_find_usable( - PADAPTER Adapter); - -void CAM_program_entry( - PADAPTER Adapter, - u4Byte iIndex, - u1Byte *pucMacad, - u1Byte *pucKey128, - u2Byte usConfig); - -void CAM_read_entry( - PADAPTER Adapter, - u4Byte iIndex, - u1Byte *pucMacad, - u1Byte *pucKey128, - u2Byte *usConfig); - -void CAM_read_mac_config( - PADAPTER Adapter, - u1Byte ucIndex, - u1Byte *pucMacad, - u2Byte *pusTempConfig); - -void CAM_mark_invalid( - PADAPTER Adapter, - u1Byte ucIndex); - -void CAM_empty_entry( - PADAPTER Adapter, - u1Byte ucIndex); - -void CAM_read_entry( - PADAPTER Adapter, - u4Byte index, - u1Byte *macad, - u1Byte *key128, - u2Byte *config); - -void CAM_debug_print( - u1Byte *pucMac, - u1Byte *pucKey, - u2Byte usConfig); -VOID -CamDumpAll( PADAPTER Adapter); - -VOID -CamDumpAllCallbackWorkItem( - IN PVOID pContext); - -VOID -CamResetAllEntry(PADAPTER Adapter); - - -VOID -AP_CamRestoreAllEntry( - PADAPTER Adapter); - - -VOID -CamRestoreAllEntry(PADAPTER Adapter); - - -void build_cam( - PADAPTER Adapter); - -void loopcam( - PADAPTER Adapter -); -void SingleCam( - PADAPTER Adapter); - -void build_16_cam( - PADAPTER Adapter); - -void BurstTxCAM(void); -//----IF Emily -void CAM_Policy_Verify(void); - - -//vivi added for new cam search flow, 20091028. -u4Byte Sta_FindFreeEntry( - PADAPTER Adapter, - pu1Byte pMacAddr, - u4Byte KeyIndex, - u4Byte ulEncAlg, - u1Byte *pucKey -); - - - - diff --git a/network/wlan/WDI/HAL/HalComDef.h b/network/wlan/WDI/HAL/HalComDef.h deleted file mode 100644 index 7d014196..00000000 --- a/network/wlan/WDI/HAL/HalComDef.h +++ /dev/null @@ -1,575 +0,0 @@ -#ifndef __INC_HALDEFCOM_H -#define __INC_HALDEFCOM_H -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - HalComDef.h - -Abstract: - Defined 92C/88E common data structure. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2011-12-13 Isaiah Create. ---*/ - -/*--------------------------Define Parameters-------------------------------*/ - - - -//#pragma mark -- Chip specific. -- -extern const char *const GLBwSrc[]; - -//------------------------------------------------------------------------- -// Chip specific -//------------------------------------------------------------------------- - -#define CHIP_BONDING_IDENTIFIER(_value) (((_value)>>22)&0x3) -#define CHIP_BONDING_92C_1T2R 0x1 -#define CHIP_BONDING_88C_USB_MCARD 0x2 -#define CHIP_BONDING_88C_USB_HP 0x1 - -// -// 2011.01.06. Define new structure of chip version for RTL8723A and so on. Added by tynli. -// Modify Manufacture and ROM version field, revised by Roger, 2012.11.01. -// -/* - | BIT15:12 | BIT11:9 | BIT 8:7 | BIT6:4 | BIT3 | BIT 2:0 | - |-----------------+--------------+----------------+----------+------------+---------| - | IC version(CUT) | ROM version | Manufacturer | RF type | Chip type | IC Name | - | | | TSMC/UMC/SMIC | | TEST/NORMAL| | - | | | | | | | -*/ -// [15:12] IC version(CUT): A-cut=0, B-cut=1, C-cut=2, D-cut=3 -// [11:9] ROM version -// [8:7] Manufacturer: TSMC=0, UMC=1, SMIC=2 -// [6:4] RF type: 1T1R=0, 1T2R=1, 2T2R=2, 3T3R=3 -// [3] Chip type: TEST=0, NORMAL=1 -// [2:0] IC name: 81xxC=0, 8723A=1, 8192D=2, 8188E=3, 8812=4, 8821=5, 8723B=6, 8814A=7, -// -// Since 2014.06.18, we use another new format(v2), which defined below this block. - -// IC Name -#define CHIP_8723A BIT(0) -#define CHIP_92D BIT(1) -#define CHIP_8812 BIT(2) -#define CHIP_8188E (BIT(0)|BIT(1)) -#define CHIP_8821 (BIT(0)|BIT(2)) -#define CHIP_8723B (BIT(1)|BIT(2)) -#define CHIP_8814A (BIT(0)|BIT(1)|BIT(2)) - -// Chip type -#define NORMAL_CHIP BIT(3) - -//RF type -#define RF_TYPE_1T1R (~(BIT(4)|BIT(5)|BIT(6))) -#define RF_TYPE_1T2R BIT(4) -#define RF_TYPE_2T2R BIT(5) -#define RF_TYPE_3T3R (BIT(4)|BIT(5)) - -//Manufacture -#define CHIP_VENDOR_UMC BIT(7) -#define CHIP_VENDOR_SMIC BIT(8) -//Cut version -#define A_CUT_VERSION 0 -#define B_CUT_VERSION BIT(12) -#define C_CUT_VERSION BIT(13) -#define D_CUT_VERSION ((BIT(12)|BIT(13))) -#define E_CUT_VERSION BIT(14) -#define I_CUT_VERSION BIT(15) -#define J_CUT_VERSION ((BIT(15)|BIT(12))) -#define K_CUT_VERSION ((BIT(15)|BIT(13))) - -// MASK -#define IC_TYPE_MASK (BIT(0)|BIT(1)|BIT(2)) -#define CHIP_TYPE_MASK BIT(3) -#define RF_TYPE_MASK (BIT(4)|BIT(5)|BIT(6)) -#define MANUFACTUER_MASK (BIT(7)|BIT(8)) -#define ROM_VERSION_MASK (BIT(9)|BIT(10)|BIT(11)) -#define CUT_VERSION_MASK (BIT(12)|BIT(13)|BIT(14)|BIT(15)) - -// Get element -#define GET_CVID_IC_TYPE(version) ((version) & IC_TYPE_MASK) -#define GET_CVID_CHIP_TYPE(version) ((version) & CHIP_TYPE_MASK) -#define GET_CVID_RF_TYPE(version) ((version) & RF_TYPE_MASK) -#define GET_CVID_MANUFACTUER(version) ((version) & MANUFACTUER_MASK) -#define GET_CVID_ROM_VERSION(version) ((version) & ROM_VERSION_MASK) -#define GET_CVID_CUT_VERSION(version) ((version) & CUT_VERSION_MASK) - -// -------------------------------- -// ChipVersion V2 -// -------------------------------- -// 2014.06.18 Define new structure of chip version for RTL8703B and so on. Added by TzuHang. -/* - - | BIT 31:28 | BIT 27:24 | BIT 23:20 | BIT 19:17 | BIT16 | BIT 15 | BIT14 | BIT 13:12 | BIT11:8 | BIT 7:0 | - |-----------+-------------+-----------+-------------+-------------+----------------+---------+---------------+---------+---------| - | RESERVE | CUT VERSION | RESERVE | ROM VERSION | CHIP TYPE | BT EXIST IN IC | RESERVE | MANUFACTURE | RF TYPE | IC NAME | - | | | | | TEST/NORMAL | | | TSMC/UMC/SMIC | | | - -*/ -// Remaining the meaning corresponding to those value in each column we used before. -// And below is those be added newly -// [27:24] CUT VERSION: A-cut=0 -// [19:17] ROM VERSION -// [16] CHIP TYPE: -// [15] BT exist: No=0, Yes=1 -// [13:12] MANUFACTURE: TSMC=0, UMC=1, SMIC=2 -// [11:8] RF TYPE: 1T1R=0, 1T2R=1, 2T2R=2, 3T3R=3 -// [7:0] IC name: 8703B=0x0B - -// IC Name -#define CHIP_8821B 0x09 -#define CHIP_8822B 0x0A -#define CHIP_8703B 0x0B -#define CHIP_8188F 0x0C -#define CHIP_8723D 0x0F - -// RF Type -#define RF_TYPE_1T1R_v2 0 -#define RF_TYPE_1T2R_v2 0x1 -#define RF_TYPE_2T2R_v2 0x2 -#define RF_TYPE_3T3R_v2 0x3 - -// Manufacture -#define CHIP_VENDOR_UMC_v2 0x1 -#define CHIP_VENDOR_SMIC_v2 0x2 - -// BT exist or not -#define BT_NOT_EXIST_IN_CHIP 0 -#define BT_EXIST_IN_CHIP 0x1 - -// Chip type -#define NORMAL_CHIP_v2 0x1 - -// Cut Version -#define A_CUT_VERSION_v2 0 -#define B_CUT_VERSION_v2 0x1 -#define C_CUT_VERSION_v2 0x2 -#define D_CUT_VERSION_v2 0x3 -#define E_CUT_VERSION_v2 0x4 -#define I_CUT_VERSION_v2 0x8 - -// GET element -#define SFT_AND_GET_FROM_CHIPVER(VERSION, MASK, SFT) ((VERSION>>SFT) & MASK) - -#define GET_CVID_IC_TYPE_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0xFF, 0) -#define GET_CVID_RF_TYPE_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0xF, 8) -#define GET_CVID_MANUFACTUER_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0x3, 12) -#define GET_CVID_BT_EXIST_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0x1, 15) -#define GET_CVID_CHIP_TYPE_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0x1, 16) -#define GET_CVID_ROM_VERSION_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0x7, 17) -#define GET_CVID_CUT_VERSION_v2(VERSION) SFT_AND_GET_FROM_CHIPVER(VERSION, 0xF, 24) - -// MASK for fetching info ***From MAC*** (NOT FROM ChipVersion) -#define MK_CHIP_NAME 0xFF -#define MK_RF_TYPE 0xF << 27 // 0x8000000 -#define MK_MANU 0x3 << 18 // 0x00C0000 -#define MK_BT_EXIST 0x1 << 16 // 0x0010000 -#define MK_CHIP_TYPE 0x1 << 23 // 0x0800000 -#define MK_CUT_VER 0xF << 12 // 0x000F000 - -// The value of each info, which be aligned to head of the byte. -#define VAL_CHIP_NAME(BYTE4) ((BYTE4 & MK_CHIP_NAME)) -#define VAL_RF_TYPE(BYTE4) ((BYTE4 & MK_RF_TYPE) >> 27) -#define VAL_MANU(BYTE4) ((BYTE4 & MK_MANU) >> 18) -#define VAL_BT_EXIST(BYTE4) ((BYTE4 & MK_BT_EXIST) >> 16) -#define VAL_CHIP_TYPE(BYTE4) ((BYTE4 & MK_CHIP_TYPE) >> 23) -#define VAL_CUT_VER(BYTE4) ((BYTE4 & MK_CUT_VER) >> 12) - -// SET into Chip_Version -#define SFT_AND_SET_IN_CHIPVER(BUFFER, INPUT, SFT) { BUFFER = (VERSION_8192C)(BUFFER | (INPUT<VersionID) == B_CUT_VERSION) ? TRUE : FALSE) -#define IS_C_CUT(_Adapter) ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == C_CUT_VERSION) ? TRUE : FALSE) -#define IS_C_CUT_AFTER(_Adapter) ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >= C_CUT_VERSION) ? TRUE : FALSE) - - -#define IS_92C_SERIAL(version) ((IS_81XXC(version) && IS_2T2R(version)) ? TRUE : FALSE) -#define IS_81xxC_VENDOR_UMC_A_CUT(version) (IS_81XXC(version)?((IS_CHIP_VENDOR_UMC(version)) ? ((GET_CVID_CUT_VERSION(version)) ? FALSE : TRUE) : FALSE):FALSE) -#define IS_81xxC_VENDOR_UMC_B_CUT(version) (IS_81XXC(version)?(IS_CHIP_VENDOR_UMC(version) ? ((GET_CVID_CUT_VERSION(version) == B_CUT_VERSION) ? TRUE : FALSE):FALSE): FALSE) - -#define IS_92D_SINGLEPHY(version) ((IS_92D(version)) ? (IS_2T2R(version) ? TRUE: FALSE) : FALSE) -#define IS_92D_C_CUT(version) ((IS_92D(version)) ? ((GET_CVID_CUT_VERSION(version) == C_CUT_VERSION) ? TRUE : FALSE) : FALSE) -#define IS_92D_D_CUT(version) ((IS_92D(version)) ? ((GET_CVID_CUT_VERSION(version) == D_CUT_VERSION) ? TRUE : FALSE) : FALSE) -#define IS_92D_E_CUT(version) ((IS_92D(version)) ? ((GET_CVID_CUT_VERSION(version) == E_CUT_VERSION) ? TRUE : FALSE) : FALSE) - -#define IS_VENDOR_8723A_A_CUT(_Adapter) ((IS_8723A_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID)) ? FALSE : TRUE) : FALSE) -#define IS_VENDOR_8723A_B_CUT(_Adapter) ((IS_8723A_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == B_CUT_VERSION) ? TRUE : FALSE) : FALSE) - -#define IS_VENDOR_8188F_A_CUT(_Adapter) ((IS_8188F_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID)) ? FALSE : TRUE) : FALSE) -#define IS_VENDOR_8188F_B_CUT(_Adapter) ((IS_8188F_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == B_CUT_VERSION) ? TRUE : FALSE) : FALSE) - -#define IS_VENDOR_8188E_SMIC_C_CUT(_Adapter) ((IS_8188E_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == K_CUT_VERSION) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8188E_SMIC_SERIES(_Adapter) ((IS_8188E_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >= I_CUT_VERSION) ? TRUE : FALSE) : FALSE) - -#define IS_VENDOR_8812A_C_CUT(_Adapter) ((IS_8812_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == C_CUT_VERSION) ? TRUE : FALSE) : FALSE) - -#define IS_VENDOR_8821A_MP_CHIP(_Adapter) ((IS_8821_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8821A_B_CUT(_Adapter) ((IS_8821_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == B_CUT_VERSION) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8821A_C_CUT(_Adapter) ((IS_8821_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) == C_CUT_VERSION) ? TRUE : FALSE) : FALSE) - - -#define IS_VENDOR_8723B_TEST_CHIP(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? FALSE : TRUE) : FALSE) -#define IS_VENDOR_8723B_MP_CHIP(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8723B_A_CUT(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >> 12 == 0) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8723B_B_CUT(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >> 12 == 1) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8723B_C_CUT(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >> 12 == 1) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8723B_D_CUT(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >> 12 == 3) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8723B_D_CUT_BEFORE(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >> 12 <= 3) ? TRUE : FALSE) : FALSE) -#define IS_VENDOR_8723B_AFTER_F_CUT(_Adapter) ((IS_8723B_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((GET_CVID_CUT_VERSION(GET_HAL_DATA(_Adapter)->VersionID) >> 12 >= 4) ? TRUE : FALSE) : FALSE) - - - -#define IS_VENDOR_8814A_TEST_CHIP(_Adapter) ((IS_8814A_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? FALSE : TRUE) : FALSE) -#define IS_VENDOR_8814A_MP_CHIP(_Adapter) ((IS_8814A_SERIES(GET_HAL_DATA(_Adapter)->VersionID)) ? ((IS_NORMAL_CHIP(GET_HAL_DATA(_Adapter)->VersionID)) ? TRUE : FALSE) : FALSE) - - -#define GET_RF_TYPE(_Adapter) ((u1Byte)(((PHAL_DATA_TYPE)(_Adapter->HalData))->RF_Type)) -#define IS_BOOT_FROM_EEPROM(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->EepromOrEfuse) -#define IS_BOOT_FROM_EEPROM_93C46(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->EEType == EEPROM_93C46) -#define IS_BOOT_FROM_EEPROM_93C56(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->EEType == EEPROM_93C56) -#define IS_MULTI_FUNC_CHIP(_Adapter) (((((PHAL_DATA_TYPE)(_Adapter->HalData))->MultiFunc) & (RT_MULTI_FUNC_BT|RT_MULTI_FUNC_GPS)) ? TRUE : FALSE) -#define IS_POLARITY_HIGH_ACTIVE(_Adapter) ((((PHAL_DATA_TYPE)(_Adapter->HalData))->PolarityCtl) ? TRUE : FALSE) - -// -------------------------------- -// ChipVersion V2 -// -------------------------------- -#define IS_NORMAL_CHIP_v2(version) ((GET_CVID_CHIP_TYPE_v2(version))? TRUE: FALSE) - -#define IS_1T1R_v2(version) ((GET_CVID_RF_TYPE_v2(version))? FALSE : TRUE) -#define IS_1T2R_v2(version) ((GET_CVID_RF_TYPE_v2(version) == RF_TYPE_1T2R_v2)? TRUE : FALSE) -#define IS_2T2R_v2(version) ((GET_CVID_RF_TYPE_v2(version) == RF_TYPE_2T2R_v2)? TRUE : FALSE) -#define IS_3T3R_v2(version) ((GET_CVID_RF_TYPE_v2(version) == RF_TYPE_3T3R_v2)? TRUE : FALSE) - -#define IS_CHIP_VENDOR_TSMC_v2(version) ((GET_CVID_MANUFACTUER_v2(version) ==0)? TRUE: FALSE) -#define IS_CHIP_VENDOR_UMC_v2(version) ((GET_CVID_MANUFACTUER_v2(version) == CHIP_VENDOR_UMC_v2)? TRUE: FALSE) -#define IS_CHIP_VENDOR_SMIC_v2(version) ((GET_CVID_MANUFACTUER_v2(version) == CHIP_VENDOR_SMIC_v2)? TRUE: FALSE) - -#define IS_88E_SERIES(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bIs88eSeries) -#define IS_NIC_EXIST_BT(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bIsNicExistBt) -#define IS_NIC_SUPPORT_WAPI(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bNicSupportWapi) -#define ENABLE_SINGLE_AMPDU(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bEnableSingleAmpdu) -#define IS_NEED_EXT_IQK(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bNeedExtIQK) -#define CHECK_HIDDEN_SSID(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bCheckHiddenSsid) -#define DISABLE_RTS_ON_AMPDU(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bDisableRtsOnAmpdu) -#define IS_SUP_CLK_ON_EXCEP_RESN(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bSupClkOnExcepResn) -#define IS_REMOVE_ZERO_LEN_BUF(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bRemoveZeroLenBuf) -#define IS_LEAVE_PS_BF_EN_NIC(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bLeavePsBeforeEnNic) - - -#define WLAN_802_11N 0 -#define WLAN_802_11AC 1 - -#define IS_DOT_11N_SERIES(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bNicWirelessMode == WLAN_802_11N) -#define IS_DOT_11AC_SERIES(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->bNicWirelessMode == WLAN_802_11AC) - -#define GET_CHIP_ID(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->ChipID) -#define GET_CHIP_VERSION(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->ChipVer) -#define GET_MAX_RX_DMA_BUFFER_SIZE(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->MaxRxDmaBufferSize) -#define GET_MAX_TX_BUFFER_SIZE(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->MaxTxBufSize) -#define GET_TCB_NUM_OF_MEM_SIZE_0(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->TcbNumOfMemSize0) -#define GET_TCB_NUM_OF_MEM_SIZE_1(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->TcbNumOfMemSize1) -#define GET_TX_DESC_NUM(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->TxDescNum) -#define GET_TX_DESC_NUM_BE_Q(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->TxDescNumBeQ) -#define GET_TX_DESC_NUM_MP(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->TxDescNumMp) -#define GET_TX_DESC_NUM_BE_Q_MP(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->TxDescNumBeQMp) - -#define GET_MAX_RX_BUFFER_SIZE(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->MaxRxBufSize) -#define GET_MAX_SUBFRAME_CNT_MM_SIZE0(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->MaxSubframeCntMmSize0) -#define GET_MAX_SUBFRAME_CNT_MM_SIZE1(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->MaxSubframeCntMmSize1) -#define GET_RFD_NUM_OF_MM_SIZE_0(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->RfdNumMmSize0) -#define GET_RFD_DESC_NUM_OF_MM_SIZE_0(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->RxDescNumMmSize0) -#define GET_RFD_NUM_OF_MM_SIZE_1(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->RfdNumMmSize1) -#define GET_RFD_DESC_NUM_OF_MM_SIZE_1(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->RxDescNumMmSize1) - -#define IS_PCI_INERFACE(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->ChipVer == 0x1) -#define IS_USB_INERFACE(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->ChipVer == 0x2) -#define IS_SDIO_INERFACE(_Adapter) (((PHAL_DATA_TYPE)(_Adapter->HalData))->ChipVer == 0x3) - - - - -/*------------------------------ RTL81xxxDefCom.h Definiction -----------------------*/ -//Move 8192CDefCom.h/8188EDefCom.h to here. - -#define HAL_DM_DIG_DISABLE BIT0 // Disable Dig -#define HAL_DM_HIPWR_DISABLE BIT1 // Disable High Power - -#define PHY_RSSI_SLID_WIN_MAX 100 -#define PHY_LINKQUALITY_SLID_WIN_MAX 20 - - -//----------------------------------------------------------- -// -// Queue mapping -// -//----------------------------------------------------------- -#define BK_QUEUE 0 -#define BE_QUEUE 1 -#define VI_QUEUE 2 -#define VO_QUEUE 3 -#define BEACON_QUEUE 4 -#define TXCMD_QUEUE 5 -#define MGNT_QUEUE 6 -#define HIGH_QUEUE 7 -#define HCCA_QUEUE 8 - -#define HIGH0_QUEUE HIGH_QUEUE -#define HIGH1_QUEUE 9 -#define HIGH2_QUEUE 10 -#define HIGH3_QUEUE 11 -#define HIGH4_QUEUE 12 -#define HIGH5_QUEUE 13 -#define HIGH6_QUEUE 14 -#define HIGH7_QUEUE 15 - -#define LOW_QUEUE BE_QUEUE -#define NORMAL_QUEUE MGNT_QUEUE -#if (NEW_EARLY_MODE_ENABLE==1) -#define NEW_EARLY_MODE_QUEUE BE_QUEUE //add by ylb 20130409 -#endif - -#define IS_DATA_QUEUE(_queueIdx) (((BK_QUEUE == _queueIdx) || (BE_QUEUE == _queueIdx) || (VI_QUEUE == _queueIdx) || (VO_QUEUE == _queueIdx))? TRUE: FALSE) -// -// Queue Select Value in TxDesc -// -#define QSLT_BK 0x2//0x01 -#define QSLT_BE 0x0 -#define QSLT_VI 0x5//0x4 -#define QSLT_VO 0x7//0x6 -#define QSLT_BEACON 0x10 -#define QSLT_HIGH 0x11 -#define QSLT_MGNT 0x12 -#define QSLT_CMD 0x13 - -#define RX_MPDU_QUEUE 0 -#define RX_CMD_QUEUE 1 -#define RX_MAX_QUEUE 2 - - - -#define RX_DESC_SIZE 32 - -#define HAL_DEFAULT_BEACON_TYPE BEACON_SEND_AUTO_HW - -//----------------------------------------------------------- -// MAC/BB/RF -//----------------------------------------------------------- - -#define MAX_LINES_HWCONFIG_TXT 2000 -#define MAX_BYTES_LINE_HWCONFIG_TXT 256 - - -// Rx smooth factor -#define Rx_Smooth_Factor 20 - - -//H2C related -typedef enum _H2C_STATUS{ - H2C_STATUS_SUCCESS, - H2C_STATUS_FAIL_ANOTHER_H2C_UNDER_PROGRESS, - H2C_STATUS_FAIL_RF_OFF, - H2C_STATUS_FAIL_FW_READ_CLEAR_TIMEOUT, - H2C_STATUS_MAX -}H2C_STATUS,*PH2C_STATUS; - -#define MAX_H2C_QUEUE_NUM 64 - -/*------------------------------ end of RTL81xxxDefCom.h Definiction -----------------------*/ - - -// For store intial value of BB register -typedef struct _BB_INIT_REGISTER{ - u2Byte offset; - - u4Byte value; - -}BB_INIT_REGISTER, *PBB_INIT_REGISTER; - - - -// SDIO Tx FIFO related -#define SDIO_TX_FREE_PG_QUEUE 5 // The number of Tx FIFO free page, 8821B: HIQ/MIQ/LOQ/PUBQ/EXTQ. -#define SDIO_TX_FREE_PG_QUEUE_8814A 5 //20130422 KaiYuan add for 8814 Extra Queue - -//#define SDIO_TX_FIFO_PAGE_SZ 128 // For RTL8723A/RTL8723B 32K Tx FIFO Size -//#define SDIO_TX_FIFO_PAGE_SZ_8821 256 - -#define SDIO_TX_FIFO_PAGE_SIZE(_Adapter) \ - ((IS_HARDWARE_TYPE_8812A(_Adapter) || IS_HARDWARE_TYPE_8821A(_Adapter) \ - || IS_HARDWARE_TYPE_8192E(_Adapter))? \ - 256 : 128) - - - -typedef struct _QUEUE_INDEX_LIST -{ - u1Byte QueueIdxArray[32]; - u1Byte Len; -}QUEUE_INDEX_LIST, *PQUEUE_INDEX_LIST; - -#if RX_AGGREGATION -typedef enum _RX_AGG_MODE{ - RX_AGG_DISABLE, - RX_AGG_DMA, - RX_AGG_USB, - RX_AGG_DMA_USB -}RX_AGG_MODE, *PRX_AGG_MODE; -#endif - -typedef struct _LOG_SYS_INTERRUPT -{ - u4Byte nISR_GPIO9; - u4Byte nISR_GPIO12_0; - u4Byte nISR_SPS_OCP; - u4Byte nISR_RON; - u4Byte nISR_PDN; - -} LOG_SYS_INTERRUPT, *PLOG_SYS_INTERRUPT; - - - -//should be renamed and moved to another file -typedef enum _INTERFACE_SELECT_8192CUSB{ - INTF_SEL0_USB = 0, // USB - INTF_SEL1_USB_High_Power = 1, // USB with high power PA - INTF_SEL2_MINICARD = 2, // Minicard - INTF_SEL3_USB_Solo = 3, // USB solo-Slim module - INTF_SEL4_USB_Combo = 4, // USB Combo-Slim module - INTF_SEL5_USB_Combo_MF = 5, // USB WiFi+BT Multi-Function Combo, i.e., Proprietary layout(AS-VAU) which is the same as SDIO card -} INTERFACE_SELECT_8192CUSB, *PINTERFACE_SELECT_8192CUSB; - -typedef INTERFACE_SELECT_8192CUSB INTERFACE_SELECT_USB; - -typedef struct _LOG_INTERRUPT -{ - u4Byte nISR_RX_REQUEST; - u4Byte nISR_AVAL; - u4Byte nISR_TXERR; - u4Byte nISR_RXERR; - u4Byte nISR_TXFOVW; - u4Byte nISR_RXFOVW; - u4Byte nISR_TXBCNOK; - u4Byte nISR_TXBCNERR; - u4Byte nISR_BCNERLY_INT; - u4Byte nISR_C2HCMD; - u4Byte nISR_CPWM1; - u4Byte nISR_CPWM2; - u4Byte nISR_HSISR_IND; - u4Byte nISR_GTINT3_IND; - u4Byte nISR_GTINT4_IND; - u4Byte nISR_PSTIMEOUT; - u4Byte nISR_OCPINT; - u4Byte nISR_ATIMEND; - u4Byte nISR_ATIMEND_E; - u4Byte nISR_CTWEND; - u4Byte nISR_MCU_ERR; // For 8188ES only - u4Byte nISR_BIT32_TOGGLE; // For 8188ES only - u4Byte nIMR_C2HCMD; -} LOG_INTERRUPT, *PLOG_INTERRUPT; - - -u4Byte -HAL_GetCutVersion( - IN PADAPTER pAdapter - ); -VOID -HAL_SetBcnCtrlReg( - IN PADAPTER Adapter, - IN u1Byte SetBits, - IN u1Byte ClearBits - ); -VOID -HAL_UpdateDefaultSetting( - IN PADAPTER pAdapter - ); - -BOOLEAN -HAL_ChipSupport80MHz( - IN PADAPTER Adapter - ); - -BOOLEAN -HAL_WorkAroundForLowTxRaise( - IN PADAPTER Adapter - ); - -BOOLEAN -HAL_DisableEdcaTurbo( - IN PADAPTER Adapter - ); - -BOOLEAN -HAL_EnableBeQTxOpLimit( - IN PADAPTER Adapter - ); - -BOOLEAN -HAL_ActBcmRxFailRelink( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc - ); - -BOOLEAN -HAL_IsEdcaBiasRx( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pBssDesc - ); - -BOOLEAN -HAL_SkipMcsRates( - IN PADAPTER Adapter - ); - -VOID -HalSetFcsAdjustTsf( - IN PADAPTER Adapter - ); - -VOID -HAL_DownloadRSVD_PreCfg( - IN PADAPTER Adapter -); -RT_STATUS -HAL_DownloadRSVD_PostCfg( - IN PADAPTER Adapter -); -BOOLEAN IS_HAL_MAC_INIT( - IN PADAPTER Adapter -); - -#endif diff --git a/network/wlan/WDI/HAL/HalComDesc.h b/network/wlan/WDI/HAL/HalComDesc.h deleted file mode 100644 index 3bfbc70d..00000000 --- a/network/wlan/WDI/HAL/HalComDesc.h +++ /dev/null @@ -1,445 +0,0 @@ -#ifndef __INC_HALCOMDESC_H -#define __INC_HALCOMDESC_H -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - HalComDesc.h - -Abstract: - Defined 92C/88E common Descriptor structure. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2011-12-14 Isaiah Create. ---*/ - -/*--------------------------Define Parameters-------------------------------*/ - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------------ Tx Desc definition Macro ------------------------*/ -//#pragma mark -- Tx Desc related definition. -- -//---------------------------------------------------------------------------- -//----------------------------------------------------------- -// Rate -//----------------------------------------------------------- -#define DESC92C_RATEMCS15_SG 0x1c -#define DESC92C_RATEMCS32 0x20 - -#if 0 -// CCK Rates, TxHT = 0 -#define DESC_RATE1M 0x00 -#define DESC_RATE2M 0x01 -#define DESC_RATE5_5M 0x02 -#define DESC_RATE11M 0x03 -// OFDM Rates, TxHT = 0 -#define DESC_RATE6M 0x04 -#define DESC_RATE9M 0x05 -#define DESC_RATE12M 0x06 -#define DESC_RATE18M 0x07 -#define DESC_RATE24M 0x08 -#define DESC_RATE36M 0x09 -#define DESC_RATE48M 0x0A -#define DESC_RATE54M 0x0B -// MCS Rates, TxHT = 1 -#define DESC_RATEMCS0 0x0C -#define DESC_RATEMCS1 0x0D -#define DESC_RATEMCS2 0x0E -#define DESC_RATEMCS3 0x0F -#define DESC_RATEMCS4 0x10 -#define DESC_RATEMCS5 0x11 -#define DESC_RATEMCS6 0x12 -#define DESC_RATEMCS7 0x13 -#define DESC_RATEMCS8 0x14 -#define DESC_RATEMCS9 0x15 -#define DESC_RATEMCS10 0x16 -#define DESC_RATEMCS11 0x17 -#define DESC_RATEMCS12 0x18 -#define DESC_RATEMCS13 0x19 -#define DESC_RATEMCS14 0x1A -#define DESC_RATEMCS15 0x1B -#define DESC_RATEMCS16 0x1C -#define DESC_RATEMCS17 0x1D -#define DESC_RATEMCS18 0x1E -#define DESC_RATEMCS19 0x1F -#define DESC_RATEMCS20 0x20 -#define DESC_RATEMCS21 0x21 -#define DESC_RATEMCS22 0x22 -#define DESC_RATEMCS23 0x23 -#define DESC_RATEMCS24 0x24 -#define DESC_RATEMCS25 0x25 -#define DESC_RATEMCS26 0x26 -#define DESC_RATEMCS27 0x27 -#define DESC_RATEMCS28 0x28 -#define DESC_RATEMCS29 0x29 -#define DESC_RATEMCS30 0x2A -#define DESC_RATEMCS31 0x2B -#define DESC_RATEVHTSS1MCS0 0x2C -#define DESC_RATEVHTSS1MCS1 0x2D -#define DESC_RATEVHTSS1MCS2 0x2E -#define DESC_RATEVHTSS1MCS3 0x2F -#define DESC_RATEVHTSS1MCS4 0x30 -#define DESC_RATEVHTSS1MCS5 0x31 -#define DESC_RATEVHTSS1MCS6 0x32 -#define DESC_RATEVHTSS1MCS7 0x33 -#define DESC_RATEVHTSS1MCS8 0x34 -#define DESC_RATEVHTSS1MCS9 0x35 -#define DESC_RATEVHTSS2MCS0 0x36 -#define DESC_RATEVHTSS2MCS1 0x37 -#define DESC_RATEVHTSS2MCS2 0x38 -#define DESC_RATEVHTSS2MCS3 0x39 -#define DESC_RATEVHTSS2MCS4 0x3A -#define DESC_RATEVHTSS2MCS5 0x3B -#define DESC_RATEVHTSS2MCS6 0x3C -#define DESC_RATEVHTSS2MCS7 0x3D -#define DESC_RATEVHTSS2MCS8 0x3E -#define DESC_RATEVHTSS2MCS9 0x3F -#define DESC_RATEVHTSS3MCS0 0x40 -#define DESC_RATEVHTSS3MCS1 0x41 -#define DESC_RATEVHTSS3MCS2 0x42 -#define DESC_RATEVHTSS3MCS3 0x43 -#define DESC_RATEVHTSS3MCS4 0x44 -#define DESC_RATEVHTSS3MCS5 0x45 -#define DESC_RATEVHTSS3MCS6 0x46 -#define DESC_RATEVHTSS3MCS7 0x47 -#define DESC_RATEVHTSS3MCS8 0x48 -#define DESC_RATEVHTSS3MCS9 0x49 -#define DESC_RATEVHTSS4MCS0 0x4A -#define DESC_RATEVHTSS4MCS1 0x4B -#define DESC_RATEVHTSS4MCS2 0x4C -#define DESC_RATEVHTSS4MCS3 0x4D -#define DESC_RATEVHTSS4MCS4 0x4E -#define DESC_RATEVHTSS4MCS5 0x4F -#define DESC_RATEVHTSS4MCS6 0x50 -#define DESC_RATEVHTSS4MCS7 0x51 -#define DESC_RATEVHTSS4MCS8 0x52 -#define DESC_RATEVHTSS4MCS9 0x53 -#endif -typedef enum _DESC_RATE_{ - // CCK Rates, TxHT = 0 - DESC_RATE1M = 0x00, - DESC_RATE2M = 0x01, - DESC_RATE5_5M = 0x02, - DESC_RATE11M = 0x03, - // OFDM Rates, TxHT = 0 - DESC_RATE6M = 0x04, - DESC_RATE9M = 0x05, - DESC_RATE12M = 0x06, - DESC_RATE18M = 0x07, - DESC_RATE24M = 0x08, - DESC_RATE36M = 0x09, - DESC_RATE48M = 0x0A, - DESC_RATE54M = 0x0B, - // MCS Rates, TxHT = 1 - DESC_RATEMCS0 = 0x0C, - DESC_RATEMCS1 = 0x0D, - DESC_RATEMCS2 = 0x0E, - DESC_RATEMCS3 = 0x0F, - DESC_RATEMCS4 = 0x10, - DESC_RATEMCS5 = 0x11, - DESC_RATEMCS6 = 0x12, - DESC_RATEMCS7 = 0x13, - DESC_RATEMCS8 = 0x14, - DESC_RATEMCS9 = 0x15, - DESC_RATEMCS10 = 0x16, - DESC_RATEMCS11 = 0x17, - DESC_RATEMCS12 = 0x18, - DESC_RATEMCS13 = 0x19, - DESC_RATEMCS14 = 0x1A, - DESC_RATEMCS15 = 0x1B, - DESC_RATEMCS16 = 0x1C, - DESC_RATEMCS17 = 0x1D, - DESC_RATEMCS18 = 0x1E, - DESC_RATEMCS19 = 0x1F, - DESC_RATEMCS20 = 0x20, - DESC_RATEMCS21 = 0x21, - DESC_RATEMCS22 = 0x22, - DESC_RATEMCS23 = 0x23, - DESC_RATEMCS24 = 0x24, - DESC_RATEMCS25 = 0x25, - DESC_RATEMCS26 = 0x26, - DESC_RATEMCS27 = 0x27, - DESC_RATEMCS28 = 0x28, - DESC_RATEMCS29 = 0x29, - DESC_RATEMCS30 = 0x2A, - DESC_RATEMCS31 = 0x2B, - // VHT MCS Rates, - DESC_RATEVHTSS1MCS0 = 0x2C, - DESC_RATEVHTSS1MCS1 = 0x2D, - DESC_RATEVHTSS1MCS2 = 0x2E, - DESC_RATEVHTSS1MCS3 = 0x2F, - DESC_RATEVHTSS1MCS4 = 0x30, - DESC_RATEVHTSS1MCS5 = 0x31, - DESC_RATEVHTSS1MCS6 = 0x32, - DESC_RATEVHTSS1MCS7 = 0x33, - DESC_RATEVHTSS1MCS8 = 0x34, - DESC_RATEVHTSS1MCS9 = 0x35, - DESC_RATEVHTSS2MCS0 = 0x36, - DESC_RATEVHTSS2MCS1 = 0x37, - DESC_RATEVHTSS2MCS2 = 0x38, - DESC_RATEVHTSS2MCS3 = 0x39, - DESC_RATEVHTSS2MCS4 = 0x3A, - DESC_RATEVHTSS2MCS5 = 0x3B, - DESC_RATEVHTSS2MCS6 = 0x3C, - DESC_RATEVHTSS2MCS7 = 0x3D, - DESC_RATEVHTSS2MCS8 = 0x3E, - DESC_RATEVHTSS2MCS9 = 0x3F, - DESC_RATEVHTSS3MCS0 = 0x40, - DESC_RATEVHTSS3MCS1 = 0x41, - DESC_RATEVHTSS3MCS2 = 0x42, - DESC_RATEVHTSS3MCS3 = 0x43, - DESC_RATEVHTSS3MCS4 = 0x44, - DESC_RATEVHTSS3MCS5 = 0x45, - DESC_RATEVHTSS3MCS6 = 0x46, - DESC_RATEVHTSS3MCS7 = 0x47, - DESC_RATEVHTSS3MCS8 = 0x48, - DESC_RATEVHTSS3MCS9 = 0x49, - DESC_RATEVHTSS4MCS0 = 0x4A, - DESC_RATEVHTSS4MCS1 = 0x4B, - DESC_RATEVHTSS4MCS2 = 0x4C, - DESC_RATEVHTSS4MCS3 = 0x4D, - DESC_RATEVHTSS4MCS4 = 0x4E, - DESC_RATEVHTSS4MCS5 = 0x4F, - DESC_RATEVHTSS4MCS6 = 0x50, - DESC_RATEVHTSS4MCS7 = 0x51, - DESC_RATEVHTSS4MCS8 = 0x52, - DESC_RATEVHTSS4MCS9 = 0x53, - DESC_RATEMAX -}DESC_RATE_E, *PDESC_RATE_E; - -#define RX_DRV_INFO_SIZE_UNIT 8 - -#define TX_DESC_SIZE_8192ES 40 -#define TX_DESC_SIZE_8723DS 40 -#define TX_DESC_SIZE_8814AS 40 -#define TX_DESC_SIZE_8812 40 -#define TX_DESC_SIZE_8723B 40 -#define TX_DESC_SIZE_8703B 40 -#define TX_DESC_SIZE_8188F 40 -#define TX_DESC_SIZE 32 -#define TX_DESC_SIZE_8821BS 40 -#define TX_DESC_SIZE_8822BS 48 -#define TX_INFO_SIZE_8822B TX_DESC_SIZE_8822BS - -/*------------------------------ Tx Desc field Macro ----------------------------*/ -//#pragma mark -- Tx Desc field. -- -//---------------------------------------------------------------------------- - -//Early mode -#define SET_EARLYMODE_PKTNUM(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 4, __Value) -#define SET_EARLYMODE_LEN0(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 12, __Value) -#define SET_EARLYMODE_LEN1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 16, 12, __Value) -#define SET_EARLYMODE_LEN2_1(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 28, 4, __Value) -#define SET_EARLYMODE_LEN2_2(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 8, __Value) -#define SET_EARLYMODE_LEN3(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 8, 12, __Value) -#define SET_EARLYMODE_LEN4(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 20, 12, __Value) - - -#define GET_TX_REPORT_TYPE1_RERTY_0(__pAddr) LE_BITS_TO_4BYTE( __pAddr, 0, 16) -#define GET_TX_REPORT_TYPE1_RERTY_1(__pAddr) LE_BITS_TO_1BYTE( __pAddr+2, 0, 8) -#define GET_TX_REPORT_TYPE1_RERTY_2(__pAddr) LE_BITS_TO_1BYTE( __pAddr+3, 0, 8) -#define GET_TX_REPORT_TYPE1_RERTY_3(__pAddr) LE_BITS_TO_1BYTE( __pAddr+4, 0, 8) -#define GET_TX_REPORT_TYPE1_RERTY_4(__pAddr) LE_BITS_TO_1BYTE( __pAddr+4+1, 0, 8) -#define GET_TX_REPORT_TYPE1_DROP_0(__pAddr) LE_BITS_TO_1BYTE( __pAddr+4+2, 0, 8) -#define GET_TX_REPORT_TYPE1_DROP_1(__pAddr) LE_BITS_TO_1BYTE( __pAddr+4+3, 0, 8) - - - -/*------------------------------Tx Desc definition----------------------------*/ -#pragma pack (1) -typedef struct _Phy_CCK_Rx_Status_Report -{ - /* For CCK rate descriptor. This is a unsigned 8:1 variable. LSB bit presend - 0.5. And MSB 7 bts presend a signed value. Range from -64~+63.5. */ - u1Byte adc_pwdb_X[4]; - u1Byte SQ_rpt; - u1Byte cck_agc_rpt; - u1Byte cck_bb_pwr; -}PHY_STS_CCK_T; -#pragma pack () - -/*------------------------Export global variable----------------------------*/ -/*------------------------Export global variable----------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Tx Descriptor related function---------------------*/ - -u1Byte -MTxBFPacketTypeToSNDPktSel( - IN u1Byte Type - ); - - -u1Byte -HwRateToMRate( - IN u1Byte rate -); - -u1Byte -MRateToHwRate( - IN u1Byte rate -); - -u1Byte -HwRateToMRate_2( - IN u1Byte rate - ); - -u1Byte -MRateToRateIndex( - IN u1Byte rate - ); - - -u1Byte -QueryIsShort( - IN PADAPTER Adapter, - IN u1Byte TxHT, - IN u1Byte TxRate, - IN PRT_TCB pTcb -); - -u1Byte -MapHwQueueToFirmwareQueue( - IN PRT_TCB pTcb, - IN u1Byte QueueID -); - - - -u1Byte -QueueMapping( - u1Byte QueueID - ); - -#if TX_AGGREGATION -VOID -TxSdioAggregation( - IN PADAPTER Adapter, - IN u1Byte queueId - ); -#endif - - - -/*--------------------------Rx Descriptor related function---------------------*/ - - - -#define RX_HAL_IS_CCK_RATE(_Adapter, _pDesc) \ - IS_HARDWARE_TYPE_8188E(_Adapter) ? RX_HAL_IS_CCK_RATE_88E(_pDesc) : RX_HAL_IS_CCK_RATE_88E(_pDesc) - -#define MAX_RX_PKT_HW_VALID_SIZE(_Adapter) (_Adapter->MAX_RECEIVE_BUFFER_SIZE) - - -u1Byte -QueryRxPwrPercentage( - IN s1Byte AntPower -); - -VOID -UpdateRxSignalStatistics( - IN PADAPTER Adapter, - IN OUT PRT_RFD pRfd -); - -s4Byte -TranslateToDbm( - IN PADAPTER Adapter, - IN u1Byte SignalStrengthIndex // 0-100 index. -); - -u1Byte -GetSignalQuality( - IN PADAPTER Adapter -); - -s4Byte -SignalScaleMapping( - IN PADAPTER Adapter, - IN s4Byte CurrSig -); - -u1Byte -SignalScaleProc( - IN PADAPTER Adapter, - IN s4Byte CurrSig, - IN BOOLEAN Is11n, - IN BOOLEAN IsCCK -); - -VOID -RxDesc_BackupScanList( - IN PADAPTER Adapter -); - -VOID -RxDesc_FlushScanList( - IN PADAPTER Adapter -); - -u1Byte -EVMdbToPercentage( - IN s1Byte Value -); - -VOID -Process_UI_RSSI( - IN PADAPTER Adapter, - IN PRT_RFD pRfd -); - -VOID -Process_PWDB( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN PRT_WLAN_STA pEntry -); - -VOID -Process_UiLinkQuality( - IN PADAPTER Adapter, - IN PRT_RFD pRfd -); - -void -ProcessPhyInfo( - IN PADAPTER Adapter, - IN OCTET_STRING pduOS, - IN PRT_RFD pRfd, - IN PRT_WLAN_STA pEntry -); - -VOID -UpdateRxAMPDUHistogramStatistics( - IN OUT PADAPTER Adapter, - IN PRT_RFD pRfd -); - -VOID -UpdateRxPktTimeStamp( - IN PADAPTER Adapter, - IN OUT PRT_RFD pRfd -); - -VOID -UpdateRxdRateHistogramStatistics( - IN OUT PADAPTER Adapter, - IN PRT_RFD pRfd, - IN u1Byte mgnRate - ); - -VOID -CheckRxPacketValidLength( - IN PADAPTER Adapter, - IN OUT PRT_RFD pRfd - ); - -#endif //__INC_HALCOMDESC_H diff --git a/network/wlan/WDI/HAL/HalComFirmware.h b/network/wlan/WDI/HAL/HalComFirmware.h deleted file mode 100644 index 545f1c6c..00000000 --- a/network/wlan/WDI/HAL/HalComFirmware.h +++ /dev/null @@ -1,465 +0,0 @@ -#ifndef __INC_COMFIRMWARE_H__ -#define __INC_COMFIRMWARE_H__ - -#define PageNum_128(_Len) (u4Byte)(((_Len)>>7) + ((_Len)&0x7F ? 1:0)) -#define PageNum_256(_Len) (u4Byte)(((_Len)>>8) + ((_Len)&0xFF ? 1:0)) -#define PageNum_512(_Len) (u4Byte)(((_Len)>>9) + ((_Len)&0x1FF ? 1:0)) - -// -// Check if FW header exists. We do not consider the lower 4 bits in this case. -// By tynli. 2009.12.04. -// Add new FW signature recognized ID 23xx for RTL8723. -// -// Signature header for RLE0380 Test chip: 0x2300, RTL8723A Normal Chip: 0x2301 -// Added by Roger, 2011.07.28. -// -#define IS_FW_HEADER_EXIST(_pFwHdr) ((GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) & 0xFFF0) == 0x92C0 ||\ - ( GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) & 0xFFF0) == 0x88C0 ||\ - ( GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) & 0xFF00) == 0x2300 ||\ - ( GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) & 0xFF00) == 0x2301 ||\ - ( GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) & 0xFF00) == 0x2302 ||\ - (GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) &0xFFFF) == 0x92D0 ||\ - (GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) &0xFFFF) == 0x92D1 ||\ - (GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) &0xFFFF) == 0x92D2 ||\ - (GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) &0xFFFF) == 0x92D3) - - -#if(FW_QUEME_MECHANISM_NEW != 1) -#define IS_H2CQUEUE_EMPTY(_pHalData) (_pHalData->H2CQueueTail == _pHalData->H2CQueueHead) -#endif - -#define GET_FIRMWARE(_Adapter) ((PRT_FIRMWARE) (((HAL_DATA_TYPE*)(_Adapter->HalData))->pFirmware)) - - -//#define FillH2CCmd(_Adapter, _ElementID, _CmdLen,_pCmdBuffer) \ -// (IS_HARDWARE_TYPE_JAGUAR(_Adapter) || IS_HARDWARE_TYPE_8723B(_Adapter))?FillH2CCmd8723B(_Adapter, _ElementID, _CmdLen,_pCmdBuffer): \ -// (IS_HARDWARE_TYPE_8192E(_Adapter))?FillH2CCmd8192E(_Adapter, _ElementID, _CmdLen,_pCmdBuffer): \ -// (IS_HARDWARE_TYPE_8188E(_Adapter) ? FillH2CCmd88E(_Adapter, _ElementID, _CmdLen,_pCmdBuffer) : FillH2CCmd92C(_Adapter, _ElementID, _CmdLen,_pCmdBuffer)) - - -#define FW_GTK_EXT_MEM_SIZE 256 // bytes - -// The value is define to check FW 32k calibration status in REG_MCUTST_WOWLAN(0x1c7). -// Modify to new value from 8723BS FW v15. -#define FW_DBG_32K_CALI_TIMEOUT 0xfd -#define FW_DBG_32K_CALI_LOCK 0xfe - -//-------------------------------------------------- -typedef enum _DESC_PACKET_TYPE{ - DESC_PACKET_TYPE_INIT = 0, - DESC_PACKET_TYPE_NORMAL = 1, - DESC_PACKET_TYPE_CMD -}DESC_PACKET_TYPE; - - -#define FW_SIZE 0x40000 // Compatible with RTL8723 Maximal RAM code size 24K. modified to 32k, TO compatible with 92d maximal fw size 32k -#define FW_START_ADDRESS 0x1000 - -#define MAX_PAGE_SIZE 4096 // @ page : 4k bytes - -typedef enum _FIRMWARE_SOURCE{ - FW_SOURCE_IMG_FILE = 0, - FW_SOURCE_HEADER_FILE = 1, //from header file -}FIRMWARE_SOURCE, *PFIRMWARE_SOURCE; - -typedef struct _RT_FIRMWARE{ - FIRMWARE_SOURCE eFWSource; - u1Byte szFwBuffer[FW_SIZE]; - u4Byte ulFwLength; - u1Byte szWoWLANFwBuffer[FW_SIZE]; - u4Byte ulWoWLANFwLength; - u1Byte szBTFwBuffer[FW_SIZE]; - u4Byte ulBTFwLength; -}RT_FIRMWARE, *PRT_FIRMWARE; - -// -// This structure must be cared byte-ordering -// -// Added by tynli. 2009.12.04. - -//===================================================== -// Firmware Header(8-byte alinment required) -//===================================================== -//--- LONG WORD 0 ---- -#define GET_FIRMWARE_HDR_SIGNATURE(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr, 0, 16) // 92C0: test chip; 92C, 88C0: test chip; 88C1: MP A-cut; 92C1: MP A-cut -#define GET_FIRMWARE_HDR_CATEGORY(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr, 16, 8) // AP/NIC and USB/PCI -#define GET_FIRMWARE_HDR_FUNCTION(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr, 24, 8) // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions -#define GET_FIRMWARE_HDR_VERSION(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+4, 0, 16)// FW Version -#define GET_FIRMWARE_HDR_SUB_VER(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+4, 16, 8) // FW Subversion, default 0x00 -#define GET_FIRMWARE_HDR_RSVD1(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+4, 24, 8) - -//--- LONG WORD 1 ---- -#define GET_FIRMWARE_HDR_MONTH(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+8, 0, 8) // Release time Month field -#define GET_FIRMWARE_HDR_DATE(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+8, 8, 8) // Release time Date field -#define GET_FIRMWARE_HDR_HOUR(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+8, 16, 8)// Release time Hour field -#define GET_FIRMWARE_HDR_MINUTE(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+8, 24, 8)// Release time Minute field -#define GET_FIRMWARE_HDR_ROMCODE_SIZE(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+12, 0, 16)// The size of RAM code -#define GET_FIRMWARE_HDR_RSVD2(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+12, 16, 16) - -//--- LONG WORD 2 ---- -#define GET_FIRMWARE_HDR_SVN_IDX(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+16, 0, 32)// The SVN entry index -#define GET_FIRMWARE_HDR_RSVD3(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+20, 0, 32) - -//--- LONG WORD 3 ---- -#define GET_FIRMWARE_HDR_RSVD4(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 0, 32) -#define GET_FIRMWARE_HDR_RSVD5(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+28, 0, 32) - -// -// This structure must be cared byte-ordering -// -// Added by ylb 20130814 - -//===================================================== -// New Firmware Header(8-byte alinment required) -//===================================================== -//--- LONG WORD 0 ---- -#define GET_FIRMWARE_HDR_SIGNATURE_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr, 0, 16) -#define GET_FIRMWARE_HDR_CATEGORY_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr, 16, 8) // AP/NIC and USB/PCI -#define GET_FIRMWARE_HDR_FUNCTION_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr, 24, 8) // Reserved for different FW function indcation, for further use when driver needs to download different FW in different conditions -#define GET_FIRMWARE_HDR_VERSION_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+4, 0, 16)// FW Version -#define GET_FIRMWARE_HDR_SUB_VER_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+4, 16, 8) // FW Subversion, default 0x00 -#define GET_FIRMWARE_HDR_SUB_IDX_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+4, 24, 8) // FW Subversion Index - -//--- LONG WORD 1 ---- -#define GET_FIRMWARE_HDR_SVN_IDX_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+8, 0, 32)// The SVN entry index -#define GET_FIRMWARE_HDR_RSVD1_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+12, 0, 32) - -//--- LONG WORD 2 ---- -#define GET_FIRMWARE_HDR_MONTH_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+16, 0, 8) // Release time Month field -#define GET_FIRMWARE_HDR_DATE_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+16, 8, 8) // Release time Date field -#define GET_FIRMWARE_HDR_HOUR_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+16, 16, 8)// Release time Hour field -#define GET_FIRMWARE_HDR_MINUTE_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+16, 24, 8)// Release time Minute field -#define GET_FIRMWARE_HDR_YEAR_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+20, 0, 16)// Release time Year field -#define GET_FIRMWARE_HDR_FOUNDRY_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+20, 16, 8)// Release time Foundry field -#define GET_FIRMWARE_HDR_RSVD2_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+20, 24, 8) - -//--- LONG WORD 3 ---- -#define GET_FIRMWARE_HDR_MEM_UASGE_DL_FROM_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 0, 1) -#define GET_FIRMWARE_HDR_MEM_UASGE_BOOT_FROM_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 1, 1) -#define GET_FIRMWARE_HDR_MEM_UASGE_BOOT_LOADER_3081(__FwHdr)LE_BITS_TO_4BYTE(__FwHdr+24, 2, 1) -#define GET_FIRMWARE_HDR_MEM_UASGE_IRAM_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 3, 1) -#define GET_FIRMWARE_HDR_MEM_UASGE_ERAM_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 4, 1) -#define GET_FIRMWARE_HDR_MEM_UASGE_RSVD4_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 5, 3) -#define GET_FIRMWARE_HDR_RSVD3_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 8, 8) -#define GET_FIRMWARE_HDR_BOOT_LOADER_SZ_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+24, 16, 16) -#define GET_FIRMWARE_HDR_RSVD5_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+28, 0, 32) - -//--- LONG WORD 4 ---- -#define GET_FIRMWARE_HDR_TOTAL_DMEM_SZ_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+36, 0, 32) -#define GET_FIRMWARE_HDR_FW_CFG_SZ_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+36, 0, 16) -#define GET_FIRMWARE_HDR_FW_ATTR_SZ_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+36, 16, 16) - -//--- LONG WORD 5 ---- -#define GET_FIRMWARE_HDR_IROM_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+40, 0, 32) -#define GET_FIRMWARE_HDR_EROM_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+44, 0, 32) - -//--- LONG WORD 6 ---- -#define GET_FIRMWARE_HDR_IRAM_SZ_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+48, 0, 32) -#define GET_FIRMWARE_HDR_ERAM_SZ_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+52, 0, 32) - -//--- LONG WORD 7 ---- -#define GET_FIRMWARE_HDR_RSVD6_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+56, 0, 32) -#define GET_FIRMWARE_HDR_RSVD7_3081(__FwHdr) LE_BITS_TO_4BYTE(__FwHdr+60, 0, 32) - - -//===================================================== -// FW H2C / C2H CMD structure -//===================================================== - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -//------------------------------------------------------- -// H2C Command length -// The defines should be seperated into 92C series and 88E series ICs -// because of the H2C Box length are different. 2012.04.18. Noted by tynli. -//------------------------------------------------------- - -//----------------------------------------- -// 92C Series -//----------------------------------------- -#define H2C_92C_PWEMODE_LENGTH 5 -#define H2C_92C_JOINBSSRPT_LENGTH 1 -#define H2C_92C_RSVDPAGE_LOC_LEN 5 -#define H2C_92C_RSVDPAGE_LOC_2_LEN 5 -#define H2C_92C_WLANINFO_LENGTH 3 -#define H2C_92C_AP_OFFLOAD_LENGTH 3 -#define H2C_92C_WOWLAN_LENGTH 4 -#define H2C_92C_KEEP_ALIVE_CTRL_LENGTH 3 -#define H2C_92C_BT_FW_PATCH_LEN 3 -#define H2C_92C_BT_RADIO_STATE_LEN 1 -#define H2C_92C_REALWOW_RSVDPAGE_LOC_LENGTH 4 -#if(USE_OLD_WOWLAN_DEBUG_FW == 0) -#define H2C_92C_REMOTE_WAKE_CTRL_LEN 1 -#else -#define H2C_92C_REMOTE_WAKE_CTRL_LEN 3 -#endif -#define H2C_92C_ARP_NDP_OFFLOAD_LENGTH 1 -#define H2C_92C_GTK_OFFLOAD_LENGTH 1 -#define H2C_92C_REMOTE_WAKEUP_SEC_INFO_LEN 3 -#define H2C_92C_FW_PATTERN_RSVDPAGE_LOC_LEN 4 -#define H2C_92C_DISCONNECT_DECISION_CTRL_LEN 3 - -//----------------------------------------- -// 88E Series -//----------------------------------------- -#define H2C_88E_RSVDPAGE_LOC_LEN 5 -#define H2C_88E_PWEMODE_LENGTH 5 -#define H2C_88E_JOINBSSRPT_LENGTH 1 -#define H2C_88E_AP_OFFLOAD_LENGTH 3 -#define H2C_88E_WOWLAN_LENGTH 4 -#define H2C_88E_KEEP_ALIVE_CTRL_LENGTH 3 -#if(USE_OLD_WOWLAN_DEBUG_FW == 0) -#define H2C_88E_REMOTE_WAKE_CTRL_LEN 1 -#else -#define H2C_88E_REMOTE_WAKE_CTRL_LEN 3 -#endif -#define H2C_88E_AOAC_GLOBAL_INFO_LEN 2 -#define H2C_88E_AOAC_RSVDPAGE_LOC_LEN 7 -#define H2C_88E_AOAC_RSVDPAGE2_LOC_LEN 7 -#define H2C_88E_SCAN_OFFLOAD_CTRL_LEN 4 -#define H2C_88E_BT_FW_PATCH_LEN 6 -#define H2C_88E_INACTIVE_PS_LEN 3 -#define H2C_88E_DISCONNECT_DECISION_CTRL_LEN 4 -#define H2C_88E_AOAC_RSVDPAGE3_LOC_LEN 7 - -//----------------------------------------- -// 8723B Series -//----------------------------------------- -#define H2C_8723B_WIFI_CALIBRATION_LEN 1 -#define H2C_8723B_FCS_INFO_LEN 7 -#define H2C_8723B_FCS_MACID_BITMAP_LEN 7 - -//----------------------------------------- -// 8703B Series -//----------------------------------------- -#define H2C_8703B_WIFI_CALIBRATION_LEN 1 - -//----------------------------------------- -// 8188F Series -//----------------------------------------- -#define H2C_8188F_WIFI_CALIBRATION_LEN 1 - - -//----------------------------------------- -// 8812 Series -//----------------------------------------- -#define H2C_8812_RSVDPAGE_FCS_LOC_LEN 3 -#define H2C_8812_FCS_INFO_LEN 7 - -//----------------------------------------- -// 8821 Series -//----------------------------------------- -#define H2C_8821A_RSVDPAGE_FCS_LOC_LEN 3 -#define H2C_8821A_FCS_INFO_LEN 7 -#define H2C_8821A_FCS_MACID_BITMAP_LEN 7 -#define H2C_8821B_FCS_INFO_LEN 7 -#define H2C_8821B_RSVDPAGE_FCS_LOC_LEN 3 - -//----------------------------------------- -// 8192E Series -//----------------------------------------- -#define H2C_8192E_RSVDPAGE_FCS_LOC_LEN 3 -#define H2C_8192E_FCS_INFO_LEN 7 -#define H2C_8192E_FCS_MACID_BITMAP_LEN 7 - -typedef struct _H2C_JOINBSSRPT_PARM{ - u1Byte OpMode; - u1Byte Ps_Qos_Info; - u1Byte Bssid[6]; - u2Byte BcnItv; - u2Byte Aid; -}H2C_JOINBSSRPT_PARM, *PH2C_JOINBSSRPT_PARM; - - -typedef struct _C2H_EVT_HDR{ - u1Byte CmdID: 4; - u1Byte CmdLen: 4; - u1Byte CmdSeq; -}C2H_EVT_HDR, *PC2H_EVT_HDR; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -typedef struct _H2C_WPA_PTK { - u1Byte kck[16]; /* EAPOL-Key Key Confirmation Key (KCK) */ - u1Byte kek[16]; /* EAPOL-Key Key Encryption Key (KEK) */ - u1Byte tk1[16]; /* Temporal Key 1 (TK1) */ - union { - u1Byte tk2[16]; //Temporal Key 2 (TK2) - struct { - u1Byte tx_mic_key[8]; - u1Byte rx_mic_key[8]; - }Athu; - }U; -}H2C_WPA_PTK; - -// For old Hw security engine. Support on 92C/8723A/88E/8812A, otherwise just use H2C_WPA_PTK structure. -typedef struct _H2C_WPA_TWO_WAY_PARA{ - //algorithm TKIP or AES - u1Byte pairwise_en_alg; - u1Byte group_en_alg; - H2C_WPA_PTK wpa_ptk_value; -#if(USE_OLD_WOWLAN_DEBUG_FW == 1) - u8Byte IV; -#endif -}H2C_WPA_TWO_WAY_PARA, *PH2C_WPA_TWO_WAY_PARA; - -typedef struct _H2C_REMOTE_WAKE_CTRL_INFO{ - u1Byte IV[8]; -}H2C_REMOTE_WAKE_CTRL_INFO, *PH2C_REMOTE_WAKE_CTRL_INFO; - - -typedef struct _NDP_INFO_{ - u1Byte bEnable:1; - u1Byte bCheckRemoveIP:1; // Need to Check Sender IP or not - u1Byte Rsvd:6; // Need to Check Sender IP or not - u1Byte NumberOfTargetIP; // Number of Check IP which NA query IP - u1Byte TagetLinkAddress[6]; // Maybe support change MAC address !! - u1Byte RemoteIPv6Address[16]; // Just respond IP - u1Byte TargetIP[2][16]; // target IP -}NDP_INFO,*PNDP_INFO; - - -typedef struct _H2C_PROTOCOL_OFFLOAD_INFO{ - NDP_INFO NDPInfo[2]; -} H2C_PROTOCOL_OFFLOAD_INFO, *PH2C_PROTOCOL_OFFLOAD_INFO; - - - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _HAL92C_P2P_PS_OFFLOAD -{ - u1Byte Offload_En:1; - u1Byte role:1; // 1: Owner, 0: Client - u1Byte CTWindow_En:1; - u1Byte NoA0_En:1; - u1Byte NoA1_En:1; - u1Byte AllStaSleep:1; - u1Byte discovery:1; -}HAL92C_P2P_PS_OFFLOAD, *PHAL92C_P2P_PS_OFFLOAD; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -typedef struct _H2C_SS_DRV_CTRL{ - u1Byte ChnlListLen; // scan channel list length - u1Byte OriginalChl; // current client channel - u1Byte OriginalBW; // current client BW 20M/40M/80M - u1Byte Originalch40offset; // 40M second channel offset - u1Byte Originalch80offset; // 80M second channel offset - u1Byte bPriodScan; // Fw periodically scan. - u1Byte PriodScanTime; // Fw periodical scan time. unit: 1sec. - u1Byte bRFEEnable; // for 8812A switch band - u1Byte RFEType; - u1Byte Rsvd[7]; -}H2C_SS_DRV_CTRL, *PH2C_SS_DRV_CTRL; - - -typedef struct _H2C_NLO_HEADER_INFO{ - u1Byte NumOfEntry; - u1Byte Rsvd1[3]; - u1Byte FastScanPeriod[4]; - u1Byte FastScanIterations[4]; - u1Byte SlowScanPeriod[4]; - u1Byte SsidLen[16]; - u1Byte Cipher[16]; - u1Byte ChannelList[16]; -}H2C_NLO_HEADER_INFO, *PH2C_NLO_HEADER_INFO; - - -#define H2C_MAC_MODE_SEL 9 - -//#define MAX_RSVD_PAGE_BUF_LEN (128*9) // page size * the rsvd page packet number in Tx pkt buf - -// Description: Determine the types of C2H events that are the same in driver and Fw. -// Fisrt constructed by tynli. 2009.10.09. -typedef enum _RTL8192C_C2H_EVT -{ - C2H_DBG = 0, - C2H_TSF = 1, - C2H_AP_RPT_RSP = 2, - C2H_CCX_TX_RPT = 3, // The FW notify the report of the specific tx packet. - C2H_BT_RSSI = 4, - C2H_BT_OP_MODE = 5, - C2H_EXT_RA_RPT = 6, - C2H_HW_INFO_EXCH = 10, - C2H_C2H_H2C_TEST = 11, - C2H_BT_INFO = 12, - C2H_BT_MP = 15, - MAX_C2HEVENT -}RTL8192C_C2H_EVT; - -typedef enum _FW_SCAN_OFFLOAD_TYPE{ - FW_SCAN_OFFLOAD_D0 = 0, - FW_SCAN_OFFLOAD_D3 = 1, -}FW_SCAN_OFFLOAD_TYPE; - -//========================================================== -//---------------------------------------------------------------------- -// Fw Initial Offload command -//---------------------------------------------------------------------- -#define INIT_OFFLOAD_ACTION_LLT BIT0 -#define INIT_OFFLOAD_ACTION_R_EFUSE BIT1 -#define INIT_OFFLOAD_ACTION_EFUSE_PATCH BIT2 - -typedef enum _INIT_OFFLOAD_CMD{ - INIT_OFFLOAD_CMD_LLT = 0x01, - INIT_OFFLOAD_CMD_R_EFUSE = 0x02, - INIT_OFFLOAD_CMD_EFUSE_PATCH = 0x03, - INIT_OFFLOAD_CMD_WB_REG = 0x04, - INIT_OFFLOAD_CMD_WW_REG = 0x05, - INIT_OFFLOAD_CMD_WD_REG = 0x06, - INIT_OFFLOAD_CMD_W_RF = 0x07, - INIT_OFFLOAD_CMD_DELAY_US = 0x10, - INIT_OFFLOAD_CMD_DELAY_MS = 0x11, - INIT_OFFLOAD_CMD_END = 0xff, -}INIT_OFFLOAD_CMD, *PINIT_OFFLOAD_CMD; - -//---------------------------------------------------------------------- -// Fw wake up reason code -//---------------------------------------------------------------------- -// V1 is for 88C and 8723A. -typedef enum _FW_WOW_REASON_V1{ - FW_WOW_V1_PTK_UPDATE_EVENT = 0x01, - FW_WOW_V1_GTK_UPDATE_EVENT = 0x02, - FW_WOW_V1_DISASSOC_EVENT = 0x04, - FW_WOW_V1_DEAUTH_EVENT = 0x08, - FW_WOW_V1_FW_DISCONNECT_EVENT = 0x10, - FW_WOW_V1_HW_WAKE_PKT_EVENT = 0x20, - FW_WOW_V1_APPL_QQ = 0x21, //Application - FW_WOW_V1_FWPATTERNMATCH0 = 0x40, - FW_WOW_V1_FWPATTERNMATCH1 = 0x41, - FW_WOW_V1_FWPATTERNMATCH2 = 0x42, - FW_WOW_V1_FWPATTERNMATCH3 = 0x43, - FW_WOW_V1_ONWAKEUPPKT = 0x80, // 128 - FW_WOW_V1_RSPKTTIMEOUT = 0x81, // 129 - FW_WOW_V1_DHCPTIMEOUT = 0x82, // 130 - FW_WOW_V1_NLMATCH = 0x83, // 131 - FW_WOW_V1_REASON_MAX = 0xff, -}FW_WOW_REASON_V1, *PFW_WOW_REASON_V1; - -// After 8188E, we use V2 reason define. 88C/8723A use V1 reason. -typedef enum _FW_WOW_REASON_V2{ - FW_WOW_V2_PTK_UPDATE_EVENT = 0x01, - FW_WOW_V2_GTK_UPDATE_EVENT = 0x02, - FW_WOW_V2_DISASSOC_EVENT = 0x04, - FW_WOW_V2_DEAUTH_EVENT = 0x08, - FW_WOW_V2_FW_DISCONNECT_EVENT = 0x10, - FW_WOW_V2_MAGIC_PKT_EVENT = 0x21, - FW_WOW_V2_UNICAST_PKT_EVENT = 0x22, - FW_WOW_V2_PATTERN_PKT_EVENT = 0x23, - FW_WOW_V2_RTD3_SSID_MATCH_EVENT = 0x24, - FW_WOW_V2_REALWOW_V2_WAKEUPPKT = 0x30, - FW_WOW_V2_REALWOW_V2_ACKLOST = 0x31, - FW_WOW_V2_NLO_SSID_MATCH_EVENT = 0x55, - FW_WOW_V2_REASON_MAX = 0xff, -}FW_WOW_REASON, *PFW_WOW_REASON; - -#endif diff --git a/network/wlan/WDI/HAL/HalComLed.h b/network/wlan/WDI/HAL/HalComLed.h deleted file mode 100644 index eaee5e77..00000000 --- a/network/wlan/WDI/HAL/HalComLed.h +++ /dev/null @@ -1,284 +0,0 @@ -#ifndef __INC_HALCOMLED_H -#define __INC_HALCOMLED_H -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - HalComLed.h - -Abstract: - LED related data structure and interface to manipulate LED. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2012-12-23 Isaiah Create. - ---*/ - -//================================================================================ -// LED Behavior Constant. -//================================================================================ -// Default LED behavior. -// -#define LED_BLINK_NORMAL_INTERVAL 100 -#define LED_BLINK_SLOWLY_INTERVAL 200 - -#define LED_BLINK_LONG_INTERVAL 400 -#define LED_INITIAL_INTERVAL 1800 - - -// LED Customerization - -//NETTRONIX -#define LED_BLINK_NORMAL_INTERVAL_NETTRONIX 100 -#define LED_BLINK_SLOWLY_INTERVAL_NETTRONIX 2000 - -//PORNET -#define LED_BLINK_SLOWLY_INTERVAL_PORNET 1000 -#define LED_BLINK_NORMAL_INTERVAL_PORNET 100 -#define LED_BLINK_FAST_INTERVAL_BITLAND 30 - -//AzWave. -#define LED_CM2_BLINK_ON_INTERVAL 250 -#define LED_CM2_BLINK_OFF_INTERVAL 4750 -#define LED_CM8_BLINK_OFF_INTERVAL 3750 //for QMI - -//RunTop -#define LED_RunTop_BLINK_INTERVAL 300 - -//ALPHA -#define LED_BLINK_NO_LINK_INTERVAL_ALPHA 1000 -#define LED_BLINK_NO_LINK_INTERVAL_ALPHA_500MS 500 //add by ylb 20121012 for customer led for alpha -#define LED_BLINK_LINK_INTERVAL_ALPHA 500 //500 -#define LED_BLINK_SCAN_INTERVAL_ALPHA 180 //150 -#define LED_BLINK_FASTER_INTERVAL_ALPHA 50 -#define LED_BLINK_WPS_SUCESS_INTERVAL_ALPHA 5000 - -// 111122 by hpfan: Customized for Xavi -#define LED_CM11_BLINK_INTERVAL 300 -#define LED_CM11_LINK_ON_INTERVEL 3000 - -//Netgear -#define LED_BLINK_LINK_INTERVAL_NETGEAR 500 -#define LED_BLINK_LINK_SLOWLY_INTERVAL_NETGEAR 1000 - -#define LED_WPS_BLINK_OFF_INTERVAL_NETGEAR 100 -#define LED_WPS_BLINK_ON_INTERVAL_NETGEAR 500 - - -//Belkin AC950 -#define LED_BLINK_LINK_INTERVAL_ON_BELKIN 200 -#define LED_BLINK_LINK_INTERVAL_OFF_BELKIN 100 -#define LED_BLINK_ERROR_INTERVAL_BELKIN 100 - -//by chiyokolin for Azurewave -#define LED_CM12_BLINK_INTERVAL_5Mbps 160 -#define LED_CM12_BLINK_INTERVAL_10Mbps 80 -#define LED_CM12_BLINK_INTERVAL_20Mbps 50 -#define LED_CM12_BLINK_INTERVAL_40Mbps 40 -#define LED_CM12_BLINK_INTERVAL_80Mbps 30 -#define LED_CM12_BLINK_INTERVAL_MAXMbps 25 - -//ECS -#define LED_BLINK_INTERVAL_OVER_2Mbps 500 -#define LED_BLINK_INTERVAL_OVER_1Mbps 1000 - -//Dlink -#define LED_BLINK_NO_LINK_INTERVAL 1000 -#define LED_BLINK_LINK_IDEL_INTERVAL 100 - -#define LED_BLINK_SCAN_ON_INTERVAL 30 -#define LED_BLINK_SCAN_OFF_INTERVAL 300 - -#define LED_WPS_BLINK_ON_INTERVAL_DLINK 30 -#define LED_WPS_BLINK_OFF_INTERVAL_DLINK 300 -#define LED_WPS_BLINK_LINKED_ON_INTERVAL_DLINK 5000 - -//Mitac -#define LED_BLINK_TRX_INYERVAL_MITAC 500 -#define LED_BLINK_ON_OFF_INYERVAL_MITAC 100 - -//ELECOM -#define LED_BLINK_WPS_INTERVAL_ELECOM 500 -#define LED_BLINK_TRX_INTERVAL_ELECOM 100 - - - - -//================================================================================ -// LED object. -//================================================================================ - -typedef enum _LED_STATE{ - LED_UNKNOWN = 0, - LED_ON = 1, - LED_OFF = 2, - LED_BLINK_NORMAL = 3, - LED_BLINK_SLOWLY = 4, - LED_POWER_ON_BLINK = 5, - LED_SCAN_BLINK = 6, // LED is blinking during scanning period, the # of times to blink is depend on time for scanning. - LED_NO_LINK_BLINK = 7, // LED is blinking during no link state. - LED_BLINK_StartToBlink = 8, // Customzied for Sercomm Printer Server case - LED_BLINK_TXRX = 9, - LED_BLINK_WPS = 10, // LED is blinkg during WPS communication - LED_BLINK_WPS_STOP = 11, //for ALPHA - LED_BLINK_WPS_STOP_OVERLAP = 12, //for BELKIN - LED_BLINK_RUNTOP = 13, // Customized for RunTop - LED_BLINK_CAMEO = 14, - LED_BLINK_XAVI = 15, - LED_BLINK_ALWAYS_ON = 16, - LED_BLINK_LINK_IN_PROCESS = 17, //Customized for Belkin AC950 - LED_BLINK_AUTH_ERROR = 18, //Customized for Belkin AC950 - LED_BLINK_Azurewave_5Mbps = 19, - LED_BLINK_Azurewave_10Mbps = 20, - LED_BLINK_Azurewave_20Mbps = 21, - LED_BLINK_Azurewave_40Mbps = 22, - LED_BLINK_Azurewave_80Mbps = 23, - LED_BLINK_Azurewave_MAXMbps = 24, - LED_BLINK_LINK_IDEL = 25, - LED_BLINK_WPS_LINKED = 26, - LED_BLINK_TIME_BY_REG = 27, - LED_BLINK_ECS_Below_1Mbps = 28, - LED_BLINK_ECS_Over_1Mbps = 29, - LED_BLINK_ECS_Over_2Mbps = 30, -}LED_STATE; - -typedef enum _LED_PIN{ - LED_PIN_GPIO0, - LED_PIN_LED0, - LED_PIN_LED1, - LED_PIN_LED2, - LED_PIN_LED3, - LED_PIN_LED_ALL -}LED_PIN; - - - - - -//================================================================================ -// SDIO LED Definition. -//================================================================================ - - -#define IS_LED_WPS_BLINKING(_LED_SDIO) (((PLED_SDIO)_LED_SDIO)->CurrLedState==LED_BLINK_WPS \ - || ((PLED_SDIO)_LED_SDIO)->CurrLedState==LED_BLINK_WPS_STOP \ - || ((PLED_SDIO)_LED_SDIO)->bLedWPSBlinkInProgress) - -#define IS_LED_BLINKING(_LED_SDIO) (((PLED_SDIO)_LED_SDIO)->bLedWPSBlinkInProgress \ - ||((PLED_SDIO)_LED_SDIO)->bLedScanBlinkInProgress) - - -typedef enum _LED_STRATEGY_SDIO{ - SW_LED_MODE0, // SW control 1 LED via GPIO0. It is default option. - SW_LED_MODE1, // 2 LEDs, through LED0 and LED1. For ALPHA. - SW_LED_MODE2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard. - SW_LED_MODE3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case. - SW_LED_MODE4, //for Edimax / Belkin - SW_LED_MODE5, //for Sercomm / Belkin - SW_LED_MODE6, //for 88CU minicard, porting from ce SW_LED_MODE7 - SW_LED_MODE7, //for ECS - HW_LED, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.) -}LED_STRATEGY_SDIO, *PLED_STRATEGY_SDIO; - -typedef struct _LED_SDIO{ - PVOID pAdapter; - - LED_PIN LedPin; // Identify how to implement this SW led. - - LED_STATE CurrLedState; // Current LED state. - BOOLEAN bLedOn; // TRUE if LED is ON, FALSE if LED is OFF. - - BOOLEAN bSWLedCtrl; - - BOOLEAN bLedBlinkInProgress; // TRUE if it is blinking, FALSE o.w.. - // ALPHA, added by chiyoko, 20090106 - BOOLEAN bLedNoLinkBlinkInProgress; - BOOLEAN bLedLinkBlinkInProgress; - BOOLEAN bLedStartToLinkBlinkInProgress; - BOOLEAN bLedScanBlinkInProgress; - BOOLEAN bLedWPSBlinkInProgress; - - u4Byte BlinkTimes; // Number of times to toggle led state for blinking. - LED_STATE BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are. - - RT_TIMER BlinkTimer; // Timer object for led blinking. - RT_WORK_ITEM BlinkWorkItem; // Workitem used by BlinkTimer to manipulate H/W to blink LED. -} LED_SDIO, *PLED_SDIO; - -VOID -LedControlSDIO( - IN PADAPTER Adapter, - IN LED_CTL_MODE LedAction - ); - - -//================================================================================ -// Interface to manipulate LED objects. -//================================================================================ - -#define SwLedOn(_Adapter, _pLed) \ - if(IS_HARDWARE_TYPE_8814A(_Adapter)) \ - SwLedOn_8814A(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_JAGUAR(_Adapter)) \ - IS_HARDWARE_TYPE_8821(_Adapter) ? SwLedOn_8821A(_Adapter, _pLed) : SwLedOn_8812A(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8723B(_Adapter)||IS_HARDWARE_TYPE_8192E(_Adapter)) \ - IS_HARDWARE_TYPE_8192E(_Adapter) ? SwLedOn_8192E(_Adapter, _pLed) : SwLedOn_8723B(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8821B(_Adapter)) \ - SwLedOn_8821B(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8822B(_Adapter)) \ - SwLedOn_8822B(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8703B(_Adapter)) \ - SwLedOn_8703B(_Adapter,_pLed); \ - else if(IS_HARDWARE_TYPE_8188F(_Adapter)) \ - SwLedOn_8188F(_Adapter,_pLed); \ - else if(IS_HARDWARE_TYPE_8723D(_Adapter)) \ - SwLedOn_8723D(_Adapter,_pLed); \ - else \ - IS_HARDWARE_TYPE_8188E(_Adapter) ? SwLedOn_8188E(_Adapter, _pLed) : SwLedOn_Dummy(_Adapter, _pLed) - -#define SwLedOff(_Adapter, _pLed) \ - if(IS_HARDWARE_TYPE_8814A(_Adapter)) \ - SwLedOff_8814A(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_JAGUAR(_Adapter)) \ - IS_HARDWARE_TYPE_8821(_Adapter) ? SwLedOff_8821A(_Adapter, _pLed) : SwLedOff_8812A(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8723B(_Adapter)||IS_HARDWARE_TYPE_8192E(_Adapter)) \ - IS_HARDWARE_TYPE_8192E(_Adapter) ? SwLedOff_8192E(_Adapter, _pLed) : SwLedOff_8723B(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8821B(_Adapter)) \ - SwLedOff_8821B(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8822B(_Adapter)) \ - SwLedOff_8822B(_Adapter, _pLed); \ - else if(IS_HARDWARE_TYPE_8703B(_Adapter)) \ - SwLedOff_8703B(_Adapter,_pLed); \ - else if(IS_HARDWARE_TYPE_8188F(_Adapter)) \ - SwLedOff_8188F(_Adapter,_pLed); \ - else if(IS_HARDWARE_TYPE_8723D(_Adapter)) \ - SwLedOff_8723D(_Adapter,_pLed); \ - else \ - IS_HARDWARE_TYPE_8188E(_Adapter) ? SwLedOff_8188E(_Adapter, _pLed) : SwLedOff_Dummy(_Adapter, _pLed) - - -VOID -InitSwLeds( - IN PADAPTER Adapter - ); - -VOID -DeInitSwLeds( - IN PADAPTER Adapter - ); - -VOID -SwLedOn_Dummy( - IN PADAPTER Adapter, - IN PVOID pLed - ); - -VOID -SwLedOff_Dummy( - IN PADAPTER Adapter, - IN PVOID pLed - ); - -#endif /*__INC_HALCOMLED_H*/ diff --git a/network/wlan/WDI/HAL/HalComPhyCfg.h b/network/wlan/WDI/HAL/HalComPhyCfg.h deleted file mode 100644 index 0af6b8d5..00000000 --- a/network/wlan/WDI/HAL/HalComPhyCfg.h +++ /dev/null @@ -1,341 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2008, RealTEK Technology Inc. All Right Reserved. - * - * Module: __INC_HALCOMPHYCFG_H - * - * - * Note: - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h. - * 2. Reorganize code architecture. - * - *****************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __INC_HALCOMPHYCFG_H -#define __INC_HALCOMPHYCFG_H - - -//for PutRegsetting & GetRegSetting BitMask -#define bMaskLowNibble 0xf -#define bMaskHighNibble 0xf0 -#define bMaskByte2HighNibble 0x00f00000 -#define bMaskByte3LowNibble 0x0f000000 -#define bMaskL3Bytes 0x00ffffff -#define bMaskByte0 0xff // Reg 0xc50 rOFDM0_XAAGCCore~0xC6f -#define bMaskByte1 0xff00 -#define bMaskByte2 0xff0000 -#define bMaskByte3 0xff000000 -#define bMaskHWord 0xffff0000 -#define bMaskLWord 0x0000ffff -#define bMaskDWord 0xffffffff -#define bMask12Bits 0xfff -#define bMask7bits 0x7f -#define bMaskH4Bits 0xf0000000 -#define bMaskOFDM_D 0xffc00000 -#define bMaskCCK 0x3f3f3f3f - -#define bRFRegOffsetMask 0xfffff - - -typedef enum _RATE_SECTION { - CCK = 0, - OFDM, - HT_MCS0_MCS7, - HT_MCS8_MCS15, - HT_MCS16_MCS23, - HT_MCS24_MCS31, - VHT_1SSMCS0_1SSMCS9, - VHT_2SSMCS0_2SSMCS9, - VHT_3SSMCS0_3SSMCS9, - VHT_4SSMCS0_4SSMCS9, -} RATE_SECTION; - -typedef enum _RF_TX_NUM { - RF_1TX = 0, - RF_2TX, - RF_3TX, - RF_4TX, - RF_MAX_TX_NUM, - RF_TX_NUM_NONIMPLEMENT, -} RF_TX_NUM; - -/*--------------------------Define Parameters-------------------------------*/ - -#define MAX_DOZE_WAITING_TIMES_9x 64 - -#define MAX_TXPWR_IDX_NMODE 63 - -#define HP_THERMAL_NUM 8 - - - -/* Channel switch:The size of command tables for switch channel*/ -#define MAX_PRECMD_CNT 16 -#define MAX_RFDEPENDCMD_CNT 16 -#define MAX_POSTCMD_CNT 16 - - -// Tx Power Limit Table Size -#define MAX_REGULATION_NUM 4 -#define MAX_RF_PATH_NUM_IN_POWER_LIMIT_TABLE 4 -#define MAX_2_4G_BANDWITH_NUM 2 -#define MAX_RATE_SECTION_NUM 10 -#define MAX_5G_BANDWITH_NUM 4 -#define MAX_BASE_NUM_IN_PHY_REG_PG_2_4G 10 // CCK:1, OFDM:1, HT:4, VHT:4 -#define MAX_BASE_NUM_IN_PHY_REG_PG_5G 9 // OFDM:1, HT:4, VHT:4 - -/*------------------------------Define structure----------------------------*/ -typedef struct _BB_REGISTER_DEFINITION{ - u4Byte rfintfs; // set software control: - // 0x870~0x877[8 bytes] - - u4Byte rfintfo; // output data: - // 0x860~0x86f [16 bytes] - - u4Byte rfintfe; // output enable: - // 0x860~0x86f [16 bytes] - - u4Byte rf3wireOffset; // LSSI data: - // 0x840~0x84f [16 bytes] - - u4Byte rfHSSIPara2; // wire parameter control2 : - // 0x824~0x827,0x82c~0x82f, 0x834~0x837, 0x83c~0x83f [16 bytes] - - u4Byte rfLSSIReadBack; //LSSI RF readback data SI mode - // 0x8a0~0x8af [16 bytes] - - u4Byte rfLSSIReadBackPi; //LSSI RF readback data PI mode 0x8b8-8bc for Path A and B - -}BB_REGISTER_DEFINITION_T, *PBB_REGISTER_DEFINITION_T; - -// -// We should take RTL8723B into consideration, 2012.10.08 -// -#define phy_BB_Config_ParaFile(_Adapter) \ - (IS_HARDWARE_TYPE_8821B(_Adapter))?phy_BB8821B_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8814A(_Adapter))?phy_BB8814A_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8812A(_Adapter))?phy_BB8812A_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8821(_Adapter))?phy_BB8821A_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8723B(_Adapter))?phy_BB8723B_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8723D(_Adapter))?phy_BB8723D_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8703B(_Adapter))?phy_BB8703B_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8188F(_Adapter))?phy_BB8188F_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8188E(_Adapter)? phy_BB8188E_Config_ParaFile(_Adapter) :\ - (IS_HARDWARE_TYPE_8822B(_Adapter))?PHY_BB8822B_Config_ParaFile(_Adapter):\ - (IS_HARDWARE_TYPE_8192E(_Adapter)?phy_BB8192E_Config_ParaFile(_Adapter):\ - phy_BB8723B_Config_ParaFile(_Adapter))) - -#define PHY_GetTxPowerIndex( pAdapter, RFPath, Rate, BandWidth, Channel ) \ - (IS_HARDWARE_TYPE_8814A(pAdapter)) ? PHY_GetTxPowerIndex_8814A( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8821B(pAdapter)) ? PHY_GetTxPowerIndex_8821B( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8822B(pAdapter)) ? PHY_GetTxPowerIndex_8822B( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8812A(pAdapter)) ? PHY_GetTxPowerIndex_8812A( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8821A(pAdapter)) ? PHY_GetTxPowerIndex_8821A( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8723B(pAdapter)) ? PHY_GetTxPowerIndex_8723B( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8703B(pAdapter)) ? PHY_GetTxPowerIndex_8703B( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8188F(pAdapter)) ? PHY_GetTxPowerIndex_8188F( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8192E(pAdapter)) ? PHY_GetTxPowerIndex_8192E( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8723D(pAdapter)) ? PHY_GetTxPowerIndex_8723D( pAdapter, RFPath, Rate, BandWidth, Channel ):\ - (IS_HARDWARE_TYPE_8188E(pAdapter)) ? PHY_GetTxPowerIndex_8188E( pAdapter, RFPath, Rate, BandWidth, Channel ):0\ - -#define PHY_SetTxPowerIndex( pAdapter, PowerIndex, RFPath, Rate ) \ - do { \ - PHY_SetTxPowerIndexShadow( pAdapter, PowerIndex, RFPath, Rate );\ - if (IS_HARDWARE_TYPE_8814A(pAdapter)) PHY_SetTxPowerIndex_8814A( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8821B(pAdapter)) PHY_SetTxPowerIndex_8821B( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8822B(pAdapter)) PHY_SetTxPowerIndex_8822B( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8812A(pAdapter)) PHY_SetTxPowerIndex_8812A( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8821A(pAdapter)) PHY_SetTxPowerIndex_8821A( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8723B(pAdapter)) PHY_SetTxPowerIndex_8723B( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8703B(pAdapter)) PHY_SetTxPowerIndex_8703B( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8188F(pAdapter)) PHY_SetTxPowerIndex_8188F( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8192E(pAdapter)) PHY_SetTxPowerIndex_8192E( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8723D(pAdapter)) PHY_SetTxPowerIndex_8723D( pAdapter, PowerIndex, RFPath, Rate );\ - else if (IS_HARDWARE_TYPE_8188E(pAdapter)) PHY_SetTxPowerIndex_8188E( pAdapter, PowerIndex, RFPath, Rate );\ - }while(0) - -//---------------------------------------------------------------------- -// Initial MAC/BB/RF config by reading MAC/BB/RF txt. -//---------------------------------------------------------------------- - -//---------------------------------------------------------------------- -// Initial MAC/BB/RF config by reading Hard Code. -//---------------------------------------------------------------------- - -RT_STATUS -phy_ConfigBBWithHeaderFile( - IN PADAPTER Adapter, - IN u1Byte ConfigType -); - -RT_STATUS -PHY_ConfigRFWithHeaderFile( - IN PADAPTER Adapter, - IN RF_CONTENT Content, - IN u1Byte eRFPath -); - - -RT_STATUS -phy_ConfigBBWithPgParaFile( - IN PADAPTER Adapter, - IN ps1Byte pFileName -); - -RT_STATUS -PHY_ConfigRFWithPowerLimitTableParaFile( - IN PADAPTER Adapter, - IN ps1Byte pFileName -); - -RT_STATUS -PHY_ConfigRFWithCustomPowerLimitTableParaFile( - IN PADAPTER Adapter, - IN pu1Byte pFileName, - IN BOOLEAN checkInit -); - -RT_STATUS -PHY_ConfigBBWithCustomPgParaFile( - IN PADAPTER Adapter, - IN pu1Byte pFileName, - IN BOOLEAN checkInit -); - - - - -//---------------------------------------------------------------------- -// Initial MAC/BB config from File or Hard Code. -//---------------------------------------------------------------------- -RT_STATUS -PHY_MACConfig( - IN PADAPTER Adapter -); - -RT_STATUS -PHY_BBConfig( - IN PADAPTER Adapter -); - -//---------------------------------------------------------------------- -s4Byte -phy_TxPwrIdxToDbm( - IN PADAPTER Adapter, - IN WIRELESS_MODE WirelessMode, - IN u1Byte TxPwrIdx - ); - - -u1Byte -PHY_DbmToTxPwrIdx( - IN PADAPTER Adapter, - IN WIRELESS_MODE WirelessMode, - IN s4Byte PowerInDbm - ); - -RT_CHANNEL_DOMAIN -PHY_MapChannelPlan( - IN PADAPTER Adapter, - IN u2Byte HalChannelPlan - ); - -void -SINGLEMODULE_MAPFUN( - IN PADAPTER Adapter, - IN u2Byte Regchannelplane, - IN u1Byte RegEnableAdaptivity, - IN u2Byte RegHTMode - ); - -VOID -PHY_MapChnlPlanRegulatory( - IN PADAPTER Adapter - ); - -VOID -PHY_IQCalibrate( - IN PADAPTER Adapter, - IN BOOLEAN bReCovery - ); - - -VOID -PHY_SetTxPowerIndexShadow( - IN PADAPTER Adapter, - IN u4Byte PowerIndex, - IN u1Byte RFPath, - IN u1Byte Rate - ); - -u1Byte -PHY_GetTxPowerIndexShadow( - IN PADAPTER Adapter, - IN u1Byte RFPath, - IN u1Byte Rate - ); - -VOID -PHY_LCCalibrate_Dummy( - IN PDM_ODM_T pDM_Odm - ); - -#define PHY_LCCalibrate(pDM_Odm) \ - (pDM_Odm->SupportICType == ODM_RTL8723B) ? PHY_LCCalibrate_8723B(pDM_Odm) :\ - PHY_LCCalibrate_Dummy(pDM_Odm) - -#define PHY_SetRFPathSwitch(_Adapter,_bMain) \ - (IS_HARDWARE_TYPE_8814A(_Adapter)) ? PHY_SetRFPathSwitch_8814A(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8821B(_Adapter)) ? PHY_SetRFPathSwitch_8821B(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8822B(_Adapter)) ? PHY_SetRFPathSwitch_8822B(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8723B(_Adapter)) ? PHY_SetRFPathSwitch_8723B(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8703B(_Adapter)) ? PHY_SetRFPathSwitch_8703B(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8723D(_Adapter)) ? PHY_SetRFPathSwitch_8723D(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8192E(_Adapter)) ? PHY_SetRFPathSwitch_8192E(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_JAGUAR(_Adapter)) ? PHY_SetRFPathSwitch_8812A(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8188E(_Adapter)) ? PHY_SetRFPathSwitch_8188E(_Adapter,_bMain) :\ - (IS_HARDWARE_TYPE_8188F(_Adapter)) ? PHY_SetRFPathSwitch_8188F(_Adapter,_bMain) : 0 - -#define PHY_QueryRFPathSwitch(_Adapter) \ - (IS_HARDWARE_TYPE_8814A(_Adapter)) ? PHY_QueryRFPathSwitch_8814A(_Adapter) :\ - (IS_HARDWARE_TYPE_8821B(_Adapter)) ? PHY_QueryRFPathSwitch_8821B(_Adapter) :\ - (IS_HARDWARE_TYPE_8822B(_Adapter)) ? PHY_QueryRFPathSwitch_8822B(_Adapter) :\ - (IS_HARDWARE_TYPE_8723B(_Adapter)) ? PHY_QueryRFPathSwitch_8723B(_Adapter) :\ - (IS_HARDWARE_TYPE_8723D(_Adapter)) ? PHY_QueryRFPathSwitch_8723D(_Adapter) :\ - (IS_HARDWARE_TYPE_8703B(_Adapter)) ? PHY_QueryRFPathSwitch_8703B(_Adapter) :\ - (IS_HARDWARE_TYPE_8192E(_Adapter)) ? PHY_QueryRFPathSwitch_8192E(_Adapter) :\ - (IS_HARDWARE_TYPE_8812A(_Adapter)) ? PHY_QueryRFPathSwitch_8812(_Adapter) :\ - (IS_HARDWARE_TYPE_8821A(_Adapter)) ? PHY_QueryRFPathSwitch_8821A(_Adapter) :\ - (IS_HARDWARE_TYPE_8188E(_Adapter)) ? PHY_QueryRFPathSwitch_8188E(_Adapter) :\ - (IS_HARDWARE_TYPE_8188F(_Adapter)) ? PHY_QueryRFPathSwitch_8188F(_Adapter): 0 - - -typedef struct __RT_SINGLEMODULE_ENTRY -{ - u4Byte country_code; - u2Byte Regchannelplane; - u1Byte RegEnableAdaptivity; - u2Byte RegHTMode; - - void (*Func)( // The handler function - IN PADAPTER pAdapter, - IN u2Byte Regchannelplane, - IN u1Byte RegEnableAdaptivity, - IN u2Byte RegHTMode - ); - -}RT_SINGLEMODULE_ENTRY; - -extern RT_SINGLEMODULE_ENTRY RT_SUPPORT_COUNTRY[]; -extern u4Byte GLNumOfSupportCountry; -/*--------------------------Exported Function prototype---------------------*/ - -#endif // __INC_HALCOMPHYCFG_H - diff --git a/network/wlan/WDI/HAL/HalComReg.h b/network/wlan/WDI/HAL/HalComReg.h deleted file mode 100644 index 64577a97..00000000 --- a/network/wlan/WDI/HAL/HalComReg.h +++ /dev/null @@ -1,1705 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2009, RealTEK Technology Inc. All Right Reserved. - * - * Module: __INC_HALCOMREG_H - * - * - * Note: 1. Define Mac register address and corresponding bit mask map - * 2. CCX register - * 3. Backward compatible register with useless address. - * 4. Define 92CU required register address and definition. - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * - *****************************************************************************/ -#ifndef __INC_HALCOMREG_H -#define __INC_HALCOMREG_H - -#ifndef BIT -#define BIT(x) (1 << (x)) -#endif - -//============================================================ -// 8192C Regsiter offset definition -//============================================================ - -#define HAL_92C_NAV_UPPER_UNIT 128 // micro-second - - -// 8188E PKT_BUFF_ACCESS_CTRL value -#define TXPKT_BUF_SELECT 0x69 -#define RXPKT_BUF_SELECT 0xA5 -#define DISABLE_TRXPKT_BUF_ACCESS 0x0 - -//============================================================ -// -//============================================================ - -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -#define REG_SYS_ISO_CTRL 0x0000 -#define REG_SYS_FUNC_EN 0x0002 -#define REG_APS_FSMCO 0x0004 -#define REG_SYS_CLKR 0x0008 -#define REG_9346CR 0x000A -#define REG_EE_VPD 0x000C -#define REG_AFE_MISC 0x0010 -#define REG_SPS0_CTRL 0x0011 -#define REG_SPS0_CTRL_6 0x0016 -#define REG_POWER_OFF_IN_PROCESS 0x0017 -#define REG_SPS_OCP_CFG 0x0018 -#define REG_RSV_CTRL 0x001C -#define REG_RF_CTRL 0x001F -#define REG_LDOA15_CTRL 0x0020 -#define REG_LDOV12D_CTRL 0x0021 -#define REG_LDOHCI12_CTRL 0x0022 -#define REG_LPLDO_CTRL 0x0023 -#define REG_AFE_XTAL_CTRL 0x0024 -//#define REG_AFE_LDO_CTRL 0x0027 // 1.5v for 8188EE test chip, 1.4v for MP chip -#define REG_AFE_PLL_CTRL 0x0028 -#define REG_MAC_PHY_CTRL 0x002c //for 92d, DMDP,SMSP,DMSP contrl -#define REG_EFUSE_CTRL 0x0030 -#define REG_EFUSE_TEST 0x0034 -#define REG_PWR_DATA 0x0038 -#define REG_CAL_TIMER 0x003C -#define REG_ACLK_MON 0x003E -#define REG_GPIO_MUXCFG 0x0040 -#define REG_GPIO_IO_SEL 0x0042 -#define REG_MAC_PINMUX_CFG 0x0043 -#define REG_GPIO_PIN_CTRL 0x0044 -#define REG_GPIO_INTM 0x0048 -#define REG_LEDCFG0 0x004C -#define REG_LEDCFG1 0x004D -#define REG_LEDCFG2 0x004E -#define REG_LEDCFG3 0x004F -#define REG_FSIMR 0x0050 -#define REG_FSISR 0x0054 -#define REG_HSIMR 0x0058 -#define REG_HSISR 0x005c -#define REG_GPIO_PIN_CTRL_2 0x0060 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Pin Control. -#define REG_GPIO_IO_SEL_2 0x0062 // RTL8723 WIFI/BT/GPS Multi-Function GPIO Select. -#define REG_MULTI_FUNC_CTRL 0x0068 // RTL8723 WIFI/BT/GPS Multi-Function control source. -#define REG_GPIO_OUTPUT 0x006c -#define REG_AFE_XTAL_CTRL_EXT 0x0078 //RTL8188E -#define REG_XCK_OUT_CTRL 0x007c //RTL8188E -#define REG_MCUFWDL 0x0080 -#define REG_WOL_EVENT 0x0081 //RTL8192C, RTL8723A -#define REG_MCUTSTCFG 0x0084 -#define REG_HMEBOX_EXT_0 0x0088 -#define REG_FW_DBG_STATUS 0x0088 // Support on 8723B/8192E/8812A/8821A -#define REG_HMEBOX_EXT_1 0x008A -#define REG_HMEBOX_EXT_2 0x008C -#define REG_HMEBOX_EXT_3 0x008E -#define REG_HOST_SUSP_CNT 0x00BC // RTL8192C Host suspend counter on FPGA platform -#define REG_SYSTEM_ON_CTRL 0x00CC // For 8723AE Reset after S3 -#define REG_HIMR_88E 0x00B0 //RTL8188E -#define REG_HISR_88E 0x00B4 //RTL8188E -#define REG_HISR0 0x00B4 -#define REG_HIMRE_88E 0x00B8 //RTL8188E -#define REG_HISRE_88E 0x00BC //RTL8188E -#define REG_PMC_DBG_CTRL2 0x00CC -#define REG_EFUSE_ACCESS 0x00CF // Efuse access protection for RTL8723 -#define REG_BIST_SCAN 0x00D0 -#define REG_BIST_RPT 0x00D4 -#define REG_BIST_ROM_RPT 0x00D8 -#define REG_USB_SIE_INTF 0x00E0 -#define REG_PCIE_MIO_INTF 0x00E4 -#define REG_PCIE_MIO_INTD 0x00E8 -#define REG_HPON_FSM 0x00EC -#define REG_SYS_CFG 0x00F0 -#define REG_GPIO_OUTSTS 0x00F4 // For RTL8723 only. -#define REG_TYPE_ID 0x00FC - -// -// 2010/12/29 MH Add for 92D -// -#define REG_MAC_PHY_CTRL_NORMAL 0x00f8 - -#define REG_MAC0 0x0081 -#define REG_MAC1 0x0053 -#define FW_MAC0_ready 0x18 -#define FW_MAC1_ready 0x1A -#define MAC0_ON BIT7 -#define MAC1_ON BIT0 -#define mac0_ready BIT0 -#define mac1_ready BIT0 - - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -#define REG_CR 0x0100 -#define REG_PBP 0x0104 -#define REG_PKT_BUFF_ACCESS_CTRL 0x0106 -#define REG_TRXDMA_CTRL 0x010C -#define REG_TRXFF_BNDY 0x0114 -#define REG_TRXFF_STATUS 0x0118 -#define REG_RXFF_PTR 0x011C -#define REG_HIMR 0x0120 -#define REG_HISR 0x0124 -#define REG_HIMRE 0x0128 -#define REG_HISRE 0x012C -//#define REG_CPWM 0x012F -#define REG_FWIMR 0x0130 -#define REG_FWISR 0x0134 -#define REG_FTIMR 0x0138 -#define REG_FTISR 0x013C //RTL8192C -#define REG_PKTBUF_DBG_CTRL 0x0140 -#define REG_RXPKTBUF_CTRL (REG_PKTBUF_DBG_CTRL+2) -#define REG_PKTBUF_DBG_DATA_L 0x0144 -#define REG_PKTBUF_DBG_DATA_H 0x0148 - -#define REG_TC0_CTRL 0x0150 -#define REG_TC1_CTRL 0x0154 -#define REG_TC2_CTRL 0x0158 -#define REG_TC3_CTRL 0x015C -#define REG_TC4_CTRL 0x0160 -#define REG_TCUNIT_BASE 0x0164 -#define REG_MBIST_START 0x0174 -#define REG_MBIST_DONE 0x0178 -//#define REG_MBIST_FAIL 0x017C -#define REG_32K_CTRL 0x0194 //RTL8188E -#define REG_C2HEVT_MSG_NORMAL 0x01A0 -#define REG_C2HEVT_CLEAR 0x01AF -#define REG_MCUTST_1 0x01c0 -#define REG_MCUTST_WOWLAN 0x01C7 // Defined after 8188E series. -#define REG_FMETHR 0x01C8 -#define REG_HMETFR 0x01CC -#define REG_HMEBOX_0 0x01D0 -#define REG_HMEBOX_1 0x01D4 -#define REG_HMEBOX_2 0x01D8 -#define REG_HMEBOX_3 0x01DC -#define REG_LLT_INIT 0x01E0 -#define REG_LLT_ADDR 0x01E4//20130415 KaiYuan add for 8814 -#define REG_HMEBOX_EXT0 0x01F0 // For 8723B, 8192E, 8812, 8821 -#define REG_HMEBOX_EXT1 0x01F4 // For 8723B, 8192E, 8812, 8821 -#define REG_HMEBOX_EXT2 0x01F8 // For 8723B, 8192E, 8812, 8821 -#define REG_HMEBOX_EXT3 0x01FC // For 8723B, 8192E, 8812, 8821 - - -#define REG_HMEBOX_EXT_0_88E ((pHalData->bIsMPChip) ? 0x01F0 : 0x0088) -#define REG_HMEBOX_EXT_1_88E ((pHalData->bIsMPChip) ? 0x01F4 : 0x008A) -#define REG_HMEBOX_EXT_2_88E ((pHalData->bIsMPChip) ? 0x01F8 : 0x008C) -#define REG_HMEBOX_EXT_3_88E ((pHalData->bIsMPChip) ? 0x01FC : 0x008E) - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -#define REG_RQPN 0x0200 -#define REG_FIFOPAGE 0x0204 -#define REG_TDECTRL 0x0208 -#define REG_TXDMA_OFFSET_CHK 0x020C -#define REG_TXDMA_STATUS 0x0210 -#define REG_RQPN_NPQ 0x0214 -#define REG_TDECTRL1 0x0208 - -//----------------------------------------------------- -// -// 0x0280h ~ 0x02FFh RXDMA Configuration -// -//----------------------------------------------------- -#define REG_RXDMA_AGG_PG_TH 0x0280 -#define REG_FW_UPD_RDPTR 0x0284 // FW shall update this register before FW write RXPKT_RELEASE_POLL to 1 -#define REG_RXDMA_CONTROL 0x0286 // Control the RX DMA. -#define REG_RXPKT_NUM_OLD 0x0287 // The number of packets in RXPKTBUF. -#define REG_RXDMA_STATUS 0x0288 - - -//----------------------------------------------------- -// -// 0x0300h ~ 0x03FFh PCIe -// -//----------------------------------------------------- -#define REG_PCIE_CTRL_REG 0x0300 -#define REG_INT_MIG 0x0304 // Interrupt Migration -#define REG_BCNQ_DESA 0x0308 // TX Beacon Descriptor Address -#define REG_HQ_DESA 0x0310 // TX High Queue Descriptor Address -#define REG_MGQ_DESA 0x0318 // TX Manage Queue Descriptor Address -#define REG_VOQ_DESA 0x0320 // TX VO Queue Descriptor Address -#define REG_VIQ_DESA 0x0328 // TX VI Queue Descriptor Address -#define REG_BEQ_DESA 0x0330 // TX BE Queue Descriptor Address -#define REG_BKQ_DESA 0x0338 // TX BK Queue Descriptor Address -#define REG_RX_DESA 0x0340 // RX Queue Descriptor Address -//sherry added for DBI Read/Write 20091126 -#define REG_DBI_WDATA 0x0348 // Backdoor REG for Access Configuration -#define REG_DBI_RDATA 0x034C //Backdoor REG for Access Configuration -#define REG_DBI_CTRL 0x0350 //Backdoor REG for Access Configuration -//#define REG_DBI_FLAG 0x0352 //Backdoor REG for Access Configuration#define REG_MDIO 0x0354 // MDIO for Access PCIE PHY -#define REG_MDIO 0x0354 // MDIO for Access PCIE PHY -#define REG_DBG_SEL 0x0360 // Debug Selection Register -#define REG_PCIE_HRPWM 0x0361 //PCIe RPWM -#define REG_PCIE_HCPWM 0x0363 //PCIe CPWM -#define REG_WATCH_DOG 0x0368 - -// RTL8723 series ------------------------------- -#define REG_PCIE_HISR_EN 0x0394 //PCIE Local Interrupt Enable Register -#define REG_PCIE_HISR 0x03A0 -#define REG_PCIE_HISRE 0x03A4 -#define REG_PCIE_HIMR 0x03A8 -#define REG_PCIE_HIMRE 0x03AC - -#define REG_USB_HIMR 0xFE38 -#define REG_USB_HIMRE 0xFE3C -#define REG_USB_HISR 0xFE78 -#define REG_USB_HISRE 0xFE7C - -// spec version 11 -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -#define REG_VOQ_INFORMATION 0x0400 -#define REG_VIQ_INFORMATION 0x0404 -#define REG_BEQ_INFORMATION 0x0408 -#define REG_BKQ_INFORMATION 0x040C -#define REG_MGQ_INFORMATION 0x0410 -#define REG_HGQ_INFORMATION 0x0414 -#define REG_BCNQ_INFORMATION 0x0418 -#define REG_TXPKT_EMPTY 0x041A - -#define REG_FWHW_TXQ_CTRL 0x0420 -#define REG_HWSEQ_CTRL 0x0423 -#define REG_TXPKTBUF_BCNQ_BDNY 0x0424 -#define REG_TXPKTBUF_MGQ_BDNY 0x0425 -#define REG_LIFECTRL_CTRL 0x0426 -#define REG_MULTI_BCNQ_OFFSET 0x0427 -#define REG_SPEC_SIFS 0x0428 -#define REG_RL 0x042A -#define REG_DARFRC 0x0430 -#define REG_RARFRC 0x0438 -#define REG_RRSR 0x0440 -#define REG_ARFR0 0x0444 -#define REG_ARFR1 0x0448 -#define REG_ARFR2 0x044C -#define REG_ARFR3 0x0450 -#define REG_TXPKTBUF_BCNQ_BDNY1 0x0424 - -#define REG_AGGLEN_LMT 0x0458 -#define REG_AMPDU_MIN_SPACE 0x045C -#define REG_TXPKTBUF_WMAC_LBK_BF_HD 0x045D -#define REG_FAST_EDCA_CTRL 0x0460 -#define REG_RD_RESP_PKT_TH 0x0463 - -#define REG_INIRTS_RATE_SEL 0x0480 - -// [483h] REG_DATA_SC -// [3:0] = BIT_TXSC_20M, [7:4] = BIT_TXSC_40M -#define REG_DATA_SC 0x483 -#define REG_INIDATA_RATE_SEL 0x0484 - -#define REG_POWER_STAGE1 0x04B4 -#define REG_POWER_STAGE2 0x04B8 -#define REG_PKT_VO_VI_LIFE_TIME 0x04C0 -#define REG_PKT_BE_BK_LIFE_TIME 0x04C2 -#define REG_STBC_SETTING 0x04C4 -#define REG_QUEUE_CTRL 0x04C6 -#define REG_PROT_MODE_CTRL 0x04C8 -#define REG_MAX_AGGR_NUM 0x04CA -#define REG_RTS_MAX_AGGR_NUM 0x04CB -#define REG_BAR_MODE_CTRL 0x04CC -#define REG_RA_TRY_RATE_AGG_LMT 0x04CF -#define REG_EARLY_MODE_CONTROL 0x04D0 -#define REG_HW_SEQ_NUM_0 0x04D8 -#define REG_HW_SEQ_NUM_1 0x04DA -#define REG_NQOS_SEQ 0x04DC -#define REG_QOS_SEQ 0x04DE -#define REG_NEED_CPU_HANDLE 0x04E0 -#define REG_PKT_LOSE_RPT 0x04E1 -#define REG_PTCL_ERR_STATUS 0x04E2 -#define REG_TX_RPT_CTRL 0x04EC -#define REG_TX_RPT_TIME 0x04F0 // 2 byte -#define REG_DUMMY 0x04FC - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -#define REG_EDCA_VO_PARAM 0x0500 -#define REG_EDCA_VI_PARAM 0x0504 -#define REG_EDCA_BE_PARAM 0x0508 -#define REG_EDCA_BK_PARAM 0x050C -#define REG_BCNTCFG 0x0510 -#define REG_PIFS 0x0512 -#define REG_RDG_PIFS 0x0513 -#define REG_SIFS_CTX 0x0514 -#define REG_SIFS_TRX 0x0516 -#define REG_TSFTR_SNC_OFFSET 0x0518 -#define REG_AGGR_BREAK_TIME 0x051A -#define REG_SLOT 0x051B -#define REG_TX_PTCL_CTRL 0x0520 -#define REG_TXPAUSE 0x0522 -#define REG_DIS_TXREQ_CLR 0x0523 -#define REG_RD_CTRL 0x0524 -// -// Format for offset 540h-542h: -// [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT. -// [7:4]: Reserved. -// [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet. -// [23:20]: Reserved -// Description: -// | -// |<--Setup--|--Hold------------>| -// --------------|---------------------- -// | -// TBTT -// Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold. -// Described by Designer Tim and Bruce, 2011-01-14. -// -#define REG_TBTT_PROHIBIT 0x0540 -#define REG_RD_NAV_NXT 0x0544 -#define REG_NAV_PROT_LEN 0x0546 -#define REG_BCN_CTRL 0x0550 -#define REG_BCN_CTRL_1 0x0551 -#define REG_MBID_NUM 0x0552 -#define REG_DUAL_TSF_RST 0x0553 -#define REG_BCN_INTERVAL 0x0554 // The same as REG_MBSSID_BCN_SPACE -#define REG_DRVERLYINT 0x0558 -#define REG_BCNDMATIM 0x0559 -#define REG_ATIMWND 0x055A -#define REG_BCN_MAX_ERR 0x055D -#define REG_RXTSF_OFFSET_CCK 0x055E -#define REG_RXTSF_OFFSET_OFDM 0x055F -#define REG_TSFTR 0x0560 -#define REG_TSFTR1 0x0568 // HW Port 1 TSF Register -#define REG_P2P_CTWIN 0x0572 // 1 Byte long (in unit of TU) -#define REG_PSTIMER 0x0580 -#define REG_TIMER0 0x0584 -#define REG_TIMER1 0x0588 -#define REG_ACMHWCTRL 0x05C0 -#define REG_NOA_DESC_SEL 0x05CF -#define REG_NOA_DESC_DURATION 0x05E0 -#define REG_NOA_DESC_INTERVAL 0x05E4 -#define REG_NOA_DESC_START 0x05E8 -#define REG_NOA_DESC_COUNT 0x05EC - -#define REG_DMC 0x05F0 //Dual MAC Co-Existence Register -#define REG_SCH_TX_CMD 0x05F8 - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- -#define REG_APSD_CTRL 0x0600 -#define REG_BWOPMODE 0x0603 -#define REG_TCR 0x0604 -#define REG_RCR 0x0608 -#define REG_RX_PKT_LIMIT 0x060C -#define REG_RX_DLK_TIME 0x060D -#define REG_RX_DRVINFO_SZ 0x060F - -#define REG_MACID 0x0610 -#define REG_BSSID 0x0618 -#define REG_MAR 0x0620 -#define REG_MBIDCAMCFG 0x0628 - -#define REG_FW_AOAC_DBG_MSG_1 0x0630 -#define REG_FW_AOAC_DBG_MSG_2 0x0634 -#define REG_USTIME_EDCA 0x0638 -#define REG_MAC_SPEC_SIFS 0x063A -#define REG_RESP_SIFS_CCK 0x63C -#define REG_RESP_SIFS_OFDM 0x63E -#define REG_TRX_SIFS_OFDM 0x517 -// 20100719 Joseph: Hardware register definition change. (HW datasheet v54) -// 2013115 Roger: Hardware register definition error. (HW datasheet ??) -#define REG_RESP_CCK_SIFS 0x063C // CCK R2T [15:8], T2T[7:0] -#define REG_RESP_OFDM_SIFS 0x063E // OFDM R2T [15:8], T2T[7:0] -#define REG_ACKTO 0x0640 -#define REG_CTS2TO 0x0641 -#define REG_EIFS 0x0642 - - -// -// Note: -// The NAV upper value is very important to WiFi 11n 5.2.3 NAV test. The default value is -// always too small, but the WiFi TestPlan test by 25,000 microseconds of NAV through sending -// CTS in the air. We must update this value greater than 25,000 microseconds to pass the item. -// The offset of NAV_UPPER in 8192C Spec is incorrect, and the offset should be 0x0652. Commented -// by SD1 Scott. -// By Bruce, 2011-07-18. -// -#define REG_NAV_UPPER 0x0652 // unit of 128 - - -// Security -#define REG_CAMCMD 0x0670 -#define REG_CAMWRITE 0x0674 -#define REG_CAMREAD 0x0678 -#define REG_CAMDBG 0x067C -#define REG_SECCFG 0x0680 - -#define REG_TRXPTCL_CTRL 0x668 -// Power -#define REG_WOW_CTRL 0x0690 -#define REG_PS_RX_INFO 0x0692 -#define REG_UAPSD_TID 0x0693 -#define REG_WKFMCAM_CMD 0x0698 -#define REG_WKFMCAM_NUM REG_WKFMCAM_CMD -#define REG_WKFMCAM_NUM_88E 0x698 -#define REG_WKFMCAM_RWD 0x069C -#define REG_RXFLTMAP0 0x06A0 -#define REG_RXFLTMAP1 0x06A2 -#define REG_RXFLTMAP2 0x06A4 -#define REG_BCN_PSR_RPT 0x06A8 -#define REG_BT_COEX_TABLE 0x06C0 - - -// Hardware Port 2 -#define REG_MACID1 0x0700 -#define REG_BSSID1 0x0708 - -#define REG_IQ_DUMP 0x07C0 - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h USB Configuration -// -//----------------------------------------------------- -#define REG_USB_INFO 0xFE17 -#define REG_USB_SPECIAL_OPTION 0xFE55 -#define REG_USB_DMA_AGG_TO 0xFE5B -#define REG_USB_AGG_TO 0xFE5C -#define REG_USB_AGG_TH 0xFE5D - -#define REG_USB_HRPWM 0xFE58 -#define REG_USB_HCPWM 0xFE57 - -// for 92DU high_Queue low_Queue Normal_Queue select -#define REG_USB_High_NORMAL_Queue_Select_MAC0 0xFE44 -//#define REG_USB_LOW_Queue_Select_MAC0 0xFE45 -#define REG_USB_High_NORMAL_Queue_Select_MAC1 0xFE47 -//#define REG_USB_LOW_Queue_Select_MAC1 0xFE48 -#define REG_USB_ACCESS_TIMEOUT 0xFE4C - - -// For normal chip -#define REG_NORMAL_SIE_VID 0xFE60 // 0xFE60~0xFE61 -#define REG_NORMAL_SIE_PID 0xFE62 // 0xFE62~0xFE63 -#define REG_NORMAL_SIE_OPTIONAL 0xFE64 -#define REG_NORMAL_SIE_EP 0xFE65 // 0xFE65~0xFE67 -#define REG_NORMAL_SIE_PHY 0xFE68 // 0xFE68~0xFE6B -#define REG_NORMAL_SIE_OPTIONAL2 0xFE6C -#define REG_NORMAL_SIE_GPS_EP 0xFE6D // 0xFE6D, for RTL8723 only. -#define REG_NORMAL_SIE_MAC_ADDR 0xFE70 // 0xFE70~0xFE75 -#define REG_NORMAL_SIE_STRING 0xFE80 // 0xFE80~0xFEDF - -// for 8814AE memory mapping CTRL_INFO 4KB /RPT_CRC 4KB/MACID 8KB -#define MEMORY_MAP_BUF_READ 0x8000 -#define CTRL_INFO_PAGE 0x660 -#define RPT_CRC 0x661 -#define TX_SHORT_CUT_MACID_0_31 0x662 -#define TX_SHORT_CUT_MACID_32_63 0x663 -#define RPT_BUF_DESC_NUM_8814A 256 - -#define RPT_BUF_DESC_NUM_8821B 256 - -#define RPT_BUF_DESC_NUM_8822B 256 - - -//----------------------------------------------------- - -//----------------------------------------------------- -// -// Redifine 8192C register definition for compatibility -// -//----------------------------------------------------- - -// TODO: use these definition when using REG_xxx naming rule. -// NOTE: DO NOT Remove these definition. Use later. - -#define EFUSE_CTRL REG_EFUSE_CTRL // E-Fuse Control. -#define EFUSE_TEST REG_EFUSE_TEST // E-Fuse Test. -#define MSR (REG_CR + 2) // Media Status register -#define ISR_88E REG_HISR_88E -#define ISR_92C REG_HISR - -// -// We should take RTL8723B into consideration, 2012.10.08 -// -#define GET_ISR(_Adapter) \ - (IS_HARDWARE_TYPE_JAGUAR(_Adapter)||IS_HARDWARE_TYPE_8723B(_Adapter) || IS_HARDWARE_TYPE_8703B(_Adapter) || IS_HARDWARE_TYPE_8723D(_Adapter) || IS_HARDWARE_TYPE_8188F(_Adapter) || IS_HARDWARE_TYPE_8192E(_Adapter))?REG_HISR0: \ - (IS_HARDWARE_TYPE_8188E(_Adapter) ? ISR_88E : ISR_92C) - -#define TSFR REG_TSFTR // Timing Sync Function Timer Register. -#define TSFR1 REG_TSFTR1 // HW Port 1 TSF Register - -#define PBP REG_PBP - -// Redifine MACID register, to compatible prior ICs. -#define IDR0 REG_MACID // MAC ID Register, Offset 0x0050-0x0053 -#define IDR4 (REG_MACID + 4) // MAC ID Register, Offset 0x0054-0x0055 - - -// -// 9. Security Control Registers (Offset: ) -// -#define RWCAM REG_CAMCMD //IN 8190 Data Sheet is called CAMcmd -#define WCAMI REG_CAMWRITE // Software write CAM input content -#define RCAMO REG_CAMREAD // Software read/write CAM config -#define CAMDBG REG_CAMDBG -#define SECR REG_SECCFG //Security Configuration Register - -// Unused register -#define UnusedRegister 0x1BF -#define DCAM UnusedRegister -#define PSR UnusedRegister -#define BBAddr UnusedRegister -#define PhyDataR UnusedRegister - -// Min Spacing related settings. -#define MAX_MSS_DENSITY_2T 0x13 -#define MAX_MSS_DENSITY_1T 0x0A - -//---------------------------------------------------------------------------- -// 8192C Cmd9346CR bits (Offset 0xA, 16bit) -//---------------------------------------------------------------------------- -#define CmdEEPROM_En BIT5 // EEPROM enable when set 1 -#define CmdEERPOMSEL BIT4 // System EEPROM select, 0: boot from E-FUSE, 1: The EEPROM used is 9346 -#define Cmd9346CR_9356SEL BIT4 - -//---------------------------------------------------------------------------- -// 8192C GPIO MUX Configuration Register (offset 0x40, 4 byte) -//---------------------------------------------------------------------------- -#define GPIOSEL_GPIO 0 -#define GPIOSEL_ENBT BIT5 - -//---------------------------------------------------------------------------- -// 8192C GPIO PIN Control Register (offset 0x44, 4 byte) -//---------------------------------------------------------------------------- -#define GPIO_IN REG_GPIO_PIN_CTRL // GPIO pins input value -#define GPIO_OUT (REG_GPIO_PIN_CTRL+1) // GPIO pins output value -#define GPIO_IO_SEL (REG_GPIO_PIN_CTRL+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured. -#define GPIO_MOD (REG_GPIO_PIN_CTRL+3) - -//---------------------------------------------------------------------------- -// 8811A GPIO PIN Control Register (offset 0x60, 4 byte) -//---------------------------------------------------------------------------- -#define GPIO_IN_8811A REG_GPIO_PIN_CTRL_2 // GPIO pins input value -#define GPIO_OUT_8811A (REG_GPIO_PIN_CTRL_2+1) // GPIO pins output value -#define GPIO_IO_SEL_8811A (REG_GPIO_PIN_CTRL_2+2) // GPIO pins output enable when a bit is set to "1"; otherwise, input is configured. -#define GPIO_MOD_8811A (REG_GPIO_PIN_CTRL_2+3) - - -//---------------------------------------------------------------------------- -// 8723/8188E Host System Interrupt Mask Register (offset 0x58, 32 byte) -//---------------------------------------------------------------------------- -#define HSIMR_GPIO12_0_INT_EN BIT0 -#define HSIMR_SPS_OCP_INT_EN BIT5 -#define HSIMR_RON_INT_EN BIT6 -#define HSIMR_PDN_INT_EN BIT7 -#define HSIMR_GPIO9_INT_EN BIT25 - - -//---------------------------------------------------------------------------- -// 8723/8188E Host System Interrupt Status Register (offset 0x5C, 32 byte) -//---------------------------------------------------------------------------- -#define HSISR_GPIO12_0_INT BIT0 -#define HSISR_SPS_OCP_INT BIT5 -#define HSISR_RON_INT_EN BIT6 -#define HSISR_PDNINT BIT7 -#define HSISR_GPIO9_INT BIT25 - -//---------------------------------------------------------------------------- -// 8192C (MSR) Media Status Register (Offset 0x4C, 8 bits) -//---------------------------------------------------------------------------- -/* -Network Type -00: No link -01: Link in ad hoc network -10: Link in infrastructure network -11: AP mode -Default: 00b. -*/ -#define MSR_NOLINK 0x00 -#define MSR_ADHOC 0x01 -#define MSR_INFRA 0x02 -#define MSR_AP 0x03 -#define MSR_TYPE_MASK 0x03 - -//---------------------------------------------------------------------------- -// 88EU (MSR) Media Status Register (Offset 0x4C, 8 bits) -//---------------------------------------------------------------------------- -#define USB_INTR_CONTENT_HISR_OFFSET 48 -#define USB_INTR_CONTENT_HISRE_OFFSET 52 - -// -// 6. Adaptive Control Registers (Offset: 0x0160 - 0x01CF) -// -//---------------------------------------------------------------------------- -// 8192C Response Rate Set Register (offset 0x181, 24bits) -//---------------------------------------------------------------------------- -#define RRSR_1M BIT0 -#define RRSR_2M BIT1 -#define RRSR_5_5M BIT2 -#define RRSR_11M BIT3 -#define RRSR_6M BIT4 -#define RRSR_9M BIT5 -#define RRSR_12M BIT6 -#define RRSR_18M BIT7 -#define RRSR_24M BIT8 -#define RRSR_36M BIT9 -#define RRSR_48M BIT10 -#define RRSR_54M BIT11 -#define RRSR_MCS0 BIT12 -#define RRSR_MCS1 BIT13 -#define RRSR_MCS2 BIT14 -#define RRSR_MCS3 BIT15 -#define RRSR_MCS4 BIT16 -#define RRSR_MCS5 BIT17 -#define RRSR_MCS6 BIT18 -#define RRSR_MCS7 BIT19 - -//---------------------------------------------------------------------------- -// 8192C Rate Definition -//---------------------------------------------------------------------------- -//CCK -#define RATR_1M 0x00000001 -#define RATR_2M 0x00000002 -#define RATR_55M 0x00000004 -#define RATR_11M 0x00000008 -//OFDM -#define RATR_6M 0x00000010 -#define RATR_9M 0x00000020 -#define RATR_12M 0x00000040 -#define RATR_18M 0x00000080 -#define RATR_24M 0x00000100 -#define RATR_36M 0x00000200 -#define RATR_48M 0x00000400 -#define RATR_54M 0x00000800 -//MCS 1 Spatial Stream -#define RATR_MCS0 0x00001000 -#define RATR_MCS1 0x00002000 -#define RATR_MCS2 0x00004000 -#define RATR_MCS3 0x00008000 -#define RATR_MCS4 0x00010000 -#define RATR_MCS5 0x00020000 -#define RATR_MCS6 0x00040000 -#define RATR_MCS7 0x00080000 -//MCS 2 Spatial Stream -#define RATR_MCS8 0x00100000 -#define RATR_MCS9 0x00200000 -#define RATR_MCS10 0x00400000 -#define RATR_MCS11 0x00800000 -#define RATR_MCS12 0x01000000 -#define RATR_MCS13 0x02000000 -#define RATR_MCS14 0x04000000 -#define RATR_MCS15 0x08000000 - - -// NOTE: For 92CU - Ziv -//CCK -#define RATE_1M BIT(0) -#define RATE_2M BIT(1) -#define RATE_5_5M BIT(2) -#define RATE_11M BIT(3) -//OFDM -#define RATE_6M BIT(4) -#define RATE_9M BIT(5) -#define RATE_12M BIT(6) -#define RATE_18M BIT(7) -#define RATE_24M BIT(8) -#define RATE_36M BIT(9) -#define RATE_48M BIT(10) -#define RATE_54M BIT(11) - -// ALL CCK Rate -#define RATE_ALL_CCK RATR_1M|RATR_2M|RATR_55M|RATR_11M -#define RATE_ALL_OFDM_AG RATR_6M|RATR_9M|RATR_12M|RATR_18M|RATR_24M|\ - RATR_36M|RATR_48M|RATR_54M -#define RATE_ALL_OFDM_1SS RATR_MCS0|RATR_MCS1|RATR_MCS2|RATR_MCS3 |\ - RATR_MCS4|RATR_MCS5|RATR_MCS6 |RATR_MCS7 -#define RATE_ALL_OFDM_2SS RATR_MCS8|RATR_MCS9 |RATR_MCS10|RATR_MCS11|\ - RATR_MCS12|RATR_MCS13|RATR_MCS14|RATR_MCS15 - -//---------------------------------------------------------------------------- -// 8192C BW_OPMODE bits (Offset 0x203, 8bit) -//---------------------------------------------------------------------------- -#define BW_OPMODE_20MHZ BIT2 -#define BW_OPMODE_5G BIT1 - - -//---------------------------------------------------------------------------- -// 8192C CAM Config Setting (offset 0x250, 1 byte) -//---------------------------------------------------------------------------- -#define CAM_NONE 0x0 -#define CAM_WEP40 0x01 -#define CAM_TKIP 0x02 -#define CAM_AES 0x04 -#define CAM_WEP104 0x05 -#define CAM_SMS4 0x6 - -#define TOTAL_CAM_ENTRY 32 - -#define CAM_CONFIG_USEDK TRUE -#define CAM_CONFIG_NO_USEDK FALSE - - -#define SCR_UseDK 0x01 -#define SCR_TxSecEnable 0x02 -#define SCR_RxSecEnable 0x04 - -// -// 10. Power Save Control Registers (Offset: 0x0260 - 0x02DF) -// -#define WOW_PMEN BIT0 // Power management Enable. -#define WOW_WOMEN BIT1 // WoW function on or off. -#define WOW_MAGIC BIT2 // Magic packet -#define WOW_UWF BIT3 // Unicast Wakeup frame. - -// -// 12. Host Interrupt Status Registers (Offset: 0x0300 - 0x030F) -// -//---------------------------------------------------------------------------- -// 8190 IMR/ISR bits (offset 0xfd, 8bits) -//---------------------------------------------------------------------------- -#define IMR8190_DISABLED 0x0 -#define IMR_DISABLED 0x0 -// IMR DW0 Bit 0-31 -#define IMR_BCNDMAINT6 BIT31 // Beacon DMA Interrupt 6 -#define IMR_BCNDMAINT5 BIT30 // Beacon DMA Interrupt 5 -#define IMR_BCNDMAINT4 BIT29 // Beacon DMA Interrupt 4 -#define IMR_BCNDMAINT3 BIT28 // Beacon DMA Interrupt 3 -#define IMR_BCNDMAINT2 BIT27 // Beacon DMA Interrupt 2 -#define IMR_BCNDMAINT1 BIT26 // Beacon DMA Interrupt 1 -#define IMR_BCNDOK8 BIT25 // Beacon Queue DMA OK Interrup 8 -#define IMR_BCNDOK7 BIT24 // Beacon Queue DMA OK Interrup 7 -#define IMR_BCNDOK6 BIT23 // Beacon Queue DMA OK Interrup 6 -#define IMR_BCNDOK5 BIT22 // Beacon Queue DMA OK Interrup 5 -#define IMR_BCNDOK4 BIT21 // Beacon Queue DMA OK Interrup 4 -#define IMR_BCNDOK3 BIT20 // Beacon Queue DMA OK Interrup 3 -#define IMR_BCNDOK2 BIT19 // Beacon Queue DMA OK Interrup 2 -#define IMR_BCNDOK1 BIT18 // Beacon Queue DMA OK Interrup 1 -#define IMR_TIMEOUT2 BIT17 // Timeout interrupt 2 -#define IMR_TIMEOUT1 BIT16 // Timeout interrupt 1 -#define IMR_TXFOVW BIT15 // Transmit FIFO Overflow -#define IMR_PSTIMEOUT BIT14 // Power save time out interrupt -#define IMR_BcnInt BIT13 // Beacon DMA Interrupt 0 -#define IMR_RXFOVW BIT12 // Receive FIFO Overflow -#define IMR_RDU BIT11 // Receive Descriptor Unavailable -#define IMR_ATIMEND BIT10 // For 92C,ATIM Window End Interrupt. For 8723 and later ICs, it also means P2P CTWin End interrupt. -#define IMR_BDOK BIT9 // Beacon Queue DMA OK Interrup -#define IMR_HIGHDOK BIT8 // High Queue DMA OK Interrupt -#define IMR_TBDOK BIT7 // Transmit Beacon OK interrup -#define IMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt -#define IMR_TBDER BIT5 // For 92C,Transmit Beacon Error Interrupt -#define IMR_BKDOK BIT4 // AC_BK DMA OK Interrupt -#define IMR_BEDOK BIT3 // AC_BE DMA OK Interrupt -#define IMR_VIDOK BIT2 // AC_VI DMA OK Interrupt -#define IMR_VODOK BIT1 // AC_VO DMA Interrupt -#define IMR_ROK BIT0 // Receive DMA OK Interrupt - -// 13. Host Interrupt Status Extension Register (Offset: 0x012C-012Eh) -#define IMR_TSF_BIT32_TOGGLE BIT15 -#define IMR_TXERR BIT11 -#define IMR_RXERR BIT10 -#define IMR_C2HCMD BIT9 -#define IMR_CPWM BIT8 -//RSVD [2-7] - -//---------------------------------------------------------------------------- -// 8723E series PCIE Host IMR/ISR bit -//---------------------------------------------------------------------------- -// IMR DW0 Bit 0-31 -#define PHIMR_TIMEOUT2 BIT31 -#define PHIMR_TIMEOUT1 BIT30 -#define PHIMR_PSTIMEOUT BIT29 -#define PHIMR_GTINT4 BIT28 -#define PHIMR_GTINT3 BIT27 -#define PHIMR_TXBCNERR BIT26 -#define PHIMR_TXBCNOK BIT25 -#define PHIMR_TSF_BIT32_TOGGLE BIT24 -#define PHIMR_BCNDMAINT3 BIT23 -#define PHIMR_BCNDMAINT2 BIT22 -#define PHIMR_BCNDMAINT1 BIT21 -#define PHIMR_BCNDMAINT0 BIT20 -#define PHIMR_BCNDOK3 BIT19 -#define PHIMR_BCNDOK2 BIT18 -#define PHIMR_BCNDOK1 BIT17 -#define PHIMR_BCNDOK0 BIT16 -#define PHIMR_HSISR_IND_ON BIT15 -#define PHIMR_BCNDMAINT_E BIT14 -#define PHIMR_ATIMEND_E BIT13 -#define PHIMR_ATIM_CTW_END BIT12 -#define PHIMR_HISRE_IND BIT11 // RO. HISRE Indicator (HISRE & HIMRE is true, this bit is set to 1) -#define PHIMR_C2HCMD BIT10 -#define PHIMR_CPWM2 BIT9 -#define PHIMR_CPWM BIT8 -#define PHIMR_HIGHDOK BIT7 // High Queue DMA OK Interrupt -#define PHIMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt -#define PHIMR_BKDOK BIT5 // AC_BK DMA OK Interrupt -#define PHIMR_BEDOK BIT4 // AC_BE DMA OK Interrupt -#define PHIMR_VIDOK BIT3 // AC_VI DMA OK Interrupt -#define PHIMR_VODOK BIT2 // AC_VO DMA Interrupt -#define PHIMR_RDU BIT1 // Receive Descriptor Unavailable -#define PHIMR_ROK BIT0 // Receive DMA OK Interrupt - -// PCIE Host Interrupt Status Extension bit -#define PHIMR_BCNDMAINT7 BIT23 -#define PHIMR_BCNDMAINT6 BIT22 -#define PHIMR_BCNDMAINT5 BIT21 -#define PHIMR_BCNDMAINT4 BIT20 -#define PHIMR_BCNDOK7 BIT19 -#define PHIMR_BCNDOK6 BIT18 -#define PHIMR_BCNDOK5 BIT17 -#define PHIMR_BCNDOK4 BIT16 -// bit12-15: RSVD -#define PHIMR_TXERR BIT11 -#define PHIMR_RXERR BIT10 -#define PHIMR_TXFOVW BIT9 -#define PHIMR_RXFOVW BIT8 -// bit2-7: RSVD -#define PHIMR_OCPINT BIT1 -// bit0: RSVD - -#define UHIMR_TIMEOUT2 BIT31 -#define UHIMR_TIMEOUT1 BIT30 -#define UHIMR_PSTIMEOUT BIT29 -#define UHIMR_GTINT4 BIT28 -#define UHIMR_GTINT3 BIT27 -#define UHIMR_TXBCNERR BIT26 -#define UHIMR_TXBCNOK BIT25 -#define UHIMR_TSF_BIT32_TOGGLE BIT24 -#define UHIMR_BCNDMAINT3 BIT23 -#define UHIMR_BCNDMAINT2 BIT22 -#define UHIMR_BCNDMAINT1 BIT21 -#define UHIMR_BCNDMAINT0 BIT20 -#define UHIMR_BCNDOK3 BIT19 -#define UHIMR_BCNDOK2 BIT18 -#define UHIMR_BCNDOK1 BIT17 -#define UHIMR_BCNDOK0 BIT16 -#define UHIMR_HSISR_IND BIT15 -#define UHIMR_BCNDMAINT_E BIT14 -//RSVD BIT13 -#define UHIMR_CTW_END BIT12 -//RSVD BIT11 -#define UHIMR_C2HCMD BIT10 -#define UHIMR_CPWM2 BIT9 -#define UHIMR_CPWM BIT8 -#define UHIMR_HIGHDOK BIT7 // High Queue DMA OK Interrupt -#define UHIMR_MGNTDOK BIT6 // Management Queue DMA OK Interrupt -#define UHIMR_BKDOK BIT5 // AC_BK DMA OK Interrupt -#define UHIMR_BEDOK BIT4 // AC_BE DMA OK Interrupt -#define UHIMR_VIDOK BIT3 // AC_VI DMA OK Interrupt -#define UHIMR_VODOK BIT2 // AC_VO DMA Interrupt -#define UHIMR_RDU BIT1 // Receive Descriptor Unavailable -#define UHIMR_ROK BIT0 // Receive DMA OK Interrupt - -// USB Host Interrupt Status Extension bit -#define UHIMR_BCNDMAINT7 BIT23 -#define UHIMR_BCNDMAINT6 BIT22 -#define UHIMR_BCNDMAINT5 BIT21 -#define UHIMR_BCNDMAINT4 BIT20 -#define UHIMR_BCNDOK7 BIT19 -#define UHIMR_BCNDOK6 BIT18 -#define UHIMR_BCNDOK5 BIT17 -#define UHIMR_BCNDOK4 BIT16 -// bit14-15: RSVD -#define UHIMR_ATIMEND_E BIT13 -#define UHIMR_ATIMEND BIT12 -#define UHIMR_TXERR BIT11 -#define UHIMR_RXERR BIT10 -#define UHIMR_TXFOVW BIT9 -#define UHIMR_RXFOVW BIT8 -// bit2-7: RSVD -#define UHIMR_OCPINT BIT1 -// bit0: RSVD - - -#define HAL_NIC_UNPLUG_ISR 0xFFFFFFFF // The value when the NIC is unplugged for PCI. -#define HAL_NIC_UNPLUG_PCI_ISR 0xEAEAEAEA // The value when the NIC is unplugged for PCI in PCI interrupt (page 3). - -//---------------------------------------------------------------------------- -// 8188 IMR/ISR bits -//---------------------------------------------------------------------------- -#define IMR_DISABLED_88E 0x0 -// IMR DW0(0x0060-0063) Bit 0-31 -#define IMR_TXCCK_88E BIT30 // TXRPT interrupt when CCX bit of the packet is set -#define IMR_PSTIMEOUT_88E BIT29 // Power Save Time Out Interrupt -#define IMR_GTINT4_88E BIT28 // When GTIMER4 expires, this bit is set to 1 -#define IMR_GTINT3_88E BIT27 // When GTIMER3 expires, this bit is set to 1 -#define IMR_TBDER_88E BIT26 // Transmit Beacon0 Error -#define IMR_TBDOK_88E BIT25 // Transmit Beacon0 OK -#define IMR_TSF_BIT32_TOGGLE_88E BIT24 // TSF Timer BIT32 toggle indication interrupt -#define IMR_BCNDMAINT0_88E BIT20 // Beacon DMA Interrupt 0 -#define IMR_BCNDOK0_88E BIT16 // Beacon Queue DMA OK0 -#define IMR_HSISR_IND_ON_INT_88E BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) -#define IMR_BCNDMAINT_E_88E BIT14 // Beacon DMA Interrupt Extension for Win7 -#define IMR_ATIMEND_88E BIT12 // CTWidnow End or ATIM Window End -#define IMR_HISR1_IND_INT_88E BIT11 // HISR1 Indicator (HISR1 & HIMR1 is true, this bit is set to 1) -#define IMR_C2HCMD_88E BIT10 // CPU to Host Command INT Status, Write 1 clear -#define IMR_CPWM2_88E BIT9 // CPU power Mode exchange INT Status, Write 1 clear -#define IMR_CPWM_88E BIT8 // CPU power Mode exchange INT Status, Write 1 clear -#define IMR_HIGHDOK_88E BIT7 // High Queue DMA OK -#define IMR_MGNTDOK_88E BIT6 // Management Queue DMA OK -#define IMR_BKDOK_88E BIT5 // AC_BK DMA OK -#define IMR_BEDOK_88E BIT4 // AC_BE DMA OK -#define IMR_VIDOK_88E BIT3 // AC_VI DMA OK -#define IMR_VODOK_88E BIT2 // AC_VO DMA OK -#define IMR_RDU_88E BIT1 // Rx Descriptor Unavailable -#define IMR_ROK_88E BIT0 // Receive DMA OK - -// IMR DW1(0x00B4-00B7) Bit 0-31 -#define IMR_BCNDMAINT7_88E BIT27 // Beacon DMA Interrupt 7 -#define IMR_BCNDMAINT6_88E BIT26 // Beacon DMA Interrupt 6 -#define IMR_BCNDMAINT5_88E BIT25 // Beacon DMA Interrupt 5 -#define IMR_BCNDMAINT4_88E BIT24 // Beacon DMA Interrupt 4 -#define IMR_BCNDMAINT3_88E BIT23 // Beacon DMA Interrupt 3 -#define IMR_BCNDMAINT2_88E BIT22 // Beacon DMA Interrupt 2 -#define IMR_BCNDMAINT1_88E BIT21 // Beacon DMA Interrupt 1 -#define IMR_BCNDOK7_88E BIT20 // Beacon Queue DMA OK Interrup 7 -#define IMR_BCNDOK6_88E BIT19 // Beacon Queue DMA OK Interrup 6 -#define IMR_BCNDOK5_88E BIT18 // Beacon Queue DMA OK Interrup 5 -#define IMR_BCNDOK4_88E BIT17 // Beacon Queue DMA OK Interrup 4 -#define IMR_BCNDOK3_88E BIT16 // Beacon Queue DMA OK Interrup 3 -#define IMR_BCNDOK2_88E BIT15 // Beacon Queue DMA OK Interrup 2 -#define IMR_BCNDOK1_88E BIT14 // Beacon Queue DMA OK Interrup 1 -#define IMR_ATIMEND_E_88E BIT13 // ATIM Window End Extension for Win7 -#define IMR_TXERR_88E BIT11 // Tx Error Flag Interrupt Status, write 1 clear. -#define IMR_RXERR_88E BIT10 // Rx Error Flag INT Status, Write 1 clear -#define IMR_TXFOVW_88E BIT9 // Transmit FIFO Overflow -#define IMR_RXFOVW_88E BIT8 // Receive FIFO Overflow - -#define HAL_NIC_UNPLUG_ISR 0xFFFFFFFF // The value when the NIC is unplugged for PCI. - - -/*=================================================================== -===================================================================== -Here the register defines are for 92C. When the define is as same with 92C, -we will use the 92C's define for the consistency -So the following defines for 92C is not entire!!!!!! -===================================================================== -=====================================================================*/ -/* -Based on Datasheet V33---090401 -Register Summary -Current IOREG MAP -0x0000h ~ 0x00FFh System Configuration (256 Bytes) -0x0100h ~ 0x01FFh MACTOP General Configuration (256 Bytes) -0x0200h ~ 0x027Fh TXDMA Configuration (128 Bytes) -0x0280h ~ 0x02FFh RXDMA Configuration (128 Bytes) -0x0300h ~ 0x03FFh PCIE EMAC Reserved Region (256 Bytes) -0x0400h ~ 0x04FFh Protocol Configuration (256 Bytes) -0x0500h ~ 0x05FFh EDCA Configuration (256 Bytes) -0x0600h ~ 0x07FFh WMAC Configuration (512 Bytes) -0x2000h ~ 0x3FFFh 8051 FW Download Region (8196 Bytes) -*/ - //---------------------------------------------------------------------------- - // 8192C (TXPAUSE) transmission pause (Offset 0x522, 8 bits) - //---------------------------------------------------------------------------- -// Note: -// The the bits of stoping AC(VO/VI/BE/BK) queue in datasheet RTL8192S/RTL8192C are wrong, -// the correct arragement is VO - Bit0, VI - Bit1, BE - Bit2, and BK - Bit3. -// 8723 and 88E may be not correct either in the eralier version. Confirmed with DD Tim. -// By Bruce, 2011-09-22. -#define StopBecon BIT6 -#define StopHigh BIT5 -#define StopMgt BIT4 -#define StopBK BIT3 -#define StopBE BIT2 -#define StopVI BIT1 -#define StopVO BIT0 - -//---------------------------------------------------------------------------- -// 8192C (RCR) Receive Configuration Register (Offset 0x608, 32 bits) -//---------------------------------------------------------------------------- -#define RCR_APPFCS BIT31 // WMAC append FCS after pauload -#define RCR_APP_MIC BIT30 // MACRX will retain the MIC at the bottom of the packet. -#define RCR_APP_ICV BIT29 // MACRX will retain the ICV at the bottom of the packet. -#define RCR_APP_PHYST_RXFF BIT28 // HY Status is appended before RX packet in RXFF -#define RCR_APP_BA_SSN BIT27 // SSN of previous TXBA is appended as after original RXDESC as the 4-th DW of RXDESC. -#define RCR_NONQOS_VHT BIT26 // Reserved -#define RCR_RSVD_BIT25 BIT25 // Reserved -#define RCR_ENMBID BIT24 // Enable Multiple BssId. Only response ACK to the packets whose DID(A1) matching to the addresses in the MBSSID CAM Entries. -#define RCR_LSIGEN BIT23 // Enable LSIG TXOP Protection function. Search KEYCAM for each rx packet to check if LSIGEN bit is set. -#define RCR_MFBEN BIT22 // Enable immediate MCS Feedback function. When Rx packet with MRQ = 1'b1, then search KEYCAM to find sender's MCS Feedback function and send response. -#define RCR_RSVD_BIT21 BIT21 // Reserved -#define RCR_RSVD_BIT20 BIT20 // Reserved -#define RCR_RSVD_BIT19 BIT19 // Reserved -#define RCR_TIM_PARSER_EN BIT18 // RX Beacon TIM Parser. -#define RCR_BM_DATA_EN BIT17 // Broadcast data packet interrupt enable. -#define RCR_UC_DATA_EN BIT16 // Unicast data packet interrupt enable. -#define RCR_RSVD_BIT15 BIT15 // Reserved -#define RCR_HTC_LOC_CTRL BIT14 // MFC<--HTC=1 MFC-->HTC=0 -#define RCR_AMF BIT13 // Accept management type frame -#define RCR_ACF BIT12 // Accept control type frame. Control frames BA, BAR, and PS-Poll (when in AP mode) are not controlled by this bit. They are controlled by ADF. -#define RCR_ADF BIT11 // Accept data type frame. This bit also regulates BA, BAR, and PS-Poll (AP mode only). -#define RCR_RSVD_BIT10 BIT10 // Reserved -#define RCR_AICV BIT9 // Accept ICV error packet -#define RCR_ACRC32 BIT8 // Accept CRC32 error packet -#define RCR_CBSSID_BCN BIT7 // Accept BSSID match packet (Rx beacon, probe rsp) -#define RCR_CBSSID_DATA BIT6 // Accept BSSID match packet (Data) -#define RCR_CBSSID RCR_CBSSID_DATA // Accept BSSID match packet -#define RCR_APWRMGT BIT5 // Accept power management packet -#define RCR_ADD3 BIT4 // Accept address 3 match packet -#define RCR_AB BIT3 // Accept broadcast packet -#define RCR_AM BIT2 // Accept multicast packet -#define RCR_APM BIT1 // Accept physical match packet -#define RCR_AAP BIT0 // Accept all unicast packet - -//============================================================================ -// 8192C Regsiter Bit and Content definition -//============================================================================ -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- - -//2 SYS_ISO_CTRL -#define ISO_MD2PP BIT(0) -#define ISO_UA2USB BIT(1) -#define ISO_UD2CORE BIT(2) -#define ISO_PA2PCIE BIT(3) -#define ISO_PD2CORE BIT(4) -#define ISO_IP2MAC BIT(5) -#define ISO_DIOP BIT(6) -#define ISO_DIOE BIT(7) -#define ISO_EB2CORE BIT(8) -#define ISO_DIOR BIT(9) -#define PWC_EV12V BIT(15) - - -//2 SYS_FUNC_EN -#define FEN_BBRSTB BIT(0) -#define FEN_BB_GLB_RSTn BIT(1) -#define FEN_USBA BIT(2) -#define FEN_UPLL BIT(3) -#define FEN_USBD BIT(4) -#define FEN_DIO_PCIE BIT(5) -#define FEN_PCIEA BIT(6) -#define FEN_PPLL BIT(7) -#define FEN_PCIED BIT(8) -#define FEN_DIOE BIT(9) -#define FEN_CPUEN BIT(10) -#define FEN_DCORE BIT(11) -#define FEN_ELDR BIT(12) -#define FEN_DIO_RF BIT(13) -#define FEN_HWPDN BIT(14) -#define FEN_MREGEN BIT(15) - -//2 APS_FSMCO -#define PFM_LDALL BIT(0) -#define PFM_ALDN BIT(1) -#define PFM_LDKP BIT(2) -#define PFM_WOWL BIT(3) -#define EnPDN BIT(4) -#define PDN_PL BIT(5) -#define APFM_ONMAC BIT(8) -#define APFM_OFF BIT(9) -#define APFM_RSM BIT(10) -#define AFSM_HSUS BIT(11) -#define AFSM_PCIE BIT(12) -#define APDM_MAC BIT(13) -#define APDM_HOST BIT(14) -#define APDM_HPDN BIT(15) -#define RDY_MACON BIT(16) -#define SUS_HOST BIT(17) -#define ROP_ALD BIT(20) -#define ROP_PWR BIT(21) -#define ROP_SPS BIT(22) -#define SOP_MRST BIT(25) -#define SOP_FUSE BIT(26) -#define SOP_ABG BIT(27) -#define SOP_AMB BIT(28) -#define SOP_RCK BIT(29) -#define SOP_A8M BIT(30) -#define XOP_BTCK BIT(31) - -//2 SYS_CLKR -#define ANAD16V_EN BIT(0) -#define ANA8M BIT(1) -#define MACSLP BIT(4) -#define LOADER_CLK_EN BIT(5) - - -//2 9346CR - -#define BOOT_FROM_EEPROM BIT(4) -#define EEPROM_EN BIT(5) - - -//2 RF_CTRL -#define RF_EN BIT(0) -#define RF_RSTB BIT(1) -#define RF_SDMRSTB BIT(2) - - -//2 LDOV12D_CTRL -#define LDV12_EN BIT(0) -#define LDV12_SDBY BIT(1) -#define LPLDO_HSM BIT(2) -#define LPLDO_LSM_DIS BITT3) -#define _LDV12_VADJ(x) (((x) & 0xF) << 4) - - - -//2 EFUSE_TEST (For RTL8723 partially) -#define EF_TRPT BIT(7) -#define EF_CELL_SEL (BIT(8)|BIT(9)) // 00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2 -#define LDOE25_EN BIT(31) -#define EFUSE_SEL(x) (((x) & 0x3) << 8) -#define EFUSE_SEL_MASK 0x300 -#define EFUSE_WIFI_SEL_0 0x0 -#define EFUSE_BT_SEL_0 0x1 -#define EFUSE_BT_SEL_1 0x2 -#define EFUSE_BT_SEL_2 0x3 - - -//2 8051FWDL -//2 MCUFWDL -#define MCUFWDL_EN BIT(0) -#define MCUFWDL_RDY BIT(1) -#define FWDL_ChkSum_rpt BIT(2) -#define MACINI_RDY BIT(3) -#define BBINI_RDY BIT(4) -#define RFINI_RDY BIT(5) -#define WINTINI_RDY BIT(6) -#define RAM_DL_SEL BIT(7) -#define CPU_DL_READY BIT(15) //add flag by gw for fw download ready 20130826 -#define ROM_DLEN BIT(19) -#define CPRST BIT(23) - - - -//2 REG_SYS_CFG -#define XCLK_VLD BIT(0) -#define ACLK_VLD BIT(1) -#define UCLK_VLD BIT(2) -#define PCLK_VLD BIT(3) -#define PCIRSTB BIT(4) -#define V15_VLD BIT(5) -#define TRP_B15V_EN BIT(7) -#define SIC_IDLE BIT(8) -#define BD_MAC2 BIT(9) -#define BD_MAC1 BIT(10) -#define IC_MACPHY_MODE BIT(11) -#define CHIP_VER (BIT(12)|BIT(13)|BIT(14)|BIT(15)) -#define BT_FUNC BIT(16) -#define VENDOR_ID BIT(19) -#define EXT_VENDOR_ID (BIT(18)|BIT(19)) //Currently only for RTL8723B -#define PAD_HWPD_IDN BIT(22) -#define TRP_VAUX_EN BIT(23) // RTL ID -#define TRP_BT_EN BIT(24) -#define BD_PKG_SEL BIT(25) -#define BD_HCI_SEL BIT(26) -#define TYPE_ID BIT(27) - -#define CHIP_VER_RTL_MASK 0xF000 //Bit 12 ~ 15 -#define CHIP_VER_RTL_SHIFT 12 - -//2REG_GPIO_OUTSTS (For RTL8723 only) -#define EFS_HCI_SEL (BIT(0)|BIT(1)) -#define PAD_HCI_SEL (BIT(2)|BIT(3)) -#define HCI_SEL (BIT(4)|BIT(5)) -#define PKG_SEL_HCI BIT(6) -#define FEN_GPS BIT(7) -#define FEN_BT BIT(8) -#define FEN_WL BIT(9) -#define FEN_PCI BIT(10) -#define FEN_USB BIT(11) -#define BTRF_HWPDN_N BIT(12) -#define WLRF_HWPDN_N BIT(13) -#define PDN_BT_N BIT(14) -#define PDN_GPS_N BIT(15) -#define BT_CTL_HWPDN BIT(16) -#define GPS_CTL_HWPDN BIT(17) -#define PPHY_SUSB BIT(20) -#define UPHY_SUSB BIT(21) -#define PCI_SUSEN BIT(22) -#define USB_SUSEN BIT(23) -#define RF_RL_ID (BIT(31)|BIT(30)|BIT(29)|BIT(28)) - - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- - - -//2 Function Enable Registers -//2 CR - - - -#define HCI_TXDMA_EN BIT(0) -#define HCI_RXDMA_EN BIT(1) -#define TXDMA_EN BIT(2) -#define RXDMA_EN BIT(3) -#define PROTOCOL_EN BIT(4) -#define SCHEDULE_EN BIT(5) -#define MACTXEN BIT(6) -#define MACRXEN BIT(7) -#define ENSWBCN BIT(8) -#define ENSEC BIT(9) -#define CALTMR_EN BIT(10) // 32k CAL TMR enable - -// Network type -#define _NETTYPE(x) (((x) & 0x3) << 16) -#define MASK_NETTYPE 0x30000 -#define NT_NO_LINK 0x0 -#define NT_LINK_AD_HOC 0x1 -#define NT_LINK_AP 0x2 -#define NT_AS_AP 0x3 - -//2 PBP - Page Size Register -#define GET_RX_PAGE_SIZE(value) ((value) & 0xF) -#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4) -#define _PSRX_MASK 0xF -#define _PSTX_MASK 0xF0 -#define _PSRX(x) (x) -#define _PSTX(x) ((x) << 4) - -#define PBP_64 0x0 -#define PBP_128 0x1 -#define PBP_256 0x2 -#define PBP_512 0x3 -#define PBP_1024 0x4 - - -//2 TX/RXDMA -#define RXDMA_ARBBW_EN BIT(0) -#define RXSHFT_EN BIT(1) -#define RXDMA_AGG_EN BIT(2) -#define QS_VO_QUEUE BIT(8) -#define QS_VI_QUEUE BIT(9) -#define QS_BE_QUEUE BIT(10) -#define QS_BK_QUEUE BIT(11) -#define QS_MANAGER_QUEUE BIT(12) -#define QS_HIGH_QUEUE BIT(13) - -#define HQSEL_VOQ BIT(0) -#define HQSEL_VIQ BIT(1) -#define HQSEL_BEQ BIT(2) -#define HQSEL_BKQ BIT(3) -#define HQSEL_MGTQ BIT(4) -#define HQSEL_HIQ BIT(5) - -// For normal driver, 0x10C -#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14) -#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12) -#define _TXDMA_BKQ_MAP(x) (((x)&0x3) << 10) -#define _TXDMA_BEQ_MAP(x) (((x)&0x3) << 8 ) -#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6 ) -#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4 ) - -#define QUEUE_LOW 1 -#define QUEUE_NORMAL 2 -#define QUEUE_HIGH 3 - - - -//2 TRXFF_BNDY - - -//2 LLT_INIT -#define _LLT_NO_ACTIVE 0x0 -#define _LLT_WRITE_ACCESS 0x1 -#define _LLT_READ_ACCESS 0x2 -#if USE_8814AS_MACRO_SETTING == 1 -#define _LLT_INIT_DATA(x) (((x) & 0xFFF)<<16) //20130415 KaiYuan modify for 8814 -#define _LLT_INIT_ADDR(x) ((x) & 0xFFF ) //20130415 KaiYuan Modify for 8814 -#else -#define _LLT_INIT_DATA(x) ((x) & 0xFF) -#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8) -#endif -#define _LLT_OP(x) (((x) & 0x3) << 30) -#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3) - -#define _LLT_INIT_DATA_8814A(x) (((x) & 0xFFF)<<16) -#define _LLT_INIT_ADDR_8814A(x) ((x) & 0xFFF) - -#define _LLT_INIT_DATA_8821B(x) (((x) & 0xFFF)<<16) -#define _LLT_INIT_ADDR_8821B(x) ((x) & 0xFFF) - -#define _LLT_INIT_DATA_8822B(x) (((x) & 0xFFF)<<16) -#define _LLT_INIT_ADDR_8822B(x) ((x) & 0xFFF) - - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -//2 RQPN -#define _HPQ(x) ((x) & 0xFF) -#define _LPQ(x) (((x) & 0xFF) << 8) -#define _PUBQ(x) (((x) & 0xFF) << 16) -#define _NPQ(x) ((x) & 0xFF) // NOTE: in RQPN_NPQ register - - -#define HPQ_PUBLIC_DIS BIT(24) -#define LPQ_PUBLIC_DIS BIT(25) -#define LD_RQPN BIT(31) - - -//2 TDECTL -#define BLK_DESC_NUM_SHIFT 4 -#define BLK_DESC_NUM_MASK 0xF - - -//2 TXDMA_OFFSET_CHK -#define DROP_DATA_EN BIT(9) - -//----------------------------------------------------- -// -// 0x0280h ~ 0x028Bh RX DMA Configuration -// -//----------------------------------------------------- - -//2 REG_RXDMA_CONTROL, 0x0286h -// Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before -// this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear. -#define RXPKT_RELEASE_POLL BIT(0) -// Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in -// this bit. FW can start releasing packets after RXDMA entering idle mode. -#define RXDMA_IDLE BIT(1) -// When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host -// completed, and stop DMA packet to host. RXDMA will then report Default: 0; -#define RW_RELEASE_EN BIT(2) - -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -//2 FWHW_TXQ_CTRL -#define EN_AMPDU_RTY_NEW BIT(7) - - -//2 SPEC SIFS -#define _SPEC_SIFS_CCK(x) ((x) & 0xFF) -#define _SPEC_SIFS_OFDM(x) (((x) & 0xFF) << 8) - -//2 RL -#define RETRY_LIMIT_SHORT_SHIFT 8 -#define RETRY_LIMIT_LONG_SHIFT 0 - -//2 REG_DATA_SC (0x483) - -#define HAL_DATA_SC_DONT_CARE 0 -#define HAL_DATA_SC_UPPER 1 -#define HAL_DATA_SC_LOWER 2 -#define HAL_DATA_DUPLICATE 3 - - - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- - - - -//2 EDCA setting -#define AC_PARAM_TXOP_LIMIT_OFFSET 16 -#define AC_PARAM_ECW_MAX_OFFSET 12 -#define AC_PARAM_ECW_MIN_OFFSET 8 -#define AC_PARAM_AIFS_OFFSET 0 - - - -#define _LRL(x) ((x) & 0x3F) -#define _SRL(x) (((x) & 0x3F) << 8) - - -//2 BCN_CTRL -#define EN_TXBCN_RPT BIT(2) -#define EN_BCN_FUNCTION BIT(3) -#define STOP_BCNQ BIT(6) - - -//2 ACMHWCTRL -#define AcmHw_HwEn BIT(0) -#define AcmHw_BeqEn BIT(1) -#define AcmHw_ViqEn BIT(2) -#define AcmHw_VoqEn BIT(3) -#define AcmHw_BeqStatus BIT(4) -#define AcmHw_ViqStatus BIT(5) -#define AcmHw_VoqStatus BIT(6) - -//2 //REG_DUAL_TSF_RST (0x553) -#define DUAL_TSF_RST_P2P BIT(4) - - -//2 // REG_NOA_DESC_SEL (0x5CF) -#define NOA_DESC_SEL_0 0 -#define NOA_DESC_SEL_1 BIT(4) - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- - -//2 APSD_CTRL -#define APSDOFF BIT(6) - -#define RATE_BITMAP_ALL 0xFFFFF - -// Only use CCK 1M rate for ACK -#define RATE_RRSR_CCK_ONLY_1M 0xFFFF1 - -//2 TCR -#define TSFRST BIT(0) -#define DIS_GCLK BIT(1) -#define PAD_SEL BIT(2) -#define PWR_ST BIT(6) -#define PWRBIT_OW_EN BIT(7) -#define ACRC BIT(8) -#define CFENDFORM BIT(9) -#define ICV BIT(10) - - - -//2 RCR -#define AAP BIT(0) -#define APM BIT(1) -#define AM BIT(2) -#define AB BIT(3) -#define ADD3 BIT(4) -#define APWRMGT BIT(5) -#define CBSSID BIT(6) -#define CBSSID_DATA BIT(6) -#define CBSSID_BCN BIT(7) -#define ACRC32 BIT(8) -#define AICV BIT(9) -//ADF is not used in 8822B, Bit 11 has other purpose and should not be set when init -#define ADF BIT(11) -#define ACF BIT(12) -#define AMF BIT(13) -#define HTC_LOC_CTRL BIT(14) -#define UC_DATA_EN BIT(16) -#define BM_DATA_EN BIT(17) -#define MFBEN BIT(22) -#define LSIGEN BIT(23) -#define EnMBID BIT(24) -#define FORCEACK BIT(26) -#define APP_BASSN BIT(27) -#define APP_PHYSTS BIT(28) -#define APP_ICV BIT(29) -#define APP_MIC BIT(30) -#define APP_FCS BIT(31) - - -//2 SECCFG -#define SCR_TxUseDK BIT(0) //Force Tx Use Default Key -#define SCR_RxUseDK BIT(1) //Force Rx Use Default Key -#define SCR_TxEncEnable BIT(2) //Enable Tx Encryption -#define SCR_RxDecEnable BIT(3) //Enable Rx Decryption -#define SCR_SKByA2 BIT(4) //Search kEY BY A2 -#define SCR_NoSKMC BIT(5) //No Key Search Multicast -#define SCR_TXBCUSEDK BIT(6) // Force Tx Broadcast packets Use Default Key -#define SCR_RXBCUSEDK BIT(7) // Force Rx Broadcast packets Use Default Key - - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h RTL8723 SDIO Configuration -// -//----------------------------------------------------- - -//SDIO host local register space mapping. -#define SDIO_LOCAL_MSK 0x0FFF -#define WLAN_IOREG_MSK 0x7FFF -#define WLAN_FIFO_MSK 0x1FFF // Aggregation Length[12:0] - -#define SDIO_WITHOUT_REF_DEVICE_ID 0 // Without reference to the SDIO Device ID -#define SDIO_LOCAL_DEVICE_ID 0 // 0b[16], 000b[15:13] -#define WLAN_TX_HIQ_DEVICE_ID 4 // 0b[16], 100b[15:13] -#define WLAN_TX_MIQ_DEVICE_ID 5 // 0b[16], 101b[15:13] -#define WLAN_TX_LOQ_DEVICE_ID 6 // 0b[16], 110b[15:13] -#define WLAN_TX_EXTQ_DEVICE_ID 7 // 0b[16], 110b[15:13] -#define WLAN_RX0FF_DEVICE_ID 7 // 0b[16], 111b[15:13] -#define WLAN_IOREG_DEVICE_ID 8 // 1b[16] - -//SDIO Tx Free Page Index -#define HI_QUEUE_IDX 0 -#define MID_QUEUE_IDX 1 -#define LOW_QUEUE_IDX 2 -#define PUBLIC_QUEUE_IDX 3 -#define EXTRA_QUEUE_IDX 4 //20130422 KaiYuan added for 8814 Extra Queue - -#define SDIO_REG_TX_CTRL 0x0000 // SDIO Tx Control -#define SDIO_REG_HIMR 0x0014 // SDIO Host Interrupt Mask -#define SDIO_REG_HISR 0x0018 // SDIO Host Interrupt Service Routine -#define SDIO_REG_HCPWM 0x0019 // HCI Current Power Mode -#define SDIO_REG_RX0_REQ_LEN 0x001C // RXDMA Request Length -#define SDIO_REG_FREE_TXPG 0x0020 // Free Tx Buffer Page -#define SDIO_REG_HCPWM1 0x0025 // HCI Current Power Mode 1 -#define SDIO_REG_HCPWM2 0x0026 // HCI Current Power Mode 2 -#define SDIO_REG_HTSFR_INFO 0x0030 // HTSF Informaion -#define SDIO_REG_H2C 0x0060 // Host to Client -#define SDIO_REG_HRPWM1 0x0080 // HCI Request Power Mode 1 -#define SDIO_REG_HRPWM2 0x0082 // HCI Request Power Mode 2 -#define SDIO_REG_HPS_CLKR 0x0084 // HCI Power Save Clock -#define SDIO_REG_HSUS_CTRL 0x0086 // SDIO HCI Suspend Control -#define SDIO_REG_HIMR_ON 0x0090 //SDIO Host Extension Interrupt Mask Always -#define SDIO_REG_HISR_ON 0x0091 //SDIO Host Extension Interrupt Status Always - -#define SDIO_HIMR_DISABLED 0 - -// RTL8723/RTL8188E SDIO Host Interrupt Mask Register -#define SDIO_HIMR_RX_REQUEST_MSK BIT0 -#define SDIO_HIMR_AVAL_MSK BIT1 -#define SDIO_HIMR_TXERR_MSK BIT2 -#define SDIO_HIMR_RXERR_MSK BIT3 -#define SDIO_HIMR_TXFOVW_MSK BIT4 -#define SDIO_HIMR_RXFOVW_MSK BIT5 -#define SDIO_HIMR_TXBCNOK_MSK BIT6 -#define SDIO_HIMR_TXBCNERR_MSK BIT7 -#define SDIO_HIMR_BCNERLY_INT_MSK BIT16 -#define SDIO_HIMR_C2HCMD_MSK BIT17 -#define SDIO_HIMR_CPWM1_MSK BIT18 -#define SDIO_HIMR_CPWM2_MSK BIT19 -#define SDIO_HIMR_HSISR_IND_MSK BIT20 -#define SDIO_HIMR_GTINT3_IND_MSK BIT21 -#define SDIO_HIMR_GTINT4_IND_MSK BIT22 -#define SDIO_HIMR_PSTIMEOUT_MSK BIT23 -#define SDIO_HIMR_OCPINT_MSK BIT24 -#define SDIO_HIMR_ATIMEND_MSK BIT25 -#define SDIO_HIMR_ATIMEND_E_MSK BIT26 -#define SDIO_HIMR_CTWEND_MSK BIT27 - -//RTL8188E SDIO Specific -#define SDIO_HIMR_MCU_ERR_MSK BIT28 -#define SDIO_HIMR_TSF_BIT32_TOGGLE_MSK BIT29 - -// SDIO Host Interrupt Service Routine -#define SDIO_HISR_RX_REQUEST BIT0 -#define SDIO_HISR_AVAL BIT1 -#define SDIO_HISR_TXERR BIT2 -#define SDIO_HISR_RXERR BIT3 -#define SDIO_HISR_TXFOVW BIT4 -#define SDIO_HISR_RXFOVW BIT5 -#define SDIO_HISR_TXBCNOK BIT6 -#define SDIO_HISR_TXBCNERR BIT7 -#define SDIO_HISR_BCNERLY_INT BIT16 -#define SDIO_HISR_C2HCMD BIT17 -#define SDIO_HISR_CPWM1 BIT18 -#define SDIO_HISR_CPWM2 BIT19 -#define SDIO_HISR_HSISR_IND BIT20 -#define SDIO_HISR_GTINT3_IND BIT21 -#define SDIO_HISR_GTINT4_IND BIT22 -#define SDIO_HISR_PSTIMEOUT BIT23 -#define SDIO_HISR_OCPINT BIT24 -#define SDIO_HISR_ATIMEND BIT25 -#define SDIO_HISR_ATIMEND_E BIT26 -#define SDIO_HISR_CTWEND BIT27 - -//RTL8188E SDIO Specific -#define SDIO_HISR_MCU_ERR BIT28 -#define SDIO_HISR_TSF_BIT32_TOGGLE BIT29 - - -// SDIO HCI Suspend Control Register -#define HCI_RESUME_PWR_RDY BIT1 -#define HCI_SUS_CTRL BIT0 - -#define MAX_TX_AGG_PACKET_NUMBER 0x8 - - -//----------------------------------------------------- -// -// 0xFE00h ~ 0xFE55h USB Configuration -// -//----------------------------------------------------- - -//2 USB Information (0xFE17) -#define USB_IS_HIGH_SPEED 0 -#define USB_IS_FULL_SPEED 1 -#define USB_SPEED_MASK BIT(5) - -#define USB_NORMAL_SIE_EP_MASK 0xF -#define USB_NORMAL_SIE_EP_SHIFT 4 - -//2 Special Option -#define USB_AGG_EN BIT(3) - - -//2REG_C2HEVT_CLEAR -#define C2H_EVT_HOST_CLOSE 0x00 // Set by driver and notify FW that the driver has read the C2H command message -#define C2H_EVT_FW_CLOSE 0xFF // Set by FW indicating that FW had set the C2H command message and it's not yet read by driver. - - -//2REG_MULTI_FUNC_CTRL(For RTL8723 Only) -#define WL_HWPDN_EN BIT0 // Enable GPIO[9] as WiFi HW PDn source -#define WL_HWPDN_SL BIT1 // WiFi HW PDn polarity control -#define WL_FUNC_EN BIT2 // WiFi function enable -#define WL_HWROF_EN BIT3 // Enable GPIO[9] as WiFi RF HW PDn source -#define BT_HWPDN_EN BIT16 // Enable GPIO[11] as BT HW PDn source -#define BT_HWPDN_SL BIT17 // BT HW PDn polarity control -#define BT_FUNC_EN BIT18 // BT function enable -#define BT_HWROF_EN BIT19 // Enable GPIO[11] as BT/GPS RF HW PDn source -#define GPS_HWPDN_EN BIT20 // Enable GPIO[10] as GPS HW PDn source -#define GPS_HWPDN_SL BIT21 // GPS HW PDn polarity control -#define GPS_FUNC_EN BIT22 // GPS function enable - -//3 REG_LIFECTRL_CTRL -#define HAL92C_EN_PKT_LIFE_TIME_BK BIT3 -#define HAL92C_EN_PKT_LIFE_TIME_BE BIT2 -#define HAL92C_EN_PKT_LIFE_TIME_VI BIT1 -#define HAL92C_EN_PKT_LIFE_TIME_VO BIT0 - -#define HAL_MSDU_LIFE_TIME_UNIT_128 128 // in us, said by Tim. -#define HAL_MSDU_LIFE_TIME_UNIT_256 256 // in us, said by Tim. - -//2 8192D PartNo. -#define PARTNO_92D_NIC (BIT7|BIT6) -#define PARTNO_92D_NIC_REMARK (BIT5|BIT4) -#define PARTNO_SINGLE_BAND_VS BIT3 -#define PARTNO_SINGLE_BAND_VS_REMARK BIT1 -#define PARTNO_CONCURRENT_BAND_VC (BIT3|BIT2) -#define PARTNO_CONCURRENT_BAND_VC_REMARK (BIT1|BIT0) - - -//======================================================== -// General definitions -//======================================================== -//YP change for 88E SMIC -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8188E(__Adapter) ( IS_VENDOR_8188E_SMIC_SERIES(__Adapter) ? 255 : 175 ) -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8812 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8821B 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8723D 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8822B 2048-1 - -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8814A 2048-1 //20130415 KaiYuan add for 8814 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8723B 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8703B 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8188F 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_8192C 255 -#define LAST_ENTRY_OF_TX_PKT_BUFFER_DUAL_MAC 127 - -#define POLLING_LLT_THRESHOLD 20 - - -#define POLLING_READY_TIMEOUT_COUNT_88E(__Adapter) ((GET_HAL_DATA(__Adapter)->bIsMPChip) ? (u4Byte)3000 : (u4Byte)1000) - -#define POLLING_READY_TIMEOUT_COUNT_92C 1000 - -// Min Spacing related settings. -#define MAX_MSS_DENSITY_2T 0x13 -#define MAX_MSS_DENSITY_1T 0x0A - -// GPIO BIT -#define HAL_8192C_HW_GPIO_WPS_BIT BIT2 -#define HAL_8192EU_HW_GPIO_WPS_BIT BIT7 - - -#endif // #ifndef __INC_HALCOMREG_H diff --git a/network/wlan/WDI/HAL/HalComTxPwrCfg.h b/network/wlan/WDI/HAL/HalComTxPwrCfg.h deleted file mode 100644 index 4497cce3..00000000 --- a/network/wlan/WDI/HAL/HalComTxPwrCfg.h +++ /dev/null @@ -1,119 +0,0 @@ - -u1Byte -PHY_GetTxPowerByRateBase( - IN PADAPTER Adapter, - IN u1Byte Band, - IN u1Byte RfPath, - IN u1Byte TxNum, - IN RATE_SECTION RateSection - ); - -u1Byte -PHY_GetRateSectionIndexOfTxPowerByRate( - IN PADAPTER pAdapter, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - - -VOID -PHY_GetRateValuesOfTxPowerByRate( - IN PADAPTER pAdapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Value, - OUT pu1Byte RateIndex, - OUT ps1Byte PwrByRateVal, - OUT pu1Byte RateNum - ); - -u1Byte -PHY_GetRateIndexOfTxPowerByRate( - IN u1Byte Rate - ); - -VOID -PHY_SetTxPowerIndexByRateSection( - IN PADAPTER pAdapter, - IN u1Byte RFPath, - IN u1Byte Channel, - IN u1Byte RateSection - ); - - -s1Byte -PHY_GetTxPowerByRate( - IN PADAPTER pAdapter, - IN u1Byte Band, - IN u1Byte RFPath, - IN u1Byte TxNum, - IN u1Byte RateIndex - ); - -VOID -PHY_SetTxPowerByRate( - IN PADAPTER pAdapter, - IN u1Byte Band, - IN u1Byte RFPath, - IN u1Byte TxNum, - IN u1Byte Rate, - IN s1Byte Value - ); - -VOID -PHY_SetTxPowerLevelByPath( - IN PADAPTER Adapter, - IN u1Byte channel, - IN u1Byte path - ); - -VOID -PHY_SetTxPowerIndexByRateArray( - IN PADAPTER pAdapter, - IN u1Byte RFPath, - IN CHANNEL_WIDTH BandWidth, - IN u1Byte Channel, - IN pu1Byte Rates, - IN u1Byte RateArraySize - ); - -VOID -PHY_InitTxPowerByRate( - IN PADAPTER pAdapter - ); - -VOID -PHY_StoreTxPowerByRate( - IN PADAPTER pAdapter, - IN u4Byte Band, - IN u4Byte RfPath, - IN u4Byte TxNum, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - - -VOID -PHY_TxPowerByRateConfiguration( - IN PDM_ODM_T pDM_Odm - ); - -u1Byte -PHY_GetTxPowerIndexBase( - IN PADAPTER pAdapter, - IN u1Byte RFPath, - IN u1Byte Rate, - IN CHANNEL_WIDTH BandWidth, - IN u1Byte Channel, - OUT PBOOLEAN bIn24G - ); - -s1Byte -PHY_GetTxPowerTrackingOffset( - PADAPTER pAdapter, - u1Byte RFPath, - u1Byte Rate - ); - - diff --git a/network/wlan/WDI/HAL/HalComTxPwrLmtCfg.h b/network/wlan/WDI/HAL/HalComTxPwrLmtCfg.h deleted file mode 100644 index fabb60d7..00000000 --- a/network/wlan/WDI/HAL/HalComTxPwrLmtCfg.h +++ /dev/null @@ -1,33 +0,0 @@ - -s1Byte -PHY_GetTxPowerLimit( - IN PADAPTER Adapter, - IN u4Byte RegPwrTblSel, - IN BAND_TYPE Band, - IN CHANNEL_WIDTH Bandwidth, - IN u1Byte RfPath, - IN u1Byte DataRate, - IN u1Byte Channel - ); - -VOID -PHY_SetTxPowerLimit( - IN PDM_ODM_T pDM_Odm, - IN pu1Byte Regulation, - IN pu1Byte Band, - IN pu1Byte Bandwidth, - IN pu1Byte RateSection, - IN pu1Byte RfPath, - IN pu1Byte Channel, - IN pu1Byte PowerLimit - ); - -VOID -PHY_ConvertTxPowerLimitToPowerIndex( - IN PADAPTER Adapter - ); - -VOID -PHY_InitTxPowerLimit( - IN PDM_ODM_T pDM_Odm - ); \ No newline at end of file diff --git a/network/wlan/WDI/HAL/HalDM.h b/network/wlan/WDI/HAL/HalDM.h deleted file mode 100644 index d0855954..00000000 --- a/network/wlan/WDI/HAL/HalDM.h +++ /dev/null @@ -1,123 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2011, RealTEK Technology Inc. All Right Reserved. - * - * Module: HALDM.h - * - * - * Note: The header file records - * - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * 09/22/2011 MHC Create initial version. - * -******************************************************************************/ -#ifndef __HALDM_H__ -#define __HALDM_H__ - - - - -//============================================================ -// Description: -// -// This file is for 92CE/92CU dynamic mechanism only -// -// -//============================================================ - -//============================================================ -// structure and define -//============================================================ -#define DM_Type_ByFW 0 -#define DM_Type_ByDriver 1 - -//============================================================ -// function prototype -//============================================================ -void InitHalDm( - IN PADAPTER Adapter - ); -void DeInitHalDm( - IN PADAPTER Adapter - ); - - -void HalDmWatchDog( - IN PADAPTER Adapter - ); - - -u1Byte -dm_initial_gain_MinPWDB( - IN PADAPTER pAdapter -); - -void -dm_CCK_PacketDetectionThresh( - IN PADAPTER pAdapter -); - -VOID -dm_CCK_PacketDetectionThresh_DMSP( - IN PADAPTER pAdapter -); - - -VOID -DM_Write_DIG_DMSP( - IN PADAPTER pAdapter -); - - -extern VOID -DM_AggModeSwitch( - IN PADAPTER Adapter - ); - - -BOOLEAN -dm_DualMacGetParameterFromBuddyAdapter( - PADAPTER Adapter -); - - -// -// 2011/02/10 MH Add 92D relative definition in the section. -// -VOID -DM_Write_DIG_DMSP( - IN PADAPTER pAdapter -); -// -// 2011/02/10 MH Add 92D relative definition in the section. -// - -VOID -odm_FindMinimumRSSI_Dmsp( - IN PADAPTER pAdapter -); - -VOID -DM_OverwriteDig( - IN PADAPTER Adapter, - IN u1Byte digValue - ); - -VOID -DM_OverwriteCckCcaThres( - IN PADAPTER Adapter, - IN u1Byte ccaThres - ); - -VOID -DM_HwPbcGPIOChk( - IN PADAPTER pAdapter - ); - -#endif //__HALDM_H__ - diff --git a/network/wlan/WDI/HAL/HalEEPROM.h b/network/wlan/WDI/HAL/HalEEPROM.h deleted file mode 100644 index 913ac988..00000000 --- a/network/wlan/WDI/HAL/HalEEPROM.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef __INC_EEPROM_H -#define __INC_EEPROM_H - -#define EEPROM_MAX_SIZE 256 -#define CLOCK_RATE 50 //100us - -//- EEPROM opcodes -#define EEPROM_READ_OPCODE 06 -#define EEPROM_WRITE_OPCODE 05 -#define EEPROM_ERASE_OPCODE 07 -#define EEPROM_EWEN_OPCODE 19 // Erase/write enable -#define EEPROM_EWDS_OPCODE 16 // Erase/write disable - -#define CSR_EEPROM_CONTROL_REG (Adapter->HalFunc.pEEPROMOffset->CmdRegister) -#define EEDO (Adapter->HalFunc.pEEPROMOffset->BIT_EEDO) // EEPROM data out -#define EEDI (Adapter->HalFunc.pEEPROMOffset->BIT_EEDI) // EEPROM data in (set for writing data) -#define EECS (Adapter->HalFunc.pEEPROMOffset->BIT_EECS) // EEPROM chip select (1=high, 0=low) -#define EESK (Adapter->HalFunc.pEEPROMOffset->BIT_EESK) // EEPROM shift clock (1=high, 0=low) -#define EEM0 (Adapter->HalFunc.pEEPROMOffset->BIT_EEM0) -#define EEM1 (Adapter->HalFunc.pEEPROMOffset->BIT_EEM1) - - -u2Byte -GetEEpromAddressSize( - u2Byte Size - ); - -u2Byte -GetEEpromSize( - PADAPTER Adapter - ); - -u2Byte -ReadEEprom( - PADAPTER Adapter, - u2Byte Reg - ); - - - -VOID -ShiftOutBits( - PADAPTER Adapter, - u2Byte data, - u2Byte count - ); - -u2Byte -ShiftInBits( - PADAPTER Adapter - ); - -VOID -RaiseClock( - PADAPTER Adapter, - u2Byte *x - ); - -VOID -LowerClock( - PADAPTER Adapter, - u2Byte *x - ); - -VOID -EEpromCleanup( - PADAPTER Adapter - ); - -VOID -UpdateChecksum( - PADAPTER Adapter - ); - -VOID -WriteEEprom( - PADAPTER Adapter, - u2Byte reg, - u2Byte data - ); - -u2Byte -WaitEEPROMCmdDone( - PADAPTER Adapter - ); - -VOID -StandBy( - PADAPTER Adapter - ); - -extern BOOLEAN -EEPROM_ProgramMap( - IN PADAPTER Adapter, - IN ps1Byte pFileName); - -#endif // #ifndef __INC_EEPROM_H diff --git a/network/wlan/WDI/HAL/HalEfuse.h b/network/wlan/WDI/HAL/HalEfuse.h deleted file mode 100644 index 9bfe9d94..00000000 --- a/network/wlan/WDI/HAL/HalEfuse.h +++ /dev/null @@ -1,461 +0,0 @@ -/****************************************************************************** - * - * (c) Copyright 2008, RealTEK Technologies Inc. All Rights Reserved. - * - * 03/04/2011 Cosa Modify - * -******************************************************************************/ -#ifndef __INC_HAL_EFUSE_H__ -#define __INC_HAL_EFUSE_H__ - -//============================================= -// Here we define which chip need to be supported or not -//============================================= -#define SUPPORT_EFUSE 1 -#if(SUPPORT_EFUSE == 1) - -#define EFUSE_SUPPORT_92S 1 -#define EFUSE_SUPPORT_92C 1 -#define EFUSE_SUPPORT_92D 1 -#define EFUSE_SUPPORT_8188E 1 -#define EFUSE_SUPPORT_8188F 1 -#define EFUSE_SUPPORT_8812A 1 -#define EFUSE_SUPPORT_8811A 1 -#define EFUSE_SUPPORT_8821A 1 -#define EFUSE_SUPPORT_8192E 1 -#define EFUSE_SUPPORT_8814A 1 -#define EFUSE_SUPPORT_8723B 1 -#define EFUSE_SUPPORT_8703B 1 -#define EFUSE_SUPPORT_8822B 1 -#define EFUSE_SUPPORT_8723D 1 - -#else -#define EFUSE_SUPPORT_92S 0 -#define EFUSE_SUPPORT_92C 0 -#define EFUSE_SUPPORT_92D 0 -#define EFUSE_SUPPORT_8188E 0 -#define EFUSE_SUPPORT_8188F 0 -#define EFUSE_SUPPORT_8812A 0 -#define EFUSE_SUPPORT_8192E 0 -#define EFUSE_SUPPORT_8814A 0 -#endif -//============================================= - - -#define HWSET_MAX_SIZE_128 128 -#define HWSET_MAX_SIZE_256 256 -#define HWSET_MAX_SIZE_512 512 - -#define EFUSE_BANK_SIZE 512 - -#define EFUSE_ERROE_HANDLE 1 -/*--------------------------Define Parameters-------------------------------*/ -#define EFUSE_INIT_MAP 0 -#define EFUSE_MODIFY_MAP 1 - -#define _TRUE 1 -#define _FALSE 0 - -#define EFUSE_CLK_CTRL EFUSE_CTRL -#ifdef BIT - #undef BIT -#endif -#define BIT(x) (1 << (x)) - - -#define PG_STATE_HEADER 0x01 -#define PG_STATE_WORD_0 0x02 -#define PG_STATE_WORD_1 0x04 -#define PG_STATE_WORD_2 0x08 -#define PG_STATE_WORD_3 0x10 -#define PG_STATE_DATA 0x20 - -#define PG_SWBYTE_H 0x01 -#define PG_SWBYTE_L 0x02 - -#define PGPKT_DATA_SIZE 8 - -#define EFUSE_WIFI 0 -#define EFUSE_BT 1 - -enum{ - VOLTAGE_V25 = 0x03, - LDOE25_SHIFT = 28 , - }; - -enum _EFUSE_DEF_TYPE { - TYPE_EFUSE_MAX_SECTION = 0, - TYPE_EFUSE_REAL_CONTENT_LEN = 1, - TYPE_AVAILABLE_EFUSE_BYTES_BANK = 2, - TYPE_AVAILABLE_EFUSE_BYTES_TOTAL = 3, - TYPE_EFUSE_MAP_LEN = 4, - TYPE_EFUSE_PROTECT_BYTES_BANK = 5, - TYPE_EFUSE_CONTENT_LEN_BANK = 6, -}; - -#define EFUSE_MAX_MAP_LEN 1024 -#define EFUSE_MAX_HW_SIZE 1024 - -#define EFUSE_MAX_SECTION_BASE 16 - -typedef enum _PACKAGE_TYPE_E -{ - PACKAGE_DEFAULT, - PACKAGE_QFN68, - PACKAGE_TFBGA90, - PACKAGE_TFBGA80, - PACKAGE_TFBGA79 -}PACKAGE_TYPE_E; - - -#define IS_AVAILABLE_EFUSE_ADDR(_Adapter, _Addr) \ - (IS_HARDWARE_TYPE_8188E(_Adapter) ? AVAILABLE_EFUSE_ADDR_88E(_Addr) : AVAILABLE_EFUSE_ADDR_92C(_Addr)) -#define IS_AVAILABLE_BT_EFUSE_ADDR(_eFuse_Addr, _endBank) (_eFuse_Addr < (_endBank+1) * EFUSE_MAX_BANK_SIZE) - -#define EXT_HEADER(header) ((header & 0x1F ) == 0x0F) -#define ALL_WORDS_DISABLED(wde) ((wde & 0x0F) == 0x0F) -#define GET_HDR_OFFSET_2_0(header) ( (header & 0xE0) >> 5) - -#define EFUSE_REPEAT_THRESHOLD_ 0 -#define EFUSE_REPEAT_HEADER_THRESHOLD 0 - -#define EFUSE_MAP_LEN 128 -#define EFUSE_MAX_SECTION 16 -#define EFUSE_MAX_WORD_UNIT 4 - -// -// To prevent out of boundary programming case, leave 1byte and program full section -// 9bytes + 1byt + 5bytes and pre 1byte. -// For worst case: -// | 1byte|----8bytes----|1byte|--5bytes--| -// | | Reserved(14bytes) | -// -#define EFUSE_OOB_PROTECT_BYTES 15 // PG data exclude header, dummy 6 bytes frome CP test and reserved 1byte. - - -//============================================= - -#define IS_MASKED_MP(ic, txt, offset) (EFUSE_IsAddressMasked_MP_##ic##txt(offset)) -#define IS_MASKED_TC(ic, txt, offset) (EFUSE_IsAddressMasked_TC_##ic##txt(offset)) -#define GET_MASK_ARRAY_LEN_MP(ic, txt) (EFUSE_GetArrayLen_MP_##ic##txt()) -#define GET_MASK_ARRAY_LEN_TC(ic, txt) (EFUSE_GetArrayLen_TC_##ic##txt()) -#define GET_MASK_ARRAY_MP(ic, txt, offset) (EFUSE_GetMaskArray_MP_##ic##txt(offset)) -#define GET_MASK_ARRAY_TC(ic, txt, offset) (EFUSE_GetMaskArray_TC_##ic##txt(offset)) - - -#define IS_MASKED(ic, txt, offset) ((pHalData->bIsMPChip) ? IS_MASKED_MP(ic,txt, offset) : IS_MASKED_TC(ic,txt, offset)) -#define GET_MASK_ARRAY_LEN(ic, txt) ((pHalData->bIsMPChip) ? GET_MASK_ARRAY_LEN_MP(ic,txt) : GET_MASK_ARRAY_LEN_TC(ic,txt)) -#define GET_MASK_ARRAY(ic, txt, out) do {((pHalData->bIsMPChip) ? GET_MASK_ARRAY_MP(ic,txt, out) : GET_MASK_ARRAY_TC(ic,txt, out));} while(0) - - - -//============================================= -// The following is for BT Efuse definition -//============================================= -#define EFUSE_BT_MAX_MAP_LEN 1024 -#define EFUSE_MAX_BANK 4 -#define EFUSE_MAX_BANK_SIZE 512 -#define EFUSE_MAX_BT_BANK (EFUSE_MAX_BANK-1) -//============================================= -/*--------------------------Define Parameters-------------------------------*/ - - -/*------------------------------Define structure----------------------------*/ -typedef struct PG_PKT_STRUCT_A{ - UINT8 offset; - UINT8 word_en; - UINT8 data[8]; - u1Byte word_cnts; -}PGPKT_STRUCT,*PPGPKT_STRUCT; - - -typedef struct _EFUSE_HAL{ - u1Byte fakeEfuseBank; - u4Byte fakeEfuseUsedBytes; - u1Byte fakeEfuseContent[EFUSE_MAX_HW_SIZE]; - u1Byte fakeEfuseInitMap[EFUSE_MAX_MAP_LEN]; - u1Byte fakeEfuseModifiedMap[EFUSE_MAX_MAP_LEN]; - - u4Byte EfuseUsedBytes; - u1Byte EfuseUsedPercentage; - - u2Byte BTEfuseUsedBytes; - u1Byte BTEfuseUsedPercentage; - u1Byte BTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; - u1Byte BTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]; - u1Byte BTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; - - u2Byte fakeBTEfuseUsedBytes; - u1Byte fakeBTEfuseContent[EFUSE_MAX_BT_BANK][EFUSE_MAX_HW_SIZE]; - u1Byte fakeBTEfuseInitMap[EFUSE_BT_MAX_MAP_LEN]; - u1Byte fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN]; - - // EFUSE Configuration, initialized in HAL_CmnInitPGData(). - const u2Byte MaxSecNum_WiFi; - const u2Byte MaxSecNum_BT; - const u2Byte WordUnit; - const u2Byte PhysicalLen_WiFi; - const u2Byte PhysicalLen_BT; - const u2Byte LogicalLen_WiFi; - const u2Byte LogicalLen_BT; - const u2Byte BankSize; - const u2Byte TotalBankNum; - const u2Byte BankNum_WiFi; - const u2Byte BankNum_BT; - const u2Byte OOBProtectBytes; - const u2Byte ProtectBytes; - const u2Byte BankAvailBytes; - const u2Byte TotalAvailBytes_WiFi; - const u2Byte TotalAvailBytes_BT; - - const u2Byte HeaderRetry; - const u2Byte DataRetry; - - RT_ERROR_CODE Status; -}EFUSE_HAL, *PEFUSE_HAL; -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -/*------------------------Export global variable----------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ - -extern VOID -EFUSE_ShadowRead( - IN PADAPTER pAdapter, - IN u1Byte ByteCount, - IN u2Byte Offset, - IN OUT u4Byte *Value ); - -extern VOID -EFUSE_MaskedShadowRead( - IN PADAPTER pAdapter, - IN u1Byte ByteCount, - IN u2Byte Offset, - IN OUT u4Byte *Value ); - -extern VOID -EFUSE_ShadowWrite( - IN PADAPTER pAdapter, - IN u1Byte Type, - IN u2Byte Offset, - IN OUT u4Byte Value ); -BOOLEAN -EFUSE_ShadowUpdate( - IN PADAPTER pAdapter, - IN BOOLEAN bPseudoTest - ); -BOOLEAN -EFUSE_ShadowUpdateChk( - IN PADAPTER pAdapter, - IN u1Byte efuseType, - IN BOOLEAN bPseudoTest); -VOID -EFUSE_RenewShadowMaps( - IN PADAPTER pAdapter, - IN u1Byte efuseType, - IN BOOLEAN bPseudoTest); - - -extern VOID -EFUSE_ForceWriteVendorId( - IN PADAPTER pAdapter); - -BOOLEAN -EFUSE_ProgramMap( - IN PADAPTER Adapter, - IN ps1Byte pFileName, - IN u1Byte TableType, - IN BOOLEAN bPseudoTest); // 0=Shadow 1=Real Efuse - -extern VOID -EFUSE_ResetLoader( - IN PADAPTER pAdapter); - - - -VOID -Hal_InitEfuseVars( - IN PEFUSE_HAL pEfuseHal - ); - - -VOID -Hal_ReadEFuseByIC( - PADAPTER Adapter, - u1Byte efuseType, - u2Byte _offset, - u2Byte _size_byte, - u1Byte *pbuf, - IN BOOLEAN bPseudoTest - ); -VOID -Hal_ReadEFuse_Pseudo( - PADAPTER Adapter, - u1Byte efuseType, - u2Byte _offset, - u2Byte _size_byte, - u1Byte *pbuf, - IN BOOLEAN bPseudoTest - ); -VOID -EFUSE_LoadMap( - IN PADAPTER pAdapter, - IN u1Byte efuseType, - IN OUT u1Byte *Efuse, - IN BOOLEAN bPseudoTest); - -VOID -EFUSE_PowerSwitch( - IN PADAPTER pAdapter, - IN UINT8 bWrite, - IN UINT8 PwrState); -INT32 -EFUSE_PgPacketWrite( - IN PADAPTER pAdapter, - IN UINT8 efuseType, - IN UINT8 offset, - IN UINT8 word_en, - IN UINT8 *data, - IN BOOLEAN bPseudoTest); - -VOID -EFUSE_FakeShadowRead1Byte( - IN PADAPTER pAdapter, - IN u1Byte efuseType, - IN u2Byte Offset, - IN OUT UINT8 *Value ); -VOID -EFUSE_FakeShadowWrite1Byte( - IN PADAPTER pAdapter, - IN u2Byte Offset, - IN UINT8 Value ); -BOOLEAN -EFUSE_FakeContentRead1Byte( - IN PADAPTER pAdapter, - IN u2Byte Offset, - IN OUT UINT8 *Value ); -BOOLEAN -EFUSE_FakeContentWrite1Byte( - IN PADAPTER pAdapter, - IN u2Byte Offset, - IN UINT8 Value ); -VOID -EFUSE_GetEfuseDefinition( - IN PADAPTER pAdapter, - IN u1Byte efuseType, - IN u1Byte type, - OUT pu2Byte pOut, - IN BOOLEAN bPseudoTest - ); -u2Byte -EFUSE_GetCurrentSize( - IN PADAPTER pAdapter, - IN u1Byte efuseType, - IN BOOLEAN bPseudoTest); -UINT8 -EFUSE_CalculateWordCnts( - IN UINT8 word_en); - -void -EFUSE_WordEnableDataRead( IN UINT8 word_en, - IN UINT8 *sourdata, - IN UINT8 *targetdata); -INT32 -EFUSE_OneByteRead( - IN PADAPTER pAdapter, - IN u2Byte addr, - IN UINT8 *data, - IN BOOLEAN bPseudoTest); -INT32 -EFUSE_OneByteWrite( - IN PADAPTER pAdapter, - IN u2Byte addr, - IN UINT8 data, - IN BOOLEAN bPseudoTest); - -INT32 -EFUSE_PgPacketRead( IN PADAPTER pAdapter, - IN UINT8 offset, - IN UINT8 *data, - IN BOOLEAN bPseudoTest); -UINT8 -EFUSE_WordEnableDataWrite( IN PADAPTER pAdapter, - IN u2Byte efuse_addr, - IN UINT8 word_en, - IN UINT8 *data, - IN BOOLEAN bPseudoTest); - -BOOLEAN -EFUSE_ContentWrite1Byte( - IN PADAPTER pAdapter, - IN UINT8 bank, - IN u2Byte Offset, - IN UINT8 Value ); - -VOID -efuse_ShadowRead1Byte_BT( - IN PADAPTER pAdapter, - IN u2Byte Offset, - IN OUT UINT8 *Value ); -VOID -EFUSE_ShadowReadBT( - IN PADAPTER pAdapter, - IN u1Byte Type, - IN u2Byte Offset, - IN OUT u4Byte *Value ); -VOID -efuse_ShadowWrite1Byte_BT( - IN PADAPTER pAdapter, - IN u2Byte Offset, - IN UINT8 Value ); -VOID -EFUSE_ShadowWriteBT( - IN PADAPTER pAdapter, - IN u1Byte Type, - IN u2Byte Offset, - IN OUT u4Byte Value ); -VOID -EFUSE_FakeShadowWrite1Byte_BT( - IN PADAPTER pAdapter, - IN u2Byte Offset, - IN UINT8 Value ); - -BOOLEAN -EFUSE_SwitchToBank( - IN PADAPTER pAdapter, - IN u1Byte bank, - IN BOOLEAN bPseudoTest - ); -BOOLEAN -EFUSE_ShadowUpdateBT( - IN PADAPTER pAdapter, - IN BOOLEAN bPseudoTest - ); -u1Byte -EFUSE_GetFakeEfusebank( - IN PADAPTER Adapter - ); -VOID -EFUSE_SetFakeEfusebank( - IN PADAPTER Adapter, - IN u1Byte bank - ); - -VOID -Hal_EEValueCheck( - IN u1Byte EEType, - IN PVOID pInValue, - OUT PVOID pOutValue - ); - -/*--------------------------Exported Function prototype---------------------*/ - -#endif - diff --git a/network/wlan/WDI/HAL/HalFw.h b/network/wlan/WDI/HAL/HalFw.h deleted file mode 100644 index 9a4603e8..00000000 --- a/network/wlan/WDI/HAL/HalFw.h +++ /dev/null @@ -1,105 +0,0 @@ -#ifndef __INC_HAL_FW_H -#define __INC_HAL_FW_H - - -#define FW_QUEME_MECHANISM_NEW 0 - -#define FW_QUEUE_IDLE 0 -#define FW_QUEUE_WAIT 1 - -#define FW_H2C_MAX_NUM 20 - -#if(FW_QUEME_MECHANISM_NEW == 1) -typedef struct _FW_COM_STR{ - VIRTUAL_MEMORY fwDataListBuf; - u4Byte NumTotalH2c; - RT_LIST_ENTRY halFwH2cWaitQueue; - u4Byte NumFwWaitH2c; - RT_LIST_ENTRY halFwH2cIdleQueue; - u4Byte NumFwIdleH2c; -}FW_COM_STR, *PFW_COM_STR; -#else -#define FW_COM_STR u1Byte -#endif - -// H2C command structre to keep the info for USB/SDIO interface. -// The H2C cmd format in 92S is different from 92C/88E series -// so use_H2C_CMD _8192C to separare 92S and 92C/88E series. -typedef struct _H2C_CMD_8192C -{ - u1Byte ElementID; - u4Byte CmdLen; - u4Byte CmdBuffer[2]; - u1Byte InProgress; -}H2C_CMD_8192C,*PH2C_CMD_8192C; - -typedef struct _H2C_CMD_ENTRY -{ - RT_LIST_ENTRY listEntry; - H2C_CMD_8192C h2cCmd; -}H2C_CMD_ENTRY,*PH2C_CMD_ENTRY; - -#if(FW_QUEME_MECHANISM_NEW == 1) -//================================================== -// extern function -//================================================== -RT_STATUS -FW_AllocateMemory( - IN PADAPTER Adapter - ); -VOID -FW_FreeMemory( - IN PADAPTER Adapter - ); -BOOLEAN -FW_SendH2c( - IN PADAPTER Adapter, - IN u1Byte elementId, - IN u4Byte dataLen, - IN pu1Byte pData - ); -BOOLEAN -FW_RetrieveH2c( - IN PADAPTER Adapter, - IN pu1Byte pData - ); -BOOLEAN -FW_IsH2cWaitQueueEmpty( - IN PADAPTER Adapter - ); -#else -#define FW_AllocateMemory(Adapter) RT_STATUS_SUCCESS -#define FW_FreeMemory(Adapter) -#endif - -VOID -FW_InitializeVariables( - IN PADAPTER Adapter - ); - -VOID -FW_FillH2CCmd( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer - ); - - -VOID -FW_WaitForH2CQueueEmpty( - IN PADAPTER pAdapter - ); - -VOID -FW_InitializeHALVars( - IN PADAPTER Adapter - ); - -RT_STATUS -FW_FirmwareDownload( - IN PADAPTER Adapter, - IN BOOLEAN bUsedWoWLANFw - ); - -#endif diff --git a/network/wlan/WDI/HAL/HalH2cIOCmd.h b/network/wlan/WDI/HAL/HalH2cIOCmd.h deleted file mode 100644 index c2b51a6d..00000000 --- a/network/wlan/WDI/HAL/HalH2cIOCmd.h +++ /dev/null @@ -1,372 +0,0 @@ -#ifndef __INC_HAL_H2CIOCMD_H -#define __INC_HAL_H2CIOCMD_H - -//-------------------------------------------- -//3 Host Message Box -//-------------------------------------------- - -//_RSVDPAGE_LOC_CMD0 -#define SET_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_LOC_BT_CTS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) - -//_MEDIA_STATUS_RPT_PARM_CMD1 -#define SET_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) -#define SET_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value) - -// _WoWLAN PARAM_CMD5 -#define SET_H2CCMD_WOWLAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 1, __Value) -#define SET_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 1, 1, __Value) -#define SET_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 2, 1, __Value) -#define SET_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 3, 1, __Value) -#define SET_H2CCMD_WOWLAN_ALL_PKT_DROP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 4, 1, __Value) -#define SET_H2CCMD_WOWLAN_GPIO_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 5, 1, __Value) -#define SET_H2CCMD_WOWLAN_REKEY_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 6, 1, __Value) -#define SET_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 7, 1, __Value) -#define SET_H2CCMD_WOWLAN_GPIONUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_H2CCMD_WOWLAN_GPIO_PULSE_CNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 1, 8, __Value) - -//WLANINFO_PARM -#define SET_H2CCMD_WLANINFO_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_WLANINFO_PARM_CHANNEL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_WLANINFO_PARM_BW40MHZ(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -// _REMOTE_WAKEUP_CMD7 -#define SET_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value) -#define SET_H2CCMD_REMOTE_WAKE_CTRL_NETWORK_LIST_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value) - -// _AP_OFFLOAD_CMD8 -#define SET_H2CCMD_AP_OFFLOAD_ON(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_AP_OFFLOAD_HIDDEN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_AP_OFFLOAD_DENYANY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_AP_OFFLOAD_WAKEUP_EVT_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -// FCS_LOC_CMD10 (Not appear in 8192EE) -#define SET_H2CCMD_RSVDPAGE_FCS_LOC_NULL_DATA0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_FCS_LOC_NULL_DATA1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_RSVDPAGE_FCS_LOC_NULL_DATA2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -// FCS_INFO_CMD11 -#define SET_H2CCMD_FCS_INFO_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 4, __Value) -#define SET_H2CCMD_FCS_INFO_TOTAL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 4, 4, __Value) -#define SET_H2CCMD_FCS_INFO_CHIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+1), 0, 8, __Value) -#define SET_H2CCMD_FCS_INFO_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 0, 2, __Value) -#define SET_H2CCMD_FCS_INFO_BWSC_40(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 2, 3, __Value) -#define SET_H2CCMD_FCS_INFO_BWSC_80(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 5, 3, __Value) -#define SET_H2CCMD_FCS_INFO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+3), 0, 8, __Value) -#define SET_H2CCMD_FCS_INFO_MACID0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+4), 0, 8, __Value) -#define SET_H2CCMD_FCS_INFO_MACID1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+5), 0, 8, __Value) - -// From Jaguar -#define SET_H2CCMD_FCS_INFO_RFETYPE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+6), 0, 8, __Value) - -// _PWR_MOD_CMD20 -#define SET_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_PWRMODE_PARM_RLBM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 4, __Value) -#define SET_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value) -#define SET_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_H2CCMD_PWRMODE_PARM_TWO_ANTENNA_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) - -#define GET_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd) LE_BITS_TO_1BYTE((__pH2CCmd), 0, 8) - -// AOAC_GLOBAL_INFO -#define SET_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) - -// AOAC_RSVDPAGE_LOC -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_NS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) -#define SET_H2CCMD_AOAC_RSVDPAGE_LOC_PROT_OFFLOAD_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 8, __Value) - -// RSVDPAGE_LOC_3 -#define SET_H2CCMD_RSVDPAGE_LOC_3_NLO_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) - -//_SCAN_OFFLOAD_CTRL -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_D0_SCAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 1, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_RTD3_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 1, 1, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_U3_SCAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 2, 1, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_NLO_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 3, 1, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_IPS_DEPENDENT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 4, 1, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_RSVDPAGE_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_CHNL_INFO_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_SSID_INFO_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -#define GET_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_ENABLE(__pH2CCmd) LE_BITS_TO_1BYTE((__pH2CCmd), 0, 8) - -//_CHANNEL_PATTERN -#define SET_H2CCMD_CHANNEL_PATTERN_PARM_CHNL_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_H2CCMD_CHANNEL_PATTERN_PARM_TXPWRIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_CHANNEL_PATTERN_PARM_TIMEOUT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_CHANNEL_PATTERN_PARM_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -// BT_FW_PATCH -//#define SET_H2CCMD_BT_FW_PATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_H2CCMD_BT_FW_PATCH_SIZE(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE((pu1Byte)(__pH2CCmd), 0, 16, __Value) -#define SET_H2CCMD_BT_FW_PATCH_ADDR0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_BT_FW_PATCH_ADDR1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+3, 0, 8, __Value) -#define SET_H2CCMD_BT_FW_PATCH_ADDR2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+4, 0, 8, __Value) -#define SET_H2CCMD_BT_FW_PATCH_ADDR3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+5, 0, 8, __Value) - -//_INACTIVE_PS_CTRL -#define SET_H2CCMD_INACTIVE_PS_PARM_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 1, __Value) -#define SET_H2CCMD_INACTIVE_PS_PARM_IGNORE_PS_CONDITION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 1, 1, __Value) -#define SET_H2CCMD_INACTIVE_PS_PARM_SCAN_FREQUENCY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_H2CCMD_INACTIVE_PS_PARM_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -#define GET_H2CCMD_INACTIVE_PS_PARM_FUNC_ENABLE(__pH2CCmd) LE_BITS_TO_1BYTE((__pH2CCmd), 0, 1) - -// Disconnect_Decision_Control -// -// 1. The value "CHECK_PERIOD" should be larger than 5 which Fw checks beacon lost period. -// 2. "TRY_OK_BCN_LOST_CNT" should be smaller than "CHECK_PERIOD". -#define SET_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 1, __Value) -#define SET_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 1, 1, __Value) -#define SET_H2CCMD_DISCONNECT_DECISION_CTRL_CNT_BCN_LOST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 2, 1, __Value) -#define SET_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) // unit: beacon period -#define SET_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_H2CCMD_DISCONNECT_DECISION_CTRL_TRY_OK_BCN_LOST_CNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -// WIFI_CALIBRATION -#define SET_H2CCMD_WIFI_CALIBRATION_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 1, __Value) - -// Keep Alive Control -#define SET_H2CCMD_KEEP_ALIVE_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 1, __Value) -#define SET_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 1, 1, __Value) -#define SET_H2CCMD_KEEP_ALIVE_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) - -typedef enum _H2C_CMD -{ - H2C_RSVDPAGE = 0, - H2C_MSRRPT = 1, - H2C_SCAN = 2, // No used in 8723B, 8192E, 8812/8821 - H2C_KEEP_ALIVE_CTRL = 3, - H2C_DISCONNECT_DECISION = 4, - - H2C_INIT_OFFLOAD = 6, // No used in 8723B, 8192E, 8812/8821 - H2C_AP_OFFLOAD = 8, // - H2C_BCN_RSVDPAGE = 9, // - H2C_PROBERSP_RSVDPAGE = 10, // - H2C_TXPOWER_INDEX_OFFLOAD = 0x0B, - H2C_FCS_LOCATION = 0x10, - H2C_FCS_INFO = 0x11, - - H2C_NAN = 0x1B, - - H2C_SETPWRMODE = 0x20, - - H2C_PS_TUNING_PARA = 0x21, // No used in 8723B, 8192E, 8812/8821 - H2C_PS_TUNING_PARA2 = 0x22, // - H2C_PS_LPS_PARA = 0x23, // - H2C_P2P_PS_OFFLOAD = 0x24, // - - H2C_INACTIVE_PS = 0x27, - - H2C_RA_MASK = 0x40, - H2C_TxBF = 0x41, // ADDed from 8192E and 8812 - H2C_RSSI_REPORT = 0x42, - H2C_AP_REQ_TXRPT = 0x43, - H2C_INIT_RATE_COLLECT = 0x44, - H2C_IQ_CALIBRATION = 0x45, - H2C_RA_PARA_ADJUST = 0x47, - H2C_FW_TRACE_EN = 0x49, - - - H2C_BT_FW_PATCH = 0x6a, - H2C_WIFI_CALIBRATION = 0x6d, // 8723B used only - - H2C_WO_WLAN = 0x80, - H2C_REMOTE_WAKE_CTRL = 0x81, - H2C_AOAC_GLOBAL_INFO = 0x82, - H2C_AOAC_RSVDPAGE = 0x83, - - H2C_AOAC_RSVDPAGE2 = 0x84, // 8812 used only - - H2C_SCAN_OFFLOAD_CTRL = 0x86, - H2C_FW_SWCHANNL = 0x87, - H2C_AOAC_RSVDPAGE3 = 0x88, - - //Not defined in new 88E H2C CMD Format - H2C_SELECTIVE_SUSPEND_ROF_CMD, - H2C_P2P_PS_MODE, // This be replaced with H2C_P2P_PS_OFFLOAD(0x24) - H2C_PSD_RESULT, - MAX_H2CCMD -}_H2C_CMD; - -VOID -FillH2CCmd( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -BOOLEAN -CheckFwReadLastH2C( - IN PADAPTER Adapter, - IN u1Byte BoxNum -); - -VOID -SetFwPwrModeCmd( - IN PADAPTER Adapter, - IN u1Byte Mode -); - -VOID -SetFwMediaStatusRptCmd( - IN PADAPTER Adapter, - IN u1Byte mstatus, - IN BOOLEAN macId_Ind, - IN u1Byte macId, - IN u1Byte macId_End -); - -VOID -SetFwRemoteWakeCtrlCmd( - IN PADAPTER Adapter, - IN u1Byte Enable -); - -VOID -SetFwGlobalInfoCmd( - IN PADAPTER Adapter -); - -VOID -SetFwScanOffloadCtrlCmd( - IN PADAPTER Adapter, - IN u1Byte Type, - IN u1Byte ScanOffloadEnable, - IN u1Byte NLOEnable -); - -VOID -SetFwInactivePSCmd( - IN PADAPTER Adapter, - IN u1Byte Enable, - IN BOOLEAN bActiveWakeup, - IN BOOLEAN bForceClkOff -); - -VOID -SetFwBTFwPatchCmd( - IN PADAPTER Adapter, - IN u2Byte FwSize -); - -VOID -SetFwDisconnectDecisionCtrlCmd( - IN PADAPTER Adapter, - IN BOOLEAN bEnabled -); - -VOID -SetFwWiFiCalibrationCmd( - IN PADAPTER Adapter, - IN u1Byte u1Enable -); - -VOID -ConstructFwGTKInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuffer -); - -VOID -ConstructFwRemoteWakeCtrlInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuffer -); - -VOID -ConstructFwProtrolOffloadInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuffer -); - -VOID -ConstructFwChannelInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuffer, - OUT pu4Byte pBufferLen -); - -VOID -ConstructFwSsidInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuffer, - OUT pu4Byte pBufferLen -); - -VOID -ConstructFwNLOInfo( - IN PADAPTER Adapter, - OUT pu1Byte pBuffer, - OUT pu4Byte pBufferLen -); - -u4Byte -FillH2CCommand( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -#if(FW_QUEME_MECHANISM_NEW != 1) -VOID -AddH2CCmdQueue( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -BOOLEAN -RetriveH2CCmdQueue( - IN PADAPTER Adapter, - IN pu1Byte pH2CCmdBuf -); -#endif - - -VOID -SetFwFcsLocCmd( - IN PADAPTER Adapter -); - -VOID -SetFwFcsInfoCmd( - IN PADAPTER Adapter, - IN pu1Byte pContext, - IN BOOLEAN bSet -); - -VOID -HalSetFwKeepAliveCmd( - IN PADAPTER pAdapter, - IN BOOLEAN bFuncEn -); - -RT_STATUS -HalSetFWWoWlanMode( - IN PADAPTER pAdapter, - IN BOOLEAN bFuncEn -); -#endif \ No newline at end of file diff --git a/network/wlan/WDI/HAL/HalIcGlue.h b/network/wlan/WDI/HAL/HalIcGlue.h deleted file mode 100644 index c1c0cceb..00000000 --- a/network/wlan/WDI/HAL/HalIcGlue.h +++ /dev/null @@ -1,1110 +0,0 @@ -#if (RTL8822B_SUPPORT == 0) -#define ex_halbtc8822b1ant_power_on_setting(btcoexist) -#define ex_halbtc8822b1ant_pre_load_firmware(btcoexist) -#define ex_halbtc8822b1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8822b1ant_init_coex_dm(btcoexist) -#define ex_halbtc8822b1ant_ips_notify(btcoexist, type) -#define ex_halbtc8822b1ant_lps_notify(btcoexist, type) -#define ex_halbtc8822b1ant_scan_notify(btcoexist, type) -#define ex_halbtc8822b1ant_connect_notify(btcoexist, type) -#define ex_halbtc8822b1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8822b1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8822b1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8822b1ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8822b1ant_halt_notify(btcoexist) -#define ex_halbtc8822b1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8822b1ant_coex_dm_reset(btcoexist) -#define ex_halbtc8822b1ant_periodical(btcoexist) -#define ex_halbtc8822b1ant_display_coex_info(btcoexist) -#define ex_halbtc8822b1ant_antenna_detection(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8822b1ant_antenna_isolation(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8822b1ant_psd_scan(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8822b1ant_display_ant_detection(btcoexist) -#define ex_halbtc8822b1ant_dbg_control(btcoexist, op_code, op_len, pdata) - -#define SDIO_8822B_HWDESC_HEADER_LEN 0 -#define SDIO_8822B_DUMMY_OFFSET 1 -#define SDIO_8822B_ALL_DUMMY_LENGTH 0 - -#define REG_SYS_FUNC_EN_8822B 0 -#define REG_RF_CTRL_8822B 0 - -#define TxDescriptorChecksum_8822B(_txDesc) - -#define SwLedOn_8822B(_Adapter, _pLed) 0 -#define SwLedOff_8822B(_Adapter, _pLed) 0 - -#define TxUsbAggregation8822BU(_Adapter, _queueId) - -#define SetWoWLANCAMEntry8822B(_Adapter) -#define HalSetFWWoWlanMode8822B(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8822B(_pAdapter, _bFuncEn) -#define H2CCmdAction8822B(_Adapter, _pBuf, _bufLen) 0 - -#define SET_TX_DESC_USB_TXAGG_NUM_8822B(__pTxDesc, __Value) - -#define TxDescriptorChecksum_8822B(_txDesc) - -#define Hal_InitEfuseVars_8822B(_pEfuseHal) -#define Hal_ReadTxPowerInfo8822B(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8822B(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8822B(_pAdapter, _bWrite, _PwrState) -#define Hal_EfusePowerSwitch8822B_TestChip(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8822B(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8822B(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8822B(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8822B(_Adapter, _Enable) -#define SetFwInactivePSCmd_8822B(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8822B(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8822B(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8822B(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8822B(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8822B(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8822B(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define PHY_BB8822B_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8822B(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8822B(_Adapter, _PowerIndex, _RFPath, _Rate) - -#define PHY_Combine4ByteTxPowerIndex_8822B(_A, _RF, _R, _B, _C) 0 -#define HAL_DownloadRSVD_PreCfg_8822B(_A) -#define HAL_DownloadRSVD_PostCfg_8822B(_A) RT_STATUS_FAILURE - - - -#endif //#if (RTL8822B_SUPPORT == 0) - -#if (RTL8723D_SUPPORT == 0) - -#define NAN_Allocate(_pAdapter) RT_STATUS_SUCCESS -#define NAN_Free(_pAdapter) -#define NAN_FreeAllWorkItem(Adapter) -#define NAN_InitTimer(Adapter) -#define NAN_CancelTimer(Adapter) -#define NAN_ReleaseTimer(Adapter) -#define NAN_ENABLED(_pAdapter) FALSE -#define NAN_OnBeaconReceived(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define NAN_OnSDFReceived(_pAdapter, _pRfd, _posMpdu) RT_STATUS_SUCCESS -#define NAN_UpdateDefaultSetting(_pAdapter, _ID, _pInputBuffer, _InputBufferLen) RT_STATUS_SUCCESS -#define NAN_GetAvailabilityInfo(_pAdapter, _pInputBuffer, _InputBufferLen) RT_STATUS_SUCCESS - -#define MAX_RX_DMA_BUFFER_SIZE_8723D 0x3800 // RX 14K - -#define ex_halbtc8723d1ant_power_on_setting(btcoexist) -#define ex_halbtc8723d1ant_pre_load_firmware(btcoexist) -#define ex_halbtc8723d1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8723d1ant_init_coex_dm(btcoexist) -#define ex_halbtc8723d1ant_ips_notify(btcoexist, type) -#define ex_halbtc8723d1ant_lps_notify(btcoexist, type) -#define ex_halbtc8723d1ant_scan_notify(btcoexist, type) -#define ex_halbtc8723d1ant_connect_notify(btcoexist, type) -#define ex_halbtc8723d1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8723d1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8723d1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8723d1ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8723d1ant_halt_notify(btcoexist) -#define ex_halbtc8723d1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8723d1ant_ScoreBoardStatusNotify(btcoexist, tmp_buf, length) -#define ex_halbtc8723d1ant_coex_dm_reset(btcoexist) -#define ex_halbtc8723d1ant_periodical(btcoexist) -#define ex_halbtc8723d1ant_display_coex_info(btcoexist) -#define ex_halbtc8723d1ant_antenna_detection(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8723d1ant_antenna_isolation(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8723d1ant_psd_scan(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8723d1ant_display_ant_detection(btcoexist) - -#define ex_halbtc8723d2ant_power_on_setting(btcoexist) -#define ex_halbtc8723d2ant_pre_load_firmware(btcoexist) -#define ex_halbtc8723d2ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8723d2ant_init_coex_dm(btcoexist) -#define ex_halbtc8723d2ant_ips_notify(btcoexist, type) -#define ex_halbtc8723d2ant_lps_notify(btcoexist, type) -#define ex_halbtc8723d2ant_scan_notify(btcoexist, type) -#define ex_halbtc8723d2ant_connect_notify(btcoexist, type) -#define ex_halbtc8723d2ant_media_status_notify(btcoexist, type) -#define ex_halbtc8723d2ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8723d2ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8723d2ant_halt_notify(btcoexist) -#define ex_halbtc8723d2ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8723d2ant_periodical(btcoexist) -#define ex_halbtc8723d2ant_display_coex_info(btcoexist) - -#define PrepareRxDesc8723DE(_Adapter, _LengthArray) RT_STATUS_FAILURE -#define FreeRxDesc8723DE(_Adapter) -#define ResetRxDesc8723DE(_Adapter, _LengthArray) RT_STATUS_FAILURE -#define ReturnRxDescBuffer8723DE(_Adapter, _QueueID, _index, _buffer) -#define IsRxDescFilledWithPacket8723DE(_Adapter, _QueueID, _index, _uBufferAddress) FALSE - -#define HalDownloadRSVDPage8723DE(_Adapter) -#define Hal_DBIRead4Byte_8723DE(_Adapter, _Addr) 0 -#define Hal_DBIWrite4Byte_8723DE(_Adapter, _Addr, _Data) - -#define SwLedOn_8723D(_Adapter, _pLed) 0 -#define SwLedOff_8723D(_Adapter, _pLed) 0 - -#define TxUsbAggregation8723DU(_Adapter, _queueId) - -#define SetWoWLANCAMEntry8723D(_Adapter) -#define HalSetFWWoWlanMode8723D(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8723D(_pAdapter, _bFuncEn) -#define H2CCmdAction8723D(_Adapter, _pBuf, _bufLen) 0 - -#define Hal_InitEfuseVars_8723D(_pEfuseHal) -#define Hal_ReadTxPowerInfo8723D(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8723D(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8723D(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8723D(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8723D(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8723D(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8723D(_Adapter, _Enable) -#define SetFwInactivePSCmd_8723D(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8723D(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8723D(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define HAL_FwLPSDeepSleepInit8723D(_pAdapter) -#define HAL_FwLPSDeepSleepDeInit8723D(_pAdapter) -#define HAL_CheckChangeTxBoundaryInProgress8723D(_pAdapter) FALSE -#define HAL_FwLPSDeepSleepGetStatusForEnterLPS8723D(_pAdapter) FALSE - -#define PHY_QueryBBReg8723D(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8723D(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8723D(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8723D(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8723D_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8723D(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8723D(_Adapter, _PowerIndex, _RFPath, _Rate) - -#endif // (RTL8723D_SUPPORT == 0) - - -#if (RTL8703B_SUPPORT == 0) - -#define MAX_RX_DMA_BUFFER_SIZE_8703B 0x2800 // RX 10K - -#define SET_TX_DESC_USB_TXAGG_NUM_8723D(__pTxDesc, __Value) - -#define TxDescriptorChecksum_8723D(_txDesc) - -#define SwLedOn_8703B(_Adapter, _pLed) 0 -#define SwLedOff_8703B(_Adapter, _pLed) 0 - -#define TxUsbAggregation8703BU(_Adapter, _queueId) - -#define SetWoWLANCAMEntry8703B(_Adapter) -#define HalSetFWWoWlanMode8703B(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8703B(_pAdapter, _bFuncEn) -#define H2CCmdAction8703B(_Adapter, _pBuf, _bufLen) 0 - -#define SET_TX_DESC_USB_TXAGG_NUM_8703B(__pTxDesc, __Value) - -#define TxDescriptorChecksum_8703B(_txDesc) - -#define Hal_InitEfuseVars_8703B(_pEfuseHal) -#define Hal_ReadTxPowerInfo8703B(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8703B(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8703B(_pAdapter, _bWrite, _PwrState) -#define Hal_EfusePowerSwitch8703B_TestChip(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8703B(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8703B(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8703B(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8703B(_Adapter, _Enable) -#define SetFwInactivePSCmd_8703B(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8703B(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8703B(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8703B(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8703B(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8703B(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8703B(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8703B_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8703B(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8703B(_Adapter, _PowerIndex, _RFPath, _Rate) - -#define ex_halbtc8703b1ant_power_on_setting(btcoexist) -#define ex_halbtc8703b1ant_pre_load_firmware(btcoexist) -#define ex_halbtc8703b1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8703b1ant_init_coex_dm(btcoexist) -#define ex_halbtc8703b1ant_ips_notify(btcoexist, type) -#define ex_halbtc8703b1ant_lps_notify(btcoexist, type) -#define ex_halbtc8703b1ant_scan_notify(btcoexist, type) -#define ex_halbtc8703b1ant_connect_notify(btcoexist, type) -#define ex_halbtc8703b1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8703b1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8703b1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8703b1ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8703b1ant_halt_notify(btcoexist) -#define ex_halbtc8703b1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8703b1ant_ScoreBoardStatusNotify(btcoexist, tmp_buf, length) -#define ex_halbtc8703b1ant_coex_dm_reset(btcoexist) -#define ex_halbtc8703b1ant_periodical(btcoexist) -#define ex_halbtc8703b1ant_display_coex_info(btcoexist) -#define ex_halbtc8703b1ant_antenna_detection(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8703b1ant_antenna_isolation(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8703b1ant_psd_scan(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8703b1ant_display_ant_detection(btcoexist) - - -#endif // (RTL8703B_SUPPORT == 0) - -#if (RTL8188F_SUPPORT == 0) - -#define MAX_RX_DMA_BUFFER_SIZE_8188F 0x4000 // RX 10K -#define AVG_THERMAL_NUM_8188F 4 -#define RF_T_METER_8188F 0x42 -#define IQK_DELAY_TIME_8188F 25 - -#define SwLedOn_8188F(_Adapter, _pLed) 0 -#define SwLedOff_8188F(_Adapter, _pLed) 0 - -#define TxUsbAggregation8188FU(_Adapter, _queueId) - -#define SetWoWLANCAMEntry8188F(_Adapter) -#define HalSetFWWoWlanMode8188F(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8188F(_pAdapter, _bFuncEn) -#define H2CCmdAction8188F(_Adapter, _pBuf, _bufLen) 0 - -#define TxDescriptorChecksum_8188F(_txDesc) - -#define Hal_InitEfuseVars_8188F(_pEfuseHal) -#define Hal_ReadTxPowerInfo8188F(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8188F(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8188F(_pAdapter, _bWrite, _PwrState) -#define Hal_EfusePowerSwitch8188F_TestChip(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8188F(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8188F(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8188F(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8188F(_Adapter, _Enable) -#define SetFwInactivePSCmd_8188F(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8188F(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8188F(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8188F(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8188F(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8188F(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8188F(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8188F_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8188F(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8188F(_Adapter, _PowerIndex, _RFPath, _Rate) - -#define SET_TX_DESC_USB_TXAGG_NUM_8188F(__pTxDesc, __Value) - -void PHY_IQCalibrate_8188F( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER Adapter, -#endif - IN BOOLEAN bReCovery, - IN BOOLEAN bRestore - ); - -#endif // (RTL8188F_SUPPORT == 0) -#if (RTL8821B_SUPPORT == 0) - -#define MAX_RX_DMA_BUFFER_SIZE_8821B 0x6000 - -#define TxDescriptorChecksum_8821B(_txDesc) - -#define SwLedOn_8821B(_Adapter, _pLed) 0 -#define SwLedOff_8821B(_Adapter, _pLed) 0 - -#define TxUsbAggregation8821BU(_Adapter, _queueId) - -#define SetWoWLANCAMEntry8821B(_Adapter) -#define HalSetFWWoWlanMode8821B(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8821B(_pAdapter, _bFuncEn) -#define H2CCmdAction8821B(_Adapter, _pBuf, _bufLen) 0 - -#define SET_TX_DESC_USB_TXAGG_NUM_8821B(__pTxDesc, __Value) - -#define TxDescriptorChecksum_8821B(_txDesc) - -#define Hal_InitEfuseVars_8821B(_pEfuseHal) -#define Hal_ReadTxPowerInfo8821B(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8821B(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8821B(_pAdapter, _bWrite, _PwrState) -#define Hal_EfusePowerSwitch8821B_TestChip(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8821B(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8821B(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8821B(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8821B(_Adapter, _Enable) -#define SetFwInactivePSCmd_8821B(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8821B(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8821B(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8821B(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8821B(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8821B(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8821B(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8821B_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8821B(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8821B(_Adapter, _PowerIndex, _RFPath, _Rate) - -#endif // (RTL8821B_SUPPORT == 0) - -#if (RTL8814A_SUPPORT == 0) - -#define REG_HSIMR_8814A 0 -#define REG_IQ_DUMP_8814A 0 -#define REG_PKTBUF_DBG_CTRL_8814A 0 -#define RX_STATUS_DESC_SIZE 0 -#define REG_SYS_FUNC_EN_8814A 0 - - -#define REG_RF_CTRL0_8814A 0x001F // 1 Byte -#define REG_RF_CTRL1_8814A 0x0020 // 1 Byte -#define REG_RF_CTRL3_8814A 0x0076 // 1 Byte - -#define H2C_8814A_RSSI_REPORT 0x42 -#define H2C_8814A_RA_PARA_ADJUST 0x47 -#define H2C_8814A_DYNAMIC_TX_PATH 0x48 -#define H2C_8814A_FW_TRACE_EN 0x49 - -#define REG_NDPA_OPT_CTRL_8814A 0x045F -#define REG_NDPA_RATE_8814A 0x045D - -#define TxDescriptorChecksum_8814A(_txDesc) - -#define SwLedOn_8814A(_Adapter, _pLed) 0 -#define SwLedOff_8814A(_Adapter, _pLed) 0 - -#define TxUsbAggregation8814AU(_Adapter, _queueId) - -#define SetWoWLANCAMEntry8814A(_Adapter) -#define HalSetFWWoWlanMode8814A(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8814A(_pAdapter, _bFuncEn) -#define H2CCmdAction8814A(_Adapter, _pBuf, _bufLen) 0 - -#define SET_TX_DESC_USB_TXAGG_NUM_8814A(__pTxDesc, __Value) - -#define TxDescriptorChecksum_8814A(_txDesc) - -#define Hal_InitEfuseVars_8814A(_pEfuseHal) -#define Hal_ReadTxPowerInfo8814A(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8814A(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8814A(_pAdapter, _bWrite, _PwrState) -#define Hal_EfusePowerSwitch8814A_TestChip(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8814A(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8814A(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8814A(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8814A(_Adapter, _Enable) -#define SetFwInactivePSCmd_8814A(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8814A(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8814A(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8814A(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8814A(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8814A(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8814A(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8814A_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8814A(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8814A(_Adapter, _PowerIndex, _RFPath, _Rate) - -#endif // (RTL8821B_SUPPORT == 0) - - -#if (RTL8192E_SUPPORT == 0) - - -#define RX_DESC_SIZE_92EE 24 -#define REG_DARFRC_8192E 0x0430 -#define REG_NDPA_OPT_CTRL_8192E 0x045F - -#define REG_RXQ_TXBD_IDX_8192E 0x03B4 -#define rA_RSSIDump_92E 0xcb0 -#define rB_RSSIDump_92E 0xcb1 -#define rS1_RXevmDump_92E 0xcb2 -#define rS2_RXevmDump_92E 0xcb3 -#define rA_RXsnrDump_92E 0xcb4 -#define rB_RXsnrDump_92E 0xcb5 -#define rA_CfoShortDump_92E 0xcb6 -#define rB_CfoShortDump_92E 0xcb8 -#define rA_CfoLongDump_92E 0xcba -#define rB_CfoLongDump_92E 0xcbc - -#define HalDownloadRSVDPage8192EE(_Adapter) -#define Hal_DBIRead4Byte_8192EE(_Adapter, _Addr) 0 -#define Hal_DBIWrite4Byte_8192EE(_Adapter, _Addr, _Data) - -#define SwLedOn_8192E(_Adapter, _pLed) 0 -#define SwLedOff_8192E(_Adapter, _pLed) 0 - -#define SetWoWLANCAMEntry8192E(_Adapter) -#define HalSetFWWoWlanMode8192E(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8192E(_pAdapter, _bFuncEn) -#define H2CCmdAction8192E(_Adapter, _pBuf, _bufLen) 0 - -#define SET_TX_DESC_USB_TXAGG_NUM_92E(__pTxDesc, __Value) - -#define TxDescriptorChecksum_8192E(_txDesc) -#define TxUsbAggregation8192E(_Adapter, _queueId) - -#define Hal_InitEfuseVars_8192E(_pEfuseHal) -#define Hal_ReadTxPowerInfo8192E(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfuseSwitchToBank8192E(_pAdapter, _bank, _bPseudoTest) TRUE -#define Hal_EfusePowerSwitch8192E(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8192E(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8192E(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8192E(_Adapter, _Type, _ScanOffloadEnable, _NLOEnable) -#define SetFwRemoteWakeCtrlCmd_8192E(_Adapter, _Enable) -#define SetFwInactivePSCmd_8192E(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8192E(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8192E(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8192E(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8192E(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8192E(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8192E(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8192E_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8192E(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8192E(_Adapter, _PowerIndex, _RFPath, _Rate) - -#define ex_halbtc8192e1ant_power_on_setting(btcoexist) -#define ex_halbtc8192e1ant_pre_load_firmware(btcoexist) -#define ex_halbtc8192e1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8192e1ant_init_coex_dm(btcoexist) -#define ex_halbtc8192e1ant_ips_notify(btcoexist, type) -#define ex_halbtc8192e1ant_lps_notify(btcoexist, type) -#define ex_halbtc8192e1ant_scan_notify(btcoexist, type) -#define ex_halbtc8192e1ant_connect_notify(btcoexist, type) -#define ex_halbtc8192e1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8192e1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8192e1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8192e1ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8192e1ant_halt_notify(btcoexist) -#define ex_halbtc8192e1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8192e1ant_coex_dm_reset(btcoexist) -#define ex_halbtc8192e1ant_periodical(btcoexist) -#define ex_halbtc8192e1ant_display_coex_info(btcoexist) -#define ex_halbtc8192e1ant_dbg_control(btcoexist, op_code, op_len, pdata) - -#define ex_halbtc8192e2ant_power_on_setting(btcoexist) -#define ex_halbtc8192e2ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8192e2ant_init_coex_dm(btcoexist) -#define ex_halbtc8192e2ant_ips_notify(btcoexist, type) -#define ex_halbtc8192e2ant_lps_notify(btcoexist, type) -#define ex_halbtc8192e2ant_scan_notify(btcoexist, type) -#define ex_halbtc8192e2ant_connect_notify(btcoexist, type) -#define ex_halbtc8192e2ant_media_status_notify(btcoexist, type) -#define ex_halbtc8192e2ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8192e2ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8192e2ant_halt_notify(btcoexist) -#define ex_halbtc8192e2ant_periodical(btcoexist) -#define ex_halbtc8192e2ant_display_coex_info(btcoexist) - -#endif // (RTL8192E_SUPPORT == 0) - - -#if (RTL8188E_SUPPORT == 0) - -#define H2C_88E_RSSI_REPORT 0x42 - -#define PCIE_8188E_HWDESC_HEADER_LEN 32//sizeof(TX_DESC_8192SE) - -#define PrepareRxDesc8188EE(_Adapter, _LengthArray) RT_STATUS_FAILURE -#define FreeRxDesc8188EE(_Adapter) -#define ResetRxDesc8188EE(_Adapter, _LengthArray) RT_STATUS_FAILURE -#define ReturnRxDescBuffer8188EE(_Adapter, _QueueID, _index, _buffer) -#define IsRxDescFilledWithPacket8188EE(_Adapter, _QueueID, _index, _uBufferAddress) FALSE - -#define SwLedOn_8188E(_Adapter, _pLed) 0 -#define SwLedOff_8188E(_Adapter, _pLed) 0 - -#define TxUsbAggregation8188E(_Adapter, _queueId) - -#define ForceLeaveHwClock32K8188E(_Adapter) - -#define SetWoWLANCAMEntry8188E(_Adapter) -#define HalSetFWWoWlanMode8188E(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8188E(_pAdapter, _bFuncEn) -#define H2CCmdAction8188E(_Adapter, _pBuf, _bufLen) 0 -#define SetBcnCtrlReg_8188E(_Adapter, _SetBits, _ClearBits) - -#define SET_TX_DESC_USB_TXAGG_NUM_88E(__pTxDesc, __Value) -#define TxDescriptorChecksum_8188E(_txDesc) - -#define Hal_InitEfuseVars_8188E(_pEfuseHal) -#define Hal_ReadTxPowerInfo88E(_Adapter, _PROMContent, _AutoLoadFail) - -#define SetFwGlobalInfoCmd_8188E(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8188E(_Adapter, _bEnabled) -#define SetFwScanOffloadCtrlCmd_8188E(_Adapter, _Type, _ScanOffloadEnable) -#define SetFwRemoteWakeCtrlCmd_8188E(_Adapter, _Enable) -#define SetFwInactivePSCmd_8188E(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd88E(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload88E(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define PHY_QueryBBReg8188E(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8188E(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8188E(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8188E(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8188E_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8188E(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8188E(_Adapter, _PowerIndex, _RFPath, _Rate) - -#define SDIO_8188E_DUMMY_OFFSET 1 // Reseved for Early Mode information. -#define SDIO_92C_DUMMY_UNIT 8 -#define SDIO_8188E_ALL_DUMMY_LENGTH (SDIO_8188E_DUMMY_OFFSET * SDIO_92C_DUMMY_UNIT) -#define SDIO_8188E_HWDESC_HEADER_LEN (TX_DESC_SIZE + SDIO_8188E_ALL_DUMMY_LENGTH) - - -#define MAX_RX_DMA_BUFFER_SIZE_88E(__Adapter) ((!IS_VENDOR_8188E_SMIC_SERIES(__Adapter))?((GET_HAL_DATA(__Adapter)->bIsMPChip) ? 0x2400 : 0x1C00):0x3A00) - - -#endif // (RTL8188E_SUPPORT == 0) - -#if (RTL8812A_SUPPORT == 0) - -#define REG_RXDMA_AGG_PG_TH_8812A 0x280 -#define REG_APS_FSMCO_8812A 0x0004 -#define REG_MACID_8812A 0x0610 -#define REG_TRXDMA_CTRL_8812A 0x010C -#define REG_TXDMA_OFFSET_CHK_8812A 0x020C -#define REG_DUAL_TSF_RST_8812A 0x0553 -#define REG_SECONDARY_CCA_CTRL_8812A 0x577 - -#define REG_MULTI_FUNC_CTRL_8812A 0x0068 - -#define REG_CR_8812A 0x0100 -#define REG_FWHW_TXQ_CTRL_8812A 0x0420 -#define REG_TDECTRL_8812A 0x0208 -#define REG_MACID1_8812A 0x0700 -#define REG_BSSID1_8812A 0x0708 -#define REG_BFMEE_SEL_8812A 0x0714 -#define REG_SND_PTCL_CTRL_8812A 0x0718 -#define REG_TXBF_CTRL_8812A 0x042C -#define REG_BFMER0_INFO_8812A 0x06E4 -#define REG_BFMER1_INFO_8812A 0x06EC -#define REG_CSI_RPT_PARAM_BW20_8812A 0x06F4 -#define REG_CSI_RPT_PARAM_BW40_8812A 0x06F8 -#define REG_CSI_RPT_PARAM_BW80_8812A 0x06FC -#define REG_TXPKT_EMPTY_8812A 0x041A -#define REG_PCIE_CTRL_REG_8812A 0x0300 -#define REG_TXPAUSE_8812A 0x0522 -#define REG_SCH_TXCMD_8812A 0x05F8 -#define REG_RXDMA_CONTROL_8812A 0x0286 // Control the RX DMA. -#define REG_SYS_CLKR_8812A 0x0008 // 2 Byte -#define REG_AFE_PLL_CTRL_8812A 0x0028 // 4 Byte - -#define REG_NDPA_OPT_CTRL_8812A 0x045F - -#define EFUSE_MAX_SECTION_JAGUAR 64 -#define HWSET_MAX_SIZE_JAGUAR 512 - -#define EFUSE_PROTECT_BYTES_BANK_JAGUAR 16 -#define EFUSE_MAX_SECTION_JAGUAR 64 -#define EFUSE_REAL_CONTENT_LEN_JAGUAR 512 -#define EFUSE_MAP_LEN_JAGUAR 512 - - - -#define REG_RF_CTRL_8812A 0x001F // 1 Byte -#define REG_OPT_CTRL_8812A 0x0074 - -#define rDMA_trigger_Jaguar2 0x95C // ADC sample mode -#define rDMA_trigger_Jaguar2 0x95C // ADC sample mode - - -#define rA_SIRead_Jaguar 0xd08 // RF readback with SI -#define rB_SIRead_Jaguar 0xd48 // RF readback with SI -#define rA_PIRead_Jaguar 0xd04 // RF readback with PI -#define rB_PIRead_Jaguar 0xd44 // RF readback with PI - -#define rA_LSSIWrite_Jaguar 0xc90 // RF write addr -#define rB_LSSIWrite_Jaguar 0xe90 // RF write addr -#define bLSSIWrite_data_Jaguar 0x000fffff -#define bLSSIWrite_addr_Jaguar 0x0ff00000 - -#define rC_PIRead_Jaguar2 0xd84 // RF readback with PI -#define rD_PIRead_Jaguar2 0xdC4 // RF readback with PI -#define rC_SIRead_Jaguar2 0xd88 // RF readback with SI -#define rD_SIRead_Jaguar2 0xdC8 // RF readback with SI -#define rC_LSSIWrite_Jaguar2 0x1890 // RF write addr -#define rD_LSSIWrite_Jaguar2 0x1A90 // RF write addr - -#define rHSSIRead_Jaguar 0x8b0 // RF read addr - -#define HalDownloadRSVDPage8812AE(_Adapter) -#define Hal_DBIRead4Byte_8812AE(_Adapter, _Addr) 0 -#define Hal_DBIWrite4Byte_8812AE(_Adapter, _Addr, _Data) -#define Hal_DBIRead4Byte_8812AE(_Adapter, _Addr) 0 -#define Hal_DBIWrite4Byte_8812AE(_Adapter, _Addr, _Data) - -#define SwLedOn_8812A(_Adapter, _pLed) 0 -#define SwLedOff_8812A(_Adapter, _pLed) 0 - -#define SetWoWLANCAMEntry8812A(_Adapter) -#define HalSetFWWoWlanMode8812A(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8812A(_pAdapter, _bFuncEn) -#define H2CCmdAction8812A(_Adapter, _pBuf, _bufLen) 0 - -#define Hal_InitEfuseVars_8812A(_pEfuseHal) -#define Hal_ReadTxPowerInfo_8812A(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfusePgPacketExceptionHandle_8812A(_pAdapter, _ErrOffset) 0 -#define Hal_EfusePowerSwitch8812A(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8812A(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8812A(_Adapter, _bEnabled) -#define SetFwRemoteWakeCtrlCmd_8812A(_Adapter, _Enable) -#define SetFwInactivePSCmd_8812A(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8812A(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8812A(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define TxDescriptorChecksum_8812(_txDesc) - -#define PHY_QueryBBReg8812(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8812(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8812(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8812(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8812A_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8812A(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8812A(_Adapter, _PowerIndex, _RFPath, _Rate) -#define PHY_GetTxBBSwing_8812A(_Adapter, _Band, _RFPath) 0 - -#define ex_halbtc8812a1ant_power_on_setting(btcoexist) -#define ex_halbtc8812a1ant_pre_load_firmware(btcoexist) -#define ex_halbtc8812a1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8812a1ant_init_coex_dm(btcoexist) -#define ex_halbtc8812a1ant_ips_notify(btcoexist, type) -#define ex_halbtc8812a1ant_lps_notify(btcoexist, type) -#define ex_halbtc8812a1ant_scan_notify(btcoexist, type) -#define ex_halbtc8812a1ant_connect_notify(btcoexist, type) -#define ex_halbtc8812a1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8812a1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8812a1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8812a1ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8812a1ant_halt_notify(btcoexist) -#define ex_halbtc8812a1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8812a1ant_coex_dm_reset(btcoexist) -#define ex_halbtc8812a1ant_periodical(btcoexist) -#define ex_halbtc8812a1ant_dbg_control(btcoexist, op_code, op_len, pdata) -#define ex_halbtc8812a1ant_display_coex_info(btcoexist) - -#define ex_halbtc8812a2ant_power_on_setting(btcoexist) -#define ex_halbtc8812a2ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8812a2ant_init_coex_dm(btcoexist) -#define ex_halbtc8812a2ant_ips_notify(btcoexist, type) -#define ex_halbtc8812a2ant_lps_notify(btcoexist, type) -#define ex_halbtc8812a2ant_scan_notify(btcoexist, type) -#define ex_halbtc8812a2ant_connect_notify(btcoexist, type) -#define ex_halbtc8812a2ant_media_status_notify(btcoexist, type) -#define ex_halbtc8812a2ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8812a2ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8812a2ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8812a2ant_halt_notify(btcoexist) -#define ex_halbtc8812a2ant_periodical(btcoexist) -#define ex_halbtc8812a2ant_display_coex_info(btcoexist) -#define ex_halbtc8812a2ant_dbg_control(btcoexist, op_code, op_len, pdata) - - - -#endif // (RTL8812A_SUPPORT == 0) - -#if (RTL8821A_SUPPORT == 0) - -#define EFUSE_MAX_BANK_8821A 3 -#define SET_TX_DESC_USB_TXAGG_NUM_8812(__pTxDesc, __Value) -#define DRIVER_EARLY_INT_TIME_8821 0x05 - -#define FillH2CCommand8821A(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) 0 - - -#define Hal_EfuseSwitchToBank8821A(_pAdapter, _bank, _bPseudoTest) TRUE - -#define HalDownloadRSVDPage8821AE(_Adapter) -#define Hal_DBIRead4Byte_8821AE(_Adapter, _Addr) 0 -#define Hal_DBIWrite4Byte_8821AE(_Adapter, _Addr, _Data) -#define Hal_DBIRead4Byte_8821AE(_Adapter, _Addr) 0 -#define Hal_DBIWrite4Byte_8821AE(_Adapter, _Addr, _Data) - -#define SwLedOn_8821A(_Adapter, _pLed) 0 -#define SwLedOff_8821A(_Adapter, _pLed) 0 - -#define SetWoWLANCAMEntry8821A(_Adapter) -#define HalSetFWWoWlanMode8821A(_pAdapter, _bFuncEn) RT_STATUS_SUCCESS -#define HalSetFwKeepAliveCmd8821A(_pAdapter, _bFuncEn) -#define H2CCmdAction8821A(_Adapter, _pBuf, _bufLen) 0 - -#define Hal_InitEfuseVars_8821A(_pEfuseHal) -#define Hal_ReadTxPowerInfo_8821A(_Adapter, _PROMContent, _AutoLoadFail) -#define Hal_EfusePgPacketExceptionHandle_8821A(_pAdapter, _ErrOffset) 0 -#define Hal_EfusePowerSwitch8821A(_pAdapter, _bWrite, _PwrState) - -#define SetFwGlobalInfoCmd_8821A(_Adapter) -#define SetFwDisconnectDecisionCtrlCmd_8821A(_Adapter, _bEnabled) -#define SetFwRemoteWakeCtrlCmd_8821A(_Adapter, _Enable) -#define SetFwInactivePSCmd_8821A(_Adapter, _Enable, _bActiveWakeup, _bForceClkOff) -#define FillH2CCmd8821A(_Adapter, _ElementID, _CmdLen, _pCmdBuffer) -#define FirmwareDownload8821A(_Adapter, _bUsedWoWLANFw) RT_STATUS_SUCCESS - -#define TxDescriptorChecksum_8821(_txDesc) - -#define PHY_QueryBBReg8821A(_Adapter, _RegAddr, _BitMask) 0 -#define PHY_SetBBReg8821A(_Adapter, _RegAddr, _BitMask, _Data) -#define PHY_QueryRFReg8821A(_Adapter, _eRFPath, _RegAddr, _BitMask) 0 -#define PHY_SetRFReg8821A(_Adapter, _eRFPath, _RegAddr, _BitMask, _Data) -#define phy_BB8821A_Config_ParaFile(_Adapter) RT_STATUS_SUCCESS -#define PHY_GetTxPowerIndex_8821A(_pAdapter, _RFPath, _Rate, _BandWidth, _Channel) 0 -#define PHY_SetTxPowerIndex_8821A(_Adapter, _PowerIndex, _RFPath, _Rate) -#define PHY_GetTxBBSwing_8821A(_Adapter, _Band, _RFPath) 0 - -#define ex_halbtc8821a1ant_power_on_setting(btcoexist) -#define ex_halbtc8821a1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8821a1ant_init_coex_dm(btcoexist) -#define ex_halbtc8821a1ant_ips_notify(btcoexist, type) -#define ex_halbtc8821a1ant_lps_notify(btcoexist, type) -#define ex_halbtc8821a1ant_scan_notify(btcoexist, type) -#define ex_halbtc8821a1ant_connect_notify(btcoexist, type) -#define ex_halbtc8821a1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8821a1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8821a1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8821a1ant_halt_notify(btcoexist) -#define ex_halbtc8821a1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8821a1ant_periodical(btcoexist) -#define ex_halbtc8821a1ant_display_coex_info(btcoexist) - -#define ex_halbtc8821a2ant_power_on_setting(btcoexist) -#define ex_halbtc8821a2ant_pre_load_firmware(btcoexist) -#define ex_halbtc8821a2ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8821a2ant_init_coex_dm(btcoexist) -#define ex_halbtc8821a2ant_ips_notify(btcoexist, type) -#define ex_halbtc8821a2ant_lps_notify(btcoexist, type) -#define ex_halbtc8821a2ant_scan_notify(btcoexist, type) -#define ex_halbtc8821a2ant_connect_notify(btcoexist, type) -#define ex_halbtc8821a2ant_media_status_notify(btcoexist, type) -#define ex_halbtc8821a2ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8821a2ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8821a2ant_halt_notify(btcoexist) -#define ex_halbtc8821a2ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8821a2ant_periodical(btcoexist) -#define ex_halbtc8821a2ant_display_coex_info(btcoexist) - -#define ex_halbtc8821aCsr2ant_power_on_setting(btcoexist) -#define ex_halbtc8821aCsr2ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8821aCsr2ant_init_coex_dm(btcoexist) -#define ex_halbtc8821aCsr2ant_ips_notify(btcoexist, type) -#define ex_halbtc8821aCsr2ant_lps_notify(btcoexist, type) -#define ex_halbtc8821aCsr2ant_scan_notify(btcoexist, type) -#define ex_halbtc8821aCsr2ant_connect_notify(btcoexist, type) -#define ex_halbtc8821aCsr2ant_media_status_notify(btcoexist, type) -#define ex_halbtc8821aCsr2ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8821aCsr2ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8821aCsr2ant_halt_notify(btcoexist) -#define ex_halbtc8821aCsr2ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8821aCsr2ant_periodical(btcoexist) -#define ex_halbtc8821aCsr2ant_display_coex_info(btcoexist) - -#define SDIO_8821_DUMMY_UNIT 8 -#define SDIO_8821_DUMMY_OFFSET 1 -#define SDIO_8821_ALL_DUMMY_LENGTH SDIO_8821_DUMMY_OFFSET * SDIO_8821_DUMMY_UNIT -#define HWDESC_HEADER_LEN_SDIO_8821 40 -#define SDIO_8821_HWDESC_HEADER_LEN (HWDESC_HEADER_LEN_SDIO_8821 + SDIO_8821_ALL_DUMMY_LENGTH) // 8byte dummy - - -#endif // (RTL8821A_SUPPORT == 0) - -#if (RTL8723B_SUPPORT == 0) - -#define EFUSE_REAL_CONTENT_LEN_8723B 512 -#define AVAILABLE_EFUSE_ADDR_8723B(addr) (addr < EFUSE_REAL_CONTENT_LEN_8723B) - - -BOOLEAN -Hal_EfuseSwitchToBank8723B( - IN PADAPTER pAdapter, - IN u1Byte bank, - IN BOOLEAN bPseudoTest - ); - -VOID -Hal_EfusePowerSwitch8723B( - IN PADAPTER pAdapter, - IN UINT8 bWrite, - IN UINT8 PwrState - ); - -VOID -Hal_EfusePowerSwitch8723B_TestChip( - IN PADAPTER pAdapter, - IN UINT8 bWrite, - IN UINT8 PwrState - ); - -VOID -Hal_InitEfuseVars_8723B( - IN PEFUSE_HAL pEfuseHal - ); - -VOID -HalSetFcsAdjustTsf_8723B( - IN PADAPTER Adapter - ); - -VOID -SetWoWLANCAMEntry8723B( - PADAPTER Adapter - ); - -VOID -SetFwGlobalInfoCmd_8723B( - IN PADAPTER Adapter - ); - -RT_STATUS -HalSetFWWoWlanMode8723B( - IN PADAPTER pAdapter, - IN BOOLEAN bFuncEn - ); - -VOID -HalSetFwKeepAliveCmd8723B( - IN PADAPTER pAdapter, - IN BOOLEAN bFuncEn - ); - -VOID -SetFwScanOffloadCtrlCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Type, - IN u1Byte ScanOffloadEnable, - IN u1Byte NLOEnable - ); - -VOID -SetFwDisconnectDecisionCtrlCmd_8723B( - IN PADAPTER Adapter, - IN BOOLEAN bEnabled - ); - -VOID -SetFwRemoteWakeCtrlCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Enable - ); - -VOID -SetFwInactivePSCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Enable, - IN BOOLEAN bActiveWakeup, - IN BOOLEAN bForceClkOff - ); - -VOID -SetFwWiFiCalibrationCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte u1Enable - ); - -VOID -FillH2CCmd8723B( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer - ); - -u4Byte -FillH2CCommand8723B( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer - ); - -u4Byte -FW8723B_FillH2cCommand( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer - ); - -RT_STATUS -FirmwareDownload8723B( - IN PADAPTER Adapter, - IN BOOLEAN bUsedWoWLANFw - ); - -VOID -HalDownloadRSVDPage8723BE( - IN PADAPTER Adapter - ); - -u1Byte -hal_DBIRead_8723BE( - IN PADAPTER Adapter, - IN u2Byte Addr - ); - -VOID -hal_DBIWrite_8723BE( - IN PADAPTER Adapter, - IN u2Byte Addr, - IN u1Byte Data - ); - -VOID -Hal_ReadTxPowerInfo8723B( - IN PADAPTER Adapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_Set8723bAntPath( - IN PADAPTER pAdapter, - IN BOOLEAN bAntennaAux, //For 1-Ant--> 1: Antenna at S0, 0: Antenna at S1. Set 0 for 2-Ant - IN BOOLEAN bExtSwitch, // 1: Ext Switch (SPDT) exist on module, 0: no Ext Switch (SPDT) exist on module - IN BOOLEAN bTwoAntenna, // 1: 2-Antenna, 0:1-Antenna - IN u1Byte antennaPos, //Set Antenna Pos, For 1-Ant: BTC_ANT_PATH_WIFI, BTC_ANT_PATH_BT, BTC_ANT_PATH_PTA, For 2-Ant:BTC_ANT_WIFI_AT_MAIN, BTC_ANT_WIFI_AT_Aux - IN u1Byte wifiState //BTC_WIFI_STAT_INIT, BTC_WIFI_STAT_IQK, BTC_WIFI_STAT_NORMAL_OFF, BTC_WIFI_STAT_MP_OFF, BTC_WIFI_STAT_NORMAL, BTC_WIFI_STAT_ANT_DIV - ); - -#define ex_halbtc8723b1ant_power_on_setting(btcoexist) -#define ex_halbtc8723b1ant_pre_load_firmware(btcoexist) -#define ex_halbtc8723b1ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8723b1ant_init_coex_dm(btcoexist) -#define ex_halbtc8723b1ant_ips_notify(btcoexist, type) -#define ex_halbtc8723b1ant_lps_notify(btcoexist, type) -#define ex_halbtc8723b1ant_scan_notify(btcoexist, type) -#define ex_halbtc8723b1ant_connect_notify(btcoexist, type) -#define ex_halbtc8723b1ant_media_status_notify(btcoexist, type) -#define ex_halbtc8723b1ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8723b1ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8723b1ant_rf_status_notify(btcoexist, type) -#define ex_halbtc8723b1ant_halt_notify(btcoexist) -#define ex_halbtc8723b1ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8723b1ant_coex_dm_reset(btcoexist) -#define ex_halbtc8723b1ant_periodical(btcoexist) -#define ex_halbtc8723b1ant_display_coex_info(btcoexist) -#define ex_halbtc8723b1ant_antenna_detection(btcoexist, cent_freq, offset, span, seconds) -#define ex_halbtc8723b1ant_display_ant_detection(btcoexist) - -#define ex_halbtc8723b2ant_power_on_setting(btcoexist) -#define ex_halbtc8723b2ant_pre_load_firmware(btcoexist) -#define ex_halbtc8723b2ant_init_hw_config(btcoexist, wifi_only) -#define ex_halbtc8723b2ant_init_coex_dm(btcoexist) -#define ex_halbtc8723b2ant_ips_notify(btcoexist, type) -#define ex_halbtc8723b2ant_lps_notify(btcoexist, type) -#define ex_halbtc8723b2ant_scan_notify(btcoexist, type) -#define ex_halbtc8723b2ant_connect_notify(btcoexist, type) -#define ex_halbtc8723b2ant_media_status_notify(btcoexist, type) -#define ex_halbtc8723b2ant_specific_packet_notify(btcoexist, type) -#define ex_halbtc8723b2ant_bt_info_notify(btcoexist, tmp_buf, length) -#define ex_halbtc8723b2ant_halt_notify(btcoexist) -#define ex_halbtc8723b2ant_pnp_notify(btcoexist, pnp_state) -#define ex_halbtc8723b2ant_periodical(btcoexist) -#define ex_halbtc8723b2ant_display_coex_info(btcoexist) - -u4Byte -PHY_QueryBBReg8723B( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -PHY_SetBBReg8723B( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -PHY_QueryRFReg8723B( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -PHY_SetRFReg8723B( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -RT_STATUS -PHY_RF6052_Config_8723B( - IN PADAPTER Adapter - ); - -VOID -PHY_RF6052SetBandwidth8723B( - IN PADAPTER Adapter, - IN CHANNEL_WIDTH Bandwidth - ); - -RT_STATUS -phy_BB8723B_Config_ParaFile( - IN PADAPTER Adapter - ); - -u1Byte -PHY_GetTxPowerIndex_8723B( - IN PADAPTER Adapter, - IN u1Byte RFPath, - IN u1Byte Rate, - IN CHANNEL_WIDTH BandWidth, - IN u1Byte Channel - ); - -VOID -PHY_SetTxPowerIndex_8723B( - IN PADAPTER Adapter, - IN u4Byte PowerIndex, - IN u1Byte RFPath, - IN u1Byte Rate - ); - -u4Byte -PHY_GetTxBBSwing_8723B( - IN PADAPTER Adapter, - IN BAND_TYPE Band, - IN u1Byte RFPath - ); - -u4Byte -H2CCmdAction8723B( - IN PADAPTER Adapter, - IN PVOID pBuf, - IN u2Byte bufLen - ); - -VOID -TxDescriptorChecksum_8723B( - IN pu1Byte txDesc - ); - - -#define MAX_RX_DMA_BUFFER_SIZE_8723B 0x2800 // RX 10K -#define SET_TX_DESC_USB_TXAGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 24, 8, __Value) - -VOID -SwLedOn_8723B( - IN PADAPTER Adapter, - IN PLED_SDIO pLed - ); - -VOID -SwLedOff_8723B( - IN PADAPTER Adapter, - IN PLED_SDIO pLed - ); - -#endif // (RTL8723B_SUPPORT == 0) - - - diff --git a/network/wlan/WDI/HAL/HalJaguarPhyReg.h b/network/wlan/WDI/HAL/HalJaguarPhyReg.h deleted file mode 100644 index ac41eff9..00000000 --- a/network/wlan/WDI/HAL/HalJaguarPhyReg.h +++ /dev/null @@ -1,399 +0,0 @@ -#ifndef __INC_HALJAGUARPHYREG_H -#define __INC_HALJAGUARPHYREG_H - - -/*--------------------------Define Parameters-------------------------------*/ - -// -// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF -// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF -// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 -// 3. RF register 0x00-2E -// 4. Bit Mask for BB/RF register -// 5. Other defintion for BB/RF R/W -// - - -// BB Register Definition -#define rCCAonSec_Jaguar 0x838 -#define rPwed_TH_Jaguar 0x830 -#define rL1_Weight_Jaguar 0x840 - -// BW and sideband setting -#define rBWIndication_Jaguar 0x834 -#define rL1PeakTH_Jaguar 0x848 -#define rRFMOD_Jaguar 0x8ac //RF mode - -#define rADC_Buf_160_Clk_Jaguar 0x8c4 -#define rADC_Buf_40_Clk_Jaguar2 0x8c8 - -#define bRFMOD_Jaguar 0xc3 -#define rCCK_System_Jaguar 0xa00 // for cck sideband -#define bCCK_System_Jaguar 0x10 - -// Block & Path enable -#define rOFDMCCKEN_Jaguar 0x808 // OFDM/CCK block enable -#define bOFDMEN_Jaguar 0x20000000 -#define bCCKEN_Jaguar 0x10000000 -#define rRxPath_Jaguar 0x808 // Rx antenna -#define bRxPath_Jaguar 0xff -#define rTxPath_Jaguar 0x80c // Tx antenna -#define bTxPath_Jaguar 0x0fffffff -#define rCCK_RX_Jaguar 0xa04 // for cck rx path selection -#define bCCK_RX_Jaguar 0x0c000000 -#define rVhtlen_Use_Lsig_Jaguar 0x8c3 // Use LSIG for VHT length - -#define rRxPath_Jaguar2 0xa04 // Rx antenna -#define rTxAnt_1Nsts_Jaguar2 0x93c // Tx antenna for 1Nsts -#define rTxAnt_23Nsts_Jaguar2 0x940 // Tx antenna for 2Nsts and 3Nsts - - -// RF read/write-related -#define rHSSIRead_Jaguar 0x8b0 // RF read addr -#define bHSSIRead_addr_Jaguar 0xff -#define bHSSIRead_trigger_Jaguar 0x100 -#define rA_PIRead_Jaguar 0xd04 // RF readback with PI -#define rB_PIRead_Jaguar 0xd44 // RF readback with PI -#define rA_SIRead_Jaguar 0xd08 // RF readback with SI -#define rB_SIRead_Jaguar 0xd48 // RF readback with SI -#define rRead_data_Jaguar 0xfffff -#define rA_LSSIWrite_Jaguar 0xc90 // RF write addr -#define rB_LSSIWrite_Jaguar 0xe90 // RF write addr -#define bLSSIWrite_data_Jaguar 0x000fffff -#define bLSSIWrite_addr_Jaguar 0x0ff00000 - -#define rC_PIRead_Jaguar2 0xd84 // RF readback with PI -#define rD_PIRead_Jaguar2 0xdC4 // RF readback with PI -#define rC_SIRead_Jaguar2 0xd88 // RF readback with SI -#define rD_SIRead_Jaguar2 0xdC8 // RF readback with SI -#define rC_LSSIWrite_Jaguar2 0x1890 // RF write addr -#define rD_LSSIWrite_Jaguar2 0x1A90 // RF write addr - - -// NBI & CSI Mask setting -#define rCSI_Mask_Setting1_Jaguar 0x874 -#define rCSI_Fix_Mask0_Jaguar 0x880 -#define rCSI_Fix_Mask1_Jaguar 0x884 -#define rCSI_Fix_Mask2_Jaguar 0x888 -#define rCSI_Fix_Mask3_Jaguar 0x88c -#define rCSI_Fix_Mask4_Jaguar 0x890 -#define rCSI_Fix_Mask5_Jaguar 0x894 -#define rCSI_Fix_Mask6_Jaguar 0x898 -#define rCSI_Fix_Mask7_Jaguar 0x89c -#define rNBI_Setting_Jaguar 0x87c - - -// YN: mask the following register definition temporarily -//#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch -#define rFPGA0_XB_RFInterfaceOE 0x864 - -//#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control -//#define rFPGA0_XCD_RFInterfaceSW 0x874 - -//#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter -//#define rFPGA0_XCD_RFParameter 0x87c - -//#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4?? -//#define rFPGA0_AnalogParameter2 0x884 -//#define rFPGA0_AnalogParameter3 0x888 -//#define rFPGA0_AdDaClockEn 0x888 // enable ad/da clock1 for dual-phy -//#define rFPGA0_AnalogParameter4 0x88c - - -// CCK TX scaling -#define rCCK_TxFilter1_Jaguar 0xa20 -#define bCCK_TxFilter1_C0_Jaguar 0x00ff0000 -#define bCCK_TxFilter1_C1_Jaguar 0xff000000 -#define rCCK_TxFilter2_Jaguar 0xa24 -#define bCCK_TxFilter2_C2_Jaguar 0x000000ff -#define bCCK_TxFilter2_C3_Jaguar 0x0000ff00 -#define bCCK_TxFilter2_C4_Jaguar 0x00ff0000 -#define bCCK_TxFilter2_C5_Jaguar 0xff000000 -#define rCCK_TxFilter3_Jaguar 0xa28 -#define bCCK_TxFilter3_C6_Jaguar 0x000000ff -#define bCCK_TxFilter3_C7_Jaguar 0x0000ff00 - - -// YN: mask the following register definition temporarily -//#define rPdp_AntA 0xb00 -//#define rPdp_AntA_4 0xb04 -//#define rConfig_Pmpd_AntA 0xb28 -//#define rConfig_AntA 0xb68 -//#define rConfig_AntB 0xb6c -//#define rPdp_AntB 0xb70 -//#define rPdp_AntB_4 0xb74 -//#define rConfig_Pmpd_AntB 0xb98 -//#define rAPK 0xbd8 - -// RXIQC -#define rA_RxIQC_AB_Jaguar 0xc10 //RxIQ imblance matrix coeff. A & B -#define rA_RxIQC_CD_Jaguar 0xc14 //RxIQ imblance matrix coeff. C & D -#define rA_TxScale_Jaguar 0xc1c // Pah_A TX scaling factor -#define rB_TxScale_Jaguar 0xe1c // Path_B TX scaling factor -#define rB_RxIQC_AB_Jaguar 0xe10 //RxIQ imblance matrix coeff. A & B -#define rB_RxIQC_CD_Jaguar 0xe14 //RxIQ imblance matrix coeff. C & D -#define b_RxIQC_AC_Jaguar 0x02ff // bit mask for IQC matrix element A & C -#define b_RxIQC_BD_Jaguar 0x02ff0000 // bit mask for IQC matrix element A & C - -#define rC_TxScale_Jaguar2 0x181c // Pah_C TX scaling factor -#define rD_TxScale_Jaguar2 0x1A1c // Path_D TX scaling factor -#define rRF_TxGainOffset 0x55 - -// DIG-related -#define rA_IGI_Jaguar 0xc50 // Initial Gain for path-A -#define rB_IGI_Jaguar 0xe50 // Initial Gain for path-B -#define rC_IGI_Jaguar2 0x1850 // Initial Gain for path-C -#define rD_IGI_Jaguar2 0x1A50 // Initial Gain for path-D - -#define rOFDM_FalseAlarm1_Jaguar 0xf48 // counter for break -#define rOFDM_FalseAlarm2_Jaguar 0xf4c // counter for spoofing -#define rCCK_FalseAlarm_Jaguar 0xa5c // counter for cck false alarm -#define b_FalseAlarm_Jaguar 0xffff -#define rCCK_CCA_Jaguar 0xa08 // cca threshold - -#define bCCK_CCA_Jaguar 0x00ff0000 - -// Tx Power Ttraining-related -#define rA_TxPwrTraing_Jaguar 0xc54 -#define rB_TxPwrTraing_Jaguar 0xe54 - -// Report-related -#define rOFDM_ShortCFOAB_Jaguar 0xf60 -#define rOFDM_LongCFOAB_Jaguar 0xf64 -#define rOFDM_EndCFOAB_Jaguar 0xf70 -#define rOFDM_AGCReport_Jaguar 0xf84 -#define rOFDM_RxSNR_Jaguar 0xf88 -#define rOFDM_RxEVMCSI_Jaguar 0xf8c -#define rOFDM_SIGReport_Jaguar 0xf90 - -// Misc functions -#define rEDCCA_Jaguar 0x8a4 // EDCCA -#define bEDCCA_Jaguar 0xffff -#define rAGC_table_Jaguar 0x82c // AGC tabel select -#define bAGC_table_Jaguar 0x3 -#define b_sel5g_Jaguar 0x1000 // sel5g -#define b_LNA_sw_Jaguar 0x8000 // HW/WS control for LNA -#define rFc_area_Jaguar 0x860 // fc_area -#define bFc_area_Jaguar 0x1ffe000 -#define rSingleTone_ContTx_Jaguar 0x914 - -#define rAGC_table_Jaguar2 0x958 // AGC tabel select -#define rDMA_trigger_Jaguar2 0x95C // ADC sample mode - - -// RFE -#define rA_RFE_Pinmux_Jaguar 0xcb0 // Path_A RFE cotrol pinmux -#define rB_RFE_Pinmux_Jaguar 0xeb0 // Path_B RFE control pinmux -#define rA_RFE_Inv_Jaguar 0xcb4 // Path_A RFE cotrol -#define rB_RFE_Inv_Jaguar 0xeb4 // Path_B RFE control -#define rA_RFE_Jaguar 0xcb8 // Path_A RFE cotrol -#define rB_RFE_Jaguar 0xeb8 // Path_B RFE control -#define r_ANTSEL_SW_Jaguar 0x900 // ANTSEL SW Control -#define bMask_RFEInv_Jaguar 0x3ff00000 -#define bMask_AntselPathFollow_Jaguar 0x00030000 - -#define rC_RFE_Pinmux_Jaguar 0x18B4 // Path_C RFE cotrol pinmux -#define rD_RFE_Pinmux_Jaguar 0x1AB4 // Path_D RFE cotrol pinmux -#define rA_RFE_Sel_Jaguar2 0x1990 - - - -// TX AGC -#define rTxAGC_A_CCK11_CCK1_JAguar 0xc20 -#define rTxAGC_A_Ofdm18_Ofdm6_JAguar 0xc24 -#define rTxAGC_A_Ofdm54_Ofdm24_JAguar 0xc28 -#define rTxAGC_A_MCS3_MCS0_JAguar 0xc2c -#define rTxAGC_A_MCS7_MCS4_JAguar 0xc30 -#define rTxAGC_A_MCS11_MCS8_JAguar 0xc34 -#define rTxAGC_A_MCS15_MCS12_JAguar 0xc38 -#define rTxAGC_A_Nss1Index3_Nss1Index0_JAguar 0xc3c -#define rTxAGC_A_Nss1Index7_Nss1Index4_JAguar 0xc40 -#define rTxAGC_A_Nss2Index1_Nss1Index8_JAguar 0xc44 -#define rTxAGC_A_Nss2Index5_Nss2Index2_JAguar 0xc48 -#define rTxAGC_A_Nss2Index9_Nss2Index6_JAguar 0xc4c -#define rTxAGC_B_CCK11_CCK1_JAguar 0xe20 -#define rTxAGC_B_Ofdm18_Ofdm6_JAguar 0xe24 -#define rTxAGC_B_Ofdm54_Ofdm24_JAguar 0xe28 -#define rTxAGC_B_MCS3_MCS0_JAguar 0xe2c -#define rTxAGC_B_MCS7_MCS4_JAguar 0xe30 -#define rTxAGC_B_MCS11_MCS8_JAguar 0xe34 -#define rTxAGC_B_MCS15_MCS12_JAguar 0xe38 -#define rTxAGC_B_Nss1Index3_Nss1Index0_JAguar 0xe3c -#define rTxAGC_B_Nss1Index7_Nss1Index4_JAguar 0xe40 -#define rTxAGC_B_Nss2Index1_Nss1Index8_JAguar 0xe44 -#define rTxAGC_B_Nss2Index5_Nss2Index2_JAguar 0xe48 -#define rTxAGC_B_Nss2Index9_Nss2Index6_JAguar 0xe4c -#define bTxAGC_byte0_Jaguar 0xff -#define bTxAGC_byte1_Jaguar 0xff00 -#define bTxAGC_byte2_Jaguar 0xff0000 -#define bTxAGC_byte3_Jaguar 0xff000000 - - -// TX AGC -#define rTxAGC_A_CCK11_CCK1_Jaguar2 0xc20 -#define rTxAGC_A_Ofdm18_Ofdm6_Jaguar2 0xc24 -#define rTxAGC_A_Ofdm54_Ofdm24_Jaguar2 0xc28 -#define rTxAGC_A_MCS3_MCS0_Jaguar2 0xc2c -#define rTxAGC_A_MCS7_MCS4_Jaguar2 0xc30 -#define rTxAGC_A_MCS11_MCS8_Jaguar2 0xc34 -#define rTxAGC_A_MCS15_MCS12_Jaguar2 0xc38 -#define rTxAGC_A_MCS19_MCS16_Jaguar2 0xcd8 -#define rTxAGC_A_MCS23_MCS20_Jaguar2 0xcdc -#define rTxAGC_A_Nss1Index3_Nss1Index0_Jaguar2 0xc3c -#define rTxAGC_A_Nss1Index7_Nss1Index4_Jaguar2 0xc40 -#define rTxAGC_A_Nss2Index1_Nss1Index8_Jaguar2 0xc44 -#define rTxAGC_A_Nss2Index5_Nss2Index2_Jaguar2 0xc48 -#define rTxAGC_A_Nss2Index9_Nss2Index6_Jaguar2 0xc4c -#define rTxAGC_A_Nss3Index3_Nss3Index0_Jaguar2 0xce0 -#define rTxAGC_A_Nss3Index7_Nss3Index4_Jaguar2 0xce4 -#define rTxAGC_A_Nss3Index9_Nss3Index8_Jaguar2 0xce8 -#define rTxAGC_B_CCK11_CCK1_Jaguar2 0xe20 -#define rTxAGC_B_Ofdm18_Ofdm6_Jaguar2 0xe24 -#define rTxAGC_B_Ofdm54_Ofdm24_Jaguar2 0xe28 -#define rTxAGC_B_MCS3_MCS0_Jaguar2 0xe2c -#define rTxAGC_B_MCS7_MCS4_Jaguar2 0xe30 -#define rTxAGC_B_MCS11_MCS8_Jaguar2 0xe34 -#define rTxAGC_B_MCS15_MCS12_Jaguar2 0xe38 -#define rTxAGC_B_MCS19_MCS16_Jaguar2 0xed8 -#define rTxAGC_B_MCS23_MCS20_Jaguar2 0xedc -#define rTxAGC_B_Nss1Index3_Nss1Index0_Jaguar2 0xe3c -#define rTxAGC_B_Nss1Index7_Nss1Index4_Jaguar2 0xe40 -#define rTxAGC_B_Nss2Index1_Nss1Index8_Jaguar2 0xe44 -#define rTxAGC_B_Nss2Index5_Nss2Index2_Jaguar2 0xe48 -#define rTxAGC_B_Nss2Index9_Nss2Index6_Jaguar2 0xe4c -#define rTxAGC_B_Nss3Index3_Nss3Index0_Jaguar2 0xee0 -#define rTxAGC_B_Nss3Index7_Nss3Index4_Jaguar2 0xee4 -#define rTxAGC_B_Nss3Index9_Nss3Index8_Jaguar2 0xee8 -#define rTxAGC_C_CCK11_CCK1_Jaguar2 0x1820 -#define rTxAGC_C_Ofdm18_Ofdm6_Jaguar2 0x1824 -#define rTxAGC_C_Ofdm54_Ofdm24_Jaguar2 0x1828 -#define rTxAGC_C_MCS3_MCS0_Jaguar2 0x182c -#define rTxAGC_C_MCS7_MCS4_Jaguar2 0x1830 -#define rTxAGC_C_MCS11_MCS8_Jaguar2 0x1834 -#define rTxAGC_C_MCS15_MCS12_Jaguar2 0x1838 -#define rTxAGC_C_MCS19_MCS16_Jaguar2 0x18d8 -#define rTxAGC_C_MCS23_MCS20_Jaguar2 0x18dc -#define rTxAGC_C_Nss1Index3_Nss1Index0_Jaguar2 0x183c -#define rTxAGC_C_Nss1Index7_Nss1Index4_Jaguar2 0x1840 -#define rTxAGC_C_Nss2Index1_Nss1Index8_Jaguar2 0x1844 -#define rTxAGC_C_Nss2Index5_Nss2Index2_Jaguar2 0x1848 -#define rTxAGC_C_Nss2Index9_Nss2Index6_Jaguar2 0x184c -#define rTxAGC_C_Nss3Index3_Nss3Index0_Jaguar2 0x18e0 -#define rTxAGC_C_Nss3Index7_Nss3Index4_Jaguar2 0x18e4 -#define rTxAGC_C_Nss3Index9_Nss3Index8_Jaguar2 0x18e8 -#define rTxAGC_D_CCK11_CCK1_Jaguar2 0x1a20 -#define rTxAGC_D_Ofdm18_Ofdm6_Jaguar2 0x1a24 -#define rTxAGC_D_Ofdm54_Ofdm24_Jaguar2 0x1a28 -#define rTxAGC_D_MCS3_MCS0_Jaguar2 0x1a2c -#define rTxAGC_D_MCS7_MCS4_Jaguar2 0x1a30 -#define rTxAGC_D_MCS11_MCS8_Jaguar2 0x1a34 -#define rTxAGC_D_MCS15_MCS12_Jaguar2 0x1a38 -#define rTxAGC_D_MCS19_MCS16_Jaguar2 0x1ad8 -#define rTxAGC_D_MCS23_MCS20_Jaguar2 0x1adc -#define rTxAGC_D_Nss1Index3_Nss1Index0_Jaguar2 0x1a3c -#define rTxAGC_D_Nss1Index7_Nss1Index4_Jaguar2 0x1a40 -#define rTxAGC_D_Nss2Index1_Nss1Index8_Jaguar2 0x1a44 -#define rTxAGC_D_Nss2Index5_Nss2Index2_Jaguar2 0x1a48 -#define rTxAGC_D_Nss2Index9_Nss2Index6_Jaguar2 0x1a4c -#define rTxAGC_D_Nss3Index3_Nss3Index0_Jaguar2 0x1ae0 -#define rTxAGC_D_Nss3Index7_Nss3Index4_Jaguar2 0x1ae4 -#define rTxAGC_D_Nss3Index9_Nss3Index8_Jaguar2 0x1ae8 -// IQK YN: temporaily mask this part -//#define rFPGA0_IQK 0xe28 -//#define rTx_IQK_Tone_A 0xe30 -//#define rRx_IQK_Tone_A 0xe34 -//#define rTx_IQK_PI_A 0xe38 -//#define rRx_IQK_PI_A 0xe3c - -//#define rTx_IQK 0xe40 -//#define rRx_IQK 0xe44 -//#define rIQK_AGC_Pts 0xe48 -//#define rIQK_AGC_Rsp 0xe4c -//#define rTx_IQK_Tone_B 0xe50 -//#define rRx_IQK_Tone_B 0xe54 -//#define rTx_IQK_PI_B 0xe58 -//#define rRx_IQK_PI_B 0xe5c -//#define rIQK_AGC_Cont 0xe60 - - -// AFE-related -#define rA_AFEPwr1_Jaguar 0xc60 // dynamic AFE power control -#define rA_AFEPwr2_Jaguar 0xc64 // dynamic AFE power control -#define rA_Rx_WaitCCA_Tx_CCKRFON_Jaguar 0xc68 -#define rA_Tx_CCKBBON_OFDMRFON_Jaguar 0xc6c -#define rA_Tx_OFDMBBON_Tx2Rx_Jaguar 0xc70 -#define rA_Tx2Tx_RXCCK_Jaguar 0xc74 -#define rA_Rx_OFDM_WaitRIFS_Jaguar 0xc78 -#define rA_Rx2Rx_BT_Jaguar 0xc7c -#define rA_sleep_nav_Jaguar 0xc80 -#define rA_pmpd_Jaguar 0xc84 -#define rB_AFEPwr1_Jaguar 0xe60 // dynamic AFE power control -#define rB_AFEPwr2_Jaguar 0xe64 // dynamic AFE power control -#define rB_Rx_WaitCCA_Tx_CCKRFON_Jaguar 0xe68 -#define rB_Tx_CCKBBON_OFDMRFON_Jaguar 0xe6c -#define rB_Tx_OFDMBBON_Tx2Rx_Jaguar 0xe70 -#define rB_Tx2Tx_RXCCK_Jaguar 0xe74 -#define rB_Rx_OFDM_WaitRIFS_Jaguar 0xe78 -#define rB_Rx2Rx_BT_Jaguar 0xe7c -#define rB_sleep_nav_Jaguar 0xe80 -#define rB_pmpd_Jaguar 0xe84 - - -// YN: mask these registers temporaily -//#define rTx_Power_Before_IQK_A 0xe94 -//#define rTx_Power_After_IQK_A 0xe9c - -//#define rRx_Power_Before_IQK_A 0xea0 -//#define rRx_Power_Before_IQK_A_2 0xea4 -//#define rRx_Power_After_IQK_A 0xea8 -//#define rRx_Power_After_IQK_A_2 0xeac - -//#define rTx_Power_Before_IQK_B 0xeb4 -//#define rTx_Power_After_IQK_B 0xebc - -//#define rRx_Power_Before_IQK_B 0xec0 -//#define rRx_Power_Before_IQK_B_2 0xec4 -//#define rRx_Power_After_IQK_B 0xec8 -//#define rRx_Power_After_IQK_B_2 0xecc - - -// RSSI Dump -#define rA_RSSIDump_Jaguar 0xBF0 -#define rB_RSSIDump_Jaguar 0xBF1 -#define rS1_RXevmDump_Jaguar 0xBF4 -#define rS2_RXevmDump_Jaguar 0xBF5 -#define rA_RXsnrDump_Jaguar 0xBF6 -#define rB_RXsnrDump_Jaguar 0xBF7 -#define rA_CfoShortDump_Jaguar 0xBF8 -#define rB_CfoShortDump_Jaguar 0xBFA -#define rA_CfoLongDump_Jaguar 0xBEC -#define rB_CfoLongDump_Jaguar 0xBEE - - -// RF Register -// -#define RF_AC_Jaguar 0x00 // -#define RF_RF_Top_Jaguar 0x07 // -#define RF_TXLOK_Jaguar 0x08 // -#define RF_TXAPK_Jaguar 0x0B -#define RF_CHNLBW_Jaguar 0x18 // RF channel and BW switch -#define RF_RCK1_Jaguar 0x1c // -#define RF_RCK2_Jaguar 0x1d -#define RF_RCK3_Jaguar 0x1e -#define RF_ModeTableAddr 0x30 -#define RF_ModeTableData0 0x31 -#define RF_ModeTableData1 0x32 -#define RF_TxLCTank_Jaguar 0x54 -#define RF_APK_Jaguar 0x63 -#define RF_LCK 0xB4 -#define RF_WeLut_Jaguar 0xEF - -#define bRF_CHNLBW_MOD_AG_Jaguar 0x70300 -#define bRF_CHNLBW_BW 0xc00 - - -/*--------------------------Define Parameters-------------------------------*/ - - -#endif //__INC_HALJAGUARPHYREG_H - diff --git a/network/wlan/WDI/HAL/HalMacID.h b/network/wlan/WDI/HAL/HalMacID.h deleted file mode 100644 index db9f04c8..00000000 --- a/network/wlan/WDI/HAL/HalMacID.h +++ /dev/null @@ -1,199 +0,0 @@ - -#ifndef __INC_HAL_MAC_ID_H -#define __INC_HAL_MAC_ID_H - -#define NUMBER_OF_HAL_MAC_ID_DESCRIPTOR 128 - -#define MAC_ID_OWNER_ASSOCIATED_CLIENT_AID_NO_USE 0 - - -// Static MacID Mapping (cf. Used in MacIdDoStaticMapping) ---------- -#define MAC_ID_STATIC_FOR_DEFAULT_PORT 0x00 -#define MAC_ID_STATIC_FOR_BROADCAST_MULTICAST 0x01 -#define MAC_ID_STATIC_FOR_BT_CLIENT_START 0x02 -#define MAC_ID_STATIC_FOR_BT_CLIENT_END 0x03 -#define MAC_ID_STATIC_FOR_AP_MULTICAST 0x08 -//TODO : temporily we use 0xff as UNSPECIFIED MACID -// but if new IC support more MACID(more than 0xff) -// We should enlarge macid data type from 1 byte->2byte -// Otherwise there will be one MACID never send out. hsiao_ho -#define MAC_ID_STATIC_UNSPECIFIED_MACID 0xff - -// ----------------------------------------------------------- - - -typedef enum _MAC_ID_OWNER_TYPE { - - MAC_ID_OWNER_NOT_IN_USE = 0, - - // No Single Peer - MAC_ID_OWNER_BROADCAST_MULTICAST, - - // Default Port - MAC_ID_OWNER_DEFAULT_PORT, - - // BT High Speed Client - MAC_ID_OWNER_BT, - - // TDLS Peer - MAC_ID_OWNER_TDLS, - - // Native Ad-hoc Client or UI-based fake AP Client - MAC_ID_OWNER_AD_HOC, - - // N62 Virtual Station / N63 P2P Client - MAC_ID_OWNER_INFRA_STA, - - // N62 Virtual Station / N62 P2P Client for broadcast & multicast - MAC_ID_OWNER_INFRA_STA_MULTICAST, - - // N62 Virtual AP / N63 P2P GO - MAC_ID_OWNER_INFRA_AP, - - MAC_ID_OWNER_MAX -} MAC_ID_OWNER_TYPE, *PMAC_ID_OWNER_TYPE; - - -typedef struct _MAC_ID_DESCRIPTOR { - - PADAPTER pOwnerAdapter; // Adapter which owns this descriptor - MAC_ID_OWNER_TYPE OwnerType; // Descriptor owner type - u4Byte OwnerAssociatedClientAID; // Assign for its client if the owner is AP-like - -} MAC_ID_DESCRIPTOR, *PMAC_ID_DESCRIPTOR; - - -typedef struct _HAL_MAC_ID_COMMON_CONTEXT{ - - u1Byte MAC_ID_CONSTRAINT_ON_COUNT_FOR_EACH_OWNER[MAC_ID_OWNER_MAX]; - - // Define the dynamically assigned MacID section - u1Byte MacIdDynamicZoneStart; - - MAC_ID_DESCRIPTOR MacIdDescriptor[NUMBER_OF_HAL_MAC_ID_DESCRIPTOR]; - -} HAL_MAC_ID_COMMON_CONTEXT, *PHAL_MAC_ID_COMMON_CONTEXT; - -#define HAL_MAC_ID_SIZE_OF_COMMON_CONTEXT sizeof(HAL_MAC_ID_COMMON_CONTEXT) - - - -VOID -MacIdInitializeCommonContext( - PADAPTER pAdapter -); - -VOID -MacIdDeInitializeCommonContext( - PADAPTER pAdapter -); - -VOID -MacIdInitializeMediaStatus( - PADAPTER pAdapter -); - -VOID -MacIdIndicateMediaStatus( - PADAPTER pAdapter, - u4Byte MacId, - u4Byte MacIdEnd, - RT_MEDIA_STATUS MediaStatus -); - -VOID -MacIdIndicateSpecificMediaStatus( - PADAPTER pAdapter, - u4Byte MacId, - RT_MEDIA_STATUS MediaStatus -); - -VOID -MacIdIndicateDisconnect( - PADAPTER pAdapter -); - -VOID -MacIdRecoverMediaStatus( - PADAPTER pAdapter -); - -VOID -MacIdDump( - PADAPTER pAdapter -); - -MAC_ID_OWNER_TYPE -MacIdGetOwnerType( - PADAPTER pAdapter, - u4Byte MacId -); - -u4Byte -MacIdGetTxMacId( - PADAPTER Adapter, - PRT_TCB pTcb -); - -u1Byte -MacIdHalGetMaxMacIdSupportNum( - IN PADAPTER Adapter -); - -u1Byte -MacIdHalGetMaxHWMacId( - IN PADAPTER Adapter -); - -VOID -MacIdDeregisterMacIdForInfraClient( - PADAPTER pAdapter, - u4Byte MacId -); - -VOID -MacIdDeregisterSpecificMacId( - PADAPTER pAdapter, - u4Byte MacId -); - -VOID -MacIdDeregisterForOwnerAdapter( - PADAPTER pAdapter -); - -u4Byte -MacIdRegisterMacIdForInfraClient( - PADAPTER pAdapter -); - -u4Byte -MacIdRegisterMacIdForMCastClient( - PADAPTER pAdapter -); - -u4Byte -MacIdRegisterMacIdForAssociatedID( - PADAPTER pAdapter, - MAC_ID_OWNER_TYPE OwnerType, - u4Byte AssociatedID -); - -u4Byte -MacIdGetOwnerAssociatedClientAID( - PADAPTER pAdapter, - u4Byte MacId -); - -u4Byte -MacIdRegisterMacIdForAPMcast( - PADAPTER pAdapter - ); - -MAC_ID_OWNER_TYPE -MacIdGetOwnerType( - PADAPTER pAdapter, - u4Byte MacId -); - -#endif diff --git a/network/wlan/WDI/HAL/HalPG.h b/network/wlan/WDI/HAL/HalPG.h deleted file mode 100644 index 3acda33d..00000000 --- a/network/wlan/WDI/HAL/HalPG.h +++ /dev/null @@ -1,809 +0,0 @@ -#ifndef __INC_HAL_PG_H -#define __INC_HAL_PG_H - -//==================================================== -// EEPROM/Efuse PG Offset for 8192 CE/CU -//==================================================== -#define EEPROM_VID_92C 0x0A -#define EEPROM_PID_92C 0x0C -#define EEPROM_DID_92C 0x0C -#define EEPROM_SVID_92C 0x0E -#define EEPROM_SMID_92C 0x10 -#define EEPROM_MAC_ADDR_92C 0x16 - -#define EEPROM_SUBCUSTOMER_ID 0x59 - -#define EEPROM_MAC_ADDR 0x16 -#define EEPROM_TV_OPTION 0x50 -#define EEPROM_SUBCUSTOMER_ID 0x59 -#define EEPROM_CCK_TX_PWR_INX 0x5A -#define EEPROM_HT40_1S_TX_PWR_INX 0x60 -#define EEPROM_HT40_2S_TX_PWR_INX_DIFF 0x66 -#define EEPROM_HT20_TX_PWR_INX_DIFF 0x69 -#define EEPROM_OFDM_TX_PWR_INX_DIFF 0x6C -#define EEPROM_HT40_MAX_PWR_OFFSET 0x6F -#define EEPROM_VERSION_92C 0x7E -#define EEPROM_HT20_MAX_PWR_OFFSET 0x72 -#define EEPROM_CHANNEL_PLAN_92C 0x75 -#define EEPROM_TSSI_A 0x76 -#define EEPROM_TSSI_B 0x77 -#define EEPROM_THERMAL_METER_92C 0x78 -#define EEPROM_RF_OPT1_92C 0x79 -#define EEPROM_RF_OPT2_92C 0x7A -#define EEPROM_RF_OPT3_92C 0x7B -#define EEPROM_RF_OPT4_92C 0x7C -#define EEPROM_CUSTOMER_ID 0x7F -#define EEPROM_CUSTOMER_ID_92C 0x7F - -#define EEPROM_NORMAL_CHANNEL_PLAN 0x75 -#define EEPROM_NORMAL_BoardType_92C EEPROM_RF_OPT1_92C -#define BOARD_TYPE_NORMAL_MASK 0xE0 -#define BOARD_TYPE_TEST_MASK 0xF -#define EEPROM_TYPE_ID 0x7E - -// PCIe related -#define EEPROM_PCIE_DEV_CAP_01 0xE0 // Express device capability in PCIe configuration space, i.e., map to offset 0x74 -#define EEPROM_PCIE_DEV_CAP_02 0xE1 // Express device capability in PCIe configuration space, i.e., map to offset 0x75 - - -//==================================================== -// EEPROM/Efuse PG Offset for 8723AE/8723AU/8723AS -//==================================================== -#define EEPROM_CCK_TX_PWR_INX_8723A 0x10 -#define EEPROM_HT40_1S_TX_PWR_INX_8723A 0x16 -#define EEPROM_HT20_TX_PWR_INX_DIFF_8723A 0x1C -#define EEPROM_OFDM_TX_PWR_INX_DIFF_8723A 0x1F -#define EEPROM_HT40_MAX_PWR_OFFSET_8723A 0x22 -#define EEPROM_HT20_MAX_PWR_OFFSET_8723A 0x25 - -#define EEPROM_ChannelPlan_8723A 0x28 -#define EEPROM_TSSI_A_8723A 0x29 -#define EEPROM_THERMAL_METER_8723A 0x2A -#define RF_OPTION1_8723A 0x2B -#define RF_OPTION2_8723A 0x2C -#define RF_OPTION3_8723A 0x2D -#define RF_OPTION4_8723A 0x2E -#define EEPROM_VERSION_8723A 0x30 -#define EEPROM_CustomID_8723A 0x31 -#define EEPROM_SubCustomID_8723A 0x32 -#define EEPROM_XTAL_K_8723A 0x33 -#define EEPROM_Chipset_8723A 0x34 - - -// RTL8723AE -#define EEPROM_VID_8723AE 0x49 -#define EEPROM_DID_8723AE 0x4B -#define EEPROM_SVID_8723AE 0x4D -#define EEPROM_SMID_8723AE 0x4F -#define EEPROM_MAC_ADDR_8723AE 0x67 - -//RTL8723AU -#define EEPROM_MAC_ADDR_8723AU 0xC6 -#define EEPROM_VID_8723AU 0xB7 -#define EEPROM_PID_8723AU 0xB9 - -// RTL8723AS -#define EEPROM_MAC_ADDR_8723AS 0xAA - -//==================================================== -// EEPROM/Efuse PG Offset for 8192 DE/DU -//==================================================== -// pcie -#define RTL8190_EEPROM_ID 0x8129 // 0-1 -#define EEPROM_HPON 0x02 // LDO settings.2-5 -#define EEPROM_CLK 0x06 // Clock settings.6-7 -#define EEPROM_MAC_FUNCTION 0x08 // SE Test mode.8 - -#define EEPROM_MAC_ADDR_MAC0_92DE 0x55 -#define EEPROM_MAC_ADDR_MAC1_92DE 0x5B - -//usb -#define EEPROM_ENDPOINT_SETTING 0x10 -#define EEPROM_CHIRP_K 0x12 // Changed -#define EEPROM_USB_PHY 0x13 // Changed -#define EEPROM_STRING 0x1F -#define EEPROM_SUBCUSTOMER_ID 0x59 - -#define EEPROM_MAC_ADDR_MAC0_92DU 0x19 -#define EEPROM_MAC_ADDR_MAC1_92DU 0x5B -//---------------------------------------------------------------- -// 2.4G band Tx power index setting -#define EEPROM_CCK_TX_PWR_INX_2G_92D 0x61 -#define EEPROM_HT40_1S_TX_PWR_INX_2G_92D 0x67 -#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_2G_92D 0x6D -#define EEPROM_HT20_TX_PWR_INX_DIFF_2G_92D 0x70 -#define EEPROM_OFDM_TX_PWR_INX_DIFF_2G_92D 0x73 -#define EEPROM_HT40_MAX_PWR_OFFSET_2G_92D 0x76 -#define EEPROM_HT20_MAX_PWR_OFFSET_2G_92D 0x79 - -//5GL channel 32-64 -#define EEPROM_HT40_1S_TX_PWR_INX_5GL_92D 0x7C -#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GL_92D 0x82 -#define EEPROM_HT20_TX_PWR_INX_DIFF_5GL_92D 0x85 -#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GL_92D 0x88 -#define EEPROM_HT40_MAX_PWR_OFFSET_5GL_92D 0x8B -#define EEPROM_HT20_MAX_PWR_OFFSET_5GL_92D 0x8E - -//5GM channel 100-140 -#define EEPROM_HT40_1S_TX_PWR_INX_5GM_92D 0x91 -#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GM_92D 0x97 -#define EEPROM_HT20_TX_PWR_INX_DIFF_5GM_92D 0x9A -#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GM_92D 0x9D -#define EEPROM_HT40_MAX_PWR_OFFSET_5GM_92D 0xA0 -#define EEPROM_HT20_MAX_PWR_OFFSET_5GM_92D 0xA3 - -//5GH channel 149-165 -#define EEPROM_HT40_1S_TX_PWR_INX_5GH_92D 0xA6 -#define EEPROM_HT40_2S_TX_PWR_INX_DIFF_5GH_92D 0xAC -#define EEPROM_HT20_TX_PWR_INX_DIFF_5GH_92D 0xAF -#define EEPROM_OFDM_TX_PWR_INX_DIFF_5GH_92D 0xB2 -#define EEPROM_HT40_MAX_PWR_OFFSET_5GH_92D 0xB5 -#define EEPROM_HT20_MAX_PWR_OFFSET_5GH_92D 0xB8 - - -#define EEPROM_CHANNEL_PLAN_92D 0xBB // Map of supported channels. -#define EEPROM_TEST_CHANNEL_PLAN_92D 0xBB -#define EEPROM_THERMAL_METER_92D 0xC3 //[4:0] -#define EEPROM_IQK_DELTA_92D 0xBC -#define EEPROM_LCK_DELTA_92D 0xBC -#define EEPROM_XTAL_K_92D 0xBD //[7:5] -#define EEPROM_TSSI_A_5G_92D 0xBE -#define EEPROM_TSSI_B_5G_92D 0xBF -#define EEPROM_TSSI_AB_5G_92D 0xC0 - -#define EEPROM_RF_OPT6 0xC9 -#define EEPROM_RF_OPT7 0xCC - - -#define EEPROM_DEF_PART_NO 0x3FD //Byte -#define EEPROME_CHIP_VERSION_L 0x3FF -#define EEPROME_CHIP_VERSION_H 0x3FE - -//---------------------------------------------------------------- - -#define EEPROM_VID_92DE 0x28 -#define EEPROM_PID_92DE 0x2A -#define EEPROM_SVID_92DE 0x2C -#define EEPROM_SMID_92DE 0x2E -#define EEPROM_PATHDIV_92D 0xC4 - -#define EEPROM_BOARD_OPTIONS_92D 0xC4 -#define EEPROM_5G_LNA_GAIN_92D 0xC6 -#define EEPROM_FEATURE_OPTIONS_92D 0xC7 -#define EEPROM_BT_SETTING_92D 0xC8 - -#define EEPROM_VERSION_92D 0xCA -#define EEPROM_CUSTOMER_ID_92D 0xCB - - -#define EEPROM_THERMAL_METER_92D 0xC3 - -#define EEPROM_VID_92DU 0xC -#define EEPROM_PID_92DU 0xE - -//==================================================== -// EEPROM/Efuse PG Offset for 88EE/88EU/88ES -//==================================================== -#define EEPROM_TX_PWR_INX_88E 0x10 - -#define EEPROM_ChannelPlan_88E 0xB8 -#define EEPROM_XTAL_88E 0xB9 -#define EEPROM_THERMAL_METER_88E 0xBA -#define EEPROM_IQK_LCK_88E 0xBB - -#define EEPROM_RF_BOARD_OPTION_88E 0xC1 -#define EEPROM_RF_FEATURE_OPTION_88E 0xC2 -#define EEPROM_RF_BT_SETTING_88E 0xC3 -#define EEPROM_VERSION_88E 0xC4 -#define EEPROM_CustomID_88E 0xC5 -#define EEPROM_RF_ANTENNA_OPT_88E 0xC9 -#define EEPROM_RF_BB_GAIN 0xFD - -// RTL88EE -#define EEPROM_MAC_ADDR_88EE 0xD0 -#define EEPROM_VID_88EE 0xD6 -#define EEPROM_DID_88EE 0xD8 -#define EEPROM_SVID_88EE 0xDA -#define EEPROM_SMID_88EE 0xDC - -//RTL88EU -#define EEPROM_MAC_ADDR_88EU 0xD7 -#define EEPROM_VID_88EU 0xD0 -#define EEPROM_PID_88EU 0xD2 - -// RTL88ES -#define EEPROM_MAC_ADDR_88ES 0x11A - -//==================================================== -// EEPROM/Efuse PG Offset for 8812AE/8812AU/8812AS -//==================================================== -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_USB_MODE_8812 0x08 - -#define EEPROM_RF_FEATURE_OPTION_8812 0xC2 -#define EEPROM_RF_BT_SETTING_8812 0xC3 -#define EEPROM_VERSION_8812 0xC4 -#define EEPROM_CustomID_8812 0xC5 -#define EEPROM_TX_PWR_CALIBRATE_RATE_8812 0xC8 -#define EEPROM_RF_ANTENNA_OPT_8812 0xC9 - -// RTL8812AE -#define EEPROM_MAC_ADDR_8812AE 0xD0 -#define EEPROM_VID_8812AE 0xD6 -#define EEPROM_DID_8812AE 0xD8 -#define EEPROM_SVID_8812AE 0xDA -#define EEPROM_SMID_8812AE 0xDC - - -// RTL8821BE -#define EEPROM_MAC_ADDR_8821BE 0xD0 -#define EEPROM_VID_8821BE 0xD6 -#define EEPROM_DID_8821BE 0xD8 -#define EEPROM_SVID_8821BE 0xDA -#define EEPROM_SMID_8821BE 0xDC - -// RTL8822BE -#define EEPROM_MAC_ADDR_8822BE 0xD0 -#define EEPROM_VID_8822BE 0xD6 -#define EEPROM_DID_8822BE 0xD8 -#define EEPROM_SVID_8822BE 0xDA -#define EEPROM_SMID_8822BE 0xDC - - -//RTL8812AU -#define EEPROM_MAC_ADDR_8812AU 0xD7 -#define EEPROM_VID_8812AU 0xD0 -#define EEPROM_PID_8812AU 0xD2 - - -//=========================================================== -// EEPROM/Efuse PG Offset for 8821BE/8821BU/8821BS -//=========================================================== - -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_USB_MODE_8821B 0x08 -#define EEPROM_TX_PWR_INX_8821B 0x10 - -#define EEPROM_ChannelPlan_8821B 0xB8 -#define EEPROM_XTAL_8821B 0xB9 -#define EEPROM_THERMAL_METER_8821B 0xBA -#define EEPROM_IQK_LCK_8821B 0xBB - -#define EEPROM_RF_FEATURE_OPTION_8821B 0xC2 -#define EEPROM_RF_BT_SETTING_8821B 0xC3 -#define EEPROM_VERSION_8821B 0xC4 -#define EEPROM_CustomID_8821B 0xC5 -#define EEPROM_TX_PWR_CALIBRATE_RATE_8821B 0xC8 -#define EEPROM_RF_ANTENNA_OPT_8821B 0xC9 -#define EEPROM_RFE_OPTION_8821B 0xCA - -//RTL8821B -#define EEPROM_MAC_ADDR_8821B 0xD0 -#define EEPROM_VID_8821B 0xD6 -#define EEPROM_DID_8821B 0xD8 -#define EEPROM_SVID_8821B 0xDA -#define EEPROM_SMID_8821B 0xDC - -//RTL8821BU -#define EEPROM_MAC_ADDR_8821BU 0xD7 -#define EEPROM_VID_8821BU 0xD0 -#define EEPROM_PID_8821BU 0xD2 - -//=========================================================== -// EEPROM/Efuse PG Offset for 8822BE/8822BU/8822BS -//=========================================================== - -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_USB_MODE_8822B 0x08 -#define EEPROM_TX_PWR_INX_8822B 0x10 - -#define EEPROM_ChannelPlan_8822B 0xB8 -#define EEPROM_XTAL_8822B 0xB9 -#define EEPROM_THERMAL_METER_8822B 0xBA -#define EEPROM_IQK_LCK_8822B 0xBB - -#define EEPROM_RF_FEATURE_OPTION_8822B 0xC2 -#define EEPROM_RF_BT_SETTING_8822B 0xC3 -#define EEPROM_VERSION_8822B 0xC4 -#define EEPROM_CustomID_8822B 0xC5 -#define EEPROM_TX_PWR_CALIBRATE_RATE_8822B 0xC8 -#define EEPROM_RF_ANTENNA_OPT_8822B 0xC9 -#define EEPROM_RFE_OPTION_8822B 0xCA - -//RTL8822B -#define EEPROM_MAC_ADDR_8822BU 0x107 -#define EEPROM_VID_8822B 0x100 -#define EEPROM_DID_8822B 0x102 -#define EEPROM_SVID_8822B 0xDA -#define EEPROM_SMID_8822B 0xDC - -//RTL8821BU -#define EEPROM_MAC_ADDR_8821BU 0xD7 -#define EEPROM_VID_8821BU 0xD0 -#define EEPROM_PID_8821BU 0xD2 - - -//==================================================== -// EEPROM/Efuse PG Offset for 8821AE/8821AU/8821AS -//==================================================== -#define EEPROM_RF_FEATURE_OPTION_8821 0xC2 -#define EEPROM_RF_BT_SETTING_8821 0xC3 -#define EEPROM_VERSION_8821 0xC4 -#define EEPROM_CustomID_8821 0xC5 -#define EEPROM_RF_ANTENNA_OPT_8821 0xC9 - -// RTL8821AE -#define EEPROM_MAC_ADDR_8821AE 0xD0 -#define EEPROM_VID_8821AE 0xD6 -#define EEPROM_DID_8821AE 0xD8 -#define EEPROM_SVID_8821AE 0xDA -#define EEPROM_SMID_8821AE 0xDC - -// RTL8821AS -#define EEPROM_MAC_ADDR_8821AS 0x11A - -//RTL8821AU -#define EEPROM_MAC_ADDR_8821AU 0x107 -#define EEPROM_VID_8821AU 0x100 -#define EEPROM_PID_8821AU 0x102 - -// 8188EU / 8192EU EFUSE cloud key define -#define EEPROM_CLOUD_KEY_START_EX 0x122 -#define EEPROM_CLOUD_KEY_END 0x12F -#define EEPROM_CLOUD_KEY_LENGTH_EX 14 // 12F-122 = 14 -#define EEPROM_LENGTH 512 - -//==================================================== -// EEPROM/Efuse PG Offset for 8723BE/8723BU/8723BS -//==================================================== - -#define EEPROM_ChannelPlan_8723B 0xB8 -#define EEPROM_XTAL_8723B 0xB9 -#define EEPROM_THERMAL_METER_8723B 0xBA - -#define EEPROM_RF_BOARD_OPTION_8723B 0xC1 -#define EEPROM_RF_BT_SETTING_8723B 0xC3 - -// RTL8723BE -#define EEPROM_MAC_ADDR_8723BE 0xD0 -#define EEPROM_VID_8723BE 0xD6 -#define EEPROM_DID_8723BE 0xD8 -#define EEPROM_SVID_8723BE 0xDA -#define EEPROM_SMID_8723BE 0xDC -#define EEPROM_CustomID_8723B 0xC5 -#define EEPROM_RFE_Type_8723BE 0xCA - -//RTL8723BU -#define EEPROM_MAC_ADDR_8723BU 0x107 -#define EEPROM_VID_8723BU 0xD0 -#define EEPROM_PID_8723BU 0xD2 -#define EEPROM_PA_TYPE_8723BU 0xBC -#define EEPROM_LNA_TYPE_2G_8723BU 0xBD -#define EEPROM_LNA_TYPE_5G_8723BU 0xBF - -//RTL8723BS -#define EEPROM_MAC_ADDR_8723BS 0x11A - -//==================================================== -// EEPROM/Efuse PG Offset for 8192EE/8192EU/8192ES -//==================================================== -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_TX_PWR_INX_8192E 0x10 - -#define EEPROM_ChannelPlan_8192E 0xB8 -#define EEPROM_XTAL_8192E 0xB9 -#define EEPROM_THERMAL_METER_8192E 0xBA -#define EEPROM_IQK_LCK_8192E 0xBB -#define EEPROM_2G_5G_PA_TYPE_8192E 0xBC -#define EEPROM_2G_LNA_TYPE_GAIN_SEL_8192E 0xBD -#define EEPROM_5G_LNA_TYPE_GAIN_SEL_8192E 0xBF - -#define EEPROM_RF_BOARD_OPTION_8192E 0xC1 -#define EEPROM_RF_FEATURE_OPTION_8192E 0xC2 -#define EEPROM_RF_BT_SETTING_8192E 0xC3 -#define EEPROM_VERSION_8192E 0xC4 -#define EEPROM_CustomID_8192E 0xC5 -#define EEPROM_TX_BBSWING_2G_8192E 0xC6 -#define EEPROM_TX_BBSWING_5G_8192E 0xC7 -#define EEPROM_TX_PWR_CALIBRATE_RATE_8192E 0xC8 -#define EEPROM_RF_ANTENNA_OPT_8192E 0xC9 -#define EEPROM_RFE_OPTION_8192E 0xCA - -// RTL8192EE -#define EEPROM_MAC_ADDR_8192EE 0xD0 -#define EEPROM_VID_8192EE 0xD6 -#define EEPROM_DID_8192EE 0xD8 -#define EEPROM_SVID_8192EE 0xDA -#define EEPROM_SMID_8192EE 0xDC - -//RTL8192EU -#define EEPROM_MAC_ADDR_8192EU 0xD7 -#define EEPROM_VID_8192EU 0xD0 -#define EEPROM_PID_8192EU 0xD2 -#define EEPROM_PA_TYPE_8192EU 0xBC -#define EEPROM_LNA_TYPE_2G_8192EU 0xBD -#define EEPROM_LNA_TYPE_5G_8192EU 0xBF - -// RTL8192ES -#define EEPROM_MAC_ADDR_8192ES 0x11B - -//==================================================== -// EEPROM/Efuse PG Offset for 8814AE/8814AU/8814AS -//==================================================== -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_USB_MODE_8814A 0x0E - -#define EEPROM_RF_FEATURE_OPTION_8814A 0xC2 -#define EEPROM_RF_BT_SETTING_8814A 0xC3 -#define EEPROM_VERSION_8814A 0xC4 -#define EEPROM_CustomID_8814A 0xC5 -#define EEPROM_TX_PWR_CALIBRATE_RATE_8814A 0xC8 -#define EEPROM_RF_ANTENNA_OPT_8814A 0xC9 - -// RTL8814AE -#define EEPROM_MAC_ADDR_8814AE 0xD0 -#define EEPROM_VID_8814AE 0xD6 -#define EEPROM_DID_8814AE 0xD8 -#define EEPROM_SVID_8814AE 0xDA -#define EEPROM_SMID_8814AE 0xDC - -//RTL8814AU -#define EEPROM_MAC_ADDR_8814AU 0xD8 -#define EEPROM_VID_8814AU 0xD0 -#define EEPROM_PID_8814AU 0xD2 -#define EEPROM_PA_TYPE_8814AU 0xBC -#define EEPROM_LNA_TYPE_2G_8814AU 0xBD -#define EEPROM_LNA_TYPE_5G_8814AU 0xBF - -// RTL8814AS -#define EEPROM_MAC_ADDR_8814AS 0x11B - - -//=========================================================== -// EEPROM/Efuse PG Offset for 8812/8821/8814/8821B -//=========================================================== -//JAGUAR -#define EEPROM_TX_PWR_INX_JAGUAR 0x10 -#define EEPROM_ChannelPlan_JAGUAR 0xB8 -#define EEPROM_XTAL_JAGAUR 0xB9 -#define EEPROM_THERMAL_METER_JAGUAR 0xBA -#define EEPROM_IQK_LCK_JAGUAR 0xBB - -#define EEPROM_PA_TYPE_JAGUAR 0xBC -#define EEPROM_LNA_TYPE_AB_2G_JAGUAR 0xBD -#define EEPROM_LNA_TYPE_CD_2G_JAGUAR 0xBE -#define EEPROM_LNA_TYPE_AB_5G_JAGUAR 0xBF -#define EEPROM_LNA_TYPE_CD_5G_JAGUAR 0xC0 -#define EEPROM_RF_BOARD_OPTION_JAGUAR 0xC1 -#define EEPROM_TX_BBSWING_2G_JAGUAR 0xC6 -#define EEPROM_TX_BBSWING_5G_JAGUAR 0xC7 -#define EEPROM_RFE_OPTION_JAGUAR 0xCA - -//========================================================== -// EEPROM/Efuse PG Offset for 8703BE/8703BU/8703BS -//========================================================== - -#define EEPROM_ChannelPlan_8703B 0xB8 -#define EEPROM_XTAL_8703B 0xB9 -#define EEPROM_THERMAL_METER_8703B 0xBA - -#define EEPROM_RF_BOARD_OPTION_8703B 0xC1 -#define EEPROM_RF_BT_SETTING_8703B 0xC3 - -//RTL 8703BE -#define EEPROM_MAC_ADDR_8703BE 0xD0 -#define EEPROM_VID_8703BE 0xD6 -#define EEPROM_DID_8703BE 0xD8 -#define EEPROM_SVID_8703BE 0xDA -#define EEPROM_SMID_8703BE 0xDC -#define EEPROM_CustomID_8703B 0xC5 -#define EEPROM_RFE_Type_8703BE 0xCA - -//RTL8723BS -#define EEPROM_MAC_ADDR_8703BS 0x11A - -//RTL8723BU -#define EEPROM_MAC_ADDR_8703BU 0x107 -#define EEPROM_VID_8703BU 0xD0 -#define EEPROM_PID_8703BU 0xD2 -#define EEPROM_PA_TYPE_8703BU 0xBC -#define EEPROM_LNA_TYPE_2G_8703BU 0xBD -#define EEPROM_LNA_TYPE_5G_8703BU 0xBF - -//========================================================== -// EEPROM/Efuse PG Offset for 8188FE/8188FU/8188FS -//========================================================== - -#define EEPROM_ChannelPlan_8188F 0xB8 -#define EEPROM_XTAL_8188F 0xB9 -#define EEPROM_THERMAL_METER_8188F 0xBA - -#define EEPROM_RF_BOARD_OPTION_8188F 0xC1 -#define EEPROM_RF_BT_SETTING_8188F 0xC3 - -//RTL 8188FE -#define EEPROM_MAC_ADDR_8188FE 0xD0 -#define EEPROM_VID_8188FE 0xD6 -#define EEPROM_DID_8188FE 0xD8 -#define EEPROM_SVID_8188FE 0xDA -#define EEPROM_SMID_8188FE 0xDC -#define EEPROM_CustomID_8188F 0xC5 -#define EEPROM_RFE_Type_8188FE 0xCA - -//RTL8188FS -#define EEPROM_MAC_ADDR_8188FS 0x11A - -//RTL8188FU -#define EEPROM_MAC_ADDR_8188FU 0xD7 -#define EEPROM_VID_8188FU 0xD0 -#define EEPROM_PID_8188FU 0xD2 -#define EEPROM_PA_TYPE_8188FU 0xBC -#define EEPROM_LNA_TYPE_2G_8188FU 0xBD -#define EEPROM_LNA_TYPE_5G_8188FU 0xBF -#define EEPROM_RF_ANTENNA_OPT_8188FU 0xC9 - -//==================================================== -// EEPROM/Efuse PG Offset for 8723DE/8723DU/8723DS -//==================================================== -// 0x10 ~ 0x63 = TX power area. -#define EEPROM_TX_PWR_INX_8723D 0x10 -#define EEPROM_Default_ThermalMeter_8723D 0x1A - -#define EEPROM_ChannelPlan_8723D 0xB8 -#define EEPROM_XTAL_8723D 0xB9 -#define EEPROM_THERMAL_METER_8723D 0xBA -#define EEPROM_IQK_LCK_8723D 0xBB -#define EEPROM_2G_5G_PA_TYPE_8723D 0xBC -#define EEPROM_2G_LNA_TYPE_GAIN_SEL_8723D 0xBD -#define EEPROM_5G_LNA_TYPE_GAIN_SEL_8723D 0xBF - -#define EEPROM_RF_BOARD_OPTION_8723D 0xC1 -#define EEPROM_RF_FEATURE_OPTION_8723D 0xC2 -#define EEPROM_RF_BT_SETTING_8723D 0xC3 -#define EEPROM_VERSION_8723D 0xC4 -#define EEPROM_CustomID_8723D 0xC5 -#define EEPROM_TX_BBSWING_2G_8723D 0xC6 -#define EEPROM_TX_BBSWING_5G_8723D 0xC7 -#define EEPROM_TX_PWR_CALIBRATE_RATE_8723D 0xC8 -#define EEPROM_RF_ANTENNA_OPT_8723D 0xC9 -#define EEPROM_RFE_OPTION_8723D 0xCA - -// RTL8723DE -#define EEPROM_MAC_ADDR_8723DE 0xD0 -#define EEPROM_VID_8723DE 0xD6 -#define EEPROM_DID_8723DE 0xD8 -#define EEPROM_SVID_8723DE 0xDA -#define EEPROM_SMID_8723DE 0xDC - -//RTL8723DU -#define EEPROM_MAC_ADDR_8723DU 0xD7 -#define EEPROM_VID_8723DU 0xD0 -#define EEPROM_PID_8723DU 0xD2 -#define EEPROM_PA_TYPE_8723DU 0xBC -#define EEPROM_LNA_TYPE_2G_8723DU 0xBD -#define EEPROM_LNA_TYPE_5G_8723DU 0xBF - -// RTL8723DS -#define EEPROM_MAC_ADDR_8723DS 0x11A - - -//==================================================== -// EEPROM/Efuse Value Type -//==================================================== -#define EETYPE_TX_PWR 0x0 -//==================================================== -// EEPROM/Efuse Default Value -//==================================================== -#define EEPROM_CID_DEFAULT 0x0 -#define EEPROM_CID_DEFAULT_EXT 0xFF // Reserved for Realtek -#define EEPROM_CID_TOSHIBA 0x4 -#define EEPROM_CID_CCX 0x10 -#define EEPROM_CID_QMI 0x0D -#define EEPROM_CID_WHQL 0xFE - -#define EEPROM_CHANNEL_PLAN_FCC 0x0 -#define EEPROM_CHANNEL_PLAN_IC 0x1 -#define EEPROM_CHANNEL_PLAN_ETSI 0x2 -#define EEPROM_CHANNEL_PLAN_SPAIN 0x3 -#define EEPROM_CHANNEL_PLAN_FRANCE 0x4 -#define EEPROM_CHANNEL_PLAN_MKK 0x5 -#define EEPROM_CHANNEL_PLAN_MKK1 0x6 -#define EEPROM_CHANNEL_PLAN_ISRAEL 0x7 -#define EEPROM_CHANNEL_PLAN_TELEC 0x8 -#define EEPROM_CHANNEL_PLAN_GLOBAL_DOMAIN 0x9 -#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_13 0xA -#define EEPROM_CHANNEL_PLAN_NCC_TAIWAN 0xB -#define EEPROM_CHANNEL_PLAN_CHIAN 0XC -#define EEPROM_CHANNEL_PLAN_SINGAPORE_INDIA_MEXICO 0XD -#define EEPROM_CHANNEL_PLAN_KOREA 0xE -#define EEPROM_CHANNEL_PLAN_TURKEY 0xF -#define EEPROM_CHANNEL_PLAN_JAPAN 0x10 -#define EEPROM_CHANNEL_PLAN_FCC_NO_DFS 0x11 -#define EEPROM_CHANNEL_PLAN_JAPAN_NO_DFS 0x12 -#define EEPROM_CHANNEL_PLAN_WORLD_WIDE_5G 0x13 -#define EEPROM_CHANNEL_PLAN_TAIWAN_NO_DFS 0x14 - -#define EEPROM_USB_OPTIONAL1 0xE -#define EEPROM_CHANNEL_PLAN_BY_HW_MASK 0x80 - -#define RTL_EEPROM_ID 0x8129 -#define EEPROM_Default_TSSI 0x0 -#define EEPROM_Default_BoardType 0x02 -#define EEPROM_Default_ThermalMeter 0x12 -#define EEPROM_Default_ThermalMeter_88E 0x18 -#define EEPROM_Default_ThermalMeter_Jaguar 0x18 -#define EEPROM_Default_ThermalMeter_8192E 0x1A - - - - -#define EEPROM_Default_CrystalCap 0x0 -#define EEPROM_Default_CrystalCap_8723A 0x20 -#define EEPROM_Default_CrystalFreq 0x0 -#define EEPROM_Default_TxPowerLevel_92C 0x22 -#define EEPROM_Default_TxPowerLevel_2G 0x2C -#define EEPROM_Default_TxPowerLevel_5G 0x22 -#define EEPROM_Default_TxPowerLevel 0x22 -#define EEPROM_Default_HT40_2SDiff 0x0 -#define EEPROM_Default_HT20_Diff 2 -#define EEPROM_Default_LegacyHTTxPowerDiff 0x3 -#define EEPROM_Default_LegacyHTTxPowerDiff_92C 0x3 -#define EEPROM_Default_LegacyHTTxPowerDiff_92D 0x4 -#define EEPROM_Default_HT40_PwrMaxOffset 0 -#define EEPROM_Default_HT20_PwrMaxOffset 0 - -#define EEPROM_Default_PID 0x1234 -#define EEPROM_Default_VID 0x5678 -#define EEPROM_Default_CustomerID 0xAB -#define EEPROM_Default_CustomerID_8188E 0x00 -#define EEPROM_Default_SubCustomerID 0xCD -#define EEPROM_Default_Version 0 - -#define EEPROM_Default_externalPA_C9 0x00 -#define EEPROM_Default_externalPA_CC 0xFF -#define EEPROM_Default_internalPA_SP3T_C9 0xAA -#define EEPROM_Default_internalPA_SP3T_CC 0xAF -#define EEPROM_Default_internalPA_SPDT_C9 0xAA - -#define EEPROM_Default_internalPA_SPDT_CC 0xFA - -#define EEPROM_Default_PAType 0 -#define EEPROM_Default_LNAType 0 - -//New EFUSE deafult value -#define EEPROM_DEFAULT_24G_INDEX 0x2D -#define EEPROM_DEFAULT_24G_HT20_DIFF 0X02 -#define EEPROM_DEFAULT_24G_OFDM_DIFF 0X04 - -#define EEPROM_DEFAULT_5G_INDEX 0X2A -#define EEPROM_DEFAULT_5G_HT20_DIFF 0X00 -#define EEPROM_DEFAULT_5G_OFDM_DIFF 0X04 - -#define EEPROM_DEFAULT_DIFF 0XFE -#define EEPROM_DEFAULT_CHANNEL_PLAN 0x7F -#define EEPROM_DEFAULT_BOARD_OPTION 0x00 -#define EEPROM_DEFAULT_RFE_OPTION 0x04 -#define EEPROM_DEFAULT_RFE_OPTION_8192E 0x03 -#define EEPROM_DEFAULT_FEATURE_OPTION 0x00 -#define EEPROM_DEFAULT_BT_OPTION 0x10 - -#define EEPROM_DEFAULT_TX_CALIBRATE_RATE 0x00 - -// -// For VHT series TX power by rate table. -// VHT TX power by rate off setArray = -// Band:-2G&5G = 0 / 1 -// RF: at most 4*4 = ABCD=0/1/2/3 -// CCK=0 OFDM=1/2 HT-MCS 0-15=3/4/56 VHT=7/8/9/10/11 -// -#define TX_PWR_BY_RATE_NUM_BAND 2 -#define TX_PWR_BY_RATE_NUM_RF 4 -#define TX_PWR_BY_RATE_NUM_RATE 84 - -#define TXPWR_LMT_MAX_RF 4 - -//---------------------------------------------------------------------------- -// EEPROM/EFUSE data structure definition. -//---------------------------------------------------------------------------- -#define MAX_RF_PATH_NUM 2 -#define MAX_CHNL_GROUP 3+9 -typedef struct _TxPowerInfo{ - u1Byte CCKIndex[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - u1Byte HT40_1SIndex[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - u1Byte HT40_2SIndexDiff[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - s1Byte HT20IndexDiff[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - u1Byte OFDMIndexDiff[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - u1Byte HT40MaxOffset[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - u1Byte HT20MaxOffset[MAX_RF_PATH_NUM][MAX_CHNL_GROUP]; - u1Byte TSSI_A[3]; - u1Byte TSSI_B[3]; - u1Byte TSSI_A_5G[3]; //5GL/5GM/5GH - u1Byte TSSI_B_5G[3]; -}TxPowerInfo, *PTxPowerInfo; - - -//For 88E new structure - -/* -2.4G: -{ -{1,2}, -{3,4,5}, -{6,7,8}, -{9,10,11}, -{12,13}, -{14} -} - -5G: -{ -{36,38,40}, -{44,46,48}, -{52,54,56}, -{60,62,64}, -{100,102,104}, -{108,110,112}, -{116,118,120}, -{124,126,128}, -{132,134,136}, -{140,142,144}, -{149,151,153}, -{157,159,161}, -{173,175,177}, -} -*/ -#define MAX_RF_PATH 4 -#define MAX_CHNL_GROUP_24G 6 -#define MAX_CHNL_GROUP_5G 14 - -//It must always set to 4, otherwise read efuse table secquence will be wrong. -#define MAX_TX_COUNT 4 - -typedef struct _TxPowerInfo24G{ - u1Byte IndexCCK_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G]; - u1Byte IndexBW40_Base[MAX_RF_PATH][MAX_CHNL_GROUP_24G-1]; - //If only one tx, only BW20 and OFDM are used. - s1Byte CCK_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte OFDM_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW20_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW40_Diff[MAX_RF_PATH][MAX_TX_COUNT]; -}TxPowerInfo24G, *PTxPowerInfo24G; - -typedef struct _TxPowerInfo5G{ - u1Byte IndexBW40_Base[MAX_RF_PATH][MAX_CHNL_GROUP_5G]; - //If only one tx, only BW20, OFDM, BW80 and BW160 are used. - s1Byte OFDM_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW20_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW40_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW80_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW160_Diff[MAX_RF_PATH][MAX_TX_COUNT]; -}TxPowerInfo5G, *PTxPowerInfo5G; - - -typedef enum _BT_TOTAL_ANT_NUM{ - ANT_TOTAL_X2 = 0, - ANT_TOTAL_X1 = 1 -} BT_TOTAL_ANT_NUM, *PBT_TOTAL_ANT_NUM; - -typedef enum _BT_BOARD_TYPE{ - BT_2WIRE = 0, - BT_ISSC_3WIRE = 1, - BT_ACCEL = 2, - BT_CSR_BC4 = 3, - BT_CSR_BC8 = 4, - BT_RTL8756 = 5, - BT_RTL8723A = 6, - BT_RTL8821 = 7, - BT_RTL8723B = 8, - BT_RTL8192E = 9, - BT_RTL8814A = 10, - BT_RTL8812A = 11, - BT_RTL8821B = 12, - BT_RTL8822B = 13, - BT_RTL8703B = 14, - BT_RTL8188F = 15, - BT_RTL8723D = 16 -} BT_BOARD_TYPE, *PBT_BOARD_TYPE; - - -#endif diff --git a/network/wlan/WDI/HAL/HalPhy.h b/network/wlan/WDI/HAL/HalPhy.h deleted file mode 100644 index 387fe95a..00000000 --- a/network/wlan/WDI/HAL/HalPhy.h +++ /dev/null @@ -1,349 +0,0 @@ -#ifndef __INC_HALPHY_H -#define __INC_HALPHY_H -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - HalPhy.h - -Abstract: - Prototype of PHY_XXX() and related data structure. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2011-08-10 Lanhsin Create. ---*/ - -/*--------------------------Define Parameters-------------------------------*/ - -#if (DISABLE_BB_RF == 1) -#define HAL_FW_ENABLE 0 -#define HAL_MAC_ENABLE 0 -#define HAL_BB_ENABLE 0 -#define HAL_RF_ENABLE 0 -#else // FPGA_PHY and ASIC -#define HAL_FW_ENABLE 1 -#define HAL_MAC_ENABLE 1 -#define HAL_BB_ENABLE 1 -#define HAL_RF_ENABLE 1 -#endif - - -#define delay_ms(_t) PlatformStallExecution(1000*(_t)) -#define delay_us(_t) PlatformStallExecution(_t) - -#define RF6052_MAX_TX_PWR 0x3F -#define RF6052_MAX_REG_88E 0xFF -#define RF6052_MAX_REG_92C 0x7F - -#define RF6052_MAX_REG \ - (RF6052_MAX_REG_88E > RF6052_MAX_REG_92C) ? RF6052_MAX_REG_88E: RF6052_MAX_REG_92C - -#define GET_RF6052_REAL_MAX_REG(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter) ? RF6052_MAX_REG_88E : RF6052_MAX_REG_92C - - -#define RF6052_MAX_PATH 4 - -#define HAL_PRIME_CHNL_OFFSET_DONT_CARE 0 -#define HAL_PRIME_CHNL_OFFSET_LOWER 1 -#define HAL_PRIME_CHNL_OFFSET_UPPER 2 - - -#define PHY_SUPPORT_92C 1 -#define PHY_SUPPORT_92D 1 -#define PHY_SUPPORT_88E 1 -#define PHY_SUPPORT_8812 1 -#define PHY_SUPPORT_92E 1 -#define PHY_SUPPORT_8723B 1 -#define PHY_SUPPORT_8814A 1 -#define PHY_SUPPORT_8822B 1 - - -#define SHORT_SLOT_TIME 9 -#define NON_SHORT_SLOT_TIME 20 - -// -// Antenna detection method, i.e., using single tone detection or RSSI reported from each antenna detected. -// Added by Roger, 2013.05.22. -// -#define IS_ANT_DETECT_SUPPORT_SINGLE_TONE(__Adapter) ((GET_HAL_DATA(__Adapter)->AntDetection) & BIT0) -#define IS_ANT_DETECT_SUPPORT_RSSI(__Adapter) ((GET_HAL_DATA(__Adapter)->AntDetection) & BIT1) -#define IS_ANT_DETECT_SUPPORT_PSD(__Adapter) ((GET_HAL_DATA(__Adapter)->AntDetection) & BIT2) - -/*--------------------------Define Parameters-------------------------------*/ -typedef enum _RF_TYPE{ - RF_TYPE_MIN = 0, // 0 - RF_8225=1, // 1 11b/g RF for verification only - RF_8256=2, // 2 11b/g/n - RF_8258=3, // 3 11a/b/g/n RF - RF_6052=4, // 4 11b/g/n RF - RF_PSEUDO_11N=5, // 5, It is a temporality RF. - RF_TYPE_MAX -}RF_TYPE_E,*PRF_TYPE_E; - - -#define RF_PATH_MAX_92C_88E 2 -#define RF_PATH_MAX_90_8812 4 //Max RF number 90 support -#define RF_PATH_MAX_90_8814A 4 - - -typedef enum _ANTENNA_PATH{ - ANTENNA_NONE = 0, - ANTENNA_D = 1, - ANTENNA_C = 2, - ANTENNA_CD = 3, - ANTENNA_B = 4, - ANTENNA_BD = 5, - ANTENNA_BC = 6, - ANTENNA_BCD = 7, - ANTENNA_A = 8, - ANTENNA_AD = 9, - ANTENNA_AC = 10, - ANTENNA_ACD = 11, - ANTENNA_AB = 12, - ANTENNA_ABD = 13, - ANTENNA_ABC = 14, - ANTENNA_ABCD = 15 -} ANTENNA_PATH; - - typedef enum _RF_CONTENT{ - radioa_txt = 0x1000, - radiob_txt = 0x1001, - radioc_txt = 0x1002, - radiod_txt = 0x1003 -} RF_CONTENT; - -typedef enum _BaseBand_Config_Type{ - BaseBand_Config_PHY_REG = 0, //Radio Path A - BaseBand_Config_AGC_TAB = 1, //Radio Path B - BaseBand_Config_AGC_TAB_2G = 2, - BaseBand_Config_AGC_TAB_5G = 3, - BaseBand_Config_PHY_REG_PG -}BaseBand_Config_Type, *PBaseBand_Config_Type; - - - -typedef enum _HW_BLOCK{ - HW_BLOCK_MAC = 0, - HW_BLOCK_PHY0 = 1, - HW_BLOCK_PHY1 = 2, - HW_BLOCK_RF = 3, - HW_BLOCK_MAXIMUM = 4, // Never use this -}HW_BLOCK_E, *PHW_BLOCK_E; - -typedef enum _SwChnlCmdID{ - CmdID_End, - CmdID_SetTxPowerLevel, - CmdID_WritePortUlong, - CmdID_WritePortUshort, - CmdID_WritePortUchar, - CmdID_RF_WriteReg, -}SwChnlCmdID; - - - -typedef enum _RATR_TABLE_MODE{ - RATR_INX_WIRELESS_NGB = 0, // BGN 40 Mhz 2SS 1SS - RATR_INX_WIRELESS_NG = 1, // GN or N - RATR_INX_WIRELESS_NB = 2, // BGN 20 Mhz 2SS 1SS or BN - RATR_INX_WIRELESS_N = 3, - RATR_INX_WIRELESS_GB = 4, - RATR_INX_WIRELESS_G = 5, - RATR_INX_WIRELESS_B = 6, - RATR_INX_WIRELESS_MC = 7, - RATR_INX_WIRELESS_AC_5N = 8, - RATR_INX_WIRELESS_AC_24N = 9, -}RATR_TABLE_MODE, *PRATR_TABLE_MODE; - - -/*------------------------------Define structure----------------------------*/ -typedef struct _SwChnlCmd{ - SwChnlCmdID CmdID; - u4Byte Para1; - u4Byte Para2; - u4Byte msDelay; -}SwChnlCmd; - - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _R_ANTENNA_SELECT_OFDM{ - u4Byte r_tx_antenna:4; - u4Byte r_ant_l:4; - u4Byte r_ant_non_ht:4; - u4Byte r_ant_ht1:4; - u4Byte r_ant_ht2:4; - u4Byte r_ant_ht_s1:4; - u4Byte r_ant_non_ht_s1:4; - u4Byte OFDM_TXSC:2; - u4Byte Reserved:2; -}R_ANTENNA_SELECT_OFDM; - -typedef struct _R_ANTENNA_SELECT_CCK{ - u1Byte r_cckrx_enable_2:2; - u1Byte r_cckrx_enable:2; - u1Byte r_ccktx_enable:4; -}R_ANTENNA_SELECT_CCK; - - -#ifdef REMOVE_PACK -#pragma pack() -#endif - - -typedef struct RF_Shadow_Compare_Map { - // Shadow register value - UINT32 Value; - // Compare or not flag - UINT8 Compare; - // Record If it had ever modified unpredicted - UINT8 ErrorOrNot; - // Recorver Flag - UINT8 Recorver; - // - UINT8 Driver_Write; -}RF_SHADOW_T; - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -/*------------------------Export global variable----------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ - - -u4Byte -PHY_CalculateBitShift( - u4Byte BitMask - ); - -VOID -PHY_SetMacReg( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -PHY_QueryMacReg( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -u4Byte -PHY_QueryBBReg( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -PHY_SetBBReg( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -VOID -PHY_SetBBReg1Byte( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - - -u4Byte -PHY_QueryRFReg( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -PHY_SetRFReg( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -// -// RF Shadow operation relative API -// -u4Byte -PHY_RFShadowRead( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte Offset); - -VOID -PHY_RFShadowWrite( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte Offset, - IN u4Byte Data); - -BOOLEAN -PHY_RFShadowCompare( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte Offset); - -VOID -PHY_RFShadowRecorver( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte Offset); - -VOID -PHY_RFShadowCompareAll( - IN PADAPTER Adapter); - -VOID -PHY_RFShadowRecorverAll( - IN PADAPTER Adapter); - -VOID -PHY_RFShadowCompareFlagSet( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte Offset, - IN u1Byte Type); - -VOID -PHY_RFShadowRecorverFlagSet( - IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte Offset, - IN u1Byte Type); - -VOID -PHY_RFShadowCompareFlagSetAll( - IN PADAPTER Adapter); - -VOID -PHY_RFShadowRecorverFlagSetAll( - IN PADAPTER Adapter); - -VOID -PHY_RFShadowRefresh( - IN PADAPTER Adapter); - - -#endif diff --git a/network/wlan/WDI/HAL/HalPowerSave.h b/network/wlan/WDI/HAL/HalPowerSave.h deleted file mode 100644 index fa5934c4..00000000 --- a/network/wlan/WDI/HAL/HalPowerSave.h +++ /dev/null @@ -1,138 +0,0 @@ -#ifndef __INC_HALPOWERSAVE_H -#define __INC_HALPOWERSAVE_H - -//=========================================================== -// Defines -//=========================================================== - -//=========================================================== -// Enums -//=========================================================== - -//=========================================================== -// Structures -// Driver context for LPS 32K Close IO Power -typedef struct _LPS_DEEP_SLEEP_CONTEXT -{ - BOOLEAN bEnable; - pu1Byte pStaticConfigureFile; - pu1Byte pDynamicConfigureFile; - u4Byte ConfigurationFileOffset; - u2Byte ConfigureFileLengthForPTK; - u2Byte ConfigureFileLengthForGTK; - BOOLEAN bChangeTxBoundaryInProgress; - BOOLEAN bH2CSetPartialOffParam; - BOOLEAN bEnterLPSFail; -}LPS_DEEP_SLEEP_CONTEXT,*PLPS_DEEP_SLEEP_CONTEXT; -//=========================================================== - -//=========================================================== -// Function Prototype -//=========================================================== - -VOID -SetFwClockOn( - IN PADAPTER Adapter, - IN u1Byte RpwmVal, - IN BOOLEAN bNeedTurnoffClk - ); - -VOID -SetFwPSAllOn( - IN PADAPTER Adapter - ); - -VOID -SetFwPSRfOn( - IN PADAPTER Adapter - ); - -VOID -SetFwPSRFOffLowPower( - IN PADAPTER Adapter - ); - -VOID -FwClockOffTimerCallback( - IN PRT_TIMER pTimer - ); - - -VOID -FwClockOffWorkItemCallback( - IN PVOID pContext - ); - - -u4Byte -FwLeisurePSLeave( - IN PADAPTER Adapter, - IN PH2C_CMD_8192C pPwrModeCmd - ); - -u4Byte -FwLeisurePSEnter( - IN PADAPTER Adapter, - IN PH2C_CMD_8192C pPwrModeCmd - ); - - -BOOLEAN -FwLPS_IsInPSAndSupportLowPower( - IN PADAPTER Adapter - ); - -VOID -ForceInitFwClockOn( - IN PADAPTER Adapter - ); - -BOOLEAN -ForceInitFwClockOnWithACK( - IN PADAPTER Adapter - ); - -u4Byte -FwInactivePSEnterHandler( - IN PADAPTER Adapter, - IN PH2C_CMD_8192C pH2cCmd - ); - -u4Byte -FwInactivePSLeaveHandler( - IN PADAPTER Adapter, - IN PH2C_CMD_8192C pH2cCmd - ); - -VOID -FwInactivePSEnter( - IN PADAPTER Adapter, - IN u1Byte Mode - ); - -VOID -FwInactivePSLeave( - IN PADAPTER Adapter - ); - -VOID -FwLPSDeepSleepInit( - IN PADAPTER Adapter -); - -VOID -FwLPSDeepSleepDeInit( - IN PADAPTER Adapter -); - -BOOLEAN -FwLPSCheckChangeTxBoundary( - IN PADAPTER pAdapter -); - -BOOLEAN -FwLPSCheckEnterLPSFail( - IN PADAPTER pAdapter -); - -#endif // end of __INC_HALPOWERSAVE_H diff --git a/network/wlan/WDI/HAL/HalPwrSeqCmd.h b/network/wlan/WDI/HAL/HalPwrSeqCmd.h deleted file mode 100644 index 0fb66450..00000000 --- a/network/wlan/WDI/HAL/HalPwrSeqCmd.h +++ /dev/null @@ -1,118 +0,0 @@ -#ifndef REALTEK_POWER_SEQUENCE_CMD -#define REALTEK_POWER_SEQUENCE_CMD - -#include "Precomp.h" - -/*---------------------------------------------*/ -//3 The value of cmd: 4 bits -/*---------------------------------------------*/ -#define PWR_CMD_READ 0x00 - // offset: the read register offset - // msk: the mask of the read value - // value: N/A, left by 0 - // note: dirver shall implement this function by read & msk -#define PWR_CMD_WRITE 0x01 - // offset: the read register offset - // msk: the mask of the write bits - // value: write value - // note: driver shall implement this cmd by read & msk after write -#define PWR_CMD_POLLING 0x02 - // offset: the read register offset - // msk: the mask of the polled value - // value: the value to be polled, masked by the msd field. - // note: driver shall implement this cmd by - // do{ - // if( (Read(offset) & msk) == (value & msk) ) - // break; - // } while(not timeout); -#define PWR_CMD_DELAY 0x03 - // offset: the value to delay - // msk: N/A - // value: the unit of delay, 0: us, 1: ms - -#define PWR_CMD_END 0x04 - // offset: N/A - // msk: N/A - // value: N/A - -/*---------------------------------------------*/ -//3 The value of base: 4 bits -/*---------------------------------------------*/ - // define the base address of each block -#define PWR_BASEADDR_MAC 0x00 -#define PWR_BASEADDR_USB 0x01 -#define PWR_BASEADDR_PCIE 0x02 -#define PWR_BASEADDR_SDIO 0x03 - -/*---------------------------------------------*/ -//3 The value of interface_msk: 4 bits -/*---------------------------------------------*/ -#define PWR_INTF_SDIO_MSK BIT0 -#define PWR_INTF_USB_MSK BIT1 -#define PWR_INTF_PCI_MSK BIT2 -#define PWR_INTF_ALL_MSK (BIT0|BIT1|BIT2|BIT3) - -/*---------------------------------------------*/ -//3 The value of fab_msk: 4 bits -/*---------------------------------------------*/ -#define PWR_FAB_TSMC_MSK BIT0 -#define PWR_FAB_UMC_MSK BIT1 -#define PWR_FAB_ALL_MSK (BIT0|BIT1|BIT2|BIT3) - -/*---------------------------------------------*/ -//3The value of cut_msk: 8 bits -/*---------------------------------------------*/ -#define PWR_CUT_TESTCHIP_MSK BIT0 -#define PWR_CUT_A_MSK BIT1 -#define PWR_CUT_B_MSK BIT2 -#define PWR_CUT_C_MSK BIT3 -#define PWR_CUT_D_MSK BIT4 -#define PWR_CUT_E_MSK BIT5 -#define PWR_CUT_F_MSK BIT6 -#define PWR_CUT_G_MSK BIT7 -#define PWR_CUT_ALL_MSK 0xFF - - -typedef enum _PWRSEQ_CMD_DELAY_UNIT_ -{ - PWRSEQ_DELAY_US, - PWRSEQ_DELAY_MS, -} PWRSEQ_DELAY_UNIT; - -typedef struct _WL_PWR_CFG_ -{ - u2Byte offset; - u1Byte cut_msk; - u1Byte fab_msk:4; - u1Byte interface_msk:4; - u1Byte base:4; - u1Byte cmd:4; - u1Byte msk; - u1Byte value; - -} WLAN_PWR_CFG, *PWLAN_PWR_CFG; - - -#define GET_PWR_CFG_OFFSET(__PWR_CMD) __PWR_CMD.offset -#define GET_PWR_CFG_CUT_MASK(__PWR_CMD) __PWR_CMD.cut_msk -#define GET_PWR_CFG_FAB_MASK(__PWR_CMD) __PWR_CMD.fab_msk -#define GET_PWR_CFG_INTF_MASK(__PWR_CMD) __PWR_CMD.interface_msk -#define GET_PWR_CFG_BASE(__PWR_CMD) __PWR_CMD.base -#define GET_PWR_CFG_CMD(__PWR_CMD) __PWR_CMD.cmd -#define GET_PWR_CFG_MASK(__PWR_CMD) __PWR_CMD.msk -#define GET_PWR_CFG_VALUE(__PWR_CMD) __PWR_CMD.value - - -//================================================================================ -// Prototype of protected function. -//================================================================================ -BOOLEAN -HalPwrSeqCmdParsing( - IN PADAPTER pAdapter, - IN u1Byte CutVersion, - IN u1Byte FabVersion, - IN u1Byte InterfaceType, - IN WLAN_PWR_CFG PwrCfgCmd[] - ); - -#endif diff --git a/network/wlan/WDI/HAL/HalSIC.h b/network/wlan/WDI/HAL/HalSIC.h deleted file mode 100644 index ab46b9b3..00000000 --- a/network/wlan/WDI/HAL/HalSIC.h +++ /dev/null @@ -1,122 +0,0 @@ -#ifndef __INC_HALSIC_H -#define __INC_HALSIC_H - -//================================================================== -// Note: If SIC_ENABLE under PCIE, because of the slow operation -// you should -// 1) "#define USE_WORKITEM 1" in PrecompInc.h. -// 2) "#define RTL8723_FPGA_VERIFICATION 1" in Precomp.h.WlanE.Windows -// 3) "#define LOAD_FIRMWARE_FROM_HEADER 0" in Precomp.h.WlanE.Windows if needed. -// -#if (RTL8188E_FPGA_TRUE_PHY_VERIFICATION == 1) -#define SIC_ENABLE 1 -#define SIC_HW_SUPPORT 1 -#else -#define SIC_ENABLE 0 -#define SIC_HW_SUPPORT 0 -#endif -//================================================================== - - -#define SIC_MAX_POLL_CNT 5 - -#if(SIC_HW_SUPPORT == 1) -#define SIC_CMD_READY 0 -#define SIC_CMD_PREWRITE 0x1 - -#define SIC_CMD_WRITE_88E 0x40 -#define SIC_CMD_PREREAD_88E 0x2 -#define SIC_CMD_READ_88E 0x80 -#define SIC_CMD_INIT_88E 0xf0 -#define SIC_INIT_VAL_88E 0xff - -#define SIC_INIT_REG_88E 0x1b7 -#define SIC_CMD_REG_88E 0x1EB // 1byte -#define SIC_ADDR_REG_88E 0x1E8 // 1b4~1b5, 2 bytes -#define SIC_DATA_REG_88E 0x1EC // 1b0~1b3 - -#define SIC_CMD_WRITE_92C 0x11 -#define SIC_CMD_PREREAD_92C 0x2 -#define SIC_CMD_READ_92C 0x12 -#define SIC_CMD_INIT_92C 0x1f -#define SIC_INIT_VAL_92C 0xff - -#define SIC_INIT_REG_92C 0x1b7 -#define SIC_CMD_REG_92C 0x1b6 // 1byte -#define SIC_ADDR_REG_92C 0x1b4 // 1b4~1b5, 2 bytes -#define SIC_DATA_REG_92C 0x1b0 // 1b0~1b3 - - -#define GET_SIC_CMD_READ(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_CMD_READ_88E : SIC_CMD_READ_92C - -#define GET_SIC_CMD_WRITE(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_CMD_WRITE_88E : SIC_CMD_WRITE_92C - -#define GET_SIC_INIT_REG(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_INIT_REG_88E : SIC_INIT_REG_92C - -#define GET_SIC_INIT_VAL(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_INIT_VAL_88E : SIC_INIT_VAL_92C - -#define GET_SIC_CMD_INIT(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_CMD_INIT_88E : SIC_CMD_INIT_92C - - -#else -#define SIC_CMD_READY 0 -#define SIC_CMD_WRITE 1 -#define SIC_CMD_READ 2 - -#define SIC_CMD_REG_88E 0x1EB // 1byte -#define SIC_ADDR_REG_88E 0x1E8 // 1b9~1ba, 2 bytes -#define SIC_DATA_REG_88E 0x1EC // 1bc~1bf - -#define SIC_CMD_REG_92C 0x1b8 // 1byte -#define SIC_ADDR_REG_92C 0x1b9 // 1b9~1ba, 2 bytes -#define SIC_DATA_REG_92C 0x1bc // 1bc~1bf - -#define GET_SIC_CMD_READ(_Adapter) SIC_CMD_READ -#define GET_SIC_CMD_WRITE(_Adapter) SIC_CMD_WRITE - -#endif - - -#define GET_SIC_CMD_REG(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_CMD_REG_88E : SIC_CMD_REG_92C - -#define GET_SIC_CMD_PREREAD(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_CMD_PREREAD_88E : SIC_CMD_PREREAD_92C - -#define GET_SIC_ADDR_REG(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_ADDR_REG_88E : SIC_ADDR_REG_92C - -#define GET_SIC_DATA_REG(_Adapter) \ - IS_HARDWARE_TYPE_8188E(_Adapter)? SIC_DATA_REG_88E : SIC_DATA_REG_92C - - -VOID -SIC_SetBBReg( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -SIC_QueryBBReg( - IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -SIC_Init( - IN PADAPTER Adapter - ); - -BOOLEAN -SIC_LedOff( - IN PADAPTER Adapter - ); -#endif diff --git a/network/wlan/WDI/HAL/HalSdio.h b/network/wlan/WDI/HAL/HalSdio.h deleted file mode 100644 index ec4006cf..00000000 --- a/network/wlan/WDI/HAL/HalSdio.h +++ /dev/null @@ -1,1107 +0,0 @@ -#ifndef __INC_HALSDIO_H -#define __INC_HALSDIO_H -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - HalSdio.h - -Abstract: - Prototype of HalsdioXXX() and related data structure. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2010-12-12 Roger Create. - ---*/ - -#define SUPPORT_HW_RADIO_DETECT(_Adapter) TRUE - -#define DRIVER_EARLY_INT_TIME 0x10 -#define BCN_DMA_ATIME_INT_TIME 0x02 - - -#define MAX_NUM_OUT_PIPE 16 -#define MAX_NUM_SDIO_TX_QUEUE 3 - -// -// The number of OutPipe request must larger than or equal to the number of -// pending request for each pipe. 2009. 01. 12. -// -#define MAX_NUM_REQUEST_PER_OUT_PIPE 8 -#define MAX_NUM_REQUEST_PER_IN_PIPE 128 - -#define MAX_NUM_REQUEST_PER_TX_QUEUE 3 -#define MAX_NUM_REQUEST_PER_RX_QUEUE 1 - -#define HAL_SDIO_COMPLETED_OK BIT1 -#define HAL_SDIO_COMPLETED_ERROR BIT2 -#define HAL_SDIO_COMPLETED_CANCELED BIT3 - -#define SDIO_TRANSFERS_MASK (DF_TX_BIT | DF_RX_BIT | DF_IO_BIT) -#define SDIO_TX_TRANSFERS_MASK DF_TX_BIT -#define SDIO_RX_TRANSFERS_MASK DF_RX_BIT - -#define SDIO_TX_TRANSFER_SIZE 64 - -#define RT_DISABLE_SDIO_TX_TRANSFERS(__pAdapter) RT_DISABLE_FUNC(__pAdapter, SDIO_TX_TRANSFERS_MASK) -#define RT_ENABLE_SDIO_TX_TRANSFERS(__pAdapter) RT_ENABLE_FUNC(__pAdapter, SDIO_TX_TRANSFERS_MASK) -#define RT_DISABLE_SDIO_RX_TRANSFERS(__pAdapter) RT_DISABLE_FUNC(__pAdapter, SDIO_RX_TRANSFERS_MASK) -#define RT_ENABLE_SDIO_RX_TRANSFERS(__pAdapter) RT_ENABLE_FUNC(__pAdapter, SDIO_RX_TRANSFERS_MASK) -#define RT_DISABLE_SDIO_TRANSFERS(__pAdapter) RT_DISABLE_FUNC(__pAdapter, SDIO_TRANSFERS_MASK) -#define RT_ENABLE_SDIO_TRANSFERS(__pAdapter) RT_ENABLE_FUNC(__pAdapter, SDIO_TRANSFERS_MASK) - -#define RT_SDIO_CANNOT_IO(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - RT_IS_FUNC_DISABLED((__pAdapter), DF_IO_BIT)) - -#define RT_SDIO_CANNOT_TX(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - RT_IS_FUNC_DISABLED((__pAdapter), DF_TX_BIT)) - -#define RT_SDIO_CANNOT_RX(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - RT_IS_FUNC_DISABLED((__pAdapter), DF_RX_BIT)) - -#define RT_GetInterfaceSelection(_Adapter) ((u1Byte)GET_HAL_DATA(_Adapter)->InterfaceSel) - -#define IS_NEED_OFFSET_ON_AMPDU(_Adapter) FALSE -#define IS_CHK_AMSDU_BUF_CNT(_Adapter) FALSE -#define IS_RW_PTR(_Adapter) FALSE -#define IS_SET_RX_AGGR(_Adapter) FALSE -#define IS_RSTO_WMM_AFTER_SCAN(_Adapter) FALSE - -typedef struct _SDIO_OUT_RESOURCE -{ - s4Byte PipeCnt; // # of OUT pipes. - s4Byte QueueCnt; // # of Tx Queues - - // - // Memory block of SDIO_OUT_CONTEXT objects. - // - pu1Byte SendContextsBuffer; - u4Byte SendContextsBufferSz; - - // - // Queue to manage free SDIO_OUT_CONTEXT objects. - // - RT_LIST_ENTRY TxFreeContextList; // An link list of SDIO_OUT_CONTEXT. Note that, every out pipe shall get and return SDIO_OUT_CONTEXT from and to here. - u4Byte TxFreeContextCount; // Number of conext available to use. - s4Byte TxContextCount; // Total number of SDIO_OUT_CONTEXT allocated. -} SDIO_OUT_RESOURCE, *PSDIO_OUT_RESOURCE; - -typedef struct _SDIO_OUT_CONTEXT -{ - RT_LIST_ENTRY List; - - // - // TODO: Replace pTcb as HalReserved[0]. - // - pu1Byte Buffer; // Pointer to the buffer to Transfer data to SDIO Host. - u4Byte BufLen; // Length of Buffer. - PRT_TCB pTcb; // Pointer to corresponding - BOOLEAN bData0Byte; // TRUE if this context is used as 0-byte padding for 512N-byte buffer on USB2.0 or 64N-byte on USB1.1. - BOOLEAN bTxPending; // TRUE if this context is pending in USBD. - u1Byte PendingCount; // Used in CheckForHang check sending stuck or not. - u1Byte TxQueueIndex; // An index to the Tx Queue, i.e., 0: HIQ, 1: MIQ, 2:LOQ - u1Byte AggrNum; // SDIO Tx aggregation number. - - // - // RT_PLATFORM reserved. - // For example, - // - on Windows NDIS5/WDM: [0]: PADAPTER, [1]: NULL, [2]: NULL. - // - On Windows NDIS6/WDF: [0]: PADAPTER, [1]: NULL, [2]: WDFREQUEST. - // - PVOID PlatformReserved[4]; -} SDIO_OUT_CONTEXT, *PSDIO_OUT_CONTEXT; - - -typedef struct _SDIO_IN_RESOURCE -{ - s4Byte PipeCnt; // # of IN pipes. - s4Byte QueueCnt; // # of Rx Queues - - // - // Memory block of SDIO_IN_CONTEXT objects. - // - pu1Byte ContextsBuffer; - u4Byte ContextsBufferSz; - - // - // Queue to manage free USB_IN_CONTEXT objects. - // - RT_LIST_ENTRY FreeContextList; // An link list of USB_IN_CONTEXT. Note that, every out pipe shall get and return USB_IN_CONTEXT from and to here. - u4Byte FreeContextCount; // Current number of conext available to use. - s4Byte ContextCounAlloc; // Total number of USB_IN_CONTEXT allocated. -} SDIO_IN_RESOURCE, *PSDIO_IN_RESOURCE; - -typedef struct _SDIO_IN_CONTEXT -{ - RT_LIST_ENTRY List; - - pu1Byte Buffer; // Pointer to the buffer to IN from USBD. - u4Byte BufferLen; // Length of Buffer allowed USBD to use. - u4Byte BufLenUsed; // Length of Buffer used for the bulk IN transfer. - BOOLEAN bRxPending; // TRUE if this context is pending in USBD. - u1Byte RxPipeIndex; // An index to the IN pipe. - - // - // RT_PLATFORM reserved. - // For example, - // - on Windows NDIS5/WDM: [0]:PADAPTER, [1]: NULL, [2]: NULL. - // - On Windows NDIS6/WDF: - // - PVOID PlatformReserved[4]; - - // - // HAL reserved: Data: pRFD, CMD - // - PVOID HalReserved[1]; - -#if VISTA_USB_RX_REVISE - u4Byte RetStatus; -#endif -} SDIO_IN_CONTEXT, *PSDIO_IN_CONTEXT; - - -typedef struct _HAL_SDIO_INFO -{ - SDIO_OUT_RESOURCE OutResource; - SDIO_IN_RESOURCE InResource; -} HAL_SDIO_INFO, *PHAL_SDIO_INFO; - -#define HAL_BUS_INFO_TYPE HAL_SDIO_INFO - -#define GET_HAL_BUS_INFO(__pAdapter) ((HAL_BUS_INFO_TYPE*)((__pAdapter)->pHalBusInfo)) - -#define GET_USB_DEVICE_SPEED(_pAdapter) USB_DEVICE_SPEED_FULL - - -#define GET_OUT_RES(__pBusInfo) (&((__pBusInfo)->OutResource)) -#define GET_IN_RES(__pBusInfo) (&((__pBusInfo)->InResource)) -#define FREE_OUT_CONTEXT_CNT(__pAdapter) ( GET_OUT_RES(GET_HAL_BUS_INFO(__pAdapter))->TxFreeContextCount ) - -//================================================================================ - -typedef struct _HAL_DATA_SDIO -{ - // - // Read-only hardware information, it should not be changed after set. - // Make a copy and change its copy if need. - // - u2Byte HardwareType; - VERSION_8192C VersionID; - VERSION_CVID CVID_Version; // For Version of Structure ChipVersion: 0:v1(before 8703B), 1:v2(since 8703B) - - RT_MULTI_FUNC MultiFunc; // For multi-function consideration. - RT_POLARITY_CTL PolarityCtl; // For Wifi PDn Polarity control. - RT_REGULATOR_MODE RegulatorMode; // switching regulator or LDO - //u1Byte HwROFEnable; // Enable GPIO[9] as WL RF HW PDn source - - - // - // For SDIO Interface HAL related - // - BOOLEAN bMacPwrCtrlOn; //Auto FSM to Turn On, include clock, isolation, power control for MAC only - - RT_BUS_TYPE BusType; - RT_EEPROM_TYPE EEType; - BOOLEAN bMPMode; - u1Byte MWIEnable; - u1Byte AutoloadFailFlag; - BOOLEAN bNOPG; - - // TODO: Let it be platform independent. - PlatformMutex mxRFOperate; // RF access lock - PlatformMutex mxCCKControl; - PlatformMutex mxChnlBwControl; - - // add for 92D Phy mode/mac/Band mode - //MACPHY_MODE_8192D MacPhyMode92D; - //u1Byte BandType92D; //0: 2.4G, 1: 5G - BAND_TYPE CurrentBandType; //0:2.4G, 1:5G - BAND_TYPE LastBandType; //0:2.4G, 1:5G - BAND_TYPE BandSet; - BOOLEAN bIsVS; - - // - // Add For EEPROM Efuse switch and Efuse Shadow map Setting - // - BOOLEAN EepromOrEfuse; - u1Byte EfuseMap[2][HWSET_MAX_SIZE_512]; //92C:256bytes, 88E:512bytes, we use union set (512bytes) - u2Byte EfuseUsedBytes; - u1Byte EfuseUsedPercentage; - EFUSE_HAL EfuseHal; - - // - // For 92C USB endpoint setting - // - u1Byte OutEpQueueSel; - u1Byte OutEpNumber; - - // - //SDIO Tx FIFO related. - // - u1Byte SdioTxFIFOFreePage[SDIO_TX_FREE_PG_QUEUE]; - u2Byte SdioTxFIFOFreePage8814A[SDIO_TX_FREE_PG_QUEUE_8814A]; //3 20130422 KaiYuan modify for 8814; for other IC, it is u1Byte - u4Byte SdioTxRsvdPageSize; // for download beacon queue - - // - // Default Settings - // - u4Byte ChipID; - u4Byte ChipVer; - BOOLEAN bNicWirelessMode; - BOOLEAN bIs88eSeries; - BOOLEAN bIsNicExistBt; - BOOLEAN bEnableSingleAmpdu; - BOOLEAN bNeedExtIQK; - BOOLEAN bCheckHiddenSsid; - BOOLEAN bDisableRtsOnAmpdu; - BOOLEAN bSupClkOnExcepResn; - u2Byte MaxRxDmaBufferSize; - u2Byte MaxTxBufSize; - u2Byte TcbNumOfMemSize0; - u2Byte TcbNumOfMemSize1; - u2Byte TxDescNum; - u2Byte TxDescNumBeQ; - u2Byte TxDescNumMp; - u2Byte TxDescNumBeQMp; - u2Byte MaxRxBufSize; - u2Byte MaxSubframeCntMmSize0; - u2Byte MaxSubframeCntMmSize1; - u2Byte RfdNumMmSize0; - u2Byte RxDescNumMmSize0; - u2Byte RfdNumMmSize1; - u2Byte RxDescNumMmSize1; - BOOLEAN bNicSupportWapi; - BOOLEAN bRemoveZeroLenBuf; - BOOLEAN bLeavePsBeforeEnNic; - - // - // EEPROM setting. - // - u1Byte EEPROMVersion; - u2Byte EEPROMVID; - u2Byte EEPROMPID; - u2Byte EEPROMSVID; - u2Byte EEPROMSDID; - u1Byte EEPROMCustomerID; - u1Byte EEPROMSubCustomerID; - u1Byte EEPROMRegulatory; - u1Byte EEPROMThermalMeter; // ThermalMeter value. - u1Byte EEPROMBluetoothCoexist; - u1Byte EEPROMBluetoothType; - u1Byte EEPROMBluetoothAntNum; - u1Byte EEPROMBluetoothSingleAntPath; - u2Byte EEPROMChannelPlan; - // 2011/03/10 Vivi Add for 92C/D common binary. - u1Byte USBDummyOffset; - u1Byte USBALLDummyLength; - u1Byte EFUSECloudKey_EX[EEPROM_CLOUD_KEY_LENGTH_EX]; - - // - // SDIO ISR Related - // - // Interrupt relatd register information. - RT_INT_REG IntArray[1]; - RT_INT_REG IntrMask[1]; - RT_INT_REG IntrMaskToClear[1]; - RT_INT_REG SysIntArray[1]; - RT_INT_REG SysIntrMask[1]; - RT_INT_REG SysIntrMaskToClear[1]; - u4Byte RxIntLength; // The length of rx packet from the intrrupt information in SDIO only. - LOG_INTERRUPT InterruptLog; - LOG_SYS_INTERRUPT SysInterruptLog; - - // - // The same as 92CE. May merge 92CU and 92CE into the other struct - // - - u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 - u1Byte ThermalValue; - u1Byte ThermalValue_LCK; - u1Byte ThermalValue_IQK; - u1Byte ThermalValue_DPK; - u1Byte ThermalValue_AVG[AVG_THERMAL_NUM]; - u1Byte ThermalValue_AVG_index; - u1Byte ThermalValue_RxGain; - u1Byte ThermalValue_Crystal; - u1Byte ThermalValue_DPKstore; - u1Byte ThermalValue_DPKtrack; - BOOLEAN TxPowerTrackingInProgress; - - //s2Byte index_mapping_DPK_current[4][index_mapping_DPK_NUM]; - - BOOLEAN bRfPiEnable; - BOOLEAN bReloadtxpowerindex; - BOOLEAN bDoneTxpower; - u1Byte CrystalCap; - u1Byte CrystalFreq; - u1Byte CrystalSrc; - - s1Byte OFDM_index_HP[2]; - s1Byte CCK_index_HP; - u1Byte ThermalValue_HP[HP_THERMAL_NUM]; - u1Byte ThermalValue_HP_index; - - BOOLEAN bAPKdone; - BOOLEAN bDPKdone[2]; - - //for TxPwrTracking - s4Byte RegE94; - s4Byte RegE9C; - s4Byte RegEB4; - s4Byte RegEBC; - //for IQK - BOOLEAN bIQKInitialized; - BOOLEAN bAntennaDetected; - u4Byte ADDA_backup[IQK_ADDA_REG_NUM]; - u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM]; - u4Byte IQK_BB_backup_recover[9]; - u4Byte IQK_BB_backup[IQK_BB_REG_NUM]; - - //---------------------------------------------------------------------------------// - //3 [2.4G] - u1Byte Index24G_CCK_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER_2G]; - u1Byte Index24G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER_2G]; - //If only one tx, only BW20 and OFDM are used. - s1Byte CCK_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte OFDM_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW20_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW40_24G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - //3 [5G] - u1Byte Index5G_BW40_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER_5G]; - u1Byte Index5G_BW80_Base[MAX_RF_PATH][CHANNEL_MAX_NUMBER_5G_80M]; - s1Byte OFDM_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW20_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW40_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - s1Byte BW80_5G_Diff[MAX_RF_PATH][MAX_TX_COUNT]; - - // - // TX power by rate table at most 4RF path. - // The register is - // - // VHT TX power by rate off setArray = - // Band:-2G&5G = 0 / 1 - // RF: at most 4*4 = ABCD=0/1/2/3 - // CCK=0 OFDM=1/2 HT-MCS 0-15=3/4/56 VHT=7/8/9/10/11 - // - u1Byte TxPwrByRateTable; - u1Byte TxPwrByRateBand; - s1Byte TxPwrByRateOffset[TX_PWR_BY_RATE_NUM_BAND] - [TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RATE]; - //---------------------------------------------------------------------------------// - - - u1Byte PowerIndex_backup[6]; - u1Byte TxPwrLevelCck[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; - u1Byte TxPwrLevelHT40_1S[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr - u1Byte TxPwrLevelHT40_2S[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; // For HT 40MHZ pwr - s1Byte TxPwrHt20Diff[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; // HT 20<->40 Pwr diff - u1Byte TxPwrLegacyHtDiff[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; // For HT<->legacy pwr diff - - // Power Limit Table for 2.4G - s1Byte TxPwrLimit_2_4G[MAX_REGULATION_NUM] - [MAX_2_4G_BANDWITH_NUM] - [MAX_RATE_SECTION_NUM] - [CHANNEL_MAX_NUMBER_2G] - [MAX_RF_PATH]; - - // Power Limit Table for 5G - s1Byte TxPwrLimit_5G[MAX_REGULATION_NUM] - [MAX_5G_BANDWITH_NUM] - [MAX_RATE_SECTION_NUM] - [CHANNEL_MAX_NUMBER_5G] - [MAX_RF_PATH]; - - u1Byte Regulation2_4G; - u1Byte Regulation5G; - - // Store the original power by rate value of the base of each rate section of rf path A & B - u1Byte TxPwrByRateBase2_4G[TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RF] - [MAX_BASE_NUM_IN_PHY_REG_PG_2_4G]; - u1Byte TxPwrByRateBase5G[TX_PWR_BY_RATE_NUM_RF] - [TX_PWR_BY_RATE_NUM_RF] - [MAX_BASE_NUM_IN_PHY_REG_PG_5G]; - - // Used for TX power setting shadow map. - u1Byte TxPwrShadow[MAX_RF_PATH][DESC_RATEMAX]; - - // For power group - u1Byte PwrGroupHT20[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; - u1Byte PwrGroupHT40[RF_PATH_MAX_92C_88E][CHANNEL_MAX_NUMBER]; - - u1Byte LegacyHTTxPowerDiff; // Legacy to HT rate power diff - - // Read/write are allow for following hardware information variables - u1Byte DefaultInitialGain[4]; - u1Byte pwrGroupCnt; - u4Byte MCSTxPowerLevelOriginalOffset[MAX_PG_GROUP][16]; - u4Byte CCKTxPowerLevelOriginalOffset; - u1Byte TxPowerLevelCCK[14]; // CCK channel 1~14 - u1Byte TxPowerLevelOFDM24G[14]; // OFDM 2.4G channel 1~14 - u1Byte TxPowerLevelOFDM5G[14]; // OFDM 5G - u1Byte AntennaTxPwDiff[3]; // Antenna gain offset, index 0 for B, 1 for C, and 2 for D - - u4Byte AntennaTxPath; // Antenna path Tx (Used in MP driver) - u4Byte AntennaRxPath; // Antenna path Rx (Used in MP driver) - u4Byte ValidTxPath; // Valid Antenna path Tx (Used in Normal driver) - u4Byte ValidRxPath; // Valid Antenna path Tx (Used in Normal driver) - u1Byte CCKRxPath; //Back CCX Rx Path - u1Byte CCKTxPath; //Back CCX Tx Path - - u4Byte LedControlNum; - u4Byte LedControlMode; - - // The current Tx Power Level - u1Byte CurrentCckTxPwrIdx; - u1Byte CurrentOfdm24GTxPwrIdx; - u1Byte CurrentBW2024GTxPwrIdx; - u1Byte CurrentBW4024GTxPwrIdx; - u1Byte OriginalCckTxPwrIdx; - u1Byte OriginalOfdm24GTxPwrIdx; - - u1Byte EEPROMC9; - u1Byte EEPROMCC; - u1Byte PAMode; - - u1Byte InternalPA5G[2]; //pathA / pathB - u1Byte Delta_IQK; - u1Byte Delta_LCK; - - // For compatiable compile for 92D. - u4Byte RegA24; - u1Byte RegC04; - u4Byte RegD04; - u4Byte RegRF3C[2]; //pathA / pathB - u4Byte RegRF36; - - HAL92C_P2P_PS_OFFLOAD p2pFwPsOffload; - - // - // Read/write are allow for following hardware information variables - // - RF_TYPE_E RFChipID; - - - // Customer-defined power by rate / power limit table loading status - u1Byte CustomPwrByRateFileStatus; - u1Byte CustomPwrLimitFileStatus; - - u1Byte CurrentPwrLimitTableSel; // Primary = 0/Secondary = 1 - - u1Byte DynamicTxPwrLoadingInfo; // Dynamic Tx Power Table Loading info - u1Byte TxPwrTableDumpInfo; // Tx Power Table Dump info - - //2 Management related - WIRELESS_MODE CurrentWirelessMode; //For 8185 - u1Byte CurrentChannel; - RT_TIMER SwChnlTimer; -#if USE_WORKITEM - RT_WORK_ITEM SwChnlWorkItem; -#endif - BOOLEAN SwChnlInProgress; - u1Byte SwChnlStage; - u1Byte SwChnlStep; - - // bandwidth mode - CHANNEL_WIDTH CurrentChannelBW; - RT_TIMER SetBWModeTimer; - u1Byte SetBWModeInProgress; -#if USE_WORKITEM - RT_WORK_ITEM SetBWModeWorkItem; - RT_WORK_ITEM RtCheckForHangWorkItem; - RT_WORK_ITEM RtCheckResetWorkItem; -#endif - - BOOLEAN RFOff; - BOOLEAN bIntolerantAC; - BOOLEAN AdhocLinkState; - BOOLEAN SetRFPowerStateInProgress; - - //2 Tx Related variables - u2Byte ShortRetryLimit; - u2Byte LongRetryLimit; - - //2 Rx Related variables - u2Byte EarlyRxThreshold; - u4Byte ReceiveConfig; - u2Byte RxTag; - - //2 QoS Related variable - u1Byte AcmControl; - - u4Byte FWChannelSwitchComplete; - BOOLEAN bSwChnlAndSetBWInProgress; - u1Byte CurrentCenterFrequencyIndex1; - BOOLEAN bSwChnl; - BOOLEAN bSetChnlBW; - RT_WORK_ITEM SwChnlAndSetBWModeWorkItem; - - //2 Led Related variable - LED_STRATEGY_SDIO LedStrategy; - LED_SDIO SwLed0; - LED_SDIO SwLed1; - LED_SDIO SwLed2; - LED_SDIO SwLed3; - LED_SDIO SwLedAll; - BOOLEAN bLedOpenDrain; // Support Open-drain arrangement for controlling the LED. Added by Roger, 2009.10.16. - - - // RF power state: on, sleep, off. - RT_RF_POWER_STATE eRFPowerState; - - // Channel Access related register. - u1Byte SlotTime; - u4Byte SifsTime; - - // Command - u1Byte Command; - - // Data Rate Config. Added by Annie, 2006-04-13. - u2Byte BasicRateSet; - BOOLEAN bShortPreamble; - // - // CCX Radio Measurement; - // - u1Byte LastClmDur; - u1Byte LastNhmDur; - u4Byte ClmAcc; - u4Byte ClmDurAcc; - u4Byte NhmAcc[8]; - u4Byte NhmDurAcc; - - - // - // Default setting (initialized from registry). - // - BOOLEAN bRegUseLed; // 0: disable LED, 1: eanble LED. - - - // - // High Power Mechanism. - // - // For Default UI Tx power modification - s4Byte DefaultTxPwrDbm; - s4Byte MinCCKDbm; - s4Byte MinLOFDMDbm; - s4Byte MinHOFDMDbm; - s4Byte MinPwrDbm; - s4Byte MaxCCKDbm; - s4Byte MaxLOFDMDbm; - s4Byte MaxHOFDMDbm; - s4Byte MaxPwrDbm; - - // - // Turbo Mode Mechanism. Added by Roger, 2006.12.15. - // - BOOLEAN bInTurboMode; - - // Interface selection. Added by Annie, 2005-11-18. - u1Byte InterfaceSel; - u1Byte PackageType; - u1Byte RFEType; - BOOLEAN bIsMPChip; - - s1Byte BufOfLines[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - - - BOOLEAN bSendingBeacon; // TRUE if we are sending beacon to host control and not yet completed. - - // Sw Antenna Diversity - //20070103 porting by David - BOOLEAN bRegSwAntennaDiversityMechanism; // TRUE if S/W antenna diversity mechanism is allowed, see also EEPROMSwAntennaDiversity and bSwAntennaDiverity. - BOOLEAN bAntennaDiversityTimerIssued; - RT_WORK_ITEM SwAntennaWorkItem; - u1Byte CurrAntennaIndex; // Index to current Antenna (both Tx and Rx). - u1Byte AdTickCount; // Times of SwAntennaDiversityTimer happened. - u1Byte AdCheckPeriod; // # of period SwAntennaDiversityTimer to check Rx signal strength for SW Antenna Diversity. - u1Byte AdMinCheckPeriod; // Min value of AdCheckPeriod. - u1Byte AdMaxCheckPeriod; // Max value of AdCheckPeriod. - BOOLEAN bSwAntennaDiverity; // TRUE if we want to enable SW Antenna Diversity mechanism. - RT_TIMER SwAntennaDiversityTimer; // Timer object for SW Antenna Diversity mechanism. - u4Byte AdRxOkCnt; // ROK packet count from current BSS in ANTENNA_DIVERSITY_TIMER_PERIOD. - s4Byte AdRxSignalStrength; // Rx signal strength for Antenna Diversity, which had been smoothing, its valid range is [0,100]. - s4Byte AdRxSsThreshold; // Signal strength threshold to switch antenna. - s4Byte AdMaxRxSsThreshold; // Max value of AdRxSsThreshold. - BOOLEAN bAdSwitchedChecking; // TRUE if we shall shall check Rx signal strength for last time switching antenna. - s4Byte AdRxSsBeforeSwitched; // Rx signal strength before we swithed antenna. - // - //1 The following was added for 8192sUsb - - /* Firmware related */ - PRT_FIRMWARE pFirmware; - u1Byte RegFWOffload; - u4Byte RsvdBitMap; - - // Beamforming RF path number - u1Byte RegBeamformerCapRfNum; - u1Byte RegBeamformeeCapRfNum; - - /*PHY related*/ - BB_REGISTER_DEFINITION_T PHYRegDef[4]; //Radio A/B/C/D - - u1Byte NumTotalRFPath; - - /*Last RxDesc TSF value*/ - u4Byte LastRxDescTSFHigh; - u4Byte LastRxDescTSFLow; - - - // - // 8190 40MHz mode - // - u1Byte nCur40MhzPrimeSC; // Control channel sub-carrier - u1Byte nCur80MhzPrimeSC; //used for primary 40MHz of 80MHz mode - - /* Rx Descriptor Debug message for aggregation related histogram */ - u1Byte nRxAMPDU_AggrNum; - u2Byte nRxAMPDU_Size; - - - // - // Joseph test for Silent Reset - // Driver cannot open file when it is not in initialization state. - // So we need a buffer to save the content of configuration file for reset use. - // - s1Byte BufOfLines1[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufOfLines2[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufOfLines3[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufOfLines4[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufOfLines5[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufOfLines6[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - - s4Byte nLinesRead1; - s4Byte nLinesRead2; - s4Byte nLinesRead3; - s4Byte nLinesRead4; - s4Byte nLinesRead5; - s4Byte nLinesRead6; - - s1Byte BufOfLinesPwrLmt[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s4Byte nLinesReadPwrLmt; - s1Byte BufOfLinesPwrByRate[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s4Byte nLinesReadPwrByRate; - - s1Byte BufRadioA[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufRadioB[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufRadioC[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufRadioD[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s4Byte nLinesBufRadioA; - s4Byte nLinesBufRadioB; - s4Byte nLinesBufRadioC; - s4Byte nLinesBufRadioD; - - BOOLEAN bCCKinCH14; - s1Byte CCK_index; - s1Byte OFDM_index[2]; - u4Byte TXPowerTrackingCallbackCnt; //debug only - - - //cosa add for 2T4R/1T2R software control 10/24/2007 - u1Byte RF_Type;// 1 means 2T4R, 0 means 1T2R - - // For EDCA Turbo mode - BOOLEAN bIsAnyNonBEPkts; - - u8Byte SystemStartTime; - u8Byte SystemCurrTime; - - // Use to calculate PWBD. - s4Byte UndecoratedSmoothedPWDB; - s4Byte UndecoratedSmoothedCCK; - s4Byte UndecoratedSmoothedOFDM; - s4Byte UndecoratedSmoothedBeacon; - u4Byte RxRate; - u8Byte PacketMap; - u4Byte OFDM_pkt; - u1Byte ValidBit; - s4Byte EntryMinUndecoratedSmoothedPWDB; - s4Byte EntryMaxUndecoratedSmoothedPWDB; - s4Byte BT_EntryMinUndecoratedSmoothedPWDB; - s4Byte BT_EntryMaxUndecoratedSmoothedPWDB; - - //SW Antenna Switch - s4Byte RSSI_sum_A; - s4Byte RSSI_cnt_A; - s4Byte RSSI_sum_B; - s4Byte RSSI_cnt_B; - BOOLEAN RSSI_test; - PRT_WLAN_STA RSSI_target; - - u1Byte AntDivCfg; - u1Byte AntDetection; - u1Byte PathDivCfg; - u1Byte TRxAntDivType; // RF type, Read from 88E EFUSE 0xC9 - u1Byte ReverseDPDT; - u4Byte OFDM_Pkt_Cnt; - u4Byte CCK_Pkt_Cnt; - - RT_WORK_ITEM PSDMonitorWorkitem; - - //WLAN PSD for BT AFH - BOOLEAN bPSDinProcess; - RT_TIMER PSDTimer; - u1Byte RSSI_BT; - RT_TIMER PSDTriggerTimer; - //---------------2011.08.24 ------------------ - - // 2008/01/10 MH HW Trun on/off RF according to GPIO1 - RT_WORK_ITEM GPIOChangeRFWorkItem; - // TRUE if RF is turned to OFF by HW (e.g. GPIO1), FALSE otherwise. - BOOLEAN bHwRadioOff; - - // 2010/11/25 Check PBC GPIO - RT_WORK_ITEM GPIOCheckPBCWorkItem; - - // Ratr table used bitmap - u1Byte RATRTableBitmap; - - BOOLEAN bInMonitorMode; // Indicate if underlying h/w is configured in monitor mode. - - //Add by Jacken Tx Power Control for Near/Far Range 2008/03/06 - u1Byte DynamicTxHighPowerLvl; //Tx High power level - u1Byte LastDTPLvl; - - SCAN_OPERATION_BACKUP_OPT ScanOperationBackupOtpType; - RT_WORK_ITEM ScanOperationBackupWorkItem; - - - // RF and BB simple mechanism for synchronizing access. Added by Roger, 2009.06.29. - u4Byte bChangeBBInProgress; // BaseBand RW is still in progress. - u4Byte bChangeRFInProgress; // RF RW is still in progress. - - - RT_WORK_ITEM IOWorkItem; - IO_TYPE CurrentIOType; - BOOLEAN SetIOInProgress; - u1Byte NumOfPipes; - QUEUE_INDEX_LIST OutPipeToTxQueueMap[MAX_NUM_SDIO_TX_QUEUE]; - u1Byte TxQueueToOutPipeMap[MAX_TX_QUEUE]; - - u1Byte DMFlag; // Indicate if each dynamic mechanism's status. - - u1Byte PreRpwmVal; // by tynli. For recording the previous RPWM value. - u1Byte LastHCPWM1Val; - - u4Byte RfRegChnlVal[MAX_RF_PATH]; - - - u1Byte PbcGPIOCnt; - - BOOLEAN bRegUsbInTokenRev; //For Intel ATOM CPU utilization, 2009.06.04. - - - //---------------------------------------------------------------------------- - // RTL8192C USB Tx/Rx Aggregation - //---------------------------------------------------------------------------- - u4Byte TxTransferSize; - -#if TX_AGGREGATION - BOOLEAN UsbTxAggMode; - u1Byte UsbTxAggTotalNum; - u1Byte UsbTxAggDescNum; - //u1Byte UsbTxAggPerBulkNum; -#endif -#if RX_AGGREGATION - - u2Byte HwRxPageSize; // Hardware setting - u4Byte MaxRxAggBlock; - - RX_AGG_MODE RxAggMode; - u1Byte RegRxAggBlockCount; - u1Byte RxAggBlockCount; // USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed - u1Byte RegRxAggBlockTimeout; - u1Byte RxAggBlockTimeout; - u1Byte RegRxAggPageCount; - u1Byte RxAggPageCount; // 8192C DMA page count - u1Byte RegRxAggPageTimeout; - u1Byte RxAggPageTimeout; - RT_WORK_ITEM RxAggrSettingWorkItem; -#endif - // 2010/12/10 MH Add for USB aggreation mode dynamic shceme. - BOOLEAN UsbRxHighSpeedMode; - - u1Byte RegTxPause; - - //Add for maintain H2C box number. by tynli. 2009.10.06. - u1Byte LastHMEBoxNum; - u4Byte lastFwCmdElementId; - - RT_WORK_ITEM FillH2CCmdWorkItem; - BOOLEAN bH2CSetInProgress; - RT_TIMER FillH2CCmdTimer; - BOOLEAN H2CStopInsertQueue; //by tynli. 2010.10.07. -#if(FW_QUEME_MECHANISM_NEW != 1) - H2C_CMD_8192C H2CCmd[MAX_H2C_QUEUE_NUM]; //for queuing the h2c cmds which are sent in dispatch level. - u1Byte H2CQueueHead; - u1Byte H2CQueueTail; -#endif - u4Byte h2cStatistics[H2C_STATUS_MAX]; - u1Byte lastSuccessH2cEid; - u1Byte firstFailedH2cEid; - - RT_TIMER DualMacSetOperationForAnotherMacTimer; - - - // Record Fw PS mode status. Added by tynli. 2010.04.19. - u1Byte FwPSState; - BOOLEAN bFwClkChangeInProgress; - BOOLEAN bFwDwRsvdPageInProgress; - // For 32k power save. 2011.03.22. by tynli. - RT_TIMER FwClockOffTimer; - RT_WORK_ITEM HandleH2CJoinBssRptWorkItem; - BOOLEAN bAllowSwToChangeHwClock; //by tynli. for 32k. - BOOLEAN bKeepInPSPeriod; // by tynli. for 32k. - RT_WORK_ITEM FwClockOffWorkItem; - u1Byte HwClkOnExceptionReason; - u1Byte ForceHwClkOnExceptionReason; - -#if RT_PLATFORM == PLATFORM_MACOSX - u1Byte RegBcnCtrlVal; -#else - u4Byte RegBcnCtrlVal; -#endif - - RT_WORK_ITEM ResumeTxBeaconWorkItem; - - // Beacon function related global variable. - u1Byte RegFwHwTxQCtrl; - u1Byte RegReg542; - u1Byte RegCR_1; - BOOLEAN bRegUsbSS; - //Record if Card Disable by HW auto SM. - BOOLEAN bCardDisableHWSM; - - //For check TxDMA error status. - BOOLEAN bClearTxDMAErrorFlag; - u1Byte USBResetTxHangEanble; - - // Record Fw PS mode status. Added by tynli. 2010.04.19. - BOOLEAN bFwCurrentInPSMode; - u2Byte FwRsvdPageStartOffset; //2010.06.23. Added by tynli. Reserve page start offset except beacon in TxQ. - - // 2010/08/09 MH Add CU power down mode. - BOOLEAN pwrdown; - BOOLEAN bRfOnOffInt;// HW RF on/off interrupt - - // Add Tx Feedback for SDIO, by Hana, 2015.02.10 - // TxFeedback Context Place Holder for Private Data: --------------------------- - // + Only access this private data inside the module by TxFeedbackGetContext() - PRIVATE_DATA_ZONE TxFeedback[TX_FEEDBACK_SIZE_OF_CONTEXT]; - // ---------------------------------------------------------------------- - - BOOLEAN bHostSuspend; // To check Host suspend status on FPGA platform, added by Roger, 2010.09.28. - u2Byte HostSuspendCnt; // Suspend counter for FPGA host, added by Roger, 2010.09.28. - - // 2010/11/22 MH Add for slim combo debug mode selective. - // This is used for fix the drawback of CU TSMC-A/UMC-A cut. HW auto suspend ability. Close BT clock. - BOOLEAN SlimComboDbg; - - u1Byte RTSInitRate; // 2010.11.24.by tynli. - RT_WORK_ITEM SetRTSRateWorkItem; - - RT_AMPDU_BRUST AMPDUBurstMode; //92C maybe not use, but for compile successfully - RT_AMPDU_BRUST AMPDUBurstModebackup; - u1Byte AMPDUBurstNum; - BOOLEAN bAutoAMPDUBurstMode; - u2Byte AutoAMPDUBurstModeThreshold; - - u2Byte TxHignTPThreshold; - u2Byte RxHignTPThreshold; - - u1Byte SwBeaconType; // The Beacon type defined by BACON_SEND_XX. - - BOOLEAN bMACFuncEnable; - - IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM]; - - RT_WORK_ITEM IQKTriggerWorkItem; - RT_WORK_ITEM LCKTriggerWorkItem; - RT_WORK_ITEM DPKTriggerWorkItem; - - s4Byte MinUndecoratedPWDBForDM; - s4Byte LastMinUndecoratedPWDBForDM; - - s1Byte BufOfLinesAGC2_4G[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - s1Byte BufOfLinesAGC5G[MAX_LINES_HWCONFIG_TXT][MAX_BYTES_LINE_HWCONFIG_TXT]; - - s4Byte nLinesReadAGC2_4G; - s4Byte nLinesReadAGC5G; - -//To reduce stack in phy_SwChnlStepByStep, 20110719 by sherry - SwChnlCmd PreCommonCmd[MAX_PRECMD_CNT]; - SwChnlCmd PostCommonCmd[MAX_POSTCMD_CNT]; - SwChnlCmd RfDependCmd[MAX_RFDEPENDCMD_CNT]; - - BOOLEAN bPathDiv_Enable; //For 92D Non-interrupt Antenna Diversity by Neil ,add by wl.2011.07.19 - - BOOLEAN bPreEdccaEnable; // 2011.11.25. by tynli. - - // FW common structure - FW_COM_STR fwComStr; - - // - // 2011/09/22 MH Add for common PHy intergration interface. - // - DM_ODM_T DM_OutSrc; - BOOLEAN bLinked; - - u1Byte CurrentRARate; - - u1Byte u1RsvdPageLoc[MAX_H2C_CMD_DATA_SIZE]; - u1Byte u1RsvdPageLoc2[MAX_H2C_CMD_DATA_SIZE]; - u1Byte u1RsvdPageLoc3[MAX_H2C_CMD_DATA_SIZE]; - u1Byte u1RsvdPageLocREALWOW[MAX_H2C_CMD_DATA_SIZE]; - u1Byte u1FwPatternRsvdPageLoc[MAX_H2C_CMD_DATA_SIZE]; - u1Byte u1RsvdPageLocScanOffload[MAX_H2C_CMD_DATA_SIZE]; - u1Byte u1RsvdPageFcsLoc[MAX_H2C_CMD_DATA_SIZE]; - - BOOLEAN bReInitLLTTable; - - u1Byte SdioTxSequence; - BOOLEAN bSpurCalComplete; // <20130515, VincentLan> To make sure spur calibration be execute only once - - BOOLEAN bPhyValueInitReady; - - BOOLEAN bNeedIQK; - BOOLEAN bNeedQueuePacketInIQKProgress; - - u1Byte ExternalPA_2G; - u1Byte ExternalLNA_2G; - u1Byte ExternalPA_5G; - u1Byte ExternalLNA_5G; - u2Byte TypeGLNA; - u2Byte TypeGPA; - u2Byte TypeALNA; - u2Byte TypeAPA; - - s1Byte TxBBSwing_2G; - s1Byte TxBBSwing_5G; - - u1Byte RTSEN; - - u1Byte CurrScanOffloadType; //Current scan offload type - - // add for RfBbGain - u1Byte RfBbGain; - // Add for KFree Feature Requested by RF David. - u1Byte RfKFreeEnable; - - // Add to determine IQK ON/OFF in certain case, Suggested by Cheng. - u1Byte IQK_MP_Switch; - - // for FW IQK time measurement - u8Byte IQK_StartTimer; - u8Byte IQK_EndTimer; - - // Rate Adaptive Mask control - BOOLEAN bUseRAMask; - - u1Byte u1ForcedIgiLb; // forced IGI lower bound - u4Byte MacIdPktSleep; - - RT_ADCSMP ADCSmp; - RT_WORK_ITEM ADCSmpWorkItem; - - u1Byte RomDLFwEnable; - u1Byte bP2PInProcess; - u1Byte RxDetectorBackUp; - - BOOLEAN bDropRxPacket; - - BB_INIT_REGISTER RegForRecover[5]; - - RT_WORK_ITEM MacIdSleepWorkItem; - - BOOLEAN bDynTxPwrTblLoadingInProgress; - - SMBIOS_DATA SmbiosData; - u4Byte BackUp_BB_REG_4_2nd_CCA[3]; - BOOLEAN bSWToBW40M; - - //8723D LPS 32K Close Power of IO - LPS_DEEP_SLEEP_CONTEXT LPSDeepSleepContext; -}HAL_DATA_SDIO, *PHAL_DATA_SDIO; - - -#define HAL_DATA_TYPE HAL_DATA_SDIO -#define PHAL_DATA_TYPE PHAL_DATA_SDIO -#define GET_HAL_DATA(__pAdapter) ((HAL_DATA_TYPE *)((__pAdapter)->HalData)) -#define IS_BOOT_FROM_EFUSE(_Adapter) (!((PHAL_DATA_TYPE)(_Adapter->HalData))->EepromOrEfuse) - -//================================================================================ -// Prototype of functions to export. -//================================================================================ -// -// SDIO Initialization and DeInitialization interfaces. -// -BOOLEAN -HalSdioAllocResource( - IN PADAPTER pAdapter, - IN s4Byte TxQueueCnt, - IN s4Byte RxQueueCnt - ); - -VOID -HalSdioFreeResource( - IN PADAPTER pAdapter - ); - -u1Byte -MapTxQueueToOutPipe( - IN PADAPTER pAdapter, - IN u1Byte SpecifiedQueueID -); - - -// -// SDIO Rx Transfer -// -PSDIO_IN_CONTEXT -HalSdioGetInContext( - IN PADAPTER pAdapter - ); - -VOID -HalSdioReturnInContext( - IN PADAPTER pAdapter, - IN PSDIO_IN_CONTEXT pContext - ); - - -// -// SDIO Tx Transfer -// -PSDIO_OUT_CONTEXT -HalSdioGetTxContext( - IN PADAPTER pAdapter - ); - -VOID -HalSdioReturnTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -VOID -HalSdioTxComplete( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext, - IN u4Byte status - ); - -VOID -HalSdioUdtDefSet( - IN PADAPTER pAdapter - ); - -#endif//__INC_HALUSB_H diff --git a/network/wlan/WDI/HAL/HalTxFeedback.h b/network/wlan/WDI/HAL/HalTxFeedback.h deleted file mode 100644 index 2f66eead..00000000 --- a/network/wlan/WDI/HAL/HalTxFeedback.h +++ /dev/null @@ -1,189 +0,0 @@ - -#ifndef __INC_HAL_TX_FEEDBACK_H -#define __INC_HAL_TX_FEEDBACK_H - - -// The identifier/reason of the tx feedback -#define RT_TX_FEEDBACK_ID_AP_WMM_PS_PKT BIT0 -#define RT_TX_FEEDBACK_ID_AP_WMM_EOSP_ENDING BIT1 -#define RT_TX_FEEDBACK_ID_TDLS_TEARDOWN_PKT BIT2 -#define RT_TX_FEEDBACK_ID_TDLS_CHNLSWITCH BIT3 -#define RT_TX_FEEDBACK_ID_TDLS_NULL_PKT BIT4 -#define RT_TX_FEEDBACK_ID_TDLS_CS_DATA_PKT BIT5 -#define RT_TX_FEEDBACK_ID_TDLS_CHNLSWITCH_REQ BIT6 -#define RT_TX_FEEDBACK_ID_TDLS_PTR BIT7 -#define RT_TX_FEEDBACK_ID_SCAN_TX_NULL BIT8 // Send Null frame when starting scan process -#define RT_TX_FEEDBACK_ID_P2P_NEGO_TX BIT9 -#define RT_TX_FEEDBACK_ID_CCX_TSM BIT10 -#define RT_TX_FEEDBACK_ID_CCX_LINK_TEST BIT11 -#define RT_TX_FEEDBACK_ID_P2P_PD_RSP_TX BIT12 -#define RT_TX_FEEDBACK_ID_OFF_CHNL_TX BIT13 - - -#define RT_TX_FEEDBACK_ID_MULTICHANNEL_NULL_PKT BIT31 - -typedef struct _RT_TX_FEEDBACK_INFO RT_TX_FEEDBACK_INFO, *PRT_TX_FEEDBACK_INFO; - -typedef VOID -(*RtTxFeedbackCallbackHandler)( - PADAPTER pAdapter, - const RT_TX_FEEDBACK_INFO * const pTxFeedbackInfo -); - -typedef struct _RT_TX_FEEDBACK_INFO_TX_PROFILE -{ - RT_VALID_PAIR_BOOLEAN bPktOk; - RT_VALID_PAIR_BOOLEAN bRetryOver; - RT_VALID_PAIR_BOOLEAN bLifeTimeOver; - RT_VALID_PAIR_BOOLEAN bUnicast; - RT_VALID_PAIR_U4BYTE uQueueID; - RT_VALID_PAIR_U4BYTE uMacID; - RT_VALID_PAIR_U4BYTE uDataRetryCount; - RT_VALID_PAIR_U4BYTE uQueueTimeUs; - RT_VALID_PAIR_U4BYTE uFinalDataRateIndex; - -} RT_TX_FEEDBACK_INFO_TX_PROFILE, *PRT_TX_FEEDBACK_INFO_TX_PROFILE; - -#define GET_TX_PROFILE_PKT_OK(_pTxProfile) (((_pTxProfile)->bPktOk.bVaild) ? ((_pTxProfile)->bPktOk.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_RETRY_OVER(_pTxProfile) (((_pTxProfile)->bRetryOver.bVaild) ? ((_pTxProfile)->bRetryOver.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_LEFE_TIME_OVER(_pTxProfile) (((_pTxProfile)->bLifeTimeOver.bVaild) ? ((_pTxProfile)->bLifeTimeOver.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_IS_UNICAST(_pTxProfile) (((_pTxProfile)->bUnicast.bVaild) ? ((_pTxProfile)->bUnicast.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_QUEUE_ID(_pTxProfile) (((_pTxProfile)->uQueueID.bVaild) ? ((_pTxProfile)->uQueueID.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_MAC_ID(_pTxProfile) (((_pTxProfile)->uMacID.bVaild) ? ((_pTxProfile)->uMacID.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_DATA_RETRY_COUNT(_pTxProfile) (((_pTxProfile)->uDataRetryCount.bVaild) ? ((_pTxProfile)->uDataRetryCount.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_QUEUE_TIME_US(_pTxProfile) (((_pTxProfile)->uQueueTimeUs.bVaild) ? ((_pTxProfile)->uQueueTimeUs.Data) : TxFeedbackAssertForInvalidData()) -#define GET_TX_PROFILE_FINAL_DATA_RATE_INDEX(_pTxProfile) (((_pTxProfile)->uFinalDataRateIndex.bVaild) ? ((_pTxProfile)->uFinalDataRateIndex.Data) : TxFeedbackAssertForInvalidData()) - - -typedef struct _RT_TX_FEEDBACK_INFO -{ - // User Configuration Part ------------------------------------------------------ - RT_LIST_ENTRY List; // The linked list pointer. - u4Byte Identifier; // The ID to identify this tx feedback. - u4Byte Reason; // The reason for this packet. - PADAPTER pAdapter; // The adapter address. - RtTxFeedbackCallbackHandler Callback; // The callback function. - PVOID pContext; // The context address. - // -------------------------------------------------------------------------- - - // Packet Tx Profile ----------------------------------------------------------- - RT_TX_FEEDBACK_INFO_TX_PROFILE TxProfile; - // -------------------------------------------------------------------------- - -}RT_TX_FEEDBACK_INFO, *PRT_TX_FEEDBACK_INFO; - - -#define HAL_MAX_TX_FEEDBACK_INFO_NUM 16 // The same number with TID. -#define HAL_MAX_TX_FEEDBACK_QUEUE_NUM 7 // The number of the edca (TID) queue for the tx feedback information - - -typedef struct _TX_FEEDBACK_CONTEXT{ - - BOOLEAN bSupportTxFeedBack; - RT_TX_FEEDBACK_INFO TxFeedbackArray[HAL_MAX_TX_FEEDBACK_INFO_NUM]; - - // Use RT_TX_SPINLOCK to protect the queue context ------------------------------------------------------------ - RT_LIST_ENTRY TxFeedbackIdleQueue; - RT_LIST_ENTRY TxFeedbackEDCAQueue[HAL_MAX_TX_FEEDBACK_QUEUE_NUM]; // The number of TID. - // -------------------------------------------------------------------------------------------------------- - -} TX_FEEDBACK_CONTEXT, *PTX_FEEDBACK_CONTEXT; - -#define TX_FEEDBACK_SIZE_OF_CONTEXT sizeof(TX_FEEDBACK_CONTEXT) - - - -typedef struct _TX_FEEDBACK_TCB_ZONE{ - - PRT_TX_FEEDBACK_INFO pTxFeedbackInfo; - -} TX_FEEDBACK_TCB_ZONE, *PTX_FEEDBACK_TCB_ZONE; - -#define TX_FEEDBACK_SIZE_OF_TCB_ZONE sizeof(TX_FEEDBACK_TCB_ZONE) - - - - - -VOID -TxFeedbackInitialize( - PADAPTER pAdapter -); - -BOOLEAN -TxFeedbackExistActiveTxFeedbackInfo( - PADAPTER pAdapter -); - -PRT_TX_FEEDBACK_INFO -TxFeedbackGetMatchedTxFeedbackInfoFromSpecificQueue( - PADAPTER pAdapter, - u1Byte QueueID, - u4Byte TxFeedbackID -); - -static VOID -TxFeedbackReturnTxFeedbackInfo( - PADAPTER pAdapter, - PRT_TX_FEEDBACK_INFO pTxFeedbackInfo -); - -VOID -TxFeedbackSetActiveTxFeedbackInfo( - PADAPTER pAdapter, - u1Byte QueueID, - PRT_TCB pTcb -); - -VOID -TxFeedbackSetTxFeedbackInfoID( - PADAPTER pAdapter, - PRT_TCB pTcb -); - -VOID -TxFeedbackExecuteCallbackAndReturnTxFeedbackInfo( - PADAPTER pAdapter, - PRT_TX_FEEDBACK_INFO pTxFeedbackInfo -); - - -BOOLEAN -TxFeedbackInstallTxFeedbackInfoForTcb( - PADAPTER pAdapter, - PRT_TCB pTcb -); - -VOID -TxFeedbackDeInstallTxFeedbackInfoForTcb( - PADAPTER pAdapter, - PRT_TCB pTcb -); - -VOID -TxFeedbackFillTxFeedbackInfoUserConfiguration( - PRT_TCB pTcb, - u4Byte Reason, - PADAPTER pAdapter, - RtTxFeedbackCallbackHandler Callback, - PVOID pContext -); - -BOOLEAN -TxFeedbackIsTxFeedbackInfoInstalled( - PRT_TCB pTcb -); - -BOOLEAN -TxFeedbackCheckCurrentFunctionality( - PADAPTER pAdapter -); - -BOOLEAN -TxFeedbackAssertForInvalidData( -); - - - - -#endif diff --git a/network/wlan/WDI/HAL/HalWoWLAN.h b/network/wlan/WDI/HAL/HalWoWLAN.h deleted file mode 100644 index 2d40cb10..00000000 --- a/network/wlan/WDI/HAL/HalWoWLAN.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __INC_HAL_WOWLAN_H -#define __INC_HAL_WOWLAN_H - -VOID -HALWOWL_DisableMACRxDMA( - IN PADAPTER Adapter - ); - -VOID -HALWOWL_EnableMACRxDMA( - IN PADAPTER Adapter - ); - - -VOID -HALWOWL_EnablePowerSave( - IN PADAPTER Adapter - ); - -VOID -HALWOWL_DisablePowerSave( - IN PADAPTER Adapter - ); - -VOID -HALWOWL_HWPowerSettings( - IN PADAPTER Adapter - ); - -RT_STATUS -HALWOWL_FuncEnable( - IN PADAPTER Adapter - ); - -VOID -HALWOWL_FuncDisable( - IN PADAPTER Adapter, - IN BOOLEAN bSimpleInit - ); - -VOID -HALWOWL_ResetVar( - IN PADAPTER Adapter - ); - -#endif diff --git a/network/wlan/WDI/HAL/halCmdPkt.h b/network/wlan/WDI/HAL/halCmdPkt.h deleted file mode 100644 index 0af6c441..00000000 --- a/network/wlan/WDI/HAL/halCmdPkt.h +++ /dev/null @@ -1,375 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2006, RealTEK Technology Inc. All Right Reserved. - * - * Module: hal90cmdpkt.h (RTL8190 TX/RX command packet handler Header H File) - * - * - * Note: We define different command packets' structure and defintion. - * Please refer to doc ws-06-0063-rtl8190-command-packet-specification. - * 1. The defintiion and structure will be the same in DRV and FW. - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: SZ : Size - * .....For example. - * - * History: - * Data Who Remark - * 01/15/2007 MHC Create initial version. Define comadn packet - * structure and element definition. - * 01/16/2007 MHC According to document, we add defintion in dedicated - * field and corresponding structure. - * 07/05/2007 MHC Change tx feedback packet structure to fit format - * from firmware. - * 10/09/2007 MHC Accept all USB/PCI structure and enum. Nerge the - * same structure or constant definition. - * - *****************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __HAL90_CMD_PKT_H__ -#define __HAL90_CMD_PKT_H__ - - -/*--------------------------Define Parameters-------------------------------*/ -/* 2007/01/15 MH Define some constant for comand packet handler module. */ -#define KB 1024 -#define MByte KB*KB - - -/* Define frequently used type definition. */ -/* INT8 is defined in WINDDK/3790/inc/wxp/basetsd.h:30. */ -//typedef char INT8; -typedef short INT16; -//typedef long INT32; - -#if (RT_PLATFORM != PLATFORM_LINUX) && (RT_PLATFORM != PLATFORM_MACOSX) -typedef unsigned char UINT8; -typedef unsigned short UINT16; -//typedef unsigned long UINT32; -#endif - -typedef void (*VOIDFUNCPTR) (void); -typedef int (*INTFUNCPTR) (void); - -/* Different command packet have dedicated message length and definition. */ -#define CMPK_RX_TX_FB_SIZE sizeof(CMPK_TXFB_T) //20 -#define CMPK_RX_BEACON_STATE_SIZE sizeof(CMPK_BCN_STA_T) //4 -#define CMPK_TX_SET_CONFIG_SIZE sizeof(CMPK_SET_CFG_T) //16 -#define CMPK_BOTH_QUERY_CONFIG_SIZE sizeof(CMPK_SET_CFG_T) //16 -#define CMPK_RX_TX_STS_SIZE sizeof(CMPK_TX_STATUS_T)// -#define CMPK_RX_DBG_MSG_SIZE sizeof(CMPK_RX_DBGINFO_T)// -#define CMPK_TX_RAHIS_SIZE sizeof(CMPK_TX_RAHIS_T)// - - -/* Feedback info field. */ -/* 1. Fail Reason encoding. */ -#define CMPK_RETRY_TIME_OUT 0x00 /* */ -#define CMPK_RETRY_MSDU_TIME_OUT 0x01 /* */ -#define CMPK_RETRY_DELAY_TIME_OUT 0x02 /* */ - -/* 2. TID : VO/VI/BE/BK, ... */ - -/* 3. Rate Mapping*/ -#define CMPK_CCK_1M 0x00 /* */ -#define CMPK_CCK_2M 0x01 /* */ -#define CMPK_CCK_5P5M 0x02 /* */ -#define CMPK_CCK_11M 0x03 /* */ -#define CMPK_OFDM_6M 0x04 /* */ -#define CMPK_OFDM_9M 0x05 /* */ -#define CMPK_OFDM_12M 0x06 /* */ -#define CMPK_OFDM_18M 0x07 /* */ -#define CMPK_OFDM_24M 0x08 /* */ -#define CMPK_OFDM_36M 0x09 /* */ -#define CMPK_OFDM_48M 0x0A /* */ -#define CMPK_OFDM_54M 0x0B /* */ -#define CMPK_HT_MCS0 0x80 /* */ -#define CMPK_HT_MCS1 0x81 /* */ -#define CMPK_HT_MCS2 0x82 /* */ -#define CMPK_HT_MCS3 0x83 /* */ -#define CMPK_HT_MCS4 0x84 /* */ -#define CMPK_HT_MCS5 0x85 /* */ -#define CMPK_HT_MCS6 0x86 /* */ -#define CMPK_HT_MCS7 0x87 /* */ -#define CMPK_HT_MCS8 0x88 /* */ -#define CMPK_HT_MCS9 0x89 /* */ -#define CMPK_HT_MCS10 0x8A /* */ -#define CMPK_HT_MCS11 0x8B /* */ -#define CMPK_HT_MCS12 0x8C /* */ -#define CMPK_HT_MCS13 0x8D /* */ -#define CMPK_HT_MCS14 0x8E /* */ -#define CMPK_HT_MCS15 0x8F /* */ -#define CMPK_HT_MCS32 0xA0 /* */ - -/* Configuration info field. */ -/* 1. Type definition of Query/Set Configuration Element. */ -#define CMPK_CFG_MAC_REG 0x00 -#define CMPK_CFG_BB_REG 0x01 -#define CMPK_CFG_FW_ARG 0x02 -#define CMPK_CFG_TP_REV 0x03 /* Type reserve bit. */ - -/* 2. Size definition of Query/Set Configuration Element. */ -#define CMPK_CFG_SZ_REV 0x00 /* Size reserve bit. */ -#define CMPK_CFG_BYTE 0x01 -#define CMPK_CFG_WORD 0x02 -#define CMPK_CFG_DWORD 0x03 - -/* Define RX command queue ID. */ -#define CMPK_RX_QUEUE_ID 1 - -/* 2007/10/09 MH For USB consatnt. */ -#define ISR_TxBcnOk BIT27 // Transmit Beacon OK -#define ISR_TxBcnErr BIT26 // Transmit Beacon Error -#define ISR_BcnTimerIntr BIT13 // Beacon Timer Interrupt -/*--------------------------Define Parameters-------------------------------*/ - - -/*------------------------------Define structure----------------------------*/ -/* Define different command packet structure. */ -/* 1. RX side: TX feedback packet. */ - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct tag_Cmd_Pkt_Tx_Feedback -{ - // DWORD 0 - UINT8 Element_ID; /* Command packet type. */ - UINT8 Length; /* Command packet length. */ - /* 2007/07/05 MH Change tx feedback info field. */ - /*------TX Feedback Info Field */ - UINT8 TID:4; /* */ - UINT8 Fail_Reason:3; /* */ - UINT8 TOK:1; /* Transmit ok. */ - UINT8 Reserve1:4; /* */ - UINT8 Pkt_Type:2; /* */ - UINT8 Bandwidth:1; /* */ - UINT8 Qos_Pkt:1; /* */ - - // DWORD 1 - UINT8 Reserve2; /* */ - /*------TX Feedback Info Field */ - UINT8 Retry_Cnt; /* */ - UINT16 Pkt_ID; /* */ - - // DWORD 3 - UINT16 Seq_Num; /* */ - UINT8 S_Rate; /* Start rate. */ - UINT8 F_Rate; /* Final rate. */ - - // DWORD 4 - UINT8 S_RTS_Rate; /* */ - UINT8 F_RTS_Rate; /* */ - UINT16 pkt_length; /* */ - - // DWORD 5 - UINT16 Reserve3; /* */ - UINT16 Duration; /* */ -}CMPK_TXFB_T; - -// For USB -/* 2. RX side: Interrupt status packet. It includes Beacon State, - Beacon Timer Interrupt and other useful informations in MAC ISR Reg. */ -typedef struct tag_Cmd_Pkt_Interrupt_Status -{ - UINT8 Element_ID; /* Command packet type. */ - UINT8 Length; /* Command packet length. */ - UINT16 Reserve; - UINT32 InterruptStatus; /* Interrupt Status. */ -}CMPK_INTR_STA_T; - -// For PCI -/* 2. RX side: Beacon state packet. */ -typedef struct tag_Cmd_Pkt_Beacon_State -{ - UINT8 Element_ID; /* Command packet type. */ - UINT8 Length; /* Command packet length. */ - UINT16 BOK:1; /* Beacon info. */ - UINT16 Reserve:15; /* Beacon info. */ -}CMPK_BCN_STA_T; - - -/* 3. TX side: Set configuration packet. */ -typedef struct tag_Cmd_Pkt_Set_Configuration -{ - UINT8 Element_ID; /* Command packet type. */ - UINT8 Length; /* Command packet length. */ - UINT16 Reserve1; /* */ - - UINT32 Cfg_Action:1; /* Configuration info. */ - UINT32 Cfg_Type:2; /* Configuration info. */ - UINT32 Cfg_Size:2; /* Configuration info. */ - UINT32 Cfg_Reserve2:15; /* Configuration info. */ - UINT32 Cfg_Page:4; /* Configuration info. */ - UINT32 Cfg_Offset:8; /* Configuration info. */ - - UINT32 Value; /* */ - UINT32 Mask; /* */ -}CMPK_SET_CFG_T; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - - - -/* 4. Both side : TX/RX query configuraton packet. The query structure is the - same as set configuration. */ -#define CMPK_QUERY_CFG_T CMPK_SET_CFG_T - - -/* 5. Multi packet feedback status. */ -typedef struct tag_Tx_Stats_Feedback // PJ quick rxcmd 09042007 -{ - // For endian transfer --> Driver will not the same as firmware structure. - // DW 0 - UINT16 Reserve1; - UINT8 Length; // Command packet length - UINT8 Element_ID; // Command packet type - - // DW 1 - UINT16 TxFail; // Tx Fail count - UINT16 TxOK; // Tx ok count - - // DW 2 - UINT16 TxMCOK; // tx multicast - UINT16 TxRetry; // Tx Retry count - - // DW 3 - UINT16 TxUCOK; // tx unicast - UINT16 TxBCOK; // tx broadcast - - // DW 4 - UINT16 TxBCFail; // - UINT16 TxMCFail; // - - // DW 5 - UINT16 Reserve2; // - UINT16 TxUCFail; // - - // DW 6-8 - UINT32 TxMCLength; - UINT32 TxBCLength; - UINT32 TxUCLength; - - // DW 9 - UINT16 Reserve3_23; - UINT8 Reserve3_1; - UINT8 Rate; -}CMPK_TX_STATUS_T; - - -/* 6. Debug feedback message. */ -/* 2007/10/23 MH Define RX debug message */ -typedef struct tag_Rx_Debug_Message_Feedback -{ - // For endian transfer --> for driver - // DW 0 - UINT16 Reserve1; - UINT8 Length; // Command packet length - UINT8 Element_ID; // Command packet type - - // DW 1-?? - // Variable debug message. - -}CMPK_RX_DBGINFO_T; - - -/* 2008/03/20 MH Define transmit rate history. For big endian format. */ -typedef struct tag_Tx_Rate_History -{ - // For endian transfer --> for driver - // DW 0 - UINT8 Element_ID; // Command packet type - UINT8 Length; // Command packet length - UINT16 Reserved1; - - // DW 1-2 CCK rate counter - UINT16 CCK[4]; - - // DW 3-6 - UINT16 OFDM[8]; - - // DW 7-14 - //UINT16 MCS_BW0_SG0[16]; - - // DW 15-22 - //UINT16 MCS_BW1_SG0[16]; - - // DW 23-30 - //UINT16 MCS_BW0_SG1[16]; - - // DW 31-38 - //UINT16 MCS_BW1_SG1[16]; - - // DW 7-14 BW=0 SG=0 - // DW 15-22 BW=1 SG=0 - // DW 23-30 BW=0 SG=1 - // DW 31-38 BW=1 SG=1 - UINT16 HT_MCS[4][16]; - -}CMPK_TX_RAHIS_T; - -/* Define element ID of command packet. */ -typedef enum tag_Command_Packet_Directories -{ - RX_TX_FEEDBACK = 0, - - RX_BEACON_STATE = 1, - TX_SET_CONFIG = 2, - BOTH_QUERY_CONFIG = 3, - RX_TX_STATUS = 4, - RX_DBGINFO_FEEDBACK = 5, - RX_TX_PER_PKT_FEEDBACK = 6, - RX_TX_RATE_HISTORY = 7, - RX_TX_TSSI_MEAN_BACK = 8, - RX_CMD_ELE_MAX -}CMPK_ELEMENT_E; - - -/* Define packet type. */ -typedef enum tag_Packet_Type -{ - TYPE_PACKET_BROADCAST = 0, - TYPE_PACKET_MULTICAST, - TYPE_PACKET_UNICAST, - TYPE_PACKET_TYPE_MAX -}CMPK_PKT_TYPE_E; -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -/*------------------------Export global variable----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ - -extern RT_STATUS -SendTxCommandPacket( - IN PADAPTER pAdapter, - IN PVOID pData, - IN u4Byte DataLen - ); - -extern RT_STATUS CMPK_Message_Handle_Tx( - IN PADAPTER pAdapter, - IN pu1Byte CodeVirtualAddrress, - IN u4Byte PacketType, - IN u4Byte BufferLen); -extern UINT32 CMPK_Message_Handle_Rx(PADAPTER pAdapter, PRT_RFD pRfd); - - -/* Temporarily extern for debug utility. */ -extern void cmpk_DisplayTxStatistic(PADAPTER Adapter); -/*--------------------------Exported Function prototype---------------------*/ - - -#endif /* __HAL90_CMD_PKT_H__ */ - - -/* End of hal90cmdpkt.h */ diff --git a/network/wlan/WDI/HAL/halDbgCmd.h b/network/wlan/WDI/HAL/halDbgCmd.h deleted file mode 100644 index 4d1aca04..00000000 --- a/network/wlan/WDI/HAL/halDbgCmd.h +++ /dev/null @@ -1,331 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2007, RealTEK Technology Inc. All Right Reserved. - * - * Module: hal90DbgCmd.h (RTL8190 Header H File) - * - * - * Note: The header file records the command format between UI and - * driver. And necessary constant for debug command handler. - * - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * 05/30/2007 MHC Create initial version. - * 05/30/2007 MHC 1. Support debug command from UI. We define command - * format between driver and UI. - * 2. We copy debug command definition from firmware. - * 06/07/2007 MHC We do not use MIPS GNU header file to support sprintf. - * 06/08/2007 MHC Add RX command format structure. - * 06/11/2007 MHC 1. Copy debug command strcuture from MP UI. Programmer - * must main the table when they add command. - * 06/15/2007 MHC 1. Define current debug command index and do test. We do - * not need to send the header files to UI and UI can - * support the new command immediately. - * 2. Add directory definition for driver. - * 07/13/2007 MHC 1. Define debug print macro which is controlled by - * different debug flag. - * 2. Define different debug flag. - * 07/31/2007 MHC 1. Add debug command to count ISR time. - * 08/15/2007 MHC Add debug command index for other commands. - * 08/16/2007 MHC Extern global variable and API for debug command betwen - * UI and firmware. - * -******************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __HAL90_DEBUG_COMMAND_H__ -#define __HAL90_DEBUG_COMMAND_H__ - - -/*--------------------------Define Parameters-------------------------------*/ -#define DBG_MODE_EVENT 0x00000001 -#define DCMD_MAX_DIRECTORY 1000 -#define DCMD_STRING_LENGTHH 32 -#define DCMD_MAX_NUM 1000 - - -/* 2007/03/13 MH Support byte/word/long R/W check. */ -#define DCMD_BYTE 1 -#define DCMD_WORD 2 -#define DCMD_LONG 4 - - - -/* 2007/05/30 MH Define constatn for debug command from UI. */ -#define DCMD_DRIVER_CMD 0 -#define DCMD_FIRMWARE_CMD 1 - -/*--------------------------Define Parameters-------------------------------*/ - - -/*------------------------------Define structure----------------------------*/ -typedef struct tag_Debug_CoMmanD -{ - char *name; /* Command string */ - char *desc; /* Description */ - char *usage; /* Usage of the command */ - int directory; /* Directory */ - int usage_counter; /* Usage counter for optimization */ - int (*cmd_func)(IN PADAPTER pAdapter, - IN INT32 Cmd_Idx, - IN INT32 Argc, - IN INT8 *pArgs[]); - /* Command function pointer */ -}DCMD_T; - -/* 2007/06/15 MH Define driver debug command's directory. */ -typedef enum tag_CMD_Directories -{ - /* General command. */ - COMMON = 1, - DYNAMIC_SCHEME = 2, - //Add for 92S shared commands - CMD_92S = 3, - TX_PROCESS_CMD, - RX_PROCESS_CMD, - SECURITY_CMD, - /* Private command. You can add according your requirement. */ - PRIVATE = 11, - MY_LOVELY_CMD, - MY_DISLIKE_CMD, - - /* Directory to display all command index. */ - CMD_INDEX_DISPLAY = 100, - - /* Last directory definition. */ - OTHERS -}DCMD_DIRECTORY_E; - -typedef enum tag_DCMD_Status_Code -{ - CMD_EXECUTE_OK = 0, - CMD_EXECUTE_FAIL, - CMD_PASSWORD_OK, - CMD_PASSWORD_FAIL, - CMD_ARGUMENT_FAIL, - CMD_NO_MATCH_COMMAND, - CMD_NOT_COMMAND, - CMD_NEW_COMMAND, - CMD_PREVIOUS_COMMAND -}DCMD_STATUS_E; - -/* 2006/11/28 MH We only support below three type for scanf. */ -typedef enum tag_DCMD_Scanf_Type_Definition -{ - DCMD_DECIMAL = 1, - DCMD_HEX, - DCMD_CHAR, - DCMD_SCAN_LIMIT = 10 -}DCMD_STP_DEF_E; - -/* 2007/05/30 MH Define TX command format from UI to driver. */ -#define MAX_ARGC 20 // Only used here. -#define MAX_ARGV 16 // Only used here. -typedef struct tag_Cmd_Format_UI_To_Driver -{ - INT32 Op; /* Command packet type. */ - INT32 Length; /* Command packet length. */ - INT32 Cmd_Idx; /* Command index. */ - INT32 Argc; /* Argument counter. */ - INT8 Argv[MAX_ARGC][MAX_ARGV]; /* Argument value array. */ -}DCMD_TMSG_T, *PDCMD_TMSG_T; - -/* 2007/06/08 MH Define RX command format from driver to UI. */ -#define MAX_RETURN_INFO_SIZE 240 // Only used here. -#define RX_HEADER_SIZE 16 //OP+status+segment+length -typedef struct tag_Cmd_Format_Driver_To_UI -{ - INT32 Op; /* Command packet type. */ - INT32 Status; /* Command status0/1/2. */ - INT32 Segment; /* Command segment num. */ - INT32 Length; /* Return info size. */ - INT8 ReturnInfo[MAX_RETURN_INFO_SIZE]; /* Argument value array. */ -}DCMD_RMSG_T; - -/* The debug command table is used for UI to do parser. */ -typedef enum _DBG_DRIVER_CMD_INDEX{ - DBG_CMD_HELP = 0 , - DBG_CMD_REG_READ = 1 , - DBG_CMD_REG_WRITE = 2 , - DBG_CMD_ADAPTER_READ = 3 , - DBG_CMD_ADAPTER_WRITE = 4 , - DBG_CMD_RF_READ = 5 , - DBG_CMD_UI_DEBUG = 6 , - DBG_CMD_FLAG_CTRL = 7 , - DBG_CMD_RF_WRITE = 8 , - DBG_CMD_REG_R_2BYTE = 9 , - DBG_CMD_REG_W_2BYTE = 10, - DBG_CMD_REG_R_1BYTE = 11, - DBG_CMD_REG_W_1BYTE = 12, - DBG_CMD_DYNAMIC_CTRL = 13, - DBG_CMD_BANDWIDTH_SWITCH = 14, - DBG_CMD_TX_RATE_HISTORY = 15, - DBG_CMD_TX_FW_CTRL = 16, - DBG_CMD_FORCE_TX_FW_INFO = 17, - DBG_CMD_FW_DYNAMIC_CTRL = 18 , - DBG_CMD_RX_PATH_SELECTION = 19, - DBG_CMD_92SE_FPGA_TEST = 20, - DBG_CMD_INFO_DUMP = 21, - DBG_CMD_92S_FWBUF_DUMP = 22, - DBG_CMD_SEC_CTRL = 23, - DBG_CMD_REG_DUMP = 24, - DBG_CMD_92S_RESET = 25, - DBG_CMD_EEPROM_READ = 26, - DBG_CMD_EFUSE_READ = 27, - DBG_CMD_SHADOW_OPERATE = 28, - DBG_CMD_DBG_CONTROL = 29, - DBG_CMD_USB_PHYR = 30, - DBG_CMD_USB_PHYW = 31, - DBG_CMD_SHORTCUT = 32, - DBG_CMD_INDICATE_SETTING = 33, - DBG_CMD_MAX_IDX -}DBG_DRIVER_CMD_INDEX; - -typedef enum _DBG_CONTROL_TYPE -{ - DBG_CTRL_PWRSAVE_DISABLE = 0, - DBG_CTRL_INBANDNOISE = 1, - DBG_CTRL_LINK_QUALITY = 2, - DBG_CTRL_SIGNAL_STRENGTH = 3, - DBG_CTRL_PSD_MONITOR = 4, - DBG_CTRL_BT_PROFILE = 5, - DBG_CTRL_BT_COEX_ENABLE = 6, - DBG_CTRL_TEST = 7, - DBG_CTRL_BT_HCI_INFO = 8, - DBG_CTRL_BT_HS_INFO = 9, - DBG_CTRL_RESET_BT_DBG = 10, - DBG_CTRL_BT_COEX_INFO = 11, - DBG_CTRL_BT_LOGO_TEST = 12, - DBG_CTRL_SEND_H2C = 13, - DBG_CTRL_SET_EDCA = 14, - DBG_CTRL_SET_COEX_MODE = 15, - DBG_CTRL_DEC_BT_PWR = 16, - DBG_CTRL_CTRL_AGGREGATION = 17, - DBG_CTRL_AGGREGATE_BUF_SIZE = 18, - DBG_CTRL_RX_RATE_INFO = 19, - DBG_CTRL_SET_DIG = 20, - DBG_CTRL_BT_AFH_MAP = 21, - DBG_CTRL_BT_IGNORE_WLAN_ACT = 22, - DBG_CTRL_BB_INFO = 23, - DBG_CTRL_SET_DBG_MON_COMP = 24, - DBG_CTRL_SHOW_WIFI_BASIC = 25, - DBG_CTRL_SHOW_TX_INFO = 26, - DBG_CTRL_SHOW_NDIS_INFO = 27, - DBG_CTRL_SHOW_RX_INFO = 28, - DBG_CTRL_SHOW_BASIC_PROFILE = 29, - DBG_CTRL_SHOW_WOL_INFO = 30, - DBG_CTRL_SHOW_PWR_SVG_INFO = 31, - DBG_CTRL_SHOW_antdet_INFO = 32, - DBG_CTRL_SHOW_SKU_INFO = 33, - - DBG_CTRL_SET_RX_REORDER = 34, //2015/01/21 gary add - DBG_CTRL_SET_TX_HT_SUPPORT_CAP = 35, //2015/01/22 gary add - DBG_CTRL_SET_TX_VHT_SUPPORT_CAP = 36, - DBG_CTRL_SET_RX_HT_SUPPORT_CAP = 37, - DBG_CTRL_SET_RX_VHT_SUPPORT_CAP = 38, - DBG_CTRL_SHOW_TX_USB_AGG_INFO = 39, - DBG_CTRL_SHOW_RX_USB_AGG_INFO = 40, - DBG_CTRL_SET_TX_USB_AGG = 41, - DBG_CTRL_SET_RX_USB_AGG = 42, - - DBG_CTRL_BB_RXHANG_INFO = 43, - DBG_CTRL_SET_PWR_TABLE = 44, - DBG_CTRL_SHOW_CHANNELPLAN_INFO = 45, - DBG_CTRL_DUMP_PWR_TABLE = 46, - DBG_CTRL_SHOW_RSSI_INFO = 47, - /** in order to work with Sigma Console ** - ************use value 29,30,31***********/ - DBG_CTRL_NAN_OPERATION = 48,//29, - DBG_CTRL_NAN_STATE = 49,//30, - DBG_CTRL_NAN_VARIABLE = 50,//31, - /***********************************/ - - DBG_CTRL_MAX -}DBG_CONTROL_TYPE; - -#define DCMD_EFUSE_MAP_MAX_LEN 1024 -#define DCMD_EFUSE_MAX_SECTION_NUM 128 - - - -// 2008/03/26 MH We define a simple tx command format for 92 series. No dbg support. -typedef struct tag_Tx_Config_Cmd_Format -{ - UINT32 Op; /* Command packet type. */ - UINT32 Length; /* Command packet length. */ - UINT32 Value; -}DCMD_TXCMD_T, *PDCMD_TXCMD_T; - -/* The simple tx command OP code. */ -typedef enum _tag_TxCmd_Config_Index{ - TXCMD_TXRA_HISTORY_CTRL = 0xFF900000, - TXCMD_RESET_TX_PKT_BUFF = 0xFF900001, - TXCMD_RESET_RX_PKT_BUFF = 0xFF900002, - TXCMD_SET_TX_DURATION = 0xFF900003, - TXCMD_SET_RX_RSSI = 0xFF900004, - TXCMD_SET_TX_PWR_TRACKING = 0xFF900005, - TXCMD_XXXX_CTRL, -}DCMD_TXCMD_OP; -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -//extern DCMD_T dcmd_Commands[]; -#if 0 // Move to debug.h -extern UINT32 DBGP_Type[DBGP_TYPE_MAX]; -extern DBGP_HEAD_T DBGP_Head; -#endif -extern INT32 DCMD_OP_Type; - -// for test -//extern UINT8 nheader[100][24]; -//extern UINT8 llcheader[100][24]; - - -// Declare for 92S debug, delete later !!! -extern u4Byte usb_speed; -/*------------------------Export global variable----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ -#define dcmd_sprintf RtlStringCchVPrintfW - -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ -extern INT32 DCMD_Message_Handler_Tx(IN PADAPTER pAdapter, - IN ULONG length, - IN PVOID pBuffer); -extern INT32 DCMD_Message_Handler_Check( IN ULONG Length, - OUT PVOID pBuffer, - OUT ULONG *pLength); -extern INT32 DCMD_Message_Handler_Rx(IN INT32 DbgType, - IN ULONG Length, - OUT PVOID pBuffer, - OUT ULONG *pLength); -extern INT32 DCMD_Save_FW_Dbg_Info( IN ULONG Length, - IN PVOID pBuffer); - - -void -DbgCmdWorkItemCallBack( - IN PVOID pContext -); - - -#define DCMD_Printf(_pMsg) -#define DCMD_Scanf(_pInput, _Type, _pOutput) - - - -/*--------------------------Exported Function prototype---------------------*/ - - -#endif /* __HAL90_DEBUG_COMMAND_H__ */ - - -/* End of hal90DbgCmd.h */ diff --git a/network/wlan/WDI/HAL/phydm/FileEnc.exe b/network/wlan/WDI/HAL/phydm/FileEnc.exe deleted file mode 100644 index ef3d43e1..00000000 Binary files a/network/wlan/WDI/HAL/phydm/FileEnc.exe and /dev/null differ diff --git a/network/wlan/WDI/HAL/phydm/development_note.txt b/network/wlan/WDI/HAL/phydm/development_note.txt deleted file mode 100644 index f83d166b..00000000 --- a/network/wlan/WDI/HAL/phydm/development_note.txt +++ /dev/null @@ -1,1667 +0,0 @@ --------------------------------------------------------------------------------- -<01/05/2015 23:10 Dino Reviewer: > -New Files: -Modified Files: - HAL/OUTSRC/HalPhyRf.c - HAL/OUTSRC/phydm.c - HAL/OUTSRC/phydm.h - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/phydm_debug.c - HAL/OUTSRC/phydm_HWConfig.c - HAL/OUTSRC/phydm_PowerTracking.h - HAL/OUTSRC/phydm_types.h - -Change Notes: - 1.Merge MERGE_TEMP to RTWLAN_TRUNK - -Verification Before Checked-In: - 1. N62 buildall ok. --------------------------------------------------------------------------------- -<01/05/2015 15:20 Dino Reviewer: Luke > -New Files: -Modified Files: - HAL/HalH2cIOCmd.h - HAL/OUTSRC/development_note2012.txt - HAL/OUTSRC/phydm.c - HAL/OUTSRC/phydm.h - HAL/OUTSRC/phydm_debug.c - HAL/OUTSRC/phydm_HWConfig.h - HAL/OUTSRC/phydm_interface.c - HAL/OUTSRC/phydm_interface.h - HAL/OUTSRC/phydm_PathDiv.c - HAL/OUTSRC/phydm_PowerTracking.c - HAL/OUTSRC/phydm_PowerTracking.h - HAL/OUTSRC/phydm_precomp.h - HAL/OUTSRC/phydm_RaInfo.c - HAL/OUTSRC/phydm_RaInfo.h - HAL/OUTSRC/phydm_types.h - HAL/rtl8814A/Hal8814AFirmware.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - -Change Notes: - 1.Merge MERGE_TEMP to RTWLAN_TRUNK - -Verification Before Checked-In: - 1. N62 buildall ok. --------------------------------------------------------------------------------- -<12/31/2014 15:20 Dino Reviewer: Luke > -New Files: -Modified Files: - HAL/OUTSRC/phydm_AntDiv.c - HEADER/TypeDef.h - -Change Notes: - 1.Remove BuddyAdapter - -Verification Before Checked-In: - 1. N62 buildall ok. --------------------------------------------------------------------------------- -<12/31/2014 14:40 Dino Reviewer: Luke > -New Files: -Modified Files: - HAL/OUTSRC/HalPhyRf.h - HAL/OUTSRC/phydm.c - HAL/OUTSRC/phydm.h - HAL/OUTSRC/phydm_AntDiv.c - HAL/OUTSRC/phydm_AntDiv.h - HAL/OUTSRC/phydm_debug.c - HAL/OUTSRC/phydm_HWConfig.c - HAL/OUTSRC/phydm_PathDiv.c - HAL/OUTSRC/phydm_PathDiv.h - HAL/OUTSRC/phydm_precomp.h - HAL/OUTSRC/phydm_types.h - HAL/OUTSRC/rtl8192c/phydm_RTL8192C.c - HAL/OUTSRC/rtl8192c/phydm_RTL8192C.h - HAL/OUTSRC/rtl8812a/phydm_RTL8812A.c - HEADER/TypeDef.h - -Change Notes: - 1.Merge MERGE_TEMP to RTWLAN_TRUNK - -Issue Tracking: - [PHYDM-3] - -Verification Before Checked-In: - 1. N62 buildall ok. --------------------------------------------------------------------------------- -<2014/12/30 11:25 Stanley Reviewer: Luke > -Modified Files: - HAL/OUTSRC/phydm_CfoTracking.c - -Change Notes: - 1. Disable CFO tracking for all IC - -Verification Before Checked-In: - 1.N62 build all ok - --------------------------------------------------------------------------------- -<2014/12/29 18:50 Luke.Lee Reviewer: Wilson > -Modified Files: - HAL/OUTSRC/phydm_debug.c - HAL/OUTSRC/phydm_DynamicTxPower.c - HAL/OUTSRC/phydm_DynamicTxPower.h - -Change Notes: - 1. Merged from MERGE_TEMP - -Verification Before Checked-In: - 1.N63 build all ok - --------------------------------------------------------------------------------- -<2014/12/26 18:50 Luke.Lee Reviewer: Stanley > -Modified Files: - HAL/OUTSRC/phydm_debug.c - HAL/OUTSRC/phydm_debug.h - HAL/OUTSRC/phydm_DIG.c - HAL/OUTSRC/phydm_DIG.h - HAL/OUTSRC/phydm_DynamicBBPowerSaving.h - HAL/OUTSRC/phydm_pre_define.h - HAL/OUTSRC/phydm_reg.h - -Change Notes: - 1. Merged from MERGE_TEMP - -Verification Before Checked-In: - 1.N63 build all ok - --------------------------------------------------------------------------------- -<2014/12/24 17:20 Luke.Lee Reviewer: Dino > -Modified Files: - HAL/HalCommon.c - HAL/OUTSRC/phydm.c - HAL/OUTSRC/phydm.h - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/phydm_CfoTracking.c - HAL/OUTSRC/phydm_CfoTracking.h - HAL/OUTSRC/phydm_RegDefine11AC.h - HAL/OUTSRC/phydm_RegDefine11N.h - HAL/OUTSRC/phydm_types.h - HAL/rtl8192C/rtl8192ce/Hal8192CEGen.c - HAL/rtl8723B/rtl8723be/Hal8723BEGen.c - HAL/rtl8723B/rtl8723bs/Hal8723BSdioGen.c - HAL/rtl8723B/rtl8723bu/Hal8723BUsbGen.c - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - PLATFORM/NDIS6/N6C_Req.c - -Change Notes: - 1. Merged from MERGE_TEMP - -Verification Before Checked-In: - 1.N63 build all ok - --------------------------------------------------------------------------------- -<2014/12/24 21:00 Luke.Lee Reviewer: Stanley > -Modified Files: - HAL/halDbgCmd.c - HAL/halDbgCmd.h - HAL/HalDM.c - HAL/OUTSRC/phydm.c - HAL/OUTSRC/phydm.h - HAL/OUTSRC/phydm_debug.c - HAL/OUTSRC/phydm_debug.h - HAL/OUTSRC/phydm_interface.h - HEADER/PrecompInc.h - -Change Notes: - 1. Merged from MERGE_TEMP - -Verification Before Checked-In: - 1.N62/N63 build all ok - 2.8812AU ping OK - 3. CLI echo cmd test OK --------------------------------------------------------------------------------- -<2014/12/23 21:00 Luke.Lee Reviewer: Dino > -Modified Files: - HAL/OUTSRC/phydm_ACS.c - HAL/OUTSRC/phydm_ACS.h - -New Files: - HAL/OUTSRC/phydm_AntDect.c - HAL/OUTSRC/phydm_AntDect.h - HAL/OUTSRC/phydm_NoiseMonitor.c - HAL/OUTSRC/phydm_NoiseMonitor.h - HAL/OUTSRC/phydm_PowerTracking.c - HAL/OUTSRC/phydm_PowerTracking.h - HAL/OUTSRC/phydm_pre_define.h - HAL/OUTSRC/phydm_RXHP.c - HAL/OUTSRC/phydm_RXHP.h - -Change Notes: - 1. Merged from MERGE_TEMP - -Verification Before Checked-In: - 1.N62 build all ok - --------------------------------------------------------------------------------- -<2014/12/23 20:20 Luke.Lee Reviewer: Stanley > -Modified Files: - HAL/OUTSRC/phydm_EdcaTurboCheck.c - HAL/OUTSRC/phydm_EdcaTurboCheck.h - -Deleted Files: - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_FW.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_FW.h - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_MAC.c - -Change Notes: - 1. Merged from MERGE_TEMP - -Verification Before Checked-In: - 1.N62 build all ok - --------------------------------------------------------------------------------- -<2014/12/17 19:40 YuChen Reviewer: Stanley > -Modified Files: - HAL/OUTSRC/phydm.h - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/PhyDM_Adaptivity.h - HEADER/RegCommon.h - HEADER/TypeDef.h - PLATFORM/NDIS5/N5C_Init.c - PLATFORM/NDIS5/Ndis5Common.h - PLATFORM/NDIS6/N6C_Init.c - PLATFORM/NDIS6/Ndis6Common.h - -Change Notes: - 1. update AdaptivityV8.3 add DCbackoff registry - -Verification Before Checked-In: - 1.N62/N63 build all ok - --------------------------------------------------------------------------------- -<2014/12/16 19:50 Stanley Reviewer: YuChen > -Modified Files: - HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.h - HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.h - HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.h - -Change Notes: - 1. Update RTL8723B_MP_Parameter_D-cut_v16_20141216 - - Set 0x421=0xf. Do not report tx-report of MGNT or Hi queue packet - 2. Update WaxApple_V2.13.2.3 - -Verification Before Checked-In: - 1. N62 build all ok - --------------------------------------------------------------------------------- -<2014/12/09 22:00 Luke.Lee Reviewer: Wilson > -Modified Files: - -Change Notes: - 1. Rename PHYDM files - 2. Clear compilation errors due to renaming - -Verification Before Checked-In: - 1. build Win8.1 x64 ok --------------------------------------------------------------------------------- -<2014/12/09 20:30 Luke.Lee Reviewer: Wilson > -Modified Files: - -Change Notes: - 1. Remove unnessary files - -Verification Before Checked-In: - 1. build Win7X86 ok --------------------------------------------------------------------------------- -<2014/12/09 12:40 James Reviewer: Luke > -Modified Files: - HAL/OUTSRC/rtl8723b/HalPhyRf_8723B.c - -Change Notes: - 1. modify the boundary of IQK result for 8723B F-cut - -Verification Before Checked-In: - 1. build ok --------------------------------------------------------------------------------- -<2014/11/26 14:30 YuChen Reviewer: Luke > -Modified Files: - hal/OUTSRC/PhyDM_Adaptivity.c - hal/OUTSRC/PhyDM_Adaptivity.h - -Change Notes: - 1. Update Adaptivity V8.2 - 2. Set Forgetting factor = 0x0 for ac series IC - -Verification Before Checked-In: - 1. build ok --------------------------------------------------------------------------------- -<2014/11/19 10:00 YuChen Reviewer: Luke > -Modified Files: - HAL/halDbgCmd.c - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_RegDefine11AC.h - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/PhyDM_Adaptivity.h - -Change Notes: - 1. Update Adaptivity V8.1 - 2. Sync with Merge temp - -Verification Before Checked-In: - 1. build ok --------------------------------------------------------------------------------- -<2014/11/17 11:00 YuChen> -Modified Files: - HAL/halDbgCmd.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/PhyDM_Adaptivity.h - -Change Notes: - 1. Refine IGI upperBound for 8723B B-cut - 2. Only use BB reg to Control EDCCA - -Verification Before Checked-In: - 1. N62 build all ok --------------------------------------------------------------------------------- -<2014/11/11 14:00 Stanley Reviewer: Luke > -Modified Files: - HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.c - HAL/OUTSRC/rtl8723b/MPChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8723b/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_SDIO.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TXPWR_LMT.txt - -Change Notes: - 1. Update RTL8723B MP Parameter v14 - 2. Remove 0xe0 setting in MP Parameter for LED - -Verification Before Checked-In: - 1. N62 build all ok --------------------------------------------------------------------------------- -<2014/10/29 17:00 YuChen> -Modified Files: - HAL/OUTSRC/PhyDM_Adaptivity.c - -Change Notes: - 1. Set EDCCA lambda forgetting factor = 0 - -Verification Before Checked-In: - 1. N62 build all ok - 2. TP ok --------------------------------------------------------------------------------- -<2014/10/15 18:15 Stanley Reviewer: YuChen> -Modified Files: - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - -Change Notes: - 1. Modify DIG flow for adaptivity (sync from merge temp v31757) - 2. Remove dummy prototype - -Verification Before Checked-In: - 1. N62 build all ok --------------------------------------------------------------------------------- -<2014/10/14 11:10 YuChen Reviewer: Luke> -Modified Files: - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/PhyDM_Adaptivity.h - -Change Notes: - 1. sync SD7 adaptivity_BSOD function to prevent BSOD - 2. Bug Fix, disable enable adc_mask to prevent 8812 EDCCA hang - -Verification Before Checked-In: - 1. build all ok --------------------------------------------------------------------------------- -<2014/10/13 15:15 Stanley Reviewer: Luke> -Modified Files: - HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.c - HAL/OUTSRC/rtl8723b/MPChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8723b/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_SDIO.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/TXPWR_LMT.txt - -Change Notes: - 1. [8723B]Update RTL8723B_MP_Parameter_D-cut_v13_20141013 - -Verification Before Checked-In: - 1. N62 build all ok --------------------------------------------------------------------------------- -<2014/10/03 16:15 Jenyu> -Modified Files: - HAL/OUTSRC/rtl8723b/HalPhyRf_8723B.c - -Change Notes: - 1. IQK version:V2.8 20141002 - 2. modify IQK flow - 3. PA all off at IQK - 4. 8723B D-cut still run IQK - -Verification Before Checked-In: - 1. N62 build all ok --------------------------------------------------------------------------------- -<2014/10/03 14:50 YuChen> -Modified Files: - OUTSRC/PhyDM_Adaptivity.c - OUTSRC/PhyDM_Adaptivity.h - OUTSRC/odm_DIG.c - -Change Notes: - 1. Update Adaptivity V7.2 - 2. Adaptivity : - 2.1 Remove unnecessary condition(don't concern Band4 condition for ac series IC(only NIC)) - 2.2 Remove NHM function and other dummy code - 3. DIG - 3.1 Add LPS write DIG condition - -Verification Before Checked-In: - 1. N62/N63 build all ok --------------------------------------------------------------------------------- -<2014/10/03 11:15 YuChen> -Modified Files: - -HAL/OUTSRC/PhyDM_Adaptivity.c - -Change Notes: - 1.fix regulation judgement error - 2.fix band 4 problem - -Verification Before Checked-In: - 1. N62/N63 build all ok --------------------------------------------------------------------------------- -<2014/09/18 20:40 James Reviewer: Luke > -Modified Files: - HAL/Jaguar/Hal8812Firmware.c - HAL/Jaguar/Hal8812Firmware.h - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_interface.c - HAL/OUTSRC/odm_interface.h - HAL/OUTSRC/rtl8812a/HalHWImg8812A_FW.c - HAL/OUTSRC/rtl8812a/HalHWImg8812A_FW.h - HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.c - HAL/OUTSRC/rtl8812a/MPChip/FW/FW_NIC.BIN - HAL/OUTSRC/rtl8812a/MPChip/FW/FW_NIC_BT.BIN - HAL/OUTSRC/rtl8812a/MPChip/FW/FW_WoWLAN.BIN - -Change Notes: - 1. update IQK v2.1 - 2. update FW v36 - 3. open FW IQK - 4. fix LCK bug - -Verification Before Checked-In: - 1. N62/N63 build all ok ---------------------------------------------------------------------------- -<2014/08/12 10:20 YuChen Reviewer:Stanley > -Modified Files: - OUTSRC/PhyDM_Adaptivity.c - -Change Notes: - Fix SearchPwdBLowerBound() in MPdriver - -Verification Before Checked-In: - 1.make all ok ---------------------------------------------------------------------------- -<2014/08/06 18:00 YuChen Reviewer:Stanley > -Modified Files: - HAL/halDbgCmd.c - OUTSRC/odm_debug.c - OUTSRC/odm_debug.h - OUTSRC/PhyDM_Adaptivity.c - -Change Notes: - Add Adaptivity debug message - cmd 13 0 1 a - -Verification Before Checked-In: - 1.N62/N63 build all ok ---------------------------------------------------------------------------- -<2014/08/04 17:00 YuChen Reviewer:Luke.Lee > -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_ACS.c - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HAL/OUTSRC/odm_precomp.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - -Add Files: - HAL/OUTSRC/PhyDM_Adaptivity.c - HAL/OUTSRC/PhyDM_Adaptivity.h - -Change Notes: - 1. Moving adaptivity function from odm_DIG.c to PhyDM_Adaptivity.c - -Verification Before Checked-In: - 1.N62/N63 build all ok - ---------------------------------------------------------------------------- -<2014/07/22 11:55 Stanley Reviewer:James > -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - -Change Notes: - 1. Ignore DIG mechanism if IGI has been changed by other mechanism - 2. bSTA flag need to be reset when STA mode - -Verification Before Checked-In: - 1.N62 build all ok - --------------------------------------------------------------------------------- -<2014/07/21 17:30 YuChen Reviewer: Luke.Lee > -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HEADER/RegCommon.h - HEADER/TypeDef.h - PLATFORM/NDIS5/N5C_Init.c - PLATFORM/NDIS5/Ndis5Common.h - PLATFORM/NDIS6/N6C_Init.c - PLATFORM/NDIS6/Ndis6Common.h - -Change Notes: - 1. update Adaptivity V7.1 - 2. total legal version - -Verification Before Checked-In: - 1.N62/N63 build all ok --------------------------------------------------------------------------------- -<2014/07/11 16:20 YuChen Reviewer: Stanley > -Modified Files: - HAL/halDbgCmd.c - HAL/HalDM.c - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HEADER/RegCommon.h - HEADER/TypeDef.h - PLATFORM/NDIS5/N5C_Init.c - PLATFORM/NDIS5/Ndis5Common.h - PLATFORM/NDIS6/N6C_Init.c - PLATFORM/NDIS6/Ndis6Common.h - - -Change Notes: - 1. update Adaptivity V7.0 - 2. add Registry NHM_enable for performance improve(default off) - 3. temporary turn off updatePowerTrainingStatus - -Verification Before Checked-In: - 1.N62/N63 build all ok - --------------------------------------------------------------------------------- -<2014/07/08 10:05 YuChen Reviewer: Stanley > -Modified Files: - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_ACS.c - HAL/OUTSRC/odm_ACS.h - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - -Change Notes: - 1. update Adaptivity V6.2 - 2. Support Repeater mode(for AP) - 3. Fix some unexpected error - 4. increase lab test possibility - -Verification Before Checked-In: - 1.N62 & N63 build all ok --------------------------------------------------------------------------------- -<2014/07/01 13:30 YuChen Reviewer: Stanley > -Modified Files: - OUTSRC/odm_DIG.c - -Change Notes: - 1. Adjust Adaptivity threshold from -69dBm to -72dBm incase of shortcontrol - signal fail problem. - -Verification Before Checked-In: - 1.N62/N63 buildall ok --------------------------------------------------------------------------------- -<2014/06/27 14:40 YuChen Reviewer: Stanley > -Modified Files: - OUTSRC/odm.c - OUTSRC/odm.h - OUTSRC/odm_DIG.c - OUTSRC/odm_DIG.h - -Change Notes: -Update Adaptivity V6.1 - 1. Support Reapeater mode( for lab test only) - 2. Refine test condition, we can't reset EDCCA threshold - when interference is exist - -Verification Before Checked-In: - 1.N62/N63 buildall ok --------------------------------------------------------------------------------- -<2014/06/20 19:40 James Reviewer: LukeLee > -Modified Files: - HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.c - HAL/OUTSRC/rtl8821a/HalPhyRf_8821A.c - -Change Notes: - 1. IQK remove PMAC for MAC TX hang - -Verification Before Checked-In: - 1.N62 build all ok - --------------------------------------------------------------------------------- -<2014/06/19 18:40 Stanley Reviewer: Dino > -Modified Files: - HAL/OUTSRC/rtl8188e/Hal8188ERateAdaptive.c - -Change Notes: - 1. Add dynamic power training mechanism for 8188E - -Verification Before Checked-In: - 1.N62 build all ok - --------------------------------------------------------------------------------- -<2014/06/19 13:20 YuChen Reviewer: LukeLee > -Modified Files: - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_DIG.c - -Change Notes: - 1. Refine Adaptivity to V6.0, fix can't link problem - -Verification Before Checked-In: - 1.make all ok --------------------------------------------------------------------------------- -<2014/06/18 14:45 YuChen Reviewer:Luke > -Modified Files: - OUTSRC/odm.h - OUTSRC/odm_DIG.c - OUTSRC/odm_DIG.h - OUTSRC/odm_RegDefine11AC.h - OUTSRC/odm_RegDefine11N.h - -Change Notes: - 1. Update Adaptivity V6.0 fix SearchPwdBlowerBound() - -Verification Before Checked-In: - 1.make all ok --------------------------------------------------------------------------------- -<2014/06/17 18:10 Dino Reviewer:Luke > -Modified Files: - HAL/OUTSRC/odm_AntDiv.c -Change Notes: - 1. Update the mapping table for 88E antenna diversity - -Verification Before Checked-In: - 1.N62 buildall ok --------------------------------------------------------------------------------- -<2014/06/13 18:00 Stanley Reviewer: James> -Modified Files: -Change Notes: - HAL/halDbgCmd.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_ACS.c - HAL/OUTSRC/odm_ACS.h - 1. Sync. odm_ACS.c with linux driver - - Add compile flag for linux driver - - Check support ability - - HAL/OUTSRC/odm_DIG.c - 1. Sync. odm_DIG.c with linux driver - - Fix DIG upper bound before link - - Disable forbidden IGI mechanism before link - - HAL/OUTSRC/odm_AntDiv.c - HAL/OUTSRC/odm_interface.c - HAL/OUTSRC/odm_interface.h - HAL/OUTSRC/odm_PathDiv.c - HAL/OUTSRC/odm_RaInfo.c - HAL/OUTSRC/odm_RaInfo.h - 1. Sync. odm_interface.c - - Add ODM_FillH2CCmd interface for linux driver - -Verification Before Checked-In: - 1.N62 buildall ok - --------------------------------------------------------------------------------- -<2014/06/12 16:45 YuChen> -Modified Files: - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DynamicTxPower.c - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm_PathDiv.c - HAL/OUTSRC/odm_precomp.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - -Change Notes: - [ODM Reorganization] - 1. Update Adaptivity to V5.3 sync with sd4 - 2. Remove 8723B and 8812A testchip hwimg file - -Verification Before Checked-In: - 1.N62/N63 buildall ok --------------------------------------------------------------------------------- -<2014/06/10 18:16 YuChen> -Modified Files: - HAL/OUTSRC/rtl8188e/HalHWImg8188E_BB.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_MAC.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_RF.c - HAL/OUTSRC/rtl8188e/MPChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8188e/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/TXPWR_LMT.txt - -Change Notes: - [8188E] - 1. Update PHY REG V51 - Same content with V50, fix CSV logical error -Verification Before Checked-In: - 1.N62/N63 buildAll ok --------------------------------------------------------------------------------- -<2014/06/06 10:35 YuChen> -Modified Files: - HAL/OUTSRC/rtl8821a/HalHWImg8821A_BB.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_MAC.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_RF.c - HAL/OUTSRC/rtl8821a/MPChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8821a/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8821a/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8821a/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8811AU_FEM.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8811AU_IPA.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8821A.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8821A_SAR_5mm.txt - HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8821A_SAR_8mm.txt - -Change Notes: - [8821A] - 1. Update PHY REG V41 - 0x1F = 0x00064, RC BW for 80M (for better TX mask) -Verification Before Checked-In: - 1.N62/N63 buildAll ok --------------------------------------------------------------------------------- -<2014/06/04 21:10 Stanley> -Modified Files: -Change Notes: - HAL/OUTSRC/odm_AntDiv.c - HAL/OUTSRC/odm_AntDiv.h - HAL/OUTSRC/odm_interface.c - HAL/OUTSRC/odm_interface.h - - 1. Modify SW antenna diversity method of 8723B to avoid antenna switch when BT IQK - -Verification Before Checked-In: - 1.N62 buildall ok - --------------------------------------------------------------------------------- -<2014/06/04 12:35 YuChen> -Modified Files: -Change Notes: - HAL/OUTSRC/odm_DIG.c - 1. Refine Adaptivity to V5.1 - -Verification Before Checked-In: - 1.N62/N63 buildall ok --------------------------------------------------------------------------------- -<2014/05/27 21:30 Stanley> -Modified Files: -Change Notes: - HAL/OUTSRC/odm_RaInfo.c - 1. Update BT 3.0 HS mode Rssi in odm_RSSIMonitorCheckMP - -Verification Before Checked-In: - 1.N62/N63 buildall ok - --------------------------------------------------------------------------------- -<2014/05/27 10:10 YuChen> -Modified Files: -Change Notes: - HAL/HalDM.c - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HEADER/RegCommon.h - - 1. Refine check channel plan to enable Adaptivity - -Verification Before Checked-In: - 1.N62/N63 buildall ok ------------------------------------------------------------------------------------------------------ -<2014/05/26 19:20 Stanley> -New Files: -Modified Files: -Change Notes: - HAL/OUTSRC/odm_Beamforming.c - HAL/OUTSRC/odm_Beamforming.h - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_BB.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_BB.h - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_FW.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_FW.h - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_MAC.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_MAC.h - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_RF.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_TestChip_RF.h - HAL/OUTSRC/rtl8188e/MPChip/BB/AGC_TAB_1T.txt - HAL/OUTSRC/rtl8188e/MPChip/BB/AGC_TAB_1T_ICUT.txt - HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG_1T.txt - HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG_1T_ICUT.txt - HAL/OUTSRC/rtl8188e/MPChip/MAC/MAC_REG_ICUT.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/RadioA_1T.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/RadioA_1T_ICUT.txt - HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack.txt - HAL/OUTSRC/rtl8188e/MPChip/Version.txt - HAL/OUTSRC/rtl8188e/TestChip - HAL/OUTSRC/rtl8188e/TestChip/BB - HAL/OUTSRC/rtl8188e/TestChip/BB/AGC_TAB_1T.txt - HAL/OUTSRC/rtl8188e/TestChip/BB/AGC_TAB_1T_ICUT.txt - HAL/OUTSRC/rtl8188e/TestChip/BB/PHY_REG_1T.txt - HAL/OUTSRC/rtl8188e/TestChip/BB/PHY_REG_1T_ICUT.txt - HAL/OUTSRC/rtl8188e/TestChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8188e/TestChip/FW - HAL/OUTSRC/rtl8188e/TestChip/FW/FW_AP.BIN - HAL/OUTSRC/rtl8188e/TestChip/FW/FW_NIC.BIN - HAL/OUTSRC/rtl8188e/TestChip/FW/FW_WoWLAN.BIN - HAL/OUTSRC/rtl8188e/TestChip/MAC - HAL/OUTSRC/rtl8188e/TestChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8188e/TestChip/RF - HAL/OUTSRC/rtl8188e/TestChip/RF/RadioA_1T.txt - HAL/OUTSRC/rtl8188e/TestChip/RF/TxPowerTrack.txt - HAL/OUTSRC/rtl8188e/TestChip/RF/TXPWR_LMT.txt - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_BB.c - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_BB.h - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_FW.c - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_FW.h - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_MAC.c - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_MAC.h - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_RF.c - HAL/OUTSRC/rtl8192e/HalHWImg8192E_TestChip_RF.h - HAL/OUTSRC/rtl8192e/TestChip - HAL/OUTSRC/rtl8192e/TestChip/BB - HAL/OUTSRC/rtl8192e/TestChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8192e/TestChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8192e/TestChip/FW - HAL/OUTSRC/rtl8192e/TestChip/FW/FW_AP.BIN - HAL/OUTSRC/rtl8192e/TestChip/FW/FW_NIC.BIN - HAL/OUTSRC/rtl8192e/TestChip/FW/FW_WoWLAN.BIN - HAL/OUTSRC/rtl8192e/TestChip/MAC - HAL/OUTSRC/rtl8192e/TestChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8192e/TestChip/RF - HAL/OUTSRC/rtl8192e/TestChip/RF/RadioA.txt - HAL/OUTSRC/rtl8192e/TestChip/RF/RadioB.txt - HAL/OUTSRC/rtl8192e/TestChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8192e/TestChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8192e/TestChip/RF/TxPowerTrack_SDIO.txt - HAL/OUTSRC/rtl8192e/TestChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_BB.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_BB.h - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_MAC.h - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_RF.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_RF.h - HAL/OUTSRC/rtl8821a/MPChip/Version.txt - HAL/OUTSRC/rtl8821a/TestChip - HAL/OUTSRC/rtl8821a/TestChip/BB - HAL/OUTSRC/rtl8821a/TestChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8821a/TestChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8821a/TestChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8821a/TestChip/BB/PHY_REG_PG_DNI.txt - HAL/OUTSRC/rtl8821a/TestChip/BB/PHY_REG_PG_Sercomm.txt - HAL/OUTSRC/rtl8821a/TestChip/FW - HAL/OUTSRC/rtl8821a/TestChip/FW/FW_AP.BIN - HAL/OUTSRC/rtl8821a/TestChip/FW/FW_NIC.BIN - HAL/OUTSRC/rtl8821a/TestChip/FW/FW_NIC_WOWLAN.BIN - HAL/OUTSRC/rtl8821a/TestChip/FW/FW_WoWLAN.BIN - HAL/OUTSRC/rtl8821a/TestChip/MAC - HAL/OUTSRC/rtl8821a/TestChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8821a/TestChip/RF - HAL/OUTSRC/rtl8821a/TestChip/RF/RadioA.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TXPWR_LMT.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TXPWR_LMT_8811AU_FEM.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TXPWR_LMT_8811AU_IPA.txt - HAL/OUTSRC/rtl8821a/TestChip/RF/TXPWR_LMT_8821A.txt - HAL/OUTSRC/rtl8821a/TestChip/Version.txt - 1. Remove dummy files - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<05/26/2014 17:00 Stanley> -New Files: -Modified Files: -Change Notes: - -Buildrtwe.bat -Buildrtws.bat -Buildrtwu.bat -COMMON/sources.list -HEADER/PrecompInc.h -COMMON/Beamforming.c -COMMON/Beamforming.h -HAL/Jaguar/rtl8812ae/Hal8812EDef.h -HAL/Jaguar/rtl8812ae/Hal8812EGen.c -HAL/Jaguar/rtl8812au/Hal8812AUsbGen.c -HAL/TXBF -HAL/TXBF/HalTxbf8192E.c -HAL/TXBF/HalTxbf8192E.h -HAL/TXBF/HalTxbf8814A.c -HAL/TXBF/HalTxbf8814A.h -HAL/TXBF/HalTxbf8821B.c -HAL/TXBF/HalTxbf8821B.h -HAL/TXBF/HalTxbfJaguar.c -HAL/TXBF/HalTxbfJaguar.h -HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.c -HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.h -HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.c -HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.h -HAL/OUTSRC/rtl8821b/HalPhyRf_8821B.c -HAL/OUTSRC/rtl8821b/HalPhyRf_8821B.h -HAL/PHY/Hal8812PhyCfg.c -HAL/rtl8192E/rtl8192ee/Hal8192EEGen.c -HAL/rtl8192E/rtl8192eu/Hal8192EUsbGen.c -HAL/rtl8814A/rtl8814ae/Hal8814AEGen.c -HAL/rtl8814A/rtl8814au/Hal8814AUsbGen.c -HAL/rtl8821B/rtl8821be/Hal8821BEGen.c -HAL/rtl8821B/rtl8821bu/Hal8821BUsbGen.c -1. Sync. TXBF architecture from merge_temp - -HAL/halDbgCmd.c -HAL/HalDM.c -HAL/OUTSRC/HalPhyRf.c -HAL/OUTSRC/odm.c -HAL/OUTSRC/odm.h -HAL/OUTSRC/odm_AntDiv.c -HAL/OUTSRC/odm_AntDiv.h -HAL/OUTSRC/odm_debug.c -HAL/OUTSRC/odm_debug.h -HAL/OUTSRC/odm_DIG.c -HAL/OUTSRC/odm_DIG.h -HAL/OUTSRC/odm_DynamicBBPowerSaving.c -HAL/OUTSRC/odm_EdcaTurboCheck.c -HAL/OUTSRC/odm_HWConfig.c -HAL/OUTSRC/odm_PathDiv.c -HAL/OUTSRC/odm_PathDiv.h -HAL/OUTSRC/odm_precomp.h -HAL/OUTSRC/odm_RegDefine11AC.h -HAL/OUTSRC/odm_RegDefine11N.h -HAL/OUTSRC/odm_types.h -HAL/OUTSRC/OutputHWImg.bat -HAL/PHY/Hal8188EPhyCfg.h -HAL/PHY/HalComPhyCfg.c -HAL/PHY/HalComPhyCfg.h -HAL/rtl8814A/Hal8814ACom.c -HAL/rtl8814A/rtl8814as/Hal8814ASdioGen.c -HAL/MPT/MPT_Main.c -HAL/MPT/MPT_Req.c -HAL/OUTSRC/rtl8821a/odm_RTL8821A.c -HAL/OUTSRC/rtl8821a/odm_RTL8821A.h -1. Sync. odm function with merge temp - -HAL/OUTSRC/rtl8188e/HalHWImg8188E_BB.c -HAL/OUTSRC/rtl8188e/HalHWImg8188E_BB.h -HAL/OUTSRC/rtl8188e/HalHWImg8188E_MAC.c -HAL/OUTSRC/rtl8188e/HalHWImg8188E_MAC.h -HAL/OUTSRC/rtl8188e/HalHWImg8188E_RF.c -HAL/OUTSRC/rtl8188e/HalHWImg8188E_RF.h -HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c -HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.h -HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG_PG.txt -HAL/OUTSRC/rtl8188e/MPChip/MAC/MAC_REG.txt -HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack_AP.txt -HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack_PCIE.txt -HAL/OUTSRC/rtl8188e/MPChip/RF/TxPowerTrack_USB.txt -HAL/OUTSRC/rtl8188e/MPChip/RF/TXPWR_LMT.txt -HAL/OUTSRC/rtl8188e/odm_RTL8188E.c -HAL/OUTSRC/rtl8192e/HalHWImg8192E_BB.c -HAL/OUTSRC/rtl8192e/HalHWImg8192E_BB.h -HAL/OUTSRC/rtl8192e/HalHWImg8192E_MAC.c -HAL/OUTSRC/rtl8192e/HalHWImg8192E_MAC.h -HAL/OUTSRC/rtl8192e/HalHWImg8192E_RF.c -HAL/OUTSRC/rtl8192e/HalHWImg8192E_RF.h -HAL/OUTSRC/rtl8192e/HalPhyRf_8192e.c -HAL/OUTSRC/rtl8192e/HalPhyRf_8192e.h -HAL/OUTSRC/rtl8192e/MPChip/BB/AGC_TAB.txt -HAL/OUTSRC/rtl8192e/MPChip/BB/PHY_REG.txt -HAL/OUTSRC/rtl8192e/MPChip/BB/PHY_REG_PG.txt -HAL/OUTSRC/rtl8192e/MPChip/MAC/MAC_REG.txt -HAL/OUTSRC/rtl8192e/MPChip/RF/RadioA.txt -HAL/OUTSRC/rtl8192e/MPChip/RF/RadioB.txt -HAL/OUTSRC/rtl8192e/MPChip/RF/TxPowerTrack_AP.txt -HAL/OUTSRC/rtl8192e/MPChip/RF/TxPowerTrack_PCIE.txt -HAL/OUTSRC/rtl8192e/MPChip/RF/TxPowerTrack_USB.txt -HAL/OUTSRC/rtl8192e/MPChip/RF/TXPWR_LMT.txt -HAL/OUTSRC/rtl8192e/odm_RTL8192E.c -HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.c -HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.h -HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.c -HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.h -HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.c -HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.h -HAL/OUTSRC/rtl8723b/MPChip/BB/AGC_TAB.txt -HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG.txt -HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG_PG.txt -HAL/OUTSRC/rtl8723b/MPChip/MAC/MAC_REG.txt -HAL/OUTSRC/rtl8723b/MPChip/RF/RadioA.txt -HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_AP.txt -HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_PCIE.txt -HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_SDIO.txt -HAL/OUTSRC/rtl8723b/MPChip/RF/TxPowerTrack_USB.txt -HAL/OUTSRC/rtl8723b/MPChip/RF/TXPWR_LMT.txt -HAL/OUTSRC/rtl8821a/HalHWImg8821A_BB.c -HAL/OUTSRC/rtl8821a/HalHWImg8821A_BB.h -HAL/OUTSRC/rtl8821a/HalHWImg8821A_MAC.c -HAL/OUTSRC/rtl8821a/HalHWImg8821A_MAC.h -HAL/OUTSRC/rtl8821a/HalHWImg8821A_RF.c -HAL/OUTSRC/rtl8821a/HalHWImg8821A_RF.h -HAL/OUTSRC/rtl8821a/MPChip/BB/AGC_TAB.txt -HAL/OUTSRC/rtl8821a/MPChip/BB/PHY_REG.txt -HAL/OUTSRC/rtl8821a/MPChip/BB/PHY_REG_PG.txt -HAL/OUTSRC/rtl8821a/MPChip/MAC/MAC_REG.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/RadioA.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TxPowerTrack_AP.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TxPowerTrack_PCIE.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TxPowerTrack_USB.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8811AU_FEM.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8811AU_IPA.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8821A.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8821A_SAR_5mm.txt -HAL/OUTSRC/rtl8821a/MPChip/RF/TXPWR_LMT_8821A_SAR_8mm.txt -HAL/OUTSRC/rtl8821b/MPChip/RF/RadioA.txt -HAL/OUTSRC/rtl8821b/TestChip/FW/FW_NIC.BIN -1. Sync. all parameter files from merge_temp - -HAL/sources.list.WlanE -HAL/sources.list.WlanS -HAL/sources.list.WlanU -1. Add new file in odm -2. Sync. TXBF architecture from merge_temp -3. Move all parameter files to HAL/OUTSRC - -HEADER/HalDef.h -HAL/rtl8192E/Hal8192EFirmware.c -HAL/rtl8814A/Hal8814AFirmware.c -HAL/rtl8821B/Hal8821BFirmware.c -1. Move all parameter files to HAL/OUTSRC - -Add files: -HAL/OUTSRC/rtl8188e/MPChip/BB/AGC_TAB.txt -HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG.txt -HAL/OUTSRC/rtl8188e/MPChip/RF/RadioA.txt -HAL/OUTSRC/rtl8192c/Hal8192CEHWImg.c -HAL/OUTSRC/rtl8192c/Hal8192CEHWImg.h -HAL/OUTSRC/rtl8192c/Hal8192CHWImgForWoWLAN.c -HAL/OUTSRC/rtl8192c/Hal8192CHWImgForWoWLAN.h -HAL/OUTSRC/rtl8192c/Hal8192CUHWImg.c -HAL/OUTSRC/rtl8192c/Hal8192CUHWImg.h -HAL/OUTSRC/rtl8192d/Hal8192DEHWImg.c -HAL/OUTSRC/rtl8192d/Hal8192DEHWImg.h -HAL/OUTSRC/rtl8192d/Hal8192DUHWImg.c -HAL/OUTSRC/rtl8192d/Hal8192DUHWImg.h -HAL/OUTSRC/rtl8723a/Hal8723AHWImgForWoWLAN.c -HAL/OUTSRC/rtl8723a/Hal8723AHWImgForWoWLAN.h -HAL/OUTSRC/rtl8723a/Hal8723EHWImg.c -HAL/OUTSRC/rtl8723a/Hal8723EHWImg.h -HAL/OUTSRC/rtl8723a/Hal8723EMPHWImg.c -HAL/OUTSRC/rtl8723a/Hal8723EMPHWImg.h -HAL/OUTSRC/rtl8723a/Hal8723SHWImg.c -HAL/OUTSRC/rtl8723a/Hal8723SHWImg.h -HAL/OUTSRC/rtl8723a/Hal8723SMPHWImg.c -HAL/OUTSRC/rtl8723a/Hal8723SMPHWImg.h -HAL/OUTSRC/rtl8723a/Hal8723UHWImg.c -HAL/OUTSRC/rtl8723a/Hal8723UHWImg.h -HAL/OUTSRC/rtl8723a/Hal8723UMPHWImg.c -HAL/OUTSRC/rtl8723a/Hal8723UMPHWImg.h -1. Move all parameter files to HAL/OUTSRC - -Delete folder: -HAL/HWIMG -1. Move all parameter files to HAL/OUTSRC - -Verification Before Checked-In: - 1. N62 buildall OK - 2. MP buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/05/23 20:20 Stanley> -Modified Files: -Change Notes: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_ACS.c - HAL/OUTSRC/odm_ACS.h - HAL/OUTSRC/odm_debug.c - HAL/OUTSRC/odm_debug.h - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HAL/OUTSRC/odm_precomp.h - HAL/OUTSRC/odm_types.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - - 1. Sync. auto channel selection function with merge_temp - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/04/16 13:35 YuChen> -Modified Files: -Change Notes: - OUTSRC/odm_EdcaTurboCheck.c - - 1. Sync EdcaTurboCheck function with sd8 and sd4 - -Verification Before Checked-In: - 1. N62/N63 buildall OK - --------------------------------------------------------------------------------- -<2014/04/15 19:30 Luke.Lee> -Modified Files: - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_BB.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_BB.h - HAL/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_MAC.h - HAL/OUTSRC/rtl8723a/HalHWImg8723A_RF.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_RF.h - HAL/OUTSRC/rtl8723a/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8723a/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8723a/odm_RegConfig8723A.c - HAL/OUTSRC/rtl8723a/odm_RegConfig8723A.h - -Change Notes: - [8723A] - 1. Update PHY REG V5 format to support Img2HeaderV2 - 2. Remove dummy files - -Verification Before Checked-In: - 1. N62/N63 buildall OK - --------------------------------------------------------------------------------- -<2014/04/11 18:15 YuChen> -Modified Files: - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.c - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.h - -Change Notes: - 1. Refine Power Tracking-> RFreg0x55 upper bound is 10, BBSW upper bound is 2dB - 2. sync sd4 and sd7 odm_DIG - -Verification Before Checked-In: - 1. N62/N63 buildall OK - --------------------------------------------------------------------------------- -<2014/04/10 13:30 Stanley> -Modified Files: - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_AntDiv.c - HAL/OUTSRC/odm_AntDiv.h - HAL/OUTSRC/odm_HWConfig.c - -Change Notes: - 1. Refine SW antenna diversity mechanism - 2. Add antenna diversity by control frame mechanism for RTL8723B\RTL8821A - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<2014/04/09 23:45 Luke.Lee> -Modified Files: - HAL/halDbgCmd.c - HAL/halDbgCmd.h - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm_debug.c - HAL/OUTSRC/odm_debug.h - HAL/OUTSRC/odm_HWConfig.c - -Change Notes: - 1. Add debug message about PHY Reg version, FW version, etc. (cmd 29 29) - 2. revise GET_VERSION macro - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<2014/04/09 20:50 Stanley> -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_AntDiv.c - HAL/OUTSRC/odm_AntDiv.h - -Change Notes: - 1. Add reset mechanism for all DM - 2. Add reset mechanism for antenna diversity - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<2014/04/09 14:12 YuChen> -Modified Files: - HAL/OUTSRC/odm_EdcaTurboCheck.c - -Change Notes: - 1. Remove dummy code - -Verification Before Checked-In: - 1. N62/N63 buildall OK - --------------------------------------------------------------------------------- -<2014/04/09 10:10 YuChen> -Modified Files: - HAL/OUTSRC/HalPhyRf.c - -Change Notes: - 1. return power tracking if efuse thermal base = 0xff - -Verification Before Checked-In: - 1. N62/N63 buildall OK - --------------------------------------------------------------------------------- -<2014/04/08 15:50 YuChen> -Modified Files: - HAL/OUTSRC/odm_EdcaTurboCheck.c - HAL/OUTSRC/odm_EdcaTurboCheck.h - -Change Notes: - 1. Sync odm_EdcaTurboCheck to exactly same with SD4 - - -Verification Before Checked-In: - 1. N62/N63 buildall OK - --------------------------------------------------------------------------------- -<2014/04/07 09:45 YuChen> -Modified Files: - HAL/OUTSRC/HalPhyRf.c - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_precomp.h - HAL/OUTSRC/odm_DynamicBBPowerSaving.c - HAL/OUTSRC/odm_DynamicBBPowerSaving.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - -Change Notes: - 1. Seperate odm_DynamicBBPowerSaving and related function from odm.c - 2. Refine HalPhyRf.c, remove wrong mask - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<2014/04/03 20:10 Luke.Lee> -Modified Files: - HAL/DESC/Hal8192EETxDesc.c - HAL/DESC/Hal8192EUsbTxDesc.c - HAL/DESC/Hal8723BETxDesc.c - HAL/DESC/Hal8723BUsbTxDesc.c - HAL/DESC/Hal8812AUsbTxDesc.c - HAL/DESC/Hal8812ETxDesc.c - HAL/DESC/Hal8814AUsbTxDesc.c - HAL/DESC/Hal8821BETxDesc.c - HAL/DESC/Hal8821BUsbTxDesc.c - -Change Notes: - 1. [TxBF] disable BW signaling of VHT NPDA to prevent from IOT issue with BCM - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- - -<2014/04/03 17:00 YuChen> -Modified Files: - HAL/OUTSRC/HalPhyRf.c - HAL/OUTSRC/HalPhyRf.h - HAL/OUTSRC/odm.h - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_BB.c - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_MAC.c - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_RF.c - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.c - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.h - HAL/OUTSRC/rtl8814a/TestChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioB.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioC.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioD.txt - HAL/OUTSRC/rtl8814a/TestChip/Version.txt - HAL/PHY/HalComPhyCfg.c - HAL/PHY/HalComPhyCfg.h - HAL/PHY/HalJaguarPhyReg.h - -Change Notes: - 1. update 8814 test chip PHY_REG v30 - 2. update 8814 power tracking function - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<2014/03/31 13:40 YuChen> -Modified Files: - HAL/OUTSRC/odm_DIG.c - -Change Notes: - 1. Refine adaptivity condition - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------- -<2014/03/28 20:55 Luke.Lee> -Modified Files: - HAL/EFUSE/Hal8814AEfuse.c - HAL/HalDM.c - HAL/OUTSRC/development_note.txt - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_BB.c - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_MAC.c - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_RF.c - HAL/OUTSRC/rtl8814a/HalHWImg8814A_TestChip_RF.h - HAL/OUTSRC/rtl8814a/TestChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8814a/TestChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8814a/TestChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioA.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioB.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioC.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/RadioD.txt -Removed Files: - HAL/OUTSRC/rtl8814a/TestChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8814a/TestChip/RF/TxPowerTrack_PCIE.txt -New Files: - HAL/OUTSRC/rtl8814a/TestChip/RF/TxPowerTrack.txt - HAL/OUTSRC/rtl8814a/TestChip/Version.txt - -Change Notes: - [8814A] - 1. Update PHY Reg V29 - 2. PHY init From Header - -Verification Before Checked-In: - 1.N62 buildall OK - 2. 8814AU test OK - --------------------------------------------------------------------------------- -<2014/03/28 13:40 James> -Modified Files: - HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.c - 1. Update IQK flow for 2% fail(open RXIQK AGC function & Gain setting & RXIQC Fill) - -Change Notes: - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/03/25 17:00 RS_James> -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - -add files: - HAL/OUTSRC/odm_PathDiv.c - HAL/OUTSRC/odm_PathDiv.h - - 1. Seperate odm_PathDiversity and related function from odm.c - -Change Notes: - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/03/24 16:40 James> -Modified Files: - HAL/OUTSRC/rtl8821a/HalPhyRf_8821A.c - 1. Update IQK flow for 2% fail(average two LNA result for RXIQK) - -Change Notes: - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/03/24 11:50 Stanley> -Modified Files: - HAL/OUTSRC/OutputHWImg.bat - 1. RTL8723B use Image2HeaderV2.exe - - HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_BB.h - HAL/OUTSRC/rtl8723b/HalHWImg8723B_FW.h - HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_MAC.h - HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.c - HAL/OUTSRC/rtl8723b/HalHWImg8723B_RF.h - HAL/OUTSRC/rtl8723b/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8723b/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8723b/MPChip/Version.txt - 1. Update MP Parameter to RTL8723B_MP_Parameter_D-cut_v10_20140324 - -Change Notes: - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/03/20 22:10 Luke> -Modified Files: - HAL/HalDM.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_BB.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_BB.h - HAL/OUTSRC/rtl8821b/HalHWImg8821B_MAC.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_MAC.h - HAL/OUTSRC/rtl8821b/HalHWImg8821B_RF.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_RF.h - HAL/OUTSRC/rtl8821b/HalHWImg8821B_TestChip_BB.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_TestChip_BB.h - HAL/OUTSRC/rtl8821b/HalHWImg8821B_TestChip_MAC.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_TestChip_MAC.h - HAL/OUTSRC/rtl8821b/HalHWImg8821B_TestChip_RF.c - HAL/OUTSRC/rtl8821b/HalHWImg8821B_TestChip_RF.h - HAL/OUTSRC/rtl8821b/MPChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8821b/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8821b/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8821b/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8821b/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8821b/MPChip/RF/TXPWR_LMT.txt - HAL/OUTSRC/rtl8821b/MPChip/Version.txt - HAL/OUTSRC/rtl8821b/TestChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8821b/TestChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8821b/TestChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8821b/TestChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/RadioA.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TXPWR_LMT.txt - HAL/OUTSRC/rtl8821b/TestChip/Version.txt - -Added Files: - HAL/OUTSRC/rtl8821b/MPChip/BB/PHY_REG_MP.txt - HAL/OUTSRC/rtl8821b/MPChip/RF/TxPowerTrack.txt - HAL/OUTSRC/rtl8821b/TestChip/BB/PHY_REG_MP.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TxPowerTrack.txt - -Remove Files: - HAL/OUTSRC/rtl8821b/MPChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8821b/MPChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8821b/MPChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8821b/TestChip/BB/PHY_REG_PG_DNI.txt - HAL/OUTSRC/rtl8821b/TestChip/BB/PHY_REG_PG_Sercomm.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TXPWR_LMT_8811AU_FEM.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TXPWR_LMT_8811AU_IPA.txt - HAL/OUTSRC/rtl8821b/TestChip/RF/TXPWR_LMT_8821A.txt - -Change Notes: - [8821B] - 1. Update Testchip PHY Reg V14 - 2. Disable DM - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ - -<2014/03/14 17:50 James> -Modified Files: - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.c -Change Notes: - 1.Lanch to Stand-by mode when IQK in porgessing - - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ - -<2014/03/12 17:50 Stanley> -Modified Files: -Change Notes: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - 1.Add odm_UpdatePowerTrainingState() to disable power training when noisy environment - 2.Retransmit H2C command when power training state is changed - - HAL/halDbgCmd.c - 1.Add debug command to force power training state - - HAL/OUTSRC/odm_DIG.c - HAL/OUTSRC/odm_DIG.h - HAL/OUTSRC/odm_RegDefine11AC.h - 1.Seperate NHM setting and report from odm_NHMBBInit() and NHMBB() - 2.Add CCA conuter report in odm_FalseAlarmCounterStatistics() for 11ac series - - HAL/Jaguar/Hal8812MultiRate.c - HAL/rtl8188E/Hal8188ECom.c - HAL/rtl8192C/Hal8192CCom.c - HAL/rtl8192E/Hal8192ECom.c - HAL/rtl8723B/Hal8723BCom.c - HAL/rtl8814A/Hal8814ACom.c - HAL/rtl8821B/Hal8821BMultiRate.c - 1.Disable power training when noisy environment - -Verification Before Checked-In: - 1.N62 buildall OK - ------------------------------------------------------------------------------------------------------ - -<2014/03/12 11:00 YuChen> -Modified Files: -Change Notes: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_precomp.h - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU -add files - HAL/OUTSRC/odm_EdcaTurboCheck.c - HAL/OUTSRC/odm_EdcaTurboCheck.h - - 1. Seperate odm_EdcaTurboCheck function from odm.c - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ - -<2014/03/07 10:39 James> -Modified Files: -Change Notes: - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_BB.c - HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG_1T.txt - HAL/OUTSRC/rtl8188e/MPChip/BB/PHY_REG_1T_ICUT.txt - HAL/OUTSRC/rtl8188e/MPChip/Version.txt - HAL/OUTSRC/rtl8192e/HalHWImg8192E_BB.c - HAL/OUTSRC/rtl8192e/HalHWImg8192E_RF.c - HAL/OUTSRC/rtl8192e/HalHWImg8192E_RF.h - HAL/OUTSRC/rtl8192e/MPChip/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8192e/MPChip/BB/PHY_REG.txt - HAL/OUTSRC/rtl8192e/MPChip/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8192e/MPChip/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8192e/MPChip/RF/RadioA.txt - HAL/OUTSRC/rtl8192e/MPChip/RF/RadioB.txt - HAL/OUTSRC/rtl8192e/MPChip/RF/TxPowerTrack_AP.txt - HAL/OUTSRC/rtl8192e/MPChip/RF/TxPowerTrack_PCIE.txt - HAL/OUTSRC/rtl8192e/MPChip/RF/TxPowerTrack_USB.txt - HAL/OUTSRC/rtl8192e/MPChip/RF/TXPWR_LMT.txt - - 1. Update 92E PHY reg pacakge to v28 - 2. Using 92E_PCIE power tracking table on 92E_SDIO interface - 3. Update 88E PHY reg pacakge to v48 - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ - -<2014/03/04 21:19 James> -Modified Files: -Change Notes: - OUTSRC/rtl8814a/HalPhyRf_8814A.c - 1. [8814A] add Path B/C/D RF Backup in IQK - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ - -<2014/03/04 11:30 YuChen> -Modified Files: -Change Notes: - HAL/OUTSRC/odm_DIG.c - HAL/OutSRC/odm.h - 1. [ODM] Adaptivity Refine - a.rename odm_DynamicAdjustAdaptivtiyThreshold to odm_SearchPwdBLowerBound - b.remove False alarm detect in odm_NHMBB() - c.refine odm_PauseDIG() to prevent scan insert during adaptivity odm_SearchPwdBLowerBound processing - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/02/26 15:20 Lanhsin> -Modified Files: -Change Notes: - HAL/PHY/Hal8814APhyCfg.c - 1. Update to WB-20140226-YN-RLE0572B+user+guide+for+BB+functions-R18. - -Verification Before Checked-In: - 1. N63/MP buildall OK ------------------------------------------------------------------------------------------------------ -<2014/02/26 13:30 James> -Modified Files: - odm_HWConfig.c - -Change Notes: - 1. [8189ES] Add power tracking table for 8189ES - (the table is same as PCIE & USB table, suggest by RF Dennis) - -Verification Before Checked-In: - 1. N62 buildall OK ------------------------------------------------------------------------------------------------------ -<2014/02/24 20:45 Stanley> -Modified Files: - HAL/OUTSRC/odm.c - -Change Notes: - 1. [8814A] Modify the offset of crystal cap. for ATC - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<2014/02/07 17:00 MH_C> -Modified Files: -Change Notes: - 1. Allow ODM group to check in trunk code. - -Verification Before Checked-In: - 1. NA - ------------------------------------------------------------------------------------------------------ diff --git a/network/wlan/WDI/HAL/phydm/development_note2012.txt b/network/wlan/WDI/HAL/phydm/development_note2012.txt deleted file mode 100644 index a5b3b057..00000000 --- a/network/wlan/WDI/HAL/phydm/development_note2012.txt +++ /dev/null @@ -1,5272 +0,0 @@ - ------------------------------------------------------------------------------------------------------ -<2014/09/03 14:15 Dino Reviewer:Luke > -Modified Files: - HAL/OUTSRC/rtl8192e/HalPhyRf_8192e.c - -Change Notes: - 1. Fix the coding error of 92E Power tracking in assigning pathA/B CCK-11M TX power - -Verification Before Checked-In: - 1. N62 build all ok - ------------------------------------------------------------------------------------------------------ -<2014/04/18 19:00 James> -Modified Files: -Change Notes: - HAL/OUTSRC/odm_debug.c - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.c - HAL/OUTSRC/rtl8814a/HalPhyRf_8814A.h - HAL/PHY/HalComPhyCfg.c - HAL/PHY/HalComPhyCfg.h - HAL/rtl8814A/Hal8814ACom.c - HAL/rtl8814A/rtl8814as/Hal8814ASdioGen.c - 1. Refine 8814A IQK function - -Verification Before Checked-In: - 1. N62/N63 buildall OK - 2. Mp buildall OK - ------------------------------------------------------------------------------------------------------ -<08/08/2012 19:50 LukeLee> -Modified Files: - - -Change Notes: - - 1. Merge WIN Trunk v2908 - 2. [8812A] Update MAC_PHY Reg V021 for MP chip - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<08/08/2012 13:45 LukeLee> -Modified Files: - - HAL/OUTSRC/odm_debug.c - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/OutputHWImg.bat - HAL/OUTSRC/rtl8723a/BB/AGC_TAB_1T.TXT - HAL/OUTSRC/rtl8723a/BB/PHY_REG_1T.txt - HAL/OUTSRC/rtl8723a/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8723a/HalHWImg8723A_BB.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_BB.h - HAL/OUTSRC/rtl8723a/HalHWImg8723A_MAC.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_RF.c - HAL/OUTSRC/rtl8723a/HalHWImg8723A_RF.h - HAL/OUTSRC/rtl8723a/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8723a/RF/RadioA_1T.txt - HAL/OUTSRC/rtl8821a/HalHWImg8821A_FW.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_FW.h - HAL/rtl8188E/Hal8812Firmware.c - - -Change Notes: - - 1. [8723A] Update MAC_PHY_REG v001 - 2. [8821A] Update FW v001 - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<08/07/2012 20:55 LukeLee> -Modified Files: - - HAL/OUTSRC/rtl8188e/BB/AGC_TAB_1T.txt - HAL/OUTSRC/rtl8188e/BB/PHY_REG_1T.txt - HAL/OUTSRC/rtl8188e/BB/PHY_REG_PG.txt - HAL/OUTSRC/rtl8188e/HalHWImg8188E_MAC.c - HAL/OUTSRC/rtl8188e/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8188e/RF/RadioA_1T.txt - -Change Notes: - - 1. [8188E] Update MAC_PHY_REG v035 - -Verification Before Checked-In: - 1. N62 buildall OK - ------------------------------------------------------------------------------------------------------ -<08/07/2012 19:50 LukeLee> -Modified Files: - - HAL/OUTSRC/rtl8812a/BB/AGC_TAB.txt - HAL/OUTSRC/rtl8812a/BB/PHY_REG.txt - HAL/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_BB.c - HAL/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_MAC.c - HAL/OUTSRC/rtl8812a/HalHWImg8812A_TestChip_RF.c - HAL/OUTSRC/rtl8812a/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8812a/RF/RadioA.txt - HAL/OUTSRC/rtl8812a/RF/RadioB.txt - HAL/OUTSRC/rtl8821a/BB/PHY_REG.txt - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_BB.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_MAC.c - HAL/OUTSRC/rtl8821a/HalHWImg8821A_TestChip_RF.c - HAL/OUTSRC/rtl8821a/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8821a/RF/RadioA.txt - -Change Notes: - - 1. [8812A] Update MAC_PHY_REG v021 - 2. [8821A] Update MAC_PHY_REG v006 - -Verification Before Checked-In: - 1. N62 buildall OK ------------------------------------------------------------------------------------------------------ -<08/06/2012 11:40 LukeLee> -Modified Files: - -Change Notes: - - 1. Merge WIN Trunk v2897 - 2. Update Img2Header.exe - -Verification Before Checked-In: - 1. N62/N5 buildall OK - ------------------------------------------------------------------------------------------------------ -<07/31/2012 17:10 LukeLee> -Modified Files: - - \rtl8812a\BB\AGC_TAB.c - \rtl8812a\BB\PHY_REG.txt - \rtl8812a\MAC\MAC_REG.txt - \rtl8812a\RF\RadioA.txt - \rtl8812a\RF\RadioB.txt - \rtl8812a\HalHWImg8812A_TestChip_BB.c - \rtl8812a\HalHWImg8812A_TestChip_RF.c - -Change Notes: - - 1. [8812A] Update MAC_PHY_REG v20 - -Verification Before Checked-In: - 1. N62 buildall OK - 2. Img2Header.exe has problem with FW transformation - ----------------------------------------------------------------------------------------------- -<07/31/2012 17:00 JueYang> -New Files: -Modified Files: - HAL\PHY\Hal8188EPhyCfg.c - -Change Notes: - 1. Fix 20M TxPower Error for TPLINK. - -Verification Before Checked-In: - 1. N63 buildall ok. ------------------------------------------------------------------------------------------------------ -<07/31/2012 11:35 Georgia> -Modified Files: - -Change Notes: - - 1. Fixed incorrect data rate in wireless BG mode. - -Verification Before Checked-In: - 1. 8188EUS CE driver test OK. ------------------------------------------------------------------------------------------------------ -<07/30/2012 12:25 LukeLee> -Modified Files: - -Change Notes: - - 1. Fix compile error of ODM v364 - -Verification Before Checked-In: - 1. N62/N5 buildall OK. - ------------------------------------------------------------------------------------------------------ -<07/30/2012 13:50 LukeLee> -Modified Files: - -Change Notes: - - 1. Merge Trunk V2285 - -Verification Before Checked-In: - 1. N62/N5 buildall OK. - ------------------------------------------------------------------------------------------------------ -<07/23/2012 15:50 Kordan> -Modified Files: -Change Notes: - 1. Update Image2Header: - a. A single-line comment is now allowable with if-else body. - b. Bug fixed: #endif is missed when translating FW_AP.bin. - c. '/' is allowed with FILE_NAME. - -Verification Before Checked-In: - 1. Translation OK. - - ------------------------------------------------------------------------------------------------------ -<07/23/2012 15:50 Kordan> -Modified Files: -Change Notes: - 1. Update Image2Header: - a. A single-line comment is now allowable with if-else body. - b. Bug fixed: #endif is missed when translating FW_AP.bin. - c. '/' is allowed with FILE_NAME. - -Verification Before Checked-In: - 1. Translation OK. - ------------------------------------------------------------------------------------------------------ -<07/19/2012 16:06 LukeLee> -Modified Files: - - /rtl8188e/Hal8188ERateAdaptive.c - /rtl8188e/Hal8188ERateAdaptive.h - /rtl8188e/HalPhyRf_8188e.c - /rtl8188e/odm_RTL8188E.c - /rtl8188e/odm_RTL8188E.h - /rtl8192c/Hal8192CEFWImg_AP.h - /rtl8192c/Hal8192CEMACImg_AP.h - /rtl8192c/Hal8192CEPHYImg.h - /rtl8192c/Hal8192CEPHYImg_AP.h - /rtl8192c/Hal8192CUPHYImg.h - /rtl8192c/odm_RTL8192C.c - /rtl8192c/odm_RTL8192C.h - /rtl8192d/odm_RTL8192D.c - /rtl8192d/odm_RTL8192D.h - /rtl8812a/HalPhyRf_8812A.c - HalPhyRf.c - HalPhyRf.h - odm.c - odm.h - odm_debug.h - odm_HWConfig.c - odm_HWConfig.h - odm_interface.c - odm_interface.h - odm_precomp.h - odm_types.h - -Removed Files: - - Hal8188EDMOutSrc.c - Hal8188EDMOutSrc.h - Hal8192CDMOutSrc.c - Hal8192CDMOutSrc.h - Hal8812DMOutSrc.c - Hal8812DMOutSrc.h - HalComDMOutSrc.c - HalComDMOutSrc.h - -Change Notes: - - 1. Replace ODM_MP with ODM_WIN - 2. Remove redundancy files - -Verification Before Checked-In: - 1. N62 buildall OK. - ------------------------------------------------------------------------------------------------------ -<07/18/2012 15:45 LukeLee> -Modified Files: - - /rtl8188e/BB/AGC_TAB_1T.txt - /rtl8188e/BB/PHY_REG_1T.txt - /rtl8188e/BB/PHY_REG_PG.txt - /rtl8188e/MAC/MAC_REG.txt - /rtl8188e/RF/RadioA_1T.txt - /rtl8812a/HalHWImg8188E_BB.c - /rtl8812a/HalHWImg8188E_FW.c - -Change Notes: - - 1. [8188E] Release MAC_PHY_Reg V033 - 2. Img2Header.exe has problem, must add #endif in the end of HalHWImg8188E_FW.c - -Verification Before Checked-In: - 1. N62 buildall OK. - - ------------------------------------------------------------------------------------------------------ -<07/17/2012 23:15 LukeLee> -Modified Files: - - /rtl8812a/BB/AGC_TAB.txt - /rtl8812a/BB/PHY_REG.txt - /rtl8812a/MAC/MAC_REG.txt - /rtl8812a/RF/RadioA.txt - /rtl8812a/RF/RadioB.txt - /rtl8812a/HalHWImg8812A_BB.c - /rtl8812a/HalHWImg8812A_RF.c - /rtl8812a/HalHWImg8812A_BB_testchip.c - /rtl8812a/HalHWImg8812A_RF_testhcip.c - -Change Notes: - - 1. [8812A] Release MAC_PHY_Reg V019 - -Verification Before Checked-In: - 1. N62 buildall OK. - ------------------------------------------------------------------------------------------------------ -<07/17/2012 17:47 NeilChen> -Modified Files: - - odm.c - odm_interface.c -Change Notes: - - 1. Initialize SW Antenna diversity ANT flag by efuse PG Setting for all - 8723A Series IC MP - 2. Fix H2C cmd Issue in odm_interface.c - -Verification Before Checked-In: - 1. N62 buildall OK. - ------------------------------------------------------------------------------------------------------ -<07/11/2012 19:18 NeilChen> -Modified Files: - - odm.c - hal\rtl8192c\rtl8192ce\hal8192CEGen.c -Change Notes: - - 1.Fix 8723A SW ANT DIV Bug in MP temporality - -Verification Before Checked-In: - 1. N62 buildall OK. - 2. 8723AS_VAU testing OK ------------------------------------------------------------------------------------------------------- -<07/11/2012 17:45 Luke.Lee> -Modified Files: - - /rtl8812a/RF/RadioA.txt - /rtl8812a/RF/RadioB.txt - /rtl8812a/HalHWImg8812A_RF.c - /rtl8812a/HalHWImg8812A_TestChip_RF.c - odm_HWConfig.c - odm_precomp.h - odm_types.h - -Change Notes: - - /OUTSRC/*.c, *.h - 1.[8812A] revise PHY Reg files - - /HAL/rtl8188E/Hal8812Firmware.c - 2.[8812A] enable DL FW from header - - /HAL/rtl8192C/Hal8192CFirmware.c - 3.[8723A] add back ODM v344 feature - -Verification Before Checked-In: - 1. N62 buildall OK. - 2. 8812AE vs 8812AP DL:280Mbps, UL:330Mbps - 3. 8812AE vs 8812AE AdHoc 400Mbps(force 2SS MCS6) - - ------------------------------------------------------------------------------------------------------- -<07/10/2012 16:40 Luke.Lee> -Modified Files: - -Change Notes: - - 1.Copy Merge_Temp v2836 except OUTSRC - -Verification Before Checked-In: - 1. N62 buildall OK. - ------------------------------------------------------------------------------------------------------- -<07/09/2012 14:30 Luke.Lee> -Modified Files: - - /8812a/HalHWImg8812A_BB.c - /8812a/HalHWImg8812A_BB.h - /8812a/HalHWImg8812A_FW.c - /8812a/HalHWImg8812A_FW.h - /8812a/HalHWImg8812A_RF.c - /8812a/HalHWImg8812A_TestChip_BB.c - /8812a/HalHWImg8812A_TestChip_BB.h - /8812a/HalHWImg8812A_TestChip_MAC.c - /8812a/HalHWImg8812A_TestChip_RF.c - /8812a/HalHWImg8812A_TestChip_RF.h - odm_debug.c - odm_HWConfig.c - odm_precomp.h - odm_types.h - - -Change Notes: - - 1.[8812A] Modify Reg Init Flow (Currently is TestChip only) - -Verification Before Checked-In: - 1. N62 buildall OK. - ------------------------------------------------------------------------------------------------------- -<07/06/2012 15:00 Luke.Lee> -Modified Files: - - HAL/OUTSRC/HalPhyRf.c - HAL/OUTSRC/HalPhyRf.h - HAL/OUTSRC/odm_precomp.h - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.h - -Change Notes: - - 1.Remove AP compile error - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - 2. AP compile OK - ----------------------------------------------------------------------------------------------- -<07/06/2012 15:00 lena_yang> -New Files: -Modified Files: -Change Notes: - 1. Fix 92DU VC BSOD When UNinstall One MAC - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - - ------------------------------------------------------------------------------------------------------- -<07/06/2012 14:30 Cherry> -Modified Files: -Change Notes: - - HAL\HalDM.c - HAL\OUTSRC\odm.c - 1. Enable 8812 EDCA TUREBO mode. - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - - ------------------------------------------------------------------------------------------------------- -<07/06/2012 10:40 Mingzhi> -New Files: -Modified Files: - odm.c - -Change Notes: - 1. modify EDCA turbo for MP - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. ----------------------------------------------------------------------------------------------- -<07/04/2012 14:30 Kordan> -New Files: -Modified Files: - HAL/rtl8188E/rtl8188ee/Hal8188EEGen.c - HAL/rtl8188E/rtl8188es/Hal8188ESdioGen.c - -Change Notes: - 1. Fix compilation error. - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. - -------------------------------------------------------------------------------------------- -<07/03/2012 17:00 Kordan> -Modified Files: - HAL/OUTSRC/HalPhyRf.c - HAL/OUTSRC/HalPhyRf.h - HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.c - HAL/OUTSRC/rtl8812a/HalPhyRf_8812A.h - HAL/rtl8188E/Hal8812Com.c - HAL/rtl8188E/rtl8188ee/Hal8188EEGen.c - HAL/rtl8188E/rtl8188es/Hal8188ESdioGen.c - PLATFORM/NDIS5/N5C_Req.c - -Change Notes: - 1. Implement 8812A IQK prototype. - -Verification Before Checked-In: - 1. MP Buildall ok. - 2. For test only. - -------------------------------------------------------------------------------------------- -<06/25/2012 21:25 LukeLee> Modified Files: - odm.c - -Change Notes: - 1. [8723A]modify odm_CommonInfoSelfInit() to enable SW AntDiv - -Verification Before Checked-In: - 1. WIN N62 Buildall ok. - -------------------------------------------------------------------------------------------- -<06/22/2012 18:30 LukeLee> Modified Files: - rtl8188e\HalHWImg8188E_BB.c - rtl8188e\HalHWImg8188E_FW.c - rtl8188e\HalHWImg8188E_FW.h - rtl8188e\HalHWImg8188E_MAC.c - rtl8188e\HalHWImg8188E_RF.c - rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. [88E]release 88E MAC_PHY_REG v032 for default ant setting - -Verification Before Checked-In: - 1. WIN N62 Buildall ok. - -------------------------------------------------------------------------------------------- -<06/22/2012 14:36 NeilChen> Modified Files: - odm.c - odm.h - Hal8192CFirmware.c -Change Notes: - 1. Fix PSD for BT3.0 TP issue - 2. if BT3.0 is running, PSD scan times will be to decrease - -Verification Before Checked-In: - 1. WIN N5 Buildall ok. - 2. 8723AE Testing OK. -------------------------------------------------------------------------------------------- -<06/22/2012 14:25 button> -Modified Files: - OUTSRC/rtl8188e/HalPhyRf_8188e.c - OUTSRC/Hal8188ERateAdaptive.c -Change Notes: - 1. Use Common macro to parse Tx report - 2. Resolve compile error in AP platform - -Verification Before Checked-In: - 1. AP platform compile ok. ------------------------------------------------------------------------------------------- -<06/19/2012 19:40 Alexchou> -Modified Files: - - OUTSRC/rtl8812a/FW/FW_NIC.BIN - OUTSRC/rtl8812a/FW/FW_WoWLAN.BIN - OUTSRC/rtl8812a/HalHWImg8812A_FW.c - OUTSRC/rtl8812a/HalHWImg8812A_FW.h - -Change Notes: - 1. Update 8812 testchip formal firmware V0003. - -Verification Before Checked-In: - 1. ImgTransfer ok. - -------------------------------------------------------------------------------------------- -<06/18/2012 16:50 NeilChen> -Modified Files: - odm.c - odm.h - odm_RTL8188E.h - HalDMOutSrc8192C_AP.c - HalDMOutSrc8192C_CE.c - -Change Notes: - 1. To integrate ANT definition for SW ANT DIV and ANT detect of ODM - mechanism - 2. MAIN_ANT is use to replace Antenna_A and ANT_Main - 3. AUX_ANT is use to replace Antenna_B and ANT_Aux - -Verification Before Checked-In: - 1.WIN N5 Buildall ok. - -------------------------------------------------------------------------------------------- -<06/13/2012 16:30 Georgia> -Modified Files: - rtl8188e/HalHWImg8188E_FW.c - -Change Notes: - 1. Fixed symbol:Array_8188E_FW_NIC undefine error for 88E. - -Verification Before Checked-In: - 1.CE DRV make all ok. - 1.WIN N5 buildall ok. - -------------------------------------------------------------------------------------------- -<06/13/2012 15:30 Georgia> -Modified Files: - rtl8188e/HalPhyRf_8188e.c -Change Notes: - 1. Fixed compile error for CE Platform. - -Verification Before Checked-In: - 1.CE DRV make all ok. - --------------------------------------------------------------------------------------------- -<06/11/2012 21:00 LukeLee> -Deleted Files: -Change Notes: - HAL\OUTSRC\odm.c - 1. Revise Single/Dual Ant Detection for 88C - -Verification Before Checked-In: - 1. WIN N62 buildall ok. - 2. 88CE ant detection OK - --------------------------------------------------------------------------------------------- -<06/08/2012 16:12 James> -Deleted Files: -Change Notes: - 1. Update 8812 BB/MAC/RF parameters to V13 - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. - 2. 8812AU XP scan ok. 8812AU link with WPA-2 AES AP ok. - --------------------------------------------------------------------------------------------- -<06/07/2012 16:04 MH_Chen> -Deleted Files: -Change Notes: - HAL\OUTSRC\odm.c - 1. Remove 8812 DM init return. - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. - 2. 8812AU win7 scan ok. 8812AU signal strength display ok. - --------------------------------------------------------------------------------------------- -<06/06/2012 19:04 MH_Chen> -Deleted Files: -Change Notes: - COMMON &\HAL\Non-ODM & PLATFORM - 1. Merge from windows driver trunk v2764-2766. Support 8812AU dual band scan. - - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. - 2. 8812AE/AU win7 scan ok. 8812AU reload test for 100 rounds ok. - 3. 88CU win7 simple test ok. S3/S4/Reload/ Unlpg ok. - --------------------------------------------------------------------------------------------- -<06/06/2012 20:10 Georgia> -Modified Files: - odm.c - rtl8188e/Hal8188ERateAdaptive.c - rtl8188e/HalHWImg8188E_BB.c - rtl8188e/HalHWImg8188E_FW.c - rtl8188e/HalHWImg8188E_MAC.c - rtl8188e/HalHWImg8188E_RF.c - rtl8188e/HalPhyRf_8188e.c - rtl8188e/odm_RegConfig8188E.c - rtl8188e/odm_RTL8188E.c - rtl8192c/odm_RTL8192C.c - rtl8192d/odm_RTL8192D.c - rtl8723a/HalHWImg8723A_BB.c - rtl8723a/HalHWImg8723A_FW.c - rtl8723a/HalHWImg8723A_MAC.c - rtl8723a/HalHWImg8723A_RF.c - rtl8723a/odm_RegConfig8723A.c - -Change Notes: - 1. Fix compile error. - -Verification Before Checked-In: - 1. CE Platform ,make all ok. - --------------------------------------------------------------------------------------------- -<06/06/2012 19:04 MH_Chen> -Deleted Files: -Change Notes: - COMMON &\HAL\Non-ODM & PLATFORM - 1. Merge from windows driver trunk v2744-2763. - ODM - 1. Revise compile error for windows driver. - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. - 2. 8812AE/AU win7 scan ok. 8812AU reload test for 100 rounds ok. - 3. 88EE win7 ping test ok. - 4. 88EU win7 simple test ok. S3/S4/Reload/ Unlpg ok. - 4. 88CU win7 simple test ok. S3/S4/Reload/ Unlpg ok. - --------------------------------------------------------------------------------------------- -<06/06/2012 15:44 Georgia> -Modified Files: - HalPhyRf.c - odm.c - odm.h - odm_HWConfig.c - odm_HWConfig.h - odm_types.h - rtl8188e/Hal8188EFWImg_CE.c - rtl8188e/Hal8188EFWImg_CE.h - rtl8188e/Hal8188ERateAdaptive.c - rtl8188e/Hal8188ERateAdaptive.h - rtl8188e/HalHWImg8188E_BB.c - rtl8188e/HalHWImg8188E_FW.c - rtl8188e/HalHWImg8188E_MAC.c - rtl8188e/HalHWImg8188E_RF.c - rtl8188e/HalPhyRf_8188e.c - rtl8188e/odm_RegConfig8188E.c - rtl8188e/odm_RTL8188E.c - rtl8188e/odm_RTL8188E.h - rtl8192c/odm_RTL8192C.c - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/odm_RTL8192D.c - rtl8723a/HalHWImg8723A_BB.c - rtl8723a/HalHWImg8723A_FW.c - rtl8723a/HalHWImg8723A_MAC.c - rtl8723a/HalHWImg8723A_RF.c - rtl8723a/odm_RegConfig8723A.c - -Change Notes: - 1. Add RefreshRAMask for CE platform. - 2. Move releated marco of TX_RPT prasing to Hal8188ERateAdaptive.h. - 3. Change data type of ODM_PHY_INFO_T - RxPWDBAll to u1Byte. - 3. Fix compile error for CE Platform. - -Verification Before Checked-In: - 1. Make all chip drv ok on CE Platform. - 2. 88EUS/89ES auto-test ok. --------------------------------------------------------------------------------------------- -<06/06/2012 14:35 MH_Chen> -Modified Files: -Change Notes: - Merge from 2718 to 2743. - -Verification Before Checked-In: - 1. N5/N62 buildall. - 2. 88EE ping ok. But s4/reload fail!!?. - --------------------------------------------------------------------------------------------- -<06/06/2012 14:15 MH_Chen> -Deleted Files: -Change Notes: - COMMON &\HAL\Non-ODM & PLATFORM - 1. Merge from windows driver trunk v2718-2743. - HAL\OUTSRC\rtl8812a\BB\AGC_TAB.txt.... - 1. Use MP trunk driver HW parameters to replace ODM\MP parameters and scan ok. - 2. Use new img2header to transfer MP trunk 8812 parametes. - 3. RF delay pattern change back to 0xFE?? or 0xFFE?? - -Verification Before Checked-In: - 1. WIN N5/N62 buildall ok. - 2. 8812AE/AU win7 scan ok. - 3. 88EE win7 ping test ok. - 4. 88EU win7 simple test ok. S3/S4/Reload/ Unlpg ok. - 4. 88C2U win7 simple test ok. - --------------------------------------------------------------------------------------------- -<06/04/2012 21:55 Gimmy> -Deleted Files: - \HAL\OUTSRC\rtl8188e\FW\RTL8188EFW_A_CUT_T.BIN - -Change Notes: - 1. delete \HAL\OUTSRC\rtl8188e\FW\RTL8188EFW_A_CUT_T.BIN - -Verification Before Checked-In: - 1. NONE. - 2. ImgTransfer ok. - --------------------------------------------------------------------------------------------- -<06/04/2012 20:35 LukeLee> -Modified Files: - \rtl8188e\BB\PHY_REG_1T.txt - \rtl8188e\HalHWImg8188E_BB.c - \rtl8188e\HalHWImg8188E_FW.c - \rtl8188e\HalHWImg8188E_FW.h - \rtl8812a\HalHWImg8812A_BB.c - -Change Notes: - 1. [88E]Release MAC_PHY_REG v031 for BB swing issue - 2. [8812A] manually add "0" to patch Img2Header.exe bug - -Verification Before Checked-In: - 1. N62 buildall OK - 2. 88EE BB QC test OK - ---------------------------------------------------------------------------------------------- -<06/04/2012 14:45 Gimmy> -New Files: - HAL/OUTSRC/rtl8188e/FW/FW_AP.BIN - -Modified Files: - HAL/OUTSRC/rtl8188e/FW/FW_NIC.BIN - HAL/OUTSRC/rtl8188e/FW/FW_WoWLAN.BIN - HAL/OUTSRC/rtl8188e/HalHWImg8188E_FW.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_FW.h - HAL/OUTSRC/rtl8812a/HalHWImg8812A_BB.c - -Change Notes: - 1. Update 88E formal firmware. V004. - -Verification Before Checked-In: - 1. NONE. - 2. ImgTransfer ok. - --------------------------------------------------------------------------------------------- -<06/01/2012 20:00 LukeLee> -Modified Files: - HAL/OUTSRC/odm.c - -Change Notes: - 1. [88E]Fix TP bad issue caused by V321 - -Verification Before Checked-In: - 1. N62 buildall OK - 2. 88EE TP test OK - --------------------------------------------------------------------------------------------- -<06/01/2012 18:50 LukeLee> -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_RegDefine11AC.h - HAL/OUTSRC/odm_RegDefine11N.h - -Change Notes: - 1. Define bCckHighPower & RFPathRxEnable for Jaguar series - 2. Revise if/else conidition of odm_HwAntDiv and odm_SwAntDivChkAntSwitch - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------------------- -<05/30/2012 22:10 LukeLee> -Modified Files: - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm.c - -Change Notes: - 1. Modify odm_RxPhyStatusJaguarSeries_Parsing() - 2. Add Back compile flag in Odm.c for CE team - - -Verification Before Checked-In: - 1. N62 buildall OK - 2. 88EE Ad-Hoc ping OK, RSSI report OK - --------------------------------------------------------------------------------------------- -<05/30/2012 21:26 Alexchou> -Modified Files: -Change Notes: - - rtl8812a/FW/FW_NIC.BIN - rtl8812a/HalHWImg8812A_FW.c - rtl8812a/HalHWImg8812A_FW.h - rtl8812a/FW/FW_WoWLAN.BIN - 1. update 8812 testchip fw v0002 for new Img2header.exe - - rtl8812a/FW/RTL8812FW_Test_T.BIN - rtl8812a/HalHWImg8812A_TestChip_FW.c - rtl8812a/HalHWImg8812A_TestChip_FW.h - 1. remove unused files - - -Verification Before Checked-In: - 1. None --------------------------------------------------------------------------------------------- -<05/30/2012 20:17 MH_Chen> -Modified Files: -Change Notes: - COMMON\TransmitDesc.c - 1. Support new ODM relative AID for luke. - HAL\DESC - 1. Revise raw data input and ODM RSSI parsing with required MACID. - HAL\ODM - 1. Revise for PHY query inRX side and TX side TXFILLDESC. - HAL\HalDM.c - - -Verification Before Checked-In: - 1. N5/N62 buildall. - 2. 88EU simple test ok. AP mode RSSI parsing ok. But vwifi fail. - --------------------------------------------------------------------------------------------- -<05/30/2012 17:40 Kordan> -Modified Files: -Change Notes: - 1. Support 8188E/8812A MAC, BB, RF, and FW configuration. - Buildrtwe.bat - Buildrtws.bat - Buildrtwu.bat - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm_HWConfig.h - HAL/OUTSRC/odm_interface.c - HAL/OUTSRC/odm_interface.h - HAL/OUTSRC/odm_precomp.h - HAL/OUTSRC/OutputHWImg.bat - HAL/rtl8188E/Hal8188EFirmware.c - HAL/rtl8188E/Hal8812Firmware.c - HAL/rtl8188E/rtl8188ee/Hal8188EEGen.c - HAL/rtl8188E/rtl8188ee/Hal8812EGen.c - HAL/rtl8188E/rtl8188es/Hal8188ESdioGen.c - HAL/rtl8188E/rtl8188eu/Hal8188EUsbGen.c - HAL/rtl8188E/rtl8188eu/Hal8812AUsbGen.c - HAL/sources.list.WlanE - HAL/sources.list.WlanS - HAL/sources.list.WlanU - - 2. Minor bug fixed and some improvement on Image2Header. - 3. Supports batch conversion. - HAL/OUTSRC/Image2Header.exe - HAL/OUTSRC/rtl8188e/* - HAL/OUTSRC/rtl8723a/* - HAL/PHY/Hal8188EPhyCfg.c - HAL/PHY/Hal8192CPhyCfg.c - HAL/OUTSRC/OutputHWImg.bat - - 4. Fix compilation error and revise the code of 88E ODM power tracking. - HAL/MPT/MPT_Bt.c - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.h - -Verification Before Checked-In: - 1. N5/N62/MP buildall OK. - 2. 88EE MP T/Rx ok. - 3. The PHY reg package of both 8188E and 8812A might be wrong, - please update the PHY reg and convert again from scratch. - --------------------------------------------------------------------------------------------- -<05/30/2012 17:05 Alexchou> -Modified Files: -Change Notes: - - rtl8812a/FW/RTL8812FW_Test_T.BIN - rtl8812a/HalHWImg8812A_TestChip_FW.c - 1. update 8812 testchip fw v0002 - -Verification Before Checked-In: - 1. None --------------------------------------------------------------------------------------------- -<05/30/2012 15:05 MH_Chen> -Modified Files: -Change Notes: - 1. DESC relative code to fix PHY query status. - 2. ODM DIG MP abort case revise. - -Verification Before Checked-In: - 1. N5/N62 buildall. - 2. 88EU simple test ok. - --------------------------------------------------------------------------------------------- -<05/30/2012 13:10 MH_Chen> -Modified Files: -Change Notes: - Remove MP relative cofr out of ODM folder. - -Verification Before Checked-In: - 1. N5/N62 buildall. - 2. 88EU ping ok. - --------------------------------------------------------------------------------------------- -<05/29/2012 21:10 MH_Chen> -Modified Files: -Change Notes: - Windows Driver relative RXdesc resive - 1. ODM pHY status query must input raw data. - 2. Add GPL declaration for MP_Precomp.h - 3. Revise ODM data structure defintion. - -Verification Before Checked-In: - 1. N5/N62 buildall. - 2. 88EU ping ok. - --------------------------------------------------------------------------------------------- -<05/29/2012 17:00 Alexchou> -Modified Files: -Change Notes: - rtl8195/ - 1. deleted rtl8195 folder - - rtl8812a/ - rtl8812a/BB/ - rtl8812a/FW/ - rtl8812a/FW/RTL8812FW_Test_T.BIN - rtl8812a/HalHWImg8812A_TestChip_FW.c - rtl8812a/HalHWImg8812A_TestChip_FW.h - rtl8812a/MAC/ - rtl8812a/RF/ - - 1. Create rtl8812a relative folders. - 2. update 8812 testchip fw v0001 - -Verification Before Checked-In: - 1. None --------------------------------------------------------------------------------------------- -<05/23/2012 17:28 MH_Chen> -Modified Files: -Change Notes: - ODM relative file. - 1. Add MP driver MP_Precomp.h to increase compile speed. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 92CU/92DU/8723AU/88EU simple test ok. - --------------------------------------------------------------------------------------------- -<05/23/2012 14:54 MH_Chen> -Modified Files: -Change Notes: - HAL\DESC\Hal8192CRxDesc.c - 1. Fix ODM PHY & packet info strcucture for 92C &8812 seies. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 92CU simple test ok. - --------------------------------------------------------------------------------------------- -<05/22/2012 22:40 MH_Chen> -Modified Files: -Change Notes: - HAL\DESC\Hal8188ERxDesc.c - HAL\DESC\Hal8812Desc.c - HAL\OUTSRC\odm_HWConfig.c - 1. Revise ODM PHY & packet info strcucture to fix 88E serries PHy query. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EU simple test ok. - --------------------------------------------------------------------------------------------- -<05/17/2012 19:40 Georgia> -Modified Files: - HalPhyRf.h - odm.c - odm.h - odm_debug.h - odm_HWConfig.c - odm_HWConfig.h - odm_interface.h - odm_precomp.h - odm_reg.h - odm_RegDefine11AC.h - odm_RegDefine11N.h - odm_types.h - -Change Notes: - 1. Prevent from "warning: no newline at end of file" - 2. Fix comile error for CE Platform - -Verification Before Checked-In: - 1. Make all ok. - 2. 88EU auto-test ok. - --------------------------------------------------------------------------------------------- -<05/17/2012 11:40 LukeLee> -Modified Files: - odm.c - \rtl8188e\odm_RTL8188E.c - \rtl8192c\odm_RTL8192C.c - \rtl8192d\odm_RTL8192D.c - -Change Notes: - 1. Add IC comile flag for each IC subfolder - 2. revise ODM_DMInit() and ODM_DMWatchdog() - 3. Remove ODM_RF_Saving_8188E() - -Verification Before Checked-In: - 1. N62 buildall OK - 2. set RTL8192C_SUPPORT/ RTL8192D_SUPPORT/ RTL8188E_SUPPORT to 0 buildall OK - --------------------------------------------------------------------------------------------- -<05/16/2012 23:55 LukeLee> -Modified Files: - odm.c - -Change Notes: - 1. Revise AntDivType Init - -Verification Before Checked-In: - 1. None - --------------------------------------------------------------------------------------------- -<05/16/2012 23:10 LukeLee> -Modified Files: - odm_HWConfig.c - odm_types.h - odm.c - odm.h - rtl8188e\odm_RTL8188E.c - rtl8188e\odm_RTL8188E.h - -Change Notes: - 1. Add compile flag for SW and HW antenna diveristy - -Verification Before Checked-In: - 1. N62 buildall OK - 2. 88EU, 88CE TP test OK - --------------------------------------------------------------------------------------------- -<05/16/2012 16:25 LukeLee> -Modified Files: - odm_HWConfig.c - odm.c - odm.h - rtl8188e\HalPhyRf_8188e.c - rtl8188e\odm_RTL8188E.c - -Change Notes: - 1. Fix comile error - 2. Merge HW AntDiv for all platform - 3. Disable ODM_SwAntDivCheckBeforeLink8192C() - -Verification Before Checked-In: - 1. 88CE vs DIR855 TX:94Mbps RX:92Mbps - 2. 88EU vs DIR855 TX:83Mbps RX:95Mbps - --------------------------------------------------------------------------------------------- -<05/14/2012 11:21 button> -Modified Files: - odm_precomp.h - odm.c - odm.h - HalPhyRf.c - rtl8188e/Hal8188ERateAdaptive.c - rtl8188e/HalPhyRf_8188e.c - rtl8188e/HalPhyRf_8188e.h - -Change Notes: - 1. Support power tracking in AP platform - 2. Refine RA threshold for AP - 3. Fix STA array number - -Verification Before Checked-In: - 1. AP buildall OK. - --------------------------------------------------------------------------------------------- -<05/12/2012 12:30 LukeLee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - HAL\OUTSRC\rtl8188e\odm_RTL8188E.h - HAL\OUTSRC\odm_HWConfig.c - HAL\OUTSRC\odm_RegDefine11N.h - HAL\DESC\Hal8188EETxDesc.c - HAL\DESC\Hal8188EUsbTxDesc.c - HAL\DESC\Hal8188ESdioTxDesc.c - -Change Notes: - 1. [88E]Enable CCK AntDiv and fix some AntDiv bugs - -Verification Before Checked-In: - 1. N62 buildall OK. - 2. 88EE DL:53Mbps UL:49Mbps 88EU DL:51Mbps UL:47Mbps - --------------------------------------------------------------------------------------------- -<05/10/2012 16:00 MH_Chen> -New Files: -Modified Files: -Change Notes: - 1. Merge from MP driver V2680 to V2685. - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - 2. 88EU ping ok S3/S4/reload/unplug ok. - --------------------------------------------------------------------------------------------- -<05/08/2012 23:00 MH_Chen> -New Files: -Modified Files: -Change Notes: - 1. Merge from MP driver V2560 to V2671. Many modification hard to describe.~~!! Please refer - to MP driver lable v2560-2671. - -Verification Before Checked-In: - 1. N5/N6/N62 buildall OK. - 2. 88EU ping ok S3/S4/reload/unplug ok. - --------------------------------------------------------------------------------------------- -<05/08/2012 16:55 LukeLee> -Modified Files: - HAL\OUTSRC\odm_HWConfig.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. remove compile error - 2. [88E] Update MAC_PHY_REG V030 for change RX default ant to CG - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------------------- -<05/07/2012 14:05 Kordan> -Modified Files: - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm_types.h - -Change Notes: - 1. Add two definitions in RT_SPINLOCK_TYPE. - 2. [88E] Support PHY_REG_MP.txt configuration.(But disabled now) - -Verification Before Checked-In: - 1. None - --------------------------------------------------------------------------------------------- -<05/07/2012 11:40 LukeLee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.h - -Removed Files: - HAL\OUTSRC\rtl8188e\BB\PHY_REG_MP.txt - -Change Notes: - 1. [88E]Update right MAC_PHY_REG V029 (remove PHY_REG_MP.txt) - -Verification Before Checked-In: - 1. N62 buildall OK - --------------------------------------------------------------------------------------------- -<05/07/2012 11:20 LukeLee> -New Files: - HAL\OUTSRC\rtl8188e\BB\PHY_REG_PG.txt - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.h - -Change Notes: - 1. [88E]Update MAC_PHY_REG V029 for power by rate - -Verification Before Checked-In: - 1. 88EE RX:99Mbps, TX:83.5Mbps - --------------------------------------------------------------------------------------------- -<05/03/2012 21:15 LukeLee> -New Files: - HEADER\RegCommon.h - -Change Notes: - 1. [88E]Modify registry AntennaDivType - -Verification Before Checked-In: - 1. 88EE RX:98Mbps, TX:84Mbps - 2. 88EE antenna diversity enable OK - --------------------------------------------------------------------------------------------- -<05/03/2012 17:00 LukeLee> -New Files: - HAL\OUTSRC\odm_RegDefine11AC.h - HAL\OUTSRC\odm_RegDefine11N.h - -Change Notes: - 1. fix compile error - -Verification Before Checked-In: - 1. None - --------------------------------------------------------------------------------------------- -<05/03/2012 16:00 LukeLee> -New Files: -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\odm_interface.h - HAL\OUTSRC\odm_precomp.h - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - HAL\HalDM.c -New Files: - HAL\OUTSRC\odm_RegDefine11AC.h - HAL\OUTSRC\odm_RegDefine11N.h - -Change Notes: - 1. [8812] Reg Define and DIG modified - 2. restrict dynamic functions for 11AC series - 3. Add SupportICtype ODM_RTL8812 - 4. enable odm_DynamicEDCCA() for all 11N series - -Verification Before Checked-In: - 1. Buildall OK - 2. 88EU DL=94Mbps, UL=78Mbps, ODM v285 has the same issue! --------------------------------------------------------------------------------------------- -<05/03/2012 11:00 JueYang> -New Files: -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - -Change Notes: - 1. Revise CCK PowerByRate. - -Verification Before Checked-In: - 1. OFDM and CCK PowerByRate OK. --------------------------------------------------------------------------------------------- -<04/28/2012 12:00 JueYang> -New Files: - HAL\OUTSRC\rtl8188e\BB\PHY_REG_PG.txt - -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.h - HAL\OUTSRC\rtl8188e\HalHWImg8188E_TestChip_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_TestChip_BB.h - HAL\OUTSRC\rtl8188e\odm_RegConfig8188E.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\odm_HWConfig.c - HAL\PHY\Hal8188EPhyCfg.c - HAL\PHY\HalComPhyCfg.c - HAL\PHY\HalComPhyCfg.h - - HAL\rtl8188E\rtl8188ee\Hal8188EEGen.c -Change Notes: - HAL\OUTSRC\rtl8188e\BB\PHY_REG_PG.txt - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.h - HAL\OUTSRC\rtl8188e\HalHWImg8188E_TestChip_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_TestChip_BB.h - HAL\OUTSRC\rtl8188e\odm_RegConfig8188E.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\odm_HWConfig.c - HAL\PHY\Hal8188EPhyCfg.c - HAL\PHY\HalComPhyCfg.c - HAL\PHY\HalComPhyCfg.h - 1. Add PowerByRate and update PHY_REG_PG to V003. - - HAL\rtl8188E\rtl8188ee\Hal8188EEGen.c - 1. Fix some bugs. - - -Verification Before Checked-In: - 1. N62 Buildall ok --------------------------------------------------------------------------------------------- -<04/27/2012 19:25 Georgia> -New Files: -Modified Files: - odm.c - odm.h - odm_debug.c - odm_debug.h - odm_interface.c - odm_precomp.h - odm_types.h - rtl8188e/HalPhyRf_8188e.c - rtl8188e/odm_RTL8188E.c - rtl8188e/odm_RTL8188E.h - rtl8192c/odm_RTL8192C.c - -Change Notes: - 1. Remove CE compile error - -Verification Before Checked-In: - 1. Make all ok. - 2. 88EU auto-test ok. - --------------------------------------------------------------------------------------------- -<04/27/2012 17:33 MH_Chen> -New Files: -Modified Files: -Change Notes: - HAL\OUTSRC\rtl8188e\HalPhyRf_8188e.c/h - 1. Revise TX power tracking mechanism. Prevent BB swing fail. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. WIN7 88EU ping /reload/ unplug/ S3 ok. - --------------------------------------------------------------------------------------------- -<04/25/2012 20:00 LukeLee> -New Files: -Modified Files: - rtl8188e/odm_RTL8188E.c -Change Notes: - 1. Remove MP compile error - -Verification Before Checked-In: - 1. MP buildall OK - --------------------------------------------------------------------------------------------- -<04/25/2012 17:20 button> -New Files: -Modified Files: - odm.c - rtl8188e/odm_RTL8188E.c -Change Notes: - 1. Refine AP's EDCA turbo function - 2. Resolve AP's compile error - -Verification Before Checked-In: - 1. AP platform build OK(88E) - --------------------------------------------------------------------------------------------- -<04/23/2012 21:55 LukeLee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. [88E] Update MAC_PHY_REG V028 for 20M mode noise resistence - -Verification Before Checked-In: - 1. 88E Static Analysis OK - --------------------------------------------------------------------------------------------- -<04/13/2012 23:00 MH_Chen> -New Files: -Modified Files: -Change Notes: - 1. Merge from MP driver V2471 to V2561. Mant modification hard to describe.~~!! - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - 2. 88EU/92CU ping ok S3/S4/reload/unplug ok. - ---------------------------------------------------------------------------------------------- -<04/13/2012 20:10 LukeLee> -New Files: - HAL\HalDM.c - -Modified Files: -Change Notes: - 1. [8812]enable RSSI Monitor - -Verification Before Checked-In: - 1. buildall OK - ---------------------------------------------------------------------------------------------- -<04/13/2012 19:55 LukeLee> -New Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm_HWConfig.c - HAL\HalDM.c - -Modified Files: -Change Notes: - 1. [8812]enable DIG only - 2. [8812]CCK RSSI format as 88E - -Verification Before Checked-In: - 1. buildall OK - ---------------------------------------------------------------------------------------------- -<04/13/2012 16:38 Gimmy> -New Files: - HAL\OUTSRC\rtl8188e\FW -Modified Files: -Change Notes: - 1. Update first version 88E formal firmware. V001. - -Verification Before Checked-In: - 1. NONE. - 2. ImgTransfer ok. - ---------------------------------------------------------------------------------------------- -<04/12/2012 22:30 LukeLee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - HAL\OUTSRC\rtl8188e\odm_RTL8188E.h - HAL\BTCoexist\HalBtCoexist.c - -Change Notes: - 1.[All IC except 8723A]Modify DIG - 2.[88E] Modify AntDiv - -Verification Before Checked-In: - 1. buildall ok. - 2. 88EE test OK - ---------------------------------------------------------------------------------------------- -<04/12/2012 12:00 LukeLee> -Modified Files: - PLATFORM\NDIS5\N5C_Init.c - PLATFORM\NDIS5\Ndis5Common.h - PLATFORM\NDIS6\N6C_Init.c - PLATFORM\NDIS6\Ndis6Common.h - HAL\EFUSE\Hal8188EEfuse.c - -Change Notes: - 1.[88E]Fix AntDiv type decision in init flow - - -Verification Before Checked-In: - 1. buildall ok. - 2. 88EE test OK - ---------------------------------------------------------------------------------------------- - -<04/12/2012 10:28 Mingzhi> -Modified Files: - \HEADER\Typedef.c - HAL\OUTSRC\odm.c - -Change Notes: - 1.modify definition wireless mode for mp platform - 2.fix a bug in AP/ADSL: choose_iot_main_sta() - -Verification Before Checked-In: - 1.MP platform buildall ok - 2.92du ping ok - ---------------------------------------------------------------------------------------------- -<04/11/2012 10:20 JueYang> -Modified Files: - HAL\OUTSRC\rtl8188e\HalPhyRf_8188e.c - - HAL\OUTSRC\odm.c - -Change Notes: - HAL\OUTSRC\rtl8188e\HalPhyRf_8188e.c - 1. [88E] Fix BOSD. - - HAL\OUTSRC\odm.c - 1. [88E] Add break. - -Verification Before Checked-In: - 1. buildall ok. - ---------------------------------------------------------------------------------------------- -<04/06/2012 18:20 Luke.Lee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. [88E] Update MAC_PHY_REG V026 - -Verification Before Checked-In: - 1. 88EU TP dynamic rage test OK - ---------------------------------------------------------------------------------------------- -<04/03/2012 10:20 Kordan> -Modified Files: - HEADER/Precomp.h.Wlan*.Windows - PLATFORM/WinInf/*/rtwlan*mp.inf - PLATFORM/WinInf/*/netrtwlan*.inf - PLATFORM/NDIS5/USB/INF/rtwlanump.inf - PLATFORM/NDIS5/PCI/INF/rtwlanemp.inf - HEADER/RegCommon.h - PLATFORM/NDIS5/N5C_Init.c - HAL/EFUSE/Hal8188EEfuse.c - -Change Notes: - 1. Change the default setting of AntennaDivType to "AUTO". - 2. Ignore 0xC1[3] when 0xC9 is "1" or "2". - -Verification Before Checked-In: - 1. MP buildall ok. - ---------------------------------------------------------------------------------------------- -<04/02/2012 20:50 Luke.Lee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - -Change Notes: - 1. [88E] remove DbgPrint in odm_RTL8188E.c - 2. [88C] modify ODM_SingleDualAntennaDetection() - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88CE TP test OK - ---------------------------------------------------------------------------------------------- -<04/02/2012 15:50 Kordan> -Added Files: - PLATFORM/WinInf/SDIO - PLATFORM/WinInf/SDIO/netrtwlans.inf - PLATFORM/WinInf/SDIO/rtwlansmp.inf - -Deleted Files: - HEADER/Precomp.h.WlanES.Windows - HEADER/Precomp.h.WlanS.Windows.MP - HEADER/Precomp.h.WlanES.Windows.MP - -Modified Files: - HEADER/Precomp.h.Wlan*.Windows - PLATFORM/WinInf/*/rtwlan*mp.inf - PLATFORM/WinInf/*/netrtwlan*.inf - PLATFORM/NDIS5/USB/INF/rtwlanump.inf - PLATFORM/NDIS5/PCI/INF/rtwlanemp.inf - HEADER/RegCommon.h - PLATFORM/NDIS5/N5C_Init.c - HAL/OUTSRC/rtl8188e/odm_RTL8188E.c - HAL/EFUSE/Hal8188EEfuse.c - MPBuild.bat - -Change Notes: - 1. Add an option AUTO in advanced setting. (When AUTO is not selected, EFUSE setting would be ignored.) - 2. Revise the registry setting and default value of Antenna diversity. - 3. Fix compilation errors. - -Verification Before Checked-In: - 1. N5/N62/MP buildall ok. - 2. 88EE MP T/Rx OK. - ---------------------------------------------------------------------------------------------- -<03/29/2012 21:05 Luke.Lee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\odm_HWConfig.c - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - HAL\OUTSRC\rtl8188e\odm_RTL8188E.h - -Change Notes: - 1. [88E]Modify Antenna Diversity - ODM_SetTxAntByAntDiv() needs to be executed in TXDESC in each platform - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EE TP test OK - ---------------------------------------------------------------------------------------------- -<03/27/2012 23:05 MH_Chen> -Modified Files: -Change Notes: - 1. Merge from MP driver V2467 to V2470 to support 8821AU and fix some problem. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 882EU ping ok. - ---------------------------------------------------------------------------------------------- -<03/27/2012 22:10 Luke.Lee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. [88E] Update MAC_PHY_REG V025 - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<03/26/2012 20:15 Luke.Lee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. [88E] Update MAC_PHY_REG V024 - -Verification Before Checked-In: - 1. Power training is verified by Wilson - ---------------------------------------------------------------------------------------------- -<03/21/2012 11:50 Kordan> -Modified Files: - HAL/OUTSRC/odm_HWConfig.c - HAL/rtl8188E/Hal8188ECom.c - PLATFORM/NDIS5/SDIO/sdio_main.c - MPBuild.bat - -Change Notes: - 1. Fix wrong MACRO definition: READ_AND_CONFIG - 2. Minor changes for MP driver. - -Verification Before Checked-In: - 1. N5/N62/MP buildall OK. - ---------------------------------------------------------------------------------------------- -<03/19/2012 11:20 Luke.Lee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - -Change Notes: - 1. Update MAC_PHY Reg V023 - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<03/15/2012 15:30 Kordan> -Modified Files: -Change Notes: - HAL/EFUSE/Hal8188EEfuse.c - HAL/HalDM.c - HAL/HalPci.h - HAL/HalPG.h - HAL/HalSdio.h - HAL/HalUsb.h - HAL/MPT/MPT_HelperFunc.h - HAL/MPT/MPT_Phy.c - HAL/MPT/MPT_Phy.h - HAL/MPT/MPT_Req.c - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_precomp.h - HAL/OUTSRC/rtl8188e/Hal8188EReg.h - HAL/OUTSRC/rtl8188e/odm_RTL8188E.c - HAL/rtl8188E/Hal8188EReg.h - HEADER/CustomOid.h - HEADER/MassProductionDef.h - HEADER/PrecompInc.h - HEADER/RegCommon.h - HEADER/TypeDef.h - - 1. [8188E] Read antenna diversity type (0xC9 in EFUSE) into TRxAntDivType. - 2. [8188E] New OIDs to Set/Query the antenna diversity type. - 3. odm_FastAntTrainingInit for MP driver. - - PLATFORM/MACOSX/PMC_Init.cpp - PLATFORM/NDIS5/N5C_Init.c - PLATFORM/NDIS5/Ndis5Common.h - PLATFORM/NDIS5/PCI/INF/rtwlanemp.inf - PLATFORM/NDIS5/SDIO/INF/netrtwlans.inf - PLATFORM/NDIS5/SDIO/INF/rtwlansmp.inf - PLATFORM/NDIS5/USB/INF/rtwlanump.inf - PLATFORM/NDIS6/Ndis6Common.h - PLATFORM/WinInf/PCI/netrtwlane.inf - PLATFORM/WinInf/PCI/rtwlanemp.inf - PLATFORM/WinInf/USB/netrtwlanu.inf - PLATFORM/WinInf/USB/rtwlanump.inf - - 4. New TRxAntDivType setting in the advance property page of the device manager. - -Verification Before Checked-In: - 1. N5/N62/MP buildall OK. - 2. MP T/Rx OK. - ---------------------------------------------------------------------------------------------- -<03/13/2012 17:40 Luke.Lee> -Modified Files: - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_RF.c - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - HAL\OUTSRC\rtl8188e\RF\RadioA_1T.txt - -Change Notes: - 1. Update MAC_PHY Reg V022 - -Verification Before Checked-In: - 1. 88EE shielding room TP test OK - ---------------------------------------------------------------------------------------------- -<03/12/2012 13:40 Kordan> -Modified Files: - HAL/OUTSRC/Image2Header.exe - -Change Notes: - 1. Bug fixed: wrong output array name of MP chip. - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<03/09/2012 21:45 Kordan> -Modified Files: - HAL/EFUSE/Hal8188EEfuse.c - HAL/HalComReg.h - HAL/HalDM.c - HAL/HalPci.h - HAL/HalSdio.h - HAL/HalUsb.h - HAL/OUTSRC/Image2Header.exe - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm_precomp.h - HAL/OUTSRC/OutputHWImg.bat - HAL/OUTSRC/rtl8188e/HalHWImg8188E_*.* - HAL/rtl8188E/Hal8188ECom.c - HAL/rtl8188E/Hal8188EFirmware.c - HAL/rtl8188E/rtl8188ee/Hal8188EEDef.h - HAL/rtl8188E/rtl8188ee/Hal8188EEGen.c - HAL/rtl8188E/rtl8188es/Hal8188ESdioDef.h - HAL/rtl8188E/rtl8188eu/Hal8188EUsbDef.h - HAL/rtl8188E/rtl8188eu/Hal8188EUsbGen.c - HAL/rtl8188E/rtl8188eu/Hal8812AUsbGen.c - HAL/sources.* - HEADER/HalDef.h - HEADER/Precomp.h.WlanE.Windows - -Change Notes: - 1. Support 8188E runtime configuration of MP chip and Test chip. (determined by "bIsMPChip" variable) - a. This feature is now only enabled in 8188EE. - b. You can #define RTL8188E_FOR_TEST_CHIP 2 to supprt both MP and test chip. - c. Also, #define RTL8188E_FOR_TEST_CHIP 0/1 could reduce the code size. - -Verification Before Checked-In: - 1. N5/N62/MP buildall OK. - ---------------------------------------------------------------------------------------------- -<03/08/2012 21:21 button> -Modified Files: - odm_precomp.h - odm_debug.h - odm.c - odm.h - rtl8188e/Hal8188ERateAdaptive.c -Change Notes: - 1. Resolve compile error in AP platform. -Verification Before Checked-In: - 1. AP platform compile OK. - ---------------------------------------------------------------------------------------------- -<03/08/2012 21:10 Kordan> -Modified Files: - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c - HEADER/Precomp.h.WlanE.Windows - HEADER/Precomp.h.WlanU.Windows - -Change Notes: - 1. Fix switch channel bug which causes OS hung. - 2. Set TEST_CHIP flag to 0. - 3. Fix MP compilation error. - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - ---------------------------------------------------------------------------------------------- -<03/05/2012 16:10 Luke.Lee> -Modified Files: - HAL/OUTSRC/rtl8188e/HalHWImg8188E_MAC.c - HAL/OUTSRC/rtl8188e/HalHWImg8188E_RF.c - HAL/OUTSRC/rtl8188e/MAC/MAC_REG.txt - HAL/OUTSRC/rtl8188e/RF/RadioA_1T.txt - -Added Files: - HAL/OUTSRC/rtl8188e/HalHWImg8188E_MAC_testchip.c/h - HAL/OUTSRC/rtl8188e/HalHWImg8188E_BB_testchip.c/h - HAL/OUTSRC/rtl8188e/HalHWImg8188E_RF_testchip.c/h - -Change Notes: - 1. Update RTL8188E_MAC_PHY_ForMPChip_v021.zip - 2. Rename original MAC/BB/RF files as testchip files - -Verification Before Checked-In: - 2. 8188ES test OK. - ---------------------------------------------------------------------------------------------- -<03/02/2012 19:00 Kordan> -Modified Files: -COMMON/Debug.c - HAL/OUTSRC/Image2Header.exe - HAL/OUTSRC/rtl8188e/*.c - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c - HAL/OUTSRC/rtl8188e/RF/RadioA_1T.txt - -Change Notes: - 1. Update HWIMG headers and Image2Header to handle if-else case. - 2. Turn off RATE_ADAPTIVE_SUPPORT for MP driver. - -Verification Before Checked-In: - 1. N5/N62 buildall OK. - 2. 8188EE ping OK. ---------------------------------------------------------------------------------------------- -<03/02/2012 17:30 Luke.Lee> -Modified Files: - odm.c - odm.h - \rtl8188e\odm_RTL8188E.c - \rtl8188e\odm_RTL8188E.h - -Change Notes: - 1. Simplify timer callback of fast antenna training - -Verification Before Checked-In: - 1. N5/N62 buildall OK - 2. 88EE hang in Win7 from label v234 - 3. 88EU workitem does not work if it is started by timer in WatchDog - ---------------------------------------------------------------------------------------------- -<02/29/2012 19:40 Georgia> -Modified Files: - odm.c - rtl8188e/Hal8188ERateAdaptive.c - rtl8723a/Hal8723UHWImg_CE.c - rtl8723a/Hal8723UHWImg_CE.h - -Change Notes: - 1. Fix incorrect data type usage in func:ODM_RAInfo_Init_all. - 2. Fix compile error for CE Platform. - -Verification Before Checked-In: - 1. Make all ok. - 2. RTL8723A-VAL auto-test ok. - 3. RTL8189E auto-test ok. ---------------------------------------------------------------------------------------------- -<02/24/2012 18:30 Georgia> -Modified Files: - HalPhyRf.c - HalPhyRf.h - odm.c - odm.h - odm_interface.h - odm_precomp.h - rtl8188e/Hal8188ERateAdaptive.c - rtl8188e/Hal8188ERateAdaptive.h - rtl8188e/HalPhyRf_8188e.c - rtl8188e/HalPhyRf_8188e.h - rtl8188e/odm_RTL8188E.c - -Change Notes: - 1. Fix compile error for CE platform. - 2. Add GPL announce. - 3. Remove useless codes. - -Verification Before Checked-In: - 1. Make all ok. - 2. RTL8723A-VAL auto-test ok. - 3. RTL8189E auto-test ok. - ---------------------------------------------------------------------------------------------- -<02/23/2012 17:10 Kordan> -Modified Files: - HAL\OUTSRC\rtl8188e\HalPhyRf_8188e.c -Change Notes: - 1. Update IQK setting and flow. - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<02/23/2012 22:50 MH_Chen> -Modified Files: -Change Notes: - HAL\OUTSRC\odm.c\h - 1. Revise CCK path diversity timer and workitem architecture. - 2. ResetAllHw timer and cancel Hw timer will call ODM relative API.. - -Verification Before Checked-In: - 1. N5/N62 buildall OK - 2. 92CU WIN7 S3/S4/S5 reload/unplug ok. - ---------------------------------------------------------------------------------------------- -<02/23/2012 21:35 MH_Chen> -Modified Files: -Change Notes: - HAL\OUTSRC\odm.c\h - 1. Revise path diversity timer and workitem architecture. - 2. Deleate HAL layer ODM path diversity timer and workitem declaation. - -Verification Before Checked-In: - 1. N5/N62 buildall OK - 2. 92CU WIN7 S3/S4/S5 reload/unplug ok. - ---------------------------------------------------------------------------------------------- -<02/23/2012 20:35 MH_Chen> -Modified Files: -Change Notes: - HAL\OUTSRC\odm.c\h - 1. Revise all ODM timer/workitem init/cancel.release flow. - 2. Add cancel timer API to prevent BSOD and system resource leakage. - 3. Fix unplug fail issue. - -Verification Before Checked-In: - 1. N5/N62 buildall OK - 2. 92CU WIN7 S3/S4/S5 reload/unplug ok. - 3. A special flow bug fixed ==> S3/S4 and then disable or unplug OK in NB111_WIN7. - ---------------------------------------------------------------------------------------------- -<02/22/2012 16:35 MH_Chen> -Modified Files: -Change Notes: - HAL\OUTSRC\odm.c\h - 1. Merge from MP 2444 to 2459. - 2. Some odm code is moved from MP to ODM code base. - -Verification Before Checked-In: - 1. N5/N62 buildall OK - 2. 92CU WIN7 S3/S4/S5 reload/unplug ok. - 3. A special under investigation ==> S3/S4 and then disable or unplug fail. And then - cause all USB port detection fail in QC NB111. - ---------------------------------------------------------------------------------------------- -<02/22/2012 15:35 Kordan> -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c - -Change Notes: - 1. Revise PHY_ResetIQKResult to ODM format, ODM_ResetIQKResult. - 2. Move TxPowerTrackControl initialization to odm_TXPowerTrackingThermalMeterInit. - -Verification Before Checked-In: - 1. N5/N62 buildall OK ---------------------------------------------------------------------------------------------- -<02/21/2012 23:10 Kordan> -Modified Files: - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c - -Change Notes: - 1. Merge TxPower Tracking from trunk to ODM. - 2. Replace EOF pattern, 0xFF, of ParaFiles with 0xFFFF. - -Verification Before Checked-In: - 1. N5/N62 buildall OK - ---------------------------------------------------------------------------------------------- -<02/21/2012 14:45 button> -Modified Files: - odm_precomp.h - odm.c - odm.h - rtl8192c/HalDMOutSrc8192C_AP.c - rtl8188e/odm_RTL8188E.c - rtl8188e/odm_RTL8188E.h - rtl8188e/Hal8188ERateAdaptive.h - rtl8188e/Hal8188ERateAdaptive.c -Change Notes: - 1. Resolve compile error in AP platform. - 2. In AP's IOT engine, search all connected STA, not only root - interface - 3. Sync 92C dynamic mechanism with trunk -Verification Before Checked-In: - 1. AP platform make OK. - 2. 96e+88e ping ok - ---------------------------------------------------------------------------------------------- -<02/19/2012 10:29 Annie> -Modified Files: - -Change Notes: - 1. Fix compile error in ADSL platform. - 2. Correct SNR info. - 3. Add ODM_InitAllTimers interface. - 4. Add ODM_CompareMemory interface. - -Verification Before Checked-In: - 1. ADSL platform make OK. - 2. Ping 65500 OK. - ---------------------------------------------------------------------------------------------- -<02/17/2012 18:05 Kordan> -Modified Files: - HAL/OUTSRC/rtl8188e/HalPhyRf_8188e.c - -Change Notes: - 1. When delta temperature is equal to or larger than 20 centigrade(index delta is about 8), - do IQK and LCK. - 2. Update last thermal value to prevent from running IQK and LCK every time. - -Verification Before Checked-In: - 1. N5/N62 buildall OK - ---------------------------------------------------------------------------------------------- -<02/17/2012 16:45 Luke.Lee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - -Change Notes: - 1. Remove SW AntDiv timer and callback from orignal MP platform - 2. Add init and free all workitems for MP platform - -Verification Before Checked-In: - 1. N5/N62 buildall OK - 2. 88EE web brouse OK - ---------------------------------------------------------------------------------------------- -<02/17/2012 14:18 MH_Chen> -Modified Files: -Change Notes: - 1. Add workitem relative API. Not enabled now, so we need not test. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/16/2012 22:30 LukeLee> -Modified Files: - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - -Change Notes: - 1. [8188E]Modify fast antenna training - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/16/2012 17:00 Mingzhi> -Modified Files: - HAL\OUTSRC\odm.c - -Change Notes: - 1. for CE platform, BE TXOP in B/G/BG/A mode is 0x5e(3ms) - 2. for AP/ADSL platform: fix a bug in BE TXOP - -Verification Before Checked-In: - 1. N5/N62 buildrtwu/buildrtwe ok. - ---------------------------------------------------------------------------------------------- -<02/16/2012 15:00 Luke.Lee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm_precomp.h - -New Files: - HAL\OUTSRC\rtl8188e\odm_RTL8188E.c - HAL\OUTSRC\rtl8188e\odm_RTL8188E.h - -Change Notes: - 1. [8188E]Move Fast antenna training into 88E folder - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/14/2012 23:12 MH_Chen> -Modified Files: -Change Notes: - 1. FIX ODM tracking list item 60. Revise ODM 88E rate adaptive ability support. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 8188EU ping test ok. - ---------------------------------------------------------------------------------------------- -<02/14/2012 22:12 MH_Chen> -Modified Files: -Change Notes: - 1. FIX ODM tracking list item 58. Revise ODM ability support. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 8188EU ping test ok. - ---------------------------------------------------------------------------------------------- -<02/14/2012 15:40 Georgia> -Modified Files: - odm.c - odm_debug.h - -Change Notes: - 1.Turn on EDCA Turbo function for BG mode (CE Platform) - -Verification Before Checked-In: - 1. CE Platform make ok. - 2. 8188E-SDIO auto-test ok. - ---------------------------------------------------------------------------------------------- -<02/13/2012 17:45 Luke.Lee> -Modified Files: - - HAL\OUTSRC\rtl8188e\MAC\MAC_REG.txt - HAL\OUTSRC\rtl8188e\HalHWImg8188E_MAC.c - -Change Notes: - - 1.Update RTL8188E_MAC_PHY_ForTestChip_v020 - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<02/13/2012 17:30 Luke.Lee> -Modified Files: - - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\odm_HWConfig.c - -Change Notes: - - 1.Modify fast antenna training (default disabled) - -Verification Before Checked-In: - 1. N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/10/2012 19:20 JueYang> -Modified Files: - COMMON\MgntLink.c - - HAL\DESC\Hal8188EETxDesc.c - - HAL\OUTSRC\rtl8188e\Hal8188ERateAdaptive.c - HAL\OUTSRC\rtl8188e\odm_RegConfig8188E.c - PLATFORM\NDIS6\N6C_OidSet.c - PLATFORM\NDIS6\N6C_Req.c - PLATFORM\NDIS6\Ndis_OID.c - - HAL\OUTSRC\odm.c - - HAL\rtl8188E\rtl8188ee\Hal8188EEGen.c - -Change Notes: - - COMMON\MgntLink.c - 1. Do MgntLinkRequest in function MgntLinkRetry even if JoinProbeRequestTimer cancel NG and SET flag is TRUE. - 2. Tune 3U Throughput for DIR 655. Reserved at least 2 packets in Tx FIFO to triggle early mode but avoid single AMPDU. - - HAL\DESC\Hal8188EETxDesc.c - 1. Fix DTM Fuzz BOSD for memory overflow when move memory for ealy mode dummy. Some codes are not covered by pHalData->bEarlyModeEnable. - - HAL\OUTSRC\rtl8188e\Hal8188ERateAdaptive.c - HAL\OUTSRC\rtl8188e\odm_RegConfig8188E.c - PLATFORM\NDIS6\N6C_OidSet.c - PLATFORM\NDIS6\N6C_Req.c - PLATFORM\NDIS6\Ndis_OID.c - 1. Just revise some traces. - - HAL\OUTSRC\odm.c - 1. Fix memory overwrite when update AsocEntry RA mask. The function odm_RefreshRateAdaptiveMaskMP tries to write MgntInfo.AsocEntry[ODM_ASSOCIATE_ENTRY_NUM-1]. - - HAL\rtl8188E\rtl8188ee\Hal8188EEGen.c - 1. Fix RX Hang after RF Off and RF On. Enable TRX DMA(REG[0x301]=0) during intialization. - -Verification Before Checked-In: - 1. N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/09/2012 22:41 MH_Chen> -Modified Files: -Change Notes: - MERGE MP V2435. - 1. Increase build speed and revise aarchitecture. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 1. 88EU reload/s3 ping ok. - ---------------------------------------------------------------------------------------------- -<02/09/2012 17:20 Kordan> -Modified Files: - HAL\OUTSRC\Image2Header.exe - -Change Notes: - 1. Fix wrong output values of Image2Header. - -Verification Before Checked-In: - 1. None. - ---------------------------------------------------------------------------------------------- -<02/08/2012 17:50 Luke.Lee> -Modified Files: - HAL\OUTSRC\rtl8188e\BB\PHY_REG_1T.txt - HAL\OUTSRC\rtl8188e\RF\RadioA_1T.txt - HAL\OUTSRC\rtl8188e\HalHWImg8188E_BB.c - HAL\OUTSRC\rtl8188e\HalHWImg8188E_RF.c - -Change Notes: - 1. Update MAC_PHY reg v019 - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EE run chariot ok. - ---------------------------------------------------------------------------------------------- -<02/08/2012 17:20 Luke.Lee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm_HWConfig.c - -Change Notes: - 1. modify ODM_BB_ANT_DIV init in MP Platform - 2. [8188E] modify fast antenna training (default disabled) - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EE run chariot ok. - ---------------------------------------------------------------------------------------------- -<02/07/2012 21:30 MH_Chen> -Modified Files: -Change Notes: - 1. Revise all batch file for MP. To fasten build speed. - 2. We do not request ODM to check buildrtwee/eu/es. The batch files will be removed later. - 3. Enable 92CU C2H timer for intel case. - 4. Prevent SDIO build error by modifying buildclean all. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EU ping ok. - ---------------------------------------------------------------------------------------------- -<02/07/2012 21:10 Luke.Lee> -Modified Files: - HAL\OUTSRC\odm.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\odm_HWConfig.c - -Change Notes: - 1. [8188E] Modify fast antenna training (default disabled) - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/07/2012 13:35 JueYang> -Modified Files: - HAL\DESC\Hal8188EETxDesc.c - HAL\PHY\HalComPhyCfg.c - -Change Notes: - 1. [8188E] Revise Power Trainning. - -Verification Before Checked-In: - 1. N62 buildrtwe ok. - ---------------------------------------------------------------------------------------------- -<02/07/2012 11:05 JueYang> -Modified Files: - HAL\OUTSRC\rtl8188e\HalPhyRf_8188e.c - -Change Notes: - 1. [8188EE] Fix pbScanInProcess error which cause initialize 88ee delayed 3 seconds. - -Verification Before Checked-In: - 1. N62 buildrtwe ok. - ---------------------------------------------------------------------------------------------- -<02/06/2012 21:30 Luke.Lee> -Modified Files: - 1. rtl8188e/* - -Change Notes: - 1. [8188E] Update 88E MAC_PHY_REG v018 - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/06/2012 20:30 Luke.Lee> -Modified Files: - 1. rtl8188e/* - -Change Notes: - 1. [8188E] Update 88E MAC_PHY_REG v017 - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EU vs Cisco1252 20M mode DL/UL:48Mbps - ---------------------------------------------------------------------------------------------- -<02/06/2012 13:30 Kordan> -Modified Files: - 1. Image2Header.exe - 2. rtl8723a/* - 3. rtl8188e/* - -Change Notes: - 1. Update Image2Header to remove the redundant code. - -Verification Before Checked-In: - 1. N5/N6/N62 buildall ok. - ---------------------------------------------------------------------------------------------- -<02/06/2012 11:24 MH_Chen> -New Files: -Delete FIles: -Modified Files: -Change Notes: - 1. MErge MP V2516 to fix TX short cut and SDIO build error. - -Verification Before Checked-In: - 1. N5/N6/N62 buildall ok. (Do not support buildrtwes in buildall now.) - 2. 88EU ping ok. - ---------------------------------------------------------------------------------------------- -<02/03/2012 18:20 Georgia> -New Files: -Delete FIles: -Modified Files: - rtl8188e/HalPhyRf_8188e.c - -Change Notes: - 1. Fix compile error for CE Platform. - -Verification Before Checked-In: - 1. CE Platform make ok. - 2. 8723AU auto-test ok. - 3. 8188E-SDIO auto-test ok. - ---------------------------------------------------------------------------------------------- -<02/03/2012 17:35 MH_Chen> -New Files: -Delete FIles: -Modified Files: -Change Notes: - 1. Revise 88E MAC init flow. - -Verification Before Checked-In: - 1. N6/N5 buildall OK. except sdio driver.. - 2. 92CU S3/S5/Reload/Unplug and ping WPA2-AES ok. - ---------------------------------------------------------------------------------------------- -<02/03/2012 14:30 MH_Chen> -New Files: -Delete FIles: -Modified Files: -Change Notes: - COMMON\ApEngine.c - COMMON\WOLPattern.c - 1. Support ODM for AP engine in MP. - 2. Fix SDIO compile error. - - HAL\BTCoexist\HalBtCoexist.c\h - HAL\DESC\Hal8192CRxDesc.c - HAL\HWIMG\HalHWImg.h - 1. Support ODM for BT in MP driver. - 2. IC support flag is moved to haldef.h. - HAL\OUTSRC\rtl8188e\Hal8188ERateAdaptive.c - HAL\OUTSRC\rtl8188e\HalPhyRf_8188e.c - 1. Fix MP compile error. - - HAL\PHY\Hal8188EPhyCfg.c\h - HAL\PHY\Hal8192CPhyCfg.c\h - HAL\PHY\Hal8192DPhyCfg.h - HAL\PHY\HalComPhyCfg.h - 1. Disable original RF calibraet power tracking mechanism in MP old drv. - 2. Georgia move some constant declare from MP old position to ODM. - - HEADER\... - 1. Define IC support flag. - 2. Revise precomp for SDIO build. - - Build batch files: - 1. Support MP all IC with ODM module. - 2. Support all SDIO driver build. - 3. Spport 8812E build. - -Verification Before Checked-In: - 1. N6/N5 buildall OK. We do not check EE/EU/ES sereis build batch file. - 2. 92CU S3/S5/Reload/Unplug and ping WPA2-AES ok. - ---------------------------------------------------------------------------------------------- -<02/03/2012 15:30 Georgia> -Change Notes: - 1. Add func:odm_RATxRPTTimerSetting,to prevent do IO frequently. - -Verification Before Checked-In: - 1. CE Platform make ok. - 2. 8723AU auto-test ok. - 3. 8188E-SDIO auto-test ok. ---------------------------------------------------------------------------------------------- -<02/03/2012 13:40 Georgia> -Change Notes: - 1. Fix compile error for CE Platform. - 2. add relative code for integrate RF Calibration.(add struct ODM_RF_CAL_T) - 3. integrate RA/Tx power training/RF calibration/tx power tracking for 8188ES - 4. Add interface: ODM_CompareMemory. - -Verification Before Checked-In: - 1. CE Platform make ok. - 2. 8723AU auto-test ok. - 3. 8188E-SDIO auto-test ok. ---------------------------------------------------------------------------------------------- -<02/02/2012 21:30 Luke.Lee> -Change Notes: - 1. Enable 88E Early Mode for all IOT peers - -Verification Before Checked-In: - 1. N62 buildall OK - 2. 88EU TP verfication OK ---------------------------------------------------------------------------------------------- -<02/02/2012 21:00 button> -Modified Files: - odm.h - odm.c - odm_HWConfig.h - odm_HWConfig.c - odm_interfac.c -Change Notes: - 1. AP's timer function - 2. AP's antenna diversity callback function - 3. AP's BB,MAC,RF config -Verification Before Checked-In: - 1. AP platform build ok. ---------------------------------------------------------------------------------------------- -<02/02/2012 17:45 JueYang> -Change Notes: - Hal8188EEHWImg.c - Hal8188EEHWImg.h - Hal8188EUHWImg.c - Hal8188EUHWImg.h - Hal8188ESHWImg.c - Hal8188ESHWImg.h - 1. Update 8188E HWImg header file. - -Verification Before Checked-In: - 1. N62 buildall OK ---------------------------------------------------------------------------------------------- -<02/02/2012 17:30 JueYang> -Change Notes: - Precomp.h.WlanU.Windows - usb_DrvIF.c - 1. [8188EU] Fix BSOD. - -Verification Before Checked-In: - 1. N62/N5 buildall OK - 2. 88EU test OK ---------------------------------------------------------------------------------------------- -<02/02/2012 11:20 LukeLee> -Change Notes: - 1. [8188EE/8188ES] InitHalDm should be put ahead of PHY_MACConfig(Adapter)! - 2. Fix compile error - -Verification Before Checked-In: - 1. N62/N5 buildall OK - 2. 88EE ping OK - ---------------------------------------------------------------------------------------------- -<02/01/2012 23:15 Kordan> -Change Notes: - 1. Remove inappropriate 8723_SUPPORT MACRO definition in Precomp.h. - -Verification Before Checked-In: - 1. none - ---------------------------------------------------------------------------------------------- -<02/01/2012 22:10 Kordan> -Change Notes: - 1. To avoid redefinition, function names are changed in odm_RegConfig8188E and odm_RegConfig8723A. - -Verification Before Checked-In: - 1. N62/N5 buildall OK - ---------------------------------------------------------------------------------------------- -<02/01/2012 21:10 LukeLee> -Change Notes: - 1. [8188EU] InitHalDm should be put ahead of PHY_MACConfig(Adapter)! - 2. [8188E] MAC/BB/RF Reg init flow by ODM - -Verification Before Checked-In: - 1. N62/N5 buildall OK - 2. 88EU ping OK - ---------------------------------------------------------------------------------------------- -<02/01/2012 18:10 Kordan> -Change Notes: - 1. Update Image2Header and upload the batch file to output hardware images. - 2. Rename the parameter filename to comply with Image2Heaeder's rule. - 2. [8188EU] InitHalDm should be put ahead of PHY_MACConfig(Adapter)! - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<02/01/2012 11:10 Kordan> -Change Notes: - 1. Add 8188E Hardware Images. - 2. Change the delay pattern, 0xfe, to 0xffe. (0xfe is a active register of 8188E) - -Verification Before Checked-In: - 1. None - ---------------------------------------------------------------------------------------------- -<01/31/2012 22:27 Annie> -Change Notes: - 1. Fix compile error in ADSL platform. - -Verification Before Checked-In: - 1. ADSL platform make OK. - 2. Ping FAIL. - ---------------------------------------------------------------------------------------------- -<01/31/2012 17:00 Luke.Lee> -Modified Files: -Change Notes: - 1. Fix 88EU TX DESC bug - 2. Add Fast Antenna Training Mechanism (default disabled) - 3. enable 88EU auto RTS - 4. Add control flag pAntDivCfg to SW AntDiv - -Verification Before Checked-In: - 1. N6/N5 buildall OK - 2. 92CU run TP OK but 88EU TP bad - ---------------------------------------------------------------------------------------------- -<01/31/2012 16:07 MH_Chen> -Modified Files: -Change Notes: - 1. Merge MP SDIO driver for ODM module test. Unti version 2412. - 2. Revise for MP common binary & ODM compatiable. - -Verification Before Checked-In: - 1. N5/N62 Buildall ok. - 2. 92CU win7 unplug/reload/S3/S5 ok. - ---------------------------------------------------------------------------------------------- -<01/30/2012 21:13 MH_Chen> -Modified Files: -Change Notes: - 1. Fix rtwlan SDIO source file for MP. - 2. Revise precomp header file and batch file for MP SDIO driver. - -Verification Before Checked-In: - 1. N5 Build SDIO driver ok. - ---------------------------------------------------------------------------------------------- -<01/30/2012 20:40 MH_Chen> -Modified Files: -Change Notes: - 1. Revise ODM phy rx desc query for MP. - 2. Revise precomp header file for USB. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. N5 Build 8723AS fail. - 2. 92CU test ok. Link with WPA2-AES AP. Unplug/reload/S3 ok. - ---------------------------------------------------------------------------------------------- -<01/29/2012 17:00 JueYang> -Modified Files: - HAL\OUTSRC\odm.c - - PLATFORM\NDIS6\USB\N6Usb_DrvIF.c - -Change Notes: - HAL\OUTSRC\odm.c - 1. Fix RA info not initialized. - - PLATFORM\NDIS6\USB\N6Usb_DrvIF.c - 1. Fix a mistake in writing which cause USB memory leak. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. 88EE\88CE\88CU test ok. ---------------------------------------------------------------------------------------------- -<01/29/2012 13:20 JueYang> -Modified Files: - COMMON\WOLPattern.c - HAL\rtl8188E\rtl8188eu\Hal8188EUsbGen.c - HAL\rtl8188E\Hal8188ECom.c - HAL\rtl8188E\Hal8812Com.c - HAL\rtl8192C\rtl8192ce\Hal8192CEGen.c - HAL\rtl8192C\rtl8192cu\Hal8192CUsbGen.c - HAL\rtl8192S\rtl8192se\Hal8192SEGen.c - HEADER\TypeDef.h - PLATFORM\NDIS5\PCI\Mp_Req.c - PLATFORM\NDIS5\USB\Mp_Req.c - PLATFORM\NDIS5\N5C_Init.c - PLATFORM\NDIS6\PCI\Mp_Req.c - PLATFORM\NDIS6\PCI\N6Pci_Main.c - PLATFORM\NDIS6\USB\Mp_Req.c - PLATFORM\NDIS6\USB\N6Usb_main.c - PLATFORM\NDIS6\N62C_SetOID.c - - HAL\EFUSE\Hal8192CEfuse.c - HAL\EFUSE\HalEfuse.h - HAL\OUTSRC\odm.c - HEADER\RegCommon.h - -Change Notes: - COMMON\WOLPattern.c - HAL\rtl8188E\rtl8188eu\Hal8188EUsbGen.c - HAL\rtl8188E\Hal8188ECom.c - HAL\rtl8188E\Hal8812Com.c - HAL\rtl8192C\rtl8192ce\Hal8192CEGen.c - HAL\rtl8192C\rtl8192cu\Hal8192CUsbGen.c - HAL\rtl8192S\rtl8192se\Hal8192SEGen.c - HEADER\TypeDef.h - PLATFORM\NDIS5\PCI\Mp_Req.c - PLATFORM\NDIS5\USB\Mp_Req.c - PLATFORM\NDIS5\N5C_Init.c - PLATFORM\NDIS6\PCI\Mp_Req.c - PLATFORM\NDIS6\PCI\N6Pci_Main.c - PLATFORM\NDIS6\USB\Mp_Req.c - PLATFORM\NDIS6\USB\N6Usb_main.c - PLATFORM\NDIS6\N62C_SetOID.c - 1. Use MAX_SUPPORT_WOL_PATTERN_NUM(Adapter) instead of MAX_SUPPORT_WOL_PATTERN_NUM. - - HAL\EFUSE\Hal8192CEfuse.c - HAL\EFUSE\HalEfuse.h - HAL\OUTSRC\odm.c - HEADER\RegCommon.h - 1. Remove HAL_SUPPORT_88E_92C. - -Verification Before Checked-In: - 1. N5/N62 buildall ok ---------------------------------------------------------------------------------------------- -<01/29/2012 11:20 JueYang> -Modified Files: - COMMON\MgntGen.c - COMMON\sources.Ebd - COMMON\sources.props - COMMON\sources.Win - COMMON\TDLSGen.c - COMMON\TransmitDesc.c - HAL\DESC\Hal8188EERxDesc.c - HAL\DESC\Hal8188EETxDesc.c - HAL\DESC\Hal8188ESdioRxDesc.c - HAL\DESC\Hal8188ESdioTxDesc.c - HAL\DESC\Hal8188EUsbRxDesc.c - HAL\DESC\Hal8188EUsbTxDesc.c - HAL\DESC\HalComRxDesc.c - HAL\DM\HalComDM.c - HAL\OUTSRC\Hal8188EDMOutSrc.c - HAL\OUTSRC\odm.h - HAL\OUTSRC\rtl8188e\Hal8188ERateAdaptive.h - HAL\OUTSRC\rtl8188e\Hal8188ERateAdaptive.c - HAL\rtl8188E\rtl8188ee\Hal8188EEGen.c - HAL\rtl8188E\rtl8188ee\Hal8812EGen.c - HAL\rtl8188E\rtl8188es\Hal8188ESdioGen.c - HAL\rtl8188E\rtl8188eu\Hal8188EUsbGen.c - HAL\rtl8188E\Hal8188ECom.c - HAL\rtl8192C\rtl8192ce\Hal8192CEGen.c - HAL\rtl8192C\rtl8192cs\Hal8192CSdioGen.c - HAL\rtl8192C\rtl8192cu\Hal8192CUsbGen.c - HAL\rtl8192S\rtl8192se\Hal8192SEGen.c - HAL\rtl8192S\rtl8192su\Hal8192SUsbGen.c - HAL\HAL.mk - HAL\HalCommon.c - HAL\HalDM.c - HAL\sources.WlanE - HAL\sources.WlanE.props - HAL\sources.WlanU.props - HAL\sources.WlanU.Win - HEADER\HalDef.h - Precomp.h.WlanE.Windows - HEADER\PrecompInc.h - HEADER\TypeDef.h - -Change Notes: - 1. Move RA from COMMON\ to HAL\OURSRC\RTL8188E. - 2. Support 88E and other chips when RATE_ADAPTIVE_SUPPORT=1. - -Verification Before Checked-In: - 1. N5/N62 buildall ok ----------------------------------------------------------------------------------------------- -<01/20/2012 19:07 MH_Chen> -Modified Files: -Change Note: - 1. Merge MP V 2401-2410. - -Verification Before Checked-IN - 1. N5/N6 buildall ok. - 2. 92CU win7 ping test ok. - ----------------------------------------------------------------------------------------------- -<01/19/2012 22:30 MH_Chen> -Modified Files: -Change Note: - 1. Support 8188E power tracking mechanism in odm folder for MP. - -Verification Before Checked-IN - 1. N5/N6 buildall ok. - 2. 92CU win7 ping test ok. - ----------------------------------------------------------------------------------------------- -<01/19/2012 21:30 MH_Chen> -Modified Files: -Change Note: - 1. Merge MP V 2384-2400 to support new 88EU/8812U features. - -Verification Before Checked-IN - 1. N5/N6 buildall ok. - 2. 92CU win7 ping test ok. - 3. 92CU XP chariot throughput 1HR ok. - ----------------------------------------------------------------------------------------------- -<01/19/2012 20:00 MH_Chen> -Modified Files: -Change Note: - 1. According to chariot test. 88EU will fail in RX side, we found that - the reason is due to precomp.h setting. If you want to test 88E series IC - Please use below setting. We will fix the problem later. - -#if 1 // For 92C/92D/8723A -#define HAL_SUPPORT_88E_92C 0 -#if (HAL_SUPPORT_88E_92C ==1) - #undef RTL8192D_DUAL_MAC_MODE_SWITCH - #define RTL8192D_DUAL_MAC_MODE_SWITCH 0 - #undef RTL8192D_EASY_SMART_CONCURRENT - #define RTL8192D_EASY_SMART_CONCURRENT 0 - #define RTL8188E_FOR_MP_TEST 1 - #define RTL8188E_EARLY_MODE_PKT_NUM_10 1 - -#endif -#else // for 88E -#define HAL_SUPPORT_88E_92C 1 -#if (HAL_SUPPORT_88E_92C ==1) - #undef RTL8192D_DUAL_MAC_MODE_SWITCH - #define RTL8192D_DUAL_MAC_MODE_SWITCH 0 - #undef RTL8192D_EASY_SMART_CONCURRENT - #define RTL8192D_EASY_SMART_CONCURRENT 0 - #define RTL8188E_FOR_TEST_CHIP 1 - #define RTL8188E_EARLY_MODE_PKT_NUM_10 1 - #define POWER_TRAINING_ACTIVE 0 - #define RATE_ADAPTIVE_SUPPORT 1 - -#endif -#endif - -Verification Before Checked-IN - 1. 88EU/92CU chariot throughput test ok. - ----------------------------------------------------------------------------------------------- -<01/19/2012 16:00 MH_Chen> -Modified Files: -Change Note: - 1. Move 8188E PHY calibrate relative code from HAL\PHY to HAL\ODM\rtl8188e - 2. Revise MP source & build environment for testing ok. - -Verification Before Checked-IN - 1. MP N5/N6 buildall ok. - 2. 92CU win7 ping test ok. - ----------------------------------------------------------------------------------------------- -<01/19/2012 11:50 Georgia> -Modified Files: - odm_HWConfig.c - -Change Note: - 1. Fix compile error and wrning for CE. - 2. Fix system crash for CE. (in func:odm_Process_RSSIForDM incorrect condition judgment) - -Verification Before Checked-IN - 1. CE mak all ok. - 2. 92DU-VS auto-test ok. ----------------------------------------------------------------------------------------------- -<01/17/2012 23:03 MH_Chen> -Modified Files: -Change Note: - 1. Merge PHY-RF relative API for HW out source share. - 2. Disable MP PHY-RF calibrate relative function. - 3. Revise MP build environment for compile pass. - -Verification Before Checked-IN - 1. N5/N62 buildall OK. - 2. CU Win7/XP ping with WPA2-AES AO OK. - ----------------------------------------------------------------------------------------------- -<01/16/2012 18:20 Luke.Lee> -Modified Files: -Change Note: - 1. Fix ODM_CmnInfoInit() - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. 88EU Win7 ping OK - ----------------------------------------------------------------------------------------------- -<01/16/2012 11:30 Luke.Lee> -Modified Files: -Change Note: - 1. Modify 88E CCK RSSI formula. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. 88CE Win7 ping OK - ----------------------------------------------------------------------------------------------- -<01/13/2012 17:32 Georgia> -Modified Files: -Change Note: - 1. Fix compile error for CE. - -Verification Before Checked-IN - 1. CE Platform make ok. - 2. 88CU/92DU-VS/8723AU/8723AS/8188ES Auto-test ok. - ----------------------------------------------------------------------------------------------- -<01/13/2012 16:35 MH_Chen> -Modified Files: -Change Note: - 1. Revise common binary arch for 88EE/88EU. - 2. Fine tune build environment for MP driver. - -Verification Before Checked-IN - 1. N5/N6/N62 buildall ok. - 2. XP platform 88EU ping and reload ok. - 3. Vista platform 92CU link with dir-655 and ping ok. - 4. WIn7 platform 88CU/92DU-VS/8723AU work at the same with rtwlanu.sys. - Ping with dir-655 wpa2-aes S3/S5/reload ok. - - ----------------------------------------------------------------------------------------------- -<01/12/2012 23:50 MH_Chen> -Modified Files: -Change Note: - 1. Merge MP V 2383 to support 88EU/8812U in the same binary. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. Vista platform 92CU link with dir-655 and ping ok. S3 fail~~!!! Under investigation. - 3. WIn7 platform 88CU/92DU-VS/8723AU work at the same with rtwlanu.sys. - Ping with dir-655 wpa2-aes S3/S5/reload ok. - ----------------------------------------------------------------------------------------------- -<01/12/2012 22:46 MH_Chen> -Modified Files: -Change Note: - 1. Support default & AP mode STA info revise for MP. - 2. Fix tracking list item 23/44. - 3. Add more universal interface for power tracking and rf calibrate. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. Vista platform 92CU link with dir-655 and ping ok. - ----------------------------------------------------------------------------------------------- -<01/12/2012 22:02 MH_Chen> -Modified Files: -Change Note: - 1. Merge mp driver to v2382. - 2. Revise MP DM entry arch. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - ----------------------------------------------------------------------------------------------- -<01/12/2012 17:20 MH_Chen> -Modified Files: -Change Note: - 1. Merge mp driver to v2382. - 2. Revise MP DM entry arch. - -Verification Before Checked-IN - 1. N5/N6/N62 buildall ok. - 2. 88CU/8723AU/92DU test in the win7 platfrom. Ping with DIR-655 WPA2-AES ok. - ----------------------------------------------------------------------------------------------- -<01/12/2012 16:20 MH_Chen> -Modified Files: -Change Note: - 1. Fix 92CU BSOD in win7 platfrom due to ODM deinit with null ptr. - 2. Delete MP useless folder. - 3. Revise driver linked & compilerd object. - 4. Revise indlud file flow. - -Verification Before Checked-IN - 1. N5/N6/N62 buildall ok. - 2. 88CU/8723AU/92DU test in the win7 platfrom. S3/S4/reload unplug with DIR-655 WPA2-AES - and ping 1HR ok. Reload more than 150 rounds ok. - ----------------------------------------------------------------------------------------------- -<01/11/2012 22:30 MH_Chen> -Modified Files: -Change Note: - 1. Enable 8723 ODM HW config mode. - -Verification Before Checked-IN - 1. N62 buildrtwu ok. - 2. 88CU/8723AU/92DU test in the win7 platfrom. S3/S4/reload unplug with DIR-655 WPA1-AES - and ping 1HR ok. - ----------------------------------------------------------------------------------------------- -<01/11/2012 21:30 MH_Chen> -Modified Files: -Change Note: - 1. Merge MP driver from v2258 to v2377. - 2. Revise ODM structure for MP. - 3. Mere 88E/8812/8821 common binary. - -Verification Before Checked-IN - 1. N5/N6/N62 buildall ok. - 2. CU WIN7/Vista DIR-655 WPA2/AES S3/S4/S5 reload and ping ok. - 3. DU WIN7 DIR-655 WPA2/AES S3/S4/S5 reload and ping ok. - 3. IN IBM X60 platfrom, run CU reload endurance test. - ----------------------------------------------------------------------------------------------- -<01/10/2012 10:07 Mingzhi> -Modified Files: -Change Note: - 1. fix a bug which will cause BSOD - -Modified Files: - 1. odm.c - 2. odm_RTL8192D.c - -Verification Before Checked-IN - 1. N5 buildrtwu/buildrtwe ok - 2. 88CE plug ok ----------------------------------------------------------------------------------------------- -<01/10/2012 21:30 MH_Chen> -Modified Files: -Change Note: - 1. Merge MP driver from v2218 to v2258. - 2. Revise ODM structure for MP. - 3. Mere 88E common binary. - -Verification Before Checked-IN - 1. N5/N6/N62 buildall ok. - 2. WIN7/Vista DIR-655 WPA2/AES S3/S4/S5 reload and ping ok. - 3. IN previous IBM X60 platfrom, we can ping over 2 HRs ok, no periodic disconnect event. - ----------------------------------------------------------------------------------------------- -<01/10/2012 16:15 MH_Chen> -Modified Files: -Change Note: - 1. Fix unload fail when deinit haldm in platform layer. - -Verification Before Checked-IN - 1. ping with dir-655 and reload ok in vista. - ----------------------------------------------------------------------------------------------- -<01/09/2012 20:08 MH_Chen> -Modified Files: -Change Note: - 1. Fix compile error in MP. - 2. Fix USB init fail for inithaldm in platfrom or hal layer. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. 8188CUS Vista & win7 ping with DIR-655 wpa2 aes ok. - ----------------------------------------------------------------------------------------------- -<01/09/2012 18:45 Georgia> -Modified Files: - odm.c - odm.h - odm_HWConfig.c - rtl8723a/odm_RegConfig8723A.c - rtl8723a/odm_RegConfig8723A.h - -Change Note: - 1. Fix compile error in CE. - 2. Fix SW-ANT-DIV bug. - -Verification Before Checked-IN - 1. CE-Platform make ok. - 2. 8188CUS with SW-ANT-DIV auto-test ok. ----------------------------------------------------------------------------------------------- -<01/09/2012 13:05 Kordan> -Modified Files: - HAL/OUTSRC/odm_precomp.h - -Added Files: - rtl8723a/odm_RegConfig8723A.h - rtl8723a/odm_RegConfig8723A.c - -Change Note: - 1. Merge RTLXXXXX_HWIMG_SUPPORT and RTLXXXXX_SUPPORT precompile flags to RTLXXXXX_SUPPORT. - 2. Rename odm_HWConfigCallee to odm_RegConfig8723A.h/.c and put it in each individual IC folder. - -Verification Before Checked-IN - 1. MP N5/6/62 buildall ok. ----------------------------------------------------------------------------------------------- -<01/09/2012 10:40 MH_Chen> -Modified Files: -Change Note: - 1.Fix N5/N6/ All IC compile error in MP. - -Verification Before Checked-IN - 1.N5/N62 buildall OK - 2. Link with DIR-655 with 92CU but performance is very bad~~~!! Connect and disconnect periodically~~~!! - 3. Try another RTK AP also meet hard to link problem. - ----------------------------------------------------------------------------------------------- -<01/06/2012 15:40 Georgia> -Added Files: - rtl8192c/Hal8192CEFWImg_CE.c - rtl8192c/Hal8192CEFWImg_CE.h - rtl8192c/Hal8192CEMACImg_CE.c - rtl8192c/Hal8192CEMACImg_CE.h - rtl8192c/Hal8192CEPHYImg_CE.c - rtl8192c/Hal8192CEPHYImg_CE.h - rtl8192c/Hal8192CUFWImg_CE.c - rtl8192c/Hal8192CUFWImg_CE.h - rtl8192c/Hal8192CUMACImg_CE.c - rtl8192c/Hal8192CUMACImg_CE.h - rtl8192c/Hal8192CUPHYImg_CE.c - rtl8192c/Hal8192CUPHYImg_CE.h - rtl8192d/Hal8192DEFWImg_CE.c - rtl8192d/Hal8192DEFWImg_CE.h - rtl8192d/Hal8192DEMACImg_CE.c - rtl8192d/Hal8192DEMACImg_CE.h - rtl8192d/Hal8192DEPHYImg_CE.c - rtl8192d/Hal8192DEPHYImg_CE.h - rtl8192d/Hal8192DUFWImg_CE.c - rtl8192d/Hal8192DUFWImg_CE.h - rtl8192d/Hal8192DUMACImg_CE.c - rtl8192d/Hal8192DUMACImg_CE.h - rtl8192d/Hal8192DUPHYImg_CE.c - rtl8192d/Hal8192DUPHYImg_CE.h - rtl8723a/Hal8723SHWImg_CE.c - rtl8723a/Hal8723SHWImg_CE.h - rtl8723a/Hal8723UHWImg_CE.c - rtl8723a/Hal8723UHWImg_CE.h - -Modified Files: - odm.c - odm_precomp.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - -Change Note: - 1.)add related phy-parameters for CE. - 2.)remove useless code of SW-Ant-div for CE. - -Verification Before Checked-IN - 1. CE-Platform make OK. - 2. 8188CUS With SW-ANT-DIV auto-test OK. - ----------------------------------------------------------------------------------------------- -<01/05/2012 20:00 Luke.Lee> -Modified Files: - odm.c - odm_HWConfig.c - odm_HWConfig.h - odm_precomp.h - rtl8192d/odm_RTL8192D.c - -Change Note: - 1.Fix DIG error in some condition - 2.include 88E modification from MERGE_TEMP - 3.remove 64bit division - -Verification Before Checked-IN - 1.N5/N62 buildall OK - ----------------------------------------------------------------------------------------------- -<01/04/2012 18:30 Georgia> -Modified Files: - odm.c - odm.h - odm_precomp.h - odm_types.h - rtl8192d/odm_RTL8192D.c - -Change Note: - 1.Fix compile error for CE. - -Verification Before Checked-IN - 1.CE-platform make ok. - 2.92DU-VS autotest ok. - ----------------------------------------------------------------------------------------------- -<01/04/2012 16:00 Mingzhi> -Modified Files: - 1.odm.c - 2.odm_RTL8192D.c - - -Change Note: - 1. fix a bug in ODM_Write_CCK_CCA_Thres/ODM_Write_CCK_CCA_Thres_92D - -Verification Before Checked-IN - 1. N5 buildrtwu/buildrtwe ok - ----------------------------------------------------------------------------------------------- -<01/02/2012 17:40 Kordan> -Removed Files: - HAL/OUTSRC/rtl8723/* - HAL/OUTSRC/rtl8723a/Hal8723HWImg* - HAL/OUTSRC/rtl8723a/Hal8723HWImg_RF.h - HAL/OUTSRC/rtl8723a/Hal8723SHWImg.* - HAL/OUTSRC/rtl8723a/Hal8723UHWImg.* - -Change Note: - 1. none - -Verification Before Checked-IN - 1. none ----------------------------------------------------------------------------------------------- -<01/02/2012 17:35 Kordan> -Modified Files: - HAL/HWIMG/HalHWImg.h - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm_precomp.h - -Added Files: - HAL/OUTSRC/odm_HWConfigCallee.h - -Change Note: - 1. Revise the architecture of ODM HW configuration to meet the memory restriction of CE. - a. odm_HWConfigCallee.h to declare functions used in ODM_ReadAndConfig. - 2. Fix compile error for MP. - a. rename Hal8723*HWImg.* to Hal8723*HWImg_CE.* - b. define RTL8192D_HWIMG_SUPPORT - 3. Rename the output hw images' name. - -Verification Before Checked-IN - 1. MP N5/6/62 buildall ok. - 2. 8723AU ping OK. ----------------------------------------------------------------------------------------------- -<12/29/2011 22:30 Georgia> -Modified Files: - odm.c - odm.h - odm_HWConfig.c - odm_precomp.h - odm_types.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h -Added Files: - rtl8723a - rtl8723a/BB - rtl8723a/BB/AGC_TAB_1T.TXT - rtl8723a/BB/PHY_REG_1T.txt - rtl8723a/BB/PHY_REG_MP.txt - rtl8723a/BB/PHY_REG_PG.txt - rtl8723a/FW - rtl8723a/FW/rtl8723fw.BIN - rtl8723a/Hal8723HWImg_BB.c - rtl8723a/Hal8723HWImg_BB.h - rtl8723a/Hal8723HWImg_FW.c - rtl8723a/Hal8723HWImg_FW.h - rtl8723a/Hal8723HWImg_MAC.c - rtl8723a/Hal8723HWImg_MAC.h - rtl8723a/Hal8723HWImg_RF.c - rtl8723a/Hal8723HWImg_RF.h - rtl8723a/Hal8723Reg.h - rtl8723a/Hal8723SHWImg.c - rtl8723a/Hal8723SHWImg.h - rtl8723a/Hal8723UHWImg.c - rtl8723a/Hal8723UHWImg.h - rtl8723a/MAC - rtl8723a/MAC/MAC_REG.txt - rtl8723a/RF - rtl8723a/RF/RadioA_1T.txt - rtl8723a/RF/RadioB_1T.txt - -Change Note: - 1. add & modify related code for rtl8723a. - -Verification Before Checked-IN: - 1.CE-Platform make ok. - 2.8188CUS auto-test (with PS) ok. - 2.8723AU auto-test ok. - ----------------------------------------------------------------------------------------------- -<12/29/2011 18:00 Mingzhi> -Modified Files: - 1.odm.c - 2.odm_RTL8192D.c -Change Note: - 1. fix a bug in ODM_Write_CCK_CCA_Thres/ODM_Write_CCK_CCA_Thres_92D - 2. fix a bug which may cause 92D can't enter false alarm counter statistics function - 3. modify edca turbo - -Verification Before Checked-IN: - 1.MP N5 buildrtwu/buildrtwe ok. - 2.92DU unplug/ scan ok - - ----------------------------------------------------------------------------------------------- -<12/28/2011 22:45 MH_Chen> -Modified Files: -Change Note: - 1. fix compile error for Ra structure. - -Verification Before Checked-IN - 1. MP N5/6/62 buildall ok. - 2. 92DU reload unplug/s3/s4/s5 ok. - ----------------------------------------------------------------------------------------------- -<12/28/2011 19:55 Annie> -Modified Files: - odm.c - odm.h - -Change Note: - 1. Rename: "RATE_ADAPTIVE" -> "ODM_RATE_ADAPTIVE" to fix redifinition bug for MP. - 2. Recover variables for MP. - -Verification Before Checked-IN - 1. ADSL platform make OK. - 2. RTL8192SU/RaLink2870 link ok and ping ok. - ----------------------------------------------------------------------------------------------- -<12/27/2011 18:12 Annie> -Modified Files: - odm.h - -Change Note: - 1. Revise the architecture of ODM HW configuration to meet CE's memory restriction. - 2. Using precompile flag to avoid compiler error caused by struct RATE_ADAPTIVE redefinition in MP team. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. RTL8192SU/RaLink2870 link ok and ping ok. - ----------------------------------------------------------------------------------------------- -<12/27/2011 18:12 Annie> -Modified Files: - odm.h - -Change Note: - 1. Correct the comment for RATE_ADAPTIVE.LowRSSIThresh. - -Verification Before Checked-IN - 1. ADSL platform make OK. - 2. RTL8192SU/RaLink2870 link ok and ping ok. - ----------------------------------------------------------------------------------------------- -<12/27/2011 18:05 Annie> -Modified Files: - odm.c - odm.h - odm_debug.h - odm_types.h - rtl8192c/HalDMOutSrc8192C_ADSL.c - rtl8192c/HalDMOutSrc8192C_ADSL.h - -Change Note: - 1. Fix compile error in ADSL platform. - 2. RA Mask: add ODM_RAStateCheck() to get rssi_level. - -Verification Before Checked-IN - 1. ADSL platform make OK. - 2. RTL8192SU/RaLink2870 link ok and ping ok. - ----------------------------------------------------------------------------------------------- -<12/26/2011 21:00 Mingzhi> -Modified Files: - Odm.c - -Change Noet: - 1. Merge HW antenna diversity in CE/AP Platform - 2. fix a bug about OFDM_Ant1/2_Cnt /CCK_Ant1/2_Cnt caculation in odm_Hwconfig.h - -Verification Before Checked-IN - 1. N5 buildrtwu/we ok - 2. 92DU-VC test ok ----------------------------------------------------------------------------------------------- -<12/26/2011 15:20 Georgia> -Modified Files: - Odm.c -Change Noet: - 1. Fixed null pointer exception in func:odm_CmnInfoHook_Debug - -Verification Before Checked-IN - 1. CE-Platform make OK - 2. 92DU-VS autotest OK. - ----------------------------------------------------------------------------------------------- -<12/23/2011 21:30 Mingzhi> -Modified Files: - Odm.h - Odm.c -Change Noet: - 1. Remove ODM_ChooseIotMainSTA/ODM_IotEdcaSwitch definition to odm.h - 2. add function(MP/CE) odm_IsEdcaTurboDisable/ODM_EdcaParaSelByIot - -Verification Before Checked-IN - 1. N5 buildall OK - 2. 92DU ping ok - ----------------------------------------------------------------------------------------------- -<12/23/2011 20:50 Georgia> -Modified Files: - odm.c - odm_RTL8192D.c - -Change Noet: - 1. Fix the RSSI monitor bug in CE Platform - -Verification Before Checked-IN - 1. CE-Platform make ok - 2. 92DU-VS autotest ok ----------------------------------------------------------------------------------------------- -<12/23/2011 18:00 Kordan> -Modified Files: - Image2Header.exe - HW Configuration source/header/text files - -Change Noet: - 1. Update merged 8723 RF config. - 2. Fix the line-break bug of Image2Header. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. 8723AU ping OK - 3. 8723AU hw config OK ----------------------------------------------------------------------------------------------- -<12/21/2011 13:20 Georgia> -Added Files: - HW_Integration_Status_20111221.xls -Deleted Files: - HW_Integration_Status_20111215.xls -Modified Files: - odm.h - odm_interface.c - odm_interface.h - -Change Noet: - 1. Update ODM status. - 2. Add ODM_ReleaseSpinLock. - 3. Modify ODM_BW_E's definition. - -Verification Before Checked-IN - 1. CE Platform make ok. ----------------------------------------------------------------------------------------------- -<12/20/2011 21:20 Georgia> -Modified Files: - odm.c - odm.h - odm_interface.c - rtl8192d/odm_RTL8192D.c - -Change Noet: - 1. Remove useless code for CE platform. - 2. Add func: odm_EdcaTurboCheckCE temporarily. - 3. Add memory management APIs for CE platform. - -Verification Before Checked-IN - 1. CE Platform make ok. - 2. 8188CUS Auto-test oK. ----------------------------------------------------------------------------------------------- -<12/20/2011 11:07 MH_Chen> -Modified Files: -Change Noet: - 1. Fix 92C/92D init fail for scan fail issue. - 2. Fix ODM HT Channel width setting. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. Link with DIr-655 reload/unplug/S3/S4/S5 and ping ok. - ----------------------------------------------------------------------------------------------- -<12/20/2011 10:50 Kordan> -Modified Files: - HAL/rtl8192C/rtl8192ce/Hal8192CEGen.c - HAL/rtl8192S/rtl8192su/Hal8192SUsbGen.c - -Change Noet: - 1. Fix compile error under 92CE/SU. (remove ODM_CancelAllTimers from SU) - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/20/2011 10:13 Mingzhi> -Modified Files: - odm.c - -Change Noet: - 1. fix a bug which cause dual mac edca turbo works fail - 2. add iot case for 92d in ce platform - -Verification Before Checked-IN - 1. N5 buildrtwu/buildrtwe fail ----------------------------------------------------------------------------------------------- -<12/19/2011 20:20 Georgia> -Modified Files: - odm.c -Deleted Files: - odm_TimerCallbacks.h - -Change Noet: - 1. Move odm_SwAntDivChkAntSwitchCallback APIs back to odm.c - -Verification Before Checked-IN - 1. CE Platform make OK ----------------------------------------------------------------------------------------------- -<12/19/2011 19:40 Kordan> -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_interface.c - HAL/OUTSRC/odm_interface.h - -Change Noet: - 1. Move ODM_InitAllTimers/ODM_CancelAllTimers APIs back to odm.c - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/19/2011 18:10 Kordan> -Modified Files: - none -Change Noet: - 1. Add missing odm_TimerCallbacks.h - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/19/2011 18:05 Kordan> -Modified Files: - HalDM.c - OUTSRC/odm.c - OUTSRC/odm_interface.c - OUTSRC/odm_TimerCallbacks.h - rtl8192C/rtl8192ce/Hal8192CEGen.c - rtl8192C/rtl8192cs/Hal8192CSdioGen.c - rtl8192C/rtl8192cu/Hal8192CUsbGen.c - HEADER/HTType.h - -Change Noet: - 1. Fix RF performance issue: The hardware capability only supports 20M. - 2. ODM_InitAllTimers/ODM_CancelAllTimers API: - a. TimerCallbacks are now defined in odm_TimerCallbacks.h instead of odm.c. - b. Move ODM_InitAllTimers to InitHalDM (after NicIFReadAdapterInfo). - c. ODM_CancelAllTimers in DeInitHalDM (after NicIFDeInitResource). - d. ODM_CancelAllTimers should also be called when doing a reset.(Added in 92CU/CE/CS) - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/19/2011 17:02 Button> -Modified Files: - odm.c - odm.h - odm_interface.c - odm_types.h - rtl8192c/HALDMOutSrc8192C_AP.c - -Change Noet: - 1. Fix compile error in AP platform. - 2. Add delay, timer, memory function - 3. Remove unused funtions - -Verification Before Checked-IN - 1. AP platform build ok. - ----------------------------------------------------------------------------------------------- -<12/19/2011 13:29 Kordan> -Modified Files: - odm.c - Hal8192CUsbGen.c - -Change Noet: - 1. Fix MP compile error caused by CE precompile flag. - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/19/2011 10:25 Kordan> -Modified Files: - odm.h - HAL/PHY/Hal8192CRf6052.c - -Change Noet: - 1. Replace phy_ConfigRFWithHeaderFile with ODM_ConfigRFWithHeaderFile. - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/16/2011 18:30 Georgia> -Modified Files: - HAL/OUTSRC/odm.c - HAL/OUTSRC/odm.h - HAL/OUTSRC/odm_interface.c - HAL/OUTSRC/odm_interface.h - HAL/OUTSRC/odm_types.h - HAL/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.c - HAL/OUTSRC/rtl8192c/HalDMOutSrc8192C_CE.h - HAL/OUTSRC/rtl8192d/HalDMOutSrc8192D_CE.c - HAL/OUTSRC/rtl8192d/HalDMOutSrc8192D_CE.h - HAL/rtl8192C/rtl8192ce/Hal8192CEGen.c - HAL/rtl8192C/rtl8192cs/Hal8192CSdioGen.c - HAL/rtl8192C/rtl8192cu/Hal8192CUsbGen.c - -Change Noet: - 1. Refine related code of SW AntDiv after link. - 2. Refine some codes of CE platform. - -Verification Before Checked-IN - 1. CE platform make OK - 2. 8188CUS/8188CU(With Antenna_Div)/92DU-VS(With 2.4G) Auto-test ok. ----------------------------------------------------------------------------------------------- -<12/16/2011 11:23 Kordan> -Modified Files: - HAL/HWIMG/HalHWImg.h - HAL/OUTSRC/odm_HWConfig.c - HAL/OUTSRC/odm_HWConfig.h - HAL/OUTSRC/rtl8192c/Hal8192CHWImg_*.c - HAL/OUTSRC/rtl8192c/Hal8192CHWImg_*.h - HAL/OUTSRC/rtl8723/Hal8723HWImg_*.c - HAL/OUTSRC/rtl8723/Hal8723HWImg_*.h - -Change Noet: - 1. ODM_ConfigRFWithHeaderFile is reverted to r14591 and updated. - 2. ODM_ConfigBBWithHeaderFile bug fixed and move RF/AGC_TAB_1T.TXT to BB/. - 3. Image2Header outputs *_HWIMG_SUPPORT flag. - 4. Fix minor compiler error in the previous revision. - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/15/2011 14:04 Annie> -Modified Files: - odm.c - odm_debug.h - -Change Noet: - 1. Correct debug message code about ODM_COMP_RA_MASK functions. - -Verification Before Checked-IN - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<12/14/2011 17:52 Annie> -Modified Files: - odm.c - odm.h - odm_debug.c - odm_debug.h - -Change Noet: - 1. Fix compiler error in ADSL platform. - 2. Correct debug message code about ODM_COMP_ANT_DIV functions. - 3. Refine ODM_RT_TRACE macro. - -Verification Before Checked-IN - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<12/14/2011 13:30 Kordan> -Modified Files: - odm_types.h - odm_HWConfig.c - odm_HWConfig.h - -Change Noet: - 1. Define HAL_STATUS status code in odm_types.h - 2. Replace ODM_ConfigXxxWithHeaderFile(...) return value with HAL_STATUS. - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/14/2011 09:55 Kordan> -Modified Files: - odm.c - odm_HWConfig.c - odm_HWConfig.h - PHY/Hal8192CPhyCfg.c - rtl8192C/rtl8192cu/Hal8192CUsbGen.c - NDIS5/USB/usb_main.c - NDIS6/USB/N6Usn_main.c - -Change Noet: - 1. Put InitHalDM right after NicIFReadAdapter to avoid null adapter. - 2. ODM_ConfigMACWithHeaderFile prototype changed. - 3. Fix minor bugs in previous revision. - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/13/2011 23:58 Georgia> -Modified Files: - odm.c - odm_precomp.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192d/HalDMOutSrc8192D_CE.c - -Change Noet: - 1. odm_DynamicTxPowerNIC integration. - -Verification Before Checked-IN - 1. CE platform make ok. - 2. 8188CUS Autotest ok. ----------------------------------------------------------------------------------------------- -<12/13/2011 20:00 Georgia> -Modified Files: - odm.c - odm.h - odm_HWConfig.h - odm_precomp.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h - -Change Noet: - 1. Fix compiler error in CE platform - -Verification Before Checked-IN - 1. CE platform make ok. - 2. 8188CUS Autotest(with PS-IPS/LPS) ok. ----------------------------------------------------------------------------------------------- -<12/12/2011 20:01 Mingzhi> -Modified Files: - odm.c - -Change Noet: - 1. fix a bug in EDCA Turbo MP/CE - 2. Attention:WMMEDCA_BE is now set to 0, so sometimes EDCA_BE=0 - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/12/2011 14:30 Mingzhi> -Modified Files: - odm.c - -Change Noet: - 1. re-check EDCA Turbo function in AP/ADSL - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/09/2011 14:30 Mingzhi> -Modified Files: - odm.c - -Change Noet: - 1. fix the bug, that source insight can parsing our code correctly - -Verification Before Checked-IN - 1. N5/N62 buildall OK ----------------------------------------------------------------------------------------------- -<12/07/2011 22:33 MH_Chen> -Modified Files: -Change Noet: - 1. Revise SW antenna diversity atchitecture. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. 92CU win7 ping WPA2-AES AP ok. - ----------------------------------------------------------------------------------------------- -<12/07/2011 19:16 Mingzhi> -Modified Files: - odm.h - odm.c - -Change Noet: - 1. add WMMEDCA_BE in common info - 2. Remov ODM_REG() access in EDCA Turbo function - 3. check in HW Antenna Diversity - -Verification Before Checked-IN - 1. N5/N62 buildall OK - ----------------------------------------------------------------------------------------------- -<12/07/2011 17:00 Kordan> -Modified Files: - odm_HWConfig.c - odm.h - -Change Noet: - 1. Replace 4-space with TAB. - 2. Move RegA24 from HalData to ODM common info. - 3. HalData removed. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - ----------------------------------------------------------------------------------------------- -<12/07/2011 16:55 MH_Chen> -Modified Files: -Change Noet: - 1. Enable all support abilit for chanel emurator test in MP driver. - 2. Fix BSOD in Edca turbo scheme. - -Verification Before Checked-IN - 1. N5/N62 buildall OK. - 2. 92CU ping with 92DU MAC1 AP mode with WPA2 AES and ping large packet ok. - 3. Reload/S3/S5 ok. - ----------------------------------------------------------------------------------------------- -<12/07/2011 13:10 Kordan> -Modified Files: - odm_interface.c - odm_interface.h - odm_HWConfig.c - -Change Noet: - 1. Commit missing changes in v87. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - ----------------------------------------------------------------------------------------------- -<12/07/2011 13:10 Kordan> -Modified Files: - odm_interface.c - odm_interface.h - odm_HWConfig.c - -Change Noet: - 1. New interface: ODM_FreeMemory - 2. Corresponding allocate/free changes in ODM_HWConfig.c - -Verification Before Checked-IN - 1. N5/N62 buildall OK - ----------------------------------------------------------------------------------------------- -<12/06/2011 14:40 Kordan> -Modified Files: - odm_HWConfig.h - odm_precomp.h - rtl8723/* - -Change Noet: - 1. Modify build batch files and sources files to build RTL8723. - 2. Add IC type in the name of both variables and functions. - 3. And using the MACRO to replace the long function name. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - ----------------------------------------------------------------------------------------------- -<12/05/2011 20:20 LukeLee> -Modified Files: - odm.c - -Change Noet: - 1. remove useless compile flag - -Verification Before Checked-IN - 1. MP buildall OK - 2. 88CE ping OK - ----------------------------------------------------------------------------------------------- -<12/02/2011 20:25 MH_Chen> -Modified Files: -Change Noet: - 1. Merge MP code base from V1990 to V2218. - 2. Support 88E and 8812 Jaguar code base for MP. - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. 88CU ping DIR-655 AES OK with large pkt 60000 for more than 1HR. - 3. S3/S4/S5/Reload/Unlog ok. - ----------------------------------------------------------------------------------------------- -<12/02/2011 18:00 LukeLee> -Modified Files: - odm.c - odm.h - odm_HWConfig.h - -Change Noet: - 1. Merge SW AntDiv after link - -Verification Before Checked-IN - 1. N5/N62 buildall OK - 2. 88CE ping OK - ----------------------------------------------------------------------------------------------- -<12/02/2011 15:22 Annie> -Modified Files: - odm.c - odm.h - odm_debug.h - odm_precomp.h - -Change Noet: - 1. Use ODM_REG for EDCA_PARAM registers. - 2. Buug fix: correct SupportICType in ADSL path, remove REG_NAMING_RULE_TEST - and ODM_RegisterOffsetTestFunction(). - 3. Disable ODM_GlobalDebugLevel and ODM_GlobalDebugComponents. - -Verification Before Checked-IN - 1. ADSL platform make ok. - 2. Ping 65500 with Ralink 2870 STA over 30 minutes. - 3. Enable ODM_COMP_COMMON: message OK. - ----------------------------------------------------------------------------------------------- -<12/01/2011 16:40 MH_Chen> -Modified Files: -Change Noet: - 1. Fix compiler error in V92 for different declaration. - -Verification Before Checked-IN - 1. MP N5/N62 buildall ok. - 2. 88CU testi wht DIR-655 in WPA2AES ping 60000 packet ok. S3/S4/S5/reload/inplug ok. - ----------------------------------------------------------------------------------------------- -<12/01/2011 16:30 MH_Chen> -Modified Files: -Change Noet: - 1. Revise debug module to fix compile error. - 2. Fix BSOD in MP EDUCA init case temporarily. - -Verification Before Checked-IN - 1. MP N5/N62 buildall ok. - 2. 88CU testi wht DIR-655 in WPA2AES ping 60000 packet ok. S3/S4/S5/reload/inplug ok. - ----------------------------------------------------------------------------------------------- -<12/01/2011 16:14 Annie> -Modified Files: - odm.c - odm.h - odm_debug.h - -Change Noet: - 1. ODM_CmnInfoUpdate(): add ODM_CMNINFO_DBG_COMP/ODM_CMNINFO_DBG_LEVEL to - update DebugComponents/DebugLevel. - -Verification Before Checked-IN - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<12/01/2011 15:05 Annie> -Modified Files: - odm.c - odm.h - odm_debug.h - odm_reg.h - rtl8192c/HalDMOutSrc8192C_ADSL.c - rtl8192c/HalDMOutSrc8192C_ADSL.h - -Change Noet: - 1. Fix compiler error in ADSL platform. - 2. Revise odm debug print macro. - -Verification Before Checked-IN - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<12/01/2011 11:00 Georgia> -Modified Files: - odm_debug.h - -Change Noet: - 1.Append Chip name in ODM_RT_TRACE. - -Verification Before Checked-IN - 1.CE Platform make ok - ----------------------------------------------------------------------------------------------- -<11/30/2011 23:40 Georgia> -Modified Files: - odm.c - odm_debug.c - odm_debug.h - odm_HWConfig.c - rtl8192c/HalDMOutSrc8192C_AP.c - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/odm_RTL8192D.c - -Change Noet: - 1.Rename RT_TRACE to ODM_RT_TRACE - -Verification Before Checked-IN - 1.CE Platform make ok - ----------------------------------------------------------------------------------------------- -<11/30/2011 23:20 Georgia> -Modified Files: - odm.c - odm.h - odm_debug.c - odm_debug.h - odm_HWConfig.c - odm_HWConfig.h - odm_interface.h - odm_precomp.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h - rtl8192d/odm_RTL8192D.h - -Change Noet: - 1.Fixed compiler error in CE platform - -Verification Before Checked-IN - 1.CE Platform make ok - ----------------------------------------------------------------------------------------------- -<11/30/2011 18:42 Mingzhi> -Modified Files: - odm.c - odm.h - odm_RTL8192D.c - odm_RTL8192D.h - -Change Noet: - 1.Merge AP/ADSL/MP/CE Edca turbo function - 2.move ODM_dynamicEarlyMode function to odm_RTL8192D.c - -Verification Before Checked-IN - 1.buildrtwu/buildrtwe ok - ----------------------------------------------------------------------------------------------- -<11/30/2011 16:50 LukeLee> -Modified Files: - odm.c - odm.h - -Change Notes: - 1. Merge SW AntDiv - -Verification Before Checked-IN - 1. BuildAll ok. - ----------------------------------------------------------------------------------------------- -<11/30/2011 15:30 Kordan> -Modified Files: - PrecompInc.h - -Change Notes: - 1. 8192CS compilation error fixed - -Verification Before Checked-IN - 1. BuildAll ok. - ----------------------------------------------------------------------------------------------- -<11/29/2011 20:23 Kordan> -Modified Files: - rtl8723/BB - rtl8723/MAC - rtl8723/RF - rtl8723/FW -Change Notes: - 1. Create new folders for rtl8723 - -Verification Before Checked-IN - 1. none - ----------------------------------------------------------------------------------------------- -<11/29/2011 17:52 Annie> -Modified Files: - odm.c - odm.h -Change Notes: - 1. Add ODM_CMNINFO_ONE_PATH_CCA hook pointer API in common info. - -Verification Before Checked-IN - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<11/28/2011 15:50 Kordan> -Modified Files: - Image2Header.exe - Hal8192CHWImg_Xxx.c - Hal8192CHWImg_Xxx.h - -Change Notes: - 1. Extract repeated code from ODM_GetArrayLengthXxx(...) to reduce the code size. - 2. Remove I2H.tmp after processing. - 3. The bug of transferring FW Binary to HW image is fixed. - -Verification Before Checked-IN - 1. WinXP/Win7 Buildrtwu.bat OK ----------------------------------------------------------------------------------------------- -<11/28/2011 14:00 Kordan> -Modified Files: - odm_HWConfig.c - odm_HWConfig.h - -Change Notes: - 1. Return type of the ODM_ConfigXxxWithHeader(...) is changed to VOID. - 2. Replace COMP_INIT, DBG_LOUD with ODM-prefixed definition - -Verification Before Checked-IN - 1. WinXP/Win7 Buildrtwu.bat OK ----------------------------------------------------------------------------------------------- -<11/28/2011 11:30 Kordan> -Modified Files: - odm.h - odm_HWConfig.c - odm_interface.h - -Change Notes: - 1. New definition: MAX_STALL_TIME, RT_STATUS - 2. odm_ConfigRFReg(...) is new function used to set RF register in ODM_ConfigRFWithHeader(...) - 3. Minor bugs fixed - -Verification Before Checked-IN - 1. WinXP/Win7 Buildrtwu.bat OK ----------------------------------------------------------------------------------------------- -<11/25/2011 20:45 Annie> -Modified Files: - rtl8192c/Hal8192CHWImg_BB.c - rtl8192c/Hal8192CHWImg_BB.h - rtl8192c/Hal8192CHWImg_FW.c - rtl8192c/Hal8192CHWImg_FW.h - rtl8192c/Hal8192CHWImg_MAC.c - rtl8192c/Hal8192CHWImg_MAC.h - rtl8192c/Hal8192CHWImg_RF.c - rtl8192c/Hal8192CHWImg_RF.h - odm.h - odm_precomp.h - -Change Notes: - 1. Fix compile error at ADSL platform. - 2. Rearrange file including in odm_precomp.h. - 3. Move gArrayPointer_XXX from img.h to img.c for redefinition issue. - -Verification Before Checked-IN - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<11/25/2011 14:30 Georgia> -Modified Files: - odm.c - odm.h - odm_debug.c - odm_debug.h - odm_HWConfig.c - odm_HWConfig.h - odm_interface.c - odm_interface.h - odm_precomp.h - odm_types.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h - -Change Notes: - 1. remove related pack(1) statement. - 2. add sleep/delay funcs. - 3. fixed compile error / warning at CE platform. - -Verification Before Checked-IN - 1. CE Platform make ok - ----------------------------------------------------------------------------------------------- -<11/25/2011 11:49 Kordan> -Modified Files: - odm.h - odm_HWConfig.c - odm_interface.c - Image2Header.exe - -Change Notes: - 1. New definition in odm.h: - a. ODM_RF_RADIO_PATH_E - b. ODM_delay_ms, ODM_delay_us, odm_StallExecution - c. InterfaceIndex - d. ODM_BaseBand_Config_Type - e. InternalPA5G - 2. Eliminate MP-specific code, for example: PlatformStallExecution -> ODM_delay_us - 3. Arguments of Image2Header.exe now are case-insensitive. - -Verification Before Checked-IN - 1. WinXP/Win7 Buildrtwu.bat OK - ----------------------------------------------------------------------------------------------- -<11/24/2011 21:12 button> -Modified Files: - odm.h - odm.c - rtl8192c/HalDMOutSrc8192C_AP.c - -Change Notes: - 1. Remove AP's PSD from ODM module - 2. Move AP's RSSI monitor into ODM module - 3. Refine AP's IOT peer definition - -Verification Before Checked-In: - 1. AP platform build ok. ----------------------------------------------------------------------------------------------- -<11/24/2011 21:00 Annie> -Renamed Files: - Hal8192CHWImg_fw.c -> Hal8192CHWImg_FW.c - Hal8192CHWImg_fw.h -> Hal8192CHWImg_FW.h - Hal8192CHWImg_mac.c -> Hal8192CHWImg_MAC.c - Hal8192CHWImg_mac.h -> Hal8192CHWImg_MAC.h - -Change Notes: - 1. Rename image FW/MAC files, because linux system is case sensitive. - -Verification Before Checked-IN - N/A - ----------------------------------------------------------------------------------------------- -<11/23/2011 22:30 LukeLee> -Modified Files: - HW_Integration_Status_Luke.xls - odm.c - odm_RTL8192D.c - odm_debug.c - odm_HWConfig.c - -Change Notes: - 1. add GPL on odm_RTL8192D.c - 2. update common info for MP platform - -Verification Before Checked-IN - 1. MP buildall OK except N5 buildrtws fail - 2. 88CE Win7 ping OK - ----------------------------------------------------------------------------------------------- -<11/23/2011 17:30 LukeLee> -Modified Files: - HW_Integration_Status_Luke.xls - odm.c - odm.h - odm_debug.c - odm_HWConfig.c - odm_precomp.h - -Added Files: - Hal8192CHWImg_BB.c - Hal8192CHWImg_BB.h - Hal8192CHWImg_fw.c - Hal8192CHWImg_fw.h - Hal8192CHWImg_mac.c - Hal8192CHWImg_mac.h - Hal8192CHWImg_RF.c - Hal8192CHWImg_RF.h - -Change Notes: - 1. remove compile error - 2. DIG merge OK - 3. PSD and RXHP only for MP platform - -Verification Before Checked-IN - 1. MP buildall OK except N5 buildrtws fail - 2. 88CE Win7 ping OK - ----------------------------------------------------------------------------------------------- -<11/21/2011 15:50 Mingzhi> -Modified Files: - odm.c - odm.h - -Change Notes: - 1. remove variable bDefAdapter_APMode/bDefAdapter_ClientMode/bExtAdapter_APMode/bExtClientMode in Common info - 2. modify dynamic early mode - -Verification Before Checked-IN - 1. MP Platform buildrtwu/buildrtwe ok - ----------------------------------------------------------------------------------------------- -<21/11/2011 14:12 Kordan> -Modified Files: - Image2Header.exe - odm_HWConfig.c - odm_precomp.h - -Change Notes: - 1. Add three ODM_ConfigXxxWithHeaderFile(...) APIs in odm_HWConfig.c. - 2. Image2Header.exe is updated. - 3. Notes: - a. HWImg header files should be included in OUTSRC\odm_precomp.h - b. HWImg source files should be added in source file, - for example, HAL\rtl8192C\rtl8192cu\sources.WlanU.Win - c. By now, text files under the folders are just for testing. - -Verification Before Checked-IN - 1. Buildrtwu.bat OK ----------------------------------------------------------------------------------------------- -<11/21/2011 14:04 Annie> -Modified Files: - odm.c - odm_precomp.h - -Change Notes: - 1. Use RTL8192XX_HWIMG_SUPPORT flag to separate code of differentail chip. - -Verification Before Checked-IN - 1. ADSL platform buildall ok. - ----------------------------------------------------------------------------------------------- -<11/21/2011 13:40 LukeLee> -Removed Files: - HW_Itegration_Status.xls - -Added Files: - HW_Integration_Status_Luke.xls - -Change Notes: - 1. Update HW_Iteration_Status - -Verification Before Checked-IN - N/A ----------------------------------------------------------------------------------------------- -<11/21/2011 11:36 Annie> -Modified Files: - odm.c - odm.h - -Change Notes: - 1. Add common info interface ODM_CMNINFO_BOARD_TYPE. - -Verification Before Checked-IN - 1. ADSL platform buildall ok. - ----------------------------------------------------------------------------------------------- -<11/18/2011 19:10 Annie> -Modified Files: - rtl8192c\odm_RTL8192C.c - rtl8192c\odm_RTL8192C.h - rtl8192d\odm_RTL8192D.c - rtl8192d\odm_RTL8192D.h - odm.c - odm.h - odm_debug.c - odm_precomp.h - odm_types.h - -Change Notes: - 1. Make sure ADSL make ok. - 2. Workaround: Add NO_8192D flag to not include 8192d file and functions. - 3. Check for debug print related code. - -Verification Before Checked-IN - 1. ADSL platform buildall ok. - 2. RT_TRACE: DIG message print OK. - ----------------------------------------------------------------------------------------------- -<11/18/2011 17:50 LukeLee> -Modified Files: -Change Notes: - 1. Move bLinked and RSSI_Min to ODM_CmnInfoUpdate() - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. HW_Itegration_Status.xls cannot be opened - ----------------------------------------------------------------------------------------------- -<18/11/2011 18:13 Kordan> -Modified Files: - Image2Header.exe - -Change Notes: - 1. Bug fixed: If too many files are under the folder, it would run out of buffer. - 2. Bug fixed: Wrong fprintf causes some header files are not included. - -Verification Before Checked-IN - ----------------------------------------------------------------------------------------------- -<11/18/2011 00:01 MH_Chen> -Modified Files: -Change Notes: - 1. Support ODM PHY status query. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. CU slim combo card link with DIR-655 in AES mode and ping more than 20 minutes ok. - 3. PHY status query ok but RSSI seems incorrect. - ----------------------------------------------------------------------------------------------- -<11/17/2011 23:15 MH_Chen> -Modified Files: -Change Notes: - 1. Add more universal interface template and MP can work. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. CU slim combo card link with DIR-655 in AES mode and ping more than 20 minutes ok. - ----------------------------------------------------------------------------------------------- -<11/17/2011 21:06 MH_Chen> -Modified Files: -Change Notes: - 1. Revise #include flow to be compatiable with other SW team. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. CU slim combo card link with DIR-655 in AES mode and ping more than 20 minutes ok. - ----------------------------------------------------------------------------------------------- -<11/17/2011 20:30 LukeLee> -Modified Files: - HW_Itegration_Status.xls - -Change Notes: - 1. update status - -Verification Before Checked-IN - None ----------------------------------------------------------------------------------------------- -<11/17/2011 16:48 MH_Chen> -Modified Files: -Change Notes: - 1. Add new API for spin lock and memory allocate. - 2. Revise MP include flow to default setting. - -Verification Before Checked-IN - 1. N5/N62 buildall ok. - 2. CU slim combo card link with DIR-655 in AES mode and ping more than 20 minutes ok. - ----------------------------------------------------------------------------------------------- -<17/11/2011 10:34 Mingzhi> -Modified Files: - odm.c - -Change Notes: - 1. fix a bug in dynamic_early_mode - - -Verification Before Checked-IN - 1. MP platfrom N5 build ok - ----------------------------------------------------------------------------------------------- -<17/11/2011 10:34 Mingzhi> -Modified Files: - odm.c - -Change Notes: - 1. add variable bDefAdapter_APMode/bDefAdapter_ClientMode/bExtAdapter_APMode/bExtClientMode in Common info - 2. remove ACTING_AS_AP() from dynamic_early_mode - - -Verification Before Checked-IN - 1. MP platfrom N5 build ok ----------------------------------------------------------------------------------------------- -<17/11/2011 13:23 Kordan> -Modified Files: - Image2Header.exe - -Change Notes: - 1. Remove img2headerfile.exe from SVN - 2. Add new Image2Header.exe to SVN - -Verification Before Checked-IN - 1. Usage: Image2Header.exe IC_TYPE FILE_TYPE - - Example: If you want to convert text files in OUTSRC/rtl8192cu/BB/, - you could type the following command. The output files will be - put under OUTSRC/rtl8192cu/. - $ Image2Header.exe rtl8192cu BB (case-sensitive) - ----------------------------------------------------------------------------------------------- -<17/11/2011 10:34 Mingzhi> -Modified Files: - odm.c - -Change Notes: - 1. re-check dynamic_early_mode() function - -Verification Before Checked-IN - 1. MP platfrom N5 build ok ----------------------------------------------------------------------------------------------- -<11/16/2011 22:22 MH_Chen> -Modified Files: -Change Notes: - 1. Revise Dual mac band definition to prevent scan fail. Need to adjust later. - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - 2. 92CU/92CE ping with open AP ok. But CU scan stop after a while. - ----------------------------------------------------------------------------------------------- -<11/16/2011 22:22 button> -Modified Files: - odm.h - odm.c - odm_debug.c - odm_debug.h - -Change Notes: - 1. Move AP team's tx power control to ODM module - 2. rename macro IS_STA_VALID - 3. GlobalDebugComponents => ODM_GlobalDebugComponents , - GlobalDebugLevel => ODM_GlobalDebugLevel - -Verification Before Checked-In: - 1. AP platform build ok. - ----------------------------------------------------------------------------------------------- -<11/16/2011 17:40 LukeLee> -Modified Files: - odm.c - odm.h - odm_debug.c - odm_debug.h - odm_precomp.h - \rtl8192c\odm_RTL8192C.c - \rtl8192d\odm_RTL8192D.c - -Added Files: - HW_Itegration_Status.xls - -Change Notes: - 1. add debug flag - 2. add common info print function - 3. modify DIG related functions - -Verification Before Checked-In: - 1. MP platform build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c/odm_RTL8192C.c/odm_RTL8192D.c) - 2. 88CE Win7X86 cannot show scan list since v0049 - 3. #include <../Mp_Promcomp.h> is not allowable in MP platform - ----------------------------------------------------------------------------------------------- -<11/15/2011 13:40 LukeLee> -Modified Files: - odm.c - -Change Notes: - 1. fix compile error - -Verification Before Checked-In: - 1. MP platform build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c/odm_RTL8192C.c/odm_RTL8192D.c) - ----------------------------------------------------------------------------------------------- -<11/15/2011 13:00 LukeLee> -Modified Files: - odm_debug.h - odm.c - -Added Files: - \rtl8192c\odm_RTL8192C.c - \rtl8192c\odm_RTL8192C.h - \rtl8192d\odm_RTL8192D.c - \rtl8192d\odm_RTL8192D.h - -Change Notes: - 1. Merge DIG / FA statistics / CCK CCA threshold functions - 2. debug print OK - -Verification Before Checked-In: - 1. MP platform build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c/odm_RTL8192C.c/odm_RTL8192D.c) - ----------------------------------------------------------------------------------------------- -<11/14/2011 21:15 button> -Modified Files: - odm.h - odm.c - -Change Notes: - 1. Add IOT peer definition - 2. Add a macro "isSTAValid" to check sta validd or not - -Verification Before Checked-In: - 1. AP platform build ok. - ----------------------------------------------------------------------------------------------- -<11/14/2011 16:50 MH_Chen> -Modified Files: - odm.h - odm.c - odm_debug.c - odm_HWConfig.c - -Change Notes: - 1. hook real common info in MP platform. - 2. Revise some universal interface definition compatiable with other SW team. - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - ----------------------------------------------------------------------------------------------- -<11/14/2011 13:00 LukeLee> -Modified Files: - odm.h - odm.c - odm_debug.c - odm_HWConfig.c - -Change Notes: - 1. hook fake common info in MP platform for bluescreen issue - 2. add odm_IsLinked() and odm_InitCommonInfo() for ODM internal common info - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c) ----------------------------------------------------------------------------------------------- -<14/11/2011 10:56 Mingzhi> -Modified Files: - odm.c - -Change Notes: - 1. Modify dynamic_early_mode() function - -Verification Before Checked-IN - 1. MP platfrom N5 build ok - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c) - ----------------------------------------------------------------------------------------------- -<11/11/2011 17:20 LukeLee> -Modified Files: - odm.h - odm.h - odm_debug.h - odm_HWConfig.c - -Change Notes: - 1. Modifiy ODM_CmnInfoInit() and ODM_CmnInfoHook() - 2. Define debug tracing components - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c) ----------------------------------------------------------------------------------------------- -<11/11/2011 10:00 LukeLee> -Modified Files: - odm.h - -Change Notes: - 1. Re-define common info - -Verification Before Checked-In: - 1. All platforms should not compile OK!!! - ----------------------------------------------------------------------------------------------- -<11/10/2011 23:00 LukeLee> -Modified Files: - odm.c - odm.h - -Change Notes: - 1. Re-define common info - -Verification Before Checked-In: - 1. All platforms should not compile OK - ----------------------------------------------------------------------------------------------- -<11/10/2011 16:40 MH_Chen> -Modified Files: - odm.c - odm.h -Change Notes: - 1. bRFPathRxEnable ·Q¤@¤U¡A³oÀ³¸Ó¬O³]©w¬° ODM write variable¡A©Ò¦³ team ³£¤£»Ý­n³]©w¤~¹ï¡A - ¦pªG±q§Ú­Ìªº HAL copy ¹L¥hÀ³¸Ó¤£¦X²z¡C©Ò¥HÀ³¸Ó¬O¦b ODM ¤§¤¤update ³o­Óvalue µ¹ PHY query ®É¨Ï¥Î¡A - ­ì¥» code base ¤]¦³¤]»~¡A§Ú­ÌÀ³¸Ó§ï¬° bit oriented coding style¡A³o³¡¤À§Ú·| update¡C - 2. MacPhyMode ­×§ï¦¨ ptr reference¡A¥Ø«e¥u¦³MP¥Î¨ä¥Lteam follow - 3. BTCoexist ­×§ï¦¨ ptr reference ­×§ï¦¨¥u¦³ ON/OFF boolean ¿ï¾Ü¡A¥Ñ©ó¦³¥i¯à¦³ driver ³¡¤ä´©¡A - §Ú©w¸q¤@­Ó pseudo ptr in DM structure for all team reference?¡C - 4. ¤U­±¥þ³¡²¾¬° prt reference¡A¥u¦³ init ³]©w¤@¦¸¡C - 5. ¤U­±«ØÄ³¤]¥Ñ run-time ³]©w­È¡A­×§ï¬° ptr reference¡A¤§«á HAL ¦@¥Î®É´N­×§ï¤ñ¸û¤p~~~!! - 6. ¥Ñ©ó§ó°Ê¤@¨Çptr ³]©w¡A¥i¯à·|Åý¨ä¥Lteam compile¤£¹LÁÙ½ÐÀ°¦£~~~!!! ¤£¾å±o¤W­±«ØÄ³¬O§_¥i¥H support °Ú?? ¦pªG¤£¦æÁٽЭקï execel ¬[ºc¡AÁÂÁ¡C - 7. §Ú­Ì¤U¦¸»Ý­n review ¤@¤U­þ¨Ç¬O ODM/Driver write ¤Á³Î¤@¤Uµ²ºc³W¹º¡C - -Verification Before Checked-In: - 1. N5N62 buildall ok. - ----------------------------------------------------------------------------------------------- -<11/09/2011 23:10 Annie> -Modified Files: - odm.c - odm.h - odm_interface.h - odm_precomp.h - odm_types.h - -Change Notes: - 1. Change PVOID position to bind and allocate DM_ODM_T in priv. - 2. Temporarily mark some code by ADSL_BUILD_WORKAROUND flag - to make sure ADSL make ok. - -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<11/09/2011 22:50 LukeLee> -Modified Files: - odm.c - -Change Notes: - 1. clean compile errors - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c) ----------------------------------------------------------------------------------------------- -<11/09/2011 22:00 LukeLee> -Modified Files: - odm.c - odm.h - -Change Notes: - 1. Merge DIG function into ODM structure - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c) ----------------------------------------------------------------------------------------------- -<11/09/2011 21:45 Button> -Modified Files: - odm.c - odm.h - odm_HWConfig.c - -Change Notes: - 1. Modify structure _ODM_Phy_Status_Info_ for AP query phy info - 2. Avoid core dump when pEntry = NULL - -Verification Before Checked-In: - 1. AP platform build ok - ----------------------------------------------------------------------------------------------- -<11/09/2011 17:00 LukeLee> -Removed Files: - HalDMOutSrc.c - HalDMOutSrc.h - HalHWOutSrc.c - HalHWOutSrc.h - -Added Files: - odm.c - odm.h - odm_HWConfig.c - odm_HWconfig.h - -Change Notes: - 1. File rename - HalDMOutSrc.c/h -> odm.c/h - HalHWOutSrc.c/h -> odm_HWConfig.c/h - 2. add common info for BTDM and DMSP - 3. remove compile errors in MP platform - -Verification Before Checked-In: - 1. MP platform N5/N62 build ok. - (need to include Mp_Precomp.h in odm_debug.c/odm_interface.c/odm.c/odm_HWConfig.c) - ----------------------------------------------------------------------------------------------- -<11/09/2011 14:40 Georgia> -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - HalHWOutSrc.c - HalHWOutSrc.h - rtl8192c/HalDMOutSrc8192C_CE.c - -Change Notes: - 1. Revise related source of odm_DynamicBBPowerSaving for MP driver compile ok. - 2. Removed useless code of CE team driver. - 3. Revise customer id for AP/ADSL driver compiler ok. - -Verification Before Checked-In: - 1. CE platform build ok. - ----------------------------------------------------------------------------------------------- -<11/08/2011 14:20 Georgia> -Modified Files: - HalHWOutSrc.c - HalHWOutSrc.h - -Change Notes: - 1. Removed useless code. - -Verification Before Checked-In: - 1. CE platform build ok. - ----------------------------------------------------------------------------------------------- -<11/08/2011 12:00 Georgia> -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - HalHWOutSrc.c - odm_debug.c - -Change Notes: - 1. fixed phy_staus parsing error in func odm_RxPhyStatus92CSeries_Parsing - -Verification Before Checked-In: - 1. CE platform build ok. - ----------------------------------------------------------------------------------------------- -<11/07/2011 17:00 LukeLee> -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - -Change Notes: - 1. Merge part of DIG function into ODM structure - 2. divide common info OPMode into several BOOLEAN variables - -Verification Before Checked-In: - 1. MP platform build ok. - (need to include Mp_Precomp.h in odm_interface.c/HalDMOutSrc.c/HalHWOutSrc.c) - ----------------------------------------------------------------------------------------------- -<11/04/2011 16:14 Annie> -Modified Files: - odm_interface.h - -Change Notes: - 1. Sorry for no file saving correctly on previous version. - Now compiler ok. - -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<11/04/2011 13:23 Annie> -Modified Files: - odm_interface.h - -Change Notes: - 1. ODM register/bitmap: currently for 92C_SERIES(11N) only, - we don't need to define JAGUARS registers now. - -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<11/03/2011 16:57 Annie> -New Files: - rtl8195/Hal8195Reg.h - odm_reg.h -Modified Files: - rtl8188e/Hal8188EReg.h - rtl8192c/Hal8192CReg.h - rtl8192d/Hal8192DReg.h - rtl8192s/Hal8192SReg.h - rtl8723/Hal8723Reg.h - HalDMOutSrc.c - HalDMOutSrc.h - odm_interface.h - odm_precomp.h - odm_types.h - -Change Notes: - 1. Improve ODM register/bitmap naming rule: use new ODM_REG and ODM_BIT macro. - 2. Move general register definition to odm_reg.h. - -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<11/02/2011 22:47 MH_Chen> -Modified Files: - HAL\rtl8192C\sources.WlanE/U/S - HAL\HalDM.c -Change Notes: - 1. Revise source for MP driver all interface compile ok. - 2. Fix compile error for all CE/AP/ADSL checkin ODM relative function. - 3. Still can not support compile pass withour mp_precomp.h - 4. Revise wireless mode/band type/security mode for CE/MP. - 5. Support ODM debug module. - -Verification Before Checked-In: - 1. N5/N62 compile all ok. Please enale mp_precomp.h in start address. - ----------------------------------------------------------------------------------------------- -<11/02/2011 21:30 Georgia> - -Modified Files: - HalDMOutSrc.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192d/HalDMOutSrc8192D_CE.c - -Change Notes: - 1.Remove useless code. - 2.move EDCA related DM of CE platform to ODM. - -Verification Before Checked-In: - 1. CE platform build ok. - ----------------------------------------------------------------------------------------------- -<11/02/2011 20:00 Georgia> -Modified Files: - HalDMOutSrc.h - HalHWOutSrc.c - odm_types.h - -Change Notes: - 1.Remove useless flag and code. - 2.Fixed incorrect compiler flag. - -Verification Before Checked-In: - 1. Reviewer: Luke Lee. - 2. CE platform build ok. - ----------------------------------------------------------------------------------------------- -<11/02/2011 18:20 Georgia> -New Files: - HalHWOutSrc.c - HalHWOutSrc.h - -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_debug.c - odm_debug.h - odm_interface.c - odm_interface.h - odm_precomp.h - odm_types.h - rtl8192c/Hal8192CReg.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192d/Hal8192DReg.h - rtl8192d/HalDMOutSrc8192D_CE.c - -Removed Files: - rtl8192c/odm_phy_info.h - rtl8192d/odm_phy_info.h - -Change Notes: - 1. Add Func ODM_PhyStatusQuery. - 2. Modify INT8/INT16.. series declaration. - -Verification Before Checked-In: - 1. CE platform build ok. - ----------------------------------------------------------------------------------------------- -<11/02/2011 17:03 Annie> -Modified Files: - HalDMOutSrc.h - odm_interface.h - odm_types.h - -Change Notes: - 1. Add I/O prototypes. - 2. ADSL compile check. -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<11/02/2011 14:45 button> -Removed Files: - HalDMOutSrc_AP.c - HalDMOutSrc_AP.h -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_precomp.h - odm_types.h - rtl8192c/Hal8192CEFWImg_AP.c - rtl8192c/HHal8192CEMACImg_AP.c - rtl8192c/HHal8192CEPHYImg_AP.c - rtl8192c/HHalDMOutSrc8192C_AP.c -Change Notes: - 1. Merge HalDMOutSrc_AO.c/h into HalDMOutSrc.c/h - -Verification Before Checked-In: - 1. AP platform build ok. ----------------------------------------------------------------------------------------------- -<11/01/2011 15:09 Annie> -New Files: - rtl8188e/Hal8188EReg.h - rtl8192c/Hal8192CReg.h - rtl8192d/Hal8192DReg.h - rtl8192s/Hal8192SReg.h - rtl8723/Hal8723Reg.h -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_interface.h - odm_precomp.h - -Change Notes: - 1. Add REG and REG_BIT for general register naming. -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<10/31/2011 14:42 Annie> -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_interface.c - odm_precomp.h - odm_types.h - -Change Notes: - 1. Change DM_ODM_SUPPORT_TYPE definition: defined by BIT - (1) so that we can use "#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_MP))" statement. - (2) Define BITs in odm_types.h. - 2. 8192cd_util.h can be included in odm_precomp.h formally - because it defines basic I/O functions. -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<10/28/2011 13:32 Annie> -Modified Files: - HalDMOutSrc.h - odm_interface.c - odm_precomp.h - odm_types.h - -Change Notes: - 1. Correct I/O prototype. -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<10/27/2011 20:02 button> -Modified Files: - HalDMOutSrc_AP.c - HalDMOutSrc_AP.h - odm_types.h - odm_precomp.h - odm_interface.c - -Change Notes: - 1. Support ODM I/O W/R. - 2. Sync HalDMOutSrc.c/h with HalDMOutSrc_AP.c/h - -Verification Before Checked-In: - 1. AP platform build ok. ----------------------------------------------------------------------------------------------- -<10/27/2011 17:51 Annie> -New Files: - rtl8192c/Hal8192CEFWImg_ADSL.[ch] -Modified Files: - rtl8192c/Hal8192CEMACImg_ADSL.[ch] - HalDMOutSrc.[ch] - odm_precomp.h - -Change Notes: - 1. MAC image: Seperate firmware array to firmware file. - 2. Set ODM_ENDIAN_TYPE for ADSL and AP. - -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<10/27/2011 15:06 Annie> -Modified Files: - odm_types.h - -Change Notes: - 1. Add STA_INFO_T for ADSL/AP case. - -Verification Before Checked-In: - 1. ADSL platform build ok. - ----------------------------------------------------------------------------------------------- -<10/21/2011 18:26 MH> -New Files: - Add odm debug & interface . -Modified Files: -Change Notes: - 1. Support ODM independent I/O and debug interface. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. (Except N5 SDIO due to PSD ODM) - ----------------------------------------------------------------------------------------------- -<10/21/2011 16:20 Georgia> -New Files: - rtl8192c/odm_phy_info.h - rtl8192d/odm_phy_info.h -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_precomp.h - odm_types.h -Change Notes: - 1. Add data struct declaration of phy_info and rx_desc(must discuss the data member declaration method which different HW interface). - 2. Add related statement for pack(1). - 3. Fixed some compiler warning and error in linux platform. - -Verification Before Checked-In: - 1. CE make ok. - ----------------------------------------------------------------------------------------------- -<10/20/2011 23:44 MH> -Modified Files: - HAL\OUTSRC\HalDMOutSrc.c\h - HAL\HalDM.c - HEADER\TypeDef.h -Change Notes: - 1. Add common info interface init/hook/update/array pointer hook. - 2. MP driver can hook all common info interface. You can refer to API dm_ODMStructureInit() - 3. Revise code architecture for common interface hook readbility. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. (Except N5 SDIO due to PSD ODM) - ----------------------------------------------------------------------------------------------- -<10/20/2011 21:30 LukeLee> -Modified Files: - HalDMOutSrc.h - odm_types.h -Change Notes: - 1. Add Reg Naming - 2. Define PHY_INFO - 3. Define TX_INFO - -Verification Before Checked-In: - 1. N5/N62 buildrtwu/buildrtwe ok. (Need to enable mp_precomp.h) - 2. N5/N62 build819xP/build8192SE/build8192SU fail from v0016 - 3. N5 buildrtws fail from v0016 ----------------------------------------------------------------------------------------------- -<10/19/2011 11:04 MH_Chen> -Modified Files: - HAL\OUTSRC\HalDMOutSrc.c\h -Change Notes: - 1. Add and revise for ODM universal interface. - -Verification Before Checked-In: - 1. N5/N62 buildrtwu ok. (Need to enable mp_precomp.h) - ----------------------------------------------------------------------------------------------- -<10/17/2011 14:06 Annie> - -Modified Files: - odm_precomp.h - rtl8192c/HalDMOutSrc8192C_ADSL.c - rtl8192c/HalDMOutSrc8192C_ADSL.h - -Change Notes: - 1. Move original dynamic mechanism to OURSRC. - -Verification Before Checked-In: - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<10/13/2011 21:40 Georgia> - -New Files: - -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_precomp.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h - -Change Notes: - 1. Modify odm_precomp.h for CE project compiler. - 2. Move related code of IQK/APK/LCK to OUTSRC. -Verification Before Checked-In: - 1. CE make ok. - 2. 8192 CU/DU test ok. - ----------------------------------------------------------------------------------------------- -<10/12/2011 15:42 Annie> - -New Files: - 1. HAL/OUTSRC/odm_precomp.h - -Modified Files: - HAL/OUTSRC/ - 1. rtl8192c/Hal8192CEMACImg_ADSL.c - 2. rtl8192c/Hal8192CEPHYImg_ADSL.c - 3. rtl8192c/Hal8192CEPHYImg_ADSL.h - 4. HalDMOutSrc.c - 5. odm_types.h - -Change Notes: - 1. Add odm_precomp.h to provide the including order of header files. - -Verification Before Checked-In: - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<10/07/2011 23:43 Annie> - -New Files: - HAL/OUTSRC/ - 1. rtl8192c/HalDMOutSrc8192C_ADSL.c - 2. rtl8192c/HalDMOutSrc8192C_ADSL.h - -Modified Files: - HAL/OUTSRC/ - 1. HalDMOutSrc.c - 2. HalDMOutSrc.h - 3. HalDMOutSrc.h - -Change Notes: - 1. Modify common code for ADSL project compiler. - - Add a workaround flag: "ADSL_AP_BUILD_WORKAROUND", - it should be eliminated before final stage. - -Verification Before Checked-In: - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<10/07/2011 17:12 Georgia> -Modified Files: - HalDMOutSrc.c - HalDMOutSrc.h - odm_types.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h - -Change Notes: - 1. Modified related ODM code for build CE Team's universal interface. - -Verification Before Checked-In: - 1. CE Team linux driver make ok. - ----------------------------------------------------------------------------------------------- -<10/06/2011 22:12 Jensonlee> -Modified Files: - HAL/OUTSRC/ - 1. rtl8192c/Hal8192CEMACImg_AP.c - 2. rtl8192c/Hal8192CEMACImg_AP.h - 3. rtl8192c/Hal8192CEPHYImg_AP.c - 4. rtl8192c/Hal8192CEPHYImg_AP.c - 5. rtl8192c/Hal8192CEFWImg_AP.h.h - 6. rtl8192c/Hal8192CEFWImg_AP.h.c - 7. rtl8192c/HalDMOutSrc8192C_AP.c - 8. rtl8192c/HalDMOutSrc8192C_AP.h - 9. HalDMOutSrc_AP.h - a. HalDMOutSrc_AP.c - -Change Notes: - 1. Update parameters and ODM outsrc files of AP - -Verification Before Checked-In: - 1. AP platform 8196c+8192c build ok, connect with STA ok. - ----------------------------------------------------------------------------------------------- -<10/06/2011 21:22 Annie> -Modified Files: - HAL/OUTSRC/ - 1. rtl8192c/Hal8192CEMACImg_ADSL.c - 2. rtl8192c/Hal8192CEPHYImg_ADSL.c - 3. rtl8192c/Hal8192CEPHYImg_ADSL.h - 4. odm_types.h - -Change Notes: - 1. Update parameter files: try to sync with sd7 ODM svn. - -Verification Before Checked-In: - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<10/05/2011 22:50 Luke> -New Files: -Modified Files: - /HalDMOutSrc.h -Change Notes: - 1. Add common info and STA structure - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - ----------------------------------------------------------------------------------------------- -<10/05/2011 22:11 Annie> -New Files: - HAL/OUTSRC/rtl8192c/ - 1. Hal8192CEMACImg_ADSL.c - 2. Hal8192CEMACImg_ADSL.h - 3. Hal8192CEPHYImg_ADSL.c - 4. Hal8192CEPHYImg_ADSL.h - -Change Notes: - 1. Add 8192ce MAC/BB/RF parameter files for current ADSL platform. - -Verification Before Checked-In: - 1. ADSL platform make ok. - ----------------------------------------------------------------------------------------------- -<10/05/2011 12:00 Georgia> -New Files: -Modified Files: -Change Notes: - 1. Add odm_types.h. - 2. Remove useless img files. - -Verification Before Checked-In: - 1. CE Team linux driver make ok. - ----------------------------------------------------------------------------------------------- -<09/30/2011 17:50 MH_Chen> -New Files: -Modified Files: -Change Notes: - 1. Revise HW integration architecture. - 2. Add MAC relative image.c. - 3. Update the newest HW parameters. - -Verification Before Checked-In: - 1. Windows N5/N62 compiler buildall ok. - ----------------------------------------------------------------------------------------------- -<09/23/2011 11:30 Georgia> -New Files: - rtl8192c/Hal8192CEPHYImg_CE.c - rtl8192c/Hal8192CEPHYImg_CE.h - rtl8192c/Hal8192CUPHYImg_CE.c - rtl8192c/Hal8192CUPHYImg_CE.h - rtl8192c/HalDMOutSrc8192C_CE.c - rtl8192c/HalDMOutSrc8192C_CE.h - rtl8192d/Hal8192DEPHYImg_CE.c - rtl8192d/Hal8192DEPHYImg_CE.h - rtl8192d/Hal8192DETestPHYImg_CE.c - rtl8192d/Hal8192DETestPHYImg_CE.h - rtl8192d/Hal8192DUPHYImg_CE.c - rtl8192d/Hal8192DUPHYImg_CE.h - rtl8192d/Hal8192DUTestPHYImg_CE.c - rtl8192d/Hal8192DUTestPHYImg_CE.h - rtl8192d/HalDMOutSrc8192D_CE.c - rtl8192d/HalDMOutSrc8192D_CE.h -Modified Files: -Change Notes: - 1. Add related files for SD4- NIC Linux - -Verification Before Checked-In: - 1. CE,CU,DE,DU buildall ok. ----------------------------------------------------------------------------------------------- -<09/22/2011 23:09 MH_Chen> -New Files: -Modified Files: -Change Notes: - 1. Revise batch file for MP driver PCIE/USB/SDIO compile pass. - 2. Revise all architecture for differemt team shaer common iinterface. - 3. Revise coding style for readbility. - 4. All common interface share the same DM structure. - -Verification Before Checked-In: - 1. N5/N62 buildall ok. - 2. We need other teams to use the file to compile pass. - ----------------------------------------------------------------------------------------------- -<09/20/2011 23:01 MH_Chen> -New Files: -Modified Files: -Change Notes: - 1. Add new out source interface for AP/Linux/ADSL/Windows team. - HAL\OUTSRC ==> common interface - HAL\OUTSRC\rtl8192c ==> independent out src files for different team temporarily. - HAL\OUTSRC\rtl8192c\Hal8192CEPHYImg.c/h .... - HAL\OUTSRC\rtl8192c\HalDMOutSrc8192C.c - 2. Disable DM temporarily until the architecture is ready. - 3. Revise DM architecture flow for MP driver. - -Verification Before Checked-In: - 1. Windows CU build ok. - 2. We need other teams to use the file to compile pass. - ------------------------------------------------------------------------------------------- - -<------Template----> -< ??/??/2009 00:00 Name > -New Files: -Modified Files: -Change Notes: -Verification before checked-in: - diff --git a/network/wlan/WDI/HAL/phydm/halhwimg.h b/network/wlan/WDI/HAL/phydm/halhwimg.h deleted file mode 100644 index 4c5c8816..00000000 --- a/network/wlan/WDI/HAL/phydm/halhwimg.h +++ /dev/null @@ -1,123 +0,0 @@ -#pragma once -#ifndef __INC_HW_IMG_H -#define __INC_HW_IMG_H - -// -// 2011/03/15 MH Add for different IC HW image file selection. code size consideration. -// -#if RT_PLATFORM == PLATFORM_LINUX - - #if (DEV_BUS_TYPE == RT_PCI_INTERFACE) - // For 92C - #define RTL8192CE_HWIMG_SUPPORT 1 - #define RTL8192CE_TEST_HWIMG_SUPPORT 0 - #define RTL8192CU_HWIMG_SUPPORT 0 - #define RTL8192CU_TEST_HWIMG_SUPPORT 0 - - // For 92D - #define RTL8192DE_HWIMG_SUPPORT 1 - #define RTL8192DE_TEST_HWIMG_SUPPORT 0 - #define RTL8192DU_HWIMG_SUPPORT 0 - #define RTL8192DU_TEST_HWIMG_SUPPORT 0 - - // For 8723 - #define RTL8723E_HWIMG_SUPPORT 1 - #define RTL8723U_HWIMG_SUPPORT 0 - #define RTL8723S_HWIMG_SUPPORT 0 - - //For 88E - #define RTL8188EE_HWIMG_SUPPORT 0 - #define RTL8188EU_HWIMG_SUPPORT 0 - #define RTL8188ES_HWIMG_SUPPORT 0 - - #elif (DEV_BUS_TYPE == RT_USB_INTERFACE) - // For 92C - #define RTL8192CE_HWIMG_SUPPORT 0 - #define RTL8192CE_TEST_HWIMG_SUPPORT 0 - #define RTL8192CU_HWIMG_SUPPORT 1 - #define RTL8192CU_TEST_HWIMG_SUPPORT 0 - - //For 92D - #define RTL8192DE_HWIMG_SUPPORT 0 - #define RTL8192DE_TEST_HWIMG_SUPPORT 0 - #define RTL8192DU_HWIMG_SUPPORT 1 - #define RTL8192DU_TEST_HWIMG_SUPPORT 0 - - // For 8723 - #define RTL8723E_HWIMG_SUPPORT 0 - #define RTL8723U_HWIMG_SUPPORT 1 - #define RTL8723S_HWIMG_SUPPORT 0 - - //For 88E - #define RTL8188EE_HWIMG_SUPPORT 0 - #define RTL8188EU_HWIMG_SUPPORT 0 - #define RTL8188ES_HWIMG_SUPPORT 0 - - #elif (DEV_BUS_TYPE == RT_SDIO_INTERFACE) - // For 92C - #define RTL8192CE_HWIMG_SUPPORT 0 - #define RTL8192CE_TEST_HWIMG_SUPPORT 0 - #define RTL8192CU_HWIMG_SUPPORT 1 - #define RTL8192CU_TEST_HWIMG_SUPPORT 0 - - //For 92D - #define RTL8192DE_HWIMG_SUPPORT 0 - #define RTL8192DE_TEST_HWIMG_SUPPORT 0 - #define RTL8192DU_HWIMG_SUPPORT 1 - #define RTL8192DU_TEST_HWIMG_SUPPORT 0 - - // For 8723 - #define RTL8723E_HWIMG_SUPPORT 0 - #define RTL8723U_HWIMG_SUPPORT 0 - #define RTL8723S_HWIMG_SUPPORT 1 - - //For 88E - #define RTL8188EE_HWIMG_SUPPORT 0 - #define RTL8188EU_HWIMG_SUPPORT 0 - #define RTL8188ES_HWIMG_SUPPORT 0 - #endif - -#else // PLATFORM_WINDOWS & MacOSX - -//For 92C -#define RTL8192CE_HWIMG_SUPPORT 1 -#define RTL8192CE_TEST_HWIMG_SUPPORT 1 -#define RTL8192CU_HWIMG_SUPPORT 1 -#define RTL8192CU_TEST_HWIMG_SUPPORT 1 - -// For 92D -#define RTL8192DE_HWIMG_SUPPORT 1 -#define RTL8192DE_TEST_HWIMG_SUPPORT 1 -#define RTL8192DU_HWIMG_SUPPORT 1 -#define RTL8192DU_TEST_HWIMG_SUPPORT 1 - - #if defined(UNDER_CE) - // For 8723 - #define RTL8723E_HWIMG_SUPPORT 0 - #define RTL8723U_HWIMG_SUPPORT 0 - #define RTL8723S_HWIMG_SUPPORT 1 - - // For 88E - #define RTL8188EE_HWIMG_SUPPORT 0 - #define RTL8188EU_HWIMG_SUPPORT 0 - #define RTL8188ES_HWIMG_SUPPORT 0 - - #else - - // For 8723 - #define RTL8723E_HWIMG_SUPPORT 1 - //#define RTL_8723E_TEST_HWIMG_SUPPORT 1 - #define RTL8723U_HWIMG_SUPPORT 1 - //#define RTL_8723U_TEST_HWIMG_SUPPORT 1 - #define RTL8723S_HWIMG_SUPPORT 1 - //#define RTL_8723S_TEST_HWIMG_SUPPORT 1 - - //For 88E - #define RTL8188EE_HWIMG_SUPPORT 1 - #define RTL8188EU_HWIMG_SUPPORT 1 - #define RTL8188ES_HWIMG_SUPPORT 1 - #endif - -#endif - -#endif //__INC_HW_IMG_H diff --git a/network/wlan/WDI/HAL/phydm/halphyrf_ap.h b/network/wlan/WDI/HAL/phydm/halphyrf_ap.h deleted file mode 100644 index 5fc91594..00000000 --- a/network/wlan/WDI/HAL/phydm/halphyrf_ap.h +++ /dev/null @@ -1,153 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - #ifndef __HAL_PHY_RF_H__ - #define __HAL_PHY_RF_H__ - - -typedef enum _PWRTRACK_CONTROL_METHOD { - BBSWING, - TXAGC, - MIX_MODE, - TSSI_MODE -} PWRTRACK_METHOD; - -typedef VOID (*FuncSetPwr)(PVOID, PWRTRACK_METHOD, u1Byte, u1Byte); -typedef VOID(*FuncIQK)(PVOID, u1Byte, u1Byte, u1Byte); -typedef VOID (*FuncLCK)(PVOID); - //refine by YuChen for 8814A -typedef VOID (*FuncSwing)(PVOID, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*); -typedef VOID (*FuncSwing8814only)(PVOID, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*); - -typedef struct _TXPWRTRACK_CFG { - u1Byte SwingTableSize_CCK; - u1Byte SwingTableSize_OFDM; - u1Byte Threshold_IQK; - u1Byte Threshold_DPK; - u1Byte AverageThermalNum; - u1Byte RfPathCount; - u4Byte ThermalRegAddr; - FuncSetPwr ODM_TxPwrTrackSetPwr; - FuncIQK DoIQK; - FuncLCK PHY_LCCalibrate; - FuncSwing GetDeltaSwingTable; - FuncSwing8814only GetDeltaSwingTable8814only; -} TXPWRTRACK_CFG, *PTXPWRTRACK_CFG; - -VOID -ConfigureTxpowerTrack( - IN PVOID pDM_VOID, - OUT PTXPWRTRACK_CFG pConfig - ); - - -VOID -ODM_TXPowerTrackingCallback_ThermalMeter( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PVOID pDM_VOID -#else - IN PADAPTER Adapter -#endif - ); - -#if (RTL8192E_SUPPORT==1) -VOID -ODM_TXPowerTrackingCallback_ThermalMeter_92E( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PVOID pDM_VOID -#else - IN PADAPTER Adapter -#endif - ); -#endif - -#if (RTL8814A_SUPPORT == 1) -VOID -ODM_TXPowerTrackingCallback_ThermalMeter_JaguarSeries2( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PVOID pDM_VOID -#else - IN PADAPTER Adapter -#endif - ); - -#elif ODM_IC_11AC_SERIES_SUPPORT -VOID -ODM_TXPowerTrackingCallback_ThermalMeter_JaguarSeries( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PVOID pDM_VOID -#else - IN PADAPTER Adapter -#endif - ); -#endif - -#define IS_CCK_RATE(_rate) (ODM_MGN_1M == _rate || _rate == ODM_MGN_2M || _rate == ODM_MGN_5_5M || _rate == ODM_MGN_11M ) - - -#if(DM_ODM_SUPPORT_TYPE & ODM_WIN) -#define MAX_TOLERANCE 5 -#define IQK_DELAY_TIME 1 //ms - - // -// BB/MAC/RF other monitor API -// - -void PHY_SetMonitorMode8192C(IN PADAPTER pAdapter, - IN BOOLEAN bEnableMonitorMode ); - -// -// IQ calibrate -// -void -PHY_IQCalibrate_8192C( IN PADAPTER pAdapter, - IN BOOLEAN bReCovery); - -// -// LC calibrate -// -void -PHY_LCCalibrate_8192C( IN PADAPTER pAdapter); - -// -// AP calibrate -// -void -PHY_APCalibrate_8192C( IN PADAPTER pAdapter, - IN s1Byte delta); -#endif - -#define ODM_TARGET_CHNL_NUM_2G_5G 59 - - -VOID -ODM_ResetIQKResult( - IN PVOID pDM_VOID -); -u1Byte -ODM_GetRightChnlPlaceforIQK( - IN u1Byte chnl -); - -void phydm_rf_init(IN PVOID pDM_VOID); -void phydm_rf_watchdog(IN PVOID pDM_VOID); - -#endif // #ifndef __HAL_PHY_RF_H__ - diff --git a/network/wlan/WDI/HAL/phydm/halphyrf_ce.h b/network/wlan/WDI/HAL/phydm/halphyrf_ce.h deleted file mode 100644 index 9e95d955..00000000 --- a/network/wlan/WDI/HAL/phydm/halphyrf_ce.h +++ /dev/null @@ -1,95 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - #ifndef __HAL_PHY_RF_H__ - #define __HAL_PHY_RF_H__ - -typedef enum _SPUR_CAL_METHOD { - PLL_RESET, - AFE_PHASE_SEL -} SPUR_CAL_METHOD; - -typedef enum _PWRTRACK_CONTROL_METHOD { - BBSWING, - TXAGC, - MIX_MODE, - TSSI_MODE -} PWRTRACK_METHOD; - -typedef VOID (*FuncSetPwr)(PVOID, PWRTRACK_METHOD, u1Byte, u1Byte); -typedef VOID(*FuncIQK)(PVOID, u1Byte, u1Byte, u1Byte); -typedef VOID (*FuncLCK)(PVOID); -typedef VOID (*FuncSwing)(PVOID, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*); -typedef VOID (*FuncSwing8814only)(PVOID, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*); - -typedef struct _TXPWRTRACK_CFG { - u1Byte SwingTableSize_CCK; - u1Byte SwingTableSize_OFDM; - u1Byte Threshold_IQK; - u1Byte Threshold_DPK; - u1Byte AverageThermalNum; - u1Byte RfPathCount; - u4Byte ThermalRegAddr; - FuncSetPwr ODM_TxPwrTrackSetPwr; - FuncIQK DoIQK; - FuncLCK PHY_LCCalibrate; - FuncSwing GetDeltaSwingTable; - FuncSwing8814only GetDeltaSwingTable8814only; -} TXPWRTRACK_CFG, *PTXPWRTRACK_CFG; - -void ConfigureTxpowerTrack( - IN PVOID pDM_VOID, - OUT PTXPWRTRACK_CFG pConfig - ); - - -VOID -ODM_ClearTxPowerTrackingState( - IN PVOID pDM_VOID - ); - -VOID -ODM_TXPowerTrackingCallback_ThermalMeter( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PVOID pDM_VOID -#else - IN PADAPTER Adapter -#endif - ); - - - -#define ODM_TARGET_CHNL_NUM_2G_5G 59 - - -VOID -ODM_ResetIQKResult( - IN PVOID pDM_VOID -); -u1Byte -ODM_GetRightChnlPlaceforIQK( - IN u1Byte chnl -); - -void phydm_rf_init( IN PVOID pDM_VOID); -void phydm_rf_watchdog( IN PVOID pDM_VOID); - -#endif // #ifndef __HAL_PHY_RF_H__ - diff --git a/network/wlan/WDI/HAL/phydm/halphyrf_win.h b/network/wlan/WDI/HAL/phydm/halphyrf_win.h deleted file mode 100644 index b7aa4bbb..00000000 --- a/network/wlan/WDI/HAL/phydm/halphyrf_win.h +++ /dev/null @@ -1,98 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - #ifndef __HAL_PHY_RF_H__ - #define __HAL_PHY_RF_H__ - -typedef enum _SPUR_CAL_METHOD { - PLL_RESET, - AFE_PHASE_SEL -} SPUR_CAL_METHOD; - -typedef enum _PWRTRACK_CONTROL_METHOD { - BBSWING, - TXAGC, - MIX_MODE, - TSSI_MODE -} PWRTRACK_METHOD; - -typedef VOID (*FuncSetPwr)(PDM_ODM_T, PWRTRACK_METHOD, u1Byte, u1Byte); -typedef VOID(*FuncIQK)(PVOID, u1Byte, u1Byte, u1Byte); -typedef VOID (*FuncLCK)(PDM_ODM_T); - //refine by YuChen for 8814A -typedef VOID (*FuncSwing)(PDM_ODM_T, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*); -typedef VOID (*FuncSwing8814only)(PDM_ODM_T, pu1Byte*, pu1Byte*, pu1Byte*, pu1Byte*); - -typedef struct _TXPWRTRACK_CFG { - u1Byte SwingTableSize_CCK; - u1Byte SwingTableSize_OFDM; - u1Byte Threshold_IQK; - u1Byte Threshold_DPK; - u1Byte AverageThermalNum; - u1Byte RfPathCount; - u4Byte ThermalRegAddr; - FuncSetPwr ODM_TxPwrTrackSetPwr; - FuncIQK DoIQK; - FuncLCK PHY_LCCalibrate; - FuncSwing GetDeltaSwingTable; - FuncSwing8814only GetDeltaSwingTable8814only; -} TXPWRTRACK_CFG, *PTXPWRTRACK_CFG; - -VOID -ConfigureTxpowerTrack( - IN PDM_ODM_T pDM_Odm, - OUT PTXPWRTRACK_CFG pConfig - ); - - -VOID -ODM_ClearTxPowerTrackingState( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_TXPowerTrackingCallback_ThermalMeter( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm -#else - IN PADAPTER Adapter -#endif - ); - - - -#define ODM_TARGET_CHNL_NUM_2G_5G 59 - - -VOID -ODM_ResetIQKResult( - IN PDM_ODM_T pDM_Odm -); -u1Byte -ODM_GetRightChnlPlaceforIQK( - IN u1Byte chnl -); - -VOID odm_IQCalibrate(IN PDM_ODM_T pDM_Odm); -VOID phydm_rf_init( IN PDM_ODM_T pDM_Odm); -VOID phydm_rf_watchdog( IN PDM_ODM_T pDM_Odm); - -#endif // #ifndef __HAL_PHY_RF_H__ - diff --git a/network/wlan/WDI/HAL/phydm/mp_precomp.h b/network/wlan/WDI/HAL/phydm/mp_precomp.h deleted file mode 100644 index 2e950cb2..00000000 --- a/network/wlan/WDI/HAL/phydm/mp_precomp.h +++ /dev/null @@ -1,20 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - diff --git a/network/wlan/WDI/HAL/phydm/phydm.h b/network/wlan/WDI/HAL/phydm/phydm.h deleted file mode 100644 index 21651973..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm.h +++ /dev/null @@ -1,1438 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __HALDMOUTSRC_H__ -#define __HALDMOUTSRC_H__ - -//============================================================ -// include files -//============================================================ -#include "phydm_pre_define.h" -#include "phydm_dig.h" -#include "phydm_edcaturbocheck.h" -#include "phydm_pathdiv.h" -#include "phydm_antdiv.h" -#include "phydm_antdect.h" -#include "phydm_dynamicbbpowersaving.h" -#include "phydm_rainfo.h" -#include "phydm_dynamictxpower.h" -#include "phydm_cfotracking.h" -#include "phydm_acs.h" -#include "phydm_adaptivity.h" - - -//#include "rtl8814a/phydm_iqk_8814a.h" -//#include "rtl8822b/phydm_iqk_8822b.h" - - - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP)) -#include "halphyrf_ap.h" -#include "phydm_powertracking_ap.h" -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_CE)) -#include "phydm_beamforming.h" -#include "phydm_noisemonitor.h" -#include "halphyrf_ce.h" -#include "phydm_powertracking_ce.h" -#endif - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) -//#include "phydm_beamforming.h" -#include "phydm_rxhp.h" -#include "halphyrf_win.h" -#include "phydm_powertracking_win.h" -#endif - -//============================================================ -// Definition -//============================================================ -// -// 2011/09/22 MH Define all team supprt ability. -// - -// -// 2011/09/22 MH Define for all teams. Please Define the constan in your precomp header. -// -//#define DM_ODM_SUPPORT_AP 0 -//#define DM_ODM_SUPPORT_ADSL 0 -//#define DM_ODM_SUPPORT_CE 0 -//#define DM_ODM_SUPPORT_MP 1 - -// -// 2011/09/28 MH Define ODM SW team support flag. -// - -//For SW AntDiv, PathDiv, 8192C AntDiv joint use -#define TP_MODE 0 -#define RSSI_MODE 1 - -#define TRAFFIC_LOW 0 -#define TRAFFIC_HIGH 1 -#define TRAFFIC_ULTRA_LOW 2 - -#define NONE 0 - - - - -//8723A High Power IGI Setting -#define DM_DIG_HIGH_PWR_IGI_LOWER_BOUND 0x22 -#define DM_DIG_Gmode_HIGH_PWR_IGI_LOWER_BOUND 0x28 -#define DM_DIG_HIGH_PWR_THRESHOLD 0x3a -#define DM_DIG_LOW_PWR_THRESHOLD 0x14 - - -//============================================================ -// structure and define -//============================================================ - -// -// 2011/09/20 MH Add for AP/ADSLpseudo DM structuer requirement. -// We need to remove to other position??? -// -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN)) -typedef struct rtl8192cd_priv { - u1Byte temp; - -}rtl8192cd_priv, *prtl8192cd_priv; -#endif - - -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -typedef struct _ADAPTER{ - u1Byte temp; - #ifdef AP_BUILD_WORKAROUND - HAL_DATA_TYPE* temp2; - prtl8192cd_priv priv; - #endif -}ADAPTER, *PADAPTER; -#endif - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) - -typedef struct _WLAN_STA{ - u1Byte temp; -} WLAN_STA, *PRT_WLAN_STA; - -#endif - -typedef struct _Dynamic_Primary_CCA{ - u1Byte PriCCA_flag; - u1Byte intf_flag; - u1Byte intf_type; - u1Byte DupRTS_flag; - u1Byte Monitor_flag; - u1Byte CH_offset; - u1Byte MF_state; -}Pri_CCA_T, *pPri_CCA_T; - - -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - - -#ifdef ADSL_AP_BUILD_WORKAROUND -#define MAX_TOLERANCE 5 -#define IQK_DELAY_TIME 1 //ms -#endif -#if 0//defined in 8192cd.h -// -// Indicate different AP vendor for IOT issue. -// -typedef enum _HT_IOT_PEER -{ - HT_IOT_PEER_UNKNOWN = 0, - HT_IOT_PEER_REALTEK = 1, - HT_IOT_PEER_REALTEK_92SE = 2, - HT_IOT_PEER_BROADCOM = 3, - HT_IOT_PEER_RALINK = 4, - HT_IOT_PEER_ATHEROS = 5, - HT_IOT_PEER_CISCO = 6, - HT_IOT_PEER_MERU = 7, - HT_IOT_PEER_MARVELL = 8, - HT_IOT_PEER_REALTEK_SOFTAP = 9,// peer is RealTek SOFT_AP, by Bohn, 2009.12.17 - HT_IOT_PEER_SELF_SOFTAP = 10, // Self is SoftAP - HT_IOT_PEER_AIRGO = 11, - HT_IOT_PEER_INTEL = 12, - HT_IOT_PEER_RTK_APCLIENT = 13, - HT_IOT_PEER_REALTEK_81XX = 14, - HT_IOT_PEER_REALTEK_WOW = 15, - HT_IOT_PEER_MAX = 16 -}HT_IOT_PEER_E, *PHTIOT_PEER_E; -#endif -#endif//#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - -#define DM_Type_ByFW 0 -#define DM_Type_ByDriver 1 - -// -// Declare for common info -// - -#define IQK_THRESHOLD 8 -#define DPK_THRESHOLD 4 - - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP)) -__PACK typedef struct _ODM_Phy_Status_Info_ -{ - u1Byte RxPWDBAll; - u1Byte SignalQuality; /* in 0-100 index. */ - u1Byte RxMIMOSignalStrength[4]; /* in 0~100 index */ - s1Byte RxMIMOSignalQuality[4]; /* EVM */ - s1Byte RxSNR[4]; /* per-path's SNR */ -#if (RTL8822B_SUPPORT == 1) - u1Byte RxCount; /* RX path counter---*/ -#endif - u1Byte BandWidth; - -} __WLAN_ATTRIB_PACK__ ODM_PHY_INFO_T, *PODM_PHY_INFO_T; - -typedef struct _ODM_Phy_Status_Info_Append_ -{ - u1Byte MAC_CRC32; - -}ODM_PHY_INFO_Append_T,*PODM_PHY_INFO_Append_T; - -#else - -typedef struct _ODM_Phy_Status_Info_ -{ - // - // Be care, if you want to add any element please insert between - // RxPWDBAll & SignalStrength. - // -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - u4Byte RxPWDBAll; -#else - u1Byte RxPWDBAll; -#endif - u1Byte SignalQuality; /* in 0-100 index. */ - s1Byte RxMIMOSignalQuality[4]; /* per-path's EVM */ - u1Byte RxMIMOEVMdbm[4]; /* per-path's EVM dbm */ - u1Byte RxMIMOSignalStrength[4]; /* in 0~100 index */ - s2Byte Cfo_short[4]; /* per-path's Cfo_short */ - s2Byte Cfo_tail[4]; /* per-path's Cfo_tail */ - s1Byte RxPower; /* in dBm Translate from PWdB */ - s1Byte RecvSignalPower; /* Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. */ - u1Byte BTRxRSSIPercentage; - u1Byte SignalStrength; /* in 0-100 index. */ - s1Byte RxPwr[4]; /* per-path's pwdb */ - s1Byte RxSNR[4]; /* per-path's SNR */ -#if (RTL8822B_SUPPORT == 1) - u1Byte RxCount:2; /* RX path counter---*/ - u1Byte BandWidth:2; - u1Byte rxsc:4; /* sub-channel---*/ -#else - u1Byte BandWidth; -#endif - u1Byte btCoexPwrAdjust; -#if (RTL8822B_SUPPORT == 1) - u1Byte channel; /* channel number---*/ - BOOLEAN bMuPacket; /* is MU packet or not---*/ - BOOLEAN bBeamformed; /* BF packet---*/ -#endif -}ODM_PHY_INFO_T,*PODM_PHY_INFO_T; -#endif - -typedef struct _ODM_Per_Pkt_Info_ -{ - //u1Byte Rate; - u1Byte DataRate; - u1Byte StationID; - BOOLEAN bPacketMatchBSSID; - BOOLEAN bPacketToSelf; - BOOLEAN bPacketBeacon; - BOOLEAN bToSelf; -}ODM_PACKET_INFO_T,*PODM_PACKET_INFO_T; - - -typedef struct _ODM_Phy_Dbg_Info_ -{ - //ODM Write,debug info - s1Byte RxSNRdB[4]; - u4Byte NumQryPhyStatus; - u4Byte NumQryPhyStatusCCK; - u4Byte NumQryPhyStatusOFDM; -#if (RTL8822B_SUPPORT == 1) - u4Byte NumQryMuPkt; - u4Byte NumQryBfPkt; -#endif - u1Byte NumQryBeaconPkt; - //Others - s4Byte RxEVM[4]; - -}ODM_PHY_DBG_INFO_T; - - -typedef struct _ODM_Mac_Status_Info_ -{ - u1Byte test; - -}ODM_MAC_INFO; - -// -// 2011/20/20 MH For MP driver RT_WLAN_STA = STA_INFO_T -// Please declare below ODM relative info in your STA info structure. -// -#if 1 -typedef struct _ODM_STA_INFO{ - // Driver Write - BOOLEAN bUsed; // record the sta status link or not? - //u1Byte WirelessMode; // - u1Byte IOTPeer; // Enum value. HT_IOT_PEER_E - - // ODM Write - //1 PHY_STATUS_INFO - u1Byte RSSI_Path[4]; // - u1Byte RSSI_Ave; - u1Byte RXEVM[4]; - u1Byte RXSNR[4]; - - // ODM Write - //1 TX_INFO (may changed by IC) - //TX_INFO_T pTxInfo; // Define in IC folder. Move lower layer. -#if 0 - u1Byte ANTSEL_A; //in Jagar: 4bit; others: 2bit - u1Byte ANTSEL_B; //in Jagar: 4bit; others: 2bit - u1Byte ANTSEL_C; //only in Jagar: 4bit - u1Byte ANTSEL_D; //only in Jagar: 4bit - u1Byte TX_ANTL; //not in Jagar: 2bit - u1Byte TX_ANT_HT; //not in Jagar: 2bit - u1Byte TX_ANT_CCK; //not in Jagar: 2bit - u1Byte TXAGC_A; //not in Jagar: 4bit - u1Byte TXAGC_B; //not in Jagar: 4bit - u1Byte TXPWR_OFFSET; //only in Jagar: 3bit - u1Byte TX_ANT; //only in Jagar: 4bit for TX_ANTL/TX_ANTHT/TX_ANT_CCK -#endif - - // - // Please use compile flag to disabe the strcutrue for other IC except 88E. - // Move To lower layer. - // - // ODM Write Wilson will handle this part(said by Luke.Lee) - //TX_RPT_T pTxRpt; // Define in IC folder. Move lower layer. -#if 0 - //1 For 88E RA (don't redefine the naming) - u1Byte rate_id; - u1Byte rate_SGI; - u1Byte rssi_sta_ra; - u1Byte SGI_enable; - u1Byte Decision_rate; - u1Byte Pre_rate; - u1Byte Active; - - // Driver write Wilson handle. - //1 TX_RPT (don't redefine the naming) - u2Byte RTY[4]; // ??? - u2Byte TOTAL; // ??? - u2Byte DROP; // ??? - // - // Please use compile flag to disabe the strcutrue for other IC except 88E. - // -#endif - -}ODM_STA_INFO_T, *PODM_STA_INFO_T; -#endif - -// -// 2011/10/20 MH Define Common info enum for all team. -// -typedef enum _ODM_Common_Info_Definition -{ -//-------------REMOVED CASE-----------// - //ODM_CMNINFO_CCK_HP, - //ODM_CMNINFO_RFPATH_ENABLE, // Define as ODM write??? - //ODM_CMNINFO_BT_COEXIST, // ODM_BT_COEXIST_E - //ODM_CMNINFO_OP_MODE, // ODM_OPERATION_MODE_E -//-------------REMOVED CASE-----------// - - // - // Fixed value: - // - - //-----------HOOK BEFORE REG INIT-----------// - ODM_CMNINFO_PLATFORM = 0, - ODM_CMNINFO_ABILITY, // ODM_ABILITY_E - ODM_CMNINFO_INTERFACE, // ODM_INTERFACE_E - ODM_CMNINFO_MP_TEST_CHIP, - ODM_CMNINFO_IC_TYPE, // ODM_IC_TYPE_E - ODM_CMNINFO_CUT_VER, // ODM_CUT_VERSION_E - ODM_CMNINFO_FAB_VER, // ODM_FAB_E - ODM_CMNINFO_RF_TYPE, // ODM_RF_PATH_E or ODM_RF_TYPE_E? - ODM_CMNINFO_RFE_TYPE, - ODM_CMNINFO_BOARD_TYPE, // ODM_BOARD_TYPE_E - ODM_CMNINFO_PACKAGE_TYPE, - ODM_CMNINFO_EXT_LNA, // TRUE - ODM_CMNINFO_5G_EXT_LNA, - ODM_CMNINFO_EXT_PA, - ODM_CMNINFO_5G_EXT_PA, - ODM_CMNINFO_GPA, - ODM_CMNINFO_APA, - ODM_CMNINFO_GLNA, - ODM_CMNINFO_ALNA, - ODM_CMNINFO_EXT_TRSW, - ODM_CMNINFO_EXT_LNA_GAIN, - ODM_CMNINFO_PATCH_ID, //CUSTOMER ID - ODM_CMNINFO_BINHCT_TEST, - ODM_CMNINFO_BWIFI_TEST, - ODM_CMNINFO_SMART_CONCURRENT, - ODM_CMNINFO_CONFIG_BB_RF, - ODM_CMNINFO_DOMAIN_CODE_2G, - ODM_CMNINFO_DOMAIN_CODE_5G, - ODM_CMNINFO_IQKFWOFFLOAD, - ODM_CMNINFO_HUBUSBMODE, - ODM_CMNINFO_FWDWRSVDPAGEINPROGRESS, - ODM_CMNINFO_TX_TP, - ODM_CMNINFO_RX_TP, - ODM_CMNINFO_SOUNDING_SEQ, - //-----------HOOK BEFORE REG INIT-----------// - - - // - // Dynamic value: - // -//--------- POINTER REFERENCE-----------// - ODM_CMNINFO_MAC_PHY_MODE, // ODM_MAC_PHY_MODE_E - ODM_CMNINFO_TX_UNI, - ODM_CMNINFO_RX_UNI, - ODM_CMNINFO_WM_MODE, // ODM_WIRELESS_MODE_E - ODM_CMNINFO_BAND, // ODM_BAND_TYPE_E - ODM_CMNINFO_SEC_CHNL_OFFSET, // ODM_SEC_CHNL_OFFSET_E - ODM_CMNINFO_SEC_MODE, // ODM_SECURITY_E - ODM_CMNINFO_BW, // ODM_BW_E - ODM_CMNINFO_CHNL, - ODM_CMNINFO_FORCED_RATE, - - ODM_CMNINFO_DMSP_GET_VALUE, - ODM_CMNINFO_BUDDY_ADAPTOR, - ODM_CMNINFO_DMSP_IS_MASTER, - ODM_CMNINFO_SCAN, - ODM_CMNINFO_POWER_SAVING, - ODM_CMNINFO_ONE_PATH_CCA, // ODM_CCA_PATH_E - ODM_CMNINFO_DRV_STOP, - ODM_CMNINFO_PNP_IN, - ODM_CMNINFO_INIT_ON, - ODM_CMNINFO_ANT_TEST, - ODM_CMNINFO_NET_CLOSED, - //ODM_CMNINFO_RTSTA_AID, // For win driver only? - ODM_CMNINFO_FORCED_IGI_LB, - ODM_CMNINFO_P2P_LINK, - ODM_CMNINFO_FCS_MODE, - ODM_CMNINFO_IS1ANTENNA, - ODM_CMNINFO_RFDEFAULTPATH, -//--------- POINTER REFERENCE-----------// - -//------------CALL BY VALUE-------------// - ODM_CMNINFO_WIFI_DIRECT, - ODM_CMNINFO_WIFI_DISPLAY, - ODM_CMNINFO_LINK_IN_PROGRESS, - ODM_CMNINFO_LINK, - ODM_CMNINFO_STATION_STATE, - ODM_CMNINFO_RSSI_MIN, - ODM_CMNINFO_DBG_COMP, // u8Byte - ODM_CMNINFO_DBG_LEVEL, // u4Byte - ODM_CMNINFO_RA_THRESHOLD_HIGH, // u1Byte - ODM_CMNINFO_RA_THRESHOLD_LOW, // u1Byte - ODM_CMNINFO_RF_ANTENNA_TYPE, // u1Byte - ODM_CMNINFO_BT_ENABLED, - ODM_CMNINFO_BT_HS_CONNECT_PROCESS, - ODM_CMNINFO_BT_HS_RSSI, - ODM_CMNINFO_BT_OPERATION, - ODM_CMNINFO_BT_LIMITED_DIG, //Need to Limited Dig or not - ODM_CMNINFO_BT_DIG, - ODM_CMNINFO_BT_BUSY, //Check Bt is using or not//neil - ODM_CMNINFO_BT_DISABLE_EDCA, -#if(DM_ODM_SUPPORT_TYPE & ODM_AP) // for repeater mode add by YuChen 2014.06.23 -#ifdef UNIVERSAL_REPEATER - ODM_CMNINFO_VXD_LINK, -#endif -#endif - ODM_CMNINFO_AP_TOTAL_NUM, - ODM_CMNINFO_POWER_TRAINING, -//------------CALL BY VALUE-------------// - - // - // Dynamic ptr array hook itms. - // - ODM_CMNINFO_STA_STATUS, - ODM_CMNINFO_PHY_STATUS, - ODM_CMNINFO_MAC_STATUS, - - ODM_CMNINFO_MAX, - - -}ODM_CMNINFO_E; - -// -// 2011/10/20 MH Define ODM support ability. ODM_CMNINFO_ABILITY -// -typedef enum _ODM_Support_Ability_Definition -{ - // - // BB ODM section BIT 0-19 - // - ODM_BB_DIG = BIT0, - ODM_BB_RA_MASK = BIT1, - ODM_BB_DYNAMIC_TXPWR = BIT2, - ODM_BB_FA_CNT = BIT3, - ODM_BB_RSSI_MONITOR = BIT4, - ODM_BB_CCK_PD = BIT5, - ODM_BB_ANT_DIV = BIT6, - ODM_BB_PWR_SAVE = BIT7, - ODM_BB_PWR_TRAIN = BIT8, - ODM_BB_RATE_ADAPTIVE = BIT9, - ODM_BB_PATH_DIV = BIT10, - ODM_BB_PSD = BIT11, - ODM_BB_RXHP = BIT12, - ODM_BB_ADAPTIVITY = BIT13, - ODM_BB_CFO_TRACKING = BIT14, - ODM_BB_NHM_CNT = BIT15, - ODM_BB_PRIMARY_CCA = BIT16, - ODM_BB_TXBF = BIT17, - - // - // MAC DM section BIT 20-23 - // - ODM_MAC_EDCA_TURBO = BIT20, - ODM_MAC_EARLY_MODE = BIT21, - - // - // RF ODM section BIT 24-31 - // - ODM_RF_TX_PWR_TRACK = BIT24, - ODM_RF_RX_GAIN_TRACK = BIT25, - ODM_RF_CALIBRATION = BIT26, - -}ODM_ABILITY_E; - -//Move some non-DM enum,define, struc. form phydm.h to phydm_types.h by Dino - -// ODM_CMNINFO_ONE_PATH_CCA -typedef enum tag_CCA_Path -{ - ODM_CCA_2R = 0, - ODM_CCA_1R_A = 1, - ODM_CCA_1R_B = 2, -}ODM_CCA_PATH_E; - -//move RAInfo to Phydm_RaInfo.h - -//Remove struct PATHDIV_PARA to odm_PathDiv.h - -//Remove struct to odm_PowerTracking.h by YuChen -// -// ODM Dynamic common info value definition -// -//Move AntDiv form phydm.h to Phydm_AntDiv.h by Dino - -//move PathDiv to Phydm_PathDiv.h - -typedef enum _BASEBAND_CONFIG_PHY_REG_PG_VALUE_TYPE{ - PHY_REG_PG_RELATIVE_VALUE = 0, - PHY_REG_PG_EXACT_VALUE = 1 -} PHY_REG_PG_TYPE; - -// -// 2011/09/22 MH Copy from SD4 defined structure. We use to support PHY DM integration. -// -#if(DM_ODM_SUPPORT_TYPE & ODM_WIN) -#if (RT_PLATFORM != PLATFORM_LINUX) -typedef -#endif - -struct DM_Out_Source_Dynamic_Mechanism_Structure -#else// for AP,ADSL,CE Team -typedef struct DM_Out_Source_Dynamic_Mechanism_Structure -#endif -{ - //RT_TIMER FastAntTrainingTimer; - // - // Add for different team use temporarily - // - PADAPTER Adapter; // For CE/NIC team - prtl8192cd_priv priv; // For AP/ADSL team - // WHen you use Adapter or priv pointer, you must make sure the pointer is ready. - BOOLEAN odm_ready; - -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_WIN)) - rtl8192cd_priv fake_priv; -#endif -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - // ADSL_AP_BUILD_WORKAROUND - ADAPTER fake_adapter; -#endif - - PHY_REG_PG_TYPE PhyRegPgValueType; - u1Byte PhyRegPgVersion; - - u8Byte DebugComponents; - u4Byte DebugLevel; - - u4Byte NumQryPhyStatusAll; //CCK + OFDM - u4Byte LastNumQryPhyStatusAll; - u4Byte RxPWDBAve; - BOOLEAN MPDIG_2G; //off MPDIG - u1Byte Times_2G; - -//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------// - BOOLEAN bCckHighPower; - u1Byte RFPathRxEnable; // ODM_CMNINFO_RFPATH_ENABLE - u1Byte ControlChannel; -//------ ODM HANDLE, DRIVER NEEDS NOT TO HOOK------// - -//--------REMOVED COMMON INFO----------// - //u1Byte PseudoMacPhyMode; - //BOOLEAN *BTCoexist; - //BOOLEAN PseudoBtCoexist; - //u1Byte OPMode; - //BOOLEAN bAPMode; - //BOOLEAN bClientMode; - //BOOLEAN bAdHocMode; - //BOOLEAN bSlaveOfDMSP; -//--------REMOVED COMMON INFO----------// - - -//1 COMMON INFORMATION - - // - // Init Value - // -//-----------HOOK BEFORE REG INIT-----------// - // ODM Platform info AP/ADSL/CE/MP = 1/2/3/4 - u1Byte SupportPlatform; - // ODM Support Ability DIG/RATR/TX_PWR_TRACK/ ¡K¡K = 1/2/3/¡K - u4Byte SupportAbility; - // ODM PCIE/USB/SDIO = 1/2/3 - u1Byte SupportInterface; - // ODM composite or independent. Bit oriented/ 92C+92D+ .... or any other type = 1/2/3/... - u4Byte SupportICType; - // Cut Version TestChip/A-cut/B-cut... = 0/1/2/3/... - u1Byte CutVersion; - // Fab Version TSMC/UMC = 0/1 - u1Byte FabVersion; - // RF Type 4T4R/3T3R/2T2R/1T2R/1T1R/... - u1Byte RFType; - u1Byte RFEType; - // Board Type Normal/HighPower/MiniCard/SLIM/Combo/... = 0/1/2/3/4/... - u1Byte BoardType; - u1Byte PackageType; - u2Byte TypeGLNA; - u2Byte TypeGPA; - u2Byte TypeALNA; - u2Byte TypeAPA; - // with external LNA NO/Yes = 0/1 - u1Byte ExtLNA; // 2G - u1Byte ExtLNA5G; //5G - // with external PA NO/Yes = 0/1 - u1Byte ExtPA; // 2G - u1Byte ExtPA5G; //5G - // with external TRSW NO/Yes = 0/1 - u1Byte ExtTRSW; - u1Byte ExtLNAGain; // 2G - u1Byte PatchID; //Customer ID - BOOLEAN bInHctTest; - BOOLEAN bWIFITest; - - BOOLEAN bDualMacSmartConcurrent; - u4Byte BK_SupportAbility; - u1Byte AntDivType; - BOOLEAN ConfigBBRF; - u1Byte odm_Regulation2_4G; - u1Byte odm_Regulation5G; - u1Byte IQKFWOffload; - BOOLEAN cck_new_agc; -//-----------HOOK BEFORE REG INIT-----------// - - // - // Dynamic Value - // -//--------- POINTER REFERENCE-----------// - - u1Byte u1Byte_temp; - BOOLEAN BOOLEAN_temp; - PADAPTER PADAPTER_temp; - - // MAC PHY Mode SMSP/DMSP/DMDP = 0/1/2 - u1Byte *pMacPhyMode; - //TX Unicast byte count - u8Byte *pNumTxBytesUnicast; - //RX Unicast byte count - u8Byte *pNumRxBytesUnicast; - // Wireless mode B/G/A/N = BIT0/BIT1/BIT2/BIT3 - u1Byte *pWirelessMode; //ODM_WIRELESS_MODE_E - // Frequence band 2.4G/5G = 0/1 - u1Byte *pBandType; - // Secondary channel offset don't_care/below/above = 0/1/2 - u1Byte *pSecChOffset; - // Security mode Open/WEP/AES/TKIP = 0/1/2/3 - u1Byte *pSecurity; - // BW info 20M/40M/80M = 0/1/2 - u1Byte *pBandWidth; - // Central channel location Ch1/Ch2/.... - u1Byte *pChannel; //central channel number - BOOLEAN DPK_Done; - // Common info for 92D DMSP - - BOOLEAN *pbGetValueFromOtherMac; - PADAPTER *pBuddyAdapter; - BOOLEAN *pbMasterOfDMSP; //MAC0: master, MAC1: slave - // Common info for Status - BOOLEAN *pbScanInProcess; - BOOLEAN *pbPowerSaving; - // CCA Path 2-path/path-A/path-B = 0/1/2; using ODM_CCA_PATH_E. - u1Byte *pOnePathCCA; - //pMgntInfo->AntennaTest - u1Byte *pAntennaTest; - BOOLEAN *pbNet_closed; - //u1Byte *pAidMap; - u1Byte *pu1ForcedIgiLb; - BOOLEAN *pIsFcsModeEnable; -/*--------- For 8723B IQK-----------*/ - BOOLEAN *pIs1Antenna; - u1Byte *pRFDefaultPath; - // 0:S1, 1:S0 - -//--------- POINTER REFERENCE-----------// - pu2Byte pForcedDataRate; - pu1Byte HubUsbMode; - BOOLEAN *pbFwDwRsvdPageInProgress; - u4Byte *pCurrentTxTP; - u4Byte *pCurrentRxTP; - u1Byte *pSoundingSeq; -//------------CALL BY VALUE-------------// - BOOLEAN bLinkInProcess; - BOOLEAN bWIFI_Direct; - BOOLEAN bWIFI_Display; - BOOLEAN bLinked; - BOOLEAN bsta_state; -#if(DM_ODM_SUPPORT_TYPE & ODM_AP) // for repeater mode add by YuChen 2014.06.23 -#ifdef UNIVERSAL_REPEATER - BOOLEAN VXD_bLinked; -#endif -#endif // for repeater mode add by YuChen 2014.06.23 - u1Byte RSSI_Min; - u1Byte InterfaceIndex; /*Add for 92D dual MAC: 0--Mac0 1--Mac1*/ - BOOLEAN bIsMPChip; - BOOLEAN bOneEntryOnly; - BOOLEAN mp_mode; - u4Byte OneEntry_MACID; - u1Byte pre_number_linked_client; - u1Byte number_linked_client; - u1Byte pre_number_active_client; - u1Byte number_active_client; - // Common info for BTDM - BOOLEAN bBtEnabled; // BT is enabled - BOOLEAN bBtConnectProcess; // BT HS is under connection progress. - u1Byte btHsRssi; // BT HS mode wifi rssi value. - BOOLEAN bBtHsOperation; // BT HS mode is under progress - u1Byte btHsDigVal; // use BT rssi to decide the DIG value - BOOLEAN bBtDisableEdcaTurbo; // Under some condition, don't enable the EDCA Turbo - BOOLEAN bBtBusy; // BT is busy. - BOOLEAN bBtLimitedDig; // BT is busy. - BOOLEAN bDisablePhyApi; -//------------CALL BY VALUE-------------// - u1Byte RSSI_A; - u1Byte RSSI_B; - u1Byte RSSI_C; - u1Byte RSSI_D; - u8Byte RSSI_TRSW; - u8Byte RSSI_TRSW_H; - u8Byte RSSI_TRSW_L; - u8Byte RSSI_TRSW_iso; - u1Byte TXAntStatus; - u1Byte RXAntStatus; - u1Byte cck_lna_idx; - u1Byte cck_vga_idx; - u1Byte ofdm_agc_idx[4]; - - u1Byte RxRate; - BOOLEAN bNoisyState; - u1Byte TxRate; - u1Byte LinkedInterval; - u1Byte preChannel; - u4Byte TxagcOffsetValueA; - BOOLEAN IsTxagcOffsetPositiveA; - u4Byte TxagcOffsetValueB; - BOOLEAN IsTxagcOffsetPositiveB; - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u4Byte BbSwingOffsetA; - BOOLEAN IsBbSwingOffsetPositiveA; - u4Byte BbSwingOffsetB; - BOOLEAN IsBbSwingOffsetPositiveB; - u1Byte antdiv_rssi; - u1Byte fat_comb_a; - u1Byte fat_comb_b; - u1Byte antdiv_intvl; - u1Byte AntType; - u1Byte pre_AntType; - u1Byte antdiv_period; - u1Byte antdiv_select; - u1Byte path_select; - u1Byte antdiv_evm_en; - u1Byte bdc_holdstate; - u1Byte NdpaPeriod; - BOOLEAN H2C_RARpt_connect; - BOOLEAN cck_agc_report_type; - - u1Byte dm_dig_max_TH; - u1Byte dm_dig_min_TH; - u1Byte print_agc; - - //For Adaptivtiy - u2Byte NHM_cnt_0; - u2Byte NHM_cnt_1; - s1Byte TH_L2H_ini; - s1Byte TH_EDCCA_HL_diff; - s1Byte TH_L2H_ini_mode2; - s1Byte TH_EDCCA_HL_diff_mode2; - BOOLEAN Carrier_Sense_enable; - u1Byte Adaptivity_IGI_upper; - BOOLEAN adaptivity_flag; - u1Byte DCbackoff; - BOOLEAN Adaptivity_enable; - u1Byte APTotalNum; - BOOLEAN EDCCA_enable; - ADAPTIVITY_STATISTICS Adaptivity; - //For Adaptivtiy - u1Byte LastUSBHub; - u1Byte TxBfDataRate; - u1Byte CurrentAddress[6]; - - u1Byte c2h_cmd_start; - u1Byte fw_debug_trace[60]; - u1Byte pre_c2h_seq; - BOOLEAN fw_buff_is_enpty; - u4Byte data_frame_num; - - /*for noise detection*/ - BOOLEAN NoisyDecision; /*b_noisy*/ - BOOLEAN pre_b_noisy; - u4Byte NoisyDecision_Smooth; - -#if (DM_ODM_SUPPORT_TYPE & (ODM_CE)) - ODM_NOISE_MONITOR noise_level;//[ODM_MAX_CHANNEL_NUM]; -#endif - // - //2 Define STA info. - // _ODM_STA_INFO - // 2012/01/12 MH For MP, we need to reduce one array pointer for default port.?? - PSTA_INFO_T pODM_StaInfo[ODM_ASSOCIATE_ENTRY_NUM]; - u2Byte platform2phydm_macid_table[ODM_ASSOCIATE_ENTRY_NUM]; /* platform_macid_table[platform_macid] = phydm_macid */ - - u2Byte CurrminRptTime; - ODM_RA_INFO_T RAInfo[ODM_ASSOCIATE_ENTRY_NUM]; //Use MacID as array index. STA MacID=0, VWiFi Client MacID={1, ODM_ASSOCIATE_ENTRY_NUM-1} //YJ,add,120119 - - // - // 2012/02/14 MH Add to share 88E ra with other SW team. - // We need to colelct all support abilit to a proper area. - // - BOOLEAN RaSupport88E; - - // Define ........... - - // Latest packet phy info (ODM write) - ODM_PHY_DBG_INFO_T PhyDbgInfo; - //PHY_INFO_88E PhyInfo; - - // Latest packet phy info (ODM write) - ODM_MAC_INFO *pMacInfo; - //MAC_INFO_88E MacInfo; - - // Different Team independt structure?? - - // - //TX_RTP_CMN TX_retrpo; - //TX_RTP_88E TX_retrpo; - //TX_RTP_8195 TX_retrpo; - - // - //ODM Structure - // -#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) - #if (DM_ODM_SUPPORT_TYPE & (ODM_AP)) - BDC_T DM_BdcTable; - #endif - - #ifdef CONFIG_HL_SMART_ANTENNA_TYPE1 - SAT_T dm_sat_table; - #endif - -#endif - FAT_T DM_FatTable; - DIG_T DM_DigTable; - - PS_T DM_PSTable; - Pri_CCA_T DM_PriCCA; -#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) - RXHP_T DM_RXHP_Table; -#endif - RA_T DM_RA_Table; - FALSE_ALARM_STATISTICS FalseAlmCnt; - FALSE_ALARM_STATISTICS FlaseAlmCntBuddyAdapter; - SWAT_T DM_SWAT_Table; - BOOLEAN RSSI_test; - CFO_TRACKING DM_CfoTrack; - ACS DM_ACS; - - - - //IQK_INFO IQK_info; - - -#if (RTL8822B_SUPPORT == 1) - IQK_INFO IQK_info_8822B; -#endif /* (RTL8814A_SUPPORT==1) */ - - -#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) - //Path Div Struct - PATHDIV_PARA pathIQK; -#endif -#if(defined(CONFIG_PATH_DIVERSITY)) - PATHDIV_T DM_PathDiv; -#endif - - EDCA_T DM_EDCA_Table; - u4Byte WMMEDCA_BE; - - // Copy from SD4 structure - // - // ================================================== - // - - //common - //u1Byte DM_Type; - //u1Byte PSD_Report_RXHP[80]; // Add By Gary - //u1Byte PSD_func_flag; // Add By Gary - //for DIG - //u1Byte bDMInitialGainEnable; - //u1Byte binitialized; // for dm_initial_gain_Multi_STA use. - //for Antenna diversity - //u8 AntDivCfg;// 0:OFF , 1:ON, 2:by efuse - //PSTA_INFO_T RSSI_target; - - BOOLEAN *pbDriverStopped; - BOOLEAN *pbDriverIsGoingToPnpSetPowerSleep; - BOOLEAN *pinit_adpt_in_progress; - - //PSD - BOOLEAN bUserAssignLevel; - RT_TIMER PSDTimer; - u1Byte RSSI_BT; //come from BT - BOOLEAN bPSDinProcess; - BOOLEAN bPSDactive; - BOOLEAN bDMInitialGainEnable; - - //MPT DIG - RT_TIMER MPT_DIGTimer; - - //for rate adaptive, in fact, 88c/92c fw will handle this - u1Byte bUseRAMask; - - ODM_RATE_ADAPTIVE RateAdaptive; -//#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE)) -#if(defined(CONFIG_ANT_DETECTION)) - ANT_DETECTED_INFO AntDetectedInfo; // Antenna detected information for RSSI tool -#endif - ODM_RF_CAL_T RFCalibrateInfo; - - - // - // Dynamic ATC switch - // - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - // - // Power Training - // - u1Byte ForcePowerTrainingState; - BOOLEAN bChangeState; - u4Byte PT_score; - u8Byte OFDM_RX_Cnt; - u8Byte CCK_RX_Cnt; -#endif - BOOLEAN bDisablePowerTraining; - - // - // ODM system resource. - // - - // ODM relative time. - RT_TIMER PathDivSwitchTimer; - //2011.09.27 add for Path Diversity - RT_TIMER CCKPathDiversityTimer; - RT_TIMER FastAntTrainingTimer; -#ifdef ODM_EVM_ENHANCE_ANTDIV - RT_TIMER EVM_FastAntTrainingTimer; -#endif - RT_TIMER sbdcnt_timer; - - // ODM relative workitem. -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#if USE_WORKITEM - RT_WORK_ITEM PathDivSwitchWorkitem; - RT_WORK_ITEM CCKPathDiversityWorkitem; - RT_WORK_ITEM FastAntTrainingWorkitem; - RT_WORK_ITEM MPT_DIGWorkitem; - RT_WORK_ITEM RaRptWorkitem; - RT_WORK_ITEM sbdcnt_workitem; -#endif -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE)) -#if (BEAMFORMING_SUPPORT == 1) - RT_BEAMFORMING_INFO BeamformingInfo; -#endif -#endif - -#if(DM_ODM_SUPPORT_TYPE & ODM_WIN) - -#if (RT_PLATFORM != PLATFORM_LINUX) -} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure -#else -}; -#endif - -#else// for AP,ADSL,CE Team -} DM_ODM_T, *PDM_ODM_T; // DM_Dynamic_Mechanism_Structure -#endif - - -typedef enum _PHYDM_STRUCTURE_TYPE{ - PHYDM_FALSEALMCNT, - PHYDM_CFOTRACK, - PHYDM_ADAPTIVITY, - PHYDM_ROMINFO, - -}PHYDM_STRUCTURE_TYPE; - - - - typedef enum _ODM_RF_CONTENT{ - odm_radioa_txt = 0x1000, - odm_radiob_txt = 0x1001, - odm_radioc_txt = 0x1002, - odm_radiod_txt = 0x1003 -} ODM_RF_CONTENT; - -typedef enum _ODM_BB_Config_Type{ - CONFIG_BB_PHY_REG, - CONFIG_BB_AGC_TAB, - CONFIG_BB_AGC_TAB_2G, - CONFIG_BB_AGC_TAB_5G, - CONFIG_BB_PHY_REG_PG, - CONFIG_BB_PHY_REG_MP, - CONFIG_BB_AGC_TAB_DIFF, -} ODM_BB_Config_Type, *PODM_BB_Config_Type; - -typedef enum _ODM_RF_Config_Type{ - CONFIG_RF_RADIO, - CONFIG_RF_TXPWR_LMT, -} ODM_RF_Config_Type, *PODM_RF_Config_Type; - -typedef enum _ODM_FW_Config_Type{ - CONFIG_FW_NIC, - CONFIG_FW_NIC_2, - CONFIG_FW_AP, - CONFIG_FW_AP_2, - CONFIG_FW_MP, - CONFIG_FW_WoWLAN, - CONFIG_FW_WoWLAN_2, - CONFIG_FW_AP_WoWLAN, - CONFIG_FW_BT, -} ODM_FW_Config_Type; - -// Status code -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -typedef enum _RT_STATUS{ - RT_STATUS_SUCCESS, - RT_STATUS_FAILURE, - RT_STATUS_PENDING, - RT_STATUS_RESOURCE, - RT_STATUS_INVALID_CONTEXT, - RT_STATUS_INVALID_PARAMETER, - RT_STATUS_NOT_SUPPORT, - RT_STATUS_OS_API_FAILED, -}RT_STATUS,*PRT_STATUS; -#endif // end of RT_STATUS definition - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -//#include "odm_function.h" - -//3=========================================================== -//3 DIG -//3=========================================================== - -//Remove DIG by Yuchen - -//3=========================================================== -//3 AGC RX High Power Mode -//3=========================================================== -#define LNA_Low_Gain_1 0x64 -#define LNA_Low_Gain_2 0x5A -#define LNA_Low_Gain_3 0x58 - -#define FA_RXHP_TH1 5000 -#define FA_RXHP_TH2 1500 -#define FA_RXHP_TH3 800 -#define FA_RXHP_TH4 600 -#define FA_RXHP_TH5 500 - -//3=========================================================== -//3 EDCA -//3=========================================================== - -//3=========================================================== -//3 Dynamic Tx Power -//3=========================================================== -//Dynamic Tx Power Control Threshold - -//Remove By YuChen - -//3=========================================================== -//3 Tx Power Tracking -//3=========================================================== - - - -//3=========================================================== -//3 Rate Adaptive -//3=========================================================== -//Remove to odm_RaInfo.h by RS_James - -//3=========================================================== -//3 BB Power Save -//3=========================================================== - -typedef enum tag_1R_CCA_Type_Definition -{ - CCA_1R =0, - CCA_2R = 1, - CCA_MAX = 2, -}DM_1R_CCA_E; - -typedef enum tag_RF_Type_Definition -{ - RF_Save =0, - RF_Normal = 1, - RF_MAX = 2, -}DM_RF_E; - - -// -// Extern Global Variables. -// -//PowerTracking move to odm_powerTrakcing.h by YuChen -// -// check Sta pointer valid or not -// -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -#define IS_STA_VALID(pSta) (pSta && pSta->expire_to) -#elif (DM_ODM_SUPPORT_TYPE & ODM_WIN) -#define IS_STA_VALID(pSta) (pSta && pSta->bUsed) -#else -#define IS_STA_VALID(pSta) (pSta) -#endif - -//Remove DIG by yuchen - -//Remove BB power saving by Yuchen - -//remove PT by yuchen - -//ODM_RAStateCheck() Remove by RS_James - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_AP|ODM_ADSL)) -//============================================================ -// function prototype -//============================================================ -//#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh -//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter, -// IN INT32 DM_Type, -// IN INT32 DM_Value); - -//Remove DIG by yuchen - - -BOOLEAN -ODM_CheckPowerStatus( - IN PADAPTER Adapter - ); - - -//Remove ODM_RateAdaptiveStateApInit() by RS_James - -//Remove Edca by YuChen - -#endif - - - -u4Byte odm_ConvertTo_dB(u4Byte Value); - -u4Byte odm_ConvertTo_linear(u4Byte Value); - -#if((DM_ODM_SUPPORT_TYPE==ODM_WIN)||(DM_ODM_SUPPORT_TYPE==ODM_CE)) - -u4Byte -GetPSDData( - PDM_ODM_T pDM_Odm, - unsigned int point, - u1Byte initial_gain_psd); - -#endif - -#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) -VOID -ODM_DMWatchdog_LPS( - IN PDM_ODM_T pDM_Odm -); -#endif - - -s4Byte -ODM_PWdB_Conversion( - IN s4Byte X, - IN u4Byte TotalBit, - IN u4Byte DecimalBit - ); - -s4Byte -ODM_SignConversion( - IN s4Byte value, - IN u4Byte TotalBit - ); - -VOID -ODM_DMInit( - IN PDM_ODM_T pDM_Odm -); - -VOID -ODM_DMReset( - IN PDM_ODM_T pDM_Odm - ); - -VOID -phydm_support_ablity_debug( - IN PVOID pDM_VOID, - IN u4Byte *const dm_value, - IN u4Byte *_used, - OUT char *output, - IN u4Byte *_out_len - ); - -VOID -ODM_DMWatchdog( - IN PDM_ODM_T pDM_Odm // For common use in the future - ); - -VOID -ODM_CmnInfoInit( - IN PDM_ODM_T pDM_Odm, - IN ODM_CMNINFO_E CmnInfo, - IN u4Byte Value - ); - -VOID -ODM_CmnInfoHook( - IN PDM_ODM_T pDM_Odm, - IN ODM_CMNINFO_E CmnInfo, - IN PVOID pValue - ); - -VOID -ODM_CmnInfoPtrArrayHook( - IN PDM_ODM_T pDM_Odm, - IN ODM_CMNINFO_E CmnInfo, - IN u2Byte Index, - IN PVOID pValue - ); - -VOID -ODM_CmnInfoUpdate( - IN PDM_ODM_T pDM_Odm, - IN u4Byte CmnInfo, - IN u8Byte Value - ); - -#if(DM_ODM_SUPPORT_TYPE==ODM_AP) -VOID -ODM_InitAllThreads( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_StopAllThreads( - IN PDM_ODM_T pDM_Odm - ); -#endif - -VOID -ODM_InitAllTimers( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_CancelAllTimers( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_ReleaseAllTimers( - IN PDM_ODM_T pDM_Odm - ); - - - - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID ODM_InitAllWorkItems(IN PDM_ODM_T pDM_Odm ); -VOID ODM_FreeAllWorkItems(IN PDM_ODM_T pDM_Odm ); - - - -u8Byte -PlatformDivision64( - IN u8Byte x, - IN u8Byte y -); - -//==================================================== -//3 PathDiV End -//==================================================== - - -#define DM_ChangeDynamicInitGainThresh ODM_ChangeDynamicInitGainThresh -//void ODM_ChangeDynamicInitGainThresh(IN PADAPTER pAdapter, -// IN INT32 DM_Type, -// IN INT32 DM_Value); -// -// PathDiveristy Remove by RS_James - -typedef enum tag_DIG_Connect_Definition -{ - DIG_STA_DISCONNECT = 0, - DIG_STA_CONNECT = 1, - DIG_STA_BEFORE_CONNECT = 2, - DIG_MultiSTA_DISCONNECT = 3, - DIG_MultiSTA_CONNECT = 4, - DIG_CONNECT_MAX -}DM_DIG_CONNECT_E; - - -// -// 2012/01/12 MH Check afapter status. Temp fix BSOD. -// -#define HAL_ADAPTER_STS_CHK(pDM_Odm)\ - if (pDM_Odm->Adapter == NULL)\ - {\ - return;\ - }\ - - -// -// For new definition in MP temporarily fro power tracking, -// - - -#endif // #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -VOID -ODM_AsocEntry_Init( - IN PDM_ODM_T pDM_Odm - ); - -//Remove ODM_DynamicARFBSelect() by RS_James - -PVOID -PhyDM_Get_Structure( - IN PDM_ODM_T pDM_Odm, - IN u1Byte Structure_Type -); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) ||(DM_ODM_SUPPORT_TYPE == ODM_CE) -/*===========================================================*/ -/* The following is for compile only*/ -/*===========================================================*/ - -#define IS_HARDWARE_TYPE_8723A(_Adapter) FALSE -#define IS_HARDWARE_TYPE_8723AE(_Adapter) FALSE -#define IS_HARDWARE_TYPE_8192C(_Adapter) FALSE -#define IS_HARDWARE_TYPE_8192D(_Adapter) FALSE -#define RF_T_METER_92D 0x42 - - -#define SET_TX_DESC_ANTSEL_A_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 0, 1, __Value) -#define SET_TX_DESC_TX_ANTL_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 4, 2, __Value) -#define SET_TX_DESC_TX_ANT_HT_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 6, 2, __Value) -#define SET_TX_DESC_TX_ANT_CCK_92C(__pTxDesc, __Value) SET_BITS_TO_LE_1BYTE(__pTxDesc+8+3, 2, 2, __Value) - -#define GET_RX_STATUS_DESC_RX_MCS(__pRxStatusDesc) LE_BITS_TO_1BYTE( __pRxStatusDesc+12, 0, 6) - -#define RX_HAL_IS_CCK_RATE_92C(pDesc)\ - (GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE1M ||\ - GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE2M ||\ - GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE5_5M ||\ - GET_RX_STATUS_DESC_RX_MCS(pDesc) == DESC_RATE11M) - -#define H2C_92C_PSD_RESULT 16 - -#define rConfig_ram64x16 0xb2c - -#define TARGET_CHNL_NUM_2G_5G 59 -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -VOID -FillH2CCmd92C( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); -VOID -PHY_SetTxPowerLevel8192C( - IN PADAPTER Adapter, - IN u1Byte channel - ); -u1Byte GetRightChnlPlaceforIQK(u1Byte chnl); - -#endif - -//=========================================================== -#endif //#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -void odm_dtc(PDM_ODM_T pDM_Odm); -#endif /* #if (DM_ODM_SUPPORT_TYPE == ODM_CE) */ - - -VOID phydm_NoisyDetection(IN PDM_ODM_T pDM_Odm ); - - -#endif - diff --git a/network/wlan/WDI/HAL/phydm/phydm_acs.h b/network/wlan/WDI/HAL/phydm/phydm_acs.h deleted file mode 100644 index d7eabda8..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_acs.h +++ /dev/null @@ -1,129 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMACS_H__ -#define __PHYDMACS_H__ - -#define ACS_VERSION "1.0" -#define CLM_VERSION "1.0" - -#define ODM_MAX_CHANNEL_2G 14 -#define ODM_MAX_CHANNEL_5G 24 - -// For phydm_AutoChannelSelectSettingAP() -#define STORE_DEFAULT_NHM_SETTING 0 -#define RESTORE_DEFAULT_NHM_SETTING 1 -#define ACS_NHM_SETTING 2 - -typedef struct _ACS_ -{ - BOOLEAN bForceACSResult; - u1Byte CleanChannel_2G; - u1Byte CleanChannel_5G; - u2Byte Channel_Info_2G[2][ODM_MAX_CHANNEL_2G]; //Channel_Info[1]: Channel Score, Channel_Info[2]:Channel_Scan_Times - u2Byte Channel_Info_5G[2][ODM_MAX_CHANNEL_5G]; - -#if ( DM_ODM_SUPPORT_TYPE & ODM_AP ) - u1Byte ACS_Step; - // NHM Count 0-11 - u1Byte NHM_Cnt[14][11]; - - // AC-Series, for storing previous setting - u4Byte Reg0x990; - u4Byte Reg0x994; - u4Byte Reg0x998; - u4Byte Reg0x99C; - u1Byte Reg0x9A0; // u1Byte - - // N-Series, for storing previous setting - u4Byte Reg0x890; - u4Byte Reg0x894; - u4Byte Reg0x898; - u4Byte Reg0x89C; - u1Byte Reg0xE28; // u1Byte -#endif - -}ACS, *PACS; - - -VOID -odm_AutoChannelSelectInit( - IN PVOID pDM_VOID -); - -VOID -odm_AutoChannelSelectReset( - IN PVOID pDM_VOID -); - -VOID -odm_AutoChannelSelect( - IN PVOID pDM_VOID, - IN u1Byte Channel -); - -u1Byte -ODM_GetAutoChannelSelectResult( - IN PVOID pDM_VOID, - IN u1Byte Band -); - -#if ( DM_ODM_SUPPORT_TYPE & ODM_AP ) - -VOID -phydm_AutoChannelSelectSettingAP( - IN PVOID pDM_VOID, - IN u4Byte Setting, // 0: STORE_DEFAULT_NHM_SETTING; 1: RESTORE_DEFAULT_NHM_SETTING, 2: ACS_NHM_SETTING - IN u4Byte acs_step -); - -VOID -phydm_GetNHMStatisticsAP( - IN PVOID pDM_VOID, - IN u4Byte idx, // @ 2G, Real channel number = idx+1 - IN u4Byte acs_step -); - -#endif //#if ( DM_ODM_SUPPORT_TYPE & ODM_AP ) - - -VOID -phydm_CLMInit( - IN PVOID pDM_VOID, - IN u2Byte sampleNum -); - -VOID -phydm_CLMtrigger( - IN PVOID pDM_VOID -); - -BOOLEAN -phydm_checkCLMready( - IN PVOID pDM_VOID -); - -u2Byte -phydm_getCLMresult( - IN PVOID pDM_VOID -); - - -#endif //#ifndef __PHYDMACS_H__ \ No newline at end of file diff --git a/network/wlan/WDI/HAL/phydm/phydm_adaptivity.h b/network/wlan/WDI/HAL/phydm/phydm_adaptivity.h deleted file mode 100644 index 99b63871..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_adaptivity.h +++ /dev/null @@ -1,196 +0,0 @@ - -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMADAPTIVITY_H__ -#define __PHYDMADAPTIVITY_H__ - -#define ADAPTIVITY_VERSION "9.0.1" /*Add new API for USB3.0 interference in 2.4G*/ - -#define PwdBUpperBound 7 -#define DFIRloss 5 - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN)) -typedef enum _tag_PhyDM_REGULATION_Type { - REGULATION_FCC = 0, - REGULATION_MKK = 1, - REGULATION_ETSI = 2, - REGULATION_WW = 3, - - MAX_REGULATION_NUM = 4 -} PhyDM_REGULATION_TYPE; -#endif - -typedef enum tag_PhyDM_set_LNA { - PhyDM_disable_LNA = 0, - PhyDM_enable_LNA = 1, -} PhyDM_set_LNA; - - -typedef enum tag_PhyDM_TRx_MUX_Type -{ - PhyDM_SHUTDOWN = 0, - PhyDM_STANDBY_MODE = 1, - PhyDM_TX_MODE = 2, - PhyDM_RX_MODE = 3 -}PhyDM_Trx_MUX_Type; - -typedef enum tag_PhyDM_MACEDCCA_Type -{ - PhyDM_IGNORE_EDCCA = 0, - PhyDM_DONT_IGNORE_EDCCA = 1 -}PhyDM_MACEDCCA_Type; - -typedef struct _ADAPTIVITY_STATISTICS { - s1Byte TH_L2H_ini_backup; - s1Byte TH_EDCCA_HL_diff_backup; - s1Byte IGI_Base; - u1Byte IGI_target; - u1Byte NHMWait; - s1Byte H2L_lb; - s1Byte L2H_lb; - BOOLEAN bFirstLink; - BOOLEAN bCheck; - BOOLEAN DynamicLinkAdaptivity; - u1Byte APNumTH; - u1Byte AdajustIGILevel; - s1Byte backupL2H; - s1Byte backupH2L; - BOOLEAN bStopEDCCA; -#if (DM_ODM_SUPPORT_TYPE & ODM_WIN) - RT_WORK_ITEM phydm_pauseEDCCAWorkItem; - RT_WORK_ITEM phydm_resumeEDCCAWorkItem; -#endif -} ADAPTIVITY_STATISTICS, *PADAPTIVITY_STATISTICS; - -VOID -phydm_pauseEDCCA( - IN PVOID pDM_VOID, - IN BOOLEAN bPasueEDCCA -); - -VOID -Phydm_CheckAdaptivity( - IN PVOID pDM_VOID - ); - -VOID -Phydm_CheckEnvironment( - IN PVOID pDM_VOID - ); - -VOID -Phydm_NHMCounterStatisticsInit( - IN PVOID pDM_VOID - ); - -VOID -Phydm_NHMCounterStatistics( - IN PVOID pDM_VOID - ); - -VOID -Phydm_NHMCounterStatisticsReset( - IN PVOID pDM_VOID -); - -VOID -Phydm_GetNHMCounterStatistics( - IN PVOID pDM_VOID -); - -VOID -Phydm_MACEDCCAState( - IN PVOID pDM_VOID, - IN PhyDM_MACEDCCA_Type State -); - -VOID -Phydm_SetEDCCAThreshold( - IN PVOID pDM_VOID, - IN s1Byte H2L, - IN s1Byte L2H -); - -VOID -Phydm_SetTRxMux( - IN PVOID pDM_VOID, - IN PhyDM_Trx_MUX_Type txMode, - IN PhyDM_Trx_MUX_Type rxMode -); - -BOOLEAN -Phydm_CalNHMcnt( - IN PVOID pDM_VOID -); - -VOID -Phydm_SearchPwdBLowerBound( - IN PVOID pDM_VOID -); - -VOID -Phydm_AdaptivityInit( - IN PVOID pDM_VOID - ); - -VOID -Phydm_Adaptivity( - IN PVOID pDM_VOID, - IN u1Byte IGI - ); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -Phydm_DisableEDCCA( - IN PVOID pDM_VOID -); - -VOID -Phydm_DynamicEDCCA( - IN PVOID pDM_VOID -); - -VOID -Phydm_AdaptivityBSOD( - IN PVOID pDM_VOID -); - -#endif - -VOID -phydm_pauseEDCCA_WorkItemCallback( -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - IN PADAPTER Adapter -#else - IN PVOID pDM_VOID -#endif - ); - -VOID -phydm_resumeEDCCA_WorkItemCallback( -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - IN PADAPTER Adapter -#else - IN PVOID pDM_VOID -#endif - ); - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_antdect.h b/network/wlan/WDI/HAL/phydm/phydm_antdect.h deleted file mode 100644 index f3ccfad3..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_antdect.h +++ /dev/null @@ -1,98 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMANTDECT_H__ -#define __PHYDMANTDECT_H__ - -#define ANTDECT_VERSION "2.0" //2014.11.04 - -#if(defined(CONFIG_ANT_DETECTION)) -//#if( DM_ODM_SUPPORT_TYPE & (ODM_WIN |ODM_CE)) -//ANT Test -#define ANTTESTALL 0x00 /*Ant A or B will be Testing*/ -#define ANTTESTA 0x01 /*Ant A will be Testing*/ -#define ANTTESTB 0x02 /*Ant B will be testing*/ - -#define MAX_ANTENNA_DETECTION_CNT 10 - - -typedef struct _ANT_DETECTED_INFO{ - BOOLEAN bAntDetected; - u4Byte dBForAntA; - u4Byte dBForAntB; - u4Byte dBForAntO; -}ANT_DETECTED_INFO, *PANT_DETECTED_INFO; - - -typedef enum tag_SW_Antenna_Switch_Definition -{ - Antenna_A = 1, - Antenna_B = 2, - Antenna_MAX = 3, -}DM_SWAS_E; - - - -//1 [1. Single Tone Method] =================================================== - - - -VOID -ODM_SingleDualAntennaDefaultSetting( - IN PVOID pDM_VOID - ); - -BOOLEAN -ODM_SingleDualAntennaDetection( - IN PVOID pDM_VOID, - IN u1Byte mode - ); - -//1 [2. Scan AP RSSI Method] ================================================== - -#define SwAntDivCheckBeforeLink ODM_SwAntDivCheckBeforeLink - -BOOLEAN -ODM_SwAntDivCheckBeforeLink( - IN PVOID pDM_VOID - ); - - - - -//1 [3. PSD Method] ========================================================== - - -VOID -ODM_SingleDualAntennaDetection_PSD( - IN PVOID pDM_VOID -); - -#endif - -VOID -odm_SwAntDetectInit( - IN PVOID pDM_VOID - ); - - -#endif - - diff --git a/network/wlan/WDI/HAL/phydm/phydm_antdiv.h b/network/wlan/WDI/HAL/phydm/phydm_antdiv.h deleted file mode 100644 index 95b1cee3..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_antdiv.h +++ /dev/null @@ -1,628 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMANTDIV_H__ -#define __PHYDMANTDIV_H__ - -/*#define ANTDIV_VERSION "2.0" //2014.11.04*/ -/*#define ANTDIV_VERSION "2.1" //2015.01.13 Dino*/ -/*#define ANTDIV_VERSION "2.2" 2015.01.16 Dino*/ -/*#define ANTDIV_VERSION "3.1" 2015.07.29 YuChen, remove 92c 92d 8723a*/ -/*#define ANTDIV_VERSION "3.2" 2015.08.11 Stanley, disable antenna diversity when BT is enable for 8723B*/ -#define ANTDIV_VERSION "3.3" /*2015.08.12 Stanley. 8723B does not need to check the antenna is control by BT, -because antenna diversity only works when BT is disable or radio off*/ - -//1 ============================================================ -//1 Definition -//1 ============================================================ - -#define ANTDIV_INIT 0xff -#define MAIN_ANT 1 //Ant A or Ant Main -#define AUX_ANT 2 //AntB or Ant Aux -#define MAX_ANT 3 // 3 for AP using - -#define ANT1_2G 0 // = ANT2_5G -#define ANT2_2G 1 // = ANT1_5G -/*smart antenna*/ -#define SUPPORT_RF_PATH_NUM 4 -#define SUPPORT_BEAM_PATTERN_NUM 4 - - -//Antenna Diversty Control Type -#define ODM_AUTO_ANT 0 -#define ODM_FIX_MAIN_ANT 1 -#define ODM_FIX_AUX_ANT 2 - -#define ODM_N_ANTDIV_SUPPORT (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8188F|ODM_RTL8723D) -#define ODM_AC_ANTDIV_SUPPORT (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812) -#define ODM_ANTDIV_SUPPORT (ODM_N_ANTDIV_SUPPORT|ODM_AC_ANTDIV_SUPPORT) -#define ODM_SMART_ANT_SUPPORT (ODM_RTL8188E|ODM_RTL8192E) -#define ODM_HL_SMART_ANT_TYPE1_SUPPORT (ODM_RTL8821) - -#define ODM_OLD_IC_ANTDIV_SUPPORT (ODM_RTL8723A|ODM_RTL8192C|ODM_RTL8192D) - -#define ODM_ANTDIV_2G_SUPPORT_IC (ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8881A|ODM_RTL8188F|ODM_RTL8723D) -#define ODM_ANTDIV_5G_SUPPORT_IC (ODM_RTL8821|ODM_RTL8881A|ODM_RTL8812) - -#define ODM_EVM_ENHANCE_ANTDIV_SUPPORT_IC (ODM_RTL8192E) - -#define ODM_ANTDIV_2G BIT0 -#define ODM_ANTDIV_5G BIT1 - -#define ANTDIV_ON 1 -#define ANTDIV_OFF 0 - -#define FAT_ON 1 -#define FAT_OFF 0 - -#define TX_BY_DESC 1 -#define REG 0 - -#define RSSI_METHOD 0 -#define EVM_METHOD 1 -#define CRC32_METHOD 2 - -#define INIT_ANTDIV_TIMMER 0 -#define CANCEL_ANTDIV_TIMMER 1 -#define RELEASE_ANTDIV_TIMMER 2 - -#define CRC32_FAIL 1 -#define CRC32_OK 0 - -#define Evm_RSSI_TH_High 25 -#define Evm_RSSI_TH_Low 20 - -#define NORMAL_STATE_MIAN 1 -#define NORMAL_STATE_AUX 2 -#define TRAINING_STATE 3 - -#define FORCE_RSSI_DIFF 10 - -#define CSI_ON 1 -#define CSI_OFF 0 - -#define DIVON_CSIOFF 1 -#define DIVOFF_CSION 2 - -#define BDC_DIV_TRAIN_STATE 0 -#define BDC_BFer_TRAIN_STATE 1 -#define BDC_DECISION_STATE 2 -#define BDC_BF_HOLD_STATE 3 -#define BDC_DIV_HOLD_STATE 4 - -#define BDC_MODE_1 1 -#define BDC_MODE_2 2 -#define BDC_MODE_3 3 -#define BDC_MODE_4 4 -#define BDC_MODE_NULL 0xff - -/*SW S0S1 antenna diversity*/ -#define SWAW_STEP_INIT 0xff -#define SWAW_STEP_PEAK 0 -#define SWAW_STEP_DETERMINE 1 - -#define HL_SMTANT_2WIRE_DATA_LEN 24 - -//1 ============================================================ -//1 structure -//1 ============================================================ - - -typedef struct _SW_Antenna_Switch_ -{ - u1Byte Double_chk_flag; - u1Byte try_flag; - s4Byte PreRSSI; - u1Byte CurAntenna; - u1Byte PreAntenna; - u1Byte RSSI_Trying; - u1Byte TestMode; - u1Byte bTriggerAntennaSwitch; - u1Byte SelectAntennaMap; - u1Byte RSSI_target; - u1Byte reset_idx; - u2Byte Single_Ant_Counter; - u2Byte Dual_Ant_Counter; - u2Byte Aux_FailDetec_Counter; - u2Byte Retry_Counter; - - // Before link Antenna Switch check - u1Byte SWAS_NoLink_State; - u4Byte SWAS_NoLink_BK_Reg860; - u4Byte SWAS_NoLink_BK_Reg92c; - u4Byte SWAS_NoLink_BK_Reg948; - BOOLEAN ANTA_ON; //To indicate Ant A is or not - BOOLEAN ANTB_ON; //To indicate Ant B is on or not - BOOLEAN Pre_Aux_FailDetec; - BOOLEAN RSSI_AntDect_bResult; - u1Byte Ant5G; - u1Byte Ant2G; - - s4Byte RSSI_sum_A; - s4Byte RSSI_sum_B; - s4Byte RSSI_cnt_A; - s4Byte RSSI_cnt_B; - - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u8Byte TXByteCnt_A; - u8Byte TXByteCnt_B; - u8Byte RXByteCnt_A; - u8Byte RXByteCnt_B; - u1Byte TrafficLoad; - u1Byte Train_time; - u1Byte Train_time_flag; - RT_TIMER SwAntennaSwitchTimer; -#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1) - RT_TIMER SwAntennaSwitchTimer_8723B; - u4Byte PktCnt_SWAntDivByCtrlFrame; - BOOLEAN bSWAntDivByCtrlFrame; -#endif - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #if USE_WORKITEM - RT_WORK_ITEM SwAntennaSwitchWorkitem; - #if (RTL8723B_SUPPORT == 1) || (RTL8821A_SUPPORT == 1) - RT_WORK_ITEM SwAntennaSwitchWorkitem_8723B; - #endif - #endif -#endif -/* CE Platform use -#ifdef CONFIG_SW_ANTENNA_DIVERSITY - _timer SwAntennaSwitchTimer; - u8Byte lastTxOkCnt; - u8Byte lastRxOkCnt; - u8Byte TXByteCnt_A; - u8Byte TXByteCnt_B; - u8Byte RXByteCnt_A; - u8Byte RXByteCnt_B; - u1Byte DoubleComfirm; - u1Byte TrafficLoad; - //SW Antenna Switch - - -#endif -*/ -#ifdef CONFIG_HW_ANTENNA_DIVERSITY - //Hybrid Antenna Diversity - u4Byte CCK_Ant1_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte CCK_Ant2_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte OFDM_Ant1_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte OFDM_Ant2_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte RSSI_Ant1_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte RSSI_Ant2_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte TxAnt[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte TargetSTA; - u1Byte antsel; - u1Byte RxIdleAnt; - -#endif - -}SWAT_T, *pSWAT_T; - - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP)) -#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) -typedef struct _BF_DIV_COEX_ -{ - BOOLEAN w_BFer_Client[ODM_ASSOCIATE_ENTRY_NUM]; - BOOLEAN w_BFee_Client[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MA_rx_TP[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MA_rx_TP_DIV[ODM_ASSOCIATE_ENTRY_NUM]; - - u1Byte BDCcoexType_wBfer; - u1Byte num_Txbfee_Client; - u1Byte num_Txbfer_Client; - u1Byte BDC_Try_counter; - u1Byte BDC_Hold_counter; - u1Byte BDC_Mode; - u1Byte BDC_active_Mode; - u1Byte BDC_state; - u1Byte BDC_RxIdleUpdate_counter; - u1Byte num_Client; - u1Byte pre_num_Client; - u1Byte num_BfTar; - u1Byte num_DivTar; - - BOOLEAN bAll_DivSta_Idle; - BOOLEAN bAll_BFSta_Idle; - BOOLEAN BDC_Try_flag; - BOOLEAN BF_pass; - BOOLEAN DIV_pass; -}BDC_T,*pBDC_T; -#endif -#endif - -#ifdef CONFIG_HL_SMART_ANTENNA_TYPE1 -typedef struct _SMART_ANTENNA_TRAINNING_ { - u4Byte latch_time; - BOOLEAN pkt_skip_statistic_en; - u4Byte fix_beam_pattern_en; - u4Byte fix_training_num_en; - u4Byte fix_beam_pattern_codeword; - u4Byte update_beam_codeword; - u4Byte ant_num; /*number of smart beam antenna*/ - u4Byte beam_patten_num_each_ant;/*number of beam can be switched in each antenna*/ - u4Byte data_codeword_bit_num; - u4Byte per_beam_training_pkt_num; - u4Byte pkt_counter; - u4Byte fast_training_beam_num; - u4Byte pre_fast_training_beam_num; - u4Byte pkt_rssi_sum[SUPPORT_RF_PATH_NUM][SUPPORT_BEAM_PATTERN_NUM]; - u4Byte pkt_rssi_cnt[SUPPORT_RF_PATH_NUM][SUPPORT_BEAM_PATTERN_NUM]; - u4Byte rx_idle_beam[SUPPORT_RF_PATH_NUM]; - u4Byte pre_codeword; - BOOLEAN force_update_beam_en; - - #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - RT_WORK_ITEM hl_smart_antenna_workitem; - RT_WORK_ITEM hl_smart_antenna_decision_workitem; - #endif - -} SAT_T, *pSAT_T; -#endif - -typedef struct _FAST_ANTENNA_TRAINNING_ -{ - u1Byte Bssid[6]; - u1Byte antsel_rx_keep_0; - u1Byte antsel_rx_keep_1; - u1Byte antsel_rx_keep_2; - u1Byte antsel_rx_keep_3; - u4Byte antSumRSSI[7]; - u4Byte antRSSIcnt[7]; - u4Byte antAveRSSI[7]; - u1Byte FAT_State; - u4Byte TrainIdx; - u1Byte antsel_a[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte antsel_b[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte antsel_c[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MainAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte AuxAnt_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MainAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte AuxAnt_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte RxIdleAnt; - u1Byte AntDiv_OnOff; - BOOLEAN bBecomeLinked; - u4Byte MinMaxRSSI; - u1Byte idx_AntDiv_counter_2G; - u1Byte idx_AntDiv_counter_5G; - u1Byte AntDiv_2G_5G; - u4Byte CCK_counter_main; - u4Byte CCK_counter_aux; - u4Byte OFDM_counter_main; - u4Byte OFDM_counter_aux; - - #ifdef ODM_EVM_ENHANCE_ANTDIV - u4Byte MainAntEVM_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte AuxAntEVM_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte MainAntEVM_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte AuxAntEVM_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - BOOLEAN EVM_method_enable; - u1Byte TargetAnt_EVM; - u1Byte TargetAnt_CRC32; - u1Byte TargetAnt_enhance; - u1Byte pre_TargetAnt_enhance; - u2Byte Main_MPDU_OK_cnt; - u2Byte Aux_MPDU_OK_cnt; - - u4Byte CRC32_Ok_Cnt; - u4Byte CRC32_Fail_Cnt; - u4Byte MainCRC32_Ok_Cnt; - u4Byte AuxCRC32_Ok_Cnt; - u4Byte MainCRC32_Fail_Cnt; - u4Byte AuxCRC32_Fail_Cnt; - #endif - #if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - u4Byte CCK_CtrlFrame_Cnt_main; - u4Byte CCK_CtrlFrame_Cnt_aux; - u4Byte OFDM_CtrlFrame_Cnt_main; - u4Byte OFDM_CtrlFrame_Cnt_aux; - u4Byte MainAnt_CtrlFrame_Sum; - u4Byte AuxAnt_CtrlFrame_Sum; - u4Byte MainAnt_CtrlFrame_Cnt; - u4Byte AuxAnt_CtrlFrame_Cnt; - #endif - BOOLEAN fix_ant_bfee; - BOOLEAN enable_ctrl_frame_antdiv; - BOOLEAN use_ctrl_frame_antdiv; - u1Byte hw_antsw_occur; -}FAT_T,*pFAT_T; - - -//1 ============================================================ -//1 enumeration -//1 ============================================================ - - - -typedef enum _FAT_STATE /*Fast antenna training*/ -{ - FAT_BEFORE_LINK_STATE = 0, - FAT_PREPARE_STATE = 1, - FAT_TRAINING_STATE = 2, - FAT_DECISION_STATE = 3 -}FAT_STATE_E, *PFAT_STATE_E; - -typedef enum _ANT_DIV_TYPE -{ - NO_ANTDIV = 0xFF, - CG_TRX_HW_ANTDIV = 0x01, - CGCS_RX_HW_ANTDIV = 0x02, - FIXED_HW_ANTDIV = 0x03, - CG_TRX_SMART_ANTDIV = 0x04, - CGCS_RX_SW_ANTDIV = 0x05, - S0S1_SW_ANTDIV = 0x06, /*8723B intrnal switch S0 S1*/ - HL_SW_SMART_ANT_TYPE1 = 0x10 /*Hong-Lin Smart antenna use for 8821AE which is a 2 Ant. entitys, and each Ant. is equipped with 4 antenna patterns*/ -}ANT_DIV_TYPE_E, *PANT_DIV_TYPE_E; - - -//1 ============================================================ -//1 function prototype -//1 ============================================================ - - -VOID -ODM_StopAntennaSwitchDm( - IN PVOID pDM_VOID - ); -VOID -ODM_SetAntConfig( - IN PVOID pDM_VOID, - IN u1Byte antSetting // 0=A, 1=B, 2=C, .... - ); - - -#define SwAntDivRestAfterLink ODM_SwAntDivRestAfterLink -VOID ODM_SwAntDivRestAfterLink( - IN PVOID pDM_VOID - ); - -#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) - -VOID -ODM_UpdateRxIdleAnt( - IN PVOID pDM_VOID, - IN u1Byte Ant -); - -#if (RTL8188F_SUPPORT == 1) -VOID -phydm_update_rx_idle_antenna_8188F( - IN PVOID pDM_VOID, - IN u4Byte default_ant -); -#endif - -#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1) -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -ODM_SW_AntDiv_Callback( - IN PRT_TIMER pTimer - ); - -VOID -ODM_SW_AntDiv_WorkitemCallback( - IN PVOID pContext - ); - - -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - -VOID -ODM_SW_AntDiv_WorkitemCallback( - IN PVOID pContext -); - -VOID -ODM_SW_AntDiv_Callback( - void *FunctionContext - ); - -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) -VOID -odm_S0S1_SwAntDivByCtrlFrame( - IN PVOID pDM_VOID, - IN u1Byte Step -); - -VOID -odm_AntselStatisticsOfCtrlFrame( - IN PVOID pDM_VOID, - IN u1Byte antsel_tr_mux, - IN u4Byte RxPWDBAll -); - -VOID -odm_S0S1_SwAntDivByCtrlFrame_ProcessRSSI( - IN PVOID pDM_VOID, - IN PVOID p_phy_info_void, - IN PVOID p_pkt_info_void -); - - -#endif -#endif - -#ifdef ODM_EVM_ENHANCE_ANTDIV -VOID -odm_EVM_FastAntTrainingCallback( - IN PVOID pDM_VOID -); -#endif - -VOID -odm_HW_AntDiv( - IN PVOID pDM_VOID -); - -#if( defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY) ) ||( defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY) ) -VOID -odm_FastAntTraining( - IN PVOID pDM_VOID -); - -VOID -odm_FastAntTrainingCallback( - IN PVOID pDM_VOID -); - -VOID -odm_FastAntTrainingWorkItemCallback( - IN PVOID pDM_VOID -); -#endif - - -#ifdef CONFIG_HL_SMART_ANTENNA_TYPE1 - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -phydm_beam_switch_workitem_callback( - IN PVOID pContext - ); - -VOID -phydm_beam_decision_workitem_callback( - IN PVOID pContext - ); - -#endif - -VOID -phydm_update_beam_pattern( - IN PVOID pDM_VOID, - IN u4Byte codeword, - IN u4Byte codeword_length - ); - -void -phydm_set_all_ant_same_beam_num( - IN PVOID pDM_VOID - ); - -VOID -phydm_hl_smart_ant_cmd( - IN PVOID pDM_VOID, - IN u4Byte *const dm_value, - IN u4Byte *_used, - OUT char *output, - IN u4Byte *_out_len -); - -#endif/*#ifdef CONFIG_HL_SMART_ANTENNA_TYPE1*/ - -VOID -ODM_AntDivInit( - IN PVOID pDM_VOID -); - -VOID -ODM_AntDiv( - IN PVOID pDM_VOID -); - -VOID -odm_AntselStatistics( - IN PVOID pDM_VOID, - IN u1Byte antsel_tr_mux, - IN u4Byte MacId, - IN u4Byte utility, - IN u1Byte method -); - -VOID -ODM_Process_RSSIForAntDiv( - IN OUT PVOID pDM_VOID, - IN PVOID p_phy_info_void, - IN PVOID p_pkt_info_void -); - - - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - -#define SwAntDivResetBeforeLink ODM_SwAntDivResetBeforeLink - -VOID -ODM_SwAntDivResetBeforeLink( - IN PDM_ODM_T pDM_Odm -); - -VOID -ODM_SetTxAntByTxInfo( - IN PVOID pDM_VOID, - IN pu1Byte pDesc, - IN u1Byte macId -); - -#elif(DM_ODM_SUPPORT_TYPE == ODM_AP) - -VOID -ODM_SetTxAntByTxInfo( - struct rtl8192cd_priv *priv, - struct tx_desc *pdesc, - unsigned short aid -); - -#endif - - -VOID -ODM_AntDiv_Config( - IN PVOID pDM_VOID -); - - -VOID -ODM_UpdateRxIdleAnt_8723B( - IN PVOID pDM_VOID, - IN u1Byte Ant, - IN u4Byte DefaultAnt, - IN u4Byte OptionalAnt -); - -VOID -ODM_AntDivTimers( - IN PVOID pDM_VOID, - IN u1Byte state -); - -#endif //#if (defined(CONFIG_HW_ANTENNA_DIVERSITY)) - -VOID -ODM_AntDivReset( - IN PVOID pDM_VOID -); - -VOID -odm_AntennaDiversityInit( - IN PVOID pDM_VOID -); - -VOID -odm_AntennaDiversity( - IN PVOID pDM_VOID -); - - -#endif //#ifndef __ODMANTDIV_H__ diff --git a/network/wlan/WDI/HAL/phydm/phydm_beamforming.h b/network/wlan/WDI/HAL/phydm/phydm_beamforming.h deleted file mode 100644 index ed472ce6..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_beamforming.h +++ /dev/null @@ -1,376 +0,0 @@ -#ifndef __INC_BEAMFORMING_H -#define __INC_BEAMFORMING_H - -#ifndef BEAMFORMING_SUPPORT -#define BEAMFORMING_SUPPORT 0 -#endif - -/*Beamforming Related*/ -#include "txbf/halcomtxbf.h" -#include "txbf/haltxbfjaguar.h" -#include "txbf/haltxbf8192e.h" -#include "txbf/haltxbf8814a.h" -#include "txbf/haltxbf8821b.h" -#include "txbf/haltxbf8822b.h" -#include "txbf/haltxbfinterface.h" - -#if (BEAMFORMING_SUPPORT == 1) - -#define MAX_BEAMFORMEE_SU 2 -#define MAX_BEAMFORMER_SU 2 -#if (RTL8822B_SUPPORT == 1) -#define MAX_BEAMFORMEE_MU 6 -#define MAX_BEAMFORMER_MU 1 -#else -#define MAX_BEAMFORMEE_MU 0 -#define MAX_BEAMFORMER_MU 0 -#endif - -#define BEAMFORMEE_ENTRY_NUM (MAX_BEAMFORMEE_SU + MAX_BEAMFORMEE_MU) -#define BEAMFORMER_ENTRY_NUM (MAX_BEAMFORMER_SU + MAX_BEAMFORMER_MU) - -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -/*for different naming between WIN and CE*/ -#define BEACON_QUEUE BCN_QUEUE_INX -#define NORMAL_QUEUE MGT_QUEUE_INX -#define eqMacAddr(a, b) ((a[0] == b[0] && a[1] == b[1] && a[2] == b[2] && a[3] == b[3] && a[4] == b[4] && a[5] == b[5]) ? 1:0) -#define cpMacAddr(des, src) (des[0] = src[0], des[1] = src[1], des[2] = src[2], des[3] = src[3], des[4] = src[4], des[5] = src[5]) -#define cpIpAddr(des, src) (des[0] = src[0], des[1] = src[1], des[2] = src[2], des[3] = src[3]) -#define RT_DISABLE_FUNC RTW_DISABLE_FUNC -#define RT_ENABLE_FUNC RTW_ENABLE_FUNC -#endif - -typedef enum _BEAMFORMING_ENTRY_STATE { - BEAMFORMING_ENTRY_STATE_UNINITIALIZE, - BEAMFORMING_ENTRY_STATE_INITIALIZEING, - BEAMFORMING_ENTRY_STATE_INITIALIZED, - BEAMFORMING_ENTRY_STATE_PROGRESSING, - BEAMFORMING_ENTRY_STATE_PROGRESSED -} BEAMFORMING_ENTRY_STATE, *PBEAMFORMING_ENTRY_STATE; - - -typedef enum _BEAMFORMING_NOTIFY_STATE { - BEAMFORMING_NOTIFY_NONE, - BEAMFORMING_NOTIFY_ADD, - BEAMFORMING_NOTIFY_DELETE, - BEAMFORMEE_NOTIFY_ADD_SU, - BEAMFORMEE_NOTIFY_DELETE_SU, - BEAMFORMEE_NOTIFY_ADD_MU, - BEAMFORMEE_NOTIFY_DELETE_MU, - BEAMFORMING_NOTIFY_RESET -} BEAMFORMING_NOTIFY_STATE, *PBEAMFORMING_NOTIFY_STATE; - -typedef enum _BEAMFORMING_CAP { - BEAMFORMING_CAP_NONE = 0x0, - BEAMFORMER_CAP_HT_EXPLICIT = BIT1, - BEAMFORMEE_CAP_HT_EXPLICIT = BIT2, - BEAMFORMER_CAP_VHT_SU = BIT5, /* Self has er Cap, because Reg er & peer ee */ - BEAMFORMEE_CAP_VHT_SU = BIT6, /* Self has ee Cap, because Reg ee & peer er */ - BEAMFORMER_CAP_VHT_MU = BIT7, /* Self has er Cap, because Reg er & peer ee */ - BEAMFORMEE_CAP_VHT_MU = BIT8, /* Self has ee Cap, because Reg ee & peer er */ - BEAMFORMER_CAP = BIT9, - BEAMFORMEE_CAP = BIT10, -}BEAMFORMING_CAP, *PBEAMFORMING_CAP; - - -typedef enum _SOUNDING_MODE { - SOUNDING_SW_VHT_TIMER = 0x0, - SOUNDING_SW_HT_TIMER = 0x1, - SOUNDING_STOP_All_TIMER = 0x2, - SOUNDING_HW_VHT_TIMER = 0x3, - SOUNDING_HW_HT_TIMER = 0x4, - SOUNDING_STOP_OID_TIMER = 0x5, - SOUNDING_AUTO_VHT_TIMER = 0x6, - SOUNDING_AUTO_HT_TIMER = 0x7, - SOUNDING_FW_VHT_TIMER = 0x8, - SOUNDING_FW_HT_TIMER = 0x9, -}SOUNDING_MODE, *PSOUNDING_MODE; - -typedef struct _RT_BEAMFORM_STAINFO { - pu1Byte RA; - u2Byte AID; - u2Byte MacID; - WIRELESS_MODE WirelessMode; - CHANNEL_WIDTH BW; - BEAMFORMING_CAP BeamformCap; - u1Byte HtBeamformCap; - u2Byte VhtBeamformCap; - u1Byte CurBeamform; - u2Byte CurBeamformVHT; -} RT_BEAMFORM_STAINFO, *PRT_BEAMFORM_STAINFO; - - -typedef struct _RT_BEAMFORMEE_ENTRY { - BOOLEAN bUsed; - BOOLEAN bTxBF; - BOOLEAN bSound; - u2Byte AID; /*Used to construct AID field of NDPA packet.*/ - u2Byte MacId; /*Used to Set Reg42C in IBSS mode. */ - u2Byte P_AID; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */ - u2Byte G_ID; /*Used to fill Tx DESC*/ - u1Byte MacAddr[6]; /*Used to fill Reg6E4 to fill Mac address of CSI report frame.*/ - CHANNEL_WIDTH SoundBW; /*Sounding BandWidth*/ - u2Byte SoundPeriod; - BEAMFORMING_CAP BeamformEntryCap; - BEAMFORMING_ENTRY_STATE BeamformEntryState; - BOOLEAN bBeamformingInProgress; - /*u1Byte LogSeq; // Move to _RT_BEAMFORMER_ENTRY*/ - /*u2Byte LogRetryCnt:3; // 0~4 // Move to _RT_BEAMFORMER_ENTRY*/ - /*u2Byte LogSuccessCnt:2; // 0~2 // Move to _RT_BEAMFORMER_ENTRY*/ - u2Byte LogStatusFailCnt:5; // 0~21 - u2Byte DefaultCSICnt:5; // 0~21 - u1Byte CSIMatrix[327]; - u2Byte CSIMatrixLen; - u1Byte NumofSoundingDim; - u1Byte CompSteeringNumofBFer; - u1Byte su_reg_index; - /*For MU-MIMO*/ - BOOLEAN is_mu_sta; - u1Byte mu_reg_index; - u1Byte gid_valid[8]; - u1Byte user_position[16]; -} RT_BEAMFORMEE_ENTRY, *PRT_BEAMFORMEE_ENTRY; - -typedef struct _RT_BEAMFORMER_ENTRY { - BOOLEAN bUsed; - /*P_AID of BFer entry is probably not used*/ - u2Byte P_AID; /*Used to fill Reg42C & Reg714 to compare with P_AID of Tx DESC. */ - u2Byte G_ID; - u1Byte MacAddr[6]; - BEAMFORMING_CAP BeamformEntryCap; - u1Byte NumofSoundingDim; - u1Byte ClockResetTimes; /*Modified by Jeffery @2015-04-10*/ - u1Byte PreLogSeq; /*Modified by Jeffery @2015-03-30*/ - u1Byte LogSeq; /*Modified by Jeffery @2014-10-29*/ - u2Byte LogRetryCnt:3; /*Modified by Jeffery @2014-10-29*/ - u2Byte LogSuccess:2; /*Modified by Jeffery @2014-10-29*/ - u1Byte su_reg_index; - /*For MU-MIMO*/ - BOOLEAN is_mu_ap; - u1Byte gid_valid[8]; - u1Byte user_position[16]; - u2Byte AID; -} RT_BEAMFORMER_ENTRY, *PRT_BEAMFORMER_ENTRY; - -typedef struct _RT_SOUNDING_INFO { - u1Byte SoundIdx; - CHANNEL_WIDTH SoundBW; - SOUNDING_MODE SoundMode; - u2Byte SoundPeriod; -} RT_SOUNDING_INFO, *PRT_SOUNDING_INFO; - - - -typedef struct _RT_BEAMFORMING_OID_INFO { - u1Byte SoundOidIdx; - CHANNEL_WIDTH SoundOidBW; - SOUNDING_MODE SoundOidMode; - u2Byte SoundOidPeriod; -} RT_BEAMFORMING_OID_INFO, *PRT_BEAMFORMING_OID_INFO; - - -typedef struct _RT_BEAMFORMING_INFO { - BEAMFORMING_CAP BeamformCap; - RT_BEAMFORMEE_ENTRY BeamformeeEntry[BEAMFORMEE_ENTRY_NUM]; - RT_BEAMFORMER_ENTRY BeamformerEntry[BEAMFORMER_ENTRY_NUM]; - RT_BEAMFORM_STAINFO BeamformSTAinfo; - u1Byte BeamformeeCurIdx; - RT_TIMER BeamformingTimer; - RT_TIMER mu_timer; - RT_SOUNDING_INFO SoundingInfo; - RT_BEAMFORMING_OID_INFO BeamformingOidInfo; - HAL_TXBF_INFO TxbfInfo; - u1Byte SoundingSequence; - u1Byte beamformee_su_cnt; - u1Byte beamformer_su_cnt; - u4Byte beamformee_su_reg_maping; - u4Byte beamformer_su_reg_maping; - /*For MU-MINO*/ - u1Byte beamformee_mu_cnt; - u1Byte beamformer_mu_cnt; - u4Byte beamformee_mu_reg_maping; - u1Byte mu_ap_index; - BOOLEAN is_mu_sounding; - u1Byte FirstMUBFeeIndex; -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - PADAPTER SourceAdapter; -#endif - /* Control register */ - u4Byte RegMUTxCtrl; /* For USB/SDIO interfaces aync I/O */ -} RT_BEAMFORMING_INFO, *PRT_BEAMFORMING_INFO; - - -typedef struct _RT_NDPA_STA_INFO { - u2Byte AID:12; - u2Byte FeedbackType:1; - u2Byte NcIndex:3; -} RT_NDPA_STA_INFO, *PRT_NDPA_STA_INFO; - -typedef enum _PHYDM_ACTING_TYPE { - PhyDM_ACTING_AS_IBSS = 0, - PhyDM_ACTING_AS_AP = 1 -} PHYDM_ACTING_TYPE; - - -BEAMFORMING_CAP -phydm_Beamforming_GetEntryBeamCapByMacId( - IN PVOID pDM_VOID, - IN u1Byte MacId - ); - -PRT_BEAMFORMEE_ENTRY -phydm_Beamforming_GetBFeeEntryByAddr( - IN PVOID pDM_VOID, - IN pu1Byte RA, - OUT pu1Byte Idx - ); - -PRT_BEAMFORMER_ENTRY -phydm_Beamforming_GetBFerEntryByAddr( - IN PVOID pDM_VOID, - IN pu1Byte TA, - OUT pu1Byte Idx - ); - -u1Byte -Beamforming_GetHTNDPTxRate( - IN PVOID pDM_VOID, - u1Byte CompSteeringNumofBFer -); - -u1Byte -Beamforming_GetVHTNDPTxRate( - IN PVOID pDM_VOID, - u1Byte CompSteeringNumofBFer -); - -VOID -phydm_Beamforming_Notify( - IN PVOID pDM_VOID - ); - -BOOLEAN -phydm_actingDetermine( - IN PDM_ODM_T pDM_Odm, - IN PHYDM_ACTING_TYPE type - ); - -VOID -Beamforming_Enter( - IN PVOID pDM_VOID, - IN u2Byte staIdx - ); - -VOID -Beamforming_Leave( - IN PVOID pDM_VOID, - pu1Byte RA - ); - -BOOLEAN -BeamformingStart_FW( - IN PVOID pDM_VOID, - u1Byte Idx - ); - -VOID -Beamforming_CheckSoundingSuccess( - IN PVOID pDM_VOID, - BOOLEAN Status -); - -VOID -phydm_Beamforming_End_SW( - IN PVOID pDM_VOID, - BOOLEAN Status - ); - -VOID -Beamforming_TimerCallback( - IN PVOID pDM_VOID - ); - -VOID -phydm_Beamforming_Init( - IN PVOID pDM_VOID - ); - - - -BEAMFORMING_CAP -phydm_Beamforming_GetBeamCap( - IN PVOID pDM_VOID, - IN PRT_BEAMFORMING_INFO pBeamInfo - ); - - -BOOLEAN -BeamformingControl_V1( - IN PVOID pDM_VOID, - pu1Byte RA, - u1Byte AID, - u1Byte Mode, - CHANNEL_WIDTH BW, - u1Byte Rate - ); - - -BOOLEAN -phydm_BeamformingControl_V2( - IN PVOID pDM_VOID, - u1Byte Idx, - u1Byte Mode, - CHANNEL_WIDTH BW, - u2Byte Period - ); - -VOID -phydm_Beamforming_Watchdog( - IN PVOID pDM_VOID - ); - -VOID -Beamforming_SWTimerCallback( -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - PRT_TIMER pTimer -#elif(DM_ODM_SUPPORT_TYPE == ODM_CE) - void *FunctionContext -#endif - ); - -BOOLEAN -Beamforming_SendHTNDPAPacket( - IN PVOID pDM_VOID, - IN pu1Byte RA, - IN CHANNEL_WIDTH BW, - IN u1Byte QIdx - ); - - -BOOLEAN -Beamforming_SendVHTNDPAPacket( - IN PVOID pDM_VOID, - IN pu1Byte RA, - IN u2Byte AID, - IN CHANNEL_WIDTH BW, - IN u1Byte QIdx - ); - -#else -#define Beamforming_GidPAid(Adapter, pTcb) -#define phydm_actingDetermine(pDM_Odm, type) FALSE -#define Beamforming_Enter(pDM_Odm, staIdx) -#define Beamforming_Leave(pDM_Odm, RA) -#define Beamforming_End_FW(pDMOdm) -#define BeamformingControl_V1(pDM_Odm, RA, AID, Mode, BW, Rate) TRUE -#define BeamformingControl_V2(pDM_Odm, Idx, Mode, BW, Period) TRUE -#define phydm_Beamforming_End_SW(pDM_Odm, _Status) -#define Beamforming_TimerCallback(pDM_Odm) -#define phydm_Beamforming_Init(pDM_Odm) -#define phydm_BeamformingControl_V2(pDM_Odm, _Idx, _Mode, _BW, _Period) FALSE -#define Beamforming_Watchdog(pDM_Odm) -#define phydm_Beamforming_Watchdog(pDM_Odm) - - -#endif -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_cfotracking.h b/network/wlan/WDI/HAL/phydm/phydm_cfotracking.h deleted file mode 100644 index 7eca3f6e..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_cfotracking.h +++ /dev/null @@ -1,68 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMCFOTRACK_H__ -#define __PHYDMCFOTRACK_H__ - -#define CFO_TRACKING_VERSION "1.2" /*2015.06.17*/ - -#define CFO_TH_XTAL_HIGH 20 // kHz -#define CFO_TH_XTAL_LOW 10 // kHz -#define CFO_TH_ATC 80 // kHz - -typedef struct _CFO_TRACKING_ -{ - BOOLEAN bATCStatus; - BOOLEAN largeCFOHit; - BOOLEAN bAdjust; - u1Byte CrystalCap; - u1Byte DefXCap; - int CFO_tail[2]; - int CFO_ave_pre; - u4Byte packetCount; - u4Byte packetCount_pre; - - BOOLEAN bForceXtalCap; - BOOLEAN bReset; -}CFO_TRACKING, *PCFO_TRACKING; - -VOID -ODM_CfoTrackingReset( - IN PVOID pDM_VOID -); - -VOID -ODM_CfoTrackingInit( - IN PVOID pDM_VOID -); - -VOID -ODM_CfoTracking( - IN PVOID pDM_VOID -); - -VOID -ODM_ParsingCFO( - IN PVOID pDM_VOID, - IN PVOID pPktinfo_VOID, - IN s1Byte* pcfotail -); - -#endif \ No newline at end of file diff --git a/network/wlan/WDI/HAL/phydm/phydm_debug.h b/network/wlan/WDI/HAL/phydm/phydm_debug.h deleted file mode 100644 index 5996cc7b..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_debug.h +++ /dev/null @@ -1,331 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __ODM_DBG_H__ -#define __ODM_DBG_H__ - -#define DEBUG_VERSION "1.0" /*2015.01.13 Dino*/ -//----------------------------------------------------------------------------- -// Define the debug levels -// -// 1. DBG_TRACE and DBG_LOUD are used for normal cases. -// So that, they can help SW engineer to develope or trace states changed -// and also help HW enginner to trace every operation to and from HW, -// e.g IO, Tx, Rx. -// -// 2. DBG_WARNNING and DBG_SERIOUS are used for unusual or error cases, -// which help us to debug SW or HW. -// -//----------------------------------------------------------------------------- -// -// Never used in a call to ODM_RT_TRACE()! -// -#define ODM_DBG_OFF 1 - -// -// Fatal bug. -// For example, Tx/Rx/IO locked up, OS hangs, memory access violation, -// resource allocation failed, unexpected HW behavior, HW BUG and so on. -// -#define ODM_DBG_SERIOUS 2 - -// -// Abnormal, rare, or unexpeted cases. -// For example, IRP/Packet/OID canceled, device suprisely unremoved and so on. -// -#define ODM_DBG_WARNING 3 - -// -// Normal case with useful information about current SW or HW state. -// For example, Tx/Rx descriptor to fill, Tx/Rx descriptor completed status, -// SW protocol state change, dynamic mechanism state change and so on. -// -#define ODM_DBG_LOUD 4 - -// -// Normal case with detail execution flow or information. -// -#define ODM_DBG_TRACE 5 - -/*FW DBG MSG*/ -#define RATE_DECISION BIT0 -#define INIT_RA_TABLE BIT1 -#define RATE_UP BIT2 -#define RATE_DOWN BIT3 -#define TRY_DONE BIT4 -#define F_RATE_AP_RPT BIT7 - -#define ODM_TMP_BUF_SIZE 100 -//----------------------------------------------------------------------------- -// Define the tracing components -// -//----------------------------------------------------------------------------- -//BB Functions -#define ODM_COMP_DIG BIT0 -#define ODM_COMP_RA_MASK BIT1 -#define ODM_COMP_DYNAMIC_TXPWR BIT2 -#define ODM_COMP_FA_CNT BIT3 -#define ODM_COMP_RSSI_MONITOR BIT4 -#define ODM_COMP_CCK_PD BIT5 -#define ODM_COMP_ANT_DIV BIT6 -#define ODM_COMP_PWR_SAVE BIT7 -#define ODM_COMP_PWR_TRAIN BIT8 -#define ODM_COMP_RATE_ADAPTIVE BIT9 -#define ODM_COMP_PATH_DIV BIT10 -#define ODM_COMP_PSD BIT11 -#define ODM_COMP_DYNAMIC_PRICCA BIT12 -#define ODM_COMP_RXHP BIT13 -#define ODM_COMP_MP BIT14 -#define ODM_COMP_CFO_TRACKING BIT15 -#define ODM_COMP_ACS BIT16 -#define PHYDM_COMP_ADAPTIVITY BIT17 -#define PHYDM_COMP_RA_DBG BIT18 -#define PHYDM_COMP_TXBF BIT19 -//MAC Functions -#define ODM_COMP_EDCA_TURBO BIT20 -#define ODM_COMP_EARLY_MODE BIT21 -#define ODM_FW_DEBUG_TRACE BIT22 -//RF Functions -#define ODM_COMP_TX_PWR_TRACK BIT24 -#define ODM_COMP_RX_GAIN_TRACK BIT25 -#define ODM_COMP_CALIBRATION BIT26 -//Common Functions -#define ODM_PHY_CONFIG BIT28 -#define BEAMFORMING_DEBUG BIT29 -#define ODM_COMP_COMMON BIT30 -#define ODM_COMP_INIT BIT31 -#define ODM_COMP_NOISY_DETECT BIT32 - -/*------------------------Export Marco Definition---------------------------*/ -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #define RT_PRINTK DbgPrint -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - #define DbgPrint printk - #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args); - #define RT_DISP(dbgtype, dbgflag, printstr) -#else - #define DbgPrint panic_printk - #define RT_PRINTK(fmt, args...) DbgPrint( "%s(): " fmt, __FUNCTION__, ## args); -#endif - -#ifndef ASSERT - #define ASSERT(expr) -#endif - -#if DBG -#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) \ - if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel || level == ODM_DBG_SERIOUS)) \ - { \ - if(pDM_Odm->SupportICType == ODM_RTL8192C) \ - DbgPrint("[ODM-92C] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8192D) \ - DbgPrint("[ODM-92D] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8723A) \ - DbgPrint("[ODM-8723A] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8188E) \ - DbgPrint("[ODM-8188E] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8192E) \ - DbgPrint("[ODM-8192E] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8812) \ - DbgPrint("[ODM-8812] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8821) \ - DbgPrint("[ODM-8821] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8814A) \ - DbgPrint("[ODM-8814] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8703B) \ - DbgPrint("[ODM-8703B] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8822B) \ - DbgPrint("[ODM-8822] "); \ - else if (pDM_Odm->SupportICType == ODM_RTL8188F) \ - DbgPrint("[ODM-8188F] "); \ - else if(pDM_Odm->SupportICType == ODM_RTL8723D) \ - DbgPrint("[ODM-8723D] "); \ - RT_PRINTK fmt; \ - } - -#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) \ - if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \ - { \ - RT_PRINTK fmt; \ - } - -#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) \ - if(!(expr)) { \ - DbgPrint( "Assertion failed! %s at ......\n", #expr); \ - DbgPrint( " ......%s,%s,line=%d\n",__FILE__,__FUNCTION__,__LINE__); \ - RT_PRINTK fmt; \ - ASSERT(FALSE); \ - } -#define ODM_dbg_enter() { DbgPrint("==> %s\n", __FUNCTION__); } -#define ODM_dbg_exit() { DbgPrint("<== %s\n", __FUNCTION__); } -#define ODM_dbg_trace(str) { DbgPrint("%s:%s\n", __FUNCTION__, str); } - -#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) \ - if(((comp) & pDM_Odm->DebugComponents) && (level <= pDM_Odm->DebugLevel)) \ - { \ - int __i; \ - pu1Byte __ptr = (pu1Byte)ptr; \ - DbgPrint("[ODM] "); \ - DbgPrint(title_str); \ - DbgPrint(" "); \ - for( __i=0; __i<6; __i++ ) \ - DbgPrint("%02X%s", __ptr[__i], (__i==5)?"":"-"); \ - DbgPrint("\n"); \ - } -#else -#define ODM_RT_TRACE(pDM_Odm, comp, level, fmt) -#define ODM_RT_TRACE_F(pDM_Odm, comp, level, fmt) -#define ODM_RT_ASSERT(pDM_Odm, expr, fmt) -#define ODM_dbg_enter() -#define ODM_dbg_exit() -#define ODM_dbg_trace(str) -#define ODM_PRINT_ADDR(pDM_Odm, comp, level, title_str, ptr) -#endif - - -VOID -PHYDM_InitDebugSetting(IN PDM_ODM_T pDM_Odm); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID phydm_BB_RxHang_Info(IN PDM_ODM_T pDM_Odm); -#endif - -#define BB_TMP_BUF_SIZE 100 -VOID phydm_BB_Debug_Info(IN PDM_ODM_T pDM_Odm); -VOID phydm_BasicDbgMessage( IN PVOID pDM_VOID); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#define PHYDM_DBGPRINT 0 -#define PHYDM_SSCANF(x, y, z) DCMD_Scanf(x, y, z) -#if (PHYDM_DBGPRINT == 1) -#define PHYDM_SNPRINTF(msg) \ - do {\ - rsprintf msg;\ - DbgPrint(output);\ - } while (0) -#else -#define PHYDM_SNPRINTF(msg) \ - do {\ - rsprintf msg;\ - DCMD_Printf(output);\ - } while (0) -#endif -#else -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -#define PHYDM_DBGPRINT 0 -#else -#define PHYDM_DBGPRINT 1 -#endif -#define MAX_ARGC 20 -#define MAX_ARGV 16 -#define DCMD_DECIMAL "%d" -#define DCMD_CHAR "%c" -#define DCMD_HEX "%x" - -#define PHYDM_SSCANF(x, y, z) sscanf(x, y, z) -#if (PHYDM_DBGPRINT == 1) -#define PHYDM_SNPRINTF(msg)\ - do {\ - snprintf msg;\ - DbgPrint(output);\ - } while (0) -#else -#define PHYDM_SNPRINTF(msg)\ - do {\ - if(out_len > used)\ - used+=snprintf msg;\ - } while (0) -#endif -#endif - - -VOID phydm_BasicProfile( - IN PVOID pDM_VOID, - IN u4Byte *_used, - OUT char *output, - IN u4Byte *_out_len - ); -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE|ODM_AP)) -s4Byte -phydm_cmd( - IN PDM_ODM_T pDM_Odm, - IN char *input, - IN u4Byte in_len, - IN u1Byte flag, - OUT char *output, - IN u4Byte out_len -); -#endif -VOID -phydm_cmd_parser( - IN PDM_ODM_T pDM_Odm, - IN char input[][16], - IN u4Byte input_num, - IN u1Byte flag, - OUT char *output, - IN u4Byte out_len -); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -void phydm_sbd_check( - IN PDM_ODM_T pDM_Odm - ); - -void phydm_sbd_callback( - PRT_TIMER pTimer - ); - -void phydm_sbd_workitem_callback( - IN PVOID pContext - ); -#endif - -VOID -phydm_fw_trace_en_h2c( - IN PVOID pDM_VOID, - IN BOOLEAN enable, - IN u4Byte monitor_mode, - IN u4Byte macid -); - -VOID -phydm_fw_trace_handler( - IN PVOID pDM_VOID, - IN pu1Byte CmdBuf, - IN u1Byte CmdLen -); - -VOID -phydm_fw_trace_handler_code( - IN PVOID pDM_VOID, - IN pu1Byte Buffer, - IN u1Byte CmdLen -); - -VOID -phydm_fw_trace_handler_8051( - IN PVOID pDM_VOID, - IN pu1Byte CmdBuf, - IN u1Byte CmdLen -); - -#endif // __ODM_DBG_H__ - diff --git a/network/wlan/WDI/HAL/phydm/phydm_dig.h b/network/wlan/WDI/HAL/phydm/phydm_dig.h deleted file mode 100644 index 801369ae..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_dig.h +++ /dev/null @@ -1,329 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMDIG_H__ -#define __PHYDMDIG_H__ - -#define DIG_VERSION "1.7" /*2015.06.22, Changed by YuChen for adaptivity*/ - -/* Pause DIG & CCKPD */ -#define DM_DIG_MAX_PAUSE_TYPE 0x7 - -typedef struct _Dynamic_Initial_Gain_Threshold_ -{ - BOOLEAN bStopDIG; // for debug - BOOLEAN bIgnoreDIG; - BOOLEAN bPSDInProgress; - - u1Byte Dig_Enable_Flag; - u1Byte Dig_Ext_Port_Stage; - - int RssiLowThresh; - int RssiHighThresh; - - u4Byte FALowThresh; - u4Byte FAHighThresh; - - u1Byte CurSTAConnectState; - u1Byte PreSTAConnectState; - u1Byte CurMultiSTAConnectState; - - u1Byte PreIGValue; - u1Byte CurIGValue; - u1Byte BackupIGValue; //MP DIG - u1Byte BT30_CurIGI; - u1Byte IGIBackup; - - s1Byte BackoffVal; - s1Byte BackoffVal_range_max; - s1Byte BackoffVal_range_min; - u1Byte rx_gain_range_max; - u1Byte rx_gain_range_min; - u1Byte Rssi_val_min; - - u1Byte PreCCK_CCAThres; - u1Byte CurCCK_CCAThres; - u1Byte PreCCKPDState; - u1Byte CurCCKPDState; - u1Byte CCKPDBackup; - u1Byte pause_cckpd_level; - u1Byte pause_cckpd_value[DM_DIG_MAX_PAUSE_TYPE + 1]; - - u1Byte LargeFAHit; - u1Byte ForbiddenIGI; - u4Byte Recover_cnt; - - u1Byte DIG_Dynamic_MIN_0; - u1Byte DIG_Dynamic_MIN_1; - BOOLEAN bMediaConnect_0; - BOOLEAN bMediaConnect_1; - - u4Byte AntDiv_RSSI_max; - u4Byte RSSI_max; - - u1Byte *bP2PInProcess; - - u1Byte pause_dig_level; - u1Byte pause_dig_value[DM_DIG_MAX_PAUSE_TYPE + 1]; - -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - BOOLEAN bTpTarget; - BOOLEAN bNoiseEst; - u4Byte TpTrainTH_min; - u1Byte IGIOffset_A; - u1Byte IGIOffset_B; -#endif - - u4Byte cckFaMa; -}DIG_T,*pDIG_T; - -typedef struct _FALSE_ALARM_STATISTICS{ - u4Byte Cnt_Parity_Fail; - u4Byte Cnt_Rate_Illegal; - u4Byte Cnt_Crc8_fail; - u4Byte Cnt_Mcs_fail; - u4Byte Cnt_Ofdm_fail; - u4Byte Cnt_Ofdm_fail_pre; //For RTL8881A - u4Byte Cnt_Cck_fail; - u4Byte Cnt_all; - u4Byte Cnt_Fast_Fsync; - u4Byte Cnt_SB_Search_fail; - u4Byte Cnt_OFDM_CCA; - u4Byte Cnt_CCK_CCA; - u4Byte Cnt_CCA_all; - u4Byte Cnt_BW_USC; //Gary - u4Byte Cnt_BW_LSC; //Gary -}FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS; - -typedef enum tag_Dynamic_Init_Gain_Operation_Type_Definition -{ - DIG_TYPE_THRESH_HIGH = 0, - DIG_TYPE_THRESH_LOW = 1, - DIG_TYPE_BACKOFF = 2, - DIG_TYPE_RX_GAIN_MIN = 3, - DIG_TYPE_RX_GAIN_MAX = 4, - DIG_TYPE_ENABLE = 5, - DIG_TYPE_DISABLE = 6, - DIG_OP_TYPE_MAX -}DM_DIG_OP_E; - -/* -typedef enum tag_CCK_Packet_Detection_Threshold_Type_Definition -{ - CCK_PD_STAGE_LowRssi = 0, - CCK_PD_STAGE_HighRssi = 1, - CCK_PD_STAGE_MAX = 3, -}DM_CCK_PDTH_E; - -typedef enum tag_DIG_EXT_PORT_ALGO_Definition -{ - DIG_EXT_PORT_STAGE_0 = 0, - DIG_EXT_PORT_STAGE_1 = 1, - DIG_EXT_PORT_STAGE_2 = 2, - DIG_EXT_PORT_STAGE_3 = 3, - DIG_EXT_PORT_STAGE_MAX = 4, -}DM_DIG_EXT_PORT_ALG_E; - -typedef enum tag_DIG_Connect_Definition -{ - DIG_STA_DISCONNECT = 0, - DIG_STA_CONNECT = 1, - DIG_STA_BEFORE_CONNECT = 2, - DIG_MultiSTA_DISCONNECT = 3, - DIG_MultiSTA_CONNECT = 4, - DIG_CONNECT_MAX -}DM_DIG_CONNECT_E; - - -#define DM_MultiSTA_InitGainChangeNotify(Event) {DM_DigTable.CurMultiSTAConnectState = Event;} - -#define DM_MultiSTA_InitGainChangeNotify_CONNECT(_ADAPTER) \ - DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_CONNECT) - -#define DM_MultiSTA_InitGainChangeNotify_DISCONNECT(_ADAPTER) \ - DM_MultiSTA_InitGainChangeNotify(DIG_MultiSTA_DISCONNECT) -*/ - -typedef enum tag_PHYDM_Pause_Type { - PHYDM_PAUSE = BIT0, - PHYDM_RESUME = BIT1 -} PHYDM_PAUSE_TYPE; - -typedef enum tag_PHYDM_Pause_Level { -/* number of pause level can't exceed DM_DIG_MAX_PAUSE_TYPE */ - PHYDM_PAUSE_LEVEL_0 = 0, - PHYDM_PAUSE_LEVEL_1 = 1, - PHYDM_PAUSE_LEVEL_2 = 2, - PHYDM_PAUSE_LEVEL_3 = 3, - PHYDM_PAUSE_LEVEL_4 = 4, - PHYDM_PAUSE_LEVEL_5 = 5, - PHYDM_PAUSE_LEVEL_6 = 6, - PHYDM_PAUSE_LEVEL_7 = DM_DIG_MAX_PAUSE_TYPE /* maximum level */ -} PHYDM_PAUSE_LEVEL; - - -#define DM_DIG_THRESH_HIGH 40 -#define DM_DIG_THRESH_LOW 35 - -#define DM_FALSEALARM_THRESH_LOW 400 -#define DM_FALSEALARM_THRESH_HIGH 1000 - -#define DM_DIG_MAX_NIC 0x3e -#define DM_DIG_MIN_NIC 0x1e //0x22//0x1c -#define DM_DIG_MAX_OF_MIN_NIC 0x3e - -#define DM_DIG_MAX_AP 0x3e -#define DM_DIG_MIN_AP 0x1c -#define DM_DIG_MAX_OF_MIN 0x2A //0x32 -#define DM_DIG_MIN_AP_DFS 0x20 - -#define DM_DIG_MAX_NIC_HP 0x46 -#define DM_DIG_MIN_NIC_HP 0x2e - -#define DM_DIG_MAX_AP_HP 0x42 -#define DM_DIG_MIN_AP_HP 0x30 - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -#define DM_DIG_MAX_AP_COVERAGR 0x26 -#define DM_DIG_MIN_AP_COVERAGE 0x1c -#define DM_DIG_MAX_OF_MIN_COVERAGE 0x22 - -#define DM_DIG_TP_Target_TH0 500 -#define DM_DIG_TP_Target_TH1 1000 -#define DM_DIG_TP_Training_Period 10 -#endif - -//vivi 92c&92d has different definition, 20110504 -//this is for 92c -#if (DM_ODM_SUPPORT_TYPE & ODM_CE) - #ifdef CONFIG_SPECIAL_SETTING_FOR_FUNAI_TV - #define DM_DIG_FA_TH0 0x80//0x20 - #else - #define DM_DIG_FA_TH0 0x200//0x20 - #endif -#else - #define DM_DIG_FA_TH0 0x100//0x20 -#endif - -#define DM_DIG_FA_TH1 0x200 -#define DM_DIG_FA_TH2 0x300 -//this is for 92d -#define DM_DIG_FA_TH0_92D 0x100 -#define DM_DIG_FA_TH1_92D 0x400 -#define DM_DIG_FA_TH2_92D 0x600 - -#define DM_DIG_BACKOFF_MAX 12 -#define DM_DIG_BACKOFF_MIN -4 -#define DM_DIG_BACKOFF_DEFAULT 10 - -#define DM_DIG_FA_TH0_LPS 4 //-> 4 in lps -#define DM_DIG_FA_TH1_LPS 15 //-> 15 lps -#define DM_DIG_FA_TH2_LPS 30 //-> 30 lps -#define RSSI_OFFSET_DIG 0x05 - -VOID -ODM_ChangeDynamicInitGainThresh( - IN PVOID pDM_VOID, - IN u4Byte DM_Type, - IN u4Byte DM_Value - ); - -VOID -ODM_Write_DIG( - IN PVOID pDM_VOID, - IN u1Byte CurrentIGI - ); - -VOID -odm_PauseDIG( - IN PVOID pDM_VOID, - IN PHYDM_PAUSE_TYPE PauseType, - IN PHYDM_PAUSE_LEVEL pause_level, - IN u1Byte IGIValue - ); - -VOID -odm_DIGInit( - IN PVOID pDM_VOID - ); - -VOID -odm_DIG( - IN PVOID pDM_VOID - ); - -VOID -odm_DIGbyRSSI_LPS( - IN PVOID pDM_VOID - ); - -VOID -odm_FalseAlarmCounterStatistics( - IN PVOID pDM_VOID - ); - -VOID -odm_PauseCCKPacketDetection( - IN PVOID pDM_VOID, - IN PHYDM_PAUSE_TYPE PauseType, - IN PHYDM_PAUSE_LEVEL pause_level, - IN u1Byte CCKPDThreshold - ); - -VOID -odm_CCKPacketDetectionThresh( - IN PVOID pDM_VOID - ); - -VOID -ODM_Write_CCK_CCA_Thres( - IN PVOID pDM_VOID, - IN u1Byte CurCCK_CCAThres - ); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -VOID -odm_MPT_DIGCallback( - PRT_TIMER pTimer -); - -VOID -odm_MPT_DIGWorkItemCallback( - IN PVOID pContext - ); - -#endif - -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) -VOID -odm_MPT_DIGCallback( - IN PVOID pDM_VOID -); -#endif - -#if (DM_ODM_SUPPORT_TYPE != ODM_CE) -VOID -ODM_MPT_DIG( - IN PVOID pDM_VOID -); -#endif - - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_dynamicbbpowersaving.h b/network/wlan/WDI/HAL/phydm/phydm_dynamicbbpowersaving.h deleted file mode 100644 index 365c1718..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_dynamicbbpowersaving.h +++ /dev/null @@ -1,63 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMDYNAMICBBPOWERSAVING_H__ -#define __PHYDMDYNAMICBBPOWERSAVING_H__ - -#define DYNAMIC_BBPWRSAV_VERSION "1.0" - -typedef struct _Dynamic_Power_Saving_ -{ - u1Byte PreCCAState; - u1Byte CurCCAState; - - u1Byte PreRFState; - u1Byte CurRFState; - - int Rssi_val_min; - - u1Byte initialize; - u4Byte Reg874,RegC70,Reg85C,RegA74; - -}PS_T,*pPS_T; - -#define dm_RF_Saving ODM_RF_Saving - -void ODM_RF_Saving( - IN PVOID pDM_VOID, - IN u1Byte bForceInNormal -); - -VOID -odm_DynamicBBPowerSavingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicBBPowerSaving( - IN PVOID pDM_VOID - ); - -VOID -odm_1R_CCA( - IN PVOID pDM_VOID - ); - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_dynamictxpower.h b/network/wlan/WDI/HAL/phydm/phydm_dynamictxpower.h deleted file mode 100644 index db61bf85..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_dynamictxpower.h +++ /dev/null @@ -1,98 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMDYNAMICTXPOWER_H__ -#define __PHYDMDYNAMICTXPOWER_H__ - -/*#define DYNAMIC_TXPWR_VERSION "1.0"*/ -#define DYNAMIC_TXPWR_VERSION "1.1" /*2015.01.13*/ - -#define TX_POWER_NEAR_FIELD_THRESH_LVL2 74 -#define TX_POWER_NEAR_FIELD_THRESH_LVL1 67 -#define TX_POWER_NEAR_FIELD_THRESH_AP 0x3F -#define TX_POWER_NEAR_FIELD_THRESH_8812 60 - -#define TxHighPwrLevel_Normal 0 -#define TxHighPwrLevel_Level1 1 -#define TxHighPwrLevel_Level2 2 -#define TxHighPwrLevel_BT1 3 -#define TxHighPwrLevel_BT2 4 -#define TxHighPwrLevel_15 5 -#define TxHighPwrLevel_35 6 -#define TxHighPwrLevel_50 7 -#define TxHighPwrLevel_70 8 -#define TxHighPwrLevel_100 9 - -VOID -odm_DynamicTxPowerInit( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerRestorePowerIndex( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerNIC( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) -VOID -odm_DynamicTxPowerSavePowerIndex( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerWritePowerIndex( - IN PVOID pDM_VOID, - IN u1Byte Value); - -VOID -odm_DynamicTxPower_92C( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPower_92D( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPower_8821( - IN PVOID pDM_VOID, - IN pu1Byte pDesc, - IN u1Byte macId - ); - -#endif - -VOID -odm_DynamicTxPower( - IN PVOID pDM_VOID - ); - -VOID -odm_DynamicTxPowerAP( - IN PVOID pDM_VOID - ); - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_edcaturbocheck.h b/network/wlan/WDI/HAL/phydm/phydm_edcaturbocheck.h deleted file mode 100644 index d4cd8d84..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_edcaturbocheck.h +++ /dev/null @@ -1,100 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMEDCATURBOCHECK_H__ -#define __PHYDMEDCATURBOCHECK_H__ - -/*#define EDCATURBO_VERSION "2.1"*/ -#define EDCATURBO_VERSION "2.2" /*2015.01.13*/ - -typedef struct _EDCA_TURBO_ -{ - BOOLEAN bCurrentTurboEDCA; - BOOLEAN bIsCurRDLState; - - #if(DM_ODM_SUPPORT_TYPE == ODM_CE ) - u4Byte prv_traffic_idx; // edca turbo - #endif - -}EDCA_T,*pEDCA_T; - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) -static u4Byte edca_setting_UL[HT_IOT_PEER_MAX] = -// UNKNOWN REALTEK_90 REALTEK_92SE BROADCOM RALINK ATHEROS CISCO MERU MARVELL 92U_AP SELF_AP(DownLink/Tx) -{ 0x5e4322, 0xa44f, 0x5e4322, 0x5ea32b, 0x5ea422, 0x5ea322, 0x3ea430, 0x5ea42b, 0x5ea44f, 0x5e4322, 0x5e4322}; - - -static u4Byte edca_setting_DL[HT_IOT_PEER_MAX] = -// UNKNOWN REALTEK_90 REALTEK_92SE BROADCOM RALINK ATHEROS CISCO MERU, MARVELL 92U_AP SELF_AP(UpLink/Rx) -{ 0xa44f, 0x5ea44f, 0x5e4322, 0x5ea42b, 0xa44f, 0xa630, 0x5ea630, 0x5ea42b, 0xa44f, 0xa42b, 0xa42b}; - -static u4Byte edca_setting_DL_GMode[HT_IOT_PEER_MAX] = -// UNKNOWN REALTEK_90 REALTEK_92SE BROADCOM RALINK ATHEROS CISCO MERU, MARVELL 92U_AP SELF_AP -{ 0x4322, 0xa44f, 0x5e4322, 0xa42b, 0x5e4322, 0x4322, 0xa42b, 0x5ea42b, 0xa44f, 0x5e4322, 0x5ea42b}; - -#endif - - - -VOID -odm_EdcaTurboCheck( - IN PVOID pDM_VOID - ); -VOID -ODM_EdcaTurboInit( - IN PVOID pDM_VOID -); - -#if(DM_ODM_SUPPORT_TYPE==ODM_WIN) -VOID -odm_EdcaTurboCheckMP( - IN PVOID pDM_VOID - ); - -//check if edca turbo is disabled -BOOLEAN -odm_IsEdcaTurboDisable( - IN PVOID pDM_VOID -); -//choose edca paramter for special IOT case -VOID -ODM_EdcaParaSelByIot( - IN PVOID pDM_VOID, - OUT u4Byte *EDCA_BE_UL, - OUT u4Byte *EDCA_BE_DL - ); -//check if it is UL or DL -VOID -odm_EdcaChooseTrafficIdx( - IN PVOID pDM_VOID, - IN u8Byte cur_tx_bytes, - IN u8Byte cur_rx_bytes, - IN BOOLEAN bBiasOnRx, - OUT BOOLEAN *pbIsCurRDLState - ); - -#elif (DM_ODM_SUPPORT_TYPE==ODM_CE) -VOID -odm_EdcaTurboCheckCE( - IN PVOID pDM_VOID - ); -#endif - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_hwconfig.h b/network/wlan/WDI/HAL/phydm/phydm_hwconfig.h deleted file mode 100644 index a61ed3bd..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_hwconfig.h +++ /dev/null @@ -1,517 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __HALHWOUTSRC_H__ -#define __HALHWOUTSRC_H__ - - -/*--------------------------Define -------------------------------------------*/ - -#define AGC_DIFF_CONFIG_MP(ic, band) (ODM_ReadAndConfig_MP_##ic##_AGC_TAB_DIFF(pDM_Odm, Array_MP_##ic##_AGC_TAB_DIFF_##band, \ - sizeof(Array_MP_##ic##_AGC_TAB_DIFF_##band)/sizeof(u4Byte))) -#define AGC_DIFF_CONFIG_TC(ic, band) (ODM_ReadAndConfig_TC_##ic##_AGC_TAB_DIFF(pDM_Odm, Array_TC_##ic##_AGC_TAB_DIFF_##band, \ - sizeof(Array_TC_##ic##_AGC_TAB_DIFF_##band)/sizeof(u4Byte))) - -#define AGC_DIFF_CONFIG(ic, band) do {\ - if (pDM_Odm->bIsMPChip)\ - AGC_DIFF_CONFIG_MP(ic,band);\ - else\ - AGC_DIFF_CONFIG_TC(ic,band);\ - } while(0) - - -//============================================================ -// structure and define -//============================================================ - -__PACK typedef struct _Phy_Rx_AGC_Info -{ - #if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte gain:7,trsw:1; - #else - u1Byte trsw:1,gain:7; - #endif -} __WLAN_ATTRIB_PACK__ PHY_RX_AGC_INFO_T, *pPHY_RX_AGC_INFO_T; - -__PACK typedef struct _Phy_Status_Rpt_8192cd { - PHY_RX_AGC_INFO_T path_agc[2]; - u1Byte ch_corr[2]; - u1Byte cck_sig_qual_ofdm_pwdb_all; - u1Byte cck_agc_rpt_ofdm_cfosho_a; - u1Byte cck_rpt_b_ofdm_cfosho_b; - u1Byte rsvd_1;/*ch_corr_msb;*/ - u1Byte noise_power_db_msb; - s1Byte path_cfotail[2]; - u1Byte pcts_mask[2]; - s1Byte stream_rxevm[2]; - u1Byte path_rxsnr[2]; - u1Byte noise_power_db_lsb; - u1Byte rsvd_2[3]; - u1Byte stream_csi[2]; - u1Byte stream_target_csi[2]; - s1Byte sig_evm; - u1Byte rsvd_3; - -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antsel_rx_keep_2: 1; /*ex_intf_flg:1;*/ - u1Byte sgi_en: 1; - u1Byte rxsc: 2; - u1Byte idle_long: 1; - u1Byte r_ant_train_en: 1; - u1Byte ant_sel_b: 1; - u1Byte ant_sel: 1; -#else /*_BIG_ENDIAN_ */ - u1Byte ant_sel: 1; - u1Byte ant_sel_b: 1; - u1Byte r_ant_train_en: 1; - u1Byte idle_long: 1; - u1Byte rxsc: 2; - u1Byte sgi_en: 1; - u1Byte antsel_rx_keep_2: 1;/*ex_intf_flg:1;*/ -#endif -} __WLAN_ATTRIB_PACK__ PHY_STATUS_RPT_8192CD_T, *PPHY_STATUS_RPT_8192CD_T; - - -typedef struct _Phy_Status_Rpt_8812 { -/* DWORD 0*/ - u1Byte gain_trsw[2]; /*path-A and path-B {TRSW, gain[6:0] }*/ - u1Byte chl_num_LSB; /*channel number[7:0]*/ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte chl_num_MSB: 2; /*channel number[9:8]*/ - u1Byte sub_chnl: 4; /*sub-channel location[3:0]*/ - u1Byte r_RFMOD: 2; /*RF mode[1:0]*/ -#else /*_BIG_ENDIAN_ */ - u1Byte r_RFMOD: 2; - u1Byte sub_chnl: 4; - u1Byte chl_num_MSB: 2; -#endif - -/* DWORD 1*/ - u1Byte pwdb_all; /*CCK signal quality / OFDM pwdb all*/ - s1Byte cfosho[2]; /*DW1 byte 1 DW1 byte2 CCK AGC report and CCK_BB_Power / OFDM Path-A and Path-B short CFO*/ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - /*this should be checked again because the definition of 8812 and 8814 is different*/ -/* u1Byte r_cck_rx_enable_pathc:2; cck rx enable pathc[1:0]*/ -/* u1Byte cck_rx_path:4; cck rx path[3:0]*/ - u1Byte resvd_0: 6; - u1Byte bt_RF_ch_MSB: 2; /*8812A:2'b0 8814A: bt rf channel keep[7:6]*/ -#else /*_BIG_ENDIAN_*/ - u1Byte bt_RF_ch_MSB: 2; - u1Byte resvd_0: 6; -#endif - -/* DWORD 2*/ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte ant_div_sw_a: 1; /*8812A: ant_div_sw_a 8814A: 1'b0*/ - u1Byte ant_div_sw_b: 1; /*8812A: ant_div_sw_b 8814A: 1'b0*/ - u1Byte bt_RF_ch_LSB: 6; /*8812A: 6'b0 8814A: bt rf channel keep[5:0]*/ -#else /*_BIG_ENDIAN_ */ - u1Byte bt_RF_ch_LSB: 6; - u1Byte ant_div_sw_b: 1; - u1Byte ant_div_sw_a: 1; -#endif - s1Byte cfotail[2]; /*DW2 byte 1 DW2 byte 2 path-A and path-B CFO tail*/ - u1Byte PCTS_MSK_RPT_0; /*PCTS mask report[7:0]*/ - u1Byte PCTS_MSK_RPT_1; /*PCTS mask report[15:8]*/ - -/* DWORD 3*/ - s1Byte rxevm[2]; /*DW3 byte 1 DW3 byte 2 stream 1 and stream 2 RX EVM*/ - s1Byte rxsnr[2]; /*DW3 byte 3 DW4 byte 0 path-A and path-B RX SNR*/ - -/* DWORD 4*/ - u1Byte PCTS_MSK_RPT_2; /*PCTS mask report[23:16]*/ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte PCTS_MSK_RPT_3: 6; /*PCTS mask report[29:24]*/ - u1Byte pcts_rpt_valid: 1; /*pcts_rpt_valid*/ - u1Byte resvd_1: 1; /*1'b0*/ -#else /*_BIG_ENDIAN_*/ - u1Byte resvd_1: 1; - u1Byte pcts_rpt_valid: 1; - u1Byte PCTS_MSK_RPT_3: 6; -#endif - s1Byte rxevm_cd[2]; /*DW 4 byte 3 DW5 byte 0 8812A: 16'b0 8814A: stream 3 and stream 4 RX EVM*/ - -/* DWORD 5*/ - u1Byte csi_current[2]; /*DW5 byte 1 DW5 byte 2 8812A: stream 1 and 2 CSI 8814A: path-C and path-D RX SNR*/ - u1Byte gain_trsw_cd[2]; /*DW5 byte 3 DW6 byte 0 path-C and path-D {TRSW, gain[6:0] }*/ - -/* DWORD 6*/ - s1Byte sigevm; /*signal field EVM*/ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_antc: 3; /*8812A: 3'b0 8814A: antidx_antc[2:0]*/ - u1Byte antidx_antd: 3; /*8812A: 3'b0 8814A: antidx_antd[2:0]*/ - u1Byte dpdt_ctrl_keep: 1; /*8812A: 1'b0 8814A: dpdt_ctrl_keep*/ - u1Byte GNT_BT_keep: 1; /*8812A: 1'b0 8814A: GNT_BT_keep*/ -#else /*_BIG_ENDIAN_*/ - u1Byte GNT_BT_keep: 1; - u1Byte dpdt_ctrl_keep: 1; - u1Byte antidx_antd: 3; - u1Byte antidx_antc: 3; -#endif -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_anta: 3; /*antidx_anta[2:0]*/ - u1Byte antidx_antb: 3; /*antidx_antb[2:0]*/ - u1Byte hw_antsw_occur: 2; /*1'b0*/ -#else /*_BIG_ENDIAN_*/ - u1Byte hw_antsw_occur: 2; - u1Byte antidx_antb: 3; - u1Byte antidx_anta: 3; -#endif -} PHY_STATUS_RPT_8812_T, *PPHY_STATUS_RPT_8812_T; - -VOID -odm_Init_RSSIForDM( - IN OUT PDM_ODM_T pDM_Odm - ); - -VOID -ODM_PhyStatusQuery( - IN OUT PDM_ODM_T pDM_Odm, - OUT PODM_PHY_INFO_T pPhyInfo, - IN pu1Byte pPhyStatus, - IN PODM_PACKET_INFO_T pPktinfo - ); - -VOID -ODM_MacStatusQuery( - IN OUT PDM_ODM_T pDM_Odm, - IN pu1Byte pMacStatus, - IN u1Byte MacID, - IN BOOLEAN bPacketMatchBSSID, - IN BOOLEAN bPacketToSelf, - IN BOOLEAN bPacketBeacon - ); - -HAL_STATUS -ODM_ConfigRFWithTxPwrTrackHeaderFile( - IN PDM_ODM_T pDM_Odm - ); - -HAL_STATUS -ODM_ConfigRFWithHeaderFile( - IN PDM_ODM_T pDM_Odm, - IN ODM_RF_Config_Type ConfigType, - IN ODM_RF_RADIO_PATH_E eRFPath - ); - -HAL_STATUS -ODM_ConfigBBWithHeaderFile( - IN PDM_ODM_T pDM_Odm, - IN ODM_BB_Config_Type ConfigType - ); - -HAL_STATUS -ODM_ConfigMACWithHeaderFile( - IN PDM_ODM_T pDM_Odm - ); - -HAL_STATUS -ODM_ConfigFWWithHeaderFile( - IN PDM_ODM_T pDM_Odm, - IN ODM_FW_Config_Type ConfigType, - OUT u1Byte *pFirmware, - OUT u4Byte *pSize - ); - -u4Byte -ODM_GetHWImgVersion( - IN PDM_ODM_T pDM_Odm - ); - -s4Byte -odm_SignalScaleMapping( - IN OUT PDM_ODM_T pDM_Odm, - IN s4Byte CurrSig - ); - -#if (RTL8822B_SUPPORT == 1) -/*For 8822B only!! need to move to FW finally */ -/*==============================================*/ -VOID -phydm_RxPhyStatusJaguarSeries2( - IN PDM_ODM_T pPhydm, - IN pu1Byte pPhyStatus, - IN PODM_PACKET_INFO_T pPktinfo, - OUT PODM_PHY_INFO_T pPhyInfo -); - -typedef struct _Phy_Status_Rpt_Jaguar2_Type0 { - /* DW0 */ - u1Byte page_num; - u1Byte pwdb; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte gain: 6; - u1Byte rsvd_0: 1; - u1Byte trsw: 1; -#else - u1Byte trsw: 1; - u1Byte rsvd_0: 1; - u1Byte gain: 6; -#endif - u1Byte rsvd_1; - - /* DW1 */ - u1Byte rsvd_2; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte rxsc: 4; - u1Byte agc_table: 4; -#else - u1Byte agc_table: 4; - u1Byte rxsc: 4; -#endif - u1Byte channel; - u1Byte band; - - /* DW2 */ - u2Byte length; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_a: 3; - u1Byte antidx_b: 3; - u1Byte rsvd_3: 2; - u1Byte antidx_c: 3; - u1Byte antidx_d: 3; - u1Byte rsvd_4:2; -#else - u1Byte rsvd_3: 2; - u1Byte antidx_b: 3; - u1Byte antidx_a: 3; - u1Byte rsvd_4:2; - u1Byte antidx_d: 3; - u1Byte antidx_c: 3; -#endif - - /* DW3 */ - u1Byte signal_quality; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte vga:5; - u1Byte lna_l:3; - u1Byte bb_power:6; - u1Byte rsvd_9:1; - u1Byte lna_h:1; -#else - u1Byte lna_l:3; - u1Byte vga:5; - u1Byte lna_h:1; - u1Byte rsvd_9:1; - u1Byte bb_power:6; -#endif - u1Byte rsvd_5; - - /* DW4 */ - u4Byte rsvd_6; - - /* DW5 */ - u4Byte rsvd_7; - - /* DW6 */ - u4Byte rsvd_8; -} PHY_STATUS_RPT_JAGUAR2_TYPE0, *PPHY_STATUS_RPT_JAGUAR2_TYPE0; - -typedef struct _Phy_Status_Rpt_Jaguar2_Type1 { - /* DW0 and DW1 */ - u1Byte page_num; - u1Byte pwdb[4]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte l_rxsc: 4; - u1Byte ht_rxsc: 4; -#else - u1Byte ht_rxsc: 4; - u1Byte l_rxsc: 4; -#endif - u1Byte channel; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte band: 2; - u1Byte rsvd_0: 1; - u1Byte hw_antsw_occu: 1; - u1Byte gnt_bt: 1; - u1Byte ldpc: 1; - u1Byte stbc: 1; - u1Byte beamformed: 1; -#else - u1Byte beamformed: 1; - u1Byte stbc: 1; - u1Byte ldpc: 1; - u1Byte gnt_bt: 1; - u1Byte hw_antsw_occu: 1; - u1Byte rsvd_0: 1; - u1Byte band: 2; -#endif - - /* DW2 */ - u2Byte lsig_length; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte antidx_a: 3; - u1Byte antidx_b: 3; - u1Byte rsvd_1: 2; - u1Byte antidx_c: 3; - u1Byte antidx_d: 3; - u1Byte rsvd_2: 2; -#else - u1Byte rsvd_1: 2; - u1Byte antidx_b: 3; - u1Byte antidx_a: 3; - u1Byte rsvd_2: 2; - u1Byte antidx_d: 3; - u1Byte antidx_c: 3; -#endif - - /* DW3 */ - u1Byte paid; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte paid_msb: 1; - u1Byte gid: 6; - u1Byte rsvd_3: 1; -#else - u1Byte rsvd_3: 1; - u1Byte gid: 6; - u1Byte paid_msb: 1; -#endif - u1Byte intf_pos; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte intf_pos_msb: 1; - u1Byte rsvd_4: 2; - u1Byte nb_intf_flag: 1; - u1Byte rf_mode: 2; - u1Byte rsvd_5: 2; -#else - u1Byte rsvd_5: 2; - u1Byte rf_mode: 2; - u1Byte nb_intf_flag: 1; - u1Byte rsvd_4: 2; - u1Byte intf_pos_msb: 1; -#endif - - /* DW4 */ - s1Byte rxevm[4]; /* s(8,1) */ - - /* DW5 */ - s1Byte cfo_tail[4]; /* s(8,7) */ - - /* DW6 */ - s1Byte rxsnr[4]; /* s(8,1) */ -} PHY_STATUS_RPT_JAGUAR2_TYPE1, *PPHY_STATUS_RPT_JAGUAR2_TYPE1; - -typedef struct _Phy_Status_Rpt_Jaguar2_Type2 { - /* DW0 ane DW1 */ - u1Byte page_num; - u1Byte pwdb[4]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte l_rxsc: 4; - u1Byte ht_rxsc: 4; -#else - u1Byte ht_rxsc: 4; - u1Byte l_rxsc: 4; -#endif - u1Byte channel; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte band: 2; - u1Byte rsvd_0: 1; - u1Byte hw_antsw_occu: 1; - u1Byte gnt_bt: 1; - u1Byte ldpc: 1; - u1Byte stbc: 1; - u1Byte beamformed: 1; -#else - u1Byte beamformed: 1; - u1Byte stbc: 1; - u1Byte ldpc: 1; - u1Byte gnt_bt: 1; - u1Byte hw_antsw_occu: 1; - u1Byte rsvd_0: 1; - u1Byte band: 2; -#endif - - /* DW2 */ -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte shift_l_map: 6; - u1Byte rsvd_1: 2; -#else - u1Byte rsvd_1: 2; - u1Byte shift_l_map: 6; -#endif - u1Byte cnt_pw2cca; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte agc_table_a: 4; - u1Byte agc_table_b: 4; - u1Byte agc_table_c: 4; - u1Byte agc_table_d: 4; -#else - u1Byte agc_table_b: 4; - u1Byte agc_table_a: 4; - u1Byte agc_table_d: 4; - u1Byte agc_table_c: 4; -#endif - - /* DW3 ~ DW6*/ - u1Byte cnt_cca2agc_rdy; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte gain_a: 6; - u1Byte rsvd_2: 1; - u1Byte trsw_a: 1; - u1Byte gain_b: 6; - u1Byte rsvd_3: 1; - u1Byte trsw_b: 1; - u1Byte gain_c: 6; - u1Byte rsvd_4: 1; - u1Byte trsw_c: 1; - u1Byte gain_d: 6; - u1Byte rsvd_5: 1; - u1Byte trsw_d: 1; - u1Byte aagc_step_a: 2; - u1Byte aagc_step_b: 2; - u1Byte aagc_step_c: 2; - u1Byte aagc_step_d: 2; -#else - u1Byte trsw_a: 1; - u1Byte rsvd_2: 1; - u1Byte gain_a: 6; - u1Byte trsw_b: 1; - u1Byte rsvd_3: 1; - u1Byte gain_b: 6; - u1Byte trsw_c: 1; - u1Byte rsvd_4: 1; - u1Byte gain_c: 6; - u1Byte trsw_d: 1; - u1Byte rsvd_5: 1; - u1Byte gain_d: 6; - u1Byte aagc_step_d: 2; - u1Byte aagc_step_c: 2; - u1Byte aagc_step_b: 2; - u1Byte aagc_step_a: 2; -#endif - u1Byte ht_aagc_gain[4]; - u1Byte dagc_gain[4]; -#if (ODM_ENDIAN_TYPE == ODM_ENDIAN_LITTLE) - u1Byte counter: 6; - u1Byte rsvd_6: 2; - u1Byte syn_count: 5; - u1Byte rsvd_7:3; -#else - u1Byte rsvd_6: 2; - u1Byte counter: 6; - u1Byte rsvd_7:3; - u1Byte syn_count: 5; -#endif -} PHY_STATUS_RPT_JAGUAR2_TYPE2, *PPHY_STATUS_RPT_JAGUAR2_TYPE2; -/*==============================================*/ -#endif -#endif - diff --git a/network/wlan/WDI/HAL/phydm/phydm_interface.h b/network/wlan/WDI/HAL/phydm/phydm_interface.h deleted file mode 100644 index e1433ffe..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_interface.h +++ /dev/null @@ -1,434 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __ODM_INTERFACE_H__ -#define __ODM_INTERFACE_H__ - -#define INTERFACE_VERSION "1.0" /*2015.01.13 Dino*/ - -// -// =========== Constant/Structure/Enum/... Define -// - - - -// -// =========== Macro Define -// - -#define _reg_all(_name) ODM_##_name -#define _reg_ic(_name, _ic) ODM_##_name##_ic -#define _bit_all(_name) BIT_##_name -#define _bit_ic(_name, _ic) BIT_##_name##_ic - -// _cat: implemented by Token-Pasting Operator. -#if 0 -#define _cat(_name, _ic_type, _func) \ - ( \ - _func##_all(_name) \ - ) -#endif - -/*=================================== - -#define ODM_REG_DIG_11N 0xC50 -#define ODM_REG_DIG_11AC 0xDDD - -ODM_REG(DIG,_pDM_Odm) -=====================================*/ - -#define _reg_11N(_name) ODM_REG_##_name##_11N -#define _reg_11AC(_name) ODM_REG_##_name##_11AC -#define _bit_11N(_name) ODM_BIT_##_name##_11N -#define _bit_11AC(_name) ODM_BIT_##_name##_11AC - -#ifdef __ECOS -#define _rtk_cat(_name, _ic_type, _func) \ - ( \ - ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \ - _func##_11AC(_name) \ - ) -#else - -#define _cat(_name, _ic_type, _func) \ - ( \ - ((_ic_type) & ODM_IC_11N_SERIES)? _func##_11N(_name): \ - _func##_11AC(_name) \ - ) -#endif -/* -// only sample code -//#define _cat(_name, _ic_type, _func) \ -// ( \ -// ((_ic_type) & ODM_RTL8192C)? _func##_ic(_name, _8192C): \ -// ((_ic_type) & ODM_RTL8192D)? _func##_ic(_name, _8192D): \ -// ((_ic_type) & ODM_RTL8192S)? _func##_ic(_name, _8192S): \ -// ((_ic_type) & ODM_RTL8723A)? _func##_ic(_name, _8723A): \ -// ((_ic_type) & ODM_RTL8188E)? _func##_ic(_name, _8188E): \ -// _func##_ic(_name, _8195) \ -// ) -*/ - -// _name: name of register or bit. -// Example: "ODM_REG(R_A_AGC_CORE1, pDM_Odm)" -// gets "ODM_R_A_AGC_CORE1" or "ODM_R_A_AGC_CORE1_8192C", depends on SupportICType. -#ifdef __ECOS -#define ODM_REG(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _reg) -#define ODM_BIT(_name, _pDM_Odm) _rtk_cat(_name, _pDM_Odm->SupportICType, _bit) -#else -#define ODM_REG(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _reg) -#define ODM_BIT(_name, _pDM_Odm) _cat(_name, _pDM_Odm->SupportICType, _bit) -#endif -typedef enum _PHYDM_H2C_CMD -{ - ODM_H2C_RSSI_REPORT = 0, - ODM_H2C_PSD_RESULT = 1, - ODM_H2C_PathDiv = 2, - ODM_H2C_WIFI_CALIBRATION = 3, - ODM_H2C_IQ_CALIBRATION = 4, - ODM_H2C_RA_PARA_ADJUST = 5, - PHYDM_H2C_DYNAMIC_TX_PATH = 6, - PHYDM_H2C_FW_TRACE_EN = 7, - PHYDM_H2C_TXBF = 8, - ODM_MAX_H2CCMD -}PHYDM_H2C_CMD; - -typedef enum _PHYDM_C2H_EVT -{ - PHYDM_C2H_DBG = 0, - PHYDM_C2H_LB = 1, - PHYDM_C2H_XBF = 2, - PHYDM_C2H_TX_REPORT = 3, - PHYDM_C2H_INFO = 9, - PHYDM_C2H_BT_MP = 11, - PHYDM_C2H_RA_RPT = 12, - PHYDM_C2H_RA_PARA_RPT=14, - PHYDM_C2H_DYNAMIC_TX_PATH_RPT = 15, - PHYDM_C2H_IQK_FINISH = 17, //0x11 - PHYDM_C2H_DBG_CODE = 0xFE, - PHYDM_C2H_EXTEND = 0xFF, -}PHYDM_C2H_EVT; - -typedef enum _PHYDM_EXTEND_C2H_EVT -{ - PHYDM_EXTEND_C2H_DBG_PRINT = 0 - -}PHYDM_EXTEND_C2H_EVT; - - -// -// 2012/02/17 MH For non-MP compile pass only. Linux does not support workitem. -// Suggest HW team to use thread instead of workitem. Windows also support the feature. -// -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -typedef void *PRT_WORK_ITEM ; -typedef void RT_WORKITEM_HANDLE,*PRT_WORKITEM_HANDLE; -typedef VOID (*RT_WORKITEM_CALL_BACK)(PVOID pContext); - -#if 0 -typedef struct tasklet_struct RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE; - -typedef struct _RT_WORK_ITEM -{ - - RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object. - PVOID Adapter; // Pointer to Adapter object. - PVOID pContext; // Parameter to passed to CallBackFunc(). - RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem. - u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. - PVOID pPlatformExt; // Pointer to platform-dependent extension. - BOOLEAN bFree; - char szID[36]; // An identity string of this workitem. -}RT_WORK_ITEM, *PRT_WORK_ITEM; - -#endif - - -#endif - -// -// =========== Extern Variable ??? It should be forbidden. -// - - -// -// =========== EXtern Function Prototype -// - - -u1Byte -ODM_Read1Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr - ); - -u2Byte -ODM_Read2Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr - ); - -u4Byte -ODM_Read4Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr - ); - -VOID -ODM_Write1Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u1Byte Data - ); - -VOID -ODM_Write2Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u2Byte Data - ); - -VOID -ODM_Write4Byte( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte Data - ); - -VOID -ODM_SetMACReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -ODM_GetMACReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -ODM_SetBBReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -ODM_GetBBReg( - IN PDM_ODM_T pDM_Odm, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - -VOID -ODM_SetRFReg( - IN PDM_ODM_T pDM_Odm, - IN ODM_RF_RADIO_PATH_E eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data - ); - -u4Byte -ODM_GetRFReg( - IN PDM_ODM_T pDM_Odm, - IN ODM_RF_RADIO_PATH_E eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask - ); - - -// -// Memory Relative Function. -// -VOID -ODM_AllocateMemory( - IN PDM_ODM_T pDM_Odm, - OUT PVOID *pPtr, - IN u4Byte length - ); -VOID -ODM_FreeMemory( - IN PDM_ODM_T pDM_Odm, - OUT PVOID pPtr, - IN u4Byte length - ); - -VOID -ODM_MoveMemory( - IN PDM_ODM_T pDM_Odm, - OUT PVOID pDest, - IN PVOID pSrc, - IN u4Byte Length - ); - -s4Byte ODM_CompareMemory( - IN PDM_ODM_T pDM_Odm, - IN PVOID pBuf1, - IN PVOID pBuf2, - IN u4Byte length - ); - -void ODM_Memory_Set - (IN PDM_ODM_T pDM_Odm, - IN PVOID pbuf, - IN s1Byte value, - IN u4Byte length); - -// -// ODM MISC-spin lock relative API. -// -VOID -ODM_AcquireSpinLock( - IN PDM_ODM_T pDM_Odm, - IN RT_SPINLOCK_TYPE type - ); - -VOID -ODM_ReleaseSpinLock( - IN PDM_ODM_T pDM_Odm, - IN RT_SPINLOCK_TYPE type - ); - - -// -// ODM MISC-workitem relative API. -// -VOID -ODM_InitializeWorkItem( - IN PDM_ODM_T pDM_Odm, - IN PRT_WORK_ITEM pRtWorkItem, - IN RT_WORKITEM_CALL_BACK RtWorkItemCallback, - IN PVOID pContext, - IN const char* szID - ); - -VOID -ODM_StartWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_StopWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_FreeWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_ScheduleWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -VOID -ODM_IsWorkItemScheduled( - IN PRT_WORK_ITEM pRtWorkItem - ); - -// -// ODM Timer relative API. -// -VOID -ODM_StallExecution( - IN u4Byte usDelay - ); - -VOID -ODM_delay_ms(IN u4Byte ms); - - - -VOID -ODM_delay_us(IN u4Byte us); - -VOID -ODM_sleep_ms(IN u4Byte ms); - -VOID -ODM_sleep_us(IN u4Byte us); - -VOID -ODM_SetTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer, - IN u4Byte msDelay - ); - -VOID -ODM_InitializeTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer, - IN RT_TIMER_CALL_BACK CallBackFunc, - IN PVOID pContext, - IN const char* szID - ); - -VOID -ODM_CancelTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer - ); - -VOID -ODM_ReleaseTimer( - IN PDM_ODM_T pDM_Odm, - IN PRT_TIMER pTimer - ); - -// -// ODM FW relative API. -// -VOID -ODM_FillH2CCmd( - IN PDM_ODM_T pDM_Odm, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -u1Byte -phydm_c2H_content_parsing( - IN PVOID pDM_VOID, - IN u1Byte c2hCmdId, - IN u1Byte c2hCmdLen, - IN pu1Byte tmpBuf -); - -u8Byte -ODM_GetCurrentTime( - IN PDM_ODM_T pDM_Odm - ); -u8Byte -ODM_GetProgressingTime( - IN PDM_ODM_T pDM_Odm, - IN u8Byte Start_Time - ); - -#endif // __ODM_INTERFACE_H__ - diff --git a/network/wlan/WDI/HAL/phydm/phydm_noisemonitor.h b/network/wlan/WDI/HAL/phydm/phydm_noisemonitor.h deleted file mode 100644 index 022cefe2..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_noisemonitor.h +++ /dev/null @@ -1,49 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - *****************************************************************************/ -#ifndef __ODMNOISEMONITOR_H__ -#define __ODMNOISEMONITOR_H__ - -#define ODM_MAX_CHANNEL_NUM 38//14+24 -struct noise_level -{ - //u1Byte value_a, value_b; - u1Byte value[MAX_RF_PATH]; - //s1Byte sval_a, sval_b; - s1Byte sval[MAX_RF_PATH]; - - //s4Byte noise_a=0, noise_b=0,sum_a=0, sum_b=0; - //s4Byte noise[ODM_RF_PATH_MAX]; - s4Byte sum[MAX_RF_PATH]; - //u1Byte valid_cnt_a=0, valid_cnt_b=0, - u1Byte valid[MAX_RF_PATH]; - u1Byte valid_cnt[MAX_RF_PATH]; - -}; - - -typedef struct _ODM_NOISE_MONITOR_ -{ - s1Byte noise[MAX_RF_PATH]; - s2Byte noise_all; -}ODM_NOISE_MONITOR; - -s2Byte ODM_InbandNoise_Monitor(PVOID pDM_VOID,u8 bPauseDIG,u8 IGIValue,u32 max_time); - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_pathdiv.h b/network/wlan/WDI/HAL/phydm/phydm_pathdiv.h deleted file mode 100644 index 020288ea..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_pathdiv.h +++ /dev/null @@ -1,324 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMPATHDIV_H__ -#define __PHYDMPATHDIV_H__ -/*#define PATHDIV_VERSION "2.0" //2014.11.04*/ -#define PATHDIV_VERSION "3.0" /*2015.01.13 Dino*/ - -#if(defined(CONFIG_PATH_DIVERSITY)) -#define USE_PATH_A_AS_DEFAULT_ANT //for 8814 dynamic TX path selection - -#define NUM_RESET_DTP_PERIOD 5 -#define ANT_DECT_RSSI_TH 3 - -#define PATH_A 1 -#define PATH_B 2 -#define PATH_C 3 -#define PATH_D 4 - -#define PHYDM_AUTO_PATH 0 -#define PHYDM_FIX_PATH 1 - -#define NUM_CHOOSE2_FROM4 6 -#define NUM_CHOOSE3_FROM4 4 - - -#define PHYDM_A BIT0 -#define PHYDM_B BIT1 -#define PHYDM_C BIT2 -#define PHYDM_D BIT3 -#define PHYDM_AB (BIT0 | BIT1) // 0 -#define PHYDM_AC (BIT0 | BIT2) // 1 -#define PHYDM_AD (BIT0 | BIT3) // 2 -#define PHYDM_BC (BIT1 | BIT2) // 3 -#define PHYDM_BD (BIT1 | BIT3) // 4 -#define PHYDM_CD (BIT2 | BIT3) // 5 - -#define PHYDM_ABC (BIT0 | BIT1 | BIT2) /* 0*/ -#define PHYDM_ABD (BIT0 | BIT1 | BIT3) /* 1*/ -#define PHYDM_ACD (BIT0 | BIT2 | BIT3) /* 2*/ -#define PHYDM_BCD (BIT1 | BIT2 | BIT3) /* 3*/ - -#define PHYDM_ABCD (BIT0 | BIT1 | BIT2 | BIT3) - - -typedef enum dtp_state -{ - PHYDM_DTP_INIT=1, - PHYDM_DTP_RUNNING_1 - -}PHYDM_DTP_STATE; - -typedef enum path_div_type -{ - PHYDM_2R_PATH_DIV = 1, - PHYDM_4R_PATH_DIV = 2 -}PHYDM_PATH_DIV_TYPE; - -VOID -phydm_process_rssi_for_path_div( - IN OUT PVOID pDM_VOID, - IN PVOID p_phy_info_void, - IN PVOID p_pkt_info_void - ); - -typedef struct _ODM_PATH_DIVERSITY_ -{ - u1Byte RespTxPath; - u1Byte PathSel[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte PathA_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u4Byte PathB_Sum[ODM_ASSOCIATE_ENTRY_NUM]; - u2Byte PathA_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u2Byte PathB_Cnt[ODM_ASSOCIATE_ENTRY_NUM]; - u1Byte path_div_type; - #if RTL8814A_SUPPORT - - u4Byte path_a_sum_all; - u4Byte path_b_sum_all; - u4Byte path_c_sum_all; - u4Byte path_d_sum_all; - - u4Byte path_a_cnt_all; - u4Byte path_b_cnt_all; - u4Byte path_c_cnt_all; - u4Byte path_d_cnt_all; - - u1Byte dtp_period; - BOOLEAN bBecomeLinked; - BOOLEAN is_u3_mode; - u1Byte num_tx_path; - u1Byte default_path; - u1Byte num_candidate; - u1Byte ant_candidate_1; - u1Byte ant_candidate_2; - u1Byte ant_candidate_3; - u1Byte dtp_state; - u1Byte dtp_check_patha_counter; - BOOLEAN fix_path_bfer; - u1Byte search_space_2[NUM_CHOOSE2_FROM4]; - u1Byte search_space_3[NUM_CHOOSE3_FROM4]; - - u1Byte pre_tx_path; - u1Byte use_path_a_as_default_ant; - BOOLEAN is_pathA_exist; - - #endif -}PATHDIV_T, *pPATHDIV_T; - - -#endif //#if(defined(CONFIG_PATH_DIVERSITY)) - -VOID -phydm_c2h_dtp_handler( - IN PVOID pDM_VOID, - IN pu1Byte CmdBuf, - IN u1Byte CmdLen - ); - -VOID -odm_PathDiversityInit( - IN PVOID pDM_VOID - ); - -VOID -odm_PathDiversity( - IN PVOID pDM_VOID - ); - -VOID -odm_pathdiv_debug( - IN PVOID pDM_VOID, - IN u4Byte *const dm_value, - IN u4Byte *_used, - OUT char *output, - IN u4Byte *_out_len - ); - - - -//1 [OLD IC]-------------------------------------------------------------------------------- - - - - - - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - -//#define PATHDIV_ENABLE 1 -#define dm_PathDiv_RSSI_Check ODM_PathDivChkPerPktRssi -#define PathDivCheckBeforeLink8192C ODM_PathDiversityBeforeLink92C - - - - -typedef struct _PathDiv_Parameter_define_ -{ - u4Byte org_5g_RegE30; - u4Byte org_5g_RegC14; - u4Byte org_5g_RegCA0; - u4Byte swt_5g_RegE30; - u4Byte swt_5g_RegC14; - u4Byte swt_5g_RegCA0; - //for 2G IQK information - u4Byte org_2g_RegC80; - u4Byte org_2g_RegC4C; - u4Byte org_2g_RegC94; - u4Byte org_2g_RegC14; - u4Byte org_2g_RegCA0; - - u4Byte swt_2g_RegC80; - u4Byte swt_2g_RegC4C; - u4Byte swt_2g_RegC94; - u4Byte swt_2g_RegC14; - u4Byte swt_2g_RegCA0; -}PATHDIV_PARA,*pPATHDIV_PARA; - -VOID -odm_PathDiversityInit_92C( - IN PADAPTER Adapter - ); - -VOID -odm_2TPathDiversityInit_92C( - IN PADAPTER Adapter - ); - -VOID -odm_1TPathDiversityInit_92C( - IN PADAPTER Adapter - ); - -BOOLEAN -odm_IsConnected_92C( - IN PADAPTER Adapter - ); - -BOOLEAN -ODM_PathDiversityBeforeLink92C( - //IN PADAPTER Adapter - IN PDM_ODM_T pDM_Odm - ); - -VOID -odm_PathDiversityAfterLink_92C( - IN PADAPTER Adapter - ); - -VOID -odm_SetRespPath_92C( - IN PADAPTER Adapter, - IN u1Byte DefaultRespPath - ); - -VOID -odm_OFDMTXPathDiversity_92C( - IN PADAPTER Adapter - ); - -VOID -odm_CCKTXPathDiversity_92C( - IN PADAPTER Adapter - ); - -VOID -odm_ResetPathDiversity_92C( - IN PADAPTER Adapter - ); - -VOID -odm_CCKTXPathDiversityCallback( - PRT_TIMER pTimer - ); - -VOID -odm_CCKTXPathDiversityWorkItemCallback( - IN PVOID pContext - ); - -VOID -odm_PathDivChkAntSwitchCallback( - PRT_TIMER pTimer - ); - -VOID -odm_PathDivChkAntSwitchWorkitemCallback( - IN PVOID pContext - ); - - -VOID -odm_PathDivChkAntSwitch( - PDM_ODM_T pDM_Odm - ); - -VOID -ODM_CCKPathDiversityChkPerPktRssi( - PADAPTER Adapter, - BOOLEAN bIsDefPort, - BOOLEAN bMatchBSSID, - PRT_WLAN_STA pEntry, - PRT_RFD pRfd, - pu1Byte pDesc - ); - -VOID -ODM_PathDivChkPerPktRssi( - PADAPTER Adapter, - BOOLEAN bIsDefPort, - BOOLEAN bMatchBSSID, - PRT_WLAN_STA pEntry, - PRT_RFD pRfd - ); - -VOID -ODM_PathDivRestAfterLink( - IN PDM_ODM_T pDM_Odm - ); - -VOID -ODM_FillTXPathInTXDESC( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN pu1Byte pDesc - ); - -VOID -odm_PathDivInit_92D( - IN PDM_ODM_T pDM_Odm - ); - -u1Byte -odm_SwAntDivSelectScanChnl( - IN PADAPTER Adapter - ); - -VOID -odm_SwAntDivConstructScanChnl( - IN PADAPTER Adapter, - IN u1Byte ScanChnl - ); - - #endif //#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - - - #endif //#ifndef __ODMPATHDIV_H__ - diff --git a/network/wlan/WDI/HAL/phydm/phydm_powertracking_ap.h b/network/wlan/WDI/HAL/phydm/phydm_powertracking_ap.h deleted file mode 100644 index 80dbcea2..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_powertracking_ap.h +++ /dev/null @@ -1,313 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMPOWERTRACKING_H__ -#define __PHYDMPOWERTRACKING_H__ - -#define POWRTRACKING_VERSION "1.0" - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) -#ifdef RTK_AC_SUPPORT -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#else -#define ODM_IC_11AC_SERIES_SUPPORT 0 -#endif -#else -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#endif - -#define DPK_DELTA_MAPPING_NUM 13 -#define index_mapping_HP_NUM 15 -#define DELTA_SWINGIDX_SIZE 30 -#define BAND_NUM 3 -#define MAX_RF_PATH 4 -#define TXSCALE_TABLE_SIZE 37 -#define CCK_TABLE_SIZE_8723D 41 - -#define IQK_MAC_REG_NUM 4 -#define IQK_ADDA_REG_NUM 16 -#define IQK_BB_REG_NUM_MAX 10 -#if (RTL8192D_SUPPORT==1) -#define IQK_BB_REG_NUM 10 -#else -#define IQK_BB_REG_NUM 9 -#endif -#define HP_THERMAL_NUM 8 - -#define AVG_THERMAL_NUM 8 -#define IQK_Matrix_REG_NUM 8 -//#define IQK_Matrix_Settings_NUM 1+24+21 -#define IQK_Matrix_Settings_NUM (14+24+21) // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G - -#if !defined(_OUTSRC_COEXIST) -#define OFDM_TABLE_SIZE_92D 43 -#define OFDM_TABLE_SIZE 37 -#define CCK_TABLE_SIZE 33 -#define CCK_TABLE_SIZE_88F 21 - - - -//#define OFDM_TABLE_SIZE_92E 54 -//#define CCK_TABLE_SIZE_92E 54 -extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE_92D]; -extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]; - - -extern u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE_92D]; -extern u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16]; - -#endif - -#define ODM_OFDM_TABLE_SIZE 37 -#define ODM_CCK_TABLE_SIZE 33 -// <20140613, YuChen> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. -extern u1Byte DeltaSwingTableIdx_2GA_P_DEFAULT[DELTA_SWINGIDX_SIZE]; -extern u1Byte DeltaSwingTableIdx_2GA_N_DEFAULT[DELTA_SWINGIDX_SIZE]; - - -//extern u4Byte OFDMSwingTable_92E[OFDM_TABLE_SIZE_92E]; -//extern u1Byte CCKSwingTable_Ch1_Ch13_92E[CCK_TABLE_SIZE_92E][8]; -//extern u1Byte CCKSwingTable_Ch14_92E[CCK_TABLE_SIZE_92E][8]; - -#ifdef CONFIG_WLAN_HAL_8192EE -#define OFDM_TABLE_SIZE_92E 54 -#define CCK_TABLE_SIZE_92E 54 -extern u4Byte OFDMSwingTable_92E[OFDM_TABLE_SIZE_92E]; -extern u1Byte CCKSwingTable_Ch1_Ch13_92E[CCK_TABLE_SIZE_92E][8]; -extern u1Byte CCKSwingTable_Ch14_92E[CCK_TABLE_SIZE_92E][8]; -#endif - -#define OFDM_TABLE_SIZE_8812 43 -#define AVG_THERMAL_NUM_8812 4 - -#if(RTL8814A_SUPPORT == 1) -extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE]; -#elif(ODM_IC_11AC_SERIES_SUPPORT) -extern unsigned int OFDMSwingTable_8812[OFDM_TABLE_SIZE_8812]; -#endif - -#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck - -typedef struct _IQK_MATRIX_REGS_SETTING{ - BOOLEAN bIQKDone; - s4Byte Value[1][IQK_Matrix_REG_NUM]; -}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING; - -typedef struct ODM_RF_Calibration_Structure -{ - //for tx power tracking - - u4Byte RegA24; // for TempCCK - s4Byte RegE94; - s4Byte RegE9C; - s4Byte RegEB4; - s4Byte RegEBC; - - //u1Byte bTXPowerTracking; - u1Byte TXPowercount; - BOOLEAN bTXPowerTrackingInit; - BOOLEAN bTXPowerTracking; - u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default - u1Byte TM_Trigger; - u1Byte InternalPA5G[2]; //pathA / pathB - - u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 - u1Byte ThermalValue; - u1Byte ThermalValue_LCK; - u1Byte ThermalValue_IQK; - u1Byte ThermalValue_DPK; - u1Byte ThermalValue_AVG[AVG_THERMAL_NUM]; - u1Byte ThermalValue_AVG_index; - u1Byte ThermalValue_RxGain; - u1Byte ThermalValue_Crystal; - u1Byte ThermalValue_DPKstore; - u1Byte ThermalValue_DPKtrack; - BOOLEAN TxPowerTrackingInProgress; - BOOLEAN bDPKenable; - - BOOLEAN bReloadtxpowerindex; - u1Byte bRfPiEnable; - u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug - - u1Byte bCCKinCH14; - u1Byte CCK_index; - u1Byte OFDM_index[MAX_RF_PATH]; - s1Byte PowerIndexOffset; - s1Byte DeltaPowerIndex; - s1Byte DeltaPowerIndexLast; - BOOLEAN bTxPowerChanged; - - u1Byte ThermalValue_HP[HP_THERMAL_NUM]; - u1Byte ThermalValue_HP_index; - IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM]; - BOOLEAN bNeedIQK; - u1Byte Delta_IQK; - u1Byte Delta_LCK; - u1Byte DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE]; - - u1Byte BbSwingIdxOfdm[MAX_RF_PATH]; - u1Byte BbSwingIdxOfdmCurrent; -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - u1Byte BbSwingIdxOfdmBase[MAX_RF_PATH]; -#else - u1Byte BbSwingIdxOfdmBase; -#endif - BOOLEAN BbSwingFlagOfdm; - u1Byte BbSwingIdxCck; - u1Byte BbSwingIdxCckCurrent; - u1Byte BbSwingIdxCckBase; - u1Byte DefaultOfdmIndex; - u1Byte DefaultCckIndex; - BOOLEAN BbSwingFlagCck; - - s1Byte Absolute_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_CCKSwingIdx; - s1Byte Modify_TxAGC_Value; /*Remnat compensate value at TxAGC */ - BOOLEAN Modify_TxAGC_Flag_PathA; - BOOLEAN Modify_TxAGC_Flag_PathB; - BOOLEAN Modify_TxAGC_Flag_PathC; - BOOLEAN Modify_TxAGC_Flag_PathD; - BOOLEAN Modify_TxAGC_Flag_PathA_CCK; - - s1Byte KfreeOffset[MAX_RF_PATH]; - - //--------------------------------------------------------------------// - - //for IQK - u4Byte RegC04; - u4Byte Reg874; - u4Byte RegC08; - u4Byte RegB68; - u4Byte RegB6C; - u4Byte Reg870; - u4Byte Reg860; - u4Byte Reg864; - - BOOLEAN bIQKInitialized; - BOOLEAN bLCKInProgress; - BOOLEAN bAntennaDetected; - u4Byte ADDA_backup[IQK_ADDA_REG_NUM]; - u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM]; - u4Byte IQK_BB_backup_recover[9]; - u4Byte IQK_BB_backup[IQK_BB_REG_NUM]; - - //for APK - u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a - u1Byte bAPKdone; - u1Byte bAPKThermalMeterIgnore; - u1Byte bDPdone; - u1Byte bDPPathAOK; - u1Byte bDPPathBOK; -}ODM_RF_CAL_T,*PODM_RF_CAL_T; - -VOID -odm_TXPowerTrackingCheckAP( - IN PVOID pDM_VOID - ); - -VOID -ODM_TXPowerTrackingCheck( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingThermalMeterInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckMP( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingCheckCE( - IN PVOID pDM_VOID - ); - - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - -VOID -odm_TXPowerTrackingCallbackThermalMeter92C( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingCallbackRXGainThermalMeter92D( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingCallbackThermalMeter92D( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingDirectCall92C( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingThermalMeterCheck( - IN PADAPTER Adapter - ); - -#endif - - - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_powertracking_ce.h b/network/wlan/WDI/HAL/phydm/phydm_powertracking_ce.h deleted file mode 100644 index 4d22d1c1..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_powertracking_ce.h +++ /dev/null @@ -1,298 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMPOWERTRACKING_H__ -#define __PHYDMPOWERTRACKING_H__ - -#define POWRTRACKING_VERSION "1.0" - -#define DPK_DELTA_MAPPING_NUM 13 -#define index_mapping_HP_NUM 15 -#define OFDM_TABLE_SIZE 43 -#define CCK_TABLE_SIZE 33 -#define CCK_TABLE_SIZE_88F 21 -#define TXSCALE_TABLE_SIZE 37 -#define CCK_TABLE_SIZE_8723D 41 - -#define TXPWR_TRACK_TABLE_SIZE 30 -#define DELTA_SWINGIDX_SIZE 30 -#define BAND_NUM 4 - -#define AVG_THERMAL_NUM 8 -#define HP_THERMAL_NUM 8 -#define IQK_MAC_REG_NUM 4 -#define IQK_ADDA_REG_NUM 16 -#define IQK_BB_REG_NUM_MAX 10 -#if (RTL8192D_SUPPORT==1) -#define IQK_BB_REG_NUM 10 -#else -#define IQK_BB_REG_NUM 9 -#endif - - -#define IQK_Matrix_REG_NUM 8 -#define IQK_Matrix_Settings_NUM 14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G - -extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE]; -extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]; - -extern u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE]; -extern u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16]; - - -extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE]; - -// <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. -static u1Byte DeltaSwingTableIdx_2GA_P_8188E[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9}; -static u1Byte DeltaSwingTableIdx_2GA_N_8188E[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11}; - -#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck - -typedef struct _IQK_MATRIX_REGS_SETTING{ - BOOLEAN bIQKDone; - s4Byte Value[3][IQK_Matrix_REG_NUM]; - BOOLEAN bBWIqkResultSaved[3]; -}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING; - -typedef struct ODM_RF_Calibration_Structure -{ - //for tx power tracking - - u4Byte RegA24; // for TempCCK - s4Byte RegE94; - s4Byte RegE9C; - s4Byte RegEB4; - s4Byte RegEBC; - - u1Byte TXPowercount; - BOOLEAN bTXPowerTrackingInit; - BOOLEAN bTXPowerTracking; - u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default - u1Byte TM_Trigger; - u1Byte InternalPA5G[2]; //pathA / pathB - - u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 - u1Byte ThermalValue; - u1Byte ThermalValue_LCK; - u1Byte ThermalValue_IQK; - u1Byte ThermalValue_DPK; - u1Byte ThermalValue_AVG[AVG_THERMAL_NUM]; - u1Byte ThermalValue_AVG_index; - u1Byte ThermalValue_RxGain; - u1Byte ThermalValue_Crystal; - u1Byte ThermalValue_DPKstore; - u1Byte ThermalValue_DPKtrack; - BOOLEAN TxPowerTrackingInProgress; - - BOOLEAN bReloadtxpowerindex; - u1Byte bRfPiEnable; - u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug - - - //------------------------- Tx power Tracking -------------------------// - u1Byte bCCKinCH14; - u1Byte CCK_index; - u1Byte OFDM_index[MAX_RF_PATH]; - s1Byte PowerIndexOffset[MAX_RF_PATH]; - s1Byte DeltaPowerIndex[MAX_RF_PATH]; - s1Byte DeltaPowerIndexLast[MAX_RF_PATH]; - BOOLEAN bTxPowerChanged; - - u1Byte ThermalValue_HP[HP_THERMAL_NUM]; - u1Byte ThermalValue_HP_index; - IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM]; - u1Byte Delta_LCK; - s1Byte BBSwingDiff2G, BBSwingDiff5G; // Unit: dB - u1Byte DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE]; - - u1Byte BbSwingIdxOfdm[MAX_RF_PATH]; - u1Byte BbSwingIdxOfdmCurrent; -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - u1Byte BbSwingIdxOfdmBase[MAX_RF_PATH]; -#else - u1Byte BbSwingIdxOfdmBase; -#endif - BOOLEAN BbSwingFlagOfdm; - u1Byte BbSwingIdxCck; - u1Byte BbSwingIdxCckCurrent; - u1Byte BbSwingIdxCckBase; - u1Byte DefaultOfdmIndex; - u1Byte DefaultCckIndex; - BOOLEAN BbSwingFlagCck; - - s1Byte Absolute_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_CCKSwingIdx; - s1Byte Modify_TxAGC_Value; /*Remnat compensate value at TxAGC */ - BOOLEAN Modify_TxAGC_Flag_PathA; - BOOLEAN Modify_TxAGC_Flag_PathB; - BOOLEAN Modify_TxAGC_Flag_PathC; - BOOLEAN Modify_TxAGC_Flag_PathD; - BOOLEAN Modify_TxAGC_Flag_PathA_CCK; - - s1Byte KfreeOffset[MAX_RF_PATH]; - - //--------------------------------------------------------------------// - - //for IQK - u4Byte RegC04; - u4Byte Reg874; - u4Byte RegC08; - u4Byte RegB68; - u4Byte RegB6C; - u4Byte Reg870; - u4Byte Reg860; - u4Byte Reg864; - - BOOLEAN bIQKInitialized; - BOOLEAN bLCKInProgress; - BOOLEAN bAntennaDetected; - BOOLEAN bNeedIQK; - BOOLEAN bIQKInProgress; - u1Byte Delta_IQK; - u4Byte ADDA_backup[IQK_ADDA_REG_NUM]; - u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM]; - u4Byte IQK_BB_backup_recover[9]; - u4Byte IQK_BB_backup[IQK_BB_REG_NUM]; - u4Byte TxIQC_8723B[2][3][2]; // { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} - u4Byte RxIQC_8723B[2][2][2]; // { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} - u4Byte TxIQC_8703B[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/ - u4Byte RxIQC_8703B[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/ - - - - // IQK time measurement - u8Byte IQK_StartTime; - u8Byte IQK_ProgressingTime; - u4Byte LOK_Result; - - //for APK - u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a - u1Byte bAPKdone; - u1Byte bAPKThermalMeterIgnore; - - // DPK - BOOLEAN bDPKFail; - u1Byte bDPdone; - u1Byte bDPPathAOK; - u1Byte bDPPathBOK; - - u4Byte TxLOK[2]; - u4Byte DpkTxAGC; - s4Byte DpkGain; - u4Byte DpkThermal[4]; -}ODM_RF_CAL_T,*PODM_RF_CAL_T; - - -VOID -ODM_TXPowerTrackingCheck( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckAP( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingThermalMeterInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckMP( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingCheckCE( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - -VOID -odm_TXPowerTrackingCallbackThermalMeter92C( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingCallbackRXGainThermalMeter92D( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingCallbackThermalMeter92D( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingDirectCall92C( - IN PADAPTER Adapter - ); - -VOID -odm_TXPowerTrackingThermalMeterCheck( - IN PADAPTER Adapter - ); - -#endif - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_powertracking_win.h b/network/wlan/WDI/HAL/phydm/phydm_powertracking_win.h deleted file mode 100644 index f4eac12e..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_powertracking_win.h +++ /dev/null @@ -1,272 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMPOWERTRACKING_H__ -#define __PHYDMPOWERTRACKING_H__ - -#define POWRTRACKING_VERSION "1.0" - -#define DPK_DELTA_MAPPING_NUM 13 -#define index_mapping_HP_NUM 15 -#define TXSCALE_TABLE_SIZE 37 -#define CCK_TABLE_SIZE_8723D 41 -#define TXPWR_TRACK_TABLE_SIZE 30 -#define DELTA_SWINGIDX_SIZE 30 -#define BAND_NUM 3 -#define MAX_RF_PATH 4 -#define CCK_TABLE_SIZE_88F 21 - - -#define dm_CheckTXPowerTracking ODM_TXPowerTrackingCheck - -#define IQK_Matrix_Settings_NUM 14+24+21 // Channels_2_4G_NUM + Channels_5G_20M_NUM + Channels_5G -#define AVG_THERMAL_NUM 8 -#define HP_THERMAL_NUM 8 -#define IQK_Matrix_REG_NUM 8 -#define IQK_MAC_REG_NUM 4 -#define IQK_ADDA_REG_NUM 16 -#if (RTL8192D_SUPPORT==1) -#define IQK_BB_REG_NUM 10 -#else -#define IQK_BB_REG_NUM 9 -#endif - -extern u4Byte OFDMSwingTable[OFDM_TABLE_SIZE]; -extern u1Byte CCKSwingTable_Ch1_Ch13[CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch14 [CCK_TABLE_SIZE][8]; - -extern u4Byte OFDMSwingTable_New[OFDM_TABLE_SIZE]; -extern u1Byte CCKSwingTable_Ch1_Ch13_New[CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch14_New [CCK_TABLE_SIZE][8]; -extern u1Byte CCKSwingTable_Ch1_Ch14_88F[CCK_TABLE_SIZE_88F][16]; -extern u4Byte CCKSwingTable_Ch1_Ch14_8723D[CCK_TABLE_SIZE_8723D]; - -extern u4Byte TxScalingTable_Jaguar[TXSCALE_TABLE_SIZE]; - -// <20121018, Kordan> In case fail to read TxPowerTrack.txt, we use the table of 88E as the default table. -static u1Byte DeltaSwingTableIdx_2GA_P_8188E[] = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 7, 7, 8, 8, 8, 9, 9, 9, 9, 9}; -static u1Byte DeltaSwingTableIdx_2GA_N_8188E[] = {0, 0, 0, 2, 2, 3, 3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 7, 8, 8, 9, 9, 10, 10, 10, 11, 11, 11, 11}; - -VOID -ODM_TXPowerTrackingCheck( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckAP( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingThermalMeterInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingInit( - IN PVOID pDM_VOID - ); - -VOID -odm_TXPowerTrackingCheckMP( - IN PVOID pDM_VOID - ); - - -VOID -odm_TXPowerTrackingCheckCE( - IN PVOID pDM_VOID - ); - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN)) - - -VOID -odm_TXPowerTrackingThermalMeterCheck( - IN PADAPTER Adapter - ); - -#endif - -typedef struct _IQK_MATRIX_REGS_SETTING{ - BOOLEAN bIQKDone; - s4Byte Value[3][IQK_Matrix_REG_NUM]; - BOOLEAN bBWIqkResultSaved[3]; -}IQK_MATRIX_REGS_SETTING,*PIQK_MATRIX_REGS_SETTING; - -typedef struct ODM_RF_Calibration_Structure -{ - //for tx power tracking - - u4Byte RegA24; // for TempCCK - s4Byte RegE94; - s4Byte RegE9C; - s4Byte RegEB4; - s4Byte RegEBC; - - //u1Byte bTXPowerTracking; - u1Byte TXPowercount; - BOOLEAN bTXPowerTrackingInit; - BOOLEAN bTXPowerTracking; - u1Byte TxPowerTrackControl; //for mp mode, turn off txpwrtracking as default - u1Byte TM_Trigger; - u1Byte InternalPA5G[2]; //pathA / pathB - - u1Byte ThermalMeter[2]; // ThermalMeter, index 0 for RFIC0, and 1 for RFIC1 - u1Byte ThermalValue; - u1Byte ThermalValue_LCK; - u1Byte ThermalValue_IQK; - u1Byte ThermalValue_AVG[AVG_THERMAL_NUM]; - u1Byte ThermalValue_AVG_index; - u1Byte ThermalValue_RxGain; - - BOOLEAN bReloadtxpowerindex; - u1Byte bRfPiEnable; - u4Byte TXPowerTrackingCallbackCnt; //cosa add for debug - - - //------------------------- Tx power Tracking -------------------------// - u1Byte bCCKinCH14; - u1Byte CCK_index; - u1Byte OFDM_index[MAX_RF_PATH]; - s1Byte PowerIndexOffset[MAX_RF_PATH]; - s1Byte DeltaPowerIndex[MAX_RF_PATH]; - s1Byte DeltaPowerIndexLast[MAX_RF_PATH]; - BOOLEAN bTxPowerChanged; - - u1Byte ThermalValue_HP[HP_THERMAL_NUM]; - u1Byte ThermalValue_HP_index; - IQK_MATRIX_REGS_SETTING IQKMatrixRegSetting[IQK_Matrix_Settings_NUM]; - u1Byte Delta_LCK; - s1Byte BBSwingDiff2G, BBSwingDiff5G; // Unit: dB - u1Byte DeltaSwingTableIdx_2GCCKA_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKA_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKB_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKB_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKC_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKC_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKD_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GCCKD_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GB_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GB_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GC_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GC_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GD_P[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GD_N[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GA_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GA_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GB_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GB_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GC_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GC_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GD_P[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_5GD_N[BAND_NUM][DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_P_8188E[DELTA_SWINGIDX_SIZE]; - u1Byte DeltaSwingTableIdx_2GA_N_8188E[DELTA_SWINGIDX_SIZE]; - - u1Byte BbSwingIdxOfdm[MAX_RF_PATH]; - u1Byte BbSwingIdxOfdmCurrent; -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - u1Byte BbSwingIdxOfdmBase[MAX_RF_PATH]; -#else - u1Byte BbSwingIdxOfdmBase; -#endif - BOOLEAN BbSwingFlagOfdm; - u1Byte BbSwingIdxCck; - u1Byte BbSwingIdxCckCurrent; - u1Byte BbSwingIdxCckBase; - u1Byte DefaultOfdmIndex; - u1Byte DefaultCckIndex; - BOOLEAN BbSwingFlagCck; - - s1Byte Absolute_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_OFDMSwingIdx[MAX_RF_PATH]; - s1Byte Remnant_CCKSwingIdx; - s1Byte Modify_TxAGC_Value; /*Remnat compensate value at TxAGC */ - BOOLEAN Modify_TxAGC_Flag_PathA; - BOOLEAN Modify_TxAGC_Flag_PathB; - BOOLEAN Modify_TxAGC_Flag_PathC; - BOOLEAN Modify_TxAGC_Flag_PathD; - BOOLEAN Modify_TxAGC_Flag_PathA_CCK; - - s1Byte KfreeOffset[MAX_RF_PATH]; - - //--------------------------------------------------------------------// - - //for IQK - u4Byte RegC04; - u4Byte Reg874; - u4Byte RegC08; - u4Byte RegB68; - u4Byte RegB6C; - u4Byte Reg870; - u4Byte Reg860; - u4Byte Reg864; - - BOOLEAN bIQKInitialized; - BOOLEAN bLCKInProgress; - BOOLEAN bAntennaDetected; - BOOLEAN bNeedIQK; - BOOLEAN bIQKInProgress; - u1Byte Delta_IQK; - u4Byte ADDA_backup[IQK_ADDA_REG_NUM]; - u4Byte IQK_MAC_backup[IQK_MAC_REG_NUM]; - u4Byte IQK_BB_backup_recover[9]; - u4Byte IQK_BB_backup[IQK_BB_REG_NUM]; - u4Byte TxIQC_8723B[2][3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}} */ - u4Byte RxIQC_8723B[2][2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}} */ - u4Byte TxIQC_8703B[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/ - u4Byte RxIQC_8703B[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/ - u4Byte TxIQC_8723D[3][2]; /* { {S1: 0xc94, 0xc80, 0xc4c} , {S0: 0xc9c, 0xc88, 0xc4c}}*/ - u4Byte RxIQC_8723D[2][2]; /* { {S1: 0xc14, 0xca0} , {S0: 0xc14, 0xca0}}*/ - - - - // IQK time measurement - u8Byte IQK_StartTime; - u8Byte IQK_ProgressingTime; - u4Byte LOK_Result; - - //for APK - u4Byte APKoutput[2][2]; //path A/B; output1_1a/output1_2a - u1Byte bAPKdone; - u1Byte bAPKThermalMeterIgnore; - - // DPK - BOOLEAN bDPKFail; - u1Byte bDPdone; - u1Byte bDPPathAOK; - u1Byte bDPPathBOK; - - u4Byte TxLOK[2]; - u4Byte DpkTxAGC; - s4Byte DpkGain; - u4Byte DpkThermal[2]; - - s1Byte Modify_TxAGC_Value_OFDM; - s1Byte Modify_TxAGC_Value_CCK; -}ODM_RF_CAL_T,*PODM_RF_CAL_T; - - - - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_pre_define.h b/network/wlan/WDI/HAL/phydm/phydm_pre_define.h deleted file mode 100644 index f3b5733d..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_pre_define.h +++ /dev/null @@ -1,617 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __PHYDMPREDEFINE_H__ -#define __PHYDMPREDEFINE_H__ - -//1 ============================================================ -//1 Definition -//1 ============================================================ - -//Max path of IC -#define MAX_PATH_NUM_92CS 2 -#define MAX_PATH_NUM_8188E 1 -#define MAX_PATH_NUM_8192E 2 -#define MAX_PATH_NUM_8723B 1 -#define MAX_PATH_NUM_8812A 2 -#define MAX_PATH_NUM_8821A 1 -#define MAX_PATH_NUM_8814A 4 -#define MAX_PATH_NUM_8822B 2 -#define MAX_PATH_NUM_8821B 2 -#define MAX_PATH_NUM_8703B 1 -#define MAX_PATH_NUM_8723D 1 -#define MAX_PATH_NUM_8188F 1 - -//Max RF path -#define ODM_RF_PATH_MAX 2 -#define ODM_RF_PATH_MAX_JAGUAR 4 - -//number of entry -#if(DM_ODM_SUPPORT_TYPE & (ODM_CE)) - #define ASSOCIATE_ENTRY_NUM MACID_NUM_SW_LIMIT /* Max size of AsocEntry[].*/ - #define ODM_ASSOCIATE_ENTRY_NUM ASSOCIATE_ENTRY_NUM -#elif(DM_ODM_SUPPORT_TYPE & (ODM_AP|ODM_ADSL)) - #define ASSOCIATE_ENTRY_NUM NUM_STAT - #define ODM_ASSOCIATE_ENTRY_NUM (ASSOCIATE_ENTRY_NUM+1) -#else - #define ODM_ASSOCIATE_ENTRY_NUM ((ASSOCIATE_ENTRY_NUM*3)+1) -#endif - -/* -----MGN rate--------------------------------- */ - -#define ODM_MGN_1M 0x02 -#define ODM_MGN_2M 0x04 -#define ODM_MGN_5_5M 0x0b -#define ODM_MGN_11M 0x16 - -#define ODM_MGN_6M 0x0c -#define ODM_MGN_9M 0x12 -#define ODM_MGN_12M 0x18 -#define ODM_MGN_18M 0x24 -#define ODM_MGN_24M 0x30 -#define ODM_MGN_36M 0x48 -#define ODM_MGN_48M 0x60 -#define ODM_MGN_54M 0x6c - -/*TxHT = 1*/ -#define ODM_MGN_MCS0 0x80 -#define ODM_MGN_MCS1 0x81 -#define ODM_MGN_MCS2 0x82 -#define ODM_MGN_MCS3 0x83 -#define ODM_MGN_MCS4 0x84 -#define ODM_MGN_MCS5 0x85 -#define ODM_MGN_MCS6 0x86 -#define ODM_MGN_MCS7 0x87 -#define ODM_MGN_MCS8 0x88 -#define ODM_MGN_MCS9 0x89 -#define ODM_MGN_MCS10 0x8a -#define ODM_MGN_MCS11 0x8b -#define ODM_MGN_MCS12 0x8c -#define ODM_MGN_MCS13 0x8d -#define ODM_MGN_MCS14 0x8e -#define ODM_MGN_MCS15 0x8f -#define ODM_MGN_VHT1SS_MCS0 0x90 -#define ODM_MGN_VHT1SS_MCS1 0x91 -#define ODM_MGN_VHT1SS_MCS2 0x92 -#define ODM_MGN_VHT1SS_MCS3 0x93 -#define ODM_MGN_VHT1SS_MCS4 0x94 -#define ODM_MGN_VHT1SS_MCS5 0x95 -#define ODM_MGN_VHT1SS_MCS6 0x96 -#define ODM_MGN_VHT1SS_MCS7 0x97 -#define ODM_MGN_VHT1SS_MCS8 0x98 -#define ODM_MGN_VHT1SS_MCS9 0x99 -#define ODM_MGN_VHT2SS_MCS0 0x9a -#define ODM_MGN_VHT2SS_MCS1 0x9b -#define ODM_MGN_VHT2SS_MCS2 0x9c -#define ODM_MGN_VHT2SS_MCS3 0x9d -#define ODM_MGN_VHT2SS_MCS4 0x9e -#define ODM_MGN_VHT2SS_MCS5 0x9f -#define ODM_MGN_VHT2SS_MCS6 0xa0 -#define ODM_MGN_VHT2SS_MCS7 0xa1 -#define ODM_MGN_VHT2SS_MCS8 0xa2 -#define ODM_MGN_VHT2SS_MCS9 0xa3 - -#define ODM_MGN_MCS0_SG 0xc0 -#define ODM_MGN_MCS1_SG 0xc1 -#define ODM_MGN_MCS2_SG 0xc2 -#define ODM_MGN_MCS3_SG 0xc3 -#define ODM_MGN_MCS4_SG 0xc4 -#define ODM_MGN_MCS5_SG 0xc5 -#define ODM_MGN_MCS6_SG 0xc6 -#define ODM_MGN_MCS7_SG 0xc7 -#define ODM_MGN_MCS8_SG 0xc8 -#define ODM_MGN_MCS9_SG 0xc9 -#define ODM_MGN_MCS10_SG 0xca -#define ODM_MGN_MCS11_SG 0xcb -#define ODM_MGN_MCS12_SG 0xcc -#define ODM_MGN_MCS13_SG 0xcd -#define ODM_MGN_MCS14_SG 0xce -#define ODM_MGN_MCS15_SG 0xcf - -/* -----DESC rate--------------------------------- */ - -#define ODM_RATEMCS15_SG 0x1c -#define ODM_RATEMCS32 0x20 - - -// CCK Rates, TxHT = 0 -#define ODM_RATE1M 0x00 -#define ODM_RATE2M 0x01 -#define ODM_RATE5_5M 0x02 -#define ODM_RATE11M 0x03 -// OFDM Rates, TxHT = 0 -#define ODM_RATE6M 0x04 -#define ODM_RATE9M 0x05 -#define ODM_RATE12M 0x06 -#define ODM_RATE18M 0x07 -#define ODM_RATE24M 0x08 -#define ODM_RATE36M 0x09 -#define ODM_RATE48M 0x0A -#define ODM_RATE54M 0x0B -// MCS Rates, TxHT = 1 -#define ODM_RATEMCS0 0x0C -#define ODM_RATEMCS1 0x0D -#define ODM_RATEMCS2 0x0E -#define ODM_RATEMCS3 0x0F -#define ODM_RATEMCS4 0x10 -#define ODM_RATEMCS5 0x11 -#define ODM_RATEMCS6 0x12 -#define ODM_RATEMCS7 0x13 -#define ODM_RATEMCS8 0x14 -#define ODM_RATEMCS9 0x15 -#define ODM_RATEMCS10 0x16 -#define ODM_RATEMCS11 0x17 -#define ODM_RATEMCS12 0x18 -#define ODM_RATEMCS13 0x19 -#define ODM_RATEMCS14 0x1A -#define ODM_RATEMCS15 0x1B -#define ODM_RATEMCS16 0x1C -#define ODM_RATEMCS17 0x1D -#define ODM_RATEMCS18 0x1E -#define ODM_RATEMCS19 0x1F -#define ODM_RATEMCS20 0x20 -#define ODM_RATEMCS21 0x21 -#define ODM_RATEMCS22 0x22 -#define ODM_RATEMCS23 0x23 -#define ODM_RATEMCS24 0x24 -#define ODM_RATEMCS25 0x25 -#define ODM_RATEMCS26 0x26 -#define ODM_RATEMCS27 0x27 -#define ODM_RATEMCS28 0x28 -#define ODM_RATEMCS29 0x29 -#define ODM_RATEMCS30 0x2A -#define ODM_RATEMCS31 0x2B -#define ODM_RATEVHTSS1MCS0 0x2C -#define ODM_RATEVHTSS1MCS1 0x2D -#define ODM_RATEVHTSS1MCS2 0x2E -#define ODM_RATEVHTSS1MCS3 0x2F -#define ODM_RATEVHTSS1MCS4 0x30 -#define ODM_RATEVHTSS1MCS5 0x31 -#define ODM_RATEVHTSS1MCS6 0x32 -#define ODM_RATEVHTSS1MCS7 0x33 -#define ODM_RATEVHTSS1MCS8 0x34 -#define ODM_RATEVHTSS1MCS9 0x35 -#define ODM_RATEVHTSS2MCS0 0x36 -#define ODM_RATEVHTSS2MCS1 0x37 -#define ODM_RATEVHTSS2MCS2 0x38 -#define ODM_RATEVHTSS2MCS3 0x39 -#define ODM_RATEVHTSS2MCS4 0x3A -#define ODM_RATEVHTSS2MCS5 0x3B -#define ODM_RATEVHTSS2MCS6 0x3C -#define ODM_RATEVHTSS2MCS7 0x3D -#define ODM_RATEVHTSS2MCS8 0x3E -#define ODM_RATEVHTSS2MCS9 0x3F -#define ODM_RATEVHTSS3MCS0 0x40 -#define ODM_RATEVHTSS3MCS1 0x41 -#define ODM_RATEVHTSS3MCS2 0x42 -#define ODM_RATEVHTSS3MCS3 0x43 -#define ODM_RATEVHTSS3MCS4 0x44 -#define ODM_RATEVHTSS3MCS5 0x45 -#define ODM_RATEVHTSS3MCS6 0x46 -#define ODM_RATEVHTSS3MCS7 0x47 -#define ODM_RATEVHTSS3MCS8 0x48 -#define ODM_RATEVHTSS3MCS9 0x49 -#define ODM_RATEVHTSS4MCS0 0x4A -#define ODM_RATEVHTSS4MCS1 0x4B -#define ODM_RATEVHTSS4MCS2 0x4C -#define ODM_RATEVHTSS4MCS3 0x4D -#define ODM_RATEVHTSS4MCS4 0x4E -#define ODM_RATEVHTSS4MCS5 0x4F -#define ODM_RATEVHTSS4MCS6 0x50 -#define ODM_RATEVHTSS4MCS7 0x51 -#define ODM_RATEVHTSS4MCS8 0x52 -#define ODM_RATEVHTSS4MCS9 0x53 - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS4MCS9+1) -#else - #if (RTL8192E_SUPPORT == 1) - #define ODM_NUM_RATE_IDX (ODM_RATEMCS15+1) - #elif (RTL8723B_SUPPORT == 1) || (RTL8188E_SUPPORT == 1) || (RTL8188F_SUPPORT == 1) - #define ODM_NUM_RATE_IDX (ODM_RATEMCS7+1) - #elif (RTL8821A_SUPPORT == 1) || (RTL8881A_SUPPORT == 1) - #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS1MCS9+1) - #elif (RTL8812A_SUPPORT == 1) - #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS2MCS9+1) - #elif(RTL8814A_SUPPORT == 1) - #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS3MCS9+1) - #else - #define ODM_NUM_RATE_IDX (ODM_RATEVHTSS4MCS9+1) - #endif -#endif - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#define CONFIG_SFW_SUPPORTED -#endif - -//1 ============================================================ -//1 enumeration -//1 ============================================================ - - -// ODM_CMNINFO_INTERFACE -typedef enum tag_ODM_Support_Interface_Definition -{ - ODM_ITRF_PCIE = 0x1, - ODM_ITRF_USB = 0x2, - ODM_ITRF_SDIO = 0x4, - ODM_ITRF_ALL = 0x7, -}ODM_INTERFACE_E; - -// ODM_CMNINFO_IC_TYPE -typedef enum tag_ODM_Support_IC_Type_Definition -{ - ODM_RTL8192S = BIT0, - ODM_RTL8192C = BIT1, - ODM_RTL8192D = BIT2, - ODM_RTL8723A = BIT3, - ODM_RTL8188E = BIT4, - ODM_RTL8812 = BIT5, - ODM_RTL8821 = BIT6, - ODM_RTL8192E = BIT7, - ODM_RTL8723B = BIT8, - ODM_RTL8814A = BIT9, - ODM_RTL8881A = BIT10, - ODM_RTL8821B = BIT11, - ODM_RTL8822B = BIT12, - ODM_RTL8703B = BIT13, - ODM_RTL8195A = BIT14, - ODM_RTL8188F = BIT15, - ODM_RTL8723D = BIT16 -}ODM_IC_TYPE_E; - - - - -#define ODM_IC_11N_SERIES (ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8703B|ODM_RTL8188F|ODM_RTL8723D) -#define ODM_IC_11AC_SERIES (ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A|ODM_RTL8821B|ODM_RTL8822B) -#define ODM_IC_TXBF_SUPPORT (ODM_RTL8192E|ODM_RTL8812|ODM_RTL8821|ODM_RTL8814A|ODM_RTL8881A|ODM_RTL8822B) -#define ODM_IC_11N_GAIN_IDX_EDCCA (ODM_RTL8195A|ODM_RTL8703B|ODM_RTL8188F|ODM_RTL8723D) -#define ODM_IC_11AC_GAIN_IDX_EDCCA (ODM_RTL8814A|ODM_RTL8822B) - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) - -#ifdef RTK_AC_SUPPORT -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#else -#define ODM_IC_11AC_SERIES_SUPPORT 0 -#endif - -#define ODM_IC_11N_SERIES_SUPPORT 1 -#define ODM_CONFIG_BT_COEXIST 0 - -#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#define ODM_IC_11N_SERIES_SUPPORT 1 -#define ODM_CONFIG_BT_COEXIST 1 - -#else - -#if((RTL8192C_SUPPORT == 1) || (RTL8192D_SUPPORT == 1) || (RTL8723A_SUPPORT == 1) || (RTL8188E_SUPPORT == 1) ||\ -(RTL8723B_SUPPORT == 1) || (RTL8192E_SUPPORT == 1) || (RTL8195A_SUPPORT == 1) || (RTL8703B_SUPPORT == 1) || \ -(RTL8188F_SUPPORT == 1)) -#define ODM_IC_11N_SERIES_SUPPORT 1 -#define ODM_IC_11AC_SERIES_SUPPORT 0 -#else -#define ODM_IC_11N_SERIES_SUPPORT 0 -#define ODM_IC_11AC_SERIES_SUPPORT 1 -#endif - -#ifdef CONFIG_BT_COEXIST -#define ODM_CONFIG_BT_COEXIST 1 -#else -#define ODM_CONFIG_BT_COEXIST 0 -#endif - -#endif - - -//ODM_CMNINFO_CUT_VER -typedef enum tag_ODM_Cut_Version_Definition -{ - ODM_CUT_A = 0, - ODM_CUT_B = 1, - ODM_CUT_C = 2, - ODM_CUT_D = 3, - ODM_CUT_E = 4, - ODM_CUT_F = 5, - - ODM_CUT_I = 8, - ODM_CUT_J = 9, - ODM_CUT_K = 10, - ODM_CUT_TEST = 15, -}ODM_CUT_VERSION_E; - -// ODM_CMNINFO_FAB_VER -typedef enum tag_ODM_Fab_Version_Definition -{ - ODM_TSMC = 0, - ODM_UMC = 1, -}ODM_FAB_E; - -// ODM_CMNINFO_RF_TYPE -// -// For example 1T2R (A+AB = BIT0|BIT4|BIT5) -// -typedef enum tag_ODM_RF_Path_Bit_Definition -{ - ODM_RF_A = BIT0, - ODM_RF_B = BIT1, - ODM_RF_C = BIT2, - ODM_RF_D = BIT3, -}ODM_RF_PATH_E; - -typedef enum tag_PHYDM_RF_TX_NUM { - ODM_1T = 1, - ODM_2T = 2, - ODM_3T = 3, - ODM_4T = 4, -} ODM_RF_TX_NUM_E; - -typedef enum tag_ODM_RF_Type_Definition { - ODM_1T1R, - ODM_1T2R, - ODM_2T2R, - ODM_2T2R_GREEN, - ODM_2T3R, - ODM_2T4R, - ODM_3T3R, - ODM_3T4R, - ODM_4T4R, - ODM_XTXR -}ODM_RF_TYPE_E; - - -typedef enum tag_ODM_MAC_PHY_Mode_Definition -{ - ODM_SMSP = 0, - ODM_DMSP = 1, - ODM_DMDP = 2, -}ODM_MAC_PHY_MODE_E; - - -typedef enum tag_BT_Coexist_Definition -{ - ODM_BT_BUSY = 1, - ODM_BT_ON = 2, - ODM_BT_OFF = 3, - ODM_BT_NONE = 4, -}ODM_BT_COEXIST_E; - -// ODM_CMNINFO_OP_MODE -typedef enum tag_Operation_Mode_Definition -{ - ODM_NO_LINK = BIT0, - ODM_LINK = BIT1, - ODM_SCAN = BIT2, - ODM_POWERSAVE = BIT3, - ODM_AP_MODE = BIT4, - ODM_CLIENT_MODE = BIT5, - ODM_AD_HOC = BIT6, - ODM_WIFI_DIRECT = BIT7, - ODM_WIFI_DISPLAY = BIT8, -}ODM_OPERATION_MODE_E; - -// ODM_CMNINFO_WM_MODE -#if (DM_ODM_SUPPORT_TYPE & (ODM_CE)) -typedef enum tag_Wireless_Mode_Definition -{ - ODM_WM_UNKNOW = 0x0, - ODM_WM_B = BIT0, - ODM_WM_G = BIT1, - ODM_WM_A = BIT2, - ODM_WM_N24G = BIT3, - ODM_WM_N5G = BIT4, - ODM_WM_AUTO = BIT5, - ODM_WM_AC = BIT6, -}ODM_WIRELESS_MODE_E; -#else -typedef enum tag_Wireless_Mode_Definition -{ - ODM_WM_UNKNOWN = 0x00,/*0x0*/ - ODM_WM_A = BIT0, /* 0x1*/ - ODM_WM_B = BIT1, /* 0x2*/ - ODM_WM_G = BIT2,/* 0x4*/ - ODM_WM_AUTO = BIT3,/* 0x8*/ - ODM_WM_N24G = BIT4,/* 0x10*/ - ODM_WM_N5G = BIT5,/* 0x20*/ - ODM_WM_AC_5G = BIT6,/* 0x40*/ - ODM_WM_AC_24G = BIT7,/* 0x80*/ - ODM_WM_AC_ONLY = BIT8,/* 0x100*/ - ODM_WM_MAX = BIT11/* 0x800*/ - -}ODM_WIRELESS_MODE_E; -#endif - -// ODM_CMNINFO_BAND -typedef enum tag_Band_Type_Definition -{ -#if (DM_ODM_SUPPORT_TYPE & (ODM_AP)) - ODM_BAND_2_4G = BIT0, - ODM_BAND_5G = BIT1, -#else - ODM_BAND_2_4G = 0, - ODM_BAND_5G, - ODM_BAND_ON_BOTH, - ODM_BANDMAX -#endif -}ODM_BAND_TYPE_E; - - -// ODM_CMNINFO_SEC_CHNL_OFFSET -typedef enum tag_Secondary_Channel_Offset_Definition -{ - ODM_DONT_CARE = 0, - ODM_BELOW = 1, - ODM_ABOVE = 2 -}ODM_SEC_CHNL_OFFSET_E; - -// ODM_CMNINFO_SEC_MODE -typedef enum tag_Security_Definition -{ - ODM_SEC_OPEN = 0, - ODM_SEC_WEP40 = 1, - ODM_SEC_TKIP = 2, - ODM_SEC_RESERVE = 3, - ODM_SEC_AESCCMP = 4, - ODM_SEC_WEP104 = 5, - ODM_WEP_WPA_MIXED = 6, // WEP + WPA - ODM_SEC_SMS4 = 7, -}ODM_SECURITY_E; - -// ODM_CMNINFO_BW -typedef enum tag_Bandwidth_Definition -{ - ODM_BW20M = 0, - ODM_BW40M = 1, - ODM_BW80M = 2, - ODM_BW160M = 3, - ODM_BW5M = 4, - ODM_BW10M = 5, - ODM_BW_MAX = 6 -}ODM_BW_E; - -// ODM_CMNINFO_CHNL - -// ODM_CMNINFO_BOARD_TYPE -typedef enum tag_Board_Definition -{ - ODM_BOARD_DEFAULT = 0, // The DEFAULT case. - ODM_BOARD_MINICARD = BIT(0), // 0 = non-mini card, 1= mini card. - ODM_BOARD_SLIM = BIT(1), // 0 = non-slim card, 1 = slim card - ODM_BOARD_BT = BIT(2), // 0 = without BT card, 1 = with BT - ODM_BOARD_EXT_PA = BIT(3), // 0 = no 2G ext-PA, 1 = existing 2G ext-PA - ODM_BOARD_EXT_LNA = BIT(4), // 0 = no 2G ext-LNA, 1 = existing 2G ext-LNA - ODM_BOARD_EXT_TRSW = BIT(5), // 0 = no ext-TRSW, 1 = existing ext-TRSW - ODM_BOARD_EXT_PA_5G = BIT(6), // 0 = no 5G ext-PA, 1 = existing 5G ext-PA - ODM_BOARD_EXT_LNA_5G= BIT(7), // 0 = no 5G ext-LNA, 1 = existing 5G ext-LNA -}ODM_BOARD_TYPE_E; - -typedef enum tag_ODM_Package_Definition -{ - ODM_PACKAGE_DEFAULT = 0, - ODM_PACKAGE_QFN68 = BIT(0), - ODM_PACKAGE_TFBGA90 = BIT(1), - ODM_PACKAGE_TFBGA79 = BIT(2), -}ODM_Package_TYPE_E; - -typedef enum tag_ODM_TYPE_GPA_Definition { - TYPE_GPA0 = 0x0000, - TYPE_GPA1 = 0x0055, - TYPE_GPA2 = 0x00AA, - TYPE_GPA3 = 0x00FF, - TYPE_GPA4 = 0x5500, - TYPE_GPA5 = 0x5555, - TYPE_GPA6 = 0x55AA, - TYPE_GPA7 = 0x55FF, - TYPE_GPA8 = 0xAA00, - TYPE_GPA9 = 0xAA55, - TYPE_GPA10 = 0xAAAA, - TYPE_GPA11 = 0xAAFF, - TYPE_GPA12 = 0xFF00, - TYPE_GPA13 = 0xFF55, - TYPE_GPA14 = 0xFFAA, - TYPE_GPA15 = 0xFFFF, -}ODM_TYPE_GPA_E; - -typedef enum tag_ODM_TYPE_APA_Definition { - TYPE_APA0 = 0x0000, - TYPE_APA1 = 0x0055, - TYPE_APA2 = 0x00AA, - TYPE_APA3 = 0x00FF, - TYPE_APA4 = 0x5500, - TYPE_APA5 = 0x5555, - TYPE_APA6 = 0x55AA, - TYPE_APA7 = 0x55FF, - TYPE_APA8 = 0xAA00, - TYPE_APA9 = 0xAA55, - TYPE_APA10 = 0xAAAA, - TYPE_APA11 = 0xAAFF, - TYPE_APA12 = 0xFF00, - TYPE_APA13 = 0xFF55, - TYPE_APA14 = 0xFFAA, - TYPE_APA15 = 0xFFFF, -}ODM_TYPE_APA_E; - -typedef enum tag_ODM_TYPE_GLNA_Definition { - TYPE_GLNA0 = 0x0000, - TYPE_GLNA1 = 0x0055, - TYPE_GLNA2 = 0x00AA, - TYPE_GLNA3 = 0x00FF, - TYPE_GLNA4 = 0x5500, - TYPE_GLNA5 = 0x5555, - TYPE_GLNA6 = 0x55AA, - TYPE_GLNA7 = 0x55FF, - TYPE_GLNA8 = 0xAA00, - TYPE_GLNA9 = 0xAA55, - TYPE_GLNA10 = 0xAAAA, - TYPE_GLNA11 = 0xAAFF, - TYPE_GLNA12 = 0xFF00, - TYPE_GLNA13 = 0xFF55, - TYPE_GLNA14 = 0xFFAA, - TYPE_GLNA15 = 0xFFFF, -}ODM_TYPE_GLNA_E; - -typedef enum tag_ODM_TYPE_ALNA_Definition { - TYPE_ALNA0 = 0x0000, - TYPE_ALNA1 = 0x0055, - TYPE_ALNA2 = 0x00AA, - TYPE_ALNA3 = 0x00FF, - TYPE_ALNA4 = 0x5500, - TYPE_ALNA5 = 0x5555, - TYPE_ALNA6 = 0x55AA, - TYPE_ALNA7 = 0x55FF, - TYPE_ALNA8 = 0xAA00, - TYPE_ALNA9 = 0xAA55, - TYPE_ALNA10 = 0xAAAA, - TYPE_ALNA11 = 0xAAFF, - TYPE_ALNA12 = 0xFF00, - TYPE_ALNA13 = 0xFF55, - TYPE_ALNA14 = 0xFFAA, - TYPE_ALNA15 = 0xFFFF, -}ODM_TYPE_ALNA_E; - - -typedef enum _ODM_RF_RADIO_PATH { - ODM_RF_PATH_A = 0, //Radio Path A - ODM_RF_PATH_B = 1, //Radio Path B - ODM_RF_PATH_C = 2, //Radio Path C - ODM_RF_PATH_D = 3, //Radio Path D - ODM_RF_PATH_AB, - ODM_RF_PATH_AC, - ODM_RF_PATH_AD, - ODM_RF_PATH_BC, - ODM_RF_PATH_BD, - ODM_RF_PATH_CD, - ODM_RF_PATH_ABC, - ODM_RF_PATH_ACD, - ODM_RF_PATH_BCD, - ODM_RF_PATH_ABCD, - // ODM_RF_PATH_MAX, //Max RF number 90 support -} ODM_RF_RADIO_PATH_E, *PODM_RF_RADIO_PATH_E; - -typedef enum _ODM_PARAMETER_INIT { - ODM_PRE_SETTING = 0, - ODM_POST_SETTING = 1, -} ODM_PARAMETER_INIT_E; - -#endif diff --git a/network/wlan/WDI/HAL/phydm/phydm_precomp.h b/network/wlan/WDI/HAL/phydm/phydm_precomp.h deleted file mode 100644 index 7cc6ad27..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_precomp.h +++ /dev/null @@ -1,335 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODM_PRECOMP_H__ -#define __ODM_PRECOMP_H__ - -#include "phydm_types.h" - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#include "Precomp.h" // We need to include mp_precomp.h due to batch file setting. -#else -#define TEST_FALG___ 1 -#endif - -#if (DM_ODM_SUPPORT_TYPE ==ODM_CE) -#define RTL8192CE_SUPPORT 0 -#define RTL8192CU_SUPPORT 0 -#define RTL8192C_SUPPORT 0 - -#define RTL8192DE_SUPPORT 0 -#define RTL8192DU_SUPPORT 0 -#define RTL8192D_SUPPORT 0 - -#define RTL8723AU_SUPPORT 0 -#define RTL8723AS_SUPPORT 0 -#define RTL8723AE_SUPPORT 0 -#define RTL8723A_SUPPORT 0 -#define RTL8723_FPGA_VERIFICATION 0 -#endif - -//2 Config Flags and Structs - defined by each ODM Type - -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) - #include "../8192cd_cfg.h" - #include "../odm_inc.h" - - #include "../8192cd.h" - #include "../8192cd_util.h" - #ifdef _BIG_ENDIAN_ - #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG - #else - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #endif - - #ifdef AP_BUILD_WORKAROUND - #include "../8192cd_headers.h" - #include "../8192cd_debug.h" - #endif - -#elif (DM_ODM_SUPPORT_TYPE ==ODM_CE) - #define __PACK - #define __WLAN_ATTRIB_PACK__ -#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #include "mp_precomp.h" - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #define __PACK - #define __WLAN_ATTRIB_PACK__ -#endif - -//2 OutSrc Header Files - -#include "phydm.h" -#include "phydm_hwconfig.h" -#include "phydm_debug.h" -#include "phydm_regdefine11ac.h" -#include "phydm_regdefine11n.h" -#include "phydm_interface.h" -#include "phydm_reg.h" - - -#if (DM_ODM_SUPPORT_TYPE & ODM_CE) -#define RTL8821B_SUPPORT 0 -#define RTL8822B_SUPPORT 0 -#define RTL8723D_SUPPORT 0 - -VOID -PHY_SetTxPowerLimit( - IN PDM_ODM_T pDM_Odm, - IN u8 *Regulation, - IN u8 *Band, - IN u8 *Bandwidth, - IN u8 *RateSection, - IN u8 *RfPath, - IN u8 *Channel, - IN u8 *PowerLimit -); - -#endif - -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) -#define RTL8821B_SUPPORT 0 -#define RTL8822B_SUPPORT 0 -#define RTL8703B_SUPPORT 0 -#define RTL8188F_SUPPORT 0 -#define RTL8723D_SUPPORT 0 -#endif - -//#if RTL8188E_SUPPORT == 1 -//#define RTL8188E_T_SUPPORT 1 -//#ifdef CONFIG_SFW_SUPPORTED -//#define RTL8188E_S_SUPPORT 1 -//#else -//#define RTL8188E_S_SUPPORT 0 -//#endif -//#endif -// -//#include "rtl8188e/hal8188erateadaptive.h"//for RA,Power training -//#include "rtl8188e/halhwimg8188e_mac.h" -//#include "rtl8188e/halhwimg8188e_rf.h" -//#include "rtl8188e/halhwimg8188e_bb.h" -//#include "rtl8188e/halhwimg8188e_t_fw.h" -//#include "rtl8188e/halhwimg8188e_s_fw.h" -//#include "rtl8188e/phydm_regconfig8188e.h" -//#include "rtl8188e/phydm_rtl8188e.h" -//#include "rtl8188e/hal8188ereg.h" -//#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8188e_hal.h" -// #include "rtl8188e/halphyrf_8188e_ce.h" -//#endif -//#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -// #include "rtl8188e/halphyrf_8188e_win.h" -//#endif -//#if (DM_ODM_SUPPORT_TYPE == ODM_AP) -// #include "rtl8188e/halphyrf_8188e_ap.h" -//#endif - -//#if (RTL8192E_SUPPORT==1) -// -// #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -// #include "rtl8192e/halphyrf_8192e_win.h" /*FOR_8192E_IQK*/ -// #elif (DM_ODM_SUPPORT_TYPE == ODM_AP) -// #include "rtl8192e/halphyrf_8192e_ap.h" /*FOR_8192E_IQK*/ -// #elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8192e/halphyrf_8192e_ce.h" /*FOR_8192E_IQK*/ -// #endif -// -//#include "rtl8192e/phydm_rtl8192e.h" //FOR_8192E_IQK -//#if (DM_ODM_SUPPORT_TYPE != ODM_AP) -// #include "rtl8192e/halhwimg8192e_bb.h" -// #include "rtl8192e/halhwimg8192e_mac.h" -// #include "rtl8192e/halhwimg8192e_rf.h" -// #include "rtl8192e/phydm_regconfig8192e.h" -// #include "rtl8192e/halhwimg8192e_fw.h" -// #include "rtl8192e/hal8192ereg.h" -//#endif -//#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8192e_hal.h" -//#endif -//#endif //92E END - - -//#if (RTL8723D_SUPPORT==1) -// #if (DM_ODM_SUPPORT_TYPE != ODM_AP) -// #include "rtl8723d/HalHWImg8723D_BB.h" -// #include "rtl8723d/HalHWImg8723D_MAC.h" -// #include "rtl8723d/HalHWImg8723D_RF.h" -// #include "rtl8723d/phydm_RegConfig8723D.h" -// #include "rtl8723d/HalHWImg8723D_FW.h" -// #include "rtl8723d/Hal8723DReg.h" -// #include "rtl8723d/phydm_rtl8723d.h" -// #endif -// #if (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8723d_hal.h" -// #endif -//#endif //8723D End - -//#if (RTL8812A_SUPPORT==1) -// -// #if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -// #include "rtl8812a/halphyrf_8812a_win.h" -// #elif (DM_ODM_SUPPORT_TYPE == ODM_AP) -// #include "rtl8812a/halphyrf_8812a_ap.h" -// #elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8812a/halphyrf_8812a_ce.h" -// #endif -// -// //#include "rtl8812a/HalPhyRf_8812A.h" //FOR_8812_IQK -// #if (DM_ODM_SUPPORT_TYPE != ODM_AP) -// #include "rtl8812a/halhwimg8812a_bb.h" -// #include "rtl8812a/halhwimg8812a_mac.h" -// #include "rtl8812a/halhwimg8812a_rf.h" -// #include "rtl8812a/phydm_regconfig8812a.h" -// #include "rtl8812a/halhwimg8812a_fw.h" -// #include "rtl8812a/phydm_rtl8812a.h" -// #endif -// -// #if (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8812a_hal.h" -// #endif -// -//#endif //8812 END - -//#if (RTL8814A_SUPPORT==1) -// -//#include "rtl8814a/halhwimg8814a_mac.h" -//#include "rtl8814a/halhwimg8814a_rf.h" -//#include "rtl8814a/halhwimg8814a_bb.h" -//#if (DM_ODM_SUPPORT_TYPE != ODM_AP) -// #include "rtl8814a/halhwimg8814a_fw.h" -// #include "rtl8814a/phydm_rtl8814a.h" -//#endif -//#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -// #include "rtl8814a/halphyrf_8814a_win.h" -//#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8814a/halphyrf_8814a_ce.h" -//#elif (DM_ODM_SUPPORT_TYPE == ODM_AP) -// #include "rtl8814a/halphyrf_8814a_ap.h" -//#endif -// #include "rtl8814a/phydm_regconfig8814a.h" -//#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8814a_hal.h" -// #include "rtl8814a/phydm_iqk_8814a.h" -//#endif -//#endif //8814 END - -//#if (RTL8881A_SUPPORT==1)//FOR_8881_IQK -//#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -//#include "rtl8821a/phydm_iqk_8821a_win.h" -//#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -//#include "rtl8821a/phydm_iqk_8821a_ce.h" -//#else -//#include "rtl8821a/phydm_iqk_8821a_ap.h" -//#endif -//#include "rtl8881a/HalHWImg8881A_BB.h" -//#include "rtl8881a/HalHWImg8881A_MAC.h" -//#include "rtl8881a/HalHWImg8881A_RF.h" -//#include "rtl8881a/odm_RegConfig8881A.h" -//#endif - -#if (RTL8723B_SUPPORT==1) -#include "rtl8723b/halhwimg8723b_mac.h" -#include "rtl8723b/halhwimg8723b_rf.h" -#include "rtl8723b/halhwimg8723b_bb.h" -#include "rtl8723b/halhwimg8723b_fw.h" -#include "rtl8723b/phydm_regconfig8723b.h" -#include "rtl8723b/phydm_rtl8723b.h" -#include "rtl8723b/hal8723breg.h" -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #include "rtl8723b/halphyrf_8723b_win.h" -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - #include "rtl8723b/halphyrf_8723b_ce.h" - #include "rtl8723b/halhwimg8723b_mp.h" - #include "rtl8723b_hal.h" -#endif -#endif - -//#if (RTL8821A_SUPPORT==1) -//#include "rtl8821a/halhwimg8821a_mac.h" -//#include "rtl8821a/halhwimg8821a_rf.h" -//#include "rtl8821a/halhwimg8821a_bb.h" -//#include "rtl8821a/halhwimg8821a_fw.h" -//#include "rtl8821a/phydm_regconfig8821a.h" -//#include "rtl8821a/phydm_rtl8821a.h" -//#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -// #include "rtl8821a/halphyrf_8821a_win.h" -//#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -// #include "rtl8821a/halphyrf_8821a_ce.h" -// #include "rtl8821a/phydm_iqk_8821a_ce.h"/*for IQK*/ -// #include "rtl8812a/halphyrf_8812a_ce.h"/*for IQK,LCK,Power-tracking*/ -// #include "rtl8812a_hal.h" -//#else -//#endif -//#endif - -//#if (RTL8821B_SUPPORT==1) -//#include "rtl8821b/halhwimg8821b_mac.h" -//#include "rtl8821b/halhwimg8821b_rf.h" -//#include "rtl8821b/halhwimg8821b_bb.h" -//#include "rtl8821b/halhwimg8821b_fw.h" -//#include "rtl8821b/phydm_regconfig8821b.h" -//#include "rtl8821b/halhwimg8821b_testchip_mac.h" -//#include "rtl8821b/halhwimg8821b_testchip_rf.h" -//#include "rtl8821b/halhwimg8821b_testchip_bb.h" -//#include "rtl8821b/halhwimg8821b_testchip_fw.h" -//#include "rtl8821b/halphyrf_8821b.h" -//#endif - - -//#include "rtl8822b/halhwimg8822b_mac.h" -//#include "rtl8822b/halhwimg8822b_rf.h" -//#include "rtl8822b/halhwimg8822b_bb.h" -///*#include "rtl8822b/halhwimg8822b_fw.h"*/ -//#include "rtl8822b/phydm_regconfig8822b.h" -//#include "rtl8822b/halphyrf_8822b.h" -//#include "rtl8822b/phydm_rtl8822b.h" -//#include "rtl8822b/phydm_hal_api8822b.h" -//#include "rtl8822b/version_rtl8822b.h" - - -//#if (RTL8703B_SUPPORT==1) -//#include "rtl8703b/phydm_regconfig8703b.h" -//#include "rtl8703b/halhwimg8703b_mac.h" -//#include "rtl8703b/halhwimg8703b_rf.h" -//#include "rtl8703b/halhwimg8703b_bb.h" -//#include "rtl8703b/halhwimg8703b_fw.h" -//#include "rtl8703b/halphyrf_8703b.h" -//#include "rtl8703b/version_rtl8703b.h" -//#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -//#include "rtl8703b_hal.h" -//#endif -//#endif - -//#if (RTL8188F_SUPPORT == 1) -//#include "rtl8188f/halhwimg8188f_mac.h" -//#include "rtl8188f/halhwimg8188f_rf.h" -//#include "rtl8188f/halhwimg8188f_bb.h" -//#include "rtl8188f/halhwimg8188f_fw.h" -//#include "rtl8188f/hal8188freg.h" -//#include "rtl8188f/phydm_rtl8188f.h" -//#include "rtl8188f/phydm_regconfig8188f.h" -//#include "rtl8188f/halphyrf_8188f.h" /* for IQK,LCK,Power-tracking */ -//#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -//#include "rtl8188f_hal.h" -//#endif -//#endif - -#endif // __ODM_PRECOMP_H__ - diff --git a/network/wlan/WDI/HAL/phydm/phydm_rainfo.h b/network/wlan/WDI/HAL/phydm/phydm_rainfo.h deleted file mode 100644 index 4f62282a..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_rainfo.h +++ /dev/null @@ -1,443 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __PHYDMRAINFO_H__ -#define __PHYDMRAINFO_H__ - -/*#define RAINFO_VERSION "2.0" //2014.11.04*/ -/*#define RAINFO_VERSION "3.0" //2015.01.13 Dino*/ -/*#define RAINFO_VERSION "3.1" //2015.01.14 Dino*/ -#define RAINFO_VERSION "3.2" /*2015.01.14 Dino*/ - -#define HIGH_RSSI_THRESH 50 -#define LOW_RSSI_THRESH 20 - -#define ACTIVE_TP_THRESHOLD 150 -#define RA_RETRY_DESCEND_NUM 2 -#define RA_RETRY_LIMIT_LOW 4 -#define RA_RETRY_LIMIT_HIGH 32 - -#define PHYDM_IC_8051_SERIES (ODM_RTL8881A|ODM_RTL8812|ODM_RTL8821|ODM_RTL8192S|ODM_RTL8192C|ODM_RTL8192D|ODM_RTL8723A|ODM_RTL8188E|ODM_RTL8192E|ODM_RTL8723B|ODM_RTL8703B|ODM_RTL8188F|ODM_RTL8723D) -#define PHYDM_IC_3081_SERIES (ODM_RTL8814A|ODM_RTL8821B|ODM_RTL8822B) - -#define RAINFO_BE_RX_STATE BIT0 // 1:RX //ULDL -#define RAINFO_STBC_STATE BIT1 -//#define RAINFO_LDPC_STATE BIT2 -#define RAINFO_NOISY_STATE BIT2 // set by Noisy_Detection -#define RAINFO_SHURTCUT_STATE BIT3 -#define RAINFO_SHURTCUT_FLAG BIT4 -#define RAINFO_INIT_RSSI_RATE_STATE BIT5 -#define RAINFO_BF_STATE BIT6 -#define RAINFO_BE_TX_STATE BIT7 // 1:TX - -#define RA_MASK_CCK 0xf -#define RA_MASK_OFDM 0xff0 -#define RA_MASK_HT1SS 0xff000 -#define RA_MASK_HT2SS 0xff00000 -/*#define RA_MASK_MCS3SS */ -#define RA_MASK_HT4SS 0xff0 -#define RA_MASK_VHT1SS 0x3ff000 -#define RA_MASK_VHT2SS 0xffc00000 - -#if(DM_ODM_SUPPORT_TYPE == ODM_AP) -#define EXT_RA_INFO_SUPPORT_IC (ODM_RTL8881A |ODM_RTL8192E |ODM_RTL8812 |ODM_RTL8814A|ODM_RTL8822B) -#define RA_FIRST_MACID 1 -#elif (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#define EXT_RA_INFO_SUPPORT_IC (ODM_RTL8192E | ODM_RTL8812 | ODM_RTL8821 | ODM_RTL8723B | ODM_RTL8814A | ODM_RTL8822B | ODM_RTL8703B | ODM_RTL8723D | ODM_RTL8188F) -#define RA_FIRST_MACID 0 -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -/*#define EXT_RA_INFO_SUPPORT_IC (ODM_RTL8192E|ODM_RTL8812|ODM_RTL8821|ODM_RTL8723B|ODM_RTL8814A|ODM_RTL8822B|ODM_RTL8703B) */ -#define RA_FIRST_MACID 0 -#endif - - -#define AP_InitRateAdaptiveState ODM_RateAdaptiveStateApInit - -#define DM_RATR_STA_INIT 0 -#define DM_RATR_STA_HIGH 1 -#define DM_RATR_STA_MIDDLE 2 -#define DM_RATR_STA_LOW 3 -#if(DM_ODM_SUPPORT_TYPE & ODM_AP) -#define DM_RATR_STA_ULTRA_LOW 4 -#endif - -#define DM_RA_RATE_UP 1 -#define DM_RA_RATE_DOWN 2 - -typedef enum _phydm_arfr_num { - ARFR_0_RATE_ID = 0x9, - ARFR_1_RATE_ID = 0xa, - ARFR_2_RATE_ID = 0xb, - ARFR_3_RATE_ID = 0xc, - ARFR_4_RATE_ID = 0xd, - ARFR_5_RATE_ID = 0xe -} PHYDM_RA_ARFR_NUM_E; - -typedef enum _Phydm_ra_dbg_para { - RADBG_RTY_PENALTY = 1, //u8 - RADBG_N_HIGH = 2, - RADBG_N_LOW = 3, - RADBG_TRATE_UP_TABLE = 4, - RADBG_TRATE_DOWN_TABLE = 5, - RADBG_TRYING_NECESSARY = 6, - RADBG_TDROPING_NECESSARY = 7, - RADBG_RATE_UP_RTY_RATIO = 8, //u8 - RADBG_RATE_DOWN_RTY_RATIO = 9, //u8 - - RADBG_DEBUG_MONITOR1 = 0xc, - RADBG_DEBUG_MONITOR2 = 0xd, - RADBG_DEBUG_MONITOR3 = 0xe, - RADBG_DEBUG_MONITOR4 = 0xf, - NUM_RA_PARA -} PHYDM_RA_DBG_PARA_E; - - -#if 1//88E RA -typedef struct _ODM_RA_Info_ { - u1Byte RateID; - u4Byte RateMask; - u4Byte RAUseRate; - u1Byte RateSGI; - u1Byte RssiStaRA; - u1Byte PreRssiStaRA; - u1Byte SGIEnable; - u1Byte DecisionRate; - u1Byte PreRate; - u1Byte HighestRate; - u1Byte LowestRate; - u4Byte NscUp; - u4Byte NscDown; - u2Byte RTY[5]; - u4Byte TOTAL; - u2Byte DROP; - u1Byte Active; - u2Byte RptTime; - u1Byte RAWaitingCounter; - u1Byte RAPendingCounter; -#if 1 //POWER_TRAINING_ACTIVE == 1 // For compile pass only~! - u1Byte PTActive; // on or off - u1Byte PTTryState; // 0 trying state, 1 for decision state - u1Byte PTStage; // 0~6 - u1Byte PTStopCount; //Stop PT counter - u1Byte PTPreRate; // if rate change do PT - u1Byte PTPreRssi; // if RSSI change 5% do PT - u1Byte PTModeSS; // decide whitch rate should do PT - u1Byte RAstage; // StageRA, decide how many times RA will be done between PT - u1Byte PTSmoothFactor; -#endif -#if (DM_ODM_SUPPORT_TYPE == ODM_AP) && ((DEV_BUS_TYPE == RT_USB_INTERFACE) || (DEV_BUS_TYPE == RT_SDIO_INTERFACE)) - u1Byte RateDownCounter; - u1Byte RateUpCounter; - u1Byte RateDirection; - u1Byte BoundingType; - u1Byte BoundingCounter; - u1Byte BoundingLearningTime; - u1Byte RateDownStartTime; -#endif -} ODM_RA_INFO_T, *PODM_RA_INFO_T; -#endif - - -typedef struct _Rate_Adaptive_Table_ { - u1Byte firstconnect; -#if(DM_ODM_SUPPORT_TYPE==ODM_WIN) - BOOLEAN PT_collision_pre; -#endif - -#if (defined(CONFIG_RA_DBG_CMD)) - BOOLEAN is_ra_dbg_init; - - u1Byte RTY_P[ODM_NUM_RATE_IDX]; - u1Byte RTY_P_default[ODM_NUM_RATE_IDX]; - BOOLEAN RTY_P_modify_note[ODM_NUM_RATE_IDX]; - - u1Byte RATE_UP_RTY_RATIO[ODM_NUM_RATE_IDX]; - u1Byte RATE_UP_RTY_RATIO_default[ODM_NUM_RATE_IDX]; - BOOLEAN RATE_UP_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX]; - - u1Byte RATE_DOWN_RTY_RATIO[ODM_NUM_RATE_IDX]; - u1Byte RATE_DOWN_RTY_RATIO_default[ODM_NUM_RATE_IDX]; - BOOLEAN RATE_DOWN_RTY_RATIO_modify_note[ODM_NUM_RATE_IDX]; - - BOOLEAN RA_Para_feedback_req; - - u1Byte para_idx; - u1Byte rate_idx; - u1Byte value; - u2Byte value_16; - u1Byte rate_length; -#endif - u1Byte link_tx_rate[ODM_ASSOCIATE_ENTRY_NUM]; - - #if (defined(CONFIG_RA_DYNAMIC_RTY_LIMIT)) - u1Byte per_rate_retrylimit_20M[ODM_NUM_RATE_IDX]; - u1Byte per_rate_retrylimit_40M[ODM_NUM_RATE_IDX]; - u1Byte retry_descend_num; - u1Byte retrylimit_low; - u1Byte retrylimit_high; - #endif - - -} RA_T, *pRA_T; - -typedef struct _ODM_RATE_ADAPTIVE { - u1Byte Type; // DM_Type_ByFW/DM_Type_ByDriver - u1Byte HighRSSIThresh; // if RSSI > HighRSSIThresh => RATRState is DM_RATR_STA_HIGH - u1Byte LowRSSIThresh; // if RSSI <= LowRSSIThresh => RATRState is DM_RATR_STA_LOW - u1Byte RATRState; // Current RSSI level, DM_RATR_STA_HIGH/DM_RATR_STA_MIDDLE/DM_RATR_STA_LOW - -#if(DM_ODM_SUPPORT_TYPE & (ODM_WIN|ODM_CE)) - u1Byte LdpcThres; // if RSSI > LdpcThres => switch from LPDC to BCC - BOOLEAN bLowerRtsRate; -#endif - -#if(DM_ODM_SUPPORT_TYPE & ODM_WIN) - u1Byte RtsThres; -#elif(DM_ODM_SUPPORT_TYPE & ODM_CE) - BOOLEAN bUseLdpc; -#else - u1Byte UltraLowRSSIThresh; - u4Byte LastRATR; // RATR Register Content -#endif - -} ODM_RATE_ADAPTIVE, *PODM_RATE_ADAPTIVE; - -VOID -ODM_C2HRaParaReportHandler( - IN PVOID pDM_VOID, - IN pu1Byte CmdBuf, - IN u1Byte CmdLen -); - -VOID -odm_RA_ParaAdjust_Send_H2C( - IN PVOID pDM_VOID -); - -VOID -odm_RA_debug( - IN PVOID pDM_VOID, - IN u4Byte *const dm_value -); - -VOID -odm_RA_ParaAdjust_init( - IN PVOID pDM_VOID -); - -VOID -odm_RA_ParaAdjust( - IN PVOID pDM_VOID -); - -VOID -phydm_ra_dynamic_retry_count( - IN PVOID pDM_VOID -); - -VOID -phydm_ra_dynamic_retry_limit( - IN PVOID pDM_VOID -); - -VOID -phydm_ra_dynamic_rate_id_on_assoc( - IN PVOID pDM_VOID, - IN u1Byte wireless_mode, - IN u1Byte init_rate_id -); - -VOID -phydm_c2h_ra_report_handler( - IN PVOID pDM_VOID, - IN pu1Byte CmdBuf, - IN u1Byte CmdLen -); - -VOID -phydm_ra_info_init( - IN PVOID pDM_VOID -); - -VOID -odm_RSSIMonitorInit( - IN PVOID pDM_VOID -); - -VOID -odm_RSSIMonitorCheck( - IN PVOID pDM_VOID -); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -s4Byte -phydm_FindMinimumRSSI( -IN PDM_ODM_T pDM_Odm, -IN PADAPTER pAdapter, -IN OUT BOOLEAN *pbLink_temp - - ); -#endif - -VOID -odm_RSSIMonitorCheckMP( - IN PVOID pDM_VOID -); - -VOID -odm_RSSIMonitorCheckCE( - IN PVOID pDM_VOID -); - -VOID -odm_RSSIMonitorCheckAP( - IN PVOID pDM_VOID -); - - -VOID -odm_RateAdaptiveMaskInit( - IN PVOID pDM_VOID -); - -VOID -odm_RefreshRateAdaptiveMask( - IN PVOID pDM_VOID -); - -VOID -odm_RefreshRateAdaptiveMaskMP( - IN PVOID pDM_VOID -); - -VOID -odm_RefreshRateAdaptiveMaskCE( - IN PVOID pDM_VOID -); - -VOID -odm_RefreshRateAdaptiveMaskAPADSL( - IN PVOID pDM_VOID -); - -BOOLEAN -ODM_RAStateCheck( - IN PVOID pDM_VOID, - IN s4Byte RSSI, - IN BOOLEAN bForceUpdate, - OUT pu1Byte pRATRState -); - -VOID -odm_RefreshBasicRateMask( - IN PVOID pDM_VOID -); -VOID -ODM_RAPostActionOnAssoc( - IN PVOID pDM_Odm -); - -#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN | ODM_CE)) - -u1Byte -odm_Find_RTS_Rate( - IN PVOID pDM_VOID, - IN u1Byte Tx_Rate, - IN BOOLEAN bErpProtect -); - -VOID -ODM_UpdateNoisyState( - IN PVOID pDM_VOID, - IN BOOLEAN bNoisyStateFromC2H -); - -u4Byte -Set_RA_DM_Ratrbitmap_by_Noisy( - IN PVOID pDM_VOID, - IN WIRELESS_MODE WirelessMode, - IN u4Byte ratr_bitmap, - IN u1Byte rssi_level -); - -VOID -ODM_UpdateInitRate( - IN PVOID pDM_VOID, - IN u1Byte Rate -); - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -VOID -odm_RSSIDumpToRegister( - IN PVOID pDM_VOID -); - -VOID -odm_RefreshLdpcRtsMP( - IN PADAPTER pAdapter, - IN PDM_ODM_T pDM_Odm, - IN u1Byte mMacId, - IN u1Byte IOTPeer, - IN s4Byte UndecoratedSmoothedPWDB -); - -VOID -ODM_DynamicARFBSelect( - IN PVOID pDM_VOID, - IN u1Byte rate, - IN BOOLEAN Collision_State -); - -VOID -ODM_RateAdaptiveStateApInit( - IN PVOID PADAPTER_VOID, - IN PRT_WLAN_STA pEntry -); -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - -static void -FindMinimumRSSI( - IN PADAPTER pAdapter -); - -u8Byte -PhyDM_Get_Rate_Bitmap_Ex( - IN PVOID pDM_VOID, - IN u4Byte macid, - IN u8Byte ra_mask, - IN u1Byte rssi_level, - OUT u8Byte *dm_RA_Mask, - OUT u1Byte *dm_RteID -); -u4Byte -ODM_Get_Rate_Bitmap( - IN PVOID pDM_VOID, - IN u4Byte macid, - IN u4Byte ra_mask, - IN u1Byte rssi_level -); -#endif/*#elif (DM_ODM_SUPPORT_TYPE == ODM_CE)*/ - -#endif/*#if (DM_ODM_SUPPORT_TYPE & (ODM_WIN| ODM_CE))*/ - -#endif /*#ifndef __ODMRAINFO_H__*/ - - diff --git a/network/wlan/WDI/HAL/phydm/phydm_reg.h b/network/wlan/WDI/HAL/phydm/phydm_reg.h deleted file mode 100644 index e8424139..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_reg.h +++ /dev/null @@ -1,208 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -//============================================================ -// File Name: odm_reg.h -// -// Description: -// -// This file is for general register definition. -// -// -//============================================================ -#ifndef __HAL_ODM_REG_H__ -#define __HAL_ODM_REG_H__ - -// -// Register Definition -// - -//MAC REG -#define ODM_BB_RESET 0x002 -#define ODM_DUMMY 0x4fe -#define RF_T_METER_OLD 0x24 -#define RF_T_METER_NEW 0x42 - -#define ODM_EDCA_VO_PARAM 0x500 -#define ODM_EDCA_VI_PARAM 0x504 -#define ODM_EDCA_BE_PARAM 0x508 -#define ODM_EDCA_BK_PARAM 0x50C -#define ODM_TXPAUSE 0x522 - -//BB REG -#define ODM_FPGA_PHY0_PAGE8 0x800 -#define ODM_PSD_SETTING 0x808 -#define ODM_AFE_SETTING 0x818 -#define ODM_TXAGC_B_6_18 0x830 -#define ODM_TXAGC_B_24_54 0x834 -#define ODM_TXAGC_B_MCS32_5 0x838 -#define ODM_TXAGC_B_MCS0_MCS3 0x83c -#define ODM_TXAGC_B_MCS4_MCS7 0x848 -#define ODM_TXAGC_B_MCS8_MCS11 0x84c -#define ODM_ANALOG_REGISTER 0x85c -#define ODM_RF_INTERFACE_OUTPUT 0x860 -#define ODM_TXAGC_B_MCS12_MCS15 0x868 -#define ODM_TXAGC_B_11_A_2_11 0x86c -#define ODM_AD_DA_LSB_MASK 0x874 -#define ODM_ENABLE_3_WIRE 0x88c -#define ODM_PSD_REPORT 0x8b4 -#define ODM_R_ANT_SELECT 0x90c -#define ODM_CCK_ANT_SELECT 0xa07 -#define ODM_CCK_PD_THRESH 0xa0a -#define ODM_CCK_RF_REG1 0xa11 -#define ODM_CCK_MATCH_FILTER 0xa20 -#define ODM_CCK_RAKE_MAC 0xa2e -#define ODM_CCK_CNT_RESET 0xa2d -#define ODM_CCK_TX_DIVERSITY 0xa2f -#define ODM_CCK_FA_CNT_MSB 0xa5b -#define ODM_CCK_FA_CNT_LSB 0xa5c -#define ODM_CCK_NEW_FUNCTION 0xa75 -#define ODM_OFDM_PHY0_PAGE_C 0xc00 -#define ODM_OFDM_RX_ANT 0xc04 -#define ODM_R_A_RXIQI 0xc14 -#define ODM_R_A_AGC_CORE1 0xc50 -#define ODM_R_A_AGC_CORE2 0xc54 -#define ODM_R_B_AGC_CORE1 0xc58 -#define ODM_R_AGC_PAR 0xc70 -#define ODM_R_HTSTF_AGC_PAR 0xc7c -#define ODM_TX_PWR_TRAINING_A 0xc90 -#define ODM_TX_PWR_TRAINING_B 0xc98 -#define ODM_OFDM_FA_CNT1 0xcf0 -#define ODM_OFDM_PHY0_PAGE_D 0xd00 -#define ODM_OFDM_FA_CNT2 0xda0 -#define ODM_OFDM_FA_CNT3 0xda4 -#define ODM_OFDM_FA_CNT4 0xda8 -#define ODM_TXAGC_A_6_18 0xe00 -#define ODM_TXAGC_A_24_54 0xe04 -#define ODM_TXAGC_A_1_MCS32 0xe08 -#define ODM_TXAGC_A_MCS0_MCS3 0xe10 -#define ODM_TXAGC_A_MCS4_MCS7 0xe14 -#define ODM_TXAGC_A_MCS8_MCS11 0xe18 -#define ODM_TXAGC_A_MCS12_MCS15 0xe1c - -//RF REG -#define ODM_GAIN_SETTING 0x00 -#define ODM_CHANNEL 0x18 -#define ODM_RF_T_METER 0x24 -#define ODM_RF_T_METER_92D 0x42 -#define ODM_RF_T_METER_88E 0x42 -#define ODM_RF_T_METER_92E 0x42 -#define ODM_RF_T_METER_8812 0x42 - -//Ant Detect Reg -#define ODM_DPDT 0x300 - -//PSD Init -#define ODM_PSDREG 0x808 - -//92D Path Div -#define PATHDIV_REG 0xB30 -#define PATHDIV_TRI 0xBA0 - - -// -// Bitmap Definition -// -#if(DM_ODM_SUPPORT_TYPE & (ODM_AP)) -// TX AGC -#define rTxAGC_A_CCK11_CCK1_JAguar 0xc20 -#define rTxAGC_A_Ofdm18_Ofdm6_JAguar 0xc24 -#define rTxAGC_A_Ofdm54_Ofdm24_JAguar 0xc28 -#define rTxAGC_A_MCS3_MCS0_JAguar 0xc2c -#define rTxAGC_A_MCS7_MCS4_JAguar 0xc30 -#define rTxAGC_A_MCS11_MCS8_JAguar 0xc34 -#define rTxAGC_A_MCS15_MCS12_JAguar 0xc38 -#define rTxAGC_A_Nss1Index3_Nss1Index0_JAguar 0xc3c -#define rTxAGC_A_Nss1Index7_Nss1Index4_JAguar 0xc40 -#define rTxAGC_A_Nss2Index1_Nss1Index8_JAguar 0xc44 -#define rTxAGC_A_Nss2Index5_Nss2Index2_JAguar 0xc48 -#define rTxAGC_A_Nss2Index9_Nss2Index6_JAguar 0xc4c -#if defined(CONFIG_WLAN_HAL_8814AE) -#define rTxAGC_A_MCS19_MCS16_JAguar 0xcd8 -#define rTxAGC_A_MCS23_MCS20_JAguar 0xcdc -#define rTxAGC_A_Nss3Index3_Nss3Index0_JAguar 0xce0 -#define rTxAGC_A_Nss3Index7_Nss3Index4_JAguar 0xce4 -#define rTxAGC_A_Nss3Index9_Nss3Index8_JAguar 0xce8 -#endif -#define rTxAGC_B_CCK11_CCK1_JAguar 0xe20 -#define rTxAGC_B_Ofdm18_Ofdm6_JAguar 0xe24 -#define rTxAGC_B_Ofdm54_Ofdm24_JAguar 0xe28 -#define rTxAGC_B_MCS3_MCS0_JAguar 0xe2c -#define rTxAGC_B_MCS7_MCS4_JAguar 0xe30 -#define rTxAGC_B_MCS11_MCS8_JAguar 0xe34 -#define rTxAGC_B_MCS15_MCS12_JAguar 0xe38 -#define rTxAGC_B_Nss1Index3_Nss1Index0_JAguar 0xe3c -#define rTxAGC_B_Nss1Index7_Nss1Index4_JAguar 0xe40 -#define rTxAGC_B_Nss2Index1_Nss1Index8_JAguar 0xe44 -#define rTxAGC_B_Nss2Index5_Nss2Index2_JAguar 0xe48 -#define rTxAGC_B_Nss2Index9_Nss2Index6_JAguar 0xe4c -#if defined(CONFIG_WLAN_HAL_8814AE) -#define rTxAGC_B_MCS19_MCS16_JAguar 0xed8 -#define rTxAGC_B_MCS23_MCS20_JAguar 0xedc -#define rTxAGC_B_Nss3Index3_Nss3Index0_JAguar 0xee0 -#define rTxAGC_B_Nss3Index7_Nss3Index4_JAguar 0xee4 -#define rTxAGC_B_Nss3Index9_Nss3Index8_JAguar 0xee8 -#define rTxAGC_C_CCK11_CCK1_JAguar 0x1820 -#define rTxAGC_C_Ofdm18_Ofdm6_JAguar 0x1824 -#define rTxAGC_C_Ofdm54_Ofdm24_JAguar 0x1828 -#define rTxAGC_C_MCS3_MCS0_JAguar 0x182c -#define rTxAGC_C_MCS7_MCS4_JAguar 0x1830 -#define rTxAGC_C_MCS11_MCS8_JAguar 0x1834 -#define rTxAGC_C_MCS15_MCS12_JAguar 0x1838 -#define rTxAGC_C_Nss1Index3_Nss1Index0_JAguar 0x183c -#define rTxAGC_C_Nss1Index7_Nss1Index4_JAguar 0x1840 -#define rTxAGC_C_Nss2Index1_Nss1Index8_JAguar 0x1844 -#define rTxAGC_C_Nss2Index5_Nss2Index2_JAguar 0x1848 -#define rTxAGC_C_Nss2Index9_Nss2Index6_JAguar 0x184c -#define rTxAGC_C_MCS19_MCS16_JAguar 0x18d8 -#define rTxAGC_C_MCS23_MCS20_JAguar 0x18dc -#define rTxAGC_C_Nss3Index3_Nss3Index0_JAguar 0x18e0 -#define rTxAGC_C_Nss3Index7_Nss3Index4_JAguar 0x18e4 -#define rTxAGC_C_Nss3Index9_Nss3Index8_JAguar 0x18e8 -#define rTxAGC_D_CCK11_CCK1_JAguar 0x1a20 -#define rTxAGC_D_Ofdm18_Ofdm6_JAguar 0x1a24 -#define rTxAGC_D_Ofdm54_Ofdm24_JAguar 0x1a28 -#define rTxAGC_D_MCS3_MCS0_JAguar 0x1a2c -#define rTxAGC_D_MCS7_MCS4_JAguar 0x1a30 -#define rTxAGC_D_MCS11_MCS8_JAguar 0x1a34 -#define rTxAGC_D_MCS15_MCS12_JAguar 0x1a38 -#define rTxAGC_D_Nss1Index3_Nss1Index0_JAguar 0x1a3c -#define rTxAGC_D_Nss1Index7_Nss1Index4_JAguar 0x1a40 -#define rTxAGC_D_Nss2Index1_Nss1Index8_JAguar 0x1a44 -#define rTxAGC_D_Nss2Index5_Nss2Index2_JAguar 0x1a48 -#define rTxAGC_D_Nss2Index9_Nss2Index6_JAguar 0x1a4c -#define rTxAGC_D_MCS19_MCS16_JAguar 0x1ad8 -#define rTxAGC_D_MCS23_MCS20_JAguar 0x1adc -#define rTxAGC_D_Nss3Index3_Nss3Index0_JAguar 0x1ae0 -#define rTxAGC_D_Nss3Index7_Nss3Index4_JAguar 0x1ae4 -#define rTxAGC_D_Nss3Index9_Nss3Index8_JAguar 0x1ae8 -#endif - -#define bTxAGC_byte0_Jaguar 0xff -#define bTxAGC_byte1_Jaguar 0xff00 -#define bTxAGC_byte2_Jaguar 0xff0000 -#define bTxAGC_byte3_Jaguar 0xff000000 -#endif - -#define BIT_FA_RESET BIT0 - - - -#endif - diff --git a/network/wlan/WDI/HAL/phydm/phydm_regdefine11ac.h b/network/wlan/WDI/HAL/phydm/phydm_regdefine11ac.h deleted file mode 100644 index c8a551d1..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_regdefine11ac.h +++ /dev/null @@ -1,90 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODM_REGDEFINE11AC_H__ -#define __ODM_REGDEFINE11AC_H__ - -//2 RF REG LIST - - - -//2 BB REG LIST -//PAGE 8 -#define ODM_REG_CCK_RPT_FORMAT_11AC 0x804 -#define ODM_REG_BB_RX_PATH_11AC 0x808 -#define ODM_REG_BB_TX_PATH_11AC 0x80c -#define ODM_REG_BB_ATC_11AC 0x860 -#define ODM_REG_EDCCA_POWER_CAL 0x8dc -#define ODM_REG_DBG_RPT_11AC 0x8fc -//PAGE 9 -#define ODM_REG_EDCCA_DOWN_OPT 0x900 -#define ODM_REG_ACBB_EDCCA_ENHANCE 0x944 -#define ODM_REG_OFDM_FA_RST_11AC 0x9A4 -#define ODM_REG_NHM_TIMER_11AC 0x990 -#define ODM_REG_CLM_TIME_PERIOD_11AC 0x990 -#define ODM_REG_NHM_TH9_TH10_11AC 0x994 -#define ODM_REG_CLM_11AC 0x994 -#define ODM_REG_NHM_TH3_TO_TH0_11AC 0x998 -#define ODM_REG_NHM_TH7_TO_TH4_11AC 0x99c -#define ODM_REG_NHM_TH8_11AC 0x9a0 -#define ODM_REG_NHM_9E8_11AC 0x9e8 -#define ODM_REG_CSI_CONTENT_VALUE 0x9b4 -//PAGE A -#define ODM_REG_CCK_CCA_11AC 0xA0A -#define ODM_REG_CCK_FA_RST_11AC 0xA2C -#define ODM_REG_CCK_FA_11AC 0xA5C -//PAGE B -#define ODM_REG_RST_RPT_11AC 0xB58 -//PAGE C -#define ODM_REG_TRMUX_11AC 0xC08 -#define ODM_REG_IGI_A_11AC 0xC50 -//PAGE E -#define ODM_REG_IGI_B_11AC 0xE50 -#define ODM_REG_TRMUX_11AC_B 0xE08 -//PAGE F -#define ODM_REG_CCK_CCA_CNT_11AC 0xF08 -#define ODM_REG_OFDM_FA_11AC 0xF48 -#define ODM_REG_RPT_11AC 0xfa0 -#define ODM_REG_CLM_RESULT_11AC 0xfa4 -#define ODM_REG_NHM_CNT_11AC 0xfa8 -#define ODM_REG_NHM_DUR_READY_11AC 0xfb4 - -#define ODM_REG_NHM_CNT7_TO_CNT4_11AC 0xfac -#define ODM_REG_NHM_CNT11_TO_CNT8_11AC 0xfb0 -#define ODM_REG_OFDM_FA_TYPE2_11AC 0xFD0 -//PAGE 18 -#define ODM_REG_IGI_C_11AC 0x1850 -//PAGE 1A -#define ODM_REG_IGI_D_11AC 0x1A50 - -//2 MAC REG LIST -#define ODM_REG_RESP_TX_11AC 0x6D8 - - - -//DIG Related -#define ODM_BIT_IGI_11AC 0xFFFFFFFF -#define ODM_BIT_CCK_RPT_FORMAT_11AC BIT16 -#define ODM_BIT_BB_RX_PATH_11AC 0xF -#define ODM_BIT_BB_TX_PATH_11AC 0xF -#define ODM_BIT_BB_ATC_11AC BIT14 - -#endif - diff --git a/network/wlan/WDI/HAL/phydm/phydm_regdefine11n.h b/network/wlan/WDI/HAL/phydm/phydm_regdefine11n.h deleted file mode 100644 index 8826dfb2..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_regdefine11n.h +++ /dev/null @@ -1,199 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __ODM_REGDEFINE11N_H__ -#define __ODM_REGDEFINE11N_H__ - - -//2 RF REG LIST -#define ODM_REG_RF_MODE_11N 0x00 -#define ODM_REG_RF_0B_11N 0x0B -#define ODM_REG_CHNBW_11N 0x18 -#define ODM_REG_T_METER_11N 0x24 -#define ODM_REG_RF_25_11N 0x25 -#define ODM_REG_RF_26_11N 0x26 -#define ODM_REG_RF_27_11N 0x27 -#define ODM_REG_RF_2B_11N 0x2B -#define ODM_REG_RF_2C_11N 0x2C -#define ODM_REG_RXRF_A3_11N 0x3C -#define ODM_REG_T_METER_92D_11N 0x42 -#define ODM_REG_T_METER_88E_11N 0x42 - - - -//2 BB REG LIST -//PAGE 8 -#define ODM_REG_BB_CTRL_11N 0x800 -#define ODM_REG_RF_PIN_11N 0x804 -#define ODM_REG_PSD_CTRL_11N 0x808 -#define ODM_REG_TX_ANT_CTRL_11N 0x80C -#define ODM_REG_BB_PWR_SAV5_11N 0x818 -#define ODM_REG_CCK_RPT_FORMAT_11N 0x824 -#define ODM_REG_CCK_RPT_FORMAT_11N_B 0x82C -#define ODM_REG_RX_DEFUALT_A_11N 0x858 -#define ODM_REG_RX_DEFUALT_B_11N 0x85A -#define ODM_REG_BB_PWR_SAV3_11N 0x85C -#define ODM_REG_ANTSEL_CTRL_11N 0x860 -#define ODM_REG_RX_ANT_CTRL_11N 0x864 -#define ODM_REG_PIN_CTRL_11N 0x870 -#define ODM_REG_BB_PWR_SAV1_11N 0x874 -#define ODM_REG_ANTSEL_PATH_11N 0x878 -#define ODM_REG_BB_3WIRE_11N 0x88C -#define ODM_REG_SC_CNT_11N 0x8C4 -#define ODM_REG_PSD_DATA_11N 0x8B4 -#define ODM_REG_PSD_DATA_11N 0x8B4 -#define ODM_REG_NHM_TIMER_11N 0x894 -#define ODM_REG_CLM_TIME_PERIOD_11N 0x894 -#define ODM_REG_NHM_TH9_TH10_11N 0x890 -#define ODM_REG_CLM_11N 0x890 -#define ODM_REG_NHM_TH3_TO_TH0_11N 0x898 -#define ODM_REG_NHM_TH7_TO_TH4_11N 0x89c -#define ODM_REG_NHM_TH8_11N 0xe28 -#define ODM_REG_CLM_READY_11N 0x8b4 -#define ODM_REG_CLM_RESULT_11N 0x8d0 -#define ODM_REG_NHM_CNT_11N 0x8d8 - -// For ACS, Jeffery, 2014-12-26 -#define ODM_REG_NHM_CNT7_TO_CNT4_11N 0x8dc -#define ODM_REG_NHM_CNT9_TO_CNT8_11N 0x8d0 -#define ODM_REG_NHM_CNT10_11N 0x8d4 - - - -//PAGE 9 -#define ODM_REG_DBG_RPT_11N 0x908 -#define ODM_REG_BB_TX_PATH_11N 0x90c -#define ODM_REG_ANT_MAPPING1_11N 0x914 -#define ODM_REG_ANT_MAPPING2_11N 0x918 -#define ODM_REG_EDCCA_DOWN_OPT_11N 0x948 - -//PAGE A -#define ODM_REG_CCK_ANTDIV_PARA1_11N 0xA00 -#define ODM_REG_CCK_CCA_11N 0xA0A -#define ODM_REG_CCK_ANTDIV_PARA2_11N 0xA0C -#define ODM_REG_CCK_ANTDIV_PARA3_11N 0xA10 -#define ODM_REG_CCK_ANTDIV_PARA4_11N 0xA14 -#define ODM_REG_CCK_FILTER_PARA1_11N 0xA22 -#define ODM_REG_CCK_FILTER_PARA2_11N 0xA23 -#define ODM_REG_CCK_FILTER_PARA3_11N 0xA24 -#define ODM_REG_CCK_FILTER_PARA4_11N 0xA25 -#define ODM_REG_CCK_FILTER_PARA5_11N 0xA26 -#define ODM_REG_CCK_FILTER_PARA6_11N 0xA27 -#define ODM_REG_CCK_FILTER_PARA7_11N 0xA28 -#define ODM_REG_CCK_FILTER_PARA8_11N 0xA29 -#define ODM_REG_CCK_FA_RST_11N 0xA2C -#define ODM_REG_CCK_FA_MSB_11N 0xA58 -#define ODM_REG_CCK_FA_LSB_11N 0xA5C -#define ODM_REG_CCK_CCA_CNT_11N 0xA60 -#define ODM_REG_BB_PWR_SAV4_11N 0xA74 -//PAGE B -#define ODM_REG_LNA_SWITCH_11N 0xB2C -#define ODM_REG_PATH_SWITCH_11N 0xB30 -#define ODM_REG_RSSI_CTRL_11N 0xB38 -#define ODM_REG_CONFIG_ANTA_11N 0xB68 -#define ODM_REG_RSSI_BT_11N 0xB9C -//PAGE C -#define ODM_REG_OFDM_FA_HOLDC_11N 0xC00 -#define ODM_REG_BB_RX_PATH_11N 0xC04 -#define ODM_REG_TRMUX_11N 0xC08 -#define ODM_REG_OFDM_FA_RSTC_11N 0xC0C -#define ODM_REG_RXIQI_MATRIX_11N 0xC14 -#define ODM_REG_TXIQK_MATRIX_LSB1_11N 0xC4C -#define ODM_REG_IGI_A_11N 0xC50 -#define ODM_REG_ANTDIV_PARA2_11N 0xC54 -#define ODM_REG_IGI_B_11N 0xC58 -#define ODM_REG_ANTDIV_PARA3_11N 0xC5C -#define ODM_REG_L1SBD_PD_CH_11N 0XC6C -#define ODM_REG_BB_PWR_SAV2_11N 0xC70 -#define ODM_REG_RX_OFF_11N 0xC7C -#define ODM_REG_TXIQK_MATRIXA_11N 0xC80 -#define ODM_REG_TXIQK_MATRIXB_11N 0xC88 -#define ODM_REG_TXIQK_MATRIXA_LSB2_11N 0xC94 -#define ODM_REG_TXIQK_MATRIXB_LSB2_11N 0xC9C -#define ODM_REG_RXIQK_MATRIX_LSB_11N 0xCA0 -#define ODM_REG_ANTDIV_PARA1_11N 0xCA4 -#define ODM_REG_OFDM_FA_TYPE1_11N 0xCF0 -//PAGE D -#define ODM_REG_OFDM_FA_RSTD_11N 0xD00 -#define ODM_REG_BB_ATC_11N 0xD2C -#define ODM_REG_OFDM_FA_TYPE2_11N 0xDA0 -#define ODM_REG_OFDM_FA_TYPE3_11N 0xDA4 -#define ODM_REG_OFDM_FA_TYPE4_11N 0xDA8 -#define ODM_REG_RPT_11N 0xDF4 -//PAGE E -#define ODM_REG_TXAGC_A_6_18_11N 0xE00 -#define ODM_REG_TXAGC_A_24_54_11N 0xE04 -#define ODM_REG_TXAGC_A_1_MCS32_11N 0xE08 -#define ODM_REG_TXAGC_A_MCS0_3_11N 0xE10 -#define ODM_REG_TXAGC_A_MCS4_7_11N 0xE14 -#define ODM_REG_TXAGC_A_MCS8_11_11N 0xE18 -#define ODM_REG_TXAGC_A_MCS12_15_11N 0xE1C -#define ODM_REG_EDCCA_DCNF_11N 0xE24 -#define ODM_REG_FPGA0_IQK_11N 0xE28 -#define ODM_REG_TXIQK_TONE_A_11N 0xE30 -#define ODM_REG_RXIQK_TONE_A_11N 0xE34 -#define ODM_REG_TXIQK_PI_A_11N 0xE38 -#define ODM_REG_RXIQK_PI_A_11N 0xE3C -#define ODM_REG_TXIQK_11N 0xE40 -#define ODM_REG_RXIQK_11N 0xE44 -#define ODM_REG_IQK_AGC_PTS_11N 0xE48 -#define ODM_REG_IQK_AGC_RSP_11N 0xE4C -#define ODM_REG_BLUETOOTH_11N 0xE6C -#define ODM_REG_RX_WAIT_CCA_11N 0xE70 -#define ODM_REG_TX_CCK_RFON_11N 0xE74 -#define ODM_REG_TX_CCK_BBON_11N 0xE78 -#define ODM_REG_OFDM_RFON_11N 0xE7C -#define ODM_REG_OFDM_BBON_11N 0xE80 -#define ODM_REG_TX2RX_11N 0xE84 -#define ODM_REG_TX2TX_11N 0xE88 -#define ODM_REG_RX_CCK_11N 0xE8C -#define ODM_REG_RX_OFDM_11N 0xED0 -#define ODM_REG_RX_WAIT_RIFS_11N 0xED4 -#define ODM_REG_RX2RX_11N 0xED8 -#define ODM_REG_STANDBY_11N 0xEDC -#define ODM_REG_SLEEP_11N 0xEE0 -#define ODM_REG_PMPD_ANAEN_11N 0xEEC -#define ODM_REG_IGI_C_11N 0xF84 -#define ODM_REG_IGI_D_11N 0xF88 - -//2 MAC REG LIST -#define ODM_REG_BB_RST_11N 0x02 -#define ODM_REG_ANTSEL_PIN_11N 0x4C -#define ODM_REG_EARLY_MODE_11N 0x4D0 -#define ODM_REG_RSSI_MONITOR_11N 0x4FE -#define ODM_REG_EDCA_VO_11N 0x500 -#define ODM_REG_EDCA_VI_11N 0x504 -#define ODM_REG_EDCA_BE_11N 0x508 -#define ODM_REG_EDCA_BK_11N 0x50C -#define ODM_REG_TXPAUSE_11N 0x522 -#define ODM_REG_RESP_TX_11N 0x6D8 -#define ODM_REG_ANT_TRAIN_PARA1_11N 0x7b0 -#define ODM_REG_ANT_TRAIN_PARA2_11N 0x7b4 - - -//DIG Related -#define ODM_BIT_IGI_11N 0x0000007F -#define ODM_BIT_CCK_RPT_FORMAT_11N BIT9 -#define ODM_BIT_BB_RX_PATH_11N 0xF -#define ODM_BIT_BB_TX_PATH_11N 0xF -#define ODM_BIT_BB_ATC_11N BIT11 - -#endif - diff --git a/network/wlan/WDI/HAL/phydm/phydm_rxhp.h b/network/wlan/WDI/HAL/phydm/phydm_rxhp.h deleted file mode 100644 index 98b3aa6a..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_rxhp.h +++ /dev/null @@ -1,105 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __PHYDMRXHP_H__ -#define __PHYDMRXHP_H__ - -#define RXHP_VERSION "1.0" - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - -#define AFH_PSD 1 //0:normal PSD scan, 1: only do 20 pts PSD -#define MODE_40M 0 //0:20M, 1:40M -#define PSD_TH2 3 -#define PSD_CHMIN 20 // Minimum channel number for BT AFH -#define SIR_STEP_SIZE 3 -#define Smooth_Size_1 5 -#define Smooth_TH_1 3 -#define Smooth_Size_2 10 -#define Smooth_TH_2 4 -#define Smooth_Size_3 20 -#define Smooth_TH_3 4 -#define Smooth_Step_Size 5 -#define Adaptive_SIR 1 -#define PSD_RESCAN 4 -#define PSD_SCAN_INTERVAL 700 //ms - -typedef struct _RX_High_Power_ -{ - u1Byte RXHP_flag; - u1Byte PSD_func_trigger; - u1Byte PSD_bitmap_RXHP[80]; - u1Byte Pre_IGI; - u1Byte Cur_IGI; - u1Byte Pre_pw_th; - u1Byte Cur_pw_th; - BOOLEAN First_time_enter; - BOOLEAN RXHP_enable; - u1Byte TP_Mode; - RT_TIMER PSDTimer; - #if USE_WORKITEM - RT_WORK_ITEM PSDTimeWorkitem; - #endif -}RXHP_T, *pRXHP_T; - -#define dm_PSDMonitorCallback odm_PSDMonitorCallback -VOID odm_PSDMonitorCallback(PRT_TIMER pTimer); - -VOID -odm_PSDMonitorInit( - IN PVOID pDM_VOID - ); - -void odm_RXHPInit( - IN PVOID pDM_VOID); - -void odm_RXHP( - IN PVOID pDM_VOID); - -VOID -odm_PSD_RXHPCallback( - PRT_TIMER pTimer -); - - VOID -ODM_PSDDbgControl( - IN PADAPTER Adapter, - IN u4Byte mode, - IN u4Byte btRssi - ); - - VOID -odm_PSD_RXHPCallback( - PRT_TIMER pTimer -); - -VOID -odm_PSD_RXHPWorkitemCallback( - IN PVOID pContext - ); - -VOID -odm_PSDMonitorWorkItemCallback( - IN PVOID pContext - ); - - #endif - - #endif - \ No newline at end of file diff --git a/network/wlan/WDI/HAL/phydm/phydm_types.h b/network/wlan/WDI/HAL/phydm/phydm_types.h deleted file mode 100644 index 85be00b1..00000000 --- a/network/wlan/WDI/HAL/phydm/phydm_types.h +++ /dev/null @@ -1,314 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ODM_TYPES_H__ -#define __ODM_TYPES_H__ - -// -// Define Different SW team support -// -#define ODM_AP 0x01 //BIT0 -#define ODM_ADSL 0x02 //BIT1 -#define ODM_CE 0x04 //BIT2 -#define ODM_WIN 0x08 //BIT3 - -// Deifne HW endian support -#define ODM_ENDIAN_BIG 0 -#define ODM_ENDIAN_LITTLE 1 - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) -#define GET_PDM_ODM(__pAdapter) ((PDM_ODM_T)(&((GET_HAL_DATA(__pAdapter))->DM_OutSrc))) -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) -#define GET_PDM_ODM(__pAdapter) ((PDM_ODM_T)(&((GET_HAL_DATA(__pAdapter))->odmpriv))) -#endif - -#if (DM_ODM_SUPPORT_TYPE != ODM_WIN) -#define RT_PCI_INTERFACE 1 -#define RT_USB_INTERFACE 2 -#define RT_SDIO_INTERFACE 3 -#endif - -typedef enum _HAL_STATUS{ - HAL_STATUS_SUCCESS, - HAL_STATUS_FAILURE, - /*RT_STATUS_PENDING, - RT_STATUS_RESOURCE, - RT_STATUS_INVALID_CONTEXT, - RT_STATUS_INVALID_PARAMETER, - RT_STATUS_NOT_SUPPORT, - RT_STATUS_OS_API_FAILED,*/ -}HAL_STATUS,*PHAL_STATUS; - -#if( DM_ODM_SUPPORT_TYPE == ODM_AP) -#define MP_DRIVER 0 -#endif -#if(DM_ODM_SUPPORT_TYPE != ODM_WIN) - -#define VISTA_USB_RX_REVISE 0 - -// -// Declare for ODM spin lock defintion temporarily fro compile pass. -// -typedef enum _RT_SPINLOCK_TYPE{ - RT_TX_SPINLOCK = 1, - RT_RX_SPINLOCK = 2, - RT_RM_SPINLOCK = 3, - RT_CAM_SPINLOCK = 4, - RT_SCAN_SPINLOCK = 5, - RT_LOG_SPINLOCK = 7, - RT_BW_SPINLOCK = 8, - RT_CHNLOP_SPINLOCK = 9, - RT_RF_OPERATE_SPINLOCK = 10, - RT_INITIAL_SPINLOCK = 11, - RT_RF_STATE_SPINLOCK = 12, // For RF state. Added by Bruce, 2007-10-30. -#if VISTA_USB_RX_REVISE - RT_USBRX_CONTEXT_SPINLOCK = 13, - RT_USBRX_POSTPROC_SPINLOCK = 14, // protect data of Adapter->IndicateW/ IndicateR -#endif - //Shall we define Ndis 6.2 SpinLock Here ? - RT_PORT_SPINLOCK=16, - RT_VNIC_SPINLOCK=17, - RT_HVL_SPINLOCK=18, - RT_H2C_SPINLOCK = 20, // For H2C cmd. Added by tynli. 2009.11.09. - - RT_BTData_SPINLOCK=25, - - RT_WAPI_OPTION_SPINLOCK=26, - RT_WAPI_RX_SPINLOCK=27, - - // add for 92D CCK control issue - RT_CCK_PAGEA_SPINLOCK = 28, - RT_BUFFER_SPINLOCK = 29, - RT_CHANNEL_AND_BANDWIDTH_SPINLOCK = 30, - RT_GEN_TEMP_BUF_SPINLOCK = 31, - RT_AWB_SPINLOCK = 32, - RT_FW_PS_SPINLOCK = 33, - RT_HW_TIMER_SPIN_LOCK = 34, - RT_MPT_WI_SPINLOCK = 35, - RT_P2P_SPIN_LOCK = 36, // Protect P2P context - RT_DBG_SPIN_LOCK = 37, - RT_IQK_SPINLOCK = 38, - RT_PENDED_OID_SPINLOCK = 39, - RT_CHNLLIST_SPINLOCK = 40, - RT_INDIC_SPINLOCK = 41, //protect indication - RT_RFD_SPINLOCK = 42, - RT_SYNC_IO_CNT_SPINLOCK = 43, - RT_LAST_SPINLOCK, -}RT_SPINLOCK_TYPE; - -#endif - - -#if (DM_ODM_SUPPORT_TYPE == ODM_WIN) - #define STA_INFO_T RT_WLAN_STA - #define PSTA_INFO_T PRT_WLAN_STA - - #define CONFIG_HW_ANTENNA_DIVERSITY - #define CONFIG_SW_ANTENNA_DIVERSITY - /*#define CONFIG_HL_SMART_ANTENNA_TYPE1*/ - /*#define CONFIG_PATH_DIVERSITY*/ - /*#define CONFIG_RA_DYNAMIC_RTY_LIMIT*/ - #define CONFIG_ANT_DETECTION - #define CONFIG_RA_DBG_CMD - - #define __func__ __FUNCTION__ - #define PHYDM_TESTCHIP_SUPPORT TESTCHIP_SUPPORT - #define bMaskH3Bytes 0xffffff00 - #define SUCCESS 0 - #define FAIL (-1) - -#elif (DM_ODM_SUPPORT_TYPE == ODM_AP) - - // To let ADSL/AP project compile ok; it should be removed after all conflict are solved. Added by Annie, 2011-10-07. - #define ADSL_AP_BUILD_WORKAROUND - #define AP_BUILD_WORKAROUND - - //2 [ Configure RA Debug H2C CMD ] - #define CONFIG_RA_DBG_CMD - - /*#define CONFIG_PATH_DIVERSITY*/ - /*#define CONFIG_RA_DYNAMIC_RTY_LIMIT*/ - - //2 [ Configure Antenna Diversity ] -#if defined(CONFIG_RTL_8881A_ANT_SWITCH) || defined(CONFIG_SLOT_0_ANT_SWITCH) || defined(CONFIG_SLOT_1_ANT_SWITCH) - #define CONFIG_HW_ANTENNA_DIVERSITY - #define ODM_EVM_ENHANCE_ANTDIV - - //---------- - #if(!defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_2G5G_CG_TRX_DIVERSITY_8881A) && !defined(CONFIG_2G_CGCS_RX_DIVERSITY) && !defined(CONFIG_2G_CG_TRX_DIVERSITY) && !defined(CONFIG_2G_CG_SMART_ANT_DIVERSITY)) - #define CONFIG_NO_2G_DIVERSITY - #endif - - #ifdef CONFIG_NO_5G_DIVERSITY_8881A - #define CONFIG_NO_5G_DIVERSITY - #elif defined(CONFIG_5G_CGCS_RX_DIVERSITY_8881A) - #define CONFIG_5G_CGCS_RX_DIVERSITY - #elif defined(CONFIG_5G_CG_TRX_DIVERSITY_8881A) - #define CONFIG_5G_CG_TRX_DIVERSITY - #elif defined(CONFIG_2G5G_CG_TRX_DIVERSITY_8881A) - #define CONFIG_2G5G_CG_TRX_DIVERSITY - #endif - #if(!defined(CONFIG_NO_5G_DIVERSITY) && !defined(CONFIG_5G_CGCS_RX_DIVERSITY) && !defined(CONFIG_5G_CG_TRX_DIVERSITY) && !defined(CONFIG_2G5G_CG_TRX_DIVERSITY) && !defined(CONFIG_5G_CG_SMART_ANT_DIVERSITY)) - #define CONFIG_NO_5G_DIVERSITY - #endif - //---------- - #if ( defined(CONFIG_NO_2G_DIVERSITY) && defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_NOT_SUPPORT_ANTDIV - #elif( !defined(CONFIG_NO_2G_DIVERSITY) && defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_2G_SUPPORT_ANTDIV - #elif( defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY) ) - #define CONFIG_5G_SUPPORT_ANTDIV - #elif( (!defined(CONFIG_NO_2G_DIVERSITY) && !defined(CONFIG_NO_5G_DIVERSITY)) || defined(CONFIG_2G5G_CG_TRX_DIVERSITY) ) - #define CONFIG_2G5G_SUPPORT_ANTDIV - #endif - //---------- -#endif - #ifdef AP_BUILD_WORKAROUND - #include "../typedef.h" - #else - typedef void VOID,*PVOID; - typedef unsigned char BOOLEAN,*PBOOLEAN; - typedef unsigned char u1Byte,*pu1Byte; - typedef unsigned short u2Byte,*pu2Byte; - typedef unsigned int u4Byte,*pu4Byte; - typedef unsigned long long u8Byte,*pu8Byte; -#if 1 -/* In ARM platform, system would use the type -- "char" as "unsigned char" - * And we only use s1Byte/ps1Byte as INT8 now, so changes the type of s1Byte.*/ - typedef signed char s1Byte,*ps1Byte; -#else - typedef char s1Byte,*ps1Byte; -#endif - typedef short s2Byte,*ps2Byte; - typedef long s4Byte,*ps4Byte; - typedef long long s8Byte,*ps8Byte; - #endif - - typedef struct rtl8192cd_priv *prtl8192cd_priv; - typedef struct stat_info STA_INFO_T,*PSTA_INFO_T; - typedef struct timer_list RT_TIMER, *PRT_TIMER; - typedef void * RT_TIMER_CALL_BACK; - -#ifdef CONFIG_PCI_HCI - #define DEV_BUS_TYPE RT_PCI_INTERFACE -#endif - - #define _TRUE 1 - #define _FALSE 0 - - #if (defined(TESTCHIP_SUPPORT)) - #define PHYDM_TESTCHIP_SUPPORT 1 - #else - #define PHYDM_TESTCHIP_SUPPORT 0 - #endif - -#elif (DM_ODM_SUPPORT_TYPE == ODM_CE) - #include - - /*#define CONFIG_RA_DBG_CMD*/ - /*#define CONFIG_ANT_DETECTION*/ - /*#define CONFIG_PATH_DIVERSITY*/ - /*#define CONFIG_RA_DYNAMIC_RTY_LIMIT*/ - -#if 0 - typedef u8 u1Byte, *pu1Byte; - typedef u16 u2Byte,*pu2Byte; - typedef u32 u4Byte,*pu4Byte; - typedef u64 u8Byte,*pu8Byte; - typedef s8 s1Byte,*ps1Byte; - typedef s16 s2Byte,*ps2Byte; - typedef s32 s4Byte,*ps4Byte; - typedef s64 s8Byte,*ps8Byte; -#else - #define u1Byte u8 - #define pu1Byte u8* - - #define u2Byte u16 - #define pu2Byte u16* - - #define u4Byte u32 - #define pu4Byte u32* - - #define u8Byte u64 - #define pu8Byte u64* - - #define s1Byte s8 - #define ps1Byte s8* - - #define s2Byte s16 - #define ps2Byte s16* - - #define s4Byte s32 - #define ps4Byte s32* - - #define s8Byte s64 - #define ps8Byte s64* - -#endif - #ifdef CONFIG_USB_HCI - #define DEV_BUS_TYPE RT_USB_INTERFACE - #elif defined(CONFIG_PCI_HCI) - #define DEV_BUS_TYPE RT_PCI_INTERFACE - #elif defined(CONFIG_SDIO_HCI) - #define DEV_BUS_TYPE RT_SDIO_INTERFACE - #elif defined(CONFIG_GSPI_HCI) - #define DEV_BUS_TYPE RT_SDIO_INTERFACE - #endif - - - #if defined(CONFIG_LITTLE_ENDIAN) - #define ODM_ENDIAN_TYPE ODM_ENDIAN_LITTLE - #elif defined (CONFIG_BIG_ENDIAN) - #define ODM_ENDIAN_TYPE ODM_ENDIAN_BIG - #endif - - typedef struct timer_list RT_TIMER, *PRT_TIMER; - typedef void * RT_TIMER_CALL_BACK; - #define STA_INFO_T struct sta_info - #define PSTA_INFO_T struct sta_info * - - - - #define TRUE _TRUE - #define FALSE _FALSE - - - #define SET_TX_DESC_ANTSEL_A_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 1, __Value) - #define SET_TX_DESC_ANTSEL_B_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 25, 1, __Value) - #define SET_TX_DESC_ANTSEL_C_88E(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 29, 1, __Value) - - //define useless flag to avoid compile warning - #define USE_WORKITEM 0 - #define FOR_BRAZIL_PRETEST 0 - #define FPGA_TWO_MAC_VERIFICATION 0 - #define RTL8881A_SUPPORT 0 - - #if (defined(TESTCHIP_SUPPORT)) - #define PHYDM_TESTCHIP_SUPPORT 1 - #else - #define PHYDM_TESTCHIP_SUPPORT 0 - #endif -#endif - -#define READ_NEXT_PAIR(v1, v2, i) do { if (i+2 >= ArrayLen) break; i += 2; v1 = Array[i]; v2 = Array[i+1]; } while(0) -#define COND_ELSE 2 -#define COND_ENDIF 3 - -#endif // __ODM_TYPES_H__ - diff --git a/network/wlan/WDI/HAL/phydm/rtchnlplan.h b/network/wlan/WDI/HAL/phydm/rtchnlplan.h deleted file mode 100644 index 78a31dcd..00000000 --- a/network/wlan/WDI/HAL/phydm/rtchnlplan.h +++ /dev/null @@ -1,699 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - - -#ifndef __RT_CHANNELPLAN_H__ -#define __RT_CHANNELPLAN_H__ - -typedef enum _RT_CHANNEL_DOMAIN_NEW -{ - - //===== Add new channel plan above this line ===============// - - // For new architecture we define different 2G/5G CH area for all country. - // 2.4 G only - RT_CHANNEL_DOMAIN_2G_WORLD_5G_NULL = 0x20, - RT_CHANNEL_DOMAIN_2G_ETSI1_5G_NULL = 0x21, - RT_CHANNEL_DOMAIN_2G_FCC1_5G_NULL = 0x22, - RT_CHANNEL_DOMAIN_2G_MKK1_5G_NULL = 0x23, - RT_CHANNEL_DOMAIN_2G_ETSI2_5G_NULL = 0x24, - // 2.4 G + 5G type 1 - RT_CHANNEL_DOMAIN_2G_FCC1_5G_FCC1 = 0x25, - RT_CHANNEL_DOMAIN_2G_WORLD_5G_ETSI1 = 0x26, - //RT_CHANNEL_DOMAIN_2G_WORLD_5G_ETSI1 = 0x27, - // ..... - - RT_CHANNEL_DOMAIN_MAX_NEW, - -}RT_CHANNEL_DOMAIN_NEW, *PRT_CHANNEL_DOMAIN_NEW; - - -#if 0 -#define DOMAIN_CODE_2G_WORLD \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_ETSI1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define DOMAIN_CODE_2G_ETSI2 \ - {1,2,3,4,5,6,7,8,9,10,11}, 11 -#define DOMAIN_CODE_2G_FCC1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define DOMAIN_CODE_2G_MKK1 \ - {10,11,12,13}, 4 - -#define DOMAIN_CODE_5G_ETSI1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define DOMAIN_CODE_5G_ETSI2 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_ETSI3 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22 -#define DOMAIN_CODE_5G_FCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_FCC2 \ - {36,40,44,48,149,153,157,161,165}, 9 -#define DOMAIN_CODE_5G_FCC3 \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define DOMAIN_CODE_5G_FCC4 \ - {36,40,44,48,52,56,60,64,149,153,157,161}, 12 -#define DOMAIN_CODE_5G_FCC5 \ - {149,153,157,161,165}, 5 -#define DOMAIN_CODE_5G_FCC6 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_FCC7 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 -#define DOMAIN_CODE_5G_IC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 -#define DOMAIN_CODE_5G_KCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165}, 20 -#define DOMAIN_CODE_5G_MKK1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define DOMAIN_CODE_5G_MKK2 \ - {36,40,44,48,52,56,60,64}, 8 -#define DOMAIN_CODE_5G_MKK3 \ - {100,104,108,112,116,120,124,128,132,136,140}, 11 -#define DOMAIN_CODE_5G_NCC1 \ - {56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 24 -#define DOMAIN_CODE_5G_NCC2 \ - {56,60,64,149,153,157,161,165}, 8 -#define UNDEFINED \ - {0}, 0 -#endif - -// -// -// -/* - -Countries "Country Abbreviation" Domain Code SKU's Ch# of 20MHz - 2G 5G Ch# of 40MHz -"Albaniaªüº¸¤Ú¥§¨È" AL Local Test - -"Algeriaªüº¸¤Î§Q¨È" DZ CE TCF - -"Antigua & Barbuda¦w´£¥Ê®q&¤Ú¥¬¹F" AG 2G_WORLD FCC TCF - -"Argentinaªü®Ú§Ê" AR 2G_WORLD Local Test - -"Armenia¨È¬ü¥§¨È" AM 2G_WORLD ETSI - -"Arubaªü¾|¤Ú®q" AW 2G_WORLD FCC TCF - -"Australia¿D¬w" AU 2G_WORLD 5G_ETSI2 - -"Austria¶ø¦a§Q" AT 2G_WORLD 5G_ETSI1 CE - -"Azerbaijanªü¶ë«ô¾Ê" AZ 2G_WORLD CE TCF - -"Bahamas¤Ú«¢°¨" BS 2G_WORLD - -"Barbados¤Ú¤Ú¦h´µ" BB 2G_WORLD FCC TCF - -"Belgium¤ñ§Q®É" BE 2G_WORLD 5G_ETSI1 CE - -"Bermuda¦Ê¼}¹F" BM 2G_WORLD FCC TCF - -"Brazil¤Ú¦è" BR 2G_WORLD Local Test - -"Bulgaria«O¥[§Q¨È" BG 2G_WORLD 5G_ETSI1 CE - -"Canada¥[®³¤j" CA 2G_FCC1 5G_FCC7 IC / FCC IC / FCC - -"Cayman Islands¶}°Ò¸s®q" KY 2G_WORLD 5G_ETSI1 CE - -"Chile´¼§Q" CL 2G_WORLD FCC TCF - -"China¤¤°ê" CN 2G_WORLD 5G_FCC5 «H³¡?¡i2002¡j353? - -"Columbia­ô­Û¤ñ¨È" CO 2G_WORLD Voluntary - -"Costa Rica­ô´µ¹F¾¤¥[" CR 2G_WORLD FCC TCF - -"Cyprus¶ë®ú¸ô´µ" CY 2G_WORLD 5G_ETSI1 CE - -"Czech ±¶§J" CZ 2G_WORLD 5G_ETSI1 CE - -"Denmark¤¦³Á" DK 2G_WORLD 5G_ETSI1 CE - -"Dominican Republic¦h©ú¥§¥[¦@©M°ê" DO 2G_WORLD FCC TCF - -"Egypt®J¤Î" EG 2G_WORLD CE T CF - -"El SalvadorÂĺ¸¥Ë¦h" SV 2G_WORLD Voluntary - -"Estonia·R¨F¥§¨È" EE 2G_WORLD 5G_ETSI1 CE - -"FinlandªâÄõ" FI 2G_WORLD 5G_ETSI1 CE - -"Franceªk°ê" FR 5G_E TSI1 CE - -"Germany¼w°ê" DE 2G_WORLD 5G_ETSI1 CE - -"Greece §ÆÃ¾" GR 2G_WORLD 5G_ETSI1 CE - -"GuamÃö®q" GU 2G_WORLD - -"Guatemala¥Ê¦a°¨©Ô" GT 2G_WORLD - -"Haiti®ü¦a" HT 2G_WORLD FCC TCF - -"Honduras§»³£©Ô´µ" HN 2G_WORLD FCC TCF - -"Hungary¦I¤ú§Q" HU 2G_WORLD 5G_ETSI1 CE - -"Iceland¦B®q" IS 2G_WORLD 5G_ETSI1 CE - -"India¦L«×" IN 2G_WORLD 5G_FCC3 FCC/CE TCF - -"Ireland·Rº¸Äõ" IE 2G_WORLD 5G_ETSI1 CE - -"Israel¥H¦â¦C" IL 5G_F CC6 CE TCF - -"Italy¸q¤j§Q" IT 2G_WORLD 5G_ETSI1 CE - -"Japan¤é¥»" JP 2G_MKK1 5G_MKK1 MKK MKK - -"KoreaÁú°ê" KR 2G_WORLD 5G_KCC1 KCC KCC - -"Latvia©Ô²æºû¨È" LV 2G_WORLD 5G_ETSI1 CE - -"Lithuania¥ß³³©{" LT 2G_WORLD 5G_ETSI1 CE - -"Luxembourg¿c´Ë³ù" LU 2G_WORLD 5G_ETSI1 CE - -"Malaysia°¨¨Ó¦è¨È" MY 2G_WORLD Local Test - -"Malta°¨º¸¥L" MT 2G_WORLD 5G_ETSI1 CE - -"Mexico¾¥¦è­ô" MX 2G_WORLD 5G_FCC3 Local Test - -"Morocco¼¯¬¥­ô" MA CE TCF - -"Netherlands²üÄõ" NL 2G_WORLD 5G_ETSI1 CE - -"New Zealand¯Ã¦èÄõ" NZ 2G_WORLD 5G_ETSI2 - -"Norway®¿«Â" NO 2G_WORLD 5G_ETSI1 CE - -"Panama¤Ú®³°¨ " PA 2G_FCC1 Voluntary - -"Philippinesµá«ß»«" PH 2G_WORLD FCC TCF - -"PolandªiÄõ" PL 2G_WORLD 5G_ETSI1 CE - -"Portugal¸²µå¤ú" PT 2G_WORLD 5G_ETSI1 CE - -"Romaniaù°¨¥§¨È" RO 2G_WORLD 5G_ETSI1 CE - -"Russia«Xù´µ" RU 2G_WORLD 5G_ETSI3 CE TCF - -"Saudi Arabia¨F¦aªü©Ô§B" SA 2G_WORLD CE TCF - -"Singapore·s¥[©Y" SG 2G_WORLD - -"Slovakia´µ¬¥¥ï§J" SK 2G_WORLD 5G_ETSI1 CE - -"Slovenia´µ¬¥ºû¥§¨È" SI 2G_WORLD 5G_ETSI1 CE - -"South Africa«n«D" ZA 2G_WORLD CE TCF - -"Spain¦è¯Z¤ú" ES 5G_ETSI1 CE - -"Sweden·ç¨å" SE 2G_WORLD 5G_ETSI1 CE - -"Switzerland·ç¤h" CH 2G_WORLD 5G_ETSI1 CE - -"Taiwan»OÆW" TW 2G_FCC1 5G_NCC1 NCC - -"Thailand®õ°ê" TH 2G_WORLD FCC/CE TCF - -"Turkey¤g¦Õ¨ä" TR 2G_WORLD - -"Ukraine¯Q§JÄõ" UA 2G_WORLD Local Test - -"United Kingdom­^°ê" GB 2G_WORLD 5G_ETSI1 CE ETSI - -"United States¬ü°ê" US 2G_FCC1 5G_FCC7 FCC FCC - -"Venezuela©e¤º·ç©Ô" VE 2G_WORLD 5G_FCC4 FCC TCF - -"Vietnam¶V«n" VN 2G_WORLD FCC/CE TCF - - - -*/ - -// Counter abbervation. -typedef enum _RT_COUNTRY_DEFINE_NUM -{ - RT_CTRY_AL, // "Albaniaªüº¸¤Ú¥§¨È" - RT_CTRY_DZ, // "Algeriaªüº¸¤Î§Q¨È" - RT_CTRY_AG, // "Antigua & Barbuda¦w´£¥Ê®q&¤Ú¥¬¹F" - RT_CTRY_AR, // "Argentinaªü®Ú§Ê" - RT_CTRY_AM, // "Armenia¨È¬ü¥§¨È" - RT_CTRY_AW, // "Arubaªü¾|¤Ú®q" - RT_CTRY_AU, // "Australia¿D¬w" - RT_CTRY_AT, // "Austria¶ø¦a§Q" - RT_CTRY_AZ, // "Azerbaijanªü¶ë«ô¾Ê" - RT_CTRY_BS, // "Bahamas¤Ú«¢°¨" - RT_CTRY_BB, // "Barbados¤Ú¤Ú¦h´µ" - RT_CTRY_BE, // "Belgium¤ñ§Q®É" - RT_CTRY_BM, // "Bermuda¦Ê¼}¹F" - RT_CTRY_BR, // "Brazil¤Ú¦è" - RT_CTRY_BG, // "Bulgaria«O¥[§Q¨È" - RT_CTRY_CA, // "Canada¥[®³¤j" - RT_CTRY_KY, // "Cayman Islands¶}°Ò¸s®q" - RT_CTRY_CL, // "Chile´¼§Q" - RT_CTRY_CN, // "China¤¤°ê" - RT_CTRY_CO, // "Columbia­ô­Û¤ñ¨È" - RT_CTRY_CR, // "Costa Rica­ô´µ¹F¾¤¥[" - RT_CTRY_CY, // "Cyprus¶ë®ú¸ô´µ" - RT_CTRY_CZ, // "Czech ±¶§J" - RT_CTRY_DK, // "Denmark¤¦³Á" - RT_CTRY_DO, // "Dominican Republic¦h©ú¥§¥[¦@©M°ê" - RT_CTRY_CE, // "Egypt®J¤Î" EG 2G_WORLD - RT_CTRY_SV, // "El SalvadorÂĺ¸¥Ë¦h" - RT_CTRY_EE, // "Estonia·R¨F¥§¨È" - RT_CTRY_FI, // "FinlandªâÄõ" - RT_CTRY_FR, // "Franceªk°ê" - RT_CTRY_DE, // "Germany¼w°ê" - RT_CTRY_GR, // "Greece §ÆÃ¾" - RT_CTRY_GU, // "GuamÃö®q" - RT_CTRY_GT, // "Guatemala¥Ê¦a°¨©Ô" - RT_CTRY_HT, // "Haiti®ü¦a" - RT_CTRY_HN, // "Honduras§»³£©Ô´µ" - RT_CTRY_HU, // "Hungary¦I¤ú§Q" - RT_CTRY_IS, // "Iceland¦B®q" - RT_CTRY_IN, // "India¦L«×" - RT_CTRY_IE, // "Ireland·Rº¸Äõ" - RT_CTRY_IL, // "Israel¥H¦â¦C" - RT_CTRY_IT, // "Italy¸q¤j§Q" - RT_CTRY_JP, // "Japan¤é¥»" - RT_CTRY_KR, // "KoreaÁú°ê" - RT_CTRY_LV, // "Latvia©Ô²æºû¨È" - RT_CTRY_LT, // "Lithuania¥ß³³©{" - RT_CTRY_LU, // "Luxembourg¿c´Ë³ù" - RT_CTRY_MY, // "Malaysia°¨¨Ó¦è¨È" - RT_CTRY_MT, // "Malta°¨º¸¥L" - RT_CTRY_MX, // "Mexico¾¥¦è­ô" - RT_CTRY_MA, // "Morocco¼¯¬¥­ô" - RT_CTRY_NL, // "Netherlands²üÄõ" - RT_CTRY_NZ, // "New Zealand¯Ã¦èÄõ" - RT_CTRY_NO, // "Norway®¿«Â" - RT_CTRY_PA, // "Panama¤Ú®³°¨ " - RT_CTRY_PH, // "Philippinesµá«ß»«" - RT_CTRY_PL, // "PolandªiÄõ" - RT_CTRY_PT, // "Portugal¸²µå¤ú" - RT_CTRY_RO, // "Romaniaù°¨¥§¨È" - RT_CTRY_RU, // "Russia«Xù´µ" - RT_CTRY_SA, // "Saudi Arabia¨F¦aªü©Ô§B" - RT_CTRY_SG, // "Singapore·s¥[©Y" - RT_CTRY_SK, // "Slovakia´µ¬¥¥ï§J" - RT_CTRY_SI, // "Slovenia´µ¬¥ºû¥§¨È" - RT_CTRY_ZA, // "South Africa«n«D" - RT_CTRY_ES, // "Spain¦è¯Z¤ú" - RT_CTRY_SE, // "Sweden·ç¨å" - RT_CTRY_CH, // "Switzerland·ç¤h" - RT_CTRY_TW, // "Taiwan»OÆW" - RT_CTRY_TH, // "Thailand®õ°ê" - RT_CTRY_TR, // "Turkey¤g¦Õ¨ä" - RT_CTRY_UA, // "Ukraine¯Q§JÄõ" - RT_CTRY_GB, // "United Kingdom­^°ê" - RT_CTRY_US, // "United States¬ü°ê" - RT_CTRY_VE, // "Venezuela©e¤º·ç©Ô" - RT_CTRY_VN, // "Vietnam¶V«n" - RT_CTRY_MAX, // - -}RT_COUNTRY_NAME, *PRT_COUNTRY_NAME; - -// Scan type including active and passive scan. -typedef enum _RT_SCAN_TYPE_NEW -{ - SCAN_NULL, - SCAN_ACT, - SCAN_PAS, - SCAN_BOTH, -}RT_SCAN_TYPE_NEW, *PRT_SCAN_TYPE_NEW; - - -// Power table sample. - -typedef struct _RT_CHNL_PLAN_LIMIT -{ - u2Byte Chnl_Start; - u2Byte Chnl_end; - - u2Byte Freq_Start; - u2Byte Freq_end; -}RT_CHNL_PLAN_LIMIT, *PRT_CHNL_PLAN_LIMIT; - - -// -// 2.4G Regulatory Domains -// -typedef enum _RT_REGULATION_DOMAIN_2G -{ - RT_2G_NULL, - RT_2G_WORLD, - RT_2G_ETSI1, - RT_2G_FCC1, - RT_2G_MKK1, - RT_2G_ETSI2 - -}RT_REGULATION_2G, *PRT_REGULATION_2G; - - -//typedef struct _RT_CHANNEL_BEHAVIOR -//{ -// u1Byte Chnl; -// RT_SCAN_TYPE_NEW -// -//}RT_CHANNEL_BEHAVIOR, *PRT_CHANNEL_BEHAVIOR; - -//typedef struct _RT_CHANNEL_PLAN_TYPE -//{ -// RT_CHANNEL_BEHAVIOR -// u1Byte Chnl_num; -//}RT_CHNL_PLAN_TYPE, *PRT_CHNL_PLAN_TYPE; - -// -// 2.4G Channel Number -// Channel definition & number -// -#define CHNL_RT_2G_NULL \ - {0}, 0 -#define CHNL_RT_2G_WORLD \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define CHNL_RT_2G_WORLD_TEST \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 - -#define CHNL_RT_2G_EFSI1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13}, 13 -#define CHNL_RT_2G_FCC1 \ - {1,2,3,4,5,6,7,8,9,10,11}, 11 -#define CHNL_RT_2G_MKK1 \ - {1,2,3,4,5,6,7,8,9,10,11,12,13,14}, 14 -#define CHNL_RT_2G_ETSI2 \ - {10,11,12,13}, 4 - -// -// 2.4G Channel Active or passive scan. -// -#define CHNL_RT_2G_NULL_SCAN_TYPE \ - {SCAN_NULL} -#define CHNL_RT_2G_WORLD_SCAN_TYPE \ - {1,1,1,1,1,1,1,1,1,1,1,0,0} -#define CHNL_RT_2G_EFSI1_SCAN_TYPE \ - {1,1,1,1,1,1,1,1,1,1,1,1,1} -#define CHNL_RT_2G_FCC1_SCAN_TYPE \ - {1,1,1,1,1,1,1,1,1,1,1} -#define CHNL_RT_2G_MKK1_SCAN_TYPE \ - {1,1,1,1,1,1,1,1,1,1,1,1,1,1} -#define CHNL_RT_2G_ETSI2_SCAN_TYPE \ - {1,1,1,1} - - -// -// 2.4G Band & Frequency Section -// Freqency start & end / band number -// -#define FREQ_RT_2G_NULL \ - {0}, 0 - // Passive scan CH 12, 13 -#define FREQ_RT_2G_WORLD \ - {2412, 2472}, 1 -#define FREQ_RT_2G_EFSI1 \ - {2412, 2472}, 1 -#define FREQ_RT_2G_FCC1 \ - {2412, 2462}, 1 -#define FREQ_RT_2G_MKK1 \ - {2412, 2484}, 1 -#define FREQ_RT_2G_ETSI2 \ - {2457, 2472}, 1 - - -// -// 5G Regulatory Domains -// -typedef enum _RT_REGULATION_DOMAIN_5G -{ - RT_5G_NULL, - RT_5G_WORLD, - RT_5G_ETSI1, - RT_5G_ETSI2, - RT_5G_ETSI3, - RT_5G_FCC1, - RT_5G_FCC2, - RT_5G_FCC3, - RT_5G_FCC4, - RT_5G_FCC5, - RT_5G_FCC6, - RT_5G_FCC7, - RT_5G_IC1, - RT_5G_KCC1, - RT_5G_MKK1, - RT_5G_MKK2, - RT_5G_MKK3, - RT_5G_NCC1, - -}RT_REGULATION_5G, *PRT_REGULATION_5G; - -// -// 5G Channel Number -// -#define CHNL_RT_5G_NULL \ - {0}, 0 -#define CHNL_RT_5G_WORLD \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define CHNL_RT_5G_ETSI1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define CHNL_RT_5G_ETSI2 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22 -#define CHNL_RT_5G_ETSI3 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define CHNL_RT_5G_FCC1 \ - {36,40,44,48,149,153,157,161,165}, 9 -#define CHNL_RT_5G_FCC2 \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define CHNL_RT_5G_FCC3 \ - {36,40,44,48,52,56,60,64,149,153,157,161}, 12 -#define CHNL_RT_5G_FCC4 \ - {149,153,157,161,165}, 5 -#define CHNL_RT_5G_FCC5 \ - {36,40,44,48,52,56,60,64}, 8 -#define CHNL_RT_5G_FCC6 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 -#define CHNL_RT_5G_FCC7 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 -#define CHNL_RT_5G_IC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165}, 20 -#define CHNL_RT_5G_KCC1 \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define CHNL_RT_5G_MKK1 \ - {36,40,44,48,52,56,60,64}, 8 -#define CHNL_RT_5G_MKK2 \ - {100,104,108,112,116,120,124,128,132,136,140}, 11 -#define CHNL_RT_5G_MKK3 \ - {56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 24 -#define CHNL_RT_5G_NCC1 \ - {56,60,64,149,153,157,161,165}, 8 - -// -// 5G Channel Active or passive scan. -// -#define CHNL_RT_5G_NULL_SCAN_TYPE \ - {SCAN_NULL} -#define CHNL_RT_5G_WORLD_SCAN_TYPE \ - {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} -#define CHNL_RT_5G_ETSI1_SCAN_TYPE \ - {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} -#define CHNL_RT_5G_ETSI2_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,149,153,157,161,165}, 22 -#define CHNL_RT_5G_ETSI3_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165}, 24 -#define CHNL_RT_5G_FCC1_SCAN_TYPE \ - {36,40,44,48,149,153,157,161,165}, 9 -#define CHNL_RT_5G_FCC2_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,149,153,157,161,165}, 13 -#define CHNL_RT_5G_FCC3_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,149,153,157,161}, 12 -#define CHNL_RT_5G_FCC4_SCAN_TYPE \ - {149,153,157,161,165}, 5 -#define CHNL_RT_5G_FCC5_SCAN_TYPE \ - {36,40,44,48,52,56,60,64}, 8 -#define CHNL_RT_5G_FCC6_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 -#define CHNL_RT_5G_FCC7_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 20 -#define CHNL_RT_5G_IC1_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,149,153,157,161,165}, 20 -#define CHNL_RT_5G_KCC1_SCAN_TYPE \ - {36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140}, 19 -#define CHNL_RT_5G_MKK1_SCAN_TYPE \ - {36,40,44,48,52,56,60,64}, 8 -#define CHNL_RT_5G_MKK2_SCAN_TYPE \ - {100,104,108,112,116,120,124,128,132,136,140}, 11 -#define CHNL_RT_5G_MKK3_SCAN_TYPE \ - {56,60,64,100,104,108,112,116,136,140,149,153,157,161,165}, 24 -#define CHNL_RT_5G_NCC1_SCAN_TYPE \ - {56,60,64,149,153,157,161,165}, 8 - -// -// Global Regulation -// -typedef enum _RT_REGULATION_COMMON -{ - RT_WORLD, - RT_FCC, - RT_MKK, - RT_ETSI, - RT_IC, - RT_CE, - RT_NCC, - -}RT_REGULATION_CMN, *PRT_REGULATION_CMN; - - - -// -// Special requirement for different regulation domain. -// For internal test or customerize special request. -// -typedef enum _RT_CHNLPLAN_SREQ -{ - RT_SREQ_NA = 0x0, - RT_SREQ_2G_ADHOC_11N = 0x00000001, - RT_SREQ_2G_ADHOC_11B = 0x00000002, - RT_SREQ_2G_ALL_PASS = 0x00000004, - RT_SREQ_2G_ALL_ACT = 0x00000008, - RT_SREQ_5G_ADHOC_11N = 0x00000010, - RT_SREQ_5G_ADHOC_11AC = 0x00000020, - RT_SREQ_5G_ALL_PASS = 0x00000040, - RT_SREQ_5G_ALL_ACT = 0x00000080, - RT_SREQ_C1_PLAN = 0x00000100, - RT_SREQ_C2_PLAN = 0x00000200, - RT_SREQ_C3_PLAN = 0x00000400, - RT_SREQ_C4_PLAN = 0x00000800, - RT_SREQ_NFC_ON = 0x00001000, - RT_SREQ_MASK = 0x0000FFFF, /* Requirements bit mask */ - -}RT_CHNLPLAN_SREQ, *PRT_CHNLPLAN_SREQ; - - -// -// RT_COUNTRY_NAME & RT_REGULATION_2G & RT_REGULATION_5G transfer table -// -// -typedef struct _RT_CHANNEL_PLAN_COUNTRY_TRANSFER_TABLE -{ - // - // Define countery domain and corresponding - // - RT_COUNTRY_NAME Country_Enum; - char Country_Name[3]; - - //char Domain_Name[12]; - RT_REGULATION_2G Domain_2G; - - RT_REGULATION_5G Domain_5G; - - RT_CHANNEL_DOMAIN RtChDomain; - //u1Byte Country_Area; - -}RT_CHNL_CTRY_TBL, *PRT_CHNL_CTRY_TBL; - - -#define RT_MAX_CHNL_NUM_2G 13 -#define RT_MAX_CHNL_NUM_5G 44 - -// Power table sample. - -typedef struct _RT_CHNL_PLAN_PWR_LIMIT -{ - u2Byte Chnl_Start; - u2Byte Chnl_end; - u1Byte dB_Max; - u2Byte mW_Max; -}RT_CHNL_PWR_LIMIT, *PRT_CHNL_PWR_LIMIT; - - -#define RT_MAX_BAND_NUM 5 - -typedef struct _RT_CHANNEL_PLAN_MAXPWR -{ -// STRING_T - RT_CHNL_PWR_LIMIT Chnl[RT_MAX_BAND_NUM]; - u1Byte Band_Useful_Num; - - -}RT_CHANNEL_PLAN_MAXPWR, *PRT_CHANNEL_PLAN_MAXPWR; - - -// -// Power By Rate Table. -// - - - -typedef struct _RT_CHANNEL_PLAN_NEW -{ - // - // Define countery domain and corresponding - // - //char Country_Name[36]; - //u1Byte Country_Enum; - - //char Domain_Name[12]; - - - PRT_CHNL_CTRY_TBL pCtryTransfer; - - RT_CHANNEL_DOMAIN RtChDomain; - - RT_REGULATION_2G Domain_2G; - - RT_REGULATION_5G Domain_5G; - - RT_REGULATION_CMN Regulator; - - RT_CHNLPLAN_SREQ ChnlSreq; - - //RT_CHNL_PLAN_LIMIT RtChnl; - - u1Byte Chnl2G[MAX_CHANNEL_NUM]; // CHNL_RT_2G_WORLD - u1Byte Len2G; - u1Byte Chnl2GScanTp[MAX_CHANNEL_NUM]; // CHNL_RT_2G_WORLD_SCAN_TYPE - //u1Byte Freq2G[2]; // FREQ_RT_2G_WORLD - - u1Byte Chnl5G[MAX_CHANNEL_NUM]; - u1Byte Len5G; - u1Byte Chnl5GScanTp[MAX_CHANNEL_NUM]; - //u1Byte Freq2G[2]; // FREQ_RT_2G_WORLD - - RT_CHANNEL_PLAN_MAXPWR ChnlMaxPwr; - - -}RT_CHANNEL_PLAN_NEW, *PRT_CHANNEL_PLAN_NEW; - - -#endif // __RT_CHANNELPLAN_H__ - - - - - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/hal8723breg.h b/network/wlan/WDI/HAL/phydm/rtl8723b/hal8723breg.h deleted file mode 100644 index e34fe98b..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/hal8723breg.h +++ /dev/null @@ -1,861 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2009, RealTEK Technology Inc. All Right Reserved. - * - * Module: __INC_HAL8723BREG_H - * - * - * Note: 1. Define Mac register address and corresponding bit mask map - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * - *****************************************************************************/ -#ifndef __INC_HAL8723BREG_H -#define __INC_HAL8723BREG_H - - - -//============================================================ -// -//============================================================ - -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -#define REG_SYS_ISO_CTRL_8723B 0x0000 // 2 Byte -#define REG_SYS_FUNC_EN_8723B 0x0002 // 2 Byte -#define REG_APS_FSMCO_8723B 0x0004 // 4 Byte -#define REG_SYS_CLKR_8723B 0x0008 // 2 Byte -#define REG_9346CR_8723B 0x000A // 2 Byte -#define REG_EE_VPD_8723B 0x000C // 2 Byte -#define REG_AFE_MISC_8723B 0x0010 // 1 Byte -#define REG_SPS0_CTRL_8723B 0x0011 // 7 Byte -#define REG_SPS_OCP_CFG_8723B 0x0018 // 4 Byte -#define REG_RSV_CTRL_8723B 0x001C // 3 Byte -#define REG_RF_CTRL_8723B 0x001F // 1 Byte -#define REG_LPLDO_CTRL_8723B 0x0023 // 1 Byte -#define REG_AFE_XTAL_CTRL_8723B 0x0024 // 4 Byte -#define REG_AFE_PLL_CTRL_8723B 0x0028 // 4 Byte -#define REG_MAC_PLL_CTRL_EXT_8723B 0x002c // 4 Byte -#define REG_EFUSE_CTRL_8723B 0x0030 -#define REG_EFUSE_TEST_8723B 0x0034 -#define REG_PWR_DATA_8723B 0x0038 -#define REG_CAL_TIMER_8723B 0x003C -#define REG_ACLK_MON_8723B 0x003E -#define REG_GPIO_MUXCFG_8723B 0x0040 -#define REG_GPIO_IO_SEL_8723B 0x0042 -#define REG_MAC_PINMUX_CFG_8723B 0x0043 -#define REG_GPIO_PIN_CTRL_8723B 0x0044 -#define REG_GPIO_INTM_8723B 0x0048 -#define REG_LEDCFG0_8723B 0x004C -#define REG_LEDCFG1_8723B 0x004D -#define REG_LEDCFG2_8723B 0x004E -#define REG_LEDCFG3_8723B 0x004F -#define REG_FSIMR_8723B 0x0050 -#define REG_FSISR_8723B 0x0054 -#define REG_HSIMR_8723B 0x0058 -#define REG_HSISR_8723B 0x005c -#define REG_GPIO_EXT_CTRL 0x0060 -#define REG_MULTI_FUNC_CTRL_8723B 0x0068 -#define REG_GPIO_STATUS_8723B 0x006C -#define REG_SDIO_CTRL_8723B 0x0070 -#define REG_OPT_CTRL_8723B 0x0074 -#define REG_AFE_XTAL_CTRL_EXT_8723B 0x0078 -#define REG_MCUFWDL_8723B 0x0080 -#define REG_FW_DBG_STATUS_8723B 0x0088 -#define REG_FW_DBG_CTRL_8723B 0x008F -#define REG_SYSON_FSM_MON_8723B 0x00A0 -#define REG_HIMR0_8723B 0x00B0 -#define REG_HISR0_8723B 0x00B4 -#define REG_HIMR1_8723B 0x00B8 -#define REG_HISR1_8723B 0x00BC -#define REG_PMC_DBG_CTRL2_8723B 0x00CC -#define REG_EFUSE_BURN_GNT_8723B 0x00CF -#define REG_HPON_FSM_8723B 0x00EC -#define REG_SYS_CFG_8723B 0x00F0 -#define REG_SYS_CFG1_8723B 0x00FC -#define REG_ROM_VERSION 0x00FD - -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -#define REG_CR_8723B 0x0100 -#define REG_PBP_8723B 0x0104 -#define REG_PKT_BUFF_ACCESS_CTRL_8723B 0x0106 -#define REG_TRXDMA_CTRL_8723B 0x010C -#define REG_TRXFF_BNDY_8723B 0x0114 -#define REG_TRXFF_STATUS_8723B 0x0118 -#define REG_RXFF_PTR_8723B 0x011C -#define REG_CPWM_8723B 0x012F -#define REG_FWIMR_8723B 0x0130 -#define REG_FWISR_8723B 0x0134 -#define REG_FTIMR_8723B 0x0138 -#define REG_PKTBUF_DBG_CTRL_8723B 0x0140 -#define REG_RXPKTBUF_CTRL_8723B 0x0142 -#define REG_PKTBUF_DBG_DATA_L_8723B 0x0144 -#define REG_PKTBUF_DBG_DATA_H_8723B 0x0148 - -#define REG_TC0_CTRL_8723B 0x0150 -#define REG_TC1_CTRL_8723B 0x0154 -#define REG_TC2_CTRL_8723B 0x0158 -#define REG_TC3_CTRL_8723B 0x015C -#define REG_TC4_CTRL_8723B 0x0160 -#define REG_TCUNIT_BASE_8723B 0x0164 -#define REG_RSVD3_8723B 0x0168 -#define REG_C2HEVT_MSG_NORMAL_8723B 0x01A0 -#define REG_C2HEVT_CMD_SEQ_88XX 0x01A1 -#define REG_C2hEVT_CMD_CONTENT_88XX 0x01A2 -#define REG_C2HEVT_CMD_LEN_88XX 0x01AE -#define REG_C2HEVT_CLEAR_8723B 0x01AF -#define REG_MCUTST_1_8723B 0x01C0 -#define REG_MCUTST_WOWLAN_8723B 0x01C7 -#define REG_FMETHR_8723B 0x01C8 -#define REG_HMETFR_8723B 0x01CC -#define REG_HMEBOX_0_8723B 0x01D0 -#define REG_HMEBOX_1_8723B 0x01D4 -#define REG_HMEBOX_2_8723B 0x01D8 -#define REG_HMEBOX_3_8723B 0x01DC -#define REG_LLT_INIT_8723B 0x01E0 -#define REG_HMEBOX_EXT0_8723B 0x01F0 -#define REG_HMEBOX_EXT1_8723B 0x01F4 -#define REG_HMEBOX_EXT2_8723B 0x01F8 -#define REG_HMEBOX_EXT3_8723B 0x01FC - -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -#define REG_RQPN_8723B 0x0200 -#define REG_FIFOPAGE_8723B 0x0204 -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -#define REG_DWBCN0_CTRL_8723B REG_TDECTRL -#else -#define REG_TDECTRL_8723B 0x0208 -#endif -#define REG_TXDMA_OFFSET_CHK_8723B 0x020C -#define REG_TXDMA_STATUS_8723B 0x0210 -#define REG_RQPN_NPQ_8723B 0x0214 -#if (DM_ODM_SUPPORT_TYPE == ODM_CE) -#define REG_DWBCN1_CTRL_8723B 0x0228 -#else -#define REG_TDECTRL1_8723B 0x0228 -#endif - -//----------------------------------------------------- -// -// 0x0280h ~ 0x02FFh RXDMA Configuration -// -//----------------------------------------------------- -#define REG_RXDMA_AGG_PG_TH_8723B 0x0280 -#define REG_FW_UPD_RDPTR_8723B 0x0284 // FW shall update this register before FW write RXPKT_RELEASE_POLL to 1 -#define REG_RXDMA_CONTROL_8723B 0x0286 // Control the RX DMA. -#define REG_RXPKT_NUM_8723B 0x0287 // The number of packets in RXPKTBUF. -#define REG_RXDMA_STATUS_8723B 0x0288 -#define REG_RXDMA_PRO_8723B 0x0290 -#define REG_EARLY_MODE_CONTROL_8723B 0x02BC -#define REG_RSVD5_8723B 0x02F0 -#define REG_RSVD6_8723B 0x02F4 - - -//----------------------------------------------------- -// -// 0x0300h ~ 0x03FFh PCIe -// -//----------------------------------------------------- -#define REG_PCIE_CTRL_REG_8723B 0x0300 -#define REG_INT_MIG_8723B 0x0304 // Interrupt Migration -#define REG_BCNQ_DESA_8723B 0x0308 // TX Beacon Descriptor Address -#define REG_HQ_DESA_8723B 0x0310 // TX High Queue Descriptor Address -#define REG_MGQ_DESA_8723B 0x0318 // TX Manage Queue Descriptor Address -#define REG_VOQ_DESA_8723B 0x0320 // TX VO Queue Descriptor Address -#define REG_VIQ_DESA_8723B 0x0328 // TX VI Queue Descriptor Address -#define REG_BEQ_DESA_8723B 0x0330 // TX BE Queue Descriptor Address -#define REG_BKQ_DESA_8723B 0x0338 // TX BK Queue Descriptor Address -#define REG_RX_DESA_8723B 0x0340 // RX Queue Descriptor Address -#define REG_DBI_WDATA_8723B 0x0348 // DBI Write Data -#define REG_DBI_RDATA_8723B 0x034C // DBI Read Data -#define REG_DBI_ADDR_8723B 0x0350 // DBI Address -#define REG_DBI_FLAG_8723B 0x0352 // DBI Read/Write Flag -#define REG_MDIO_WDATA_8723B 0x0354 // MDIO for Write PCIE PHY -#define REG_MDIO_RDATA_8723B 0x0356 // MDIO for Reads PCIE PHY -#define REG_MDIO_CTL_8723B 0x0358 // MDIO for Control -#define REG_DBG_SEL_8723B 0x0360 // Debug Selection Register -#define REG_PCIE_HRPWM_8723B 0x0361 //PCIe RPWM -#define REG_PCIE_HCPWM_8723B 0x0363 //PCIe CPWM -#define REG_PCIE_MULTIFET_CTRL_8723B 0x036A //PCIE Multi-Fethc Control - -// spec version 11 -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -#define REG_VOQ_INFORMATION_8723B 0x0400 -#define REG_VIQ_INFORMATION_8723B 0x0404 -#define REG_BEQ_INFORMATION_8723B 0x0408 -#define REG_BKQ_INFORMATION_8723B 0x040C -#define REG_MGQ_INFORMATION_8723B 0x0410 -#define REG_HGQ_INFORMATION_8723B 0x0414 -#define REG_BCNQ_INFORMATION_8723B 0x0418 -#define REG_TXPKT_EMPTY_8723B 0x041A - -#define REG_FWHW_TXQ_CTRL_8723B 0x0420 -#define REG_HWSEQ_CTRL_8723B 0x0423 -#define REG_TXPKTBUF_BCNQ_BDNY_8723B 0x0424 -#define REG_TXPKTBUF_MGQ_BDNY_8723B 0x0425 -#define REG_LIFECTRL_CTRL_8723B 0x0426 -#define REG_MULTI_BCNQ_OFFSET_8723B 0x0427 -#define REG_SPEC_SIFS_8723B 0x0428 -#define REG_RL_8723B 0x042A -#define REG_TXBF_CTRL_8723B 0x042C -#define REG_DARFRC_8723B 0x0430 -#define REG_RARFRC_8723B 0x0438 -#define REG_RRSR_8723B 0x0440 -#define REG_ARFR0_8723B 0x0444 -#define REG_ARFR1_8723B 0x044C -#define REG_CCK_CHECK_8723B 0x0454 -#define REG_AMPDU_MAX_TIME_8723B 0x0456 -#define REG_TXPKTBUF_BCNQ_BDNY1_8723B 0x0457 - -#define REG_AMPDU_MAX_LENGTH_8723B 0x0458 -#define REG_TXPKTBUF_WMAC_LBK_BF_HD_8723B 0x045D -#define REG_NDPA_OPT_CTRL_8723B 0x045F -#define REG_FAST_EDCA_CTRL_8723B 0x0460 -#define REG_RD_RESP_PKT_TH_8723B 0x0463 -#define REG_DATA_SC_8723B 0x0483 -#define REG_TXRPT_START_OFFSET 0x04AC -#define REG_POWER_STAGE1_8723B 0x04B4 -#define REG_POWER_STAGE2_8723B 0x04B8 -#define REG_AMPDU_BURST_MODE_8723B 0x04BC -#define REG_PKT_VO_VI_LIFE_TIME_8723B 0x04C0 -#define REG_PKT_BE_BK_LIFE_TIME_8723B 0x04C2 -#define REG_STBC_SETTING_8723B 0x04C4 -#define REG_HT_SINGLE_AMPDU_8723B 0x04C7 -#define REG_PROT_MODE_CTRL_8723B 0x04C8 -#define REG_MAX_AGGR_NUM_8723B 0x04CA -#define REG_RTS_MAX_AGGR_NUM_8723B 0x04CB -#define REG_BAR_MODE_CTRL_8723B 0x04CC -#define REG_RA_TRY_RATE_AGG_LMT_8723B 0x04CF -#define REG_MACID_PKT_DROP0_8723B 0x04D0 -#define REG_MACID_PKT_SLEEP_8723B 0x04D4 - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -#define REG_EDCA_VO_PARAM_8723B 0x0500 -#define REG_EDCA_VI_PARAM_8723B 0x0504 -#define REG_EDCA_BE_PARAM_8723B 0x0508 -#define REG_EDCA_BK_PARAM_8723B 0x050C -#define REG_BCNTCFG_8723B 0x0510 -#define REG_PIFS_8723B 0x0512 -#define REG_RDG_PIFS_8723B 0x0513 -#define REG_SIFS_CTX_8723B 0x0514 -#define REG_SIFS_TRX_8723B 0x0516 -#define REG_AGGR_BREAK_TIME_8723B 0x051A -#define REG_SLOT_8723B 0x051B -#define REG_TX_PTCL_CTRL_8723B 0x0520 -#define REG_TXPAUSE_8723B 0x0522 -#define REG_DIS_TXREQ_CLR_8723B 0x0523 -#define REG_RD_CTRL_8723B 0x0524 -// -// Format for offset 540h-542h: -// [3:0]: TBTT prohibit setup in unit of 32us. The time for HW getting beacon content before TBTT. -// [7:4]: Reserved. -// [19:8]: TBTT prohibit hold in unit of 32us. The time for HW holding to send the beacon packet. -// [23:20]: Reserved -// Description: -// | -// |<--Setup--|--Hold------------>| -// --------------|---------------------- -// | -// TBTT -// Note: We cannot update beacon content to HW or send any AC packets during the time between Setup and Hold. -// Described by Designer Tim and Bruce, 2011-01-14. -// -#define REG_TBTT_PROHIBIT_8723B 0x0540 -#define REG_RD_NAV_NXT_8723B 0x0544 -#define REG_NAV_PROT_LEN_8723B 0x0546 -#define REG_BCN_CTRL_8723B 0x0550 -#define REG_BCN_CTRL_1_8723B 0x0551 -#define REG_MBID_NUM_8723B 0x0552 -#define REG_DUAL_TSF_RST_8723B 0x0553 -#define REG_BCN_INTERVAL_8723B 0x0554 -#define REG_DRVERLYINT_8723B 0x0558 -#define REG_BCNDMATIM_8723B 0x0559 -#define REG_ATIMWND_8723B 0x055A -#define REG_USTIME_TSF_8723B 0x055C -#define REG_BCN_MAX_ERR_8723B 0x055D -#define REG_RXTSF_OFFSET_CCK_8723B 0x055E -#define REG_RXTSF_OFFSET_OFDM_8723B 0x055F -#define REG_TSFTR_8723B 0x0560 -#define REG_CTWND_8723B 0x0572 -#define REG_SECONDARY_CCA_CTRL_8723B 0x0577 -#define REG_PSTIMER_8723B 0x0580 -#define REG_TIMER0_8723B 0x0584 -#define REG_TIMER1_8723B 0x0588 -#define REG_ACMHWCTRL_8723B 0x05C0 -#define REG_SCH_TXCMD_8723B 0x05F8 - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- -#define REG_MAC_CR_8723B 0x0600 -#define REG_TCR_8723B 0x0604 -#define REG_RCR_8723B 0x0608 -#define REG_RX_PKT_LIMIT_8723B 0x060C -#define REG_RX_DLK_TIME_8723B 0x060D -#define REG_RX_DRVINFO_SZ_8723B 0x060F - -#define REG_MACID_8723B 0x0610 -#define REG_BSSID_8723B 0x0618 -#define REG_MAR_8723B 0x0620 -#define REG_MBIDCAMCFG_8723B 0x0628 - -#define REG_USTIME_EDCA_8723B 0x0638 -#define REG_MAC_SPEC_SIFS_8723B 0x063A -#define REG_RESP_SIFP_CCK_8723B 0x063C -#define REG_RESP_SIFS_OFDM_8723B 0x063E -#define REG_ACKTO_8723B 0x0640 -#define REG_CTS2TO_8723B 0x0641 -#define REG_EIFS_8723B 0x0642 - -#define REG_NAV_UPPER_8723B 0x0652 // unit of 128 -#define REG_TRXPTCL_CTL_8723B 0x0668 - -// Security -#define REG_CAMCMD_8723B 0x0670 -#define REG_CAMWRITE_8723B 0x0674 -#define REG_CAMREAD_8723B 0x0678 -#define REG_CAMDBG_8723B 0x067C -#define REG_SECCFG_8723B 0x0680 - -// Power -#define REG_WOW_CTRL_8723B 0x0690 -#define REG_PS_RX_INFO_8723B 0x0692 -#define REG_UAPSD_TID_8723B 0x0693 -#define REG_WKFMCAM_CMD_8723B 0x0698 -#define REG_WKFMCAM_NUM_8723B 0x0698 -#define REG_WKFMCAM_RWD_8723B 0x069C -#define REG_RXFLTMAP0_8723B 0x06A0 -#define REG_RXFLTMAP1_8723B 0x06A2 -#define REG_RXFLTMAP2_8723B 0x06A4 -#define REG_BCN_PSR_RPT_8723B 0x06A8 -#define REG_BT_COEX_TABLE_8723B 0x06C0 -#define REG_BFMER0_INFO_8723B 0x06E4 -#define REG_BFMER1_INFO_8723B 0x06EC -#define REG_CSI_RPT_PARAM_BW20_8723B 0x06F4 -#define REG_CSI_RPT_PARAM_BW40_8723B 0x06F8 -#define REG_CSI_RPT_PARAM_BW80_8723B 0x06FC - -// Hardware Port 2 -#define REG_MACID1_8723B 0x0700 -#define REG_BSSID1_8723B 0x0708 -#define REG_BFMEE_SEL_8723B 0x0714 -#define REG_SND_PTCL_CTRL_8723B 0x0718 - - -//----------------------------------------------------- -// -// Redifine 8192C register definition for compatibility -// -//----------------------------------------------------- - -// TODO: use these definition when using REG_xxx naming rule. -// NOTE: DO NOT Remove these definition. Use later. -#define EFUSE_CTRL_8723B REG_EFUSE_CTRL_8723B // E-Fuse Control. -#define EFUSE_TEST_8723B REG_EFUSE_TEST_8723B // E-Fuse Test. -#define MSR_8723B (REG_CR_8723B + 2) // Media Status register -#define ISR_8723B REG_HISR0_8723B -#define TSFR_8723B REG_TSFTR_8723B // Timing Sync Function Timer Register. - -#define PBP_8723B REG_PBP_8723B - -// Redifine MACID register, to compatible prior ICs. -#define IDR0_8723B REG_MACID_8723B // MAC ID Register, Offset 0x0050-0x0053 -#define IDR4_8723B (REG_MACID_8723B + 4) // MAC ID Register, Offset 0x0054-0x0055 - - -// -// 9. Security Control Registers (Offset: ) -// -#define RWCAM_8723B REG_CAMCMD_8723B //IN 8190 Data Sheet is called CAMcmd -#define WCAMI_8723B REG_CAMWRITE_8723B // Software write CAM input content -#define RCAMO_8723B REG_CAMREAD_8723B // Software read/write CAM config -#define CAMDBG_8723B REG_CAMDBG_8723B -#define SECR_8723B REG_SECCFG_8723B //Security Configuration Register - - -//---------------------------------------------------------------------------- -// 8195 IMR/ISR bits (offset 0xB0, 8bits) -//---------------------------------------------------------------------------- -#define IMR_DISABLED_8723B 0 -// IMR DW0(0x00B0-00B3) Bit 0-31 -#define IMR_TIMER2_8723B BIT31 // Timeout interrupt 2 -#define IMR_TIMER1_8723B BIT30 // Timeout interrupt 1 -#define IMR_PSTIMEOUT_8723B BIT29 // Power Save Time Out Interrupt -#define IMR_GTINT4_8723B BIT28 // When GTIMER4 expires, this bit is set to 1 -#define IMR_GTINT3_8723B BIT27 // When GTIMER3 expires, this bit is set to 1 -#define IMR_TXBCN0ERR_8723B BIT26 // Transmit Beacon0 Error -#define IMR_TXBCN0OK_8723B BIT25 // Transmit Beacon0 OK -#define IMR_TSF_BIT32_TOGGLE_8723B BIT24 // TSF Timer BIT32 toggle indication interrupt -#define IMR_BCNDMAINT0_8723B BIT20 // Beacon DMA Interrupt 0 -#define IMR_BCNDERR0_8723B BIT16 // Beacon Queue DMA OK0 -#define IMR_HSISR_IND_ON_INT_8723B BIT15 // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) -#define IMR_BCNDMAINT_E_8723B BIT14 // Beacon DMA Interrupt Extension for Win7 -#define IMR_ATIMEND_8723B BIT12 // CTWidnow End or ATIM Window End -#define IMR_C2HCMD_8723B BIT10 // CPU to Host Command INT Status, Write 1 clear -#define IMR_CPWM2_8723B BIT9 // CPU power Mode exchange INT Status, Write 1 clear -#define IMR_CPWM_8723B BIT8 // CPU power Mode exchange INT Status, Write 1 clear -#define IMR_HIGHDOK_8723B BIT7 // High Queue DMA OK -#define IMR_MGNTDOK_8723B BIT6 // Management Queue DMA OK -#define IMR_BKDOK_8723B BIT5 // AC_BK DMA OK -#define IMR_BEDOK_8723B BIT4 // AC_BE DMA OK -#define IMR_VIDOK_8723B BIT3 // AC_VI DMA OK -#define IMR_VODOK_8723B BIT2 // AC_VO DMA OK -#define IMR_RDU_8723B BIT1 // Rx Descriptor Unavailable -#define IMR_ROK_8723B BIT0 // Receive DMA OK - -// IMR DW1(0x00B4-00B7) Bit 0-31 -#define IMR_BCNDMAINT7_8723B BIT27 // Beacon DMA Interrupt 7 -#define IMR_BCNDMAINT6_8723B BIT26 // Beacon DMA Interrupt 6 -#define IMR_BCNDMAINT5_8723B BIT25 // Beacon DMA Interrupt 5 -#define IMR_BCNDMAINT4_8723B BIT24 // Beacon DMA Interrupt 4 -#define IMR_BCNDMAINT3_8723B BIT23 // Beacon DMA Interrupt 3 -#define IMR_BCNDMAINT2_8723B BIT22 // Beacon DMA Interrupt 2 -#define IMR_BCNDMAINT1_8723B BIT21 // Beacon DMA Interrupt 1 -#define IMR_BCNDOK7_8723B BIT20 // Beacon Queue DMA OK Interrup 7 -#define IMR_BCNDOK6_8723B BIT19 // Beacon Queue DMA OK Interrup 6 -#define IMR_BCNDOK5_8723B BIT18 // Beacon Queue DMA OK Interrup 5 -#define IMR_BCNDOK4_8723B BIT17 // Beacon Queue DMA OK Interrup 4 -#define IMR_BCNDOK3_8723B BIT16 // Beacon Queue DMA OK Interrup 3 -#define IMR_BCNDOK2_8723B BIT15 // Beacon Queue DMA OK Interrup 2 -#define IMR_BCNDOK1_8723B BIT14 // Beacon Queue DMA OK Interrup 1 -#define IMR_ATIMEND_E_8723B BIT13 // ATIM Window End Extension for Win7 -#define IMR_TXERR_8723B BIT11 // Tx Error Flag Interrupt Status, write 1 clear. -#define IMR_RXERR_8723B BIT10 // Rx Error Flag INT Status, Write 1 clear -#define IMR_TXFOVW_8723B BIT9 // Transmit FIFO Overflow -#define IMR_RXFOVW_8723B BIT8 // Receive FIFO Overflow - - - - - -/*=================================================================== -===================================================================== -Here the register defines are for 92C. When the define is as same with 92C, -we will use the 92C's define for the consistency -So the following defines for 92C is not entire!!!!!! -===================================================================== -=====================================================================*/ -/* -Based on Datasheet V33---090401 -Register Summary -Current IOREG MAP -0x0000h ~ 0x00FFh System Configuration (256 Bytes) -0x0100h ~ 0x01FFh MACTOP General Configuration (256 Bytes) -0x0200h ~ 0x027Fh TXDMA Configuration (128 Bytes) -0x0280h ~ 0x02FFh RXDMA Configuration (128 Bytes) -0x0300h ~ 0x03FFh PCIE EMAC Reserved Region (256 Bytes) -0x0400h ~ 0x04FFh Protocol Configuration (256 Bytes) -0x0500h ~ 0x05FFh EDCA Configuration (256 Bytes) -0x0600h ~ 0x07FFh WMAC Configuration (512 Bytes) -0x2000h ~ 0x3FFFh 8051 FW Download Region (8196 Bytes) -*/ -//---------------------------------------------------------------------------- -// 8195 (TXPAUSE) transmission pause (Offset 0x522, 8 bits) -//---------------------------------------------------------------------------- -/* -#define StopBecon BIT6 -#define StopHigh BIT5 -#define StopMgt BIT4 -#define StopVO BIT3 -#define StopVI BIT2 -#define StopBE BIT1 -#define StopBK BIT0 -*/ - - -//============================================================================ -// 8192C Regsiter Bit and Content definition -//============================================================================ -//----------------------------------------------------- -// -// 0x0000h ~ 0x00FFh System Configuration -// -//----------------------------------------------------- -/* -//2 SYS_ISO_CTRL -#define ISO_MD2PP BIT(0) -#define ISO_UA2USB BIT(1) -#define ISO_UD2CORE BIT(2) -#define ISO_PA2PCIE BIT(3) -#define ISO_PD2CORE BIT(4) -#define ISO_IP2MAC BIT(5) -#define ISO_DIOP BIT(6) -#define ISO_DIOE BIT(7) -#define ISO_EB2CORE BIT(8) -#define ISO_DIOR BIT(9) -#define PWC_EV12V BIT(15) - - -//2 SYS_FUNC_EN -#define FEN_BBRSTB BIT(0) -#define FEN_BB_GLB_RSTn BIT(1) -#define FEN_USBA BIT(2) -#define FEN_UPLL BIT(3) -#define FEN_USBD BIT(4) -#define FEN_DIO_PCIE BIT(5) -#define FEN_PCIEA BIT(6) -#define FEN_PPLL BIT(7) -#define FEN_PCIED BIT(8) -#define FEN_DIOE BIT(9) -#define FEN_CPUEN BIT(10) -#define FEN_DCORE BIT(11) -#define FEN_ELDR BIT(12) -#define FEN_DIO_RF BIT(13) -#define FEN_HWPDN BIT(14) -#define FEN_MREGEN BIT(15) - -//2 APS_FSMCO -#define PFM_LDALL BIT(0) -#define PFM_ALDN BIT(1) -#define PFM_LDKP BIT(2) -#define PFM_WOWL BIT(3) -#define EnPDN BIT(4) -#define PDN_PL BIT(5) -#define APFM_ONMAC BIT(8) -#define APFM_OFF BIT(9) -#define APFM_RSM BIT(10) -#define AFSM_HSUS BIT(11) -#define AFSM_PCIE BIT(12) -#define APDM_MAC BIT(13) -#define APDM_HOST BIT(14) -#define APDM_HPDN BIT(15) -#define RDY_MACON BIT(16) -#define SUS_HOST BIT(17) -#define ROP_ALD BIT(20) -#define ROP_PWR BIT(21) -#define ROP_SPS BIT(22) -#define SOP_MRST BIT(25) -#define SOP_FUSE BIT(26) -#define SOP_ABG BIT(27) -#define SOP_AMB BIT(28) -#define SOP_RCK BIT(29) -#define SOP_A8M BIT(30) -#define XOP_BTCK BIT(31) - -//2 SYS_CLKR -#define ANAD16V_EN BIT(0) -#define ANA8M BIT(1) -#define MACSLP BIT(4) -#define LOADER_CLK_EN BIT(5) - - -//2 9346CR - -#define BOOT_FROM_EEPROM BIT(4) -#define EEPROM_EN BIT(5) - - -//2 RF_CTRL -#define RF_EN BIT(0) -#define RF_RSTB BIT(1) -#define RF_SDMRSTB BIT(2) - -//2 LDOV12D_CTRL -#define LDV12_EN BIT(0) -#define LDV12_SDBY BIT(1) -#define LPLDO_HSM BIT(2) -#define LPLDO_LSM_DIS BIT(3) -#define _LDV12_VADJ(x) (((x) & 0xF) << 4) - - -//2 EFUSE_TEST (For RTL8723 partially) -#define EF_TRPT BIT(7) -#define EF_CELL_SEL (BIT(8)|BIT(9)) // 00: Wifi Efuse, 01: BT Efuse0, 10: BT Efuse1, 11: BT Efuse2 -#define LDOE25_EN BIT(31) -#define EFUSE_SEL(x) (((x) & 0x3) << 8) -#define EFUSE_SEL_MASK 0x300 -#define EFUSE_WIFI_SEL_0 0x0 -#define EFUSE_BT_SEL_0 0x1 -#define EFUSE_BT_SEL_1 0x2 -#define EFUSE_BT_SEL_2 0x3 - - -//2 8051FWDL -//2 MCUFWDL -#define MCUFWDL_EN BIT(0) -#define MCUFWDL_RDY BIT(1) -#define FWDL_ChkSum_rpt BIT(2) -#define MACINI_RDY BIT(3) -#define BBINI_RDY BIT(4) -#define RFINI_RDY BIT(5) -#define WINTINI_RDY BIT(6) -#define RAM_DL_SEL BIT(7) -#define ROM_DLEN BIT(19) -#define CPRST BIT(23) - - - -//2 REG_SYS_CFG -#define XCLK_VLD BIT(0) -#define ACLK_VLD BIT(1) -#define UCLK_VLD BIT(2) -#define PCLK_VLD BIT(3) -#define PCIRSTB BIT(4) -#define V15_VLD BIT(5) -#define TRP_B15V_EN BIT(7) -#define SIC_IDLE BIT(8) -#define BD_MAC2 BIT(9) -#define BD_MAC1 BIT(10) -#define IC_MACPHY_MODE BIT(11) -#define CHIP_VER (BIT(12)|BIT(13)|BIT(14)|BIT(15)) -#define BT_FUNC BIT(16) -#define VENDOR_ID BIT(19) -#define PAD_HWPD_IDN BIT(22) -#define TRP_VAUX_EN BIT(23) // RTL ID -#define TRP_BT_EN BIT(24) -#define BD_PKG_SEL BIT(25) -#define BD_HCI_SEL BIT(26) -#define TYPE_ID BIT(27) - -#define CHIP_VER_RTL_MASK 0xF000 //Bit 12 ~ 15 -#define CHIP_VER_RTL_SHIFT 12 - -*/ -//----------------------------------------------------- -// -// 0x0100h ~ 0x01FFh MACTOP General Configuration -// -//----------------------------------------------------- -/* - -//2 Function Enable Registers -//2 CR 0x0100-0x0103 - - -#define HCI_TXDMA_EN BIT(0) -#define HCI_RXDMA_EN BIT(1) -#define TXDMA_EN BIT(2) -#define RXDMA_EN BIT(3) -#define PROTOCOL_EN BIT(4) -#define SCHEDULE_EN BIT(5) -#define MACTXEN BIT(6) -#define MACRXEN BIT(7) -#define ENSWBCN BIT(8) -#define ENSEC BIT(9) -#define CALTMR_EN BIT(10) // 32k CAL TMR enable - -// Network type -#define _NETTYPE(x) (((x) & 0x3) << 16) -#define MASK_NETTYPE 0x30000 -#define NT_NO_LINK 0x0 -#define NT_LINK_AD_HOC 0x1 -#define NT_LINK_AP 0x2 -#define NT_AS_AP 0x3 - - -//2 PBP - Page Size Register 0x0104 -#define GET_RX_PAGE_SIZE(value) ((value) & 0xF) -#define GET_TX_PAGE_SIZE(value) (((value) & 0xF0) >> 4) -#define _PSRX_MASK 0xF -#define _PSTX_MASK 0xF0 -#define _PSRX(x) (x) -#define _PSTX(x) ((x) << 4) - -#define PBP_64 0x0 -#define PBP_128 0x1 -#define PBP_256 0x2 -#define PBP_512 0x3 -#define PBP_1024 0x4 - - -//2 TX/RXDMA 0x010C -#define RXDMA_ARBBW_EN BIT(0) -#define RXSHFT_EN BIT(1) -#define RXDMA_AGG_EN BIT(2) -#define QS_VO_QUEUE BIT(8) -#define QS_VI_QUEUE BIT(9) -#define QS_BE_QUEUE BIT(10) -#define QS_BK_QUEUE BIT(11) -#define QS_MANAGER_QUEUE BIT(12) -#define QS_HIGH_QUEUE BIT(13) - -#define HQSEL_VOQ BIT(0) -#define HQSEL_VIQ BIT(1) -#define HQSEL_BEQ BIT(2) -#define HQSEL_BKQ BIT(3) -#define HQSEL_MGTQ BIT(4) -#define HQSEL_HIQ BIT(5) - -// For normal driver, 0x10C -#define _TXDMA_HIQ_MAP(x) (((x)&0x3) << 14) -#define _TXDMA_MGQ_MAP(x) (((x)&0x3) << 12) -#define _TXDMA_BKQ_MAP(x) (((x)&0x3) << 10) -#define _TXDMA_BEQ_MAP(x) (((x)&0x3) << 8 ) -#define _TXDMA_VIQ_MAP(x) (((x)&0x3) << 6 ) -#define _TXDMA_VOQ_MAP(x) (((x)&0x3) << 4 ) - -#define QUEUE_LOW 1 -#define QUEUE_NORMAL 2 -#define QUEUE_HIGH 3 - - -//2 REG_C2HEVT_CLEAR 0x01AF -#define C2H_EVT_HOST_CLOSE 0x00 // Set by driver and notify FW that the driver has read the C2H command message -#define C2H_EVT_FW_CLOSE 0xFF // Set by FW indicating that FW had set the C2H command message and it's not yet read by driver. - - - -//2 LLT_INIT 0x01E0 -#define _LLT_NO_ACTIVE 0x0 -#define _LLT_WRITE_ACCESS 0x1 -#define _LLT_READ_ACCESS 0x2 - -#define _LLT_INIT_DATA(x) ((x) & 0xFF) -#define _LLT_INIT_ADDR(x) (((x) & 0xFF) << 8) -#define _LLT_OP(x) (((x) & 0x3) << 30) -#define _LLT_OP_VALUE(x) (((x) >> 30) & 0x3) - -*/ -//----------------------------------------------------- -// -// 0x0200h ~ 0x027Fh TXDMA Configuration -// -//----------------------------------------------------- -/* -//2 TDECTL 0x0208 -#define BLK_DESC_NUM_SHIFT 4 -#define BLK_DESC_NUM_MASK 0xF - - -//2 TXDMA_OFFSET_CHK 0x020C -#define DROP_DATA_EN BIT(9) -*/ -//----------------------------------------------------- -// -// 0x0280h ~ 0x028Bh RX DMA Configuration -// -//----------------------------------------------------- -/* -//2 REG_RXDMA_CONTROL, 0x0286h - -// Write only. When this bit is set, RXDMA will decrease RX PKT counter by one. Before -// this bit is polled, FW shall update RXFF_RD_PTR first. This register is write pulse and auto clear. -#define RXPKT_RELEASE_POLL BIT(0) -// Read only. When RXMA finishes on-going DMA operation, RXMDA will report idle state in -// this bit. FW can start releasing packets after RXDMA entering idle mode. -#define RXDMA_IDLE BIT(1) -// When this bit is set, RXDMA will enter this mode after on-going RXDMA packet to host -// completed, and stop DMA packet to host. RXDMA will then report Default: 0; -#define RW_RELEASE_EN BIT(2) -*/ -//----------------------------------------------------- -// -// 0x0400h ~ 0x047Fh Protocol Configuration -// -//----------------------------------------------------- -/* -//2 FWHW_TXQ_CTRL 0x0420 -#define EN_AMPDU_RTY_NEW BIT(7) - - -//2 REG_LIFECTRL_CTRL 0x0426 -#define HAL92C_EN_PKT_LIFE_TIME_BK BIT3 -#define HAL92C_EN_PKT_LIFE_TIME_BE BIT2 -#define HAL92C_EN_PKT_LIFE_TIME_VI BIT1 -#define HAL92C_EN_PKT_LIFE_TIME_VO BIT0 - -#define HAL92C_MSDU_LIFE_TIME_UNIT 128 // in us, said by Tim. - - -//2 SPEC SIFS 0x0428 -#define _SPEC_SIFS_CCK(x) ((x) & 0xFF) -#define _SPEC_SIFS_OFDM(x) (((x) & 0xFF) << 8) - -//2 RL 0x042A -#define RETRY_LIMIT_SHORT_SHIFT 8 -#define RETRY_LIMIT_LONG_SHIFT 0 - -#define _LRL(x) ((x) & 0x3F) -#define _SRL(x) (((x) & 0x3F) << 8) -*/ - -//----------------------------------------------------- -// -// 0x0500h ~ 0x05FFh EDCA Configuration -// -//----------------------------------------------------- -/* -//2 EDCA setting 0x050C -#define AC_PARAM_TXOP_LIMIT_OFFSET 16 -#define AC_PARAM_ECW_MAX_OFFSET 12 -#define AC_PARAM_ECW_MIN_OFFSET 8 -#define AC_PARAM_AIFS_OFFSET 0 - - -//2 BCN_CTRL 0x0550 -#define EN_TXBCN_RPT BIT(2) -#define EN_BCN_FUNCTION BIT(3) - -//2 TxPause 0x0522 -#define STOP_BCNQ BIT(6) -*/ - - -//2 ACMHWCTRL 0x05C0 -#define AcmHw_HwEn_8723B BIT(0) -#define AcmHw_VoqEn_8723B BIT(1) -#define AcmHw_ViqEn_8723B BIT(2) -#define AcmHw_BeqEn_8723B BIT(3) -#define AcmHw_VoqStatus_8723B BIT(5) -#define AcmHw_ViqStatus_8723B BIT(6) -#define AcmHw_BeqStatus_8723B BIT(7) - - - -//----------------------------------------------------- -// -// 0x0600h ~ 0x07FFh WMAC Configuration -// -//----------------------------------------------------- -/* - -//2 TCR 0x0604 -#define DIS_GCLK BIT(1) -#define PAD_SEL BIT(2) -#define PWR_ST BIT(6) -#define PWRBIT_OW_EN BIT(7) -#define ACRC BIT(8) -#define CFENDFORM BIT(9) -#define ICV BIT(10) -*/ - -//---------------------------------------------------------------------------- -// 8195 (RCR) Receive Configuration Register (Offset 0x608, 32 bits) -//---------------------------------------------------------------------------- -/* -#define RCR_APPFCS BIT31 // WMAC append FCS after pauload -#define RCR_APP_MIC BIT30 // MACRX will retain the MIC at the bottom of the packet. -#define RCR_APP_ICV BIT29 // MACRX will retain the ICV at the bottom of the packet. -#define RCR_APP_PHYST_RXFF BIT28 // HY Status is appended before RX packet in RXFF -#define RCR_APP_BA_SSN BIT27 // SSN of previous TXBA is appended as after original RXDESC as the 4-th DW of RXDESC. -#define RCR_RSVD_BIT26 BIT26 // Reserved -*/ -#define RCR_TCPOFLD_EN BIT25 // Enable TCP checksum offload - -#endif // #ifndef __INC_HAL8723BREG_H diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_bb.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_bb.h deleted file mode 100644 index af170089..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_bb.h +++ /dev/null @@ -1,59 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.14*/ -#if (RTL8723B_SUPPORT == 1) -#ifndef __INC_MP_BB_HW_IMG_8723B_H -#define __INC_MP_BB_HW_IMG_8723B_H - - -/****************************************************************************** -* AGC_TAB.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_AGC_TAB(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_AGC_TAB(void); - -/****************************************************************************** -* PHY_REG.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_PHY_REG(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_PHY_REG(void); - -/****************************************************************************** -* PHY_REG_PG.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_PHY_REG_PG(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_PHY_REG_PG(void); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_fw.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_fw.h deleted file mode 100644 index 0fd2d1d2..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_fw.h +++ /dev/null @@ -1,62 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.16*/ -#if (RTL8723B_SUPPORT == 1) -#ifndef __INC_MP_FW_HW_IMG_8723B_H -#define __INC_MP_FW_HW_IMG_8723B_H - - -/****************************************************************************** -* FW_AP.TXT -******************************************************************************/ - -void -ODM_ReadFirmware_MP_8723B_FW_AP( - IN PDM_ODM_T pDM_Odm, - OUT u1Byte *pFirmware, - OUT u4Byte *pFirmwareSize -); - -/****************************************************************************** -* FW_NIC.TXT -******************************************************************************/ - -void -ODM_ReadFirmware_MP_8723B_FW_NIC( - IN PDM_ODM_T pDM_Odm, - OUT u1Byte *pFirmware, - OUT u4Byte *pFirmwareSize -); - -/****************************************************************************** -* FW_WoWLAN.TXT -******************************************************************************/ - -void -ODM_ReadFirmware_MP_8723B_FW_WoWLAN( - IN PDM_ODM_T pDM_Odm, - OUT u1Byte *pFirmware, - OUT u4Byte *pFirmwareSize -); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mac.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mac.h deleted file mode 100644 index 3ac3f15d..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mac.h +++ /dev/null @@ -1,39 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.14*/ -#if (RTL8723B_SUPPORT == 1) -#ifndef __INC_MP_MAC_HW_IMG_8723B_H -#define __INC_MP_MAC_HW_IMG_8723B_H - - -/****************************************************************************** -* MAC_REG.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_MAC_REG(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_MAC_REG(void); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mp.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mp.h deleted file mode 100644 index be51ee4c..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_mp.h +++ /dev/null @@ -1,45 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -#if (RTL8723B_SUPPORT==1) -#ifndef __INC_MP_HW_IMG_8723B_H - -#define __INC_MP_HW_IMG_8723B_H - -#ifdef CONFIG_MP_INCLUDED - -#define Rtl8723BFwBTImgArrayLength 20564 - -#define Rtl8723B_PHYREG_Array_MPLength 4 - -extern u8 Rtl8723BFwBTImgArray[Rtl8723BFwBTImgArrayLength]; -extern const u32 Rtl8723B_PHYREG_Array_MP[Rtl8723B_PHYREG_Array_MPLength]; - -void -ODM_ReadFirmware_MP_8723B_FW_MP( - IN PDM_ODM_T pDM_Odm, - OUT u1Byte *pFirmware, - OUT u4Byte *pFirmwareSize -); - - -#endif //CONFIG_MP_INCLUDED -#endif -#endif diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_rf.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_rf.h deleted file mode 100644 index 7a478c18..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halhwimg8723b_rf.h +++ /dev/null @@ -1,89 +0,0 @@ -/****************************************************************************** -* -* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. -* -* This program is free software; you can redistribute it and/or modify it -* under the terms of version 2 of the GNU General Public License as -* published by the Free Software Foundation. -* -* This program is distributed in the hope that it will be useful, but WITHOUT -* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -* more details. -* -* You should have received a copy of the GNU General Public License along with -* this program; if not, write to the Free Software Foundation, Inc., -* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA -* -* -******************************************************************************/ - -/*Image2HeaderVersion: 2.14*/ -#if (RTL8723B_SUPPORT == 1) -#ifndef __INC_MP_RF_HW_IMG_8723B_H -#define __INC_MP_RF_HW_IMG_8723B_H - - -/****************************************************************************** -* RadioA.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_RadioA(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_RadioA(void); - -/****************************************************************************** -* TxPowerTrack_AP.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_TxPowerTrack_AP(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_AP(void); - -/****************************************************************************** -* TxPowerTrack_PCIE.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_TxPowerTrack_PCIE(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_PCIE(void); - -/****************************************************************************** -* TxPowerTrack_SDIO.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_TxPowerTrack_SDIO(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_SDIO(void); - -/****************************************************************************** -* TxPowerTrack_USB.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_TxPowerTrack_USB(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_TxPowerTrack_USB(void); - -/****************************************************************************** -* TXPWR_LMT.TXT -******************************************************************************/ - -void -ODM_ReadAndConfig_MP_8723B_TXPWR_LMT(/* TC: Test Chip, MP: MP Chip*/ - IN PDM_ODM_T pDM_Odm -); -u4Byte ODM_GetVersion_MP_8723B_TXPWR_LMT(void); - -#endif -#endif /* end of HWIMG_SUPPORT*/ - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_ce.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_ce.h deleted file mode 100644 index feb77d86..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_ce.h +++ /dev/null @@ -1,134 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __HAL_PHY_RF_8723B_H__ -#define __HAL_PHY_RF_8723B_H__ - -/*--------------------------Define Parameters-------------------------------*/ -#define IQK_DELAY_TIME_8723B 20 //ms -#define IQK_DEFERRED_TIME_8723B 4 -#define index_mapping_NUM_8723B 15 -#define AVG_THERMAL_NUM_8723B 4 -#define RF_T_METER_8723B 0x42 // - - -void ConfigureTxpowerTrack_8723B( - PTXPWRTRACK_CFG pConfig - ); - -void DoIQK_8723B( - PVOID pDM_VOID, - u1Byte DeltaThermalIndex, - u1Byte ThermalValue, - u1Byte Threshold - ); - -VOID -ODM_TxPwrTrackSetPwr_8723B( - IN PVOID pDM_VOID, - PWRTRACK_METHOD Method, - u1Byte RFPath, - u1Byte ChannelMappedIndex - ); - -//1 7. IQK - -void -PHY_IQCalibrate_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER Adapter, -#endif - IN BOOLEAN bReCovery, - IN BOOLEAN bRestore, - IN BOOLEAN Is2ant, - IN u1Byte RF_Path); - -VOID -ODM_SetIQCbyRFpath( -//#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -//#else - //IN PADAPTER pAdapter, -//#endif - IN u4Byte RFpath - ); - -// -// LC calibrate -// -void -PHY_LCCalibrate_8723B( - IN PVOID pDM_VOID -); - -// -// AP calibrate -// -void -PHY_APCalibrate_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN s1Byte delta); -void -PHY_DigitalPredistortion_8723B( IN PADAPTER pAdapter); - - -VOID -_PHY_SaveADDARegisters_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte ADDAReg, - IN pu4Byte ADDABackup, - IN u4Byte RegisterNum - ); - -VOID -_PHY_PathADDAOn_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte ADDAReg, - IN BOOLEAN isPathAOn, - IN BOOLEAN is2T - ); - -VOID -_PHY_MACSettingCalibration_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte MACReg, - IN pu4Byte MACBackup - ); - -#endif // #ifndef __HAL_PHY_RF_8188E_H__ - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_win.h b/network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_win.h deleted file mode 100644 index 8924706f..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/halphyrf_8723b_win.h +++ /dev/null @@ -1,131 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -#ifndef __HAL_PHY_RF_8723B_H__ -#define __HAL_PHY_RF_8723B_H__ - -/*--------------------------Define Parameters-------------------------------*/ -#define index_mapping_NUM_8723B 15 -#define AVG_THERMAL_NUM_8723B 4 -#define IQK_DELAY_TIME_8723B 20 //ms - - -#include "halphyrf_win.h" - -void ConfigureTxpowerTrack_8723B( - PTXPWRTRACK_CFG pConfig - ); - -void DoIQK_8723B( - PVOID pDM_VOID, - u1Byte DeltaThermalIndex, - u1Byte ThermalValue, - u1Byte Threshold - ); - -VOID -ODM_TxPwrTrackSetPwr_8723B( - PDM_ODM_T pDM_Odm, - PWRTRACK_METHOD Method, - u1Byte RFPath, - u1Byte ChannelMappedIndex - ); - -//1 7. IQK - -void -PHY_IQCalibrate_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER Adapter, -#endif - IN BOOLEAN bReCovery); - -BOOLEAN -ODM_SetIQCbyRFpath( -//#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -//#else - //IN PADAPTER pAdapter, -//#endif - IN u4Byte RFpath - ); - -// -// LC calibrate -// -void -PHY_LCCalibrate_8723B( - IN PDM_ODM_T pDM_Odm -); - -// -// AP calibrate -// -void -PHY_APCalibrate_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN s1Byte delta); -void -PHY_DigitalPredistortion_8723B( IN PADAPTER pAdapter); - - -VOID -_PHY_SaveADDARegisters_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte ADDAReg, - IN pu4Byte ADDABackup, - IN u4Byte RegisterNum - ); - -VOID -_PHY_PathADDAOn_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte ADDAReg, - IN BOOLEAN isPathAOn, - IN BOOLEAN is2T - ); - -VOID -_PHY_MACSettingCalibration_8723B( -#if (DM_ODM_SUPPORT_TYPE & ODM_AP) - IN PDM_ODM_T pDM_Odm, -#else - IN PADAPTER pAdapter, -#endif - IN pu4Byte MACReg, - IN pu4Byte MACBackup - ); - -#endif // #ifndef __HAL_PHY_RF_8188E_H__ - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/mp_precomp.h b/network/wlan/WDI/HAL/phydm/rtl8723b/mp_precomp.h deleted file mode 100644 index 4e376e79..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/mp_precomp.h +++ /dev/null @@ -1,24 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ - -//#include -//#include "phydm_precomp.h" -//#include "../phydm_precomp.h" - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/phydm_regconfig8723b.h b/network/wlan/WDI/HAL/phydm/rtl8723b/phydm_regconfig8723b.h deleted file mode 100644 index 4f2d3884..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/phydm_regconfig8723b.h +++ /dev/null @@ -1,96 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __INC_ODM_REGCONFIG_H_8723B -#define __INC_ODM_REGCONFIG_H_8723B - -#if (RTL8723B_SUPPORT == 1) - -void -odm_ConfigRFReg_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Data, - IN ODM_RF_RADIO_PATH_E RF_PATH, - IN u4Byte RegAddr - ); - -void -odm_ConfigRF_RadioA_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Data - ); - -void -odm_ConfigRF_RadioB_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Data - ); - -void -odm_ConfigMAC_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u1Byte Data - ); - -void -odm_ConfigBB_AGC_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Bitmask, - IN u4Byte Data - ); - -void -odm_ConfigBB_PHY_REG_PG_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Band, - IN u4Byte RfPath, - IN u4Byte TxNum, - IN u4Byte Addr, - IN u4Byte Bitmask, - IN u4Byte Data - ); - -void -odm_ConfigBB_PHY_8723B( - IN PDM_ODM_T pDM_Odm, - IN u4Byte Addr, - IN u4Byte Bitmask, - IN u4Byte Data - ); - -void -odm_ConfigBB_TXPWR_LMT_8723B( - IN PDM_ODM_T pDM_Odm, - IN pu1Byte Regulation, - IN pu1Byte Band, - IN pu1Byte Bandwidth, - IN pu1Byte RateSection, - IN pu1Byte RfPath, - IN pu1Byte Channel, - IN pu1Byte PowerLimit - ); - -#endif -#endif // end of SUPPORT - diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/phydm_rtl8723b.h b/network/wlan/WDI/HAL/phydm/rtl8723b/phydm_rtl8723b.h deleted file mode 100644 index a7739ef1..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/phydm_rtl8723b.h +++ /dev/null @@ -1,29 +0,0 @@ -/****************************************************************************** - * - * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA - * - * - ******************************************************************************/ -#ifndef __ODM_RTL8723B_H__ -#define __ODM_RTL8723B_H__ - -s1Byte -odm_CCKRSSI_8723B( - IN u1Byte LNA_idx, - IN u1Byte VGA_idx - ); - -#endif diff --git a/network/wlan/WDI/HAL/phydm/rtl8723b/version_rtl8723b.h b/network/wlan/WDI/HAL/phydm/rtl8723b/version_rtl8723b.h deleted file mode 100644 index 93f2189f..00000000 --- a/network/wlan/WDI/HAL/phydm/rtl8723b/version_rtl8723b.h +++ /dev/null @@ -1,5 +0,0 @@ -/*RTL8723B PHY Parameters*/ -#define SVN_COMMIT_VERSION_8723B 26 -#define RELEASE_DATE_8723B 20150617 -#define COMMIT_BY_8723B "BB_STANLEY" -#define RELEASE_VERSION_8723B 24 diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BDefCom.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BDefCom.h deleted file mode 100644 index f32ba53a..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BDefCom.h +++ /dev/null @@ -1,212 +0,0 @@ -#ifndef __REALTEK_HAL8723BDEFCOM_H__ -#define __REALTEK_HAL8723BDEFCOM_H__ - - -typedef enum _RTL8723B_SRAM_DATA -{ - LOC_8723B_SRFF, - LOC_8723B_TXRPT, - LOC_8723B_BCN_RPT, - LOC_8723B_AMPDU_BU_RST_CTRL, - LOC_8723B_RA_MASK -}RTL8723B_SRAM_DATA; - -u1Byte -GetEEPROMSize8723B( - IN PADAPTER Adapter - ); - -VERSION_8192C -ReadChipVersion8723B( - IN PADAPTER Adapter - ); - -VOID -ReadSdramData_8723B( - IN PADAPTER Adapter, - IN u1Byte macId, - IN RTL8723B_SRAM_DATA Type, - OUT pu4Byte data, - IN u1Byte dataLen - ); - - -VOID -Hal_ReadPROMContent_BT_8723B( - IN PADAPTER Adapter - ); - -VOID -HalSetRegMACID0AID_8723B( - IN PADAPTER Adapter - ); - -VOID -SetBcnCtrlReg_8723B( - IN PADAPTER Adapter, - IN u1Byte SetBits, - IN u1Byte ClearBits - ); - - - -//2 WoWLAN - -VOID -SetWoWLANCAMEntry8723B( - PADAPTER Adapter -); - -RT_STATUS -HalSetFWWoWlanMode8723B( - IN PADAPTER pAdapter, - IN BOOLEAN bFuncEn - ); - -VOID -GetPortsCommonBasicRate_8723B( - IN PADAPTER Adapter, - OUT pu1Byte SupportRate, - OUT pu2Byte SupportRateLen -); - -u1Byte -SelectRTSInitialRate8723B( - IN PADAPTER Adapter -); - - -VOID -HalSetBrateCfg_8723B( - IN PADAPTER Adapter, - IN OCTET_STRING *mBratesOS, - OUT pu2Byte pBrateCfg -); - -VOID -HalUpdateDefaultSetting8723B( - IN PADAPTER pAdapter - ); - -VOID -UpdateHalRAMask8723B( - IN PADAPTER Adapter, - IN u1Byte macId, - IN PRT_WLAN_STA pEntry, - IN u1Byte rssi_level - ); - -VOID -ActUpdateChannelAccessSetting_8723B( - PADAPTER Adapter, - WIRELESS_MODE WirelessMode, - PCHANNEL_ACCESS_SETTING ChnlAccessSetting - ); - - -#if RX_AGGREGATION -VOID -RxAggrSettingWorkItemCallback_8723B( - IN PVOID pContext - ); -#endif - -VOID -Dbg_IQK_TriggerWorkItemCallback_8723B( - IN PVOID pContext -); -VOID -Dbg_LCK_TriggerWorkItemCallback_8723B( - IN PVOID pContext -); - - -u4Byte -H2CCmdAction8723B( - IN PADAPTER Adapter, - IN PVOID pBuf, - IN u2Byte bufLen - ); - -VOID -SetFwRelatedForWoWLAN8723B( - IN PADAPTER Adapter, - IN BOOLEAN bUsedWoWLANFw -); - -u1Byte -GetFwPsStateDef8723B( - IN PADAPTER Adapter, - IN u1Byte FwPsState -); - -BOOLEAN -CheckCPWMInterrupt8723B( - IN PADAPTER Adapter -); - -u1Byte -GetTxBufferRsvdPageNum8723B( - IN PADAPTER Adapter, - IN BOOLEAN bWoWLANBoundary -); - -VOID -HalSetFwKeepAliveCmd8723B( - IN PADAPTER pAdapter, - IN BOOLEAN bFuncEn - ); - -RT_STATUS -InitLLTTable8723B( - IN PADAPTER Adapter, - IN u4Byte boundary - ); - -VOID -SetPowerDownReg_8723B( - IN PADAPTER Adapter, - IN BOOLEAN bFuncEnable - ); - -RT_STATUS -HalDynamicRQPN8723B( - IN PADAPTER Adapter, - IN u4Byte boundary, - IN u2Byte NPQ_RQPNValue, - IN u4Byte RQPNValue - ); - -BOOLEAN -IsHwAutoRFOff8723B( - IN PADAPTER Adapter - ); - -VOID -ForceLeaveHwClock32K8723B( - IN PADAPTER Adapter - ); - -RT_STATUS -RecoverTxBoundarySetting8723B( - IN PADAPTER Adapter, - IN BOOLEAN bWoWLANSetting - ); - -VOID -HalGetAOACReport8723B( - IN PADAPTER Adapter, - IN pu1Byte AOACRptBuf - ); - -VOID -HalSetFcsAdjustTsf_8723B( - IN PADAPTER Adapter - ); - -VOID -ex_hal8723b_wifi_only_hw_config( - IN PADAPTER Adapter - ); - -#endif diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BDesc.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BDesc.h deleted file mode 100644 index 412b0652..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BDesc.h +++ /dev/null @@ -1,286 +0,0 @@ -#ifndef __INC_HAL8723BDESC_H -#define __INC_HAL8723BDESC_H - - -#define RX_STATUS_DESC_SIZE_8723B 24 -#define RX_DRV_INFO_SIZE_UNIT_8723B 8 - - -//DWORD 0 -#define SET_RX_STATUS_DESC_PKT_LEN_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 0, 14, __Value) -#define SET_RX_STATUS_DESC_EOR_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 30, 1, __Value) -#define SET_RX_STATUS_DESC_OWN_8723B(__pRxStatusDesc, __Value) SET_BITS_TO_LE_4BYTE( __pRxStatusDesc, 31, 1, __Value) - -#define GET_RX_STATUS_DESC_PKT_LEN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 0, 14) -#define GET_RX_STATUS_DESC_CRC32_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 14, 1) -#define GET_RX_STATUS_DESC_ICV_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 15, 1) -#define GET_RX_STATUS_DESC_DRVINFO_SIZE_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 16, 4) -#define GET_RX_STATUS_DESC_SECURITY_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 20, 3) -#define GET_RX_STATUS_DESC_QOS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 23, 1) -#define GET_RX_STATUS_DESC_SHIFT_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 24, 2) -#define GET_RX_STATUS_DESC_PHY_STATUS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 26, 1) -#define GET_RX_STATUS_DESC_SWDEC_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 27, 1) -#define GET_RX_STATUS_DESC_LAST_SEG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 28, 1) -#define GET_RX_STATUS_DESC_FIRST_SEG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 29, 1) -#define GET_RX_STATUS_DESC_EOR_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 30, 1) -#define GET_RX_STATUS_DESC_OWN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc, 31, 1) - -//DWORD 1 -#define GET_RX_STATUS_DESC_MACID_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 0, 7) -#define GET_RX_STATUS_DESC_TID_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 8, 4) -#define GET_RX_STATUS_DESC_AMSDU_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 13, 1) -#define GET_RX_STATUS_DESC_RXID_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 14, 1) -#define GET_RX_STATUS_DESC_PAGGR_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 15, 1) -#define GET_RX_STATUS_DESC_A1_FIT_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 16, 4) -#define GET_RX_STATUS_DESC_CHKERR_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 20, 1) -#define GET_RX_STATUS_DESC_IPVER_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 21, 1) -#define GET_RX_STATUS_DESC_IS_TCPUDP__8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 22, 1) -#define GET_RX_STATUS_DESC_CHK_VLD_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+4, 23, 1) -#define GET_RX_STATUS_DESC_PAM_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 24, 1) -#define GET_RX_STATUS_DESC_PWR_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 25, 1) -#define GET_RX_STATUS_DESC_MORE_DATA_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 26, 1) -#define GET_RX_STATUS_DESC_MORE_FRAG_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 27, 1) -#define GET_RX_STATUS_DESC_TYPE_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 28, 2) -#define GET_RX_STATUS_DESC_MC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 30, 1) -#define GET_RX_STATUS_DESC_BC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+4, 31, 1) - -//DWORD 2 -#define GET_RX_STATUS_DESC_SEQ_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 0, 12) -#define GET_RX_STATUS_DESC_FRAG_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 12, 4) -#define GET_RX_STATUS_DESC_RX_IS_QOS_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 16, 1) -#define GET_RX_STATUS_DESC_WLANHD_IV_LEN_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 18, 6) -#define GET_RX_STATUS_DESC_RPT_SEL_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+8, 28, 1) - -//DWORD 3 -#define GET_RX_STATUS_DESC_RX_RATE_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 0, 7) -#define GET_RX_STATUS_DESC_HTC_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 10, 1) -#define GET_RX_STATUS_DESC_EOSP_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 11, 1) -#define GET_RX_STATUS_DESC_BSSID_FIT_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 12, 2) -#if RX_AGGREGATION -#define GET_RX_STATUS_DESC_USB_AGG_PKTNUM_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+12, 16, 8) -#endif -#define GET_RX_STATUS_DESC_PATTERN_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 29, 1) -#define GET_RX_STATUS_DESC_UNICAST_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 30, 1) -#define GET_RX_STATUS_DESC_MAGIC_MATCH_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+12, 31, 1) - -//DWORD 6 -#define GET_RX_STATUS_DESC_SPLCP_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 0, 1) -#define GET_RX_STATUS_DESC_LDPC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 1, 1) -#define GET_RX_STATUS_DESC_STBC_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 2, 1) -#define GET_RX_STATUS_DESC_BW_8723B(__pRxDesc) LE_BITS_TO_4BYTE( __pRxDesc+16, 4, 2) - -//DWORD 5 -#define GET_RX_STATUS_DESC_TSFL_8723B(__pRxStatusDesc) LE_BITS_TO_4BYTE( __pRxStatusDesc+20, 0, 32) - -#define GET_RX_STATUS_DESC_BUFF_ADDR_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+24, 0, 32) -#define GET_RX_STATUS_DESC_BUFF_ADDR64_8723B(__pRxDesc) LE_BITS_TO_4BYTE(__pRxDesc+28, 0, 32) - -#define SET_RX_STATUS_DESC_BUFF_ADDR_8723B(__pRxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pRxDesc+24, 0, 32, __Value) - - -// Dword 0 -#define GET_TX_DESC_OWN_8723B(__pTxDesc) LE_BITS_TO_4BYTE(__pTxDesc, 31, 1) - -#define SET_TX_DESC_PKT_SIZE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 0, 16, __Value) -#define SET_TX_DESC_OFFSET_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 16, 8, __Value) -#define SET_TX_DESC_BMC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 24, 1, __Value) -#define SET_TX_DESC_HTC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 25, 1, __Value) -#define SET_TX_DESC_LAST_SEG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 26, 1, __Value) -#define SET_TX_DESC_FIRST_SEG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 27, 1, __Value) -#define SET_TX_DESC_LINIP_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 28, 1, __Value) -#define SET_TX_DESC_NO_ACM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 29, 1, __Value) -#define SET_TX_DESC_GF_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 30, 1, __Value) -#define SET_TX_DESC_OWN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc, 31, 1, __Value) - -// Dword 1 -#define SET_TX_DESC_MACID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 0, 7, __Value) -#define SET_TX_DESC_QUEUE_SEL_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 8, 5, __Value) -#define SET_TX_DESC_RDG_NAV_EXT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 13, 1, __Value) -#define SET_TX_DESC_LSIG_TXOP_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 14, 1, __Value) -#define SET_TX_DESC_PIFS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 15, 1, __Value) -#define SET_TX_DESC_RATE_ID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 16, 5, __Value) -#define SET_TX_DESC_EN_DESC_ID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 21, 1, __Value) -#define SET_TX_DESC_SEC_TYPE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 22, 2, __Value) -#define SET_TX_DESC_PKT_OFFSET_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+4, 24, 5, __Value) - - -// Dword 2 -#define SET_TX_DESC_PAID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 0, 9, __Value) -#define SET_TX_DESC_CCA_RTS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 10, 2, __Value) -#define SET_TX_DESC_AGG_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 12, 1, __Value) -#define SET_TX_DESC_RDG_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 13, 1, __Value) -#define SET_TX_DESC_AGG_BREAK_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 16, 1, __Value) -#define SET_TX_DESC_MORE_FRAG_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 17, 1, __Value) -#define SET_TX_DESC_RAW_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 18, 1, __Value) -#define SET_TX_DESC_SPE_RPT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 19, 1, __Value) -#define SET_TX_DESC_AMPDU_DENSITY_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 20, 3, __Value) -#define SET_TX_DESC_BT_INT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 23, 1, __Value) -#define SET_TX_DESC_GID_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+8, 24, 6, __Value) - - -// Dword 3 -#define SET_TX_DESC_WHEADER_LEN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 0, 4, __Value) -#define SET_TX_DESC_CHK_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 4, 1, __Value) -#define SET_TX_DESC_EARLY_MODE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 5, 1, __Value) -#define SET_TX_DESC_HWSEQ_SEL_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 6, 2, __Value) -#define SET_TX_DESC_USE_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 8, 1, __Value) -#define SET_TX_DESC_DISABLE_RTS_FB_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 9, 1, __Value) -#define SET_TX_DESC_DISABLE_FB_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 10, 1, __Value) -#define SET_TX_DESC_CTS2SELF_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 11, 1, __Value) -#define SET_TX_DESC_RTS_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 12, 1, __Value) -#define SET_TX_DESC_HW_RTS_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 13, 1, __Value) -#define SET_TX_DESC_NAV_USE_HDR_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 15, 1, __Value) -#define SET_TX_DESC_USE_MAX_LEN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 16, 1, __Value) -#define SET_TX_DESC_MAX_AGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 17, 5, __Value) -#define SET_TX_DESC_NDPA_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 22, 2, __Value) -#define SET_TX_DESC_AMPDU_MAX_TIME_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+12, 24, 8, __Value) - -// Dword 4 -#define SET_TX_DESC_TX_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 0, 7, __Value) -#define SET_TX_DESC_DATA_RATE_FB_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 8, 5, __Value) -#define SET_TX_DESC_RTS_RATE_FB_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 13, 4, __Value) -#define SET_TX_DESC_RETRY_LIMIT_ENABLE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 17, 1, __Value) -#define SET_TX_DESC_DATA_RETRY_LIMIT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 18, 6, __Value) -#define SET_TX_DESC_RTS_RATE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+16, 24, 5, __Value) - - -// Dword 5 -#define SET_TX_DESC_DATA_SC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 0, 4, __Value) -#define SET_TX_DESC_DATA_SHORT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 4, 1, __Value) -#define SET_TX_DESC_DATA_BW_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 5, 2, __Value) -#define SET_TX_DESC_DATA_LDPC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 7, 1, __Value) -#define SET_TX_DESC_DATA_STBC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 8, 2, __Value) -#define SET_TX_DESC_CTROL_STBC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 10, 2, __Value) -#define SET_TX_DESC_RTS_SHORT_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 12, 1, __Value) -#define SET_TX_DESC_RTS_SC_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+20, 13, 4, __Value) - - -// Dword 6 -#define SET_TX_DESC_SW_DEFINE_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 0, 12, __Value) -#define SET_TX_DESC_ANTSEL_A_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 16, 3, __Value) -#define SET_TX_DESC_ANTSEL_B_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 19, 3, __Value) -#define SET_TX_DESC_ANTSEL_C_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 22, 3, __Value) -#define SET_TX_DESC_ANTSEL_D_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+24, 25, 3, __Value) - -// Dword 7 - -#define SET_TX_DESC_TX_DESC_CHECKSUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 0, 16, __Value) - -#define SET_TX_DESC_USB_TXAGG_NUM_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 24, 8, __Value) - -#define SET_TX_DESC_SDIO_TXSEQ_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+28, 16, 8, __Value) - - -// Dword 8 -#define SET_TX_DESC_HWSEQ_EN_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+32, 15, 1, __Value) - -// Dword 9 -#define SET_TX_DESC_SEQ_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+36, 12, 12, __Value) - -// Dword 10 -#define SET_TX_DESC_TX_BUFFER_ADDRESS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+40, 0, 32, __Value) - - -// Dword 11 -#define SET_TX_DESC_NEXT_DESC_ADDRESS_8723B(__pTxDesc, __Value) SET_BITS_TO_LE_4BYTE(__pTxDesc+48, 0, 32, __Value) - - -#define SET_EARLYMODE_PKTNUM_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 0, 4, __Value) -#define SET_EARLYMODE_LEN0_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 4, 15, __Value) -#define SET_EARLYMODE_LEN1_1_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr, 19, 13, __Value) -#define SET_EARLYMODE_LEN1_2_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 0, 2, __Value) -#define SET_EARLYMODE_LEN2_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 2, 15, __Value) -#define SET_EARLYMODE_LEN3_8723B(__pAddr, __Value) SET_BITS_TO_LE_4BYTE(__pAddr+4, 17, 15, __Value) - -#endif - - -#define RX_HAL_IS_CCK_RATE_8723B(pDesc)\ - (GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC_RATE1M ||\ - GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC_RATE2M ||\ - GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC_RATE5_5M ||\ - GET_RX_STATUS_DESC_RX_RATE_8723B(pDesc) == DESC_RATE11M) - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _RX_DRIVER_INFO_8723B{ - //DWORD 0 - u1Byte gain_trsw[2]; - u2Byte chl_num:10; - u2Byte sub_chnl:4; - u2Byte r_RFMOD:2; - - //DWORD 1 - u1Byte pwdb_all; - u1Byte cfosho[4]; // DW 1 byte 1 DW 2 byte 0 - - //DWORD 2 - u1Byte cfotail[4]; // DW 2 byte 1 DW 3 byte 0 - - //DWORD 3 - s1Byte rxevm[2]; // DW 3 byte 1 DW 3 byte 2 - s1Byte rxsnr[2]; // DW 3 byte 3 DW 4 byte 0 - - //DWORD 4 - u1Byte PCTS_MSK_RPT[2]; - u1Byte pdsnr[2]; // DW 4 byte 3 DW 5 Byte 0 - - //DWORD 5 - u1Byte csi_current[2]; - u1Byte rx_gain_c; - - //DWORD 6 - u1Byte rx_gain_d; - s1Byte sigevm; - u1Byte resvd_0; - u1Byte antidx_anta:3; - u1Byte antidx_antb:3; - u1Byte resvd_1:2; -}RX_DRIVER_INFO_8723B, *PRX_DRIVER_INFO_8723B; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -VOID -TxDescriptorChecksum_8723B( - IN pu1Byte txDesc -); - - -u1Byte -BWMapping_8723B( - IN PADAPTER Adapter, - IN PRT_TCB pTcb -); - -u1Byte -SCMapping_8723B( - IN PADAPTER Adapter, - IN PRT_TCB pTcb -); - -VOID -InsertEMContent_8723B( - IN u1Byte bEarlyModeEnable, - IN PRT_TCB pTcb, - IN pu1Byte VirtualAddress -); - - -VOID -TranslateRxSignalStuff8723B( - IN PADAPTER Adapter, - IN OUT PRT_RFD pRfd, - IN pu1Byte pDesc, - IN PRX_DRIVER_INFO_8723B pDrvInfo ); - -u4Byte -RxCommandPacketHandle8723B( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - - diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BEfuse.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BEfuse.h deleted file mode 100644 index 699ec082..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BEfuse.h +++ /dev/null @@ -1,221 +0,0 @@ -/****************************************************************************** - * - * (c) Copyright 2012, RealTEK Technologies Inc. All Rights Reserved. - * - * Module: Hal8723BEfuse.c ( Source C File) - * - * Note: Copy from WMAC for the first version!!!! - * - * - * Function: - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * - * 07/10/2012 Kordan Set an independent files. - * -******************************************************************************/ -#ifndef __8723B_EFUSE_H__ -#define __8723B_EFUSE_H__ - -#define HWSET_MAX_SIZE_8723B 512 - -#define EFUSE_REAL_CONTENT_LEN_8723B 512 - -#define EFUSE_MAP_LEN_8723B 512 -#define EFUSE_MAX_SECTION_8723B 64 -#define EFUSE_MAX_WORD_UNIT_8723B 4 -#define EFUSE_IC_ID_OFFSET_8723B 506 //For some inferiority IC purpose. added by Roger, 2009.09.02. -#define AVAILABLE_EFUSE_ADDR_8723B(addr) (addr < EFUSE_REAL_CONTENT_LEN_8723B) - - -//======================================================== -// EFUSE for BT definition -//======================================================== -#define EFUSE_BT_REAL_BANK_CONTENT_LEN_8723B 512 -#define EFUSE_BT_REAL_CONTENT_LEN_8723B 1024 // 512*2 -#define EFUSE_BT_MAP_LEN_8723B 1024 // 1k bytes -#define EFUSE_BT_MAX_SECTION_8723B 128 // 1024/8 - -#define EFUSE_PROTECT_BYTES_BANK_8723B 16 -#define EFUSE_MAX_BANK_8723B 3 -//=========================================================== - -// EFUSE Parsing -//=========================================================== -VOID -Hal_EfuseParseBTCoexistInfo8723B( - IN PADAPTER Adapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_ReadChannelPlan8723B( - IN PADAPTER pAdapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_EfuseParseEEPROMVer8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); -VOID -Hal_EfuseParseChnlPlan8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); -VOID -Hal_EfuseParseCustomerID8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); -VOID -Hal_EfuseParseAntennaDiversity8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_EfuseParseIDCode8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo - ); - -VOID -Hal_InitChannelPlan8723B( - IN PADAPTER pAdapter - ); - - -VOID -Hal_EfuseParseRateIndicationOption8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_EfuseParseXtal_8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_ReadThermalMeter_8723B( - IN PADAPTER Adapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoloadFail - ); - -VOID -Hal_ReadAntennaDiversity8723B( - IN PADAPTER pAdapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_EfuseReadEFuse8723B( - PADAPTER Adapter, - u2Byte _offset, - u2Byte _size_byte, - u1Byte *pbuf, - IN BOOLEAN bPseudoTest - ); - -VOID -Hal_EfuseReadEFuse8723B( - PADAPTER Adapter, - u2Byte _offset, - u2Byte _size_byte, - u1Byte *pbuf, - IN BOOLEAN bPseudoTest - ); - - - -VOID -Hal_ReadTxPowerInfo8723B( - IN PADAPTER Adapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoLoadFail - ); - -VOID -Hal_ReadBoardType8723B( - IN PADAPTER Adapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoloadFail - ); - - - - -BOOLEAN -Hal_EfuseSwitchToBank8723B( - IN PADAPTER pAdapter, - IN u1Byte bank, - IN BOOLEAN bPseudoTest - ); - - -BOOLEAN -Hal_GetChnlGroup8723B( - IN u1Byte Channel, - OUT pu1Byte pGroup - ); - -VOID -Hal_ReadPROMVersion8723B( - IN PADAPTER Adapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoloadFail - ); - -VOID -Hal_ReadPAType_8723B( - IN PADAPTER Adapter, - IN pu1Byte PROMContent, - IN BOOLEAN AutoloadFail - ); - -VOID -Hal_InitEfuseVars_8723B( - IN PEFUSE_HAL pEfuseHal - ); - -VOID -Hal_EfusePowerSwitch8723B( - IN PADAPTER pAdapter, - IN UINT8 bWrite, - IN UINT8 PwrState); - -VOID -Hal_EfusePowerSwitch8723B_TestChip( - IN PADAPTER pAdapter, - IN UINT8 bWrite, - IN UINT8 PwrState); - -VOID -Hal_EfuseParsePackageType_8723B( - IN PADAPTER pAdapter, - IN pu1Byte hwinfo, - IN BOOLEAN AutoLoadFail - ); - - -#endif - - diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BFirmware.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BFirmware.h deleted file mode 100644 index 867c2545..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BFirmware.h +++ /dev/null @@ -1,465 +0,0 @@ -#ifndef __INC_FIRMWARE8723B_H__ -#define __INC_FIRMWARE8723B_H__ - - -#define IS_FW_HEADER_EXIST_8723B(_pFwHdr) ((GET_FIRMWARE_HDR_SIGNATURE(_pFwHdr) &0xFFF0) == 0x5300) - -//-------------------------------------------- -//3 Host Message Box -//-------------------------------------------- - -// Keep Alive Control -#define SET_8723B_H2CCMD_KEEP_ALIVE_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_KEEP_ALIVE_ACCPEPT_USER_DEFINED(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_KEEP_ALIVE_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) - -//_RSVDPAGE_LOC_CMD0 -#define SaaasET_8723B_H2CCMD_RSVDPAGE_LOC_PROBE_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_PSPOLL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_BT_QOS_NULL_DATA(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_BT_CTS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) - - -//_MEDIA_STATUS_RPT_PARM_CMD1 -#define SET_8723B_H2CCMD_MSRRPT_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID_IND(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_MSRRPT_PARM_MACID_END(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd+2, 0, 8, __Value) - - -// _WoWLAN PARAM_CMD5 -#define SET_8723B_H2CCMD_WOWLAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_PATTERN_MATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_MAGIC_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_UNICAST_PKT_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_ALL_PKT_DROP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIO_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 5, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_REKEY_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_DISCONNECT_WAKE_UP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 7, 1, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIONUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIO_PULSE_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_WOWLAN_GPIO_PULSE_CNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 1, 8, __Value) - - -//WLANINFO_PARM -#define SET_8723B_H2CCMD_WLANINFO_PARM_OPMODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_WLANINFO_PARM_CHANNEL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_WLANINFO_PARM_BW40MHZ(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -// _REMOTE_WAKEUP_CMD7 -#define SET_8723B_H2CCMD_REMOTE_WAKECTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_ARP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_NDP_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_GTK_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_NETWORK_LIST_OFFLOAD_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value) -#define SET_8723B_H2CCMD_REMOTE_WAKE_CTRL_REALWOWV2_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 6, 1, __Value) - - -// _AP_OFFLOAD_CMD8 -#define SET_8723B_H2CCMD_AP_OFFLOAD_ON(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_AP_OFFLOAD_HIDDEN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_AP_OFFLOAD_DENYANY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_AP_OFFLOAD_WAKEUP_EVT_RPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -// FCS_LOC_CMD10 -#define SET_8723B_H2CCMD_RSVDPAGE_FCS_LOC_NULL_DATA0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_FCS_LOC_NULL_DATA1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_FCS_LOC_NULL_DATA2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -// FCS_INFO_CMD11 -#define SET_8723B_H2CCMD_FCS_INFO_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_TOTAL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_CHIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+1), 0, 8, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 0, 2, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_BWSC_40(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 2, 3, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_BWSC_80(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 5, 3, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+3), 0, 8, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_MACID0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+4), 0, 8, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_MACID1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+5), 0, 8, __Value) - -// FCS_MACID_BITMAP16 -#define SET_8723B_H2CCMD_FCS_MACID_BITMAP0(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE(__pH2CCmd, 0, 16, __Value) -#define SET_8723B_H2CCMD_FCS_MACID_BITMAP1(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE((__pH2CCmd)+2, 0, 16, __Value) -#define SET_8723B_H2CCMD_FCS_MACID_BITMAP2(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE((__pH2CCmd)+4, 0, 16, __Value) - -// FCS_LOC_CMD17 (v2) -#define SET_8723B_H2CCMD_RSVDPAGE_FCS_LOC_V2_NULL_DATA0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_FCS_LOC_V2_NULL_DATA1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_FCS_LOC_V2_NULL_DATA2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -// FCS_INFO_CMD18 (v2) -#define SET_8723B_H2CCMD_FCS_INFO_V2_ORDER(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 4, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_TOTAL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 4, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_CHIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+1), 0, 8, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_BW(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 0, 2, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_BWSC_40(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 2, 3, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_BWSC_80(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+2), 5, 3, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+3), 0, 8, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_ROLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+4), 0, 3, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_IN_CUR_CH(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+4), 3, 1, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_DISTXNULL(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+6), 4, 1, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_C2HRPT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+6), 5, 2, __Value) -#define SET_8723B_H2CCMD_FCS_INFO_V2_ChNLSCAN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd+6), 7, 1, __Value) - -// _PWR_MOD_CMD20 -#define SET_8723B_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_RLBM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 4, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_SMART_PS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 4, 4, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_BCN_PASS_TIME(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_ALL_QUEUE_UAPSD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_PWR_STATE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_PWRMODE_PARM_TWO_ANTENNA_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) - -#define GET_8723B_H2CCMD_PWRMODE_PARM_MODE(__pH2CCmd) LE_BITS_TO_1BYTE(__pH2CCmd, 0, 8) - -// AOAC_GLOBAL_INFO -#define SET_8723B_H2CCMD_AOAC_GLOBAL_INFO_PAIRWISE_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_GLOBAL_INFO_GROUP_ENC_ALG(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) - -// AOAC_RSVDPAGE_LOC -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REMOTE_WAKE_CTRL_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_ARP_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_NS(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_RSP(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_GTK_EXT_MEM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_PROT_OFFLOAD_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 8, __Value) - -// AOAC_RSVDPAGE_LOC For Real-WOW -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_RSPACKET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_BUBBPACKET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_TEREDONFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -// AOAC_RSVDPAGE_LOC For Real-WOW V2 -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_V2INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_V2KEEPPACKET(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_V2ACKPATTERN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+5, 0, 8, __Value) -#define SET_8723B_H2CCMD_AOAC_RSVDPAGE_LOC_REALWOW_V2WAKEUPPATTERN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+6, 0, 8, __Value) - -// - -// RSVDPAGE_LOC_3 -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_3_NLO_INFO(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd), 0, 8, __Value) -#define SET_8723B_H2CCMD_RSVDPAGE_LOC_3_AOAC_REPORT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) - -#define GET_8723B_H2CCMD_RSVDPAGE_LOC_3_AOAC_REPORT(__pH2CCmd) LE_BITS_TO_1BYTE((__pH2CCmd)+1, 0, 8) - -//_SCAN_OFFLOAD_CTRL -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_D0_SCAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_RTD3_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_U3_SCAN_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_NLO_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 3, 1, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_IPS_DEPENDENT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 4, 1, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_RSVDPAGE_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_CHNL_INFO_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_SSID_INFO_LOC(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -#define GET_8723B_H2CCMD_SCAN_OFFLOAD_CTRL_PARM_ENABLE(__pH2CCmd) LE_BITS_TO_1BYTE(__pH2CCmd, 0, 8) - -//_CHANNEL_PATTERN -#define SET_8723B_H2CCMD_CHANNEL_PATTERN_PARM_CHNL_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 8, __Value) -#define SET_8723B_H2CCMD_CHANNEL_PATTERN_PARM_TXPWRIDX(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_CHANNEL_PATTERN_PARM_TIMEOUT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_CHANNEL_PATTERN_PARM_ACTIVE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -// BT_FW_PATCH -//#define SET_8723B_H2CCMD_BT_FW_PATCH_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_SIZE(__pH2CCmd, __Value) SET_BITS_TO_LE_2BYTE((pu1Byte)(__pH2CCmd), 0, 16, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR0(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR1(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+3, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR2(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+4, 0, 8, __Value) -#define SET_8723B_H2CCMD_BT_FW_PATCH_ADDR3(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((pu1Byte)(__pH2CCmd)+5, 0, 8, __Value) - -//_INACTIVE_PS_CTRL -#define SET_8723B_H2CCMD_INACTIVE_PS_PARM_FUNC_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_INACTIVE_PS_PARM_IGNORE_PS_CONDITION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_INACTIVE_PS_PARM_SCAN_FREQUENCY(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) -#define SET_8723B_H2CCMD_INACTIVE_PS_PARM_DURATION(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) - -#define GET_8723B_H2CCMD_INACTIVE_PS_PARM_FUNC_ENABLE(__pH2CCmd) LE_BITS_TO_1BYTE(__pH2CCmd, 0, 1) - -// Disconnect_Decision_Control -// -// 1. The value "CHECK_PERIOD" should be larger than 5 which Fw checks beacon lost period. -// 2. "TRY_OK_BCN_LOST_CNT" should be smaller than "CHECK_PERIOD". -#define SET_8723B_H2CCMD_DISCONNECT_DECISION_CTRL_ENABLE(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) -#define SET_8723B_H2CCMD_DISCONNECT_DECISION_CTRL_USER_SETTING(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 1, 1, __Value) -#define SET_8723B_H2CCMD_DISCONNECT_DECISION_CTRL_CNT_BCN_LOST_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 2, 1, __Value) -#define SET_8723B_H2CCMD_DISCONNECT_DECISION_CTRL_CHECK_PERIOD(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+1, 0, 8, __Value) // unit: beacon period -#define SET_8723B_H2CCMD_DISCONNECT_DECISION_CTRL_TRYPKT_NUM(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+2, 0, 8, __Value) -#define SET_8723B_H2CCMD_DISCONNECT_DECISION_CTRL_TRY_OK_BCN_LOST_CNT(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE((__pH2CCmd)+3, 0, 8, __Value) - -// WIFI_CALIBRATION -#define SET_8723B_H2CCMD_WIFI_CALIBRATION_EN(__pH2CCmd, __Value) SET_BITS_TO_LE_1BYTE(__pH2CCmd, 0, 1, __Value) - - -//------------------------------------ -// C2H format -//------------------------------------ - -// TX Beamforming -#define GET_8723B_C2H_TXBF_ORIGINATE(_Header) LE_BITS_TO_1BYTE(_Header, 0, 8) -#define GET_8723B_C2H_TXBF_MACID(_Header) LE_BITS_TO_1BYTE((_Header + 1), 0, 8) - -/// TX Feedback Content -#define USEC_UNIT_FOR_8723B_C2H_TX_RPT_QUEUE_TIME 256 - -#define GET_8723B_C2H_TX_RPT_QUEUE_SELECT(_Header) LE_BITS_TO_1BYTE((_Header + 0), 0, 5) -#define GET_8723B_C2H_TX_RPT_PKT_BROCAST(_Header) LE_BITS_TO_1BYTE((_Header + 0), 5, 1) -#define GET_8723B_C2H_TX_RPT_LIFE_TIME_OVER(_Header) LE_BITS_TO_1BYTE((_Header + 0), 6, 1) -#define GET_8723B_C2H_TX_RPT_RETRY_OVER(_Header) LE_BITS_TO_1BYTE((_Header + 0), 7, 1) -#define GET_8723B_C2H_TX_RPT_MAC_ID(_Header) LE_BITS_TO_1BYTE((_Header + 1), 0, 8) -#define GET_8723B_C2H_TX_RPT_DATA_RETRY_CNT(_Header) LE_BITS_TO_1BYTE((_Header + 2), 0, 6) -#define GET_8723B_C2H_TX_RPT_QUEUE_TIME(_Header) LE_BITS_TO_2BYTE((_Header + 3), 0, 16) // In unit of 256 microseconds. -#define GET_8723B_C2H_TX_RPT_FINAL_DATA_RATE(_Header) LE_BITS_TO_1BYTE((_Header + 5), 0, 8) - -#define GET_8723B_C2H_FCS_STATUS(_Header) LE_BITS_TO_1BYTE((_Header + 0), 0, 8) - -typedef enum _RTL8723B_H2C_CMD -{ - H2C_8723B_RSVDPAGE = 0, - H2C_8723B_MSRRPT = 1, - H2C_8723B_SCAN = 2, - H2C_8723B_KEEP_ALIVE_CTRL = 3, - H2C_8723B_DISCONNECT_DECISION = 4, - - H2C_8723B_INIT_OFFLOAD = 6, - H2C_8723B_AP_OFFLOAD = 8, - H2C_8723B_BCN_RSVDPAGE = 9, - H2C_8723B_PROBERSP_RSVDPAGE = 10, - - H2C_8723B_FCS_LOCATION = 0x10, - H2C_8723B_FCS_INFO = 0x11, - H2C_8723B_FCS_UPDATE_PARAM = 0x15, - H2C_8723B_FCS_MACID_BITMAP = 0x16, - H2C_8723B_FCS_INFO_V2 = 0x18, - - H2C_8723B_SETPWRMODE = 0x20, - H2C_8723B_PS_TUNING_PARA = 0x21, - H2C_8723B_PS_TUNING_PARA2 = 0x22, - H2C_8723B_PS_LPS_PARA = 0x23, - H2C_8723B_P2P_PS_OFFLOAD = 0x24, - H2C_8723B_INACTIVE_PS = 0x27, - - H2C_8723B_RA_MASK = 0x40, - H2C_8723B_RSSI_REPORT = 0x42, - - H2C_8723B_BT_FW_PATCH = 0x6a, - H2C_8723B_WIFI_CALIBRATION = 0x6d, - - H2C_8723B_WO_WLAN = 0x80, - H2C_8723B_REMOTE_WAKE_CTRL = 0x81, - H2C_8723B_AOAC_GLOBAL_INFO = 0x82, - H2C_8723B_AOAC_RSVDPAGE = 0x83, - H2C_8723B_AOAC_RSVDPAGE2 = 0x84, - H2C_8723B_SCAN_OFFLOAD_CTRL = 0x86, - H2C_8723B_AOAC_RSVDPAGE3 = 0x88, - - //Not defined in new 88E H2C CMD Format - H2C_8723B_SELECTIVE_SUSPEND_ROF_CMD, - H2C_8723B_P2P_PS_MODE, - H2C_8723B_PSD_RESULT, - MAX_8723B_H2CCMD -}RTL8723B_H2C_CMD; - - -typedef enum _RTL8723B_C2H_EVT -{ - C2H_8723B_DBG = 0, - C2H_8723B_LB = 1, - C2H_8723B_TXBF = 2, - C2H_8723B_TX_REPORT = 3, - C2H_8723B_BT_INFO = 9, - C2H_8723B_BT_MP = 11, - C2H_8723B_RA_RPT = 12, - C2H_8723B_RA_PARA_RPT = 14, - C2H_8723B_FCS = 0x17, - C2H_8723B_DBG_CODE = 0xFE, - C2H_8723B_EXTEND = 0xFF, - MAX_8723B_C2HEVENT -}RTL8723B_C2H_EVT; - - -typedef enum _RTL8723B_EXTEND_C2H_EVT -{ - EXTEND_C2H_8723B_DBG_PRINT = 0 - -}RTL8723B_EXTEND_C2H_EVT; - - -//========================================================== - -VOID -SetBcnCtrlReg_8192C( - IN PADAPTER Adapter, - IN u1Byte SetBits, - IN u1Byte ClearBits -); - - -RT_STATUS -BTFwPatch8723B( - IN PADAPTER Adapter -); - - -RT_STATUS -FirmwareDownload8723B( - IN PADAPTER Adapter, - IN BOOLEAN bUsedWoWLANFw -); - - -VOID -FillH2CCmd8723B( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -u4Byte -FillH2CCommand8723B( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - - -VOID -SetFwPwrModeCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Mode -); - -VOID -SetFwMediaStatusRptCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte mstatus, - IN BOOLEAN macId_Ind, - IN u1Byte macId, - IN u1Byte macId_End - ); - -VOID -SetFwRemoteWakeCtrlCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Enable -); - -VOID -SetFwGlobalInfoCmd_8723B( - IN PADAPTER Adapter -); - -VOID -SetFwScanOffloadCtrlCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Type, - IN u1Byte ScanOffloadEnable, - IN u1Byte NLOEnable -); - -VOID -SetFwInactivePSCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte Enable, - IN BOOLEAN bActiveWakeup, - IN BOOLEAN bForceClkOff -); - -VOID -SetFwDisconnectDecisionCtrlCmd_8723B( - IN PADAPTER Adapter, - IN BOOLEAN bEnabled -); - -VOID -SetFwWiFiCalibrationCmd_8723B( - IN PADAPTER Adapter, - IN u1Byte u1Enable -); - -VOID -C2HPacketHandler_8723B( - IN PADAPTER Adapter, - IN pu1Byte Buffer, - IN u1Byte Length - ); - -VOID -ExtendC2HPacketHandler_8723B( - IN pu1Byte Buffer, - IN u1Byte c2hCmdLen - ); - - -VOID -C2HCommandHandler_8723B( - IN PADAPTER Adapter -); - -VOID -CheckFwRsvdPageContent_8723B( - IN PADAPTER Adapter -); - -VOID -SetFwRsvdPagePkt_8723B( - IN PADAPTER Adapter, - IN BOOLEAN bDLFinished -); - -VOID -FillFakeTxDescriptor_8723B( - IN PADAPTER Adapter, - IN pu1Byte pDesc, - IN u4Byte BufferLen, - IN BOOLEAN IsPsPoll, - IN BOOLEAN IsBTQosNull, - IN BOOLEAN bDataFrame -); -#if(FW_QUEME_MECHANISM_NEW != 1) -VOID -AddH2CCmdQueue_8723B( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -BOOLEAN -RetriveH2CCmdQueue_8723B( - IN PADAPTER Adapter, - IN pu1Byte pH2CCmdBuf -); -VOID -_WriteFW_8723B( - IN PADAPTER Adapter, - IN PVOID buffer, - IN u4Byte size -); -VOID -_FWDownloadEnable_8723B( - IN PADAPTER Adapter, - IN BOOLEAN enable -); - -#endif -#endif - -VOID -SetFwFcsLocCmd_8723B( - IN PADAPTER Adapter -); - -VOID -SetFwFcsInfoCmd_8723B( - IN PADAPTER Adapter, - IN pu1Byte pContext, - IN BOOLEAN bSet -); - diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyCfg.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyCfg.h deleted file mode 100644 index 997443ff..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyCfg.h +++ /dev/null @@ -1,301 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2008, RealTEK Technology Inc. All Right Reserved. - * - * Module: __INC_HAL8188EPHYCFG_H - * - * - * Note: - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h. - * 2. Reorganize code architecture. - * - *****************************************************************************/ - /* Check to see if the file has been included already. */ -#ifndef __INC_HAL8723BPHYCFG_H -#define __INC_HAL8723BPHYCFG_H - - -/*--------------------------Define Parameters-------------------------------*/ -#define IQK_DELAY_TIME_92E 10 //ms -#define index_mapping_NUM_92E 15 -#define AVG_THERMAL_NUM_92E 4 - -#define MAX_TXPWR_IDX_NMODE_92E 63 - -#define IQK_MAC_REG_NUM_92E 4 -#define IQK_ADDA_REG_NUM_92E 16 - -#define HP_THERMAL_NUM_92E 8 - -#define IQK_BB_REG_NUM_92E 9 - -#define RF_PATH_MAX_92E 2 - - -/*--------------------------Define Parameters-------------------------------*/ - - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ -/*------------------------Export global variable----------------------------*/ - - -/*------------------------Export Marco Definition---------------------------*/ -/*------------------------Export Marco Definition---------------------------*/ - - -/*--------------------------Exported Function prototype---------------------*/ -//1 1. BB register R/W API - -extern u4Byte -PHY_QueryBBReg8723B( IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask ); - - -VOID -PHY_SetBBReg8723B( IN PADAPTER Adapter, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data ); - - -extern u4Byte -PHY_QueryRFReg8723B( IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask ); - - -void -PHY_SetRFReg8723B( IN PADAPTER Adapter, - IN u1Byte eRFPath, - IN u4Byte RegAddr, - IN u4Byte BitMask, - IN u4Byte Data ); - -//1 3. Initial BB/RF config by reading MAC/BB/RF txt. -RT_STATUS -phy_BB8723B_Config_ParaFile( - IN PADAPTER Adapter - ); - -RT_STATUS -PHY_RFConfig8723B( - IN PADAPTER Adapter - ); - -// -// RF Power setting -// -BOOLEAN -PHY_SetRFPowerState8723B( IN PADAPTER Adapter, - IN RT_RF_POWER_STATE eRFPowerState); - -//1 5. Tx Power setting API -VOID -PHY_SetTxPowerIndex_8723B( - IN PADAPTER Adapter, - IN u4Byte PowerIndex, - IN u1Byte RFPath, - IN u1Byte Rate - ); - -u1Byte -PHY_GetTxPowerIndex_8723B( - IN PADAPTER pAdapter, - IN u1Byte RFPath, - IN u1Byte Rate, - IN CHANNEL_WIDTH BandWidth, - IN u1Byte Channel - ); - -VOID -PHY_GetTxPowerLevel8723B( - IN PADAPTER Adapter, - OUT ps4Byte powerlevel - ); - -VOID -PHY_SetTxPowerLevel8723B( - IN PADAPTER Adapter, - IN u1Byte channel - ); - -BOOLEAN -PHY_UpdateTxPowerDbm8723B( IN PADAPTER Adapter, - IN s4Byte powerInDbm ); - -//1 5. BandWidth setting API - -VOID -PHY_SetBWModeWorkItemCallback8723B( - IN PVOID pContext - ); - - -VOID -PHY_SetBWModeTimerCallback8723B( IN PRT_TIMER pTimer ); - -VOID -PHY_HandleSetBWMode8723B( IN PADAPTER pAdapter, - IN CHANNEL_WIDTH ChnlWidth, - IN EXTCHNL_OFFSET Offset ); - - -//1 6. Channel setting API - -void -PHY_SwChnlTimerCallback8723B( IN PRT_TIMER pTimer ); - -void -PHY_HandleSwChnl8723B( IN PADAPTER pAdapter, - IN u1Byte channel ); - -void -PHY_SwChnlSynchronously8723B( IN PADAPTER pAdapter, - IN u1Byte channel ); -VOID -PHY_SwChnlWorkItemCallback8723B( - IN PVOID pContext - ); - -#if 0 - -//1 7. IQK - -void -PHY_IQCalibrate_8188E( IN PADAPTER pAdapter, - IN BOOLEAN bReCovery); - - -// -// LC calibrate -// -void -PHY_LCCalibrate_8188E( IN PADAPTER pAdapter); - -// -// AP calibrate -// -void -PHY_APCalibrate_8188E( IN PADAPTER pAdapter, - IN s1Byte delta); -void -PHY_DigitalPredistortion_8188E( IN PADAPTER pAdapter); - -#endif - -extern VOID -PHY_SetRFPathSwitch_8723B( IN PADAPTER pAdapter, - IN BOOLEAN bMain); - -extern BOOLEAN -PHY_QueryRFPathSwitch_8723B( IN PADAPTER pAdapter); - - -void -PHY_SetMonitorMode8723B(IN PADAPTER pAdapter, - IN BOOLEAN bEnableMonitorMode ); - -#if (USE_WORKITEM || PCI_USE_WATCHDOG_WI) -VOID -RtCheckForHangWorkItemCallback8723B( - IN PVOID pContext -); -#endif - -VOID -PHY_ScanOperationBackup8723B( IN PADAPTER Adapter, - IN u1Byte Operation ); - - - -BOOLEAN -HalSetIO8723B( IN PADAPTER Adapter, - IN IO_TYPE IOType); - -VOID -PHY_HandleSwChnl8723B( // Call after initialization - IN PADAPTER pAdapter, - IN u1Byte channel - ); - - -#if USE_WORKITEM -void SetIOWorkItemCallback8723B( IN PVOID pContext ); -#endif -void SetIOTimerCallback8723B( IN PRT_TIMER pTimer); - - - -BOOLEAN -SetAntennaConfig8723B( - IN PADAPTER Adapter, - IN u1Byte DefaultAnt - ); - -RT_STATUS -PHY_SwitchWirelessBand8723B( - IN PADAPTER Adapter, - IN u1Byte Band - ); - -u4Byte PHY_GetTxBBSwing_8723B( - IN PADAPTER Adapter, - IN BAND_TYPE Band, - IN u1Byte RFPath - ); - -VOID -HAL_HandleSwChnl8723B( // Call after initialization - IN PADAPTER pAdapter, - IN u1Byte channel - ); - -VOID -PHY_HandleSwChnlAndSetBW8723B( - IN PADAPTER Adapter, - IN BOOLEAN bSwitchChannel, - IN BOOLEAN bSetBandWidth, - IN u1Byte ChannelNum, - IN CHANNEL_WIDTH ChnlWidth, - IN EXTCHNL_OFFSET ExtChnlOffsetOf40MHz, - IN EXTCHNL_OFFSET ExtChnlOffsetOf80MHz, - IN u1Byte CenterFrequencyIndex1 - ); - -VOID -PHY_BB8723B_Config_1T( - IN PADAPTER Adapter - ); - -VOID -PHY_SwChnlAndSetBWModeCallback8723B( - IN PVOID pContext - ); - -VOID -PHY_InitAntennaSelection8723B( - IN PADAPTER Adapter - ); - -VOID -PHY_SetIO_8723B( - PADAPTER pAdapter - ); - -#endif // __INC_HAL8188EPHYCFG_H - diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyReg.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyReg.h deleted file mode 100644 index bb86cab7..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BPhyReg.h +++ /dev/null @@ -1,983 +0,0 @@ -/***************************************************************************** - * Copyright(c) 2008, RealTEK Technology Inc. All Right Reserved. - * - * Module: __INC_HAL8192SPHYREG_H - * - * - * Note: 1. Define PMAC/BB register map - * 2. Define RF register map - * 3. PMAC/BB register bit mask. - * 4. RF reg bit mask. - * 5. Other BB/RF relative definition. - * - * - * Export: Constants, macro, functions(API), global variables(None). - * - * Abbrev: - * - * History: - * Data Who Remark - * 08/07/2007 MHC 1. Porting from 9x series PHYCFG.h. - * 2. Reorganize code architecture. - * 09/25/2008 MH 1. Add RL6052 register definition - * - *****************************************************************************/ -#ifndef __INC_HAL8723BPHYREG_H -#define __INC_HAL8723BPHYREG_H - - -/*--------------------------Define Parameters-------------------------------*/ - -//============================================================ -// 8192S Regsiter offset definition -//============================================================ - -// -// BB-PHY register PMAC 0x100 PHY 0x800 - 0xEFF -// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF -// 2. 0x800/0x900/0xA00/0xC00/0xD00/0xE00 -// 3. RF register 0x00-2E -// 4. Bit Mask for BB/RF register -// 5. Other defintion for BB/RF R/W -// - - -// -// 1. PMAC duplicate register due to connection: RF_Mode, TRxRN, NumOf L-STF -// 1. Page1(0x100) -// -#define rSYM_WLBT_PAPE_SEL 0x64 -#define rPMAC_Reset 0x100 -#define rPMAC_TxStart 0x104 -#define rPMAC_TxLegacySIG 0x108 -#define rPMAC_TxHTSIG1 0x10c -#define rPMAC_TxHTSIG2 0x110 -#define rPMAC_PHYDebug 0x114 -#define rPMAC_TxPacketNum 0x118 -#define rPMAC_TxIdle 0x11c -#define rPMAC_TxMACHeader0 0x120 -#define rPMAC_TxMACHeader1 0x124 -#define rPMAC_TxMACHeader2 0x128 -#define rPMAC_TxMACHeader3 0x12c -#define rPMAC_TxMACHeader4 0x130 -#define rPMAC_TxMACHeader5 0x134 -#define rPMAC_TxDataType 0x138 -#define rPMAC_TxRandomSeed 0x13c -#define rPMAC_CCKPLCPPreamble 0x140 -#define rPMAC_CCKPLCPHeader 0x144 -#define rPMAC_CCKCRC16 0x148 -#define rPMAC_OFDMRxCRC32OK 0x170 -#define rPMAC_OFDMRxCRC32Er 0x174 -#define rPMAC_OFDMRxParityEr 0x178 -#define rPMAC_OFDMRxCRC8Er 0x17c -#define rPMAC_CCKCRxRC16Er 0x180 -#define rPMAC_CCKCRxRC32Er 0x184 -#define rPMAC_CCKCRxRC32OK 0x188 -#define rPMAC_TxStatus 0x18c - - -// -// 3. Page8(0x800) -// -#define rFPGA0_RFMOD 0x800 //RF mode & CCK TxSC // RF BW Setting?? - -#define rFPGA0_TxInfo 0x804 // Status report?? -#define rFPGA0_PSDFunction 0x808 - -#define rFPGA0_TxGainStage 0x80c // Set TX PWR init gain? - -#define rFPGA0_RFTiming1 0x810 // Useless now -#define rFPGA0_RFTiming2 0x814 - -#define rFPGA0_XA_HSSIParameter1 0x820 // RF 3 wire register -#define rFPGA0_XA_HSSIParameter2 0x824 -#define rFPGA0_XB_HSSIParameter1 0x828 -#define rFPGA0_XB_HSSIParameter2 0x82c - -#define rFPGA0_XA_LSSIParameter 0x840 -#define rFPGA0_XB_LSSIParameter 0x844 - -#define rFPGA0_RFWakeUpParameter 0x850 // Useless now -#define rFPGA0_RFSleepUpParameter 0x854 - -#define rFPGA0_XAB_SwitchControl 0x858 // RF Channel switch -#define rFPGA0_XCD_SwitchControl 0x85c - -#define rFPGA0_XA_RFInterfaceOE 0x860 // RF Channel switch -#define rFPGA0_XB_RFInterfaceOE 0x864 - -#define rFPGA0_XAB_RFInterfaceSW 0x870 // RF Interface Software Control -#define rFPGA0_XCD_RFInterfaceSW 0x874 - -#define rFPGA0_XAB_RFParameter 0x878 // RF Parameter -#define rFPGA0_XCD_RFParameter 0x87c - -#define rFPGA0_AnalogParameter1 0x880 // Crystal cap setting RF-R/W protection for parameter4?? -#define rFPGA0_AnalogParameter2 0x884 -#define rFPGA0_AnalogParameter3 0x888 -#define rFPGA0_AdDaClockEn 0x888 // enable ad/da clock1 for dual-phy -#define rFPGA0_AnalogParameter4 0x88c - -#define rFPGA0_XA_LSSIReadBack 0x8a0 // Tranceiver LSSI Readback -#define rFPGA0_XB_LSSIReadBack 0x8a4 -#define rFPGA0_XC_LSSIReadBack 0x8a8 -#define rFPGA0_XD_LSSIReadBack 0x8ac - -#define rFPGA0_PSDReport 0x8b4 // Useless now -#define TransceiverA_HSPI_Readback 0x8b8 // Transceiver A HSPI Readback -#define TransceiverB_HSPI_Readback 0x8bc // Transceiver B HSPI Readback -#define rFPGA0_XAB_RFInterfaceRB 0x8e0 // Useless now // RF Interface Readback Value -#define rFPGA0_XCD_RFInterfaceRB 0x8e4 // Useless now - -// -// 4. Page9(0x900) -// -#define rFPGA1_RFMOD 0x900 //RF mode & OFDM TxSC // RF BW Setting?? - -#define rFPGA1_TxBlock 0x904 // Useless now -#define rFPGA1_DebugSelect 0x908 // Useless now -#define rFPGA1_TxInfo 0x90c // Useless now // Status report?? -#define rDPDT_control 0x92c -#define rfe_ctrl_anta_src 0x930 -#define rS0S1_PathSwitch 0x948 -#define rAGC_table_select 0xb2c - -// -// 5. PageA(0xA00) -// -// Set Control channel to upper or lower. These settings are required only for 40MHz -#define rCCK0_System 0xa00 - -#define rCCK0_AFESetting 0xa04 // Disable init gain now // Select RX path by RSSI -#define rCCK0_CCA 0xa08 // Disable init gain now // Init gain - -#define rCCK0_RxAGC1 0xa0c //AGC default value, saturation level // Antenna Diversity, RX AGC, LNA Threshold, RX LNA Threshold useless now. Not the same as 90 series -#define rCCK0_RxAGC2 0xa10 //AGC & DAGC - -#define rCCK0_RxHP 0xa14 - -#define rCCK0_DSPParameter1 0xa18 //Timing recovery & Channel estimation threshold -#define rCCK0_DSPParameter2 0xa1c //SQ threshold - -#define rCCK0_TxFilter1 0xa20 -#define rCCK0_TxFilter2 0xa24 -#define rCCK0_DebugPort 0xa28 //debug port and Tx filter3 -#define rCCK0_FalseAlarmReport 0xa2c //0xa2d useless now 0xa30-a4f channel report -#define rCCK0_TRSSIReport 0xa50 -#define rCCK0_RxReport 0xa54 //0xa57 -#define rCCK0_FACounterLower 0xa5c //0xa5b -#define rCCK0_FACounterUpper 0xa58 //0xa5c - -// -// PageB(0xB00) -// -#define rPdp_AntA 0xb00 -#define rPdp_AntA_4 0xb04 -#define rConfig_Pmpd_AntA 0xb28 -#define rConfig_AntA 0xb68 -#define rConfig_AntB 0xb6c -#define rPdp_AntB 0xb70 -#define rPdp_AntB_4 0xb74 -#define rConfig_Pmpd_AntB 0xb98 -#define rAPK 0xbd8 - - - -// -// 6. PageC(0xC00) -// -#define rOFDM0_LSTF 0xc00 - -#define rOFDM0_TRxPathEnable 0xc04 -#define rOFDM0_TRMuxPar 0xc08 -#define rOFDM0_TRSWIsolation 0xc0c - -#define rOFDM0_XARxAFE 0xc10 //RxIQ DC offset, Rx digital filter, DC notch filter -#define rOFDM0_XARxIQImbalance 0xc14 //RxIQ imblance matrix -#define rOFDM0_XBRxAFE 0xc18 -#define rOFDM0_XBRxIQImbalance 0xc1c -#define rOFDM0_XCRxAFE 0xc20 -#define rOFDM0_XCRxIQImbalance 0xc24 -#define rOFDM0_XDRxAFE 0xc28 -#define rOFDM0_XDRxIQImbalance 0xc2c - -#define rOFDM0_RxDetector1 0xc30 //PD,BW & SBD // DM tune init gain -#define rOFDM0_RxDetector2 0xc34 //SBD & Fame Sync. -#define rOFDM0_RxDetector3 0xc38 //Frame Sync. -#define rOFDM0_RxDetector4 0xc3c //PD, SBD, Frame Sync & Short-GI - -#define rOFDM0_RxDSP 0xc40 //Rx Sync Path -#define rOFDM0_CFOandDAGC 0xc44 //CFO & DAGC -#define rOFDM0_CCADropThreshold 0xc48 //CCA Drop threshold -#define rOFDM0_ECCAThreshold 0xc4c // energy CCA - -#define rOFDM0_XAAGCCore1 0xc50 // DIG -#define rOFDM0_XAAGCCore2 0xc54 -#define rOFDM0_XBAGCCore1 0xc58 -#define rOFDM0_XBAGCCore2 0xc5c -#define rOFDM0_XCAGCCore1 0xc60 -#define rOFDM0_XCAGCCore2 0xc64 -#define rOFDM0_XDAGCCore1 0xc68 -#define rOFDM0_XDAGCCore2 0xc6c - -#define rOFDM0_AGCParameter1 0xc70 -#define rOFDM0_AGCParameter2 0xc74 -#define rOFDM0_AGCRSSITable 0xc78 -#define rOFDM0_HTSTFAGC 0xc7c - -#define rOFDM0_XATxIQImbalance 0xc80 // TX PWR TRACK and DIG -#define rOFDM0_XATxAFE 0xc84 -#define rOFDM0_XBTxIQImbalance 0xc88 -#define rOFDM0_XBTxAFE 0xc8c -#define rOFDM0_XCTxIQImbalance 0xc90 -#define rOFDM0_XCTxAFE 0xc94 -#define rOFDM0_XDTxIQImbalance 0xc98 -#define rOFDM0_XDTxAFE 0xc9c - -#define rOFDM0_RxIQExtAnta 0xca0 -#define rOFDM0_TxCoeff1 0xca4 -#define rOFDM0_TxCoeff2 0xca8 -#define rOFDM0_TxCoeff3 0xcac -#define rOFDM0_TxCoeff4 0xcb0 -#define rOFDM0_TxCoeff5 0xcb4 -#define rOFDM0_RxHPParameter 0xce0 -#define rOFDM0_TxPseudoNoiseWgt 0xce4 -#define rOFDM0_FrameSync 0xcf0 -#define rOFDM0_DFSReport 0xcf4 - - -// -// 7. PageD(0xD00) -// -#define rOFDM1_LSTF 0xd00 -#define rOFDM1_TRxPathEnable 0xd04 - -#define rOFDM1_CFO 0xd08 // No setting now -#define rOFDM1_CSI1 0xd10 -#define rOFDM1_SBD 0xd14 -#define rOFDM1_CSI2 0xd18 -#define rOFDM1_CFOTracking 0xd2c -#define rOFDM1_TRxMesaure1 0xd34 -#define rOFDM1_IntfDet 0xd3c -#define rOFDM1_PseudoNoiseStateAB 0xd50 -#define rOFDM1_PseudoNoiseStateCD 0xd54 -#define rOFDM1_RxPseudoNoiseWgt 0xd58 - -#define rOFDM_PHYCounter1 0xda0 //cca, parity fail -#define rOFDM_PHYCounter2 0xda4 //rate illegal, crc8 fail -#define rOFDM_PHYCounter3 0xda8 //MCS not support - -#define rOFDM_ShortCFOAB 0xdac // No setting now -#define rOFDM_ShortCFOCD 0xdb0 -#define rOFDM_LongCFOAB 0xdb4 -#define rOFDM_LongCFOCD 0xdb8 -#define rOFDM_TailCFOAB 0xdbc -#define rOFDM_TailCFOCD 0xdc0 -#define rOFDM_PWMeasure1 0xdc4 -#define rOFDM_PWMeasure2 0xdc8 -#define rOFDM_BWReport 0xdcc -#define rOFDM_AGCReport 0xdd0 -#define rOFDM_RxSNR 0xdd4 -#define rOFDM_RxEVMCSI 0xdd8 -#define rOFDM_SIGReport 0xddc - - -// -// 8. PageE(0xE00) -// -#define rTxAGC_A_Rate18_06 0xe00 -#define rTxAGC_A_Rate54_24 0xe04 -#define rTxAGC_A_CCK1_Mcs32 0xe08 -#define rTxAGC_A_Mcs03_Mcs00 0xe10 -#define rTxAGC_A_Mcs07_Mcs04 0xe14 -#define rTxAGC_A_Mcs11_Mcs08 0xe18 -#define rTxAGC_A_Mcs15_Mcs12 0xe1c - -#define rTxAGC_B_Rate18_06 0x830 -#define rTxAGC_B_Rate54_24 0x834 -#define rTxAGC_B_CCK1_55_Mcs32 0x838 -#define rTxAGC_B_Mcs03_Mcs00 0x83c -#define rTxAGC_B_Mcs07_Mcs04 0x848 -#define rTxAGC_B_Mcs11_Mcs08 0x84c -#define rTxAGC_B_Mcs15_Mcs12 0x868 -#define rTxAGC_B_CCK11_A_CCK2_11 0x86c - -#define rFPGA0_IQK 0xe28 -#define rTx_IQK_Tone_A 0xe30 -#define rRx_IQK_Tone_A 0xe34 -#define rTx_IQK_PI_A 0xe38 -#define rRx_IQK_PI_A 0xe3c - -#define rTx_IQK 0xe40 -#define rRx_IQK 0xe44 -#define rIQK_AGC_Pts 0xe48 -#define rIQK_AGC_Rsp 0xe4c -#define rTx_IQK_Tone_B 0xe50 -#define rRx_IQK_Tone_B 0xe54 -#define rTx_IQK_PI_B 0xe58 -#define rRx_IQK_PI_B 0xe5c -#define rIQK_AGC_Cont 0xe60 - -#define rBlue_Tooth 0xe6c -#define rRx_Wait_CCA 0xe70 -#define rTx_CCK_RFON 0xe74 -#define rTx_CCK_BBON 0xe78 -#define rTx_OFDM_RFON 0xe7c -#define rTx_OFDM_BBON 0xe80 -#define rTx_To_Rx 0xe84 -#define rTx_To_Tx 0xe88 -#define rRx_CCK 0xe8c - -#define rTx_Power_Before_IQK_A 0xe94 -#define rTx_Power_After_IQK_A 0xe9c - -#define rRx_Power_Before_IQK_A 0xea0 -#define rRx_Power_Before_IQK_A_2 0xea4 -#define rRx_Power_After_IQK_A 0xea8 -#define rRx_Power_After_IQK_A_2 0xeac - -#define rTx_Power_Before_IQK_B 0xeb4 -#define rTx_Power_After_IQK_B 0xebc - -#define rRx_Power_Before_IQK_B 0xec0 -#define rRx_Power_Before_IQK_B_2 0xec4 -#define rRx_Power_After_IQK_B 0xec8 -#define rRx_Power_After_IQK_B_2 0xecc - -#define rRx_OFDM 0xed0 -#define rRx_Wait_RIFS 0xed4 -#define rRx_TO_Rx 0xed8 -#define rStandby 0xedc -#define rSleep 0xee0 -#define rPMPD_ANAEN 0xeec - -// -// 7. RF Register 0x00-0x2E (RF 8256) -// RF-0222D 0x00-3F -// -//Zebra1 -#define rZebra1_HSSIEnable 0x0 // Useless now -#define rZebra1_TRxEnable1 0x1 -#define rZebra1_TRxEnable2 0x2 -#define rZebra1_AGC 0x4 -#define rZebra1_ChargePump 0x5 -#define rZebra1_Channel 0x7 // RF channel switch - -//#endif -#define rZebra1_TxGain 0x8 // Useless now -#define rZebra1_TxLPF 0x9 -#define rZebra1_RxLPF 0xb -#define rZebra1_RxHPFCorner 0xc - -//Zebra4 -#define rGlobalCtrl 0 // Useless now -#define rRTL8256_TxLPF 19 -#define rRTL8256_RxLPF 11 - -//RTL8258 -#define rRTL8258_TxLPF 0x11 // Useless now -#define rRTL8258_RxLPF 0x13 -#define rRTL8258_RSSILPF 0xa - -// -// RL6052 Register definition -// -#define RF_AC 0x00 // - -#define RF_IQADJ_G1 0x01 // -#define RF_IQADJ_G2 0x02 // - -#define RF_POW_TRSW 0x05 // - -#define RF_GAIN_RX 0x06 // -#define RF_GAIN_TX 0x07 // - -#define RF_TXM_IDAC 0x08 // -#define RF_IPA_G 0x09 // -#define RF_TXBIAS_G 0x0A -#define RF_TXPA_AG 0x0B -#define RF_IPA_A 0x0C // -#define RF_TXBIAS_A 0x0D -#define RF_BS_PA_APSET_G9_G11 0x0E -#define RF_BS_IQGEN 0x0F // - -#define RF_MODE1 0x10 // -#define RF_MODE2 0x11 // - -#define RF_RX_AGC_HP 0x12 // -#define RF_TX_AGC 0x13 // -#define RF_BIAS 0x14 // -#define RF_IPA 0x15 // -#define RF_TXBIAS 0x16 -#define RF_POW_ABILITY 0x17 // -#define RF_CHNLBW 0x18 // RF channel and BW switch -#define RF_TOP 0x19 // - -#define RF_RX_G1 0x1A // -#define RF_RX_G2 0x1B // - -#define RF_RX_BB2 0x1C // -#define RF_RX_BB1 0x1D // - -#define RF_RCK1 0x1E // -#define RF_RCK2 0x1F // - -#define RF_TX_G1 0x20 // -#define RF_TX_G2 0x21 // -#define RF_TX_G3 0x22 // - -#define RF_TX_BB1 0x23 // - -//#if HARDWARE_TYPE_IS_RTL8192D == 1 -#define RF_T_METER_92D 0x42 // -//#else -#define RF_T_METER_88E 0x42 // -#define RF_T_METER 0x24 // - -//#endif - -#define RF_SYN_G1 0x25 // RF TX Power control -#define RF_SYN_G2 0x26 // RF TX Power control -#define RF_SYN_G3 0x27 // RF TX Power control -#define RF_SYN_G4 0x28 // RF TX Power control -#define RF_SYN_G5 0x29 // RF TX Power control -#define RF_SYN_G6 0x2A // RF TX Power control -#define RF_SYN_G7 0x2B // RF TX Power control -#define RF_SYN_G8 0x2C // RF TX Power control - -#define RF_RCK_OS 0x30 // RF TX PA control -#define RF_TXPA_G1 0x31 // RF TX PA control -#define RF_TXPA_G2 0x32 // RF TX PA control -#define RF_TXPA_G3 0x33 // RF TX PA control -#define RF_TX_BIAS_A 0x35 -#define RF_TX_BIAS_D 0x36 -#define RF_LOBF_9 0x38 -#define RF_RXRF_A3 0x3C // -#define RF_TRSW 0x3F - -#define RF_TXRF_A2 0x41 -#define RF_TXPA_G4 0x46 -#define RF_TXPA_A4 0x4B -#define RF_0x52 0x52 -#define RF_WE_LUT 0xEF -#define RF_S0S1 0xB0 - - -// -//Bit Mask -// -// 1. Page1(0x100) -#define bBBResetB 0x100 // Useless now? -#define bGlobalResetB 0x200 -#define bOFDMTxStart 0x4 -#define bCCKTxStart 0x8 -#define bCRC32Debug 0x100 -#define bPMACLoopback 0x10 -#define bTxLSIG 0xffffff -#define bOFDMTxRate 0xf -#define bOFDMTxReserved 0x10 -#define bOFDMTxLength 0x1ffe0 -#define bOFDMTxParity 0x20000 -#define bTxHTSIG1 0xffffff -#define bTxHTMCSRate 0x7f -#define bTxHTBW 0x80 -#define bTxHTLength 0xffff00 -#define bTxHTSIG2 0xffffff -#define bTxHTSmoothing 0x1 -#define bTxHTSounding 0x2 -#define bTxHTReserved 0x4 -#define bTxHTAggreation 0x8 -#define bTxHTSTBC 0x30 -#define bTxHTAdvanceCoding 0x40 -#define bTxHTShortGI 0x80 -#define bTxHTNumberHT_LTF 0x300 -#define bTxHTCRC8 0x3fc00 -#define bCounterReset 0x10000 -#define bNumOfOFDMTx 0xffff -#define bNumOfCCKTx 0xffff0000 -#define bTxIdleInterval 0xffff -#define bOFDMService 0xffff0000 -#define bTxMACHeader 0xffffffff -#define bTxDataInit 0xff -#define bTxHTMode 0x100 -#define bTxDataType 0x30000 -#define bTxRandomSeed 0xffffffff -#define bCCKTxPreamble 0x1 -#define bCCKTxSFD 0xffff0000 -#define bCCKTxSIG 0xff -#define bCCKTxService 0xff00 -#define bCCKLengthExt 0x8000 -#define bCCKTxLength 0xffff0000 -#define bCCKTxCRC16 0xffff -#define bCCKTxStatus 0x1 -#define bOFDMTxStatus 0x2 - -#define IS_BB_REG_OFFSET_92S(_Offset) ((_Offset >= 0x800) && (_Offset <= 0xfff)) - -// 2. Page8(0x800) -#define bRFMOD 0x1 // Reg 0x800 rFPGA0_RFMOD -#define bJapanMode 0x2 -#define bCCKTxSC 0x30 -#define bCCKEn 0x1000000 -#define bOFDMEn 0x2000000 - -#define bOFDMRxADCPhase 0x10000 // Useless now -#define bOFDMTxDACPhase 0x40000 -#define bXATxAGC 0x3f - -#define bAntennaSelect 0x0300 - -#define bXBTxAGC 0xf00 // Reg 80c rFPGA0_TxGainStage -#define bXCTxAGC 0xf000 -#define bXDTxAGC 0xf0000 - -#define bPAStart 0xf0000000 // Useless now -#define bTRStart 0x00f00000 -#define bRFStart 0x0000f000 -#define bBBStart 0x000000f0 -#define bBBCCKStart 0x0000000f -#define bPAEnd 0xf //Reg0x814 -#define bTREnd 0x0f000000 -#define bRFEnd 0x000f0000 -#define bCCAMask 0x000000f0 //T2R -#define bR2RCCAMask 0x00000f00 -#define bHSSI_R2TDelay 0xf8000000 -#define bHSSI_T2RDelay 0xf80000 -#define bContTxHSSI 0x400 //chane gain at continue Tx -#define bIGFromCCK 0x200 -#define bAGCAddress 0x3f -#define bRxHPTx 0x7000 -#define bRxHPT2R 0x38000 -#define bRxHPCCKIni 0xc0000 -#define bAGCTxCode 0xc00000 -#define bAGCRxCode 0x300000 - -#define b3WireDataLength 0x800 // Reg 0x820~84f rFPGA0_XA_HSSIParameter1 -#define b3WireAddressLength 0x400 - -#define b3WireRFPowerDown 0x1 // Useless now -//#define bHWSISelect 0x8 -#define b5GPAPEPolarity 0x40000000 -#define b2GPAPEPolarity 0x80000000 -#define bRFSW_TxDefaultAnt 0x3 -#define bRFSW_TxOptionAnt 0x30 -#define bRFSW_RxDefaultAnt 0x300 -#define bRFSW_RxOptionAnt 0x3000 -#define bRFSI_3WireData 0x1 -#define bRFSI_3WireClock 0x2 -#define bRFSI_3WireLoad 0x4 -#define bRFSI_3WireRW 0x8 -#define bRFSI_3Wire 0xf - -#define bRFSI_RFENV 0x10 // Reg 0x870 rFPGA0_XAB_RFInterfaceSW - -#define bRFSI_TRSW 0x20 // Useless now -#define bRFSI_TRSWB 0x40 -#define bRFSI_ANTSW 0x100 -#define bRFSI_ANTSWB 0x200 -#define bRFSI_PAPE 0x400 -#define bRFSI_PAPE5G 0x800 -#define bBandSelect 0x1 -#define bHTSIG2_GI 0x80 -#define bHTSIG2_Smoothing 0x01 -#define bHTSIG2_Sounding 0x02 -#define bHTSIG2_Aggreaton 0x08 -#define bHTSIG2_STBC 0x30 -#define bHTSIG2_AdvCoding 0x40 -#define bHTSIG2_NumOfHTLTF 0x300 -#define bHTSIG2_CRC8 0x3fc -#define bHTSIG1_MCS 0x7f -#define bHTSIG1_BandWidth 0x80 -#define bHTSIG1_HTLength 0xffff -#define bLSIG_Rate 0xf -#define bLSIG_Reserved 0x10 -#define bLSIG_Length 0x1fffe -#define bLSIG_Parity 0x20 -#define bCCKRxPhase 0x4 - -#define bLSSIReadAddress 0x7f800000 // T65 RF - -#define bLSSIReadEdge 0x80000000 //LSSI "Read" edge signal - -#define bLSSIReadBackData 0xfffff // T65 RF - -#define bLSSIReadOKFlag 0x1000 // Useless now -#define bCCKSampleRate 0x8 //0: 44MHz, 1:88MHz -#define bRegulator0Standby 0x1 -#define bRegulatorPLLStandby 0x2 -#define bRegulator1Standby 0x4 -#define bPLLPowerUp 0x8 -#define bDPLLPowerUp 0x10 -#define bDA10PowerUp 0x20 -#define bAD7PowerUp 0x200 -#define bDA6PowerUp 0x2000 -#define bXtalPowerUp 0x4000 -#define b40MDClkPowerUP 0x8000 -#define bDA6DebugMode 0x20000 -#define bDA6Swing 0x380000 - -#define bADClkPhase 0x4000000 // Reg 0x880 rFPGA0_AnalogParameter1 20/40 CCK support switch 40/80 BB MHZ - -#define b80MClkDelay 0x18000000 // Useless -#define bAFEWatchDogEnable 0x20000000 - -#define bXtalCap01 0xc0000000 // Reg 0x884 rFPGA0_AnalogParameter2 Crystal cap -#define bXtalCap23 0x3 -#define bXtalCap92x 0x0f000000 -#define bXtalCap 0x0f000000 - -#define bIntDifClkEnable 0x400 // Useless -#define bExtSigClkEnable 0x800 -#define bBandgapMbiasPowerUp 0x10000 -#define bAD11SHGain 0xc0000 -#define bAD11InputRange 0x700000 -#define bAD11OPCurrent 0x3800000 -#define bIPathLoopback 0x4000000 -#define bQPathLoopback 0x8000000 -#define bAFELoopback 0x10000000 -#define bDA10Swing 0x7e0 -#define bDA10Reverse 0x800 -#define bDAClkSource 0x1000 -#define bAD7InputRange 0x6000 -#define bAD7Gain 0x38000 -#define bAD7OutputCMMode 0x40000 -#define bAD7InputCMMode 0x380000 -#define bAD7Current 0xc00000 -#define bRegulatorAdjust 0x7000000 -#define bAD11PowerUpAtTx 0x1 -#define bDA10PSAtTx 0x10 -#define bAD11PowerUpAtRx 0x100 -#define bDA10PSAtRx 0x1000 -#define bCCKRxAGCFormat 0x200 -#define bPSDFFTSamplepPoint 0xc000 -#define bPSDAverageNum 0x3000 -#define bIQPathControl 0xc00 -#define bPSDFreq 0x3ff -#define bPSDAntennaPath 0x30 -#define bPSDIQSwitch 0x40 -#define bPSDRxTrigger 0x400000 -#define bPSDTxTrigger 0x80000000 -#define bPSDSineToneScale 0x7f000000 -#define bPSDReport 0xffff - -// 3. Page9(0x900) -#define bOFDMTxSC 0x30000000 // Useless -#define bCCKTxOn 0x1 -#define bOFDMTxOn 0x2 -#define bDebugPage 0xfff //reset debug page and also HWord, LWord -#define bDebugItem 0xff //reset debug page and LWord -#define bAntL 0x10 -#define bAntNonHT 0x100 -#define bAntHT1 0x1000 -#define bAntHT2 0x10000 -#define bAntHT1S1 0x100000 -#define bAntNonHTS1 0x1000000 - -// 4. PageA(0xA00) -#define bCCKBBMode 0x3 // Useless -#define bCCKTxPowerSaving 0x80 -#define bCCKRxPowerSaving 0x40 - -#define bCCKSideBand 0x10 // Reg 0xa00 rCCK0_System 20/40 switch - -#define bCCKScramble 0x8 // Useless -#define bCCKAntDiversity 0x8000 -#define bCCKCarrierRecovery 0x4000 -#define bCCKTxRate 0x3000 -#define bCCKDCCancel 0x0800 -#define bCCKISICancel 0x0400 -#define bCCKMatchFilter 0x0200 -#define bCCKEqualizer 0x0100 -#define bCCKPreambleDetect 0x800000 -#define bCCKFastFalseCCA 0x400000 -#define bCCKChEstStart 0x300000 -#define bCCKCCACount 0x080000 -#define bCCKcs_lim 0x070000 -#define bCCKBistMode 0x80000000 -#define bCCKCCAMask 0x40000000 -#define bCCKTxDACPhase 0x4 -#define bCCKRxADCPhase 0x20000000 //r_rx_clk -#define bCCKr_cp_mode0 0x0100 -#define bCCKTxDCOffset 0xf0 -#define bCCKRxDCOffset 0xf -#define bCCKCCAMode 0xc000 -#define bCCKFalseCS_lim 0x3f00 -#define bCCKCS_ratio 0xc00000 -#define bCCKCorgBit_sel 0x300000 -#define bCCKPD_lim 0x0f0000 -#define bCCKNewCCA 0x80000000 -#define bCCKRxHPofIG 0x8000 -#define bCCKRxIG 0x7f00 -#define bCCKLNAPolarity 0x800000 -#define bCCKRx1stGain 0x7f0000 -#define bCCKRFExtend 0x20000000 //CCK Rx Iinital gain polarity -#define bCCKRxAGCSatLevel 0x1f000000 -#define bCCKRxAGCSatCount 0xe0 -#define bCCKRxRFSettle 0x1f //AGCsamp_dly -#define bCCKFixedRxAGC 0x8000 -//#define bCCKRxAGCFormat 0x4000 //remove to HSSI register 0x824 -#define bCCKAntennaPolarity 0x2000 -#define bCCKTxFilterType 0x0c00 -#define bCCKRxAGCReportType 0x0300 -#define bCCKRxDAGCEn 0x80000000 -#define bCCKRxDAGCPeriod 0x20000000 -#define bCCKRxDAGCSatLevel 0x1f000000 -#define bCCKTimingRecovery 0x800000 -#define bCCKTxC0 0x3f0000 -#define bCCKTxC1 0x3f000000 -#define bCCKTxC2 0x3f -#define bCCKTxC3 0x3f00 -#define bCCKTxC4 0x3f0000 -#define bCCKTxC5 0x3f000000 -#define bCCKTxC6 0x3f -#define bCCKTxC7 0x3f00 -#define bCCKDebugPort 0xff0000 -#define bCCKDACDebug 0x0f000000 -#define bCCKFalseAlarmEnable 0x8000 -#define bCCKFalseAlarmRead 0x4000 -#define bCCKTRSSI 0x7f -#define bCCKRxAGCReport 0xfe -#define bCCKRxReport_AntSel 0x80000000 -#define bCCKRxReport_MFOff 0x40000000 -#define bCCKRxRxReport_SQLoss 0x20000000 -#define bCCKRxReport_Pktloss 0x10000000 -#define bCCKRxReport_Lockedbit 0x08000000 -#define bCCKRxReport_RateError 0x04000000 -#define bCCKRxReport_RxRate 0x03000000 -#define bCCKRxFACounterLower 0xff -#define bCCKRxFACounterUpper 0xff000000 -#define bCCKRxHPAGCStart 0xe000 -#define bCCKRxHPAGCFinal 0x1c00 -#define bCCKRxFalseAlarmEnable 0x8000 -#define bCCKFACounterFreeze 0x4000 -#define bCCKTxPathSel 0x10000000 -#define bCCKDefaultRxPath 0xc000000 -#define bCCKOptionRxPath 0x3000000 - -// 5. PageC(0xC00) -#define bNumOfSTF 0x3 // Useless -#define bShift_L 0xc0 -#define bGI_TH 0xc -#define bRxPathA 0x1 -#define bRxPathB 0x2 -#define bRxPathC 0x4 -#define bRxPathD 0x8 -#define bTxPathA 0x1 -#define bTxPathB 0x2 -#define bTxPathC 0x4 -#define bTxPathD 0x8 -#define bTRSSIFreq 0x200 -#define bADCBackoff 0x3000 -#define bDFIRBackoff 0xc000 -#define bTRSSILatchPhase 0x10000 -#define bRxIDCOffset 0xff -#define bRxQDCOffset 0xff00 -#define bRxDFIRMode 0x1800000 -#define bRxDCNFType 0xe000000 -#define bRXIQImb_A 0x3ff -#define bRXIQImb_B 0xfc00 -#define bRXIQImb_C 0x3f0000 -#define bRXIQImb_D 0xffc00000 -#define bDC_dc_Notch 0x60000 -#define bRxNBINotch 0x1f000000 -#define bPD_TH 0xf -#define bPD_TH_Opt2 0xc000 -#define bPWED_TH 0x700 -#define bIfMF_Win_L 0x800 -#define bPD_Option 0x1000 -#define bMF_Win_L 0xe000 -#define bBW_Search_L 0x30000 -#define bwin_enh_L 0xc0000 -#define bBW_TH 0x700000 -#define bED_TH2 0x3800000 -#define bBW_option 0x4000000 -#define bRatio_TH 0x18000000 -#define bWindow_L 0xe0000000 -#define bSBD_Option 0x1 -#define bFrame_TH 0x1c -#define bFS_Option 0x60 -#define bDC_Slope_check 0x80 -#define bFGuard_Counter_DC_L 0xe00 -#define bFrame_Weight_Short 0x7000 -#define bSub_Tune 0xe00000 -#define bFrame_DC_Length 0xe000000 -#define bSBD_start_offset 0x30000000 -#define bFrame_TH_2 0x7 -#define bFrame_GI2_TH 0x38 -#define bGI2_Sync_en 0x40 -#define bSarch_Short_Early 0x300 -#define bSarch_Short_Late 0xc00 -#define bSarch_GI2_Late 0x70000 -#define bCFOAntSum 0x1 -#define bCFOAcc 0x2 -#define bCFOStartOffset 0xc -#define bCFOLookBack 0x70 -#define bCFOSumWeight 0x80 -#define bDAGCEnable 0x10000 -#define bTXIQImb_A 0x3ff -#define bTXIQImb_B 0xfc00 -#define bTXIQImb_C 0x3f0000 -#define bTXIQImb_D 0xffc00000 -#define bTxIDCOffset 0xff -#define bTxQDCOffset 0xff00 -#define bTxDFIRMode 0x10000 -#define bTxPesudoNoiseOn 0x4000000 -#define bTxPesudoNoise_A 0xff -#define bTxPesudoNoise_B 0xff00 -#define bTxPesudoNoise_C 0xff0000 -#define bTxPesudoNoise_D 0xff000000 -#define bCCADropOption 0x20000 -#define bCCADropThres 0xfff00000 -#define bEDCCA_H 0xf -#define bEDCCA_L 0xf0 -#define bLambda_ED 0x300 -#define bRxInitialGain 0x7f -#define bRxAntDivEn 0x80 -#define bRxAGCAddressForLNA 0x7f00 -#define bRxHighPowerFlow 0x8000 -#define bRxAGCFreezeThres 0xc0000 -#define bRxFreezeStep_AGC1 0x300000 -#define bRxFreezeStep_AGC2 0xc00000 -#define bRxFreezeStep_AGC3 0x3000000 -#define bRxFreezeStep_AGC0 0xc000000 -#define bRxRssi_Cmp_En 0x10000000 -#define bRxQuickAGCEn 0x20000000 -#define bRxAGCFreezeThresMode 0x40000000 -#define bRxOverFlowCheckType 0x80000000 -#define bRxAGCShift 0x7f -#define bTRSW_Tri_Only 0x80 -#define bPowerThres 0x300 -#define bRxAGCEn 0x1 -#define bRxAGCTogetherEn 0x2 -#define bRxAGCMin 0x4 -#define bRxHP_Ini 0x7 -#define bRxHP_TRLNA 0x70 -#define bRxHP_RSSI 0x700 -#define bRxHP_BBP1 0x7000 -#define bRxHP_BBP2 0x70000 -#define bRxHP_BBP3 0x700000 -#define bRSSI_H 0x7f0000 //the threshold for high power -#define bRSSI_Gen 0x7f000000 //the threshold for ant diversity -#define bRxSettle_TRSW 0x7 -#define bRxSettle_LNA 0x38 -#define bRxSettle_RSSI 0x1c0 -#define bRxSettle_BBP 0xe00 -#define bRxSettle_RxHP 0x7000 -#define bRxSettle_AntSW_RSSI 0x38000 -#define bRxSettle_AntSW 0xc0000 -#define bRxProcessTime_DAGC 0x300000 -#define bRxSettle_HSSI 0x400000 -#define bRxProcessTime_BBPPW 0x800000 -#define bRxAntennaPowerShift 0x3000000 -#define bRSSITableSelect 0xc000000 -#define bRxHP_Final 0x7000000 -#define bRxHTSettle_BBP 0x7 -#define bRxHTSettle_HSSI 0x8 -#define bRxHTSettle_RxHP 0x70 -#define bRxHTSettle_BBPPW 0x80 -#define bRxHTSettle_Idle 0x300 -#define bRxHTSettle_Reserved 0x1c00 -#define bRxHTRxHPEn 0x8000 -#define bRxHTAGCFreezeThres 0x30000 -#define bRxHTAGCTogetherEn 0x40000 -#define bRxHTAGCMin 0x80000 -#define bRxHTAGCEn 0x100000 -#define bRxHTDAGCEn 0x200000 -#define bRxHTRxHP_BBP 0x1c00000 -#define bRxHTRxHP_Final 0xe0000000 -#define bRxPWRatioTH 0x3 -#define bRxPWRatioEn 0x4 -#define bRxMFHold 0x3800 -#define bRxPD_Delay_TH1 0x38 -#define bRxPD_Delay_TH2 0x1c0 -#define bRxPD_DC_COUNT_MAX 0x600 -//#define bRxMF_Hold 0x3800 -#define bRxPD_Delay_TH 0x8000 -#define bRxProcess_Delay 0xf0000 -#define bRxSearchrange_GI2_Early 0x700000 -#define bRxFrame_Guard_Counter_L 0x3800000 -#define bRxSGI_Guard_L 0xc000000 -#define bRxSGI_Search_L 0x30000000 -#define bRxSGI_TH 0xc0000000 -#define bDFSCnt0 0xff -#define bDFSCnt1 0xff00 -#define bDFSFlag 0xf0000 -#define bMFWeightSum 0x300000 -#define bMinIdxTH 0x7f000000 -#define bDAFormat 0x40000 -#define bTxChEmuEnable 0x01000000 -#define bTRSWIsolation_A 0x7f -#define bTRSWIsolation_B 0x7f00 -#define bTRSWIsolation_C 0x7f0000 -#define bTRSWIsolation_D 0x7f000000 -#define bExtLNAGain 0x7c00 - -// 6. PageE(0xE00) -#define bSTBCEn 0x4 // Useless -#define bAntennaMapping 0x10 -#define bNss 0x20 -#define bCFOAntSumD 0x200 -#define bPHYCounterReset 0x8000000 -#define bCFOReportGet 0x4000000 -#define bOFDMContinueTx 0x10000000 -#define bOFDMSingleCarrier 0x20000000 -#define bOFDMSingleTone 0x40000000 -//#define bRxPath1 0x01 -//#define bRxPath2 0x02 -//#define bRxPath3 0x04 -//#define bRxPath4 0x08 -//#define bTxPath1 0x10 -//#define bTxPath2 0x20 -#define bHTDetect 0x100 -#define bCFOEn 0x10000 -#define bCFOValue 0xfff00000 -#define bSigTone_Re 0x3f -#define bSigTone_Im 0x7f00 -#define bCounter_CCA 0xffff -#define bCounter_ParityFail 0xffff0000 -#define bCounter_RateIllegal 0xffff -#define bCounter_CRC8Fail 0xffff0000 -#define bCounter_MCSNoSupport 0xffff -#define bCounter_FastSync 0xffff -#define bShortCFO 0xfff -#define bShortCFOTLength 12 //total -#define bShortCFOFLength 11 //fraction -#define bLongCFO 0x7ff -#define bLongCFOTLength 11 -#define bLongCFOFLength 11 -#define bTailCFO 0x1fff -#define bTailCFOTLength 13 -#define bTailCFOFLength 12 -#define bmax_en_pwdB 0xffff -#define bCC_power_dB 0xffff0000 -#define bnoise_pwdB 0xffff -#define bPowerMeasTLength 10 -#define bPowerMeasFLength 3 -#define bRx_HT_BW 0x1 -#define bRxSC 0x6 -#define bRx_HT 0x8 -#define bNB_intf_det_on 0x1 -#define bIntf_win_len_cfg 0x30 -#define bNB_Intf_TH_cfg 0x1c0 -#define bRFGain 0x3f -#define bTableSel 0x40 -#define bTRSW 0x80 -#define bRxSNR_A 0xff -#define bRxSNR_B 0xff00 -#define bRxSNR_C 0xff0000 -#define bRxSNR_D 0xff000000 -#define bSNREVMTLength 8 -#define bSNREVMFLength 1 -#define bCSI1st 0xff -#define bCSI2nd 0xff00 -#define bRxEVM1st 0xff0000 -#define bRxEVM2nd 0xff000000 -#define bSIGEVM 0xff -#define bPWDB 0xff00 -#define bSGIEN 0x10000 - -/*--------------------------Define Parameters-------------------------------*/ - - -#endif //__INC_HAL8188EPHYREG_H - diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BPwrSeq.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BPwrSeq.h deleted file mode 100644 index f570e384..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BPwrSeq.h +++ /dev/null @@ -1,183 +0,0 @@ -#ifndef REALTEK_POWER_SEQUENCE_8723B -#define REALTEK_POWER_SEQUENCE_8723B - - -/* - Check document WM-20150115-JackieLau-RTL8723B_Power_Architecture v10.vsd - There are 6 HW Power States: - 0: POFF--Power Off - 1: PDN--Power Down - 2: CARDEMU--Card Emulation - 3: ACT--Active Mode - 4: LPS--Low Power State - 5: SUS--Suspend - - The transision from different states are defined below - TRANS_CARDEMU_TO_ACT - TRANS_ACT_TO_CARDEMU - TRANS_CARDEMU_TO_SUS - TRANS_SUS_TO_CARDEMU - TRANS_CARDEMU_TO_PDN - TRANS_ACT_TO_LPS - TRANS_LPS_TO_ACT - - TRANS_END -*/ -#define RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS 25 -#define RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS 15 -#define RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS 15 -#define RTL8723B_TRANS_SUS_TO_CARDEMU_STEPS 15 -#define RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS 15 -#define RTL8723B_TRANS_PDN_TO_CARDEMU_STEPS 15 -#define RTL8723B_TRANS_ACT_TO_LPS_STEPS 15 -#define RTL8723B_TRANS_LPS_TO_ACT_STEPS 15 -#define RTL8723B_TRANS_END_STEPS 1 - - -#define RTL8723B_TRANS_CARDEMU_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0}, /*0x20[0] = 1b'1 enable LDOA12 MACRO block for all interface*/ \ - {0x0067, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x67[0] = 0 to disable BT_GPS_SEL pins*/ \ - {0x0001, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 1, PWRSEQ_DELAY_MS},/*Delay 1ms*/ \ - {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, 0}, /*0x00[5] = 1b'0 release analog Ips to digital ,1:isolation*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT4|BIT3|BIT2), 0},/* disable SW LPS 0x04[10]=0 and WLSUS_EN 0x04[11]=0*/ \ - {0x0075, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0 , BIT0},/* Disable USB suspend */ \ - {0x0004, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 , BIT3},/* enabled usb resume */ \ - {0x0004, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 , 0},/* disable usb resume */ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, BIT1},/* wait till 0x04[17] = 1 power ready*/ \ - {0x0075, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0 , 0},/* Enable USB suspend */ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* release WLON reset 0x04[16]=1*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* disable HWPDN 0x04[15]=0*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, (BIT4|BIT3), 0},/* disable WL suspend*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* polling until return 0*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT0, 0},/**/ \ - {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, BIT6},/* Enable WL control XTAL setting*/ \ - {0x0068, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3, 0},/* RF HW Power down disabled*/ \ - {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable falling edge triggering interrupt*/\ - {0x0063, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable GPIO9 interrupt mode*/\ - {0x0062, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Enable GPIO9 input mode*/\ - {0x0058, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/*Enable HSISR GPIO[C:0] interrupt*/\ - {0x005A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1},/*Enable HSISR GPIO9 interrupt*/\ - {0x0069, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, BIT6},/*For GPIO9 internal pull high setting*/\ - - -#define RTL8723B_TRANS_ACT_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x001F, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*0x1F[7:0] = 0 turn off RF*/ \ - {0x0049, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Enable rising edge triggering interrupt*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, BIT0},/* release WLON reset 0x04[16]=1*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*0x04[9] = 1 turn off MAC by HW state machine*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT1, 0}, /*wait till 0x04[9] = 0 polling until return 0 to disable*/ \ - {0x0010, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6, 0},/* Enable BT control XTAL setting*/\ - {0x0000, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5}, /*0x00[5] = 1b'1 analog Ips to digital ,1:isolation*/ \ - {0x0020, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x20[0] = 1b'0 disable LDOA12 MACRO block*/\ - - -#define RTL8723B_TRANS_CARDEMU_TO_SUS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4|BIT3, (BIT4|BIT3)}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SDIO SOP option to disable BG/MB/ACK/SWR*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3|BIT4}, /*0x04[12:11] = 2b'11 enable WL suspend for PCIe*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/ - -#define RTL8723B_TRANS_SUS_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/ - -#define RTL8723B_TRANS_CARDEMU_TO_CARDDIS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07=0x20 , SOP option to disable BG/MB*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK|PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, BIT3}, /*0x04[12:11] = 2b'01 enable WL suspend*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT2, BIT2}, /*0x04[10] = 1, enable SW LPS*/ \ - {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 1}, /*0x48[16] = 1 to enable GPIO9 as EXT WAKEUP*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, BIT0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, 0}, /*wait power state to suspend*/ - -#define RTL8723B_TRANS_CARDDIS_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3 | BIT7, 0}, /*clear suspend enable and power down enable*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, BIT0, 0}, /*Set SDIO suspend local register*/ \ - {0x0086, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_POLLING, BIT1, BIT1}, /*wait power state to suspend*/\ - {0x004A, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0}, /*0x48[16] = 0 to disable GPIO9 as EXT WAKEUP*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT3|BIT4, 0}, /*0x04[12:11] = 2b'01enable WL suspend*/\ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*0x23[4] = 1b'0 12H LDO enter normal mode*/ \ - {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0},/*PCIe DMA start*/ - - -#define RTL8723B_TRANS_CARDEMU_TO_PDN \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0023, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, BIT4}, /*0x23[4] = 1b'1 12H LDO enter sleep mode*/ \ - {0x0007, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK|PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x20}, /*0x07[7:0] = 0x20 SOP option to disable BG/MB/ACK/SWR*/ \ - {0x0006, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/* 0x04[16] = 0*/\ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, BIT7},/* 0x04[15] = 1*/ - -#define RTL8723B_TRANS_PDN_TO_CARDEMU \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0005, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT7, 0},/* 0x04[15] = 0*/ - -#define RTL8723B_TRANS_ACT_TO_LPS \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0301, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*PCIe DMA stop*/ \ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF},/*Tx Pause*/ \ - {0x05F8, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05F9, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05FA, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x05FB, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, 0xFF, 0},/*Should be zero if no packet is transmitting*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT0, 0},/*CCK and OFDM are disabled,and clock are gated*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_US},/*Delay 1us*/ \ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*Whole BB is reset*/ \ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x03},/*Reset MAC TRX*/ \ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, 0},/*check if removed later*/ \ - {0x0093, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x00},/*When driver enter Sus/ Disable, enable LOP for BT*/ \ - {0x0553, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT5, BIT5},/*Respond TxOK to scheduler*/ \ - - -#define RTL8723B_TRANS_LPS_TO_ACT \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0x0080, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_SDIO_MSK,PWR_BASEADDR_SDIO,PWR_CMD_WRITE, 0xFF, 0x84}, /*SDIO RPWM*/\ - {0xFE58, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_USB_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*USB RPWM*/\ - {0x0361, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_PCI_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0x84}, /*PCIe RPWM*/\ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_DELAY, 0, PWRSEQ_DELAY_MS}, /*Delay*/\ - {0x0008, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT4, 0}, /*. 0x08[4] = 0 switch TSF to 40M*/\ - {0x0109, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_POLLING, BIT7, 0}, /*Polling 0x109[7]=0 TSF in 40M*/\ - {0x0029, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT6|BIT7, 0}, /*. 0x29[7:6] = 2b'00 enable BB clock*/\ - {0x0101, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1, BIT1}, /*. 0x101[1] = 1*/\ - {0x0100, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0xFF}, /*. 0x100[7:0] = 0xFF enable WMAC TRX*/\ - {0x0002, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, BIT1|BIT0, BIT1|BIT0}, /*. 0x02[1:0] = 2b'11 enable BB macro*/\ - {0x0522, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,PWR_BASEADDR_MAC,PWR_CMD_WRITE, 0xFF, 0}, /*. 0x522 = 0*/ - -#define RTL8723B_TRANS_END \ - /* format */ \ - /* { offset, cut_msk, fab_msk|interface_msk, base|cmd, msk, value }, // comments here*/ \ - {0xFFFF, PWR_CUT_ALL_MSK, PWR_FAB_ALL_MSK, PWR_INTF_ALL_MSK,0,PWR_CMD_END, 0, 0}, // - - -extern WLAN_PWR_CFG rtl8723B_power_on_flow[RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_radio_off_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_card_disable_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_card_enable_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_suspend_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_SUS_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_resume_flow[RTL8723B_TRANS_SUS_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_hwpdn_flow[RTL8723B_TRANS_ACT_TO_CARDEMU_STEPS+RTL8723B_TRANS_CARDEMU_TO_PDN_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_enter_lps_flow[RTL8723B_TRANS_ACT_TO_LPS_STEPS+RTL8723B_TRANS_END_STEPS]; -extern WLAN_PWR_CFG rtl8723B_leave_lps_flow[RTL8723B_TRANS_LPS_TO_ACT_STEPS+RTL8723B_TRANS_END_STEPS]; - -#endif diff --git a/network/wlan/WDI/HAL/rtl8723B/Hal8723BRf.h b/network/wlan/WDI/HAL/rtl8723B/Hal8723BRf.h deleted file mode 100644 index a06a299b..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/Hal8723BRf.h +++ /dev/null @@ -1,54 +0,0 @@ -/****************************************************************************** - * - * (c) Copyright 2008, RealTEK Technologies Inc. All Rights Reserved. - * - * Module: HalRf.h ( Header File) - * - * Note: Collect every HAL RF type exter API or constant. - * - * Function: - * - * Export: - * - * Abbrev: - * - * History: - * Data Who Remark - * - * 09/25/2008 MHC Create initial version. - * - * -******************************************************************************/ -/* Check to see if the file has been included already. */ - - -/*--------------------------Define Parameters-------------------------------*/ - -// -// For RF 6052 Series -// -/*--------------------------Define Parameters-------------------------------*/ - -/*------------------------------Define structure----------------------------*/ - -/*------------------------------Define structure----------------------------*/ - - -/*------------------------Export global variable----------------------------*/ - -/*------------------------Export Marco Definition---------------------------*/ - - -// -// RF RL6052 Series API -// -void PHY_RF6052SetBandwidth8723B( - IN PADAPTER Adapter, - IN CHANNEL_WIDTH Bandwidth); - -RT_STATUS PHY_RF6052_Config_8723B( IN PADAPTER Adapter ); - -/*--------------------------Exported Function prototype---------------------*/ - - -/* End of HalRf.h */ diff --git a/network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioDef.h b/network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioDef.h deleted file mode 100644 index 74726b90..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioDef.h +++ /dev/null @@ -1,426 +0,0 @@ -#ifndef __INC_HAL8723BSDIODEF_H -#define __INC_HAL8723BSDIODEF_H - - -/*--------------------------Define MACRO--------------------------------------*/ - -extern u1Byte DescString8723BSdio[]; -extern EEPROM_OFFSET EEPROMOffset8723BSdio; - -extern u1Byte DescString8192ESdio[]; -extern EEPROM_OFFSET EEPROMOffset8192ESdio; - -#define DRIVER_EARLY_INT_TIME_8723B 0x05 - -#define HAL92CSDIO_DEFAULT_BEACON_TYPE BEACON_SEND_AUTO_HW - -#define SDIO_8723B_DUMMY_UNIT 8 -#define SDIO_8723B_DUMMY_OFFSET 1 -#define SDIO_8723B_ALL_DUMMY_LENGTH SDIO_8723B_DUMMY_OFFSET * SDIO_8723B_DUMMY_UNIT -#define HWDESC_HEADER_LEN_SDIO_8812 40 -#define SDIO_8723B_HWDESC_HEADER_LEN (HWDESC_HEADER_LEN_SDIO_8812 + SDIO_8723B_ALL_DUMMY_LENGTH) // 8byte dummy - -#define MAX_RX_DMA_BUFFER_SIZE_8812 0x3E80 -#define MAX_RX_DMA_BUFFER_SIZE_8723B 0x2800 // RX 10K - -#define TX_TOTAL_PAGE_NUMBER_8723B 0xF3 // TX 32K - -#define TX_PAGE_BOUNDARY_8723B (TX_TOTAL_PAGE_NUMBER_8723B + 1) -#define TX_PAGE_BOUNDARY_WOWLAN_8723B 0xE0 - -// For Normal Chip Setting -// (HPQ + LPQ + NPQ + PUBQ) shall be TX_TOTAL_PAGE_NUMBER -#define NORMAL_PAGE_NUM_PUBQ_8723B 0xC2 //0xD9 -#define NORMAL_PAGE_NUM_LPQ_8723B 0x08 //0x0d -#define NORMAL_PAGE_NUM_HPQ_8723B 0x08 //0x0d -#define NORMAL_PAGE_NUM_NPQ_8723B 0x20 //0x00 - - -//Note: For WMM Normal Chip Setting ,modify later -#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B TX_PAGE_BOUNDARY_8723B -#define WMM_NORMAL_TX_PAGE_BOUNDARY_8723B (WMM_NORMAL_TX_TOTAL_PAGE_NUMBER_8723B + 1) - -#define WMM_NORMAL_PAGE_NUM_PUBQ_8723B NORMAL_PAGE_NUM_PUBQ_8723B -#define WMM_NORMAL_PAGE_NUM_HPQ_8723B NORMAL_PAGE_NUM_HPQ_8723B -#define WMM_NORMAL_PAGE_NUM_LPQ_8723B NORMAL_PAGE_NUM_LPQ_8723B -#define WMM_NORMAL_PAGE_NUM_NPQ_8723B NORMAL_PAGE_NUM_NPQ_8723B - -// RQPN setting for WoWLAN -#define WOWLAN_NORMAL_PAGE_NUM_NPQ_8723B 0x03 -#define WOWLAN_RSVD_QUEUE_PAGE_NUM_8723B 0x80c20d0d - -#define TX_SELE_HQ BIT(0) // High Queue -#define TX_SELE_LQ BIT(1) // Low Queue -#define TX_SELE_NQ BIT(2) // Normal Queue - -#define RX_PAGE_SIZE_REG_VALUE PBP_128 -#define BCN_DMA_ATIME_INT_TIME 0x02 - - -#endif // #ifndef __INC_HAL8723BSDIODEF_H - -VOID -DumpHardwareProfile8723BSdio( - IN PADAPTER Adapter - ); - -VOID -DisableInterrupt8723BSdio ( - IN PADAPTER Adapter - ); - -VOID -ClearInterrupt8723BSdio( - IN PADAPTER Adapter - ); - -VOID -ClearSysInterrupt8723BSdio( - IN PADAPTER Adapter - ); - -VOID -InitInterrupt8723BSdio( - IN PADAPTER Adapter - ); - -VOID -InitSysInterrupt8723BSdio( - IN PADAPTER Adapter - ); - -VOID -EnableInterrupt8723BSdio( - IN PADAPTER Adapter - ); - -VOID -DumpLoggedInterruptHistory8723BSdio( - PADAPTER Adapter - ); - -BOOLEAN -InterruptRecognized8723BSdio( - IN PADAPTER Adapter, - IN PVOID pContent, - IN u4Byte ContentLen - ); - -//1====================================================== -// Tx Related -// Function prototypes for Hal8190PciGen.c -//1====================================================== - -VOID -InitializeVariables8723BSdio( - IN PADAPTER Adapter - ); - -VOID -DeInitializeVariables8723BSdio( - IN PADAPTER Adapter - ); - -VOID -CancelAllTimer8723BSdio( - IN PADAPTER Adapter - ); - -VOID -ReleaseAllTimer8723BSdio( - PADAPTER Adapter - ); - -VOID -HalSdioUpdateDefSet8723BS( - IN PADAPTER pAdapter - ); - -BOOLEAN -HalSdioSetQueueMapping8723BSdio( - IN PADAPTER pAdapter, - IN u1Byte NumIn, - IN u1Byte NumOut - ); - -VOID -GetInitialRQPValue8723BS( - IN PADAPTER Adapter, - OUT pu2Byte pNPQRQPNVaule, - OUT pu4Byte pRQPNValue - ); - -u1Byte -GetInitialTxBufferBoundary8723BS( - IN PADAPTER Adapter - ); - -RT_STATUS -InitializeAdapter8723BSdio( - IN PADAPTER Adapter, - IN u1Byte Channel - ); - -RT_STATUS -ReadAdapterInfo8723BS( - IN PADAPTER Adapter - ); - -VOID -FillH2CCmd8723BSdioWorkItemCallback( - IN PVOID pContext - ); - -VOID -FillH2CCmd8723BSdioTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -HaltAdapter8723BSdio( - IN PADAPTER Adapter, - IN BOOLEAN bReset - ); - -VOID -SleepAdapter8723BSdio( - IN PADAPTER Adapter - ); - -VOID -ShutdownAdapter8723BSdio( - IN PADAPTER Adapter, - IN BOOLEAN bReset - ); - -VOID -SetHwReg8723BSdio( - IN PADAPTER pAdapter, - IN u1Byte variable, - IN pu1Byte val - ); - -VOID -GetHwReg8723BSdio( - IN PADAPTER Adapter, - IN u1Byte variable, - OUT pu1Byte val - ); - -BOOLEAN -GetHalDefVar8723BSdio( - IN PADAPTER Adapter, - IN HAL_DEF_VARIABLE eVariable, - IN PVOID pValue - ); - -BOOLEAN -GetInterrupt8723BSdio( - IN PADAPTER pAdapter, - IN HAL_INT_TYPE intType - ); - -BOOLEAN -SetHalDefVar8723BSdio( - IN PADAPTER Adapter, - IN HAL_DEF_VARIABLE eVariable, - IN PVOID pValue - ); - -VOID -ActSetWirelessMode8723BSdio( - PADAPTER pAdapter, - u2Byte btWirelessMode - ); - -VOID -SetBeaconRelatedRegisters8723BSdio( - IN PADAPTER Adapter, - IN PVOID pOpMode, - IN u2Byte BcnInterval, - IN u2Byte AtimWindow - ); - -VOID -ResetAllHWTimer8723BSdio( - IN PADAPTER Adapter - ); - -VOID -UpdateLPSStatus8723BSdio( - IN PADAPTER Adapter, - IN u1Byte RegLeisurePsMode, - IN u1Byte RegPowerSaveMode - ); - -VOID -UpdateIPSStatus8723BSdio( - IN PADAPTER Adapter, - IN u1Byte RegInactivePsMode - ); - -VOID -EnableHWSecurityConfig8723BSdio( - IN PADAPTER Adapter - ); - -VOID -DisableHWSecurityConfig8723BSdio( - IN PADAPTER Adapter - ); - -VOID -SetKey8723BSdio( - IN PADAPTER Adapter, - IN u4Byte KeyIndex, - IN pu1Byte pMacAddr, - IN BOOLEAN IsGroup, - IN u4Byte EncAlgo, - IN BOOLEAN IsWEPKey, //if OID = OID_802_11_WEP - IN BOOLEAN ClearAll - ); - -VOID -TxFillCmdDesc8723BSdio( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN u1Byte QueueIndex, - IN u2Byte index, - IN BOOLEAN bFirstSeg, - IN BOOLEAN bLastSeg, - IN pu1Byte VirtualAddress, - IN u4Byte PhyAddressLow, - IN u4Byte BufferLen, - IN u4Byte DescPacketType, - IN u4Byte PktLen - ); - -VOID -TxFillDescriptor8723BSdio( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN u2Byte nBufIndex, - IN u2Byte nFragIndex, - IN u2Byte nFragBufferIndex, - IN u2Byte nCurDesc - ); - -VOID -AllowAllDestAddr8723BSdio( - IN PADAPTER Adapter, - IN BOOLEAN bAllowAllDA, - IN BOOLEAN WriteIntoReg - ); - -VOID -AllowErrorPacket8723BSdio( - IN PADAPTER Adapter, - IN BOOLEAN bAllowErrPkt, - IN BOOLEAN WriteIntoReg - ); - -VOID -QueryRxDescStatus8723BSdio( - IN PADAPTER Adapter, - IN PVOID pDescIn, - IN OUT PRT_RFD pRfd - ); - -u4Byte -GetRxPacketShiftBytes8723BSdio( - IN PRT_RFD pRfd - ); - -BOOLEAN -HalQueryRxDMARequest8723BSdio( - IN PADAPTER Adapter, - OUT pu2Byte pRxReqLength - ); - -BOOLEAN -GetNmodeSupportBySecCfg8723BSdio( - IN PADAPTER Adapter - ); - -VOID -GPIOCheckPBC8723BSdio( - IN PADAPTER pAdapter - ); - -VOID -GpioDetectTimerStart8723BSdio( - IN PADAPTER Adapter -); - -VOID -SetRTSRateWorkItemCallback_8723BS( - IN PVOID pContext - ); - -VOID -HalSdioGetCmdAddr8723BSdio( - IN PADAPTER pAdapter, - IN u1Byte DeviceID, - IN u4Byte Addr, - OUT pu4Byte pCmdAddr - ); - -VOID -HalRxAggr8723BSdio( - IN PADAPTER Adapter, - IN BOOLEAN Value - ); - -BOOLEAN -HalQueryTxBufferStatus8723BSdio( - IN PADAPTER Adapter - ); - -BOOLEAN -HalQueryTxBufferAvailable8723BSdio( - IN PADAPTER Adapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -BOOLEAN -HalSdioRxHandleInterrupt8723BSdio( - IN PADAPTER pAdapter - ); - -VOID -HalDropRxFIFO8723BSdio( - IN PADAPTER Adapter - ); - -VOID -HalDownloadRSVDPage8723BS( - IN PADAPTER Adapter - ); - -VOID -ResetHalRATRTable8723BSdio( - PADAPTER Adapter - ); - -VOID -HandleH2CJoinBssRptWorkItemCallback_8723BS( - IN PVOID pContext -); - -BOOLEAN -CheckCPWMInterrupt8723BS( - IN PADAPTER Adapter - ); - -BOOLEAN -HalSdioIoRegCmd52Available8723BS( - IN PADAPTER Adapter, - IN u4Byte offset - ); - -RT_STATUS -HalSetRsvdPageBndy8723BS( - IN PADAPTER Adapter, - IN u1Byte RQPNType - ); - diff --git a/network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioLed.h b/network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioLed.h deleted file mode 100644 index 210efaae..00000000 --- a/network/wlan/WDI/HAL/rtl8723B/rtl8723bs/Hal8723BSdioLed.h +++ /dev/null @@ -1,41 +0,0 @@ -#ifndef __INC_HAL8723BSDIOLED_H -#define __INC_HAL8723BSDIOLED_H -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - Hal8192CUsbLed.h - -Abstract: - LED related data structure and interface to manipulate LED. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2006-12-27 Rcnjko Create. - ---*/ - -//================================================================================ -// Interface to manipulate LED objects. -//================================================================================ - -VOID -SwLedOn_8723B( - IN PADAPTER Adapter, - IN PLED_SDIO pLed -); - -VOID -SwLedOff_8723B( - IN PADAPTER Adapter, - IN PLED_SDIO pLed -); - -VOID -SwLedInit_8723BS( - IN PADAPTER Adapter -); - -#endif - diff --git a/network/wlan/WDI/HAL/sources.list.WlanS b/network/wlan/WDI/HAL/sources.list.WlanS deleted file mode 100644 index 7a656f97..00000000 --- a/network/wlan/WDI/HAL/sources.list.WlanS +++ /dev/null @@ -1,178 +0,0 @@ -// -// Command: +(OS, ...) -(OS, ...) [FILE] -// //: Comment at the beginning -// OS: * Ebd6 Ebd7 WinXP Vista Win7 Win8 WinBlue -// +: Add for OS -// -: Remove for OS -// - -+(*) [..\HalEEPROM.c] -+(*) [..\HalCommon.c] -+(*) [..\HalCam.c] -+(*) [..\HalSdio.c] -+(*) [..\HalFw.c] -+(*) [..\HalSIC.c] -+(*) [..\HalPwrSeqCmd.c] -+(*) [..\HalPhy.c] -+(*) [..\HalDM.c] -+(*) [..\HalPowerSave.c] -+(*) [..\HalTxFeedback.c] -+(*) [..\HalMacID.c] -+(*) [..\HalWoWLAN.c] -+(*) [..\HalH2cIOCmd.c] -+(*) [..\HalComLed.c] -+(*) [..\HalSDIOLed.c] -+(*) [..\HalComTxDesc.c] -+(*) [..\HalComRxDesc.c] -+(*) [..\HalComPhyCfg.c] -+(*) [..\HalComTxPwrCfg.c] -+(*) [..\HalComTxPwrLmtCfg.c] -+(*) [..\HalADCSampling.c] -+(*) [..\HalEfuse.c] -+(*) [Hal8723BEfuse.c] -+(*) [Hal8723BDesc.c] -+(*) [Hal8723BSdioTxDesc.c] -+(*) [Hal8723BSdioRxDesc.c] -+(*) [Hal8723BSdioLed.c] - -+(*) [Hal8723BPhyCfg.c] -+(*) [Hal8723BCom.c] - -+(*) [Hal8723BFirmware.c] -+(*) [Hal8723BRf6052.c] -+(*) [Hal8723BSdioGen.c] -+(*) [Hal8723BSdioIsr.c] -+(*) [Hal8723BPwrSeq.c] - -+(*) [HalPhyRf_WIN.c] -+(*) [phydm_interface.c] -+(*) [phydm_debug.c] -+(*) [phydm_HWConfig.c] -//+(*) [phydm_RTL8188E.c] -//+(*) [phydm_RTL8192E.c] -//+(*) [phydm_RTL8814A.c] -+(*) [phydm_RTL8723B.c] -//+(*) [phydm_RTL8822B.c] -//+(*) [phydm_RTL8188F.c] -//+(*) [phydm_rtl8723d.c] -+(*) [phydm.c] -+(*) [phydm_DIG.c] -+(*) [phydm_PathDiv.c] -+(*) [phydm_EdcaTurboCheck.c] -+(*) [phydm_DynamicBBPowerSaving.c] -+(*) [phydm_PowerTracking_WIN.c] -+(*) [phydm_DynamicTxPower.c] -+(*) [phydm_RaInfo.c] -+(*) [phydm_AntDiv.c] -+(*) [phydm_AntDect.c] -+(*) [phydm_CfoTracking.c] -+(*) [phydm_ACS.c] -+(*) [phydm_RXHP.c] -+(*) [PhyDM_Adaptivity.c] -//+(*) [PhyDM_IQK_8821A_WIN.c] -//+(*) [PhyDM_IQK_8814A.c] -//+(*) [PhyDM_IQK_8822b.c] -//+(*) [phydm_Beamforming.c] -//+(*) [HalTxbfJaguar.c] -//+(*) [HalTxbf8192E.c] -//+(*) [HalTxbf8814A.c] -//+(*) [HalTxbf8821B.c] -//+(*) [haltxbf8822b.c] -//+(*) [HalTxbfinterface.c] -//+(*) [HalComTxbf.c] - -//+(*) [HalPhyRf_8188e_WIN.c] -//+(*) [HalPhyRf_8192e_WIN.c] -//+(*) [HalPhyRf_8814a_WIN.c] -//+(*) [HalPhyRf_8812A_WIN.c] -//+(*) [HalPhyRf_8821A_WIN.c] -+(*) [HalPhyRf_8723B_WIN.c] -//+(*) [HalPhyRf_8703B.c] -//+(*) [halphyrf_8822b.c] -//+(*) [HalPhyRf_8188F.c] -//+(*) [HalPhyRf_8723D.c] - - -//+(*) [HalPhyRf_8821B.c] - -//+(*) [Hal8188ERateAdaptive.c] -//+(*) [HalHWImg8188E_MAC.c] -//+(*) [HalHWImg8188E_RF.c] -//+(*) [HalHWImg8188E_BB.c] -//+(*) [HalHWImg8188E_T_FW.c] -//+(*) [HalHWImg8188E_S_FW.c] -//+(*) [phydm_RegConfig8188E.c] -//+(*) [HalHWImg8812A_MAC.c] -//+(*) [HalHWImg8812A_RF.c] -//+(*) [HalHWImg8812A_BB.c] -//+(*) [HalHWImg8812A_FW.c] -//+(*) [phydm_RegConfig8812A.c] -//+(*) [phydm_RTL8812A.c] -//+(*) [HalHWImg8821A_MAC.c] -//+(*) [HalHWImg8821A_BB.c] -//+(*) [HalHWImg8821A_RF.c] -//+(*) [HalHWImg8821A_FW.c] -//+(*) [phydm_RTL8821A.c] -//+(*) [phydm_RegConfig8821A.c] -//+(*) [HalHWImg8192E_FW.c] -//+(*) [HalHWImg8192E_MAC.c] -//+(*) [HalHWImg8192E_RF.c] -//+(*) [HalHWImg8192E_BB.c] -//+(*) [phydm_RegConfig8192E.c] -//+(*) [HalHWImg8723D_FW.c] -//+(*) [HalHWImg8723D_MAC.c] -//+(*) [HalHWImg8723D_RF.c] -//+(*) [HalHWImg8723D_BB.c] -//+(*) [phydm_RegConfig8723D.c] - -//+(*) [HalHWImg8821B_FW.c] -//+(*) [HalHWImg8821B_MAC.c] -//+(*) [HalHWImg8821B_RF.c] -//+(*) [HalHWImg8821B_BB.c] -//+(*) [HalHWImg8821B_TestChip_MAC.c] -//+(*) [HalHWImg8821B_TestChip_RF.c] -//+(*) [HalHWImg8821B_TestChip_BB.c] -//+(*) [HalHWImg8821B_TestChip_FW.c] -//+(*) [phydm_RegConfig8821B.c] -//+(*) [halmac_api_8822b_pcie.c] -//+(*) [halmac_api_8822b_sdio.c] -//+(*) [halmac_api_8822b_usb.c] -//+(*) [halmac_8822b_pwr_seq.c] -//+(*) [halmac_api_8822b.c] -//+(*) [halmac_88xx_pwr_seq.c] -//+(*) [halmac_api_88xx_pcie.c] -//+(*) [halmac_api_88xx_sdio.c] -//+(*) [halmac_api_88xx_usb.c] -//+(*) [halmac_func_88xx.c] -//+(*) [halmac_api_88xx.c] -//+(*) [halmac_api.c] -//+(*) [..\HalMacApiWrapper.c] -//+(*) [HalHWImg8814A_FW.c] -//+(*) [HalHWImg8814A_MAC.c] -//+(*) [HalHWImg8814A_RF.c] -//+(*) [HalHWImg8814A_BB.c] -//+(*) [phydm_RegConfig8814A.c] -+(*) [HalHWImg8723B_MAC.c] -+(*) [HalHWImg8723B_RF.c] -+(*) [HalHWImg8723B_BB.c] -+(*) [HalHWImg8723B_FW.c] -+(*) [phydm_RegConfig8723B.c] -//+(*) [HalHWImg8703B_FW.c] -//+(*) [HalHWImg8703B_BB.c] -//+(*) [HalHWImg8703B_MAC.c] -//+(*) [HalHWImg8703B_RF.c] -//+(*) [phydm_RegConfig8703B.c] -// -//+(*) [HalHWImg8188F_FW.c] -//+(*) [HalHWImg8188F_MAC.c] -//+(*) [HalHWImg8188F_RF.c] -//+(*) [HalHWImg8188F_BB.c] -//+(*) [phydm_RegConfig8188F.c] -// -// -//+(*) [halhwimg8822b_mac.c] -//+(*) [halhwimg8822b_rf.c] -//+(*) [halhwimg8822b_bb.c] -//+(*) [phydm_regconfig8822b.c] -//+(*) [phydm_hal_api8822b.c] - diff --git a/network/wlan/WDI/HAL/sources.tpl.WlanS.props b/network/wlan/WDI/HAL/sources.tpl.WlanS.props deleted file mode 100644 index 12645c53..00000000 --- a/network/wlan/WDI/HAL/sources.tpl.WlanS.props +++ /dev/null @@ -1,24 +0,0 @@ - - - - hal - $(TMP_TARGET_DIR) - DRIVER_LIBRARY - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - ..; - $(SRC_ROOT)\Header; - $(SRC_ROOT)\Common; - $(HAL_INC_DIRS); - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/HAL/sources.tpl.WlanS.win b/network/wlan/WDI/HAL/sources.tpl.WlanS.win deleted file mode 100644 index aa8370f2..00000000 --- a/network/wlan/WDI/HAL/sources.tpl.WlanS.win +++ /dev/null @@ -1,28 +0,0 @@ -TARGETNAME=hal -TARGETPATH=. -TARGETTYPE=LIBRARY - -# 2011/11/17 MH Disable temporarily for compatiable with other SW teams. -PRECOMPILED_INCLUDE= Mp_Precomp.h -PRECOMPILED_PCH=precomp.pch -PRECOMPILED_OBJ=precomp.obj - -INCLUDES=\ - .; \ - ..; \ - $(SRC_ROOT)\Header; \ - $(SRC_ROOT)\Common; \ - $(HAL_INC_DIRS); \ - $(OMNIPEEK_INC_DIRS); \ - -# -# OS and Bus dependent setting. -# -!include $(SRC_ROOT)\$(PLATFORM_INC) - - -# -# Because we will copy HAL source file to HALSOURCE. But we can not copy HAL -# root directory to HALSOURCE, otherwise, WDK6000 warning. -# -SOURCES = \ No newline at end of file diff --git a/network/wlan/WDI/HEADER/BAType.h b/network/wlan/WDI/HEADER/BAType.h deleted file mode 100644 index 29b50a29..00000000 --- a/network/wlan/WDI/HEADER/BAType.h +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef __INC_BATYPE_H -#define __INC_BATYPE_H - -#define TOTAL_TXBA_NUM 16 -#define TOTAL_RXBA_NUM 16 - -//temp set from 200 ms to 800 ms, for rental house test. by Maddest 20130105 -#define BA_SETUP_TIMEOUT 800 - -#define BA_INACT_TIMEOUT 60000 - -#define BA_POLICY_DELAYED 0 -#define BA_POLICY_IMMEDIATE 1 - -#define ADDBA_STATUS_SUCCESS 0 -#define ADDBA_STATUS_REFUSED 37 -#define ADDBA_STATUS_INVALID_PARAM 38 - -#define DELBA_REASON_QSTA_LEAVING 36 -#define DELBA_REASON_END_BA 37 -#define DELBA_REASON_UNKNOWN_BA 38 -#define DELBA_REASON_TIMEOUT 39 - -//3 BA Dialog Token -#define FRAME_OFFSET_BA_DIALOG_TOKEN (sMacHdrLng+2) -#define GET_BA_FRAME_DIALOG_TOKEN(_pStart) ( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_DIALOG_TOKEN) -#define GET_BA_FRAME_STATUS_CODE(_pStart) ( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_DIALOG_TOKEN+1) - -//3 Block Ack Parameter Set - -#define FRAME_OFFSET_BA_PARAM_SET(_pStart) (sMacHdrLng+(( GET_ACTFRAME_ACTION_CODE(_pStart) == 0)? 3:5) ) // BAReq:BARsp - -#define GET_BA_FRAME_PARAM_SET(_pStart) ( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart)) - -#define GET_BA_FRAME_PARAM_SET_AMSDU_SUPPORT(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 0, 1)) -#define SET_BA_FRAME_PARAM_SET_AMSDU_SUPPORT(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 0, 1, (u1Byte)(_value)) - -#define GET_BA_FRAME_PARAM_SET_BA_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 1, 1)) -#define SET_BA_FRAME_PARAM_SET_BA_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 1, 1, (u1Byte)(_value)) - -#define GET_BA_FRAME_PARAM_SET_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 2, 4)) -#define SET_BA_FRAME_PARAM_SET_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 2, 4, (u1Byte)(_value)) - -#define GET_BA_FRAME_PARAM_SET_BUF_SIZE(_pStart) ((u2Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 6, 10)) -#define SET_BA_FRAME_PARAM_SET_BUF_SIZE(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart), 6, 10, (u2Byte)(_value)) - -// Block Ack Timeout Value -#define GET_BA_FRAME_TIMEOUT_VALUE(_pStart) ( ((pu1Byte)(_pStart))+FRAME_OFFSET_BA_PARAM_SET(_pStart)+2) - -//BA Starting Sequence Control Field -#define GET_BAREQ_FRAME_START_SQECTRL(_pStart) ( ((pu1Byte)(_pStart))+sMacHdrLng+7) - -#define GET_BA_START_SQECTRL_FIELD_SEQ_NUM(_pStart) ((u2Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart)), 4, 12)) -#define SET_BA_START_SQECTRL_FIELD_SEQ_NUM(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart)), 4, 12, (u2Byte)(_value)) - -//2 GET/SET BA Parameter Set Field -#define GET_BA_PARAM_SET_FIELD_AMSDU_SUPPORT(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 0, 1)) -#define SET_BA_PARAM_SET_FIELD_AMSDU_SUPPORT(_pStart, _value) SET_BITS_TO_LE_2BYTE( _pStart, 0, 1, _value) - -#define GET_BA_PARAM_SET_FIELD_BA_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 1, 1)) -#define SET_BA_PARAM_SET_FIELD_BA_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE(_pStart, 1, 1, _value) - -#define GET_BA_PARAM_SET_FIELD_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 2, 4)) -#define SET_BA_PARAM_SET_FIELD_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE( _pStart, 2, 4, _value) - -#define GET_BA_PARAM_SET_FIELD_BUF_SIZE(_pStart) ((u2Byte)LE_BITS_TO_2BYTE( _pStart, 6, 10)) -#define SET_BA_PARAM_SET_FIELD_BUF_SIZE(_pStart, _value) SET_BITS_TO_LE_2BYTE( _pStart, 6, 10, (u2Byte)(_value)) - -//3 DELBA Parameter Set -#define GET_DELBA_FRAME_PARAM_SET(_pStart) ReadEF2Byte( ((pu1Byte)(_pStart))+sMacHdrLng+2) -#define SET_DELBA_FRAME_PARAM_SET(_pStart, _value) WriteEF2Byte( ((pu1Byte)(_pStart))+sMacHdrLng+2, _value) - -#define GET_DELBA_FRAME_PARAM_SET_INITIATOR(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart))+sMacHdrLng+2, 11, 1)) -#define SET_DELBA_FRAME_PARAM_SET_INITIATOR(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart))+sMacHdrLng+2, 11, 1, (u1Byte)(_value)) - -#define GET_DELBA_FRAME_PARAM_SET_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart))+sMacHdrLng+2, 12, 4)) -#define SET_DELBA_FRAME_PARAM_SET_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart))+sMacHdrLng+2, 12, 4, (u1Byte)(_value)) - -//2 GET/SET DELBA Parameter Set Field -#define GET_DELBA_PARAM_SET_FIELD_INITIATOR(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 11, 1)) -#define SET_DELBA_PARAM_SET_FIELD_INITIATOR(_pStart, _value) SET_BITS_TO_LE_2BYTE( _pStart, 11, 1, _value) - -#define GET_DELBA_PARAM_SET_FIELD_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 12, 4)) -#define SET_DELBA_PARAM_SET_FIELD_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE(_pStart, 12, 4, _value) - -// BlockAckReq frame parameters -#define GET_BAR_PARAM_CTRL_FIELD_BAR_ACK_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 0, 1)) -#define GET_BAR_PARAM_CTRL_FIELD_MULTI_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 1, 1)) -#define GET_BAR_PARAM_CTRL_FIELD_COMPRESSED_BITMAP(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 2, 1)) -#define GET_BAR_PARAM_CTRL_FIELD_GCR(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 3, 1)) -#define GET_BAR_PARAM_CTRL_FIELD_TID_INFO(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 12, 4)) - -#define GET_BAR_PARAM_INFO_FIELD_FRAG_NUM(_pStart) ((u1Byte)LE_BITS_TO_2BYTE(_pStart, 0, 4)) -#define GET_BAR_PARAM_INFO_FIELD_STARTING_SEQ_NUM(_pStart) ((u2Byte)LE_BITS_TO_2BYTE(_pStart, 4, 12)) - -typedef enum _BAR_ACK_POLICY{ - BAR_NORMAL_ACK = 0, - BAR_NO_ACK = 1, -}BAR_ACK_POLICY; - -typedef enum _BAR_TYPE{ - BAR_TYPE_BASIC_BAR, - BAR_TYPE_COMPRESSED_BAR, - BAR_TYPE_EXT_COMPRESSED_BAR, - BAR_TYPE_MULTI_TID_BAR, - BAR_TYPE_GCR_BAR, -}BAR_TYPE; - -typedef struct _BA_RECORD { - RT_TIMER Timer; - BOOLEAN bValid; - u1Byte DialogToken; - u2Byte BaParamSet; - u2Byte BaTimeoutValue; - u2Byte BaStartSeqCtrl; - u2Byte BufferSize; // The max number of packets(MPDUs) in an AMPDU -} BA_RECORD, *PBA_RECORD; - - -#endif diff --git a/network/wlan/WDI/HEADER/BssCoexistence.h b/network/wlan/WDI/HEADER/BssCoexistence.h deleted file mode 100644 index 9ebc017d..00000000 --- a/network/wlan/WDI/HEADER/BssCoexistence.h +++ /dev/null @@ -1,60 +0,0 @@ -#ifndef __INC_BSSCOEXISTENCE_H -#define __INC_BSSCOEXISTENCE_H - -// Normally, the OS (windows but not including win7 or later) scans per 60 seconds, -// and we don't want the period smaller than the windows period to affect the throughput. -// In WiFi 11n 5.2.48 BSS coexistence test, the scan interval is 180 seconds. -#define RT_OBSS_MIN_TRIGGER_SCAN_INTERVAL 70 // 70 Seconds - -#define SET_BSS_COEXISTENCE_ELE_INFO_REQUEST(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 0, 1, _val) -#define SET_BSS_COEXISTENCE_ELE_FORTY_INTOLERANT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 1, 1, _val) -#define SET_BSS_COEXISTENCE_ELE_20_WIDTH_REQ(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 2, 1, _val) -#define SET_BSS_COEXISTENCE_ELE_OBSS_EXEMPTION_GRT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 4, 1, _val) -#define GET_BSS_COEXISTENCE_ELE_FORTY_INTOLERANT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 1, 1) -#define GET_BSS_COEXISTENCE_ELE_20_WIDTH_REQ(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 2, 1) -#define GET_BSS_COEXISTENCE_ELE_OBSS_EXEMPTION_GRT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 4, 1) - -#define SET_BSS_INTOLERANT_ELE_REG_CLASS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 0, 8, _val) -#define SET_BSS_INTOLERANT_ELE_CHANNEL(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 0, 8, _val) - -#define SET_EXT_CAPABILITY_ELE_BSS_COEXIST(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 0, 1, _val) -#define GET_EXT_CAPABILITY_ELE_BSS_COEXIST(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 0, 1) - -#define GET_OBSS_PARAM_ELE_SCAN_INTERVAL(_pEleStart) ReadEF2Byte(((_pEleStart)+4)) -VOID -BSS_ParsingOBSSInfoElement( - PADAPTER Adapter, - OCTET_STRING osFrame, - PRT_WLAN_BSS pBssDesc - ); - -VOID -BSS_ParsingBSSCoexistElement( - PADAPTER Adapter, - OCTET_STRING osFrame, - PRT_WLAN_BSS pBssDesc - ); - -VOID -BSS_AppendExentedCapElement( - PADAPTER pAdapter, - POCTET_STRING posFrame - ); - -RT_STATUS -OnBssCoexistence( - IN PADAPTER Adapter, - IN PRT_RFD pRfd, - IN POCTET_STRING posMpdu - ); - -VOID -BSS_OnScanComplete( - IN PADAPTER Adapter - ); - -VOID -BSS_IdleScanWatchDog( - IN PADAPTER pAdapter - ); -#endif diff --git a/network/wlan/WDI/HEADER/CcxType.h b/network/wlan/WDI/HEADER/CcxType.h deleted file mode 100644 index eddc6f44..00000000 --- a/network/wlan/WDI/HEADER/CcxType.h +++ /dev/null @@ -1,628 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// CcxType.h -// -// Description: -// CCX related information. -// -//----------------------------------------------------------------------------- - -#ifndef __INC_CCX_TYPE_H -#define __INC_CCX_TYPE_H - -#ifndef CCX_SUPPORT_VER -#define CCX_SUPPORT_VER 0 -#endif - -//------------------------------------------------------------------------------ -// CCX IAPP frame. -//------------------------------------------------------------------------------ -#define CISCO_AIRONET_SNAP_LENGTH 8 - -// Cisco Aironet SNAP Header 8 + IAPP ID & Length 2 + IAPP Type 1 + IAPP SubType 1 + -// Dest MAC Addr 6 + Src MAC Addr 6 + Dialog Token 2 + dummy Measurement Report Element 1 -#define CISCO_RM_RPT_IAPP_LENGTH 27 - -// Cisco Aironet SNAP Header 8 + IAPP ID & Length 2 + IAPP Type 1 + IAPP SubType 1 + -// Dest MAC Addr 6 + Src MAC Addr 6 + dummy Adjacent Report Element 1 -#define CISCO_ADJ_RPT_IAPP_LENGTH 25 - -#define RT_CCX_PACKET_TYPE u4Byte -#define CPT_NONE 0 // Not a CCX IAPP Packet -#define CPT_UNKNOWN_IAPP 1 -#define CPT_INVALID_IAPP 2 -#define CPT_ADJACENT_AP_REPORT 3 // S30, Adjacent AP Report frame. -#define CPT_RM_REQUEST 4 // S36, Radio Measurement Request frame. -#define CPT_NEIGHBOR_LIST_RESPONSE 5 // S51.2.2 Neighbor List Response frame. -#define CPT_DIRECT_ROAM 6 // S51.2.3 Direct Roam frame. -#define CPT_LINK_TEST_REQUEST 7 // S62.1, Link Test request. -#define CPT_LINK_TEST_REPLY 8 // S62.1, Link Test reply. -#define CPT_EVENT_LOG_REQUEST 9 // S66, Roaming and Real-time Diagnostics Event log request -#define CPT_EVENT_LOG_REPORT 10 // S66, Roaming and Real-time Diagnostics Event log report -#define CPT_EVENT_DIAG_CHNL_REQUEST 11 // S64, Diagnostic Channel request -#define CPT_EVENT_DIAG_CHNL_REPORT 12 // S64, Diagnostic Channel report -#define CPT_EVENT_DIAG_CLIENT_RPT_REQUEST 13 // S65, Diagnostic Client Report request -#define CPT_EVENT_DIAG_CLIENT_RPT_REPORT 14 // S65, Diagnostic Client Report report - - - -#define CCX_CCKM_REQ_IE_LEN 24 // CCKM request IE length -#define CCX_ASSOC_INFO_TIME_OUT 2000 // ms for waiting CCX info - -#define CCX_MFP_TKIP_MHDR_IE_LEN 12 // CCXv5 S67 MFP MHDR IE for TKIP excluding element ID and length - -#define CCX_MIN_ROAM_THRESHOLD -100 // The min of roam threshold. - -// =================================================================== // -// CCX IAPP Type and SubType -// =================================================================== // -// -// Definition for IAPP Type and SubType. -// -#define IAPP_CONTROL_MSG 0x0000 - -#define CCX_ADJACENT_IE_BUF_LEN 70 - -// -// Definition for IAPP Type and SubType for Adjacent AP Report. -// Ref: CCXv2 S32. -// -#define CCX_AARPT_IAPP_TYPE 0x30 -#define CCX_AARPT_IAPP_FUNCTION 0x00 - -// -// Definition for IAPP Type and SubType. -// Ref: CCXv2 S36.4, S36.5 -// -#define CCX_RM_IAPP_TYPE 0x32 -#define CCX_RM_REQUEST_IAPP_SUBTYPE 0x01 -#define CCX_RM_REPORT_IAPP_SUBTYPE 0x81 - -// -// Definition of IappType and IappSubtype for -// Neighbor List Response and Direct Roam frames. -// Ref: CCXv4 S51.2.3, S51.2.4. -// -#define CCX_L2ROAM_IAPP_TYPE 0x33 -#define CCX_NLR_IAPP_SUBTYPE 0x81 -#define CCX_DR_IAPP_SUBTYPE 0x82 - -// -// Link Test. -// Ref: CCXv4 S62. -// -#define CCX_LINK_TEST_IAPP_TYPE 0x41 -#define CCX_LT_REQUEST_IAPP_SUBTYPE 0x01 -#define CCX_LT_REPLY_IAPP_SUBTYPE 0x81 - -// -// CCXv5 Diagnostic IAPP Type -// -#define CCX_EVENT_DIAGNOSTIC_IAPP_TYPE 0x60 - - -// -// CCXv5 S64 Diagnostic Channel -// -#define CCX_EVENT_DIAGNOSTIC_REQ_IAPP_SUBTYPE 0x01 -#define CCX_EVENT_DIAGNOSTIC_RPT_IAPP_SUBTYPE 0x81 - -// -// CCXv5 S65 Client Report -// -#define CCX_EVENT_DIAGNOSTIC_CLIENT_RPT_REQ_IAPP_SUBTYPE 0x02 -#define CCX_EVENT_DIAGNOSTIC_CLIENT_RPT_RPT_IAPP_SUBTYPE 0x82 - -// -// Roaming and Real-time Diagnostics -// Ref: CCXv5 S66 -// -#define CCX_EVENT_LOG_REQ_IAPP_SUBTYPE 0x03 -#define CCX_EVENT_LOG_RPT_IAPP_SUBTYPE 0x83 - -#define CCX_PHY_RATE_MAX 5 -// ==================================================================== // - -#define CCX_PKT_STATUS u4Byte - -#define CCX_PKT_STATUS_UNKNOWN 0 // Cnannot recognize and handle this packet for CCX and follow the default driver flow to handle this packet. -#define CCX_PKT_STATUS_DROP BIT0 // Drop this packet and do not process it. -#define CCX_PKT_STATUS_BY_DRIVER BIT1 // Handle this packet in local driver and drop it after finishing. -#define CCX_PKT_STATUS_BY_IHV BIT2 // Indicate this packet to IHV service and do not process it in local driver. -#define CCX_PKT_STATUS_BY_DRIVER_IHV (CCX_PKT_STATUS_BY_DRIVER | CCX_PKT_STATUS_BY_IHV) // Handle this packet in local driver and then also indicate it to IHV service. - -typedef struct _CCX_IAPP_HEADER{ - u1Byte SnapHeader[CISCO_AIRONET_SNAP_LENGTH]; // Cisco Aironet SNAP header: AAAA 0300 4096 0000 - u2Byte IappIdLen; - u1Byte IappType; - u1Byte IappSubtype; - u1Byte DstAddr[6]; - u1Byte SrcAddr[6]; -}CCX_IAPP_HEADER, *PCCX_IAPP_HEADER; -#define CCX_IAPP_HEADER_SIZE 24 - -#define CCX_ADJ_RPT_HEADER_SIZE 25 -#define CCX_ASSOC_REASON_ELEMENT_SIZE 9 - - -#define GET_CCX_IAPPIDLEN(_pPkt) ( N2H2BYTE(((PCCX_IAPP_HEADER)_pPkt)->IappIdLen) ) -#define SET_CCX_IAPPIDLEN(_pPkt, _IappIdLen) ( ((PCCX_IAPP_HEADER)_pPkt)->IappIdLen = H2N2BYTE(_IappIdLen) ) - -#define GET_CCX_IAPPTYPE(_pPkt) ( N2H1BYTE(((PCCX_IAPP_HEADER)_pPkt)->IappType) ) -#define SET_CCX_IAPPTYPE(_pPkt, _IappType) ( ((PCCX_IAPP_HEADER)_pPkt)->IappType = H2N1BYTE(_IappType) ) - -#define GET_CCX_IAPPSUBTYPE(_pPkt) ( N2H1BYTE(((PCCX_IAPP_HEADER)_pPkt)->IappSubtype) ) -#define SET_CCX_IAPPSUBTYPE(_pPkt, _IappSubtype) ( ((PCCX_IAPP_HEADER)_pPkt)->IappSubtype = H2N1BYTE(_IappSubtype) ) - -static u1Byte CCKM_OUI[SIZE_OUI] = {0x00,0x40,0x96}; - -#define CCKM_OUI_TYPE 0 - - -//------------------------------------------------------------------------------ -// Layer 2 roaming related definition. -//------------------------------------------------------------------------------ - -// -// Ref: CCXv2 S32. -// -typedef struct _CCX_ADJACENT_REPORT{ - u1Byte SnapHeader[CISCO_AIRONET_SNAP_LENGTH]; // Cisco Aironet SNAP header: AAAA 0300 4096 0000 - u2Byte IappIdLen; - u1Byte IappType; // 0x30. - u1Byte IappFunction; // 0x00. - u1Byte DstAddr[6]; // MAC address of the AP. - u1Byte SrcAddr[6]; // Reporting STA's MAC address. - u1Byte Elements[1]; -}CCX_ADJACENT_REPORT, *PCCX_ADJACENT_REPORT; - -#define SET_AARPT_IAPP_SNAP_HEADER(_pPkt, _header, _len) (PlatformMoveMemory( _pPkt, _header, _len)) -#define SET_AARPT_IAPPIDLEN(_pPkt, _IappIdLen) (PlatformMoveMemory((_pPkt + 8), _IappIdLen, 2 )) -#define SET_AARPT_IAPPTYPE(_pPkt, _IappType) (*(_pPkt + 10) = H2N1BYTE(_IappType)) -#define SET_AARPT_IAPPFUNCTION(_pPkt, _IappFunction) ( *(_pPkt + 11) = H2N1BYTE(_IappFunction) ) -#define SET_AARPT_IAPPDEST(_pPkt, _dest, _len) (PlatformMoveMemory( (_pPkt + 12), _dest, _len) ) -#define SET_AARPT_IAPPSRC(_pPkt, _dest, _len) (PlatformMoveMemory( (_pPkt + 18), _dest, _len) ) -#define SET_AARPT_ElEMENT(_pPkt, _elemt, _len) (PlatformMoveMemory( (_pPkt + 24), _elemt, _len) ) - -#define SET_AARPT_REASON_TAG(_pElmt, _tag) (PlatformMoveMemory( _pElmt, _tag, 2 )) -#define SET_AARPT_REASON_LEN(_pElmt, _len) (PlatformMoveMemory( (_pElmt + 2), _len, 2 )) -#define SET_AARPT_REASON_OUI(_pElmt, _airie, _len) (PlatformMoveMemory( (_pElmt + 4), _airie, _len )) -#define SET_AARPT_REASON_REA(_pElmt, _reason) ( *(_pElmt + 8) = _reason ) -// -// Ref: CCXv2 S32. -// -typedef struct _CCX_ADJ_AP_RPT_ELEMENT{ - u2Byte Tag; // 0x009B - u2Byte Length; - u1Byte Aironet_OUI[4]; // 0x00 0x40 0x96 0x00 - u1Byte AdjAPMAC[6]; // MAC address of the AP. - u2Byte Channel; // Channel of the AP. - u2Byte SSIDLen; // SSID length of the AP. - u1Byte SSID[32]; - u1Byte Seconds[2]; -}CCX_ADJ_AP_RPT_ELEMENT, *PCCX_ADJ_AP_RPT_ELEMENT; - -// -// Ref: CCXv4 S51.2.4, figure 51.3A. -// -typedef struct _CCX_ASSOC_REASON_ELEMENT{ - u2Byte Tag; // 0x009C - u2Byte Length; - u1Byte Aironet_OUI[4]; // 0x00 0x40 0x96 0x00 - u1Byte AssocReason; -}CCX_ASSOC_REASON_ELEMENT, *PCCX_ASSOC_REASON_ELEMENT; - -// -// Ref. CCXv4 S51.2.4, figure 51-4. -// -typedef enum _CCX_ASOC_REASON{ - CCX_AR_UNSPECIFIED = 0, - CCX_AR_NORMAL_ROAM_POOR_LINK = 1, - CCX_AR_NORMAL_ROAM_LOAD_BALANCING = 2, - CCX_AR_INSUFFICIENT_CAPACITY = 3, - CCX_AR_DIRECT_ROAM = 4, - CCX_AR_FIRST_ASSOCIATION = 5, - CCX_AR_ROAM_FROM_WAN = 6, - CCX_AR_ROAM_TO_WAN = 7, - CCX_AR_NORMAL_ROAM_BETTER_AP = 8, - CCX_AR_DEAUTH_DISASSOC = 9, -}CCX_ASOC_REASON; - -// -// Information from a neighbor report IE. -// Ref: CCXv4 S51.2.5. -// -#define CCX_NB_RFPARM_ID 0x01 -#define CCX_NB_RFPARM_SIZE 6 -#define CCX_NB_RFPARM_GET_MIN_RX_POWER(_pParam) (s1Byte)(*((pu1Byte)_pParam)) -#define CCX_NB_RFPARM_GET_AP_TX_POWER(_pParam) (s1Byte)(*((pu1Byte)(_pParam) + 1)) -#define CCX_NB_RFPARM_GET_CLIENT_TX_POWER(_pParam) (s1Byte)(*((pu1Byte)(_pParam) + 2)) -#define CCX_NB_RFPARM_GET_ROAM_HYSTERSIS(_pParam) (s1Byte)(*((pu1Byte)(_pParam) + 3)) -#define CCX_NB_RFPARM_GET_ADAPTIVE_SCAN_THRESHOLD(_pParam) (s1Byte)(*((pu1Byte)(_pParam) + 4)) -#define CCX_NB_RFPARM_GET_TRANSITION_TIME(_pParam) (u1Byte)(*((pu1Byte)(_pParam) + 5)) - -// -// Roaming related configuration. -// -#define RT_DEF_MIN_RX_POWER -82 // in dBm. -#define RT_DEF_ADAPTIVE_SCAN_THRESHOLD -72 // in dBm. -#define RT_MIN_ROAM_HYSTERSIS 10 // in dBm. -#define RT_DEFAULT_ROAM_HYSTERSIS 6 -#define RT_MIN_ADAPTIVE_SCAN_CHECK_INTERVAL 1 // In number of times MgntLinkStatusWatchdog invoked. -#define RT_MAX_ADAPTIVE_SCAN_CHECK_INTERVAL 16 // In number of times MgntLinkStatusWatchdog invoked. -#define RT_DEFAULT_RX_RETRY_RATIO_FOR_ROAM 100 // Default rx retry ratio to start roaming -#define RT_CCX_RX_RETRY_RATIO_FOR_ROAM 45 // CCX rx retry ratio to start roaming. - - -// -// Neighbor Report element. -// Ref: S51.2.5, Figure 51-5. -// -#define CCX_NBIE_ID 0x28 -#define CCX_NBIE_GET_BSSID(_IE) ((_IE).Content.Octet) -#define CCX_NBIE_GET_CHNL(_IE) ReadEF1Byte((_IE).Content.Octet + 6) -#define CCX_NBIE_GET_BAND(_IE) ReadEF1Byte((_IE).Content.Octet + 7) -#define CCX_NBIE_GET_PHY_TYPE(_IE) ReadEF1Byte((_IE).Content.Octet + 8) - -// -// Information about Neighbor. -// -typedef struct _RT_CCX_NEIGHBOR{ - // - // We will use BSSID as key to hash. - // - DECLARE_RT_HASH_ENTRY; - - u1Byte CurrentChannel; - u1Byte ChannelBand; - u1Byte PhyType; - - BOOLEAN bRfParamValid; - u1Byte RfParam[CCX_NB_RFPARM_SIZE]; - -}RT_CCX_NEIGHBOR, *PRT_CCX_NEIGHBOR; - -#define MAX_NUM_CCX_NEIGHBOR_LIST 32 -#define CCX_NEIGHBOR_KEY_SIZE 6 - -// -// CCXv4 roaming state. -// -typedef enum _RT_CCX_ROAMING_STATE{ - CRS_IDLE, - CRS_TRY_TO_SCAN, - CRS_TRY_TO_ROAM, -}RT_CCX_ROAMING_STATE; - -#define CCX_LINK_TEST_SET_FRAME_NUM(_pEleOffset, _Value) (*((UNALIGNED pu2Byte)(_pEleOffset)) = H2N2BYTE(_Value)) -#define CCX_LINK_TEST_SET_NUM_RETRY(_pEleOffset, _Value) (*((_pEleOffset)+8) = (_Value)) -#define CCX_LINK_TEST_SET_RSSI(_pEleOffset, _Value) (*((_pEleOffset)+9) = (_Value)) - -// -// 1. must <= 1600, see definition of MAX_TRANSMIT_BUFFER_SIZE. -// 2. 1534 = 1514(Eth) - 12 + 30(WLAN) + 2(QoS). -// 3. 1536 is multiple of 4. -// -#define MAX_CCX_LINK_TEST_PACKET_SIZE 1536 - -//------------------------------------------------------------------------------ -// CCX Qos part. -//------------------------------------------------------------------------------ - -enum RT_CCX_ADMISSION_STATUS_CODE -{ - StatusCode_Accepted = 0, // ADDTS Rsp, Reasoc Rsp - StatusCode_AddTs_InvalidParam = 1, // ADDTS Rsp - StatusCode_AddTs_Refused = 3, // ADDTS Rsp - StatusCode_Reasoc_Unspecified = 0xC8, // Reasoc Rsp - StatusCode_PolicyConfFailure = 0xC9, // ADDTS Rsp, Reasoc Rsp - StatusCode_Reasoc_Denied = 0xCA, // Reasoc Rsp - StatusCode_Reasoc_InvalidParam = 0xCB // Reasoc Rsp -}; - -typedef struct _RT_CCX_CAC_PHY_RATE { - u1Byte WirelessMode; - u1Byte NominalPhyRate; - u2Byte SurplusBandwith; -} RT_CCX_CAC_PHY_RATE, *PRT_CCX_CAC_PHY_RATE; - - - -#define RT_CCX_CAC_MIN_PHY_RATE(_Adapter) \ - ( ((_Adapter)->MgntInfo.CurrentBssWirelessMode==WIRELESS_MODE_B) ? 11 : 12) - -#define CCX_CAC_VOICE_TSID 0 -#define CCX_CAC_SIGNAL_TSID 1 - -//------------------------------------------------------------------------------ -// CCX general/common part. -//------------------------------------------------------------------------------ - -// -// CCX Aironet IE. -// Ref: -// CCXv1 S19, Aironet IE. -// CCXv1 S13 (section A01.1 CKIP Negotiation). -// CCxv4 S61 Keep-Alive. -// -#define IE_CISCO_REFRESH_RATE_POSITION 0x03 -#define IE_CISCO_CWMIN_POSITION 0x04 -#define IE_CISCO_CWMAX_POSITION 0x06 -#define IE_CISCO_FLAG_POSITION 0x08 // Flag byte: byte 8, numbered from 0. -#define SUPPORT_CKIP_MIC 0x08 // bit3 -#define SUPPORT_CKIP_PK 0x10 // bit4 -#define RT_KEEP_ALIVE_INTERVAL 20 // in seconds. -#define RT_NEIGHBOR_CHECK_INTERVAL 60 // in seconds. - -typedef struct _CCX_TSM_COUNTER{ - BOOLEAN bValid; // TRUE if this counter is valid and shall be updated at packet sent. - - // - // Counters updated at Tx transmit OK. - // - u4Byte MediaDelay; // in us. - u2Byte MediaDelayHistogram[4]; - u4Byte PacketLossCount; - - // - // Counters updated at TxFillDescriptor. - // - u4Byte PacketCount; - u4Byte TsPacketCount; // #packet sent for the TS. - u2Byte UsedTime; -}CCX_TSM_COUNTER, *PCCX_TSM_COUNTER; - - -// -// Structure to keep Link Test Reply frame retry count. -// -typedef struct _RT_LT_REP_RETRY -{ - BOOLEAN bUpdated; - u1Byte RetryCnt; - u2Byte SeqNo; - u2Byte FrameNumber; - u2Byte PacketID; // The ID of the HW Tx Desc usage. Only used under RTL819x serious. -}RT_LT_REP_RETRY, *PRT_LT_REP_RETRY; -// -// Change the size to 1 because the link test is a ping pong test and we don't need to -// queue more than 1 packet. By Bruce, 2010-07-13. -// -#define MAX_RT_LT_REP_RETRY_SET_SIZE 1 - -#define SET_LT_REP_PKT_ID(_pRetry, _PktID) ((_pRetry)->PacketID = _PktID) - -// -// Information about the Link Test Request received. -// -typedef struct _RT_LT_REQ -{ - s4Byte RecvSignalPower; // In dBm - u2Byte Reserved; - u2Byte MpduLength; - u1Byte MpduBuf[MAX_CCX_LINK_TEST_PACKET_SIZE]; -}RT_LT_REQ, *PRT_LT_REQ; -#define MAX_RT_LT_REQ_WAIT_QUEUE_SIZE 2 -#define MAX_CCX_SFA_IE_BUF_LEN 5 -#define MAX_CCX_DIAG_REQ_REASON_IE_BUF_LEN 5 - -// -// Structure to contain general CCX information. -// -typedef struct _RT_CCX_INFO{ - DECLARE_RT_OBJECT(RT_CCX_INFO); - - // - // 1. CCX version and capability. - // - BOOLEAN bCCXenable; - u1Byte BssCcxVerNumber; // 0: not a CCX AP, >0: CCX version of current BSS associated. - u1Byte CurrCcxVerNumber; // 0: not acting as CCX device. >0: the CCX version we are using. - BOOLEAN bWithAironetIE; - - // - // 2. Security. - // LEAP, PEAP, FAST, CCKM, CKIP. - // - BOOLEAN bCCX8021xenable; //for fast roam enable or disable - BOOLEAN bCCXwaitCCXInfoInProgess; // For wait CCX_Info to be set or timeout call back contiune by Mars - RT_TIMER SetCCXInfoTimer; - BOOLEAN bCCX8021xResultenable; //for fast roam can send CCKM IE, set by meeting house only. - u8Byte CCKMTstamp; - u4Byte CCKMRN; - BOOLEAN bAPSuportCCKM; - OCTET_STRING CCKMIE; - u1Byte CCKMIEBuf[64]; - - // - // 3. Layer 2 roaming. - // - CCX_ASOC_REASON AssocReason; // Reason to associate current BSS. - OCTET_STRING AdjApRptElement; - u1Byte AdjApRptElementBuf[CCX_ADJACENT_IE_BUF_LEN]; - RT_HASH_TABLE_HANDLE hNeighborTable; // Neighbor lists. - RT_CCX_ROAMING_STATE state_CcxRoam; // CCX roaming state. - s4Byte LowestBssPowerThreshold; // in dBm. We'll try to roam to the BSS if BSS's power is larger than it. - u1Byte AdaptiveScanCheckCounter; - u1Byte AdaptiveScanCheckInterval; - BOOLEAN bBssRfParamValid; // TRUE if BssRfParam is valid. - u1Byte BssRfParam[CCX_NB_RFPARM_SIZE]; // RF parameter subelement of current BSS. - BOOLEAN bTspecRejected; - u1Byte NeighborCheckCount; - - // - // 4. Radio and link related. - // - - // - // For TSM. - // - u8Byte LastRoamStartTime; // in us. - u2Byte LastRoamDelay; // in ms. - u1Byte RecentRoamingCount; // Number of successfull roam in last TSM measurement interval. For CCX 4 S56.5.2.6, 070621, by rcnjko. - BOOLEAN bEnableTSM; // Indicate enabling TSM or not. 0: disable, 1: enable. - CCX_TSM_COUNTER TsmCounters[MAX_STA_TS_COUNT]; // Tsm Info according to the specified TSID. - // For CCXv5 Catastrophic Roaming Scenario, 4.1.9.4/4.1.9.5 - u1Byte CatasRoamCnt; - u1Byte CatasRoamLimit; - - // - // For keep-alive mechanism. - // - u1Byte IdleCount; - u8Byte LastNumTxUnicast; - u8Byte LastNumRxUnicast; - - // - // For roaming decision, record the rx retry info. - // - u8Byte LastRxRetryCnt; - u8Byte LastRxUniCnt; - u1Byte LastRetryRatio; - - // - // Link Test, which are protected by RT_RM_SPINLOCK. - // - u2Byte LtFrameNumber; - RT_LT_REP_RETRY LtReplyRetrySet[MAX_RT_LT_REP_RETRY_SET_SIZE]; - u4Byte LtReplyRetrySetStartIdx; - u4Byte LtReplyRetrySetSize; - RT_LT_REQ LtRequestWaitQueue[MAX_RT_LT_REQ_WAIT_QUEUE_SIZE]; - u4Byte LtRequestWaitQueueStartIdx; - u4Byte LtRequestWaitQueueSize; - BOOLEAN bSendingLtReply; - u1Byte LtReqQueueCheckCount; - u1Byte LtreplyRetryID; // The ID to determine the link test packet for Tx descriptor usage. - - // - // 5. QoS - // - RT_TIMER SessionRetryTimer; - BOOLEAN SessionStartFrameRejected; - BOOLEAN bFakeDecreasingSignal; - s4Byte FakeRxSignalPower; - - // - //7. SSIDL - // - RT_WLAN_BSS ExtenSSIDBSS; - RT_WLAN_BSS JoinSSIDBSS; - - BOOLEAN bCCXMIXenable; - - // CCX 2 S31, AP control of client transmit power. 060927, by rcnjko. - BOOLEAN bWithCcxCellPwr; - u1Byte CcxCellPwr; // Cell power limit in dBm. - BOOLEAN bUpdateCcxPwr; // Update CCX Tx Power to HW. - - // CCX CAC Enabled Flag - BOOLEAN bCcxCACEnable; - - // CCX v5 S64 Diagnostic Channel Mode - BOOLEAN bCcxDiagnosticMode; - - // CCX IHV Frame Logging mode - BOOLEAN bIhvFrameLogMode; - - // CCX Tx Frame Buffer for indication to IHV - u1Byte IhvTxIndicBuffer[sMaxMpduLng]; - - // CCX V5 S67 - BOOLEAN bCcxMFPEnable; // Enable MFP mode - u1Byte MFPtk[MAX_KEY_LEN]; - u1Byte MFPAESKeyBuf[AESCCMP_BLK_SIZE_TOTAL]; - - // CCXv5 SFA IE - OCTET_STRING CCXSFAIE; - u1Byte CCXSFAIEBuf[MAX_CCX_SFA_IE_BUF_LEN]; - - // CCXv5 S64 Diagnostic Request Reason IE - OCTET_STRING CCXDiagReqReasonIE; - u1Byte CCXDiagReqReasonIEBuf[MAX_CCX_DIAG_REQ_REASON_IE_BUF_LEN]; - - BOOLEAN bSendEAPStar; - u1Byte SendEAPStarCount; - - // CCX v2 Send CCX report by Driver !! - BOOLEAN bSendCCXReport; - - // Add for common binary, we can not use global variable. - RT_CCX_CAC_PHY_RATE RtCcxCacVoPhyRate[CCX_PHY_RATE_MAX]; - - // Flag for marking the OID is coming from IHV - BOOLEAN bQueryFromIHV; - -}RT_CCX_INFO, *PRT_CCX_INFO; - - -#define CCX_MAX_PACKET_ID 4096 - -#define SUPPORT_CCX(__pAdapter) \ - (GET_CCX_INFO(&((__pAdapter)->MgntInfo)) ? ((GET_CCX_INFO(&((__pAdapter)->MgntInfo)))->bCCXenable ? TRUE : FALSE) : FALSE) - -#define GET_CCX_INFO(__pMgntInfo) ( (PRT_CCX_INFO)((__pMgntInfo)->pCcxInfo) ) - -#define CCX_IS_MFP_ENABLED(___pAdapter) (SUPPORT_CCX(___pAdapter) ? ((GET_CCX_INFO(&((___pAdapter)->MgntInfo)))->bCcxMFPEnable) : FALSE) - -#define GET_CURR_CCX_VER(__pAdapter) ( ((PRT_CCX_INFO)((__pAdapter)->MgntInfo.pCcxInfo))->CurrCcxVerNumber ) -#define GET_HW_CCX_VER(__pAdapter) ((__pAdapter)->HalFunc.CcxVerSupported) - - -// -// CCX per-packet information embedded in RT_TCB. -// -#define RESET_CCX_PACKET_TX_INFO(_pTcb) \ - ((_pTcb)->CcxIappPacketType = CPT_NONE); \ - ((_pTcb)->CcxLtFrameNumber = 0) - -#define IS_CCX_LINK_TEST_REPLY(_pTcb) ((_pTcb)->CcxIappPacketType == CPT_LINK_TEST_REPLY) -#define SET_CCX_LINK_TEST_REPLY(_pTcb) ((_pTcb)->CcxIappPacketType = CPT_LINK_TEST_REPLY) - -#define GET_CCX_LINK_TEST_REPLY_FRAME_NUMBER(_pTcb) ((_pTcb)->CcxLtFrameNumber) -#define SET_CCX_LINK_TEST_REPLY_FRAME_NUMBER(_pTcb, _FrameNumber) ((_pTcb)->CcxLtFrameNumber = _FrameNumber) - - -typedef struct _CCX_SSIDL_SSID_FIELD{ - u1Byte ExtenCapab; // bit1: 1x bit2: WPS bit2~5 :MS reserve bit6.7: Cisco reserve - u1Byte Capability[4]; - u1Byte SSIDLen; // 0x00 0x40 0x96 0x00 - u1Byte SSID[1]; -}CCX_SSIDL_SSID_ELEMENT, *PCCX_SSIDL_SSID_ELEMENT; - - -// SSIDL Mutilcase-Chiper -#define CCX_IS_MCHIPER_NONE( _Capability ) ( _Capability[3] & 0x00 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_WEP40( _Capability ) ( _Capability[3] & 0x01 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_WEP104( _Capability ) ( _Capability[3] & 0x02 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_TKIP( _Capability ) ( _Capability[3] & 0x03 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_CCMP( _Capability ) ( _Capability[3] & 0x04 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_CKIP_CMIC( _Capability ) ( _Capability[3] & 0x05 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_CKIP( _Capability ) ( _Capability[3] & 0x06 ?TRUE:FALSE) -#define CCX_IS_MCHIPER_CMIC( _Capability ) ( _Capability[3] & 0x07 ?TRUE:FALSE) - -// SSIDL Untilcase-Chiper -#define CCX_IS_UCHIPER_NONE( _Capability ) ( _Capability[3] & 0x10 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WEP40( _Capability ) ( _Capability[3] & 0x20 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WEP104( _Capability ) ( _Capability[3] & 0x40 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_TKIP( _Capability ) ( _Capability[3] & 0x80 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_CCMP( _Capability ) ( _Capability[2] & 0x01 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_CKIP_CMIC( _Capability ) ( _Capability[2] & 0x02 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_CKIP( _Capability ) ( _Capability[2] & 0x04 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_CMIC( _Capability ) ( _Capability[2] & 0x08 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_WEP40( _Capability ) ( _Capability[2] & 0x10 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_WEP104( _Capability ) ( _Capability[2] & 0x20 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_TKIP( _Capability ) ( _Capability[2] & 0x40 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_CCMP( _Capability ) ( _Capability[2] & 0x80 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_CKIP_CMIC( _Capability ) ( _Capability[1] & 0x01 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_CKIP( _Capability ) ( _Capability[1] & 0x02 ?TRUE:FALSE) -#define CCX_IS_UCHIPER_WPA2_CMIC( _Capability ) ( _Capability[1] & 0x04 ?TRUE:FALSE) - -// SSIDL AKM -#define CCX_IS_AKM_WPA1_1X( _Capability ) ( _Capability[0] & 0x02 ?TRUE:FALSE) -#define CCX_IS_AKM_WPA1_PSK( _Capability ) ( _Capability[0] & 0x04 ?TRUE:FALSE) -#define CCX_IS_AKM_WPA2_1X( _Capability ) ( _Capability[0] & 0x08 ?TRUE:FALSE) -#define CCX_IS_AKM_WPA2_PSK( _Capability ) ( _Capability[0] & 0x10 ?TRUE:FALSE) -#define CCX_IS_AKM_WPA1_CCKM( _Capability ) ( _Capability[0] & 0x20 ?TRUE:FALSE) -#define CCX_IS_AKM_WPA2_CCKM( _Capability ) ( _Capability[0] & 0x40 ?TRUE:FALSE) - -#endif diff --git a/network/wlan/WDI/HEADER/ChannelType.h b/network/wlan/WDI/HEADER/ChannelType.h deleted file mode 100644 index 28444234..00000000 --- a/network/wlan/WDI/HEADER/ChannelType.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef __INC_CHANNEL_TYPE_H -#define __INC_CHANNEL_TYPE_H - - -#define HAL_PRIME_CHNL_OFFSET_DONT_CARE 0 -#define HAL_PRIME_CHNL_OFFSET_BELOW 1 -#define HAL_PRIME_CHNL_OFFSET_ABOVE 2 - - -typedef enum _DATA_SC{ - DATA_SC_DONOT_CARE = 0, - DATA_SC_20_ABOVE_OF_80MHZ = 1, - DATA_SC_20_BELOW_OF_80MHZ = 2, - DATA_SC_20_TOP_OF_80MHZ = 3, - DATA_SC_20_BOTTOM_OF_80MHZ = 4, - DATA_SC_20_RECV1 = 5, - DATA_SC_20_RECV2 = 6, - DATA_SC_20_RECV3 = 7, - DATA_SC_20_RECV4 = 8, - DATA_SC_40_ABOVE_OF_80MHZ = 9, - DATA_SC_40_BELOW_OF_80MHZ = 10, -}DATA_SC, *PDATA_SC_E; - -// Represent Channel Width -typedef enum _CHANNEL_WIDTH{ - CHANNEL_WIDTH_20 = 0, - CHANNEL_WIDTH_40 = 1, - CHANNEL_WIDTH_80 = 2, - CHANNEL_WIDTH_160 = 3, - CHANNEL_WIDTH_80_80 = 4, - CHANNEL_WIDTH_MAX = 5, -}CHANNEL_WIDTH, *PCHANNEL_WIDTH; - -// Represent Extention Channel Offset -typedef enum _EXTCHNL_OFFSET{ - EXTCHNL_OFFSET_NO_EXT = 0, - EXTCHNL_OFFSET_UPPER = 1, - EXTCHNL_OFFSET_NO_DEF = 2, - EXTCHNL_OFFSET_LOWER = 3, -}EXTCHNL_OFFSET, *PEXTCHNL_OFFSET; - - -// Represent Extention Channel Offset -typedef enum _EXTCHNL_OFFSET_JAR{ - //EXTCHNL_OFFSET_NO_EXT = 0, - EXTCHNL_OFFSET_ABOVE = 1, - //EXTCHNL_OFFSET_NO_DEF = 2, - EXTCHNL_OFFSET_BELOW = 3, -}EXTCHNL_OFFSET_JAR, *PEXTCHNL_OFFSET_JAR; - -typedef enum _CHNLOP{ - CHNLOP_NONE = 0, // No Action now - CHNLOP_SCAN = 1, // Scan in progress - CHNLOP_SWBW = 2, // Bandwidth switching in progress - CHNLOP_SWCHNL = 3, // Software Channel switching in progress -} CHNLOP, *PCHNLOP; - -typedef struct _RT_CHANNEL_INFO { - DECLARE_RT_OBJECT(_RT_CHANNEL_INFO); - - CHANNEL_WIDTH RegBWSetting; - BOOLEAN bSwBwInProgress; - CHNLOP ChnlOp; - - u1Byte PrimaryChannelNumber; - CHANNEL_WIDTH CurrentChannelBandWidth; - u1Byte CurrentChannelCenterFrequency; - - EXTCHNL_OFFSET Ext20MHzChnlOffsetOf40MHz; - EXTCHNL_OFFSET Ext40MHzChnlOffsetOf80MHz; - - RT_TIMER SwBwTimer; -} RT_CHANNEL_INFO, *PRT_CHANNEL_INFO; - -typedef struct _CHANNEL_COMMON_CONTEXT { - u1Byte PrimaryChannelNumber; - CHANNEL_WIDTH CurrentChannelBandWidth; - u1Byte CurrentChannelCenterFrequency; - - EXTCHNL_OFFSET Ext20MHzChnlOffsetOf40MHz; - EXTCHNL_OFFSET Ext40MHzChnlOffsetOf80MHz; -} CHANNEL_COMMON_CONTEXT, *PCHANNEL_COMMON_CONTEXT; - - -#endif diff --git a/network/wlan/WDI/HEADER/CustomOid.h b/network/wlan/WDI/HEADER/CustomOid.h deleted file mode 100644 index 5fd4a644..00000000 --- a/network/wlan/WDI/HEADER/CustomOid.h +++ /dev/null @@ -1,890 +0,0 @@ -#ifndef __CUSTOM_OID_H -#define __CUSTOM_OID_H - - -//3***************************************************************************************************** -//3 0xFF818000 - 0xFF81802F RTL81xx Mass Production Kit -//3 0xFF818500 - 0xFF81850F RTL8185 Setup Utility -//3 0xFF818580 - 0xFF81858F RTL8185 Phy Status Utility -//3 0xFF818700 - 0xFF8187FF RTL8187 related -//3 0xFF819000 - 0xFF8190FF RTL8190 related - -// by Owen for Production Kit -//3 For Production Kit with Agilent Equipments -//3 in order to make our custom oids hopefully somewhat unique -//3 we will use 0xFF (indicating implementation specific OID) -//3 81(first byte of non zero Realtek unique identifier) -//3 80 (second byte of non zero Realtek unique identifier) -//3 XX (the custom OID number - providing 255 possible custom oids) - -//3***************************************************************************************************** - - -//3-------------------------------------------------------------------- -//3 0xFF8180xx: Mass Prodution -//3-------------------------------------------------------------------- -#define OID_RT_PRO_RESET_DUT 0xFF818000 -#define OID_RT_PRO_SET_DATA_RATE 0xFF818001 -#define OID_RT_PRO_START_TEST 0xFF818002 -#define OID_RT_PRO_STOP_TEST 0xFF818003 -#define OID_RT_PRO_SET_PREAMBLE 0xFF818004 -#define OID_RT_PRO_SET_TX_PMAC 0xFF818005 -#define OID_RT_PRO_SET_TX_TMAC 0xFF818006 -#define OID_RT_PRO_SET_MANUAL_DIVERSITY_BB 0xFF818007 -#define OID_RT_PRO_SET_CHANNEL_DIRECT_CALL 0xFF818008 -#define OID_RT_PRO_SET_SLEEP_MODE_DIRECT_CALL 0xFF818009 -#define OID_RT_PRO_SET_WAKE_MODE_DIRECT_CALL 0xFF81800A -#define OID_RT_PRO_SET_TX_CONTINUOUS_DIRECT_CALL 0xFF81800B -#define OID_RT_PRO_SET_SINGLE_CARRIER_TX_CONTINUOUS 0xFF81800C -#define OID_RT_PRO_SET_TX_ANTENNA_BB 0xFF81800D -#define OID_RT_PRO_SET_ANTENNA_BB 0xFF81800E -#define OID_RT_PRO_SET_CR_SCRAMBLER 0xFF81800F -#define OID_RT_PRO_SET_CR_NEW_FILTER 0xFF818010 -#define OID_RT_PRO_SET_TX_POWER_CONTROL 0xFF818011 -#define OID_RT_PRO_SET_CR_TX_CONFIG 0xFF818012 -#define OID_RT_PRO_GET_TX_POWER_CONTROL 0xFF818013 -#define OID_RT_PRO_GET_CR_SIGNAL_QUALITY 0xFF818014 -#define OID_RT_PRO_SET_CR_SETPOINT 0xFF818015 -#define OID_RT_PRO_SET_INTEGRATOR 0xFF818016 -#define OID_RT_PRO_SET_SIGNAL_QUALITY 0xFF818017 -#define OID_RT_PRO_GET_INTEGRATOR 0xFF818018 -#define OID_RT_PRO_GET_SIGNAL_QUALITY 0xFF818019 -#define OID_RT_PRO_QUERY_EEPROM_TYPE 0xFF81801A -#define OID_RT_PRO_WRITE_MAC_ADDRESS 0xFF81801B -#define OID_RT_PRO_READ_MAC_ADDRESS 0xFF81801C -#define OID_RT_PRO_WRITE_CIS_DATA 0xFF81801D -#define OID_RT_PRO_READ_CIS_DATA 0xFF81801E -#define OID_RT_PRO_WRITE_POWER_CONTROL 0xFF81801F -#define OID_RT_PRO_READ_POWER_CONTROL 0xFF818020 -#define OID_RT_PRO_WRITE_EEPROM 0xFF818021 -#define OID_RT_PRO_READ_EEPROM 0xFF818022 -#define OID_RT_PRO_RESET_TX_PACKET_SENT 0xFF818023 -#define OID_RT_PRO_QUERY_TX_PACKET_SENT 0xFF818024 -#define OID_RT_PRO_RESET_RX_PACKET_RECEIVED 0xFF818025 -#define OID_RT_PRO_QUERY_RX_PACKET_RECEIVED 0xFF818026 -#define OID_RT_PRO_QUERY_RX_PACKET_CRC32_ERROR 0xFF818027 -#define OID_RT_PRO_QUERY_CURRENT_ADDRESS 0xFF818028 -#define OID_RT_PRO_QUERY_PERMANENT_ADDRESS 0xFF818029 -#define OID_RT_PRO_SET_PHILIPS_RF_PARAMETERS 0xFF81802A -#define OID_RT_PRO_SET_CARRIER_SUPPRESSION_TX_CONTINUOUS 0xFF81802B -#define OID_RT_PRO_RECEIVE_PACKET 0xFF81802C -// added by Owen on 04/08/03 for Cameo's request -#define OID_RT_PRO_WRITE_EEPROM_BYTE 0xFF81802D -#define OID_RT_PRO_READ_EEPROM_BYTE 0xFF81802E -#define OID_RT_PRO_SET_MODULATION 0xFF81802F -// - -// 200705/24 mh add for bandwitdh test of mp temporarily -#define OID_RT_PRO_SET_BANDWIDTH 0xFF818030 -#define OID_RT_PRO_QUERY_BANDWIDTH 0xFF818031 -#define OID_RT_PRO_SET_TX_AGC_OFFSET 0xFF818032 -// 2007/08/22 cosa add for MP -#define OID_RT_PRO_SET_CRYSTALCAP 0xFF818033 -// 2008/01/03 cosa add for MP -#define OID_RT_PRO_TRIGGER_RF_THERMAL_METER 0xFF818034 -#define OID_RT_PRO_READ_RF_THERMAL_METER 0xFF818035 -#define OID_RT_PRO_GET_TX_POWER_INDEX 0xFF818036 -#define OID_RT_PRO_GET_CRYSTALCAP 0xFF818037 -#define OID_RT_PRO_AUTOLOAD_STATUS 0xFF818038 -#define OID_RT_PRO_MP_TEST_START 0xFF818039 -// 2009/02/04 cosa add for MP -#define OID_RT_PRO_GET_TX_POWER_DIFF 0xFF81803A -#define OID_RT_PRO_GET_PGFmtVer 0xFF81803B -#define OID_RT_PRO_SET_LED_CONTROL 0xFF81803C -#define OID_RT_PRO_READ_WPS_BUTTON_PUSHED 0xFF81803D -#define OID_RT_PRO_GET_CALCULATED_TX_POWER_INDEX 0xFF81803E -#define OID_RT_PRO_GENERAL_QUERY 0xFF81803F -/* 2007/05/30 MH Define OID for debug command between UI and driver. There are - three steps between UI and driver as below. */ -#define OID_RT_PRO_DBGCMD_SEND 0xFF818040 -#define OID_RT_PRO_DBGCMD_CHECK 0xFF818041 -#define OID_RT_PRO_DBGCMD_RETURN 0xFF818042 -#define OID_RT_PRO_SET_SINGLE_TONE_TX 0xFF818043 -// Add EFUSE R/W after 92S -#define OID_RT_PRO_WRITE_EFUSE 0xFF818044 -#define OID_RT_PRO_READ_EFUSE 0xFF818045 -#define OID_RT_PRO_UPDATE_EFUSE 0xFF818046 -#define OID_RT_PRO_GET_EFUSE_UTILIZE 0xFF818047 -#define OID_RT_PRO_CHK_AUTOLOAD 0xFF818049 -#define OID_RT_PRO_TXPWR_TRACK 0xFF81804A -#define OID_RT_PRO_1x1_RXCOMBINE 0xFF81804B -#define OID_RT_PRO_UPDATE_EFUSE_MAP 0xFF81804D //read real efuse content - -// Add Efuse R/W for BT -#define OID_RT_PRO_WRITE_EFUSE_BT 0xFF818050 -#define OID_RT_PRO_READ_EFUSE_BT 0xFF818051 -#define OID_RT_PRO_UPDATE_EFUSE_BT 0xFF818052 -#define OID_RT_PRO_GET_EFUSE_UTILIZE_BT 0xFF818053 -#define OID_RT_PRO_UPDATE_EFUSE_MAP_BT 0xFF818054 //read real efuse content -#define OID_RT_PRO_READ_PHYSICAL_EFUSE 0xFF818055 -#define OID_RT_PRO_QUERY_LED_STATUS 0xFF818056 - - -#define OID_RT_PRO_DBG_CONTROL 0xFF81807F - -//Sean -#define OID_RT_DRIVER_OPTION 0xFF818080 -#define OID_RT_RF_OFF 0xFF818081 -#define OID_RT_AUTH_STATUS 0xFF818082 -#define OID_RT_INACTIVE_PS 0xFF818083 -#define OID_RT_PRO_RF_PATH_SWITCH 0xFF818084 -#define OID_RT_QUERY_RF_MODE 0xFF818085 -#define OID_RT_PRO_GET_BOARD_TYPE 0xFF818086 -#define OID_RT_PRO_QUERY_INTERFACE_INDEX 0xFF818087 -#define OID_RT_PRO_QUERY_SLAVE_DMSP 0xFF818088 -#define OID_RT_PRO_QUERY_RF_STATUS 0xFF818089 -#define OID_RT_PRO_QUERY_CHANNEL_SWITCH_STATUS 0xFF81808A -#define OID_RT_PRO_DISABLE_IQK_LCK_BY_THERMAL 0xFF81808B -#define OID_RT_PRO_QUERY_ISVS 0xFF81808C -#define OID_RT_PRO_TRIGGER_DPK 0xFF81808D -#define OID_RT_PRO_QUERY_ISVL 0xFF81808E -#define OID_RT_PRO_RF_ON_OFF 0xFF818091 -#define OID_RT_PRO_TEST_FW_DL 0xFF818092 -#define OID_RT_PRO_QUERY_TX_PHY_PACKET_SENT 0xFF818093 -#define OID_RT_PRO_QUERY_RX_PHY_PACKET_RECEIVED 0xFF818094 -#define OID_RT_PRO_QUERY_RX_PHY_PACKET_CRC32_ERROR 0xFF818095 -#define OID_RT_PRO_TRIGGER_MPT_DIG 0xFF818096 -#define OID_RT_PRO_POWER_LIMIT_TABLE_SEL 0xFF818097 -#define OID_RT_PRO_CUSTOMER_POWER_BY_RATE_TABLE_QUERY 0xFF818098 -#define OID_RT_PRO_CUSTOMER_POWER_LIMIT_TABLE_QUERY 0xFF818099 -#define OID_RT_PRO_CUSTOMER_POWER_BY_RATE_TABLE_RESET 0xFF81809A -#define OID_RT_PRO_CUSTOMER_POWER_LIMIT_TABLE_RESET 0xFF81809B -#define OID_RT_PRO_QUERY_RX_MAC_PACKET_RECEIVED 0xFF81809C -#define OID_RT_PRO_QUERY_RX_MAC_PACKET_CRC32_ERROR 0xFF81809D -#define OID_RT_PRO_GET_EFUSE_MASK 0xFF81809E -#define OID_RT_PRO_QUERY_LAST_ERROR_MP 0xFF81809F -#define OID_RT_PRO_CFO_TRACK 0xFF8180A0 -#define OID_RT_PRO_GET_CUT_VERSION 0xFF8180A1 -#define OID_RT_PRO_GET_PHY_PARAM_VERSION 0xFF8180A2 -#define OID_RT_PRO_WRITE_PSEUDO_EFUSE 0xFF8180A3 -#define OID_RT_PRO_TRIGGER_LCK 0xFF8180A4 -#define OID_RT_PRO_SET_TX_POWER_FOR_ALL_RATE 0xFF8180A5 -#define OID_RT_QUERY_RF_PATH 0xFF8180A6 -#define OID_RT_SEND_SPECIFIC_PACKET_MP 0xFF8180A7 -#define OID_RT_SEND_ONE_PACKET_MP 0xFF8180A8 -#define OID_RT_QUERY_ONE_BYTE_ALIGNMENT 0xFF8180A9 - - -//3-------------------------------------------------------------------- -//3 0xFF03xxxx~ -//3-------------------------------------------------------------------- - -#define OID_RT_GET_CONNECT_STATE 0xFF030001 -#define OID_RT_RESCAN 0xFF030002 -#define OID_RT_SET_KEY_LENGTH 0xFF030003 - -#define OID_RT_SET_DEFAULT_KEY_ID 0xFF030004 -#define OID_RT_GET_DEFAULT_KEY_ID 0xFF030004 //Same defnition as OID_RT_SET_DEFAULT_KEY_ID but provide query - - -//3-------------------------------------------------------------------- -//3 0xFF01xxxx~ -//3-------------------------------------------------------------------- -#define OID_RT_SET_CHANNEL 0xFF010182 -#define OID_RT_SET_SNIFFER_MODE 0xFF010183 -#define OID_RT_GET_SIGNAL_QUALITY 0xFF010184 -#define OID_RT_GET_SMALL_PACKET_CRC 0xFF010185 -#define OID_RT_GET_MIDDLE_PACKET_CRC 0xFF010186 -#define OID_RT_GET_LARGE_PACKET_CRC 0xFF010187 -#define OID_RT_GET_TX_RETRY 0xFF010188 -#define OID_RT_GET_RX_RETRY 0xFF010189 -#define OID_RT_GET_RX_TOTAL_PACKET 0xFF010190 -#define OID_RT_GET_TX_BEACON_OK 0xFF010191 -#define OID_RT_GET_TX_BEACON_ERR 0xFF010192 -#define OID_RT_GET_RX_ICV_ERR 0xFF010193 -#define OID_RT_ENCRYPTION_ALGORITHM 0xFF010194 -#define OID_RT_SET_SCAN_OPERATION 0xFF010195 -#define OID_RT_GET_PREAMBLE_MODE 0xFF010196 -#define OID_RT_GET_DRIVER_UP_DELTA_TIME 0xFF010197 -#define OID_RT_GET_AP_IP 0xFF010198 -#define OID_RT_GET_CHANNELPLAN 0xFF010199 -#define OID_RT_SET_PREAMBLE_MODE 0xFF01019A -#define OID_RT_SET_BCN_INTVL 0xFF01019B -#define OID_RT_GET_BCN_INTVL 0xFF01019B //same definition as OID_RT_SET_BCN_INTVL but provide query -#define OID_RT_GET_RF_VENDER 0xFF01019C -#define OID_RT_DEDICATE_PROBE 0xFF01019D -#define OID_RT_PRO_RX_FILTER_PATTERN 0xFF01019E - -#define OID_RT_BEAMFORMING_START 0xFF0101A0 -#define OID_RT_BEAMFORMING_END 0xFF0101A1 -#define OID_RT_BEAMFORMING_PERIOD 0xFF0101A2 - -#define OID_RT_ADCSMP_TRIG 0xFF0101A4 -#define OID_RT_ADCSMP_STOP 0xFF0101A5 - -#define OID_RT_GET_TOTAL_TX_BYTES 0xFF0101A7 -#define OID_RT_GET_TOTAL_RX_BYTES 0xFF0101A8 -#define OID_RT_CURRENT_TX_POWER_LEVEL 0xFF0101A9 -#define OID_RT_GET_CHANNEL 0xFF0101AC -#define OID_RT_SET_CHANNELPLAN 0xFF0101AD -#define OID_RT_GET_HARDWARE_RADIO_OFF 0xFF0101AE -#define OID_RT_SCAN_AVAILABLE_BSSID 0xFF0101B0 -#define OID_RT_GET_HARDWARE_VERSION 0xFF0101B1 -#define OID_RT_RESET_LOG 0xFF0101B7 -#define OID_RT_GET_LOG 0xFF0101B8 -#define OID_RT_SET_INDICATE_HIDDEN_AP 0xFF0101B9 -#define OID_RT_GET_HEADER_FAIL 0xFF0101BA -#define OID_RT_SUPPORTED_WIRELESS_MODE 0xFF0101BB -#define OID_RT_GET_CHANNEL_LIST 0xFF0101BC -#define OID_RT_GET_SCAN_IN_PROGRESS 0xFF0101BD -#define OID_RT_GET_TX_INFO 0xFF0101BE -#define OID_RT_IO_READ_WRITE_INFO 0xFF0101BF -#define OID_RT_IO_READ_WRITE 0xFF0101C0 -// For Netgear request. -#define OID_RT_FORCED_DATA_RATE 0xFF0101C1 -// Auto-Config OID. -#define OID_RT_WIRELESS_MODE_FOR_SCAN_LIST 0xFF0101C2 -#define OID_RT_GET_BSS_WIRELESS_MODE 0xFF0101C3 -// For AZ project. -#define OID_RT_SCAN_WITH_MAGIC_PACKET 0xFF0101C4 -// Auto select channel of the BSS. -#define OID_RT_AUTO_SELECT_CHANNEL 0xFF0101C6 -//for AutoTurbomode -#define OID_RT_TURBOMODE 0xFF0101C7 -// Send specific 802.11 frame for developing and verification purpose, 2005.12.23, by rcnjko. -#define OID_RT_SEND_SPECIFIC_PACKET 0xFF0101C8 -// For debug purpose. -#define OID_RT_DBG_COMPONENT 0xFF0101C9 -#define OID_RT_DBG_LEVEL 0xFF0101CA -#define OID_RT_DEVICE_ID_INFO 0xFF0101CB // To identify Realtek WLAN device, 2006.01.24, by rcnjko. - -#define OID_RT_HIDDEN_SSID 0xFF0101CC -#define OID_RT_LOCKED_STA_ADDRESS 0xFF0101CD -#define OID_RT_PER_STA_DATA_RATE 0xFF0101CE - -#define OID_RT_SimpleConfScan 0xFF0101D0 -#define OID_RT_WPS_SET_IE_FRAGMENT 0xFF010250 // modified from 0xFF010210 to 0xFF010250 by haich, 2011.04.20 -// For CCX test plan v3.61 4.3, 060927, by rcnjko. -#define OID_RT_TX_POWER 0xFF0101D2 -#define OID_RT_MAC_FILTER_TYPE 0xFF0101D3 -#define OID_RT_WEP_STATUS 0xFF0101D4 -#define OID_RT_AUTHENTICATION_MODE 0xFF0101D5 -#define OID_RT_ADD_KEY 0xFF0101D6 -#define OID_RT_UI_ENABLE_HIGH_PRIORITY 0xFF0101D7 -#define OID_RT_UI_DISABLE_HIGH_PRIORITY 0xFF0101D8 -//For scan limit -#define OID_RT_SET_SCAN_LIMIT 0xFF0101D9 -// 8187BMP for product string in eeprom. Added by Bruce, 2007-1-19. -#define OID_RT_PRO_CORRECT_PRODUCT_STRING 0xFF0101DA -#define OID_RT_PRO_CHECK_PRODUCT_STRING 0xFF0101DB -// For ASUS request -#define OID_RT_FILTER_STA_ADDRESS 0xFF0101DC - -// The range in dBm for setting tx power. -#define OID_RT_TX_POWER_RANGE 0xFF0101DD -// The TX power Level For Notebook. -#define OID_RT_TX_POWER_LEVEL 0xFF0101DF - -#define OID_RT_WPS_RECIEVE_PACKET 0xFF0101DE - -// For PSP XLink status. 2007.01.12, by shien chang. -#define OID_RT_GET_PSP_XLINK_STATUS 0xFF0101CF -#define OID_RT_SET_PSP_XLINK_STATUS 0xFF0101E0 - -// For WMM and WMM-UAPSD, 2007.01.15, by shien chang. -#define OID_RT_GET_WMM_ENABLE 0xFF0101E1 -#define OID_RT_SET_WMM_ENABLE 0xFF0101E2 -#define OID_RT_GET_WMM_UAPSD_ENABLE 0xFF0101E3 -#define OID_RT_SET_WMM_UAPSD_ENABLE 0xFF0101E4 - -// 070208, rcnjko: For 802.11d. -#define OID_RT_DOT11D 0xFF0101E5 - -// 070301, rcnjko: for driver log event mechanism. -#define OID_RT_GET_LOGV2_TYPE_LIST 0xFF0101E6 -#define OID_RT_GET_LOGV2_ATTR_LIST 0xFF0101E7 -#define OID_RT_GET_LOGV2_DATA_LIST 0xFF0101E8 - -//For CCX yest plane v3.61 4.4 , 061020 by CCW -#define OID_RT_ROAM_TO_SELECT_BSSID 0xFF0101E9 - -// For WMM Admission Control, 2007.08.16, by shine chang. -#define OID_RT_SEND_WMM_ADDTS 0xFF0101EA -#define OID_RT_SEND_WMM_DELTS 0xFF0101EB - -// Custom Mesh OIDs. -#define OID_RT_MESH_MODE 0xFF0101EC -#define OID_RT_MESH_ID 0xFF0101ED - -// Custom Corega OID -#define OID_RT_CURRENT_WLRELESSMODE 0xFF0101EE - -// Send customized 802.11 frame for developing and verification purpose -#define OID_RT_SEND_CUSTOMIZED_PACKET 0xFF0101EF - -// Dot11k Radio Measurement, by Bruce, 2009-08-05. -#define OID_RT_SET_DOT11K_CHANNEL_LOAD 0xFF0101F0 -#define OID_RT_QUERY_DOT11K_CHANNEL_LOAD 0xFF0101F1 -#define OID_RT_SET_DOT11K_NOISE_HISTOGRAM 0xFF0101F2 -#define OID_RT_QUERY_DOT11K_NOISE_HISTOGRAM 0xFF0101F3 - -// For 11g protection mode!! -//#define OID_RT_FRAME_BURSTING 0xFF0101F5 - -// For Intel PROXIMITY mode -#define OID_RT_INTEL_PROXIMITY_MODE 0xFF0101F6 -#define OID_RT_INTEL_PROXIMITY_SEND 0xFF0101F7 - -// For Wi-Fi P2P -#define OID_RT_P2P_VERSION 0xFF0100EF -#define OID_RT_P2P_MAX_VERSION 0xFF0100F0 -#define OID_RT_P2P_ACCEPT_INVITATION_REQ 0xFF0101F8 -#define OID_RT_P2P_MODE 0xFF0101F9 -#define OID_RT_P2P_DEVICE_DISCOVERY 0xFF0101FA -#define OID_RT_P2P_ENUM_SCAN_LIST 0xFF0101FB -#define OID_RT_P2P_CONNECT_REQUEST 0xFF0101FC -#define OID_RT_P2P_DISCONNECT_REQUEST 0xFF0101FD -#define OID_RT_P2P_PROVISION_IE 0xFF0101FE -#define OID_RT_P2P_FLUSH_SCAN_LIST 0xFF0101FF -#define OID_RT_P2P_PROVISIONING_RESULT 0xFF010200 -#define OID_RT_P2P_INVITE_PEER 0xFF010201 -#define OID_RT_P2P_GO_INTENT 0xFF010202 -#define OID_RT_P2P_DEVICE_DISCOVERABILITY_REQ 0xFF010203 -#define OID_RT_P2P_PROVISION_DISCOVERY 0xFF010204 -#define OID_RT_P2P_CAPABILITY 0xFF010205 -#define OID_RT_P2P_GO_SSID 0xFF010206 -#define OID_RT_P2P_POWER_SAVE 0xFF010207 -#define OID_RT_P2P_OP_CHANNEL 0xFF010208 -#define OID_RT_P2P_LISTEN_CHANNEL 0xFF010209 -#define OID_RT_P2P_EXTENDED_LISTEN_TIMING 0xFF01020A -#define OID_RT_P2P_SERVICE_DISCOVERY_REQ 0xFF01020B -#define OID_RT_P2P_SERVICE_DISCOVERY_RSP 0xFF01020C -#define OID_RT_P2P_GO_BEACON_INTERVAL 0xFF01020D -#define OID_RT_P2P_GO_NEGO_RESULT 0xFF01020E -#define OID_RT_P2P_INTERFACE_ADDRESS 0xFF01020F -#define OID_RT_P2P_GO_PREPROVISIONING 0xFF010210 -#define OID_RT_P2P_CLIENT_PREPROVISIONING 0xFF010211 -#define OID_RT_P2P_GO_SSID_POSTFIX 0xFF010212 -#define OID_RT_P2P_SELF_DEV_DESC 0xFF010213 -#define OID_RT_P2P_DEVICE_ADDRESS 0xFF010214 -#define OID_RT_P2P_CHANNEL_LIST 0xFF010215 -#define OID_RT_CUSTOMIZED_SCAN 0xFF010216 -#define OID_RT_P2P_SERVICE_FRAG_THRESHOLD 0xFF010217 - -// For customized association IE -#define OID_RT_CUSTOMIZED_ASSOCIATION_PARAM 0xFF010218 - -// For P2PS -#define OID_RT_P2P_SERVICE_REQUEST 0xFF010240 - - -// SUPPORT_WPS_INFO -#define OID_RT_WPS_INFORMATION 0xFF01021B - -// Antenna detection info which was reported from single tone with open circuit measurement. Added by Roger, 2012.11.27. -#define OID_RT_ANTENNA_DETECTED_INFO 0xFF01021C - -//For 360 Request Ken -#define OID_RT_FILTER_DEFAULT_PERMITED 0xFF01021D - -// For Wi-Fi P2P -#define OID_RT_P2P_PROFILE_LIST 0xFF010230 - -#define OID_RT_P2P_FULL_SSID 0xFF010231 - -// For NAN -#define OID_RT_NAN_TEST 0xFF010240 -#define OID_RT_NAN_SDF 0xFF010241 -#define OID_RT_NAN_INIT_TSF 0xFF010242 -#define OID_RT_NAN_FURTHER_AVAILABILITY_TX 0xFF010243 -#define OID_RT_NAN_FURTHER_AVAILABILITY_RX 0xFF010244 -#define OID_RT_NAN_BEACON_SEND_TYPE 0xFF010245 -#define OID_RT_NAN_OPER_CHNL_2G 0xFF010246 -#define OID_RT_NAN_OPER_CHNL_5G 0xFF010247 -#define OID_RT_NAN_GET_AVAILABILITY_INFO 0xFF010248 -#define OID_RT_NAN_BEACON_AGE_TIMEOUT 0xFF010249 - -// Vincent 8185MP -#define OID_RT_PRO_RX_FILTER 0xFF0111C0 -#define OID_RT_PRO_WRITE_REGISTRY 0xFF0111C1 -#define OID_RT_PRO_READ_REGISTRY 0xFF0111C2 -#define OID_RT_PRO_SET_INITIAL_GAIN 0xFF0111C3 -#define OID_RT_PRO_SET_BB_RF_STANDBY_MODE 0xFF0111C4 -#define OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE 0xFF0111C5 -#define OID_RT_PRO_SET_TX_CHARGE_PUMP 0xFF0111C6 -#define OID_RT_PRO_SET_RX_CHARGE_PUMP 0xFF0111C7 -#define OID_RT_PRO_RF_WRITE_REGISTRY 0xFF0111C8 -#define OID_RT_PRO_RF_READ_REGISTRY 0xFF0111C9 -#define OID_RT_PRO_QUERY_RF_TYPE 0xFF0111CA -#define OID_RT_PRO_SW_RF_READ_REGISTRY 0xFF0111CB //SW Three Wire for SD3 Required. -#define OID_RT_PRO_SW_RF_WRITE_REGISTRY 0xFF0111CC //SW Three Wire for SD3 Required. -#define OID_RT_PRO_SEND_RAW_DATA 0xFF0111CD - -// AP OID -#define OID_RT_AP_GET_ASSOCIATED_STATION_LIST 0xFF010300 -#define OID_RT_AP_GET_CURRENT_TIME_STAMP 0xFF010301 -#define OID_RT_AP_SWITCH_INTO_AP_MODE 0xFF010302 - -#define OID_RT_AP_SET_DTIM_PERIOD 0xFF010303 -#define OID_RT_AP_GET_DTIM_PERIOD 0xFF010303 //Same definition as OID_RT_AP_SET_DTIM_PERIOD but provide query - -#define OID_RT_AP_SUPPORTED 0xFF010304 // Determine if driver supports AP mode. 2004.08.27, by rcnjko. -#define OID_RT_AP_SET_PASSPHRASE 0xFF010305 // Set WPA-PSK passphrase into authenticator. 2005.07.08, byrcnjko. - -#define OID_RT_AP_WDS_MODE 0xFF010306 // 0: WDS disabled, 1: WDS enabled. 2006.06.12, by rcnjko. -#define OID_RT_AP_WDS_AP_LIST 0xFF010307 // WDS AP address list. -#define OID_RT_AP_GET_VWIFI_STATUS 0xFF010308 -#define OID_RT_AP_GET_ASSOC_STA_COUNT 0xFF010310 -#define OID_RT_AP_GET_CLOUD_KEY_EX 0xFF010313 // Get EFUSE 0x122-12F content,. -#define OID_RT_AP_SET_BEACON_START 0xFF010311 // Start AP beacon after ICS & DHCP ready. -// - -// 802.11 engineering page OID -// --802.11h -// --802.11d -#define OID_RT_SET_80211H_SWITCH_CHANNEL 0xFF010400 - -//BT related -#define OID_RT_MOTOR_BT_802_11_PAL 0xFF010401 - - -#define OID_RT_GET_ROAM_COUNT 0xFF010406 -#define OID_RT_GET_DISASSOC_COUNT 0xFF010407 -#define OID_RT_PRO_READ_REGISTRY_SIC 0xFF010408 -#define OID_RT_PRO_WRITE_REGISTRY_SIC 0xFF010409 -#define OID_RT_BT_CONTROL 0xFF01040A -#define OID_RT_HAL_CONTROL 0xFF01040B - -#define OID_RT_FPGA_PHY_RDY 0xFF010410 -#define OID_RT_HOST_SUSPEND_STATUS 0xFF010411 -#define OID_RT_SDIO_REG_CTRL 0xFF010412 - - -//For MacOSX 10.4.0 "Network Utility" LinkSpeed workaround -#define OID_RT_SET_TIGER_WORKAROUND 0xFF010413 -//For MacOSX UI -#define OID_RT_COUNTRY_NOT_SUPPORT_AC 0xFF010414 -#define OID_RT_SET_BEAMFORM_CAP 0xFF010415 -#define OID_RT_GET_DRIVER_VERSION 0xFF010416 -#define OID_RT_SET_PHY_ADAPTIVITY 0xFF010417 -#define OID_RT_NETWORK_STATUS 0xFF010418 -#define OID_RT_GET_BSS_NUMBER 0xFF010419 -#define OID_RT_SHAREDKEY_AUTHENTICATION 0xFF01041A -#define OID_RT_SCAN_SSID_AND_LINK 0xFF01041B -//-------------------------------------------------------------------- -// 0xFF0105xx: For Exta AP mode -//-------------------------------------------------------------------- -// Star or Stop Exta AP mode -#define OID_RT_EXTAP_SWITCH_INTO_AP_MODE 0xFF010501 -#define OID_RT_EXTAP_GET_APMODE 0xFF010502 -// Set or Get Auth mode : OPEN WPA WPA2 -#define OID_RT_EXTAP_SET_AUTHENTICATION_MODE 0xFF010503 -#define OID_RT_EXTAP_GET_AUTHENTICATION_MODE 0xFF010504 -// Set or Get Encrypt Mode -#define OID_RT_EXTAP_SET_ENCRYPTION_ALGORITHM 0xFF010505 -#define OID_RT_EXTAP_GET_ENCRYPTION_ALGORITHM 0xFF010506 -// Set WPA or WPA2 PSK -#define OID_RT_EXTAP_SET_PASSPHRASE 0xFF010507 -// Set Key : Just for WEP key and Transmit Key index -#define OID_RT_EXTAP_SET_ADD_WEP_KEY 0xFF010508 -#define OID_RT_EXTAP_SET_DEFAULT_KEY_ID 0xFF010509 -// Set Exta AP SSID -#define OID_RT_EXTAP_SET_SSID 0xFF01050a -// Query Exta AP Station List -#define OID_RT_EXTAP_GET_ASSOCIATED_STATION_LIST 0xFF01050b - - -// WiDi related -#define OID_RT_ROAM_FAKE_SIGNAL 0xFF010600 - -// For WFi Display Specified Request -#define OID_RT_WFD_REQUEST 0xFF0106A0 - -// For NAN Specified Request -#define OID_RT_NAN_REQUEST 0xFF0106A1 - -// -// Description: -// The version of RT_OBJ_HDR_DRVIF_VERSION used in the current driver. -// Size: -// ULONG -// Value: -// Driver combines the minimal major and minor versions into single version. -// Direction: -// Query -// Remark: -// This REQ_ID supports query only. -// -#define OID_RT_OBJ_HDR_VERSION 0xFF0106A2 - -// -// Description: -// The version of RT_OBJ_HDR_DRVIF_DATE used in the current driver. -// Size: -// ULONG -// Value: -// Driver combines the year and date into this field. -// Direction: -// Query -// Remark: -// This supports query only. -// -#define OID_RT_OBJ_HDR_DATE 0xFF0106A3 - - - -// Scope: 0xFF010801 ~ 0xFF0108FF -// For test tool. 2010.12.15. by tynli -#define OID_RT_CONTROL_LPS 0xFF010800 -#define OID_RT_CONTROL_IPS 0xFF010801 -#define OID_RT_CLEAR_ANTENNA_TEST_VAL 0xFF010802 -// For debug. -#define OID_RT_PNP_POWER 0xff010803 - -#define OID_RT_FORCED_BUG_CHECK 0xff010804 - -// For LC -#define OID_RT_LC_STOP_SCAN 0xFF010901 -#define OID_RT_SYSTEM_POWER_STATE_SHUTDOWN 0xFF010902 // LC S5 WoWLAN - -//For Comfast -#define OID_RT_GET_CUSTOMIZE_BSS_LIST 0xFF010910 - -//3-------------------------------------------------------------------- -//3 0xFF8185xx: -//3-------------------------------------------------------------------- -// by Owen for RTL8185 Phy Status Report Utility -#define OID_RT_UTILITY_FALSE_ALARM_COUNTERS 0xFF818580 -#define OID_RT_UTILITY_SELECT_DEBUG_MODE 0xFF818581 -#define OID_RT_UTILITY_SELECT_SUBCARRIER_NUMBER 0xFF818582 -#define OID_RT_UTILITY_GET_RSSI_STATUS 0xFF818583 -#define OID_RT_UTILITY_GET_FRAME_DETECTION_STATUS 0xFF818584 -#define OID_RT_UTILITY_GET_AGC_AND_FREQUENCY_OFFSET_ESTIMATION_STATUS 0xFF818585 -#define OID_RT_UTILITY_GET_CHANNEL_ESTIMATION_STATUS 0xFF818586 - -// -// by Owen on 03/09/19-03/09/22 for RTL8185 -#define OID_RT_WIRELESS_MODE 0xFF818500 -#define OID_RT_SUPPORTED_RATES 0xFF818501 -#define OID_RT_DESIRED_RATES 0xFF818502 -#define OID_RT_WIRELESS_MODE_STARTING_ADHOC 0xFF818503 -#define OID_RT_ADHOC_DEFAULT_WIRELESS_MODE 0xFF818504 - - - -// Start for Real WoW v2 -#define OID_RT_CUSTOMER_ID_INFO 0xFF8168FA -#define OID_RT_CUSTOMER_WOW_WAKEUPCODE 0xFF8168FB -#define OID_RT_CUSTOMER_WOW_S5_SUPPORT 0xFF8168FC -#define OID_RT_CUSTOMER_WOW_S5_INFO 0xFF8168FD - - - -//3 -------------------------------------------------------------------- -//3 0xFF8187xx: 8187 related -//3-------------------------------------------------------------------- - -// 8187MP. 2004.09.06, by rcnjko. -#define OID_RT_PRO8187_WI_POLL 0xFF818780 -#define OID_RT_PRO_WRITE_BB_REG 0xFF818781 -#define OID_RT_PRO_READ_BB_REG 0xFF818782 -// - -// 8187MP for KY's request. 2005.09.09, by rcnjko. -#define OID_RT_PRO_ENABLE_ACK_COUNTER 0xFF818783 -#define OID_RT_PRO_RESET_ACK_COUNTER 0xFF818784 -#define OID_RT_PRO_GET_ACK_COUNTER 0xFF818785 -// - -// 8187MP for AZ's request. 2005.09.09, by rcnjko. -#define OID_RT_PRO_SET_TX_POWER_BASE_OFFSET 0xFF818786 -#define OID_RT_PRO_GET_TX_POWER_BASE_OFFSET 0xFF818787 -//3 -------------------------------------------------------------------- -//3 0xFF8190xx: 8190 related -//3-------------------------------------------------------------------- -#define OID_RT_11N_FORCED_AMPDU 0xFF819000 -#define OID_RT_11N_FORCED_AMSDU 0xFF819001 -#define OID_RT_FORCED_PROTECTION 0xFF819002 -#define OID_RT_11N_FORCED_SHORTGI 0xFF819003 -#define OID_RT_11N_FORCED_LDPC 0xFF819006 -#define OID_RT_11N_MIMOPS_MODE 0xFF819007 -#define OID_RT_GET_11N_MIMPO_RSSI 0xFF81900A -#define OID_RT_GET_11N_MIMPO_EVM 0xFF81900B -#define OID_RT_11N_SILENT_RESET 0xFF81900C -#define OID_RT_11N_RESET_HISTOGRAM 0xFF819010 -#define OID_RT_11N_RX_REORDER_CONTROL 0xFF819011 -#define OID_RT_CURRENT_CHANNEL_INFO 0xFF819019 -#define OID_RT_11N_USB_TX_AGGR_NUM 0xFF81901A - - -#define OID_RT_11N_SYS_CPU_WAKE_SETTING 0xFF81901B - - -#define OID_RT_11N_FORCED_USB_RX_AGGR 0xFF81901C - - -#define OID_RT_11N_UI_SHOW_RX_RATE 0xFF81901D //For show the smooth 11n Rx Rate to normal user -#define OID_RT_11N_FORCED_DISABLED_RAFUNC 0xFF81901F - -#define OID_RT_11N_DYNAMIC_TX_POWER_CONTROL 0xFF819020 //For Dynamic Tx power for near/far range enable/Disable , by Jacken , 2008-03-06 -#define OID_RT_11N_TX_LINK_SPEED 0xFF819021 //For Real 11n Tx Rate -#define OID_RT_11N_RX_LINK_SPEED 0xFF819022 //For Real 11n Rx Rate -#define OID_RT_AMPDU_BURST_MODE 0xFF819023 -#define OID_RT_AMPDU_BURST_NUM 0xFF819024 -#define OID_RT_AUTO_AMPDU_BURST_ENABLE 0xFF819025 -#define OID_RT_AUTO_AMPDU_BURST_THRESHOLD 0xFF819026 -// 2008-03-11 Add by hpfan for support hardware PBC -#define OID_RT_WPS_HWSET_PBC_PRESSED 0XFF819028 -#define OID_RT_WPS_HWGET_PBC_PRESSED 0XFF819029 -// 2008-03-20 Add by hpfan for support WPS LED control -#define OID_RT_WPS_LED_CTL_START 0xFF81902A -#define OID_RT_11N_UI_SHOW_TX_RATE 0xFF81902B //For show the smooth 11n Tx Rate to normal user - -#define OID_RT_11N_CHANGE_RPQN 0xFF81902C -#define OID_RT_11N_DROP_PACKET 0xFF81902D -#define OID_RT_11N_MACID_128 0xFF81902E - - -//added by vivi, 2008.04.24, for runtop led -#define OID_RT_WPS_CUSTOMIZED_LED 0xFF81902F - -#define OID_RT_11N_INITIAL_TX_RATE 0xFF819033 -#define OID_RT_11N_TX_RETRY_COUNT 0xFF819034 -#define OID_RT_CURRENT_BANDWIDTH 0xFF819035 -#define OID_RT_11N_TX_RATE_DISPLAY 0xFF819036 -#define OID_RT_11N_FIRMWARE_VERSION 0xFF819037 -#define OID_RT_11N_UI_SS_SUPPORT 0xFF819038 // Support for Usb Selective Suspend. -#define OID_RT_11N_UI_INIT_READY 0xFF819039 - -//added for 92D test. -#define OID_RT_11N_IQK_TRIGGER 0xFF81903A -#define OID_RT_11N_TXPKT_TRIGGER 0xFF81903B -#define OID_RT_11N_ENABLE_COALESCE 0xFF81903C -#define OID_RT_11N_DUMP_REGS 0xFF81903D -#define OID_RT_11N_SET_RX_FAST_BATCH_NUM 0xFF81903E - - -#define OID_RT_11N_TDLS_ENABLE 0xFF81903F -#define OID_RT_11N_FORCED_ADDBA 0xFF819040 // For wifidirect sigma test. -#define OID_RT_11N_DISABLE_TX_POWER_BY_RATE 0xFF819044 -#define OID_RT_11N_TX_POWER_TRAINING 0xFF819045 - -//For MacOSX UI -#define OID_RT_11N_SHORT_GI 0xFF819046 -#define OID_RT_11N_MCS_RATE 0xFF819047 -#define OID_RT_SUPPLICANT_FAIL_CODE 0xFF819048 - -// 11n Sigma Config Capability -#define OID_RT_11N_SIGMA_CONFIG 0xFF81904A - -#define OID_RT_TX_CHECK_TP_THRESHOLD 0xFF81904B -#define OID_RT_RX_CHECK_TP_THRESHOLD 0xFF81904C - -// 11ac USB 2.0/3.0 switch mechanism -// This mechanism shall be operate with UI -#define OID_RT_UMR_QUERY_SWITCH_CHECK 0xFF819050 -#define OID_RT_UMR_QUERY_SWITCH_CONFIRM 0xFF819051 -#define OID_RT_UMR_SET_BSSID_TO_CONNECT_FOR_SWITCH_CHECK 0xFF819052 -#define OID_RT_UMR_QUERY_USB_MODE_SUGGESTION 0xFF819053 -#define OID_RT_UMR_SET_FORCED_USB_MODE 0xFF819054 -#define OID_RT_UMR_QUERY_CURRENT_USB_MODE 0xFF819055 -#define OID_RT_UMR_SET_USB_HOST_CAPABILITY 0xFF819056 - -#define OID_RT_11N_FORCED_STBC 0xFF819057 -#define OID_RT_QUERY_IS_MP_CHIP 0xFF819058 -// For ePHY parameter read & write -#define OID_RT_PCIE_GEN1_TO_GEN2 0xFF819060 -#define OID_RT_PCIE_MDIO_WRITE 0xFF819061 -#define OID_RT_PCIE_MDIO_READ 0xFF819062 -#define OID_RT_FORCE_PCIE_RATE 0xFF819063 - -// For 2.4G/5G channel SSID select -#define OID_RT_BAND_SELECT 0xFF819064 - - -//3-------------------------------------------------------------------- -//3 0xFFEDC1xx: For Meeting House -//3-------------------------------------------------------------------- - -// Meeting House. added by Annie, 2005-07-20. -#define OID_RT_MH_VENDER_ID 0xFFEDC100 -//CCX Rogue AP , 2006.07.27, by CCW -#define MH_OID_CCX_ROGUE_AP 0xFFEDC10B -#define MH_OID_CCX_ROGUE_AP_STATUS 0xFFEDC101 - -//CCX NETWORK EAP for LEAP 2006.07.31,by CCW -#define MH_OID_CCX_NETWORK_EAP 0xFFEDC102 -//CCX 2006.08.01,by CCW -#define MH_OID_CCX_MIXED_CELL 0xFFEDC103 -#define MH_OID_CCX_FAST_ROAM 0xFFEDC105 -#define MH_OID_CCX_FAST_ROAM_RESULT 0xFFEDC106 -#define MH_OID_CCX_ADD_KRK 0xFFEDC107 -#define MH_OID_CCX_REMOVE_KRK 0xFFEDC108 -#define MH_OID_CCX_VERSION 0xFFEDC109 -#define MH_OID_CCX_ENABLE 0xFFEDC10A -#define MH_OID_CCX_RM_ENABLE 0xFFEDC10C -// CCX IHV service support, by Bruce, 2009-08-28. -#define OID_RT_CCX_IHV_SUPPORT 0xFFEDC200 - - -/*--------------------------------------------------------------------------- -Dual Mac Mode Switch Related OID ------------------------------------------------------------------------------*/ -// 2010/12/27 MH The constant definition we need ot to use compile flag to seperate, -#define OID_RT_8192D_CHANGE_MAC_PHY_MODE 0xFFEDD000 -#define OID_RT_8192D_GET_DUAL_MAC_MODE 0xFFEDD001 -#define OID_RT_8192D_GET_MODE_SWITCH_IN_PROGRESS 0xFFEDD002 -#define OID_RT_8192D_GET_MAC_INDEX 0xFFEDD003 - -#define OID_RT_EASY_COCURRENT_SET_CHANNEL_INFO 0xFFEDD004 -#define OID_RT_EASY_COCURRENT_GET_CHANNEL_INFO 0xFFEDD005 -#define OID_RT_EASY_COCURRENT_SET_SSID 0xFFEDD006 -#define OID_RT_EASY_CONCURRENT_SET_STA_AP_SUPPORT 0xFFEDD007 -#define OID_RT_EASY_CONCURRENT_SET_TO_SKIP_CHANGE_MACPHY_MODE 0XFFEDD008 //sherry added for skip change mac phy mode during start vwifi from ui 20110517 - -//------------------------------------------------------------------------ -//3 Path Diversity -//Add by Neil Chen -#define OID_RT_11N_PDIV_TRIGGER 0xFFEDD010 -#define OID_RT_11N_PDIV_FW_TRIGGER 0xFFEDD011 -//------------------------------------------------------------------------ - -/*---------------------------------------------------------------------------- - OID_RT_DEVICE_ID_INFO used data structure -----------------------------------------------------------------------------*/ - -#define RT_DEVICE_ID_INFO_TAG 0x10ec0211 -#define RT_DEVICE_ID_PCI 0x00000000 -#define RT_DEVICE_ID_USB 0x00000001 -#define RT_DEVICE_ID_SDIO 0x00000002 - -typedef struct _RT_DEVICE_ID_HEADER{ - // - // Identify whether this is a Realtek WLAN device. - // RT_DEVICE_ID_INFO_TAG means Realtek WLAN NIC device, other values are not valid. - // - ULONG RtWlanDevTag; - - // - // Identify which IC. - // Examples of (ChipID, ChipVer): - // (0x8185, 0x1) => 8185 - // (0x8187, 0x1) => 8187 - // (0x8185, 0x2) => 8185B - // (0x8187, 0x2) => 8187B - // - ULONG ChipID; - ULONG ChipVer; - - // - // BusType is used to identify BUS type of the device and corresponding data type, - // for example: - // RT_PCI_DEVICE => struc _RT_PCI_ID_INFO - // RT_USB_DEVICE => struc _RT_USB_ID_INFO - // - ULONG BusType; -}RT_DEVICE_ID_HEADER, *PRT_DEVICE_ID_HEADER; - -typedef struct _RT_PCI_ID_INFO{ - RT_DEVICE_ID_HEADER DevIDHeader; - - // - // Vendor ID and Device ID from PCI configuration space. - // - USHORT VID; - USHORT DID; - - // - // Sub Vendor ID and Subsystem ID from PCI configuration space. - // - USHORT SVID; - USHORT SMID; - - // - // Revision ID from PCI configuration space. - // - UCHAR RevID; - - // - // Customer ID. - // - USHORT CustomerID; -}RT_PCI_ID_INFO, *PRT_PCI_ID_INFO; - -typedef struct _RT_USB_ID_INFO{ - RT_DEVICE_ID_HEADER DevIDHeader; - - // - // Vendor ID and Product ID from USB Device Descriptor. - // - USHORT VID; - USHORT PID; - - // - // bcdDevice from USB Device Descriptor. - // - USHORT RevID; - - // - // Interface index. - // - USHORT InterfaceIdx; -}RT_USB_ID_INFO, *PRT_USB_ID_INFO; - -typedef struct _RT_SDIO_ID_INFO{ - RT_DEVICE_ID_HEADER DevIDHeader; - - // - // Vendor ID and Product ID from SDIO Device. - // - USHORT VID; - USHORT PID; - - USHORT RevID; - -// - // Interface index. -// - USHORT InterfaceIdx; -}RT_SDIO_ID_INFO, *PRT_SDIO_ID_INFO; - - -//ShienChang: OID mapping to Vista DOT11 OID -//Scope: 0xFF010601 ~ 0xFF0106FF -#define OID_RT_POWER_MGMT_REQUEST 0xFF010601 -#define OID_RT_OPERATIONAL_RATE_SET 0xFF010602 -#define OID_RT_FRAGMENTATION_THRESHOLD 0xFF010603 -#define OID_RT_RTS_THRESHOLD 0xFF010604 -#define OID_RT_DISCONNECT_REQUEST 0xFF010605 - - -//ShienChang: OID mapping for WinXP style 802.11 OID -//Scope: 0xFF070101 ~ 0xFF0702FF -#define RT_80211_START 0xFF070000 -#define OID_RT_802_11_BSSID ( RT_80211_START | OID_802_11_BSSID ) -#define OID_RT_802_11_SSID ( RT_80211_START | OID_802_11_SSID ) -#define OID_RT_802_11_NETWORK_TYPES_SUPPORTED ( RT_80211_START | OID_802_11_NETWORK_TYPES_SUPPORTED ) -#define OID_RT_802_11_NETWORK_TYPE_IN_USE ( RT_80211_START | OID_802_11_NETWORK_TYPE_IN_USE ) -#define OID_RT_802_11_TX_POWER_LEVEL ( RT_80211_START | OID_802_11_TX_POWER_LEVEL ) -#define OID_RT_802_11_RSSI ( RT_80211_START | OID_802_11_RSSI ) -#define OID_RT_802_11_RSSI_TRIGGER ( RT_80211_START | OID_802_11_RSSI_TRIGGER ) -#define OID_RT_802_11_INFRASTRUCTURE_MODE ( RT_80211_START | OID_802_11_INFRASTRUCTURE_MODE ) -#define OID_RT_802_11_FRAGMENTATION_THRESHOLD ( RT_80211_START | OID_802_11_FRAGMENTATION_THRESHOLD ) -#define OID_RT_802_11_RTS_THRESHOLD ( RT_80211_START | OID_802_11_RTS_THRESHOLD ) -#define OID_RT_802_11_NUMBER_OF_ANTENNAS ( RT_80211_START | OID_802_11_NUMBER_OF_ANTENNAS ) -#define OID_RT_802_11_RX_ANTENNA_SELECTED ( RT_80211_START | OID_802_11_RX_ANTENNA_SELECTED ) -#define OID_RT_802_11_TX_ANTENNA_SELECTED ( RT_80211_START | OID_802_11_TX_ANTENNA_SELECTED ) -#define OID_RT_802_11_SUPPORTED_RATES ( RT_80211_START | OID_802_11_SUPPORTED_RATES ) -#define OID_RT_802_11_DESIRED_RATES ( RT_80211_START | OID_802_11_DESIRED_RATES ) -#define OID_RT_802_11_CONFIGURATION ( RT_80211_START | OID_802_11_CONFIGURATION ) -#define OID_RT_802_11_STATISTICS ( RT_80211_START | OID_802_11_STATISTICS ) -#define OID_RT_802_11_ADD_WEP ( RT_80211_START | OID_802_11_ADD_WEP ) -#define OID_RT_802_11_REMOVE_WEP ( RT_80211_START | OID_802_11_REMOVE_WEP ) -#define OID_RT_802_11_DISASSOCIATE ( RT_80211_START | OID_802_11_DISASSOCIATE ) -#define OID_RT_802_11_POWER_MODE ( RT_80211_START | OID_802_11_POWER_MODE ) -#define OID_RT_802_11_BSSID_LIST ( RT_80211_START | OID_802_11_BSSID_LIST ) -#define OID_RT_802_11_AUTHENTICATION_MODE ( RT_80211_START | OID_802_11_AUTHENTICATION_MODE ) -#define OID_RT_802_11_PRIVACY_FILTER ( RT_80211_START | OID_802_11_PRIVACY_FILTER ) -#define OID_RT_802_11_BSSID_LIST_SCAN ( RT_80211_START | OID_802_11_BSSID_LIST_SCAN ) -#define OID_RT_802_11_WEP_STATUS ( RT_80211_START | OID_802_11_WEP_STATUS ) -#define OID_RT_802_11_RELOAD_DEFAULTS ( RT_80211_START | OID_802_11_RELOAD_DEFAULTS ) -#define OID_RT_802_11_TEST ( RT_80211_START | OID_802_11_TEST ) -#define OID_RT_802_11_CAPABILITY ( RT_80211_START | OID_802_11_CAPABILITY ) -#define OID_RT_802_11_PMKID ( RT_80211_START | OID_802_11_PMKID ) -#define OID_RT_802_11_ASSOCIATION_INFORMATION ( RT_80211_START | OID_802_11_ASSOCIATION_INFORMATION ) -#define OID_RT_802_11_ENCRYPTION_STATUS ( RT_80211_START | OID_802_11_ENCRYPTION_STATUS ) -#define OID_RT_802_11_ADD_KEY ( RT_80211_START | OID_802_11_ADD_KEY ) -#define OID_RT_802_11_REMOVE_KEY ( RT_80211_START | OID_802_11_REMOVE_KEY ) - - -#endif //#ifndef __CUSTOM_OID_H diff --git a/network/wlan/WDI/HEADER/DriverInterfaceDef.h b/network/wlan/WDI/HEADER/DriverInterfaceDef.h deleted file mode 100644 index c60c0120..00000000 --- a/network/wlan/WDI/HEADER/DriverInterfaceDef.h +++ /dev/null @@ -1,298 +0,0 @@ -#ifndef __INC_DRIVERINTERFACEDEF_H -#define __INC_DRIVERINTERFACEDEF_H - -#define NicIFGetVenderDescription(_Adapter) \ - (_Adapter)->HalFunc.pDescString -#define NicIFEnableInterrupt(_Adapter) \ - (_Adapter)->HalFunc.EnableInterruptHandler(_Adapter) -#define NicIFDisableInterrupt(_Adapter) \ - (_Adapter)->HalFunc.DisableInterruptHandler(_Adapter) -#define NicIFClearInterrupt(_Adapter) \ - (_Adapter)->HalFunc.ClearInterruptHandler(_Adapter) -#define NicIFResetAllTimer(_Adapter)\ - (_Adapter)->HalFunc.HalResetAllTimerHandler(Adapter); - -#define NicIFInterruptRecognized(_Adapter,_pContent, _ContnetLen) \ - (_Adapter)->HalFunc.InterruptRecognizedHandler(_Adapter,_pContent, _ContnetLen) - -#define NicIFHaltAdapter(_Adapter, _bReset) \ - (_Adapter)->HalFunc.HaltAdapterHandler(_Adapter, _bReset); - -#define NicIFSendPacket(_Adapter, _pTcb) \ - PreTransmitTCB(_Adapter, _pTcb) - -#define NicIFSetMacAddress(_Adapter, pMacAddr) \ - MgntActSet_802_3_MAC_ADDRESS(_Adapter, pMacAddr) - -#define NicIFShutdown(_Adapter,_bReset) \ - (_Adapter)->HalFunc.ShutdownHandler(_Adapter,_bReset); - -// -// 1. Each Platform shall provide a 2 sec timer to invoke NicIFLinkStatusWatchdog. -// 2. Currently, both MgntLinkStatusWatchdog and HalDmWatchDog are designed to -// be callbacked in 2 sec period. We might want to seperate it in future to -// provide more flexible setting on callback period. -// -// 061010, by rcnjko. -// -#define NicIFLinkStatusWatchdog(_Adapter) \ - MgntLinkMultiPortStatusWatchdog(_Adapter); \ - HalDmWatchDog(_Adapter) - -#define NicIFSetLinkStatus(_Adapter,_mStatus) \ - MgntIndicateMediaStatus(_Adapter, _mStatus, FORCE_INDICATE ) - -#define NicIFGetLinkStatus(_Adapter) \ - MgntLinkStatusQuery( _Adapter) - -#define NicIFAMSDUSendPacket(_Adapter, _pTcb) \ - AMSDU_InsertAggregationList(_Adapter, _pTcb) - -RT_STATUS -NicIFAssociateNIC( - PADAPTER Adapter, - u2Byte HardwareType - ); - -VOID -NicIFDisassociateNIC( - PADAPTER Adapter - ); - -VOID -NicIFInitResource( - PADAPTER Adapter - ); - -VOID -NicIFDeInitResource( - PADAPTER Adapter - ); - -VOID -NicIFReadAdapterInfo( - PADAPTER Adapter - ); - -RT_STATUS -NicIFAllocateMemory( - PADAPTER Adapter - ); - -VOID -NicIFFreeMemory( - PADAPTER Adapter - ); - -VOID -NicIFResetMemory( - PADAPTER Adapter -); - -RT_STATUS -NicIFInitializeAdapter( - PADAPTER Adapter - ); - -VOID -NicIFHandleInterrupt( - PADAPTER Adapter - ); - -RESET_TYPE -NicIFCheckResetOrNot( - PADAPTER Adapter - ); - -VOID -NicIFCoalesceReceivedPacketAndFreeUnusedRFD( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -NicIFReturnPacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -NicIFCancelAllTimer( - PADAPTER Adapter - ); - - -//1 Following interface functions should be provided by platform driver - -RT_STATUS -DrvIFAssociateRFD( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -DrvIFDisassociateRFD( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -DrvIFIndicatePackets( - PADAPTER Adapter, - PRT_RFD *pRfd_array, - u2Byte Num - ); - -VOID -DrvIFD0RxIndicatePackets( - PADAPTER Adapter, - PRT_RFD *pRfd_array, - u2Byte Num - ); - -VOID -DrvIFIndicatePacket( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -DrvIFIndicateMultiplePackets( - PADAPTER Adapter, - PRT_RFD pRfd - ); - -VOID -DrvIFCompletePacket( - PADAPTER Adapter, - PRT_TCB pTcb, - RT_STATUS status - ); - -VOID -DrvIFIndicateScanStart( - PADAPTER Adapter -); - -VOID -DrvIFIndicateScanComplete( - PADAPTER Adapter, - RT_STATUS status -); - -VOID -DrvIFIndicateConnectionStart( - PADAPTER Adapter -); - -VOID -DrvIFIndicateConnectionComplete( - PADAPTER Adapter, - RT_STATUS status -); - -VOID -DrvIFIndicateAssociationStart( - PADAPTER Adapter -); - -VOID -DrvIFIndicateAssociationComplete( - PADAPTER Adapter, - RT_STATUS status -); - -VOID -DrvIFIndicateDisassociation( - PADAPTER Adapter, - u2Byte reason, - pu1Byte pAddr -); - -VOID -DrvIFIndicateRoamingStart( - PADAPTER Adapter -); - -VOID -DrvIFIndicateRoamingComplete( - PADAPTER Adapter, - RT_STATUS status -); - -VOID -DrvIFIndicateCurrentPhyStatus( - PADAPTER Adapter -); - -VOID -DrvIFIndicateIncommingAssociationStart( - PADAPTER Adapter - ); - -VOID -DrvIFIndicateIncommingAssociationComplete( - PADAPTER Adapter, - u2Byte status - ); - -VOID -DrvIFIndicateIncommingAssocReqRecv( - PADAPTER Adapter - ); - -RT_STATUS -NicIFDisableNIC( - PADAPTER Adapter -); - -RT_STATUS -NicIFEnableNIC( - PADAPTER Adapter -); - -RT_STATUS -NicIFResetNIC( - PADAPTER Adapter -); - -VOID -DrvIFDeleteDatapathPeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr -); - -VOID -DrvIFCheckTxCredit( - PADAPTER pAdapter -); - -VOID -DrvIFIndicateDataInQueue( - IN PADAPTER pAdapter, - IN u1Byte ExTid, - IN u2Byte PeerId, - IN RT_RX_INDICATION_LEVEL level -); - -VOID -DrvIFIndicateRoamingNeeded( - PADAPTER pAdapter, - RT_PREPARE_ROAM_TYPE IndicationReason -); - -VOID -DrvIFIndicateLinkStateChanged( - PADAPTER pAdapter, - BOOLEAN bForceLinkQuality, - u1Byte ucLinkQuality -); - - -VOID -DrvIFIndicateFWStalled( - PADAPTER Adapter -); - -#endif // #ifndef __INC_DRIVERINTERFACEDEF_H - diff --git a/network/wlan/WDI/HEADER/EndianFree.h b/network/wlan/WDI/HEADER/EndianFree.h deleted file mode 100644 index 76cd79e2..00000000 --- a/network/wlan/WDI/HEADER/EndianFree.h +++ /dev/null @@ -1,229 +0,0 @@ -#ifndef __INC_ENDIANFREE_H -#define __INC_ENDIANFREE_H - -/* - * Call endian free function when - * 1. Read/write packet content. - * 2. Before write integer to IO. - * 3. After read integer from IO. -*/ - -// -// Byte Swapping routine. -// -#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN -// Convert data -#define EF1Byte(_val) ((u1Byte)(_val)) -#define EF2Byte(_val) ((u2Byte)(_val)) -#define EF4Byte(_val) ((u4Byte)(_val)) - -#else -// Convert data -#define EF1Byte(_val) ((u1Byte)(_val)) -#define EF2Byte(_val) ( ((((u2Byte)(_val))&0x00ff)<<8) | \ - ((((u2Byte)(_val))&0xff00)>>8) ) -#define EF4Byte(_val) ( ((((u4Byte)(_val))&0x000000ff)<<24) | \ - ((((u4Byte)(_val))&0x0000ff00)<<8) | \ - ((((u4Byte)(_val))&0x00ff0000)>>8) | \ - ((((u4Byte)(_val))&0xff000000)>>24) ) - -#endif - -// -// Read LE format data from memory -// -#define ReadEF1Byte(_ptr) EF1Byte(*((pu1Byte)(_ptr))) -#define ReadEF2Byte(_ptr) EF2Byte(*((UNALIGNED pu2Byte)(_ptr))) -#define ReadEF4Byte(_ptr) EF4Byte(*( (UNALIGNED pu4Byte)(_ptr))) - -// -// Write LE data to memory -// -#define WriteEF1Byte(_ptr, _val) (*((pu1Byte)(_ptr)))=EF1Byte(_val) -#define WriteEF2Byte(_ptr, _val) (*((UNALIGNED pu2Byte)(_ptr)))=EF2Byte(_val) -#define WriteEF4Byte(_ptr, _val) (*((UNALIGNED pu4Byte)(_ptr)))=EF4Byte(_val) - -// -// Convert Host system specific byte ording (litten or big endia) to Network byte ording (big endian). -// 20060507, by rcnjko. -// -#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN - #define H2N1BYTE(_val) ((u1Byte)(_val)) - #define H2N2BYTE(_val) (((((u2Byte)(_val))&0x00ff)<<8) | \ - ((((u2Byte)(_val))&0xff00)>>8) ) - #define H2N4BYTE(_val) (((((u4Byte)(_val))&0x000000ff)<<24)| \ - ((((u4Byte)(_val))&0x0000ff00)<<8) | \ - ((((u4Byte)(_val))&0x00ff0000)>>8) | \ - ((((u4Byte)(_val))&0xff000000)>>24)) -#else - #define H2N1BYTE(_val) ((u1Byte)(_val)) - #define H2N2BYTE(_val) ((u2Byte)(_val)) - #define H2N4BYTE(_val) ((u4Byte)(_val)) -#endif - -// Read/Write Host system specific byte ording (litten or big endia) from/to Network byte ording (big endian). -// By Bruce, 2012-03-07. -#define WriteH2N1BYTE(_ptr, _val) (*((pu1Byte)(_ptr)))= H2N1BYTE(_val) -#define WriteH2N2BYTE(_ptr, _val) (*((UNALIGNED pu2Byte)(_ptr)))= H2N2BYTE(_val) -#define WriteH2N4BYTE(_ptr, _val) (*((UNALIGNED pu4Byte)(_ptr)))= H2N4BYTE(_val) - -#define ReadH2N1BYTE(_ptr) H2N1BYTE(*((pu1Byte)(_ptr))) -#define ReadH2N2BYTE(_ptr) H2N2BYTE(*((UNALIGNED pu2Byte)(_ptr))) -#define ReadH2N4BYTE(_ptr) H2N4BYTE(*( (UNALIGNED pu4Byte)(_ptr))) - -#define WriteN2H1BYTE(_ptr, _val) (*((pu1Byte)(_ptr)))= N2H1BYTE(_val) -#define WriteN2H2BYTE(_ptr, _val) (*((UNALIGNED pu2Byte)(_ptr)))= N2H2BYTE(_val) -#define WriteN2H4BYTE(_ptr, _val) (*((UNALIGNED pu4Byte)(_ptr)))= N2H4BYTE(_val) - -#define ReadN2H1BYTE(_ptr) N2H1BYTE(*((pu1Byte)(_ptr))) -#define ReadN2H2BYTE(_ptr) N2H2BYTE(*((UNALIGNED pu2Byte)(_ptr))) -#define ReadN2H4BYTE(_ptr) N2H4BYTE(*( (UNALIGNED pu4Byte)(_ptr))) - -// -// Convert from (TCP/IP or 802.3)Network byte ording (big endian) to Host system specific byte ording (litten or big endia). -// 20060507, by rcnjko. -// -#if BYTE_ORDER == __MACHINE_LITTLE_ENDIAN - #define N2H1BYTE(_val) ((u1Byte)(_val)) - #define N2H2BYTE(_val) (((((u2Byte)(_val))&0x00ff)<<8) | \ - ((((u2Byte)(_val))&0xff00)>>8) ) - #define N2H4BYTE(_val) (((((u4Byte)(_val))&0x000000ff)<<24)| \ - ((((u4Byte)(_val))&0x0000ff00)<<8) | \ - ((((u4Byte)(_val))&0x00ff0000)>>8) | \ - ((((u4Byte)(_val))&0xff000000)>>24)) -#else - #define N2H1BYTE(_val) ((u1Byte)(_val)) - #define N2H2BYTE(_val) ((u2Byte)(_val)) - #define N2H4BYTE(_val) ((u4Byte)(_val)) -#endif - -// -// Example: -// BIT_LEN_MASK_32(0) => 0x00000000 -// BIT_LEN_MASK_32(1) => 0x00000001 -// BIT_LEN_MASK_32(2) => 0x00000003 -// BIT_LEN_MASK_32(32) => 0xFFFFFFFF -// -#define BIT_LEN_MASK_32(__BitLen) \ - (0xFFFFFFFF >> (32 - (__BitLen))) -// -// Example: -// BIT_OFFSET_LEN_MASK_32(0, 2) => 0x00000003 -// BIT_OFFSET_LEN_MASK_32(16, 2) => 0x00030000 -// -#define BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_32(__BitLen) << (__BitOffset)) - -// -// Description: -// Return 4-byte value in host byte ordering from -// 4-byte pointer in litten-endian system. -// -#define LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ - (EF4Byte(*((UNALIGNED pu4Byte)(__pStart)))) - -// -// Description: -// Translate subfield (continuous bits in little-endian) of 4-byte value in litten byte to -// 4-byte value in host byte ordering. -// -#define LE_BITS_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P4BYTE_TO_HOST_4BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_32(__BitLen) \ - ) - -// -// Description: -// Mask subfield (continuous bits in little-endian) of 4-byte value in litten byte oredering -// and return the result in 4-byte value in host byte ordering. -// -#define LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P4BYTE_TO_HOST_4BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_32(__BitOffset, __BitLen) ) \ - ) - -// -// Description: -// Set subfield of little-endian 4-byte value to specified value. -// -#define SET_BITS_TO_LE_4BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((UNALIGNED pu4Byte)(__pStart)) = \ - EF4Byte( \ - LE_BITS_CLEARED_TO_4BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((u4Byte)__Value) & BIT_LEN_MASK_32(__BitLen)) << (__BitOffset) ) \ - ); - - -#define BIT_LEN_MASK_16(__BitLen) \ - (0xFFFF >> (16 - (__BitLen))) - -#define BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_16(__BitLen) << (__BitOffset)) - -#define LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ - (EF2Byte(*((UNALIGNED pu2Byte)(__pStart)))) - -#define LE_BITS_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P2BYTE_TO_HOST_2BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_16(__BitLen) \ - ) - -#define LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P2BYTE_TO_HOST_2BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_16(__BitOffset, __BitLen) ) \ - ) - -#define SET_BITS_TO_LE_2BYTE(__pStart, __BitOffset, __BitLen, __Value) \ - *((UNALIGNED pu2Byte)(__pStart)) = \ - EF2Byte( \ - LE_BITS_CLEARED_TO_2BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((u2Byte)__Value) & BIT_LEN_MASK_16(__BitLen)) << (__BitOffset) ) \ - ); - -#define BIT_LEN_MASK_8(__BitLen) \ - (0xFF >> (8 - (__BitLen))) - -#define BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) \ - (BIT_LEN_MASK_8(__BitLen) << (__BitOffset)) - -#define LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - (EF1Byte(*((pu1Byte)(__pStart)))) - -#define LE_BITS_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - ( LE_P1BYTE_TO_HOST_1BYTE(__pStart) >> (__BitOffset) ) \ - & \ - BIT_LEN_MASK_8(__BitLen) \ - ) - -#define LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - ( \ - LE_P1BYTE_TO_HOST_1BYTE(__pStart) \ - & \ - ( ~BIT_OFFSET_LEN_MASK_8(__BitOffset, __BitLen) ) \ - ) - -#define SET_BITS_TO_LE_1BYTE(__pStart, __BitOffset, __BitLen, __Value) \ -{ \ - *((pu1Byte)(__pStart)) = \ - EF1Byte( \ - LE_BITS_CLEARED_TO_1BYTE(__pStart, __BitOffset, __BitLen) \ - | \ - ( (((u1Byte)__Value) & BIT_LEN_MASK_8(__BitLen)) << (__BitOffset) ) \ - ); \ -} - -// Get the N-bytes aligment offset from the current length -#define N_BYTE_ALIGMENT(__Value, __Aligment) ((__Aligment == 1) ? (__Value) : (((__Value + __Aligment - 1) / __Aligment) * __Aligment)) - -#endif // #ifndef __INC_ENDIANFREE_H diff --git a/network/wlan/WDI/HEADER/Ethernet.h b/network/wlan/WDI/HEADER/Ethernet.h deleted file mode 100644 index 15915e38..00000000 --- a/network/wlan/WDI/HEADER/Ethernet.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __INC_ETHERNET_H -#define __INC_ETHERNET_H - -#define ETHERNET_ADDRESS_LENGTH 6 -#define ETHERNET_HEADER_SIZE 14 -#define LLC_HEADER_SIZE 6 -#define TYPE_LENGTH_FIELD_SIZE 2 -#define MINIMUM_ETHERNET_PACKET_SIZE 60 -#define MAXIMUM_ETHERNET_PACKET_SIZE 1514 - -#define RT_ETH_IS_MULTICAST(_pAddr) ((((pu1Byte)(_pAddr))[0]&0x01)!=0) -#define RT_ETH_IS_BROADCAST(_pAddr) ( \ - ((pu1Byte)(_pAddr))[0]==0xff && \ - ((pu1Byte)(_pAddr))[1]==0xff && \ - ((pu1Byte)(_pAddr))[2]==0xff && \ - ((pu1Byte)(_pAddr))[3]==0xff && \ - ((pu1Byte)(_pAddr))[4]==0xff && \ - ((pu1Byte)(_pAddr))[5]==0xff ) - -// -// TOSHIBA_PWR_INDEX: customized for Toshiba. Power index "0" at channel 12~14 presents -// disableing the specified channel(no receive and send). By Bruce, 2007-09-03. -// The define is always be set enable -#define TOSHIBA_PWR_INDEX 1 //Merge by Jacken 2008/01/31 - -#endif // #ifndef __INC_ETHERNET_H diff --git a/network/wlan/WDI/HEADER/GeneralDef.h b/network/wlan/WDI/HEADER/GeneralDef.h deleted file mode 100644 index 5b58c888..00000000 --- a/network/wlan/WDI/HEADER/GeneralDef.h +++ /dev/null @@ -1,159 +0,0 @@ -#ifndef __INC_GENERALDEF_H -#define __INC_GENERALDEF_H - -/* - * Note: 1.Only pure value definition can be put here. - * 2.The definition here should be hardware and platform independent. - * -*/ - -#define IN -#define OUT - -#ifndef TRUE - #define TRUE 1 -#endif -#ifndef FALSE - #define FALSE 0 -#endif - -#ifndef true - #define true 1 -#endif -#ifndef false - #define false 0 -#endif - -#define BIT0 0x00000001 -#define BIT1 0x00000002 -#define BIT2 0x00000004 -#define BIT3 0x00000008 -#define BIT4 0x00000010 -#define BIT5 0x00000020 -#define BIT6 0x00000040 -#define BIT7 0x00000080 -#define BIT8 0x00000100 -#define BIT9 0x00000200 -#define BIT10 0x00000400 -#define BIT11 0x00000800 -#define BIT12 0x00001000 -#define BIT13 0x00002000 -#define BIT14 0x00004000 -#define BIT15 0x00008000 -#define BIT16 0x00010000 -#define BIT17 0x00020000 -#define BIT18 0x00040000 -#define BIT19 0x00080000 -#define BIT20 0x00100000 -#define BIT21 0x00200000 -#define BIT22 0x00400000 -#define BIT23 0x00800000 -#define BIT24 0x01000000 -#define BIT25 0x02000000 -#define BIT26 0x04000000 -#define BIT27 0x08000000 -#define BIT28 0x10000000 -#define BIT29 0x20000000 -#define BIT30 0x40000000 -#define BIT31 0x80000000 - -#define BIT32 UINT64_C(0x0000000100000000) -#define BIT33 UINT64_C(0x0000000200000000) -#define BIT34 UINT64_C(0x0000000400000000) -#define BIT35 UINT64_C(0x0000000800000000) -#define BIT36 UINT64_C(0x0000001000000000) -#define BIT37 UINT64_C(0x0000002000000000) -#define BIT38 UINT64_C(0x0000004000000000) -#define BIT39 UINT64_C(0x0000008000000000) -#define BIT40 UINT64_C(0x0000010000000000) -#define BIT41 UINT64_C(0x0000020000000000) -#define BIT42 UINT64_C(0x0000040000000000) -#define BIT43 UINT64_C(0x0000080000000000) -#define BIT44 UINT64_C(0x0000100000000000) -#define BIT45 UINT64_C(0x0000200000000000) -#define BIT46 UINT64_C(0x0000400000000000) -#define BIT47 UINT64_C(0x0000800000000000) -#define BIT48 UINT64_C(0x0001000000000000) -#define BIT49 UINT64_C(0x0002000000000000) -#define BIT50 UINT64_C(0x0004000000000000) -#define BIT51 UINT64_C(0x0008000000000000) -#define BIT52 UINT64_C(0x0010000000000000) -#define BIT53 UINT64_C(0x0020000000000000) -#define BIT54 UINT64_C(0x0040000000000000) -#define BIT55 UINT64_C(0x0080000000000000) -#define BIT56 UINT64_C(0x0100000000000000) -#define BIT57 UINT64_C(0x0200000000000000) -#define BIT58 UINT64_C(0x0400000000000000) -#define BIT59 UINT64_C(0x0800000000000000) -#define BIT60 UINT64_C(0x1000000000000000) -#define BIT61 UINT64_C(0x2000000000000000) -#define BIT62 UINT64_C(0x4000000000000000) -#define BIT63 UINT64_C(0x8000000000000000) - - -//----------------------------------------------------------------------------------------- -// Use one of the following value to define the flag, RT_PLATFORM. -//----------------------------------------------------------------------------------------- -#define PLATFORM_WINDOWS 0 -#define PLATFORM_LINUX 1 -#define PLATFORM_FREEBSD 3 -#define PLATFORM_MACOSX 4 - -//----------------------------------------------------------------------------------------- -// OS versions -//---------------------------------------------------------------------------------------- -// It is mainly for the conditional compilation. - -// Unknown OS -#define OS_UNKNOWN 0x00 - -// Windows Version (1st byte): -#define OS_WIN_XP 0x01 -#define OS_WIN_VISTA 0x02 -#define OS_WIN_7 0x03 -#define OS_WIN_8 0x04 -#define OS_WIN_BLUE 0x05 -#define OS_WIN_10 0x06 - -// MAC OS Version (2nd byte): -#define OS_MAC_LEOPARD (0x01 << 8) -#define OS_MAC_TIGER (0x02 << 8) -#define OS_MAC_PANTHER (0x03 << 8) -#define OS_MAC_JAGUAR (0x04 << 8) - -// Linux OS Version (3rd byte): -#define OS_LINUX_24 OS_WIN_XP // TODO: We should modify COMMON code and change this definition -#define OS_LINUX_26 OS_WIN_XP // TODO: We should modify COMMON code and change this definition - -#define OS_WIN_FROM_VISTA(v) ((v & 0xFF) >= OS_WIN_VISTA) -#define OS_WIN_FROM_WIN7(v) ((v & 0xFF) >= OS_WIN_7) -#define OS_WIN_FROM_WIN8(v) ((v & 0xFF) >= OS_WIN_8) -#define OS_WIN_FROM_WIN_BLUE(v) ((v & 0xFF) >= OS_WIN_BLUE) -#define OS_WIN_FROM_WIN10(v) ((v & 0xFF) >= OS_WIN_10) - - -#define RUNTIME_OS_WIN_FROM_WIN8(_pAdapter) ((_pAdapter)->MgntInfo.NdisVersion >= RT_NDIS_VERSION_6_30) -#define RUNTIME_OS_WIN_FROM_WINBLUE(_pAdapter) ((_pAdapter)->MgntInfo.NdisVersion >= RT_NDIS_VERSION_6_40) - - -//----------------------------------------------------------------------------------------- -// Use one of the following value to define the flag, HAL_CODE_BASE. -//----------------------------------------------------------------------------------------- -#define RTL818X BIT0 // For 8185/8187. -#define RTL818X_B BIT1 // For 8185B/8187B. -#define RTL818X_S (BIT1 | BIT2) // For RTL8187S (PCIe & USB) -#define RTL819X BIT3 // For 819x series, 8190, 8192E, 8192U, 8192SP, 8192SU, 8193SP, 8193SU -#define RTL8190 (BIT3 | BIT4) // For 8190 PCI -#define RTL8192 (BIT3 | BIT5) // For 8192 (PCI-E & USB) -#define RTL8192_S (BIT3 | BIT6) // For 8192_s (PCI-E & USB) -#define RTL8192_C (BIT3 | BIT7) // For 8192_c (PCI-E & USB) -#define RTL8193 (BIT3 | BIT8) // For 8193_s (PCI-E & USB) - -//----------------------------------------------------------------------------------------- -// Use one of the following value to define the flag, DEV_BUS_TYPE. -//----------------------------------------------------------------------------------------- -#define RT_PCI_INTERFACE 1 -#define RT_USB_INTERFACE 2 -#define RT_SDIO_INTERFACE 3 - -#endif // #ifndef __INC_GENERALDEF_H diff --git a/network/wlan/WDI/HEADER/HTType.h b/network/wlan/WDI/HEADER/HTType.h deleted file mode 100644 index f31f3546..00000000 --- a/network/wlan/WDI/HEADER/HTType.h +++ /dev/null @@ -1,410 +0,0 @@ -#ifndef __INC_HTTYPE_H -#define __INC_HTTYPE_H - - -//------------------------------------------------------------ -// The HT Capability element is present in beacons, association request, -// reassociation request and probe response frames -//------------------------------------------------------------ - -// -// Operation mode value -// -#define HT_OPMODE_NO_PROTECT 0 -#define HT_OPMODE_OPTIONAL 1 -#define HT_OPMODE_40MHZ_PROTECT 2 -#define HT_OPMODE_MIXED 3 - -// -// MIMO Power Save Setings -// -#define MIMO_PS_STATIC 0 -#define MIMO_PS_DYNAMIC 1 -#define MIMO_PS_NOLIMIT 3 - - -#define sHTCLng 4 - - -/* 2007/06/07 MH Define sub-carrier mode for 40MHZ. */ -typedef enum _HT_Bandwidth_40MHZ_Sub_Carrier{ - SC_MODE_DUPLICATE = 0, - SC_MODE_LOWER = 1, - SC_MODE_UPPER = 2, - SC_MODE_FULL40MHZ = 3, -}HT_BW40_SC_E; - -//HT capability info -#define SET_HT_CAPABILITY_ELE_LDPC_CAP(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 0, 1, _val) -#define SET_HT_CAPABILITY_ELE_CHL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 1, 1, _val) -#define SET_HT_CAPABILITY_ELE_MIMO_PWRSAVE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 2, 2, _val) -#define SET_HT_CAPABILITY_ELE_GREEN_FIELD(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 4, 1, _val) -#define SET_HT_CAPABILITY_ELE_SHORT_GI20M(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 5, 1, _val) -#define SET_HT_CAPABILITY_ELE_SHORT_GI40M(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 6, 1, _val) -#define SET_HT_CAPABILITY_ELE_TX_STBC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart, 7, 1, _val) - -#define SET_HT_CAPABILITY_ELE_RX_STBC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 0, 2, _val) -#define SET_HT_CAPABILITY_ELE_DELAY_BA(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 2, 1, _val) -#define SET_HT_CAPABILITY_ELE_MAX_AMSDU_SIZE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 3, 1, _val) -#define SET_HT_CAPABILITY_ELE_DSS_CCK(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 4, 1, _val) -#define SET_HT_CAPABILITY_ELE_PSMP(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 5, 1, _val) -#define SET_HT_CAPABILITY_ELE_FORTY_INTOLERANT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 6, 1, _val) -#define SET_HT_CAPABILITY_ELE_LSIG_TXOP_PROTECT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 7, 1, _val) - -#define GET_HT_CAPABILITY_ELE_LDPC_CAP(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 0, 1) -#define GET_HT_CAPABILITY_ELE_CHL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 1, 1) -#define GET_HT_CAPABILITY_ELE_MIMO_PWRSAVE(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 2, 2) -#define GET_HT_CAPABILITY_ELE_GREEN_FIELD(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 4, 1) -#define GET_HT_CAPABILITY_ELE_SHORT_GI20M(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 5, 1) -#define GET_HT_CAPABILITY_ELE_SHORT_GI40M(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 6, 1) -#define GET_HT_CAPABILITY_ELE_TX_STBC(_pEleStart) LE_BITS_TO_1BYTE(_pEleStart, 7, 1) - -#define GET_HT_CAPABILITY_ELE_RX_STBC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 2) -#define GET_HT_CAPABILITY_ELE_DELAY_BA(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 2, 1) -#define GET_HT_CAPABILITY_ELE_MAX_AMSDU_SIZE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 3, 1) -#define GET_HT_CAPABILITY_ELE_DSS_CCK(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 4, 1) -#define GET_HT_CAPABILITY_ELE_PSMP(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 5, 1) -#define GET_HT_CAPABILITY_ELE_FORTY_INTOLERANT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 6, 1) -#define GET_HT_CAPABILITY_ELE_LSIG_TXOP_PROTECT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 7, 1) - -//MAC HT parameters info -#define SET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 0, 2, _val) -#define SET_HT_CAPABILITY_ELE_MPDU_DENSITY(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 2, 3, _val) -#define SET_HT_CAPABILITY_ELE_RSVD2(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 5, 3, _val) - -#define GET_HT_CAPABILITY_ELE_MAX_RXAMPDU_FACTOR(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 0, 2) -#define GET_HT_CAPABILITY_ELE_MPDU_DENSITY(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 2, 3) -#define GET_HT_CAPABILITY_ELE_RSVD2(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 5, 3) - -//Supported MCS set -#define GET_HT_CAPABILITY_ELE_MCS(_pEleStart) ((_pEleStart)+3) - -//Extended HT Capability Info -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO(_pEleStart, _val) WriteEF2Byte(((pu1Byte)(_pEleStart))+19, _val) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO(_pEleStart) ReadEF2Byte(((pu1Byte)(_pEleStart))+19) - -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_PCO(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 0, 1, ((u1Byte)_val) ) -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_PCO_TIME(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 1, 2, ((u1Byte)_val) ) -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_RSVD3(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 3, 5, ((u1Byte)_val) ) -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_MCS_FEEDBACK(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 8, 2, ((u1Byte)_val) ) -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_HTC(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 10, 1, ((u1Byte)_val) ) -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_RDR(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 11, 1, ((u1Byte)_val) ) -#define SET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_RSVD4(_pEleStart, _val) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pEleStart))+19, 12, 4, ((u1Byte)_val) ) - -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_PCO(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 0, 1)) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_PCO_TIME(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 1, 2)) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_RSVD3(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 3, 5)) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_MCS_FEEDBACK(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 8, 2)) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_HTC(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 10, 1)) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_RDR(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 11, 1)) -#define GET_HT_CAPABILITY_ELE_EXT_HTCAPINFO_RSVD4(_pEleStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pEleStart))+19, 12, 4)) - - -//TXBF Capabilities -#define SET_HT_CAPABILITY_ELE_TXBF_CAP(_pEleStart, _val) WriteEF4Byte(((pu1Byte)(_pEleStart))+21, _val) -#define SET_HT_CAP_TXBF_RECEIVE_NDP_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE( ((pu1Byte)(_pEleStart))+21, 3, 1, ((u1Byte)_val) ) -#define SET_HT_CAP_TXBF_TRANSMIT_NDP_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE( ((pu1Byte)(_pEleStart))+21, 4, 1, ((u1Byte)_val) ) -#define SET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE( ((pu1Byte)(_pEleStart))+21, 10, 1, ((u1Byte)_val) ) -#define SET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(_pEleStart, _val) SET_BITS_TO_LE_4BYTE( ((pu1Byte)(_pEleStart))+21, 15, 2, ((u1Byte)_val) ) -#define SET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(_pEleStart, _val) SET_BITS_TO_LE_4BYTE( ((pu1Byte)(_pEleStart))+21, 23, 2, ((u1Byte)_val) ) -#define SET_HT_CAP_TXBF_CHNL_ESTIMATION_NUM_ANTENNAS(_pEleStart, _val) SET_BITS_TO_LE_4BYTE( ((pu1Byte)(_pEleStart))+21, 27, 2, ((u1Byte)_val) ) - - -#define GET_HT_CAPABILITY_ELE_TXBF_CAP(_pEleStart) ReadEF4Byte(((pu1Byte)(_pEleStart))+21) -#define GET_HT_CAP_TXBF_EXPLICIT_COMP_STEERING_CAP(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart)+21, 10, 1) -#define GET_HT_CAP_TXBF_EXPLICIT_COMP_FEEDBACK_CAP(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart)+21, 15, 2) -#define GET_HT_CAP_TXBF_COMP_STEERING_NUM_ANTENNAS(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart)+21, 23, 2) -#define GET_HT_CAP_TXBF_CHNL_ESTIMATION_NUM_ANTENNAS(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart)+21, 27, 2) - - -//Antenna Selection Capabilities -#define SET_HT_CAPABILITY_ELE_AS_CAP(_pEleStart, _val) WriteEF1Byte(((pu1Byte)(_pEleStart))+25, _val) -#define GET_HT_CAPABILITY_ELE_AS_CAP(_pEleStart) ReadEF1Byte(((pu1Byte)(_pEleStart))+25) - - -//------------------------------------------------------------ -// The HT Information element -//------------------------------------------------------------ -#define SET_HT_INFO_ELE_CONTROL_CHL(_pEleStart, _val) WriteEF1Byte(_pEleStart, _val) -#define GET_HT_INFO_ELE_CONTROL_CHL(_pEleStart) ReadEF1Byte(_pEleStart) - -#define SET_HT_INFO_ELE_EXT_CHL_OFFSET(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 0, 2, _val) -#define SET_HT_INFO_ELE_STA_CHL_WIDTH(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 2, 1, _val) -#define SET_HT_INFO_ELE_RIFS(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 3, 1, _val) -#define SET_HT_INFO_ELE_PSMP_ACCESS_ONLY(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 4, 1, _val) -#define SET_HT_INFO_ELE_SRV_INT_GRAN(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+1, 5, 3, _val) - -#define GET_HT_INFO_ELE_EXT_CHL_OFFSET(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 0, 2) -#define GET_HT_INFO_ELE_STA_CHL_WIDTH(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 2, 1) -#define GET_HT_INFO_ELE_RIFS(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 3, 1) -#define GET_HT_INFO_ELE_PSMP_ACCESS_ONLY(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 4, 1) -#define GET_HT_INFO_ELE_SRV_INT_GRAN(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+1, 5, 3) - -#define SET_HT_INFO_ELE_OPT_MODE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 0, 2, _val) -#define SET_HT_INFO_ELE_NON_GF_DEV(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 2, 1, _val) - -#define GET_HT_INFO_ELE_OPT_MODE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 0, 2) -#define GET_HT_INFO_ELE_OBSS_NON_HT_MEMBER(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 4, 1) -#define GET_HT_INFO_ELE_NON_GF_DEV(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+2, 2, 1) -#define GET_HT_INFO_ELE_CHANNEL(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+0, 0, 8) - -#define SET_HT_INFO_ELE_DUAL_BEACON(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+4, 6, 1, _val) -#define SET_HT_INFO_ELE_DUAL_CTS_PROTECT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+4, 7, 1, _val) - -#define GET_HT_INFO_ELE_DUAL_BEACON(_pEleStart, _val) LE_BITS_TO_1BYTE((_pEleStart)+4, 6, 1) -#define GET_HT_INFO_ELE_DUAL_CTS_PROTECT(_pEleStart, _val) LE_BITS_TO_1BYTE((_pEleStart)+4, 7, 1) - -#define SET_HT_INFO_ELE_SECONDARY_BEACON(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+5, 0, 1, _val) -#define SET_HT_INFO_ELE_LSIG_TXOP_PROTECT_FULL(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+5, 1, 1, _val) -#define SET_HT_INFO_ELE_PCO_ACTIVE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+5, 2, 1, _val) -#define SET_HT_INFO_ELE_PCO_PHASE(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+5, 3, 1, _val) - -#define GET_HT_INFO_ELE_SECONDARY_BEACON(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+5, 0, 1) -#define GET_HT_INFO_ELE_LSIG_TXOP_PROTECT_FULL(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+5, 1, 1) -#define GET_HT_INFO_ELE_PCO_ACTIVE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+5, 2, 1) -#define GET_HT_INFO_ELE_PCO_PHASE(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+5, 3, 1) - -#define GET_HT_INFO_ELE_BASIC_MCS(_pEleStart) ((_pEleStart)+6) - - -// MIMO Power Save control field. -// This is appear in MIMO Power Save Action Frame -#define GET_MIMOPS_FRAME_PS_ENABLE(_pStart) ((u1Byte)LE_BITS_TO_1BYTE( ((pu1Byte)(_pStart))+sMacHdrLng+2, 0, 1)) -#define GET_MIMOPS_FRAME_PS_MODE(_pStart) ((u1Byte)LE_BITS_TO_1BYTE( ((pu1Byte)(_pStart))+sMacHdrLng+2, 1, 1)) - - -//------------------------------------------------------------ -// The HT Control field -//------------------------------------------------------------ -#define SET_HT_CTRL_CSI_STEERING(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+2, 6, 2, _val) -#define SET_HT_CTRL_NDP_ANNOUNCEMENT(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart)+3, 0, 1, _val) -#define GET_HT_CTRL_NDP_ANNOUNCEMENT(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart)+3, 0, 1) - - -typedef enum _HT_SPEC_VER{ - HT_SPEC_VER_IEEE = 0, - HT_SPEC_VER_EWC = 1, -}HT_SPEC_VER, *PHT_SPEC_VER; - - -typedef enum _HT_AMPDM_MODE_E{ - HT_AMPDU_AUTO = 0, - HT_AMPDU_ENABLE = 1, - HT_AMPDU_DISABLE = 2, -}HT_AMPDU_MODE_E, *PHT_AMPDU_MODE_E; - -typedef enum _HT_AMSDU_MODE_E{ - HT_AMSDU_AUTO = 0, - HT_AMSDU_ENABLE = 1, - HT_AMSDU_DISABLE = 2, - HT_AMSDU_WITHIN_AMPDU = 3, -}HT_AMSDU_MODE_E, *PHT_AMSDU_MODE_E; - -typedef enum _SHORTGI_MODE_E{ - SHORTGI_AUTO = 0, - SHORTGI_FORCE_ENABLE = 1, - SHORTGI_FORCE_DISABLE = 2, -}SHORTGI_MODE_E, *PSHORTGI_MODE_E; - -#define LDPC_HT_ENABLE_RX BIT0 -#define LDPC_HT_ENABLE_TX BIT1 -#define LDPC_HT_TEST_TX_ENABLE BIT2 -#define LDPC_HT_CAP_TX BIT3 - -#define STBC_HT_ENABLE_RX BIT0 -#define STBC_HT_ENABLE_TX BIT1 -#define STBC_HT_TEST_TX_ENABLE BIT2 -#define STBC_HT_CAP_TX BIT3 - -#define BEAMFORMING_HT_BEAMFORMER_ENABLE BIT0 // Declare our NIC supports beamformer -#define BEAMFORMING_HT_BEAMFORMEE_ENABLE BIT1 // Declare our NIC supports beamformee -#define BEAMFORMING_HT_BEAMFORMER_TEST BIT2 // Transmiting Beamforming no matter the target supports it or not -#define BEAMFORMING_HT_BEAMFORMER_STEER_NUM (BIT4|BIT5) -#define BEAMFORMING_HT_BEAMFORMEE_CHNL_EST_CAP (BIT6|BIT7) - -//------------------------------------------------------------ -// The Data structure is used to keep HT related variables when card is -// configured as non-AP STA mode. **Note** Current_xxx should be set -// to default value in HTInitializeHTInfo() -//------------------------------------------------------------ - -typedef struct _RT_HIGH_THROUGHPUT{ - DECLARE_RT_OBJECT(_RT_HIGH_THROUGHPUT); - - BOOLEAN bEnableHT; - BOOLEAN bCurrentHTSupport; - - SHORTGI_MODE_E ForcedShortGI; - BOOLEAN bCurShortGI40MHz; // Tx Short GI for 40MHz - BOOLEAN bCurShortGI20MHz; // Tx Short GI for 20MHz - - u1Byte HtLdpcCap; // Capability combination of HT LDPC LDPC_HT_XXX - u1Byte HtCurLdpc; // Current target connection supports LDPC - - u1Byte HtStbcCap; // Capability combination of HT STBC_HT_XXX - u1Byte HtCurStbc; // Current target connection support STBC - - u1Byte HtBeamformCap; // Capability combination of VHT LDPC LDPC_VHT_XXX - u1Byte HtCurBeamform; // Current combination of BEAMFORMING_VHT_XXX in BSS connection - - BOOLEAN bRegSuppCCK; // Tx CCK rate capability - BOOLEAN bCurSuppCCK; // Tx CCK rate capability - - // 802.11n spec version for "peer" - HT_SPEC_VER ePeerHTSpecVer; - - // HT related information for "Self" - u1Byte SelfHTCap[26]; //HT_CAPABILITY_ELE SelfHTCap; // This is HT cap element sent to peer STA, which also indicate HT Rx capabilities. - u1Byte SelfHTInfo[22]; // This is HT info element sent to peer STA, which also indicate HT Rx capabilities. - - // HT related information for "Peer" - u1Byte PeerHTCapBuf[32]; - u1Byte PeerHTInfoBuf[32]; - - // A-MSDU related - BOOLEAN bAMSDU_Support; // This indicates Tx A-MSDU capability - u2Byte nAMSDU_MaxSize; // This indicates Tx A-MSDU capability - BOOLEAN bCurrent_AMSDU_Support; // This indicates Tx A-MSDU capability - u2Byte nCurrent_AMSDU_MaxSize; // This indicates Tx A-MSDU capability - - BOOLEAN bHWAMSDU_Support; // This indicates Tx A-MSDU capability - - // AMPDU related <2006.08.10 Emily> - BOOLEAN bAMPDUEnable; // This indicate Tx A-MPDU capability - BOOLEAN bCurrentAMPDUEnable; // This indicate Tx A-MPDU capability - u1Byte AMPDU_Factor; // This indicate Tx A-MPDU capability - u1Byte CurrentAMPDUFactor; // This indicate Tx A-MPDU capability - u1Byte MPDU_Density; // This indicate Tx A-MPDU capability - u1Byte CurrentMPDUDensity; // This indicate Tx A-MPDU capability - - // Forced A-MPDU enable - HT_AMPDU_MODE_E ForcedAMPDUMode; - u1Byte ForcedAMPDUFactor; - u1Byte ForcedMPDUDensity; - - // Forced A-MSDU enable - HT_AMSDU_MODE_E ForcedAMSDUMode; - u2Byte ForcedAMSDUMaxSize; - u1Byte ForcedAMSDUMaxNum; - u4Byte AmsduCnt[5]; // For test only , should be deleted later. - - u1Byte CurrentOpMode; - - // MIMO PS related - u1Byte SelfMimoPs; - u1Byte PeerMimoPs; - - // 40MHz Channel Offset settings. - BOOLEAN bPeer40MHzCap; // Supported channel width set - EXTCHNL_OFFSET PeerExtChnlOffset; - BOOLEAN bPeer40MHzIntolerant; // Forty MHz Intolerant - - // 20/40 Bss Coexistence - BOOLEAN bBssCoexist; // 20/40 Bss Coexistence Management Support from self config - BOOLEAN bPeerBssCoexistence; // 20/40 BSS Coexistence Management Support from AP - BOOLEAN bCurOBSSScanExemptionGrt; // OBSS Scanning exemption grant - u2Byte CurOBSSScanInterval; // BSS Channel Width Trigger Scan Interval - u2Byte IdleOBSSScanCnt; // The scan idle count for BSS scan interval - u8Byte lastTimeSentObssRptUs; // Last system time to send the Obss report - - // For Realtek proprietary A-MPDU factor for aggregation - u1Byte RT2RT_HT_Mode; - - // Rx Reorder control - BOOLEAN bRegRxReorderEnable; - BOOLEAN bCurRxReorderEnable; - u1Byte RxReorderWinSize; - u1Byte RxReorderPendingTime; - u2Byte RxReorderDropCounter; - - // Accept ADDBA Request - BOOLEAN bAcceptAddbaReq; - - //RDG enable - BOOLEAN bRDGEnable; - - - //Added for dual band 40MHz support - BOOLEAN bRegBW40MHzFor2G; - BOOLEAN bRegBW40MHzFor5G; - - BOOLEAN b40Intolerant; - BOOLEAN bAMPDUManual; - u1Byte nTxSPStream; - u1Byte nRxSPStream; - BOOLEAN bRegShortGI40MHz; - BOOLEAN bRegShortGI20MHz; -}RT_HIGH_THROUGHPUT, *PRT_HIGH_THROUGHPUT; - - -//------------------------------------------------------------ -// The Data structure is used to keep HT related variable for "each Sta" -// when card is configured as "AP mode" -//------------------------------------------------------------ - -typedef struct _RT_HTINFO_STA_ENTRY{ - BOOLEAN bEnableHT; - - u1Byte LDPC; - u1Byte STBC; - - BOOLEAN bSupportCck; - - u2Byte AMSDU_MaxSize; - - u1Byte AMPDU_Factor; - u1Byte MPDU_Density; - - u1Byte MimoPs; - - u1Byte McsRateSet[16]; - u1Byte HTHighestOperaRate; - - BOOLEAN bCurRxReorderEnable; - - BOOLEAN bShortGI20M; - BOOLEAN bShortGI40M; - - u1Byte HtCurBeamform; -}RT_HTINFO_STA_ENTRY, *PRT_HTINFO_STA_ENTRY; - - -//------------------------------------------------------------ -// The Data structure is used to keep HT related variable for "each AP" -// when card is configured as "STA mode" -//------------------------------------------------------------ - -typedef struct _BSS_HT{ - - BOOLEAN bdSupportHT; - - // HT related elements - u1Byte bdHTCapBuf[32]; - u2Byte bdHTCapLen; - u1Byte bdHTInfoBuf[32]; - u2Byte bdHTInfoLen; - - HT_SPEC_VER bdHTSpecVer; - - u1Byte RT2RT_HT_Mode; - - BOOLEAN bd40Intolerant; - BOOLEAN bdOBSSExemption; - u2Byte OBSSScanInterval; -}BSS_HT, *PBSS_HT; - -typedef struct _MIMO_RSSI{ - u4Byte EnableAntenna; - u4Byte AntennaA; - u4Byte AntennaB; - u4Byte AntennaC; - u4Byte AntennaD; - u4Byte Average; -}MIMO_RSSI, *PMIMO_RSSI; - -typedef struct _MIMO_EVM{ - u4Byte EVM1; - u4Byte EVM2; -}MIMO_EVM, *PMIMO_EVM; - -#endif //__INC_HTTYPE_H diff --git a/network/wlan/WDI/HEADER/HalDef.h b/network/wlan/WDI/HEADER/HalDef.h deleted file mode 100644 index 5a76ec83..00000000 --- a/network/wlan/WDI/HEADER/HalDef.h +++ /dev/null @@ -1,3076 +0,0 @@ -#ifndef __INC_HALDEF_H -#define __INC_HALDEF_H - -// -// General Definition for -// -/* Common definition for all 819x series driver */ - -// -// 2012/02/02 MH Add HW IC support here. To repacle the definition from precomp.h -// to current position. If Linux need to use small HAl code size, please disable -// IC support. We will list all IC support ability here. -// -#define RTL8192S_SUPPORT 0 -#define RTL8192C_SUPPORT 0 -#define RTL8192D_SUPPORT 0 -#define RTL8723A_SUPPORT 0 -#define RTL8195A_SUPPORT 0 -#define RTL8723B_SUPPORT 1 -#if(MS_SUPPORT == 0) -#define RTL8703B_SUPPORT 0 -#define RTL8188E_SUPPORT 0 -#define RTL8812A_SUPPORT 0 -#define RTL8821A_SUPPORT 0 -#define RTL8192E_SUPPORT 0 -#define RTL8814A_SUPPORT 0 -#define RTL8821B_SUPPORT 0 -#define RTL8822B_SUPPORT 0 -#define RTL8188F_SUPPORT 0 -#define RTL8723D_SUPPORT 0 - -#define TESTCHIP_SUPPORT 1 -#else -#define RTL8703B_SUPPORT 0 -#define RTL8188E_SUPPORT 0 -#define RTL8812A_SUPPORT 0 -#define RTL8821A_SUPPORT 0 -#define RTL8192E_SUPPORT 0 -#define RTL8814A_SUPPORT 0 -#define RTL8821B_SUPPORT 0 -#define RTL8822B_SUPPORT 0 -#define RTL8188F_SUPPORT 0 -#define RTL8723D_SUPPORT 0 - -#define TESTCHIP_SUPPORT 0 -#endif -// -// For different HW register polling type definition. -// -#define REG_POLL_1BYTE_EQU 0 -#define REG_POLL_2BYTE_EQU 1 -#define REG_POLL_4BYTE_EQU 2 -#define REG_POLL_1BYTE_BIT_MASK 3 -#define REG_POLL_2BYTE_BIT_MASK 4 -#define REG_POLL_4BYTE_BIT_MASK 5 - -// -// For different memory size setting, you can switch HW IC support. -// - - -#define RTL819X_NO_SCAN_AFTER_LINK 0 - -#define U1DONTCARE 0xFF -#define U2DONTCARE 0xFFFF - -#define INTEL_VENDOR_ID 0x8086 -#define SIS_VENDOR_ID 0x1039 -#define ATI_VENDOR_ID 0x1002 -#define ATI_DEVICE_ID 0x7914 -#define AMD_VENDOR_ID 0x1022 - -#define MIN_DESC_BUFFER_LENGTH 5 - -// -// 2011/09/07 MH Add for different channel plan power index offset -// -#define PWR_IDX_GROUP_NUM 4 // CCK/Legacyofdm/HT20/HT40 - -typedef enum _PCI_BRIDGE_VENDOR -{ - PCI_BRIDGE_VENDOR_INTEL = 0, - PCI_BRIDGE_VENDOR_ATI, - PCI_BRIDGE_VENDOR_AMD, - PCI_BRIDGE_VENDOR_SIS, - PCI_BRIDGE_VENDOR_UNKNOWN, - PCI_BRIDGE_VENDOR_MAX -} PCI_BRIDGE_VENDOR; - - -typedef enum _GPIORF_CONTROL{ - GPIORF_START = 0, - GPIORF_STOP = 1, - GPIORF_POLLING = 2, -}GPIORF_CONTROL; - - -typedef enum _POWER_SAVE_MODE // parameter of MlmePowerMgt -{ - POWER_SAVE_MODE_ACTIVE, - POWER_SAVE_MODE_SAVE, -}POWER_SAVE_MODE; - -// -// For RTL8723 WiFi/BT/GPS multi-function configuration. 2010.10.06. -// -typedef enum _RT_MULTI_FUNC{ - RT_MULTI_FUNC_NONE = 0x00, - RT_MULTI_FUNC_WIFI = 0x01, - RT_MULTI_FUNC_BT = 0x02, - RT_MULTI_FUNC_GPS = 0x04, -}RT_MULTI_FUNC,*PRT_MULTI_FUNC; - - -#define INCLUDE_MULTI_FUNC_BT(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_BT) -#define INCLUDE_MULTI_FUNC_GPS(_Adapter) (GET_HAL_DATA(_Adapter)->MultiFunc & RT_MULTI_FUNC_GPS) - -// -// For RTL8723 WiFi PDn/GPIO polarity control configuration. 2010.10.08. -// -typedef enum _RT_POLARITY_CTL{ - RT_POLARITY_LOW_ACT = 0, - RT_POLARITY_HIGH_ACT = 1, -}RT_POLARITY_CTL,*PRT_POLARITY_CTL; - -// For RTL8723 regulator mode. by tynli. 2011.01.14. -typedef enum _RT_REGULATOR_MODE{ - RT_SWITCHING_REGULATOR = 0, - RT_LDO_REGULATOR = 1, -}RT_REGULATOR_MODE,*PRT_REGULATOR_MODE; - - -typedef enum _DBI_TYPE -{ - DBI_READ, - DBI_WRITE -} DBI_TYPE, *PDBI_TYPE; - - -#define HAL_TIMER_OWNER_P2P_POWERSAVE BIT0 -#define HAL_TIMER_OWNER_TDLS_OFF_CHNL_TRIGGER BIT1 -#define HAL_TIMER_OWNER_TDLS_OFF_CHNL_TIMEOUT BIT2 -#define HAL_TIMER_OWNER_MULTICHANNEL_SWITCH BIT3 - -#define HAL_TIMEOUT_REASON_INTERRUPT 1 -#define HAL_TIMEOUT_REASON_HALT 2 - - -typedef VOID -(*HAL_TIMER_CALLBACK)( - IN PVOID pContext - ); - -typedef struct _HAL_TIMER_STATE -{ - RT_LIST_ENTRY List; - u4Byte TimerOwners; // The owners who have the timeout values. - BOOLEAN bAbsolute; // True if the timeout is TSF matched with Timeout. - u8Byte Timeout; // Timeout TSF timer for client mode. - PVOID pContext; // Timeout callback context. - HAL_TIMER_CALLBACK callbackFunc; // The timeout callback function. -}HAL_TIMER_STATE, *PHAL_TIMER_STATE; - -#define HAL_TIMER_FILL_TIMER_STATE(__pHalTimerState, __Owner, __DelayUs, __pContext, __Callback) \ -{ \ - (__pHalTimerState)->TimerOwners = __Owner; \ - (__pHalTimerState)->bAbsolute = FALSE; \ - (__pHalTimerState)->Timeout = __DelayUs; \ - (__pHalTimerState)->pContext = __pContext; \ - (__pHalTimerState)->callbackFunc = __Callback; \ -} - -#define HAL_TIMER_FILL_TIMER_STATE_FULL_TSF_TIME(__pHalTimerState, __Owner, __TsfUs, __pContext, __Callback) \ -{ \ - (__pHalTimerState)->TimerOwners = __Owner; \ - (__pHalTimerState)->bAbsolute = TRUE; \ - (__pHalTimerState)->Timeout = __TsfUs; \ - (__pHalTimerState)->pContext = __pContext; \ - (__pHalTimerState)->callbackFunc = __Callback; \ -} - - -typedef enum _RT_AMPDU_BRUST_MODE{ - RT_AMPDU_BRUST_NONE = 0, - RT_AMPDU_BRUST_92D = 1, - RT_AMPDU_BRUST_88E = 2, - RT_AMPDU_BRUST_8812_4 = 3, - RT_AMPDU_BRUST_8812_8 = 4, - RT_AMPDU_BRUST_8812_12 = 5, - RT_AMPDU_BRUST_8812_15 = 6, - RT_AMPDU_BRUST_8723B = 7, - RT_AMPDU_BRUST_8814A= 8, - RT_AMPDU_BRUST_8822B= 9 - -}RT_AMPDU_BRUST,*PRT_AMPDU_BRUST_MODE; - - -// The power in dbm we never support. So define it as the unspecified power. -#define UNSPECIFIED_PWR_DBM (~0x7F) - -// RF Off Level for IPS or HW/SW radio off -#define RT_RF_OFF_LEVL_ASPM BIT0 // PCI ASPM -#define RT_RF_OFF_LEVL_CLK_REQ BIT1 // PCI clock request -#define RT_RF_OFF_LEVL_PCI_D3 BIT2 // PCI D3 mode -#define RT_RF_OFF_LEVL_HALT_NIC BIT3 // NIC halt, re-initialize hw parameters -#define RT_RF_OFF_LEVL_FREE_FW BIT4 // FW free, re-download the FW -#define RT_RF_OFF_LEVEL_FW_IPS_32K BIT5 // FW in IPS 32k -#define RT_RF_PS_LEVEL_ALWAYS_ASPM BIT6 // Always enable ASPM and Clock Req in initialization. -#define RT_RF_OFF_LEVEL_RTD3 BIT7 // Follow wowlan Hw flow and control RF on/off by Fw -#define RT_RF_LPS_P2P_PS BIT29 // It's a P2P Power Save -#define RT_RF_LPS_DISALBE_2R BIT30 // When LPS is on, disable 2R if no packet is received or transmittd. -#define RT_RF_LPS_LEVEL_ASPM BIT31 // LPS with ASPM - - -// ASPM OSC Control bit, added by Roger, 2013.03.29. -#define RT_PCI_ASPM_OSC_IGNORE 0 // PCI ASPM ignore OSC control in default -#define RT_PCI_ASPM_OSC_ENABLE BIT0 // PCI ASPM controlled by OS according to ACPI Spec 5.0 -#define RT_PCI_ASPM_OSC_DISABLE BIT1 // PCI ASPM controlled by driver or BIOS, i.e., force enable ASPM - -// ASPM Backdoor Control -#define RT_PCI_BC_CLK_REQ BIT0 -#define RT_PCI_BC_ASPM_L0s BIT1 -#define RT_PCI_BC_ASPM_L1 BIT2 -#define RT_PCI_BC_ASPM_L1Off BIT3 -#define RT_PCI_BC_ASPM_LTR BIT4 -#define RT_PCI_BC_ASPM_OBFF BIT5 - -#if (RTL8723B_SUPPORT == 1) -// RTL8723B Series -#define IS_HARDWARE_TYPE_8723BE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723BE) -#define IS_HARDWARE_TYPE_8723BS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723BS) -#define IS_HARDWARE_TYPE_8723BU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723BU) -#define IS_HARDWARE_TYPE_8723B(_Adapter) \ -(IS_HARDWARE_TYPE_8723BE(_Adapter) || IS_HARDWARE_TYPE_8723BU(_Adapter) || IS_HARDWARE_TYPE_8723BS(_Adapter) ) -#else -#define IS_HARDWARE_TYPE_8723BE(_Adapter) FALSE -#define IS_HARDWARE_TYPE_8723BS(_Adapter) FALSE -#define IS_HARDWARE_TYPE_8723BU(_Adapter) FALSE -#define IS_HARDWARE_TYPE_8723B(_Adapter) FALSE -#endif - -// RTL8188E Series -#define IS_HARDWARE_TYPE_8188EE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EE) -#define IS_HARDWARE_TYPE_8188EU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188EU) -#define IS_HARDWARE_TYPE_8188ES(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188ES) - -#define IS_HARDWARE_TYPE_8188E(_Adapter) \ -(IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter)) - -#define IS_HARDWARE_TYPE_OLDER_THAN_8812A(_Adapter) \ - (IS_HARDWARE_TYPE_8188EE(_Adapter) || IS_HARDWARE_TYPE_8188EU(_Adapter) || IS_HARDWARE_TYPE_8188ES(_Adapter)) - -// RTL8812 Series -#define IS_HARDWARE_TYPE_8812AE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812E) -#define IS_HARDWARE_TYPE_8812AU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8812AU) -#define IS_HARDWARE_TYPE_8812A(_Adapter) \ - (IS_HARDWARE_TYPE_8812AE(_Adapter) || IS_HARDWARE_TYPE_8812AU(_Adapter)) - - -// RTL8821 Series -#define IS_HARDWARE_TYPE_8821AE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821E) -#define IS_HARDWARE_TYPE_8811AU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8811AU) -#define IS_HARDWARE_TYPE_8821AU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821U) -#define IS_HARDWARE_TYPE_8821U(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821U ||\ - ((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8811AU) -#define IS_HARDWARE_TYPE_8821S(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821S) -#define IS_HARDWARE_TYPE_8821(_Adapter) \ - (IS_HARDWARE_TYPE_8821AE(_Adapter) || IS_HARDWARE_TYPE_8821U(_Adapter)|| IS_HARDWARE_TYPE_8821S(_Adapter)) -#define IS_HARDWARE_TYPE_8821A(_Adapter) \ - (IS_HARDWARE_TYPE_8821AE(_Adapter) || IS_HARDWARE_TYPE_8821U(_Adapter)|| IS_HARDWARE_TYPE_8821S(_Adapter)) - -#define IS_HARDWARE_TYPE_JAGUAR(_Adapter) \ -(IS_HARDWARE_TYPE_8812A(_Adapter) || IS_HARDWARE_TYPE_8821(_Adapter)) - -#define IS_HARDWARE_TYPE_8821BE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821BE) -#define IS_HARDWARE_TYPE_8821BU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821BU) -#define IS_HARDWARE_TYPE_8821BS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8821BS) -#define IS_HARDWARE_TYPE_8821B(_Adapter) \ -(IS_HARDWARE_TYPE_8821BE(_Adapter) || IS_HARDWARE_TYPE_8821BU(_Adapter) || IS_HARDWARE_TYPE_8821BS(_Adapter)) - -#define IS_HARDWARE_TYPE_8822BE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8822BE) -#define IS_HARDWARE_TYPE_8822BU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8822BU) -#define IS_HARDWARE_TYPE_8822BS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8822BS) -#define IS_HARDWARE_TYPE_8822B(_Adapter) \ -(IS_HARDWARE_TYPE_8822BE(_Adapter) || IS_HARDWARE_TYPE_8822BU(_Adapter) || IS_HARDWARE_TYPE_8822BS(_Adapter)) - - -#define IS_HARDWARE_TYPE_JAGUAR2(_Adapter) \ -(IS_HARDWARE_TYPE_8814A(_Adapter) || IS_HARDWARE_TYPE_8821B(_Adapter) || IS_HARDWARE_TYPE_8822B(_Adapter)) - -#define IS_HARDWARE_TYPE_JAGUAR_AND_JAGUAR2(_Adapter) \ -(IS_HARDWARE_TYPE_JAGUAR(_Adapter) || IS_HARDWARE_TYPE_JAGUAR2(_Adapter)) - - -//RTL8192E Series -#define IS_HARDWARE_TYPE_8192EE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192EE) -#define IS_HARDWARE_TYPE_8192EU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192EU) -#define IS_HARDWARE_TYPE_8192ES(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8192ES) - -#define IS_HARDWARE_TYPE_8192E(_Adapter) \ -(IS_HARDWARE_TYPE_8192EE(_Adapter) || IS_HARDWARE_TYPE_8192EU(_Adapter) ||IS_HARDWARE_TYPE_8192ES(_Adapter)) - -//RTL8814A Series -#define IS_HARDWARE_TYPE_8814AE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8814AE) -#define IS_HARDWARE_TYPE_8814AU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8814AU) -#define IS_HARDWARE_TYPE_8814AS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8814AS) - -#define IS_HARDWARE_TYPE_8814A(_Adapter) \ -(IS_HARDWARE_TYPE_8814AE(_Adapter) || IS_HARDWARE_TYPE_8814AU(_Adapter) ||IS_HARDWARE_TYPE_8814AS(_Adapter)) - -//RTL8723D Series -#define IS_HARDWARE_TYPE_8723DE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723DE) -#define IS_HARDWARE_TYPE_8723DU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723DU) -#define IS_HARDWARE_TYPE_8723DS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8723DS) - -#define IS_HARDWARE_TYPE_8723D(_Adapter) \ -(IS_HARDWARE_TYPE_8723DE(_Adapter) || IS_HARDWARE_TYPE_8723DU(_Adapter) ||IS_HARDWARE_TYPE_8723DS(_Adapter)) - - -#define IS_HARDWARE_TYPE_UNKNOWN(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_MAX) - -#define IS_DUAL_BAND_SUPPORT(_Adapter) (( (GET_HAL_DATA(_Adapter)->BandSet == BAND_ON_BOTH )? TRUE:FALSE)) - -// RTL8703B Series -#define IS_HARDWARE_TYPE_8703BE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8703BE) -#define IS_HARDWARE_TYPE_8703BS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8703BS) -#define IS_HARDWARE_TYPE_8703BU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8703BU) -#define IS_HARDWARE_TYPE_8703B(_Adapter) \ -(IS_HARDWARE_TYPE_8703BE(_Adapter) || IS_HARDWARE_TYPE_8703BU(_Adapter) || IS_HARDWARE_TYPE_8703BS(_Adapter) ) - -#define IS_HALF_CAM_ENTEY_SERIES(_Adapter) (IS_HARDWARE_TYPE_8703B(_Adapter) || IS_HARDWARE_TYPE_8188F(_Adapter)) - -#define IS_ONE_BYTE_ALIGNED_SERIES(_Adapter) (IS_HARDWARE_TYPE_8703B(_Adapter) || IS_HARDWARE_TYPE_8188F(_Adapter) || IS_HARDWARE_TYPE_8822B(_Adapter)) - -#define IS_EFUSE_RECOVERY_NEEDED_SERIES(_Adapter) (IS_HARDWARE_TYPE_8188E(_Adapter) || IS_HARDWARE_TYPE_8723B(_Adapter) || IS_HARDWARE_TYPE_8192E(_Adapter)) - -#define IS_NEW_USB_RXAGG_SERIES(_Adapter) (IS_HARDWARE_TYPE_8703BU(_Adapter) || IS_HARDWARE_TYPE_8723DU(_Adapter) || IS_HARDWARE_TYPE_8822BU(_Adapter)) - -// RTL8188F Series -#define IS_HARDWARE_TYPE_8188FE(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188FE) -#define IS_HARDWARE_TYPE_8188FS(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188FS) -#define IS_HARDWARE_TYPE_8188FU(_Adapter) (((PADAPTER)_Adapter)->HardwareType==HARDWARE_TYPE_RTL8188FU) -#define IS_HARDWARE_TYPE_8188F(_Adapter) \ -( IS_HARDWARE_TYPE_8188FE(_Adapter) || IS_HARDWARE_TYPE_8188FS(_Adapter) || IS_HARDWARE_TYPE_8188FU(_Adapter) ) - -#define RT_DISABLE_ASPM(_PADAPTER) -#define RT_ENABLE_ASPM(_PADAPTER) -#define RT_ENTER_D3(_PADAPTER, _bTempSetting) -#define RT_LEAVE_D3(_PADAPTER, _bTempSetting) -#define RT_DBG_YB(_PADAPTER, _Offset) - - -#define RT_CHECK_TX_IO_QUEUE_EMPTY(_PADAPTER) PlatformSdioTxAndAwbQueueEmpty(_PADAPTER) -#define RT_CHECK_TX_QUEUE_IDX_EMPTY(_PADAPTER, _QIDX) PlatformSdioTxQueueIdxEmpty(_PADAPTER, _QIDX) - -#define RT_IS_DC_MODE(_pPSC) IsCurrDCMode(_pPSC) - -#define HW_ENABLE_TX_ALL 0 -#define HW_DISABLE_TX_ALL 1 -#define HW_DISABLE_TX_DATA 2 -#define HW_DISABLE_TX_BEACON 3 -#define HW_ENABLE_TX_BEACON 4 - -// Fw PS state for RPWM. -/* - BIT[2:0] = HW state - BIT[3] = Protocol PS state, 1: register active state , 0: register sleep state - BIT[4] = sub-state -*/ -#define FW_PS_GO_ON BIT(0) -#define FW_PS_TX_NULL BIT(1) -#define FW_PS_RF_ON BIT(2) -#define FW_PS_REGISTER_ACTIVE BIT(3) - -#define FW_PS_DPS BIT0 -#define FW_PS_LCLK (FW_PS_DPS) -#define FW_PS_RF_OFF BIT1 -#define FW_PS_ALL_ON BIT2 -#define FW_PS_ST_ACTIVE BIT3 -//#define FW_PS_LP BIT4 // low performance -#define FW_PS_ISR_ENABLE BIT4 -#define FW_PS_IMR_ENABLE BIT5 - - -#define FW_PS_ACK BIT6 -#define FW_PS_TOGGLE BIT7 - - // 88E RPWM value - // BIT[0] = 1: 32k, 0: 40M -#define FW_PS_CLOCK_OFF BIT0 // 32k -#define FW_PS_CLOCK_ON 0 // 40M - -#define FW_PS_STATE_MASK (0x0F) -#define FW_PS_STATE_HW_MASK (0x07) -#define FW_PS_STATE_INT_MASK (0x3F) // ISR_ENABLE, IMR_ENABLE, and PS mode should be inherited. - -#define FW_PS_STATE(x) (FW_PS_STATE_MASK & (x)) -#define FW_PS_STATE_HW(x) (FW_PS_STATE_HW_MASK & (x)) -#define FW_PS_STATE_INT(x) (FW_PS_STATE_INT_MASK & (x)) -#define FW_PS_ISR_VAL(x) ((x) & 0x70) -#define FW_PS_IMR_MASK(x) ((x) & 0xDF) -#define FW_PS_KEEP_IMR(x) ((x) & 0x20) - - -#define FW_PS_STATE_S0 (FW_PS_DPS) -#define FW_PS_STATE_S1 (FW_PS_LCLK) -#define FW_PS_STATE_S2 (FW_PS_RF_OFF) -#define FW_PS_STATE_S3 (FW_PS_ALL_ON) -#define FW_PS_STATE_S4 ((FW_PS_ST_ACTIVE) | (FW_PS_ALL_ON)) - -#define FW_PS_STATE_ALL_ON_88E (FW_PS_CLOCK_ON) // ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE)) -#define FW_PS_STATE_RF_ON_88E (FW_PS_CLOCK_ON) // (FW_PS_RF_ON) -#define FW_PS_STATE_RF_OFF_88E (FW_PS_CLOCK_ON) // 0x0 -#define FW_PS_STATE_RF_OFF_LOW_PWR_88E (FW_PS_CLOCK_OFF) // (FW_PS_STATE_RF_OFF) - -#define FW_PS_STATE_ALL_ON_92C (FW_PS_STATE_S4) -#define FW_PS_STATE_RF_ON_92C (FW_PS_STATE_S3) -#define FW_PS_STATE_RF_OFF_92C (FW_PS_STATE_S2) -#define FW_PS_STATE_RF_OFF_LOW_PWR_92C (FW_PS_STATE_S1) - - -// For 88E H2C PwrMode Cmd ID 5. -#define FW_PWR_STATE_ACTIVE ((FW_PS_RF_ON) | (FW_PS_REGISTER_ACTIVE)) -#define FW_PWR_STATE_RF_OFF 0 - -#define FW_PS_IS_ACK(x) ((x) & FW_PS_ACK ) -#define FW_PS_IS_CLK_ON(x) ((x) & (FW_PS_RF_OFF |FW_PS_ALL_ON )) -#define FW_PS_IS_RF_ON(x) ((x) & (FW_PS_ALL_ON)) -#define FW_PS_IS_ACTIVE(x) ((x) & (FW_PS_ST_ACTIVE)) -#define FW_PS_IS_CPWM_INT(x) ((x) & 0x40) - -#define FW_CLR_PS_STATE(x) ((x) = ((x) & (0xF0))) - -#define IS_IN_LOW_POWER_STATE_88E(pAdapter, FwPSState) \ - (FW_PS_STATE(FwPSState) == FW_PS_CLOCK_OFF) - -#define IS_IN_LOW_POWER_STATE_92C(pAdapter, FwPSState) \ - ((FW_PS_STATE(FwPSState) == FW_PS_STATE_RF_OFF_LOW_PWR_92C) && \ - GET_POWER_SAVE_CONTROL(&(pAdapter->MgntInfo))->bLowPowerEnable) - -// -// We should take RTL8723B into consideration, 2012.10.08 -// -#define IS_IN_LOW_POWER_STATE(_Adapter, _FwPSState) IS_IN_LOW_POWER_STATE_88E(_Adapter, _FwPSState) - - -#define HW_CLOCK_OFF_TIMEOUT 10 // unit: ms - -enum _Fw_Ps_State{ - FW_PS_STATE_ALL_ON = 0, - FW_PS_STATE_RF_ON = 1, - FW_PS_STATE_RF_OFF = 2, - FW_PS_STATE_RF_OFF_LOW_PWR = 3, -}; - -typedef enum _LOWPWR32K_EXCEPTION -{ - LOWPWR32K_EXCEPTION_NONE = 0x00, - LOWPWR32K_EXCEPTION_CPWM_LOST = 0x01, - LOWPWR32K_EXCEPTION_FW_HANG = 0x02, - LOWPWR32K_EXCEPTION_CANNOT_RECOVER_HW_CLK = 0x03, - LOWPWR32K_EXCEPTION_HW_POWER_OFF = 0x04, - LOWPWR32K_EXCEPTION_MAX -}LOWPWR32K_EXCEPTION; - -typedef enum _RSVDPAGE_TYPE -{ - RSVDPAGE_TYPE_BASIC = 0x00, - RSVDPAGE_TYPE_LPS = 0x01, - RSVDPAGE_TYPE_WOWLAN = 0x02, - RSVDPAGE_TYPE_FCS = 0x04, - RSVDPAGE_TYPE_BT = 0x08, - RSVDPAGE_TYPE_MAX = 0xffff -}RSVDPAGE_TYPE; - -typedef enum _RQPN_TYPE -{ - RQPN_TYPE_NORMAL = 0x00, - RQPN_TYPE_WOWLAN = 0x01, - RQPN_TYPE_MAX -}RQPN_TYPE; - -// ------------------------------------------------------------------------------------------------ -// Specific definition depend on different chipset -// ------------------------------------------------------------------------------------------------ -#define SILENT_RESET 0 - - - -// ------------------------------------------------------------------------------------------------ -// We can try to handle all Tx shift condition together!! -// This includes the TxDesc for 8187 and 8187B, TxFwInfo for 8190Pci, and other shift for 8190Usb -// Caution: This is not implement now!! -// ------------------------------------------------------------------------------------------------ - -// ------------------------------------------------------------------------------------------------ -// The definition for FindAdapter Procedure -// (1) PCI memory mapped IO range. -// (2) Revision ID -// (3) Default Hardware Type -// (4) Require IO mapped IO Even if Memory Mapped IO is applied -// ------------------------------------------------------------------------------------------------ - -#define HAL_HW_SDIO_8723S_PID 0x8723 // 8723S -#define HAL_HW_SDIO_8188E_PID 0x8179 //8188E -#define HAL_HW_SDIO_8821S_PID 0x8821 -#define HAL_HW_SDIO_8192ES_PID 0x818B -#define HAL_HW_SDIO_8723BS_PID_TEST_CHIP 0x8753 -#define HAL_HW_SDIO_8723BS_PID 0xB723 -#define HAL_HW_SDIO_8723BS_PID_ACER 0x0623 -#define HAL_HW_SDIO_8723BS_PID_HP 0x0523 -#define HAL_HW_SDIO_8814AS_PID 0x8813//20130415 KaiYuan add for 8814 Temp -#define HAL_HW_SDIO_8703BS_PID 0xB703 -#define HAL_HW_SDIO_8814AS_PID 0x8813//20130415 KaiYuan add for 8814 Temp -#define HAL_HW_SDIO_8821BS_PID 0xB821 -#define HAL_HW_SDIO_8822BS_PID 0xB822 -#define HAL_HW_SDIO_8188FS_PID 0xF179 -#define HAL_HW_SDIO_8723DS_PID 0xD723 //8723D - -#define HAL_HW_TYPE_ID_8723A 0x01 -#define HAL_HW_TYPE_ID_8188E 0x02 -#define HAL_HW_TYPE_ID_8812A 0x04 -#define HAL_HW_TYPE_ID_8821A 0x05 -#define HAL_HW_TYPE_ID_8723B 0x06 -#define HAL_HW_TYPE_ID_92E 0x07 -#define HAL_HW_TYPE_ID_8814A 0x08 -#define HAL_HW_TYPE_ID_8821B 0x09 -#define HAL_HW_TYPE_ID_8822B 0x0a -#define HAL_HW_TYPE_ID_8703B 0x0b -#define HAL_HW_TYPE_ID_8188F 0x0c -#define HAL_HW_TYPE_ID_8723D 0x0f - - -// Power on I/O space range. -#define IS_PCIE_POWER_ON_IO_REG(offset) (((offset < 0x100) || (offset >= 0x0300 && offset < 0x0400)) ? TRUE: FALSE) -#define IS_SDIO_POWER_ON_IO_REG(DeviceID, offset) ( \ - ((DeviceID == WLAN_IOREG_DEVICE_ID && (offset < 0x100)) ||\ - (DeviceID == SDIO_LOCAL_DEVICE_ID)) ? TRUE: FALSE) -#define IS_USB_POWER_ON_IO_REG(offset) ((offset < 0x0100 || offset >= 0xFE00) ? TRUE: FALSE) - -// -// (1) Define the data type of ISR/IMR on each IC. 2005.11.13, by rcnjko. -// (2) Define allowed AMSDU size according to Tx FIFO size indifferent hardware, -// (3) Define Retry Limit for different hardware -// 2007/11/12 by Emily -// - -#define HAL_GET_MAXIMUN_AMSDU_SIZE(_Size) _Size // Limited by TX FIFO Size -#define HAL_GET_DECLARED_AMSDU_SIZE(_Peer_Cap) (_Peer_Cap==0)?3839:7935; - -// Set diffrent retry limit in infrastructure mode and adhoc mode because if driver is set -// in adhoc mode, driver has to send probe response, and if the other STA is scaning and switch -// to another channel, driver will send to many useless probe response packet. Mangament -// frame has higher priority which may cause starvation of data packet. 2008/05/14 by Emily - -// The reason to set HAL_RETRY_LIMIT_INFRA to 0x30 -// (1) Lanhsin modified 02272008 for Linksys WRT350N. Under air, if we don't retry more -// times, these APs can't rx ok and the TP will be bad. -// (2) Cosa modified 02272008 for BelkinF5D(Ralink) AP, Netgear WNR854T. Under air, if -// we don't retry more times, these APs can't rx ok and the TP will be bad. -#define HAL_RETRY_LIMIT_INFRA 48 -#define HAL_RETRY_LIMIT_AP_ADHOC 14 - -typedef u4Byte RT_INT_REG, *PRT_INT_REG; - -// ------------------------------------------------------------------------------------------------ -// Define file name for Firmware image and PHY configuration -// ------------------------------------------------------------------------------------------------ - -//--------------------------------------------------------------------- -// RTL8192CU From file -//--------------------------------------------------------------------- - - //2TODO: The following need to check!! - #define RTL8192C_FW_TSMC_IMG "rtl8192CU\\rtl8192cfwT.bin" - #define RTL8192C_FW_UMC_IMG "rtl8192CU\\rtl8192cfwU.bin" - #define RTL8192C_FW_UMC_B_IMG "rtl8192CU\\rtl8192cfwU_B.bin" - #define RTL8192D_FW_IMG "rtl8192DU\\rtl8192dfw.bin" - #define RTL8192C_FW_TSMC_WW_IMG "rtl8192CU\\rtl8192cfwTww.bin" - #define RTL8192C_FW_UMC_WW_IMG "rtl8192CU\\rtl8192cfwUww.bin" - #define RTL8192C_FW_UMC_B_WW_IMG "rtl8192CU\\rtl8192cfwU_Bww.bin" - - #define RTL8188C_PHY_REG "rtl8192CU\\PHY_REG_1T.txt" - #define RTL8188C_PHY_RADIO_A "rtl8192CU\\radio_a_1T.txt" - #define RTL8188C_PHY_RADIO_B "rtl8192CU\\radio_b_1T.txt" - #define RTL8188C_AGC_TAB "rtl8192CU\\AGC_TAB_1T.txt" - #define RTL8188C_PHY_MACREG "rtl8192CU\\MAC_REG.txt" - #define RTL8188C_PHY_RADIO_A_mCard "rtl8192CU\\radio_a_1T_mCard.txt" - #define RTL8188C_PHY_RADIO_B_mCard "rtl8192CU\\radio_b_1T_mCard.txt" - #define RTL8188C_PHY_RADIO_A_HP "rtl8192CU\\radio_a_1T_HP.txt" - #define RTL8188C_PHY_REG_HP "rtl8192CU\\PHY_REG_1T_HP.txt" - #define RTL8188C_PHY_REG_mCard "rtl8192CU\\PHY_REG_1T_mCard.txt" - #define RTL8188C_AGC_TAB_HP "rtl8192CU\\AGC_TAB_1T_HP.txt" - - #define RTL8192C_PHY_REG "rtl8192CU\\PHY_REG_2T.txt" - #define RTL8192C_PHY_REG_mCard "rtl8192CU\\PHY_REG_2T_mCard.txt" - #define RTL8192C_PHY_RADIO_A "rtl8192CU\\radio_a_2T.txt" - #define RTL8192C_PHY_RADIO_B "rtl8192CU\\radio_b_2T.txt" - #define RTL8192C_AGC_TAB "rtl8192CU\\AGC_TAB_2T.txt" - #define RTL8192C_PHY_MACREG "rtl8192CU\\MAC_REG.txt" - - #define RTL819X_PHY_REG_PG "rtl8192CU\\PHY_REG_PG.txt" - #define RTL819X_PHY_REG_MP "rtl8192CU\\PHY_REG_MP.txt" - #define RTL819X_PHY_REG_PG_HP "rtl8192CU\\PHY_REG_PG_HP.txt" - #define RTL819X_PHY_RADIO_A "rtl8192CU\\radio_a.txt" - #define RTL819X_PHY_RADIO_B "rtl8192CU\\radio_b.txt" - -//--------------------------------------------------------------------- -// RTL8192DU From file -//--------------------------------------------------------------------- - - #define RTL8192D_PHY_REG "rtl8192DU\\PHY_REG.txt" - #define RTL8192D_PHY_REG_PG "rtl8192DU\\PHY_REG_PG.txt" - #define RTL8192D_PHY_REG_MP "rtl8192DU\\PHY_REG_MP.txt" - - #define RTL8192D_AGC_TAB "rtl8192DU\\AGC_TAB.txt" - #define RTL8192D_AGC_TAB_2G "rtl8192DU\\AGC_TAB_2G.txt" - #define RTL8192D_AGC_TAB_5G "rtl8192DU\\AGC_TAB_5G.txt" - #define RTL8192D_PHY_RADIO_A "rtl8192DU\\radio_a.txt" - #define RTL8192D_PHY_RADIO_B "rtl8192DU\\radio_b.txt" - #define RTL8192D_PHY_RADIO_A_intPA "rtl8192DU\\radio_a_intPA.txt" - #define RTL8192D_PHY_RADIO_B_intPA "rtl8192DU\\radio_b_intPA.txt" - #define RTL8192D_PHY_MACREG "rtl8192DU\\MAC_REG.txt" - -//--------------------------------------------------------------------- -// RTL8812AU From file -//--------------------------------------------------------------------- - #define RTL8812_FW_IMG "rtl8812AU\\rtl8812Ufw.bin" - #define RTL8812_FW_WW_IMG "rtl8812AU\\rtl8812Ufwww.bin" - #define RTL8812_FW_BT_IMG "rtl8812AU\\rtl8812UfwBT.bin" - #define RTL8812_PHY_REG "rtl8812AU\\PHY_REG.txt" - #define RTL8812_PHY_RADIO_A "rtl8812AU\\RadioA.txt" - #define RTL8812_PHY_RADIO_B "rtl8812AU\\RadioB.txt" - #define RTL8812_TXPWR_TRACK "rtl8812AU\\TxPowerTrack.txt" - #define RTL8812_AGC_TAB "rtl8812AU\\AGC_TAB.txt" - #define RTL8812_PHY_MACREG "rtl8812AU\\MAC_REG.txt" - #define RTL8812_PHY_REG_PG "rtl8812AU\\PHY_REG_PG.txt" - #define RTL8812_PHY_REG_MP "rtl8812AU\\PHY_REG_MP.txt" - #define RTL8812_TXPWR_LMT "rtl8812AU\\TXPWR_LMT.txt" - - -//--------------------------------------------------------------------- -// RTL8723S From file -//--------------------------------------------------------------------- - #define RTL8723_FW_UMC_IMG "rtl8723S\\rtl8723fw.bin" - #define RTL8723_FW_UMC_B_IMG "rtl8723S\\rtl8723fw_B.bin" - #define RTL8723_FW_UMC_WW_IMG "rtl8723S\\rtl8723fwww.bin" - #define RTL8723_FW_UMC_B_WW_IMG "rtl8723S\\rtl8723fw_Bww.bin" - #define RTL8723_PHY_REG "rtl8723S\\PHY_REG_1T.txt" - #define RTL8723_PHY_RADIO_A "rtl8723S\\radio_a_1T.txt" - #define RTL8723_PHY_RADIO_B "rtl8723S\\radio_b_1T.txt" - #define RTL8723_AGC_TAB "rtl8723S\\AGC_TAB_1T.txt" - #define RTL8723_PHY_MACREG "rtl8723S\\MAC_REG.txt" - #define RTL8723_PHY_MACREG "rtl8723S\\MAC_REG.txt" - #define RTL8723_PHY_REG_PG "rtl8723S\\PHY_REG_PG.txt" - #define RTL8723_PHY_REG_MP "rtl8723S\\PHY_REG_MP.txt" - -//--------------------------------------------------------------------- -// RTL8188ES From file -//--------------------------------------------------------------------- - #define RTL8188E_FW_T_IMG "rtl8188E\\rtl8188Efw.bin" - #define RTL8188E_FW_T_WW_IMG "rtl8188E\\rtl8188Efwww.bin" - #define RTL8188E_FW_S_IMG "rtl8188E\\rtl8188EfwS.bin" - #define RTL8188E_FW_S_WW_IMG "rtl8188E\\rtl8188EfwSww.bin" - #define RTL8188E_PHY_REG "rtl8188E\\PHY_REG_1T.txt" - #define RTL8188E_PHY_RADIO_A "rtl8188E\\RadioA_1T.txt" - #define RTL8188E_PHY_RADIO_B "rtl8188E\\RadioB_1T.txt" - #define RTL8188E_AGC_TAB "rtl8188E\\AGC_TAB_1T.txt" - #define RTL8188E_PHY_MACREG "rtl8188E\\MAC_REG.txt" - #define RTL8188E_PHY_REG_PG "rtl8188E\\PHY_REG_PG.txt" - #define RTL8188E_PHY_REG_MP "rtl8188E\\PHY_REG_MP.txt" - #define RTL8188E_TXPWR_LMT "rtl8188E\\TXPWR_LMT.txt" - #define RTL8188E_TXPWR_TRACK "rtl8188E\\TxPowerTrack.txt" - -//--------------------------------------------------------------------- -// RTL8821S From file -//--------------------------------------------------------------------- - #define RTL8821_FW_IMG "rtl8821AS\\RTL8821sFW.bin" - #define RTL8821_FW_WW_IMG "rtl8821AS\\RTL8821sFWww.bin" - #define RTL8821_FW_BT_IMG "rtl8821AS\\rtl8821AfwBT.bin" - #define RTL8821_PHY_REG "rtl8821AS\\PHY_REG.txt" - #define RTL8821_PHY_RADIO_A "rtl8821AS\\RadioA.txt" - #define RTL8821_PHY_RADIO_B "rtl8821AS\\RadioB.txt" - #define RTL8821_TXPWR_TRACK "rtl8821AS\\TxPowerTrack.txt" - #define RTL8821_AGC_TAB "rtl8821AS\\AGC_TAB.txt" - #define RTL8821_PHY_MACREG "rtl8821AS\\MAC_REG.txt" - #define RTL8821_PHY_REG_PG "rtl8821AS\\PHY_REG_PG.txt" - #define RTL8821_PHY_REG_MP "rtl8821AS\\PHY_REG_MP.txt" - #define RTL8821_TXPWR_LMT "rtl8821AS\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8192E From file -//--------------------------------------------------------------------- - #define RTL8192E_FW_IMG "rtl8192ES\\rtl8192ESfw.bin" - #define RTL8192E_FW_WW_IMG "rtl8192ES\\rtl8192ESfwww.bin" - #define RTL8192E_FW_BT_IMG "rtl8192EE\\rtl8192ESfwBT.bin" - #define RTL8192E_PHY_REG "rtl8192ES\\PHY_REG.txt" - #define RTL8192E_PHY_RADIO_A "rtl8192ES\\RadioA.txt" - #define RTL8192E_PHY_RADIO_B "rtl8192ES\\RadioB.txt" - #define RTL8192E_AGC_TAB "rtl8192ES\\AGC_TAB.txt" - #define RTL8192E_PHY_MACREG "rtl8192ES\\MAC_REG.txt" - #define RTL8192E_PHY_REG_PG "rtl8192ES\\PHY_REG_PG.txt" - #define RTL8192E_PHY_REG_MP "rtl8192ES\\PHY_REG_MP.txt" - #define RTL8192_TXPWR_TRACK "rtl8192ES\\TxPowerTrack.txt" - #define RTL8192E_TXPWR_LMT "rtl8192ES\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8723D From file -//--------------------------------------------------------------------- - #define RTL8723D_FW_IMG "rtl8723DS\\rtl8723DSfw.bin" - #define RTL8723D_FW_WW_IMG "rtl8723DS\\rtl8723DSfwww.bin" - #define RTL8723D_FW_BT_IMG "rtl8723DS\\rtl8723DSfwBT.bin" - #define RTL8723D_PHY_REG "rtl8723DS\\PHY_REG.txt" - #define RTL8723D_PHY_RADIO_A "rtl8723DS\\RadioA.txt" - #define RTL8723D_AGC_TAB "rtl8723DS\\AGC_TAB.txt" - #define RTL8723D_PHY_MACREG "rtl8723DS\\MAC_REG.txt" - #define RTL8723D_PHY_REG_PG "rtl8723DS\\PHY_REG_PG.txt" - #define RTL8723D_PHY_REG_MP "rtl8723DS\\PHY_REG_MP.txt" - #define RTL8723D_TXPWR_TRACK "rtl8723DS\\TxPowerTrack.txt" - #define RTL8723D_TXPWR_LMT "rtl8723DS\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8814A From file -//--------------------------------------------------------------------- - #define RTL8814A_FW_IMG "rtl8814as\\rtl8814Afw.bin" - #define RTL8814A_PHY_REG "rtl8814as\\PHY_REG.txt" - #define RTL8814A_PHY_RADIO_A "rtl8814as\\RadioA.txt" - #define RTL8814A_PHY_RADIO_B "rtl8814as\\RadioB.txt" - #define RTL8814A_PHY_RADIO_C "rtl8814as\\RadioC.txt" - #define RTL8814A_PHY_RADIO_D "rtl8814as\\RadioD.txt" - #define RTL8814A_AGC_TAB "rtl8814as\\AGC_TAB.txt" - #define RTL8814A_PHY_MACREG "rtl8814as\\MAC_REG.txt" - #define RTL8814A_PHY_REG_PG "rtl8814as\\PHY_REG_PG.txt" - #define RTL8814A_PHY_REG_MP "rtl8814as\\PHY_REG_MP.txt" - #define RTL8814A_TXPWR_TRACK "rtl8814as\\TxPowerTrack.txt" - #define RTL8814A_TXPWR_LMT "rtl8814as\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8821BS From file -//--------------------------------------------------------------------- - #define RTL8821B_FW_IMG "rtl8821BS\\rtl8821Bfw.bin" - #define RTL8821B_PHY_REG "rtl8821BS\\PHY_REG.txt" - #define RTL8821B_PHY_RADIO_A "rtl8821BS\\RadioA.txt" - #define RTL8821B_TXPWR_TRACK "rtl8821BS\\TxPowerTrack.txt" - #define RTL8821B_AGC_TAB "rtl8821BS\\AGC_TAB.txt" - #define RTL8821B_PHY_MACREG "rtl8821BS\\MAC_REG.txt" - #define RTL8821B_PHY_REG_PG "rtl8821BS\\PHY_REG_PG.txt" - #define RTL8821B_PHY_REG_MP "rtl8821BS\\PHY_REG_MP.txt" - #define RTL8821B_TXPWR_LMT "rtl8821BS\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8822BS From file -//--------------------------------------------------------------------- - #define RTL8822B_FW_IMG "rtl8822BS\\rtl8822Bfw.bin" - #define RTL8822B_PHY_REG "rtl8822BS\\PHY_REG.txt" - #define RTL8822B_PHY_RADIO_A "rtl8822BS\\RadioA.txt" - #define RTL8822B_PHY_RADIO_B "rtl8822BS\\RadioB.txt" - #define RTL8822B_TXPWR_TRACK "rtl8822BS\\TxPowerTrack.txt" - #define RTL8822B_AGC_TAB "rtl8822BS\\AGC_TAB.txt" - #define RTL8822B_PHY_MACREG "rtl8822BS\\MAC_REG.txt" - #define RTL8822B_PHY_REG_PG "rtl8822BS\\PHY_REG_PG.txt" - #define RTL8822B_PHY_REG_MP "rtl8822BS\\PHY_REG_MP.txt" - #define RTL8822B_TXPWR_LMT "rtl8822BS\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8723BS From file -//--------------------------------------------------------------------- - #define RTL8723B_FW_IMG "rtl8723BS\\rtl8723Bfw.bin" - #define RTL8723B_FW_WW_IMG "rtl8723BS\\rtl8723Bfwww.bin" - #define RTL8723B_FW_BT_IMG "rtl8723BS\\rtl8723BfwBT.bin" - #define RTL8723B_PHY_REG "rtl8723BS\\PHY_REG.txt" - #define RTL8723B_PHY_RADIO_A "rtl8723BS\\RadioA.txt" - #define RTL8723B_PHY_RADIO_B "rtl8723BS\\RadioB.txt" - #define RTL8723B_TXPWR_TRACK "rtl8723BS\\TxPowerTrack.txt" - #define RTL8723B_AGC_TAB "rtl8723BS\\AGC_TAB.txt" - #define RTL8723B_PHY_MACREG "rtl8723BS\\MAC_REG.txt" - #define RTL8723B_PHY_REG_PG "rtl8723BS\\PHY_REG_PG.txt" - #define RTL8723B_PHY_REG_MP "rtl8723BS\\PHY_REG_MP.txt" - #define RTL8723B_TXPWR_LMT "rtl8723BS\\TXPWR_LMT.txt" - -//--------------------------------------------------------------------- -// RTL8703BS From file -//--------------------------------------------------------------------- - #define RTL8703B_FW_IMG "rtl8703BS\\rtl8703Bfw.bin" - #define RTL8703B_FW_WW_IMG "rtl8703BS\\rtl8703Bfwww.bin" - #define RTL8703B_FW_BT_IMG "rtl8703BS\\rtl8703BfwBT.bin" - #define RTL8703B_PHY_REG "rtl8703BS\\PHY_REG.txt" - #define RTL8703B_PHY_RADIO_A "rtl8703BS\\RadioA.txt" - #define RTL8703B_PHY_RADIO_B "rtl8703BS\\RadioB.txt" - #define RTL8703B_TXPWR_TRACK "rtl8703BS\\TxPowerTrack.txt" - #define RTL8703B_AGC_TAB "rtl8703BS\\AGC_TAB.txt" - #define RTL8703B_PHY_MACREG "rtl8703BS\\MAC_REG.txt" - #define RTL8703B_PHY_REG_PG "rtl8703BS\\PHY_REG_PG.txt" - #define RTL8703B_PHY_REG_MP "rtl8703BS\\PHY_REG_MP.txt" - #define RTL8703B_TXPWR_LMT "rtl8703BS\\TXPWR_LMT.txt" -//--------------------------------------------------------------------- -// RTL8188FS From file -//--------------------------------------------------------------------- - #define RTL8188F_FW_IMG "rtl8188FS\\rtl8188Ffw.bin" - #define RTL8188F_FW_WW_IMG "rtl8188FS\\rtl8188Ffwww.bin" - #define RTL8188F_FW_BT_IMG "rtl8188FS\\rtl8188FfwBT.bin" - #define RTL8188F_PHY_REG "rtl8188FS\\PHY_REG.txt" - #define RTL8188F_PHY_RADIO_A "rtl8188FS\\RadioA.txt" - #define RTL8188F_PHY_RADIO_B "rtl8188FS\\RadioB.txt" - #define RTL8188F_TXPWR_TRACK "rtl8188FS\\TxPowerTrack.txt" - #define RTL8188F_AGC_TAB "rtl8188FS\\AGC_TAB.txt" - #define RTL8188F_PHY_MACREG "rtl8188FS\\MAC_REG.txt" - #define RTL8188F_PHY_REG_PG "rtl8188FS\\PHY_REG_PG.txt" - #define RTL8188F_PHY_REG_MP "rtl8188FS\\PHY_REG_MP.txt" - #define RTL8188F_TXPWR_LMT "rtl8188FS\\TXPWR_LMT.txt" -//--------------------------------------------------------------------- -// RTL8723S From header -//--------------------------------------------------------------------- - // Fw Array - #define Rtl8723_FwImageArray Rtl8723SFwImgArray - #define Rtl8723_FwUMCBCutImageArray Rtl8723SFwUMCBCutImgArray - #define Rtl8723_FwWWImageArray Rtl8723FwWWImgArray - #define Rtl8723_FwUMCBWWCutImageArray Rtl8723FwUMCBCutWWImgArray - - // MAC/BB/PHY Array - #define Rtl8723_MAC_Array Rtl8723SMAC_2T_Array - #define Rtl8723_AGCTAB_2TArray Rtl8723SAGCTAB_2TArray - #define Rtl8723_AGCTAB_1TArray Rtl8723SAGCTAB_1TArray - #define Rtl8723_PHY_REG_2TArray Rtl8723SPHY_REG_2TArray - #define Rtl8723_PHY_REG_1TArray Rtl8723SPHY_REG_1TArray - #define Rtl8723_RadioA_2TArray Rtl8723SRadioA_2TArray - #define Rtl8723_RadioA_1TArray Rtl8723SRadioA_1TArray - #define Rtl8723_RadioB_2TArray Rtl8723SRadioB_2TArray - #define Rtl8723_RadioB_1TArray Rtl8723SRadioB_1TArray - #define Rtl8723_PHY_REG_Array_PG Rtl8723SPHY_REG_Array_PG - #define Rtl8723_PHY_REG_Array_MP Rtl8723SPHY_REG_Array_MP - - // Array length - #define Rtl8723_ImgArrayLength Rtl8723SImgArrayLength - #define Rtl8723_UMCBCutImgArrayLength Rtl8723SUMCBCutImgArrayLength - #define Rtl8723_WWImgArrayLength Rtl8723WWImgArrayLength - #define Rtl8723_UMCBCutWWImgArrayLength Rtl8723UMCBCutWWImgArrayLength - #define Rtl8723_MAC_ArrayLength Rtl8723SMAC_2T_ArrayLength - #define Rtl8723_AGCTAB_1TArrayLength Rtl8723SAGCTAB_1TArrayLength - #define Rtl8723_PHY_REG_1TArrayLength Rtl8723SPHY_REG_1TArrayLength - #define Rtl8723_PHY_REG_Array_MPLength Rtl8723SPHY_REG_Array_MPLength - #define Rtl8723_PHY_REG_Array_PGLength Rtl8723SPHY_REG_Array_PGLength - #define Rtl8723_RadioA_1TArrayLength Rtl8723SRadioA_1TArrayLength - #define Rtl8723_RadioB_1TArrayLength Rtl8723SRadioB_1TArrayLength - - //--------------------------------------------------------------------- - // RTL8192ES From header - //--------------------------------------------------------------------- - // Fw Array - #define Rtl8192E_FwImageArray Rtl8192ESFwImgArray - #define Rtl8192E_FwWWImageArray Rtl8192EFwWWImgArray - - // MAC/BB/PHY Array - #define Rtl8192E_MAC_Array Rtl8192ESMAC_1T_Array - #define Rtl8192E_PHY_REG_1TArray Rtl8192ESPHY_REG_1TArray - #define Rtl8192E_AGCTAB_1TArray Rtl8192ESAGCTAB_1TArray - #define Rtl8192E_RadioA_1TArray Rtl8192ESRadioA_1TArray - #define Rtl8192E_PHY_REG_Array_PG Rtl8192ESPHY_REG_Array_PG - #define Rtl8192E_PHY_REG_Array_MP Rtl8192ESPHY_REG_Array_MP - - // Array length - #define Rtl8192E_ImgArrayLength Rtl8192ESImgArrayLength - #define Rtl8192E_MAC_ArrayLength Rtl8192ESMAC_1T_ArrayLength - #define Rtl8192E_WWImgArrayLength Rtl8192EWWImgArrayLength - #define Rtl8192E_PHY_REG_1TArrayLength Rtl8192ESPHY_REG_1TArrayLength - #define Rtl8192E_AGCTAB_1TArrayLength Rtl8192ESAGCTAB_1TArrayLength - #define Rtl8192E_RadioA_1TArrayLength Rtl8192ESRadioA_1TArrayLength - #define Rtl8192E_PHY_REG_Array_PGLength Rtl8192ESPHY_REG_Array_PGLength - #define Rtl8192E_PHY_REG_Array_MPLength Rtl8192ESPHY_REG_Array_MPLength - - - - - -// --------------------------------------------------------------------- -// RTL8723 Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8723_NIC_PWR_ON_FLOW rtl8723A_power_on_flow -#define Rtl8723_NIC_RF_OFF_FLOW rtl8723A_radio_off_flow -#define Rtl8723_NIC_DISABLE_FLOW rtl8723A_card_disable_flow -#define Rtl8723_NIC_ENABLE_FLOW rtl8723A_card_enable_flow -#define Rtl8723_NIC_SUSPEND_FLOW rtl8723A_suspend_flow -#define Rtl8723_NIC_RESUME_FLOW rtl8723A_resume_flow -#define Rtl8723_NIC_PDN_FLOW rtl8723A_hwpdn_flow -#define Rtl8723_NIC_LPS_ENTER_FLOW rtl8723A_enter_lps_flow -#define Rtl8723_NIC_LPS_LEAVE_FLOW rtl8723A_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8188E Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8188E_NIC_PWR_ON_FLOW rtl8188E_power_on_flow -#define Rtl8188E_NIC_RF_OFF_FLOW rtl8188E_radio_off_flow -#define Rtl8188E_NIC_DISABLE_FLOW rtl8188E_card_disable_flow -#define Rtl8188E_NIC_ENABLE_FLOW rtl8188E_card_enable_flow -#define Rtl8188E_NIC_SUSPEND_FLOW rtl8188E_suspend_flow -#define Rtl8188E_NIC_RESUME_FLOW rtl8188E_resume_flow -#define Rtl8188E_NIC_PDN_FLOW rtl8188E_hwpdn_flow -#define Rtl8188E_NIC_LPS_ENTER_FLOW rtl8188E_enter_lps_flow -#define Rtl8188E_NIC_LPS_LEAVE_FLOW rtl8188E_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8812 Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8812_NIC_PWR_ON_FLOW rtl8812_power_on_flow -#define Rtl8812_NIC_RF_OFF_FLOW rtl8812_radio_off_flow -#define Rtl8812_NIC_DISABLE_FLOW rtl8812_card_disable_flow -#define Rtl8812_NIC_ENABLE_FLOW rtl8812_card_enable_flow -#define Rtl8812_NIC_SUSPEND_FLOW rtl8812_suspend_flow -#define Rtl8812_NIC_RESUME_FLOW rtl8812_resume_flow -#define Rtl8812_NIC_PDN_FLOW rtl8812_hwpdn_flow -#define Rtl8812_NIC_LPS_ENTER_FLOW rtl8812_enter_lps_flow -#define Rtl8812_NIC_LPS_LEAVE_FLOW rtl8812_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8821 Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8821A_NIC_PWR_ON_FLOW rtl8821A_power_on_flow -#define Rtl8821A_NIC_RF_OFF_FLOW rtl8821A_radio_off_flow -#define Rtl8821A_NIC_DISABLE_FLOW rtl8821A_card_disable_flow -#define Rtl8821A_NIC_ENABLE_FLOW rtl8821A_card_enable_flow -#define Rtl8821A_NIC_SUSPEND_FLOW rtl8821A_suspend_flow -#define Rtl8821A_NIC_RESUME_FLOW rtl8821A_resume_flow -#define Rtl8821A_NIC_PDN_FLOW rtl8821A_hwpdn_flow -#define Rtl8821A_NIC_LPS_ENTER_FLOW rtl8821A_enter_lps_flow -#define Rtl8821A_NIC_LPS_LEAVE_FLOW rtl8821A_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8821B Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8821B_NIC_PWR_ON_FLOW rtl8821B_power_on_flow -#define Rtl8821B_NIC_RF_OFF_FLOW rtl8821B_radio_off_flow -#define Rtl8821B_NIC_DISABLE_FLOW rtl8821B_card_disable_flow -#define Rtl8821B_NIC_ENABLE_FLOW rtl8821B_card_enable_flow -#define Rtl8821B_NIC_SUSPEND_FLOW rtl8821B_suspend_flow -#define Rtl8821B_NIC_RESUME_FLOW rtl8821B_resume_flow -#define Rtl8821B_NIC_PDN_FLOW rtl8821B_hwpdn_flow -#define Rtl8821B_NIC_LPS_ENTER_FLOW rtl8821B_enter_lps_flow -#define Rtl8821B_NIC_LPS_LEAVE_FLOW rtl8821B_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8822B Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8822B_NIC_PWR_ON_FLOW rtl8822B_power_on_flow -#define Rtl8822B_NIC_RF_OFF_FLOW rtl8822B_radio_off_flow -#define Rtl8822B_NIC_DISABLE_FLOW rtl8822B_card_disable_flow -#define Rtl8822B_NIC_ENABLE_FLOW rtl8822B_card_enable_flow -#define Rtl8822B_NIC_SUSPEND_FLOW rtl8822B_suspend_flow -#define Rtl8822B_NIC_RESUME_FLOW rtl8822B_resume_flow -#define Rtl8822B_NIC_PDN_FLOW rtl8822B_hwpdn_flow -#define Rtl8822B_NIC_LPS_ENTER_FLOW rtl8822B_enter_lps_flow -#define Rtl8822B_NIC_LPS_LEAVE_FLOW rtl8822B_leave_lps_flow - - -//--------------------------------------------------------------------- -// RTL8192E Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8192E_NIC_PWR_ON_FLOW rtl8192E_power_on_flow -#define Rtl8192E_NIC_RF_OFF_FLOW rtl8192E_radio_off_flow -#define Rtl8192E_NIC_DISABLE_FLOW rtl8192E_card_disable_flow -#define Rtl8192E_NIC_ENABLE_FLOW rtl8192E_card_enable_flow -#define Rtl8192E_NIC_SUSPEND_FLOW rtl8192E_suspend_flow -#define Rtl8192E_NIC_RESUME_FLOW rtl8192E_resume_flow -#define Rtl8192E_NIC_PDN_FLOW rtl8192E_hwpdn_flow -#define Rtl8192E_NIC_LPS_ENTER_FLOW rtl8192E_enter_lps_flow -#define Rtl8192E_NIC_LPS_LEAVE_FLOW rtl8192E_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8814A Power Configuration CMDs for PCIe interface -//--------------------------------------------------------------------- -#define Rtl8814A_NIC_PWR_ON_FLOW rtl8814A_power_on_flow -#define Rtl8814A_NIC_RF_OFF_FLOW rtl8814A_radio_off_flow -#define Rtl8814A_NIC_DISABLE_FLOW rtl8814A_card_disable_flow -#define Rtl8814A_NIC_ENABLE_FLOW rtl8814A_card_enable_flow -#define Rtl8814A_NIC_SUSPEND_FLOW rtl8814A_suspend_flow -#define Rtl8814A_NIC_RESUME_FLOW rtl8814A_resume_flow -#define Rtl8814A_NIC_PDN_FLOW rtl8814A_hwpdn_flow -#define Rtl8814A_NIC_LPS_ENTER_FLOW rtl8814A_enter_lps_flow -#define Rtl8814A_NIC_LPS_LEAVE_FLOW rtl8814A_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8723B Power Configuration CMDs -//--------------------------------------------------------------------- -#define Rtl8723B_NIC_PWR_ON_FLOW rtl8723B_power_on_flow -#define Rtl8723B_NIC_RF_OFF_FLOW rtl8723B_radio_off_flow -#define Rtl8723B_NIC_DISABLE_FLOW rtl8723B_card_disable_flow -#define Rtl8723B_NIC_ENABLE_FLOW rtl8723B_card_enable_flow -#define Rtl8723B_NIC_SUSPEND_FLOW rtl8723B_suspend_flow -#define Rtl8723B_NIC_RESUME_FLOW rtl8723B_resume_flow -#define Rtl8723B_NIC_PDN_FLOW rtl8723B_hwpdn_flow -#define Rtl8723B_NIC_LPS_ENTER_FLOW rtl8723B_enter_lps_flow -#define Rtl8723B_NIC_LPS_LEAVE_FLOW rtl8723B_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8703B Power Configuration CMDs -//--------------------------------------------------------------------- -#define Rtl8703B_NIC_PWR_ON_FLOW rtl8703B_power_on_flow -#define Rtl8703B_NIC_RF_OFF_FLOW rtl8703B_radio_off_flow -#define Rtl8703B_NIC_DISABLE_FLOW rtl8703B_card_disable_flow -#define Rtl8703B_NIC_ENABLE_FLOW rtl8703B_card_enable_flow -#define Rtl8703B_NIC_SUSPEND_FLOW rtl8703B_suspend_flow -#define Rtl8703B_NIC_RESUME_FLOW rtl8703B_resume_flow -#define Rtl8703B_NIC_PDN_FLOW rtl8703B_hwpdn_flow -#define Rtl8703B_NIC_LPS_ENTER_FLOW rtl8703B_enter_lps_flow -#define Rtl8703B_NIC_LPS_LEAVE_FLOW rtl8703B_leave_lps_flow -//--------------------------------------------------------------------- -// RTL8188F Power Configuration CMDs -//--------------------------------------------------------------------- -#define Rtl8188F_NIC_PWR_ON_FLOW rtl8188F_power_on_flow -#define Rtl8188F_NIC_RF_OFF_FLOW rtl8188F_radio_off_flow -#define Rtl8188F_NIC_DISABLE_FLOW rtl8188F_card_disable_flow -#define Rtl8188F_NIC_ENABLE_FLOW rtl8188F_card_enable_flow -#define Rtl8188F_NIC_SUSPEND_FLOW rtl8188F_suspend_flow -#define Rtl8188F_NIC_RESUME_FLOW rtl8188F_resume_flow -#define Rtl8188F_NIC_PDN_FLOW rtl8188F_hwpdn_flow -#define Rtl8188F_NIC_LPS_ENTER_FLOW rtl8188F_enter_lps_flow -#define Rtl8188F_NIC_LPS_LEAVE_FLOW rtl8188F_leave_lps_flow - -//--------------------------------------------------------------------- -// RTL8723D Power Configuration CMDs -//--------------------------------------------------------------------- -#define Rtl8723D_NIC_PWR_ON_FLOW rtl8723D_power_on_flow -#define Rtl8723D_NIC_RF_OFF_FLOW rtl8723D_radio_off_flow -#define Rtl8723D_NIC_DISABLE_FLOW rtl8723D_card_disable_flow -#define Rtl8723D_NIC_ENABLE_FLOW rtl8723D_card_enable_flow -#define Rtl8723D_NIC_SUSPEND_FLOW rtl8723D_suspend_flow -#define Rtl8723D_NIC_RESUME_FLOW rtl8723D_resume_flow -#define Rtl8723D_NIC_PDN_FLOW rtl8723D_hwpdn_flow -#define Rtl8723D_NIC_LPS_ENTER_FLOW rtl8723D_enter_lps_flow -#define Rtl8723D_NIC_LPS_LEAVE_FLOW rtl8723D_leave_lps_flow - - -typedef enum _FA_CNT_TYPE{ - FA_CNT_OFDM_CCA, - FA_CNT_CCK_CCA, - FA_CNT_OFDM_FAIL, - FA_CNT_CCK_FAIL, - FA_CNT_TYPE_MAX -}FA_CNT_TYPE; - -// -// Forward declaration. -// -typedef struct _ADAPTER ADAPTER, *PADAPTER; -typedef struct _RT_RFD RT_RFD, *PRT_RFD; -typedef struct _RT_TCB RT_TCB, *PRT_TCB; -typedef struct _RT_TCB_STATUS RT_TCB_STATUS, *PRT_TCB_STATUS; -typedef struct _RT_RFD_STATUS RT_RFD_STATUS, *PRT_RFD_STATUS; -typedef struct _USB_IN_CONTEXT USB_IN_CONTEXT, *PUSB_IN_CONTEXT; -typedef struct _USB_OUT_CONTEXT USB_OUT_CONTEXT, *PUSB_OUT_CONTEXT; -typedef struct _SDIO_IN_CONTEXT SDIO_IN_CONTEXT, *PSDIO_IN_CONTEXT; -typedef struct _SDIO_OUT_CONTEXT SDIO_OUT_CONTEXT, *PSDIO_OUT_CONTEXT; -typedef struct _RT_WLAN_STA RT_WLAN_STA, *PRT_WLAN_STA; -typedef struct DM_Out_Source_Dynamic_Mechanism_Structure DM_ODM_T, *PDM_ODM_T; - -typedef enum _HARDWARE_TYPE{ - HARDWARE_TYPE_RTL8192E, - HARDWARE_TYPE_RTL819xU, - HARDWARE_TYPE_RTL8192SE, - HARDWARE_TYPE_RTL8192SU, - HARDWARE_TYPE_RTL8192CE, - HARDWARE_TYPE_RTL8192CU, - HARDWARE_TYPE_RTL8192DE, - HARDWARE_TYPE_RTL8192DU, - HARDWARE_TYPE_RTL8723AE, - HARDWARE_TYPE_RTL8723AU, - HARDWARE_TYPE_RTL8723AS, - HARDWARE_TYPE_RTL8723BE, - HARDWARE_TYPE_RTL8723BU, - HARDWARE_TYPE_RTL8723BS, - HARDWARE_TYPE_RTL8188EE, - HARDWARE_TYPE_RTL8188EU, - HARDWARE_TYPE_RTL8188ES, - HARDWARE_TYPE_RTL8192EE, - HARDWARE_TYPE_RTL8192EU, - HARDWARE_TYPE_RTL8192ES, - HARDWARE_TYPE_RTL8814AE, - HARDWARE_TYPE_RTL8814AU, - HARDWARE_TYPE_RTL8814AS, - HARDWARE_TYPE_RTL8812E, - HARDWARE_TYPE_RTL8812AU, - HARDWARE_TYPE_RTL8811AU, - HARDWARE_TYPE_RTL8821E, - HARDWARE_TYPE_RTL8821U, - HARDWARE_TYPE_RTL8821S, - HARDWARE_TYPE_RTL8821BE, - HARDWARE_TYPE_RTL8821BU, - HARDWARE_TYPE_RTL8821BS, - HARDWARE_TYPE_RTL8822BE, - HARDWARE_TYPE_RTL8822BU, - HARDWARE_TYPE_RTL8822BS, - HARDWARE_TYPE_RTL8703BE, - HARDWARE_TYPE_RTL8703BU, - HARDWARE_TYPE_RTL8703BS, - HARDWARE_TYPE_RTL8188FE, - HARDWARE_TYPE_RTL8188FU, - HARDWARE_TYPE_RTL8188FS, - HARDWARE_TYPE_RTL8723DE, - HARDWARE_TYPE_RTL8723DU, - HARDWARE_TYPE_RTL8723DS, - - HARDWARE_TYPE_MAX, -}HARDWARE_TYPE; - -typedef enum _RT_BUS_TYPE{ - BUS_TYPE_CARDBUS, - BUS_TYPE_MINIPCI, - BUS_TYPE_PCI, -}RT_BUS_TYPE,*PRT_BUS_TYPE; - -typedef enum _RT_EEPROM_TYPE{ - EEPROM_93C46, - EEPROM_93C56, - EEPROM_BOOT_EFUSE, -}RT_EEPROM_TYPE,*PRT_EEPROM_TYPE; - -typedef enum _LED_CTL_MODE{ - LED_CTL_POWER_ON = 1, - LED_CTL_LINK = 2, - LED_CTL_NO_LINK = 3, - LED_CTL_TX = 4, - LED_CTL_RX = 5, - LED_CTL_SITE_SURVEY = 6, - LED_CTL_POWER_OFF = 7, - LED_CTL_START_TO_LINK = 8, - LED_CTL_START_WPS = 9, - LED_CTL_STOP_WPS = 10, - LED_CTL_START_WPS_BOTTON = 11, //added for runtop - LED_CTL_STOP_WPS_FAIL = 12, //added for ALPHA - LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, //added for BELKIN - LED_CTL_CONNECTION_NO_TRANSFER = 14, - LED_CTL_OFF_BY_BUTTON = 15, //added for ALPHA -}LED_CTL_MODE; - - - -typedef enum _HW_VARIABLES{ - HW_VAR_ETHER_ADDR, - HW_VAR_MULTICAST_REG, - HW_VAR_BASIC_RATE, - HW_VAR_BSSID, // HW Port 0 BSSID - HW_VAR_BSSID1, // HW Port 1 BSSID - HW_VAR_MEDIA_STATUS, - HW_VAR_BEACON_INTERVAL, - HW_VAR_ATIM_WINDOW, - HW_VAR_SIFS, - HW_VAR_SLOT_TIME, - HW_VAR_ACK_PREAMBLE, - HW_VAR_COMMAND, // For Command Register, Annie, 2006-04-07. - HW_VAR_WPA_CONFIG, //2004/08/23, kcwu, for 8187 Security config - HW_VAR_AMPDU_MIN_SPACE, // The spacing between sub-frame. Roger, 2008.07.04. - HW_VAR_AMPDU_FACTOR, - HW_VAR_AC_PARAM, // For AC Parameters, 2005.12.01, by rcnjko. - HW_VAR_ACM_CTRL, // For ACM Control, Annie, 2005-12-13. - HW_VAR_CCX_CHNL_LOAD, // For CCX 2 channel load request, 2006.05.04. - HW_VAR_CCX_NOISE_HISTOGRAM, // For CCX 2 noise histogram request, 2006.05.04. - HW_VAR_CCX_CLM_NHM, // For CCX 2 parallel channel load request and noise histogram request, 2006.05.12. - HW_VAR_TURBO_MODE, // For turbo mode related settings, added by Roger, 2006.12.15. - HW_VAR_RF_STATE, // For change or query RF power state, 061214, rcnjko. - HW_VAR_RF_OFF_BY_HW, // For UI to query if external HW signal disable RF, 061229, rcnjko. - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - //1Attention Please!!!<11n or 8190 specific code should be put below this line> - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - HW_VAR_RCR, //for RCR, David 2006,05,11 - HW_VAR_RRSR, - HW_VAR_CHECK_BSSID, - HW_VAR_RETRY_LIMIT, - HW_VAR_INIT_TX_RATE, //Get Current Tx rate register. 2008.12.10. Added by tynli - HW_VAR_RF_2R_DISABLE, - HW_VAR_SET_RPWM, - HW_VAR_FILL_A2ENTRY, - HW_VAR_PS_PARTIAL_OFF, - HW_VAR_PS_WOWLAN_ENABLE_PATIAL_OFF, - HW_VAR_H2C_FW_PWRMODE, //by tynli. For setting FW related H2C cmd structure. 2009.2.18 - HW_VAR_H2C_FW_JOINBSSRPT, //by tynli. For setting FW related H2C cmd structure. 2009.2.18 - HW_VAR_H2C_FW_MEDIASTATUSRPT, - HW_VAR_STOP_SEND_BEACON, - HW_VAR_TSF_TIMER, // Read from TSF register to get the current TSF timer, by Bruce, 2009-07-22. - HW_VAR_TSF_TIMER1, // Port 1 TSF Timer Register - HW_VAR_TSFTR_SNC_OFFSET, // Control the offset between TSF and TSF1 Register when doing synchronization (signed offset) - HW_VAR_IO_CMD, - HW_VAR_H2C_FW_UPDATE_GTK, // For FW update GTK during S3/S4 for WoWLAN. 2009.06.10. by tynli. - HW_VAR_WF_MASK, //For WoWLAN wake up frame bit mask. 2009.06.18. by tynli. - HW_VAR_WF_CRC, //For WoWLAN wake up frame CRC value. 2009.06.18. by tynli. - HW_VAR_WF_IS_MAC_ADDR, //For WoWLAN wake up frame content which is the same as our MAC addr. 2009.06.18. by tynli. - HW_VAR_H2C_FW_OFFLOAD, //For WoWLAN. Offload to Fw by H2C cmd. 2009.07.31. by tynli. - HW_VAR_RESET_WFCRC, //For WoWLAN. 2009.08.05. by tynli. - HW_VAR_HANDLE_FW_C2H, //Added by tynli. For handling FW C2H command. 2009.10.07. - HW_VAR_AID, //Added by tynli. - HW_VAR_CORRECT_TSF, //Added by tynli. 2009.10.22. For Hw count TBTT time. - HW_VAR_FWLPS_RF_ON, //Added by tynli. 2009.11.09. For checking if Fw finishs RF on sequence. - HW_VAR_DUAL_TSF_RST, //Added by tynli. 2009.12.03. Suggested by TimChen. - HW_VAR_TSFR_SYNC_EN, // Synchronize HW-Port 0 TSF to HW-Port 1 TSF - HW_VAR_DUAL_SWITCH_BAND, - HW_VAR_INT_MIGRATION, //Added by Roger, 2010.03.05. - HW_VAR_RX_AGGR_USBTH, - HW_VAR_RX_AGGR_USBTO, - HW_VAR_RX_AGGR_PGTH, - HW_VAR_RX_AGGR_PGTO, - HW_VAR_FW_PSMODE_STATUS, //Added by tynli. 2010.04.19. - HW_VAR_P2P_PS_MODE, // Inform the P2P power save to the HW/FW. - HW_VAR_P2P_CLIENT_PS_STATE, // Update the P2P client ps state to FW. - HW_VAR_SETUP_PS_TIMER, // Set PsTimer - HW_VAR_PS_TIMEOUT, // PsTimer Interrupt. - HW_VAR_BW40MHZ_EXTCHNL, - HW_VAR_FPGA_SUSPEND_STATUS, // For RTL8723 FPGA Host suspend/resume verification, added by Roger, 2010.09.27. - HW_VAR_MSDU_LIFE_TIME, // MSDU Life Time to drop the packets out of life. - HW_VAR_INIT_RTS_RATE, //Added by tynli. 2010.11.16. - // 2011/01/11 MH Add for 819xp compatiable. - HW_VAR_RF_TIMING, // Temporary for RF timing. This shall be removed after RF team verified OK. - HW_VAR_APFM_ON_MAC, //Auto FSM to Turn On, include clock, isolation, power control for MAC only - HW_VAR_H2C_WLAN_INFO, //by tynli. For setting FW related H2C cmd structure. 2011.2.10 - HW_VAR_VID, - HW_VAR_PID, - HW_VAR_AGGR_TIMEOUT, // For AMPDU per station on vwifi, 2009.11.18 by hpfan - HW_VAR_AGGR_LIMIT, // For AMPDU per station on vwifi, 2009.11.18 by hpfan - HW_VAR_INIT_TX_RATE_MACID, // Add by hpfan. 2010.01.05 Get current tx rate for specified macid. - HW_VAR_DIS_SW_BCN, // Added by tynli. disable Sw DMA BCN - HW_VAR_MACPHY_MODE, - // The valid upper nav range for the HW updating, if the true value is larger than the upper range, the HW won't update it. - // Unit in microsecond. 0 means disable this function. - HW_VAR_NAV_UPPER, - HW_VAR_RF_STATUS_INT, // HW RF On/Off interrupt status - HW_VAR_FW_PS_STATE, // For Fw LPS 32k. by tynli. 2011.02.25. - HW_VAR_RESUME_CLK_ON, // For Fw LPS 32k. by tynli. - HW_VAR_FW_LPS_ENTER, - HW_VAR_FW_LPS_LEAVE, - HW_VAR_PRE_RPWM, - HW_VAR_FW_CLK_CHANGE_STATE, // For Fw LPS 32k. by tynli. - HW_VAR_FW_IPS_LEAVE, // For Fw inactive PS. by tynli. - HW_VAR_CHECK_NIC_UNPLUG, // Read the ISR register and check if the NIC is unplugged. - HW_VAR_HW_REG_TIMER_INIT, - HW_VAR_HW_REG_TIMER_RESTART, - HW_VAR_HW_REG_TIMER_START, - HW_VAR_HW_REG_TIMER_STOP, - HW_VAR_TCP_CHECKSUM_OFFLOAD, // For TCP checksunm En/Disable , Wirte only ( Read used HW_VAR_RCR); - HW_VAR_TX_RPT_MAX_MACID, - HW_VAR_TX_PAUSE, // For pause Tx - HW_VAR_BW80MHZ_EXTCHNL, - HW_VAR_PNP_FROM_NDIS_USB_SS, // Check whether this PnP event was from NDIS USB Selective Suspend, 2012.05.16. Added By Roger, 2012.05.11 - HW_VAR_SUPPORT_USB3, - HW_VAR_USB_MODE, - HW_VAR_AMPDU_MAX_TIME, - HW_VAR_AMPDU_MAX_AGG_NUM_DYNAMIC, - HW_VAR_BATCH_INDICATE_ENABLE, - HW_VAR_JAGUAR_PATCH, - HW_VAR_ANTENNA_DETECTED_INFO, // Support for antenna detection info from each IC, added by Roger, 2012.11.27. - HW_VAR_NQOS_SEQ_NUM, // Hw sequence number for non-Qos data and mgnt frame - HW_VAR_R2T_SIFS, // R2T SIFS - HW_VAR_BT_FUNC_DISABLE, // Disable BT function, added by Roger, 2013.03.19. - HW_VAR_ANT_SWITCH, - HW_VAR_BOOST_INIT_GAIN, - HW_VAR_FW_H2C_FCS_LOC, // For FW support fast channel switch download rsvd page - HW_VAR_FW_H2C_FCS_INFO_SET, // For FW support fast channel switch set channel information - HW_VAR_FW_H2C_FCS_INFO_STOP, // For FW support fast channel switch stop switch - HW_VAR_TIMER0, - HW_VAR_MACID_PKT_SLEEP, - HW_VAR_BOOST_INIT_GAIN_OS, - HW_VAR_CUR_CENTER_CHNL, // Current HW center channel - HW_VAR_MAX_Q_PAGE_NUM, - HW_VAR_AVBL_Q_PAGE_NUM, - HW_VAR_DBI, - HW_VAR_DBI_4, - HW_VAR_MDIO, -#if (AUTO_CHNL_SEL_NHM == 1) - HW_VAR_AUTO_CHNL_SEL, // Auto Channel Selection, added by Roger, 2014.05.15. -#endif - //--------------- START ------------------ - /* AMSDU related, haiso_ho, 2014.07.09 */ - //---------------------------------------- - HW_VAR_AMSDU_SUPPORT_PARTIALCOLAESCE, - HW_VAR_AMSDU_NO_PADDING, - HW_VAR_AMSDU_NEED_PREAGG_CHK, - HW_VAR_AMSDU_GET_SEG_NUM, - HW_VAR_AMSDU_GET_TXDESC_EXT_BUFFER_NUM, - HW_VAR_AMSDU_TEST_SETTING, - //---------------- END ------------------- - /* AMSDU related, haiso_ho, 2014.07.09 */ - //---------------------------------------- - - //--------------- START ------------------ - /* R/W ptr related, hsiao_ho, 2014.07.10 */ - //---------------------------------------- - HW_VAR_RWPTR_SET_TXBUFF_DESC_OWN, - HW_VAR_RWPTR_SET_RXQ_TXBD_IDX, - HW_VAR_RWPTR_GET_RXQ_TXBD_IDX, - HW_VAR_RWPTR_GET_RX_DESC_NUM, - HW_VAR_RWPTR_RX_INTERRUPT, - //---------------- END ------------------- - /* R/W ptr related, hsiao_ho, 2014.07.10 */ - //---------------------------------------- - - //--------------- START ------------------ - /* WMM related, hsiao_ho, 2014.07.10 */ - //---------------------------------------- - HW_VAR_WMM_NEED_FIX_PARAM, - //---------------- END ------------------- - /* WMM ptr related, hsiao_ho, 2014.07.10 */ - //---------------------------------------- - - //--------------- START ------------------ - /* Early mode related, hsiao_ho, 2014.07.10 */ - //---------------------------------------- - HW_VAR_EARLY_MODE_SUPPORT, - HW_VAR_EARLY_MODE_THRESHOLD, - //---------------- END ------------------- - /* Early mode related, hsiao_ho, 2014.07.10 */ - //---------------------------------------- - - //--------------- START ------------------ - /* MISC, hsiao_ho, 2014.07.11 */ - //---------------------------------------- - HW_VAR_CHK_JOINACTION, - //---------------- END ------------------- - /* MISC, hsiao_ho, 2014.07.11 */ - //---------------------------------------- - - /* for some IC need to set 4 TxAGC value at one times, suggest by Stanley, 2015.05.25 */ - HW_VAR_TXAGC_NEED_SET_4_RATE_AT_ONCE, - - HW_VAR_FCS_NOA, - HW_VAR_FCS_ADJUST_TSF, - - //--------------- START ------------------ - /*Avoid Rx DPC watchdog violation*/ - HW_VAR_RWPTR_RX_INTERRUPT_LOOP_BREAK, - HW_VAR_AVOID_RX_DPC_WATCHDOG_VIOLATION, - //---------------- END ------------------- - HW_VAR_TX_COMPLETE_LATER_SUPPORT, - - //--------------- START ------------------ - // MAC Address Randomization - // True : Support MAC Address Randomization and DeviceAddress ( Support 4 or more MAC register) - // Fslse : Just support One of MAC Address Randomization and DeviceAddress ( Just Support 2 MAC register ) - HW_VAR_MAC_ADRESS_COX_CAP, // Just For Query !! - // Write New MAC Address - HW_VAR_MAC_ADDR_RANDOM , // Just For Set !! - //---------------- END ------------------- - -#if INTEL_RTD3_SUPPORT - HW_VAR_RTD3_SUPPORT, -#endif - -}HW_VARIABLES; - -// Defaine the interrupt of AP_IBSS mode -typedef enum _HAL_AP_IBSS_INT_MODE -{ - HAL_AP_IBSS_INT_DISABLE = 0, // Disable AP/IBSS - HAL_AP_IBSS_INT_AP = 1, // Enable AP mode - HAL_AP_IBSS_INT_IBSS = 2, // Eanble IBSS mode - HAL_AP_IBSS_INT_AP_IBSS = 3, // Enbale both of AP and IBSS mode -}HAL_AP_IBSS_INT_MODE, *PHAL_AP_IBSS_INT_MODE; - -typedef enum _HAL_INT_MASK_TYPE -{ - HAL_INT_MASK_CURRENT = 0, - HAL_INT_MASK_REG = 1, - HAL_INT_MASK_DEFAULT = 2, -}HAL_INT_MASK_TYPE, *PHAL_INT_MASK_TYPE; - -typedef enum _HAL_HW_TIMER_TYPE -{ - HAL_TIMER_NONE = 0, - HAL_TIMER_TXBF = 1, - HAL_TIMER_EARLYMODE = 2, -}HAL_HW_TIMER_TYPE, *PHAL_HW_TIMER_TYPE; - - -typedef enum _HAL_DEF_VARIABLE{ - HAL_DEF_LED, // Led, 0: disable, 1: enable. 061010, by rcnjko. - HAL_DEF_WOWLAN, - HAL_DEF_ENDPOINTS, //number of endpoints - HAL_DEF_MIN_TX_POWER_DBM, // The min supported Tx power in dBm. - HAL_DEF_MAX_TX_POWER_DBM, // The max supported Tx power in dBm. - HAL_DEF_EFUSE_REPG_SECTION1_FLAG,// Efuse Section1 re-programming flag, added by Roger, 2009.02.19. - HAL_DEF_EFUSE_REPG_DATA, // Efuse Section1 re-programming flag, added by Roger, 2009.02.19. - HAL_DEF_PCI_SUUPORT_L1_BACKDOOR, // Determine if the L1 Backdoor setting is turned on. - HAL_DEF_PCI_AMD_L1_SUPPORT, // Determine if the L1 Backdoor setting can be turned on for AMD bridge, added by Roger, 2012.04.30. - HAL_DEF_THERMAL_VALUE, - HAL_DEF_USB_IN_TOKEN_REV, // For Intel ATOM CPU utilization issue, added by Roger, 2009.06.04. - HAL_DEF_TX_PWR_PERCENTAGE, // For WNC NEC TxPwr adjustment purpose, added by Roger, 2010.03.09. - HAL_DEF_USB_SELECTIVE_SUSPEND, - HAL_DEF_REMOTE_WAKEUP, - HAL_DEF_TX_FEEDBACK_SUPPORT, // Determine if it supports Tx Feedback through C2H, by Hana, 2015.02.10 - // 2011/01/12 MH Add for 9xp compatiable. - HAL_DEF_BEACON_QUEUE, // Get the Beacon Queue ID for sending the Beacon packet. If the returned value is beacon queue, it must support HW Beacon. By Bruce, 2011-01-18. - HAL_DEF_HW_BEACON_SUPPORT, // Determine if it supports HW Beacon sent in TBTT automatically. By Bruce, 2011-01-18. - HAL_DEF_HW_P2P_PS_SUPPORT, // Determine if HW supports HW P2P Power Save function - HAL_DEF_PRODUCT_ID, - HAL_DEF_SUB_ID, - HAL_DEF_EFUSE_USAGE, //Get current EFUSE utilization. 2008.12.19. Added by Roger. - HAL_DEF_EFUSE_BYTES, - HAL_DEF_AUTOLOAD_STATUS, //Get current autoload status, 0: autoload success, 1: autoload fail. 2008.12.19. Added by Roger. - HAL_DEF_EFUSE_BT_USAGE, //Get current BT EFUSE utilization. 2008.12.19. Added by Roger. - HAL_DEF_EFUSE_BT_BYTES, - // 2011/09/07 MH Add for netgear requirement. - HAL_DEF_GAIN_OFFSET_FCC_LOW, - HAL_DEF_GAIN_OFFSET_FCC, - HAL_DEF_GAIN_OFFSET_FCC_HIGH, - HAL_DEF_GAIN_OFFSET_MKK_LOW, - HAL_DEF_GAIN_OFFSET_MKK, - HAL_DEF_GAIN_OFFSET_MKK_HIGH, - HAL_DEF_GAIN_OFFSET_ETSI_LOW, - HAL_DEF_GAIN_OFFSET_ETSI, - HAL_DEF_GAIN_OFFSET_ETSI_HIGH, - HAL_DEF_AP_IBSS_INTERRUPT, // Configure the interrupt mask of AP/IBSS mode - HAL_DEF_ENABLE_TXOK_INTERRUPT, - HAL_DEF_CHECK_NIC_UNPLUG, // Check the interrupt state of NIC if it is unplugged. - HAL_DEF_USE_RA_MASK, // Control RAMask - //3 VHT/HT HW SUPPORT CAP - HAL_DEF_TX_LDPC, // TX LDPC support - HAL_DEF_RX_LDPC, // RX LDPC support - HAL_DEF_TX_STBC, // TX STBC support - HAL_DEF_RX_STBC, // RX STBC support - HAL_DEF_RX_AMPDU_FACTOR, // For different AMPDU factor in HT Cap, added by Roger, 2011.12.08. - HAL_DEF_MPDU_DENSITY, // For different minimum timing between MPDUs in HT Cap, added by Roger, 2011.12.08. - HAL_DEF_EXPLICIT_BEAMFORMER,// Explicit Compressed Steering Capable - HAL_DEF_EXPLICIT_BEAMFORMEE,// Explicit Compressed Beamforming Feedback Capable - HAL_DEF_RA_DECISION_RATE, // For 88E Rate Adaptive, added by YJ, 2012,01,19 - HAL_DEF_RA_SGI, // For 88E Rate Adaptive, added by YJ, 2012,01,19 - HAL_DEF_PT_PWR_STATUS, // For 88E Rate Adaptive, added by Wilson, 2012,02,02 - HAL_DEF_INT_MASK, - HAL_DEF_USB_TX_THREAD, - HAL_DEF_USB_IO_THREAD, - HAL_DEF_TX_PAGE_BOUNDARY, - HAL_DEF_TX_PAGE_BOUNDARY_WOWLAN, - HAL_DEF_SUPPORT_5G, - HAL_DEF_RTS_EN, - HAL_DEF_ANT_DETECT, // Antenna detection mechanism, added by Roger, 2012.11.27. - HAL_DEF_PCI_ASPM_OSC, // Support for ASPM OSC, added by Roger, 2013.03.27. - HAL_DEF_IQK_STATUS, - HAL_DEF_FW_FCS, - HAL_DEF_FCS_QPKT_BY_MACID, - HAL_DEF_ANT_DIV, - HAL_DEF_MAC_ADRESS_COX_CAP -}HAL_DEF_VARIABLE; - - -// The type used to query whether the interrupt in HAL is toggled. -typedef enum _HAL_INT_TYPE -{ - HAL_INT_TYPE_ANY, // Any interrupt - HAL_INT_TYPE_TBDOK, // Tx Beacon OK - HAL_INT_TYPE_TBDER, // Tx Beacon error - HAL_INT_TYPE_BcnInt, // For 92C or later, it should be early beacon interrupt. - HAL_INT_TYPE_PSTIMEOUT, // PS timer interrupt by TSF - HAL_INT_TYPE_C2HCMD, // CPU to Host Command INT Status interrupt - HAL_INT_TYPE_RXFOVW, // Rx FIFO over flow - HAL_INT_TYPE_TXFOVW, // Tx FIFO over flow - HAL_INT_TYPE_VIDOK, // VI queue DMA OK - HAL_INT_TYPE_VODOK, // VO queue DMA OK - HAL_INT_TYPE_BEDOK, // BE queue DMA OK - HAL_INT_TYPE_BKDOK, // BK queue DMA OK - HAL_INT_TYPE_MGNTDOK, // Mgnt queue DMA OK - HAL_INT_TYPE_HIGHDOK, // High queue DMA OK - HAL_INT_TYPE_BDOK, // Beacon queue DMA OK - HAL_INT_TYPE_CPWM, // CPU power Mode exchange INT Status - HAL_INT_TYPE_CPWM2, // CPU power Mode exchange INT Status - HAL_INT_TYPE_TSF_BIT32_TOGGLE, // TSF Timer BIT32 toggle indication interrupt - HAL_INT_TYPE_RX_OK, // Receive DMA OK - HAL_INT_TYPE_RDU, - HAL_INT_TYPE_HSISR_IND, // HSISR Indicator (HSIMR & HSISR is true, this bit is set to 1) . By YJ,120406 - HAL_INT_TYPE_SYS_PDNINT, // System Interrupt: Hardware Power Down PIN Negedge Interrupt. By YJ,120406 - HAL_INT_TYPE_SYS_RONINT, // System Interrupt: Hardware Power Down PIN Negedge Interrupt. By YJ,120406 - HAL_INT_TYPE_GPIO9_INT, - HAL_INT_TYPE_AMPDU_BURST_TIMER, // Timer/Counter 4 interrupt. - HAL_INT_TYPE_BEAMFORMING_TIMER,// Timer/Counter 3 interrupt. - //==== SDIO Specified Interrupt=====// - //HAL_INT_TYPE_SDIO_ISR_IND, - HAL_INT_TYPE_SDIO_GPIO12_0_INT, - HAL_INT_TYPE_SDIO_SPS_OCP_INT, - HAL_INT_TYPE_SDIO_RON_INT_EN, - //HAL_INT_TYPE_SDIO_PDNINT, -}HAL_INT_TYPE, *PHAL_INT_TYPE; - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _EEPROM_OFFSET{ - u2Byte CmdRegister; - u2Byte BIT_EEDO; - u2Byte BIT_EEDI; - u2Byte BIT_EESK; - u2Byte BIT_EECS; - u2Byte BIT_EEM0; - u2Byte BIT_EEM1; -}EEPROM_OFFSET,*PEEPROM_OFFSET; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - - -// Power save mode configured. -typedef enum _RT_PS_MODE -{ - eActive, // Active/Continuous access. - eMaxPs, // Max power save mode. - eFastPs, // Fast power save mode. - eAutoPs, // Auto power save mode. -}RT_PS_MODE; - -// Power save state of this station. -typedef enum _RT_PS_STATE -{ - eAwake, - eAwakening, - eDozed, - eDozing -}RT_PS_STATE; - -// Inactive Power save state of this station. tynli_Test -typedef enum _RT_IPS_STATE -{ - eIPSAwake, - eIPSDozed -}RT_IPS_STATE; - - -// RF state. -typedef enum _RT_RF_POWER_STATE -{ - eRfOn, // RF is on after RFSleep or RFOff - eRfSleep, // 802.11 Power Save mode - eRfOff, // HW/SW Radio OFF or Inactive Power Save - //=====Add the new RF state above this line=====// - eRFMax -}RT_RF_POWER_STATE; - -// Device power state. -typedef enum _RT_DEVICE_POWER_STATE -{ - DeviceStateUnspecified = 0, - DevicePowerStateD0, - DevicePowerStateD1, - DevicePowerStateD2, - DevicePowerStateD3, - DevicePowerStateMaximum -}RT_DEVICE_POWER_STATE; - -typedef enum _Inactive_POWER_SAVE_STATE -{ - eIpsOff, - eIpsOn, - eIpsAuto -}Inactive_POWER_SAVE_STATE; - - - - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -typedef struct _RT_ISR_CONTENT -{ - union{ - u4Byte IntArray[2]; - u4Byte IntReg4Byte; - u2Byte IntReg2Byte; - }; - - u8Byte IntReg8Byte; - u4Byte RxIntLength; -}RT_ISR_CONTENT, *PRT_ISR_CONTENT; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -typedef enum _HAL_INT_MODE -{ - HAL_INT_MODE_LOCAL = 0, // The local interrupt - HAL_INT_MODE_SYSTEM = 1, // The system interrupt -}HAL_INT_MODE, *PHAL_INT_MODE; - -typedef enum _SCAN_OPERATION_BACKUP_OPT{ - SCAN_OPT_BACKUP_BAND0=0, - SCAN_OPT_BACKUP_BAND1, - SCAN_OPT_RESTORE, - SCAN_OPT_MAX -}SCAN_OPERATION_BACKUP_OPT; - - -// Related IO. -typedef enum _IO_TYPE{ - IO_CMD_PAUSE_BAND0_DM_BY_SCAN = 0, - IO_CMD_PAUSE_BAND1_DM_BY_SCAN = 1, - IO_CMD_RESUME_DM_BY_SCAN = 2, -}IO_TYPE,*PIO_TYPE; - - -//LeisurePS state -typedef enum _LEISURE_POWER_SAVE_STATE -{ - eLpsOff, - eLpsOn, - eLpsAuto -}LEISURE_POWER_SAVE_STATE; - -// Firmware PS mode for control LPS. by tynli. -typedef enum _FW_CTRL_PS_MODE_NUM{ - FW_PS_ACTIVE_MODE =0, - //Legacy - FW_PS_MIN_MODE =1, - FW_PS_MAX_MODE =2, - FW_PS_SELF_DEFINED_MODE = 3, - //UAPSD - FW_PS_UAPSD_MIN_MODE = 4, - FW_PS_UAPSD_MAX_MODE = 5, - FW_PSE_UAPSD_SELF_DEFINED_MODE = 6, - FW_PS_NUM_MODE= 7, -}FW_CTRL_PS_MODE; - -typedef enum _FW_IPS_MODE{ - FW_IPS_ACTIVE_MODE = 0, - FW_IPS_SCAN_MODE = 1, - FW_IPS_CARD_DISABLE_MODE = 2, - FW_IPS_RF_OFF_MODE = 3, - FW_IPS_MAX, -}FW_CTRL_IPS_MODE; - -// Define WoWLAN mode. Added by tynli. 2009.09.02. -typedef enum _WAKE_ON_WLAN_MODE -{ - eWoWLANDisable, - eWakeOnMagicPacketOnly, - eWakeOnPatternMatchOnly, - eWakeOnBothTypePacket -}WAKE_ON_WLAN_MODE; - -#define WAKE_ON_MAGIC_PACKET BIT0 -#define WAKE_ON_PATTERN_MATCH BIT1 -#define WAKE_ON_UNICAST_PACKET BIT2 - -// After 8188E, Hw supports indicating wake packet type in Rx Desc. 2013.10.01. by tynli. -#define HW_SUPPORT_PARSING_WAKE_PACKET(_Adapter) TRUE - -// Fw scan offload type -#define SCAN_OFFLOAD_TYPE_D0 BIT0 -#define SCAN_OFFLOAD_TYPE_D3 BIT1 - -typedef enum _RT_P2P_PS_EXE_TYPE -{ - RT_P2P_PS_EXE_BY_NONE = 0, // Not Specified - RT_P2P_PS_EXE_BY_HW = 1, // Execute the P2P Power Save by HW/FW, such as 8723 - RT_P2P_PS_EXE_BY_SW_HW_TIMER = 2, // Execute the P2P Power Save by Driver and using HW Timer, suach as 8192CE - RT_P2P_PS_EXE_BY_SW_TIMER = 3, // Execute the P2P Power Save by Driver but using SW Timer (Workitem), such as 8192CU -}RT_P2P_PS_EXE_TYPE, *PRT_P2P_PS_EXE_TYPE; - - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -// -// This is a partial structure of NDIS_PM_PROTOCOL_OFFLOAD which is defined in N62, -// for multi-platform/multi-chipset architecture requirement, we define it in HAL. -// Added by tynli. 2009.08.05. -// -typedef struct _RT_PM_PROTOCOL_OFFLOAD { - union _RT_PROTOCOL_OFFLOAD_PARAMETERS { - struct _RT_IPV4_ARP_PARAMETERS { - u4Byte Flags; - u1Byte RemoteIPv4Address[4]; - u1Byte HostIPv4Address[4]; - u1Byte MacAddress[6]; - } IPv4ARPParameters; - struct _RT_IPV6_NS_PARAMETERS { - ULONG Flags; - u1Byte RemoteIPv6Address[16]; - u1Byte SolicitedNodeIPv6Address[16]; - u1Byte MacAddress[6]; - u1Byte TargetIPv6Addresses[2][16]; - } IPv6NSParameters; - struct _RT_DOT11_RSN_REKEY_PARAMETERS { - u4Byte Flags; - u1Byte KCK[16]; - u1Byte KEK[16]; - u8Byte KeyReplayCounter; - } Dot11RSNRekeyParameters; - } ProtocolOffloadParameters; -} RT_PM_PROTOCOL_OFFLOAD, *PRT_PM_PROTOCOL_OFFLOAD; - - -typedef struct _RT_PM_IPV4_ARP_PARAMETERS { - u4Byte Flags; - u1Byte RemoteIPv4Address[4]; - u1Byte HostIPv4Address[4]; - u1Byte MacAddress[6]; -} RT_PM_IPV4_ARP_PARAMETERS, *PRT_PM_IPV4_ARP_PARAMETERS; - -typedef struct _RT_PM_IPV6_NS_PARAMETERS { - ULONG Flags; - u1Byte RemoteIPv6Address[16]; - u1Byte SolicitedNodeIPv6Address[16]; - u1Byte MacAddress[6]; - u1Byte TargetIPv6Addresses[2][16]; -} RT_PM_IPV6_NS_PARAMETERS, *PRT_PM_IPV6_NS_PARAMETERS; - -typedef struct _RT_PM_DOT11_RSN_REKEY_PARAMETERS { - u4Byte Flags; - u1Byte KCK[16]; - u1Byte KEK[16]; - u8Byte KeyReplayCounter; -} RT_PM_DOT11_RSN_REKEY_PARAMETERS, *PRT_PM_DOT11_RSN_REKEY_PARAMETERS; - - -// -// Network list offload structures -// -#define NATIVE_802_11_MAX_NETWORKOFFLOAD_SIZE 10 - -typedef struct _RT_OFFLOAD_NETWORK -{ - u1Byte ssidbuf[32]; - u4Byte ssidlen; - u1Byte chiper; // Used PAIRWISE_CHIPER !! - ULONG channelNumberHit[4]; - BOOLEAN bPrivacy; - u4Byte SecLvl; -}RT_OFFLOAD_NETWORK,*PRT_OFFLOAD_NETWORK; - -typedef struct _RT_NLO_INFO -{ - ULONG NumDot11OffloadNetwork; - ULONG FastScanPeriod; - ULONG FastScanIterations; - ULONG SlowScanPeriod; - RT_OFFLOAD_NETWORK dDot11OffloadNetworkList[NATIVE_802_11_MAX_NETWORKOFFLOAD_SIZE]; -}RT_NLO_INFO, *PRT_NLO_INFO; - -typedef struct _RT_AOAC_REPORT_{ - u8Byte TxIV; - u8Byte ReplayCounterOfEapolKey; - u1Byte GroupKey[32]; - u1Byte KeyIndex; - u1Byte SecurityType; -}RT_AOAC_REPORT, *PRT_AOAC_REPORT; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -// -// Determine how we handle the Beacon sent, by Bruce, 2011-01-18. -// By the following definition, we should schedule the timer if we use the SW beacon or handle the TBTT timing. -#define BEACON_SEND_AUTO_HW 0 // (Beacon Queue) HW updates Beacon buffer automatically (by interrupts or events) and the packets can be sent in TBTT automatically. -#define BEACON_SEND_AUTO_SW 1 // (Beacon Queue) SW needs to updates the Beacon by self timer but the HW can send the Beacons in TBTT. -#define BEACON_SEND_MANUAL 2 // (AC/MGNT/HIGN Queue) SW needs to updates the Beacon and send it by self timer. In other words, we need to handle the TBTT timing. - - -// -// Cannot perform IO. We can add more conditions to indicate the IO fail status. -// By Bruce, 2008-02-18. -// -#define RT_PCI_CANNOT_IO(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - RT_IS_FUNC_DISABLED((__pAdapter), (DF_IO_BIT | DF_IO_D3_BIT))) - -#define RT_USB_CANNOT_IO(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - RT_IS_FUNC_DISABLED((__pAdapter), DF_IO_BIT)) - -#define RT_SDIO_CANNOT_IO(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - RT_IS_FUNC_DISABLED((__pAdapter), DF_IO_BIT)) - -#define RT_DRIVER_STOP(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved || \ - (__pAdapter)->bDriverIsGoingToUnload) - - -#define RT_DRIVER_HALT(__pAdapter) \ - ((__pAdapter)->bDriverStopped || \ - (__pAdapter)->bSurpriseRemoved) - -#define HAS_REQUEST_TO_HANDLE(__pAdapter) \ - ((__pAdapter)->pPortCommonInfo->pPortHelper->bDeleteMac == TRUE) - -#define MAX_POWER_INDEX 0x3F - - -#define RT_CANNOT_IO(__pAdapter) RT_SDIO_CANNOT_IO(__pAdapter) - - -#define GET_UNDECORATED_AVERAGE_RSSI(_Adapter) \ - (ACTING_AS_AP(_Adapter) || ACTING_AS_IBSS(_Adapter))? \ - (((HAL_DATA_TYPE *)((_Adapter)->HalData))->EntryMinUndecoratedSmoothedPWDB): \ - (((HAL_DATA_TYPE *)((_Adapter)->HalData))->UndecoratedSmoothedPWDB) - - -#define RT_IsSwChnlAndBwInProgress(_Adapter) ( GET_HAL_DATA(_Adapter)->SwChnlInProgress || \ - GET_HAL_DATA(_Adapter)->bSwChnlAndSetBWInProgress || \ - GET_HAL_DATA(_Adapter)->SetBWModeInProgress) - -#define RT_ResetSwChnlProgress(_Adapter) \ -{\ - GET_HAL_DATA(_Adapter)->SwChnlInProgress = FALSE;\ - GET_HAL_DATA(_Adapter)->bSwChnlAndSetBWInProgress = FALSE;\ -} - -#define RT_GetBandWidth(_Adapter) (GET_HAL_DATA(_Adapter)->CurrentChannelBW) -#define RT_GetCenter_Frequency_Index1(_Adapter) (GET_HAL_DATA(_Adapter)->CurrentCenterFrequencyIndex1) -#define RT_GetRFType(_Adapter) (GET_HAL_DATA(_Adapter)->RF_Type) - -// -// Reason to turn off RF, high value indicate high priority. -// -typedef u4Byte RT_RF_CHANGE_SOURCE; -#define RF_CHANGE_BY_SW BIT31 -#define RF_CHANGE_BY_HW BIT30 -#define RF_CHANGE_BY_PS BIT29 -#define RF_CHANGE_BY_IPS BIT28 -#define RF_CHANGE_BY_INIT 0 // Do not change the RFOff reason. Defined by Bruce, 2008-01-17. - - -typedef enum _RX_PACKET_TYPE{ - NORMAL_RX, - TX_REPORT1, - TX_REPORT2, - HIS_REPORT, - C2H_PACKET -}RX_PACKET_TYPE, *PRX_PACKET_TYPE; - - - -typedef u1Byte -(*NicGetEEPROMSizeHandler)( - IN PADAPTER Adapter - ); - -typedef RT_STATUS -(*NicReadAdapterInfoHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicInitializeVariablesHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicDeInitializeVariablesHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicCancelAllTimerHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicReleaseAllTimerHandler)( - IN PADAPTER Adapter - ); - -typedef RT_STATUS -(*NicInitializeAdapterHandler)( - IN PADAPTER Adapter, - IN u1Byte Channel - ); - -typedef VOID -(*NicHalUpdateDefaultSettingHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicHalIntUpdateDefSetHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicHaltAdapterHandler)( - IN PADAPTER Adapter, - IN BOOLEAN bReset - ); - - -typedef VOID -(*NicShutdownAdapterHandler)( - IN PADAPTER Adapter, - IN BOOLEAN bReset - ); - -typedef VOID -(*NicSleepAdapterHandler)( - IN PADAPTER Adapter - ); - - -typedef void -(*NicSetHwRegHandler)( - IN PADAPTER Adapter, - IN u1Byte RegName, - IN pu1Byte val - ); - -typedef void -(*NicGetHwRegHandler)( - IN PADAPTER Adapter, - IN u1Byte RegName, - OUT pu1Byte val - ); - -typedef BOOLEAN -(*NicGetHalDefVarHandler)( - IN PADAPTER Adapter, - IN HAL_DEF_VARIABLE eVariable, - IN PVOID pValue - ); - -typedef BOOLEAN -(*NicSetHalDefVarHandler)( - IN PADAPTER Adapter, - IN HAL_DEF_VARIABLE eVariable, - IN PVOID pValue - ); - -typedef BOOLEAN -(*NicGetInterruptHandler)( - IN PADAPTER Adapter, - IN HAL_INT_TYPE intType - ); - -typedef u1Byte -(*NicGetHwRateFromMRateHandler)( - IN u1Byte rate - ); - -typedef VOID -(*NicQueryRxDescStatusHandler)( - IN PADAPTER Adapter, - IN PVOID pDesc, - IN OUT PRT_RFD pRfd - ); - -typedef VOID -(*NicTxFillDescriptorHandler)( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN u2Byte nBufIndex, - IN u2Byte nFragIndex, - IN u2Byte nFragBufferIndex, - IN u2Byte nCurDesc - ); - -typedef VOID -(*NicQueryTxDescStatusHandler)( - IN PADAPTER Adapter, - IN PVOID pDesc, - OUT PRT_TCB_STATUS pRtTcbStatus - ); - -typedef VOID -(*NicSetWirelessModeHandler)( - IN PADAPTER Adapter, - IN u2Byte bWirelessMode - ); - - -typedef u2Byte -(*NicGetSupportedWirelessModeHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicSwChnlByDelayHandler)( - IN PADAPTER Adapter, - IN u1Byte channel - ); - -typedef VOID -(*NicSwChnlByTimerHandler)( - IN PADAPTER Adapter, - IN u1Byte channel - ); - -typedef void -(*NicSetTxPowerLevelHandler)( - IN PADAPTER Adapter, - IN u1Byte channel - ); - -typedef void -(*NicGetTxPowerLevelHandler)( - IN PADAPTER Adapter, - OUT ps4Byte powerlevel - ); - -typedef BOOLEAN -(*NicUpdateTxPowerDbmHandler)( - IN PADAPTER Adapter, - IN s4Byte powerInDbm - ); - - -typedef BOOLEAN -(*NicSetTxAntennaHandler)( - IN PADAPTER Adapter, - IN u1Byte SelectedAntenna - ); - -typedef VOID -(*NicEnableHWSecurityConfigHandler)( - IN PADAPTER Adapter); - -typedef VOID -(*NicDisableHWSecurityConfigHandler)( - IN PADAPTER Adapter); - -typedef VOID -(*NicSetKeyHandler)( - IN PADAPTER Adapter, - IN u4Byte KeyIndex, - IN pu1Byte pMacAddr, - IN BOOLEAN IsGroup, - IN u4Byte EncAlgo, - IN BOOLEAN IsWEPKey,//if OID = OID_802_11_WEP - IN BOOLEAN ClearAll -); - -typedef VOID -(*NicAllowAllDestAddrHandler)( - IN PVOID Adapter, - IN BOOLEAN bAllowAllDA, - IN BOOLEAN WriteIntoReg -); - -typedef VOID -(*NicAllowErrorPacketHandler)( - IN PVOID Adapter, - IN BOOLEAN bAllowErrPkt, - IN BOOLEAN WriteIntoReg -); - -typedef VOID -(*NicSetMonitorModeHandler)( - IN PADAPTER Adapter, - IN BOOLEAN bEnableMonitorMode -); - - -typedef VOID -(*NicLedControlHandler)( - IN PVOID Adapter, - IN LED_CTL_MODE LedAction -); - -typedef VOID -(*NicHalEnableRxHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalDisableRxHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalEnableTxHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalDisableTxHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalLeaveSSHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalEnterSSHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalResetAllTimerHandler)( - IN PADAPTER pAdapter - ); - -typedef BOOLEAN -(*NicInterruptRecognizedHandler)( - IN PADAPTER Adapter, - IN PVOID pContent, - IN u4Byte ContentLen - ); - -typedef VOID -(*NicDisableInterruptHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicClearInterruptHandler)( - IN PADAPTER Adapter - ); - -typedef VOID -(*NicEnableInterruptHandler)( - IN PADAPTER Adapter - ); - -// -// Runtime D3 related function handler, added by Roger, 2013.02.05. -// -#if INTEL_RTD3_SUPPORT -typedef VOID -(*NicHalRTD3LeaveHandler)( - IN PADAPTER pAdapter - ); - -typedef VOID -(*NicHalRTD3EnterHandler)( - IN PADAPTER pAdapter - ); -#endif - -typedef RT_STATUS -(*NicHalSetRsvdPageBndyHandler)( - IN PADAPTER Adapter, - IN u1Byte Type -); - -typedef VOID -(*NicHalDownloadRsvdPageHandler)( - IN PADAPTER Adapter -); - -typedef VOID -(*NicHalGetAOACReportHandler)( - IN PADAPTER Adapter, - IN pu1Byte AOACRptBuf -); - -typedef VOID -(*NicHalDropRxFIFOHandler)( - IN PADAPTER Adapter -); - -// -// We should declare SDIO related function handler here!! -// 2010.12.20. -// -typedef VOID -(*NicHalSdioGetCmdAddressHandler)( - IN PADAPTER pAdapter, - IN u1Byte DeviceID, - IN u4Byte Addr, - OUT pu4Byte pCmdAddr - ); - -typedef BOOLEAN -(*NicHalSdioSetQueueMappingHandler)( - IN PADAPTER pAdapter, - IN u1Byte NumIn, - IN u1Byte NumOut - ); - - -typedef BOOLEAN -(*NicHalSdioQueryTxBufferStatusHandler)( - IN PADAPTER Adapter - ); - -typedef BOOLEAN -(*NicHalSdioQueryTxBufferAvailableHandler)( - IN PADAPTER Adapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -typedef BOOLEAN -(*NicHalSdioIoRegCmd52AvailableHandler)( - IN PADAPTER Adapter, - IN u4Byte offset - ); - -typedef VOID -(*NicHalSdioTxCompleteHandler)( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext, - IN u4Byte status - ); - -typedef BOOLEAN -(*NicRxHandleInterruptHandler)( - IN PADAPTER pAdapter -); - -typedef VOID -(*NicClearSysInterruptHandler)( - IN PADAPTER Adapter - ); - -typedef BOOLEAN -(*NicHalSdioQueryRxDMARequestHandler)( - IN PADAPTER Adapter, - OUT pu2Byte pRxReqLength - ); - -typedef VOID -(*NicHalRxAggrHandler)( - IN PADAPTER pAdapter, - IN BOOLEAN Value - ); - -typedef BOOLEAN -(*NicHalUsbSetQueuePipeMappingHandler)( - IN PADAPTER pAdapter, - IN u1Byte NumInPipe, - IN u1Byte NumOutPipe - ); - -typedef u4Byte -(*NicGetRxPacketShiftBytesHandler)( - PRT_RFD pRfd -); - -typedef VOID -(*NICInitHalRATRTableHandler)( - IN PADAPTER Adapter -); - -typedef VOID -(*NICUpdateHalRATRTableHandler)( - IN PADAPTER Adapter, - IN POCTET_STRING posLegcyRate, - IN pu1Byte pMcsRate, - IN PRT_WLAN_STA pEntry -); - -typedef VOID -(*NICResetHalRATRTableHandler)( - IN PADAPTER Adapter -); - - -typedef VOID -(*NICUpdateHalRAMaskHandler)( - IN PADAPTER Adapter, - IN u1Byte macId, - IN PRT_WLAN_STA pEntry, - IN u1Byte rssi_level -); - -typedef VOID -(*NICResetHalRAMaskHandler)( - IN PADAPTER Adapter -); - -typedef VOID -(*NICRAPostActionHandler)( - IN PVOID pDM_Odm -); - -typedef VOID -(*NICUpdateLPSStatusHandler)( - IN PADAPTER Adapter, - IN u1Byte RegLeisurePsMode, - IN u1Byte RegPowerSaveMode -); - -typedef VOID -(*NICUpdateIPSStatusHandler)( - IN PADAPTER Adapter, - IN u1Byte RegInactivePsMode -); - -typedef VOID -(*NICSetBWModeHandler)( - IN PADAPTER Adapter, - IN CHANNEL_WIDTH ChnlWidth, - IN EXTCHNL_OFFSET Offset -); - -typedef RT_STATUS -(*NICCmdSendPacketHandler)( - PADAPTER Adapter, - PRT_TCB pTcb, - PRT_TX_LOCAL_BUFFER pBuf, - u4Byte BufferLen, - u1Byte PacketType, - BOOLEAN bLastInitPacket -); - -typedef VOID -(*NicSetBeaconRelatedRegistersHandler)( - IN PADAPTER Adapter, - IN PVOID pOpMode, - IN u2Byte BcnInterval, - IN u2Byte AtimWindow -); - -typedef VOID -(*NicDumpHardwareProfileHandler)( - IN PADAPTER Adapter -); - -typedef u4Byte -(*NicRxCommandPacketHandler)( - PADAPTER Adapter, - PRT_RFD pRfd -); - - -typedef VOID -(*NicScanOperationBackupHandler)( - IN PADAPTER Adapter, - IN u1Byte Operation -); - -typedef BOOLEAN -(*NicCheckHWStopHandler)( - IN PADAPTER Adapter -); - -typedef VOID -(*NicTxFillCmdDescHandler)( - IN PADAPTER Adapter, - IN PRT_TCB pTcb, - IN u1Byte QueueIndex, - IN u2Byte index, - IN BOOLEAN bFirstSeg, - IN BOOLEAN bLastSeg, - IN pu1Byte VirtualAddress, - IN u4Byte PhyAddressLow, - IN u4Byte BufferLen, - IN u4Byte DescPacketType, - IN u4Byte PktLen -); - -typedef BOOLEAN -(*NicGetNmodeSupportBySecCfgHandler)( - IN PADAPTER Adapter); - -typedef BOOLEAN -(*NicGetNmodeSupportBySWSecHandler)( - IN PADAPTER Adapter); - - -typedef VOID -(*NicCountTxStatisticsHandler)( - IN PADAPTER Adapter, - IN PRT_TCB pTcb - -); - -typedef BOOLEAN -(*NicQuerySysCpuWakeHandler)( - IN PADAPTER Adapter -); - -typedef VOID -(*NicGPIOChangeRFHandler)( - IN PADAPTER Adapter, - IN u1Byte variable -); - - -typedef BOOLEAN -(*NicSwAntDivCheckBeforeLink)( - IN PDM_ODM_T pDM_Odm - //IN PADAPTER Adapter - ); - -typedef BOOLEAN -(*NicPathDivCheckBeforeLink)( - IN PDM_ODM_T pDM_Odm - //IN PADAPTER Adapter - ); - -typedef VOID -(*NicHalSetCTSDynamicBWSelectHandler)( - IN PADAPTER Adapter, - IN u1Byte BWFallBackLevel -); - -typedef VOID -(*NicSetFwRelatedForWoWLANHandler)( - IN PADAPTER Adapter, - IN BOOLEAN bHostIsGoingtoSleep -); - -typedef VOID -(*NICSwChnlAndSetBwHandler)( - IN PADAPTER Adapter, - IN BOOLEAN bSwitchChannel, - IN BOOLEAN bSetBandWidth, - IN u1Byte ChannelNum, - IN CHANNEL_WIDTH ChnlWidth, - IN EXTCHNL_OFFSET ExtChnlOffsetOf40MHz, - IN EXTCHNL_OFFSET ExtChnlOffsetOf80MHz, - IN u1Byte CenterFrequencyIndex1 -); - -typedef u4Byte -(*NicFillH2CCommandHandler)( - IN PADAPTER Adapter, - IN u1Byte ElementID, - IN u4Byte CmdLen, - IN pu1Byte pCmdBuffer -); - -typedef u1Byte -(*NicGetFwPsStateDefHandler)( - IN PADAPTER Adapter, - IN u1Byte FwPsState -); - -typedef BOOLEAN -(*NicCheckCPWMInterruptHandler)( - IN PADAPTER Adapter -); - -typedef VOID -(*NicWaitForH2CQueueEmptyHandler)( - IN PADAPTER Adapter -); - -typedef struct _HAL_INTERFACE{ - // Pointer - pu1Byte pDescString; - - // Structure pointer - PEEPROM_OFFSET pEEPROMOffset; - - // Preamble. - BOOLEAN bUseShortPreamble; - - // Capability. - BOOLEAN bSupportTbttNotification; // TRUE if the H/W can notify S/W before TBTT. - - // CCX supported version - u1Byte CcxVerSupported; // 0: means not support CCX, > 0: are the version of CCX supported by this IC. - - // WLAN Device operations. - NicGetEEPROMSizeHandler GetEEPROMSizeHandler; - NicReadAdapterInfoHandler ReadAdapterInfoHandler; - - NicInitializeVariablesHandler InitializeVariablesHandler; - NicDeInitializeVariablesHandler DeInitializeVariablesHandler; - NicCancelAllTimerHandler CancelAllTimerHandler; - NicReleaseAllTimerHandler ReleaseAllTimerHandler; - - NicInitializeAdapterHandler InitializeAdapterHandler; - NicHalUpdateDefaultSettingHandler HalUpdateDefaultSettingHandler; - NicHalIntUpdateDefSetHandler HalIntUpdateDefSetHandler; - - NicHaltAdapterHandler HaltAdapterHandler; - NicShutdownAdapterHandler ShutdownHandler; - NicSleepAdapterHandler SleepAdapterHandler; - - NicSetHwRegHandler SetHwRegHandler; - NicGetHwRegHandler GetHwRegHandler; - - NicGetHalDefVarHandler GetHalDefVarHandler; - NicSetHalDefVarHandler SetHalDefVarHandler; - - NicGetInterruptHandler GetInterruptHandler; - - NicGetHwRateFromMRateHandler GetHwRateFromMRateHandler; - - NicQueryRxDescStatusHandler QueryRxDescStatusHandler; - NicTxFillDescriptorHandler TxFillDescriptorHandler; - NicQueryTxDescStatusHandler QueryTxDescStatusHandler; - - NicSetWirelessModeHandler SetWirelessModeHandler; - NicGetSupportedWirelessModeHandler GetSupportedWirelessModeHandler; - - NicSwChnlByDelayHandler SwChnlByDelayHandler; - NicSwChnlByTimerHandler SwChnlByTimerHandler; - - // Tx Power Related. - NicSetTxPowerLevelHandler SetTxPowerLevelHandler; - NicGetTxPowerLevelHandler GetTxPowerLevelHandler; - NicUpdateTxPowerDbmHandler UpdateTxPowerDbmHandler; - - NicSetTxAntennaHandler SetTxAntennaHandler; - NicSwAntDivCheckBeforeLink SwAntDivCheckBeforeLinkHandler; - NicPathDivCheckBeforeLink PathDivCheckBeforeLinkHandler; - - NicHalSetCTSDynamicBWSelectHandler HalSetCTSDynamicBWSelectHandler; - - NicEnableHWSecurityConfigHandler EnableHWSecCfgHandler; - NicDisableHWSecurityConfigHandler DisableHWSecCfgHandler; - NicSetKeyHandler SetKeyHandler; - - NicAllowAllDestAddrHandler AllowAllDestAddrHandler; - NicAllowErrorPacketHandler AllowErrorPacketHandler; - - NicSetMonitorModeHandler SetMonitorModeHandler; - - NicLedControlHandler LedControlHandler; - - NicHalEnableRxHandler HalEnableRxHandler;//Aadded by Roger, 2007.02.12. - NicHalDisableRxHandler HalDisableRxHandler;//Aadded by Roger, 2007.02.12. - - NicHalDisableTxHandler HalDisableTxHandler;//Aadded by Roger, 2009.07.08. - NicHalEnableTxHandler HalEnableTxHandler;//Aadded by Roger, 2009.07.08. - - NicCountTxStatisticsHandler HalCountTxStatisticsHandler; //Add for count unicast tx bytes temp 2008-04-14 - NicHalResetAllTimerHandler HalResetAllTimerHandler; - - NicHalEnterSSHandler HalEnterSSHandler; //Aadded by Roger, 2007.02.12. - NicHalLeaveSSHandler HalLeaveSSHandler; //Aadded by Roger, 2007.02.12. - - NicInterruptRecognizedHandler InterruptRecognizedHandler; - NicDisableInterruptHandler DisableInterruptHandler; - NicClearInterruptHandler ClearInterruptHandler; - NicEnableInterruptHandler EnableInterruptHandler; - NicDumpHardwareProfileHandler DumpHardwareProfileHandler; - - // - // Runtime D3 related function handler, added by Roger, 2013.02.05. - // -#if INTEL_RTD3_SUPPORT - NicHalRTD3EnterHandler HalRTD3EnterHandler; - NicHalRTD3LeaveHandler HalRTD3LeaveHandler; -#endif - - // HW function - NicHalSetRsvdPageBndyHandler HalSetRsvdPageBndyHandler; - NicHalDownloadRsvdPageHandler HalDownloadRsvdPageHandler; - NicHalGetAOACReportHandler HalGetAOACReportHandler; - NicHalDropRxFIFOHandler HalDropRxFIFOHandler; - - - // - // Bus specific operations. - // - NicHalSdioGetCmdAddressHandler HalSdioGetCmdAddressHandler; - NicHalSdioSetQueueMappingHandler HalSdioSetQueueMappingHandler; - - // - // The following handler should be removed later!! - // - NicHalSdioTxCompleteHandler HalSdioTxCompleteHandler; - NicHalRxAggrHandler HalRxAggrHandler; - NicHalUsbSetQueuePipeMappingHandler HalUsbSetQueuePipeMappingHandler; - NicHalSdioQueryTxBufferStatusHandler HalSdioQueryTxBufferStatusHandler; - NicHalSdioQueryTxBufferAvailableHandler HalSdioQueryTxBufferAvailableHandler; - NicClearSysInterruptHandler ClearSysInterruptHandler; - NicHalSdioQueryRxDMARequestHandler HalSdioQueryRxDMARequestHandler; - NicRxHandleInterruptHandler RxHandleInterruptHandler; - NicHalSdioIoRegCmd52AvailableHandler HalSdioIoRegCmd52AvailableHandler; - - - // Added for 8190 from here - NicGetRxPacketShiftBytesHandler GetRxPacketShiftBytesHandler; - NICInitHalRATRTableHandler InitHalRATRTableHandler; - NICUpdateHalRATRTableHandler UpdateHalRATRTableHandler; - NICResetHalRATRTableHandler ResetHalRATRTableHandler; - NICUpdateHalRAMaskHandler UpdateHalRAMaskHandler; - NICResetHalRAMaskHandler ResetHalRAMaskHandler; - NICRAPostActionHandler RAPostActionHandler; - - NICUpdateLPSStatusHandler UpdateLPSStatusHandler; - NICUpdateIPSStatusHandler UpdateIPSStatusHandler; - NICSetBWModeHandler SetBWModeHandler; - NICCmdSendPacketHandler CmdSendPacketHandler; - NicSetBeaconRelatedRegistersHandler SetBeaconRelatedRegistersHandler; - NicRxCommandPacketHandler RxCommandPacketHandler; - NicCheckHWStopHandler TxCheckStuckHandler; - NicCheckHWStopHandler RxCheckStuckHandler; - NicTxFillCmdDescHandler TxFillCmdDescHandler; - NicGetNmodeSupportBySecCfgHandler GetNmodeSupportBySecCfgHandler; - NicGetNmodeSupportBySWSecHandler GetNmodeSupportBySWSecHandler; - NicScanOperationBackupHandler ScanOperationBackupHandler; - NicGPIOChangeRFHandler GPIOChangeRFHandler; - NicSetFwRelatedForWoWLANHandler SetFwRelatedForWoWLANHandler; - NICSwChnlAndSetBwHandler SwChnlAndSetBWHandler; - //NicH2CCmdActionHandler H2CCmdActionHandler; - NicFillH2CCommandHandler FillH2CCommandHandler; - NicGetFwPsStateDefHandler GetFwPsStateDefHandler; - NicCheckCPWMInterruptHandler CheckCPWMInterruptHandler; - NicWaitForH2CQueueEmptyHandler WaitForH2CQueueEmptyHandler; -}HAL_INTERFACE,*PHAL_INTERFACE; - - -RT_STATUS -HalAssociateNic( - IN PVOID Adapter, - IN BOOLEAN IsDefaultAdapter - ); - -VOID -HalDisassociateNic( - IN PVOID Adapter - ); - -u2Byte -HalGetFirmwareVerison( - IN PADAPTER Adapter - ); - - -u2Byte -HalGetSupportedWirelessMode( - IN PADAPTER pAdapter - ); - -u2Byte -HalChangeWirelessMode( - PADAPTER Adapter, - u1Byte ChannelNum -); - -VOID -Hal_PauseTx( - IN PADAPTER Adapter, - u1Byte type - ); - -// -//2011/01/10 MH Add fro 9xp compatible. -// -typedef enum _SIGNAL_STRENGTH_POLICY{ - SIGNAL_STRENGTH_SCALE_FINE = 0, - SIGNAL_STRENGTH_SCALE_NORMAL = 1, -}SIGNAL_STRENGTH_POLICY; - -typedef enum _InitialGainOpType{ - IG_Backup=0, - IG_Restore, - IG_Max -}InitialGainOpType; - - -typedef enum _VERSION_8192C{ - VERSION_TEST_CHIP_88C = 0x0000, - VERSION_TEST_CHIP_92C = 0x0020, - VERSION_TEST_UMC_CHIP_8723A = 0x0081, - VERSION_NORMAL_TSMC_CHIP_88C = 0x0008, - VERSION_NORMAL_TSMC_CHIP_92C = 0x0028, - VERSION_NORMAL_TSMC_CHIP_92C_1T2R = 0x0018, - VERSION_NORMAL_UMC_CHIP_88C_A_CUT = 0x0088, - VERSION_NORMAL_UMC_CHIP_92C_A_CUT = 0x00a8, - VERSION_NORMAL_UMC_CHIP_92C_1T2R_A_CUT = 0x0098, - VERSION_NORMAL_UMC_CHIP_8723A_1T1R_A_CUT = 0x0089, - VERSION_NORMAL_UMC_CHIP_8723A_1T1R_B_CUT = 0x1089, - VERSION_NORMAL_UMC_CHIP_88C_B_CUT = 0x1088, - VERSION_NORMAL_UMC_CHIP_92C_B_CUT = 0x10a8, - VERSION_NORMAL_UMC_CHIP_92C_1T2R_B_CUT = 0x1090, - VERSION_TEST_CHIP_92D_SINGLEPHY= 0x0022, - VERSION_TEST_CHIP_92D_DUALPHY = 0x0002, - VERSION_NORMAL_CHIP_92D_SINGLEPHY= 0x002a, - VERSION_NORMAL_CHIP_92D_DUALPHY = 0x000a, - VERSION_NORMAL_CHIP_92D_C_CUT_SINGLEPHY = 0x202a, - VERSION_NORMAL_CHIP_92D_C_CUT_DUALPHY = 0x200a, - VERSION_NORMAL_CHIP_92D_D_CUT_SINGLEPHY = 0x302a, - VERSION_NORMAL_CHIP_92D_D_CUT_DUALPHY = 0x300a, - VERSION_NORMAL_CHIP_92D_E_CUT_SINGLEPHY = 0x402a, - VERSION_NORMAL_CHIP_92D_E_CUT_DUALPHY = 0x400a, - VERSION_TEST_CHIP_1T1R_8812 = 0x0004, - VERSION_TEST_CHIP_2T2R_8812 = 0x0024, - VERSION_NORMAL_TSMC_CHIP_1T1R_8812 = 0x100c, - VERSION_NORMAL_TSMC_CHIP_2T2R_8812 = 0x102c, - VERSION_NORMAL_TSMC_CHIP_1T1R_8812_C_CUT = 0x200c, - VERSION_NORMAL_TSMC_CHIP_2T2R_8812_C_CUT = 0x202c, - VERSION_TEST_CHIP_8821 = 0x0005, - VERSION_NORMAL_TSMC_CHIP_8821 = 0x000d, - VERSION_NORMAL_TSMC_CHIP_8821_B_CUT = 0x100d, - VERSION_NORMAL_TSMC_CHIP_8821_C_CUT = 0x200d, - VERSION_TEST_CHIP_1T1R_8723B = 0x0106, - VERSION_NORMAL_SMIC_CHIP_1T1R_8723B = 0x010E, - VERSION_NORMAL_SMIC_CHIP_1T1R_8723B_B_CUT = 0x110E, - VERSION_NORMAL_SMIC_CHIP_1T1R_8723B_D_CUT = 0x310E, - VERSION_NORMAL_SMIC_CHIP_1T1R_8723B_F_CUT = 0x410E, - VERSION_TEST_CHIP_8188E = 0x0003, - VERSION_TEST_CHIP_8188E_I_CUT = 0x8003, - VERSION_NORMAL_CHIP_8188E = 0x000b, - VERSION_NORMAL_CHIP_8188E_I_CUT = 0x800b, - VERSION_TEST_CHIP_1T1R_8814 = 0x0007, - VERSION_NORMAL_CHIP_1T1R_8814 = 0x000f, - VERSION_TEST_CHIP_3T3R_8814 = 0x0037, - VERSION_NORMAL_CHIP_3T3R_8814 = 0x003f, - VERSION_NORMAL_CHIP_3T3R_8814_B_CUT = 0x103f, - - // New format used since 8703B - /* 8821B series */ - VERSION_NORMAL_TSMC_CHIP_1T1R_8821B = 0x00010009, - VERSION_NORMAL_SMIC_CHIP_1T1R_8821B = 0x00011009, - VERSION_NORMAL_UMC_CHIP_1T1R_8821B = 0x00012009, - - /* 8822B series */ - VERSION_NORMAL_SMIC_CHIP_1T1R_8822B = 0x0001100A, - VERSION_NORMAL_SMIC_CHIP_2T2R_8822B = 0x0001100A, - - /* 8703B series */ - VERSION_NORMAL_SMIC_CHIP_1T1R_8703B = 0x0001200B, - VERSION_NORMAL_SMIC_CHIP_1T1R_8188F = 0x0001200B, - /* 8723D series */ - VERSION_NORMAL_SMIC_CHIP_1T1R_8723D = 0x0001100D, - -}VERSION_8192C,*PVERSION_8192C; - -typedef enum _VERSION_CVID{ - VERSION_1_BEFORE_8703B, - VERSION_2_SINCE_8703B, -}VERSION_CVID, *PVERSION_CVID; - -#define CHANNEL_MAX_NUMBER 14+24+21 // 14 + 24 + 14 + 7 -#define CHANNEL_MAX_NUMBER_2G 14 -#define CHANNEL_MAX_NUMBER_5G 49 // 28 + 14 + 7 = 49 -#define CHANNEL_MAX_NUMBER_5G_80M 7 -#define CHANNEL_GROUP_MAX 3+9 // ch1~3, ch4~9, ch10~14 total three groups -#define MAX_PG_GROUP 13 - -//========================================= - -VOID -HAL_CmnInitPGData( - IN PADAPTER Adapter - ); - -VOID -HAL_DiffTXDummyLen( - IN PADAPTER Adapter -); - -VOID -HAL_DiffTXRXLen( - IN PADAPTER Adapter -); - -VOID -HAL_ReadTypeIDbyEfuse( - IN PADAPTER Adapter - ); - -RT_STATUS -HAL_ReadTypeID( - IN PADAPTER Adapter - ); - - -VOID -HAL_SetInterfaceIndex( - IN PADAPTER Adapter, - IN u1Byte InterfaceIdx - ); - -VOID -HAL_TxAggregation( - IN PADAPTER Adapter, - IN u1Byte queueId -); - - -VOID -HAL_HiddenSSIDHandleBeforeScan( - IN PADAPTER Adapter -); - -VOID -HAL_SetCorrentChannelAndWirelessModeBeforeScan( - IN PADAPTER Adapter -); - -BOOLEAN -HAL_SwitchTo20MHzBeforeScan( - IN PADAPTER Adapter -); - - -VOID -HAL_ChannelAndBandWidthRecoveryAfterScan( - IN PADAPTER Adapter -); - -u1Byte -MptToMgntRate( - IN ULONG MptRateIdx -); - -BOOLEAN -HAL_IsLegalChannel( - IN PADAPTER pAdapter, - IN u4Byte Channel - ); -BOOLEAN -HAL_Support_BW_Advancesetting( - IN PADAPTER Adapter - ); -VOID -HAL_SetTxPowerForAllRate( - IN PADAPTER Adapter, - IN ULONG ulTxPowerData - ); - -VOID -HAL_ReadCloudKey_Ex( - IN PADAPTER Adapter, - IN u1Byte Length, - IN u1Byte offset, - OUT u1Byte *pCloudKey - ); -VOID -HAL_BitMaskWrite1Byte( - IN PADAPTER Adapter, - IN u4Byte regAddr, - IN u1Byte bitMask, - IN u1Byte data - ); -VOID -HAL_BitMaskWrite2Byte( - IN PADAPTER Adapter, - IN u4Byte regAddr, - IN u2Byte bitMask, - IN u2Byte data - ); -VOID -HAL_BitMaskWrite4Byte( - IN PADAPTER Adapter, - IN u4Byte regAddr, - IN u4Byte bitMask, - IN u4Byte data - ); - -VOID -HAL_GetHwId( - IN PADAPTER Adapter, - IN pu2Byte pVid, - IN pu2Byte pDid, - IN pu2Byte pSvid, - IN pu2Byte pSmid - ); - -VOID -HAL_GetRegulation( - IN PADAPTER Adapter, - IN pu1Byte pRegulation24G, - IN pu1Byte pRegulation5G - ); - -BOOLEAN -HAL_RegPollAndWait( - IN PADAPTER Adapter, - IN u1Byte pollType, - IN u4Byte timeoutVal, // unit: ms - IN u4Byte regAddr, - IN u4Byte equValue, - IN u4Byte bitMask - ); - -BOOLEAN -HAL_IsTxOwnBitFramework( - IN PADAPTER Adapter - ); - -BOOLEAN -HAL_IsOld8051Series( - IN PADAPTER Adapter - ); - -VOID -EXhalcommon_CheckHang( - IN PADAPTER Adapter - ); -VOID -EXhalcommon_CheckEDCCA( - IN PADAPTER Adapter - ); -u4Byte -EXhalcommon_GetFalseAlmCnt( - IN PADAPTER Adapter, - IN u1Byte type - ); -s4Byte -EXhalcommon_GetWifiRssi( - IN PADAPTER Adapter - ); -u4Byte -EXhalcommon_GetH2cStatistics( - IN PADAPTER Adapter, - IN u1Byte index - ); -u4Byte -EXhalcommon_GetOdmAbility( - IN PADAPTER Adapter - ); -VOID -DropPacketWorkitemCallback( - IN PVOID Context - ); -VOID -ResumeTxBeacon_92C( - IN PADAPTER Adapter - ); - -// -// Runtime D3 related function handler, added by Roger, 2013.02.05. -// -#if INTEL_RTD3_SUPPORT - -VOID -HalRuntimeD3Enter( - PADAPTER Adapter - ); - -VOID -HalRuntimeD3Leave( - PADAPTER Adapter - ); - -#endif - -VOID -HAL_8051Reset( - IN PADAPTER Adapter - ); - -VOID -HAL_8051PauseIOWrapper( - IN PADAPTER Adapter -); - -VOID -HAL_8051EnableIOWrapper( - IN PADAPTER Adapter -); - -u1Byte -HAL_GetSDRPErrorHandlingType( - IN PADAPTER pAdapter, - IN u4Byte SdioCmdAddr -); - -VOID -HAL_SetWoWLANCAMEntry( - IN PADAPTER Adapter - ); - -VOID -HAL_ClearGPIOWakeHost( - IN PADAPTER Adapter - ); - -typedef struct _Path_Diversity_ -{ - //Path Diversity - u4Byte OFDMTXPath; - u4Byte CCKTXPath; - u1Byte DefaultRespPath; - u1Byte OFDMDefaultRespPath; - u1Byte CCKDefaultRespPath; - u1Byte TrainingPath; - u1Byte TrainingState; - s4Byte RSSI_CCK_Path[2]; - s4Byte RSSI_CCK_Path_cnt[2]; - u4Byte OFDM_Pkt_Cnt; - u4Byte CCK_Pkt_Cnt; - u1Byte Timer; - u1Byte PathDiv_NoLink_State; - u1Byte CCKPathDivEnable; - -}PD_T, *pPD_T; - - -//------------------------------------------------------------------------ -// Temp H2C cmd functions for common -// These prototypes should be removed after H2C cmd functions are integrated. -//------------------------------------------------------------------------ -VOID -HAL_H2CSetFwGlobalInfoCmd( - IN PADAPTER Adapter - ); - -VOID -HAL_H2CSetFWWoWlanMode( - IN PADAPTER Adapter, - IN BOOLEAN bFuncEn - ); - -VOID -HAL_H2CSetFwKeepAliveCmd( - IN PADAPTER Adapter, - IN BOOLEAN bFuncEn - ); - -VOID -HAL_H2CSetFwDisconnectDecisionCtrlCmd( - IN PADAPTER Adapter, - IN BOOLEAN bFuncEn - ); - -VOID -HAL_H2CSetFwScanOffloadCtrlCmd( - IN PADAPTER Adapter, - IN u1Byte Type, - IN u1Byte ScanOffloadEnable, - IN u1Byte NLOEnable - ); - -VOID -HAL_H2CSetFwRemoteWakeCtrlCmd( - IN PADAPTER Adapter, - IN u1Byte Enable - ); - -VOID -HAL_H2CSetFwInactivePSCmd( - IN PADAPTER Adapter, - IN u1Byte Enable, - IN BOOLEAN bActiveWakeUp, - IN BOOLEAN bForceClkOff - ); - -VOID -Hal_InitVars( - IN PADAPTER Adapter -); - -VOID -Hal_InitCamEntry( - IN PADAPTER Adapter -); - -u1Byte -HAL_QueryBeamformerCap( - IN PADAPTER Adapter -); - -u1Byte -HAL_QueryBeamformeeCap( - IN PADAPTER Adapter -); - -VOID -HAL_DumpHwAllRegisters( - IN PADAPTER Adapter - ); - -VOID -Hal_SetRsvdCtrl( - IN PADAPTER pAdapter, - IN u4Byte BitMap - ); - -VOID -Hal_ClearRsvdCtrl( - IN PADAPTER pAdapter, - IN u4Byte BitMap - ); - -typedef struct _HW_REG_DEFINE{ - u4Byte regOffset; - u4Byte byteNum; -} HW_REG_DEFINE, *PHW_REG_DEFINE; - -typedef struct _HW_REG_PREACTION{ - u4Byte writeRegOffset; - u4Byte byteNum; - u4Byte bitMask; - u4Byte value; - u4Byte delayMs; - BOOLEAN bRestore; - u4Byte originalValue; -} HW_REG_PREACTION, *PHW_REG_PREACTION; - -typedef struct _HW_REG_VALUE{ - u4Byte regOffset; - u4Byte byteNum; - u4Byte regValue; -} HW_REG_VALUE, *PHW_REG_VALUE; - -#endif // #ifndef __INC_HALDEF_H diff --git a/network/wlan/WDI/HEADER/HashTable.h b/network/wlan/WDI/HEADER/HashTable.h deleted file mode 100644 index 7806b10b..00000000 --- a/network/wlan/WDI/HEADER/HashTable.h +++ /dev/null @@ -1,128 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// HashTable.h -// -// Description: -// Generic hash table for kernel mode module. -// -// Note: -// 1. Memory allocation is a issue on kernel space for calling context -// and computation time limitation. So we don't re-hash the table even -// it is full. In short, this implementation is not a perfect hash, -// however, if user has a good guess on hash table usage to prevent -// full and colission condition, this implementation is still a -// constant time on put, remove, and get operations. -// -// 2. This implementation is not thread-safe, that is, user have to -// protect related resource and the function exported here by their -// own means. -// -// 070606, by rcnjko. -//----------------------------------------------------------------------------- - -#ifndef __INC_HASH_TABLE_H -#define __INC_HASH_TABLE_H - -#define RT_HASH_KEY unsigned char* - -// -// Description: -// Return a index in [0,Capacity-1] from given key. -// -typedef unsigned int -(*RT_HT_HASH_FUNC)( - IN RT_HASH_KEY Key - ); - - -// -// Definition of a hash entry of an value object. -// -typedef struct _RT_HASH_ENTRY{ - RT_LIST_ENTRY BusyLink; // For list of all value objects in the hash table. - RT_LIST_ENTRY BucketLink; // For list of value objects in the same bucket. - RT_SINGLE_LIST_ENTRY FreeLink; // For list of free objects in the hash table. - RT_HASH_KEY Key; // Key associated. -}RT_HASH_ENTRY, *PRT_HASH_ENTRY; - -// -// This macro must be included in first line of data structure definition of a value object. -// -#define DECLARE_RT_HASH_ENTRY RT_HASH_ENTRY __HashEntry - -// -// Routines to translate from link list entry inside RT_HASH_ENTRY object -// to pointer to the RT_HASH_ENTRY object. -// -#define RT_HASH_ENTRY_FROM_BUSY_LINK(__pBusyLink) (PRT_HASH_ENTRY)(__pBusyLink) -#define RT_HASH_ENTRY_FROM_BUCKET_LINK(__pBucketLink) (PRT_HASH_ENTRY)( (pu1Byte)(__pBucketLink) - sizeof(RT_LIST_ENTRY) ) -#define RT_HASH_ENTRY_FROM_FREE_LINK(__pFreeLink) (PRT_HASH_ENTRY)( (pu1Byte)(__pFreeLink) - (sizeof(RT_LIST_ENTRY)*2) ) - -// -// Definition of the hash table. -// -typedef struct _RT_HASH_TABLE { - // - // Value object pool. - // - unsigned int NumValuesAlloc; // Number of value objects allcoated in pValuesPool. - unsigned int ValueSize; // # bytes of a value object. - void* pValuesBuf; // Pointer to the buffer allocated for value objects. - unsigned int KeySize; // # bytes of the key. - void* pKeysBuf; // Pointer to the buffer to store key of each value object. - RT_SINGLE_LIST_HEAD FreeValuesList; // List of available value object. - - // - // Hash table stuff. - // - RT_HT_HASH_FUNC pfHash; // Hash function. - RT_LIST_ENTRY BusyValuesList; // List of all value object put in Buckets[]. - unsigned int Capacity; // Number of Buckets[] allocated. - RT_LIST_ENTRY Buckets[1]; // Each entry accommodates value objects of the same hash result. -}*RT_HASH_TABLE_HANDLE; - - -// -// Hash Table Operations. -// -RT_HASH_TABLE_HANDLE -RtAllocateHashTable( - IN void* Adapter, - IN unsigned int Capacity, - IN unsigned int ValueSize, - IN unsigned int KeySize, - IN RT_HT_HASH_FUNC pfHash - ); - -void -RtFreeHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable - ); - -void -RtResetHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable - ); - -PRT_HASH_ENTRY -RtPutKeyToHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable, - IN RT_HASH_KEY Key - ); - -void -RtRemvoeKeyFromVaHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable, - IN RT_HASH_KEY Key - ); - -PRT_HASH_ENTRY -RtGetValueFromHashTable( - IN RT_HASH_TABLE_HANDLE hHashTable, - IN RT_HASH_KEY Key - ); - -#define RtGetAllValuesFromHashTable(__hHashTable) &((__hHashTable)->BusyValuesList) - -#endif - diff --git a/network/wlan/WDI/HEADER/LinkList.h b/network/wlan/WDI/HEADER/LinkList.h deleted file mode 100644 index 5d096e13..00000000 --- a/network/wlan/WDI/HEADER/LinkList.h +++ /dev/null @@ -1,252 +0,0 @@ -#ifndef __INC_LINKLIST_H -#define __INC_LINKLIST_H - -// -// Doubly linked list structure. Can be used as either a list head, or -// as link words. -// -typedef struct _RT_LIST_ENTRY { - struct _RT_LIST_ENTRY *Flink; - struct _RT_LIST_ENTRY *Blink; -} RT_LIST_ENTRY, *PRT_LIST_ENTRY; - -#define RTIsUnInitializedListHead(ListHead) \ - (NULL == (ListHead)->Flink || NULL == (ListHead)->Blink) - -#define RTIsListHead(ListHead, __Entry) \ - ((ListHead) == (__Entry)) - -// -// Doubly-linked list manipulation routines. Implemented as macros -// -#define RTInitializeListHead(ListHead) \ - ((ListHead)->Flink = (ListHead)->Blink = (ListHead)) - - -#define RTIsListEmpty(ListHead) \ - ((ListHead)->Flink == NULL || (ListHead)->Flink == (ListHead)) - -#define RTIsListNotEmpty(ListHead) \ - ((ListHead)->Flink != (ListHead)) - -#define RTGetHeadList(ListHead) \ - ((ListHead)->Flink) - -#define RTGetTailList(ListHead) \ - (ListHead)->Blink - -#define RTRemoveHeadList(ListHead) \ - (ListHead)->Flink; \ - {RTRemoveEntryList((ListHead)->Flink)} - - -#define RTRemoveTailList(ListHead) \ - (ListHead)->Blink; \ - {RTRemoveEntryList((ListHead)->Blink)} - - -#define RTNextEntryList(Entry) \ - (Entry)->Flink - -#define RTForeEntryList(Entry) \ - (Entry)->Blink - - -#define RTRemoveEntryList(Entry) \ - { \ - PRT_LIST_ENTRY _EX_Blink; \ - PRT_LIST_ENTRY _EX_Flink; \ - _EX_Flink = (Entry)->Flink; \ - _EX_Blink = (Entry)->Blink; \ - _EX_Blink->Flink = _EX_Flink; \ - _EX_Flink->Blink = _EX_Blink; \ - } - - -#define RTInsertTailList(ListHead,Entry) \ - { \ - PRT_LIST_ENTRY _EX_Blink; \ - PRT_LIST_ENTRY _EX_ListHead; \ - _EX_ListHead = (ListHead); \ - _EX_Blink = _EX_ListHead->Blink; \ - (Entry)->Flink = _EX_ListHead; \ - (Entry)->Blink = _EX_Blink; \ - _EX_Blink->Flink = (Entry); \ - _EX_ListHead->Blink = (Entry); \ - } - - -#define RTInsertHeadList(ListHead,Entry) \ - { \ - PRT_LIST_ENTRY _EX_Flink; \ - PRT_LIST_ENTRY _EX_ListHead; \ - _EX_ListHead = (ListHead); \ - _EX_Flink = _EX_ListHead->Flink; \ - (Entry)->Flink = _EX_Flink; \ - (Entry)->Blink = _EX_ListHead; \ - _EX_Flink->Blink = (Entry); \ - _EX_ListHead->Flink = (Entry); \ - } - - -#define RTPopEntryList(ListHead) \ - (ListHead)->Next; \ - { \ - PRT_SINGLE_LIST_ENTRY FirstEntry; \ - FirstEntry = (ListHead)->Next; \ - if (FirstEntry != NULL) \ - { \ - (ListHead)->Next = FirstEntry->Next; \ - } \ - } - - -#define RTPushEntryList(ListHead,Entry) \ - (Entry)->Next = (ListHead)->Next; \ - (ListHead)->Next = (Entry) - -// Insert __InsertedEntry before __Entry -#define RTInsertEntryBeforeEntry(__InsertedEntry, __Entry) \ - { \ - PRT_LIST_ENTRY _EX_Blink; \ - _EX_Blink = (__Entry)->Blink; \ - _EX_Blink->Flink = (__InsertedEntry); \ - (__InsertedEntry)->Blink = _EX_Blink; \ - (__InsertedEntry)->Flink = (__Entry); \ - (__Entry)->Blink = (__InsertedEntry); \ - } - -// Insert __InsertedEntry after __Entry -#define RTInsertEntryAfterEntry(__InsertedEntry, __Entry) \ - { \ - PRT_LIST_ENTRY _EX_Flink; \ - _EX_Flink = (__Entry)->Flink; \ - _EX_Flink->Blink = (__InsertedEntry); \ - (__InsertedEntry)->Flink = _EX_Flink; \ - (__InsertedEntry)->Blink = (__Entry); \ - (__Entry)->Flink = (__InsertedEntry); \ - } - -//--------------------------------------------------------------------------- -// The following MACROs do the same with the above MACROs except the Cnt parameter. -// Cnt is a pointer to counter which will be modified. - -#define RTRemoveHeadListWithCnt(ListHead,Cnt) \ - (ListHead)->Flink; \ - RTRemoveEntryListWithCnt((ListHead)->Flink, Cnt) - -#define RTRemoveTailListWithCnt(ListHead,Cnt) \ - (ListHead)->Blink; \ - RTRemoveEntryListWithCnt((ListHead)->Blink, Cnt) - -#define RTRemoveEntryListWithCnt(Entry,Cnt) \ - RTRemoveEntryList(Entry) \ - (*Cnt)--; - -#define RTInsertTailListWithCnt(ListHead,Entry,Cnt) \ - RTInsertTailList(ListHead,Entry) \ - (*Cnt)++; - -#define RTInsertHeadListWithCnt(ListHead,Entry,Cnt) \ - RTInsertHeadList(ListHead,Entry) \ - (*Cnt)++; - -#define RTPopEntryListWithCnt(ListHead,Cnt) \ - RTPopEntryList(ListHead) \ - (*Cnt)--; - -#define RTPushEntryListWithCnt(ListHead,Entry,Cnt) \ - RTPushEntryList(ListHead,Entry) \ - (*Cnt)++; - - - -#define RTSwitchListHead(orgListHead, newListHead) \ -{ \ - RTNextEntryList(newListHead) = RTNextEntryList(orgListHead); \ - RTForeEntryList(RTNextEntryList(orgListHead)) = newListHead; \ - RTNextEntryList(RTForeEntryList(orgListHead)) = newListHead; \ - RTForeEntryList(newListHead) = RTForeEntryList(orgListHead); \ - RTInitializeListHead(orgListHead); \ -} - -#define RtEntryListForEach(__pListHead, __itEntry) \ - for((__itEntry) = RTGetHeadList((__pListHead)); \ - (__itEntry) != (__pListHead); \ - (__itEntry) = RTNextEntryList((__itEntry)) \ - ) - -#define RtEntryListForEachSafe(__pListHead, __itEntry, __n) \ - for((__itEntry) = RTGetHeadList((__pListHead)), \ - (__n) = (__itEntry)->Flink; \ - (__itEntry) != (__pListHead); \ - (__itEntry) = (__n), (__n) = RTNextEntryList((__n)) \ - ) - -// -// Singly linked list structure. -// Only used as link words. -// -typedef struct _RT_SINGLE_LIST_ENTRY { - struct _RT_SINGLE_LIST_ENTRY *Next; -} RT_SINGLE_LIST_ENTRY, *PRT_SINGLE_LIST_ENTRY; - -// -// Singly linked list structure. -// Only used as link head. -// -typedef struct _RT_SINGLE_LIST_HEAD { - PRT_SINGLE_LIST_ENTRY First; - PRT_SINGLE_LIST_ENTRY Last; -} RT_SINGLE_LIST_HEAD, *PRT_SINGLE_LIST_HEAD; - - - -// -// Single link list routines. -// -#define RTInitializeSListHead(SListHead) \ - ((SListHead)->First = (SListHead)->Last = NULL) - -#define RTIsSListEmpty(SListHead) \ - ((SListHead)->First == NULL) - -#define RTGetHeadSList(SListHead) \ - (PRT_SINGLE_LIST_ENTRY)((SListHead)->First) - -#define RTGetTailSList(SListHead) \ - (PRT_SINGLE_LIST_ENTRY)((SListHead)->Last) - -#define RTRemoveHeadSList(SListHead) \ - RTGetHeadSList(SListHead); \ - RT_ASSERT(!RTIsSListEmpty(SListHead), ("RTRemoveHeadSList(): SList(%p) is empty!!!\n", SListHead)); \ - { \ - PRT_SINGLE_LIST_ENTRY pToRemove = (SListHead)->First; \ - if((SListHead)->First == (SListHead)->Last) \ - { \ - (SListHead)->First = (SListHead)->Last = NULL; \ - } \ - else \ - { \ - (SListHead)->First = pToRemove->Next; \ - } \ - pToRemove->Next = NULL; \ - } - -#define RTInsertTailSList(SListHead, SListEntry) \ - { \ - PRT_SINGLE_LIST_ENTRY pOldTail = (SListHead)->Last; \ - (SListEntry)->Next = NULL; \ - if(RTIsSListEmpty(SListHead)) \ - { \ - (SListHead)->First = (SListHead)->Last = SListEntry; \ - } \ - else \ - { \ - pOldTail->Next = SListEntry; \ - (SListHead)->Last = SListEntry; \ - } \ - } - - -#endif // #ifndef __INC_LINKLIST_H diff --git a/network/wlan/WDI/HEADER/MAType.h b/network/wlan/WDI/HEADER/MAType.h deleted file mode 100644 index d16647b0..00000000 --- a/network/wlan/WDI/HEADER/MAType.h +++ /dev/null @@ -1,87 +0,0 @@ -#ifndef __INC_MATYPE_H -#define __INC_MATYPE_H - -typedef enum _ACT_CATEGORY{ - ACT_CAT_SPECTRUM_MGNT = 0, // Spectrum management - ACT_CAT_QOS = 1, // Qos - ACT_CAT_DLS = 2, // Direct Link Protocol (DLS) - ACT_CAT_BA = 3, // Block Ack - ACT_CAT_PUBLIC = 4, // Public - ACT_CAT_RM = 5, // Radio Measurement (RM) - ACT_CAT_FT = 6, // Fast BSS Transition - ACT_CAT_HT = 7, // High Throughput - ACT_CAT_SAQ = 8, // Security Association Query - ACT_CAT_SAQ_PD_PUBLIC = 9, // Protected Dual of Public Action - ACT_CAT_TDLS = 12, // Tunneled Direct Link Setup - ACT_CAT_WMM = 17, // WMM - ACT_CAT_VHT = 21, // VHT - ACT_CAT_VENDOR_PROTECT = 126, // Vendor-specific Protected - ACT_CAT_VENDOR = 127, // Vendor-specific -} ACT_CATEGORY, *PACT_CATEGORY; - -typedef enum _TS_ACTION{ - ACT_ADDTSREQ = 0, - ACT_ADDTSRSP = 1, - ACT_DELTS = 2, - ACT_SCHEDULE = 3, -} TS_ACTION, *PTS_ACTION; - -typedef enum _DL_ACTION{ - ACT_DLSREQ = 0, - ACT_DLSRSP = 1, - ACT_DLSTEARDOWN = 2, -} DL_ACTION, *PDL_ACTION; - -typedef enum _BA_ACTION{ - ACT_ADDBAREQ = 0, - ACT_ADDBARSP = 1, - ACT_DELBA = 2, -} BA_ACTION, *PBA_ACTION; - -typedef enum _PUBLIC_ACTION{ - ACT_PUBLIC_BSSCOEXIST = 0, // 20/40 BSS Coexistence - ACT_PUBLiC_MP = 7, // Measurement Pilot - ACT_PUBLIC_TDLS_DISCOVERYRSP = 14, -}PUBLIC_ACTION, *PPUBLIC_ACTION; - -typedef enum _HT_ACTION{ - ACT_RECOMMAND_WIDTH = 0, - ACT_MIMO_PWR_SAVE = 1, - ACT_PSMP = 2, - ACT_SET_PCO_PHASE = 3, - ACT_CSI_MATRICS = 4, - ACT_NOCOMPRESSED_BEAMFORMING= 5, - ACT_COMPRESSED_BEAMFORMING = 6, - ACT_ANTENNA_SELECT = 7, -} HT_ACTION, *PHT_ACTION; - -typedef enum _RM_ACTION{ - ACT_RM_REQUEST = 0, // Radio Measurement Request - ACT_RM_REPORT = 1, // Radio Measurement Report - ACT_RM_LINK_MEASURE_REQUEST = 2, // Link Measurement Request - ACT_RM_LINK_MEASURE_REPORT = 3, // Link Measurement Report - ACT_RM_NEIGHBOR_RRT_REQUEST = 4, // Neighbor Report Request - ACT_RM_NEIGHBOT_RPT_RESPONSE = 5, // Neighbor Report Response -}RM_ACTION, *PRM_ACTION; - -typedef enum _TDLS_ACTION{ - ACT_TDLS_SETUPREQ = 0, - ACT_TDLS_SETUPRSP = 1, - ACT_TDLS_SETUPCONFIRM = 2, - ACT_TDLS_TEARDOWN = 3, - ACT_TDLS_PEERTRAFFICIND = 4, - ACT_TDLS_CHNLSWITCHREQ = 5, - ACT_TDLS_CHNLSWITCHRSP = 6, - ACT_TDLS_PEERPSMREQ = 7, - ACT_TDLS_PEERPSMRSP = 8, - ACT_TDLS_PEERTRAFFICRSP = 9, - ACT_TDLS_DISCOVERYREQ = 10, - ACT_TDLS_MAX = 11, -}TDLS_ACTION, *PTDLS_ACTION; - -typedef enum _VHT_ACTION{ - ACT_VHT_COMPRESSED_BEAMFORMING = 0, - ACT_VHT_GROUPID_MANAGEMENT = 1, - ACT_VHT_OPMODE_NOTIFICATION = 2, -}VHT_ACTION, *PVHT_ACTION; -#endif diff --git a/network/wlan/WDI/HEADER/Object.h b/network/wlan/WDI/HEADER/Object.h deleted file mode 100644 index e630c339..00000000 --- a/network/wlan/WDI/HEADER/Object.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef __INC_OBJECT_H -#define __INC_OBJECT_H - - -typedef struct _RT_OBJECT{ - RT_LIST_ENTRY ListEntry; - void* pStartVa; - unsigned int SizeAlloc; -}RT_OBJECT, *PRT_OBJECT; - -#define DECLARE_RT_OBJECT(__DATA_TYPE) RT_OBJECT __Object - -#define INIT_RT_OBJECT_LIST(__pObjectList) RTInitializeListHead(__pObjectList); - - -#define ADD_RT_OBJECT(__pObjectList, __pPtr, __DATA_TYPE) \ - { \ - PRT_OBJECT pObject = &(((__DATA_TYPE *)(__pPtr))->__Object); \ - pObject->pStartVa = (__pPtr); \ - pObject->SizeAlloc = sizeof(__DATA_TYPE); \ - RTInsertTailList(__pObjectList, &(pObject->ListEntry) ); \ - } - -#define REMOVE_RT_OBJECT(__pObjectList) RTRemoveHeadList(__pObjectList) - -#define HAS_RT_OBJECT(__pObjectList) RTIsListNotEmpty(__pObjectList) - -#define ALLOC_RT_OBJECT(__pAdapter, __pObjectList, __ppOutPtr, __DATA_TYPE) \ - { \ - *(__ppOutPtr) = NULL; \ - if( RT_STATUS_SUCCESS == PlatformAllocateMemory((__pAdapter), (__ppOutPtr), sizeof(__DATA_TYPE)) ) { \ - PlatformZeroMemory(*(__ppOutPtr), sizeof(__DATA_TYPE)); \ - ADD_RT_OBJECT(__pObjectList, *(__ppOutPtr), __DATA_TYPE); \ - } \ - } - -#define FREE_RT_OBJECT(__pObjectList) \ - { \ - PRT_OBJECT __pObject = (PRT_OBJECT)REMOVE_RT_OBJECT(__pObjectList); \ - PlatformFreeMemory((__pObject)->pStartVa, (__pObject)->SizeAlloc); \ - } - -#endif diff --git a/network/wlan/WDI/HEADER/PlatformDef.h b/network/wlan/WDI/HEADER/PlatformDef.h deleted file mode 100644 index cad6fb7a..00000000 --- a/network/wlan/WDI/HEADER/PlatformDef.h +++ /dev/null @@ -1,1273 +0,0 @@ -#ifndef __INC_PLATFORMDEF_H -#define __INC_PLATFORMDEF_H - -// Forward declaration. -typedef struct _RT_FILE_HANDLER RT_FILE_HANDLER, *PRT_FILE_HANDLER; - -typedef enum _PRE_AUTH_INDICATION_REASON PRE_AUTH_INDICATION_REASON; //xcode c++ compiler error - -typedef struct _ADAPTER ADAPTER, *PADAPTER; - -// - -// If the destination buffer size is smaller than the source, only copy the last string to destination. -#define COPY_ANSI_LAST_STRING(__pDest, __MaxSize, __pSource) \ - memcpy(__pDest, &(__pSource[(strlen(__pSource) > (__MaxSize - 1)) ? (strlen(__pSource) - (__MaxSize - 1)) : 0]), (strlen(__pSource) > (__MaxSize - 1)) ? (__MaxSize - 1) : strlen(__pSource) + 1) - -// =================================================================================== -// Define RT_EVENT for all platform here -// =================================================================================== - typedef NDIS_EVENT RT_EVENT; - #define PLATFORM_INIT_RT_EVENT(__RtEvent) NdisInitializeEvent(&(__RtEvent)) - #define PLATFORM_FREE_RT_EVENT(__RtEvent) // No Need to Free the Event in Windows - #define PLATFORM_SET_RT_EVENT(__RtEvent) NdisSetEvent(&(__RtEvent)) - #define PLATFORM_RESET_RT_EVENT(__RtEvent) NdisResetEvent(&(__RtEvent)) - #define PLATFORM_WAIT_RT_EVENT(__RtEvent, __MsToWait) NdisWaitEvent(&(__RtEvent), (__MsToWait)) - -// =================================================================================== - - -// =================================================================================== -// Define RT_SPIN_LOCK for all platform here -// =================================================================================== - - typedef NDIS_SPIN_LOCK RT_SPIN_LOCK; - #define PLATFORM_INIT_RT_SPINLOCK(__RtSpinLock) NdisAllocateSpinLock(&(__RtSpinLock)) - #define PLATFORM_FREE_RT_SPINLOCK(__RtSpinLock) NdisFreeSpinLock(&(__RtSpinLock)) - #define PLATFORM_ACQUIRE_RT_SPINLOCK(__RtSpinLock) NdisAcquireSpinLock(&(__RtSpinLock)) - #define PLATFORM_RELEASE_RT_SPINLOCK(__RtSpinLock) NdisReleaseSpinLock(&(__RtSpinLock)) - -// =================================================================================== - - - -#define RT_SSID_LENGTH 36 - - - #define PlatformEFIOWrite1Byte(_a,_b,_c) \ - PlatformIOWrite1Byte(_a,WLAN_IOREG_DEVICE_ID,_b,_c) - #define PlatformEFIOWrite2Byte(_a,_b,_c) \ - PlatformIOWrite2Byte(_a,WLAN_IOREG_DEVICE_ID,_b,EF2Byte(_c)) - #define PlatformEFIOWrite4Byte(_a,_b,_c) \ - PlatformIOWrite4Byte(_a,WLAN_IOREG_DEVICE_ID,_b,EF4Byte(_c)) - #define PlatformEFIOSyncWriteNByte(_a,_b,_c,_d) \ - PlatformIOSyncWriteNByte(_a,WLAN_IOREG_DEVICE_ID,_b,_c,_d) - - - #define PlatformEFIORead1Byte(_a,_b) \ - PlatformIORead1Byte(_a,WLAN_IOREG_DEVICE_ID,_b) - #define PlatformEFIORead2Byte(_a,_b) \ - EF2Byte(PlatformIORead2Byte(_a,WLAN_IOREG_DEVICE_ID,_b)) - #define PlatformEFIORead4Byte(_a,_b) \ - EF4Byte(PlatformIORead4Byte(_a,WLAN_IOREG_DEVICE_ID,_b)) - #define PlatformEFIOReadNByte(_a,_b,_c,_d) \ - PlatformIOReadNByte(_a,WLAN_IOREG_DEVICE_ID,_b,_c,_d) - -#define GET_SHARED_MEMORY_WITH_OFFSET(_src, _dest, _offset, _length) \ - (_dest)->VirtualAddress=(_src)->VirtualAddress + (_offset); \ - (_dest)->PhysicalAddressHigh=(_src)->PhysicalAddressHigh; \ - (_dest)->PhysicalAddressLow=(_src)->PhysicalAddressLow + (_offset); \ - if ((_dest)->PhysicalAddressLow < (_src)->PhysicalAddressLow) \ - (_dest)->PhysicalAddressHigh++; \ - (_dest)->Length=(_length); - -#define MAKE_SHARED_MEMORY_OFFSET_AT_FRONT(_buf, _offset) \ - { \ - u4Byte AddrLow; \ - AddrLow=(_buf)->PhysicalAddressLow; \ - (_buf)->VirtualAddress +=_offset; \ - (_buf)->PhysicalAddressLow += _offset; \ - if((_buf)->PhysicalAddressLow < AddrLow) \ - (_buf)->PhysicalAddressHigh++; \ - (_buf)->Length-=_offset; \ - } - -#define RT_TIMER_STATUS_INITIALIZED BIT0 -#define RT_TIMER_STATUS_SET BIT1 -#define RT_TIMER_STATUS_PERIODIC BIT2 -#define RT_TIMER_STATUS_FIRED BIT3 // This timer had been fired. -#define RT_TIMER_STATUS_CANCEL_NG BIT4 // Timer cannot be canceled. -#define RT_TIMER_STATUS_RELEASED BIT5 // TImer had been released. -#define RT_TIMER_STATUS_SUSPENDED BIT6 // Timer has been canceled and suspended till resumption - - -#define RT_THREAD_STATUS_INITIALIZED BIT0 -#define RT_THREAD_STATUS_SET BIT1 -#define RT_THREAD_STATUS_PERIODIC BIT2 -#define RT_THREAD_STATUS_FIRED BIT3 // This timer had been fired. -#define RT_THREAD_STATUS_CANCEL BIT4 // Timer cannot be canceled. -#define RT_THREAD_STATUS_CANCEL_NG BIT5 // Timer cannot be canceled. -#define RT_THREAD_STATUS_RELEASED BIT6 // TImer had been released. - - -typedef UCHAR RT_THREAD_LEVEL; - -#define RT_THREAD_LEVEL_PASSIVE BIT0 -#define RT_THREAD_LEVEL_APC BIT1 -#define RT_THREAD_LEVEL_DISPATCH BIT2 - -// -// PlatformSleepUs() will put the thread into wait queue for specified period -// in us and OS can reschedule now. -// So, we MUST make sure we are in proper context to use this function. -// - - #define PlatformSleepUs NdisMSleep - - #define INT8_C(v) (v) - #define INT16_C(v) (v) - #define INT32_C(v) (v) - #define INT64_C(v) (v) - - #define UINT8_C(v) (v) - #define UINT16_C(v) (v) - #define UINT32_C(v) (v) - #define UINT64_C(v) (v) - - #define INTMAX_C(v) (v) - #define UINTMAX_C(v) (v) - - #define i64fmt "I64" - -// Macro for getting Ibss Addition IEs. By Bruce, 2007-08-13. - - #define GetIbssAdditionalData(_pAdapter, _pOctetString) \ - if(((_pAdapter)->pNdisCommon->dot11IbssParams.AdditionalIESize) < 0xFFFF) \ - { \ - (_pOctetString)->Octet = (pu1Byte)((_pAdapter)->pNdisCommon->dot11IbssParams.AdditionalIEData); \ - (_pOctetString)->Length = (u2Byte)((_pAdapter)->pNdisCommon->dot11IbssParams.AdditionalIESize); \ - } \ - else \ - { \ - (_pOctetString)->Octet = NULL; \ - (_pOctetString)->Length = 0; \ - } - - #define GetIbssbJoinOnly( _pAdapter) (_pAdapter->pNdisCommon->dot11IbssParams.bDot11IbssJoinOnly) - // - // Note: - // According to Ndis6 WDK, this default value should be "FALSE", and XP in DTM should be - // "TRUE" because it doesn't support this mode. - // By Bruce, 2008-06-27. - #define DEFAULT_HIDDEN_SSID (FALSE) - -#ifndef PCI_TYPE1_ADDRESS - #define PCI_CONF_ADDRESS 0x0CF8 // PCI Configuration Space Address - #define PCI_CONF_DATA 0x0CFC // PCI Configuration Space Data -#endif - - -// Place Holder for Private Data --------------------- -typedef u1Byte PRIVATE_DATA_ZONE; -// --------------------------------------------- - -// Vaild Pairs ------------------------------------------------------------------ -typedef struct _RT_VALID_PAIR_BOOLEAN -{ - BOOLEAN bVaild; - BOOLEAN Data; - -} RT_VALID_PAIR_BOOLEAN, *PRT_VALID_PAIR_BOOLEAN; - -typedef struct _RT_VALID_PAIR_U4BYTE -{ - BOOLEAN bVaild; - u4Byte Data; - -} RT_VALID_PAIR_U4BYTE, *PRT_VALID_PAIR_U4BYTE; -// --------------------------------------------------------------------------- - - -typedef struct _MEMORY_BUFFER { - pu1Byte Buffer; - u4Byte Length; -}MEMORY_BUFFER, *PMEMORY_BUFFER; - -typedef struct _VIRTUAL_MEMORY{ - PVOID Ptr; - u4Byte Length; -}VIRTUAL_MEMORY,*PVIRTUAL_MEMORY; - -typedef struct _PHYSICAL_MEMORY{ - u4Byte AddressLow; - u4Byte AddressHigh; - u4Byte Length; -}PHYSICAL_MEMORY,*PPHYSICAL_MEMORY; - -typedef struct _SHARED_MEMORY{ - pu1Byte VirtualAddress; - u4Byte PhysicalAddressHigh; - u4Byte PhysicalAddressLow; - u4Byte Length; -}SHARED_MEMORY,*PSHARED_MEMORY; - -typedef struct _ALIGNED_SHARED_MEMORY{ - SHARED_MEMORY OriginalSharedMemory; - pu1Byte VirtualAddress; - u4Byte PhysicalAddressHigh; - u4Byte PhysicalAddressLow; - u4Byte Length; -}ALIGNED_SHARED_MEMORY,*PALIGNED_SHARED_MEMORY; - - - -typedef VOID -(*RT_THREAD_CALL_BACK)( - PVOID Adapter - ); - -typedef struct __RT_THREAD -{ - PADAPTER Adapter; - u1Byte Status; - PVOID pPlatformExt; - PVOID pContext; - RT_THREAD_CALL_BACK CallbackFunc; - RT_THREAD_CALL_BACK PreTheradExitCb; - u2Byte RefCnt; - u2Byte ScheduleCnt; // only for debug information - BOOLEAN bEventTriger; - char szID[36]; - u1Byte Argc; - u1Byte Argv[1]; -}RT_THREAD, *PRT_THREAD; - - -typedef VOID -(*RT_TIMER_CALL_BACK)( - PVOID pRtTimer - ); - -typedef struct _RT_TIMER{ - RT_TIMER_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object. - PVOID Adapter; // Pointer to Adapter object. - RT_TIMER_CALL_BACK CallBackFunc; // Callback function of the workitem. - u4Byte Status; // Status of the timer. see RT_TIMER_STATUS_XXX for possible value. - u4Byte PreviousStatus; // Previous status of the timer, i.e., status before timer suspended - u4Byte msDelay; // The interval ms to call CallBackFunc after setting timer. Inialize as 0 and will be udpated when timer set. - PVOID Context; // Timer specific context. - u2Byte RefCnt; // Per timer scheduled counter. by Roger ,2007.04.27. - u2Byte TimerStallSlotCount; // For Timer stall checking mechanism. Added by Roger, 2007.04.27. - char szID[36]; // An identity string of this timer. -}RT_TIMER, *PRT_TIMER; - -typedef VOID -(*RT_WORKITEM_CALL_BACK)( - PVOID pContext - ); - -typedef struct _RT_WORK_ITEM -{ - RT_WORKITEM_HANDLE Handle; // Platform-dependent handle for this workitem, e.g. Ndis Workitem object. - PVOID Adapter; // Pointer to Adapter object. - PVOID pContext; // Parameter to passed to CallBackFunc(). - RT_WORKITEM_CALL_BACK CallbackFunc; // Callback function of the workitem. - u1Byte RefCount; // 0: driver is going to unload, 1: No such workitem scheduled, 2: one workitem is schedueled. - PVOID pPlatformExt; // Pointer to platform-dependent extension. - BOOLEAN bFree; - char szID[36]; // An identity string of this workitem. -}RT_WORK_ITEM, *PRT_WORK_ITEM; - - -typedef enum _RT_MEDIA_STATUS{ - RT_MEDIA_DISCONNECT = 0, - RT_MEDIA_CONNECT = 1 -}RT_MEDIA_STATUS; - - -typedef enum _RT_SPINLOCK_TYPE{ - RT_TX_SPINLOCK = 1, - RT_RX_SPINLOCK = 2, - RT_RM_SPINLOCK = 3, - RT_CAM_SPINLOCK = 4, - RT_SCAN_SPINLOCK = 5, - RT_LOG_SPINLOCK = 7, - RT_BW_SPINLOCK = 8, - RT_CHNLOP_SPINLOCK = 9, - RT_RF_OPERATE_SPINLOCK = 10, - RT_INITIAL_SPINLOCK = 11, - RT_RF_STATE_SPINLOCK = 12, // For RF state. Added by Bruce, 2007-10-30. -#if VISTA_USB_RX_REVISE - RT_USBRX_CONTEXT_SPINLOCK = 13, - RT_USBRX_POSTPROC_SPINLOCK = 14, // protect data of Adapter->IndicateW/ IndicateR -#endif - //Shall we define Ndis 6.2 SpinLock Here ? - RT_PORT_SPINLOCK=16, - RT_H2C_SPINLOCK = 20, // For H2C cmd. Added by tynli. 2009.11.09. - RT_IOTHREAD_SPINLOCK = 21, - RT_BTData_SPINLOCK=25, - - RT_WAPI_OPTION_SPINLOCK=26, - RT_WAPI_RX_SPINLOCK=27, - - // add for 92D CCK control issue - RT_CCK_PAGEA_SPINLOCK = 28, - RT_BUFFER_SPINLOCK = 29, - RT_CHANNEL_AND_BANDWIDTH_SPINLOCK = 30, - RT_GEN_TEMP_BUF_SPINLOCK = 31, - RT_AWB_SPINLOCK = 32, - RT_FW_PS_SPINLOCK = 33, - RT_HW_TIMER_SPIN_LOCK = 34, - RT_MPT_WI_SPINLOCK = 35, - RT_P2P_SPIN_LOCK = 36, // Protect P2P context - RT_DBG_SPIN_LOCK = 37, - RT_IQK_SPINLOCK = 38, - RT_PENDED_OID_SPINLOCK = 39, - RT_CHNLLIST_SPINLOCK = 40, - RT_INDIC_SPINLOCK = 41, //protect indication - RT_DRV_STATE_SPINLOCK = 42, - RT_RFD_SPINLOCK = 43, - RT_ACS_SPINLOCK = 44, // Auto Channel Switching - RT_RX_REF_CNT_SPINLOCK = 45, - RT_SYNC_IO_CNT_SPINLOCK = 46, - RT_CUSTOM_SCAN_SPINLOCK = 47, - RT_RX_CONTROL_SPINLOCK = 48, - RT_RX_QUEUE_SPINLOCK = 49, - RT_DYN_TXPWRTBL_SPINLOCK = 50, - RT_LAST_SPINLOCK, -}RT_SPINLOCK_TYPE; - -typedef enum _RT_EVENTLOG_TYPE{ - RT_FW_DOWLOAD_F = 0, - RT_INIT_HANDLER_FAIL = 1, - RT_INIT_FAIL = 2, - RT_MUTUAL_AUTHENTICATION_FAIL=3, - RT_INIT_OK =4, - RT_SCAN_START =5, - RT_SCAN_COMPLETE =6, - RT_SCAN_NUM =7, - RT_TKIP_MIC_ERROR = 8, - RT_HW_AIRPLANE_MODE_TRIGGERED = 9, -}RT_EVENTLOG_TYPE; - -// DMA buffer catch sync diection -typedef enum _RT_DMA_DIRECTION { - RT_DMA_BIDIRECTIONAL=0, - RT_DMA_TO_DEVICE=1, - RT_DMA_FROM_DEVICE=2, - RT_DMA_NONE -} RT_DMA_DIRECTION, *PRT_DMA_DIRECTION; - -typedef enum _RT_RX_INDICATION_LEVEL { - RT_RX_INDICATION_DPC, //In a DPC - RT_RX_INDICATION_GENERAL, //Include DISPATCH/PASSIVE level - RT_RX_INDICATION_RESUME //WDI resume Rx -} RT_RX_INDICATION_LEVEL; - -// -// Sinda, 20150511 -// Redefine CCX_ASOC_REASON for prepare roaming type in Win10 to decide to skip scan from WDI or not. -// -typedef enum _RT_PREPARE_ROAM_TYPE{ - RT_PREPARE_ROAM_UNSPECIFIED = 0, - RT_PREPARE_ROAM_NORMAL_ROAM_POOR_LINK = 1, - RT_PREPARE_ROAM_NORMAL_ROAM_LOAD_BALANCING = 2, - RT_PREPARE_ROAM_INSUFFICIENT_CAPACITY = 3, - RT_PREPARE_ROAM_DIRECT_ROAM = 4, - RT_PREPARE_ROAM_FIRST_ASSOCIATION = 5, - RT_PREPARE_ROAM_ROAM_FROM_WAN = 6, - RT_PREPARE_ROAM_ROAM_TO_WAN = 7, - RT_PREPARE_ROAM_NORMAL_ROAM_BETTER_AP = 8, - RT_PREPARE_ROAM_DEAUTH_DISASSOC = 9, - RT_PREPARE_ROAM_NONE, -} RT_PREPARE_ROAM_TYPE, *PRT_PREPARE_ROAM_TYPE; - - -/* - * Note: 1. Each platform should have its implementation of all following functions. - * 2. PlatformEFIOxxxxxxByte is used to read/write integer to hardware - * 3. PlatformIOxxxxxxByte is used to read/write raw data - * -*/ - -VOID -PlatformIOWrite1Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u1Byte data - ); - -VOID -PlatformIOWrite2Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u2Byte data - ); - -VOID -PlatformIOWrite4Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u4Byte data - ); - -VOID -PlatformIOSyncWriteNByte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u4Byte count, - pu1Byte pdata - ); - -VOID -PlatformIOWriteNByte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u4Byte count, - pu1Byte pdata - ); - -u1Byte -PlatformIORead1Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset - ); - -u2Byte -PlatformIORead2Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset - ); - -u4Byte -PlatformIORead4Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset - ); - -VOID -PlatformIOReadNByte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u4Byte offset, - IN u4Byte count, - OUT pu1Byte pBuffer - ); - -RT_STATUS -PlatformAllocateMemoryWithTag( - IN PVOID Adapter, - IN u4Byte Tag, - OUT PVOID *pPtr, - IN u4Byte length - ); - -VOID -PlatformFreeMemory( - IN PVOID ptr, - IN u4Byte length - ); - -RT_STATUS -PlatformAllocateMemoryWithZero( - IN PVOID Adapter, - OUT PVOID *pPtr, - IN u4Byte length - ); - -#define RtDbgInitMem() -#define RtDbgDeinitMem() -#define PlatformAllocateMemory(__Adapter, __Ptr, __Len) \ - PlatformAllocateMemoryWithTag(__Adapter, GenTag(__FUNCTION__), __Ptr, __Len) -#define PlatformFreeMemory(ptr, length) \ - PlatformFreeMemory(ptr, length) -#define PlatformAllocateMemoryWithZero(__Adapter, __Ptr, __Len) \ - PlatformAllocateMemoryWithZero(__Adapter, __Ptr, __Len) - - - -RT_STATUS -PlatformAllocateSharedMemory( - PVOID Adapter, - PSHARED_MEMORY pSharedMemory, - u4Byte length - ); - -VOID -PlatformFreeSharedMemory( - PVOID Adapter, - PSHARED_MEMORY pSharedMemory - ); - -RT_STATUS -PlatformAllocateAlignedSharedMemory( - PVOID Adapter, - PALIGNED_SHARED_MEMORY pAlignedSharedMemory, - u4Byte length - ); - -VOID -PlatformFreeAlignedSharedMemory( - PVOID Adapter, - PALIGNED_SHARED_MEMORY pAlignedSharedMemory - ); - -VOID -PlatformZeroMemory( - PVOID ptr, - u4Byte length - ); - -VOID -PlatformMoveMemory( - PVOID pDest, - PVOID pSrc, - u4Byte length - ); - -s4Byte -PlatformCompareMemory( - PVOID pBuf1, - PVOID pBuf2, - u4Byte length - ); - -VOID -PlatformFillMemory( - PVOID Buf, - u4Byte Length, - u1Byte Fill - ); - -VOID -PlatformStallExecution( - u4Byte usDelay - ); -VOID -PlatformForceStallExecution( - u4Byte usDelay - ); - -#define PlatformAllocateAlignedDmaMemory PlatformAllocateAlignedSharedMemory -#define PlatformFreeAlignedDmaMemory PlatformFreeAlignedSharedMemory -#define PlatformDmaMapSingle -#define PlatformDmaUnMapSingle -#define smp_wmb() - -// -// 2009/04/17 MH Vista timer has s strange condition. If we delay -// more than 50 us in dispatch level. Our driver will be scheduled out and -// then delay time will be more than what we require. For example, delay -// 100us, real delay time will be 15ms!!! -// Be carefule!!!!. We need to use a macro to execute the special delay -// process. If you use a function, Vista will also delay more than what you -// need. You need to plus a useless I/O operation to prevent the strange -// Vista scheduler behavior. -// We can fix SE IPS power on delay time from 200ms to 5ms. -// Test more than 4 days IPS and S3/S4 resume OK on 8 platforms.. -// - -#define PLATFORM_STALLEXE_DISPATCH(pAdapter, usDelay) \ -{ \ - u1Byte u1bTmp, i; \ - for (i = 0; i < (usDelay/MAX_STALL_TIME); i++) \ - { \ - PlatformStallExecution(MAX_STALL_TIME-1); \ - u1bTmp = PlatformEFIORead1Byte(pAdapter, 0x0); \ - } \ -} - - -VOID -PlatformInitializeTimer( - PVOID Adapter, - PRT_TIMER pTimer, - RT_TIMER_CALL_BACK CallBackFunc, - PVOID pContext, - const char* szID - ); - -BOOLEAN -PlatformSetTimer( - PVOID Adapter, - PRT_TIMER pTimer, - u4Byte msDelay - ); - -BOOLEAN -PlatformSetPeriodicTimer( - PVOID Adapter, - PRT_TIMER pTimer, - u4Byte msDelay - ); - -BOOLEAN -PlatformCancelTimer( - PVOID Adapter, - PRT_TIMER pTimer - ); - - -BOOLEAN -PlatformReleaseTimer( - PVOID Adapter, - PRT_TIMER pTimer - ); - -BOOLEAN -PlatformSuspendTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer - ); - -BOOLEAN -PlatformResumeTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer - ); - -RT_STATUS -PlatformInitializeWorkItem( - PVOID Adapter, - PRT_WORK_ITEM pRtWorkItem, - RT_WORKITEM_CALL_BACK NdisWorkItemCallback, - PVOID pContext, - const char* szID -); - -VOID -PlatformStartWorkItem( - PRT_WORK_ITEM pRtWorkItem -); - -VOID -PlatformStopWorkItem( - PRT_WORK_ITEM pRtWorkItem -); - -VOID -PlatformFreeWorkItem( - PRT_WORK_ITEM pRtWorkItem -); - -BOOLEAN -PlatformScheduleWorkItem( - PRT_WORK_ITEM pRtWorkItem -); - -VOID -PlatformLeaveCallbackOfWorkItem( - PRT_WORK_ITEM pRtWorkItem -); - -BOOLEAN -PlatformIsWorkItemScheduled( - PRT_WORK_ITEM pRtWorkItem - ); - -u8Byte -PlatformGetCurrentTime( - VOID - ); - -VOID -_PlatformInitializeSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ); - -VOID -_PlatformFreeSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ); - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -VOID -_IRQL_raises_(DISPATCH_LEVEL) -_PlatformAcquireSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ); - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -VOID -_IRQL_requires_(DISPATCH_LEVEL) -_PlatformReleaseSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ); - -#define RtDbgInitSpinlock() -#define RtDbgDeinitSpinlock() -#define PlatformInitializeSpinLock(__Adapter, __Type) \ - _PlatformInitializeSpinLock(__Adapter, __Type) -#define PlatformAcquireSpinLock(__Adapter, __Type) \ - _PlatformAcquireSpinLock(__Adapter, __Type) -#define PlatformReleaseSpinLock(__Adapter, __Type) \ - _PlatformReleaseSpinLock(__Adapter, __Type) -#define PlatformFreeSpinLock(__Adapter, __Type) \ - _PlatformFreeSpinLock(__Adapter, __Type) - - -u4Byte -PlatformAtomicExchange( - pu4Byte target, - u4Byte newValue - ); - -u4Byte -PlatformAtomicAnd( - pu1Byte target, - u1Byte value - ); - -u4Byte -PlatformAtomicOr( - pu1Byte target, - u1Byte value - ); - -VOID -PlatformInitializeMutex( - IN PPlatformMutex Mutex - ); -VOID -PlatformAcquireMutex( - IN PPlatformMutex Mutex - ); -VOID -PlatformReleaseMutex( - IN PPlatformMutex Mutex - ); -#define RtDbgInitMutex() -#define RtDbgDeinitMutex() - - -VOID -PlatformIndicateMediaStatus( - PVOID Adapter, - RT_MEDIA_STATUS mstatus - ); - -RT_STATUS -PlatformIndicateCustomStatus( - IN PADAPTER pAdapter, - IN u4Byte event, - IN u4Byte target, - IN PVOID pInfoBuffer, - IN u4Byte InfoBruuferLen - ); - -RT_STATUS -PlatformIndicateActionFrame( - IN PADAPTER pAdapter, - IN PVOID posMpdu - ); - -VOID -PlatformIndicatePMWakeReason( - IN PADAPTER Adapter, - IN BOOLEAN bWakePacket, - IN pu1Byte pBuffer, - IN u2Byte BufferLen - ); - -VOID -PlatformSetCheckForHangTimer( - IN PADAPTER Adapter - ); - -VOID -PlatformHandleTKIPMICError( - IN PVOID Adapter, - IN BOOLEAN bMcstDest, - IN u1Byte Keyidx, - IN pu1Byte pSrcAddr - ); - -VOID -PlatformHandleNLOnScanCancel( - IN PVOID pvAdapter -); - -VOID -PlatformHandleNLOnScanComplete( - IN PVOID pvAdapter -); - -VOID -PlatformHandleNLOnScanRequest( - IN PVOID pvAdapter -); - - -VOID -PlatformHandlePwiseKeyUpdata( - IN PVOID Adapter -); - -VOID -PlatformRequestPreAuthentication( - PVOID Adapter, - PRE_AUTH_INDICATION_REASON Reason - ); - -RT_STATUS -PlatformReadFile( - IN PVOID Adapter, - IN ps1Byte szFileName, - IN OUT pu1Byte pBufOfLines, - IN s4Byte nMaxNumLine, - IN s4Byte nMaxByteCntLine, - OUT ps4Byte pnNumLines - ); - -RT_STATUS -PlatformOpenFile( - IN PVOID Adapter, - IN ps1Byte szFileName, - IN OUT PRT_FILE_HANDLER pFileHandler - ); - -RT_STATUS -PlatformMapFile( - IN OUT PRT_FILE_HANDLER pFileHandler - ); - -VOID -PlatformUnMapFile( - IN OUT PRT_FILE_HANDLER pFileHandler - ); - -VOID -PlatformCloseFile( - IN OUT PRT_FILE_HANDLER pFileHandler - ); - -RT_STATUS -PlatformReadAndMapFile( - IN PVOID Adapter, - IN ps1Byte szFileName, - IN OUT pu1Byte pOutFile, - IN OUT pu4Byte UNALIGNED pFileSize - ); - -BOOLEAN -PlatformIsTxQueueAvailable( - IN PADAPTER Adapter, - IN u1Byte QueueID, - IN u2Byte BufferCount); - -VOID -PlatformReleaseDataFrameQueued( - IN PADAPTER Adapter - ); - -BOOLEAN -PlatformSetPMCSR( - IN PADAPTER Adapter, - IN u1Byte value, - IN BOOLEAN bTempSetting - ); - -u4Byte -PlatformResetPciSpace( - IN PADAPTER Adapter, - IN u1Byte Value - ); - -BOOLEAN -PlatformSwitchClkReq( - IN PADAPTER Adapter, - IN u1Byte value - ); - -BOOLEAN -PlatformSwitchDevicePciASPM( - IN PADAPTER Adapter, - IN u1Byte value - ); - -VOID -PlatformSetPciConfiguration( - IN PADAPTER Adapter - ); - - -VOID -PlatformBackupPciCfgSpaceReg( - IN PADAPTER Adapter - ); - - -VOID -PlatformRestorePciCfgSpaceReg( - IN PADAPTER Adapter - ); - - -VOID -PlatformEnableASPM( - IN PADAPTER Adapter - ); - -VOID -PlatformDisableASPM( - IN PADAPTER Adapter - ); - -VOID -PlatformDbgYB( - IN PADAPTER Adapter, - IN u2Byte Offset - ); - - -// Strange function declared here!! -BOOLEAN -PlatformEnable92CEDMA64( - IN PADAPTER Adapter - ); - -VOID -PlatformSetPciPMEEnable( - IN PADAPTER Adapter - ); - -VOID -PlatformClearPciPMEStatus( - IN PADAPTER Adapter - ); - -u4Byte -PlatformEnableMSIHandler( - IN PADAPTER Adapter, - IN u1Byte Value - ); - -VOID -PlatformInitializeEvent( - IN PPlatformEvent pEvent - ); - -VOID -PlatformResetEvent( - IN PPlatformEvent pEvent - ); - -VOID -PlatformSetEvent( - IN PPlatformEvent pEvent - ); - -VOID -PlatformFreeEvent( - IN PPlatformEvent pEvent - ); - -BOOLEAN -PlatformWaitEvent( - IN PPlatformEvent pEvent, - IN u4Byte msToWait - ); - - -#define PlatformIndicateBTEvent(Adapter, pEvntData, dataLen) RT_STATUS_FAILURE -#define PlatformIndicateBTACLData(Adapter, pData, dataLen, EntryNum) RT_STATUS_FAILURE -#define PlatformProcessHCICommands(pContext) - -u8Byte -PlatformDivision64( - IN u8Byte x, - IN u8Byte y -); - -u8Byte -PlatformModular64( - IN u8Byte x, - IN u8Byte y -); - -VOID -PlatformEnableNetworkMonitorMode( - IN PADAPTER Adapter - ); - -VOID -PlatformDisableNetworkMonitorMode( - IN PADAPTER Adapter - ); - -VOID -PlatformSetFwPsClkOffEvent( - IN PADAPTER Adapter, - IN u1Byte SetEvent - ); - -RT_STATUS -PlatformInitializeThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_CALL_BACK CallBackFunc, - IN const char* szID, - IN BOOLEAN EventTriger, - IN u4Byte Period, - IN PVOID pContext - ); - -RT_STATUS -PlatformInitializeThreadEx( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_CALL_BACK CallBackFunc, - IN RT_THREAD_CALL_BACK PreThreadExitCb, - IN const char* szID, - IN BOOLEAN EventTriger, - IN u4Byte Period, - IN PVOID pContext - ); - -RT_STATUS -PlatformSetEventTrigerThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_LEVEL Priority, - IN PVOID pContext - ); - -VOID -PlatformSetEventToTrigerThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread -); - -VOID -PlatformWaitThreadEnd( - IN PADAPTER pAdapter, - IN PRT_THREAD pRtThread); - - -VOID -PlatformCancelThread( - IN PADAPTER pAdapter, - IN PRT_THREAD pRtThread); - -RT_STATUS -PlatformRunThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_LEVEL Priority, - IN PVOID pContext - ); - -VOID -PlatformReleaseThread( - IN PADAPTER pAdapter, - IN PRT_THREAD pRtThread); - - -#define SEMA_UPBND (0x7FFFFFFF) - -VOID -PlatformInitializeSemaphore( - IN PPlatformSemaphore Sema, - IN u4Byte InitCnt - ); - -RT_STATUS -PlatformAcquireSemaphore( - IN PPlatformSemaphore Sema - ); - -VOID -PlatformReleaseSemaphore( - IN PPlatformSemaphore Sema - ); - -VOID -PlatformFreeSemaphore( - IN PPlatformSemaphore Sema - ); - -VOID -PlatformCriticalSectionLeave( - IN PADAPTER pAdapter, - IN PPlatformMutex Mutex, - IN RT_SPINLOCK_TYPE Spinlock - ); -VOID -PlatformCriticalSectionEnter( - IN PADAPTER pAdapter, - IN PPlatformMutex Mutex, - IN RT_SPINLOCK_TYPE Spinlock - ); - -VOID -PlatformExtApSupport( - IN PADAPTER Adapter, - IN BOOLEAN bSupport - ); - -BOOLEAN -PlatformInitReady( - IN PADAPTER Adapter - ); - - -// -// The following Export SDIO Commands are for IO_RW_DIRECT Command (CMD52) -// and IO_RW_EXTENDED Command (CMD53) to read or write -// corresponding offset and data for specific device ID. -// 2010.12.23. -// -#define PlatformEFSdioCmd52Read1Byte(_a,_b,_c,_d) \ - PlatformSdioCmd52Read1Byte(_a,_b,_c,_d) -#define PlatformEFSdioCmd52Read2Byte(_a,_b,_c,_d) \ - EF2Byte(PlatformSdioCmd52Read2Byte(_a,_b,_c,_d)) -#define PlatformEFSdioCmd52Read4Byte(_a,_b,_c,_d) \ - EF4Byte(PlatformSdioCmd52Read4Byte(_a,_b,_c,_d)) -#define PlatformEFSdioCmd52Write1Byte(_a,_b,_c,_d,_e) \ - PlatformSdioCmd52Write1Byte(_a,_b,_c,_d,_e) -#define PlatformEFSdioCmd52Write2Byte(_a,_b,_c,_d,_e) \ - PlatformSdioCmd52Write2Byte(_a,_b,_c,EF2Byte(_d), _e) -#define PlatformEFSdioCmd52Write4Byte(_a,_b,_c,_d,_e) \ - PlatformSdioCmd52Write4Byte(_a,_b,_c,EF4Byte(_d),_e) -#define PlatformEFSdioCmd53Read1Byte(_a,_b,_c) \ - PlatformIORead1Byte(_a,_b,_c) -#define PlatformEFSdioCmd53Read2Byte(_a,_b,_c) \ - EF2Byte(PlatformIORead2Byte(_a,_b,_c)) -#define PlatformEFSdioCmd53Read4Byte(_a,_b,_c) \ - EF4Byte(PlatformIORead4Byte(_a,_b,_c)) -#define PlatformEFSdioCmd53ReadNByte(_a,_b,_c,_d,_e) \ - PlatformIOReadNByte(_a,_b,_c,_d,_e) -#define PlatformEFSdioCmd53Write1Byte(_a,_b,_c,_d) \ - PlatformIOWrite1Byte(_a,_b,_c,_d) -#define PlatformEFSdioCmd53Write2Byte(_a,_b,_c,_d) \ - PlatformIOWrite2Byte(_a,_b,_c,EF2Byte(_d)) -#define PlatformEFSdioCmd53Write4Byte(_a,_b,_c,_d) \ - PlatformIOWrite4Byte(_a,_b,_c,EF4Byte(_d)) - -// -// Use CMD52 to perform SDIO Local I/O Bus domain Read/Write for Function 1 space. -// -#define PlatformEFSdioLocalCmd52Read1Byte(_a,_b) \ - PlatformEFSdioCmd52Read1Byte(_a,SDIO_LOCAL_DEVICE_ID,1,_b) -#define PlatformEFSdioLocalCmd52Read2Byte(_a,_b) \ - PlatformEFSdioCmd52Read2Byte(_a,SDIO_LOCAL_DEVICE_ID,1,_b) -#define PlatformEFSdioLocalCmd52Read4Byte(_a,_b) \ - PlatformEFSdioCmd52Read4Byte(_a,SDIO_LOCAL_DEVICE_ID,1,_b) -#define PlatformEFSdioLocalCmd52Write1Byte(_a,_b,_c) \ - PlatformSdioCmd52Write1Byte(_a,SDIO_LOCAL_DEVICE_ID,1,_b,_c) -#define PlatformEFSdioLocalCmd52Write2Byte(_a,_b,_c) \ - PlatformSdioCmd52Write2Byte(_a,SDIO_LOCAL_DEVICE_ID,1,_b,EF2Byte(_c)) -#define PlatformEFSdioLocalCmd52Write4Byte(_a,_b,_c) \ - PlatformSdioCmd52Write4Byte(_a,SDIO_LOCAL_DEVICE_ID,1,_b,EF4Byte(_c)) - -// -// Use CMD53 to perform SDIO Local I/O Bus domain Read/Write for Function 1 space. -// We will NOT use CMD53 to access SDIO Function 0 space. -// -#define PlatformEFSdioLocalCmd53Read1Byte(_a,_b) \ - PlatformEFSdioCmd53Read1Byte(_a,SDIO_LOCAL_DEVICE_ID,_b) -#define PlatformEFSdioLocalCmd53Read2Byte(_a,_b) \ - PlatformEFSdioCmd53Read2Byte(_a,SDIO_LOCAL_DEVICE_ID,_b) -#define PlatformEFSdioLocalCmd53Read4Byte(_a,_b) \ - PlatformEFSdioCmd53Read4Byte(_a,SDIO_LOCAL_DEVICE_ID,_b) -#define PlatformEFSdioLocalCmd53ReadNByte(_a,_b,_c,_d) \ - PlatformEFSdioCmd53ReadNByte(_a,SDIO_LOCAL_DEVICE_ID,_b,_c,_d) -#define PlatformEFSdioLocalCmd53Write1Byte(_a,_b,_c) \ - PlatformEFSdioCmd53Write1Byte(_a,SDIO_LOCAL_DEVICE_ID,_b,_c) -#define PlatformEFSdioLocalCmd53Write2Byte(_a,_b,_c) \ - PlatformEFSdioCmd53Write2Byte(_a,SDIO_LOCAL_DEVICE_ID,_b,EF2Byte(_c)) -#define PlatformEFSdioLocalCmd53Write4Byte(_a,_b,_c) \ - PlatformEFSdioCmd53Write4Byte(_a,SDIO_LOCAL_DEVICE_ID,_b,EF4Byte(_c)) - -//20130422 KaiYuan add for 8814 available page read -#define PlatformEFMacLocalCmd53ReadNByte(_a,_b,_c,_d) \ - PlatformEFSdioCmd53ReadNByte(_a,WLAN_IOREG_DEVICE_ID,_b,_c,_d) - -u1Byte -PlatformSdioCmd52Read1Byte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset - ); - -u2Byte -PlatformSdioCmd52Read2Byte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset - ); - -u4Byte -PlatformSdioCmd52Read4Byte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset - ); - -VOID -PlatformSdioCmd52Write1Byte( - PVOID sAdapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset, - IN u1Byte data - ); - -VOID -PlatformSdioCmd52Write2Byte( - PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset, - IN u2Byte data - ); - -VOID -PlatformSdioCmd52Write4Byte( - PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset, - IN u4Byte data - ); - - - -// For P2P Platform-dependant Indication ------------------------------------ -VOID -PlatformIndicateP2PEvent( - PVOID pvP2PInfo, - u4Byte EventID, - PMEMORY_BUFFER pInformation -); - -// For Return TX pending packet case. -VOID -PlatformReturnAllPendingTxPackets( - IN PADAPTER pAdapter - ); - -// For Dual mac restore last init setting. -VOID -PlatformRestoreLastInitSetting( - IN PADAPTER pAdapter - ); - -BOOLEAN -PlatformIsOverrideAddress( - IN PADAPTER Adapter - ); - -pu1Byte -PlatformGetOverrideAddress( - IN PADAPTER Adapter - ); -//--------------------------------------------------------------------- - - -#endif // #ifndef __INC_PLATFORMDEF_H diff --git a/network/wlan/WDI/HEADER/PlatformSdio.h b/network/wlan/WDI/HEADER/PlatformSdio.h deleted file mode 100644 index 3ea24648..00000000 --- a/network/wlan/WDI/HEADER/PlatformSdio.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef __INC_PLATFORMSDIO_H -#define __INC_PLATFORMSDIO_H - -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - PlatformSdio.h - -Abstract: - Prototype of PlatformSdioXXX(). - Each platform shall implement the functions exported in - this file. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2010-12-20 Roger Create. - ---*/ - -//================================================================================ -// Prototype of functions to export. -//================================================================================ - -// -// SDIO Initialization and DeInitialization interfaces. -// - -// -// Bulk IN. -// -BOOLEAN -PlatformSdioInitInContext( - IN PADAPTER pAdapter, - IN PSDIO_IN_CONTEXT pContext - ); - -VOID -PlatformSdioDeInitInContext( - IN PADAPTER pAdapter, - IN PSDIO_IN_CONTEXT pContext - ); - - -// -// SDIO Tx Transfer -// -BOOLEAN -PlatformSdioInitTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -VOID -PlatformSdioDeInitTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -BOOLEAN -PlatformSdioTxEnqueue( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -PSDIO_OUT_CONTEXT -PlatformSdioTxDequeue( - IN PADAPTER pAdapter, - IN u1Byte QueueIdx - ); - -BOOLEAN -PlatformSdioTxTransfer( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ); - -BOOLEAN -PlatformSdioRxTransfer( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN u4Byte Rx0ReqLength - ); - -VOID -PlatformSdioEnableRxTransfer( - IN PADAPTER Adapter - ); - -VOID -PlatformSdioDisableRxTransfer( - IN PADAPTER Adapter - ); - -VOID -PlatformSdioEnableTxQueues( - IN PADAPTER Adapter - ); - -VOID -PlatformSdioDisableTxQueues( - IN PADAPTER Adapter - ); - -BOOLEAN -PlatformSdioTxQueueIdxEmpty( - IN PADAPTER Adapter, - IN u1Byte QueueID - ); - -BOOLEAN -PlatformSdioTxAndAwbQueueEmpty( - IN PADAPTER Adapter - ); - -VOID -PlatformSdioWaitAllSDReqComplete( - IN PADAPTER Adapter - ); - -VOID -PlatformSdioCancelSdReq( - PADAPTER Adapter -); - -#endif //#ifndef __INC_PLATFORMUSB_H diff --git a/network/wlan/WDI/HEADER/Precomp.h b/network/wlan/WDI/HEADER/Precomp.h deleted file mode 100644 index 9cc1195b..00000000 --- a/network/wlan/WDI/HEADER/Precomp.h +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef __INC_PRECOMP_H -#define __INC_PRECOMP_H - - -//========================= Platform OS version definition ============================// -// The following definitions come from the batch-file-created file. // -// #define RT_PLATFORM // -// #define OS_VERSION // -//=====================================================================================// -#include "GeneralDef.h" // Define the RT_PLATFORM and the OS_VERSION values -#include "platform-os-version.h" - -#define WPP_SOFTWARE_TRACE 1 -#define SOFTWARE_TRACE_LOGGING 1 - -//=====================================================================================// -// Common definitions // -//=====================================================================================// -#define DM_ODM_SUPPORT_TYPE 0x08 -#define DEV_BUS_TYPE RT_SDIO_INTERFACE - -#define DRV_LOG 1 - - -// Statistic -#define STATISTIC_SUPPORT 1 // counter caculate. - -// Auto Channel Select by NHM statistic -#define AUTO_CHNL_SEL_NHM 1 - -// Debug for Rockchip RK platform temporarily, this define shall be removed later -#define RK_PLATFORM_SUPPORT 0 - -// LE do not cache BSS List if this macro is 0, which is recommendation setting. -#define BSS_LIST_CACHE 0 - -// LE do not override BSS selection set by UE if this macro is 0, which is recommendation settting. -#define CONNECT_BSS_SELECTION_OVERRIDE 0 - -#ifndef ELIMINATE_THREAD_FOR_COMMAND_HANDLE -#define ELIMINATE_THREAD_FOR_COMMAND_HANDLE -#endif - -// only turn on this flag when driver capable to detect FW stall -#define ALLOW_INDICATE_FW_STALL 0 - -#define REMOVE_PACK 1 -#define DFS_SUPPORT 1 -#define DFS_SUPPORT_STA_MODE 1 - -#define P2P_SUPPORT 1 -#define WPS_SUPPORT 1 - - -#define MUTIPLE_BULK_OUT - -#define TX_AGGREGATION 1 // For Tx Aggregation -#define RX_AGGREGATION 1 // For Rx Aggregation - -#define RTL8723_SDIO_IO_THREAD_ENABLE 1 - - -#define MULTIPORT_SUPPORT 1 -#define MULTICHANNEL_SUPPORT 1 - -#define SUPPORT_SDIO_BUS_SPEED_SDR25 1 // For Intel Baytrail option. SDR25 = 50MHz. - -#define NDIS650 1 // WDK Check Definition -#define WDI_SUPPORT 1 - - -//================================= End of Others section =============================// -#include "PrecompInc_sample.h" -#endif // #ifndef __INC_PRECOMP_H diff --git a/network/wlan/WDI/HEADER/Precomp.h.WlanS.sample b/network/wlan/WDI/HEADER/Precomp.h.WlanS.sample deleted file mode 100644 index 060d9e3f..00000000 --- a/network/wlan/WDI/HEADER/Precomp.h.WlanS.sample +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef __INC_PRECOMP_H -#define __INC_PRECOMP_H - - -//========================= Platform OS version definition ============================// -// The following definitions come from the batch-file-created file. // -// #define RT_PLATFORM // -// #define OS_VERSION // -//=====================================================================================// -#include "GeneralDef.h" // Define the RT_PLATFORM and the OS_VERSION values -#include "platform-os-version.h" - -#define WPP_SOFTWARE_TRACE 1 -#define SOFTWARE_TRACE_LOGGING 1 - -//=====================================================================================// -// Common definitions // -//=====================================================================================// -#define DM_ODM_SUPPORT_TYPE 0x08 -#define DEV_BUS_TYPE RT_SDIO_INTERFACE - -#define DRV_LOG 1 - - -// Statistic -#define STATISTIC_SUPPORT 1 // counter caculate. - -// Auto Channel Select by NHM statistic -#define AUTO_CHNL_SEL_NHM 1 - -// Debug for Rockchip RK platform temporarily, this define shall be removed later -#define RK_PLATFORM_SUPPORT 0 - -// LE do not cache BSS List if this macro is 0, which is recommendation setting. -#define BSS_LIST_CACHE 0 - -// LE do not override BSS selection set by UE if this macro is 0, which is recommendation settting. -#define CONNECT_BSS_SELECTION_OVERRIDE 0 - -#ifndef ELIMINATE_THREAD_FOR_COMMAND_HANDLE -#define ELIMINATE_THREAD_FOR_COMMAND_HANDLE -#endif - - -#define REMOVE_PACK 1 -#define DFS_SUPPORT 1 -#define DFS_SUPPORT_STA_MODE 1 - -#define P2P_SUPPORT 1 -#define WPS_SUPPORT 1 - - -#define MUTIPLE_BULK_OUT - -#define TX_AGGREGATION 1 // For Tx Aggregation -#define RX_AGGREGATION 1 // For Rx Aggregation - -#define RTL8723_SDIO_IO_THREAD_ENABLE 1 - - -#define MULTIPORT_SUPPORT 1 -#define MULTICHANNEL_SUPPORT 1 - -#define SUPPORT_SDIO_BUS_SPEED_SDR25 1 // For Intel Baytrail option. SDR25 = 50MHz. - -#define NDIS650 1 // WDK Check Definition -#define WDI_SUPPORT 1 - - -//================================= End of Others section =============================// -#include "PrecompInc_sample.h" -#endif // #ifndef __INC_PRECOMP_H diff --git a/network/wlan/WDI/HEADER/PrecompInc_sample.h b/network/wlan/WDI/HEADER/PrecompInc_sample.h deleted file mode 100644 index f4419080..00000000 --- a/network/wlan/WDI/HEADER/PrecompInc_sample.h +++ /dev/null @@ -1,358 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - PrecompInc.h - -Abstract: - Header fils to include. Note that, this file is only intend to - be included by Precomp.h - -Major Change History: - When Who What - ---------- ------ ---------------------------------------------- - 2006-09-26 Rcnjko Created - 2006-11-06 Rcnjko Add bus concept. - 2010-12-17 Roger Add SDIO bus related header included requirements. - -Notes: - ---*/ - -#ifndef __INC_PRECOMPINC_H -#define __INC_PRECOMPINC_H - -// -// Common defintion for every platform. -// -#define WPA2 1 - -#ifdef DBG -#undef WPP_SOFTWARE_TRACE -#define WPP_SOFTWARE_TRACE 0 -#endif - - -#ifndef DBG_CMD - #define DBG_CMD 1 -#endif -//============================================= - -// -// Header files required by PlatformDef.h. -// -#include "GeneralDef.h" -#include "LinkList.h" -#include "StatusCode.h" -#include "Object.h" -#include "HashTable.h" - - -//Isaiah for MacOS -#ifndef _MACHINE_ENDIAN_H -#define __MACHINE_LITTLE_ENDIAN 1234 /* LSB first: i386, vax */ -#define __MACHINE_BIG_ENDIAN 4321 /* MSB first: 68000, ibm, net, ppc */ -#define __MACHINE_PDP_ENDIAN 3412 /* LSB first in word, MSW first in long */ - -#endif /* _MACHINE_ENDIAN_H */ - - -#define INTEL_WIDI_SUPPORT 0 - -// -// Platform dependent header files. -// - #ifndef BYTE_ORDER - #define BYTE_ORDER __MACHINE_LITTLE_ENDIAN - #endif - - #define USE_WORKITEM 1 - - // This flag shall only be turned on for DTM testing. - #define POWER_MAN 1 - - #define VISTA_USB_TEMP 0 - #define USE_WDF_SDIO 0 - #define N6_FAKE_AP_MODE 1 // 061229, rcnjko: Make Native WiFi IM driver to take us an IBSS when we are working at AP mode. - - - #define POWER_MAN 1 - - // - // For SDIO compilation consideration, we should incluede system initguid.h header first before ntddsd.h is included - // to prevent unresolved external symbol _GUID_SDBUS_INTERFACE_STANDARD error occurs in linking process. - // 2012.01.17. - // - #include - #include - #include - - #include // defined in wdk - #include // defined in wdk - #include // defined in wdk - - #include - #include - #include - #include - #include - #include - - #include "N6C_PlatformDef.h" - #include "PlatformDef.h" - #include "NdisComm.h" - #include "NdisDbg.h" - #include "NdisOid.h" - - #include "N6Sdio_dbg.h" - #include "N6Sdio_typedef.h" - #include "N6SdioPlatformWindows.h" - #include "N6Sdio_info.h" - #include "N6Sdio_main.h" - #include "CCX_Extension.h" - #include "CCX_Predef.h" - #include "Ndis6Common.h" - #include "N6C_Init.h" - #include "N6C_Req.h" - #include "N6C_OidQuery.h" - #include "N6C_OidSet.h" - #include "N6C_Oids.h" - #include "WDI_Common.h" - - #include "ntintsafe.h" - #include "N62C_def.h" - #include "N62C_Init.h" - #include "N62C_Port.h" - #include "N62C_QueryOid.h" - #include "N62C_SetOid.h" - #include "N62C_Oids.h" - #include "N62C_QuerySetOid.h" - #include "N62C_AP_Def.h" - #include "N62C_AP.h" - - #include "N63C_SendAction.h" - #include "N63C_Oids.h" - - - #include "WDI_def.h" - #include "N6Sdio_WdiMain.h" - #include "WDI_SendAction.h" - #include "WDI_Cmds.h" - #include "WDI_Extension.h" - #include "WDI_Xlat.h" - - - #include "Ndis_OID.h" - - #include - -#define MS_SUPPORT 0 - - -// -// Platform indenpent header files. -// - -#include "ActionTimer.h" -#include "Protocol802_11.h" -#include "Wapi.h" -#include "ChannelType.h" -#include "ChannelInfo.h" -#include "HTType.h" -#include "Dot11d.h" -#include "Ethernet.h" -#include "GeneralFunc.h" -#include "EndianFree.h" -#include "HalDef.h" -#include "HalTxFeedback.h" -#include "HalMacID.h" -#include "SecurityType.h" -#include "QoSType.h" -//#include "BT.h" -#include "RtChnlPlan.h" -#include "Frame_Buf.h" -#include "Pool.h" -#include "CustomizedScan.h" -#include "OffChnlTx.h" -#include "P2P_AdditionalIe.h" -#include "P2P_TempPublic.h" -#include "P2P.h" -#include "P2P_Public.h" -#include "P2PSvc.h" -#include "Hotspot20.h" -#include "DrvLogImp.h" -#include "MimoPs.h" -#include "BAType.h" -#include "TDLSType.h" -#include "TSType.h" -#include "BAGen.h" -#include "TDLSGen.h" -#include "TcpCheck.h" -#include "TCPOFFLOAD_Typt.h" -//#include "IntelClassRoom.h" -#include "MultiPorts.h" -#include "MultiChannels.h" -#include "WPS.h" -#include "VHTGen.h" -#include "Debug.h" -#include "DbgMon.h" -#include "UsbModeSwitch.h" -#include "DFS.h" -#include "SMBios.h" -#include "TypeDef.h" -#include "HalEfuse.h" -//#include "TxShortcut.h" -//#include "RxShortcut.h" -#include "HTGen.h" -#include "AMSDU_Aggregation.h" -#include "TSGen.h" -#include "Widi.h" -#include "WiDiType.h" -#include "Debug.h" -#include "HalEEPROM.h" - -#include "HalPG.h" -#include "QosGen.h" -#include "DriverInterfaceDef.h" -#include "TransmitDesc.h" -#include "Transmit.h" -#include "Receive.h" -#include "MgntGen.h" -#include "MgntConstructPacket.h" -#include "MgntSendPacket.h" -#include "MgntLink.h" -#include "MgntEngine.h" -#include "Defrag.h" -#include "SecurityGen.h" -#include "RC4.h" -#include "ApEngine.h" -#include "Authenticator.h" -#include "IOTGen.h" - -#include "MgntActQueryParam.h" -#include "MgntActSetParam.h" -#include "HalCam.h" - -#include "1x_rc4.h" -#include "1x_md5c.h" -#include "1x_kmsm_eapolkey.h" -#include "1x_eapol.h" - -#include "RmDef.h" -#include "RadioMeasurement.h" - -#include "ROGUEAP.h" - -#include "PowerSave.h" - -#include "DbgCmd.h" - -#include "CcxType.h" -#include "CcxGen.h" -#include "BssCoexistence.h" -#include "AES_OCB.h" -#include "AES_rijndael.h" -#include "Supplicant.h" -#include "TCPOFFLOADGen.h" -#include "RxReorder.h" - -#include "ParserGen.h" - -#include "WOLPattern.h" - -#include "sha256.h" -#include "Dot11RAES.h" - -#include "HalSIC.h" -#include "HalPwrSeqCmd.h" -#include "HalFw.h" - -#include "HalPhy.h" - -#include "phydm_precomp.h" -#include "phydm.h" - - -#include "HalComDef.h" -#include "HalComDesc.h" -#include "HalComPhyCfg.h" -#include "HalComTxPwrCfg.h" -#include "HalComTxPwrLmtCfg.h" -#include "HalADCSampling.h" - - -#include "HalComLed.h" -#include "HalComReg.h" -#include "HalComFirmware.h" -#include "HalPowerSave.h" -#include "HalWoWLAN.h" -#include "HalH2cIOCmd.h" - -#include "HalIcGlue.h" - -#if (RTL8723B_SUPPORT == 1) -#include "Hal8723BEfuse.h" -#include "Hal8723BPhyCfg.h" -#include "Hal8723BPhyReg.h" -#include "Hal8723BPwrSeq.h" -#include "Hal8723BDesc.h" -#include "Hal8723BDefCom.h" -#include "Hal8723BFirmware.h" -#include "Hal8723BRf.h" - - #include "Hal8723BSdioLed.h" - #include "Hal8723BSdioDef.h" - -#endif - -#include "HalJaguarPhyReg.h" - - - - -// -// Hal Bus dependent. -// -// How about rtl8192S series ?? -// For ODM structure, we need to move HAL interace.h to lower position. Because -// it need to use odm structure declared in odm.h -// - - #include "PlatformSdio.h" - - -#include "HalHWImg.h" -#include "HalDM.h" -#include "halCmdPkt.h" -#include "halDbgCmd.h" - - -#include "HalSdio.h" - - - -#include "HalPhyRf_WIN.h" -//#include "HalPhyRf_8188e_WIN.h" -//#include "HalPhyRf_8812A_WIN.h" -//#include "HalPhyRf_8821A_WIN.h" -//#include "HalPhyRf_8821B.h" -//#include "HalPhyRf_8192e_WIN.h" -//#include "HalPhyRf_8814a_WIN.h" -#include "HalPhyRf_8723B_WIN.h" -//#include "HalPhyRf_8703B.h" -//#include "HalPhyRf_8723D.h" - - -#include "phydm_debug.h" - -#if SOFTWARE_TRACE_LOGGING -//TraceLogging -#include -#include - -TRACELOGGING_DECLARE_PROVIDER(g_hProvider); -#endif - - -#endif //end of #ifndef __INC_PRECOMPINC_H diff --git a/network/wlan/WDI/HEADER/QoSType.h b/network/wlan/WDI/HEADER/QoSType.h deleted file mode 100644 index 1229305f..00000000 --- a/network/wlan/WDI/HEADER/QoSType.h +++ /dev/null @@ -1,691 +0,0 @@ -#ifndef __INC_QOS_TYPE_H -#define __INC_QOS_TYPE_H - - -#define MAX_WMMELE_LENGTH 64 - -typedef u4Byte QOS_MODE, *PQOS_MODE; -#define QOS_DISABLE 0 -#define QOS_WMM 1 -#define QOS_WMMSA 2 -#define QOS_EDCA 4 -#define QOS_HCCA 8 -#define QOS_WMM_UAPSD 16 //WMM Power Save, 2006-06-14 Isaiah - -#define WMM_PARAM_ELE_BODY_LEN 18 - -#define MAX_STA_TS_COUNT 16 -#define MAX_AP_TS_COUNT 32 -#define QOS_TSTREAM_KEY_SIZE 13 // 1-byte TID | 6-byte RA | 6-byte TA - -#define WMM_ACTION_CATEGORY_CODE 17 -#define WMM_PARAM_ELE_BODY_LEN 18 - -// -// TSID definition. -// Write your own specific TSID here. TSID 0~15 is Qos specific. -// -#define MAX_TSPEC_TSID 15 -#define SESSION_REJECT_TSID 0xfe -#define DEFAULT_TSID 0xff - -#define ADDTS_TIME_SLOT 100 // Time interval of per ADDTS reuest - -#define ACM_TIMEOUT 1000 // Time interval of ACM update -#define SESSION_REJECT_TIMEOUT 60000 - -// -// QoS ACK Policy Field Values -// Ref: WMM spec 2.1.6: QoS Control Field, p.10. -// -typedef enum _ACK_POLICY{ - eAckPlc0_ACK = 0x00, - eAckPlc1_NoACK = 0x01, -}ACK_POLICY,*PACK_POLICY; - -#define FRAME_OFFSET_QOS_CTRL(_pStart) (24 + 6*GET_80211_HDR_FROM_DS(_pStart)*GET_80211_HDR_TO_DS(_pStart)) - -#define GET_QOS_CTRL(_pStart) ReadEF2Byte((pu1Byte)(_pStart) + FRAME_OFFSET_QOS_CTRL(_pStart)) -#define SET_QOS_CTRL(_pStart, _value) WriteEF2Byte((pu1Byte)(_pStart) + FRAME_OFFSET_QOS_CTRL(_pStart), _value) - -// WMM control field. -#define GET_QOS_CTRL_WMM_UP(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 3)) -#define SET_QOS_CTRL_WMM_UP(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 3, (u1Byte)(_value)) - -#define GET_QOS_CTRL_WMM_EOSP(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1)) -#define SET_QOS_CTRL_WMM_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1, (u1Byte)(_value)) - -#define GET_QOS_CTRL_WMM_ACK_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2)) -#define SET_QOS_CTRL_WMM_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2, (u1Byte)(_value)) - -// 802.11e control field (by STA, data) -#define GET_QOS_CTRL_STA_DATA_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 4)) -#define SET_QOS_CTRL_STA_DATA_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 4, (u1Byte)(_value)) - -#define GET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1)) -#define SET_QOS_CTRL_STA_DATA_QSIZE_FLAG(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1, (u1Byte)(_value)) - -#define GET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2)) -#define SET_QOS_CTRL_STA_DATA_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2, (u1Byte)(_value)) - -#define GET_QOS_CTRL_STA_DATA_AMSDU(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 7, 1)) -#define SET_QOS_CTRL_STA_DATA_AMSDU(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 7, 1, (u1Byte)(_value)) - -#define GET_QOS_CTRL_STA_DATA_TXOP(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 8, 8)) -#define SET_QOS_CTRL_STA_DATA_TXOP(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 8, 8, (u1Byte)(_value)) - -#define GET_QOS_CTRL_STA_DATA_QSIZE(_pStart) GET_QOS_CTRL_STA_DATA_TXOP(_pStart) -#define SET_QOS_CTRL_STA_DATA_QSIZE(_pStart, _value) SET_QOS_CTRL_STA_DATA_TXOP(_pStart) - -// 802.11e control field (by HC, data) -#define GET_QOS_CTRL_HC_DATA_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 4)) -#define SET_QOS_CTRL_HC_DATA_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 4, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_DATA_EOSP(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1)) -#define SET_QOS_CTRL_HC_DATA_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2)) -#define SET_QOS_CTRL_HC_DATA_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 8, 8)) -#define SET_QOS_CTRL_HC_DATA_PS_BUFSTATE(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 8, 8, (u1Byte)(_value)) - -// 802.11e control field (by HC, CFP) -#define GET_QOS_CTRL_HC_CFP_TID(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 4)) -#define SET_QOS_CTRL_HC_CFP_TID(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 0, 4, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_CFP_EOSP(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1)) -#define SET_QOS_CTRL_HC_CFP_EOSP(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 4, 1, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2)) -#define SET_QOS_CTRL_HC_CFP_ACK_POLICY(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 5, 2, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_CFP_USRSVD(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 7, 1)) -#define SET_QOS_CTRL_HC_CFP_USRSVD(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 7, 1, (u1Byte)(_value)) - -#define GET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart) ((u1Byte)LE_BITS_TO_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 8, 8)) -#define SET_QOS_CTRL_HC_CFP_TXOP_LIMIT(_pStart, _value) SET_BITS_TO_LE_2BYTE((pu1Byte)(_pStart)+FRAME_OFFSET_QOS_CTRL(_pStart), 8, 8, (u1Byte)(_value)) - - - - -#define SET_WMM_QOS_INFO_FIELD(_pStart, _val) WriteEF1Byte(_pStart, _val) - -#define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 4) -#define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val) - -#define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 7, 1) -#define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 1, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 2, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 3, 1) -#define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val) - -#define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) LE_BITS_TO_1BYTE(_pStart, 5, 2) -#define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val) - - -#define WMM_INFO_ELEMENT_SIZE 7 - -#define GET_WMM_INFO_ELE_OUI(_pStart) ((pu1Byte)(_pStart)) -#define SET_WMM_INFO_ELE_OUI(_pStart, _pVal) PlatformMoveMemory(_pStart, _pVal, 3); - -#define GET_WMM_INFO_ELE_OUI_TYPE(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+3) ) ) -#define SET_WMM_INFO_ELE_OUI_TYPE(_pStart, _val) ( *((pu1Byte)(_pStart)+3) = EF1Byte(_val) ) - -#define GET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+4) ) ) -#define SET_WMM_INFO_ELE_OUI_SUBTYPE(_pStart, _val) ( *((pu1Byte)(_pStart)+4) = EF1Byte(_val) ) - -#define GET_WMM_INFO_ELE_VERSION(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+5) ) ) -#define SET_WMM_INFO_ELE_VERSION(_pStart, _val) ( *((pu1Byte)(_pStart)+5) = EF1Byte(_val) ) - -#define GET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+6) ) ) -#define SET_WMM_INFO_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((pu1Byte)(_pStart)+6) = EF1Byte(_val) ) - -// WMM TSPEC Element content -#define CLEAR_TSPEC(_tspec) ( PlatformZeroMemory((_tspec), TSPEC_SIZE) ) - -#define GET_TSPEC_ID(_tspec) EF1Byte( (_tspec)[0] ) -#define SET_TSPEC_ID(_tspec, _value) ( (_tspec)[0] = EF1Byte(_value) ) - -#define GET_TSPEC_LENGTH(_tspec) EF1Byte( (_tspec)[1] ) -#define SET_TSPEC_LENGTH(_tspec, _value) ( (_tspec)[1] = EF1Byte(_value) ) - -#define GET_TSPEC_OUI(_tspec, _value) \ - { (_value)[0]=(_tspec)[2]; (_value)[1]=(_tspec)[3]; (_value)[2]=(_tspec)[4]; } -#define SET_TSPEC_OUI(_tspec, _value) \ - { (_tspec)[2]=(_value)[0]; (_tspec)[3]=(_value)[1]; (_tspec)[4]=(_value)[2]; } - -#define GET_TSPEC_OUI_TYPE(_tspec) EF1Byte( (_tspec)[5] ) -#define SET_TSPEC_OUI_TYPE(_tspec, _value) ( (_tspec)[5] = EF1Byte(_value) ) - -#define GET_TSPEC_OUI_SUBTYPE(_tspec) EF1Byte( (_tspec)[6] ) -#define SET_TSPEC_OUI_SUBTYPE(_tspec, _value) ( (_tspec)[6] = EF1Byte(_value) ) - -#define GET_TSPEC_VERSION(_tspec) EF1Byte( (_tspec)[7] ) -#define SET_TSPEC_VERSION(_tspec, _value) ( (_tspec)[7] = EF1Byte(_value) ) - - -#define GET_TSPEC_TSINFO_TRAFFIC_TYPE(_tspec) LE_BITS_TO_1BYTE( (_tspec)+8, 0, 1) -#define SET_TSPEC_TSINFO_TRAFFIC_TYPE(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+8, 0, 1, (_value) ) - -#define GET_TSPEC_TSINFO_TSID(_tspec) LE_BITS_TO_1BYTE( (_tspec)+8, 1, 4) -#define SET_TSPEC_TSINFO_TSID(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+8, 1, 4, (_value) ) - -#define GET_TSPEC_TSINFO_DIRECTION(_tspec) LE_BITS_TO_1BYTE( (_tspec)+8, 5, 2) -#define SET_TSPEC_TSINFO_DIRECTION(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+8, 5, 2, (_value) ) - -#define GET_TSPEC_TSINFO_ACCESS_POLICY_BIT0(_tspec) LE_BITS_TO_1BYTE( (_tspec)+8, 7, 1) -#define SET_TSPEC_TSINFO_ACCESS_POLICY_BIT0(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+8, 7, 1, (_value) ) - - -#define GET_TSPEC_TSINFO_ACCESS_POLICY_BIT1(_tspec) LE_BITS_TO_1BYTE( (_tspec)+9, 0, 1) -#define SET_TSPEC_TSINFO_ACCESS_POLICY_BIT1(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+9, 0, 1, (_value) ) - -#define GET_TSPEC_TSINFO_AGGREGATION(_tspec) LE_BITS_TO_1BYTE( (_tspec)+9, 1, 1) -#define SET_TSPEC_TSINFO_AGGREGATION(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+9, 1, 1, (_value) ) - -#define GET_TSPEC_TSINFO_PSB(_tspec) LE_BITS_TO_1BYTE( (_tspec)+9, 2, 1) -#define SET_TSPEC_TSINFO_PSB(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+9, 2, 1, (_value) ) - -#define GET_TSPEC_TSINFO_UP(_tspec) LE_BITS_TO_1BYTE( (_tspec)+9, 3, 3) -#define SET_TSPEC_TSINFO_UP(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+9, 3, 3, (_value) ) - -#define GET_TSPEC_TSINFO_ACK_POLICY(_tspec) LE_BITS_TO_1BYTE( (_tspec)+9, 6, 2) -#define SET_TSPEC_TSINFO_ACK_POLICY(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+9, 6, 2, (_value) ) - - -#define GET_TSPEC_TSINFO_SCHEDULE(_tspec) LE_BITS_TO_1BYTE( (_tspec)+10, 0, 1) -#define SET_TSPEC_TSINFO_SCHEDULE(_tspec, _value) SET_BITS_TO_LE_1BYTE( (_tspec)+10, 0, 1, (_value) ) - - -#define GET_TSPEC_NOMINAL_MSDU_SIZE(_tspec) LE_BITS_TO_2BYTE( (_tspec)+11, 0, 16) -#define SET_TSPEC_NOMINAL_MSDU_SIZE(_tspec, _value) SET_BITS_TO_LE_2BYTE( (_tspec)+11, 0, 16, (_value) ) - -#define GET_TSPEC_MAX_MSDU_SIZE(_tspec) LE_BITS_TO_2BYTE( (_tspec)+13, 0, 16) -#define SET_TSPEC_MAX_MSDU_SIZE(_tspec, _value) SET_BITS_TO_LE_2BYTE( (_tspec)+13, 0, 16, (_value) ) - -#define GET_TSPEC_MIN_SERVICE_INTERVAL(_tspec) LE_BITS_TO_4BYTE( (_tspec)+15, 0, 32) -#define SET_TSPEC_MIN_SERVICE_INTERVAL(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+15, 0, 32, (_value) ) - -#define GET_TSPEC_MAX_SERVICE_INTERVAL(_tspec) LE_BITS_TO_4BYTE( (_tspec)+19, 0, 32) -#define SET_TSPEC_MAX_SERVICE_INTERVAL(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+19, 0, 32, (_value) ) - -#define GET_TSPEC_INACTIVITY_INTERVAL(_tspec) LE_BITS_TO_4BYTE( (_tspec)+23, 0, 32) -#define SET_TSPEC_INACTIVITY_INTERVAL(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+23, 0, 32, (_value) ) - -#define GET_TSPEC_SUSPENSION_INTERVAL(_tspec) LE_BITS_TO_4BYTE( (_tspec)+27, 0, 32) -#define SET_TSPEC_SUSPENSION_INTERVAL(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+27, 0, 32, (_value) ) - -#define GET_TSPEC_SERVICE_START_TIME(_tspec) LE_BITS_TO_4BYTE( (_tspec)+31, 0, 32) -#define SET_TSPEC_SERVICE_START_TIME(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+31, 0, 32, (_value) ) - -#define GET_TSPEC_MIN_DATA_RATE(_tspec) LE_BITS_TO_4BYTE( (_tspec)+35, 0, 32) -#define SET_TSPEC_MIN_DATA_RATE(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+35, 0, 32, (_value) ) - -#define GET_TSPEC_MEAN_DATA_RATE(_tspec) LE_BITS_TO_4BYTE( (_tspec)+39, 0, 32) -#define SET_TSPEC_MEAN_DATA_RATE(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+39, 0, 32, (_value) ) - -#define GET_TSPEC_PEAK_DATA_RATE(_tspec) LE_BITS_TO_4BYTE( (_tspec)+43, 0, 32) -#define SET_TSPEC_PEAK_DATA_RATE(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+43, 0, 32, (_value) ) - -#define GET_TSPEC_MAX_BURST_SIZE(_tspec) LE_BITS_TO_4BYTE( (_tspec)+47, 0, 32) -#define SET_TSPEC_MAX_BURST_SIZE(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+47, 0, 32, (_value) ) - -#define GET_TSPEC_DELAY_BOUND(_tspec) LE_BITS_TO_4BYTE( (_tspec)+51, 0, 32) -#define SET_TSPEC_DELAY_BOUND(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+51, 0, 32, (_value) ) - -#define GET_TSPEC_MIN_PHY_RATE(_tspec) LE_BITS_TO_4BYTE( (_tspec)+55, 0, 32) -#define SET_TSPEC_MIN_PHY_RATE(_tspec, _value) SET_BITS_TO_LE_4BYTE( (_tspec)+55, 0, 32, (_value) ) - -#define GET_TSPEC_SURPLUS_BANDWITH_ALLOWANCE(_tspec) LE_BITS_TO_2BYTE( (_tspec)+59, 0, 16) -#define SET_TSPEC_SURPLUS_BANDWITH_ALLOWANCE(_tspec, _value) SET_BITS_TO_LE_2BYTE( (_tspec)+59, 0, 16, (_value) ) - -#define GET_TSPEC_MEDIUM_TIME(_tspec) LE_BITS_TO_2BYTE( (_tspec)+61, 0, 16) -#define SET_TSPEC_MEDIUM_TIME(_tspec, _value) SET_BITS_TO_LE_2BYTE( (_tspec)+61, 0, 16, (_value) ) - -#define GET_TSPEC_TSINFO_ACCESS_POLICY(_tspec) \ - ( (GET_TSPEC_TSINFO_ACCESS_POLICY_BIT1(_tspec) << 1) | GET_TSPEC_TSINFO_ACCESS_POLICY_BIT0(_tspec) ) -#define SET_TSPEC_TSINFO_ACCESS_POLICY(_tspec, _value) \ - {\ - SET_TSPEC_TSINFO_ACCESS_POLICY_BIT0((_tspec), (_value)&0x01);\ - SET_TSPEC_TSINFO_ACCESS_POLICY_BIT1((_tspec), (_value)&0x02);\ - } - - -// TS Info of the WMM TSPEC Body -#define GET_TSINFO_TRAFFIC_TYPE(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo), 0, 1) -#define SET_TSINFO_TRAFFIC_TYPE(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo), 0, 1, (_value) ) - -#define GET_TSINFO_TSID(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo), 1, 4) -#define SET_TSINFO_TSID(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo), 1, 4, (_value) ) - -#define GET_TSINFO_DIRECTION(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo), 5, 2) -#define SET_TSINFO_DIRECTION(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo), 5, 2, (_value) ) - -#define GET_TSINFO_ACCESS_POLICY_BIT0(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo), 7, 1) -#define SET_TSINFO_ACCESS_POLICY_BIT0(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo), 7, 1, (_value) ) - - -#define GET_TSINFO_ACCESS_POLICY_BIT1(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo) + 1, 0, 1) -#define SET_TSINFO_ACCESS_POLICY_BIT1(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo) + 1, 0, 1, (_value) ) - -#define GET_TSINFO_AGGREGATION(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo) + 1, 1, 1) -#define SET_TSINFO_AGGREGATION(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo) + 1, 1, 1, (_value) ) - -#define GET_TSINFO_PSB(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo) + 1, 2, 1) -#define SET_TSINFO_PSB(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo) + 1, 2, 1, (_value) ) - -#define GET_TSINFO_UP(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo) + 1, 3, 3) -#define SET_TSINFO_UP(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo) + 1, 3, 3, (_value) ) - -#define GET_TSINFO_ACK_POLICY(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo) + 1, 6, 2) -#define SET_TSINFO_ACK_POLICY(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo) + 1, 6, 2, (_value) ) - -#define GET_TSINFO_SCHEDULE(_tsinfo) LE_BITS_TO_1BYTE( (_tsinfo) + 2, 0, 1) -#define SET_TSINFO_SCHEDULE(_tsinfo, _value) SET_BITS_TO_LE_1BYTE( (_tsinfo) + 2, 0, 1, (_value) ) - - -#define QOS_RATE_TO_BPS(_rate) ( (u4Byte)( ((_rate)*1000*1000)/2 ) ) -#define QOS_BPS_TO_RATE(_bps) ( (u1Byte)( ((_bps) * 2)/(1000*1000))) - - - -typedef enum { - QOSIE_SRC_ADDTSREQ, - QOSIE_SRC_ADDTSRSP, - QOSIE_SRC_REASOCREQ, - QOSIE_SRC_REASOCRSP, - QOSIE_SRC_DELTS, -} QOSIE_SOURCE; - - -typedef u4Byte AC_CODING; -#define AC0_BE 0 // ACI: 0x00 // Best Effort -#define AC1_BK 1 // ACI: 0x01 // Background -#define AC2_VI 2 // ACI: 0x10 // Video -#define AC3_VO 3 // ACI: 0x11 // Voice -#define AC_MAX 4 // Max: define total number; Should not to be used as a real enum. - - -#define AC_PARAM_SIZE 4 - -#define GET_WMM_AC_PARAM_AIFSN(_pStart) ( (u1Byte)LE_BITS_TO_4BYTE(_pStart, 0, 4) ) -#define SET_WMM_AC_PARAM_AIFSN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val) - -#define GET_WMM_AC_PARAM_ACM(_pStart) ( (u1Byte)LE_BITS_TO_4BYTE(_pStart, 4, 1) ) -#define SET_WMM_AC_PARAM_ACM(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val) - -#define GET_WMM_AC_PARAM_ACI(_pStart) ( (u1Byte)LE_BITS_TO_4BYTE(_pStart, 5, 2) ) -#define SET_WMM_AC_PARAM_ACI(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val) - -#define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart) ( (u1Byte)LE_BITS_TO_4BYTE(_pStart, 0, 8) ) -#define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 0, 8, _val) - -#define GET_WMM_AC_PARAM_ECWMIN(_pStart) ( (u1Byte)LE_BITS_TO_4BYTE(_pStart, 8, 4) ) -#define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val) - -#define GET_WMM_AC_PARAM_ECWMAX(_pStart) ( (u1Byte)LE_BITS_TO_4BYTE(_pStart, 12, 4) ) -#define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val) - -#define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart) ( (u2Byte)LE_BITS_TO_4BYTE(_pStart, 16, 16) ) -#define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val) - - - -#define WMM_PARAM_ELEMENT_SIZE (8+(4*AC_PARAM_SIZE)) - -#define GET_WMM_PARAM_ELE_OUI(_pStart) ((pu1Byte)(_pStart)) -#define SET_WMM_PARAM_ELE_OUI(_pStart, _pVal) PlatformMoveMemory(_pStart, _pVal, 3) - -#define GET_WMM_PARAM_ELE_OUI_TYPE(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+3) ) ) -#define SET_WMM_PARAM_ELE_OUI_TYPE(_pStart, _val) ( *((pu1Byte)(_pStart)+3) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+4) ) ) -#define SET_WMM_PARAM_ELE_OUI_SUBTYPE(_pStart, _val) ( *((pu1Byte)(_pStart)+4) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_VERSION(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+5) ) ) -#define SET_WMM_PARAM_ELE_VERSION(_pStart, _val) ( *((pu1Byte)(_pStart)+5) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart) ( EF1Byte( *((pu1Byte)(_pStart)+6) ) ) -#define SET_WMM_PARAM_ELE_QOS_INFO_FIELD(_pStart, _val) ( *((pu1Byte)(_pStart)+6) = EF1Byte(_val) ) - -#define GET_WMM_PARAM_ELE_AC_PARAMS(_pStart) ( (pu1Byte)(_pStart)+8 ) -#define SET_WMM_PARAM_ELE_AC_PARAMS(_pStart, _pVal) PlatformMoveMemory((_pStart)+8, _pVal, 16) - -#define GET_WMM_PARAM_ELE_SINGLE_AC_PARAM(_pStart, acIdx) ( ((pu1Byte)(_pStart))+8+ acIdx*4 ) -#define SET_WMM_PARAM_ELE_SINGLE_AC_PARAM(_pStart, acIdx, _pVal) PlatformMoveMemory( ((pu1Byte)(_pStart))+8+ acIdx*4, _pVal, 4) - -#define GET_WMM_PARAM_ELE_AC_PARAM(_pStart) ( (pu1Byte)(_pStart)+8 ) -#define SET_WMM_PARAM_ELE_AC_PARAM(_pStart, _pVal) PlatformMoveMemory((_pStart)+8, _pVal, 16) - - -// -// QoS element subtype -// -typedef enum _QOS_ELE_SUBTYPE{ - QOSELE_TYPE_INFO = 0x00, // 0x00: Information element - QOSELE_TYPE_PARAM = 0x01, // 0x01: parameter element -}QOS_ELE_SUBTYPE,*PQOS_ELE_SUBTYPE; - - -// -// Direction Field Values. -// Ref: WMM spec 2.2.11: WME TSPEC Element, p.18. -// -typedef enum _DIRECTION_VALUE{ - DIR_UP = 0, // 0x00 // UpLink - DIR_DOWN = 1, // 0x01 // DownLink - DIR_DIRECT = 2, // 0x10 // DirectLink - DIR_BI_DIR = 3, // 0x11 // Bi-Direction -}DIRECTION_VALUE,*PDIRECTION_VALUE; - - -// -// TS Info field in WMM TSPEC Element. -// Ref: -// 1. WMM spec 2.2.11: WME TSPEC Element, p.18. -// 2. 8185 QoS code: QOS_TSINFO [def. in QoS_mp.h] -// - -// Get/Set Value from Tspec Body -#define GET_TSPEC_BODY_TSINFO_TRAFFIC_TYPE(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody), 0, 1) -#define SET_TSPEC_BODY_TSINFO_TRAFFIC_TYPE(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody), 0, 1 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_TSID(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody), 1, 4) -#define SET_TSPEC_BODY_TSINFO_TSID(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody), 1, 4 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_DIRECTION(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody), 5, 2) -#define SET_TSPEC_BODY_TSINFO_DIRECTION(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody), 5, 2 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT0(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody), 7, 1) -#define SET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT0(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody), 7, 1 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT1(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody)+1, 0, 1) -#define SET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT1(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody)+1, 0, 1 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_ACCESS_POLICY(_TSpecBody) \ - ((GET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT1(_TSpecBody) << 1 ) | (GET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT0(_TSpecBody) )) -#define SET_TSPEC_BODY_TSINFO_ACCESS_POLICY(_TSpecBody, _value) \ - {\ - SET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT0((_TSpecBody), (_value) & 0x01); \ - SET_TSPEC_BODY_TSINFO_ACCESS_POLICY_BIT1((_TSpecBody), (_value) & 0x02); \ - } - -#define GET_TSPEC_BODY_TSINFO_AGGREGATION(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody)+1, 1, 1) -#define SET_TSPEC_BODY_TSINFO_AGGREGATION(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody)+1, 1, 1 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_PSB(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody)+1, 2, 1) -#define SET_TSPEC_BODY_TSINFO_PSB(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody)+1, 2, 1 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_UP(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody)+1, 3, 3) -#define SET_TSPEC_BODY_TSINFO_UP(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody)+1, 3, 3 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_ACK_POLICY(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody)+1, 6, 2) -#define SET_TSPEC_BODY_TSINFO_ACK_POLICY(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody)+1, 6, 2 , (_value)) - -#define GET_TSPEC_BODY_TSINFO_SCHEDULE(_TSpecBody) LE_BITS_TO_1BYTE( (_TSpecBody)+2, 0, 1) -#define SET_TSPEC_BODY_TSINFO_SCHEDULE(_TSpecBody, _value) SET_BITS_TO_LE_1BYTE( (_TSpecBody)+2, 0, 1 , (_value)) - - - -// -// WMM TSPEC Element. -// Ref: WMM spec 2.2.11: WME TSPEC Element, p.16. -// -// -// WMM TSPEC Element Format: -// | ID | Length | OUI | OUI Type | OUI SubType | Version | WMM TSPEC body | -// | 1 Byte | 1 Byte | 3 Bytes | 1 Byte | 1 Byte | 1 Byte | 55 Bytes | -// -// Note: -// We never use the stucture allocated in the procedure because we do not ensure that the size of the allocated -// memory exactly matches our demand. In general, when allocating memory with the size of odd nubmber for the -// stuct or union operations, the OS always reserves 1 byte appended to the stucture. Packets manipulation -// by filling memory with the stucure is dangerous. By Bruce, 2008-03-15. -// - -#define TSPEC_SIZE (2+6+55) -typedef u1Byte WMM_TSPEC[TSPEC_SIZE], *PWMM_TSPEC; - - -// -// ACM implementation method. -// Annie, 2005-12-13. -// -typedef enum _ACM_METHOD{ - eAcmWay0_SwAndHw = 0, // By SW and HW. - eAcmWay1_HW = 1, // By HW. - eAcmWay2_SW = 2, // By SW. -}ACM_METHOD,*PACM_METHOD; - - -typedef struct _ACM{ -// BOOLEAN RegEnableACM; - u8Byte UsedTime; - u8Byte MediumTime; - BOOLEAN HwAcmCtl; // TRUE: UsedTime exceed => Do NOT USE this AC. It wll be written to ACM_CONTROL(0xBF BIT 0/1/2 in 8185B). -}ACM, *PACM; - -typedef u1Byte AC_UAPSD, *PAC_UAPSD; - -#define GET_VO_UAPSD(_apsd) ((_apsd) & BIT0) -#define SET_VO_UAPSD(_apsd) ((_apsd) |= BIT0) - -#define GET_VI_UAPSD(_apsd) ((_apsd) & BIT1) -#define SET_VI_UAPSD(_apsd) ((_apsd) |= BIT1) - -#define GET_BK_UAPSD(_apsd) ((_apsd) & BIT2) -#define SET_BK_UAPSD(_apsd) ((_apsd) |= BIT2) - -#define GET_BE_UAPSD(_apsd) ((_apsd) & BIT3) -#define SET_BE_UAPSD(_apsd) ((_apsd) |= BIT3) - -typedef u1Byte AC_NOACK, *PAC_NOACK; - -// Maps of AC NoAck and Bits -#define GET_VO_NOACK(_AC) ((_AC) & BIT0) -#define SET_VO_NOACK(_AC) ((_AC) |= BIT0) - -#define GET_VI_NOACK(_AC) ((_AC) & BIT1) -#define SET_VI_NOACK(_AC) ((_AC) |= BIT1) - -#define GET_BK_NOACK(_AC) ((_AC) & BIT2) -#define SET_BK_NOACK(_AC) ((_AC) |= BIT2) - -#define GET_BE_NOACK(_AC) ((_AC) & BIT3) -#define SET_BE_NOACK(_AC) ((_AC) |= BIT3) - -// Translate WMM(QOS) UP to RT defined AC BITs -#define WMMUP_TO_RT_AC_BIT(_UP) \ - ((6 == (_UP) || 7 == (_UP)) ? BIT0 : \ - (4 == (_UP) || 5 == (_UP)) ? BIT1 : \ - (1 == (_UP) || 2 == (_UP)) ? BIT2 : \ - (0 == (_UP) || 3 == (_UP)) ? BIT3 : 0) - -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - -//typedef struct _TCLASS{ -// TODO -//} TCLASS, *PTCLASS; -typedef union _QOS_TCLAS{ - - struct _TYPE_GENERAL{ - u1Byte Priority; - u1Byte ClassifierType; - u1Byte Mask; - } TYPE_GENERAL; - - struct _TYPE0_ETH{ - u1Byte Priority; - u1Byte ClassifierType; - u1Byte Mask; - u1Byte SrcAddr[6]; - u1Byte DstAddr[6]; - u2Byte Type; - } TYPE0_ETH; - - struct _TYPE1_IPV4{ - u1Byte Priority; - u1Byte ClassifierType; - u1Byte Mask; - u1Byte Version; - u1Byte SrcIP[4]; - u1Byte DstIP[4]; - u2Byte SrcPort; - u2Byte DstPort; - u1Byte DSCP; - u1Byte Protocol; - u1Byte Reserved; - } TYPE1_IPV4; - - struct _TYPE1_IPV6{ - u1Byte Priority; - u1Byte ClassifierType; - u1Byte Mask; - u1Byte Version; - u1Byte SrcIP[16]; - u1Byte DstIP[16]; - u2Byte SrcPort; - u2Byte DstPort; - u1Byte FlowLabel[3]; - } TYPE1_IPV6; - - struct _TYPE2_8021Q{ - u1Byte Priority; - u1Byte ClassifierType; - u1Byte Mask; - u2Byte TagType; - } TYPE2_8021Q; -} QOS_TCLAS, *PQOS_TCLAS; - -#ifdef REMOVE_PACK -#pragma pack() -#endif - -// -// Information about a traffic stream -// -typedef struct _QOS_TSTREAM{ - // - // We will use TSID, RA and TA as key to hash. - // - DECLARE_RT_HASH_ENTRY; - - BOOLEAN bUsed; - u1Byte UserPriority; - RT_LIST_ENTRY BufferedPacketList; - u2Byte MsduLifetime; - BOOLEAN bEstablishing; - u1Byte TimeSlotCount; - u1Byte DialogToken; - WMM_TSPEC TSpec; - WMM_TSPEC OutStandingTSpec; - u1Byte NominalPhyRate; -} QOS_TSTREAM, *PQOS_TSTREAM; - - -// -// STA QoS data. -// Ref: DOT11_QOS in 8185 code. [def. in QoS_mp.h] -// -typedef struct _STA_QOS{ - DECLARE_RT_OBJECT(STA_QOS); - - u1Byte WMMIEBuf[MAX_WMMELE_LENGTH]; - OCTET_STRING WMMIE; - - // Part 1. Self QoS Mode. - QOS_MODE QosCapability; //QoS Capability, 2006-06-14 Isaiah - QOS_MODE QosCapabilityBackup; //QoS CapabilityBackup - - QOS_MODE CurrentQosMode; - - // For WMM Power Save Mode : - // ACs are trigger/delivery enabled or legacy power save enabled. 2006-06-13 Isaiah - AC_UAPSD b4ac_Uapsd; //VoUapsd(bit0), ViUapsd(bit1), BkUapsd(bit2), BeUapsd(bit3), - AC_UAPSD Curr4acUapsd; - BOOLEAN bInServicePeriod; - BOOLEAN bWmmMoreData; // Mark as the final trigger-enabled qos data from the AP. - u1Byte MaxSPLength; - - // Part 2. EDCA Parameter (perAC) - pu1Byte pWMMInfoEle; - u1Byte WMMParamEle[WMM_PARAM_ELEMENT_SIZE]; - - - // Part 3. ACM - ACM acm[4]; - ACM_METHOD AcmMethod; - RT_TIMER ACMTimer; - - // Part 4. Per TID (Part 5: TCLASS will be described by TStream) - QOS_TSTREAM StaTsArray[MAX_STA_TS_COUNT]; // Traffic Stream objects for STA mode. - RT_HASH_TABLE_HANDLE hApTsTable; // Traffic Stream objects for AP mode. - u1Byte DialogToken; - WMM_TSPEC TSpec; - - u1Byte QBssWirelessMode; - - // No Ack Setting - AC_NOACK AcNoAck; - - //For admission control. - RT_TIMER AddTsTimer; -}STA_QOS, *PSTA_QOS; - - -// -// Ref: 802.11e 7.3.2.13, Figure 46.1 -// -#define QBSS_LOAD_SIZE 5 -#define GET_QBSS_LOAD_STA_COUNT(__pStart) ReadEF2Byte(__pStart) -#define SET_QBSS_LOAD_STA_COUNT(__pStart, __Value) WriteEF2Byte(__pStart, __Value) -#define GET_QBSS_LOAD_CHNL_UTILIZATION(__pStart) ReadEF1Byte((pu1Byte)(__pStart) + 2) -#define SET_QBSS_LOAD_CHNL_UTILIZATION(__pStart, __Value) WriteEF1Byte((pu1Byte)(__pStart) + 2, __Value) -#define GET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart) ReadEF2Byte((pu1Byte)(__pStart) + 3) -#define SET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart, __Value) WriteEF2Byte((pu1Byte)(__pStart) + 3, __Value) - - -// -// BSS QOS data. -// Ref: BssDscr in 8185 code. [def. in BssDscr.h] -// -typedef struct _BSS_QOS{ - - // Part 0. Ref. 8185 QoS code (From Emily) - QOS_MODE bdQoSMode; - u1Byte bdWMMIEBuf[MAX_WMMELE_LENGTH]; - OCTET_STRING bdWMMIE; - - QOS_ELE_SUBTYPE EleSubType; - - // Part 2. EDCA Parameter (perAC) - pu1Byte pWMMInfoEle; - pu1Byte pWMMParamEle; - - // QBSS Load. - u1Byte QBssLoad[QBSS_LOAD_SIZE]; - BOOLEAN bQBssLoadValid; -}BSS_QOS, *PBSS_QOS; - - -#define sQoSCtlLng 2 -#define QOS_CTRL_LEN(_QosMode) ( (_QosMode > QOS_DISABLE)? sQoSCtlLng : 0 ) - - -//Added by joseph -#define UP2AC(up) ( (up<3) ? ((up==0)?1:0) : (up>>1) ) -#define IsACValid(ac) ( ( ac>=0 && ac<=7 )? TRUE : FALSE ) - -#endif // #ifndef __INC_QOS_TYPE_H diff --git a/network/wlan/WDI/HEADER/RegCommon.h b/network/wlan/WDI/HEADER/RegCommon.h deleted file mode 100644 index 7d93fda7..00000000 --- a/network/wlan/WDI/HEADER/RegCommon.h +++ /dev/null @@ -1,867 +0,0 @@ -/****************************************************************************** - - (c) Copyright 2007, RealTEK Technologies Inc. All Rights Reserved. - - Module: RegCommon.h - - Note: The file define the initiali registry value cross the following platform - (1) NDIS5 - (2) NDIS6 - (3) MAC OS - - Function: - - Export: - - Abbrev: - - History: - Data Who Remark - - 05/0r/2007 Emily Create initial version. - - -******************************************************************************/ - -#ifndef __INC_REGCOMMON_H -#define __INC_REGCOMMON_H - -//----------------------------------------------------------------------------- -// Common definition for all of the platform -//----------------------------------------------------------------------------- - - -//----------------------------------------------------------------------------- -// Seperate definition for different platform -//----------------------------------------------------------------------------- - //Windows Platform - NDIS_STRING DefaultSSID = NDIS_STRING_CONST(""); - NDIS_STRING DefaultKey = NDIS_STRING_CONST(""); - NDIS_STRING DefaultDeviceDesc = NDIS_STRING_CONST("Realtek Wireless LAN"); - NDIS_STRING DefaultPairingKey = NDIS_STRING_CONST("12345678"); - NDIS_STRING DefaultFileName = NDIS_STRING_CONST(""); - NDIS_STRING gChannelPlan2G = NDIS_STRING_CONST("1,2,3,4,5,6,7,8,9,10,11,12,13,14"); - NDIS_STRING gChannelPlan5G = NDIS_STRING_CONST("36,40,44,48,52,56,60,64,100,104,108,112,116,120,124,128,132,136,140,149,153,157,161,165"); - #define REGISTRY_STR NDIS_STRING_CONST - - #define REGISTRY_OFFSET(field) ((u4Byte)FIELD_OFFSET(RT_NDIS_COMMON,field)) - #define REGISTRY_SIZE(field) sizeof(((PRT_NDIS_COMMON)0)->field) - - - -static MP_REG_ENTRY CommonRegTable[] = { - // Registry value name Type Offset in MP_ADAPTER Field size Default Value Min Max - {REGISTRY_STR("NetworkAddress"), 0,NdisParameterInteger, REGISTRY_OFFSET(NetworkAddress), REGISTRY_SIZE(NetworkAddress), 0xFF, 0, 0xFF}, - {REGISTRY_STR("SSID"), 0,NdisParameterString, REGISTRY_OFFSET(RegSSID), REGISTRY_SIZE(RegSSID), (ADDR2DATA)&DefaultSSID,0, 32}, - {REGISTRY_STR("Bssid"), 0,NdisParameterString, REGISTRY_OFFSET(RegBssidBuf), REGISTRY_SIZE(RegBssidBuf), 0, 0, 13}, - {REGISTRY_STR("Locale"), 0,NdisParameterString, REGISTRY_OFFSET(RegLocale), REGISTRY_SIZE(RegLocale), (ADDR2DATA)&DefaultFileName, 0, 4}, - {REGISTRY_STR("bConcurrentMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegConcurrent), REGISTRY_SIZE(bRegConcurrent), 0, 0, 1}, - //---------------------------------------------------------------------------- - // WiFi config, by Bruce, 2007-12-07. - {REGISTRY_STR("WiFiConfg"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegWiFi), REGISTRY_SIZE(bRegWiFi), 0, 0, 1}, // 0: Disable WiFi Config, 1: Enable WiFi Config - //---------------------------------------------------------------------------- - {REGISTRY_STR("ChannelPlan"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegChannelPlan), REGISTRY_SIZE(RegChannelPlan), 0x7f, 0, 0x7f}, - {REGISTRY_STR("ChannelPlan2G"), 0,NdisParameterString, REGISTRY_OFFSET(RegChannelPlan2G), REGISTRY_SIZE(RegChannelPlan2G), (ADDR2DATA)&gChannelPlan2G, 0, 255}, - {REGISTRY_STR("ChannelPlan5G"), 0,NdisParameterString, REGISTRY_OFFSET(RegChannelPlan5G), REGISTRY_SIZE(RegChannelPlan5G), (ADDR2DATA)&gChannelPlan5G, 0, 255}, - {REGISTRY_STR("WirelessMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWirelessMode), REGISTRY_SIZE(RegWirelessMode), WIRELESS_MODE_AUTO, WIRELESS_MODE_A, WIRELESS_MODE_MAX}, - {REGISTRY_STR("HTMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegHTMode), REGISTRY_SIZE(RegHTMode), 0, 0, 4}, - {REGISTRY_STR("Channel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegChannel), REGISTRY_SIZE(RegChannel), 1, 1, 200}, - {REGISTRY_STR("Channel5G"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegChannel5G), REGISTRY_SIZE(RegChannel5G), 36, 36, 200}, - {REGISTRY_STR("RFType"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRFType), REGISTRY_SIZE(RegRFType), 15, 0, 15}, // RF_1T2R = 0, RF_MAX_TYPE = 15 - //---------------------------------------------------------------------------- - // Efuse value get from registry - {REGISTRY_STR("bEfusePriorityAuto"), 0,NdisParameterInteger, REGISTRY_OFFSET(bEfusePriorityAuto), REGISTRY_SIZE(bEfusePriorityAuto), 1, 0, 1}, // 0: Registry-Priority Auto 1: EFUSE-Priority Auto - {REGISTRY_STR("AntennaDivType"), 0,NdisParameterInteger, REGISTRY_OFFSET(AntDivType), REGISTRY_SIZE(AntDivType), 2, 1, 3}, // 1: for 88EE, 1Tx and 1RxCG are diversity.(2 Ant with SPDT), 2: for 88EE, 1Tx and 2Rx are diversity.( 2 Ant, Tx and RxCG are both on aux port, RxCS is on main port ), 3: for 88EE, 1Tx and 1RxCG are fixed.(1Ant, Tx and RxCG are both on aux port) - {REGISTRY_STR("AmplifierType2G"), 0,NdisParameterInteger, REGISTRY_OFFSET(AmplifierType_2G), REGISTRY_SIZE(AmplifierType_2G), 0, 0, 24}, - {REGISTRY_STR("AmplifierType5G"), 0,NdisParameterInteger, REGISTRY_OFFSET(AmplifierType_5G), REGISTRY_SIZE(AmplifierType_5G), 0, 0, 192}, - {REGISTRY_STR("TxBBSwing2G"), 0,NdisParameterInteger, REGISTRY_OFFSET(TxBBSwing_2G), REGISTRY_SIZE(TxBBSwing_2G), 0, 0, 9}, - {REGISTRY_STR("TxBBSwing5G"), 0,NdisParameterInteger, REGISTRY_OFFSET(TxBBSwing_5G), REGISTRY_SIZE(TxBBSwing_5G), 0, 0, 9}, - {REGISTRY_STR("bTurnOffEfuseMask"), 0,NdisParameterInteger, REGISTRY_OFFSET(bTurnOffEfuseMask), REGISTRY_SIZE(bTurnOffEfuseMask), 0, 0, 1}, // 0: EFUSE Mask ON 1: EFUSE Mask OFF - {REGISTRY_STR("RFEType"), 0,NdisParameterInteger, REGISTRY_OFFSET(RFE_Type), REGISTRY_SIZE(RFE_Type), 64, 0, 64}, // 0-4: User define RFE Type 64: Efuse define RFE Type - {REGISTRY_STR("bTFBGA"), 0,NdisParameterInteger, REGISTRY_OFFSET(bTFBGA), REGISTRY_SIZE(bTFBGA), 0, 0, 1}, // 0: Others(e.g., QFN) 1: TFBGA - - //---------------------------------------------------------------------------- - // For Sercomm UI, 2005.01.13, by rcnjko. - {REGISTRY_STR("ForcedDataRate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegForcedDataRate), REGISTRY_SIZE(RegForcedDataRate), 0, 0, 0xc7}, // 0: Auto, (0x02: 1M ~ 0x6C: 54M) , (0x80: MCS0 ~ 0x8f: MCS15) - {REGISTRY_STR("ForcedBstDataRate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegForcedBstDataRate), REGISTRY_SIZE(RegForcedBstDataRate), 0, 0, 0xc7}, // 0: Auto, (0x02: 1M ~ 0x6C: 54M) - - {REGISTRY_STR("WirelessMode4ScanList"),0,NdisParameterInteger, REGISTRY_OFFSET(RegWirelessMode4ScanList),REGISTRY_SIZE(RegWirelessMode4ScanList), WIRELESS_MODE_AUTO, WIRELESS_MODE_A, WIRELESS_MODE_N_5G}, - //---------------------------------------------------------------------------- - // For 818x UI and WPA Verify, 2004.11.30, by rcnjko. - {REGISTRY_STR("DataEncAlg"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWepEncStatus), REGISTRY_SIZE(RegWepEncStatus), REG_WEP_STATUS_NO_WEP, REG_WEP_STATUS_NO_WEP, REG_WEP_STATUS_WEP128}, - {REGISTRY_STR("EncAlgorithm"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEncAlgorithm), REGISTRY_SIZE(RegEncAlgorithm), REG_WEP_Encryption, REG_WEP_Encryption, REG_AESCCMP_Encryption}, - {REGISTRY_STR("AuthentAlg"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAuthentAlg), REGISTRY_SIZE(RegAuthentAlg), Ndis802_11AuthModeOpen, Ndis802_11AuthModeOpen, Ndis802_11AuthModeAutoSwitch}, // For Meeting House, authentication mode is required to be Open. - {REGISTRY_STR("DefaultKey0"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKey[0]), REGISTRY_SIZE(RegDefaultKey[0]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKey1"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKey[1]), REGISTRY_SIZE(RegDefaultKey[1]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKey2"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKey[2]), REGISTRY_SIZE(RegDefaultKey[2]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKey3"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKey[3]), REGISTRY_SIZE(RegDefaultKey[3]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKeyW0"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKeyW[0]), REGISTRY_SIZE(RegDefaultKeyW[0]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKeyW1"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKeyW[1]), REGISTRY_SIZE(RegDefaultKeyW[1]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKeyW2"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKeyW[2]), REGISTRY_SIZE(RegDefaultKeyW[2]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKeyW3"), 0,NdisParameterString, REGISTRY_OFFSET(RegDefaultKeyW[3]), REGISTRY_SIZE(RegDefaultKeyW[3]), (ADDR2DATA)&DefaultKey, 0, 61}, - {REGISTRY_STR("DefaultKeyId"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDefaultKeyId), REGISTRY_SIZE(RegDefaultKeyId), 0, 0, 3}, - {REGISTRY_STR("NetworkType"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegNetworkType), REGISTRY_SIZE(RegNetworkType), NI_Infrastructure, NI_ADHOC, NI_AUTO}, - //---------------------------------------------------------------------------- - // For pre-authentication default setting. By Annie. - {REGISTRY_STR("EnablePreAuth"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnablePreAuthentication),REGISTRY_SIZE(RegEnablePreAuthentication), 1, 0, 1}, - //---------------------------------------------------------------------------- - // For power save mode. 2005.02.15, by rcnjko. - {REGISTRY_STR("PowerSaveMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPowerSaveMode), REGISTRY_SIZE(RegPowerSaveMode), 0, 0, 2}, // 0: Ndis802_11PowerModeCAM, 1: Ndis802_11PowerModeMAX_PSP MAX_PS 2: Ndis802_11PowerModeFast_PSP. - //---------------------------------------------------------------------------- - // IBSS beacon behavior. 2005.12.16, by rcnjko. - {REGISTRY_STR("IbssBeacon"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableSwBeacon), REGISTRY_SIZE(RegEnableSwBeacon), 0, 0, 2}, // 0: BEACON_SEND_AUTO_HW, 1: BEACON_SEND_AUTO_SW, 2: BEACON_SEND_MANUAL - //---------------------------------------------------------------------------- - // For SW AP mode. 2005.05.30, by rcnjko. - {REGISTRY_STR("ActingAsAp"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegActingAsAp), REGISTRY_SIZE(RegActingAsAp), FALSE, FALSE, TRUE}, - {REGISTRY_STR("AH_BcnIntv"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegBeaconPeriod), REGISTRY_SIZE(RegBeaconPeriod), 100, 20, 1000}, - {REGISTRY_STR("DtimPeriod"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDtimPeriod), REGISTRY_SIZE(RegDtimPeriod), 1, 1, 255}, - {REGISTRY_STR("PreambleMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPreambleMode), REGISTRY_SIZE(RegPreambleMode), 2, 1, 3}, // 1:Long, 2:Auto, 3:Short - // For intel class mode, 2011.02.09, by lanhsin - //---------------------------------------------------------------------------- - {REGISTRY_STR("ActingAsClassMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegClassMode), REGISTRY_SIZE(bRegClassMode), FALSE, FALSE, TRUE}, - //---------------------------------------------------------------------------- - // For RF Power State. 2005.05.30, by rcnjko. - {REGISTRY_STR("RFOff"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRfOff), REGISTRY_SIZE(RegRfOff), 0, 0, 1}, // 1: RF off, 0: RF on. - //---------------------------------------------------------------------------- - // for WPP debug monitor, 20140509, by Cosa - {REGISTRY_STR("DbgMonitor"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDbgMonitor), REGISTRY_SIZE(RegDbgMonitor), 0, 0, 0xffffffff}, // debug monitor - // For QoS. Added by Annie, 2005-11-09. - {REGISTRY_STR("QoS"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegSupportQoS), REGISTRY_SIZE(bRegSupportQoS), 1, 0, 2}, // 1: Support QoS, 0: not support. // 2: Fake aut mode for customer temporarily~~!! - {REGISTRY_STR("StaUapsd"), 0,NdisParameterInteger, REGISTRY_OFFSET(StaUapsd), REGISTRY_SIZE(StaUapsd), 0, 0, 15}, //default 0 : Disable UAPSD - {REGISTRY_STR("MaxSPLength"), 0,NdisParameterInteger, REGISTRY_OFFSET(MaxSPLength), REGISTRY_SIZE(MaxSPLength), 0, 0, 3}, //default 0 - //---------------------------------------------------------------------------- - // For CCX RM, 2006.05.15, by rcnjko. - {REGISTRY_STR("CcxEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCcx), REGISTRY_SIZE(RegCcx), 0, 0, 1}, // 1: Support CCX, 0: not support it. - {REGISTRY_STR("CcxRm"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCcxRm), REGISTRY_SIZE(RegCcxRm), 0, 0, 1}, // 1: Support CCX Radio Measurement, 0: not support it. - {REGISTRY_STR("CcxOffLineDurUpLimit"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCcxOffLineDurUpLimit), REGISTRY_SIZE(RegCcxOffLineDurUpLimit),0, 0, 0xffff}, // 0: Unlimited >0: Max non-serving channel measurement duration (in TU) - {REGISTRY_STR("CcxUpdateTxCellPwr"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCcxUpdateTxCellPwr), REGISTRY_SIZE(RegCcxUpdateTxCellPwr),0, 0, 1}, // 0: Disable, 1: Enable - //---------------------------------------------------------------------------- - // For CCX CAC - {REGISTRY_STR("CcxCAC"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCcxCACEnable), REGISTRY_SIZE(RegCcxCACEnable), 0, 0, 1}, // 1: Support CCX CAC, 0: not support it. - // For CCX CatastrophicRoamLimit - {REGISTRY_STR("CcxCatastrophicRoamLimit"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCcxCatasRoamLimit), REGISTRY_SIZE(RegCcxCatasRoamLimit), 0, 0, 0xFF}, // 0: Disable - //---------------------------------------------------------------------------- - {REGISTRY_STR("bHwParaFile"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegHwParaFile), REGISTRY_SIZE(bRegHwParaFile), 1, 0, 2}, // 0: (Default) use parameters hardcoded, 1: read from file, 2: load default first, and then partial modify from file. - //---------------------------------------------------------------------------- - - // For TX Power Level asked by Lenovo, 2009.03.06 by Mars - {REGISTRY_STR("TxPowerLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPowerLevel), REGISTRY_SIZE(RegTxPowerLevel), 0, 0, 4}, // 0:Default 1:25% 2:50% 3:75% 4:100% - //---------------------------------------------------------------------------- - // For case of Out of RFD, 2006.07.25 by shien chang - {REGISTRY_STR("LowRfdThreshold"), 0,NdisParameterInteger, REGISTRY_OFFSET(LowRfdThreshold), REGISTRY_SIZE(LowRfdThreshold), 4, 1, 64}, - //---------------------------------------------------------------------------- - // PSPXlinkMode, enable promicuous mode for XLink protocol. 2006.09.04, by shien chang - {REGISTRY_STR("PSPXlinkMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(PSPXlinkMode), REGISTRY_SIZE(PSPXlinkMode), 0, 0, 1}, - //---------------------------------------------------------------------------- - // For "SW Tx Encrypt" and "SW Rx Decrypt". 0: Auto. 1: HW enc/dec. 2:SW enc/dec. - // 2006.09.29, by shien chang. - {REGISTRY_STR("RegSWTxEncryptFlag"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSWTxEncryptFlag), REGISTRY_SIZE(RegSWTxEncryptFlag), 0, 0, 2}, - {REGISTRY_STR("RegSWRxDecryptFlag"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSWRxDecryptFlag), REGISTRY_SIZE(RegSWRxDecryptFlag), 0, 0, 2}, - //---------------------------------------------------------------------------- - // For HCT test. 061010, by rcnjko. - {REGISTRY_STR("HctTest"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegHctTest), REGISTRY_SIZE(bRegHctTest), 0, 0, 1}, - {REGISTRY_STR("Chaos"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegChaos), REGISTRY_SIZE(bRegChaos), 0, 0, 1}, - - // For OID_GEN_VENDOR_DESCRIPTION, 2006.03.10, by rcnjko. - {REGISTRY_STR("DriverDesc"), 0,NdisParameterString, REGISTRY_OFFSET(RegDriverDesc), REGISTRY_SIZE(RegDriverDesc), (ADDR2DATA)&DefaultDeviceDesc, 0, 255}, - //---------------------------------------------------------------------------- - // For EQC, Fixed MAC Address requirement - {REGISTRY_STR("FixedMacAddrForEQC"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegFixedMacAddr), REGISTRY_SIZE(bRegFixedMacAddr), 0, 0, 1}, // 0: disable, 1: enable - //---------------------------------------------------------------------------- - // For turbo mode. Roger, 2006.12.07. - {REGISTRY_STR("TurboMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTurboModeSelect), REGISTRY_SIZE(RegTurboModeSelect), 2, 0, 2}, // 0: Disable, 1: Enable, 2: Auto Turbo by 8186 (following 8186 beacon). - //---------------------------------------------------------------------------- - // 070208, rcnjko: 802.11d - {REGISTRY_STR("Dot11dEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDot11dEnable), REGISTRY_SIZE(bRegDot11dEnable), 0, 0, 1}, // 0: disable, 1: enable. - //---------------------------------------------------------------------------- - // For AP mode auto select channel. 2005.12.27, by rcnjko. - {REGISTRY_STR("AutoSelChnl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAutoSelChnl), REGISTRY_SIZE(RegAutoSelChnl), 0, 0, 1}, // Default: Disable. - {REGISTRY_STR("ChnlWeight"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegChnlWeight), REGISTRY_SIZE(RegChnlWeight), 0, 0, 10}, // Current only 5 modes, Ref: AutoSelectChannel(). Added by Annie, 2006-07-26. - //---------------------------------------------------------------------------- - // For ASUS request. Annie, 2006-02-16. - {REGISTRY_STR("LiveTime"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLiveTime), REGISTRY_SIZE(RegLiveTime), 1200, 0, 2147483647}, // in second. (Set "600" = 10 minutes, "86400" = 24hr.) - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - // WDS, 2006.06.11, by rcnjko. - {REGISTRY_STR("WdsMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWdsMode), REGISTRY_SIZE(RegWdsMode), 0, 0, 1}, // 0: WDS disabled, 1: AP+WDS - //---------------------------------------------------------------------------- - // CustomerID, see RT_CUSTOMER_ID for its definition. 2006.07.03, by rcnjko. - {REGISTRY_STR("CustomerID"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCustomerID), REGISTRY_SIZE(RegCustomerID), 0, 0, 0x7FFFFFFF}, // 0: allow EEPROM to determine pMgntInfo->CustomerID , >0: overwrite pMgntInfo->CustomerID. - //fragmentation threshold 2007.03.05 by David - {REGISTRY_STR("FragThresh"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFragThreshold), REGISTRY_SIZE(RegFragThreshold), 2347, 256, 2347}, // - //---------------------------------------------------------------------------- - // Default EDCA parameter for AP mode - {REGISTRY_STR("ApEDCAParamBE"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegApEDCAParamBE), REGISTRY_SIZE(RegApEDCAParamBE), 0x00006403, 0, 0xffffffff}, - {REGISTRY_STR("ApEDCAParamBK"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegApEDCAParamBK), REGISTRY_SIZE(RegApEDCAParamBK), 0x0000A427, 0, 0xffffffff}, - {REGISTRY_STR("ApEDCAParamVI"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegApEDCAParamVI), REGISTRY_SIZE(RegApEDCAParamVI), 0x005E4341, 0, 0xffffffff}, - {REGISTRY_STR("ApEDCAParamVO"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegApEDCAParamVO), REGISTRY_SIZE(RegApEDCAParamVO), 0x002F3261, 0, 0xffffffff}, - //---------------------------------------------------------------------------- - // Default EDCA parameter for STA mode - - {REGISTRY_STR("StaEDCAParamBE"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegStaEDCAParamBE), REGISTRY_SIZE(RegStaEDCAParamBE), 0x0000A403, 0, 0xffffffff}, - - {REGISTRY_STR("StaEDCAParamBK"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegStaEDCAParamBK), REGISTRY_SIZE(RegStaEDCAParamBK), 0x0000A427, 0, 0xffffffff}, - {REGISTRY_STR("StaEDCAParamVI"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegStaEDCAParamVI), REGISTRY_SIZE(RegStaEDCAParamVI), 0x005E4342, 0, 0xffffffff}, - - {REGISTRY_STR("StaEDCAParamVO"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegStaEDCAParamVO), REGISTRY_SIZE(RegStaEDCAParamVO), 0x002F3262, 0, 0xffffffff}, - - //---------------------------------------------------------------------------- - // No Ack Setting - {REGISTRY_STR("AcNoAck"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAcNoAck), REGISTRY_SIZE(RegAcNoAck), 0, 0, 0xFF}, - //---------------------------------------------------------------------------- - // For inactive power save feature. - // If this mode is enabled, NIC will go into rf off state when disconnected. 2006.07.16, by shien chang. - {REGISTRY_STR("InactivePs"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegInactivePsMode), REGISTRY_SIZE(RegInactivePsMode), 2, 0, 2}, // 0: disable, 1: enable. - //---------------------------------------------------------------------------- - // For inactive power save feature. - // If this mode is enabled, NIC will go into 802.11 power save mode at leisure . - {REGISTRY_STR("bLeisurePs"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLeisurePsMode), REGISTRY_SIZE(RegLeisurePsMode), 1, 0, 2}, // 0: disable, 1: enable. - {REGISTRY_STR("bAdvancedLPs"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAdvancedLPs), REGISTRY_SIZE(RegAdvancedLPs), 0, 0, 1}, // 0: disable, 1: enable. - //---------------------------------------------------------------------------- - // LPS Listen Interval. - // 0x0 - eFastPs, 0xFF -DTIM, 0xNN - 0xNN * BeaconIntvl - {NDIS_STRING_CONST("LPSIntvl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLPSMaxIntvl), REGISTRY_SIZE(RegLPSMaxIntvl), 5, 0, 0xFF}, - //---------------------------------------------------------------------------- - // FW control LPS mode. Added by tynli. - // 0=False, 1=MinPS, 2=MaxPS, 3=Manually setting wakeup bcn interval (refer to RegLPSMaxIntvl). - {REGISTRY_STR("bFwCtrlLPS"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegFwCtrlLPS), REGISTRY_SIZE(bRegFwCtrlLPS), 3, 0, 3}, //0=False, 1=MinPS, 2=MaxPS, 3=Manually setting wakeup bcn interval - // Low power state, ex: 32k. Added by tynli. - {REGISTRY_STR("bLowPowerEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegLowPowerEnable), REGISTRY_SIZE(bRegLowPowerEnable), 0, 0, 1}, //0=Disable, 1=Enable - //CLose IO During 32K. Added by Sherry. - {REGISTRY_STR("bLPSDeepSleepEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegLPSDeepSleepEnable), REGISTRY_SIZE(bRegLPSDeepSleepEnable), 0, 0, 1}, //0=Disable, 1=Enable - //---------------------------------------------------------------------------- - // Keep-Alive mechanism. 2008-08-16 Isaiah. - // Send Null-Function Data in period in order to tell AP that we are alive. - {REGISTRY_STR("KeepAliveLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegKeepAliveLevel), REGISTRY_SIZE(RegKeepAliveLevel), 1, 0, 2}, // 0: disable, 1: default(depend on Tx/Rx). 2. Force - //---------------------------------------------------------------------------- - // Roam Sensitive Level : 0x7F: Disable raoming - {NDIS_STRING_CONST("RegROAMSensitiveLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegROAMSensitiveLevel), REGISTRY_SIZE(RegROAMSensitiveLevel), 127, 30, 127}, - // Roam Hysteresis : 0 means using AP setting or default setting - {NDIS_STRING_CONST("RoamHysteresis"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRoamHysteresis), REGISTRY_SIZE(RegRoamHysteresis), 6, 0, 10}, - //---------------------------------------------------------------------------- - // Roaming Accept Time, in sec. - {NDIS_STRING_CONST("RegRoamingLimit"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRoamingLimit), REGISTRY_SIZE(RegRoamingLimit), 4, 0, 30}, - //---------------------------------------------------------------------------- - // For Disable CCK rate - {REGISTRY_STR("DisableCck"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDisableCck), REGISTRY_SIZE(bRegDisableCck), 0, 0, 1}, // 1: CCK disable, 0: CCK enable . - //---------------------------------------------------------------------------- - // For CCK rate support - {REGISTRY_STR("HT_EnableCck"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegHT_EnableCck), REGISTRY_SIZE(bRegHT_EnableCck), 1, 0, 1}, // 1: HT CCK enable, 0: HT CCK disable . - //---------------------------------------------------------------------------- - - {REGISTRY_STR("AdhocUseHWSec"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegAdhocUseHWSec), REGISTRY_SIZE(bRegAdhocUseHWSec), 0, 0, 1}, // 1: Adhoc use HW encrypt/decrypt for FPGA verification, 0: Adhoc use HW encrypt/decrypt as default. - {REGISTRY_STR("11nAdhoc"), 0,NdisParameterInteger, REGISTRY_OFFSET(bReg11nAdhoc), REGISTRY_SIZE(bReg11nAdhoc), 0, 0, 1}, // 1: 11n adhoc 20Mhz support, 0: 11g adhoc 20MHz support. - - //---------------------------------------------------------------------------- - {REGISTRY_STR("IOTBcm256QAM"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegIOTBcm256QAM), REGISTRY_SIZE(bRegIOTBcm256QAM), 0, 0, 1}, // 1: Bcm IOT 256QAM support - // 2013/10/04 MH Add for 2.4G VHT mode support. - {REGISTRY_STR("Vht24g"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegVht24g), REGISTRY_SIZE(bRegVht24g), 0, 0, 1}, // 1: support 2.4G 256Q VHT mode 0: disable - //---------------------------------------------------------------------------- - // For A-MSDU - {REGISTRY_STR("AMSDU"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAMSDU), REGISTRY_SIZE(RegAMSDU), 0, 0, 1}, - {REGISTRY_STR("AMSDU_MaxSize"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAMSDU_MaxSize), REGISTRY_SIZE(RegAMSDU_MaxSize), HT_AMSDU_SIZE_8K, 0, VHT_AMSDU_SIZE_11K}, - {REGISTRY_STR("HWAMSDU"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegHWAMSDU), REGISTRY_SIZE(RegHWAMSDU), 0, 0, 1}, - //---------------------------------------------------------------------------- - // For 802.11n A-MPDU <2006.08.08 Emily> - {REGISTRY_STR("AMPDUEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegAMPDUEnable), REGISTRY_SIZE(bRegAMPDUEnable), 1, 0, 1}, // 0:Disable A-MPDU, 2: Enable A-MPDU - {REGISTRY_STR("AMPDU_Factor"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAMPDU_Factor), REGISTRY_SIZE(RegAMPDU_Factor), 3, 0, VHT_AGG_SIZE_1024K}, // 0: 2n13(8K), 1:2n14(16K), 2:2n15(32K), 3:2n16(64k) - {REGISTRY_STR("MPDU_Density"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMPDU_Density), REGISTRY_SIZE(RegMPDU_Density), 0, 0, HT_DENSITY_16US}, // 0: No restriction, 1: 1/8usec, 2: 1/4usec, 3: 1/2usec, 4: 1usec, 5: 2usec, 6: 4usec, 7:8usec - //---------------------------------------------------------------------------- - // 11N No Protection. Turn on this registry to disable all protection in 11N condition - {REGISTRY_STR("MimoPs"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMimoPs), REGISTRY_SIZE(RegMimoPs), 3, 0, 3}, // 0: Static Mimo Ps, 1: Dynamic Mimo Ps, 3: No Limitation, 2: Reserved(Set to 3 automatically.) - //---------------------------------------------------------------------------- - // For Rx Reorder Control - {REGISTRY_STR("RxReorder"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRxReorder), REGISTRY_SIZE(RegRxReorder), 1, 0, 0xf}, // 0: disable, 1: enable, 2: switch by throughput - {REGISTRY_STR("RxReorder_WinSize"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRxReorder_WinSize), REGISTRY_SIZE(RegRxReorder_WinSize), 64, 1, 256}, - {REGISTRY_STR("RxReorder_PendTime"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRxReorder_PendTime), REGISTRY_SIZE(RegRxReorder_PendTime), 30, 1, 10000}, - - //---------------------------------------------------------------------------- - // RTL8192C USB Tx/Rx Aggregation - //---------------------------------------------------------------------------- -#if TX_AGGREGATION - {REGISTRY_STR("UsbTxAggMode"), 0, NdisParameterInteger, REGISTRY_OFFSET(UsbTxAggMode), REGISTRY_SIZE(UsbTxAggMode), 1, 0, 1}, - {REGISTRY_STR("UsbTxAggTotalNum"), 0,NdisParameterInteger, REGISTRY_OFFSET(UsbTxAggTotalNum), REGISTRY_SIZE(UsbTxAggTotalNum), 6, 1, 31}, - {REGISTRY_STR("UsbTxAggDescNum"), 0, NdisParameterInteger, REGISTRY_OFFSET(UsbTxAggDescNum), REGISTRY_SIZE(UsbTxAggDescNum), 6, 1, 15}, - //{REGISTRY_STR("UsbTxAggPerBulkNum"), 0,NdisParameterInteger, REGISTRY_OFFSET(UsbTxAggPerBulkNum), REGISTRY_SIZE(UsbTxAggPerBulkNum), 6, 1, 15}, -#endif -#if RX_AGGREGATION - {REGISTRY_STR("UsbRxAggMode"), 0, NdisParameterInteger, REGISTRY_OFFSET(RxAggMode), REGISTRY_SIZE(RxAggMode), 3, 0, 3}, - {REGISTRY_STR("UsbRxAggBlockCount"), 0, NdisParameterInteger, REGISTRY_OFFSET(RxAggBlockCount), REGISTRY_SIZE(RxAggBlockCount), 8, 1, 255}, - {REGISTRY_STR("UsbRxAggBlockTimeout"), 0, NdisParameterInteger, REGISTRY_OFFSET(RxAggBlockTimeout), REGISTRY_SIZE(RxAggBlockTimeout), 6, 1, 15}, - {REGISTRY_STR("UsbRxAggPageCount"), 0, NdisParameterInteger, REGISTRY_OFFSET(RxAggPageCount), REGISTRY_SIZE(RxAggPageCount), 16, 1, 255}, - {REGISTRY_STR("UsbRxAggPageTimeout"), 0, NdisParameterInteger, REGISTRY_OFFSET(RxAggPageTimeout), REGISTRY_SIZE(RxAggPageTimeout), 6, 1, 32}, -#endif - //---------------------------------------------------------------------------- - // Accept ADDBA Request - {REGISTRY_STR("AcceptAddbaReq"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegAcceptAddbaReq), REGISTRY_SIZE(bRegAcceptAddbaReq), 1, 0, 1}, - {REGISTRY_STR("SupportPNPCapabilities"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegPnpCapabilities), REGISTRY_SIZE(bRegPnpCapabilities), 1, 0, 1}, // 1 support pnp set oid, 0 unload driver when s3,s4 - //---------------------------------------------------------------------------- - {REGISTRY_STR("CloEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegClevoDriver), REGISTRY_SIZE(bRegClevoDriver), 0, 0, 1}, // 0:Other customers' driver 1: Clevo driver version - - {REGISTRY_STR("ARPOffloadEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegARPOffloadEnable), REGISTRY_SIZE(bRegARPOffloadEnable), 0, 0, 1}, // 0: disable, 1: enable - {REGISTRY_STR("NSOffloadEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegNSOffloadEnable), REGISTRY_SIZE(bRegNSOffloadEnable), 0, 0, 1}, // 0: disable, 1: enable - {REGISTRY_STR("GTKOffloadEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegGTKOffloadEnable), REGISTRY_SIZE(bRegGTKOffloadEnable), 0, 0, 1}, // 0: disable, 1: enable - {REGISTRY_STR("ProtocolOffloadDecision"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegProtocolOffloadDecision), REGISTRY_SIZE(RegProtocolOffloadDecision), 0, 0, 1}, // 0: disable, 1: enable - - {REGISTRY_STR("DMInitialGain"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDMInitialGain), REGISTRY_SIZE(bRegDMInitialGain), 1, 0, 1}, // 1 support pnp set oid, 0 unload driver when s3,s4 - //---------------------------------------------------------------------------- - - {REGISTRY_STR("GPIORFSW"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegGpioRfSw), REGISTRY_SIZE(bRegGpioRfSw), 1, 0, 1}, - - {REGISTRY_STR("GPIOHWPBC"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegHwWpsPbc), REGISTRY_SIZE(bRegHwWpsPbc), 0, 0, 1}, - - //---------------------------------------------------------------------------- - // Indicate event when receiving deauth/disassoc packet. If this registry is set false, the disconnected state shall be recovered by roaming. Impact on XP/MacOS - // 0: Not indicate, 1: Indicate - {REGISTRY_STR("IndicateByDeauth"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegIndicateByDeauth), REGISTRY_SIZE(RegIndicateByDeauth), 0, 0, 1}, - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - // Show Tx/Rx rate setting - {REGISTRY_STR("ShowRate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegShowRate), REGISTRY_SIZE(RegShowRate), 0, 0, 3}, // 0:determine by E-fuse, 1:forced Tx, 2:forced Rx, 3:forced Rx Max - //---------------------------------------------------------------------------- - // TKIP in N mode - {REGISTRY_STR("TKIPinNmode"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegTKIPinNmode), REGISTRY_SIZE(bRegTKIPinNmode), 0, 0, 1}, // 0:TKip ONLY B/G 1: TKIP will use N mode - // WEP in N mode - {REGISTRY_STR("WEPinNmode"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegWEPinNmode), REGISTRY_SIZE(bRegWEPinNmode), 0, 0, 1}, // 0:WEP ONLY B/G 1: WEP will use N mode - //---------------------------------------------------------------------------- - // WoWLAN mode. Added by tynli. 2009.09.01. - {REGISTRY_STR("APOffloadEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAPOffloadEnable), REGISTRY_SIZE(RegAPOffloadEnable), 0, 0, 1}, // 0: disable, 1: enable - // WoWLAN LPS. 0: disable, 1: enable LPS but not enter 32K, 2: enable LPS and enter 32K - {REGISTRY_STR("WoWLANLPSLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWoWLANLPSLevel), REGISTRY_SIZE(RegWoWLANLPSLevel), 0, 0, 2}, - {REGISTRY_STR("*WakeOnMagicPacket"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegWakeOnMagicPacket), REGISTRY_SIZE(bRegWakeOnMagicPacket), 0, 0, 1}, - {REGISTRY_STR("*WakeOnPattern"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegWakeOnPattern), REGISTRY_SIZE(bRegWakeOnPattern), 0, 0, 1}, - {REGISTRY_STR("WakeOnDisconnect"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegWakeOnDisconnect), REGISTRY_SIZE(bRegWakeOnDisconnect), 1, 0, 1}, - {REGISTRY_STR("WoWLANS5Support"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWoWLANS5Support), REGISTRY_SIZE(RegWoWLANS5Support), 0, 0, 1}, // 0: disable, 1: enable - // Connected standby LPS Listen Interval. 0xNN = 0xNN * BeaconIntvl - {NDIS_STRING_CONST("D2ListenIntvl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegD2ListenIntvl), REGISTRY_SIZE(RegD2ListenIntvl), 5, 1, 0xFF}, - {NDIS_STRING_CONST("bFakeWoWLAN"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegFakeWoWLAN), REGISTRY_SIZE(bRegFakeWoWLAN), 0, 0, 1}, // 0: disable, 1: enable - - {REGISTRY_STR("NLOEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegNLOEnable), REGISTRY_SIZE(RegNLOEnable), 0, 0, 1}, // 0: disable, 1: enable - // For AOAC reconnection policy. - {REGISTRY_STR("PnpKeepLink"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPnpKeepLink), REGISTRY_SIZE(RegPnpKeepLink), 0, 0, 1}, // 0: disable, 1: enable - {REGISTRY_STR("btHsMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegbtHsMode), REGISTRY_SIZE(RegbtHsMode), 2, 0, 2}, // 0: Force to disable HS mode, 1: Force to enable HS mode, 2: auto mode - //---------------------------------------------------------------------------- - {REGISTRY_STR("Velocity"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegVelocity), REGISTRY_SIZE(bRegVelocity), 1, 0, 1}, // 0:disable, 1: enable - // 2010/09/01 MH According to PM's request, we support dongle selective suspend mode switch. - {REGISTRY_STR("DongleSS"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDongleSS), REGISTRY_SIZE(bRegDongleSS), 0, 0, 1}, // 0:power down disable, 1:Power down enable,. - // 2011/02/16 MH Add for CU selective suspend workaroud temporarily. This is used to prevent CU GPIO HW floating. - {REGISTRY_STR("SSWakeCnt"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegSSWakeCnt), REGISTRY_SIZE(bRegSSWakeCnt), 60, 30, 2000}, // 30~2000=GPIO detect rounds. - - {REGISTRY_STR("*PacketCoalescing"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegPacketCoalescing), REGISTRY_SIZE(bRegPacketCoalescing), 1, 0, 1}, // 0: disable, 1: enable - //---------------------------------------------------------------------------- - {REGISTRY_STR("bTDLSEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegTDLSEnable), REGISTRY_SIZE(bRegTDLSEnable), 1, 0, 1}, - //---------------------------------------------------------------------------- - // Turn on/off Virtual wifi cpability. - {REGISTRY_STR("VWifiSupport"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegVWifiSupport), REGISTRY_SIZE(bRegVWifiSupport), 1, 0, 1}, // 0:Disabl Virtual Wifi support, 1:Enable - //vivi add this reg, 1230 - {REGISTRY_STR("DMDPMAC0VWifiSupport"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDMDPMAC0VWifiSupport), REGISTRY_SIZE(bRegDMDPMAC0VWifiSupport), 0, 0, 1}, // 0:Disabl Virtual Wifi support, 1:Enable - - {REGISTRY_STR("UseRxInterruptWorkItem"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegUseRxInterruptWorkItem), REGISTRY_SIZE(bRegUseRxInterruptWorkItem), 0, 0, 1}, // 0:Disable DisableRxInterruptWorkitem, 1:Enable DisableRxInterruptWorkitem. - {REGISTRY_STR("bRegDefaultAntenna"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDefaultAntenna), REGISTRY_SIZE(bRegDefaultAntenna), 1, 0, 1}, // 0 : Using Aux Antenna , 1 : Using Main Antenna - {REGISTRY_STR("AntDiv"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAntDiv), REGISTRY_SIZE(RegAntDiv), 2, 0, 2}, // 0:OFF , 1:ON, 2:From Efuse - {REGISTRY_STR("AntDetection"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAntDetection), REGISTRY_SIZE(RegAntDetection), 1, 0, 4}, // BIT0: Antenna Detection by Single Tone, BIT1: Antenna Detection by RSSI// TCP offload - {REGISTRY_STR("RegTCPOffloadMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTCPOffloadMode), REGISTRY_SIZE(RegTCPOffloadMode), 0, 0, 256}, // bit0 : IPV4 Tx, bit1 : IPV4 RX, bit5 : IPV6 Tx, bit6 : IPV6 RX - - - //---------------------------------------------------------------------------- - // For reset Tx hang on 88/92CUSB. 0=Disable, 1=Enable. Added by tynli. 2010.03.23. - {REGISTRY_STR("USBResetTxHang"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUSBResetTxHang), REGISTRY_SIZE(RegUSBResetTxHang), 0, 0, 1}, - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - // Extended TIM set. - // 0=Disable, 1=Enable - {REGISTRY_STR("APTimExtend"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAPTimExtend), REGISTRY_SIZE(RegAPTimExtend), 0, 0, 1}, - //---------------------------------------------------------------------------- - // 2010/05/18 MH For ECS quick GPIO detect timer function add three inf function. - {REGISTRY_STR("TimerGPIO"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegTimerGPIO), REGISTRY_SIZE(bRegTimerGPIO), 0, 0, 1}, // 0:Disable GPIO timer detect, 1:Enable GPIO timer detect,. - {REGISTRY_STR("GPIODelay"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegGPIODelay), REGISTRY_SIZE(bRegGPIODelay), 500, 100, 5000}, //100~5000 ms delay for GPIO detect scheme delay timer - {REGISTRY_STR("GPIOBack"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegGPIOBack), REGISTRY_SIZE(bRegGPIOBack), 250, 10, 5000}, //10~5000 ms delay for GPIO detect return callback timer delay - - // 2015/07/29 Gary For customized LEDStrategy. - {REGISTRY_STR("LedStrategy"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegLedStrategy), REGISTRY_SIZE(bRegLedStrategy), 64, 0, 64}, //0~63 led MODE, 64: Default LED Mode - - // 2010/08/25 MH According to PM's request, we support inf to switch power down mode. - {REGISTRY_STR("PDNMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegPDNMode), REGISTRY_SIZE(bRegPDNMode), 1, 0, 1}, // 0:power down disable, 1:Power down enable,. - - - // 2010/09/13 MH According to PM's request, we support different SS power seave level. - {REGISTRY_STR("SSPwrLvl"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegSSPwrLvl), REGISTRY_SIZE(bRegSSPwrLvl), 2, 0, 2}, // 0:~2=different SS power save level. Level 2 is the best one now. - - - // 2010/12/17 MH Add for RX aggregation mode switch according to TX/RX traffic. - {REGISTRY_STR("AggDMEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegAggDMEnable), REGISTRY_SIZE(bRegAggDMEnable), 1, 0, 2}, // 0/1/2=disable/enable/auto. - // use another thread to send packets. prevent BSOD by stack overflow - {REGISTRY_STR("SendPacketByTimer"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSendPacketByTimer), REGISTRY_SIZE(RegSendPacketByTimer), 0, 0, 1}, // 1: use timer to send packet, 0 : off - - // 2010/12/31 MH Add for UPHY dynamic chaneg. - {REGISTRY_STR("UPDMEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegUPDMEnable), REGISTRY_SIZE(bRegUPDMEnable), 1, 0, 2}, // 0/1/2=disable/enable/auto. - //---------------------------------------------------------------------------- - // Earlymode ctrl. 0=Disable, 1=Enable. by wl 20101012. - {REGISTRY_STR("bEarlymodeEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEarlymodeEnable), REGISTRY_SIZE(RegEarlymodeEnable), 0, 0, 1}, - - {REGISTRY_STR("bAutoAMPDUBurstMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAutoAMPDUBurstModeEnable), REGISTRY_SIZE(RegAutoAMPDUBurstModeEnable), 1, 0, 1}, - {REGISTRY_STR("AutoAMPDUBurstModeThreshold"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAutoAMPDUBurstModeThreshold), REGISTRY_SIZE(RegAutoAMPDUBurstModeThreshold), 92, 1, 256}, - {REGISTRY_STR("TxHignTPThreshold"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxHignTPThreshold), REGISTRY_SIZE(RegTxHignTPThreshold), 50, 1, 1000}, // Mbps - {REGISTRY_STR("RxHignTPThreshold"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRxHignTPThreshold), REGISTRY_SIZE(RegRxHignTPThreshold), 50, 1, 1000}, // Mbps - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - //Two STA Concurrent Mode: 0: Disable(MAC 0 5G/2.4G 2*2), 1: Enable(MAC 0 5G MAC 1 2.4G 1*1), 2: Auto(MAC 0 can upto 2*2 5G if MAC 1 disconnect) - {REGISTRY_STR("TwoStaConcurrentMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTwoStaConcurrentMode), REGISTRY_SIZE(RegTwoStaConcurrentMode), 0, 0, 2}, - //---------------------------------------------------------------------------- - // 2011/07/08 MH Add for Link Speed display for different customer. - {REGISTRY_STR("LinkSpeedLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegLinkSpeedLevel), REGISTRY_SIZE(bRegLinkSpeedLevel), 0, 0, 0xff}, // 0/~N= For different speed display. - - // 0: default, 1: real signal strength (Acer request), 2: HP special mode - {REGISTRY_STR("RSSI2GridMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRSSI2GridMode), REGISTRY_SIZE(RegRSSI2GridMode), 0, 0, 4}, - - // 2011/07/14 MH Add for rx short. - {REGISTRY_STR("RxSC"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegRxSC), REGISTRY_SIZE(bRegRxSC), 1, 0, 1}, // 0/1=disable/enable - // 2011/07/15 Sinda Add for tx short cut. - {REGISTRY_STR("TxSC"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegTxSC), REGISTRY_SIZE(bRegTxSC), 1, 0, 1}, // 0/1=disable/enable - - {REGISTRY_STR("PAMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPAMode), REGISTRY_SIZE(RegPAMode), PA_MODE_INTERNAL_SP3T, PA_MODE_EXTERNAL, PA_MODE_INTERNAL_SPDT}, - - // 2011/09/15 MH Add registry for switching packet compete method. - {REGISTRY_STR("TxMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxMode), REGISTRY_SIZE(RegTxMode), 0, 0x0, 0xF}, // 0x0~0xF. Different TX mode. - - // 2011/11/15 MH Add for user can select different region and map to dedicated power gain offset table. - {REGISTRY_STR("PwrTblSel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrTblSel), REGISTRY_SIZE(RegPwrTblSel), 0, 0x0, 0xF}, // 0x0~0xF. 1/2/3=ETSI/MKK/FCC - - // 0: Highest, 1: Medium-high, 2: Medium, 3: Medium-low, 4: Lowest - {REGISTRY_STR("TxPwrLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPwrLevel), REGISTRY_SIZE(RegTxPwrLevel), 0, 0, 4}, - - // 2011/11/15 MH Add for user can select different tx power by rate switch by default value and registry value. - {REGISTRY_STR("PwrByRate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrByRate), REGISTRY_SIZE(RegPwrByRate), 0, 0x0, 0x1}, // 0x0/1 = by default/ by registry. - {REGISTRY_STR("PwrRaTbl1"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl1), REGISTRY_SIZE(RegPwrRaTbl1), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 1 index diff. - {REGISTRY_STR("PwrRaTbl2"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl2), REGISTRY_SIZE(RegPwrRaTbl2), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 2 index diff. - {REGISTRY_STR("PwrRaTbl3"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl3), REGISTRY_SIZE(RegPwrRaTbl3), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 3 index diff. - {REGISTRY_STR("PwrRaTbl4"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl4), REGISTRY_SIZE(RegPwrRaTbl4), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 4 index diff. - {REGISTRY_STR("PwrRaTbl5"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl5), REGISTRY_SIZE(RegPwrRaTbl5), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 5 index diff. - {REGISTRY_STR("PwrRaTbl6"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl6), REGISTRY_SIZE(RegPwrRaTbl6), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 6 index diff. - {REGISTRY_STR("PwrRaTbl7"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl7), REGISTRY_SIZE(RegPwrRaTbl7), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 7 index diff. - {REGISTRY_STR("PwrRaTbl8"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl8), REGISTRY_SIZE(RegPwrRaTbl8), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 8 index diff. - {REGISTRY_STR("PwrRaTbl9"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl9), REGISTRY_SIZE(RegPwrRaTbl9), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 9 index diff. - {REGISTRY_STR("PwrRaTbl10"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl10), REGISTRY_SIZE(RegPwrRaTbl10), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 10 index diff. - {REGISTRY_STR("PwrRaTbl11"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl11), REGISTRY_SIZE(RegPwrRaTbl11), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 11 index diff. - {REGISTRY_STR("PwrRaTbl12"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl12), REGISTRY_SIZE(RegPwrRaTbl12), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 12 index diff. - {REGISTRY_STR("PwrRaTbl13"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl13), REGISTRY_SIZE(RegPwrRaTbl13), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 13 index diff. - {REGISTRY_STR("PwrRaTbl14"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl14), REGISTRY_SIZE(RegPwrRaTbl14), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 14 index diff. - {REGISTRY_STR("PwrRaTbl15"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl15), REGISTRY_SIZE(RegPwrRaTbl15), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 15 index diff. - {REGISTRY_STR("PwrRaTbl16"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPwrRaTbl16), REGISTRY_SIZE(RegPwrRaTbl16), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x???????? ==> For power table 16 index diff. - - //2011.09.23 LukeLee add for path diversity - {REGISTRY_STR("PathDiv"), 0,NdisParameterInteger, REGISTRY_OFFSET(bPathDivEnable), REGISTRY_SIZE(bPathDivEnable), 0, 0, 2}, // 0: disable PathDiv, 1: 1T PathDiv, 2: 2T PathDiv - - {REGISTRY_STR("DbgZone"), 0,NdisParameterString, REGISTRY_OFFSET(RegDbgZone), REGISTRY_SIZE(RegDbgZone), 0, 0, 128}, // 1 = Fix tx power - {REGISTRY_STR("DbgMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegDbgMode), REGISTRY_SIZE(bRegDbgMode), 0, 0, 1}, // 1 = Fix tx power - //---------------------------------------------------------------------------- - // 2011/12/08 hpfan Add for Tcp Reorder - {REGISTRY_STR("TcpReorder"), 0,NdisParameterInteger, REGISTRY_OFFSET(bTcpReorderEnable), REGISTRY_SIZE(bTcpReorderEnable), 0, 0, 1}, // 0: disable TcpReorder, 1: enable TcpReorder - - //2011.11.29 Sherry Add for Belkin 2.4G or 5G support different bandwidth - {REGISTRY_STR("BW40MHzFor2G"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegBW40MHzFor2G), REGISTRY_SIZE(bRegBW40MHzFor2G), 1, 0, 1}, // 1: 40MHz support, 0: 20MHz support. - {REGISTRY_STR("BW40MHzFor5G"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegBW40MHzFor5G), REGISTRY_SIZE(bRegBW40MHzFor5G), 1, 0, 1}, // 1: 40MHz support, 0: 20MHz support. - //---------------------------------------------------------------------------- - - //2012.01.04 Sherry Add for support txpacketbuffer coleose - {REGISTRY_STR("SupportTxPacketBufferColease"), 0,NdisParameterInteger, REGISTRY_OFFSET(bSupportTxPacketBufferColease), REGISTRY_SIZE(bSupportTxPacketBufferColease), 0, 0, 1}, - - //2012.02.06 Sherry Add for Belkin to switch band by end-user - {REGISTRY_STR("WirelessBand"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWirelessBand), REGISTRY_SIZE(RegWirelessBand), 2, 0, 2}, // 0:2.4G 1:5G, 2:Both - //---------------------------------------------------------------------------- - // 11n Sigma Support - {REGISTRY_STR("b40Intolerant"), 0,NdisParameterInteger, REGISTRY_OFFSET(bReg40Intolerant), REGISTRY_SIZE(bReg40Intolerant), 0, 0, 1}, // 0/1 = Disable / Enable - {REGISTRY_STR("bAMPDUManual"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegAMPDUManual), REGISTRY_SIZE(bRegAMPDUManual), 0, 0, 1}, // 0/1 = Disable / Enable - {REGISTRY_STR("TxSPStream"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxSPStream), REGISTRY_SIZE(RegTxSPStream), 0, 0, 2}, // 0/1/2 = AutoMax / 1SS / 2SS - {REGISTRY_STR("RxSPStream"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRxSPStream), REGISTRY_SIZE(RegRxSPStream), 0, 0, 2}, // 0/1/2 = AutoMax / 1SS / 2SS - // BIT0: Enable VHT Beamformer, BIT1: Enable VHT Beamformee - // BIT2:Enable VHT MU-MIMO AP, BIT3:Enable VHT MU-MIMO STA - // BIT4: Enable HT Beamformer, BIT5: Enable HT Beamformee - {REGISTRY_STR("BeamformCap"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegBeamformCap), REGISTRY_SIZE(RegBeamformCap), 0, 0, 0x33}, - {REGISTRY_STR("BeamformAutoTest"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegBeamformAutoTest), REGISTRY_SIZE(bRegBeamformAutoTest), 0, 0, 1}, - // Set BF Rf path number, 0 for auto, others for manual - {REGISTRY_STR("BeamformerCapRfNum"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegBeamformerCapRfNum), REGISTRY_SIZE(RegBeamformerCapRfNum), 0, 0, 0x4}, - {REGISTRY_STR("BeamformeeCapRfNum"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegBeamformeeCapRfNum), REGISTRY_SIZE(RegBeamformeeCapRfNum), 0, 0, 0x4}, - // BIT0: Enable VHT LDPC Rx, BIT1: Enable VHT LDPC Tx, BIT4: Enable HT LDPC Rx, BIT5: Enable HT LDPC Tx - {REGISTRY_STR("LdpcCap"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLdpc), REGISTRY_SIZE(RegLdpc), 0x33, 0, 0x33}, - // BIT0: Enable VHT STBC Rx, BIT1: Enable VHT STBC Tx, BIT4: Enable HT STBC Rx, BIT5: Enable HT STBC Tx - {REGISTRY_STR("StbcCap"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegStbc), REGISTRY_SIZE(RegStbc), 0x33, 0, 0x33}, - //---------------------------------------------------------------------------- - // 0:undefined, 1:USB2, 2:USB3 3: USB switch can detect RSSI 4: USB switch + long range 5: VL/VS/VN always USB20 - // 6: Reserve 8: Can U3 to U2, but forbid U2 to U3. - {REGISTRY_STR("UsbMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbMode), REGISTRY_SIZE(RegUsbMode), 0, 0, 2}, // 0:undefined, 1:USB2, 2:USB3 - {REGISTRY_STR("ForcedUsbMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegForcedUsbMode), REGISTRY_SIZE(RegForcedUsbMode),0, 0, 0xf}, // 0:undefined, 1:USB2, 2:USB3 - {REGISTRY_STR("UsbCurMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbCurMode), REGISTRY_SIZE(RegUsbCurMode), 0, 0, 2}, - - {REGISTRY_STR("UsbMode3To2Cnt"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbMode3To2Cnt), REGISTRY_SIZE(RegUsbMode3To2Cnt), 0, 0, 0xffff}, // 0:undefined, USB 3 transfer to 2 mode counter. - {REGISTRY_STR("UsbMode2To3Cnt"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbMode2To3Cnt), REGISTRY_SIZE(RegUsbMode2To3Cnt), 0, 0, 0xffff}, // 0:undefined, USB 2 transfer to 3 mode counter. - {REGISTRY_STR("UsbMode2To3CntFail"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbMode2To3CntFail), REGISTRY_SIZE(RegUsbMode2To3CntFail), 0, 0, 0xffff}, // 0:undefined, USB 2 transfer to 3 mode fail counter. - - {REGISTRY_STR("UsbSwFast"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSwFast), REGISTRY_SIZE(RegUsbSwFast),0, 0, 1}, // USB switch speed level - //20130523 MH add for NEC WPS check condition. - {REGISTRY_STR("UsbWps"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbWps), REGISTRY_SIZE(RegUsbWps), 0, 0, 0xff}, - //20130523 MH add for USB switch speed. - {REGISTRY_STR("UsbSp"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSp), REGISTRY_SIZE(RegUsbSp), 0, 0, 0xff}, - {REGISTRY_STR("UsbChnl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbChnl), REGISTRY_SIZE(RegUsbChnl), 0, 0, 0xff}, - {REGISTRY_STR("UsbSwitchSpeed"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSwitchSpeed), REGISTRY_SIZE(RegUsbSwitchSpeed),10, 0, 100}, // USB switch speed level - {REGISTRY_STR("UsbSwitchThL"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSwitchThL), REGISTRY_SIZE(RegUsbSwitchThL),35, 0, 100}, // RSSI Low Threshold to Switch USB - {REGISTRY_STR("UsbSwitchThH"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSwitchThH), REGISTRY_SIZE(RegUsbSwitchThH),45, 0, 100}, // RSSI High Threshold to Switch USB - {REGISTRY_STR("UsbSwitchThRssi"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSwitchThRssi), REGISTRY_SIZE(RegUsbSwitchThRssi),35, 0, 100}, // RSSI for first link to U2 or U3. - {REGISTRY_STR("UsbSwBy"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSwBy), REGISTRY_SIZE(RegUsbSwBy), 0, 0, 8}, // 0= by serverice, 1=by driver - {REGISTRY_STR("UsbRfSet"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbRfSet), REGISTRY_SIZE(RegUsbRfSet), 0, 0, 100}, // 0= by device and host mode compare, 1=by Default - - // 2012/09/14 MH Add for EDCA turbo mode switch threshold. - // 2012/09/14 MH Add for 88E rate adaptive mode siwtch. - {REGISTRY_STR("EdcaThresh"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEdcaThresh), REGISTRY_SIZE(RegEdcaThresh), 0x100, 0x0, 0xFFFF}, // 0x0~0xFFFF. The thresh to disable EDA turbo. - {REGISTRY_STR("RALvl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRALvl), REGISTRY_SIZE(RegRALvl), 0x2, 0x0, 0xF}, // 0x0~0xF. The Driver layer rate adaptive level. - - // 2012/10/26 MH Add for 8812/8821 AC series dynamic switch. for USB3.0 - // 2013/04/18 MH According to YX's test the below parameters will be better in iperf/chariot test. - {REGISTRY_STR("AcUsbDmaTime"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAcUsbDmaTime), REGISTRY_SIZE(RegAcUsbDmaTime), 0x1a, 0, 0xff}, - {REGISTRY_STR("AcUsbDmaSize"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAcUsbDmaSize), REGISTRY_SIZE(RegAcUsbDmaSize), 0x07, 0, 0xff}, - // 2013/04/18 MH Add USB2.0 Aggregation parameters - {REGISTRY_STR("AcUsbDmaTime2"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAcUsbDmaTime2), REGISTRY_SIZE(RegAcUsbDmaTime2), 0x10, 0, 0xff}, - {REGISTRY_STR("AcUsbDmaSize2"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAcUsbDmaSize2), REGISTRY_SIZE(RegAcUsbDmaSize2), 0x06, 0, 0xff}, - - // 2012/10/31 MH Add for power limit table constraint. - {REGISTRY_STR("TxPwrLimit"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPwrLimit), REGISTRY_SIZE(RegTxPwrLimit), 0xFFFFFFFF, 0, 0xFFFFFFFF}, // Limit different Rate power index. - // 0x10080604 ==> HT40/HT20/LegyctOFDM/CCK for example, HT40 max + 0x10 power index HT20 max +0x8 power index - {REGISTRY_STR("DecryptCustomFile"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDecryptCustomFile), REGISTRY_SIZE(RegDecryptCustomFile), 0, 0, 1}, - // Win8 FSS mode detection. 2012.09.13, by tynli. - {REGISTRY_STR("FSSDetection"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFSSDetection), REGISTRY_SIZE(RegFSSDetection), 0, 0, 1}, // 0: disable, 1: enable - - //20130117 Used for Invitation No/After to Pass, with skip scan when Go is connected - {REGISTRY_STR("GoSkipScanForWFDTest"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegGoSkipScanForWFDTest), REGISTRY_SIZE(RegGoSkipScanForWFDTest), 0x0, 0, 0x1}, - - //20130117 reserve an optional to Pass WFD which is used for skip scan when Client is connected - {REGISTRY_STR("ClientSkipScanForWFDTest"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegClientSkipScanForWFDTest), REGISTRY_SIZE(RegClientSkipScanForWFDTest), 0x0, 0, 0x1}, - - //20130314 sherry add for reset tx stuck - {REGISTRY_STR("EnableResetTxStuck"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableResetTxStuck), REGISTRY_SIZE(RegEnableResetTxStuck), 0, 0, 2}, - - //---------------------------------------------------------------------------- - //2013/02/05 zhiyuan add for Lenovo AMD Platform, wake up on lan need twice push power button (sleep mode) to go to sleep. need clear wake up status after wake up. - {REGISTRY_STR("ClearAMDWakeUpStatus"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegClearAMDWakeUpStatus), REGISTRY_SIZE(RegClearAMDWakeUpStatus), 0, 0, 1}, // 0/1 = disable/enable clear AMD wake up status. - - //20130415 For BT coexist with single antenna. - {REGISTRY_STR("DisableBTCoexist"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDisableBTCoexist), REGISTRY_SIZE(RegDisableBTCoexist), 0, 0, 1}, - - //20130606 MH For passive scan control dynamic switch after meeting with RF/FAE team. - {REGISTRY_STR("PassiveScan"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPassiveScan), REGISTRY_SIZE(RegPassiveScan), 0, 0, 0xFF}, // 0= by channel plan, 1=5g all passive scan / 2= 24g passive scan /3= 2/5g all passive scan - - // Set WFD Operating Channel - {REGISTRY_STR("WFDOpChannel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWFDOpChannel), REGISTRY_SIZE(RegWFDOpChannel), 0, 0, 11}, // 0: driver default value, 1~11: channel number - {REGISTRY_STR("WFDPeerOpChannel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWFDPeerOpChannel), REGISTRY_SIZE(RegWFDPeerOpChannel), 0, 0, 11}, // 0: driver default value, 1~11: channel number - {REGISTRY_STR("WFDTest"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegWFDTest), REGISTRY_SIZE(bRegWFDTest), 0, 0, 1}, - - // Add for v3006.0.0320.2014 WHQL submission. - {REGISTRY_STR("FixBTTdma"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFixBTTdma), REGISTRY_SIZE(RegFixBTTdma), 1, 0, 1}, // 0: disable, 1: enable - - //---------------------------------------------------------------------------- - // Device WHQL test "DPC ISR" for SDIO. Added by tynli, 2014.09.11. - {REGISTRY_STR("SdioDpcIsr"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSdioDpcIsr), REGISTRY_SIZE(RegSdioDpcIsr), 0, 0, 1}, // 0: disable, 1: enable - - //---------------------------------------------------------------------------- - // For Intel low power platform. 2013.11.18, by tynli. - {REGISTRY_STR("IntelPatchPNP"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegIntelPatchPNP), REGISTRY_SIZE(RegIntelPatchPNP), 0, 0, 1}, // 0: disable, 1: enable - - //---------------------------------------------------------------------------- - // For PCIE Gen1 to Gen 2. 2013.12.24, by gw. - {REGISTRY_STR("ForcePCIeRate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegForcePCIeRate), REGISTRY_SIZE(RegForcePCIeRate), 1, 0, 2},// 0: Auto 1:Gen1 24G 2:Gen2 5G - - //201401216 Yu Chen add for BB Adaptivity - {REGISTRY_STR("DCbackoff"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDCbackoff), REGISTRY_SIZE(RegDCbackoff), 4, 0, 16}, - //201401225 Yu Chen add for BB Adaptivity - {REGISTRY_STR("APNumTH"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAPNumTH), REGISTRY_SIZE(RegAPNumTH), 15, 0, 250}, - - //[Work Around] Force GO port to transmit 20M BW data temporarily, added by Roger, 2013.10.18. - {REGISTRY_STR("ForceGoTxData20MBw"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegForceGoTxData20MBw), REGISTRY_SIZE(RegForceGoTxData20MBw), 1, 0, 1}, // Default is 20M BW - - //20140702 hana add for USB WFD test, wait seconds before skip scan when Go is connected - {REGISTRY_STR("WaitBeforeGoSkipScan"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWaitBeforeGoSkipScan), REGISTRY_SIZE(RegWaitBeforeGoSkipScan), 0x0, 0, 0xFF}, - - // 2012/11/07 Awk add PowerBase for customers to define their power base. - {REGISTRY_STR("PowerBase"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPowerBase), REGISTRY_SIZE(RegPowerBase), 14, 0, 0xFF}, - - // 2012/11/23 Awk add for enabling/disabling power limit - {REGISTRY_STR("EnableTxPowerLimit"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableTxPowerLimit), REGISTRY_SIZE(RegEnableTxPowerLimit), 2, 0, 2}, - {REGISTRY_STR("EnableTxPowerByRate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableTxPowerByRate), REGISTRY_SIZE(RegEnableTxPowerByRate), 2, 0, 2}, - {REGISTRY_STR("TxPowerTraining"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPowerTraining), REGISTRY_SIZE(RegTxPowerTraining), 1, 0, 1}, - - // 2015/02/11 VincentL Add for primary/secondary power limit table selection (used as initial one) - {REGISTRY_STR("TxPowerLimitTableSel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPowerLimitTableSel), REGISTRY_SIZE(RegTxPowerLimitTableSel), 0, 0, 4}, - {REGISTRY_STR("TxPwrLmtDynamicLoading"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPwrLmtDynamicLoading), REGISTRY_SIZE(RegTxPwrLmtDynamicLoading), 0, 0, 1}, - - // 2015/04/27 VincentL Add for Toggle Support for TxPwrTable Dump Feature - {REGISTRY_STR("SupportTxPwrTableDump"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSupportTxPwrTableDump), REGISTRY_SIZE(RegSupportTxPwrTableDump), 0, 0, 1}, - - // 2015/02/25 VincentL Add for UEFI method - {REGISTRY_STR("LoadSystemSKUfromUEFI"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLoadSystemSKUfromUEFI), REGISTRY_SIZE(RegLoadSystemSKUfromUEFI), 0, 0, 1}, - {REGISTRY_STR("UEFIProfile"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUEFIProfile), REGISTRY_SIZE(RegUEFIProfile), 0, 0, 100}, - - // 2015/07/07 VincentL Add for SMBIOS method - {REGISTRY_STR("LoadSystemSKUfromSMBIOS"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLoadSystemSKUfromSMBIOS), REGISTRY_SIZE(RegLoadSystemSKUfromSMBIOS), 0, 0, 1}, - {REGISTRY_STR("LoadProcessorIDfromSMBIOS"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLoadProcessorIDfromSMBIOS), REGISTRY_SIZE(RegLoadProcessorIDfromSMBIOS), 0, 0, 1}, - - {REGISTRY_STR("PwrByRateFile"), 0,NdisParameterString, REGISTRY_OFFSET(RegPwrByRateFile), REGISTRY_SIZE(RegPwrByRateFile), (ADDR2DATA)&DefaultFileName, 0, 32}, - {REGISTRY_STR("PwrLimitFile"), 0,NdisParameterString, REGISTRY_OFFSET(RegPwrLimitFile), REGISTRY_SIZE(RegPwrLimitFile), (ADDR2DATA)&DefaultFileName, 0, 32}, - {REGISTRY_STR("SecondaryPwrLimitFile"), 0,NdisParameterString, REGISTRY_OFFSET(RegSecondaryPwrLimitFile), REGISTRY_SIZE(RegSecondaryPwrLimitFile), (ADDR2DATA)&DefaultFileName, 0, 32}, - - // 2013/01/23 VincentLan add for enabling/disabling IQK Firmware Offload - {REGISTRY_STR("IQKFWOffload"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegIQKFWOffload), REGISTRY_SIZE(RegIQKFWOffload), 0, 0, 1}, - - // 2013/04/16 VincentLan Add to switch Spur Calibration Method - {REGISTRY_STR("SpurCalMethod"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSpurCalMethod), REGISTRY_SIZE(RegSpurCalMethod), 0, 0, 1}, - - // 2013/11/23 VincentLan add for for KFree Feature Requested by RF David - {REGISTRY_STR("RfKFreeEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRfKFreeEnable), REGISTRY_SIZE(RegRfKFreeEnable), 0, 0, 2}, - - - {REGISTRY_STR("TxDutyEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxDutyEnable), REGISTRY_SIZE(RegTxDutyEnable), 0, 0, 1}, - - //2012.10.08 Sherry Add for Abcom to open EDCCA - {REGISTRY_STR("EDCCASupport"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegEDCCASupport), REGISTRY_SIZE(bRegEDCCASupport), 0, 0, 1}, // 1: 40MHz support, 0: 20MHz support. - - // 2012/07/24 MH Add for win8 usb whql tst & WFD multi channel. - // For WHCK Test support type. - {REGISTRY_STR("UseDefaultCID"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUseDefaultCID), REGISTRY_SIZE(RegUseDefaultCID), 0, 0, 0xff}, // 0/1/2=Read from EFUSE /Forced default CID/ Forced HCT_CID) - - // BT FW patched ROM Code control, added by Roger, 2011.11.23. - {REGISTRY_STR("BtFwSupport"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegBtFwSupport), REGISTRY_SIZE(bRegBtFwSupport), 0, 0, 1}, //0: Not support BT FW Download, 1: Support BT FW Download - - // For WHCK USB WFD test channel switch time. - {REGISTRY_STR("WfdTime"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWfdTime), REGISTRY_SIZE(RegWfdTime), 150, 0, 0xff}, // Multi Channel switch time - // For WHCK USB WFD Channel switch pattern. - {REGISTRY_STR("WfdChnl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWfdChnl), REGISTRY_SIZE(RegWfdChnl), 0, 0, 0xff}, // Multi Channel switch reported channel - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- - // Short GI support Bit Map - // BIT0 - 20MHz, 0: support, 1: non-support - // BIT1 - 40MHz, 0: support, 1: non-support - // BIT2 - 80MHz, 0: support, 1: non-support - // BIT3 - 160MHz, 0: support, 1: non-support - {REGISTRY_STR("ShortGISupport"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegShortGISupport), REGISTRY_SIZE(RegShortGISupport), 0xF, 0, 0xF}, - //---------------------------------------------------------------------------- - // 2012/11/06 Page Add for Power by rate DW/NByte access switch - // 0: disable, means Byte by Byte access BB reg, 1: enable, means DW access BB reg while set power by rate 2: enable, means N Byte access BB reg - {REGISTRY_STR("NByteAccess"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegNByteAccess), REGISTRY_SIZE(RegNByteAccess), 0, 0, 2}, - //---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- - // 2012/11/13 Page Add for Intial Offload by FW. 2012/11/27, page revise the definition: add FWOffload = 2 to indicate FW SW Channel offload - // 0: disable, means driver do the whole intial work by itself 1: enable, means FW will do some initial offload work for driver to save time - {REGISTRY_STR("FWOffload"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFWOffload), REGISTRY_SIZE(RegFWOffload), 0, 0, 2}, - //---------------------------------------------------------------------------- - // 0: download FW from file, 1: download FW from header - {REGISTRY_STR("DownloadFW"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDownloadFW), REGISTRY_SIZE(RegDownloadFW), 1, 0, 1}, - - // 0: Disable, 1: Enable - {REGISTRY_STR("FWQC"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFWQC), REGISTRY_SIZE(RegFWQC), 0, 0, 1}, - - // 2012/11/21 Sinda add for Scan time per channel - {REGISTRY_STR("ScanLarge"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegScanLarge), REGISTRY_SIZE(RegScanLarge), 0, 0, 1000}, - {REGISTRY_STR("ScanMiddle"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegScanMiddle), REGISTRY_SIZE(RegScanMiddle), 0, 0, 1000}, - {REGISTRY_STR("ScanNormal"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegScanNormal), REGISTRY_SIZE(RegScanNormal), 0, 0, 1000}, - {REGISTRY_STR("ScanActive"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegScanActive), REGISTRY_SIZE(RegScanActive), 0, 0, 1000}, - {REGISTRY_STR("ForcedScanPeriod"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegForcedScanPeriod), REGISTRY_SIZE(RegForcedScanPeriod), 0, 0, 1000}, - - // 0: No Preference, 1: 2.4G first, 2: 5G first - {REGISTRY_STR("PreferBand"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPreferBand), REGISTRY_SIZE(RegPreferBand), 0, 0, 2}, - - // 2012/11/28 MH Add for BB team AMDPU test requiremtn. - {REGISTRY_STR("AMfactor"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAMfactor), REGISTRY_SIZE(RegAMfactor), 7, 0, 0xff}, // AMPDU factor for HT/VHT. - - // 2012/11/28 MH Add for BB team AMDPU test requiremtn. - {REGISTRY_STR("VHTRSec"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegVHTRSec), REGISTRY_SIZE(RegVHTRSec), 0, 0, 0xFF}, // VHT support rate select. - - // Pre-transition for OID_PNP_SET_POWER OID wake up handling, added by Roger, 2012.11.28. - {REGISTRY_STR("PreTransPnP"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPreTransPnP), REGISTRY_SIZE(RegPreTransPnP), 0, 0, 1}, // 0: disable, 1: enable - - //---------------------------------------------------------------------------- - // 2012/12/06 Page Add for BW setting on Advanced Settings - // 0: 20 MHz only, 1: 20_40 MHz only, 2: 20_40_80 MHz - {REGISTRY_STR("BWSetting"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegBWSetting), REGISTRY_SIZE(RegBWSetting), 0, 0, 2}, - //---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- - {REGISTRY_STR("HWRTSEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegHWRTSEnable), REGISTRY_SIZE(bRegHWRTSEnable), 0, 0, 1}, // 0: disable, 1: enable - //---------------------------------------------------------------------------- - {REGISTRY_STR("TxPwrPercentage"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxPwrPercentage), REGISTRY_SIZE(RegTxPwrPercentage), TX_PWR_PERCENTAGE_3, TX_PWR_PERCENTAGE_0, TX_PWR_PERCENTAGE_3},// 0: 12.5% TxPwr percentage, 1: 25% TxPwr percentage, 2: 50% TxPwr percentage, 3: 100% TxPwr percentage - //---------------------------------------------------------------------------- - // Fw scan offload type. 2013.01.30, Added by tynli. - // 0: disable, 1: D0 scan offload, 2: D3 scan offload, 3: D0 and D3 both support. - {REGISTRY_STR("ScanOffloadType"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegScanOffloadType), REGISTRY_SIZE(RegScanOffloadType), 0, 0, 3}, - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - // 2013/02/05 MH Add registry for Disable scan ability when linked with AP. - {REGISTRY_STR("StreamMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegStreamMode), REGISTRY_SIZE(RegStreamMode), 0, 0, 1}, - //---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- - // 2013/02/06 MH Add Transmit power control level for all customer in the future. - // 2013/03/07 MH ASUS request more function for 5G. - {REGISTRY_STR("TPCLvl"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTPCLvl), REGISTRY_SIZE(RegTPCLvl), 0, 0, 0xFF}, // THis is a real dbm value one is 0.5db. - {REGISTRY_STR("TPCLvlD"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTPCLvlD), REGISTRY_SIZE(RegTPCLvlD), 0, 0, 0xFF}, // THis is a real dbm value one is 0.5db. - {REGISTRY_STR("TPCLvl5g"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTPCLvl5g), REGISTRY_SIZE(RegTPCLvl5g), 0, 0, 0xFF}, // THis is a real dbm value one is 0.5db. - {REGISTRY_STR("TPCLvl5gD"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTPCLvl5gD), REGISTRY_SIZE(RegTPCLvl5gD), 0, 0, 0xFF}, // THis is a real dbm value one is 0.5db. - //---------------------------------------------------------------------------- - - //20141113 Gibson add mix protection mode - {REGISTRY_STR("ProtectionMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegProtectionmode), REGISTRY_SIZE(RegProtectionmode), 1, 0, 1},// 0: rts/cts, 1: cts-to-self - - //20130305 Sinda add for BB adaptivity - {REGISTRY_STR("EnableAdaptivity"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableAdaptivity), REGISTRY_SIZE(RegEnableAdaptivity), 2, 0, 2},// 0:disable, 1: Enable, 2: Auto - {REGISTRY_STR("L2HForAdaptivity"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegL2HForAdaptivity), REGISTRY_SIZE(RegL2HForAdaptivity), 0, 0, 0xFF}, // F5, F3, F1, EF pattern for customer - {REGISTRY_STR("HLDiffForAdaptivity"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegHLDiffForAdaptivity), REGISTRY_SIZE(RegHLDiffForAdaptivity), 0, 0, 9}, // 7, 9 pattern for customer - //20140124 Yu Chen add for BB CarrierSense - {REGISTRY_STR("EnableCarrierSense"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableCarrierSense), REGISTRY_SIZE(RegEnableCarrierSense), 0, 0, 1}, - //20140710 Yu Chen add for BB NHMEnable - {REGISTRY_STR("NHMEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegNHMEnable), REGISTRY_SIZE(RegNHMEnable), 0, 0, 1}, - //20140716 Yu Chen add for BB DynamicLink Adaptivity - {REGISTRY_STR("DynamicLinkAdaptivity"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDmLinkAdaptivity), REGISTRY_SIZE(RegDmLinkAdaptivity), 0, 0, 1}, - - // 0: disable, 1: enable - {REGISTRY_STR("PacketDrop"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPacketDrop), REGISTRY_SIZE(RegPacketDrop), 1, 0, 1}, - - - //20130520 MH add for NEC check condition. - {REGISTRY_STR("SifsThresh"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSifsThresh), REGISTRY_SIZE(RegSifsThresh), 0, 0, 0xff}, - - - //For HP System logo - {REGISTRY_STR("bCustomizedScanPeriod"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegbCustomizedScanPeriod), REGISTRY_SIZE(RegbCustomizedScanPeriod), 0, 0, 1}, // 0: disable, 1: enable - {REGISTRY_STR("IntelCustomizedScanPeriod"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegIntelCustomizedScanPeriod), REGISTRY_SIZE(RegIntelCustomizedScanPeriod), 100, 1, 200}, //in ms - {REGISTRY_STR("AMDCustomizedScanPeriod"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAMDCustomizedScanPeriod), REGISTRY_SIZE(RegAMDCustomizedScanPeriod), 100, 1, 200}, //in ms - //---------------------------------------------------------------------------- - - // For Lenovo Mutual Authentication function, added by Roger, 2013.05.03. - {REGISTRY_STR("EnableMA"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegEnableMA), REGISTRY_SIZE(RegEnableMA), 1, 0, 1}, // 0: disable, 1: enable - //---------------------------------------------------------------------------- - {REGISTRY_STR("VhtWeakSecurity"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegVhtWeakSecurity), REGISTRY_SIZE(RegVhtWeakSecurity), 0, 0, 3}, // 0: disable, BIT1: tkip, BIT1: wep - //---------------------------------------------------------------------------- - - - //20130614 MH add for Edimax firmware load fail workaround~!.. - {REGISTRY_STR("Fwload"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFwload), REGISTRY_SIZE(RegFwload), 1, 0, 0xf}, // 0=original location, 1=the last block use 4 bytes! - - //20151013 Sean moidy "ViaU3" to "UsbSafetySwitch"as a bit-oriented registry for USB workaround switch - {REGISTRY_STR("UsbSafetySwitch"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegUsbSafetySwitch), REGISTRY_SIZE(RegUsbSafetySwitch), 0, 0, 0xf}, //See RT_UsbSafetySwitch_Bits - - {REGISTRY_STR("IsAMDIOIC"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegIsAMDIOIC), REGISTRY_SIZE(RegIsAMDIOIC), 0, 0, 1}, // 0: disable, 1: enable - - //20130822 MH add for response ack power tx agc offset for 8811au DNI case. It may be used for other IC - {REGISTRY_STR("RspPwr"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRspPwr), REGISTRY_SIZE(RegRspPwr), 0, 0, 0xf}, // Default response ack power offset. - - // For FW support FCS - {REGISTRY_STR("MultiChannelFcsMode"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMultiChannelFcsMode), REGISTRY_SIZE(RegMultiChannelFcsMode), 0, 0, 9}, // 0: disable, 1:enable FwFCS (ping), 2:enable FwFCS (throughput) - {REGISTRY_STR("MultiChannelFcsNoA"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMultiChannelFcsNoA), REGISTRY_SIZE(RegMultiChannelFcsNoA), 40, 0, 80}, // Minimum: 30, Maximum: 80 (Unit: sTU) - {REGISTRY_STR("MCCNoAStartTime"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMCCNoAStartTime), REGISTRY_SIZE(RegMCCNoAStartTime), 30, 10, 90}, // Minimum: 10, Maximum: 90 (Unit: sTU, reference GO's TBTT) - {REGISTRY_STR("MCCStaBeaconTime"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMCCStaBeaconTime), REGISTRY_SIZE(RegMCCStaBeaconTime), 40, 15, 85}, // Minimum: 15, Maximum: 85 (Unit: sTU, reference GO's TBTT) - {REGISTRY_STR("MCCQPktLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegMCCQPktLevel), REGISTRY_SIZE(RegMCCQPktLevel), 6, 0, 0x0f}, // 0: default, 1: by MacIdSleep, 2: by driver drop, 3: by macid drop - - {REGISTRY_STR("ConnectionConfigTimeIntv"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegConnectionConfigTimeIntv), REGISTRY_SIZE(RegConnectionConfigTimeIntv), 200, 100, 500}, - {REGISTRY_STR("bScanTimeCheck"), 0,NdisParameterInteger, REGISTRY_OFFSET(bRegScanTimeCheck), REGISTRY_SIZE(bRegScanTimeCheck), 0, 0, 1}, - - // Set retry limit - {REGISTRY_STR("RetryTimes"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRetryTimes), REGISTRY_SIZE(RegRetryTimes), 0, 0, 48}, - - //20131004 MH add for driver indicate packet to OS layer. But in fact, this should be zero. Only OS after win7 support the feature. - {REGISTRY_STR("PktIndicate"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPktIndicate), REGISTRY_SIZE(RegPktIndicate), 0, 0, 0xffffffff}, // Default Rx packet filter indicate type. - - //21031018 Sean add for 8812 performance mode page size adjustment, format: pubQ:HQ:LQ:NQ - {REGISTRY_STR("WmmPage"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegWmmPage), REGISTRY_SIZE(RegWmmPage), 0xDB101000, 0, 0xffffffff}, //page size for each queue, each in one byte, pubQ:HQ:LQ:NQ . - {REGISTRY_STR("DisableAC"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegDisableAC), REGISTRY_SIZE(RegDisableAC), 0, 0, 1}, // 1: to disable AC wirlessmode - {REGISTRY_STR("LedInterval"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegLedInterval), REGISTRY_SIZE(RegLedInterval), 1000, 0, 0xffffffff}, // LED blink interval in ms for Alpha - {REGISTRY_STR("8814auEfuse"), 0,NdisParameterInteger, REGISTRY_OFFSET(Reg8814auEfuse), REGISTRY_SIZE(Reg8814auEfuse), 0, 0, 1}, // 1 to used to update 8814au efuse 0x0E bit 4 to 1 - // 8814A TX: 3/2/1/0/AUX=BIT7/6/5/4 RX: 3/2/1/0/AUX=BIT3/2/1/0 - // For example RF= 3T4R = 0xEF=239, RF= 3T3R = 0xEE = 238 RF=2T2R = b01100110 = 0x66 = 102. RF = 1T1R = 0x22 = 34 - //8814aValidRFPath BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 HEX Decimal Remark - //RF-TX RF-RX - // 3 2 1 AUX 3 2 1 AUX - // 3T4R 1 1 1 0 1 1 1 1 0xEF 239 3T4R default setting - // 3T3R 1 1 1 0 1 1 1 0 0xEE 238 - // 2T2R 0 1 1 0 0 1 1 0 0x66 102 - // 1T1R 0 0 1 0 0 0 1 0 0x22 34 - - // 4T4R 1 1 1 1 1 1 1 1 0xFF 255 Revise Reg to support - // Use WlanCLI_20150326 to execute write reg dowrd 93c 003c0642 / write reg dword 940 093f93f0 - // 2T4R 0 1 1 0 1 1 1 1 0x6F 111 sample - // ?T?R - {REGISTRY_STR("ValidRFPath"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegValidRFPath), REGISTRY_SIZE(RegValidRFPath), 0, 0, 0xff}, - {REGISTRY_STR("PreInitMem"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegPreInitMem), REGISTRY_SIZE(RegPreInitMem), 0, 0, 1}, - {REGISTRY_STR("88EIOTAction"), 0,NdisParameterInteger, REGISTRY_OFFSET(Reg88EIOTAction), REGISTRY_SIZE(Reg88EIOTAction), 0, 0, 1}, - - //---------------------------------------------------------------------------- - {REGISTRY_STR("bcndelay"), 0,NdisParameterInteger, REGISTRY_OFFSET(Regbcndelay), REGISTRY_SIZE(Regbcndelay), 0, 0, 0xffffffff}, // For beacon delay mechanism, - //---------------------------------------------------------------------------- - // Download Fw by ROM. - {REGISTRY_STR("RomDLFwEnable"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRomDLFwEnable), REGISTRY_SIZE(RegRomDLFwEnable), 0, 0, 1}, // 0: disable, 1: enable - //---------------------------------------------------------------------------- - // Power off by Fw. RF on/off and IPS in 32K - {REGISTRY_STR("bFwCtrlPwrOff"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFwCtrlPwrOff), REGISTRY_SIZE(RegFwCtrlPwrOff), 0, 0, 1}, // 0: disable, 1: enable - // Card disable, shutdown in 32K - {REGISTRY_STR("CardDisableInLowClk"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegCardDisableInLowClk), REGISTRY_SIZE(RegCardDisableInLowClk), 0, 0, 1}, // 0: disable, 1: enable - // FW IPS level. 0: not enter 32K, 1: enter 32K - {REGISTRY_STR("FwIPSLevel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegFwIPSLevel), REGISTRY_SIZE(RegFwIPSLevel), 1, 0, 1}, - //---------------------------------------------------------------------------- - // For P2P auto channel selection mechanism, added by Roger, 2014.05.15. -#if(AUTO_CHNL_SEL_NHM == 1) - {REGISTRY_STR("AutoChnlSel"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegAutoChnlSel), REGISTRY_SIZE(RegAutoChnlSel), 0, 0, 1}, // 0: disable, 1: enable -#endif - - - // WDI LE Hang Detection and Recovery, added by Roger. - {REGISTRY_STR("HangDetection"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegHangDetection), REGISTRY_SIZE(RegHangDetection), 0, 0, 1}, // 0: disable, 1: enable - - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - // Rx power state workaround for SDIO. Added by tynli, 2014.09.09. - {REGISTRY_STR("RxPsWA"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegRxPsWorkAround), REGISTRY_SIZE(RegRxPsWorkAround), 0, 0, 1}, // 0: disable, 1: enable - //---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- - // NBL wait queue workaround. Added by tynli, 2015.01.15. - {REGISTRY_STR("NblRacingWA"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegNblRacingWA), REGISTRY_SIZE(RegNblRacingWA), 0, 0, 1}, // 0: disable, 1: enable - - //---------------------------------------------------------------------------- - // SDIO polling interrupt in interrupt handler. Added by tynli, 2015.01.16. - {REGISTRY_STR("SdioPollIntrHandler"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSdioPollIntrHandler), REGISTRY_SIZE(RegSdioPollIntrHandler), 0, 0, 1}, // 0: disable, 1: enable - {REGISTRY_STR("SdioIntrPollingLimit"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSdioIntrPollingLimit), REGISTRY_SIZE(RegSdioIntrPollingLimit), 50, 0, 0xffff}, // polling count - //---------------------------------------------------------------------------- - - //---------------------------------------------------------------------------- - // Specifies whether to disable P2P_SUPPORT_STATE_RTK_SUPPORT, default is 2 (auto) - // 0: not to disable rtk supported p2p, - // 1: to disable rtk supported p2p, - // 2: auto - {REGISTRY_STR("DisableRtkSupportedP2P"), 0, NdisParameterInteger, REGISTRY_OFFSET(RegDisableRtkSupportedP2P), REGISTRY_SIZE(RegDisableRtkSupportedP2P), 2, 0, 2}, - //---------------------------------------------------------------------------- - - // 20150715 MH N6 Send packet complete immediately for small each TX packet like multicast RTP script. - // Bit15 = enable=1 or disable=0 biit 0~14 copy for local buffer number - // According to 8192EU test in XP/win7 with multicast small each send packet, the performance can improve as USB-559 description. - //The registry is the ratio to send packet by copy packet after receivein the NDIS packet or NBL buffer. - {REGISTRY_STR("TxSendAsap"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegTxSendAsap), REGISTRY_SIZE(RegTxSendAsap), 0x0000, 0, 0xffff}, // Bit15 = enable=1 or disable=0 biit 0~14 copy for local buffer number - - // MAC Address Randomization WDI - {REGISTRY_STR("SupportMACRandom"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSupportMACRandom), REGISTRY_SIZE(RegSupportMACRandom), 0, 0, 1}, - - // Cancel and suspend programmed Timer before entering Dx low power state to resolve premature wake from Mobile SoC off, added by Roger, 2016.01.15 - {REGISTRY_STR("SuspendTimerInLowPwr"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSuspendTimerInLowPwr), REGISTRY_SIZE(RegSuspendTimerInLowPwr), 0, 0, 1}, - - // eCSA support WDI - {REGISTRY_STR("SupportECSA"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSupportECSA), REGISTRY_SIZE(RegSupportECSA), 0, 0, 1}, - - // Fast transition 11r WDI - {REGISTRY_STR("SupportFT"), 0,NdisParameterInteger, REGISTRY_OFFSET(RegSupportFT), REGISTRY_SIZE(RegSupportFT), 0, 0, 1}, - //---------------------------------------------------------------------------- - //---------------------------------------------------------------------------- - -}; - - -#define COM_NUM_REG_PARAMS (((ULONG)sizeof(CommonRegTable)) / ((ULONG)sizeof(MP_REG_ENTRY))) - -#endif diff --git a/network/wlan/WDI/HEADER/RmDef.h b/network/wlan/WDI/HEADER/RmDef.h deleted file mode 100644 index ed5cddde..00000000 --- a/network/wlan/WDI/HEADER/RmDef.h +++ /dev/null @@ -1,619 +0,0 @@ -#ifndef __INC_RMTYPE_H -#define __INC_RMTYPE_H - -#define CCX_RM_CONFG_DELAY 20 // in ms, determine the needed time to config HW time before performing RM reuest. - -// -// Radio Measurement Requests. -// -#define MAX_RM_REQ_ELES_BUF 1600 - -#define TSM_TIMER_PERIOD 100 // in ms - -#define CCX4_TSM_MIN_INTERVAL 977 // in TU, Ref CCX4 S56.5.1, 1 sec = 977 TU. -#define CCX4_TSM_MAX_INTERVAL 9766 // in TU, Ref CCX4 S56.5.1, 10 sec = 9766 TU. -#define DOT11K_NUM_RPI 11 - -// -// RM basic type. 11k or CCX. -// -typedef enum _RT_RM_BASIC_TYPE{ - RT_RM_BASIC_CCX, // CCX type - RT_RM_BASIC_11K, // 11k type - RT_RM_BASIC_LOCAL, // Local perform 11k rm -}RT_RM_BASIC_TYPE; - -typedef struct _RT_RM_REQUESTS{ - // RM basic type (11k or CCX) - RT_RM_BASIC_TYPE RmBasicType; - - // Source address from the request - u1Byte SrcAddr[6]; - - // Destination of the Radio Measurement Request frame. - u1Byte DestAddr[6]; - - // Maximal measurement duration in these requests, in TU. - u2Byte MaxDuration; - - // Relative start time in us. - u4Byte StartTime; - - // Dialog Token. - u2Byte DialogToken; - - // Buffer of Measurement Request elements. - u1Byte MeasReqElesBuf[MAX_RM_REQ_ELES_BUF]; - OCTET_STRING osMeasReqEles; - - // # of Repeatitions of measurements of dot11k RM - u2Byte Repetitions; -}RT_RM_REQUESTS, *PRT_RM_REQUESTS; - - -// -// Radio Measurement Reports. -// -#define MAX_RM_RPT_ELES_BUF 1500 -typedef struct _RT_RM_REPORTS{ - // This rm report is valid - BOOLEAN bValid; - - // Autonomous measurement report or not. - BOOLEAN bAutonomous; - - // Dialog Token. - u2Byte DialogToken; - - // Buffer of Measurement Request elements. - u1Byte MeasRptElesBuf[MAX_RM_RPT_ELES_BUF]; - OCTET_STRING osMeasRptEles; -}RT_RM_REPORTS, *PRT_RM_REPORTS; - -typedef struct _TSM_INFO{ - u1Byte State; // 1: Enable, 0: disable. - u2Byte MeasurementInterval; // in TU. - u2Byte TimeOutTickNum; // # of tick before timeout, unit of tick is TSM_TIMER_PERIOD. - u2Byte TickCounter; // A counter to keep tick passed since last timeout event. -}TSM_INFO, *PTSM_INFO; - -// -// Wrapper class of Radio Measurement related stuff. -// -typedef struct _RT_RM_INFO{ - DECLARE_RT_OBJECT(RT_RM_INFO); - - // TRUE if we are CCX RM capable, FALSE o.w.. - BOOLEAN bRegCcxRm; - - // TRUE if current BSS is CCX Radio Measurement Enable, FALSE o.w.. - BOOLEAN bBssCcxRmEnable; - - // TRUE if we are doing one of request in RmRequests, FALSE otherwise. - // Note that, it is protected by RT_RM_SPINLOCK. - BOOLEAN bGoingOn; - - // Postive value means upper limit of non-serving channel measurment duration, - // in unit of TU. 0 means unlimited, postive value - u2Byte OffLineDurUpLimit; - - // Radio Measurement Requests to handle. - RT_RM_REQUESTS RmRequests; - - // Radio Measurement Reports to RmRequests. - RT_RM_REPORTS RmReports; - - - // Hash table to keep frame report result. - // Note that, hFrameReportTable and related operation are protected by RT_RM_SPINLOCK. - RT_HASH_TABLE_HANDLE hFrameReportTable; - - // TRUE if we have to update singal strength of the received frame. - BOOLEAN bMonitorStaPower; - - // Traffic Stream Metrics related. - TSM_INFO TsmInfo[MAX_STA_TS_COUNT]; // Information about TSM for each TS. - RT_TIMER TsmTimer; // TSM timer, see TSM_TIMER_PERIOD for its timeout period. - u1Byte TsmTimerRefCnt; // Number of TS using TsmTimer. - RT_RM_REPORTS TsmReport; // Buffer and setting for the IAPP frame with TSM report. - - // CCX Radio Measurement /dot11k RM workitem - RT_WORK_ITEM RmWorkitem; - - // Dot11k max measurment duration - u2Byte RrmMaxOpChnlDur; // RRM Operating Channel Max Measurement Duration - u2Byte RrmMaxNonOpChnlDur; // RRM Non-Operating Channel Max Measurement Duration. -}RT_RM_INFO, *PRT_RM_INFO; - - -// Parameters for HAL to perform a Radio Measurement. -typedef struct _RT_RM_REQ_PARAM{ - // TRUE to clear previous result before starting measurement; - // FALSE to accumulate measurement result. - BOOLEAN bToClear; - - // Measurement duration in TU. - u1Byte Duration; -}RT_RM_REQ_PARAM, *PRT_RM_REQ_PARAM; - -// Ref: CCX 2 spec, Table S36-5 -#define CCX_RM_STATE_NORMAL 1 - -// Ref: CCX 2 spec, Table S36-7 -#define BCN_REQ_PASSIVE_SCAN 0 -#define BCN_REQ_ACTIVE_SCAN 1 -#define BCN_REQ_BEACON_TABLE 2 - - -// Ref: CCX 2 spec, Figure S36-6 -typedef struct _BEACON_REQUEST{ - u1Byte ChannelNumber; - u1Byte ScanMode; - u2Byte MeasurementDuration; // In TU. -}BEACON_REQUEST, *PBEACON_REQUEST; - - -// Ref: CCX 2 spec, Table 36-9 -#define BCN_RPT_PHY_FH 1 -#define BCN_RPT_PHY_DSS 2 -#define BCN_RPT_PHY_UNUSED 3 -#define BCN_RPT_PHY_OFDM 4 -#define BCN_RPT_PHY_HIGH_RATE_DSS 5 -#define BCN_RPT_PHY_ERP 6 - -// -// Max number of STA to monitor, it is bound to size of frame report: -// (1514 - 12 - 24 - 8 - 4) / 14 = 104.14. -// I pick 64 for computaion time and memory space consideration. -// 070608, by rcnjko. -// -#define MAX_NUM_FRPT_ELEMENT 64 - - -// Ref: CCX 2 spec, Figure S36-14. -typedef struct _FRPT_ELEMENT{ - u1Byte TA[6]; // MAC address of transmitter STA. - u1Byte Bssid[6]; // BSSID of the transmitter STA. - s1Byte AvgRxPower; // In dBm. Average signal strength of the 802.11 frame recevied fro mthe transmitter STA. - u1Byte NumFrames; // Number of frames received from the transmitter STA. -}FRPT_ELEMENT, *PFRPT_ELEMENT; - -// Ref: CCX 2 spec, Figure S36-7. -typedef struct _FRAME_REQUEST{ - u1Byte ChannelNumber; - u1Byte Spare; - u2Byte MeasurementDuration; // In TU. -}FRAME_REQUEST, *PFRAME_REQUEST; - - - -typedef struct _FRAME_REPORT{ - u1Byte ChannelNumber; - u1Byte Spare; - u2Byte MeasurementDuration; // In TU. - FRPT_ELEMENT Element[1]; -}FRAME_REPORT, *PFRAME_REPORT; - -// -// Signal strength of a STA. -// It is a value object used in the hash table, hFrameReportTable. -// -typedef struct _RT_RM_STA_POWER{ - // - // We will use TA and BSSID as key to hash. - // - DECLARE_RT_HASH_ENTRY; - - int RxSignalSum; // in dBm, sum of signal power of frames received. - int NumFrames; // number of frames received. -}RT_RM_STA_POWER, *PRT_RM_STA_POWER; - -// -// Hash function associated with RT_RM_STA_POWER. -// -#define RM_STA_RX_POWER_KEY_SIZE 12 - - - -// Ref: CCX 2 spec, Figure S36-8 -typedef struct _CHANNEL_LOAD_REQUEST{ - u1Byte ChannelNumber; - u1Byte Spare; - u2Byte MeasurementDuration; // In TU. -}CHANNEL_LOAD_REQUEST, *PCHANNEL_LOAD_REQUEST; - - -// Ref: CCX2 spec, Figure S36-15 -typedef struct _CHANNEL_LOAD_REPORT{ - u1Byte ChannelNumber; - u1Byte Spare; - u2Byte MeasurementDuration; // In TU. - u1Byte CcaBusyFraction; // 0 - 255. -}CHANNEL_LOAD_REPORT, *PCHANNEL_LOAD_REPORT; - - -// Ref: CCX 2 spec, Figure S36-9 -typedef struct _NOISE_HISTOGRAM_REQUEST{ - u1Byte ChannelNumber; - u1Byte Spare; - u2Byte MeasurementDuration; // In TU. -}NOISE_HISTOGRAM_REQUEST, *PNOISE_HISTOGRAM_REQUEST; - - -// Ref: CCX 2 spec, Table 36-11 -#define CCX_RPI_0_POWER -87 -#define CCX_RPI_1_POWER -82 -#define CCX_RPI_2_POWER -77 -#define CCX_RPI_3_POWER -72 -#define CCX_RPI_4_POWER -67 -#define CCX_RPI_5_POWER -62 -#define CCX_RPI_6_POWER -57 - - -// Ref: CCX 2 spec, Figure S36-16 -#define NUM_RPI 8 -typedef struct _NOISE_HISTOGRAM_REPORT{ - u1Byte ChannelNumber; - u1Byte Spare; - u2Byte MeasurementDuration; // In TU. - - // Each entry is an index ranged from 0 to 255. - u1Byte RpiDensity[NUM_RPI]; -}NOISE_HISTOGRAM_REPORT, *PNOISE_HISTOGRAM_REPORT; - - -// Ref: CCX 2 spec, Figure S36-5 -#define RM_REQ_MODE_PARALLEL BIT0 -#define RM_REQ_MODE_ENABLE BIT1 -#define RM_REQ_MODE_REPORT BIT3 - - -// Ref: CCX 2 spec, Table S36-6. -#define RM_TYPE_UNUSED 0 -#define RM_TYPE_CHANNEL_LOAD 1 -#define RM_TYPE_NOISE_HISTOGRAM 2 -#define RM_TYPE_BEACON 3 -#define RM_TYPE_FRAME 4 -#define RM_HIDDEN_NODE 5 -#define RM_TYPE_TSM_V4 6 -#define RM_TYPE_TSM_V5 8 -#define RM_TYPE_STATISTICS 10 // CCXv5 S66-Roaming and Real-time Diagnostics Event Log for STA statistics - - -// -// Measurement Request Element. -// Ref: CCX 2 spec, S36.7 -// -typedef struct _MEASUREMENT_REQUEST_ELEMENT{ - u2Byte MeasurementToken; - u1Byte MeasurementMode; - u1Byte MeasurementType; - u1Byte MeasurementRequest[1]; -}MEASUREMENT_REQUEST_ELEMENT, *PMEASUREMENT_REQUEST_ELEMENT; - - -// Ref: CCX 2 spec, Figure S36-12 -#define RM_RPT_MODE_PARALLEL BIT0 -#define RM_RPT_MODE_INCAPABLE BIT1 -#define RM_RPT_MODE_REFUSED BIT2 - - -// -// Measurement Report Element. -// Ref: CCX 2 spec, S36.13 -// Measurement Report format: -// || Element ID || Length || Measurement Token || Measurement Mode || Measurement Type || Measurement Report || -// || 2 Byte || 2 Byte || 2 Byte || 1 Byte || 1 Byte || veriable || -// -typedef struct _MEASUREMENT_REPORT_ELEMENT{ - u2Byte MeasurementToken; - u1Byte MeasurementMode; - u1Byte MeasurementType; - u1Byte MeasurementReport[1]; -}MEASUREMENT_REPORT_ELEMENT, *PMEASUREMENT_REPORT_ELEMENT; - -// -// Traffic Stream Metrics IE. -// Ref: CCX 4 spec, S56.5.1. -// -typedef struct _TSM_IE{ - u1Byte TSID; - u1Byte State; // 1: Enable, 0: disable. - u2Byte MeasurementInterval; // in TU. -}TSM_IE, *PTSM_IE; - -#define TSM_IE_STATE_DISABLE 0 -#define TSM_IE_STATE_ENABLE 1 - -#define CISCO_AIRONET_SNAP_LENGTH 8 - -// -// Radio Measurement Request frame body. -// Ref: CCX 2 spec, Figure S36-1. -// -typedef struct _RM_CCX_REQUEST_PACKET{ - u1Byte SnapHeader[CISCO_AIRONET_SNAP_LENGTH]; // Cisco Aironet SNAP header: AAAA 0300 4096 0000 - u2Byte IappIdLen; // 0x0nnn, 0x0: IAPP control message, 0xnnn: length from IAPP ID & Length to end of the packet. - u1Byte IappType; // 0x32 indicates Radio Measurement. - u1Byte IappSubtype; // 0x01 indicates request. - u1Byte DstAddr[6]; // Unused, it should be all zeros. - u1Byte SrcAddr[6]; // Unused, it should be all zeros. - u2Byte DialogToken; // Non-zero value to identify request/report transaction. - u1Byte ActivationDelay; // # of TBTTs until the interval specified by the Measurement Offset field starts. - u1Byte MeasurementOffset; // TUs after the Activation Delay. - u1Byte Elements[1]; // Actual length is ((IappIdLen & 0x0FFF) - 20) -}RM_CCX_REQUEST_PACKET, *PRM_CCX_REQUEST_PACKET; - - -// -// Radio Measurement Report frame body. -// Ref: CCX 2 spec, Figure S36-2. -// -typedef struct _RM_REPORT_PACKET{ - u1Byte SnapHeader[CISCO_AIRONET_SNAP_LENGTH]; // Cisco Aironet SNAP header: AAAA 0300 4096 0000 - u2Byte IappIdLen; // 0x0nnn, 0x0: IAPP control message, 0xnnn: length from IAPP ID & Length to end of the packet. - u1Byte IappType; // 0x32 indicates Radio Measurement. - u1Byte IappSubtype; // 0x81 indicates response. - u1Byte DstAddr[6]; // Unused, it should be all zeros. - u1Byte SrcAddr[6]; // Reporting STA's MAC address. - u2Byte DialogToken; // Non-zero value to identify request/report transaction. - u1Byte Elements[1]; // Actual length is ((IappIdLen & 0x0FFF) - 18) -}RM_REPORT_PACKET, *PRM_REPORT_PACKET; - -// -// Parameters for HAL to perform a Traffic Stream Metrics. -// -typedef enum _RT_TSM_ACTION_E{ - TSM_ACTION_NONE, - TSM_ACTION_START, - TSM_ACTION_RESET, - TSM_ACTION_STOP, -}RT_TSM_ACTION_E; - -typedef struct _RT_TSM_REQ_PARAM{ - u1Byte TSID; - RT_TSM_ACTION_E Action; -}RT_TSM_REQ_PARAM, *PRT_TSM_REQ_PARAM; - -// The fileds in TSM Report are placed in Big Endian. -#define SET_CCX_TSM_RPT_PTK_QUEUE_DELAY_AVERAGE(__Rpt, __Delay) (*((pu2Byte)(__Rpt + 8)) = H2N2BYTE(__Delay)) -#define SET_CCX_TSM_RPT_PTK_QUEUE_DELAY_HIS_i(__Rpt, __Delay, __i) (*((pu2Byte)(__Rpt + 10 + (2*__i))) = H2N2BYTE(__Delay[__i])) -#define SET_CCX_TSM_RPT_PTK_TRANS_DELAY(__Rpt, __Delay) (*((pu4Byte)(__Rpt + 18)) = H2N4BYTE(__Delay)) -#define SET_CCX_TSM_RPT_PTK_LOSS(__Rpt, __Delay) (*((pu2Byte)(__Rpt + 22)) = H2N2BYTE(__Delay)) -#define SET_CCX_TSM_RPT_PTK_CNT(__Rpt, __Delay) (*((pu2Byte)(__Rpt + 24)) = H2N2BYTE(__Delay)) -#define SET_CCX_TSM_ROAMING_CNT(__Rpt, Cnt) (*(__Rpt + 26) = H2N1BYTE(Cnt)) -#define SET_CCX_TSM_ROAMING_DELAY(__Rpt, Cnt) (*((pu2Byte)(__Rpt + 27)) = H2N2BYTE(Cnt)) -#define SET_CCX_TSM_USED_TIME(__Rpt, Cnt) (*((pu2Byte)(__Rpt + 29)) = H2N2BYTE(Cnt)) -#define SET_CCX_TSM_TSID(__Rpt, Cnt) (*(__Rpt + 31) = H2N1BYTE(Cnt)) -// -// Parameters for HAL to report a Traffic Stream Metrics. -// -typedef struct _RT_TSM_RPT_PARAM{ - u1Byte TSID; - RT_TSM_ACTION_E Action; - - u4Byte MediaDelay; // in us. - u2Byte MediaDelayHistogram[4]; - u2Byte PacketLossCount; - u2Byte PacketCount; - u2Byte UsedTime; -}RT_TSM_RPT_PARAM, *PRT_TSM_RPT_PARAM; - -// -// Macro to manipulate IAPP Header of RM Request. -// -#define SET_RMREQ_IAPPIDLEN(_pRmReqPkt, _IappIdLen) ( ((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->IappIdLen = H2N2BYTE(_IappIdLen) ) -#define GET_RMREQ_IAPPIDLEN(_pRmReqPkt) ( N2H2BYTE(((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->IappIdLen) ) - -#define SET_RMREQ_IAPPTYPE(_pRmReqPkt, _IappType) ( ((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->IappType = H2N1BYTE(_IappType) ) -#define GET_RMREQ_IAPPTYPE(_pRmReqPkt) ( N2H1BYTE(((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->IappType) ) - -#define SET_RMREQ_IAPPSUBTYPE(_pRmReqPkt, _IappSubtype) ( ((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->IappSubtype = H2N1BYTE(_IappSubtype) ) -#define GET_RMREQ_IAPPSUBTYPE(_pRmReqPkt) ( N2H1BYTE(((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->IappSubtype) ) - -#define SET_RMREQ_DIALOGTOKEN(_pRmReqPkt, _DialogToken) ( ((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->DialogToken = H2N2BYTE(_DialogToken) ) -#define GET_RMREQ_DIALOGTOKEN(_pRmReqPkt) ( N2H2BYTE(((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->DialogToken) ) - -#define SET_RMREQ_ACTIVATIONDELAY(_pRmReqPkt, _ActivationDelay) ( ((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->ActivationDelay = H2N1BYTE(_ActivationDelay) ) -#define GET_RMREQ_ACTIVATIONDELAY(_pRmReqPkt) ( N2H1BYTE(((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->ActivationDelay) ) - -#define SET_RMREQ_MEASUREMENTOFFSET(_pRmReqPkt, _MeasurementOffset) ( ((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->MeasurementOffset = H2N1BYTE(_MeasurementOffset) ) -#define GET_RMREQ_MEASUREMENTOFFSET(_pRmReqPkt) ( N2H1BYTE(((PRM_CCX_REQUEST_PACKET)_pRmReqPkt)->MeasurementOffset) ) - -// -// Macro to manipulate IAPP Header of RM Report. -// -#define SET_RMRPT_IAPPIDLEN(_pRmRptPkt, _IappIdLen) ( ((PRM_REPORT_PACKET)_pRmRptPkt)->IappIdLen = H2N2BYTE(_IappIdLen) ) -#define GET_RMRPT_IAPPIDLEN(_pRmRptPkt) ( N2H2BYTE(((PRM_REPORT_PACKET)_pRmRptPkt)->IappIdLen) ) - -#define SET_RMRPT_IAPPTYPE(_pRmRptPkt, _IappType) ( ((PRM_REPORT_PACKET)_pRmRptPkt)->IappType = H2N1BYTE(_IappType) ) -#define GET_RMRPT_IAPPTYPE(_pRmRptPkt) ( N2H1BYTE(((PRM_REPORT_PACKET)_pRmRptPkt)->IappType) ) - -#define SET_RMRPT_IAPPSUBTYPE(_pRmRptPkt, _IappSubtype) ( ((PRM_REPORT_PACKET)_pRmRptPkt)->IappSubtype = H2N1BYTE(_IappSubtype) ) -#define GET_RMRPT_IAPPSUBTYPE(_pRmRptPkt) ( N2H1BYTE(((PRM_REPORT_PACKET)_pRmRptPkt)->IappSubtype) ) - -#define SET_RMRPT_DIALOGTOKEN(_pRmRptPkt, _DialogToken) ( ((PRM_REPORT_PACKET)_pRmRptPkt)->DialogToken = H2N2BYTE(_DialogToken) ) -#define GET_RMRPT_DIALOGTOKEN(_pRmRptPkt) ( N2H2BYTE(((PRM_REPORT_PACKET)_pRmRptPkt)->DialogToken) ) - -// Dot11k RM request mode -#define DOT11K_RM_REQ_MODE_PARALLEL BIT0 // TRUE: Multiple measurements are started at the same time. -#define DOT11K_RM_REQ_MODE_ENABLE BIT1 // Indicate the Request or Report information. -#define DOT11K_RM_REQ_MODE_REQUEST BIT2 // Request is enabled. -#define DOT11K_RM_REQ_MODE_REPORT BIT3 // Report is enabled. -#define DOT11K_RM_REQ_MODE_MAN_DUR BIT4 // The measurement duaration is mandatory or shorter. - -// Dot11k RM report mode -#define DOT11K_RM_RPT_MODE_LATE BIT0 // The request was too late. -#define DOT11K_RM_RPT_MODE_INCAPABLE BIT1 // The capabilities of current setting is incapable to perform this RM. -#define DOT11K_RM_RPT_MODE_REFUSED BIT2 // The request rm condition is not acceptable for current threshold. - -// -// Dot11k action frame for rm request -// -#define GET_DOT11K_ACT_RM_REQ_DIALOGTOKEN(pduOS) EF1Byte( *( (Frame_FrameBody(pduOS) + 2) ) ) -#define GET_DOT11K_ACT_RM_REQ_REPEAT(pduOS) EF2Byte( *( (UNALIGNED pu2Byte)(Frame_FrameBody(pduOS) + 3) ) ) - -// -// Dot11k rm request IE variables (excluding the header of Element ID and Length) -// -#define GET_DOT11K_RM_REQ_MRE_TOkEN(pduOS) EF1Byte(*((pduOS).Octet)) -#define GET_DOT11K_RM_REQ_MRE_MODE(pduOS) EF1Byte( *((pduOS).Octet + 1) ) -#define GET_DOT11K_RM_REQ_MRE_TYPE(pduOS) EF1Byte( *((pduOS).Octet + 2) ) - -// -// Dot11k Channel Load fields, the address is started at Measurement Element (excluding the header of Element ID and Length) -// -#define GET_DOT11K_RM_REQ_CHNL_LOAD_REG_CLASS(pduOS) EF1Byte(*((pduOS).Octet + 3)) // Regulatory Class of RM Channel Load -#define GET_DOT11K_RM_REQ_CHNL_LOAD_CHANNEL(pduOS) EF1Byte(*((pduOS).Octet + 3 + 1)) // Channel of RM Channel Load -#define GET_DOT11K_RM_REQ_CHNL_LOAD_RANDOM_INTVL(pduOS) EF2Byte(*((UNALIGNED pu2Byte)(pduOS).Octet + 3 + 2)) // Randomization Interval of RM Channel Load -#define GET_DOT11K_RM_REQ_CHNL_LOAD_DURATION(pduOS) EF2Byte(*((UNALIGNED pu2Byte)(pduOS).Octet + 3 + 4)) // Randomization Interval of RM Channel Load - -// -// Dot11k Noise Histogram fields, the address is started at Measurement Element (excluding the header of Element ID and Length) -// -#define GET_DOT11K_RM_REQ_NHM_REG_CLASS(pduOS) EF1Byte(*((pduOS).Octet + 3)) // Regulatory Class of RM Channel Load -#define GET_DOT11K_RM_REQ_NHM_CHANNEL(pduOS) EF1Byte(*((pduOS).Octet + 3 + 1)) // Channel of RM Channel Load -#define GET_DOT11K_RM_REQ_NHM_RANDOM_INTVL(pduOS) EF2Byte(*((UNALIGNED pu2Byte)(pduOS).Octet + 3 + 2)) // Randomization Interval of RM Channel Load -#define GET_DOT11K_RM_REQ_NHM_DURATION(pduOS) EF2Byte(*((UNALIGNED pu2Byte)(pduOS).Octet + 3 + 4)) // Randomization Interval of RM Channel Load - -// -// Dot11k rm request IE variables (including the header of Element ID and Length) -// -#define SET_DOT11K_RM_REQ_MRE_EID(pHeader, _val) WriteEF1Byte((pHeader), _val) -#define SET_DOT11K_RM_REQ_MRE_LEN(pHeader, _val) WriteEF1Byte(((pHeader) + 1), _val) -#define SET_DOT11K_RM_REQ_MRE_TOKEN(pHeader, _val) WriteEF1Byte(((pHeader) + 2), _val) -#define SET_DOT11K_RM_REQ_MRE_MODE(pHeader, _val) WriteEF1Byte(((pHeader) + 3), _val) -#define SET_DOT11K_RM_REQ_MRE_TYPE(pHeader, _val) WriteEF1Byte(((pHeader) + 4), _val) - -// -// Dot11k Channel Load request fields, the address is started at Measurement Element (including the header of Element ID and Length) -// -#define SET_DOT11K_RM_REQ_CHNL_LOAD_REG_CLASS(pHeader, _val) WriteEF1Byte(((pHeader) + 5), _val) // Regulatory Class -#define SET_DOT11K_RM_REQ_CHNL_LOAD_CHANNEL(pHeader, _val) WriteEF1Byte(((pHeader) + 6), _val) // Channel Number -#define SET_DOT11K_RM_REQ_CHNL_LOAD_RANDOM_INTVL(pHeader, _val) WriteEF2Byte(((pHeader) + 7), _val) // Random Interval -#define SET_DOT11K_RM_REQ_CHNL_LOAD_DURATION(pHeader, _val) WriteEF2Byte(((pHeader) + 9), _val) // Duration - -// -// Dot11k Noise Histogram fields, the address is started at Measurement Element (excluding the header of Element ID and Length) -// -#define SET_DOT11K_RM_REQ_NHM_REG_CLASS(pHeader, _val) WriteEF1Byte(((pHeader) + 5), _val) // Regulatory Class -#define SET_DOT11K_RM_REQ_NHM_CHANNEL(pHeader, _val) WriteEF1Byte(((pHeader) + 6), _val) // Channel Number -#define SET_DOT11K_RM_REQ_NHM_RANDOM_INTVL(pHeader, _val) WriteEF2Byte(((pHeader) + 7), _val) // Random Interval -#define SET_DOT11K_RM_REQ_NHM_DURATION(pHeader, _val) WriteEF2Byte(((pHeader) + 9), _val) // Duration - - -// -// Dot11k rm report IE variables (including the header of Element ID and Length) -// -#define GET_DOT11K_RM_RPT_MRE_EID(pduOS) EF1Byte(*((pduOS).Octet)) -#define GET_DOT11K_RM_RPT_MRE_LEN(pduOS) EF1Byte(*((pduOS).Octet + 1)) -#define GET_DOT11K_RM_RPT_MRE_TOKEN(pduOS) EF1Byte(*((pduOS).Octet + 2)) -#define GET_DOT11K_RM_RPT_MRE_MODE(pduOS) EF1Byte( *((pduOS).Octet + 3) ) -#define GET_DOT11K_RM_RPT_MRE_TYPE(pduOS) EF1Byte( *((pduOS).Octet + 4) ) - -// -// Dot11k Channel Load report fields, the address is started at Measurement Element (including the header of Element ID and Length) -// -#define GET_DOT11K_RM_RPT_CHNL_LOAD_REG_CLASS(pduOS) EF1Byte( *((pduOS).Octet + 5) ) -#define GET_DOT11K_RM_RPT_CHNL_LOAD_CHANNEL(pduOS) EF1Byte( *((pduOS).Octet + 6) ) -#define GET_DOT11K_RM_RPT_CHNL_LOAD_STARTTIME_LOW(pduOS) EF4Byte( *(UNALIGNED pu4Byte)((pduOS).Octet + 7) ) -#define GET_DOT11K_RM_RPT_CHNL_LOAD_STARTTIME_HIGH(pduOS) EF4Byte( *(UNALIGNED pu4Byte)((pduOS).Octet + 11) ) -#define GET_DOT11K_RM_RPT_CHNL_LOAD_DURATION(pduOS) EF2Byte( *(UNALIGNED pu2Byte)((pduOS).Octet + 15) ) -#define GET_DOT11K_RM_RPT_CHNL_LOAD_LOAD(pduOS) EF1Byte( *((pduOS).Octet + 17) ) - -// -// Dot11k Noise Histogram report fields, the address is started at Measurement Element (including the header of Element ID and Length) -// -#define GET_DOT11K_RM_RPT_NHM_REG_CLASS(pduOS) EF1Byte( *((pduOS).Octet + 5) ) -#define GET_DOT11K_RM_RPT_NHM_CHANNEL(pduOS) EF1Byte( *((pduOS).Octet + 6) ) -#define GET_DOT11K_RM_RPT_NHM_STARTTIME_LOW(pduOS) EF4Byte( *(UNALIGNED pu4Byte)((pduOS).Octet + 7) ) -#define GET_DOT11K_RM_RPT_NHM_STARTTIME_HIGH(pduOS) EF4Byte( *(UNALIGNED pu4Byte)((pduOS).Octet + 11) ) -#define GET_DOT11K_RM_RPT_NHM_DURATION(pduOS) EF2Byte( *(UNALIGNED pu2Byte)((pduOS).Octet + 15) ) -#define GET_DOT11K_RM_RPT_NHM_ANT_ID(pduOS) EF1Byte( *((pduOS).Octet + 17) ) -#define GET_DOT11K_RM_RPT_NHM_ANPI(pduOS) EF1Byte( *((pduOS).Octet + 18) ) -#define GET_DOT11K_RM_RPT_NHM_IPI_DENSITY(pduOS, _pIPI) PlatformMoveMemory(_pIPI, ((pduOS).Octet + 19), DOT11K_NUM_RPI) // The IPI density - - - -// -// Dot11k rm report IE variables (including the header of Element ID and Length) -// -#define SET_DOT11K_RM_RPT_MRE_EID(pHeader, _val) WriteEF1Byte((pHeader), _val) -#define SET_DOT11K_RM_RPT_MRE_LEN(pHeader, _val) WriteEF1Byte(((pHeader) + 1), _val) -#define SET_DOT11K_RM_RPT_MRE_TOKEN(pHeader, _val) WriteEF1Byte(((pHeader) + 2), _val) -#define SET_DOT11K_RM_RPT_MRE_MODE(pHeader, _val) WriteEF1Byte(((pHeader) + 3), _val) -#define SET_DOT11K_RM_RPT_MRE_TYPE(pHeader, _val) WriteEF1Byte(((pHeader) + 4), _val) - -// -// Dot11k Channel Load report fields, the address is started at Measurement Element (including the header of Element ID and Length) -// -#define SET_DOT11K_RM_RPT_CHNL_LOAD_REG_CLASS(pHeader, _val) WriteEF1Byte(((pHeader) + 5), _val) // Regulatory Class -#define SET_DOT11K_RM_RPT_CHNL_LOAD_CHANNEL(pHeader, _val) WriteEF1Byte(((pHeader) + 6), _val) // Channel Number -#define SET_DOT11K_RM_RPT_CHNL_LOAD_STARTTIME_LOW(pHeader, _val) WriteEF4Byte(((pHeader) + 7), _val) // Start time low -#define SET_DOT11K_RM_RPT_CHNL_LOAD_STARTTIME_HIGH(pHeader, _val) WriteEF4Byte(((pHeader) + 11), _val) // Start time high -#define SET_DOT11K_RM_RPT_CHNL_LOAD_DURATION(pHeader, _val) WriteEF2Byte(((pHeader) + 15), _val) // Measurement Duration -#define SET_DOT11K_RM_RPT_CHNL_LOAD_LOAD(pHeader, _val) WriteEF1Byte(((pHeader) + 17), _val) // Channel Load - -// -// Dot11k Noise Histogram report fields, the address is started at Measurement Element (including the header of Element ID and Length) -// -#define SET_DOT11K_RM_RPT_NHM_REG_CLASS(pHeader, _val) WriteEF1Byte(((pHeader) + 5), _val) // Regulatory Class -#define SET_DOT11K_RM_RPT_NHM_CHANNEL(pHeader, _val) WriteEF1Byte(((pHeader) + 6), _val) // Channel Number -#define SET_DOT11K_RM_RPT_NHM_STARTTIME_LOW(pHeader, _val) WriteEF4Byte(((pHeader) + 7), _val) // Start time low -#define SET_DOT11K_RM_RPT_NHM_STARTTIME_HIGH(pHeader, _val) WriteEF4Byte(((pHeader) + 11), _val) // Start time high -#define SET_DOT11K_RM_RPT_NHM_DURATION(pHeader, _val) WriteEF2Byte(((pHeader) + 15), _val) // Measurement Duration -#define SET_DOT11K_RM_RPT_NHM_ANT_ID(pHeader, _val) WriteEF1Byte(((pHeader) + 17), _val) // Antenna ID -#define SET_DOT11K_RM_RPT_NHM_ANPI(pHeader, _val) WriteEF1Byte(((pHeader) + 18), _val) // The average noise power indicator -#define SET_DOT11K_RM_RPT_NHM_IPI_DENSITY(pHeader, _pVal) PlatformMoveMemory(((pHeader) + 19), _pVal, DOT11K_NUM_RPI) // The IPI density - -// -// CCX rm report element variables (including the header of Element ID and Length) -// -#define SET_CCX_RM_RPT_MRE_EID(pHeader, _val) WriteEF2Byte((pHeader), _val) -#define SET_CCX_RM_RPT_MRE_LEN(pHeader, _val) WriteEF2Byte(((pHeader) + 2), _val) -#define SET_CCX_RM_RPT_MRE_TOKEN(pHeader, _val) WriteEF2Byte(((pHeader) + 4), _val) -#define SET_CCX_RM_RPT_MRE_MODE(pHeader, _val) WriteEF1Byte(((pHeader) + 6), _val) -#define SET_CCX_RM_RPT_MRE_TYPE(pHeader, _val) WriteEF1Byte(((pHeader) + 7), _val) - -// -// CCX rm beacon report element variables -// -#define SET_CCX_RM_RPT_CHANNEL(pHeader, _val) WriteEF1Byte(((pHeader)), _val) -#define SET_CCX_RM_RPT_SPARE(pHeader, _val) WriteEF1Byte(((pHeader) + 1), _val) -#define SET_CCX_RM_RPT_MEASURE_DUR(pHeader, _val) WriteEF2Byte(((pHeader) + 2), _val) -#define SET_CCX_RM_RPT_PHY_TYPE(pHeader, _val) WriteEF1Byte(((pHeader) + 4), _val) -#define SET_CCX_RM_RPT_SIGNAL_PWR(pHeader, _val) WriteEF1Byte(((pHeader) + 5), _val) -#define SET_CCX_RM_RPT_BSSID(pHeader, _val) PlatformMoveMemory((UNALIGNED pu1Byte)(pHeader + 6), _val, 6) -#define SET_CCX_RM_RPT_PARENT_TSF(pHeader, _val) WriteEF4Byte(((pHeader) + 12), _val) -#define SET_CCX_RM_RPT_TARGET_TSF_LOW(pHeader, _val) WriteEF4Byte(((pHeader) + 16), _val) -#define SET_CCX_RM_RPT_TARGET_TSF_HIGH(pHeader, _val) WriteEF4Byte(((pHeader) + 20), _val) -#define SET_CCX_RM_RPT_BCN_INTERVAL(pHeader, _val) WriteEF2Byte(((pHeader) + 24), _val) -#define SET_CCX_RM_RPT_CAP(pHeader, _val) WriteEF2Byte(((pHeader) + 26), _val) - -// -// CCX rm request element variables -// -#define GET_CCX_RM_REQ_MRE_TOKEN(pduOS) EF2Byte(*((pduOS).Octet)) -#define GET_CCX_RM_REQ_MRE_MODE(pduOS) EF1Byte( *((pduOS).Octet + 2) ) -#define GET_CCX_RM_REQ_MRE_TYPE(pduOS) EF1Byte( *((pduOS).Octet + 3) ) - -// -// CCX rm beacon request variables -// -#define GET_CCX_RM_REQ_MRE_DUR(pduOS) EF2Byte(*((pduOS).Octet + 2)) -#define GET_CCX_RM_RPT_SIGNAL_PWR(pHeader) EF1Byte(*((pHeader) + 5)) - -// Dot11k measurement request type -typedef enum _DOT11K_RM_TYPE{ - DOT11K_RM_TYPE_CHANNEL_LOAD = 3, - DOT11K_RM_TYPE_NOISE_HISTOGRAM = 4, -}DOT11K_RM_TYPE, *PDOT11K_RM_TYPE; - -unsigned int -RmStaRxPowerHash( - IN RT_HASH_KEY Key - ); - - -#endif // #ifndef __INC_RMTYPE_H - diff --git a/network/wlan/WDI/HEADER/SecurityType.h b/network/wlan/WDI/HEADER/SecurityType.h deleted file mode 100644 index e3cab0ca..00000000 --- a/network/wlan/WDI/HEADER/SecurityType.h +++ /dev/null @@ -1,782 +0,0 @@ -#ifndef __INC_SECURITYTYPE_H -#define __INC_SECURITYTYPE_H - -#define MAX_KEY_LEN 61 - -#define KEY_BUF_SIZE 5 - -#define TKIP_ENC_KEY_LEN 16 // Added by Annie, 2005-07-05. -#define TKIP_MIC_KEY_LEN 8 -#define TKIP_MIC_LEN 8 -#define TKIP_KEY_LEN (TKIP_ENC_KEY_LEN+TKIP_MIC_KEY_LEN*2) -#define BIP_KEY_LEN 16 - -#define MAXRSNIELEN 256 -#define WEP_IV_LEN 4 // Added by Annie, 2005-12-23. -#define EXT_IV_LEN 8 // Added by Annie, 2005-12-23. -#define KEYID_POS_IN_IV 3 // Added by Annie, 2005-12-23. - -#define WEP_ICV_LEN 4 // Added by Annie, 2006-10-19. -#define TKIP_MIC_LEN 8 // Added by Annie, 2006-10-19. -#define AES_MIC_LEN 8 // Added by Annie, 2006-10-19. - -#define SMS4_MIC_LEN 16 -#define WAPI_EXT_LEN 18 - -// Added by Annie, 2005-07-05. -#define KEK_LEN 16 -#define KCK_LEN 16 -#define TKIP_ENC_KEY_POS 32 //(KEK_LEN+KEK_LEN) -#define TKIP_MIC_KEY_POS 48 //(TKIP_ENC_KEY_POS+TKIP_ENC_KEY_LEN) - -#define GTK_MIC_TX_POS 16 //GTK Temporal Encryption key length -#define GTK_MIC_RX_POS 24 //GTK Temporal Encryption key length + TKIP_MIC_KEY_LEN - -// CKIP related. -#define CKIP_KEY_LEN 16 // Added by Annie, 2006-08-17. - -#define MAX_CIPHER_SUITE_NUM 4 -#define MAX_AUTH_SUITE_NUM 4 - -#define TWOWAY_HANDSHAKE_WPATKIP_LEN 183 -#define TWOWAY_HANDSHAKE_WPAAES_LEN 187 -#define TWOWAY_HANDSHAKE_2ND_LEN 151 - -#define MAX_CCKM_IE_REQ_LEN 32 -#define MAX_CCKM_IE_LEN 512 - -#define SW_ENCRYPT_BUF_SIZE 2400 - -static u1Byte WPA_OUI[SIZE_OUI] = {0x00, 0x50, 0xf2}; -static u1Byte RSN_OUI[SIZE_OUI] = {0x00, 0x0F, 0xAC}; - -#define WPAIE_OUI_TYPE 1 - - -// HW/SW encryption/decryption related. 2006.09.29, by shien chang. -enum _EnryptionDecryption_Mechanism -{ - EncryptionDecryptionMechanism_Auto = 0, - EncryptionDecryptionMechanism_Hw = 1, - EncryptionDecryptionMechanism_Sw = 2, - EncryptionDecryptionMechanism_Undefined = 3, -}; - -// -// For check chiper and auth type , add by CCW 2008/09/18 -// -enum _PAIRWISE_CHIPER -{ - NONE_WPA = 0x00, - WPA_TKIP = 0x02, - WPA_AES = 0x04, - WPA2_TKIP = 0x20, - WPA2_AES = 0x40, -}; - -typedef u4Byte AKM_SUITE_TYPE, *PAKM_SUITE_TYPE; -#define AKM_SUITE_NONE (AKM_SUITE_TYPE)0 -#define AKM_WPA_1X (AKM_SUITE_TYPE)0x00000001 -#define AKM_WPA_PSK (AKM_SUITE_TYPE)0x00000002 -#define AKM_WPA_CCKM (AKM_SUITE_TYPE)0x00000004 -#define AKM_WPA2_1X (AKM_SUITE_TYPE)0x00000010 -#define AKM_WPA2_PSK (AKM_SUITE_TYPE)0x00000020 -#define AKM_WPA2_CCKM (AKM_SUITE_TYPE)0x00000040 -#define AKM_RSNA_1X_SHA256 (AKM_SUITE_TYPE)0x00000080 -#define AKM_RSNA_PSK_SHA256 (AKM_SUITE_TYPE)0x00000100 -#define AKM_FT_1X (AKM_SUITE_TYPE)0x00000200 -#define AKM_FT_PSK (AKM_SUITE_TYPE)0x00000400 -#define AKM_1X_CCKM (AKM_SUITE_TYPE)0x00000800 - -#define IS_AKM_SUPPORT_SHA_256(_AkmSuite) TEST_FLAG(_AkmSuite, AKM_RSNA_1X_SHA256 | AKM_RSNA_PSK_SHA256 | AKM_FT_1X | AKM_FT_PSK) - -#if(OS_WIN_FROM_WIN10(OS_VERSION)) - #define DEFAULT_SUPPORT_AKM_SUITE (AKM_WPA_1X | AKM_WPA_PSK | AKM_WPA2_1X | AKM_WPA2_PSK | AKM_WPA_CCKM | AKM_WPA2_CCKM | AKM_RSNA_1X_SHA256 | AKM_RSNA_PSK_SHA256 | AKM_FT_1X | AKM_FT_PSK) -#elif (OS_WIN_FROM_WIN8(OS_VERSION)) - #define DEFAULT_SUPPORT_AKM_SUITE (AKM_WPA_1X | AKM_WPA_PSK | AKM_WPA2_1X | AKM_WPA2_PSK | AKM_WPA_CCKM | AKM_WPA2_CCKM | AKM_RSNA_1X_SHA256 | AKM_RSNA_PSK_SHA256) -#elif (RT_PLATFORM==PLATFORM_WINDOWS) - #define DEFAULT_SUPPORT_AKM_SUITE (AKM_WPA_1X | AKM_WPA_PSK | AKM_WPA2_1X | AKM_WPA2_PSK | AKM_WPA_CCKM | AKM_WPA2_CCKM) -#else - #define DEFAULT_SUPPORT_AKM_SUITE (AKM_WPA_1X | AKM_WPA_PSK | AKM_WPA2_1X | AKM_WPA2_PSK) -#endif - - -#define AKM_WPA_1X_OUI_TYPE 1 -#define AKM_WPA_PSK_OUI_TYPE 2 - -//====================================================================================== -// AES_CCMP specific -//====================================================================================== - -#define AESMSK_FC_DEFAULT 0xC78F // default value of AES MASK for Frame Control Field. (2 bytes) -#define AESMSK_SC_DEFAULT 0x000F // default value of AES MASK for Sequence Control Field. (2 bytes) -#define AESMSK_QC_DEFAULT 0x000F // default value of AES MASK for QoS Control Field. (2 bytes) - -enum -{ - AESCCMP_BLK_SIZE = 16, // # octets in an AES block - //AESCCMP_MAX_PACKET = 4*512, // largest packet size //YJ,test for DTM MPE,120218 - AESCCMP_MAX_PACKET = 5*512, // largest packet size - AESCCMP_N_RESERVED = 0, // reserved nonce octet value - AESCCMP_A_DATA = 0x40, // the Adata bit in the flags - AESCCMP_M_SHIFT = 3, // how much to shift the 3-bit M field - AESCCMP_L_SHIFT = 0, // how much to shift the 3-bit L field - AESCCMP_L_SIZE = 2, // size of the l(m) length field (in octets) - AESCCMP_OFFSET_SC = 22, - AESCCMP_OFFSET_DURATION = 4, - AESCCMP_OFFSET_A2 = 10, - AESCCMP_OFFSET_A4 = 24, - AESCCMP_QC_TID_MASK = 0x0f, - AESCCMP_BLK_SIZE_TOTAL = 16*16, // Added by Annie for CKIP AES MIC BSOD, 2006-08-17. - // 16*8 < 4*60 Resove to 16*16 -}; -typedef union _AESCCMP_BLOCK // AES cipher block -{ - u4Byte x[AESCCMP_BLK_SIZE/4]; // access as 8-bit octets or 32-bit words - u1Byte b[AESCCMP_BLK_SIZE]; -}AESCCMP_BLOCK; - -typedef struct _AESCCMP_PACKET -{ - BOOLEAN encrypted; // TRUE if encrypted - u1Byte TA[6]; // xmit address - u4Byte micLength; // # octets of MIC appended to plaintext (M) - u4Byte ivLength; - u4Byte clrCount; // # cleartext octets covered by MIC - u4Byte pktNum[2]; // unique packet sequence number (like WEP IV) - AESCCMP_BLOCK key; // the encryption key (K) - u4Byte length; // # octets in data[] - u1Byte *data; - u1Byte dataArray[AESCCMP_MAX_PACKET+ 2*AESCCMP_BLK_SIZE]; // packet contents -}AESCCMP_PACKET; - -// Ref: IEEE 802.11 2012 8.4.2.27.2 Cipher suites -typedef u4Byte RT_ENC_ALG,*PRT_ENC_ALG; -#define RT_ENC_ALG_NO_CIPHER 0x00000000 -#define RT_ENC_ALG_USE_GROUP 0x00000001 // Use Group Key -#define RT_ENC_ALG_TKIP 0x00000002 -#define RT_ENC_ALG_AESCCMP 0x00000004 -#define RT_ENC_ALG_WEP40 0x00000008 -#define RT_ENC_ALG_WEP104 0x00000010 -#define RT_ENC_ALG_WEP (RT_ENC_ALG_WEP40 | RT_ENC_ALG_WEP104) -#define RT_ENC_ALG_SMS4 0x00000020 // WAPI -#define RT_ENC_ALG_BIP 0x00000040 // PMF multicast protected management frame -#define RT_ENC_ALG_GROUP_ADDR_TRAFFIC_DISALLOWED 0x00000080 - -// Ref: 802.11i sepc D10.0 7.3.2.25.1 Cipher Suites -//Encryption Algorithms -//2 // Note: The following encryption algorithm is deprecated, do not use again. -typedef enum{ - NO_Encryption = 0, - WEP40_Encryption = 1, - TKIP_Encryption = 2, - Reserved_Encryption = 3, - AESCCMP_Encryption = 4, - WEP104_Encryption = 5, - WEP_Encryption = 6, // WEP + WPA - SMS4_Encryption =7, - Max_Encryption =0xFF - //WEP_Encryption = 7, - -}RT_ENC_ALG_DEP, *PRT_ENC_ALG_DEP; - - -typedef enum _RT_AUTH_MODE -{ - RT_802_11AuthModeOpen, - RT_802_11AuthModeShared, - RT_802_11AuthModeAutoSwitch, - RT_802_11AuthModeWPA, - RT_802_11AuthModeWPAPSK, - RT_802_11AuthModeWPANone, - RT_802_11AuthModeWPA2, - RT_802_11AuthModeWPA2PSK, - RT_802_11AuthModeCCKM, - RT_802_11AuthModeWAPI, - RT_802_11AuthModeCertificateWAPI, - //===== Add new Mode above this line=====// - RT_802_11AuthModeMax, - - RT_NETWORK_EAP = 0x80, - -} RT_AUTH_MODE, *PRT_AUTH_MODE; - -typedef enum _RT_802_11_WEP_STATUS -{ - RT802_11WEPEnabled, - RT802_11Encryption1Enabled = RT802_11WEPEnabled, - RT802_11WEPDisabled, - RT802_11EncryptionDisabled = RT802_11WEPDisabled, - RT802_11WEPKeyAbsent, - RT802_11Encryption1KeyAbsent = RT802_11WEPKeyAbsent, - RT802_11WEPNotSupported, - RT802_11EncryptionNotSupported = RT802_11WEPNotSupported, - RT802_11Encryption2Enabled, - RT802_11Encryption2KeyAbsent, - RT802_11Encryption3Enabled, - RT802_11Encryption3KeyAbsent, - Wapi_Encryption, - Wapi_Certificate - -} RT_802_11_WEP_STATUS, *PRT_802_11_WEP_STATUS, RT_802_11_ENCRYPTION_STATUS, *PRT_802_11_ENCRYPTION_STATUS; - -typedef enum _RT_SECURITY_LEVEL -{ - RT_SEC_LVL_NONE = 0, - RT_SEC_LVL_WPA, - RT_SEC_LVL_WPA2, - RT_SEC_LVL_WAPI - -}RT_SECURITY_LEVEL, *PRT_SECURITY_LEVEL; - -typedef struct _RT_PMKID_TYPE -{ - u1Byte flag; -}RT_PMKID_TYPE, *PRT_PMKID_TYPE; - -#define MAX_DENY_BSSID_LIST_CNT 20 -typedef struct _RT_DENY_BSSID -{ - BOOLEAN bUsed; - u8Byte StartTime; - u1Byte Bssid[6]; -}RT_DENY_BSSID, *PRT_DENY_BSSID; - - -// WPA2 Parameters -#define NUM_PRE_AUTH_KEY 16 // Reference NumOfPreAuthKey in 8185. Added by Annie, 2006-05-07. -#define NUM_PMKID_CACHE NUM_PRE_AUTH_KEY // Added by Annie, 2006-05-07. -#define NUM_CAT_PMKID 1 // Added by Annie, 2006-05-07. -#define PMKID_LEN 16 - -typedef struct _RT_PMKID_LIST -{ - BOOLEAN bUsed; - u1Byte Bssid[6]; - u1Byte PMKID[PMKID_LEN]; - u1Byte SsidBuf[33]; - OCTET_STRING Ssid; -} RT_PMKID_LIST, *PRT_PMKID_LIST; - -typedef struct _DOT11_RSN_IE_PMKID -{ - u2Byte SuiteCount; - u1Byte PMKList[1]; -} DOT11_RSN_IE_PMKID, *PDOT11_RSN_IE_PMKID; - - -// -// CCX 1 S13: CKIP Related Parameters. -// Revised by Annie, 2006-08-14. -// -#define IE_CISCO_CWMIN_POSITION 0x04 -#define IE_CISCO_CWMAX_POSITION 0x06 -#define IE_CISCO_FLAG_POSITION 0x08 // Flag byte: byte 8, numbered from 0. -#define SUPPORT_CKIP_MIC 0x08 // bit3 -#define SUPPORT_CKIP_PK 0x10 // bit4 -typedef struct _CKIP_PARAMETER -{ - DECLARE_RT_OBJECT(CKIP_PARAMETER); - - BOOLEAN bIsKP; - BOOLEAN bIsMIC; - BOOLEAN bCkipSupported; // Aironet IE support CKIP or not. - ULONG ulSeqUpLink; - u1Byte CKIPKeyBuf[KEY_BUF_SIZE][CKIP_KEY_LEN]; -} CKIP_PARAMETER, *PCKIP_PARAMETER; - - -// -// Add for RSNA Per-station default Key ,by CCW -// Per-Sta default key is used for group traffic. -// -typedef struct _PER_STA_DEFAULT_KEY_ENTRY -{ - u1Byte MACAdrss[6]; - BOOLEAN Valid; - u1Byte DefKeyBuf[4][AESCCMP_BLK_SIZE_TOTAL]; - BOOLEAN DefkeyValid[4]; -}PER_STA_DEFAULT_KEY_ENTRY,*PPER_STA_DEFAULT_KEY_ENTRY; - -// -// Add for RSNA Per-station mapping Key ,by CCW -// Per-Sta key mapping key for unicast traffic. -// -typedef struct _PER_STA_MPAKEY_ENTRY -{ - u1Byte MACAdrss[6]; - BOOLEAN Valid; - u1Byte MapKeyBuf[AESCCMP_BLK_SIZE_TOTAL]; -}PER_STA_MPAKEY_ENTRY,*PPER_STA_MPAKEY_ENTRY; - -#define MAX_NUM_PER_STA_KEY 12 -// TSC in TKIP and PN in AES shall be initialized to 1 in 802.11i. -// The spec doesn't determine the initialized value so we set the same value. -// When the temporal key (including wep) is reset, we need to refresh the Tx IV. -// By Bruce, 2010-11-04. -#define DEFAULT_INIT_TX_IV 1 -// 0 means we don't check the rx IV as the IV replay attack. -#define DEFAULT_INIT_RX_IV 0 - -typedef enum _RT_SA_QUERY_STATE -{ - RT_SA_QUERY_STATE_UNINITIALIZED = 0, - RT_SA_QUERY_STATE_SA_DETECTED = 0, - RT_SA_QUERY_STATE_SA_REQ_IN_PROGRESS, - //=== Insert new method above this line === // - RT_SA_QUERY_STATE_MAX, // Reserved - RT_SA_QUERY_STATE_FORCE_UINT32 = 0xFFFFFFFF //Reserved, force this enumeration to compile to 32 bits in size (by Win SDK 8.0). -}RT_SA_QUERY_STATE, *PRT_SA_QUERY_STATE; -//Security information structure -typedef struct _RT_SECURITY_T{ - - //Encryption Algorithm for Unicast Packet - RT_ENC_ALG PairwiseEncAlgorithm; - - //Encryption Algorithm for Brocast/Multicast - RT_ENC_ALG GroupEncAlgorithm; - RT_ENC_ALG GroupEncAlgorithmCap; // Capability/Combination of group cipher suites - - BOOLEAN UseDefaultKey; // Set if default key used - - //The Index of Default Key(WEP) - u1Byte DefaultTransmitKeyIdx; - - //The index of Group Transmit Key - u1Byte GroupTransmitKeyIdx; - - //Key buffer - u1Byte KeyBuf[KEY_BUF_SIZE][MAX_KEY_LEN]; - u1Byte KeyLen[KEY_BUF_SIZE]; - - //2004/09/15, for AES - u1Byte AESKeyBuf[KEY_BUF_SIZE][AESCCMP_BLK_SIZE_TOTAL]; - - //The pointer of Pairwise Key, it always points to KeyBuf[4] - pu1Byte PairwiseKey; - - u1Byte TxMICKey[TKIP_MIC_KEY_LEN]; // Tx MIC Key - u1Byte RxMICKey[TKIP_MIC_KEY_LEN]; // Rx MIC Key - - BOOLEAN SWTxEncryptFlag; // Software send encrypt flag - BOOLEAN SWRxDecryptFlag; // Software recv decrypt flag - BOOLEAN SWRxAESMICFlag; // Software TKIP MIC flag - BOOLEAN bGroupKeyFixed; // Can not modify group key - // Manual config read from system to force HW or SW encryption/decryption. - // 0: Auto. 1: HW enc/dec. 2: SW enc/dec. 2006.09.29, by shien chang. - u1Byte RegSWTxEncryptFlag; - u1Byte RegSWRxDecryptFlag; - - u1Byte EncryptionHeadOverhead; - u1Byte EncryptionTailOverhead; - - RT_AUTH_MODE AuthMode; - - RT_802_11_ENCRYPTION_STATUS EncryptionStatus; - - OCTET_STRING RSNIE; - u1Byte RSNIEBuf[MAXRSNIELEN]; - - u8Byte TxIV; - - RT_SECURITY_LEVEL SecLvl; - - u1Byte AssocInfo[512]; - - //--------------------------------------------------------------------------- - // For MIC failure. - //--------------------------------------------------------------------------- - u8Byte LastPairewiseTKIPMICErrorTime; // Last pairewise key TKIP MIC error happen time or 0 if it has not happed in 60 seconds. - BOOLEAN bToDisassocAfterMICFailureReportSend; // Disassociate from the AP for twice MIC failure in 60 seconds. - RT_DENY_BSSID DenyBssidList[MAX_DENY_BSSID_LIST_CNT]; // List of BSS denied by us for MIC failure. - - - //--------------------------------------------------------------------------- - // For WPA2 Pre-Authentication. - //--------------------------------------------------------------------------- - BOOLEAN RegEnablePreAuth; // Default value: Pre-Authentication enabled or not, from registry "EnablePreAuth". Added by Annie, 2005-11-01. - BOOLEAN EnablePreAuthentication; // Current Value: Pre-Authentication enabled or not. - RT_PMKID_LIST PMKIDList[NUM_PMKID_CACHE]; // Renamed from PreAuthKey[NUM_PRE_AUTH_KEY]. Annie, 2006-10-13. - u4Byte PMKIDCount; // Added by Annie, 2006-10-13. - u1Byte szCapability[256]; // For WPA2-PSK using zero-config, by Annie, 2005-09-20. - - - //--------------------------------------------------------------------------- - // For Software AES Encryption. - //--------------------------------------------------------------------------- - AESCCMP_PACKET AESCCMP_Packet; - AESCCMP_PACKET RX_AESCCMP_Packet; - u4Byte AESCCMPMicLen ; - - // - // For CKIP. Revised by Annie, 2006-08-14. - // - PCKIP_PARAMETER pCkipPara; - //--------------------------------------- - //For CCKM KRK key , by CCW - //--------------------------------------- - u1Byte KRK[128]; - OCTET_STRING CCKMReqIE; - u1Byte CCKMReqIEBuf[MAX_CCKM_IE_REQ_LEN]; - OCTET_STRING CCKMIE; - u1Byte CCKMIEBuf[MAX_CCKM_IE_LEN]; - - //-------------------------------------- - // For NDIS6 RSNA, by CCW - //-------------------------------------- - // TODO: remvoe our group key from PerStaDefKeyTable[] - PER_STA_DEFAULT_KEY_ENTRY PerStaDefKeyTable[MAX_NUM_PER_STA_KEY]; // Keep group key of each STA in the IBSS. - PER_STA_MPAKEY_ENTRY MAPKEYTable[MAX_NUM_PER_STA_KEY]; // Keep pairwise key of each STA in the IBSS. - - // - // For Check IV - // - u8Byte RXMutiIV; // Rx multicast IV for IV replay check, and 0 means do not check IV replay. - u8Byte RXUntiIV; // Rx unicast IV for IV replay check, and 0 means do not check IV replay. - - u1Byte SecBuffer[SW_ENCRYPT_BUF_SIZE]; - - // 802.11w BIP - u1Byte BIPKeyBuffer[MAX_KEY_LEN]; - u1Byte IPN[6]; - RT_TIMER SAQueryTimer; - RT_SA_QUERY_STATE pmfSaState; - u2Byte SAReqIdentifier; -}RT_SECURITY_T, *PRT_SECURITY_T; - - - -//------------------------------------------------------------------------------ -// Authenticator related operations. Added by Annie, 2005-06-28. -//------------------------------------------------------------------------------ - -// -// Key Length -// -// Reference: -// 1. Code from AP team: auth\include\1x_kmsm_keydef.h -// - -#define LIB1X_EAPOL_HDRLEN 4 // defined in auth\include\1x_eapol.h, from AP team. - -#define PASSPHRASE_LEN 64 // modified by Annie, 2005-07-01. - -#define PMK_LEN 32 -#define PTK_LEN 64 -#define PTK_LEN_TKIP 64 -#define PTK_LEN_NO_TKIP 48 //for CCMP, WRAP, WEP -#define PTK_LEN_CCMP 48 -#define PTK_LEN_WRAP 48 -#define PTK_LEN_WEP 48 - -#define PTK_LEN_EAPOLMIC 16 -#define PTK_LEN_EAPOLENC 16 - -#define GMK_LEN 32 -#define GTK_LEN 32 -#define GTK_LEN_TKIP 32 //32 for TKIP and 16 for CCMP, WRAP, WEP -#define GTK_LEN_NO_TKIP 16 -#define GTK_LEN_CCMP 16 -#define GTK_LEN_WRAP 16 -#define GTK_LEN_WEP 16 - - -#define INFO_ELEMENT_SIZE 128 - -#define EAP_HDR_LEN (sMacHdrLng+LLC_HEADER_SIZE+TYPE_LENGTH_FIELD_SIZE) // added by Annie, 2005-07-04. - -#define MAX_EAPOLMSG_LEN 512 -#define MAX_EAPOLKEYMSG_LEN (MAX_EAPOLMSG_LEN-(ETHERNET_HEADER_SIZE+LIB1X_EAPOL_HDRLEN)) -#define EAPOLMSG_HDRLEN 95 //EAPOL-key payload length without KeyData - -#define KEY_RC_LEN 8 -#define KEY_NONCE_LEN 32 -#define KEY_IV_LEN 16 -#define KEY_RSC_LEN 8 -#define KEY_ID_LEN 8 -#define KEY_MIC_LEN 16 -#define KEY_MATERIAL_LEN 2 - -#define DescTypePos 0 -#define KeyInfoPos 1 -#define KeyLenPos 3 -#define ReplayCounterPos 5 -#define KeyNoncePos 13 -#define KeyIVPos 45 -#define KeyRSCPos 61 -#define KeyIDPos 69 -#define KeyMICPos 77 -#define KeyDataLenPos 93 -#define KeyDataPos 95 - -#define MAX_TIMEOUT_CNT 3 - -// -// Key management -// -// Reference: -// 1. IEEE 802.11i/D3.0 8.5.6.1 & state machine diagram in Figure 53(p.113) -// 2. Code from AP team: auth\include\1x_kmsm.h -// - -// Definition of events in ASM (Authenticator state machine) -typedef enum _ASM_EVENT_ID { - ASMEID_NoEvent, - ASMEID_AssociationRequest, - ASMEID_ReAssociationRequest, - ASMEID_AuthenticationRequest, - ASMEID_ReAuthenticationRequest, - ASMEID_AuthenticationSuccess, - ASMEID_Disconnect, - ASMEID_DeauthenticationRequest, - ASMEID_Init, - ASMEID_Disassociate, - ASMEID_IntegrityFailure, - ASMEID_EAPOLKeyRecvd, - ASMEID_TimeOut, - ASMEID_TimeOutExceeded, -} ASM_EVENT_ID, *PASM_EVENT_ID; - - - -// Definition of PTK key state in ASM -// Ref: 8.5.6, page 111, 802.11 D3.0. -typedef enum _ASM_PAIRWISEKEY_STATE { - //ASMPS_DEAUTHENTICATE, - ASMPS_INITIALIZE, - ASMPS_DISCONNECTE, - ASMPS_DISCONNECTED, - ASMPS_AUTHENTICATION, - ASMPS_AUTHENTICATION2, // described on Fig.53. 802.11i D3.0. - ASMPS_INITPMK, - ASMPS_INITPSK, - ASMPS_PTKSTART, - ASMPS_PTKINITNEGOTIATING, - ASMPS_PTKINITDONE, - ASMPS_UPDATEKEYS, - ASMPS_MICFAILURE, - ASMPS_INTEGRITYFAILURE, // Added by Annie, 2005-07-18. - ASMPS_KEYUPDATE, - ASMPS_ERRORHANDLE, // Added states -}ASM_PAIRWISEKEY_STATE, *PASM_PAIRWISEKEY_STATE; - - -// Definition of PTK group key (GTK) state in ASM -// Ref: 8.5.6, page 112, 802.11 D3.0. -typedef enum _ASM_GROUPKEY_STATE { - ASMGS_INITIALIZE, - ASMGS_REKEYNEGOTIATING, - ASMGS_REKEYESTABLISHED, - ASMGS_KEYERROR, -// ASMGS_SETKEYS, -// ASMGS_SETKEYSDONE, -} ASM_GROUPKEY_STATE, *PASM_GROUPKEY_STATE; - -typedef enum _PORT_MODE_TYPE { -// pmt_ForceUnauthorized, // Rewrited as pmt_Disable by Annie -// pmt_ForceAuthorized, // Rewrited as pmt_Enable by Annie - pmt_Disable, - pmt_Enable, - pmt_Auto -} PORT_MODE_TYPE, *PPORT_MODE_TYPE; - -// defined by Annie, 2005-07-01. -typedef enum _PORT_CONTROL_TYPE { - pct_Unauthorized, - pct_Authorized, - pct_Auto -} PORT_CONTROL_TYPE, *PPORT_CONTROL_TYPE; - -// defined by Annie, 2005-07-01. -typedef enum _PORT_SECURE_TYPE { - psec_Unauthorized, - psec_Authorized -} PORT_SECURE_TYPE, *PPORT_SECURE_TYPE; - - -typedef struct _AUTH_PKEY_MGNT_TAG{ - - //2 machine state - - ASM_PAIRWISEKEY_STATE PrState; - ASM_GROUPKEY_STATE GrState; - ASM_EVENT_ID EvntID; - - //2 Variables - - struct _RT_WLAN_STA* pWLanSTA; // added by Annie - - //2004/06/29, kcwu, for WPA RSN-IE -// u1Byte IEBuf[1024]; -// OCTET_STRING IE; - RT_SECURITY_LEVEL SecLvl; - u1Byte SecIEBuf[64]; - u1Byte SecIELen; - u2Byte SecVersion; - RT_ENC_ALG GroupCipherSuite; - RT_ENC_ALG PairwiseCipherSuite[MAX_CIPHER_SUITE_NUM]; - u2Byte PairwiseCipherCount; - AKM_SUITE_TYPE AuthSuite[MAX_AUTH_SUITE_NUM]; - u2Byte AuthSuiteCount; - - BOOLEAN bPreAuth; - u1Byte NumOfPTKReplayCounter; - u1Byte NumOfGTKReplayCounter; - - PORT_MODE_TYPE portMode; - PORT_CONTROL_TYPE portControl; - PORT_SECURE_TYPE portSecure; // moved to global. Annie, 2005-07-01. - - u1Byte TimeoutCtr; - u8Byte TimeSlot_sendstart; // Record the time slot at sending 1st message in 4-way handshake. - u8Byte TimeSlot_lastsend; // Record the time slot at received last EAPOL-key. -// //sc_yang -// int TickCnt; -// BOOLEAN L2Failure; - BOOLEAN MICVerified; - - BOOLEAN Pair; // If Unicast cipher supported by Authenticator, set it TRUE. Jay 0708 - BOOLEAN GInitAKeys; // It is set to TRUE when the Group key update state machine is required. Jay 0708 - BOOLEAN PInitAKeys; // It is set to TRUE when the Authenticator is ready to send a Group key to its Supplicant after initialization. Jay 0708 - // I use it to replace bPTKInstalled according to sepc. Annie, 2005-07-02. -// OCTET_STRING ANonce; -// OCTET_STRING SNonce; //added by Emily - u8Byte KeyReplayCounter; - u1Byte SNonce[KEY_NONCE_LEN]; - u1Byte PTK[PTK_LEN]; - u1Byte PTK_update[PTK_LEN]; // Used in key updateding. Added by Annie, 2005-07-12. - u1Byte ANonce[KEY_NONCE_LEN]; - - pu1Byte TempEncKey; // Temporal Encryption Key - pu1Byte TxMICKey; // Tx MIC Key - pu1Byte RxMICKey; // Rx MIC Key - -#if 1 //Added by Jay 0712 for security IV - u8Byte TxIV; - u8Byte RxIV; - u8Byte KeyRSC; -#endif -#if 1//Added by Jay 0713 for processing integrity failure - u8Byte TimeSlot_lastIntegrityFailed; -#endif - - int MicErrorCnt; // Added by Annie for debug, 2005-07-25. - int WEPErrorCnt; - - //AP-WPA AES ,CCW - u1Byte AESKeyBuf[AESCCMP_BLK_SIZE_TOTAL]; - -}AUTH_PKEY_MGNT_TAG, *PAUTH_PKEY_MGNT_TAG; - - -#define NumGroupKey 1 // Group key number: currently we use only one group key. Annie, 2005-06-28. - - -typedef struct _AUTH_GLOBAL_KEY_TAG -{ - - int currentId; // Id for current authentication session - int receivedId; - - OCTET_STRING EAPOLMsgRecvd; //The Overall 802.1x message - OCTET_STRING EapolKeyMsgRecvd; //The start point of eapol-key payload - - // Added by Annie, 2005-06-28. - char Passphrase[PASSPHRASE_LEN]; // define in char from u1Byte. Annie, 2005-07-01. - u1Byte PassphraseLen; - u1Byte PMK[PMK_LEN]; -// u1Byte GMK[GMK_LEN]; //marked by Annie: It seems that we can use GTK directly. - u1Byte GTK[GTK_LEN]; - pu1Byte TxMICKey; // Group Tx MIC Key // Added by Annie, 2005-07-06. - pu1Byte RxMICKey; // Group Rx MIC Key - u1Byte AESGTK[AESCCMP_BLK_SIZE_TOTAL]; - -// AUTH_GKEY_MGNT_TAG groupKeyInfo; //marked by Annie: It seems not necessary. - u1Byte ANonce[KEY_NONCE_LEN]; - u1Byte GNonce[KEY_NONCE_LEN]; -// u8Byte GroupReplayCounter; // Added by Annie, 2005-07-02. - u8Byte KeyRSC; // Added by Annie, 2005-07-02 - // End of Annie add. - - - u1Byte MaxRetryCounts; - u1Byte EventId; - u1Byte DescriptorType; //initialize to 254 in RSN - u1Byte KeyDescriptorVer; -// u1Byte CurrentAddress[ETHERNET_HEADER_SIZE]; - BOOLEAN bMacAuthEnabled; - - RT_TIMER KeyMgntTimer; // added by Annie, 2005-06-29. - u8Byte CurrentTimeSlot; // increase 1 per-second. Added by Annie, 2005-07-12. - - //RSNIE related variable -// struct _DOT11_RSN_SUPPLICANT_VARIABLE RSNVariable; -// Dot11RSNConfigEntry Dot11RSNConfig; - -// struct _Dot1x_Authenticator *auth; - //End Added WPA -#if 1 //Added by Jay 0713 for processing integrity failure - u8Byte TimeSlot_IntegrityFail2; -#endif -} AUTH_GLOBAL_KEY_TAG, *PAUTH_GLOBAL_KEY_TAG; - - -#define KeyMgntStateIsWaitingEAPOLKey(_pKeyMgnt) \ - ( \ - ( (_pKeyMgnt)->PrState == ASMPS_PTKSTART ) || \ - ( (_pKeyMgnt)->PrState == ASMPS_PTKINITNEGOTIATING ) || \ - ( (_pKeyMgnt)->GrState == ASMGS_REKEYNEGOTIATING ) || \ - ( (_pKeyMgnt)->GrState == ASMGS_REKEYESTABLISHED) \ - ) - -// -// Higher layer meaning and related context information for security purpose. -// 2006.01.08, by rcnjko. -// -typedef u4Byte RT_SEC_PROT_INFO; -#define RT_SEC_NORMAL_DATA 0x00000000 // Default case. - -// Note that! RT_SEC_EAPOL_BEFORE_KEY_INSTALLED and RT_SEC_EAPOL_AFTER_KEY_INSTALLED are mutually exclusive. -#define RT_SEC_EAPOL_BEFORE_KEY_INSTALLED 0x80000000 // EAPOL packet before PTK installed, e.g. 4-way handshake before PTK installed and so on. -#define RT_SEC_EAPOL_AFTER_KEY_INSTALLED 0x40000000 // EAPOL packet after PTK installed, e.g. 4-way handshake after PTK installed, 2-way handshake, MIC failure report and so on. - -#define RT_SEC_MIC_FAILURE_REPORT 0x00000001 // MIC failure report frame. - - -// -// Helper macros to maniupate RT_SEC_PROT_INFO. -// 2006.01.08, by rcnjko. -// -#define IsSecProtEapolBeforeKeyInstalled(_SecProtInfo) \ - ((_SecProtInfo & RT_SEC_EAPOL_BEFORE_KEY_INSTALLED) ? TRUE : FALSE) - -#define IsSecProtEapolAfterKeyInstalled(_SecProtInfo) \ - ((_SecProtInfo & RT_SEC_EAPOL_AFTER_KEY_INSTALLED) ? TRUE : FALSE) - -#define IsSecProtEapol(_SecProtInfo) \ - ((IsSecProtEapolAfterKeyInstalled(_SecProtInfo) || IsSecProtEapolBeforeKeyInstalled(_SecProtInfo)) ? TRUE : FALSE) - -#define IsSecProtMicFailureReport(_SecProtInfo) \ - ((_SecProtInfo & RT_SEC_MIC_FAILURE_REPORT) ? TRUE : FALSE) - - -// -// Per-packe encryption information structure. -// 2006.01.08, by rcnjko. -// -typedef struct _STA_ENC_INFO_T{ - RT_ENC_ALG EncAlg; - BOOLEAN IsEncByHW; // FALSE if this packet SHOULD NOT be encrypted by HW, TRUE otherwise. Note that, it is used in conjuntion with pMgntInfo->SecurityInfo.SWTxEncryptFlag to determine if we shall encrypt the packet by HW or SW. - u1Byte keyId; - u2Byte ExemptionActionType; //0:Auto 1:encrypt 2:no encrypt 3: key UNAVAILABLE - BOOLEAN bMFPPacket; - u4Byte keylen; - pu1Byte keybuf; - RT_SEC_PROT_INFO SecProtInfo; // Keep higher layer meaning and context information about this packet, see definition of RT_SEC_PROT_INFO for details. -}STA_ENC_INFO_T, *PSTA_ENC_INFO_T; - -#define IsCkipEnabled(_pMgntInfo) \ - ( (_pMgntInfo->SecurityInfo.pCkipPara->bIsMIC || _pMgntInfo->SecurityInfo.pCkipPara->bIsKP)? TRUE : FALSE ) - - -#endif // #ifndef __INC_SECURITYTYPE_H diff --git a/network/wlan/WDI/HEADER/StatusCode.h b/network/wlan/WDI/HEADER/StatusCode.h deleted file mode 100644 index 84ea8754..00000000 --- a/network/wlan/WDI/HEADER/StatusCode.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef __INC_STATUSCODE_H -#define __INC_STATUSCODE_H - -typedef enum _RT_STATUS{ - RT_STATUS_SUCCESS = 0, - RT_STATUS_FAILURE, - RT_STATUS_PENDING, - RT_STATUS_RESOURCE, - RT_STATUS_INVALID_CONTEXT, - RT_STATUS_INVALID_PARAMETER, - RT_STATUS_NOT_SUPPORT, - RT_STATUS_OS_API_FAILED, - RT_STATUS_BUFFER_TOO_SHORT, - RT_STATUS_INVALID_LENGTH, - RT_STATUS_NOT_RECOGNIZED, - RT_STATUS_MALFORMED_PKT, - RT_STATUS_PKT_DROP, - RT_STATUS_MEDIA_BUSY, - RT_STATUS_INVALID_DATA, - RT_STATUS_INVALID_STATE, - RT_STATUS_IO_EXCEPTION, -}RT_STATUS,*PRT_STATUS; - -#define CHECK_NULL_RETURN_STATUS(_Pointer) \ -{ \ - if(NULL == _Pointer) \ - { \ - RT_ASSERT(_Pointer, ("Pointer(" #_Pointer ") is NULL\n")); \ - return RT_STATUS_INVALID_CONTEXT; \ - } \ -} -#endif // #ifndef __INC_STATUSCODE_H diff --git a/network/wlan/WDI/HEADER/TDLSType.h b/network/wlan/WDI/HEADER/TDLSType.h deleted file mode 100644 index d81c4568..00000000 --- a/network/wlan/WDI/HEADER/TDLSType.h +++ /dev/null @@ -1,489 +0,0 @@ -#ifndef __INC_TDLSTYPE_H -#define __INC_TDLSTYPE_H - -#if (TDLS_SUPPORT==1) - -#define MAX_TDLS_PAIR 16 -#define MAX_BLOCKED_PEER 8 - -#define TDLSETUP_DELAY_LONG 60000 -#define TDLSETUP_DELAY_SHORT 5000 -#define TDLS_SETUP_TIMEOUT 5000 -#define TDLS_PEER_REACHABLE_PERIOD 2000 -#define TDLS_LINK_ALIVE_PERIOD 2000 -#define TDLS_BLOCK_PEER_PERIOD 60000 -#define TDLS_TEARDOWN_CHECK 100 -#define TDLS_CHNLSW_TIMEOUT 5000 -#define TDLS_PTI_TIMEOUT_CNT 10 - -#define TDLS_TYPE_NONE 0 -#define TDLS_TYPE_SETUPREQ 1 -#define TDLS_TYPE_SETUPRSP 2 -#define TDLS_TYPE_SETUPCFRM 3 -#define TDLS_TYPE_TEARDOWN 4 -#define TDLS_TYPE_DISCOVERYREQ 5 -#define TDLS_TYPE_DISCOVERYRSP 6 -#define TDLS_TYPE_TRAFFICIND 7 -#define TDLS_TYPE_TRAFFICRSP 8 -#define TDLS_TYPE_CHNLSWITCHREQ 9 -#define TDLS_TYPE_CHNLSWITCHRSP 10 -#define TDLS_TYPE_UNKNOWN 15 - -#define TDLS_THRESHOLD_AP_HIGH 80 -#define TDLS_THRESHOLD_PEER_LOW 10 - -#define MAX_TDLS_SLOT_NUM 5 - -#define TDLS_TIMEOUT_INTERVAL_TYPE 2 -#define TDLS_TIMEOUT_KEY_LIFETIME 600 // seconds -#define TDLS_TIMEOUT_MIN_LIFETIME 300 -#define TDLS_TIMEOUT_MAX_LIFETIME 0xffffffff - -#define TDLS_MAX_GEN_KEY_LENGTH 64 - -#define SWITCH_CHANNEL_DELAY 2*sTU - -typedef enum _TDLS_TIMER_CONTROL{ - TDLS_TIMER_CONTROL_INIT, - TDLS_TIMER_CONTROL_SET, - TDLS_TIMER_CONTROL_CANCEL, - TDLS_TIMER_CONTROL_RELEASE -} TDLS_TIMER_CONTROL; - -typedef enum _TDLS_LINK_STATUS{ - TDLS_LINK_STATUS_DISCONNECT = 0x00, - TDLS_LINK_STATUS_KEEP_CONNECT = 0x01, - TDLS_LINK_STATUS_PEER_SS_WEEK = 0x02, - TDLS_LINK_STATUS_PEER_DISAPPEAR = 0x04, - TDLS_LINK_STATUS_AP_SS_STRONG = 0x08 -} TDLS_LINK_STATUS; - -typedef enum _TDLS_SETUP_PROGRESS_STAGE{ - TDLS_SETUP_PROGRESS_IDLE = 0x00, - TDLS_SETUP_PROGRESS_SEND_REQ = 0x01, - TDLS_SETUP_PROGRESS_RECV_REQ = 0x02, - TDLS_SETUP_PROGRESS_RECV_RSP = 0x04, - TDLS_SETUP_PROGRESS_DONE = 0x08 -} TDLS_SETUP_PROGRESS_STAGE; - -typedef enum _TDLS_MAX_PEER_CAP{ - TDLS_MAX_PEER_CAP_B = 0x00, - TDLS_MAX_PEER_CAP_G = 0x01 -} TDLS_MAX_PEER_CAP; - -typedef enum _TDLS_EXT_CAP_SUPPORT{ - TDLS_EXT_CAP_SUPPORT_NONE = 0x00, - TDLS_EXT_CAP_SUPPORT_BU_STA = 0x01, - TDLS_EXT_CAP_SUPPORT_SLEEP_STA = 0x02, - TDLS_EXT_CAP_SUPPORT_CHNLSWITCH = 0x04 -}TDLS_EXT_CAP_SUPPORT; - -typedef enum _RT_TDLS_PS_STATE{ - RT_TDLS_PS_NONE = 0, - RT_TDLS_PS_SLEEP = 1, - RT_TDLS_PS_TRIGGER = 2, - RT_TDLS_PS_ACTIVE_PTI = 3, - RT_TDLS_PS_ACTIVE_AWAKE = 4, - RT_TDLS_PS_ENTER_SLEEP = 5 -}RT_TDLS_PS_STATE; - -typedef enum _TDLS_TX_FEEDBACK_INDIC{ - TDLS_TX_FEEDBACK_NONE = 0, - TDLS_TX_FEEDBACK_TEARDOWN = 1, - TDLS_TX_FEEDBACK_CHNLSWITCH = 2, - TDLS_TX_FEEDBACK_NULL = 3, -}TDLS_TX_FEEDBACK_INDIC; - -typedef enum _TDLS_MSG_TIMER_CTRL{ - TDLS_MSG_TIMER_NONE = 0, - TDLS_MSG_TIMER_SETUPMSG = 1, - TDLS_MSG_TIMER_TEARDOWN = 2, - TDLS_MSG_TIMER_PTI = 3, - TDLS_MSG_TIMER_CS_REQ = 4, - TDLS_MSG_TIMER_CS_RSP = 5, - TDLS_MSG_TIMER_CS_NULL = 6 -}TDLS_MSG_TIMER_CTRL; - -enum _TDLS_DELAY_LEVEL{ - TDLS_DELAY_LEVEL_NONE = 0, - TDLS_DELAY_LEVEL_SHORT = 1, - TDLS_DELAY_LEVEL_LONG = 2 -}; - -enum _TDLS_BLOCK_DIR{ - TDLS_BLOCK_NONE = 0x00, - TDLS_BLOCK_PASSIVE = 0x01, - TDLS_BLOCK_ACTIVE = 0x02 -}; - -enum _TDLS_ROLL{ - TDLS_ROLL_NONE = 0, - TDLS_ROLL_INITIATOR = 1, - TDLS_ROLL_RESPONDER = 2, -}; - -enum _TDLS_STA_TEST_CHARACTER{ - TDLS_INITIATOR = 0x01, - TDLS_RESPONDER = 0x02, - TDLS_WRONGBSSID = 0x04, - TDLS_RESENDREQ = 0x08, - TDLS_REJECT_CFRM = 0x10, - TDLS_PROHIBIT = 0x20, - TDLS_KEY_LIFETIME = 0x40, - TDLS_IGNORE_TPK_TIMER = 0x80, - TDLS_RADIO_OFF = 0x100, - TDLS_CS_CHANNEL = 0x200, - TDLS_CS_BANDWIDTH = 0x400, - TDLS_CS_REJECTREQ = 0x800, - TDLS_CS_UNSOLIRSP = 0x1000, - TDLS_ACCEPT_WEAK_SEC = 0x2000, -}; - -enum _TDLS_AGGR_RATIO{ - TDLS_AGGR_RATIO_NONE = 0, - TDLS_AGGR_RATIO_20MHZ = 1, - TDLS_AGGR_RATIO_40MHZ = 2 -}; - -enum _TDLSSecurityState{ - TDLSStateSuccess = 0, - TDLSStateDiscard = 1, - TDLSStateFail = 2 -}; - -enum _TDLS_CS_STAGE{ - TDLS_CS_OnBaseChannel = 0, - TDLS_CS_ToOffChannel = 1, - TDLS_CS_OnOffChannel = 2, - TDLS_CS_BackBaseChannel = 3 -}; - -#define RT_TDLS_OP_CONFIG_DISALBE_TDLS (u1Byte)0x00 -#define RT_TDLS_OP_CONFIG_ENABLE_TDLS (u1Byte)0x01 -#define RT_TDLS_OP_CONFIG_DM_DISABLE (u1Byte)0x02 -#define RT_TDLS_OP_CONFIG_DM_ENABLE (u1Byte)0x03 -#define RT_TDLS_OP_CONFIG_SEND_DISC (u1Byte)0x04 -#define RT_TDLS_OP_CONFIG_WIFI_TEST_MODE (u1Byte)0x05 -#define RT_TDLS_OP_CONFIG_NORMAL_MODE (u1Byte)0x06 -#define RT_TDLS_OP_CONFIG_START_TDLS_PEER (u1Byte)0x07 -#define RT_TDLS_OP_CONFIG_TEAR_DOWN_PEER (u1Byte)0x08 -#define RT_TDLS_OP_CONFIG_PEER_ENTER_UAPSD_PS (u1Byte)0x09 -#define RT_TDLS_OP_CONFIG_ENABLE_CHNL_SWITCH (u1Byte)0x0A -#define RT_TDLS_OP_CONFIG_DISABLE_CHNL_SWITCH (u1Byte)0x0B -#define RT_TDLS_OP_CONFIG_PROBE_REQ (u1Byte)0x0C -#define RT_TDLS_OP_CONFIG_ACCEPT_WEAK_SEC (u1Byte)0x0D - - -#define TDLS_ENCAP_ACTION_HEADER_OFFSET (3 + 5 + 1) // LLC + SNAP + Payload Type -#define TDLS_ENCAP_MGNT_FRAME_HEADER_OFFSET (3 + 5 + 1 + 1 + 3 + 1) // LLC + SNAP + Payload Type + Category + OUI + FrameBody Type - - -//3 Category -#define GET_TDLS_FRAME_CATEGORY_CODE(_pStart) ReadEF1Byte( (pu1Byte)(_pStart) ) -#define SET_TDLS_FRAME_CATEGORY_CODE(_pStart, _val) WriteEF1Byte( ((pu1Byte)(_pStart)), _val) - -//3 Action Code -#define GET_TDLS_FRAME_ACTION_CODE(_pStart) ReadEF1Byte( (pu1Byte)(_pStart)+1 ) -#define SET_TDLS_FRAME_ACTION_CODE(_pStart, _val) WriteEF1Byte( ((pu1Byte)(_pStart))+1, _val) - -//3 Dialog Token -#define FRAME_OFFSET_TDLS_DIALOG_TOKEN(_pStart) ( ( (GET_TDLS_FRAME_ACTION_CODE(_pStart) == 0) || ( GET_TDLS_FRAME_ACTION_CODE(_pStart) == 0x04) || (GET_TDLS_FRAME_ACTION_CODE(_pStart) >= 0x09))?2:4 ) -#define GET_TDLS_FRAME_DIALOG_TOKEN(_pStart) ( ((pu1Byte)(_pStart))+FRAME_OFFSET_TDLS_DIALOG_TOKEN(_pStart)) - -//3 Status Code -#define GET_TDLS_FRAME_STATUS_CODE(_pStart) ReadEF2Byte( ((pu1Byte)(_pStart)) + 2) - -//3 Capability -#define FRAME_OFFSET_TDLS_CAPABILITY(_pStart) ( ( GET_TDLS_FRAME_ACTION_CODE(_pStart) == 0)?23:25 ) -#define GET_TDLS_SETUPREQ_FRAME_CAP(_pStart) ( ((pu1Byte)(_pStart))+FRAME_OFFSET_TDLS_CAPABILITY(_pStart)) - -//3 Extended Capability -#define GET_EXT_CAP_ELE_PEER_UAPSD_BUSTA(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart), 28, 1) -#define SET_EXT_CAP_ELE_PEER_UAPSD_BUSTA(_pEleStart, _val) SET_BITS_TO_LE_4BYTE((_pEleStart), 28, 1, _val) -#define SET_EXT_CAP_ELE_PEER_PSM(_pEleStart, _val) SET_BITS_TO_LE_4BYTE((_pEleStart), 29, 1, _val) -#define GET_EXT_CAP_ELE_CHNL_SWITCH(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart), 30, 1) -#define SET_EXT_CAP_ELE_CHNL_SWITCH(_pEleStart, _val) SET_BITS_TO_LE_4BYTE((_pEleStart), 30, 1, _val) -#define GET_EXT_CAP_ELE_TDLS_SUPPORT(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart+4), 5, 1) -#define SET_EXT_CAP_ELE_TDLS_SUPPORT(_pEleStart, _val) SET_BITS_TO_LE_4BYTE((_pEleStart+4), 5, 1, _val) -#define GET_EXT_CAP_ELE_TDLS_PROHIBITED(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart+4), 6, 1) -#define SET_EXT_CAP_ELE_TDLS_PROHIBITED(_pEleStart, _val) SET_BITS_TO_LE_4BYTE((_pEleStart+4), 6, 1, _val) -#define GET_EXT_CAP_ELE_CHNL_SWITCH_PROHIBITED(_pEleStart) LE_BITS_TO_4BYTE((_pEleStart+4), 7, 1) -#define SET_EXT_CAP_ELE_CHNL_SWITCH_PROHIBITED(_pEleStart, _val) SET_BITS_TO_LE_4BYTE((_pEleStart+4), 7, 1, _val) - -//3 PU Buffer Status -#define GET_PU_BUFFER_STATUS_ELE_AC_BK_TRAFFIC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 0, 1) -#define SET_PU_BUFFER_STATUS_ELE_AC_BK_TRAFFIC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE(_pEleStart), 0, 1, _val) -#define GET_PU_BUFFER_STATUS_ELE_AC_BE_TRAFFIC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 1, 1) -#define SET_PU_BUFFER_STATUS_ELE_AC_BE_TRAFFIC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 1, 1, _val) -#define GET_PU_BUFFER_STATUS_ELE_AC_VI_TRAFFIC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 2, 1) -#define SET_PU_BUFFER_STATUS_ELE_AC_VI_TRAFFIC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 2, 1, _val) -#define GET_PU_BUFFER_STATUS_ELE_AC_VO_TRAFFIC(_pEleStart) LE_BITS_TO_1BYTE((_pEleStart), 3, 1) -#define SET_PU_BUFFER_STATUS_ELE_AC_VO_TRAFFIC(_pEleStart, _val) SET_BITS_TO_LE_1BYTE((_pEleStart), 3, 1, _val) - -//3 Channel Switch -#define GET_TDLS_TARGET_CHANNEL(_pStart) ReadEF1Byte( ((pu1Byte)(_pStart)) + 2) -#define GET_TDLS_REGULATORY_CLASS(_pStart) ReadEF1Byte( ((pu1Byte)(_pStart)) + 3) -#define GET_TDLS_SWITCHTIMING_IE_TIME(_pStart) ReadEF2Byte( (pu1Byte)(_pStart) ) -#define SET_TDLS_SWITCHTIMING_IE_TIME(_pStart, _val) WriteEF2Byte((pu1Byte)(_pStart), _val) -#define GET_TDLS_SWITCHTIMING_IE_TIMEOUT(_pStart) ReadEF2Byte( ((pu1Byte)(_pStart)) + 2) -#define SET_TDLS_SWITCHTIMING_IE_TIMEOUT(_pStart, _val) WriteEF2Byte( ((pu1Byte)(_pStart)) + 2, _val) - -// -// Link Identifier Element format -// -// |ID | Length | BSSID | TDLS initiator | TDLS responder | -// | | | | STA Address | STA Address | -// |1 Byte | 1 Byte | 6 Bytes | 6 Bytes | 6 Bytes | -// -#define LINK_ID_SIZE (6+6+6) -typedef u1Byte LINK_IDENTIFIER[LINK_ID_SIZE], *PLINK_IDENTIFIER; - - -#define SET_TDLS_LINKID_BSSID(_pStart, _val) \ - cpMacAddr((pu1Byte)(_pStart), (pu1Byte)(_val)) -#define GET_TDLS_LINKID_BSSID(_pStart, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_pStart)) -#define SET_TDLS_LINKID_INITIATOR(_pStart, _val) \ - cpMacAddr((pu1Byte)((_pStart)+6), (pu1Byte)(_val)) -#define GET_TDLS_LINKID_INITIATOR(_pStart, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_pStart+6)) -#define SET_TDLS_LINKID_RESPONDER(_pStart, _val) \ - cpMacAddr((pu1Byte)((_pStart)+6+6), (pu1Byte)(_val)) -#define GET_TDLS_LINKID_RESPONDER(_pStart, _val) \ - cpMacAddr((pu1Byte)(_val), (pu1Byte)(_pStart+6+6)) - -#define SET_TDLS_SETUP_REQ_CAP(_pStart, _val) WriteEF2Byte((pu1Byte)(_pStart), _val) - - -typedef struct _RT_REGULATORY_CLASS -{ - u1Byte Channel[MAX_CHANNEL_NUM]; - u1Byte Len; -}RT_REGULATORY_CLASS, *PRT_REGULATORY_CLASS; - -typedef struct _CHNL_TUPLE{ - u1Byte FirstChnl; - u1Byte NumChnls; -} CHNL_TUPLE, *PCHNL_TUPLE; - -typedef struct _CHNLINFO_TUPLE{ - u1Byte ChnlNum; - BOOLEAN bw40M; - EXTCHNL_OFFSET ChnlOffset; -} CHNLINFO_TUPLE, *PCHNLINFO_TUPLE; - -typedef struct _CHNLSWITCH_TIMING{ - u2Byte SwitchTime; - u2Byte SwitchTimeout; -} CHNLSWITCH_TIMING, *PCHNLSWITCH_TIMING; -typedef struct _LINK_CAP{ - u2Byte WirelessMode; - u2Byte RateCap; - u2Byte AggregationCap; -} LINK_CAP, *PLINK_CAP; - -typedef struct _TDLS_LINK_INFO{ - // Count Traffic - u4Byte NumRxDataCount; - u4Byte RxDataCount[MAX_TDLS_SLOT_NUM]; - u2Byte SlotNum; - u2Byte SlotIndex; - - // Peer Capability on Direct Link - BOOLEAN bBW40MHz; - BOOLEAN bShortGIEnabled; - LINK_CAP DirectLinkCapInfo; - RT_ENC_ALG DirectLinkEncAlgorithm; - - // Peer Capability to AP - BOOLEAN BssbBW40MHz; - BOOLEAN BssbShortGIEnabled; - LINK_CAP BssCapInfo; - RT_ENC_ALG BssEncAlgorithm; - - // Link maintenance - u2Byte KeepConnectCount; - - // Link Status - u2Byte LinkStatus; - BOOLEAN bUseDirectLink; - u4Byte TimeoutValue; -} TDLS_LINK_INFO, *PTDLS_LINK_INFO; - -typedef struct _TDLS_CHNLSWITCH_INFO -{ - CHNLINFO_TUPLE CurrentChnl; - CHNLINFO_TUPLE TargetChnl; - CHNLSWITCH_TIMING SwitchTiming; - CHNLSWITCH_TIMING MaxSwitchTiming; -}TDLS_CHNLSWITCH_INFO, *PTDLS_CHNLSWITCH_INFO; - -typedef struct _TDLS_BLOCKED_RECORD{ - u1Byte Addr[6]; - u2Byte BlockedLevel; - u8Byte StartBlockTime; - u8Byte BlockDuration; -} TDLS_BLOCKED_RECORD, *PTDLS_BLOCKED_RECORD; - -#define GET_TDLS_RSNIE_VERSION(_pStart) \ - ReadEF2Byte((pu1Byte)(_pStart)) -#define GET_TDLS_RSNIE_PAIRWISESUITECOUNT(_pStart)\ - ReadEF2Byte((pu1Byte)(_pStart)+6) - - -typedef struct _FAST_BSS_TRANSITION{ - u1Byte MICControl[2]; - u1Byte MIC[16]; - u1Byte ANonce[32]; - u1Byte SNonce[32]; -}FAST_BSS_TRANSITION, *PFAST_BSS_TRANSITION; - -#define SET_FT_MICControl(_pStart, _val) WriteEF2Byte((pu1Byte)(_pStart), _val) - - -// -// Timeout Interval element format -// -// |ID | Length | Timeout | Timeout | -// | | | Interval Type | Interval Value | -// |1Byte | 1Byte | 1 Byte | 4 Byte | -// -#define TIMEOUT_IE_SIZE 5 -typedef u1Byte TIMEOUT_IE[TIMEOUT_IE_SIZE], *PTIMEOUT_IE; - -#define GET_TDLS_TIMEOUTIE_TIMEOUT_TYPE(_pStart) \ - ReadEF1Byte((pu1Byte)(_pStart)) -#define SET_TDLS_TIMEOUTIE_TIMEOUT_TYPE(_pStart, _val) \ - WriteEF1Byte((pu1Byte)(_pStart), _val) -#define GET_TDLS_TIMEOUTIE_TIMEOUT_VALUE(_pStart) \ - ReadEF4Byte(((pu1Byte)(_pStart)) + 1) -#define SET_TDLS_TIMEOUTIE_TIMEOUT_VALUE(_pStart, _val) \ - WriteEF4Byte(((pu1Byte)(_pStart)) +1, _val) - - -typedef struct _TDLS_RECORD{ - RT_LIST_ENTRY List; - PADAPTER Adapt; - RT_TIMER InitTDLSTimer; - RT_TIMER MsgTimer; - RT_TIMER BaseChannelTimer; - RT_TIMER CSTrafficTimer; - TDLS_MSG_TIMER_CTRL MsgTimerCtrl; - u1Byte Addr[6]; - BOOLEAN bValid; - BOOLEAN bActive; - BOOLEAN bTDLSinProgress; - BOOLEAN bTeardownSent; - u1Byte ProgressStage; - u1Byte InitTDLSDelayedLevel; - u1Byte Roll; - u1Byte DialogToken; - u1Byte LinkDialogToken; - LINK_IDENTIFIER LinkID; - u2Byte Cap; - RT_HTINFO_STA_ENTRY HTInfo; - u1Byte ExtCapSupport; - OCTET_STRING RegulatoryIE; - u1Byte ListofRC[5]; - BOOLEAN bRT2RTTurbo; - u2Byte SupWirelessMode; - OCTET_STRING RSNIE; - u1Byte RSNIEBuf[22]; - OCTET_STRING FTIE; - FAST_BSS_TRANSITION FTIEContent; - u1Byte TPK_KCK[16]; - u1Byte PTK[64]; - OCTET_STRING TimeoutIE; - TIMEOUT_IE TimeoutInterval; - OCTET_STRING RT2RTIE; - u1Byte RT2RTLinkInfo[20]; - PRT_WLAN_STA pWLanSTA; - OCTET_STRING WmmAcParaIE; - u1Byte WmmAcParaBuf[WMM_PARAM_ELEMENT_SIZE]; // Max WMM parameter size is 24 octets. - OCTET_STRING WmmAcInfoIE; - u1Byte WmmAcInfoBuf[WMM_INFO_ELEMENT_SIZE]; - u1Byte PUBufferStatus; - RT_TDLS_PS_STATE BufferSTAPSState; - u1Byte SleepSTAPSState; - u1Byte PTICount; - BOOLEAN bEnableCS; - u1Byte RejectCnt; // For marvell - BOOLEAN bSupportChnlSwitch; // Support Channel Switch - TDLS_CHNLSWITCH_INFO ChnlSwitchInfo; - u2Byte CSstate; - u1Byte TargetState; - BOOLEAN bCSRequester; - RT_WORK_ITEM OffChannelWorkitem; - RT_WORK_ITEM BaseChannelWorkitem; - BOOLEAN bSendPTIRsp; - TDLS_TX_FEEDBACK_INDIC TxReportFlag; -} TDLS_RECORD, *PTDLS_RECORD; - - -typedef struct _TDLS_TINFO{ - DECLARE_RT_OBJECT(_TDLS_TINFO); - - BOOLEAN bTDLSEnable; - BOOLEAN bDMEnable; - BOOLEAN bEnableHT; - u2Byte NumOfTDL; - TDLS_BLOCKED_RECORD BlockedPeerList[MAX_BLOCKED_PEER]; - u2Byte NumBlockedPeer; - u4Byte NumRxCount; - BOOLEAN bEDCAInTDLSMode; - u1Byte CurRSSIState; - u2Byte DiscoveryReqDialogToken; - BOOLEAN bTDLSChnlSwEnable; - - // Peer UAPSD related - u2Byte PSPeerNum; - - // Channel Switch related - BOOLEAN bCSProhibited; - u1Byte DTimCnt; - BOOLEAN bUseCS; - BOOLEAN bOffChannel; - RT_LIST_ENTRY CSQueue; - - // Dynamic Mechanism related (TDLS establish / TDLS teardown /EDCA) - u8Byte NumTDLSTxBytes; - u8Byte NumTDLSRxBytes; - u2Byte ToDSCap; - u2Byte FromDSCap; - u1Byte TxInitRate; // tx to AP - u2Byte AggrRatio; // tx to AP - u2Byte RxStatisticalRate; // rx from AP - - // WiFi Test and TestBed related - BOOLEAN bTDLSTest; - u2Byte TestSTA; - u1Byte WrongBSSID[6]; - u4Byte TestTimeout; - BOOLEAN bKeepTPKTimer; - u1Byte SwitchChannel; - BOOLEAN SwitchBandwidth40MHz; - - RT_LIST_ENTRY TDLS_Admit_List; - RT_LIST_ENTRY TDLS_Unused_List; - TDLS_RECORD TDLSRecord[MAX_TDLS_PAIR]; - u1Byte NumInAdmitList; - - BOOLEAN bAcceptWeakSec; -}TDLS_TINFO, *PTDLS_TINFO; - - -#define GET_TDLS_INFO(__pMgntInfo) ( (PTDLS_TINFO)((__pMgntInfo)->pTDLSTInfo) ) -#define GET_TDLS_ENABLED(__pMgntInfo) ( (((GET_TDLS_INFO(__pMgntInfo))->bTDLSEnable)==TRUE) ? TRUE : FALSE ) -#define SET_TDLS_ENABLED(__pMgntInfo, _value) ( ((GET_TDLS_INFO(__pMgntInfo))->bTDLSEnable) = (_value) ) -#define GET_TDLS_WIFITESTBED(__pMgntInfo) ( (GET_TDLS_INFO(__pMgntInfo))->TestSTA) -#define GET_TDLS_WIFITEST(__pMgntInfo) ( (GET_TDLS_INFO(__pMgntInfo))->bTDLSTest) -#define GET_TDLS_HTCAP(__pMgntInfo) ( (GET_TDLS_INFO(__pMgntInfo))->bEnableHT) -#define IS_TDL_EXIST(_pMgntInfo) ( (GET_TDLS_INFO(_pMgntInfo)->bTDLSEnable) && _pMgntInfo->mAssoc && (GET_TDLS_INFO(_pMgntInfo)->NumOfTDL > 0) ) -#define IS_TDLS_CONSTRUCTED(_pTDLS) ((_pTDLS)->ProgressStage == TDLS_SETUP_PROGRESS_DONE) -#define IS_TDLS_PEER_UNDER_PS(_pTDLS) ( ((_pTDLS)->pWLanSTA->bPowerSave==TRUE)?TRUE:FALSE ) -#define GET_TDLS_WIFITESTBED_RADIO_OFF(__pMgntInfo) ( ((GET_TDLS_INFO(__pMgntInfo))->TestSTA) & TDLS_RADIO_OFF ) - -#endif - - -#endif diff --git a/network/wlan/WDI/HEADER/TSType.h b/network/wlan/WDI/HEADER/TSType.h deleted file mode 100644 index 70e2c2bd..00000000 --- a/network/wlan/WDI/HEADER/TSType.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef __INC_TSTYPE_H -#define __INC_TSTYPE_H - -#define TS_SETUP_TIMEOUT 60000 // In micro seconds -#define TS_INACT_TIMEOUT 60000 -#define TS_ADDBA_DELAY 60000 - -#define TOTAL_TS_NUM 64 -#define TCLAS_NUM 4 - -// This define the Tx/Rx directions -typedef enum _TR_SELECT { - TX_DIR = 0, - RX_DIR = 1, -} TR_SELECT, *PTR_SELECT; - -#define WMM_TSPEC_BODY_LENGTH 55 -typedef struct _TS_COMMON_INFO{ - RT_LIST_ENTRY List; - u1Byte Addr[6]; - u1Byte TSpec[WMM_TSPEC_BODY_LENGTH]; - QOS_TCLAS TClass[TCLAS_NUM]; - u1Byte TClasProc; - u1Byte TClasNum; -} TS_COMMON_INFO, *PTS_COMMON_INFO; - -typedef struct _TX_TS_RECORD{ - TS_COMMON_INFO TsCommonInfo; - u2Byte TxCurSeq; - BA_RECORD TxPendingBARecord; // For BA Originator - BA_RECORD TxAdmittedBARecord; // For BA Originator -// QOS_DL_RECORD DLRecord; - BOOLEAN bAddBaReqInProgress; - BOOLEAN bAddBaReqDelayed; - BOOLEAN bUsingBa; - RT_TIMER TsAddBaTimer; -} TX_TS_RECORD, *PTX_TS_RECORD; - -typedef struct _RX_TS_RECORD { - TS_COMMON_INFO TsCommonInfo; - u2Byte RxIndicateSeq; - u1Byte RxIndicateState; - RT_LIST_ENTRY RxPendingPktList; - RT_TIMER RxPktPendingTimer; - BA_RECORD RxAdmittedBARecord; // For BA Recepient - u2Byte RxLastSeqNum; - u1Byte RxLastFragNum; - u4Byte RxBatchCount; - u4Byte RxTotalSubframeCount; //for AMSDU subframe -// QOS_DL_RECORD DLRecord; -} RX_TS_RECORD, *PRX_TS_RECORD; - - -#endif diff --git a/network/wlan/WDI/HEADER/TypeDef.h b/network/wlan/WDI/HEADER/TypeDef.h deleted file mode 100644 index 646ade43..00000000 --- a/network/wlan/WDI/HEADER/TypeDef.h +++ /dev/null @@ -1,4465 +0,0 @@ -#ifndef __INC_TYPEDEF_H -#define __INC_TYPEDEF_H - - -//============================================================================= -// MAX_TX_QUEUE Should be the MAX Tx queue number -//============================================================================= - -#define MAX_TX_QUEUE 9 // BK, BE, VI, VO, HCCA, MANAGEMENT, COMMAND, HIGH, BEACON. -#define MAX_RX_QUEUE 1 // MSDU packet queue, After C serie no Rx Command Queue -// - -#define MAX_SUBFRAME_COUNT 64 // Max number of subframe per A-MSDU -#define MAX_FRAGMENT_COUNT 8 // Max number of MPDU per MSDU - -#define MAX_PER_PACKET_VIRTUAL_BUF_NUM 24 -#define MAX_PER_PACKET_PHYSICAL_BUF_NUM MAX_PER_PACKET_VIRTUAL_BUF_NUM -#define MAX_PER_PACKET_BUFFER_LIST_LENGTH (MAX_PER_PACKET_PHYSICAL_BUF_NUM+MAX_FRAGMENT_COUNT+4+16) // +4 is for FirmwareInfo, Header, LLC and trailer, MAX_FRAGMENT_COUNT for max fragment overhead - // +16 is for A-MSDU aggregation. Add this to aggregate more frames. - -#define RTL8192EE_SEG_NUM 1 // 0:2 seg, 1: 4 seg, 2: 8 seg -#define RTL8814AE_SEG_NUM 1 // 0:2 seg, 1: 4 seg, 2: 8 seg -#define RTL8821BE_SEG_NUM 1 // 0:2 seg, 1: 4 seg, 2: 8 seg -#define RTL8822BE_SEG_NUM 1 // 0:2 seg, 1: 4 seg, 2: 8 seg -#define RTL8723DE_SEG_NUM 1 // 0:2 seg, 1: 4 seg, 2: 8 seg - - -#define MAX_TX_REG_NUM 20 -#define MAX_RX_REG_NUM 20 -//============================================================= -// TCB buffer management related definition -//============================================================= -#define MAX_FIRMWARE_INFORMATION_SIZE 32 //2006/04/30 by Emily forRTL8190 -// TODO: MAX_802_11_HEADER_LENGTH should be hardware platform independent -// Emily: The reason to set this value differently on different hardware platform -// is because if we set this value more than 40 , and use 8187b with TKIP mode, -// system crash for some unknown reason. 2006.10.20. After we fix this bug, we -// should modify this definition - -#define MAX_802_11_HEADER_LENGTH 40 -#define MAX_PKT_AGG_NUM 256 - -#define MAX_LLC_LENGTH 20 -#define MAX_802_11_TRAILER_LENGTH 8 // 8(Sucurity trailer) - -#define AMSDU_SUBHEADER_LENGTH 17 // 17(A-MSDU subheaders+A-MSDU paddings) -#define MAX_AMSDU_PADDING_LENGTH 3 // 3(A-MSDU paddings) - - -#define MAX_MCAST_LIST_NUM 32 // multicast list size -#define MAX_DEFRAG_PEER 16 -#define RT_MAX_LD_SLOT_NUM 10 - -// Increase link retry count, fast to connect to ap within 10 second -#define MAX_JOIN_RETRY_COUNT 3 // 1 // 5 - - -#define ASSOCIATE_ENTRY_NUM 64 // Max size of AsocEntry[]. -#define MAX_LOCKED_STA_LIST_NUM 32 // Max size of LockedSTAList. -#define MAX_STA_DATARATE_LIST_NUM ASSOCIATE_ENTRY_NUM // Max size of ForcedDataRateStaList[]. - - -// Excluded MAC address list. -#define MAX_EXCLUDED_MAC_ADDRESS_LIST 4 -#define MAX_REJECTED_ACCESS_AP 4 - -#define AMSDU_MAX_NUM 16 // Test A-MSDU - -// Number of SSID supported in scan process. 2006.12.19, by shien chang. -#define MAX_SSID_TO_SCAN 8 - -// Default check for hang period in second -#define RT_CHECK_FOR_HANG_PERIOD 2 // 2 secs - -#define RT_ACTION_FRAME_DELAY_CNT 2 // based on check for hang timer 2 secs to count - -#define RX_REORDER_ENTRY_NUM 512 // m - -#define RT_SCAN_EMPTY_DUMP_REG_CNT 3 - - -// The number of Max(ICs) -#define EARLY_MODE_MAX_PKT_NUM 15 -#define EARLY_MODE_MAX_PKT_NUM_8812 15 -#define EARLY_MODE_MAX_PKT_NUM_88E 10 -#define EARLY_MODE_MAX_PKT_NUM_92D 5 -#define EARLY_MODE_MAX_PKT_NUM_8723B 15 -#define EARLY_MODE_MAX_PKT_NUM_8814A 15 -#define EARLY_MODE_MAX_PKT_NUM_8821B 15 -#define EARLY_MODE_MAX_PKT_NUM_8822B 15 - - - -//MAC0 will wirte PHY1 -#define MAC0_ACCESS_PHY1 0x4000 -//MAC1 will wirte PHY0 -#define MAC1_ACCESS_PHY0 0x2000 - - -#define MAX_H2C_CMD_DATA_SIZE 7 // The largest size of an H2C cmd is 8 bytes (after 88E series), the first bytes is CMDID. - -#define BATCH_INDICATION_LEVEL_NUM 10 -#define BATCH_INDICATION_MAX_SHAKE_NUM 8 -#define BATCH_INDICATION_SHAKE_TO_STABLE 2 -#define BATCH_INDICATION_STABLE_NUM 4 -#define BATCH_INDICATION_START_POINT 5000//3000 //YJ,mod for 88E,111229 -#define BATCH_INDICATION_PERCENTAGE_OF_DATA_RATE 38 -#define MAX_BATCH_INDICATION_NUMBER 24 -#define MAX_BATCH_INDICATION_NUMBER_8814A 127 //add by ylb 20130729 - -#define MAX_TCP_SEQ_ENTRY_NUM 512 - -#define TX_DESC_NUM_92E 512 -#define RX_DESC_NUM_92E 512 - -#define TX_DESC_NUM_8723D 512 -#define RX_DESC_NUM_8723D 512 - -#define TX_DESC_NUM_8814A 1024//2048 change by ylb 20130624 -#define RX_DESC_NUM_8814A 1024 //512 change by ylb 20130624 -#define EXT_TX_DESC_BLOCK_NUM_8814A (768)//add by ylb 20141124 - -#define TX_DESC_NUM_8821B 512 -#define RX_DESC_NUM_8821B 512 - -#define TX_DESC_NUM_8822B 512 -#define RX_DESC_NUM_8822B 512 - -#define RFD_LOWER_BOUND 32 - -#define RF_PATH_MAX_NUM 8 - -#define RTS_CTS 0 -#define CTS_TO_SELF 1 - - -typedef struct _RT_FILE_HANDLER { - NDIS_HANDLE FileHandler; - pu1Byte MappedFile; - u4Byte FileLength; - -} RT_FILE_HANDLER, *PRT_FILE_HANDLER; - -typedef struct _RT_SSIDS_TO_SCAN { - OCTET_STRING Ssid[MAX_SSID_TO_SCAN]; - u1Byte SsidBuf[MAX_SSID_TO_SCAN][MAX_SSID_LEN]; - u1Byte NumSsid; -} RT_SSIDS_TO_SCAN, *PRT_SSIDS_TO_SCAN; - - -typedef enum _WIRELESS_MODE { - WIRELESS_MODE_UNKNOWN = 0x00, - WIRELESS_MODE_A = 0x01, - WIRELESS_MODE_B = 0x02, - WIRELESS_MODE_G = 0x04, - WIRELESS_MODE_AUTO = 0x08, - WIRELESS_MODE_N_24G = 0x10, - WIRELESS_MODE_N_5G = 0x20, - WIRELESS_MODE_AC_5G = 0x40, - WIRELESS_MODE_AC_24G = 0x80, - WIRELESS_MODE_AC_ONLY = 0x100, - WIRELESS_MODE_MAX = 0x800, - WIRELESS_MODE_ALL =0xFFFF //Isaiah for MacOS compiler -} WIRELESS_MODE; - -typedef enum _HT_MODE { - HT_MODE_UNDEFINED = 0x00, - HT_MODE_DISABLE = 0x01, - HT_MODE_HT = 0x02, - HT_MODE_VHT = 0x04 -} HT_MODE; - - -typedef enum _RESET_TYPE { - RESET_TYPE_NORESET = 0x00, - RESET_TYPE_NORMAL = 0x01, - RESET_TYPE_SILENT = 0x02 -} RESET_TYPE; - -typedef enum _PS_BBREGBACKUP{ - PSBBREG_RF0 = 0, - PSBBREG_RF1, - PSBBREG_RF2, - PSBBREG_AFE0, - PSBBREG_MAX, -} PS_BBREGBACKUP; - -typedef enum _PA_MODE { - PA_MODE_EXTERNAL = 0x00, - PA_MODE_INTERNAL_SP3T = 0x01, - PA_MODE_INTERNAL_SPDT = 0x02 -} PA_MODE; - -// Added for different registry settings to adjust TxPwr index. added by Roger, 2010.03.09. -typedef enum _TX_PWR_PERCENTAGE{ - TX_PWR_PERCENTAGE_0 = 0x01, // 12.5% - TX_PWR_PERCENTAGE_1 = 0x02, // 25% - TX_PWR_PERCENTAGE_2 = 0x04, // 50% - TX_PWR_PERCENTAGE_3 = 0x08, //100%, default target output power. -} TX_PWR_PERCENTAGE; - - -// Joseph TODO: -// This shall be modified for 8190 -#define MAX_WIRELESS_MODE_CNT 3 - -#define IS_WIRELESS_MODE_A(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_A) -#define IS_WIRELESS_MODE_B(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_B) -#define IS_WIRELESS_MODE_G(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_G) -#define IS_WIRELESS_MODE_N_24G(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_N_24G) -#define IS_WIRELESS_MODE_N_5G(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_N_5G) -#define IS_WIRELESS_MODE_AC_24G(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_AC_24G) -#define IS_WIRELESS_MODE_AC_5G(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_AC_5G) -#define IS_WIRELESS_MODE_AC_5G_ONLY(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode == WIRELESS_MODE_AC_ONLY) - - -#define IS_WIRELESS_MODE_24G(_Adapter) (IS_WIRELESS_MODE_B(_Adapter) || IS_WIRELESS_MODE_G(_Adapter) || IS_WIRELESS_MODE_N_24G(_Adapter) || IS_WIRELESS_MODE_AC_24G(_Adapter)) -#define IS_WIRELESS_MODE_5G(_Adapter) (IS_WIRELESS_MODE_A(_Adapter) || IS_WIRELESS_MODE_N_5G(_Adapter) || IS_WIRELESS_MODE_AC_5G(_Adapter) || IS_WIRELESS_MODE_AC_5G_ONLY(_Adapter)) -#define IS_WIRELESS_MODE_N(_Adapter) ((_Adapter)->MgntInfo.dot11CurrentWirelessMode >= WIRELESS_MODE_N_24G) -#define IS_WIRELESS_MODE_HT_24G(_Adapter) (IS_WIRELESS_MODE_N_24G(_Adapter) || IS_WIRELESS_MODE_AC_24G(_Adapter)) -#define IS_WIRELESS_MODE_AC(_Adapter) (IS_WIRELESS_MODE_AC_24G(_Adapter) || IS_WIRELESS_MODE_AC_5G(_Adapter) || IS_WIRELESS_MODE_AC_5G_ONLY(_Adapter)) -#define IS_WIRELESS_OFDM_24G(_Adapter) (IS_WIRELESS_MODE_G(_Adapter) || IS_WIRELESS_MODE_N_24G(_Adapter) || IS_WIRELESS_MODE_AC_24G(_Adapter)) - -#define IS_24G_WIRELESS_MODE(_WIRELESS_MODE) ((_WIRELESS_MODE)&(WIRELESS_MODE_B|WIRELESS_MODE_G|WIRELESS_MODE_N_24G|WIRELESS_MODE_AC_24G)) -#define IS_5G_WIRELESS_MODE(_WIRELESS_MODE) ((_WIRELESS_MODE)&(WIRELESS_MODE_A|WIRELESS_MODE_N_5G|WIRELESS_MODE_AC_5G|WIRELESS_MODE_AC_ONLY)) -#define IS_N_WIRELESS_MODE(_WIRELESS_MODE) ((_WIRELESS_MODE)&(WIRELESS_MODE_N_5G|WIRELESS_MODE_AC_5G|WIRELESS_MODE_N_24G|WIRELESS_MODE_AC_24G)) -#define IS_AC_WIRELESS_MODE(_WIRELESS_MODE) ((_WIRELESS_MODE)&(WIRELESS_MODE_AC_5G|WIRELESS_MODE_AC_24G|WIRELESS_MODE_AC_ONLY)) - -// Add for advanced wireless mode -#define IS_WIRELESS_MODE_A_ONLY(_WIRELESS_MODE) (_WIRELESS_MODE == WIRELESS_MODE_A) -#define IS_WIRELESS_MODE_B_ONLY(_WIRELESS_MODE) (_WIRELESS_MODE == WIRELESS_MODE_B) -#define IS_WIRELESS_MODE_WITHOUT_B(_WIRELESS_MODE) (!(_WIRELESS_MODE & WIRELESS_MODE_B)) -#define IS_WIRELESS_MODE_G_AND_BG(_WIRELESS_MODE) ((_WIRELESS_MODE & WIRELESS_MODE_G) && !(_WIRELESS_MODE & WIRELESS_MODE_A)) - -#define IS_HT_SUPPORTED(_Adapter) (_Adapter->RegHTMode >= HT_MODE_HT) -#define IS_VHT_SUPPORTED(_Adapter) (_Adapter->RegHTMode >= HT_MODE_VHT) - -// -// Auto channel selection mechanism for P2P GO, i.e., Operation channel -// 2015.05.15. -// -#if (AUTO_CHNL_SEL_NHM ==1) -#define IS_AUTO_CHNL_SUPPORT(_Adapter) (GetDefaultAdapter(_Adapter)->MgntInfo.AutoChnlSel.bAutoChnlSel) -#define IS_AUTO_CHNL_IN_PROGRESS(_Adapter) (_Adapter->MgntInfo.AutoChnlSel.AutoChnlSelCalInProgress) -#define GET_AUTO_CHNL_SELECTED_NUM(_Adapter) (GetDefaultAdapter(_Adapter)->MgntInfo.AutoChnlSel.AutoChnlNumberSelected) -#define GET_AUTO_CHNL_STATE(_Adapter) (GetDefaultAdapter(_Adapter)->MgntInfo.AutoChnlSel.AutoChnlStep) -#define SET_AUTO_CHNL_STATE(_Adapter, _State)\ -{\ - PADAPTER pLoopAdapter = GetDefaultAdapter(_Adapter);\ - while(pLoopAdapter)\ - {\ - PlatformAcquireSpinLock(_Adapter, RT_ACS_SPINLOCK);\ - pLoopAdapter->MgntInfo.AutoChnlSel.AutoChnlStep= _State;\ - PlatformReleaseSpinLock(_Adapter, RT_ACS_SPINLOCK);\ - pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\ - }\ -} - -#define SET_AUTO_CHNL_PROGRESS(_Adapter, _bInProgress)\ -{\ - PADAPTER pLoopAdapter = GetDefaultAdapter(_Adapter);\ - while(pLoopAdapter)\ - {\ - PlatformAcquireSpinLock(_Adapter, RT_ACS_SPINLOCK);\ - pLoopAdapter->MgntInfo.AutoChnlSel.AutoChnlSelCalInProgress = _bInProgress;\ - PlatformReleaseSpinLock(_Adapter, RT_ACS_SPINLOCK);\ - pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\ - }\ -} - -#define SET_AUTO_CHNL_SCAN_PERIOD(_Adapter, _Period)\ -{\ - PADAPTER pLoopAdapter = GetDefaultAdapter(_Adapter);\ - while(pLoopAdapter)\ - {\ - PlatformAcquireSpinLock(_Adapter, RT_ACS_SPINLOCK);\ - pLoopAdapter->MgntInfo.AutoChnlSel.AutoChnlSelPeriod = _Period;\ - PlatformReleaseSpinLock(_Adapter, RT_ACS_SPINLOCK);\ - pLoopAdapter = GetNextExtAdapter(pLoopAdapter);\ - }\ -} - -typedef enum _AUTO_CHNL_SEL_STATE{ - ACS_BEFORE_NHM = 0, // Before NHM measurement - ACS_IN_NHM = 1, // ACS is Calculating by NHM measurement - ACS_AFTER_NHM = 2, // ACS by NHM measurement is done -} AUTO_CHNL_SEL_STATE, *PAUTO_CHNL_SEL_STATE; - -typedef struct _RT_AUTO_CHNL_SEL -{ - BOOLEAN bAutoChnlSel; - RT_WORK_ITEM AutoChnlSelWorkitem; - u1Byte AutoChnlSelCalInProgress; - u1Byte AutoChnlStep; - u2Byte AutoChnlSelPeriod; // NHM measured period - u1Byte AutoChnlNumberSelected; // Channel number selected by NHM -}RT_AUTO_CHNL_SEL, *PRT_AUTO_CHNL_SEL; - -#else -#define IS_AUTO_CHNL_SUPPORT(_Adapter) FALSE -#define IS_AUTO_CHNL_IN_PROGRESS(_Adapter) FALSE -#define GET_AUTO_CHNL_SELECTED_NUM(_Adapter) 1 -#define SET_AUTO_CHNL_STATE(_Adapter, _State) -#endif - -typedef enum _RT_TCB_BUFFER_TYPE{ - RT_TCB_BUFFER_TYPE_NONE, - RT_TCB_BUFFER_TYPE_SYSTEM, // Packet is from upper layer - RT_TCB_BUFFER_TYPE_RFD, // Receive forwarding packet - RT_TCB_BUFFER_TYPE_LOCAL, // Management - RT_TCB_BUFFER_TYPE_FW_LOCAL, // Firmware download buffer - RT_TCB_BUFFER_TYPE_BT_LOCAL, // BT 3.0 -}RT_TCB_BUFFER_TYPE,*PRT_TCB_BUFFER_TYPE; - -typedef enum _RT_PROTOCOL_TYPE{ - RT_PROTOCOL_802_3, - RT_PROTOCOL_802_11, - RT_PROTOCOL_COMMAND -}PROTOCOL_TYPE, *PPROTOCOL_TYPE; - -typedef enum _RT_OP_MODE{ - RT_OP_MODE_AP, - RT_OP_MODE_INFRASTRUCTURE, - RT_OP_MODE_IBSS, - RT_OP_MODE_NO_LINK, -}RT_OP_MODE, *PRT_OP_MODE; - - -typedef enum _RT_JOIN_NETWORKTYPE{ - RT_JOIN_NETWORKTYPE_INFRA = 1, - RT_JOIN_NETWORKTYPE_ADHOC = 2, - RT_JOIN_NETWORKTYPE_AUTO = 3, -}RT_JOIN_NETWORKTYPE; - -typedef enum _RT_JOIN_ACTION{ - RT_JOIN_INFRA = 1, - RT_JOIN_IBSS = 2, - RT_START_IBSS = 3, - RT_NO_ACTION = 4, -}RT_JOIN_ACTION; - -typedef enum _RT_LED_ASSOC_STATE{ - LED_ASSOC_SECURITY_BEGIN = 1, - LED_ASSOC_SECURITY_END = 2, - LED_ASSOC_SECURITY_NONE = 3, -}RT_LED_ASSOC_STATE; - -typedef enum _RT_802_11_RELOAD_DEFAULTS{ - RT802_11ReloadWEPKeys -}RT_802_11_RELOAD_DEFAULTS, *PRT_802_11_RELOAD_DEFAULTS; - - -typedef enum{ - MLMESTARTREQ_NONE = 0, - MLMESTARTREQ_INIT = 1, - MLMESTARTREQ_NWTYPE_CHANGE = 2, - MLMESTARTREQ_AUTH_CHANGE = 3, - MLMESTARTREQ_KEY_CHANGE = 4, - MLMESTARTREQ_PRIVACY_CHANGE = 5, -}RT_MLMESTARTREQ_RSN; - - - -typedef enum{ - ROAMINGSTATE_IDLE = 0, - ROAMINGSTATE_SCANNING = 1, - ROAMINGSTATE_AUTHENTICATION = 2, - ROAMINGSTATE_REASSOCIATION = 3, -}RT_ROAMING_STATE; - -// -// Indication of roaming status, by Bruce, 2008-05-16. -// -typedef enum _RT_ROAM_TYPE{ - RT_ROAMING_NONE = 0, // Non-roaming. - RT_ROAMING_NORMAL, // Standard 802.11 roaming procedure. (= bRoaming) - RT_ROAMING_BY_DEAUTH, // Not real 802.11 roaming, just for Ndis event to keep re-connecting to the original AP. ( = bRoamingByDeauth) - RT_ROAMING_BY_SLEEP, // Not real 802.11 roaming, just for Ndis event to keep re-connecting to the original AP after S3/S4. ( = bRoamingbySleep) - RT_ROAMING_BY_DISCONNECT_POOR_LINK, // Become disconnected by poor link, just find a better AP or try to join the original one. -} RT_ROAM_TYPE, *PRT_ROAM_TYPE; - - - -//2004-04-07 for RTL8185 -typedef struct _CHANNEL_ACCESS_SETTING -{ - u1Byte CWminIndex; - u1Byte CWmaxIndex; -} CHANNEL_ACCESS_SETTING, *PCHANNEL_ACCESS_SETTING; - -typedef enum _PROTECTION_MECHANISM { - PROTECTION_MECHANISM_NONE = 0x00, - PROTECTION_MECHANISM_RTS_CTS = 0x01, - PROTECTION_MECHANISM_CTS_TO_SELF = 0x02, -} PROTECTION_MECHANISM; - -//test joseph -typedef enum _IO_READ_WRITE_TYPE{ - IO_READ_WRITE_TYPE_BYTE, - IO_READ_WRITE_TYPE_WORD, - IO_READ_WRITE_TYPE_DWORD, -}IO_READ_WRITE_TYPE, *PIO_READ_WRITE_TYPE; - -typedef enum _IO_READ_WITE_OPERATION{ - IO_READ_WRITE_OPERATION_READ = 0, - IO_READ_WRITE_OPERATION_WRITE = 1, -}IO_READ_WRITE_OPERATION, *PIO_READ_WRITE_OPERATION; -//end test joseph - -typedef enum _MAC_FILTER_TYPE{ - MAC_FILTER_DISABLE, - MAC_FILTER_ACCEPT, - MAC_FILTER_REJECT, - MAC_FILTER_LOCK, -}MAC_FILTER_TYPE, *PMAC_FLTER_TYPE; - -typedef enum _ASOCENTRY_UPDATE_ASOC_INFO_ACTION -{ - ALLOCATE_ASOC_REQ, - ALLOCATE_ASOC_RSP, - ALLOCATE_ASOC_RSP_IE_FROM_OS, - UPDATE_ASOC_REQ, - UPDATE_ASOC_RSP, - UPDATE_ASOC_RSP_IE_FROM_OS, - FREE_ASOC_REQ, - FREE_ASOC_RSP, - FREE_ASOC_RSP_IE_FROM_OS -} ASOCENTRY_UPDATE_ASOC_INFO_ACTION, *PASOCENTRY_UPDATE_ASOC_INFO_ACTION; - -typedef enum _NDIS_VERSION_BASE{ - NDIS_VERSION_BASE_6_50 = 0x00060032, // 6.50 : Threshold (Microsoft Temporarily Assigned, Not Published, 2014.08.19) - NDIS_VERSION_BASE_6_40 = 0x00060028, // 6.40 : WinBlue (Microsoft Temporarily Assigned, Not Published, 2013.03.29) - NDIS_VERSION_BASE_6_30 = 0x0006001E, // 6.30 : Win8 - NDIS_VERSION_BASE_6_20 = 0x00060014, // 6.20 : Win7 - NDIS_VERSION_BASE_6_1 = 0x00060001, - NDIS_VERSION_BASE_6_0 = 0x00060000, - NDIS_VERSION_BASE_5_2 = 0x00050002, - NDIS_VERSION_BASE_5_1 = 0x00050001, - NDIS_VERSION_BASE_5_0 = 0x00050000, -} NDIS_VERSION_BASE, *PNDIS_VERSION_BASE; - - -typedef enum _RT_NDIS_VERSION{ - RT_NDIS_VERSION_NONE_NDIS, - RT_NDIS_VERSION_5_0, - RT_NDIS_VERSION_5_1, - RT_NDIS_VERSION_6_0, - RT_NDIS_VERSION_6_1, - RT_NDIS_VERSION_6_20, - RT_NDIS_VERSION_6_30, - RT_NDIS_VERSION_6_40, - RT_NDIS_VERSION_6_50, -}RT_NDIS_VERSION, *PRT_NDIS_VERSION; - -typedef enum _RT_STA_INDICATE_STATE -{ - RT_STA_STATE_INITIAL = 0x0001, - RT_STA_STATE_DISASOC = 0x0020, - RT_STA_STATE_AP_INCOMING_ASOC_STARTED = 0X0100, - RT_STA_STATE_AP_INCOMING_ASOC_REQ_RECVD = 0X200, - RT_STA_STATE_AP_INCOMING_ASOC_COMPLETE = 0X400 -} RT_STA_INDICATE_STATE, *PRT_STA_INDICATE_STATE; - -typedef struct _RT_STA_INDICATE_STATE_MACHINE -{ - RT_STA_INDICATE_STATE CurrentState; - u4Byte NextState; -} RT_STA_INDICATE_STATE_MACHINE, *PRT_STA_INDICATE_STATE_MACHINE; - - -typedef struct _RT_TX_LOCAL_BUFFER{ - RT_LIST_ENTRY List; - SHARED_MEMORY Buffer; - u1Byte RefCount; -}RT_TX_LOCAL_BUFFER, *PRT_TX_LOCAL_BUFFER; - -typedef struct _RT_TX_AGG_COALES_BUF{ - PRT_TX_LOCAL_BUFFER pCoalesceBuffer; - PRT_TCB pLastTcb; - u4Byte Offset; - u4Byte Length; - u1Byte AggCnt; -}RT_TX_AGG_COALES_BUF, *PRT_TX_AGG_COALES_BUF; - - -typedef struct _RT_GEN_TEMP_BUFFER{ - RT_LIST_ENTRY List; - VIRTUAL_MEMORY Buffer; - BOOLEAN isDynaAlloc; // Dynamical Allocated or Static Allocated -}RT_GEN_TEMP_BUFFER, *PRT_GEN_TEMP_BUFFER; - -typedef enum _TWO_PORT_STATUS -{ - TWO_PORT_STATUS__DEFAULT_ONLY, // Win7, XP - TWO_PORT_STATUS__EXTENSION_ONLY, // Win7, XP(AP) - TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT, // Win7, XP - TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20, // Win7, XP - TWO_PORT_STATUS__DEFAULT_A_EXTENSION_N20, // Win7, XP - TWO_PORT_STATUS__ADHOC, // Win7, XP - TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE // Win7, XP -}TWO_PORT_STATUS; - -typedef enum _TWO_PORT_SHARED_OBJECT -{ - TWO_PORT_SHARED_OBJECT__STATUS,// - TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos, - TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos_WMMParamEle, // - TWO_PORT_SHARED_OBJECT__BW, // -}TWO_PORT_SHARED_OBJECT; - -enum _BWSGNL{ - BWSGNL_Auto = 0, - BWSGNL_Enable = 1, - BWSGNL_Disable = 2, -}; - -enum _TX_IPTYPE{ - TX_IPTYPE_UNKNOWN = 0, - TX_IPTYPE_UDP = 1, - TX_IPTYPE_TCP = 2, -}; - - -typedef struct _RT_RFD_STATUS{ - // - // The section must be the same as _ODM_Phy_Status_Info_ If someone add one - // element in ODM structure you need to update the element in the RFD status - // structure and in the end of the relative area. - // - // _ODM_Phy_Status_Info_ Start - // - u4Byte RxPWDBAll; - u1Byte SignalQuality; // in 0-100 index. - s1Byte RxMIMOSignalQuality[4]; //per-path's EVM - u1Byte RxMIMOEVMdbm[4]; //per-path's EVM dbm - u1Byte RxMIMOSignalStrength[4];// in 0~100 index - - s2Byte Cfo_short[4]; // per-path's Cfo_short - s2Byte Cfo_tail[4]; // per-path's Cfo_tail - - s1Byte RxPower; // in dBm Translate from PWdB - s1Byte RecvSignalPower; // Real power in dBm for this packet, no beautification and aggregation. Keep this raw info to be used for the other procedures. - u1Byte BTRxRSSIPercentage; - u1Byte SignalStrength; // in 0-100 index. - - s1Byte RxPwr[4]; //per-path's pwdb - s1Byte RxSNR[4]; //per-path's SNR -#if ((RTL8822B_SUPPORT == 1) || (RTL8723D_SUPPORT == 1)) - u1Byte RxCount:2; /* RX path counter---*/ - u1Byte BandWidth:2; - u1Byte rxsc:4; /* sub-channel---*/ -#else - u1Byte BandWidth; -#endif - u1Byte btCoexPwrAdjust; // adjust rssi for bt coex(agc table on/1ant coex type, need to add the power offset back) -#if ((RTL8822B_SUPPORT == 1) || (RTL8723D_SUPPORT == 1)) - u1Byte channel; /* channel number---*/ - BOOLEAN bMuPacket; /* is MU packet or not---*/ - BOOLEAN bBeamformed; /* BF packet---*/ -#endif - // - // _ODM_Phy_Status_Info_ End - // - - // - // The section must be the same as _ODM_Per_Pkt_Info_ If someone add one - // element in ODM structure you need to update the element in the RFD status - // structure and in the end of the relative area. - // - // _ODM_Per_Pkt_Info_ Start - // - u1Byte RawData; // Accordign Luke, ODM want to use raw data. - u1Byte StationID; - BOOLEAN bPacketMatchBSSID; - BOOLEAN bPacketToSelf; - BOOLEAN bPacketBeacon; - BOOLEAN bToSelf; - // - // _ODM_Per_Pkt_Info_ End - // - - u2Byte Length; - - u1Byte DataRate; - BOOLEAN bIsCCK; - - u2Byte bHwError:1; - u2Byte bCRC:1; - u2Byte bICV:1; - u2Byte bShortPreamble:1; - u2Byte bShift:1; - u2Byte Decrypted:1; - u2Byte Wakeup:1; - u2Byte bSTBC:1; - u2Byte bLDPC:1; - u2Byte bIsAMPDU:1; - u2Byte bFirstMPDU:1; - u2Byte bContainHTC:1; - u2Byte bRxMFPPacket:1; - u2Byte bIndicateToIhv:1; // Mark if this packet should be indicated to IHV service. - u2Byte Reserved0:1; - u1Byte AGC; - u1Byte DataRateIdx; // The rate index in the Rx Desc - u4Byte TimeStampLow; - u4Byte TimeStampHigh; - BOOLEAN bIsQosData; // Added by Annie, 2005-12-22. - u1Byte UserPriority; - - u1Byte RxDrvInfoSize; - u1Byte RxBufShift; - u1Byte PacketReportType; - - u2Byte Seq_Num; - PRX_TS_RECORD pRxTS; - - u4Byte MacID; - u1Byte WakeMatch; - - u4Byte MacIDValidEntry[2]; // 64 bits present 64 entry. - BOOLEAN bForward; - - // - // PLCP in phy status [32:7] - // - u1Byte Vht_Group_Id; - u2Byte Vht_Nsts_Aid; - u1Byte Vht_Txop_Not_Allow:1; - u1Byte Vht_Nsym_Dis:1; - u1Byte Vht_Ldpc_Extra:1; - u1Byte Vht_Su_Mcs:4; - u1Byte Vht_Beamformed:1; - // - // End of PLCP phy status - // - -}RT_RFD_STATUS,*PRT_RFD_STATUS; - - -typedef struct _RT_TCB_STATUS{ - u2Byte DataRetryCount:8; - u2Byte TOK:1; - u4Byte FrameLength:12; -}RT_TCB_STATUS,*PRT_TCB_STATUS; - -typedef struct _RT_TCB{ - RT_LIST_ENTRY List; - u4Byte tcbFlags; - PADAPTER pAdapter; - PADAPTER SourceAdapt; - //2 Packet content - RT_TCB_BUFFER_TYPE BufferType; // Tell you how to return this packet - - //2 Buffer description - u4Byte PacketLength; - u2Byte BufferCount; - SHARED_MEMORY BufferList[MAX_PER_PACKET_BUFFER_LIST_LENGTH]; - //2 Header and tail buffer - SHARED_MEMORY LLC; - SHARED_MEMORY Header[MAX_FRAGMENT_COUNT]; - SHARED_MEMORY Tailer; // Per MSDU trailer. If it is used, its address should be appended to buffer list. - SHARED_MEMORY FirewareInfo; //Pass Transmission configuration for each packet to Firmware - SHARED_MEMORY AMSDU_SubHeader; // A-MSDU subframe headers - SHARED_MEMORY Buffer; // Shared memory used for headers and trailer - //2 Information for returning packet - PVOID Reserved; // This variable depends on BufferType - PVOID ReservedBack; // This variable for Indicate to OS later - BOOLEAN bTxCompleteLater; // This variable for Indicate to OS later - - //2 Tx Desc information - u1Byte nDescUsed; - RT_TCB_STATUS status; - - //2 Coalesce buffer(dynamic allocate) - PRT_TX_LOCAL_BUFFER pCoalesceBuffer; - //2 Fragment information - u2Byte FragCount; - u2Byte FragLength[MAX_FRAGMENT_COUNT]; - u2Byte FragBufCount[MAX_FRAGMENT_COUNT]; - u1Byte nFragSent; // Number of fragment sent to lower layer. 2005.04.14, by rcnjko. - u1Byte nFragCompleted; // Number of fragment completed from lower layer. 070423, by rcnjko. - - //add by ylb for ExtTxBD - BOOLEAN isUseExtTxBDBlock; - RT_LIST_ENTRY ExtTxBDBlockUsedQueue; - - //2004/07/22, kcwu - STA_ENC_INFO_T EncInfo; - - // CCX related. - u4Byte CcxIappPacketType; - u2Byte CcxLtFrameNumber; - - u1Byte nStuckCount; - - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - //1//1Attention Please!!!<11n or 8190 specific code should be put below this line> - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - u2Byte TxDescDuration[MAX_FRAGMENT_COUNT]; - u2Byte DurationFieldVal[MAX_FRAGMENT_COUNT]; - - -#if TX_AGGREGATION - BOOLEAN outPending; // for fill tx descriptor and don't bulk out - BOOLEAN isUsbTxAgg; - BOOLEAN isLastAgg; - RT_LIST_ENTRY aggListHead; - u1Byte aggNum; - u4Byte aggOffset; - u2Byte aggRequiredTxPageNum; // Toal Tx page number of one aggregation packet. -#endif - - //2 Joseph: This can be List instead. - PRT_TCB AggregatedTCB[AMSDU_MAX_NUM]; - u1Byte AggregateNum; - - - //guangan add it for sending initial cmd packet on usb interface - BOOLEAN bLastInitPacket; - - // Joseph 20090617: Fix TP low due to DHCP issue. - u1Byte specialDataType; - u1Byte IPType; - - // Identify FW image and H2C CMD, added by Roger, 2009.11.11. - u1Byte DescPktType; - - //Added for 92D early mode - BOOLEAN bEnableEarlyMode; - BOOLEAN bInsert8BytesForEarlyMode; - u1Byte EMPktNum; - u4Byte EMPktLen[EARLY_MODE_MAX_PKT_NUM];//The max value by HW - - //Partial Coalesce for 8192DE & 8812 - u1Byte ColoaseMethod; - SHARED_MEMORY BufferListBack[MAX_PER_PACKET_BUFFER_LIST_LENGTH]; - u2Byte ColoaseBufferCount; - u2Byte BufferBackCount; - u1Byte SubHdrIndexAry[AMSDU_MAX_NUM]; - - // TxFeedback Tcb Context Place Holder for Private Data: ----------------------------- - // + Only access this private data inside the module by TxFeedbackGetTcbZone() - PRIVATE_DATA_ZONE TxFeedbackTcbZone[TX_FEEDBACK_SIZE_OF_TCB_ZONE]; - // ---------------------------------------------------------------------------- - -//1 The section is used for shortcut entry. -/******************************************************************************************* -Sinda 2011/12/09 -1. All of these variable used by RT_TCB and TXSC_TCB_ENTRY. -2. If need to add new one which do not used by TXSC_TCB_ENTRY, do not add it here.Otherwise, add it here. -3. the sequence of these variables must be the same with structure of TXSC_TCB_ENTRY. -4. Please keep the first element is "ProtocolType" and the last element is "MACHeardLen" -*******************************************************************************************/ - - PROTOCOL_TYPE ProtocolType; // If it is RT_PROTOCOL_802_11, its content will not be changed - u2Byte DataRate; // In 0.5 Mbps - u1Byte SpecifiedQueueID; // Only for management queue. Otherwise set it to UNSPECIFIED_QUEUE_ID - u1Byte priority; - u1Byte TSID; // Traffic Stream ID. WMM: 0-7, CAC: 8/9, 11e: 8-15. 070614, by rcnjko. - u1Byte DestinationAddress[ETHERNET_ADDRESS_LENGTH]; - u1Byte SourceAddress[ETHERNET_ADDRESS_LENGTH]; - - //3 TX Setting - u1Byte bLDPC:1; - u1Byte bSTBC:1; - u1Byte bEncrypt:1; - u1Byte bUseShortPreamble:1; - u1Byte bUseShortGI:1; //This Match "SHORT" field in TxFwInfo in datasheet. - u1Byte bSpecifShortGI:1; - u1Byte bTxDisableRateFallBack:1; - u1Byte bTxUseDriverAssingedRate:1; - u1Byte bBroadcast:1; - u1Byte bMulticast:1; - u1Byte bBTTxPacket:1; - u1Byte bFromUpperLayer:1; - - u1Byte bNeedAckReply:1; - u1Byte bNeedCRCAppend:1; - u1Byte bTxEnableSwCalcDur:1; - u1Byte bTxCalculatedSwDur:1; - - //3 Protection Mode - u1Byte RTSSC; - u1Byte RTSCCA; - u1Byte RTSBW; - u2Byte RTSRate; - u1Byte bHwProtection:1; - u1Byte bCTSEnable:1; - u1Byte bRTSEnable:1; - u1Byte bRTSSTBC:1; - u1Byte bRTSShort:1; - u1Byte bRTSReserved:3; - - //3 AMSDU and AMPDU related - u1Byte bAggregate:1; - u1Byte bAggregateBreakForBufferCount:1;//add by ylb for test 201300802 - u1Byte bAMSDUProcessed:1; - u1Byte bAMPDUEnable:1; - u1Byte bAMPDUReserved:4; - u1Byte AMPDUFactor; - u1Byte AMPDUDensity; - u2Byte AMPDUBufferSize; - - // Driver assign macId for rate adaptive table - u1Byte macId; - u1Byte OdmAid; // For ODM Luke's requirement for antenna switch. - u2Byte P_AID; - u1Byte G_ID; - u1Byte RATRIndex; - - // BT - u1Byte BT_macId; - - BOOLEAN bTDLPacket; - BOOLEAN bNeedTxReport; - BOOLEAN bSendPTIRsp; - BOOLEAN bSleepPkt; - - // Add for TCpChecksum - u4Byte TcpOffloadMode; - u4Byte MACHeardLen; -//1 The section is used for shortcut entry. - - s1Byte SNForShortcut; - - CHANNEL_WIDTH BWOfPacket; - - u2Byte CurrentWritePoint; - - u8Byte sysTime[4]; - -#if WLAN_ETW_SUPPORT - u2Byte TcbSequence; - u4Byte TcbFrameUniqueueID; -#endif - - // Beamforming packet - u1Byte TxBFPktType; - -}RT_TCB,*PRT_TCB; - -typedef struct _RX_AGGR_INFO{ - u1Byte bIsRxAggr:1; - u1Byte bIsLastPkt:1; - u1Byte Reserved:6; -} RX_AGGR_INFO, *PRX_AGGR_INFO; - -typedef enum _RX_IPTYPE{ - TCP_PACKET = 0, - UDP_PACKET = 1, -} RX_IPTYPE, *PRX_IPTYPE; - -typedef enum _RX_IPVER{ - IPV4 = 0, - IPV6 = 1, -} RX_IPVER, *PRX_IPVER; - -typedef enum _RX_MAC_PACKET_TYPE { - RXPacketTypeUndefined = 0, - RXPacketTypeUnicast = 1, - RXPacketTypeMulticast = 2, - RXPacketTypeBroadcast = 3, - RXPacketTypeMaximum = 4 -} RX_MAC_PACKET_TYPE, *PRX_MAC_PACKET_TYPE; - -typedef struct _RX_FILTER_INFO{ - // MAC - pu1Byte pDA; - pu1Byte pSA; - u1Byte PacketType; // RX_PACKET_TYPE - pu1Byte pEtherType; // 2 bytes : IPv4 , IPv6 , ARP ... - // IP - pu1Byte ARPOption; // 2 bytes Request or Response - pu1Byte ARPSPA; // 4 bytes ARP Sender IP - pu1Byte ARPTPA; // 4 bytes ARP Target IP - u1Byte Protocol; // UDP : 0x11 , TCP : 0x06 - //UDP - pu1Byte pDestinationPort; // 2 bytes -}RX_FILTER_INFO,*PRX_FILTER_INFO; - -typedef struct _RT_RFD{ - RT_LIST_ENTRY List; - u2Byte PacketLength; // Total packet length: Must equal to sum of all FragLength - u2Byte FragLength; // FragLength should equal to PacketLength in non-fragment case - u2Byte FragOffset; // Data offset for this fragment - u2Byte nTotalFrag; - pu1Byte SubframeArray[MAX_SUBFRAME_COUNT]; - u2Byte SubframeLenArray[MAX_SUBFRAME_COUNT]; - u1Byte nTotalSubframe; - BOOLEAN bIsAggregateFrame; - RT_RFD_STATUS Status; - ALIGNED_SHARED_MEMORY Buffer; //SHARED_MEMORY Buffer; - PVOID DriverReserved; - // 2007/01/12 MH add a element to record RX queue ID for test - u2Byte queue_id; - struct _RT_RFD *NextRfd; - - // If this flag is set, this RFD must contain bad data; therefore, insert into its own RFD queue - BOOLEAN bReturnDirectly; - - BOOLEAN bIsTemp; -#if RX_AGGREGATION - RX_AGGR_INFO RxAggrInfo; - u1Byte nChildCnt; - struct _RT_RFD *ParentRfd; -#endif - - u2Byte SeqNum; - u2Byte ValidPacketLength; - BOOLEAN bRxBTdata; - BOOLEAN bTDLPacket; - u1Byte Address3[6]; - - u1Byte WapiTempPN[16]; - u1Byte WapiSrcAddr[6]; - BOOLEAN bWapiCheckPNInDecrypt; - - // TCP Offload - BOOLEAN bHWChecksum; - RX_IPVER IPver; - RX_IPTYPE IPType; - BOOLEAN bCheckErr; - - // D0 Parse Packet Information - RX_FILTER_INFO D0FilterCoalPktInfo; - - //ODM_PHY_INFO_T PhyInfo;//must discuss with MH -#if (MULTIPORT_SUPPORT == 1) - // NOTE: ---------------------------------------------------------------- - // This flag is used to decide if FeedPacketToMultipleAdapter() should be executed. - BOOLEAN bFeedPacketToSingleAdapter; - // ---------------------------------------------------------------------- - - // Data Buffer -------------------------------- - MEMORY_BUFFER mbCloneRfdDataBuffer; - // ------------------------------------------ - -#endif - - - u4Byte SdioTransferLength; - -#if WLAN_ETW_SUPPORT - u4Byte RfdFrameUniqueueID; -#endif - -}RT_RFD,*PRT_RFD; - -typedef struct _DEFRAG_ENTRY -{ - BOOLEAN bUsed; - u1Byte SenderAddr[6]; - u1Byte TID; - u2Byte SeqNum; - u1Byte LastFragNum; - u8Byte usMaxLifeTimeStamp; - u8Byte usLastArriveTimeStamp; - PRT_RFD pRfdHead; - PRT_RFD pRfdTail; - -}DEFRAG_ENTRY, *PDEFRAG_ENTRY; - -typedef struct _RX_REORDER_ENTRY -{ - RT_LIST_ENTRY List; - u2Byte SeqNum; - PRT_RFD pRfd; -} RX_REORDER_ENTRY, *PRX_REORDER_ENTRY; - - -typedef struct _RT_9X_TX_RATE_HISTORY { - u4Byte CCK[4]; - u4Byte OFDM[8]; - // HT_MCS[0][]: BW=0 SG=0 - // HT_MCS[1][]: BW=1 SG=0 - // HT_MCS[2][]: BW=0 SG=1 - // HT_MCS[3][]: BW=1 SG=1 - u4Byte HT_MCS[4][16]; -}RT_TX_RAHIS_T, *PRT_TX_RAHIS_T; - -typedef struct _RT_SMOOTH_DATA { - u4Byte elements[100]; //array to store values - u4Byte index; //index to current array to store - u4Byte TotalNum; //num of valid elements - u4Byte TotalVal; //sum of valid elements -}RT_SMOOTH_DATA, *PRT_SMOOTH_DATA; - -typedef struct _RT_SMOOTH_DATA_4RF { - s1Byte elements[4][100];//array to store values - u4Byte index; //index to current array to store - u4Byte TotalNum; //num of valid elements - u4Byte TotalVal[4]; //sum of valid elements -}RT_SMOOTH_DATA_4RF, *PRT_SMOOTH_DATA_4RF; - - -typedef union _MGN_RATE{ - u2Byte RawValue; - - struct { - u1Byte RateIdx; - u1Byte Rsvd:5; - u1Byte SGI:1; - u1Byte Bw:1; - u1Byte HT:1; - }; -} MGN_RATE; - -typedef enum _RATE_INDEX{ - RATE_CCK_1M = 0, - RATE_CCK_2M = 1, - RATE_CCK_5_5M = 2, - RATE_CCK_11M = 3, - RATE_OFDM_6M = 4, - RATE_OFDM_9M = 5, - RATE_OFDM_12M = 6, - RATE_OFDM_18M = 7, - RATE_OFDM_24M = 8, - RATE_OFDM_36M = 9, - RATE_OFDM_48M = 10, - RATE_OFDM_54M = 11, - RATE_MCS_0 = 12, - RATE_MCS_1 = 13, - RATE_MCS_2 = 14, - RATE_MCS_3 = 15, - RATE_MCS_4 = 16, - RATE_MCS_5 = 17, - RATE_MCS_6 = 18, - RATE_MCS_7 = 19, - RATE_MCS_8 = 20, - RATE_MCS_9 = 21, - RATE_MCS_10 = 22, - RATE_MCS_11 = 23, - RATE_MCS_12 = 24, - RATE_MCS_13 = 25, - RATE_MCS_14 = 26, - RATE_MCS_15 = 27, - RATE_MCS_16 = 28, - RATE_MCS_17 = 29, - RATE_MCS_18 = 30, - RATE_MCS_19 = 31, - RATE_MCS_20 = 32, - RATE_MCS_21 = 33, - RATE_MCS_22 = 34, - RATE_MCS_23 = 35, - RATE_MCS_24 = 36, - RATE_MCS_25 = 37, - RATE_MCS_26 = 38, - RATE_MCS_27 = 39, - RATE_MCS_28 = 40, - RATE_MCS_29 = 41, - RATE_MCS_30 = 42, - RATE_MCS_31 = 43, - RATE_VHT_1SS_MCS_0 = 44, - RATE_VHT_1SS_MCS_1 = 45, - RATE_VHT_1SS_MCS_2 = 46, - RATE_VHT_1SS_MCS_3 = 47, - RATE_VHT_1SS_MCS_4 = 48, - RATE_VHT_1SS_MCS_5 = 49, - RATE_VHT_1SS_MCS_6 = 50, - RATE_VHT_1SS_MCS_7 = 51, - RATE_VHT_1SS_MCS_8 = 52, - RATE_VHT_1SS_MCS_9 = 53, - RATE_VHT_2SS_MCS_0 = 54, - RATE_VHT_2SS_MCS_1 = 55, - RATE_VHT_2SS_MCS_2 = 56, - RATE_VHT_2SS_MCS_3 = 57, - RATE_VHT_2SS_MCS_4 = 58, - RATE_VHT_2SS_MCS_5 = 59, - RATE_VHT_2SS_MCS_6 = 60, - RATE_VHT_2SS_MCS_7 = 61, - RATE_VHT_2SS_MCS_8 = 62, - RATE_VHT_2SS_MCS_9 = 63, - RATE_VHT_3SS_MCS_0 = 64, - RATE_VHT_3SS_MCS_1 = 65, - RATE_VHT_3SS_MCS_2 = 66, - RATE_VHT_3SS_MCS_3 = 67, - RATE_VHT_3SS_MCS_4 = 68, - RATE_VHT_3SS_MCS_5 = 69, - RATE_VHT_3SS_MCS_6 = 70, - RATE_VHT_3SS_MCS_7 = 71, - RATE_VHT_3SS_MCS_8 = 72, - RATE_VHT_3SS_MCS_9 = 73, - RATE_VHT_4SS_MCS_0 = 74, - RATE_VHT_4SS_MCS_1 = 75, - RATE_VHT_4SS_MCS_2 = 76, - RATE_VHT_4SS_MCS_3 = 77, - RATE_VHT_4SS_MCS_4 = 78, - RATE_VHT_4SS_MCS_5 = 79, - RATE_VHT_4SS_MCS_6 = 80, - RATE_VHT_4SS_MCS_7 = 81, - RATE_VHT_4SS_MCS_8 = 82, - RATE_VHT_4SS_MCS_9 = 83, - RATE_MCS_32 = 84, - RATE_UNKNOWN = 85, - PKT_MGNT = 86, - PKT_CTRL = 87, - PKT_UNKNOWN = 88, - PKT_NOT_FOR_ME = 89, - RATE_MAX -} RATE_INDEX, *PRATE_INDEX; - -typedef struct _RT_TX_STATISTICS { - u8Byte NumTxMulticast; - u8Byte NumTxBroadcast; - u8Byte NumTxUnicast; - u8Byte NumTxOkTotal; - u8Byte NumTxBytesUnicast; - u8Byte NumTxBytesBroadcast; - u8Byte NumTxBytesMulticast; - u8Byte NumTxOkBytesTotal; - u8Byte NumTxErrTotal; - u8Byte NumTxErrBytesTotal; - u8Byte NumTxErrUnicast; - u8Byte NumTxErrBroadcast; - u8Byte NumTxErrMulticast; - u8Byte NumTxRetryCount; - u4Byte NumTxBeaconOk; - u4Byte NumTxBeaconErr; - u4Byte NumTxBeaconUpdate; - //cosa add for debug 10/18/2007 - u4Byte NumTxInterrupt; - u4Byte NumTxSemaphore; - u4Byte NumTxDescClosed[MAX_TX_QUEUE]; - u4Byte NumTxDescFill[MAX_TX_QUEUE]; - //cosa add for debug 08/23/2007 - u4Byte NumMpSendPacketsCalled; - u4Byte NumOutOfTCB; - u4Byte numTcbOk; - u4Byte NumTransmitTCBCalled[MAX_TX_QUEUE]; - u4Byte NumTransmitTCBAvailable[MAX_TX_QUEUE]; - u4Byte NumTransmitTCBNotAvailable[MAX_TX_QUEUE]; - u4Byte NumTransmitTCBInsertTcbBusyQueue[MAX_TX_QUEUE]; - // for debug - u4Byte NumTxFeedBack; - u4Byte NumTxFeedBackRetry; - u4Byte NumTxFeedBackOk; - u4Byte NumTxFeedBackFail; - - u4Byte TransmittedRateHistogram[RATE_MAX]; - u4Byte AllTransmittedRateHistogram[RATE_MAX]; - u4Byte TransmittedRateRetry[RATE_MAX]; - u4Byte AllTransmittedRateRetry[RATE_MAX]; - - u4Byte TxAMSDUSizeHistogram[5]; // level: (<1k), (1k~2k), (2k~4k), (4k~6k), (6K~8K) - u4Byte TxAMSDUNumHistogram[5]; // level: (<3), (3~5), (6~9), (10~19), (>20) - - // For AMSDU efficiency, added by Emily, 2007.10.01 - u4Byte AMSDUTxBufferNotAvaliable; - u4Byte AMSDUTxDescNotAvaliable; - - u1Byte LastPacketRate; //cosa add for debug 11/19/2007 - - // 2008/03/35 MH Collect all transmit rate history for 9x series. - RT_TX_RAHIS_T TxRate; - - //for show Tx DataRate , by Jacken 2008/03/28 - u1Byte CurrentInitTxRate; - u4Byte CurrentTxTP; - u4Byte CurrentTxTP_Kbps; - - //Added for remember last tx ok packet for every adapter 20130116 - //by sherry - u4Byte LastNumTxOkBytesTotal; - u8Byte StartNumTxOkBytesTotal; -}RT_TX_STATISTICS, *PRT_TX_STATISTICS; - -typedef struct _TX_GENERAL{ - RT_THREAD txGenThread; - PlatformSemaphore txGenSemaphore; - - -}TX_GENERAL, *PTX_GENERAL; - - -typedef struct _RT_RX_STATISTICS { - u8Byte NumRxBroadcast; - u8Byte NumRxUnicast; - u8Byte NumRxMulticast; - u8Byte NumRxOkTotal; - u8Byte NumRxErrTotalUnicast; - u8Byte NumRxErrTotalMulticast; - u8Byte NumRxBytesUnicast; - u8Byte NumRxBytesMulticast; - u8Byte NumRxBytesBroadcast; - u8Byte NumRxOkBytesTotal; - u8Byte NumRxRetryCount; - u8Byte NumRxOKSmallPacket; - u8Byte NumRxOKMiddlePacket; - u8Byte NumRxOKLargePacket; - u8Byte NumRxRetrySmallPacket; - u8Byte NumRxRetryMiddlePacket; - u8Byte NumRxRetryLargePacket; - u8Byte NumRxCrcErrSmallPacket; - u8Byte NumRxCrxErrorPacket; - u8Byte NumRxCrcErrMiddlePacket; - u8Byte NumRxCrcErrLargePacket; - u8Byte NumRxIcvErr; - u8Byte NumRxExcludeUnencryptedUnicast; - u8Byte NumRxExcludeUnencryptedMulticast; - u8Byte NumRxExcludeUnencryptedBroadcast; - u8Byte NumRxTKIPLocalMICFailuresUnicast; - u8Byte NumRxTKIPLocalMICFailuresMulticast; - u8Byte NumRxTKIPLocalMICFailuresBroadcast; - u8Byte NumRxTKIPICVErrorUnicast; - u8Byte NumRxTKIPICVErrorMulticast; - u8Byte NumRxTKIPICVErrorBroadcast; - u8Byte NumRxCCMPDecryptErrorsUnicast; - u8Byte NumRxCCMPDecryptErrorsMulticast; - u8Byte NumRxCCMPDecryptErrorsBroadcast; - u8Byte NumRxWEPICVErrorUnicast; - u8Byte NumRxWEPICVErrorMulticast; - u8Byte NumRxWEPICVErrorBroadcast; - u8Byte NumRxWEPUndecryptableUnicast; - u8Byte NumRxWEPUndecryptableMulticast; - u8Byte NumRxWEPUndecryptableBroadcast; - u8Byte NumRxTKIPReplayMulticast; - u8Byte NumRxTKIPReplayUnicast; - u8Byte NumRxCCMPReplayMulticast; - u8Byte NumRxCCMPReplayUnicast; - u8Byte NumRxDecryptSuccessUnicast; //fake, for Ndistest - u8Byte NumRxDecryptSuccessMulticast; //fake, for Ndistest - u8Byte NumRxDecryptSuccessBroadcast; //fake, for Ndistest - u8Byte NumRxDecryptFailureUnicast; //fake, for Ndistest - u8Byte NumRxDecryptFailureMulticast; //fake, for Ndistest - u8Byte NumRxDecryptFailureBroadcast; //fake, for Ndistest - u8Byte NumRxMgntTKIPICVError; // CCXv5, S67 MFP TKIP - u8Byte NumRxMgntTKIPNoEncrypt; // CCXv5, S67 MFP TKIP - u8Byte NumRxMgntTKIPMICFailures; // CCXv5, S67 MFP TKIP - u8Byte NumRxMgntTKIPMHDRError; // CCXv5, S67 MFP TKIP - u8Byte NumRxMgntTKIPReplay; // CCXv5, S67 MFP TKIP - u8Byte NumRxMgntCCMPDecryptError; // CCXv5, S67 MFP AES - u8Byte NumRxMgntCCMPNoEncrypt; // CCXv5, S67 MFP AES - u8Byte NumRxMgntCCMPReplay; // CCXv5, S67 MFP AES - u8Byte NumRxMgntDisassocBroadcast; // CCXv5, S67 MFP - u8Byte NumRxMgntDeauthBroadcast; // CCXv5, S67 MFP - u8Byte NumRxMgntActionBroadcast; // CCXv5, S67 MFP - u8Byte NumRxReceivedFrameCount; - u8Byte NumRxCmdPkt[4]; //07/03/09 MH rx cmd element txfeedback/bcn report/cfg set/query - u8Byte NumRxMgntPacket; //Add by Maddest for DTM 1.0c 070823 - s4Byte SignalStrength; // Transformed, in dbm. Beautified signal strength for UI, not correct. - s4Byte RecvSignalPower; // Correct smoothed ss in Dbm, only used in driver to report real power now. - u4Byte RssiOldCalculateCnt; // counter for Old RSSI calculation for Antenna lock test - u4Byte RssiCalculateCnt; // counter for RSSI calculation for Antenna lock test - u4Byte PWDBAllCnt; - u4Byte PWDBAllOldCnt; - - - RT_SMOOTH_DATA ui_rssi; - RT_SMOOTH_DATA ui_link_quality; - - s4Byte LastSignalQualityInPercent; // In percentange, used for smoothing, e.g. Moving Average. - u1Byte LastLinkQuality; - s4Byte SignalQuality; // Transformed. - u1Byte QueryAfterFirstReset; //20061208 for ndistest by David. - u8Byte NumRxFramgment; - u4Byte ReceivedRateHistogram[RATE_MAX]; //2013/05/16 revised by cosa - u4Byte ReceivedRateHwErr[RATE_MAX]; //2013/08/14 cosa added for bt coex - BOOLEAN RxRateHistory; - - // used for bt coex, cosa add 2013/08/15 - u4Byte ReceivedRateHistogramBtCoex[RATE_MAX]; - u4Byte ReceivedRateHwErrBtCoex[RATE_MAX]; - - u4Byte RxAMPDUSizeHistogram[5]; // level: (<4K), (4K~8K), (8K~16K), (16K~32K), (32K~64K) - u4Byte RxAMPDUNumHistogram[5]; // level: (<5), (5~10), (10~20), (20~40), (>40) - u4Byte RxAMSDUSizeHistogram[5]; // level: (<1k), (1k~2k), (2k~4k), (4k~6k), (6K~8K) - u4Byte RxAMSDUNumHistogram[5]; // level: (<3), (3~5), (6~9), (10~19), (>20) - // 2012/11/07 MH Add for BB team VHT debug - u4Byte PacketAbilityCnt[4]; // 0/1/2/3= - - s4Byte RxSNRdB[4]; - u1Byte RxRSSIPercentage[4]; - - u1Byte RxEVMdbm[4]; - u1Byte RxEVMPercentage[2]; - - s2Byte RxCfoShort[4]; - s2Byte RxCfoTail[4]; - - u4Byte NumRx20MHzPacket; - u4Byte NumRx40MHzPacket; - //10/18/2007 cosa add for rx statistics - u4Byte NumRxInterrupt; - u4Byte NumRxDescFilled[MAX_RX_QUEUE]; - u4Byte NumRxDescReturn[MAX_RX_QUEUE]; - - u8Byte NumQryPhyStatus; // debug use only. - u8Byte NumQryPhyStatusCCK; // debug use only. - u8Byte NumQryPhyStatusHT; // debug use only. - u8Byte NumPacketMatchBSSID; // debug use only. - u8Byte NumPacketToSelf; // debug use only. - u8Byte NumProcessPhyInfo; // debug use only. - u8Byte NumNotCMPKRXQID; // debug use only. - u8Byte NumCMPKRXQID; // debug use only. - - //for show Rx DataRate , by Jacken 2008/03/12 - u4Byte ReceivePacketDataRateCounter[77]; - MGN_RATE CurRxDataRate; - u4Byte CurRxOfdmNum; - u4Byte CurRxCckNum; - - u4Byte CurRxSniffMediaPktCnt; - u4Byte LastRxSniffMediaPktCnt; - - u4Byte ReceivedRateFromAPHistogram[32]; - - u4Byte CurrentRxTP; - u4Byte CurrentRxTP_Kbps; - - //Added for remember last rx ok packet for every adapter 20130116 - //by sherry - u4Byte LastNumRxOkBytesTotal; - u8Byte StartNumRxOkBytesTotal; -}RT_RX_STATISTICS, *PRT_RX_STATISTICS; - -//---------------------------------------------------------------------------- -// For 8186 Realtek element parsing. Added by Roger, 2006.12.07. -// -typedef struct _RT_TURBO_MODE_IE_VALUE{ - u1Byte Type; - u1Byte Length; - u1Byte Value; -}RT_TURBO_MODE_IE_VALUE, *PRT_TURBO_MODE_IE_VALUE; - -// -// For 8186 Realtek element parsing. Added by Roger, 2006.12.07. -// -typedef enum _RT_IE_TYPES -{ - eRT_IE_TYPE1_TURBO_MODE = 1, - eRT_IE_TYPE2_AGGREGATION_MODE =2, - eRT_IE_TYPE_MAX -}RT_IE_TYPES, *PRT_IE_TYPES; - - -// -// For 8186 Realtek element parsing. -// -#define GET_RTIE_CAPABILITY_TURBO_MODE(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart)), 0, 1)) -#define SET_RTIE_CAPABILITY_TURBO_MODE(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart)), 0, 1, (u1Byte)(_value)) - -#define GET_RTIE_CAPABILITY_DISABLE_TURBO(_pStart) ((u1Byte)LE_BITS_TO_2BYTE( ((pu1Byte)(_pStart)), 1, 1)) -#define SET_RTIE_CAPABILITY_DISABLE_TURBO(_pStart, _value) SET_BITS_TO_LE_2BYTE( ((pu1Byte)(_pStart)), 1, 1, (u1Byte)(_value)) - -//---------------------------------------------------------------------------- - - -typedef struct _RT_LINK_DETECT_T{ - - u4Byte NumRecvBcnInPeriod; - u4Byte NumRecvDataInPeriod; - - BOOLEAN bClientAskForFCS; //When Client is asking for FCS, GO shall skip scanning. - u4Byte ClientAskForFCSNum; // number of Client asking for FCS - u4Byte RxNullDataNum; // number of Rx Null Data - - u4Byte RxBcnNum[RT_MAX_LD_SLOT_NUM]; // number of Rx beacon / CheckForHang_period to determine link status - u4Byte RxDataNum[RT_MAX_LD_SLOT_NUM]; // number of Rx data / CheckForHang_period to determine link status - u2Byte SlotNum; // number of CheckForHang period to determine link status - u2Byte SlotIndex; - - u4Byte NumTxOkInPeriod; - u4Byte NumRxOkInPeriod; - u4Byte NumRxUnicastOkInPeriod; - u1Byte NumRxUnicastThresh; - u1Byte NumRxOkThresh; - u1Byte NumRxUnicastTxOkThresh; - - BOOLEAN bBusyTraffic; - u4Byte continuousIdleCnt; - BOOLEAN bTxBusyTraffic; - BOOLEAN bRxBusyTraffic; - BOOLEAN bHigherBusyTraffic; // For interrupt migration purpose. - BOOLEAN bHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic. - BOOLEAN bVeryHigherBusyTraffic; // For interrupt migration purpose. - BOOLEAN bVeryHigherBusyRxTraffic; // We may disable Tx interrupt according as Rx traffic. - BOOLEAN bVeryHigherBusyTxTraffic; // We may disable Tx interrupt according as Rx traffic. - u4Byte LastNumTxOkInPeriod; - u4Byte LastNumRxOkInPeriod; - BOOLEAN bStableHigherBusyTraffic; //by tynli. - - BOOLEAN bBusyTrafficAccordingTP; - BOOLEAN bTxBusyTrafficAccordingTP; - BOOLEAN bRxBusyTrafficAccordingTP; - - u1Byte LastConnectedCenterFrequency; - CHANNEL_WIDTH LastConnectedBandwidth; - u4Byte ConnectButNoBcnInPeriodCnt; //debug only - u4Byte ConnectButNoDataInPeriodCnt; //debug only - u4Byte OnBeaconCnt_OnBeacon; //debug only - u4Byte OnBeaconScanCnt_OnBeacon_Scan; //debug only - u4Byte OnBeaconJoinCnt_OnBeacon_Join; //debug only - u4Byte OnBeaconBssCnt_OnBeacon_Bss; //debug only - u4Byte OnBeaconIbssCnt_OnBeacon_Ibss; //debug only - u4Byte OnDeauthCnt; //debug only - u4Byte OnDisassocCnt; //debug only - u4Byte BecomeDisconnectedCnt; //debug only - u4Byte InfraDisconnectRoamingStartCnt; //debug only - u4Byte InfraDisconnectRoamingFailCnt; //debug only - u4Byte AdhocDisconnectCnt; //debug only - u4Byte ConnectResumeFromRoaming; //debug only - u4Byte IndicateDisconnectCnt; //debug only - u4Byte BecomeDisconnectedIndex; //debug only - u8Byte BecomeDisconnectedTime[10]; //debug only -}RT_LINK_DETECT_T, *PRT_LINK_DETECT_T; - - - -typedef struct _IbssParms{ - u2Byte atimWin; -}IbssParms, *PIbssParms; - - -// -// For AP mode force per-sta data rate (ASUS WiFi-Phone project), 2006.04.18, by rcnjko. -// -typedef struct _RT_STA_DATARATE{ - u1Byte StaAddr[6]; - u2Byte DataRate; // in unit of 0.5 Mbps -}RT_STA_DATARATE, *PRT_STA_DATARATE; - - -#define MAX_BSS_DESC 512 // 40=>64, 2005.03.31, by rcnjko. - -// -// 2010/12/09 MH When merging the linux code from SC, we find that the XP linker pop -// up error information. OnBeacon_Join can not be refernced in mgntengine.c object. It is -// caused by the linker stack limitation. We declare too much local variable in the function. -// To solve the problem temporarily we decrease the max BSS_IE_BUF_LEN to 1024. Because -// linux declare two buffer as 256+256. The right way is not to use so much local buffer in stack -// We need to merge 92S code to fix the problem. -// -//#define BSS_IE_BUF_LEN 2048 - -#define BSS_IE_BUF_LEN 1024 -#define WCN_IE_BUF_LEN 256 -#define MAX_WPA_IE_BUF_LEN 256 -#define MAX_RSN_IE_BUF_LEN 256 - - -#define MAX_RFD_ARRAY_NUM 2048 - -// -// Define the receiving packet type in scanning. By Bruce, 2008-05-23. -// -#define BSS_PKT_BEACON BIT1 -#define BSS_PKT_PROBE_RSP BIT2 - - -typedef struct _ChnlSwitchAnnouncement{ - BOOLEAN bWithCSA; - u1Byte channelSwtichMode; - u1Byte NewChnlNum; - u1Byte channelSwitchCnt; -}ChnlSwitchAnnouncement, *PChnlSwitchAnnouncement; - - -typedef struct _RT_WLAN_BSS{ - u1Byte bdBssIdBuf[6]; - u1Byte bdSsIdBuf[33]; - u1Byte bdSsIdLen; - u2Byte bdBcnPer; // beacon period in Time Units - u1Byte bdDtimPer; // DTIM period in beacon periods - u8Byte bdTstamp; // 8 Octets from ProbeRsp/Beacon - u2Byte bdCap; // capability information - - u1Byte bdMacAddressBuf[6]; - - u1Byte bdSupportRateEXBuf[MAX_NUM_RATES]; - u2Byte bdSupportRateEXLen; - - IbssParms bdIbssParms; // empty if infrastructure BSS - u1Byte ChannelNumber; - u1Byte RegulatoryClass; // Regulatory Class from 0 to 255 - CHANNEL_WIDTH bdBandWidth; - - u1Byte RSSI; // 0-100. - s4Byte RecvSignalPower; // In dBm. (equal to last recv beacon directly) - s4Byte CumRecvSignalPower; // In dBm. (Cumulate with weighted ratio and a small in/decrease) - u1Byte SignalQuality; // 0-100 - u1Byte BssPacketType; // The packet type received when scanning. - s4Byte Noise; // In dBm. - - u1Byte bdERPInfo; - BOOLEAN bERPInfoValid; - - WIRELESS_MODE wirelessmode; - - // Our TSF when receving thisp packet. - u4Byte RecvTsfLow; - u4Byte RecvTsfHigh; - - u2Byte SecVersion; - - RT_ENC_ALG GroupCipherSuite; - RT_ENC_ALG PairwiseCipherSuite[MAX_CIPHER_SUITE_NUM]; - u2Byte PairwiseCipherCount; - AKM_SUITE_TYPE AuthSuite[MAX_AUTH_SUITE_NUM]; - u2Byte AuthSuiteCount; - - u2Byte PMKIDCount; - RT_PMKID_TYPE PMKIDList[1]; - BOOLEAN bPreAuth; - u1Byte NumOfPTKReplayCounter; - u1Byte NumOfGTKReplayCounter; - - u1Byte bMFPR; - u1Byte bMFPC; - u1Byte bMFPBIP; - - // Qos related. Added by Annie, 2005-11-01. - BSS_QOS BssQos; - u1Byte LastChnlUpdatecount; - - - // For 8186 auto-turbo advertising. Added by Roger, 2006.12.07. - BOOLEAN bRealtekCapType1Exist; // Added for 8186 auto-turbo advertising. - u2Byte RealtekCap; - BOOLEAN bRealtekAggCapExist; - - //2004/06/29, kcwu, for WPA - u1Byte IEBuf[BSS_IE_BUF_LEN]; - OCTET_STRING IE; - RT_SECURITY_LEVEL SecLvl; - - u1Byte WpaIeBuf[MAX_WPA_IE_BUF_LEN]; - OCTET_STRING WpaIe; - - u1Byte RsnIeBuf[MAX_RSN_IE_BUF_LEN]; - OCTET_STRING RsnIe; - -#if (WPS_SUPPORT == 1) - u1Byte BeaconWcnIeBuf[WCN_IE_BUF_LEN]; - OCTET_STRING osBeaconWcnIe; - - u1Byte ProbeRspWcnIeBuf[WCN_IE_BUF_LEN]; - OCTET_STRING osProbeRspWcnIe; - - // - //david add 20061002 simple config IE - // - u1Byte bdSimpleConfIEBuf[MAX_SIMPLE_CONFIG_IE_LEN_V2]; // Note: we should not allocate too large buffer, or 98 will encounter BSOD. Annie, 2006-10-19. - OCTET_STRING bdSimpleConfIE; -#endif - - // - // 802.11d Country IE - // - u1Byte bdCountryIEBuf[MAX_IE_LEN]; - OCTET_STRING bdCountryIE; - - // - // WMM parameter IE - // - OCTET_STRING osWmmAcParaIE; - u1Byte WmmAcParaBuf[WMM_PARAM_ELEMENT_SIZE]; // Max WMM parameter size is 24 octets. - - // - // Power Constraint IE - // - OCTET_STRING osPowerConstraintIe; - u1Byte PowerConstraintBuf[MAX_DOT11_POWER_CONSTRAINT_IE_LEN]; - - // HT Related, by Emily, 2006.08.14 - BSS_HT BssHT; - BSS_VHT BssVHT; - u1Byte Vender; - u1Byte SubTypeOfVender; - u8Byte HistoryTime; - u1Byte HistoryCount; - - // - // For Chiper check !! add by CCW 2008/0918 - // - u1Byte PairwiseChiper; - u1Byte GroupChiper; - u4Byte AKMsuit; - - -#if (P2P_SUPPORT == 1) - u1Byte P2PManagedInfo; // Wlan AP supports P2P managed device capability. -#endif - -#if (DFS_SUPPORT == 1) - // - // For 802.11h, dfs, channel switch announcement add by cosa 2010/09/02 - // - ChnlSwitchAnnouncement CSA; -#endif - -}RT_WLAN_BSS, *PRT_WLAN_BSS; - -typedef struct _RT_WLAN_RSSI{ - u1Byte bdBssIdBuf[6]; - u1Byte bdSsIdBuf[33]; - u1Byte bdSsIdLen; - - s4Byte CumRecvSignalPower; // In dBm. (Cumulate with weighted ratio and a small in/decrease) - -}RT_WLAN_RSSI, *PRT_WLAN_RSSI; - -#pragma pack(4) -typedef struct _RT_WLAN_BSS_Customized{ - u1Byte SsIdBuf[33]; - u1Byte SsIdLen; - u1Byte BssPacketType; // The packet type received when scanning. - u1Byte ChannelNumber; - s4Byte RecvSignalPower; // In dBm. (equal to last recv beacon directly) - u8Byte TimeStamp; // 8 Octets from ProbeRsp/Beacon - s4Byte Noise; // In dBm. - u1Byte BssIdBuf[6]; - u1Byte Reserved[2]; -}RT_WLAN_BSS_Customized, *PRT_WLAN_BSS_Customized; -#pragma pack() - -// -// 061122, rcnjko: -// We SHALL use this macro to change RT_WLA_BSS's IE to -// prevent malicious buffer overflow attack. -// -#define CopyRtWlanBssIE(__pRtWlanBss, __pBuf, __BufLen) \ - (__pRtWlanBss)->IE.Octet = (__pRtWlanBss)->IEBuf; \ - (__pRtWlanBss)->IE.Length = ( ((__BufLen) > BSS_IE_BUF_LEN) ? BSS_IE_BUF_LEN: (__BufLen) ); \ - CopyMem((__pRtWlanBss)->IE.Octet, (__pBuf), (__pRtWlanBss)->IE.Length) - -typedef struct _SW_CAM_TABLE{ - - u1Byte macAddress[6]; - BOOLEAN bUsed; - u1Byte pucKey[PTK_LEN]; - u4Byte ulEncAlg; - u4Byte ulUseDK; - u4Byte ulKeyId; // CAM entry in CAM - u1Byte portNumber; //vivi added for new cam search flow, 20091028...ID different port - -}SW_CAM_TABLE,*PSW_CAM_TABLE; - -typedef struct _RSSI_STA{ - s4Byte UndecoratedSmoothedPWDB; - s4Byte UndecoratedSmoothedCCK; - s4Byte UndecoratedSmoothedOFDM; - u8Byte PacketMap; - u4Byte OFDM_pkt; - u1Byte ValidBit; - s4Byte RxRSSIPercentage[4]; - s4Byte RSSI_CCK_Path[4]; - s4Byte RSSI_CCK_Path_cnt[4]; - u4Byte OFDM_Pkt_Cnt; - u4Byte CCK_Pkt_Cnt; - -}RSSI_STA, *PRSSI_STA; - -typedef enum _RT_STA_EOSP_STATE -{ - RT_STA_EOSP_STATE_OPENED = 0, // The SP is opend. - RT_STA_EOSP_STATE_ENDING = 1, // The SP is ending. - RT_STA_EOSP_STATE_ENDED = 2, // The SP is ended. -}RT_STA_EOSP_STATE, *PRT_STA_EOSP_STATE; - -typedef struct _RT_WLAN_STA{ - BOOLEAN bUsed; // TRUE if this entry is used. - BOOLEAN bLocked; // TRUE if this STA MAC Address is locked. - u1Byte Sum; // Sum of MacAddr, used for hash purpose. - u1Byte MacAddr[6]; // Mac address of this STA. - AUTH_ALGORITHM AuthAlg; // AuthAlg of the STA. - RT_AUTH_MODE AuthMode; - u1Byte AuthPassSeq; // 0: Not yet authenticated / 2: STA has receive an successful Auth2. / 4: STA has received an successful Auth4. - BOOLEAN bAssociated; // TRUE if this STA is associated to this BSS. - BOOLEAN bDisassociated; - u2Byte AID; // AID - - // HalMacID used for this peer --------------------------- - u1Byte AssociatedMacId; - // -------------------------------------------------- - - u1Byte MultiPortStationIdx; - - u8Byte LastActiveTime; // Last active time in ms. - u1Byte WmmStaQosInfo; // Qos Info field when sent from WMM STA in the (re-)association packet. - BOOLEAN bPowerSave; // TRUE if the STA is in power save mode, FALSE is for active one. - RT_LIST_ENTRY PsQueue; // Packet queued for this STA if it is in legacy power save mode. - RT_LIST_ENTRY WmmPsQueue; // Packets belong to WMM APSD ACs queued. - RT_STA_EOSP_STATE WmmEosp; // If true, the USP is end now for this STA. - - AUTH_PKEY_MGNT_TAG perSTAKeyInfo; // WPA-PSK related variable - - u1Byte bdSupportRateEXBuf[MAX_NUM_RATES]; // Rate supported by the STA. - u2Byte bdSupportRateEXLen; // Length of bdSupportRateEXBuf[]. - u1Byte HighestOperaRate; // Highest supported rate in bdSupportRateEXBuf. - QOS_MODE QosMode; //STA QoS Mode - - WIRELESS_MODE WirelessMode; // Wireless mode of STA associated. - CHANNEL_WIDTH BandWidth; - - BOOLEAN FillTIMFlags; - BOOLEAN FillTIM; - - u2Byte DataRate; - BOOLEAN bUseShortGI; - //add for HW enc ,By CCW - u4Byte keyindex; - - // add to Clear PS tcb - u1Byte PSIdleCunt; - - - RT_HTINFO_STA_ENTRY HTInfo; - RT_VHTINFO_STA_ENTRY VHTInfo; - u1Byte ratr_index; - u1Byte Ratr_State; - u4Byte IOTAction; - u2Byte IOTMaxMpduLen; - - - // Win7 - pu1Byte AP_RecvAsocReq; - u4Byte AP_RecvAsocReqLength; - pu1Byte AP_SendAsocResp; - u4Byte AP_SendAsocRespLength; - - pu1Byte AP_AsocRspIEFromOS; - u4Byte AP_AsocRspIEFromOSLength; - - u2Byte Capability; - u2Byte usListenInterval; - u8Byte AssociationUpTime; - - BOOLEAN bOsDecisionMade; - BOOLEAN bNotAcceptedByOs; // Use "NotAccepted" instead of "Accepted" because 0 is the default value we want after reset. - u2Byte OsReasonCode; - - RT_STA_INDICATE_STATE_MACHINE IndicationEngine; - - RSSI_STA rssi_stat; - - // For preventing duplicate packet indications ------ - u1Byte LastRxUniFragNum; - u2Byte LastRxUniSeqNum; - // ------------------------------------------ - -#if (P2P_SUPPORT == 1) - BOOLEAN bP2PClient; - P2P_CLIENT_INFO_DISCRIPTOR P2PClientInfoDesc; -#endif //#if (P2P_SUPPORT == 1) - -#if (WPS_SUPPORT == 1) - OCTET_STRING SimpleConfigInfo; -#endif - - - // - // ================ODM Relative Info======================= - // Please be care, dont declare too much structure here. It will cost memory * STA support num. - // - // - UINT8 IOTPeer; // Enum value. HT_IOT_PEER_E Every team define independent enum. - - // ODM Write - //1 PHY_STATUS_INFO - UINT8 RSSI_Path[4]; // - UINT8 RSSI_Ave; - UINT8 RXEVM[4]; - UINT8 RXSNR[4]; - -}RT_WLAN_STA,*PRT_WLAN_STA; - -typedef struct _RT_802_11_BSSID_LIST -{ - u4Byte NumberOfItems; // in list below, at least 1 - RT_WLAN_BSS *pbssidentry; -} RT_802_11_BSSID_LIST, *PRT_802_11_BSSID_LIST; - -typedef struct _RT_802_11_BSSID_LIST_Customized -{ - u4Byte NumberOfItems; // in list below, at least 1 - RT_WLAN_BSS_Customized bssidentry[1024]; -} RT_802_11_BSSID_LIST_Customized, *PRT_802_11_BSSID_LIST_Customized; - -// WDS Mode, 2006.06.12, by rcnjko. -#define WDS_DISABLED 0 -#define WDS_AP_MODE 1 - -// -// Customer ID, note that: -// This variable is initiailzed through EEPROM or registry, -// however, its definition may be different with that in EEPROM for -// EEPROM size consideration. So, we have to perform proper translation between them. -// Besides, CustomerID of registry has precedence of that of EEPROM. -// defined below. 060703, by rcnjko. -// -typedef enum _RT_CUSTOMER_ID -{ - RT_CID_DEFAULT = 0, - RT_CID_WHQL = 5, - -}RT_CUSTOMER_ID, *PRT_CUSTOMER_ID; - -//---------------------------------------- -//add for ROGUE AP 2007.07.28 , by CCW -//---------------------------------------- -typedef struct _MH_CCX_ROGUE_AP_ENTEY{ - u4Byte code; - u1Byte bssid[6]; - BOOLEAN bused; -} MH_CCX_ROGUE_AP_ENTEY,*PMH_CCX_ROGUE_AP_ENTEY; - - -#define SIZE_ROGUE_AP_ENTEY 64 -#define ASOC_INFO_IE_SIZE 2500 - -// -// Store the lastest association information. 2006.11.14, by shien chang. -// - -typedef struct _ASOC_INFO{ - u1Byte AuthSeq1[ASOC_INFO_IE_SIZE]; - u4Byte AuthSeq1Length; - u1Byte AuthSeq2[ASOC_INFO_IE_SIZE]; - u4Byte AuthSeq2Length; - u1Byte AsocReq[ASOC_INFO_IE_SIZE]; - u4Byte AsocReqLength; - u1Byte AsocResp[ASOC_INFO_IE_SIZE]; - u4Byte AsocRespLength; - u1Byte Beacon[ASOC_INFO_IE_SIZE]; - u4Byte BeaconLength; - u1Byte PeerAddr[6]; - BOOLEAN FlagReAsocReq; - BOOLEAN FlagReAsocResp; - - BOOLEAN bDeauthAddrValid; // TRUE if the DeauAddr is valid and will be reset to FALSE in context of DrvIFIndicateDisassociation(). - u1Byte DeauthAddr[6]; // TA of deauth frame we recevied. - -} ASOC_INFO, *PASOC_INFO; - -typedef enum _UPDATE_ASOC_INTO_ACTION{ - UpdateAuthSeq1, - UpdateAuthSeq2, - UpdateAsocReq, - UpdateAsocResp, - UpdateAsocBeacon, - UpdateAsocPeerAddr, - UpdateFlagReAsocReq, - UpdateFlagReAsocResp, - UpdateDeauthAddr, -} UPDATE_ASOC_INFO_ACTION, *PUPDATE_ASOC_INFO_ACTION; - -// -// Auto Select Channel related. -// -typedef struct _CHANNEL_INFO -{ - u1Byte ChannelNumber; - int Weight; -}CHANNEL_INFO, *PCHANNEL_INFO; - -typedef enum _CHANNEL_SELECT_MODE -{ - CH_SEL_DECREASE = 0, - CH_SEL_INCREASE = 1, - CH_SEL_RANDOM = 2, -}CHANNEL_SELECT_MODE, *PCHANNEL_SELECT_MODE; - -typedef enum _CHANNEL_START_MODE -{ - CH_START_MIN = 0, - CH_START_MIDDLE = 1, - CH_START_MAX = 2, -}CHANNEL_START_MODE, *PCHANNEL_START_MODE; - -// -// For Turbo mode. Added by Roger, 2006.12.07. -// -typedef struct _RT_TURBO_CA -{ - BOOLEAN bEnabled; // TURE if TCA is ON, FALSE o.w.. - - // Periodical timer for TCA checking. - RT_TIMER TcaCheckTimer; - u4Byte CheckCnt; // Min: 1, Max: CheckInterVal. - u4Byte CheckInterval; - - // Per-packet contention window for TCA on. - // Note that, this is one of means of TCA, - // we also can information of other means here. - //u1Byte ECWMin; // For Restore. - //u1Byte ECWMax;//For Restore. - - // Statistics in last TCA_CHECK_INTERVAL. - RT_TX_STATISTICS LastTxStats; - RT_RX_STATISTICS LastRxStats; - u4Byte LastTxRetryCnt; - u4Byte TxThroughput; // in KBps. - u4Byte RxThroughput; // in KBps. - u4Byte TotalThroughput; //in MBps - - // Statistics in last nomal channel access setting. - RT_TX_STATISTICS LastNormalTxStats; - RT_RX_STATISTICS LastNormalRxStats; - u4Byte NormalTotalThroughput; // in KBps. -}RT_TURBO_CA, *PRT_TURBO_CA; - - -// Add for Real WOW -#define MAX_RS_PACKET_LEN 1024 -#define MAX_RealWoW_KCP_SIZE 124 //(100 + 24) -#define MAX_RealWoW_KAP_SIZE 48 -#define MAX_RealWoW_Payload 64 -#pragma pack (1) // Set our value. -typedef struct _TEREDOINFO -{ - u1Byte DIPv4[4]; - u1Byte MacID[6]; - u2Byte TeredoPort; - u1Byte TeredoIP[16]; - u1Byte HashPtn[16]; - u1Byte HashAuth[16]; - unsigned int DHCPExpireTime; - u2Byte RALostCnt; -}TEREDOINFO,*PTEREDOINFO; - - -typedef struct _KCPInfo{ - u4Byte nId; // = id - int destAddr; - u1Byte MacID[6]; - u2Byte desPort; - u2Byte PKTLEN; -}KCPInfo, *PKCPInfo; - -typedef struct _KCPContent{ - u4Byte id; // = id - u4Byte mSec; // = msec - u4Byte size; // =size - u1Byte bPacket[MAX_RealWoW_KCP_SIZE]; // put packet here -} KCPContent, *PKCPContent; - -typedef struct _RealWoWAckPktInfo { - u2Byte ackLostCnt; - u2Byte patterntSize; - u1Byte pattern[MAX_RealWoW_Payload]; -}RealWoWAckPktInfo,*PRealWoWAckPktInfo; - -typedef struct _RealWoWWPInfo { - u2Byte patterntSize; - u1Byte pattern[MAX_RealWoW_Payload]; -}RealWoWWPInfo,*PRealWoWWPInfo; - -typedef struct _RT_S5WakeUPInfo { - u1Byte PSK[PASSPHRASE_LEN]; - u4Byte PSKLen; -}RT_S5WakeUPInfo,*PRT_S5WakeUPInfo; - - -#pragma pack() - - -typedef struct _WIRELESS_SETTING_BEFORE_SCAN -{ - /*WirelessModeScanInProgress is designed for driver to keep the previous band(2.4G/5G) - during scan. It is only meaningful for a/b/g device which require to switch band twice - during scan (either 2.4->5->2.4 or 5->2.4->5*/ - WIRELESS_MODE WirelessModeScanInProgress; - - /*WirelessMode is designed to keep the original wireless mode setting before scan*/ - WIRELESS_MODE WirelessMode; - - /*ChannelNumber is designd to keep the original channel number before scan*/ - u1Byte ChannelNumber; - - /*ChannelBandwidth is designed to keep the original channel bandwidth(20/40MHz) before scan*/ - CHANNEL_WIDTH ChannelBandwidth; - - /* Extension channel offset before scan. This is useful when channel bandwidth is 40MHz. */ - EXTCHNL_OFFSET Ext20MHzChnlOffsetOf40MHz; - - EXTCHNL_OFFSET Ext40MHzChnlOffsetOf80MHz; - - u1Byte CenterFrequencyIndex1; - - BOOLEAN RestoreTo40MBW; //for Dual band scan. - - u1Byte WMMParamEle[WMM_PARAM_ELEMENT_SIZE];//add by ylb 20130627 for restore WMMParamEle after scan, Fix WMMParamEle changed during scan and set the wrong value of QOS Parameter( TxOP) -}WIRELESS_SETTING_BEFORE_SCAN, *PWIRELESS_SETTING_BEFORE_SCAN; - -typedef struct _INIT_GAIN -{ - u1Byte XAAGCCore1; - u1Byte XBAGCCore1; - u1Byte XCAGCCore1; - u1Byte XDAGCCore1; - u1Byte CCA; - -} INIT_GAIN, *PINIT_GAIN; -/*---------------------Define local Tx BB Gain Table-----------------------*/ -#define OFDM_TABLE_SIZE_92C 37 -#define CCK_TABLE_SIZE 33 -#define CCK_TABLE_SIZE_88F 21 -#define OFDM_TABLE_SIZE 43 - -#define TxBBGainTableLength 37 -#define CCKTxBBGainTableLength 33 -typedef struct _TXBBGain_Struct -{ - s4Byte TxBBIQAmplifyGain; - u4Byte TXBBGainValue; -} TXBBGain_Struct, *PTXBBGain_Struct; -typedef struct _CCKTXBBGain_Struct -{ - //The Value is from a22 to a29 one Byte one time is much Safer - u1Byte CCKTXBBValueArray[8]; -} CCKTXBBGain_Struct,*PCCKTXBBGain_Struct; -/*---------------------End Define--------------------------------------*/ - - -/*---------------------Define Power Save Related-----------------------*/ -typedef enum _IPS_CALLBACK_FUNCION -{ - IPS_CALLBACK_NONE = 0, - IPS_CALLBACK_MGNT_LINK_REQUEST = 1, - IPS_CALLBACK_JOIN_REQUEST = 2, -}IPS_CALLBACK_FUNCION; - -typedef enum _Fsync_State{ - Default_Fsync, - HW_Fsync, - SW_Fsync -}Fsync_State; - -typedef enum _RT_AP_TYPE -{ - RT_AP_TYPE_NONE = 0, // NOT in AP mode - RT_AP_TYPE_NORMAL, // N5 and !n6_fake - RT_AP_TYPE_IBSS_EMULATED, // N6, N62 and n6_fake - RT_AP_TYPE_VWIFI_AP, // N62 and !n6_fake - RT_AP_TYPE_EXT_AP, - RT_AP_TYPE_LINUX, -} RT_AP_TYPE, *PRT_AP_TYPE; - - - -/** Define AP states */ -typedef enum _AP_STATE -{ - AP_STATE_STOPPED = 0, // AP INIT state - AP_STATE_STARTING, - AP_STATE_STARTED, - AP_STATE_STOPPING, - AP_STATE_INVALID = 0xFFFFFFFF // When MP is not in AP mode -} AP_STATE, *PAP_STATE; - -// RT_CUSTOM_EVENT -typedef u4Byte RT_CUSTOM_EVENT, *PRT_CUSTOM_EVENT; - -// -// These events are realtek proprietary status indicated to varies of upper layer or receiver. -// They are common for all platform and may be mapped to the specified events to the -// platform besed events respectively. -// Different events also can be defined as the same number, because they may be indicated to -// different target. -// By Bruce, 2011-06-10. -// -#define RT_CUSTOM_EVENT_WOL_GTK ((RT_CUSTOM_EVENT)0x00210001) // Wol by GTK updating -#define RT_CUSTOM_EVENT_IRP_UNLOAD ((RT_CUSTOM_EVENT)0x00220000) // IRP event indicated to the upper layer to notify the driver unload event - -// TDLS -#define RT_CUSTOM_EVENT_TDLS_START ((RT_CUSTOM_EVENT)0x00230000) // TDLS peer Start event. -#define RT_CUSTOM_EVENT_TDLS_PEER_SETUP ((RT_CUSTOM_EVENT)0x00230000) // TDLS peer is setup. -#define RT_CUSTOM_EVENT_TDLS_TEAR_DOWN_TO_PEER ((RT_CUSTOM_EVENT)0x00230001) // TDLS peer is teared down. -#define RT_CUSTOM_EVENT_TDLS_TEAR_DOWN_FROM_PEER ((RT_CUSTOM_EVENT)0x00230002) // TDLS peer is teared down. -#define RT_CUSTOM_EVENT_TDLS_SETUP_FAILURE ((RT_CUSTOM_EVENT)0x00230003) // TDLS setup fails. -#define RT_CUSTOM_EVENT_TDLS_STATUS_PEER_REJECT_CH_SWITCH ((RT_CUSTOM_EVENT)0x00230010) // The target peer rejected the channel switch request. -#define RT_CUSTOM_EVENT_TDLS_STATUS_CH_SWITCH_PROHIBITED ((RT_CUSTOM_EVENT)0x00230011) // Channel switch is prohibited by AP. -#define RT_CUSTOM_EVENT_TDLS_STATUS_PEER_NO_CH_SWITCH ((RT_CUSTOM_EVENT)0x00230012) // Peer didn't support channel switch. -#define RT_CUSTOM_EVENT_TDLS_STATUS_PEER_NO_PUAPSD ((RT_CUSTOM_EVENT)0x00230013) // Target peer didn't support PUAPSD. -#define RT_CUSTOM_EVENT_TDLS_END ((RT_CUSTOM_EVENT)0x00230FFF) // TDLS peer End event - -// WPS -#define RT_CUSTOM_EVENT_WPS_RECV_PKT ((RT_CUSTOM_EVENT)0x00240000) // Reveived the WPS packet - -// Trouble Shooting Event -#define RT_CUSTOM_EVENT_TRO_SH_START ((RT_CUSTOM_EVENT)0x00231000) // Trouble shooting event Start -#define RT_CUSTOM_EVENT_TRO_SH_TX_RPT_HANG ((RT_CUSTOM_EVENT)0x00231001) // Tx Report Hang -#define RT_CUSTOM_EVENT_TRO_SH_END ((RT_CUSTOM_EVENT)0x00231FFF) // Trouble shooting event End - -// VHT -#define RT_CUSTOM_EVENT_VHT_RECV_GID_MGNT_FRAME ((RT_CUSTOM_EVENT)0x00250000) // BFee recv GID mgnt frame - -#define RT_CUSTOM_EVENT_P2P_START_AP_REQ ((RT_CUSTOM_EVENT)0x40040000) -#define RT_CUSTOM_EVENT_P2P_STOP_AP_REQ ((RT_CUSTOM_EVENT)0x40040001) -#define RT_CUSTOM_EVENT_P2P_CONNECT_CLIENT_REQ ((RT_CUSTOM_EVENT)0x40040002) -#define RT_CUSTOM_EVENT_P2P_DISCONNECT_CLIENT_REQ ((RT_CUSTOM_EVENT)0x40040003) -#define RT_CUSTOM_EVENT_P2P_INDICATE_CURRENT_STATE ((RT_CUSTOM_EVENT)0x40040004) -#define RT_CUSTOM_EVENT_P2P_INDICATE_GO_FORMATED ((RT_CUSTOM_EVENT)0x40040005) -#define RT_CUSTOM_EVENT_P2P_INDICATE_ON_PROVISION_DISC_REQ ((RT_CUSTOM_EVENT)0x40040006) -#define RT_CUSTOM_EVENT_P2P_INDICATE_ON_PROVISION_DISC_RSP ((RT_CUSTOM_EVENT)0x40040007) -#define RT_CUSTOM_EVENT_P2P_INDICATE_ON_INVITATION_REQ ((RT_CUSTOM_EVENT)0x40040008) -#define RT_CUSTOM_EVENT_P2P_INDICATE_ON_INVITATION_RSP ((RT_CUSTOM_EVENT)0x40040009) -#define RT_CUSTOM_EVENT_P2P_INDICATE_CURRENT_DEV_PASSWD_ID ((RT_CUSTOM_EVENT)0x4004000A) -#define RT_CUSTOM_EVENT_P2P_INDICATE_DEV_REQ_CLIENT_GO_FORMATION ((RT_CUSTOM_EVENT)0x4004000B) -#define RT_CUSTOM_EVENT_P2P_INDICATE_ENABLE_ICS ((RT_CUSTOM_EVENT)0x4004000C) -#define RT_CUSTOM_EVENT_P2P_INDICATE_CLIENT_CONNECTED ((RT_CUSTOM_EVENT)0x4004000D) -#define RT_CUSTOM_EVENT_P2P_INDICATE_CLIENT_DISCONNECTED ((RT_CUSTOM_EVENT)0x4004000E) -#define RT_CUSTOM_EVENT_P2P_INDICATE_CURRENT_ROLE ((RT_CUSTOM_EVENT)0x4004000F) -#define RT_CUSTOM_EVENT_P2P_INDICATE_DEV_DISC_COMPLETE ((RT_CUSTOM_EVENT)0x40040010) -#define RT_CUSTOM_EVENT_P2P_INDICATE_SD_RSP ((RT_CUSTOM_EVENT)0x40040011) -#define RT_CUSTOM_EVENT_P2P_INDICATE_SD_REQ ((RT_CUSTOM_EVENT)0x40040012) -#define RT_CUSTOM_EVENT_P2P_INDICATE_SCAN_LIST ((RT_CUSTOM_EVENT)0x40040013) -#define RT_CUSTOM_EVENT_P2P_SVC ((RT_CUSTOM_EVENT)0x40040014) -#define RT_CUSTOM_EVENT_P2P_CHANGING_AP_CHANNEL ((RT_CUSTOM_EVENT)0x40040015) -#define RT_CUSTOM_EVENT_NAN_INDICATE_SDF ((RT_CUSTOM_EVENT)0x40040016) - -// WDI ((RT_CUSTOM_EVENT)0xFF000000) -#define RT_CUSTOM_EVENT_WDI_START ((RT_CUSTOM_EVENT)0xFF000000) // WDI event start -#define RT_CUSTOM_EVENT_WDI_FT_ASSOC_NEEDED ((RT_CUSTOM_EVENT)0xFF000001) // FT association request parameter needed -#define RT_CUSTOM_EVENT_WDI_END ((RT_CUSTOM_EVENT)0xFF0000FF) // WDI event end - - - -// RT_CUSTOM_INDI_TARGET is the target indicated for RT_CUSTOM_EVENT -#define RT_CUSTOM_INDI_TARGET_NONE 0 -#define RT_CUSTOM_INDI_TARGET_IHV BIT0 // Indicate to IHV (for Ndis 6) -#define RT_CUSTOM_INDI_TARGET_IRP BIT1 // Indicate to all receivers who bound this adapter by IRP. -#define RT_CUSTOM_INDI_TARGET_WDI BIT2 // Indicate to Windows WDI - - - -// -//About WOL pattern info, by tynli. 2009.06.18. -// -#define MAX_SUPPORT_WOL_PATTERN_NUM_88E 22 //64 // 22 is on Win8.1 WHQL requirement -#define MAX_SUPPORT_WOL_PATTERN_NUM_8723A 16 -#define MAX_SUPPORT_WOL_PATTERN_NUM_92C 8 -#define MAX_SUPPORT_WOL_PATTERN_NUM_8814A 22 // add by ylb 20130812 -#if 0 -#define MAX_SUPPORT_WOL_PATTERN_NUM_COMM \ - ((MAX_SUPPORT_WOL_PATTERN_NUM_88E > MAX_SUPPORT_WOL_PATTERN_NUM_92C)? (MAX_SUPPORT_WOL_PATTERN_NUM_88E) : (MAX_SUPPORT_WOL_PATTERN_NUM_92C)) -#else -#define MAX2(a, b) (a>b?a:b) -#define MAX4(a,b,c,d) (MAX2(MAX2(a,b), MAX2(c,d))) -#define MAX_SUPPORT_WOL_PATTERN_NUM_COMM (MAX4(MAX_SUPPORT_WOL_PATTERN_NUM_88E,MAX_SUPPORT_WOL_PATTERN_NUM_8723A,MAX_SUPPORT_WOL_PATTERN_NUM_92C,MAX_SUPPORT_WOL_PATTERN_NUM_8814A)) -#endif -// 88C supports 8 WOL patterns, 8723A supports 16 patterns, otherwise is the same as the pattern number of 88E. by tynli 2012.10.12. -#define MAX_SUPPORT_WOL_PATTERN_NUM(_Adapter) \ - (IS_HARDWARE_TYPE_8814A(_Adapter) ? (MAX_SUPPORT_WOL_PATTERN_NUM_8814A): (MAX_SUPPORT_WOL_PATTERN_NUM_88E)) - -#define RSVD_WOL_PATTERN_NUM 1 // pattern num for user defined - -#define WKFMCAM_ADDR_NUM 6 -#define WKFMCAM_SIZE 24 - -#define MAX_WOL_BIT_MASK_SIZE 16 //unit: byte -#define MAX_WOL_PATTERN_SIZE 128 - -#define MAX_HW_PATTERN_MATCH_NUM_8723A 12 // 8723A Hw capability -#if 0 -#define USE_FW_PATTERN_MATCH(_pAdapter) \ - (IS_HARDWARE_TYPE_8723A(_pAdapter) ? ((GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->WoLPatternNum > MAX_HW_PATTERN_MATCH_NUM_8723A) ? TRUE: FALSE): FALSE) -#else -#define USE_FW_PATTERN_MATCH(_pAdapter) FALSE -#endif -typedef enum _WOLPATTERN_TYPE -{ - eUnicastPattern = 0, - eMulticastPattern = 1, - eBroadcastPattern = 2, - eDontCareDA = 3, - eUnknownType = 4, -}WOLPATTERN_TYPE; - -// The H2C WoL pattern match info format is defined for Fw pattern match mechanism. -typedef struct _H2C_WOL_PATTERN_MATCH_INFO{ - u1Byte PatternContent[128]; - u1Byte BitMask[16]; - u1Byte ValidBitNum; -}H2C_WOL_PATTERN_MATCH_INFO, *PH2C_WOL_PATTERN_MATCH_INFO; - -typedef struct _RT_PM_WOL_PATTERN_INFO -{ - u4Byte PatternId; // PatternId is set from N62 OID, N5/N6 can ignore it. - u4Byte Mask[4]; // The mask format is special for Hw. - u2Byte CrcRemainder; - u1Byte IsPatternMatch; // if the value is set to 1, the masks and CRC value will be download to Hw. - WOLPATTERN_TYPE PatternType; - u1Byte IsUserDefined; // 0: from OS, 1: User defined - - // For 8723A Hw insufficient capability issue.-------> - u1Byte IsSupportedByFW; // Fw will parse some patterns that they cannot support by Hw. - u1Byte HwWFMIndex; // CAM index - H2C_WOL_PATTERN_MATCH_INFO FwPattern; - // <------------------------------------------ -}RT_PM_WOL_PATTERN_INFO, *PRT_PM_WOL_PATTERN_INFO; - -typedef enum _PM_PROTOCOL_OFFLOAD_ID_IDX -{ - eGTKOffloadIdx = 0, - eARPOffloadIdx = 1, - eNSOffloadIdx1 = 2, - eNSOffloadIdx2 = 3, -}PM_PROTOCOL_OFFLOAD_ID_IDX; - - -#define ACTING_AS_AP(_pAdapter) (MgntActQuery_ApType(_pAdapter) > 0) -#define ACTING_AS_IBSS(_pAdapter) (_pAdapter->MgntInfo.mIbss) - -#define RT_SET_PS_LEVEL(_pAdapter, _PS_FLAG) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel |= _PS_FLAG) -#define RT_CLEAR_PS_LEVEL(_pAdapter, _PS_FLAG) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel &= (~(_PS_FLAG))) -#define RT_GET_CUR_PS_LEVEL(_pAdapter) (GET_POWER_SAVE_CONTROL(&(_pAdapter->MgntInfo))->CurPsLevel) -#define RT_IN_PS_LEVEL(_pAdapter, _PS_FLAG) ((RT_GET_CUR_PS_LEVEL(_pAdapter) & _PS_FLAG) ? TRUE : FALSE) - - -typedef struct _RT_POWER_SAVE_CONTROL -{ - // - // Inactive Power Save(IPS) : Disable RF when disconnected - // - BOOLEAN bInactivePs; - // When AP mode stop in DC mode, STA mode will return to IPS enable by this backup. - BOOLEAN bIPSModeBackup; - BOOLEAN bHaltAdapterClkRQ; - BOOLEAN bSwRfProcessing; - RT_RF_POWER_STATE eInactivePowerState; - RT_WORK_ITEM InactivePsWorkItem; - RT_TIMER InactivePsTimer; - RT_IPS_STATE IPSState; - u1Byte IPSDisableReason; - - // Return point for join action - IPS_CALLBACK_FUNCION ReturnPoint; - - // Recored Parameters for rescheduled JoinRequest - PADAPTER ptmpAdapter;// for reschedule reason, need to use original port, 2015.01.07 hsiao_ho - // because we need to use the correct port to restart JOIN / MGNTLINK Request - BOOLEAN bTmpBssDesc; - RT_JOIN_ACTION tmpJoinAction; - RT_WLAN_BSS tmpBssDesc; - - // Recored Parameters for rescheduled MgntLinkRequest - BOOLEAN bTmpScanOnly; - BOOLEAN bTmpActiveScan; - BOOLEAN bTmpFilterHiddenAP; - BOOLEAN bTmpUpdateParms; - u1Byte tmpSsidBuf[33]; - OCTET_STRING tmpSsid2Scan; - BOOLEAN bTmpSsid2Scan; - u1Byte tmpNetworkType; - u1Byte tmpChannelNumber; - u2Byte tmpBcnPeriod; - u1Byte tmpDtimPeriod; - u2Byte tmpmCap; - OCTET_STRING tmpSuppRateSet; - u1Byte tmpSuppRateBuf[MAX_NUM_RATES]; - BOOLEAN bTmpSuppRate; - IbssParms tmpIbpm; - BOOLEAN bTmpIbpm; - - // - // Leisre Poswer Save : Disable RF if connected but traffic is not busy - // - BOOLEAN bLeisurePs; - // When AP mode stop in DC mode, STA mode will return to LPS enable by this backup. - BOOLEAN bLeisurePsModeBackup; - u1Byte LpsIdleCount; - u1Byte PowerSetting; - u1Byte PowerPolicy; - u4Byte PowerProfile; - u4Byte PowerSaveLevel; - u4Byte ConnectionQuality; - u1Byte PowerMode; - u1Byte RegMaxLPSAwakeIntvl; - u1Byte LPSAwakeIntvl; - BOOLEAN RegAdvancedLPs; - UINT8 MaximumOffChannelOperationTime; // Maximum number of milliseconds to be off channel - UINT8 RoamingNeededLinkQualityThreshold; // Link quality below which its OK to send a roaming needed indication - - //RF OFF Level - u4Byte CurPsLevel; - u4Byte RegRfPsLevel; - u1Byte RegAMDPciASPM; - - // 2009/10/28 MH Add for DMA 64 bit support switch - u1Byte RegDMA64Support; - - //Fw Control LPS - BOOLEAN bFwCtrlLPS; - u1Byte FWCtrlPSMode; - BOOLEAN bLowPowerEnable; // 32k - RT_WORK_ITEM FwPsClockOnWorkitem; - - //2009.01.01 added by tynli - // Record if there is a link request in IPS RF off progress. - BOOLEAN LinkReqInIPSRFOffPgs; - // To make sure that connect info should be executed, so we set the bit to filter the link info which comes after the connect info. - BOOLEAN BufConnectinfoBefore; - - //GPIO polling HW Radio On/Off. - BOOLEAN bGpioRfSw; - - // WoWLAN - u1Byte WoWLANMode; - BOOLEAN bWakeOnDisconnect; - u1Byte APOffloadEnable; - BOOLEAN bEnterLPSDuringSuspend; // For WoWLAN, enter LPS during S3/S4. - u1Byte WoWLANLPSLevel; - u1Byte ARPOffloadEnable; // controlled by NDIS OID in WHCK test - u1Byte GTKOffloadEnable; // controlled by NDIS OID in WHCK test - u1Byte NSOffloadEnable; // controlled by NDIS OID in WHCK test - u1Byte RegARPOffloadEnable; // set by registry - u1Byte RegGTKOffloadEnable; // set by registry - u1Byte RegNSOffloadEnable; - u1Byte ProtocolOffloadDecision; - u1Byte FSSDetection; - BOOLEAN bOSSupportProtocolOffload; - BOOLEAN bSetPMParameters; - u1Byte WoWLANS5Support; - u4Byte EapolRequestIdMessagePatternId; - u4Byte MagicPacketPatternId; - u4Byte IPv4TcpSynPatternId; - u4Byte IPv6TcpSynPatternId; - BOOLEAN bSupportWakeUp; - u1Byte D2ListenIntvl; - u4Byte PMProtocolOffloadIDs[4]; // GTK offload, ARP offoad, NS offload*2 - BOOLEAN bFakeWoWLAN; - BOOLEAN bPnpEnterD2; // for 8723BS connected standby setting. - BOOLEAN DxNLOEnable; // FW supports NLO in D2/D3 state. - RT_AOAC_REPORT AOACReport; - - // FW IPS - BOOLEAN bFwCtrlPwrOff; // Apply to RF off and IPS state - BOOLEAN bInDxFwIPSPeriod; // IPS during device state in Dx (x=1~3) - BOOLEAN CardDisableInLowClk; - u1Byte FwIPSLevel; - - // Record wake up frame for WoWLAN. by tynli. 2009.06.10. - RT_PM_WOL_PATTERN_INFO PmWoLPatternInfo[MAX_SUPPORT_WOL_PATTERN_NUM_COMM]; //by tynli. To keep the WoWLAN wake up pattern information, ex: pattern Id, bit mask. - u1Byte WoLPatternNum; - u1Byte WoLPktNoPtnNum; - BOOLEAN bFindWakePacket; - - // Control LPS by OID. by tynli. 2011.01.04. - BOOLEAN bDisableLPSByOID; - u1Byte RegLeisurePsMode; - u1Byte RegPowerSaveMode; - - u4Byte WakeUpReason; // Used for WOL, indicates the reason for waking event. - u4Byte SleepMode; // Record the sleep mode. - u8Byte LastWakeUpTime; // Record the last waking time for comparison with setting key. - - // PNP sleep/wake related info. - u4Byte PnpSleepEnterD2Cnt; - u4Byte PnpSleepEnterD3Cnt; - u4Byte PnpSleepEnterUnknownDxCnt; - u4Byte PnpWakeD0Cnt; - u8Byte LastPnpSleepTime; - u8Byte LastPnpWakeTime; - u8Byte LastLPSEnterTime; - u8Byte LastLPSLeaveTime; - - //Close power of IO during LPS32K, The feature is only for 8723D 20150623 - BOOLEAN bRegLPSDeepSleepEnable; -}RT_POWER_SAVE_CONTROL,*PRT_POWER_SAVE_CONTROL; - -typedef enum _RT_FRAME_HEADER -{ - RTFrameHeaderUndefined, - RTFrameHeaderMac, - RTFrameHeaderArp, - RTFrameHeaderIPv4, - RTFrameHeaderIPv6, - RTFrameHeaderUdp, - RTFrameHeaderMaximum -}RT_FRAME_HEADER, *PRT_FRAME_HEADER; - -typedef enum _RT_MAC_HEADER_FIELD -{ - RTMacHeaderFieldUndefined, - RTMacHeaderFieldDestinationAddress, - RTMacHeaderFieldSourceAddress, - RTMacHeaderFieldProtocol, - RTMacHeaderFieldVlanId, - RTMacHeaderFieldPriority, - RTMacHeaderFieldPacketType, - RTMacHeaderFieldMaximum -}RT_MAC_HEADER_FIELD, *PRT_MAC_HEADER_FIELD; - -typedef enum _RT_MAC_PACKET_TYPE -{ - RTMacPacketTypeUndefined = 0, - RTMacPacketTypeUnicast = 1, - RTMacPacketTypeMulticast = 2, - RTMacPacketTypeBroadcast = 3, - RTMacPacketTypeMaximum -} RT_MAC_PACKET_TYPE, *PRT_MAC_PACKET_TYPE; - -typedef enum _RT_ARP_HEADER_FIELD -{ - RTARPHeaderFieldUndefined, - RTARPHeaderFieldOperation, // request or response - RTARPHeaderFieldSPA, // source protocol address - RTARPHeaderFieldTPA, // target protocol address - RTARPHeaderFieldMaximum -} RT_ARP_HEADER_FIELD, *PRT_ARP_HEADER_FIELD; - -typedef enum _RT_IPV4_HEADER_FIELD -{ - RTIPv4HeaderFieldUndefined, - RTIPv4HeaderFieldProtocol, - RTIPv4HeaderFieldMaximum -}RT_IPV4_HEADER_FIELD, *PRT_IPV4_HEADER_FIELD; - -typedef enum _RT_IPV6_HEADER_FIELD -{ - RTIPv6HeaderFieldUndefined, - RTIPv6HeaderFieldProtocol, - RTIPv6HeaderFieldMaximum -}RT_IPV6_HEADER_FIELD, *PRT_IPV6_HEADER_FIELD; - -typedef enum _RT_UDP_HEADER_FIELD -{ - RTUdpHeaderFieldUndefined, - RTUdpHeaderFieldDestinationPort, - RTUdpHeaderFieldMaximum -}RT_UDP_HEADER_FIELD, *PRT_UDP_HEADER_FIELD; - -typedef enum _RT_RECEIVE_FILTER_TEST -{ - RTReceiveFilterTestUndefined, - RTReceiveFilterTestEqual, - RTReceiveFilterTestMaskEqual, - RTReceiveFilterTestNotEqual, - RTReceiveFilterTestMaximum -}RT_RECEIVE_FILTER_TEST, *PRT_RECEIVE_FILTER_TEST; - -typedef struct _RT_DO_COALESICING_FIELD_INFO -{ - u1Byte Heard[8]; // Resvad for ndis - RT_FRAME_HEADER FrameHead; - RT_RECEIVE_FILTER_TEST FilterTest; - - union - { - RT_MAC_HEADER_FIELD MacHeaderField; - RT_ARP_HEADER_FIELD ArpHeaderField; - RT_IPV4_HEADER_FIELD IPv4HeaderField; - RT_IPV6_HEADER_FIELD IPv6HeaderField; - RT_UDP_HEADER_FIELD UdpHeaderField; - }HeaderField; - - union - { - u1Byte FieldByteValue; - u2Byte FieldShortValue; - ULONG FieldLongValue; - ULONGLONG FieldLong64Value; - u1Byte FieldByteArrayValue[16]; - }FieldValue; - - union // used when test operation is MaskEqual - { - u1Byte ResultByteValue; - u2Byte ResultShortValue; - ULONG ResultLongValue; - ULONGLONG ResultLong64Value; - u1Byte ResultByteArrayValue[16]; - }ResultValue; - - -}RT_DO_COALESICING_FIELD_INFO,*PRT_DO_COALESICING_FIELD_INFO; - - -typedef struct _RT_DO_COALESICING_FILTER_PARAMETER -{ - u4Byte FilterID; // != 0 : in used !! - u4Byte Delaytime; // how long to flush packet - u4Byte NumOfElem; // For keep number of field !! - RT_DO_COALESICING_FIELD_INFO dFieldArry[5]; // We define in 5 in windows 8.1 !! - -}RT_DO_COALESICING_FILTER_PARAMETER,*PRT_DO_COALESICING_FILTER_PARAMETER; - -typedef struct _RT_DO_COALESICING_FILTER_INFO -{ - BOOLEAN bEnable; // Do or not !! - RT_DO_COALESICING_FILTER_PARAMETER dFilterArry[10]; // We define in 10 in windows 8.1 !! - -}RT_DO_COALESICING_FILTER_INFO,*PRT_DO_COALESICING_FILTER_INFO; - -typedef struct _RT_DBG_CONTROL -{ - BOOLEAN PowerSaveDisable; // if lock is true, leave and don't do power save anymore. -}RT_DBG_CONTROL, *PRT_DBG_CONTROL; -/*---------------------End Define--------------------------------------*/ - -#pragma pack(1) - -typedef struct _CUSTOMIZED_SCAN_REQUEST{ - BOOLEAN bEnabled; // specifies whether this customized scan request is valid - u1Byte Channels[MAX_CHANNEL_NUM]; // channels to scan - u1Byte nChannels; // num of items in Channels[] - RT_SCAN_TYPE ScanType; // passive/active scan - u2Byte Duration; // scan duration on each channel of Channels[] - u1Byte DataRate; // data rate used to send probe req - u2Byte ProbeReqLen; // length of the customized probe req - u1Byte ProbeReqBuf[1]; // the customized probe req -} CUSTOMIZED_SCAN_REQUEST, *PCUSTOMIZED_SCAN_REQUEST; - -#pragma pack() - -#define IHV_SUPPORT_TYPE u1Byte -#define PIHV_SUPPORT_TYPE pu1Byte - -#define IHV_SUPPORT_NONE 0 // No IHV support -#define IHV_SUPPORT_DEFAULT BIT0 // The IHV support default (realtek) functions -#define IHV_SUPPORT_CCX_SERVICE BIT1 // The IHV support CCX service - -typedef enum BEACON_SEND_STATE { - BEACON_STOP = 0, // The configuration is in the stopped state. The SW stopped the SW timer. - BEACON_STARTING = 1, // It's in HW/SW beacon configuration state and the Beacon is not sent yet. - BEACON_STARTED = 2, // The fist beacon has been sent and the beacons are continuously sent. -} BEACON_SEND_STATE, *PBEACON_SEND_STATE; - -typedef struct _Check_Stable_Traffic -{ - BOOLEAN bGetValue; - BOOLEAN bShake; - BOOLEAN bDetectIndicationNumber; - u1Byte count; - u1Byte ErrorCount; - u1Byte levelCount ; - u1Byte shakeCount ; - u1Byte stableCount ; - u1Byte stableIndicationNumber; -}Check_Stable_Traffic, *PCheck_Stable_Traffic; - -#define FT_INFO_VALID BIT0 // This entry is valid -#define FT_INFO_WAIT_OS_DECISION BIT1 // Wait the OS's decision -#define FT_INFO_OS_DECISION_MADE BIT2 // OS has made the FT association info. -typedef struct _FT_INFO_ENTRY -{ - u1Byte Flag; // FT_INFO_xxx - u1Byte targetAddr[6]; - - u4Byte osAssocInfoStatus; - - u2Byte MDELen; - u1Byte MDE[MAX_MD_IE_LEN + SIZE_EID_AND_LEN]; - - u2Byte FTELen; - u1Byte FTE[MAX_FT_IE_LEN + SIZE_EID_AND_LEN]; - - u2Byte PMKR0NameLen; - u1Byte PMKR0Name[PMKID_LEN]; // PMKR0Name is used to identify the PMK-R0 - - u2Byte RSNELen; - u1Byte RSNE[MAX_IE_LEN]; // Including ID and Length of IE -}FT_INFO_ENTRY, *PFT_INFO_ENTRY; -#define MAX_FT_ENTRY_NUM 6 - -typedef enum _FT_ENTRY_ACTION -{ - FT_ENTRY_ACTION_DEL_TARGET = 0, - FT_ENTRY_ACTION_UPDATE_MDE, - FT_ENTRY_ACTION_UPDATE_FTE, - FT_ENTRY_ACTION_UPDATE_PMKR0_NAME, - FT_ENTRY_ACTION_UPDATE_RSNE, - FT_ENTRY_ACTION_UPDATE_ASSOC_INFO_STATUS, - FT_WAIT_OS_DECISION, - FT_OS_DECISION_MADE, - //=== Insert new method above this line === // - FT_ENTRY_ACTION_MAX, // Reserved - FT_ENTRY_ACTION_FORCE_UINT32 = 0xFFFFFFFF //Reserved, force this enumeration to compile to 32 bits in size (by Win SDK 8.0). -}FT_ENTRY_ACTION, *PFT_ENTRY_ACTION; - -typedef struct _MGNT_INFO{ - - // -- Driver operation mode -- - RT_OP_MODE OpMode; - u1Byte Bssid[6]; - OCTET_STRING Ssid; - u1Byte SsidBuf[33]; - - // add for 92D hidden ssid scan issue - //BOOLEAN bHiddenSSID92D; - u1Byte hiddenChannel; - BOOLEAN bNeedSkipScan; - BOOLEAN bCompleteScan; - BOOLEAN bResetScan; - BOOLEAN bScanTimeExceed; - - BOOLEAN bScanOnly; - BOOLEAN bDisableScanByOID; - BOOLEAN bIbssStarter; - BOOLEAN bIbssCoordinator; // TRUE if we are winner of latest Beacon contention and should be the coordinator in this Beacon Period, FALSE otherwise, 2005.12.15, by rcnjko. - - BOOLEAN bMediaConnect; - BOOLEAN init_adpt_in_progress; - - - - BOOLEAN bFlushScanList; // If this flag is set true when querying scan list, it means the OS has flushed the scan list. - - BOOLEAN RequestFromUplayer; - BOOLEAN RfRequestFromUplayer; //Record Rf state from Windows UI. - BOOLEAN bDisconnectRequest; - BOOLEAN bRoamRequest; - BOOLEAN bPrepareRoaming; - RT_PREPARE_ROAM_TYPE PrepareRoamState; - - // Set when authentication type, capability changes. - // Refered in MgntActSet_802_11_SSID(). - RT_MLMESTARTREQ_RSN bMlmeStartReqRsn; - - RT_JOIN_ACTION JoinAction; - - - RT_LINK_DETECT_T LinkDetectInfo; - u2Byte DisconnectedSlotCount; - - u2Byte FragThreshold; - - // Scanning flags - // ----------------------------------------- - BOOLEAN bScanInProgress; - BOOLEAN bActiveScan; - u1Byte Scancount; //To distinguish each scan - RT_TIMER ScanTimer; - u1Byte ScanStep; - BOOLEAN bScanAntDetect; - - // Replace the Windows Ndis6 CheckforHang Timer ----------------------- - RT_TIMER WatchDogTimer; - BOOLEAN WatchDogReturnFlag; - BOOLEAN bSetWatchDogTimerByDriver; - // --------------------------------------------------------------- - -#if (DFS_SUPPORT == 1) - DFS_MGNT DFSMgnt; -#endif - WIRELESS_SETTING_BEFORE_SCAN SettingBeforeScan; - - RT_CHANNEL_DOMAIN ChannelPlan; // The current channel plan. - u2Byte RegChannelPlan; // Channel Plan specifed by user, read from INF. - BOOLEAN bChnlPlanFromHW; // TRUE is channel plan is defined by HW and can't changed by SW(OID/INF). - - BOOLEAN bLoadIMRandIQKSettingFor2G;// True if IMR or IQK have done for 2.4G in scan progress - - // bDualModeScanStep - // - 0:idle, only one mode - // - 1:scanning mode need to change - // - 2:scanning mode change to the mode 2 - // - 3:Complete scan, change to mode 3 - u1Byte bDualModeScanStep; - - // SSIDs to be scan, 2006.12.19, by shien chang. - RT_SSIDS_TO_SCAN SsidsToScan; - - // Join flags - // ----------------------------------------- - BOOLEAN bIbssNeedAuth; - - RT_TIMER JoinTimer; - RT_TIMER JoinConfirmTimer; - RT_TIMER JoinProbeReqTimer; - RT_TIMER WaitingKeyTimer; - u2Byte JoinRetryCount; - BOOLEAN bJoinInProgress; - - BOOLEAN bResetInProgress; - - u1Byte state_Synchronization_Sta; - u1Byte state_Synchronization_Sta_BeforeScan; - u1Byte FilterHiddenAP; - - // BSS List - // ----------------------------------------- - u2Byte NumBssDesc; - RT_WLAN_BSS bssDesc[MAX_BSS_DESC]; - - // Joseph add for antenna switch - u2Byte tmpNumBssDesc; - RT_WLAN_BSS tmpbssDesc[MAX_BSS_DESC]; - - // For ON_BEACON use. Fix lower memory verifier or BSOD. - RT_WLAN_BSS bssDesc_OnBeacon; - - u2Byte NumBssDesc4Query; - RT_WLAN_BSS bssDesc4Query[MAX_BSS_DESC]; - - u2Byte NumBssDesc4Rssi; - RT_WLAN_RSSI bssDesc4Rssi[MAX_BSS_DESC]; - - RT_WLAN_BSS targetBSS; // Target BSS information to connect - - // Current status - // ----------------------------------------- - WIRELESS_MODE dot11CurrentWirelessMode; - WIRELESS_MODE CurrentBssWirelessMode; // For damn Netgear's request: they want to get wireless mode of BSS not that of STA. 2005.02.17, by rcnjko. - BOOLEAN bHalfWiirelessN24GMode; - u1Byte dot11CurrentChannelNumber; - CHANNEL_WIDTH dot11CurrentChannelBandWidth; - u2Byte dot11BeaconPeriod; - u1Byte dot11DtimPeriod; - u1Byte mDtimCount; // 0 at TBTT of beacon with DTIM. - - u2Byte dot11AtimWindow; - u2Byte dot11RtsThreshold; - u2Byte ListenInterval; - u2Byte ListenIntervalInDX; - - u2Byte mCap; - - EXTCHNL_OFFSET ChannelOffset; - // 802.11n related HT info - PRT_CHANNEL_INFO pChannelInfo; - PRT_HIGH_THROUGHPUT pHTInfo; - PRT_VERY_HIGH_THROUGHPUT pVHTInfo; - - RT_WORK_ITEM ChangeBwChnlFromPeerWorkitem; - - u1Byte ratr_index; - u1Byte BT_RatrInx; - u1Byte Multi_RatrInx; - u1Byte Ratr_State; - u1Byte mBratesBuf[MAX_NUM_RATES]; - OCTET_STRING mBrates; - - u1Byte HighestBasicRate; - u1Byte LowestBasicRate; - u1Byte HighestOperaRate; - u1Byte CurrentBasicRate; - u1Byte CurrentOperaRate; - - OCTET_STRING dot11OperationalRateSet; - u1Byte dot11OperationalRateBuf[MAX_NUM_RATES]; - OCTET_STRING Regdot11OperationalRateSet; - u1Byte Regdot11OperationalRateBuf[MAX_NUM_RATES]; - - // -- Supported Rate -- - OCTET_STRING SupportedRates; - u1Byte SupportedRatesBuf[MAX_NUM_RATES]; - OCTET_STRING RegSuppRateSets[MAX_WIRELESS_MODE_CNT]; - u1Byte RegSuppRateSetsBuf[MAX_WIRELESS_MODE_CNT][MAX_NUM_RATES]; - - u1Byte HTHighestOperaRate; - u1Byte RegHTSuppRateSet[16]; - u1Byte dot11HTOperationalRateSet[16]; //use RATR format - u1Byte Regdot11HTOperationalRateSet[16]; //use RATR format - - u1Byte VHTHighestOperaRate; - u1Byte RegVHTHighestOperaRate; - u1Byte RegVHTSuppRateSet[2]; - u1Byte dot11VHTOperationalRateSet[2]; - u1Byte Regdot11VHTOperationalRateSet[2]; - - // For basic rate set maintain. 2010.11.03. by tynli. - u1Byte SupportRatesfromBCNBuf[MAX_NUM_RATES]; - OCTET_STRING SupportRatesfromBCN; - - // For Min spacing configurations, Added by Roger, 2008.08.30. - u1Byte MinSpaceCfg; - - u2Byte SequenceNumber; - u1Byte SoundingSequence; - - // Set TRUE before associate to AP or join an IBSS network - // Set FALSE when (1) associate to AP, (2) Join an IBSS, (3) AP mode - BOOLEAN mDisable; - - // Set TRUE after receiving association response from AP. - BOOLEAN mAssoc; - BOOLEAN bStartDelayActionFrame; - - // Set TRUE after joining an IBSS or starting an IBSS. - BOOLEAN mIbss; //Boolean:= false, - u1Byte mMacId; - u1Byte mcastMacId; // macId used for multicast/broadcast - u2Byte mAId; - RT_AP_TYPE ApType; - AP_STATE APState; - BOOLEAN bSwitchingAsApInProgress; - BOOLEAN bSwitchingSTAStateInProgress; - BOOLEAN bDelaySwitchToApMode; - // For AP mode delay mechanism test ,. - BOOLEAN bDelayApBeaconMode; - u4Byte DelayApBeaconCnt; - - RT_WORK_ITEM IbssStartRequestWorkItem; - RT_WORK_ITEM ApStartRequestWorkItem; - RT_WORK_ITEM ApSendDisassocWithOldChnlWorkitem; - - // To protect drop packet progress - BOOLEAN bDropPktInProgress; - RT_WORK_ITEM DropPacketWorkItem; - - IbssParms mIbssParms; // empty if infrastructure BSS - - - u1Byte dot11CurrentPreambleMode; // It represents current preamble mode. 2005.01.06, by rcnjko. - - BOOLEAN bDisableUseProtection; // TRUE if protection mode forced disabled by User. - BOOLEAN bUseProtection; // TRUE if the BSS is now in protection mode. - BOOLEAN bProtection; // The protection status of default port or extension port, the value is independent to each port. by tynli. - - // Authentication status - // ----------------------------------------- - RT_TIMER AuthTimer; - u1Byte State_AuthReqService; - u1Byte AuthReq_auAlg; // where to set? - u1Byte AuthRetryCount; - u1Byte AuthStatus; //Indicate OID - - u2Byte RspCapability; - u2Byte RspStatusCode; - u2Byte RspAssociationID; - - // Association status - // ----------------------------------------- - RT_TIMER AsocTimer; - u1Byte State_AsocService; - u1Byte AsocRetryCount; - u8Byte AsocTimestamp; - - // Beacon frame - // ----------------------------------------- - OCTET_STRING beaconframe; - SHARED_MEMORY BcnSharedMemory; - - // SW Beacon. - // ----------------------------------------- - RT_TIMER SwBeaconTimer; - BEACON_SEND_STATE BeaconState; // The current sending state of Beacon - RT_WORK_ITEM TbttPollingWorkItem; // Workitem to simulate TBTT notification by polling MAC.TSF, 070124, by rcnjko. - - u4Byte MaxBeaconSize; //2010.06.23. Added by tynli. To observe the max beacon size. - - // Roaming flags - // ----------------------------------------- - RT_ROAM_TYPE RoamingType; - RT_ROAMING_STATE RoamingState; - u1Byte APaddrbeforeRoaming[6]; - u1Byte PrepareRoamingCount; - u1Byte RoamingFailCount; - u1Byte RegRoamingLimitCount; // Max Roaming count. - - // - // When wake up, AP would be reset by MgntActSet_802_11_SSID(). - // We should not restart beaconning under win7. - // This flag is for AP_StartAPRequest() to determine whether to start beaconning. - // - BOOLEAN bStartApDueToWakeup; - //default setting ================== - u1Byte Regdot11ChannelNumber; - u1Byte Regdot112GChannelNumber; - u1Byte Regdot115GChannelNumber; - u2Byte Regdot11BeaconPeriod; - u1Byte Regdot11DtimPeriod; - - //Set when load default value and MgntActSet_802_11_INFRASTRUCTURE_MODE() - u1Byte Regdot11networktype; - u2Byte RegmCap; - - - u1Byte RegPreambleMode; // It represents default setting about preamble mode. 2006.01.06, by rcnjko. - - // Power Save Ralated - BOOLEAN RegRfOff; - BOOLEAN RFChangeInProgress; // RF Chnage in progress, by Bruce, 2007-10-30. - RT_POWER_SAVE_CONTROL PowerSaveControl; - - BOOLEAN bHwWpsPbc; - BOOLEAN bSdioDpcIsr; - - u1Byte LastRxUniSrcAddr[6]; // added by Annie, 2005-07-25. - u1Byte LastRxUniFragNum; - u2Byte LastRxUniSeqNum; - - // 2005.01.13, by rcnjko. - u2Byte ForcedDataRate; // Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. - u2Byte ForcedBstDataRate; - BOOLEAN ForcedTxDisableRateFallBack; - - u1Byte bRegHwParaFile; - - u2Byte RoamingCount; - u2Byte DisconnectCount; - - // 2006.09.04, by shien chang. - BOOLEAN bPSPXlinkMode; // Current enable XLink mode (promicuous mode). - BOOLEAN bDefaultPSPXlinkMode; // Enable XLink mode (promicuous mode) for default settings, i.e., from registry or UI. - BOOLEAN bNetMonitorMode; // 2007.08.06, by shien chang. - - //---------------------------------------------------------------------------- - // Power save mode, 070104, by rcnjko. - //---------------------------------------------------------------------------- - RT_PS_MODE dot11PowerSaveMode; // Power save mode configured. - u1Byte PsPollType; // 0: Auto, 1: Forced PsPoll, 2: Forced PsNonPoll (null frame) - RT_PS_STATE mPss; // Current power save state of the device. - BOOLEAN bAwakePktSent; // TRUE if we had sent a packet with PwrMgt bit == 0 since mPss becom eAwake. - RT_WORK_ITEM DozeWorkItem; - RT_TIMER AwakeTimer; - RT_WORK_ITEM AwakeWorkItem; - u1Byte TxPollingTimes; - BOOLEAN BcnIntvalKeepAwake; - - //---------------------------------------------------------------------------- - // AP mode related, 2005.05.27, by rcnjko. - //---------------------------------------------------------------------------- - - u1Byte arChalng[128]; // Challenge text for shared-key authenticatin. - -#if 1//(AP_MODE_SUPPORT == 1) - // 2012/01/12 MH Add one RT_WLAN_STA for ODM default port conpatiable with other SW team. - // If STA mode is more than 2 we can add the array number. - RT_WLAN_STA DefaultPort[1]; - RT_WLAN_STA AsocEntry[ASSOCIATE_ENTRY_NUM]; // Information of STAs. Revise the data type name and its variables. -#endif - u2Byte AvailableAsocEntryNum; // # of entries of AsocEntry[] available. - u2Byte PowerSaveStationNum; // # of STA in PS mode. - RT_LIST_ENTRY GroupPsQueue; // Mcst/Bcst packet queued for one or more STA is in power-save mode. - OCTET_STRING Tim; // A octet string for TIM IE. - u1Byte TimBuf[254]; // 254=3+251, Buffer for TIM IE. - int LiveTime; // Station live time. (in second) - u1Byte AvailableAIDTable[ASSOCIATE_ENTRY_NUM]; - u2Byte MaxMACID; //YJ,add for TX RPT,111213 - - RT_TIMER DelaySendBeaconTimer; - // AP mode global security related data: added by Annie, 2005-06-28. - AUTH_GLOBAL_KEY_TAG globalKeyInfo; - // Annie TOADD: VirtualCAM - - // for indication - PRT_WLAN_STA pCurrentSta; // the STA we are dealing with for indication. we get the state machine through here, similar as pMgntInfo->AsocInfo - - // Additonal IEs for beacon - u4Byte AdditionalBeaconIESize; - PVOID AdditionalBeaconIEData; // Allocated when OID_DOT11_ADDITIONAL_IE is set. - - //Additonal IEs for probe response - u4Byte AdditionalResponseIESize; - PVOID AdditionalResponseIEData; - - u4Byte AdditionalAssocReqIESize; - PVOID AdditionalAssocReqIEData; - - u4Byte AdditionalProbeReqIESize; - PVOID AdditionalProbeReqIEData; - - // - // Customer ID, 060703, by rcnjko. - // - RT_CUSTOMER_ID CustomerID; - - // - // For Turbo mode. Added by Roger, 2006.12.07. - // - RT_TURBO_CA TurboChannelAccess; - - // Security Information - RT_SECURITY_T SecurityInfo; - - // 802.11e and WMM Traffic Stream Info (TX) - RT_LIST_ENTRY Tx_TS_Admit_List; - RT_LIST_ENTRY Tx_TS_Pending_List; - RT_LIST_ENTRY Tx_TS_Unused_List; - TX_TS_RECORD TxTsRecord[TOTAL_TS_NUM]; - - // 802.11e and WMM Traffic Stream Info (RX) - RT_LIST_ENTRY Rx_TS_Admit_List; - RT_LIST_ENTRY Rx_TS_Pending_List; - RT_LIST_ENTRY Rx_TS_Unused_List; - RX_TS_RECORD RxTsRecord[TOTAL_TS_NUM]; - RX_REORDER_ENTRY RxReorderEntry[RX_REORDER_ENTRY_NUM]; - RT_LIST_ENTRY RxReorder_Unused_List; -#if RX_AGGREGATION - // Rx Aggr Batch indication - u1Byte IndicateTsCnt; - PRX_TS_RECORD IndicateTsArray[TOTAL_TS_NUM]; -#endif - - // Qos related. Added by Annie, 2005-11-01. - PSTA_QOS pStaQos; - - BOOLEAN bUpdateTxPowerInProgress; // TRUE if the operation to update all tx power of all channel is in progress. - s4Byte PowerToUpdateInDbm; // Tx power to update in dBm. - s4Byte ClientConfigPwrInDbm; // Client configured power in dbm for CCX - RT_WORK_ITEM UpdateTxPowerWorkItem; // Workitem to update Tx power. - - BOOLEAN bScanWithMagicPacket; // TRUE if we send magic instead of ProbeReq in scan process for WOL. 2005.06.27, by rcnjko. - u1Byte MagicPacketDstAddr[6]; // Destination address of magic packet, i.e. the MAC address of the STA we want to wake up. 2005.06.27, by rcnjko. - BOOLEAN bHiddenSSIDEnable; - - // Auto select channel by an evaluation algorithm when start an AP mode, 2005.12.27, by rcnjko. - // It can be applied to IBSS mode too. - BOOLEAN bAutoSelChnl; // TRUE if we will select a channel, FALSE otherwise. - u1Byte ChnlWeightMode; // There are max 10 modes, see also: AutoSelectChannel(). Added by Annie, 2006-07-26. - // - - // AP mode Hidden SSID flag. Added bY Annie, 2006-02-14. - BOOLEAN bHiddenSSID; - - // AP mode locked STA list. Added by Annie, 2006-02-14. - u1Byte LockType; - u1Byte LockedSTAList[MAX_LOCKED_STA_LIST_NUM][ETHERNET_ADDRESS_LENGTH]; - u4Byte LockedSTACount; - // AP mode locked STA list. Added by Ken 2014-02-20. - u1Byte LockedSTAList_Reject[MAX_LOCKED_STA_LIST_NUM][ETHERNET_ADDRESS_LENGTH]; - u4Byte LockedSTACount_Reject; - BOOLEAN bDefaultPermited; - - //Cloud Key Offset. requested by 360 - u1Byte cloud_key_offset; - - //AP Mode Station Count - u1Byte StaCount; - - // AP mode: force per-station data rate. 2006.04.11, by rcnjko. - RT_STA_DATARATE StaDataRateList[MAX_STA_DATARATE_LIST_NUM]; - u4Byte StaDataRateCount; // # of entries used in StaDataRateList[]. - u1Byte RegApModeDefPerStaDataRate; - - // WDS, 2006.06.11, by rcnjko. - u1Byte WdsMode; - u1Byte WdsApAddr[6]; - - // - // For RF state maintance. - // - RT_RF_CHANGE_SOURCE RfOffReason; - BOOLEAN ClkReqState; - - CHANNEL_ACCESS_SETTING ChannelAccessSetting; - - //ADD for AP HW ENC ,CCW - BOOLEAN bAPGlobRest; - SW_CAM_TABLE SWCamTable[32]; - - //---------------------------------------- - //add for ROGUE AP 2007.07.27 , by CCW - //---------------------------------------- - BOOLEAN bROGUEAP; - MH_CCX_ROGUE_AP_ENTEY ROGUE_AP_ENTEY[SIZE_ROGUE_AP_ENTEY]; - //---------------------------------------- - //add for ROGUE AP 2007.07.28 , by CCW - //---------------------------------------- - BOOLEAN bNETWORKEAP; - - // Workaround by shien chang, please see ASSO_INFO. 2006.10.28, by shien chang. - ASOC_INFO AsocInfo; - - //---------------------------------------- - // Connectivity feature, 2006.11.01, by shien chang. - //---------------------------------------- - u1Byte ExcludedMacAddr[MAX_EXCLUDED_MAC_ADDRESS_LIST][6]; - u4Byte ExcludedMacAddrListLength; - - // For smart connect. 2006.11.21, by shien chang. - u1Byte RejectedAsocAP[MAX_REJECTED_ACCESS_AP][6]; - u1Byte NumRejectedAsocAP; - - BOOLEAN bExcludeUnencrypted; - BOOLEAN SafeModeEnabled; - - //For NDIS6 RSNA ,by CCW - BOOLEAN bRSNAPSKMode; - - // For turbo mode. Added by Roger, 2006.12.07. - // ----------------------------------------- - BOOLEAN bAutoTurboBy8186; // 8186 "AutoTurbo" mode switch. - BOOLEAN bSupportTurboMode; // 8187 Turbo mode switch. - BOOLEAN bRealtekAggCapExist; - //The following variables have NOT checked yet....Roger, 2006.12.07 - BOOLEAN bRealtekCapType1Exist ; // 8186 "AutoTurbo" mode: 8186 IE exists or not in current association. - u1Byte RTIEType2Buffer[7]; // 8186 "AutoTurbo" mode: Realtek IE buffer, used in AsocReq/ReasocReq/ProbeReq. 00-E0-4C-01-02-01-00. - - RT_RF_POWER_STATE eSwRfPowerState; // SW RF power state, 2006.12.18, by shien chang. - - // disable tx power+ by rate - BOOLEAN bDisableTXPowerByRate; - // disable tx power training - BOOLEAN bDisableTXPowerTraining; - BOOLEAN bSetTXPowerTrainingByOid; - BOOLEAN bDecreaseTXPowerTraining; - - // - // For simple config. by CCW - copy from 818x - // -#if (WPS_SUPPORT == 1) - PVOID pSimpleConfig; -#endif - BOOLEAN bPbcPressed; - - //For alpha LED control - u1Byte CustomizedPbcPressTimer; - u1Byte CustomizedLedStateOff; //when > 0, means LED off, and record origin led state - - // Indication when AP not exist. - BOOLEAN bIndicateConnectEvent; - - // Sync from 91su branch, 2009.04.27. - BOOLEAN bInToSleep; - - u2Byte ResumeBeaconTime; - // - // For 802.11d. - // - PVOID pDot11dInfo; - - PVOID pChannelList; - - // - // IHV Support Type - // - IHV_SUPPORT_TYPE IhvType; - - // - // For CCX related information. - // - // Pointer to a RT_RM_CONTEXT object, which encapulats Radio Measurement related stuff. 2006.04.26, by rcnjko. - PVOID pRmInfo; - PVOID pCcxInfo; - - //For generic parser. - PVOID pGenericParser; - - // For AP mode information -#if 1//(AP_MODE_SUPPORT == 1) - PVOID pApModeInfo; -#endif - -#if (P2P_SUPPORT == 1) - PVOID pP2PInfo; -#endif - -#if (NAN_SUPPORT == 1) - PVOID pNanInfo; -#endif - - // For 802.11z - PVOID pTDLSTInfo; - -#if (MULTICHANNEL_SUPPORT == 1) - PVOID pMultiChnl; -#endif - - PVOID pCustomScanInfo; - - PVOID pOffChnlTx; - - //1 if sniffer mode. 0 turn off sniffer mode - BOOLEAN SnifferTurnOnFlag; - u4Byte SnifferSavedRCR; - - // Protection mode related - u1Byte ForcedProtectionMode; - u1Byte ForcedProtectRate; - u1Byte ForcedProtectBW; - u1Byte ForcedProtectSC; - u1Byte ForcedProtectCCA; - BOOLEAN bForcedProtectRTSFrame; - BOOLEAN bForcedProtectCTSFrame; - - // for HT operation rate set. we use this one for HT data rate to seperate different descriptors - //the way fill this is the same as in the IE - - BOOLEAN bReg11nAdhoc; - BOOLEAN bRegIOTBcm256QAM; - u1Byte bRegVht24g; - - BOOLEAN bScan_20MHz; - - //For Backup Initial Gain - INIT_GAIN InitGain_Backup; - - // WiFi Config - BOOLEAN bWiFiConfg; - - u1Byte DM_Type; - //Dynamic Tx power for near/far range enable/Disable , by Jacken , 2008-03-06 - BOOLEAN bDynamicTxPowerEnable; - - //2008-05-09 indicate set power progress - BOOLEAN bSetPnpPwrInProgress; - - //tx rate display added by cosa 06162008 - u1Byte OSTxRateDisplayType; - // 06/19/2008 Action frame allowed flag - u1Byte CntAfterLink; - - // Firmware information - u2Byte FirmwareVersion; - u2Byte FirmwareVersionRev; - u2Byte FirmwareSubVersion; - u2Byte FirmwareSignature; - - // For IOT issue. - u1Byte IOTPeer; - u1Byte IOTPeerSubtype; - u4Byte IOTAction; - u2Byte IOTMaxMpduLen; - BOOLEAN IOTVhtAmsduSupport; - BOOLEAN bDmDisableProtect; - - // 2008/05/19 MH Add for NIC verify packet. - // 2008/05/20 MH For verification console. -#if DBG_CMD - RT_WORK_ITEM NICVerify; -#endif - BOOLEAN bNicVerifyPkt; - - // Roam Sensitive Level - s1Byte RegROAMSensitiveLevel; - - // Roam Hysteresis - u1Byte RegRoamHysteresis; - - // For leisure power save in connection state, 2007-12-17 by Isaiah - u1Byte LPSDelayCnt; - - // Keep Alive mechanism - u1Byte keepAliveLevel; - - u8Byte uConnectedTime; - //TX power Level For Lenovo - int TxPowerLevel; - - u8Byte DelayLPSLastTimeStamp; // Delay to enter LeisurePS when the nic sent DHCP, ARP, or EAPOL packet. By tynli. - - u1Byte mDeauthCount; // For Deauth link retry - - u1Byte AntennaTest; - u1Byte AntCurIdx; - - // dm control initial gain flag - BOOLEAN bDMInitialGainEnable; - - //Record NDIS Version For Compatibile - RT_NDIS_VERSION NdisVersion; - - RT_TIMER PnpWakeUpJoinTimer; - - u4Byte OutstandingNdisPackets; - u4Byte CompleteFlag; - - // Indicate event immediately when reciecing deauth/disassoc. By Bruce, 2009-05-19. - BOOLEAN IndicateByDeauth; - - u1Byte ShowRateMode; - BOOLEAN bForcedShowRxRate; - BOOLEAN bForcedShowRateStill; - - // 2009/08/05 MH To protect halt adapter process. - BOOLEAN bHaltInProgress; - - //2009/08/10 This is asked by AzWava Mr. Six. To Make TKIP in N mode - BOOLEAN bTKIPinNmodeFromReg; - BOOLEAN bWEPinNmodeFromReg; - BOOLEAN bTKIPinNmode; - - BOOLEAN bPwrSaveState; - BOOLEAN bDriverIsGoingToSleep; - - BOOLEAN bRegClevoDriver; - RT_DBG_CONTROL dbg_ctrl; - - BOOLEAN bBTMode; - u1Byte btHsMode; - - u1Byte bDefaultAntenna; - - u8Byte TSFValue; //by tynli, from Rx beacon - u8Byte NowTSF; - u8Byte NextBeacon; - - BOOLEAN bUseRxInterruptWorkItem; - - BOOLEAN bWakeupAutoLinkInProgressing; - - u4Byte uLastDecryptedErrorSeqNum; - - BOOLEAN bDisableCck; - BOOLEAN bRegVelocity; - u4Byte AcceptFirstEAPOLPacket; - - BOOLEAN bAPTimExtend; - BOOLEAN bConcurrentMode; - - BOOLEAN bDumpRegs; - u1Byte dumpcounter; - u1Byte NumforRxFastbatch; - - - // 2010/05/11 MH Add a timer for GPIO detect. - // 2011/11/03 MH Use the same GPIO timer. - RT_TIMER GpioDetectTimer; - BOOLEAN GpioDetectTimerStart; - BOOLEAN HwPBCDetectTimerStart; - - // 2010/05/18 MH Add for GPIO setting. - u1Byte bRegTimerGPIO; - u2Byte bRegGPIODelay; - u2Byte bRegGPIOBack; - - // 2010/08/25 MH Add to support pdn mode switch. - u1Byte bRegPDNMode; - - // 2010/09/01 MH According to PM's request, we support dongle selective suspend mode switch. - u1Byte bRegDongleSS; - - // 2010/09/13 MH According to PM's request, we support different SS power seave level. - u1Byte bRegSSPwrLvl; - - // 2011/02/16 MH Add for SS HW radio detect workaround temporarily. - u1Byte bRegSSWakeCnt; - - // 2010/12/17 MH Add for RX aggregation mode switch according to TX/RX traffic. - u1Byte bRegAggDMEnable; - BOOLEAN bSendPacketByTimer; - - // 2010/12/31 MH Add for UPHY dynamic chaneg. - u1Byte bRegUPDMEnable; - - // 2011/07/08 MH Add for different link speed display. - u1Byte bRegLinkSpeedLevel; - - u1Byte RSSI2GridMode; - - // 2011/07/14 MH Add for rx short cut. - u1Byte bRegRxSC; - - // 2011/07/15 Sinda Add for tx short cut. - u1Byte bRegTxSC; - - // 2011/09/15 MH Add registry for switching packet compete method. - u1Byte RegTxMode; - - // 2012/09/14 MH Add for EDCA turbo mode switch threshold. - // 2012/09/14 MH Add for 88E rate adaptive mode siwtch. - u2Byte RegEdcaThresh; - u2Byte NumNonBePkt; - u2Byte NumBePkt; - u2Byte RegRALvl; - - // 2012/10/26 MH Add for 8812/8821 AC series dynamic switch. - u1Byte RegAcUsbDmaTime; - u1Byte RegAcUsbDmaSize; - u1Byte RegAcUsbDmaTime2; - u1Byte RegAcUsbDmaSize2; - - // 2012/10/31 MH Add for power limit table constraint. - u4Byte RegTxPwrLimit; - - // 2012/11/28 MH Add for BB team AMPDU test. - u1Byte RegAMfactor; - u1Byte RegVHTRSec; - - // 2012/11/07 Awk add PowerBase for customers to define their power base. - u1Byte RegPowerBase; - - // 2012/11/23 Awk add RegEnablePowerLimit for enabling/disabling power limit - u1Byte RegEnableTxPowerLimit; - u1Byte RegEnableTxPowerByRate; - - // 2015/02/11 VincentL Add for primary/secondary power limit table selection (used as initial one) - u1Byte RegTxPowerLimitTableSel; - u1Byte RegTxPwrLmtDynamicLoading; - - // 2015/04/27 VincentL Add for Toggle Support for TxPwrTable Dump Feature - u1Byte RegSupportTxPwrTableDump; - - // 2015/02/25 VincentL Add for UEFI method - u1Byte RegLoadSystemSKUfromUEFI; - u1Byte RegUEFIProfile; - - // 2015/07/07 VincentL Add for SMBIOS method - u1Byte RegLoadSystemSKUfromSMBIOS; - u1Byte RegLoadProcessorIDfromSMBIOS; - - OCTET_STRING RegPwrByRateFile; - OCTET_STRING RegPwrLimitFile; - OCTET_STRING RegSecondaryPwrLimitFile; - OCTET_STRING RegChannelPlan2G; - OCTET_STRING RegChannelPlan5G; - u1Byte RegDecryptCustomFile; - - // 2013/04/16 VincentLan Add to switch Spur Calibration Method - u1Byte RegSpurCalMethod; - // 2013/01/23 VincentLan Add to enable IQK Firmware Offload - u1Byte RegIQKFWOffload; - // 2013/11/23 VincentLan add for for KFree Feature Requested by RF David - u1Byte RegRfKFreeEnable; - - - - u1Byte RegTxDutyEnable; - - // 2011/11/15 MH Add for user can select different region and map to dedicated power gain offset table. - u1Byte RegPwrTblSel; - - u1Byte RegTxPwrLevel; - - // 2011/11/15 MH Add for user can select different tx power by rate switch by default value and registry value. - u1Byte RegPwrByRate; - u4Byte RegPwrRaTbl1; - u4Byte RegPwrRaTbl2; - u4Byte RegPwrRaTbl3; - u4Byte RegPwrRaTbl4; - u4Byte RegPwrRaTbl5; - u4Byte RegPwrRaTbl6; - u4Byte RegPwrRaTbl7; - u4Byte RegPwrRaTbl8; - u4Byte RegPwrRaTbl9; - u4Byte RegPwrRaTbl10; - u4Byte RegPwrRaTbl11; - u4Byte RegPwrRaTbl12; - u4Byte RegPwrRaTbl13; - u4Byte RegPwrRaTbl14; - u4Byte RegPwrRaTbl15; - u4Byte RegPwrRaTbl16; - - // 2012/07/24 MH Add for win8 usb whql tst & WFD multi channel. - u1Byte RegUseDefaultCID; - - u1Byte RegWfdTime; - u1Byte RegWfdChnl; - -#if 1//HARDWARE_TYPE_IS_RTL8192D == 1 // Disable by MH - //for checkEDCATurbo - u8Byte lastTxOkCnt ; - u8Byte lastRxOkCnt ; - u8Byte Ext_lastTxOkCnt ; - u8Byte Ext_lastRxOkCnt ; -#endif - - // Justin: Timer for Tx/Rx LED blinking - RT_TIMER LedTimer; - - // Add for USB/PCIE rx packetr indicate header. - u1Byte header[100][(sMacHdrLng+N6_LLC_SIZE)]; - - BOOLEAN bDisSwDmaBcn; - - // If WFD is not support, this pointer shall be NULL. - // Note: - // Do not access this variable outside of WFD_xxx() functoions. - PVOID pWFDInfo; - - // Just for need report power save state to OS or not ( Win8 )!! - BOOLEAN bInAutoPowerSavemode; - - u1Byte RegFakeRoamSignal[3]; // For testing only, RegFakeRoamSignal[0] = initial signal, RegFakeRoamSignal[1] = reducing signal - u4Byte RegCapAKMSuite; - BOOLEAN bInBIPMFPMode; - u4Byte targetAKMSuite; - - FT_INFO_ENTRY FtEntryList[MAX_FT_ENTRY_NUM]; - - OCTET_STRING TIE; - u1Byte TIEBuff[8]; - -#if (WPS_SUPPORT == 1) - // Add for customized association IE - BOOLEAN bCustomizedAsocIE; - u2Byte CustomizedAsocIELength; - u1Byte CustomizedAsocIEBuf[MAX_IE_LEN]; -#endif - - // For 92D CCK hang issue when dual band. - BOOLEAN bDisableCCKForDualBand; - BOOLEAN bRestoreCCKForDualBand; - - // TCP Sequence Reorder - BOOLEAN bTcpReorderEnable; -#if TCPREORDER_SUPPORT - TCP_SEQ_CHECKER TcpReorderChecker; - TCP_SEQ_REORDER_ENTRY TcpReorderEntry[MAX_TCP_SEQ_ENTRY_NUM]; - RT_LIST_ENTRY TcpSeq_Unused_List; - RT_LIST_ENTRY TcpSeqList; - RT_TIMER TcpSendTimer; - u4Byte AvailCnt; - u4Byte QueuedCnt; - BOOLEAN bPauseTcpReorder; -#endif - - // For tracking last received mgnt frame seq number - u2Byte last_auth_seq; - u2Byte last_asoc_req_seq; - u2Byte last_asoc_rsp_seq; - u2Byte last_Disassoc_seq; - u2Byte last_Deauth_seq; - - // For memory management to record the objects allocation info. - RT_LIST_ENTRY ObjectList; - - // add for stable traffic check - Check_Stable_Traffic CheckTraffic; - - BOOLEAN bDisableCCKRateForVWIFIChangeChannel; - - //For GTK/ARP offload. by tynli. - u1Byte rx_mic_key[8]; - RT_PM_IPV4_ARP_PARAMETERS PMIPV4ARPPara; - RT_PM_IPV6_NS_PARAMETERS PMIPV6NSPara[2]; - RT_PM_DOT11_RSN_REKEY_PARAMETERS PMDot11RSNRekeyPara; - - // Add for TCP_CHECK - RT_SUPPORT_TCPOFFLOAD_CAP TCPOffloadCap; - RT_SUPPORT_TCPOFFLOAD_CAP CurrTCPOffloadCap; - RT_SUPPORT_TCPOFFLOAD_MODE RegSupTCPOffload; - RT_SUPPORT_TCPOFFLOAD_MODE CurSupTCPOffload; - - // For Ad-hoc mode which is not support WoWLAN. 2011.09.14. by tynli. - BOOLEAN bIbssBeforeSleep; - - // For LC - BOOLEAN bStopScan; - BOOLEAN bReceiveSystemPSOID; // LC S5 WoWLAN - - // For Intel Bay Trail low power platform. - BOOLEAN bIntelPatchPNP; - - //for PCIe Bus work on 2.5GHz or 5GHz by gw - BOOLEAN ForcePCIeRate; - - // ending - u1Byte TestAID; - - //sherry added for support txpacketbuffercolease for 8192DU-VC - BOOLEAN bSupportTxPacketBufferColease; - //Sherry added to allow user disable 1 band in advanced setting of device management - u1Byte CurrentWirelessBand; - - BOOLEAN bSMSPSupport1by1; - - // Add for Real WOW - TEREDOINFO dTeredoInfo; - - // Add S5 WPA Re-Key !! - u1Byte mbS5SNose[32]; - u1Byte mbS5ANose[32]; - char mbPassphrase[PASSPHRASE_LEN]; - u4Byte mPasspharseLen; - u1Byte mbS5PMK[PMK_LEN]; - u1Byte mbS5PTK[PTK_LEN_TKIP]; - - // Add for D0 filter coalesci - RT_DO_COALESICING_FILTER_INFO mRtD0ColesFilterInfo; - - BOOLEAN bEDCCASupport; - - u1Byte RegNByteAccess; //20121106 page add for Nbyte access BB reg switch - u1Byte RegFWOffload; - u1Byte RegDownloadFW; - - CHANNEL_WIDTH currentRABw; - - u2Byte RegScanLarge; - u2Byte RegScanMiddle; - u2Byte RegScanNormal; - u2Byte RegScanActive; - u2Byte RegForcedScanPeriod; - - u2Byte RegPreferBand; - - // Pre-transition for OID_PNP_SET_POWER OID wake up handling, added by Roger, 2012.11.28. - BOOLEAN bPreTransPnP; - - BOOLEAN bDisconnectInProgress; //indicate disconnect in progress 20130117 - - //20130117 Used for Invitation No/After to Pass, with skip scan when Go is connected - u1Byte bGoSkipScanForWFD; - u1Byte bClientSkipScanForWFD; - - BOOLEAN bForceGoTxData20MBw; - u1Byte bWaitBeforeGoSkipScan; - - - BOOLEAN bHWRTSEnable; - - u1Byte ScanOffloadType; - - // 2013/02/05 MH Add for streamMode switch. - u1Byte RegStreamMode; - // 2013/02/06 MH Add Transmit power control level for all customer in the future. - u1Byte RegTPCLvl; - u1Byte RegTPCLvlD; - u1Byte RegTPCLvl5g; - u1Byte RegTPCLvl5gD; - - u1Byte RegEnableAdaptivity; - u1Byte RegL2HForAdaptivity; - u1Byte RegHLDiffForAdaptivity; - u2Byte RegEnableCarrierSense; - u2Byte RegNHMEnable; - u1Byte RegDmLinkAdaptivity; - u1Byte RegDCbackoff; - u1Byte RegAPNumTH; - - BOOLEAN RegPacketDrop; - - u1Byte EnableResetTxStuck; - - u1Byte RegSifsThresh; - - u1Byte RegFwload; - - u1Byte RegUsbSafetySwitch; - - u1Byte RegRspPwr; - - //20130220 ylb Add for 8814A FPGA Verification. - u1Byte Reg8814AFPGAVerification; - u1Byte bRegAdhocUseHWSec; - - //20140526 haiso_ho Add for 8822B FPGA Verification. - u1Byte Reg8822BFPGAVerification; - - BOOLEAN RegClearAMDWakeUpStatus; // zhiyuan add for 88ee Lenovo AMD platform - - BOOLEAN RegbCustomizedScanPeriod; - u2Byte RegIntelCustomizedScanPeriod; - u2Byte RegAMDCustomizedScanPeriod; - - u2Byte RegDisableBTCoexist; - - RT_LED_ASSOC_STATE LEDAssocState; - - BOOLEAN EnableMA;// For Lenovo Mutual Authentication function, added by Roger, 2013.05.03. - - u1Byte VhtWeakSecurity; - u1Byte RegPassiveScan; - - BOOLEAN bSupportPacketCoalescing; - BOOLEAN IsAMDIOIC; - - BOOLEAN bPendScanOID; - BOOLEAN bCheckScanTime; - u8Byte ScanOnlyStartTime; - u1Byte RegMultiChannelFcsMode; - BOOLEAN bFcsUpdateTSF; - u1Byte WFDOpChannel; - - u4Byte RegWmmPage; - u1Byte WFDPeerOpChannel; - u2Byte ConnectionConfigTimeIntv; - u4Byte Regbcndelay; - BOOLEAN bWPSProcess; - u1Byte RetryTimes; - u4Byte RegPktIndicate; - - u1Byte RegDisableAC; - u4Byte RegLedInterval; - u1Byte Reg8814auEfuse; - u1Byte RegValidRFPath; - - // Network list offload info. - RT_NLO_INFO NLOInfo; - -#if(AUTO_CHNL_SEL_NHM == 1) - // - // Auto Channel Selection mechanism for P2P GO, added by Roger, 2014.05.15. - // - RT_AUTO_CHNL_SEL AutoChnlSel; -#endif - - BOOLEAN bDisableRtkSupportedP2P; - - u1Byte DumpDbgRegCnt; - - // For AOAC reconnection policy. 2014.11.05, added by tynli. - BOOLEAN bPerformPnpReconnect; - BOOLEAN bRegPnpKeepLink; - - // SDIO polling interrupt mode - BOOLEAN bSdioPollIntrHandler; - u2Byte SdioIntrPollingLimit; - - // For Rx Reorder Control - u1Byte RegRxReorder; - u1Byte RegRxReorder_WinSize; - u1Byte RegRxReorder_PendTime; - u1Byte RegPreInitMem; - u1Byte Reg88EIOTAction; - - - u2Byte RegTxSendAsap; - u2Byte CurTxSendAsap; - - // MAC Address Randomization - u1Byte RegSupportMACRandom; - - //ECSA - u1Byte RegSupportECSA; - - // FT - u1Byte RegSupportFT; - - // authentication frame - OCTET_STRING authReqframe; - OCTET_STRING authRspframe; - - u1Byte RegSuspendTimerInLowPwr; -}MGNT_INFO, *PMGNT_INFO; - -typedef struct _IRP_DBG_INFO{ - // For IRP buf/queue initialize info - BOOLEAN bListInit; - BOOLEAN bAmpAsocBuf; - BOOLEAN bBTLocalBufPtr; - u4Byte BTLocalBufAllocCnt; - u4Byte BTLocalBufFreeCnt; -}IRP_DBG_INFO, *PIRP_DBG_INFO; - - -#define MPHAL_INBUF_SIZE 100 -#define MPHAL_OUTBUF_SIZE 100 - -typedef VOID (*DbgActFunc)(IN PVOID Adapter); -typedef struct _RT_NDIS_DBG_CONTEXT -{ - BOOLEAN bDbgDrvUnload; - - // Work Item for debugging. - RT_WORK_ITEM DbgWorkItem; - PlatformEvent DbgWorkItemEvent; - NDIS_SPIN_LOCK DbgWorkItemSpinLock; // To protect the following variables. - BOOLEAN bDbgWorkItemInProgress; // Indicate a DbgWorkItem is scheduled and not yet finished. - - DbgActFunc CurrDbgAct; // An instance which implements function and context of DbgWorkItem. - - // Variable needed in each implementation of CurrDbgAct. - ULONG DbgActType; // Type of action performed in CurrDbgAct. - ULONG DbgIoOffset; // The type of IO operation is depend of DbgActType. - ULONG DbgIoValue; // The type of IO operation is depend of DbgActType. - ULONG DbgOutLen; - u1Byte DbgOutBuf[100]; - UCHAR DbgIoBuf[64]; - ULONG DbgRfPath; // The RF path of IO operation. Added by Roger, 2008.09.10. - - //cosa add for bt control - // Event used to sync H2c for BT control - PlatformEvent dbgH2cRspEvent; - PlatformEvent dbgBtC2hEvent; - PlatformEvent dbgBtCoexEvent; - u1Byte h2cReqNum; - u1Byte btInBuf[100]; -} RT_NDIS_DBG_CONTEXT, *PRT_NDIS_DBG_CONTEXT; -// -// Reason code for surprisely removing. -// -#define HALT_BY_TX 0x01000000 -#define HALT_BY_TX_REQUEST 0x01000001 -#define HALT_BY_TX_COMPLETE 0x01000002 -#define HALT_BY_RX 0x02000000 -#define HALT_BY_RX_REQUEST 0x02000001 -#define HALT_BY_RX_COMPLETE 0x02000002 -#define HALT_BY_IO 0x04000000 -#define HALT_BY_IO_SYNC 0x04000001 -#define HALT_BY_IO_ASYNC 0x04000002 -#define HALT_BY_PNP_EVENT 0x08000000 -#define HALT_BY_DRV_STOP 0x10000000 - -// -// Function disabled. -// -#define DF_TX_BIT BIT0 -#define DF_RX_BIT BIT1 -#define DF_IO_BIT BIT2 -#define DF_IO_D3_BIT BIT3 - -#define RT_DF_TYPE u4Byte -#define RT_DISABLE_FUNC(__pAdapter, __FuncBits) ((__pAdapter)->DisabledFunctions |= ((RT_DF_TYPE)(__FuncBits))) -#define RT_ENABLE_FUNC(__pAdapter, __FuncBits) ((__pAdapter)->DisabledFunctions &= (~((RT_DF_TYPE)(__FuncBits)))) -#define RT_IS_FUNC_DISABLED(__pAdapter, __FuncBits) ( (__pAdapter)->DisabledFunctions & (__FuncBits) ) - -// -// Driver State -// -#define ADAPTER_STATUS_FIRST_INIT 0x00000001 -#define ADAPTER_STATUS_WAKE_UP 0x00000002 -#define ADAPTER_STATUS_FW_DOWNLOAD_FAILURE 0x00000004 -#define ADAPTER_STATUS_BB_CONFIG_FAILURE 0x00000005 //added by vivi, bb config failure - -#define ADAPTER_SET_STATUS_FLAG(_M, _F) PLATFORM_INTERLOCKED_SET_BITS(&((_M)->Status), (_F)) -#define ADAPTER_CLEAR_STATUS_FLAG(_M, _F) PLATFORM_INTERLOCKED_CLEAR_BITS(&((_M)->Status), (_F)) -#define ADAPTER_TEST_STATUS_FLAG(_M, _F) (((_M)->Status & (_F)) != 0) - -#if 0 -typedef enum _DUAL_MAC_SCENARIOS_TYPE{ - No_Scenarios = 0, - STA_STA = 1, - STA_AP = 2, - STA_P2P = 3 -}DUAL_MAC_SCENARIOS_TYPE,*PDUAL_MAC_SCENARIOS_TYPE; - - -typedef enum _DUAL_MAC_EASY_COCURRENT_CHECK_STATE{ - RT_DO_NOTHING = 0, - RT_NEED_RETRY = 1, - RT_NEED_RESCHEDULE = 2 -}DUAL_MAC_EASY_COCURRENT_CHECK_STATE,*PDUAL_MAC_EASY_COCURRENT_CHECK_STATE; - -typedef enum _DUAL_MAC_TWO_STA_CONCURRENT_MODE{ - RT_NO_SET = 0, - RT_SECONDARY_DISABLE = 1, - RT_SECONDARY_ENABLE = 2, - RT_SECONDARY_AUTO = 3 -}DUAL_MAC_TWO_STA_CONCURRENT_MODE,*PDUAL_MAC_TWO_STA_CONCURRENT_MODE; - - -typedef struct _DUAL_MAC_DMSP_CONTROL{ - BOOLEAN bActiveScanForSlaveOfDMSP; - BOOLEAN bScanForAnotherMacForDMSP; - BOOLEAN bScanForItSelfForDMSP; - BOOLEAN bWriteDigForAnotherMacOfDMSP; - u4Byte CurDigValueForAnotherMacOfDMSP; - BOOLEAN bChangeCCKPDStateForAnotherMacOfDMSP; - u1Byte CurCCKPDStateForAnotherMacOfDMSP; - BOOLEAN bChangeTxHighPowerLvlForAnotherMacOfDMSP; - u1Byte CurTxHighLvlForAnotherMacOfDMSP; - s4Byte RssiValMinForAnotherMacOfDMSP; -}DUAL_MAC_DMSP_CONTROL,*PDUAL_MAC_DMSP_CONTROL; - -typedef struct _DUAL_MAC_EASY_SMART_CONCURRENT_CAHANEL_SETTING_CONTROL{ - BOOLEAN bConfiguredByUser; - BAND_TYPE BandToSet; - u1Byte ChannelNumberToSet; - BOOLEAN bChangeChannelOnly; -}DUAL_MAC_EASY_SMART_CONCURRENT_CAHANEL_SETTING_CONTROL,*PDUAL_MAC_EASY_SMART_CONCURRENT_CAHANEL_SETTING_CONTROL; - -typedef struct _DUAL_MAC_EASY_CONCURRENT_CONTROL{ - BOOLEAN bConfigurationByUI; - BOOLEAN bRegSTAAndSTAEasySmartConcurrentSupport; - u1Byte RegTwoStaConcurrentMode; - u1Byte CurrentTwoStaConcurrentMode; - BOOLEAN bSupportSTAAndSTASmartConcurrent; - BOOLEAN bSupportSTAAndAPSmartConcurrent; - BOOLEAN bSkipChangeMacPhyMode; - BOOLEAN bDisableCCKRateDuringMacPhyModeChange; - RT_WORK_ITEM DualMacEasyConcurrentWorkItem; - RT_TIMER DualMacEasyConcurrentRetryTimer; - BOOLEAN bJoinRequestReschedule; - BOOLEAN bJoinRequestRescheduleRetry; - BOOLEAN bRestartAPRescheduleRetry; - BOOLEAN bRestartAPReschedule; - BOOLEAN bNeedSendMimoPs; - BOOLEAN bNeedRestartAP; - u1Byte BandSetBackForDMDP; - u1Byte CurrentBandTypeBackForDMDP; - u1Byte ConnectionChannelWidthBack; - u1Byte ConnectionChannelOffsetBack; - u1Byte DualMacScenariosToSet; - BOOLEAN bCloseBBAndRFForDMSP; - BOOLEAN bChangeToDMDP; - BOOLEAN bChangeToDMSP; - BOOLEAN bSwitchInProcess; - u1Byte JoinAction; - RT_WLAN_BSS BssDesc; - BOOLEAN bTmpBssDesc; - BOOLEAN bLinkWithNAP; - BOOLEAN bRestartAPForMac0ConnectOnDmsp; - BOOLEAN bLinkInProgress; - BOOLEAN bDynamicSwitchToDmspInProgress; - BOOLEAN bDynamicSwitchToDmspRetry; - BOOLEAN bChangeTwoStaConcurrentModeInProgress; - BOOLEAN bChangeTwoStaConcurrentModeRetry; - BOOLEAN bAutoSelChnl; - BOOLEAN bTxPacketBufferColease; - BOOLEAN bMacReconfig; - BOOLEAN bMacReconfigIsInProgress; - BOOLEAN bOnlyMacConfigToDisassembleTxPacketBuffer; -}DUAL_MAC_EASY_CONCURRENT_CONTROL,*PDUAL_MAC_EASY_CONCURRENT_CONTROL; -#endif -typedef enum _RT_RF_TYPE_DEFINITION -{ - RF_1T2R = 0, - RF_2T4R = 1, - RF_2T2R = 2, - RF_1T1R = 3, - RF_2T2R_GREEN = 4, - RF_3T3R = 5, - RF_4T4R = 6, - RF_2T3R = 7, - RF_3T4R = 8, - - RF_MAX_TYPE = 0xF, // u1Byte -}RT_RF_TYPE_DEF_E; - -// 2010/12/27 Move from type.h to here. -typedef enum _BAND_TYPE{ - BAND_ON_2_4G = 0, - BAND_ON_5G , - BAND_ON_BOTH, - BANDMAX -}BAND_TYPE,*PBAND_TYPE; - - -typedef struct _PORT_COMMON_INFO -{ - - PADAPTER pDefaultAdapter; - - - // ================================================================================================ - // Extracted From RT_NDIS_COMMON: pNdisCommon - // ================================================================================================ - - - // Handle All Software Timer --------------------------------------------------------- - RT_SPIN_LOCK TimerLock; // For timer synchronization - u4Byte uNumberOfAllocatedTimers; // Number of Allocated RT_TIMER objects - u4Byte uNumberOfReleasedTimers; // Number of Released RT_TIMER objects - s4Byte ActiveTimerCallbackCount; // Default 1, only 0 when in Halt state - RT_EVENT AllTimerCompletedEvent; // Notification of all timer completion - -#if (DEBUG_RESOURCE_TIMER == 1) - DEBUG_RESOURCE_TIMER_MONITOR ResourceTimerMonitor[DEBUG_RESOURCE_TIMER_MONITOR_SIZE]; // For Debugging Purposes -#endif - // ------------------------------------------------------------------------------- - - - // ================================================================================================ - - - PPORT_HELPER pPortHelper; - - // MacId Context Place Holder for Private Data: ------------------------------------ - // + Only access this private data inside the module by MacIdGetCommonContext() - PRIVATE_DATA_ZONE MacIdCommon[HAL_MAC_ID_SIZE_OF_COMMON_CONTEXT]; - // ------------------------------------------------------------------------------- - - // ActionTimer Context Place Holder for Private Data: ------------------------------------ - // + Only access this private data inside the module by ActionTimerGetCommonContext() - PRIVATE_DATA_ZONE ActionTimerCommon[ACTION_TIMER_SIZE_OF_COMMON_CONTEXT]; - // ------------------------------------------------------------------------------- - - -#if (MULTIPORT_SUPPORT == 1) - - // MultiPort Common Context Place Holder for Private Data: ---------------------------- - // + Only access this private data inside the module by MultiPortGetCommonContext() - PRIVATE_DATA_ZONE MultiPortCommon[MULTIPORT_SIZE_OF_COMMON_CONTEXT]; - // --------------------------------------------------------------------------- - - -#if (MULTICHANNEL_SUPPORT == 1) - - // MultiChannel Common Context Place Holder for Private Data: ---------------------------- - // + Only access this private data inside the module by MultiChannelGetCommonContext() - PRIVATE_DATA_ZONE MultiChannelCommon[MULTICHANNEL_SIZE_OF_COMMON_CONTEXT]; - // ------------------------------------------------------------------------------- - -#endif -#endif - - - - WDI_DATA_STRUCT WdiData; - - PCHANNEL_COMMON_CONTEXT pChnlCommInfo; - - RT_LIST_ENTRY TimerResourceList; // Timer resource list for further handling - u4Byte uNumberOfInsertedTimerRes; // Number of Timer resource has been inserted for handling - -} PORT_COMMON_INFO, * PPORT_COMMON_INFO; - -typedef enum -{ - RT_ERR_SUCCESS = 0, - RT_ERR_DRIVER_FAILURE, - RT_ERR_IO_FAILURE, - RT_ERR_WI_TIMEOUT, - RT_ERR_WI_BUSY, - RT_ERR_BAD_FORMAT, - RT_ERR_INVALID_DATA, - RT_ERR_NOT_ENOUGH_SPACE, - RT_ERR_WRITE_PROTECT, - RT_ERR_READ_BACK_FAIL, - RT_ERR_OUT_OF_RANGE -} RT_ERROR_CODE; - -typedef struct _RT_PEER_ENTRY { - BOOLEAN bUsed; - u1Byte uPeerId; - u2Byte uPortId; - u1Byte PeerAddr[6]; -} RT_PEER_ENTRY, *PRT_PEER_ENTRY; - - -typedef struct _ADAPTER{ - RT_SDIO_DEVICE NdisSdioDev; - PRT_NDIS_COMMON pNdisCommon; - - PRT_NDIS62_COMMON pNdis62Common; - - //===================================================== - // Please put tx related variables in TX_GENERAL. - //===================================================== - TX_GENERAL txGen; - //===================================================== - - // MultiPort Architecture ====================================================== - // - Final Goal: All Adapter's Common Information should be merged into this structure. - // ======================================================================= - PPORT_COMMON_INFO pPortCommonInfo; - // -------------------------------------------------------------------------------- - - -#if (MULTIPORT_SUPPORT == 1) - - // MultiPort Port Context Place Holder for Private Data: ---------------------------- - // + Only access this private data inside the module by MultiPortGetPortContext() - PRIVATE_DATA_ZONE MultiPort[MULTIPORT_SIZE_OF_PORT_CONTEXT]; - // ------------------------------------------------------------------------ - -#if (MULTICHANNEL_SUPPORT == 1) - - // MultiChannel Port Context Place Holder for Private Data: --------------------------- - // + Only access this private data inside the module by MultiChannelGetPortContext() - PRIVATE_DATA_ZONE MultiChannel[MULTICHANNEL_SIZE_OF_PORT_CONTEXT]; - // -------------------------------------------------------------------------- - -#endif -#endif - - - BOOLEAN bMPMode; - RT_ERROR_CODE LastError; // <20130613, Kordan> Only the functions associated with MP records the error code by now. - - RT_NDIS_DBG_CONTEXT ndisDbgCtx; - - NDIS_INTERRUPT_TYPE InterruptType; - PIO_INTERRUPT_MESSAGE_INFO MessageInfoTable; - - - BOOLEAN bIMRDisable; - - BOOLEAN bvWifiStopBeforeSleep; - BOOLEAN bDriverStopped; - BOOLEAN bSurpriseRemoved; - u4Byte SurpriseRemovedReason; - u1Byte MaxIRPPengding; - u1Byte TXPacketShiftBytes; - u1Byte HWDescHeadLength; - u1Byte Addr_ePHY; - - - u2Byte MAX_NUM_RFD; - u2Byte MAX_NUM_RX_DESC; - u2Byte MAX_RECEIVE_BUFFER_SIZE; - u2Byte MAX_SUBFRAME_TOTAL_COUNT; - - u1Byte TotalCamEntry; - u1Byte HalfCamEntry; - u1Byte CamExtApMaxEntery; - u1Byte CamExtApP2pStartIndex; - u1Byte CamExtApP2pMaxEntry; - u1Byte CamExtStaPairwiseKeyPosition; - u1Byte CamBtStartIndex; - u1Byte BtHwCamStart; - - u2Byte RT_TCB_NUM; - u2Byte RT_LOCAL_BUF_NUM; - u2Byte RT_LOCAL_FW_BUF_NUM; - u2Byte RT_TXDESC_NUM; - u2Byte RT_TXDESC_NUM_BE_QUEUE; - u2Byte MAX_TRANSMIT_BUFFER_SIZE; - BOOLEAN bEarlyQueueTimeout; - // - // Union of functions disabled. - // Each bit indicated one function that is disabled, such as Tx, Rx, IO. - // See DF_XX_BIT and related operation defined above. - // - RT_DF_TYPE DisabledFunctions; - - HAL_INTERFACE HalFunc; - PVOID HalData; - PVOID pHalBusInfo; - - u2Byte HardwareType; - u1Byte EepromAddressSize; - u1Byte PermanentAddress[6]; - u1Byte CurrentAddress[6]; - - WIRELESS_MODE RegOrigWirelessMode; - WIRELESS_MODE RegWirelessMode; - HT_MODE RegHTMode; - - BOOLEAN bFWReady; - BOOLEAN bHWInitReady; - BOOLEAN bSWInitReady; - BOOLEAN bInitializeInProgress; - BOOLEAN bInitComplete; - -//=========================================== - //2 Transmit related variables - BOOLEAN bTxLocked; // For debugging RT_TX_SPINLOCK. Note that! we SHOULD ONLY change it at PlatformXXXSpinLock(). 2005.11.17, by rcnjko. - VIRTUAL_MEMORY TcbBuffer; - u2Byte NumTcb; - u2Byte NumIdleTcb; - u2Byte NumTxDesc[MAX_TX_QUEUE]; - u2Byte AvailableDescToWrite[MAX_TX_QUEUE]; - u2Byte CurrentTXWritePoint[MAX_TX_QUEUE]; - u2Byte CurrentTXReadPoint[MAX_TX_QUEUE]; - //======================================= - // debug use - u4Byte sameTxReadPointCnt; - u2Byte CurrentTxReadPointBeQLogIndex; - u2Byte CurrentTxReadPointBeQLog[10]; - u2Byte CurrentTxWritePointBeQLog[10]; - u8Byte updateBeQReadPointTime[10]; - u8Byte latestUpdatedTxDescTime; - u4Byte wrongrwTxpointCnt; - - u4Byte abnormalAvaiDescLogIndex[MAX_TX_QUEUE]; - u2Byte abnormalCurrentTXWritePoint[MAX_TX_QUEUE][10]; - //======================================= - RT_LIST_ENTRY TcbIdleQueue; - RT_LIST_ENTRY TcbWaitQueue[MAX_TX_QUEUE]; - u4Byte TcbWaitQueueCnt[MAX_TX_QUEUE]; - - RT_LIST_ENTRY TcbBusyQueue[MAX_TX_QUEUE]; - RT_LIST_ENTRY TcbAggrQueue[MAX_TX_QUEUE]; // For A-MSDU aggreagtion, Joseph - u4Byte TcbCountInAggrQueue[MAX_TX_QUEUE]; - RT_TX_AGG_COALES_BUF TcbAggCoalesBuf[MAX_TX_QUEUE]; - - u2Byte NextTxDescToFill[MAX_TX_QUEUE]; - u2Byte NextTxDescToCheck[MAX_TX_QUEUE]; - u2Byte nBufInTxDesc[MAX_TX_QUEUE]; - u1Byte nFragDescUsed; - - // For WIN7 Context switch - LIST_ENTRY HVLContextLinked; - - //2 Receive related variables - BOOLEAN bRxLocked; // For debugging RT_RX_SPINLOCK. Note that! we SHOULD ONLY change it at PlatformXXXSpinLock(). 2005.11.17, by rcnjko. - VIRTUAL_MEMORY RfdBuffer; - u2Byte NumRfd; - u2Byte NumIdleRfd; - u4Byte NumBusyRfd[MAX_RX_QUEUE]; - u2Byte NumRxDesc[MAX_RX_QUEUE]; - RT_LIST_ENTRY RfdIdleQueue; - RT_LIST_ENTRY RfdBusyQueue[MAX_RX_QUEUE]; -#if( WDI_SUPPORT == TRUE ) - PNDIS_RECEIVE_THROTTLE_PARAMETERS pThrottle; - BOOLEAN bFirstMpduOfInterrupt; -#endif - - u2Byte NextRxDescToFill[MAX_RX_QUEUE]; - u2Byte NextRxDescToCheck[MAX_RX_QUEUE]; - u2Byte nBufInRxDesc[MAX_RX_QUEUE]; - DEFRAG_ENTRY DefragArray[MAX_DEFRAG_PEER]; - u2Byte LowRfdThreshold; - u4Byte RcvRefCount; // number of packets that have not been returned back - PALIGNED_SHARED_MEMORY pAMSDU; // Copy subframe of AMSDU into one contineous buffer before indication (Vista only) - u2Byte AmsduIndex; - - - //2 Transmit local buffer - u2Byte NumLocalBuffer; - u2Byte NumLocalBufferIdle; - u2Byte NumLocalFWBuffer; // For download Firmware - u2Byte NumLocalFWBufferIdle; //tynli_test - VIRTUAL_MEMORY LocalBufferArray; - VIRTUAL_MEMORY LocalFWBufferArray; // For download Firmware - RT_LIST_ENTRY LocalBufferQueue; - RT_LIST_ENTRY LocalFWBufferQueue; // For download Firmware - - //2 Receive local buffer - pu4Byte RfdListAddr[MAX_RFD_ARRAY_NUM + 1]; - pu4Byte RfdVirtualAddr[MAX_RFD_ARRAY_NUM + 1]; -#if RX_AGGREGATION - RT_RFD RfdTmpArray[MAX_PKT_AGG_NUM]; - RT_LIST_ENTRY RfdTmpList; -#endif - - - //2 Statictics - RT_TX_STATISTICS TxStats; - RT_RX_STATISTICS RxStats; - u4Byte numInterrupt; - - //2 General Templorary Buffer - VIRTUAL_MEMORY GenTempBufferArray; // for General Templorary Buffer - RT_LIST_ENTRY GenTempBufferQueue; - u4Byte NumGenTempBufferIdle; - u1Byte TempBufferforcoalsece[2000]; - - //2 Management Information - MGNT_INFO MgntInfo; - u1Byte MCList[MAX_MCAST_LIST_NUM][6]; - u4Byte MCAddrCount; - RT_WLAN_BSS bssDescList[MAX_BSS_DESC]; - u4Byte AP_EDCA_PARAM[4]; - u4Byte STA_EDCA_PARAM[4]; - - // MISC. - u8Byte DriverUpTime; // Yves: Driver up time. - u8Byte lastscantime;//lastscantime - u8Byte LastScanCompleteTime; // Last scan complete time. - u8Byte LastConnectStartIndicationTime; - u8Byte LastRoamingStartIndicationTime; - u8Byte LastConnectionActionTime; - - // For PnP Working Time Calculation - BOOLEAN bCtrlPnPTime; - LARGE_INTEGER PnPTotalTime; - LARGE_INTEGER PnPIOTime; - - // For HCT test, 2005.07.15, by rcnjko. - BOOLEAN bInHctTest; - BOOLEAN bInWFDTest; - BOOLEAN bScanTimeCheck; - BOOLEAN bFixedMacAddr; - - BOOLEAN bReduceImr; - - BOOLEAN bInChaosTest; - BOOLEAN bDisable11ac; - - // For USB IF test, 060505, by rcnjko. - BOOLEAN bInUsbIfTest; - - //2 System Reset - RESET_TYPE ResetProgress; - u4Byte ResetCount; - BOOLEAN bForcedSilentReset; - BOOLEAN bResetInProgress; - - // General Adapter Status - u4Byte Status; - - // Tx/Rx LED - u2Byte LedTxCnt; - u2Byte LedRxCnt; - - // - // Pointer to the memory block storing pointers to DRV_LOG_POOL_T objects. - // Each log pool is corresponding to one type of log. - // Use GET_DRV_LOG_POOL() and SET_DRV_LOG_POOL() to manipulate log pool, - // see LogMgnt.c for details. - // -#if DRV_LOG - VOID** ppLogPools; - -#endif - - //2 Power related variables - BOOLEAN bInSetPower; - BOOLEAN bEnterPnpSleep; // Just for S3/S4 !!! - BOOLEAN bWakeFromPnpSleep; // Just for S3/S4 !!! - BOOLEAN bUnloadDriverwhenS3S4; - BOOLEAN bDriverIsGoingToUnload; - BOOLEAN bHWSecurityInWoL; //by tynli - BOOLEAN bDriverIsGoingToPnpSetPowerSleep; - BOOLEAN bIntoIPS; - BOOLEAN bReceiveCpwmInt; - BOOLEAN bDriverShutdown; - u4Byte ipsEnterCnt; - BOOLEAN bInWoWLANPowerState; - BOOLEAN bReInitHW; // record - - // Interrupt debug message - u4Byte handleIntFailCnt; - u8Byte lastHandleIntFailTime[10]; - u8Byte preHandlIntTime; - u8Byte curHandleIntTime; - u4Byte intLogTimeIndex; - u8Byte handleIntTime[10]; - - // Tx hang debug info - HW_REG_VALUE txMacReg[MAX_TX_REG_NUM]; - HW_REG_VALUE txBbReg[MAX_TX_REG_NUM]; - BOOLEAN bTxHangCheck; - u1Byte dropPktByMacIdCnt; - u8Byte txHangHwCollectTime; - u8Byte firsttxHangHwTime; - BOOLEAN bTcbBusyQEmpty[MAX_TX_QUEUE]; - u8Byte firstTcbSysTime[MAX_TX_QUEUE]; - u4Byte txOwnCloseTimeIndex[MAX_TX_QUEUE]; - u8Byte curTxOwnCloseTime[MAX_TX_QUEUE]; - u8Byte txOwnCloseTime[MAX_TX_QUEUE][10]; - - // Rx hang debug info - HW_REG_VALUE rxMacReg[MAX_RX_REG_NUM]; - HW_REG_VALUE rxBbReg[MAX_RX_REG_NUM]; - BOOLEAN bRxHangCheck; - u8Byte rxHangHwCollectTime; - - // Tx/Rx hang debug info - HW_REG_VALUE rfReg[MAX_TX_REG_NUM]; - - - BOOLEAN bInitByExtPort; - BOOLEAN bSilentReseted; - BOOLEAN initfinish; - - BOOLEAN bStartVwifi; - - //Rx reorder related Reference variables - u4Byte rxReorderRefCount; - u4Byte rxReorderIndEnterCnt; - u4Byte rxReorderIndAllowCnt; - u4Byte rxReorderIndRejectCnt[3]; - - //2 Interrupt related variables - u4Byte IntrTxRefCount; - u4Byte IntrRxRefCount; - u4Byte IntrCCKRefCount; -#if TCPREORDER_SUPPORT - u4Byte IntrTcpSeqRefCount; -#endif - - u4Byte IntrNBLRefCount; - - u4Byte IntrInterruptRefCount; - u4Byte RxPktPendingTimeoutRefCount; - - BOOLEAN bIntInProgress; // Interrupt handling is in progress - PlatformSemaphore InterruptSema; //For interrupt sync flow control - - - // Interrupt Thread - BOOLEAN bUseThreadHandleInterrupt; - RT_THREAD InterruptThread; - u8Byte InterruptThreadCnt; - BOOLEAN bDPCISRTest; - - // - // We need to declare the strcute in other place later!!! - // - // 2010/12/25 MH Add for _DFS support flag. - // 2010/12/27 MH Add for Dual Mode switch support flag - // 2010/12/28 MH Add for Dual Mode smart concurrent support flag - // 2010/12/30 MH Add WAPI and other fucuter support support flag. -#ifdef REMOVE_PACK -#pragma pack(1) -#endif - UINT32 DFSSupport:1; // 802.11h support - //UINT32 DualMacSupport:1; // dual mac switch support - //UINT32 DualMacSmartConcurrent:1; // smart concurrent support - UINT32 FwProcVenCmdSupport:1; //?? - // 2010/12/30 MH Add to support in the future. - UINT32 IcVerifyPhase:2; // FPGA/Test chip/ASIC - UINT32 FwLoadFromHeader:1; // From header/read files - UINT32 InterfaceType:3; // USB/PCI/PCIE/SDIO/... - UINT32 DebugPhase:2; // Free build/chk build/ debug module. - UINT32 MpSupport:1; // Normal or MP driver - UINT32 MsiSupport:2; // PCIE different interrupt type support traditional/ MIS/ MSI_X based on different PCIE spec - UINT32 EthSupport:1; // Ethner simulation switch. for 8715 in the future.or IC verification - UINT32 TDLSSupport:1; -#ifdef REMOVE_PACK -#pragma pack() -#endif - UINT32 NANSupport:2; - UINT32 P2PSupport:2; - UINT32 WPSSupport:1; - UINT32 TXSCSupport:1; - UINT32 RXSCSupport:1; - UINT32 RASupport:1; - UINT32 Reserve:7; - - //2 92D related variables - u1Byte MacPhyModeFor8192D; - // dual MAC: 0--Mac0 1--Mac1 - u1Byte interfaceIndex; - u1Byte EarlyMode_Threshold; - u1Byte EarlyMode_QueueNum[8]; //The tid from 0--7 - u1Byte EarlyModebuf[1600]; - - // 2010/12/27 MH We need to reduce the declareation to prevent occupying too much memory - // The better way is to ise the union structure for bit declaration in the future. - RT_LIST_ENTRY List; - //PADAPTER BuddyAdapter; - //BOOLEAN bMasterOfDMSP; - //BOOLEAN bSlaveOfDMSP; - - u1Byte RegTwoStaConcurrentMode; - //DUAL_MAC_DMSP_CONTROL DualMacDMSPControl; - //DUM_CTRL_INFO DumCtrlInfo; - //DUSC_INFO DuscInfo; - - //for 92D HW tx retry bug. // HARDWARE_TYPE_IS_RTL8192D disable by MH - u1Byte CurrentFWTxRate; - - PD_T DM_PDTable; - - u4Byte PS_BBRegBackup[PSBBREG_MAX]; - - RT_LIST_ENTRY ListEntry; - - u1Byte ShortcutIndex; //record entry index of array for shortcut and it's 1 based - s1Byte SNForShortcut; - - BOOLEAN bNeedToTriggerLA; - - BOOLEAN bBtFwSupport; - - BOOLEAN bNromalRQPN; - -#if USB_TX_THREAD_ENABLE - BOOLEAN bUseUsbTxThread; // Dynamically enable USB Tx thread. 2012.06.18. by tynli. -#endif - - BOOLEAN bRemoveTsInRxPath; - - BOOLEAN bAPChannelInprogressForNewconnected; - - BOOLEAN bRecvEnterPSForGo; //to indicate P2P client is active or not - WIRELESS_MODE BackupWirelessMode; - - // - // Using following state flag to trace vWiFi and power transaction event for some vWiFi bus BSOD issue. - // 2013.1213 - // -#if DRV_LOG_REGISTRY - u4Byte DrvState; - u4Byte WriteRegRefCount; - BOOLEAN bDrvStateError; -#endif - -#if WLAN_ETW_SUPPORT - u4Byte TxFrameUniqueueID; - u4Byte RxFrameUniqueueID; -#endif - - BOOLEAN bFixBTTdma; - u4Byte CPWMTimeoutCount; - BOOLEAN bRxPsWorkAround; - - RT_THREAD RxNotifyThread; - - // Rx queue. - RT_SINGLE_LIST_HEAD RxPeerQueue[MAX_PEER_NUM]; - RT_PEER_ENTRY RxPeerTable[MAX_PEER_NUM]; - u1Byte RxPeerUsedCount; - RES_MON_OBJ ResMonObjWdi; -}ADAPTER,*PADAPTER; - -typedef struct _RT_NDIS_DRIVER_CONTEXT *PRT_NDIS_DRIVER_CONTEXT, RT_NDIS_DRIVER_CONTEXT; - -// The Driver(Module) Context in Driver-Wide variables. -typedef struct _RT_DRIVER_CONTEXT -{ - RT_NDIS_DRIVER_CONTEXT NdisContext; // The Ndis global context - - RT_LIST_ENTRY AdapterList; // The list of adapters - RT_SPIN_LOCK ContextLock; // To protect the content of RT_DRIVER_CONTEXT. -}RT_DRIVER_CONTEXT, *PRT_DRIVER_CONTEXT; - -#define INSERT_GLOBAL_ADAPTER_LIST(__pAdapter) \ -{ \ - PLATFORM_ACQUIRE_RT_SPINLOCK(GlobalRtDriverContext.ContextLock); \ - RTInsertTailList(&(GlobalRtDriverContext.AdapterList), &((__pAdapter)->ListEntry)); \ - PLATFORM_RELEASE_RT_SPINLOCK(GlobalRtDriverContext.ContextLock); \ -} - -#define REMOVE_GLOBAL_ADAPTER_LIST(__pAdapter) \ -{ \ - PLATFORM_ACQUIRE_RT_SPINLOCK(GlobalRtDriverContext.ContextLock); \ - RTRemoveEntryList(&((__pAdapter)->ListEntry)); \ - PLATFORM_RELEASE_RT_SPINLOCK(GlobalRtDriverContext.ContextLock); \ -} - -extern RT_DRIVER_CONTEXT GlobalRtDriverContext; - -//----End of Define RT_SPIN_LOCK for all platform.-----// - -#endif // #ifndef __INC_TYPEDEF_H diff --git a/network/wlan/WDI/HEADER/WiDiType.h b/network/wlan/WDI/HEADER/WiDiType.h deleted file mode 100644 index b33f18f3..00000000 --- a/network/wlan/WDI/HEADER/WiDiType.h +++ /dev/null @@ -1,289 +0,0 @@ -//----------------------------------------------------------------------------- -// File: -// WiDiType.h -// -// Description: -// WiFi-Display related information and definitions for structure. -// -//----------------------------------------------------------------------------- -#ifndef __INC_WIDI_TYPE_H -#define __INC_WIDI_TYPE_H - -#define WFD_OUI_TYPE 0x0A -#define WFD_MAX_SCAN_LIST_NUM 128 - -#define WFD_SUB_ID_LEN 1 // 1 Byte -#define WFD_SUB_LEN_LEN 2 // 2 Byte - -#define WFD_MAX_IE_CONTENT_LEN (MAX_IE_LEN - SIZE_EID_AND_LEN - SIZE_OUI - SIZE_OUI_TYPE) - -#define WFD_LOCAL_IP_VER 1 - - -//1 // Note: -//1 // According to the WiDi spec, all content including WFD attribute header are -//1 // aligned as "Big Endian". - - -#define WFD_SET_SUB_ID(_pId, _val) WriteH2N1BYTE(_pId, _val) -#define WFD_GET_SUB_ID(_pId) ReadH2N1BYTE(_pId) -#define WFD_SET_SUB_LEN(_pLen, _val) WriteH2N2BYTE(_pLen, _val) -#define WFD_GET_SUB_LEN(_pLen) ReadH2N2BYTE(_pLen) - - -//2 // Please check the tunneled fields are aligned as big or little endian!! -//4 // Category -#define SET_TUNNELED_FRAME_CATEGORY_CODE(_pStart, _val) WriteEF1Byte( ((UNALIGNED pu1Byte)(_pStart)), _val) -#define GET_TUNNELED_FRAME_CATEGORY_CODE(_pStart) ReadEF1Byte( (UNALIGNED pu1Byte)(_pStart) ) -//4 // OUI -#define SET_TUNNELED_FRAME_OUI(_pStart, _val) cpOUI( ((UNALIGNED pu1Byte)(_pStart)+1), _val) -#define GET_TUNNELED_FRAME_OUI(_pStart, _val) cpOUI( (UNALIGNED pu1Byte)(_val), ((UNALIGNED pu1Byte)_pStart)+1 ) -//4 //Type -#define SET_TUNNELED_FRAME_BODY_TYPE(_pStart, _val) WriteEF1Byte( ((UNALIGNED pu1Byte)(_pStart))+4, _val) -#define GET_TUNNELED_FRAME_BODY_TYPE(_pStart) ReadEF1Byte( (UNALIGNED pu1Byte)(_pStart)+4 ) - -// ===== Device Information Subelement (ID = 0) ===== -#define WFD_DEVICE_INFO_SUBIE_LEN 6 -// WFD Device Information -#define WFD_SET_DEVICE_INFO_SUBIE_DEVICE_INFO(_pStart, _val) WriteH2N2BYTE(_pStart, _val) -#define WFD_GET_DEVICE_INFO_SUBIE_DEVICE_INFO(_pStart) ReadH2N2BYTE(_pStart) -// Session Management Control Port -#define WFD_SET_DEVICE_INFO_SUBIE_CONTROL_PORT(_pStart, _val) WriteH2N2BYTE((UNALIGNED pu1Byte)(_pStart) + 2, _val) -#define WFD_GET_DEVICE_INFO_SUBIE_CONTROL_PORT(_pStart) ReadH2N2BYTE((UNALIGNED pu1Byte)(_pStart) + 2) -// WFD Device Maximum Throughput -#define WFD_SET_DEVICE_INFO_SUBIE_MAX_TP(_pStart, _val) WriteH2N2BYTE((UNALIGNED pu1Byte)(_pStart) + 4, _val) -#define WFD_GET_DEVICE_INFO_SUBIE_MAX_TP(_pStart) ReadH2N2BYTE((UNALIGNED pu1Byte)(_pStart) + 4) - -// ===== Associated BSSID (ID = 1) ===== -#define WFD_ASSOC_BSSID_SUBIE_LEN 6 -#define WFD_SET_ASSOC_BSSID_SUBIE_BSSID(_pStart, _Bssid) \ - PlatformMoveMemory((UNALIGNED pu1Byte)(_pStart), _Bssid, 6) -#define WFD_GET_ASSOC_BSSID_SUBIE_BSSID(_pStart) ((UNALIGNED pu1Byte)(_pStart)) - - -// ===== Coupled Sink Information Subelement (ID = 6) ===== -#define WFD_COUPLED_SINK_SUBIE_LEN 7 -// Coupled Sink Status -#define WFD_SET_COUPLED_SINK_SUBIE_STATUS(_pStart, _val) WriteH2N1BYTE(_pStart, _val) -#define WFD_GET_COUPLED_SINK_SUBIE_STATUS(_pStart) ReadH2N1BYTE(_pStart) -// Coupled Sink Mac Address -#define WFD_SET_COUPLED_SINK_SUBIE_SINK_ADDR(_pStart, _Addr) \ - PlatformMoveMemory((UNALIGNED pu1Byte)(_pStart) + 1, _Addr, 6) -#define WFD_GET_COUPLED_SINK_SUBIE_SINK_ADDR(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 1) - -// ===== Extended Capabilities Subelement (ID =7) ===== -#define WFD_EXT_CAP_SUBIE_LEN 2 -// Extended Capabilities -#define WFD_SET_EXT_CAP_SUBIE_CAP(_pStart, _val) WriteH2N2BYTE(_pStart, _val) -#define WFD_GET_EXT_CAP_SUBIE_CAP(_pStart) ReadH2N2BYTE(_pStart) - -// ===== Local IP Address Subelement (ID = 8) ===== -#define WFD_LOCAL_IP_SUBIE_LEN 5 -#define WFD_LOCAL_IP_IPV4_VER 1 -// Local IP Address Version -#define WFD_SET_LOCAL_IP_SUBIE_VER(_pStart, _val) WriteH2N1BYTE(_pStart, _val) -#define WFD_GET_LOCAL_IP_SUBIE_VER(_pStart) ReadH2N1BYTE(_pStart) -// Local IP -#define WFD_SET_LOCAL_IP_SUBIE_IP(_pStart, _pIp) \ - PlatformMoveMemory((UNALIGNED pu1Byte)(_pStart) + 1, _pIp, 4) -#define WFD_GET_LOCAL_IP_SUBIE_IP(_pStart) ((UNALIGNED pu1Byte)(_pStart) + 1) - - -// ===== Session Information Subelement (ID = 9) ===== -#define WFD_DEVICE_INFO_DESC_SIZE 24 -// Length of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_LEN(_pStart, _idx, _val) WriteH2N1BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx), _val) -#define WFD_GET_SESSION_INFO_SUBIE_LEN(_pStart, _idx) ReadH2N1BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx)) -// Device Address of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_DEV_ADDR(_pStart, _idx, _Addr) \ - PlatformMoveMemory((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 1,_Addr, 6) -#define WFD_GET_SESSION_INFO_SUBIE_DEV_ADDR(_pStart, _idx) ((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 1) -// Associated BSSID of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_ASSOC_BSSID(_pStart, _idx, _Addr) \ - PlatformMoveMemory((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 7,_Addr, 6) -#define WFD_GET_SESSION_INFO_SUBIE_ASSOC_BSSID(_pStart, _idx) ((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 7) -// Device Information of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_DEV_INFO(_pStart, _idx, _val) WriteH2N2BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 13, _val) -#define WFD_GET_SESSION_INFO_SUBIE_DEV_INFO(_pStart, _idx) ReadH2N2BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 13) -// Max Throughput of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_MAX_TP(_pStart, _idx, _val) WriteH2N2BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 15, _val) -#define WFD_GET_SESSION_INFO_SUBIE_MAX_TP(_pStart, _idx) ReadH2N2BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 15) -// Coupled Sink Status of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_COUPLED_STATUS(_pStart, _idx, _val) WriteH2N1BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 17, _val) -#define WFD_GET_SESSION_INFO_SUBIE_COUPLED_STATUS(_pStart, _idx) ReadH2N1BYTE((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 17) -// Coupled Sink Mac Address of the WFD Device Info Descriptor -#define WFD_SET_SESSION_INFO_SUBIE_COUPLED_ADDR(_pStart, _idx, _Addr) \ - PlatformMoveMemory((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 18,_Addr, 6) -#define WFD_GET_SESSION_INFO_SUBIE_COUPLED_ADDR(_pStart, _idx) ((UNALIGNED pu1Byte)_pStart + (WFD_DEVICE_INFO_DESC_SIZE * _idx) + 18) - -// ===== Alternative MAC Information Subelement (ID = 10) ===== -#define WFD_ALTERNATIVE_MAC_SUBIE_LEN 6 -// Coupled Sink Mac Address -#define WFD_SET_ALT_MAC_SUBIE_MAC(_pStart, _Addr) \ - PlatformMoveMemory((UNALIGNED pu1Byte)(_pStart), _Addr, 6) -#define WFD_GET_ALT_MAC_SUBIE_MAC(_pStart) ((UNALIGNED pu1Byte)(_pStart)) - -typedef enum _WFD_SUB_ID{ - WFD_SUB_ID_DEVICE_INFORMATION =0, - WFD_SUB_ID_ASSOC_BSSID =1, - WFD_SUB_ID_AUDIO_FORMATS =2, - WFD_SUB_ID_VIDEO_FORMATS =3, - WFD_SUB_ID_3D_VIDEO_FORMATS =4, - WFD_SUB_ID_CONTENT_PROTECTION =5, - WFD_SUB_ID_COUPLED_SINK_INFORMATION =6, - WFD_SUB_ID_EXTENDED_CAPABILITY =7, - WFD_SUB_ID_LOCAL_IP =8, - WFD_SUB_ID_SESSION_INFORMATION =9, - WFD_SUB_ID_ALTERNATIVE_MAC =10, - // ===== Insert new Sub ID above this line ===== - WFD_SUB_ID_UNKNOW = 0xFFFFFFFF -} WFD_SUB_ID, *PWFD_SUB_ID; - -// WFD Devuce Information Bit Map -// Bit 0 ~ 1 -typedef enum _WFD_DEV_TYPE -{ - WFD_DEV_TYPE_SOURCE = 0, - WFD_DEV_TYPE_PRIMARY_SINK = 1, - WFD_DEV_TYPE_SECONDARY_SINK = 2, - WFD_DEV_TYPE_SOURCE_PRIMARY_SINK = 3, -}WFD_DEV_TYPE, *PWFD_DEV_TYPE; -#define WFD_MASK_DEV_TYPE_MAP(_val) ((u2Byte)(_val) & 0x03) -// Bit 2 -#define WFD_DEV_SOURCE_COUPLED_SINK_SUPPORT BIT2 -// Bit 3 -#define WFD_DEV_SINK_COUPLED_SINK_SUPPORT BIT3 -// Bit 4 ~ 5 -#define WFD_DEV_SESSION_AVAILABILITY BIT4 -// Bit 6 -#define WFD_DEV_WSD_SUPPORT BIT6 -// Bit 7 -#define WFD_DEV_PC_TDLS BIT7 -// Bit 8 -#define WFD_DEV_CONTENT_PROTECTION BIT8 -// Bit 9 -#define WFD_DEV_TIME_SYNC BIT9 -// Bit 10 -#define WFD_DEV_PRIMARY_SINK_AUDIO_UN_SUPPORT BIT10 -// Bit 11 -#define WFD_DEV_SOURCE_AUDIO_ONLY_SUPPORT BIT11 -// Bit 12 -#define WFD_DEV_TDLS_PERSISTENT_GROUP BIT12 -// Bit 13 -#define WFD_DEV_TDLS_PERSISTENT_RE_INVOKE BIT13 - -// Get device type in type WFD_DEV_TYPE -#define WFD_GET_DEV_TYPE(_pWfdInfo) (WFD_DEV_TYPE)(WFD_MASK_DEV_TYPE_MAP((_pWfdInfo)->deviceInfo)) -#define WFD_SET_DEV_TYPE(_pWfdInfo, _devType) \ -{ \ - CLEAR_FLAG((_pWfdInfo)->deviceInfo, 0x3); \ - SET_FLAG((_pWfdInfo)->deviceInfo, WFD_MASK_DEV_TYPE_MAP(_devType)); \ -} - -// WFD Coupled Sink Information Status Bitmap -// Bit 0 ~ 1 -#define WFD_COUPLED_STATUS_AVAILABLE 0 -#define WFD_COUPLED_STATUS_COUPLED BIT1 -#define WFD_COUPLED_STATUS_TEARDOWN BIT2 - -// WFD Extended Capabilitied Bitmap -#define WFD_EXT_CAP_UIBC_SUPPORT BIT0 -#define WFD_EXT_CAP_I2C_SUPPORT BIT1 -#define WFD_EXT_CAP_PRE_FERED_DISPLAY_SUPPORT BIT2 -#define WFD_EXT_CAP_STANDBY_RESUME_SUPPORT BIT3 -#define WFD_EXT_CAP_TDLS_PERSISTENT_SUPPORT BIT4 -#define WFD_EXT_CAP_TDLS_BSSID_PERSISTENT_SUPPORT BIT5 - -#define WFD_DESC_SRC u1Byte -#define WFD_DESC_SRC_PROBE_RSP (WFD_DESC_SRC)(BIT0) // From probe response (Device or GO) -#define WFD_DESC_SRC_BEACON (WFD_DESC_SRC)(BIT1) // From beacon (GO) -#define WFD_DESC_SRC_TUNNELED (WFD_DESC_SRC)(BIT2) // From TDLS tunneled discovery (Client with TDLS) -#define WFD_DESC_SRC_SESSION_IE (WFD_DESC_SRC)(BIT3) // From Client -#define WFD_DESC_SRC_P2P_NEG (WFD_DESC_SRC)(BIT4) // From P2P handshake packet -#define WFD_DESC_SRC_ASSOC (WFD_DESC_SRC)(BIT5) // From association packet - -#define WFD_INFO_DEVICE_TYPE (u4Byte)0x00000001 - -#pragma pack(1) -typedef struct _WFD_DEVICE_INFO_DESC -{ - u1Byte deviceAddr[6]; // The mac address of this device - u1Byte owerDevAddr[6]; // The AP address for the client (srcType must be WFD_DESC_SRC_SESSION_IE) - WFD_DESC_SRC srcType; // The type which this desc got from. This field shall be set as WFD_DESC_SRC_SESSION_IE for client descriptors in GO. - u1Byte assocBSSID[6]; // The associated BSSID - u2Byte deviceInfo; // Device Information - u2Byte controlPort; // Session Control Port - u2Byte maxTP; // Maximum average throughput in multiples of 1 Mbps - u1Byte coupledSinkStatus; - u1Byte coupledSinkAddr[6]; // Mac Address of coupled sink - u2Byte extCap; // Extended capabilities - u1Byte ipAddress[4]; // IPv4 address - u1Byte altMacAddr[6]; // Alternative MAC Addr, this field are all 0 if invalid. -}WFD_DEVICE_INFO_DESC, *PWFD_DEVICE_INFO_DESC; - -typedef struct _WFD_DESC_LIST -{ - u4Byte descNum; // Number of descriptor - WFD_DEVICE_INFO_DESC devDesc[1]; // Descriptor array in scan list. -}WFD_DESC_LIST, *PWFD_DESC_LIST; - -#pragma pack() - -typedef struct _WFD_CLIENT_ENTRY_INFO -{ - BOOLEAN bWfdClient; // If TRUE, it is a WFD client. - PVOID pEntry; // The entry of RT_WLAN_STA. - WFD_DEVICE_INFO_DESC deviceDesc; // WFD_DEVICE_INFO_DESC -}WFD_CLIENT_ENTRY_INFO, *PWFD_CLIENT_ENTRY_INFO; - -#define WFD_DEFAULT_CONTROL_PORT 8554 -#define WFD_DEFAULT_MAX_TH 300 // Mbps - -// WiFi Display information context. -typedef struct _WFD_INFO -{ - u4Byte curVer; // The current WFD version. - BOOLEAN bWfdEnable; - RT_SPIN_LOCK wfdSpinLock; - u2Byte deviceInfo; // WFD Device Information field - u2Byte controlPort; // Session Management Control Port - u2Byte maxTP; // WFD DEvice Maximum Throughput - u1Byte coupledSinkStatus; // Coupled Sink Status - u1Byte coupledSinkAddr[6]; // Mac Address of Coupled Sink - u2Byte extCapability; // Extended Capabilities - u4Byte scanListCnt; // Number of descriptor of scanList. - PWFD_DEVICE_INFO_DESC pScanList; // The descriptor list of WFD scan. - PWFD_CLIENT_ENTRY_INFO pClientList; // The descriptor list of WFD client when we are GO. - u1Byte ipv4Addr[4]; // IP address. -} WFD_INFO, *PWFD_INFO; - -// ================ WFD Version ====================================== - -// The current support version of WFD -#define WFD_MIN_SUPPORT_VER 2 -#define WFD_MAX_SUPPORT_VER 2 - -#define WFD_OBJECT_VERSION_DONT_CARE 0 -#define WFD_OBJECT_VERSION_INVLAID 0xFFFFFFFF - -// ================ WFD_REQ_ID ====================================== -// -// WFD_REQ_ID_XXX, - -#define WFD_REQ_ID u4Byte -#define WFD_REQ_ID_MIN_SUPPORT_VERSION (WFD_REQ_ID)0x00000001 -#define WFD_REQ_ID_MAX_SUPPORT_VERSION (WFD_REQ_ID)0x00000002 -#define WFD_REQ_ID_CURRENT_VERSION (WFD_REQ_ID)0x00000003 - -#define WFD_REQ_ID_WFD_MODE (WFD_REQ_ID)0x00000010 -#define WFD_REQ_ID_DEVICE_TYPE (WFD_REQ_ID)0x00000011 -#define WFD_REQ_ID_SESSION_AVAILABILITY (WFD_REQ_ID)0x00000012 -#define WFD_REQ_ID_CONTROL_PORT (WFD_REQ_ID)0x00000013 -#define WFD_REQ_ID_IPV4_ADDR (WFD_REQ_ID)0x00000014 -#define WFD_REQ_ID_SCAN_LIST (WFD_REQ_ID)0x00000015 -#define WFD_REQ_ID_PREFERED_CONNECTION (WFD_REQ_ID)0x00000016 -#define WFD_REQ_ID_HDCP_ENABLE (WFD_REQ_ID)0x00000017 - - -#define WFD_REQ_ID_UNKOWN (WFD_REQ_ID)0xFFFFFFFF -#endif // #ifndef __INC_WIDI_TYPE_H diff --git a/network/wlan/WDI/HEADER/WlanDriverEvents.h b/network/wlan/WDI/HEADER/WlanDriverEvents.h deleted file mode 100644 index e51f2249..00000000 --- a/network/wlan/WDI/HEADER/WlanDriverEvents.h +++ /dev/null @@ -1,811 +0,0 @@ -//**********************************************************************` -//* This is an include file generated by Message Compiler. *` -//* *` -//* Copyright (c) Microsoft Corporation. All Rights Reserved. *` -//**********************************************************************` -#pragma once -#include -#include -#include "evntprov.h" -// -// Initial Defs -// -#if !defined(ETW_INLINE) -#define ETW_INLINE DECLSPEC_NOINLINE __inline -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -// -// Allow Diasabling of code generation -// -#ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION -#if !defined(McGenDebug) -#define McGenDebug(a,b) -#endif - - -#if !defined(MCGEN_TRACE_CONTEXT_DEF) -#define MCGEN_TRACE_CONTEXT_DEF -typedef struct _MCGEN_TRACE_CONTEXT -{ - TRACEHANDLE RegistrationHandle; - TRACEHANDLE Logger; - ULONGLONG MatchAnyKeyword; - ULONGLONG MatchAllKeyword; - ULONG Flags; - ULONG IsEnabled; - UCHAR Level; - UCHAR Reserve; - USHORT EnableBitsCount; - PULONG EnableBitMask; - const ULONGLONG* EnableKeyWords; - const UCHAR* EnableLevel; -} MCGEN_TRACE_CONTEXT, *PMCGEN_TRACE_CONTEXT; -#endif - -#if !defined(MCGEN_LEVEL_KEYWORD_ENABLED_DEF) -#define MCGEN_LEVEL_KEYWORD_ENABLED_DEF -FORCEINLINE -BOOLEAN -McGenLevelKeywordEnabled( - _In_ PMCGEN_TRACE_CONTEXT EnableInfo, - _In_ UCHAR Level, - _In_ ULONGLONG Keyword - ) -{ - // - // Check if the event Level is lower than the level at which - // the channel is enabled. - // If the event Level is 0 or the channel is enabled at level 0, - // all levels are enabled. - // - - if ((Level <= EnableInfo->Level) || // This also covers the case of Level == 0. - (EnableInfo->Level == 0)) { - - // - // Check if Keyword is enabled - // - - if ((Keyword == (ULONGLONG)0) || - ((Keyword & EnableInfo->MatchAnyKeyword) && - ((Keyword & EnableInfo->MatchAllKeyword) == EnableInfo->MatchAllKeyword))) { - return TRUE; - } - } - - return FALSE; - -} -#endif - -#if !defined(MCGEN_EVENT_ENABLED_DEF) -#define MCGEN_EVENT_ENABLED_DEF -FORCEINLINE -BOOLEAN -McGenEventEnabled( - _In_ PMCGEN_TRACE_CONTEXT EnableInfo, - _In_ PCEVENT_DESCRIPTOR EventDescriptor - ) -{ - - return McGenLevelKeywordEnabled(EnableInfo, EventDescriptor->Level, EventDescriptor->Keyword); - -} -#endif - - -// -// EnableCheckMacro -// -#ifndef MCGEN_ENABLE_CHECK -#define MCGEN_ENABLE_CHECK(Context, Descriptor) (Context.IsEnabled && McGenEventEnabled(&Context, &Descriptor)) -#endif - -#if !defined(MCGEN_CONTROL_CALLBACK) -#define MCGEN_CONTROL_CALLBACK - -DECLSPEC_NOINLINE __inline -VOID -__stdcall -McGenControlCallbackV2( - _In_ LPCGUID SourceId, - _In_ ULONG ControlCode, - _In_ UCHAR Level, - _In_ ULONGLONG MatchAnyKeyword, - _In_ ULONGLONG MatchAllKeyword, - _In_opt_ PEVENT_FILTER_DESCRIPTOR FilterData, - _Inout_opt_ PVOID CallbackContext - ) -/*++ - -Routine Description: - - This is the notification callback for Vista. - -Arguments: - - SourceId - The GUID that identifies the session that enabled the provider. - - ControlCode - The parameter indicates whether the provider - is being enabled or disabled. - - Level - The level at which the event is enabled. - - MatchAnyKeyword - The bitmask of keywords that the provider uses to - determine the category of events that it writes. - - MatchAllKeyword - This bitmask additionally restricts the category - of events that the provider writes. - - FilterData - The provider-defined data. - - CallbackContext - The context of the callback that is defined when the provider - called EtwRegister to register itself. - -Remarks: - - ETW calls this function to notify provider of enable/disable - ---*/ -{ - PMCGEN_TRACE_CONTEXT Ctx = (PMCGEN_TRACE_CONTEXT)CallbackContext; - ULONG Ix; -#ifndef MCGEN_PRIVATE_ENABLE_CALLBACK_V2 - UNREFERENCED_PARAMETER(SourceId); - UNREFERENCED_PARAMETER(FilterData); -#endif - - if (Ctx == NULL) { - return; - } - - switch (ControlCode) { - - case EVENT_CONTROL_CODE_ENABLE_PROVIDER: - Ctx->Level = Level; - Ctx->MatchAnyKeyword = MatchAnyKeyword; - Ctx->MatchAllKeyword = MatchAllKeyword; - Ctx->IsEnabled = EVENT_CONTROL_CODE_ENABLE_PROVIDER; - - for (Ix = 0; Ix < Ctx->EnableBitsCount; Ix += 1) { - if (McGenLevelKeywordEnabled(Ctx, Ctx->EnableLevel[Ix], Ctx->EnableKeyWords[Ix]) != FALSE) { - Ctx->EnableBitMask[Ix >> 5] |= (1 << (Ix % 32)); - } else { - Ctx->EnableBitMask[Ix >> 5] &= ~(1 << (Ix % 32)); - } - } - break; - - case EVENT_CONTROL_CODE_DISABLE_PROVIDER: - Ctx->IsEnabled = EVENT_CONTROL_CODE_DISABLE_PROVIDER; - Ctx->Level = 0; - Ctx->MatchAnyKeyword = 0; - Ctx->MatchAllKeyword = 0; - if (Ctx->EnableBitsCount > 0) { - RtlZeroMemory(Ctx->EnableBitMask, (((Ctx->EnableBitsCount - 1) / 32) + 1) * sizeof(ULONG)); - } - break; - - default: - break; - } - -#ifdef MCGEN_PRIVATE_ENABLE_CALLBACK_V2 - // - // Call user defined callback - // - MCGEN_PRIVATE_ENABLE_CALLBACK_V2( - SourceId, - ControlCode, - Level, - MatchAnyKeyword, - MatchAllKeyword, - FilterData, - CallbackContext - ); -#endif - - return; -} - -#endif -#endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION -//+ -// Provider Microsoft-Windows-WLAN-Driver Event Count 7 -//+ -EXTERN_C __declspec(selectany) const GUID MICROSOFT_WINDOWS_WLAN_DRIVER_PROVIDER_GUID = {0xdaa6a96b, 0xf3e7, 0x4d4d, {0xa0, 0xd6, 0x31, 0xa3, 0x50, 0xe6, 0xa4, 0x45}}; - -// -// Channel -// -#define MICROSOFT_WINDOWS_WLAN_DRIVER_CHANNEL_ANALYTIC 0x10 - -// -// Opcodes -// -#define MICROSOFT_WINDOWS_WLAN_DRIVER_OPCODE_DATATRANSMIT 0xb -#define MICROSOFT_WINDOWS_WLAN_DRIVER_OPCODE_DATARECEIVE 0xc - -// -// Tasks -// -#define MICROSOFT_WINDOWS_WLAN_DRIVER_TASK_DATATRANSMITRECEIVE 0x1 -// -// Keyword -// -#define MICROSOFT_WINDOWS_WLAN_DRIVER_KEYWORD_DATAPATH 0x1 - -// -// Event Descriptors -// -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR TxFrameReceivedFromOS = {0x0, 0x1, 0x10, 0x4, 0xb, 0x1, 0x8000000000000001}; -#define TxFrameReceivedFromOS_value 0x0 -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR TxSubmissionToNIC = {0x1, 0x1, 0x10, 0x4, 0xb, 0x1, 0x8000000000000001}; -#define TxSubmissionToNIC_value 0x1 -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR TxCompletedByNIC = {0x2, 0x1, 0x10, 0x4, 0xb, 0x1, 0x8000000000000001}; -#define TxCompletedByNIC_value 0x2 -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR TxCompletionToOS = {0x3, 0x1, 0x10, 0x4, 0xb, 0x1, 0x8000000000000001}; -#define TxCompletionToOS_value 0x3 -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR RxIndicationFromNIC = {0x4, 0x1, 0x10, 0x4, 0xc, 0x1, 0x8000000000000001}; -#define RxIndicationFromNIC_value 0x4 -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR RxIndicationToOS = {0x5, 0x1, 0x10, 0x4, 0xc, 0x1, 0x8000000000000001}; -#define RxIndicationToOS_value 0x5 -EXTERN_C __declspec(selectany) const EVENT_DESCRIPTOR RxReturnToDriver = {0x6, 0x1, 0x10, 0x4, 0xc, 0x1, 0x8000000000000001}; -#define RxReturnToDriver_value 0x6 - -// -// Note on Generate Code from Manifest Windows Vista and above -// -//Structures : are handled as a size and pointer pairs. The macro for the event will have an extra -//parameter for the size in bytes of the structure. Make sure that your structures have no extra padding. -// -//Strings: There are several cases that can be described in the manifest. For array of variable length -//strings, the generated code will take the count of characters for the whole array as an input parameter. -// -//SID No support for array of SIDs, the macro will take a pointer to the SID and use appropriate -//GetLengthSid function to get the length. -// - -// -// Allow Diasabling of code generation -// -#ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION - -// -// Globals -// - - -// -// Event Enablement Bits -// - -EXTERN_C __declspec(selectany) DECLSPEC_CACHEALIGN ULONG Microsoft_Windows_WLAN_DriverEnableBits[1]; -EXTERN_C __declspec(selectany) const ULONGLONG Microsoft_Windows_WLAN_DriverKeywords[1] = {0x8000000000000001}; -EXTERN_C __declspec(selectany) const UCHAR Microsoft_Windows_WLAN_DriverLevels[1] = {4}; -EXTERN_C __declspec(selectany) MCGEN_TRACE_CONTEXT MICROSOFT_WINDOWS_WLAN_DRIVER_PROVIDER_GUID_Context = {0, 0, 0, 0, 0, 0, 0, 0, 1, Microsoft_Windows_WLAN_DriverEnableBits, Microsoft_Windows_WLAN_DriverKeywords, Microsoft_Windows_WLAN_DriverLevels}; - -EXTERN_C __declspec(selectany) REGHANDLE Microsoft_Windows_WLAN_DriverHandle = (REGHANDLE)0; - -#if !defined(McGenEventRegisterUnregister) -#define McGenEventRegisterUnregister -DECLSPEC_NOINLINE __inline -ULONG __stdcall -McGenEventRegister( - _In_ LPCGUID ProviderId, - _In_opt_ PETWENABLECALLBACK EnableCallback, - _In_opt_ PVOID CallbackContext, - _Inout_ PREGHANDLE RegHandle - ) -/*++ - -Routine Description: - - This function register the provider with ETW KERNEL mode. - -Arguments: - ProviderId - Provider Id to be register with ETW. - - EnableCallback - Callback to be used. - - CallbackContext - Context for this provider. - - RegHandle - Pointer to Registration handle. - -Remarks: - - If the handle != NULL will return ERROR_SUCCESS - ---*/ -{ - ULONG Error; - - - if (*RegHandle) { - // - // already registered - // - return STATUS_SUCCESS; - } - - Error = EtwRegister( ProviderId, EnableCallback, CallbackContext, RegHandle); - - return Error; -} - - -DECLSPEC_NOINLINE __inline -ULONG __stdcall -McGenEventUnregister(_Inout_ PREGHANDLE RegHandle) -/*++ - -Routine Description: - - Unregister from ETW KERNEL mode - -Arguments: - RegHandle this is the pointer to the provider context -Remarks: - If Provider has not register RegHandle = NULL, - return ERROR_SUCCESS ---*/ -{ - ULONG Error; - - - if(!(*RegHandle)) { - // - // Provider has not registerd - // - return STATUS_SUCCESS; - } - - Error = EtwUnregister(*RegHandle); - *RegHandle = (REGHANDLE)0; - - return Error; -} -#endif - -// -// Tx Events -// -#define ETW_TX_FRAME_RECV_FROM_OS_EN BIT0 -#define ETW_TX_SUBMIT_TO_NIC_EN BIT1 -#define ETW_TX_COMPLETE_BY_NIC_EN BIT2 -#define ETW_TX_COMPLETE_TO_OS BIT3 - -// -// Rx Events -// -#define ETW_RX_INDIC_FROM_NIC BIT4 -#define ETW_RX_INDIC_TO_OS BIT5 -#define ETW_RX_RETURN_TO_DRV BIT6 - - -// -// Register with ETW Vista + -// -#ifndef EventRegisterMicrosoft_Windows_WLAN_Driver -#define EventRegisterMicrosoft_Windows_WLAN_Driver() McGenEventRegister(&MICROSOFT_WINDOWS_WLAN_DRIVER_PROVIDER_GUID, McGenControlCallbackV2, &MICROSOFT_WINDOWS_WLAN_DRIVER_PROVIDER_GUID_Context, &Microsoft_Windows_WLAN_DriverHandle) -#endif - -// -// UnRegister with ETW -// -#ifndef EventUnregisterMicrosoft_Windows_WLAN_Driver -#define EventUnregisterMicrosoft_Windows_WLAN_Driver() McGenEventUnregister(&Microsoft_Windows_WLAN_DriverHandle) -#endif - -// -// Enablement check macro for TxFrameReceivedFromOS -// -#define EventEnabledTxFrameReceivedFromOS() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_TX_FRAME_RECV_FROM_OS_EN) != 0) - -// -// Event Macro for TxFrameReceivedFromOS -// -#define EventWriteTxFrameReceivedFromOS(Activity, FrameUniqueID, PortNumber, TID, PeerID, PayloadLength, QueueLength, QueueState, CustomData1, CustomData2, CustomData3)\ - EventEnabledTxFrameReceivedFromOS() ?\ - Template_qqcqhhtqqq(Microsoft_Windows_WLAN_DriverHandle, &TxFrameReceivedFromOS, Activity, FrameUniqueID, PortNumber, TID, PeerID, PayloadLength, QueueLength, QueueState, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -// -// Enablement check macro for TxSubmissionToNIC -// -#define EventEnabledTxSubmissionToNIC() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_TX_SUBMIT_TO_NIC_EN) != 0) - -// -// Event Macro for TxSubmissionToNIC -// -#define EventWriteTxSubmissionToNIC(Activity, FrameUniqueID, QueueLength, QueueState, Status, CustomData1, CustomData2, CustomData3)\ - EventEnabledTxSubmissionToNIC() ?\ - Template_qhtqqqq(Microsoft_Windows_WLAN_DriverHandle, &TxSubmissionToNIC, Activity, FrameUniqueID, QueueLength, QueueState, Status, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -// -// Enablement check macro for TxCompletedByNIC -// -#define EventEnabledTxCompletedByNIC() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_TX_COMPLETE_BY_NIC_EN) != 0) - -// -// Event Macro for TxCompletedByNIC -// -#define EventWriteTxCompletedByNIC(Activity, FrameUniqueID, SequenceNumber, Status, RetryCount, CustomData1, CustomData2, CustomData3)\ - EventEnabledTxCompletedByNIC() ?\ - Template_qhqhqqq(Microsoft_Windows_WLAN_DriverHandle, &TxCompletedByNIC, Activity, FrameUniqueID, SequenceNumber, Status, RetryCount, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -// -// Enablement check macro for TxCompletionToOS -// -#define EventEnabledTxCompletionToOS() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_TX_COMPLETE_TO_OS) != 0) - -// -// Event Macro for TxCompletionToOS -// -#define EventWriteTxCompletionToOS(Activity, FrameUniqueID, CustomData1, CustomData2, CustomData3)\ - EventEnabledTxCompletionToOS() ?\ - Template_qqqq(Microsoft_Windows_WLAN_DriverHandle, &TxCompletionToOS, Activity, FrameUniqueID, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -// -// Enablement check macro for RxIndicationFromNIC -// -#define EventEnabledRxIndicationFromNIC() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_RX_INDIC_FROM_NIC) != 0) - -// -// Event Macro for RxIndicationFromNIC -// -#define EventWriteRxIndicationFromNIC(Activity, FrameUniqueID, TID, PeerID, SequenceNumber, PayloadLength, QueueLength, Retransmit, Status, CustomData1, CustomData2, CustomData3)\ - EventEnabledRxIndicationFromNIC() ?\ - Template_qcqhhhtqqqq(Microsoft_Windows_WLAN_DriverHandle, &RxIndicationFromNIC, Activity, FrameUniqueID, TID, PeerID, SequenceNumber, PayloadLength, QueueLength, Retransmit, Status, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -// -// Enablement check macro for RxIndicationToOS -// -#define EventEnabledRxIndicationToOS() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_RX_INDIC_TO_OS) != 0) - -// -// Event Macro for RxIndicationToOS -// -#define EventWriteRxIndicationToOS(Activity, FrameUniqueID, PortNumber, RxBacklog, CustomData1, CustomData2, CustomData3)\ - EventEnabledRxIndicationToOS() ?\ - Template_qqhqqq(Microsoft_Windows_WLAN_DriverHandle, &RxIndicationToOS, Activity, FrameUniqueID, PortNumber, RxBacklog, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -// -// Enablement check macro for RxReturnToDriver -// -#define EventEnabledRxReturnToDriver() ((Microsoft_Windows_WLAN_DriverEnableBits[0] & ETW_RX_RETURN_TO_DRV) != 0) - -// -// Event Macro for RxReturnToDriver -// -#define EventWriteRxReturnToDriver(Activity, FrameUniqueID, QueueLength, RxBacklog, CustomData1, CustomData2, CustomData3)\ - EventEnabledRxReturnToDriver() ?\ - Template_qhhqqq(Microsoft_Windows_WLAN_DriverHandle, &RxReturnToDriver, Activity, FrameUniqueID, QueueLength, RxBacklog, CustomData1, CustomData2, CustomData3)\ - : STATUS_SUCCESS\ - -#endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION - - -// -// Allow Diasabling of code generation -// -#ifndef MCGEN_DISABLE_PROVIDER_CODE_GENERATION - -// -// Template Functions -// -// -//Template from manifest : TxFrameReceivedFromOS -// -#ifndef Template_qqcqhhtqqq_def -#define Template_qqcqhhtqqq_def -ETW_INLINE -ULONG -Template_qqcqhhtqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const unsigned int _Arg1, - _In_ const UCHAR _Arg2, - _In_ const unsigned int _Arg3, - _In_ const unsigned short _Arg4, - _In_ const unsigned short _Arg5, - _In_ const LOGICAL _Arg6, - _In_ const unsigned int _Arg7, - _In_ const unsigned int _Arg8, - _In_ const unsigned int _Arg9 - ) -{ -#define ARGUMENT_COUNT_qqcqhhtqqq 10 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qqcqhhtqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const UCHAR) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[4], &_Arg4, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[5], &_Arg5, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[6], &_Arg6, sizeof(const LOGICAL) ); - - EventDataDescCreate(&EventData[7], &_Arg7, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[8], &_Arg8, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[9], &_Arg9, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qqcqhhtqqq, EventData); -} -#endif - -// -//Template from manifest : TxSubmissionToNIC -// -#ifndef Template_qhtqqqq_def -#define Template_qhtqqqq_def -ETW_INLINE -ULONG -Template_qhtqqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const unsigned short _Arg1, - _In_ const LOGICAL _Arg2, - _In_ const unsigned int _Arg3, - _In_ const unsigned int _Arg4, - _In_ const unsigned int _Arg5, - _In_ const unsigned int _Arg6 - ) -{ -#define ARGUMENT_COUNT_qhtqqqq 7 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qhtqqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const LOGICAL) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[4], &_Arg4, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[5], &_Arg5, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[6], &_Arg6, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qhtqqqq, EventData); -} -#endif - -// -//Template from manifest : TxCompletedByNIC -// -#ifndef Template_qhqhqqq_def -#define Template_qhqhqqq_def -ETW_INLINE -ULONG -Template_qhqhqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const unsigned short _Arg1, - _In_ const unsigned int _Arg2, - _In_ const unsigned short _Arg3, - _In_ const unsigned int _Arg4, - _In_ const unsigned int _Arg5, - _In_ const unsigned int _Arg6 - ) -{ -#define ARGUMENT_COUNT_qhqhqqq 7 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qhqhqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[4], &_Arg4, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[5], &_Arg5, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[6], &_Arg6, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qhqhqqq, EventData); -} -#endif - -// -//Template from manifest : TxCompletionToOS -// -#ifndef Template_qqqq_def -#define Template_qqqq_def -ETW_INLINE -ULONG -Template_qqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const unsigned int _Arg1, - _In_ const unsigned int _Arg2, - _In_ const unsigned int _Arg3 - ) -{ -#define ARGUMENT_COUNT_qqqq 4 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qqqq, EventData); -} -#endif - -// -//Template from manifest : RxIndicationFromNIC -// -#ifndef Template_qcqhhhtqqqq_def -#define Template_qcqhhhtqqqq_def -ETW_INLINE -ULONG -Template_qcqhhhtqqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const UCHAR _Arg1, - _In_ const unsigned int _Arg2, - _In_ const unsigned short _Arg3, - _In_ const unsigned short _Arg4, - _In_ const unsigned short _Arg5, - _In_ const LOGICAL _Arg6, - _In_ const unsigned int _Arg7, - _In_ const unsigned int _Arg8, - _In_ const unsigned int _Arg9, - _In_ const unsigned int _Arg10 - ) -{ -#define ARGUMENT_COUNT_qcqhhhtqqqq 11 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qcqhhhtqqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const UCHAR) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[4], &_Arg4, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[5], &_Arg5, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[6], &_Arg6, sizeof(const LOGICAL) ); - - EventDataDescCreate(&EventData[7], &_Arg7, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[8], &_Arg8, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[9], &_Arg9, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[10], &_Arg10, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qcqhhhtqqqq, EventData); -} -#endif - -// -//Template from manifest : RxIndicationToOS -// -#ifndef Template_qqhqqq_def -#define Template_qqhqqq_def -ETW_INLINE -ULONG -Template_qqhqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const unsigned int _Arg1, - _In_ const unsigned short _Arg2, - _In_ const unsigned int _Arg3, - _In_ const unsigned int _Arg4, - _In_ const unsigned int _Arg5 - ) -{ -#define ARGUMENT_COUNT_qqhqqq 6 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qqhqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[4], &_Arg4, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[5], &_Arg5, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qqhqqq, EventData); -} -#endif - -// -//Template from manifest : RxReturnToDriver -// -#ifndef Template_qhhqqq_def -#define Template_qhhqqq_def -ETW_INLINE -ULONG -Template_qhhqqq( - _In_ REGHANDLE RegHandle, - _In_ PCEVENT_DESCRIPTOR Descriptor, - _In_opt_ LPCGUID Activity, - _In_ const unsigned int _Arg0, - _In_ const unsigned short _Arg1, - _In_ const unsigned short _Arg2, - _In_ const unsigned int _Arg3, - _In_ const unsigned int _Arg4, - _In_ const unsigned int _Arg5 - ) -{ -#define ARGUMENT_COUNT_qhhqqq 6 - - EVENT_DATA_DESCRIPTOR EventData[ARGUMENT_COUNT_qhhqqq]; - - EventDataDescCreate(&EventData[0], &_Arg0, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[1], &_Arg1, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[2], &_Arg2, sizeof(const unsigned short) ); - - EventDataDescCreate(&EventData[3], &_Arg3, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[4], &_Arg4, sizeof(const unsigned int) ); - - EventDataDescCreate(&EventData[5], &_Arg5, sizeof(const unsigned int) ); - - return EtwWrite(RegHandle, Descriptor, Activity, ARGUMENT_COUNT_qhhqqq, EventData); -} -#endif - -#endif // MCGEN_DISABLE_PROVIDER_CODE_GENERATION - -#if defined(__cplusplus) -}; -#endif - diff --git a/network/wlan/WDI/HEADER/platform-os-version.h b/network/wlan/WDI/HEADER/platform-os-version.h deleted file mode 100644 index ebdbdfbf..00000000 --- a/network/wlan/WDI/HEADER/platform-os-version.h +++ /dev/null @@ -1,2 +0,0 @@ -#define RT_PLATFORM PLATFORM_WINDOWS -#define OS_VERSION OS_WIN_10 diff --git a/network/wlan/WDI/HEADER/rtwlanwpp.h b/network/wlan/WDI/HEADER/rtwlanwpp.h deleted file mode 100644 index 0e388c3f..00000000 --- a/network/wlan/WDI/HEADER/rtwlanwpp.h +++ /dev/null @@ -1,20 +0,0 @@ - -#pragma once -#ifndef RTWLAN_WPP_H -#define RTWLAN_WPP_H - -// -// begin_wpp config -// -// USEPREFIX (FunctionIn, "%!STDPREFIX!"); -// FUNC FunctionIn(COMPID); -// USESUFFIX (FunctionIn, "--> %!FUNC!"); -// -// USEPREFIX (FunctionOut, "%!STDPREFIX!"); -// FUNC FunctionOut(COMPID); -// USESUFFIX (FunctionOut, "<-- %!FUNC!"); -// -// end_wpp -// - -#endif \ No newline at end of file diff --git a/network/wlan/WDI/LIB/Arm/hal.lib b/network/wlan/WDI/LIB/Arm/hal.lib deleted file mode 100644 index 794359a7..00000000 Binary files a/network/wlan/WDI/LIB/Arm/hal.lib and /dev/null differ diff --git a/network/wlan/WDI/LIB/Arm/rtklibcom.lib b/network/wlan/WDI/LIB/Arm/rtklibcom.lib deleted file mode 100644 index 356e3860..00000000 Binary files a/network/wlan/WDI/LIB/Arm/rtklibcom.lib and /dev/null differ diff --git a/network/wlan/WDI/LIB/x64/hal.lib b/network/wlan/WDI/LIB/x64/hal.lib deleted file mode 100644 index d6f199f9..00000000 Binary files a/network/wlan/WDI/LIB/x64/hal.lib and /dev/null differ diff --git a/network/wlan/WDI/LIB/x64/rtklibcom.lib b/network/wlan/WDI/LIB/x64/rtklibcom.lib deleted file mode 100644 index bb8a4d67..00000000 Binary files a/network/wlan/WDI/LIB/x64/rtklibcom.lib and /dev/null differ diff --git a/network/wlan/WDI/LIB/x86/hal.lib b/network/wlan/WDI/LIB/x86/hal.lib deleted file mode 100644 index 41be4e25..00000000 Binary files a/network/wlan/WDI/LIB/x86/hal.lib and /dev/null differ diff --git a/network/wlan/WDI/LIB/x86/rtklibcom.lib b/network/wlan/WDI/LIB/x86/rtklibcom.lib deleted file mode 100644 index b18054af..00000000 Binary files a/network/wlan/WDI/LIB/x86/rtklibcom.lib and /dev/null differ diff --git a/network/wlan/WDI/PLATFORM/DIRS.NDIS6 b/network/wlan/WDI/PLATFORM/DIRS.NDIS6 deleted file mode 100644 index 72d69416..00000000 --- a/network/wlan/WDI/PLATFORM/DIRS.NDIS6 +++ /dev/null @@ -1,4 +0,0 @@ -DIRS=\ - NdisComm\ - NDIS6 - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/802_11_OID.h b/network/wlan/WDI/PLATFORM/NDIS6/802_11_OID.h deleted file mode 100644 index c01bd8ac..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/802_11_OID.h +++ /dev/null @@ -1,8 +0,0 @@ - -#define OID_802_11_ADD_KEY 0x0D01011D -#define OID_802_11_REMOVE_KEY 0x0D01011E -#define OID_802_11_CAPABILITY 0x0D010122 -#define OID_802_11_PMKID 0x0D010123 -#define OID_802_11_ASSOCIATION_INFORMATION 0x0D01011F -#define OID_802_11_TEST 0x0D010120 - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/CCX_Extension.h b/network/wlan/WDI/PLATFORM/NDIS6/CCX_Extension.h deleted file mode 100644 index 9b4fdb49..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/CCX_Extension.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef _CCX_EXTENSION_H -#define _CCX_EXTENSION_H - -#define CCX_IHV_EXT_SUPPORT // CCX IHV exists and is capable to handle the ccx extension events. - -typedef struct _OCTET_STRING OCTET_STRING, *POCTET_STRING; - -//------------------------------------------------------------------------------- -// -//Define Marco here -//Edit by Mars 2008/02/21 -//------------------------------------------------------------------------------- - -//------------------------------------------------------------------------------- -// -//Declear function here -//Edit by Mars 2008/02/21 -//------------------------------------------------------------------------------- -//=========================================================================== -VOID -CcxIndicateStatusIndication ( - IN PADAPTER pAdapter, - IN u4Byte StatusCode, - IN PVOID pStatusBuffer, - IN ULONG StatusBufferSize - ); - -NDIS_STATUS -CCX_EventQuerySetInformation( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -CCX_MpEventSetInformation( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -CCX_MpEventQueryInformation( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ); - - -u4Byte -CCX_N6IndicateRxPacket( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd - ); - -u4Byte -CCX_N6IndicateTxPacket( - IN PADAPTER pAdapter, - IN PRT_TCB pTcb - ); -//=========================================================================== - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/CCX_Predef.h b/network/wlan/WDI/PLATFORM/NDIS6/CCX_Predef.h deleted file mode 100644 index 0226ef7e..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/CCX_Predef.h +++ /dev/null @@ -1,1183 +0,0 @@ -#include - -//-------------------------------------------------------------------- -// -// Here we define the predefine Parameter in ccxtype.h in Vsita CCX Header file -// -//-------------------------------------------------------------------- - -typedef unsigned char CCXBOOLEAN; -typedef signed char CCXINT8, *PCCXINT8; -typedef unsigned char CCXUINT8, *PCCXUINT8; -typedef signed short CCXINT16, *PCCXINT16; -typedef unsigned short CCXUINT16, *PCCXUINT16; -typedef signed long CCXINT32, *PCCXINT32; -typedef unsigned long CCXUINT32, *PCCXUINT32; -typedef signed __int64 CCXINT64, *PCCXINT64; -typedef unsigned __int64 CCXUINT64, *PCCXUINT64; - -typedef void CCXVOID, *PCCXVOID; -typedef void * CCXHANDLE; -typedef CCXHANDLE *PCCXHANDLE; - -typedef char CCXCHAR, *PCCXCHAR; - -typedef unsigned short CCXWCHAR; -typedef CCXWCHAR *PCCXWCHAR; -typedef const CCXWCHAR *PCCXCWSTR; - -typedef CCXUINT32 CCX_OID, *PCCX_OID; -typedef CCXINT32 CCX_ERROR, *PCCX_ERROR; - -#define CCX_802_11_MAC_ADDRESS_LENGTH 6 -typedef CCXUINT8 CCX_802_11_MAC_ADDRESS[CCX_802_11_MAC_ADDRESS_LENGTH]; - -#define CCX_802_11_SSID_LENGTH 32 -typedef struct _CCX_802_11_SSID -{ - CCXINT32 length; - CCXUINT8 ssid[CCX_802_11_SSID_LENGTH]; -} CCX_802_11_SSID, *PCCX_802_11_SSID; - -typedef CCXUINT32 CCXLANGID; - -#define CCX_MAX_COMPUTERNAME_LENGTH 31 - - -typedef struct _CCXGUID { - unsigned long d1; - unsigned short d2; - unsigned short d3; - unsigned char d4[ 8 ]; -} CCXGUID, *PCCXGUID; - -#define CCXMAXUINT32 0xFFFFFFFF -#define CCXMAXUINT16 0xFFFF -#define CCXMAXUINT8 0xFF - -#define CCX_ASSOCIATE_RELATED 0 - -//CCX OIDS -#define OID_CCX_ASSOC_INFO 0xFF000003 -#define OID_CCX_RM_REQUEST 0xFF000004 -#define OID_CCX_NEIGHBOR_LIST 0xFF000005 -#define OID_CCX_ROAM 0xFF000006 -#define OID_CCX_MFP_STATISTICS 0xFF000007 -#define OID_CCX_KEEP_ALIVE_REFRESH 0xFF000008 -#define OID_CCX_STA_STATISTICS_2 0xFF00000A -#define OID_CCX_FW_VERSION 0xFF00000B -#define OID_CCX_SERVICE_CAPABILITY 0xFF00000C -#define OID_CCX_ANTENNA_DATA 0xFF00000D -#define OID_CCX_MANUFACTURER_SERIAL_NUM 0xFF00000F -#define OID_CCX_MANUFACTURER_MODEL 0xFF000010 -#define OID_CCX_MANUFACTURER_ID 0xFF000011 -#define OID_CCX_MANUFACTURER_OUI 0xFF000012 -#define OID_CCX_ENTERPRISE_PHONE_NUM 0xFF000013 -#define OID_CCX_CELL_PHONE_NUM 0xFF000014 -#define OID_CCX_RADIO_CHANNELS 0xFF000015 -#define OID_CCX_DRIVER_VERSION 0xFF000016 -#define OID_CCX_LAST_BCN_TIME 0xFF000017 -#define OID_CCX_FRAME_LOGGING_MODE 0xFF000018 -#define OID_CCX_TSF 0xFF000019 -#define OID_CCX_DIAGNOSTICS_MODE 0xFF00001A -#define OID_CCX_NUM_TX_BUFFER 0xFF00001B - - -#define CCX_ERROR_SUCCESS 0x00000000 -#define CCX_ERROR_UNKNOWN_VERSION (0x80000000 | 1305) //ERROR_UNKNOWN_REVISION -#define CCX_ERROR_FAILED (0x80000000 | 1627) //ERROR_FUNCTION_FAILED -#define CCX_ERROR_INTERNAL (0x80000000 | 1359) //ERROR_INTERNAL_ERROR -#define CCX_ERROR_INVALID_PARAM (0x80000000 | 87) //ERROR_INVALID_PARAMETER -#define CCX_ERROR_INVALID_LENGTH (0x80000000 | 24) //ERROR_BAD_LENGTH -#define CCX_ERROR_INVALID_DATA (0x80000000 | 13) //ERROR_INVALID_DATA -#define CCX_ERROR_NOT_SUPPORTED (0x80000000 | 50) //ERROR_NOT_SUPPORTED -#define CCX_ERROR_BUFFER_TOO_SHORT (0x80000000 | 122) //ERROR_INSUFFICIENT_BUFFER -#define CCX_ERROR_TIMEOUT (0x80000000 | 258) //WAIT_TIMEOUT - -//-------------------------------------------------------------------- -// -// Here we define the predefine Parameter in ccxcommon.h in Vsita CCX Header file -// -//-------------------------------------------------------------------- - -//----------------------------------------------------------------------------- -// Common Structures -//----------------------------------------------------------------------------- -typedef struct _CCX_VERSION_INFO -{ - CCXINT32 dwVerMin; - CCXINT32 dwVerMax; -} CCX_VERSION_INFO, *PCCX_VERSION_INFO; - -typedef struct _CCX_ADAPTER_INFO -{ - CCXGUID guid; //Guid which identifies the WLAN adapter - CCXUINT8 ccxVer; //Version of CCX the adapter supports -} CCX_ADAPTER_INFO, *PCCX_ADAPTER_INFO; - -typedef enum _CCX_AUTH_RESULT -{ - CCX_AUTH_SUCCESS, - CCX_AUTH_FAILURE -} CCX_AUTH_RESULT, *PCCX_AUTH_RESULT; - - -typedef enum _CCX_ONEX_REASON -{ - CCX_ONEX_REASON_SUCCESS = 0, //Success - CCX_ONEX_REASON_PTK_HANDSHAKE_FAILED, //PTK handshake failed - CCX_ONEX_REASON_GTK_HANDSHAKE_FAILED, //GTK handshake failed - CCX_ONEX_REASON_NO_CCKMIE, //(Re)Association Response did not contain a CCKMIE - CCX_ONEX_REASON_AUTHENTICATOR_NOT_FOUND, //Authenticator sent in EAPOL message is unknow to key managment - CCX_ONEX_REASON_FAILED, //OneX failed not related to EAPOL Key messages - CCX_ONEX_REASON_HANDSHAKE_FAILED, // - CCX_ONEX_REASON_UNKNOWN_AKM, - CCX_ONEX_REASON_UNKNOWN_GROUP_CIPHER, - CCX_ONEX_REASON_UNKNOWN_PAIRWISE_CIPHER, - CCX_ONEX_REASON_EAP_KEYS_NOT_AVAILABLE -} CCX_ONEX_REASON, *PCCX_ONEX_REASON; - -typedef struct _CCX_ASSOC_INFO -{ - CCXUINT32 uSize; - CCX_802_11_MAC_ADDRESS ccxBSSID; - u2Byte Aligment; - CCXUINT32 MaxTxPower; // maximum transmit power (0 indicates no maximum) - CCXUINT32 AssocIEOffset; - CCXUINT32 AssocIELen; -} CCX_ASSOC_INFO, *PCCX_ASSOC_INFO; - - -typedef CCXUINT32 CCX_PACKET_TYPE; - -#define CCX_PACKET_TYPE_NONE 0x00000000 -#define CCX_PACKET_TYPE_802_11_FRAME 0x00001FFF //A "raw", possibly fragmented, 802.11 frame (MPDU) -#define CCX_PACKET_TYPE_802_11 0x00002200 //A complete defragmented 802.11 encapsulated DATA packet (MSDU) -#define CCX_PACKET_TYPE_EAPOL 0x01000001 //An EAPOL packet of type CCX_EAPOL_PACKET - - -typedef struct _CCX_PACKET -{ - PCCXVOID ReservedIHV; //Reserved for IHV use - CCX_PACKET_TYPE ccxPacketType; //Type of packet - CCXUINT32 Reserved; //Reserved should be 0 - CCXUINT32 uSize; //Size of packet - CCXUINT8 data[1]; //start of data -} CCX_PACKET, *PCCX_PACKET; - - -typedef enum _CCX_PHY_TYPE { - CCX_PHY_TYPE_UNKNOWN = 0, - CCX_PHY_TYPE_FHSS = 1, - CCX_PHY_TYPE_DSSS = 2, - CCX_PHY_TYPE_IRBASEBAND = 3, - CCX_PHY_TYPE_OFDM = 4, - CCX_PHY_TYPE_HRDSSS = 5, - CCX_PHY_TYPE_ERP = 6, - CCX_PHY_TYPE_END //Placeholder for the last diassoc reason -} CCX_PHY_TYPE, * PCCX_PHY_TYPE; - -#define CCX_DATA_RATE_1 0x02 -#define CCX_DATA_RATE_2 0x04 -#define CCX_DATA_RATE_3 0x06 -#define CCX_DATA_RATE_4_5 0x09 -#define CCX_DATA_RATE_5_5 0x0B -#define CCX_DATA_RATE_6 0x0C -#define CCX_DATA_RATE_9 0x12 -#define CCX_DATA_RATE_11 0x16 -#define CCX_DATA_RATE_12 0x18 -#define CCX_DATA_RATE_18 0x24 -#define CCX_DATA_RATE_22 0x2C -#define CCX_DATA_RATE_24 0x30 -#define CCX_DATA_RATE_27 0x36 -#define CCX_DATA_RATE_33 0x42 -#define CCX_DATA_RATE_36 0x48 -#define CCX_DATA_RATE_48 0x60 -#define CCX_DATA_RATE_54 0x6C - -#define CCX_RX_FLAG_PACKET_FCS_FAILURE 0x00000001 -typedef struct _RX_CHARACTERISTICS -{ - CCXUINT32 rxFlags; - CCX_PHY_TYPE phyID; - CCXUINT32 frequency; - CCXUINT16 numMPDU; - CCXUINT32 dataRate; - CCXUINT64 tsf; - CCXINT32 rssi; -} RX_CHARACTERISTICS, *PRX_CHARACTERISTICS; - - -#define CCX_TX_FLAG_MAX_RETRY 0x00000001 //Max Retried pkt -#define CCX_TX_FLAG_CANCELLED 0x00000002 //Cancelled send do to roam - resubmit pkt -#define CCX_TX_FLAG_FAILED 0x00000004 //Failed to send pkt -typedef struct _TX_CHARACTERISTICS -{ - CCXUINT32 txFlags; - CCX_PHY_TYPE phyID; - CCXUINT32 frequency; - CCXUINT16 numMPDU; - CCXUINT32 dataRate; - CCXUINT64 tsf; - CCXUINT8 retryCount; -} TX_CHARACTERISTICS, *PTX_CHARACTERISTICS; - - -typedef enum _CCX_REQUEST_TYPE -{ - CCX_REQUEST_SET, - CCX_REQUEST_QUERY, - CCX_REQUEST_METHOD, -} CCX_REQUEST_TYPE, *PCCX_REQUEST_TYPE; - - -typedef union _CCX_REQUEST_DATA -{ - struct _QUERY_INFO - { - CCX_OID Oid; - CCXUINT32 BytesWritten; - CCXUINT32 BytesNeeded; - CCXUINT32 InformationBufferLength; - CCXUINT8 InformationBuffer[1]; - } QUERY_INFO; - - struct _SET_INFO - { - CCX_OID Oid; - CCXUINT32 BytesRead; - CCXUINT32 BytesNeeded; - CCXUINT32 InformationBufferLength; - CCXUINT8 InformationBuffer[1]; - } SET_INFO; - - struct _METHOD_INFO - { - CCX_OID Oid; - CCXUINT32 BytesWritten; - CCXUINT32 BytesNeeded; - CCXUINT32 BytesRead; - CCXUINT32 InputBufferLength; - CCXUINT32 InformationBufferLength; - CCXUINT8 InformationBuffer[1]; - } METHOD_INFO; - -} CCX_REQUEST_DATA, *PCCX_REQUEST_DATA; - - -typedef struct _CCX_REQUEST -{ - CCX_REQUEST_TYPE ccxRequestType; - CCX_REQUEST_DATA ccxData; -} CCX_REQUEST, *PCCX_REQUEST; - - -typedef struct _CCX_EAP_RESULTS -{ - CCXUINT32 uMPPSendKeyLen; - PCCXUINT8 pMPPSendKey; - CCXUINT32 uMPPRecvKeyLen; - PCCXUINT8 pMPPRecvKey; -} CCX_EAP_RESULTS, *PCCX_EAP_RESULTS; - -//Why nic is roaming -typedef enum _CCX_TRANS_REASON -{ - CCX_TRANS_UNSPECIFIED, // 0 - CCX_TRANS_POOR_LINK, // 1 - CCX_TRANS_LOAD_BALANCE, // 2 - CCX_TRANS_AP_CAPACITY, // 3 - CCX_TRANS_INFRASTRUCTURE_REQUESTED, // 4 - CCX_TRANS_FIRST_ASSOCIATION, // 5 - CCX_TRANS_INTO_WLAN, // 6 - CCX_TRANS_OUT_OF_WLAN, // 7 - CCX_TRANS_BETTER_AP_FOUND, // 8 - CCX_TRANS_AP_DISASSOCIATED, // 9 - CCX_TRANS_FAILED_8021X_EAP_AUTHEN, // 10 - CCX_TRANS_FAILED_8021X_4WAY_HANDSHAKE, // 11 - CCX_TRANS_REPLAY_COUNTER_FAILURES, // 12 - CCX_TRANS_MIC_DATA_FAILURES, // 13 - CCX_TRANS_MIC_MANAGEMENT_FAILURES, // 14 - CCX_TRANS_MAX_RETRIES, // 15 - CCX_TRANS_EXCESS_NOISE, // 16 - CCX_TRANS_BROADCAST_DISASSOCIATIONS, // 17 - CCX_TRANS_BROADCAST_DEAUTHENTICATIONS, // 18 - CCX_TRANS_PREVIOUS_TRANSITION_FAILED // 19 -} CCX_TRANS_REASON, *PCCX_TRANS_REASON; - - -//result of roam -typedef enum _CCX_TRANS_RESULT -{ - CCX_TRANS_SUCCESS, - CCX_TRANS_PHY_DISABLED, - CCX_TRANS_RESET, - CCX_TRANS_CANDIDATE_LIST_EXHAUSTED - -} CCX_TRANS_RESULT, *PCCX_TRANS_RESULT; - - -//result of associtation attempt w/ AP -typedef enum _CCX_ASSOC_RESULT -{ - CCX_ASSOC_SUCCESS = 0x00000000, - CCX_ASSOC_NO_RESPONSE, - CCX_ASSOC_PHY_DISABLED, - CCX_ASSOC_RESET, - - CCX_ASSOC_FAILED = 0x00030000 -} CCX_ASSOC_RESULT, *PCCX_ASSOC_RESULT; - - -typedef enum _CCX_DISASSOC_REASON -{ - CCX_DISASSOC_REASON_BY_OS = 0x00000007U, - CCX_DISASSOC_REASON_INTERNAL_FAILURE = 0x00000009U, - CCX_DISASSOC_REASON_PEER_DEAUTH = 0x00010000U, - CCX_DISASSOC_REASON_PEER_DISASSOC = 0x00020000U, - - CCX_DISASSOC_REASON_END //Placeholder for the last diassoc reason -} CCX_DISASSOC_REASON, *PCCX_DISASSOC_REASON; - - -typedef enum _CCX_DIAG_TYPE -{ - CCX_DIAG_TYPE_START, - CCX_DIAG_TYPE_STOP, - CCX_DIAG_TYPE_END //Placeholder for the last diagnostic action type -} CCX_DIAG_TYPE, *PCCX_DIAG_TYPE; - - -typedef enum _CCX_NOTIFICATION_TYPE -{ - CCX_NOTIFICATION_TYPE_DIAG_MSG, //Diagnostic message notification - CCX_NOTIFICATION_TYPE_END //Placeholder for the last notification type -} CCX_NOTIFICATION_TYPE, *PCCX_NOTIFICATION_TYPE; - - -typedef struct _CCX_NOTIFICATION -{ - CCX_NOTIFICATION_TYPE ccxNotifyType; - CCXUINT32 uSize; - CCXUINT8 data[1]; -} CCX_NOTIFICATION, *PCCX_NOTIFICATION; - - - -//----------------------------------------------------------------------------- -// Status Indications -//----------------------------------------------------------------------------- -#define CCX_STATUS_TYPE_ASSOC_START 0x00000000 -#define CCX_STATUS_TYPE_ASSOC_COMPLETE 0x00000001 -#define CCX_STATUS_TYPE_ROAM_START 0x00000002 -#define CCX_STATUS_TYPE_ROAM_COMPLETE 0x00000003 -#define CCX_STATUS_TYPE_DISASSOCIATE 0x00000004 -#define CCX_STATUS_TYPE_ADAPTER_RESET 0x00000005 -#define CCX_STATUS_TYPE_ADAPTER_CONFIG 0x00000006 -#define CCX_STATUS_TYPE_EAP_RESULT 0x00000007 -#define CCX_STATUS_TYPE_MIC_FAILURE 0x00000008 -#define CCX_STATUS_TYPE_PMKID_LIST 0x00000009 -#define CCX_STATUS_TYPE_RM_REQUEST_COMPLETE 0x0000000A -#define CCX_STATUS_TYPE_DIAG 0x0000000B - -typedef CCXUINT32 CCX_STATUS_TYPE; - -typedef struct _CCX_STATUS_INDICATION -{ - CCX_STATUS_TYPE ccxStatusType; - PCCXVOID pStatus; -} CCX_STATUS_INDICATION, *PCCX_STATUS_INDICATION; - - -typedef struct _CCX_STATUS_ASSOC_START -{ - CCX_802_11_MAC_ADDRESS ccxBSSID; - CCX_802_11_SSID ccxSSID; - - CCXUINT32 uProbeRespOffset; - CCXUINT32 uProbeRespSize; - -} CCX_STATUS_ASSOC_START, *PCCX_STATUS_ASSOC_START; - - -typedef struct _CCX_STATUS_ASSOC_COMPLETE -{ - CCX_802_11_MAC_ADDRESS ccxBSSID; - CCX_ASSOC_RESULT ccxAssocResult; - CCXBOOLEAN reAssocReq; - CCXBOOLEAN reAssocResp; - CCXUINT32 uAssocReqOffset; - CCXUINT32 uAssocReqSize; - CCXUINT32 uAssocRespOffset; - CCXUINT32 uAssocRespSize; - CCXUINT32 uProbeRespOffset; - CCXUINT32 uProbeRespSize; -} CCX_STATUS_ASSOC_COMPLETE, *PCCX_STATUS_ASSOC_COMPLETE; - - -typedef struct _CCX_STATUS_ROAM_START -{ - CCX_TRANS_REASON ccxRoamReason; -} CCX_STATUS_ROAM_START, *PCCX_STATUS_ROAM_START; - - -typedef struct _CCX_STATUS_ROAM_COMPLETE -{ - CCX_TRANS_RESULT ccxRoamResult; -} CCX_STATUS_ROAM_COMPLETE, *PCCX_STATUS_ROAM_COMPLETE; - - -typedef struct _CCX_STATUS_DISASSOC -{ - CCX_DISASSOC_REASON uReason; - CCXUINT16 usReasonCode; -} CCX_STATUS_DISASSOC, *PCCX_STATUS_DISASSOC; - - -//typedef struct _CCX_STATUS_ADAPTER_RESET -//{ -//} CCX_STATUS_ADAPTER_RESET, *PCCX_STATUS_ADAPTER_RESET; - - -typedef CCXUINT32 CCX_STATUS_ADAPTER_RESET, *PCCX_STATUS_ADAPTER_RESET; - -typedef struct _CCX_STATUS_ADAPTER_CONFIG -{ - PCCXCWSTR pszXmlProfileSecurity; - PCCXCWSTR pszXmlProfileConnectivity; -} CCX_STATUS_ADAPTER_CONFIG, *PCCX_STATUS_ADAPTER_CONFIG; - - -typedef struct _CCX_STATUS_EAP_AUTHENTICATED -{ - CCX_802_11_MAC_ADDRESS ccxBSSID; - CCX_EAP_RESULTS ccxEapKeys; - -} CCX_STATUS_EAP_AUTHENTICATED, *PCCX_STATUS_EAP_AUTHENTICATED; - - -typedef struct _CCX_STATUS_PMKID_LIST -{ - CCXUINT32 uPMKIDListSize; - CCXUINT32 uPMKIDListOffset; -} CCX_STATUS_PMKID_LIST, *PCCX_STATUS_PMKID_LIST; - - -typedef struct _CCX_STATUS_MIC_FAILURE -{ - CCXBOOLEAN bDefaultKeyFailure; - CCXUINT32 nKeyIndex; - CCX_802_11_MAC_ADDRESS ccxBSSID; -} CCX_STATUS_MIC_FAILURE, *PCCX_STATUS_MIC_FAILURE; - - -typedef struct _CCX_STATUS_DIAG_DATA -{ - CCX_DIAG_TYPE ccxDiagType; - PCCXVOID pData; -} CCX_STATUS_DIAG_DATA, *PCCX_STATUS_DIAG_DATA; - -//-------------------------------------------------------------------- -// -// Here we define the predefine Parameter in ccxRM.h in Vsita CCX Header file -// -//-------------------------------------------------------------------- -// -// Measurement report mode field bit definitions. -// -typedef enum _CCX_RM_RESULT { - CCX_RM_RESULT_ACCEPTED = 0, - CCX_RM_RESULT_INCAPABLE, - CCX_RM_RESULT_REFUSED -} CCX_RM_RESULT, *PCCX_RM_RESULT; - -// -// Measurement type definitions (used for both requests and reports). -// -typedef enum _CCX_RM_TYPE { - CCX_RM_TYPE_CHANNEL_LOAD = 1, - CCX_RM_TYPE_NOISE_HISTOGRAM, - CCX_RM_TYPE_BEACON, - CCX_RM_TYPE_FRAME -} CCX_RM_TYPE, *PCCX_RM_TYPE; - -// -// Scan mode definitions for beacon request element -// -typedef enum _CCX_RM_SCAN_MODE { - CCX_RM_MODE_PASSIVE = 0, - CCX_RM_MODE_ACTIVE, -} CCX_RM_SCAN_MODE, *PCCX_RM_SCAN_MODE; - -//------------------------------------------------------------------------------ -// List of RM request passed by CCX Service Library to IHV via OID_CCX_RM_REQUEST -// The list will contain one or more RM requests defined below -//------------------------------------------------------------------------------ -typedef struct _CCX_RM_REQUEST { - CCXUINT16 NumRequests; - CCXUINT8 RequestElements[1]; // one or more requests -} CCX_RM_REQUEST, *PCCX_RM_REQUEST; - -//------------------------------------------------------------------------------ -// Header struct for RM request -//------------------------------------------------------------------------------ -typedef struct _CCX_RM_REQ_IE_HDR { - CCXUINT16 Token; - CCX_RM_TYPE Type; -} CCX_RM_REQ_IE_HDR, *PCCX_RM_REQ_IE_HDR; - -//------------------------------------------------------------------------------ -// The RM requests -//------------------------------------------------------------------------------ -typedef struct _CCX_RM_CCA_REQ_IE { - CCX_RM_REQ_IE_HDR Header; // type 1 - CCXUINT8 Channel; - CCXUINT16 Duration; -} CCX_RM_CCA_REQ_IE, *PCCX_RM_CCA_REQ_IE; - -typedef struct _CCX_RM_RPI_REQ_IE { - CCX_RM_REQ_IE_HDR Header; // type 2 - CCXUINT8 Channel; - CCXUINT16 Duration; -} CCX_RM_RPI_REQ_IE, *PCCX_RM_RPI_REQ_IE; - -typedef struct _CCX_RM_BEACON_REQ_IE { - CCX_RM_REQ_IE_HDR Header; // type 3 - CCXUINT8 Channel; - CCX_RM_SCAN_MODE ScanMode; - CCXUINT16 Duration; -} CCX_RM_BEACON_REQ_IE, *PCCX_RM_BEACON_REQ_IE; - -typedef struct _CCX_RM_FRAME_REQ_IE { - CCX_RM_REQ_IE_HDR Header; // type 4 - CCXUINT8 Channel; - CCXUINT16 Duration; - CCXUINT8 NumBSSIDs; - CCX_802_11_MAC_ADDRESS BSSID[1]; -} CCX_RM_FRAME_REQ_IE, *PCCX_RM_FRAME_REQ_IE; - -//------------------------------------------------------------------------------ -// RM report sent by IHV Service to CCX Service Library in response to one or -// more RM requests. -//------------------------------------------------------------------------------ -typedef struct _CCX_RM_REPORT { - CCXUINT16 NumReports; - CCXUINT8 ReportElements[1]; // one or more reports -} CCX_RM_REPORT, *PCCX_RM_REPORT; - -//------------------------------------------------------------------------------ -// Header struct for RM Report -//------------------------------------------------------------------------------ -typedef struct _CCX_RM_RPT_IE_HDR { - CCX_RM_RESULT Result; - CCXUINT16 Token; - CCX_RM_TYPE Type; -} CCX_RM_RPT_IE_HDR, *PCCX_RM_RPT_IE_HDR; - -//------------------------------------------------------------------------------ -// The RM Reports -//------------------------------------------------------------------------------ -typedef struct _CCX_RM_CCA_RPT_IE { - CCX_RM_RPT_IE_HDR Header; // type 1 - CCXUINT16 Duration; - CCXUINT8 BusyFraction; -} CCX_RM_CCA_RPT_IE, *PCCX_RM_CCA_RPT_IE; - -typedef struct _CCX_RM_RPI_RPT_IE { - CCX_RM_RPT_IE_HDR Header; // type 2 - CCXUINT16 Duration; - CCXUINT8 RPI[8]; -} CCX_RM_RPI_RPT_IE, *PCCX_RM_RPI_RPT_IE; - -typedef struct _CCX_RM_BEACON_RPT_IE { - CCX_RM_RPT_IE_HDR Header; // type 3 - CCXUINT16 Duration; -} CCX_RM_BEACON_RPT_IE, *PCCX_RM_BEACON_RPT_IE; - -// -// Frame report data -// -typedef struct _CCX_RM_FRAME_RPT_QUAD { - CCX_802_11_MAC_ADDRESS SA; - CCX_802_11_MAC_ADDRESS BSSID; - CCXINT8 RSSI; - CCXUINT8 NumFrames; -} CCX_RM_FRAME_RPT_QUAD, *PCCX_RM_FRAME_RPT_QUAD; - -typedef struct _CCX_RM_FRAME_RPT_IE { - CCX_RM_RPT_IE_HDR Header; // type 4 - CCXUINT16 Duration; - CCXUINT32 NumSTAs; - CCX_RM_FRAME_RPT_QUAD QuadList[1]; -} CCX_RM_FRAME_RPT_IE, *PCCX_RM_FRAME_RPT_IE; - - -// -// structure used with OID_CCX_STA_STATISTICS_2 OID -// -typedef struct _CCX_STA_STATS_GRP_2 { - CCXUINT32 RSNAStatsSelectedPairwiseCipher; -//TKIP Statistics - CCXUINT32 RSNAStatsTKIPICVErrors; - CCXUINT32 RSNAStatsTKIPLocalMICFailures; - CCXUINT32 RSNAStatsTKIPReplays; - CCXUINT32 RSNAMgmtStatsTKIPICVErrors; - CCXUINT32 RSNAMgmtStatsTKIPLocalMICFailures; - CCXUINT32 RSNAMgmtStatsTKIPReplays; - CCXUINT32 RSNAMgmtStatsTKIPMHDRErrors; - CCXUINT32 RSNAMgmtStatsTKIPNoEncryptErrors; -//CCMP Statistics - CCXUINT32 RSNAStatsCCMPReplays; - CCXUINT32 RSNAStatsCCMPDecryptErrors; - CCXUINT32 RSNAMgmtStatsCCMPReplays; - CCXUINT32 RSNAMgmtStatsCCMPDecryptErrors; - CCXUINT32 RSNAMgmtStatsCCMPNoEncryptErrors; -// Broadcast Statistics - CCXUINT32 RSNAStatsBroadcastDisassociateCount; - CCXUINT32 RSNAStatsBroadcastDeauthenticateCount; - CCXUINT32 RSNAStatsBroadcastActionFrameCount; -} CCX_STA_STATS_GRP_2, *PCCX_STA_STATS_GRP_2; - -//-------------------------------------------------------------------- -// -// Here we define the predefine Parameter in ccxDiag.h in Vsita CCX Header file -// -//-------------------------------------------------------------------- -typedef struct _CCX_FRAME_LOGGING_MODE -{ - CCXBOOLEAN bEnabled; -} CCX_FRAME_LOGGING_MODE, *PCCX_FRAME_LOGGING_MODE; - -typedef enum _CCX_DIAG_MODE -{ - CCX_DIAG_MODE_OFF, - CCX_DIAG_MODE_ON -} CCX_DIAG_MODE, *PCCX_DIAG_MODE; - -typedef struct CCX_DIAG_ACTION_START -{ - PCCXCWSTR profileName; -} CCX_DIAG_ACTION_START, *PCCX_DIAG_ACTION_START; - - -typedef enum _DIAG_NOTIFICATION_ID -{ - DIAG_NOTE_SSID_INVALID = 1, - DIAG_NOTE_NETWORK_SETTING_INVALID = 2, - DIAG_NOTE_WLAN_CAP_MISMATCH = 3, - DIAG_NOTE_INCORRECT_USER_CREDENTIAL = 4, - DIAG_NOTE_CALL_SUPPORT = 5, - DIAG_NOTE_PROBLEM_RESOLVED = 6, - DIAG_NOTE_PROBLEM_UNRESOLVED = 7, - DIAG_NOTE_TRY_AGAIN_LATER = 8, - DIAG_NOTE_CORRECT_INDICATED_PROBLEM = 9, - DIAG_NOTE_NETWORK_REFUSED_TROUBLESHOOTING = 10, - DIAG_NOTE_RETRIEVING_CLIENT_REPORTS = 11, - DIAG_NOTE_RETRIEVING_CLIENT_LOGS = 12, - DIAG_NOTE_RETRIEVAL_COMPLETE = 13, - DIAG_NOTE_BEGIN_ASSOC_TEST = 14, - DIAG_NOTE_BEGIN_DHCP_TEST = 15, - DIAG_NOTE_BEGIN_GTW_PING_TEST = 16, //This needs to be verified - DIAG_NOTE_BEGIN_DNS_PING_TEST = 17, - DIAG_NOTE_BEGIN_NAME_RESOLUTION_TEST = 18, - DIAG_NOTE_BEGIN_8021X_TEST = 19, - DIAG_NOTE_PROFILE_REDIRECT = 20, - DIAG_NOTE_TEST_COMPLETE = 21, - DIAG_NOTE_TEST_PASSED = 22, - DIAG_NOTE_TEST_FAILED = 23, - DIAG_NOTE_END_DIAG_SELECT_PROFILE = 24, //We may want to comment this out as it doesn't make much sense - DIAG_NOTE_CLIENT_REFUSED_LOG_RETRIEVAL = 25, - DIAG_NOTE_CLIENT_REFUSED_CLIENT_REPORT = 26, - DIAG_NOTE_CLIENT_REFUSED_TEST = 27, - DIAG_NOTE_INVALID_IP_SETTING = 28, - DIAG_NOTE_KNOWN_NETWORK_PROBLEM = 29, - DIAG_NOTE_SCHEDULED_NETWORK_MAINTENANCE = 30, - DIAG_NOTE_WLAN_SECURITY_METHOD_INCORRECT = 31, - DIAG_NOTE_WLAN_ENCRYPTION_METHOD_INCORRECT = 32, - DIAG_NOTE_WLAN_AUTHENTICATION_METHOD_INCORRECT = 33, - - - DIAG_NOTE_CONNECT_TO_DIAG_CHANNEL_SUCCEEDED = 0x80000000, - DIAG_NOTE_FAILED_TO_CONNECT_TO_DIAG_CHANNEL, - DIAG_NOTE_FAILED_TO_RECONNECT_TO_DIAG_CHANNEL, - DIAG_NOTE_INTERNAL_ERROR, - DIAG_NOTE_DIAG_FINISHED, - DIAG_NOTE_DNS_PING_REQ_RECVD, - DIAG_NOTE_GATEWAY_REQ_RECVD, - DIAG_NOTE_DHCP_REQ_RECVD, - DIAG_NOTE_DNS_RESOLVE_REQ_RECVD, - DIAG_NOTE_ASSOC_REQ_RECVD, - DIAG_NOTE_AUTH_REQ_RECVD, - DIAG_NOTE_PERFOMING_TEST, - DIAG_NOTE_REFUSED_TEST, - DIAG_NOTE_INCAPABLE_TEST, - DIAG_NOTE_SENT_TEST_RESPONSE, - DIAG_NOTE_RECEIVED_TEST_ABORT, - DIAG_NOTE_RECEIVED_PROFILE_REDIRECT - -} DIAG_NOTIFICATION_ID; - - -typedef struct _CCX_NOTIFY_DIAG_MSG -{ - DIAG_NOTIFICATION_ID msgId; - CCXUINT32 msgLen; - CCXUINT32 msgOffset; -} CCX_NOTIFY_DIAG_MSG, *PCCX_NOTIFY_DIAG_MSG; - -//-------------------------------------------------------------------- -// -// Here we define the predefine Parameter in ccxNL.h in Vsita CCX Header file -// -//-------------------------------------------------------------------- - -// Index values for neighbor list entry subelements -// These are used to index into the subElemOffset array to retreive the -// data offsets for each subelement type. -// Note: These values do not match the subelement type values used in the -// TLV's received in the IAPP message. -typedef enum _CCX_NL_SUBELEM_INDEX -{ - CCX_NL_SUBELEM_INDEX_RF_PARAMS, - CCX_NL_SUBELEM_INDEX_TSF_INFO, - CCX_NL_SUBELEM_INDEX_ACE, - - CCX_NL_SUBELEM_INDEX_MAX -} CCX_NL_SUBELEM_INDEX, *PCCX_NL_SUBELEM_INDEX; - -// RF parameters format for neighbor list subelement -// descriptions of field values can be found in CCX V5, S51.2.5.1 -typedef struct _CCX_NL_SUBELEM_RFPARAMS -{ - CCXUINT8 minRxSignalPower; - CCXUINT8 APTxPower; - CCXUINT8 clientTxPower; - CCXUINT8 roamingHysteresis; - CCXUINT8 adaptScanThreshold; - CCXUINT8 transitionTime; -} CCX_NL_SUBELEM_RFPARAMS, *PCCX_NL_SUBELEM_RFPARAMS; - -// TSF information format for neighbor list subelement -// descriptions of field values can be found in CCX V5, S51.2.5.2 -typedef struct _CCX_NL_SUBELEM_TSFINFO -{ - CCXUINT16 TSFOffset; - CCXUINT16 beaconInterval; -} CCX_NL_SUBELEM_TSFINFO, *PCCX_NL_SUBELEM_TSFINFO; - -// ACE parameter format for neighbor list subelement -// descriptions of field values can be found in CCX V5, S51.2.5.3 -typedef struct _CCX_NL_SUBELEM_ACE -{ - CCXUINT8 localSubnetInd; - CCXUINT8 signalStrength; - CCXUINT8 signalQuality; - CCXUINT8 time; - CCXUINT8 loadFactor; -} CCX_NL_SUBELEM_ACE, *PCCX_NL_SUBELEM_ACE; - -// Neighbor list entry format. -// This is the format of the data for each entry in the neighbor list -typedef struct _CCX_NL_ELEMENT -{ - CCXUINT32 length; // overall length of element in bytes - CCX_802_11_MAC_ADDRESS BSSID; // BSSID of AP - CCXUINT8 channel; // current channel being used by AP - CCXUINT8 channelBand; // channel band being used by AP - CCX_PHY_TYPE phyType; // phy type of AP - - // subelem offsets are the offset from the start of this structure - // where the data for each subelement type is located. Each - // subelement's data is formatted in it's struct type defined - // below. If the offset for a subelement is 0, there is no - // data for that particular subelement. - CCXUINT32 subElemOffset[CCX_NL_SUBELEM_INDEX_MAX]; -} CCX_NL_ELEMENT, *PCCX_NL_ELEMENT; - -// Neighbor list -// Holds 1 or more neighbor list entries defined above -typedef struct _CCX_NEIGHBOR_LIST -{ - CCXUINT32 length; // overall length of list in bytes - CCXUINT32 numOfEntries; // number of entries in the list - CCX_NL_ELEMENT ccxElement[1]; // list elements -} CCX_NEIGHBOR_LIST, *PCCX_NEIGHBOR_LIST; - -//-------------------------------------------------------------------- -// -// Here we define the predefine Parameter in ccx_common.h in Vsita CCX Header file -// -//-------------------------------------------------------------------- - -//--------------------------------------------------------------------------- -// Custom auth algorithms -//--------------------------------------------------------------------------- -#define DOT11_AUTH_ALGO_CCKM DOT11_AUTH_ALGO_IHV_START + 0x00000001L - -//--------------------------------------------------------------------------- -// Custom cipher algorithms -//--------------------------------------------------------------------------- -#define DOT11_CIPHER_ALGO_MFPCCMP DOT11_CIPHER_ALGO_IHV_START + 0x00000001L -#define DOT11_CIPHER_ALGO_MFPTKIP DOT11_CIPHER_ALGO_IHV_START + 0x00000002L - -//--------------------------------------------------------------------------- -// Custom roaming reasons -//--------------------------------------------------------------------------- -#define DOT11_ROAMING_REASON_PEER_DEAUTHENTICATED DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED -#define DOT11_ROAMING_REASON_PEER_DISASSOCIATED DOT11_ASSOC_STATUS_PEER_DISASSOCIATED -#define DOT11_ROAMING_REASON_FAILED_8021X_EAP_AUTHEN DOT11_ROAMING_REASON_IHV_START + 0x00000001L -#define DOT11_ROAMING_REASON_MAX_RETRIES DOT11_ROAMING_REASON_IHV_START + 0x00000002L - - -//--------------------------------------------------------------------------- -// Event codes -//--------------------------------------------------------------------------- -#define CCX_EVENT_STATUS_INDICATION 0x00000001L // from driver -#define CCX_EVENT_PACKET_RECEIVED 0x00000002L // from driver -#define CCX_EVENT_PACKET_TRANSMITTED 0x00000003L // from driver -#define CCX_EVENT_OID 0x00000004L // to driver -#define CCX_EVENT_OK_TO_ASSOCIATE 0x00000005L // to driver -#define CCX_EVENT_SEND_PACKET 0x00000006L // to driver - -//--------------------------------------------------------------------------- -// TLV codes associated with event codes -//--------------------------------------------------------------------------- -#define CCX_TLV_802_11_PACKET 0x00000001L -#define CCX_TLV_802_11_FRAME 0x00000002L -#define CCX_TLV_BEACON_IHV_DATA 0x00000003L -#define CCX_TLV_RM_REPORT 0x00000004L -#define CCX_TLV_RX_CHARACTERISTICS 0x00000005L -#define CCX_TLV_TX_CHARACTERISTICS 0x00000006L -#define CCX_TLV_QUERY_DATA 0x00000007L -#define CCX_TLV_SET_DATA 0x00000008L -#define CCX_TLV_METHOD_DATA 0x00000009L -#define CCX_TLV_ADAPTER_RESET 0x0000000AL - -// These tlv codes correspond to the like named DOT_11 status indications defined by Microsoft. -// The values are identical to the Microsoft defined status indications. -#ifndef NDIS_STATUS_DOT11_SCAN_CONFIRM -#define NDIS_STATUS_DOT11_SCAN_CONFIRM 0x40030000L -#define NDIS_STATUS_DOT11_MPDU_MAX_LENGTH_CHANGED 0x40030001L -#define NDIS_STATUS_DOT11_ASSOCIATION_START 0x40030002L -#define NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION 0x40030003L -#define NDIS_STATUS_DOT11_CONNECTION_START 0x40030004L -#define NDIS_STATUS_DOT11_CONNECTION_COMPLETION 0x40030005L -#define NDIS_STATUS_DOT11_ROAMING_START 0x40030006L -#define NDIS_STATUS_DOT11_ROAMING_COMPLETION 0x40030007L -#define NDIS_STATUS_DOT11_DISASSOCIATION 0x40030008L -#define NDIS_STATUS_DOT11_TKIPMIC_FAILURE 0x40030009L -#define NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST 0x4003000AL -#define NDIS_STATUS_DOT11_PHY_STATE_CHANGED 0x4003000BL -#define NDIS_STATUS_DOT11_LINK_QUALITY 0x4003000CL -#define NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED 0x4003000DL -#define NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED 0x4003000EL -#define NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION 0x4003000FL -#endif - - -//--------------------------------------------------------------------------- -// Format of Profile Parameters structure. -//--------------------------------------------------------------------------- -typedef struct _PROFILE_PARAMS_ { -// PDOT11EXT_IHV_CONNECTIVITY_PROFILE pIhvConnProfile; - BOOL bUseMSOnex; - ULONG dot11AuthAlgorithm; - DOT11_CIPHER_ALGORITHM dot11CipherAlgorithm; - BOOL bRadioMeasEnabled; -} PROFILE_PARAMS, *PPROFILE_PARAMS; - -#pragma pack( 4 ) - -//--------------------------------------------------------------------------- -// Format of TLV in CCX_NIC_SPECIFIC_EXTENSION structure. -//--------------------------------------------------------------------------- -typedef struct _IHV_CCX_TLV { - ULONG type; // TLV type code (see defined type codes below) - ULONG length; // length of the data in value array (in bytes) - UCHAR value[1]; // data associated with the specified type code -} IHV_CCX_TLV, *PIHV_CCX_TLV; - -#pragma pack() - - -//--------------------------------------------------------------------------- -// Structure defining a count followed by array of TLV. -//--------------------------------------------------------------------------- -typedef struct _IHV_CCX_TLV_DATA { - ULONG tlvCount; // number of TLV in tlv array. - IHV_CCX_TLV tlv[1]; // variable number of variable length tlv -} IHV_CCX_TLV_DATA, *PIHV_CCX_TLV_DATA; - -//--------------------------------------------------------------------------- -// Format of CCX data passed to OID_DOT11_NIC_SPECIFIC_EXTENSION. -//--------------------------------------------------------------------------- -typedef struct _CCX_NIC_SPECIFIC_EXTENSION { - ULONG len; // length of entire structure (excluding this field) - UCHAR oui[4]; // vendor specific OUI value - ULONG event; // event code - IHV_CCX_TLV_DATA tlvData; // tlv data -} CCX_NIC_SPECIFIC_EXTENSION, *PCCX_NIC_SPECIFIC_EXTENSION; - - -//--------------------------------------------------------------------------- -// Format of CCX_EVENT_OID data when tlv is of type CCX_TLV_SET_DATA -// Note - This definition machtes the CCX_REQUEST_DATA's SET_INFO structure -//--------------------------------------------------------------------------- -typedef struct _IHV_SET_INFO -{ - UINT32 Oid; - UINT32 BytesRead; - UINT32 BytesNeeded; - UINT32 InformationBufferLength; - UINT8 InformationBuffer[1]; -} IHV_SET_INFO, *PIHV_SET_INFO; - - -//--------------------------------------------------------------------------- -// Format of CCX_EVENT_OID data when tlv is of type CCX_TLV_QUERY_DATA -// Note - This definition machtes the CCX_REQUEST_DATA's QUERY_INFO structure -//--------------------------------------------------------------------------- -typedef struct _IHV_QUERY_INFO -{ - UINT32 Oid; - UINT32 BytesWritten; - UINT32 BytesNeeded; - UINT32 InformationBufferLength; - UINT8 InformationBuffer[1]; -} IHV_QUERY_INFO, *PIHV_QUERY_INFO; - - -//--------------------------------------------------------------------------- -// Format of CCX_EVENT_OID data when tlv is of type CCX_TLV_METHOD_DATA -// Note - This definition machtes the CCX_REQUEST_DATA's METHOD_INFO structure -//--------------------------------------------------------------------------- -typedef struct _IHV_METHOD_INFO -{ - UINT32 Oid; - UINT32 BytesWritten; - UINT32 BytesNeeded; - UINT32 BytesRead; - UINT32 InputBufferLength; - UINT32 InformationBufferLength; - UINT8 InformationBuffer[1]; -} IHV_METHOD_INFO, *PIHV_METHOD_INFO; - - -//--------------------------------------------------------------------------- -// Structure used to pass packet to driver. -//--------------------------------------------------------------------------- -typedef struct _IHV_CCX_PACKET { - HANDLE hIhvExtAdapter; // IHV adapter handle. - HANDLE hTxComplete; // handle needed to complete the packet back to service lib. - UCHAR packet[1]; // packet data -} IHV_CCX_PACKET, *PIHV_CCX_PACKET; - -//--------------------------------------------------------------------------- -// Used to pass tlv(s) to CcxIndicateEvent -//--------------------------------------------------------------------------- -typedef struct _TLV_STRUCT -{ - ULONG type; - ULONG length; - PVOID value; -} TLV_STRUCT, *PTLV_STRUCT; - -//--------------------------------------------------------------------------- -// Receive characteristics (just use the DOT11 receive context). -//--------------------------------------------------------------------------- -typedef DOT11_EXTSTA_RECV_CONTEXT IHV_RX_CHARACTERISTICS, *PIHV_RX_CHARACTERISTICS; - -//--------------------------------------------------------------------------- -// Completion reason codes for packets passed from IHV service to driver for transmission. -// -// IHV_TX_COMPL_REASON_SUCCESS -// -packet was successfully sent -// -// IHV_TX_COMPL_REASON_FAILED -// -MPSendNetBufferLists() failed to submit the packet for transmission -// -// IHV_TX_COMPL_REASON_CANCELLED -// -send was cancelled due to pause, reset, surprise removal. -// -// IHV_TX_COMPL_REASON_NDIS_CANCELLED -// -send was cancelled due to NDIS calling MPCancelSendNetBufferLists() -// -// IHV_TX_COMPL_REASON_ADAPTER_NOT_READY -// -MPSendNetBufferLists() determined that it could not perform the send. -// i.e. MP_ADAPTER_CANNOT_SEND_PACKETS() macro returns TRUE. -// -// IHV_TX_COMPL_REASON_ROAMING -// -send was cancelled because we're roaming. -//--------------------------------------------------------------------------- -#define IHV_TX_COMPL_REASON_SUCCESS 0L -#define IHV_TX_COMPL_REASON_FAILED 1L -#define IHV_TX_COMPL_REASON_CANCELLED 2L -#define IHV_TX_COMPL_REASON_NDIS_CANCELLED 3L -#define IHV_TX_COMPL_REASON_ADAPTER_NOT_READY 4L -#define IHV_TX_COMPL_REASON_ROAMING 5L - -//--------------------------------------------------------------------------- -// Transmit characteristics -//--------------------------------------------------------------------------- -typedef struct _IHV_TX_CHARACTERISTICS -{ - HANDLE hSrvLibCompletion; - ULONG txFlags; - UCHAR phyID; - ULONG frequency; - USHORT numMPDU; - ULONG dataRate; - ULONGLONG tsf; - UCHAR retryCount; -} IHV_TX_CHARACTERISTICS, *PIHV_TX_CHARACTERISTICS; - -//**************************************************************************** -//* -//* Define in Sta.h in CCX Sample code 85 Driver -//* -//**************************************************************************** - -typedef struct _STA_EAP_SESSION { - BOOLEAN bSessionTimeout; //Flag to indicate if session timeout occured - BOOLEAN bEapFailed; //set TRUE on receipt of EAP_CODE_FAILURE packet. - BOOLEAN bPrivacySet; //Flag which says if EAPOL Request ID was Rx - //unencrypted, if so then Tx EAPOL message - //unencrypted -} STA_EAP_SESSION, *PEAP_SESSION; - -// -// Maximum number of request element we allow in a single request. -// -#define MAX_RM_REQUEST_ELEMENTS 16 - -// -// MFP MIB variables. -// -typedef struct _MFP_MIB_VARS -{ - LONG dot11RSNAMgmtStatsTKIPICVErrors; - LONG dot11RSNAMgmtStatsTKIPLocalMICFailures; - LONG dot11RSNAMgmtStatsCCMPDecryptErrors; - - - LONG dot11RSNAMgmtStatsTKIPMHDRErrors; - LONG dot11RSNAMgmtStatsTKIPReplays; - LONG dot11RSNAMgmtStatsCCMPReplays; - LONG dot11RSNAMgmtStatsTKIPNoEncryptErrors; - LONG dot11RSNAMgmtStatsCCMPNoEncryptErrors; - LONG dot11RSNAStatsBroadcastDisassociateCount; - LONG dot11RSNAStatsBroadcastDeauthenticateCount; - LONG dot11RSNAStatsBroadcastActionFrameCount; -} MFP_MIB_VARS, *PMFP_MIB_VARS; - -/** - * Maintains CCX RM request info. - */ -typedef struct _STA_CCX_RM_CONTEXT { - - NDIS_HANDLE RM_WorkItem; // work item to handle RM requests. - BOOLEAN rmIndicateBeacons; // if TRUE then indicate all incoming beacon frames to IHV service. - BOOLEAN rmIndicateProbeResps; // if TRUE then indicate all incoming probe resp frames to IHV service. - BOOLEAN rmIndicateFrames; // if TRUE then indicate all incoming frames to IHV service. - - NDIS_MINIPORT_TIMER timer; - LONG timerSync; - ULONG rmReqLen; - PUCHAR rmReq; - - ULONG beaconCount; // temporary - ULONG probeCount; // temporary - ULONG frameCount; // temporary - - USHORT numReqElems; - PCCX_RM_REQ_IE_HDR reqElements[MAX_RM_REQUEST_ELEMENTS]; -} STA_CCX_RM_CONTEXT, *PSTA_CCX_RM_CONTEXT; - -/** - * Maintains CCX diagnostics context - */ -typedef struct _STA_CCX_DIAG_CONTEXT -{ -// PDIAG_CONTROLS DiagCapCtl; // Various settings for diag/capture mode Mark For Compile - BOOLEAN diagMode; // if TRUE then diag mode is enabled. - BOOLEAN diagCaptureFrames; // if TRUE then indicate all incoming/outgoing frames to IHV service. -} STA_CCX_DIAG_CONTEXT, *PSTA_CCX_DIAG_CONTEXT; - -/** - * Maintains CCX MFP context - */ -typedef struct _STA_CCX_MFP_CONTEXT -{ - BOOLEAN mfpActive; // if TRUE then protect/validate class 3 management frames. - ULONGLONG mfpReplayCounter; // watch for management frame replays - MFP_MIB_VARS mfpStats; // MFP related counters. -// DOT11_MGMT_HEADER fragHeader; // store header from first fragment so we can MFP validate - // subsequent fragments against it. -// PDOT11_MGMT_HEADER pFirstFragHeader; // non-NULL when there are more frags of an MSDU to come. -} STA_CCX_MFP_CONTEXT, *PSTA_CCX_MFP_CONTEXT; - -/** - * Maintains CCX diagnostics context - */ -typedef struct _STA_CCX_ASSOC_CONTEXT -{ - BOOLEAN Assoc_OID_Set; //For set oid by DLL and go Normal assoc process - NDIS_MINIPORT_TIMER OKToAssocTimeoutTimer; // timer to timeout OK to assoc event from IHV service. - LONG OKToAssocTimerSync; // - ULONG AssocReqIESize; // size of AssocReqIE buffer. - PUCHAR AssocReqIE; // array of IE to include in association request. - ULONG txPowerLevel; // Power level controlled by the AP. -} STA_CCX_ASSOC_CONTEXT, *PSTA_CCX_ASSOC_CONTEXT; - -/** - * Maintains roam context - */ -typedef struct _STA_CCX_ROAM_CONTEXT -{ - BOOLEAN roamingActive; // are we actively roaming? - ULONG txFailsInRow; // counter tracking successive TX failures - BOOLEAN txFailLimitMet; // the max number of successive tx failures has been hit - time to roam -} STA_CCX_ROAM_CONTEXT, *PSTA_CCX_ROAM_CONTEXT; - - -//--------------------------------------------------------------------------- -// IAPP handling -//--------------------------------------------------------------------------- - -// -// Netbuffer reuse queue -// -typedef struct _IAPP_NET_BUFFER_QUEUE { - NDIS_HANDLE Iappbufferpoolhandle; - NDIS_HANDLE Iappbufferlistpoolhandle; - - //List of NBL which are free to use for Tx - PNET_BUFFER_LIST FreeTxNBL; - UINT FreeTxNBLCount; - NDIS_SPIN_LOCK TxQlock; - - PADAPTER pAdapter; -} IAPP_BUFQUEUE, *PIAPP_BUFQUEUE; - -/** - * Maintains all CCX station specific state information - */ -typedef struct _Cisco_CCX_CONTEXT -{ - - STA_EAP_SESSION eapSession; // Structure containing info about EAP session - - PIAPP_BUFQUEUE RecycleQueue; // used for pool of unused NET_BUFFER_LISTS (IAPP handling) - - STA_CCX_ASSOC_CONTEXT AssocContext; // context infor for association - - STA_CCX_DIAG_CONTEXT DiagContext; // context info for diagnostics - - STA_CCX_RM_CONTEXT RMContext; // context info for radio management - - STA_CCX_MFP_CONTEXT MFPContext; // context info for MFP - - STA_CCX_ROAM_CONTEXT RoamContext; // roaming context. - -} Cisco_CCX_CONTEXT, *PCisco_CCX_CONTEXT; - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/DIRS.SDIO b/network/wlan/WDI/PLATFORM/NDIS6/DIRS.SDIO deleted file mode 100644 index a9c3c0db..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/DIRS.SDIO +++ /dev/null @@ -1,2 +0,0 @@ -DIRS=\ - SDIO diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.c deleted file mode 100644 index ccbef0b8..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.c +++ /dev/null @@ -1,991 +0,0 @@ -#include "Mp_Precomp.h" - -PMAC_HASH_ENTRY -lookupMacHashTable( - __in PCMAC_HASH_TABLE Table, - __in const DOT11_MAC_ADDRESS * MacKey - ) -/*++ - -Routine Description: - - Look up hash table - Note: spinlock should held - -Arguments: - Table: The MAC hash table, must not be NULL. - MacKey: The MAC address - -Return Value: - The found entry - NULL Not found - ---*/ -{ - const LIST_ENTRY * head; - PLIST_ENTRY entry; - ULONG hash = HASH_MAC(*MacKey); - PMAC_HASH_ENTRY hashEntry = NULL; - PMAC_HASH_ENTRY macEntry; - - head = &Table->Buckets[hash]; - entry = head->Flink; - while(head != entry) { - macEntry = CONTAINING_RECORD(entry, MAC_HASH_ENTRY, Linkage); - if (memcmp(macEntry->MacKey, *MacKey, sizeof(DOT11_MAC_ADDRESS)) == 0) { - hashEntry = macEntry; - break; - } - entry = entry->Flink; - } - - return hashEntry; -} - -VOID -enumMacEntry( - __in PMAC_HASH_TABLE Table, - __in PENUM_MAC_ENTRY_CALLBACK CallbackFn, - __in PVOID CallbackCtxt - ) -/*++ - -Routine Description: - - Enumerate hash table - Note: spinlock should held - -Arguments: - Table: The MAC hash table, must not be NULL. - CallbackFn: Pointer to the callback function, must not be NULL. - CallbackCtxt: Pointer to the callback function context, will be passed to the callback function - -Return Value: - None - ---*/ -{ - int i; - PLIST_ENTRY entry; - PLIST_ENTRY head; - PMAC_HASH_ENTRY macEntry; - - for(i = 0; i < MAC_HASH_BUCKET_NUMBER; i++) { - head = Table->Buckets + i; - entry = head->Flink; - - while(entry != head) { - macEntry = CONTAINING_RECORD(entry, MAC_HASH_ENTRY, Linkage); - - // Get the next entry before calling CallbackFn. - // - // CallbackFn may dereference macStateEntry and remove it from the - // hash table! - entry = entry->Flink; - - if (!CallbackFn(Table, macEntry, CallbackCtxt)) { - return; - } - } - } -} - - -#if 0 -/** Reference AP port */ -LONG -N62CAPRefPort( - IN PADAPTER pAdapter - ) -{ - return InterlockedIncrement(&pAdapter->pNdis62Common->RefCount); -} - -/** Dereference AP port */ -LONG -N62CAPDerefPort( - IN PADAPTER pAdapter - ) -{ - return InterlockedDecrement(&pAdapter->pNdis62Common->RefCount); -} -#endif - -NDIS_STATUS -N62CStopApMode( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_NDIS62_COMMON pNdis62Common = Adapter->pNdis62Common; - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE( COMP_AP, DBG_LOUD, ("N62CStopApMode()====>\n") ); - - if ( GetAPState(Adapter) ==AP_STATE_STARTED || GetAPState(Adapter) == AP_STATE_STARTING) - { - SetAPState(Adapter, AP_STATE_STOPPING); - - AP_DisassociateAllStation(Adapter, unspec_reason); - - SecSetSwEncryptionDecryption(Adapter, FALSE, FALSE); - - MgntActSet_ApType(Adapter, FALSE); - AP_Reset(Adapter); - - SetAPState(Adapter, AP_STATE_STOPPED); - - PlatformZeroMemory(&Adapter->pNdisCommon->dot11DesiredSSIDList, sizeof(DOT11_SSID_LIST)); - - AP_AllPowerSaveReturn(Adapter); - } - - MgntActSet_AdditionalBeaconIE(Adapter, NULL, 0); - MgntActSet_AdditionalProbeRspIE(Adapter, NULL, 0); - pNdis62Common->bWPSEnable = FALSE; - - //if(pDot11ResetRequest->bSetDefaultMIB) - // N6InitializeNative80211MIBs(Adapter); - - // - // DDK: The NIC shall clear privacy exemption list on every reset - // regardless of the rest requests parameters. - // 2008.10.17, haich - // - Adapter->pNdisCommon->PrivacyExemptionEntrieNum = 0; - - // - // Beacon mode. - // - //pNdis62Common->bAPBeaconMode = FALSE; - - // - // Reset network type. - // - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - - // indicate to OS that NOT support AP now. - N62CApIndicateStopAp(Adapter); - - RT_TRACE( COMP_AP, DBG_LOUD, ("N62CStopApMode()<====\n") ); - return ndisStatus; -} - -NDIS_STATUS -N62CStartApMode( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER DefAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefaultMgntInfo = GetDefaultMgntInfo(Adapter); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_AP); - - if(!ACTING_AS_AP(Adapter)) - { - AP_AllPowerSaveDisable(Adapter); - } - - MgntActSet_ApType(Adapter, TRUE); - - if( pSecInfo->SecLvl > RT_SEC_LVL_NONE && !Adapter->bInHctTest) - {// hw - SecSetSwEncryptionDecryption(Adapter, FALSE , FALSE); - } - else - {// sw - SecSetSwEncryptionDecryption(Adapter, TRUE, TRUE); - } - - SetAPState(Adapter, AP_STATE_STARTING); - - N6InitializeIndicateStateMachine(Adapter); - - // - // This is for Win7 DTM. - // - { - PDOT11_SSID_LIST pSsidList = &(Adapter->pNdisCommon->dot11DesiredSSIDList); - CopyMem(pMgntInfo->Ssid.Octet, pSsidList->SSIDs[0].ucSSID, pSsidList->SSIDs[0].uSSIDLength); - pMgntInfo->Ssid.Length =(u1Byte) pSsidList->SSIDs[0].uSSIDLength; - } - -#if 0 - DefAdapter->MgntInfo.bStartApDueToWakeup=FALSE; // don't need to do for ext -#else //change by ylb 20111124 to Fix DTM error: Vertify Beacon after WakeUp - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - pTargetAdapter->MgntInfo.bStartApDueToWakeup=FALSE; - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } -#endif - - AP_Reset(Adapter); - - SetAPState(Adapter, AP_STATE_STARTED); - -/* Shoule we setting cahnnel num before configure AP mode ? -Neo Test 123 - if(IsDefaultAdapter(Adapter)) - { - if((GetpExtMgntInfo(Adapter)->mAssoc || GetpExtMgntInfo(Adapter)->mIbss) && (!ACTING_AS_AP(GetExtAdapter(Adapter)))) - { - pDefaultMgntInfo->dot11CurrentChannelNumber = GetpExtMgntInfo(Adapter)->dot11CurrentChannelNumber; - } -// else ?? Neo Test 123 - } - else - { - if((pDefaultMgntInfo->mAssoc || pDefaultMgntInfo->mIbss) && (!ACTING_AS_AP(GetDefaultAdapter(Adapter)))) - { - pDefaultMgntInfo->dot11CurrentChannelNumber =pDefaultMgntInfo->dot11CurrentChannelNumber; - } -// else ?? Neo Test 123 - - } -*/ - - N62CAPIndicateFrequencyAdopted(Adapter); - - FunctionOut(COMP_AP); - - - return ndisStatus; - -} - -VOID -N62CApIndicateStatus( - IN PADAPTER pAdapter, - IN NDIS_STATUS GeneralStatus, - IN PVOID RequestID, - IN PVOID StatusBuffer, - IN UINT StatusBufferSize - ) -{ - NDIS_HANDLE MiniportAdapterHandle = pAdapter->pNdisCommon->hNdisAdapter; - NDIS_STATUS_INDICATION StatusIndication; - - PlatformZeroMemory(&StatusIndication, sizeof(NDIS_STATUS_INDICATION)); - - N6_ASSIGN_OBJECT_HEADER( - StatusIndication.Header, - NDIS_OBJECT_TYPE_STATUS_INDICATION, - NDIS_STATUS_INDICATION_REVISION_1, - sizeof(NDIS_STATUS_INDICATION)); - - StatusIndication.PortNumber = pAdapter->pNdis62Common->PortNumber; - StatusIndication.SourceHandle = MiniportAdapterHandle; - StatusIndication.StatusCode = GeneralStatus; - - StatusIndication.DestinationHandle = NULL; - StatusIndication.RequestId = RequestID; - - StatusIndication.StatusBuffer = StatusBuffer; - StatusIndication.StatusBufferSize = StatusBufferSize; - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("N62CApIndicateStatus(): StatusIndication.PortNumber: %d\n", StatusIndication.PortNumber)); - - NdisMIndicateStatusEx(MiniportAdapterHandle, &StatusIndication); -} - -VOID -N62CApIndicateStopAp( - IN PADAPTER Adapter - ) -{ - DOT11_STOP_AP_PARAMETERS dot11StopApParameters; - - RT_TRACE((COMP_AP|COMP_INDIC), DBG_LOUD, ("===> N62CApIndicateStopAp()\n")); - - NdisZeroMemory(&dot11StopApParameters, sizeof(DOT11_STOP_AP_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - dot11StopApParameters.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_STOP_AP_PARAMETERS_REVISION_1, - sizeof(DOT11_STOP_AP_PARAMETERS)); - - dot11StopApParameters.ulReason = DOT11_STOP_AP_REASON_CHANNEL_NOT_AVAILABLE; - - N62CApIndicateStatus( - Adapter, - NDIS_STATUS_DOT11_STOP_AP, - NULL, - &dot11StopApParameters, - sizeof(DOT11_STOP_AP_PARAMETERS)); - - RT_TRACE((COMP_AP|COMP_INDIC), DBG_LOUD, ("<=== N62CApIndicateStopAp()\n")); -} - -VOID -N62CApIndicateCanSustainAp( - IN PADAPTER Adapter - ) -{ - DOT11_CAN_SUSTAIN_AP_PARAMETERS dot11CanSustainApParameters; - - RT_TRACE((COMP_AP|COMP_INDIC), DBG_LOUD, ("===> N62CApIndicateCanSustainAp()\n")); - - NdisZeroMemory(&dot11CanSustainApParameters, sizeof(DOT11_CAN_SUSTAIN_AP_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - dot11CanSustainApParameters.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CAN_SUSTAIN_AP_PARAMETERS_REVISION_1, - sizeof(DOT11_CAN_SUSTAIN_AP_PARAMETERS)); - - dot11CanSustainApParameters.ulReason = DOT11_CAN_SUSTAIN_AP_REASON_IHV_START; - - N62CApIndicateStatus( - Adapter, - NDIS_STATUS_DOT11_CAN_SUSTAIN_AP, - NULL, - &dot11CanSustainApParameters, - sizeof(DOT11_CAN_SUSTAIN_AP_PARAMETERS)); - - RT_TRACE((COMP_AP|COMP_INDIC), DBG_LOUD, ("<=== N62CApIndicateCanSustainAp()\n")); -} - - -/* - *2008/08/22 Add by Mars - * - * Indicate Channel to NDIS for Win7 V3 - * - * @param pAdapter is driver main strucutre. -*/ -VOID -N62CAPIndicateFrequencyAdopted( - IN PADAPTER Adapter - ) -{ - DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS params; - PRT_NDIS62_COMMON pN62COMMON = Adapter->pNdis62Common; - - // send out the NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED status indication - NdisZeroMemory(¶ms, sizeof(DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - params.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS_REVISION_1, - sizeof(DOT11_PHY_FREQUENCY_ADOPTED_PARAMETERS) - ); - - params.ulChannel = Adapter->MgntInfo.dot11CurrentChannelNumber; - params.ulPhyId = 0; - - N62CApIndicateStatus( - Adapter, - NDIS_STATUS_DOT11_PHY_FREQUENCY_ADOPTED, - NULL, // no request ID - ¶ms, - sizeof(params) - ); -} - -// -// Assumption: -// pMgntInfo->pCurrentSta is updated. -// -VOID -N62CAPIndicateIncomAssocStart( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo =GetDefaultMgntInfo(Adapter); - PRT_WLAN_STA pCurrentSta = pMgntInfo->pCurrentSta; - PDOT11_INCOMING_ASSOC_STARTED_PARAMETERS pAssoStartParam; - RT_STATUS rtStatus; - ULONG AllocSize = sizeof(DOT11_INCOMING_ASSOC_STARTED_PARAMETERS); - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("===> N62CAPIndicateIncomAssocStart ()\n")); - RT_PRINT_ADDR(COMP_INDIC, DBG_LOUD, "", pCurrentSta->MacAddr); - - if(PlatformAllocateMemory(Adapter, &pAssoStartParam, AllocSize) != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INDIC, DBG_WARNING, - ("N62CAPIndicateIncomAssocStart() failed to allocate memory for DOT11_INCOMING_ASSOC_STARTED_PARAMETERS\n")); - return; - } - - PlatformZeroMemory(pAssoStartParam, sizeof(DOT11_INCOMING_ASSOC_STARTED_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pAssoStartParam->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_INCOMING_ASSOC_STARTED_PARAMETERS_REVISION_1, - sizeof(DOT11_INCOMING_ASSOC_STARTED_PARAMETERS)); - - PlatformMoveMemory( - (pAssoStartParam->PeerMacAddr), - pCurrentSta->MacAddr, - sizeof(DOT11_MAC_ADDRESS)); - - N62CApIndicateStatus( - Adapter, - NDIS_STATUS_DOT11_INCOMING_ASSOC_STARTED, - NULL, - pAssoStartParam, - sizeof(DOT11_INCOMING_ASSOC_STARTED_PARAMETERS)); - - PlatformFreeMemory(pAssoStartParam, AllocSize); - RT_TRACE(COMP_INDIC, DBG_LOUD, ("<=== N62CAPIndicateIncomAssocStart ()\n")); -} - -// -// Assumption: -// pMgntInfo->pCurrentSta is updated. -// -VOID -N62CAPIndicateIncomAssocComplete( - IN PADAPTER Adapter, - IN RT_STATUS status - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - PRT_WLAN_STA pCurrentSta = pMgntInfo->pCurrentSta; - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - PRT_NDIS62_COMMON pNdis62Common = Adapter->pNdis62Common; - RT_AUTH_MODE authmode; - PDOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS pAssoCompleteParam; - RT_STATUS rtStatus; - ULONG AllocSize; - ULONG IndicateSize; - - pu1Byte pInfoStart = NULL; - int nInfoOffset = 0; - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("===> N62CAPIndicateIncomAssocComplete ()\n")); - RT_PRINT_ADDR(COMP_INDIC, DBG_LOUD, "", pCurrentSta->MacAddr); - - // - // Allocate memory for Phy IE, Asoc req and Asoc rsp. - // Note that if we don't have Asoc req or Asoc rsp, the spaces for them are not allocated. - // - AllocSize = sizeof(DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS) + // The structure itself. - sizeof(u4Byte) + // PHY ID. - MMPDU_BODY_LEN(pCurrentSta->AP_RecvAsocReqLength) + // Asoc Req. - MMPDU_BODY_LEN(pCurrentSta->AP_SendAsocRespLength)+ // Asoc Rsp. - MMPDU_BODY_LEN(pMgntInfo->beaconframe.Length); // Beacon. - - // - // Note that in NDISTest, we should not indicate pAssoCompleteParam with size greater than 1024. - // 2008.11.21, haich. - // - //RT_ASSERT(AllocSize <= 1024, - // ("N62CAPIndicateIncomAssocComplete(): Indicate a buffer with size greater than 1024.\n")); - if(AllocSize > 1024) - {// ignore this indication. - RT_TRACE(COMP_MLME, DBG_WARNING, - ("<=== DrvIFIndicateAssociationComplete(): AllocSize > 1024, ignore indication.\n")); - return; - } - - rtStatus = PlatformAllocateMemory( - Adapter, - &pAssoCompleteParam, - AllocSize); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_MLME, DBG_WARNING, - ("<=== DrvIFIndicateAssociationComplete(): failed to allocate memory for indication.\n")); - return; - } - - // - // Clear all fields. - // - PlatformZeroMemory(pAssoCompleteParam, AllocSize); - - // - // Fill Header. - // - N6_ASSIGN_OBJECT_HEADER( - pAssoCompleteParam->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS_REVISION_1, - sizeof(DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS)); - - // - // Fill MAC address. - // - PlatformMoveMemory( - pAssoCompleteParam->PeerMacAddr, - pCurrentSta->MacAddr, - sizeof(DOT11_MAC_ADDRESS)); - //RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Peer:", pAssoCompleteParam->PeerMacAddr); - - // - // Fill status. - // - pAssoCompleteParam->uStatus = (status == RT_STATUS_SUCCESS) ? - (DOT11_ASSOC_STATUS_SUCCESS) : - (DOT11_ASSOC_STATUS_FAILURE); - - if(status == RT_STATUS_SUCCESS) - {// fill fields that are valid only when association succeed in this code section. - // - // Is Re association req/rsp. - // We may get here because we received a Deauth. - // For this case, AP_RecvAsocReq and AP_SendAsocResp are all NULL since - // they are released right before we get out of AP_OnAsocReq(). - // 2008.11.21, haich. - // - if(pCurrentSta->AP_RecvAsocReqLength) - { - OCTET_STRING osResvAssocReq; - osResvAssocReq.Length = (u2Byte)pCurrentSta->AP_RecvAsocReqLength; - osResvAssocReq.Octet = pCurrentSta->AP_RecvAsocReq; - pAssoCompleteParam->bReAssocReq = - (PacketGetType(osResvAssocReq) == Type_Reasoc_Req) ? (TRUE) : (FALSE); - } - else - { - pAssoCompleteParam->bReAssocReq = FALSE; - } - - if(pCurrentSta->AP_SendAsocRespLength) - { - OCTET_STRING osResvAssocReq; - osResvAssocReq.Length = (u2Byte)pCurrentSta->AP_RecvAsocReqLength; - osResvAssocReq.Octet = pCurrentSta->AP_RecvAsocReq; - pAssoCompleteParam->bReAssocResp = - (PacketGetType(osResvAssocReq) == Type_Reasoc_Req) ? (TRUE) : (FALSE); - } - else - { - pAssoCompleteParam->bReAssocResp = FALSE; - } - - // DOT11_AUTH_ALGORITHM AuthAlgo; -// MgntActQuery_802_11_AUTHENTICATION_MODE( Adapter, &authmode ); -// pAssoCompleteParam->AuthAlgo = N6CAuthModeToDot11( &authmode ); -// pAssoCompleteParam->AuthAlgo = N6CAuthAlgToDot11(&(pCurrentSta->AuthAlg)); - pAssoCompleteParam->AuthAlgo = N6CAuthModeToDot11(&(pCurrentSta->AuthMode)); - - // DOT11_CIPHER_ALGORITHM UnicastCipher; - pAssoCompleteParam->UnicastCipher = N6CEncAlgorithmToDot11( &(pCurrentSta->perSTAKeyInfo.PairwiseCipherSuite[0]) ); - - // DOT11_CIPHER_ALGORITHM MulticastCipher; - pAssoCompleteParam->MulticastCipher = N6CEncAlgorithmToDot11( &(pCurrentSta->perSTAKeyInfo.GroupCipherSuite) ); - - // - // Set up Extra information. - // - pInfoStart = (pu1Byte)pAssoCompleteParam; - nInfoOffset = sizeof(DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS); - - // - // PHY ID. Filled after DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS structure. - // - pAssoCompleteParam->uActivePhyListSize = sizeof(u4Byte); - pAssoCompleteParam->uActivePhyListOffset = nInfoOffset; - { - PULONG pLong = (PULONG)((PUCHAR)pAssoCompleteParam + sizeof(DOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS)); - *pLong = 0; - } - nInfoOffset += pAssoCompleteParam->uActivePhyListSize; - - // - // Association Request, filled immediately after PHY ID. - // - if(pCurrentSta->AP_RecvAsocReqLength) - { - pAssoCompleteParam->uAssocReqOffset = nInfoOffset; - pAssoCompleteParam->uAssocReqSize = MMPDU_BODY_LEN(pCurrentSta->AP_RecvAsocReqLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pCurrentSta->AP_RecvAsocReq), - pAssoCompleteParam->uAssocReqSize); - nInfoOffset += pAssoCompleteParam->uAssocReqSize; - - RT_PRINT_DATA(COMP_INDIC, DBG_LOUD, "AsocReq", - MMPDU_BODY(pCurrentSta->AP_RecvAsocReq), - MMPDU_BODY_LEN(pCurrentSta->AP_RecvAsocReqLength)); - } - else - { - pAssoCompleteParam->uAssocReqOffset = 0; - pAssoCompleteParam->uAssocReqSize = 0; - } - - // - // Association Response. - // - if(pCurrentSta->AP_SendAsocRespLength) - { - pAssoCompleteParam->uAssocRespOffset = nInfoOffset; - pAssoCompleteParam->uAssocRespSize = MMPDU_BODY_LEN(pCurrentSta->AP_SendAsocRespLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pCurrentSta->AP_SendAsocResp), - pAssoCompleteParam->uAssocRespSize); - nInfoOffset += pAssoCompleteParam->uAssocRespSize; - - RT_PRINT_DATA(COMP_INDIC, DBG_LOUD, "AsocRsp", - MMPDU_BODY(pCurrentSta->AP_SendAsocResp), - MMPDU_BODY_LEN(pCurrentSta->AP_SendAsocRespLength)); - } - else - { - pAssoCompleteParam->uAssocRespOffset = 0; - pAssoCompleteParam->uAssocRespSize = 0; - } - - // - // Beacon frame. - // - if(pMgntInfo->beaconframe.Length) - { - //vivi add this for vitrual ap.as pcie add 8 byte before mac header as early mode, 20101130 - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - if( pHalData->AMPDUBurstMode && IS_NEED_OFFSET_ON_AMPDU(Adapter)) - { - pAssoCompleteParam->uBeaconOffset = nInfoOffset; - pAssoCompleteParam->uBeaconSize = MMPDU_BODY_LEN(pMgntInfo->beaconframe.Length-8); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->beaconframe.Octet+8), - pAssoCompleteParam->uBeaconSize-8); - nInfoOffset += (pAssoCompleteParam->uBeaconSize-8); - - RT_PRINT_DATA(COMP_INDIC, DBG_LOUD, "Beacon", - MMPDU_BODY(pMgntInfo->beaconframe.Octet+8), - MMPDU_BODY_LEN(pMgntInfo->beaconframe.Length-8)); - } - else - { - pAssoCompleteParam->uBeaconOffset = nInfoOffset; - pAssoCompleteParam->uBeaconSize = MMPDU_BODY_LEN(pMgntInfo->beaconframe.Length); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->beaconframe.Octet), - pAssoCompleteParam->uBeaconSize); - nInfoOffset += pAssoCompleteParam->uBeaconSize; - - RT_PRINT_DATA(COMP_INDIC, DBG_LOUD, "Beacon", - MMPDU_BODY(pMgntInfo->beaconframe.Octet), - MMPDU_BODY_LEN(pMgntInfo->beaconframe.Length)); - } - } - else - { - pAssoCompleteParam->uBeaconOffset = 0; - pAssoCompleteParam->uBeaconSize = 0; - } - } - else - {// fill fields that are valid only when association failed in this code section. - // TODO: Win7 error source. - pAssoCompleteParam->ucErrorSource = DOT11_ASSOC_ERROR_SOURCE_OS; - } - - N62CApIndicateStatus( - Adapter, - NDIS_STATUS_DOT11_INCOMING_ASSOC_COMPLETION, - NULL, - pAssoCompleteParam, - AllocSize); - - //2 NOTE: Do NOT access pAssoCompleteParam hereafter. - PlatformFreeMemory(pAssoCompleteParam, AllocSize); - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("<=== N62CAPIndicateIncomAssocComplete (): status(%u)\n", status)); -} - -// -// Assumption: -// pMgntInfo->pCurrentSta is updated. -// -VOID -N62CAPIndicateIncomAssocReqRecv( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - PRT_WLAN_STA pCurrentSta = pMgntInfo->pCurrentSta; - pu1Byte Framebody=NULL; - u4Byte FrameSize=0; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PDOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS pAssoReqRecvParam; - ULONG requiredAssocReqParaSize = 0; - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("===> N62CAPIndicateIncomAssocReqRecv ()\n")); - RT_PRINT_ADDR(COMP_INDIC, DBG_LOUD, "", pCurrentSta->MacAddr); - - FrameSize = MMPDU_BODY_LEN(pCurrentSta->AP_RecvAsocReqLength); - requiredAssocReqParaSize = sizeof(DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS)+FrameSize; - - if(requiredAssocReqParaSize > 1024) - {// not to indicate with a too large buffer. 2008.11.21, haich. - RT_TRACE(COMP_INDIC, DBG_LOUD, - ("<=== DrvIFIndicateAssociationComplete(): requiredAssocReqParaSize > 1024, ignore indication.\n")); - return; - } - - rtStatus = PlatformAllocateMemory( - Adapter, - &pAssoReqRecvParam, - requiredAssocReqParaSize); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INDIC, DBG_LOUD, - ("<=== DrvIFIndicateAssociationComplete(): failed to allocate memory for indication.\n")); - return; - } - - PlatformZeroMemory(pAssoReqRecvParam,requiredAssocReqParaSize); - - N6_ASSIGN_OBJECT_HEADER( - pAssoReqRecvParam->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS_REVISION_1, - sizeof(DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS)); - - { - OCTET_STRING osResvAssocReq; - osResvAssocReq.Length = (u2Byte)pCurrentSta->AP_RecvAsocReqLength; - osResvAssocReq.Octet = pCurrentSta->AP_RecvAsocReq; - pAssoReqRecvParam->bReAssocReq = - (PacketGetType(osResvAssocReq) == Type_Reasoc_Req) ? (TRUE) : (FALSE); - } - PlatformMoveMemory( - pAssoReqRecvParam->PeerMacAddr, - pCurrentSta->MacAddr, - sizeof(DOT11_MAC_ADDRESS)); - - - pAssoReqRecvParam->uAssocReqSize = FrameSize; - pAssoReqRecvParam->uAssocReqOffset = sizeof(DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS); - - PlatformMoveMemory( - Add2Ptr(pAssoReqRecvParam, pAssoReqRecvParam->uAssocReqOffset), - MMPDU_BODY(pCurrentSta->AP_RecvAsocReq), - FrameSize); - - //RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Peer:", pAsocInfo->PeerAddr); - //RT_PRINT_STR(COMP_MLME, DBG_LOUD, "SSID", pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - //RT_PRINT_DATA(COMP_INDIC, - // DBG_LOUD, - // "Indicated data:", - // pAssoReqRecvParam, - // (int)(sizeof(DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS)+FrameSize)); - // - N62CApIndicateStatus( - Adapter, - NDIS_STATUS_DOT11_INCOMING_ASSOC_REQUEST_RECEIVED, - NULL, - pAssoReqRecvParam, - sizeof(DOT11_INCOMING_ASSOC_REQUEST_RECEIVED_PARAMETERS)+FrameSize); - - PlatformFreeMemory(pAssoReqRecvParam, requiredAssocReqParaSize); - RT_TRACE(COMP_INDIC, DBG_LOUD, ("<=== N62CAPIndicateIncomAssocReqRecv ()\n")); - -} - -VOID -N62CAPIndicateDisassociation( - IN PADAPTER Adapter, - IN u2Byte reason - ) -{ - DOT11_DISASSOCIATION_PARAMETERS DisAssoParam; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(Adapter); - - PRT_WLAN_STA pCurrentSta = pMgntInfo->pCurrentSta; - ULONG i; - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("===> N62CAPIndicateDisassociation()\n")); - - PlatformZeroMemory(&DisAssoParam, sizeof(DOT11_DISASSOCIATION_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - DisAssoParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_DISASSOCIATION_PARAMETERS_REVISION_1, - sizeof(DOT11_DISASSOCIATION_PARAMETERS)); - - RT_ASSERT(pMgntInfo->OpMode == RT_OP_MODE_AP, - ("N62CAPIndicateDisassociation(): not in AP mode.")); - - if(pCurrentSta) - { - PlatformMoveMemory( - DisAssoParam.MacAddr, - pCurrentSta->MacAddr, - sizeof(DOT11_MAC_ADDRESS)); - } - else - { - N6_MAKE_WILDCARD_MAC_ADDRESS(DisAssoParam.MacAddr); - } - - if(reason == disas_lv_ss) - DisAssoParam.uReason = DOT11_ASSOC_STATUS_PEER_DISASSOCIATED | reason; - else if (reason == deauth_lv_ss) - DisAssoParam.uReason = DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED | reason; - else - DisAssoParam.uReason = reason; - - DisAssoParam.uIHVDataOffset = 0; - DisAssoParam.uIHVDataSize = 0; - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_DISASSOCIATION, - &DisAssoParam, - sizeof(DOT11_DISASSOCIATION_PARAMETERS)); - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("<=== N62CAPIndicateDisassociation()\n")); - -} - -BOOLEAN -N62CAPInComingAssocDecsion( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - BOOLEAN allowed=TRUE; - u4Byte idx=0; - - if( pMgntInfo->LockedSTACount != 0 ) - { - allowed = TRUE; - for( idx=0; idxLockedSTACount; idx++ ) - { - if( eqMacAddr(pMgntInfo->LockedSTAList[idx], Frame_Addr3(asocpdu)) ) - { - RT_PRINT_ADDR( COMP_AP, DBG_LOUD, ("Mached Locked STA Address"), pMgntInfo->LockedSTAList[idx] ); - allowed = FALSE; - break; - } - } - - if( !allowed ) - { - RT_TRACE( COMP_AP, DBG_LOUD, ("AP_OnAuthOdd(): unknow STA MAC address!\n") ); - return FALSE; - } - } - return TRUE; -} - -VOID -N62CResetAPVariables( - IN PADAPTER Adapter, - IN BOOLEAN IsApMode - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - int i; - - // Added by Annie, 2006-01-26. - MgntCancelAllTimer(Adapter); - RemoveAllTS(Adapter); - pMgntInfo->dot11CurrentChannelNumber = pMgntInfo->Regdot11ChannelNumber; - - // We shall randomize it? - for(i = 0; i < 128; i++) - { - pMgntInfo->arChalng[i] = (u1Byte)i; - } - - // Reset Association Table. - AsocEntry_ResetAll(Adapter); - - Authenticator_GlobalReset(Adapter); // added by Annie - - if(IsApMode) - { // AP mode. - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - static u1Byte DummySta[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x01}; - - // - // step 1. Indicate wildcard disassocation event to - // disassociate all STA associated before. - // - /***************************************************************** - 20150416 Sinda. - We need to delete peer in WDI architecture, but peer had been deleted before. - pass NULL to skip this case to avoid delete incorrect peer. - *****************************************************************/ - DrvIFIndicateDisassociation(Adapter, unspec_reason, NULL); - - // - // step 2. Indicate dummy STA assocation event. - // - // 061228, rcnjko: UI need fake AP mode to enter connected - // state immediate for ICS easy implementation. - // - MgntUpdateAsocInfo(Adapter, UpdateAsocPeerAddr, DummySta, 6); - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_SUCCESS); - } - - // - // Clean up additional beacon ie and response ie data. - // - MgntActSet_AdditionalBeaconIE(Adapter, NULL, 0); - MgntActSet_AdditionalProbeRspIE(Adapter, NULL, 0); - } -} - - -VOID -N62CAPClearStateBeforeSleep( - PADAPTER Adapter - ) -{ - PADAPTER pAdapter = GetFirstExtAdapter(Adapter); - - - while(pAdapter != NULL) - { - if ( GetAPState(pAdapter) ==AP_STATE_STARTED || GetAPState(pAdapter) == AP_STATE_STARTING) - { - SetAPState(pAdapter, AP_STATE_STOPPING); - AP_DisassociateAllStation(pAdapter, unspec_reason); - SecSetSwEncryptionDecryption(pAdapter, FALSE, FALSE); - MgntActSet_ApType(pAdapter, FALSE); - AP_Reset(pAdapter); - SetAPState(pAdapter, AP_STATE_STOPPED); - pAdapter->pNdis62Common->CurrentOpState=INIT_STATE; - PlatformZeroMemory(&pAdapter->pNdisCommon->dot11DesiredSSIDList, sizeof(DOT11_SSID_LIST)); - } - - if(pAdapter->MgntInfo.AdditionalBeaconIEData) - { - PlatformFreeMemory(pAdapter->MgntInfo.AdditionalBeaconIEData, pAdapter->MgntInfo.AdditionalBeaconIESize); - pAdapter->MgntInfo.AdditionalBeaconIEData = NULL; - pAdapter->MgntInfo.AdditionalBeaconIESize=0; - } - - if(pAdapter->MgntInfo.AdditionalResponseIEData) - { - PlatformFreeMemory(pAdapter->MgntInfo.AdditionalResponseIEData, pAdapter->MgntInfo.AdditionalResponseIESize); - pAdapter->MgntInfo.AdditionalResponseIEData = NULL; - pAdapter->MgntInfo.AdditionalResponseIESize=0; - } - pAdapter = GetNextExtAdapter(pAdapter); - } - -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.h deleted file mode 100644 index 5b396b21..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP.h +++ /dev/null @@ -1,134 +0,0 @@ -/*++ - -Copyright (c) Realtek . All rights reserved. - -Module Name: - N62C_AP.h - -Abstract: - Win 7 AP mode releated - -Revision History: - When What - ---------- ---------------------------------------------- - 04-22-2008 Created - -Notes: - ---*/ -#pragma once - -#ifndef _N62_AP__H -#define _N62_AP__H - - -#if 0 -/** Reference AP port */ -LONG -N62CAPRefPort( - IN PADAPTER pAdapter - ); - -/** Dereference AP port */ -LONG -N62CAPDerefPort( - IN PADAPTER pAdapter - ); -/* -STA_PORT_STATE -ApGetStaPortState( - IN PRT_WLAN_STA pEntry - ); - -STA_PORT_STATE -ApSetStaPortState( - IN PRT_WLAN_STA pEntry, - IN STA_PORT_STATE NewPortState - ); -*/ -#endif - -NDIS_STATUS -N62CStartApMode( - IN PADAPTER Adapter - ); - -NDIS_STATUS -N62CStopApMode( - IN PADAPTER Adapter - ); - -VOID -N62CApIndicateStatus( - IN PADAPTER pAdapter, - IN NDIS_STATUS GeneralStatus, - IN PVOID RequestID, - IN PVOID StatusBuffer, - IN UINT StatusBufferSize - ); -VOID -N62CApIndicateStopAp( - IN PADAPTER Adapter - ); -VOID -N62CApIndicateCanSustainAp( - IN PADAPTER Adapter - ); -VOID -N62CAPIndicateFrequencyAdopted( - IN PADAPTER Adapter - ); -VOID -N62CAPIndicateIncomAssocStart( - IN PADAPTER Adapter - ); - -VOID -N62CAPIndicateIncomAssocComplete( - IN PADAPTER Adapter, - IN RT_STATUS status - ); - -VOID -N62CAPIndicateIncomAssocReqRecv( - IN PADAPTER Adapter - ); - -VOID -N62CAPIndicateDisassociation( - IN PADAPTER Adapter, - IN u2Byte reason - ); - -BOOLEAN -N62CAPInComingAssocDecsion( - IN PADAPTER Adapter, - IN OCTET_STRING asocpdu - ); - -NDIS_STATUS -N62CAPSetStaPortState( - IN PADAPTER Adapter, - IN PDOT11_MAC_ADDRESS PeerMacAddr, - IN BOOLEAN PortOpen - ); - -VOID -N62CResetAPVariables( - IN PADAPTER Adapter, - IN BOOLEAN IsApMode - ); - -VOID -N62CApInitializeIndicateStateMachine( - IN PN6_INDICATE_STATE_MACHINE IndicationEngine - ); - - -VOID -N62CAPClearStateBeforeSleep( - PADAPTER Adapter - ); - -#endif // _N62_AP_H - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP_Def.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP_Def.h deleted file mode 100644 index 382a18db..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_AP_Def.h +++ /dev/null @@ -1,644 +0,0 @@ -/*++ - -Copyright (c) Realtek Corporation. All rights reserved. - -Module Name: - N62C_AP_Def.h - -Abstract: - Contains AP Define and Structure - -Revision History: - When What - ---------- ---------------------------------------------- - 04-22-2008 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _AP_DEFS_H -#define _AP_DEFS_H - -#define AP11_MAX_IE_BLOB_SIZE (DOT11_MAX_PDU_SIZE - sizeof(DOT11_MGMT_HEADER) - \ - FIELD_OFFSET(DOT11_BEACON_FRAME, InfoElements) - 4) -#ifndef Add2Ptr -#define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I))) -#endif - -/** - * Capabilities - */ -#define AP_SCAN_SSID_LIST_MAX_SIZE 4 -#define AP_DESIRED_SSID_LIST_MAX_SIZE 1 -#define AP_STRICTLY_ORDERED_SERVICE_CLASS_IMPLEMENTED FALSE - -/** ExtAP default configurations (hardware independent) */ -#define AP_DEFAULT_ENABLED_AUTO_CONFIG (DOT11_PHY_AUTO_CONFIG_ENABLED_FLAG | DOT11_MAC_AUTO_CONFIG_ENABLED_FLAG) - -#define AP_DEFAULT_EXCLUDE_UNENCRYPTED FALSE - -#define AP_DEFAULT_AUTHENTICATION_ALGORITHM DOT11_AUTH_ALGO_RSNA_PSK - -#define AP_DEFAULT_UNICAST_CIPHER_ALGORITHM DOT11_CIPHER_ALGO_CCMP - -#define AP_DEFAULT_MULTICAST_CIPHER_ALGORITHM AP_DEFAULT_UNICAST_CIPHER_ALGORITHM - -#define AP_DEFAULT_DESIRED_PHY_ID_COUNT 1 - -#define AP_DEFAULT_DESIRED_PHY_ID DOT11_PHY_ID_ANY - -#define AP_DEFAULT_PHY_ID 0 - -#define AP_DEFAULT_ADDITIONAL_IE_SIZE 0 - -#define AP_DEFAULT_ADDITIONAL_IE_DATA NULL - -#define AP_DEFAULT_ENABLE_WPS FALSE - -/** - * ExtAP default registy info settings, with their ranges - * a default setting is used if the registry is not present or has invalid value - */ - -#define AP_DEFAULT_ALLOWED_ASSOCIATION_COUNT 128 -#define AP_MIN_ALLOWED_ASSOCIATION_COUNT 0 -#define AP_MAX_ALLOWED_ASSOCIATION_COUNT 255 - -#define AP_DEFAULT_ENABLE_5GHZ FALSE - -#define AP_DEFAULT_CHANNEL 11 -#define AP_MIN_CHANNEL 0 -#define AP_MAX_CHANNEL 11 -#define AP_MAX_CHANNEL_FOR_11A 136 - -#define AP_DEFAULT_FREQUENCY 136 - -#define AP_DEFAULT_GROUP_KEY_RENEWAL_INTERVAL 3600 // in seconds -#define AP_MIN_GROUP_KEY_RENEWAL_INTERVAL 60 -#define AP_MAX_GROUP_KEY_RENEWAL_INTERVAL 86400 - -#define AP_DEFAULT_ENABLE_CTS_PROTECTION FALSE - -#define AP_DEFAULT_ENABLE_FRAME_BURST FALSE - -#define AP_DEFAULT_BEACON_PERIOD 100 // in TUs -#define AP_MIN_BEACON_PERIOD 10 -#define AP_MAX_BEACON_PERIOD 10000 - -#define AP_DEFAULT_DTIM_PERIOD 2 // beacon intervals -#define AP_MIN_DTIM_PERIOD 1 -#define AP_MAX_DTIM_PERIOD 100 - -#define AP_DEFAULT_RTS_THRESHOLD 2347 -#define AP_MIN_RTS_THRESHOLD 0 -#define AP_MAX_RTS_THRESHOLD 2347 - -#define AP_DEFAULT_FRAGMENTATION_THRSHOLD 2346 -#define AP_MIN_FRAGMENTATION_THRESHOLD 256 -#define AP_MAX_FRAGMENTATION_THRESHOLD 2346 - -#define AP_DEFAULT_SHORT_RETRY_LIMIT 7 -#define AP_MIN_SHORT_RETRY_LIMIT 1 -#define AP_MAX_SHORT_RETRY_LIMIT 255 - -#define AP_DEFAULT_LONG_RETRY_LIMIT 4 -#define AP_MIN_LONG_RETRY_LIMIT 1 -#define AP_MAX_LONG_RETRY_LIMIT 255 - -#define AP_DEFAULT_ENABLE_WMM FALSE - -/** -* Define in AP Assoc mgr WIN7 Sample Code -*/ -/** Maximum number of stations we will cache state about */ -#define AP_STA_MAX_ENTRIES_DEFAULT 32 -#define AP_STA_MAX_ENTRIES_MIN 16 -#define AP_STA_MAX_ENTRIES_MAX 64 - -/** Time to wait for association request from station after auth success (in number of milliseconds) */ -#define AP_ASSOCIATION_REQUEST_TIMEOUT 100 - -/** Time in which the station has no activity we assume we have lost connectivity to that station (in number of seconds) */ -#define AP_NO_ACTIVITY_TIME 1800 -/** The interval of the station inactive timer, in milliseconds */ -#define AP_STA_INACTIVE_TIMER_INTERVAL 1000 - -#define AP_MAX_AID 2007 -#define AP_INVALID_AID 0xFFFF -#define AP_AID_TABLE_UNIT_SIZE 8 -#define AP_AID_TABLE_UNIT_MASK 0xFF -#define AP_AID_TABLE_SIZE (AP_MAX_AID/AP_AID_TABLE_UNIT_SIZE + 1) -#define AP_AID_HEADER 0xC000 - -#define AP_DESIRED_PHY_MAX_COUNT 1 - -#define MAC_HASH_BUCKET_NUMBER 256 - -/** MAC hash function */ -#define HASH_MAC(Mac) (((Mac)[5] ^ (Mac)[4]) % MAC_HASH_BUCKET_NUMBER) - -#define DOT11_MAX_MSDU_SIZE (2346U) - - - -/** - * Get access to the MP_EXTSTA_PORT from the MP_PORT - */ -#define MP_GET_AP_PORT(_Port) ((PMP_EXTAP_PORT)(_Port->ChildPort)) -#define AP_GET_MP_PORT(_ExtPort) ((PMP_PORT)(_ExtPort->ParentPort)) -#define AP_GET_VNIC(_ExtPort) (AP_GET_MP_PORT(_ExtPort)->VNic) -#define AP_GET_ADAPTER(_ExtPort) (AP_GET_MP_PORT(_ExtPort)->Adapter) -#define AP_GET_MP_HANDLE(_ExtPort) (AP_GET_MP_PORT(_ExtPort)->MiniportAdapterHandle) -#define AP_GET_PORT_NUMBER(_ExtPort) (AP_GET_MP_PORT(_ExtPort)->PortNumber) - -/** - * Get access to EXTAP components - */ -#define AP_GET_ASSOC_MGR(_ApPort) (&(_ApPort)->AssocMgr) -#define AP_GET_CONFIG(_ApPort) (&(_ApPort)->Config) -#define AP_GET_CAPABILITY(_ApPort) (&(_ApPort)->Capability) -#define AP_GET_REG_INFO(_ApPort) (&(_ApPort)->RegInfo) - -/** - * Get access to AP settings - */ - -/** Settings maintained by association manager */ -#define AP_GET_SSID(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->Ssid) -#define AP_GET_BSSID(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->Bssid) -#define AP_GET_CAPABILITY_INFO(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->Capability) -#define AP_GET_AUTH_ALGO(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->AuthAlgorithm) -#define AP_GET_UNICAST_CIPHER_ALGO(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->UnicastCipherAlgorithm) -#define AP_GET_MULTICAST_CIPHER_ALGO(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->MulticastCipherAlgorithm) -#define AP_GET_OPERATIONAL_RATE_SET(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->OperationalRateSet) -#define AP_GET_WPS_ENABLED(_ApPort) (AP_GET_ASSOC_MGR(_ApPort)->EnableWps) - -/** Settings maintained by config */ -#define AP_GET_BEACON_PERIOD(_ApPort) (AP_GET_CONFIG(_ApPort)->BeaconPeriod) -#define AP_GET_DTIM_PERIOD(_ApPort) (AP_GET_CONFIG(_ApPort)->DTimPeriod) -#define AP_GET_BEACON_IE(_ApPort) (AP_GET_CONFIG(_ApPort)->AdditionalBeaconIEData) -#define AP_GET_BEACON_IE_SIZE(_ApPort) (AP_GET_CONFIG(_ApPort)->AdditionalBeaconIESize) -#define AP_GET_PROBE_RESPONSE_IE(_ApPort) (AP_GET_CONFIG(_ApPort)->AdditionalResponseIEData) -#define AP_GET_PROBE_RESPONSE_IE_SIZE(_ApPort) (AP_GET_CONFIG(_ApPort)->AdditionalResponseIESize) - - /** commonly used MACROs */ -#define VALIDATE_AP_INIT_STATE(pAdapter) \ - { \ - if (GetAPState(pAdapter) != AP_STATE_STOPPED) \ - { \ - Status = NDIS_STATUS_INVALID_STATE; \ - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY | COMP_INIT | COMP_INDIC), DBG_LOUD, ("AP is not in INIT STATE\n"));\ - break; \ - } \ - } - -#define VALIDATE_AP_OP_STATE(pAdapter) \ - { \ - if (GetAPState(pAdapter) != AP_STATE_STARTED) \ - { \ - Status = NDIS_STATUS_INVALID_STATE; \ - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY | COMP_INIT | COMP_INDIC), DBG_LOUD, ("AP is not in OP STATE\n"));\ - break; \ - } \ - } - -extern DOT11_MAC_ADDRESS Dot11BroadcastAddress; - -/** Association Manager state */ -typedef enum _AP_ASSOC_MGR_STATE -{ - AP_ASSOC_MGR_STATE_NOT_INITIALIZED = 0, - AP_ASSOC_MGR_STATE_STARTING, - AP_ASSOC_MGR_STATE_STARTED, - AP_ASSOC_MGR_STATE_STOPPING, - AP_ASSOC_MGR_STATE_STOPPED -} AP_ASSOC_MGR_STATE, *PAP_ASSOC_MGR_STATE; - -//==M==> It might not need define in here -/** - * Station port state - */ -typedef enum _STA_PORT_STATE -{ - STA_PORT_STATE_INVALID = 0, - STA_PORT_STATE_OPEN, - STA_PORT_STATE_CLOSED -} STA_PORT_STATE, *PSTA_PORT_STATE; - -/** - * DOT11 Frame Class - * See definitions in 802.11 standard. - */ -typedef enum _DOT11_FRAME_CLASS -{ - DOT11_FRAME_CLASS_1, - DOT11_FRAME_CLASS_2, - DOT11_FRAME_CLASS_3, - DOT11_FRAME_CLASS_INVALID -} DOT11_FRAME_CLASS, *PDOT11_FRAME_CLASS; - -typedef struct _MP_EXTAP_PORT MP_EXTAP_PORT, *PMP_EXTAP_PORT; - -//For store Station mac address Link to AP Port -/** - * A hash table based on the MAC address of a station. - * Stations with the same hash value are organized as a linked list. - */ -typedef struct _MAC_HASH_TABLE { - /** - * the table - */ - LIST_ENTRY Buckets[MAC_HASH_BUCKET_NUMBER]; - - /** - * number of entries - */ - ULONG EntryCount; -} MAC_HASH_TABLE, *PMAC_HASH_TABLE; - -typedef const MAC_HASH_TABLE* PCMAC_HASH_TABLE; - -/** - * A hash table entry. - */ -typedef struct _MAC_HASH_ENTRY { - LIST_ENTRY Linkage; - - /** - * MAC address as the key of an entry - */ - DOT11_MAC_ADDRESS MacKey; -} MAC_HASH_ENTRY, *PMAC_HASH_ENTRY; - -/** - * Callback function for APEnumMacEntry. - * - * The callback can return FALSE to terminate the - * enumeration prematurely. - */ -typedef BOOLEAN -(*PENUM_MAC_ENTRY_CALLBACK)( - __in PMAC_HASH_TABLE Table, - __in PMAC_HASH_ENTRY MacEntry, - __in PVOID CallbackCtxt - ); - - -typedef const MAC_HASH_ENTRY* PCMAC_HASH_ENTRY; - - -// TODO: do we really need this? -/** ExtAP capability */ -typedef struct _AP_CAPABIITY -{ - /** Maximum number of SSIDs the NIC can support in OID_DOT11_SCAN_REQUEST */ - ULONG ScanSsidListSize; - - /** Maximum number of desired SSIDs the NIC can support */ - ULONG DesiredSsidListSize; - - /** Maximum number of Ethertype privacy exemptions the NIC can support */ - ULONG PrivacyExemptionListSize; - - /** Maximum number of associations the NIC can support */ - ULONG AssociationTableSize; - - // TODO: add other capabilities -} AP_CAPABIITY, *PAP_CAPABIITY; - -/** - * Settings read from the registry - */ -typedef struct _AP_REG_INFO -{ - /** number of allowed associations */ - ULONG AllowedAssociationCount; - - /** default channel/frequency */ - ULONG DefaultChannel; - - // TODO: AP Mode (mixed) - - /** group key renewal interval, in seconds */ - ULONG GroupKeyRenewalInterval; - - // TODO: transmission rate - - /** Beacon period, in TUs */ - ULONG BeaconPeriod; - - /** DTIM period, in beacon intervals */ - ULONG DTimPeriod; - - /** RTS threshold */ - ULONG RtsThreshold; - - /** Fragmentation threshold */ - ULONG FragmentationThreshold; - - /** Short retry limit */ - ULONG ShortRetryLimit; - - /** Long retry limit */ - ULONG LongRetryLimit; - - /** enable 5GHz or not */ - BOOLEAN Enable5GHz; - - /** enable CTS protection */ - BOOLEAN EnableCtsProtection; - - /** enable Frame burst */ - BOOLEAN EnableFrameBurst; - - /** enable WMM */ - BOOLEAN EnableWMM; -} AP_REG_INFO, *PAP_REG_INFO; - -/** - * ExtAP association manager - */ -typedef struct _AP_ASSOC_MGR -{ - /** ExtAP port */ - PMP_EXTAP_PORT ApPort; - - /** state of Association Manager */ - AP_ASSOC_MGR_STATE State; - - /** - * Hash table for the stations - */ - MAC_HASH_TABLE MacHashTable; - - /** - * Lock we need before we adding/removing entries from the - * hash table. This will be acquired for read by - * routines that are not modifying the table and acquired - * for write by routines that will be removing entries or - * adding entries to the table. - */ - //MP_READ_WRITE_LOCK MacHashTableLock; - - /** AID table, a bit for each AID */ - UCHAR AidTable[AP_AID_TABLE_SIZE]; - - /** - * Association related configurations - * A lock is NOT required when updating/querying these configurations - */ - - /** SSID that we advertise (we only support one SSID) */ - DOT11_SSID Ssid; - - /** AP BSSID */ - DOT11_MAC_ADDRESS Bssid; - - /** Capability information */ - DOT11_CAPABILITY Capability; - - /** Currently enabled authentication algorithm */ - DOT11_AUTH_ALGORITHM AuthAlgorithm; - - /** Currently enabled unicast cipher algorithm */ - DOT11_CIPHER_ALGORITHM UnicastCipherAlgorithm; - - /** Currently enabled multicast cipher algorithm */ - DOT11_CIPHER_ALGORITHM MulticastCipherAlgorithm; - - /** Use default auth cipher algorithms **/ - BOOLEAN bUseDefaultAlgorithms; - - /** Operational rate set */ - DOT11_RATE_SET OperationalRateSet; - - /** Current setting related to acceptance of unencrypted data */ - BOOLEAN ExcludeUnencrypted; - PDOT11_PRIVACY_EXEMPTION_LIST PrivacyExemptionList; - - /** Enable WPS */ - BOOLEAN EnableWps; - - /** Scan related data */ - /** Scan in process */ - LONG ScanInProcess; - - /** Local copy of scan request */ - PDOT11_SCAN_REQUEST_V2 ScanRequest; - - /** Scan request ID */ - PVOID ScanRequestId; - - /** - * Station inactive timer - * When the timer fires, the inactive time of each - * station is incremented by 1. - */ - NDIS_HANDLE StaInactiveTimer; - - /** - * This is actually the count of the associated - * stations because each station is going to - * increase the counter by 1 when it is associated - * and decrement by 1 when it is disassociated. - */ - LONG StaInactiveTimerCounter; - - /** For signalling the completion of a synchronous start request */ - NDIS_STATUS StartBSSCompletionStatus; - NDIS_EVENT StartBSSCompletionEvent; - NDIS_EVENT StopBSSCompletionEvent; - - NDIS_STATUS SetChannelCompletionStatus; - NDIS_EVENT SetChannelCompletionEvent; - -} AP_ASSOC_MGR, *PAP_ASSOC_MGR; - -/** - * Tracks the state of a station - */ -typedef struct _AP_STA_ENTRY -{ - /** - * MAC hash entry. - * This is used for hash table operations. - */ - MAC_HASH_ENTRY MacHashEntry; - - /** - * Pointer to the association manager - * where the station is managed. - */ - PAP_ASSOC_MGR AssocMgr; - - /** Capability information */ - DOT11_CAPABILITY CapabilityInformation; - - /** Listen interval */ - USHORT ListenInterval; - - /** Supported rates */ - DOT11_RATE_SET SupportedRateSet; - - /** Current association state of the station */ - DOT11_ASSOCIATION_STATE AssocState; - - /** Current association ID */ - USHORT Aid; - - /** Power mode */ - DOT11_POWER_MODE PowerMode; - - /** Auth algorithm */ - DOT11_AUTH_ALGORITHM AuthAlgo; - - /** Unicast cipher algorithm */ - DOT11_CIPHER_ALGORITHM UnicastCipher; - - /** Multicast cipher algorithm */ - DOT11_CIPHER_ALGORITHM MulticastCipher; - - /** WPS enabled */ - BOOLEAN WpsEnabled; - - /** Association timer */ - NDIS_HANDLE AssocTimer; - - /** Waiting for association request */ - LONG WaitingForAssocReq; - - /** - * Association up time, i.e. timestamp at which association is completed with success. - * Timestamp value is returned by NdisGetCurrentSystemTime - */ - LARGE_INTEGER AssocUpTime; - - /** Statistics */ - DOT11_PEER_STATISTICS Statistics; - - /** - * Station reference count. - * Indicate the number of external functions - * that are accessing the station entry. - * The reference count is 1 when an entry is created. - * It is deleted when the reference count reaches zero. - */ - LONG RefCount; - -#if 0 - /** Buffer for association complete indication */ - PDOT11_INCOMING_ASSOC_COMPLETION_PARAMETERS AssocCompletePara; - ULONG AssocCompleteParaSize; - - /** Received association request */ - PDOT11_MGMT_HEADER AssocReqFrame; - USHORT AssocReqFrameSize; -#endif - /** Association decision */ - BOOLEAN AcceptAssoc; - USHORT Reason; - - /** - * Inactive time. - * Indicates how long the station has been inactive, in seconds. - */ - LONG InactiveTime; - - /** - * Port state - * This is used to decide whether a non-forced scan - * shall be allowed or not. - */ - STA_PORT_STATE PortState; -} AP_STA_ENTRY, *PAP_STA_ENTRY; - -/** - * Holds current ExtAP configuration of the miniport that - * are not managed by association manager. - * These configurations can be updated and/or queried via OIDs request from the OS. - * A lock is NOT needed when updating/querying these configurations. - * This data is stateless so we don't need a flag to indicate whether it is initialized or not. - */ - - -typedef struct _AP_CONFIG -{ - /** ExtAP port */ - PMP_EXTAP_PORT ApPort; - - /** The types of auto configuration for 802.11 parameters that are enabled */ - ULONG AutoConfigEnabled; - - /** Beacon period, in TUs */ - ULONG BeaconPeriod; - - /** DTIM period, in beacon intervals */ - ULONG DTimPeriod; -#if 0 // remove it after confirmed - /** RTS threshold */ - ULONG RtsThreshold; - - /** Short retry limit */ - ULONG ShortRetryLimit; - - /** Long retry limit */ - ULONG LongRetryLimit; - - /** Fragmentation threshold */ - ULONG FragmentationThreshold; - - /** Current operating frequency channel list for the DSSS/HRDSSS/ERP PHY */ - ULONG CurrentChannel; - - /** Current operating frequency channel list for the OFDM PHY */ - ULONG CurrentFrequency; - - /** Current PHY ID */ - ULONG CurrentPhyId; - -#endif - - /** Default key ID */ - ULONG CipherDefaultKeyId; - - /** Desired PHY ID list */ - ULONG DesiredPhyList[AP_DESIRED_PHY_MAX_COUNT]; - ULONG DesiredPhyCount; - -}AP_CONFIG, *PAP_CONFIG; - -/** ExtAP port */ -typedef struct _MP_EXTAP_PORT -{ - /** parent port */ - PMP_PORT ParentPort; - - /** ExtAP capability */ - AP_CAPABIITY Capability; - - /** Registry settings */ - AP_REG_INFO RegInfo; - - /** - * AP reference count. - * Indicate the number of external functions - * that are accessing the AP port. - * The AP port cannot be terminated - * until it reaches zero. - */ - LONG RefCount; - - /** current AP configuration */ - AP_CONFIG Config; - - /** association manager */ - AP_ASSOC_MGR AssocMgr; - - // TODO: statistics -} MP_EXTAP_PORT, *PMP_EXTAP_PORT; - -#endif // _AP_DEFS_H - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.c deleted file mode 100644 index bcc87946..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.c +++ /dev/null @@ -1,1148 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N62C_Init.tmh" -#endif - -VOID -N62CCopyDefaultVariablesToExt( - IN PADAPTER Adapter - ) -{ - Adapter->HWDescHeadLength = - GetDefaultAdapter(Adapter)->HWDescHeadLength; - - Adapter->TXPacketShiftBytes = - GetDefaultAdapter(Adapter)->TXPacketShiftBytes; - - Adapter->MAX_TRANSMIT_BUFFER_SIZE = - GetDefaultAdapter(Adapter)->MAX_TRANSMIT_BUFFER_SIZE; - - Adapter->RT_TCB_NUM = GetDefaultAdapter(Adapter)->RT_TCB_NUM; - - Adapter->RT_LOCAL_BUF_NUM = - GetDefaultAdapter(Adapter)->RT_LOCAL_BUF_NUM; - - Adapter->RT_LOCAL_FW_BUF_NUM = - GetDefaultAdapter(Adapter)->RT_LOCAL_FW_BUF_NUM; - - Adapter->RT_TXDESC_NUM = GetDefaultAdapter(Adapter)->RT_TXDESC_NUM; - - Adapter->RT_TXDESC_NUM_BE_QUEUE = - GetDefaultAdapter(Adapter)->RT_TXDESC_NUM_BE_QUEUE; - - Adapter->MAX_RECEIVE_BUFFER_SIZE = - GetDefaultAdapter(Adapter)->MAX_RECEIVE_BUFFER_SIZE; - - Adapter->MAX_NUM_RFD = GetDefaultAdapter(Adapter)->MAX_NUM_RFD; - Adapter->MAX_NUM_RX_DESC = GetDefaultAdapter(Adapter)->MAX_NUM_RX_DESC; -} - - -NDIS_STATUS -N62CInitializeExtAdapter( - IN PADAPTER pAdapter, - IN NDIS_HANDLE MiniportAdapterHandle, - IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ) -{ - // return this status - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - RT_STATUS RtStatus = NDIS_STATUS_FAILURE; - PMGNT_INFO pMgntInfo = NULL; - PRT_NDIS6_COMMON pNdisCommon = NULL; - - - // N62C Specific Resource Elements -------------------------- - BOOLEAN bMgntVariableInitialized = FALSE, - bRxVariableInitialized = FALSE, - bBeaconBufferInitialized = FALSE; - // ------------------------------------------------------ - - RES_MON_OBJ ResMonObj; - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pAdapter); - PRT_SDIO_DEVICE Defualtsdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - - RT_TRACE(COMP_DBG, DBG_TRACE, ("===> N62CInitializeExtAdapter() SDIO\n")); - - INIT_RES_MON_OBJ(ResMonObj); - - pAdapter->HardwareType = pDefaultAdapter->HardwareType; - - sdiodevice->pAdapter = pAdapter; - sdiodevice->hNdisAdapter = MiniportAdapterHandle; - pMgntInfo = &(pAdapter->MgntInfo); - pNdisCommon = pAdapter->pNdisCommon; - - pNdisCommon->NdisVersion = pDefaultAdapter->pNdisCommon->NdisVersion; - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("NdisVersion direct get 0x%x\n", pNdisCommon->NdisVersion)); - - sdiodevice->FunctionalDeviceObject =Defualtsdiodevice->FunctionalDeviceObject; - sdiodevice->pSdioDevObj = Defualtsdiodevice->pSdioDevObj; - sdiodevice->pPhysDevObj = Defualtsdiodevice->pPhysDevObj; -#if USE_WDF_SDIO - sdiodevice->hWdfDevice = Defualtsdiodevice->hWdfDevice; -#endif - sdiodevice->RxNetBufferListPool = Defualtsdiodevice->RxNetBufferListPool; - - pAdapter->NdisSdioDev.pAdapter=pAdapter; - pAdapter->pNdisCommon->hNdisAdapter= MiniportAdapterHandle; - - - pAdapter->pNdisCommon->WDISupport = pDefaultAdapter->pNdisCommon->WDISupport; - - N62CCopyDefaultVariablesToExt(pAdapter); - - // Initialize event. - NdisInitializeEvent(&(sdiodevice->evtSendingNBLCompleted)); - - // SyncIo Method 2. - KeInitializeEvent( &(sdiodevice->SyncIoEvent), NotificationEvent, TRUE); - - //To avoid allociate pfirmware again. - pAdapter->bInitByExtPort=TRUE; - //For debug by Maddest - HalAssociateNic(pAdapter, FALSE); - // ExtPort do not need this!! - //ADD_RES_TO_MON(ResMonObj, InitRM_AsocNIC); // Add to resource monitor. - sdiodevice->nIrpPendingCnt = 0; - - // Read the registry parameters - ndisStatus= N6SdioReadRegParameters(sdiodevice); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioReadRegParameters(X): Read Registry Parameter Failed!\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto error; - } - - InitializeTxVariables(pAdapter); - - InitializeRxVariables(pAdapter); - bRxVariableInitialized = TRUE; - - InitializeMgntVariables(pAdapter); - bMgntVariableInitialized = TRUE; - - - - //---------------------------------------------------------------------------- - // Update the parameter read from registery to coresponding ones in MGNT_INFO. - // NOTE! These modification should be after InitializeMgntVariables() which is called by - // NicIFAssociateNIC(). - // 2005.01.13, by rcnjko. - // - N6UpdateDefaultSetting(pAdapter); - - pAdapter->bInHctTest = pDefaultAdapter->bInHctTest; - // TODO: We should not set HW Setting Here - - //---------------------------------------------------------------------------- - - pNdisCommon->MaxPktSize=NIC_MAX_PACKET_SIZE; - - // Read adapter information such as MAC address from EEPROM - // - // Read data from EEPROM and do some customization - // according to custermer ID read from EEPROM. - // - //NicIFReadAdapterInfo(pAdapter); - Dot11_UpdateDefaultSetting(pAdapter); - HT_UpdateDefaultSetting(pAdapter); - VHT_UpdateDefaultSetting(pAdapter); - - {// make sure that DefaultAdapter is currently available. - PHAL_DATA_TYPE pExtHalData = GET_HAL_DATA(pAdapter); // the same one - PHAL_DATA_TYPE pDefaultHalData = GET_HAL_DATA(pDefaultAdapter); - - PMGNT_INFO pDefaultMgntInfo = &(pDefaultAdapter->MgntInfo); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - pAdapter->EepromAddressSize = pDefaultAdapter->EepromAddressSize; - - PlatformMoveMemory(pAdapter->PermanentAddress, pDefaultAdapter->PermanentAddress, 6); - pAdapter->bInHctTest = pDefaultAdapter->bInHctTest; - pMgntInfo->bSupportTurboMode = pDefaultMgntInfo->bSupportTurboMode; - pMgntInfo->bAutoTurboBy8186 = pDefaultMgntInfo->bAutoTurboBy8186; -// pMgntInfo->bInactivePs = pDefaultMgntInfo->bInactivePs; -// pMgntInfo->bIPSModeBackup = pDefaultMgntInfo->bIPSModeBackup; -// pMgntInfo->bLeisurePs = pDefaultMgntInfo->bLeisurePs; - pMgntInfo->pStaQos->QosCapability = pDefaultMgntInfo->pStaQos->QosCapability; - pMgntInfo->SecurityInfo.RegSWTxEncryptFlag = pDefaultMgntInfo->SecurityInfo.RegSWTxEncryptFlag; - pMgntInfo->SecurityInfo.RegSWRxDecryptFlag = pDefaultMgntInfo->SecurityInfo.RegSWRxDecryptFlag; - } - - DefragInitialize(pAdapter); - - - RtStatus = MgntAllocateBeaconBuf(pAdapter); - - if(RtStatus!=RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("MgntAllocateBeaconBuf(pAdapter) failed: %#X\n", RtStatus)); - ndisStatus = NDIS_STATUS_FAILURE; - goto error; - } - else bBeaconBufferInitialized = TRUE; - - if(pNdisCommon->bOverrideAddress) - { - USHORT nIdx; - for(nIdx = 0; nIdx < 6; nIdx++) - { - //PlatformEFIOWrite1Byte(pAdapter, (IDR0+nIdx), pNdisCommon->CurrentAddress[nIdx]); - pAdapter->CurrentAddress[nIdx] = pNdisCommon->CurrentAddress[nIdx]; - } - } - else - { - ETH_COPY_NETWORK_ADDRESS(pNdisCommon->CurrentAddress, pAdapter->PermanentAddress); - } - - // - // Before setting of attributes, update the native 802.11 related variable. - // 2006.10.09, by shien chang. - // - ndisStatus = N6SdioAllocateNative80211MIBs(pAdapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6AllocateNative80211MIBs failed\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto error; - } - - ADD_RES_TO_MON(ResMonObj, InitRM_AllocNWifi); - - N6InitializeNative80211MIBs(pAdapter); - - - // Initialize common NDIS resource in PRT_NDIS6_COMMON. 2006.05.07, by rcnjko. - InitNdis6CommonResources(pAdapter); - ADD_RES_TO_MON(ResMonObj, InitRM_CommonRS); - - - pMgntInfo->NdisVersion = MgntTranslateNdisVersionToRtNdisVersion(pNdisCommon->NdisVersion); - -#if POWER_MAN - sdiodevice->CurrentPowerState = NdisDeviceStateD0; -#endif - - // - // Mark the miniport driver as paused state. - // Note that, please keep this action as last one in MiniportInitializeEx(). - // - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSED); - - RT_TRACE(COMP_DBG, DBG_TRACE, ("<=== N62CInitializeExtAdapter(), Initialized Successfully!\n")); - return ndisStatus; - -error: - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== N62CInitializeExtAdapter(), Initialize failed, clean up resources.\n")); - - if(bBeaconBufferInitialized) MgntFreeBeaconBuf(pAdapter); - if(bMgntVariableInitialized) DeInitializeMgntVariables(pAdapter); - if(bRxVariableInitialized) DeInitializeRxVariables(pAdapter); - - CLEANUP_RES_IN_MON(ResMonObj, pAdapter); - return ndisStatus; - -} - - -/* - *2008/05/09 Add by Mars - * - * Win 7 Initialize Here, for tell N62 initial process we use compile flag - * Here Initialize everything releated N62 - * - * @param pAdapter is driver main strucutre. -*/ - -NDIS_STATUS -N62CInitialize( - IN PADAPTER pAdapter, - IN NDIS_HANDLE MiniportAdapterHandle, - IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u1Byte i; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pExtAdapter = NULL; - - - RT_TRACE(COMP_INIT, DBG_LOUD, ("===>N62CInitialize()\n")); - - - // Allocate Ndis 6.20+ PortCommonComponent ----------------------------------------------------------- - ndisStatus = N62CAllocatePortCommonComponent(pDefaultAdapter); - if(ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: N62CAllocatePortCommonComponent: Failure!\n", __FUNCTION__)); - return NDIS_STATUS_FAILURE; - } - // ------------------------------------------------------------------------------------------------ - - - // Allocate Ndis 6.20+ PortSpecificComponent ------------------------------------------------------------ - ndisStatus = N62CAllocatePortSpecificComponent(pDefaultAdapter); - if(ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: N62CAllocatePortSpecificComponent: Failure!\n", __FUNCTION__)); - N62CFreePortCommonComponent(pDefaultAdapter); - return NDIS_STATUS_FAILURE; - } - // ------------------------------------------------------------------------------------------------ - - - // Initialize variables for Ndis 6.20+ --- - N62CInitVariable(pDefaultAdapter); - // ------------------------------- - - - // Prepare Each Extension Port ------------------------------------------------------------------------ - for( i = 1; i < MP_DEFAULT_NUMBER_OF_PORT; i++) - { - ndisStatus = N62CAllocateExtAdapter(pDefaultAdapter, &pExtAdapter, MiniportAdapterHandle); - - if(ndisStatus != NDIS_STATUS_SUCCESS) - { - - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s: N62CAllocateExtAdapter: Failure!\n", __FUNCTION__)); - break; - } - - cpMacAddr(pExtAdapter->CurrentAddress,pDefaultAdapter->CurrentAddress); - - PlatformMoveMemory( - pExtAdapter->pNdis62Common, - pDefaultAdapter->pNdis62Common, - sizeof(RT_NDIS62_COMMON) - ); - - pExtAdapter->pNdis62Common->PortNumber= 0; - pExtAdapter->bHWInitReady = pDefaultAdapter->bHWInitReady; - RT_TRACE(COMP_INIT, DBG_LOUD, ("N62CInitialize(), set pExtAdapter->bHWInitReady=pDefaultAdapter->bHWInitReady = %d\n", - pDefaultAdapter->bHWInitReady)); - pExtAdapter->bSWInitReady = FALSE; - - ndisStatus = N62CInitializeExtAdapter( - pExtAdapter, - MiniportAdapterHandle, - MiniportInitParameters - ); - - if(ndisStatus != NDIS_STATUS_SUCCESS) - { - // Release the resource allocated in N62CAllocateExtAdapter - N62CFreePortSpecificComponent(pExtAdapter); - N6FreeAdapter(pExtAdapter); - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("%s: N62CInitializeExtAdapter: Failure!\n", __FUNCTION__)); - break; - } - - - //======================================================= - // Check Point: All Resources are Prepared for Extension Port - //======================================================= - - // MultiPort Adapter Initialization ------------------------------ - MultiPortInsertIdleExtAdapter(pDefaultAdapter, pExtAdapter); - // -------------------------------------------------------- - - pExtAdapter->pNdis62Common->PortType=EXTSTA_PORT; - pExtAdapter->pNdis62Common->CurrentOpState=INIT_STATE; - pExtAdapter->pNdis62Common->bWPSEnable=FALSE; - pExtAdapter->bSWInitReady=TRUE; - } - // ----------------------------------------------------------------------------------------------- - - - if(ndisStatus != NDIS_STATUS_SUCCESS) - { - // Free All Extension Ports - NDIS_6_2_FREE_EXTENSION_COMPONENT(pDefaultAdapter); - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%d Adapters have been allocated <===N62CInitialize ()\n", i)); - } - - return ndisStatus; -} - -NDIS_STATUS -N62CAllocateExtAdapter( - IN PADAPTER pDefaultAdapter, - IN PADAPTER *ppHelperAdapter, - IN NDIS_HANDLE MiniportAdapterHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - do - { - // - // Allocate the adapter structure. - // - rtStatus = PlatformAllocateMemory( - pDefaultAdapter, - (PVOID*)&(*ppHelperAdapter), - sizeof(ADAPTER) - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N62CAllocateExtAdapter(): failed to allocate ExtAdapter!!!\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - else - { - PlatformZeroMemory((*ppHelperAdapter), sizeof(ADAPTER)); - } - - // - // Allocate RT_NDIS6_COMMON. - // - rtStatus = PlatformAllocateMemory( - pDefaultAdapter, - (PVOID)&((*ppHelperAdapter)->pNdisCommon), - sizeof(RT_NDIS6_COMMON) - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N62CAllocateExtAdapter(): failed to allocate RT_NDIS6_COMMON for the ExtAdapter!!!\n")); - PlatformFreeMemory(*ppHelperAdapter, sizeof(ADAPTER)); - - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - else - { - PlatformZeroMemory((*ppHelperAdapter)->pNdisCommon, sizeof(RT_NDIS6_COMMON)); - } - - - // - // Store Handle to the ext adapter. - // - (*ppHelperAdapter)->pNdisCommon->hNdisAdapter = MiniportAdapterHandle; - - - - // Port Common Info ------------------------------------------------------- - (*ppHelperAdapter)->pPortCommonInfo = pDefaultAdapter->pPortCommonInfo; - // ---------------------------------------------------------------------- - - - // - // Allocate mgnt. - // - PlatformZeroMemory(&((*ppHelperAdapter)->MgntInfo), sizeof(MGNT_INFO)); - rtStatus = MgntAllocMemory((*ppHelperAdapter)); - if(rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N62CAllocateExtAdapter(): failed to allocate MGNT_INFO for the ExtAdapter!!!\n")); - - PlatformFreeMemory((*ppHelperAdapter)->pNdisCommon, sizeof(RT_NDIS6_COMMON)); - - PlatformFreeMemory((*ppHelperAdapter), sizeof(ADAPTER)); - - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - - - - ndisStatus = N62CAllocatePortSpecificComponent(*ppHelperAdapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N62CAllocateExtAdapter(): failed to allocate RT_NDIS6_COMMON for the ExtAdapter!!!\n")); - - MgntFreeMemory((*ppHelperAdapter)); - - PlatformFreeMemory((*ppHelperAdapter)->pNdisCommon, sizeof(RT_NDIS6_COMMON)); - - PlatformFreeMemory((*ppHelperAdapter), sizeof(ADAPTER)); - - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - - }while(FALSE); - - return ndisStatus; - -} - -// -// Modified from N6PciHalt(). -// by haich. -// -VOID -N62CFreeExtAdapter( - IN PADAPTER pExtAdapter -) -{ - PADAPTER pDefaultAdapter= GetDefaultAdapter(pExtAdapter); - PRT_NDIS6_COMMON pNdisCommon = pExtAdapter->pNdisCommon; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("===> N62CFreeExtAdapter()\n")); - - pExtAdapter->bDriverStopped = TRUE; - - // For AP mode. 2005.06.30, by rcnjko. - if(ACTING_AS_AP(pExtAdapter)) - { - AP_DisassociateAllStation(pExtAdapter, unspec_reason); - NdisMSleep(500); // Sleep for a while here to allow disasoc completed sending out. - } - - - // Release common NDIS resource - ReleaseNdis6CommonResources(pExtAdapter); - - N6SdioFreeNative80211MIBs(pExtAdapter); - - DeInitializeMgntVariables(pExtAdapter); - - DeInitializeRxVariables(pExtAdapter); - - - PlatformAcquireSpinLock(pExtAdapter, RT_RX_SPINLOCK); - PlatformAcquireSpinLock(pExtAdapter, RT_TX_SPINLOCK); - - // Return all packets queued in AP mode. 2005.06.21, by rcnjko. - AP_PS_ReturnAllQueuedPackets(pExtAdapter, FALSE); - - MgntFreeBeaconBuf( pExtAdapter ); - - PlatformReleaseSpinLock(pExtAdapter, RT_TX_SPINLOCK); - PlatformReleaseSpinLock(pExtAdapter, RT_RX_SPINLOCK); - - N62CFreePortSpecificComponent(pExtAdapter); - - N6FreeAdapter(pExtAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<=== N62CFreeExtAdapter()\n")); -} - -NDIS_STATUS -N62CAllocatePortCommonComponent( - IN PADAPTER pAdapter -) -{ - // Allocate Port Common Component for Ndis 6.20+ - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - do - { - // Allocate the helper structure that is shared by every adapter ------------------------------------------------------------------------ - rtStatus = PlatformAllocateMemory( - pAdapter, - &(pPortCommonInfo->pPortHelper), - sizeof(PORT_HELPER) - ); - - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N62CAllocatePortCommonComponent(): failed to allocate memory for the HELPER structure.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - else - { - PlatformZeroMemory(pPortCommonInfo->pPortHelper, sizeof(PORT_HELPER)); - } - // --------------------------------------------------------------------------------------------------------------------------- - - - - // Allocate the WorkItem to Create and Delete Ports ------------------------------------------------------------------------ - rtStatus = PlatformInitializeWorkItem(pAdapter, - &(pPortCommonInfo->pPortHelper->CreateDeleteMacWorkitem), - ( RT_WORKITEM_CALL_BACK) N62CCreateDeleteMacWorkItemCallback, - (PVOID) pAdapter, - "Ndis62CreateDeleteWorkitem" - ); - - - PlatformInitializeTimer( - pAdapter, - &(pPortCommonInfo->pPortHelper->CreateDeleteMacTimer), - (RT_TIMER_CALL_BACK)N62CCreateDeleteMacTimerCallback, - NULL, - "CreateDeleteMacTimer"); - - - if(rtStatus != RT_STATUS_SUCCESS) - { - PlatformFreeMemory(pPortCommonInfo->pPortHelper, sizeof(PORT_HELPER)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N62CAllocatePortCommonComponent(): WorkItem Creation Failure.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - // ------------------------------------------------------------------------------------------------------------------ - } while(FALSE); - - return ndisStatus; -} - -VOID -N62CFreePortCommonComponent( - IN PADAPTER pAdapter -) -{ - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - PlatformFreeWorkItem( &(pPortCommonInfo->pPortHelper->CreateDeleteMacWorkitem)); - PlatformReleaseTimer(pAdapter, &(pPortCommonInfo->pPortHelper->CreateDeleteMacTimer)); - PlatformFreeMemory(pPortCommonInfo->pPortHelper, sizeof(PORT_HELPER)); -} - -NDIS_STATUS -N62CAllocatePortSpecificComponent( - IN PADAPTER pAdapter -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - do - { - // - // Allocate Ndis62Common - // - rtStatus = PlatformAllocateMemory( - pAdapter, - &(pAdapter->pNdis62Common), - sizeof(RT_NDIS62_COMMON) - ); - - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N62CAllocatePortSpecificComponent(): failed to allocate memory for pNdis62Common.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - else - { - PlatformZeroMemory(pAdapter->pNdis62Common, sizeof(RT_NDIS62_COMMON)); - } - - } while(FALSE); - - return ndisStatus; -} - -VOID -N62CFreePortSpecificComponent( - IN PADAPTER pAdapter -) -{ - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("===>N62CFreePortSpecificComponent()\n")); - - PlatformFreeMemory(pAdapter->pNdis62Common, sizeof(RT_NDIS62_COMMON)); - pAdapter->pNdis62Common = NULL; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<===N62CFreePortSpecificComponent()\n")); -} - - -/* - *2008/05/09 Add by Mars - * - * To Register the AP and Ndis 6.2 Releated Attribute - * - * @param pAdapter is driver main strucutre. -*/ - -NDIS_STATUS -N62CSet80211Attributes( - IN PADAPTER pAdapter - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - NDIS_MINIPORT_ADAPTER_ATTRIBUTES Dot11Attributes; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PDOT11_VWIFI_ATTRIBUTES pVWiFiAttribs = NULL; - RT_STATUS rtStatus; - NIC_SUPPORTED_AUTH_CIPHER_PAIRS SupportedAuthCipherAlgs = {0}; - u4Byte BytesWritten, BytesNeeded; - u1Byte tempAuthType = 0; - - ULONG vwifiAttrSize = 0; - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - BOOLEAN bStartVwifi = TRUE; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - - PlatformZeroMemory(&Dot11Attributes, sizeof(NDIS_MINIPORT_ADAPTER_ATTRIBUTES)); - - //Modify by Maddest for support Win 7, 2008,04,21 - //For Platform Independent We will set Attribute in WIN 7 function - Dot11Attributes.Native_802_11_Attributes.Header.Type=NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES; - //NDIS 6 - Dot11Attributes.Native_802_11_Attributes.Header.Revision=NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_2; - Dot11Attributes.Native_802_11_Attributes.Header.Size=NDIS_SIZEOF_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES_REVISION_2; - - Dot11Attributes.Native_802_11_Attributes.OpModeCapability = pNdisCommon->dot11OperationModeCapability.uOpModeCapability; - Dot11Attributes.Native_802_11_Attributes.NumOfTXBuffers = pNdisCommon->dot11OperationModeCapability.uNumOfTXBuffers; - Dot11Attributes.Native_802_11_Attributes.NumOfRXBuffers = pNdisCommon->dot11OperationModeCapability.uNumOfRXBuffers; - Dot11Attributes.Native_802_11_Attributes.MultiDomainCapabilityImplemented = pNdisCommon->dot11MultiDomainCapabilityImplemented; - Dot11Attributes.Native_802_11_Attributes.NumSupportedPhys = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries;//NATIVE_802_11_CURR_NUM_PHY_TYPES;//pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; - - // - // SupportedPhyAttributes attributes. - // - if (Dot11Attributes.Native_802_11_Attributes.NumSupportedPhys) - { - rtStatus = PlatformAllocateMemory( - pAdapter, - &(Dot11Attributes.Native_802_11_Attributes.SupportedPhyAttributes), - Dot11Attributes.Native_802_11_Attributes.NumSupportedPhys * sizeof(DOT11_PHY_ATTRIBUTES) - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): failed to allocate memory for SupportedPhyAttributes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.Native_802_11_Attributes.SupportedPhyAttributes, - Dot11Attributes.Native_802_11_Attributes.NumSupportedPhys * sizeof(DOT11_PHY_ATTRIBUTES)); - N6SdioFill80211PhyAttributes(pAdapter, &(Dot11Attributes.Native_802_11_Attributes)); - } - - vwifiAttrSize = sizeof(DOT11_VWIFI_ATTRIBUTES) + - (NUM_SUPPORTED_VWIFI_COMBINATIONS) * sizeof(DOT11_VWIFI_COMBINATION); - - rtStatus = PlatformAllocateMemory( - pAdapter, - &(Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes), - vwifiAttrSize - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N62CSet80211Attributes(): failed to allocate memory for VWiFiAttributes(HVL)\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - //pVWiFiAttribs = (PDOT11_VWIFI_ATTRIBUTES)&(Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes); - - PlatformZeroMemory(Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes, vwifiAttrSize); - - - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_VWIFI_ATTRIBUTES_REVISION_1, - sizeof(DOT11_VWIFI_ATTRIBUTES)); - - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->uTotalNumOfEntries = NUM_SUPPORTED_VWIFI_COMBINATIONS; - - // support for Infra-Infra - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->Combinations[0].Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_VWIFI_COMBINATION_REVISION_1, - sizeof(DOT11_VWIFI_COMBINATION)); - - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->Combinations[0].uNumInfrastructure = 1; - - // support for Infra-SoftAP - // TODO: Sample Driver do this, but a little weird - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->Combinations[0].Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_VWIFI_COMBINATION_REVISION_1, - sizeof(DOT11_VWIFI_COMBINATION)); - - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->Combinations[1].uNumInfrastructure = 1; - Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes->Combinations[1].uNumSoftAP = 1; - - - // - // ExtSTAAttributes attributes. - // - rtStatus = PlatformAllocateMemory( - pAdapter, - &(Dot11Attributes.Native_802_11_Attributes.ExtSTAAttributes), - sizeof(DOT11_EXTSTA_ATTRIBUTES) - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): failed to allocate memory for ExtSTAAttributes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.Native_802_11_Attributes.ExtSTAAttributes, - sizeof(DOT11_EXTSTA_ATTRIBUTES)); - - // - // Get the supported authentication and cipher algorithm. - // - PlatformZeroMemory(&SupportedAuthCipherAlgs, sizeof(NIC_SUPPORTED_AUTH_CIPHER_PAIRS)); - - // Store current mode and switch to infrastructure mode. - // - - tempAuthType = pAdapter->MgntInfo.Regdot11networktype; - pAdapter->MgntInfo.Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - - // Unicast & Infrastructure. - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - pAdapter, - &(SupportedAuthCipherAlgs.pInfraUcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR under infra mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): failed to query unicast auth cipher pairs under infra mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Multicast & Infrastructure. - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - pAdapter, - &(SupportedAuthCipherAlgs.pInfraMcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR under infra mode.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - PlatformZeroMemory(SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): failed to query multicast auth cipher pairs under infra mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Switch to adhoc mode. - // - pAdapter->MgntInfo.Regdot11networktype = RT_JOIN_NETWORKTYPE_ADHOC; - // Unicast & Adhoc. - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - pAdapter, - &(SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR under adhoc mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): failed to query unicast auth cipher pairs under adhoc mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Multicast & Adhoc. - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - pAdapter, - &(SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR under adhoc mode.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - PlatformZeroMemory(SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - pAdapter, - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6usbSet80211Attributes(): failed to query multicast auth cipher pairs under adhoc mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Switch back to origin mode. - // - pAdapter->MgntInfo.Regdot11networktype = tempAuthType; - - N6Fill80211ExtStaAttributes(pAdapter, &(Dot11Attributes.Native_802_11_Attributes), &SupportedAuthCipherAlgs); - - // - // Register Ndis 6.2 AP Mode - // - //Set Extension AP Mode - - if(bStartVwifi) - { - Dot11Attributes.Native_802_11_Attributes.OpModeCapability |= DOT11_OPERATION_MODE_EXTENSIBLE_AP; - - PlatformAllocateMemory(pAdapter, - &(Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes), - sizeof(DOT11_EXTAP_ATTRIBUTES)); - - if(Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Allocate Ndis 6.2 ExtAPAttributes Fail\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes, sizeof(DOT11_EXTAP_ATTRIBUTES)); - - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_EXTAP_ATTRIBUTES_REVISION_1, - sizeof(DOT11_EXTAP_ATTRIBUTES)); - - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uScanSSIDListSize = AP_SCAN_SSID_LIST_MAX_SIZE; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uPrivacyExemptionListSize = NATIVE_802_11_MAX_PRIVACY_EXEMPTION; - // TODO: Get the real Size Some day - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uDefaultKeyTableSize = DOT11_MAX_NUM_DEFAULT_KEY;//VNic11DefaultKeyTableSize(vnic); - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uWEPKeyValueMaxLength = ( 104 / 8);//VNic11WEP104Implemented(vnic) ? - // 104 / 8 : (VNic11WEP40Implemented(vnic) ? 40 / 8 : 0); - - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uDesiredSSIDListSize = AP_DESIRED_SSID_LIST_MAX_SIZE; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->bStrictlyOrderedServiceClassImplemented = AP_STRICTLY_ORDERED_SERVICE_CLASS_IMPLEMENTED; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uAssociationTableSize = AP_DEFAULT_ALLOWED_ASSOCIATION_COUNT; - - // - // 11d stuff. - // - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uNumSupportedCountryOrRegionStrings = 0; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->pSupportedCountryOrRegionStrings = NULL; - - // In Ndis 6.0 We use Ad hoc to simulize AP mode So the Ad hoc Security will be the security we support - // TODO: Win 7 , We should support more security in here for Win 7 V3 AP Mode - if(pAdapter->bInHctTest) - { - // In Ndis 6.0 We use Ad hoc to simulize AP mode So the Ad hoc Security will be the security we support - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uInfraNumSupportedUcastAlgoPairs = 2; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->pInfraSupportedUcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList->AuthCipherPairs; - - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uInfraNumSupportedMcastAlgoPairs = 2; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->pInfraSupportedMcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->AuthCipherPairs; - } - else - { - // In Ndis 6.0 We use Ad hoc to simulize AP mode So the Ad hoc Security will be the security we support - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uInfraNumSupportedUcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList ->uNumOfEntries; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->pInfraSupportedUcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList->AuthCipherPairs; - - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->uInfraNumSupportedMcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->uNumOfEntries; - Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes->pInfraSupportedMcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->AuthCipherPairs; - } - - } - // - // Ok, now egister the attributes. - // - ndisStatus = NdisMSetMiniportAttributes(pAdapter->pNdisCommon->hNdisAdapter, - (PNDIS_MINIPORT_ADAPTER_ATTRIBUTES)&Dot11Attributes - ); - -Exit: - // Memory cleanup. - - if (SupportedAuthCipherAlgs.pInfraUcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pInfraMcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (Dot11Attributes.Native_802_11_Attributes.ExtSTAAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.Native_802_11_Attributes.ExtSTAAttributes, - sizeof(DOT11_EXTSTA_ATTRIBUTES)); - } - - if (Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.Native_802_11_Attributes.ExtAPAttributes, - sizeof(DOT11_EXTAP_ATTRIBUTES)); - } - - if (Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.Native_802_11_Attributes.VWiFiAttributes, - vwifiAttrSize); - } - - if (Dot11Attributes.Native_802_11_Attributes.NumSupportedPhys && Dot11Attributes.Native_802_11_Attributes.SupportedPhyAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.Native_802_11_Attributes.SupportedPhyAttributes, - Dot11Attributes.Native_802_11_Attributes.NumSupportedPhys * sizeof(DOT11_PHY_ATTRIBUTES)); - } - - return ndisStatus; -} - -VOID -N62CInitVariable( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PPORT_HELPER pPortHelper =pDefaultAdapter->pPortCommonInfo->pPortHelper; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - //===================Default Adapter variable initialize=================== - pNdisCommon->dot11CurrentOperationMode.uCurrentOpMode=DOT11_OPERATION_MODE_UNKNOWN; - pNdis62Common->PortNumber=0; - pNdis62Common->PortType=EXTSTA_PORT; - pNdis62Common->CurrentOpState=INIT_STATE; - pNdis62Common->bWPSEnable=FALSE; - - //===================initialize Helper variable======================== - pPortHelper->bCreateMac=FALSE; - pPortHelper->bDeleteMac=FALSE; - - //===================initialize VWiFi AP variable======================== - GetDefaultMgntInfo(pAdapter)->ApType = RT_AP_TYPE_NONE; - -} - -PADAPTER -GetAdapterByPortNum( - PADAPTER Adapter, - u1Byte PortNum - ) -{ - PADAPTER pAdapter = GetDefaultAdapter((Adapter)); - - while(pAdapter!=NULL) - { - if(pAdapter->pNdis62Common->PortNumber == PortNum) - break; - pAdapter = GetNextExtAdapter(pAdapter); - } - - if(pAdapter == NULL) - pAdapter = GetDefaultAdapter(Adapter); - - return pAdapter; -} - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.h deleted file mode 100644 index aacaf126..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Init.h +++ /dev/null @@ -1,152 +0,0 @@ - -//Helper Port Reg Init Parameter - -/** Maximum number of BSSs we will store in our BSS entries list */ -#define MP_BSS_ENTRY_MAX_ENTRIES_DEFAULT 128 -#define MP_BSS_ENTRY_MAX_ENTRIES_MIN 16 -#define MP_BSS_ENTRY_MAX_ENTRIES_MAX 512 - -/** - * Time duration after it was created at which a BSS entry is - * considered to have expired - */ -#define MP_BSS_ENTRY_EXPIRE_TIME_DEFAULT 750000000 // 75 seconds -#define MP_BSS_ENTRY_EXPIRE_TIME_MIN 150000000 // 15 seconds -#define MP_BSS_ENTRY_EXPIRE_TIME_MAX 2000000000 // 200 seconds - -/** - * Link quality value (0-100 which if we go below for a sequence of beacons, - * would suggest that we have a poor signal - */ -#define MP_POOR_LINK_QUALITY_THRESHOLD_DEFAULT 15 -#define MP_POOR_LINK_QUALITY_THRESHOLD_MIN 5 -#define MP_POOR_LINK_QUALITY_THRESHOLD_MAX 80 - - -/** Maximum number of channels that we scan for when doing a passive scan */ -#define MP_SCAN_SET_CHANNEL_COUNT_PASSIVE_DEFAULT 2 -#define MP_SCAN_SET_CHANNEL_COUNT_PASSIVE_MIN 1 -#define MP_SCAN_SET_CHANNEL_COUNT_PASSIVE_MAX 5 - -/** Maximum number of channels that we scan for when doing an active scan */ -#define MP_SCAN_SET_CHANNEL_COUNT_ACTIVE_DEFAULT 3 // We can scan more channels when in active -#define MP_SCAN_SET_CHANNEL_COUNT_ACTIVE_MIN 1 -#define MP_SCAN_SET_CHANNEL_COUNT_ACTIVE_MAX 5 - - -/** Interval between partial scan timer (in milliseconds) */ -#define MP_SCAN_RESCHEDULE_TIME_MS_DEFAULT 300 -#define MP_SCAN_RESCHEDULE_TIME_MS_MIN 10 -#define MP_SCAN_RESCHEDULE_TIME_MS_MAX 1000 - - -/** Interval between mutiple scan (in seconds) */ -#define MP_INTER_SCAN_TIME_DEFAULT 60 -#define MP_INTER_SCAN_TIME_MIN 30 -#define MP_INTER_SCAN_TIME_MAX 1000 - -//STA Port Reg Init Parameter - -/** Maximum number of Adhoc stations we will cache state about */ -#define STA_ADHOC_STA_MAX_ENTRIES_DEFAULT 64 -#define STA_ADHOC_STA_MAX_ENTRIES_MIN 16 -#define STA_ADHOC_STA_MAX_ENTRIES_MAX 512 - -/** - * Time duration after it was created at which an BSS entry is - * considered to have expired - */ -#define STA_BSS_ENTRY_EXPIRE_TIME_DEFAULT 750000000 // 75 seconds -#define STA_BSS_ENTRY_EXPIRE_TIME_MIN 150000000 // 15 seconds -#define STA_BSS_ENTRY_EXPIRE_TIME_MAX 2000000000 // 200 seconds - -/** - * Number of beacon intervals after which if we havent - * received a beacon from the AP we assume we have - * lost connectivity - */ -#define STA_INFRA_ROAM_NO_BEACON_COUNT_DEFAULT 20 -#define STA_INFRA_ROAM_NO_BEACON_COUNT_MIN 5 -#define STA_INFRA_ROAM_NO_BEACON_COUNT_MAX 50 - -/** - * Number of beacon for which we have continuously received - * beacons with RSSI below above threshold, we will roam - */ -#define STA_INFRA_RSSI_ROAM_BEACON_COUNT_DEFAULT 15 -#define STA_INFRA_RSSI_ROAM_BEACON_COUNT_MIN 5 -#define STA_INFRA_RSSI_ROAM_BEACON_COUNT_MAX 20 - - -// -// Macros for assigning and verifying NDIS_OBJECT_HEADER -// -#define MP_ASSIGN_NDIS_OBJECT_HEADER(_header, _type, _revision, _size) \ - (_header).Type = _type; \ - (_header).Revision = _revision; \ - (_header).Size = _size; - -VOID -N62CUpdateRegSetting( - PADAPTER pAdapter - ); - -NDIS_STATUS -N62CInitialize( - IN PADAPTER pHelperAdapter, - IN NDIS_HANDLE MiniportAdapterHandle, - IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ); - -NDIS_STATUS -N62CAllocateExtAdapter( - IN PADAPTER pDefaultAdapter, - IN PADAPTER *pHelperAdapter, - IN NDIS_HANDLE MiniportAdapterHandle - ); - -VOID -N62CFreeExtAdapter( - IN PADAPTER pExtAdapter - ); - -NDIS_STATUS -N62CAllocatePortCommonComponent( - IN PADAPTER pAdapter -); - -VOID -N62CFreePortCommonComponent( - IN PADAPTER pAdapter -); - -NDIS_STATUS -N62CAllocatePortSpecificComponent( - IN PADAPTER pAdapter -); - -VOID -N62CFreePortSpecificComponent( - IN PADAPTER pAdapter -); - -NDIS_STATUS -N62CSet80211Attributes( - IN PADAPTER Adapter - ); -/* -NDIS_STATUS -N62CStartMP( - IN PADAPTER pAdapter - ); -*/ - -void -N62CInitVariable( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -N62CAllocateN62CommResource( - IN PADAPTER pAdapter - ); \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.c deleted file mode 100644 index 9f8796b3..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.c +++ /dev/null @@ -1,2999 +0,0 @@ -#include "Mp_Precomp.h" - -/* We use this OID table structure to check if the OID is supported at this point & what the - * size should - */ -typedef struct PORT_QUERY_SET_OID_ENTRY { - NDIS_OID Oid; // Oid value - - BOOLEAN InitSettable:1; // Settable in Init state (for atleast one op mode) - - BOOLEAN OpSettable:1; // Settable in Op state (for atleast one op mode) - - BOOLEAN Queryable:1; // Queryable in Init/Op state - - BOOLEAN ExtSTASupported:1; // Valid in ExtSTA - - BOOLEAN ExtAPSupported:1; // Valid in ExtAP - - BOOLEAN NetmonSupported:1; // Valid in Netmon mode - - BOOLEAN PhySpecific:1; // Is this OID only acceptable for certain phys - - ULONG MinBufferSize; // Minimum size required for the buffer (query & set) - -} PORT_QUERY_SET_OID_ENTRY, * PPORT_QUERY_SET_OID_ENTRY; - - - - - - -PORT_QUERY_SET_OID_ENTRY OidQuerySetTable[] = { - // NDIS OIDs - { - OID_GEN_CURRENT_LOOKAHEAD, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_CURRENT_PACKET_FILTER, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE , // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_HARDWARE_STATUS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_HARDWARE_STATUS) // MinBufferSize - }, - { - OID_GEN_INTERRUPT_MODERATION, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS) // MinBufferSize - }, - { - OID_GEN_LINK_PARAMETERS, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_LINK_PARAMETERS) // MinBufferSize - }, - { - OID_GEN_MAXIMUM_FRAME_SIZE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_MAXIMUM_TOTAL_SIZE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_RECEIVE_BLOCK_SIZE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_RECEIVE_BUFFER_SPACE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_SUPPORTED_GUIDS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize // Variable - }, - { - OID_GEN_TRANSMIT_BLOCK_SIZE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_TRANSMIT_BUFFER_SPACE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_TRANSMIT_QUEUE_LENGTH, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_VENDOR_DESCRIPTION, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize // Variable - }, - { - OID_GEN_VENDOR_DRIVER_VERSION, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_GEN_VENDOR_ID, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_802_3_CURRENT_ADDRESS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_MAC_ADDRESS) // MinBufferSize - }, - - // PNP handlers - { - OID_PNP_SET_POWER, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_DEVICE_POWER_STATE) // MinBufferSize - }, - { - OID_PNP_QUERY_POWER, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_DEVICE_POWER_STATE) // MinBufferSize - }, - - // Operation Oids - { - OID_DOT11_CURRENT_ADDRESS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_MAC_ADDRESS) // MinBufferSize - }, - { - OID_DOT11_CURRENT_OPERATION_MODE, // Oid - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_CURRENT_OPERATION_MODE) // MinBufferSize - }, - { - OID_DOT11_CURRENT_OPTIONAL_CAPABILITY, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_CURRENT_OPTIONAL_CAPABILITY) // MinBufferSize - }, - { - OID_DOT11_DATA_RATE_MAPPING_TABLE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_DATA_RATE_MAPPING_TABLE) // MinBufferSize - }, - { - OID_DOT11_MAXIMUM_LIST_SIZE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_MPDU_MAX_LENGTH, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_MULTICAST_LIST, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize // Variable - }, - { - OID_DOT11_NIC_POWER_STATE, // Oid: msDot11NICPowerState - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_OPERATION_MODE_CAPABILITY, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported (need not be supported, but is queried) - FALSE, // PhySpecific - sizeof(DOT11_OPERATION_MODE_CAPABILITY) // MinBufferSize - }, - { - OID_DOT11_OPTIONAL_CAPABILITY, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_OPTIONAL_CAPABILITY) // MinBufferSize - }, - { - OID_DOT11_PERMANENT_ADDRESS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_MAC_ADDRESS) // MinBufferSize - }, - { - OID_DOT11_RECV_SENSITIVITY_LIST, // Oid - FALSE, // InitSettable // Method - FALSE, // OpSettable // Method - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_RECV_SENSITIVITY_LIST) // MinBufferSize - }, - { - OID_DOT11_RESET_REQUEST, // Oid - FALSE, // InitSettable // Method - FALSE, // OpSettable // Method - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - MIN(sizeof(DOT11_RESET_REQUEST), sizeof(DOT11_STATUS_INDICATION)) // MinBufferSize - }, - { - OID_DOT11_RF_USAGE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_SCAN_REQUEST, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_SCAN_REQUEST_V2, ucBuffer) // MinBufferSize - }, - { - OID_DOT11_SUPPORTED_DATA_RATES_VALUE, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2),// MinBufferSize - }, - { - OID_DOT11_SUPPORTED_PHY_TYPES, // Oid: msDot11SupportedPhyTypes - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_SUPPORTED_PHY_TYPES) // MinBufferSize - }, - { - OID_DOT11_SUPPORTED_POWER_LEVELS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_SUPPORTED_POWER_LEVELS) // MinBufferSize - }, - { - OID_DOT11_SUPPORTED_RX_ANTENNA, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_SUPPORTED_ANTENNA_LIST) // MinBufferSize - }, - { - OID_DOT11_SUPPORTED_TX_ANTENNA, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_SUPPORTED_ANTENNA_LIST) // MinBufferSize - }, - - // MIB Oids - { - OID_DOT11_BEACON_PERIOD, // Oid: dot11BeaconPeriod - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CCA_MODE_SUPPORTED, // Oid: dot11CCAModeSupported - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CF_POLLABLE, // Oid: dot11CFPollable - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_CHANNEL_AGILITY_ENABLED, // Oid: dot11ChannelAgilityEnabled - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_CHANNEL_AGILITY_PRESENT, // Oid: dot11ChannelAgilityPresent - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_COUNTRY_STRING, // Oid: dot11CountryString - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_COUNTRY_OR_REGION_STRING) // MinBufferSize - }, - { - OID_DOT11_CURRENT_CCA_MODE, // Oid: dot11CurrentCCAMode - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CURRENT_CHANNEL, // Oid: dot11CurrentChannel - TRUE, // InitSettable - TRUE, //2008.08.19, haich. //FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - TRUE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CURRENT_FREQUENCY, // Oid: dot11CurrentFrequency - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - TRUE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CURRENT_REG_DOMAIN, // Oid: dot11CurrentRegDomain - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CURRENT_TX_POWER_LEVEL, // Oid: dot11CurrentTxPowerLevel - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_DIVERSITY_SELECTION_RX, // Oid: dot11DiversitySelectionRx - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_DIVERSITY_SELECTION_RX_LIST) // MinBufferSize - }, - { - OID_DOT11_DIVERSITY_SUPPORT, // Oid: dot11DiversitySupport - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_DIVERSITY_SUPPORT) // MinBufferSize - }, - { - OID_DOT11_DSSS_OFDM_OPTION_ENABLED, // Oid: dot11DSSSOFDMOptionEnabled - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED, // Oid: dot11DSSSOFDMOptionImplemented - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_ED_THRESHOLD, // Oid: dot11EDThreshold - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_ERP_PBCC_OPTION_ENABLED, // Oid: dot11ERPBCCOptionEnabled - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED, // Oid: dot11ERPPBCCOptionImplemented - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_FRAGMENTATION_THRESHOLD, // Oid: dot11FragmentationThreshold - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_FREQUENCY_BANDS_SUPPORTED, // Oid: dot11FrequencyBandsSupported - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_LONG_RETRY_LIMIT, // Oid: dot11LongtRetryLimit - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_MAC_ADDRESS, // Oid: dot11MACAddress - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_MAC_ADDRESS) // MinBufferSize - }, - { - OID_DOT11_MAX_RECEIVE_LIFETIME, // Oid: dot11MaxReceiveLifetime - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME, // Oid: dot11MaxTransmitMSDULifetime - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED, // Oid: dot11MultiDomainCapabilityEnabled - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED, // Oid: dot11MultiDomainCapabilityImplemented - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_OPERATIONAL_RATE_SET, // Oid: dot11OperationalRateSet - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_RATE_SET) // MinBufferSize - }, - { - OID_DOT11_PBCC_OPTION_IMPLEMENTED, // Oid: dot11PBCCOptionImplemented - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_REG_DOMAINS_SUPPORT_VALUE, // Oid: dot11RegDomainValue - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_REG_DOMAINS_SUPPORT_VALUE) // MinBufferSize - }, - { - OID_DOT11_RTS_THRESHOLD, // Oid: dot11RTSThreshold - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED,// Oid: dot11ShortPreambleOptionImplemented - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_SHORT_RETRY_LIMIT, // Oid: dot11ShortRetryLimit - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED, // Oid: dot11ShortSlotTimeOptionEnabled - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE , // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED, // Oid: dot11ShortSlotTimeOptionImplemented - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - TRUE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_STATION_ID, // Oid: dot11StationID - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_MAC_ADDRESS) // MinBufferSize - }, - { - OID_DOT11_TEMP_TYPE, // Oid: dot11TempType - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_TEMP_TYPE) // MinBufferSize - }, - - // ExtSTA Operation OIDs - { - OID_DOT11_ACTIVE_PHY_LIST, // Oid: msDot11ActivePhyList - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_PHY_ID_LIST) // MinBufferSize - }, - { - OID_DOT11_ATIM_WINDOW, // Oid - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_AUTO_CONFIG_ENABLED, // Oid: msDot11AutoConfigEnabled - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported (need not be supported, but is set) - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CIPHER_DEFAULT_KEY, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_CIPHER_DEFAULT_KEY_VALUE, ucKey) // MinBufferSize - }, - { - OID_DOT11_CIPHER_DEFAULT_KEY_ID, // Oid: dot11DefaultKeyID - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_CIPHER_KEY_MAPPING_KEY, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer) // MinBufferSize - }, - { - OID_DOT11_CONNECT_REQUEST, // Oid - TRUE, // InitSettable - FALSE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize - }, - { - OID_DOT11_CURRENT_PHY_ID, // Oid: msDot11CurrentPhyID - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_DESIRED_BSS_TYPE, // Oid: dot11DesiredBSSType - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_BSS_TYPE) // MinBufferSize - }, - { - OID_DOT11_DESIRED_BSSID_LIST, // Oid: msDot11DesiredBSSIDList - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_BSSID_LIST, BSSIDs) // MinBufferSize - }, - { - OID_DOT11_DESIRED_PHY_LIST, // Oid: msDot11DesiredPhyList - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId) // MinBufferSize - }, - { - OID_DOT11_DESIRED_SSID_LIST, // Oid: msDot11DesiredSSIDList - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_SSID_LIST, SSIDs) // MinBufferSize - }, - { - OID_DOT11_DISCONNECT_REQUEST, // Oid - FALSE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize - }, - { - OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM, // Oid: msDot11EnabledAuthAlgo - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_AUTH_ALGORITHM_LIST, AlgorithmIds) // MinBufferSize - }, - { - OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM, // Oid: msDot11EnabledMulticastCipherAlgo - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_CIPHER_ALGORITHM_LIST, AlgorithmIds) // MinBufferSize - }, - { - OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM, // Oid: msDot11EnabledUnicastCipherAlgo - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_CIPHER_ALGORITHM_LIST, AlgorithmIds) // MinBufferSize - }, - { - OID_DOT11_ENUM_ASSOCIATION_INFO, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_ASSOCIATION_INFO_LIST) // MinBufferSize - }, - { - OID_DOT11_ENUM_BSS_LIST, // Oid - FALSE, // InitSettable // Method - FALSE, // OpSettable // Method - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer) // MinBufferSize - }, - { - OID_DOT11_EXCLUDE_UNENCRYPTED, // Oid: dot11ExcludeUnencrypted - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST, // Oid: msDot11ExcludedMacAddressList - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_MAC_ADDRESS_LIST, MacAddrs) // MinBufferSize - }, - { - OID_DOT11_EXTSTA_CAPABILITY, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_EXTSTA_CAPABILITY) // MinBufferSize - }, - { - OID_DOT11_FLUSH_BSS_LIST, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize - }, - { - OID_DOT11_HARDWARE_PHY_STATE, // Oid: msDot11HardwarePHYState - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_HIDDEN_NETWORK_ENABLED, // Oid: msDot11HiddenNetworkEnabled - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_IBSS_PARAMS, // Oid - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_IBSS_PARAMS) // MinBufferSize - }, - { - OID_DOT11_MEDIA_STREAMING_ENABLED, // Oid: msDot11MediaStreamingEnabled - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_PMKID_LIST, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_PMKID_LIST,PMKIDs) // MinBufferSize - }, - { - OID_DOT11_POWER_MGMT_REQUEST, // Oid: msDot11PowerSavingLevel - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_PRIVACY_EXEMPTION_LIST, // Oid: msDot11PrivacyExemptionList - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_PRIVACY_EXEMPTION_LIST, PrivacyExemptionEntries) // MinBufferSize - }, - { - OID_DOT11_SAFE_MODE_ENABLED, // Oid: msDot11SafeModeEnabled - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_STATISTICS, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - TRUE, // ExtAPSupported - TRUE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_STATISTICS) // MinBufferSize - }, - { - OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs) // MinBufferSize - }, - { - OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs) // MinBufferSize - }, - { - OID_DOT11_UNICAST_USE_GROUP_ENABLED, // Oid: msDot11UnicastUseGroupEnabled - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD, // Oid: msDot11UnreachableDetectionThreshold - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - // ExtAP specific OIDs - { - OID_DOT11_DTIM_PERIOD, // Oid: dot11DTIMPeriod - TRUE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(ULONG) // MinBufferSize - }, - { - OID_DOT11_AVAILABLE_CHANNEL_LIST, // Oid: msDot11AvailableChannelList - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_AVAILABLE_CHANNEL_LIST, uChannelNumber) // MinBufferSize - }, - { - OID_DOT11_AVAILABLE_FREQUENCY_LIST, // Oid: msDot11AvailableFrequencyList - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_AVAILABLE_FREQUENCY_LIST, uFrequencyValue) // MinBufferSize - }, - { - OID_DOT11_ENUM_PEER_INFO, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - FIELD_OFFSET(DOT11_PEER_INFO_LIST, PeerInfo) // MinBufferSize - }, - { - OID_DOT11_DISASSOCIATE_PEER_REQUEST, // Oid - FALSE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_DISASSOCIATE_PEER_REQUEST) // MinBufferSize - }, - { - OID_DOT11_PORT_STATE_NOTIFICATION, // Oid - FALSE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - FALSE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_PORT_STATE_NOTIFICATION) // MinBufferSize - }, - { - OID_DOT11_INCOMING_ASSOCIATION_DECISION, // Oid - FALSE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_INCOMING_ASSOC_DECISION) // MinBufferSize - }, - { - OID_DOT11_ADDITIONAL_IE, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_ADDITIONAL_IE) // MinBufferSize - }, - { - OID_DOT11_WPS_ENABLED, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, - { - OID_DOT11_START_AP_REQUEST, // Oid - TRUE, // InitSettable - FALSE, // OpSettable - FALSE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - 0 // MinBufferSize - }, -/* - { - OID_DOT11_AP_BEACON_MODE, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - FALSE, // ExtSTASupported - TRUE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(BOOLEAN) // MinBufferSize - }, -*/ - { - OID_DOT11_ASSOCIATION_PARAMS, // Oid - TRUE, // InitSettable - FALSE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(DOT11_ASSOCIATION_PARAMS) // MinBufferSize - }, - { - OID_PM_ADD_WOL_PATTERN, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_WOL_PATTERN) // MinBufferSize - }, - { - OID_PM_REMOVE_WOL_PATTERN, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_WOL_PATTERN) // MinBufferSize - }, - { - OID_PM_PARAMETERS, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_PARAMETERS) // MinBufferSize - }, - { - OID_PM_ADD_PROTOCOL_OFFLOAD, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_PROTOCOL_OFFLOAD) // MinBufferSize - }, - { - OID_PM_GET_PROTOCOL_OFFLOAD, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_PROTOCOL_OFFLOAD) // MinBufferSize - }, - { - OID_PM_REMOVE_PROTOCOL_OFFLOAD, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_PROTOCOL_OFFLOAD) // MinBufferSize - }, - { - OID_PM_PROTOCOL_OFFLOAD_LIST, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_PM_PROTOCOL_OFFLOAD) // MinBufferSize - }, - - - { - OID_RECEIVE_FILTER_SET_FILTER, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_RECEIVE_FILTER_PARAMETERS) // MinBufferSize - }, - { - OID_RECEIVE_FILTER_CLEAR_FILTER, // Oid - TRUE, // InitSettable - TRUE, // OpSettable - FALSE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_RECEIVE_FILTER_CLEAR_PARAMETERS) // MinBufferSize - }, - { - OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES) // MinBufferSize - }, - { - OID_RECEIVE_FILTER_CURRENT_CAPABILITIES, // Oid - FALSE, // InitSettable - FALSE, // OpSettable - TRUE, // Queryable - TRUE, // ExtSTASupported - FALSE, // ExtAPSupported - FALSE, // NetmonSupported - FALSE, // PhySpecific - sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES) // MinBufferSize - }, -}; - -NDIS_STATUS -N62CValidateOIDCorrectness( - PADAPTER pTargetAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - PULONG bytesNeededLocation; - NDIS_OID oid; - ULONG infoBufferLength; - PPORT_QUERY_SET_OID_ENTRY oidTableEntry = NULL; - ULONG i; - DOT11_PHY_TYPE currentPhy; - PRT_NDIS62_COMMON pNdis62Common=pTargetAdapter->pNdis62Common; - PRT_NDIS6_COMMON pNdisCommon = pTargetAdapter->pNdisCommon; - - oid = NdisRequest->DATA.QUERY_INFORMATION.Oid; // Oid is at same offset for all RequestTypes - - // Find the OID in the oid table - for (i = 0; i < ((ULONG)sizeof(OidQuerySetTable)/(ULONG)sizeof(PORT_QUERY_SET_OID_ENTRY)); i++) - { - if (OidQuerySetTable[i].Oid == oid) - { - oidTableEntry = &OidQuerySetTable[i]; - break; - } - } - - if (oidTableEntry == NULL) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("OID 0x%08x not found in oid table\n", oid)); - return NDIS_STATUS_FAILURE; - } - - // Verify that the OID is applicable for the current operation mode mode - switch(pNdis62Common->PortType) - { - case EXTSTA_PORT: - if (!oidTableEntry->ExtSTASupported) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_SERIOUS, - ("OID 0x%08x not supported in ExtSTA mode\n", oid)); - return NDIS_STATUS_INVALID_STATE; - } - break; - - - case EXT_P2P_ROLE_PORT: - // No Checking - break; -/* - case DOT11_OPERATION_MODE_NETWORK_MONITOR : - if (!oidTableEntry->NetmonSupported) - { - MpTrace(COMP_OID, DBG_SERIOUS, ("OID 0x%08x not supported in Network Monitor mode\n", oid)); - return NDIS_STATUS_INVALID_STATE; - } - break; -*/ - default: - // Currently we assume this is AP mode - if (!oidTableEntry->ExtAPSupported) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_SERIOUS, - ("OID 0x%08x not supported in ExtAP mode\n", oid)); - return NDIS_STATUS_INVALID_STATE; - } - break; - } - - // Verify if the OID is supported in current operating state - switch(NdisRequest->RequestType) - { - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - if (!oidTableEntry->Queryable) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("Query of OID 0x%08x not supported\n", oid)); - return NDIS_STATUS_INVALID_STATE; - } - - // Determine buffer length that will be used later - bytesNeededLocation = (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded; - infoBufferLength = NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength; - break; - - case NdisRequestSetInformation: - if (pNdis62Common->CurrentOpState == INIT_STATE) - {// INIT_STATE - if (!oidTableEntry->InitSettable) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, - ("Set of OID 0x%08x not supported in INIT state.\n", oid)); - return NDIS_STATUS_INVALID_STATE; - } - } - else - {// OP_STATE - if (!oidTableEntry->OpSettable) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, - ("Set of OID 0x%08x not supported in OP state.\n", oid)); - return NDIS_STATUS_INVALID_STATE; - } - } - - // Determine buffer length that will be used later - bytesNeededLocation = (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded; - infoBufferLength = NdisRequest->DATA.SET_INFORMATION.InformationBufferLength; - break; - - case NdisRequestMethod: - // Only these OIDs are supported as methods - if ( (oid != OID_DOT11_RESET_REQUEST) && - (oid != OID_DOT11_ENUM_BSS_LIST) && - (oid != OID_DOT11_RECV_SENSITIVITY_LIST) && - (oid != OID_PM_GET_PROTOCOL_OFFLOAD) && - (oid != OID_RECEIVE_FILTER_SET_FILTER)) //tynli add OID_PM_GET_PROTOCOL_OFFLOAD - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("Method request for OID 0x%08x not supported\n", oid)); - return NDIS_STATUS_INVALID_OID; - } - - // Determine buffer length that will be used later - bytesNeededLocation = (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded; - - // Larger of the two buffer lengths - infoBufferLength = MAX(NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength); - break; - - default: - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, - ("NDIS_OID_REQUEST contains unknown request type %d\n", NdisRequest->RequestType) - ); - return NDIS_STATUS_NOT_SUPPORTED; - } - - // Verify that this OID is applicable for the current PHY - if (oidTableEntry->PhySpecific) - { - // Verify that this OID is valid for the currently SELECTED PHY - // TODO: Win 7 - //currentPhy = BasePortGetPhyTypeFromId(Port, VNic11QuerySelectedPhyId(Port->VNic)); - //currentPhy=dot11_phy_type_erp; //temp add by Maddest - - if(pTargetAdapter->bInHctTest) - currentPhy = dot11_phy_type_erp; - else - currentPhy=pNdisCommon->pDot11SelectedPhyMIB->PhyType; //dot11_phy_type_erp; //temp add by Maddest - - switch (oid) - { - // OIDs valid only for ERP - case OID_DOT11_DSSS_OFDM_OPTION_ENABLED: - case OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED: - case OID_DOT11_ERP_PBCC_OPTION_ENABLED: - case OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED: - case OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED: - case OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED: - if (currentPhy != dot11_phy_type_erp) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("OID 0x%08x only valid on ERP phy. Current phy type is %d\n", - oid, - currentPhy)); - return NDIS_STATUS_INVALID_DATA; - } - break; - - case OID_DOT11_PBCC_OPTION_IMPLEMENTED: - case OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED: - case OID_DOT11_CHANNEL_AGILITY_PRESENT: - case OID_DOT11_CHANNEL_AGILITY_ENABLED: - if ((currentPhy != dot11_phy_type_erp) && (currentPhy != dot11_phy_type_hrdsss)) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("OID 0x%08x only valid on ERP or HRDSS phy. Current phy type is %d\n", - oid, - currentPhy)); - - return NDIS_STATUS_INVALID_DATA; - } - break; - - // OIDs valid only for ERP or DSSS or HRDSS - case OID_DOT11_CCA_MODE_SUPPORTED: - case OID_DOT11_CURRENT_CCA_MODE: - case OID_DOT11_CURRENT_CHANNEL: - case OID_DOT11_ED_THRESHOLD: - if ((currentPhy != dot11_phy_type_erp) && (currentPhy != dot11_phy_type_hrdsss) && (currentPhy != dot11_phy_type_dsss)) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("OID 0x%08x only valid on ERP, HRDSS or DSS phy. Current phy type is %d\n", - oid, - currentPhy)); - - return NDIS_STATUS_INVALID_DATA; - } - break; - - case OID_DOT11_FREQUENCY_BANDS_SUPPORTED: - case OID_DOT11_CURRENT_FREQUENCY: - if ((currentPhy != dot11_phy_type_ofdm) && (currentPhy != dot11_phy_type_ht )) - { - RT_TRACE(COMP_OID_QUERY | COMP_OID_SET, DBG_LOUD, ("OID 0x%08x only valid on OFDM phy. Current phy type is %d\n", - oid, - currentPhy)); - - return NDIS_STATUS_INVALID_DATA; - } - - default: - break; - } - } - - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N62C_OID_DOT11_INCOMING_ASSOCIATION_DECISION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_DOT11_INCOMING_ASSOCIATION_DECISION( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_WPS_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_DOT11_WPS_ENABLED( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_DOT11_WPS_ENABLED( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_ADDITIONAL_IE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_DOT11_ADDITIONAL_IE( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_DOT11_ADDITIONAL_IE( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_ENUM_PEER_INFO( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_DOT11_ENUM_PEER_INFO( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_AVAILABLE_CHANNEL_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_DOT11_AVAILABLE_CHANNEL_LIST( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_AVAILABLE_FREQUENCY_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_DOT11_AVAILABLE_FREQUENCY_LIST( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_START_AP_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_DOT11_START_AP_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_DISASSOCIATE_PEER_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_DOT11_DISASSOCIATE_PEER_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PM_GET_PROTOCOL_OFFLOAD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = N62C_METHOD_OID_PM_GET_PROTOCOL_OFFLOAD( - pTargetAdapter, - NdisRequest->DATA.METHOD_INFORMATION.Oid, - NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.MethodId, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded - ); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_ASSOCIATION_PARAMS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_DOT11_ASSOCIATION_PARAMS( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PM_ADD_WOL_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_PM_ADD_WOL_PATTERN( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PM_REMOVE_WOL_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_PM_REMOVE_WOL_PATTERN( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PM_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_PM_PARAMETERS( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_PM_PARAMETERS( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PM_ADD_PROTOCOL_OFFLOAD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PM_REMOVE_PROTOCOL_OFFLOAD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_PM_REMOVE_PROTOCOL_OFFLOAD( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N62C_OID_PM_ADD_PROTOCOL_OFFLOAD_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("===> N62C_OID_PM_ADD_PROTOCOL_OFFLOAD_LIST \n")); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD_LIST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N62C_OID_GEN_INTERRUPT_MODERATION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_GEN_INTERRUPT_MODERATION( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_CLEAR_FILTER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N62C_SET_OID_RECEIVE_FILTER_CLEAR_FILTER( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_SET_FILTER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = N62C_QUERYSET_OID_RECEIVE_FILTER_SET_FILTER( - pTargetAdapter, - NdisRequest->DATA.METHOD_INFORMATION.Oid, - NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.MethodId, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded - ); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_CURRENT_CAPABILITIES( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N62C_QUERY_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.h deleted file mode 100644 index 88a002ac..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Oids.h +++ /dev/null @@ -1,159 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - N62C_Oids.h - -Abstract: - Contains Port specific defines - -Revision History: - When What - ---------- ---------------------------------------------- - 04-22-2007 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _N62_OIDS__H -#define _N62_OIDS__H - -#define ALLOWED_AUTO_CONFIG_FLAGS (DOT11_PHY_AUTO_CONFIG_ENABLED_FLAG | DOT11_MAC_AUTO_CONFIG_ENABLED_FLAG) - -NDIS_STATUS -N62CValidateOIDCorrectness( - PADAPTER pTargetAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_INCOMING_ASSOCIATION_DECISION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_WPS_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_ADDITIONAL_IE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_ENUM_PEER_INFO( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_AVAILABLE_CHANNEL_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_AVAILABLE_FREQUENCY_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_START_AP_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_DISASSOCIATE_PEER_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_GET_PROTOCOL_OFFLOAD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_DOT11_ASSOCIATION_PARAMS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_ADD_WOL_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_REMOVE_WOL_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_ADD_PROTOCOL_OFFLOAD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_REMOVE_PROTOCOL_OFFLOAD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_GEN_INTERRUPT_MODERATION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_PM_ADD_PROTOCOL_OFFLOAD_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_CLEAR_FILTER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_SET_FILTER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N62C_OID_RECEIVE_FILTER_CURRENT_CAPABILITIES( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.c deleted file mode 100644 index 44398048..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.c +++ /dev/null @@ -1,1473 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N62C_Port.tmh" -#endif - -BOOLEAN -N62CCompletePendingCreateDeleteMacOidRequest( - IN PADAPTER pAdapter, - IN NDIS_STATUS NdisStatus - ) -{ - PRT_NDIS6_COMMON pNdisCommon=pAdapter->pNdisCommon; - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - BOOLEAN bCompleteStatus = FALSE; - - // - // Complete this OID to the OS - // - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - -#if DRV_LOG_REGISTRY - if(pPortHelper->pCreateDeleteOID == NULL) - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - RT_SET_DRV_STATE(pAdapter, DrvStateMacPendReq_Error0); - return FALSE; - } - - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - if((pNdisCommon->PendedRequest != pPortHelper->pCreateDeleteOID)) - { - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - RT_SET_DRV_STATE(pAdapter, DrvStateMacPendReq_Error1); - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - } - else - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); -#endif - - // 20130917 Joseph: - // Pending OID is restore in 2 different place. - // This shall be revised and add a new OID pending queue for OID completion. - // Prefast warning ignore for false positive -#pragma warning( disable:6273 ) - RT_ASSERT(pNdisCommon->PendedRequest != NULL, ("N62CCompletePendingCreateDeleteMacOidRequest(): CreateDeleteMac OID shall also be queued in NdisCommon!! pAdapter=%x\n", pAdapter)); - RT_ASSERT(pNdisCommon->PendedRequest == pPortHelper->pCreateDeleteOID, ("N62CCompletePendingCreateDeleteMacOidRequest(): CreateDeleteMac OID shall also be the same in NdisCommon and PortHelper!!\n")); - - // WDI completion - if(OS_SUPPORT_WDI(pAdapter)) - { - bCompleteStatus = WDI_CompleteCreateDeleteMac(pAdapter, NdisStatus); - } - - pPortHelper->pCreateDeleteOID = NULL; - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - - if(!bCompleteStatus) - bCompleteStatus = N6CompletePendedOID(pAdapter, RT_PENDED_OID_CREATE_DELETE_MAC, NdisStatus); - - - return bCompleteStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_CREATE_MAC( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest - ) -{ - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - PNDIS_OID_REQUEST OidRequest = (PNDIS_OID_REQUEST)NdisRequest; - KIRQL irql = NDIS_CURRENT_IRQL(); - u4Byte createPollingCnt=0x0; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_CREATE_MAC(): Oid(%#x)--->\n", NdisRequest->DATA.METHOD_INFORMATION.Oid)); - N6C_DOT11_DUMP_OID(NdisRequest->DATA.METHOD_INFORMATION.Oid); - -#if DRV_LOG_REGISTRY - // Reset all MAC deletion registry settings - RT_CLEAR_DRV_STATE(pAdapter, (DrvStateMacDeleting|DrvStateMacDeleted)); - - // Reset all MAC creation registry settings - RT_CLEAR_DRV_STATE(pAdapter, (DrvStateMacCreating|DrvStateMacCreated)); - - // Set specific driver state - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreating); -#endif - if(irql == DISPATCH_LEVEL) - { - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreatDispatch); - } - while(1) - { - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - if(pPortHelper->bCreateMac || pPortHelper->bDeleteMac) - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - createPollingCnt++; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_CREATE_MAC(): pollCnt/bCreateMac/bDeleteMac= %d/ %d/ %d\n", - createPollingCnt, pPortHelper->bCreateMac, pPortHelper->bDeleteMac)); - if(createPollingCnt >= 1000) - break; - else - delay_ms(1); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - break; - } - } - - if(createPollingCnt) - { - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreatWait); - } - - if( irql < DISPATCH_LEVEL ){ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_CREATE_MAC(): Raise IRQL!!\n")); - KeRaiseIrql(DISPATCH_LEVEL, &irql); - } - - do{ - - NdisRequest->DATA.METHOD_INFORMATION.BytesWritten = 0; - NdisRequest->DATA.METHOD_INFORMATION.BytesRead = 0; - NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded = 0; - - if(!pAdapter->bInHctTest && !pDefaultAdapter->pNdisCommon->bRegVWifiSupport) - { - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if (NdisRequest->RequestType != NdisRequestMethod) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Invalid request type %d for OID_DOT11_CREATE_MAC\n", NdisRequest->RequestType)); - ndisStatus =NDIS_STATUS_NOT_SUPPORTED; - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreate_NO_DO); - break; - } - - if (NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength < sizeof(DOT11_MAC_INFO)) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("The buffer being passed into OID_DOT11_CREATE_MAC is too small(%d)\n", - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength)); - NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded = sizeof(DOT11_MAC_INFO); - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreate_NO_DO); - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - break; - } - - // - // Since OID calls are serialized, we do not expect the NumberOfPorts to change - // while we are checking the following until this OID is completed. So we do not need - // to protect the NumberOfPorts in any way - // - - // The default port should be considered -------------------------------------------- - if (MultiPortGetNumberOfActiveExtAdapters(pAdapter) + 1 >= MP_MAX_NUMBER_OF_PORT) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Number of existing ports exceed max supported. Failing new port creation\n")); - ndisStatus = NDIS_STATUS_OPEN_LIST_FULL; - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreate_NO_DO); - break; - } - - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - if(pPortHelper->pCreateDeleteOID != NULL) - {// Another CreateDeleteOID has already pended, maybe from another port number - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - -// RT_ASSERT(FALSE, ("N62C_OID_DOT11_CREATE_MAC(): Another CreateDeleteOID has already pended!!\n")); - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("N62C_OID_DOT11_CREATE_MAC(): Another CreateDeleteOID has already pended!!\n")); - ndisStatus = NDIS_STATUS_FAILURE; // Need to check this return status - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreate_NO_DO); - break; - } - else - { - // Done creating the new virtual adapter - pPortHelper->pCreateDot11MacInfo = (PDOT11_MAC_INFO)OidRequest->DATA.METHOD_INFORMATION.InformationBuffer; - NdisMoveMemory(pPortHelper->pCreateDot11MacInfo->MacAddr, pAdapter->CurrentAddress, sizeof(DOT11_MAC_ADDRESS)); - OidRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(DOT11_MAC_INFO); - - // Save corresponding NdisRequest for MAC Creation and Deletion - pPortHelper->bCreateMac=TRUE; - pPortHelper->pCreateDeleteOID = NdisRequest; - -// if(!PlatformScheduleWorkItem( &pPortHelper->CreateDeleteMacWorkitem)) - { - //RT_ASSERT(FALSE, ("N62C_OID_DOT11_CREATE_MAC(): Cannot schedule workitem!!Timer scheduled\n")); - if(!PlatformSetTimer(pAdapter, &pPortHelper->CreateDeleteMacTimer, 15)) - { - RT_ASSERT(FALSE, ("N62C_OID_DOT11_CREATE_MAC(): Cannot schedule Timer!!Failed\n")); - ndisStatus = NDIS_STATUS_FAILURE; - pPortHelper->bCreateMac=FALSE; - pPortHelper->pCreateDeleteOID = NULL; - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreate_TMR_FAIL); - } - else - { - ndisStatus = NDIS_STATUS_PENDING; - } - } -// else -// { -// ndisStatus = NDIS_STATUS_PENDING; -// } - - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - } - - - RT_ASSERT(pPortHelper->pCreateDeleteOID, ("N62C_OID_DOT11_CREATE_MAC(): pCreateDeleteOID has already completed!!\n")); - - - } - while(FALSE); - - if( irql < DISPATCH_LEVEL ){ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_CREATE_MAC(): Restore IRQL!!\n")); - KeLowerIrql(irql); - } - -#if DRV_LOG_REGISTRY - if( !pAdapter->bDriverStopped && RT_GET_DRV_STATE_ERROR(pAdapter)){ - RT_TRACE(COMP_INIT, DBG_WARNING, ("N62C_OID_DOT11_CREATE_MAC(): Update Driver state!!\n")); - RT_SET_DRV_STATE(pAdapter, DrvStateNull); - RT_CLEAR_DRV_STATE_ERROR(pAdapter); - } -#endif - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_CREATE_MAC(): <---\n")); - - return ndisStatus; -} - -NDIS_STATUS -N62C_OID_DOT11_DELETE_MAC( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest - ) -{ - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_MAC_INFO MacInfo = NULL; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - KIRQL irql = NDIS_CURRENT_IRQL(); - u4Byte deletePollingCnt=0x0; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_DELETE_MAC(): Oid(%#x)--->\n", NdisRequest->DATA.METHOD_INFORMATION.Oid)); - N6C_DOT11_DUMP_OID(NdisRequest->DATA.METHOD_INFORMATION.Oid); - -#if DRV_LOG_REGISTRY - // Reset all MAC deletion registry settings - RT_CLEAR_DRV_STATE(pAdapter, (DrvStateMacDeleting|DrvStateMacDeleted)); - - // Reset all MAC creation registry settings - RT_CLEAR_DRV_STATE(pAdapter, (DrvStateMacCreating|DrvStateMacCreated)); - - // Set specific driver state - RT_SET_DRV_STATE(pAdapter, DrvStateMacDeleting); -#endif - - while(1) - { - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - if(pPortHelper->bCreateMac || pPortHelper->bDeleteMac) - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - deletePollingCnt++; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_DELETE_MAC(): pollCnt/bCreateMac/bDeleteMac= %d/ %d/ %d\n", - deletePollingCnt, pPortHelper->bCreateMac, pPortHelper->bDeleteMac)); - if(deletePollingCnt >= 1000) - break; - else - delay_ms(1); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - break; - } - } - - if( irql < DISPATCH_LEVEL ){ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_DELETE_MAC(): Raise IRQL!!\n")); - KeRaiseIrql(DISPATCH_LEVEL, &irql); - } - - do - { - NdisRequest->DATA.SET_INFORMATION.BytesRead = 0; - NdisRequest->DATA.SET_INFORMATION.BytesNeeded = 0; - - if(!pAdapter->bInHctTest &&!pDefaultAdapter->pNdisCommon->bRegVWifiSupport) - { - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if (NdisRequest->RequestType != NdisRequestSetInformation) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Invalid request type %d for OID_DOT11_DELETE_MAC\n", - NdisRequest->RequestType)); - RT_SET_DRV_STATE(pAdapter, DrvStateMacDelete_NO_DO); - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if (NdisRequest->DATA.SET_INFORMATION.InformationBufferLength < sizeof(DOT11_MAC_INFO)) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("The buffer being passed into OID_DOT11_DELETE_MAC is too small(%d)", - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength)); - NdisRequest->DATA.SET_INFORMATION.BytesNeeded = sizeof(DOT11_MAC_INFO); - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - RT_SET_DRV_STATE(pAdapter, DrvStateMacDelete_NO_DO); - break; - } - - MacInfo = (PDOT11_MAC_INFO)NdisRequest->DATA.SET_INFORMATION.InformationBuffer; - - if (!OS_SUPPORT_WDI(pAdapter) && // WDI port number is not sequential, it's bitmap instead - MacInfo->uNdisPortNumber > MP_MAX_NUMBER_OF_PORT || - MacInfo->uNdisPortNumber == DEFAULT_NDIS_PORT_NUMBER || - MacInfo->uNdisPortNumber == HELPER_PORT_PORT_NUMBER) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("The port number (%d) being passed in is invalid", MacInfo->uNdisPortNumber)); - ndisStatus = NDIS_STATUS_INVALID_DATA; - RT_SET_DRV_STATE(pAdapter, DrvStateMacDelete_NO_DO); - break; - } - - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - if(pPortHelper->pCreateDeleteOID != NULL) - {// Another CreateDeleteOID has already pended, maybe from another port number - - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - -// RT_ASSERT(FALSE, ("N62C_OID_DOT11_DELETE_MAC(): Another CreateDeleteOID has already pended!!\n")); - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("N62C_OID_DOT11_DELETE_MAC(): Another CreateDeleteOID has already pended!!\n")); - ndisStatus = NDIS_STATUS_FAILURE; // Need to check this return status - RT_SET_DRV_STATE(pAdapter, DrvStateMacDelete_NO_DO); - break; - } - else - { - pPortHelper->bDeleteMac=TRUE; - pPortHelper->pCreateDot11MacInfo= (PDOT11_MAC_INFO)NdisRequest->DATA.SET_INFORMATION.InformationBuffer; - NdisRequest->DATA.SET_INFORMATION.BytesRead = sizeof(DOT11_MAC_INFO); - - // Save corresponding NdisRequest for MAC Creation and Deletion - pPortHelper->pCreateDeleteOID = NdisRequest; - -// if(!PlatformScheduleWorkItem( &pPortHelper->CreateDeleteMacWorkitem)) - { - //RT_ASSERT(FALSE, ("N62C_OID_DOT11_DELETE_MAC(): Cannot schedule workitem!!Timer scheduled\n")); - if(!PlatformSetTimer(pAdapter, &pPortHelper->CreateDeleteMacTimer, 15)) - { - RT_ASSERT(FALSE, ("N62C_OID_DOT11_DELETE_MAC(): Cannot schedule Timer!!Failed\n")); - ndisStatus = NDIS_STATUS_FAILURE; - pPortHelper->bDeleteMac=FALSE; - pPortHelper->pCreateDeleteOID = NULL; - RT_SET_DRV_STATE(pAdapter, DrvStateMacDelete_TMR_FAIL); - } - else - { - ndisStatus = NDIS_STATUS_PENDING; - } - } -// else -// { -// ndisStatus = NDIS_STATUS_PENDING; -// } - - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - } - - RT_ASSERT(pPortHelper->pCreateDeleteOID, ("N62C_OID_DOT11_DELETE_MAC(): pCreateDeleteOID is not completed!!\n")); - - }while (FALSE); - - - if( irql < DISPATCH_LEVEL ){ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_DELETE_MAC(): Restore IRQL!!\n")); - KeLowerIrql(irql); - } - -#if DRV_LOG_REGISTRY - if( !pAdapter->bDriverStopped && RT_GET_DRV_STATE_ERROR(pAdapter)){ - RT_TRACE(COMP_INIT, DBG_WARNING, ("N62C_OID_DOT11_DELETE_MAC(): Update Driver state!!\n")); - RT_SET_DRV_STATE(pAdapter, DrvStateNull); - RT_CLEAR_DRV_STATE_ERROR(pAdapter); - } -#endif - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62C_OID_DOT11_DELETE_MAC():< ---\n")); - - return ndisStatus; -} - -VOID -N62CCreateDeleteMacTimerCallback( - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)pTimer->Adapter; - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("====> N62CCreateDeleteMacTimerCallback()\n")); - - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - if(pAdapter->pNdisCommon->PendedRequest == NULL){ - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - RT_SET_DRV_STATE(pAdapter, DrvStateMacPendReq_Error2); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N62CCreateDeleteMacTimerCallback(), PendedRequest is NULL, Re-schedule CreateDeleteMacTimer!!!\n")); - PlatformSetTimer(pAdapter, &pPortHelper->CreateDeleteMacTimer, 1); - return; - } - else - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - - // debug if workitem scheduled successfully or not - //pPortHelper->CreateDeleteMacWorkitem.bWriteRegistry = TRUE; - if( !PlatformScheduleWorkItem( &(pPortHelper->CreateDeleteMacWorkitem)) ) - { - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreDel_WI_FAIL); - - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("N62CCreateDeleteMacTimerCallback():(): Fail to schedule WI!!\n")); - N62CCompletePendingCreateDeleteMacOidRequest(pAdapter, NDIS_STATUS_REQUEST_ABORTED); - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<==== N62CCreateDeleteMacTimerCallback()\n")); -} - -void -N62CCreateDeleteMacWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("====> N62CCreateDeleteMacWorkItemCallback()\n")); - - PlatformAcquireSpinLock(pAdapter, RT_PORT_SPINLOCK); - if(pPortHelper->bCreateMac) - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - ndisStatus=N62CCreateMac(pAdapter); - - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreated); - - pPortHelper->bCreateMac=FALSE; - if(ndisStatus !=NDIS_STATUS_SUCCESS) - { - RT_SET_DRV_STATE(pAdapter, DrvStateMacCreate_Fail); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("bCreateMac Fail\n")); - } - else - { - // Re-hook association entry to keep fresh when delete port. - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PDM_ODM_T pDM_OutSrc = &pHalData->DM_OutSrc; - if( pDM_OutSrc->odm_ready == TRUE ) - ODM_AsocEntry_Init(pDM_OutSrc); - } - } - else if(pPortHelper->bDeleteMac) - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - ndisStatus=N62CDeleteMac(pAdapter); - - RT_SET_DRV_STATE(pAdapter, DrvStateMacDeleted); - - pPortHelper->bDeleteMac=FALSE; - if(ndisStatus !=NDIS_STATUS_SUCCESS) - { - RT_SET_DRV_STATE(pAdapter, DrvStateMacDelete_Fail); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("bdeleteMac Fail\n")); - } - else - { - // Re-hook association entry to keep fresh when delete port. - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PDM_ODM_T pDM_OutSrc = &pHalData->DM_OutSrc; - if( pDM_OutSrc->odm_ready == TRUE ) - ODM_AsocEntry_Init(pDM_OutSrc); - } - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_PORT_SPINLOCK); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("UnKnow Operation\n")); - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<==== N62CCreateDeleteMacWorkItemCallback()\n")); -} - -u4Byte logValue[10]={0}; -u4Byte logCnt=0x0; -NDIS_STATUS -N62CCreateMac( - IN PADAPTER Adapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_NDIS62_COMMON Ndis62Common = pDefaultAdapter->pNdis62Common; - PPORT_HELPER pPortHelper = pDefaultAdapter->pPortCommonInfo->pPortHelper; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - BOOLEAN ndisPortAllocated = FALSE, ndisPortActivated = FALSE; - NDIS_PORT_NUMBER portNumber = DEFAULT_NDIS_PORT_NUMBER; - PADAPTER pAdapter = pDefaultAdapter; - PADAPTER pTargetAdapter = NULL; - PADAPTER pAllocFailAdapter = NULL; - BOOLEAN bCompleteStatus = FALSE; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("====> N62CCreateMac()\n")); - - logCnt++; - if(logCnt >= 10) - logCnt = 10; - logValue[logCnt-1] |= BIT1; - - /* - Pause the miniport before we modify the adapter's port list. - This is an expensive way to achieve this but it is simple to implement - */ - do - { - ndisStatus = N62CHandleMiniportPause(pAdapter, NULL); - - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, (" N62CCreateMac(), N62CHandleMiniportPause() FAIL!!!\n")); - break; - } - - pAdapter = GetNextExtAdapter(pAdapter); - } while(pAdapter!=NULL); - - do - { - // - // Allocate an NDIS port and the adapter instance - // - - // MultiPort Activate a New Port ------------------------------------- - pAdapter = MultiPortGetIdleExtAdapter(Adapter); - RT_ASSERT(pAdapter != NULL, ("Need to allocate more adapters! \n")); - - // Error handle to prevent from BSOD 0x7E of NULL pointer issue. 2014.11.03, by tynli. - if(!pAdapter) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Status fail: Need to allocate more adapters!\n")); - ndisStatus = NDIS_STATUS_OPEN_LIST_FULL; - break; - } - - MultiPortChangeExtAdapterActiveState(pAdapter, TRUE); - // -------------------------------------------------------------- -//LE do not need to allocate NDIS port in WDI driver -#if 0 - if(!OS_SUPPORT_WDI) - { - ndisStatus = N62CHelperAllocateNdisPort(pAdapter, &portNumber); - } - else -#endif - { - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = &pWdi->TaskHandle; - - portNumber = pOidHandle->tlvParser.parsedTlv.paramCreatePort->CreatePortParameters.NdisPortNumber; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("UE pass down NdisPortNumber:%d\n", portNumber)); - } - - if( ndisStatus != NDIS_STATUS_SUCCESS ) - { - pAllocFailAdapter = pAdapter; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Allocate Ndis Port fail\n")); - break; - } - - pTargetAdapter = pAdapter; - pPortHelper->pCreateDot11MacInfo->uNdisPortNumber = portNumber; - ndisPortAllocated = TRUE; - - pAdapter->pNdisCommon->dot11CurrentOperationMode.uCurrentOpMode = DOT11_OPERATION_MODE_EXTENSIBLE_STATION; - pAdapter->pNdis62Common->PortType = EXTSTA_PORT; - pAdapter->pNdis62Common->CurrentOpState=INIT_STATE; - pAdapter->pNdis62Common->PortNumber = portNumber; - pAdapter->bHWInitReady = TRUE; - pAdapter->bSWInitReady = TRUE; - pAdapter->bInitializeInProgress = FALSE; - pAdapter->MgntInfo.dot11CurrentWirelessMode = pDefaultAdapter->MgntInfo.dot11CurrentWirelessMode; - pAdapter->TotalCamEntry = pDefaultAdapter->TotalCamEntry; - pAdapter->HalfCamEntry = pDefaultAdapter->HalfCamEntry; - pAdapter->CamExtApMaxEntery = pDefaultAdapter->CamExtApMaxEntery; - pAdapter->CamExtApP2pStartIndex = pDefaultAdapter->CamExtApP2pStartIndex; - pAdapter->CamExtApP2pMaxEntry = pDefaultAdapter->CamExtApP2pMaxEntry; - pAdapter->CamExtStaPairwiseKeyPosition = pDefaultAdapter->CamExtStaPairwiseKeyPosition; - pAdapter->CamBtStartIndex = pDefaultAdapter->CamBtStartIndex; - pAdapter->BtHwCamStart = pDefaultAdapter->BtHwCamStart; - SetAPState(pAdapter, AP_STATE_STOPPED); - - if(IS_WIRELESS_MODE_N(pAdapter)) - pAdapter->MgntInfo.pHTInfo->bEnableHT = TRUE; - else - pAdapter->MgntInfo.pHTInfo->bEnableHT = FALSE; - - MgntRefreshSuppRateSet( pAdapter ); - - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSED); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Created a new Port \n" )); - - } while (FALSE); - - pAdapter = pDefaultAdapter; - - // Restart the miniport driver - do{ - if(pAllocFailAdapter != pAdapter) - { - if (N62CHelperHandleMiniportRestart(pAdapter, NULL) != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, (" N62CCreateMac(), N62CHelperHandleMiniportRestart() FAIL!!!\n")); - break; - } - } - pAdapter = GetNextExtAdapter(pAdapter); - }while(pAdapter!=NULL); - - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - if (N62CHelperHandleMiniportRestart(pDefaultAdapter, NULL) != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("HelperPortHandleMiniportRestart failed")); - } - //4: Need do any error handle ? Neo - } - - bCompleteStatus = N62CCompletePendingCreateDeleteMacOidRequest(Adapter, ndisStatus); - RT_TRACE(COMP_INIT, DBG_LOUD, (" N62CCreateMac(), N62CCompletePendingCreateDeleteMacOidRequest() bCompleteStatus=%d.\n", bCompleteStatus)); - - // - // We can now activate/deactivate the port. We cannot do this while we are processing - // the OID, else the OS would deadlock. - // - if (ndisStatus == NDIS_STATUS_SUCCESS && bCompleteStatus) - { - logValue[logCnt-1] |= BIT2; - // If this port has been allocated with NDIS, activate it. This notification - // goes upto the OS and it would handle the request - RT_TRACE(COMP_INIT, DBG_LOUD, (" N62CCreateMac(), before N62CHelperActivateNdisPort().\n")); -#if 0 - if(!OS_SUPPORT_WDI) - ndisStatus = N62CHelperActivateNdisPort(pTargetAdapter, portNumber); -#endif - RT_TRACE(COMP_INIT, DBG_LOUD, (" N62CCreateMac(), after N62CHelperActivateNdisPort().\n")); - } - else - { - logValue[logCnt-1] |= BIT3; - RT_TRACE(COMP_INIT, DBG_LOUD, (" N62CCreateMac(), ndisStatus=0x%x\n", ndisStatus)); - if (IS_ALLOCATED_PORT_NUMBER(portNumber)) - { - // If activated, deactivate the NDIS port - if (ndisPortActivated) - { -#if 0 - if(!OS_SUPPORT_WDI) - N62CHelperDeactivateNdisPort(pDefaultAdapter, portNumber); -#endif - } - - // If allocated free the NDIS port - if (ndisPortAllocated) - { -#if 0 - if(!OS_SUPPORT_WDI) - N62CHelperFreeNdisPort(pDefaultAdapter, portNumber); -#endif - } - } - } - logValue[logCnt-1] |= BIT4; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<==== N62CCreateMac()\n")); - return ndisStatus; -} - -NDIS_STATUS -N62CDeleteMac( - IN PADAPTER pAdapter - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_OID_REQUEST OidRequest = (PNDIS_OID_REQUEST)NdisOidRequest; - PDOT11_MAC_INFO MacInfo = NULL; - PMP_PORT destinationPort = NULL; - NDIS_PORT_NUMBER portNumber; - BOOLEAN destroyPortNumber = FALSE; - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - PADAPTER pTargetAdapter = NULL; - PADAPTER pLoopAdapter = NULL; - BOOLEAN bCompleteStatus = FALSE; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("====> N62CDeleteMac()\n")); - do - { - portNumber = pPortHelper->pCreateDot11MacInfo->uNdisPortNumber; - - // - // First we would need to translate from the NDIS_PORT_NUMBER - // to our port structure. This is done by walking the PortList - // Since OID calls are serialized, we do not expect the Portlist to change - // while we are trying to find the port or for the port to get deleted - // until this OID is completed. So we do not need to protect the Port/PortList - // in any way - // - - if (IS_ALLOCATED_PORT_NUMBER(portNumber)) - { - // This port has been allocate with NDIS. When we are done, delete the - // port - destroyPortNumber = TRUE; - } - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)portNumber); - - if(!IsDefaultAdapter(pTargetAdapter)) - { - /* - Pause the miniport before we modify the adapter's port list. - This is an expensive way to achieve this but it is simple to implement - */ - pLoopAdapter = GetDefaultAdapter(pAdapter); - - do - { - N6C_SET_MP_DRIVER_STATE_BACKUP(pLoopAdapter, N6C_GET_MP_DRIVER_STATE(pLoopAdapter)); - - if(N6C_GET_MP_DRIVER_STATE(pLoopAdapter) == MINIPORT_RUNNING) - { - ndisStatus = N62CHandleMiniportPause(pLoopAdapter, NULL); - - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("HelperPortHandleMiniportPause failed 0x%x\n", ndisStatus)); - break; - } - } - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } while(pLoopAdapter!=NULL); - - - // MultiPort Disable the Port ---------------------------------------- - MultiPortChangeExtAdapterActiveState(pTargetAdapter, FALSE); - - //sherry added for revise to default for fix wlk1.6 error - pTargetAdapter->pNdis62Common->CurrentOpState = INIT_STATE; - SetAPState(pTargetAdapter, AP_STATE_STOPPED); - // -------------------------------------------------------------- - - #if (P2P_SUPPORT == 1) - { - // Stop the Device or Role Port mode: Last 3 parameters are don't care - if(pTargetAdapter->pNdis62Common->PortType > EXTAP_PORT && pTargetAdapter->pNdis62Common->PortType <= EXT_P2P_ROLE_PORT) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("PortNum = %d, PortType = %d, disable P2P Mode!\n", pTargetAdapter->pNdis62Common->PortNumber, pTargetAdapter->pNdis62Common->PortType)); - MgntActSet_P2PMode(pTargetAdapter, FALSE, FALSE, 0, 0, 0); - } - } - #endif - - - // - // We should release all queued data frame for each port. - // 2013.07.08. - // - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - PlatformReleaseDataFrameQueued(pTargetAdapter); - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - pTargetAdapter->bSWInitReady = FALSE; - - /* - Restart so that normal operation may continue - */ - // TODO: should do deactive port. - pLoopAdapter = GetDefaultAdapter(pAdapter); - - do{ - if(N6C_GET_MP_DRIVER_STATE_BACKUP(pLoopAdapter) == MINIPORT_RUNNING) - { - ndisStatus = N62CHelperHandleMiniportRestart(pLoopAdapter, NULL); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("HelperPortHandleMiniportRestart failed 0x%x", ndisStatus)); - break; - } - } - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - }while(pLoopAdapter!=NULL); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Deleted the Mac with port number %d", portNumber)); - } - else - { - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - PlatformReleaseDataFrameQueued(pTargetAdapter); - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } - - } while (FALSE); - - bCompleteStatus = N62CCompletePendingCreateDeleteMacOidRequest(pAdapter, NDIS_STATUS_SUCCESS); - - // - // We can now deactivate the port. We cannot do this while we are processing - // the OID, else the OS would deadlock. - // - if ((ndisStatus == NDIS_STATUS_SUCCESS) && (destroyPortNumber == TRUE) && bCompleteStatus) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Deactivate & free the NDIS_PORT \n")); -#if 0 - if(!OS_SUPPORT_WDI) - { - N62CHelperDeactivateNdisPort(pTargetAdapter, portNumber); - N62CHelperFreeNdisPort(pTargetAdapter, portNumber); - } -#endif - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<==== N62CDeleteMac()\n")); - return ndisStatus; -} - -NDIS_STATUS -N62CHelperAllocateNdisPort( - IN PADAPTER pAdapter, - OUT PNDIS_PORT_NUMBER AllocatedPortNumber - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_PORT_CHARACTERISTICS portChar; - - // Call NDIS to allocate the port - NdisZeroMemory(&portChar, sizeof(NDIS_PORT_CHARACTERISTICS)); - - N6_ASSIGN_OBJECT_HEADER(portChar.Header, NDIS_OBJECT_TYPE_DEFAULT, - NDIS_PORT_CHARACTERISTICS_REVISION_1, sizeof(NDIS_PORT_CHARACTERISTICS)); - - portChar.Flags = NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS; - portChar.Type = NdisPortTypeUndefined; - portChar.MediaConnectState = MediaConnectStateConnected; - portChar.XmitLinkSpeed = NDIS_LINK_SPEED_UNKNOWN; - portChar.RcvLinkSpeed = NDIS_LINK_SPEED_UNKNOWN; - portChar.Direction = NET_IF_DIRECTION_SENDRECEIVE; - portChar.SendControlState = NdisPortControlStateUnknown; - portChar.RcvControlState = NdisPortControlStateUnknown; - portChar.SendAuthorizationState = NdisPortControlStateUncontrolled; // Ignored - portChar.RcvAuthorizationState = NdisPortControlStateUncontrolled; // Ignored - - - ndisStatus = NdisMAllocatePort(pAdapter->pNdisCommon->hNdisAdapter, &portChar); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Failed to allocate NDIS port. Status = 0x%08x\n", - ndisStatus)); - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Associated Port Number %d with allocated port\n", - portChar.PortNumber)); - - // Return the NDIS port number that has been allocated to this port - *AllocatedPortNumber = portChar.PortNumber; - } - - return ndisStatus; -} - -// MiniportOidRequest - Called from MP layer to Port -NDIS_STATUS -N62CStaOidHandler( - IN PADAPTER pAdapter, - IN PMP_PORT Port, - IN PNDIS_OID_REQUEST OidRequest - ) -{ - UNREFERENCED_PARAMETER(Port); - UNREFERENCED_PARAMETER(OidRequest); - return NDIS_STATUS_SUCCESS; -} - -/* See prototype for documentation */ -NDIS_STATUS -N62CStaSendEventHandler( - IN PMP_PORT Port, - // IN PMP_TX_MSDU PacketList, - IN ULONG SendFlags - ) -{ - UNREFERENCED_PARAMETER(Port); - //UNREFERENCED_PARAMETER(PacketList); - UNREFERENCED_PARAMETER(SendFlags); - - return NDIS_STATUS_SUCCESS; -} - -/* See prototype for documentation */ -NDIS_STATUS -N62CStaReceiveEventHandler( - IN PMP_PORT Port, - // IN PMP_RX_MSDU PacketList, - IN ULONG ReceiveFlags - ) -{ - UNREFERENCED_PARAMETER(Port); - //UNREFERENCED_PARAMETER(PacketList); - UNREFERENCED_PARAMETER(ReceiveFlags); - return NDIS_STATUS_SUCCESS; -} - -// TODO: Win 7 we should add some vnic function. -NDIS_STATUS -N62CHelperHandleMiniportRestart( - IN PADAPTER pAdapter, - IN PNDIS_MINIPORT_RESTART_PARAMETERS MiniportRestartParameters - ) -/*++ - -Routine Description: - - NDIS calls the miniport driver's MiniportRestart function to cause - the miniport to return the adapter to the Running state. - During the restart, the miniport driver must complete any tasks - that are required to resume send and receive operations before - completing the restart request. - -Argument: - - MiniportAdapterContext Pointer to our adapter - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_PENDING Can it return pending - NDIS_STATUS_XXX The driver fails to restart - - ---*/ -{ - N6C_MP_DRIVER_STATE CurrDriverState; - - UNREFERENCED_PARAMETER(MiniportRestartParameters); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==> N62CHelperHandleMiniportRestart(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - // - // Reset rx packet waiting mechanism. - // - N6CStartWaitReturnPacketMechanism(pAdapter); - - // - // Mark the miniport driver as running state to accept tx/rx request. - // - //CurrDriverState = N6C_GET_MP_DRIVER_STATE(pAdapter); - //RT_ASSERT( (CurrDriverState == MINIPORT_PAUSED), - // ("N62CHelperHandleMiniportRestart(): unexpected state (%#d)!!!\n", CurrDriverState)); - - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_RUNNING); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== N62CHelperHandleMiniportRestart(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N62CHelperHandleMiniportPause( - IN PADAPTER pAdapter, - IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters - ) -{ - N6C_MP_DRIVER_STATE CurrDriverState; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==> N62CHelperHandleMiniportPause(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - // - // Mark the miniport driver as pausing state to reject tx/rx request. - // - CurrDriverState = N6C_GET_MP_DRIVER_STATE(pAdapter); -/* - RT_ASSERT( (CurrDriverState < MINIPORT_PAUSED || - CurrDriverState > MINIPORT_PAUSING), - ("MiniportPause(): unexpected state (%#d)!!!\n", CurrDriverState)); -*/ - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSING); - - // - // Wait all NBL indicated up returned. - // - N6CWaitForReturnPacket(pAdapter); - - // - // Mark the miniport driver as paused state. - // - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSED); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== N62CHelperHandleMiniportPause(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N62CHelperActivateNdisPort( - IN PADAPTER pAdapter, - IN NDIS_PORT_NUMBER PortNumberToActivate - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NET_PNP_EVENT_NOTIFICATION netPnpEventNotification; - NDIS_PORT ndisPort; - PNDIS_PORT_CHARACTERISTICS portChar; - - NdisZeroMemory(&netPnpEventNotification, sizeof(NET_PNP_EVENT_NOTIFICATION)); - NdisZeroMemory(&ndisPort, sizeof(NDIS_PORT)); - - N6_ASSIGN_OBJECT_HEADER(netPnpEventNotification.Header, NDIS_OBJECT_TYPE_DEFAULT, - NET_PNP_EVENT_NOTIFICATION_REVISION_1, sizeof(NET_PNP_EVENT_NOTIFICATION)); - - netPnpEventNotification.NetPnPEvent.NetEvent = NetEventPortActivation; - - // Refill the characteristics structure for the port - portChar = &(ndisPort.PortCharacteristics); - - N6_ASSIGN_OBJECT_HEADER(portChar->Header, NDIS_OBJECT_TYPE_DEFAULT, - NDIS_PORT_CHARACTERISTICS_REVISION_1, sizeof(NDIS_PORT_CHARACTERISTICS)); - - portChar->Flags = NDIS_PORT_CHAR_USE_DEFAULT_AUTH_SETTINGS; - portChar->Type = NdisPortTypeUndefined; - portChar->MediaConnectState = MediaConnectStateConnected; - portChar->XmitLinkSpeed = NDIS_LINK_SPEED_UNKNOWN; - portChar->RcvLinkSpeed = NDIS_LINK_SPEED_UNKNOWN; - portChar->Direction = NET_IF_DIRECTION_SENDRECEIVE; - portChar->SendControlState = NdisPortControlStateUnknown; - portChar->RcvControlState = NdisPortControlStateUnknown; - portChar->SendAuthorizationState = NdisPortControlStateUncontrolled; // Ignored - portChar->RcvAuthorizationState = NdisPortControlStateUncontrolled; // Ignored - portChar->PortNumber = PortNumberToActivate; - - // Single port is being activated - ndisPort.Next = NULL; - - // We need to save a pointer to the NDIS_PORT in the NetPnPEvent::Buffer field - netPnpEventNotification.NetPnPEvent.Buffer = (PVOID)&ndisPort; - netPnpEventNotification.NetPnPEvent.BufferLength = sizeof(NDIS_PORT); - - ndisStatus = NdisMNetPnPEvent(pAdapter->pNdisCommon->hNdisAdapter, &netPnpEventNotification); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Failed to activate NDIS port %d. Status = 0x%08x\n", - PortNumberToActivate, ndisStatus)); - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Activated Port Number %d\n", PortNumberToActivate)); - } - - return ndisStatus; -} - -VOID -N62CHelperDeactivateNdisPort( - IN PADAPTER pAdapter, - IN NDIS_PORT_NUMBER PortNumberToDeactivate - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NET_PNP_EVENT_NOTIFICATION netPnpEventNotification; - NDIS_PORT_NUMBER portNumberArray[1]; - - NdisZeroMemory(&netPnpEventNotification, sizeof(NET_PNP_EVENT_NOTIFICATION)); - - N6_ASSIGN_OBJECT_HEADER(netPnpEventNotification.Header, NDIS_OBJECT_TYPE_DEFAULT, - NET_PNP_EVENT_NOTIFICATION_REVISION_1, sizeof(NET_PNP_EVENT_NOTIFICATION)); - - netPnpEventNotification.NetPnPEvent.NetEvent = NetEventPortDeactivation; - - // We need to save a pointer to the NDIS_PORT_NUMBER in the NetPnPEvent::Buffer field - portNumberArray[0] = PortNumberToDeactivate; - netPnpEventNotification.NetPnPEvent.Buffer = (PVOID)portNumberArray; - netPnpEventNotification.NetPnPEvent.BufferLength = sizeof(NDIS_PORT_NUMBER); - - ndisStatus = NdisMNetPnPEvent(pAdapter->pNdisCommon->hNdisAdapter, &netPnpEventNotification); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Failed to deactivate NDIS port %d. Status = 0x%08x\n", - PortNumberToDeactivate, ndisStatus)); - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Deactivated Port Number %d\n", PortNumberToDeactivate)); - } -} - -VOID -N62CHelperFreeNdisPort( - IN PADAPTER pAdapter, - IN NDIS_PORT_NUMBER PortNumberToFree - ) -{ - NDIS_STATUS ndisStatus; - - // Free the NDIS port - - ndisStatus = NdisMFreePort(pAdapter->pNdisCommon->hNdisAdapter, PortNumberToFree); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N62CHelperFreeNdisPort\n")); -} - -NDIS_STATUS -N62CHandleMiniportPause( - IN PADAPTER pAdapter, - IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters - ) -{ - N6C_MP_DRIVER_STATE CurrDriverState; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==> N62CHandleMiniportPause(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - // - // Mark the miniport driver as pausing state to reject tx/rx request. - // - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSING); - - // - // Wait all NBL indicated up returned. - // - N6CWaitForReturnPacket(pAdapter); - - // - // Mark the miniport driver as paused state. - // - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSED); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== N62CHandleMiniportPause(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - return NDIS_STATUS_SUCCESS; -} - - - - - -MP_PORT_TYPE -N62CGetPortTypeByOpMode( - IN ULONG OpMode - ) -{ - switch (OpMode) - { - case DOT11_OPERATION_MODE_EXTENSIBLE_STATION: - case DOT11_OPERATION_MODE_NETWORK_MONITOR: - return EXTSTA_PORT; - - case DOT11_OPERATION_MODE_EXTENSIBLE_AP: - return EXTAP_PORT; - - case DOT11_OPERATION_MODE_WFD_DEVICE: - return EXT_P2P_DEVICE_PORT; - case DOT11_OPERATION_MODE_WFD_GROUP_OWNER: - case DOT11_OPERATION_MODE_WFD_CLIENT: - return EXT_P2P_ROLE_PORT; - - default: - return EXTSTA_PORT; - } -} - - -NDIS_STATUS -N62CSetOperationMode( - IN PADAPTER pAdapter, - IN ULONG OpMode - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - if (OpMode == DOT11_OPERATION_MODE_NETWORK_MONITOR) - { - // Disable autoconfig when in Netmon mode - pNdisCommon->dot11AutoConfigEnabled = FALSE; - } - else - { - // By default autoconfig is enabled - pNdisCommon->dot11AutoConfigEnabled = TRUE; - } - - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N62CPortSetOperationMode( - IN PADAPTER pAdapter, - IN ULONG OpMode - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - //pNdisCommon->dot11CurrentOperationMode.uCurrentOpMode = OpMode; - switch (pNdis62Common->PortType) - { - case EXTSTA_PORT: - ndisStatus = N62CSetOperationMode(pAdapter, OpMode); - break; - - case EXTAP_PORT: - ndisStatus = NDIS_STATUS_SUCCESS; - break; - - default: - RT_TRACE(COMP_INIT, DBG_LOUD, ("Attempting to notify op mode change event to unrecognized port type %d\n", pNdis62Common->PortType)); - ndisStatus = NDIS_STATUS_INVALID_PARAMETER; - break; - } - - //Add to set the active port when this oid is set, for avoid ap send beacon on the wrong channel. - //when ap mode is set on the ext port, by Maddest 080716. - //GetActiveAdapter(GetDefaultAdapter(pAdapter))=pAdapter; - //GetActiveAdapter(GetExtAdapter(pAdapter))=pAdapter; - return ndisStatus; -} - -void -N62CDeleteVirtualPort( - IN PADAPTER pAdapter - ) -{ - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - PlatformReleaseDataFrameQueued(pAdapter); - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - N62CHelperDeactivateNdisPort(pAdapter, pAdapter->pNdis62Common->PortNumber); - N62CHelperFreeNdisPort(pAdapter, pAdapter->pNdis62Common->PortNumber); -} - -NDIS_STATUS -N62CChangePortTypeByOpMode( - IN PADAPTER pAdapter, - IN PDOT11_CURRENT_OPERATION_MODE dot11OpMode - ) -{ - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - MP_PORT_TYPE newPortType = N62CGetPortTypeByOpMode(dot11OpMode->uCurrentOpMode); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===>N62CChangePortTypeByOpMode(): Port Number: %d\n", pNdis62Common->PortNumber)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===>N62CChangePortTypeByOpMode(): MP_PORT_TYPE: newPortType %d, DOT11_CURRENT_OPERATION_MODE: newOpMode %d\n", newPortType, dot11OpMode->uCurrentOpMode)); - - // Win8: Change Port Type - // + If Port Type is Role Port, always change the mode and reset the internal variables - if (pNdis62Common->PortType != newPortType || pNdis62Common->PortType == EXT_P2P_ROLE_PORT) - { - // First we pause the current port - ndisStatus = N62CHandleMiniportPause(pAdapter, NULL); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("Failed to pause port %d to change Op Mode. Status = 0x%08x\n", - pNdis62Common->PortNumber, ndisStatus)); - - return ndisStatus; - } - - // ExtAP and ExtSTA are handled here - N62CChangePortType(pAdapter, pNdis62Common->PortType, newPortType); - - pNdis62Common->PortType = newPortType; - - -{ - P2P_ROLE PortRole = P2P_NONE; - - switch(dot11OpMode->uCurrentOpMode) - { - case DOT11_OPERATION_MODE_WFD_DEVICE: - PortRole = P2P_DEVICE; - break; - case DOT11_OPERATION_MODE_WFD_GROUP_OWNER: - PortRole = P2P_GO; - break; - case DOT11_OPERATION_MODE_WFD_CLIENT: - PortRole = P2P_CLIENT; - break; - - default: - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("Unknown Port Type Observed: dot11OpMode->uCurrentOpMode %d!\n", - dot11OpMode->uCurrentOpMode) - ); - break; - } - - if(PortRole != P2P_NONE) - { - ndisStatus = N63CResetWifiDirectPorts(pAdapter, PortRole, RESET_LEVEL_FULL); - } -} - - // - // Restart the adapter. - // - ndisStatus = N62CHelperHandleMiniportRestart(pAdapter, NULL); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, - ("Failed to restart port %d after change of Op Mode. Status = 0x%08x\n", - pNdis62Common->PortNumber, ndisStatus)); - } - - } - -#if (P2P_SUPPORT == 1) - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== %s: MP_PORT_TYPE: pNdis62Common->PortType: %d, P2P_ROLE: pP2PInfo->Role: %d\n", __FUNCTION__, pNdis62Common->PortType, GET_P2P_INFO(pAdapter)->Role)); -#endif - return ndisStatus; -} - -VOID -N62CChangePortType( - IN PADAPTER pAdapter, - IN MP_PORT_TYPE OldPortType, - IN MP_PORT_TYPE NewPortType - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - do - { - if(OldPortType==NewPortType) - { - break; - } - switch(NewPortType) - - { - case EXTSTA_PORT: - { - pNdis62Common->CurrentOpState=INIT_STATE; - MgntActSet_ApType(pAdapter, FALSE); - N62CResetAPVariables(pAdapter, FALSE); - ResetMgntVariables(pAdapter); - - #if P2P_SUPPORT == 1 - if(OldPortType > EXTAP_PORT && OldPortType <= EXT_P2P_ROLE_PORT) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Change to EXTSTA_PORT, PortNum = %d, OldPortType = %d, disable P2P Mode!\n", pAdapter->pNdis62Common->PortNumber, OldPortType)); - // Stop P2P Mode: Last 3 parameters are don't care - MgntActSet_P2PMode(pAdapter, FALSE, FALSE, 0, 0, 0); - } - #endif - - break; - } - case EXTAP_PORT: - { - pNdis62Common->CurrentOpState=INIT_STATE; - N62CResetAPVariables(pAdapter, TRUE); - SetAPState(pAdapter, AP_STATE_STOPPED); - - #if P2P_SUPPORT == 1 - if(OldPortType > EXTAP_PORT && OldPortType <= EXT_P2P_ROLE_PORT) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Change to EXTAP_PORT, PortNum = %d, OldPortType = %d, disable P2P Mode!\n", pAdapter->pNdis62Common->PortNumber, OldPortType)); - // Stop P2P Mode: Last 3 parameters are don't care - MgntActSet_P2PMode(pAdapter, FALSE, FALSE, 0, 0, 0); - } - #endif - - break; - } - default: - break; - } - }while(FALSE); - return ; -} - -VOID -N62CExtAdapterHandleNBLInWaitQueue( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon; - PRT_SDIO_DEVICE pDevice; - PNET_BUFFER_LIST pNetBufferList; - PADAPTER pAdapter = GetFirstExtAdapter(Adapter); - - while(pAdapter != NULL) - { - pNdisCommon = pAdapter->pNdisCommon; - pDevice = GET_RT_SDIO_DEVICE(pAdapter); - - if(PlatformAtomicExchange(&pAdapter->IntrNBLRefCount, TRUE)==TRUE) - return; - - // - // Send NBL in wait queue. - // - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - while(pDevice->SendingNetBufferList == NULL) - { - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - if(N6CIsNblWaitQueueEmpty(pNdisCommon->TxNBLWaitQueue)) - { - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - break; - } - - if(!pNdisCommon->bReleaseNblWaitQueueInProgress) - { - pNetBufferList = N6CGetHeadNblWaitQueue(pNdisCommon->TxNBLWaitQueue); - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6PciHandleInterrupt(): N6CGetHeadNblWaitQueue(): pCurrNetBufferList(%p)\n", pNetBufferList )); - - if( N6SDIO_CANNOT_TX(pAdapter) ) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6PciHandleInterrupt(): bread for CANNOT_TX()\n")); - break; - } - - if( !N6SdioSendSingleNetBufferList( - pAdapter, - pNetBufferList, - TRUE)) // bFromQueue - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6PciHandleInterrupt(): N6PciSendSingleNetBufferList() returns FALSE\n")); - break; - } - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6PciHandleInterrupt(): bReleaseNblWaitQueueInProgress\n")); - } - } - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - PlatformAtomicExchange(&pAdapter->IntrNBLRefCount, FALSE); - } -} - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.h deleted file mode 100644 index d5190576..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_Port.h +++ /dev/null @@ -1,945 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - N62C_Port.h - -Abstract: - Contains Port specific defines - -Revision History: - When What - ---------- ---------------------------------------------- - 04-22-2007 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _N62_PORT__H -#define _N62_PORT__H - -typedef struct _ADAPTER ADAPTER, *PADAPTER; -typedef struct _HVL HVL, *PHVL; -typedef struct _HW HW, *PHW; -typedef struct _VNIC VNIC, *PVNIC; -typedef struct _MP_PORT MP_PORT, *PMP_PORT; - -#define Platform_PORT_ACQUIRE_PNP_MUTEX(_Port) \ - NDIS_WAIT_FOR_MUTEX(&(_Port->ResetPnpMutex)) -#define Platform_PORT_RELEASE_PNP_MUTEX(_Port) \ - NDIS_RELEASE_MUTEX(&(_Port->ResetPnpMutex)) - -// If any of the flags are set, we cannot send -#define MP_PORT_CANNOT_SEND_MASK (MP_PORT_PAUSED | MP_PORT_PAUSING | MP_PORT_HALTING | \ - MP_PORT_IN_RESET) - -// If any of these flags are set, we cannot scan -#define MP_PORT_CANNOT_SCAN_MASK (MP_PORT_PAUSED | MP_PORT_PAUSING | MP_PORT_HALTING | \ - MP_PORT_IN_RESET) - -#define MP_SET_PORT_STATUS(_Port, _Flag) \ - ((_Port->Status) |= (_Flag)) - -#define MP_CLEAR_PORT_STATUS(_Port, _Flag) \ - ((_Port->Status) &=! (_Flag)) - -#define MP_TEST_PORT_STATUS(_Port, _Flag) \ - ((_Port->Status) =0) - -// Port status flags and manipulation macros -#define MP_PORT_PAUSED 0x00000001 -#define MP_PORT_PAUSING 0x00000002 -#define MP_PORT_HALTING 0x00000010 -#define MP_PORT_IN_RESET 0x00000020 - -#define DEFAULT_NDIS_PORT_NUMBER 0 -#define HELPER_PORT_PORT_NUMBER 0xFFFFFFFF -#define MP_MAX_NUMBER_OF_PORT 0x8 - -// 0x05 is enough: ExtSTA + ExtAP + ExtDevice + ExtRoleGO + ExtRoleClient -#define MP_DEFAULT_NUMBER_OF_PORT 0x5 - - -/** Maximum number of candidate BSS we will use for association */ -#define STA_CANDIDATE_AP_MAX_COUNT 32 - -// Pool tags for this driver -#define MP_MEMORY_TAG 'MltA' // MP Layer -#define PORT_MEMORY_TAG 'PltA' // Port -#define EXTSTA_MEMORY_TAG 'SltA' // ExtSTA -#define EXTAP_MEMORY_TAG 'AltA' // ExtAP -#define HVL_MEMORY_TAG 'VltA' // HVL/VNIC -#define HW_MEMORY_TAG 'HltA' // HW - -/** Maximum number of MAC addresses we support in the excluded list */ -#define STA_EXCLUDED_MAC_ADDRESS_MAX_COUNT 4 -/** Max number of desired BSSIDs we can handle */ -#define STA_DESIRED_BSSID_MAX_COUNT 8 -/** Max number of desired PHYs we can handle */ -#define STA_DESIRED_PHY_MAX_COUNT 5 -/** Max number of PMKID we can handle */ -#define STA_PMKID_MAX_COUNT 3 -/** Max number of enabled multicast cipher algorithms */ -#define STA_MULTICAST_CIPHER_MAX_COUNT 6 - -#define MP_VERIFY_QUEUE(_PacketQueue) \ - ASSERT(!((_PacketQueue)->Head == NULL && (_PacketQueue)->Count != 0)); \ - ASSERT(!((_PacketQueue)->Head != NULL && (_PacketQueue)->Count == 0)); \ - ASSERT(!((_PacketQueue)->Head == NULL && (_PacketQueue)->Tail != NULL)); \ - ASSERT(!((_PacketQueue)->Head != NULL && (_PacketQueue)->Tail == NULL)); - -#define N62CInitPacketQueue(PacketQueue) \ - NdisZeroMemory(PacketQueue, sizeof(MP_PACKET_QUEUE)); - -#ifndef MIN - #define MIN(a, b) ((a) < (b)? a : b) -#endif // MIN -#ifndef MAX - #define MAX(a, b) ((a) > (b)? a : b) -#endif // MAX - -#define MAX_PHY_ID 10 -__inline BOOLEAN -N62CPacketQueueIsEmpty( - PMP_PACKET_QUEUE PacketQueue - ) -{ - MP_VERIFY_QUEUE(PacketQueue); - return (((PacketQueue)->Head==NULL)? TRUE : FALSE); -} - -__inline BOOLEAN -N62CDeinitPacketQueue( - PMP_PACKET_QUEUE PacketQueue - ) -{ - return N62CPacketQueueIsEmpty(PacketQueue); -} - -typedef struct _PORT_HELPER -{ - - RT_WORK_ITEM CreateDeleteMacWorkitem; - RT_TIMER CreateDeleteMacTimer; - BOOLEAN bCreateMac; - BOOLEAN bDeleteMac; - PDOT11_MAC_INFO pCreateDot11MacInfo; - PNDIS_OID_REQUEST pCreateDeleteOID; -} PORT_HELPER, *PPORT_HELPER; - -typedef struct _RT_NDIS62_COMMON -{ - - MP_PORT_OP_STATE CurrentOpState; // Indicate to Win7. - MP_PORT_TYPE PortType; // Used by Port, ChildPort & MP - NDIS_PORT_NUMBER PortNumber; // NDIS allocate port number - BOOLEAN bWPSEnable; // AP Port for OID_DOT11_WPS_ENABLED - BOOLEAN bIsDot11PhyIdSet[MAX_PHY_ID]; - BOOLEAN bDot11SetPhyIdReady; - -}RT_NDIS62_COMMON, *PRT_NDIS62_COMMON; - - -/** - * Registry configuration information - */ -typedef struct _MP_HELPER_REG_INFO -{ - /** Link quality for low threshold */ - ULONG RSSILinkQualityThreshold; - - /** Time in 100ns, to hold a BSS entry even after beacons are missed */ - ULONG BSSEntryExpireTime; - - /** Max number of BSS entries to cache */ - ULONG BSSEntryMaxCount; - - ULONG ActiveScanChannelCount; // MP_SCAN_SET_CHANNEL_COUNT_ACTIVE - - ULONG PassiveScanChannelCount;// MP_SCAN_SET_CHANNEL_COUNT_PASSIVE - - ULONG ScanRescheduleTime; // MP_SCAN_RESCHEDULE_TIME_MS - - ULONG InterScanTime; // MP_INTER_SCAN_TIME - -} MP_HELPER_REG_INFO, *PMP_HELPER_REG_INFO; - - -typedef struct _MP_HELPER_PORT -{ - /** Pointer back to the parent port of this port */ - PMP_PORT ParentPort; - - NDIS_DEVICE_POWER_STATE DevicePowerState; - - /** Pointer to helper port registry info */ - PMP_HELPER_REG_INFO RegInfo; - - LONG TrackingExclusiveAccessAcquireCount; - LONG TrackingExclusiveAccessReleaseCount; - LONG TrackingExclusiveAccessGrantCount; -} MP_HELPER_PORT, *PMP_HELPER_PORT; - - -/** Contains configuration information read from the registry for each of the port */ -typedef struct _MP_PORT_REG_INFO -{ - /** Helper port's info */ - PVOID HelperPortRegInfo; - /** EXTSTA port's info */ - PVOID ExtStaRegInfo; - /** EXTAP port's info */ - PVOID ExtAPRegInfo; -}MP_PORT_REG_INFO, *PMP_PORT_REG_INFO; - -/** - * State read from the registry - */ -typedef struct _STA_REG_INFO -{ - /** Max number of adhoc station entries to maintain */ - ULONG AdhocStationMaxCount; - - /** Time in 100ns, to hold an entry even after beacons are missed */ - ULONG BSSEntryExpireTime; - - /** Number of missed beacons before we roam */ - ULONG LostAPRoamBeaconCount; - - /** Number of low quality beacons before we roam */ - ULONG RSSIRoamBeaconCount; - - ULONG Bogus; -} STA_REG_INFO, *PSTA_REG_INFO; - -typedef struct _STA_ADHOC_STA_INFO -{ - /** - * Linked list of discovered access points - * This list must not be modified/read without acquiring the - * ListLock - */ - LIST_ENTRY StaList; - ULONG StaCount; - ULONG DeauthStaCount; - - /** - * Lock we need before we adding/removing entries from the - * discovered AP list. This will be acquired for read by - * routines that are not modifying the chain and acquired - * for write by routines that will be removing entries or - * adding entries to the chain - */ - // TODO: Win 7 - // MP_READ_WRITE_LOCK StaListLock; - - /** - * Lock for changing state, protecting connection variables, etc. - * - * When acquiring both this lock and StaListLock, StaListLock - * must be acquired FIRST to ensure consistency throughout the code - * and avoid deadlock - */ - NDIS_SPIN_LOCK StaInfoLock; - - ULONG AdHocState; - - /** Watchdog timer used in AdHoc mode */ - NDIS_HANDLE WatchdogTimer; - LONG TimerCounter; - - /** Connect work item */ - NDIS_HANDLE ConnectWorkItem; - - /** For signalling the completion of a synchroneous join request */ - NDIS_EVENT JoinCompletionEvent; - NDIS_STATUS JoinCompletionStatus; - - /** For signalling the completion of a synchronous start/stop request */ - NDIS_STATUS StartBSSCompletionStatus; - NDIS_EVENT StartBSSCompletionEvent; - NDIS_EVENT StopBSSCompletionEvent; - -} STA_ADHOC_STA_INFO, *PSTA_ADHOC_STA_INFO; - -/** - * Holds current configuration of the miniport. This information - * is updated on OIDs request from the OS. One place this - * is used is for selecting the access points for making a conneciton - */ -typedef struct _STA_CURRENT_CONFIG -{ - /** BSS type configured by the OS */ - DOT11_BSS_TYPE BSSType; - - /** SSID that we can associate with (we only support one SSID) - */ - DOT11_SSID SSID; - - /** List of MAC addresses we should not try to associate with */ - DOT11_MAC_ADDRESS ExcludedMACAddressList[STA_EXCLUDED_MAC_ADDRESS_MAX_COUNT]; - ULONG ExcludedMACAddressCount; - BOOLEAN IgnoreAllMACAddresses; - - /** Desired BSSID we should attempt to associate with */ - DOT11_MAC_ADDRESS DesiredBSSIDList[STA_DESIRED_BSSID_MAX_COUNT]; - ULONG DesiredBSSIDCount; - BOOLEAN AcceptAnyBSSID; - - /** PHY list */ - ULONG DesiredPhyList[STA_DESIRED_PHY_MAX_COUNT]; - ULONG DesiredPhyCount; - ULONG ActivePhyId; - - /** PMKID list */ - DOT11_PMKID_ENTRY PMKIDList[STA_PMKID_MAX_COUNT]; - ULONG PMKIDCount; - - /** Currently enabled authentication algorithm */ - DOT11_AUTH_ALGORITHM AuthAlgorithm; - - /** Currently enabled unicast cipher algorithm */ - DOT11_CIPHER_ALGORITHM UnicastCipherAlgorithm; - - /** Currently enabled multicast cipher algorithm */ - DOT11_CIPHER_ALGORITHM MulticastCipherAlgorithmList[STA_MULTICAST_CIPHER_MAX_COUNT]; - ULONG MulticastCipherAlgorithmCount; - DOT11_CIPHER_ALGORITHM MulticastCipherAlgorithm; - - /** Current setting of unreachable detection threshold */ - ULONG UnreachableDetectionThreshold; - - /** Current setting related to acceptance of unencrypted data */ - BOOLEAN ExcludeUnencrypted; - PDOT11_PRIVACY_EXEMPTION_LIST PrivacyExemptionList; - - /** Current association ID */ - BOOLEAN ValidAID; - USHORT AID; - - /** Current Listen interval */ - USHORT ListenInterval; - - /** Current power saving level */ - ULONG PowerSavingLevel; - - /** Current IBSS parameters */ - BOOLEAN IBSSJoinOnly; - PVOID AdditionalIEData; - ULONG AdditionalIESize; - - /** Media streaming enabled or not */ - BOOLEAN MediaStreamingEnabled; - - /** Determines if we associate with an BSS which does not support any pairwise cipher */ - BOOLEAN UnicastUseGroupEnabled; - - /** Current hidden OID setting */ - BOOLEAN HiddenNetworkEnabled; - - /** check for use protection bit in beacon ERP IE after a successful connection or scan */ - BOOLEAN CheckForProtectionInERP; -}STA_CURRENT_CONFIG, *PSTA_CURRENT_CONFIG; - - -/** - * Holds information about each BSS we have found. - * This is updated on a beacon/probe response in the context of our - * receive handler. A linked list of these entries is maintained - * by the station to keep track of the discovered BSS - */ -typedef struct _MP_BSS_ENTRY -{ - /** List entry linkage */ - LIST_ENTRY Link; - - /** Reference count to keep track of number of users of the AP entry. - * When the entry is added to the linked list, this starts at 1. Association - * process would add an extra reference to keep the entry around while - * it is still associating/associated. - */ - LONG RefCount; - - /** - * Spinlock to protect modification of beacon/information element pointers while - * other threads may be using it - */ - NDIS_SPIN_LOCK Lock; - - DOT11_PHY_TYPE Dot11PhyType; - - ULONG PhyId; - - /** RSSI for the beacon/probe */ - LONG RSSI; - - /** Link quality */ - ULONG LinkQuality; - - ULONG ChannelCenterFrequency; - - DOT11_BSS_TYPE Dot11BSSType; - - DOT11_MAC_ADDRESS Dot11BSSID; - - DOT11_MAC_ADDRESS MacAddress; - - USHORT BeaconInterval; - - ULONGLONG BeaconTimestamp; - - ULONGLONG HostTimestamp; - - DOT11_CAPABILITY Dot11Capability; - - ULONG MaxBeaconFrameSize; - PUCHAR pDot11BeaconFrame; // Beacon frame starting after management header - ULONG BeaconFrameSize; - - PUCHAR pDot11InfoElemBlob; // Pointer to the information elements in the beacon frame - ULONG InfoElemBlobSize; // Length of information element blob - - UCHAR Channel; // Valid only if it is non-zero - - DOT11_SSID ProbeSSID; // The SSID from probe responses. This is stored - // separately since probe buffer may get overwritten - // by beacons and we may lose the SSID from probe - - /** - * The OS needs to be given the association request - * packet information on a association completion. This - * information is cached in this structure - */ - __field_ecount(AssocRequestLength) - PUCHAR pAssocRequest; - USHORT AssocRequestLength; // Includes header - - /** - * The OS needs to be given the association response - * packet information on a association completion. This - * information is cached in this structure - */ - USHORT AssocResponseLength; // Includes header - __field_ecount(AssocResponseLength) - PUCHAR pAssocResponse; - - /** Association ID */ - USHORT AssocID; - - /** Association state. Just keeps state and not lock protected */ - DOT11_ASSOCIATION_STATE AssocState; - - /** Timestamp when we obtained the association */ - LARGE_INTEGER AssociationUpTime; - - /** - * Cost for roaming purpose. A lower number is better. We dont - * rank of APs based on this, but use higher number this for rejecting - * some AP - */ - LONG AssocCost; - - /** - * Time in 100 ns after which we assume connectivity is lost - * with this AP - */ - ULONGLONG NoBeaconRoamTime; - - /** - * Number of contiguous beacons which had signal strength lower than - * our roaming threshold - */ - ULONG LowQualityCount; - -} MP_BSS_ENTRY, * PMP_BSS_ENTRY; - -/** Structure holds for passing BSS information among the various layer */ -typedef struct _MP_BSS_DESCRIPTION -{ - DOT11_BSS_TYPE BSSType; - - DOT11_MAC_ADDRESS BSSID; - - DOT11_MAC_ADDRESS MacAddress; - - USHORT BeaconPeriod; - - ULONGLONG Timestamp; - - DOT11_CAPABILITY Capability; - - /* When true the hardware wont beacon */ - BOOLEAN NoBeaconMode; - - ULONG PhyId; - UCHAR Channel; // Valid only if it is non-zero - - ULONG InfoElemBlobSize; - UCHAR InfoElemBlob[1]; // Must be the last field. - -} MP_BSS_DESCRIPTION, *PMP_BSS_DESCRIPTION; - -/** - * Connection context structure used during infrastructure connection attempt - */ -typedef struct _STA_INFRA_CONNECT_CONTEXT -{ - /** - * Used to keep track of number of asynchronous functions pending to - * complete the connection attempt. This is used in CONN_STATE_IN_RESET - * to wait for the connection process to complete before reseting the - * adapter. Reset waits for this to go to zero. This structure is - * modified using interlocked operations. - */ - LONG AsyncFuncCount; - - /** - * Different events can cause the driver to reset its connection attempt. - * This mutex is used to serialize multiple simultaneous reset/cleanup - * routines - */ - NDIS_MUTEX DisconnectGate; - - /** - * Lock for changing state, protecting connection variables, etc. - * This is used for connecting and during scanning - * - * When acquiring both this lock and lock on the AP entry, the AP entry - * lock must be acquired second to ensure consistency throughout the code - * and avoid deadlock - */ - NDIS_SPIN_LOCK Lock; - - /** - * Current association state of the station. This variable is - * normally modified by the various association routines. The Reset/Disconnect - * routines will modify this once they are sure no association routine is using - * this. The Connect routine would initialize this. This is modified - * with the Lock held - */ - STA_ASSOC_STATE AssociateState; - - /** - * DeAuthReason value is valid only when AssociateState == ASSOC_STATE_REMOTELY_DEAUTHENTICATED - */ - USHORT DeAuthReason; - - /** - * This field is only meaningful when AssociateState is - * ASSOC_STATE_WAITING_FOR_AUTHENTICATE. It specifies the sequence - * number of the authenticate response we are expecting. - */ - USHORT ExpectedAuthSeqNumber; - - /** - * Tracks whether or not we are allowed to connect. This is only - * modified by the Connect/Reset/Disconnect routines. The various - * functions that handle associate would read this to check if they - * should continue with the association. This is modified - * with the Lock held - */ - STA_CONNECT_STATE ConnectState; - - /** - * Stores the previous connect state. This is used when we are reset - * etc in the middle of a connect. - */ - STA_CONNECT_STATE PreviousConnectState; - - /** - * BSSEntry that we are currently using for association, are associated with. - * This is modified with the Lock held - */ - PMP_BSS_ENTRY ActiveAP; - - /** - * The candidate access points we will attempt to associate with. - */ - PMP_BSS_ENTRY CandidateAPList[STA_CANDIDATE_AP_MAX_COUNT]; - ULONG CandidateAPCount; - - /** Index of the candidate AP we are currently associating with (starts with 0) */ - ULONG CurrentCandidateAPIndex; - - /** - * Buffer to use for association completion. We will preallocate this - * buffer to ensure that we are able to indicate completion even in case - * of low resources. We only use this for signalling association completion - * in case we run low on resources - */ - PUCHAR pAssocFailBuffer; - - /** - * Timer object used when waiting for authentication process to complete. - * The timer will be set when the authentication process begins - */ - NDIS_HANDLE Timer_AuthenticateTimeout; - - /** - * Timer object used when waiting for association process to complete. - * The timer will be set when the association process begins - */ - NDIS_HANDLE Timer_AssociateTimeout; - - BOOLEAN RoamForSendFailures; - - /** indicate link quality to the OS */ - BOOLEAN UpdateLinkQuality; - - PMP_BSS_DESCRIPTION JoinBSSDescription; - ULONG JoinFailureTimeout; -}STA_INFRA_CONNECT_CONTEXT, *PSTA_INFRA_CONNECT_CONTEXT; - -/** - * State we maintain for holding - */ -typedef struct _STA_SCAN_CONTEXT -{ - /** Scan related data. (May be grouped together later) */ - PVOID ScanRequestID; - - /** Scan request buffer for OID request from OS */ - PDOT11_SCAN_REQUEST_V2 ExternalScanRequestBuffer; - - /** Timer we use for periodic scanning */ - NDIS_HANDLE Timer_PeriodicScan; - - /** Scan request buffer we use for internal scan request */ - PDOT11_SCAN_REQUEST_V2 InternalScanRequestBuffer; - - /** Length of above buffer */ - ULONG InternalScanBufferLength; - - /** Flags that keep track of scan state */ - ULONG Flags; - - /** Tracks how many times the periodic scans have been disabled. When non-zero - * periodic scans shouldnt happen - */ - ULONG PeriodicScanDisableCount; - - /** - * Number of times that the periodic scan timer has run, but - * did has not done any scanning - */ - ULONG PeriodicScanCounter; - - /** - * Number of ticks since are have performed a periodic scan - * for roaming/connectiong purposes - */ - ULONG RoamingScanGap; - - /** The time at which we started the last scan (periodic or OS scan) */ - ULONGLONG LastScanTime; - - /** - * Set to true to indicate that we are scanning for roaming - */ - BOOLEAN ScanForRoam; - - /** - * Set to true when we need to roam now or we have a problem - */ - BOOLEAN MustRoam; - - /** - * This is generally true and we would be adding the SSID of the network in - * our probe requests. When we go to sleep, this becomes false, causing us to - * stop putting the SSID in our probe requests until we wake up - */ - BOOLEAN SSIDInProbeRequest; - -}STA_SCAN_CONTEXT, *PSTA_SCAN_CONTEXT; - -typedef struct _STA_PMKID_CACHE { - - /** The time at which we checked for PMKID candidate */ - ULONGLONG CheckingTime; - - /** Number of PMKID candidates indicated last time */ - ULONG Count; - - /** PMKID candidates indicated last time */ - DOT11_BSSID_CANDIDATE Candidate[STA_PMKID_MAX_COUNT]; - -} STA_PMKID_CACHE, PSTA_PMKID_CACHE; - - -/** - * Maintains station side statistics - */ -typedef struct _STA_STATS -{ - ULONGLONG ullUcastWEPExcludedCount; - ULONGLONG ullMcastWEPExcludedCount; - -}STA_STATS, *PSTA_STATS; - -/* -* Define structure for Helper Port -* -*/ -/** Used to hold state about miniport pause */ -typedef struct _MP_MINIPORT_PAUSE_PARAMETERS -{ - /** The pause parameters provided by NDIS */ - PNDIS_MINIPORT_PAUSE_PARAMETERS NdisParameters; - - /** The event that is fired when the pause is completed */ - NDIS_EVENT CompleteEvent; - -}MP_MINIPORT_PAUSE_PARAMETERS, *PMP_MINIPORT_PAUSE_PARAMETERS; - - -/** Used to hold state about ndis reset */ -typedef struct _MP_NDIS_RESET_PARAMETERS -{ - PBOOLEAN AddressingReset; - - NDIS_STATUS ResetStatus; - - /** The event that is fired when the reset is completed */ - NDIS_EVENT CompleteEvent; -}MP_NDIS_RESET_PARAMETERS, *PMP_NDIS_RESET_PARAMETERS; - - -/** Used to hold state about power OID */ -typedef struct _MP_POWER_PARAMETERS -{ - /** The device state to transition to */ - NDIS_DEVICE_POWER_STATE NewDeviceState; - - /** The event that is fired when the oid processing is completed */ - NDIS_EVENT CompleteEvent; - -}MP_POWER_PARAMETERS, *PMP_POWER_PARAMETERS; - - -/** Used to hold state about port pause */ -typedef struct _MP_PORT_PAUSE_PARAMETERS -{ - /** The port that needs to be paused */ - PMP_PORT PortToPause; - - /** The event that is fired when the pause is completed */ - NDIS_EVENT CompleteEvent; - -}MP_PORT_PAUSE_PARAMETERS, *PMP_PORT_PAUSE_PARAMETERS; - - -/** Used to hold state about port terminate */ -typedef struct _MP_TERMINATE_PORT_PARAMETERS -{ - /** The port that needs to be terminated */ - PMP_PORT PortToTerminate; - - /** The event that is fired when the terminate is completed */ - NDIS_EVENT CompleteEvent; -}MP_TERMINATE_PORT_PARAMETERS, *PMP_TERMINATE_PORT_PARAMETERS; - - -typedef struct _MP_EXTSTA_PORT -{ - PMP_PORT ParentPort; - - /** State from the registry */ - PSTA_REG_INFO RegInfo; - - /** Information about AdHoc stations */ - STA_ADHOC_STA_INFO AdHocStaInfo; - - /** Current configuration of extensible station */ - STA_CURRENT_CONFIG Config; - - /** Connection request context information */ - STA_INFRA_CONNECT_CONTEXT ConnectContext; - - /** State we maintaining scan state */ - STA_SCAN_CONTEXT ScanContext; - - /** Current PMKID cache the station maintains */ - STA_PMKID_CACHE PMKIDCache; - - /** Statistics information */ - STA_STATS Statistics; - -} MP_EXTSTA_PORT, *PMP_EXTSTA_PORT; - -VOID -N62CAcquireMUTEX( - PMP_PORT Port, - RT_MUTEX_TYPE type - ); - -VOID -N62CReleaseMUTEX( - PMP_PORT Port, - RT_MUTEX_TYPE type - ); - -VOID -N62CHelperPortHandlePortTerminate( - IN PMP_PORT Port, - IN PMP_PORT PortToTerminate - ); - -NDIS_STATUS -N62C_OID_DOT11_CREATE_MAC( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest - ); - -NDIS_STATUS -N62C_OID_DOT11_DELETE_MAC( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest - ); - -VOID -N62CCreateDeleteMacTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -N62CCreateDeleteMacWorkItemCallback( - IN PVOID pContext - ); - -VOID -N62CApSendDisassocWithOldChnlWorkitemCallback( - IN PVOID pContext - ); - - -NDIS_STATUS -N62CCreateMac( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -N62CDeleteMac( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -N62CHelperAllocateNdisPort( - IN PADAPTER pAdapter, - OUT PNDIS_PORT_NUMBER AllocatedPortNumber - ); - -NDIS_STATUS -N62CStaInitializePort( - IN PMP_PORT Port, - IN PVOID RegistryInformation - ); - -NDIS_STATUS -N62CStaOidHandler( - IN PADAPTER pAdapter, - IN PMP_PORT Port, - IN PNDIS_OID_REQUEST OidRequest - ); - -NDIS_STATUS -N62CStaSendEventHandler( - IN PMP_PORT Port, - //IN PMP_TX_MSDU PacketList, - IN ULONG SendFlags - ); - -NDIS_STATUS -N62CStaReceiveEventHandler( - IN PMP_PORT Port, - // IN PMP_RX_MSDU PacketList, - IN ULONG ReceiveFlags - ); - -NDIS_STATUS -N62CHelperHandleMiniportRestart( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_RESTART_PARAMETERS MiniportRestartParameters - ); - -NDIS_STATUS -N62CHelperHandleMiniportPause( - IN PADAPTER pAdapter, - IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters - ); - -NDIS_STATUS -N62CHelperActivateNdisPort( - IN PADAPTER pAdapter, - IN NDIS_PORT_NUMBER PortNumberToActivate - ); - -VOID -N62CHelperDeactivateNdisPort( - IN PADAPTER pAdapter, - IN NDIS_PORT_NUMBER PortNumberToDeactivate - ); - -VOID -N62CHelperFreeNdisPort( - IN PADAPTER pAdapter, - IN NDIS_PORT_NUMBER PortNumberToFree - ); - -NDIS_STATUS -N62CHandleMiniportPause( - IN PADAPTER pAdapter, - IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters - ); - -MP_PORT_TYPE -N62CGetPortTypeByOpMode( - IN ULONG OpMode - ); - -//NDIS_STATUS -//N62CSetCurrentPortOperationMode( -// IN PADAPTER pAdapter, -// IN PNDIS_OID_REQUEST NdisRequest -// ); - -NDIS_STATUS -N62CSetOperationMode( - IN PADAPTER pAdapter, - IN ULONG OpMode - ); - - -NDIS_STATUS -N62CPortSetOperationMode( - IN PADAPTER pAdapter, - IN ULONG OpMode - ); - -VOID -N62CDeleteVirtualPort( - IN PADAPTER pAdapter - ); - -VOID -N62CChangePortType( - IN PADAPTER pAdapter, - IN MP_PORT_TYPE OldPortType, - IN MP_PORT_TYPE NewPortType - ); - -VOID -N62CExtAdapterHandleNBLInWaitQueue( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -N62CChangePortTypeByOpMode( - IN PADAPTER pAdapter, - IN PDOT11_CURRENT_OPERATION_MODE dot11OpMode -); - -#endif //_N62_PORT__H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.c deleted file mode 100644 index 74c3fb99..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.c +++ /dev/null @@ -1,858 +0,0 @@ -#include "Mp_Precomp.h" - - -NDIS_STATUS -N62CQueryInterruptModerationSettings( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength - ) -{ - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_INTERRUPT_MODERATION_PARAMETERS intModParams; - - UNREFERENCED_PARAMETER(Adapter); - - NdisZeroMemory(InformationBuffer, InformationBufferLength); - - intModParams = (PNDIS_INTERRUPT_MODERATION_PARAMETERS)InformationBuffer; - - intModParams->Header.Type=NDIS_OBJECT_TYPE_DEFAULT; - intModParams->Header.Revision=NDIS_INTERRUPT_MODERATION_PARAMETERS_REVISION_1; - intModParams->Header.Size=sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS); - - intModParams->Flags = 0; - intModParams->InterruptModeration = NdisInterruptModerationNotSupported; - - return ndisStatus; -} - -NDIS_STATUS -N62CQueryLinkParameters( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_LINK_PARAMETERS linkParams; - - - NdisZeroMemory(InformationBuffer, InformationBufferLength); - - linkParams = (PNDIS_LINK_PARAMETERS)InformationBuffer; - - linkParams->Header.Type=NDIS_OBJECT_TYPE_DEFAULT; - linkParams->Header.Revision=NDIS_LINK_PARAMETERS_REVISION_1; - linkParams->Header.Size=sizeof(NDIS_LINK_PARAMETERS); - - linkParams->MediaDuplexState = MediaDuplexStateHalf; - linkParams->XmitLinkSpeed = MgntActQuery_802_11_TX_RATES(Adapter)*1000000/2; - linkParams->RcvLinkSpeed = pMgntInfo->HighestOperaRate*1000000/2; - linkParams->PauseFunctions = NdisPauseFunctionsUnsupported; - linkParams->AutoNegotiationFlags = NDIS_LINK_STATE_DUPLEX_AUTO_NEGOTIATED; - - return ndisStatus; - -} - -NDIS_STATUS -N62CQueryAdditionalIE( - IN PADAPTER Adapter, - OUT PDOT11_ADDITIONAL_IE AdditionalIe, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ) -{ - u4Byte AdditionalBeaconIESize = 0; - u4Byte AdditionalResponseIESize = 0; - - ULONG requiredSize = 0; - ULONG beaconIeOffset = sizeof(DOT11_ADDITIONAL_IE); - ULONG responseIeOffset = 0; - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - do - { - // - // Query the size of the additional IEs. - // - MgntActQuery_AdditionalBeaconIE(Adapter, NULL, &AdditionalBeaconIESize); - MgntActQuery_AdditionalProbeRspIE(Adapter, NULL, &AdditionalResponseIESize); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N62CQueryAdditionalIE: BeaconIELen = %u, ProbeRspIELen = %u.\n", AdditionalBeaconIESize, AdditionalResponseIESize)); - - - // - // add required size for beacon IEs - // - if (RtlULongAdd(beaconIeOffset, AdditionalBeaconIESize, &responseIeOffset) != NDIS_STATUS_SUCCESS) - { - // - // This shall not happen because we validated the IEs before - // - Status = NDIS_STATUS_INVALID_DATA; - break; - } - - // - // add required size for response IEs - // - if (RtlULongAdd(responseIeOffset, AdditionalResponseIESize, &requiredSize) != NDIS_STATUS_SUCCESS) - { - // - // This shall not happen because we validated the IEs before - // - Status = NDIS_STATUS_INVALID_DATA; - break; - } - - if (InformationBufferLength < requiredSize) - { - // - // the buffer is not big enough - // - *BytesNeeded = (requiredSize); - Status=NDIS_STATUS_INVALID_LENGTH; - break; - } - - // - // the buffer is big enough, copy the IEs - // - MgntActQuery_AdditionalBeaconIE(Adapter, - (pu1Byte)AdditionalIe + beaconIeOffset, - (pu4Byte)&AdditionalBeaconIESize); - AdditionalIe->uBeaconIEsLength = AdditionalBeaconIESize; - AdditionalIe->uBeaconIEsOffset = beaconIeOffset; - - MgntActQuery_AdditionalProbeRspIE(Adapter, - (pu1Byte)AdditionalIe + responseIeOffset, - (pu4Byte)&AdditionalResponseIESize); - AdditionalIe->uResponseIEsLength = AdditionalResponseIESize; - AdditionalIe->uResponseIEsOffset = responseIeOffset; - - *BytesWritten = requiredSize; - - // assign NDIS header - N6_ASSIGN_OBJECT_HEADER( - AdditionalIe->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ADDITIONAL_IE_REVISION_1, - sizeof(DOT11_ADDITIONAL_IE) - ); - }while(FALSE); - - return Status; - -} - -NDIS_STATUS -N62CApEnumPeerInfo( - IN PADAPTER Adapter, - OUT PDOT11_PEER_INFO_LIST PeerListInfo, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ) -{ - PRT_NDIS62_COMMON pNdis62Common = Adapter->pNdis62Common; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - ULONG ulBufRequired; - u4Byte i; - PRT_WLAN_STA pCurrAsocEntry; - PDOT11_PEER_INFO pPeerInfo; - u2Byte staEntryCount=0; - - // - // We report only "ASSOCIATED" entries up. - // Note that if an STA is disassociated by OID_DOT11_DISASSOCIATE_PEER_REQUEST, - // its corresponding entry shall not be reported up to NDIS. - // - do - { - // - // Determine buffer length required. - // - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - if(pMgntInfo->AsocEntry[i].bUsed && pMgntInfo->AsocEntry[i].bAssociated) - staEntryCount++; - ulBufRequired = staEntryCount * sizeof(DOT11_PEER_INFO) + - sizeof(DOT11_PEER_INFO_LIST); - - // - // Verify given buffer length. - // - if(InformationBufferLength < ulBufRequired) - { - *BytesNeeded = ulBufRequired; - *BytesWritten = 0; - // Prefast warning ignore for false positive -#pragma warning( disable:6273 ) - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - ("<=== Query OID_DOT11_ENUM_PEER_INFO: BytesNeeded: %u !!!\n", BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - // - // Assign NDIS header. - // - N6_ASSIGN_OBJECT_HEADER( - PeerListInfo->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PEER_INFO_LIST_REVISION_1, - sizeof(DOT11_PEER_INFO_LIST) - ); - - // - // Fill up each entry. - // - PeerListInfo->uNumOfEntries = 0; - PeerListInfo->uTotalNumOfEntries = staEntryCount; - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - // - // Report each STA that has been successfully authenticated to NDIS. - // - pCurrAsocEntry = &(pMgntInfo->AsocEntry[i]); - if(pCurrAsocEntry->bUsed && pCurrAsocEntry->bAssociated > 0) - { - pPeerInfo = &PeerListInfo->PeerInfo[PeerListInfo->uNumOfEntries]; - PeerListInfo->uNumOfEntries++; - PlatformZeroMemory(pPeerInfo, sizeof(DOT11_PEER_INFO)); - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, - "Report STA:", pCurrAsocEntry->MacAddr); - RT_TRACE(COMP_MLME, DBG_LOUD, - ("bAssociated = %u.\n", pCurrAsocEntry->bAssociated)); - - // - // Fields for ALL authenticated STAs. - // - - //mac addr - PlatformMoveMemory(pPeerInfo->MacAddress, - pCurrAsocEntry->MacAddr, - 6); - - // association state - pPeerInfo->AssociationState = (pCurrAsocEntry->bAssociated) ? - dot11_assoc_state_auth_assoc : - dot11_assoc_state_auth_unassoc; - - // power mode - pPeerInfo->PowerMode = (pCurrAsocEntry->bPowerSave) ? - dot11_power_mode_powersave : - dot11_power_mode_active; - - // association ID - pPeerInfo->usAssociationID = 0xFFFF; - - // - // Fields only for STAs that are associated. - // - if(pCurrAsocEntry->bAssociated) - { - // capability - pPeerInfo->usCapabilityInformation = - (USHORT)pCurrAsocEntry->Capability; - - // auth/cipher, report that of the SoftAP instead of the STA. - { - RT_AUTH_MODE authmode; - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - - MgntActQuery_802_11_AUTHENTICATION_MODE( Adapter, &authmode ); - pPeerInfo->AuthAlgo = N6CAuthModeToDot11(&authmode); - - pPeerInfo->MulticastCipherAlgo = - N6CEncAlgorithmToDot11(&(pSecInfo->GroupEncAlgorithm)); - pPeerInfo->UnicastCipherAlgo = - N6CEncAlgorithmToDot11(&(pSecInfo->PairwiseEncAlgorithm)); - } - - // TODO: WPS enabled? - pPeerInfo->bWpsEnabled = FALSE; - - // listen interval - pPeerInfo->usListenInterval = pCurrAsocEntry->usListenInterval; - - // supported rates - PlatformMoveMemory( - pPeerInfo->ucSupportedRates, - pCurrAsocEntry->bdSupportRateEXBuf, - pCurrAsocEntry->bdSupportRateEXLen - ); - - // association ID - pPeerInfo->usAssociationID = pCurrAsocEntry->AID; - - // association up time - pPeerInfo->liAssociationUpTime.QuadPart = - pCurrAsocEntry->AssociationUpTime; - //PlatformMoveMemory(&pPeerInfo->liAssociationUpTime, - // &pCurrAsocEntry->AssociationUpTime, - // sizeof(LARGE_INTEGER)); - - // TODO: Fill DOT11_PEER_STATISTICS. - - } - } - } - - PeerListInfo->uTotalNumOfEntries = staEntryCount; - *BytesWritten = ulBufRequired; - - } while (FALSE); - - return Status; -} - -NDIS_STATUS -N62CQuery_DOT11_DESIRED_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PDOT11_PHY_ID_LIST pPhyIdList = (PDOT11_PHY_ID_LIST)InformationBuffer; - - *BytesNeeded = sizeof(DOT11_PHY_ID_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - N6_ASSIGN_OBJECT_HEADER( - pPhyIdList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_ID_LIST_REVISION_1, - sizeof(DOT11_PHY_ID_LIST)); - - pPhyIdList->uNumOfEntries = 1; - pPhyIdList->uTotalNumOfEntries = 1; - pPhyIdList->dot11PhyId[0] = 1; - - *BytesWritten = *BytesNeeded; - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N62C_QUERY_OID_DOT11_WPS_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - BOOLEAN bEnabled = FALSE; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - RT_TRACE(COMP_OID_QUERY | COMP_AP, DBG_LOUD, ("===>Query AP mode OID_DOT11_WPS_ENABLED: %d\n", pTargetAdapter->pNdis62Common->bWPSEnable)); - - if ( InformationBufferLength < sizeof(BOOLEAN) ) - { - *BytesWritten = 0; - *BytesNeeded = sizeof(BOOLEAN); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - bEnabled = pTargetAdapter->pNdis62Common->bWPSEnable; - PlatformMoveMemory(InformationBuffer, &bEnabled, sizeof(BOOLEAN)); - *BytesWritten = sizeof(BOOLEAN); - - RT_TRACE(COMP_OID_QUERY | COMP_AP, DBG_LOUD, ("<===Query AP mode OID_DOT11_WPS_ENABLED: %d\n", bEnabled)); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_DOT11_ADDITIONAL_IE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query AP mode OID_DOT11_ADDITIONAL_IE:\n")); - - ndisStatus = N62CQueryAdditionalIE( - pTargetAdapter, - (PDOT11_ADDITIONAL_IE)InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_DOT11_ENUM_PEER_INFO( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query AP mode OID_DOT11_ENUM_PEER_INFO:\n")); - - // let the strong type API check buffer size - // because the size of association info list is not known in advance - ndisStatus = N62CApEnumPeerInfo( - pTargetAdapter, - (PDOT11_PEER_INFO_LIST)InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_DOT11_AVAILABLE_CHANNEL_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG ulInfo = 0; - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = ulInfoLen; - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_DOT11_AVAILABLE_FREQUENCY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG ulInfo = 0; - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = ulInfoLen; - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_PM_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_PM_PARAMETERS PMParameters; - NDIS_PM_CAPABILITIES PmCapabilities; - - ULONG ulInfo = 0; - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(NDIS_PM_PARAMETERS)) - { - *BytesNeeded = sizeof(NDIS_PM_PARAMETERS); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - FillPmCapabilities(pTargetAdapter, &PmCapabilities); - -#if NDIS_SUPPORT_NDIS630 - PMParameters.Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - PMParameters.Header.Revision = NDIS_PM_CAPABILITIES_REVISION_2; - PMParameters.Header.Size = NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_2; -#else - PMParameters.Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - PMParameters.Header.Revision = NDIS_PM_CAPABILITIES_REVISION_1; - PMParameters.Header.Size = NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_1; -#endif - - PMParameters.EnabledWoLPacketPatterns = PmCapabilities.SupportedWoLPacketPatterns; - PMParameters.EnabledProtocolOffloads = PmCapabilities.SupportedProtocolOffloads; - - PMParameters.WakeUpFlags = - /*NDIS_PM_WAKE_ON_LINK_CHANGE_ENABLED | - NDIS_PM_WAKE_ON_MEDIA_DISCONNECT_ENABLED |*/ - 0; - -#if NDIS_SUPPORT_NDIS630 - PMParameters.MediaSpecificWakeUpEvents = PmCapabilities.MediaSpecificWakeUpEvents; -#endif - - pInfo = (PVOID)&PMParameters; - ulInfoLen = sizeof(PMParameters); - - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen) - { - *BytesWritten = ulInfoLen; - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else - { - // Buffer too short - *BytesNeeded = ulInfoLen; - ndisStatus = NDIS_STATUS_BUFFER_TOO_SHORT; - } - - RT_PRINT_DATA( (COMP_OID_QUERY|COMP_POWER), DBG_LOUD, ("QUERY OID_PM_PARAMETERS: "), - InformationBuffer, InformationBufferLength ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_GEN_INTERRUPT_MODERATION( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS)) - { - *BytesNeeded = sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ndisStatus = N62CQueryInterruptModerationSettings( - pTargetAdapter, - InformationBuffer, - InformationBufferLength - ); - - *BytesWritten = sizeof(NDIS_INTERRUPT_MODERATION_PARAMETERS); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - return ndisStatus; -} - - -NDIS_STATUS -N62C_QUERY_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_RECEIVE_FILTER_CAPABILITIES pRxFilterCapabilities = (PNDIS_RECEIVE_FILTER_CAPABILITIES)InformationBuffer; - - - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES)) - { - *BytesNeeded = sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - - -#if (NDIS_SUPPORT_NDIS630) - N6_ASSIGN_OBJECT_HEADER( - pRxFilterCapabilities->Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2, - NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2); -#else - N6_ASSIGN_OBJECT_HEADER( - pRxFilterCapabilities->Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_1, - NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_1); -#endif - - - pRxFilterCapabilities->Flags = 0; - - pRxFilterCapabilities->SupportedHeaders = NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED; - -#if (NDIS_SUPPORT_NDIS630) - pRxFilterCapabilities->EnabledFilterTypes = NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED; - - pRxFilterCapabilities->SupportedQueueProperties = NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE; - - pRxFilterCapabilities->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED| - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED; //0; - - pRxFilterCapabilities->SupportedHeaders |= (NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED); - - pRxFilterCapabilities->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED; - - pRxFilterCapabilities->SupportedARPHeaderFields = NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED ; - - pRxFilterCapabilities->SupportedIPv4HeaderFields = NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED; - - pRxFilterCapabilities->SupportedIPv6HeaderFields = NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED; - - pRxFilterCapabilities->SupportedUdpHeaderFields = NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED; - - pRxFilterCapabilities->MaxFieldTestsPerPacketCoalescingFilter = 5; // should be >= 5 - - pRxFilterCapabilities->MaxPacketCoalescingFilters = 10; // should be >= 10 - //pRxFilterCapabilities->NidsReserved = 0; -#else - pRxFilterCapabilities->EnabledFilterTypes = 0; - - pRxFilterCapabilities->SupportedQueueProperties = 0; - - pRxFilterCapabilities->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED; - - pRxFilterCapabilities->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED; -#endif - - pRxFilterCapabilities->EnabledQueueTypes = 0; //NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED; - pRxFilterCapabilities->NumQueues = 0; - pRxFilterCapabilities->MaxMacHeaderFilters = 2; - pRxFilterCapabilities->MaxQueueGroups = 0; - pRxFilterCapabilities->MaxQueuesPerQueueGroup = 0; - pRxFilterCapabilities->MinLookaheadSplitSize = 0; - pRxFilterCapabilities->MaxLookaheadSplitSize = 0; - - RT_PRINT_DATA( (COMP_OID_QUERY|COMP_POWER), DBG_LOUD, ("QUERY N62C_QUERY_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES: "), - InformationBuffer, InformationBufferLength ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERY_OID_RECEIVE_FILTER_CURRENT_CAPABILITIES( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_RECEIVE_FILTER_CAPABILITIES pRxFilterCapabilities = (PNDIS_RECEIVE_FILTER_CAPABILITIES)InformationBuffer; - - - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES)) - { - *BytesNeeded = sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - - -#if (NDIS_SUPPORT_NDIS630) - N6_ASSIGN_OBJECT_HEADER( - pRxFilterCapabilities->Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2, - NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2); -#else - N6_ASSIGN_OBJECT_HEADER( - pRxFilterCapabilities->Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_1, - NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_1); -#endif - - - pRxFilterCapabilities->Flags = 0; - - pRxFilterCapabilities->SupportedHeaders = NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED; - -#if (NDIS_SUPPORT_NDIS630) - pRxFilterCapabilities->EnabledFilterTypes = NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED; - - pRxFilterCapabilities->SupportedQueueProperties = NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE; - - pRxFilterCapabilities->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED| - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED; //0; - - pRxFilterCapabilities->SupportedHeaders |= (NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED); - - pRxFilterCapabilities->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED; - - pRxFilterCapabilities->SupportedARPHeaderFields = NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED ; - - pRxFilterCapabilities->SupportedIPv4HeaderFields = NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED; - - pRxFilterCapabilities->SupportedIPv6HeaderFields = NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED; - - pRxFilterCapabilities->SupportedUdpHeaderFields = NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED; - - pRxFilterCapabilities->MaxFieldTestsPerPacketCoalescingFilter = 5; // should be >= 5 - - pRxFilterCapabilities->MaxPacketCoalescingFilters = 10; // should be >= 10 - //pRxFilterCapabilities->NidsReserved = 0; -#else - pRxFilterCapabilities->EnabledFilterTypes = 0; - - pRxFilterCapabilities->SupportedQueueProperties = 0; - - pRxFilterCapabilities->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED; - - pRxFilterCapabilities->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED; -#endif - - pRxFilterCapabilities->EnabledQueueTypes = 0; //NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED; - pRxFilterCapabilities->NumQueues = 0; - pRxFilterCapabilities->MaxMacHeaderFilters = 2; - pRxFilterCapabilities->MaxQueueGroups = 0; - pRxFilterCapabilities->MaxQueuesPerQueueGroup = 0; - pRxFilterCapabilities->MinLookaheadSplitSize = 0; - pRxFilterCapabilities->MaxLookaheadSplitSize = 0; - - RT_PRINT_DATA( (COMP_OID_QUERY|COMP_POWER), DBG_LOUD, ("QUERY N62C_QUERY_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES: "), - InformationBuffer, InformationBufferLength ); - - return ndisStatus; -} -// \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.h deleted file mode 100644 index c42006e6..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QueryOID.h +++ /dev/null @@ -1,165 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - N62C_QueryOID.h - -Abstract: - Contains Port specific defines - -Revision History: - When What - ---------- ---------------------------------------------- - 04-22-2007 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _N62_QUERYOID__H -#define _N62_QUERYOID__H - -NDIS_STATUS -N62CQueryInterruptModerationSettings( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength - ); - -NDIS_STATUS -N62CQueryLinkParameters( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength - ); - -NDIS_STATUS -N62CQueryAdditionalIE( - IN PADAPTER Adapter, - OUT PDOT11_ADDITIONAL_IE AdditionalIe, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ); - -NDIS_STATUS -N62CApEnumPeerInfo( - IN PADAPTER Adapter, - OUT PDOT11_PEER_INFO_LIST PeerInfo, - IN u4Byte InformationBufferLength, - OUT pu4Byte BytesWritten, - OUT pu4Byte BytesNeeded - ); - -NDIS_STATUS -N62CQuery_DOT11_DESIRED_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N62C_QUERY_OID_DOT11_WPS_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_DOT11_ADDITIONAL_IE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_DOT11_ENUM_PEER_INFO( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_DOT11_AVAILABLE_CHANNEL_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_DOT11_AVAILABLE_FREQUENCY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_PM_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_GEN_INTERRUPT_MODERATION( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERY_OID_RECEIVE_FILTER_CURRENT_CAPABILITIES( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); -#endif //_N62_QUERYOID__H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.c deleted file mode 100644 index 80eb2915..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.c +++ /dev/null @@ -1,164 +0,0 @@ -#include "Mp_Precomp.h" - -NDIS_STATUS -N62CAPResetRequest( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_NDIS62_COMMON pNdis62Common = Adapter->pNdis62Common; - - PDOT11_RESET_REQUEST pDot11ResetRequest = InformationBuffer; - PDOT11_STATUS_INDICATION pDot11StatusIndication = InformationBuffer; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE( (COMP_OID_QUERY | COMP_OID_SET | COMP_MLME | COMP_AP), DBG_LOUD, ("===>AP mode Query/Set OID_DOT11_RESET_REQUEST: \n")); - - // - // Should fail the request if the dotResetType is not dot11_reset_type_phy_and_mac. - // - if(pDot11ResetRequest->dot11ResetType != dot11_reset_type_phy_and_mac) - { - RT_TRACE( (COMP_OID_QUERY | COMP_OID_SET | COMP_MLME | COMP_AP), DBG_LOUD, - ("Invalid reset type: %u.\n", pDot11ResetRequest->dot11ResetType)); - return NDIS_STATUS_INVALID_DATA; - } - - // - // Fail the query request if the value of this InformationBufferLength member of the MiniportOidRequest function - // is less than the length of the DOT11_STATUS_INDICATION structure - // - if ( OutputBufferLength < sizeof(DOT11_STATUS_INDICATION) ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OutputBufferLength too short\n")); - *BytesNeeded = sizeof(DOT11_STATUS_INDICATION); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // Validate the buffer length - // - if ( InputBufferLength < sizeof(DOT11_RESET_REQUEST) ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("InputBufferLength too short\n")); - *BytesNeeded = sizeof(DOT11_RESET_REQUEST); - return NDIS_STATUS_INVALID_LENGTH; - } - - - // - // When the reset operation is complete, the miniport driver must return a DOT11_STATUS_INDICATION - //structure to confirm the reset operation, so do NOT return ndisStatus immediately without status indication. - // 2014.05.02. - // - do - { - pMgntInfo->bResetInProgress = TRUE; - - if ( GetAPState(Adapter) ==AP_STATE_STARTED || GetAPState(Adapter) == AP_STATE_STARTING) - { - SetAPState(Adapter, AP_STATE_STOPPING); - - AP_DisassociateAllStation(Adapter, unspec_reason); - - SecSetSwEncryptionDecryption(Adapter, FALSE, FALSE); - - MgntActSet_ApType(Adapter, FALSE); - AP_Reset(Adapter); - - SetAPState(Adapter, AP_STATE_STOPPED); - - PlatformZeroMemory(&Adapter->pNdisCommon->dot11DesiredSSIDList, sizeof(DOT11_SSID_LIST)); - - AP_AllPowerSaveReturn(Adapter); - } - - MgntActSet_AdditionalBeaconIE(Adapter, NULL, 0); - MgntActSet_AdditionalProbeRspIE(Adapter, NULL, 0); - pNdis62Common->bWPSEnable = FALSE; - - if(Adapter->bvWifiStopBeforeSleep) - { - N62CApIndicateCanSustainAp(Adapter); - Adapter->bvWifiStopBeforeSleep = FALSE; - RT_TRACE_F(COMP_AP, DBG_LOUD, ("vWifi mode Done RESET.\n")); - } - - //if(pDot11ResetRequest->bSetDefaultMIB) - // N6InitializeNative80211MIBs(Adapter); - - // - // DDK: The NIC shall clear privacy exemption list on every reset - // regardless of the rest requests parameters. - // 2008.10.17, haich - // - Adapter->pNdisCommon->PrivacyExemptionEntrieNum = 0; - - }while(FALSE); - - // - // After reset completed, return the status indication. The miniport driver must not set the value - // of the BytesWritten member of the OidRequest parameter, such set operation has been removed by me, 2014.05.02. - // - PlatformZeroMemory(pDot11StatusIndication, sizeof(DOT11_STATUS_INDICATION)); - pDot11StatusIndication->uStatusType = DOT11_STATUS_RESET_CONFIRM; - pDot11StatusIndication->ndisStatus = ndisStatus; - *BytesRead = sizeof(DOT11_RESET_REQUEST); - *BytesWritten = sizeof(DOT11_STATUS_INDICATION); - - // - // Reset network type. - // - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - - pMgntInfo->bResetInProgress = FALSE; - - RT_TRACE( (COMP_OID_QUERY | COMP_OID_SET | COMP_MLME | COMP_AP), DBG_LOUD, - ("<===AP mode Query/Set OID_DOT11_RESET_REQUEST: %u\n", ndisStatus)); - return ndisStatus; -} - -NDIS_STATUS -N62C_METHOD_OID_PM_GET_PROTOCOL_OFFLOAD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u4Byte ProtocolOffloadId = *((ULONG *)InformationBuffer); - NDIS_PM_PROTOCOL_OFFLOAD PMProtocolOffload; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(&(pTargetAdapter->MgntInfo)); - PRT_AOAC_REPORT pAOACReport = &(pPSC->AOACReport); - - if(OutputBufferLength < sizeof(NDIS_PM_PROTOCOL_OFFLOAD)) - { - *BytesNeeded = sizeof(NDIS_PM_PROTOCOL_OFFLOAD); - *BytesWritten = 0; - // DbgPrint("OutputBufferLength = %d < sizeof(NDIS_PM_PROTOCOL_OFFLOAD\n", OutputBufferLength); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PMProtocolOffload.ProtocolOffloadParameters.Dot11RSNRekeyParameters.KeyReplayCounter = pAOACReport->ReplayCounterOfEapolKey; - - PlatformMoveMemory(InformationBuffer, &PMProtocolOffload, sizeof(NDIS_PM_PROTOCOL_OFFLOAD)); - - RT_PRINT_DATA( (COMP_OID_QUERY|COMP_POWER), DBG_LOUD, - ("QUERY/SET OID_PM_GET_PROTOCOL_OFFLOAD: "), InformationBuffer, InputBufferLength ); - - *BytesWritten = sizeof(NDIS_PM_PROTOCOL_OFFLOAD); - - return ndisStatus; -} diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.h deleted file mode 100644 index fe94386e..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_QuerySetOID.h +++ /dev/null @@ -1,49 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - N62C_QuerySetOID.h - -Abstract: - Contains Port specific defines - -Revision History: - When What - ---------- ---------------------------------------------- - 05-12-2007 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _N62_QUERYSETOID__H -#define _N62_QUERYSETOID__H - -NDIS_STATUS -N62CAPResetRequest( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N62C_METHOD_OID_PM_GET_PROTOCOL_OFFLOAD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -#endif //_N62_QUERYSETOID__H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.c b/network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.c deleted file mode 100644 index dbee3ad0..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.c +++ /dev/null @@ -1,1245 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N62C_SetOID.tmh" -#endif - -NDIS_STATUS -N62C_SET_OID_DOT11_INCOMING_ASSOCIATION_DECISION( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_WLAN_STA pEntry = NULL; - - // OS-given structure - PDOT11_INCOMING_ASSOC_DECISION_V2 pIncomAssocDecision = (PDOT11_INCOMING_ASSOC_DECISION_V2) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - { - if (InformationBufferLength < sizeof(DOT11_INCOMING_ASSOC_DECISION_V2) && InformationBufferLength < sizeof(DOT11_INCOMING_ASSOC_DECISION)) - { - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE( COMP_OID_SET, DBG_LOUD, - ("Set OID_DOT11_INCOMING_ASSOCIATION_DECISION: (DOT11_INCOMING_ASSOC_DECISION_V2) Invalid Length %d right length v2 %d right length %d\n", - InformationBufferLength, sizeof(DOT11_INCOMING_ASSOC_DECISION_V2), sizeof(DOT11_INCOMING_ASSOC_DECISION))); - - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - if(!GetDefaultAdapter(pTargetAdapter)->bInHctTest) - return ndisStatus; - } - } - - if (GetAPState(pTargetAdapter) != AP_STATE_STARTED) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - return ndisStatus; - } - - pEntry = AsocEntry_GetEntry(&pTargetAdapter->MgntInfo, pIncomAssocDecision->PeerMacAddr); - - if(pEntry) - { - pEntry->bOsDecisionMade = TRUE; - pEntry->bNotAcceptedByOs = !pIncomAssocDecision->bAccept; - pEntry->OsReasonCode = (u2Byte)pIncomAssocDecision->usReasonCode; - } - - RT_PRINT_DATA(COMP_MLME|COMP_AP, DBG_LOUD, - "AsocRsp IE from OS:\n", - ((pu1Byte)pIncomAssocDecision)+pIncomAssocDecision->uAssocResponseIEsOffset, - pIncomAssocDecision->uAssocResponseIEsLength - ); - - if (pEntry) - { - AsocEntry_UpdateAsocInfo(pTargetAdapter, - pEntry->MacAddr, - ((pu1Byte)pIncomAssocDecision) + pIncomAssocDecision->uAssocResponseIEsOffset, - pIncomAssocDecision->uAssocResponseIEsLength, - UPDATE_ASOC_RSP_IE_FROM_OS - ); - } - -{ - if(InformationBufferLength < sizeof(DOT11_INCOMING_ASSOC_DECISION_V2)) - GET_P2P_INFO(pTargetAdapter)->Status = 0; //Workaround: pIncomAssocDecision->WFDStatus0; - else - GET_P2P_INFO(pTargetAdapter)->Status = pIncomAssocDecision->WFDStatus; - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("Wifi-Direct: pIncomAssocDecision->WFDStatus: %d\n", pIncomAssocDecision->WFDStatus)); -} - - *BytesRead = InformationBufferLength; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== N62C_SET_OID_DOT11_INCOMING_ASSOCIATION_DECISION accept %d\n", pIncomAssocDecision->bAccept) ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_DOT11_WPS_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // OS-given structure - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - if(InformationBufferLength < sizeof(BOOLEAN)) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set AP mode OID_DOT11_WPS_ENABLED: Invalid length\n")); - return ndisStatus; - } - - pTargetAdapter->pNdis62Common->bWPSEnable = *((PBOOLEAN)InformationBuffer); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<===Set AP mode OID_DOT11_WPS_ENABLED: %d\n", pTargetAdapter->pNdis62Common->bWPSEnable)); - - return ndisStatus; -} - - -NDIS_STATUS -N62C_SET_OID_DOT11_ADDITIONAL_IE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PVOID newBeaconIeData = NULL; - PVOID newResponseIeData = NULL; - - // OS-given structure - PDOT11_ADDITIONAL_IE AdditionalIe = (PDOT11_ADDITIONAL_IE)InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - if (!MP_VERIFY_NDIS_OBJECT_HEADER_DEFAULT( - AdditionalIe->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ADDITIONAL_IE_REVISION_1, - sizeof(DOT11_ADDITIONAL_IE) - ) - ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set AP mode OID_DOT11_ADDITIONAL_IE: Invalid length\n")); - ndisStatus = NDIS_STATUS_INVALID_DATA; - return ndisStatus; - } - - // - // allocate memory for the new IE data and copy the IEs - // - MgntActSet_AdditionalBeaconIE(pTargetAdapter, - (pu1Byte)((pu1Byte)AdditionalIe + AdditionalIe->uBeaconIEsOffset), - AdditionalIe->uBeaconIEsLength); - - MgntActSet_AdditionalProbeRspIE(pTargetAdapter, - (pu1Byte)((pu1Byte)AdditionalIe + AdditionalIe->uResponseIEsOffset), - AdditionalIe->uResponseIEsLength); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("<=== Set AP mode OID_DOT11_ADDITIONAL_IE: BeaconIELen = %u, ProbeRspIELen = %u.\n", AdditionalIe->uBeaconIEsLength, AdditionalIe->uResponseIEsLength)); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_DOT11_START_AP_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_RF_POWER_STATE eRfPowerState; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - if (GetAPState(pTargetAdapter) != AP_STATE_STOPPED) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - RT_TRACE(COMP_AP, DBG_LOUD, ("AP is not in INIT STATE\n")); - return ndisStatus; - } - - pTargetAdapter->HalFunc.GetHwRegHandler(pTargetAdapter, HW_VAR_RF_STATE, (pu1Byte)(&eRfPowerState)); - - // - // We should fail the start request if the radio is OFF - if((eRfPowerState == eRfOff) && (pDefaultAdapter->MgntInfo.RfOffReason >= RF_CHANGE_BY_HW)) - { - RT_TRACE(COMP_RF, DBG_LOUD, ("RF is OFF, return NDIS_STATUS_DOT11_POWER_STATE_INVALID.\n")); - ndisStatus = NDIS_STATUS_DOT11_POWER_STATE_INVALID; - return ndisStatus; - } - - ndisStatus=N62CStartApMode(pTargetAdapter); - - pTargetAdapter->pNdis62Common->CurrentOpState = OP_STATE; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set AP mode OID_DOT11_START_AP_REQUEST.\n")); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_DOT11_DISASSOCIATE_PEER_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_DISASSOCIATE_PEER_REQUEST pDisassociationRequest = NULL; - PRT_WLAN_STA pEntry = NULL; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - pDisassociationRequest = (PDOT11_DISASSOCIATE_PEER_REQUEST)InformationBuffer; - - if (!MP_VERIFY_NDIS_OBJECT_HEADER_DEFAULT( - pDisassociationRequest->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_DISASSOCIATE_PEER_REQUEST_REVISION_1, - sizeof(DOT11_DISASSOCIATE_PEER_REQUEST)) - ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set AP mode OID_DOT11_DISASSOCIATE_PEER_REQUEST: Invalid length\n")); - ndisStatus = NDIS_STATUS_INVALID_DATA; - return ndisStatus; - } - - if (GetAPState(pTargetAdapter) != AP_STATE_STARTED) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("AP is not in OP STATE\n")); - return ndisStatus; - } - - if(MultiChannel_IsFCSInProgress(pTargetAdapter)) - { - if(MacAddr_isBcst(pDisassociationRequest->PeerMacAddr)) - { - MultiChannelDisconnectGo(pTargetAdapter); - } - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("<=== Return Set AP mode OID_DOT11_DISASSOCIATE_PEER_REQUEST since MCC\n")); - return ndisStatus; - } - - if(MacAddr_isBcst(pDisassociationRequest->PeerMacAddr)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Disassociate all peers.\n")); - - AP_DisassociateAllStation(pTargetAdapter, unspec_reason); - AsocEntry_ResetAll(pTargetAdapter); - } - else - { - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "Dissociate peer:", pDisassociationRequest->PeerMacAddr); - - pEntry = AsocEntry_GetEntry(pMgntInfo, pDisassociationRequest->PeerMacAddr); - if(pEntry) - { - AP_DisassociateStation(pTargetAdapter, pEntry, DOT11_DISASSOC_REASON_OS); - - // - // Now the state of the STA is authenticated but not associated. - // If an STA is disassociated because of this OID, it shall not be reported when - // OID_DOT11_ENUM_PEER_INFO is requested. - // In the sample code, deauth is sent and the STA entry is removed. - // We remove the STA entry so that it won't be reported when OID_DOT11_ENUM_PEER_INFO - // is requested. - // - RT_TRACE_F(COMP_AP, DBG_TRACE, ("AsocEntry_RemoveStation\n")); - - AsocEntry_RemoveStation(pTargetAdapter, pDisassociationRequest->PeerMacAddr); - } - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set AP mode OID_DOT11_DISASSOCIATE_PEER_REQUEST:\n")); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_DOT11_ASSOCIATION_PARAMS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_ASSOCIATION_PARAMS pAssocParams = (PDOT11_ASSOCIATION_PARAMS)InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - if (!MP_VERIFY_NDIS_OBJECT_HEADER_DEFAULT( - pAssocParams->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ADDITIONAL_IE_REVISION_1, - sizeof(DOT11_ASSOCIATION_PARAMS)) - ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Invalid length\n")); - ndisStatus = NDIS_STATUS_INVALID_DATA; - return ndisStatus; - } - - // - // allocate memory for the new IE data and copy the IEs - // - MgntActSet_AdditionalAssocReqIE(pTargetAdapter, - (pu1Byte)((pu1Byte)pAssocParams + pAssocParams->uAssocRequestIEsOffset), - pAssocParams->uAssocRequestIEsLength - ); - - //RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "AssocReqIE", - // (pu1Byte)((pu1Byte)pAssocParams + pAssocParams->uAssocRequestIEsOffset), pAssocParams->uAssocRequestIEsLength); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_DOT11_ASSOCIATION_PARAMS.\n")); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_PM_ADD_WOL_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_PM_WOL_PATTERN WOLPatternStructure = *((PNDIS_PM_WOL_PATTERN)InformationBuffer); - u1Byte WoLBitMapPatternMask[MAX_WOL_BIT_MASK_SIZE]; - u1Byte WoLBitMapPatternContent[MAX_WOL_PATTERN_SIZE]; - u1Byte WoLBitMapPattern[MAX_WOL_PATTERN_SIZE]; - u1Byte Index; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - pPSC->bSupportWakeUp = TRUE; - - PlatformZeroMemory(WoLBitMapPatternMask, sizeof(WoLBitMapPatternMask)); - PlatformZeroMemory(WoLBitMapPatternContent, sizeof(WoLBitMapPatternContent)); - - if(WOLPatternStructure.WoLPacketType == NdisPMWoLPacketBitmapPattern) - { - if(WOLPatternStructure.WoLPattern.WoLBitMapPattern.MaskSize <= MAX_WOL_BIT_MASK_SIZE) - { - PlatformMoveMemory(WoLBitMapPatternMask, (pu1Byte)InformationBuffer+WOLPatternStructure.WoLPattern.WoLBitMapPattern.MaskOffset, WOLPatternStructure.WoLPattern.WoLBitMapPattern.MaskSize); - RT_PRINT_DATA( COMP_OID_SET | COMP_POWER, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: WoLBitMapPatternMask...\n"), - WoLBitMapPatternMask, sizeof(WoLBitMapPatternMask)); - } - if(WOLPatternStructure.WoLPattern.WoLBitMapPattern.PatternSize <= MAX_WOL_PATTERN_SIZE) - { - PlatformMoveMemory(WoLBitMapPatternContent, (pu1Byte)InformationBuffer+WOLPatternStructure.WoLPattern.WoLBitMapPattern.PatternOffset, WOLPatternStructure.WoLPattern.WoLBitMapPattern.PatternSize); - RT_PRINT_DATA( COMP_OID_SET | COMP_POWER, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: WoLBitMapPatternContent...\n"), - WoLBitMapPatternContent, sizeof(WoLBitMapPatternContent)); - } - - //Find the index of the first empty entry. - for(Index=0; Index= MAX_SUPPORT_WOL_PATTERN_NUM(pTargetAdapter)) - { - ndisStatus = NDIS_STATUS_RESOURCES; - RT_TRACE(COMP_POWER, DBG_LOUD, - ("SET OID_PNP_ADD_WOL_PATTERN: Return status(%#X). The number of wake up pattern is more than %d or the pattern Id is exist.\n", - ndisStatus, MAX_SUPPORT_WOL_PATTERN_NUM(pTargetAdapter))); - return ndisStatus; - } - else - { - u1Byte BROADCAST_ADDR[6]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - u1Byte DONTCARE_ADDR[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - u1Byte MULTICAST_ADDR[2]={0x33, 0x33}; - - pPmWoLPatternInfo[Index].PatternType = eUnknownType; - pPmWoLPatternInfo[Index].PatternId = WOLPatternStructure.PatternId; - pPmWoLPatternInfo[Index].IsUserDefined = 0; - - //packet type. - if(PlatformCompareMemory(WoLBitMapPatternContent, pTargetAdapter->PermanentAddress, sizeof(pTargetAdapter->PermanentAddress)) == 0 ) - { //unicast - //Skip IPv4/IPv6 TCP SYN pattern because it will hit HW bug for the CRC. - // We offload this pattern to FW. - pPmWoLPatternInfo[Index].PatternType = eUnicastPattern; - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("OID_PM_ADD_WOL_PATTERN: IPv4/IPv6 TCP SYN pattern.\n")); - - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, MULTICAST_ADDR, sizeof(MULTICAST_ADDR)) == 0) - { //Multicast - pPmWoLPatternInfo[Index].PatternType = eMulticastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, BROADCAST_ADDR, sizeof(BROADCAST_ADDR)) == 0 ) - { //broadcast - pPmWoLPatternInfo[Index].PatternType = eBroadcastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, DONTCARE_ADDR, sizeof(DONTCARE_ADDR)) == 0 ) - { - pPmWoLPatternInfo[Index].PatternType = eDontCareDA; - } - //DbgPrint("PatternType = %d\n", pPmWoLPatternInfo[Index].PatternType); - - { - GetWOLWakeUpPattern(pTargetAdapter, - (pu1Byte)&WoLBitMapPatternMask, - WOLPatternStructure.WoLPattern.WoLBitMapPattern.MaskSize, - (pu1Byte)&WoLBitMapPatternContent, - WOLPatternStructure.WoLPattern.WoLBitMapPattern.PatternSize, - Index, - FALSE - ); - - pPSC->WoLPatternNum++; - } - } - } - else if(WOLPatternStructure.WoLPacketType == NdisPMWoLPacketEapolRequestIdMessage) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Support EapolRequestIdMessage.\n")); - - if(!pPSC->EapolRequestIdMessagePatternId) - { - pPSC->EapolRequestIdMessagePatternId = WOLPatternStructure.PatternId; - pPSC->WoLPktNoPtnNum++; - } - } - else if(WOLPatternStructure.WoLPacketType == NdisPMWoLPacketMagicPacket) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Support magic packet.\n")); - - if(!pPSC->MagicPacketPatternId) - { - pPSC->MagicPacketPatternId = WOLPatternStructure.PatternId; - pPSC->WoLPktNoPtnNum++; - - // OS adds magic packet pattern to present that the user picks up the check box "Allow - // this device to wake the computer", so we could according to the pattern to support - // some patch functions, ex. Enable PME_En before S5. - // 2013.06.28. by tynli. - //pPSC->bSupportWakeUp = TRUE; - } - - } - else if(WOLPatternStructure.WoLPacketType == NdisPMWoLPacketIPv4TcpSyn) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Support IPv4 TCP SYN.\n")); - - if(!pPSC->IPv4TcpSynPatternId) - { - pPSC->IPv4TcpSynPatternId = WOLPatternStructure.PatternId; - pPSC->WoLPktNoPtnNum++; - } - } - else if(WOLPatternStructure.WoLPacketType == NdisPMWoLPacketIPv6TcpSyn) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Support IPv6 TCP SYN.\n")); - - if(!pPSC->IPv6TcpSynPatternId) - { - pPSC->IPv6TcpSynPatternId = WOLPatternStructure.PatternId; - pPSC->WoLPktNoPtnNum++; - } - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Unspecified type(%#X).\n", WOLPatternStructure.WoLPacketType)); - } - - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: \n"), - InformationBuffer, InformationBufferLength - ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_PM_REMOVE_WOL_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u4Byte RemovePatternId = *((pu4Byte)InformationBuffer); - u1Byte Index; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - if(RemovePatternId == pPSC->EapolRequestIdMessagePatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove EapolRequestIdMessage.\n")); - - pPSC->EapolRequestIdMessagePatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - else if(RemovePatternId == pPSC->MagicPacketPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove MagicPacket.\n")); - - pPSC->MagicPacketPatternId = 0; - pPSC->WoLPktNoPtnNum--; - - // Clear PME enable support because OS removes it. - //pPSC->bSupportWakeUp = FALSE; - - //RT_TRACE_F(COMP_POWER, DBG_LOUD, ("Do not allow PME_En by the upper layer!\n")); - } - else if(RemovePatternId == pPSC->IPv4TcpSynPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove IPv4TcpSyn.\n")); - - pPSC->IPv4TcpSynPatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - else if(RemovePatternId == pPSC->IPv6TcpSynPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove IPv6TcpSyn.\n")); - - pPSC->IPv6TcpSynPatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - - for(Index=0; Index= MAX_SUPPORT_WOL_PATTERN_NUM(pTargetAdapter)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD,("SET OID_PM_REMOVE_WOL_PATTERN: Cannot find the wake up pattern Id(%08X).\n", RemovePatternId)); - } - else - { - //Reset the structure and set WFCRC register to non-zero value. - pPmWoLPatternInfo[Index].PatternId = 0; - PlatformZeroMemory(pPmWoLPatternInfo[Index].Mask, sizeof(pPmWoLPatternInfo[Index].Mask)); - pPmWoLPatternInfo[Index].CrcRemainder = 0xffff; - pPmWoLPatternInfo[Index].IsPatternMatch = 0; - pPmWoLPatternInfo[Index].IsSupportedByFW = 0; - pPSC->WoLPatternNum--; - - pTargetAdapter->HalFunc.SetHwRegHandler(pTargetAdapter, HW_VAR_WF_MASK, (pu1Byte)(&Index)); - pTargetAdapter->HalFunc.SetHwRegHandler(pTargetAdapter, HW_VAR_WF_CRC, (pu1Byte)(&Index)); - pPmWoLPatternInfo[Index].HwWFMIndex = 0xff; // reset the value after clear HW/CAM entry. - } - - //RT_PRINT_DATA( (COMP_OID_QUERY|COMP_AP), DBG_LOUD, ("SET OID_PM_REMOVE_WOL_PATTERN: "), - //InformationBuffer, InformationBufferLength ); - - if(pPSC->WoLPktNoPtnNum + pPSC->WoLPatternNum) - pPSC->bSupportWakeUp = TRUE; - else - pPSC->bSupportWakeUp = FALSE; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("WoLPktNoPtnNum = %d.\n", pPSC->WoLPktNoPtnNum)); - RT_TRACE(COMP_POWER, DBG_LOUD, ("WoLPatternNum = %d.\n", pPSC->WoLPatternNum)); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_PM_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_PM_PARAMETERS pPMParameters = (PNDIS_PM_PARAMETERS)InformationBuffer; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - BOOLEAN bSupportARPOffload=FALSE, bSupportGTKOffload=FALSE; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_PARAMETERS: "), - InformationBuffer, InformationBufferLength ); - - - if(pPMParameters->EnabledProtocolOffloads & NDIS_PM_PROTOCOL_OFFLOAD_ARP_ENABLED) - { - bSupportARPOffload = TRUE; - RT_TRACE(COMP_POWER , DBG_LOUD , ("OID_PM_PARAMETERS: NDIS_PM_PROTOCOL_OFFLOAD_ARP_ENABLED\n") ); - if(pPSC->RegARPOffloadEnable) - pPSC->ARPOffloadEnable = TRUE; - } - else - { - // We should not disable ARPOffloadEable flag besides HCT test, because we need to support - // ARP offload in RealWoW. Our service will set ARP info to driver instead of NDIS OID, so - // we do not accord to NIDS OID to decide whether we support ARP offload. 2013.10.08. by tynli. - if(pTargetAdapter->bInHctTest) - pPSC->ARPOffloadEnable = FALSE; - } - - if(pPMParameters->EnabledProtocolOffloads & NDIS_PM_PROTOCOL_OFFLOAD_NS_ENABLED) - { - bSupportARPOffload = TRUE; - RT_TRACE(COMP_POWER , DBG_LOUD , ("OID_PM_PARAMETERS: NDIS_PM_PROTOCOL_OFFLOAD_NS_ENABLED\n") ); - if(pPSC->RegNSOffloadEnable) - pPSC->NSOffloadEnable = TRUE; - } - else - { - // We should not disable ARPOffloadEable flag besides HCT test, because we need to support - // ARP offload in RealWoW. Our service will set ARP info to driver instead of NDIS OID, so - // we do not accord to NIDS OID to decide whether we support ARP offload. 2013.10.08. by tynli. - if(pTargetAdapter->bInHctTest) - pPSC->NSOffloadEnable = FALSE; - } - - if(pPMParameters->EnabledProtocolOffloads & NDIS_PM_PROTOCOL_OFFLOAD_80211_RSN_REKEY_ENABLED) - { - bSupportGTKOffload = TRUE; - RT_TRACE(COMP_POWER , DBG_LOUD , ("OID_PM_PARAMETERS: NDIS_PM_PROTOCOL_OFFLOAD_80211_RSN_REKEY_ENABLED\n") ); - if(pPSC->RegGTKOffloadEnable) - pPSC->GTKOffloadEnable = TRUE; - } - else - { - // We should not disable GTKOffloadEable flag besides HCT test, because we need to support - // GTK offload in RealWoW and S5 wake up. We do not accord to NIDS OID to decide whether - // we support GTK offload. 2013.10.08. by tynli. - if(pTargetAdapter->bInHctTest) - pPSC->GTKOffloadEnable = FALSE; - } - - if(pPSC->ProtocolOffloadDecision) - { - if(pPSC->RegARPOffloadEnable || pPSC->RegGTKOffloadEnable) - { - if(bSupportARPOffload || bSupportGTKOffload) - pPSC->bOSSupportProtocolOffload = TRUE; - else - pPSC->bOSSupportProtocolOffload = FALSE; - } - else - { - pPSC->bOSSupportProtocolOffload = TRUE; - } - } - else - { - pPSC->bOSSupportProtocolOffload = TRUE; - } - - pPSC->bSetPMParameters = TRUE; - - *BytesRead = InformationBufferLength; - //RT_PRINT_DATA( (COMP_OID_QUERY|COMP_AP), DBG_LOUD, ("SET OID_PM_PARAMETERS: pPMParameters "), - //pPMParameters->EnabledProtocolOffloads , sizeof(NDIS_PM_PARAMETERS) ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_PM_PROTOCOL_OFFLOAD pPMProtocolOffload = (PNDIS_PM_PROTOCOL_OFFLOAD)InformationBuffer; - RT_PM_PROTOCOL_OFFLOAD PmPO; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - BOOLEAN bNextPMEntryExit = FALSE; - u1Byte IPv6NSIndex =0; - u4Byte mPOoffset = RTL_SIZEOF_THROUGH_FIELD(NDIS_PM_PROTOCOL_OFFLOAD, NextProtocolOffloadOffset) + sizeof(ULONG); - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - PlatformZeroMemory(&PmPO, sizeof(RT_PM_PROTOCOL_OFFLOAD)); - - //DbgPrint("pPMProtocolOffload->ProtocolOffloadType = 0x%x\n", pPMProtocolOffload->ProtocolOffloadType); - //DbgPrint("pPMProtocolOffload->ProtocolOffloadId = 0x%x\n", pPMProtocolOffload->ProtocolOffloadId); - - // Grab the information from Informationbuffer. - do{ - // Init flag !! - bNextPMEntryExit = FALSE; - if(pPMProtocolOffload->ProtocolOffloadType == NdisPMProtocolOffload80211RSNRekey) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eGTKOffloadIdx] = pPMProtocolOffload->ProtocolOffloadId; - - //Copy kck, kek - PlatformMoveMemory(&PmPO, (pu1Byte)InformationBuffer+mPOoffset, 36); - PmPO.ProtocolOffloadParameters.Dot11RSNRekeyParameters.KeyReplayCounter = - pPMProtocolOffload->ProtocolOffloadParameters.Dot11RSNRekeyParameters.KeyReplayCounter; - PlatformMoveMemory(&(pMgntInfo->PMDot11RSNRekeyPara), (pu1Byte)&PmPO, sizeof(RT_PM_DOT11_RSN_REKEY_PARAMETERS)); - } - else if(pPMProtocolOffload->ProtocolOffloadType == NdisPMProtocolOffloadIdIPv4ARP) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eARPOffloadIdx] = pPMProtocolOffload->ProtocolOffloadId; - - PlatformMoveMemory(&PmPO, (pu1Byte)InformationBuffer+mPOoffset, sizeof(PmPO.ProtocolOffloadParameters.IPv4ARPParameters)); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM RemoteIPv4Address:\n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv4ARPParameters.RemoteIPv4Address, 4); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("RemoteIPv4Address:\n"), - PmPO.ProtocolOffloadParameters.IPv4ARPParameters.RemoteIPv4Address, 4); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM HostIPv4Address:\n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv4ARPParameters.HostIPv4Address, 4); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("HostIPv4Address:\n"), - PmPO.ProtocolOffloadParameters.IPv4ARPParameters.HostIPv4Address, 4); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM MacAddress:\n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv4ARPParameters.MacAddress, 6); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("MacAddress:\n"), - PmPO.ProtocolOffloadParameters.IPv4ARPParameters.MacAddress, 6); - - PlatformMoveMemory(&(pMgntInfo->PMIPV4ARPPara), &PmPO, sizeof(RT_PM_IPV4_ARP_PARAMETERS)); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("==> HostIPv4Address:\n"), - pMgntInfo->PMIPV4ARPPara.HostIPv4Address, 4); - } - else if(pPMProtocolOffload->ProtocolOffloadType == NdisPMProtocolOffloadIdIPv6NS) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_PROTOCOL_OFFLOAD. (NS IPv6)\n")); - if((pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] != 0) && - (pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] != 0)) - { - ndisStatus = NDIS_STATUS_RESOURCES; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Insufficient NS offload number!! Status(%#X) <==\n", ndisStatus)); - } - else - { - - if( pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] == 0) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] = pPMProtocolOffload->ProtocolOffloadId; - IPv6NSIndex = 0; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==> eNSOffloadIdx1: \n")); - } - else - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] = pPMProtocolOffload->ProtocolOffloadId; - IPv6NSIndex = 1; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==> eNSOffloadIdx2: \n")); - } - - pMgntInfo->PMIPV6NSPara[IPv6NSIndex].Flags = pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.Flags; - - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].RemoteIPv6Address, - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.RemoteIPv6Address, 16); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].SolicitedNodeIPv6Address, - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.SolicitedNodeIPv6Address, 16); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].MacAddress, - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.MacAddress, 6); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].TargetIPv6Addresses[0], - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[0], 16); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].TargetIPv6Addresses[1], - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[1], 16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM RemoteIPv6Address: \n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.RemoteIPv6Address ,16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM SolicitedNodeIPv6Address: \n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.SolicitedNodeIPv6Address ,16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM MacAddress: \n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.MacAddress ,6); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM TargetIPv6Addresses[0]: \n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[0] ,16); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM TargetIPv6Addresses[1]: \n"), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[1] ,16); - } - } - - // Check Next entry !! - if(pPMProtocolOffload->NextProtocolOffloadOffset != 0) - { - bNextPMEntryExit = TRUE; - // Point to Next Entry !! - pPMProtocolOffload = (PNDIS_PM_PROTOCOL_OFFLOAD)((pu1Byte)InformationBuffer + pPMProtocolOffload->NextProtocolOffloadOffset); - - } - - }while(bNextPMEntryExit); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD: \n"), - InformationBuffer, InformationBufferLength ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_PM_REMOVE_PROTOCOL_OFFLOAD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - u4Byte ProtocolOffloadId = 0, MatchId=0; - BOOLEAN bMatch=FALSE; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - ProtocolOffloadId = *((ULONG *)InformationBuffer); - - for(MatchId=0; MatchId<4; MatchId++) - { - if(ProtocolOffloadId == pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[MatchId]) - { - bMatch = TRUE; - RT_TRACE(COMP_POWER, DBG_LOUD, ("Find match protocol offload ID idx (%d)\n", MatchId)); - //break; - - if(bMatch) - { - if(MatchId == eGTKOffloadIdx) - { - PlatformZeroMemory(&(pMgntInfo->PMDot11RSNRekeyPara), sizeof(RT_PM_DOT11_RSN_REKEY_PARAMETERS)); - } - else if(MatchId == eARPOffloadIdx) - { - PlatformZeroMemory(&(pMgntInfo->PMIPV4ARPPara), sizeof(RT_PM_IPV4_ARP_PARAMETERS)); - } - else if(MatchId == eNSOffloadIdx1 ) - { - // Disable eNSOffloadIdx1 , set ID = 0 !! - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] = 0; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==>REMOVE eNSOffloadIdx1: \n")); - } - else if(MatchId == eNSOffloadIdx2) - { - // Disable eNSOffloadIdx2 , set ID = 0 !! - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] = 0; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==>REMOVE eNSOffloadIdx2: \n")); - } - } - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_REMOVE_PROTOCOL_OFFLOAD (%x)\n", ProtocolOffloadId)); - - return ndisStatus; -} - - -NDIS_STATUS -N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PNDIS_PM_PROTOCOL_OFFLOAD pPMProtocolOffload = (PNDIS_PM_PROTOCOL_OFFLOAD)InformationBuffer; - RT_PM_PROTOCOL_OFFLOAD PmPO; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - BOOLEAN bNextPMEntryExit = FALSE; - u1Byte IPv6NSIndex =0; - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - PlatformZeroMemory(&PmPO, sizeof(RT_PM_PROTOCOL_OFFLOAD)); - - //DbgPrint("pPMProtocolOffload->ProtocolOffloadType = 0x%x\n", pPMProtocolOffload->ProtocolOffloadType); - //DbgPrint("pPMProtocolOffload->ProtocolOffloadId = 0x%x\n", pPMProtocolOffload->ProtocolOffloadId); - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, ("SET N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD: "), - InformationBuffer, InformationBufferLength ); - - // Grab the information from Informationbuffer. - do{ - // Init flag !! - bNextPMEntryExit = FALSE; - if(pPMProtocolOffload->ProtocolOffloadType == NdisPMProtocolOffload80211RSNRekey) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eGTKOffloadIdx] = pPMProtocolOffload->ProtocolOffloadId; - - //Copy kck, kek - PlatformMoveMemory(&PmPO, (pu1Byte)pPMProtocolOffload+NDIS_SIZEOF_NDIS_PM_PROTOCOL_OFFLOAD_REVISION_1, 36); - PmPO.ProtocolOffloadParameters.Dot11RSNRekeyParameters.KeyReplayCounter = - pPMProtocolOffload->ProtocolOffloadParameters.Dot11RSNRekeyParameters.KeyReplayCounter; - PlatformMoveMemory(&(pMgntInfo->PMDot11RSNRekeyPara), (pu1Byte)&PmPO, sizeof(RT_PM_DOT11_RSN_REKEY_PARAMETERS)); - } - else if(pPMProtocolOffload->ProtocolOffloadType == NdisPMProtocolOffloadIdIPv4ARP) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eARPOffloadIdx] = pPMProtocolOffload->ProtocolOffloadId; - - PlatformMoveMemory(&PmPO, (pu1Byte)pPMProtocolOffload+NDIS_SIZEOF_NDIS_PM_PROTOCOL_OFFLOAD_REVISION_1, sizeof(PmPO.ProtocolOffloadParameters.IPv4ARPParameters)); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM RemoteIPv4Address: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv4ARPParameters.RemoteIPv4Address, 4); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("RemoteIPv4Address: "), - PmPO.ProtocolOffloadParameters.IPv4ARPParameters.RemoteIPv4Address, 4); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM HostIPv4Address: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv4ARPParameters.HostIPv4Address, 4); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("HostIPv4Address: "), - PmPO.ProtocolOffloadParameters.IPv4ARPParameters.HostIPv4Address, 4); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM MacAddress: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv4ARPParameters.MacAddress, 6); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("MacAddress: "), - PmPO.ProtocolOffloadParameters.IPv4ARPParameters.MacAddress, 6); - - PlatformMoveMemory(&(pMgntInfo->PMIPV4ARPPara), &PmPO, sizeof(RT_PM_IPV4_ARP_PARAMETERS)); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("==> HostIPv4Address: "), - pMgntInfo->PMIPV4ARPPara.HostIPv4Address, 4); - } - else if(pPMProtocolOffload->ProtocolOffloadType == NdisPMProtocolOffloadIdIPv6NS) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_PROTOCOL_OFFLOAD. (NS IPv6)\n")); - if( pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] == 0) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] = pPMProtocolOffload->ProtocolOffloadId; - IPv6NSIndex = 0; - } - else - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] = pPMProtocolOffload->ProtocolOffloadId; - IPv6NSIndex = 1; - } - - pMgntInfo->PMIPV6NSPara[IPv6NSIndex].Flags = pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.Flags; - - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].RemoteIPv6Address, - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.RemoteIPv6Address, 16); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].SolicitedNodeIPv6Address, - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.SolicitedNodeIPv6Address, 16); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].MacAddress, - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.MacAddress, 6); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].TargetIPv6Addresses[0], - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[0], 16); - PlatformMoveMemory(pMgntInfo->PMIPV6NSPara[IPv6NSIndex].TargetIPv6Addresses[1], - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[1], 16); - - - //PlatformMoveMemory(&PmPO, (pu1Byte)pPMProtocolOffload+NDIS_SIZEOF_NDIS_PM_PROTOCOL_OFFLOAD_REVISION_1, sizeof(PmPO.ProtocolOffloadParameters.IPv6NSParameters)); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM RemoteIPv6Address: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.RemoteIPv6Address ,16); - //RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("RemoteIPv6Address: "), - // PmPO.ProtocolOffloadParameters.IPv6NSParameters.RemoteIPv6Address ,16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM SolicitedNodeIPv6Address: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.SolicitedNodeIPv6Address ,16); - //RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SolicitedNodeIPv6Address: "), - // PmPO.ProtocolOffloadParameters.IPv6NSParameters.SolicitedNodeIPv6Address ,16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM MacAddress: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.MacAddress ,6); - //RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("MacAddress: "), - // PmPO.ProtocolOffloadParameters.IPv6NSParameters.MacAddress ,6); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM TargetIPv6Addresses[0]: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[0] ,16); - //RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("TargetIPv6Addresses[0]: "), - // PmPO.ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[0] ,16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM TargetIPv6Addresses[1]: "), - pPMProtocolOffload->ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[1] ,16); - //RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("TargetIPv6Addresses[1]: "), - // PmPO.ProtocolOffloadParameters.IPv6NSParameters.TargetIPv6Addresses[1] ,16); - - //PlatformMoveMemory(&(pMgntInfo->PMIPV6NSPara[IPv6NSIndex]), &PmPO, sizeof(RT_PM_IPV6_NS_PARAMETERS) ); - - } - - // Check Next entry !! - - if(pPMProtocolOffload->NextProtocolOffloadOffset != 0) - { - bNextPMEntryExit = TRUE; - // Point to Next Entry !! - pPMProtocolOffload = (PNDIS_PM_PROTOCOL_OFFLOAD)((pu1Byte)InformationBuffer + pPMProtocolOffload->NextProtocolOffloadOffset); - - } - - }while(bNextPMEntryExit); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD: "), - InformationBuffer, InformationBufferLength ); - - return ndisStatus; -} - -NDIS_STATUS -N62C_SET_OID_RECEIVE_FILTER_CLEAR_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - PNDIS_RECEIVE_FILTER_CLEAR_PARAMETERS pFilterClear = (PNDIS_RECEIVE_FILTER_CLEAR_PARAMETERS)InformationBuffer; - PRT_DO_COALESICING_FILTER_PARAMETER pCurrRTCoPa = NULL; - u4Byte Removeid = 0; - u1Byte CurrIndex = 0; - - FunctionIn(COMP_OID_SET); - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - if(InformationBufferLength < NDIS_SIZEOF_RECEIVE_FILTER_CLEAR_PARAMETERS_REVISION_1) - { - *BytesNeeded = NDIS_SIZEOF_RECEIVE_FILTER_CLEAR_PARAMETERS_REVISION_1; - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - return ndisStatus; - } - - Removeid = pFilterClear->FilterId; - - for(CurrIndex = 0 ; CurrIndex < 10 ; CurrIndex++) - { - pCurrRTCoPa = &(pMgntInfo->mRtD0ColesFilterInfo.dFilterArry[CurrIndex]); - - if( pCurrRTCoPa->FilterID == Removeid ) - { - PlatformZeroMemory(pCurrRTCoPa , sizeof(RT_DO_COALESICING_FILTER_PARAMETER)); - RT_TRACE(COMP_POWER, DBG_LOUD, ("====>Remove Currindex (%d)\n",CurrIndex)); - break; - } - - } - - if( CurrIndex == 10 ) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("====>Fail Removeid (%d)\n",Removeid)); - ndisStatus = NDIS_STATUS_INVALID_PARAMETER; - } - - return ndisStatus; -} - -NDIS_STATUS -N62C_QUERYSET_OID_RECEIVE_FILTER_SET_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - PNDIS_RECEIVE_FILTER_PARAMETERS pRxFilterPara = NULL; - PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS pRxFilterFieldPara = NULL; - u1Byte Currindex =0; - PRT_DO_COALESICING_FILTER_PARAMETER pCurrRTCoPa = NULL; - PRT_DO_COALESICING_FIELD_INFO pCurrRTCoField = NULL; - ULONG FieldOffset; - pu1Byte pFieldParametersArray; - ULONG FieldElementSize; - //FieldParametersArrayElementSize - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - pRxFilterPara = (PNDIS_RECEIVE_FILTER_PARAMETERS)InformationBuffer; - pFieldParametersArray =(pu1Byte)InformationBuffer + pRxFilterPara->FieldParametersArrayOffset; - FieldOffset = pRxFilterPara->FieldParametersArrayOffset; - FieldElementSize = pRxFilterPara->FieldParametersArrayElementSize; - - if(InputBufferLength < (RTL_SIZEOF_THROUGH_FIELD(NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, ResultValue))) - { - *BytesNeeded = (RTL_SIZEOF_THROUGH_FIELD(NDIS_RECEIVE_FILTER_FIELD_PARAMETERS, ResultValue)); - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - return ndisStatus; - } - -#if (NDIS_SUPPORT_NDIS630) - // Check filter type !! - if(pRxFilterPara->FilterType != NdisReceiveFilterTypePacketCoalescing) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Query/Set NDIS_RECEIVE_FILTER_PARAMETERS: Invalid FilterType(%x)\n",pRxFilterPara->FilterType)); - ndisStatus = NDIS_STATUS_INVALID_PARAMETER; - return ndisStatus; - } -#endif - - if(pRxFilterPara->FieldParametersArrayNumElements > 5 ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Query/Set NDIS_RECEIVE_FILTER_PARAMETERS: Invalid FieldParametersArrayNumElements(%x)\n",pRxFilterPara->FieldParametersArrayNumElements)); - ndisStatus = NDIS_STATUS_INVALID_PARAMETER; - return ndisStatus; - } - - - // Get Free Entry of FILTER_PARAMETER - for(Currindex = 0 ; Currindex < 10 ; Currindex++) - { - if( pMgntInfo->mRtD0ColesFilterInfo.dFilterArry[Currindex].FilterID == 0) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("====>PARAMETER Currindex (%d)\n",Currindex)); - break; - } - } - - if( Currindex < 10 ) - { - pCurrRTCoPa = &(pMgntInfo->mRtD0ColesFilterInfo.dFilterArry[Currindex]); - pCurrRTCoPa->FilterID = pRxFilterPara->FilterId; - pCurrRTCoPa->NumOfElem = pRxFilterPara->FieldParametersArrayNumElements; - RT_TRACE(COMP_POWER, DBG_LOUD, ("====> pCurrRTCoPa->NumOfElem (%d)\n",pCurrRTCoPa->NumOfElem)); -#if (NDIS_SUPPORT_NDIS630) - pCurrRTCoPa->Delaytime = pRxFilterPara->MaxCoalescingDelay; -#else - pCurrRTCoPa->Delaytime = 200; // Default set 200 for win7 ~~ -#endif - } - else - { - ndisStatus = NDIS_STATUS_INVALID_PARAMETER; - return ndisStatus; - } - - RT_PRINT_DATA(COMP_POWER, DBG_LOUD, "===> N62C_QUERYSET_OID_RECEIVE_FILTER_SET_FILTER :\n ", InformationBuffer, InputBufferLength); - - // Save Filed - Currindex = 0; - while( Currindex < pCurrRTCoPa->NumOfElem ) - { - // Get entry !! - pRxFilterFieldPara = (PNDIS_RECEIVE_FILTER_FIELD_PARAMETERS)(pFieldParametersArray + (FieldElementSize*Currindex)); - pCurrRTCoField = &(pCurrRTCoPa->dFieldArry[Currindex]); - - // Save data - PlatformMoveMemory(pCurrRTCoField, pRxFilterFieldPara, FieldElementSize); -/* - // For Dbg show message !! - RT_TRACE(COMP_POWER, DBG_LOUD, ("====>Filed Currindex (%d)\n",Currindex)); - if( pRxFilterFieldPara->FrameHeader == NdisFrameHeaderArp) - { - RT_PRINT_DATA(COMP_POWER, DBG_LOUD, "===>pRxFilterFieldPara: \n", pRxFilterFieldPara, FieldElementSize); - RT_PRINT_DATA(COMP_POWER, DBG_LOUD, "===>pCurrRTCoField: \n", pCurrRTCoField, sizeof(RT_DO_COALESICING_FIELD_INFO)); - RT_TRACE(COMP_POWER, DBG_LOUD , ("pRxFilterFieldPara->HeaderField.ArpHeaderField (%d)\n",pRxFilterFieldPara->HeaderField.ArpHeaderField)); - RT_TRACE(COMP_POWER, DBG_LOUD , ("pCurrRTCoField->HeaderField.ArpHeaderField (%d)\n",pCurrRTCoField->HeaderField.ArpHeaderField)); - - if( pCurrRTCoField->HeaderField.ArpHeaderField == RTARPHeaderFieldOperation ) - { - RT_TRACE(COMP_POWER, DBG_LOUD , ("pRxFilterFieldPara->FieldValue.ResultShortValue (%d)\n",pRxFilterFieldPara->FieldValue.FieldShortValue)); - RT_TRACE(COMP_POWER, DBG_LOUD , ("pCurrRTCoField->FieldValue.ResultShortValue (%d)\n",pCurrRTCoField->FieldValue.FieldShortValue)); - //FieldShortValue - } - } -*/ - Currindex++; - } - - pMgntInfo->mRtD0ColesFilterInfo.bEnable = TRUE; - - return ndisStatus; -} diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.h deleted file mode 100644 index b28db43a..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_SetOID.h +++ /dev/null @@ -1,168 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - N62C_SETOID.h - -Abstract: - Contains Port specific defines - -Revision History: - When What - ---------- ---------------------------------------------- - 04-22-2007 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _N62_SETOID__H -#define _N62_SETOID__H - -NDIS_STATUS -N62C_SET_OID_DOT11_INCOMING_ASSOCIATION_DECISION( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_DOT11_WPS_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_DOT11_ADDITIONAL_IE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_DOT11_START_AP_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_DOT11_DISASSOCIATE_PEER_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_DOT11_ASSOCIATION_PARAMS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_PM_ADD_WOL_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_PM_REMOVE_WOL_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_PM_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_PM_REMOVE_PROTOCOL_OFFLOAD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_PM_ADD_PROTOCOL_OFFLOAD_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_SET_OID_RECEIVE_FILTER_CLEAR_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N62C_QUERYSET_OID_RECEIVE_FILTER_SET_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -#endif //_N62_SETOID__H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N62C_def.h b/network/wlan/WDI/PLATFORM/NDIS6/N62C_def.h deleted file mode 100644 index 4aa9dad9..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N62C_def.h +++ /dev/null @@ -1,241 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - -Module Name: - N62C_def.h - -Abstract: - Contains Port specific defines - -Revision History: - When What - ---------- ---------------------------------------------- - 05-12-2007 Created - -Notes: - ---*/ - -#pragma once - -#ifndef _N62_DEF__H -#define _N62_DEF__H - -/** - * Gets access to the MP_EXTSTA_PORT from the MP_PORT - */ -#define IS_ALLOCATED_PORT_NUMBER(_PortNumber) (_PortNumber != DEFAULT_NDIS_PORT_NUMBER && _PortNumber != HELPER_PORT_PORT_NUMBER) - - - - -// -// (Ported from MS's code, Maddest, 2008-06-13.) -// Macros for assigning and verifying NDIS_OBJECT_HEADER -// -#define MP_VERIFY_NDIS_OBJECT_HEADER_DEFAULT(_header, _type, _revision, _size) \ - (((_header).Type == _type) && \ - ((_header).Revision >= _revision) && \ - ((_header).Size >= _size)) - -typedef enum _RT_MUTEX_TYPE{ - RT_RESET_PNP_MUTEX = 1, -}RT_MUTEX_TYPE; - -typedef enum _MP_PORT_OP_STATE -{ - INIT_STATE = 0, - OP_STATE -} MP_PORT_OP_STATE, *PMP_PORT_OP_STATE; - -typedef enum _MP_PORT_TYPE -{ - HELPER_PORT = 0, - EXTSTA_PORT, - EXTAP_PORT, - EXT_P2P_DEVICE_PORT, - EXT_P2P_ROLE_PORT -} MP_PORT_TYPE, *PMP_PORT_TYPE; - - -/** - * Keeps tracks of the current state of association attempt by the driver. Note - * the some states are set just before we start an action to avoid timing windows. - */ -typedef enum _STA_ASSOC_STATE -{ - /** - * Start state when we are not associated and have not started association process - */ - ASSOC_STATE_NOT_ASSOCIATED = 0, - - /** - * When set we are ready to start the association process and are either - * about to start the association or have failed a previous association and - * would be restarting the association. Roaming and connect request code - * are synchronized after this state. - */ - ASSOC_STATE_READY_TO_ASSOCIATE, - - /** - * Have started the association process. This is set just after we have selected - * an access point to start the association attempt. This would only be set for - * the duration of the association process - */ - ASSOC_STATE_STARTED_ASSOCIATION, - - /** - * Have asked the hardware functions to synchronize with the access point - * and are waiting for hardware functions to return - */ - ASSOC_STATE_WAITING_FOR_JOIN, - - /** - * Hardware functions have returned after successful synchronization - * with the access point - */ - ASSOC_STATE_JOINED, - - /** - * Special state set when we get deauthenticate packet from - * the access point while we still havent completed association. This is - * not set on normal code path. It is used to ensure that we dont - * complete the association successfully even if we received a - * deauth packet from the access point - */ - ASSOC_STATE_REMOTELY_DEAUTHENTICATED, - - /** - * We are waiting for an authentication packet from the accesspoint. - * Currently driver only uses open authentication or shared key authentication - * so this is set when we are waiting for packet with sequence number 2 or 4 - */ - ASSOC_STATE_WAITING_FOR_AUTHENTICATE, - - /** - * Received successful authentication response from the access point - */ - ASSOC_STATE_RECEIVED_AUTHENTICATE, - - /** - * Special state set when we get disassociate request from - * the access point while we still havent completed association. This - * is again not set on normal code paths. It is used to ensure that - * we dont complete the association successfully even if we received - * a disassociate packet from the access point - */ - ASSOC_STATE_REMOTELY_DISASSOCIATED, - - /** - * Waiting for Association response from the access point - */ - ASSOC_STATE_WAITING_FOR_ASSOCIATE, - - /** - * Received successful association response from the access point - */ - ASSOC_STATE_RECEIVED_ASSOCIATE, - - /** - * Associated process completed successfully & status indicated. After this - * is set, any disassociate/deauthenticate packet from the accesspoint - * would case disassociation status indication - */ - ASSOC_STATE_ASSOCIATED - -} STA_ASSOC_STATE, *PSTA_ASSOC_STATE ; - -/** - * State of the connection attempt as per the operating system. This is - * used to keep track of what the operating system is expecting the driver - * to do with regards to connection to an 802.11 network - */ -typedef enum _STA_CONNECT_STATE{ - /** - * Disconnected: Driver should not attempt to associate and if associated - * should disconnect cleanly. This is set on receiving DISCONNECT OID and the - * driver terminates any existing connection. - */ - CONN_STATE_DISCONNECTED, - - /** - * In reset. Operating system is reseting the adapter (either by OID or - * NdisReset) or halting the adapter, etc. The driver waits - * for on going connection to complete and then resets back to - * disconnected state - */ - CONN_STATE_IN_RESET, - - /** - * Okay to connect. The operating system expects the driver to start connecting. The - * driver would attempt to find and associate with candidate access point. This - * is set on receiving CONNECT OID and is maintained until we have made a connection - * attempt. - */ - CONN_STATE_READY_TO_CONNECT, - - /** - * Okay to roam. The operating system expects the driver to stay connected a - * and if connection is lost for some reason, to roam to a new access point. - * In this state, any connection attempt is because we want to roam - */ - CONN_STATE_READY_TO_ROAM - -} STA_CONNECT_STATE, *PSTA_CONNECT_STATE; - -// -// Management Frame -// - -typedef union { - struct { - USHORT ESS: 1; - USHORT IBSS: 1; - USHORT CFPollable: 1; - USHORT CFPollRequest: 1; - USHORT Privacy: 1; - USHORT ShortPreamble: 1; - USHORT PBCC: 1; - USHORT ChannelAgility: 1; - USHORT Reserved: 2; - USHORT ShortSlotTime:1; - USHORT Reserved2: 2; - USHORT DSSSOFDM: 1; - USHORT Reserved3: 2; - }; - - USHORT usValue; - -} DOT11_CAPABILITY, * PDOT11_CAPABILITY; - -typedef struct _QUEUE_ENTRY -{ - struct _QUEUE_ENTRY *Next; -} QUEUE_ENTRY, *PQUEUE_ENTRY; - -typedef struct _MP_PACKET_QUEUE -{ - PQUEUE_ENTRY Head; - PQUEUE_ENTRY Tail; - ULONG Count; -} MP_PACKET_QUEUE, *PMP_PACKET_QUEUE; - -BOOLEAN -IsAPModeExist( - PADAPTER Adapter - ); - -BOOLEAN -IsExtAPModeExist( - PADAPTER Adapter - ); - -BOOLEAN -IsSendingBeacon( - PADAPTER Adapter - ); -PADAPTER -GetAdapterByPortNum(PADAPTER Adapter, u1Byte PortNum); - -#endif ////_N62_DEF__H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.c b/network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.c deleted file mode 100644 index 5812f010..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.c +++ /dev/null @@ -1,7007 +0,0 @@ -#include "Mp_Precomp.h" -#include "P2P_Internal.h" - -VOID -N63CIndicateReceivedProvisionDiscoveryResponse( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf - ); - -VOID -N63CIndicateReceivedGONegotiationResponse( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf - ); - -VOID -N63CIndicateReceivedGONegotiationConfirm( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf - ); - -VOID -N63CIndicateReceivedInvitationResponse( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf - ); - -static u1Byte InfoBuf[1024]; -static ULONG InfoBufLen; - -//====================================================================================== -// Local function for OffChnlTx -//====================================================================================== - -static -BOOLEAN -n63c_SendP2pActionFrameComplete( - IN PADAPTER pAdapter, - IN const N63C_SEND_ACTION_CTX *ctx - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OFF_CHNL_TX_STATUS_FLAG txStatusFlag; - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - FRAME_BUF *buf = OffChnlTx_GetTxFrameBuf(ctx->req); - - FunctionIn(COMP_OID_SET); - - txStatusFlag = OffChnlTx_GetTxStatusFlag(ctx->req); - - status = (TEST_FLAG(txStatusFlag.perTxAttemptFlag, OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_SENT) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); - - RT_ASSERT(buf, ("%s(): buf is NULL!!!n", __FUNCTION__)); - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("indicate frame sent with token: %u\n", ctx->token)); - - // Change dialog token to make sure the token is the same as the previous query. - p2p_IndicateActionFrameSendCompleteWithToken(info, - ctx->compEvent, - (NDIS_STATUS_SUCCESS == status) ? RT_STATUS_SUCCESS : RT_STATUS_FAILURE, - FrameBuf_MHead(buf), - FrameBuf_Length(buf), - ctx->token); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -static -BOOLEAN -n63c_Construct_FakeInvitationRsp( - IN ADAPTER *pAdapter, - IN const N63C_SEND_ACTION_CTX *ctx, - IN const P2P_DEV_LIST_ENTRY *dev, - OUT FRAME_BUF *fbuf - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osWFDIE, osProbeRspPkt; - - FunctionIn(COMP_OID_SET); - - // MAC Header - p2p_add_ActionFrameMacHdr(fbuf, info->DeviceAddress, dev->mac, info->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(fbuf, P2P_INVITATION_RSP, ctx->token); - - // P2P IE - p2p_build_FakeInvitationRspIe(fbuf, info, dev->mac); - - // WFD IE, from probe rsp - if(dev->rxFrames[P2P_FID_PROBE_RSP] && dev->rxFrames[P2P_FID_PROBE_RSP]->frameLen) - { - FillOctetString(osProbeRspPkt, - dev->rxFrames[P2P_FID_PROBE_RSP]->frame, - dev->rxFrames[P2P_FID_PROBE_RSP]->frameLen - ); - - osWFDIE = PacketGetElement(osProbeRspPkt, EID_Vendor, OUI_SUB_WIFI_DISPLAY, OUI_SUB_DONT_CARE); - - if(osWFDIE.Length > 0) - { - PacketMakeElement(&fbuf->os, EID_Vendor, osWFDIE); - } - } - - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("a fake invitation rsp constructed\n")); - FrameBuf_Dump(fbuf, 0, DBG_LOUD, __FUNCTION__); - - N6CWriteEventLogEntry(pAdapter, NDIS_STATUS_SUCCESS, - FrameBuf_Length(fbuf), FrameBuf_MHead(fbuf), - L"A fake invitation rsp constructed" - ); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -static -BOOLEAN -n63c_Construct_FakePdRsp( - IN ADAPTER *pAdapter, - IN const N63C_SEND_ACTION_CTX *ctx, - IN const P2P_DEV_LIST_ENTRY *dev, - OUT FRAME_BUF *fbuf - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osPdReq, osTmpIe; - - FunctionIn(COMP_OID_SET); - - if(dev->txFrames[P2P_FID_PD_REQ] && dev->txFrames[P2P_FID_PD_REQ]->frameLen) - { - FillOctetString(osPdReq, - dev->txFrames[P2P_FID_PD_REQ]->frame, - dev->txFrames[P2P_FID_PD_REQ]->frameLen - ); - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("no corresp. pd req\n")); - FillOctetString(osPdReq, NULL, 0); - } - - // MAC Header - p2p_add_ActionFrameMacHdr(fbuf, info->DeviceAddress, dev->mac, dev->mac); - - // Action Header - p2p_add_P2PPublicActionHdr(fbuf, P2P_PROV_DISC_RSP, ctx->token); - - // WPS IE, getting from the original PD request - if(osPdReq.Length) - { - osTmpIe = PacketGetElement(osPdReq, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUB_DONT_CARE); - if(osTmpIe.Length) - { - PacketMakeElement(&fbuf->os, EID_Vendor, osTmpIe); - } - } - - // WFD IE - if(osPdReq.Length) - { - osTmpIe = PacketGetElement(osPdReq, EID_Vendor, OUI_SUB_WIFI_DISPLAY, OUI_SUB_DONT_CARE); - if(osTmpIe.Length) - { - PacketMakeElement(&fbuf->os, EID_Vendor, osTmpIe); - } - } - - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("a fake pd rsp constructed\n")); - FrameBuf_Dump(fbuf, 0, DBG_LOUD, __FUNCTION__); - - N6CWriteEventLogEntry(pAdapter, NDIS_STATUS_SUCCESS, - FrameBuf_Length(fbuf), FrameBuf_MHead(fbuf), - L"A fake pd rsp constructed" - ); - - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -static -BOOLEAN -n63c_IndicateRxP2pRspActionFrame( - IN ADAPTER *pAdapter, - IN const N63C_SEND_ACTION_CTX *ctx - ) -{ - typedef VOID (*N63C_INDIC_RX_P2P_RSP_ACTION_FRAME_PFN)(P2P_INFO *, const N63C_SEND_ACTION_CTX *, u4Byte, u1Byte *); - - P2P_INFO *info = GET_P2P_INFO(pAdapter); - N63C_INDIC_RX_P2P_RSP_ACTION_FRAME_PFN pfn = NULL; - u4Byte eid = P2P_EVENT_NONE; - P2P_FRAME_TYPE ft = P2P_FID_MAX; - - RT_GEN_TEMP_BUFFER *pGenBuf = NULL; - FRAME_BUF fbuf; - - P2P_DEV_LIST_ENTRY *dev = NULL; - u4Byte ieOffset = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - BOOLEAN bIndicate = FALSE; - - p2p_DevList_Lock(&info->devList); - - do - { - if(NULL == (pGenBuf = GetGenTempBuffer(pAdapter, GEN_TEMP_BUFFER_SIZE))) - { - RT_TRACE_F(COMP_OID_SET, DBG_SERIOUS, ("[ERROR] Memory allocation failed!\n")); - break; - } - - FrameBuf_Init(GEN_TEMP_BUFFER_SIZE, 0, (u1Byte *)pGenBuf->Buffer.Ptr, &fbuf); - - // get corresp. types - if(N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == ctx->rspType) - { - pfn = N63CIndicateReceivedProvisionDiscoveryResponse; - eid = P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE; - ft = P2P_FID_PD_RSP; - } - else if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == ctx->rspType) - { - pfn = N63CIndicateReceivedGONegotiationResponse; - eid = P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE; - ft = P2P_FID_GO_NEG_RSP; - } - else if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == ctx->rspType) - { - pfn = N63CIndicateReceivedGONegotiationConfirm; - eid = P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM; - ft = P2P_FID_GO_NEG_CONF; - } - else if(N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE == ctx->rspType) - { - pfn = N63CIndicateReceivedInvitationResponse; - eid = P2P_EVENT_RECEIVED_INVITATION_RESPONSE; - ft = P2P_FID_INV_RSP; - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("invalid response type: %u\n", ctx->rspType)); - break; - } - - // get dev - if(NULL == (dev = p2p_DevList_Get(&info->devList, ctx->da, ctx->bGo ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("dev not found\n")); - break; - } - - if(dev->rxFrames[ft]) - { - if(dev->rxFrames[ft]->frameLen < ieOffset + 1) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("invalid received rsp action frame len: %u\n", dev->rxFrames[ft]->frameLen)); - break; - } - - FrameBuf_Add_Data(&fbuf, dev->rxFrames[ft]->frame, dev->rxFrames[ft]->frameLen); - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("no coresp. received rsp action frame, rsp type: %u\n", ft)); - - if(N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE == ctx->rspType) - { - if(!n63c_Construct_FakeInvitationRsp(pAdapter, ctx, dev, &fbuf)) - break; - } - else if(N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == ctx->rspType) - { - if(!n63c_Construct_FakePdRsp(pAdapter, ctx, dev, &fbuf)) - break; - } - else - { - break; - } - } - - bIndicate = TRUE; - }while(FALSE); - - p2p_DevList_Unlock(&info->devList); - - if(bIndicate) - {// to indicate w/o lock acquired - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("to indicate rx action frame with token: %u\n", ctx->token)); - (pfn)(info, ctx, FrameBuf_Length(&fbuf), FrameBuf_MHead(&fbuf)); - } - - if(pGenBuf) - { - ReturnGenTempBuffer(pAdapter, pGenBuf); - } - - FunctionOut(COMP_OID_SET); - - return bIndicate; -} - -static -BOOLEAN -n63c_SendP2pActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - BOOLEAN bHandled = FALSE; - - N63C_SEND_ACTION_CTX *ctx = (N63C_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - do - { - if(OFF_CHNL_TX_STATE_CHNL_HIT == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("on chnl\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("complete\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_FRAME_SENT == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("frame sent\n")); - bHandled = TRUE; - break; - } - }while(FALSE); - - return bHandled; -} - -static -VOID -n63c_SendP2pRspActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - N63C_SEND_ACTION_CTX *ctx = (N63C_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - n63c_SendP2pActionFrameStateCb(req, state, pCtx); - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - n63c_SendP2pActionFrameComplete(pAdapter, ctx); - - // restore Dialog Token in P2PInfo since we are sending - // response action frame, self dialog token shall not be - // modified - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("restore token from %u to %u\n", info->DialogToken, ctx->oldToken)); - info->DialogToken = ctx->oldToken; - } - else if(OFF_CHNL_TX_STATE_PRE_DESTROY == state) - { - if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == ctx->rspType) - { - n63c_IndicateRxP2pRspActionFrame(pAdapter, ctx); - } - - } - else if(OFF_CHNL_TX_STATE_RETRY == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("retry with token: %u, reqType: %u\n", ctx->token, ctx->reqType)); - } - - return; -} - -static -VOID -n63c_SendP2pReqActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - N63C_SEND_ACTION_CTX *ctx = (N63C_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - - n63c_SendP2pActionFrameStateCb(req, state, pCtx); - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - n63c_SendP2pActionFrameComplete(pAdapter, ctx); - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("restore StateBeforeScan to initialized\n")); - info->StateBeforeScan = P2P_STATE_INITIALIZED; - } - else if(OFF_CHNL_TX_STATE_PRE_DESTROY == state) - { - if(N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == ctx->rspType - || N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE == ctx->rspType - ) - { - n63c_IndicateRxP2pRspActionFrame(pAdapter, ctx); - } - - - if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == ctx->rspType) - { - InfoBufLen = 0; - n63c_IndicateRxP2pRspActionFrame(pAdapter, ctx); - if(InfoBufLen) - { - if(NULL == N63C_SendAction_GoNegConfirm(pAdapter, (DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS *)InfoBuf, n63c_SendP2pRspActionFrameStateCb)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("N63C_SendAction_GoNegConfirm failed\n")); - p2p_IndicateActionFrameSendCompleteWithToken(GET_P2P_INFO(pAdapter), P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE, RT_STATUS_FAILURE, NULL, 0, 0); - } - InfoBufLen = 0; - } - } - } - else if(OFF_CHNL_TX_STATE_RETRY == state) - { - u1Byte newToken = 0; - static BOOLEAN bSkip = TRUE; - - newToken = N63C_SendAction_UpdateTxFrameDialogToken(req, pAdapter, ctx->reqType); - - if(pAdapter->bInHctTest) - { - // Not to skip probing under HCT test, because it wastes time - // sending action frame to peer on its Listen Channel when peer - // is not doing extended listen - bSkip = FALSE; - } - - if(bSkip) - { - N63C_SendAction_SkipProbeTemporarilly(req); - } - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("retry with token: %u, reqType: %u, skip probe: %u\n", newToken, ctx->reqType, bSkip)); - - bSkip = !bSkip; - } - - return; -} - -//====================================================================================== -// Put some temp codes for Windows 8 -//====================================================================================== - -VOID -N63CValidateRoleOfWifiDirectPorts( - PADAPTER pAdapter -) -{ - PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - u1Byte uNumberOfDevicePort = 0; - u1Byte uNumberOfGoPort = 0; - u1Byte uNumberOfClientPort = 0; - - while(pTargetAdapter) - { - if(P2P_ENABLED(GET_P2P_INFO(pTargetAdapter))) - { - switch(GET_P2P_INFO(pTargetAdapter)->Role) - { - - case P2P_DEVICE: uNumberOfDevicePort++; break; - case P2P_CLIENT: uNumberOfClientPort++; break; - case P2P_GO: uNumberOfGoPort++; break; - default: - break; - } - } - - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - - if(uNumberOfDevicePort > 2) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET | COMP_P2P), DBG_SERIOUS, - ("Wifi-Direct Port Failure: %s: uNumberOfDevicePort > 2\n", __FUNCTION__) - ); - } - - if(uNumberOfGoPort > 2) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET | COMP_P2P), DBG_SERIOUS, - ("Wifi-Direct Port Failure: %s: uNumberOfGoPort > 2)\n", __FUNCTION__) - ); - } - - if(uNumberOfClientPort > 1) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET | COMP_P2P), DBG_SERIOUS, - ("Wifi-Direct Port Failure: %s: uNumberOfClientPort > 1\n", __FUNCTION__) - ); - } -} - -VOID -N63CResetNetworkListOffload( - PADAPTER pAdapter -) -{ - PRT_NLO_INFO pNLOInfo = &(pAdapter->MgntInfo.NLOInfo); - - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, ("--- Reset Network List Offload --- \n")); - - pNLOInfo->NumDot11OffloadNetwork = 0; - pNLOInfo->FastScanIterations = 0; - pNLOInfo->FastScanPeriod = 0; - pNLOInfo->SlowScanPeriod = 0; -} - - -NDIS_STATUS -N63CResetWifiDirectPorts( - PADAPTER pAdapter, - P2P_ROLE PortRole, - RESET_LEVEL ResetLevel -) -{ - PRT_NDIS62_COMMON pNdis62Common = pAdapter->pNdis62Common; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PP2P_INFO pP2PInfo = (PP2P_INFO)(pAdapter->MgntInfo.pP2PInfo); - PP2P_INFO pP2PDevInfo = NULL; - u1Byte uListenChannel = 0; - u1Byte uOpChannel = 0; - u4Byte BoostInitGainValue = 0; - u1Byte uAutoChnl = P2P_DEFAULT_OPERATING_CHANNEL; - - PADAPTER pDevicePort = NULL; - - FunctionIn(COMP_P2P); - -#if (MULTICHANNEL_SUPPORT == 1) - MultichannelHandlePacketDuringScan(pAdapter,FALSE); -#endif - - // Set the default OpChannel and ListenChannel ---------------------------------------------------------------------------- - uListenChannel = P2P_DEFAULT_LISTEN_CHANNEL; - uOpChannel = uListenChannel; - - - if(pDefaultAdapter->MgntInfo.WFDOpChannel !=0) - uOpChannel = pDefaultAdapter->MgntInfo.WFDOpChannel; - else if(MgntLinkStatusQuery(pDefaultAdapter) == RT_MEDIA_CONNECT) - { - uOpChannel = RT_GetChannelNumber(pDefaultAdapter); - RT_TRACE(COMP_P2P, DBG_LOUD, ("--- Use Default Port Channel: OpChannel %d ---\n", uOpChannel)); - } - else if(GetFirstGOPort(pAdapter)) - { - pP2PDevInfo = GET_P2P_INFO(GetFirstGOPort(pAdapter)); - uOpChannel = pP2PDevInfo->OperatingChannel; - } - else if(GetFirstClientPort(pAdapter)) - { - pP2PDevInfo = GET_P2P_INFO(GetFirstClientPort(pAdapter)); - uOpChannel = pP2PDevInfo->OperatingChannel; - } - else if(GetFirstDevicePort(pAdapter)) - { - pP2PDevInfo = GET_P2P_INFO(GetFirstDevicePort(pAdapter)); - uOpChannel = pP2PDevInfo->OperatingChannel; - } - else if(PortRole == P2P_DEVICE) - { -#if (AUTO_CHNL_SEL_NHM ==1) - if(IS_AUTO_CHNL_SUPPORT(pAdapter)) - { - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_AUTO_CHNL_SEL, (pu1Byte)(&uAutoChnl)); - uOpChannel = P2PIsSocialChannel(uAutoChnl)? uAutoChnl : P2P_DEFAULT_OPERATING_CHANNEL; - pDefaultAdapter->MgntInfo.AutoChnlSel.AutoChnlNumberSelected= uAutoChnl; - RT_TRACE(COMP_P2P, DBG_LOUD, ("===> [ACS] N63CResetWifiDirectPorts(): uOpChannel(%d)\n", uOpChannel)); - } -#endif - } - - if(P2PIsSocialChannel(uOpChannel)) - { - uListenChannel = uOpChannel; - if(GetFirstDevicePort(pAdapter)) - { - GET_P2P_INFO(GetFirstDevicePort(pAdapter))->ListenChannel = uListenChannel; - } - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Set from Role=%d to Role=%d, listenChnl = %d, OpChnl = %d\n", pP2PInfo->Role, PortRole, uListenChannel, uOpChannel)); - - if(PortRole == P2P_DEVICE) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, ("(Win8 Reset to WFD Device Port)\n")); - - // Win8: Let the device port use the locally-adminitered MAC address ---------------------------------------------- - cpMacAddr(pAdapter->CurrentAddress, pAdapter->PermanentAddress); - pAdapter->CurrentAddress[0] |= BIT1; - RT_PRINT_ADDR((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, "Device Port Address: ", pAdapter->CurrentAddress); - // ------------------------------------------------------------------------------------------------------- - - pNdis62Common->CurrentOpState = INIT_STATE; - - if(ResetLevel == RESET_LEVEL_FULL) - { - MgntActSet_ApType(pAdapter, FALSE); - N62CResetAPVariables(pAdapter, FALSE); - } - - // Stop the Device Port mode: Last 3 parameters are don't care - MgntActSet_P2PMode(pAdapter, FALSE, FALSE, 0, 0, 0); - // Start the Device Port mode - MgntActSet_P2PMode(pAdapter, TRUE, FALSE, uListenChannel, uOpChannel, P2P_DEFAULT_GO_INTENT); - - // Win8: Let the device port do not conduct the extended listening. - // + When the OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY is issued, start listening. - pP2PInfo->ExtListenTimingPeriod = 0; - pP2PInfo->ExtListenTimingDuration = 0; - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, ("In Win8, the device port and the extended listening are not started !\n")); - - } - else if(PortRole == P2P_GO || PortRole == P2P_CLIENT) - { - pDevicePort = GetFirstDevicePort(pAdapter); - if(pDevicePort == NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: pDevicePort == NULL \n", __FUNCTION__)); - return NDIS_STATUS_FAILURE; - } - - - // Wifi Direct Role Port is Open -------------------------------------------- - //DM_DIG_WifiDirectBoostStart(GetDefaultAdapter(pAdapter)); - // -------------------------------------------------------------------- - - if(PortRole == P2P_GO) - { - pP2PDevInfo = (PP2P_INFO)(pDevicePort->MgntInfo.pP2PInfo); - - if(pP2PDevInfo != NULL) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET|COMP_P2P), DBG_LOUD, ("(Win8 Reset to WFD Group Owner Port): Device port State(%d)\n", pP2PDevInfo->State)); - - if((pP2PDevInfo->State == P2P_STATE_INVITATION_REQ_SEND) && - (pP2PDevInfo->State != P2P_STATE_INVITATION_RSP_WAIT)) - { - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter)) - { - //: Should we need to resume DIG here? - } - } - } - - - // Reset the AP parameters - pNdis62Common->CurrentOpState = INIT_STATE; - - if(ResetLevel == RESET_LEVEL_FULL) - { - N62CResetAPVariables(pAdapter, TRUE); - } - { - HAL_AP_IBSS_INT_MODE intMode = HAL_AP_IBSS_INT_DISABLE; - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_AP_IBSS_INTERRUPT, (pu1Byte)&intMode); - } - // Restart the Role Port mode: Last 3 parameters are don't care - MgntActSet_P2PMode(pAdapter, FALSE, FALSE, 0, 0, 0); - MgntActSet_P2PMode(pAdapter, TRUE, FALSE, uListenChannel, uOpChannel, P2P_DEFAULT_GO_INTENT); - - pP2PInfo->Role = P2P_GO; - pP2PInfo->State = P2P_STATE_OPERATING; - - // Clause 3.1.4.3: Group Formation bit in the P2P Group Cap shall be set to 1 until Provisioning succeeds. - pP2PInfo->GroupCapability |= gcGroupFormation; - } - else if(PortRole == P2P_CLIENT) - { - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, ("(Win8 Reset to WFD Client Port)\n")); - - // Reset the STA parameters - pNdis62Common->CurrentOpState=INIT_STATE; - - if(ResetLevel == RESET_LEVEL_FULL) - { - MgntActSet_ApType(pAdapter, FALSE); - N62CResetAPVariables(pAdapter, FALSE); - } - - // Restart the Role Port mode: Last 3 parameters are don't care - MgntActSet_P2PMode(pAdapter, FALSE, FALSE, 0, 0, 0); - MgntActSet_P2PMode(pAdapter, TRUE, FALSE, uListenChannel, uOpChannel, P2P_DEFAULT_GO_INTENT); - - pP2PInfo->Role = P2P_CLIENT; - pP2PInfo->State = P2P_STATE_OPERATING; - } - - // Copy the scan list from the device port - // Prefast warning C28182: Dereferencing NULL pointer. - if (GET_P2P_INFO(pDevicePort) != NULL) - { - P2PScanListCopy( - pP2PInfo->ScanList, - &pP2PInfo->ScanListSize, - GET_P2P_INFO(pDevicePort)->ScanList, - GET_P2P_INFO(pDevicePort)->ScanListSize - ); - } - - } - else - { - RT_TRACE_F((COMP_OID_QUERY | COMP_OID_SET | COMP_P2P), DBG_LOUD, ("[WARNING] Unknown P2P_ROLE: PortRole: %d\n", PortRole)); - return NDIS_STATUS_FAILURE; - } - - FunctionOut(COMP_P2P); - - return NDIS_STATUS_SUCCESS; -} - -//====================================================================================== -// Private Functions -//====================================================================================== - -// Compute the required memory for representing the device list in the form of DOT11_WFD_DEVICE_ENTRY -static u4Byte -N63CComputeRequiredDeviceEntriesSize( - IN PP2P_INFO pP2PInfo -) -{ - u4Byte i = 0; - u4Byte requiredMemory = 0; - - // Skip the MAC header and the first three fields (non-IE) in the beacon and the probe response - u4Byte skippedBytes = sMacHdrLng + 12; - - for(i = 0; i < pP2PInfo->DeviceListForQuery.uNumberOfDevices; i++) - { - requiredMemory += sizeof(DOT11_WFD_DEVICE_ENTRY); // Entry Size - - // Only consider the valid packet : Beacon - if(pP2PInfo->DeviceListForQuery.DeviceEntry[i].BeaconPacket.Length >= skippedBytes) - { - requiredMemory += pP2PInfo->DeviceListForQuery.DeviceEntry[i].BeaconPacket.Length - skippedBytes; - } - - // Only consider the valid packet : ProbeResponse - if(pP2PInfo->DeviceListForQuery.DeviceEntry[i].ProbeResponsePacket.Length >= skippedBytes) - { - requiredMemory += pP2PInfo->DeviceListForQuery.DeviceEntry[i].ProbeResponsePacket.Length - skippedBytes; - } - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Required Memory Size %d\n", __FUNCTION__, requiredMemory)); - - return requiredMemory; -} - -static VOID -N63CConstruct_DOT11_WFD_DEVICE_ENTRY( - IN PP2P_INFO pP2PInfo, - IN PP2P_DEVICE_LIST_ENTRY p2pEntry, - OUT PDOT11_WFD_DEVICE_ENTRY wfdEntry, - OUT pu4Byte bytesWritten -) -{ -#if 0 - typedef struct _DOT11_WFD_DEVICE_ENTRY - { - ULONG uPhyId; - DOT11_BSS_ENTRY_PHY_SPECIFIC_INFO PhySpecificInfo; - DOT11_MAC_ADDRESS dot11BSSID; - DOT11_BSS_TYPE dot11BSSType; - DOT11_MAC_ADDRESS TransmitterAddress; - LONG lRSSI; - ULONG uLinkQuality; - USHORT usBeaconPeriod; - ULONGLONG ullTimestamp; - ULONGLONG ullBeaconHostTimestamp; - ULONGLONG ullProbeResponseHostTimestamp; - USHORT usCapabilityInformation; - ULONG uBeaconIEsOffset; - ULONG uBeaconIEsLength; // Can be 0 - ULONG uProbeResponseIEsOffset; - ULONG uProbeResponseIEsLength; // Can be 0 - } DOT11_WFD_DEVICE_ENTRY, *PDOT11_WFD_DEVICE_ENTRY; -#endif - - pu1Byte header = NULL; - PADAPTER pAdapter = pP2PInfo->pAdapter; - - // Skip the MAC header and the first three fields (non-IE) in the beacon and the probe response - u4Byte skippedBytes = sMacHdrLng + 12; - - // Select the most recent packet - if(p2pEntry->ProbeResponseHostTimestamp > p2pEntry->BeaconHostTimestamp) - { - header = p2pEntry->ProbeResponsePacket.Buffer; - } - else - { - header = p2pEntry->BeaconPacket.Buffer; - } - - if(header == NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s() : Not a Good Header!\n", __FUNCTION__)); - return; - } - - // Clear the structure - PlatformZeroMemory(wfdEntry, sizeof(DOT11_WFD_DEVICE_ENTRY)); - - wfdEntry->uPhyId = N6CQuery_DOT11_OPERATING_PHYID(GetDefaultAdapter(pP2PInfo->pAdapter)); - - wfdEntry->PhySpecificInfo.uChCenterFrequency = MgntGetChannelFrequency(p2pEntry->ChannelNumber); - - GET_80211_HDR_ADDRESS3(header, wfdEntry->dot11BSSID); - - wfdEntry->dot11BSSType = dot11_BSS_type_infrastructure; - - GET_80211_HDR_ADDRESS2(header, wfdEntry->TransmitterAddress); - - wfdEntry->lRSSI = ( (p2pEntry->SignalStrength+1)>>1 ) - 95; // Trick from N6CTranslateRtBssToDot11Bss - - wfdEntry->uLinkQuality = p2pEntry->SignalStrength; // Trick from N6CTranslateRtBssToDot11Bss - - wfdEntry->usBeaconPeriod = GET_BEACON_PROBE_RSP_BEACON_INTERVAL(header); - - wfdEntry->ullTimestamp = ((u8Byte) GET_BEACON_PROBE_RSP_TIME_STAMP_HIGH(header) << 32) + GET_BEACON_PROBE_RSP_TIME_STAMP_LOW(header); - - wfdEntry->usCapabilityInformation = GET_BEACON_PROBE_RSP_CAPABILITY_INFO(header); - - - // - // - // We have to take care of ullBeaconHostTimestamp and ullProbeResponseHostTimestamp in DOT11_WFD_DEVICE_ENTRY structure - // for OID_DOT11_WFD_ENUM_DEVICE_LIST request. Micfosoft would check this indicated probe response/beacon timestamp from ver9477. - // The unit in ullBeaconHostTimestamp and ullProbeResponseHostTimestamp must be 100-nanosecond, 2013.08.21. - // - - // Beacon Related - - if(RUNTIME_OS_WIN_FROM_WINBLUE(pAdapter)) - wfdEntry->ullBeaconHostTimestamp = p2pEntry->BeaconHostTimestamp*10;// Convert to 100-nanosecond units - else - wfdEntry->ullBeaconHostTimestamp = p2pEntry->BeaconHostTimestamp; - wfdEntry->uBeaconIEsOffset = sizeof(DOT11_WFD_DEVICE_ENTRY); - - // Only consider the valid packet - if(p2pEntry->BeaconPacket.Length >= skippedBytes) - { - wfdEntry->uBeaconIEsLength = p2pEntry->BeaconPacket.Length - skippedBytes; - - PlatformMoveMemory( - (pu1Byte) wfdEntry + wfdEntry->uBeaconIEsOffset, - (pu1Byte) p2pEntry->BeaconPacket.Buffer + skippedBytes, - wfdEntry->uBeaconIEsLength - ); - } - else - wfdEntry->uBeaconIEsOffset = 0; - - // Probe Response Related - - if(RUNTIME_OS_WIN_FROM_WINBLUE(pAdapter)) - wfdEntry->ullProbeResponseHostTimestamp = p2pEntry->ProbeResponseHostTimestamp*10;// Convert to 100-nanosecond units - else - wfdEntry->ullProbeResponseHostTimestamp = p2pEntry->ProbeResponseHostTimestamp; - wfdEntry->uProbeResponseIEsOffset = sizeof(DOT11_WFD_DEVICE_ENTRY) + wfdEntry->uBeaconIEsLength; - - // Only consider the valid packet - if(p2pEntry->ProbeResponsePacket.Length >= skippedBytes) - { - wfdEntry->uProbeResponseIEsLength =p2pEntry->ProbeResponsePacket.Length - skippedBytes; - - PlatformMoveMemory( - (pu1Byte) wfdEntry + wfdEntry->uProbeResponseIEsOffset, - (pu1Byte) p2pEntry->ProbeResponsePacket.Buffer + skippedBytes, - wfdEntry->uProbeResponseIEsLength - ); - - } - else - wfdEntry->uProbeResponseIEsOffset = 0; - - // Return the size of the total DOT11_WFD_DEVICE_ENTRY - *bytesWritten = sizeof(DOT11_WFD_DEVICE_ENTRY) + wfdEntry->uBeaconIEsLength + wfdEntry->uProbeResponseIEsLength; - -} - - -static VOID -DumpN63CConstruct_DOT11_WFD_DEVICE_ENTRY( - PDOT11_WFD_DEVICE_ENTRY wfdEntry, - u4Byte length -) -{ - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "WFD_DEVICE_ENTRY:===========================================\n", - wfdEntry, sizeof(DOT11_WFD_DEVICE_ENTRY) - ); - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "wfdEntry->dot11BSSID:", wfdEntry->dot11BSSID); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "wfdEntry->TransmitterAddress:", wfdEntry->TransmitterAddress); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("(wfdEntry->uBeaconIEsOffset, wfdEntry->uBeaconIEsLength) = (0x%X, 0x%X)\n", wfdEntry->uBeaconIEsOffset, wfdEntry->uBeaconIEsLength)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Beacon IE:-----------\n", ((pu1Byte)wfdEntry) + wfdEntry->uBeaconIEsOffset, wfdEntry->uBeaconIEsLength); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("(wfdEntry->uProbeResponseIEsOffset, wfdEntry->uProbeResponseIEsLength) = (0x%X, 0x%X)\n", wfdEntry->uProbeResponseIEsOffset, wfdEntry->uProbeResponseIEsLength)); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ProbeResponse IE:-----------\n", ((pu1Byte)wfdEntry) + wfdEntry->uProbeResponseIEsOffset, wfdEntry->uProbeResponseIEsLength); -} - - -static VOID -N63CIndicateDeviceDiscoveryComplete( - PP2P_INFO pP2PInfo -) -{ - -#if 0 - #define DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS_REVISION_1 1 - #define DOT11_WFD_DISCOVER_COMPLETE_MAX_LIST_SIZE 128 - - typedef struct _DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - NDIS_STATUS Status; - ULONG uNumOfEntries; - ULONG uTotalNumOfEntries; - ULONG uListOffset; - ULONG uListLength; - } DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS, * PDOT11_WFD_DISCOVER_COMPLETE_PARAMETERS; -#endif - - u4Byte i = 0; - u4Byte bytesWritten = 0; - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_WFD_DISCOVER_COMPLETE_PARAMETERS pParameters = NULL; - PDOT11_WFD_DEVICE_ENTRY wfdEntry = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - - // Compute the requried memory length ------------------------------------------------------------------ - mbObject.Length += sizeof(DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS); // Parameter Structure Size - mbObject.Length += N63CComputeRequiredDeviceEntriesSize(pP2PInfo); - //------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_WFD_DISCOVER_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS) - ); - - pParameters->Status = NDIS_STATUS_SUCCESS; - pParameters->uNumOfEntries = pP2PInfo->DeviceListForQuery.uNumberOfDevices; - pParameters->uTotalNumOfEntries = pP2PInfo->DeviceListForQuery.uNumberOfDevices; - - pParameters->uListOffset = sizeof(DOT11_WFD_DISCOVER_COMPLETE_PARAMETERS); - - bytesWritten = 0; - wfdEntry = (PDOT11_WFD_DEVICE_ENTRY)((pu1Byte) mbObject.Buffer + pParameters->uListOffset); - - for(i = 0; i < pP2PInfo->DeviceListForQuery.uNumberOfDevices; i++) - { - wfdEntry = (PDOT11_WFD_DEVICE_ENTRY)((pu1Byte) wfdEntry + bytesWritten); - - N63CConstruct_DOT11_WFD_DEVICE_ENTRY( - pP2PInfo, - &pP2PInfo->DeviceListForQuery.DeviceEntry[i], - wfdEntry, - &bytesWritten - ); - - // This one may have crashed some mark this temporailiy - //DumpN63CConstruct_DOT11_WFD_DEVICE_ENTRY( - // wfdEntry, - // bytesWritten - // ); - - pParameters->uListLength += bytesWritten; - } - - // Assertion -------------------------------------------------------------------------------------------- - if(pParameters->uListLength != N63CComputeRequiredDeviceEntriesSize(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: N63CComputeRequiredMemoryForDeviceList value mismatch!\n", __FUNCTION__)); - } - //----------------------------------------------------------------------------------------------------- - - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_DISCOVER_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - - //DumpDOT11_WFD_DISCOVER_COMPLETE_PARAMETERS(mbObject); - - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateInvitationRequestSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_MAC_ADDRESS ReceiverAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS, * PDOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS; - #endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS) - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - GET_80211_HDR_ADDRESS1(header, pParameters->PeerDeviceAddress); - - GET_80211_HDR_ADDRESS1(header, pParameters->ReceiverAddress); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_INVITATION_REQUEST_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_INVITATION_REQUEST_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "mbObject.Buffer\n", mbObject.Buffer, mbObject.Length); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - -static VOID -N63CIndicateReceivedInvitationRequest( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS TransmitterDeviceAddress; - DOT11_MAC_ADDRESS BSSID; - DOT11_DIALOG_TOKEN DialogToken; - PVOID RequestContext; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS, * PDOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS) - ); - - header = pEventData->Packet.Buffer; - - GET_80211_HDR_ADDRESS2(header, pParameters->TransmitterDeviceAddress); - - GET_80211_HDR_ADDRESS3(header, pParameters->BSSID); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->RequestContext = NULL; - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_INVITATION_REQUEST_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_INVITATION_REQUEST, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateInvitationResponseSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS ReceiverDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS, * PDOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS) - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - - GET_80211_HDR_ADDRESS1(header, pParameters->ReceiverDeviceAddress); - - pParameters->DialogToken = pP2PInfo->ProvisionResponseDialogToken; - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_INVITATION_RESPONSE_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_INVITATION_RESPONSE_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateReceivedInvitationResponse( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf -) -{ -#if 0 - #define DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS TransmitterDeviceAddress; - DOT11_MAC_ADDRESS BSSID; - DOT11_DIALOG_TOKEN DialogToken; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS, * PDOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - FunctionIn(COMP_OID_SET); - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(frameLen >= skippedBytes) - { - mbObject.Length += frameLen - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS) - ); - - header = frameBuf; - - GET_80211_HDR_ADDRESS2(header, pParameters->TransmitterDeviceAddress); - - GET_80211_HDR_ADDRESS3(header, pParameters->BSSID); - - pParameters->DialogToken = ctx->token; - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_INVITATION_RESPONSE_PARAMETERS); - - // Only the valid packet - if(frameLen >= skippedBytes) - { - pParameters->uIEsLength = frameLen - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_INVITATION_RESPONSE, - mbObject.Buffer, - mbObject.Length - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "mbObject.Buffer\n", mbObject.Buffer, mbObject.Length); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - - FunctionOut(COMP_OID_SET); - -} - -static VOID -N63CIndicateProvisionDiscoveryRequestSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - - - typedef struct _DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_MAC_ADDRESS ReceiverAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS, * PDOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS; - #endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += DOT11_SIZEOF_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1; // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!: %d\n", __FUNCTION__, mbObject.Length)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, DOT11_SIZEOF_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1, - DOT11_SIZEOF_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1 - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - GET_80211_HDR_ADDRESS1(header, pParameters->PeerDeviceAddress); - - GET_80211_HDR_ADDRESS1(header, pParameters->ReceiverAddress); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "mbObject.Buffer\n", mbObject.Buffer, mbObject.Length); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateReceivedProvisionDiscoveryRequest( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS TransmitterDeviceAddress; - DOT11_MAC_ADDRESS BSSID; - DOT11_DIALOG_TOKEN DialogToken; - PVOID RequestContext; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS, * PDOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS) - ); - - header = pEventData->Packet.Buffer; - - GET_80211_HDR_ADDRESS2(header, pParameters->TransmitterDeviceAddress); - - GET_80211_HDR_ADDRESS3(header, pParameters->BSSID); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->RequestContext = NULL; - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_REQUEST_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_PROVISION_DISCOVERY_REQUEST, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - -static VOID -N63CIndicateProvisionDiscoveryResponseSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS ReceiverDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS, * PDOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS) - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - - GET_80211_HDR_ADDRESS1(header, pParameters->ReceiverDeviceAddress); - - pParameters->DialogToken = pP2PInfo->ProvisionResponseDialogToken; - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - -static VOID -N63CIndicateReceivedProvisionDiscoveryResponse( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf - ) -{ -#if 0 - #define DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS TransmitterDeviceAddress; - DOT11_MAC_ADDRESS BSSID; - DOT11_DIALOG_TOKEN DialogToken; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS, * PDOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - FunctionIn(COMP_OID_SET); - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(frameLen >= skippedBytes) - { - mbObject.Length += frameLen - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS) - ); - - header = frameBuf; - - GET_80211_HDR_ADDRESS2(header, pParameters->TransmitterDeviceAddress); - - GET_80211_HDR_ADDRESS3(header, pParameters->BSSID); - - pParameters->DialogToken = ctx->token; - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_PROVISION_DISCOVERY_RESPONSE_PARAMETERS); - - // Only the valid packet - if(frameLen >= skippedBytes) - { - pParameters->uIEsLength = frameLen - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_PROVISION_DISCOVERY_RESPONSE, - mbObject.Buffer, - mbObject.Length - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "mbObject.Buffer\n", mbObject.Buffer, mbObject.Length); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - - FunctionOut(COMP_OID_SET); - -} - - -static VOID -N63CIndicateNegotiationRequestSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS, * PDOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successful ------------------------------------------------------------------------ - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!: %u\n", __FUNCTION__, mbObject.Length)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS) - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - - GET_80211_HDR_ADDRESS1(header, pParameters->PeerDeviceAddress); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_GO_NEGOTIATION_REQUEST_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_GO_NEGOTIATION_REQUEST_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - -static VOID -N63CIndicateReceivedGONegotiationRequest( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - PVOID RequestContext; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS, * PDOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS) - ); - - header = pEventData->Packet.Buffer; - - GET_80211_HDR_ADDRESS2(header, pParameters->PeerDeviceAddress); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_GO_NEGOTIATION_REQUEST_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_GO_NEGOTIATION_REQUEST, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateNegotiationResponseSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS, * PDOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successful ------------------------------------------------------------------------ - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS) - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - - GET_80211_HDR_ADDRESS1(header, pParameters->PeerDeviceAddress); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateReceivedGONegotiationResponse( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf -) -{ -#if 0 - #define DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - PVOID ResponseContext; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS, * PDOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - FunctionIn(COMP_OID_SET); - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(frameLen >= skippedBytes) - { - mbObject.Length += frameLen - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successfull ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS) - ); - - header = frameBuf; - - GET_80211_HDR_ADDRESS2(header, pParameters->PeerDeviceAddress); - - pParameters->DialogToken = ctx->token; - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_GO_NEGOTIATION_RESPONSE_PARAMETERS); - - // Only the valid packet - if(frameLen >= skippedBytes) - { - pParameters->uIEsLength = frameLen - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_GO_NEGOTIATION_RESPONSE, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - - FunctionOut(COMP_OID_SET); - -} - - -static VOID -N63CIndicateNegotiationConfirmSendComplete( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ -#if 0 - #define DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - NDIS_STATUS Status; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS, * PDOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - PP2P_EVENT_DATA pEventData = (PP2P_EVENT_DATA) pInformation->Buffer; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - mbObject.Length += pEventData->Packet.Length - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successful ------------------------------------------------------------------------ - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS_REVISION_1, - sizeof(DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS) - ); - - if(pEventData->rtStatus == RT_STATUS_FAILURE) - { - pParameters->Status = NDIS_STATUS_FAILURE; - } - else - { - header = pEventData->Packet.Buffer; - - - GET_80211_HDR_ADDRESS1(header, pParameters->PeerDeviceAddress); - - pParameters->DialogToken = *(header + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - pParameters->Status = NDIS_STATUS_SUCCESS; - - pParameters->uIEsOffset = sizeof(DOT11_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE_PARAMETERS); - - // Only the valid packet - if(pEventData->Packet.Length >= skippedBytes) - { - pParameters->uIEsLength = pEventData->Packet.Length - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - } - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_GO_NEGOTIATION_CONFIRMATION_SEND_COMPLETE, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - - -static VOID -N63CIndicateReceivedGONegotiationConfirm( - PP2P_INFO pP2PInfo, - const N63C_SEND_ACTION_CTX *ctx, - u4Byte frameLen, - u1Byte *frameBuf -) -{ -#if 0 - #define DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS_REVISION_1 1 - typedef struct _DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS - { - NDIS_OBJECT_HEADER Header; - DOT11_MAC_ADDRESS PeerDeviceAddress; - DOT11_DIALOG_TOKEN DialogToken; - ULONG uIEsOffset; - ULONG uIEsLength; - } DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS, * PDOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS; -#endif - - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - pu1Byte header = NULL; - - // Skip the mac header (24) and the fields from Category to Dialog Token (8) - u2Byte skippedBytes = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - FunctionIn(COMP_OID_SET); - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS); // Parameter Structure Size - - // + Only the valid packet - if(frameLen >= skippedBytes) - { - mbObject.Length += frameLen - skippedBytes; - } - //---------------------------------------------------------------------------------------------------------- - - // This must be successful ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - pParameters->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS_REVISION_1, - sizeof(DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS) - ); - - header = frameBuf; - - GET_80211_HDR_ADDRESS2(header, pParameters->PeerDeviceAddress); - - pParameters->DialogToken = ctx->token; - - pParameters->uIEsOffset = sizeof(DOT11_RECEIVED_GO_NEGOTIATION_CONFIRMATION_PARAMETERS); - - // Only the valid packet - if(frameLen >= skippedBytes) - { - pParameters->uIEsLength = frameLen - skippedBytes; - } - - PlatformMoveMemory( - (pu1Byte) pParameters + pParameters->uIEsOffset, - header + skippedBytes, - pParameters->uIEsLength - ); - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_RECEIVED_GO_NEGOTIATION_CONFIRMATION, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - - FunctionOut(COMP_OID_SET); - -} - -static VOID -N63CIndicateGOOperatingChannel( - PP2P_INFO pP2PInfo, - PMEMORY_BUFFER pInformation -) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - PDOT11_WFD_CHANNEL pParameters = NULL; - MEMORY_BUFFER mbObject = {NULL, 0}; - - // Compute the requried memory length -------------------------------------------------------------------------- - mbObject.Length += sizeof(DOT11_WFD_CHANNEL); // Parameter Structure Size - - // This must be successful ----------------------------------------------------------------------- - rtStatus = PlatformAllocateMemory(pP2PInfo->pAdapter, &mbObject.Buffer, mbObject.Length); - if(rtStatus == RT_STATUS_FAILURE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Memory Allocation Failure!\n", __FUNCTION__)); - return; - } - //-------------------------------------------------------------------------------------------- - - pParameters = (PDOT11_WFD_CHANNEL) mbObject.Buffer; - PlatformZeroMemory(pParameters, sizeof(DOT11_WFD_CHANNEL)); - - PlatformMoveMemory((pu1Byte)pParameters->CountryRegionString, pP2PInfo->CountryString, 3); - pParameters->OperatingClass = pP2PInfo->RegulatoryClass; - pParameters->ChannelNumber = pP2PInfo->OperatingChannel; - - // Indicate the status to the OS ------------------------------------------------------------- - N6IndicateStatus( - pP2PInfo->pAdapter, - NDIS_STATUS_DOT11_WFD_GROUP_OPERATING_CHANNEL, - mbObject.Buffer, - mbObject.Length - ); - //--------------------------------------------------------------------------------------- - - PlatformFreeMemory(mbObject.Buffer, mbObject.Length); - -} - -static NDIS_STATUS -N63CValidateOIDCorrectnessGetReturnStatus( - OID_CORRECT_STATE correctState, - MP_PORT_TYPE portType, - P2P_ROLE portRole, - MP_PORT_OP_STATE portState -) -{ -// -// Return Value: -// NDIS_STATUS_INVALID_STATE: That port can process that OID in other state -// NDIS_STATUS_SUCCESS: Correct port in the correct state -// - - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_STATE; - - if(portType == EXT_P2P_DEVICE_PORT) - { - if(portState == INIT_STATE) - { - if(correctState & STATE_DEVICE_INIT) - { - ndisStatus = NDIS_STATUS_SUCCESS; - } - } - } - else if(portType == EXT_P2P_ROLE_PORT) - { - if(portRole == P2P_GO) - { - if(portState == INIT_STATE) - { - if(correctState & STATE_GO_INIT) - { - ndisStatus = NDIS_STATUS_SUCCESS; - } - else if(correctState & STATE_GO_OP) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - } - } - else if(portState == OP_STATE) - { - if(correctState & STATE_GO_OP) - { - ndisStatus = NDIS_STATUS_SUCCESS; - } - else if(correctState & STATE_GO_INIT) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - } - } - } - else if(portRole == P2P_CLIENT) - { - if(portState == INIT_STATE) - { - if(correctState & STATE_CLIENT_INIT) - { - ndisStatus = NDIS_STATUS_SUCCESS; - } - else if(correctState & STATE_CLIENT_OP) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - } - } - else if(portState == OP_STATE) - { - if(correctState & STATE_CLIENT_OP) - { - ndisStatus = NDIS_STATUS_SUCCESS; - } - else if(correctState & STATE_CLIENT_INIT) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - } - } - } - } - - return ndisStatus; -} - -static NDIS_STATUS -N63CValidateQueryOIDCorrectness( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_STATE; - NDIS_OID oid = NdisRequest->DATA.QUERY_INFORMATION.Oid; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - MP_PORT_TYPE portType = pTargetAdapter->pNdis62Common->PortType; - P2P_ROLE portRole = pP2PInfo->Role; - MP_PORT_OP_STATE portState = pTargetAdapter->pNdis62Common->CurrentOpState; - - switch (oid) - { - case OID_DOT11_WFD_ENUM_DEVICE_LIST: - case OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY: - case OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL: - case OID_DOT11_WFD_GET_DIALOG_TOKEN: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_DEVICE_INIT, - portType, - portRole, - portState - ); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - return ndisStatus; -} - -static NDIS_STATUS -N63CValidateSetOIDCorrectness( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_STATE; - NDIS_OID oid = NdisRequest->DATA.QUERY_INFORMATION.Oid; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - MP_PORT_TYPE portType = pTargetAdapter->pNdis62Common->PortType; - P2P_ROLE portRole = pP2PInfo->Role; - MP_PORT_OP_STATE portState = pTargetAdapter->pNdis62Common->CurrentOpState; - - switch (oid) - { - case OID_DOT11_WFD_DEVICE_CAPABILITY: - case OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST: - case OID_DOT11_WFD_ADDITIONAL_IE: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_DEVICE_INIT | STATE_GO_INIT | STATE_GO_OP | STATE_CLIENT_INIT | STATE_CLIENT_OP, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_GROUP_OWNER_CAPABILITY: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_GO_INIT | STATE_GO_OP | STATE_DEVICE_INIT, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_DEVICE_INFO: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_DEVICE_INIT | STATE_GO_INIT | STATE_CLIENT_INIT, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_DISCOVER_REQUEST: - case OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY: - case OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL: - case OID_DOT11_WFD_FLUSH_DEVICE_LIST: - case OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST: - case OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE: - case OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION: - case OID_DOT11_WFD_SEND_INVITATION_REQUEST: - case OID_DOT11_WFD_SEND_INVITATION_RESPONSE: - case OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST: - case OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE: - case OID_DOT11_WFD_STOP_DISCOVERY: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_DEVICE_INIT, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_DESIRED_GROUP_ID: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_GO_INIT | STATE_CLIENT_INIT, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_START_GO_REQUEST: - case OID_DOT11_WFD_GROUP_START_PARAMETERS: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_GO_INIT, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST: - case OID_DOT11_WFD_GROUP_JOIN_PARAMETERS: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_CLIENT_INIT, - portType, - portRole, - portState - ); - break; - - case OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST: - ndisStatus = N63CValidateOIDCorrectnessGetReturnStatus( - STATE_CLIENT_OP, - portType, - portRole, - portState - ); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - return ndisStatus; -} - -static NDIS_STATUS -N63CValidateMethodOIDCorrectness( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - // Currently, the driver does not accept the query call based on the Microsoft Wi-Fi Direct Spec v1.4 - UNREFERENCED_PARAMETER(pAdapter); - UNREFERENCED_PARAMETER(NdisRequest); - - return NDIS_STATUS_NOT_SUPPORTED; -} - -// Use this function to check the correctness of each OID issue based on the Mircosoft Wi-Fi Direct Spec v1.1 -static NDIS_STATUS -N63CValidateOIDCorrectness( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_STATE; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - MP_PORT_TYPE portType = pTargetAdapter->pNdis62Common->PortType; - P2P_ROLE portRole = pP2PInfo->Role; - MP_PORT_OP_STATE portState = pTargetAdapter->pNdis62Common->CurrentOpState; - - RT_TRACE(COMP_OID_SET | COMP_OID_QUERY | COMP_P2P, DBG_LOUD, - ("MP_PORT_TYPE: %d, P2P_ROLE: %d, MP_PORT_OP_STATE: %d\n", portType, portRole, portState)); - - do - { - // Currently, only handle these OIDs in the Wi-Fi Driect ports (Device Port or Role Port) since these ports are the upmost port type - if(portType != EXT_P2P_DEVICE_PORT && portType != EXT_P2P_ROLE_PORT) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63CValidateQueryOIDCorrectness(pAdapter, NdisRequest); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63CValidateSetOIDCorrectness(pAdapter, NdisRequest); - break; - - // Method - case NdisRequestMethod: - ndisStatus = N63CValidateMethodOIDCorrectness(pAdapter, NdisRequest); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - }while(FALSE); - - return ndisStatus; -} - - -// Set operation for OID_DOT11_WFD_DEVICE_CAPABILITY -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_DEVICE_CAPABILITY( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // OS-given structure - PDOT11_WFD_DEVICE_CAPABILITY_CONFIG deviceCapability = - (PDOT11_WFD_DEVICE_CAPABILITY_CONFIG) InformationBuffer; - - #if 0 // Implementation Status - typedef struct _DOT11_WFD_DEVICE_CAPABILITY_CONFIG - { - NDIS_OBJECT_HEADER Header; // SKIP - BOOLEAN bServiceDiscoveryEnabled; // OK - BOOLEAN bClientDiscoverabilityEnabled; // OK - BOOLEAN bConcurrentOperationSupported; // OK - BOOLEAN bInfrastructureManagementEnabled; // OK - BOOLEAN bDeviceLimitReached; // OK - BOOLEAN bInvitationProcedureEnabled; // OK - ULONG WPSVersionsEnabled; // TODO - } DOT11_WFD_DEVICE_CAPABILITY_CONFIG, * PDOT11_WFD_DEVICE_CAPABILITY_CONFIG; - #endif - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // Set the device capability - pP2PInfo->DeviceCapability = - 0x00 | - (deviceCapability->bServiceDiscoveryEnabled ? dcServiceDiscovery : 0) | - (deviceCapability->bClientDiscoverabilityEnabled ? dcP2PClientDiscoverability : 0) | - (deviceCapability->bConcurrentOperationSupported ? dcConcurrentOperation : 0) | - (deviceCapability->bInfrastructureManagementEnabled ? dcP2PInfrastructureManaged : 0) | - (deviceCapability->bDeviceLimitReached ? dcP2PDeviceLimit : 0) | - (deviceCapability->bInvitationProcedureEnabled ? dcP2PInvitationProcedure : 0) ; - - - // Currently, do not know how to implement this ------- - // Represent the WPS versions that are currently enabled for the Wi-Fi Direct Device - RT_TRACE(COMP_P2P, DBG_LOUD, ("deviceCapability->WPSVersionsEnabled: %d\n", deviceCapability->WPSVersionsEnabled)); - - #if 0 // Possible Solution - Currently, this may be ignored since our driver does not necessarily process the WPS IE. - #endif - // --------------------------------------------- - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_GROUP_OWNER_CAPABILITY -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - P2P_ROLE portRole = pP2PInfo->Role; - - // OS-given structure - PDOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG groupCapability = - (PDOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG) InformationBuffer; - - #if 0 // Implementation Status - typedef struct _DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG - { - NDIS_OBJECT_HEADER Header; // SKIP - BOOLEAN bPersistentGroupEnabled; // OK - BOOLEAN bIntraBSSDistributionSupported; // OK - BOOLEAN bCrossConnectionSupported; // OK - BOOLEAN bPersistentReconnectSupported; // OK - BOOLEAN bGroupFormationEnabled; // OK - ULONG uMaximumGroupLimit; // TODO - } DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG, *PDOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG; - #endif - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // Set the group capability - pP2PInfo->GroupCapability = - 0x00 | - (portRole == P2P_GO ? gcP2PGroupOwner : 0) | - (groupCapability->bPersistentGroupEnabled ? gcPersistentP2PGroup : 0) | - (P2PClientInfoGetCount(pP2PInfo) >= P2P_MAX_P2P_CLIENT ? gcP2PGroupLimit : 0) | - (groupCapability->bIntraBSSDistributionSupported ? gcIntraBSSDistribution : 0) | - (groupCapability->bCrossConnectionSupported ? gcCrossConnection : 0) | - (groupCapability->bPersistentReconnectSupported ? gcPersistentReconnect : 0) | - (groupCapability->bGroupFormationEnabled ? gcGroupFormation : 0) ; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: pP2PInfo->GroupCapability: 0x%0X\n", __FUNCTION__, pP2PInfo->GroupCapability)); - - // Currently, do not know how to implement this ------- - // We use the P2P_MAX_P2P_CLIENT macro, while the OS uses the following statement - groupCapability->uMaximumGroupLimit; - - #if 0 // Possible Solution - Since our driver uses the macro P2P_MAX_P2P_CLIENT to set the maximum value, we may be able to omit this setting. - The default value will be set in the DOT11_WFD_ATTRIBUTES.uGORoleClientTableSize during the initialization. - #endif - - // --------------------------------------------- - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_DEVICE_INFO -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_DEVICE_INFO( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // OS-given structure - PDOT11_WFD_DEVICE_INFO deviceInfo = - (PDOT11_WFD_DEVICE_INFO) InformationBuffer; - - #if 0 // Implementation Status - typedef struct _DOT11_WFD_DEVICE_INFO - { - NDIS_OBJECT_HEADER Header; // SKIP - DOT11_MAC_ADDRESS DeviceAddress; // OK - USHORT ConfigMethods; // OK - DOT11_WFD_DEVICE_TYPE PrimaryDeviceType; // OK - DOT11_WPS_DEVICE_NAME DeviceName; // OK - } DOT11_WFD_DEVICE_INFO, *PDOT11_WFD_DEVICE_INFO; - #endif - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // Start to set the device information - - // Set the device address: Should we set the interface address based on the role of the port? - cpMacAddr(pP2PInfo->DeviceAddress, deviceInfo->DeviceAddress); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Set pP2PInfo->DeviceAddress: ", pP2PInfo->DeviceAddress); - - // Set the config method for WPS - pP2PInfo->WpsAttributes.ConfigMethod = deviceInfo->ConfigMethods; - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->WpsAttributes.ConfigMethod: 0x%X\n", pP2PInfo->WpsAttributes.ConfigMethod)); - - // Set the primary device type for WPS - pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId = deviceInfo->PrimaryDeviceType.CategoryID; - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId : %d\n", pP2PInfo->WpsAttributes.PrimaryDeviceType.CategoryId )); - - pP2PInfo->WpsAttributes.PrimaryDeviceType.SubCategoryId = deviceInfo->PrimaryDeviceType.SubCategoryID; - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->WpsAttributes.PrimaryDeviceType.SubCategoryId: %d\n", pP2PInfo->WpsAttributes.PrimaryDeviceType.SubCategoryId)); - - PlatformMoveMemory( - pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui, - deviceInfo->PrimaryDeviceType.OUI, - 4 - ); - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui: %02X-%02X-%02X-%02X\n", - pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui[0], - pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui[1], - pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui[2], - pP2PInfo->WpsAttributes.PrimaryDeviceType.Oui[3]) - ); - - // Set the device name for WPS - pP2PInfo->WpsAttributes.DeviceNameLength = (u1Byte) deviceInfo->DeviceName.uDeviceNameLength; - PlatformMoveMemory( - pP2PInfo->WpsAttributes.DeviceName, - deviceInfo->DeviceName.ucDeviceName, - deviceInfo->DeviceName.uDeviceNameLength - ); - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "DeviceName: ", pP2PInfo->WpsAttributes.DeviceName, pP2PInfo->WpsAttributes.DeviceNameLength); - - P2P_CorrectDeviceCategory(pTargetAdapter); - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // Loop iteration variables - ULONG i = 0; - - // OS-given structure - PDOT11_WFD_SECONDARY_DEVICE_TYPE_LIST secondaryDeviceTypeList = - (PDOT11_WFD_SECONDARY_DEVICE_TYPE_LIST) InformationBuffer; - - #if 0 // Implementation Status - typedef struct _DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST { - NDIS_OBJECT_HEADER Header; // SKIP - ULONG uNumOfEntries; // OK - ULONG uTotalNumOfEntries; // TODO - DOT11_WFD_DEVICE_TYPE SecondaryDeviceTypes[1]; // OK - } DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST, * PDOT11_WFD_SECONDARY_DEVICE_TYPE_LIST; - #endif - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // Start to set the secondary device type list - - // Set the number of secondary device type list entries - pP2PInfo->WpsAttributes.SecondaryDeviceTypeLength = - (u1Byte) secondaryDeviceTypeList->uNumOfEntries; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("secondaryDeviceType number = %d\n", secondaryDeviceTypeList->uNumOfEntries)); - - // Set each secondary device type from the OS-given structure - for(i = 0; i < secondaryDeviceTypeList->uNumOfEntries; i++) - { - pP2PInfo->WpsAttributes.SecondaryDeviceTypeList[i].CategoryId = - secondaryDeviceTypeList->SecondaryDeviceTypes[i].CategoryID; - - pP2PInfo->WpsAttributes.SecondaryDeviceTypeList[i].SubCategoryId = - secondaryDeviceTypeList->SecondaryDeviceTypes[i].SubCategoryID; - - PlatformMoveMemory( - pP2PInfo->WpsAttributes.SecondaryDeviceTypeList[i].Oui, - secondaryDeviceTypeList->SecondaryDeviceTypes[i].OUI, - 4 - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "N63C_SET_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST:\n", - &(pP2PInfo->WpsAttributes.SecondaryDeviceTypeList[i]), sizeof(P2P_WPS_ATTRIBUTES_DEVICE_TYPE)); - } - - // Currently, do not know how to implement this ------- - // The maximum number of entries that the SecondaryDeviceTypes array can contain. - // The default value is 0. - secondaryDeviceTypeList->uTotalNumOfEntries; - - #if 0 // Possible Solution - This variable may be used to limit the maximum number of elements in SecondaryDeviceTypeList. - Currently, the struct _P2P_WPS_ATTRIBUTES accepts 8 emements for SecondaryDeviceTypeList. - #endif - - // --------------------------------------------- - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_ADDITIONAL_IE -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_ADDITIONAL_IE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - MEMORY_BUFFER mbOidIe = {NULL, 0}; - - // OS-given structure - PDOT11_WFD_ADDITIONAL_IE additionalIEs = - (PDOT11_WFD_ADDITIONAL_IE) InformationBuffer; - - #if 0 // Implementation Status - typedef struct _DOT11_WFD_ADDITIONAL_IE - { - NDIS_OBJECT_HEADER Header; // SKIP - ULONG uBeaconIEsOffset; // OK - ULONG uBeaconIEsLength; // OK - ULONG uProbeResponseIEsOffset; // OK - ULONG uProbeResponseIEsLength; // OK - ULONG uDefaultRequestIEsOffset; // OK - ULONG uDefaultRequestIEsLength; // OK - } DOT11_WFD_ADDITIONAL_IE, *PDOT11_WFD_ADDITIONAL_IE; - #endif - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // Additional Beacon IEs ------------------------------------------------------ - mbOidIe.Buffer = (PVOID) ((pu1Byte) additionalIEs + additionalIEs->uBeaconIEsOffset); - mbOidIe.Length = additionalIEs->uBeaconIEsLength; - - P2P_AddIe_Set( - &pP2PInfo->AdditionalIEs, - P2P_ADD_IE_BEACON, - additionalIEs->uBeaconIEsLength, - (u1Byte *) additionalIEs + additionalIEs->uBeaconIEsOffset - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Beacon Additional IE: ====\n", mbOidIe.Buffer, mbOidIe.Length); - //------------------------------------------------------------------------- - - // Additional Probe Response IEs ------------------------------------------------------ - mbOidIe.Buffer = (PVOID) ((pu1Byte) additionalIEs + additionalIEs->uProbeResponseIEsOffset); - mbOidIe.Length = additionalIEs->uProbeResponseIEsLength; - - P2P_AddIe_Set( - &pP2PInfo->AdditionalIEs, - P2P_ADD_IE_PROBE_RESPONSE, - additionalIEs->uProbeResponseIEsLength, - (u1Byte *) additionalIEs + additionalIEs->uProbeResponseIEsOffset - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ProbeResponse Additional IE: ====\n", mbOidIe.Buffer, mbOidIe.Length); - - // ------------------------------------------------------------------------------- - - // Additional Default Probe Request IEs -------------------------------------------------- - mbOidIe.Buffer = (PVOID) ((pu1Byte) additionalIEs + additionalIEs->uDefaultRequestIEsOffset); - mbOidIe.Length = additionalIEs->uDefaultRequestIEsLength; - - P2P_AddIe_Set( - &pP2PInfo->AdditionalIEs, - P2P_ADD_IE_DEFAULT_REQUEST, - additionalIEs->uDefaultRequestIEsLength, - (u1Byte *) additionalIEs + additionalIEs->uDefaultRequestIEsOffset - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "DefaultRequest Additional IE: ====\n", mbOidIe.Buffer, mbOidIe.Length); - //---------------------------------------------------------------------------------- - - P2P_CorrectDeviceCategory(pTargetAdapter); - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - BOOLEAN bFilterOutNonAssociatedBSSID = FALSE; - - // OS-given data - ULONG deviceDiscoverability = *((PULONG) InformationBuffer); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - #if 0 - #define DOT11_WFD_DEVICE_NOT_DISCOVERABLE 0 - #define DOT11_WFD_DEVICE_AUTO_AVAILABILITY 16 - #define DOT11_WFD_DEVICE_HIGH_AVAILABILITY 24 - #endif - - FunctionIn(COMP_P2P); - - // Set the the corresponding variable in the structure - pP2PInfo->uListenStateDiscoverability = deviceDiscoverability; - RT_TRACE(COMP_OID_SET|COMP_P2P, DBG_LOUD, ("pP2PInfo->uListenStateDiscoverability: %d\n", pP2PInfo->uListenStateDiscoverability)); - - switch(pP2PInfo->uListenStateDiscoverability) - { - case DOT11_WFD_DEVICE_NOT_DISCOVERABLE: - { - pP2PInfo->ExtListenTimingPeriod = 0; - pP2PInfo->ExtListenTimingDuration = 0; - } - break; - - case DOT11_WFD_DEVICE_AUTO_AVAILABILITY: - case DOT11_WFD_DEVICE_HIGH_AVAILABILITY: - default: - { - pP2PInfo->ExtListenTimingPeriod = 3 * P2P_MGNT_PERIOD; // In the unit of P2P_MGNT_PERIOD - pP2PInfo->ExtListenTimingDuration = 150; - pP2PInfo->ExtListenTimingPeriodSlotCount = (u4Byte)P2P_EXT_LISTEN_TIMING_PERIOD_SC; - - // Do not check BSSID since the device port need to receive packets ----------------------------------------------------- - bFilterOutNonAssociatedBSSID = FALSE; - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_CHECK_BSSID, (pu1Byte)(&bFilterOutNonAssociatedBSSID)); - // ------------------------------------------------------------------------------------------------------------- - - // Device Port is Open -------------------------------------------- - //DM_DIG_WifiDirectBoostStart(GetDefaultAdapter(pTargetAdapter)); - // ------------------------------------------------------------- - - if(P2P_STATE_INITIALIZED == pP2PInfo->State) - { - PlatformCancelTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pP2PInfo->pAdapter, &pP2PInfo->P2PMgntTimer, 0); - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("start extended listen immediately\n")); - } - } - break; - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->ExtListenTimingPeriod: %d\n", pP2PInfo->ExtListenTimingPeriod)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->ExtListenTimingDuration: %d\n", pP2PInfo->ExtListenTimingDuration)); - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // OS-given data - PDOT11_WFD_DEVICE_LISTEN_CHANNEL pListenChannel = (PDOT11_WFD_DEVICE_LISTEN_CHANNEL) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - #if 0 - // OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL - #define OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL NWF_DEFINE_OID(0x13,NWF_WFD_DEVICE_OID,NWF_MANDATORY_OID) - #define DOT11_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1 - #define DOT11_SIZEOF_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1 - - typedef - struct _DOT11_WFD_DEVICE_LISTEN_CHANNEL - { - NDIS_OBJECT_HEADER Header; - UCHAR ChannelNumber; - } DOT11_WFD_DEVICE_LISTEN_CHANNEL, *PDOT11_WFD_DEVICE_LISTEN_CHANNEL; - #endif - - // Set the the corresponding variable in the structure ------------------------------------------- - pP2PInfo->ListenChannel = pListenChannel->ChannelNumber; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->ListenChannel: %d\n", pP2PInfo->ListenChannel)); - // -------------------------------------------------------------------------------------- - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_DISCOVER_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_DISCOVER_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - BOOLEAN bStatus = FALSE; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - MEMORY_BUFFER mbOidIe = {NULL, 0}; - OCTET_STRING osSsid = {NULL, 0}; - PDOT11_SSID pDot11Ssid = NULL; - BOOLEAN bStartDiscovery = TRUE; - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - // Loop iteration variables - ULONG i = 0; - u8Byte curTime = PlatformGetCurrentTime(); - - // OS-given structure - PDOT11_WFD_DISCOVER_REQUEST discoverRequest = - (PDOT11_WFD_DISCOVER_REQUEST) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - // Save the Oid Issue time for speeding up the Go Negotiation ---------------- - pP2PInfo->LastDeviceDiscoveryOidIssueTime = PlatformGetCurrentTime(); - // ------------------------------------------------------------------ - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: uDiscoverTimeout: %d\n", __FUNCTION__, discoverRequest->uDiscoverTimeout)); - - // Discover Type - switch(discoverRequest->DiscoverType) - { - case dot11_wfd_discover_type_scan_only: - pP2PInfo->DiscoverSequence = P2P_DISCOVERY_SCAN_PHASE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->DiscoverType: dot11_wfd_discover_type_scan_only\n")); - break; - - case dot11_wfd_discover_type_find_only: - pP2PInfo->DiscoverSequence = P2P_DISCOVERY_FIND_PHASE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->DiscoverType: dot11_wfd_discover_type_find_only\n")); - break; - - case dot11_wfd_discover_type_auto: - pP2PInfo->DiscoverSequence = P2P_DISCOVERY_FIND_PHASE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->DiscoverType: dot11_wfd_discover_type_auto\n")); - break; - - case dot11_wfd_discover_type_scan_social_channels: - pP2PInfo->DiscoverSequence = P2P_DISCOVERY_FIND_PHASE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->DiscoverType: dot11_wfd_discover_type_auto\n")); - break; - - case dot11_wfd_discover_type_forced: - default: - pP2PInfo->DiscoverSequence = P2P_DISCOVERY_SCAN_PHASE | P2P_DISCOVERY_FIND_PHASE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->DiscoverType: dot11_wfd_discover_type_forced\n")); - break; - } - - // Scan Type - switch(discoverRequest->ScanType) - { - case dot11_wfd_scan_type_auto: - pP2PInfo->ScanType = SCAN_ACTIVE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->ScanType: dot11_wfd_scan_type_auto\n")); - break; - - case dot11_wfd_scan_type_active: - pP2PInfo->ScanType = SCAN_ACTIVE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->ScanType: dot11_wfd_scan_type_active\n")); - break; - - case dot11_wfd_scan_type_passive: - default: - pP2PInfo->ScanType = SCAN_PASSIVE; - RT_TRACE(COMP_P2P, DBG_LOUD, ("discoverRequest->ScanType: dot11_wfd_scan_type_passive\n")); - break; - } - - // Set the device IDs for device discovery ------------------------------------------ - P2PClearScanDeviceID(&pP2PInfo->ScanDeviceIDs); - - for(i = 0; i < discoverRequest->uNumDeviceFilters; i++) - { - bStatus = P2PAddScanDeviceID( - &pP2PInfo->ScanDeviceIDs, - ((pu1Byte) discoverRequest + discoverRequest->uDeviceFilterListOffset + i * sizeof(DOT11_WFD_DISCOVER_DEVICE_FILTER)) - ); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Device ID List Entry:", - ((pu1Byte) discoverRequest + discoverRequest->uDeviceFilterListOffset + i * sizeof(DOT11_WFD_DISCOVER_DEVICE_FILTER))); - - if(bStatus != TRUE) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: P2PInfo.ScanDeviceIDs is too small!\n", __FUNCTION__)); - } - } - - if(discoverRequest->uNumDeviceFilters == 1) - {// specific peer search - P2P_DEV_LIST_ENTRY *dev = NULL; - u1Byte chnl = 0; - - p2p_DevList_Lock(&pP2PInfo->devList); - - pP2PInfo->uNumberOfDiscoverForSpecificChannels = 0; - - if(NULL != (dev = p2p_DevList_GetGo(&pP2PInfo->devList, pP2PInfo->ScanDeviceIDs.DeviceIDs[0]))) - {// go - if(0 != (chnl = p2p_DevList_GetDevChnl(dev))) - { - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = chnl; - } - } - - if(NULL != (dev = p2p_DevList_Get(&pP2PInfo->devList, pP2PInfo->ScanDeviceIDs.DeviceIDs[0], P2P_DEV_TYPE_DEV))) - {// dev - if(0 != (chnl = p2p_DevList_GetDevChnl(dev))) - { - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = chnl; - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = pP2PInfo->ListenChannel; // For Peer to Find us in GO Negotiation Procedure - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = pP2PInfo->ListenChannel; // For Peer to Find us in GO Negotiation Procedure - } - else - { - // For case we have only received PD req from peer, since PD does not give info about peer Listen Channel, - // we add all social channels, otherwise we will do scan phase which wastes time - if(0 == chnl) - { - if(dev->rxFrames[P2P_FID_PROBE_REQ] && dev->rxFrames[P2P_FID_PROBE_REQ]->msg->listenChannel) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("add listen channel %u from ProbeReq\n", dev->rxFrames[P2P_FID_PROBE_REQ]->msg->listenChannel)); - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = dev->rxFrames[P2P_FID_PROBE_REQ]->msg->listenChannel; - } - else if(dev->rxFrames[P2P_FID_PD_REQ]) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("only have peer's PD req, add all social channel\n")); - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = 1; - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = 6; - pP2PInfo->DiscoverForSpecificChannels[pP2PInfo->uNumberOfDiscoverForSpecificChannels++] = 11; - } - } - } - } - - if(pP2PInfo->uNumberOfDiscoverForSpecificChannels) - { - pP2PInfo->bDiscoverForSpecificChannels = TRUE; - pP2PInfo->uNumberOfDiscoverRounds = 10; - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "to scan following channels to find specific peer:\n", - pP2PInfo->DiscoverForSpecificChannels, pP2PInfo->uNumberOfDiscoverForSpecificChannels); - - if( pP2PInfo->DeviceListForQuery.uNumberOfDevices != 0 && // If empty device list, force to scan - PlatformGetCurrentTime() - pP2PInfo->LastDeviceDiscoveryIndicatedTime < 300 * 1000) // Do not discover for that short time 300 ms - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: Discover Too Frequently, Complete Directly\n", __FUNCTION__)); - bStartDiscovery = FALSE; - } - } - else - { - pP2PInfo->bDiscoverForSpecificChannels = FALSE; - pP2PInfo->uNumberOfDiscoverRounds = 0; - - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("device entry not found\n")); - - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_DUMP, - &pP2PInfo->DeviceList, - NULL, NULL - ); - - P2PDumpScanList(pP2PInfo->ScanList, pP2PInfo->ScanListSize); - } - - p2p_DevList_Unlock(&pP2PInfo->devList); - } - else - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("devicelist empty\n")); - - if(curTime < MultiportGetLastConnectionActionTime(pTargetAdapter) + P2P_BLOCK_NORMAL_SCAN_PERIOD) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, ("[WARNING] Last Connection time - current time = %d us, skip this discovery\n", (u4Byte)(MultiportGetLastConnectionActionTime(pTargetAdapter) + P2P_BLOCK_NORMAL_SCAN_PERIOD - curTime))); - bStartDiscovery = FALSE; - } - } - - //---------------------------------------------------------------------------- - - - // Additional Probe Request IEs --------------------------------------------------- - mbOidIe.Buffer = (PVOID) ((pu1Byte) discoverRequest + discoverRequest->uIEsOffset); - mbOidIe.Length = discoverRequest->uIEsLength; - - P2P_AddIe_Set( - &pP2PInfo->AdditionalIEs, - P2P_ADD_IE_PROBE_REQUEST, - discoverRequest->uIEsLength, - (u1Byte *) discoverRequest + discoverRequest->uIEsOffset - ); - - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "ProbeRequest Additional IE:\n", mbOidIe.Buffer, mbOidIe.Length); - //---------------------------------------------------------------------------- - - - // Set the legacy network scanning ------------------------------------------------ - pP2PInfo->bForceScanLegacyNetworks = discoverRequest->bForceScanLegacyNetworks; - RT_TRACE(COMP_OID_SET | COMP_P2P, DBG_LOUD, ("%s: pP2PInfo->bForceScanLegacyNetworks: %d\n", __FUNCTION__, pP2PInfo->bForceScanLegacyNetworks)); - //---------------------------------------------------------------------------- - - if(bStartDiscovery) - { - // Win8: Guarantee the packet transmission in the right channel since the this OID will switch channel -------------------------------------------------------------------------------------------- - //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Delay 1000 ms to guranatee the packet transmission in the right channel and also update the P2P state machine!\n")); - //delay_ms(500); - // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -// pP2PInfo->bDeviceDiscoveryInProgress = TRUE; - - // - // - // Leave LPS mode prior to the process of P2P device discovery to improve discovery capability in DC power mode. - // 2014.03.25. - // - LeisurePSLeave(pDefaultAdapter, LPS_DISABLE_DEVICE_DISCOVERY);// Leave LPS mode for P2P device discovery, added by Roger, 2014.03.25. - - RT_TRACE(COMP_OID_SET | COMP_P2P, DBG_LOUD, ("Delay 50 ms to guranatee the action frame transmission in the right channel!\n")); - delay_ms(50); - - for(i = 0; MgntScanInProgress(&pP2PInfo->pAdapter->MgntInfo); i++) - { - RT_TRACE(COMP_OID_SET | COMP_P2P, DBG_LOUD, ("Delay 10 ms to guranatee the packet transmission in the right channel!\n")); - delay_ms(10); - - if(i == 2) // Wait for 30 ms - { - // Stop scan imediately to wait for new action - P2PScanListCeaseScan(pP2PInfo); - break; - } - } - - for(i = 0; pP2PInfo->State != P2P_STATE_INITIALIZED; i++) - { - RT_TRACE(COMP_OID_SET | COMP_P2P, DBG_LOUD, ("Delay 10 ms to update the P2P state machine!\n")); - delay_ms(10); - - if(i == 50) break; - } - - // Clear the device list - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_CLEAR, - &pP2PInfo->DeviceList, - NULL, NULL - ); - - // Clear the device list for query - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_CLEAR, - &pP2PInfo->DeviceListForQuery, - NULL, NULL - ); - - // Simply do the device discovery since the device discovery may be used as the method to guarantee the common channel - P2PResetCommonChannelArrivingProcess(pP2PInfo); - - // Start the device discovery - if(pP2PInfo->pAdapter->bInHctTest) - P2PDeviceDiscovery(pP2PInfo, 2); - else - P2PDeviceDiscovery(pP2PInfo, 10); - - // Win8: The discover time is very limited so we delay the OID and do the discovery in the same time. -------------------------- - //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Delay 3000 ms to get additional time to scan!\n")); - //delay_ms(3000); - // ------------------------------------------------------------------------------------------------------------- - - // Set the indication to OS when the discovery completes - pP2PInfo->bDeviceDiscoveryIndicateToOS = TRUE; - } - else - { - // Win8: Guarantee the packet transmission in the right channel since the this OID will switch channel -------------------------------------------------------------------------------------------- - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Delay 50 ms to guranatee the packet transmission in the right channel and also update the P2P state machine!\n")); - delay_ms(50); - // ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - - // Let this OID routine run faster than the P2POidPostProcessWorkItemCallback ------ - pP2PInfo->bPostoneP2POidPostProcessWorkItem = TRUE; - // ---------------------------------------------------------------------- - - // Scheduling the sending of the provision discovery response -------------------------------------- - pP2PInfo->OidOperation = OID_OPERATION_INDICATE_DISCOVERY_COMPLETE; -#if 1 - PlatformSetTimer(pTargetAdapter, &(pP2PInfo->P2POidPostProcessTimer), 10); -#else - PlatformScheduleWorkItem(&pP2PInfo->P2POidPostProcessWorkItem); -#endif - //---------------------------------------------------------------------------------------- - } - - // OS needs this status code - ndisStatus = NDIS_STATUS_INDICATION_REQUIRED; - - // Let the P2POidPostProcessWorkItem Run - pP2PInfo->bPostoneP2POidPostProcessWorkItem = FALSE; - - FunctionOut(COMP_OID_SET); - - return ndisStatus; -} - - -// Query operation for OID_DOT11_WFD_GET_DIALOG_TOKEN -static NDIS_STATUS -N63C_QUERY_OID_DOT11_WFD_GET_DIALOG_TOKEN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - u1Byte nextToken = 0; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - // Preidict the next token generated by the marco of IncreaseDialogToken(pP2PInfo->DialogToken) : Non-Zero ---------- - nextToken = (pP2PInfo->DialogToken + 1 == 0) ? (pP2PInfo->DialogToken + 2) : (pP2PInfo->DialogToken + 1); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("%s: nextToken: %d\n", __FUNCTION__, nextToken)); - // -------------------------------------------------------------------------------------------------------- - - *BytesWritten = 1; - *((pu1Byte) InformationBuffer) = nextToken; - - pP2PInfo->oidDialogToken = nextToken; - - return NDIS_STATUS_SUCCESS; -} - - -// Query operation for OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY -static NDIS_STATUS -N63C_QUERY_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - *BytesWritten = sizeof(pP2PInfo->uListenStateDiscoverability); - *((PULONG) InformationBuffer) = pP2PInfo->uListenStateDiscoverability; - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->uListenStateDiscoverability: %d\n", pP2PInfo->uListenStateDiscoverability)); - - return NDIS_STATUS_SUCCESS; -} - -// Query operation for OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL -static NDIS_STATUS -N63C_QUERY_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - PDOT11_WFD_DEVICE_LISTEN_CHANNEL - pListenChannel = (PDOT11_WFD_DEVICE_LISTEN_CHANNEL) InformationBuffer; - - #if 0 - #define DOT11_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1 - #define DOT11_SIZEOF_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1 - - typedef struct _DOT11_WFD_DEVICE_LISTEN_CHANNEL { - NDIS_OBJECT_HEADER Header; - UCHAR ChannelNumber; - } DOT11_WFD_DEVICE_LISTEN_CHANNEL, *PDOT11_WFD_DEVICE_LISTEN_CHANNEL; - #endif - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - N6_ASSIGN_OBJECT_HEADER( - pListenChannel->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1, - sizeof(DOT11_WFD_DEVICE_LISTEN_CHANNEL) - ); - - pListenChannel->ChannelNumber = pP2PInfo->ListenChannel; - - *BytesWritten = sizeof(DOT11_WFD_DEVICE_LISTEN_CHANNEL); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("pP2PInfo->ListenChannel: %d\n", pP2PInfo->ListenChannel)); - - return NDIS_STATUS_SUCCESS; -} - -// Query operation for OID_DOT11_WFD_ENUM_DEVICE_LIST -static NDIS_STATUS -N63C_QUERY_OID_DOT11_WFD_ENUM_DEVICE_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ -#if 0 - typedef struct DOT11_BYTE_ARRAY { - NDIS_OBJECT_HEADER Header; - ULONG uNumOfBytes; - ULONG uTotalNumOfBytes; - UCHAR ucBuffer[1]; - } DOT11_BYTE_ARRAY, *PDOT11_BYTE_ARRAY; -#endif - - u4Byte i = 0; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - MEMORY_BUFFER mbObject = {NULL, 0}; - PDOT11_WFD_DEVICE_ENTRY wfdEntry = NULL; - u4Byte usedBytes = 0; - - // Skip the MAC header and the first three fields (non-IE) in the beacon and the probe response - u4Byte skippedBytes = sMacHdrLng + 12; - - // OS-given data - PDOT11_BYTE_ARRAY pByteArray = (PDOT11_BYTE_ARRAY) InformationBuffer; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - pByteArray->uNumOfBytes = 0; - pByteArray->uTotalNumOfBytes = 0; - PlatformZeroMemory(pByteArray, sizeof(DOT11_BYTE_ARRAY)); - //------------------------------------------------------- - - - // Update the device list for the OS query ---------------------- - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_COPY_TO_QUERY_LIST, - NULL, NULL, NULL - ); - // ------------------------------------------------------- - - - N6_ASSIGN_OBJECT_HEADER( - pByteArray->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_DEVICE_ENTRY_BYTE_ARRAY_REVISION_1, - sizeof(DOT11_BYTE_ARRAY) - ); - - // Compute the requried memory length ------------------------------------------------------------------ - *BytesNeeded += FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer); - *BytesNeeded += N63CComputeRequiredDeviceEntriesSize(pP2PInfo); - //------------------------------------------------------------------------------------------------- - - // Output buffer length checking --------------- - if(*BytesNeeded > InformationBufferLength) - { - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - //----------------------------------------- - - // Fill the device entries ------------------------------------------------------------------------------- - wfdEntry = (PDOT11_WFD_DEVICE_ENTRY)((pu1Byte) pByteArray + FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer)); - - for(i = 0; i < pP2PInfo->DeviceListForQuery.uNumberOfDevices; i++) - { - wfdEntry = (PDOT11_WFD_DEVICE_ENTRY)((pu1Byte) wfdEntry + usedBytes); - - N63CConstruct_DOT11_WFD_DEVICE_ENTRY( - pP2PInfo, - &pP2PInfo->DeviceListForQuery.DeviceEntry[i], - wfdEntry, - &usedBytes - ); - - pByteArray->uNumOfBytes += usedBytes; - } - //-------------------------------------------------------------------------------------------------- - - // Assertion -------------------------------------------------------------------------------------------- - if(pByteArray->uNumOfBytes != N63CComputeRequiredDeviceEntriesSize(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, (__FUNCTION__": N63CComputeRequiredMemoryForDeviceList value mismatch!\n")); - } - //----------------------------------------------------------------------------------------------------- - - // Post settings for the successfull execution ----------------------------------- - pByteArray->uTotalNumOfBytes = pByteArray->uNumOfBytes; - *BytesWritten = *BytesNeeded; - *BytesNeeded = 0; - - return NDIS_STATUS_SUCCESS; - // ----------------------------------------------------------------------- -} - - -// Set operation for OID_DOT11_WFD_FLUSH_DEVICE_LIST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_FLUSH_DEVICE_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - PMGNT_INFO pTargetMgntInfo = &pTargetAdapter->MgntInfo; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // Clear the scan list - PlatformZeroMemory( pTargetMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC ); - pTargetMgntInfo->NumBssDesc = 0; - - // Clear the device list - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_CLEAR, - &pP2PInfo->DeviceList, - NULL, NULL - ); - - // Clear the device list for Query - P2PDeviceListActionInterface( - pP2PInfo, - P2P_DEVICE_LIST_ACTION_CLEAR, - &pP2PInfo->DeviceListForQuery, - NULL, NULL - ); - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_STOP_DISCOVERY -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_STOP_DISCOVERY( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - if(P2P_DOING_DEVICE_DISCOVERY(pP2PInfo)) - { - P2PScanListCeaseScan(pP2PInfo); - P2PDeviceDiscoveryComplete(pP2PInfo, TRUE); - } - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_SEND_INVITATION_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_INVITATION_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - do - { - DOT11_SEND_INVITATION_REQUEST_PARAMETERS *param = (DOT11_SEND_INVITATION_REQUEST_PARAMETERS *)InformationBuffer; - - if(NULL == (req = N63C_SendAction_InvitationReq(pTargetAdapter, param, n63c_SendP2pReqActionFrameStateCb))) - { - status = NDIS_STATUS_FAILURE; - break; - } - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -// Set operation for OID_DOT11_WFD_SEND_INVITATION_RESPONSE -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_INVITATION_RESPONSE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - do - { - PlatformMoveMemory(InfoBuf, InformationBuffer, InformationBufferLength); - InfoBufLen = InformationBufferLength; - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -// Set operation for OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - do - { - DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *param = (DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *)InformationBuffer; - - if(NULL == (req = N63C_SendAction_PdReq(pTargetAdapter, param, n63c_SendP2pReqActionFrameStateCb))) - { - status = NDIS_STATUS_FAILURE; - break; - } - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -// Set operation for OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - do - { - PlatformMoveMemory(InfoBuf, InformationBuffer, InformationBufferLength); - InfoBufLen = InformationBufferLength; - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -// Set operation for OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - VOID *req = NULL; - - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - - // OS-given structure - PDOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS pParameters = - (PDOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS) InformationBuffer; - - // Clear output variables ----- - *BytesRead = 0; - *BytesNeeded = 0; - //------------------------ - - FunctionIn(COMP_OID_SET); - -#if (MULTICHANNEL_SUPPORT == 1) - // Consider the default port's link state ----------------------------------------------------------------------------------------------------------------- - if(MgntLinkStatusQuery(GetDefaultAdapter(pP2PInfo->pAdapter)) == RT_MEDIA_CONNECT) - { - pP2PInfo->OperatingChannel = MultiChannelGetPortConnected20MhzChannel(GetDefaultAdapter(pP2PInfo->pAdapter)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Change op ch to default port connected channel: %d\n", pP2PInfo->OperatingChannel)); - } - else - { - if(pDefaultAdapter->MgntInfo.WFDOpChannel !=0) - pP2PInfo->OperatingChannel = pDefaultAdapter->MgntInfo.WFDOpChannel; - else - { -// Removed by Bruce, 2015-6-28. -// Shall not change OP channel after the GO has started or the channels for all P2P roles have been defined. -#if 0 // (AUTO_CHNL_SEL_NHM ==1) - if(IS_AUTO_CHNL_SUPPORT(pDefaultAdapter)) - pP2PInfo->OperatingChannel = P2PIsSocialChannel(GET_AUTO_CHNL_SELECTED_NUM(pDefaultAdapter)) ? - GET_AUTO_CHNL_SELECTED_NUM(pDefaultAdapter) : P2P_DEFAULT_OPERATING_CHANNEL; - else -#endif - { - if(0 == pP2PInfo->OperatingChannel) - pP2PInfo->OperatingChannel = P2P_DEFAULT_OPERATING_CHANNEL; - } - } - RT_TRACE_F(COMP_P2P, DBG_LOUD, (" [ACS] Change op ch to P2P_DEFAULT_OPERATING_CHANNEL channel: %d\n", pP2PInfo->OperatingChannel)); - } - // ----------------------------------------------------------------------------------------------------------------------------------------------- -#endif - - do - { - DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *param = (DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *)InformationBuffer; - - if(NULL == (req = N63C_SendAction_GoNegReq(pTargetAdapter, param, n63c_SendP2pReqActionFrameStateCb))) - { - status = NDIS_STATUS_FAILURE; - break; - } - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -// Set operation for OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - do - { - PlatformMoveMemory(InfoBuf, InformationBuffer, InformationBufferLength); - InfoBufLen = InformationBufferLength; - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - - - -// Set operation for OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - do - { - PlatformMoveMemory(InfoBuf, InformationBuffer, InformationBufferLength); - InfoBufLen = InformationBufferLength; - - status = NDIS_STATUS_INDICATION_REQUIRED; - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -// Set operation for OID_DOT11_WFD_START_GO_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_START_GO_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - PRT_NDIS62_COMMON pNdis62Common = pTargetAdapter->pNdis62Common; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - PADAPTER pDevicePort = GetFirstDevicePort(pDefaultAdapter); - PP2P_INFO pDeviceP2PInfo = GET_P2P_INFO(pDevicePort); - - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY | COMP_P2P); - - // Check the AP state - if(GetAPState(pTargetAdapter) != AP_STATE_STOPPED) - { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY | COMP_INIT | COMP_INDIC), DBG_LOUD, ("AP is not in INIT STATE\n")); - - return NDIS_STATUS_INVALID_STATE; - } - - // Radio is in the OFF state - if(N6CQuery_DOT11_NIC_POWER_STATE(GetDefaultAdapter(pTargetAdapter)) == FALSE) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("RF is OFF, return NDIS_STATUS_DOT11_POWER_STATE_INVALID.\n")); - - return NDIS_STATUS_DOT11_POWER_STATE_INVALID; - } - - -#if 1 // The Extended Listening will let the AP's Channel be wrong when during extended listening - - //if(MgntScanInProgress(&pDefaultAdapter->MgntInfo)) - //{ - // Postpone the extended listening for a while - // P2PExtendedListenResetCounter(pDeviceP2PInfo); - - // Stop potential device port extended listening - // P2PScanListCeaseScan(pDeviceP2PInfo); - - // Delay for a while for running ScanTimer callback by context switch - // + Otherwise, this scan will be skipped due to MgntScanInProgress flag - // delay_ms(20); - //} - - if(P2P_DOING_DEVICE_DISCOVERY(pDeviceP2PInfo)) - {// Doing P2P Device Discovery - //msDelayStart += 10; // if scan in progress, we have to wait until ScanComplete() finishes - P2PScanListCeaseScan(pDeviceP2PInfo); - P2PDeviceDiscoveryComplete(pDeviceP2PInfo, TRUE); // P2P State is restored in this function. - } - else if(pDeviceP2PInfo->bExtendedListening) - {// Doing extended listening - P2PScanListCeaseScan(pDeviceP2PInfo); - P2PExtendedListenComplete(pDeviceP2PInfo); - } - else if(MgntScanInProgress(&pDefaultAdapter->MgntInfo)) - {// Doing normal scan - //msDelayStart += 10; // if scan in progress, we have to wait until ScanComplete() finishes - P2PScanListCeaseScan(pDeviceP2PInfo); - } - - delay_ms(20); - -#endif - - -#if (MULTICHANNEL_SUPPORT == 1) -{ - if(MultiChannelSwitchNeeded(pDefaultAdapter)) - { - // Stop MultiChannel switch for initializing the GO Tsf ----------- - MultiChannelStopChannelSwitchScheduler(pDefaultAdapter,TRUE); - // ----------------------------------------------------- - } -} -#endif - - // Change the last scan complete time to block scan request for a while from the default port. - // If the scan process is executed, the next handshake may fail because this port is not in the - // correct channel now. - MultiportRecordLastScanTime(pDefaultAdapter); - - if(0 == pP2PInfo->OperatingChannel) - pP2PInfo->OperatingChannel = P2P_DEFAULT_OPERATING_CHANNEL; - - // Note: - // Do not change operating channel here becuase the OP channel has been negotiated from the previous - // handshake or set by OS. -#if 0 - - - // Consider the default port's link state - if(MgntLinkStatusQuery(pDefaultAdapter) == RT_MEDIA_CONNECT) - { - #if (MULTICHANNEL_SUPPORT == 1) // For Compilation: Only PCI-E Support MultiChannel Now - - pP2PInfo->OperatingChannel = MultiChannelGetPortConnected20MhzChannel(pDefaultAdapter); - - #endif - - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, ("Use Default Port Channel: Channel %d\n", pP2PInfo->OperatingChannel)); - } - else - { - if(pDefaultAdapter->MgntInfo.WFDOpChannel != 0) - pP2PInfo->OperatingChannel = pDefaultAdapter->MgntInfo.WFDOpChannel; - else - { -#if (AUTO_CHNL_SEL_NHM ==1) - if(IS_AUTO_CHNL_SUPPORT(pDefaultAdapter)) - pP2PInfo->OperatingChannel = P2PIsSocialChannel(GET_AUTO_CHNL_SELECTED_NUM(pDefaultAdapter)) ? - GET_AUTO_CHNL_SELECTED_NUM(pDefaultAdapter) : P2P_DEFAULT_OPERATING_CHANNEL; - else -#endif - pP2PInfo->OperatingChannel = P2P_DEFAULT_OPERATING_CHANNEL; - } - RT_TRACE((COMP_OID_QUERY | COMP_OID_SET), DBG_LOUD, ("[ACS] Start GO at Channel %d\n", pP2PInfo->OperatingChannel)); - } -#endif - - - // Update Device Port's Operating Channel Number (Win8 Action Frame is Processed by Only Device Port) - { - PADAPTER pDevicePort = GetFirstDevicePort(pDefaultAdapter); - PP2P_INFO pDeviceP2PInfo = GET_P2P_INFO(pDevicePort); - - pDeviceP2PInfo->OperatingChannel = pP2PInfo->OperatingChannel; - } - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - HalChangeWirelessMode(pTargetAdapter, pP2PInfo->OperatingChannel); - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("MgntActSet_802_11_CHANNEL_AND_BANDWIDTH\n")); - - if(pDefaultAdapter->MgntInfo.mAssoc) - { - HalChangeWirelessMode(pDefaultAdapter, pP2PInfo->OperatingChannel); - // Set the operating channel - MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - pTargetAdapter, - pP2PInfo->OperatingChannel, - pDefaultAdapter->MgntInfo.pChannelInfo->CurrentChannelBandWidth, - pDefaultAdapter->MgntInfo.pChannelInfo->Ext20MHzChnlOffsetOf40MHz, - pDefaultAdapter->MgntInfo.pChannelInfo->Ext40MHzChnlOffsetOf80MHz, - 0 - ); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Default port is conencted, switch to channel (%d), Bandwidth (%d), 20/40M_Offset (%d), 40/80M_Offset (%d)\n", - pDefaultAdapter->MgntInfo.dot11CurrentChannelNumber, - pDefaultAdapter->MgntInfo.pChannelInfo->CurrentChannelBandWidth, - pDefaultAdapter->MgntInfo.pChannelInfo->Ext20MHzChnlOffsetOf40MHz, - pDefaultAdapter->MgntInfo.pChannelInfo->Ext40MHzChnlOffsetOf80MHz)); - } - else - { - // Set the operating channel - MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - pTargetAdapter, - pP2PInfo->OperatingChannel, - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT, - EXTCHNL_OFFSET_NO_EXT, - 0 - ); - } - - - // Resolve the Wrong GO active channel ----------------------------------------------------------------------- - { - PADAPTER pLoopAdapter = GetDefaultAdapter(pTargetAdapter); - - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set All SettingBeforeScan.ChannelNumber = %d\n", pP2PInfo->OperatingChannel)); - - while(pLoopAdapter !=NULL) - { - pLoopAdapter->MgntInfo.dot11CurrentChannelNumber = pP2PInfo->OperatingChannel; - pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelNumber = pP2PInfo->OperatingChannel; - pLoopAdapter->MgntInfo.SettingBeforeScan.CenterFrequencyIndex1 = CHNL_GetCenterFrequency(pP2PInfo->OperatingChannel,pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelBandwidth, pLoopAdapter->MgntInfo.SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz); - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - - pLoopAdapter = GetDefaultAdapter(pTargetAdapter); - // Prefast warning 6011 Dereferencing NULL pointer 'pLoopAdapter'. - if (pLoopAdapter != NULL) - { - RT_TRACE_F(COMP_P2P | COMP_HT, DBG_LOUD, - ("SettingBeforeScan() chnl: %u, CenterFrequencyIndex1: %u\n", - pLoopAdapter->MgntInfo.SettingBeforeScan.ChannelNumber, - pLoopAdapter->MgntInfo.SettingBeforeScan.CenterFrequencyIndex1)); - } - - } - // -------------------------------------------------------------------------------------------------------- - - // Start AP mode - ndisStatus=N62CStartApMode(pTargetAdapter); - pNdis62Common->CurrentOpState = OP_STATE; - - - // Debug Message - { - PADAPTER pAdapter = GetDefaultAdapter(pTargetAdapter); - - while(pAdapter != NULL) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("pAdapter->pNdis62Common->PortNumber: %d\n", pAdapter->pNdis62Common->PortNumber)); - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "pAdapter->MgntInfo.Bssid: ", pAdapter->MgntInfo.Bssid); - - pAdapter = GetNextExtAdapter(pAdapter); - } - } - - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - PlatformIndicateP2PEvent(pP2PInfo, P2P_EVENT_GO_OPERATING_CHANNEL, NULL); - } - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY | COMP_P2P); - - return ndisStatus; -} - -// Set operation for OID_DOT11_WFD_GROUP_START_PARAMETERS -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_GROUP_START_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ -#if 0 - #define DOT11_WFD_GROUP_START_PARAMETERS_REVISION_1 1 - - typedef struct _DOT11_WFD_GROUP_START_PARAMETERS { - NDIS_OBJECT_HEADER Header; - DOT11_WFD_CHANNEL AdvertisedOperatingChannel; - } DOT11_WFD_GROUP_START_PARAMETERS, * PDOT11_WFD_GROUP_START_PARAMETERS; - - typedef struct _DOT11_WFD_CHANNEL - { - DOT11_COUNTRY_OR_REGION_STRING CountryRegionString; - UCHAR OperatingClass; - UCHAR ChannelNumber; - } DOT11_WFD_CHANNEL, * PDOT11_WFD_CHANNEL; -#endif - - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - - // OS-given structure - PDOT11_WFD_GROUP_START_PARAMETERS pParameters = - (PDOT11_WFD_GROUP_START_PARAMETERS) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - - // Only consider the channel number - pP2PInfo->OperatingChannel = pParameters->AdvertisedOperatingChannel.ChannelNumber; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pParameters->AdvertisedOperatingChannel.ChannelNumber: %d\n", pParameters->AdvertisedOperatingChannel.ChannelNumber)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return NDIS_STATUS_SUCCESS; - -} - -// Set operation for OID_DOT11_WFD_GROUP_JOIN_PARAMETERS -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_GROUP_JOIN_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ -#if 0 - typedef - struct _DOT11_WFD_GROUP_JOIN_PARAMETERS { - NDIS_OBJECT_HEADER Header; - DOT11_WFD_CHANNEL GOOperatingChannel; - ULONG GOConfigTime; - BOOLEAN bInGroupFormation; // TODO - BOOLEAN bWaitForWPSReady; // TODO - } DOT11_WFD_GROUP_JOIN_PARAMETERS, * PDOT11_WFD_GROUP_JOIN_PARAMETERS; -#endif - - PADAPTER pDevicePort = GetFirstDevicePort(pTargetAdapter); - PP2P_INFO pDeviceP2PInfo = GET_P2P_INFO(pDevicePort); - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - - // OS-given structure - PDOT11_WFD_GROUP_JOIN_PARAMETERS pParameters = - (PDOT11_WFD_GROUP_JOIN_PARAMETERS) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - // Only consider the channel number - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pParameters->GOConfigTime: %d\n", pParameters->GOConfigTime)); - - pP2PInfo->OperatingChannel = pParameters->GOOperatingChannel.ChannelNumber; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - - pP2PInfo->ClientJoinGroupContext.bInGroupFormation = pParameters->bInGroupFormation; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->ClientJoinGroupContext.bInGroupFormation: %d\n", pP2PInfo->ClientJoinGroupContext.bInGroupFormation)); - - pP2PInfo->ClientJoinGroupContext.WpsState = (pParameters->bWaitForWPSReady) ? P2P_CLIETN_JOIN_GROUP_WPS_STATE_SCANNING : P2P_CLIETN_JOIN_GROUP_WPS_STATE_NONE; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->ClientJoinGroupContext.WpsState: %d\n", pP2PInfo->ClientJoinGroupContext.WpsState)); - - - // Select the Target Channel in AutoGO mode ---------------------------------------------------------------------------------- - if(pP2PInfo->OperatingChannel == 0) - { - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "pP2PInfo->DesiredTargetMacAddress: ", pP2PInfo->DesiredTargetMacAddress); - - // From Win8 Specific Device Information Pool - pP2PDeviceListEntry = P2PDeviceListFind(&pDeviceP2PInfo->DeviceList, pP2PInfo->DesiredTargetMacAddress); - - // From Common Device Information Pool: Use Interface Address - pP2PDeviceDesc = P2PScanListFind(pDeviceP2PInfo->ScanList, pDeviceP2PInfo->ScanListSize, NULL, pP2PInfo->DesiredTargetMacAddress, NULL); - - if(pP2PDeviceListEntry) - { - pP2PInfo->OperatingChannel = pP2PDeviceListEntry->ChannelNumber; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Win8 Pool: Revised for AutoGO: pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - } - else if(pP2PDeviceDesc && pP2PDeviceDesc->OperatingChannel != 0) - { - pP2PInfo->OperatingChannel = pP2PDeviceDesc->OperatingChannel; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Common Pool: Revised for AutoGO: pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("No Peer Observed: pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - - P2PDeviceListActionInterface( - pDeviceP2PInfo, - P2P_DEVICE_LIST_ACTION_DUMP, - &pDeviceP2PInfo->DeviceList, - NULL, NULL - ); - - P2PDumpScanList(pDeviceP2PInfo->ScanList, pDeviceP2PInfo->ScanListSize); - } - } - // ---------------------------------------------------------------------------------------------------------------------- - - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return NDIS_STATUS_SUCCESS; - -} - - -// Set operation for OID_DOT11_WFD_DESIRED_GROUP_ID -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_DESIRED_GROUP_ID( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ -#if 0 - typedef struct _DOT11_WFD_GROUP_ID - { - DOT11_MAC_ADDRESS DeviceAddress; - DOT11_SSID SSID; - } DOT11_WFD_GROUP_ID, * PDOT11_WFD_GROUP_ID; - - typedef struct _DOT11_SSID - { - ULONG uSSIDLength; - UCHAR ucSSID[DOT11_SSID_MAX_LENGTH]; - } DOT11_SSID, *PDOT11_SSID; - - typedef struct DOT11_SSID_LIST { - NDIS_OBJECT_HEADER Header; - ULONG uNumOfEntries; - ULONG uTotalNumOfEntries; - DOT11_SSID SSIDs[1]; - } DOT11_SSID_LIST, *PDOT11_SSID_LIST; -#endif - - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - PRT_NDIS6_COMMON pNdisCommon = pTargetAdapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - DOT11_SSID_LIST SsidList; - - // OS-given structure - PDOT11_WFD_GROUP_ID pParameters = (PDOT11_WFD_GROUP_ID) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "Target GO MAC Address: ", pParameters->DeviceAddress); - PlatformMoveMemory(pP2PInfo->DesiredTargetMacAddress, pParameters->DeviceAddress, 6); - - RT_PRINT_STR(COMP_OID_SET, DBG_LOUD, "Target GO SSID: ", pParameters->SSID.ucSSID, pParameters->SSID.uSSIDLength); - pP2PInfo->uGroupTargetSSIDLength = pParameters->SSID.uSSIDLength; - PlatformMoveMemory(pP2PInfo->GroupTargetSSID, pParameters->SSID.ucSSID, pParameters->SSID.uSSIDLength); - - // NdisTest: If no SSID exists - if(pParameters->SSID.uSSIDLength == 0) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - - N6_ASSIGN_OBJECT_HEADER( - SsidList.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_SSID_LIST_REVISION_1, - sizeof(DOT11_SSID_LIST) - ); - - SsidList.uNumOfEntries = 1; - SsidList.SSIDs[0] = pParameters->SSID; - - pNdisCommon->dot11DesiredSSIDList = SsidList; - - - FunctionOut(COMP_OID_SET); - - return ndisStatus; - -} - -// Set operation for OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pDevicePort = GetFirstDevicePort(pTargetAdapter); - PP2P_INFO pDeviceP2PInfo = GET_P2P_INFO(pDevicePort); - PP2P_DEVICE_DISCRIPTOR pP2PDeviceDesc = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - u1Byte i = 0; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - // Change the last scan complete time to block scan request for a while from the default port. - // If the scan process is executed, the next handshake may fail because this port is not in the - // correct channel now. - MultiportRecordLastScanTime(pTargetAdapter); - - if(pP2PInfo->OperatingChannel == 0) - { - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "pP2PInfo->DesiredTargetMacAddress: ", pP2PInfo->DesiredTargetMacAddress); - - // From Win8 Specific Device Information Pool - pP2PDeviceListEntry = P2PDeviceListFind(&pDeviceP2PInfo->DeviceList, pP2PInfo->DesiredTargetMacAddress); - - // From Common Device Information Pool: Use Interface Address - pP2PDeviceDesc = P2PScanListFind(pDeviceP2PInfo->ScanList, pDeviceP2PInfo->ScanListSize, NULL, pP2PInfo->DesiredTargetMacAddress, NULL); - - if(pP2PDeviceListEntry) - { - pP2PInfo->OperatingChannel = pP2PDeviceListEntry->ChannelNumber; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Win8 Pool: Revised for AutoGO: pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - } - else if(pP2PDeviceDesc && pP2PDeviceDesc->OperatingChannel != 0) - { - pP2PInfo->OperatingChannel = pP2PDeviceDesc->OperatingChannel; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Common Pool: Revised for AutoGO: pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("No Peer Observed: pP2PInfo->OperatingChannel: %d\n", pP2PInfo->OperatingChannel)); - - P2PDeviceListActionInterface( - pDeviceP2PInfo, - P2P_DEVICE_LIST_ACTION_DUMP, - &pDeviceP2PInfo->DeviceList, - NULL, NULL - ); - - P2PDumpScanList(pDeviceP2PInfo->ScanList, pDeviceP2PInfo->ScanListSize); - } - } - -#if 0 - // Switch band - if(IS_DUAL_BAND_SUPPORT(pTargetAdapter)) - { - WIRELESS_MODE wirelessmode; - - if(IS_WIRELESS_MODE_5G(pTargetAdapter)) - { - if(pP2PInfo->OperatingChannel < 14) - { - wirelessmode = WIRELESS_MODE_N_24G; - RT_TRACE(COMP_MLME, DBG_LOUD,("Change to right 2G wirlessmode.\n")); - pTargetAdapter->HalFunc.SetWirelessModeHandler(pTargetAdapter, (u1Byte)(wirelessmode)); - } - } - else if(IS_WIRELESS_MODE_24G(pTargetAdapter)) - { - if(pP2PInfo->OperatingChannel > 14) - { - wirelessmode = WIRELESS_MODE_N_5G; - RT_TRACE(COMP_MLME, DBG_LOUD,("Change to right 5G wirlessmode .\n")); - pTargetAdapter->HalFunc.SetWirelessModeHandler(pTargetAdapter, (u1Byte)(wirelessmode)); - } - } - } -#else - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("ChangeWirelessModeHandler\n")); - HalChangeWirelessMode(pTargetAdapter, pP2PInfo->OperatingChannel); - -// SetupWirelessMode(pTargetAdapter, pP2PInfo->OperatingChannel); -#endif - // Swith to the Right Target Channel specified in OID_DOT11_WFD_GROUP_JOIN_PARAMETERS -- - MgntActSet_802_11_CHANNEL_AND_BANDWIDTH( - pTargetAdapter, - pP2PInfo->OperatingChannel, - CHANNEL_WIDTH_20, - EXTCHNL_OFFSET_NO_EXT, - EXTCHNL_OFFSET_NO_EXT, - 0 - ); - // ------------------------------------------------------------------------------- - - if(P2P_CLIETN_JOIN_GROUP_WPS_STATE_NONE == pP2PInfo->ClientJoinGroupContext.WpsState) - { - pTargetAdapter->pNdis62Common->CurrentOpState = OP_STATE; - - ndisStatus = N6CSet_DOT11_CONNECT_REQUEST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - } - else - { - VOID *customScanReq = NULL; - VOID *customScanInfo = GET_CUSTOM_SCAN_INFO(pTargetAdapter); - ADAPTER *pDevAdapter = NULL; - P2P_INFO *pDevP2PInfo = NULL; - - pP2PInfo->ClientJoinGroupContext.uWaitForWpsSlotCount = 50; // Wait for Connection : 5 sec - PlatformSetTimer(pTargetAdapter, &pP2PInfo->ClientJoinGroupContext.P2PWaitForWpsReadyTimer, 120); - - if(NULL != (pDevAdapter = GetFirstDevicePort(pTargetAdapter)) - && (NULL != (pDevP2PInfo = GET_P2P_INFO(pDevAdapter))) - && NULL != (customScanReq = CustomScan_AllocReq(customScanInfo, NULL, NULL)) - ) - { - CustomScan_AddScanChnl(customScanReq, pDevP2PInfo->ListenChannel, - 1, SCAN_PASSIVE, 100, P2P_LOWEST_RATE, NULL); - - CustomScan_IssueReq(customScanInfo, customScanReq, CUSTOM_SCAN_SRC_TYPE_P2P, "make cli dev discoverable by GO"); - } - } - - FunctionOut(COMP_OID_SET); - - return ndisStatus; - -} - - -// Set operation for OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST -static NDIS_STATUS -N63C_SET_OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // OS-given structure - //PDOT11_WFD_GROUP_ID pParameters = (PDOT11_WFD_GROUP_ID) InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - pTargetAdapter->pNdis62Common->CurrentOpState = INIT_STATE; - - ndisStatus = N6CSet_DOT11_DISCONNECT_REQUEST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - // Reset the variable in OID_DOT11_WFD_GROUP_START_PARAMETERS ------------------ - P2PResetClientJoinGroupContext(pP2PInfo); - // --------------------------------------------------------------------------- - - FunctionOut(COMP_OID_SET); - - return ndisStatus; - -} - -NDIS_STATUS -N63C_QUERY_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - return ndisStatus; -} - -//====================================================================================== -// Public Functions -//====================================================================================== - -VOID -N63CIndicateP2PEvent( - PVOID pvP2PInfo, - u4Byte EventID, - PMEMORY_BUFFER pInformation -) -{ - PP2P_INFO pP2PInfo = (PP2P_INFO) pvP2PInfo; - PADAPTER pAdapter = pP2PInfo->pAdapter; - - if(OS_SUPPORT_WDI(pP2PInfo->pAdapter)) - { - WDI_IndicateP2PEvent(pvP2PInfo, EventID, pInformation); - return; - } - - // rx req action - if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST == EventID - || P2P_EVENT_RECEIVED_INVITATION_REQUEST == EventID - ) - { - N63C_SendAction_TerminateReq(pP2PInfo->pAdapter); - - } - - // rx rsp action - if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE == EventID - || P2P_EVENT_RECEIVED_INVITATION_RESPONSE == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM == EventID - ) - { - N63C_SendAction_TerminateReq(pP2PInfo->pAdapter); - - } - - switch(EventID) - { - case P2P_EVENT_DEVICE_DISCOVERY_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_DEVICE_DISCOVERY_COMPLETE\n")); - N63CIndicateDeviceDiscoveryComplete(pP2PInfo); - break; - - case P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE\n")); - N63CIndicateProvisionDiscoveryRequestSendComplete(pP2PInfo, pInformation); - break; - - case P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST: - { - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST\n")); - InfoBufLen = 0; - N63CIndicateReceivedProvisionDiscoveryRequest(pP2PInfo, pInformation); - if(InfoBufLen) - { - if(NULL == N63C_SendAction_PdRsp(pAdapter, (DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS *)InfoBuf, n63c_SendP2pRspActionFrameStateCb)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("N63C_SendAction_PdRsp failed\n")); - p2p_IndicateActionFrameSendCompleteWithToken(pP2PInfo, P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE, RT_STATUS_FAILURE, NULL, 0, 0); - } - InfoBufLen = 0; - } - } - break; - - case P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE\n")); - N63CIndicateProvisionDiscoveryResponseSendComplete(pP2PInfo, pInformation); - break; - - case P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE\n")); - //N63CIndicateReceivedProvisionDiscoveryResponse(pP2PInfo, pInformation); - break; - - case P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE\n")); - N63CIndicateNegotiationRequestSendComplete(pP2PInfo, pInformation); - break; - - case P2P_EVENT_RECEIVED_GO_NEGOTIATION_REQUEST: - { - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_GO_NEGOTIATION_REQUEST\n")); - InfoBufLen = 0; - N63CIndicateReceivedGONegotiationRequest(pP2PInfo, pInformation); - if(InfoBufLen) - { - N63C_SendAction_TerminateReq(pP2PInfo->pAdapter); - - if(NULL == N63C_SendAction_GoNegRsp(pAdapter, (DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS *)InfoBuf, n63c_SendP2pRspActionFrameStateCb)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("N63C_SendAction_GoNegRsp failed\n")); - p2p_IndicateActionFrameSendCompleteWithToken(pP2PInfo, P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE, RT_STATUS_FAILURE, NULL, 0, 0); - } - InfoBufLen = 0; - } - } - break; - - case P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE: - { - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE\n")); - N63CIndicateNegotiationResponseSendComplete(pP2PInfo, pInformation); - } - break; - - case P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE\n")); - //N63CIndicateReceivedGONegotiationResponse(pP2PInfo, pInformation); - break; - - case P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE\n")); - N63CIndicateNegotiationConfirmSendComplete(pP2PInfo, pInformation); - break; - - case P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM\n")); - //N63CIndicateReceivedGONegotiationConfirm(pP2PInfo, pInformation); - break; - - case P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE\n")); - N63CIndicateInvitationRequestSendComplete(pP2PInfo, pInformation); - break; - - case P2P_EVENT_RECEIVED_INVITATION_REQUEST: - { - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_INVITATION_REQUEST\n")); - InfoBufLen = 0; - N63CIndicateReceivedInvitationRequest(pP2PInfo, pInformation); - if(InfoBufLen) - { - if(NULL == N63C_SendAction_InvitationRsp(pAdapter, (DOT11_SEND_INVITATION_RESPONSE_PARAMETERS *)InfoBuf, n63c_SendP2pRspActionFrameStateCb)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("N63C_SendAction_InvitationRsp failed\n")); - p2p_IndicateActionFrameSendCompleteWithToken(pP2PInfo, P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE, RT_STATUS_FAILURE, NULL, 0, 0); - } - InfoBufLen = 0; - } - } - break; - - case P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE\n")); - N63CIndicateInvitationResponseSendComplete(pP2PInfo, pInformation); - break; - - case P2P_EVENT_RECEIVED_INVITATION_RESPONSE: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_RECEIVED_INVITATION_RESPONSE\n")); - //N63CIndicateReceivedInvitationResponse(pP2PInfo, pInformation); - break; - - case P2P_EVENT_GO_OPERATING_CHANNEL: - RT_TRACE_F(COMP_INDIC | COMP_P2P, DBG_LOUD, ("P2P_EVENT_GO_OPERATING_CHANNEL\n")); - N63CIndicateGOOperatingChannel(pP2PInfo, pInformation); - break; - - case P2P_EVENT_NONE: - default: - RT_TRACE_F(COMP_P2P, DBG_TRACE, ("EventID (0x%08X) Unrecognized!\n", EventID)); - break; - } -} - - -NDIS_STATUS -N63C_OID_DOT11_WFD_DEVICE_CAPABILITY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_DEVICE_CAPABILITY( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_DEVICE_INFO( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_DEVICE_INFO( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_DISCOVER_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_DISCOVER_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_GET_DIALOG_TOKEN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63C_QUERY_OID_DOT11_WFD_GET_DIALOG_TOKEN( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_ENUM_DEVICE_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63C_QUERY_OID_DOT11_WFD_ENUM_DEVICE_LIST( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63C_QUERY_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63C_QUERY_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N63C_OID_DOT11_WFD_ADDITIONAL_IE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_ADDITIONAL_IE( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_FLUSH_DEVICE_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_FLUSH_DEVICE_LIST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_STOP_DISCOVERY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_STOP_DISCOVERY( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus =N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_INVITATION_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SEND_INVITATION_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_INVITATION_RESPONSE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SEND_INVITATION_RESPONSE( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_DESIRED_GROUP_ID( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_DESIRED_GROUP_ID( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - - -NDIS_STATUS -N63C_OID_DOT11_WFD_START_GO_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_START_GO_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_GROUP_START_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_GROUP_START_PARAMETERS( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_WFD_GROUP_JOIN_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_WFD_GROUP_JOIN_PARAMETERS( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -// -// Note : This OID not define in NDIS_63 . -// It may support in Vista or Win7 futher. -// So it may remove to N6CSet_ , if N6 support !! -// -// -static NDIS_STATUS -N63C_SET_OID_DOT11_OFFLOAD_NETWORK_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - PDOT11_OFFLOAD_NETWORK_LIST_INFO pONLInfo = NULL; - u4Byte Index = 0; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - PMGNT_INFO pMgntInfo = &( pDefaultAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pDefaultAdapter->pNdisCommon; - PRT_NLO_INFO pNLOInfo = &(pMgntInfo->NLOInfo); - PDOT11_OFFLOAD_NETWORK pONList; - u4Byte ChannelIndex = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - pONLInfo = (PDOT11_OFFLOAD_NETWORK_LIST_INFO) InformationBuffer; - - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD , (" ===>N63CSet_OID_DOT11_OFFLOAD_NETWORK_LIST\n") ); - - if( InformationBufferLength < (ULONG)DOT11_MIN_SIZEOF_OFFLOAD_NETWORK_LIST_INFO_REVISION_1) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(DOT11_OFFLOAD_NETWORK_LIST_INFO); - RT_TRACE_F( (COMP_MLME|COMP_OID_SET), DBG_LOUD , ("ndisStatus = NDIS_STATUS_INVALID_LENGTH\n") ); - return ndisStatus; - } - - switch(pONLInfo->ulFlags) - { - case DOT11_NLO_FLAG_STOP_NLO_INDICATION: - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD, ("Set DOT11_NLO_FLAG_STOP_NLO_INDICATION\n")); - break; - case DOT11_NLO_FLAG_SCAN_ON_AOAC_PLATFORM: - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD, ("Set DOT11_NLO_FLAG_SCAN_ON_AOAC_PLATFORM\n")); - break; - case DOT11_NLO_FLAG_SCAN_AT_SYSTEM_RESUME: - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD, ("Set DOT11_NLO_FLAG_SCAN_AT_SYSTEM_RESUME\n")); - break; - default: - break; - } - - pNdisCommon->Oidcounter++; - if( pONLInfo->uNumOfEntries == 0 ) - { - // Stop NLO mode !! - pNLOInfo->NumDot11OffloadNetwork = 0; - pNLOInfo->FastScanIterations = 0; - pNLOInfo->FastScanPeriod = 0; - pNLOInfo->SlowScanPeriod = 0; - pNdisCommon->ScanPeriod = 0; - - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD , (" ===>pONLInfo->uNumOfEntries == 0 \n") ); - return NDIS_STATUS_SUCCESS; - } - else - { - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "NLO INFO: \n", InformationBuffer, sizeof(DOT11_OFFLOAD_NETWORK_LIST_INFO)); - pNLOInfo->NumDot11OffloadNetwork = pONLInfo->uNumOfEntries; - pNLOInfo->FastScanIterations = pONLInfo->FastScanIterations; - pNLOInfo->FastScanPeriod = pONLInfo->FastScanPeriod ; - pNLOInfo->SlowScanPeriod = pONLInfo->SlowScanPeriod ; - - - RT_TRACE(COMP_MLME , DBG_LOUD , (" NumDot11OffloadNetwork : %d\n", pNLOInfo->NumDot11OffloadNetwork) ); - RT_TRACE(COMP_MLME , DBG_LOUD , (" FastScanIterations : %d\n", pNLOInfo->FastScanIterations) ); - RT_TRACE(COMP_MLME , DBG_LOUD , (" FastScanPeriod : %d sec\n", pNLOInfo->FastScanPeriod) ); - RT_TRACE(COMP_MLME , DBG_LOUD , (" SlowScanPeriod : %d sec\n", pNLOInfo->SlowScanPeriod) ); - - pNdisCommon->bNLOActiveScan = TRUE; - pNdisCommon->bFilterHiddenAP = FALSE; - - // Start the NLO scan when the first PlatformHandleNLOnScanRequest is called - pNdisCommon->ScanPeriod = pNLOInfo->FastScanPeriod; - } - - - if( pONLInfo->uNumOfEntries > NATIVE_802_11_MAX_NETWORKOFFLOAD_SIZE) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - return ndisStatus; - } - - - pONList = pONLInfo->offloadNetworkList; - - for( Index = 0 ; Index < pONLInfo->uNumOfEntries ; Index++ ) - { - // Copy SSID - CopySsid( pNLOInfo->dDot11OffloadNetworkList[Index].ssidbuf , - pNLOInfo->dDot11OffloadNetworkList[Index].ssidlen, - pONList[Index].Ssid.ucSSID , - pONList[Index].Ssid.uSSIDLength); - - RT_PRINT_STR(COMP_MLME, DBG_LOUD , ("N63CSet_OID_DOT11_OFFLOAD_NETWORK_LIST : SSID\n"), pNLOInfo->dDot11OffloadNetworkList[Index].ssidbuf, pNLOInfo->dDot11OffloadNetworkList[Index].ssidlen); - - // Set chuiper !! - switch( pONList[Index].UnicastCipher ) - { - case DOT11_CIPHER_ALGO_NONE : - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_NONE; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = 0; - break; - case DOT11_CIPHER_ALGO_WEP40 : - case DOT11_CIPHER_ALGO_WEP104 : - case DOT11_CIPHER_ALGO_WEP: - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_NONE; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = 0x0; - break; - case DOT11_CIPHER_ALGO_TKIP : - if( pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_WPA || - pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_WPA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA_TKIP; - } - else if( pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_RSNA || - pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_RSNA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA2; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA2_TKIP; - }else - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA_TKIP; - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD , (" ===>NLO Not define TKIP\n") ); - } - break; - case DOT11_CIPHER_ALGO_CCMP : - if( pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_WPA || - pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_WPA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA_AES; - } - else if( pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_RSNA || - pONList[Index].AuthAlgo == DOT11_AUTH_ALGO_RSNA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA2; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA2_AES; - } - else - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA2; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA2_AES; - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD , (" ===>NLO Not define AES\n") ); - } - break; - default : - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_NONE; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = 0; - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD , (" ===> Unknow UnicastCipher : %x\n",pONList[Index].UnicastCipher) ); - break; - } - - RT_TRACE(COMP_MLME , DBG_LOUD , (" Seclvl : %d\n", pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl) ); - RT_TRACE(COMP_MLME , DBG_LOUD , (" bPrivacy : %d\n", pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy) ); - RT_TRACE(COMP_MLME , DBG_LOUD , (" chiper : %d\n", pNLOInfo->dDot11OffloadNetworkList[Index].chiper) ); - - // Save channel info - // DOT11_MAX_CHANNEL_HINTS 4 - for( ChannelIndex = 0 ; ChannelIndex < 4 ; ChannelIndex++ ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].channelNumberHit[ChannelIndex] = pONList[Index].Dot11ChannelHints[ChannelIndex].uChannelNumber; - } - - // Show Entry information !! - RT_TRACE( (COMP_MLME|COMP_OID_SET), DBG_LOUD , (" ===> Show NLO info Index (%x):\n",Index) ); - RT_PRINT_STR((COMP_MLME|COMP_OID_SET), DBG_LOUD, (" SSID :\n"), pNLOInfo->dDot11OffloadNetworkList[Index].ssidbuf, pNLOInfo->dDot11OffloadNetworkList[Index].ssidlen); - RT_TRACE( (COMP_MLME|COMP_OID_SET) , DBG_LOUD , ( "chiper : %x \n", pNLOInfo->dDot11OffloadNetworkList[Index].chiper) ) - - } - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_DOT11_OFFLOAD_NETWORK_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - //ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - //if(ndisStatus != NDIS_STATUS_SUCCESS) { - // RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - // break; - //} - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_OFFLOAD_NETWORK_LIST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -static NDIS_STATUS -N63C_SET_OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - /* - #define DOT11_POWER_MGMT_AUTO_MODE_ENABLED_REVISION_1 - #define DOT11_SIZEOF_POWER_MGMT_AUTO_MODE_ENABLED_REVISION_1 - typedef struct _ DOT11_POWER_MGMT_MODE_AUTO_INFO { - NDIS_OBJECT_HEADER Header; - BOOLEAN bEnabled; - } DOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO, * PDOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO; -*/ - PDOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO pPMGAuModInf; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pTargetAdapter); - PMGNT_INFO pMgntInfo = &( pDefaultAdapter->MgntInfo); - - - if( InformationBufferLength < DOT11_SIZEOF_POWER_MGMT_AUTO_MODE_ENABLE_INFO_REVISION_1 ) - { - *BytesNeeded = DOT11_SIZEOF_POWER_MGMT_AUTO_MODE_ENABLE_INFO_REVISION_1; - return NDIS_STATUS_INVALID_LENGTH; - - } - - pPMGAuModInf = (PDOT11_POWER_MGMT_AUTO_MODE_ENABLED_INFO)InformationBuffer; - - - pMgntInfo->bInAutoPowerSavemode = pPMGAuModInf->bEnabled; - - RT_TRACE( COMP_TEST, DBG_LOUD , ("===>OID_DOT11_POWERMGMT_MODE_AUTO_ENABLED = %d \n",pMgntInfo->bInAutoPowerSavemode) ); - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N63C_OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - //ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - //if(ndisStatus != NDIS_STATUS_SUCCESS) { - // RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - // break; - //} - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N63C_SET_OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - - -static NDIS_STATUS -N63C_QUERY_OID_DOT11_POWER_MGMT_MODE_STATUS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_POWER_MGMT_MODE_STATUSINFO pDot11PMStaInfo = NULL; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - - - // This has errors. Please contact CCW. - return NDIS_STATUS_FAILURE; - - - - if( !pMgntInfo->bInAutoPowerSavemode ) - { - pDot11PMStaInfo->PowerSaveMode = dot11_power_mode_active; - pDot11PMStaInfo->uPowerSaveLevel = DOT11_POWER_SAVING_NO_POWER_SAVING; - pDot11PMStaInfo->Reason = dot11_power_mode_reason_no_change; - } - else - { - if(pMgntInfo->dot11PowerSaveMode == eActive) - //if( pPSC->PowerSaveLevel == POWER_SAVING_NO_POWER_SAVING) - { - pDot11PMStaInfo->PowerSaveMode = dot11_power_mode_active; - pDot11PMStaInfo->uPowerSaveLevel = DOT11_POWER_SAVING_NO_POWER_SAVING; - pDot11PMStaInfo->Reason = dot11_power_mode_reason_no_change; - } - else if( pMgntInfo->dot11PowerSaveMode == eMaxPs ) - //else if( pPSC->PowerSaveLevel == POWER_SAVING_MAX_PSP ) - { - pDot11PMStaInfo->PowerSaveMode = dot11_power_mode_powersave; - pDot11PMStaInfo->uPowerSaveLevel = DOT11_POWER_SAVING_MAX_PSP; - pDot11PMStaInfo->Reason = dot11_power_mode_reason_compliant_AP; - } - else if( pMgntInfo->dot11PowerSaveMode == eFastPs ) - //else if( pPSC->PowerSaveLevel == POWER_SAVING_FAST_PSP ) - { - pDot11PMStaInfo->PowerSaveMode = dot11_power_mode_powersave; - pDot11PMStaInfo->uPowerSaveLevel = DOT11_POWER_SAVING_FAST_PSP; - pDot11PMStaInfo->Reason = dot11_power_mode_reason_compliant_AP; - } - //else if(pPSC->PowerSaveLevel == POWER_SAVING_MAXIMUM_LEVEL ) - //{ - // pDot11PMStaInfo->PowerSaveMode = dot11_power_mode_powersave; - // pDot11PMStaInfo->uPowerSaveLevel = DOT11_POWER_SAVING_MAXIMUM_LEVEL; - // pDot11PMStaInfo->Reason = dot11_power_mode_reason_compliant_AP; - //} - else - { - pDot11PMStaInfo->PowerSaveMode = dot11_power_mode_powersave; - pDot11PMStaInfo->uPowerSaveLevel = DOT11_POWER_SAVING_FAST_PSP; - pDot11PMStaInfo->Reason = dot11_power_mode_reason_compliant_AP; - } - } - - RT_TRACE( COMP_TEST, DBG_LOUD , ("===>_DOT11_POWER_MGMT_MODE_STATUS \n") ); - - return ndisStatus; -} - - -NDIS_STATUS -N63C_OID_DOT11_POWER_MGMT_MODE_STATUS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - // Validate if the OID is issued in the correct state and mode - //ndisStatus = N63CValidateOIDCorrectness(pAdapter, NdisRequest); - //if(ndisStatus != NDIS_STATUS_SUCCESS) { - // RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - // break; - //} - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63C_QUERY_OID_DOT11_POWER_MGMT_MODE_STATUS( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; -} - -NDIS_STATUS -N63C_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - FunctionIn(COMP_OID_SET | COMP_OID_QUERY); - - do - { - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N63C_QUERY_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_TRACE((COMP_OID_SET | COMP_OID_QUERY), DBG_LOUD, ("ndisStatus: %d\n", ndisStatus)); - - FunctionOut(COMP_OID_SET | COMP_OID_QUERY); - - return ndisStatus; - -} diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.h b/network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.h deleted file mode 100644 index 39e4b17f..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N63C_Oids.h +++ /dev/null @@ -1,235 +0,0 @@ - -#pragma once - -#ifndef _N63C_OIDS_H - #define _N63C_OIDS_H - -// ------------------------------------------------------------------------------------------------ -// Definitions -// ------------------------------------------------------------------------------------------------ - -// Set the correct state which the OID can be accepted -#define STATE_DEVICE_INIT BIT0 -#define STATE_GO_INIT BIT1 -#define STATE_GO_OP BIT2 -#define STATE_CLIENT_INIT BIT3 -#define STATE_CLIENT_OP BIT4 - -typedef ULONG OID_CORRECT_STATE; - - -// Forward Declaration -typedef enum _P2P_ROLE P2P_ROLE, * PP2P_ROLE; - -// For resetting the Wifi-Direct port -typedef enum _RESET_LEVEL -{ - RESET_LEVEL_P2P_ONLY = 0, - RESET_LEVEL_FULL -}RESET_LEVEL, * PRESET_LEVEL; - -//-------------------------------------------------------------------------------------- -// Public Functions -//-------------------------------------------------------------------------------------- - -VOID -N63CValidateRoleOfWifiDirectPorts( - PADAPTER pAdapter -); - -VOID -N63CResetNetworkListOffload( - PADAPTER pAdapter -); - -NDIS_STATUS -N63CResetWifiDirectPorts( - PADAPTER pAdapter, - P2P_ROLE PortRole, - RESET_LEVEL ResetLevel -); - - -VOID -N63CIndicateP2PEvent( - PVOID pP2PInfo, - u4Byte EventID, - PMEMORY_BUFFER pInformation -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_DEVICE_CAPABILITY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_DEVICE_INFO( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_DISCOVER_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_STOP_DISCOVERY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_GET_DIALOG_TOKEN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_ENUM_DEVICE_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_ADDITIONAL_IE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_FLUSH_DEVICE_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_INVITATION_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_INVITATION_RESPONSE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_DESIRED_GROUP_ID( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_START_GO_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_GROUP_START_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - - -NDIS_STATUS -N63C_OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_WFD_GROUP_JOIN_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_OFFLOAD_NETWORK_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_DOT11_POWER_MGMT_MODE_STATUS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N63C_OID_PACKET_COALESCING_FILTER_MATCH_COUNT( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.c b/network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.c deleted file mode 100644 index 0d15aee0..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.c +++ /dev/null @@ -1,1335 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: N63C_SendAction.c -// Description: -// -// Author: haich -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" -#include "N63C_SendAction.h" - -#if WPP_SOFTWARE_TRACE -#include "N63C_SendAction.tmh" -#endif - -#include "N63C_SendAction.h" -#include "P2P_Internal.h" - -#define N63C_SEND_ACTION_POST_ACK_DWELL_TIME_MS 300 -#define N63C_SEND_ACTION_RETRY_COUNT 15 -#define N63C_SEND_ACTION_RETRY_INTERMITTENT_TIME_MS 300 -#define N63C_SEND_ACTION_RETRY_INTERMITTENT_TIME_HCT_MS 0 - -//----------------------------------------------------------------------------- -// Local: helper -//----------------------------------------------------------------------------- - -static -P2P_FRAME_TYPE -n63c_SendAction_XlatFrameType( - IN N63C_P2P_ACTION_FRAME_TYPE n63cFType - ) -{ - if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST == n63cFType) - return P2P_FID_GO_NEG_REQ; - - if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == n63cFType) - return P2P_FID_GO_NEG_RSP; - - if(N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == n63cFType) - return P2P_FID_GO_NEG_CONF; - - if(N63C_P2P_ACTION_FRAME_INVITATION_REQUEST == n63cFType) - return P2P_FID_INV_REQ; - - if(N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE == n63cFType) - return P2P_FID_INV_RSP; - - if(N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST == n63cFType) - return P2P_FID_PD_REQ; - - if(N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == n63cFType) - return P2P_FID_PD_RSP; - - return P2P_FID_MAX; -} - -static -VOID -n63c_SendAction_InitCtx( - IN N63C_SEND_ACTION_CTX *ctx, - IN N63C_P2P_ACTION_FRAME_TYPE reqType, - IN N63C_P2P_ACTION_FRAME_TYPE rspType, - IN ADAPTER *pAdapter, - IN const u1Byte *da, - IN BOOLEAN bGo, - IN u1Byte token, - IN u1Byte oldToken, - IN ULONG timeout, - IN VOID *offChnlTxReq, - IN u1Byte compEvent - ) -{ - ctx->reqType = reqType; - ctx->rspType = rspType; - ctx->pAdapter = pAdapter; - cpMacAddr(ctx->da, da); - ctx->bGo = bGo; - ctx->token = token; - ctx->oldToken = oldToken; - ctx->timeout = timeout; - ctx->req = offChnlTxReq; - ctx->compEvent = compEvent; -} - -static -VOID * -n63c_SendAction_PrepareReq( - IN ADAPTER *pAdapter, - IN const u1Byte *txMac, - IN u1Byte chnl, - IN u4Byte timeout - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - FRAME_BUF *probe = NULL; - - // off chnl tx req - if(NULL == (req = OffChnlTx_AllocReq(pAdapter, txMac, NULL, NULL, sizeof(*ctx)))) - { - return NULL; - } - - // construct probe req - probe = OffChnlTx_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probe, info); - - // data rate for probe and tx frame - OffChnlTx_SetDataRate(req, MGN_6M); - - // prepare custom scan req - OffChnlTx_SetTimeBound(req, timeout); - OffChnlTx_SetPostAckDwellTime(req, N63C_SEND_ACTION_POST_ACK_DWELL_TIME_MS); - OffChnlTx_SetProbeEnabled(req, TRUE); - OffChnlTx_SetTxChnl(req, chnl); - OffChnlTx_SetTxAttemptCount(req, N63C_SEND_ACTION_RETRY_COUNT); - OffChnlTx_SetRetryIntermittentTime(req, - pAdapter->bInHctTest - ? N63C_SEND_ACTION_RETRY_INTERMITTENT_TIME_HCT_MS - : N63C_SEND_ACTION_RETRY_INTERMITTENT_TIME_MS - ); - - return req; -} - -static -RT_STATUS -n63c_SendAction_IssueReq( - IN ADAPTER *pAdapter, - IN VOID *req, - IN const char *typeInfo - ) -{ - return OffChnlTx_IssueReq(pAdapter, req, typeInfo); -} - -static -u1Byte -n63c_SendAction_GetTxChnl( - IN P2P_INFO *info, - IN const u1Byte *mac, - IN P2P_DEV_TYPE dtype, - IN P2P_FRAME_TYPE ftype - ) -{ - const P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte txChnl = 0; - - p2p_DevList_Lock(&info->devList); - - do - { - // retrieve peer channel - if(NULL == (pDev = p2p_DevList_Find(&info->devList, mac, dtype))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - return 0; - } - - if(NULL == pDev->rxFrames[ftype]) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("no frame type: %u frame from the device\n", ftype)); - return 0; - } - - txChnl = pDev->rxFrames[ftype]->channel; - }while(FALSE); - - p2p_DevList_Unlock(&info->devList); - - return txChnl; -} - -static -u1Byte -n63c_SendAction_GetRxActionFrameToken( - IN P2P_INFO *info, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type, - IN P2P_FRAME_TYPE ftype - ) -{ - const P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte token = 0; - - p2p_DevList_Lock(&info->devList); - - do - { - // retrieve peer channel - if(NULL == (pDev = p2p_DevList_Find(&info->devList, mac, type))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - break; - } - - if(NULL == pDev->rxFrames[ftype]) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("no probe rsp frame from the device\n")); - break; - } - - token = pDev->rxFrames[ftype]->token; - }while(FALSE); - - p2p_DevList_Unlock(&info->devList); - - return token; -} - -//----------------------------------------------------------------------------- -// Exported: prepare data -//----------------------------------------------------------------------------- -static -NDIS_STATUS -n63c_SendAction_PdReq_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const P2P_DEV_LIST_ENTRY *pDev = NULL; - - if(param->bUseGroupID) - { - pDev = p2p_DevList_GetGo(&info->devList, param->PeerDeviceAddress); - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "peer GO bssid:\n", pDev->mac); - } - else - { - pDev = p2p_DevList_Get(&info->devList, param->PeerDeviceAddress, P2P_DEV_TYPE_DEV); - } - - if(NULL == pDev) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - return NDIS_STATUS_INVALID_STATE; - } - - info->ProvisionRequestGroupCapability = param->GroupCapability; - - if(param->bUseGroupID) - { - info->bProvisionRequestUseGroupID = TRUE; - - // dev addr - cpMacAddr(info->ProvisionRequestGroupIDDeviceAddress, param->PeerDeviceAddress); - - // ssid - info->uProvisionRequestGroupIDSSIDLength = (u1Byte)param->GroupID.SSID.uSSIDLength; - PlatformMoveMemory( - info->ProvisionRequestGroupIDSSID, - param->GroupID.SSID.ucSSID, - param->GroupID.SSID.uSSIDLength - ); - } - else - { - info->bProvisionRequestUseGroupID = FALSE; - } - - if(param->uIEsLength) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_PROVISION_DISCOVERY_REQUEST, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - // the ProvisionDiscoveryContext - cpMacAddr(info->ProvisionDiscoveryContext.devAddr, param->PeerDeviceAddress); - if(param->bUseGroupID) - { - info->ProvisionDiscoveryContext.go = TRUE; - cpMacAddr(info->ProvisionDiscoveryContext.goBssid, pDev->mac); - } - else - { - info->ProvisionDiscoveryContext.go = FALSE; - } - - // token - info->DialogToken = (u1Byte)param->DialogToken; - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -n63c_SendAction_PdRsp_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // addr - cpMacAddr(info->ProvisionResponseReceiverDeviceAddress, param->ReceiverDeviceAddress); - - // token - info->ProvisionResponseDialogToken = param->DialogToken; - - // add ie - if(param->uIEsLength) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_PROVISION_DISCOVERY_RESPONSE, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - // token - info->DialogToken = (u1Byte)param->DialogToken; - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -n63c_SendAction_InvitationReq_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_INVITATION_REQUEST_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_INVITATION_REQUEST - // ref: Wdi_Xlat_AllocSendInvitationReqOid - // - - info->InvitationContext.InvitorRole = (param->bLocalGO) ? P2P_GO : P2P_DEVICE; - info->InvitationContext.bPersistentInvitation = (1 == param->InvitationFlags.InvitationType); - info->InvitationContext.DialogToken = param->DialogToken; - //info->InvitationContext.InvitedDevice - info->InvitationContext.bToSendInvitationReqOnProbe = TRUE; - info->InvitationContext.bToUseDeviceDiscoverability = FALSE; - info->InvitationContext.Status = 0; - info->InvitationContext.bInvitor = TRUE; - PlatformMoveMemory( - info->InvitationContext.SsidBuf, - param->GroupID.SSID.ucSSID, - param->GroupID.SSID.uSSIDLength - ); - info->InvitationContext.SsidLen = (u1Byte)param->GroupID.SSID.uSSIDLength; - cpMacAddr(info->InvitationContext.GroupBssid, param->GroupBSSID); - cpMacAddr(info->InvitationContext.GODeviceAddress, param->GroupID.DeviceAddress); - info->InvitationContext.OpChannel = info->OperatingChannel; - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->MinimumConfigTimeout.GOTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->MinimumConfigTimeout.ClientTimeout; - - // grp bssid - if(param->bUseGroupBSSID) - { - info->bInvitationRequestUseGroupBSSID = TRUE; - cpMacAddr(info->InvitationRequestGroupBSSID, param->GroupBSSID); - } - else - { - info->bInvitationRequestUseGroupBSSID = FALSE; - } - - // op chnl - // NOTE: We currently only use our pP2PInfo->OperatingChannel instead of the following OS-given value - if(param->bUseSpecifiedOperatingChannel) - { - info->bInvitationRequestUseSpecifiedOperatingChannel = TRUE; - info->uInvitationRequestOperatingChannelNumber = (u1Byte)param->OperatingChannel.ChannelNumber; - - //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("use specific chnl: %u\n", info->uInvitationRequestOperatingChannelNumber)); - } - else - { - info->bInvitationRequestUseSpecifiedOperatingChannel = FALSE; - info->uInvitationRequestOperatingChannelNumber = 0; - } - - // local go - info->bInvitationRequestLocalGO = param->bLocalGO; - - // token - info->DialogToken = (u1Byte)param->DialogToken; - - // add ie - if(param->uIEsOffset) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_INVITATION_REQUEST, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -n63c_SendAction_InvitationRsp_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_INVITATION_RESPONSE_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - // - - // addr - cpMacAddr(info->InvitationResponseReceiverDeviceAddress, param->ReceiverDeviceAddress); - - // token - info->InvitationResponseDialogToken = param->DialogToken; - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->MinimumConfigTimeout.GOTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->MinimumConfigTimeout.ClientTimeout; - - // status - info->InvitationResponseStatus = param->Status; - - // grp bssid - if(param->bUseGroupBSSID) - { - info->bInvitationResponseUseGroupBSSID = TRUE; - cpMacAddr(info->InvitationResponseGroupBSSID, param->GroupBSSID); - } - else - { - info->bInvitationResponseUseGroupBSSID = FALSE; - } - - // op chnl - if(param->bUseSpecifiedOperatingChannel) - { - info->bInvitationResponseUseSpecifiedOperatingChannel = TRUE; - info->uInvitationResponseOperatingChannelNumber = (u1Byte)param->OperatingChannel.ChannelNumber; - } - else - { - info->bInvitationResponseUseSpecifiedOperatingChannel = FALSE; - info->uInvitationResponseOperatingChannelNumber = 0; - } - - // add ie - if(param->uIEsLength) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_INVITATION_RESPONSE, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - return status; -} - -static -NDIS_STATUS -n63c_SendAction_GoNegReq_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osWpsAttr, osDpid; - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST - // ref: wdi_SendAction_GoNegReq_PrepareData - // - - // config timeout - info->GOConfigurationTimeout = param->MinimumConfigTimeout.GOTimeout; - info->ClientConfigurationTimeout = param->MinimumConfigTimeout.ClientTimeout; - - // capability - info->NegotiationRequestGroupCapability = param->GroupCapability; - info->NegotiationRequestGroupCapability = param->GroupCapability & ((u1Byte)(~gcP2PGroupOwner)); // Workaround since the pParameters->GroupCapability is wrong - - // go intent - info->GOIntent = - ((param->GroupOwnerIntent.Intent << 1) - | param->GroupOwnerIntent.TieBreaker); - - // intf addr - cpMacAddr(info->InterfaceAddress, param->IntendedInterfaceAddress); - - // add ie - if(param->uIEsLength) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_GO_NEGOTIATION_REQUEST, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - // Update the internal WPS Device Password ID attribute ---------------------------------------------------------- - osWpsAttr.Octet = (u1Byte *)param + param->uIEsOffset + 6; // Skip (0xDD, 0x??, 0x00, 0x50, 0xF2, 0x04) 6-Byte Header - osWpsAttr.Length = (u2Byte)param->uIEsLength - 6; // Skip (0xDD, 0x??, 0x00, 0x50, 0xF2, 0x04) 6-Byte Header - - osDpid = P2PWpsIEGetAttribute(osWpsAttr, TRUE, P2P_WPS_ATTR_TAG_DEVICE_PASSWORD_ID); - - if(osDpid.Length == 2) - { - info->WpsDevPasswdId = (WPS_DEVICE_PASSWD_ID) N2H2BYTE(*((pu2Byte)(osDpid.Octet))); - } - - // connection context - info->ConnectionContext.Status = P2P_STATUS_SUCCESS; - info->ConnectionContext.DialogToken = param->DialogToken; - info->ConnectionContext.bGoingToBeGO = FALSE; - - // token - info->DialogToken = (u1Byte)param->DialogToken; - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -n63c_SendAction_GoNegRsp_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - // - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->MinimumConfigTimeout.GOTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->MinimumConfigTimeout.ClientTimeout; - - // addr - cpMacAddr(info->NegotiationResponsePeerDeviceAddress, param->PeerDeviceAddress); - - // token - info->NegotiationResponseDialogToken = param->DialogToken; - - // status - info->NegotiationResponseStatus = param->Status; - - // go intent - info->GOIntent = - ((param->GroupOwnerIntent.Intent << 1) - | param->GroupOwnerIntent.TieBreaker); - - // intf addr - cpMacAddr(info->InterfaceAddress, param->IntendedInterfaceAddress); - - // gc - info->NegotiationResponseGroupCapability = param->GroupCapability & ((u1Byte)(~gcP2PGroupOwner)); // Workaround since the pParameters->GroupCapability is wrong - - // grp id - if(param->bUseGroupID) - { - info->bNegotiationResponseUseGroupID = TRUE; - - // dev addr - cpMacAddr(info->NegotiationResponseGroupIDDeviceAddress, param->GroupID.DeviceAddress); - - // ssid - info->uNegotiationResponseGroupIDSSIDLength = (u1Byte)param->GroupID.SSID.uSSIDLength; - PlatformMoveMemory( - info->NegotiationResponseGroupIDSSID, - param->GroupID.SSID.ucSSID, - param->GroupID.SSID.uSSIDLength - ); - } - else - { - info->bNegotiationResponseUseGroupID = FALSE; - } - - // add ie - if(param->uIEsLength) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_GO_NEGOTIATION_RESPONSE, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - // Update the state machine immediately - if(P2P_SC_SUCCESS == param->Status) - { - info->State = P2P_STATE_GO_NEGO_RSP_SEND; - } - else - { - info->State = P2P_STATE_GO_NEGO_COMPLETE; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("update P2P state to 0x%x\n", info->State)); - PlatformCancelTimer(info->pAdapter, &info->P2PMgntTimer); - PlatformSetTimer(info->pAdapter, &info->P2PMgntTimer, 0); - - return status; -} - -static -NDIS_STATUS -n63c_SendAction_GoNegConfirm_PrepareData( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osWpsAttr, osDpid; - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM - // - - cpMacAddr(info->NegotiationConfirmPeerDeviceAddress, param->PeerDeviceAddress); - info->NegotiationConfirmDialogToken = param->DialogToken; - info->NegotiationConfirmStatus = param->Status; - - info->NegotiationConfirmGroupCapability = param->GroupCapability; - info->NegotiationConfirmGroupCapability = param->GroupCapability & ((u1Byte)(~gcP2PGroupOwner)); // Workaround since the pParameters->GroupCapability is wrong - - if(param->bUseGroupID) - { - info->bNegotiationConfirmUseGroupID = TRUE; - cpMacAddr(info->NegotiationConfirmGroupIDDeviceAddress, param->GroupID.DeviceAddress); - info->uNegotiationConfirmGroupIDSSIDLength = (u1Byte)param->GroupID.SSID.uSSIDLength; - PlatformMoveMemory( - info->NegotiationConfirmGroupIDSSID, - param->GroupID.SSID.ucSSID, - info->uNegotiationConfirmGroupIDSSIDLength - ); - } - else - { - info->bNegotiationConfirmUseGroupID = FALSE; - } - - // add ie - if(param->uIEsLength) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_GO_NEGOTIATION_CONFIRM, - param->uIEsLength, - (u1Byte *)param + param->uIEsOffset - ); - } - - // token - info->DialogToken = (u1Byte)param->DialogToken; - - return status; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -NDIS_STATUS -N63C_SendAction_TerminateReq( - IN ADAPTER *pAdapter - ) -{ - return OffChnlTx_AbortReq(pAdapter); -} - -u1Byte -N63C_SendAction_UpdateTxFrameDialogToken( - IN VOID *req, - IN ADAPTER *pAdapter, - IN N63C_P2P_ACTION_FRAME_TYPE frameType - ) -{ - FRAME_BUF *frame = OffChnlTx_GetTxFrameBuf(req); - u1Byte token = 0; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - u1Byte *devAddr = NULL; - P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte *mac = NULL; - P2P_DEV_TYPE devType = P2P_DEV_TYPE_LEGACY; - - RT_ASSERT(frame, ("%s(): buf is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN + 1 <= FrameBuf_Length(frame), - ("%s(): invalid frame length: %u\n", __FUNCTION__, FrameBuf_Length(frame))); - - // determine dev type - if(N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST == frameType) - { - devType = info->bProvisionRequestUseGroupID ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV; - } - else - { - devType = P2P_DEV_TYPE_DEV; - } - - // get the previouse token - token = *(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - // increase token - token++; - if(0 == token) - token = 1; - - // write to the sending frame - WriteEF1Byte(FrameBuf_MHead(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN, token); - - // update to the p2p dev list - devAddr = Frame_Addr1(frame->os); - - if(P2P_DEV_TYPE_GO == devType && NULL != (pDev = p2p_DevList_GetGo(&info->devList, devAddr))) - { - mac = pDev->mac; - } - else - { - if(P2P_DEV_TYPE_GO == devType) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("bProvisionRequestUseGroupID is set but can't find the GO in dev list\n")); - } - - mac = devAddr; - } - - p2p_DevList_TxUpdate(&info->devList, - n63c_SendAction_XlatFrameType(frameType), - mac, - devType, - frame, - token, - OffChnlTx_GetTxChnl(req)); - - info->DialogToken = token; - - return token; -} - -RT_STATUS -N63C_SendAction_SkipProbeTemporarilly( - IN VOID *req - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - RT_ASSERT(req, ("%s(): req is NULL!!!\n", __FUNCTION__)); - - status = OffChnlTx_SkipProbeTemporarilly(req); - - return status; -} - -VOID * -N63C_SendAction_PdReq( - IN ADAPTER *pAdapter, - IN DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte txChnl = 0; - P2P_DEV_TYPE devType = P2P_DEV_TYPE_DEV; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_PdReq_PrepareData(pAdapter, param))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to prepare data\n")); - return NULL; - } - - // retrieve peer channel - if(param->bUseGroupID) - { - pDev = p2p_DevList_GetGo(&info->devList, param->PeerDeviceAddress); - devType = P2P_DEV_TYPE_GO; - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "peer GO bssid:\n", pDev->mac); - } - else - { - pDev = p2p_DevList_Get(&info->devList, param->PeerDeviceAddress, P2P_DEV_TYPE_DEV); - devType = P2P_DEV_TYPE_DEV; - } - - if(NULL == pDev) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - return NULL; - } - - if(NULL == pDev->rxFrames[P2P_FID_PROBE_RSP]) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("no probe rsp frame from the device\n")); - return NULL; - } - - txChnl = pDev->rxFrames[P2P_FID_PROBE_RSP]->channel; - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, pDev->mac, txChnl, param->uSendTimeout))) - { - return NULL; - } - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST, - N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE, - pAdapter, - pDev->mac, - (P2P_DEV_TYPE_GO == devType) ? TRUE : FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE - ); - - // flush action frames in dev list so we don't drop frames because of dialog token mismatch - p2p_DevList_FlushActionFrames(&info->devList, pDev->mac, pDev->type); - - // construct pd req - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_PDReq(info, frame, param->PeerDeviceAddress, param->DialogToken, 0); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_PD_REQ, - pDev->mac, - pDev->type, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-frame-pd-req"); - - return req; -} - -VOID * -N63C_SendAction_PdRsp( - IN ADAPTER *pAdapter, - IN DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - // retrieve peer mac/channel - txMac = param->ReceiverDeviceAddress; - if(0 == (txChnl = n63c_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_PD_REQ))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_PdRsp_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->uSendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - OffChnlTx_SetShtPostAckDwellOnPositivelyAcked(req, TRUE); - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE, - N63C_P2P_ACTION_FRAME_MAX_VALUE, - pAdapter, - param->ReceiverDeviceAddress, - FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_PDRsp(info, param->DialogToken, NULL, 0, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_PD_RSP, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-pd-rsp"); - - return req; -} - -VOID * -N63C_SendAction_InvitationReq( - IN ADAPTER *pAdapter, - IN DOT11_SEND_INVITATION_REQUEST_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - u1Byte txChnl = 0; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_InvitationReq_PrepareData(pAdapter, param))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to prepare data\n")); - return NULL; - } - - // retrieve peer channel - if(0 == (txChnl = n63c_SendAction_GetTxChnl(info, param->PeerDeviceAddress, P2P_DEV_TYPE_DEV, P2P_FID_PROBE_RSP))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, param->PeerDeviceAddress, txChnl, param->uSendTimeout))) - { - return NULL; - } - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_INVITATION_REQUEST, - N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE, - pAdapter, - param->PeerDeviceAddress, - FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE - ); - - // construct pd req - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_InvitationReq(info, frame, param->PeerDeviceAddress, param->DialogToken); - - // flush action frames in dev list so we don't remember old frames from previous connections - p2p_DevList_FlushActionFrames(&info->devList, param->PeerDeviceAddress, P2P_DEV_TYPE_DEV); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_INV_REQ, - param->PeerDeviceAddress, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-frame-invitation-req"); - - return req; -} - -VOID * -N63C_SendAction_InvitationRsp( - IN ADAPTER *pAdapter, - IN DOT11_SEND_INVITATION_RESPONSE_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - // retrieve peer mac/channel - txMac = param->ReceiverDeviceAddress; - if(0 == (txChnl = n63c_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_INV_REQ))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_InvitationRsp_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->uSendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - OffChnlTx_SetShtPostAckDwellOnPositivelyAcked(req, TRUE); - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE, - N63C_P2P_ACTION_FRAME_MAX_VALUE, - pAdapter, - param->ReceiverDeviceAddress, - FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_InvitationRsp(info, param->DialogToken, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_INV_RSP, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-frame-invitation-rsp"); - - return req; -} - -VOID * -N63C_SendAction_GoNegReq( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - u1Byte txChnl = 0; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_GoNegReq_PrepareData(pAdapter, param))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to prepare data\n")); - return NULL; - } - - // retrieve peer channel - if(0 == (txChnl = n63c_SendAction_GetTxChnl(info, param->PeerDeviceAddress, P2P_DEV_TYPE_DEV, P2P_FID_PROBE_RSP))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, param->PeerDeviceAddress, txChnl, param->uSendTimeout))) - { - return NULL; - } - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE, - pAdapter, - param->PeerDeviceAddress, - FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE - ); - - // construct pd req - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_GoNegReq(info, frame, param->PeerDeviceAddress, param->DialogToken); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_GO_NEG_REQ, - param->PeerDeviceAddress, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-frame-go-neg-req"); - - return req; -} - -VOID * -N63C_SendAction_GoNegRsp( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - // retrieve peer mac/channel - txMac = param->PeerDeviceAddress; - if(0 == (txChnl = n63c_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_GO_NEG_REQ))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_GoNegRsp_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->uSendTimeout))) - { - return NULL; - } - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM, - pAdapter, - param->PeerDeviceAddress, - FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_GoNegRsp(info, param->DialogToken, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_GO_NEG_RSP, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-frame-go-rsp"); - - return req; -} - -VOID * -N63C_SendAction_GoNegConfirm( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txToken = 0; - u1Byte txChnl = 0; - VOID *req = NULL; - N63C_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - // retrieve peer mac/channel - txMac = param->PeerDeviceAddress; - if(0 == (txChnl = n63c_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_GO_NEG_RSP))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // get go neg rsp token, to be used in the go neg conf - if(0 == (txToken = n63c_SendAction_GetRxActionFrameToken(info, param->PeerDeviceAddress, P2P_DEV_TYPE_DEV, P2P_FID_GO_NEG_RSP))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("failed to get go neg rsp token\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = n63c_SendAction_GoNegConfirm_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = n63c_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->uSendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - OffChnlTx_SetShtPostAckDwellOnPositivelyAcked(req, TRUE); - - // setup cb - ctx = (N63C_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - n63c_SendAction_InitCtx(ctx, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM, - N63C_P2P_ACTION_FRAME_MAX_VALUE, - pAdapter, - param->PeerDeviceAddress, - FALSE, - param->DialogToken, - oldToken, - param->uSendTimeout, - req, - P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_GoNegConf(info, txToken, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_GO_NEG_CONF, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - n63c_SendAction_IssueReq(pAdapter, req, "n63c-send-p2p-action-frame-go-confirm"); - - return req; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.h b/network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.h deleted file mode 100644 index 427e6865..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N63C_SendAction.h +++ /dev/null @@ -1,121 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: N63C_SendAction.h -// Description: -// -// Author: haich -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_N63C_SEND_ACTION_H -#define __INC_N63C_SEND_ACTION_H - - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- - -typedef -VOID -(*N63C_SEND_ACTION_STATE_CB) -( - IN VOID *req, - IN int state, - IN VOID *pCtx -); - -typedef enum _N63C_P2P_ACTION_FRAME_TYPE -{ - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST = 1, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE = 2, - N63C_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM = 3, - N63C_P2P_ACTION_FRAME_INVITATION_REQUEST = 4, - N63C_P2P_ACTION_FRAME_INVITATION_RESPONSE = 5, - N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST = 6, - N63C_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE = 7, - N63C_P2P_ACTION_FRAME_MAX_VALUE = 0xFFFFFFFF -}N63C_P2P_ACTION_FRAME_TYPE; - -typedef struct _N63C_SEND_ACTION_CTX -{ - N63C_P2P_ACTION_FRAME_TYPE reqType; // type of the sending frame - N63C_P2P_ACTION_FRAME_TYPE rspType; // expected response frame to the sending frame - ADAPTER *pAdapter; // the adapter - u1Byte da[6]; // destination of the sending frame - BOOLEAN bGo; // specifies if the target device is a P2P GO - u1Byte token; // the dialog token specified by the OS to be used - u1Byte oldToken; // the original Dialog Token in P2PInfo - ULONG timeout; // time bound for sending the action frame - VOID *req; // the corresp. off chnl tx req - u1Byte compEvent; // corresp. complete event -}N63C_SEND_ACTION_CTX; - -//----------------------------------------------------------------------------- -// Function -//----------------------------------------------------------------------------- -NDIS_STATUS -N63C_SendAction_TerminateReq( - IN ADAPTER *pAdapter - ); - -u1Byte -N63C_SendAction_UpdateTxFrameDialogToken( - IN VOID *req, - IN ADAPTER *pAdapter, - IN INT frameType - ); - -RT_STATUS -N63C_SendAction_SkipProbeTemporarilly( - IN VOID *req - ); - -VOID * -N63C_SendAction_PdReq( - IN ADAPTER *pAdapter, - IN DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -N63C_SendAction_PdRsp( - IN ADAPTER *pAdapter, - IN DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -N63C_SendAction_InvitationReq( - IN ADAPTER *pAdapter, - IN DOT11_SEND_INVITATION_REQUEST_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -N63C_SendAction_InvitationRsp( - IN ADAPTER *pAdapter, - IN DOT11_SEND_INVITATION_RESPONSE_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -N63C_SendAction_GoNegReq( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -N63C_SendAction_GoNegRsp( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -N63C_SendAction_GoNegConfirm( - IN ADAPTER *pAdapter, - IN DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS *param, - IN N63C_SEND_ACTION_STATE_CB stateCb - ); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.c b/network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.c deleted file mode 100644 index afbfb4f0..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.c +++ /dev/null @@ -1,1647 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: N6C_Init.c -// Description: NDIS6.x common function for initialization. -// -// Author: rcnjko -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" -#include "802_11_OID.h" -#include "RegCommon.h" - -#if WPP_SOFTWARE_TRACE -#include "N6C_Init.tmh" -#endif - -NDIS_STATUS -CopyFromUnicodeToOS( - UCHAR *pointer, - UNICODE_STRING *uniStr, - USHORT copyLen) -{ - int s; - OCTET_STRING *os = (OCTET_STRING *)pointer; - - for(s=0; sOctet[s] = (UCHAR)uniStr->Buffer[s]; - } - - - os->Length = copyLen; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -CopyFromUnicodeToString( - UCHAR *pointer, - UNICODE_STRING *uniStr, - USHORT copyLen) -{ - int s; - for(s=0; sBuffer[s]; - } - return NDIS_STATUS_SUCCESS; -} - -// for Decoding WEP key -VOID -RegistryDecode( - unsigned char *in, - unsigned char *out, - int maxdecode) -{ - int len; - int i,j=2; - unsigned long key; - unsigned char codechar; - - key=((unsigned long)(in[0]>'9'?in[0]-'A'+10:in[0]-'0'))*16+(in[1]>'9'?in[1]-'A'+10:in[1]-'0'); - - codechar=(unsigned char)(((unsigned long)(in[j]>'9'?in[j]-'A'+10:in[j]-'0'))*16+(in[j+1]>'9'?in[j+1]-'A'+10:in[j+1]-'0')); - len=(unsigned char)(((unsigned long)codechar)^((key*789)&0xff)); - j+=2; - - for(i=0;i256) - key=0; - codechar=(unsigned char)(((unsigned long)(in[j]>'9'?in[j]-'A'+10:in[j]-'0'))*16+(in[j+1]>'9'?in[j+1]-'A'+10:in[j+1]-'0')); - out[i]=(unsigned char)(((unsigned long)codechar)^((key*789)&0xff)); - j+=2; - } - for(j=0;j<(i>>1);j++) - out[j]=(unsigned char)(((unsigned long)(out[j*2]>'9'?out[j*2]-'A'+10:out[j*2]-'0'))*16+(out[j*2+1]>'9'?out[j*2+1]-'A'+10:out[j*2+1]-'0')); - //out[i++]=0; -} - -UCHAR * -StringToHex( - char *in, - int inlen, - UCHAR *out, - int outlen, - BOOLEAN IsNum) -{ - #define Hex2Num(n) ( ((n)>='a'&&(n)<='z') ? ( (n)-'a'+10 ):( (n)>='A'? (n)-'A'+10:((n>'0')?(n)-'0':0) ) ) - int i,j; - memset(out,0,outlen); - -/* if(in[0] == 0) - { - return out; - } -*/ - if(IsNum) - { - for(i=inlen-1,j=0;i>=0 && j0) - { - out[j]=Hex2Num(in[i-1]); - out[j]<<=4; - } - out[j++]+=Hex2Num(in[i]); - } - } - else - { - for(i=inlen-1,j=outlen-1;i>=0 && j>=0;i-=2) - { - if(i>0) - { - out[j]=Hex2Num(in[i-1]); - out[j]<<=4; - } - out[j--]+=Hex2Num(in[i]); - } - } - - return out; -} - -// -// Translate from NDIS_802_11_POWER_MODE to RT_PS_MODE. -// 2005.02.15, by rcnjko. -// -int -TranslateNdisPsToRtPs( - IN NDIS_802_11_POWER_MODE ndisPsMode - ) -{ - RT_PS_MODE rtPsMode; - - switch(ndisPsMode) - { - case Ndis802_11PowerModeCAM: - rtPsMode = eActive; - break; - case Ndis802_11PowerModeMAX_PSP: - rtPsMode = eMaxPs; - break; - case Ndis802_11PowerModeFast_PSP: - rtPsMode = eFastPs; - break; - default: - RT_TRACE(COMP_DBG, DBG_SERIOUS, ("TranslateNdisPsToRtPs(): Unknown ndisPsMode: 0x%X !!!\n", ndisPsMode)); - rtPsMode = eActive; - break; - } - - return rtPsMode; -} - -NDIS_STATUS -N6OpenConfigurationHandle( - IN PADAPTER pAdapter, - IN PNDIS_HANDLE pConfigurationHandle - ) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_CONFIGURATION_OBJECT ConfigObject; - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - PlatformZeroMemory(&ConfigObject, sizeof(NDIS_CONFIGURATION_OBJECT)); - - N6_ASSIGN_OBJECT_HEADER( - ConfigObject.Header, - NDIS_OBJECT_TYPE_CONFIGURATION_OBJECT, - NDIS_CONFIGURATION_OBJECT_REVISION_1, - sizeof(NDIS_CONFIGURATION_OBJECT)); - - ConfigObject.NdisHandle = pAdapter->pNdisCommon->hNdisAdapter; - ConfigObject.Flags = 0; - - Status = NdisOpenConfigurationEx(&ConfigObject, &ConfigurationHandle); - if (Status != NDIS_STATUS_SUCCESS) - { - return Status; - } - - *pConfigurationHandle = ConfigurationHandle; - - return Status; -} - -VOID -N6CloseConfigurationHandle( - IN NDIS_HANDLE ConfigurationHandle - ) -{ - NdisCloseConfiguration(ConfigurationHandle); -} - -NDIS_STATUS -N6ReadCommonRegistry( - IN PADAPTER pAdapter - ) -/*++ -Routine Description: - - Read the registry in CommonRegTable[]. - -Arguments: - - pAdapter Pointer to ADAPTER. - WrapperConfigurationContext For use by NdisOpenConfiguration - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_FAILURE - NDIS_STATUS_RESOURCES - ---*/ -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - NDIS_HANDLE ConfigurationHandle; - PMP_REG_ENTRY pRegEntry; - PUCHAR pointer; - PUCHAR NetworkAddress; - UINT i; - UINT Length; - PNDIS_CONFIGURATION_PARAMETER ReturnedValue; - ULONG_PTR value; -#if READ_BT_REGISTRY - u1Byte result=0; - PWCHAR registryName; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); -#endif - - RT_TRACE(COMP_INIT, DBG_LOUD, (" ==> N6ReadCommonRegistry()\n")); - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(pAdapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT,DBG_TRACE, ("<== N6ReadCommonRegistry, Status=%x\n", Status)); - return Status; - } - -#if READ_BT_REGISTRY - registryName = L"BTLoadOption"; - PlatformReadBTFWLoaderDwordRegistry(registryName,&result); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[BT COEX] BT fwloader BTLoadOption = %d\n", result)); - if(result == 1) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[BT COEX] BT fwloader inform wlan config wifi only\n")); - pHalData->bt_coexist.bBtExist = 0; - } -#endif - - //---------------------------------------------------------------------------- - // Initialize related variables if necessary. - pNdisCommon->RegSSID.Octet = &(pNdisCommon->RegSSIDBuf[0]); - pNdisCommon->RegLocale.Octet = &(pNdisCommon->RegLocaleBuf[0]); - pNdisCommon->RegDriverDesc.Octet = &(pNdisCommon->RegDriverDescBuf[0]); - - // For 818x UI and WPA Verify. 2004.11.30, by rcnjko. - for(i = 0; i < 4; i++) - { - pNdisCommon->RegDefaultKey[i].Octet = pNdisCommon->RegDefaultKeyBuf[i]; - pNdisCommon->RegDefaultKey[i].Length = 0; - pNdisCommon->RegDefaultKeyW[i].Octet = pNdisCommon->RegDefaultKeyWBuf[i]; - pNdisCommon->RegDefaultKeyW[i].Length = 0; - } - - pNdisCommon->RegPwrByRateFile.Octet = &(pNdisCommon->RegPwrByRateFileBuf[0]); - pNdisCommon->RegPwrLimitFile.Octet = &(pNdisCommon->RegPwrLimitFileBuf[0]); - pNdisCommon->RegSecondaryPwrLimitFile.Octet = &(pNdisCommon->RegSecondaryPwrLimitFileBuf[0]); - pNdisCommon->RegChannelPlan2G.Octet = pNdisCommon->RegChannelPlan2GBuf; - pNdisCommon->RegChannelPlan5G.Octet = pNdisCommon->RegChannelPlan5GBuf; - - //---------------------------------------------------------------------------- - - // Read the GUID of the current Adapter from the registry "NetCfgInstanceId". - { - NDIS_STRING RegNetCfginstanceID; - - NdisInitializeString(&RegNetCfginstanceID, NDIS_REG_NET_CFG_INSTANCE_ID_NAME); - - NdisReadConfiguration( - &Status, - &ReturnedValue, - ConfigurationHandle, - &RegNetCfginstanceID, - NdisParameterString); - - if (RegNetCfginstanceID.Buffer != NULL) - { - NdisFreeString(RegNetCfginstanceID); - } - if(NDIS_STATUS_SUCCESS == Status) - { - if(NT_SUCCESS(RtlGUIDFromString(&(ReturnedValue->ParameterData.StringData), &pNdisCommon->NetCfgInstanceId))) - { - RT_PRINT_UUID(COMP_INIT, DBG_LOUD, "The current adapter GUID is:", pNdisCommon->NetCfgInstanceId); - } - } - } - //---------------------------------------------------------------------------- - // Read all the registry values. - for(i = 0, pRegEntry = CommonRegTable; i < COM_NUM_REG_PARAMS; i++, pRegEntry++) - { - RT_TRACE(COMP_INIT, DBG_TRACE, ("RegName: [%ws]\n", (pRegEntry->RegName).Buffer)); - - pointer = (PUCHAR) pNdisCommon + pRegEntry->FieldOffset; - - // Get the configuration value for a specific parameter. Under NT the - // parameters are all read in as DWORDs. - NdisReadConfiguration( - &Status, - &ReturnedValue, - ConfigurationHandle, - &pRegEntry->RegName, - (enum _NDIS_PARAMETER_TYPE)pRegEntry->Type); - - // If the parameter was present, then check its value for validity. - if (Status == NDIS_STATUS_SUCCESS) - { - if( (pRegEntry->Type == NdisParameterInteger)|| (pRegEntry->Type == NdisParameterHexInteger) ) - { - // Check that param value is not too small or too large - if( ReturnedValue->ParameterData.IntegerData < pRegEntry->Min || - ReturnedValue->ParameterData.IntegerData > pRegEntry->Max) - { - value = pRegEntry->Default; - } - else - { - value = ReturnedValue->ParameterData.IntegerData; - } - } - else if( pRegEntry->Type == NdisParameterString ) - { - USHORT copyLen; - copyLen = ( (ReturnedValue->ParameterData.StringData.Length/2) > (USHORT)pRegEntry->Max) ? pRegEntry->Max : ReturnedValue->ParameterData.StringData.Length/2; - - if( (pRegEntry->FieldOffset == REGISTRY_OFFSET(RegBssidBuf)) ) - { - CopyFromUnicodeToString( pointer, &ReturnedValue->ParameterData.StringData, 12); - } - else if( pRegEntry->FieldOffset == REGISTRY_OFFSET(RegDbgZone)) - { - int i = 0; - u8Byte value_u8 = 0; - for(i = 0;i < copyLen; i++) - value_u8 |= (((UCHAR)ReturnedValue->ParameterData.StringData.Buffer[i])-48)*(1<ParameterData.StringData, copyLen); - RT_TRACE(COMP_INIT, DBG_TRACE, ("Copied: [%ws]\n", (ReturnedValue->ParameterData.StringData).Buffer)); - } - } - else - { - value = pRegEntry->Default; // Prefast warn 6001 - } - } - else if(pRegEntry->bRequired) - { - RT_TRACE(COMP_DBG, DBG_SERIOUS,(" -- failed\n")); - - RT_ASSERT(FALSE,("Read parameter FAIL!\n")); - - Status = NDIS_STATUS_FAILURE; - break; - } - else - { - if( (pRegEntry->Type == NdisParameterInteger) || (pRegEntry->Type == NdisParameterHexInteger) ) - { - value = pRegEntry->Default; - } - else - { - if( (pRegEntry->FieldOffset == REGISTRY_OFFSET(RegBssidBuf))) - ; - else if( pRegEntry->FieldOffset == REGISTRY_OFFSET(RegDbgZone)) - value = 0; - else - { - CopyFromUnicodeToOS( pointer, - (NDIS_STRING *)(UINT_PTR)pRegEntry->Default, - ((NDIS_STRING *)(UINT_PTR)pRegEntry->Default)->Length/2 ); - ((OCTET_STRING*)pointer)->bDefaultStr = TRUE; - } - value = pRegEntry->Default; // Prefast warn 6001 - } - Status = NDIS_STATUS_SUCCESS; - } - - // Store the value in the adapter structure. - switch(pRegEntry->FieldSize) - { - case 1: - *((PUCHAR) pointer) = (UCHAR) value; - break; - case 2: - *((PUSHORT) pointer) = (USHORT) value; - break; - case 4: - *((PULONG) pointer) = (ULONG) value; - break; - default: - RT_TRACE(COMP_DBG, DBG_SERIOUS,("Bogus field size %d\n", pRegEntry->FieldSize)); - break; - } - } - - // For 818x UI, 2004.11.30, by rcnjko. - for(i = 0; i < 4; i++) // Decode WEP key - { - unsigned char temp[30]; - - if(pNdisCommon->RegDefaultKey[i].Length > 0) - { - pNdisCommon->RegDefaultKey[i].Octet[pNdisCommon->RegDefaultKey[i].Length] = 0; - RegistryDecode(pNdisCommon->RegDefaultKey[i].Octet, temp, 10); - NdisMoveMemory(pNdisCommon->RegDefaultKey[i].Octet, temp, 5); - pNdisCommon->RegDefaultKey[i].Length = 5; - } - if(pNdisCommon->RegDefaultKeyW[i].Length > 0) - { - pNdisCommon->RegDefaultKeyW[i].Octet[pNdisCommon->RegDefaultKeyW[i].Length] = 0; - RegistryDecode(pNdisCommon->RegDefaultKeyW[i].Octet, temp, 26); - NdisMoveMemory(pNdisCommon->RegDefaultKeyW[i].Octet, temp, 13); - pNdisCommon->RegDefaultKeyW[i].Length = 13; - } - } - - // Convert bssid string to hex. - StringToHex((char *)pNdisCommon->RegBssidBuf, 12, pNdisCommon->RegBssid, 6,0); - - // Read NetworkAddress registry value - // Use it as the current address if any - if(Status == NDIS_STATUS_SUCCESS) - { - NdisReadNetworkAddress( - &Status, - (void **)&NetworkAddress, - &Length, - ConfigurationHandle); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("NdisReadNetworkAddress, Status=%x\n", Status)); - - // If there is a NetworkAddress override in registry, use it - if ((Status == NDIS_STATUS_SUCCESS) && (Length == ETH_LENGTH_OF_ADDRESS)) - { - if(ETH_IS_MULTICAST(NetworkAddress) || ETH_IS_BROADCAST(NetworkAddress) || ((NetworkAddress[0]&0x02)==0)) - { - RT_TRACE(COMP_INIT,DBG_LOUD, - ("Overriding NetworkAddress is invalid - %02x-%02x-%02x-%02x-%02x-%02x\n", - NetworkAddress[0], NetworkAddress[1], NetworkAddress[2], - NetworkAddress[3], NetworkAddress[4], NetworkAddress[5])); - } - else - { - if ( (NetworkAddress[0]==0x00) && - (NetworkAddress[1]==0x00) && - (NetworkAddress[2]==0x00) && - (NetworkAddress[3]==0x00) && - (NetworkAddress[4]==0x00) && - (NetworkAddress[5]==0x00) ) - { - // Network addr = 00 00 00 00 00 00 - pNdisCommon->bOverrideAddress = FALSE; - } - else - { - RT_TRACE(COMP_INIT,DBG_LOUD, - ("Overriding NetworkAddress - %02x-%02x-%02x-%02x-%02x-%02x\n", - NetworkAddress[0], NetworkAddress[1], NetworkAddress[2], - NetworkAddress[3], NetworkAddress[4], NetworkAddress[5])); - - ETH_COPY_NETWORK_ADDRESS(pNdisCommon->CurrentAddress, NetworkAddress); - pNdisCommon->bOverrideAddress = TRUE; - } - } - } - - Status = NDIS_STATUS_SUCCESS; - } - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<-- N6ReadCommonRegistry, Status=%x\n", Status)); - return Status; -} - - -VOID -N6UpdateDefaultSetting( - IN PADAPTER pAdapter - ) -/*++ -Routine Description: - - Update the parameter read from registery to coresponding ones in MGNT_INFO - or ADAPTER. - -Arguments: - - pAdapter Pointer to ADAPTER. - -Return Value: - - TRUE if succeeded, FALSE otherwise. - -Assumption: - These modification should be after InitializeMgntVariables() which is called by - NicIFAssociateNIC(). - ---*/ -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(pMgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pDefaultMgntInfo = &(pDefaultAdapter->MgntInfo); - PRT_FIRMWARE pFirmware = GET_FIRMWARE(pAdapter); - - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - s1Byte i = 0, diff = 0; - u1Byte IndicationNumber, tempNumber = 0; - BOOLEAN bFcsCapable = FALSE; - u4Byte result=0; - PWCHAR registryName; - - // Workaround for HCT. - pAdapter->bInHctTest = pNdisCommon->bRegHctTest ? 1: (pDefaultAdapter->bInHctTest); //YJ,mod,120626 - pAdapter->bInWFDTest = pNdisCommon->bRegWFDTest ? 1: (pDefaultAdapter->bInWFDTest); //YJ,mod,120626 - pAdapter->bScanTimeCheck = pNdisCommon->bRegScanTimeCheck ? 1: (pDefaultAdapter->bScanTimeCheck); //YJ,mod,120626 - - // For EQC require to fix the Mac Address. - pAdapter->bFixedMacAddr = pNdisCommon->bRegFixedMacAddr; - - pAdapter->bDPCISRTest = pNdisCommon->bRegDPCISRTest; - pAdapter->bUseThreadHandleInterrupt = pNdisCommon->bRegUseThreadHandleInterrupt; - pAdapter->bInChaosTest = pNdisCommon->bRegChaos; - pAdapter->interfaceIndex = pDefaultAdapter->interfaceIndex; - pMgntInfo->ChannelPlan = pDefaultMgntInfo->ChannelPlan; - - // regpnpcapabilities set to "FALSE" unload driver when s3s4 - // set to "TRUE" if support PNP capabilities OID - if(!pAdapter->bInHctTest) - pAdapter->bUnloadDriverwhenS3S4 = ((pNdisCommon->bRegPnpCapabilities)? FALSE : TRUE); - else - pAdapter->bUnloadDriverwhenS3S4 = FALSE; - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6UpdateDefaultSetting(): bUnloadDriverwhenS3S4 = %d HctTest %d\n", pAdapter->bUnloadDriverwhenS3S4, pAdapter->bInHctTest)); - - MgntActSet_ApType(pAdapter, (BOOLEAN)(pNdisCommon->RegActingAsAp)); - - pMgntInfo->ForcedBstDataRate = pNdisCommon->RegForcedBstDataRate; - - // For power save mode. 2005.02.15, by rcnjko. - pMgntInfo->dot11PowerSaveMode = (RT_PS_MODE)TranslateNdisPsToRtPs((NDIS_802_11_POWER_MODE)pNdisCommon->RegPowerSaveMode); - - - // For RF power state. - pMgntInfo->RegRfOff = (pNdisCommon->RegRfOff == 1) ? TRUE : FALSE; - - // Security related default setting. - pMgntInfo->SecurityInfo.RegEnablePreAuth = pNdisCommon->RegEnablePreAuthentication; - - // Update PreAuthentication by Bruce, 2007-11-06. - pMgntInfo->SecurityInfo.EnablePreAuthentication = pMgntInfo->SecurityInfo.RegEnablePreAuth; - - // HW/SW encryption/decryption. 2006.09.29, by shien chang. - pMgntInfo->SecurityInfo.RegSWTxEncryptFlag = pNdisCommon->RegSWTxEncryptFlag; - pMgntInfo->SecurityInfo.RegSWRxDecryptFlag = pNdisCommon->RegSWRxDecryptFlag; - - // - // WiFi Config, by Bruce, 2007-12-07. - // Note: - // This flag can be set to config special configuration for WiFi, such as EDCA and Wireless Mode. - // It should be just "temporal solution" to pass WiFi. - // - pMgntInfo->bWiFiConfg = pNdisCommon->bRegWiFi; - - // 2010/05/18 MH For GPIO detect timer delay setting. - pMgntInfo->bRegTimerGPIO=pNdisCommon->bRegTimerGPIO; - pMgntInfo->bRegGPIODelay=pNdisCommon->bRegGPIODelay; - pMgntInfo->bRegGPIOBack=pNdisCommon->bRegGPIOBack; - - // 2010/08/25 MH support power down mode switch - pMgntInfo->bRegPDNMode = pNdisCommon->bRegPDNMode; - - // 2010/09/01 MH According to PM's request, we support dongle selective suspend mode switch. - pMgntInfo->bRegDongleSS = pNdisCommon->bRegDongleSS; - - // 2010/09/13 MH According to PM's request, we support different SS power seave level. - pMgntInfo->bRegSSPwrLvl = pNdisCommon->bRegSSPwrLvl; - - // 2011/02/16 MH Add for SS HW radio detect workaround temporarily. - pMgntInfo->bRegSSWakeCnt = pNdisCommon->bRegSSWakeCnt; - - // 2010/12/17 MH Add for RX aggregation mode switch according to TX/RX traffic. - pMgntInfo->bRegAggDMEnable = pNdisCommon->bRegAggDMEnable; - - // 2010/12/31 MH Add for UPHY dynamic chaneg. - pMgntInfo->bRegUPDMEnable = pNdisCommon->bRegUPDMEnable; - - // 2011/07/08 MH Add for different link speed display. - pMgntInfo->bRegLinkSpeedLevel = pNdisCommon->bRegLinkSpeedLevel; - - // Update Signal Bar settings - pMgntInfo->RSSI2GridMode = pNdisCommon->RegRSSI2GridMode; - - // 2011/07/14 MH Add for rx short cut. - pMgntInfo->bRegRxSC = pNdisCommon->bRegRxSC; - - // 2011/07/15 Sinda Add for tx short cut. - pAdapter->TXSCSupport = (pNdisCommon->bRegTxSC) ? TRUE : FALSE; - - // 2011/12/08 hpfan Add for Tcp Reorder - pMgntInfo->bTcpReorderEnable = pNdisCommon->bTcpReorderEnable; - - - // 2011/09/15 MH Add registry for switching packet compete method. - pMgntInfo->RegTxMode = pNdisCommon->RegTxMode; - - // 2012/09/14 MH Add for EDCA turbo mode switch threshold. - // 2012/09/14 MH Add for 88E rate adaptive mode siwtch. - pMgntInfo->RegEdcaThresh = pNdisCommon->RegEdcaThresh; - pMgntInfo->RegRALvl = pNdisCommon->RegRALvl; - - // 2012/10/26 MH Add for 8812/8821 AC series dynamic switch. - pMgntInfo->RegAcUsbDmaTime = pNdisCommon->RegAcUsbDmaTime; - pMgntInfo->RegAcUsbDmaSize = pNdisCommon->RegAcUsbDmaSize; - pMgntInfo->RegAcUsbDmaTime2 = pNdisCommon->RegAcUsbDmaTime2; - pMgntInfo->RegAcUsbDmaSize2 = pNdisCommon->RegAcUsbDmaSize2; - - // 2012/10/31 MH Add for power limit table constraint. - pMgntInfo->RegTxPwrLimit = pNdisCommon->RegTxPwrLimit; - - // 2012/11/06 Page Add for NByte Access BB reg switch - pMgntInfo->RegNByteAccess = pNdisCommon->RegNByteAccess; - - pMgntInfo->RegFWOffload = pNdisCommon->RegFWOffload; - - if(pNdisCommon->RegDownloadFW) - pFirmware->eFWSource = FW_SOURCE_HEADER_FILE; - else - pFirmware->eFWSource = FW_SOURCE_IMG_FILE; - - pMgntInfo->CustomerID = pNdisCommon->RegCustomerID; - - pMgntInfo->bWaitBeforeGoSkipScan = pNdisCommon->RegWaitBeforeGoSkipScan; - - pMgntInfo->bGoSkipScanForWFD = pNdisCommon->RegGoSkipScanForWFDTest; - pMgntInfo->bClientSkipScanForWFD = pNdisCommon->RegClientSkipScanForWFDTest; - pMgntInfo->bForceGoTxData20MBw = pNdisCommon->RegForceGoTxData20MBw; - - if(IS_HARDWARE_TYPE_8821U(pAdapter)) - { - pMgntInfo->RegFWOffload = FALSE; - pNdisCommon->RegFWOffload =FALSE; - } - - // 2012/11/07 Awk add PowerBase for customers to define their power base. - pMgntInfo->RegPowerBase = pNdisCommon->RegPowerBase; - - pMgntInfo->RegEnableTxPowerLimit = pNdisCommon->RegEnableTxPowerLimit; - pMgntInfo->RegEnableTxPowerByRate = pNdisCommon->RegEnableTxPowerByRate; - pMgntInfo->RegTxPowerLimitTableSel = pNdisCommon->RegTxPowerLimitTableSel; - pMgntInfo->RegTxPwrLmtDynamicLoading = pNdisCommon->RegTxPwrLmtDynamicLoading; - - pMgntInfo->RegSupportTxPwrTableDump = pNdisCommon->RegSupportTxPwrTableDump; - - pMgntInfo->bDisableTXPowerTraining = !pNdisCommon->RegTxPowerTraining; - - pMgntInfo->RegLoadSystemSKUfromUEFI = pNdisCommon->RegLoadSystemSKUfromUEFI; - pMgntInfo->RegUEFIProfile = pNdisCommon->RegUEFIProfile; - - pMgntInfo->RegLoadSystemSKUfromSMBIOS = pNdisCommon->RegLoadSystemSKUfromSMBIOS; - pMgntInfo->RegLoadProcessorIDfromSMBIOS= pNdisCommon->RegLoadProcessorIDfromSMBIOS; - - pMgntInfo->RegPwrByRateFile.Octet = pNdisCommon->RegPwrByRateFile.Octet; - pMgntInfo->RegPwrLimitFile.Octet = pNdisCommon->RegPwrLimitFile.Octet; - pMgntInfo->RegSecondaryPwrLimitFile.Octet = pNdisCommon->RegSecondaryPwrLimitFile.Octet; - - pMgntInfo->RegChannelPlan2G.Octet = pNdisCommon->RegChannelPlan2GBuf; - pMgntInfo->RegChannelPlan5G.Octet = pNdisCommon->RegChannelPlan5GBuf; - pMgntInfo->RegChannelPlan2G.Length = pNdisCommon->RegChannelPlan2G.Length; - pMgntInfo->RegChannelPlan5G.Length = pNdisCommon->RegChannelPlan5G.Length; - pMgntInfo->RegChannelPlan2G.bDefaultStr = pNdisCommon->RegChannelPlan2G.bDefaultStr; - pMgntInfo->RegChannelPlan5G.bDefaultStr = pNdisCommon->RegChannelPlan5G.bDefaultStr; - - - pMgntInfo->RegDecryptCustomFile = pNdisCommon->RegDecryptCustomFile; - - // 2013/04/16 VincentLan Add to switch Spur Calibration Method - pMgntInfo->RegSpurCalMethod = pNdisCommon->RegSpurCalMethod; - // 2013/01/23 VincentLan Add to enable IQK firmware offload feature - pMgntInfo->RegIQKFWOffload = pNdisCommon->RegIQKFWOffload; - // 2013/11/23 VincentLan add for for KFree Feature Requested by RF David - pMgntInfo->RegRfKFreeEnable = pNdisCommon->RegRfKFreeEnable; - - pMgntInfo->RegTxDutyEnable = pNdisCommon->RegTxDutyEnable; - - // 2011/11/15 MH Add for user can select different region and map to dedicated power gain offset table. - pMgntInfo->RegPwrTblSel = pNdisCommon->RegPwrTblSel; - - pMgntInfo->RegTxPwrLevel = pNdisCommon->RegTxPwrLevel; - - // 2011/11/15 MH Add for user can select different tx power by rate switch by default value and registry value. - pMgntInfo->RegPwrByRate = pNdisCommon->RegPwrByRate; - pMgntInfo->RegPwrRaTbl1 = pNdisCommon->RegPwrRaTbl1; - pMgntInfo->RegPwrRaTbl2 = pNdisCommon->RegPwrRaTbl2; - pMgntInfo->RegPwrRaTbl3 = pNdisCommon->RegPwrRaTbl3; - pMgntInfo->RegPwrRaTbl4 = pNdisCommon->RegPwrRaTbl4; - pMgntInfo->RegPwrRaTbl5 = pNdisCommon->RegPwrRaTbl5; - pMgntInfo->RegPwrRaTbl6 = pNdisCommon->RegPwrRaTbl6; - pMgntInfo->RegPwrRaTbl7 = pNdisCommon->RegPwrRaTbl7; - pMgntInfo->RegPwrRaTbl8 = pNdisCommon->RegPwrRaTbl8; - pMgntInfo->RegPwrRaTbl9 = pNdisCommon->RegPwrRaTbl9; - pMgntInfo->RegPwrRaTbl10 = pNdisCommon->RegPwrRaTbl10; - pMgntInfo->RegPwrRaTbl11 = pNdisCommon->RegPwrRaTbl11; - pMgntInfo->RegPwrRaTbl12 = pNdisCommon->RegPwrRaTbl12; - pMgntInfo->RegPwrRaTbl13 = pNdisCommon->RegPwrRaTbl13; - pMgntInfo->RegPwrRaTbl14 = pNdisCommon->RegPwrRaTbl14; - pMgntInfo->RegPwrRaTbl15 = pNdisCommon->RegPwrRaTbl15; - pMgntInfo->RegPwrRaTbl16 = pNdisCommon->RegPwrRaTbl16; - - pMgntInfo->bUseRxInterruptWorkItem=pNdisCommon->bRegUseRxInterruptWorkItem; - - // Support QoS or not. Added by Annie, 2005-11-09. - //Isaiah 2006-06-13 - if(pNdisCommon->bRegSupportQoS) //WMM - { - pMgntInfo->pStaQos->QosCapability = QOS_WMM; - - pMgntInfo->pStaQos->b4ac_Uapsd=pNdisCommon->StaUapsd & 0x0F; - pMgntInfo->pStaQos->MaxSPLength=pNdisCommon->MaxSPLength; - - if(pMgntInfo->pStaQos->b4ac_Uapsd & 0x0F) //UAPSD - { - pMgntInfo->pStaQos->QosCapability |= QOS_WMM_UAPSD; - } - else // 8xB disable WMM Power Save - { - pMgntInfo->pStaQos->QosCapability &=~ QOS_WMM_UAPSD; - pMgntInfo->pStaQos->b4ac_Uapsd=0; - pMgntInfo->pStaQos->MaxSPLength=0; - } - - pMgntInfo->pStaQos->QosCapabilityBackup = pMgntInfo->pStaQos->QosCapability; - - // EDCA Parameters for QAP - pAdapter->AP_EDCA_PARAM[0] = pNdisCommon->RegApEDCAParamBE; - pAdapter->AP_EDCA_PARAM[1] = pNdisCommon->RegApEDCAParamBK; - pAdapter->AP_EDCA_PARAM[2] = pNdisCommon->RegApEDCAParamVI; - pAdapter->AP_EDCA_PARAM[3] = pNdisCommon->RegApEDCAParamVO; - - // EDCA PArameters for QSTA - pAdapter->STA_EDCA_PARAM[0] = pNdisCommon->RegStaEDCAParamBE; - pAdapter->STA_EDCA_PARAM[1] = pNdisCommon->RegStaEDCAParamBK; - pAdapter->STA_EDCA_PARAM[2] = pNdisCommon->RegStaEDCAParamVI; - pAdapter->STA_EDCA_PARAM[3] = pNdisCommon->RegStaEDCAParamVO; - - // No Ack Setting - pMgntInfo->pStaQos->AcNoAck = pNdisCommon->RegAcNoAck; - } - - RT_TRACE( COMP_QOS, DBG_LOUD, ("N6UpdateDefaultSetting(): QosCapability=0x%x\n", pMgntInfo->pStaQos->QosCapability) ); - - - pMgntInfo->bRegHwParaFile=((BOOLEAN)(pNdisCommon->bRegHwParaFile)); - - //TX Power Level - pMgntInfo->TxPowerLevel = pNdisCommon->RegTxPowerLevel; - - if(pAdapter->pNdis62Common==NULL) - MgntActSet_TX_POWER_LEVEL(pAdapter, pMgntInfo->TxPowerLevel); - - // Default LowRfdThreshold. - pAdapter->LowRfdThreshold = pNdisCommon->LowRfdThreshold; - - // PSPXLinkMode, revised by Roger. 2009.12.03. - pMgntInfo->bDefaultPSPXlinkMode = (BOOLEAN)(pNdisCommon->PSPXlinkMode); - pMgntInfo->bPSPXlinkMode = pMgntInfo->bDefaultPSPXlinkMode; // Using default settings first. - - // Channel Plan. - pMgntInfo->RegChannelPlan = pNdisCommon->RegChannelPlan; - - pMgntInfo->RegDisableAC = pNdisCommon->RegDisableAC; - pMgntInfo->RegLedInterval = pNdisCommon->RegLedInterval; - pMgntInfo->Reg8814auEfuse = pNdisCommon->Reg8814auEfuse; - pMgntInfo->RegValidRFPath = pNdisCommon->RegValidRFPath; - pMgntInfo->RegPreInitMem = pNdisCommon->RegPreInitMem; - pMgntInfo->Reg88EIOTAction = pNdisCommon->Reg88EIOTAction; - - - // Turbo mode related setting. Added by Roger, 2006.12.07. - { - TURBOMODE_TYPE TurboModeType; - TurboModeType.charData = (u1Byte)pNdisCommon->RegTurboModeSelect; - pMgntInfo->bSupportTurboMode = (BOOLEAN)TurboModeType.field.SupportTurboMode;// Default: sholud be FALSE. Roger, 2006.12.07. - pMgntInfo->bAutoTurboBy8186 = (BOOLEAN)TurboModeType.field.AutoTurboBy8186; // Default: should be TRUE. Roger, 2006.12.07. - RT_TRACE( COMP_MLME, DBG_LOUD, ("UpdateDefaultSetting(): bSupportTurboMode=%d, bAutoTurboBy8186=%d\n", - pMgntInfo->bSupportTurboMode, - pMgntInfo->bAutoTurboBy8186 - )); - } - - // bExcludeUnencrypted, 2006.11.22, by shien chang. - // NOTE: the default of bExcludeUnencrypted in NDIS5 is TRUE, but in NDIS6 - // The native wifi document required the default value to be FALSE. - pMgntInfo->bExcludeUnencrypted = FALSE; - pMgntInfo->SafeModeEnabled = FALSE; - - // 802.11d. - pDot11dInfo->bEnabled = pNdisCommon->bRegDot11dEnable; - - // AP mode: station live time. Added by Annie for ASUS, 2006-02-16. - pMgntInfo->LiveTime = (pNdisCommon->RegLiveTime > 0)? pNdisCommon->RegLiveTime : 600; - - // WDS mode. - pMgntInfo->WdsMode = pNdisCommon->RegWdsMode; - - // Overwrite pMgntInfo->CustomerID if necessary, otherwise, don't change it. - // Note that, pMgntInfo->CustomerID might be initialized in NicIFReadAdapterInfo() - // before. 2006.07.03. - pMgntInfo->CustomerID = (RT_CUSTOMER_ID)(pNdisCommon->RegCustomerID); - - //Fragment threadhold - pMgntInfo->FragThreshold = pNdisCommon->RegFragThreshold; - - //change by ylb 20111124 to Fix DTM error: Vertify Beacon after WakeUp - { - PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - - while(pTargetAdapter != NULL) - { - pTargetAdapter->MgntInfo.bStartApDueToWakeup=FALSE; - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - //========================= BT related======================== - pMgntInfo->btHsMode = pNdisCommon->RegbtHsMode; - - pAdapter->bFixBTTdma = (BOOLEAN)pNdisCommon->RegFixBTTdma; - //========================= BT related end======================== - - // Set debug monitor components - EXdbgmon_SetOutComponents((u4Byte)pNdisCommon->RegDbgMonitor); - //========================= Power Save Mechanism related======================== - - PSC_UpdateDefaultSetting(pAdapter); - - pMgntInfo->bDisableCck = pNdisCommon->bRegDisableCck; - pMgntInfo->bHwWpsPbc = pNdisCommon->bRegHwWpsPbc; - - //========================= Power Save Mechanism end======================== - - - //========================= HAL related======================== - HAL_UpdateDefaultSetting(pAdapter); - //========================= HAL related end======================== - - pAdapter->bBtFwSupport = (BOOLEAN) pNdisCommon->bRegBtFwSupport; - - - // ROAM Sensitive Level - - pMgntInfo->RegROAMSensitiveLevel = (s1Byte)(0 - pNdisCommon->RegROAMSensitiveLevel); - // Roam Hysteresis - pMgntInfo->RegRoamHysteresis = (u1Byte)(pNdisCommon->RegRoamHysteresis); - - // Roaming time limitation. - pMgntInfo->RegRoamingLimitCount = (pNdisCommon->RegRoamingLimit / RT_CHECK_FOR_HANG_PERIOD); - - // Indicate disconnected status immediately when receiving deauth/disassoc packet. - pMgntInfo->IndicateByDeauth = pNdisCommon->RegIndicateByDeauth; - - // Protection mode RTS/CTS - if(pNdisCommon->RegProtectionmode == RTS_CTS) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6UpdateDefaultSetting(): RTS/CTS\n")); - pMgntInfo->bForcedProtectRTSFrame = TRUE; - pMgntInfo->bForcedProtectCTSFrame = FALSE; - } - else if(pNdisCommon->RegProtectionmode == CTS_TO_SELF) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6UpdateDefaultSetting(): CTS-TO-SELF\n")); - pMgntInfo->bForcedProtectRTSFrame = FALSE; - pMgntInfo->bForcedProtectCTSFrame = TRUE; - } - else - { - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6UpdateDefaultSetting(): No Prottection mode\n")); - pMgntInfo->bForcedProtectRTSFrame = FALSE; - pMgntInfo->bForcedProtectCTSFrame = FALSE; - } - - // DM control initial gain - pMgntInfo->bDMInitialGainEnable = pNdisCommon->bRegDMInitialGain; - - pMgntInfo->ShowRateMode = pNdisCommon->RegShowRate; - - // 20090810 Ask by AzWave To Force TKIP use N mode - pMgntInfo->bTKIPinNmodeFromReg = pNdisCommon->bRegTKIPinNmode; - pMgntInfo->bWEPinNmodeFromReg = pNdisCommon->bRegWEPinNmode; - pMgntInfo->bRegClevoDriver = pNdisCommon->bRegClevoDriver; - - SET_TDLS_ENABLED(pMgntInfo, pNdisCommon->bRegTDLSEnable); - - pMgntInfo->bDefaultAntenna= pNdisCommon->bRegDefaultAntenna; - - pMgntInfo->bRegVelocity = pNdisCommon->bRegVelocity; - - pMgntInfo->bSendPacketByTimer = pNdisCommon->RegSendPacketByTimer; - pMgntInfo->bAPTimExtend = (pNdisCommon->RegAPTimExtend && !pNdisCommon->bRegWiFi) ? TRUE : FALSE; - - pMgntInfo->RegSupTCPOffload = TCPOFFLOAD_DISAB; - - TCP_OFFLOAD_Init(pAdapter); - - - pAdapter->RegTwoStaConcurrentMode = pNdisCommon->RegTwoStaConcurrentMode; - pMgntInfo->bSupportTxPacketBufferColease = pNdisCommon->bSupportTxPacketBufferColease; - - pHalData->PAMode = pNdisCommon->RegPAMode; - - pMgntInfo->CurrentWirelessBand = pNdisCommon->RegWirelessBand; - - // 2012/07/24 MH Add for win8 usb whql tst & WFD multi channel. - pMgntInfo->RegUseDefaultCID = pNdisCommon->RegUseDefaultCID; - pMgntInfo->RegWfdTime = pNdisCommon->RegWfdTime; - pMgntInfo->RegWfdChnl = pNdisCommon->RegWfdChnl; - pMgntInfo->RegScanLarge = pNdisCommon->RegScanLarge; - pMgntInfo->RegScanMiddle = pNdisCommon->RegScanMiddle; - pMgntInfo->RegScanNormal = pNdisCommon->RegScanNormal; - pMgntInfo->RegScanActive = pNdisCommon->RegScanActive; - pMgntInfo->RegForcedScanPeriod = pNdisCommon->RegForcedScanPeriod; - - pMgntInfo->RegPreferBand = pNdisCommon->RegPreferBand; - - // Update antenna detection registry settings for further mechanism, added by Roger, 2012.11.17. - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_ANT_DETECT, (pu1Byte)&(pNdisCommon->RegAntDetection)); - - // TxPwr percentage, added by Roger, 2010.03.09. - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_TX_PWR_PERCENTAGE, &(pNdisCommon->RegTxPwrPercentage)); - - // Pre-transition for OID_PNP_SET_POWER OID wake up handling, added by Roger, 2012.11.28. - pMgntInfo->bPreTransPnP = pNdisCommon->RegPreTransPnP; - - if(pMgntInfo->bWiFiConfg) - pMgntInfo->bHWRTSEnable = FALSE; - else - pMgntInfo->bHWRTSEnable = pNdisCommon->bRegHWRTSEnable; - - // 2013/02/05 MH Add for streamMode switch. - pMgntInfo->RegStreamMode = pNdisCommon->RegStreamMode; - // 2013/02/06 MH Add Transmit power control level for all customer in the future. - // Need to delete? or other customer need the function. - pMgntInfo->RegTPCLvl = pNdisCommon->RegTPCLvl; - pMgntInfo->RegTPCLvlD = pNdisCommon->RegTPCLvlD; - pMgntInfo->RegTPCLvl5g = pNdisCommon->RegTPCLvl5g; - pMgntInfo->RegTPCLvl5gD = pNdisCommon->RegTPCLvl5gD; - - if(pAdapter->bInHctTest) - pMgntInfo->RegEnableAdaptivity = 0; - else - pMgntInfo->RegEnableAdaptivity = pNdisCommon->RegEnableAdaptivity; - pMgntInfo->RegL2HForAdaptivity = pNdisCommon->RegL2HForAdaptivity; - pMgntInfo->RegHLDiffForAdaptivity = pNdisCommon->RegHLDiffForAdaptivity; - pMgntInfo->RegEnableCarrierSense = pNdisCommon->RegEnableCarrierSense; - pMgntInfo->RegNHMEnable = pNdisCommon->RegNHMEnable; - pMgntInfo->RegDmLinkAdaptivity = pNdisCommon->RegDmLinkAdaptivity; - pMgntInfo->RegDCbackoff = pNdisCommon->RegDCbackoff; - pMgntInfo->RegAPNumTH = pNdisCommon->RegAPNumTH; - pMgntInfo->RegPacketDrop = pNdisCommon->RegPacketDrop; - - pMgntInfo->EnableResetTxStuck = pNdisCommon->RegEnableResetTxStuck; - - pMgntInfo->RegSifsThresh = pNdisCommon->RegSifsThresh; - - pMgntInfo->RegFwload = pNdisCommon->RegFwload; - - pMgntInfo->RegUsbSafetySwitch = pNdisCommon->RegUsbSafetySwitch; - - pMgntInfo->RegRspPwr = pNdisCommon->RegRspPwr; - pMgntInfo->RegPktIndicate = pNdisCommon->RegPktIndicate; - - pMgntInfo->bRegAdhocUseHWSec = pNdisCommon->bRegAdhocUseHWSec; - pMgntInfo->RegClearAMDWakeUpStatus = pNdisCommon->RegClearAMDWakeUpStatus; - - pMgntInfo->RegbCustomizedScanPeriod = pNdisCommon->RegbCustomizedScanPeriod; - pMgntInfo->RegIntelCustomizedScanPeriod = pNdisCommon->RegIntelCustomizedScanPeriod; - pMgntInfo->RegAMDCustomizedScanPeriod = pNdisCommon->RegAMDCustomizedScanPeriod; - - - pMgntInfo->RegDisableBTCoexist = pNdisCommon->RegDisableBTCoexist; - - pMgntInfo->EnableMA = pNdisCommon->RegEnableMA; - - pMgntInfo->VhtWeakSecurity = pNdisCommon->RegVhtWeakSecurity; - - //20130606 MH For passive scan control dynamic switch after meeting with RF/FAE team. - // 0= by channel plan, 1=5g all passive scan / 2= 24g passive scan /3= 2/5g all passive scan - pMgntInfo->RegPassiveScan = pNdisCommon->RegPassiveScan; - - pMgntInfo->IsAMDIOIC = pNdisCommon->RegIsAMDIOIC; - pMgntInfo->RegWmmPage = pNdisCommon->RegWmmPage; - pMgntInfo->Regbcndelay = pNdisCommon->Regbcndelay; - - // Support FW FCS - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_FW_FCS, &bFcsCapable); - if(FALSE == bFcsCapable) - pMgntInfo->RegMultiChannelFcsMode = 0; - else - { - pMgntInfo->RegMultiChannelFcsMode = pNdisCommon->RegMultiChannelFcsMode; - MultiChannelSetFcsCommonInfo(pAdapter, MULTICHANNEL_FCS_COMMON_NOA_DURATION, (pu1Byte)&pNdisCommon->RegMultiChannelFcsNoA); - MultiChannelSetFcsCommonInfo(pAdapter, MULTICHANNEL_FCS_COMMON_NOA_STARTTIME, (pu1Byte)&pNdisCommon->RegMCCNoAStartTime); - MultiChannelSetFcsCommonInfo(pAdapter, MULTICHANNEL_FCS_COMMON_STA_BEACONTIME, (pu1Byte)&pNdisCommon->RegMCCStaBeaconTime); - MultiChannelSetFcsCommonInfo(pAdapter, MULTICHANNEL_FCS_COMMON_QPKT_LEVEL, (pu1Byte)&pNdisCommon->RegMCCQPktLevel); - } - - RT_TRACE_F(COMP_MULTICHANNEL, DBG_LOUD, ("pMgntInfo->RegMultiChannelFcsMode = %d\n", pMgntInfo->RegMultiChannelFcsMode)); - - pMgntInfo->WFDOpChannel = pNdisCommon->RegWFDOpChannel; - pMgntInfo->WFDPeerOpChannel = pNdisCommon->RegWFDPeerOpChannel; - pMgntInfo->ConnectionConfigTimeIntv = pNdisCommon->RegConnectionConfigTimeIntv; - - pMgntInfo->RetryTimes = pNdisCommon->RegRetryTimes; - -#if(AUTO_CHNL_SEL_NHM == 1) - pMgntInfo->AutoChnlSel.bAutoChnlSel = pNdisCommon->RegAutoChnlSel; - if((IS_AUTO_CHNL_SUPPORT(pAdapter))) - pMgntInfo->AutoChnlSel.AutoChnlSelPeriod = 100; // Default scan period -#endif - - if(0 == pNdisCommon->RegDisableRtkSupportedP2P) - {// not to disable - pMgntInfo->bDisableRtkSupportedP2P = FALSE; - } - else if(1 == pNdisCommon->RegDisableRtkSupportedP2P) - {// to disable - pMgntInfo->bDisableRtkSupportedP2P = TRUE; - } - else - {// auto - if(OS_SUPPORT_WDI(pAdapter)) - { - pMgntInfo->bDisableRtkSupportedP2P = TRUE; - } - else - { - pMgntInfo->bDisableRtkSupportedP2P = FALSE; - } - } - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("RegDisableRtkSupportedP2P = %u\n", pNdisCommon->RegDisableRtkSupportedP2P)); - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("pMgntInfo->bDisableRtkSupportedP2P = %u\n", pMgntInfo->bDisableRtkSupportedP2P)); - - pMgntInfo->bSdioPollIntrHandler = pNdisCommon->RegSdioPollIntrHandler; - pMgntInfo->SdioIntrPollingLimit = pNdisCommon->RegSdioIntrPollingLimit; - pMgntInfo->RegTxSendAsap = pNdisCommon->RegTxSendAsap; - if (pMgntInfo->RegTxSendAsap & BIT15) - pMgntInfo->CurTxSendAsap = 1; - else - pMgntInfo->CurTxSendAsap = 0; - - // MAC Address Randomization - pMgntInfo->RegSupportMACRandom = pNdisCommon->RegSupportMACRandom; - - pMgntInfo->RegSupportECSA = pNdisCommon->RegSupportECSA; - - pMgntInfo->RegSupportFT= pNdisCommon->RegSupportFT; - - // Cancel and suspend all timers in Dx low power state, e.g., SoC Off - pMgntInfo->RegSuspendTimerInLowPwr = pNdisCommon->RegSuspendTimerInLowPwr; - -} - - - -// -// Initialize variables read from registry for 818x UI. -// 2004.11.30, by rcnjko. -// -VOID -N6RestoreLastInitSetting( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = (PMGNT_INFO)(&(pAdapter->MgntInfo)); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - int nTmp; - ULONG BytesRead, BytesNeeded; - - // We keep local copy of RegWepEncStatus here for it can be changed via OID_802_11_ENCRYPTION_STATUS. - // 2005.03.16, by rcnjko. - int nTmpRegWepEncStatus = pNdisCommon->RegWepEncStatus; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("===> N6RestoreLastInitSetting()\n") ); - - // OID_802_11_AUTHENTICATION_MODE. - nTmp = pNdisCommon->RegAuthentAlg; - N6CSetInformation(pAdapter, OID_802_11_AUTHENTICATION_MODE, (PVOID)(&nTmp), sizeof(nTmp), &BytesRead, &BytesNeeded); - - // OID_802_11_ENCRYPTION_STATUS. - switch(nTmpRegWepEncStatus) - { - case REG_WEP_STATUS_NO_WEP: - switch(pNdisCommon->RegEncAlgorithm) - { - case REG_NONE_Encryption: - nTmp = (int)(Ndis802_11EncryptionDisabled); - break; - case REG_TKIPv2_Encryption: - nTmp = (int)Ndis802_11Encryption2Enabled; - break; - case REG_AESCCMP_Encryption: - nTmp = (int)Ndis802_11Encryption3Enabled; - break; - - case REG_WAPI_PSK: - nTmp = (int)Wapi_Encryption; - break; - case REG_WAPI_CERT: - nTmp = (int)Wapi_Certificate; - break; - - default: - nTmp = (int)(Ndis802_11EncryptionDisabled); - break; - } - break; - - case REG_WEP_STATUS_WEP64: - case REG_WEP_STATUS_WEP128: - nTmp = (int)(Ndis802_11Encryption1Enabled); - break; - - default: - nTmp = (int)(Ndis802_11EncryptionDisabled); - break; - } - N6CSetInformation(pAdapter, OID_802_11_ENCRYPTION_STATUS, (PVOID)(&nTmp), sizeof(nTmp), &BytesRead, &BytesNeeded); - - // WEP Key. - { - POCTET_STRING pKey; - u4Byte dwKeyLen; - int nKeyIdx; - UCHAR NdisKeyTmpBuf[128]; - PNDIS_802_11_WEP pNdisKeyTmp; - - for(nKeyIdx = 0; nKeyIdx < 4;nKeyIdx++) - { - pNdisCommon->RegDefaultKey[nKeyIdx].Octet = pNdisCommon->RegDefaultKeyBuf[nKeyIdx]; - pNdisCommon->RegDefaultKey[nKeyIdx].Octet = pNdisCommon->RegDefaultKeyBuf[nKeyIdx]; - } - // Fix stack overflow bug, 2005.01.06, by rcnjko. - pNdisKeyTmp = (PNDIS_802_11_WEP)NdisKeyTmpBuf; - pNdisKeyTmp->Length = 128; - - switch(nTmpRegWepEncStatus) - { - case REG_WEP_STATUS_WEP64: - pKey = pNdisCommon->RegDefaultKey; - dwKeyLen = 5; - break; - case REG_WEP_STATUS_WEP128: - pKey = pNdisCommon->RegDefaultKeyW; - dwKeyLen = 13; - break; - default: - pKey = NULL; - dwKeyLen = 0; - break; - } - - for(nKeyIdx = 0; nKeyIdx < 4 && pKey != NULL; nKeyIdx++) - { - if(nKeyIdx == pNdisCommon->RegDefaultKeyId) - { - pNdisKeyTmp->KeyIndex = nKeyIdx | 0x80000000; - } - else - { - pNdisKeyTmp->KeyIndex = nKeyIdx; - } - if(pKey[nKeyIdx].Length == dwKeyLen) - { - pNdisKeyTmp->KeyLength = dwKeyLen; - PlatformMoveMemory(pNdisKeyTmp->KeyMaterial, pKey[nKeyIdx].Octet, dwKeyLen); - } - else - { - pNdisKeyTmp->KeyLength = 0; - } - // OID_802_11_ADD_WEP. - N6CSetInformation(pAdapter, OID_802_11_ADD_WEP, (PVOID)pNdisKeyTmp, 128, &BytesRead, &BytesNeeded); - } - } - - // Network type. - switch(pNdisCommon->RegNetworkType) - { - case NI_ADHOC: - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_ADHOC; - break; - case NI_Infrastructure: - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - break; - case NI_AUTO: - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_AUTO; - break; - default: - RT_ASSERT(FALSE, ("Unknown RegNetworkType: %d\n", pNdisCommon->RegNetworkType)); - break; - } - - if(pAdapter->MgntInfo.bRSNAPSKMode ) - { - pAdapter->MgntInfo.SecurityInfo.RegSWTxEncryptFlag = EncryptionDecryptionMechanism_Auto; - pAdapter->MgntInfo.SecurityInfo.RegSWRxDecryptFlag = EncryptionDecryptionMechanism_Auto; - SecSetSwEncryptionDecryption(pAdapter, TRUE, TRUE); - // WIN7, Don't set Sec Here - if(pMgntInfo->NdisVersion < RT_NDIS_VERSION_6_20) - pAdapter->HalFunc.DisableHWSecCfgHandler(pAdapter); - } - - pMgntInfo->bEDCCASupport = pNdisCommon->bRegEDCCASupport; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("<=== N6RestoreLastInitSetting()\n") ); - -} - - - -// Description: -// Restore all config for wake up in IBSS mode -// -VOID -N6RestoreLastInitSettingAterWakeUP( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = (PMGNT_INFO)(&(pAdapter->MgntInfo)); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - u4Byte nKeyIdx = 0; - POCTET_STRING pKey; - BOOLEAN IsDefaultKeyId; - u1Byte MacAddress[ETHERNET_ADDRESS_LENGTH] = {0x00,0x00,0x00,0x00,0x00,0x00}; - -//add by ylb for wapi S3 BSOD 20110906 - if(WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - return; - - //if( pNdisCommon->RegNetworkType == RT_JOIN_NETWORKTYPE_INFRA ) - // return; // Autoconfig will do all thing to connent to AP. - - // 1. Set Network Type - //BssType = dot11_BSS_type_independent; - // 20080430, Mark by Mars - // We should not set BssType in N6CSet_DOT11_DESIRED_BSS_TYPE - // It will make BssType to be auto and cause Ad Hoc WPA2 in Vista Fial - //N6CSet_DOT11_DESIRED_BSS_TYPE(pAdapter , &BssType ); - - // 2.set Auth Mod - N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(pAdapter , pNdisCommon->RegAuthalg); - RT_TRACE(COMP_RSNA, DBG_LOUD, ("N6RestoreLastInitSettingAterWakeUP pSecInfo->AuthMode = 0x%08X\n",pSecInfo->AuthMode)); - // 3. Set Uncast Chiper - N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM(pAdapter, pNdisCommon->RegPairwiseAlg); - pSecInfo->DefaultTransmitKeyIdx = (u1Byte)pNdisCommon->RegRSNAKeyID; - RT_TRACE(COMP_RSNA, DBG_LOUD, ("N6RestoreLastInitSettingAterWakeUP pSecInfo->PairwiseEncAlgorithm = 0x%08X\n",pSecInfo->PairwiseEncAlgorithm)); - // 4. Set Muticase chiper , autconfig not set this OID in AH-mode - //N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM( pAdapter, pNdisCommon->RegGroupALg); - - // 5. Set Key if NEED!! - if( (pNdisCommon->RegPairwiseAlg == DOT11_CIPHER_ALGO_WEP40 - ||pNdisCommon->RegPairwiseAlg == DOT11_CIPHER_ALGO_WEP104 - ||pNdisCommon->RegPairwiseAlg == DOT11_CIPHER_ALGO_WEP ) // Need to check if wep-802.1x used wep to Pairwise key.we need to remove it. - // && pNdisCommon->RegAuthalg == DOT11_AUTH_ALGO_80211_OPEN // remove it for Infra mode. - ) - { - - for(nKeyIdx = 0; nKeyIdx < 4;nKeyIdx++) - { - pNdisCommon->RegDefaultKey[nKeyIdx].Octet = pNdisCommon->RegDefaultKeyBuf[nKeyIdx]; - pNdisCommon->RegDefaultKeyW[nKeyIdx].Octet = pNdisCommon->RegDefaultKeyWBuf[nKeyIdx]; - } - - if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP104 ){ - pKey = pNdisCommon->RegDefaultKeyW; - }else{ - pKey = pNdisCommon->RegDefaultKey; - } - - - for( nKeyIdx = 0 ; nKeyIdx < 4 ; nKeyIdx++ ) - { - if(nKeyIdx == pNdisCommon->RegDefaultKeyId) - IsDefaultKeyId = TRUE; - else - IsDefaultKeyId = FALSE; - if( pKey[nKeyIdx].Length != 0 ){ - MgntActSet_802_11_ADD_WEP( - pAdapter, - pSecInfo->PairwiseEncAlgorithm, - nKeyIdx, - pKey[nKeyIdx].Length, - pKey[nKeyIdx].Octet, - IsDefaultKeyId - ); - } - } - }else if(pMgntInfo->bRSNAPSKMode) - { - MgntActSet_RSNA_ADD_DEAULT_KEY( - pAdapter, - pNdisCommon->RegPairwiseAlg, - pNdisCommon->RegRSNAKeyID, - pNdisCommon->RegRSNADefaultkey.Length, - pNdisCommon->RegRSNADefaultkey.Octet, - MacAddress - ); - } -} - -// -// Description: -// Initialize common NDIS resource in PRT_NDIS6_COMMON. -// 2006.05.07, by rcnjko. -// -VOID -InitNdis6CommonResources( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - u2Byte index = 0; - - RTInitializeSListHead( &(pNdisCommon->TxNBLWaitQueue) ); - - pNdisCommon->bReleaseNblWaitQueueInProgress = FALSE; - WDI_InitRxQueue(pAdapter); - NdisInitializeEvent( &(pNdisCommon->AllPacketReturnedEvent) ); - - PlatformInitializeWorkItem( - pAdapter, - &(pNdisCommon->SetRFPowerStateWorkItem), - (RT_WORKITEM_CALL_BACK)SetRFPowerStateWorkItemCallback, - (PVOID)pAdapter, - "SetRFPowerStateWorkItem"); - - PlatformInitializeWorkItem( - pAdapter, - &(pNdisCommon->SetAdhocLinkStateWorkItem), - (RT_WORKITEM_CALL_BACK)SetAdhocLinkStateWorkItemCallback, - (PVOID)pAdapter, - "SetAdhocLinkStateWorkItem"); - - PlatformInitializeTimer(pAdapter, &(pNdisCommon->InitializeAdapterTimer), - (RT_TIMER_CALL_BACK)InitializeAdapterTimerCallback, NULL, "InitializeTimer"); - - PlatformInitializeTimer(pAdapter, &pNdisCommon->N6CSendSingleNetBufferListTimer, - (RT_TIMER_CALL_BACK)N6CSendSingleNetBufferListTimerCallback, - NULL, "N6CSendSingleNetBufferListTimer"); - - PlatformInitializeTimer(pAdapter, &(pNdisCommon->PNPReConnentTimer), - (RT_TIMER_CALL_BACK)PNPReConnentTimerCallback, NULL, "PNPReConnentTimer"); - - if(pMgntInfo->bSupportPacketCoalescing) - { - // Do colese - PlatformInitializeTimer(pAdapter, &(pNdisCommon->D0RxIndicatTimer), - (RT_TIMER_CALL_BACK)D0RxIndicatTimerCallback, NULL, "D0RxIndicatTimer"); - - RTInitializeListHead( &(pNdisCommon->D0FilterPktQueue) ); - - NdisAllocateSpinLock(&(pNdisCommon->D0FilterPktLock)); - - //pNdisCommon->D0FilterState = RT_D0_FILTER_NONE; // Init D0FilterState !! - pNdisCommon->D0FilterState = RT_D0_FILTER_INIT; // For Test !!! - } - - PlatformInitializeWorkItem( - pAdapter, - &(pNdisCommon->InitializeAdapterWorkItem), - (RT_WORKITEM_CALL_BACK)InitializeAdapterWorkItemCallback, - (PVOID)pAdapter, - "InitializeAdapterWorkItem"); - - PlatformInitializeWorkItem( - pAdapter, - &(pNdisCommon->ReleaseDataFrameQueuedWorkItem), - (RT_WORKITEM_CALL_BACK)N6CReleaseDataFrameQueuedWorkItemCallback, - (PVOID)pAdapter, - "N6CReleaseDataFrameQueuedWorkItemCallback"); - -} - - -// -// Description: -// Release common NDIS resource in PRT_NDIS6_COMMON. -// 2006.05.07, by rcnjko. -// -VOID -ReleaseNdis6CommonResources( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("ReleaseNdis6CommonResources()\n")); - - PlatformFreeWorkItem( &(pNdisCommon->SetRFPowerStateWorkItem) ); - PlatformFreeWorkItem( &(pNdisCommon->SetAdhocLinkStateWorkItem) ); - - PlatformFreeWorkItem( &(pNdisCommon->InitializeAdapterWorkItem) ); - PlatformCancelTimer(pAdapter, &(pNdisCommon->InitializeAdapterTimer)); - PlatformReleaseTimer(pAdapter, &(pNdisCommon->InitializeAdapterTimer)); - PlatformCancelTimer(pAdapter, &(pNdisCommon->N6CSendSingleNetBufferListTimer)); - PlatformReleaseTimer(pAdapter, &(pNdisCommon->N6CSendSingleNetBufferListTimer)); - - PlatformCancelTimer(pAdapter, &(pNdisCommon->PNPReConnentTimer)); - PlatformReleaseTimer(pAdapter, &(pNdisCommon->PNPReConnentTimer)); - - if(pMgntInfo->bSupportPacketCoalescing) - { - PlatformCancelTimer(pAdapter, &(pNdisCommon->D0RxIndicatTimer)); - PlatformReleaseTimer(pAdapter, &(pNdisCommon->D0RxIndicatTimer)); - - NdisFreeSpinLock(&(pNdisCommon->D0FilterPktLock)); - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("Release TxSemaphore IOSemaphore before N6CDeInitThread\n")); - // Release Tx semaphore before cancel corresponding Tx thread. - PlatformReleaseSemaphore(&device->TxSemaphore); - // Free Tx semaphore. - PlatformFreeSemaphore(&device->TxSemaphore); -#if RTL8723_SDIO_IO_THREAD_ENABLE - // Release IO semaphore before cancel corresponding IO thread. - PlatformReleaseSemaphore(&device->IOSemaphore); - // Free IO semaphore. - PlatformFreeSemaphore(&device->IOSemaphore); -#endif - // - // In the WDI model, the MS Component handles the original MiniportHaltEx call - // and splits it into multiple WDI interface calls. So we only need to handle DeinitThread here instead. - // 2015.03.09. - // - if(IsDefaultAdapter(pAdapter)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("ReleaseNdis6CommonResources N6CDeInitThread for SDIO+-\n")); - N6CDeInitThread((PVOID)pAdapter); // Added for SDIO WDI - } - - PlatformFreeWorkItem( &(pNdisCommon->ReleaseDataFrameQueuedWorkItem) ); - -} - - -// -// Description: -// Wrapper function for status indication on NDIS 6. -// 2006.10.03, by shien chang. -// -VOID -N6IndicateStatus( - IN PADAPTER pAdapter, - IN NDIS_STATUS GeneralStatus, - IN PVOID StatusBuffer, - IN UINT StatusBufferSize - ) -{ - NDIS_HANDLE MiniportAdapterHandle = pAdapter->pNdisCommon->hNdisAdapter; - NDIS_STATUS_INDICATION StatusIndication; - - PlatformZeroMemory(&StatusIndication, sizeof(NDIS_STATUS_INDICATION)); - - N6_ASSIGN_OBJECT_HEADER( - StatusIndication.Header, - NDIS_OBJECT_TYPE_STATUS_INDICATION, - NDIS_STATUS_INDICATION_REVISION_1, - sizeof(NDIS_STATUS_INDICATION)); - - StatusIndication.SourceHandle = MiniportAdapterHandle; - StatusIndication.StatusCode = GeneralStatus; - StatusIndication.StatusBuffer = StatusBuffer; - StatusIndication.StatusBufferSize = StatusBufferSize; - - if(pAdapter->pNdis62Common) - { - StatusIndication.PortNumber = GET_PORT_NUMBER(pAdapter); - - RT_TRACE(COMP_INDIC, DBG_LOUD, ("Indicate Status: 0x%X, Indicate to PortNumber: %d\n", GeneralStatus, StatusIndication.PortNumber)); - } - StatusIndication.RequestId=NULL; - StatusIndication.DestinationHandle=NULL; - - if(!OS_SUPPORT_WDI(pAdapter)) - { - NdisMIndicateStatusEx(MiniportAdapterHandle, &StatusIndication); - } -} - -VOID -N6CInitializeSpinLocks( - IN PADAPTER pAdapter - ) -{ - TX_InitializeSpinlock(pAdapter); - PlatformInitializeSpinLock(pAdapter, RT_TX_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RX_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RM_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_CAM_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_SCAN_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_LOG_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_BW_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_CHNLOP_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RF_OPERATE_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_INITIAL_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RF_STATE_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_H2C_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - -#if VISTA_USB_RX_REVISE - PlatformInitializeSpinLock(pAdapter, RT_USBRX_CONTEXT_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_USBRX_POSTPROC_SPINLOCK); -#endif - - PlatformInitializeSpinLock(pAdapter, RT_PORT_SPINLOCK); - - PlatformInitializeSpinLock(pAdapter, RT_GEN_TEMP_BUF_SPINLOCK); - - PlatformInitializeSpinLock(pAdapter, RT_AWB_SPINLOCK); - - PlatformInitializeSpinLock(pAdapter, RT_BTData_SPINLOCK); - - PlatformInitializeSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - PlatformInitializeSpinLock(pAdapter, RT_HW_TIMER_SPIN_LOCK); - - PlatformInitializeSpinLock(pAdapter, RT_P2P_SPIN_LOCK); - PlatformInitializeSpinLock(pAdapter, RT_IQK_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_DYN_TXPWRTBL_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - PlatformInitializeSpinLock(pAdapter, RT_INDIC_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_RFD_SPINLOCK); - -#if DRV_LOG_REGISTRY - PlatformInitializeSpinLock(pAdapter, RT_DRV_STATE_SPINLOCK); -#endif - -#if (AUTO_CHNL_SEL_NHM == 1) - PlatformInitializeSpinLock(pAdapter, RT_ACS_SPINLOCK); -#endif - - PlatformInitializeSpinLock(pAdapter, RT_RX_REF_CNT_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_FW_PS_SPINLOCK); - PlatformInitializeSpinLock(pAdapter, RT_SYNC_IO_CNT_SPINLOCK); - -} - - -VOID -N6CFreeSpinLocks( - IN PADAPTER pAdapter - ) -{ - TX_FreeSpinlock(pAdapter); - PlatformFreeSpinLock(pAdapter, RT_TX_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RX_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_CAM_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RM_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_SCAN_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_LOG_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_BW_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_CHNLOP_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RF_OPERATE_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_INITIAL_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RF_STATE_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_H2C_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - -#if VISTA_USB_RX_REVISE - PlatformFreeSpinLock(pAdapter, RT_USBRX_CONTEXT_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_USBRX_POSTPROC_SPINLOCK); -#endif - - - PlatformFreeSpinLock(pAdapter, RT_PORT_SPINLOCK); - - PlatformFreeSpinLock(pAdapter, RT_GEN_TEMP_BUF_SPINLOCK); - - PlatformFreeSpinLock(pAdapter, RT_AWB_SPINLOCK); - - PlatformFreeSpinLock(pAdapter, RT_BTData_SPINLOCK); - - PlatformFreeSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - PlatformFreeSpinLock(pAdapter, RT_HW_TIMER_SPIN_LOCK); - - PlatformFreeSpinLock(pAdapter, RT_P2P_SPIN_LOCK); - PlatformFreeSpinLock(pAdapter, RT_IQK_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_DYN_TXPWRTBL_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_CHNLLIST_SPINLOCK); - - PlatformFreeSpinLock(pAdapter, RT_INDIC_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_RFD_SPINLOCK); - -#if DRV_LOG_REGISTRY - PlatformFreeSpinLock(pAdapter, RT_DRV_STATE_SPINLOCK); -#endif - -#if (AUTO_CHNL_SEL_NHM == 1) - PlatformFreeSpinLock(pAdapter, RT_ACS_SPINLOCK); -#endif - - PlatformFreeSpinLock(pAdapter, RT_RX_REF_CNT_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_FW_PS_SPINLOCK); - PlatformFreeSpinLock(pAdapter, RT_SYNC_IO_CNT_SPINLOCK); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<===N6CFreeSpinLocks()\n")); -} - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.h b/network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.h deleted file mode 100644 index 4ee90a29..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Init.h +++ /dev/null @@ -1,136 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: N6C_Init.h -// Description: NDIS6.x common function for initialization. -// -// Author: shien chang -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_N6C_REGISTRY_H -#define __INC_N6C_REGISTRY_H - -#define NUM_SUPPORTED_VWIFI_COMBINATIONS 1 -#define ADDR2DATA ULONG_PTR - -#define NDIS_REG_NET_CFG_INSTANCE_ID_NAME "NetCfgInstanceId" - -typedef struct _MP_REG_ENTRY -{ - NDIS_STRING RegName; // variable name text - BOOLEAN bRequired; // 1 -> required, 0 -> optional - UCHAR Type; // NdisParameterInteger/NdisParameterHexInteger/NdisParameterStringle/NdisParameterMultiString - UINT FieldOffset; // offset to MP_ADAPTER field - UINT FieldSize; // size (in bytes) of the field - ULONG_PTR Default; - UINT Min; // minimum value allowed - UINT Max; // maximum value allowed -} MP_REG_ENTRY, *PMP_REG_ENTRY; - -// For 818x UI, 2004.11.30, by rcnjko. -typedef enum _REG_WEP_STATUS -{ - REG_WEP_STATUS_MIN, // 0 - REG_WEP_STATUS_NO_WEP, // 1 - REG_WEP_STATUS_WEP64, // 2 - REG_WEP_STATUS_WEP128 // 3 -}REG_WEP_STATUS; - -// For 818x UI, 2004.11.30, by rcnjko. -typedef enum REG_EncryptionAlgorithm -{ - REG_WEP_Encryption, // 0 - REG_TKIP_Encryption, // 1 - REG_TKIPv2_Encryption, // 2 - REG_AESWRAP_Encryption, // 3 - REG_AESCCMP_Encryption, // 4 - REG_CKIP_Encryption, // 5 - REG_NONE_Encryption, // 6 - REG_WAPI_PSK, - REG_WAPI_CERT - -}REG_EncryptionAlgorithm; - -// For 818x UI, 2004.11.30, by rcnjko. -typedef enum _REG_NETWORK_INFRA -{ - NI_ADHOC, - NI_Infrastructure, - NI_AUTO -}REG_NETWORK_INFRA; - -// Forward declaration. -typedef struct _ADAPTER ADAPTER, *PADAPTER; - -NDIS_STATUS -CopyFromUnicodeToOS( - UCHAR *pointer, - UNICODE_STRING *uniStr, - USHORT copyLen); - -NDIS_STATUS -CopyFromUnicodeToString( - UCHAR *pointer, - UNICODE_STRING *uniStr, - USHORT copyLen); - -int -TranslateNdisPsToRtPs( - IN NDIS_802_11_POWER_MODE ndisPsMode); - -NDIS_STATUS -N6OpenConfigurationHandle( - IN PADAPTER pAdapter, - IN PNDIS_HANDLE pConfigurationHandle - ); - -VOID -N6CloseConfigurationHandle( - IN NDIS_HANDLE ConfigurationHandle - ); - -NDIS_STATUS -N6ReadCommonRegistry( - IN PADAPTER pAdapter - ); - -VOID -N6UpdateDefaultSetting( - IN PADAPTER pAdapter); - - -VOID -N6RestoreLastInitSetting( - IN PADAPTER pAdapter); - -// -//Name : N6RestoreLastInitSettingAterWakeUP -//Function : Reconnent to AH when wake up -// -VOID -N6RestoreLastInitSettingAterWakeUP( - IN PADAPTER pAdapter ); - -VOID -InitNdis6CommonResources( - IN PADAPTER pAdapter); - -VOID -ReleaseNdis6CommonResources( - IN PADAPTER pAdapter); - -VOID -N6IndicateStatus( - IN PADAPTER pAdapter, - IN NDIS_STATUS GeneralStatus, - IN PVOID StatusBuffer, - IN UINT StatusBufferSize); - -VOID -N6CInitializeSpinLocks( - IN PADAPTER pAdapter); - -VOID -N6CFreeSpinLocks( - IN PADAPTER pAdapter); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.c b/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.c deleted file mode 100644 index 63a07391..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.c +++ /dev/null @@ -1,2929 +0,0 @@ -#include "Mp_Precomp.h" - - -// -// Translate RT_AUTH_MODE to DOT11_AUTH_ALGORITHM. -// Added by Annie, 2006-10-19. -// -DOT11_AUTH_ALGORITHM -N6CAuthModeToDot11( - IN PVOID pAuthMode - ) -{ - RT_AUTH_MODE AuthMode = *((PRT_AUTH_MODE)pAuthMode); - DOT11_AUTH_ALGORITHM dot11AuthAlg; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("==> N6CAuthModeToDot11(): AuthMode=0x%X\n", AuthMode) ); - - switch(AuthMode) - { - case RT_802_11AuthModeOpen: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthModeToDot11(): DOT11_AUTH_ALGO_80211_OPEN\n")); - break; - - case RT_802_11AuthModeShared: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_SHARED_KEY; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthModeToDot11(): DOT11_AUTH_ALGO_80211_SHARED_KEY\n")); - break; - - case RT_802_11AuthModeAutoSwitch: - // No such case in DOT11_AUTH_ALGO_XXX!! - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_WARNING, ("N6CAuthModeToDot11(): RT_802_11AuthModeAutoSwitch => DOT11_AUTH_ALGO_80211_OPEN (WARNING!!!)\n")); - break; - - case RT_802_11AuthModeWPA: - dot11AuthAlg = DOT11_AUTH_ALGO_WPA; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthModeToDot11(): DOT11_AUTH_ALGO_WPA\n")); - break; - - case RT_802_11AuthModeWPAPSK: - dot11AuthAlg = DOT11_AUTH_ALGO_WPA_PSK; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthModeToDot11(): DOT11_AUTH_ALGO_WPA_PSK\n")); - break; - - case RT_802_11AuthModeWPANone: - // No such case in DOT11_AUTH_ALGO_XXX!! - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_WARNING, ("N6CAuthModeToDot11(): RT_802_11AuthModeWPANone => DOT11_AUTH_ALGO_80211_OPEN (WARNING!!!)\n")); - break; - - case RT_802_11AuthModeWPA2: - dot11AuthAlg = DOT11_AUTH_ALGO_RSNA; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthModeToDot11(): DOT11_AUTH_ALGO_RSNA\n")); - break; - - case RT_802_11AuthModeWPA2PSK: - dot11AuthAlg = DOT11_AUTH_ALGO_RSNA_PSK; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthModeToDot11(): DOT11_AUTH_ALGO_RSNA_PSK\n")); - break; - - case RT_802_11AuthModeMax: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_WARNING, ("N6CAuthModeToDot11(): RT_802_11AuthModeMax => DOT11_AUTH_ALGO_80211_OPEN (WARNING!!!)\n")); - break; - - case RT_802_11AuthModeCCKM: - dot11AuthAlg = DOT11_AUTH_ALGO_CCKM; - RT_TRACE(COMP_SEC, DBG_WARNING, ("N6CAuthModeToDot11(): RT_802_11AuthModeMax => DOT11_AUTH_ALGO_80211_OPEN (WARNING!!!)\n")); - break; - - default: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_WARNING, ("N6CAuthModeToDot11(): unknow authmode: 0x%X => DOT11_AUTH_ALGO_80211_OPEN (WARNING!!!)\n", AuthMode)); - break; - } - - RT_TRACE( COMP_SEC, DBG_LOUD, ("<== N6CAuthModeToDot11(): dot11AuthAlg=0x%X\n", dot11AuthAlg) ); - - return dot11AuthAlg; -} - - - -// -// Translate RT_AUTH_MODE to DOT11_AUTH_ALGORITHM. -// Added by Annie, 2006-10-19. -// -DOT11_AUTH_ALGORITHM -N6CAuthAlgToDot11( - IN PVOID pAuthMode - ) -{ - AUTH_ALGORITHM AuthMode = *((PAUTH_ALGORITHM)pAuthMode); - DOT11_AUTH_ALGORITHM dot11AuthAlg; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("==> N6CAuthAlgToDot11(): AuthMode=0x%X\n", AuthMode) ); - - switch(AuthMode) - { - case OPEN_SYSTEM: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthAlgToDot11(): DOT11_AUTH_ALGO_80211_OPEN\n")); - break; - - case SHARED_KEY: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_SHARED_KEY; - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CAuthAlgToDot11(): DOT11_AUTH_ALGO_80211_SHARED_KEY\n")); - break; - - default: - dot11AuthAlg = DOT11_AUTH_ALGO_80211_OPEN; - RT_TRACE(COMP_SEC, DBG_WARNING, ("N6CAuthAlgToDot11(): unknow authmode: 0x%X => DOT11_AUTH_ALGO_80211_OPEN (WARNING!!!)\n", AuthMode)); - break; - } - - RT_TRACE( COMP_SEC, DBG_LOUD, ("<== N6CAuthAlgToDot11(): dot11AuthAlg=0x%X\n", dot11AuthAlg) ); - - return dot11AuthAlg; -} - - -// -// Translate RT_ENC_ALG to DOT11_CIPHER_ALGORITHM. -// Added by Annie, 2006-10-19. -// -DOT11_CIPHER_ALGORITHM -N6CEncAlgorithmToDot11( - IN PVOID pEncAlgorithm - ) -{ - RT_ENC_ALG EncAlgorithm = *((PRT_ENC_ALG)pEncAlgorithm); - DOT11_CIPHER_ALGORITHM dot11CipherAlg; - - switch( EncAlgorithm ) - { - case RT_ENC_ALG_NO_CIPHER: - dot11CipherAlg = DOT11_CIPHER_ALGO_NONE; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_LOUD, ("N6CEncAlgorithmToDot11(): DOT11_CIPHER_ALGO_NONE\n") ); - break; - - case RT_ENC_ALG_WEP40: - dot11CipherAlg = DOT11_CIPHER_ALGO_WEP40; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_LOUD, ("N6CEncAlgorithmToDot11(): DOT11_CIPHER_ALGO_WEP40\n") ); - break; - - case RT_ENC_ALG_TKIP: - dot11CipherAlg = DOT11_CIPHER_ALGO_TKIP; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_LOUD, ("N6CEncAlgorithmToDot11(): DOT11_CIPHER_ALGO_TKIP\n") ); - break; - - case RT_ENC_ALG_AESCCMP: - dot11CipherAlg = DOT11_CIPHER_ALGO_CCMP; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_LOUD, ("N6CEncAlgorithmToDot11(): DOT11_CIPHER_ALGO_CCMP\n") ); - break; - - case RT_ENC_ALG_WEP104: - dot11CipherAlg = DOT11_CIPHER_ALGO_WEP104; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_LOUD, ("N6CEncAlgorithmToDot11(): DOT11_CIPHER_ALGO_WEP104\n") ); - break; - - case RT_ENC_ALG_WEP: - dot11CipherAlg = DOT11_CIPHER_ALGO_WEP; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_LOUD, ("N6CEncAlgorithmToDot11(): DOT11_CIPHER_ALGO_WEP\n") ); - break; - - default: - dot11CipherAlg = DOT11_CIPHER_ALGO_NONE; - RT_TRACE( COMP_SEC|COMP_MLME, DBG_WARNING, ("N6CEncAlgorithmToDot11(): Unknown PairwiseEncAlgorithm 0x%08X => DOT11_CIPHER_ALGO_NONE\n", EncAlgorithm) ); - break; - } - - return dot11CipherAlg; -} - - -// -// Implementation of OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM querying for NDIS6. -// Added by Annie, 2006-10-10. -// (reference MpQueryEnabledAuthenticationAlgorithm() and Sta11QueryEnabledAuthenticationAlgorithm() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_ENABLED_AUTHENTICATION_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PDOT11_AUTH_ALGORITHM_LIST pAuthAlgoList = (PDOT11_AUTH_ALGORITHM_LIST)InformationBuffer; - RT_AUTH_MODE authmode; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("==> N6CQuery_DOT11_ENABLED_AUTHENTICATION_ALGORITHM()\n") ); - - *BytesNeeded = sizeof(DOT11_AUTH_ALGORITHM_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - if ( InformationBufferLength >= (ULONG)FIELD_OFFSET(DOT11_AUTH_ALGORITHM_LIST, AlgorithmIds) ) - { - pAuthAlgoList->uNumOfEntries = 0; - pAuthAlgoList->uTotalNumOfEntries = 1; - } - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformZeroMemory( pAuthAlgoList, *BytesNeeded ); - - N6_ASSIGN_OBJECT_HEADER( - pAuthAlgoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_AUTH_ALGORITHM_LIST)); - - pAuthAlgoList->uNumOfEntries = 1; - pAuthAlgoList->uTotalNumOfEntries = 1; - - MgntActQuery_802_11_AUTHENTICATION_MODE( Adapter, &authmode ); - pAuthAlgoList->AlgorithmIds[0] = N6CAuthModeToDot11( &authmode ); - *BytesWritten = *BytesNeeded; - *BytesNeeded = 0; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("<== N6CQuery_DOT11_ENABLED_AUTHENTICATION_ALGORITHM():0x%X\n", pAuthAlgoList->AlgorithmIds[0]) ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Implementation of OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM querying for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11QueryEnabledUnicastCipherAlgorithm() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - PDOT11_CIPHER_ALGORITHM_LIST pCipherAlgoList = (PDOT11_CIPHER_ALGORITHM_LIST)InformationBuffer; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("==> N6CQuery_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM()\n") ); - - *BytesNeeded = sizeof(DOT11_CIPHER_ALGORITHM_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformZeroMemory( pCipherAlgoList, *BytesNeeded ); - - N6_ASSIGN_OBJECT_HEADER( - pCipherAlgoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CIPHER_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_CIPHER_ALGORITHM_LIST)); - - pCipherAlgoList->uNumOfEntries = 1; - pCipherAlgoList->uTotalNumOfEntries = 1; - pCipherAlgoList->AlgorithmIds[0] = N6CEncAlgorithmToDot11(&(pSecInfo->PairwiseEncAlgorithm)); - *BytesWritten = *BytesNeeded; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("<== N6CQuery_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM():0x%X\n", pCipherAlgoList->AlgorithmIds[0]) ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Implementation of OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM querying for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11QueryEnabledMulticastCipherAlgorithm() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - PDOT11_CIPHER_ALGORITHM_LIST pCipherAlgoList = (PDOT11_CIPHER_ALGORITHM_LIST)InformationBuffer; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("==> N6CQuery_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM()\n") ); - - *BytesNeeded = sizeof(DOT11_CIPHER_ALGORITHM_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformZeroMemory( pCipherAlgoList, *BytesNeeded ); - - N6_ASSIGN_OBJECT_HEADER( - pCipherAlgoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CIPHER_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_CIPHER_ALGORITHM_LIST)); - - pCipherAlgoList->uNumOfEntries = 1; - pCipherAlgoList->uTotalNumOfEntries = 1; - pCipherAlgoList->AlgorithmIds[0] = N6CEncAlgorithmToDot11(&(pSecInfo->GroupEncAlgorithm)); - *BytesWritten = *BytesNeeded; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("<== N6CQuery_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM():0x%X\n", pCipherAlgoList->AlgorithmIds[0]) ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Implementation of OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR querying for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11QuerySupportedUnicastAlgorithmPair() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - static DOT11_AUTH_CIPHER_PAIR UcastAuthCipherList[] = - { - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_NONE}, // 0 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_CCMP}, //14 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP40}, // 1 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP40}, // 2 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP104}, // 3 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP104}, // 4 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP}, // 5 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP}, // 6 - {DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_TKIP}, // 7 - {DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_TKIP}, // 8 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_TKIP}, // 9 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_TKIP}, //10 - {DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_CCMP}, //11 - {DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_CCMP}, //12 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_TKIP }, //15 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_CCMP}, //16 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPCCMP }, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPTKIP}, //18 - - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPCCMP}, //19 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPTKIP}, //20 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - - static DOT11_AUTH_CIPHER_PAIR UcastAuthCipherListWiFiCfg[] = - { - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_NONE}, // 0 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_CCMP}, //14 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP40}, // 1 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP40}, // 2 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP104}, // 3 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP104}, // 4 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP}, // 5 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP}, // 6 - //{DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_TKIP}, // 7 - //{DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_TKIP}, // 8 - //{DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_TKIP}, // 9 - //{DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_TKIP}, //10 - //{DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_CCMP}, //11 - //{DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_CCMP}, //12 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_TKIP }, //15 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_CCMP}, //16 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPCCMP }, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPTKIP}, //18 - - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPCCMP}, //19 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPTKIP}, //20 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - - static DOT11_AUTH_CIPHER_PAIR UcastAuthCipherListIBSS[] = - { - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_NONE}, // 0 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP40}, // 1 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP104}, // 2 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP}, // 3 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_CCMP}, //4//4 - }; - - u4Byte ulNumOfPairSupported = 0; - u4Byte TotalLength = 0; - PDOT11_AUTH_CIPHER_PAIR_LIST pAuthCipherList = (PDOT11_AUTH_CIPHER_PAIR_LIST)InformationBuffer; - u4Byte i; - u4Byte FillLength = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("==> N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR()\n") ); - - if( Adapter->MgntInfo.Regdot11networktype != RT_JOIN_NETWORKTYPE_ADHOC ) - { - if(Adapter->MgntInfo.bWiFiConfg) - { - ulNumOfPairSupported = sizeof(UcastAuthCipherListWiFiCfg)/sizeof(DOT11_AUTH_CIPHER_PAIR); - TotalLength = sizeof(UcastAuthCipherListWiFiCfg) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - } - else - { - ulNumOfPairSupported = sizeof(UcastAuthCipherList)/sizeof(DOT11_AUTH_CIPHER_PAIR); - TotalLength = sizeof(UcastAuthCipherList) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - } - if ( InformationBufferLength < sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ) - { - *BytesNeeded = TotalLength; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_TOO_SHORT\n") ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - PlatformZeroMemory( pAuthCipherList, sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ); - N6_ASSIGN_OBJECT_HEADER( - pAuthCipherList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1, - sizeof(DOT11_AUTH_CIPHER_PAIR_LIST)); - FillLength += FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - - pAuthCipherList->uNumOfEntries = 0; - pAuthCipherList->uTotalNumOfEntries = ulNumOfPairSupported; - for (i=0; i InformationBufferLength) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - break; - } - - pAuthCipherList->uNumOfEntries ++; - FillLength += sizeof(DOT11_AUTH_CIPHER_PAIR); - } - - CopyMem(pAuthCipherList->AuthCipherPairs, - ((Adapter->MgntInfo.bWiFiConfg) ? UcastAuthCipherListWiFiCfg : UcastAuthCipherList), - sizeof(DOT11_AUTH_CIPHER_PAIR)*pAuthCipherList->uNumOfEntries); - - *BytesWritten = FillLength; - *BytesNeeded = TotalLength; - } - else { - ulNumOfPairSupported = sizeof(UcastAuthCipherListIBSS)/sizeof(DOT11_AUTH_CIPHER_PAIR); - TotalLength = sizeof(UcastAuthCipherListIBSS) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - if ( InformationBufferLength < sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ) - { - *BytesNeeded = TotalLength; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_TOO_SHORT\n") ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - PlatformZeroMemory( pAuthCipherList, sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ); - N6_ASSIGN_OBJECT_HEADER( - pAuthCipherList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1, - sizeof(DOT11_AUTH_CIPHER_PAIR_LIST)); - FillLength += FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - pAuthCipherList->uNumOfEntries = 0; - pAuthCipherList->uTotalNumOfEntries = ulNumOfPairSupported; - - for (i=0; i InformationBufferLength) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - break; - } - - pAuthCipherList->uNumOfEntries ++; - FillLength += sizeof(DOT11_AUTH_CIPHER_PAIR); - } - - CopyMem(pAuthCipherList->AuthCipherPairs, - UcastAuthCipherListIBSS, - sizeof(DOT11_AUTH_CIPHER_PAIR)*pAuthCipherList->uNumOfEntries); - - *BytesWritten = FillLength; - *BytesNeeded = TotalLength; - - } - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("<== N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR()\n") ); - return ndisStatus; - -} - - - -// -// Implementation of OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR querying for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11QuerySupportedMulticastAlgorithmPair() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - static DOT11_AUTH_CIPHER_PAIR McastAuthCipherList[] = - { - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_NONE}, // 0 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_CCMP}, //14 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP40}, // 1 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP40}, // 2 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP104}, // 3 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP104}, // 4 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP}, // 5 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP}, // 6 - {DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_TKIP}, // 7 - {DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_TKIP}, // 8 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_TKIP}, // 9 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_TKIP}, //10 - {DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_CCMP}, //11 - {DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_CCMP}, //12 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_WEP40}, //15 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_WEP104}, //16 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_TKIP}, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_CCMP}, //18 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - - static DOT11_AUTH_CIPHER_PAIR McastAuthCipherListWiFiCfg[] = - { - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_NONE}, // 0 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_CCMP}, //14 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP40}, // 1 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP40}, // 2 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP104}, // 3 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP104}, // 4 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP}, // 5 - {DOT11_AUTH_ALGO_80211_SHARED_KEY, DOT11_CIPHER_ALGO_WEP}, // 6 - //{DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_TKIP}, // 7 - //{DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_TKIP}, // 8 - //{DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_TKIP}, // 9 - //{DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_TKIP}, //10 - //{DOT11_AUTH_ALGO_WPA, DOT11_CIPHER_ALGO_CCMP}, //11 - //{DOT11_AUTH_ALGO_WPA_PSK, DOT11_CIPHER_ALGO_CCMP}, //12 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_WEP40}, //15 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_WEP104}, //16 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_TKIP}, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_CCMP}, //18 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - - static DOT11_AUTH_CIPHER_PAIR McastAuthCipherListIBSS[] = - { - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_NONE}, // 0 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP40}, // 1 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP104}, // 2 - {DOT11_AUTH_ALGO_80211_OPEN, DOT11_CIPHER_ALGO_WEP}, // 3 - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_CCMP}, // 4 - }; - - u4Byte ulNumOfPairSupported = sizeof(McastAuthCipherList)/sizeof(DOT11_AUTH_CIPHER_PAIR); - u4Byte TotalLength = sizeof(McastAuthCipherList) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - PDOT11_AUTH_CIPHER_PAIR_LIST pAuthCipherList = (PDOT11_AUTH_CIPHER_PAIR_LIST)InformationBuffer; - u4Byte i; - u4Byte FillLength = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("==> N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR()\n") ); - if( Adapter->MgntInfo.Regdot11networktype != RT_JOIN_NETWORKTYPE_ADHOC) - { - if(Adapter->MgntInfo.bWiFiConfg) - { - ulNumOfPairSupported = sizeof(McastAuthCipherListWiFiCfg)/sizeof(DOT11_AUTH_CIPHER_PAIR); - TotalLength = sizeof(McastAuthCipherListWiFiCfg) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - } - else - { - ulNumOfPairSupported = sizeof(McastAuthCipherList)/sizeof(DOT11_AUTH_CIPHER_PAIR); - TotalLength = sizeof(McastAuthCipherList) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - } - if ( InformationBufferLength < sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ) - { - *BytesNeeded = TotalLength; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_TOO_SHORT\n") ); - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformZeroMemory( pAuthCipherList, sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ); - - N6_ASSIGN_OBJECT_HEADER( - pAuthCipherList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1, - sizeof(DOT11_AUTH_CIPHER_PAIR_LIST)); - FillLength += FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - - pAuthCipherList->uNumOfEntries = 0; - pAuthCipherList->uTotalNumOfEntries = ulNumOfPairSupported; - for (i=0; i InformationBufferLength) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - break; - } - - pAuthCipherList->uNumOfEntries ++; - FillLength += sizeof(DOT11_AUTH_CIPHER_PAIR); - } - - CopyMem(pAuthCipherList->AuthCipherPairs, - ((Adapter->MgntInfo.bWiFiConfg) ? McastAuthCipherListWiFiCfg : McastAuthCipherList), - sizeof(DOT11_AUTH_CIPHER_PAIR)*pAuthCipherList->uNumOfEntries); - - *BytesWritten = FillLength; - *BytesNeeded = TotalLength; - }else{ - ulNumOfPairSupported = sizeof(McastAuthCipherListIBSS)/sizeof(DOT11_AUTH_CIPHER_PAIR); - TotalLength = sizeof(McastAuthCipherListIBSS) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - if ( InformationBufferLength < sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ) - { - *BytesNeeded = TotalLength; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_TOO_SHORT\n") ); - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformZeroMemory( pAuthCipherList, sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ); - - N6_ASSIGN_OBJECT_HEADER( - pAuthCipherList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1, - sizeof(DOT11_AUTH_CIPHER_PAIR_LIST)); - FillLength += FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - - pAuthCipherList->uNumOfEntries = 0; - pAuthCipherList->uTotalNumOfEntries = ulNumOfPairSupported; - for (i=0; i InformationBufferLength) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - break; - } - - pAuthCipherList->uNumOfEntries ++; - FillLength += sizeof(DOT11_AUTH_CIPHER_PAIR); - } - - CopyMem(pAuthCipherList->AuthCipherPairs, - McastAuthCipherListIBSS, - sizeof(DOT11_AUTH_CIPHER_PAIR)*pAuthCipherList->uNumOfEntries); - - *BytesWritten = FillLength; - *BytesNeeded = TotalLength; - } - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("<== N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR()\n") ); - return ndisStatus; -} - -// -// Implementation of OID_DOT11_PMKID_LIST querying for NDIS6. -// Added by Annie, 2006-10-12. -// (reference MpQueryPMKIDList() and Sta11QueryPMKIDList() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_PMKID_LIST( - IN PADAPTER Adapter, - OUT PDOT11_PMKID_LIST pPMKIDList, - IN ULONG TotalLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - u1Byte idx; - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("==> N6CQuery_DOT11_PMKID_LIST()\n") ); - - PlatformZeroMemory( pPMKIDList, TotalLength ); - - N6_ASSIGN_OBJECT_HEADER( - pPMKIDList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PMKID_LIST_REVISION_1, - sizeof(DOT11_PMKID_LIST)); - - pPMKIDList->uTotalNumOfEntries = NUM_PMKID_CACHE; //pStation->Config.PMKIDCount; in MS's code - pPMKIDList->uNumOfEntries = 0; - - // - // Integer overflow check - // - if ((ULONG)FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs) > - (ULONG)FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs) + pSecInfo->PMKIDCount * sizeof(DOT11_PMKID_ENTRY)) - { - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_PMKID_LIST(), NDIS_STATUS_FAILURE\n") ); - return NDIS_STATUS_FAILURE; - } - - // - // If the buffer is not big enough, simply return error. - // - if (TotalLength < FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs) + pSecInfo->PMKIDCount * sizeof(DOT11_PMKID_ENTRY)) - { - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_PMKID_LIST(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // Copy the PMKID list. - // - pPMKIDList->uNumOfEntries = pSecInfo->PMKIDCount; - for( idx=0; idxPMKIDCount; idx++ ) - { - // 1. BSSID - cpMacAddr( pPMKIDList->PMKIDs[idx].BSSID, pSecInfo->PMKIDList[idx].Bssid ); - - // 2. PMKID - CopyMem( pPMKIDList->PMKIDs[idx].PMKID, pSecInfo->PMKIDList[idx].PMKID, PMKID_LEN ); - - // 3. uFlags: This member is reserved and must be set to zero. - pPMKIDList->PMKIDs[idx].uFlags = 0; - } - - RT_TRACE( COMP_OID_QUERY|COMP_SEC, DBG_TRACE, ("<== N6CQuery_DOT11_PMKID_LIST()\n") ); - return NDIS_STATUS_SUCCESS; -} - -// -// Implementation of OID_DOT11_EXTSTA_CAPABILITY querying for NDIS6. -// Added by Annie, 2006-10-12. -// (reference MpQueryDot11TableSize() and Sta11QueryExtStaCapability() in MS's code) -// -NDIS_STATUS -N6CQuery_DOT11_EXTSTA_CAPABILITY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PDOT11_EXTSTA_CAPABILITY pDot11ExtStaCap = (PDOT11_EXTSTA_CAPABILITY)InformationBuffer; - - RT_TRACE( COMP_OID_QUERY, DBG_TRACE, ("==> N6CQuery_DOT11_EXTSTA_CAPABILITY()\n") ); - - *BytesNeeded = sizeof(DOT11_EXTSTA_CAPABILITY); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformZeroMemory( pDot11ExtStaCap, *BytesNeeded ); - - N6_ASSIGN_OBJECT_HEADER( - pDot11ExtStaCap->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_EXTSTA_CAPABILITY_REVISION_1, - sizeof(DOT11_EXTSTA_CAPABILITY)); - - pDot11ExtStaCap->uScanSSIDListSize = NATIVE_802_11_MAX_SCAN_SSID; - pDot11ExtStaCap->uDesiredBSSIDListSize = NATIVE_802_11_MAX_DESIRED_BSSID; //STA_DESIRED_BSSID_MAX_COUNT in MS's code - pDot11ExtStaCap->uDesiredSSIDListSize = NATIVE_802_11_MAX_DESIRED_SSID; - pDot11ExtStaCap->uExcludedMacAddressListSize = NATIVE_802_11_MAX_EXCLUDED_MACADDR; //STA_EXCLUDED_MAC_ADDRESS_MAX_COUNT in MS's code - pDot11ExtStaCap->uPrivacyExemptionListSize = NATIVE_802_11_MAX_PRIVACY_EXEMPTION; - pDot11ExtStaCap->uKeyMappingTableSize = NATIVE_802_11_MAX_KEY_MAPPING_ENTRY; - pDot11ExtStaCap->uDefaultKeyTableSize = NATIVE_802_11_MAX_DEFAULT_KEY_ENTRY; - pDot11ExtStaCap->uWEPKeyValueMaxLength = NATIVE_802_11_MAX_WEP_KEY_LENGTH; - pDot11ExtStaCap->uPMKIDCacheSize = NATIVE_802_11_MAX_PMKID_CACHE; - pDot11ExtStaCap->uMaxNumPerSTADefaultKeyTables = NATIVE_802_11_MAX_PER_STA_DEFAULT_KEY; - - *BytesWritten = *BytesNeeded; - - RT_TRACE( COMP_OID_QUERY, DBG_TRACE, ("<== N6CQuery_DOT11_EXTSTA_CAPABILITY()\n") ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Implementation of OID_DOT11_POWER_MGMT_REQUEST querying for NDIS6. -// Added by Annie, 2006-10-16. -// (reference MpQueryPowerMgmtRequest() and Sta11QueryPowerMgmtRequest() in MS's code) -// -VOID -N6CQuery_DOT11_POWER_MGMT_REQUEST( - IN PADAPTER Adapter, - OUT pu4Byte pPowerSaveLevel - ) -{ - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - switch(pPSC->PowerSaveLevel) - { - case POWER_SAVING_NO_POWER_SAVING: - *pPowerSaveLevel = DOT11_POWER_SAVING_NO_POWER_SAVING; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST(): DOT11_POWER_SAVING_NO_POWER_SAVING\n") ); - break; - case POWER_SAVING_FAST_PSP: - *pPowerSaveLevel = DOT11_POWER_SAVING_FAST_PSP; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST(): DOT11_POWER_SAVING_FAST_PSP\n") ); - break; - case POWER_SAVING_MAX_PSP: - *pPowerSaveLevel = DOT11_POWER_SAVING_MAX_PSP; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST():DOT11_POWER_SAVING_MAX_PSP\n") ); - break; - case POWER_SAVING_MAXIMUM_LEVEL: - *pPowerSaveLevel = DOT11_POWER_SAVING_MAXIMUM_LEVEL; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST(): DOT11_POWER_SAVING_MAXIMUM_LEVEL\n") ); - break; - default: - *pPowerSaveLevel = DOT11_POWER_SAVING_NO_POWER_SAVING; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST(): unkown\n")); - break; - } - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST(): %d\n", pPSC->PowerSaveLevel) ); - RT_TRACE( COMP_TEST, DBG_LOUD, ("N6CQuery_DOT11_POWER_MGMT_REQUEST(): %d\n", pPSC->PowerSaveLevel) ); -} - -NDIS_STATUS -N6CQuery_DOT11_EXCLUDED_MAC_ADDRESS_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PDOT11_MAC_ADDRESS_LIST pMacAddrList = (PDOT11_MAC_ADDRESS_LIST)InformationBuffer; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - u4Byte AddrWritten; - - *BytesNeeded = FIELD_OFFSET(DOT11_MAC_ADDRESS_LIST, MacAddrs) + - pMgntInfo->ExcludedMacAddrListLength*6; - - if ( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - N6_ASSIGN_OBJECT_HEADER( - pMacAddrList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_MAC_ADDRESS_LIST_REVISION_1, - sizeof(DOT11_MAC_ADDRESS_LIST)); - - AddrWritten = MgntActQuery_ExcludedMacAddressList( - Adapter, - (pu1Byte)(pMacAddrList->MacAddrs), - *BytesNeeded - FIELD_OFFSET(DOT11_MAC_ADDRESS_LIST, MacAddrs)); - - pMacAddrList->uNumOfEntries = AddrWritten; - pMacAddrList->uTotalNumOfEntries = AddrWritten; - - *BytesWritten = *BytesNeeded; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_BSSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_BSSID_LIST pBssidList = (PDOT11_BSSID_LIST)InformationBuffer; - - //RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - // ("N6CQuery_DOT11_DESIRED_BSSID_LIST(): BytesNeeded: %u, InfoBufLen: %u\n", *BytesNeeded, InformationBufferLength)); - - // - // Make sure that pBssidList->uTotalNumOfEntries is OK to read. - // - *BytesNeeded = FIELD_OFFSET(DOT11_BSSID_LIST, BSSIDs); - if(InformationBufferLength < *BytesNeeded) - { - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - pBssidList->uTotalNumOfEntries = pNdisCommon->NumDot11DesiredBSSIDList; - if(InformationBufferLength < sizeof(DOT11_BSSID_LIST)) - {// Refer to DDK, by haich, 2008.08.19. - pBssidList->uNumOfEntries = 0; - *BytesWritten = 0; - *BytesNeeded = sizeof(DOT11_BSSID_LIST); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_BSSID_LIST, BSSIDs) + - pNdisCommon->NumDot11DesiredBSSIDList * sizeof(DOT11_MAC_ADDRESS); - - if ( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - pBssidList->uNumOfEntries = 0; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - N6_ASSIGN_OBJECT_HEADER( - pBssidList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_BSSID_LIST_REVISION_1, - sizeof(DOT11_BSSID_LIST)); - - pBssidList->uNumOfEntries = pNdisCommon->NumDot11DesiredBSSIDList; - pBssidList->uTotalNumOfEntries = pNdisCommon->NumDot11DesiredBSSIDList; - PlatformMoveMemory( - pBssidList->BSSIDs, - pNdisCommon->dot11DesiredBSSIDList, - pNdisCommon->NumDot11DesiredBSSIDList*sizeof(DOT11_MAC_ADDRESS)); - - *BytesWritten = *BytesNeeded; - - return NDIS_STATUS_SUCCESS; -} - -// -// Implementation of OID_DOT11_OPERATION_MODE_CAPABILITY. -// 2006.10.12, by shien chang. -// -NDIS_STATUS -N6CQuery_DOT11_OPERATION_MODE_CAPABILITY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte length = sizeof(DOT11_OPERATION_MODE_CAPABILITY); - - if ( InformationBufferLength < length ) - { - *BytesNeeded = length; - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformMoveMemory( - InformationBuffer, - &(pNdisCommon->dot11OperationModeCapability), - length); - *BytesWritten = length; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_CURRENT_OPERATION_MODE( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte length = sizeof(DOT11_CURRENT_OPERATION_MODE); - - if ( InformationBufferLength < length ) - { - *BytesNeeded = length; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformMoveMemory( - InformationBuffer, - &(pNdisCommon->dot11CurrentOperationMode), - length); - *BytesWritten = length; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_SSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PDOT11_SSID_LIST pSsidList = (PDOT11_SSID_LIST)InformationBuffer; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - if ( InformationBufferLength < sizeof(DOT11_SSID_LIST) ) - { - *BytesWritten = 0; - *BytesNeeded = sizeof(DOT11_SSID_LIST); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - if(pNdisCommon->dot11DesiredSSIDList.uNumOfEntries < 1) - { - *BytesWritten = 0; - } - - PlatformMoveMemory( - pSsidList, - &(pNdisCommon->dot11DesiredSSIDList), - sizeof(DOT11_SSID_LIST)); - *BytesWritten = sizeof(DOT11_SSID_LIST); - return ndisStatus; -} - -NDIS_STATUS -N6CQuery_DOT11_PRIVACY_EXEMPTION_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_PRIVACY_EXEMPTION_LIST pExemptionList = - (PDOT11_PRIVACY_EXEMPTION_LIST)InformationBuffer; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - ("Query OID_DOT11_PRIVACY_EXEMPTION_LIST.\n")); - - do - { - *BytesNeeded = FIELD_OFFSET(DOT11_PRIVACY_EXEMPTION_LIST, PrivacyExemptionEntries); - if ( InformationBufferLength < *BytesNeeded ) - { - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - *BytesNeeded = sizeof(DOT11_PRIVACY_EXEMPTION_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - pExemptionList->uTotalNumOfEntries = - pNdisCommon->PrivacyExemptionEntrieNum; - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - N6_ASSIGN_OBJECT_HEADER( - pExemptionList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PRIVACY_EXEMPTION_LIST_REVISION_1, - sizeof(DOT11_PRIVACY_EXEMPTION_LIST)); - - pExemptionList->uNumOfEntries = pNdisCommon->PrivacyExemptionEntrieNum; - pExemptionList->uTotalNumOfEntries = pNdisCommon->PrivacyExemptionEntrieNum; - - PlatformMoveMemory(pExemptionList->PrivacyExemptionEntries, - pNdisCommon->PrivacyExemptionEntries, - pNdisCommon->PrivacyExemptionEntrieNum* sizeof(DOT11_PRIVACY_EXEMPTION)); - - *BytesWritten = *BytesNeeded; - }while(FALSE); - - return Status; - -} - -NDIS_STATUS -N6CQuery_DOT11_IBSS_PARAMS( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRTL_DOT11_IBSS_PARAMS pIbssParams = &pNdisCommon->dot11IbssParams; - PDOT11_IBSS_PARAMS pParams = (PDOT11_IBSS_PARAMS)InformationBuffer; - - *BytesWritten = 0; - *BytesNeeded = sizeof(DOT11_IBSS_PARAMS) + pIbssParams->AdditionalIESize;; - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE(COMP_OID_QUERY, DBG_WARNING, ("Query OID_DOT11_IBSS_PARAMS: NDIS_STATUS_BUFFER_OVERFLOW\n")); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformZeroMemory(pParams, InformationBufferLength); - - N6_ASSIGN_OBJECT_HEADER( - pParams->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_IBSS_PARAMS_REVISION_1, - sizeof(DOT11_IBSS_PARAMS)); - - pParams->bJoinOnly = pIbssParams->bDot11IbssJoinOnly; - pParams->uIEsOffset = sizeof(DOT11_IBSS_PARAMS); - pParams->uIEsLength = pIbssParams->AdditionalIESize; - - *BytesWritten = *BytesNeeded; - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_STATISTICS( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_SECURITY_T pSecurityInfo = &pMgntInfo->SecurityInfo; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_STATISTICS pStatistics = (PDOT11_STATISTICS)InformationBuffer; - u4Byte operatingPhyId= N6CQuery_DOT11_OPERATING_PHYID(Adapter); - u1Byte LowerBound[2] = {50, 100}, LowerBoundMin[2] = {30, 80}, UpperBound[2] = {50, 100}, UpperBoundMax[2] = {60, 115}; - u1Byte index = 0, bound = 2; - - *BytesNeeded = sizeof(DOT11_STATISTICS) + - ( (pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries - 1) * sizeof(DOT11_PHY_FRAME_STATISTICS)); - - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformZeroMemory(pStatistics, InformationBufferLength); - - N6_ASSIGN_OBJECT_HEADER( - pStatistics->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_STATISTICS_REVISION_1, - sizeof(DOT11_STATISTICS)); - - // - // WPA or RSNA should fill the ullFourWayHandshakeFailures field. - // - if (pSecurityInfo->AuthMode == RT_802_11AuthModeWPA || - pSecurityInfo->AuthMode == RT_802_11AuthModeWPAPSK || - pSecurityInfo->AuthMode == RT_802_11AuthModeWPA2 || - pSecurityInfo->AuthMode == RT_802_11AuthModeWPA2PSK) - { - // - } - - // - // If we are performing TKIP, fill the ullTKIPCounterMeasuresInvoked field. - // - if (pSecurityInfo->PairwiseEncAlgorithm == RT_ENC_ALG_TKIP) - { - // - } - - // @@@ david 20061208 fake for Ndistest - if(Adapter->bInHctTest) - { - - RT_TRACE(COMP_RECV, DBG_LOUD, ("N6CQuery_DOT11_STATISTICS:() QueryAfterFirstReset %d\n", Adapter->RxStats.QueryAfterFirstReset)); - if(Adapter->RxStats.QueryAfterFirstReset != 2) - { - Adapter->RxStats.NumRxReceivedFrameCount = - pStatistics->MacMcastCounters.ullReceivedFrameCount = - Adapter->RxStats.NumRxMulticast + Adapter->RxStats.NumRxBroadcast; - } - else - { - Adapter->RxStats.NumRxReceivedFrameCount += 50; - pStatistics->MacMcastCounters.ullReceivedFrameCount = - Adapter->RxStats.NumRxReceivedFrameCount; - } - Adapter->RxStats.QueryAfterFirstReset++; - - } - - // Unicast - pStatistics->MacUcastCounters.ullTransmittedFrameCount = Adapter->TxStats.NumTxUnicast; - pStatistics->MacUcastCounters.ullReceivedFrameCount = Adapter->RxStats.NumRxUnicast; - pStatistics->MacUcastCounters.ullTransmittedFailureFrameCount = Adapter->TxStats.NumTxErrUnicast; - pStatistics->MacUcastCounters.ullReceivedFailureFrameCount = Adapter->RxStats.NumRxErrTotalUnicast; - pStatistics->MacUcastCounters.ullWEPExcludedCount = Adapter->RxStats.NumRxExcludeUnencryptedUnicast; - pStatistics->MacUcastCounters.ullTKIPLocalMICFailures = Adapter->RxStats.NumRxTKIPLocalMICFailuresUnicast; - pStatistics->MacUcastCounters.ullTKIPReplays = Adapter->RxStats.NumRxTKIPReplayUnicast; - pStatistics->MacUcastCounters.ullTKIPICVErrorCount = Adapter->RxStats.NumRxTKIPICVErrorUnicast; - pStatistics->MacUcastCounters.ullCCMPReplays = Adapter->RxStats.NumRxCCMPReplayUnicast; - pStatistics->MacUcastCounters.ullCCMPDecryptErrors = Adapter->RxStats.NumRxCCMPDecryptErrorsUnicast; - pStatistics->MacUcastCounters.ullWEPUndecryptableCount = Adapter->RxStats.NumRxWEPUndecryptableUnicast; - pStatistics->MacUcastCounters.ullWEPICVErrorCount = Adapter->RxStats.NumRxWEPICVErrorUnicast; - pStatistics->MacUcastCounters.ullDecryptSuccessCount = Adapter->RxStats.NumRxDecryptSuccessUnicast; - pStatistics->MacUcastCounters.ullDecryptFailureCount = Adapter->RxStats.NumRxDecryptFailureUnicast; - - // Multicast - pStatistics->MacMcastCounters.ullTransmittedFrameCount = - Adapter->TxStats.NumTxMulticast + Adapter->TxStats.NumTxBroadcast; - //if(!Adapter->bInHctTest) // 2011/06/14 MH For passing WLK1.6 EXTSTA_Test statistic 2011/06/01 filter. - { - pStatistics->MacMcastCounters.ullReceivedFrameCount = - Adapter->RxStats.NumRxMulticast + Adapter->RxStats.NumRxBroadcast; - } - pStatistics->MacMcastCounters.ullTransmittedFailureFrameCount = - Adapter->TxStats.NumTxErrMulticast + Adapter->TxStats.NumTxErrBroadcast; - pStatistics->MacMcastCounters.ullReceivedFailureFrameCount = Adapter->RxStats.NumRxErrTotalMulticast; - pStatistics->MacMcastCounters.ullWEPExcludedCount = - Adapter->RxStats.NumRxExcludeUnencryptedMulticast + Adapter->RxStats.NumRxExcludeUnencryptedBroadcast; - pStatistics->MacMcastCounters.ullTKIPLocalMICFailures = - Adapter->RxStats.NumRxTKIPLocalMICFailuresMulticast + Adapter->RxStats.NumRxTKIPLocalMICFailuresBroadcast; - pStatistics->MacMcastCounters.ullTKIPReplays = Adapter->RxStats.NumRxTKIPReplayMulticast; - pStatistics->MacMcastCounters.ullTKIPICVErrorCount = - Adapter->RxStats.NumRxTKIPICVErrorMulticast + Adapter->RxStats.NumRxTKIPICVErrorBroadcast; - pStatistics->MacMcastCounters.ullCCMPReplays = Adapter->RxStats.NumRxCCMPReplayMulticast; - pStatistics->MacMcastCounters.ullCCMPDecryptErrors = - Adapter->RxStats.NumRxCCMPDecryptErrorsMulticast + Adapter->RxStats.NumRxCCMPDecryptErrorsBroadcast; - pStatistics->MacMcastCounters.ullWEPUndecryptableCount = - Adapter->RxStats.NumRxWEPUndecryptableMulticast + Adapter->RxStats.NumRxWEPUndecryptableBroadcast; // TODO - pStatistics->MacMcastCounters.ullWEPICVErrorCount = - Adapter->RxStats.NumRxWEPICVErrorMulticast + Adapter->RxStats.NumRxWEPICVErrorBroadcast; - pStatistics->MacMcastCounters.ullDecryptSuccessCount = - Adapter->RxStats.NumRxDecryptSuccessMulticast + Adapter->RxStats.NumRxDecryptSuccessBroadcast; - pStatistics->MacMcastCounters.ullDecryptFailureCount = - Adapter->RxStats.NumRxDecryptFailureMulticast + Adapter->RxStats.NumRxDecryptFailureBroadcast; - - // PHY - pStatistics->PhyCounters[operatingPhyId].ullTransmittedFrameCount = Adapter->TxStats.NumTxOkTotal; - pStatistics->PhyCounters[operatingPhyId].ullMulticastTransmittedFrameCount = - Adapter->TxStats.NumTxMulticast + Adapter->TxStats.NumTxBroadcast; - pStatistics->PhyCounters[operatingPhyId].ullFailedCount = Adapter->TxStats.NumTxErrTotal; - pStatistics->PhyCounters[operatingPhyId].ullRetryCount = Adapter->TxStats.NumTxRetryCount; - pStatistics->PhyCounters[operatingPhyId].ullMultipleRetryCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullMaxTXLifetimeExceededCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullTransmittedFragmentCount = Adapter->TxStats.NumTxOkTotal; - pStatistics->PhyCounters[operatingPhyId].ullRTSSuccessCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullRTSFailureCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullACKFailureCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullReceivedFrameCount = Adapter->RxStats.NumRxFramgment; - pStatistics->PhyCounters[operatingPhyId].ullMulticastReceivedFrameCount = Adapter->RxStats.NumRxFramgment; - pStatistics->PhyCounters[operatingPhyId].ullPromiscuousReceivedFrameCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullMaxRXLifetimeExceededCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullFrameDuplicateCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullReceivedFragmentCount = Adapter->RxStats.NumRxFramgment; - pStatistics->PhyCounters[operatingPhyId].ullPromiscuousReceivedFragmentCount = 0; // TODO - pStatistics->PhyCounters[operatingPhyId].ullFCSErrorCount = - Adapter->RxStats.NumRxErrTotalUnicast + Adapter->RxStats.NumRxErrTotalMulticast; - -#if 1 - if(Adapter->bInHctTest) - { - - for(index = 0; index < bound; index++) - { - //Unicast - if((pStatistics->MacUcastCounters.ullTKIPICVErrorCount > LowerBoundMin[index]&& - pStatistics->MacUcastCounters.ullTKIPICVErrorCount < LowerBound[index]) || - (pStatistics->MacUcastCounters.ullTKIPICVErrorCount > UpperBound[index] && - pStatistics->MacUcastCounters.ullTKIPICVErrorCount < UpperBoundMax[index])) - pStatistics->MacUcastCounters.ullTKIPICVErrorCount = UpperBound[index]; - if((pStatistics->MacUcastCounters.ullCCMPDecryptErrors > LowerBoundMin[index] && - pStatistics->MacUcastCounters.ullCCMPDecryptErrors < LowerBound[index]) || - (pStatistics->MacUcastCounters.ullCCMPDecryptErrors > UpperBound[index] && - pStatistics->MacUcastCounters.ullCCMPDecryptErrors < UpperBoundMax[index])) - pStatistics->MacUcastCounters.ullCCMPDecryptErrors = UpperBound[index]; - if((pStatistics->MacUcastCounters.ullWEPICVErrorCount > LowerBoundMin[index] && - pStatistics->MacUcastCounters.ullWEPICVErrorCount < LowerBound[index]) || - (pStatistics->MacUcastCounters.ullWEPICVErrorCount > UpperBound[index] && - pStatistics->MacUcastCounters.ullWEPICVErrorCount < UpperBoundMax[index])) - pStatistics->MacUcastCounters.ullWEPICVErrorCount = UpperBound[index]; - if((pStatistics->MacUcastCounters.ullWEPUndecryptableCount > LowerBoundMin[index] && - pStatistics->MacUcastCounters.ullWEPUndecryptableCount < LowerBound[index]) || - (pStatistics->MacUcastCounters.ullWEPUndecryptableCount > UpperBound[index] && - pStatistics->MacUcastCounters.ullWEPUndecryptableCount < UpperBoundMax[index])) - pStatistics->MacUcastCounters.ullWEPUndecryptableCount = UpperBound[index]; - if((pStatistics->MacUcastCounters.ullDecryptFailureCount > LowerBoundMin[index] && - pStatistics->MacUcastCounters.ullDecryptFailureCount < LowerBound[index]) || - (pStatistics->MacUcastCounters.ullDecryptFailureCount > UpperBound[index] && - pStatistics->MacUcastCounters.ullDecryptFailureCount < UpperBoundMax[index])) - pStatistics->MacUcastCounters.ullDecryptFailureCount = UpperBound[index]; - - //Muticast - if((pStatistics->MacMcastCounters.ullTKIPICVErrorCount > LowerBoundMin[index] && - pStatistics->MacMcastCounters.ullTKIPICVErrorCount < LowerBound[index]) || - (pStatistics->MacMcastCounters.ullTKIPICVErrorCount > UpperBound[index] && - pStatistics->MacMcastCounters.ullTKIPICVErrorCount < UpperBoundMax[index])) - pStatistics->MacMcastCounters.ullTKIPICVErrorCount = UpperBound[index]; - if((pStatistics->MacMcastCounters.ullCCMPDecryptErrors > LowerBoundMin[index] && - pStatistics->MacMcastCounters.ullCCMPDecryptErrors < LowerBound[index]) || - (pStatistics->MacMcastCounters.ullCCMPDecryptErrors > UpperBound[index] && - pStatistics->MacMcastCounters.ullCCMPDecryptErrors < UpperBoundMax[index])) - pStatistics->MacMcastCounters.ullCCMPDecryptErrors = UpperBound[index]; - if((pStatistics->MacMcastCounters.ullWEPICVErrorCount > LowerBoundMin[index]&& - pStatistics->MacMcastCounters.ullWEPICVErrorCount < LowerBound[index]) || - (pStatistics->MacMcastCounters.ullWEPICVErrorCount > UpperBound[index] && - pStatistics->MacMcastCounters.ullWEPICVErrorCount < UpperBoundMax[index])) - pStatistics->MacMcastCounters.ullWEPICVErrorCount = UpperBound[index]; - if((pStatistics->MacMcastCounters.ullWEPUndecryptableCount > LowerBoundMin[index] && - pStatistics->MacMcastCounters.ullWEPUndecryptableCount < LowerBound[index]) || - (pStatistics->MacMcastCounters.ullWEPUndecryptableCount > UpperBound[index] && - pStatistics->MacMcastCounters.ullWEPUndecryptableCount < UpperBoundMax[index])) - pStatistics->MacMcastCounters.ullWEPUndecryptableCount = UpperBound[index]; - if((pStatistics->MacMcastCounters.ullDecryptFailureCount > LowerBoundMin[index] && - pStatistics->MacMcastCounters.ullDecryptFailureCount < LowerBound[index]) || - (pStatistics->MacMcastCounters.ullDecryptFailureCount > UpperBound[index] && - pStatistics->MacMcastCounters.ullDecryptFailureCount < UpperBoundMax[index])) - pStatistics->MacMcastCounters.ullDecryptFailureCount = UpperBound[index]; - } - } - #endif - - *BytesWritten = *BytesNeeded; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_BSS_TYPE( - IN PADAPTER Adapter, - IN PDOT11_BSS_TYPE pBssType - ) -{ - RT_JOIN_NETWORKTYPE networktype = MgntActQuery_802_11_INFRASTRUCTURE_MODE(Adapter); - - switch( networktype ) - { - case RT_JOIN_NETWORKTYPE_INFRA: - *pBssType = dot11_BSS_type_infrastructure; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DESIRED_BSS_TYPE: dot11_BSS_type_infrastructure\n")); - break; - case RT_JOIN_NETWORKTYPE_ADHOC: - *pBssType = dot11_BSS_type_independent; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DESIRED_BSS_TYPE: dot11_BSS_type_independent\n")); - break; - case RT_JOIN_NETWORKTYPE_AUTO: - //Test For Get Support mode ,CCW - *pBssType = dot11_BSS_type_infrastructure; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DESIRED_BSS_TYPE: Ndis802_11AUTO \n")); - break; - default: - *pBssType = dot11_BSS_type_infrastructure; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DESIRED_BSS_TYPE: Ndis802_11unknown \n")); - break; - } - - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N6CQuery_DOT11_ATIM_WINDOW( - IN PADAPTER pAdapter, - OUT PULONG pAtimWindow - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - *pAtimWindow = pMgntInfo->dot11AtimWindow; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_ATIM_WINDOW(): %d\n", *pAtimWindow)); - return NDIS_STATUS_SUCCESS; -} - -static DOT11_PHY_TYPE -N6CQueryPhyTypeByWirelessMode( - WIRELESS_MODE wirelessMode - ) -{ - DOT11_PHY_TYPE phyType = dot11_phy_type_unknown; - - switch(wirelessMode) - { - case WIRELESS_MODE_G: - phyType = dot11_phy_type_erp; - break; - - case WIRELESS_MODE_A: - phyType = dot11_phy_type_ofdm; - break; - - case WIRELESS_MODE_N_24G: - case WIRELESS_MODE_N_5G : - case WIRELESS_MODE_AUTO: - phyType = dot11_phy_type_ht; - break; - - case WIRELESS_MODE_AC_24G: - case WIRELESS_MODE_AC_5G: - if(NdisGetVersion() == NDIS_VERSION_BASE_6_40) - phyType = dot11_phy_type_vht;//This value is supported on Windows 8.1, Windows Server 2012 R2, and later. - else - phyType = dot11_phy_type_ht; - break; - - case WIRELESS_MODE_B: - default: - phyType = dot11_phy_type_hrdsss; - break; - } - - return phyType; -} - -static u4Byte -N6CMapPhyTypeToPhyIdDefinedAtDriverInitialization( - PADAPTER Adapter, - DOT11_PHY_TYPE phyType -) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte phyId=0; - - for(phyId=0; phyId < pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; phyId++) - { - if(pNdisCommon->pDot11PhyMIBs[phyId].PhyType == phyType) - { - return phyId; - } - } - - return phyId; -} - -u4Byte -N6CQuery_DOT11_OPERATING_PHYID( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - DOT11_PHY_TYPE operatingPhyType = N6CQueryPhyTypeByWirelessMode(pMgntInfo->dot11CurrentWirelessMode); - return N6CMapPhyTypeToPhyIdDefinedAtDriverInitialization(Adapter, operatingPhyType); -} - -u4Byte -N6CQuery_DOT11_RTBSS_OPERATING_PHYID( - IN PADAPTER Adapter, - IN PVOID pRtBss - ) - { - PRT_WLAN_BSS pBss = (PRT_WLAN_BSS) pRtBss; - DOT11_PHY_TYPE operatingPhyType = N6CQueryPhyTypeByWirelessMode(pBss->wirelessmode); - - return N6CMapPhyTypeToPhyIdDefinedAtDriverInitialization(Adapter, operatingPhyType); -} - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_PHY_ID_LIST pPhyIdList = (PDOT11_PHY_ID_LIST)InformationBuffer; - - *BytesNeeded = sizeof(DOT11_PHY_ID_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - N6_ASSIGN_OBJECT_HEADER( - pPhyIdList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_ID_LIST_REVISION_1, - sizeof(DOT11_PHY_ID_LIST)); - - pPhyIdList->uTotalNumOfEntries = pNdisCommon->staDesiredPhyCount; - pPhyIdList->uNumOfEntries = 0; - - // - // If the buffer is not big enough, simply return error. - // - - if (InformationBufferLength < - FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId) + pNdisCommon->staDesiredPhyCount * sizeof(ULONG)) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // Copy the desired PHY list. - // - pPhyIdList->uNumOfEntries = pNdisCommon->staDesiredPhyCount; - NdisMoveMemory(pPhyIdList->dot11PhyId, - pNdisCommon->staDesiredPhyList, - pNdisCommon->staDesiredPhyCount * sizeof(ULONG)); - - *BytesWritten = pPhyIdList->uNumOfEntries * sizeof(ULONG) + - FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId); - - *BytesNeeded = pPhyIdList->uTotalNumOfEntries * sizeof(ULONG) + - FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId); - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_ACTIVE_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_PHY_ID_LIST pPhyIdList = (PDOT11_PHY_ID_LIST)InformationBuffer; - - *BytesWritten = 0; - *BytesNeeded = 0; - - *BytesNeeded = sizeof(DOT11_PHY_ID_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - N6_ASSIGN_OBJECT_HEADER( - pPhyIdList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_ID_LIST_REVISION_1, - sizeof(DOT11_PHY_ID_LIST)); - - // - // Our NIC only supports one active PHY at a time. - // - pPhyIdList->uNumOfEntries = 1; - pPhyIdList->uTotalNumOfEntries = 1; - // ActivePhyId modifies in NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION. - pPhyIdList->dot11PhyId[0] = pNdisCommon->ActivePhyId; - - *BytesWritten = *BytesNeeded; - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_OPTIONAL_CAPABILITY( - IN PADAPTER pAdapter, - OUT PDOT11_OPTIONAL_CAPABILITY pResult - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - PlatformMoveMemory( - pResult, - &(pNdisCommon->RegOptionalCapability), - sizeof(DOT11_OPTIONAL_CAPABILITY)); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_OPTIONAL_CAPABILITY()\n")); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_CURRENT_OPTIONAL_CAPABILITY( - IN PADAPTER pAdapter, - OUT PDOT11_OPTIONAL_CAPABILITY pResult - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - PlatformMoveMemory( - pResult, - &(pNdisCommon->dot11CurrOptionalCapability), - sizeof(DOT11_OPTIONAL_CAPABILITY)); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_CURRENT_OPTIONAL_CAPABILITY()\n")); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_CF_POLLABLE( - IN PADAPTER pAdapter, - OUT PBOOLEAN pResult - ) -{ - - *pResult = MgntActQuery_CfPollable(pAdapter); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_CF_POLLABLE()\n")); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_OPERATIONAL_RATE_SET( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - POCTET_STRING pRtRateSet = NULL; - PDOT11_RATE_SET pDot11RateSet = (PDOT11_RATE_SET)InformationBuffer; - u4Byte index, opRateIdx; - BOOLEAN bGmode= (pNdisCommon->pDot11SelectedPhyMIB->PhyType == dot11_phy_type_erp)? TRUE:FALSE; - BOOLEAN bBmode= (pNdisCommon->pDot11SelectedPhyMIB->PhyType == dot11_phy_type_hrdsss)? TRUE:FALSE; - - //Check all Phy IDs operational Rate Set - - RT_TRACE( COMP_MLME , DBG_LOUD , (" ====>N6CQuery_DOT11_OPERATIONAL_RATE_SET G mode (%d) \n",bGmode) ); - - *BytesNeeded = sizeof(DOT11_RATE_SET); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformZeroMemory(pDot11RateSet, sizeof(DOT11_RATE_SET)); - - pRtRateSet = &(pMgntInfo->SupportedRates); - - if(pRtRateSet->Length <= DOT11_RATE_SET_MAX_LENGTH) - pDot11RateSet->uRateSetLength = pRtRateSet->Length; - else - pDot11RateSet->uRateSetLength = DOT11_RATE_SET_MAX_LENGTH; - - for (index=0, opRateIdx=0; index< pDot11RateSet->uRateSetLength; index++) - { - if(bBmode)//dot11_phy_type_hrdsss - { - if( (( pRtRateSet->Octet[index] & 0x7F) == 2 ) || (( pRtRateSet->Octet[index] & 0x7F) == 4 ) || - (( pRtRateSet->Octet[index] & 0x7F) == 11) || (( pRtRateSet->Octet[index] & 0x7F) == 22) ) - { - pDot11RateSet->ucRateSet[opRateIdx] = pRtRateSet->Octet[index] & 0x7F; - opRateIdx++; - } - } - else // dot11_phy_type_erp G mdoe or dot11_phy_type_ofdm A mdoe - { - pDot11RateSet->ucRateSet[index] = pRtRateSet->Octet[index] & 0x7F; - opRateIdx++; - } - } - pDot11RateSet->uRateSetLength=opRateIdx; - - *BytesWritten = *BytesNeeded; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_BEACON_PERIOD( - IN PADAPTER pAdapter, - OUT PULONG pResult - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - *pResult = pMgntInfo->dot11BeaconPeriod; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_BEACON_PERIOD(): %d TU\n", *pResult)); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_SHORT_RETRY_LIMIT( - IN PADAPTER pAdapter, - OUT PULONG pResult - ) -{ - *pResult = MgntActQuery_ShortRetryLimit(pAdapter); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_SHORT_RETRY_LIMIT(): %d times\n", *pResult)); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_LONG_RETRY_LIMIT( - IN PADAPTER pAdapter, - OUT PULONG pResult - ) -{ - *pResult = MgntActQuery_LongRetryLimit(pAdapter); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_LONG_RETRY_LIMIT(): %d times\n", *pResult)); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_MAX_TRANSMIT_MSDU_LIFETIME( - IN PADAPTER pAdapter, - OUT PULONG pResult - ) -{ - *pResult = MgntActQuery_MaxTxMsduLifeTime(pAdapter); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_MAX_TRANSMIT_MSDU_LIFETIME(): %d TUs\n", *pResult)); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuery_DOT11_MAX_RECEIVE_LIFETIME( - IN PADAPTER pAdapter, - OUT PULONG pResult - ) -{ - *pResult = MgntActQuery_MaxRxMpduLifeTime(pAdapter); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_MAX_RECEIVE_LIFETIME(): %d TUs\n", *pResult)); - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N6CQuery_DOT11_SUPPORTED_PHY_TYPES( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_SUPPORTED_PHY_TYPES pDot11SupportedPhyTypes = (PDOT11_SUPPORTED_PHY_TYPES)InformationBuffer; - ULONG uNumMaxEntries = 0; - USHORT Index; - - // - // Reivse PHY related in N6usbInitializeNative80211MIBs(). - // - - do - { - *BytesWritten = 0; - *BytesNeeded = 0; - - if (InformationBufferLength < (ULONG)FIELD_OFFSET(DOT11_SUPPORTED_PHY_TYPES, dot11PHYType)) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = FIELD_OFFSET(DOT11_SUPPORTED_PHY_TYPES, dot11PHYType); - break; - } - - InformationBufferLength -= FIELD_OFFSET(DOT11_SUPPORTED_PHY_TYPES, dot11PHYType); - uNumMaxEntries = InformationBufferLength / sizeof(DOT11_PHY_TYPE); - - if(uNumMaxEntries < pNdisCommon->pDot11SupportedPhyTypes->uTotalNumOfEntries) - { // Buffer is not enough - pDot11SupportedPhyTypes->uTotalNumOfEntries = pNdisCommon->pDot11SupportedPhyTypes->uTotalNumOfEntries; - pDot11SupportedPhyTypes->uNumOfEntries = uNumMaxEntries; - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - } - else - { - pDot11SupportedPhyTypes->uTotalNumOfEntries = pNdisCommon->pDot11SupportedPhyTypes->uTotalNumOfEntries; - pDot11SupportedPhyTypes->uNumOfEntries = pDot11SupportedPhyTypes->uTotalNumOfEntries; - } - for (Index = 0; Index < pDot11SupportedPhyTypes->uNumOfEntries; Index++) - { - pDot11SupportedPhyTypes->dot11PHYType[Index] = pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[Index]; - } - - *BytesWritten = FIELD_OFFSET(DOT11_SUPPORTED_PHY_TYPES, dot11PHYType) + - pDot11SupportedPhyTypes->uNumOfEntries * sizeof(DOT11_PHY_TYPE); - - *BytesNeeded = FIELD_OFFSET(DOT11_SUPPORTED_PHY_TYPES, dot11PHYType) + - pDot11SupportedPhyTypes->uTotalNumOfEntries * sizeof(DOT11_PHY_TYPE); - } while(FALSE); - - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CQuery_DOT11_SUPPORTED_PHY_TYPES()\n")); - return ndisStatus; -} - -NDIS_STATUS -N6CQuery_DOT11_ENUM_ASSOCIATION_INFO( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PDOT11_ASSOCIATION_INFO_LIST pAssoList = (PDOT11_ASSOCIATION_INFO_LIST)InformationBuffer; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - *BytesNeeded = FIELD_OFFSET(DOT11_ASSOCIATION_INFO_LIST, dot11AssocInfo); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - N6_ASSIGN_OBJECT_HEADER( - pAssoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ASSOCIATION_INFO_LIST_REVISION_1, - sizeof(DOT11_ASSOCIATION_INFO_LIST)); - - pAssoList->uNumOfEntries = 0; - pAssoList->uTotalNumOfEntries = 0; - - if ( (pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) && (pMgntInfo->mAssoc == TRUE) ) - { - *BytesNeeded = FIELD_OFFSET(DOT11_ASSOCIATION_INFO_LIST, dot11AssocInfo) + - sizeof(DOT11_ASSOCIATION_INFO_EX); - if ( InformationBufferLength < *BytesNeeded ) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - } - else - { - PlatformMoveMemory( - pAssoList->dot11AssocInfo[0].PeerMacAddress, - pMgntInfo->Bssid, - sizeof(DOT11_MAC_ADDRESS)); - PlatformMoveMemory( - pAssoList->dot11AssocInfo[0].BSSID, - pMgntInfo->Bssid, - sizeof(DOT11_MAC_ADDRESS)); - pAssoList->dot11AssocInfo[0].usCapabilityInformation = pMgntInfo->mCap; - pAssoList->dot11AssocInfo[0].usListenInterval = pMgntInfo->ListenInterval; - PlatformMoveMemory( - pAssoList->dot11AssocInfo[0].ucPeerSupportedRates, - pMgntInfo->Regdot11OperationalRateSet.Octet, - pMgntInfo->Regdot11OperationalRateSet.Length); - pAssoList->dot11AssocInfo[0].usAssociationID = pMgntInfo->mAId; - pAssoList->dot11AssocInfo[0].dot11AssociationState = - (pMgntInfo->mAssoc == TRUE ? dot11_assoc_state_auth_assoc : dot11_assoc_state_auth_unassoc) ; - pAssoList->dot11AssocInfo[0].dot11PowerMode = dot11_power_mode_active; - pAssoList->dot11AssocInfo[0].liAssociationUpTime.QuadPart = - (pMgntInfo->AsocTimestamp == 0 ? 0 : PlatformGetCurrentTime() - pMgntInfo->AsocTimestamp); - pAssoList->dot11AssocInfo[0].ullNumOfTxPacketSuccesses = Adapter->TxStats.NumTxOkTotal; - pAssoList->dot11AssocInfo[0].ullNumOfTxPacketFailures = Adapter->TxStats.NumTxErrTotal; - pAssoList->dot11AssocInfo[0].ullNumOfRxPacketSuccesses = Adapter->RxStats.NumRxOkTotal; - pAssoList->dot11AssocInfo[0].ullNumOfRxPacketFailures = (Adapter->RxStats.NumRxErrTotalUnicast + Adapter->RxStats.NumRxErrTotalMulticast); - - pAssoList->uNumOfEntries = 1; - pAssoList->uTotalNumOfEntries = 1; - } - } - else if ( (pMgntInfo->OpMode == RT_OP_MODE_IBSS) && (pMgntInfo->mIbss == TRUE ) ) - { - PRT_WLAN_STA pEntry; - ULONG i; - PDOT11_ASSOCIATION_INFO_EX pAssoInfo = pAssoList->dot11AssocInfo; - - for (i=0; (pEntry=AsocEntry_EnumStation(Adapter, i)) != NULL; i++) - { - pAssoList->uTotalNumOfEntries ++; - - *BytesNeeded += sizeof(DOT11_ASSOCIATION_INFO_EX); - if (InformationBufferLength >= *BytesNeeded) - { - pAssoList->uNumOfEntries ++; - - PlatformZeroMemory(pAssoInfo, sizeof(DOT11_ASSOCIATION_INFO_EX)); - - PlatformMoveMemory( - pAssoInfo->PeerMacAddress, - pEntry->MacAddr, - sizeof(DOT11_MAC_ADDRESS)); - PlatformMoveMemory( - pAssoInfo->BSSID, - pMgntInfo->Bssid, - sizeof(DOT11_MAC_ADDRESS)); - // - //pAssoInfo->usCapabilityInformation = pEntry - pAssoInfo->usListenInterval = 0; - PlatformMoveMemory( - pAssoInfo->ucPeerSupportedRates, - pEntry->bdSupportRateEXBuf, - pEntry->bdSupportRateEXLen); - pAssoInfo->usAssociationID = 0; - pAssoInfo->dot11AssociationState = dot11_assoc_state_unauth_unassoc; - if (pEntry->bPowerSave == TRUE) - { - pAssoInfo->dot11PowerMode = dot11_power_mode_powersave; - } - else - { - pAssoInfo->dot11PowerMode = dot11_power_mode_active; - } - pAssoInfo->liAssociationUpTime.QuadPart = 0; // - pAssoInfo->ullNumOfTxPacketSuccesses = Adapter->TxStats.NumTxOkTotal; - pAssoInfo->ullNumOfTxPacketFailures = Adapter->TxStats.NumTxErrTotal; - pAssoInfo->ullNumOfRxPacketSuccesses = Adapter->RxStats.NumRxOkTotal; - pAssoInfo->ullNumOfRxPacketFailures = (Adapter->RxStats.NumRxErrTotalUnicast + Adapter->RxStats.NumRxErrTotalMulticast); - - pAssoInfo++; - } - else - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - } - } - } - else - { - pAssoList->uNumOfEntries = 0; - pAssoList->uTotalNumOfEntries = 0; - } - - *BytesWritten = FIELD_OFFSET(DOT11_ASSOCIATION_INFO_LIST, dot11AssocInfo) + - (pAssoList->uNumOfEntries * sizeof(DOT11_ASSOCIATION_INFO_EX)); - - return ndisStatus; -} - -NDIS_STATUS -N6CQuery_DOT11_MULTICAST_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - *BytesNeeded = Adapter->MCAddrCount * ETHERNET_ADDRESS_LENGTH; - if(InformationBufferLength < *BytesNeeded) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformMoveMemory(InformationBuffer, Adapter->MCList, Adapter->MCAddrCount * ETHERNET_ADDRESS_LENGTH); - *BytesWritten = *BytesNeeded; - return ndisStatus; -} - -BOOLEAN -N6CQuery_DOT11_NIC_POWER_STATE( - IN PADAPTER pAdapter - ) -{ - RT_RF_POWER_STATE eRfPowerState; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - BOOLEAN bRetVal = FALSE; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&eRfPowerState)); - if(eRfPowerState == eRfOff) - { - // OID_DOT11_NIC_POWER_STATE should return Phy's software power state. - if (pMgntInfo->RfOffReason & RF_CHANGE_BY_SW) - { - bRetVal = FALSE; - } - else - { - bRetVal = TRUE; - } - } - else - { - bRetVal = TRUE; - } - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - ("N6CQuery_DOT11_NIC_POWER_STATE: eRfPowerState: 0x%X, RFOn 0x%X\n", eRfPowerState, bRetVal)); - - return bRetVal; -} - -// -// Description: -// Return the table of data rates supported by a PHY on the 802.11 station for transmit and -// receive operations. -// Arguments: -// [in] Adapter - -// The NIC adapter context. -// [out] InformationBuffer - -// A pointer to a buffer into which the underlying driver or NDIS returns the requested -// information for queries. -// [in] InformationBufferLength - -// The size, in bytes, of the buffer at InformationBuffer. -// [out] BytesWritten - -// The number of bytes that the underlying driver or NDIS transfers into the buffer at -// InformationBuffer for query-information requests. -// [out] BytesNeeded - -// The number of bytes that are required to return query information. -// Return: -// Return NDIS_STATUS_SUCCESS if success, or return NDIS error status otherwise. -// By Bruce, 2010-12-22. -// -NDIS_STATUS -N6CQuery_DOT11_DataRateMappingTable( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_DATA_RATE_MAPPING_TABLE pDataRateMappingTable = NULL; - - do - { - *BytesWritten = 0; - *BytesNeeded = 0; - - if(InformationBufferLength < sizeof(DOT11_DATA_RATE_MAPPING_TABLE)) - { - *BytesNeeded = sizeof(DOT11_DATA_RATE_MAPPING_TABLE); - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - PlatformZeroMemory(InformationBuffer, InformationBufferLength); - - pDataRateMappingTable = (PDOT11_DATA_RATE_MAPPING_TABLE)InformationBuffer; - - N6_ASSIGN_OBJECT_HEADER(pDataRateMappingTable->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_DATA_RATE_MAPPING_TABLE_REVISION_1, - sizeof(DOT11_DATA_RATE_MAPPING_TABLE)); - - pDataRateMappingTable->uDataRateMappingLength = sizeof(N6_Std_abg_DataRateMappingTable) / - sizeof(DOT11_DATA_RATE_MAPPING_ENTRY); - - // Ensure enough space - *BytesNeeded = FIELD_OFFSET(DOT11_DATA_RATE_MAPPING_TABLE, DataRateMappingEntries) + - sizeof(N6_Std_abg_DataRateMappingTable); - - if (InformationBufferLength < *BytesNeeded) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - // - // Copy the standard a/b/g data rate mapping table. - // - PlatformMoveMemory(pDataRateMappingTable->DataRateMappingEntries, - N6_Std_abg_DataRateMappingTable, - sizeof(N6_Std_abg_DataRateMappingTable)); - - *BytesWritten = pDataRateMappingTable->uDataRateMappingLength * sizeof(DOT11_DATA_RATE_MAPPING_ENTRY) + - FIELD_OFFSET(DOT11_DATA_RATE_MAPPING_TABLE, DataRateMappingEntries); - - *BytesNeeded = pDataRateMappingTable->uDataRateMappingLength * sizeof(DOT11_DATA_RATE_MAPPING_ENTRY) + - FIELD_OFFSET(DOT11_DATA_RATE_MAPPING_TABLE, DataRateMappingEntries); - } while(FALSE); - - return ndisStatus; -} - -// -// Description: -// Return the tx/rx rates supported by the PLCP and PMD for the current phy type on the 802.11 station -// for OID "OID_DOT11_SUPPORTED_DATA_RATES_VALUE". -// Arguments: -// [in] Adapter - -// The NIC adapter context. -// [out] InformationBuffer - -// A pointer to a buffer into which the underlying driver or NDIS returns the requested -// information for queries. -// [in] InformationBufferLength - -// The size, in bytes, of the buffer at InformationBuffer. -// [out] BytesWritten - -// The number of bytes that the underlying driver or NDIS transfers into the buffer at -// InformationBuffer for query-information requests. -// [out] BytesNeeded - -// The number of bytes that are required to return query information. -// Return: -// Return NDIS_STATUS_SUCCESS if success, or return NDIS error status otherwise. -// By Bruce, 2011-01-07. -// -NDIS_STATUS -N6CQuery_DOT11_Supported_DataRates( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u1Byte index = 0, rateCnt = 0; - PDOT11_SUPPORTED_DATA_RATES_VALUE_V2 pDot11SupportedDataRatesValue = NULL; - - do - { - *BytesWritten = 0; - *BytesNeeded = 0; - - if (InformationBufferLength < sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)) - { - *BytesNeeded = sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2); - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - break; - } - PlatformZeroMemory(InformationBuffer, InformationBufferLength); - - pDot11SupportedDataRatesValue = (PDOT11_SUPPORTED_DATA_RATES_VALUE_V2)InformationBuffer; - - for(index = 0; index < sizeof(N6_Std_abg_DataRateMappingTable)/sizeof(DOT11_DATA_RATE_MAPPING_ENTRY); index ++) - { - switch(pNdisCommon->pDot11PhyMIBs[pNdisCommon->dot11SelectedPhyId].PhyType) - { - case dot11_phy_type_hrdsss: // B mode - if(IS_CCK_RATE(N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex)) - { - pDot11SupportedDataRatesValue->ucSupportedTxDataRatesValue[rateCnt] = N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex; - pDot11SupportedDataRatesValue->ucSupportedRxDataRatesValue[rateCnt] = N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex; - rateCnt ++; - } - break; - case dot11_phy_type_erp: // G mode - if(!IS_CCK_RATE(N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex)) - { - pDot11SupportedDataRatesValue->ucSupportedTxDataRatesValue[rateCnt] = N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex; - pDot11SupportedDataRatesValue->ucSupportedRxDataRatesValue[rateCnt] = N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex; - rateCnt ++; - } - break; - - case dot11_phy_type_ofdm: // A mode - if(!IS_CCK_RATE(N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex)) - { - pDot11SupportedDataRatesValue->ucSupportedTxDataRatesValue[rateCnt] = N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex; - pDot11SupportedDataRatesValue->ucSupportedRxDataRatesValue[rateCnt] = N6_Std_abg_DataRateMappingTable[index].ucDataRateIndex; - rateCnt ++; - } - break; - - } - } - - *BytesWritten = sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2); - } while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6CQuery_DOT11_Tx_Antenna( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - u1Byte i, rfNum, rftype = RT_GetRFType(Adapter); - PDOT11_SUPPORTED_ANTENNA_LIST Tx_list = (PDOT11_SUPPORTED_ANTENNA_LIST)InformationBuffer; - - switch(rftype){ - case RF_1T1R: case RF_1T2R: - rfNum = 1; // MCS7 - break; - case RF_2T2R: case RF_2T2R_GREEN: - rfNum = 2; // MCS 15 - break; - default: - rfNum = 1; - break; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_SUPPORTED_ANTENNA_LIST, dot11SupportedAntenna) - + (rfNum * sizeof(DOT11_SUPPORTED_ANTENNA)); - - if ( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Tx_list->uNumOfEntries = 0; - Tx_list->uTotalNumOfEntries = rfNum; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - PlatformZeroMemory(Tx_list, InformationBufferLength); - - Tx_list->uNumOfEntries = rfNum; - Tx_list->uTotalNumOfEntries = rfNum; - - for(i = 0; i < rfNum; i++) - { - Tx_list->dot11SupportedAntenna[i].uAntennaListIndex = i+1; - Tx_list->dot11SupportedAntenna[i].bSupportedAntenna = 1; - } - - *BytesWritten = *BytesNeeded; - *BytesNeeded = 0; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_DESIRED_PHY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - ndisStatus = N62CQuery_DOT11_DESIRED_PHY_LIST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_AUTO_CONFIG_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG ulInfo = 0; - ULONG ulInfoLen = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - return NDIS_STATUS_INVALID_LENGTH; - } - - ulInfo = pTargetAdapter->pNdisCommon->dot11AutoConfigEnabled; - ulInfoLen = *BytesNeeded; - - *BytesWritten = ulInfoLen; - - PlatformMoveMemory(InformationBuffer, &ulInfo, ulInfoLen); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_BEACON_PERIOD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(!pMgntInfo->mAssoc && pMgntInfo->mIbss && ACTING_AS_AP(pTargetAdapter)) - { - *BytesWritten = 0; - ndisStatus = NDIS_STATUS_INVALID_STATE; - return ndisStatus; - } - - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - return ndisStatus; - } - - ndisStatus = N6CQuery_DOT11_BEACON_PERIOD(pTargetAdapter, InformationBuffer); - if (ndisStatus == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - } - - return ndisStatus; -} - - - -NDIS_STATUS -N6C_QUERY_OID_DOT11_DESIRED_SSID_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - ndisStatus = N6CQuery_DOT11_DESIRED_SSID_LIST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_GEN_CURRENT_PACKET_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(ULONG)) - { - *BytesNeeded = sizeof(ULONG); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ulInfo=pTargetAdapter->pNdisCommon->NdisPacketFilter; - PlatformMoveMemory(InformationBuffer, &ulInfo, sizeof(ULONG)); - *BytesWritten = sizeof(ULONG); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_CHANNEL( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - ULONG ulInfo = 0; - ULONG ulInfoLen = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if(pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - - #if (MULTICHANNEL_SUPPORT == 1) - if(MultiChannelSwitchNeeded(pTargetAdapter)) - { - ulInfo = MultiChannelGetPortConnected20MhzChannel(pTargetAdapter); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("MultiChannelGetPortConnected20MhzChannel: %d\n", ulInfo)); - } - else - #endif - { - ulInfo = pMgntInfo->dot11CurrentChannelNumber; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("A: channel: %u:\n", ulInfo)); - } - else - { - // - //Report the default channel to os, Or it will fail when in SoftAP_connectOID test. - //receive non probe rsp. By Maddest 06052009. - // - //sherry added for Softap_wps error - //20110927 - if(pTargetAdapter->bInHctTest) - { - if(!IsDefaultAdapter(pTargetAdapter)) - ulInfo = pMgntInfo->dot11CurrentChannelNumber; - else - ulInfo = RT_GetChannelNumber(GetDefaultAdapter(pTargetAdapter)); - } - else - { - ulInfo = RT_GetChannelNumber(GetDefaultAdapter(pTargetAdapter)); - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("B: channel: %u:\n", ulInfo)); - } - - ulInfoLen = sizeof(ULONG); - - PlatformMoveMemory(InformationBuffer, &ulInfo, ulInfoLen); - *BytesWritten = sizeof(ULONG); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_GEN_LINK_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - ULONG ulInfo = 0; - ULONG ulInfoLen = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(NDIS_LINK_PARAMETERS)) - { - *BytesNeeded = sizeof(NDIS_LINK_PARAMETERS); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ndisStatus = N62CQueryLinkParameters( - pTargetAdapter, - InformationBuffer, - InformationBufferLength - ); - - *BytesNeeded = sizeof(NDIS_LINK_PARAMETERS); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_SAFE_MODE_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(BOOLEAN)) - { - *BytesNeeded = sizeof(BOOLEAN); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - -#if 1 - ulInfo = pMgntInfo->SafeModeEnabled; -#else - ulInfo = FALSE; -#endif - PlatformMoveMemory(InformationBuffer, &ulInfo, sizeof(BOOLEAN)); - *BytesWritten = sizeof(BOOLEAN); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_PHY_ID( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(InformationBufferLength < sizeof(ULONG)) - { - *BytesNeeded = sizeof(ULONG); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ulInfo = pTargetAdapter->pNdisCommon->dot11SelectedPhyId; - PlatformMoveMemory(InformationBuffer, &ulInfo, sizeof(ULONG)); - *BytesWritten = sizeof(ULONG); - - RT_TRACE(COMP_OID_QUERY|COMP_RF, DBG_LOUD, ("Query OID_DOT11_CURRENT_PHY_ID: phyid%d\n", ulInfo)); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_GEN_SUPPORTED_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - pInfo = (PVOID) N6GetSupportedOids(); - ulInfoLen = N6GetSupportedOidsLength(); - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_GEN_VENDOR_DRIVER_VERSION( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - ulInfo = NIC_VENDOR_DRIVER_VERSION; - pInfo = (PVOID) &ulInfo; - ulInfoLen = sizeof(ULONG); - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_PNP_CAPABILITIES( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_PNP_CAPABILITIES PnpCapabilities; - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY|COMP_POWER); - - if(!pTargetAdapter->bInHctTest && pTargetAdapter->bUnloadDriverwhenS3S4) - { - RT_TRACE((COMP_OID_QUERY|COMP_POWER), DBG_LOUD, ("Query Information: OID_PNP_CAPABILITIES, NOT support remote wake up\n")); - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - return ndisStatus; - } - - FillPnpCapabilities(pTargetAdapter, &PnpCapabilities); - - pInfo = (PVOID)&PnpCapabilities; - ulInfoLen = sizeof(PnpCapabilities); - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_PNP_QUERY_POWER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - // Report the lowest device power state to sleep. - ulInfo = (ULONG)(NdisDeviceStateD3); - pInfo = (PVOID)&ulInfo; - ulInfoLen = sizeof(ULONG); - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_PNP_ENABLE_WAKE_UP( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(pPSC->WoWLANMode == eWakeOnMagicPacketOnly) // Added by tynli. 2009.09.02. - ulInfo = (ULONG)(NDIS_PNP_WAKE_UP_MAGIC_PACKET); - else if(pPSC->WoWLANMode == eWakeOnPatternMatchOnly) - ulInfo = (ULONG)(NDIS_PNP_WAKE_UP_PATTERN_MATCH); - else if(pPSC->WoWLANMode == eWakeOnBothTypePacket) - ulInfo = (ULONG)(NDIS_PNP_WAKE_UP_MAGIC_PACKET|NDIS_PNP_WAKE_UP_PATTERN_MATCH); - - pInfo = (PVOID)&ulInfo; - ulInfoLen = sizeof(ULONG); - - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - RT_TRACE((COMP_OID_QUERY|COMP_POWER), DBG_LOUD, ("Query Information, OID_PNP_ENABLE_WAKE_UP: %d\n", ulInfo)); - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_TX_ANTENNA( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - - // ====================== - // This OID is not implemented. - // ====================== - - - - ulInfo = 0; - pInfo = (PVOID)&ulInfo; - ulInfoLen = sizeof(ULONG); - - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_RX_ANTENNA( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - // ====================== - // This OID is not implemented. - // ====================== - - ulInfo = 0; - pInfo = (PVOID)&ulInfo; - ulInfoLen = sizeof(ULONG); - - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - -NDIS_STATUS -N6C_QUERY_OID_DOT11_SUPPORTED_RX_ANTENNA( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PVOID pInfo = NULL; - ULONG ulInfoLen = 0; - ULONG ulInfo = 0; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - - - - // ====================== - // This OID is not implemented. - // ====================== - - - - ulInfo = 0; - pInfo = (PVOID)&ulInfo; - ulInfoLen = sizeof(ULONG); - - - if(InformationBufferLength < ulInfoLen) - { - *BytesNeeded = ulInfoLen; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - *BytesWritten = ulInfoLen; - - return ndisStatus; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.h b/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.h deleted file mode 100644 index af6f3d56..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidQuery.h +++ /dev/null @@ -1,484 +0,0 @@ -#ifndef __INC_NDIS6_OID_QUERY_H -#define __INC_NDIS6_OID_QUERY_H - -DOT11_AUTH_ALGORITHM -N6CAuthModeToDot11( - IN PVOID pAuthMode -); - -DOT11_AUTH_ALGORITHM -N6CAuthAlgToDot11( - IN PVOID pAuthMode -); - -DOT11_CIPHER_ALGORITHM -N6CEncAlgorithmToDot11( - IN PVOID pEncAlgorithm -); - -NDIS_STATUS -N6CQuery_DOT11_ENABLED_AUTHENTICATION_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_PMKID_LIST( - IN PADAPTER Adapter, - OUT PDOT11_PMKID_LIST pPMKIDList, - IN ULONG TotalLength -); - -NDIS_STATUS -N6CQuery_DOT11_EXTSTA_CAPABILITY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -VOID -N6CQuery_DOT11_POWER_MGMT_REQUEST( - IN PADAPTER Adapter, - OUT pu4Byte pPowerSaveLevel -); - -NDIS_STATUS -N6CQuery_DOT11_EXCLUDED_MAC_ADDRESS_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_BSSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_OPERATION_MODE_CAPABILITY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_CURRENT_OPERATION_MODE( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_SSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_STATISTICS( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_BSS_TYPE( - IN PADAPTER Adapter, - IN PDOT11_BSS_TYPE pBssType -); - -NDIS_STATUS -N6CQuery_DOT11_PRIVACY_EXEMPTION_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_IBSS_PARAMS( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_ATIM_WINDOW( - IN PADAPTER pAdapter, - OUT PULONG pAtimWindow -); - - -u4Byte -N6CQuery_DOT11_OPERATING_PHYID( - IN PADAPTER Adapter -); - -u4Byte -N6CQuery_DOT11_RTBSS_OPERATING_PHYID( - IN PADAPTER Adapter, - IN PVOID pRtBss -); - -NDIS_STATUS -N6CQuery_DOT11_DESIRED_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_ACTIVE_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_OPTIONAL_CAPABILITY( - IN PADAPTER pAdapter, - OUT PDOT11_OPTIONAL_CAPABILITY pResult -); - -NDIS_STATUS -N6CQuery_DOT11_CURRENT_OPTIONAL_CAPABILITY( - IN PADAPTER pAdapter, - OUT PDOT11_OPTIONAL_CAPABILITY pResult -); - -NDIS_STATUS -N6CQuery_DOT11_CF_POLLABLE( - IN PADAPTER pAdapter, - OUT PBOOLEAN pResult -); - -NDIS_STATUS -N6CQuery_DOT11_OPERATIONAL_RATE_SET( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_BEACON_PERIOD( - IN PADAPTER pAdapter, - OUT PULONG pResult -); - -NDIS_STATUS -N6CQuery_DOT11_SHORT_RETRY_LIMIT( - IN PADAPTER pAdapter, - OUT PULONG pResult -); - -NDIS_STATUS -N6CQuery_DOT11_LONG_RETRY_LIMIT( - IN PADAPTER pAdapter, - OUT PULONG pResult -); - -NDIS_STATUS -N6CQuery_DOT11_MAX_TRANSMIT_MSDU_LIFETIME( - IN PADAPTER pAdapter, - OUT PULONG pResult -); - -NDIS_STATUS -N6CQuery_DOT11_MAX_RECEIVE_LIFETIME( - IN PADAPTER pAdapter, - OUT PULONG pResult -); - -NDIS_STATUS -N6CQuery_DOT11_SUPPORTED_PHY_TYPES( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_ENUM_ASSOCIATION_INFO( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuery_DOT11_MULTICAST_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -BOOLEAN -N6CQuery_DOT11_NIC_POWER_STATE( - IN PADAPTER pAdapter -); - -NDIS_STATUS -N6CQuery_DOT11_DataRateMappingTable( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N6CQuery_DOT11_Supported_DataRates( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N6CQuery_DOT11_Tx_Antenna( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_DESIRED_PHY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_AUTO_CONFIG_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_BEACON_PERIOD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_DESIRED_SSID_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_GEN_CURRENT_PACKET_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_CHANNEL( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_GEN_LINK_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_SAFE_MODE_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_PHY_ID( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_GEN_SUPPORTED_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_GEN_VENDOR_DRIVER_VERSION( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_PNP_CAPABILITIES( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_PNP_QUERY_POWER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_PNP_ENABLE_WAKE_UP( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_TX_ANTENNA( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_CURRENT_RX_ANTENNA( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_QUERY_OID_DOT11_SUPPORTED_RX_ANTENNA( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); -#endif // #ifndef __INC_NDIS6_OID_QUERY_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.c b/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.c deleted file mode 100644 index cb3ae108..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.c +++ /dev/null @@ -1,4702 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N6C_OidSet.tmh" -#endif - - -// -// The following helper functions are used to determined if a -// BSS has the capability of specific wireless mode. -// 2005.01.13, by rcnjko. -// -BOOLEAN -WithWirelessB( - PRT_WLAN_BSS pRtBss) -{ - u2Byte i; - u1Byte rate; - - // Check channels. - if(pRtBss->ChannelNumber > 14) - { - return FALSE; - } - - // Check supported rates. - for(i = 0; i < pRtBss->bdSupportRateEXLen; i++) - { - rate = pRtBss->bdSupportRateEXBuf[i] & 0x7f; - if( MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) ) - { - return TRUE; - } - } - - return FALSE; -} - - - -BOOLEAN -WithWirelessG( - PRT_WLAN_BSS pRtBss) -{ - u2Byte i; - u1Byte rate; - - // Check channels. - if(pRtBss->ChannelNumber > 14) - { - return FALSE; - } - - // Check supported rates. - for(i = 0; i < pRtBss->bdSupportRateEXLen; i++) - { - rate = pRtBss->bdSupportRateEXBuf[i] & 0x7f; - if( MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_G) && - !MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) ) - { - return TRUE; - } - } - - // Check if it contains ERP information element. - // Some AP, WAG-302, will not always claim OFDM rates in their ProbeRsp or Beacon - // but it is in G mode. 2005.08.23, by rcnjko. - if(pRtBss->bERPInfoValid) - { - return TRUE; - } - - return FALSE; -} - - - -BOOLEAN -WithWirelessA( - PRT_WLAN_BSS pRtBss) -{ - u2Byte i; - u1Byte rate; - - // Check channels. - if(pRtBss->ChannelNumber <= 14 || - pRtBss->ChannelNumber > 184 ) - { - return FALSE; - } - - // Check supported rates. - for(i = 0; i < pRtBss->bdSupportRateEXLen; i++) - { - rate = pRtBss->bdSupportRateEXBuf[i] & 0x7f; - if( MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_A) ) - { - return TRUE; - } - } - - return FALSE; -} - -//// -// This routine determine if we should report the BSS scanned -// to upper layer. -// 2005.01.13, by rcnjko. -// -BOOLEAN -FilterRtBss( - PADAPTER Adapter, - PRT_WLAN_BSS pRtBss - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bAcceptable = TRUE; - BOOLEAN bHasB, bHasG, bHasA; - - // Determine the capability of wireless mode of the BSS. - bHasB = WithWirelessB(pRtBss); - bHasG = WithWirelessG(pRtBss); - bHasA = WithWirelessA(pRtBss); - - // - // 1. Maybe we may need to use a table in the future. - // 2. Currently, we only consider B/G case. - if( bHasB && !bHasG && !bHasA ) - { // The BSS is pure B. - if( pNdisCommon->RegWirelessMode4ScanList == WIRELESS_MODE_G || - pNdisCommon->RegWirelessMode4ScanList == WIRELESS_MODE_A ) - { // We are pure A or pure G. - bAcceptable = FALSE; - } - } - - if(pRtBss->IE.Length <= sizeof(RT_FIXED_IE_FIELD)) - bAcceptable = FALSE; - - return bAcceptable; -} - - -/** -** -**20061130 david add in order to copy IE into entry and fill in hidden ssid IE. -** -**We don't need to worry about Length in this function because it has been handled already -** -/@ first parameter: Adapter bss list -** /@ second parameter: management bss list we are going to fill -** -**/ -NDIS_STATUS -FillHiddenSSIDinIE( - IN PADAPTER Adapter, - OUT PDOT11_BSS_ENTRY pDot11Bss, - IN PRT_WLAN_BSS pRtBss - ) -{ - PUCHAR pSrcBlob = pDot11Bss->ucBuffer; - ULONG SizeOfSrcBlob = pDot11Bss->uBufferLength; - PDOT11_INFO_ELEMENT pInfoElemHdr = NULL; - u1Byte tmpIEBuf[BSS_IE_BUF_LEN]; - u4Byte tmpIELen=0; - u4Byte tmpHiddenLen=0; - - - pInfoElemHdr = (PDOT11_INFO_ELEMENT)pSrcBlob; - if (SizeOfSrcBlob < sizeof(DOT11_INFO_ELEMENT)) - { - // Shouldnt happen. The IE's must already be verified - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // We shouldn't use the HiddenAP flag to judge the BSS STA is a hidden AP because the - // flag is undetermineable, just copy SSID into IE in each BSS STA. - // 2006.12.20, by shien chang. - //if (pRtBss->HiddenAP) - { - // - // For SSID, we copy cached Probe SSID if we do not have a SSID - // in the Beacon. This is to handle hidden SSID. For hidden SSID, - // the OS would first do a scan and expects us to indicate the - // found SSID so that it can do a connect. Since we may overwrite the - // probe with beacon, we copy the cached SSID over - // - tmpHiddenLen = pInfoElemHdr->Length; - tmpIELen=SizeOfSrcBlob-sizeof(DOT11_INFO_ELEMENT)-tmpHiddenLen; - CopyMem(tmpIEBuf, pSrcBlob+sizeof(DOT11_INFO_ELEMENT)+tmpHiddenLen, tmpIELen); - CopyMem(pSrcBlob+sizeof(DOT11_INFO_ELEMENT), pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - pInfoElemHdr->Length=pRtBss->bdSsIdLen; - CopyMem(pSrcBlob+sizeof(DOT11_INFO_ELEMENT)+pInfoElemHdr->Length, tmpIEBuf, tmpIELen); - // - // Commented out by haich. - // We shall not expect this is how the length is calculated since we may append - // other IEs outside this function, eg: WCN IE. Therefore we shall update it, not - // re-calculate it. 2008.10.20, haich. - // - //pDot11Bss->uBufferLength = (u2Byte)(((pRtBss->IE.Length -sizeof(RT_FIXED_IE_FIELD)) - tmpHiddenLen)+pInfoElemHdr->Length); - pDot11Bss->uBufferLength = (u2Byte)((pDot11Bss->uBufferLength - tmpHiddenLen)+pInfoElemHdr->Length); - } - - return NDIS_STATUS_SUCCESS; -} - - -BOOLEAN -NeedRemoveWCNIE( - IN PADAPTER Adapter, - IN PRT_WLAN_BSS pRtBss - ) -{ - BOOLEAN ret = FALSE; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING osIE; - OCTET_STRING osWCN; -#if (WPS_SUPPORT == 1) -{ - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - if(!pSimpleConfig->bEnabled || Adapter->bInHctTest) - { - if(pRtBss->bdSimpleConfIE.Length > 0) - ret = TRUE; - } -} -#endif - - return ret; -} - - -VOID -N6CTranslateRtBssToDot11Bss( - IN PADAPTER Adapter, - OUT PVOID pDot11Bss, - IN PRT_WLAN_BSS pRtBss - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_BSS_ENTRY pDot11BssEntry = (PDOT11_BSS_ENTRY)pDot11Bss; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - LARGE_INTEGER CurrentTime; - - pDot11BssEntry->uPhyId = N6CQuery_DOT11_RTBSS_OPERATING_PHYID(Adapter, pRtBss); - - pDot11BssEntry->PhySpecificInfo.uChCenterFrequency = MgntGetChannelFrequency(pRtBss->ChannelNumber); - - - CopyMem(pDot11BssEntry->dot11BSSID, - pRtBss->bdBssIdBuf, - sizeof(DOT11_MAC_ADDRESS)); - if (pRtBss->bdCap & cIBSS) - { - pDot11BssEntry->dot11BSSType = dot11_BSS_type_independent; - } - else - { - pDot11BssEntry->dot11BSSType = dot11_BSS_type_infrastructure; - } - - // Get current timestamp - NdisGetCurrentSystemTime(&CurrentTime); - - // This value will be showed as the value of "Signal" on those monitor program - pDot11BssEntry->lRSSI = pRtBss->CumRecvSignalPower; - - // Because our HW has signal quality issues, we use signal strength - // instead of signal quality. 2006.11.27, by shien chang, suggest by David. - pDot11BssEntry->uLinkQuality = pRtBss->RSSI; // pRtBss->SignalQuality; - pDot11BssEntry->bInRegDomain = FALSE; - pDot11BssEntry->usBeaconPeriod = pRtBss->bdBcnPer; - pDot11BssEntry->ullTimestamp = pRtBss->bdTstamp; - pDot11BssEntry->ullHostTimestamp = CurrentTime.QuadPart; // Timestamp which records when Beacon/ProbeRsp received, by Roger. 2015.09.04 - pDot11BssEntry->usCapabilityInformation = pRtBss->bdCap; - pDot11BssEntry->uBufferLength = 0; - - // 2008/11/22 MH SD1 Richard suggest to do error check. - if (pRtBss->IE.Length > sizeof(RT_FIXED_IE_FIELD)) - { - // 20090508 Joseph: Revise size checking. Handling hidden SSID IE handling. - // This makes sure that memory copy operation is not exceed the buffer provided by OS. - PDOT11_INFO_ELEMENT pDot11SsidElement = - (PDOT11_INFO_ELEMENT)(pRtBss->IE.Octet +sizeof(RT_FIXED_IE_FIELD)); - pDot11BssEntry->uBufferLength = pRtBss->IE.Length - sizeof(RT_FIXED_IE_FIELD); - - if ( ! BeHiddenSsid(pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen) && - BeHiddenSsid((pu1Byte)pDot11SsidElement+sizeof(DOT11_INFO_ELEMENT), pDot11SsidElement->Length) ) - { - PDOT11_INFO_ELEMENT pFirstIE = (PDOT11_INFO_ELEMENT)pDot11BssEntry->ucBuffer; - pFirstIE->ElementID = EID_SsId; - pFirstIE->Length = pRtBss->bdSsIdLen; - CopyMem(pDot11BssEntry->ucBuffer+sizeof(DOT11_INFO_ELEMENT), - pRtBss->bdSsIdBuf, - pRtBss->bdSsIdLen); - CopyMem(pDot11BssEntry->ucBuffer+sizeof(DOT11_INFO_ELEMENT)+pRtBss->bdSsIdLen, - pRtBss->IE.Octet+sizeof(RT_FIXED_IE_FIELD)+sizeof(DOT11_INFO_ELEMENT)+pDot11SsidElement->Length, - pRtBss->IE.Length-sizeof(RT_FIXED_IE_FIELD)-sizeof(DOT11_INFO_ELEMENT)-pDot11SsidElement->Length); - - pDot11BssEntry->uBufferLength = pDot11BssEntry->uBufferLength - pDot11SsidElement->Length + pRtBss->bdSsIdLen; - } - else - { - if(!NeedRemoveWCNIE(Adapter, pRtBss)) - { - CopyMem(pDot11BssEntry->ucBuffer, - pRtBss->IE.Octet+sizeof(RT_FIXED_IE_FIELD), - (pRtBss->IE.Length>sizeof(RT_FIXED_IE_FIELD))? - (pRtBss->IE.Length-sizeof(RT_FIXED_IE_FIELD)):0); - } - else - { - static u1Byte Simpleconf[]={0x00, 0x50, 0xF2, 0x04}; - RT_DOT11_IE Dot11Ie; - u4Byte nextOffset = sizeof(RT_FIXED_IE_FIELD); - u4Byte curOffset; - u4Byte ieCount = 0, skiplength = 0; - - while(HasNextIE(&pRtBss->IE, nextOffset)) - { - curOffset = nextOffset; - Dot11Ie = AdvanceToNextIE(&pRtBss->IE, &nextOffset); - if (Dot11Ie.Id == 0xDD) - { - if(PlatformCompareMemory(Dot11Ie.Content.Octet, Simpleconf, sizeof(Simpleconf)) == 0) - { - skiplength = Dot11Ie.Content.Length; -#if (WPS_SUPPORT == 1) - if(skiplength != 0) - { - pDot11BssEntry->uBufferLength = pDot11BssEntry->uBufferLength - skiplength - 2; - } -#endif - continue; - } - } - CopyMem(pDot11BssEntry->ucBuffer+ieCount, - pRtBss->IE.Octet+curOffset, - sizeof(DOT11_INFO_ELEMENT)+Dot11Ie.Content.Length); - ieCount += (Dot11Ie.Content.Length + 2); - } - //pDot11BssEntry->uBufferLength = ieCount; - } - } - } - -#if (WPS_SUPPORT == 1) - // - // Here we append the Wcn IE extracted from the beacon and probe response received - // from the BSS to the IE buffer we report to the upper layer. - // The Wcn IE is filled in by UpdateBssWcnIe(). - // haich, 2008.08.26. - // - { - // Copy Wcn IE from beacon. - CopyMem(pDot11BssEntry->ucBuffer + pDot11BssEntry->uBufferLength, - pRtBss->osBeaconWcnIe.Octet, - pRtBss->osBeaconWcnIe.Length); - pDot11BssEntry->uBufferLength += pRtBss->osBeaconWcnIe.Length; - - //RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, - // "beacon wcn ie", pRtBss->osBeaconWcnIe.Octet, pRtBss->osBeaconWcnIe.Length); - - // Copy Wcn IE from ProbeRsp. - CopyMem(pDot11BssEntry->ucBuffer + pDot11BssEntry->uBufferLength, - pRtBss->osProbeRspWcnIe.Octet, - pRtBss->osProbeRspWcnIe.Length); - pDot11BssEntry->uBufferLength += pRtBss->osProbeRspWcnIe.Length; - //RT_PRINT_DATA(COMP_SCAN, DBG_LOUD, - // "probe rsp wcn ie", pRtBss->osProbeRspWcnIe.Octet, pRtBss->osProbeRspWcnIe.Length); - - } -#endif -} - - -// -// Translate DOT11_AUTH_ALGORITHM to RT_AUTH_MODE. -// Added by Annie, 2006-10-19. -// -RT_AUTH_MODE -N6CDot11ToAuthMode( - IN DOT11_AUTH_ALGORITHM dot11AuthAlg - ) -{ - RT_AUTH_MODE AuthMode; - - switch(dot11AuthAlg) - { - case DOT11_AUTH_ALGO_80211_OPEN: - AuthMode = RT_802_11AuthModeOpen; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToAuthMode(): DOT11_AUTH_ALGO_80211_OPEN\n") ); - break; - - case DOT11_AUTH_ALGO_80211_SHARED_KEY: - AuthMode = RT_802_11AuthModeShared; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToAuthMode(): DOT11_AUTH_ALGO_80211_SHARED_KEY\n") ); - break; - - case DOT11_AUTH_ALGO_WPA: - AuthMode = RT_802_11AuthModeWPA; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToAuthMode(): DOT11_AUTH_ALGO_WPA\n") ); - break; - - case DOT11_AUTH_ALGO_WPA_PSK: - AuthMode = RT_802_11AuthModeWPAPSK; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToAuthMode(): DOT11_AUTH_ALGO_WPA_PSK\n") ); - break; - - case DOT11_AUTH_ALGO_RSNA: - AuthMode = RT_802_11AuthModeWPA2; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToAuthMode(): DOT11_AUTH_ALGO_RSNA\n") ); - break; - - case DOT11_AUTH_ALGO_RSNA_PSK: - AuthMode = RT_802_11AuthModeWPA2PSK; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToAuthMode(): DOT11_AUTH_ALGO_RSNA_PSK\n") ); - break; - - default: - AuthMode = RT_802_11AuthModeOpen; - RT_TRACE( COMP_SEC, DBG_WARNING, ("N6CDot11ToAuthMode(): unknow case, 0x%X => RT_802_11AuthModeOpen (WARNING!!!)\n", dot11AuthAlg) ); - break; - } - - return AuthMode; -} - - -// -// Translate DOT11_CIPHER_ALGORITHM to RT_ENC_ALG. -// Added by Annie, 2006-10-19. -// -RT_ENC_ALG -N6CDot11ToEncAlgorithm( - IN DOT11_CIPHER_ALGORITHM dot11CipherAlg, - IN u4Byte dot11CipherKeyLength - ) -{ - RT_ENC_ALG EncAlg; - - switch( dot11CipherAlg ) - { - case DOT11_CIPHER_ALGO_NONE: - EncAlg = RT_ENC_ALG_NO_CIPHER; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_NONE\n") ); - break; - - case DOT11_CIPHER_ALGO_WEP: - if (dot11CipherKeyLength == NATIVE_802_11_WEP40_KEY_LENGTH) - { - EncAlg = RT_ENC_ALG_WEP40; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_WEP40\n") ); - } - else if (dot11CipherKeyLength == NATIVE_802_11_WEP104_KEY_LENGTH) - { - EncAlg = RT_ENC_ALG_WEP104; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_WEP104\n") ); - } - else - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): Warning, key length is invalid.\n")); - EncAlg = RT_ENC_ALG_NO_CIPHER; - } - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_WEP\n") ); - break; - - case DOT11_CIPHER_ALGO_WEP40: - EncAlg = RT_ENC_ALG_WEP40; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_WEP40\n") ); - break; - - case DOT11_CIPHER_ALGO_TKIP: - EncAlg = RT_ENC_ALG_TKIP; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_TKIP\n") ); - break; - - case DOT11_CIPHER_ALGO_CCMP: - EncAlg = RT_ENC_ALG_AESCCMP; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_CCMP\n") ); - break; - - case DOT11_CIPHER_ALGO_WAPI_SMS4: //For WAPI IHV service support add by ylb 20111114 - EncAlg = RT_ENC_ALG_SMS4; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_WAPI_SMS4\n") ); - break; - case DOT11_CIPHER_ALGO_WEP104: - EncAlg = RT_ENC_ALG_WEP104; - RT_TRACE( COMP_SEC, DBG_LOUD, ("N6CDot11ToEncAlgorithm(): DOT11_CIPHER_ALGO_WEP104\n") ); - break; - - default: - EncAlg = RT_ENC_ALG_NO_CIPHER; - RT_TRACE( COMP_SEC, DBG_WARNING, ("N6CDot11ToEncAlgorithm(): Unknown AlgorithmId 0x%X (WARNING!!!)\n", dot11CipherAlg) ); - break; - } - - return EncAlg; -} - - -// N6CSet _DOT11_AUTHENTICATION_ALOGORITHM -// -// -VOID -N6CSet_DOT11_AUTHENTICATION_ALOGORITHM( - IN PADAPTER Adapter, - IN DOT11_AUTH_ALGORITHM AlgorithmId - ) -{ - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - if(FALSE == WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIIHVSUPPORT, 0)) - { - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - return; - } - - pMgntInfo->bRSNAPSKMode = FALSE; // maybe need to move to Ondissconnent. - pNdisCommon->RegAuthalg = AlgorithmId; - - CCX_8021xModeChange(Adapter, FALSE); - - switch( AlgorithmId ) - { - case DOT11_AUTH_ALGO_80211_OPEN: - pSecInfo->AuthMode = RT_802_11AuthModeOpen; - pSecInfo->SecLvl = RT_SEC_LVL_NONE; -// pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; -// SecClearAllKeys(Adapter); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(): DOT11_AUTH_ALGO_80211_OPEN\n") ); - break; - - case DOT11_AUTH_ALGO_80211_SHARED_KEY: - pSecInfo->AuthMode = RT_802_11AuthModeShared; - pSecInfo->SecLvl = RT_SEC_LVL_NONE; -// pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; -// SecClearAllKeys(Adapter); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(): DOT11_AUTH_ALGO_80211_SHARED_KEY\n") ); - break; - - case DOT11_AUTH_ALGO_WPA: - pSecInfo->AuthMode = RT_802_11AuthModeWPA; - pSecInfo->SecLvl = RT_SEC_LVL_WPA; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(): DOT11_AUTH_ALGO_WPA\n") ); - break; - - case DOT11_AUTH_ALGO_WPA_PSK: - pSecInfo->AuthMode = RT_802_11AuthModeWPAPSK; - pSecInfo->SecLvl = RT_SEC_LVL_WPA; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(): DOT11_AUTH_ALGO_WPA_PSK\n") ); - break; - - case DOT11_AUTH_ALGO_RSNA: - pSecInfo->AuthMode = RT_802_11AuthModeWPA2; - pSecInfo->SecLvl = RT_SEC_LVL_WPA2; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(): DOT11_AUTH_ALGO_RSNA\n") ); - break; - - case DOT11_AUTH_ALGO_RSNA_PSK: - pSecInfo->AuthMode = RT_802_11AuthModeWPA2PSK; - pSecInfo->SecLvl = RT_SEC_LVL_WPA2; - //Add for RSNA IBSS , by CCW - if(pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC) - { - if(pMgntInfo->bRegAdhocUseHWSec == 0) - { - pMgntInfo->bRSNAPSKMode = TRUE; - } - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_AESCCMP; - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_AESCCMP; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM(): DOT11_AUTH_ALGO_RSNA_PSK\n") ); - break; - - case DOT11_AUTH_ALGO_CCKM: - pSecInfo->AuthMode = RT_802_11AuthModeCCKM; - pSecInfo->SecLvl = RT_SEC_LVL_WPA2; - // TODO: AES Must take for consider - - CCX_8021xModeChange(Adapter, TRUE); - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("%s DOT11_AUTH_ALGO_CCKM\n", __FUNCTION__) ); - break; - - case DOT11_AUTH_ALGO_WAPI_PSK: //For WAPI IHV service support add by ylb 20111114 - pSecInfo->AuthMode = RT_802_11AuthModeWAPI; - pSecInfo->SecLvl = RT_SEC_LVL_WAPI; - - //pSecInfo->wapiInfo.bWapiEnable = TRUE; - WAPI_QuerySetVariable(Adapter, WAPI_SET, WAPI_VAR_WAPIPSK, TRUE); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("%s:DOT11_AUTH_ALGO_WAPI_PSK\n", __FUNCTION__) ); - break; - case DOT11_AUTH_ALGO_WAPI_CERTIFICATE: //For WAPI IHV service support add by ylb 20111114 - pSecInfo->AuthMode = RT_802_11AuthModeCertificateWAPI; - pSecInfo->SecLvl = RT_SEC_LVL_WAPI; - - //pSecInfo->wapiInfo.bWapiEnable = TRUE; - WAPI_QuerySetVariable(Adapter, WAPI_SET, WAPI_VAR_WAPIPSK, FALSE); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("%s:DOT11_AUTH_ALGO_WAPI_CERTIFICATE\n", __FUNCTION__) ); - break; - - default: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM(): unknow case, 0x%X\n", AlgorithmId) ); - break; - } - - - MgntActSet_802_11_AUTHENTICATION_MODE( Adapter, pSecInfo->AuthMode ); - SecConstructRSNIE(Adapter); -} - - - -// Implementation of OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM setting for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11SetEnabledAuthenticationAlgorithm() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PDOT11_AUTH_ALGORITHM_LIST pAuthAlgoList = (PDOT11_AUTH_ALGORITHM_LIST)InformationBuffer; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("==> N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM()\n") ); - - *BytesNeeded = sizeof(DOT11_AUTH_ALGORITHM_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pAuthAlgoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_AUTH_ALGORITHM_LIST)) ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - // Must have atleast one entry in the list - if (pAuthAlgoList->uNumOfEntries < 1) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - if(pAuthAlgoList->uNumOfEntries > 1) - { - u1Byte i = 0; - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("%s pAuthAlgoList->uNumOfEntries > 1, but we don't support now!\n", __FUNCTION__) ); - for(i = 0; i < pAuthAlgoList->uNumOfEntries; i ++) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("%s [%d]AlgorithmId = %d!\n", __FUNCTION__, i, pAuthAlgoList->AlgorithmIds[i])); - } - } - - N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(Adapter, pAuthAlgoList->AlgorithmIds[0] ); - - *BytesRead = *BytesNeeded; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("<== N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM(): pSecInfo->AuthMode=0x%X\n", pSecInfo->AuthMode) ); - return NDIS_STATUS_SUCCESS; -} - - -// N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM -// -// - -VOID -N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - IN DOT11_CIPHER_ALGORITHM AlgorithmId -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - if(FALSE == WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIIHVSUPPORT, 0)) - { - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - return; - } - - pNdisCommon->RegPairwiseAlg= AlgorithmId; - switch( AlgorithmId ) - { - case DOT11_CIPHER_ALGO_NONE: - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - pSecInfo->UseDefaultKey = FALSE; - pSecInfo->EncryptionHeadOverhead = 0; - pSecInfo->EncryptionTailOverhead = 0; - pSecInfo->EncryptionStatus = RT802_11WEPDisabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_NONE; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_NONE\n") ); - break; - - case DOT11_CIPHER_ALGO_WEP40: - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_WEP40; - pSecInfo->UseDefaultKey = TRUE; - pSecInfo->EncryptionHeadOverhead = WEP_IV_LEN; - pSecInfo->EncryptionTailOverhead = WEP_ICV_LEN; - pSecInfo->EncryptionStatus = RT802_11Encryption1Enabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_BEGIN; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_WEP40\n") ); - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP64; - break; - - case DOT11_CIPHER_ALGO_WEP104: - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_WEP104; - pSecInfo->UseDefaultKey = TRUE; - pSecInfo->EncryptionHeadOverhead = WEP_IV_LEN; - pSecInfo->EncryptionTailOverhead = WEP_ICV_LEN; - pSecInfo->EncryptionStatus = RT802_11Encryption1Enabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_BEGIN; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_WEP104\n") ); - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP128; - break; - - case DOT11_CIPHER_ALGO_WEP: - // - // At this time, we don't know the key size, defer the setting of algorithm to - // OID_DOT11_CIPHER_DEFAULT_KEY, 2006.10.26, by shien chang. - // - if(OS_SUPPORT_WDI(Adapter)) - { - pSecInfo->PairwiseEncAlgorithm = (pSecInfo->GroupEncAlgorithm==RT_ENC_ALG_WEP104)?RT_ENC_ALG_WEP104:RT_ENC_ALG_WEP40; - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>[WDI:WEP]set pSecInfo->PairwiseEncAlgorithm =0x%08X \n",pSecInfo->PairwiseEncAlgorithm)); - } - else - { - pSecInfo->PairwiseEncAlgorithm = (pSecInfo->PairwiseEncAlgorithm==RT_ENC_ALG_WEP104)?RT_ENC_ALG_WEP104:RT_ENC_ALG_WEP40; - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>[non-WDI:WEP]set pSecInfo->PairwiseEncAlgorithm=0x%08X\n",pSecInfo->PairwiseEncAlgorithm)); - } - - pSecInfo->UseDefaultKey = TRUE; - pSecInfo->EncryptionHeadOverhead = WEP_IV_LEN; - pSecInfo->EncryptionTailOverhead = WEP_ICV_LEN; - pSecInfo->EncryptionStatus = RT802_11Encryption1Enabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_BEGIN; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_WEP %s\n", (pSecInfo->PairwiseEncAlgorithm==RT_ENC_ALG_WEP104)?"WEP104":"WEP40") ); - break; - - case DOT11_CIPHER_ALGO_TKIP: - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_TKIP; - pSecInfo->UseDefaultKey = FALSE; - pSecInfo->EncryptionHeadOverhead = EXT_IV_LEN; - pSecInfo->EncryptionTailOverhead = WEP_ICV_LEN; - pSecInfo->EncryptionStatus = RT802_11Encryption2Enabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_BEGIN; - // If Auth is CCKM, we check Enc Algroithm is TKIP or Aes - // Marked by Bruce, 2011-02-09. - // We should not restrct the security level to WPA2 or WPA. - //if(pSecInfo->AuthMode == RT_802_11AuthModeCCKM) - //{ - // pMgntInfo->SecurityInfo.SecLvl = RT_SEC_LVL_WPA; - // RT_TRACE( COMP_OID_SET, DBG_LOUD, (" Change RT_802_11AuthModeCCKM to RT_SEC_LVL_WPA\n", __FUNCTION__) ); - //} - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_TKIP\n") ); - break; - - case DOT11_CIPHER_ALGO_CCMP: - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_AESCCMP; - pSecInfo->UseDefaultKey = FALSE; - pSecInfo->AESCCMPMicLen = 8; - pSecInfo->EncryptionHeadOverhead = EXT_IV_LEN; - pSecInfo->EncryptionTailOverhead = AES_MIC_LEN; - pSecInfo->EncryptionStatus = RT802_11Encryption3Enabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_BEGIN; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_CCMP\n") ); - break; - - case DOT11_CIPHER_ALGO_WAPI_SMS4: //For WAPI IHV service support add by ylb 20111114 - pSecInfo->PairwiseEncAlgorithm = RT_ENC_ALG_SMS4; - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_SMS4; - pSecInfo->SWTxEncryptFlag = TRUE; - pSecInfo->SWRxDecryptFlag = TRUE; - pSecInfo->UseDefaultKey = TRUE; //for hw en/decryption - pSecInfo->EncryptionHeadOverhead = WAPI_EXT_LEN; - pSecInfo->EncryptionTailOverhead = SMS4_MIC_LEN; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): DOT11_CIPHER_ALGO_WAPI_SMS4\n") ); - break; - - default: - pSecInfo->EncryptionStatus = RT802_11WEPDisabled; - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_NONE; - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): Unknown AlgorithmId 0x%X\n", AlgorithmId ) ); - break; - } - - //vivi modify for new cam search flow, 20091028. - //new cam search flow can use hw en/decryption, while original can not. - if (IS_EN_DE_CRYPTION_NEW_CAM_SUPPORT()) - { - //we only use SWTxEncryptFlag&SWRxDecryptFlag to decide hw or sw en/decryption - - //temply add this function here, reconsider it later, vivi - SecSetSwEncryptionDecryption( Adapter , FALSE , FALSE ); - - // Please consider two-client scenario: One is no security, and the other needs HW security. (Do not disable HW security) - if(!pSecInfo->SWTxEncryptFlag || !pSecInfo->SWRxDecryptFlag) - { - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - } - else - { - if (IsMultiPortAllowDisableHWSecurity(Adapter)) - Adapter->HalFunc.DisableHWSecCfgHandler(Adapter); - } - } - else - { - // Switch HW encryption/decryption mode. - if(Adapter->bInHctTest == 1 || Adapter->MgntInfo.SafeModeEnabled) - { - Adapter->HalFunc.DisableHWSecCfgHandler(Adapter); - SecSetSwEncryptionDecryption( Adapter , TRUE , TRUE ); - } - else - { - //pSecInfo->RegSWRxDecryptFlag = EncryptionDecryptionMechanism_Auto; - //pSecInfo->RegSWTxEncryptFlag = EncryptionDecryptionMechanism_Auto; - if( pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC && - MgntActQuery_ApType(Adapter) == RT_AP_TYPE_NONE ) - { - if(pMgntInfo->bRegAdhocUseHWSec) - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM() Win7 we used HW in AD-HOT in FPGA Verify\n")); - SecSetSwEncryptionDecryption( Adapter , FALSE , FALSE ); - } - else - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM() Win7 we used SW in AD-HOT \n")); - SecSetSwEncryptionDecryption( Adapter , TRUE , TRUE ); - } - } - else if( pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP104 || - pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>Win7 we used SW in WEP \n")); - SecSetSwEncryptionDecryption( Adapter , TRUE , TRUE ); - } - else - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>Win7 we used HW in default !! \n")); - SecSetSwEncryptionDecryption( Adapter , FALSE , FALSE ); - } - - // Please consider two-client scenario: One is no security, and the other needs HW security. (Do not disable HW security) - if(!pSecInfo->SWTxEncryptFlag || !pSecInfo->SWRxDecryptFlag) - { - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - } - else - { - //should consider multi-port scenario:default adapter is SW encryption/decryption ,vwifi use HW. - // start vwifi first,then default adapter connect to a ap,the SecCfg will disable HW encryption/decryption, - // and will cause vwifi not use encryption. - // so need to check if need to disable HW encryption/decryption. - if (IsMultiPortAllowDisableHWSecurity(Adapter) ) - Adapter->HalFunc.DisableHWSecCfgHandler(Adapter); - } - } - } - - // Update mCap. - if( pSecInfo->PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER ) - { - pMgntInfo->mCap |= cPrivacy; - } - else - { - pMgntInfo->mCap &= ~cPrivacy; - } - - // Update STA's RSNIE. - SecConstructRSNIE(Adapter); -} - -// -// Implementation of OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM setting for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11SetEnabledUnicastCipherAlgorithm() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PDOT11_CIPHER_ALGORITHM_LIST pCipherAlgoList = (PDOT11_CIPHER_ALGORITHM_LIST)InformationBuffer; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("==> N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM()\n") ); - - *BytesNeeded = sizeof(DOT11_CIPHER_ALGORITHM_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pCipherAlgoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CIPHER_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_CIPHER_ALGORITHM_LIST)) ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - // Must have atleast one entry in the list - if (pCipherAlgoList->uNumOfEntries < 1) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - // Only support one cipher algorithm - if (pCipherAlgoList->uNumOfEntries != 1) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(), NDIS_STATUS_INVALID_LENGTH\n") ); - return NDIS_STATUS_INVALID_LENGTH; - } - - N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM( Adapter ,pCipherAlgoList->AlgorithmIds[0] ); - - *BytesRead = *BytesNeeded; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("<== N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM(): PairwiseEncAlgorithm=0x%X\n", pSecInfo->PairwiseEncAlgorithm) ); - return NDIS_STATUS_SUCCESS; -} - - -//N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM -// -// -VOID -N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - IN DOT11_CIPHER_ALGORITHM AlgorithmId -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - if(FALSE == WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIIHVSUPPORT, 0)) - { - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - return; - } - - FunctionIn(COMP_SEC); - - pSecInfo->GroupEncAlgorithm = N6CDot11ToEncAlgorithm( - AlgorithmId, - (pSecInfo->PairwiseEncAlgorithm==RT_ENC_ALG_WEP104)?NATIVE_802_11_WEP104_KEY_LENGTH:NATIVE_802_11_WEP40_KEY_LENGTH - ); - // Save Multicast Alg - pNdisCommon->RegGroupALg = AlgorithmId; - - SecConstructRSNIE(Adapter); -} - -// -// Implementation of OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM setting for NDIS6. -// Added by Annie, 2006-10-10. -// (reference Sta11SetEnabledMulticastCipherAlgorithm() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PDOT11_CIPHER_ALGORITHM_LIST pCipherAlgoList = (PDOT11_CIPHER_ALGORITHM_LIST)InformationBuffer; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("==> N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM()\n") ); - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pCipherAlgoList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CIPHER_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_CIPHER_ALGORITHM_LIST)) ) - { - return NDIS_STATUS_INVALID_DATA; - } - - // Must have atleast one entry in the list - if (pCipherAlgoList->uNumOfEntries < 1) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - // Only support one cipher algorithm - if (pCipherAlgoList->uNumOfEntries != 1) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM(), NDIS_STATUS_INVALID_LENGTH\n") ); - return NDIS_STATUS_INVALID_LENGTH; - } - - N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM( Adapter,pCipherAlgoList->AlgorithmIds[0]); - - *BytesRead = *BytesNeeded; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("<== N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM(): GroupEncAlgorithm=0x%X\n", pSecInfo->GroupEncAlgorithm) ); - return NDIS_STATUS_SUCCESS; -} - -// -// Description: -// ADD, MODIFY, or DELETE an entry of -// default key (i.e. WEP Key, group key) or -// per-station default key (i.e. IBSS RSNA per-station group key). -// -NDIS_STATUS -N6CSet_DOT11_CIPHER_DEFAULT_KEY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - PDOT11_CIPHER_DEFAULT_KEY_VALUE pDefaultKey = (PDOT11_CIPHER_DEFAULT_KEY_VALUE)InformationBuffer; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte KeyIndex = 0; - u1Byte MacAddress[ETHERNET_ADDRESS_LENGTH] = {0x00,0x00,0x00,0x00,0x00,0x00}; - RT_ENC_ALG rtEncAlgo = RT_ENC_ALG_NO_CIPHER; - pu1Byte pKeyMaterial = NULL; - u4Byte KeyLen = 0; - u8Byte KeyRSC = 0; - BOOLEAN bValidKeyRSC = FALSE; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("==> N6CSet_DOT11_CIPHER_DEFAULT_KEY()\n") ); - - if(WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - return NDIS_STATUS_SUCCESS; - - // - // Check if InformationBuffer contains a valid DOT11_CIPHER_DEFAULT_KEY_VALUE object. - // - *BytesNeeded = FIELD_OFFSET(DOT11_CIPHER_DEFAULT_KEY_VALUE, ucKey); - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_DEFAULT_KEY(), NDIS_STATUS_INVALID_LENGTH: %d\n", InformationBufferLength) ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pDefaultKey->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CIPHER_DEFAULT_KEY_VALUE_REVISION_1, - sizeof(DOT11_CIPHER_DEFAULT_KEY_VALUE)) ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_DEFAULT_KEY(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_CIPHER_DEFAULT_KEY_VALUE, ucKey) + - pDefaultKey->usKeyLength; - if (InformationBufferLength < *BytesNeeded) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_DEFAULT_KEY(), NDIS_STATUS_BUFFER_OVERFLOW: %d, BytesNeeded: %d\n", InformationBufferLength, *BytesNeeded) ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // For debug purpose. Annie, 2006-10-19. - // - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("====================================\n") ); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, "DOT11_CIPHER_DEFAULT_KEY_VALUE\n", pDefaultKey, InformationBufferLength ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("-------------------------------------\n") ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("uKeyIndex=0x%X\n", pDefaultKey->uKeyIndex) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("AlgorithmId=0x%X\n", pDefaultKey->AlgorithmId) ); - RT_PRINT_ADDR( COMP_OID_SET, DBG_LOUD, "MacAddr", pDefaultKey->MacAddr ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("bDelete=0x%X\n", pDefaultKey->bDelete ) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("bStatic=0x%X\n", pDefaultKey->bStatic ) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("usKeyLength=0x%X\n", pDefaultKey->usKeyLength ) ); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, "ucKey\n", pDefaultKey->ucKey, pDefaultKey->usKeyLength); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("====================================\n") ); - - // - // Collect information in pDefaultKey and those embedded in pDefaultKey->ucKey. - // - - KeyIndex = pDefaultKey->uKeyIndex; - - if( pMgntInfo->OpMode == RT_OP_MODE_IBSS && pSecInfo->SecLvl == RT_SEC_LVL_WPA2 && - !eqMacAddr(pDefaultKey->MacAddr, MacAddress) && !MacAddr_isMulticast(pDefaultKey->MacAddr) ) - { - // - // 061028, rcnjko: - // WDK said: - // - We shall don't care MacAddr in infrastructure mode. - // - In an IBSS with RSNA AES-CCMP, we use TA and index to search the key - // to decrypt mcst/bcst frame received. - // - // So, a unicast MacAddr is used to search per-station default keys in - // RSNA IBSS case and can be ignore in other cases. - // - cpMacAddr(MacAddress, pDefaultKey->MacAddr); - } - - if(pDefaultKey->bDelete) - { // Remove a key - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): delete Key\n")); - - // - // 061028, rcnjko: WDK said we shall ignore AlgorithmId if bDelete is set, - // so we use GroupEncAlgorithm instead. - // - rtEncAlgo = pSecInfo->GroupEncAlgorithm; - - rtEncAlgo = pSecInfo->GroupEncAlgorithm; - if( KeyIndex > 3 && KeyIndex < 6 ) - { // 802.11w BIP key Key index 5 or 6 - - PlatformZeroMemory(pSecInfo->BIPKeyBuffer, MAX_KEY_LEN); - } - else if( !pMgntInfo->bRSNAPSKMode) - { - MgntActSet_802_11_REMOVE_KEY( - Adapter, - rtEncAlgo, - KeyIndex, - MacAddress, - TRUE); // IsGroup. - } - else - { - if(!MgntActSet_RSNA_REMOVE_DEAULT_KEY( - Adapter, - KeyIndex, - MacAddress)) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_DEFAULT_KEY(), MgntActSet_RSNA_REMOVE_DEAULT_KEY return FALSE !!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - } - - } - else - { // Add or Modify a key. - - switch(pDefaultKey->AlgorithmId) - { - case DOT11_CIPHER_ALGO_WEP: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): Set a WEP Key\n")); - rtEncAlgo = N6CDot11ToEncAlgorithm(pDefaultKey->AlgorithmId, pDefaultKey->usKeyLength); - pKeyMaterial = pDefaultKey->ucKey; - KeyLen = pDefaultKey->usKeyLength; - switch(rtEncAlgo) - { - case RT_ENC_ALG_WEP40: - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP64; - pNdisCommon->RegEncAlgorithm = REG_WEP_STATUS_WEP64; - pNdisCommon->RegPairwiseAlg = DOT11_CIPHER_ALGO_WEP40; - pNdisCommon->RegRSNAKeyID = KeyIndex; - // Save for Reconnent for Ad-hot ,by CCW - PlatformMoveMemory(pNdisCommon->RegDefaultKeyBuf[KeyIndex], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKey[KeyIndex].Length = (u2Byte)KeyLen; - break; - case RT_ENC_ALG_WEP104: - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP128; - pNdisCommon->RegEncAlgorithm = REG_WEP_STATUS_WEP128; - pNdisCommon->RegPairwiseAlg = DOT11_CIPHER_ALGO_WEP104; - pNdisCommon->RegRSNAKeyID = KeyIndex; - // Save for Reconnent for Ad-hot ,by CCW - PlatformMoveMemory( pNdisCommon->RegDefaultKeyWBuf[KeyIndex], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKeyW[KeyIndex].Length = (u2Byte)KeyLen; - break; - default: - break; - } - } - break; - - case DOT11_CIPHER_ALGO_WEP40: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): Set a WEP40 Key\n")); - rtEncAlgo = RT_ENC_ALG_WEP40; - pKeyMaterial = pDefaultKey->ucKey; - KeyLen = pDefaultKey->usKeyLength; - // Save for Reconnent for Ad-hot ,by CCW - PlatformMoveMemory(pNdisCommon->RegDefaultKeyBuf[KeyIndex], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKey[KeyIndex].Length = (u2Byte)KeyLen; - } - break; - - case DOT11_CIPHER_ALGO_WEP104: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): Set a WEP104 Key\n")); - rtEncAlgo = RT_ENC_ALG_WEP104; - pKeyMaterial = pDefaultKey->ucKey; - KeyLen = pDefaultKey->usKeyLength; - // Save for Reconnent for Ad-hot ,by CCW - PlatformMoveMemory( pNdisCommon->RegDefaultKeyWBuf[KeyIndex], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKeyW[KeyIndex].Length = (u2Byte)KeyLen; - } - break; - - case DOT11_CIPHER_ALGO_TKIP: - { - PDOT11_KEY_ALGO_TKIP_MIC pTkipMicKey = (PDOT11_KEY_ALGO_TKIP_MIC)pDefaultKey->ucKey; - //pNdisCommon->RegPairwiseAlg = DOT11_CIPHER_ALGO_TKIP; - pNdisCommon->RegRSNAKeyID = KeyIndex; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): Set a TKIP Key\n")); - rtEncAlgo = RT_ENC_ALG_TKIP; - pKeyMaterial = pTkipMicKey->ucTKIPMICKeys; // Tkip Enc Key(16) + STA Rx MIC Key(8) + STA Tx MIC Key(8). - KeyLen = pTkipMicKey->ulTKIPKeyLength + pTkipMicKey->ulMICKeyLength; - PlatformMoveMemory(&KeyRSC, pTkipMicKey->ucIV48Counter, 6); - bValidKeyRSC = TRUE; - } - break; - - case DOT11_CIPHER_ALGO_CCMP: - { - PDOT11_KEY_ALGO_CCMP pCcmpKey = (PDOT11_KEY_ALGO_CCMP)pDefaultKey->ucKey; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): Set an AES-CCMP Key\n")); - rtEncAlgo = RT_ENC_ALG_AESCCMP; - pKeyMaterial = pCcmpKey->ucCCMPKey; - KeyLen = pCcmpKey->ulCCMPKeyLength; - PlatformMoveMemory(&KeyRSC, pCcmpKey->ucIV48Counter, 6); - bValidKeyRSC = TRUE; - if( MacAddress[0] == 0 && MacAddress[1] == 0 && - MacAddress[2] == 0 && MacAddress[3] == 0 && - MacAddress[4] == 0 && MacAddress[5] == 0 && - pMgntInfo->bRSNAPSKMode - ) - { - pNdisCommon->RegRSNADefaultkey.Octet = pNdisCommon->RegRSNADefaultkeybuf; - PlatformMoveMemory(pNdisCommon->RegRSNADefaultkeybuf, pKeyMaterial, KeyLen); - pNdisCommon->RegRSNADefaultkey.Length = (u2Byte)KeyLen; - pNdisCommon->RegRSNAKeyID = KeyIndex; - } - - } - break; - - case DOT11_CIPHER_ALGO_BIP : - { - PDOT11_KEY_ALGO_BIP pBIPkey = (PDOT11_KEY_ALGO_BIP)pDefaultKey->ucKey; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY(): Set an BIP Key\n")); - - // NOTE: Only for Build Pass - - PlatformMoveMemory( pSecInfo->IPN ,pBIPkey->ucIPN, 6 ); - - if( pBIPkey->ulBIPKeyLength == 16 ) - { - PlatformMoveMemory( pSecInfo->BIPKeyBuffer ,pBIPkey->ucBIPKey, 16 ); - return NDIS_STATUS_SUCCESS; - } - else - { - return NDIS_STATUS_INVALID_DATA; - } - - break; - } - - default: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_CIPHER_DEFAULT_KEY: Warning, Set key of unknown algorithm: %#X\n", pDefaultKey->AlgorithmId)); - return NDIS_STATUS_INVALID_DATA; - break; - } - if( ACTING_AS_AP(Adapter)) - { - PAUTH_GLOBAL_KEY_TAG pGlInfo = &(pMgntInfo->globalKeyInfo); - u1Byte CAM_CONST_BROAD[6] = {0xff ,0xff ,0xff ,0xff ,0xff ,0xff }; - - if( MacAddress[0] == 0 && MacAddress[1] == 0 && - MacAddress[2] == 0 && MacAddress[3] == 0 && - MacAddress[4] == 0 && MacAddress[5] == 0 ) - { - PlatformZeroMemory(pMgntInfo->globalKeyInfo.GTK , GTK_LEN ); - PlatformMoveMemory(pMgntInfo->globalKeyInfo.GTK , pKeyMaterial , KeyLen ); - - if( pDefaultKey->AlgorithmId == DOT11_CIPHER_ALGO_TKIP ) - { - pGlInfo->TxMICKey = pGlInfo->GTK + GTK_MIC_TX_POS; - pGlInfo->RxMICKey = pGlInfo->GTK + GTK_MIC_RX_POS; - pMgntInfo->SecurityInfo.GroupTransmitKeyIdx = (u1Byte)KeyIndex; - // Set For Hw encrypt !! - /* - AP_Setkey( Adapter , - CAM_CONST_BROAD, - 1, // Index entry - CAM_TKIP, - 1, // Set Group Key - pGlInfo->GTK); - */ - } - else if( pDefaultKey->AlgorithmId == DOT11_CIPHER_ALGO_CCMP ) - { - AESCCMP_BLOCK blockKey; - - PlatformMoveMemory( blockKey.x , pGlInfo->GTK , 16); - pMgntInfo->SecurityInfo.GroupTransmitKeyIdx = (u1Byte)KeyIndex; - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pGlInfo->AESGTK); - // Set For Hw encrypt !! - /* - AP_Setkey( Adapter , - CAM_CONST_BROAD, - 1, // Index entry - CAM_AES, - 1, // Set Group Key - pGlInfo->GTK); - */ - } - - } - } - else if( !pMgntInfo->bRSNAPSKMode ) - { - - pSecInfo->GroupTransmitKeyIdx = (u1Byte)KeyIndex; //by tynli. Suggested by CCW. - - RT_TRACE( COMP_SEC ,DBG_LOUD,( "====> pSecInfo->GroupTransmitKeyIdx = %d\n ",KeyIndex)); - MgntActSet_802_11_ADD_KEY( - Adapter, - rtEncAlgo, - ( KeyIndex | ((bValidKeyRSC) ? ADD_KEY_IDX_RSC: 0) ), - KeyLen, - pKeyMaterial, - MacAddress, // Only be a valid unicast address in RSNA IBSS case. - FALSE, // IsGroupTransmitKey, since DefaultTransmitKeyIdx and GroupTransmitKeyIdx is determined by OID_DOT11_CIPHER_DEFAULT_KEY_ID, we just set it to FALSE. - TRUE, // IsGroup. - KeyRSC); - - PlatformRequestPreAuthentication( Adapter, PRE_AUTH_INDICATION_REASON_ASSOCIATION ); - } - else{ - //vivi added for new cam search flow, 20091028 - //vivi redefine this function to add the parameter rtEncAlgo and Isgroup - if( !MgntActSet_RSNA_ADD_DEAULT_KEY( - Adapter, - rtEncAlgo, - KeyIndex, - KeyLen, - pKeyMaterial, - MacAddress) ) - { // Return NDIS_STATUS_RESOURCES because out of free entry. - - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_DEFAULT_KEY(), MgntActSet_RSNA_ADD_DEAULT_KEY return FALSE !!!\n")); - return NDIS_STATUS_RESOURCES; - } - } - - } - - *BytesRead = *BytesNeeded; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("<== N6CSet_DOT11_CIPHER_DEFAULT_KEY()\n") ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Description: -// ADD, MODIFY, or DELETE ONE or MORE entries in key-mapping key table. -// -NDIS_STATUS -N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - PDOT11_BYTE_ARRAY pByteArray = (PDOT11_BYTE_ARRAY)InformationBuffer; - PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE pKeyMappingKey = NULL; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - u1Byte MacAddress[ETHERNET_ADDRESS_LENGTH] = {0x00,0x00,0x00,0x00,0x00,0x00}; - RT_ENC_ALG rtEncAlgo = RT_ENC_ALG_NO_CIPHER; - pu1Byte pKeyMaterial = NULL; - u4Byte KeyLen = 0; - u8Byte KeyRSC = 0; - BOOLEAN bValidKeyRSC = FALSE; - - u4Byte i = 0; - u4Byte nBytesParsed = 0; - BOOLEAN bInvalidKey = FALSE; - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("==> N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY()\n") ); - - // - // Check if InformationBuffer contains a valid DOT11_BYTE_ARRAY object. - // - *BytesNeeded = sizeof(DOT11_BYTE_ARRAY); - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(), NDIS_STATUS_INVALID_LENGTH: %d\n", InformationBufferLength) ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pByteArray->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CIPHER_KEY_MAPPING_KEY_VALUE_BYTE_ARRAY_REVISION_1, - sizeof(DOT11_BYTE_ARRAY)) ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer) + - pByteArray->uNumOfBytes; - if (InformationBufferLength < *BytesNeeded) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(), NDIS_STATUS_BUFFER_OVERFLOW: %d, BytesNeeded: %d\n", InformationBufferLength, *BytesNeeded) ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // Enumerate each entry in ucBuffer array. - // - for(i = 0; nBytesParsed < pByteArray->uNumOfBytes; i++) - { - pKeyMappingKey = (PDOT11_CIPHER_KEY_MAPPING_KEY_VALUE)(pByteArray->ucBuffer + nBytesParsed); - nBytesParsed += (FIELD_OFFSET(DOT11_CIPHER_KEY_MAPPING_KEY_VALUE, ucKey) + pKeyMappingKey->usKeyLength); - bInvalidKey = FALSE; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("====================================\n") ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("DOT11_CIPHER_KEY_MAPPING_KEY: %d\n", i) ); - RT_PRINT_ADDR( COMP_OID_SET, DBG_LOUD, "PeerMacAddr", pKeyMappingKey->PeerMacAddr ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("AlgorithmId=0x%X\n", pKeyMappingKey->AlgorithmId) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Direction=0x%X\n", pKeyMappingKey->Direction) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("bDelete=0x%X\n", pKeyMappingKey->bDelete ) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("bStatic=0x%X\n", pKeyMappingKey->bStatic ) ); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("usKeyLength=0x%X\n", pKeyMappingKey->usKeyLength ) ); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, "ucKey", pKeyMappingKey->ucKey, pKeyMappingKey->usKeyLength); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("====================================\n") ); - - - RT_TRACE(COMP_CCX, DBG_LOUD, ("====================================\n") ); - RT_TRACE( COMP_CCX, DBG_LOUD, ("DOT11_CIPHER_KEY_MAPPING_KEY: %d\n", i) ); - RT_PRINT_ADDR(COMP_CCX, DBG_LOUD, "PeerMacAddr", pKeyMappingKey->PeerMacAddr ); - RT_TRACE( COMP_CCX, DBG_LOUD, ("AlgorithmId=0x%X\n", pKeyMappingKey->AlgorithmId) ); - RT_TRACE( COMP_CCX, DBG_LOUD, ("Direction=0x%X\n", pKeyMappingKey->Direction) ); - RT_TRACE( COMP_CCX, DBG_LOUD, ("bDelete=0x%X\n", pKeyMappingKey->bDelete ) ); - RT_TRACE( COMP_CCX, DBG_LOUD, ("bStatic=0x%X\n", pKeyMappingKey->bStatic ) ); - RT_TRACE( COMP_CCX, DBG_LOUD, ("usKeyLength=0x%X\n", pKeyMappingKey->usKeyLength ) ); - RT_PRINT_DATA( COMP_CCX, DBG_LOUD, "ucKey", pKeyMappingKey->ucKey, pKeyMappingKey->usKeyLength); - RT_TRACE( COMP_CCX, DBG_LOUD, ("====================================\n") ); - - cpMacAddr(MacAddress, pKeyMappingKey->PeerMacAddr); - - switch(pKeyMappingKey->AlgorithmId) - { - case DOT11_CIPHER_ALGO_WEP: - { - rtEncAlgo = N6CDot11ToEncAlgorithm(pKeyMappingKey->AlgorithmId, pKeyMappingKey->usKeyLength); - pKeyMaterial = pKeyMappingKey->ucKey; - KeyLen = pKeyMappingKey->usKeyLength; - } - break; - - case DOT11_CIPHER_ALGO_WEP40: - { - rtEncAlgo = RT_ENC_ALG_WEP40; - pKeyMaterial = pKeyMappingKey->ucKey; - KeyLen = pKeyMappingKey->usKeyLength; - } - break; - - case DOT11_CIPHER_ALGO_WEP104: - { - rtEncAlgo = RT_ENC_ALG_WEP104; - pKeyMaterial = pKeyMappingKey->ucKey; - KeyLen = pKeyMappingKey->usKeyLength; - } - break; - - case DOT11_CIPHER_ALGO_TKIP: - { - PDOT11_KEY_ALGO_TKIP_MIC pTkipMicKey = (PDOT11_KEY_ALGO_TKIP_MIC)pKeyMappingKey->ucKey; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(): %s TKIP Key\n", ((pKeyMappingKey->bDelete)? "Delete": "Set" ))); - rtEncAlgo = RT_ENC_ALG_TKIP; - pKeyMaterial = pTkipMicKey->ucTKIPMICKeys; // Tkip Enc Key(16) + STA Rx MIC Key(8) + STA Tx MIC Key(8). - KeyLen = pTkipMicKey->ulTKIPKeyLength + pTkipMicKey->ulMICKeyLength; - PlatformMoveMemory(&KeyRSC, pTkipMicKey->ucIV48Counter, 6); - bValidKeyRSC = TRUE; - } - break; - - case DOT11_CIPHER_ALGO_CCMP: - { - PDOT11_KEY_ALGO_CCMP pCcmpKey = (PDOT11_KEY_ALGO_CCMP)pKeyMappingKey->ucKey; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(): %s AES-CCMP Key\n", ((pKeyMappingKey->bDelete)? "Set" : "Delete"))); - rtEncAlgo = RT_ENC_ALG_AESCCMP; - pKeyMaterial = pCcmpKey->ucCCMPKey; - KeyLen = pCcmpKey->ulCCMPKeyLength; - PlatformMoveMemory(&KeyRSC, pCcmpKey->ucIV48Counter, 6); - bValidKeyRSC = TRUE; - } - break; - - case DOT11_CIPHER_ALGO_MFPTKIP : - { - PDOT11_KEY_ALGO_TKIP_MIC pTkipMicKey = (PDOT11_KEY_ALGO_TKIP_MIC)pKeyMappingKey->ucKey; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(): %s TKIP MFP Key\n", ((pKeyMappingKey->bDelete)? "Delete": "Set" ))); - rtEncAlgo = RT_ENC_ALG_TKIP; - pKeyMaterial = pTkipMicKey->ucTKIPMICKeys; // Tkip Enc Key(16) + STA Rx MIC Key(8) + STA Tx MIC Key(8). - KeyLen = pTkipMicKey->ulTKIPKeyLength + pTkipMicKey->ulMICKeyLength; - PlatformMoveMemory(&KeyRSC, pTkipMicKey->ucIV48Counter, 6); - bValidKeyRSC = TRUE; - - CCX_MFPModeChange(Adapter, TRUE); - - // Keep Key to Local buffer ... - if(KeyLen <= MAX_KEY_LEN) - { - } - } - break; - - case DOT11_CIPHER_ALGO_MFPCCMP : - { - PDOT11_KEY_ALGO_CCMP pCcmpKey = (PDOT11_KEY_ALGO_CCMP)pKeyMappingKey->ucKey; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(): %s AES-CCMP MFP Key\n", ((!pKeyMappingKey->bDelete)? "Set" : "Delete"))); - rtEncAlgo = RT_ENC_ALG_AESCCMP; - pKeyMaterial = pCcmpKey->ucCCMPKey; - KeyLen = pCcmpKey->ulCCMPKeyLength; - PlatformMoveMemory(&KeyRSC, pCcmpKey->ucIV48Counter, 6); - bValidKeyRSC = TRUE; - - CCX_MFPModeChange(Adapter, TRUE); - - // Keep Key to Local buffer ... - { - } - } - break; - - default: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY: Warning, %s key of invalid algorithm: %#X\n", ((pKeyMappingKey->bDelete)? "Set" : "Delete"), pKeyMappingKey->AlgorithmId)); - bInvalidKey = TRUE; - break; - } - - if(bInvalidKey) - { - continue; - } - - if(pKeyMappingKey->bDelete) - { // Remove a key - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(): delete Key\n")); - - if( MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP ) - { - RT_TRACE( COMP_MLME , DBG_LOUD , ("====> We had remove station on dissac !! \n") ); - } - else if( !pMgntInfo->bRSNAPSKMode ) - { - MgntActSet_802_11_REMOVE_KEY( - Adapter, - rtEncAlgo, - 0, // KeyIndex, - MacAddress, - FALSE); // IsGroup - } - else{ - if(!MgntActSet_RSNA_REMOVE_MAPPING_KEY( - Adapter, - MacAddress)) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY(), MgntActSet_RSNA_REMOVE_MAPPING_KEY return FALSE!!!\n") ); - return NDIS_STATUS_INVALID_DATA; - } - } - } - else - { // Add or Modify a key. - - if( ACTING_AS_AP(Adapter)) - { - PRT_WLAN_STA pEntry = AsocEntry_GetEntry(pMgntInfo , MacAddress ); - - if( pEntry == NULL ) - { - return NDIS_STATUS_INVALID_DATA; - } - else - { - u4Byte ucIndex = 0; - CopyMem(pEntry->perSTAKeyInfo.PTK, pKeyMaterial , KeyLen ); // Added by Annie, 2005-07-12. - if( pKeyMappingKey->AlgorithmId == DOT11_CIPHER_ALGO_TKIP ) - { - pEntry->perSTAKeyInfo.TempEncKey = pEntry->perSTAKeyInfo.PTK+TKIP_ENC_KEY_POS; - pEntry->perSTAKeyInfo.TxMICKey = pEntry->perSTAKeyInfo.PTK+(TKIP_MIC_KEY_POS); - pEntry->perSTAKeyInfo.RxMICKey = pEntry->perSTAKeyInfo.PTK+(TKIP_MIC_KEY_POS+TKIP_MIC_KEY_LEN); - - //Add for AP mode HW enc,by CCW - ucIndex = AP_FindFreeEntry(Adapter , pEntry->MacAddr); - if(ucIndex == Adapter->TotalCamEntry) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("[Warning]:N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY: Cam Entry is FULL!!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - - //set key - AP_Setkey( Adapter , - pEntry->perSTAKeyInfo.pWLanSTA->MacAddr, - ucIndex, // Entey index - CAM_TKIP, - 0, // Parise key - pEntry->perSTAKeyInfo.TempEncKey); - - pEntry->keyindex = ucIndex; - } - else if ( pKeyMappingKey->AlgorithmId == DOT11_CIPHER_ALGO_CCMP ) - { // AES mode AP-WPA AES,CCW - - AESCCMP_BLOCK blockKey; - PAUTH_PKEY_MGNT_TAG pKeyMgnt = &pEntry->perSTAKeyInfo; - RT_TRACE( COMP_SEC , DBG_LOUD, ("====>CCMP Set Station Key.\n")); - RT_PRINT_ADDR(COMP_SEC , DBG_LOUD, " ====> Peer Address : ", MacAddress ); - //Add for AP mode HW enc,by CCW - ucIndex = AP_FindFreeEntry(Adapter , pEntry->MacAddr); - if(ucIndex == Adapter->TotalCamEntry) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("[Warning]:N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY: Cam Entry is FULL!!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - - //Set Key - PlatformMoveMemory( blockKey.x , pEntry->perSTAKeyInfo.PTK , 16); - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE*8, (pu4Byte)pEntry->perSTAKeyInfo.AESKeyBuf); - //set hw key - AP_Setkey( Adapter , - pEntry->perSTAKeyInfo.pWLanSTA->MacAddr, - ucIndex, // Entey index - CAM_AES, - 0, // Parise key - pEntry->perSTAKeyInfo.PTK); - pEntry->keyindex = ucIndex; - } - - } - } - else if( !pMgntInfo->bRSNAPSKMode ){ - if( !(rtEncAlgo == RT_ENC_ALG_WEP40 || rtEncAlgo == RT_ENC_ALG_WEP104 ) ){ - MgntActSet_802_11_ADD_KEY( - Adapter, - rtEncAlgo, - (PAIRWISE_KEYIDX | ((bValidKeyRSC) ? ADD_KEY_IDX_RSC: 0) ), - KeyLen, - pKeyMaterial, - MacAddress, - FALSE, // IsGroupTransmitKey. - FALSE, // IsGroup. - KeyRSC); - } - else{ - for(i=0;i<4;i++){ - // Save for Reconnent for Ad-hot ,by CCW - PlatformMoveMemory( pNdisCommon->RegDefaultKeyBuf[i], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKey[i].Length = (u2Byte)KeyLen; - MgntActSet_802_11_ADD_KEY( - Adapter, - rtEncAlgo, - i, - KeyLen, - pKeyMaterial, - MacAddress, - FALSE, // IsGroupTransmitKey. - FALSE, // IsGroup. - KeyRSC); - } - } - PlatformRequestPreAuthentication( Adapter, PRE_AUTH_INDICATION_REASON_ASSOCIATION ); - - } - else{ -//vivi added for new cam search flow, 20091028......to find entry 4~31, for uni&broad&multicast - if(!MgntActSet_RSNA_ADD_MAPPING_KEY( - Adapter, - rtEncAlgo, - 0, //pairwised keyindex always be 0 - KeyLen, - pKeyMaterial, - MacAddress)) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY, MgntActSet_RSNA_ADD_MAPPING_KEY() return FALSE!!!\n") ); - return NDIS_STATUS_RESOURCES; - } - } - } - } - - *BytesRead = *BytesNeeded; - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("<== N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY()\n") ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Implementation of OID_DOT11_PMKID_LIST setting for NDIS6. -// Added by Annie, 2006-10-13. -// (reference MpSetPMKIDList() and Sta11SetPMKIDList() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_PMKID_LIST( - IN PADAPTER Adapter, - IN PDOT11_PMKID_LIST pPMKIDList, - IN ULONG InfoBufLength - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - ULONG BytesNeeded; - //ULONG index1, index2; - u4Byte ulIndex, i, j, count; - BOOLEAN blInserted; - PDOT11_PMKID_ENTRY pBssidInfo; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==> N6CSet_DOT11_PMKID_LIST()\n") ); - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pPMKIDList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PMKID_LIST_REVISION_1, - sizeof(DOT11_PMKID_LIST)) ) - { - return NDIS_STATUS_INVALID_DATA; - } - - // Must have atleast one entry in the list - if (pPMKIDList->uNumOfEntries < 1) - { - return NDIS_STATUS_INVALID_DATA; - } - - // Verify length/number of entries match up - BytesNeeded = pPMKIDList->uNumOfEntries * sizeof(DOT11_PMKID_ENTRY) + - FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs); - - if (InfoBufLength < BytesNeeded) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // If the list is too long or too short, simply return error. - // - if (pPMKIDList->uNumOfEntries > NUM_PMKID_CACHE || pPMKIDList->uNumOfEntries < 1) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - - // - // Copy the PMKID list. // TODO: Re-use SecSetPMKID(). - // - - - // 1. Clear the entry with different SSID from the AP we are associating with. - - for( ulIndex=0; ulIndexSsid.Octet, pSecInfo->PMKIDList[ulIndex].SsidBuf, pMgntInfo->Ssid.Length) || - (pMgntInfo->Ssid.Length != pSecInfo->PMKIDList[ulIndex].Ssid.Length) ) - { // SSID is not matched => Clear the entry! - pSecInfo->PMKIDList[ulIndex].bUsed = FALSE; - } - } - - - // 2. Insert or cover with new PMKID. - - pBssidInfo = pPMKIDList->PMKIDs; // pointer to the first DOT11_PMKID_ENTRY. - for( i=0; iuNumOfEntries; i++ ) - { - if( i >= NUM_PMKID_CACHE ) - { - RT_TRACE( COMP_SEC, DBG_WARNING, ("SecSetPMKID(): uNumOfEntries is more than NUM_PMKID_CACHE!%d\n", pPMKIDList->uNumOfEntries) ); - break; - } - - blInserted = FALSE; - for(j=0 ; jPMKIDList[j].bUsed && eqMacAddr(pSecInfo->PMKIDList[j].Bssid, pBssidInfo->BSSID) ) - { // BSSID is matched, the same AP => rewrite with new PMKID. - CopyMem(pSecInfo->PMKIDList[j].PMKID, pBssidInfo->PMKID, sizeof(pBssidInfo->PMKID)); - blInserted = TRUE; - break; - } - } - - if(!blInserted) - { - // Find a new entry - for( j=0 ; jPMKIDList[j].bUsed == FALSE) - { - pSecInfo->PMKIDList[j].bUsed = TRUE; - CopyMem(pSecInfo->PMKIDList[j].Bssid, pBssidInfo->BSSID, 6); - CopyMem(pSecInfo->PMKIDList[j].PMKID, pBssidInfo->PMKID, PMKID_LEN); - CopyMem(pSecInfo->PMKIDList[j].SsidBuf, pMgntInfo->SsidBuf, pMgntInfo->Ssid.Length); - pSecInfo->PMKIDList[j].Ssid.Length= pMgntInfo->Ssid.Length; - break; - } - } - } - - pBssidInfo ++; // pointer to next DOT11_PMKID_ENTRY. - } - - count = 0; - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed) - { - count ++; - - // For debug purpose: Check current PMKID list. - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("[PMKID %d]\n", ulIndex ) ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("SecSetPMKID(): PMKIDList[%d].bUsed is TRUE\n", ulIndex) ); - RT_PRINT_STR( COMP_SEC, DBG_LOUD, "SSID", pSecInfo->PMKIDList[ulIndex].Ssid.Octet, pSecInfo->PMKIDList[ulIndex].Ssid.Length); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "BSSID", pSecInfo->PMKIDList[ulIndex].Bssid, 6); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "PMKID", pSecInfo->PMKIDList[ulIndex].PMKID, sizeof(pBssidInfo->PMKID)); - } - } - pSecInfo->PMKIDCount = count; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<== N6CSet_DOT11_PMKID_LIST()\n") ); - return NDIS_STATUS_SUCCESS; -} - -// -// Implementation of OID_DOT11_CONNECT_REQUEST setting for NDIS6. -// Added by Annie, 2006-10-16. -// (reference MpConnectRequest(), Sta11ConnectInfra() and Sta11ConnectAdHoc() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_CONNECT_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_SSID_LIST pSsidList = &(pNdisCommon->dot11DesiredSSIDList); - PRT_WLAN_BSS pRtBss = NULL; - RT_JOIN_ACTION join_action; - RT_JOIN_NETWORKTYPE CurrBSSType; - OCTET_STRING ssid2match; - PRT_CHNL_LIST_ENTRY pChnlListEntry = NULL; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - u8Byte time_offset = 0; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==> N6CSet_DOT11_CONNECT_REQUEST()\n") ); - - if(!N6_INIT_READY(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, - ("N6CSet_DOT11_CONNECT_REQUEST() <===, return by N6_INIT_READY\n")); - return NDIS_STATUS_DOT11_MEDIA_IN_USE; - } - - if(RT_DRIVER_STOP(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Driver is going to stop \n")); - return NDIS_STATUS_FAILURE; - } - - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 1\n")); - return NDIS_STATUS_FAILURE; - } - - if(PlatformAllocateMemory(Adapter, (PVOID*)&pRtBss, sizeof(RT_WLAN_BSS)) != RT_STATUS_SUCCESS) - return NDIS_STATUS_FAILURE; - - ssid2match.Octet = pSsidList->SSIDs[0].ucSSID; - ssid2match.Length = (u2Byte)pSsidList->SSIDs[0].uSSIDLength; - - // - // 061207, rcnjko: We must keep current BSS type before leaving the BSS by - // MgntDisconnectAP or MgntDisconnectIBSS. - // - CurrBSSType = MgntActQuery_802_11_INFRASTRUCTURE_MODE(Adapter); - - - if( pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - if( pMgntInfo->mIbss ){ - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CONNECT_REQUEST() => MgntDisconnectIBSS\n") ); - MgntDisconnectIBSS( Adapter ); - } - - if( pMgntInfo->mAssoc) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CONNECT_REQUEST() => MgntDisconnectAP\n") ); - MgntDisconnectAP(Adapter, disas_lv_ss); - } - } - - if(MgntRoamingInProgress(pMgntInfo)) // Roaming. - { - if(MgntResetOrPnPInProgress(Adapter)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("reset in progress case 2\n")); - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - return NDIS_STATUS_FAILURE; - } - MgntRoamComplete(Adapter, MlmeStatus_invalid); - } - - if(MgntIsLinkInProgress(pMgntInfo) && !OS_SUPPORT_WDI(Adapter)) // connecting. - { - DrvIFIndicateConnectionStart(Adapter); - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - MgntResetLinkProcess(Adapter); - } - - if (CurrBSSType == RT_JOIN_NETWORKTYPE_ADHOC) - { - // Clear all rejected AP record, 2006.11.21, by shien chang. - MgntClearRejectedAsocAP(Adapter); - } - - // - // Find the Bss desc - // - RT_PRINT_STR( COMP_OID_SET|COMP_SEC, DBG_LOUD, "N6CSet_DOT11_CONNECT_REQUEST(): SSID", pSsidList->SSIDs[0].ucSSID, pSsidList->SSIDs[0].uSSIDLength); - - - MgntAddSsidsToScan(Adapter, ssid2match); - - PlatformZeroMemory(pRtBss, sizeof(RT_WLAN_BSS)); - join_action = SelectNetworkBySSID(Adapter, &ssid2match, FALSE, pRtBss); - pMgntInfo->RequestFromUplayer = TRUE; - pMgntInfo->bDisconnectRequest = FALSE; - Adapter->LastConnectStartIndicationTime = PlatformGetCurrentTime(); - - if(join_action == RT_NO_ACTION) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, - ("N6CSet_DOT11_CONNECT_REQUEST(): No BSS found, CurrBSSType: %d, #of_BSS = %d\n", - CurrBSSType, pMgntInfo->NumBssDesc4Query)); - - CopyMem(pMgntInfo->Ssid.Octet, pSsidList->SSIDs[0].ucSSID, pSsidList->SSIDs[0].uSSIDLength); - pMgntInfo->Ssid.Length =(u1Byte) pSsidList->SSIDs[0].uSSIDLength; - - pMgntInfo->bIbssStarter = FALSE; - pMgntInfo->bIndicateConnectEvent = TRUE; - -// pMgntInfo->RequestFromUplayer = TRUE; - - pMgntInfo->RoamingCount=0; - pMgntInfo->DisconnectCount=0; - - N6InitializeIndicateStateMachine(Adapter); - - MgntLinkRequest( - Adapter, - FALSE, //bScanOnly - TRUE, //bActiveScan, - FALSE, //FilterHiddenAP // Asked by Netgear's Lancelot for 8187 should look like their damn wg111v1, 2005.02.01, by rcnjko. - FALSE, // Update parameters - NULL, //ssid2scan - 0, //NetworkType, - 0, //ChannelNumber, - 0, //BcnPeriod, - 0, //DtimPeriod, - 0, //mCap, - NULL, //SuppRateSet, - NULL //yIbpm, - ); - } - else - { - if(join_action == RT_START_IBSS) - { - if ( (pNdisCommon->NumDot11DesiredBSSIDList == 0) || - N6Dot11AddrIsBcast( pNdisCommon->dot11DesiredBSSIDList[0] )) - { - pMgntInfo->bIbssStarter = FALSE; - } - else - { - pMgntInfo->bIbssStarter = TRUE; - CopyMem(pMgntInfo->Bssid, &(pNdisCommon->dot11DesiredBSSIDList[0]), sizeof(DOT11_MAC_ADDRESS)); - } - } - else if (join_action == RT_JOIN_IBSS) - { - // 2009/02/25 MH For Samsung workaround to record adhoc link status. - pHalData->SystemCurrTime = PlatformGetCurrentTime(); - time_offset = pHalData->SystemCurrTime - pHalData->SystemStartTime; - //DbgPrint("time_offset=%d\n", time_offset); - //if (time_offset >= 2000000) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_CONNECT_REQUEST\n") ); - pHalData->AdhocLinkState = TRUE; - PlatformScheduleWorkItem(&(pNdisCommon->SetAdhocLinkStateWorkItem)); - } - } - - CopyMem(pMgntInfo->Ssid.Octet, pSsidList->SSIDs[0].ucSSID, pSsidList->SSIDs[0].uSSIDLength); - pMgntInfo->Ssid.Length =(u1Byte) pSsidList->SSIDs[0].uSSIDLength; -// pMgntInfo->RequestFromUplayer = FALSE; - - //2004/08/23, kcwu, set the Privacy bit on in Capability field - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER) - pMgntInfo->mCap |= cPrivacy; - else - pMgntInfo->mCap &= ~cPrivacy; - - - // Initialize state machine for indication, 2006.11.30, by shien chang. - N6InitializeIndicateStateMachine(Adapter); - - pMgntInfo->JoinAction = join_action; - - CCX_SetAssocReason(Adapter, CCX_AR_FIRST_ASSOCIATION); - - JoinRequest( Adapter, join_action, pRtBss); - } - - PlatformFreeMemory(pRtBss, sizeof(RT_WLAN_BSS)); - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<== N6CSet_DOT11_CONNECT_REQUEST()\n") ); - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N6CSet_DOT11_DISCONNECT_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - NDIS_STATUS ndisStatus; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - u8Byte time_offset = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("N6CSet_DOT11_DISCONNECT_REQUEST()=====>\n")); - - // 2009/02/25 MH For Samsung workaround to record adhoc link status. - pHalData->SystemCurrTime = PlatformGetCurrentTime(); - pMgntInfo->RequestFromUplayer = FALSE; - time_offset = pHalData->SystemCurrTime - pHalData->SystemStartTime; - //DbgPrint("time_offset=%d\n", time_offset); - if (pMgntInfo->mIbss == TRUE/* && time_offset >= 2000000*/) - { - RT_TRACE(COMP_INIT,DBG_LOUD,("N6CSet_DOT11_DISCONNECT_REQUEST\n")); - pHalData->AdhocLinkState = FALSE; - PlatformScheduleWorkItem(&(pNdisCommon->SetAdhocLinkStateWorkItem)); - } - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - return NDIS_STATUS_SUCCESS; - } - - if(pMgntInfo->bReceiveSystemPSOID && GET_POWER_SAVE_CONTROL(pMgntInfo)->WoWLANS5Support) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Set OID_RT_DISCONNECT_REQUEST: pMgntInfo->bReceiveSystemPSOID = TRUE and return!!\n")); - return NDIS_STATUS_SUCCESS; - } - - if(MultiChannel_IsFCSInProgress(Adapter)) - { - MultiChannelDisconnectClient(Adapter, TRUE); - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("<=== Return N6CSet_DOT11_DISCONNECT_REQUEST since MCC\n")); - return NDIS_STATUS_SUCCESS; - } - - pMgntInfo->bDisconnectRequest = TRUE; - - ndisStatus = MgntActSet_802_11_DISASSOCIATE( Adapter, disas_lv_ss ); - -// if(ndisStatus == NDIS_STATUS_SUCCESS) -// pMgntInfo->bDisconnectRequest = TRUE; - - return ndisStatus; -} - -// -// Implementation of OID_DOT11_POWER_MGMT_REQUEST setting for NDIS6. -// Added by Annie, 2006-10-16. -// (reference MpSetPowerMgmtRequest() and Sta11SetPowerMgmtRequest() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_POWER_MGMT_REQUEST( - IN PADAPTER Adapter, - IN pu4Byte pPowerSaveLevel - ) -{ - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - pPSC->PowerSaveLevel = *pPowerSaveLevel; - - switch(pPSC->PowerSaveLevel) - { - case DOT11_POWER_SAVING_NO_POWER_SAVING: - pPSC->PowerSaveLevel = POWER_SAVING_NO_POWER_SAVING; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CSet_DOT11_POWER_MGMT_REQUEST(): DOT11_POWER_SAVING_NO_POWER_SAVING\n") ); - break; - case DOT11_POWER_SAVING_FAST_PSP: - pPSC->PowerSaveLevel = POWER_SAVING_FAST_PSP; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CSet_DOT11_POWER_MGMT_REQUEST(): DOT11_POWER_SAVING_FAST_PSP\n") ); - break; - case DOT11_POWER_SAVING_MAX_PSP: - pPSC->PowerSaveLevel = POWER_SAVING_MAX_PSP; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CSet_DOT11_POWER_MGMT_REQUEST():DOT11_POWER_SAVING_MAX_PSP\n") ); - break; - case DOT11_POWER_SAVING_MAXIMUM_LEVEL: - pPSC->PowerSaveLevel = POWER_SAVING_MAXIMUM_LEVEL; - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CSet_DOT11_POWER_MGMT_REQUEST(): DOT11_POWER_SAVING_MAXIMUM_LEVEL\n") ); - break; - default: - RT_TRACE( COMP_POWER, DBG_LOUD, ("N6CSet_DOT11_POWER_MGMT_REQUEST(): unkown\n")); - break; - } - - RT_TRACE( COMP_OID_SET, DBG_TRACE, ("N6CSet_DOT11_POWER_MGMT_REQUEST(): %d\n", pPSC->PowerSaveLevel) ); - return NDIS_STATUS_SUCCESS; -} - - -// -// Implementation of OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST setting for NDIS6. -// Added by Shien Chang, 2006-11-01. -// (reference MpSetExcludedMACAddressList() and Sta11SetExcludedMACAddressList() in MS's code) -// -NDIS_STATUS -N6CSet_DOT11_EXCLUDED_MAC_ADDRESS_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PDOT11_MAC_ADDRESS_LIST pMacAddrList = (PDOT11_MAC_ADDRESS_LIST)InformationBuffer; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - *BytesNeeded = sizeof(DOT11_MAC_ADDRESS_LIST); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if(!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pMacAddrList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_MAC_ADDRESS_LIST_REVISION_1, - sizeof(DOT11_MAC_ADDRESS_LIST))) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N6_VERIFY_OBJECT_HEADER_DEFAULT(): obj type: %u vs %u.\n", - pMacAddrList->Header.Type, NDIS_OBJECT_TYPE_DEFAULT)); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N6_VERIFY_OBJECT_HEADER_DEFAULT(): mac addr list rev: %u vs %u.\n", - pMacAddrList->Header.Revision, DOT11_MAC_ADDRESS_LIST_REVISION_1)); - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N6_VERIFY_OBJECT_HEADER_DEFAULT(): size: %u vs %u.\n", - pMacAddrList->Header.Size, sizeof(DOT11_MAC_ADDRESS_LIST))); - - return NDIS_STATUS_INVALID_DATA; - } - - if (pMacAddrList->uNumOfEntries == 0) - { - return NDIS_STATUS_SUCCESS; - } - - if (pMacAddrList->uNumOfEntries > NATIVE_802_11_MAX_EXCLUDED_MACADDR) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_MAC_ADDRESS_LIST, MacAddrs)+pMacAddrList->uNumOfEntries*6; - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if (! MgntActSet_ExcludedMacAddressList( - Adapter, - (pu1Byte)pMacAddrList->MacAddrs, - pMacAddrList->uNumOfEntries)) - { - return NDIS_STATUS_INVALID_DATA; - } - - // Get the Mac address in the excluded list and if the address of AP which - // we are currently connecting is in it, disconnect from the AP. - // - if ( pMgntInfo->mAssoc || pMgntInfo->mIbss ) - { - if ( MgntIsInExcludedMACList(Adapter, pMgntInfo->Bssid) ) - { - MgntActSet_802_11_DISASSOCIATE( Adapter, disas_lv_ss ); - } - } - - *BytesRead = *BytesNeeded; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_DESIRED_BSSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_BSSID_LIST pBssidList = (PDOT11_BSSID_LIST)InformationBuffer; - u4Byte i = 0; - - if(!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pBssidList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_BSSID_LIST_REVISION_1, - sizeof(DOT11_BSSID_LIST))) - { - return NDIS_STATUS_INVALID_DATA; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_BSSID_LIST, BSSIDs) + - pBssidList->uNumOfEntries*sizeof(DOT11_MAC_ADDRESS); - - // - // For Win7 DesiredBSSIDList_ext. - // - if (pBssidList->uNumOfEntries > 0) - { - // - // Ensure enough space for all the entries - // - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N6CSet_DOT11_DESIRED_BSSID_LIST(): InformationBufferLength (%u) < BytesNeeded (%u).\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - } - - if (pBssidList->uNumOfEntries > NATIVE_802_11_MAX_DESIRED_BSSID) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if ( InformationBufferLength < *BytesNeeded) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if (pBssidList->uNumOfEntries != 0) - { - // - //Add for DTM 1.0c test, sometimes DTM will set this wrong mac address - // - if(N6Dot11AddrIsfe(pBssidList->BSSIDs[0])) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_DESIRED_BSSID_LIST(): Mac add is FE:FF:FF:FF:FF:FF")); - } - else - { - PlatformMoveMemory( - pNdisCommon->dot11DesiredBSSIDList, - pBssidList->BSSIDs, - pBssidList->uNumOfEntries*sizeof(DOT11_MAC_ADDRESS)); - - for(; i < pBssidList->uNumOfEntries; i++) - { - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "N6CSet_DOT11_DESIRED_BSSID_LIST(): desired Bss BSSID:", pNdisCommon->dot11DesiredBSSIDList[i]); - } - } - } - else - { - PlatformZeroMemory( - pNdisCommon->dot11DesiredBSSIDList, - NATIVE_802_11_MAX_DESIRED_BSSID*sizeof(DOT11_MAC_ADDRESS)); - } - pNdisCommon->NumDot11DesiredBSSIDList = pBssidList->uNumOfEntries; - - *BytesRead = *BytesNeeded; - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_CURRENT_OPERATION_MODE( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte length = sizeof(DOT11_CURRENT_OPERATION_MODE); - - if ( InformationBufferLength < length ) - { - *BytesNeeded = length; - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformMoveMemory( - &(pNdisCommon->dot11CurrentOperationMode), - InformationBuffer, - length); - *BytesRead = length; - - if ( (pMgntInfo->bNetMonitorMode == FALSE) && - (pNdisCommon->dot11CurrentOperationMode.uCurrentOpMode == DOT11_OPERATION_MODE_NETWORK_MONITOR) ) - { - MgntEnableNetMonitorMode(Adapter, FALSE); - } - else if ( (pMgntInfo->bNetMonitorMode == TRUE) && - (pNdisCommon->dot11CurrentOperationMode.uCurrentOpMode != DOT11_OPERATION_MODE_NETWORK_MONITOR) ) - { - MgntDisableNetMonitorMode(Adapter, FALSE); - } - - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_DESIRED_BSS_TYPE( - IN PADAPTER Adapter, - IN PDOT11_BSS_TYPE pBssType - ) -{ - RT_JOIN_NETWORKTYPE networktype = RT_JOIN_NETWORKTYPE_AUTO; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - switch (*pBssType) - { - case dot11_BSS_type_infrastructure: - networktype = RT_JOIN_NETWORKTYPE_INFRA; - break; - case dot11_BSS_type_independent: - networktype = RT_JOIN_NETWORKTYPE_ADHOC; - break; - case dot11_BSS_type_any: - break; - } - pNdisCommon->RegNetworkType = networktype; - - MgntActSet_802_11_INFRASTRUCTURE_MODE( Adapter, networktype ); - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_PRIVACY_EXEMPTION_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_PRIVACY_EXEMPTION_LIST pExemptionList = - (PDOT11_PRIVACY_EXEMPTION_LIST)InformationBuffer; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - ("Set OID_DOT11_PRIVACY_EXEMPTION_LIST.\n")); - do - { - if (! N6_VERIFY_OBJECT_HEADER_DEFAULT( - pExemptionList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PRIVACY_EXEMPTION_LIST_REVISION_1, - sizeof(DOT11_PRIVACY_EXEMPTION_LIST)) ) - { - Status = NDIS_STATUS_INVALID_DATA; - break; - } - - *BytesNeeded = FIELD_OFFSET(DOT11_PRIVACY_EXEMPTION_LIST, PrivacyExemptionEntries); - - if ( InformationBufferLength < *BytesNeeded ) - { - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - if(pExemptionList->uNumOfEntries > NATIVE_802_11_MAX_PRIVACY_EXEMPTION) - { - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - *BytesNeeded += pExemptionList->uNumOfEntries * sizeof(DOT11_PRIVACY_EXEMPTION); - if ( InformationBufferLength < *BytesNeeded ) - { - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - pNdisCommon->PrivacyExemptionEntrieNum = pExemptionList->uNumOfEntries; - PlatformMoveMemory(pNdisCommon->PrivacyExemptionEntries, - pExemptionList->PrivacyExemptionEntries, - pExemptionList->uNumOfEntries * sizeof(DOT11_PRIVACY_EXEMPTION)); - - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, - "Privacy exempt list:", - pNdisCommon->PrivacyExemptionEntries, - (int)(pExemptionList->uNumOfEntries * sizeof(DOT11_PRIVACY_EXEMPTION))); - }while(FALSE); - - return Status; - -} - -NDIS_STATUS -N6CSet_DOT11_IBSS_PARAMS( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_IBSS_PARAMS pParams = (PDOT11_IBSS_PARAMS)InformationBuffer; - PRTL_DOT11_IBSS_PARAMS pdot11IbssParams = &pNdisCommon->dot11IbssParams; - - *BytesNeeded = sizeof(DOT11_IBSS_PARAMS); - if ( InformationBufferLength < *BytesNeeded) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT( - pParams->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_ALGORITHM_LIST_REVISION_1, - sizeof(DOT11_IBSS_PARAMS)) ) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_IBSS_PARAMS(), NDIS_STATUS_INVALID_DATA\n") ); - return NDIS_STATUS_INVALID_DATA; - } - - // - // Verify IE blob length - // - if ((pParams->uIEsOffset + pParams->uIEsLength) > InformationBufferLength) - { - *BytesNeeded = pParams->uIEsOffset + pParams->uIEsLength; - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_IBSS_PARAMS(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // Free the past IE buffer. - // - if(pdot11IbssParams->AdditionalIEData) - { - PlatformFreeMemory(pdot11IbssParams->AdditionalIEData, pdot11IbssParams->AdditionalIESize); - pdot11IbssParams->AdditionalIEData = NULL; - pdot11IbssParams->AdditionalIESize = 0; - } - - // - // Allocate IE buffer - // - if(pParams->uIEsLength > 0) - { - if(PlatformAllocateMemory(Adapter, &(pdot11IbssParams->AdditionalIEData),pParams->uIEsLength) - != RT_STATUS_SUCCESS) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [Error]N6CSet_DOT11_IBSS_PARAMS(), PlatformAllocateMemory Fail!\n") ); - return NDIS_STATUS_FAILURE; - } - - PlatformMoveMemory(pdot11IbssParams->AdditionalIEData, (PVOID)((pu1Byte)pParams + pParams->uIEsOffset), pParams->uIEsLength); - pdot11IbssParams->AdditionalIESize = pParams->uIEsLength; - } - - pdot11IbssParams->bDot11IbssJoinOnly = pParams->bJoinOnly; - - // - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_IBSS_PARAMS(): bJoinOnly = %d\n", pParams->bJoinOnly)); - - *BytesRead = pParams->uIEsLength + pParams->uIEsOffset; - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -ValidateScanRequest( - IN PADAPTER Adapter, - IN PDOT11_SCAN_REQUEST_V2 pScanRequest - ) -{ - ULONG i, BytesParsed = 0; - PDOT11_SSID pDot11SSID; - - if(!OS_SUPPORT_WDI(Adapter)) - { - // - - if (pScanRequest->uNumOfdot11SSIDs == 0) - { - return NDIS_STATUS_INVALID_DATA; - } - - if (pScanRequest->uNumOfdot11SSIDs > NATIVE_802_11_MAX_SCAN_SSID) - { - return NDIS_STATUS_INVALID_DATA; - } - - for (i=0; iuNumOfdot11SSIDs; i++) - { - pDot11SSID = (PDOT11_SSID) (pScanRequest->ucBuffer + pScanRequest->udot11SSIDsOffset + BytesParsed); - if (pDot11SSID->uSSIDLength > DOT11_SSID_MAX_LENGTH) - { - return NDIS_STATUS_INVALID_DATA; - } - BytesParsed += sizeof(DOT11_SSID); - } - } - - if (pScanRequest->dot11BSSType != dot11_BSS_type_infrastructure && - pScanRequest->dot11BSSType != dot11_BSS_type_independent && - pScanRequest->dot11BSSType != dot11_BSS_type_any) - { - return NDIS_STATUS_INVALID_DATA; - } - - switch (pScanRequest->dot11ScanType) - { - case dot11_scan_type_active: - case dot11_scan_type_active | dot11_scan_type_forced: - case dot11_scan_type_passive: - case dot11_scan_type_passive | dot11_scan_type_forced: - case dot11_scan_type_auto: - case dot11_scan_type_auto | dot11_scan_type_forced: - break; - - default: - return NDIS_STATUS_INVALID_DATA; - } - - return NDIS_STATUS_SUCCESS; -} - - - -NDIS_STATUS -N6CSet_DOT11_SCAN_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PDOT11_SCAN_REQUEST_V2 pScanRequest = (PDOT11_SCAN_REQUEST_V2)InformationBuffer; - NDIS_STATUS ndisStatus; - PADAPTER pGoAdapter = GetFirstGOPort(Adapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bActiveScan = TRUE; - PDOT11_SSID pDot11SSID; - u4Byte i; - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("=====>N6CSet_DOT11_SCAN_REQUEST()\n")); - *BytesNeeded = FIELD_OFFSET(DOT11_SCAN_REQUEST_V2, ucBuffer); - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by InformationBufferLength(%d) < BytesNeeded(%d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // If during auto link stage after wakeup, ignore the scan request. - // 2007.01.22, by shien chang. - // - if (pNdisCommon->bWakeupAutoLinkInProgressing) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by bWakeupAutoLinkInProgressing.\n")); - return NDIS_STATUS_SUCCESS; - } - - if(ACTING_AS_AP(Adapter)) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by ACTING_AS_AP.\n")); - return NDIS_STATUS_SUCCESS; - } - - if( // No need to scan for passing WHCK Test - MgntLinkStatusQuery(GetDefaultAdapter(Adapter)) == RT_MEDIA_CONNECT && - GetFirstGOPort(Adapter) != NULL - ) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by WHCK setting.\n")); - return NDIS_STATUS_SUCCESS; - } - - if(pMgntInfo->bDisableScanByOID) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by OID.\n")); - return NDIS_STATUS_SUCCESS; - } - - // No need to scan for passing WHCK Test - //by sherry 20130117 - if( (GetFirstGOPort(Adapter) != NULL) && - (MgntLinkStatusQuery(GetFirstGOPort(Adapter))) && - (GetDefaultAdapter(Adapter)->MgntInfo.bGoSkipScanForWFD == 1)) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN,DBG_LOUD,("N6CSet_DOT11_SCAN_REQUEST(): skip scan by WHCK setting\n")); - return NDIS_STATUS_SUCCESS; - } - - - if( (GetFirstClientPort(Adapter) != NULL) && - (MgntLinkStatusQuery(GetFirstClientPort(Adapter))) && - (GetDefaultAdapter(Adapter)->MgntInfo.bClientSkipScanForWFD == 1)) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN,DBG_LOUD,("N6CSet_DOT11_SCAN_REQUEST(): skip scan by client!!!!!!!!!!!!!! \n")); - return NDIS_STATUS_SUCCESS; - } -#if 0 //(WPS_SUPPORT == 1) - { - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - if (IsExtAPModeExist(Adapter) && pSimpleConfig->bEnabled) - { - RT_TRACE((COMP_OID_SET | COMP_AP), DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): AP in WPS mode! Do not scan!\n")); - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - return NDIS_STATUS_SUCCESS; - } - } -#endif - - if( (MgntLinkStatusQuery(GetDefaultAdapter(Adapter)) == RT_MEDIA_CONNECT) && - (MgntLinkStatusQuery(GetFirstClientPort(Adapter)) == RT_MEDIA_CONNECT || - MgntLinkStatusQuery(GetFirstGOPort(Adapter)) == RT_MEDIA_CONNECT) && - GetDefaultAdapter(Adapter)->bInWFDTest) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan when both port get connected\n")); - return NDIS_STATUS_SUCCESS; - } - - - if(pGoAdapter != NULL) - { - - PMGNT_INFO pGoMgntInfo = &(pGoAdapter->MgntInfo); - - if( (pGoMgntInfo->LinkDetectInfo.bClientAskForFCS == 1) && - (MgntLinkStatusQuery(GetDefaultAdapter(Adapter)) == RT_MEDIA_DISCONNECT) && - (MgntLinkStatusQuery(GetFirstGOPort(Adapter)) == RT_MEDIA_CONNECT) && - pGoMgntInfo->bWaitBeforeGoSkipScan != 0) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan when Client is asking for FCS\n")); - return NDIS_STATUS_SUCCESS; - } - - } - -#if (P2P_SUPPORT == 1) - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pLoopAdapter); - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(&pLoopAdapter->MgntInfo); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): role: %u, state: %u, wps: %u\n", pP2PInfo->Role, pP2PInfo->State, pSimpleConfig->bEnabled)); - if(P2P_ACTING_AS_GO(pP2PInfo) - && (P2P_STATE_OPERATING == pP2PInfo->State || P2P_STATE_PROVISIONING == pP2PInfo->State) - && pSimpleConfig->bEnabled - || P2P_STATE_PRE_PROVISIONING == pP2PInfo->State - ) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): skip scan for doing GO WPS\n")); - return NDIS_STATUS_SUCCESS; - } - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } -#endif - - ndisStatus = ValidateScanRequest(Adapter, pScanRequest); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("N6CSet_DOT11_SCAN_REQUEST(): return for ValidateScanRequest() return %#X\n", - ndisStatus)); - return ndisStatus; - } - - if( MgntScanInProgress(pMgntInfo) || MgntIsLinkInProgress(pMgntInfo)) - { - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by join %d or scan %d in prorgress !!!\n", MgntIsLinkInProgress(pMgntInfo), MgntScanInProgress(pMgntInfo))); - return NDIS_STATUS_SUCCESS; - } - - - // - //Add by maddest for stop sitesurvey when test chariot in ad-hoc mode - //We will block site survey when test chariot in ad-hoc mode, - //but we will not block site survey when site survey less than 40 second. - // - - if(pMgntInfo->bStopScan) - { - pMgntInfo->bFlushScanList = TRUE; - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - pMgntInfo->NumBssDesc = 0; - pMgntInfo->NumBssDesc4Query = 0; - - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("[REDX]: N6CSet_DOT11_SCAN_REQUEST(): clear NumBssDesc4Query!!!\n")); - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by pMgntInfo->bStopScan!!!\n")); - return NDIS_STATUS_SUCCESS; - } - - if( ((MgntLinkStatusIsWifiBusy(Adapter) || (NULL != GetFirstAPAdapter(Adapter)) || IsRTKP2PDeviceExisting(Adapter)) && - (Adapter->bInHctTest==FALSE) ) ) - { - u8Byte now_time; - u4Byte deltatime; - - now_time = PlatformGetCurrentTime(); - deltatime = (ULONG)( (now_time - Adapter->lastscantime) / 100000 ); // in 0.1 second. - Adapter->lastscantime = now_time; // in micro-second. - // To avoid "red X" issue when AP exist, we should consider "pMgntInfo->bFlushScanList". - if((deltatime > 400) && pMgntInfo->bFlushScanList != TRUE) - { - // - // Note: - // Re-mark "bFlushScanList" as false because we cheat the OS that we have scanned completely and re-copy the old - // scan list into the list for query. In other words, because we never scaned, to avoid the result of empty scan list - // in OID querying, the pMgntInfo->bssDesc4Query list should be cleared but we keep pMgntInfo->bssDesc to copy the - // scan list into pMgntInfo->bssDesc4Query if the following scan operation is not performed actually. - // By Bruce, 2009-02-25. - // - pMgntInfo->bFlushScanList = FALSE; - DrvIFIndicateScanStart(Adapter); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("N6CSet_DOT11_SCAN_REQUEST(): skip scan by busy traffic!!!\n")); - return NDIS_STATUS_SUCCESS; - } - } - - DrvIFIndicateScanStart(Adapter); - - Adapter->HalFunc.LedControlHandler(Adapter, LED_CTL_SITE_SURVEY); - - switch (pScanRequest->dot11ScanType) - { - case dot11_scan_type_active: - case dot11_scan_type_auto: - bActiveScan = TRUE; - break; - case dot11_scan_type_passive: - bActiveScan = FALSE; - break; - } - - // - // Save the SSID to scan. 2006.12.20, by shien chang. - // - if(!OS_SUPPORT_WDI(Adapter)) - { - MgntClearSsidsToScan(Adapter); - - pDot11SSID = (PDOT11_SSID)((pu1Byte)pScanRequest + - FIELD_OFFSET(DOT11_SCAN_REQUEST_V2, ucBuffer) + - pScanRequest->udot11SSIDsOffset); - - for (i=0; iuNumOfdot11SSIDs; i++) - { - if (pDot11SSID->uSSIDLength != 0) - { - OCTET_STRING tmpSsid; - - tmpSsid.Octet = pDot11SSID->ucSSID; - tmpSsid.Length = (u2Byte)pDot11SSID->uSSIDLength; - - MgntAddSsidsToScan(Adapter, tmpSsid); - } - - pDot11SSID ++; - } - - //merge from branch 1021 to pass WHCK Scan_AdditionalIE - MgntActSet_AdditionalProbeReqIE(Adapter, - (pu1Byte)((pu1Byte)pScanRequest->ucBuffer + pScanRequest->uIEsOffset), - pScanRequest->uIEsLength); - - } - - //merge from branch 1021 to pass WHCK Scan_AdditionalIE - MgntActSet_AdditionalProbeReqIE(Adapter, - (pu1Byte)((pu1Byte)pScanRequest->ucBuffer + pScanRequest->uIEsOffset), - pScanRequest->uIEsLength); - - { - if(!OS_SUPPORT_WDI(Adapter)) - { - if(RT_STATUS_SUCCESS != CustomScan_IssueSysScan(GET_CUSTOM_SCAN_INFO(Adapter), bActiveScan)) - { - RT_TRACE(COMP_SCAN, DBG_LOUD, ("N6CSet_DOT11_SCAN_REQUEST(): CustomScan_IssueSysScan FAIL!!!!!\n")); - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - } - } - } - -FunctionOut(COMP_SCAN); - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_CUSTOMIZED_SCAN_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PCUSTOMIZED_SCAN_REQUEST pScanRequest = (PCUSTOMIZED_SCAN_REQUEST)InformationBuffer; - - VOID *customScanInfo = GET_CUSTOM_SCAN_INFO(Adapter); - VOID *req = NULL; - FRAME_BUF *probeReqBuf = NULL; - - u4Byte itChnl = 0; - - if(InformationBufferLength == 1) - {// to cease current scan process - // do nothing - } - else if(InformationBufferLength == 0) - {// in this case, a default scan is performed - pScanRequest = NULL; - } - else - { - *BytesNeeded = FIELD_OFFSET(CUSTOMIZED_SCAN_REQUEST, ProbeReqBuf); - if ( InformationBufferLength < *BytesNeeded ) - {// we can't read to the ProbeReqLen field - RT_TRACE(COMP_MLME, DBG_LOUD, - ("N6CSet_DOT11_CUSTOMIZED_SCAN_REQUEST(): a: return for InformationBufferLength(%u) < BytesNeeded(%u)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - *BytesNeeded += pScanRequest->ProbeReqLen; - if(InformationBufferLength < *BytesNeeded) - {// we can't read all ProbeReq buffer - RT_TRACE(COMP_MLME, DBG_LOUD, - ("N6CSet_DOT11_CUSTOMIZED_SCAN_REQUEST(): b: return for InformationBufferLength(%u) < BytesNeeded(%u)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - } - - if(!pScanRequest) - { - MgntActSet_802_11_BSSID_LIST_SCAN(Adapter); - return NDIS_STATUS_SUCCESS; - } - - if(NULL == (req = CustomScan_AllocReq(customScanInfo, NULL, NULL))) - return NDIS_STATUS_RESOURCES; - - probeReqBuf = CustomScan_GetProbeReqBuf(req); - PlatformMoveMemory(FrameBuf_MHead(probeReqBuf), pScanRequest->ProbeReqBuf, pScanRequest->ProbeReqLen); - FrameBuf_Add(probeReqBuf, pScanRequest->ProbeReqLen); - - for(itChnl = 0; itChnl < pScanRequest->nChannels; itChnl++) - { - CustomScan_AddScanChnl(req, pScanRequest->Channels[itChnl], 1, - pScanRequest->ScanType, pScanRequest->Duration, - pScanRequest->DataRate, probeReqBuf); - } - - CustomScan_IssueReq(customScanInfo, req, CUSTOM_SCAN_SRC_TYPE_UNSPECIFIED, "custom scan oid"); - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_DESIRED_SSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PDOT11_SSID_LIST pSsidList = (PDOT11_SSID_LIST)InformationBuffer; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u4Byte i = 0; - - FunctionIn(COMP_OID_SET); - - do - - { - if(InformationBufferLength < (ULONG)FIELD_OFFSET(DOT11_SSID_LIST, uTotalNumOfEntries)) - { - *BytesNeeded = sizeof(DOT11_SSID_LIST); - *BytesRead = 0; - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - if((pSsidList->uNumOfEntries != 1) || - (pSsidList->uTotalNumOfEntries !=1)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("Set AP mode OID_DOT11_DESIRED_SSID_LIST: SsidList->uNumOfEntries = %u.\n", pSsidList->uNumOfEntries)); - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - break; - } - - if((pSsidList->SSIDs[0].uSSIDLength > 32) || - (pSsidList->SSIDs[0].uSSIDLength < 1)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N6CSet_DOT11_DESIRED_SSID_LIST(): SsidList->SSIDs[0].uSSIDLength = %u.\n", pSsidList->SSIDs[0].uSSIDLength)); - ndisStatus = NDIS_STATUS_INVALID_DATA; - break; - } - - PlatformMoveMemory( - &(pNdisCommon->dot11DesiredSSIDList), - pSsidList, - sizeof(DOT11_SSID_LIST)); - - PlatformMoveMemory( - &(pNdisCommon->dot11DesiredSSIDListCopy), - pSsidList, - sizeof(DOT11_SSID_LIST)); - - for(; i < pSsidList->uNumOfEntries; i++) - { - RT_PRINT_STR(COMP_SCAN, DBG_LOUD, "N6CSet_DOT11_DESIRED_SSID_LIST(): SSID:", pSsidList->SSIDs[0].ucSSID, pSsidList->SSIDs[i].uSSIDLength); - } - - pNdisCommon->dot11DesiredSSIDListIndex = 0; - - *BytesRead = sizeof(DOT11_SSID_LIST); - - } while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6CSet_DOT11_ATIM_WINDOW( - IN PADAPTER pAdapter, - IN PULONG pValue - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - // check if current state is allowed to change ATIM window. - - pMgntInfo->dot11AtimWindow = (u2Byte)(*pValue); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_ATIM_WINDOW(): %d\n", *pValue)); - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CSet_DOT11_NIC_POWER_STATE( - IN PADAPTER Adapter, - IN PNDIS_OID_REQUEST pNdisOidRequest, - IN BOOLEAN bValue - ) -{ - PADAPTER pAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> N6CSet_DOT11_NIC_POWER_STATE(): bValue %d\n", bValue)); - // We must update variables in SetRFPowerStateWorkItemCallback(), - // and RF change action would be rejected in MgntActSet_RF_State(). - // Isaiah 2007-12-21. - - // - // Synchronized access, 2006.11.07, by shien chang. - // Change RF power state. - // - // 061214, rcnjko: schedule a workitem to change RF power state. - // - if( bValue == TRUE ) - { - pNdisCommon->eRfPowerStateToSet = eRfOn; - pMgntInfo->RfRequestFromUplayer = FALSE; - } - else - { - pNdisCommon->eRfPowerStateToSet = eRfOff; - pMgntInfo->RfRequestFromUplayer = TRUE; - } - - // This OID might run in Passive with priority 0x9~0xA, - // and SetRFPowerStateWorkItem run in Pssive with priority 0xE. - // SetRFPowerStateWorkItem would end before return NDIS_STATUS_PENDING. - if(NDIS_CURRENT_IRQL() > PASSIVE_LEVEL) - { - PlatformScheduleWorkItem(&(pNdisCommon->SetRFPowerStateWorkItem)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== N6CSet_DOT11_NIC_POWER_STATE(): %d\n", bValue)); - return NDIS_STATUS_PENDING; - } - else - { - // - // Revise the following synchronization method to prevent race condition, i.e., use RT_PENDED_OID_SPINLOCK instead. - // Added by Roger, 2013.07.07. - // - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - if( pAdapter->pNdisCommon->PendedRequest != NULL ) - { - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - RT_ASSERT(pAdapter->pNdisCommon->PendedRequest == NULL, ("N6CSet_DOT11_NIC_POWER_STATE(): (%p)\n", pAdapter->pNdisCommon->PendedRequest)); - N6CompletePendedOID(pAdapter, RT_PENDED_OID_RF_STATE, NDIS_STATUS_FAILURE); - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - } - pNdisCommon->PendedRequest = NULL; - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - - SetRFPowerStateWorkItemCallback((PVOID)pAdapter); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== N6CSet_DOT11_NIC_POWER_STATE(): bValue %d\n", bValue)); - return NDIS_STATUS_SUCCESS; - } -} - - -NDIS_STATUS -N6CSet_DOT11_OPERATIONAL_RATE_SET( - IN PADAPTER pAdapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PDOT11_RATE_SET pDot11RateSet = NULL; - DWORD dwRequiredSize = 0; - OCTET_STRING osRateSet; - int DataRateIndex; - - do - { - *BytesRead = 0; - *BytesNeeded = 0; - - dwRequiredSize = FIELD_OFFSET(DOT11_RATE_SET, ucRateSet); - if (InformationBufferLength < dwRequiredSize) - { - *BytesNeeded = dwRequiredSize; - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - break; - } - - pDot11RateSet = InformationBuffer; - if (pDot11RateSet->uRateSetLength > DOT11_RATE_SET_MAX_LENGTH || - pDot11RateSet->uRateSetLength == 0) - { - *BytesNeeded = dwRequiredSize; - ndisStatus = NDIS_STATUS_INVALID_DATA; - break; - } - - dwRequiredSize += pDot11RateSet->uRateSetLength; - if (InformationBufferLength < dwRequiredSize) - { - *BytesNeeded = dwRequiredSize; - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - break; - } - *BytesRead = dwRequiredSize; - - FillOctetString(osRateSet, pDot11RateSet->ucRateSet, (u2Byte)(pDot11RateSet->uRateSetLength)); - - // - // Prevent support rate set from incorrect setting(zero data rate). - // Added by Roger, 2007.03.21. - // - for( DataRateIndex=0; DataRateIndexdot11CurrentWirelessMode) - { - case WIRELESS_MODE_A: - CopyMemOS(&osRateSet, pMgntInfo->RegSuppRateSets[0],pMgntInfo->RegSuppRateSets[0].Length); - break; - case WIRELESS_MODE_B: - CopyMemOS(&osRateSet, pMgntInfo->RegSuppRateSets[1],pMgntInfo->RegSuppRateSets[1].Length); - break; - case WIRELESS_MODE_G: - CopyMemOS(&osRateSet, pMgntInfo->RegSuppRateSets[2],pMgntInfo->RegSuppRateSets[2].Length); - break; - default: - break; - } - break; - } - } - - - } while(FALSE); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CSet_DOT11_OPERATIONAL_RATE_SET()\n")); - return ndisStatus; -} - -NDIS_STATUS -N6CSet_DOT11_DESIRED_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PDOT11_PHY_ID_LIST pPhyIdList = (PDOT11_PHY_ID_LIST)InformationBuffer; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN AnyPhyId = FALSE; - u1Byte index; - - *BytesRead = 0; - *BytesNeeded =0; - - if ( InformationBufferLength < sizeof(DOT11_PHY_ID_LIST) ) - { - *BytesNeeded = sizeof(DOT11_PHY_ID_LIST); - return NDIS_STATUS_INVALID_LENGTH; - } - - if (!N6_VERIFY_OBJECT_HEADER_DEFAULT(pPhyIdList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_ID_LIST_REVISION_1, - sizeof(DOT11_PHY_ID_LIST))) - { - return NDIS_STATUS_INVALID_DATA; - } - - if (pPhyIdList->uNumOfEntries < 1) - { - return NDIS_STATUS_INVALID_DATA; - } - - // Verify length/number of entries match up - *BytesNeeded = pPhyIdList->uNumOfEntries * sizeof(ULONG) + - FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId); - - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // If the list is too long or too short, simply return error. - // - if (pPhyIdList->uNumOfEntries > NATIVE_802_11_MAX_NUM_PHY_TYPES) - { - *BytesRead = FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId); - return NDIS_STATUS_INVALID_LENGTH; - } - - - *BytesRead = FIELD_OFFSET(DOT11_PHY_ID_LIST, dot11PhyId) + pPhyIdList->uNumOfEntries * sizeof(ULONG); - - // - // Make sure we support all the PHY IDs in the list. - // - for (index = 0; index < pPhyIdList->uNumOfEntries; index++) - { - if (pPhyIdList->dot11PhyId[index] == DOT11_PHY_ID_ANY) - { - if(pPhyIdList->uNumOfEntries > 1) - { - return NDIS_STATUS_INVALID_DATA; - } - - AnyPhyId = TRUE; - } - else if (pPhyIdList->dot11PhyId[index] >= pNdisCommon->pDot11SupportedPhyTypes->uTotalNumOfEntries) - { - return NDIS_STATUS_INVALID_DATA; - } - } - - - // - // Copy the desired PHY list. - // - if (AnyPhyId) - { - - pNdisCommon->staDesiredPhyCount = 1; - pNdisCommon->staDesiredPhyList[0] = DOT11_PHY_ID_ANY; - } - else - { - pNdisCommon->staDesiredPhyCount = pPhyIdList->uNumOfEntries; - NdisMoveMemory( pNdisCommon->staDesiredPhyList, - pPhyIdList->dot11PhyId, - pNdisCommon->staDesiredPhyCount * sizeof(ULONG)); - } - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6CQuerySet_DOT11_RESET_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_RESET_REQUEST pDot11ResetRequest = InformationBuffer; - PDOT11_STATUS_INDICATION pDot11StatusIndication = InformationBuffer; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - PRT_CHANNEL_INFO pChnlInfo; - - - // - // First make sure the input buffer is large enough to - // hold a RESET_CONFIRM - // - if ( OutputBufferLength < sizeof(DOT11_STATUS_INDICATION) ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OutputBufferLength too short\n")); - *BytesNeeded = sizeof(DOT11_STATUS_INDICATION); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - // Validate the buffer length - // - if ( InputBufferLength < sizeof(DOT11_RESET_REQUEST) ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("InputBufferLength too short\n")); - *BytesNeeded = sizeof(DOT11_RESET_REQUEST); - return NDIS_STATUS_INVALID_LENGTH; - } - - switch (pDot11ResetRequest->dot11ResetType) - { - case dot11_reset_type_phy: - case dot11_reset_type_mac: - case dot11_reset_type_phy_and_mac: - break; - default: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Unknown reset request.\n")); - return NDIS_STATUS_INVALID_DATA; - } - - - // - // When the reset operation is complete, the miniport driver must return a DOT11_STATUS_INDICATION - //structure to confirm the reset operation, so do NOT return ndisStatus immediately without status indication. - // 2014.05.02. - // - do{ - - // - // According to WDK, reset the multicast list when the reset layer is mac layer, by Bruce, 2008-06-25. - // - if((pDot11ResetRequest->dot11ResetType) >= dot11_reset_type_mac && - (pDot11ResetRequest->dot11ResetType) <= dot11_reset_type_phy_and_mac) - { - // Clear all multicast list. - Adapter->MCAddrCount = 0; - PlatformZeroMemory(Adapter->MCList, (MAX_MCAST_LIST_NUM * ETHERNET_ADDRESS_LENGTH)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CQuerySet_DOT11_RESET_REQUEST(): Reset Multicast List!\n")); - } - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CQuerySet_DOT11_RESET_REQUEST(): Fake AP mode, Skip Reset process!!\n")); - break; - } - - if(pMgntInfo->bReceiveSystemPSOID && GET_POWER_SAVE_CONTROL(pMgntInfo)->WoWLANS5Support) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CQuerySet_DOT11_RESET_REQUEST(): bReceiveSystemPSOID and WoWLANS5Support, Skip Reset process!!\n")); - break; - } - - pMgntInfo->bResetInProgress = TRUE; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("before reset State_AuthReqService %d port number %d\n", pMgntInfo->State_AuthReqService, Adapter->pNdis62Common->PortNumber)); - MgntResetJoinProcess(Adapter); - - if(MgntIsLinkInProgress(pMgntInfo) || MgntRoamingInProgress(pMgntInfo)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntIsLinkInProgress\n")); - - pMgntInfo->bJoinInProgress = FALSE; - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingStart(Adapter); - else - DrvIFIndicateConnectionStart(Adapter); - - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingComplete(Adapter, RT_STATUS_FAILURE); - else - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - } - - MgntResetRoamingState(pMgntInfo); - - // The SCAN_REQUEST work item may be canceled by RESET_REQUEST, that will cause 0xC4 BSOD - // We now first indicate the ScanComplete to prevent this issue. - if(pNdisCommon->bToIndicateScanComplete) - DrvIFIndicateScanComplete(Adapter, RT_STATUS_SUCCESS); - - // - if(FALSE == WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - { - if( pMgntInfo->mIbss ){ - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnectIBSS\n")); - - MgntDisconnectIBSS( Adapter ); - } - } - - if( pMgntInfo->mAssoc){ - RT_TRACE(COMP_MLME, DBG_LOUD, ("MgntDisconnectAP\n")); - - MgntDisconnectAP(Adapter, disas_lv_ss); - } - - //check if there's any other port doing scan - while(pLoopAdapter) - { - PMGNT_INFO pLoopMgntInfo = &pLoopAdapter->MgntInfo; - pChnlInfo = pLoopMgntInfo->pChannelInfo; - if(pChnlInfo->ChnlOp == CHNLOP_SCAN) - break; - else - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - - if(pLoopAdapter == NULL || Adapter == pLoopAdapter) - { - if(MgntScanInProgress(&(Adapter->MgntInfo))) - MgntResetScanProcess(Adapter); - else - { - // Prefast warning C28182: Dereferencing NULL pointer. - if (GetDefaultAdapter(Adapter) != NULL && - GetDefaultMgntInfo(Adapter) != NULL) - CustomScan_ResetReqNoScanCb(GET_CUSTOM_SCAN_INFO(Adapter)); - } - } - else - { - RT_TRACE(COMP_MLME,DBG_LOUD,("Other port number %d is scaning, abandon ResetScan\n", pLoopAdapter->pNdis62Common->PortNumber)); - } - - PlatformCancelTimer(Adapter, &(pMgntInfo->pChannelInfo->SwBwTimer)); - - if(IS_HARDWARE_TYPE_8821U(Adapter)) - { - pMgntInfo->LEDAssocState = LED_ASSOC_SECURITY_NONE; - } - - // - // For Win7 NDISTest. - // During the NIC reset issued from NDIS, the card must preserve the current setting of operation mode. - // Refer to OID_DOT11_CURRENT_OPERATION_MODE in DDK Document. - // 2008.08.08, haich. - // - //if(pDot11ResetRequest->bSetDefaultMIB) // This causes some problem (can's send packet, invalid state) - // and it's even not refered to in sample code. - { - DOT11_CURRENT_OPERATION_MODE dot11CurrentOperationMode; - - // backup - PlatformMoveMemory(&dot11CurrentOperationMode, - &pNdisCommon->dot11CurrentOperationMode, - sizeof(DOT11_CURRENT_OPERATION_MODE)); - - N6InitializeNative80211MIBs(Adapter); - - // restore - PlatformMoveMemory(&pNdisCommon->dot11CurrentOperationMode, - &dot11CurrentOperationMode, - sizeof(DOT11_CURRENT_OPERATION_MODE)); - } - - // - // DDK: The NIC shall clear privacy exemption list on every reset - // regardless of the rest requests parameters. - // 2008.10.17, haich - // - Adapter->pNdisCommon->PrivacyExemptionEntrieNum = 0; - - - // - // 061204, ccw: clear key content and reset key id. - // - if(FALSE == WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - { - SecClearAllKeys(Adapter); - SecInit(Adapter); - } - - // - // A very dirty fix for driver initialization issue only visible on HP compaq nx6325 which - // borrowed from Lancelot. - // When the issue occured, our wireless adapter is initialized successfully but AutoConfig - // doesn't recognize our adapter as wireless adapter. At the moment, we can't site - // survey or do any thing else, but the HW do normally works. - // To fix the issue, we put the following IO operation or delay 1sec. It may be a timing issue. - // 2007.02.02, by shien chang. - // - //Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - - // Reset network type. - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - - // Reset Bsssid. - PlatformZeroMemory(pMgntInfo->Bssid, sizeof(pMgntInfo->Bssid)); - - // 061206, rcnjko: reset managment related setting. - ResetMgntVariables(Adapter); - - if(!Adapter->bInHctTest) //workaround for Performance_ext - { - // cosa add for redX issue, if ssid not cleared, then in pnp wakeup we will indicate roam start - // and try to connect the ap with ssid matched, but OS don't think we should in roam state, - // so it will request wifi to do scan, the scan will be returned then OS later query scan list will be empty. => redX. - pMgntInfo->bScanOnly = TRUE; - //Set SSID as dummy to stop the current join process. - SET_SSID_DUMMY(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - } - ResetRxStatistics(Adapter); - ResetTxStatistics(Adapter); - Adapter->RxStats.QueryAfterFirstReset =1; - pMgntInfo->bResetInProgress = FALSE; - - }while(FALSE); - - // - // After reset completed, return the status indication. The miniport driver must not set the value - // of the BytesWritten member of the OidRequest parameter, such set operation has been removed by me, 2014.05.02. - // - PlatformZeroMemory(pDot11StatusIndication, sizeof(DOT11_STATUS_INDICATION)); - pDot11StatusIndication->uStatusType = DOT11_STATUS_RESET_CONFIRM; - pDot11StatusIndication->ndisStatus = ndisStatus; - *BytesRead = sizeof(DOT11_RESET_REQUEST); - *BytesWritten = sizeof(DOT11_STATUS_INDICATION); - - FunctionOut(COMP_MLME); - - return ndisStatus; -} - -NDIS_STATUS -N6CQuerySet_DOT11_ENUM_BSS_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_BYTE_ARRAY pByteArray = (PDOT11_BYTE_ARRAY)InformationBuffer; - RT_802_11_BSSID_LIST RtBssList; - PRT_WLAN_BSS pRtBss; - PDOT11_BSS_ENTRY pDot11BssEntry; - u4Byte i; - u4Byte BssEntryLength; - u4Byte RemainingBytes; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PDOT11_INFO_ELEMENT pDot11SsidElement; - - *BytesWritten = 0; - *BytesNeeded = 0; - - RT_TRACE(COMP_MLME, DBG_LOUD, - ("[REDX]: N6CQuerySet_DOT11_ENUM_BSS_LIST() ===> \n")); - - if ( OutputBufferLength < (ULONG)FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer) ) - { - *BytesNeeded = sizeof(DOT11_BYTE_ARRAY); - RT_TRACE(COMP_MLME, DBG_LOUD, - ("[REDX]: N6CQuerySet_DOT11_ENUM_BSS_LIST() <===, return by NDIS_STATUS_BUFFER_OVERFLOW \n")); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if(Adapter->bDriverIsGoingToUnload || Adapter->bSurpriseRemoved) - { - RT_TRACE(COMP_MLME, DBG_LOUD, - ("[REDX]: N6CQuerySet_DOT11_ENUM_BSS_LIST() <===, return by bDriverIsGoingToUnload=%d, bSurpriseRemoved=%d\n", - Adapter->bDriverIsGoingToUnload, Adapter->bSurpriseRemoved)); - return NDIS_STATUS_FAILURE; - } - - // Check if media is in use. 2006.11.21, by shien chang. - // Comment out by Bruce, 2009-03-16. - // We have protected the query list by RT_SCAN_SPIN_LOCK. Thus, the list shall be - // returned, otherwise the scan list prompted on vista UI would be empty. - // if ( pNdisCommon->bToIndicateScanComplete ) - // { - // return NDIS_STATUS_DOT11_MEDIA_IN_USE; - // } - - N6_ASSIGN_OBJECT_HEADER( - pByteArray->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_BSS_ENTRY_BYTE_ARRAY_REVISION_1, - sizeof(DOT11_BYTE_ARRAY)); - - if (pNdisCommon->KeepDisconnectFlag) - { - pByteArray->uNumOfBytes = 0; - pByteArray->uTotalNumOfBytes = 0; - *BytesWritten = FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer); - RT_TRACE(COMP_MLME, DBG_LOUD, - ("[REDX]: N6CQuerySet_DOT11_ENUM_BSS_LIST() <===, return by KeepDisconnectFlag\n")); - return NDIS_STATUS_SUCCESS; - } - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - pByteArray->uNumOfBytes = 0; - pByteArray->uTotalNumOfBytes = 0; - *BytesWritten = FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer); - RT_TRACE(COMP_MLME, DBG_LOUD, - ("[REDX]: N6CQuerySet_DOT11_ENUM_BSS_LIST() <===, return by RT_AP_TYPE_IBSS_EMULATED\n")); - return NDIS_STATUS_SUCCESS; - } - - // Get the list of BSS scanned. - RtBssList.NumberOfItems = 0; - RtBssList.pbssidentry = Adapter->bssDescList; - - - - MgntActQuery_802_11_BSSID_LIST(Adapter, &RtBssList, FALSE); - - pDot11BssEntry = (PDOT11_BSS_ENTRY)(pByteArray->ucBuffer); - pByteArray->uNumOfBytes = 0; - pByteArray->uTotalNumOfBytes = 0; - RemainingBytes = OutputBufferLength - FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer); - - for (i=0; iIE.Length - sizeof(RT_FIXED_IE_FIELD) + - FIELD_OFFSET(DOT11_BSS_ENTRY, ucBuffer); - -#if (WPS_SUPPORT == 1) - BssEntryLength += (pRtBss->osBeaconWcnIe.Length + pRtBss->osProbeRspWcnIe.Length); -#endif - - pDot11SsidElement = (PDOT11_INFO_ELEMENT)(pRtBss->IE.Octet +sizeof(RT_FIXED_IE_FIELD)); - - // 20090508 Joseph: Revise size checking. Prevent from error IE length. - if((pDot11SsidElement->ElementID != EID_SsId) || - ((pDot11SsidElement->Length+sizeof(DOT11_INFO_ELEMENT))>(pRtBss->IE.Length-sizeof(RT_FIXED_IE_FIELD)))) - continue; - - if ( ! BeHiddenSsid(pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen) && - BeHiddenSsid((pu1Byte)pDot11SsidElement+sizeof(DOT11_INFO_ELEMENT), pDot11SsidElement->Length) ) - { - BssEntryLength = (BssEntryLength - pDot11SsidElement->Length) + pRtBss->bdSsIdLen; - } - else - { - if(NeedRemoveWCNIE(Adapter, pRtBss)) - { -#if (WPS_SUPPORT == 1) - static u1Byte Simpleconf[]={0x00, 0x50, 0xF2, 0x04}; - RT_DOT11_IE Dot11Ie; - u4Byte nextOffset = sizeof(RT_FIXED_IE_FIELD); - u4Byte curOffset; - u4Byte skiplength = 0; - - while(HasNextIE(&pRtBss->IE, nextOffset)) - { - curOffset = nextOffset; - Dot11Ie = AdvanceToNextIE(&pRtBss->IE, &nextOffset); - if (Dot11Ie.Id == 0xDD) - { - if(PlatformCompareMemory(Dot11Ie.Content.Octet, Simpleconf, sizeof(Simpleconf)) == 0) - { - skiplength = Dot11Ie.Content.Length; - if(skiplength != 0) - { - RT_ASSERT(BssEntryLength >= (ULONG)(skiplength + 2), ("invalid length BssEntryLength %d skiplength %d", BssEntryLength, skiplength)); - BssEntryLength = BssEntryLength - skiplength - 2; - } - continue; - } - } - - } -#endif - } - } - - // - // 20090508 Joseph: Revise size checking. - // Since the type of variable "BssEntryLength" is "u4Byte", it is always ">=0". Also, according to the - // caculation of "BssEntryLength", it is always ">0". We do not need to check "if(BssEntryLength<=0)" case. - //if(BssEntryLength <= 0) - // continue; - - RT_PRINT_ADDR(COMP_SCAN, DBG_LOUD, "N6CQuerySet_DOT11_ENUM_BSS_LIST(): new Bss BSSID:", pRtBss->bdBssIdBuf); - RT_PRINT_STR(COMP_SCAN, DBG_LOUD, "N6CQuerySet_DOT11_ENUM_BSS_LIST(): new Bss SSID:", pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - - pByteArray->uTotalNumOfBytes += BssEntryLength; - if ((RemainingBytes >= BssEntryLength) && (RemainingBytes > 0)) - { - pByteArray->uNumOfBytes += BssEntryLength; - RemainingBytes -= BssEntryLength; - - // Copy the BSS Entry. - PlatformZeroMemory(pDot11BssEntry, BssEntryLength); - N6CTranslateRtBssToDot11Bss(Adapter, pDot11BssEntry, pRtBss); - - // - // Copy the hidden ssid - // - // 20090508 Joseph: Revise size checking. Move Hidden SSID IE handling to N6CTranslateRtBssToDot11Bss(). - // This makes sure that memory copy operation is not exceed the buffer provided by OS. - /* - if ( ! BeHiddenSsid(pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen) && - BeHiddenSsid((pu1Byte)pDot11SsidElement+sizeof(DOT11_INFO_ELEMENT), pDot11SsidElement->Length) ) - { - ndisStatus = FillHiddenSSIDinIE(Adapter, pDot11BssEntry, pRtBss); - } - */ - - pDot11BssEntry = (PDOT11_BSS_ENTRY)(((pu1Byte)pDot11BssEntry) + BssEntryLength); - } - else - { - RemainingBytes = 0; - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - } - - - } - - *BytesWritten = pByteArray->uNumOfBytes + FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer); - *BytesNeeded = pByteArray->uTotalNumOfBytes + FIELD_OFFSET(DOT11_BYTE_ARRAY, ucBuffer); - - RT_TRACE(COMP_MLME, DBG_LOUD, - ("[REDX]: N6CQuerySet_DOT11_ENUM_BSS_LIST() <===, ndisStatus=0x%x\n", ndisStatus)); - return ndisStatus; -} - -// -// Description: -// Set the access multicast address list of MAC. -// Arguments: -// Adapter - -// NIC adapter context. -// MCListbuf - -// Multicast address list. -// MCListlen -// The length of MCListbuf. -// bAcceptAllMulticast - -// Determine if the NIC accept all multicast packets. -// Note: -// This part does the same thing as MgntActSet_802_3_MULTICAST_LIST(). -// By Bruce, 2008-06-20. -// -NDIS_STATUS -N6CSet_DOT11_MULTICAST_LIST( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - - *BytesRead = 0; - *BytesNeeded = sizeof(DOT11_MAC_ADDRESS); - - if(InputBufferLength % sizeof(DOT11_MAC_ADDRESS)) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_MULTICAST_LIST(): not a multiple of sizeof(DOT11_MAC_ADDRESS)!\n")); - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - return ndisStatus; - } - - // - // Verify that we can hold the multicast list - // - if(InputBufferLength > (MAX_MCAST_LIST_NUM * sizeof(DOT11_MAC_ADDRESS))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_MULTICAST_LIST(): contains more entries than supported by this miniport!\n")); - ndisStatus = NDIS_STATUS_MULTICAST_FULL; - *BytesNeeded = MAX_MCAST_LIST_NUM * sizeof(DOT11_MAC_ADDRESS); - return ndisStatus; - } - - *BytesRead = InputBufferLength; - - MgntActSet_802_3_MULTICAST_LIST( - Adapter, - InformationBuffer, - InputBufferLength, - (BOOLEAN)(pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST)); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_NIC_POWER_STATE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest) -{ - // - // Power state OID is phy specific, not port specific. Miniport driver should ignore the port number - // on this OID and only use the current phy id. - // If miniport supports the functionality of multiple MAC entities through virtualization - // the property msDot11NICPowerState should apply to the same PHY on ALL such MAC entities. - // If the OS enables or disables a PHY through a set OID call on one of the MAC entities, - // the miniport should apply that on the same PHY on all virtualized MAC entities and send appropriate - // NDIS_STATUS_DOT11_PHY_STATE_CHANGED indications for all the MAC state entities (physical and virtual). - // - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - if(NdisRequest->RequestType == NdisRequestQueryInformation) // query default power state , this is the same as vista sta oid. - {// use default port to query - ULONG ulInfo = (ULONG)N6CQuery_DOT11_NIC_POWER_STATE(pDefaultAdapter); - PVOID pInfo = (PVOID) &ulInfo; - if(sizeof(BOOLEAN) <= NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength) - { - NdisMoveMemory(NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pInfo, sizeof(BOOLEAN)); - - NdisRequest->DATA.QUERY_INFORMATION.BytesWritten = sizeof(BOOLEAN); - ndisStatus = NDIS_STATUS_SUCCESS; - } - else - { - NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded = sizeof(BOOLEAN); - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - } - } - else if(NdisRequest->RequestType == NdisRequestSetInformation) // set default port power state - { - BOOLEAN bRfOn = *((PBOOLEAN)NdisRequest->DATA.SET_INFORMATION.InformationBuffer); - - NdisRequest->DATA.SET_INFORMATION.BytesNeeded = sizeof(BOOLEAN); - - if( NdisRequest->DATA.SET_INFORMATION.InformationBufferLength < NdisRequest->DATA.SET_INFORMATION.BytesNeeded) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OID_DOT11_NIC_POWER_STATE: bRFOn(%d)\n", bRfOn)); - - ndisStatus = N6CSet_DOT11_NIC_POWER_STATE( - pDefaultAdapter, - pDefaultAdapter->pNdisCommon->PendedRequest, - bRfOn - ); - } - } - - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_DESIRED_PHY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - ndisStatus = N6CSet_DOT11_DESIRED_PHY_LIST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_AUTO_CONFIG_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u4Byte tempAutoConfigEnable = 0; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - *BytesNeeded = sizeof(ULONG); - - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set AP mode OID_DOT11_AUTO_CONFIG_ENABLED: Invalid length\n")); - return NDIS_STATUS_INVALID_LENGTH; - } - - tempAutoConfigEnable=ALLOWED_AUTO_CONFIG_FLAGS & *((PULONG)InformationBuffer); - pTargetAdapter->pNdisCommon->dot11AutoConfigEnabled = tempAutoConfigEnable; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<===Set AP mode OID_DOT11_AUTO_CONFIG_ENABLED:\n")); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_BEACON_PERIOD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u2Byte u2BcnIntv = 0; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - // Verify input paramter. - if(InformationBufferLength < sizeof(u2Byte)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set AP mode OID_DOT11_BEACON_PERIOD: Invalid length\n")); - ndisStatus = NDIS_STATUS_INVALID_STATE; - *BytesNeeded = sizeof(u2Byte); - return ndisStatus; - } - - u2BcnIntv = *((pu2Byte)InformationBuffer); - pTargetAdapter->pNdisCommon->RegBeaconPeriod = u2BcnIntv; - MgntActSet_802_11_BeaconInterval(pTargetAdapter, u2BcnIntv); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<===Set AP mode OID_DOT11_BEACON_PERIOD:\n")); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_DTIM_PERIOD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u1Byte u1DtimPeriod = 0; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - // Verify input paramter. - if(InformationBufferLength < sizeof(u1Byte)) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set AP mode OID_DOT11_DTIM_PERIOD: Invalid length\n")); - return ndisStatus; - } - - u1DtimPeriod = *((pu1Byte)InformationBuffer); - pTargetAdapter->pNdisCommon->RegDtimPeriod = u1DtimPeriod; - MgntActSet_802_11_DtimPeriod(pTargetAdapter, u1DtimPeriod); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<===Set AP mode OID_DOT11_DTIM_PERIOD:\n")); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_DESIRED_SSID_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - if (GetAPState(pTargetAdapter) != AP_STATE_STOPPED) - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - RT_TRACE(COMP_INDIC, DBG_LOUD, ("AP is not in INIT STATE\n")); - return ndisStatus; - } - - ndisStatus = N6CSet_DOT11_DESIRED_SSID_LIST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set AP mode OID_DOT11_DESIRED_SSID_LIST\n")); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_GEN_CURRENT_PACKET_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG PacketFilter = 0; - PULONG localInformationBuffer = (PULONG)InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - - if(InformationBufferLength < sizeof(ULONG)) - { - ndisStatus = NDIS_STATUS_INVALID_LENGTH; - return ndisStatus; - } - - PacketFilter = NIC_SUPPORTED_FILTERS; - - *BytesRead = InformationBufferLength; - - if( InformationBufferLength == sizeof(ULONG) ) - { - PacketFilter = *(PULONG)InformationBuffer; - } - else - { - PlatformMoveMemory(&PacketFilter, (PVOID)(localInformationBuffer+4), sizeof(ULONG)); - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("PacketFilter: %x\n", PacketFilter)); - - // - // Note: - // A miniport driver operating in other Native 802.11 modes besides NetMon must - // not enable these packet filter settings (Defined in WDK). - // By Bruce, 2008-06-27. - // - if(!pTargetAdapter->MgntInfo.bNetMonitorMode) - { - PacketFilter &= ~(NDIS_PACKET_TYPE_PROMISCUOUS | - NDIS_PACKET_TYPE_802_11_RAW_DATA | - NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT | - NDIS_PACKET_TYPE_802_11_RAW_MGMT); - } - - if( PacketFilter & NDIS_PACKET_TYPE_DIRECTED) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_DIRECTED\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_MULTICAST) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_MULTICAST\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_ALL_MULTICAST\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_BROADCAST) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_BROADCAST\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_PROMISCUOUS\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_ALL_LOCAL) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_ALL_LOCAL\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_SOURCE_ROUTING) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_SOURCE_ROUTING\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_SMT) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_SMT\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_GROUP) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_GROUP\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_ALL_FUNCTIONAL) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_ALL_FUNCTIONAL\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_FUNCTIONAL) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_FUNCTIONAL\n"));} - if( PacketFilter & NDIS_PACKET_TYPE_MAC_FRAME) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_MAC_FRAME\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_RAW_DATA) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_RAW_DATA\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT ) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_RAW_MGMT) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_RAW_MGMT\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL\n"));} - if(PacketFilter & NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL) {RT_TRACE(COMP_OID_SET, DBG_LOUD, ("NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL\n"));} - - if( (PacketFilter & NIC_SUPPORTED_FILTERS) == 0 ) - { - ndisStatus=NDIS_STATUS_INVALID_DATA; - return ndisStatus; - } - - if( pTargetAdapter->pNdisCommon->NdisPacketFilter == PacketFilter ) - { - ndisStatus = NDIS_STATUS_SUCCESS; - return ndisStatus; - } - - if( PacketFilter & - (NDIS_PACKET_TYPE_ALL_MULTICAST |NDIS_PACKET_TYPE_PROMISCUOUS ) - ) - { - u4Byte MCR[2]; - MCR[0] = 0xffffffff; - MCR[1] = 0xffffffff; - pTargetAdapter->HalFunc.SetHwRegHandler(pTargetAdapter, HW_VAR_MULTICAST_REG, (pu1Byte)(MCR) ); - } - - { - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - pTargetAdapter->pNdisCommon->NdisPacketFilter = PacketFilter| - pMgntInfo->RegPktIndicate; - } - - return ndisStatus; -} - - -NDIS_STATUS -N6C_SET_OID_DOT11_CURRENT_CHANNEL( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u1Byte btChannel = 0; - PMGNT_INFO pDefaultMgntInfo = GetDefaultMgntInfo(pTargetAdapter); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - ndisStatus = NDIS_STATUS_BUFFER_OVERFLOW; - return ndisStatus; - } - - { - // - // Verify the channel given by the upper layer first. - // - u2Byte i, listLen; - PRT_CHANNEL_LIST pChannelList = NULL; - u1Byte chnlNum; - BOOLEAN bFound = FALSE; - btChannel = (u1Byte)(*(PULONG)InformationBuffer); - - pChannelList = MgntActQuery_ChannelList(pTargetAdapter); - - if(!pChannelList) // Get channel list failed - return NDIS_STATUS_FAILURE; - - listLen = pChannelList->ChannelLen; - - for(i=0; iChnlListEntry[i].ChannelNum; - if( (btChannel == chnlNum) || (btChannel == DSSS_Freq_Channel[chnlNum]*1000) ) - { - RT_ASSERT(chnlNum > 0, ("ToLegalChannel(): chnlNum(%d) should > 0 !!!\n", chnlNum)); - bFound = TRUE; - } - } - - if(!bFound) - { - ndisStatus = NDIS_STATUS_INVALID_DATA; - return ndisStatus; - } - - if (MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(pTargetAdapter, (u1Byte)(*(PULONG)InformationBuffer)) != TRUE) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("!!! Failed to switch to the channel, %d\n", btChannel)); - } - } - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_DISCONNECT_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - u4Byte id = 0; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - - // - // We should reset PHY ready status if WiFi status was changed for this PHY ID, - // Using uNumOfEntries for Dot11SupportedPhyTypes instead, added by Roger, 2013.08.29. - // - for (id = 0; id < pTargetAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; ++id) - pTargetAdapter->pNdis62Common->bIsDot11PhyIdSet[id] = FALSE; - pTargetAdapter->pNdis62Common->bDot11SetPhyIdReady = TRUE; - - pTargetAdapter->pNdis62Common->CurrentOpState = INIT_STATE; - - - ndisStatus = N6CSet_DOT11_DISCONNECT_REQUEST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_CONNECT_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_MLME); - - pTargetAdapter->pNdis62Common->CurrentOpState = OP_STATE; - - ndisStatus = N6CSet_DOT11_CONNECT_REQUEST( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_SET_OID_GEN_LINK_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_MLME); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_DOT11_SAFE_MODE_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdis6Common = pTargetAdapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &pTargetAdapter->MgntInfo; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_MLME); - -#if 1 - pMgntInfo->SafeModeEnabled = *(PBOOLEAN)InformationBuffer; - - if(pMgntInfo->SafeModeEnabled) - pMgntInfo->pStaQos->QosCapability = QOS_DISABLE; - else - pMgntInfo->pStaQos->QosCapability = pMgntInfo->pStaQos->QosCapabilityBackup; -#else - pMgntInfo->SafeModeEnabled = FALSE; -#endif - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SafeModeEnabled %d\n", pMgntInfo->SafeModeEnabled)); - return ndisStatus; -} - - -NDIS_STATUS -N6C_SET_OID_DOT11_CURRENT_PHY_ID( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG PhyId = *(PULONG)InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_MLME); - - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if ( PhyId >= pTargetAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ) - { - *BytesRead = 0; - return NDIS_STATUS_INVALID_DATA; - } - else - { - pTargetAdapter->pNdisCommon->dot11SelectedPhyId = PhyId; - pTargetAdapter->pNdisCommon->pDot11SelectedPhyMIB = pTargetAdapter->pNdisCommon->pDot11PhyMIBs + PhyId; - *BytesRead = *BytesNeeded; - } - - // If PHY IDs are not already set for all number of entries we indicate before - - pTargetAdapter->pNdis62Common->bIsDot11PhyIdSet[PhyId] = TRUE; - - if (PhyId == 0) { - u4Byte id = 0; - for (id = 1; id < pTargetAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; id++) - pTargetAdapter->pNdis62Common->bIsDot11PhyIdSet[id] = FALSE; - pTargetAdapter->pNdis62Common->bDot11SetPhyIdReady = FALSE; - } else if (PhyId == pTargetAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries - 1) { - pTargetAdapter->pNdis62Common->bDot11SetPhyIdReady = TRUE; - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_CURRENT_PHY_ID: phyid%d\n", pTargetAdapter->pNdisCommon->dot11SelectedPhyId)); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_PNP_ENABLE_WAKE_UP( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG PhyId = *(PULONG)InformationBuffer; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - // NDIS notify us we shall set up HW to support WOL feature. - // Since we will schedule workitem in OID_PNP_SET_POWER, all HW setting - // will be done there. 2006.09.19, by rcnjko. - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_PNP_ENABLE_WAKE_UP(%#X)\n", *((PULONG)InformationBuffer))); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_SET_OID_PNP_ADD_WAKE_UP_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_PM_PACKET_PATTERN PMPacketPattern = *((PNDIS_PM_PACKET_PATTERN)InformationBuffer); - - u1Byte WoLBitMapPatternMask[MAX_WOL_BIT_MASK_SIZE]; - u1Byte WoLBitMapPatternContent[MAX_WOL_PATTERN_SIZE]; - u1Byte Index; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - - PlatformZeroMemory(WoLBitMapPatternMask, sizeof(WoLBitMapPatternMask)); - PlatformZeroMemory(WoLBitMapPatternContent, sizeof(WoLBitMapPatternContent)); - - - FunctionIn(COMP_OID_SET); - if(PMPacketPattern.MaskSize <= MAX_WOL_BIT_MASK_SIZE) - { - PlatformMoveMemory(WoLBitMapPatternMask, (PNDIS_PM_PACKET_PATTERN)InformationBuffer+1, PMPacketPattern.MaskSize); - RT_PRINT_DATA( (COMP_OID_SET|COMP_POWER), DBG_LOUD, ("SET OID_PNP_ADD_WAKE_UP_PATTERN Mask: "), - WoLBitMapPatternMask, PMPacketPattern.MaskSize); - } - - if(PMPacketPattern.PatternSize <= MAX_WOL_PATTERN_SIZE) - { - PlatformMoveMemory(WoLBitMapPatternContent, (pu1Byte)InformationBuffer+PMPacketPattern.PatternOffset, PMPacketPattern.PatternSize); - RT_PRINT_DATA( (COMP_OID_SET|COMP_POWER), DBG_LOUD, ("SET OID_PNP_ADD_WAKE_UP_PATTERN Pattern: "), - WoLBitMapPatternContent, PMPacketPattern.PatternSize); - } - - //Find the index of the first empty entry. - for(Index=0; Index= MAX_SUPPORT_WOL_PATTERN_NUM(pTargetAdapter)) - { - ndisStatus = NDIS_STATUS_RESOURCES; - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("SET OID_PNP_ADD_WAKE_UP_PATTERN: Return status(%#X). The number of wake up pattern is more than %d or the pattern Id is exist.\n", - ndisStatus, MAX_SUPPORT_WOL_PATTERN_NUM(pTargetAdapter))); - return ndisStatus; - - } - else - { - u1Byte BROADCAST_ADDR[6]={0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - u1Byte DONTCARE_ADDR[6]={0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - u1Byte MULTICAST_ADDR[2]={0x33, 0x33}; - - pPmWoLPatternInfo[Index].PatternType = eUnknownType; - //packet type. - if(PlatformCompareMemory(WoLBitMapPatternContent, pTargetAdapter->PermanentAddress, sizeof(pTargetAdapter->PermanentAddress)) == 0 ) - { //unicast - pPmWoLPatternInfo[Index].PatternType = eUnicastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, MULTICAST_ADDR, sizeof(MULTICAST_ADDR)) == 0) - { //Multicast - pPmWoLPatternInfo[Index].PatternType = eMulticastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, BROADCAST_ADDR, sizeof(BROADCAST_ADDR)) == 0 ) - { //broadcast - pPmWoLPatternInfo[Index].PatternType = eBroadcastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, DONTCARE_ADDR, sizeof(DONTCARE_ADDR)) == 0 ) - { - pPmWoLPatternInfo[Index].PatternType = eDontCareDA; - } - //DbgPrint("PatternType = %d\n", pPmWoLPatternInfo[Index].PatternType); - - // We use the PatternSize to replace PatternId because N5/N6 does not content PatternId. - pPmWoLPatternInfo[Index].PatternId = PMPacketPattern.PatternSize; - pPmWoLPatternInfo[Index].IsUserDefined = 0; - - if(pPmWoLPatternInfo[Index].PatternType == eUnicastPattern) - { // To wake up by any packet which DA is our MAC addr. - BOOLEAN bUWF = TRUE; - - //pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_WF_IS_MAC_ADDR, (pu1Byte)(&bUWF)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("OID_PNP_ADD_WAKE_UP_PATTERN: Set HW to wake up for any packet which DA is our MAC addr.\n")); - } - else - { - GetWOLWakeUpPattern(pTargetAdapter, - (pu1Byte)&WoLBitMapPatternMask, - PMPacketPattern.MaskSize, - (pu1Byte)&WoLBitMapPatternContent, - PMPacketPattern.PatternSize, - Index, - FALSE); - - pPSC->WoLPatternNum++; - } - } - - RT_PRINT_DATA( (COMP_OID_SET|COMP_POWER), DBG_TRACE, ("SET OID_PNP_ADD_WAKE_UP_PATTERN: "), InformationBuffer , InformationBufferLength); - - return ndisStatus; -} - -NDIS_STATUS -N6C_SET_OID_PNP_REMOVE_WAKE_UP_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_PM_PACKET_PATTERN PMPacketPattern = *((PNDIS_PM_PACKET_PATTERN)InformationBuffer); - u1Byte Index; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - for(Index=0; Index= MAX_SUPPORT_WOL_PATTERN_NUM(pTargetAdapter)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD,("SET OID_PM_REMOVE_WOL_PATTERN: Cannot find the wake up pattern size(%08X).\n", PMPacketPattern.PatternSize)); - } - else - { - //Reset the structure and set WFCRC register to non-zero value. - pPmWoLPatternInfo[Index].PatternId = 0; - PlatformZeroMemory(pPmWoLPatternInfo[Index].Mask, sizeof(pPmWoLPatternInfo[Index].Mask)); - pPmWoLPatternInfo[Index].CrcRemainder = 0xffff; - pPmWoLPatternInfo[Index].IsPatternMatch = 0; - pPmWoLPatternInfo[Index].IsSupportedByFW = 0; - - pTargetAdapter->HalFunc.SetHwRegHandler(pTargetAdapter, HW_VAR_WF_MASK, (pu1Byte)(&Index)); - pTargetAdapter->HalFunc.SetHwRegHandler(pTargetAdapter, HW_VAR_WF_CRC, (pu1Byte)(&Index)); - - pPmWoLPatternInfo[Index].HwWFMIndex = 0xff; // reset the value after clear HW/CAM entry. - - if(PMPacketPattern.PatternSize == 0x1) - { - BOOLEAN bUWF=FALSE; - pTargetAdapter->HalFunc.SetHwRegHandler(pTargetAdapter, HW_VAR_WF_IS_MAC_ADDR, (pu1Byte)(&bUWF)); - } - else - { - pPSC->WoLPatternNum--; - } - } - - RT_PRINT_DATA( (COMP_OID_QUERY|COMP_POWER), DBG_LOUD, ("SET OID_PNP_REMOVE_WAKE_UP_PATTERN: "), InformationBuffer , InformationBufferLength); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_SET_OID_PNP_SET_POWER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // Output variables (Currently no use) - *BytesRead = 0; - *BytesNeeded = 0; - - FunctionIn(COMP_OID_SET); - - ndisStatus = N6Sdio_Mgnt_SetPower( - pTargetAdapter, - InformationBuffer, - InformationBufferLength, - BytesNeeded, - BytesRead - ); - - return ndisStatus; -} diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.h b/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.h deleted file mode 100644 index 52bf773b..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_OidSet.h +++ /dev/null @@ -1,436 +0,0 @@ -#ifndef __INC_NDIS6_OID_SET_H -#define __INC_NDIS6_OID_SET_H - - -/* -RT_AUTH_MODE -N6CDot11ToAuthMode( - IN DOT11_AUTH_ALGORITHM dot11AuthAlg -); - - -RT_ENC_ALG -N6CDot11ToEncAlgorithm( - IN DOT11_CIPHER_ALGORITHM dot11CipherAlg -); -*/ - - -NDIS_STATUS -N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - - -// Name : N6CSet_DOT11_AUTHENTICATION_ALOGORITHM -// Function : -// Set Authentication alg -//Input : -// AlgorithmId : open , shared ,wpa ,wpa-psk, rsna,rsna-psk -VOID -N6CSet_DOT11_AUTHENTICATION_ALOGORITHM( - IN PADAPTER Adapter, - IN DOT11_AUTH_ALGORITHM AlgorithmId -); - -NDIS_STATUS -N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - - -// Name : N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM -// Function : -// Set Unicase chiper alg -//Input : -// AlgorithmId : none ,wep40 ,wep104 ,tkip ,aes. -VOID -N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - IN DOT11_CIPHER_ALGORITHM AlgorithmId -); - -NDIS_STATUS -N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -// Name : N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM -// Function : -// Set Unicase chiper alg -//Input : -// AlgorithmId : none ,wep40 ,wep104 ,tkip ,aes. -VOID -N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM( - IN PADAPTER Adapter, - IN DOT11_CIPHER_ALGORITHM AlgorithmId -); - - -NDIS_STATUS -N6CSet_DOT11_CIPHER_DEFAULT_KEY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_PMKID_LIST( - IN PADAPTER Adapter, - IN PDOT11_PMKID_LIST pPMKIDList, - IN ULONG InfoBufLength -); - -NDIS_STATUS -N6CSet_DOT11_CONNECT_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_DISCONNECT_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_POWER_MGMT_REQUEST( - IN PADAPTER Adapter, - IN pu4Byte pPowerSaveLevel -); - -NDIS_STATUS -N6CSet_DOT11_EXCLUDED_MAC_ADDRESS_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_DESIRED_BSSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_CURRENT_OPERATION_MODE( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_DESIRED_BSS_TYPE( - IN PADAPTER Adapter, - IN PDOT11_BSS_TYPE pBssType -); - -NDIS_STATUS -N6CSet_DOT11_SCAN_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - - -NDIS_STATUS -N6CSet_DOT11_CUSTOMIZED_SCAN_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N6CSet_DOT11_DESIRED_SSID_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_PRIVACY_EXEMPTION_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_IBSS_PARAMS( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_ATIM_WINDOW( - IN PADAPTER pAdapter, - IN PULONG pValue -); - -NDIS_STATUS -N6CSet_DOT11_NIC_POWER_STATE( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST pNdisOidRequest, - IN BOOLEAN pValue -); - -NDIS_STATUS -N6CSet_DOT11_OPERATIONAL_RATE_SET( - IN PADAPTER pAdapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_DESIRED_PHY_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuerySet_DOT11_RESET_REQUEST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CQuerySet_DOT11_ENUM_BSS_LIST( - IN PADAPTER Adapter, - OUT PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CSet_DOT11_MULTICAST_LIST( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - -NDIS_STATUS -N6C_OID_DOT11_NIC_POWER_STATE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest); - - -NDIS_STATUS -N6C_SET_OID_DOT11_DESIRED_PHY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_AUTO_CONFIG_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_BEACON_PERIOD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_DTIM_PERIOD( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_DESIRED_SSID_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_GEN_CURRENT_PACKET_FILTER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_CURRENT_CHANNEL( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_DISCONNECT_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_CONNECT_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_GEN_LINK_PARAMETERS( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_SAFE_MODE_ENABLED( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_DOT11_CURRENT_PHY_ID( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_PNP_ENABLE_WAKE_UP( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_PNP_ADD_WAKE_UP_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_PNP_REMOVE_WAKE_UP_PATTERN( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_SET_OID_PNP_SET_POWER( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); -#endif // #ifndef __INC_NDIS6_OID_SET_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.c b/network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.c deleted file mode 100644 index d6d115bc..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.c +++ /dev/null @@ -1,2199 +0,0 @@ - -#include "MP_Precomp.h" -#include "CustomOid.h" - -#if WPP_SOFTWARE_TRACE -#include "N6C_Oids.tmh" -#endif - -static NDIS_OID NICSupportedOids[] = -{ - // General Oids. - OID_GEN_SUPPORTED_LIST, // OK - OID_GEN_SUPPORTED_GUIDS, // OK - OID_GEN_HARDWARE_STATUS, // OK - OID_GEN_MEDIA_SUPPORTED, // OK - OID_GEN_MEDIA_IN_USE, // OK - OID_GEN_PHYSICAL_MEDIUM, // OK - OID_GEN_CURRENT_LOOKAHEAD, // OK - OID_GEN_MAXIMUM_LOOKAHEAD, // OK - OID_GEN_MAXIMUM_FRAME_SIZE, // OK - OID_GEN_CURRENT_PACKET_FILTER, // OK - OID_GEN_MAXIMUM_TOTAL_SIZE, // OK - OID_GEN_TRANSMIT_BLOCK_SIZE, // OK - OID_GEN_RECEIVE_BLOCK_SIZE, // OK - OID_GEN_MAC_OPTIONS, // OK - OID_GEN_LINK_SPEED, // OK - OID_GEN_TRANSMIT_BUFFER_SPACE, // OK - OID_GEN_RECEIVE_BUFFER_SPACE, // OK - OID_GEN_VENDOR_ID, // OK - OID_GEN_VENDOR_DESCRIPTION, // OK - OID_GEN_VENDOR_DRIVER_VERSION, // OK - OID_GEN_DRIVER_VERSION, // OK - OID_GEN_PROTOCOL_OPTIONS, // OK - OID_GEN_MEDIA_CONNECT_STATUS, // OK - OID_GEN_MAXIMUM_SEND_PACKETS, // OK - OID_GEN_XMIT_OK, // OK - OID_GEN_RCV_OK, // OK - OID_GEN_XMIT_ERROR, // OK - OID_GEN_RCV_ERROR, // OK - OID_GEN_RCV_NO_BUFFER, // OK - OID_GEN_RCV_CRC_ERROR, // OK, no implement - OID_GEN_TRANSMIT_QUEUE_LENGTH, // OK, no implement - OID_GEN_LINK_PARAMETERS, // ndis6 mandatory, TODO - OID_GEN_NETWORK_LAYER_ADDRESSES, // OK, no implement - - // 802.3 Oids. - OID_802_3_PERMANENT_ADDRESS, // OK - OID_802_3_CURRENT_ADDRESS, // OK - OID_802_3_MULTICAST_LIST, // OK - OID_802_3_MAXIMUM_LIST_SIZE, // OK - OID_802_3_RCV_ERROR_ALIGNMENT, // OK, no implement - OID_802_3_XMIT_ONE_COLLISION, // OK, no implement - OID_802_3_XMIT_MORE_COLLISIONS, // OK, no implement - OID_802_3_XMIT_DEFERRED, // OK, no implement - OID_802_3_XMIT_MAX_COLLISIONS, // OK, no implement - OID_802_3_RCV_OVERRUN, // OK, no implement - OID_802_3_XMIT_UNDERRUN, // OK, no implement - OID_802_3_XMIT_HEARTBEAT_FAILURE, // OK, no implement - OID_802_3_XMIT_TIMES_CRS_LOST, // OK, no implement - OID_802_3_XMIT_LATE_COLLISIONS, // OK, no implement -#if POWER_MAN - OID_PNP_CAPABILITIES, - OID_PNP_SET_POWER, - OID_PNP_QUERY_POWER, - OID_PNP_ADD_WAKE_UP_PATTERN, - OID_PNP_REMOVE_WAKE_UP_PATTERN, - OID_PNP_ENABLE_WAKE_UP, - -#endif - - // Native 802.11 Oids. - OID_DOT11_MPDU_MAX_LENGTH, // OK -- SC-OK - OID_DOT11_OPERATION_MODE_CAPABILITY, // OK -- SC-OK - OID_DOT11_CURRENT_OPERATION_MODE, // OK -- SC-OK - OID_DOT11_ATIM_WINDOW, // OK - OID_DOT11_NIC_POWER_STATE, // OK - OID_DOT11_OPTIONAL_CAPABILITY, // OK - OID_DOT11_CURRENT_OPTIONAL_CAPABILITY, // OK - OID_DOT11_CF_POLLABLE, // OK, - OID_DOT11_OPERATIONAL_RATE_SET, // OK - OID_DOT11_BEACON_PERIOD, // OK - OID_DOT11_RTS_THRESHOLD, // OK - OID_DOT11_SHORT_RETRY_LIMIT, // OK - OID_DOT11_LONG_RETRY_LIMIT, // OK - OID_DOT11_FRAGMENTATION_THRESHOLD, // OK - OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME, // OK - OID_DOT11_MAX_RECEIVE_LIFETIME, // OK - OID_DOT11_SUPPORTED_PHY_TYPES, // OK - OID_DOT11_CURRENT_REG_DOMAIN, // OK, SC-- to be reimplement. - OID_DOT11_TEMP_TYPE, // Rcnjko - OID_DOT11_CURRENT_TX_ANTENNA, // Rcnjko - OID_DOT11_DIVERSITY_SUPPORT, // Rcnjko - OID_DOT11_CURRENT_RX_ANTENNA, // Rcnjko - OID_DOT11_SUPPORTED_POWER_LEVELS, // Rcnjko - OID_DOT11_CURRENT_TX_POWER_LEVEL, // Rcnjko - OID_DOT11_PERMANENT_ADDRESS, // OK -- SC-OK - OID_DOT11_CURRENT_ADDRESS, // OK -- SC-OK - OID_DOT11_MAC_ADDRESS, // OK -- SC-OK - OID_DOT11_STATION_ID, // OK -- SC-OK - - // Added - //OID_DOT11_MAXIMUM_LIST_SIZE, - //OID_DOT11_MULTICAST_LIST, - //OID_DOT11_NIC_SPECIFIC_EXTENSION, - //OID_DOT11_RECV_SENSITIVITY_LIST, - //OID_DOT11_MULTI_DOMAIN_CAPABILITY, - //OID_DOT11_SUPPORTED_COUNTRY_OR_REGION_STRING, - //OID_DOT11_DESIRED_COUNTRY_OR_REGION_STRING, - - // ----- IHV ----- - OID_DOT11_CURRENT_CHANNEL, // SC -- SC-OK - OID_DOT11_CCA_MODE_SUPPORTED, - OID_DOT11_CURRENT_CCA_MODE, - OID_DOT11_ED_THRESHOLD, - // ----- OFDM ----- - OID_DOT11_CURRENT_FREQUENCY, - OID_DOT11_FREQUENCY_BANDS_SUPPORTED, - OID_DOT11_REG_DOMAINS_SUPPORT_VALUE, // SC -- to be reimplement. - OID_DOT11_SUPPORTED_TX_ANTENNA, // tbi - OID_DOT11_SUPPORTED_RX_ANTENNA, // tbi - OID_DOT11_DIVERSITY_SELECTION_RX, // Rcnjko - OID_DOT11_SUPPORTED_DATA_RATES_VALUE, // Rcnjko - OID_DOT11_RF_USAGE, - OID_DOT11_MAX_MAC_ADDRESS_STATES, - OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED, // return not support - OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED, // return not support - OID_DOT11_COUNTRY_STRING, // return not support - OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED, - OID_DOT11_PBCC_OPTION_IMPLEMENTED, - OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED, - OID_DOT11_ERP_PBCC_OPTION_ENABLED, - OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED, - OID_DOT11_DSSS_OFDM_OPTION_ENABLED, - OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED, - OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED, - - // (get) not simple native wifi ? - OID_DOT11_AUTO_CONFIG_ENABLED, // OK -- SC-OK - OID_DOT11_POWER_MGMT_REQUEST, // Annie // OK (not verified) - OID_DOT11_DESIRED_SSID_LIST, // OK - OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST, // OK -- SC-OK - OID_DOT11_EXCLUDE_UNENCRYPTED,// OK, mandatory. - OID_DOT11_DESIRED_BSSID_LIST, // OK -- SC-OK - OID_DOT11_DESIRED_BSS_TYPE, // OK - OID_DOT11_STATISTICS, // OK - OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM, // Annie -- SC-OK - OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR, // Annie -- SC-OK to check infra and adhoc - OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR, // Annie -- SC-OK to check infra and adhoc - OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM, // Annie -- SC-OK - OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM, // Annie -- SC-OK - OID_DOT11_CIPHER_DEFAULT_KEY_ID, // Annie -- SC-OK - OID_DOT11_ENUM_ASSOCIATION_INFO, // SC -- SC-OK - OID_DOT11_HARDWARE_PHY_STATE, // OK -- SC-OK - OID_DOT11_DESIRED_PHY_LIST, // OK -- SC-OK - OID_DOT11_CURRENT_PHY_ID, // OK - OID_DOT11_PMKID_LIST, // Annie // OK (not verified) - OID_DOT11_MEDIA_STREAMING_ENABLED, // OK - OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD, // OK -- SC-OK - OID_DOT11_ACTIVE_PHY_LIST, // SC -- SC-OK - OID_DOT11_EXTSTA_CAPABILITY, // OK -- SC-OK - OID_DOT11_DATA_RATE_MAPPING_TABLE, - OID_DOT11_PRIVACY_EXEMPTION_LIST, // OK - OID_DOT11_IBSS_PARAMS, // OK -- SC-OK - OID_DOT11_UNICAST_USE_GROUP_ENABLED, // OK -- SC-OK - OID_DOT11_SAFE_MODE_ENABLED, - OID_DOT11_HIDDEN_NETWORK_ENABLED, // OK -- SC-OK - - // Set - OID_DOT11_SCAN_REQUEST, // OK - OID_DOT11_RESET_REQUEST, // OK - - // (Set) simple native wifi ? - OID_DOT11_ENUM_BSS_LIST, // OK - OID_DOT11_FLUSH_BSS_LIST, // OK -- SC-OK - OID_DOT11_CONNECT_REQUEST, // OK - OID_DOT11_CIPHER_DEFAULT_KEY, // Annie SC-OK - OID_DOT11_CIPHER_KEY_MAPPING_KEY, // Annie - OID_DOT11_DISCONNECT_REQUEST, // OK - - OID_GEN_INTERRUPT_MODERATION, - OID_DOT11_CHANNEL_AGILITY_ENABLED, - OID_DOT11_CHANNEL_AGILITY_PRESENT, - - OID_DOT11_ASSOCIATION_PARAMS, - - // ExtAP specific OIDs - OID_DOT11_DTIM_PERIOD, // dot11DTIMPeriod - OID_DOT11_AVAILABLE_CHANNEL_LIST, // msDot11AvailableChannelList - OID_DOT11_AVAILABLE_FREQUENCY_LIST, // msDot11AvailableFrequencyList - OID_DOT11_ENUM_PEER_INFO, - OID_DOT11_DISASSOCIATE_PEER_REQUEST, - //OID_DOT11_PORT_STATE_NOTIFICATION, - OID_DOT11_INCOMING_ASSOCIATION_DECISION, - OID_DOT11_ADDITIONAL_IE, - OID_DOT11_WPS_ENABLED, - OID_DOT11_START_AP_REQUEST, - // OID_DOT11_AP_BEACON_MODE, - - // Virtual WiFi specifc OIDs - OID_DOT11_CREATE_MAC, - OID_DOT11_DELETE_MAC, - - //WoWLAN PM OIDs - OID_PM_ADD_WOL_PATTERN, - OID_PM_REMOVE_WOL_PATTERN, - OID_PM_PARAMETERS, - OID_PM_ADD_PROTOCOL_OFFLOAD, - OID_PM_GET_PROTOCOL_OFFLOAD, - OID_PM_REMOVE_PROTOCOL_OFFLOAD, - OID_PM_PROTOCOL_OFFLOAD_LIST, - - // Packet filter - OID_RECEIVE_FILTER_SET_FILTER, - OID_RECEIVE_FILTER_CLEAR_FILTER, - - // Connected standby OIDs - OID_PACKET_COALESCING_FILTER_MATCH_COUNT, - - // Wifi Direct Support: From - // Format: ((0x0E000000U) | ((T) << 16) | ((M) << 8) | (SN)) - // T: - // NWF_WFD_DEVICE_OID or NWF_WFD_ROLE_OID - // M: - // NWF_MANDATORY_OID or NWF_OPTIONAL_OID - - // Device OIDs: NWF_WFD_DEVICE_OID and NWF_MANDATORY_OID (some will be accepted by the role port) - OID_DOT11_WFD_DEVICE_CAPABILITY, - OID_DOT11_WFD_GROUP_OWNER_CAPABILITY, - OID_DOT11_WFD_DEVICE_INFO, - OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST, - OID_DOT11_WFD_DISCOVER_REQUEST, - OID_DOT11_WFD_ENUM_DEVICE_LIST, - OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY, - OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL, - OID_DOT11_WFD_ADDITIONAL_IE, - OID_DOT11_WFD_FLUSH_DEVICE_LIST, - OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST, - OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE, - OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION, - OID_DOT11_WFD_SEND_INVITATION_REQUEST, - OID_DOT11_WFD_SEND_INVITATION_RESPONSE, - OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST, - OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE, - OID_DOT11_WFD_STOP_DISCOVERY, - - // Role OIDs: NWF_WFD_ROLE_OID and NWF_MANDATORY_OID - OID_DOT11_WFD_DESIRED_GROUP_ID, - OID_DOT11_WFD_START_GO_REQUEST, - OID_DOT11_WFD_GROUP_START_PARAMETERS, - OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST, - OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST, - OID_DOT11_WFD_GROUP_JOIN_PARAMETERS, - OID_DOT11_WFD_GET_DIALOG_TOKEN, - - // D0 Coalescing - OID_PACKET_COALESCING_FILTER_MATCH_COUNT, - - // Connected standby OIDs - OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED, - OID_DOT11_POWER_MGMT_MODE_STATUS, - OID_DOT11_OFFLOAD_NETWORK_LIST, - - // Realtek internal. - OID_RT_PRO8187_WI_POLL, - OID_RT_DEVICE_ID_INFO -}; - - -NDIS_OID* -N6GetSupportedOids() -{ - return NICSupportedOids; -} - -ULONG -N6GetSupportedOidsLength() -{ - return sizeof(NICSupportedOids); -} - - -NDIS_STATUS -N6CDirectOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST NdisRequest - ) -/*++ - - MiniportDirectOidRequest is an optional function. A miniport driver registers this function - if it handles direct OID requests. A driver specifies the MiniportDirectOidRequest entry - point when it calls the NdisMRegisterMiniportDriver function. A miniport driver that registers - the MiniportCancelDirectOidRequest function must also register MiniportDirectOidRequest. - - NDIS calls the MiniportDirectOidRequest function either on its own behalf or on behalf of - a bound protocol driver that called the NdisDirectOidRequest function. Miniport drivers - should examine the request that is supplied at the OidRequest parameter and take the - action requested. - - Note that NDIS does not validate the OID-specific contents at OidRequest. Therefore, - the driver itself must validate these contents. If the driver determines that the value to - be set is out of bounds, it should fail the request and return NDIS_STATUS_INVALID_DATA. - - NDIS does not serialize requests that it sends to MiniportDirectOidRequest with other OID - requests. The miniport driver must be able to handle multiple calls to MiniportDirectOidRequest - when other requests that are sent to MiniportOidRequest or MiniportDirectOidRequest are - outstanding. - - NDIS calls MiniportDirectOidRequest at IRQL <= DISPATCH_LEVEL. - ---*/ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - u2Byte i = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> N6PciDirectOidRequest(): to port %u\n", NdisRequest->PortNumber)); - - ndisStatus = WDI_HandleOidRequest( - MiniportAdapterContext, - NdisRequest - ); - - if(NDIS_STATUS_NOT_RECOGNIZED == ndisStatus) - { - ndisStatus = N6CProcessOidRequest(Adapter, NdisRequest, FALSE); - } - - RT_ASSERT(ndisStatus != NDIS_STATUS_PENDING, ("N6CDirectOidRequest(): There is no pending OID handler!! (%x)\n", NdisRequest->DATA.QUERY_INFORMATION.Oid)); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== N6PciDirectOidRequest(): %u.\n", ndisStatus)); - - return ndisStatus; -} - -VOID -N6CCancelDirectOidRequest( - IN NDIS_HANDLE hMiniportAdapterContext, - IN PVOID RequestId - ) -{ - UNREFERENCED_PARAMETER(hMiniportAdapterContext); - UNREFERENCED_PARAMETER(RequestId); -} - -// Method operation for OID_DOT11_RESET_REQUEST -NDIS_STATUS -N6C_METHOD_OID_DOT11_RESET_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(pTargetAdapter->MgntInfo); - u4Byte id = 0; - - - PRT_NDIS62_COMMON pTargetNdis62Common = pTargetAdapter->pNdis62Common; -#if (P2P_SUPPORT == 1) - PP2P_INFO pP2PInfo = GET_P2P_INFO(pTargetAdapter); -#endif - P2P_ROLE currentRole = P2P_NONE; - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, - ("Port = %d, PortType = %d\n", pTargetAdapter->pNdis62Common->PortNumber, pTargetAdapter->pNdis62Common->PortType)); - - pTargetNdis62Common->CurrentOpState = INIT_STATE; - -{ -#if (P2P_SUPPORT == 1) - if(P2P_ADAPTER_OS_SUPPORT_P2P(pTargetAdapter)) - currentRole = pP2PInfo->Role; -#endif - - if(currentRole != P2P_NONE) - { - ndisStatus = N63CResetWifiDirectPorts(pTargetAdapter, currentRole, RESET_LEVEL_P2P_ONLY); - } - - pTargetAdapter->pNdis62Common->bDot11SetPhyIdReady = TRUE; - N63CResetNetworkListOffload(pTargetAdapter); - - if(pMgntInfo->bSupportPacketCoalescing) - N6FulshD0CoalescingQueue(pTargetAdapter, TRUE, FALSE); - -} - - if(pTargetNdis62Common->PortType == EXTAP_PORT || currentRole == P2P_GO) - { - ndisStatus = N62CAPResetRequest( - pTargetAdapter, - InformationBuffer, - InputBufferLength, - OutputBufferLength, - BytesWritten, - BytesRead, - BytesNeeded - ); - } - else if(pTargetNdis62Common->PortType == EXTSTA_PORT || currentRole == P2P_DEVICE || currentRole == P2P_CLIENT) - { - ndisStatus = N6CQuerySet_DOT11_RESET_REQUEST( - pTargetAdapter, - InformationBuffer, - InputBufferLength, - OutputBufferLength, - BytesWritten, - BytesRead, - BytesNeeded - ); - } - - FunctionOut(COMP_OID_SET); - - return ndisStatus; -} - -NDIS_STATUS -N6CValidateOIDCorrectness( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - // Validate N62C Specific OID - - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - ndisStatus = NDIS_STATUS_SUCCESS; - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_RESET_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("=====>N6C_DOT11_RESET_REQUEST()\n")); - - RT_SET_DRV_STATE(pAdapter, DrvStateResetting); - - do - { - // This should be updated to fit the state - - // Validate if the OID is issued in the correct state and mode - //ndisStatus = n63cValidateOIDCorrectness(pAdapter, NdisRequest); - //if(ndisStatus != NDIS_STATUS_SUCCESS) { - // break; - //} - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = N6C_METHOD_OID_DOT11_RESET_REQUEST( - pTargetAdapter, - NdisRequest->DATA.METHOD_INFORMATION.Oid, - NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.MethodId, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded - ); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - RT_CLEAR_DRV_STATE(pAdapter, DrvStateResetting); - - RT_TRACE(COMP_MLME, DBG_LOUD,("<====N6C_DOT11_RESET_REQUEST(): status=%d\n", ndisStatus)); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_OPERATION_MODE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u1Byte WaitCnt = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - PRT_NDIS62_COMMON pTargetNdis62Common = pTargetAdapter->pNdis62Common; - - //Fixed sometime start ap will file and it shows not available issue, by Maddest 20090731. - while(MgntScanInProgress(&pDefaultAdapter->MgntInfo)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("scan in progress\n")); - delay_ms(50); - WaitCnt++; - if(WaitCnt>30) - break; - - } - - switch(NdisRequest->RequestType) - { - case NdisRequestSetInformation: - - if (pTargetNdis62Common->CurrentOpState == INIT_STATE) - { - ndisStatus = N6CSet_DOT11_CURRENT_OPERATION_MODE( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - N62CChangePortTypeByOpMode( - pTargetAdapter, - (PDOT11_CURRENT_OPERATION_MODE)NdisRequest->DATA.SET_INFORMATION.InformationBuffer - );// need to check return status ?? Neo test 123 - - } - else - { - ndisStatus = NDIS_STATUS_INVALID_STATE; - } - - break; - case NdisRequestQueryInformation: - ndisStatus = N6CQuery_DOT11_CURRENT_OPERATION_MODE( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - case NdisRequestMethod: - break; - default: - break; - } - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_DESIRED_PHY_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_DESIRED_PHY_LIST( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_DESIRED_PHY_LIST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_AUTO_CONFIG_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N62CValidateOIDCorrectness(pTargetAdapter, NdisRequest); - - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_AUTO_CONFIG_ENABLED( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_AUTO_CONFIG_ENABLED( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_BEACON_PERIOD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_BEACON_PERIOD( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_BEACON_PERIOD( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_DTIM_PERIOD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_DTIM_PERIOD( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_DESIRED_SSID_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_DESIRED_SSID_LIST( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_DESIRED_SSID_LIST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_GEN_CURRENT_PACKET_FILTER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_GEN_CURRENT_PACKET_FILTER( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_GEN_CURRENT_PACKET_FILTER( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_CHANNEL( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_CURRENT_CHANNEL( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_CURRENT_CHANNEL( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_DISCONNECT_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_DISCONNECT_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_CONNECT_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_CONNECT_REQUEST( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_GEN_LINK_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_GEN_LINK_PARAMETERS( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_GEN_LINK_PARAMETERS( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_SAFE_MODE_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_SAFE_MODE_ENABLED( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: -#if 0 - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; -#else - ndisStatus = N6C_SET_OID_DOT11_SAFE_MODE_ENABLED( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); -#endif - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_PHY_ID( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_CURRENT_PHY_ID( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_DOT11_CURRENT_PHY_ID( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_GEN_SUPPORTED_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_GEN_SUPPORTED_LIST( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_GEN_VENDOR_DRIVER_VERSION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_GEN_VENDOR_DRIVER_VERSION( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_PNP_CAPABILITIES( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_PNP_CAPABILITIES( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_PNP_QUERY_POWER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_PNP_QUERY_POWER( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_PNP_ENABLE_WAKE_UP( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_PNP_ENABLE_WAKE_UP( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_PNP_ENABLE_WAKE_UP( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_TX_ANTENNA( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_CURRENT_TX_ANTENNA( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_RX_ANTENNA( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_CURRENT_RX_ANTENNA( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_SUPPORTED_RX_ANTENNA( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = N6C_QUERY_OID_DOT11_SUPPORTED_RX_ANTENNA( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_PNP_ADD_WAKE_UP_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_PNP_ADD_WAKE_UP_PATTERN( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - - -NDIS_STATUS -N6C_OID_PNP_REMOVE_WAKE_UP_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_PNP_REMOVE_WAKE_UP_PATTERN( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_PNP_SET_POWER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_INVALID_OID; - - // Adapter selection - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - - do - { - // Validate if the OID is issued in the correct state and mode - ndisStatus = N6CValidateOIDCorrectness(pAdapter, NdisRequest); - if(ndisStatus != NDIS_STATUS_SUCCESS) { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: State Error!\n", __FUNCTION__)); - break; - } - - switch (NdisRequest->RequestType) - { - // Query - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - ndisStatus = ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - // Set - case NdisRequestSetInformation: - ndisStatus = N6C_SET_OID_PNP_SET_POWER( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - - break; - - // Method - case NdisRequestMethod: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - - } - }while(FALSE); - - return ndisStatus; -} - -// -// Description: -// Dump OID string for further debugging. -// -VOID -N6C_DOT11_DUMP_OID( - NDIS_OID Oid - ) -{ - LPSTR StrBuf = ""; - - switch (Oid) { - case OID_GEN_STATISTICS : StrBuf = "OID_GEN_STATISTICS"; break; - - case OID_GEN_SUPPORTED_LIST : StrBuf = "OID_GEN_SUPPORTED_LIST"; break; - case OID_GEN_SUPPORTED_GUIDS : StrBuf = "OID_GEN_SUPPORTED_GUIDS"; break; - case OID_GEN_HARDWARE_STATUS : StrBuf = "OID_GEN_HARDWARE_STATUS"; break; - case OID_GEN_MEDIA_SUPPORTED : StrBuf = "OID_GEN_MEDIA_SUPPORTED"; break; - case OID_GEN_MEDIA_IN_USE : StrBuf = "OID_GEN_MEDIA_IN_USE"; break; - case OID_GEN_PHYSICAL_MEDIUM : StrBuf = "OID_GEN_PHYSICAL_MEDIUM"; break; - case OID_GEN_CURRENT_LOOKAHEAD : StrBuf = "OID_GEN_CURRENT_LOOKAHEAD"; break; - case OID_GEN_MAXIMUM_LOOKAHEAD : StrBuf = "OID_GEN_MAXIMUM_LOOKAHEAD"; break; - case OID_GEN_MAXIMUM_FRAME_SIZE : StrBuf = "OID_GEN_MAXIMUM_FRAME_SIZE"; break; - case OID_GEN_CURRENT_PACKET_FILTER : StrBuf = "OID_GEN_CURRENT_PACKET_FILTER"; break; - case OID_GEN_MAXIMUM_TOTAL_SIZE : StrBuf = "OID_GEN_MAXIMUM_TOTAL_SIZE"; break; - case OID_GEN_TRANSMIT_BLOCK_SIZE : StrBuf = "OID_GEN_TRANSMIT_BLOCK_SIZE"; break; - case OID_GEN_RECEIVE_BLOCK_SIZE : StrBuf = "OID_GEN_RECEIVE_BLOCK_SIZE"; break; - case OID_GEN_MAC_OPTIONS : StrBuf = "OID_GEN_MAC_OPTIONS"; break; - case OID_GEN_LINK_SPEED : StrBuf = "OID_GEN_LINK_SPEED"; break; - case OID_GEN_TRANSMIT_BUFFER_SPACE : StrBuf = "OID_GEN_TRANSMIT_BUFFER_SPACE"; break; - case OID_GEN_RECEIVE_BUFFER_SPACE : StrBuf = "OID_GEN_RECEIVE_BUFFER_SPACE"; break; - case OID_GEN_VENDOR_ID : StrBuf = "OID_GEN_VENDOR_ID"; break; - case OID_GEN_VENDOR_DESCRIPTION : StrBuf = "OID_GEN_VENDOR_DESCRIPTION"; break; - case OID_GEN_VENDOR_DRIVER_VERSION : StrBuf = "OID_GEN_VENDOR_DRIVER_VERSION"; break; - case OID_GEN_DRIVER_VERSION : StrBuf = "OID_GEN_DRIVER_VERSION"; break; - case OID_GEN_PROTOCOL_OPTIONS : StrBuf = "OID_GEN_PROTOCOL_OPTIONS"; break; - case OID_GEN_MEDIA_CONNECT_STATUS : StrBuf = "OID_GEN_MEDIA_CONNECT_STATUS"; break; - case OID_GEN_MAXIMUM_SEND_PACKETS : StrBuf = "OID_GEN_MAXIMUM_SEND_PACKETS"; break; - case OID_GEN_XMIT_OK : StrBuf = "OID_GEN_XMIT_OK"; break; - case OID_GEN_RCV_OK : StrBuf = "OID_GEN_RCV_OK"; break; - case OID_GEN_XMIT_ERROR : StrBuf = "OID_GEN_XMIT_ERROR"; break; - case OID_GEN_RCV_ERROR : StrBuf = "OID_GEN_RCV_ERROR"; break; - case OID_GEN_RCV_NO_BUFFER : StrBuf = "OID_GEN_RCV_NO_BUFFER"; break; - case OID_GEN_RCV_CRC_ERROR : StrBuf = "OID_GEN_RCV_CRC_ERROR"; break; - case OID_GEN_TRANSMIT_QUEUE_LENGTH : StrBuf = "OID_GEN_TRANSMIT_QUEUE_LENGTH"; break; - case OID_GEN_LINK_PARAMETERS : StrBuf = "OID_GEN_LINK_PARAMETERS"; break; - case OID_GEN_NETWORK_LAYER_ADDRESSES : StrBuf = "OID_GEN_NETWORK_LAYER_ADDRESSES"; break; - - - case OID_802_3_PERMANENT_ADDRESS : StrBuf = "OID_802_3_PERMANENT_ADDRESS"; break; - case OID_802_3_CURRENT_ADDRESS : StrBuf = "OID_802_3_CURRENT_ADDRESS"; break; - case OID_802_3_MULTICAST_LIST : StrBuf = "OID_802_3_MULTICAST_LIST"; break; - case OID_802_3_MAXIMUM_LIST_SIZE : StrBuf = "OID_802_3_MAXIMUM_LIST_SIZE"; break; - case OID_802_3_RCV_ERROR_ALIGNMENT : StrBuf = "OID_802_3_RCV_ERROR_ALIGNMENT"; break; - case OID_802_3_XMIT_ONE_COLLISION : StrBuf = "OID_802_3_XMIT_ONE_COLLISION"; break; - case OID_802_3_XMIT_MORE_COLLISIONS : StrBuf = "OID_802_3_XMIT_MORE_COLLISIONS"; break; - case OID_802_3_XMIT_DEFERRED : StrBuf = "OID_802_3_XMIT_DEFERRED"; break; - case OID_802_3_XMIT_MAX_COLLISIONS : StrBuf = "OID_802_3_XMIT_MAX_COLLISIONS"; break; - case OID_802_3_RCV_OVERRUN : StrBuf = "OID_802_3_RCV_OVERRUN"; break; - case OID_802_3_XMIT_UNDERRUN : StrBuf = "OID_802_3_XMIT_UNDERRUN"; break; - case OID_802_3_XMIT_HEARTBEAT_FAILURE : StrBuf = "OID_802_3_XMIT_HEARTBEAT_FAILURE"; break; - case OID_802_3_XMIT_TIMES_CRS_LOST : StrBuf = "OID_802_3_XMIT_TIMES_CRS_LOST"; break; - case OID_802_3_XMIT_LATE_COLLISIONS : StrBuf = "OID_802_3_XMIT_LATE_COLLISIONS"; break; -#if POWER_MAN - case OID_PNP_CAPABILITIES : StrBuf = "OID_PNP_CAPABILITIES"; break; - case OID_PNP_SET_POWER : StrBuf = "OID_PNP_SET_POWER"; break; - case OID_PNP_QUERY_POWER : StrBuf = "OID_PNP_QUERY_POWER"; break; - case OID_PNP_ADD_WAKE_UP_PATTERN : StrBuf = "OID_PNP_ADD_WAKE_UP_PATTERN"; break; - case OID_PNP_REMOVE_WAKE_UP_PATTERN : StrBuf = "OID_PNP_REMOVE_WAKE_UP_PATTERN"; break; - case OID_PNP_ENABLE_WAKE_UP : StrBuf = "OID_PNP_ENABLE_WAKE_UP"; break; -#endif - - case OID_DOT11_MPDU_MAX_LENGTH : StrBuf = "OID_DOT11_MPDU_MAX_LENGTH"; break; - case OID_DOT11_OPERATION_MODE_CAPABILITY : StrBuf = "OID_DOT11_OPERATION_MODE_CAPABILITY"; break; - case OID_DOT11_CURRENT_OPERATION_MODE : StrBuf = "OID_DOT11_CURRENT_OPERATION_MODE"; break; - case OID_DOT11_ATIM_WINDOW : StrBuf = "OID_DOT11_ATIM_WINDOW"; break; - case OID_DOT11_NIC_POWER_STATE : StrBuf = "OID_DOT11_NIC_POWER_STATE"; break; - case OID_DOT11_OPTIONAL_CAPABILITY : StrBuf = "OID_DOT11_OPTIONAL_CAPABILITY"; break; - case OID_DOT11_CURRENT_OPTIONAL_CAPABILITY : StrBuf = "OID_DOT11_CURRENT_OPTIONAL_CAPABILITY"; break; - case OID_DOT11_CF_POLLABLE : StrBuf = "OID_DOT11_CF_POLLABLE"; break; - case OID_DOT11_OPERATIONAL_RATE_SET : StrBuf = "OID_DOT11_OPERATIONAL_RATE_SET"; break; - case OID_DOT11_BEACON_PERIOD : StrBuf = "OID_DOT11_BEACON_PERIOD"; break; - case OID_DOT11_RTS_THRESHOLD : StrBuf = "OID_DOT11_RTS_THRESHOLD"; break; - case OID_DOT11_SHORT_RETRY_LIMIT : StrBuf = "OID_DOT11_SHORT_RETRY_LIMIT"; break; - case OID_DOT11_LONG_RETRY_LIMIT : StrBuf = "OID_DOT11_LONG_RETRY_LIMIT"; break; - case OID_DOT11_FRAGMENTATION_THRESHOLD : StrBuf = "OID_DOT11_FRAGMENTATION_THRESHOLD"; break; - case OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME : StrBuf = "OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME"; break; - case OID_DOT11_MAX_RECEIVE_LIFETIME : StrBuf = "OID_DOT11_MAX_RECEIVE_LIFETIME"; break; - case OID_DOT11_SUPPORTED_PHY_TYPES : StrBuf = "OID_DOT11_SUPPORTED_PHY_TYPES"; break; - case OID_DOT11_CURRENT_REG_DOMAIN : StrBuf = "OID_DOT11_CURRENT_REG_DOMAIN"; break; - case OID_DOT11_TEMP_TYPE : StrBuf = "OID_DOT11_TEMP_TYPE"; break; - case OID_DOT11_CURRENT_TX_ANTENNA : StrBuf = "OID_DOT11_CURRENT_TX_ANTENNA"; break; - case OID_DOT11_DIVERSITY_SUPPORT : StrBuf = "OID_DOT11_DIVERSITY_SUPPORT"; break; - case OID_DOT11_CURRENT_RX_ANTENNA : StrBuf = "OID_DOT11_CURRENT_RX_ANTENNA"; break; - case OID_DOT11_SUPPORTED_POWER_LEVELS : StrBuf = "OID_DOT11_SUPPORTED_POWER_LEVELS"; break; - case OID_DOT11_CURRENT_TX_POWER_LEVEL : StrBuf = "OID_DOT11_CURRENT_TX_POWER_LEVEL"; break; - case OID_DOT11_PERMANENT_ADDRESS : StrBuf = "OID_DOT11_PERMANENT_ADDRESS"; break; - case OID_DOT11_CURRENT_ADDRESS : StrBuf = "OID_DOT11_CURRENT_ADDRESS"; break; - case OID_DOT11_MAC_ADDRESS : StrBuf = "OID_DOT11_MAC_ADDRESS"; break; - case OID_DOT11_STATION_ID : StrBuf = "OID_DOT11_STATION_ID"; break; - - case OID_DOT11_CURRENT_CHANNEL : StrBuf = "OID_DOT11_CURRENT_CHANNEL"; break; - case OID_DOT11_CCA_MODE_SUPPORTED : StrBuf = "OID_DOT11_CCA_MODE_SUPPORTED"; break; - case OID_DOT11_CURRENT_CCA_MODE : StrBuf = "OID_DOT11_CURRENT_CCA_MODE"; break; - case OID_DOT11_ED_THRESHOLD : StrBuf = "OID_DOT11_ED_THRESHOLD"; break; - - case OID_DOT11_CURRENT_FREQUENCY : StrBuf = "OID_DOT11_CURRENT_FREQUENCY"; break; - case OID_DOT11_FREQUENCY_BANDS_SUPPORTED : StrBuf = "OID_DOT11_FREQUENCY_BANDS_SUPPORTED"; break; - case OID_DOT11_REG_DOMAINS_SUPPORT_VALUE : StrBuf = "OID_DOT11_REG_DOMAINS_SUPPORT_VALUE"; break; - case OID_DOT11_SUPPORTED_TX_ANTENNA : StrBuf = "OID_DOT11_SUPPORTED_TX_ANTENNA"; break; - case OID_DOT11_SUPPORTED_RX_ANTENNA : StrBuf = "OID_DOT11_SUPPORTED_RX_ANTENNA"; break; - case OID_DOT11_DIVERSITY_SELECTION_RX : StrBuf = "OID_DOT11_DIVERSITY_SELECTION_RX"; break; - case OID_DOT11_SUPPORTED_DATA_RATES_VALUE : StrBuf = "OID_DOT11_SUPPORTED_DATA_RATES_VALUE"; break; - case OID_DOT11_RF_USAGE : StrBuf = "OID_DOT11_RF_USAGE"; break; - case OID_DOT11_MAX_MAC_ADDRESS_STATES : StrBuf = "OID_DOT11_MAX_MAC_ADDRESS_STATES"; break; - case OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED : StrBuf = "OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED"; break; - case OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED : StrBuf = "OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED"; break; - case OID_DOT11_COUNTRY_STRING : StrBuf = "OID_DOT11_COUNTRY_STRING"; break; - case OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED : StrBuf = "OID_DOT11_SHORT_PREAMBLE_OPTION_IMPLEMENTED"; break; - case OID_DOT11_PBCC_OPTION_IMPLEMENTED : StrBuf = "OID_DOT11_PBCC_OPTION_IMPLEMENTED"; break; - case OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED : StrBuf = "OID_DOT11_ERP_PBCC_OPTION_IMPLEMENTED"; break; - case OID_DOT11_ERP_PBCC_OPTION_ENABLED : StrBuf = "OID_DOT11_ERP_PBCC_OPTION_ENABLED"; break; - case OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED : StrBuf = "OID_DOT11_DSSS_OFDM_OPTION_IMPLEMENTED"; break; - case OID_DOT11_DSSS_OFDM_OPTION_ENABLED : StrBuf = "OID_DOT11_DSSS_OFDM_OPTION_ENABLED"; break; - case OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED : StrBuf = "OID_DOT11_SHORT_SLOT_TIME_OPTION_IMPLEMENTED"; break; - case OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED : StrBuf = "OID_DOT11_SHORT_SLOT_TIME_OPTION_ENABLED"; break; - - case OID_DOT11_AUTO_CONFIG_ENABLED : StrBuf = "OID_DOT11_AUTO_CONFIG_ENABLED"; break; - case OID_DOT11_POWER_MGMT_REQUEST : StrBuf = "OID_DOT11_POWER_MGMT_REQUEST"; break; - case OID_DOT11_DESIRED_SSID_LIST : StrBuf = "OID_DOT11_DESIRED_SSID_LIST"; break; - case OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST : StrBuf = "OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST"; break; - case OID_DOT11_EXCLUDE_UNENCRYPTED : StrBuf = "OID_DOT11_EXCLUDE_UNENCRYPTED"; break; - case OID_DOT11_DESIRED_BSSID_LIST : StrBuf = "OID_DOT11_DESIRED_BSSID_LIST"; break; - case OID_DOT11_DESIRED_BSS_TYPE : StrBuf = "OID_DOT11_DESIRED_BSS_TYPE"; break; - case OID_DOT11_STATISTICS : StrBuf = "OID_DOT11_STATISTICS"; break; - case OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM : StrBuf = "OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM"; break; - case OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR : StrBuf = "OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR"; break; - case OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR : StrBuf = "OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR"; break; - case OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM : StrBuf = "OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM"; break; - case OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM : StrBuf = "OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM"; break; - case OID_DOT11_CIPHER_DEFAULT_KEY_ID : StrBuf = "OID_DOT11_CIPHER_DEFAULT_KEY_ID"; break; - case OID_DOT11_ENUM_ASSOCIATION_INFO : StrBuf = "OID_DOT11_ENUM_ASSOCIATION_INFO"; break; - case OID_DOT11_HARDWARE_PHY_STATE : StrBuf = "OID_DOT11_HARDWARE_PHY_STATE"; break; - case OID_DOT11_DESIRED_PHY_LIST : StrBuf = "OID_DOT11_DESIRED_PHY_LIST"; break; - case OID_DOT11_CURRENT_PHY_ID : StrBuf = "OID_DOT11_CURRENT_PHY_ID"; break; - case OID_DOT11_PMKID_LIST : StrBuf = "OID_DOT11_PMKID_LIST"; break; - case OID_DOT11_MEDIA_STREAMING_ENABLED : StrBuf = "OID_DOT11_MEDIA_STREAMING_ENABLED"; break; - case OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD : StrBuf = "OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD"; break; - case OID_DOT11_ACTIVE_PHY_LIST : StrBuf = "OID_DOT11_ACTIVE_PHY_LIST"; break; - case OID_DOT11_EXTSTA_CAPABILITY : StrBuf = "OID_DOT11_EXTSTA_CAPABILITY"; break; - case OID_DOT11_DATA_RATE_MAPPING_TABLE : StrBuf = "OID_DOT11_DATA_RATE_MAPPING_TABLE"; break; - case OID_DOT11_PRIVACY_EXEMPTION_LIST : StrBuf = "OID_DOT11_PRIVACY_EXEMPTION_LIST"; break; - case OID_DOT11_IBSS_PARAMS : StrBuf = "OID_DOT11_IBSS_PARAMS"; break; - case OID_DOT11_UNICAST_USE_GROUP_ENABLED : StrBuf = "OID_DOT11_UNICAST_USE_GROUP_ENABLED"; break; - case OID_DOT11_SAFE_MODE_ENABLED : StrBuf = "OID_DOT11_SAFE_MODE_ENABLED"; break; - case OID_DOT11_HIDDEN_NETWORK_ENABLED : StrBuf = "OID_DOT11_HIDDEN_NETWORK_ENABLED"; break; - - case OID_DOT11_SCAN_REQUEST : StrBuf = "OID_DOT11_SCAN_REQUEST"; break; - case OID_DOT11_RESET_REQUEST : StrBuf = "OID_DOT11_RESET_REQUEST"; break; - - case OID_DOT11_ENUM_BSS_LIST : StrBuf = "OID_DOT11_ENUM_BSS_LIST"; break; - case OID_DOT11_FLUSH_BSS_LIST : StrBuf = "OID_DOT11_FLUSH_BSS_LIST"; break; - case OID_DOT11_CONNECT_REQUEST : StrBuf = "OID_DOT11_CONNECT_REQUEST"; break; - case OID_DOT11_CIPHER_DEFAULT_KEY : StrBuf = "OID_DOT11_CIPHER_DEFAULT_KEY"; break; - case OID_DOT11_CIPHER_KEY_MAPPING_KEY : StrBuf = "OID_DOT11_CIPHER_KEY_MAPPING_KEY"; break; - case OID_DOT11_DISCONNECT_REQUEST : StrBuf = "OID_DOT11_DISCONNECT_REQUEST"; break; - - - case OID_GEN_INTERRUPT_MODERATION : StrBuf = "OID_GEN_INTERRUPT_MODERATION"; break; - case OID_DOT11_CHANNEL_AGILITY_ENABLED : StrBuf = "OID_DOT11_CHANNEL_AGILITY_ENABLED"; break; - case OID_DOT11_CHANNEL_AGILITY_PRESENT : StrBuf = "OID_DOT11_CHANNEL_AGILITY_PRESENT"; break; - - case OID_DOT11_ASSOCIATION_PARAMS : StrBuf = "OID_DOT11_ASSOCIATION_PARAMS"; break; - - case OID_DOT11_DTIM_PERIOD : StrBuf = "OID_DOT11_DTIM_PERIOD"; break; - case OID_DOT11_AVAILABLE_CHANNEL_LIST : StrBuf = "OID_DOT11_AVAILABLE_CHANNEL_LIST"; break; - case OID_DOT11_AVAILABLE_FREQUENCY_LIST : StrBuf = "OID_DOT11_AVAILABLE_FREQUENCY_LIST"; break; - case OID_DOT11_ENUM_PEER_INFO : StrBuf = "OID_DOT11_ENUM_PEER_INFO"; break; - case OID_DOT11_DISASSOCIATE_PEER_REQUEST : StrBuf = "OID_DOT11_DISASSOCIATE_PEER_REQUEST"; break; - case OID_DOT11_INCOMING_ASSOCIATION_DECISION : StrBuf = "OID_DOT11_INCOMING_ASSOCIATION_DECISION"; break; - case OID_DOT11_ADDITIONAL_IE : StrBuf = "OID_DOT11_ADDITIONAL_IE"; break; - case OID_DOT11_WPS_ENABLED : StrBuf = "OID_DOT11_WPS_ENABLED"; break; - case OID_DOT11_START_AP_REQUEST : StrBuf = "OID_DOT11_START_AP_REQUEST"; break; - - case OID_DOT11_CREATE_MAC : StrBuf = "OID_DOT11_CREATE_MAC"; break; - case OID_DOT11_DELETE_MAC : StrBuf = "OID_DOT11_DELETE_MAC"; break; - - case OID_PM_ADD_WOL_PATTERN : StrBuf = "OID_PM_ADD_WOL_PATTERN"; break; - case OID_PM_REMOVE_WOL_PATTERN : StrBuf = "OID_PM_REMOVE_WOL_PATTERN"; break; - case OID_PM_PARAMETERS : StrBuf = "OID_PM_PARAMETERS"; break; - case OID_PM_ADD_PROTOCOL_OFFLOAD : StrBuf = "OID_PM_ADD_PROTOCOL_OFFLOAD"; break; - case OID_PM_GET_PROTOCOL_OFFLOAD : StrBuf = "OID_PM_GET_PROTOCOL_OFFLOAD"; break; - case OID_PM_REMOVE_PROTOCOL_OFFLOAD : StrBuf = "OID_PM_REMOVE_PROTOCOL_OFFLOAD"; break; - - - case OID_RECEIVE_FILTER_SET_FILTER : StrBuf = "OID_RECEIVE_FILTER_SET_FILTER"; break; - case OID_RECEIVE_FILTER_CLEAR_FILTER : StrBuf = "OID_RECEIVE_FILTER_CLEAR_FILTER"; break; - - case OID_DOT11_WFD_DEVICE_CAPABILITY : StrBuf = "OID_DOT11_WFD_DEVICE_CAPABILITY"; break; - case OID_DOT11_WFD_GROUP_OWNER_CAPABILITY : StrBuf = "OID_DOT11_WFD_GROUP_OWNER_CAPABILITY"; break; - case OID_DOT11_WFD_DEVICE_INFO : StrBuf = "OID_DOT11_WFD_DEVICE_INFO"; break; - case OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST : StrBuf = "OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST"; break; - case OID_DOT11_WFD_DISCOVER_REQUEST : StrBuf = "OID_DOT11_WFD_DISCOVER_REQUEST"; break; - case OID_DOT11_WFD_ENUM_DEVICE_LIST : StrBuf = "OID_DOT11_WFD_ENUM_DEVICE_LIST"; break; - case OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY : StrBuf = "OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY"; break; - case OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL : StrBuf = "OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL"; break; - case OID_DOT11_WFD_ADDITIONAL_IE : StrBuf = "OID_DOT11_WFD_ADDITIONAL_IE"; break; - case OID_DOT11_WFD_FLUSH_DEVICE_LIST : StrBuf = "OID_DOT11_WFD_FLUSH_DEVICE_LIST"; break; - case OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST : StrBuf = "OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST"; break; - case OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE : StrBuf = "OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE"; break; - case OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION : StrBuf = "OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION"; break; - case OID_DOT11_WFD_SEND_INVITATION_REQUEST : StrBuf = "OID_DOT11_WFD_SEND_INVITATION_REQUEST"; break; - case OID_DOT11_WFD_SEND_INVITATION_RESPONSE : StrBuf = "OID_DOT11_WFD_SEND_INVITATION_RESPONSE"; break; - case OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST : StrBuf = "OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST"; break; - case OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE : StrBuf = "OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE"; break; - case OID_DOT11_WFD_STOP_DISCOVERY : StrBuf = "OID_DOT11_WFD_STOP_DISCOVERY"; break; - - case OID_DOT11_WFD_DESIRED_GROUP_ID : StrBuf = "OID_DOT11_WFD_DESIRED_GROUP_ID"; break; - case OID_DOT11_WFD_START_GO_REQUEST : StrBuf = "OID_DOT11_WFD_START_GO_REQUEST"; break; - case OID_DOT11_WFD_GROUP_START_PARAMETERS : StrBuf = "OID_DOT11_WFD_GROUP_START_PARAMETERS"; break; - case OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST : StrBuf = "OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST"; break; - case OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST : StrBuf = "OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST"; break; - case OID_DOT11_WFD_GROUP_JOIN_PARAMETERS : StrBuf = "OID_DOT11_WFD_GROUP_JOIN_PARAMETERS"; break; - case OID_DOT11_WFD_GET_DIALOG_TOKEN : StrBuf = "OID_DOT11_WFD_GET_DIALOG_TOKEN"; break; - - case OID_PACKET_COALESCING_FILTER_MATCH_COUNT : StrBuf = "OID_PACKET_COALESCING_FILTER_MATCH_COUNT"; break; - - case OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED : StrBuf = "OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED"; break; - case OID_DOT11_POWER_MGMT_MODE_STATUS : StrBuf = "OID_DOT11_POWER_MGMT_MODE_STATUS"; break; - case OID_DOT11_OFFLOAD_NETWORK_LIST : StrBuf = "OID_DOT11_OFFLOAD_NETWORK_LIST"; break; - - case OID_RT_PRO8187_WI_POLL : StrBuf = "OID_RT_PRO8187_WI_POLL"; break; - case OID_RT_DEVICE_ID_INFO : StrBuf = "OID_RT_DEVICE_ID_INFO"; break; - - default: - StrBuf = "UNKNOWN"; - break; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("[OID], N6C_DOT11_DUMP_OID: %#x, %s\n", Oid, StrBuf)); -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.h b/network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.h deleted file mode 100644 index 4081b3de..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Oids.h +++ /dev/null @@ -1,195 +0,0 @@ - -#ifndef __N6C_OIDS_H_FILE -#define __N6C_OIDS_H_FILE - - -MINIPORT_DIRECT_OID_REQUEST N6CDirectOidRequest; -MINIPORT_CANCEL_DIRECT_OID_REQUEST N6CCancelDirectOidRequest; - -NDIS_OID* N6GetSupportedOids(); - -ULONG N6GetSupportedOidsLength(); - -VOID N6C_DOT11_DUMP_OID(NDIS_OID Oid); - -NDIS_STATUS -N6C_METHOD_OID_DOT11_RESET_REQUEST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6C_METHOD_OID_DOT11_RECV_SENSITIVITY_LIST( - IN PADAPTER pTargetAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -NDIS_STATUS -N6CValidateOIDCorrectness( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_RESET_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_OPERATION_MODE( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_DESIRED_PHY_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_AUTO_CONFIG_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_BEACON_PERIOD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_DTIM_PERIOD( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_DESIRED_SSID_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_GEN_CURRENT_PACKET_FILTER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_CHANNEL( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_DISCONNECT_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_CONNECT_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_GEN_LINK_PARAMETERS( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_SAFE_MODE_ENABLED( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_PHY_ID( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_GEN_SUPPORTED_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_GEN_VENDOR_DRIVER_VERSION( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_PNP_CAPABILITIES( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_PNP_QUERY_POWER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_PNP_ENABLE_WAKE_UP( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); -NDIS_STATUS -N6C_OID_DOT11_CURRENT_TX_ANTENNA( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_CURRENT_RX_ANTENNA( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_DOT11_SUPPORTED_RX_ANTENNA( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_PNP_ADD_WAKE_UP_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_PNP_REMOVE_WAKE_UP_PATTERN( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); - -NDIS_STATUS -N6C_OID_PNP_SET_POWER( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest -); -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.c b/network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.c deleted file mode 100644 index 5858ef66..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.c +++ /dev/null @@ -1,2338 +0,0 @@ -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - N6C_PlatformDef.c - -Abstract: - Common implemetation of function defined in PlatformDef.h - for NDIS6 PCI and USB. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2007-03-29 Rcnjko Create. - 2007-05-18 Rcnjko Move common implementation from USB\ and PCI\ to here. - ---*/ - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N6C_PlatformDef.tmh" -#endif - -RT_DRIVER_CONTEXT GlobalRtDriverContext = {0}; - -u8Byte RTL_AllocateMemory_count = 0; -u8Byte RTL_AllocateMemory_Len = 0; -u8Byte RTL_FreeMemory_count = 0; -u8Byte RTL_FreeMemory_Len = 0; - -//============================================================================= -// Prototype of protected function. -//============================================================================= -VOID -ndis6TimerCallback( - IN PVOID SystemSpecific1, - IN PVOID FunctionContext, - IN PVOID SystemSpecific2, - IN PVOID SystemSpecific3 - ); - -VOID -Ndis6WorkItemCallback( - IN PVOID pWrapperContext, - IN NDIS_HANDLE Handle - ); - -VOID -Ndis6LeaveCallbackOfWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ); - -//============================================================================= -// End of Prototype of protected function. -//============================================================================= - -//============================================================================= -// Private function. -//============================================================================ - -// -// Description: -// The callback routine when NdisSetTimer is executed. -// This routine has various settings to prevent race condition of executing the user specified timer routine. -// Sync from 818xB. By Bruce, 2008-03-11. -// -VOID -ndis6TimerCallback( - IN PVOID SystemSpecific1, - IN PVOID FunctionContext, - IN PVOID SystemSpecific2, - IN PVOID SystemSpecific3 - ) -{ - PRT_TIMER pTimer = (PRT_TIMER)FunctionContext; - PADAPTER Adapter=(PADAPTER)pTimer->Adapter; - PPORT_COMMON_INFO pPortCommonInfo = Adapter->pPortCommonInfo; - BOOLEAN bTimerCanceled = FALSE; - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("=====>Ndis6TimerCallback(%s), status(%#x), ActiveTimerCallbackCount(%d)\n", pTimer->szID, pTimer->Status, pPortCommonInfo->ActiveTimerCallbackCount)); - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - if(pTimer->Status & (RT_TIMER_STATUS_RELEASED)) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("ndis6TimerCallback(): TimerName: %s: This timer has been released! \n", pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return ; - } - // - // Set RT_TIMER_STATUS_FIRED. - // - pTimer->Status |= RT_TIMER_STATUS_FIRED; - - // - // Clear RT_TIMER_STATUS_SET flag before pTimer->CallBackFunc(pTimer), - // because we might schedule the same timer again there. - // - pTimer->Status &= ( ~(RT_TIMER_STATUS_SET | RT_TIMER_STATUS_CANCEL_NG) ); - - pTimer->TimerStallSlotCount = 0;// For timer stall checking mechanism, added by Roger, 2007.05.16. - - - // - // Execute callback function. - // - if(!Adapter->bDriverStopped) - { - pPortCommonInfo->ActiveTimerCallbackCount++; - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - pTimer->CallBackFunc(pTimer); - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - pPortCommonInfo->ActiveTimerCallbackCount--; - } - - - // - // Clear RT_TIMER_STATUS_FIRED - // - pTimer->Status &= (~RT_TIMER_STATUS_FIRED); - - // - // Check if driver is waiting us to unload. - // - if(pPortCommonInfo->ActiveTimerCallbackCount == 0) - NdisSetEvent(&(pPortCommonInfo->AllTimerCompletedEvent)); - - if(pTimer->Status & RT_TIMER_STATUS_PERIODIC) - { - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - PlatformSetPeriodicTimer(pTimer->Adapter, pTimer, pTimer->msDelay); - } - else - { - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - } - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("<=====Ndis6TimerCallback(%s), status(%#x), ActiveTimerCallbackCount(%d)\n", pTimer->szID, pTimer->Status, pPortCommonInfo->ActiveTimerCallbackCount)); -} - -// -// Description: -// The callback routine when NdisScheduleWorkitem is executed. -// Sync from 818xB, by Bruce, 2008-12-01. -// -VOID -Ndis6WorkItemCallback( - IN PVOID pWrapperContext, - IN NDIS_HANDLE Handle - ) -{ - PRT_WORK_ITEM pRtWorkItem = (PRT_WORK_ITEM)pWrapperContext; - - pRtWorkItem->CallbackFunc(pRtWorkItem->pContext); - - Ndis6LeaveCallbackOfWorkItem(pRtWorkItem); -} - -// -// Description: -// Post processing of before leaving callback function of a work time. -// Maybe we can handle queued requests of this workitem here. -// 2006.09.28, by shien chang. -// -VOID -Ndis6LeaveCallbackOfWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ) -{ - PPLATFORM_EXT pPlatformExt = pRtWorkItem->pPlatformExt; - - if( pPlatformExt == NULL ) - return ; - - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - - pRtWorkItem->RefCount--; - - if(pRtWorkItem->RefCount == 0) - NdisSetEvent( &(pPlatformExt->Event) ); - - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); -} - - -//============================================================================= -// End of Private function. -//============================================================================ - - -//============================================================================= -// Public function. -//============================================================================ - - - -//============================================================================= -// Timer function. -//============================================================================ - -// -// Description: -// Initialize the timer and associate the callback routine to thsi timer. -// Sync from 818xB. By Bruce, 2008-12-01. -// -VOID -PlatformInitializeTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer, - IN RT_TIMER_CALL_BACK CallBackFunc, - IN PVOID pContext, - IN const char* szID - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_TIMER_HANDLE pHandle; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - // - // 060120, rcnjko: - // NdisMInitializeTimer() is noly allowed in context of PASSIVE level, - // otherwise, it might cause OS deadlock. 2006.01.20, by rcnjko. - // - // 061024, rcnjko: - // Set RT_TIMER_STATUS_INITIALIZED before NdisMInitializeTimer() to - // prevent race condition. - // - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - pTimer->Status &= (~RT_TIMER_STATUS_RELEASED); - if( !(pTimer->Status & RT_TIMER_STATUS_INITIALIZED) ) - { - pHandle = &(pTimer->Handle); - - pTimer->Adapter = pAdapter; - pTimer->CallBackFunc = CallBackFunc; - pTimer->Status = RT_TIMER_STATUS_INITIALIZED; - pTimer->msDelay = 0; - pTimer->Context = pContext; - pTimer->TimerStallSlotCount = 0; - - PlatformZeroMemory(pTimer->szID, 36); - if(szID != NULL) - { - ASCII_STR_COPY(pTimer->szID, szID, 36); - } - - N6_ASSIGN_OBJECT_HEADER( - pHandle->TimerCharacteristics.Header, - NDIS_OBJECT_TYPE_TIMER_CHARACTERISTICS, - NDIS_TIMER_CHARACTERISTICS_REVISION_1, - NDIS_SIZEOF_TIMER_CHARACTERISTICS_REVISION_1 - ); - - // This should use ASCII code for tagging ------------- - pHandle->TimerCharacteristics.AllocationTag = '2918'; - pHandle->TimerCharacteristics.TimerFunction = ndis6TimerCallback; - pHandle->TimerCharacteristics.FunctionContext = pTimer; - - - ndisStatus = NdisAllocateTimerObject( - pNdisCommon->hNdisAdapter, - &pHandle->TimerCharacteristics, - &pHandle->NdisTimerHandle - ); - - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - DebugResourceTimerCreateTimerMirror( - pAdapter, - pPortCommonInfo->uNumberOfAllocatedTimers, - pTimer - ); - - pPortCommonInfo->uNumberOfAllocatedTimers++; - - N6CTimerResourceInsert(pAdapter, pTimer); // This timer has been inserted for further handling - } - else - { - pTimer->Status |= RT_TIMER_STATUS_RELEASED; - } - } - else - { - RT_ASSERT(pTimer->Status&RT_TIMER_STATUS_INITIALIZED, - ("Timer %s have been assert!!!!\n",pTimer->szID)); - } - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); -} - - -BOOLEAN -PlatformSetPeriodicTimer( - PVOID Adapter, - PRT_TIMER pTimer, - u4Byte msDelay - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - LARGE_INTEGER fireTime; - - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("--->PlatformSetTimer() msDelay(%d)\n",msDelay)); - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - if(pTimer->Status & RT_TIMER_STATUS_RELEASED) - { - RT_TRACE(COMP_SYSTEM, DBG_WARNING, ("PlatformSetTimer(): timer(%s) is alreadyreleased!!!\n", pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(!(pTimer->Status & RT_TIMER_STATUS_INITIALIZED)) - { - RT_ASSERT(FALSE, ("PlatformSetTimer(): timer(%s) is not yet initialized!!! Status 0x%x\n", pTimer->szID, pTimer->Status)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(RT_DRIVER_HALT(pAdapter)) - { - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(pTimer->Status & RT_TIMER_STATUS_SUSPENDED) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformSetPeriodicTimer(): timer(%s) is paused!!!\n", pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } -/* - //fix the bug that outstandingcount cannot be zero caused by cancel timer failure, vivi, 20100526 - //We encounter a condition on 92du like this(BlinkTimer): - //set timer -->cancel timer( but failed)-->set timer-->callback function-->set timer-->callback function; - //In this flow, the value of outstandingcount will be: 1-->1-->2-->1-->2-->1, - //the value can not be zero finally, then driver will wait for outstandingcount to be zero, and then timerout - //now we fix this issue by this method, when RT_TIMER_STATUS_CANCEL_NG has been set, we can not settimer, - //until callback function has been executed - if(pTimer->Status&RT_TIMER_STATUS_CANCEL_NG) - return FALSE; -*/ - // - // 061024, rcnjko: - // We shall schedule the timer before setting RT_TIMER_STATUS_SET - // to make sure this flag is set only iff corresponding timer object - // had been scheduled (i.e. placed in timer queued) and - // is not yet fired (i.e. execute its callback function). - // - // 2007.04.30, Roger: - // In Win98Me, Sometimes we could not set timer successful due to system out resource, - // but we have no idea about that, i.e, NdisMSetTimer() success or not. So we should monitor some - // timer's resolution time to avoid this problem. - // - - pTimer->msDelay = msDelay; - pTimer->TimerStallSlotCount = 0; - - // This timer is counted by the previous timer or not. - if(!(pTimer->Status & RT_TIMER_STATUS_SET)) - { - pTimer->Status |= RT_TIMER_STATUS_PERIODIC | RT_TIMER_STATUS_SET; - } - - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("PlatformSetTimer(%s): Status(%#x)\n", - pTimer->szID, pTimer->Status - )); - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - // - // We schedule timer after timer status are configured - // to prevent callback routine happen before PlatformSetTimer() done. - // - - fireTime.QuadPart = Int32x32To64((LONG)msDelay, -10000); - return NdisSetTimerObject(pTimer->Handle.NdisTimerHandle, fireTime, 0,NULL); -} - - -// -// Description: -// Schedule the timer by the following reles. -// (1) If the previous timer had been scheduled and is not fired yet: -// NdisSetTimer() cancel the previous one and schedule the current input timer according to the new -// timer interval. -// (2) If the previous timer had been fired and the callback routine is not complete yet: -// The input timer will be inserted into the system queue. After the previous callback routine is complete, then -// (2.1) the system schedule the new timer if the msDelay of the new timer had been expired; or -// (2.2) the system wait until the specified interval is expired. -// Note: -// According to the rules described above, the timer can set twice at the same at most, one is running in -// routine and another is in the queue. So we should maintain the number of timers carefully. -// By Bruce, 2008-12-01. -// -BOOLEAN -PlatformSetTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer, - IN u4Byte msDelay - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - BOOLEAN bIsQueued = FALSE; - LARGE_INTEGER fireTime; - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("=====>PlatformSetTimer(%s), status(%#x), msDelay(%d)\n", pTimer->szID, pTimer->Status, msDelay)); - - if(pTimer->Status & RT_TIMER_STATUS_RELEASED) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformSetTimer(): timer(%s) is alreadyreleased!!!\n", pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(!(pTimer->Status & RT_TIMER_STATUS_INITIALIZED)) - { - RT_ASSERT(FALSE, ("PlatformSetTimer(): timer(%s) is not yet initialized!!! Status 0x%x\n", pTimer->szID, pTimer->Status)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(pTimer->Status & RT_TIMER_STATUS_SUSPENDED) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformSetTimer(): timer(%s) is paused!!!\n", pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(RT_DRIVER_HALT(pAdapter) && ! HAS_REQUEST_TO_HANDLE(pAdapter)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("PlatformSetTimer(): return because bDriverStopped=%d or bSurpriseRemoved=%d\n", pAdapter->bDriverStopped, pAdapter->bSurpriseRemoved)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - // - // 061024, rcnjko: - // We shall schedule the timer before setting RT_TIMER_STATUS_SET - // to make sure this flag is set only iff corresponding timer object - // had been scheduled (i.e. placed in timer queued) and - // is not yet fired (i.e. execute its callback function). - // - // 2007.04.30, Roger: - // In Win98Me, Sometimes we could not set timer successful due to system out resource, - // but we have no idea about that, i.e, NdisMSetTimer() success or not. So we should monitor some - // timer's resolution time to avoid this problem. - // - - pTimer->msDelay = msDelay; - pTimer->TimerStallSlotCount = 0; - - // This timer is counted by the previous timer or not. - if(!(pTimer->Status & RT_TIMER_STATUS_SET)) - { - pTimer->Status |= RT_TIMER_STATUS_SET; - } - - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("PlatformSetTimer(%s): Status(%#x)\n", - pTimer->szID, - pTimer->Status)); - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - // - // We schedule timer after timer status are configured - // to prevent callback routine happen before PlatformSetTimer() done. - // - fireTime.QuadPart = Int32x32To64((LONG)msDelay, -10000); - bIsQueued = NdisSetTimerObject(pTimer->Handle.NdisTimerHandle, fireTime, 0,NULL); - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("<=====PlatformSetTimer(%s), status(%#x), bIsQueued(%d)\n", pTimer->szID, pTimer->Status, bIsQueued)); - return TRUE; -} - -// -// Description: -// Cancel the input timer. -// Note: -// This function only cancel the immediately preceding call to NdisMSetTimer if the interval -// given to NdisMSetTimer has not yet expired. -// A call to NdisMCancelTimer while the MiniportTimer function is running has -// no effect on the execution of MiniportTimer. It continues to run until it returns control. -// In other words, PlatformCancelTimer() cannot cancel the running thread. -// Sync from 818xB. By Bruce, 2008-12-01. -// -BOOLEAN -PlatformCancelTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - BOOLEAN bCanceled = FALSE; - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - -// RT_ASSERT((pTimer->Status & RT_TIMER_STATUS_INITIALIZED), ("Cancel timer without initialize !!\n")) - - if( !(pTimer->Status & RT_TIMER_STATUS_INITIALIZED) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: This timer does not initialized! \n", __FUNCTION__)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(pTimer->Status & (RT_TIMER_STATUS_RELEASED)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: TimerName: %s: This timer has been released! \n", __FUNCTION__, pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return TRUE; - } - - // - // 061024, rcnjko: - // We reset RT_TIMER_STATUS_SET before canceling the timer object - // to make sure we only try to cancel is only cancel once. - // Besides, OutStandingTimerCnt is decreased here if we cancel the - // timer object sucessfully, otherwise, it will be decreased in the - // end of callback function. - // - // 2007.04.30, Roger: - // In Win98Me, Sometimes we could not set timer successful due to system out resource, - // but we have no idea about that and still set status to RT_TIMER_STATUS_SET in PlatformSetTimer(). - // So we should pay attention to this condition and set correct reference-count and outstanding-count. - // - if((pTimer->Status & (RT_TIMER_STATUS_SET) || pTimer->Status & (RT_TIMER_STATUS_PERIODIC))) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("=====>PlatformCancelTimer(%s), status(%#x)\n", pTimer->szID, pTimer->Status)); - - // - // Clear RT_TIMER_STATUS_SET flag to make sure we only cancel it once after set. - // - //pTimer->Status &= (~RT_TIMER_STATUS_SET); //YJ,move,120112 - pTimer->Status &= (~RT_TIMER_STATUS_PERIODIC); - //NdisReleaseSpinLock(&(pNdisCommon->TimerLock)); //YJ,del,120112 - - bCanceled = NdisCancelTimerObject(pTimer->Handle.NdisTimerHandle); - - //NdisAcquireSpinLock(&(pNdisCommon->TimerLock)); //YJ,del,120112 - if(!bCanceled) - { // Timer had already been fired or was not set successful before, by Roger. 2007.04.30. - - pTimer->Status |= RT_TIMER_STATUS_CANCEL_NG; - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - RT_TRACE(COMP_SYSTEM, DBG_WARNING, ("<=====PlatformCancelTimer(%s), cancel NG, status(%#x)\n", pTimer->szID, pTimer->Status)); - } - else - { // Successfully cancel the timer. - pTimer->Status &= (~RT_TIMER_STATUS_SET); //YJ,move,120111 - - pTimer->TimerStallSlotCount = 0; // For Timer stall checking mechanism, by Roger. 2007.05.16. - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("<=====PlatformCancelTimer(%s), cancel OK, status(%#x)\n", pTimer->szID, pTimer->Status)); - } - } - else - { - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - RT_TRACE(COMP_SYSTEM, DBG_WARNING, ("PlatformCancelTimer(%s), timer is NOT set case: status(%#x)!!!\n", pTimer->szID, pTimer->Status)); - } - - return bCanceled; -} - - -// -// Description: -// Release this timer and prohibit from setting timer. -// In general, we can release timer to set released flag to prohibit setting a timer except -// the timer is initialized again. -// By Bruce, 2008-12-01. -// -BOOLEAN -PlatformReleaseTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer - ) -{ - u4Byte i = 0; - BOOLEAN bDoRelease = FALSE; - BOOLEAN bCanceled = FALSE; - PADAPTER pAdapter = (PADAPTER)Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - RT_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL, ("Timer Releasing Should be Called in PASSIVE_LEVEL!\n")); - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - if( !(pTimer->Status & RT_TIMER_STATUS_INITIALIZED) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: This timer does not initialized! \n", __FUNCTION__)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(!(pTimer->Status & RT_TIMER_STATUS_RELEASED)) - { - bDoRelease = TRUE; - // Clean System Timer Queue - if( NdisCancelTimerObject(pTimer->Handle.NdisTimerHandle) == FALSE ) - { - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - // Clean System DPC Queue for All Processors - KeFlushQueuedDpcs(); - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - } - } - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - if(bDoRelease) - { - DebugResourceTimerReleaseTimerMirror(pAdapter, pTimer); - - N6CTimerResourceRemove(pAdapter, pTimer); - - // Release System Timer - NdisFreeTimerObject(pTimer->Handle.NdisTimerHandle); - - pTimer->Status = RT_TIMER_STATUS_RELEASED; - - pPortCommonInfo->uNumberOfReleasedTimers++; - } - - return TRUE; -} - - -// -// Description: -// - Timer resource management for SoC off on Windows Mobile platform -// - This routine will cancel and suspend specific timer -// -// Assumption: -// - Resource allocation for the TimerLock is required before calling this function. -// - TimerLock is not acquired before calling this function -// -// 2016.01.15, created by Roger. -// -BOOLEAN -PlatformSuspendTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - BOOLEAN bCanceled = FALSE; - - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - pTimer->PreviousStatus = pTimer->Status; - - if( !(pTimer->Status & RT_TIMER_STATUS_INITIALIZED) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: This timer does not initialized! \n", __FUNCTION__)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(pTimer->Status & (RT_TIMER_STATUS_RELEASED)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("%s: TimerName: %s: This timer has been released! \n", __FUNCTION__, pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return TRUE; -} - - if((pTimer->Status & (RT_TIMER_STATUS_SET) || pTimer->Status & (RT_TIMER_STATUS_PERIODIC))) - { - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("=====>PlatformSuspendTimer(%s), status(%#x)\n", pTimer->szID, pTimer->Status)); - - pTimer->Status &= (~RT_TIMER_STATUS_PERIODIC); - - - #if (IS_OS_WINCE) // WinCE7 only supports N5 Timer Interface - NdisMCancelTimer(&(pTimer->Handle.NdisTimerHandle), &bCanceled); - #else - bCanceled = NdisCancelTimerObject(pTimer->Handle.NdisTimerHandle); - #endif - - if(!bCanceled) - { // Timer had already been fired or was not set successful before, by Roger. 2007.04.30. - - pTimer->Status |= RT_TIMER_STATUS_CANCEL_NG; - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - RT_TRACE(COMP_SYSTEM, DBG_WARNING, ("<=====PlatformSuspendTimer(%s), cancel NG, status(%#x)\n", pTimer->szID, pTimer->Status)); - } - else - { // Successfully cancel the timer. - - // - // Clear RT_TIMER_STATUS_SET flag to make sure we only cancel it once after set. - // - pTimer->Status &= (~RT_TIMER_STATUS_SET); //YJ,move,120111 - - pTimer->TimerStallSlotCount = 0; // For Timer stall checking mechanism, by Roger. 2007.05.16. - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("<=====PlatformSuspendTimer(%s), cancel OK, status(%#x)\n", pTimer->szID, pTimer->Status)); - } - pTimer->Status |= RT_TIMER_STATUS_SUSPENDED; - } - else - { - pTimer->Status |= RT_TIMER_STATUS_SUSPENDED; - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("PlatformSuspendTimer(%s), timer is NOT set case: status(%#x)!!!\n", pTimer->szID, pTimer->Status)); - } - - return bCanceled; -} - - -// -// Description: -// - Timer resource management for SoC off on Windows Mobile platform -// - This routine will resume suspended timer -// - Periodic timer will be rescheduing within this routine according to previous satus -// -// Assumption: -// - Resource allocation for the TimerLock is required before calling this function. -// - TimerLock is not acquired before calling this function -// -// 2016.01.15, created by Roger. -// -BOOLEAN -PlatformResumeTimer( - IN PVOID Adapter, - IN PRT_TIMER pTimer - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - BOOLEAN bCanceled = TRUE; - u4Byte PreviousTimerStatus = 0; - - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - if( !(pTimer->Status & RT_TIMER_STATUS_INITIALIZED) ) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("%s: This timer does not initialized! \n", __FUNCTION__)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(pTimer->Status & (RT_TIMER_STATUS_RELEASED)) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("%s: TimerName: %s: This timer has been released! \n", __FUNCTION__, pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - if(!(pTimer->Status & (RT_TIMER_STATUS_SUSPENDED))) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("%s: TimerName: %s: This timer had not been paused before, so timer resumption is not required.\n", __FUNCTION__, pTimer->szID)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - return FALSE; - } - - PreviousTimerStatus = pTimer->PreviousStatus; - - pTimer->Status &= ~RT_TIMER_STATUS_SUSPENDED; - pTimer->PreviousStatus = pTimer->Status; - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - if(PreviousTimerStatus & RT_TIMER_STATUS_PERIODIC){ - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("Reschedule Periodic Timer(%s), status(%#x)\n", pTimer->szID, PreviousTimerStatus)); - PlatformSetPeriodicTimer(pTimer->Adapter, pTimer, pTimer->msDelay); - } - - return bCanceled; -} - -// -// Description: -// Initialize the event and queue associated to the all timers. -// Assumption: -// PASSIVE_LEVEL -// Sync from 818xB. By Bruce, 2008-03-11. -// -VOID -N6InitTimerSync( - IN PVOID Adapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter((PADAPTER)Adapter); - PPORT_COMMON_INFO pPortCommonInfo = pDefaultAdapter->pPortCommonInfo; - - RT_TRACE(COMP_INIT, DBG_TRACE, ("---> PlatformInitTimerSync()\n")); - - pPortCommonInfo->ActiveTimerCallbackCount = 1; // Set default number of outstanding timer as 1. - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("=====>N6InitTimerSync(): Set ActiveTimerCallbackCount to 1 !\n")); - - PLATFORM_INIT_RT_SPINLOCK(pPortCommonInfo->TimerLock); - PLATFORM_INIT_RT_EVENT(pPortCommonInfo->AllTimerCompletedEvent); - - RT_ASSERT(pPortCommonInfo->uNumberOfAllocatedTimers == 0, ("N6InitTimerSync: pPortCommonInfo->uNumberOfAllocatedTimers != 0\n")); - RT_ASSERT(pPortCommonInfo->uNumberOfReleasedTimers == 0, ("N6InitTimerSync: pPortCommonInfo->uNumberOfReleasedTimers != 0\n")); - - pPortCommonInfo->uNumberOfAllocatedTimers = 0; - pPortCommonInfo->uNumberOfReleasedTimers = 0; - - N6CTimerResourceInit(Adapter); // Initialization for Timer resource handling - - RT_TRACE(COMP_INIT, DBG_TRACE, ("<--- PlatformInitTimerSync()\n")); -} - -VOID -N6WaitTimerSync( - IN PVOID Adapter -) -{ - PPORT_COMMON_INFO pPortCommonInfo = ((PADAPTER)Adapter)->pPortCommonInfo; - BOOLEAN bAllTimerCompleted = FALSE; - u4Byte i = 0; - - RT_TRACE(COMP_INIT, DBG_TRACE, ("---> N6WaitTimerSync()\n")); - - - RT_ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL, ("N6WaitTimerSync Should be Called in PASSIVE_LEVEL!\n")); - - // Clean System DPC Queue for All Processors - KeFlushQueuedDpcs(); - - PLATFORM_ACQUIRE_RT_SPINLOCK(pPortCommonInfo->TimerLock); - - pPortCommonInfo->ActiveTimerCallbackCount--; // Since we set default ActiveTimerCallbackCount as 1 N6InitTimerSync() - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("=====>N6WaitTimerSync(): ActiveTimerCallbackCount = %d!!!\n", pPortCommonInfo->ActiveTimerCallbackCount)); - - RT_ASSERT(pPortCommonInfo->ActiveTimerCallbackCount >= 0, ("pPortCommonInfo->ActiveTimerCallbackCount should not be negative !\n")); - - if(pPortCommonInfo->ActiveTimerCallbackCount > 0) - {// Wait for outstanding timer to complete all of timer callback functions - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6WaitTimerSync(): %d timer is outstanding, waiting...\n", pPortCommonInfo->ActiveTimerCallbackCount)); - - PLATFORM_RELEASE_RT_SPINLOCK(pPortCommonInfo->TimerLock); - - bAllTimerCompleted = PLATFORM_WAIT_RT_EVENT(pPortCommonInfo->AllTimerCompletedEvent, 2000); - - if(!bAllTimerCompleted) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("N6WaitTimerSync(): %d timer is outstanding, waiting time out !\n", pPortCommonInfo->ActiveTimerCallbackCount)); - } - - PLATFORM_RESET_RT_EVENT(pPortCommonInfo->AllTimerCompletedEvent); - } - else - { - PLATFORM_RELEASE_RT_SPINLOCK(pPortCommonInfo->TimerLock); - } - - PLATFORM_ACQUIRE_RT_SPINLOCK(pPortCommonInfo->TimerLock); - - if(((PADAPTER)Adapter)->MgntInfo.RegSuspendTimerInLowPwr) - pPortCommonInfo->ActiveTimerCallbackCount = 1; // Since sync method was finished, so reset default number of outstanding timer as 1. - - PLATFORM_RELEASE_RT_SPINLOCK(pPortCommonInfo->TimerLock); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6WaitTimerSync(): bAllTimerCompleted: %d, pPortCommonInfo->ActiveTimerCallbackCount: %d\n", bAllTimerCompleted, pPortCommonInfo->ActiveTimerCallbackCount)); - - RT_TRACE(COMP_INIT, DBG_TRACE, ("<--- N6WaitTimerSync()\n")); -} - -VOID -N6DeInitTimerSync( - IN PVOID Adapter - ) -{ - PADAPTER pAdapter = (PADAPTER) Adapter; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - BOOLEAN bAllTimerCompleted = TRUE; - - FunctionIn(COMP_INIT); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("pPortCommonInfo->uNumberOfAllocatedTimers: %d\n", pPortCommonInfo->uNumberOfAllocatedTimers)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("pPortCommonInfo->uNumberOfReleasedTimers: %d\n", pPortCommonInfo->uNumberOfReleasedTimers)); - RT_ASSERT(pPortCommonInfo->uNumberOfAllocatedTimers == pPortCommonInfo->uNumberOfReleasedTimers, ("Timer Leakage: Use DEBUG_RESOURCE_TIMER Flag to Debug!\n")); - if(pPortCommonInfo->uNumberOfAllocatedTimers != pPortCommonInfo->uNumberOfReleasedTimers) { - DebugResourceTimerDumpUnreleasedTimer(pAdapter); - } - PLATFORM_FREE_RT_SPINLOCK(pPortCommonInfo->TimerLock); - PLATFORM_FREE_RT_EVENT(pPortCommonInfo->AllTimerCompletedEvent); - - N6CTimerResourceDump(Adapter); -} - - - -//============================================================================= -// End timer function. -//============================================================================ - - - -VOID -N6CInitThread( - IN PVOID pContext) -{ - PADAPTER Adapter = (PADAPTER)pContext; - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bSupportUsbTxThread; - BOOLEAN bSupportUsbIOThread; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USB_TX_THREAD, (PBOOLEAN)&bSupportUsbTxThread); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USB_IO_THREAD, (PBOOLEAN)&bSupportUsbIOThread); - - NdisAllocateSpinLock(&(pNdisCommon->ThreadLock)); - NdisInitializeEvent(&(pNdisCommon->AllThreadCompletedEvent)); - - PlatformInitializeThread( - Adapter, - &pNdisCommon->InitializeAdapterThread, - (RT_THREAD_CALL_BACK)InitializeAdapterThread, - "InitializeAdapterThread", - FALSE, - 0, - NULL); - TX_InitThreads(Adapter); - - // - // SDIO Tx thread initialization - // - PlatformInitializeThread( - Adapter, - &pNdisCommon->TxHandleThread, - (RT_THREAD_CALL_BACK)N6SdioTxThreadCallback, - "N6SdioTxThreadCallback", - FALSE, - 0, - NULL); - - PlatformRunThread( - Adapter, - &pNdisCommon->TxHandleThread, - PASSIVE_LEVEL, - NULL); -#if RTL8723_SDIO_IO_THREAD_ENABLE - // - // SDIO Register IO thread initialization - // - PlatformInitializeThread( - Adapter, - &pNdisCommon->IOHandleThread, - (RT_THREAD_CALL_BACK)N6SdioIOThreadCallback, - "N6SdioIOThreadCallback", - FALSE, - 0, - NULL); - - PlatformRunThread( - Adapter, - &pNdisCommon->IOHandleThread, - PASSIVE_LEVEL, - NULL); -#endif - - CustomScan_Start(GET_CUSTOM_SCAN_INFO(Adapter)); -} - - -VOID -N6CDeInitThread( - IN PVOID pContext - ) -{ - PADAPTER Adapter = (PADAPTER)pContext; - - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bSupportUsbTxThread; - BOOLEAN bSupportUsbIOThread; - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USB_TX_THREAD, (PBOOLEAN)&bSupportUsbTxThread); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_USB_IO_THREAD, (PBOOLEAN)&bSupportUsbIOThread); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6CDeInitThread()\n")); - - PlatformWaitThreadEnd(Adapter,&(pNdisCommon->InitializeAdapterThread)); - PlatformCancelThread(Adapter, &(pNdisCommon->InitializeAdapterThread)); - PlatformReleaseThread(Adapter, &(pNdisCommon->InitializeAdapterThread)); - - TX_DeInitThreads(Adapter); - - // Cancel and release Tx handle thread - PlatformWaitThreadEnd(Adapter, &(pNdisCommon->TxHandleThread)); - PlatformCancelThread(Adapter, &(pNdisCommon->TxHandleThread)); - PlatformReleaseThread(Adapter, &(pNdisCommon->TxHandleThread)); -#if RTL8723_SDIO_IO_THREAD_ENABLE - // Cancel and release IO handle thread - PlatformWaitThreadEnd(Adapter, &(pNdisCommon->IOHandleThread)); - PlatformCancelThread(Adapter, &(pNdisCommon->IOHandleThread)); - PlatformReleaseThread(Adapter, &(pNdisCommon->IOHandleThread)); -#endif - - PlatformFreeWorkItem( &(Adapter->pPortCommonInfo->WdiData.TaskWorkItem) ); - PlatformFreeWorkItem( &(Adapter->pPortCommonInfo->WdiData.PropertyWorkItem) ); - - PlatformWaitThreadEnd(Adapter, &(Adapter->pPortCommonInfo->WdiData.TaskThread)); - PlatformCancelThread(Adapter, &(Adapter->pPortCommonInfo->WdiData.TaskThread)); - PlatformReleaseThread(Adapter, &(Adapter->pPortCommonInfo->WdiData.TaskThread)); - - PlatformWaitThreadEnd(Adapter, &(Adapter->pPortCommonInfo->WdiData.PropertyThread)); - PlatformCancelThread(Adapter, &(Adapter->pPortCommonInfo->WdiData.PropertyThread)); - PlatformReleaseThread(Adapter, &(Adapter->pPortCommonInfo->WdiData.PropertyThread)); - - PlatformWaitThreadEnd(Adapter, &(Adapter->RxNotifyThread)); - PlatformCancelThread(Adapter, &(Adapter->RxNotifyThread)); - PlatformReleaseThread(Adapter, &(Adapter->RxNotifyThread)); - - CustomScan_Stop(GET_CUSTOM_SCAN_INFO(Adapter)); - - NdisWaitEvent(&(pNdisCommon->AllThreadCompletedEvent),0); - NdisResetEvent(&(pNdisCommon->AllThreadCompletedEvent)); - NdisFreeSpinLock(&(pNdisCommon->ThreadLock)); -} - - - -//============================================================================= -// Workitem function. -//============================================================================ - -// -// Description: -// Initialize an RT_WORK_ITEM object. -// Sync from 818xB, by Bruce, 2008-03-13. -// -RT_STATUS -PlatformInitializeWorkItem( - IN PVOID Adapter, - IN PRT_WORK_ITEM pRtWorkItem, - IN RT_WORKITEM_CALL_BACK RtWorkItemCallback, - IN PVOID pContext, - IN const char* szID - ) -{ - PRT_NDIS6_COMMON pNdisCommon = ((PADAPTER)Adapter)->pNdisCommon; - PPLATFORM_EXT pPlatformExt = NULL; - RT_STATUS status = RT_STATUS_SUCCESS; - - RT_TRACE(COMP_DBG, DBG_LOUD, ("PlatformInitializeWorkItem(): %s\n", szID)); - - pRtWorkItem->Adapter = Adapter; - pRtWorkItem->pContext = pContext; - pRtWorkItem->CallbackFunc = RtWorkItemCallback; - pRtWorkItem->Handle = NdisAllocateIoWorkItem(pNdisCommon->hNdisAdapter); - if (pRtWorkItem->Handle == NULL) - { - PlatformZeroMemory( pRtWorkItem, sizeof(RT_WORK_ITEM) ); - pRtWorkItem->bFree = TRUE; - RT_TRACE(COMP_DBG, DBG_SERIOUS, ("PlatformInitializeWorkItem(): failed to NdisAllocateIoWorkItem: %s\n", szID)); - return RT_STATUS_RESOURCE; - } - - pRtWorkItem->RefCount = 1; - - // - // Allocate the platform dependent extension. - // 2006.09.28, by shien chang. - // - pRtWorkItem->pPlatformExt = NULL; - status = PlatformAllocateMemory( Adapter, (PVOID*)(&pPlatformExt), sizeof(PLATFORM_EXT) ); - if (status != RT_STATUS_SUCCESS) - { - NdisFreeIoWorkItem(pRtWorkItem->Handle); - PlatformZeroMemory( pRtWorkItem, sizeof(RT_WORK_ITEM) ); - pRtWorkItem->bFree = TRUE; - RT_TRACE(COMP_DBG, DBG_SERIOUS, ("PlatformInitializeWorkItem(): failed to allocate platform extensions: %s\n", szID)); - return RT_STATUS_RESOURCE; - } - - PlatformZeroMemory( pPlatformExt, sizeof(PLATFORM_EXT) ); - pRtWorkItem->pPlatformExt = pPlatformExt; - - NdisInitializeEvent( &(pPlatformExt->Event) ); - - NdisAllocateSpinLock( &(pPlatformExt->Lock) ); - - PlatformZeroMemory(pRtWorkItem->szID, 36); - if(szID != NULL) - { - ASCII_STR_COPY(pRtWorkItem->szID, szID, 36); - } - - pRtWorkItem->bFree = FALSE; - return status; -} - - - - - -// -// Description: -// Start RT_WORK_ITEM operation. -// This function only be done when RT_WORK_ITEM is stopeed and initialized. -// -VOID -PlatformStartWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ) -{ - PPLATFORM_EXT pPlatformExt = (PPLATFORM_EXT)pRtWorkItem->pPlatformExt; - - if( pPlatformExt == NULL ) - return; - - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - // Check if Workitem is initialized. - if(pRtWorkItem->Adapter== NULL || pRtWorkItem->CallbackFunc==NULL || pPlatformExt==NULL) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - - // Check if Workitem is started. - if(pRtWorkItem->RefCount > 0) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - - if(pRtWorkItem->bFree) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - - // Enable Workitem. - pRtWorkItem->RefCount = 1; - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); -} - - -// -// Description: -// Wait the workitem complete if it is running and stop the workitem from scheduling it. -// -VOID -PlatformStopWorkItem( - PRT_WORK_ITEM pRtWorkItem - ) -{ - PPLATFORM_EXT pPlatformExt = (PPLATFORM_EXT)pRtWorkItem->pPlatformExt; - - if( pPlatformExt == NULL ) - return; - - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - - // Check if Workitem is initialized. - if(pRtWorkItem->Adapter== NULL || pRtWorkItem->CallbackFunc==NULL || pPlatformExt==NULL || pRtWorkItem->bFree) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - - if(pRtWorkItem->bFree) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - - RT_TRACE(COMP_DBG, DBG_LOUD, ("===> PlatformStopWorkItem(): %s\n", pRtWorkItem->szID)); - - // This workitem has never been initialized or stopped already. - if(pRtWorkItem->RefCount == 0) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - - pRtWorkItem->RefCount --; - if(pRtWorkItem->RefCount > 0) - { - RT_TRACE(COMP_DBG, DBG_LOUD, ("PlatformStopWorkItem(): %s, some workitem is pending, RefCount: %d\n", pRtWorkItem->szID, pRtWorkItem->RefCount)); - - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - - while(TRUE) - { - if( NdisWaitEvent(&(pPlatformExt->Event), 50) ) - { - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - NdisResetEvent(&(pPlatformExt->Event)); - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - break; - } - } - } - else - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - } - RT_TRACE(COMP_DBG, DBG_LOUD, ("<=== PlatformStopWorkItem(): %s\n", pRtWorkItem->szID)); -} - -// -// Description: -// DeInitialize an RT_WORK_ITEM object. -// 2006.09.28, by shien chang. -// -VOID -PlatformFreeWorkItem( - IN PRT_WORK_ITEM pRtWorkItem - ) -{ - PPLATFORM_EXT pPlatformExt = pRtWorkItem->pPlatformExt; - - if( pPlatformExt == NULL ) - return; - - RT_TRACE(COMP_DBG, DBG_LOUD, ("===> PlatformFreeWorkItem(): %s\n", pRtWorkItem->szID)); - - PlatformStopWorkItem(pRtWorkItem); - - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - if(pRtWorkItem->bFree) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return; - } - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - - NdisFreeSpinLock( &(pPlatformExt->Lock) ); - - // - // Deallocate the platform extension. - // 2006.09.28, by shien chang. - // - if(pPlatformExt) - PlatformFreeMemory( pPlatformExt, sizeof(PLATFORM_EXT) ); - - NdisFreeIoWorkItem(pRtWorkItem->Handle); - pRtWorkItem->bFree = TRUE; - - RT_TRACE(COMP_DBG, DBG_LOUD, ("<=== PlatformFreeWorkItem(): %s\n", pRtWorkItem->szID)); -} - -// -// Description: -// Schedule a work item. -// 2006.09.28, by shien chang. -// - -BOOLEAN -PlatformScheduleWorkItem( - IN PRT_WORK_ITEM pRtWorkItem -) -{ - BOOLEAN bResult = FALSE; - PPLATFORM_EXT pPlatformExt = pRtWorkItem->pPlatformExt; - - if( pPlatformExt == NULL ) - return bResult; - - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - - if(pRtWorkItem->bFree) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return bResult; - } - - - // Make sure at most one such workitem executed. - if(pRtWorkItem->RefCount == 1) - { - pRtWorkItem->RefCount ++; - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - - NdisQueueIoWorkItem( pRtWorkItem->Handle, - Ndis6WorkItemCallback, - pRtWorkItem); - bResult = TRUE; - } - else if(pRtWorkItem->RefCount == 0) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - } - else - { - // We should do something to handle this case. - // For example, should we queue requests of such workitem, - // and schedule them one after another. - RT_TRACE(COMP_MLME, DBG_LOUD, ("PlatformScheduleWorkItem(): %s Failed, RefCount: %d!!!\n", pRtWorkItem->szID, pRtWorkItem->RefCount)); - - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - } - - return bResult; -} - -// -// Description: -// Check if the work item has been scheduled. -// 2006.09.29, by shien chang. -// -BOOLEAN -PlatformIsWorkItemScheduled( - IN PRT_WORK_ITEM pRtWorkItem - ) -{ - PPLATFORM_EXT pPlatformExt = pRtWorkItem->pPlatformExt; - BOOLEAN bScheduled; - - if( pPlatformExt == NULL ) - return FALSE; - - NdisAcquireSpinLock( &(pPlatformExt->Lock) ); - - if(pRtWorkItem->bFree) - { - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - return FALSE; - } - - - // We define both the RefCount 0 and 2 as scheduled. - // 2006.09.29, by shien chang. - bScheduled = !(pRtWorkItem->RefCount == 1); - - NdisReleaseSpinLock( &(pPlatformExt->Lock) ); - - return bScheduled; -} - - -//============================================================================= -// End workitem function. -//============================================================================= - - - -//============================================================================= -// Memory function. -//============================================================================= - -// -// Description: -// Fill all the input memory with 0. -// -VOID -PlatformZeroMemory( - IN PVOID ptr, - IN u4Byte length - ) -{ - if(ptr) - NdisZeroMemory(ptr,length); -} - -// -// Description: -// Memory manipulation routines. -// -RT_STATUS -PlatformAllocateMemoryWithTag( - IN PVOID Adapter, - IN u4Byte Tag, - OUT PVOID *pPtr, - IN u4Byte length - ) -{ - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - NDIS_HANDLE MiniportAdapterHandle = GlobalRtDriverContext.NdisContext.Ndis6MiniportDriverHandle; - - *pPtr = NdisAllocateMemoryWithTagPriority( MiniportAdapterHandle, - length, - Tag, - NormalPoolPriority); - if (*pPtr == NULL) - { - return RT_STATUS_FAILURE; - } - - RTL_AllocateMemory_count ++; - RTL_AllocateMemory_Len += length; - - return rtstatus; -} - -// -// Description: -// Free the allocated memory of the input pointer. -// -VOID -PlatformFreeMemory( - IN PVOID ptr, - IN u4Byte length - ) -{ - if(ptr) - { - NdisFreeMemory( ptr, length, 0); - ptr = NULL; - RTL_FreeMemory_count ++; - RTL_FreeMemory_Len += length; - -// RTL_AllocateMemory_Len -= length; - } -} - -// -// Description: -// Memory manipulation routines. -// -RT_STATUS -PlatformAllocateMemoryWithZero( - IN PVOID Adapter, - OUT PVOID *pPtr, - IN u4Byte length - ) -{ - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - NDIS_HANDLE MiniportAdapterHandle = ((PADAPTER)Adapter)->pNdisCommon->hNdisAdapter; - - *pPtr = NdisAllocateMemoryWithTagPriority( MiniportAdapterHandle, - length, - '7818', - NormalPoolPriority); - if (*pPtr == NULL) - { - return RT_STATUS_FAILURE; - } - - RTL_AllocateMemory_count ++; - RTL_AllocateMemory_Len += length; - - NdisZeroMemory(*pPtr,length); - - return rtstatus; -} - - - -// -// Description: -// Copy a specified number of bytes from the source location to the destination. -// -VOID -PlatformMoveMemory( - IN PVOID pDest, - IN PVOID pSrc, - IN u4Byte length - ) -{ - if(pDest != NULL && pSrc != NULL && length > 0) - NdisMoveMemory(pDest,pSrc,length); -} - -// -// Description: -// Compare characters in two buffers. -// -s4Byte -PlatformCompareMemory( - IN PVOID pBuf1, - IN PVOID pBuf2, - IN u4Byte length - ) -{ - return memcmp(pBuf1,pBuf2,length); -} - -// -// Description: -// Fills a caller-supplied buffer with the given character. -// -VOID -PlatformFillMemory( - IN PVOID Buf, - IN u4Byte Length, - IN u1Byte Fill - ) -{ - if(Buf) - NdisFillMemory(Buf, Length, Fill); -} - -//============================================================================= -// End memory function. -//============================================================================= - - - -VOID -PlatformStallExecution( - u4Byte usDelay - ) -{ - ULONG i = 0; - - if(usDelay <= MAX_STALL_TIME) - { - NdisStallExecution(usDelay); - } - else - { - if(NDIS_CURRENT_IRQL()==PASSIVE_LEVEL) - { - NdisMSleep(usDelay); - } - else - { - for(i=0; i<(usDelay)/MAX_STALL_TIME; i++) - { - NdisStallExecution(MAX_STALL_TIME); - } - } - } -} - -VOID -PlatformForceStallExecution( - u4Byte usDelay - ) -{ - ULONG i; - - if(usDelay <= MAX_STALL_TIME) - { - NdisStallExecution(usDelay); - } - else - { - for(i=0; i<(usDelay)/MAX_STALL_TIME; i++) - { - NdisStallExecution(MAX_STALL_TIME); - } - } -} - -// -// Description: -// Get the system time and return by microsecond. -// -u8Byte -PlatformGetCurrentTime( - VOID - ) -{ - // The return value is in microsecond - u8Byte ret; - LARGE_INTEGER CurrentTime; - - NdisGetCurrentSystemTime(&CurrentTime); // driver version - ret=CurrentTime.QuadPart/10; - - return ret; -} - -// -// Description: -// Handle TKIP MIC error. -// For example, indicate the MIC error event to supplicant. -// -// Note: -// From ProcessMICError() of 8185 NDIS driver. -// -// 2004.10.05, by rcnjko. -// -VOID -PlatformHandleTKIPMICError( - IN PVOID Adapter, - IN BOOLEAN bMcstDest, - IN u1Byte Keyidx, - IN pu1Byte pSrcAddr - ) -{ - PADAPTER pAdapter; - PMGNT_INFO pMgntInfo; - PRT_SECURITY_T pSec; - DOT11_TKIPMIC_FAILURE_PARAMETERS TKIPFailureParam; - - // Set up context variables about the adpater from input. - pAdapter = (PADAPTER)Adapter; - pMgntInfo = &(pAdapter->MgntInfo); - pSec = &(pMgntInfo->SecurityInfo); - - // Initialize event to indicate up. - PlatformZeroMemory(&TKIPFailureParam, sizeof(DOT11_TKIPMIC_FAILURE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - TKIPFailureParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_TKIPMIC_FAILURE_PARAMETERS_REVISION_1, - sizeof(DOT11_TKIPMIC_FAILURE_PARAMETERS)); - - TKIPFailureParam.bDefaultKeyFailure = FALSE; // - TKIPFailureParam.uKeyIndex = 0;// - PlatformMoveMemory( - TKIPFailureParam.PeerMac, - pMgntInfo->Bssid, - sizeof(DOT11_MAC_ADDRESS)); - -// For WiFi WPA2 Test: Let group MIC error packet be handled by the same way as pairwise packet. Annie, 2006-05-04. -// -// if(!bMcstDest) - { // Pairewise key. - u8Byte CurrTime = PlatformGetCurrentTime(); // In micro-second. - u8Byte DiffTime = CurrTime - pSec->LastPairewiseTKIPMICErrorTime; // In micro-second. - - if(DiffTime > MIC_CHECK_TIME) - { // Fisrt MIC Error happend in 60 seconds. - RT_TRACE(COMP_SEC, DBG_LOUD, ("PlatformHandleTKIPMICError(): First TKIP Pairewise MIC error.\n")); - // Update MIC error time. - pSec->LastPairewiseTKIPMICErrorTime = CurrTime; - } - else - { // Second MIC Error happend in 60 seconds. - RT_TRACE(COMP_SEC, DBG_LOUD, ("PlatformHandleTKIPMICError(): Second TKIP Pairewise MIC error.\n")); - // Reset MIC error time. - pSec->LastPairewiseTKIPMICErrorTime = 0; - // Set the flag to disassocate AP after MIC failure report send to AP. - pSec->bToDisassocAfterMICFailureReportSend = TRUE; - // Insert current BSSID to denied list. - SecInsertDenyBssidList(pSec, pMgntInfo->Bssid, CurrTime); - } - - if(OS_SUPPORT_WDI(pAdapter)) - { - WDI_IndicateTKIPMICFailure(pAdapter); - } - else - { - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_TKIPMIC_FAILURE, - &TKIPFailureParam, - sizeof(DOT11_TKIPMIC_FAILURE_PARAMETERS)); - } - - - } -// else -// { // Group key. -// // TODO: We should handle MIC error for group key in WPA2. -// } - PLATFORM_WRITE_EVENT_LOG(Adapter, RT_TKIP_MIC_ERROR, bMcstDest ? 2 : 1); -} - -// -// Description: -// -// Added by Annie, 2005-09-23, -// Ref: 8185 WMacRequestPreAuthentication(). -// -VOID -PlatformRequestPreAuthentication( - IN PVOID pvAdapter, - IN PRE_AUTH_INDICATION_REASON Reason - ) -{ - PADAPTER Adapter = (PADAPTER)pvAdapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &pMgntInfo->SecurityInfo; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u1Byte j; - u2Byte i; - int iNumBssid=0; - BOOLEAN bMatch; - BOOLEAN bRequireIndication = FALSE; - u1Byte uArray[sizeof(DOT11_PMKID_CANDIDATE_LIST_PARAMETERS ) + \ - (NUM_PRE_AUTH_KEY+1)*sizeof(DOT11_BSSID_CANDIDATE ) +1 ]; - pu1Byte pucCurPtr; - PRT_WLAN_BSS pBssDesc = NULL; - PDOT11_PMKID_CANDIDATE_LIST_PARAMETERS pPMKID; - PDOT11_BSSID_CANDIDATE pCandidate; - - - - RT_TRACE( COMP_SEC, DBG_TRACE, ("===> PlatformRequestPreAuthentication()\n" ) ); - - // - // Condition Check - // - if( !pSecInfo->RegEnablePreAuth || // "EnablePreAuth" in NicRegTable[]. - !(pSecInfo->SecLvl == RT_SEC_LVL_WPA2) || - !pMgntInfo->mAssoc - ) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("PlatformRequestPreAuthentication(): return for EnablePreAuthentication=%d, SecLvl=%d, mAssoc=%d\n", pSecInfo->RegEnablePreAuth, pSecInfo->SecLvl, pMgntInfo->mAssoc ) ); - return; - } - - // - // Initialize the buffer for status indication. - // - PlatformZeroMemory( uArray, sizeof uArray ); - pucCurPtr = &uArray[0]; - - pPMKID = (PDOT11_PMKID_CANDIDATE_LIST_PARAMETERS)pucCurPtr; - pPMKID->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - pPMKID->Header.Revision = DOT11_PMKID_CANDIDATE_LIST_PARAMETERS_REVISION_1; - pPMKID->Header.Size = sizeof(DOT11_PMKID_CANDIDATE_LIST_PARAMETERS); - - pucCurPtr = pucCurPtr + sizeof(DOT11_PMKID_CANDIDATE_LIST_PARAMETERS); // Offset to DOT11_BSSID_CANDIDATE buffer - - //------------------------------------------------------------------ - // (1) Include associated current BSSID into list - //------------------------------------------------------------------ - - // The current associated BSSID should always be in the StatusBuffer. - pCandidate = (PDOT11_BSSID_CANDIDATE)pucCurPtr; - pCandidate->uFlags = DOT11_PMKID_CANDIDATE_PREAUTH_ENABLED; - - PlatformMoveMemory( pCandidate->BSSID, pMgntInfo->Bssid, 6 ); - iNumBssid++; - pucCurPtr += sizeof(DOT11_BSSID_CANDIDATE); // pointer to next PMKID_CANDIDATE. - - // WPA2 beta site: It makes sense to clear the driver PMKID cache at the time of Disconnect. - if(Reason == PRE_AUTH_INDICATION_REASON_ASSOCIATION) - { - bRequireIndication = TRUE; - } - - - //------------------------------------------------------------------ - // (2) Include other BSSID for roaming candidate list (with the same SSID) - //------------------------------------------------------------------ - for( i=0; iNumBssDesc; i++ ) // reference enumeration method as SelectNetworkBySSID(). - { - pBssDesc = &(pMgntInfo->bssDesc[i]); - - // The number of entries indicated in the CandidateList should not be greater - //than the size of the PMKID cache supported by the driver and exposed through - //OID_802_11_CAPABILITY value NoOfPMKIDs - if( iNumBssid >= NUM_PRE_AUTH_KEY ) - { - break; - } - - if( pBssDesc->SecLvl < RT_SEC_LVL_WPA2 ) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("PlatformRequestPreAuthentication(): AP SecLvl=%d is not enough!\n", pBssDesc->SecLvl) ); - RT_PRINT_STR( COMP_SEC, DBG_TRACE, ("SSID"), pBssDesc->bdSsIdBuf, pBssDesc->bdSsIdLen ); - continue; - } - - // Don't include current BSSID. It already exists. - if( eqMacAddr(pBssDesc->bdBssIdBuf, pMgntInfo->Bssid) ) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("PlatformRequestPreAuthentication(): \n") ); - RT_PRINT_ADDR( COMP_SEC, DBG_TRACE, ("BSSID is the same"), pBssDesc->bdBssIdBuf ); - continue; - } - - - // 1. Indicate to upper layer only if they have the same ssid. - // 2. The NIC should only request preauthentication when the NIC is evaluating whether to roam to another BSSID. - if( ( pBssDesc->bdSsIdLen == pMgntInfo->Ssid.Length ) && - eqNByte( pBssDesc->bdSsIdBuf, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length) - ) - { - // Add the bssid onto bssid list - pCandidate = (PDOT11_BSSID_CANDIDATE)pucCurPtr; - - if( pBssDesc->bPreAuth ) - pCandidate->uFlags = DOT11_PMKID_CANDIDATE_PREAUTH_ENABLED; - else - pCandidate->uFlags = 0x0; - - CopyMem( pCandidate->BSSID, pBssDesc->bdBssIdBuf, 6 ); - iNumBssid++; - pucCurPtr += sizeof(DOT11_BSSID_CANDIDATE); - - // Indicate to upper layer only if there is new AP that does not have PMKID kept in driver - bMatch = FALSE; - for( j=0; jPMKIDList[j].bUsed ) - { - if( eqMacAddr(pSecInfo->PMKIDList[j].Bssid, pMgntInfo->Bssid) ) - { - RT_PRINT_ADDR( COMP_SEC, DBG_TRACE, ("PlatformRequestPreAuthentication(): BSSID exists => Do not indicate to upper layer"), pSecInfo->PMKIDList[j].Bssid ); - bMatch = TRUE; - } - } - } - if(!bMatch) - { - RT_TRACE( COMP_SEC, DBG_TRACE, ("PlatformRequestPreAuthentication(): New BSSID => Indicate to upper layer.\n")); - bRequireIndication = TRUE; - } - } - } - - //pPMKID->NumCandidates = iNumBssid; - - //------------------------------------------------------------------ - // (3) Indicate to upper layer. - //------------------------------------------------------------------ - if(bRequireIndication) - { - UINT UsedSize = sizeof(DOT11_PMKID_CANDIDATE_LIST_PARAMETERS) + \ - (iNumBssid)*sizeof(DOT11_BSSID_CANDIDATE); - - pPMKID->uCandidateListSize = iNumBssid; - pPMKID->uCandidateListOffset = sizeof(DOT11_PMKID_CANDIDATE_LIST_PARAMETERS);; - - RT_TRACE( COMP_SEC, DBG_LOUD, ("PlatformRequestPreAuthentication(): Indicate Buffer Size = %d\n", UsedSize) ); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "PlatformRequestPreAuthentication(): Indicate Buffer", uArray, UsedSize ); - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_PMKID_CANDIDATE_LIST, - (PVOID)uArray, - UsedSize - ); - } - - RT_TRACE( COMP_SEC, DBG_LOUD, ("<=== PlatformRequestPreAuthentication()\n" ) ); - -} - -VOID -PlatformHandlePwiseKeyUpdata( - IN PVOID Adapter - ) -{ -} - -// Description: -// Handle Network Offload -// Try to Cancel Sacn -// -// Added by CCW. 2013.04.17. -VOID -PlatformHandleNLOnScanCancel( - IN PVOID pvAdapter - ) -{ - PADAPTER Adapter = (PADAPTER)pvAdapter; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Reset Indicate State !! - pNdisCommon->bToIndicateNLOScanComplete = FALSE; -} - - -// -// Description: -// Handle Network Offload -// Try to found out AP in Off load List , and Indicate to upper layer -// -VOID -PlatformHandleNLOnScanComplete( - IN PVOID pvAdapter -) -{ - PADAPTER Adapter = (PADAPTER)pvAdapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_WLAN_BSS pCurrDesc = NULL; - u4Byte CurrBssIndex = 0; - BOOLEAN NeedIndicate = FALSE; - PRT_OFFLOAD_NETWORK pCurrNetwork = NULL; - u4Byte CurrWorkLoadIndex = 0; - u1Byte uArray[8] = {0}; - PRT_NLO_INFO pNLOInfo = &(pMgntInfo->NLOInfo); - - RT_TRACE(COMP_MLME , DBG_LOUD , (" =====> PlatformHandleNLOnScanComplete !!\n") ); - - if( pNLOInfo->NumDot11OffloadNetwork == 0) - { - RT_TRACE(COMP_MLME , DBG_LOUD , ("return: pNdisCommon->NumDot11OffloadNetwork == 0 !\n")); - return; - } - - if(pNdisCommon->bToIndicateNLOScanComplete == FALSE) - { - // Return to prevent from OS sets RESET_REQUEST & CONNECT_REQUEST after indicating - // NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED during normal (non-NLO) - // scan request flow. It will cause that the reconnect flow is interrupted by OID RESET_REQUEST - // & CONNECT_REQUEST such that the first reconnect (to the default AP) action fail after PNP wake. - RT_TRACE(COMP_MLME , DBG_LOUD , ("Return: NOT NLO scan request!\n")); - return; - } - - // Need to check : bHiddenSSIDEnable can used now ?? - pMgntInfo->bHiddenSSIDEnable = TRUE; - - if(!OS_SUPPORT_WDI(Adapter)) - { - - // HCT Test alway to say OK !!! - if( Adapter->bInHctTest ) - { - NeedIndicate = TRUE; - } - - for( CurrWorkLoadIndex = 0 ; ((CurrWorkLoadIndex < pNLOInfo->NumDot11OffloadNetwork) && (NeedIndicate == FALSE) ); CurrWorkLoadIndex++) - { - pCurrNetwork = &(pNLOInfo->dDot11OffloadNetworkList[CurrWorkLoadIndex]); - for( CurrBssIndex = 0 ; ( (CurrBssIndex < pMgntInfo->NumBssDesc) && (NeedIndicate == FALSE)); CurrBssIndex++) - { - pCurrDesc = &(pMgntInfo->bssDesc[CurrBssIndex]); - if(CompareSSID(pCurrDesc->bdSsIdBuf, pCurrDesc->bdSsIdLen, pCurrNetwork->ssidbuf, (u2Byte)pCurrNetwork->ssidlen)) - { - // Security !! - if( pCurrNetwork->bPrivacy == (pCurrDesc->bdCap & cPrivacy) && ( pCurrNetwork->chiper & pCurrDesc->PairwiseChiper) ) - { - NeedIndicate = TRUE; - } - - } - } - } - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED, - (PVOID)uArray, - 4 - ); - } - else - { - WDI_IndicateNLODiscovery(Adapter); - } - - pNdisCommon->bToIndicateNLOScanComplete = FALSE; - - RT_TRACE( COMP_MLME , DBG_LOUD, (" <===== PlatformHandleNLOnScanComplete !!\n") ); - - return; -} - - -// -// Description: -// Handle Network Offload scan state -// Check need scan or not -// -VOID -PlatformHandleNLOnScanRequest( - IN PVOID pvAdapter -) -{ - PADAPTER Adapter = (PADAPTER)pvAdapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_NLO_INFO pNLOInfo = &(pMgntInfo->NLOInfo); - BOOLEAN bNeedScan = FALSE; - - // check enable NOL mode - if( pNLOInfo->NumDot11OffloadNetwork == 0 ) - { - RT_TRACE(COMP_MLME , DBG_TRACE , ("<=== return: pNdisCommon->NumDot11OffloadNetwork == 0 !\n")); - return; - } - - RT_TRACE(COMP_MLME , DBG_LOUD, ("===> PlatformHandleNLOnScanRequest \n ") ); - RT_TRACE(COMP_MLME, DBG_TRACE, ("Oidcounter = %d \n",pNdisCommon->Oidcounter)); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("pNdisCommon->ScanPeriod: %d\n", pNdisCommon->ScanPeriod)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("pNdisCommon->FastScanPeriod: %d\n", pNLOInfo->FastScanPeriod)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("pNdisCommon->FastScanIterations: %d\n", pNLOInfo->FastScanIterations)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("pNdisCommon->SlowScanPeriod: %d\n", pNLOInfo->SlowScanPeriod)); - - // Check need to scan !! - if( pNdisCommon->ScanPeriod > RT_CHECK_FOR_HANG_PERIOD ) - { - pNdisCommon->ScanPeriod = pNdisCommon->ScanPeriod - RT_CHECK_FOR_HANG_PERIOD; - } - else - { - bNeedScan = TRUE; - } - - pNdisCommon->Oidcounter = 0; - - // Set up NEW ScanPeriod - if( bNeedScan ) - { - if( pNLOInfo->FastScanIterations > 0 ) - { - pNLOInfo->FastScanIterations --; - } - - if( pNLOInfo->FastScanIterations > 0 ) - { - pNdisCommon->ScanPeriod = pNLOInfo->FastScanPeriod; - } - else - { - pNdisCommon->ScanPeriod = pNLOInfo->SlowScanPeriod; - } - } - - // Scan state - // Note : - // Check NIC "CAN" scan or not - if( bNeedScan ) - { - if( pNdisCommon->bFilterHiddenAP ) - { - pMgntInfo->bHiddenSSIDEnable = FALSE; - - } - - pNdisCommon->bToIndicateNLOScanComplete = TRUE; - RT_TRACE(COMP_MLME, DBG_LOUD, ("pNdisCommon->bToIndicateNLOScanComplete set to %s\n", pNdisCommon->bToIndicateNLOScanComplete?"TRUE":"FALSE")); - - // - // Marked since the NLO may be initialized when disconnected. - // - - // Note : May need check BusyTraffic for ... - //if(pMgntInfo->bMediaConnect && !MgntRoamingInProgress(pMgntInfo) - //&& !MgntScanInProgress(pMgntInfo) && !MgntIsLinkInProgress(pMgntInfo) && - //!GET_RM_INFO(pMgntInfo)->bGoingOn) - { - /* MgntLinkRequest( - Adapter, - TRUE, //bScanOnly - pNdisCommon->bNLOActiveScan, //bActiveScan, - pNdisCommon->bFilterHiddenAP, //FilterHiddenAP // Asked by Netgear's Lancelot for 8187 should look like their damn wg111v1, 2005.02.01, by rcnjko. - FALSE, // Update parameters - NULL, //ssid2scan - 0, //NetworkType, - 0, //ChannelNumber, - 0, //BcnPeriod, - 0, //DtimPeriod, - 0, //mCap, - NULL, //SuppRateSet, - NULL //yIbpm, - );*/ - NDIS_OID_REQUEST NdisRequest; - VOID *req = NULL; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("N6C_OID_DOT11_FLUSH_BSS_LIST\n")); - NdisRequest.RequestType = NdisRequestSetInformation; - N6C_OID_DOT11_FLUSH_BSS_LIST(Adapter, &NdisRequest); - - //Win8: Restart the passive scan ---------------------------------------------- - if(NULL == (req = CustomScan_AllocReq(GET_CUSTOM_SCAN_INFO(Adapter), NULL, NULL))) - { - RT_TRACE(COMP_MLME , DBG_LOUD, ("CustomScan_AllocReq == NULL, no Scan issue\n ") ); - RT_TRACE(COMP_MLME , DBG_LOUD, ("<=== PlatformHandleNLOnScanRequest \n ") ); - return; - } - - CustomScan_AddScanChnl(req, 1, 1, SCAN_ACTIVE, (u2Byte)pNdisCommon->ScanPeriod, MGN_6M, NULL); - CustomScan_AddScanChnl(req, 6, 1, SCAN_ACTIVE, (u2Byte)pNdisCommon->ScanPeriod, MGN_6M, NULL); - CustomScan_AddScanChnl(req, 11, 1, SCAN_ACTIVE, (u2Byte)pNdisCommon->ScanPeriod, MGN_6M, NULL); - - CustomScan_IssueReq(GET_CUSTOM_SCAN_INFO(Adapter), req, CUSTOM_SCAN_SRC_TYPE_UNSPECIFIED, "nlo scan req"); - } - } - - RT_TRACE(COMP_MLME , DBG_LOUD, ("<=== PlatformHandleNLOnScanRequest \n ") ); - - return; -} - - -// -// Description: -// Release the MSDU buffered from the upper layer.. -// -// Assumption: -// TX lock acquired. -// By Bruce, 2008-11-28. -// -VOID -PlatformReleaseDataFrameQueued( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PNET_BUFFER_LIST pNetBufferList; - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(pAdapter); - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - BOOLEAN bUseWorkItem = FALSE; - KIRQL OldIrql; - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(pNdisCommon->RegNblRacingWA) - { - OldIrql = KeGetCurrentIrql(); - bUseWorkItem = (OldIrql > PASSIVE_LEVEL)? TRUE:FALSE; - - if(bUseWorkItem) - { - PlatformScheduleWorkItem(&(pNdisCommon->ReleaseDataFrameQueuedWorkItem)); - } - else - { - N6CReleaseDataFrameQueuedWorkItemCallback(pAdapter); - } - - } - else - { // Old method - - while(TRUE) - { - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - if(N6CIsNblWaitQueueEmpty(pNdisCommon->TxNBLWaitQueue)) - { - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - break; - } - pNetBufferList = N6CRemoveNblWaitQueue(&pNdisCommon->TxNBLWaitQueue, TRUE); - - if(pNetBufferList != NULL) - RT_NBL_SET_REF_CNT(pNetBufferList, 0); //YJ,test for MPE,120221 - - for (pCurrNetBufferList = pNetBufferList; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_STATUS(pCurrNetBufferList) = NDIS_STATUS_SUCCESS; - } - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - // Prefast warning C6387: 'pNetBufferList' could be '0': this does not adhere to the specification for the function 'NdisMSendNetBufferListsComplete'. - if (pNetBufferList != NULL) - { - NdisMSendNetBufferListsComplete( - pDevice->hNdisAdapter, - pNetBufferList, - ((NDIS_CURRENT_IRQL() == DISPATCH_LEVEL) ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0)); - } - } - } - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); -} - - -// Implement the indication of the P2P event -// Currently, only Win8 uses this indication function -// this function should move to N63C -VOID -PlatformIndicateP2PEvent( - PVOID pvP2PInfo, - u4Byte EventID, - PMEMORY_BUFFER pInformation -) -{ - N63CIndicateP2PEvent(pvP2PInfo, EventID, pInformation); -} -// -// Description: -// Indicate the specific (non-common for all platform) event/status to the target. -// We define the target because we may need different indication methods for different -// target. In Windows, the status may be indicated through NdisMIndicateStatusEx() for -// Ndis events or CompleteIRP for IRP besed events (such as BT). -// Arguments: -// [in] pAdapter - -// The adapter context. -// [in] event - -// The event of the indication. -// [in] target - -// The receiver for this event. There may be more than 1 targets to receive this event. -// This parameter should be set a combination for these targets. -// [in] pInfoBuffer - -// The pointer to the input information. It can be NULL. -// [in] InfoBruuferLen - -// The length in byte for pInfoBuffer. -// Return: -// It may return RT_STATUS_SUCCESS if this function completes successfully, or RT_STATUS_PENDING -// for the asynchrous process. -// By Bruce, 2011-06-09. -// -RT_STATUS -PlatformIndicateCustomStatus( - IN PADAPTER pAdapter, - IN u4Byte event, - IN u4Byte target, - IN PVOID pInfoBuffer, - IN u4Byte InfoBruuferLen - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - if(target == RT_CUSTOM_INDI_TARGET_NONE) - { - RT_TRACE_F(COMP_INDIC, DBG_WARNING, ("No Target (RT_CUSTOM_INDI_TARGET_NONE)!\n")); - return RT_STATUS_INVALID_PARAMETER; - } - - if(target & RT_CUSTOM_INDI_TARGET_IHV) - { - RT_TRACE_F(COMP_INDIC, DBG_TRACE, ("Indicate Event (0x%08X) to IHV.\n", event)); - } - - if(TEST_FLAG(target, RT_CUSTOM_INDI_TARGET_IRP)) - { - rtStatus = RT_STATUS_NOT_SUPPORT; - } - - if(TEST_FLAG(target, RT_CUSTOM_INDI_TARGET_WDI)) - { - rtStatus = WDI_IndicateGeneralEvent(pAdapter, event, pInfoBuffer, InfoBruuferLen); - } - - return rtStatus; -} - -RT_STATUS -PlatformIndicateActionFrame( - IN PADAPTER pAdapter, - IN PVOID posMpdu - ) -{ - return WDI_IndicateActionFrame(pAdapter, (POCTET_STRING)posMpdu); -} - -VOID -PlatformIndicatePMWakeReason( - IN PADAPTER Adapter, - IN BOOLEAN bWakePacket, - IN pu1Byte pBuffer, - IN u2Byte BufferLen -) -{ - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateWakeReason(Adapter, bWakePacket, pBuffer, BufferLen); -} - else - { - PNDIS_PM_WAKE_REASON pPMWakeReason; - PRT_GEN_TEMP_BUFFER pGenBufPMWakeReason; - u4Byte u4bTmp; - u2Byte WakeReasonInfoLen; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - BOOLEAN bIndicate = TRUE; - - WakeReasonInfoLen = sizeof(NDIS_PM_WAKE_REASON) + BufferLen; - - pGenBufPMWakeReason = GetGenTempBuffer (Adapter, WakeReasonInfoLen); - pPMWakeReason = (NDIS_PM_WAKE_REASON *)pGenBufPMWakeReason->Buffer.Ptr; - - PlatformZeroMemory(pPMWakeReason, WakeReasonInfoLen); - - // Header - pPMWakeReason->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - pPMWakeReason->Header.Revision = NDIS_PM_WAKE_REASON_REVISION_1; - pPMWakeReason->Header.Size = NDIS_SIZEOF_PM_WAKE_REASON_REVISION_1; - - // Set wake packet buffer offset. - if(bWakePacket) - { - pPMWakeReason->WakeReason = NdisWakeReasonPacket; - pPMWakeReason->InfoBufferOffset = sizeof(NDIS_PM_WAKE_REASON); - pPMWakeReason->InfoBufferSize = BufferLen; - // Prefast warning C6305: Potential mismatch between sizeof and countof quantities. Use sizeof() to scale byte sizes - // False positive, this one should be safe and disable it here. -#pragma warning ( disable:6305 ) - PlatformMoveMemory((pPMWakeReason+sizeof(NDIS_PM_WAKE_REASON)), pBuffer, BufferLen); - - RT_PRINT_DATA(COMP_POWER, DBG_LOUD, "IndicatePMWakeReason(): packet\n",(pPMWakeReason+sizeof(NDIS_PM_WAKE_REASON)), BufferLen); - } - else - { - if(pPSC->WakeUpReason == WOL_REASON_AP_LOST || - pPSC->WakeUpReason == WOL_REASON_DEAUTH || - pPSC->WakeUpReason == WOL_REASON_DISASSOC) - { - pPMWakeReason->WakeReason = NdisWakeReasonWlanAPAssociationLost; - } - else if(pPSC->WakeUpReason == WOL_REASON_NLO_SSID_MATCH) - { - pPMWakeReason->WakeReason = NdisWakeReasonWlanNLODiscovery; - } - else if(pPSC->WakeUpReason == WOL_REASON_PTK_UPDATE) - { - pPMWakeReason->WakeReason = NdisWakeReasonWlan4WayHandshakeRequest; - } - else - { - pPMWakeReason->WakeReason = NdisWakeReasonUnspecified; - bIndicate = FALSE; - } - } - - if(bIndicate) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("IndicatePMWakeReason(): WakeReason(%#X)\n", pPMWakeReason->WakeReason)); - - N6IndicateStatus( - Adapter, - NDIS_STATUS_PM_WAKE_REASON, - pPMWakeReason, - WakeReasonInfoLen); - } - - ReturnGenTempBuffer(Adapter, pGenBufPMWakeReason); - } -} - -// -// Description: Starting with NDIS 6.30, MiniPortCheckForHang function must not be registered -// for drivers running on low power SoC platforms to avoid negative power impact caused -// by the periodic Check-for-Hang activity. -// So we should set watchdog timer by driver to support on low power SoC platforms. -// -// 2013.09.13, by tynli. -// -VOID -PlatformSetCheckForHangTimer( - IN PADAPTER Adapter -) -{ - RT_TRACE(COMP_INIT, DBG_TRACE, ("PlatformSetCheckForHangTimer() ===>\n")); - Adapter->MgntInfo.bSetWatchDogTimerByDriver = TRUE; - PlatformSetTimer(Adapter, &Adapter->MgntInfo.WatchDogTimer , RT_CHECK_FOR_HANG_PERIOD * 1000); -} - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.h b/network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.h deleted file mode 100644 index fe1b8177..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_PlatformDef.h +++ /dev/null @@ -1,179 +0,0 @@ -/*++ - -Copyright (c) Realtek Corporation. All rights reserved. - -Module Name: - N6C_PlatformDef.h - -Abstract: - Mediate Data structures referenced by PlatformDef.h for NDIS6. - -Major Change History: - When Who What - ---------- ------ ---------------------------------------------- - 2006-09-29 S.Chang Created - -Notes: - ---*/ -#ifndef __INC_N6C_PLATFORMDEF_H -#define __INC_N6C_PLATFORMDEF_H - -/*--------------------------Define -------------------------------------------*/ -#define VOID void -#define PVOID void * //for Source insight keyword highlight. - -// Add this type define if your platform doesn't have BOOLEAN type -typedef UCHAR BOOLEAN,*PBOOLEAN, boolean; -typedef UCHAR u1Byte,*pu1Byte; -typedef USHORT u2Byte,*pu2Byte; -typedef ULONG u4Byte,*pu4Byte; -typedef ULONGLONG u8Byte,*pu8Byte; - -typedef CHAR s1Byte,*ps1Byte, s8; -typedef SHORT s2Byte,*ps2Byte, s16; -typedef LONG s4Byte,*ps4Byte, s32; -typedef LONGLONG s8Byte,*ps8Byte; - -typedef const unsigned char cu8; -typedef unsigned __int64 u64; -typedef __int64 s64; - -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned long u32; - -typedef struct _RT_TIMER_HANDLE{ - RT_LIST_ENTRY List; - - NDIS_HANDLE NdisTimerHandle; - NDIS_TIMER_CHARACTERISTICS TimerCharacteristics; -}RT_TIMER_HANDLE, *PRT_TIMER_HANDLE; - - -typedef NDIS_HANDLE RT_WORKITEM_HANDLE, *PRT_WORKITEM_HANDLE; - -#define DEBUG_MAX_NAME_LEN 20 - - -typedef KMUTEX PlatformMutex, *PPlatformMutex; - - -typedef KSEMAPHORE PlatformSemaphore, *PPlatformSemaphore; -typedef NDIS_EVENT PlatformEvent, *PPlatformEvent; - -#define rsprintf RtlStringCbPrintfA -#define rstrncat RtlStringCbCatNA - - - -/*--------------------------Define MACRO--------------------------------------*/ - -#define GET_TCB_IDLE_QUEUE(_Adapter) (PRT_LIST_ENTRY)&(GetDefaultAdapter(_Adapter)->TcbIdleQueue) -#define GET_RFD_IDLE_QUEUE(_Adapter) (PRT_LIST_ENTRY)&(GetDefaultAdapter(_Adapter)->RfdIdleQueue) -#define Get_WAIT_QUEUE(_Adapter,_QueueID) (PRT_LIST_ENTRY)&(GetDefaultAdapter(_Adapter)->TcbWaitQueue[_QueueID]) -#define GET_WAIT_QUEUE_CNT(_Adapter,_QueueID) &(GetDefaultAdapter(_Adapter)->TcbWaitQueueCnt[_QueueID]) -#define Get_NUM_IDLE_TCB(_Adapter) &(GetDefaultAdapter(_Adapter)->NumIdleTcb) -#define GET_NUM_IDLE_RFD(_Adapter) &(GetDefaultAdapter(_Adapter)->NumIdleRfd) -#define GET_NUM_BUSY_RFD(_Adapter, _QueueNum) &(GetDefaultAdapter(_Adapter)->NumBusyRfd[_QueueNum]) -#define GET_LOW_RFD_THRESHOLD(_Adapter) &(GetDefaultAdapter(_Adapter)->LowRfdThreshold) - -#define IS_TX_LOCKED(_Adapter) ((_Adapter->pNdis62Common) ? (GetDefaultAdapter(_Adapter)->bTxLocked) : (_Adapter->bTxLocked)) -#define IS_RX_LOCKED(_Adapter) ((_Adapter->pNdis62Common) ? (GetDefaultAdapter(_Adapter)->bRxLocked) : (_Adapter->bRxLocked)) - -#define IS_ADAPTER_SENDS_BEACON(__Adapter) IsSendingBeacon(__Adapter) - -#define GET_PORT_NUMBER(_Adapter) \ - _Adapter->pNdis62Common->PortNumber - -#define N6XC_SET_802_11_ATTRIBUTES(_Adapter) N6Set80211Attributes(_Adapter) -#define NDIS_6_2_INITIALIZE_EXTENSION_COMPONENT(_Adapter,_MiniportAdapterHandle,_MiniportInitParameters) \ - N62CInitialize(_Adapter,_MiniportAdapterHandle,_MiniportInitParameters) - - - -#define NDIS_6_2_FREE_EXTENSION_COMPONENT(_Adapter) \ - N62CFreePortCommonComponent(_Adapter); \ - N62CFreePortSpecificComponent(_Adapter); \ - while(MultiPortIsPreallocatedExtAdapterExist(_Adapter)) \ - { \ - N62CFreeExtAdapter(MultiPortRemoveExtAdapter(_Adapter)); \ - } \ - - -#define NDIS_6_2_EXT_ADAPTER_HANDLE_NBL_IN_WAIT_QUEUE(_Adapter) \ - N62CExtAdapterHandleNBLInWaitQueue(_Adapter) - -#define NDIS_6_2_AP_CLEAR_BEFORE_SLEEP(_Adapter) \ - N62CAPClearStateBeforeSleep(_Adapter); - - -#define EXT_AP_START_AP_MODE(_Adapter) -#define EXT_AP_NOTIFY_STA_LINK_CHANGE(_pMgntInfo) \ - {_pMgntInfo->bSwitchingSTAStateInProgress = TRUE;} -#define EXT_AP_DISASSOCATE_AFTER_STA_LINK_TO_DIFFERENT_CHNNEL_AP(_Adapter) \ - AP_DisconnectAfterSTANewConnected(_Adapter) -#define REMOVE_WCN_IE_FROM_BSS_DESC(_Adapter,_bssDesc,_pSimpleConfig,_mmpdu) \ - RemoveWCNIE(_Adapter,_bssDesc,_pSimpleConfig,_mmpdu) - -#define PLATFORM_GET_PHY_ID_READY(_Adapter) N6CQueryPhyIdReady(_Adapter) -#define PLATFORM_GET_FRAGOFFSET(_pRfd) _pRfd->FragOffset -#define PLATFORM_WRITE_EVENT_LOG(_Adapter, _EVENT, _NUM) N6WriteEventLog(_Adapter, _EVENT, _NUM) -#define PLATFORM_WLAN_IN_MPDU_TOKEN_NUM 6 -#define PLATFORM_WLAN_IN_INTERRUPT_TOKEN_NUM 2 -#define PLATFORM_RESTORE_LAST_INIT_SETTING(_Adapter) N6RestoreLastInitSettingAterWakeUP(_Adapter) - - - -#define PLATFORM_GET_RT_NUM_PIPES(_pDevice) GET_WDF_USB_DEVICE_CONTEXT(_pDevice)->RtNumPipes -#define PLATFORM_GET_RT_NUM_IN_PIPES(_pDevice) GET_WDF_USB_DEVICE_CONTEXT(_pDevice)->RtNumInPipes -#define PLATFORM_GET_RT_NUM_OUT_PIPES(_pDevice) GET_WDF_USB_DEVICE_CONTEXT(_pDevice)->RtNumOutPipes -#define PLATFORM_GET_PRT_IN_PIPES(_pDevice) GET_WDF_USB_DEVICE_CONTEXT(_pDevice)->RtInPipes -#define PLATFORM_GET_PRT_OUT_PIPES(_pDevice) GET_WDF_USB_DEVICE_CONTEXT(_pDevice)->RtOutPipes - -// For SDIO related interface. Added by Roger. 2011.10.10. -#define PLATFORM_GET_RT_NUM_SDIO_RX_QUEUE(_pDevice) _pDevice->RtNumRxQueue -#define PLATFORM_GET_RT_NUM_SDIO_TX_QUEUE(_pDevice) _pDevice->RtNumTxQueue -#define PLATFORM_GET_PRT_SDIO_TX_QUEUE(_pDevice) _pDevice->RtTxQueue - -/*------------------------------Define Struct---------------------------------*/ - -/*------------------------------Define Enum-----------------------------------*/ - -/*------------------------Export global variable------------------------------*/ - -/*------------------------------Funciton declaration--------------------------*/ -VOID -N6InitTimerSync( - IN PVOID Adapter -); - -VOID -N6WaitTimerSync( - IN PVOID Adapter -); - -VOID -N6DeInitTimerSync( - IN PVOID Adapter -); - - -VOID -N6CInitThread( - IN PVOID pContext - ); - -VOID -N6CDeInitThread( - IN PVOID Adapter - ); - - -extern u8Byte RTL_AllocateMemory_count ; -extern u8Byte RTL_FreeMemory_count ; -extern u8Byte RTL_AllocateMemory_Len; -extern u8Byte RTL_FreeMemory_Len; - - -#endif //end of #ifndef __INC_N6C_PLATFORMDEF_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.c b/network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.c deleted file mode 100644 index 9543ed42..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.c +++ /dev/null @@ -1,10481 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: N5C_Req.c -// Description: NDIS5.x common OID handler. -// -// Author: rcnjko -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" -#include "802_11_OID.h" -#include "CustomOid.h" - - -#if WPP_SOFTWARE_TRACE -#include "N6C_Req.tmh" -#endif - - -RT_OID_ENTRY RT_SUPPORT_OIDs[]= -{ -// NDIS 6.30 OID - // Native Wi-Fi Direct OIDs - { - OID_DOT11_WFD_DEVICE_CAPABILITY, - OID_STR_WRAPPER("OID_DOT11_WFD_DEVICE_CAPABILITY"), - N63C_OID_DOT11_WFD_DEVICE_CAPABILITY - }, - { - OID_DOT11_WFD_GROUP_OWNER_CAPABILITY, - OID_STR_WRAPPER("OID_DOT11_WFD_GROUP_OWNER_CAPABILITY"), - N63C_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY - }, - { - OID_DOT11_WFD_DEVICE_INFO, - OID_STR_WRAPPER("OID_DOT11_WFD_DEVICE_INFO"), - N63C_OID_DOT11_WFD_DEVICE_INFO - }, - { - OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST, - OID_STR_WRAPPER("OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST"), - N63C_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST - }, - { - OID_DOT11_WFD_DISCOVER_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_DISCOVER_REQUEST"), - N63C_OID_DOT11_WFD_DISCOVER_REQUEST - }, - { - OID_DOT11_WFD_ENUM_DEVICE_LIST, - OID_STR_WRAPPER("OID_DOT11_WFD_ENUM_DEVICE_LIST"), - N63C_OID_DOT11_WFD_ENUM_DEVICE_LIST - }, - { - OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY, - OID_STR_WRAPPER("OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY"), - N63C_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY - }, - { - OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL, - OID_STR_WRAPPER("OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL"), - N63C_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL - }, - { - OID_DOT11_WFD_ADDITIONAL_IE, - OID_STR_WRAPPER("OID_DOT11_WFD_ADDITIONAL_IE"), - N63C_OID_DOT11_WFD_ADDITIONAL_IE - }, - { - OID_DOT11_WFD_FLUSH_DEVICE_LIST, - OID_STR_WRAPPER("OID_DOT11_WFD_FLUSH_DEVICE_LIST"), - N63C_OID_DOT11_WFD_FLUSH_DEVICE_LIST - }, - { - OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST"), - N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST - }, - { - OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE"), - N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - }, - { - OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION"), - N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION - }, - { - OID_DOT11_WFD_SEND_INVITATION_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_INVITATION_REQUEST"), - N63C_OID_DOT11_WFD_SEND_INVITATION_REQUEST - }, - { - OID_DOT11_WFD_SEND_INVITATION_RESPONSE, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_INVITATION_RESPONSE"), - N63C_OID_DOT11_WFD_SEND_INVITATION_RESPONSE - }, - { - OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST"), - N63C_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST - }, - { - OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE, - OID_STR_WRAPPER("OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE"), - N63C_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE - }, - { - OID_DOT11_WFD_STOP_DISCOVERY, - OID_STR_WRAPPER("OID_DOT11_WFD_STOP_DISCOVERY"), - N63C_OID_DOT11_WFD_STOP_DISCOVERY - }, - { - OID_DOT11_WFD_DESIRED_GROUP_ID, - OID_STR_WRAPPER("OID_DOT11_WFD_DESIRED_GROUP_ID"), - N63C_OID_DOT11_WFD_DESIRED_GROUP_ID - }, - { - OID_DOT11_WFD_START_GO_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_START_GO_REQUEST"), - N63C_OID_DOT11_WFD_START_GO_REQUEST - }, - { - OID_DOT11_WFD_GROUP_START_PARAMETERS, - OID_STR_WRAPPER("OID_DOT11_WFD_GROUP_START_PARAMETERS"), - N63C_OID_DOT11_WFD_GROUP_START_PARAMETERS - }, - { - OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST"), - N63C_OID_DOT11_WFD_CONNECT_TO_GROUP_REQUEST - }, - { - OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST, - OID_STR_WRAPPER("OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST"), - N63C_OID_DOT11_WFD_DISCONNECT_FROM_GROUP_REQUEST - }, - { - OID_DOT11_WFD_GROUP_JOIN_PARAMETERS, - OID_STR_WRAPPER("OID_DOT11_WFD_GROUP_JOIN_PARAMETERS"), - N63C_OID_DOT11_WFD_GROUP_JOIN_PARAMETERS - }, - { - OID_DOT11_WFD_GET_DIALOG_TOKEN, - OID_STR_WRAPPER("OID_DOT11_WFD_GET_DIALOG_TOKEN"), - N63C_OID_DOT11_WFD_GET_DIALOG_TOKEN - }, - - // Others - { - OID_DOT11_OFFLOAD_NETWORK_LIST, - OID_STR_WRAPPER("OID_DOT11_OFFLOAD_NETWORK_LIST"), - N63C_OID_DOT11_OFFLOAD_NETWORK_LIST - }, - { - OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED, - OID_STR_WRAPPER("OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED"), - N63C_OID_DOT11_POWER_MGMT_MODE_AUTO_ENABLED - }, - { - OID_DOT11_POWER_MGMT_MODE_STATUS, - OID_STR_WRAPPER("OID_DOT11_POWER_MGMT_MODE_STATUS"), - N63C_OID_DOT11_POWER_MGMT_MODE_STATUS - }, - { - OID_PACKET_COALESCING_FILTER_MATCH_COUNT, // Query - OID_STR_WRAPPER("OID_PACKET_COALESCING_FILTER_MATCH_COUNT"), - N63C_OID_PACKET_COALESCING_FILTER_MATCH_COUNT - }, - -// NDIS 6.20 OID - // Native 802.11 Virtual WiFi OIDs - { - OID_DOT11_CREATE_MAC, - OID_STR_WRAPPER("OID_DOT11_CREATE_MAC"), - N62C_OID_DOT11_CREATE_MAC - }, - { - OID_DOT11_DELETE_MAC, - OID_STR_WRAPPER("OID_DOT11_DELETE_MAC"), - N62C_OID_DOT11_DELETE_MAC - }, - - // Native 802.11 Extensible AP OIDs - { - OID_DOT11_INCOMING_ASSOCIATION_DECISION, - OID_STR_WRAPPER("OID_DOT11_INCOMING_ASSOCIATION_DECISION"), - N62C_OID_DOT11_INCOMING_ASSOCIATION_DECISION - }, - { - OID_DOT11_WPS_ENABLED, - OID_STR_WRAPPER("OID_DOT11_WPS_ENABLED"), - N62C_OID_DOT11_WPS_ENABLED - }, - { - OID_DOT11_ADDITIONAL_IE, - OID_STR_WRAPPER("OID_DOT11_ADDITIONAL_IE"), - N62C_OID_DOT11_ADDITIONAL_IE - }, - { - OID_DOT11_ENUM_PEER_INFO, - OID_STR_WRAPPER("OID_DOT11_ENUM_PEER_INFO"), - N62C_OID_DOT11_ENUM_PEER_INFO - }, - { - OID_DOT11_AVAILABLE_CHANNEL_LIST, - OID_STR_WRAPPER("OID_DOT11_AVAILABLE_CHANNEL_LIST"), - N62C_OID_DOT11_AVAILABLE_CHANNEL_LIST - }, - { - OID_DOT11_AVAILABLE_FREQUENCY_LIST, - OID_STR_WRAPPER("OID_DOT11_AVAILABLE_FREQUENCY_LIST"), - N62C_OID_DOT11_AVAILABLE_FREQUENCY_LIST - }, - { - OID_DOT11_START_AP_REQUEST, - OID_STR_WRAPPER("OID_DOT11_START_AP_REQUEST"), - N62C_OID_DOT11_START_AP_REQUEST - }, - { - OID_DOT11_DISASSOCIATE_PEER_REQUEST, - OID_STR_WRAPPER("OID_DOT11_DISASSOCIATE_PEER_REQUEST"), - N62C_OID_DOT11_DISASSOCIATE_PEER_REQUEST - }, - - // Station Specific - { - OID_DOT11_ASSOCIATION_PARAMS, - OID_STR_WRAPPER("OID_DOT11_ASSOCIATION_PARAMS"), - N62C_OID_DOT11_ASSOCIATION_PARAMS - }, - - // Power Management OID - { - OID_PM_GET_PROTOCOL_OFFLOAD, - OID_STR_WRAPPER("OID_PM_GET_PROTOCOL_OFFLOAD"), - N62C_OID_PM_GET_PROTOCOL_OFFLOAD - }, - { - OID_PM_ADD_WOL_PATTERN, - OID_STR_WRAPPER("OID_PM_ADD_WOL_PATTERN"), - N62C_OID_PM_ADD_WOL_PATTERN - }, - { - OID_PM_REMOVE_WOL_PATTERN, - OID_STR_WRAPPER("OID_PM_REMOVE_WOL_PATTERN"), - N62C_OID_PM_REMOVE_WOL_PATTERN - }, - { - OID_PM_PARAMETERS, - OID_STR_WRAPPER("OID_PM_PARAMETERS"), - N62C_OID_PM_PARAMETERS - }, - { - OID_PM_ADD_PROTOCOL_OFFLOAD, - OID_STR_WRAPPER("OID_PM_ADD_PROTOCOL_OFFLOAD"), - N62C_OID_PM_ADD_PROTOCOL_OFFLOAD - }, - { - OID_PM_REMOVE_PROTOCOL_OFFLOAD, - OID_STR_WRAPPER("OID_PM_REMOVE_PROTOCOL_OFFLOAD"), - N62C_OID_PM_REMOVE_PROTOCOL_OFFLOAD - }, - - // Packet filter OID - { - OID_RECEIVE_FILTER_SET_FILTER, - OID_STR_WRAPPER("OID_RECEIVE_FILTER_SET_FILTER"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - { - OID_RECEIVE_FILTER_CLEAR_FILTER, // Set - OID_STR_WRAPPER("OID_RECEIVE_FILTER_CLEAR_FILTER"), - N62C_OID_RECEIVE_FILTER_CLEAR_FILTER - }, - { - OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES, // Query - OID_STR_WRAPPER("OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES"), - N62C_OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES - }, - { - OID_RECEIVE_FILTER_CURRENT_CAPABILITIES, // Query - OID_STR_WRAPPER("OID_RECEIVE_FILTER_CURRENT_CAPABILITIES"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - /* - { - OID_PACKET_COALESCING_FILTER_MATCH_COUNT, // Query - OID_STR_WRAPPER("OID_PACKET_COALESCING_FILTER_MATCH_COUNT"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - */ - //==================== - /* Need to check support or Not - { - OID_RECEIVE_FILTER_HARDWARE_CAPABILITIES, // Query - OID_STR_WRAPPER("OID_PACKET_COALESCING_FILTER_MATCH_COUNT"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - { - OID_RECEIVE_FILTER_ENUM_FILTERS, // method - OID_STR_WRAPPER("OID_PACKET_COALESCING_FILTER_MATCH_COUNT"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - { - OID_RECEIVE_FILTER_PARAMETERS, // method - OID_STR_WRAPPER("OID_PACKET_COALESCING_FILTER_MATCH_COUNT"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - { - OID_RECEIVE_FILTER_CURRENT_CAPABILITIES, // Query - OID_STR_WRAPPER("OID_PACKET_COALESCING_FILTER_MATCH_COUNT"), - N62C_OID_RECEIVE_FILTER_SET_FILTER - }, - */ - - // Others - { - OID_GEN_INTERRUPT_MODERATION, - OID_STR_WRAPPER("OID_GEN_INTERRUPT_MODERATION"), - N62C_OID_GEN_INTERRUPT_MODERATION - }, - - -// NDIS 6.0-6.1 OID - { - OID_DOT11_CURRENT_OPERATION_MODE, - OID_STR_WRAPPER("OID_DOT11_CURRENT_OPERATION_MODE"), - N6C_OID_DOT11_CURRENT_OPERATION_MODE - }, - { - OID_DOT11_FLUSH_BSS_LIST, - OID_STR_WRAPPER("OID_DOT11_FLUSH_BSS_LIST"), - N6C_OID_DOT11_FLUSH_BSS_LIST - }, - { - OID_DOT11_SCAN_REQUEST, - OID_STR_WRAPPER("OID_DOT11_SCAN_REQUEST"), - N6C_OID_DOT11_SCAN_REQUEST // Only set default scan - }, - { - OID_DOT11_ENUM_BSS_LIST, // only get from default port. ?? or need to check - OID_STR_WRAPPER("OID_DOT11_ENUM_BSS_LIST"), - N6C_OID_DOT11_ENUM_BSS_LIST - }, - { - OID_DOT11_NIC_POWER_STATE, - OID_STR_WRAPPER("OID_DOT11_NIC_POWER_STATE"), - N6C_OID_DOT11_NIC_POWER_STATE - }, - { - OID_DOT11_RESET_REQUEST, - OID_STR_WRAPPER("OID_DOT11_RESET_REQUEST"), - N6C_OID_DOT11_RESET_REQUEST - }, - { - OID_DOT11_DESIRED_PHY_LIST, - OID_STR_WRAPPER("OID_DOT11_DESIRED_PHY_LIST"), - N6C_OID_DOT11_DESIRED_PHY_LIST - }, - { - OID_DOT11_AUTO_CONFIG_ENABLED, - OID_STR_WRAPPER("OID_DOT11_AUTO_CONFIG_ENABLED"), - N6C_OID_DOT11_AUTO_CONFIG_ENABLED - }, - { - OID_DOT11_BEACON_PERIOD, - OID_STR_WRAPPER("OID_DOT11_BEACON_PERIOD"), - N6C_OID_DOT11_BEACON_PERIOD - }, - { - OID_DOT11_DTIM_PERIOD, - OID_STR_WRAPPER("OID_DOT11_DTIM_PERIOD"), - N6C_OID_DOT11_DTIM_PERIOD - }, - { - OID_DOT11_DESIRED_SSID_LIST, - OID_STR_WRAPPER("OID_DOT11_DESIRED_SSID_LIST"), - N6C_OID_DOT11_DESIRED_SSID_LIST - }, - { - OID_GEN_CURRENT_PACKET_FILTER, - OID_STR_WRAPPER("OID_GEN_CURRENT_PACKET_FILTER"), - N6C_OID_GEN_CURRENT_PACKET_FILTER - }, - { - OID_DOT11_CURRENT_CHANNEL, - OID_STR_WRAPPER("OID_DOT11_CURRENT_CHANNEL"), - N6C_OID_DOT11_CURRENT_CHANNEL - }, - { - OID_DOT11_DISCONNECT_REQUEST, - OID_STR_WRAPPER("OID_DOT11_DISCONNECT_REQUEST"), - N6C_OID_DOT11_DISCONNECT_REQUEST - }, - { - OID_DOT11_CONNECT_REQUEST, - OID_STR_WRAPPER("OID_DOT11_CONNECT_REQUEST"), - N6C_OID_DOT11_CONNECT_REQUEST - }, - { - OID_GEN_LINK_PARAMETERS, - OID_STR_WRAPPER("OID_GEN_LINK_PARAMETERS"), - N6C_OID_GEN_LINK_PARAMETERS - }, - { - OID_DOT11_SAFE_MODE_ENABLED, - OID_STR_WRAPPER("OID_DOT11_SAFE_MODE_ENABLED"), - N6C_OID_DOT11_SAFE_MODE_ENABLED - }, - { - OID_DOT11_CURRENT_PHY_ID, - OID_STR_WRAPPER("OID_DOT11_CURRENT_PHY_ID"), - N6C_OID_DOT11_CURRENT_PHY_ID - }, - { - OID_GEN_SUPPORTED_LIST, - OID_STR_WRAPPER("OID_GEN_SUPPORTED_LIST"), - N6C_OID_GEN_SUPPORTED_LIST - }, - { - OID_GEN_VENDOR_DRIVER_VERSION, - OID_STR_WRAPPER("OID_GEN_VENDOR_DRIVER_VERSION"), - N6C_OID_GEN_VENDOR_DRIVER_VERSION - }, - { - OID_PNP_CAPABILITIES, - OID_STR_WRAPPER("OID_PNP_CAPABILITIES"), - N6C_OID_PNP_CAPABILITIES - }, - { - OID_PNP_QUERY_POWER, - OID_STR_WRAPPER("OID_PNP_QUERY_POWER"), - N6C_OID_PNP_QUERY_POWER - }, - { - OID_PNP_ENABLE_WAKE_UP, - OID_STR_WRAPPER("OID_PNP_ENABLE_WAKE_UP"), - N6C_OID_PNP_ENABLE_WAKE_UP - }, - { - OID_DOT11_CURRENT_TX_ANTENNA, - OID_STR_WRAPPER("OID_DOT11_CURRENT_TX_ANTENNA"), - N6C_OID_DOT11_CURRENT_TX_ANTENNA - }, - { - OID_DOT11_CURRENT_RX_ANTENNA, - OID_STR_WRAPPER("OID_DOT11_CURRENT_RX_ANTENNA"), - N6C_OID_DOT11_CURRENT_RX_ANTENNA - }, - { - OID_PNP_ADD_WAKE_UP_PATTERN, - OID_STR_WRAPPER("OID_PNP_ADD_WAKE_UP_PATTERN"), - N6C_OID_PNP_ADD_WAKE_UP_PATTERN - }, - { - OID_PNP_REMOVE_WAKE_UP_PATTERN, - OID_STR_WRAPPER("OID_PNP_REMOVE_WAKE_UP_PATTERN"), - N6C_OID_PNP_REMOVE_WAKE_UP_PATTERN - }, - { - OID_PNP_SET_POWER, - OID_STR_WRAPPER("OID_PNP_SET_POWER"), - N6C_OID_PNP_SET_POWER - } -}; - - -// -// Description: -// Translate PRT_WLAN_BSS into PNDIS_WLAN_BSSID_EX. -// -VOID -TranslateRtBssToNdisBss( - PADAPTER Adapter, - pu1Byte pNBss, - PRT_WLAN_BSS pRtBss - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PNDIS_WLAN_BSSID_EX pNdisBss = (PNDIS_WLAN_BSSID_EX)pNBss; - - PlatformZeroMemory(pNdisBss, sizeof(NDIS_WLAN_BSSID_EX)); - - CopyMem(pNdisBss->MacAddress, pRtBss->bdBssIdBuf, 6); - if(BeHiddenSsid(pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen)) - { - pNdisBss->Ssid.Ssid[0] = 0x0; - pNdisBss->Ssid.SsidLength = 1; - } - else - { - CopySsid(pNdisBss->Ssid.Ssid, pNdisBss->Ssid.SsidLength, pRtBss->bdSsIdBuf, pRtBss->bdSsIdLen); - } - pNdisBss->Privacy = (pRtBss->bdCap & cPrivacy) ? TRUE : FALSE; - - pNdisBss->Rssi = ( (pRtBss->RSSI+1)>>1 ) - 95; - - //HCT12.0 NDTest - switch(pRtBss->wirelessmode) - { - case WIRELESS_MODE_B: - RT_TRACE(COMP_DBG, DBG_LOUD, ("TranslateRtBssToNdisBss setB Ndis802_11DS \n")); - pNdisBss->NetworkTypeInUse = Ndis802_11DS; - break; - case WIRELESS_MODE_G: - case WIRELESS_MODE_N_24G: - case WIRELESS_MODE_AC_24G: - RT_TRACE(COMP_DBG, DBG_LOUD, ("TranslateRtBssToNdisBss setG Ndis802_11OFDM24 \n")); - pNdisBss->NetworkTypeInUse = Ndis802_11OFDM24; - break; - case WIRELESS_MODE_A: - case WIRELESS_MODE_N_5G: - case WIRELESS_MODE_AC_5G: - RT_TRACE(COMP_DBG, DBG_LOUD, ("TranslateRtBssToNdisBss setG Ndis802_11OFDM5 \n")); - pNdisBss->NetworkTypeInUse = Ndis802_11OFDM5; - break; - default: - RT_TRACE(COMP_DBG, DBG_LOUD, ("TranslateRtBssToNdisBss default Ndis802_11DS \n")); - pNdisBss->NetworkTypeInUse = Ndis802_11DS; - break; - } - - pNdisBss->Configuration.Length = sizeof(NDIS_802_11_CONFIGURATION); - pNdisBss->Configuration.BeaconPeriod = pRtBss->bdBcnPer; - pNdisBss->Configuration.ATIMWindow = pRtBss->bdIbssParms.atimWin; - - //HCT12.0 NDTest - pNdisBss->Configuration.DSConfig = 1000 * (MgntGetChannelFrequency(pRtBss->ChannelNumber)); - - if(pRtBss->bdCap & cESS) - pNdisBss->InfrastructureMode = Ndis802_11Infrastructure; - else if(pRtBss->bdCap & cIBSS) - pNdisBss->InfrastructureMode = Ndis802_11IBSS; - else - pNdisBss->InfrastructureMode = Ndis802_11AutoUnknown; - - CopyMem( &pNdisBss->SupportedRates[0], &pRtBss->bdSupportRateEXBuf[0], pRtBss->bdSupportRateEXLen); - - pNdisBss->IELength = pRtBss->IE.Length; - CopyMem(pNdisBss->IEs, pRtBss->IE.Octet, pRtBss->IE.Length); - - if(pNdisBss->IELength > 0) - { - pNdisBss->Length = sizeof(NDIS_WLAN_BSSID_EX)-1+pNdisBss->IELength; - } - else - { - pNdisBss->Length = sizeof(NDIS_WLAN_BSSID_EX); - } - - // This is a 4-byte alignment, shall we align it to 8 byte for X64??? - pNdisBss->Length = (pNdisBss->Length+3)&0xfffffffc; -} - - -// -// Added for WPA2-PSK, by Annie, 2005-09-20. -// -BOOLEAN -Query_802_11_CAPABILITY( - PADAPTER Adapter, - pu1Byte pucBuf, - pu4Byte pulOutLen -) -{ - static NDIS_802_11_AUTHENTICATION_ENCRYPTION szAuthEnc[] = - { - {Ndis802_11AuthModeOpen, Ndis802_11EncryptionDisabled}, - {Ndis802_11AuthModeOpen, Ndis802_11Encryption1Enabled}, - {Ndis802_11AuthModeShared, Ndis802_11EncryptionDisabled}, - {Ndis802_11AuthModeShared, Ndis802_11Encryption1Enabled}, - {Ndis802_11AuthModeWPA, Ndis802_11Encryption2Enabled}, - {Ndis802_11AuthModeWPA, Ndis802_11Encryption3Enabled}, - {Ndis802_11AuthModeWPAPSK, Ndis802_11Encryption2Enabled}, - {Ndis802_11AuthModeWPAPSK, Ndis802_11Encryption3Enabled}, - {Ndis802_11AuthModeWPANone, Ndis802_11Encryption2Enabled}, - {Ndis802_11AuthModeWPANone, Ndis802_11Encryption3Enabled}, - {Ndis802_11AuthModeWPA2, Ndis802_11Encryption2Enabled}, - {Ndis802_11AuthModeWPA2, Ndis802_11Encryption3Enabled}, - {Ndis802_11AuthModeWPA2PSK, Ndis802_11Encryption2Enabled}, - {Ndis802_11AuthModeWPA2PSK, Ndis802_11Encryption3Enabled} - }; - static ULONG ulNumOfPairSupported = sizeof(szAuthEnc)/sizeof(NDIS_802_11_AUTHENTICATION_ENCRYPTION); - NDIS_802_11_CAPABILITY * pCap = (NDIS_802_11_CAPABILITY *)pucBuf; - pu1Byte pucAuthEncryptionSupported = (pu1Byte)pCap->AuthenticationEncryptionSupported; - - - pCap->Length = sizeof(NDIS_802_11_CAPABILITY); - if(ulNumOfPairSupported > 1 ) - pCap->Length += (ulNumOfPairSupported-1) * sizeof(NDIS_802_11_AUTHENTICATION_ENCRYPTION); - - pCap->Version = 2; - pCap->NoOfPMKIDs = NUM_PMKID_CACHE; // It MUST be set between 3~16, or WZC won't show WPA2 related option in profile. - pCap->NoOfAuthEncryptPairsSupported = ulNumOfPairSupported; - - if( sizeof (szAuthEnc) <= 240 ) // 240 = 256 - 4*4 // SecurityInfo.szCapability: only 256 bytes in size. - { - CopyMem( pucAuthEncryptionSupported, (pu1Byte)szAuthEnc, sizeof (szAuthEnc) ); - *pulOutLen = pCap->Length; - return TRUE; - } - else - { - *pulOutLen = 0; - RT_ASSERT( FALSE, ("Query_802_11_CAPABILITY(): szAuthEnc size is too large.\n")); - return FALSE; - } -} - - - -VOID -ResetHistogramCounter( - IN PADAPTER Adapter) -{ - Adapter->RxStats.NumRxRetrySmallPacket = 0; - Adapter->RxStats.NumRxRetryMiddlePacket = 0; - Adapter->RxStats.NumRxRetryLargePacket = 0; - Adapter->RxStats.NumRxOKSmallPacket = 0; - Adapter->RxStats.NumRxOKMiddlePacket = 0; - Adapter->RxStats.NumRxOKLargePacket = 0; -} - -// This is to offload the N6CQueryInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CQueryInformationHandleCustomizedWifiDirectOids( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - UCHAR ucInfo = 0; - USHORT usInfo = 0; - ULONG ulInfo = 0; - LONG lInfo = 0; - ULONGLONG ul64Info = 0; - - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - BOOLEAN bInformationCopied = FALSE; - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - -#if (P2P_SUPPORT == 1) - case OID_RT_P2P_VERSION: - { - if(pMgntInfo->bDisableRtkSupportedP2P) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Ignore query of 0x%08X because bDisableRtkSupportedP2P is turned on\n", Oid)); - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if(InformationBufferLength < sizeof(u4Byte)) - { - *BytesNeeded = sizeof(u4Byte); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - *((pu4Byte)InformationBuffer) = (GET_P2P_INFO(pAdapter))->P2PVersion; //(u4Byte)P2P_VERSION; - *BytesWritten = sizeof(u4Byte); - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - - case OID_RT_P2P_MAX_VERSION: - { - if(pMgntInfo->bDisableRtkSupportedP2P) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Ignore query of 0x%08X because bDisableRtkSupportedP2P is turned on\n", Oid)); - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if(InformationBufferLength < sizeof(u4Byte)) - { - *BytesNeeded = sizeof(u4Byte); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - *((pu4Byte)InformationBuffer) = (u4Byte)P2P_VERSION; - *BytesWritten = sizeof(u4Byte); - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - - case OID_RT_P2P_MODE: - { - if(pMgntInfo->bDisableRtkSupportedP2P) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Ignore query of 0x%08X because bDisableRtkSupportedP2P is turned on\n", Oid)); - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - ulInfo = MgntActQuery_P2PMode(pAdapter); - //RT_TRACE(COMP_P2P, DBG_LOUD, ("OID_RT_P2P_MODE: %u\n", ulInfo)); - } - break; - case OID_RT_P2P_ENUM_SCAN_LIST: - { - u4Byte ScanListSize = InformationBufferLength; - if(!MgntActQuery_P2PScanList(pAdapter, InformationBuffer, &ScanListSize)) - { - RT_TRACE(COMP_P2P, DBG_WARNING, ("Error: OID_RT_P2P_ENUM_SCAN_LIST buffer too short!!!\n")); - *BytesNeeded = ScanListSize; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - - *BytesWritten = ScanListSize; - ulInfoLen = ScanListSize; - bInformationCopied = TRUE; - } - break; - - case OID_RT_P2P_GO_INTENT: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = pP2PInfo->GOIntent >> 1; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Get OID_RT_P2P_GO_INTENT: %u\n", - ucInfo)); - } - break; - case OID_RT_P2P_CAPABILITY: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte pDevCap = (pu1Byte)InformationBuffer + 0; - pu1Byte pGrpCap = (pu1Byte)InformationBuffer + 1; - - if(InformationBufferLength < sizeof(u1Byte) * 2) - { - *BytesNeeded = sizeof(u1Byte) * 2; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("OID_RT_P2P_CAPABILITY: current DC=%u, GC=%u\n", - pP2PInfo->DeviceCapability, pP2PInfo->GroupCapability)); - - *pDevCap = pP2PInfo->DeviceCapability; - *pGrpCap = pP2PInfo->GroupCapability; - - P2PDumpDeviceCapability(*pDevCap); - P2PDumpGroupCapability(*pGrpCap); - - *BytesWritten = sizeof(u1Byte) * 2; - ulInfoLen = sizeof(u1Byte) * 2; - bInformationCopied = TRUE; - } - break; - case OID_RT_P2P_GO_SSID: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte pSsidLen = (pu1Byte)InformationBuffer + 0; - pu1Byte SsidBuf = (pu1Byte)InformationBuffer + 1; - - if(InformationBufferLength < sizeof(u1Byte) + pP2PInfo->SSIDLen) - { - *BytesNeeded = sizeof(u1Byte) + pP2PInfo->SSIDLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - - if(pP2PInfo->Role != P2P_GO) - { - *BytesWritten = 0; - } - else - { - // - // When query, return the entire (Including DIRECT-xx) SSID of the GO. - // However, when set, only postfix can be set. - // - u2Byte SsidLen = 0; - MgntActQuery_802_11_SSID(GetFirstExtAdapter(pAdapter), SsidBuf, &SsidLen); - *pSsidLen = (u1Byte)SsidLen; - } - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - case OID_RT_P2P_GO_SSID_POSTFIX: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - pu1Byte pSsidLen = (pu1Byte)InformationBuffer + 0; - pu1Byte SsidBuf = (pu1Byte)InformationBuffer + 1; - - if(InformationBufferLength < sizeof(u1Byte) + pP2PInfo->SSIDLen) - { - *BytesNeeded = sizeof(u1Byte) + pP2PInfo->SSIDLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - - CopySsid(SsidBuf, *pSsidLen, pP2PInfo->SSIDPostfixBuf, pP2PInfo->SSIDPostfixLen); - - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "OID_RT_P2P_GO_SSID\n", SsidBuf, *pSsidLen); - - *BytesWritten = *pSsidLen + 1; - - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - case OID_RT_P2P_SELF_DEV_DESC: - { - if(GET_P2P_INFO(pAdapter)->P2PVersion == 0 && InformationBufferLength < sizeof(P2P_DEVICE_DESCRIPTOR_V0)) - { - *BytesNeeded = sizeof(P2P_DEVICE_DESCRIPTOR_V0); - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - else if(GET_P2P_INFO(pAdapter)->P2PVersion == 1 && InformationBufferLength < sizeof(P2P_DEVICE_DESCRIPTOR_V1)) - { - *BytesNeeded = sizeof(P2P_DEVICE_DESCRIPTOR_V1); - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - else if((GET_P2P_INFO(pAdapter)->P2PVersion == 2 || GET_P2P_INFO(pAdapter)->P2PVersion == 3) - && InformationBufferLength < sizeof(P2P_DEVICE_DESCRIPTOR_V2)) - { - *BytesNeeded = sizeof(P2P_DEVICE_DESCRIPTOR_V2); - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - - *BytesWritten = MgntActQuery_P2PSelfDeviceDescriptor(pAdapter, InformationBuffer); - bInformationCopied = TRUE; - - } - break; - case OID_RT_P2P_INTERFACE_ADDRESS: - { - if(InformationBufferLength < 6) - { - *BytesNeeded = 6; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - PlatformMoveMemory(InformationBuffer, (GET_P2P_INFO(pAdapter))->InterfaceAddress, 6); - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Get OID_RT_P2P_INTERFACE_ADDRESS: ", InformationBuffer); - - *BytesWritten = 6; - bInformationCopied = TRUE; - } - break; - case OID_RT_P2P_DEVICE_ADDRESS: - { - if(InformationBufferLength < 6) - { - *BytesNeeded = 6; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - PlatformMoveMemory(InformationBuffer, (GET_P2P_INFO(pAdapter))->DeviceAddress, 6); - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Get OID_RT_P2P_DEVICE_ADDRESS: ", InformationBuffer); - - *BytesWritten = 6; - bInformationCopied = TRUE; - } - break; - case OID_RT_P2P_OP_CHANNEL: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = pP2PInfo->OperatingChannel; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Get OID_RT_P2P_OP_CHANNEL: %u\n", - ucInfo)); - } - break; - case OID_RT_P2P_LISTEN_CHANNEL: - { - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - MgntActQuery_P2PListenChannel(pAdapter, &ucInfo); - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Get OID_RT_P2P_LISTEN_CHANNEL: %u\n", - ucInfo)); - } - break; - case OID_RT_P2P_EXTENDED_LISTEN_TIMING: - { - if( InformationBufferLength < sizeof(u2Byte) * 2) - { - *BytesNeeded = sizeof(u2Byte) * 2; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ((pu2Byte)InformationBuffer)[0] = (u2Byte)(GET_P2P_INFO(pAdapter))->ExtListenTimingPeriod; - ((pu2Byte)InformationBuffer)[1] = (u2Byte)(GET_P2P_INFO(pAdapter))->ExtListenTimingDuration; - - *BytesWritten = sizeof(u2Byte) * 2; - bInformationCopied = TRUE; - } - break; - case OID_RT_P2P_GO_NEGO_RESULT: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = pP2PInfo->PreviousGONegoResult; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Get OID_RT_P2P_GO_NEGO_RESULT: %u\n", - ucInfo)); - } - break; - case OID_RT_P2P_CHANNEL_LIST: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_P2P_CHANNEL_LIST\n") ); - { - if(MgntActQuery_P2PChannelList(pAdapter, - (u4Byte)InformationBufferLength, - (pu1Byte)InformationBuffer, - (pu1Byte)InformationBuffer + 1) == RT_STATUS_SUCCESS) - { - *BytesWritten = *((pu1Byte)InformationBuffer) + 1; - bInformationCopied = TRUE; - } - else - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - } - break; - - case OID_RT_P2P_SERVICE_FRAG_THRESHOLD: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Query OID_RT_P2P_SERVICE_FRAG_THRESHOLD\n")); - - if(InformationBufferLength < sizeof(u2Byte)) - { - *BytesNeeded = sizeof(u2Byte); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - if(RT_STATUS_SUCCESS == P2PGetServiceFragThreshold(pAdapter, (pu2Byte)InformationBuffer)) - { - Status = NDIS_STATUS_FAILURE; - } - } - break; - -#endif // #if (P2P_SUPPORT == 1) - case OID_RT_P2P_FULL_SSID: - { - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_P2P_FULL_SSID\n")); - if(NDIS_STATUS_SUCCESS == NdisStatusFromRtStatus(P2P_GetP2PGoFullSSID(pAdapter, InformationBufferLength, InformationBuffer, BytesNeeded))) - { - *BytesWritten = *BytesNeeded; - bInformationCopied = TRUE; - } - } - break; - - } - - if(Status == NDIS_STATUS_SUCCESS) - { - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen && !bInformationCopied) - { - *BytesWritten = ulInfoLen; - NdisMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else if(!bInformationCopied) - { - // Buffer too short - *BytesNeeded = ulInfoLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - } - - return Status; -} - - - - -// This is to offload the N6CQueryInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CQueryInformationHandleCustomized11nOids( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - UCHAR ucInfo = 0; - USHORT usInfo = 0; - ULONG ulInfo = 0; - LONG lInfo = 0; - ULONGLONG ul64Info = 0; - - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - BOOLEAN bInformationCopied = FALSE; - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - case OID_RT_GET_11N_MIMPO_RSSI: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_11N_MIMPO_RSSI\n")); - //DbgPrint("Query OID_RT_GET_11N_MIMPO_RSSI\n"); - { - MIMO_RSSI reportRSSI; - - if(InformationBufferLength < sizeof(MIMO_RSSI)) - { - *BytesNeeded = sizeof(MIMO_RSSI); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - reportRSSI.EnableAntenna = 0x0f; - reportRSSI.AntennaA = pAdapter->RxStats.RxRSSIPercentage[ODM_RF_PATH_A]; - reportRSSI.AntennaB = pAdapter->RxStats.RxRSSIPercentage[ODM_RF_PATH_B]; - reportRSSI.AntennaC = pAdapter->RxStats.RxRSSIPercentage[ODM_RF_PATH_C]; - reportRSSI.AntennaD = pAdapter->RxStats.RxRSSIPercentage[ODM_RF_PATH_D]; - reportRSSI.Average = GET_UNDECORATED_AVERAGE_RSSI(pAdapter); - - PlatformMoveMemory( InformationBuffer, - &(reportRSSI), sizeof(MIMO_RSSI)); - *BytesWritten = sizeof(MIMO_RSSI); - } - return Status; - - case OID_RT_MOTOR_BT_802_11_PAL: - { - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_MOTOR_BT_802_11_PAL\n")); - RT_DISP(FIOCTL, IOCTL_STATE, ("[BT]Query OID_RT_MOTOR_BT_802_11_PAL\n")); - return Status; - } - - //break; - case OID_RT_GET_11N_MIMPO_EVM: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_11N_MIMPO_EVM\n")); - { - - MIMO_EVM reportEVM; - - if(InformationBufferLength < sizeof(MIMO_EVM)) - { - *BytesNeeded = sizeof(MIMO_EVM); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - reportEVM.EVM1 = pAdapter->RxStats.RxEVMPercentage[0]; - reportEVM.EVM2 = pAdapter->RxStats.RxEVMPercentage[1]; - - PlatformMoveMemory( InformationBuffer, - &(reportEVM), sizeof(MIMO_EVM)); - *BytesWritten = sizeof(MIMO_EVM); - - } - return Status; - - case OID_RT_11N_INITIAL_TX_RATE: //added by vivi, 20080604 - { - if(pAdapter->TxStats.CurrentInitTxRate > 0x80) - ulInfo = pAdapter->TxStats.CurrentInitTxRate*10000/2; - else - ulInfo = HTMcsToDataRate(pAdapter, pAdapter->TxStats.CurrentInitTxRate)*10000/2; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, MgntActQuery_RT_11N_INITIAL_TX_RATES:%d Mbps\n",ulInfo/10000)); - } - break; - - case OID_RT_11N_TX_RETRY_COUNT://added by vivi, 20080604 - ulInfo =(u4Byte) pAdapter->TxStats.NumTxRetryCount; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_RT_11N_TX_RETRY_COUNT:%d Mbps\n",ulInfo)); - break; - - case OID_RT_11N_UI_SHOW_TX_RATE: //Add by Jacken 2008/04/14 - ulInfo = (MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter,FALSE, FALSE)/2)*10000; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, MgntActQuery_RT_11N_USER_SHOW_RATES-TX:%d Mbps\n",ulInfo/10000)); - break; - - case OID_RT_11N_UI_SHOW_RX_RATE: //Add by Jacken 2008/05/12 - ulInfo = (MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter,TRUE, FALSE)/2)*10000; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, MgntActQuery_RT_11N_USER_SHOW_RATES-RX:%d Mbps\n",ulInfo/10000)); - break; - - case OID_RT_CURRENT_BANDWIDTH: - ulInfo = pMgntInfo->dot11CurrentChannelBandWidth; - break; - - case OID_RT_CURRENT_CHANNEL_INFO: - { - u4Byte ChnlLen = InformationBufferLength; - if(CHNL_GetCurrnetChnlInfo(pAdapter, InformationBuffer, &ChnlLen) == FALSE) - { - *BytesNeeded = ChnlLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - else - { - ulInfoLen = *BytesWritten = ChnlLen; - bInformationCopied = TRUE; - } - } - break; - - case OID_RT_11N_FIRMWARE_VERSION: - ulInfo = (ULONG)HalGetFirmwareVerison(pAdapter); - ulInfoLen = sizeof(u2Byte); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, Firmware Version = %d\n",ucInfo)); - break; - case OID_RT_ADCSMP_TRIG: - { - Status = ADCSmp_Query(pAdapter, InformationBufferLength, InformationBuffer, BytesWritten); - if(Status != RT_STATUS_SUCCESS) - return Status; - - bInformationCopied = TRUE; - } - break; - - case OID_RT_11N_FORCED_LDPC: - { - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - ulInfo = pNdisCommon->RegLdpc; - ulInfoLen = 1; - } - break; - - case OID_RT_11N_FORCED_STBC: - { - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - ulInfo = pNdisCommon->RegStbc; - ulInfoLen = 1; - } - break; - - case OID_RT_BAND_SELECT: - { - ulInfo = pMgntInfo->RegPreferBand; - RT_TRACE(COMP_OID_SET,DBG_LOUD,("Qyery PreferBand=%d\n", pMgntInfo->RegPreferBand)); - ulInfoLen = 4; - } - break; - - } - - if(Status == NDIS_STATUS_SUCCESS) - { - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen && !bInformationCopied) - { - *BytesWritten = ulInfoLen; - NdisMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else if(!bInformationCopied) - { - // Buffer too short - *BytesNeeded = ulInfoLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - } - - return Status; -} - - -// This is to offload the N6CQueryInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CQueryInformationHandleCustomizedSecurityOids( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - UCHAR ucInfo = 0; - USHORT usInfo = 0; - ULONG ulInfo = 0; - LONG lInfo = 0; - ULONGLONG ul64Info = 0; - - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - BOOLEAN bInformationCopied = FALSE; - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - case OID_802_11_CAPABILITY: - case OID_RT_802_11_CAPABILITY: - pInfo = &(pMgntInfo->SecurityInfo.szCapability[0]); - Query_802_11_CAPABILITY( pAdapter, (pu1Byte)pInfo, &ulInfoLen ); - RT_TRACE( COMP_OID_QUERY, DBG_WARNING, ("OID_802_11_CAPABILITY Querying (Warning: Old OID in NDIS5, do nothing)\n") ); - break; - - case OID_802_11_PMKID: - case OID_RT_802_11_PMKID: - RT_TRACE( COMP_OID_QUERY, DBG_WARNING, ("OID_802_11_PMKID Querying (Warning: Old OID in NDIS5, do nothing)\n") ); - break; - - case OID_802_11_AUTHENTICATION_MODE: - case OID_RT_802_11_AUTHENTICATION_MODE: - RT_TRACE( COMP_OID_QUERY, DBG_WARNING, ("OID_802_11_AUTHENTICATION_MODE Querying (Warning: Old OID in NDIS5, do nothing)\n") ); - { - RT_AUTH_MODE authmode; - - MgntActQuery_802_11_AUTHENTICATION_MODE( pAdapter, &authmode ); - switch( authmode ) - { - case RT_802_11AuthModeOpen: - ulInfo = Ndis802_11AuthModeOpen; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: Ndis802_11AuthModeOpen\n")); - break; - case RT_802_11AuthModeShared: - ulInfo = Ndis802_11AuthModeShared; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: Ndis802_11AuthModeShared\n")); - break; - case RT_802_11AuthModeAutoSwitch: - ulInfo = Ndis802_11AuthModeAutoSwitch; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: RT_802_11AuthModeAutoSwitch\n")); - break; - case RT_802_11AuthModeWPA: - ulInfo = Ndis802_11AuthModeWPA; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: RT_802_11AuthModeWPA\n")); - break; - case RT_802_11AuthModeWPAPSK: - ulInfo = Ndis802_11AuthModeWPAPSK; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: RT_802_11AuthModeWPAPSK\n")); - break; - case RT_802_11AuthModeWPANone: - ulInfo = Ndis802_11AuthModeWPANone; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: RT_802_11AuthModeWPANone\n")); - break; - case RT_802_11AuthModeWPA2: - ulInfo = Ndis802_11AuthModeWPA2; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: RT_802_11AuthModeWPA2\n")); - break; - case RT_802_11AuthModeWPA2PSK: - ulInfo = Ndis802_11AuthModeWPA2PSK; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: RT_802_11AuthModeWPA2PSK\n")); - break; - case RT_802_11AuthModeWAPI: - ulInfo = 8; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: Ndis802_11AuthModeWAPIPSK\n")); - break; - case RT_802_11AuthModeCertificateWAPI: - ulInfo = 9; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: Ndis802_11AuthModeWAPICERTIFICATE\n")); - break; - case RT_802_11AuthModeMax: - ulInfo = Ndis802_11AuthModeMax; // Not a real mode, - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: Ndis802_11AuthModeMax \n")); - break; - default: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_AUTHENTICATION_MODE: unknow authmode: 0x%X\n", authmode)); - break; - } - } - break; - - case OID_802_11_ASSOCIATION_INFORMATION: - case OID_RT_802_11_ASSOCIATION_INFORMATION: - RT_TRACE( COMP_OID_QUERY, DBG_WARNING, ("OID_802_11_ASSOCIATION_INFORMATION Querying (Warning: Old OID in NDIS5, do nothing)\n") ); - { - PNDIS_802_11_ASSOCIATION_INFORMATION pAssocInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)(pMgntInfo->SecurityInfo.AssocInfo); - - MgntActQuery_802_11_ASSOCIATION_INFORMATION(pAdapter, pAssocInfo); - - pInfo = pAssocInfo; - ulInfoLen = sizeof(NDIS_802_11_ASSOCIATION_INFORMATION) + \ - pAssocInfo->RequestIELength + \ - pAssocInfo->ResponseIELength; - - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_ASSOCIATION_INFORMATION, length=%d\n", ulInfoLen ) ); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "pInfo", pInfo, ulInfoLen ); - } - break; - - //case OID_802_11_WEP_STATUS: - case OID_802_11_ENCRYPTION_STATUS: - case OID_RT_802_11_ENCRYPTION_STATUS: - switch(pMgntInfo->SecurityInfo.EncryptionStatus) - { - case RT802_11Encryption1Enabled: - if(pMgntInfo->SecurityInfo.KeyLen[pMgntInfo->SecurityInfo.DefaultTransmitKeyIdx] == 0) - ulInfo = RT802_11Encryption1KeyAbsent; - else - ulInfo = pMgntInfo->SecurityInfo.EncryptionStatus; - break; - - case RT802_11Encryption2Enabled: - if( pMgntInfo->SecurityInfo.KeyLen[PAIRWISE_KEYIDX] == 0) - ulInfo = RT802_11Encryption2KeyAbsent; - else - ulInfo = pMgntInfo->SecurityInfo.EncryptionStatus; - break; - - case RT802_11Encryption3Enabled: - // For AES, Added by Annie, 2005-09-15. - if( pMgntInfo->SecurityInfo.KeyLen[PAIRWISE_KEYIDX] == 0) // Should I check pMgntInfo->SecurityInfo.AESKeyBuf len??? - ulInfo = RT802_11Encryption3KeyAbsent; - else - ulInfo = pMgntInfo->SecurityInfo.EncryptionStatus; - break; - - case Wapi_Encryption: - ulInfo = pMgntInfo->SecurityInfo.EncryptionStatus; - break; - case Wapi_Certificate: - ulInfo = pMgntInfo->SecurityInfo.EncryptionStatus; - break; - - default: - ulInfo = pMgntInfo->SecurityInfo.EncryptionStatus; - break; - } - RT_TRACE( COMP_OID_QUERY, DBG_WARNING, ("OID_802_11_ENCRYPTION_STATUS Querying (Warning: Old OID in NDIS5, do nothing)\n") ); - break; - - // by Owen on 03/07/03 for Windows ME HCT 9.6 - case OID_802_11_ADD_WEP: - case OID_802_11_REMOVE_WEP: - case OID_802_11_DISASSOCIATE: - case OID_802_11_BSSID_LIST_SCAN: - case OID_802_11_RELOAD_DEFAULTS: - case OID_RT_802_11_ADD_WEP: - case OID_RT_802_11_REMOVE_WEP: - case OID_RT_802_11_DISASSOCIATE: - case OID_RT_802_11_BSSID_LIST_SCAN: - case OID_RT_802_11_RELOAD_DEFAULTS: - ulInfo = 1; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query some OIDs for Windows ME HCT 9.6.\n")); - break; - - } - - if(Status == NDIS_STATUS_SUCCESS) - { - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen && !bInformationCopied) - { - *BytesWritten = ulInfoLen; - NdisMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else if(!bInformationCopied) - { - // Buffer too short - *BytesNeeded = ulInfoLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - } - - return Status; -} - - -// This is to offload the N6CQueryInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CQueryInformationHandleCustomizedOids( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - UCHAR ucInfo = 0; - USHORT usInfo = 0; - ULONG ulInfo = 0; - LONG lInfo = 0; - ULONGLONG ul64Info = 0; - - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - BOOLEAN bInformationCopied = FALSE; - u4Byte i; - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - //-------- Original 802.11 OID-------------- - case OID_802_11_BSSID: - case OID_RT_802_11_BSSID: - if( (pMgntInfo->mIbss==TRUE) || (pMgntInfo->mAssoc==TRUE) ) - { - pInfo = &pMgntInfo->Bssid[0]; - ulInfoLen = 6 ; - } - else - { - Status = NDIS_STATUS_ADAPTER_NOT_READY; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_BSSID: %02X:%02X:%02X:%02X:%02X:%02X\n", - pMgntInfo->Bssid[0], pMgntInfo->Bssid[1], pMgntInfo->Bssid[2], pMgntInfo->Bssid[3], pMgntInfo->Bssid[4], pMgntInfo->Bssid[5])); - break; - - case OID_802_11_SSID: - case OID_RT_802_11_SSID: - if( (pMgntInfo->mIbss==1) || (pMgntInfo->mAssoc==1) ) // 2005.02.01, by rcnjko. - { - u2Byte len; - - PlatformZeroMemory( &(pNdisCommon->TmpNdisSsid.Ssid[0]), 32 ); - MgntActQuery_802_11_SSID( pAdapter, &(pNdisCommon->TmpNdisSsid.Ssid[0]), &len ); - if( len <= 32 ) - { - pNdisCommon->TmpNdisSsid.SsidLength = len; - //RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_SSID: <%s>\n",pNdisCommon->TmpNdisSsid.Ssid)); - RT_PRINT_STR( COMP_OID_QUERY, DBG_LOUD, "Query OID_802_11_SSID", pNdisCommon->TmpNdisSsid.Ssid, pNdisCommon->TmpNdisSsid.SsidLength ); - } - else - { - pNdisCommon->TmpNdisSsid.SsidLength = 0; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_SSID: NDIS_STATUS_ADAPTER_NOT_READY\n")); - } - } - else - { - pNdisCommon->TmpNdisSsid.SsidLength = 0; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_SSID: NDIS_STATUS_ADAPTER_NOT_READY\n")); - } - - pInfo = &(pNdisCommon->TmpNdisSsid); - ulInfoLen = pNdisCommon->TmpNdisSsid.SsidLength + FIELD_OFFSET(NDIS_802_11_SSID, Ssid); // Use FIELD_OFFSET for x64 safe, 2005.10.12, by rcnjko. - break; - - case OID_802_11_NETWORK_TYPES_SUPPORTED: - case OID_RT_802_11_NETWORK_TYPES_SUPPORTED: - { - u2Byte SupportedBand = pAdapter->HalFunc.GetSupportedWirelessModeHandler(pAdapter); - u1Byte index, num=0; - - struct{WIRELESS_MODE wm; NDIS_802_11_NETWORK_TYPE nt; } BandSetList[3] = - { {WIRELESS_MODE_B, Ndis802_11DS}, - {(WIRELESS_MODE_N_5G|WIRELESS_MODE_A), Ndis802_11OFDM5}, - {(WIRELESS_MODE_AC_24G|WIRELESS_MODE_N_24G|WIRELESS_MODE_G), Ndis802_11OFDM24} }; - - for(index=0; index<3; index++) - { - if(SupportedBand & BandSetList[index].wm) - { - pNdisCommon->TmpNdisNetworkTypeList.NetworkType[num] = BandSetList[index].nt; - num++; - } - } - RT_ASSERT((num!=0), ("N5CQueryInformation(): OID_802_11_NETWORK_TYPES_SUPPORTED no value return!!\n")); - pNdisCommon->TmpNdisNetworkTypeList.NumberOfItems = num; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N5CQueryInformation(): Number of Network Type:%d", num)); - - - pInfo = &(pNdisCommon->TmpNdisNetworkTypeList); - ulInfoLen = sizeof(NDIS_802_11_NETWORK_TYPE_LIST); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_NETWORK_TYPES_SUPPORTED: \n")); - } - break; - - case OID_802_11_NETWORK_TYPE_IN_USE: - case OID_RT_802_11_NETWORK_TYPE_IN_USE: - if (pNdisCommon->BeSetNetworkTypeByNDTest) - { - ulInfo = pNdisCommon->BeSetNetworkTypeByNDTest; - RT_TRACE(COMP_DBG, DBG_LOUD, ("Query OID_802_11_NETWORK_TYPE_IN_USE: BeSetNetworkTypeByNDTest 0x%0X\n", ulInfo)); - break; - } - switch(pMgntInfo->dot11CurrentWirelessMode) - { - case WIRELESS_MODE_B: - ulInfo = Ndis802_11DS; - RT_TRACE(COMP_DBG, DBG_LOUD, ("Query OID_802_11_NETWORK_TYPE_IN_USE: B Ndis802_11DS\n")); - break; - case WIRELESS_MODE_G: - case WIRELESS_MODE_N_24G: - case WIRELESS_MODE_AC_24G: - ulInfo = Ndis802_11OFDM24; - RT_TRACE(COMP_DBG, DBG_LOUD, ("Query OID_802_11_NETWORK_TYPE_IN_USE: G Ndis802_11OFDM24\n")); - break; - case WIRELESS_MODE_A: - case WIRELESS_MODE_N_5G: - ulInfo = Ndis802_11OFDM5; - RT_TRACE(COMP_DBG, DBG_LOUD, ("Query OID_802_11_NETWORK_TYPE_IN_USE: A Ndis802_11OFDM5\n")); - break; - default: - ulInfo = Ndis802_11DS; - RT_TRACE(COMP_DBG, DBG_LOUD, ("Query OID_802_11_NETWORK_TYPE_IN_USE: default Ndis802_11DS\n")); - break; - } - break; - - case OID_802_11_TX_POWER_LEVEL: - case OID_RT_802_11_TX_POWER_LEVEL: - // We shall return the value of tx power in mW. - ulInfo = 100; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_TX_POWER_LEVEL: \n")); - break; - - - case OID_RT_TX_POWER: - { - if( InformationBufferLength < sizeof(s4Byte) ) - { - *BytesNeeded = sizeof(s4Byte); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - *((ps4Byte)InformationBuffer) = MgntActQuery_TX_POWER_DBM(pAdapter); - - ulInfoLen = sizeof(s4Byte); - *BytesWritten = ulInfoLen; - bInformationCopied = TRUE; - - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_TX_POWER: %d dBm\n", *((ps4Byte)InformationBuffer))); - } - break; - - case OID_RT_TX_POWER_RANGE: - { - // 2 Bytes to store min (4Byte) and max (4Byte) - if(InformationBufferLength < 2 * sizeof(s4Byte)) - { - *BytesNeeded = 2 * sizeof(s4Byte); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformZeroMemory(InformationBuffer, 2 * sizeof(s4Byte)); - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_MIN_TX_POWER_DBM, (pu1Byte)InformationBuffer); - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_MAX_TX_POWER_DBM, ((pu1Byte)InformationBuffer + 4)); - - ulInfoLen = 2 * sizeof(s4Byte); - *BytesWritten = ulInfoLen; - bInformationCopied = TRUE; - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_TX_POWER_RANGE: min = %d dBm, max = %d\n", *((ps4Byte)InformationBuffer), *(((ps4Byte)InformationBuffer + 1)))); - } - break; - - case OID_802_11_RSSI: - case OID_RT_802_11_RSSI: - // It had already translated to dBm (x=0.5y-95). - if(pMgntInfo->AntennaTest == 1) - { - u4Byte diff=0, pwdball_diff=0; - diff = pAdapter->RxStats.RssiCalculateCnt - pAdapter->RxStats.RssiOldCalculateCnt; - pAdapter->RxStats.RssiOldCalculateCnt = pAdapter->RxStats.RssiCalculateCnt; - pwdball_diff = pAdapter->RxStats.PWDBAllCnt - pAdapter->RxStats.PWDBAllOldCnt; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_RSSI: PWDBAllCnt %d PWDBAllOLDCnt %d\n", pAdapter->RxStats.PWDBAllCnt, pAdapter->RxStats.PWDBAllOldCnt)); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_RSSI: diff %d pwdbdiff %d\n", diff, pwdball_diff)); - - pAdapter->RxStats.PWDBAllOldCnt = pAdapter->RxStats.PWDBAllCnt; - - if(diff >= 3) // calculate more than 3 times of rssi - { - lInfo = (((pwdball_diff/diff)+1)>>1)-95; - } - else - { - lInfo = -80+(u4Byte)diff; // random number. - } - - } - else - lInfo = pAdapter->RxStats.SignalStrength; - pInfo = &lInfo; - ulInfoLen = sizeof(lInfo); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_RSSI: %d\n", lInfo)); - break; - - case OID_802_11_RSSI_TRIGGER: - case OID_RT_802_11_RSSI_TRIGGER: - ulInfo = pNdisCommon->NdisRssiTrigger; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_RSSI_TRIGGER: %d\n", ulInfo)); - break; - - case OID_802_11_INFRASTRUCTURE_MODE: - case OID_RT_802_11_INFRASTRUCTURE_MODE: - { - RT_JOIN_NETWORKTYPE networktype = MgntActQuery_802_11_INFRASTRUCTURE_MODE(pAdapter); - - switch( networktype ) - { - case RT_JOIN_NETWORKTYPE_INFRA: - ulInfo = Ndis802_11Infrastructure; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_INFRASTRUCTURE_MODE: Ndis802_11INFRA\n")); - break; - case RT_JOIN_NETWORKTYPE_ADHOC: - ulInfo = Ndis802_11IBSS; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_INFRASTRUCTURE_MODE: Ndis802_11IBSS\n")); - break; - case RT_JOIN_NETWORKTYPE_AUTO: - ulInfo = Ndis802_11IBSS; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_INFRASTRUCTURE_MODE: Ndis802_11AUTO \n")); - break; - default: - ulInfo = Ndis802_11AutoUnknown; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_INFRASTRUCTURE_MODE: Ndis802_11unknown\n")); - break; - } - } - break; - - case OID_802_11_FRAGMENTATION_THRESHOLD: - case OID_RT_802_11_FRAGMENTATION_THRESHOLD: - ulInfo = (ULONG)MgntActQuery_802_11_FRAGMENTATION_THRESHOLD(pAdapter); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_FRAGMENTATION_THRESHOLD: %d\n", ulInfo)); - break; - - case OID_802_11_RTS_THRESHOLD: - case OID_RT_802_11_RTS_THRESHOLD: - ulInfo = (ULONG)MgntActQuery_802_11_RTS_THRESHOLD(pAdapter); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_RTS_THRESHOLD: %d\n", ulInfo)); - break; - - case OID_802_11_SUPPORTED_RATES: - case OID_RT_802_11_SUPPORTED_RATES: - //TODO: - ulInfo = 1; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_SUPPORTED_RATES: \n")); - break; - - case OID_802_11_DESIRED_RATES: - case OID_RT_802_11_DESIRED_RATES: - //TODO: - ulInfo = 1; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_DESIRED_RATES: \n")); - break; - - case OID_802_11_CONFIGURATION: - case OID_RT_802_11_CONFIGURATION: - { - pNdisCommon->TmpConfig80211.Length = sizeof(NDIS_802_11_CONFIGURATION); - - if( (pMgntInfo->mAssoc) || (pMgntInfo->mIbss) ) - { - pNdisCommon->TmpConfig80211.BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; - } - else - { - pNdisCommon->TmpConfig80211.BeaconPeriod = 0; - } - - pNdisCommon->TmpConfig80211.ATIMWindow = pMgntInfo->mIbssParms.atimWin; - - if(GET_HAL_DATA(pAdapter)->CurrentBandType == BAND_ON_2_4G) - pNdisCommon->TmpConfig80211.DSConfig = DSSS_Freq_Channel[pMgntInfo->dot11CurrentChannelNumber]*1000; - else if(GET_HAL_DATA(pAdapter)->CurrentBandType == BAND_ON_5G) - pNdisCommon->TmpConfig80211.DSConfig = (5000+5*pMgntInfo->dot11CurrentChannelNumber)*1000; - - pNdisCommon->TmpConfig80211.FHConfig.Length = sizeof(NDIS_802_11_CONFIGURATION_FH); - pNdisCommon->TmpConfig80211.FHConfig.HopPattern = 0; - pNdisCommon->TmpConfig80211.FHConfig.HopSet = 0; - pNdisCommon->TmpConfig80211.FHConfig.DwellTime = 0; - - pInfo = &(pNdisCommon->TmpConfig80211); - ulInfoLen = pNdisCommon->TmpConfig80211.Length; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_CONFIGURATION: \n")); - break; - - case OID_802_11_STATISTICS: - case OID_RT_802_11_STATISTICS: - //TODO: - ulInfo = 1; - Status = NDIS_STATUS_NOT_SUPPORTED; //Added by Jay 0523 - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_STATISTICS: \n")); - break; - - case OID_802_11_POWER_MODE: - case OID_RT_802_11_POWER_MODE: - ulInfo = pNdisCommon->RegPowerSaveMode; - if(Oid == OID_RT_802_11_POWER_MODE && InformationBufferLength >= 8) - { - *((pu4Byte)InformationBuffer) = pNdisCommon->RegPowerSaveMode; - *((pu4Byte)((pu1Byte)InformationBuffer + 4)) = (u4Byte)pMgntInfo->PsPollType; - // Setup variables to return. - *BytesWritten = 8; - bInformationCopied = TRUE; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_11_POWER_MODE: 0x%X\n", ulInfo)); - break; - - case OID_802_11_PRIVACY_FILTER: - case OID_RT_802_11_PRIVACY_FILTER: - //TODO: - ulInfo = Ndis802_11PrivFilterAcceptAll; - RT_TRACE( COMP_OID_QUERY, DBG_WARNING, ("OID_802_11_PRIVACY_FILTER Querying (Warning: Old OID in NDIS5, do nothing)\n") ); - break; - - case OID_RT_GET_SCAN_IN_PROGRESS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_SCAN_IN_PROGRESS.\n")); - ulInfo = 0xAA; // 0xAA is fixed pattern - if((pMgntInfo->bScanInProgress == TRUE) || (pMgntInfo->PowerSaveControl.ReturnPoint == IPS_CALLBACK_MGNT_LINK_REQUEST)) - ulInfo |= 0x0100; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_SCAN_IN_PROGRESS: %x.\n", ulInfo)); - break; - - case OID_RT_GET_SIGNAL_QUALITY: - if(pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - // 2013/09/02 MH Add to enhance more SQ value. - if (pAdapter->RxStats.SignalQuality >= 80) - { - ulInfo = 100; - } - else if (pAdapter->RxStats.SignalQuality <= 79) - { - ulInfo = pAdapter->RxStats.SignalQuality+20; - } - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("OID_RT_GET_SIGNAL_QUALITY %x.\n", ulInfo)); - - } - else - { - ulInfo = 0xffffffff; // It stands for -1 in 4-byte integer. - } - break; - - case OID_RT_GET_CONNECT_STATE: - // Rearrange the order to let the UI still shows connection when scan is in progress - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CONNECT_STATE.\n")); - if(pMgntInfo->mAssoc) - ulInfo = 1; - else if(pMgntInfo->mIbss) - ulInfo = 2; - else if(pMgntInfo->bScanInProgress) - ulInfo = 0; - else - ulInfo = 3; - ulInfoLen = sizeof(ULONG); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CONNECT_STATE: %d\n", ulInfo)); - break; - - case OID_RT_GET_CHANNELPLAN: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CHANNELPLAN.\n")); - ulInfo = (ULONG)pMgntInfo->ChannelPlan; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CHANNELPLAN: %d\n", ulInfo)); - break; - - case OID_RT_GET_CHANNEL: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CHANNEL.\n")); - // For damn Netgear WG111V2. - if(pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - ulInfo = pMgntInfo->dot11CurrentChannelNumber; - } - else if(ACTING_AS_AP(pAdapter) ||IsExtAPModeExist(pAdapter)) - { - //sherry added for ui show correct channel for AP mode 20110517 - ulInfo = pMgntInfo->dot11CurrentChannelNumber; - } - - else - { - ulInfo = RT_GetChannelNumber(pAdapter); - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CHANNEL: %d\n", ulInfo)); - break; - - - case OID_RT_GET_CHANNEL_LIST: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_CHANNEL_LIST.\n")); - { - pu1Byte pList; - PRT_CHANNEL_LIST pChannelList = NULL; - u1Byte i, chnlcount=0; - u4Byte cbBufSizeRequired; - RT_CHNL_LIST_ENTRY ChnlListEntryArray[MAX_CHANNEL_NUM] = {0}; - u1Byte ChannelLen; - BOOLEAN bIndicateToUI = FALSE; - - - - if(IS_DUAL_BAND_SUPPORT(pAdapter)) - { - ChannelLen = RtGetDualBandChannel(pAdapter, ChnlListEntryArray); - if(ChannelLen == 0) - { - return NDIS_STATUS_ADAPTER_NOT_READY; - } - } - else - { - pChannelList = MgntActQuery_ChannelList(pAdapter); - - if(!pChannelList) - { - return NDIS_STATUS_ADAPTER_NOT_READY; - } - - for(i=0;iChannelLen;i++) - { - PlatformMoveMemory(&ChnlListEntryArray[i], &pChannelList->ChnlListEntry[i], sizeof(RT_CHNL_LIST_ENTRY)); - RT_TRACE(COMP_INIT,DBG_LOUD,(("ChnlListEntryArray[i]ChannelNum 00 %d \n"),ChnlListEntryArray[i].ChannelNum)); - - } - - ChannelLen = pChannelList->ChannelLen; - } - - - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD,("OID_RT_EASY_COCURRENT_GET_CHANNEL_INFO channelLen 2 %d \n",ChannelLen)); - - if(P2P_ENABLED(GET_P2P_INFO(pAdapter)) && MgntScanInProgress(&pAdapter->MgntInfo)) - { - *BytesWritten = 0; - return NDIS_STATUS_MEDIA_BUSY; - } - - cbBufSizeRequired = 2 + ChannelLen; - - // Check output buffer length. - if(InformationBufferLength < cbBufSizeRequired) - { - *BytesNeeded = cbBufSizeRequired; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - pList = (pu1Byte)InformationBuffer; - // A tag identified by UI. - pList[0] = 0xAA; - - for(i = 0; i < ChannelLen; i++) - { - bIndicateToUI = FALSE; - if( (ChnlListEntryArray[i].ScanType == SCAN_ACTIVE) || - (DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) ) - { - bIndicateToUI = TRUE; - } - - //according to derzheng, temply do this, vivi, 20100114 - // 2013/08/12 MH Revise for DFS channel can not indicate to UI. - if(DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) - { - bIndicateToUI = FALSE; - } - - if(bIndicateToUI) - { - if(IS_DUAL_BAND_SUPPORT(pAdapter)) - pList[chnlcount+2] = ChnlListEntryArray[i].ChannelNum; - else - pList[chnlcount+2] = pChannelList->ChnlListEntry[i].ChannelNum; - chnlcount++; - } - - } - - // Length of channel list. - pList[1] = chnlcount; - cbBufSizeRequired = chnlcount + 2; - // Setup variables to return. - *BytesWritten = cbBufSizeRequired; - bInformationCopied = TRUE; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_CHANNEL_LIST.\n")); - break; - - - case OID_RT_EASY_COCURRENT_GET_CHANNEL_INFO: - RT_TRACE(COMP_INIT,DBG_LOUD,(" ====>OID_RT_EASY_COCURRENT_GET_CHANNEL_INFO\n")); - { - pu1Byte pList; - PRT_CHANNEL_LIST pChannelList = NULL; - u1Byte i, chnlcount=0; - u4Byte cbBufSizeRequired; - RT_CHNL_LIST_ENTRY ChnlListEntryArray[MAX_CHANNEL_NUM] = {0}; - u1Byte ChannelLen; - BOOLEAN bAP = FALSE,bIndicateToUI = FALSE; - - { - pChannelList = MgntActQuery_ChannelList(pAdapter); - - if(!pChannelList) - { - return NDIS_STATUS_ADAPTER_NOT_READY; - } - - for(i=0;iChannelLen;i++) - { - PlatformMoveMemory(&ChnlListEntryArray[i], &pChannelList->ChnlListEntry[i], sizeof(RT_CHNL_LIST_ENTRY)); - RT_TRACE(COMP_INIT,DBG_LOUD,(("ChnlListEntryArray[i]ChannelNum 00 %d \n"),ChnlListEntryArray[i].ChannelNum)); - - } - - ChannelLen = pChannelList->ChannelLen; - } - - - RT_TRACE(COMP_EASY_CONCURRENT,DBG_LOUD,("OID_RT_EASY_COCURRENT_GET_CHANNEL_INFO channelLen 2 %d \n",ChannelLen)); - - cbBufSizeRequired = 2 + ChannelLen; - - // Check output buffer length. - if(InformationBufferLength < cbBufSizeRequired) - { - *BytesNeeded = cbBufSizeRequired; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - pList = (pu1Byte)InformationBuffer; - // A tag identified by UI. - pList[0] = 0xAA; - - { - for(i = 0; i < ChannelLen; i++) - { - bIndicateToUI = FALSE; - if( (ChnlListEntryArray[i].ScanType == SCAN_ACTIVE) || - (DFS_5G_RADAR_CHANNEL(ChnlListEntryArray[i].ChannelNum)) ) - { - bIndicateToUI = TRUE; - } - - //according to derzheng, temply do this, vivi, 20100114 - if(ChnlListEntryArray[i].ChannelNum == 52|| - ChnlListEntryArray[i].ChannelNum == 56|| - ChnlListEntryArray[i].ChannelNum == 60|| - ChnlListEntryArray[i].ChannelNum == 64) - { - bIndicateToUI = FALSE; - } - - if(bIndicateToUI) - { -//change by ylb for UI get channel num error 20110906 - pList[chnlcount+2] = pChannelList->ChnlListEntry[i].ChannelNum; - chnlcount++; - } - - } - - } - - // Length of channel list. - pList[1] = chnlcount; - - cbBufSizeRequired = chnlcount + 2; - // Setup variables to return. - *BytesWritten = cbBufSizeRequired; - bInformationCopied = TRUE; - } - RT_TRACE(COMP_EASY_CONCURRENT,DBG_LOUD,(" <==== OID_RT_EASY_COCURRENT_GET_CHANNEL_INFO\n")); - break; - - case OID_RT_GET_TOTAL_TX_BYTES: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_TOTAL_TX_BYTES.\n")); - pInfo = &ul64Info; - ulInfoLen = sizeof(ul64Info); - ul64Info = pAdapter->TxStats.NumTxOkBytesTotal; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_TOTAL_TX_BYTES.\n")); - break; - - case OID_RT_GET_TOTAL_RX_BYTES: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_TOTAL_RX_BYTES.\n")); - pInfo = &ul64Info; - ulInfoLen = sizeof(ul64Info); - ul64Info = pAdapter->RxStats.NumRxOkBytesTotal; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_TOTAL_RX_BYTES.\n")); - break; - - case OID_RT_QUERY_ONE_BYTE_ALIGNMENT: - ulInfo = IS_ONE_BYTE_ALIGNED_SERIES(pAdapter); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_QUERY_ONE_BYTE_ALIGNMENT: %d\n", ulInfo)); - break; - - case OID_RT_SUPPORTED_WIRELESS_MODE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_SUPPORTED_WIRELESS_MODE.\n")); - { - u2Byte btSupportedWirelessMode; - - // Initialize return parameter: - // in low byte of a WORD, 0xAA is fixed pattern. - ulInfo = 0xAA; - - // Get supported wireless mode. - btSupportedWirelessMode = pAdapter->HalFunc.GetSupportedWirelessModeHandler(pAdapter); - - // Fill up return parameter according to supported wireless mode. - // In high byte of a WORD, e.g. 0x07 means a(bit 2),g(bit 1),b(bit 0). - if(btSupportedWirelessMode & WIRELESS_MODE_B) - { - ulInfo |= 0x0100; - } - if(btSupportedWirelessMode & WIRELESS_MODE_G) - { - ulInfo |= 0x0200; - } - if(btSupportedWirelessMode & WIRELESS_MODE_A) - { - ulInfo |= 0x0400; - } - if(btSupportedWirelessMode & WIRELESS_MODE_N_24G) - { - ulInfo |= 0x0800; - } - if(btSupportedWirelessMode & WIRELESS_MODE_N_5G) - { - ulInfo |= 0x1000; - } - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_SUPPORTED_WIRELESS_MODE: %x\n", ulInfo)); - break; - - case OID_RT_WIRELESS_MODE: - { - WIRELESS_MODE WirelessMode; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_WIRELESS_MODE.\n")); - - // Check output buffer length. - if(InformationBufferLength < sizeof(WIRELESS_MODE)) - { - *BytesNeeded = sizeof(WIRELESS_MODE); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - // Get wireless mode. - WirelessMode = MgntActQuery_802_11_WIRELESS_MODE(pAdapter); - - // Fill up paramters to return. - *((WIRELESS_MODE*)InformationBuffer) = WirelessMode; - *BytesWritten = sizeof(WIRELESS_MODE); - bInformationCopied = TRUE; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_WIRELESS_MODE: %d\n", WirelessMode)); - } - break; - - case OID_RT_CURRENT_WLRELESSMODE: - { - WIRELESS_MODE WirelessMode; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_CURRENT_WLRELESSMODE.\n")); - - // Check output buffer length. - if(InformationBufferLength < sizeof(WIRELESS_MODE)) - { - *BytesNeeded = sizeof(WIRELESS_MODE); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - // Get wireless mode. - WirelessMode = pAdapter->MgntInfo.dot11CurrentWirelessMode; - - // Fill up paramters to return. - *((WIRELESS_MODE*)InformationBuffer) = WirelessMode; - *BytesWritten = sizeof(WIRELESS_MODE); - bInformationCopied = TRUE; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_CURRENT_WLRELESSMODE: %d\n", WirelessMode)); - } - - case OID_RT_GET_DRIVER_UP_DELTA_TIME: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_DRIVER_UP_DELTA_TIME.\n")); - { - u8Byte now_time; - - now_time = PlatformGetCurrentTime(); // in micro-second. - ulInfo = (ULONG)( (now_time - pAdapter->DriverUpTime) / 100000 ); // in 0.1 second. - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_DRIVER_UP_DELTA_TIME: %u (0.1 Sec)\n", ulInfo)); - break; - - case OID_RT_GET_TX_RETRY: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->TxStats.NumTxRetryCount; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->TxStats.NumTxRetryCount; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_TX_BEACON_OK: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->TxStats.NumTxBeaconOk; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->TxStats.NumTxBeaconOk; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_TX_BEACON_ERR: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->TxStats.NumTxBeaconErr; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->TxStats.NumTxBeaconErr; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_RX_RETRY: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxRetryCount; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->RxStats.NumRxRetryCount; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_RX_TOTAL_PACKET: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxOkTotal + (pAdapter->RxStats.NumRxErrTotalUnicast + pAdapter->RxStats.NumRxErrTotalMulticast); - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)(pAdapter->RxStats.NumRxOkTotal + (pAdapter->RxStats.NumRxErrTotalUnicast + pAdapter->RxStats.NumRxErrTotalMulticast)); - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_SMALL_PACKET_CRC: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxCrcErrSmallPacket; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->RxStats.NumRxCrcErrSmallPacket; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_MIDDLE_PACKET_CRC: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxCrcErrMiddlePacket; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->RxStats.NumRxCrcErrMiddlePacket; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_LARGE_PACKET_CRC: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxCrcErrLargePacket; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->RxStats.NumRxCrcErrLargePacket; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_RX_ICV_ERR: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxIcvErr; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->RxStats.NumRxIcvErr; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_RT_GET_BSS_WIRELESS_MODE: - { - WIRELESS_MODE WirelessMode; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_GET_BSS_WIRELESS_MODE.\n")); - - // Check output buffer length. - if(InformationBufferLength < sizeof(WIRELESS_MODE)) - { - *BytesNeeded = sizeof(WIRELESS_MODE); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - // Get wireless mode of current BSS. - if(pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - WirelessMode = pMgntInfo->CurrentBssWirelessMode; - } - else - { - WirelessMode = WIRELESS_MODE_UNKNOWN; - } - - // Fill up paramters to return. - *((WIRELESS_MODE*)InformationBuffer) = WirelessMode; - *BytesWritten = sizeof(WIRELESS_MODE); - bInformationCopied = TRUE; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_GET_BSS_WIRELESS_MODE: %d\n", WirelessMode)); - } - break; - - case OID_RT_AP_GET_CURRENT_TIME_STAMP: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_AP_GET_CURRENT_TIME_STAMP.\n")); - { - PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); // get the first AP mode. Neo Test 123, But this oid need to be modified for more APs. - - // - // We shall redirect to proper adapter for UI query. - // Otherwise, UI would retrieve abnormal value. - // Added by Roger, 2009.10.07. - // - while(pTargetAdapter != NULL) - { - if(ACTING_AS_AP(pTargetAdapter)) - break; - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - - if(pTargetAdapter == NULL) - pTargetAdapter = GetDefaultAdapter(pAdapter); - - if(ACTING_AS_AP(pTargetAdapter)) - { - LARGE_INTEGER ts; - - pInfo = &ul64Info; - ulInfoLen = sizeof(ul64Info); - - NdisGetCurrentSystemTime(&ts); - ul64Info = ts.QuadPart; - } - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_AP_GET_CURRENT_TIME_STAMP.\n")); - break; - - case OID_RT_AP_GET_ASSOCIATED_STATION_LIST: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_AP_GET_ASSOCIATED_STATION_LIST.\n")); - { - ULONG ulBufRequired = 2*sizeof(ULONG) + ASSOCIATE_ENTRY_NUM*sizeof(RtlLibAssociateEntry); - int i; - PRT_WLAN_STA CurrAsocEntry; - PRtlLibAssociateEntry pAsocEntry; - PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - - // - // We shall redirect to proper adapter for UI query. - // Otherwise, UI would retrieve abnormal value. - // Added by Roger, 2009.10.07. - // - - // Determine size of buffer needed. - if(InformationBufferLength < ulBufRequired) - { - *BytesNeeded = ulBufRequired; - *BytesWritten = 0; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_AP_GET_ASSOCIATED_STATION_LIST: BytesNeeded: %d !!!\n", ulBufRequired)); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - while(pTargetAdapter != NULL) - { - if(ACTING_AS_AP(pTargetAdapter)) - { - pMgntInfo = &(pTargetAdapter->MgntInfo); - break; - } - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - - // Initialize output buffer. - PlatformZeroMemory(InformationBuffer, ulBufRequired); - - // Fill up total size and size of each entry. - *((PULONG)InformationBuffer) = ASSOCIATE_ENTRY_NUM*sizeof(RtlLibAssociateEntry); // Total size. - *((PULONG)InformationBuffer + 1) = sizeof(RtlLibAssociateEntry); // Size of each entry. - - // Fill up each entry. - pAsocEntry = (PRtlLibAssociateEntry)((PULONG)InformationBuffer + 2); - CurrAsocEntry = pMgntInfo->AsocEntry; - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - if(CurrAsocEntry[i].bUsed && CurrAsocEntry[i].bAssociated) - { - pAsocEntry[i].bUsed = TRUE; - pAsocEntry[i].Sum = CurrAsocEntry[i].Sum; - PlatformMoveMemory(pAsocEntry[i].MacAddr, CurrAsocEntry[i].MacAddr, 6); - pAsocEntry[i].AuthAlg = (CurrAsocEntry[i].AuthAlg==OPEN_SYSTEM) ? 0 : 1; // 0:Open, 1:Shared - pAsocEntry[i].AuthPassSeq = CurrAsocEntry[i].AuthPassSeq; - pAsocEntry[i].bAssociated = TRUE; - pAsocEntry[i].AID = CurrAsocEntry[i].AID; - pAsocEntry[i].LastActiveTime.QuadPart = CurrAsocEntry[i].LastActiveTime*10; - RT_PRINT_ADDR(COMP_AP, DBG_TRACE, "OID_RT_AP_GET_ASSOCIATED_STATION_LIST: AsocEntry_GetEntry: \n", CurrAsocEntry[i].MacAddr); - } - } - - *BytesWritten = ulBufRequired; - bInformationCopied = TRUE; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_AP_GET_ASSOCIATED_STATION_LIST.\n")); - break; - - case OID_RT_SET_SCAN_OPERATION: - { - ulInfo = pMgntInfo->bDisableScanByOID; - } - break; - - case OID_RT_MH_VENDER_ID: // Added by Annie, 2005-07-20. - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("OID_RT_MH_VENDER_ID(): Query OID_RT_MH_VENDER_ID. (MeetingHouse)\n")); - { - ulInfo = REALTEK_VENDER_ID; - } - break; - - case OID_RT_RF_OFF: - { - RT_RF_POWER_STATE eRfPowerState; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&eRfPowerState)); - if(eRfPowerState == eRfOff) - { - if (pMgntInfo->RfOffReason >= RF_CHANGE_BY_HW) - { - ulInfo = 1; - } - else - { - ulInfo = 0; - } - } - else - { - ulInfo = 0; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("OID_RT_RF_OFF: eRfPowerState: 0x%X, RFOff: 0x%X\n", eRfPowerState, ulInfo)); - } - break; - - case OID_RT_DBG_COMPONENT: - ul64Info = GlobalDebugComponents; - ulInfoLen = sizeof(GlobalDebugComponents); - pInfo = &ul64Info; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_DBG_COMPONENT: %#X\n", ulInfo )); - break; - - case OID_RT_DBG_LEVEL: - ulInfo = GlobalDebugLevel; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_DBG_LEVEL: %#X\n", ulInfo)); - break; - - case OID_RT_AUTO_SELECT_CHANNEL: - ulInfo = (ULONG)(pMgntInfo->bAutoSelChnl); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AUTO_SELECT_CHANNEL: %d\n", ulInfo)); - break; - - case OID_RT_HIDDEN_SSID: - ulInfo = (ULONG)(pMgntInfo->bHiddenSSID); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_HIDDEN_SSID: %d\n", ulInfo)); - break; - - case OID_RT_FILTER_DEFAULT_PERMITED: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_FILTER_DEFAULT_PERMITED\n")); - { - ulInfo = (ULONG)(pMgntInfo->bDefaultPermited); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_FILTER_DEFAULT_PERMITED: %d\n", ulInfo)); - } - break; - - case OID_RT_MAC_FILTER_TYPE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_MAC_FILTER_TYPE\n")); - { - ulInfo = (ULONG)(pMgntInfo->LockType); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_MAC_FILTER_TYPE: %d\n", ulInfo)); - } - break; - - case OID_RT_LOCKED_STA_ADDRESS: - case OID_RT_FILTER_STA_ADDRESS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_LOCKED_STA_ADDRESS\n")); - { - pu4Byte pNumOfLockedAddr = (pu4Byte)InformationBuffer; - pu1Byte pLockListBuffer = (pu1Byte)InformationBuffer + 4; - u4Byte LockListSize; - if(pMgntInfo->LockType == MAC_FILTER_ACCEPT) - LockListSize = sizeof(u4Byte) + pMgntInfo->LockedSTACount*6; - else if(pMgntInfo->LockType ==MAC_FILTER_REJECT) - LockListSize = sizeof(u4Byte) + pMgntInfo->LockedSTACount_Reject*6; - - if( InformationBufferLength < LockListSize ) - { - *BytesNeeded = LockListSize; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - if(pMgntInfo->LockType == MAC_FILTER_ACCEPT) - { - *pNumOfLockedAddr = pMgntInfo->LockedSTACount; - PlatformMoveMemory( pLockListBuffer, pMgntInfo->LockedSTAList, pMgntInfo->LockedSTACount*6 ); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_LOCKED_STA_ADDRESS: LockedSTACount=%d\n", pMgntInfo->LockedSTACount )); - } - else if(pMgntInfo->LockType ==MAC_FILTER_REJECT) - { - *pNumOfLockedAddr = pMgntInfo->LockedSTACount_Reject; - PlatformMoveMemory( pLockListBuffer, pMgntInfo->LockedSTAList_Reject, pMgntInfo->LockedSTACount_Reject*6 ); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_LOCKED_STA_ADDRESS: LockedSTACount_Reject=%d\n", pMgntInfo->LockedSTACount_Reject)); - } - - *BytesWritten = LockListSize; - bInformationCopied = TRUE; - - -// RT_PRINT_ADDRS(COMP_OID_QUERY, DBG_LOUD, ("Locked STA Address"), LockListBuffer, pMgntInfo->LockedSTACount ); - RT_PRINT_DATA(COMP_OID_QUERY, DBG_LOUD, ("InformationBuffer"), InformationBuffer, InformationBufferLength ); - } - break; - - case OID_RT_GET_DEFAULT_KEY_ID: - { - if( InformationBufferLength < sizeof(usInfo) ) - { - *BytesNeeded = sizeof(usInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - usInfo = (USHORT) pMgntInfo->SecurityInfo.DefaultTransmitKeyIdx; - pInfo = (PVOID) &usInfo; - ulInfoLen = sizeof(usInfo); - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_DEFAULT_KEY_ID: %d\n", usInfo)); - } - break; - - case OID_RT_GET_BCN_INTVL: - { - if( InformationBufferLength < sizeof(usInfo) ) - { - *BytesNeeded = sizeof(usInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - usInfo = pMgntInfo->dot11BeaconPeriod; - pInfo = (PVOID) &usInfo; - ulInfoLen = sizeof(usInfo); - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query ID_RT_GET_BCN_INTVL: %d\n", usInfo)); - } - break; - - case OID_RT_AP_GET_DTIM_PERIOD: - { - if( InformationBufferLength < sizeof(usInfo) ) - { - *BytesNeeded = sizeof(usInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - usInfo = (USHORT)pMgntInfo->dot11DtimPeriod; - pInfo = (PVOID) &usInfo; - ulInfoLen = sizeof(usInfo); - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_GET_DTIM_PERIOD: %d\n", usInfo)); - } - break; - - case OID_RT_GET_PREAMBLE_MODE: - { - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - switch(pMgntInfo->dot11CurrentPreambleMode) - { - case PREAMBLE_LONG: - ucInfo = 0; - break; - - case PREAMBLE_AUTO: - ucInfo = 1; - break; - - case PREAMBLE_SHORT: - ucInfo = 2; - break; - - default: - RT_TRACE(COMP_OID_QUERY, DBG_WARNING, ("Invalid preamble mode, dot11CurrentPreambleMode: %d...\n", pMgntInfo->dot11CurrentPreambleMode)); - ucInfo = 0; - break; - } - - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_PREAMBLE_MODE: %d\n", ucInfo)); - } - break; - - case OID_RT_AP_SWITCH_INTO_AP_MODE: - { - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = (ACTING_AS_AP(pAdapter) == TRUE) ? 1 : 0; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_SWITCH_INTO_AP_MODE: %d\n", ucInfo)); - } - break; - case OID_RT_AP_GET_ASSOC_STA_COUNT: - { - int i; - UCHAR count_temp = 0; - PRT_WLAN_STA CurrAsocEntry =pMgntInfo->AsocEntry ; - - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - if( CurrAsocEntry[i].bUsed && CurrAsocEntry[i].bAssociated) - count_temp++; - } - pMgntInfo->StaCount = count_temp; - ucInfo =count_temp; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_GET_ASSOC_STA_COUNT: %d\n", ucInfo)); - } - break; - case OID_RT_AP_GET_CLOUD_KEY_EX: - { - u1Byte length_temp = 0; - u1Byte offset = pMgntInfo->cloud_key_offset; - length_temp = EEPROM_CLOUD_KEY_LENGTH_EX - offset; //make sure offset is not larger then 14 - - if( (InformationBufferLength-1) > length_temp || (InformationBufferLength-1) ==0) - InformationBufferLength = length_temp+1; - - ((pu1Byte)InformationBuffer)[0] = (UCHAR)InformationBufferLength-1; - HAL_ReadCloudKey_Ex(pAdapter,(UCHAR)InformationBufferLength-1,offset,(pu1Byte)InformationBuffer+1); - - ulInfoLen = InformationBufferLength; - *BytesWritten = InformationBufferLength; - - bInformationCopied = TRUE; - - RT_PRINT_DATA( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_GET_CLOUD_KEY_EX: "), - InformationBuffer, ulInfoLen ); - } - break; - case OID_RT_AP_SET_BEACON_START: - { - PMGNT_INFO pDefMgntInfo = GetDefaultMgntInfo(pAdapter); - - if( InformationBufferLength < sizeof(ucInfo) ) - { - *BytesNeeded = sizeof(ucInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - //2014/02/22 MH We can not read USB reg here otherwise the TX pause will be incorrect. - pDefMgntInfo->DelayApBeaconCnt = (u1Byte)pDefMgntInfo->Regbcndelay; - - ucInfo =TRUE; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_SET_BEACON_START: %d\n", ucInfo)); - } - break; - case OID_RT_GET_HARDWARE_RADIO_OFF: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_HARDWARE_RADIO_OFF:\n")); - { - BOOLEAN bRfOffByHw = FALSE; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_OFF_BY_HW, (pu1Byte)(&bRfOffByHw)); - ulInfo = bRfOffByHw; - } - break; - - case OID_RT_AP_WDS_MODE: - { - if( InformationBufferLength < sizeof(pMgntInfo->WdsMode) ) - { - *BytesNeeded = sizeof(pMgntInfo->WdsMode); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = pMgntInfo->WdsMode; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_WDS_MODE: %d\n", ucInfo)); - } - break; - - case OID_RT_AP_WDS_AP_LIST: - { - pu4Byte pNumOfWdsAp = (pu4Byte)InformationBuffer; - pu1Byte pWdsApList = (pu1Byte)InformationBuffer + sizeof(u4Byte); - u4Byte ListSize = sizeof(u4Byte) + 1*6; - - if( InformationBufferLength < ListSize ) - { - *BytesNeeded = ListSize; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - // Note that, in current architecture, we only support 1 WDS AP. - // For more than one WDS AP to support, we must implment "learning" - // and "802.1d spanning tree". 2006.06.12, by rcnjko. - *pNumOfWdsAp = 1; - PlatformMoveMemory( pWdsApList, pMgntInfo->WdsApAddr, 1*6 ); - *BytesWritten = ListSize; - bInformationCopied = TRUE; - - RT_PRINT_DATA(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_AP_WDS_AP_LIST: "), - InformationBuffer, ListSize ); - } - break; - - case OID_RT_GET_PSP_XLINK_STATUS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_PSP_XLINK_STATUS:\n")); - { - if ( InformationBufferLength < sizeof(ulInfo) ) - { - *BytesNeeded = sizeof(ulInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = pMgntInfo->bDefaultPSPXlinkMode; // return default settings ONLY which was set by UI or registry. - pInfo = &ucInfo; - ulInfoLen = sizeof(ucInfo); - - } - break; - - case OID_RT_GET_WMM_ENABLE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_WMM_ENABLE:\n")); - { - if ( InformationBufferLength < sizeof(ulInfo) ) - { - *BytesNeeded = sizeof(ulInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - if (pMgntInfo->pStaQos->QosCapability & QOS_WMM) - { - ulInfo = TRUE; - } - else - { - ulInfo = FALSE; - } - } - break; - - - case OID_RT_GET_WMM_UAPSD_ENABLE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_WMM_UAPSD_ENABLE:\n")); - { - if ( InformationBufferLength < sizeof(ulInfo) ) - { - *BytesNeeded = sizeof(ulInfo); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ulInfo = pMgntInfo->pStaQos->b4ac_Uapsd & 0x0F; - } - break; - - case OID_RT_DOT11D: - { - ucInfo = IS_DOT11D_ENABLE(pMgntInfo); - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_DOT11D: %d\n", ucInfo)); - } - break; - - case OID_RT_GET_LOGV2_TYPE_LIST: - { - if( !MgntActQuery_DrvLogTypeList( - pAdapter, - InformationBufferLength, - (PDRV_LOG_TYPE_LIST_T)InformationBuffer, - BytesWritten, - BytesNeeded)) - { - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_LOGV2_TYPE_LIST failed!!! BytesNeeded: %d\n", *BytesNeeded)); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - - case OID_RT_GET_LOGV2_ATTR_LIST: - { - if( !MgntActQuery_DrvLogAttrList( - pAdapter, - InformationBufferLength, - (PDRV_LOG_ATTR_LIST_T)InformationBuffer, - BytesWritten, - BytesNeeded)) - { - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_LOGV2_ATTR_LIST failed!!! BytesNeeded: %d\n", *BytesNeeded)); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - - case OID_RT_GET_LOGV2_DATA_LIST: - { - pu4Byte pLogType; - - if( InformationBufferLength < sizeof(u4Byte) ) - { - return NDIS_STATUS_INVALID_DATA; - } - pLogType = (pu4Byte)InformationBuffer; - - if( !MgntActQuery_DrvLogDataList( - pAdapter, - *pLogType, - InformationBufferLength, - (PDRV_LOG_DATA_LIST_T)InformationBuffer, - BytesWritten, - BytesNeeded)) - { - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_GET_LOGV2_DATA_LIST failed!!! BytesNeeded: %d\n", *BytesNeeded)); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - break; - - - //For turbo mode mechanism, added by Roger. 2007.02.06. - case OID_RT_TURBOMODE: - { - PTURBOMODE_TYPE pForceType = (PTURBOMODE_TYPE)pInfo; - pForceType->charData = 0; // Clear all - pForceType->field.SupportTurboMode = pMgntInfo->bSupportTurboMode; - pForceType->field.AutoTurboBy8186 = pMgntInfo->bAutoTurboBy8186; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_TURBOMODE: %d\n", ulInfo)); - } - break; - -#if (WPS_SUPPORT == 1) - case OID_RT_WPS_RECIEVE_PACKET: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_WPS_RECIEVE_PACKET:\n")); - { - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - RT_TRACE(COMP_WPS, DBG_LOUD, ("WPS Check Recieve Buffer:\n")); - if( InformationBufferLength < pSimpleConfig->RecieveLength) - { - *BytesNeeded = pSimpleConfig->RecieveLength; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - if(!pSimpleConfig->bRecievePacket){ - *BytesNeeded =0; - //*BytesWritten = 0; - }else{ - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "Driver report Info Buffer before copy:", InformationBuffer, 16); - (ULONG)InformationBufferLength = pSimpleConfig->RecieveLength;//Set For packet length - PlatformMoveMemory( InformationBuffer, pSimpleConfig->RecieveBuf, pSimpleConfig->RecieveLength); - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "Driver report Info Buffer After copy:", InformationBuffer, 16); - *BytesWritten = pSimpleConfig->RecieveLength; - pSimpleConfig->bRecievePacket = FALSE; - RT_PRINT_DATA(COMP_WPS, DBG_LOUD, "Driver report EAP Packet Content:", pSimpleConfig->RecieveBuf, pSimpleConfig->RecieveLength); - } - return NDIS_STATUS_SUCCESS; - } - break; -#endif - - //added by vivi, adviced by xinpin, 20080424 - case OID_RT_WPS_CUSTOMIZED_LED: - ulInfo = 1; - break; - - case OID_RT_WPS_HWGET_PBC_PRESSED: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_WPS_HWGET_PBC_PRESSED\n")); - { - *BytesNeeded = sizeof(BOOLEAN); - if(InformationBufferLength < *BytesNeeded) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - ulInfo = (ULONG)pMgntInfo->bPbcPressed; - - if(pMgntInfo->bPbcPressed) - { - // 2011/11/03 MH Add for netgear special requirement. We need to count PBC press time. - if (pMgntInfo->bRegTimerGPIO != TRUE) - pMgntInfo->bPbcPressed = FALSE; - } - } - break; - - case OID_RT_SET_WMM_UAPSD_ENABLE: - { - if( InformationBufferLength < sizeof(AC_UAPSD) ) - { - *BytesNeeded = sizeof(AC_UAPSD); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ucInfo = pMgntInfo->pStaQos->b4ac_Uapsd & 0xF; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_SET_WMM_UAPSD_ENABLE: %X\n", ucInfo)); - } - break; - - case OID_RT_GET_ROAM_COUNT: - { - - pMgntInfo->RoamingCount=256; - usInfo=pMgntInfo->RoamingCount; - pInfo=(PVOID )&usInfo; - ulInfoLen=sizeof(usInfo); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Query OID_RT_GET_ROAM_COUNT: \n")); - break; - } - case OID_RT_GET_DISASSOC_COUNT: - { - pMgntInfo->DisconnectCount=65500; - usInfo=pMgntInfo->DisconnectCount; - pInfo=(PVOID )&usInfo; - ulInfoLen=sizeof(usInfo); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Query OID_RT_GET_DISASSOC_COUNT: \n")); - break; - } - - case OID_RT_HOST_SUSPEND_STATUS: - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FPGA_SUSPEND_STATUS, (pu1Byte)(&ulInfo)); - break; - - case OID_RT_AP_GET_VWIFI_STATUS: - { - *BytesNeeded = sizeof(BOOLEAN); - ulInfo = (MgntActQuery_ApType(GetFirstExtAdapter(pAdapter)) == RT_AP_TYPE_VWIFI_AP)?TRUE:FALSE ; - break; - } - - case OID_RT_ANTENNA_DETECTED_INFO: - { - #if(defined(CONFIG_ANT_DETECTION)) - if(InformationBufferLength < sizeof(ANT_DETECTED_INFO)) - { - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - *BytesNeeded = sizeof(ANT_DETECTED_INFO); - *BytesWritten = 0; - return Status; - } - - PlatformZeroMemory(InformationBuffer, sizeof(ANT_DETECTED_INFO)); - - // Retrieve previous antenna detection information in initialization process, added by Roger, 2012.11.27. - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_ANTENNA_DETECTED_INFO , (pu1Byte)InformationBuffer); - - ulInfoLen = sizeof(ANT_DETECTED_INFO); - *BytesWritten = ulInfoLen; - bInformationCopied = TRUE; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_ANTENNA_DETECTED_INFO: \n")); - #endif - break; - } - - case OID_RT_LC_STOP_SCAN: - { - if(InformationBufferLength < sizeof(ULONG)) - { - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - *BytesNeeded = sizeof(ULONG); - *BytesWritten = 0; - return Status; - } - ulInfo = (u4Byte)pMgntInfo->bStopScan; - } - break; - - case OID_RT_FORCED_DATA_RATE: - { - *BytesNeeded = sizeof(u1Byte); - ucInfo = (u1Byte)pMgntInfo->ForcedDataRate; - pInfo = (PVOID) &ucInfo; - ulInfoLen = sizeof(ucInfo); - break; - } - - case OID_RT_WPS_INFORMATION: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OID_RT_WPS_INFORMATION\n")); -#if ( WPS_SUPPORT == 1 ) - if((ulInfoLen = MgntActQuery_WPS_Information(pAdapter, InformationBuffer, InformationBufferLength)) == 0) -#endif - { - Status = NDIS_STATUS_NOT_SUPPORTED; - return Status; - } - *BytesWritten = ulInfoLen; - bInformationCopied = TRUE; - } - break; - - case OID_RT_GET_CUSTOMIZE_BSS_LIST: - { - PRT_802_11_BSSID_LIST_Customized pCusBSSIDList = (PRT_802_11_BSSID_LIST_Customized)InformationBuffer; - pCusBSSIDList->NumberOfItems = (pMgntInfo->NumBssDesc4Query<=1024) ? pMgntInfo->NumBssDesc4Query: 1024; - *BytesWritten = 4; - for(i=0;iNumberOfItems;i++) - { - - NdisMoveMemory(pCusBSSIDList->bssidentry[i].SsIdBuf,pMgntInfo->bssDesc4Query[i].bdSsIdBuf,pMgntInfo->bssDesc4Query[i].bdSsIdLen); - pCusBSSIDList->bssidentry[i].SsIdLen = pMgntInfo->bssDesc4Query[i].bdSsIdLen; - NdisMoveMemory(pCusBSSIDList->bssidentry[i].BssIdBuf,pMgntInfo->bssDesc4Query[i].bdBssIdBuf,6); - pCusBSSIDList->bssidentry[i].RecvSignalPower = pMgntInfo->bssDesc4Query[i].RecvSignalPower; - pCusBSSIDList->bssidentry[i].BssPacketType = pMgntInfo->bssDesc4Query[i].BssPacketType; - pCusBSSIDList->bssidentry[i].ChannelNumber = pMgntInfo->bssDesc4Query[i].ChannelNumber; - pCusBSSIDList->bssidentry[i].TimeStamp = pMgntInfo->bssDesc4Query[i].bdTstamp; - pCusBSSIDList->bssidentry[i].Noise = pMgntInfo->bssDesc4Query[i].Noise; - *BytesWritten += sizeof(RT_WLAN_BSS_Customized); - } - bInformationCopied = TRUE; - } - break; - - } - - if(Status == NDIS_STATUS_SUCCESS) - { - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen && !bInformationCopied) - { - *BytesWritten = ulInfoLen; - NdisMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else if(!bInformationCopied) - { - // Buffer too short - *BytesNeeded = ulInfoLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - } - - return Status; -} - -static NDIS_STATUS -N6CQueryInformationHandleCustomizedOriginalMPQueryOid( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded -) -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - PADAPTER Adapter = (PADAPTER) MiniportAdapterContext; - - USHORT usInfo = 0; - ULONG ulInfo = 0; - long lInfo = 0; - ULONGLONG ul64Info = 0; - - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - ULONG ulBytesAvailable = ulInfoLen; - BOOLEAN bInformationCopied = FALSE; - - FunctionIn(COMP_OID_QUERY); - - *BytesWritten = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - case OID_RT_PRO_GET_PHY_PARAM_VERSION: - case OID_RT_DEVICE_ID_INFO: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_DEVICE_ID_INFO: \n")); - { - PRT_SDIO_ID_INFO pSdioIdInfo = (PRT_SDIO_ID_INFO)InformationBuffer; - - if(InformationBufferLength < sizeof(RT_SDIO_ID_INFO)) - { - *BytesNeeded = sizeof(RT_SDIO_ID_INFO); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - // Fill up member of RT_DEVICE_ID_HEADER. - pSdioIdInfo->DevIDHeader.RtWlanDevTag = RT_DEVICE_ID_INFO_TAG; - - pSdioIdInfo->DevIDHeader.ChipID = GET_CHIP_ID(Adapter); - pSdioIdInfo->DevIDHeader.ChipVer = GET_CHIP_VERSION(Adapter); - - pSdioIdInfo->DevIDHeader.BusType = RT_DEVICE_ID_SDIO; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("chip id 0x%x chipver 0x%x\n", pSdioIdInfo->DevIDHeader.ChipID, pSdioIdInfo->DevIDHeader.ChipVer)); - - // - // We should fill up the member of RT_SDIO_ID_INFO. - // 2011.01.12. - // - pSdioIdInfo->VID = 0x024c; - pSdioIdInfo->PID = 0x8723; - pSdioIdInfo->RevID = 0; - pSdioIdInfo->InterfaceIdx = 0; - - *BytesWritten = sizeof(RT_SDIO_ID_INFO); - bInformationCopied = TRUE; - - RT_TRACE(COMP_MP,DBG_LOUD,("==>OID_RT_DEVICE_ID_INFO, (ChipID, ChipVer) = (0x%X, 0x%X)\n", - pSdioIdInfo->DevIDHeader.ChipID, pSdioIdInfo->DevIDHeader.ChipVer)); - RT_TRACE(COMP_MP, DBG_LOUD, ("===> OID_RT_DEVICE_ID_INFO: Adapter->HardwareType = %d\n", Adapter->HardwareType)); - } - break; - - case OID_RT_PRO8187_WI_POLL: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_PRO8187_WI_POLL: \n")); - { - PRT8187DBGWIPARAM pWIParam = (PRT8187DBGWIPARAM)InformationBuffer; - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(Adapter->ndisDbgCtx); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - // Redirect to proper adapter to handle workitem done polling. added by Roger, 2009.10.07. - if(pMgntInfo->NdisVersion >= RT_NDIS_VERSION_6_20) - { - pDbgCtx = &(GetDefaultAdapter(Adapter)->ndisDbgCtx); - } - - if(InformationBufferLength < sizeof(ULONG)*4) - { - *BytesNeeded = sizeof(ULONG)*4; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - if(pDbgCtx->bDbgWorkItemInProgress) - { // DbgWorkItem is in progress. - pWIParam->bDbgActCompleted = FALSE; - pWIParam->IoValue = 0; - } - else - { // DbgWorkItem is completed. - pWIParam->bDbgActCompleted = TRUE; - pWIParam->IoValue = pDbgCtx->DbgIoValue; - - pWIParam->outLen = pDbgCtx->DbgOutLen; - if((InformationBufferLength>=sizeof(RT8187DBGWIPARAM)) && (pWIParam->outLen>0)) - { - PlatformMoveMemory(&pWIParam->outBuf[0], &pDbgCtx->DbgOutBuf[0],pWIParam->outLen); - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], DLL output for RT_PRO8187_WI_POLL: \n"), &pWIParam->outBuf[0], pWIParam->outLen); - } - } - pWIParam->eDbgActType = pDbgCtx->DbgActType; - pWIParam->IoOffset = pDbgCtx->DbgIoOffset; - *BytesWritten = sizeof(RT8187DBGWIPARAM); - bInformationCopied = TRUE; - } - break; - - case OID_RT_PRO_GET_CUT_VERSION: - { - ulInfo = HAL_GetCutVersion(Adapter); - ulInfoLen = 4; - } - break; - - - case OID_RT_PRO_GET_EFUSE_UTILIZE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_PRO_GET_EFUSE_UTILIZE\n")); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_EFUSE_USAGE, (pu1Byte)&ulInfo); - break; - - case OID_RT_PRO_CHK_AUTOLOAD: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_PRO_CHK_AUTOLOAD\n")); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_AUTOLOAD_STATUS, (pu1Byte)&ulInfo ); - break; - - case OID_RT_PRO_READ_MAC_ADDRESS: - // Modified from PermanentAddress to CurrentAddress. - pInfo = Adapter->CurrentAddress; - // Modified by Bruce, 2007-1-19. - ulBytesAvailable = ulInfoLen = ETH_LENGTH_OF_ADDRESS; - break; - - // Added by Bruce, 2007-1-31. - case OID_RT_PRO_READ_REGISTRY: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_READ_REGISTRY.\n")); - - Status = OIDQ_RTKReadReg( - Adapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded, - &ulInfo); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_PRO_READ_REGISTRY.\n")); - if(Status != NDIS_STATUS_SUCCESS) - return Status; - break; - - case OID_RT_PRO_READ_REGISTRY_SIC: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_READ_REGISTRY_SIC.\n")); - - Status = OIDQ_RTKReadRegSIC( - Adapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded, - &ulInfo); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_PRO_READ_REGISTRY_SIC.\n")); - if(Status != NDIS_STATUS_SUCCESS) - return Status; - break; - - case OID_RT_PRO_READ_BB_REG: - // - // Ported from 85B MP, by Bruce, 2007-1-19. - // - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_READ_BB_REG.\n")); - { - ULONG ulRegOffset; - ULONG ulBeOFDM; - ULONG ulRegValue; - u1Byte uData; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - return Status; - } - // Get offset, and type of BB register to read. - ulRegOffset = *((ULONG*)InformationBuffer); - ulBeOFDM = ((*((ULONG*)InformationBuffer+1)) == TRUE)?0:1; - pInfo = ((ULONG*)InformationBuffer)+2; - - ulRegValue = 0x00000000 | (ulBeOFDM << 24); // OFDM or CCK read. - ulRegValue |= (ulRegOffset & 0x7f); // Offset. - PlatformEFIOWrite4Byte(Adapter, BBAddr, ulRegValue); - uData = PlatformEFIORead1Byte(Adapter, PhyDataR); - *((ULONG*)pInfo) = uData; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_PRO_READ_BB_REG.\n")); - break; - - // - // To backward compatible earlier DLL exported function. - // Revised by Roger, 2008.11.10. - // - case OID_RT_PRO_QUERY_EEPROM_TYPE: - switch(Adapter->EepromAddressSize) - { - case 4: - ulInfo = 3; // For E-Fuse. added by Roger, 2008.11.10. - break; - case 6: - ulInfo = 1; // 93C46 - break; - case 8: - ulInfo = 2; //93C56 - break; - default: - ulInfo = 1; - break; - } - break; - - // Added by Bruce, 2007-03-01. - case OID_RT_PRO_READ_EEPROM: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_READ_EEPROM.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - return Status; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - - switch(ulRegDataWidth) - { - case 1: - ulInfo = ReadEEprom(Adapter, (u2Byte)(ulRegOffset >> 1)); - if(ulRegOffset % 2 == 1) - ulInfo >>= 8; - ulInfo &= 0xFF; - break; - - case 2: - ulInfo = ReadEEprom(Adapter, (u2Byte)(ulRegOffset >> 1)); - ulInfo &= 0xFFFF; - break; - - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_PRO_READ_EEPROM.\n")); - break; - - case OID_RT_PRO_READ_EFUSE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_READ_EFUSE.\n")); - { - ULONG ulRegOffset; - u2Byte value; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - return Status; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - - // 2008/11/12 MH We only read efuse shadow modify map!!! - // We only support 1,2 and 4byte data lengths. - switch(ulRegDataWidth) - { - case 1: - EFUSE_MaskedShadowRead(Adapter, 1, (u2Byte)(ulRegOffset), (UINT32 *)&value); - ulInfo = (u1Byte)value; - break; - - case 2: - EFUSE_MaskedShadowRead(Adapter, 2, (u2Byte)(ulRegOffset), (UINT32 *)&value); - ulInfo = (u2Byte)value; - break; - - case 4: - EFUSE_MaskedShadowRead(Adapter, 4, (u2Byte)(ulRegOffset), (UINT32 *)&value); - ulInfo = (u4Byte)value; - break; - - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_PRO_READ_EFUSE.\n")); - break; - - case OID_RT_PRO_READ_EFUSE_BT: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_READ_EFUSE_BT.\n")); - { - ULONG ulRegOffset; - u2Byte value; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - return Status; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - - // 2008/11/12 MH We only read efuse shadow modify map!!! - // We only support 1,2 and 4byte data lengths. - switch(ulRegDataWidth) - { - case 1: - EFUSE_ShadowReadBT(Adapter, 1, (u2Byte)(ulRegOffset), (UINT32 *)&value); - ulInfo = (u1Byte)value; - break; - - case 2: - EFUSE_ShadowReadBT(Adapter, 2, (u2Byte)(ulRegOffset), (UINT32 *)&value); - ulInfo = (u2Byte)value; - break; - - case 4: - EFUSE_ShadowReadBT(Adapter, 4, (u2Byte)(ulRegOffset), (UINT32 *)&value); - ulInfo = (u4Byte)value; - break; - - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<=== Query OID_RT_PRO_READ_EFUSE_BT.\n")); - break; - - case OID_RT_PRO_GET_EFUSE_UTILIZE_BT: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_PRO_GET_EFUSE_UTILIZE_BT\n")); - break; - - // Added by Bruce, 2007-03-06. - case OID_RT_PRO_RF_READ_REGISTRY: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("===> Query OID_RT_PRO_RF_READ_REGISTRY.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG RF_PATH; - - // - // Add in the future. Since we cannot call HAL related function in \PLATFORM - // - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - RF_PATH = (ulRegDataWidth >> 4); - ulRegOffset = ulRegOffset & bRFRegOffsetMask; - // Read RF register synchronously. - - // Use this temporarily - ulInfo = PHY_QueryRFReg(Adapter, (u1Byte)RF_PATH, ulRegOffset, bRFRegOffsetMask); - } - RT_TRACE(COMP_MP, DBG_LOUD, ("<=== Query OID_RT_PRO_RF_READ_REGISTRY.\n")); - break; - - case OID_RT_INACTIVE_PS: - { - // - // Get current IPS status, by Bruce, 2007-12-12. - // The IPS actions includes two flags "pMgntInfo->bInactivePs" and "pMgntInfo->bIPSModeBackup", - // and the returned status by this OID is copied from "pMgntInfo->bInactivePs". - // The status returned "FALSE" does not indicate the driver never enters IPS. - // - - // Verify size - if(InformationBufferLength < sizeof(BOOLEAN)) - { - *BytesNeeded = sizeof(BOOLEAN); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - // Get IPS state. - ulInfo = (ULONG)(Adapter->MgntInfo.PowerSaveControl.bInactivePs); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Query OID_RT_INACTIVE_PS: %u\n", ulInfo)); - } - break; - - case OID_RT_CUSTOMER_ID_INFO: - { - if( InformationBufferLength < sizeof(RT_CUSTOMER_ID) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(RT_CUSTOMER_ID); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_RT_CUSTOMER_ID_INFO: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - ulInfo = Adapter->MgntInfo.CustomerID; - } - break; - - } - - - if(Status == NDIS_STATUS_SUCCESS) - { - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen && !bInformationCopied) - { - *BytesWritten = ulInfoLen; - PlatformMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else if(!bInformationCopied) - { - // Buffer too short - *BytesNeeded = ulInfoLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - } - - return(Status); -} - - -// -// Description: -// Handler for querying OIDs whcih are common to PCI and USB devices. -// -NDIS_STATUS -N6CQueryInformation( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - UCHAR ucInfo = 0; - USHORT usInfo = 0; - ULONG ulInfo = 0; - LONG lInfo = 0; - ULONGLONG ul64Info = 0; - - PVOID pInfo = (PVOID) &ulInfo; - ULONG ulInfoLen = sizeof(ulInfo); - BOOLEAN bInformationCopied = FALSE; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("====> N6CQueryInformation, OID=0x%08x\n", Oid )); - - - // Moved From Orginal MPQueryInformation Query OID ---------------------------------------------------------------------------------------------- - Status = N6CQueryInformationHandleCustomizedOriginalMPQueryOid( - pAdapter, - Oid, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - // CCX Handle Query OID ---------------------------------------------------------------------------------------------- - Status = NDIS_STATUS_NOT_RECOGNIZED; - - if (Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // - // This Oid has been responded to by the MpEventQueryInformation function - // We will not handle this Oid and return to the OS. - // - RT_TRACE(COMP_CCX, DBG_TRACE, ("N6CQueryInformation intercepted by MpEventQueryInformation! Status 0x%08x\n", Status)); - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // ----------------------------------------------------------------------------------------------------------------- - - - // Handle the Customized Wapi Oids -------------------------------------------------------------------------- - Status = WAPI_OidHandler( - pAdapter, - 1, //N6 Platform - 0, //Query OID - Oid, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - - // Handle the Customized WifiDirect Oids -------------------------------------------------------------------------- - Status = N6CQueryInformationHandleCustomizedWifiDirectOids( - pAdapter, - Oid, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - - // Handle the Customized 11n Oids -------------------------------------------------------------------------- - Status = N6CQueryInformationHandleCustomized11nOids( - pAdapter, - Oid, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - - // Handle the Customized Security Oids -------------------------------------------------------------------- - Status = N6CQueryInformationHandleCustomizedSecurityOids( - pAdapter, - Oid, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - - - // Handle the Customized Oids -------------------------------------------------------------------------- - Status = N6CQueryInformationHandleCustomizedOids( - pAdapter, - Oid, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - - // ============================================================================================ - // The following are the OIDs from the NDIS 6.x, including the Customized OIDs with the same meanings. Please be organized. - // ============================================================================================ - - - *BytesWritten = 0; - *BytesNeeded = 0; - - switch(Oid) - { - case OID_GEN_HARDWARE_STATUS: - ulInfo = NdisHardwareStatusReady; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD,("Query Information, OID_GEN_HARDWARE_STATUS: 0x%08X\n", ulInfo)); - break; - - case OID_GEN_MEDIA_SUPPORTED: - case OID_GEN_MEDIA_IN_USE: - ulInfo = NATIVE_802_11_MEDIA_TYPE; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MEDIA_SUPPORTED or OID_GEN_MEDIA_IN_USE: %08x\n", ulInfo)); - break; - - case OID_GEN_PHYSICAL_MEDIUM: - ulInfo = NATIVE_802_11_PHYSICAL_MEDIA_TYPE; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_PHYSICAL_MEDIUM:%d(NdisPhysicalMediumWirelessLan)\n", ulInfo)); - break; - - case OID_GEN_MEDIA_CAPABILITIES: - ulInfo = NDIS_MEDIA_CAP_TRANSMIT | NDIS_MEDIA_CAP_RECEIVE; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MEDIA_CAPABILITIES: %d\n",ulInfo)); - break; - - case OID_GEN_VENDOR_ID: - PlatformMoveMemory(&ulInfo, pAdapter->PermanentAddress, 3); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_VENDOR_ID:%02x:%02x:%02x\n", pAdapter->PermanentAddress[0], pAdapter->PermanentAddress[1], pAdapter->PermanentAddress[2])); - break; - - case OID_GEN_VENDOR_DESCRIPTION: - pInfo = (PVOID)NicIFGetVenderDescription(pAdapter); - ulInfoLen = strlen((const char*)NicIFGetVenderDescription(pAdapter))+1; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_VENDOR_DESCRIPTION:%s\n",(char *)pInfo)); - break; - - case OID_GEN_DRIVER_VERSION: - usInfo = (USHORT) NIC_DRIVER_VERSION60; - pInfo = (PVOID) &usInfo; - ulInfoLen = sizeof(USHORT); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_DRIVER_VERSION:%08x\n",usInfo)); - break; - - case OID_GEN_CURRENT_LOOKAHEAD: - case OID_GEN_MAXIMUM_LOOKAHEAD: - if(pNdisCommon->ulLookAhead == 0) - pNdisCommon->ulLookAhead = pNdisCommon->MaxPktSize - NIC_HEADER_SIZE; - ulInfo = pNdisCommon->ulLookAhead; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_CURRENT_LOOKAHEAD or OID_GEN_MAXIMUM_LOOKAHEAD: %d\n",ulInfo)); - break; - - case OID_GEN_MAXIMUM_FRAME_SIZE: - ulInfo = pNdisCommon->MaxPktSize - NIC_HEADER_SIZE; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MAXIMUM_FRAME_SIZE:%d\n",ulInfo)); - break; - - case OID_GEN_MAXIMUM_TOTAL_SIZE: - ulInfo = pNdisCommon->MaxPktSize; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MAXIMUM_TOTAL_SIZE:%d\n",ulInfo)); - break; - - case OID_GEN_TRANSMIT_BLOCK_SIZE: - case OID_GEN_RECEIVE_BLOCK_SIZE: - ulInfo = pNdisCommon->MaxPktSize; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_TRANSMIT_BLOCK_SIZE or OID_GEN_RECEIVE_BLOCK_SIZE:%d\n",ulInfo)); - break; - - case OID_GEN_TRANSMIT_BUFFER_SPACE: - // TODO: We should change it - // 2004.06.03, by rcnjko. - ulInfo = pNdisCommon->MaxPktSize * 10 * 2; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_TRANSMIT_BUFFER_SPACE:%d\n",ulInfo)); - break; - - case OID_GEN_RECEIVE_BUFFER_SPACE: - // TODO: We should change it - // 2004.06.03, by rcnjko. - ulInfo = pNdisCommon->MaxPktSize * 10; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_RECEIVE_BUFFER_SPACE:%d\n",ulInfo)); - break; - - case OID_GEN_MAC_OPTIONS: - ulInfo = NDIS_MAC_OPTION_TRANSFERS_NOT_PEND | -// 20100309 Joseph: Modified for software "Chinasec" BSOD issue. -// If we do not indicate NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA flag, Chinasec BSOD in higher layer -//when sending Tx buffer to do NDIS miniport driver after connection. -//#if COALESCE_RECEIVED_PACKET - NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA | -//#endif - NDIS_MAC_OPTION_NO_LOOPBACK; - - // Qos support. 2007.01.05, by shien chang. - if (pMgntInfo->pStaQos->QosCapability > QOS_DISABLE) - { - ulInfo |= NDIS_MAC_OPTION_8021P_PRIORITY; - } - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MAC_OPTIONS:%08x\n", ulInfo)); - break; - - case OID_GEN_LINK_SPEED: - ulInfo = (MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter , pMgntInfo->bForcedShowRxRate, FALSE)/2)*10000; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_LINK_SPEED:%d Mbps\n",ulInfo/10000)); - break; - - case OID_GEN_MEDIA_CONNECT_STATUS: - // - // We will always report connected. The nwifi IM driver - // takes care of the logic of this for the miniport. - // - //ulInfo = NdisMediaStateConnected; - if( pMgntInfo->bMediaConnect ) - { - ulInfo = NdisMediaStateConnected; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MEDIA_CONNECT_STATUS: NdisMediaStateConnected\n")); - } - else - { - ulInfo = NdisMediaStateDisconnected; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MEDIA_CONNECT_STATUS: NdisMediaStateDisconnected\n")); - } - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MEDIA_CONNECT_STATUS: NdisMediaStateConnected\n")); - break; - - case OID_GEN_XMIT_OK: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->TxStats.NumTxOkTotal; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->TxStats.NumTxOkTotal; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_GEN_XMIT_ERROR: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->TxStats.NumTxErrTotal; - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->TxStats.NumTxErrTotal; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_GEN_RCV_OK: - if(InformationBufferLength >= 8) - { - ul64Info = pAdapter->RxStats.NumRxOkTotal; - pInfo = &ul64Info; - ulInfoLen = sizeof(ul64Info); - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)pAdapter->RxStats.NumRxOkTotal; - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_GEN_RCV_ERROR: - if(InformationBufferLength >= 8) - { - ul64Info = (pAdapter->RxStats.NumRxErrTotalUnicast + pAdapter->RxStats.NumRxErrTotalMulticast); - pInfo = &ul64Info; - ulInfoLen = sizeof(ul64Info); - } - else if(InformationBufferLength == 4) - { - ulInfo = (u4Byte)(pAdapter->RxStats.NumRxErrTotalUnicast + pAdapter->RxStats.NumRxErrTotalMulticast); - } - else - { - ulInfoLen = sizeof(ul64Info); - } - break; - - case OID_GEN_RCV_NO_BUFFER: - ulInfoLen = sizeof(ul64Info); - pInfo = &ul64Info; - // TODO: Set counter to a valid value - break; - - case OID_FFP_SUPPORT: - Status = NDIS_STATUS_NOT_SUPPORTED; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_FFP_SUPPORT: (not supported)\n")); - break; - - case OID_GEN_SUPPORTED_GUIDS: - Status = NDIS_STATUS_NOT_SUPPORTED; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_SUPPORTED_GUIDS: (not supported)\n")); - break; - - case OID_GEN_MAXIMUM_SEND_PACKETS: - ulInfo = NIC_MAX_SEND_PACKETS; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_GEN_MAXIMUM_SEND_PACKETS:%d\n",ulInfo)); - break; - - case OID_802_3_PERMANENT_ADDRESS: - pInfo = pAdapter->PermanentAddress; - ulInfoLen = ETH_LENGTH_OF_ADDRESS; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_802_3_PERMANENT_ADDRESS:%02x:%02x:%02x:%02x:%02x:%02x\n", pAdapter->PermanentAddress[0], pAdapter->PermanentAddress[1], pAdapter->PermanentAddress[2], pAdapter->PermanentAddress[3], pAdapter->PermanentAddress[4], pAdapter->PermanentAddress[5])); - break; - - case OID_802_3_CURRENT_ADDRESS: - pInfo = pAdapter->CurrentAddress; - ulInfoLen = ETH_LENGTH_OF_ADDRESS; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_802_3_CURRENT_ADDRESS:%02x:%02x:%02x:%02x:%02x:%02x\n", pAdapter->CurrentAddress[0], pAdapter->CurrentAddress[1], pAdapter->CurrentAddress[2], pAdapter->CurrentAddress[3], pAdapter->CurrentAddress[4], pAdapter->CurrentAddress[5])); - break; - - case OID_802_3_MAXIMUM_LIST_SIZE: - ulInfo = MAX_MCAST_LIST_NUM; - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query Information, OID_802_3_MAXIMUM_LIST_SIZE:%d\n",ulInfo)); - break; - - case OID_802_3_MULTICAST_LIST: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_802_3_MULTICAST_LIST:\n")); - { - u4Byte MCListSize = pAdapter->MCAddrCount*6; - if( InformationBufferLength < MCListSize ) - { - *BytesNeeded = MCListSize; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - PlatformMoveMemory( InformationBuffer, pAdapter->MCList, MCListSize ); - *BytesWritten = MCListSize; - bInformationCopied = TRUE; - } - break; - - // 2006.10.26, by shien chang. - case OID_DOT11_OPERATION_MODE_CAPABILITY: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_OPERATION_MODE_CAPABILITY:\n")); - { - return N6CQuery_DOT11_OPERATION_MODE_CAPABILITY( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - // 2006.10.26, by shien chang. - case OID_DOT11_CURRENT_OPERATION_MODE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CURRENT_OPERATION_MODE:\n")); - { - return N6CQuery_DOT11_CURRENT_OPERATION_MODE( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - case OID_DOT11_STATISTICS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_STATISTICS:\n")); - { - return N6CQuery_DOT11_STATISTICS( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - case OID_DOT11_DESIRED_BSS_TYPE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DESIRED_BSS_TYPE:\n")); - { - PDOT11_BSS_TYPE pBssType = (PDOT11_BSS_TYPE)InformationBuffer; - u4Byte len = sizeof(DOT11_BSS_TYPE); - if ( InformationBufferLength < len ) - { - *BytesNeeded = len; - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - Status = N6CQuery_DOT11_DESIRED_BSS_TYPE(pAdapter, pBssType); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = len; - bInformationCopied = TRUE; - } - } - break; - - case OID_DOT11_MEDIA_STREAMING_ENABLED: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_MEDIA_STREAMING_ENABLED:\n")); - { - if ( InformationBufferLength < sizeof(BOOLEAN) ) - { - *BytesWritten = 0; - *BytesNeeded = sizeof(BOOLEAN); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ulInfo = pNdisCommon->bDot11MediaStreamingEnabled; - ulInfoLen = sizeof(BOOLEAN); - } - break; - - case OID_DOT11_EXCLUDE_UNENCRYPTED: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_EXCLUDE_UNENCRYPTED:\n")); - { - if ( InformationBufferLength < sizeof(BOOLEAN) ) - { - *BytesWritten = 0; - *BytesNeeded = sizeof(BOOLEAN); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ulInfo = pMgntInfo->bExcludeUnencrypted; - ulInfoLen = sizeof(BOOLEAN); - } - break; - - case OID_DOT11_PRIVACY_EXEMPTION_LIST: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_PRIVACY_EXEMPTION_LIST:\n")); - { - return N6CQuery_DOT11_PRIVACY_EXEMPTION_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - case OID_DOT11_IBSS_PARAMS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_IBSS_PARAMS:\n")); - { - return N6CQuery_DOT11_IBSS_PARAMS( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - case OID_DOT11_PERMANENT_ADDRESS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_PERMANENT_ADDRESS:\n")); - { - if ( InformationBufferLength < ETH_LENGTH_OF_ADDRESS ) - { - *BytesWritten = 0; - *BytesNeeded = ETH_LENGTH_OF_ADDRESS; - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformMoveMemory( - InformationBuffer, - pAdapter->PermanentAddress, - ETH_LENGTH_OF_ADDRESS); - *BytesWritten = ETH_LENGTH_OF_ADDRESS; - bInformationCopied = TRUE; - } - break; - - case OID_DOT11_CURRENT_ADDRESS: - case OID_DOT11_MAC_ADDRESS: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CURRENT_ADDRESS or OID_DOT11_MAC_ADDRESS:\n")); - { - if ( InformationBufferLength < ETH_LENGTH_OF_ADDRESS ) - { - *BytesWritten = 0; - *BytesNeeded = ETH_LENGTH_OF_ADDRESS; - RT_TRACE(COMP_OID_QUERY, DBG_WARNING, ("Query OID_DOT11_CURRENT_ADDRESS or OID_DOT11_MAC_ADDRESS: Invalid length (%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformMoveMemory( - InformationBuffer, - pAdapter->CurrentAddress, - ETH_LENGTH_OF_ADDRESS); - *BytesWritten = ETH_LENGTH_OF_ADDRESS; - bInformationCopied = TRUE; - } - break; - - // 2006.11.01, by shien chang. - case OID_DOT11_STATION_ID: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_STATION_ID:\n")); - { - *BytesNeeded = sizeof(DOT11_MAC_ADDRESS); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - PlatformMoveMemory( - InformationBuffer, - pAdapter->CurrentAddress, - *BytesNeeded); - bInformationCopied = TRUE; - } - break; - - // 2006.11.01, by shien chang. - case OID_DOT11_CURRENT_REG_DOMAIN: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CURRENT_REG_DOMAIN:\n")); - { - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - ulInfo = DOT11_REG_DOMAIN_FCC; - ulInfoLen = *BytesNeeded; - } - break; - - // 2006.11.01, by shien chang. - case OID_DOT11_REG_DOMAINS_SUPPORT_VALUE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_REG_DOMAINS_SUPPORT_VALUE:\n")); - { - PDOT11_REG_DOMAINS_SUPPORT_VALUE pValue = - (PDOT11_REG_DOMAINS_SUPPORT_VALUE)InformationBuffer; - - *BytesNeeded = sizeof(DOT11_REG_DOMAINS_SUPPORT_VALUE); - if ( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - // - pValue->uNumOfEntries = 1; - pValue->uTotalNumOfEntries = 1; - pValue->dot11RegDomainValue[0].uRegDomainsSupportIndex = 0; - pValue->dot11RegDomainValue[0].uRegDomainsSupportValue = DOT11_REG_DOMAIN_FCC; - *BytesWritten = *BytesNeeded; - bInformationCopied = TRUE; - } - break; - - // 2006.11.01, by shien chang. - case OID_DOT11_DESIRED_BSSID_LIST: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DESIRED_BSSID_LIST:\n")); - { - return N6CQuery_DOT11_DESIRED_BSSID_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - // 2006.11.02, by shien chang. - case OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD:\n")); - { - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - ulInfo = pNdisCommon->dot11UnreachableDetectionThreshold; - ulInfoLen = *BytesNeeded; - } - break; - - case OID_DOT11_UNICAST_USE_GROUP_ENABLED: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_UNICAST_USE_GROUP_ENABLED:\n")); - { - *BytesNeeded = sizeof(BOOLEAN); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - ulInfo = pNdisCommon->dot11UnicastUseGroupEnabled; - ulInfoLen = *BytesNeeded; - } - break; - - case OID_DOT11_ACTIVE_PHY_LIST: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_ACTIVE_PHY_LIST:\n")); - { - return N6CQuery_DOT11_ACTIVE_PHY_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - case OID_DOT11_ENUM_ASSOCIATION_INFO: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_ENUM_ASSOCIATION_INFO:\n")); - { - return N6CQuery_DOT11_ENUM_ASSOCIATION_INFO( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - case OID_DOT11_HIDDEN_NETWORK_ENABLED: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_HIDDEN_NETWORK_ENABLED:\n")); - { - *BytesNeeded = sizeof(BOOLEAN); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - ulInfo = pMgntInfo->bHiddenSSIDEnable; - ulInfoLen = *BytesNeeded; - } - break; - - case OID_DOT11_CURRENT_FREQUENCY: - case OID_DOT11_CURRENT_CHANNEL: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CURRENT_CHANNEL:\n")); - { - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - //return NDIS_STATUS_INVALID_LENGTH; - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if(pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - - #if (MULTICHANNEL_SUPPORT == 1) - if(MultiChannelSwitchNeeded(pAdapter)) - { - if (pNdisCommon->RegWfdChnl == 0) - ulInfo = MultiChannelGetPortConnected20MhzChannel(pAdapter); - else if (pNdisCommon->RegWfdChnl != 0) - ulInfo = pNdisCommon->RegWfdChnl; - RT_TRACE(COMP_MULTICHANNEL, DBG_LOUD, ("MultiChannelGetPortConnected20MhzChannel: %d\n", ulInfo)); - } - else - #endif - { - ulInfo = pMgntInfo->dot11CurrentChannelNumber; - } - - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("A: channel: %u:\n", ulInfo)); - } - else - { - // - //Report the default channel to os, Or it will fail when in SoftAP_connectOID test. - //receive non probe rsp. By Maddest 06052009. - // - //sherry added for Softap_wps error - //20110927 - if(pAdapter->bInHctTest) - { - if(!IsDefaultAdapter(pAdapter)) - ulInfo = pMgntInfo->dot11CurrentChannelNumber; - else - ulInfo = RT_GetChannelNumber(GetDefaultAdapter(pAdapter)); - } - else - { - ulInfo = RT_GetChannelNumber(GetDefaultAdapter(pAdapter)); - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("B: channel: %u:\n", ulInfo)); - } - ulInfoLen = sizeof(ULONG); - - - } - break; - - case OID_DOT11_DATA_RATE_MAPPING_TABLE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_DATA_RATE_MAPPING_TABLE:\n")); - { - return N6CQuery_DOT11_DataRateMappingTable( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - case OID_DOT11_SUPPORTED_DATA_RATES_VALUE: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_SUPPORTED_DATA_RATES_VALUE:\n")); - { - return N6CQuery_DOT11_Supported_DataRates( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - case OID_DOT11_MULTI_DOMAIN_CAPABILITY_IMPLEMENTED: - case OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED: - case OID_DOT11_COUNTRY_STRING: - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - - case OID_DOT11_SUPPORTED_TX_ANTENNA: - { - return N6CQuery_DOT11_Tx_Antenna( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - // Added by Annie, 2006-10-09. - case OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM:\n") ); - { - return N6CQuery_DOT11_ENABLED_AUTHENTICATION_ALGORITHM( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-09. - case OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM, 0x%08x\n", Oid) ); - { - return N6CQuery_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-09. - case OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM, 0x%08x\n", Oid) ); - { - return N6CQuery_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - - // Added by Annie, 2006-10-13. - case OID_DOT11_CIPHER_DEFAULT_KEY_ID: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CIPHER_DEFAULT_KEY_ID, 0x%08x\n", Oid) ); - { - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - - if (InformationBufferLength < sizeof(u4Byte)) - { - *BytesNeeded = sizeof(u4Byte); - return NDIS_STATUS_INVALID_LENGTH; - } - - ulInfo = pSecInfo->DefaultTransmitKeyIdx; - ulInfoLen = sizeof(u4Byte); - } - break; - - // Added by Annie, 2006-10-12. - case OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR:\n") ); - { - return N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-12. - case OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR:\n") ); - { - return N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-12. - case OID_DOT11_PMKID_LIST: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_PMKID_LIST, 0x%08x\n", Oid) ); - { - PDOT11_PMKID_LIST pPMKIDList = NULL; - - if (InformationBufferLength < (ULONG)FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs)) - { - Status = NDIS_STATUS_BUFFER_OVERFLOW; - *BytesNeeded = FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs); - return Status; - } - - pPMKIDList = (PDOT11_PMKID_LIST)InformationBuffer; - Status = N6CQuery_DOT11_PMKID_LIST( - pAdapter, - pPMKIDList, - InformationBufferLength - ); - - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = pPMKIDList->uNumOfEntries * sizeof(DOT11_PMKID_ENTRY) + - FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs); - bInformationCopied = TRUE; - } - } - break; - - // Added by Annie, 2006-10-12. - case OID_DOT11_EXTSTA_CAPABILITY: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_EXTSTA_CAPABILITY:\n") ); - { - return N6CQuery_DOT11_EXTSTA_CAPABILITY( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-16. - case OID_RT_POWER_MGMT_REQUEST: - case OID_DOT11_POWER_MGMT_REQUEST: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_POWER_MGMT_REQUEST, 0x%08x\n", Oid) ); - { - if (InformationBufferLength < sizeof(ULONG)) - { - Status = NDIS_STATUS_BUFFER_OVERFLOW; - *BytesNeeded = sizeof(ULONG); - return Status; - } - - N6CQuery_DOT11_POWER_MGMT_REQUEST( - pAdapter, - (pu4Byte)InformationBuffer - ); - *BytesWritten = sizeof(ULONG); - bInformationCopied = TRUE; - } - break; - - case OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST:\n") ); - { - return N6CQuery_DOT11_EXCLUDED_MAC_ADDRESS_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - // 061012, by rcnjko. - case OID_DOT11_MPDU_MAX_LENGTH: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_MPDU_MAX_LENGTH\n") ); - { - *BytesNeeded = sizeof(u4Byte); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - ulInfo = sMaxMpduLng; - ulInfoLen = sizeof(u4Byte); - } - break; - - // 061012, by rcnjko. - case OID_DOT11_ATIM_WINDOW: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_ATIM_WINDOW\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_ATIM_WINDOW(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - -#if 0 // Move to OID Protal - 2011.09.22 - // 061012, by rcnjko. - case OID_DOT11_NIC_POWER_STATE: - { - RT_RF_POWER_STATE rfState; - - *BytesNeeded = sizeof(BOOLEAN); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - if (rfState == eRfOff) - { - if (pMgntInfo->RfOffReason >= RF_CHANGE_BY_HW) - { - ulInfo = FALSE; - } - else - { - ulInfo = TRUE; - } - } - else - { - ulInfo = TRUE; - } - ulInfoLen = *BytesNeeded; - } - RT_TRACE( COMP_OID_QUERY|COMP_RF, DBG_LOUD, ("Query OID_DOT11_NIC_POWER_STATE rf %d\n", ulInfo) ); - break; -#endif - - // 2006.11.02, by shien chang. - case OID_DOT11_HARDWARE_PHY_STATE: - { - RT_RF_POWER_STATE rfState; - - *BytesNeeded = sizeof(BOOLEAN); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - if (rfState == eRfOff) - { - if (pMgntInfo->RfOffReason & RF_CHANGE_BY_HW) - { - ulInfo = FALSE; - } - else - { - ulInfo = TRUE; - } - } - else - { - ulInfo = TRUE; - } - ulInfoLen = *BytesNeeded; - } - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_HARDWARE_PHY_STATE: rf %d\n", ulInfo)); - break; - - - // 061014, by rcnjko. - case OID_DOT11_OPTIONAL_CAPABILITY: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_OPTIONAL_CAPABILITY\n") ); - { - *BytesNeeded = sizeof(DOT11_OPTIONAL_CAPABILITY); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_OPTIONAL_CAPABILITY(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_DOT11_CURRENT_OPTIONAL_CAPABILITY: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CURRENT_OPTIONAL_CAPABILITY\n") ); - { - *BytesNeeded = sizeof(DOT11_OPTIONAL_CAPABILITY); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_CURRENT_OPTIONAL_CAPABILITY(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_DOT11_CF_POLLABLE: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CF_POLLABLE\n") ); - { - *BytesNeeded = sizeof(BOOLEAN); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_CF_POLLABLE(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_RT_OPERATIONAL_RATE_SET: - case OID_DOT11_OPERATIONAL_RATE_SET: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_OPERATIONAL_RATE_SET\n") ); - { - return N6CQuery_DOT11_OPERATIONAL_RATE_SET( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - } - break; - - // 061014, by rcnjko. - case OID_RT_RTS_THRESHOLD: - case OID_DOT11_RTS_THRESHOLD: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_RTS_THRESHOLD\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - ulInfo = MgntActQuery_802_11_RTS_THRESHOLD(pAdapter); - ulInfoLen = sizeof(ULONG); - } - break; - - // 061014, by rcnjko. - case OID_DOT11_SHORT_RETRY_LIMIT: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_SHORT_RETRY_LIMIT\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_SHORT_RETRY_LIMIT(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_DOT11_LONG_RETRY_LIMIT: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_LONG_RETRY_LIMIT\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_LONG_RETRY_LIMIT(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_RT_FRAGMENTATION_THRESHOLD: - case OID_DOT11_FRAGMENTATION_THRESHOLD: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_FRAGMENTATION_THRESHOLD\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_BUFFER_OVERFLOW; - break; - } - - ulInfo = MgntActQuery_802_11_FRAGMENTATION_THRESHOLD(pAdapter); - ulInfoLen = *BytesNeeded; - } - break; - - // 061014, by rcnjko. - case OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_MAX_TRANSMIT_MSDU_LIFETIME\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_MAX_TRANSMIT_MSDU_LIFETIME(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_DOT11_MAX_RECEIVE_LIFETIME: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_MAX_RECEIVE_LIFETIME\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CQuery_DOT11_MAX_RECEIVE_LIFETIME(pAdapter, InformationBuffer); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - // 061014, by rcnjko. - case OID_DOT11_SUPPORTED_PHY_TYPES: - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_SUPPORTED_PHY_TYPES\n") ); - { - Status = N6CQuery_DOT11_SUPPORTED_PHY_TYPES( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - if (Status == NDIS_STATUS_SUCCESS) - { - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - } - break; - - case OID_DOT11_MULTICAST_LIST: - { - Status = N6CQuery_DOT11_MULTICAST_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesWritten, - BytesNeeded); - - if (Status == NDIS_STATUS_SUCCESS) - { - ulInfoLen = *BytesWritten; - bInformationCopied = TRUE; - } - RT_TRACE( COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_MULTICAST_LIST num of multicast address:%d\n", pAdapter->MCAddrCount)); - } - break; - - case OID_RT_QUERY_IS_MP_CHIP: - { - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - ulInfo = pHalData->bIsMPChip; - ulInfoLen = 1; - } - break; - - case OID_DOT11_CURRENT_PHY_ID: - { - if(InformationBufferLength < sizeof(ULONG)) - { - *BytesNeeded = sizeof(ULONG); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - ulInfo = pAdapter->pNdisCommon->dot11SelectedPhyId; - PlatformMoveMemory(InformationBuffer, &ulInfo, sizeof(ULONG)); - *BytesWritten = sizeof(ULONG); - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query OID_DOT11_CURRENT_PHY_ID: phyid%d\n", ulInfo)); - break; - } - - case OID_DOT11_SUPPORTED_POWER_LEVELS: - { - if(InformationBufferLength < sizeof(ULONG)*9 ) - { - *BytesNeeded = sizeof(ULONG); - *BytesWritten = 0; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - DbgPrint( "Query OID_DOT11_SUPPORTED_POWER_LEVELS\n" ); - *BytesWritten = sizeof(ULONG) * 9; - PlatformZeroMemory( InformationBuffer, sizeof(ULONG) * 9 ); - break; - } - - case OID_DOT11_BEACON_PERIOD: - { - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - - // Clean output variables ----------------------------------- - *BytesWritten = 0; - *BytesNeeded = 0; - //------------------------------------------------------- - - FunctionIn(COMP_OID_QUERY); - - if(!pMgntInfo->mAssoc && pMgntInfo->mIbss && ACTING_AS_AP(pAdapter)) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_STATE; - return Status; - } - - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - *BytesWritten = 0; - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - Status = N6CQuery_DOT11_BEACON_PERIOD(pAdapter, (PULONG) InformationBuffer ); - - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesWritten = *BytesNeeded; - return Status; - } - break; - } - - // - - default: - // This OID is not common one handled by USB and PCI. - Status = NDIS_STATUS_INVALID_OID; - break; - } - - if(Status == NDIS_STATUS_SUCCESS) - { - if(ulInfoLen <= InformationBufferLength) - { - // Copy result into InformationBuffer - if(ulInfoLen && !bInformationCopied) - { - *BytesWritten = ulInfoLen; - NdisMoveMemory(InformationBuffer, pInfo, ulInfoLen); - } - } - else if(!bInformationCopied) - { - // Buffer too short - *BytesNeeded = ulInfoLen; - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - } - } - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<==== N6CQueryInformation, OID=0x%08x, Status=0x%X\n", Oid, Status)); - - return Status; -} - -// This is to offload the N6CSetInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CSetInformationHandleCustomizedWifiDirectOids( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - -#if (P2P_SUPPORT == 1) - case OID_RT_P2P_ACCEPT_INVITATION_REQ: - { - if(InformationBufferLength < 7) - { - *BytesNeeded = 7; - return NDIS_STATUS_INVALID_LENGTH; - } - - (GET_P2P_INFO(pAdapter))->bAcceptInvitation = *((PBOOLEAN)((pu1Byte)InformationBuffer + 0)); - PlatformMoveMemory((GET_P2P_INFO(pAdapter))->AccpetInvitationDeviceAddress, - (pu1Byte)InformationBuffer + 1, 6); - } - break; - case OID_RT_P2P_VERSION: - { - u4Byte verToSet = 0; - - if(pMgntInfo->bDisableRtkSupportedP2P) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Ignore set of 0x%08X because bDisableRtkSupportedP2P is turned on\n", Oid)); - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if(InformationBufferLength < sizeof(u4Byte)) - { - *BytesNeeded = sizeof(u4Byte); - return NDIS_STATUS_INVALID_LENGTH; - } - - verToSet = *((pu4Byte)InformationBuffer); - - if(P2P_VERSION < verToSet) - { - return NDIS_STATUS_NOT_SUPPORTED; - } - - (GET_P2P_INFO(pAdapter))->P2PVersion = verToSet; - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_VERSION to %u\n", verToSet)); - } - break; - case OID_RT_P2P_MODE: - { - u4Byte index = 0; - BOOLEAN bP2PMode; - BOOLEAN bGO; - u1Byte ListenChannel; - u1Byte IntendedOpChannel; - u1Byte GOIntent; - - if(pMgntInfo->bDisableRtkSupportedP2P) - { - RT_TRACE_F(COMP_P2P, DBG_WARNING, - ("Ignore set of 0x%08X because bDisableRtkSupportedP2P is turned on\n", Oid)); - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - if(InformationBufferLength < sizeof(BOOLEAN) * 2 + sizeof(u1Byte) * 3) - { - *BytesNeeded = sizeof(BOOLEAN) * 2 + sizeof(u1Byte) * 3; - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_MODE: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - bP2PMode = *((PBOOLEAN)((pu1Byte)InformationBuffer + index)); - index += sizeof(BOOLEAN); - - bGO = *((PBOOLEAN)((pu1Byte)InformationBuffer + index)); - index += sizeof(BOOLEAN); - - ListenChannel = *((pu1Byte)((pu1Byte)InformationBuffer + index)); - index += sizeof(u1Byte); - - IntendedOpChannel = *((pu1Byte)((pu1Byte)InformationBuffer + index)); - index += sizeof(u1Byte); - - GOIntent = *((pu1Byte)((pu1Byte)InformationBuffer + index)); - index += sizeof(u1Byte); - - MgntActSet_P2PMode(pAdapter, - bP2PMode, - bGO, - ListenChannel, - IntendedOpChannel, - GOIntent); - } - break; - - case OID_RT_ROAM_FAKE_SIGNAL: - { - if(InformationBufferLength < sizeof(u2Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_OID_SET, DBG_WARNING, - ("Set OID_RT_ROAM_FAKE_SIGNAL: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - pMgntInfo->RegFakeRoamSignal[0] = *((pu1Byte)InformationBuffer); - pMgntInfo->RegFakeRoamSignal[1] = *((pu1Byte)InformationBuffer + 1); - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("RegFakeRoamSignal[0] = %d, RegFakeRoamSignal[1] = %d\n", pMgntInfo->RegFakeRoamSignal[0], pMgntInfo->RegFakeRoamSignal[1])); - } - break; - - case OID_RT_P2P_PROVISION_IE: - { - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_PROVISION_IE: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - MgntActSet_P2PProvisionIE(pAdapter, InformationBuffer, (u1Byte)InformationBufferLength); - } - break; - case OID_RT_P2P_FLUSH_SCAN_LIST: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("Set OID_RT_P2P_FLUSH_SCAN_LIST:\n")); - MgntActSet_P2PFlushScanList(pAdapter); - } - break; - case OID_RT_P2P_PROVISIONING_RESULT: - { - if(InformationBufferLength < sizeof(P2P_PROVISIONING_RESULT)) - { - *BytesNeeded = sizeof(P2P_PROVISIONING_RESULT); - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_PROVISIONING_RESULT: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_PROVISIONING_RESULT: %u\n", - *(PP2P_PROVISIONING_RESULT)InformationBuffer)); - MgntActSet_P2PProvisioningResult(pAdapter, *(PP2P_PROVISIONING_RESULT)InformationBuffer); - } - break; - case OID_RT_P2P_DEVICE_DISCOVERY: - { - PP2P_INFO pP2PInfo; - RT_TRACE(COMP_P2P, DBG_LOUD, ("OID_RT_P2P_DEVICE_DISCOVERY\n")); - - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_DEVICE_DISCOVERY: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - pP2PInfo = GET_P2P_INFO(pAdapter); - - P2PResetCommonChannelArrivingProcess(pP2PInfo); - if(!P2PDeviceDiscovery(pP2PInfo, (*(pu1Byte)InformationBuffer))) - { - return NDIS_STATUS_MEDIA_BUSY; - } - } - break; - case OID_RT_P2P_CONNECT_REQUEST: - { - *BytesNeeded = sizeof(u1Byte) * 6; - if(InformationBufferLength < *BytesNeeded) - { - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_CONNECT_REQUEST: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - if(!P2PConnect(GET_P2P_INFO(pAdapter), (pu1Byte)InformationBuffer)) - { - return NDIS_STATUS_FAILURE; - } - } - break; - case OID_RT_P2P_DISCONNECT_REQUEST: - { - P2PDisconnect(GET_P2P_INFO(pAdapter)); - } - break; - case OID_RT_P2P_INVITE_PEER: - { - if(InformationBufferLength < sizeof(P2P_LIB_INVITATION_REQ_CONTEXT)) - { - *BytesNeeded = sizeof(P2P_LIB_INVITATION_REQ_CONTEXT); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_INVITE_PEER: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - P2PInvitePeerStart(GET_P2P_INFO(pAdapter), (PP2P_LIB_INVITATION_REQ_CONTEXT)InformationBuffer); - } - break; - case OID_RT_P2P_GO_INTENT: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - BOOLEAN bTieBreaker = pP2PInfo->GOIntent & 0x01; - - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_GO_INTENT: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_GO_INTENT: from %u to %u with TieBreaker: %u unchanged\n", - pP2PInfo->GOIntent >> 1, *((pu1Byte)InformationBuffer), bTieBreaker)); - - pP2PInfo->GOIntent = ((*((pu1Byte)InformationBuffer) << 1) | bTieBreaker); - } - break; - case OID_RT_P2P_DEVICE_DISCOVERABILITY_REQ: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(InformationBufferLength < sizeof(u1Byte) * 6) - { - *BytesNeeded = sizeof(u1Byte) * 6; - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_DEVICE_DISCOVERABILITY_REQ: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - P2PDeviceDiscoverabilityReq(pP2PInfo, (pu1Byte)InformationBuffer, FALSE); - } - break; - case OID_RT_P2P_PROVISION_DISCOVERY: - { - if(InformationBufferLength < 6 + sizeof(u2Byte)) - { - *BytesNeeded = 6 + sizeof(u2Byte); - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_PROVISION_DISCOVERY: invalid length(%d < %d)\n", - InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - GET_P2P_INFO(pAdapter)->ProvisionReqRetryCnt = 0; - if(!P2PProvisionDiscovery(GET_P2P_INFO(pAdapter), - (pu1Byte)InformationBuffer, - *(pu2Byte)((pu1Byte)InformationBuffer + 6))) - { - return NDIS_STATUS_FAILURE; - } - } - break; - case OID_RT_P2P_CAPABILITY: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - u1Byte DevCap; - u1Byte GrpCap; - - if(InformationBufferLength < sizeof(u1Byte) * 2) - { - *BytesNeeded = sizeof(u1Byte) * 2; - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_CAPABILITY: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - DevCap = *((pu1Byte)InformationBuffer + 0); - GrpCap = *((pu1Byte)InformationBuffer + 1); - - pP2PInfo->DeviceCapability = DevCap; - pP2PInfo->GroupCapability = GrpCap; - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("OID_RT_P2P_CAPABILITY: set DC=%u, GC=%u\n", - pP2PInfo->DeviceCapability, pP2PInfo->GroupCapability)); - - //P2PDumpDeviceCapability(pP2PInfo->DeviceCapability); - //P2PDumpGroupCapability(pP2PInfo->GroupCapability); - } - break; - case OID_RT_P2P_GO_SSID: - case OID_RT_P2P_GO_SSID_POSTFIX: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - u1Byte SsidLen = 0; - pu1Byte SsidBuf = NULL; - - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_GO_SSID: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - SsidLen = *((pu1Byte)InformationBuffer + 0); - - if(InformationBufferLength < sizeof(u1Byte) + SsidLen) - { - *BytesNeeded = sizeof(u1Byte) + SsidLen; - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_GO_SSID: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - // - // To append the post fix to DIRECT-xx which has length 9 - // - if(SsidLen > 32 - 9) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_GO_SSID: invalid SSID postfixlength(%d < %d)\n", SsidLen, 32 - 9)); - return NDIS_STATUS_INVALID_LENGTH; - } - - SsidBuf = ((pu1Byte)InformationBuffer + 1); - - // - // If this OID is called, GO SSID will not be changed until this OID is set again or - // P2PInitialize is called. - // - - CopySsid(pP2PInfo->SSIDPostfixBuf, pP2PInfo->SSIDPostfixLen, SsidBuf, SsidLen); - - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "OID_RT_P2P_GO_SSID\n", pP2PInfo->SSIDPostfixBuf, pP2PInfo->SSIDPostfixLen); - } - break; - case OID_RT_P2P_INTERFACE_ADDRESS: - { - if(InformationBufferLength < 6) - { - *BytesNeeded = 6; - return NDIS_STATUS_INVALID_LENGTH; - } - PlatformMoveMemory((GET_P2P_INFO(pAdapter))->InterfaceAddress, InformationBuffer, 6); - - if(!eqMacAddr(pAdapter->CurrentAddress, (pu1Byte)InformationBuffer)) - { - //NicIFSetMacAddress1(pAdapter, (pu1Byte)InformationBuffer); - } - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Set OID_RT_P2P_INTERFACE_ADDRESS: ", InformationBuffer); - } - break; - case OID_RT_P2P_DEVICE_ADDRESS: - { - if(InformationBufferLength < 6) - { - *BytesNeeded = 6; - return NDIS_STATUS_INVALID_LENGTH; - } - PlatformMoveMemory((GET_P2P_INFO(pAdapter))->DeviceAddress, InformationBuffer, 6); - - if(!eqMacAddr(pAdapter->CurrentAddress, (pu1Byte)InformationBuffer)) - { - //NicIFSetMacAddress1(pAdapter, (pu1Byte)InformationBuffer); - } - - RT_PRINT_ADDR(COMP_P2P, DBG_LOUD, "Set OID_RT_P2P_DEVICE_ADDRESS: ", InformationBuffer); - } - break; - case OID_RT_P2P_POWER_SAVE: - { - PP2P_POWERSAVE_SET pP2pPs; - - *BytesNeeded = sizeof(P2P_POWERSAVE_SET); - if(InformationBufferLength < *BytesNeeded) - return NDIS_STATUS_INVALID_LENGTH; - - pP2pPs = (PP2P_POWERSAVE_SET)InformationBuffer; - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "Set OID: OID_RT_P2P_POWER_SAVE:\n", pP2pPs, sizeof(P2P_POWERSAVE_SET)); - P2PSetPowerSaveMode(GET_P2P_INFO(pAdapter), pP2pPs, 0, P2P_PS_UPDATE_BY_USER); - } - break; - case OID_RT_P2P_OP_CHANNEL: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_OP_CHANNEL: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - if(pP2PInfo->Role > P2P_DEVICE) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_OP_CHANNEL: in operating state: %u\n", - pP2PInfo->State)); - return NDIS_STATUS_FAILURE; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_OP_CHANNEL: from %u to %u\n", - pP2PInfo->OperatingChannel, *(pu1Byte)InformationBuffer)); - - pP2PInfo->OperatingChannel = *(pu1Byte)InformationBuffer; - } - break; - case OID_RT_P2P_LISTEN_CHANNEL: - { - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_LISTEN_CHANNEL: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - MgntActSet_P2PListenChannel(pAdapter, *(pu1Byte)InformationBuffer); - } - break; - case OID_RT_P2P_EXTENDED_LISTEN_TIMING: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - u4Byte index; - BOOLEAN bOn; - u2Byte Period; - u2Byte Duration; - - if(InformationBufferLength < sizeof(BOOLEAN) + 2 * sizeof(u2Byte)) - { - *BytesNeeded = sizeof(BOOLEAN); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_EXTENDED_LISTEN_TIMING: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - if(!P2P_ENABLED(pP2PInfo)) - { - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_EXTENDED_LISTEN_TIMING: P2P NOT enabled\n")); - break; - } - - index = 0; - bOn = *((PBOOLEAN)((pu1Byte)InformationBuffer + index)); - index += sizeof(BOOLEAN); - Period = *((pu2Byte)((pu1Byte)InformationBuffer + index)); - index += sizeof(u2Byte); - Duration= *((pu2Byte)((pu1Byte)InformationBuffer + index)); - index += sizeof(u2Byte); - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_EXTENDED_LISTEN_TIMING: bOn: %u, period: %u(ms), duration: %u(ms)\n", - bOn, Period, Duration)); - - pP2PInfo->bSendProbeReqInExtendedListen = bOn; - pP2PInfo->ExtListenTimingPeriod = Period; - pP2PInfo->ExtListenTimingDuration = Duration; - } - break; - - case OID_RT_P2P_SERVICE_DISCOVERY_REQ: - { - PP2P_SD_REQ_CONTEXT pServiceQueryContent = (PP2P_SD_REQ_CONTEXT)InformationBuffer; - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(InformationBufferLength < (ULONG)FIELD_OFFSET(P2P_SD_REQ_CONTEXT, ServiceReqTLVList)) - { - *BytesNeeded = FIELD_OFFSET(P2P_SD_REQ_CONTEXT, ServiceReqTLVList); - return NDIS_STATUS_INVALID_LENGTH; - } - - if(InformationBufferLength < - FIELD_OFFSET(P2P_SD_REQ_CONTEXT, ServiceReqTLVList) + - sizeof(P2P_SERVICE_REQ_TLV) * pServiceQueryContent->ServiceReqTLVSize) - { - *BytesNeeded = FIELD_OFFSET(P2P_SD_REQ_CONTEXT, ServiceReqTLVList) + - sizeof(P2P_SERVICE_REQ_TLV) * pServiceQueryContent->ServiceReqTLVSize; - return NDIS_STATUS_INVALID_LENGTH; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_SERVICE_DISCOVERY_REQ\n")); - - P2PServiceDiscoveryReq(pP2PInfo, pServiceQueryContent); - } - break; - case OID_RT_P2P_SERVICE_DISCOVERY_RSP: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_SERVICE_DISCOVERY_RSP\n")); - if(InformationBufferLength < (ULONG)FIELD_OFFSET(P2P_SD_RSP_CONTEXT, ServiceRspTLVList)) - { - *BytesNeeded = FIELD_OFFSET(P2P_SD_RSP_CONTEXT, ServiceRspTLVList); - return NDIS_STATUS_INVALID_LENGTH; - } - - P2PServiceDiscoveryRsp(GET_P2P_INFO(pAdapter), (PP2P_SD_RSP_CONTEXT)InformationBuffer); - } - break; - - case OID_RT_P2P_SERVICE_FRAG_THRESHOLD: - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_SERVICE_FRAG_THRESHOLD\n")); - if(InformationBufferLength < sizeof(u2Byte)) - { - *BytesNeeded = sizeof(u2Byte); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_SERVICE_FRAG_THRESHOLD: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - if(RT_STATUS_SUCCESS == P2PSetServiceFragThreshold(pAdapter, *((pu2Byte)InformationBuffer))) - { - Status = NDIS_STATUS_FAILURE; - } - } - break; - case OID_RT_P2P_GO_BEACON_INTERVAL: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(InformationBufferLength < sizeof(u2Byte)) - { - *BytesNeeded = sizeof(u2Byte); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_GO_BEACON_INTERVAL: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - P2PGOSetBeaconInterval(pP2PInfo, *(pu2Byte)InformationBuffer); - } - break; - - case OID_RT_P2P_GO_NEGO_RESULT: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - if(InformationBufferLength < sizeof(u1Byte)) - { - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_GO_NEGO_RESULT: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - RT_TRACE(COMP_P2P, DBG_LOUD, - ("Set OID_RT_P2P_GO_NEGO_RESULT: from %u to %u \n", - pP2PInfo->PreviousGONegoResult, *(pu1Byte)InformationBuffer)); - - pP2PInfo->PreviousGONegoResult = *(pu1Byte)InformationBuffer; - } - break; - case OID_RT_P2P_GO_PREPROVISIONING: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - u4Byte SsidLen = 0; - - if(InformationBufferLength < sizeof(u4Byte)) - { - *BytesNeeded = sizeof(u4Byte); - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_GO_PREPROVISIONING: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - SsidLen = *(pu4Byte)InformationBuffer; - - if(InformationBufferLength < sizeof(u4Byte) + SsidLen) - { - *BytesNeeded = sizeof(u4Byte) + SsidLen; - RT_TRACE(COMP_P2P, DBG_LOUD,("Set OID_RT_P2P_GO_PREPROVISIONING: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - pP2PInfo->SSIDLen = (u1Byte)SsidLen; - PlatformMoveMemory(pP2PInfo->SSIDBuf, ((pu1Byte)InformationBuffer) + sizeof(u4Byte), SsidLen); - - RT_PRINT_STR(COMP_P2P, DBG_LOUD, "Set OID_RT_P2P_GO_PREPROVISIONING: SSID:", pP2PInfo->SSIDBuf, pP2PInfo->SSIDLen); - - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - - pP2PInfo->ConnectionContext.bGoingToBeGO = TRUE; - pP2PInfo->State = P2P_STATE_PRE_PROVISIONING; - PlatformCancelTimer(pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - break; - case OID_RT_P2P_CLIENT_PREPROVISIONING: - { - PP2P_INFO pP2PInfo = GET_P2P_INFO(pAdapter); - - P2PDeviceDiscoveryComplete(pP2PInfo, FALSE); - - pP2PInfo->ConnectionContext.bGoingToBeGO = FALSE; - pP2PInfo->State = P2P_STATE_PRE_PROVISIONING; - PlatformCancelTimer(pAdapter, &pP2PInfo->P2PMgntTimer); - PlatformSetTimer(pAdapter, &pP2PInfo->P2PMgntTimer, 0); - } - break; - case OID_RT_P2P_CHANNEL_LIST: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_P2P_CHANNEL_LIST\n")); - { - MgntActSet_P2PChannelList(pAdapter, *(pu1Byte)InformationBuffer, (pu1Byte)InformationBuffer + 1); - } - break; - - case OID_RT_P2P_PROFILE_LIST: - { - PP2P_PROFILE_LIST pProfileList = NULL; - - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_PROFILE_LIST\n")); - - if(InformationBufferLength < (ULONG)FIELD_OFFSET(P2P_PROFILE_LIST, profileList)) - { - *BytesNeeded = FIELD_OFFSET(P2P_PROFILE_LIST, profileList); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_PROFILE_LIST: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - pProfileList = (PP2P_PROFILE_LIST)InformationBuffer; - - if(InformationBufferLength < FIELD_OFFSET(P2P_PROFILE_LIST, profileList) + pProfileList->nProfiles * sizeof(P2P_PROFILE_LIST_ENTRY)) - { - *BytesNeeded = FIELD_OFFSET(P2P_PROFILE_LIST, profileList) + pProfileList->nProfiles * sizeof(P2P_PROFILE_LIST_ENTRY); - RT_TRACE(COMP_P2P, DBG_LOUD, ("Set OID_RT_P2P_PROFILE_LIST: invalid length(%d < %d)\n", InformationBufferLength, *BytesNeeded)); - return NDIS_STATUS_INVALID_LENGTH; - } - - if(RT_STATUS_SUCCESS != P2PSetProfileList(pAdapter, pProfileList)) - { - Status = NDIS_STATUS_FAILURE; - } - } - break; - - #endif // #if (P2P_SUPPORT == 1) - - case OID_RT_P2P_FULL_SSID: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_P2P_FULL_SSID\n")); - Status = NdisStatusFromRtStatus(P2P_SetP2PGoFullSSID(pAdapter, (pu1Byte)InformationBuffer, InformationBufferLength)); - } - break; - - } - - return Status; -} - - -// This is to offload the N6CSetInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CSetInformationHandleCustomized11nOids( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - // Joseph test - case OID_RT_11N_SILENT_RESET: - { - - //Keep for debug usb3.0 20120907 -#if (HAL_8812A_USB == 1) - PRT_USB_DEVICE pDevice; - u1Byte direction; - - pDevice = GET_RT_USB_DEVICE(pAdapter); - - direction = *((u1Byte*)InformationBuffer); - if(direction == 0) //out pipe need to be reset - PlatformScheduleWorkItem(&(pDevice->FixOutPipeErrorWorkItem)); - else if(direction == 1) //in pipe need to be reset - PlatformScheduleWorkItem(&(pDevice->FixInPipeErrorWorkItem)); - else - RT_TRACE(COMP_OID_SET, DBG_LOUD,( "Wrong parameters!\n" )); - - RT_TRACE(COMP_OID_SET, DBG_LOUD,( "Set pipe reset!\n" )); -#endif - } - break; - - case OID_RT_AMPDU_BURST_MODE: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - pHalData->AMPDUBurstMode = (*(pu1Byte)InformationBuffer); - DbgPrint("OID_RT_AMPDU_BURST_MODE: %d\n", pHalData->AMPDUBurstMode); - } - break; - - case OID_RT_AMPDU_BURST_NUM: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - pHalData->AMPDUBurstNum = (*(pu1Byte)InformationBuffer); - DbgPrint("OID_RT_AMPDU_BURST_NUM: %d\n", pHalData->AMPDUBurstNum); - } - break; - - case OID_RT_AUTO_AMPDU_BURST_ENABLE: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - pHalData->bAutoAMPDUBurstMode = (BOOLEAN)(*(pu1Byte)InformationBuffer); - DbgPrint("OID_RT_AUTO_AMPDU_BURST_ENABLE: bAutoAMPDUBurstMode %d\n", pHalData->bAutoAMPDUBurstMode); - } - break; - - case OID_RT_AUTO_AMPDU_BURST_THRESHOLD: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - pNdisCommon->RegAutoAMPDUBurstModeThreshold = (u2Byte)(*(pu1Byte)InformationBuffer); - pHalData->AutoAMPDUBurstModeThreshold = pNdisCommon->RegAutoAMPDUBurstModeThreshold ; - DbgPrint("OID_RT_AUTO_AMPDU_BURST_THRESHOLD: RegAutoAMPDUBurstModeThreshold %d, AutoAMPDUBurstModeThreshold %d\n",pNdisCommon->RegAutoAMPDUBurstModeThreshold,pHalData->AutoAMPDUBurstModeThreshold); - } - break; - - case OID_RT_TX_CHECK_TP_THRESHOLD: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - pNdisCommon->RegTxHignTPThreshold = (u2Byte)(*(pu1Byte)InformationBuffer); - pHalData->TxHignTPThreshold = pNdisCommon->RegTxHignTPThreshold; - } - break; - - case OID_RT_RX_CHECK_TP_THRESHOLD: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - pNdisCommon->RegRxHignTPThreshold = (u2Byte)(*(pu1Byte)InformationBuffer); - pHalData->RxHignTPThreshold = pNdisCommon->RegRxHignTPThreshold; - } - break; - - case OID_RT_BEAMFORMING_START: - { - u1Byte RA[6]; - u1Byte AID, Mode, Rate; - CHANNEL_WIDTH BW; - - if(InformationBufferLength < 8) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("[WARNING] OID_RT_BEAMFORMING_START, invalid buffer length (%d)!\n", InformationBufferLength)); - *BytesNeeded = 8; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - cpMacAddr(RA, (pu1Byte)InformationBuffer+3); - Mode = (*((pu1Byte)InformationBuffer) >> 4) & 0xf; - BW = *((pu1Byte)(InformationBuffer)) & 0xf; - AID = *((pu1Byte)InformationBuffer+1); - Rate = *((pu1Byte)InformationBuffer+2); - } - break; - - case OID_RT_BEAMFORMING_END: - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - } - break; - - case OID_RT_BEAMFORMING_PERIOD: - { - u2Byte Period; - u1Byte Idx, Mode; - CHANNEL_WIDTH BW; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - PDM_ODM_T pDM_Odm = &pHalData->DM_OutSrc; - - if(InformationBufferLength < 4) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("[WARNING] OID_RT_BEAMFORMING_PERIOD, invalid buffer length (%d)!\n", InformationBufferLength)); - *BytesNeeded = 4; - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - Mode = (*((pu1Byte)InformationBuffer) >> 4) & 0xf; - BW = *((pu1Byte)(InformationBuffer)) & 0xf; - Idx = *((pu1Byte)InformationBuffer+1); - Period =( (*((pu1Byte)InformationBuffer+2)) << 8) | (*((pu1Byte)InformationBuffer+3)); - } - break; - - - - case OID_RT_ADCSMP_TRIG: - { - u2Byte PollingTime; - u1Byte TrigSel, TrigSigSel, DmaDataSigSel, TriggerTime; - - TrigSel = (*((pu1Byte)(InformationBuffer)) ) >> 7; - TrigSigSel = *((pu1Byte)(InformationBuffer)) & 0x1f; - DmaDataSigSel =*((pu1Byte)InformationBuffer+1) & 0xf; - - TriggerTime = *((pu1Byte)InformationBuffer+2); - PollingTime =( (*((pu1Byte)InformationBuffer+5)) << 8) | (*((pu1Byte)InformationBuffer+4)); - - ADCSmp_Set(pAdapter, TrigSel, TrigSigSel, DmaDataSigSel, TriggerTime, PollingTime); - } - break; - - case OID_RT_ADCSMP_STOP: - ADCSmp_Stop(pAdapter); - break; - - case OID_RT_11N_TX_RATE_DISPLAY: - pMgntInfo->OSTxRateDisplayType = *((pu1Byte)InformationBuffer); - break; - - case OID_RT_11N_FORCED_ADDBA: - { - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - pHTInfo->bAcceptAddbaReq = *((pu1Byte)InformationBuffer); - RT_TRACE(COMP_OID_SET, DBG_LOUD,( "Force addba %x\n", pHTInfo->bAcceptAddbaReq)); - } - break; - - case OID_RT_11N_FORCED_AMPDU: - { - u1Byte nAMPDU_Ability; - PADAPTER pExtAdapter = GetFirstExtAdapter(pAdapter); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_HIGH_THROUGHPUT pExtHTInfo = NULL; - - if(pExtAdapter != NULL) - pExtHTInfo = pExtAdapter->MgntInfo.pHTInfo; - - pHTInfo->ForcedAMPDUMode = *((pu1Byte)InformationBuffer); - if(pExtHTInfo != NULL) - pExtHTInfo->ForcedAMPDUFactor = pHTInfo->ForcedAMPDUMode; - - switch(pHTInfo->ForcedAMPDUMode) - { - case HT_AMPDU_AUTO: - case HT_AMPDU_DISABLE: - // Do nothing - break; - - case HT_AMPDU_ENABLE: - // Verify input paramter. - if(InformationBufferLength < 2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 2; - return Status; - } - - nAMPDU_Ability = *((pu1Byte)InformationBuffer+1); - - if(nAMPDU_Ability > 0x77) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - pHTInfo->ForcedAMPDUFactor = nAMPDU_Ability&0x07; - pHTInfo->ForcedMPDUDensity = (nAMPDU_Ability>>4)&0x07; - if(pExtHTInfo != NULL) - { - pExtHTInfo->ForcedAMPDUFactor = pHTInfo->ForcedAMPDUFactor ; - pExtHTInfo->ForcedMPDUDensity = pHTInfo->ForcedMPDUDensity; - } - break; - } - } - break; - - case OID_RT_11N_FORCED_AMSDU: - { - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - u2Byte nAMSDU_MaxSize = 0; - u1Byte nAMSDU_SizeType = 0, nAMSDU_MaxNum = 0; - - HT_MGNT_SET_AMSDU(pAdapter, (HT_AMSDU_MODE_E)*((pu1Byte)InformationBuffer)); - switch(pHTInfo->ForcedAMSDUMode) - { - case HT_AMSDU_AUTO: - case HT_AMSDU_DISABLE: - { - u1Byte QueueId; - PRT_TCB pTcb; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - for(QueueId = 0; QueueId < MAX_TX_QUEUE; QueueId++) - { - while(!RTIsListEmpty(&pAdapter->TcbAggrQueue[QueueId])) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pAdapter->TcbAggrQueue[QueueId]); - pAdapter->TcbCountInAggrQueue[QueueId]--; - PreTransmitTCB(pAdapter, pTcb); - } - } - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } - break; - - - case HT_AMSDU_ENABLE: - case HT_AMSDU_WITHIN_AMPDU: - if(InformationBufferLength < 5) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 5; - return Status; - } - - nAMSDU_SizeType = *((pu1Byte)InformationBuffer+1); - - if(nAMSDU_SizeType > 6) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - nAMSDU_MaxSize= ( (*((pu1Byte)InformationBuffer+2)) << 8) | (*((pu1Byte)InformationBuffer+3)); - - if(nAMSDU_SizeType == 0 && nAMSDU_MaxSize == 0 ) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - switch(nAMSDU_SizeType) - { - case 0: - pHTInfo->ForcedAMSDUMaxSize = nAMSDU_MaxSize; - break; - case 1: - pHTInfo->ForcedAMSDUMaxSize = HT_AMSDU_SIZE_4K; - break; - case 2: - pHTInfo->ForcedAMSDUMaxSize = HT_AMSDU_SIZE_8K; - break; - case 3: - pHTInfo->ForcedAMSDUMaxSize = VHT_AMSDU_SIZE_4K; - break; - case 4: - pHTInfo->ForcedAMSDUMaxSize = VHT_AMSDU_SIZE_8K; - break; - case 5: - pHTInfo->ForcedAMSDUMaxSize = VHT_AMSDU_SIZE_11K; - break; - default: - pHTInfo->ForcedAMSDUMaxSize = AMSDU_SIZE_UNSPECIFED; - break; - } - - nAMSDU_MaxNum = *((pu1Byte)InformationBuffer+4); - - if(pHTInfo->ForcedAMSDUMode == HT_AMSDU_WITHIN_AMPDU && nAMSDU_MaxNum < 1 ) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - pHTInfo->ForcedAMSDUMaxNum =nAMSDU_MaxNum; - break; - } - - //DbgPrint( "AMSDU mode %d AMSDU size %d AMSDU Num %d\n", - // pHTInfo->ForcedAMSDUMode, pHTInfo->ForcedAMSDUMaxSize, pHTInfo->ForcedAMSDUMaxNum); - } - break; - - case OID_RT_11N_FORCED_SHORTGI: - { - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - - if(*((pu1Byte)InformationBuffer) > 2) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - pHTInfo->ForcedShortGI = (*((pu1Byte)InformationBuffer)); - - } - break; - - case OID_RT_11N_FORCED_LDPC: - { - if(RT_STATUS_SUCCESS != - (rtStatus = MgntActSet_802_11_LDPC_MODE(pAdapter, InformationBuffer, InformationBufferLength))) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - } - break; - - case OID_RT_11N_FORCED_STBC: - { - if(RT_STATUS_SUCCESS != - (rtStatus = MgntActSet_802_11_STBC_MODE(pAdapter, InformationBuffer, InformationBufferLength))) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - } - break; - - case OID_RT_11N_MIMOPS_MODE: - { - u1Byte NewMimoPsMode = *((u1Byte*)InformationBuffer); - PADAPTER Adapter = GetDefaultAdapter(pAdapter); - if((NewMimoPsMode == 2) || (NewMimoPsMode > 3)) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - // get first Adapter with AP mode. - while(Adapter != NULL) - { - if(ACTING_AS_AP(Adapter)) - break; - Adapter = GetNextExtAdapter(Adapter); - } - - if(Adapter == NULL) - Adapter = GetDefaultAdapter(pAdapter); - - if(ACTING_AS_AP(Adapter)) - { - PRT_WLAN_STA pEntry; - u1Byte i; - u1Byte multicast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - SendMimoPsFrame(Adapter, multicast, NewMimoPsMode); - - for(i = 0; i < ASSOCIATE_ENTRY_NUM; i++) - { - pEntry = AsocEntry_EnumStation(Adapter, i); - if(pEntry!=NULL) - { - if(pEntry->bAssociated) - SendMimoPsFrame(Adapter, pEntry->MacAddr, NewMimoPsMode); - } - else - { - break; - } - } - SetSelfMimoPsMode(Adapter, NewMimoPsMode); - } - else - { - SendMimoPsFrame(pAdapter, pMgntInfo->Bssid, NewMimoPsMode); - SetSelfMimoPsMode(pAdapter, NewMimoPsMode); - } - } - break; - - - case OID_RT_11N_RESET_HISTOGRAM: - ResetHistogramCounter(pAdapter); - break; - - case OID_RT_11N_RX_REORDER_CONTROL: - { - BOOLEAN bRxReorderEnable; - u1Byte RxReorderWinSize; - u1Byte RxReorderPendingTime; // ms - - // Get forced data rate to set. - bRxReorderEnable = (*((u1Byte*)InformationBuffer)==1)?TRUE:FALSE; - - if(bRxReorderEnable) - { - // Verify input paramter. - if(InformationBufferLength < 3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 3; - return Status; - } - - RxReorderWinSize = *((pu1Byte)InformationBuffer+1); - if(RxReorderWinSize > 64) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - RxReorderPendingTime = *((pu1Byte)InformationBuffer+2); - if(RxReorderWinSize == 0) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - pMgntInfo->pHTInfo->bCurRxReorderEnable = TRUE; - pMgntInfo->pHTInfo->RxReorderWinSize = RxReorderWinSize; - pMgntInfo->pHTInfo->RxReorderPendingTime = RxReorderPendingTime; - } - else - { - PRX_TS_RECORD pRxTS = (PRX_TS_RECORD) RTGetHeadList(&pMgntInfo->Rx_TS_Admit_List); - PRX_REORDER_ENTRY pRxReorderEntry; - - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - - while(&pRxTS->TsCommonInfo.List != &pMgntInfo->Rx_TS_Admit_List) - { - PlatformCancelTimer(pAdapter, &pRxTS->RxPktPendingTimer); - pRxTS->RxIndicateState = 0; - while( RTIsListNotEmpty(&pRxTS->RxPendingPktList)) - { - pRxReorderEntry = (PRX_REORDER_ENTRY)RTRemoveHeadList(&pRxTS->RxPendingPktList); - pRxTS->RxBatchCount--; - CountRxStatistics(pAdapter, pRxReorderEntry->pRfd); - /*if(pAdapter->bInHctTest && - pRxReorderEntry->pRfd->FragLength == pRxReorderEntry->pRfd->PacketLength&& - pAdapter->ForHctTest < 25 ) - { - pAdapter->ForHctTest++; - CountRxStatistics(pAdapter, pRxReorderEntry->pRfd); - DrvIFIndicatePacket(pAdapter, pRxReorderEntry->pRfd); - }*/ // temp mark if pass DTM - DrvIFIndicatePacket(pAdapter, pRxReorderEntry->pRfd); - } - pRxTS = (PRX_TS_RECORD)RTNextEntryList(&pRxTS->TsCommonInfo.List); - } - - pMgntInfo->pHTInfo->bCurRxReorderEnable = FALSE; - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - } - } - break; - - case OID_RT_11N_DYNAMIC_TX_POWER_CONTROL: //Dynamic Tx power for near/far range enable/Disable , by Jacken , 2008-03-06 - if( *((pu1Byte)InformationBuffer) == 0 ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_DYNAMIC_TX_POWER_CONTROL: disable\n")); - pMgntInfo->bDynamicTxPowerEnable = FALSE; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_DYNAMIC_TX_POWER_CONTROL: enable\n")); - pMgntInfo->bDynamicTxPowerEnable = TRUE; - } - break; - case OID_RT_11N_TX_POWER_TRAINING: - if( *((pu1Byte)InformationBuffer) == 0 ) - { - pMgntInfo->bDisableTXPowerTraining = TRUE; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_TX_POWER_TRAINING: disable \n")); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_TX_POWER_TRAINING: enable\n")); - pMgntInfo->bDisableTXPowerTraining = FALSE; - } - //This oid only valid when tx power training function excuted by fw - // when media connect ,set bSetTXPowerTrainingByOid TRUE ,and dm_RefreshRateAdaptiveMask() - //will update H2CCMD TO FW to disable or enable tx power training, - pMgntInfo->bSetTXPowerTrainingByOid = TRUE; - break; - - case OID_RT_11N_DISABLE_TX_POWER_BY_RATE: - if( *((pu1Byte)InformationBuffer) == 1 ) - { - pMgntInfo->bDisableTXPowerByRate= TRUE; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_DISABLE_TX_POWER_BY_RATE: disable \n")); - } - else - { - pMgntInfo->bDisableTXPowerByRate = FALSE; - } - - break; - - - - //added just for debug. Dump all regs' value. by wl. - case OID_RT_11N_DUMP_REGS: - { - if(InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_DUMP_REGS: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - - if( *((pu1Byte)InformationBuffer) == 1 ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Dump regs' value:::\n")); - pMgntInfo->bDumpRegs= TRUE; - } - - *BytesRead = InformationBufferLength; - } - break; - // add for 92d rx batch indicate - case OID_RT_11N_SET_RX_FAST_BATCH_NUM: - { - if(InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_11N_DUMP_REGS: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - - pMgntInfo->NumforRxFastbatch= *((pu1Byte)InformationBuffer); - if( pMgntInfo->NumforRxFastbatch<1 ) - { - - pMgntInfo->NumforRxFastbatch = 1; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set RX fast batch Indication num:%d.\n",pMgntInfo->NumforRxFastbatch)); - - *BytesRead = InformationBufferLength; - } - break; - - case OID_RT_11N_TDLS_ENABLE: - { - TDLS_SetConfiguration(pAdapter, InformationBuffer, (u1Byte)InformationBufferLength); - } - break; - - case OID_RT_11N_SIGMA_CONFIG: - { - MgntActSet_802_11_Sigma_Capability(pAdapter, InformationBuffer, (u1Byte)InformationBufferLength); - } - break; - case OID_RT_BAND_SELECT: - { - pMgntInfo->RegPreferBand = *((pu2Byte)InformationBuffer); - RT_TRACE(COMP_OID_SET,DBG_LOUD,("RegPreferBand=%d\n", pMgntInfo->RegPreferBand)); - } - break; - - case OID_RT_CUSTOMER_WOW_S5_INFO: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD,("===> OID_RT_CUSTOMER_WOW_S5_INFO \n")); - if( InformationBufferLength < sizeof(RT_S5WakeUPInfo) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(RT_S5WakeUPInfo); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_CUSTOMER_WOW_S5_INFO: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - MgntActSet_S5_WAKEUP_INFO(pAdapter, (pu1Byte)InformationBuffer , InformationBufferLength); - } - break; - - case OID_RT_CUSTOMER_WOW_S5_SUPPORT : - { - ULONG bEnableS5; - if( InformationBufferLength < sizeof(ULONG) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_CUSTOMER_WOW_S5_SUPPORT: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - - bEnableS5 =*((PULONG)InformationBuffer); - - if( bEnableS5 == 1 ) - { - pMgntInfo->bReceiveSystemPSOID = TRUE; - RT_TRACE(COMP_TEST, DBG_LOUD, ("OID_RT_CUSTOMER_WOW_S5_SUPPORT enable S5\n")); - } - else - { - pMgntInfo->bReceiveSystemPSOID = FALSE; - RT_TRACE(COMP_TEST, DBG_LOUD, ("OID_RT_CUSTOMER_WOW_S5_SUPPORT disenable S5\n")); - } - - } - break; - - } - - return Status; -} - -// This is to offload the N6CSetInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CSetInformationHandleCustomizedSecurityOids( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - case OID_802_11_ADD_KEY: - case OID_RT_802_11_ADD_KEY: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_ADD_KEY Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - { - PNDIS_802_11_KEY key = (PNDIS_802_11_KEY)InformationBuffer; - RT_ENC_ALG EncAlgorithm; - BOOLEAN IsGroup = FALSE; - BOOLEAN IsGroupTransmitKey = FALSE; - pu1Byte pKeyRSC = (pu1Byte)&key->KeyRSC; - - RT_TRACE(COMP_OID_SET, DBG_LOUD,("===> Set OID_802_11_ADD_KEY, key->Length=%d\n", key->Length )); - RT_PRINT_DATA(COMP_OID_SET, DBG_TRACE, "OID_802_11_ADD_KEY InformationBuffer", InformationBuffer, key->Length ); - - // For WPA Verify. - if(key->KeyIndex == 0xc0000001) - { - RT_TRACE(COMP_SEC, DBG_LOUD,("[Note] KeyIndex is 0xc0000001\n")); - - pNdisCommon->RegWepEncStatus = pNdisCommon->WepEncStatusBeforeWpaVerify; - pNdisCommon->RegEncAlgorithm = pNdisCommon->EncAlgorithmBeforeWpaVerify; - pNdisCommon->RegAuthentAlg = pNdisCommon->AuthentAlgBeforeWpaVerify; - - N6RestoreLastInitSetting(pAdapter); - } - - if(key->KeyIndex & 0x40000000) - { // Pairwise key - RT_TRACE(COMP_SEC, DBG_LOUD,("OID_802_11_ADD_KEY: +++++ Pairwise key +++++\n")); - - if( !(key->KeyIndex & 0x80000000)) - { //2004/08/03, kcwu, refer to MS design note - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: !(key->KeyIndex & 0x80000000)\n")); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - if(key->KeyIndex & 0x0fffffff) - { - //kcwu: - //WinXP Design Note: The key index is specified in the lower 8 bits by values of zero to 255. - //The key index should be set to zero for a Pairwise key, and the driver should fail with - //NDIS_STATUS_INVALID_DATA if the lower 8 bits is not zero - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: key->KeyIndex & 0x0fffffff\n")); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - if(MacAddr_isBcst(key->BSSID)) - { - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: MacAddr_isBcst(key->BSSID)\n")); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - // Check key length for TKIP. - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_TKIP && key->KeyLength != 32) - { - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: TKIP KeyLength:%d != 32\n", key->KeyLength)); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - // Check key length for AES. - if(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_AESCCMP && key->KeyLength != 16) - { - // For our supplicant, EAPPkt9x.vxd, cannot differentiate TKIP and AES case. - // 2005.10.17, by rcnjko. - if(key->KeyLength == 32) - { - key->KeyLength = 16; - } - else - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - } - - // Check key length for WEP. For NDTEST, 2005.01.27, by rcnjko. - if( - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 && key->KeyLength != 5) || - (pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104 && key->KeyLength != 13) - ) - { - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: WEP KeyLength:%d != 5 or 13\n", key->KeyLength)); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - EncAlgorithm = pMgntInfo->SecurityInfo.PairwiseEncAlgorithm; - IsGroup = FALSE; - - // Check the pairwise key. Added by Annie, 2005-07-06. - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("[Pairwise Key set]\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("key index: 0x%x\n", key->KeyIndex) ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("key Length: 0x%x\n", key->KeyLength) ); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "Key Material:", key->KeyMaterial, key->KeyLength ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - } - } - else - { // Group key - RT_TRACE(COMP_SEC, DBG_LOUD,("OID_802_11_ADD_KEY: +++++ Group key +++++\n")); - - if(pMgntInfo->mIbss && !MacAddr_isBcst(key->BSSID)) - { - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: pMgntInfo.mIbss && !MacAddr_isBcst(key->BSSID)\n")); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - // Check key length for TKIP - if(pMgntInfo->SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_TKIP && key->KeyLength != 32) - { - if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_NONE ) - { - // [Note] OID oder of Window Zero-Config for WEP setting is as follows, - // Step 0. 0xc0000001 and RestoreLastInitSetting(). - // Step 1. OID_802_11_INFRASTRUCTURE_MODE - // Step 2. OID_802_11_AUTHENTICATION_MODE - // Step 3. OID_802_11_ADD_KEY - // Step 4. OID_802_11_ENCRYPTION_STATUS - // Step 5. OID_802_11_SSID - // - // If we are connecting to WPA or WPA2 AP by UI, - // and then use WZC to connect to a WEP AP, - // we'll add key with AuthMode Open and EncryptionStatus TKIP/AES at step 3. - // We should not reject the WEP key with length 5 or 13 in this case. - // - // - Added by Annie, 2006-05-10. - - - RT_TRACE( COMP_SEC, DBG_LOUD, ("OID_802_11_ADD_KEY[Group]: Not to Check key length 32 for TKIP because we'e in RT_SEC_LVL_NONE.\n") ); - } - else - { - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: TKIP GTK KeyLength:%d != 32\n", key->KeyLength)); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - } - - // Check key length for AES - // For NDTEST, we allow keylen=32 in this case. 2005.01.27, by rcnjko. - else if(pMgntInfo->SecurityInfo.GroupEncAlgorithm == RT_ENC_ALG_AESCCMP && - (key->KeyLength != 16 && key->KeyLength != 32) ) - { - if( pMgntInfo->SecurityInfo.SecLvl == RT_SEC_LVL_NONE ) - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("OID_802_11_ADD_KEY[Group]: Not to Check key length 16 or 32 for AES because we'e in RT_SEC_LVL_NONE.\n") ); - } - else - { - RT_TRACE(COMP_SEC, DBG_LOUD,("<=== SetInfo, OID_802_11_ADD_KEY: AES GTK KeyLength:%d != 16 or 32\n", key->KeyLength)); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - } - - if(key->KeyIndex & 0x8000000) - { - IsGroupTransmitKey = TRUE; - } - - if(pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC) - { - IsGroupTransmitKey = TRUE; - } - - EncAlgorithm = pMgntInfo->SecurityInfo.GroupEncAlgorithm; - IsGroup = TRUE; - - // Added for WPA2-PSK. added by Annie, 2005-09-23. - // Moved by Bruce to pass PMK of WMM WPA2 test, by Bruce, 2007-11-07. - PlatformRequestPreAuthentication( pAdapter, PRE_AUTH_INDICATION_REASON_ASSOCIATION ); - - // Check the group key. Added by Annie, 2005-07-06. - { - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("[Group Key set]\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("key index: 0x%x\n", key->KeyIndex) ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("key Length: 0x%x\n", key->KeyLength) ); - RT_PRINT_DATA( COMP_SEC, DBG_LOUD, "Key Material:", key->KeyMaterial, key->KeyLength ); - RT_TRACE( COMP_SEC, DBG_LOUD, ("------------------------------------------\n") ); - } - } - - if(!MgntActSet_802_11_ADD_KEY( - pAdapter, - EncAlgorithm, - key->KeyIndex, - key->KeyLength, - key->KeyMaterial, - key->BSSID, - IsGroupTransmitKey, - IsGroup, - key->KeyRSC)) - { - Status = NDIS_STATUS_INVALID_DATA; - } - - return Status; - } - break; - - case OID_802_11_ADD_WEP: - case OID_RT_802_11_ADD_WEP: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_ADD_WEP Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - { - NDIS_802_11_WEP *key; - RT_ENC_ALG EncAlgorithm; - u4Byte KeyIndex; - u4Byte KeyLength; - BOOLEAN IsDefaultKey; - pu1Byte KeyMaterial; - BOOLEAN IsDefaultKeyId; - - RT_TRACE(COMP_SEC, DBG_LOUD, ("Set OID_802_11_ADD_WEP\n")); - - key = (NDIS_802_11_WEP *)InformationBuffer; - KeyIndex = key->KeyIndex; - KeyLength = key->KeyLength; - KeyMaterial = key->KeyMaterial; - //PlatformZeroMemory(KeyMaterial+KeyLength, 32-KeyLength); - IsDefaultKey = ( KeyIndex & 0x80000000 ) ? TRUE : FALSE; - KeyIndex &= 0x7fffffff; - - RT_TRACE( COMP_SEC, DBG_TRACE, ("\tKeyIndex = %d\n", KeyIndex) ); - RT_TRACE( COMP_SEC, DBG_TRACE, ("\tKeyLength = %d\n", KeyLength) ); - RT_TRACE( COMP_SEC, DBG_TRACE, ("\tKeyMaterial = %13s\n", KeyMaterial) ); - RT_TRACE( COMP_SEC, DBG_TRACE, ("\tIsDefaultKey = %d\n", IsDefaultKey) ); - - if( (KeyLength == 5) && (KeyIndex < 4) ) - { - EncAlgorithm = RT_ENC_ALG_WEP40; - // For WPA Verify. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP64; - PlatformMoveMemory((PVOID)&(pNdisCommon->RegDefaultKeyBuf[KeyIndex]), (PVOID)KeyMaterial, KeyLength); - } - else if( (KeyLength == 13) && (KeyIndex < 4) ) - { - EncAlgorithm = RT_ENC_ALG_WEP104; - // For WPA Verify. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP128; - PlatformMoveMemory((PVOID)&(pNdisCommon->RegDefaultKeyWBuf[KeyIndex]), (PVOID)KeyMaterial, KeyLength); - } - else - { - Status = NDIS_STATUS_INVALID_DATA; - RT_TRACE( COMP_SEC, DBG_LOUD, ("[WARNING!!!] OID_802_11_ADD_WEP: return NDIS_STATUS_INVALID_DATA!! KeyIndex=%d, KeyLength=%d\n", KeyIndex, KeyLength) ); - return Status; - } - - IsDefaultKeyId =( IsDefaultKey && (KeyIndex < 4) ) ? TRUE : FALSE; - MgntActSet_802_11_ADD_WEP( - pAdapter, - EncAlgorithm, - KeyIndex, - KeyLength, - KeyMaterial, - IsDefaultKeyId - ); - - *BytesRead = InformationBufferLength; - } - break; - - case OID_802_11_REMOVE_WEP: - case OID_RT_802_11_REMOVE_WEP: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_REMOVE_WEP Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - { - RT_ENC_ALG EncAlgorithm; - u4Byte *KeyIndex; - u4Byte KeyLength; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_REMOVE_WEP\n")); - - KeyIndex = (u4Byte *)InformationBuffer; - (*KeyIndex) &= 0x3fffffff; // clear default ket bit - EncAlgorithm = pMgntInfo->SecurityInfo.PairwiseEncAlgorithm; - KeyLength = ( EncAlgorithm == RT_ENC_ALG_WEP40 ) ? 5 : 13; - - MgntActSet_802_11_REMOVE_WEP( - pAdapter, - EncAlgorithm, - *KeyIndex, - KeyLength - ); - - *BytesRead = sizeof(u4Byte); - } - break; - - case OID_802_11_REMOVE_KEY: - case OID_RT_802_11_REMOVE_KEY: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_REMOVE_KEY Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - { - PNDIS_802_11_REMOVE_KEY key = (PNDIS_802_11_REMOVE_KEY)InformationBuffer; - BOOLEAN IsGroup = (key->KeyIndex & 0x4000000)?FALSE:TRUE; - RT_ENC_ALG EncAlgorithm = (IsGroup)?pMgntInfo->SecurityInfo.GroupEncAlgorithm:pMgntInfo->SecurityInfo.PairwiseEncAlgorithm; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_REMOVE_KEY\n")); - - - //if(key->KeyIndex & 0xbfffff00){ - // Lower 8 bits => 0~255 - // BIT30 => 1: Pairwise - // 0: Group - // Other bits => 0 - - if(key->KeyIndex & 0xbffffffc) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - MgntActSet_802_11_REMOVE_KEY( - pAdapter, - EncAlgorithm, - key->KeyIndex, - key->BSSID, - IsGroup); - } - break; - - //case OID_802_11_WEP_STATUS: - case OID_802_11_ENCRYPTION_STATUS: - case OID_RT_802_11_ENCRYPTION_STATUS: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_ENCRYPTION_STATUS Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(NDIS_802_11_WEP_STATUS)) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_802_11_WEP_STATUS); - break; - } - - // NDIS_802_11_ENCRYPTION_STATUS should be the same as RT_802_11_ENCRYPTION_STATUS - // which is defined by KcWu. 2004.09.23, by rcnjko. - pMgntInfo->SecurityInfo.EncryptionStatus = *(RT_802_11_ENCRYPTION_STATUS*)InformationBuffer; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_ENCRYPTION_STATUS: %d\n", *(PNDIS_802_11_ENCRYPTION_STATUS)InformationBuffer)); - - // For WPA Verify. - pNdisCommon->WepEncStatusBeforeWpaVerify = pNdisCommon->RegWepEncStatus; - pNdisCommon->EncAlgorithmBeforeWpaVerify = pNdisCommon->RegEncAlgorithm; - - // For CKIP which can only use software encryption/decryption. Added by Annie, 2006-08-14. - if( IsCkipEnabled(pMgntInfo) ) - { // CKIP case. - SecSetSwEncryptionDecryption(pAdapter, TRUE, TRUE); - } - else - { // WEP or other case. - SecSetSwEncryptionDecryption(pAdapter, FALSE, FALSE); - } - // - - switch(*(PNDIS_802_11_ENCRYPTION_STATUS)InformationBuffer) - { - case Ndis802_11EncryptionDisabled: - RT_TRACE(COMP_SEC, DBG_LOUD, ("\tNdis802_11EncryptionDisabled\n")); - //MgntActSet_802_11_REMOVE_WEP( Adapter, RT_ENC_ALG_NO_CIPHER, 0); - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - pMgntInfo->SecurityInfo.GroupEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - pMgntInfo->SecurityInfo.UseDefaultKey = FALSE; - pMgntInfo->SecurityInfo.EncryptionHeadOverhead = 0; - pMgntInfo->SecurityInfo.EncryptionTailOverhead = 0; - // For WPA Verify. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_NO_WEP; - pNdisCommon->RegEncAlgorithm = REG_NONE_Encryption; - break; - - case Ndis802_11Encryption1Enabled: - //TODO: Enable WEP - RT_TRACE(COMP_SEC, DBG_LOUD, ("\tNdis802_11Encryption1Enabled\n")); - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_WEP40; - pMgntInfo->SecurityInfo.GroupEncAlgorithm = RT_ENC_ALG_WEP40; - pMgntInfo->SecurityInfo.UseDefaultKey = TRUE; - pMgntInfo->SecurityInfo.EncryptionHeadOverhead = WEP_IV_LEN; - pMgntInfo->SecurityInfo.EncryptionTailOverhead = WEP_ICV_LEN; - // For WPA Verify. - // WEP64 or WEP128 should be determined in OID_802_11_ADD_WEP later. - // 2004.11.24, by rcnjko. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_WEP64; - pNdisCommon->RegEncAlgorithm = REG_WEP_Encryption; - - break; - - case Ndis802_11Encryption2Enabled: - //TODO: Enable WPA - RT_TRACE(COMP_SEC, DBG_LOUD, ("\tNdis802_11Encryption2Enabled\n")); - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_TKIP; - pMgntInfo->SecurityInfo.GroupEncAlgorithm = RT_ENC_ALG_TKIP; - //2004/08/13, kcwu, I think it should be correct - pMgntInfo->SecurityInfo.UseDefaultKey = (pMgntInfo->Regdot11networktype==RT_JOIN_NETWORKTYPE_ADHOC && !(ACTING_AS_AP(pAdapter) ))?TRUE:FALSE; - pMgntInfo->SecurityInfo.EncryptionHeadOverhead = EXT_IV_LEN; - //2004/06/25, kcwu_comment, The EncryptionTailOverhead only includes WEP IV, and doesn't include TKIP MIC - pMgntInfo->SecurityInfo.EncryptionTailOverhead = WEP_ICV_LEN; - // For WPA Verify. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_NO_WEP; - pNdisCommon->RegEncAlgorithm = REG_TKIPv2_Encryption; - // Emily. - // [AnnieWorkaround] Default value changed from CAM_AES to CAM_TKIP by Annie for solving WPA-none problem. - // In Ad-Hoc mode, use encryption TKIP (authmode=WPA-None). - // If upper layer is windows zero-config, OID_802_11_ADD_KEY is called before OID_802_11_ENCRYPTION_STATUS. - // In this case, we'll first execute RestoreLastInitSetting() in OID_802_11_ADD_KEY and EncAlgo will be RT_ENC_ALG_NO_CIPHER. - // At least, If we go into this case, we set default EncAlgo as CAM_TKIP to config correct CAM. - // - Annie, 2005-08-16. - if( (pNdisCommon->EncAlgorithmBeforeWpaVerify!=REG_WAPI_PSK) || FALSE == WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - {//Temply add to solve UI Switch problem which cause wapi msk tx key invalid zhiyuan 2009/12/22 - - if(pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC && !(ACTING_AS_AP(pAdapter) )) - { - u1Byte CAM_CONST_BROAD[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - pAdapter->HalFunc.SetKeyHandler(pAdapter, - 0, //KeyIndex, - CAM_CONST_BROAD, - TRUE, //IsGroup, - RT_ENC_ALG_TKIP, - FALSE, - FALSE); - } - } - - break; - - case Ndis802_11Encryption3Enabled: -#if 1 // Opened for AES, by Annie, 2005-09-14. - RT_TRACE(COMP_SEC, DBG_LOUD, ("\tNdis802_11Encryption3Enabled\n")); - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_AESCCMP; - pMgntInfo->SecurityInfo.GroupEncAlgorithm = RT_ENC_ALG_AESCCMP; - pMgntInfo->SecurityInfo.AESCCMPMicLen = 8; - //2004/09/22, kcwu - pMgntInfo->SecurityInfo.UseDefaultKey = (pMgntInfo->Regdot11networktype==RT_JOIN_NETWORKTYPE_ADHOC&& !(ACTING_AS_AP(pAdapter) ))?TRUE:FALSE; - pMgntInfo->SecurityInfo.EncryptionHeadOverhead = EXT_IV_LEN; - pMgntInfo->SecurityInfo.EncryptionTailOverhead = AES_MIC_LEN; - // For WPA Verify. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_NO_WEP; - pNdisCommon->RegEncAlgorithm = REG_AESCCMP_Encryption; -#else - // For HCT 12.1 test if we have not yet implemented AES, 2005.07.11, by rcnjko. - Status = NDIS_STATUS_NOT_SUPPORTED; - return Status; -#endif - // Emily. - // [AnnieWorkaround] Default value changed from CAM_AES to CAM_TKIP by Annie for solving WPA-none problem. - // In Ad-Hoc mode, use encryption TKIP (authmode=WPA-None). - // If upper layer is windows zero-config, OID_802_11_ADD_KEY is called before OID_802_11_ENCRYPTION_STATUS. - // In this case, we'll first execute RestoreLastInitSetting() in OID_802_11_ADD_KEY and EncAlgo will be RT_ENC_ALG_NO_CIPHER. - // At least, If we go into this case, we set default EncAlgo as CAM_TKIP to config correct CAM. - // - Annie, 2005-08-16. - if( (pNdisCommon->EncAlgorithmBeforeWpaVerify!=REG_WAPI_PSK) || FALSE == WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - {//Temply add to solve UI Switch problem which cause wapi msk tx key invalid zhiyuan 2009/12/22 - if(pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC && !(ACTING_AS_AP(pAdapter) )) - { - u1Byte CAM_CONST_BROAD[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - pAdapter->HalFunc.SetKeyHandler(pAdapter, - 0, //KeyIndex, - CAM_CONST_BROAD, - TRUE, //IsGroup, - RT_ENC_ALG_AESCCMP, - FALSE, - FALSE); - } - } - break; - - case Wapi_Encryption: - case Wapi_Certificate: - WAPI_SecFuncHandler(WAPI_SETAUTHENCRYPTSTATE,pAdapter,(PVOID)&Oid,InformationBuffer); - break; - - default: - RT_TRACE(COMP_SEC, DBG_LOUD, ("\tdefault\n")); - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - pMgntInfo->SecurityInfo.GroupEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - pMgntInfo->SecurityInfo.UseDefaultKey = FALSE; - pMgntInfo->SecurityInfo.EncryptionHeadOverhead = 0; - pMgntInfo->SecurityInfo.EncryptionTailOverhead = 0; - // For WPA Verify. - pNdisCommon->RegWepEncStatus = REG_WEP_STATUS_NO_WEP; - pNdisCommon->RegEncAlgorithm = REG_NONE_Encryption; - break; - } - - // Switch HW encryption/decryption mode. - if( pAdapter->bInHctTest == 1 ) - { - pAdapter->HalFunc.DisableHWSecCfgHandler(pAdapter); - SecSetSwEncryptionDecryption( pAdapter , TRUE , TRUE ); - } - else - { - if( pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC && - MgntActQuery_ApType(pAdapter) == RT_AP_TYPE_NONE ) - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>Win7 we used SW in AD-HOT \n")); - SecSetSwEncryptionDecryption( pAdapter , TRUE , TRUE ); - } - else if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP104 || - pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>Win7 we used SW in WEP \n")); - SecSetSwEncryptionDecryption( pAdapter , TRUE , TRUE ); - } - else - { - RT_TRACE(COMP_SEC , DBG_LOUD , ("==>Win7 we used HW in default !! \n")); - SecSetSwEncryptionDecryption( pAdapter , FALSE , FALSE ); - } - - pAdapter->HalFunc.EnableHWSecCfgHandler(pAdapter); - } - - // Update mCap. - if( pMgntInfo->SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER ) - { - pMgntInfo->mCap |= cPrivacy; - } - else - { - pMgntInfo->mCap &= ~cPrivacy; - } - - if(pMgntInfo->Regdot11networktype == RT_JOIN_NETWORKTYPE_ADHOC - && pMgntInfo->SecurityInfo.AuthMode == RT_802_11AuthModeWPANone - && pMgntInfo->SecurityInfo.PairwiseEncAlgorithm == RT_ENC_ALG_WEP40) - { - - MgntIndicateMediaStatus( pAdapter, RT_MEDIA_DISCONNECT, GENERAL_INDICATE ); - break; - } - - // Update STA's RSNIE. - if( pMgntInfo->SecurityInfo.EncryptionStatus !=Wapi_Encryption && pMgntInfo->SecurityInfo.EncryptionStatus != Wapi_Certificate) - SecConstructRSNIE(pAdapter); - - *BytesRead = InformationBufferLength; - break; - - case OID_802_11_ASSOCIATION_INFORMATION: - case OID_RT_802_11_ASSOCIATION_INFORMATION: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_ASSOCIATION_INFORMATION Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - else - { - PRT_SECURITY_T pSecInfo = &(pMgntInfo->SecurityInfo); - PNDIS_802_11_ASSOCIATION_INFORMATION pAssocInfo = (PNDIS_802_11_ASSOCIATION_INFORMATION)InformationBuffer; - - if( pAssocInfo->RequestIELength != 0) - { - // do not copy field [Element id] and [Length] - PlatformMoveMemory( - pSecInfo->RSNIE.Octet, - (pu1Byte)InformationBuffer + pAssocInfo->OffsetRequestIEs + 2, - pAssocInfo->RequestIELength - 2); - pSecInfo->RSNIE.Length = (u1Byte)pAssocInfo->RequestIELength - 2; - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, "OID RSNIE Data:\n", pSecInfo->RSNIE.Octet, pSecInfo->RSNIE.Length); - } - } - *BytesRead = InformationBufferLength; - break; - - case OID_802_11_PMKID: - case OID_RT_802_11_PMKID: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_PMKID Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - else - { - MgntActSet_802_11_PMKID( pAdapter, (pu1Byte)InformationBuffer, InformationBufferLength ); - } - break; - - case OID_802_11_AUTHENTICATION_MODE: - case OID_RT_802_11_AUTHENTICATION_MODE: - RT_TRACE( COMP_OID_SET, DBG_WARNING, ("OID_802_11_AUTHENTICATION_MODE Setting (Warning: Old OID in NDIS5, do nothing)\n") ); - { - RT_AUTH_MODE authmode; - - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(NDIS_802_11_AUTHENTICATION_MODE )) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_802_11_AUTHENTICATION_MODE ); - return Status; - } - - authmode = *(RT_AUTH_MODE*)InformationBuffer; - - // For WPA Verify. - pNdisCommon->AuthentAlgBeforeWpaVerify = pNdisCommon->RegAuthentAlg; - pNdisCommon->RegAuthentAlg = (int)authmode; - - if((authmode != RT_802_11AuthModeWAPI) && (authmode != RT_802_11AuthModeCertificateWAPI)) - { - SecSetSwEncryptionDecryption(pAdapter,FALSE,FALSE); - } - - switch(authmode) - { - case RT_802_11AuthModeOpen: - case RT_802_11AuthModeShared: - pMgntInfo->SecurityInfo.SecLvl = RT_SEC_LVL_NONE; -// pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; -// SecClearAllKeys(pAdapter); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_AUTHENTICATION_MODE: %d (0:Open, 1:Shared-Key)\n", authmode )); - break; - - case RT_802_11AuthModeAutoSwitch: - // Do the same setting as Open and Shared. 2005.03.08, by rcnjko. - pMgntInfo->SecurityInfo.SecLvl = RT_SEC_LVL_NONE; -// pMgntInfo->SecurityInfo.PairwiseEncAlgorithm = RT_ENC_ALG_NO_CIPHER; -// SecClearAllKeys(pAdapter); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_AUTHENTICATION_MODE: Ndis802_11AuthModeAutoSwitch\n")); - break; - - case RT_802_11AuthModeWPA: - case RT_802_11AuthModeWPAPSK: - case RT_802_11AuthModeWPANone: - pMgntInfo->SecurityInfo.SecLvl = RT_SEC_LVL_WPA; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_AUTHENTICATION_MODE: %d: RT_SEC_LVL_WPA\n", authmode )); - break; - - case RT_802_11AuthModeWPA2: - case RT_802_11AuthModeWPA2PSK: - pMgntInfo->SecurityInfo.SecLvl = RT_SEC_LVL_WPA2; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_AUTHENTICATION_MODE: %d: RT_SEC_LVL_WPA2\n", authmode )); - break; - - case RT_802_11AuthModeWAPI: - case RT_802_11AuthModeCertificateWAPI: - WAPI_SecFuncHandler(WAPI_SETAUTHENCRYPTSTATE,pAdapter,(PVOID)&Oid,InformationBuffer); - break; - default: - Status = NDIS_STATUS_INVALID_DATA; - break; - } - - if(Status==NDIS_STATUS_SUCCESS) - MgntActSet_802_11_AUTHENTICATION_MODE( pAdapter, authmode ); - - if(authmode != RT_802_11AuthModeWAPI && authmode != RT_802_11AuthModeCertificateWAPI) - SecConstructRSNIE(pAdapter); - - *BytesRead = sizeof(NDIS_802_11_AUTHENTICATION_MODE ); - } - break; - - case OID_802_11_RELOAD_DEFAULTS: - case OID_RT_802_11_RELOAD_DEFAULTS: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_RELOAD_DEFAULTS: \n")); - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(NDIS_802_11_RELOAD_DEFAULTS)) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_802_11_RELOAD_DEFAULTS); - break; - } - else - { - RT_802_11_RELOAD_DEFAULTS NdisReloadDefault = *(PRT_802_11_RELOAD_DEFAULTS)InformationBuffer; - - RT_TRACE(COMP_OID_SET, DBG_LOUD,("OID_RELOAD_DEFAULT\n")); - - SecClearAllKeys(pAdapter); - - switch( NdisReloadDefault) - { - case RT802_11ReloadWEPKeys: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SetInfo, OID_802_11_RELOAD_DEFAULTS:Ndis802_11ReloadWEPKeys\n")); - break; - } - } - *BytesRead = sizeof(RT_802_11_RELOAD_DEFAULTS); - break; - - case OID_RT_SET_DEFAULT_KEY_ID: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SET_DEFAULT_KEY_ID.\n")); - { - u2Byte KeyId; - - // Verify input paramter. - if(InformationBufferLength < sizeof(KeyId)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(KeyId); - return Status; - } - - // Get default key id to set. - KeyId = *((u2Byte*)InformationBuffer); - - // Set default key id: 0 ~ 3. - KeyId &= 0x3; - // The following code will cause 8187 failed to link to AP. - pMgntInfo->SecurityInfo.DefaultTransmitKeyIdx = (u1Byte)KeyId; - pNdisCommon->RegDefaultKeyId = (u1Byte)KeyId; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SET_DEFAULT_KEY_ID.\n")); - break; - - - } - return Status; -} - -static NDIS_STATUS -N6CSetInformationHandleCustomizedNANOids( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { -#if (NAN_SUPPORT == 1) - case OID_RT_NAN_TEST: - { - - u4Byte cmd = 0; - u4Byte ID = 0, Port = 0, cmdid = 0, Para = 0; - RT_TRACE(COMP_NAN, DBG_LOUD, ("===> Set OID_RT_NAN_TEST CMD = 0x%X, len = %d\n", *((pu4Byte)InformationBuffer), InformationBufferLength)); - - if (InformationBufferLength == sizeof(u4Byte)) { - cmd = *((pu4Byte)InformationBuffer); - ID = cmd & 0xFF; - Port = (cmd & 0xFF00) >> 8; - cmdid = (cmd & 0xFF0000) >> 16; - Para = (cmd & 0xFF000000) >> 24; - - RT_TRACE(COMP_NAN, DBG_LOUD, ("===> ID=0x%X, Port=0x%X, cmdid=0x%X, Para=0x%X\n", ID,Port,cmdid,Para)); - - if (ID == 0x29) - NAN_DbgCtrlOperation(pAdapter, Port, cmdid, Para); - else if (ID == 0x30) - NAN_DbgCtrlState(pAdapter, Para); - else if (ID == 0x31) - NAN_DbgCtrlVariable(pAdapter, Port, cmdid, Para); - - } else { - return NDIS_STATUS_SUCCESS; - } - - RT_TRACE(COMP_NAN, DBG_LOUD, ("<=== Set OID_RT_NAN_TEST CMD = 0x%X\n", cmd)); - } - break; - - case OID_RT_NAN_SDF: - { - RT_TRACE(COMP_NAN, DBG_LOUD, ("===> Set OID_RT_NAN_SDF, len = %d\n", InformationBufferLength)); - { - PNAN_INFO pNanInfo = GET_NAN_INFO(pAdapter); - u2Byte idx, u2bPacketLength, u2bTxNumber; - u1Byte u1bTxRate; - OCTET_STRING ocPacketToSend; - NAN_SDF_CONTEXT FakeSDFCtx; - - if (InformationBufferLength < 4){ - u1Byte Dest[6] = {0x00, 0xE0, 0x4c, 0x81, 0x88, 0xbf}; - u1Byte Dest_b[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - u1Byte ServiceID[6] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; - u1Byte tmp = *((pu1Byte)InformationBuffer); - RT_TRACE(COMP_NAN, DBG_LOUD, ("Make a Fake SDF Frame to Test\n")); - - PlatformZeroMemory(&pNanInfo->SDFCtx.SDAttibute,sizeof(NAN_SD_ATTRIBUTE)); - PlatformZeroMemory(&pNanInfo->SDFCtx.ConfigPara,sizeof(NAN_SDF_CONFIG_PARA)); - - if (tmp != 0xff){ - Dest[5] = tmp; - PlatformMoveMemory(pNanInfo->SDFCtx.PeerAddr, Dest, 6); - } - else - PlatformMoveMemory(pNanInfo->SDFCtx.PeerAddr, Dest_b, 6); - - PlatformMoveMemory(pNanInfo->SDFCtx.SDAttibute.ServiceID, ServiceID, 6); - pNanInfo->SDFCtx.SDAttibute.InstanceID = 0x88; - pNanInfo->SDFCtx.ConfigPara.TimeToLive = 0xFFFFFFFF; - goto test_SDF; - } - - if( InformationBufferLength < 16 ) // 16 = 6(peer addr) + 9(SDA Mandatory) + 1(Configuration Parameters) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - u2bPacketLength = sizeof(InformationBuffer); - if( InformationBufferLength < (ULONG)(u2bPacketLength)-1) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = u2bPacketLength; - return Status; - } - - PlatformMoveMemory(pNanInfo->SDFCtx.PeerAddr, InformationBuffer, sizeof(u1Byte)*6); - PlatformMoveMemory(&pNanInfo->SDFCtx.SDAttibute,((u1Byte*)(InformationBuffer)+ sizeof(u1Byte)*6), sizeof(NAN_SD_ATTRIBUTE)); - PlatformMoveMemory(&pNanInfo->SDFCtx.ConfigPara,((u1Byte*)(InformationBuffer)+ sizeof(u1Byte)*6 + sizeof(NAN_SD_ATTRIBUTE)), sizeof(NAN_SDF_CONFIG_PARA)); -test_SDF: - - pNanInfo->SDFCtx.bIsContentUpdated = TRUE; - //pNanInfo->SDFCtx.bIsContentUpdatedUnicast = TRUE; -#if (WPP_SOFTWARE_TRACE == 0) - RT_PRINT_ADDR(COMP_NAN, DBG_LOUD, "OID_RT_NAN_SDF: Addr = ", pNanInfo->SDFCtx.PeerAddr); - RT_PRINT_DATA(COMP_NAN, DBG_LOUD, ("ServiceID = "), pNanInfo->SDFCtx.SDAttibute.ServiceID, 6); - RT_TRACE(COMP_NAN, DBG_LOUD, ("InstanceID = %d, ReqID = %d, ServiceCtrl = 0x%02X\n", pNanInfo->SDFCtx.SDAttibute.InstanceID, pNanInfo->SDFCtx.SDAttibute.RequestorID, pNanInfo->SDFCtx.SDAttibute.ServiceControl)); -#endif - if(pNanInfo->SDFCtx.SDAttibute.MatchingFilterLength > 0) - { - for(idx = 0; idx < MAX_M_FILTER_PAIR_NUM; idx ++) - { - if(pNanInfo->SDFCtx.SDAttibute.MatchingFilter[idx].Length > 0) - { - RT_TRACE(COMP_NAN, DBG_LOUD, ("Matching Filter[%d]: Len = %d", idx, pNanInfo->SDFCtx.SDAttibute.MatchingFilter[idx].Length)); - RT_PRINT_DATA(COMP_NAN, DBG_LOUD, ("Content = \n"), pNanInfo->SDFCtx.SDAttibute.MatchingFilter[idx].FilterValue, pNanInfo->SDFCtx.SDAttibute.MatchingFilter[idx].Length); - } - } - } - RT_TRACE(COMP_NAN, DBG_LOUD, ("DiscoveryRange = 0x%08X, TimeToLive = %d\n" - "SubscribeType = %d, QueryPeriod = %d\n" - "PublishType = %d, SolicitedTransmitType = %d, AnnouncementPeriod = %d\n" - "TransmissionPriority = %d\n, SDFDelay = %d\n", - pNanInfo->SDFCtx.ConfigPara.DiscoveryRange, pNanInfo->SDFCtx.ConfigPara.TimeToLive, - pNanInfo->SDFCtx.ConfigPara.SubscribeType, pNanInfo->SDFCtx.ConfigPara.QueryPeriod, - pNanInfo->SDFCtx.ConfigPara.PublishType, pNanInfo->SDFCtx.ConfigPara.SolicitedTransmitType, pNanInfo->SDFCtx.ConfigPara.AnnouncementPeriod, - pNanInfo->SDFCtx.ConfigPara.TransmissionPriority, pNanInfo->SDFCtx.ConfigPara.SDFDelay)); - RT_PRINT_ADDR(COMP_NAN, DBG_LOUD, "Dest Addr = ", pNanInfo->SDFCtx.ConfigPara.DestAddr); - - RT_TRACE(COMP_NAN, DBG_LOUD, ("bIsTimeToSend = %d\n", pNanInfo->SDFCtx.bIsTimeToSend)); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SEND_SPECIFIC_PACKET.\n")); - } - break; - - case OID_RT_NAN_INIT_TSF: - { - Status = NdisStatusFromRtStatus(NAN_UpdateDefaultSetting(pAdapter, NAN_REG_INIT_TSF, InformationBuffer, InformationBufferLength)); - } - break; - - case OID_RT_NAN_BEACON_SEND_TYPE: - { - Status = NdisStatusFromRtStatus(NAN_UpdateDefaultSetting(pAdapter, NAN_REG_BEACON_SEND_CAP, InformationBuffer, InformationBufferLength)); - } - break; - - case OID_RT_NAN_OPER_CHNL_2G: - { - Status = NdisStatusFromRtStatus(NAN_UpdateDefaultSetting(pAdapter, NAN_REG_OPER_CHNL_2G, InformationBuffer, InformationBufferLength)); - } - break; - - case OID_RT_NAN_OPER_CHNL_5G: - { - Status = NdisStatusFromRtStatus(NAN_UpdateDefaultSetting(pAdapter, NAN_REG_OPER_CHNL_5G, InformationBuffer, InformationBufferLength)); - } - break; - - case OID_RT_NAN_FURTHER_AVAILABILITY_TX: - { - PNAN_INFO pNanInfo = GET_NAN_INFO(pAdapter); - Status = NDIS_STATUS_SUCCESS; - - if(sizeof(u1Byte) != InformationBufferLength) - { - Status = NDIS_STATUS_INVALID_LENGTH; - RT_TRACE_F(COMP_NAN,DBG_LOUD,("Require Length(%d) != InformationBufferLength(%d)\n",sizeof(u1Byte),InformationBufferLength)); - break; - } - - if(!pNanInfo->bAppendFurtherAvailability) - { //NAN_TO_DO_YP - //if concurrent, not support further availability - pNanInfo->bAppendFurtherAvailability = TRUE; - } - } - break; - - case OID_RT_NAN_FURTHER_AVAILABILITY_RX: - { - PNAN_INFO pNanInfo = GET_NAN_INFO(pAdapter); - Status = NDIS_STATUS_SUCCESS; - - if(sizeof(u1Byte) != InformationBufferLength) - { - Status = NDIS_STATUS_INVALID_LENGTH; - RT_TRACE_F(COMP_NAN,DBG_LOUD,("Require Length(%d) != InformationBufferLength(%d)\n",sizeof(u1Byte),InformationBufferLength)); - break; - } - - if(!pNanInfo->bTestbedAvailabilityTest) - { - //NAN_TO_DO_YP - //if concurrent, not support further availability - pNanInfo->bTestbedAvailabilityTest = TRUE; - } - } - break; - case OID_RT_NAN_GET_AVAILABILITY_INFO: - { - - Status = NdisStatusFromRtStatus(NAN_GetAvailabilityInfo(pAdapter, InformationBuffer, InformationBufferLength)); - } - break; - - case OID_RT_NAN_BEACON_AGE_TIMEOUT: - { - Status = NdisStatusFromRtStatus(NAN_UpdateDefaultSetting(pAdapter, NAN_REG_BEACON_AGE_TIMEOUT, InformationBuffer, InformationBufferLength)); - } - break; -#endif - - default: - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - } - return Status; -} - -// This is to offload the N6CSetInformation() since the huge size of the funcion stack causes the BSOD when DbgPrint. -static NDIS_STATUS -N6CSetInformationHandleCustomizedOids( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PADAPTER pExtAdapter = GetFirstExtAdapter(pAdapter); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - -// FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - case OID_802_11_BSSID: - case OID_RT_802_11_BSSID: - if(InformationBufferLength < 6) - { - *BytesNeeded = 6; - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - else - { - MgntActSet_802_11_BSSID( pAdapter, (pu1Byte)InformationBuffer ); - *BytesRead = 6; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_BSSID: \n")); - break; - - case OID_802_11_SSID: - case OID_RT_802_11_SSID: - { - PNDIS_802_11_SSID ssid; - - if( (InformationBuffer == 0) || (InformationBufferLength == 0) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - //2004/08/05, kcwu, for NDTEST 1c_wlan_bssidlist - //Driver must set NDIS_802_11_BSSID_LIST_EX->NumberOfItems to 0 - //when a scan is performed while the radio is off - //Notice: It should be set to FALSE in OID_802_11_INFRASTRUCTURE_MODE, - // But we make it change here - pNdisCommon->KeepDisconnectFlag = FALSE; - //== - - ssid = (PNDIS_802_11_SSID)InformationBuffer; - if( ssid->SsidLength > 32 ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - -#if RTL819X_NO_SCAN_AFTER_LINK - if(!pMgntInfo->bMediaConnect){ - RT_TRACE(COMP_SEND, DBG_LOUD, ("==m==>Scan <==m==\n")); - MgntActSet_802_11_SSID( pAdapter, ssid->Ssid, (u2Byte)ssid->SsidLength, TRUE ); - } -#else - MgntActSet_802_11_SSID( pAdapter, ssid->Ssid, (u2Byte)ssid->SsidLength, TRUE ); -#endif - - RT_PRINT_STR( COMP_OID_SET, DBG_LOUD, "Set OID_802_11_SSID", ssid->Ssid, ssid->SsidLength ); - RT_PRINT_STR( COMP_QOS, DBG_LOUD, "Set OID_802_11_SSID", ssid->Ssid, ssid->SsidLength ); - } - break; - - case OID_802_11_NETWORK_TYPE_IN_USE: - case OID_RT_802_11_NETWORK_TYPE_IN_USE: - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG); - return Status; - } - - //HCT12.0 NDTest - if( (*(PULONG)InformationBuffer == Ndis802_11OFDM24) || - (*(PULONG)InformationBuffer == Ndis802_11OFDM5) || - (*(PULONG)InformationBuffer == Ndis802_11DS) ) - { - pNdisCommon->BeSetNetworkTypeByNDTest = (NDIS_802_11_NETWORK_TYPE)(*(PULONG)InformationBuffer); - } - else - { - pNdisCommon->BeSetNetworkTypeByNDTest = (NDIS_802_11_NETWORK_TYPE)0; - Status = NDIS_STATUS_INVALID_DATA; - } - - *BytesRead = 4; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_NETWORK_TYPE_IN_USE: \n")); - break; - - case OID_802_11_TX_POWER_LEVEL: - case OID_RT_802_11_TX_POWER_LEVEL: - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - // MgntActSet_802_11_TX_POWER_LEVEL() does not set tx power in mW. - MgntActSet_802_11_TX_POWER_LEVEL( pAdapter, (*(pu4Byte)InformationBuffer) ); - *BytesRead = 4; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_TX_POWER_LEVEL: \n")); - break; - - case OID_RT_TX_POWER_LEVEL: - { - s4Byte powerLevel =0; - if( InformationBufferLength < sizeof(s4Byte) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(s4Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_TX_POWER_LEVEL: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - powerLevel = *((s4Byte*)InformationBuffer); - pNdisCommon->RegTxPowerLevel = powerLevel; - pMgntInfo->TxPowerLevel = pNdisCommon->RegTxPowerLevel; - MgntActSet_TX_POWER_LEVEL(pAdapter, powerLevel); - } - break; - - case OID_RT_TX_POWER: - { - s4Byte powerInDbm; - - if( InformationBufferLength < sizeof(s4Byte) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(s4Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_TX_POWER: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - - } - - powerInDbm = *((s4Byte*)InformationBuffer); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_TX_POWER: %d dBm\n", powerInDbm)); - // Save the user's power. - pMgntInfo->ClientConfigPwrInDbm = powerInDbm; - MgntActSet_TX_POWER_DBM(pAdapter, powerInDbm); - - *BytesRead = InformationBufferLength; - } - break; - - case OID_802_11_RSSI_TRIGGER: - case OID_RT_802_11_RSSI_TRIGGER: - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - pNdisCommon->NdisRssiTrigger = *((ULONG*)InformationBuffer); - *BytesRead = 4; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_RSSI_TRIGGER\n")); - break; - - case OID_802_11_INFRASTRUCTURE_MODE: - case OID_RT_802_11_INFRASTRUCTURE_MODE: - { - RT_JOIN_NETWORKTYPE networktype = RT_JOIN_NETWORKTYPE_AUTO; - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE )) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE); - return Status; - } - - switch( *(PNDIS_802_11_NETWORK_INFRASTRUCTURE)InformationBuffer ) - { - case Ndis802_11IBSS: - networktype = RT_JOIN_NETWORKTYPE_ADHOC; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_INFRASTRUCTURE_MODE: RT_JOIN_NETWORKTYPE_ADHOC\n")); - break; - case Ndis802_11Infrastructure: - networktype = RT_JOIN_NETWORKTYPE_INFRA; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_INFRASTRUCTURE_MODE: RT_JOIN_NETWORKTYPE_INFRA\n")); - break; - case Ndis802_11AutoUnknown: - networktype = RT_JOIN_NETWORKTYPE_AUTO; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_INFRASTRUCTURE_MODE: RT_JOIN_NETWORKTYPE_AUTO\n")); - break;// auto mode - default: - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Set OID_802_11_INFRASTRUCTURE_MODE: unknown type: 0x%X\n", *(PNDIS_802_11_NETWORK_INFRASTRUCTURE)InformationBuffer)); - break; - } - - if(ACTING_AS_AP(pAdapter) ) - { // 070125, rcnjko. - pMgntInfo->Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - return NDIS_STATUS_SUCCESS; - } - - MgntActSet_802_11_INFRASTRUCTURE_MODE( pAdapter, networktype ); - *BytesRead = sizeof(NDIS_802_11_NETWORK_INFRASTRUCTURE); - } - break; - - case OID_802_11_FRAGMENTATION_THRESHOLD: - case OID_RT_802_11_FRAGMENTATION_THRESHOLD: - // 2004.06.01, by rcnjko. - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - MgntActSet_802_11_FRAGMENTATION_THRESHOLD( pAdapter, *((pu2Byte)InformationBuffer) ); - *BytesRead = sizeof(ULONG); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_FRAGMENTATION_THRESHOLD: \n")); - break; - - case OID_802_11_RTS_THRESHOLD: - case OID_RT_802_11_RTS_THRESHOLD: - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - MgntActSet_802_11_RTS_THRESHOLD( pAdapter, *(pu2Byte)InformationBuffer ); - *BytesRead = sizeof(ULONG); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_RTS_THRESHOLD: \n")); - break; - - - case OID_802_11_DESIRED_RATES: - case OID_RT_802_11_DESIRED_RATES: -#if 0 - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - goto set_oid_exit; - } - - if(1){ - u2Byte ratelen = (u2Byte)InformationBufferLength; - - ratelen = (ratelen<8) ? ratelen : 8; - //ShuChen TODO: save desired rate - //NdisMoveMemory(&Adapter->NdisDesiredRate[0], InformationBuffer, ratelen); - *BytesRead = ratelen; - } -// OID_USED_ChangeDataRate(Adapter); -#endif - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_DESIRED_RATES: \n")); - break; - - case OID_802_11_CONFIGURATION: - case OID_RT_802_11_CONFIGURATION: - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(NDIS_802_11_CONFIGURATION)) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_802_11_CONFIGURATION); - return Status; - } - else - { - NDIS_802_11_CONFIGURATION *pConfigToSet; - u1Byte ChnlNum; - - pConfigToSet = (NDIS_802_11_CONFIGURATION *)InformationBuffer; - *BytesRead = sizeof(NDIS_802_11_CONFIGURATION); - - // Translate from kHz to channel number. - ChnlNum = CHNL_IsLegalChannel(pAdapter, pConfigToSet->DSConfig); - if(ChnlNum > 0) - { - MgntActSet_802_11_CONFIGURATION( - pAdapter, - (u2Byte)((pNdisCommon->RegBeaconPeriod != 0) ? pMgntInfo->Regdot11BeaconPeriod : (u2Byte)pConfigToSet->BeaconPeriod), // Do not change beacon interval if user had specified beacon interval for debug purpose. 2005.04.18, by rcnjko. - (u1Byte)ChnlNum); - } - else - { - RT_ASSERT(FALSE, ("Set OID_802_11_CONFIGURATION: invalid frequency: %d\n", pConfigToSet->DSConfig)); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_CONFIGURATION: \n")); - } - break; - - case OID_802_11_DISASSOCIATE: - case OID_RT_802_11_DISASSOCIATE: - MgntActSet_802_11_DISASSOCIATE( pAdapter, disas_lv_ss ); - if(pAdapter->bInHctTest) - { - //2004/08/23, kcwu - pNdisCommon->KeepDisconnectFlag = TRUE; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_DISASSOCIATE: \n")); - break; - - case OID_802_11_POWER_MODE: - case OID_RT_802_11_POWER_MODE: - { - NDIS_802_11_POWER_MODE ndisPsModeToSet; - RT_PS_MODE rtPsModeToSet; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - if( (InformationBuffer == NULL) || - (InformationBufferLength < sizeof(NDIS_802_11_POWER_MODE)) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_802_11_POWER_MODE ); - return Status; - } - - ndisPsModeToSet = *((NDIS_802_11_POWER_MODE*)InformationBuffer); - rtPsModeToSet = (RT_PS_MODE)TranslateNdisPsToRtPs(ndisPsModeToSet); - - if(InformationBufferLength >= sizeof(NDIS_802_11_POWER_MODE) + 4) - { - pMgntInfo->PsPollType = *((pu1Byte)InformationBuffer + 4); - } - - if(pNdisCommon->RegPowerSaveMode != ndisPsModeToSet) - { - pNdisCommon->RegPowerSaveMode = ndisPsModeToSet; - pPSC->RegPowerSaveMode = pNdisCommon->RegPowerSaveMode; - //if( (pNdisCommon->RegLeisurePsMode) && (rtPsModeToSet == eActive) && (!pAdapter->bInHctTest )) - if( (pNdisCommon->RegLeisurePsMode) && (!pAdapter->bInHctTest )) - pPSC->bLeisurePs= TRUE; - else - pPSC->bLeisurePs= FALSE; - MgntActSet_802_11_PowerSaveMode(pAdapter, rtPsModeToSet); - //2008.08.25 - if( (pNdisCommon->RegLeisurePsMode) && (rtPsModeToSet == eActive) - && (! pAdapter->bInHctTest ) ) - { - // Auto LeisurePs based on AC or Battery. - if(pNdisCommon->RegLeisurePsMode == eLpsAuto) - { - if(pPSC->PowerProfile == NdisPowerProfileBattery ) - pPSC->bLeisurePs= TRUE; - else if(pPSC->PowerProfile == NdisPowerProfileAcOnLine ) - pPSC->bLeisurePs= FALSE; - - // NdisDevicePnPEventSurpriseRemoved isn't called. - else - pPSC->bLeisurePs= TRUE; - } - //Always turn on LeisurePS. - else if(pNdisCommon->RegLeisurePsMode == eLpsOn) - { - pPSC->bLeisurePs= TRUE; - } - } - else - pPSC->bLeisurePs= FALSE; - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_POWER_MODE: 0x%X\n", ndisPsModeToSet)); - } - break; - - - case OID_802_11_PRIVACY_FILTER: - case OID_RT_802_11_PRIVACY_FILTER: - //TODO: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_PRIVACY_FILTER: \n")); - break; - - case OID_RT_SCAN_AVAILABLE_BSSID: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SCAN_AVAILABLE_BSSID: \n")); - case OID_802_11_BSSID_LIST_SCAN: - case OID_RT_802_11_BSSID_LIST_SCAN: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_802_11_BSSID_LIST_SCAN.\n")); - if(pMgntInfo->SnifferTurnOnFlag) - break; -#if RTL819X_NO_SCAN_AFTER_LINK - if(!pMgntInfo->bMediaConnect){ - RT_TRACE(COMP_SEND, DBG_LOUD, ("==m==> Scan <==m==\n")); - MgntActSet_802_11_BSSID_LIST_SCAN(pAdapter); - } -#else - MgntActSet_802_11_BSSID_LIST_SCAN(pAdapter); -#endif - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_802_11_BSSID_LIST_SCAN.\n")); - break; - - case OID_802_11_TEST: //O - case OID_RT_802_11_TEST: - if( (InformationBuffer == 0) || (InformationBufferLength < 4) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - else - { - NDIS_802_11_TEST* Test = (PNDIS_802_11_TEST)InformationBuffer; - - switch(Test->Type) - { - case 1: - N6IndicateStatus( - pAdapter, - NDIS_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)&Test->AuthenticationEvent, - sizeof(NDIS_802_11_STATUS_TYPE) + Test->Length); - break; - - case 2: - N6IndicateStatus( - pAdapter, - NDIS_STATUS_MEDIA_SPECIFIC_INDICATION, - (PVOID)&Test->RssiTrigger, - sizeof(NDIS_802_11_RSSI )); - break; - - default: - Status = NDIS_STATUS_INVALID_DATA; - break; - } - } - *BytesRead = InformationBufferLength; - break; - - case OID_RT_SET_CHANNEL: - { - u1Byte btChannel; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SET_CHANNEL\n")); - - // Verify input paramter. - if(InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - return Status; - } - - // Get channel number to set. - btChannel = *((u1Byte*)InformationBuffer); - - // - // 2012/06/08 MH Dirty fix for adhoc set channel under adhoc mode? - // Before RT UI set channel, the scan process will be called at first and then - // the set channel process will be aborted. Need to investigate later!? - // - { - u1Byte delay = 0; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - while (pMgntInfo->bScanInProgress && delay < 20 && pMgntInfo->mIbss) - { - delay_ms(100); - delay++; - //DbgPrint("scan in progress we can nnot set channel otherwise this will be aborted delay=%d\n", delay); - } - } - - // Switch channel. - if(MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(pAdapter, btChannel) != TRUE) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("!!! Failed to switch to the channel, %d\n", btChannel)); - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SET_CHANNEL: %d\n",btChannel)); - } - break; - - case OID_RT_SET_PREAMBLE_MODE: - { - UCHAR PreambleMode; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SET_PREAMBLE_MODE.\n")); - - // Verify input paramter. - if(InformationBufferLength < sizeof(PreambleMode)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(PreambleMode); - return Status; - } - - PreambleMode = *((UCHAR*)InformationBuffer); - // 0:Long, 1:Auto, 2:Short. - switch(PreambleMode) - { - case 0: - MgntActSet_802_11_PREAMBLE_MODE(pAdapter, PREAMBLE_LONG); - break; - case 1: - MgntActSet_802_11_PREAMBLE_MODE(pAdapter, PREAMBLE_AUTO); - break; - case 2: - MgntActSet_802_11_PREAMBLE_MODE(pAdapter, PREAMBLE_SHORT); - break; - default: - RT_ASSERT(FALSE, ("Invalid preamble mode\n")); - break; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SET_PREAMBLE_MODE: %d\n", PreambleMode)); - } - break; - - case OID_RT_WIRELESS_MODE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_WIRELESS_MODE.\n")); - { - u1Byte btWirelessModeToSet; - - // Verify input paramter. - if(InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - return Status; - } - - // Get wireless mode to switch to. - btWirelessModeToSet = *((u1Byte*)InformationBuffer); - - if(FALSE == MgntActSet_802_11_WIRELESS_MODE(pAdapter, (WIRELESS_MODE)btWirelessModeToSet)) - { - Status = NDIS_STATUS_INVALID_DATA; - *BytesNeeded = sizeof(btWirelessModeToSet); - return Status; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_WIRELESS_MODE.\n")); - break; - - // Annie, 2004-12-27 - case OID_RT_SET_CHANNELPLAN: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SET_CHANNELPLAN\n")); - { - u2Byte ChannelPlan; - - // Verify input paramter - if(InformationBufferLength < sizeof(u2Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u2Byte); - return Status; - } - - // Get channel plan to set - ChannelPlan = *((u2Byte*)InformationBuffer); - - // Set channel plan - if(MgntActSet_802_11_CHANNELPLAN(pAdapter, ChannelPlan) != TRUE) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("!!! Failed to set the channelplan, %d\n", ChannelPlan)); - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SET_CHANNELPLAN.\n")); - break; - - case OID_RT_FORCED_DATA_RATE: - { - u1Byte DataRate; - PADAPTER pExtAdapter = NULL; - - // Verify input paramter. - if(InformationBufferLength < sizeof(DataRate)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(DataRate); - return Status; - } - - // Get forced data rate to set. - DataRate = *((u1Byte*)InformationBuffer); - - // Check if it is valid for current wireless mode. - if(!MgntIsRateValidForWirelessMode(DataRate, pMgntInfo->dot11CurrentWirelessMode) && - DataRate != 0 ) // 0 stands for Auto. - { - Status = NDIS_STATUS_INVALID_DATA; - *BytesNeeded = sizeof(DataRate); - return Status; - } - - // Set data rate forced. - pExtAdapter = GetDefaultAdapter(pAdapter); - while(pExtAdapter !=NULL){ - pExtAdapter->MgntInfo.ForcedDataRate = (u2Byte)DataRate; - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - pNdisCommon->RegForcedDataRate = (u2Byte)DataRate; - - - if(InformationBufferLength > 1) - { - pExtAdapter = GetDefaultAdapter(pAdapter); - while(pExtAdapter !=NULL){ - pExtAdapter->MgntInfo.ForcedTxDisableRateFallBack = *((u1Byte*)InformationBuffer+1); - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - } - break; - - case OID_RT_WIRELESS_MODE_FOR_SCAN_LIST: - // - // It changes the behavior when we report scan result to upper layer. - // See OID_802_11_BSSID_LIST for details. 2005.01.13, by rcnjko. - // - { - u1Byte WirelessMode; - - // Verify input paramter. - if(InformationBufferLength < sizeof(WirelessMode)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(WirelessMode); - return Status; - } - - // Get wireless mode for scan list. - WirelessMode = *((u1Byte*)InformationBuffer); - - // Set wireless mode for scan list. - pNdisCommon->RegWirelessMode4ScanList = (int)WirelessMode; - } - break; - - case OID_RT_SCAN_WITH_MAGIC_PACKET: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SCAN_WITH_MAGIC_PACKET.\n")); - { - pu1Byte pDstAddr; - - // Verify input paramter. - if(InformationBufferLength < sizeof(UCHAR)*6) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(UCHAR)*6; - return Status; - } - - // Get offset, data width, and value to write. - pDstAddr = (pu1Byte)InformationBuffer; - - // Send magic packet to each channle. - MgntActSet_802_11_ScanWithMagicPacket(pAdapter, pDstAddr); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SCAN_WITH_MAGIC_PACKET.\n")); - break; - - case OID_RT_SET_SCAN_OPERATION: - RT_TRACE(COMP_SCAN, DBG_LOUD, ("===> Set OID_RT_SET_SCAN_OPERATION.\n")); - { - PADAPTER pDefAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pDefMgntInfo = &(pDefAdapter->MgntInfo); - - *BytesRead = sizeof(BOOLEAN); - pMgntInfo->bDisableScanByOID = *((BOOLEAN*)InformationBuffer); - pDefMgntInfo->bDisableScanByOID = *((BOOLEAN*)InformationBuffer); - - if(pMgntInfo->bDisableScanByOID) - { - if(MgntScanInProgress(pDefMgntInfo) == TRUE && MgntIsLinkInProgress(pDefMgntInfo) == FALSE) - MgntResetScanProcess(pDefAdapter); - } - } - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<=== Set OID_RT_SET_SCAN_OPERATION %d.\n", pMgntInfo->bDisableScanByOID)); - break; - - - case OID_RT_AP_SWITCH_INTO_AP_MODE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_AP_SWITCH_INTO_AP_MODE.\n")); - { - switch(*(ULONG *)InformationBuffer) - { - case 0: - // Switch to STA mode. - MgntActSet_ApMode(pAdapter, FALSE); - break; - - case 1: - // Switch to AP mode. - MgntActSet_ApMode(pAdapter, TRUE); - break; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_AP_SWITCH_INTO_AP_MODE.\n")); - break; - - case OID_RT_AP_SET_DTIM_PERIOD: - { - u1Byte u1DtimPeriod; - - // Verify input paramter. - if(InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - return Status; - } - - u1DtimPeriod = *((pu1Byte)InformationBuffer); - pNdisCommon->RegDtimPeriod = u1DtimPeriod; - MgntActSet_802_11_DtimPeriod(pAdapter, u1DtimPeriod); - } - break; - - case OID_RT_SET_BCN_INTVL: - { - u2Byte u2BcnIntv; - - // Verify input paramter. - if(InformationBufferLength < sizeof(u2Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u2Byte); - return Status; - } - - u2BcnIntv = *((pu2Byte)InformationBuffer); - pNdisCommon->RegBeaconPeriod = u2BcnIntv; - MgntActSet_802_11_BeaconInterval(pAdapter, u2BcnIntv); - } - break; - - case OID_RT_AP_SET_PASSPHRASE: - { - PRtlLibPassphrase pRtPassphrase; - OCTET_STRING osPassphrase; - - // Verify input paramter. - if(InformationBuffer == NULL) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - if(InformationBufferLength < sizeof(RtlLibPassphrase)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(RtlLibPassphrase); - return Status; - } - - pRtPassphrase = (PRtlLibPassphrase)InformationBuffer; - if(pRtPassphrase->Length > 64 || pRtPassphrase->Length < 8) // Modify 63 to 64 For A mode 64-Hex mode !! - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - FillOctetString(osPassphrase, pRtPassphrase->Passphrase, ((u2Byte)pRtPassphrase->Length)); - //PRINT_DATA(("Set OID_RT_AP_SET_PASSPHRASE: "), osPassphrase.Octet, osPassphrase.Length); - - MgntActSet_Passphrase(pAdapter, &osPassphrase); - } - break; - - case OID_RT_SEND_SPECIFIC_PACKET: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SEND_SPECIFIC_PACKET.\n")); - { - u2Byte idx, u2bPacketLength, u2bTxNumber; - u1Byte u1bTxRate; - OCTET_STRING ocPacketToSend; - - if( InformationBufferLength < 16 ) // 16 = 2(Length) + 1(DataRate) + 2(Number) + 11(Reserved). - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 16; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SEND_SPECIFIC_PACKET NDIS_STATUS_INVALID_LENGTH.\n")); - return Status; - } - - // Get packet lengh, in unit of byte. - u2bPacketLength = *((pu2Byte)InformationBuffer); - if( InformationBufferLength < (ULONG)(16 + u2bPacketLength)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = (16 + u2bPacketLength); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SEND_SPECIFIC_PACKET NDIS_STATUS_INVALID_LENGTH2 %ld.\n",*BytesNeeded)); - return Status; - } - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u2bPacketLength = %d.\n", u2bPacketLength)); - - // Get data rate, in unit of 0.5 Mbps. - u1bTxRate = *((pu1Byte)InformationBuffer + 2); - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u1bTxRate = %d.\n", u1bTxRate)); - - // Get number of sending packet. - u2bTxNumber = *(pu2Byte)( (pu1Byte)InformationBuffer+3 ); - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u2bTxNumber = %d.\n", u2bTxNumber)); - - // Get packet to send, it should be an 802.11 frame with CRC append. - FillOctetString(ocPacketToSend, ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] ocPacketToSend:\n", ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - - // Send the specific packet. - if( u2bTxNumber == 0 ) - u2bTxNumber = 1; // At least send one packet. Added by Annie, 2006-03-27. - - for( idx=0; idx Set OID_RT_SEND_SPECIFIC_PACKET_MP.\n")); - RT_TRACE(COMP_MP, DBG_LOUD, ("===> Set OID_RT_SEND_SPECIFIC_PACKET_MP.\n")); - { - u2Byte idx, u2bPacketLength, u2bTxNumber; - u1Byte u1bTxRate; - OCTET_STRING ocPacketToSend; - - u4Byte MptTag = 0; - u1Byte MptTagBuf[4]; - u1Byte i = 0; - - - if( InformationBufferLength < 16 ) // 16 = 2(Length) + 1(DataRate) + 2(Number) + 11(Reserved). - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 16; - return Status; - } - - // Get packet length, in unit of byte. - u2bPacketLength = *((pu2Byte)InformationBuffer); - if( InformationBufferLength < (ULONG)(16 + u2bPacketLength)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = (16 + u2bPacketLength); - return Status; - } - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u2bPacketLength = %d.\n", u2bPacketLength)); - // Get data rate, in unit of 0.5 Mbps. - u1bTxRate = *((pu1Byte)InformationBuffer + 2); - - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u1bTxRate = %d.\n", u1bTxRate)); - - // Get number of sending packet. - u2bTxNumber = *(pu2Byte)( (pu1Byte)InformationBuffer+3 ); - - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u2bTxNumber = %d.\n", u2bTxNumber)); - - // Get packet to send, it should be an 802.11 frame (start with 24 bytes header). - FillOctetString(ocPacketToSend, ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - - RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] ocPacketToSend:\n", ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - - // Send the specific packet. - if( u2bTxNumber == 0 ) - u2bTxNumber = 1; // At least send one packet. Added by Annie, 2006-03-27. - - //RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] CurrentAddress:\n", pAdapter->CurrentAddress, 6); - //RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] ocPacketToSend::\n", ocPacketToSend.Octet, ocPacketToSend.Length); // For debug purpose - - for (i = 0; i < 4; i++) - MptTagBuf[i] = *((pu1Byte)InformationBuffer + 16 + 24 + i); - - MptTag = *((u4Byte*)MptTagBuf); - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] MptTag = 0x%0X.\n", MptTag)); - if (MptTag != 0x10ec8139){ - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] return FALSE for MptTag != 0x10ec8139.\n")); - } - - - - for( idx=0; idx Set OID_RT_SEND_SPECIFIC_PACKET NDIS_STATUS_INVALID_DATA.\n")); - return Status; - } - } - - } - RT_TRACE(COMP_MP, DBG_LOUD, ("<=== Set OID_RT_SEND_SPECIFIC_PACKET_MP.\n")); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SEND_SPECIFIC_PACKET_MP.\n")); - break; - - case OID_RT_SEND_ONE_PACKET_MP: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SEND_ONE_PACKET_MP.\n")); - RT_TRACE(COMP_MP, DBG_LOUD, ("===> Set OID_RT_SEND_ONE_PACKET_MP.\n")); - { - u2Byte idx, u2bPacketLength, u2bTxNumber; - u1Byte u1bTxRate; - OCTET_STRING ocPacketToSend; - - u4Byte MptTag = 0; - u1Byte MptTagBuf[4]; - u1Byte i = 0; - - // TODO: Construct Packet in driver, Not yet ready. - - if( InformationBufferLength < 16 ) // 16 = 2(Length) + 1(DataRate) + 2(Number) + 11(Reserved). - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 16; - return Status; - } - - // Get packet length, in unit of byte. - u2bPacketLength = *((pu2Byte)InformationBuffer); - if( InformationBufferLength < (ULONG)(16 + u2bPacketLength)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = (16 + u2bPacketLength); - return Status; - } - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u2bPacketLength = %d.\n", u2bPacketLength)); - // Get data rate, in unit of 0.5 Mbps. - u1bTxRate = *((pu1Byte)InformationBuffer + 2); - - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u1bTxRate = %d.\n", u1bTxRate)); - - // Get number of sending packet. - u2bTxNumber = *(pu2Byte)( (pu1Byte)InformationBuffer+3 ); - - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] u2bTxNumber = %d.\n", u2bTxNumber)); - - // Get packet to send, it should be an 802.11 frame (start with 24 bytes header). - FillOctetString(ocPacketToSend, ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - - RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] ocPacketToSend:\n", ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - - // Send the specific packet. - if( u2bTxNumber == 0 ) - u2bTxNumber = 1; // At least send one packet. Added by Annie, 2006-03-27. - - //RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] CurrentAddress:\n", pAdapter->CurrentAddress, 6); - //RT_PRINT_DATA(COMP_MP, DBG_LOUD, "[Debug] ocPacketToSend::\n", ocPacketToSend.Octet, ocPacketToSend.Length); // For debug purpose - - for (i = 0; i < 4; i++) - MptTagBuf[i] = *((pu1Byte)InformationBuffer + 16 + 24 + i); - - MptTag = *((u4Byte*)MptTagBuf); - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] MptTag = 0x%0X.\n", MptTag)); - if (MptTag != 0x10ec8139){ - RT_TRACE(COMP_MP, DBG_LOUD, ("[Debug] return FALSE for MptTag != 0x10ec8139.\n")); - } - - - - for( idx=0; idx Set OID_RT_PRO_SEND_RAW_DATA.\n")); - { - u2Byte idx, u2bPacketLength, u2bTxNumber; - u1Byte u1bTxRate; - OCTET_STRING ocPacketToSend; - - if( InformationBufferLength < 16 ) // 16 = 2(Length) + 1(DataRate) + 2(Number) + 11(Reserved). - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 16; - return Status; - } - - // Get packet lengh, in unit of byte. - u2bPacketLength = *((pu2Byte)InformationBuffer); - if( InformationBufferLength < (ULONG)(16 + u2bPacketLength)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = (16 + u2bPacketLength); - return Status; - } - - // Get data rate, in unit of 0.5 Mbps. - u1bTxRate = *((pu1Byte)InformationBuffer + 2); - - // Get number of sending packet. - u2bTxNumber = *(pu2Byte)( (pu1Byte)InformationBuffer+3 ); - - // Get packet to send, it should be an 802.11 frame with CRC append. - FillOctetString(ocPacketToSend, ((pu1Byte)InformationBuffer + 16), u2bPacketLength); - //PRINT_DATA("ocPacketToSend", ocPacketToSend.Octet, ocPacketToSend.Length); // For debug purpose, 2005.12.23, by rcnjko. - - // Send the specific packet. - if( u2bTxNumber == 0 ) - u2bTxNumber = 1; // At least send one packet. Added by Annie, 2006-03-27. - - for( idx=0; idx Set OID_RT_DBG_COMPONENT.\n")); - { - u8Byte InfoComp = 0; - if( InformationBufferLength < 1 ) // At least 1 byte. - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 1; - return Status; - } - - CopyMem( &InfoComp, InformationBuffer, InformationBufferLength ); - GlobalDebugComponents = InfoComp; - } - //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_DBG_COMPONENT: GlobalDebugComponents: %#X\n", GlobalDebugComponents)); - break; - - case OID_RT_DBG_LEVEL: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_DBG_LEVEL.\n")); - { - u4Byte InfoLevel = 0; - if( InformationBufferLength < 1 ) // At least 1 byte. - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 1; - return Status; - } - - CopyMem( &InfoLevel, InformationBuffer, InformationBufferLength ); - GlobalDebugLevel = InfoLevel; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_DBG_LEVEL: GlobalDebugLevel: %#X\n", GlobalDebugLevel)); - break; - - case OID_RT_AUTO_SELECT_CHANNEL: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_AUTO_SELECT_CHANNEL.\n")); - { - if( InformationBufferLength < sizeof(BOOLEAN)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(BOOLEAN); - return Status; - } - - pMgntInfo->bAutoSelChnl = *((PBOOLEAN)InformationBuffer); - *BytesRead = InformationBufferLength; - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_AUTO_SELECT_CHANNEL: %d\n", pMgntInfo->bAutoSelChnl)); - break; - - case OID_RT_HIDDEN_SSID: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_HIDDEN_SSID.\n")); - { - if( InformationBufferLength < sizeof(BOOLEAN)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(BOOLEAN); - return Status; - } - - pMgntInfo->bHiddenSSID = *((PBOOLEAN)InformationBuffer); - *BytesRead = InformationBufferLength; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_HIDDEN_SSID: %d\n", pMgntInfo->bHiddenSSID) ); - break; - - case OID_RT_AP_GET_CLOUD_KEY_EX: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_AP_GET_CLOUD_KEY_EX.\n")); - { - u1Byte offset = 0; - if((InformationBufferLength == 0)||(InformationBuffer == 0)) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_MAC_FILTER_TYPE: Invalid Length!\n") ); - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - offset = *( (pu1Byte)InformationBuffer ); // The first double word - if(offset > EEPROM_CLOUD_KEY_LENGTH_EX || offset <0) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_AP_GET_CLOUD_KEY_EX: Invalid Data!\n") ); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - pMgntInfo->cloud_key_offset = offset; - *BytesRead = InformationBufferLength; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_AP_GET_CLOUD_KEY_EX\n") ); - break; - - case OID_RT_FILTER_DEFAULT_PERMITED: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_FILTER_DEFAULT_PERMITED.\n")); - { - BOOLEAN bPermited; - - if((InformationBufferLength == 0)||(InformationBuffer == 0)) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_FILTER_DEFAULT_PERMITED: Invalid Length!\n") ); - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - bPermited = (BOOLEAN)*( (pu1Byte)InformationBuffer ); // The first double word - - pMgntInfo->bDefaultPermited = bPermited; - - if(pMgntInfo->bDefaultPermited) - pMgntInfo->LockType = MAC_FILTER_ACCEPT; - else - pMgntInfo->LockType = MAC_FILTER_REJECT; - - pMgntInfo->LockedSTACount = 0; - pMgntInfo->LockedSTACount_Reject= 0; - - *BytesRead = InformationBufferLength; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_FILTER_DEFAULT_PERMITED\n") ); - break; - - case OID_RT_MAC_FILTER_TYPE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_MAC_FILTER_TYPE.\n")); - { - u1Byte MacFilterType; - - if((InformationBufferLength == 0)||(InformationBuffer == 0)) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_MAC_FILTER_TYPE: Invalid Length!\n") ); - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - MacFilterType = *( (pu1Byte)InformationBuffer ); // The first double word - - if(MacFilterType > 2) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_MAC_FILTER_TYPE: Invalid Data!\n") ); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - pMgntInfo->LockType = MacFilterType; - if(pMgntInfo->LockType == MAC_FILTER_DISABLE) - { - pMgntInfo->LockedSTACount = 0; - pMgntInfo->LockedSTACount_Reject= 0; - PlatformZeroMemory( pMgntInfo->LockedSTAList, MAX_LOCKED_STA_LIST_NUM*6 ); - PlatformZeroMemory( pMgntInfo->LockedSTAList_Reject, MAX_LOCKED_STA_LIST_NUM*6 ); - } - - *BytesRead = InformationBufferLength; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_MAC_FILTER_TYPE\n") ); - - break; - - case OID_RT_LOCKED_STA_ADDRESS: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_LOCKED_STA_ADDRESS.\n")); - { - u4Byte NumOfLockedAddr; - - if( (InformationBufferLength == 0) || - (InformationBuffer == 0) || - ( (InformationBufferLength-4)%6 != 0 ) || - (InformationBufferLength > (4 + 6*MAX_LOCKED_STA_LIST_NUM) ) - ) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_LOCKED_STA_ADDRESS: Invalid Length!\n") ); - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - NumOfLockedAddr = *( (pu4Byte)InformationBuffer ); // The first double word - - if( (NumOfLockedAddr > MAX_LOCKED_STA_LIST_NUM) || - ((NumOfLockedAddr*6+4) != InformationBufferLength) - ) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_LOCKED_STA_ADDRESS: Invalid Data!\n") ); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - MgntActSet_Locked_STA_Address( pAdapter, (pu1Byte)InformationBuffer+4, NumOfLockedAddr ); - *BytesRead = InformationBufferLength; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_LOCKED_STA_ADDRESS\n") ); - break; - - case OID_RT_FILTER_STA_ADDRESS: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_FILTER_STA_ADDRESS.\n")); - { - u4Byte NumOfLockedAddr; - - if( (InformationBufferLength == 0) || - (InformationBuffer == 0) || - ( (InformationBufferLength-4)%6 != 0 ) || - (InformationBufferLength > (4 + 6*MAX_LOCKED_STA_LIST_NUM) ) - ) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_FILTER_STA_ADDRESS: Invalid Length!\n") ); - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - NumOfLockedAddr = *( (pu4Byte)InformationBuffer ); // The first double word - - if( (NumOfLockedAddr > MAX_LOCKED_STA_LIST_NUM) || - ((NumOfLockedAddr*6+4) != InformationBufferLength) - ) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_FILTER_STA_ADDRESS: Invalid Data!\n") ); - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - if(pMgntInfo->LockType == MAC_FILTER_ACCEPT) - MgntActSet_Accepted_STA_Address( pAdapter, (pu1Byte)InformationBuffer+4, NumOfLockedAddr ); - else if(pMgntInfo->LockType == MAC_FILTER_REJECT) - MgntActSet_Rejected_STA_Address( pAdapter, (pu1Byte)InformationBuffer+4, NumOfLockedAddr ); - - *BytesRead = InformationBufferLength; - } - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_FILTER_STA_ADDRESS\n") ); - break; - - case OID_RT_AP_WDS_MODE: - if( InformationBufferLength < sizeof(pMgntInfo->WdsMode) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(pMgntInfo->WdsMode); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_AP_WDS_MODE: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - return Status; - } - - pMgntInfo->WdsMode = *((pu1Byte)InformationBuffer); - *BytesRead = InformationBufferLength; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_AP_WDS_MODE: %d\n", pMgntInfo->WdsMode)); - break; - - case OID_RT_AP_WDS_AP_LIST: - { - pu1Byte pWdsApList; - u4Byte ListSize = sizeof(u4Byte) + 1*6; - - if( InformationBufferLength < ListSize ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = ListSize; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_AP_WDS_AP_LIST: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - return Status; - } - - pWdsApList = (pu1Byte)InformationBuffer + sizeof(u4Byte); - PlatformMoveMemory(pMgntInfo->WdsApAddr, pWdsApList, 6); - *BytesRead = InformationBufferLength; - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("Set OID_RT_AP_WDS_AP_LIST: %02X-%02X-%02X-%02X-%02X-%02X\n", - pMgntInfo->WdsApAddr[0], pMgntInfo->WdsApAddr[1], pMgntInfo->WdsApAddr[2], pMgntInfo->WdsApAddr[3], pMgntInfo->WdsApAddr[4], pMgntInfo->WdsApAddr[5] )); - } - break; - - case OID_RT_SET_PSP_XLINK_STATUS: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SET_PSP_XLINK_STATUS:\n")); - { - if ( InformationBufferLength < sizeof(u4Byte) ) - { - *BytesNeeded = sizeof(u4Byte); - return NDIS_STATUS_INVALID_LENGTH; - } - - pMgntInfo->bDefaultPSPXlinkMode = *((PBOOLEAN)InformationBuffer); - } - break; - - case OID_RT_SET_WMM_ENABLE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SET_WMM_ENABLE:\n")); - { - if ( InformationBufferLength < sizeof(u4Byte) ) - { - *BytesNeeded = sizeof(u4Byte); - return NDIS_STATUS_INVALID_LENGTH; - } - - MgntActSet_802_11_WMM_MODE(pAdapter, *((PBOOLEAN)InformationBuffer)); - } - break; - - case OID_RT_SET_WMM_UAPSD_ENABLE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SET_WMM_UAPSD_ENABLE:\n")); - { - if ( InformationBufferLength < sizeof(AC_UAPSD) ) - { - *BytesNeeded = sizeof(AC_UAPSD); - return NDIS_STATUS_INVALID_LENGTH; - } - - MgntActSet_802_11_WMM_UAPSD(GetDefaultAdapter(pAdapter), (AC_UAPSD)(*((pu1Byte)InformationBuffer))); - - } - break; - - case OID_RT_DOT11D: - { - PRT_DOT11D_INFO pDot11Info = GET_DOT11D_INFO(pMgntInfo); - - if(InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(u1Byte); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_DOT11D: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - - if( *((pu1Byte)InformationBuffer) == 0 ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_DOT11D: disable\n")); - pDot11Info->bEnabled = FALSE; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_DOT11D: enable\n")); - pDot11Info->bEnabled = TRUE; - } - *BytesRead = InformationBufferLength; - } - break; - case OID_RT_MOTOR_BT_802_11_PAL: - { - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Set OID_RT_MOTOR_BT_802_11_PAL\n")); - RT_DISP(FIOCTL, IOCTL_STATE, ("[BT]Query OID_RT_MOTOR_BT_802_11_PAL\n")); - return Status; - } - - case OID_RT_FORCED_PROTECTION: - { - BOOLEAN bProtection_Enable; - u1Byte Protection_Rate; - u1Byte Protection_CtsFrame, Protection_RtsFrame; - u1Byte Protection_BW, Protection_SC, Protection_CCA; - - bProtection_Enable = *((u1Byte*)InformationBuffer) >> 4; - - if(bProtection_Enable == PROTECTION_MODE_FORCE_ENABLE) - { - // Verify input paramter. - if(InformationBufferLength < 4) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 4; - return Status; - } - - Protection_CCA = *((u1Byte*)InformationBuffer) & 0x0f; - - Protection_Rate = *((pu1Byte)InformationBuffer+1); - - Protection_RtsFrame = *((pu1Byte)InformationBuffer+2) >> 4; - Protection_CtsFrame = *((pu1Byte)InformationBuffer+2) & 0x0f; - - - Protection_BW = *((pu1Byte)InformationBuffer+3) >> 4; - Protection_SC = *((pu1Byte)InformationBuffer+3) & 0x0f; - - if( Protection_CtsFrame > 1 || Protection_RtsFrame > 1 || - Protection_BW > 3 || Protection_SC > 3 || Protection_CCA > 2) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } - - pMgntInfo->ForcedProtectionMode = PROTECTION_MODE_FORCE_ENABLE; - pMgntInfo->ForcedProtectRate = Protection_Rate; - pMgntInfo->bForcedProtectRTSFrame = (Protection_RtsFrame==1)?TRUE:FALSE; - pMgntInfo->bForcedProtectCTSFrame = (Protection_CtsFrame==1)?TRUE:FALSE; - pMgntInfo->ForcedProtectBW = Protection_BW; - pMgntInfo->ForcedProtectSC = Protection_SC; - pMgntInfo->ForcedProtectCCA = Protection_CCA; -// DbgPrint("Protection Mode %d Rate %d RTS %d CTS %d BW %d SC %d CCA %d\n", -// pMgntInfo->ForcedProtectionMode, pMgntInfo->ForcedProtectRate>>1, pMgntInfo->bForcedProtectRTSFrame, -// pMgntInfo->bForcedProtectCTSFrame, pMgntInfo->ForcedProtectBW, pMgntInfo->ForcedProtectSC, pMgntInfo->ForcedProtectCCA); - } - else - { - pMgntInfo->ForcedProtectionMode = bProtection_Enable; -// DbgPrint("Protection Mode %d\n", pMgntInfo->ForcedProtectionMode); - } - } - break; - - case OID_RT_RF_OFF: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_RF_OFF\n") ); - { - BOOLEAN bRfOff = FALSE; - - *BytesNeeded = sizeof(BOOLEAN); - if( InformationBufferLength < *BytesNeeded ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - bRfOff = *((PBOOLEAN)InformationBuffer); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OID_RT_RF_OFF: bRfOff(%d)\n", bRfOff)); - - Status = N6CSet_DOT11_NIC_POWER_STATE(pAdapter, pNdisCommon->PendedRequest, !bRfOff); - *BytesRead = *BytesNeeded; - } - break; - - //Turbo mode mechanism, added by Roger. 2007.02.06. - case OID_RT_TURBOMODE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_TURBOMODE\n")); - { - // Verify input. - if( (InformationBuffer == NULL) || (InformationBufferLength == 0) ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - // Set mgturbo mode type. - MgntActSet_RT_TurboModeType( pAdapter, (pu1Byte)InformationBuffer ); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_TURBOMODE.\n")); - *BytesRead = InformationBufferLength; - break; - -#if (WPS_SUPPORT == 1) - // SimpleConfig ,By CCW copy from 818x - case OID_RT_SimpleConfScan: - { - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, - "Set OID_RT_SimpleConfScan\n", - InformationBuffer, InformationBufferLength); - - // - // 2011-05-13 modify by hpfan, for WSC IE support fragment - // - - // buffer format: - // 1-byte: switch of simple config mode [BIT0] + IE length high byte [BIT7 ~ BIT1] - // 1-byte: length of IE low byte - // n-byte: content of IE. - // - - // - // buffer format: [Support 1byte IE length] - // 1-byte: switch of simple config mode. - // 1-byte: length of IE. - // n-byte: content of IE. - // - - //RT_TRACE(COMP_RSNA, DBG_LOUD, ("<=== OID_RT_SimpleConfScan ", Adapter->MgntInfo.bCCX8021xResultenable)); - if(InformationBufferLength < 1) - { - Status = NDIS_STATUS_INVALID_LENGTH; - pSimpleConfig->bEnabled = FALSE; - *BytesNeeded = 1; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SimpleConfScan: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - return Status; - } - - if( (*(PUCHAR)InformationBuffer & BIT0) == 0 ) - { // Simple config is OFF. - u2Byte IELen; - pSimpleConfig->bEnabled = FALSE; - *BytesRead = InformationBufferLength; - - // - // Get IE length. - // - if(InformationBufferLength < 2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 2; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SimpleConfScan: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - pSimpleConfig->bEnabled = FALSE; - pSimpleConfig->bAPEnabled = FALSE; - pSimpleConfig->IELen = 0; - PlatformFillMemory(pSimpleConfig->IEBuf,MAX_SIMPLE_CONFIG_IE_LEN_V2,0); - return Status; - } - IELen = *((u1Byte *)InformationBuffer + 1); - - if( *(PUCHAR)InformationBuffer > BIT0 ) - { - IELen += ( ((*(PUCHAR)InformationBuffer) >> 1) << 8 ); - } - - // - // Validate IE length. 35 is mimmum IE size. - // - if( (InformationBufferLength < (ULONG)(IELen)) || // IELen+1 will cause all IE data drop,Because IElen = InformationBufferLength ; - IELen < 35 || IELen > MAX_SIMPLE_CONFIG_IE_LEN_V2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 2 + 35; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SimpleConfScan: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - pSimpleConfig->bEnabled = FALSE; - pSimpleConfig->bAPEnabled = FALSE; - return Status; - } - - // Verify if AP mode exist - if(IsExtAPModeExist(pAdapter)) - { - pSimpleConfig->bAPEnabled = TRUE; - } - - // - // Enable Simple Config and update IE. - // - pSimpleConfig->IELen = IELen; - PlatformFillMemory(pSimpleConfig->IEBuf,MAX_SIMPLE_CONFIG_IE_LEN_V2 ,0); - CopyMem(pSimpleConfig->IEBuf, - ((u1Byte *)InformationBuffer + 2), - pSimpleConfig->IELen); - - *BytesRead = InformationBufferLength; - } - else - { // Simple config is ON. - u2Byte IELen; - - // - // Get IE length. - // - if(InformationBufferLength < 2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 2; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SimpleConfScan: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - pSimpleConfig->bEnabled = FALSE; - return Status; - } - IELen = *((u1Byte *)InformationBuffer + 1); - - if( *(PUCHAR)InformationBuffer > BIT0 ) - { - IELen += ( ((*(PUCHAR)InformationBuffer) >> 1) << 8 ); - } - - // - // Validate IE length. 35 is mimmum IE size. - // - if( (InformationBufferLength < (ULONG)(IELen)) || // IELen+1 will cause all IE data drop,Because IElen = InformationBufferLength ; - IELen < 35 || IELen > MAX_SIMPLE_CONFIG_IE_LEN_V2 ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 2 + 35; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SimpleConfScan: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - pSimpleConfig->bEnabled = FALSE; - return Status; - } - - // Verify if AP mode exist - if(IsExtAPModeExist(pAdapter)) - { - pSimpleConfig->bAPEnabled = TRUE; - } - - // - // Enable Simple Config and update IE. - // - if(ACTING_AS_IBSS(pAdapter)) - MgntDisconnect(pAdapter, disas_lv_ss); - pSimpleConfig->bEnabled = TRUE; - pSimpleConfig->IELen = IELen; - PlatformFillMemory(pSimpleConfig->IEBuf,MAX_SIMPLE_CONFIG_IE_LEN_V2,0); - CopyMem(pSimpleConfig->IEBuf, - ((u1Byte *)InformationBuffer + 2), - pSimpleConfig->IELen); - - *BytesRead = InformationBufferLength; - } - } - break; - case OID_RT_WPS_SET_IE_FRAGMENT: - { - PSIMPLE_CONFIG_T pSimpleConfig = GET_SIMPLE_CONFIG(pMgntInfo); - if( *((pu1Byte)InformationBuffer) == 0 ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_SET_IE_FRAGMENT: disable\n")); - pSimpleConfig->bFragmentIE = FALSE; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_SET_IE_FRAGMENT: enable\n")); - pSimpleConfig->bFragmentIE = TRUE; - } - } - break; -#endif // #if (WPS_SUPPORT == 1) - - case OID_RT_WPS_HWSET_PBC_PRESSED: - { - if( InformationBufferLength < sizeof(BOOLEAN)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(BOOLEAN); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_HWSET_PBC_PRESSED: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - - // 2011/11/03 MH Add for netgear special requirement. We need to count PBC press time. - if (pMgntInfo->bRegTimerGPIO != TRUE) - pMgntInfo->bPbcPressed= FALSE; - *BytesRead = InformationBufferLength; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_HWSET_PBC_PRESSED: %d\n", pMgntInfo->bPbcPressed) ); - } - break; - - case OID_RT_WPS_LED_CTL_START: - { - - if( InformationBufferLength < sizeof(u1Byte)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(BOOLEAN); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START: invalid length(%d), BytesNeeded: %d !!!\n", InformationBufferLength, *BytesNeeded)); - return Status; - } - - if( *((pu1Byte)InformationBuffer) == 0 ) - { - pAdapter->HalFunc.LedControlHandler(pAdapter, LED_CTL_STOP_WPS); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START: stop LED blinking SUCCESS\n")); - } - else if( *((pu1Byte)InformationBuffer) == 1 ) - { - pAdapter->HalFunc.LedControlHandler(pAdapter, LED_CTL_START_WPS); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START: start LED blinking 0.3s\n")); - } - else if( *((pu1Byte)InformationBuffer) == 2 ) - { - pAdapter->HalFunc.LedControlHandler(pAdapter, LED_CTL_START_WPS_BOTTON); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START_BOTTON: start LED blinking 0.3s\n")); - } - else if( *((pu1Byte)InformationBuffer) == 3 ) - { - pAdapter->HalFunc.LedControlHandler(pAdapter, LED_CTL_STOP_WPS_FAIL); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START_BOTTON: stop LED blinking fail\n")); - } - else if ( *((pu1Byte)InformationBuffer) == 4 ) - { - pAdapter->HalFunc.LedControlHandler(pAdapter, LED_CTL_STOP_WPS_FAIL_OVERLAP); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START_BOTTON: stop LED blinking fail session overlap\n")); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_WPS_LED_CTL_START_BOTTON: WRONG parameter\n")); - } - - *BytesRead = InformationBufferLength; - } - break; - - case OID_RT_FPGA_PHY_RDY: - { - if(*((pu1Byte)InformationBuffer)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("OID_RT_FPGA_PHY_RDY, set Enabled\n")); - RT_ENABLE_FUNC(pAdapter, DF_TX_BIT); - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("OID_RT_FPGA_PHY_RDY, set Disabled\n")); - RT_DISABLE_FUNC(pAdapter, DF_TX_BIT); - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_FPGA_PHY_RDY: PHY Enabled(%d)\n", *((pu1Byte)InformationBuffer))); - } - break; - - case OID_RT_CUSTOMIZED_SCAN: - { - RT_TRACE(COMP_OID_SET , DBG_LOUD, ("Set OID_RT_CUSTOMIZED_SCAN:\n")); - N6CSet_DOT11_CUSTOMIZED_SCAN_REQUEST(GetDefaultAdapter(pAdapter), - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - case OID_RT_CONTROL_LPS: - { - BOOLEAN bEnableLPS; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - bEnableLPS = (*(PBOOLEAN *)InformationBuffer) ? (TRUE):(FALSE); - - if(bEnableLPS) - { - pPSC->bDisableLPSByOID = FALSE; - // Return LPS by UpdateLPSStatus(). by tynli. 2011.01.04. - pAdapter->HalFunc.UpdateLPSStatusHandler( - pAdapter, - pPSC->RegLeisurePsMode, - pPSC->RegPowerSaveMode); - RT_TRACE(COMP_OID_SET, DBG_LOUD,("Set OID_RT_CONTROL_LPS: Recover LPS. bLeisurePs=%d\n", pPSC->bLeisurePs)); - } - else - { - pPSC->bDisableLPSByOID = TRUE; - LeisurePSLeave(pAdapter, LPS_DISABLE_OID_SET); - pPSC->bLeisurePs = FALSE; - RT_TRACE(COMP_OID_SET, DBG_LOUD,("Set OID_RT_CONTROL_LPS: Disable LPS. bLeisurePs=%d\n", pPSC->bLeisurePs)); - } - } - break; - - case OID_RT_CONTROL_IPS: - { - BOOLEAN bEnableIPS; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - bEnableIPS = (*(PBOOLEAN *)InformationBuffer) ? (TRUE):(FALSE); - - if(bEnableIPS) - { - IPSReturn(pAdapter, IPS_DISABLE_BY_OID); - RT_TRACE(COMP_OID_SET, DBG_LOUD,("Set OID_RT_CONTROL_IPS: IPS Return\n")); - } - else - { - IPSDisable(pAdapter, FALSE, IPS_DISABLE_BY_OID); - RT_TRACE(COMP_OID_SET, DBG_LOUD,("Set OID_RT_CONTROL_IPS: IPS Disable\n")); - } - } - - break; - - case OID_RT_CLEAR_ANTENNA_TEST_VAL: - { - pMgntInfo->AntennaTest = 0; - RT_TRACE(COMP_OID_SET, DBG_LOUD,("Set OID_RT_CLEAR_ANTENNA_TEST_VAL\n")); - } - break; - - case OID_RT_11N_TDLS_ENABLE: - { - TDLS_SetConfiguration(pAdapter, InformationBuffer, InformationBufferLength); - } - break; - - case OID_RT_CUSTOMIZED_ASSOCIATION_PARAM: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> SET OID_RT_CUSTOMIZED_ASSOCIATION_PARAM\n")); - { - if(InformationBufferLength < 2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 2; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_RT_CUSTOMIZED_ASSOCIATION_PARAM invalid length\n")); - return Status; - } - MgntActSet_802_11_CustomizedAsocIE(pAdapter, InformationBuffer, (u1Byte)InformationBufferLength); - } - break; - - case OID_RT_LC_STOP_SCAN: - { - - if(InformationBufferLength < sizeof(ULONG)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG); - return Status; - } - switch(*(ULONG *)InformationBuffer) - { - case 0: - pMgntInfo->bStopScan = FALSE; - break; - - case 1: - pMgntInfo->bStopScan = TRUE; - // - MgntDisconnect(pAdapter, unspec_reason); - - break; - default : - pMgntInfo->bStopScan = FALSE; - break; - } - } - break; - - case OID_RT_PNP_POWER: - { - Status = N6C_SET_OID_PNP_SET_POWER( - pAdapter, - OID_RT_PNP_POWER, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - case OID_RT_WPS_INFORMATION: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OID_RT_WPS_INFORMATION\n")); -#if ( WPS_SUPPORT == 1 ) - if(RT_STATUS_SUCCESS != - (rtStatus = MgntActSet_WPS_Information(pAdapter, InformationBuffer, (u2Byte)InformationBufferLength))) - { - Status = NDIS_STATUS_INVALID_DATA; - return Status; - } -#else - return NDIS_STATUS_FAILURE; -#endif - } - break; - - case OID_RT_SYSTEM_POWER_STATE_SHUTDOWN: - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SYSTEM_POWER_STATE_SHUTDOWN ===>\n")); - pMgntInfo->bReceiveSystemPSOID = TRUE; - } - break; - - - case OID_RT_FORCED_BUG_CHECK: - { - // - // Add forced bug check operation(OID_RT_FORCED_BUG_CHECK) to observe some specific HW behavior, - // e.g., to check whether SDIO device will be recognized by device management after unexpected system restart - // 2014.07.05. - // - KeBugCheckEx( - OID_RT_FORCED_BUG_CHECK, - (ULONG) GET_RT_SDIO_DEVICE(pAdapter)->CurrentPowerState, - (ULONG)pDefaultAdapter->bSurpriseRemoved, - (ULONG)pDefaultAdapter->bDriverStopped, - (ULONG)pDefaultAdapter->bEnterPnpSleep); - } - break; - - } - return Status; -} - -// -// Description: -// Handler for setting OIDs whcih are common to PCI and USB devices. -// -NDIS_STATUS -N6CSetInformation( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("====> N6CSetInformation, OID=0x%08x\n", Oid)); - - // Moved From Orginal MPSetInformation Set OID (Too Many Interface Dependent OIDs; therefore, separate them into different files) --- - Status = InterfaceSetInformationHandleCustomizedOriginalMPSetOid( - MiniportAdapterContext, - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized Wifi-Direct OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // ---------------------------------------------------------------------------------------------------------------- - - - // CCX Handle Set OID -------------------------------------------------------------------------------- - Status = NDIS_STATUS_NOT_RECOGNIZED; - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // This Oid has been responded to by the MpEventQueryInformation function - // We will not handle this Oid and return to the OS. - - RT_TRACE(COMP_CCX, DBG_TRACE, ("Oid intercepted by CCX EventSetInformation! Status 0x%08x\n", Status)); - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - // Handle the Wifi-Direct Customized Oids ----------------------------------------------------------------- - Status = N6CSetInformationHandleCustomizedWifiDirectOids( - MiniportAdapterContext, - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized Wifi-Direct OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - // Handle the WAPI Customized Oids --------------------------------------------------------------------- - Status = WAPI_OidHandler( - pAdapter, - 1, //N6 Platform - 1, //Set OID - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized WAPI OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - // Handle the Customized 11n Oids ----------------------------------------------------------------------- - Status = N6CSetInformationHandleCustomized11nOids( - MiniportAdapterContext, - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized 11n OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - // Handle the Customized Security Oids -------------------------------------------------------------------------- - Status = N6CSetInformationHandleCustomizedSecurityOids( - MiniportAdapterContext, - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - // Handle the Customized NAN Oids -------------------------------------------------------------------------- - Status = N6CSetInformationHandleCustomizedNANOids( - MiniportAdapterContext, - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized NAN OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - // Handle the Customized Oids -------------------------------------------------------------------------- - Status = N6CSetInformationHandleCustomizedOids( - MiniportAdapterContext, - Oid, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - - if(Status != NDIS_STATUS_NOT_RECOGNIZED) - { - // The Customized OID has been handled. - return Status; - } - else Status = NDIS_STATUS_SUCCESS; - // -------------------------------------------------------------------------------------------------- - - - - // ============================================================================================ - // The following are the OIDs from the NDIS 6.x, including the Customized OIDs with the same meanings. Please be organized. - // ============================================================================================ - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { - case OID_GEN_CURRENT_LOOKAHEAD: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_GEN_CURRENT_LOOKAHEAD: \n")); - break; - - case OID_GEN_PROTOCOL_OPTIONS: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_GEN_PROTOCOL_OPTIONS: \n")); - break; - - case OID_802_3_MULTICAST_LIST: - if( (InformationBuffer == 0) || (InformationBufferLength == 0) || (InformationBufferLength%6 != 0)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - MgntActSet_802_3_MULTICAST_LIST( - pAdapter, - (pu1Byte)InformationBuffer, - (u4Byte)InformationBufferLength, - (BOOLEAN)(pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST)); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_3_MULTICAST_LIST: \n")); - break; - - case OID_DOT11_DESIRED_BSS_TYPE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_DESIRED_BSS_TYPE:\n")); - { - PDOT11_BSS_TYPE pBssType = (PDOT11_BSS_TYPE)InformationBuffer; - u4Byte len = sizeof(DOT11_BSS_TYPE); - if ( InformationBufferLength < len ) - { - Status = NDIS_STATUS_BUFFER_TOO_SHORT; - *BytesNeeded = len; - return Status; - } - - Status = N6CSet_DOT11_DESIRED_BSS_TYPE(pAdapter, pBssType); - if (Status == NDIS_STATUS_SUCCESS) - { - *BytesRead = len; - } - } - break; - - case OID_DOT11_MEDIA_STREAMING_ENABLED: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_MEDIA_STREAMING_ENABLED::\n")); - { - BOOLEAN bStreamingEnabled = *((PBOOLEAN)InformationBuffer); - - if ( InformationBufferLength < sizeof(BOOLEAN) ) - { - *BytesRead = 0; - *BytesNeeded = sizeof(BOOLEAN); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - *BytesRead = sizeof(BOOLEAN); - pNdisCommon->bDot11MediaStreamingEnabled = bStreamingEnabled; - } - break; - - case OID_DOT11_EXCLUDE_UNENCRYPTED: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_EXCLUDE_UNENCRYPTED:\n")); - { - if ( InformationBufferLength < sizeof(BOOLEAN) ) - { - *BytesRead = 0; - *BytesNeeded = sizeof(BOOLEAN); - return NDIS_STATUS_BUFFER_TOO_SHORT; - } - - pMgntInfo->bExcludeUnencrypted = *((PBOOLEAN)InformationBuffer); - *BytesRead = sizeof(BOOLEAN); - } - break; - - case OID_DOT11_PRIVACY_EXEMPTION_LIST: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_PRIVACY_EXEMPTION_LIST:\n")); - { - return N6CSet_DOT11_PRIVACY_EXEMPTION_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - case OID_DOT11_IBSS_PARAMS: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_IBSS_PARAMS:\n")); - { - return N6CSet_DOT11_IBSS_PARAMS( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - // 2006.10.31, by shien chang. - case OID_RT_FRAGMENTATION_THRESHOLD: - case OID_DOT11_FRAGMENTATION_THRESHOLD: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_FRAGMENTATION_THRESHOLD:\n")); - { - if ( InformationBufferLength < sizeof(ULONG) ) - { - *BytesNeeded = sizeof(ULONG); - return NDIS_STATUS_INVALID_LENGTH; - } - - MgntActSet_802_11_FRAGMENTATION_THRESHOLD( pAdapter, *((pu2Byte)InformationBuffer) ); - *BytesRead = sizeof(ULONG); - } - break; - - // 2006.10.31, by shien chang. - case OID_RT_RTS_THRESHOLD: - case OID_DOT11_RTS_THRESHOLD: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_RTS_THRESHOLD:\n")); - { - if ( InformationBufferLength < sizeof(ULONG) ) - { - *BytesNeeded = sizeof(ULONG); - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - MgntActSet_802_11_RTS_THRESHOLD( pAdapter, *(pu2Byte)InformationBuffer ); - *BytesRead = sizeof(ULONG); - } - break; - - // 2006.11.01, by shien chang. - case OID_DOT11_FLUSH_BSS_LIST: - RT_TRACE(COMP_OID_SET , DBG_LOUD, ("Set OID_DOT11_FLUSH_BSS_LIST:\n")); - { - // Mark the scan list has been flushed by OS. - pMgntInfo->bFlushScanList = TRUE; - - // Clear content of bssDesc4Query[]. - PlatformZeroMemory( pMgntInfo->bssDesc4Query, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC); - pMgntInfo->NumBssDesc4Query = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("[REDX]: OID_DOT11_FLUSH_BSS_LIST(), clear NumBssDesc4Query\n")); - MgntClearRejectedAsocAP(pAdapter); - - *BytesRead = 0; - } - break; - - case OID_DOT11_CURRENT_REG_DOMAIN: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Set OID_DOT11_CURRENT_REG_DOMAIN:\n")); - { - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - // - } - break; - - case OID_DOT11_DESIRED_BSSID_LIST: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_DESIRED_BSSID_LIST:\n")); - { - return N6CSet_DOT11_DESIRED_BSSID_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - case OID_DOT11_DATA_RATE_MAPPING_TABLE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_DATA_RATE_MAPPING_TABLE:\n")); - { - - } - break; - - case OID_DOT11_MULTI_DOMAIN_CAPABILITY_ENABLED: - case OID_DOT11_COUNTRY_STRING: - Status = NDIS_STATUS_NOT_SUPPORTED; - break; - - - // Added by Annie, 2006-10-09. - case OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_ENABLED_AUTHENTICATION_ALGORITHM\n") ); - { - return N6CSet_DOT11_ENABLED_AUTHENTICATION_ALGORITHM( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - // Added by Annie, 2006-10-09. - case OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM\n") ); - { - return N6CSet_DOT11_ENABLED_UNICAST_CIPHER_ALGORITHM( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-12. - case OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM, 0x%08x\n", Oid) ); - { - return N6CSet_DOT11_ENABLED_MULTICAST_CIPHER_ALGORITHM( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - } - break; - - // Added by Annie, 2006-10-13. - case OID_DOT11_CIPHER_DEFAULT_KEY: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_CIPHER_DEFAULT_KEY, 0x%08x\n", Oid) ); - { - KIRQL CurrIrql = KeGetCurrentIrql(); - if(CurrIrql < DISPATCH_LEVEL) - { - KeRaiseIrql(DISPATCH_LEVEL, &CurrIrql); - - Status = N6CSet_DOT11_CIPHER_DEFAULT_KEY( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - - KeLowerIrql(CurrIrql); - } - } - break; - - // Added by Annie, 2006-10-09. - case OID_DOT11_CIPHER_DEFAULT_KEY_ID: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_CIPHER_DEFAULT_KEY_ID, 0x%08x\n", Oid) ); - { - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - u4Byte ulKey; - - if (InformationBufferLength < sizeof(u4Byte)) - { - *BytesNeeded = sizeof(u4Byte); - return NDIS_STATUS_INVALID_LENGTH; - } - - ulKey = *((pu4Byte)InformationBuffer); - - if( ulKey >= NATIVE_802_11_MAX_DEFAULT_KEY_ENTRY) - { - return NDIS_STATUS_INVALID_DATA; - } - - if(WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_WAPIENABLE, 0)) - return NDIS_STATUS_SUCCESS; - - pSecInfo->DefaultTransmitKeyIdx = (u1Byte)ulKey; - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("OID_DOT11_CIPHER_DEFAULT_KEY_ID = %d\n", pSecInfo->DefaultTransmitKeyIdx)); - pNdisCommon->RegDefaultKeyId = ulKey; - *BytesRead = sizeof(u4Byte); - } - break; - - // Added by Annie, 2006-10-19. - case OID_DOT11_CIPHER_KEY_MAPPING_KEY: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_CIPHER_KEY_MAPPING_KEY, 0x%08x\n", Oid) ); - { - KIRQL CurrIrql = KeGetCurrentIrql(); - if(CurrIrql < DISPATCH_LEVEL) - { - KeRaiseIrql(DISPATCH_LEVEL, &CurrIrql); - - Status = N6CSet_DOT11_CIPHER_KEY_MAPPING_KEY( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - - KeLowerIrql(CurrIrql); - } - } - break; - - // Added by Annie, 2006-10-09. - case OID_DOT11_PMKID_LIST: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_PMKID_LIST, 0x%08x\n", Oid) ); - { - PDOT11_PMKID_LIST pPMKIDList; - - if (InformationBufferLength < (ULONG)FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs)) - { - *BytesNeeded = FIELD_OFFSET(DOT11_PMKID_LIST, PMKIDs); - Status = NDIS_STATUS_BUFFER_OVERFLOW; - return Status; - } - - pPMKIDList = (PDOT11_PMKID_LIST)InformationBuffer; - Status = N6CSet_DOT11_PMKID_LIST( pAdapter, pPMKIDList, InformationBufferLength ); - } - break; - - case OID_RT_DISCONNECT_REQUEST: - RT_TRACE( COMP_WPS, DBG_LOUD, ("WPS Set DISCONEECT REQUEST\n") ); - { - Status = N6CSet_DOT11_DISCONNECT_REQUEST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - // Added by Annie, 2006-10-16. - case OID_RT_POWER_MGMT_REQUEST: - case OID_DOT11_POWER_MGMT_REQUEST: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_POWER_MGMT_REQUEST, 0x%08x\n", Oid) ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CSet_DOT11_POWER_MGMT_REQUEST(pAdapter, InformationBuffer); - *BytesRead = *BytesNeeded; - } - break; - - - // Added by Annie, 2006-10-18. - case OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_EXCLUDED_MAC_ADDRESS_LIST, 0x%08x\n", Oid) ); - { - return N6CSet_DOT11_EXCLUDED_MAC_ADDRESS_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - // - - // 061012, by rcnjko. - case OID_DOT11_ATIM_WINDOW: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_ATIM_WINDOW\n") ); - { - *BytesNeeded = sizeof(ULONG); - if( InformationBufferLength < *BytesNeeded ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - break; - } - - Status = N6CSet_DOT11_ATIM_WINDOW(pAdapter, InformationBuffer); - *BytesRead = *BytesNeeded; - } - break; - - // 061014, by rcnjko. - case OID_RT_OPERATIONAL_RATE_SET: - case OID_DOT11_OPERATIONAL_RATE_SET: - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_OPERATIONAL_RATE_SET\n") ); - { - return N6CSet_DOT11_OPERATIONAL_RATE_SET( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - // 2006.11.02, by shien chang. - case OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_UNREACHABLE_DETECTION_THRESHOLD:\n")); - { - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - pNdisCommon->dot11UnreachableDetectionThreshold = *((PULONG)InformationBuffer); - *BytesRead = *BytesNeeded; - } - break; - - case OID_DOT11_UNICAST_USE_GROUP_ENABLED: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_UNICAST_USE_GROUP_ENABLED:\n")); - { - *BytesNeeded = sizeof(BOOLEAN); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - pNdisCommon->dot11UnicastUseGroupEnabled = *((PBOOLEAN)InformationBuffer); - *BytesRead = *BytesNeeded; - } - break; - - case OID_DOT11_HIDDEN_NETWORK_ENABLED: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_HIDDEN_NETWORK_ENABLED:\n")); - { - *BytesNeeded = sizeof(BOOLEAN); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - pMgntInfo->bHiddenSSIDEnable = *((PBOOLEAN)InformationBuffer); - *BytesRead = *BytesNeeded; - } - break; - - case OID_DOT11_CURRENT_CHANNEL: - case OID_DOT11_CURRENT_FREQUENCY: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_CURRENT_CHANNEL:\n")); - { - u1Byte btChannel; - - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_INVALID_LENGTH; - } - - btChannel = (u1Byte)(*(PULONG)InformationBuffer); - if (MgntActSet_802_11_REG_20MHZ_CHANNEL_AND_SWITCH(pAdapter, btChannel) != TRUE) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("!!! Failed to switch to the channel, %d\n", btChannel)); - } - } - break; - - case OID_DOT11_MULTICAST_LIST: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_MULTICAST_LIST:\n")); - { - Status = N6CSet_DOT11_MULTICAST_LIST( - pAdapter, - (pu1Byte)InformationBuffer, - (u4Byte)InformationBufferLength, - BytesRead, - BytesNeeded); - } - break; - - case OID_RT_PRO_SET_TX_POWER_FOR_ALL_RATE: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_SET_TX_POWER_FOR_ALL_RATE.\n")); - { - ULONG ulTxPowerData; - - // Verify input paramter. - if(InformationBufferLength < 3*sizeof(UCHAR)) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = 3*sizeof(UCHAR); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_SET_TX_POWER_FOR_ALL_RATE. return!!\n")); - return Status; - } - // Get Type/Path/TxPower. - ulTxPowerData = *((ULONG*)InformationBuffer); - - // Caller should use OID_RT_PRO8187_WI_POLL to get result. - if(!DbgSetTxPowerForAllRate(GetDefaultAdapter(pAdapter), ulTxPowerData)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_SET_TX_POWER_FOR_ALL_RATE.\n")); - break; - - //Add just for test. by luke - case OID_RT_11N_IQK_TRIGGER: - { - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - - RT_TRACE(COMP_OID_SET,DBG_LOUD,("set oid OID_RT_11N_IQK_TRIGGER\n")); - PlatformScheduleWorkItem(&(pHalData->IQKTriggerWorkItem)); - } - break; - - case OID_RT_PRO_TRIGGER_LCK: - { - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - - RT_TRACE(COMP_OID_SET,DBG_LOUD,("set oid OID_RT_PRO_TRIGGER_LCK\n")); - PlatformScheduleWorkItem(&(pHalData->LCKTriggerWorkItem)); - } - break; - - case OID_RT_PRO_TRIGGER_DPK: - { - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - RT_TRACE(COMP_OID_SET,DBG_LOUD,("set oid OID_RT_PRO_TRIGGER_DPK\n")); - PlatformScheduleWorkItem(&(pHalData->DPKTriggerWorkItem)); - } - break; - - // This is added for nested OID from CcxHandleNicSpecificExtension() - case OID_DOT11_CURRENT_PHY_ID: - { - ULONG PhyId = *(PULONG)InformationBuffer; - - *BytesNeeded = sizeof(ULONG); - if ( InformationBufferLength < *BytesNeeded ) - { - return NDIS_STATUS_BUFFER_OVERFLOW; - } - - if ( PhyId >= pAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ) - { - *BytesRead = 0; - return NDIS_STATUS_INVALID_DATA; - } - else - { - pAdapter->pNdisCommon->dot11SelectedPhyId = PhyId; - pAdapter->pNdisCommon->pDot11SelectedPhyMIB = pAdapter->pNdisCommon->pDot11PhyMIBs + PhyId; - *BytesRead = *BytesNeeded; - } - } - break; - - // This is added for nested OID from CcxHandleNicSpecificExtension() - case OID_DOT11_DESIRED_PHY_LIST: - { - Status = N6CSet_DOT11_DESIRED_PHY_LIST( - pAdapter, - InformationBuffer, - InformationBufferLength, - BytesRead, - BytesNeeded - ); - } - break; - - // This is added for nested OID from CcxHandleNicSpecificExtension() - case OID_DOT11_AUTO_CONFIG_ENABLED: - { - u4Byte tempAutoConfigEnable = 0; - *BytesNeeded = sizeof(ULONG); - - if ( InformationBufferLength < *BytesNeeded ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_DOT11_AUTO_CONFIG_ENABLED: Invalid length\n")); - return NDIS_STATUS_INVALID_LENGTH; - } - - tempAutoConfigEnable=ALLOWED_AUTO_CONFIG_FLAGS & *((PULONG)InformationBuffer); - pAdapter->pNdisCommon->dot11AutoConfigEnabled = tempAutoConfigEnable; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<===Set OID_DOT11_AUTO_CONFIG_ENABLED:\n")); - } - break; - - default: - Status = NDIS_STATUS_INVALID_OID; - break; - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<==== N6CSetInformation, OID=0x%08x, Status=0x%X\n", Oid, Status)); - return Status; -} - - -NDIS_STATUS -N6CQuerySetInformation( - IN PADAPTER Adapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS ndisStatus; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - *BytesWritten = 0; - *BytesRead = 0; - *BytesNeeded = 0; - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("====> N6CQuerySetInformation, OID=0x%08x\n", Oid )); - - - ndisStatus = WAPI_EventQuerySetInformation( - Adapter, - Oid, - InformationBuffer, - InputBufferLength, - OutputBufferLength, - MethodId, - BytesWritten, - BytesRead, - BytesNeeded - ); - if (ndisStatus != NDIS_STATUS_INVALID_OID) - { - // - // This Oid has been responded to by the MpEventQueryInformation function - // We will not handle this Oid and return to the OS. - // - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("==>Oid intercepted by WAPI_EventQuerySetInformation! Status 0x%08x\n", ndisStatus)); - return ndisStatus; - } - - //CCX Add for process IHV DLL Set OID down to Driver - ndisStatus = NDIS_STATUS_SUCCESS; - if (ndisStatus != NDIS_STATUS_INVALID_OID) - { - // - // This Oid has been responded to by the MpEventQueryInformation function - // We will not handle this Oid and return to the OS. - // - RT_TRACE(COMP_CCX, DBG_TRACE, ("Oid intercepted by MpEventQuerySetInformation! Status 0x%08x\n", ndisStatus)); - return ndisStatus; - } - - switch (Oid) - { - default: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("Query/Set OID_Unknown: %08X\n", Oid)); - ndisStatus = NDIS_STATUS_INVALID_OID; - break; - - case OID_RT_WFD_REQUEST: - rtStatus = WFD_Reqeust( - Adapter, - InformationBuffer, - InputBufferLength, - OutputBufferLength, - BytesWritten, - BytesRead, - BytesNeeded); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("OID_RT_WFD_REQUEST: rtStatus = %d\n", rtStatus)); - ndisStatus = NdisStatusFromRtStatus(rtStatus); - break; - - case OID_RT_P2P_SERVICE_REQUEST: - rtStatus = P2PSvc_Request( - Adapter, - InformationBuffer, - InputBufferLength, - OutputBufferLength, - BytesWritten, - BytesRead, - BytesNeeded); - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("OID_RT_P2P_SERVICE_REQUEST: rtStatus = %d\n", rtStatus)); - ndisStatus = NdisStatusFromRtStatus(rtStatus); - break; - } - - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("<==== N6CQuerySetInformation, OID=0x%08x, Status=0x%X\n", Oid, ndisStatus)); - return ndisStatus; -} - -// -// Description: -// Complete the pended OID. -// Arguments: -// Adapter - -// NIC context -// OidType - -// The OidType is verified if the pended OID is which we want to complete. -// ndisStatus - -// The ndis status included in the completion. -// By Bruce, 2008-10-29. -// -BOOLEAN -N6CompletePendedOID( - IN PADAPTER Adapter, - IN RT_PENDED_OID_TYPE OidType, - IN NDIS_STATUS ndisStatus - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bComplete = FALSE; - NDIS_OID Oid; - PNDIS_OID_REQUEST tmpPendedRequest = NULL; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===>N6CompletePendedOID \n" )); - PlatformAcquireSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - if(pNdisCommon->PendedRequest == NULL) - { - PlatformReleaseSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<===N6CompletePendedOID \n" )); - return FALSE; - } - - //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===>N6CompletePendedOID PendedRequest %08X \n",pNdisCommon->PendedRequest )); - Oid = pNdisCommon->PendedRequest->DATA.METHOD_INFORMATION.Oid; - - // - // Make sure we never complete the OID which is not really pended and never complete the one - // that the procedure is not done. - // - switch(OidType) - { - case RT_PENDED_OID_DONT_CARE: - bComplete = TRUE; - break; - - case RT_PENDED_OID_RF_STATE: - //if(Oid == (OID_RT_RF_OFF || OID_DOT11_NIC_POWER_STATE)) - if(Oid == OID_DOT11_NIC_POWER_STATE) - bComplete = TRUE; - break; - - case RT_PENDED_OID_PNP: - if(Oid == OID_PNP_SET_POWER) - bComplete = TRUE; - break; - - case RT_PENDED_OID_CREATE_DELETE_MAC: - if(Oid == OID_DOT11_CREATE_MAC || Oid == OID_DOT11_DELETE_MAC) - bComplete = TRUE; - break; - - default: - break; - } - - if(bComplete) - { - tmpPendedRequest = pNdisCommon->PendedRequest; - pNdisCommon->PendedRequest = NULL; - } - - PlatformReleaseSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - - if(bComplete) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("N6CompletePendedOID(): Complete pended OID(0x%08X)\n", Oid)); - - N6C_DOT11_DUMP_OID(Oid); - - RT_CLEAR_DRV_STATE(Adapter, DrvStateNdisReqPended); - - NdisOIDHistoryUpdate(Adapter, tmpPendedRequest, RT_OID_HISTORY_COMPLETE); - - NdisMOidRequestComplete( - pNdisCommon->hNdisAdapter, - tmpPendedRequest, - ndisStatus); - - return TRUE; - } - else - { - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - ("N6CompletePendedOID(): Pended OID(0x%08X) does not match input OID type(%d)\n", - Oid, OidType)); - return FALSE; - } -} - -NDIS_STATUS -N6CProcessOidRequest( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest, - IN BOOLEAN bSelfMadeNdisRequest -) -{ - PADAPTER pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)NdisRequest->PortNumber); - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_RECOGNIZED; - u2Byte i = 0; - u4Byte portType = 0; - - // OID callback functions ------------------------------------------------------------ - // Hope: Let all NDIS OIDs be handled here with one entry point - portType = pTargetAdapter->pNdis62Common->PortType; - - for(i = 0 ; i < sizeof(RT_SUPPORT_OIDs)/sizeof(RT_OID_ENTRY); i++) - { - if(NdisRequest->DATA.QUERY_INFORMATION.Oid == RT_SUPPORT_OIDs[i].Oid) - { - if( (NdisRequest->RequestType == NdisRequestQueryInformation)|| - (NdisRequest->RequestType == NdisRequestQueryStatistics) ) - { - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, - ("[OID], %s to Port(%d) PortType(%d)\n", RT_SUPPORT_OIDs[i].szID, NdisRequest->PortNumber, portType)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("[OID], %s to Port(%d) PortType(%d)\n", RT_SUPPORT_OIDs[i].szID, NdisRequest->PortNumber, portType)); - } - - ndisStatus = RT_SUPPORT_OIDs[i].Func(pAdapter, NdisRequest); - - return ndisStatus; - } - } - // ------------------------------------------------------------------------------- - - - - // =============================================================== - // Hope: Let the following be only customized oids: However, it is not now: 2012.06.08 - // =============================================================== - - - switch (NdisRequest->RequestType) - { - case NdisRequestQueryInformation: - case NdisRequestQueryStatistics: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CProcessOidRequest :: Query OID: 0x%08x\n", NdisRequest->DATA.QUERY_INFORMATION.Oid)); - ndisStatus = N6CQueryInformation( - pTargetAdapter, - NdisRequest->DATA.QUERY_INFORMATION.Oid, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded - ); - break; - - case NdisRequestSetInformation: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6CProcessOidRequest :: Set OID: 0x%08x\n", NdisRequest->DATA.SET_INFORMATION.Oid)); - ndisStatus = N6CSetInformation( - pTargetAdapter, - NdisRequest->DATA.SET_INFORMATION.Oid, - NdisRequest->DATA.SET_INFORMATION.InformationBuffer, - NdisRequest->DATA.SET_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.SET_INFORMATION.BytesNeeded - ); - break; - - case NdisRequestMethod: - RT_TRACE(COMP_OID_QUERY, DBG_LOUD, ("N6CProcessOidRequest :: QSset OID: 0x%08x\n", NdisRequest->DATA.METHOD_INFORMATION.Oid)); - ndisStatus = N6CQuerySetInformation( - pTargetAdapter, - NdisRequest->DATA.METHOD_INFORMATION.Oid, - NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.MethodId, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesRead, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded - ); - break; - - default: - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - break; - } - - return ndisStatus; -} - -NDIS_STATUS -N6C_OID_DOT11_FLUSH_BSS_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - - if(NdisRequest->RequestType == NdisRequestQueryInformation || - NdisRequest->RequestType == NdisRequestQueryStatistics || - NdisRequest->RequestType == NdisRequestMethod) - return NDIS_STATUS_NOT_SUPPORTED; - - RT_TRACE(COMP_MLME,DBG_LOUD, ("====>N6C_OID_DOT11_FLUSH_BSS_LIST\n")); - - // when flush, should set this variable. - pMgntInfo->bFlushScanList = TRUE; - - // - // Clear content of bssDesc[]. - // - PlatformZeroMemory( pDefaultMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC ); - pDefaultMgntInfo->NumBssDesc = 0; - // - // Clear content of bssDesc4Query[]. - // - PlatformZeroMemory( pDefaultMgntInfo->bssDesc4Query, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC); - pDefaultMgntInfo->NumBssDesc4Query = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("[REDX]: N6C_OID_DOT11_FLUSH_BSS_LIST(), clear NumBssDesc4Query\n")); - MgntClearRejectedAsocAP(pDefaultAdapter); - - if(pDefaultAdapter != pAdapter) - { - PlatformZeroMemory( pMgntInfo->bssDesc4Query, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC); - pMgntInfo->NumBssDesc4Query = 0; - RT_TRACE(COMP_SCAN, DBG_LOUD, - ("[REDX]: N6C_OID_DOT11_FLUSH_BSS_LIST(), clear NumBssDesc4Query Non def adapter\n")); - PlatformZeroMemory( pMgntInfo->bssDesc, sizeof(RT_WLAN_BSS)*MAX_BSS_DESC ); - pMgntInfo->NumBssDesc = 0; - MgntClearRejectedAsocAP(pAdapter); - } - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -N6C_OID_DOT11_SCAN_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PADAPTER pDevicePort = NULL; - PADAPTER pClientPort = NULL; - PADAPTER pTargetAdapter = NULL; - PP2P_INFO pP2PInfo = NULL; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6C_OID_DOT11_SCAN_REQUEST(): Oid(%#x)--->\n", NdisRequest->DATA.METHOD_INFORMATION.Oid)); - N6C_DOT11_DUMP_OID(NdisRequest->DATA.METHOD_INFORMATION.Oid); - - // - // 2013/02/05 MH Add for NEC special request in Vista. When stram mode is - // enabled do not scan. - // - - if(!N6_INIT_READY(pAdapter)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6C_OID_DOT11_SCAN_REQUEST(): return by !N6_INIT_READY\n")); - return NDIS_STATUS_DOT11_MEDIA_IN_USE; - } - - if(NdisRequest->RequestType == NdisRequestQueryInformation || - NdisRequest->RequestType == NdisRequestQueryStatistics || - NdisRequest->RequestType == NdisRequestMethod) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6C_OID_DOT11_SCAN_REQUEST(): return by NDIS_STATUS_NOT_SUPPORTED\n")); - return NDIS_STATUS_NOT_SUPPORTED; - } - -{ - // Reject the scan request to the Wi-Fi direct port ----------------------------- - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte) NdisRequest->PortNumber); - - switch(pTargetAdapter->pNdis62Common->PortType) - { - case EXT_P2P_DEVICE_PORT: - case EXT_P2P_ROLE_PORT: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: NDIS_STATUS_INVALID_OID\n", __FUNCTION__)); - return NDIS_STATUS_INVALID_OID; - } - // ---------------------------------------------------------------------- - - if(NdisRequest->PortNumber != 0) - { - RT_TRACE(COMP_OID_SET , DBG_LOUD, ("%s: NDIS_STATUS_INVALID_OID because of not port 0.\n", __FUNCTION__)); - return NDIS_STATUS_INVALID_OID; - } - - // Block scan for a while if P2P handshake is going now. - if(GetFirstClientPort(pAdapter) || GetFirstGOPort(pAdapter)) - { - if(pDefaultAdapter->MgntInfo.NumBssDesc4Query == 0) - { - // OID_DOT11_FLUSH_BSS_LIST may be issued for obtaining all-new scan list. - // No Bss in the BssList: Do the scanning if possible. - } - else if(0 != pTargetAdapter->LastScanCompleteTime && PlatformGetCurrentTime() < pTargetAdapter->LastScanCompleteTime + P2P_BLOCK_NORMAL_SCAN_PERIOD) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("[WARNING] Last scan complete time less than %d us, return NDIS_STATUS_DOT11_MEDIA_IN_USE!\n", P2P_BLOCK_NORMAL_SCAN_PERIOD)); - - return NDIS_STATUS_DOT11_MEDIA_IN_USE; - } - } - - // Only scan in the idle device port ---------------------------- - pDevicePort = GetFirstDevicePort(pAdapter); - - if(pDevicePort != NULL) - { - pP2PInfo = GET_P2P_INFO(pDevicePort); - - if(pP2PInfo->State != P2P_STATE_INITIALIZED /*&& pP2PInfo->State != P2P_STATE_DISABLED*/) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: NDIS_STATUS_DOT11_MEDIA_IN_USE\n", __FUNCTION__)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s: pP2PInfo->State: %d portnumber %d porttype %d portrole %d\n", __FUNCTION__, pP2PInfo->State, pDevicePort->pNdis62Common->PortNumber, pDevicePort->pNdis62Common->PortType, pP2PInfo->Role)); - return NDIS_STATUS_DOT11_MEDIA_IN_USE; - } - -// if(MgntScanInProgress(&pDefaultAdapter->MgntInfo)) - if(!pDefaultAdapter->MgntInfo.bScanInProgress && pP2PInfo->pAdapter->MgntInfo.bScanInProgress) - { - // Postpone the extended listening for a while - P2PExtendedListenResetCounter(pP2PInfo); - - // Stop potential device port extended listening - P2PScanListCeaseScan(pP2PInfo); - - // Delay for a while for running ScanTimer callback by context switch - // + Otherwise, this scan will be skipped due to MgntScanInProgress flag - delay_ms(20); - } - } - - // Do not scan in Waiting Wps Ready - pClientPort = GetFirstClientPort(pAdapter); - if(pClientPort != NULL) - { - pP2PInfo = GET_P2P_INFO(pClientPort); - - if(P2P_CLIETN_JOIN_GROUP_WPS_STATE_NONE != pP2PInfo->ClientJoinGroupContext.WpsState) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("NDIS_STATUS_DOT11_MEDIA_IN_USE\n")); - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("pP2PInfo->ClientJoinGroupContext.WpsState = %d\n", pP2PInfo->ClientJoinGroupContext.WpsState)); - //DbgPrint("<===N6C_OID_DOT11_SCAN_REQUEST(), !NDIS_STATUS_DOT11_MEDIA_IN_USE 111\n"); - return NDIS_STATUS_DOT11_MEDIA_IN_USE; - } - } - // ------------------------------------------------------- -} - - - - N6WriteEventLog(pAdapter, RT_SCAN_START, 0); - - ndisStatus = N6CSet_DOT11_SCAN_REQUEST(pDefaultAdapter, - NdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, - NdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.QUERY_INFORMATION.BytesNeeded); - - //DbgPrint("<===N6C_OID_DOT11_SCAN_REQUEST(), !ndisStatus %x\n",ndisStatus); - - return ndisStatus; - -} - -NDIS_STATUS -N6C_OID_DOT11_ENUM_BSS_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest) -{ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("[REDX]: N6C_OID_DOT11_ENUM_BSS_LIST() ===>\n")); - if(NdisRequest->RequestType == NdisRequestSetInformation || - NdisRequest->RequestType == NdisRequestQueryInformation || - NdisRequest->RequestType == NdisRequestQueryStatistics) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("[REDX]: N6C_OID_DOT11_ENUM_BSS_LIST() <===, return by NOT_SUPPORTED\n")); - return NDIS_STATUS_NOT_SUPPORTED; - } - - return N6CQuerySet_DOT11_ENUM_BSS_LIST( - GetDefaultAdapter(pAdapter), - NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - NdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesWritten, - (PULONG)&NdisRequest->DATA.METHOD_INFORMATION.BytesNeeded); -} - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.h b/network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.h deleted file mode 100644 index 183c010d..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/N6C_Req.h +++ /dev/null @@ -1,151 +0,0 @@ -#ifndef __INC_N6C_REQ_H -#define __INC_N6C_REQ_H - -#pragma pack(1) - -#define NIC_DRIVER_VERSION60 0x0600 -#define NIC_HEADER_SIZE 24 // short header size -#define NIC_MAX_PACKET_SIZE (sMaxMpduLng - 4) -#define NIC_MAX_SEND_PACKETS 10 // max number of send packets the MiniportSendPackets function can accept - -// For Meeting House, Realtek Vender ID querying. Added by Annie, 2005-07-20. -#define REALTEK_VENDER_ID 0x004c0e00 - -#define NIC_SUPPORTED_FILTERS \ - NDIS_PACKET_TYPE_DIRECTED | \ - NDIS_PACKET_TYPE_MULTICAST | \ - NDIS_PACKET_TYPE_ALL_MULTICAST | \ - NDIS_PACKET_TYPE_BROADCAST | \ - NDIS_PACKET_TYPE_PROMISCUOUS | \ - NDIS_PACKET_TYPE_802_11_RAW_DATA | \ - NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT | \ - NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT | \ - NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT | \ - NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT | \ - NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT | \ - NDIS_PACKET_TYPE_802_11_RAW_MGMT | \ - NDIS_PACKET_TYPE_802_11_DIRECTED_CTRL | \ - NDIS_PACKET_TYPE_802_11_BROADCAST_CTRL | \ - NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL - - - -// -// (Ported from MS's code, Annie, 2006-10-11.) -// Macros for assigning and verifying NDIS_OBJECT_HEADER -// -#define N6_ASSIGN_OBJECT_HEADER(_header, _type, _revision, _size) \ - (_header).Type = _type; \ - (_header).Revision = _revision; \ - (_header).Size = _size; - -// -// (Ported from MS's code, Annie, 2006-10-11.) -// With NDIS 6.0 header versioning, the driver should allow higher versions -// of structures to be set. This macro verifies that for sets the version is atleast -// the expected one and size is greater or equal to required -// -#define N6_VERIFY_OBJECT_HEADER_DEFAULT(_header, _type, _revision, _size) \ - (((_header).Type == _type) && \ - ((_header).Revision >= _revision) && \ - ((_header).Size >= _size)) -// - - -// For SW AP, see RtlFunc.h of the UI library, RtlLib. -// 2005.06.09, by rcnjko. -typedef struct _RtlLibAssociateEntry -{ - BOOLEAN bUsed; - UCHAR Sum; - UCHAR MacAddr[6]; - ULONG AuthAlg; // 0:Open, 1:Shared - UCHAR AuthPassSeq; // 2,4 - BOOLEAN bAssociated; - USHORT AID; - LARGE_INTEGER LastActiveTime; -}RtlLibAssociateEntry, *PRtlLibAssociateEntry; - -// For SW AP WPA-PSK. -// 2005.09.08, by rcnjko. -typedef struct _RtlLibPassphrase -{ - unsigned int Length; // Valid passphrase length : 8 ~ 63 characters, 64 is reserved for hex representation of 32 byte PSK. - char Passphrase[64]; -} RtlLibPassphrase, *PRtlLibPassphrase; - -// Fix IE length, include timestamp(8), beacon interval(2), capability(2). -typedef struct _RT_FIXED_IE_FIELD -{ - u8Byte Timestamp; - u2Byte BeaconInterval; - u2Byte Capability; -} RT_FIXED_IE_FIELD, *PRT_FIXED_IE_FIELD; - -#pragma pack() - -NDIS_STATUS -N6CQueryInformation( - IN PADAPTER pAdapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded); - -NDIS_STATUS -N6CSetInformation( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded); - -NDIS_STATUS -N6CQuerySetInformation( - IN PADAPTER Adapter, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InputBufferLength, - IN ULONG OutputBufferLength, - IN ULONG MethodId, - OUT PULONG BytesWritten, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); - - -NDIS_STATUS -N6CProcessOidRequest( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest, - IN BOOLEAN bSelfMadeNdisRequest -); - - -BOOLEAN -N6CompletePendedOID( - IN PADAPTER Adapter, - IN RT_PENDED_OID_TYPE OidType, - IN NDIS_STATUS ndisStatus - ); - -NDIS_STATUS -N6C_OID_DOT11_FLUSH_BSS_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest - ); - -NDIS_STATUS -N6C_OID_DOT11_SCAN_REQUEST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest - ); - -NDIS_STATUS -N6C_OID_DOT11_ENUM_BSS_LIST( - PADAPTER pAdapter, - PNDIS_OID_REQUEST NdisRequest); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.c b/network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.c deleted file mode 100644 index 0eb30b9e..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.c +++ /dev/null @@ -1,6119 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: Ndis5Common.c -// Description: NDIS5.x common helper functions. -// -// Author: rcnjko -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" - - -#if WPP_SOFTWARE_TRACE -#include "Ndis6Common.tmh" -#endif - -#include "CustomOid.h" - -WDI_TXRX_STATISTICS GLWdiTxRxStatistics; -u4Byte GLWdiTestType=0; -WDI_CMD_STATISTICS GLWdiCmdStatistics; - -typedef struct _OID -{ - NDIS_OID Oid; - NDIS_REQUEST_TYPE Type; -} OID; - -static OID NdisInitPendingOid[] = { - {OID_DOT11_SCAN_REQUEST, NdisRequestMethod}, - {OID_DOT11_SCAN_REQUEST, NdisRequestSetInformation}, - {OID_DOT11_NIC_POWER_STATE, NdisRequestMethod}, - {OID_DOT11_NIC_POWER_STATE, NdisRequestSetInformation}, - {OID_DOT11_NIC_POWER_STATE, NdisRequestQueryInformation}, - {OID_DOT11_START_AP_REQUEST, NdisRequestMethod}, - {OID_DOT11_START_AP_REQUEST, NdisRequestSetInformation}}; - -// -// define local function prototype. -// -static VOID -InitializeAdapterCommon( - IN PADAPTER pAdapter - ); - -VOID -N6CopyPacket( - IN PNET_BUFFER pNetBuffer, - OUT PRT_TX_LOCAL_BUFFER pLocalBuffer, - OUT pu2Byte pPktLength - ) -{ - PMDL pCurrMdl, pNextMdl; - PUCHAR ptr; - UINT BufLen; - UINT RemainMdlLength; - - RemainMdlLength = NET_BUFFER_DATA_LENGTH(pNetBuffer); - - // Initialize packet lenth coalesced. - *pPktLength = 0; - - // Enumerate the list of MDL. - for (pCurrMdl = NET_BUFFER_CURRENT_MDL(pNetBuffer); - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - - // Prefast warning C30030: Warning: Allocating executable memory via specifying a MM_PAGE_PRIORITY type without a bitwise OR with MdlMappingNoExecute - // false positive and currently it is safe here, so disable the warning -#pragma warning ( disable:30030 ) - ptr = (pCurrMdl == NET_BUFFER_CURRENT_MDL(pNetBuffer)) ? - ((PUCHAR)MmGetSystemAddressForMdlSafe(pCurrMdl, NormalPagePriority))+NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer) : - MmGetSystemAddressForMdlSafe(pCurrMdl, NormalPagePriority); - BufLen = (pCurrMdl == NET_BUFFER_CURRENT_MDL(pNetBuffer)) ? - MmGetMdlByteCount(pCurrMdl)-NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer) : - MmGetMdlByteCount(pCurrMdl); - - if(RemainMdlLength < BufLen) - { - BufLen = RemainMdlLength; - RemainMdlLength = 0; - } - else - { - RemainMdlLength -= BufLen; - } - - // Copy the data. - if(BufLen > 0) - { - PlatformMoveMemory( - (PVOID)( pLocalBuffer->Buffer.VirtualAddress + *pPktLength ), - ptr, - BufLen); - *pPktLength += (u2Byte)BufLen; - } - } -} - - - -// -// Description: -// Parse the file content into the lines of buffer, pBufOfLines, -// which is a 2-dimention array, for example, -// u1Byte pBufOfLines[nMaxNumLine][nMaxByteCntLine]. -// -VOID -ParseFileBufToLines( - IN PVOID pAdapter, - IN pu1Byte pucFilePtr, - IN u4Byte nFileLen, - IN OUT pu1Byte pBufOfLines, - IN s4Byte nMaxNumLine, - IN s4Byte nMaxByteCntLine, - OUT ps4Byte pnNumLinesRead - ) -{ - int nNumLinesRead; - int nIndex; - pu1Byte pucBuffer; - - BOOLEAN bExceedBytesOfLine; - u1Byte szEnd[4] = {'0', 'x', 'f', 'f'}; - u1Byte szEnd_88e[5] = {'0', 'x', 'f', 'f', 'f'}; - - pu1Byte pFileEnd = pucFilePtr + nFileLen; - BOOLEAN bReachFileEnd = FALSE; - - RT_TRACE(COMP_INIT, DBG_TRACE, ("----> ParseFileBufToLines()\n")); - - *pnNumLinesRead = nNumLinesRead = 0; - - while((*pucFilePtr != '\0') && (pucFilePtr != pFileEnd)) - { - // Read a line from file and copy into buffer. - pucBuffer = (pBufOfLines + (nMaxByteCntLine * nNumLinesRead)); - nIndex = 0; - bExceedBytesOfLine = FALSE; - while((*pucFilePtr != '\0') && (*pucFilePtr != '\r') && (*pucFilePtr != '\n')) - { - if(nIndex < (nMaxByteCntLine-1)) // 1 is reserved for EOS. - { - pucBuffer[nIndex] = *pucFilePtr; - pucFilePtr++; - nIndex++; - } - else - { - // Skip the remainding bytes if this line exceeds max byte count of a line, nMaxByteCntLine. - pucFilePtr++; - bExceedBytesOfLine = TRUE; - } - - if(pucFilePtr == pFileEnd) - { - bReachFileEnd = TRUE; - break; - } - } - - if(nIndex > 0) - { - // Append EOS to the line read and enumerate to next line. - pucBuffer[nIndex] = '\0'; - nNumLinesRead++; - RT_TRACE(COMP_INIT, DBG_TRACE, ("%04d: \"%s\"\n", nNumLinesRead, pucBuffer)); - - // Message indication: Exceed Max Byte count of line. - if(bExceedBytesOfLine) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("ParseFileBufToLines(): Exceed nMaxByteCntLine! nNumLinesRead:%d pucBuffer: \"%s\"\n", nNumLinesRead, pucBuffer)); - } - - // Reach file end. End of reading/parsing process. - if(bReachFileEnd) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("ParseFileBufToLines(): Reach File End!!\n")); - break; - } - - { - // According to the format of configuration file, Offset 0xff is EndOfLine - if(!PlatformCompareMemory(pucBuffer, szEnd_88e, sizeof(szEnd_88e))) - { - RT_TRACE(COMP_INIT, DBG_TRACE, ("ParseFileBufToLines():End Of configuration file, break\n")); - break; - } - } - } - - // Goto next line. - pucFilePtr++; - } - - *pnNumLinesRead = nNumLinesRead; - - RT_TRACE(COMP_INIT, DBG_TRACE, ("<---- ParseFileBufToLines()\n")); -} - - - -// -// Description: -// Open the file specifed and read it into pBufOfLines, -// which is a 2-dimention array, for example, -// u1Byte pBufOfLines[nMaxNumLine][nMaxByteCntLine]. -// -// Note: -// In NDIS5, the file to open shall be placed at the directory the same as -// driver binary. -// -RT_STATUS -PlatformReadFile( - IN PVOID Adapter, - IN ps1Byte szFileName, - IN OUT pu1Byte pBufOfLines, - IN s4Byte nMaxNumLine, - IN s4Byte nMaxByteCntLine, - OUT ps4Byte pnNumLinesRead - ) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - NDIS_STRING NdisStrFileName; - NDIS_PHYSICAL_ADDRESS ndisPhyAddr; - NDIS_STATUS ndisStatus; - NDIS_HANDLE hFileHandle; - UINT ulFileLength; - pu1Byte pMappedFile = NULL; - - // Check input parameters. - if(szFileName == NULL) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformReadFile(): szFileName should not be NULL!\n")); - return rtStatus; - } - if(pBufOfLines == NULL) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformReadFile(): pBufOfLines should not be NULL!\n")); - return rtStatus; - } - - // Convert szFileName to NDIS_STRING. - NdisInitializeString(&NdisStrFileName, (PUCHAR)szFileName); - if(NdisStrFileName.Buffer != NULL && NdisStrFileName.Length > 0) - { - // Open the file specified. - ndisPhyAddr.LowPart = ndisPhyAddr.HighPart = -1; - NdisOpenFile(&ndisStatus, - &hFileHandle, - &ulFileLength, - &NdisStrFileName, - ndisPhyAddr); - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - // Map the file into memory. - NdisMapFile(&ndisStatus, (PVOID *)(&pMappedFile), hFileHandle); - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - // Read the file into pBufOfLines. - ParseFileBufToLines(Adapter, pMappedFile, ulFileLength, pBufOfLines, nMaxNumLine, nMaxByteCntLine, pnNumLinesRead); - - // Return Success only when Config Success - rtStatus = RT_STATUS_SUCCESS; - - // Relase the memory for mapping the file. - NdisUnmapFile(hFileHandle); - } - else - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("PlatformReadFile(): failed to map the file, %s!, ndisStatus: %#X\n", szFileName, ndisStatus)); - } - - // Close the file. - NdisCloseFile(hFileHandle); - } - else - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("PlatformReadFile(): failed to open the file, %s!, ndisStatus: %#X\n", szFileName, ndisStatus)); - } - - // Release the NDIS_STRING allocated via NdisInitializeString(). - NdisFreeString(NdisStrFileName); - } - else - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("PlatformReadFile(): NdisInitializeString() failed! szFileName: %s\n", szFileName)); - } - - return rtStatus; -} - -RT_STATUS -PlatformOpenFile( - IN PVOID Adapter, - IN ps1Byte szFileName, - IN OUT PRT_FILE_HANDLER pFileHandler - ) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - NDIS_STRING NdisStrFileName; - NDIS_PHYSICAL_ADDRESS ndisPhyAddr; - NDIS_STATUS ndisStatus; - pu1Byte pMappedFile = NULL; - - - // Check input parameters. - if(szFileName == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("PlatformOpenFile(): szFileName should not be NULL!\n")); - return rtStatus; - } - - // Convert szFileName to NDIS_STRING. - NdisInitializeString(&NdisStrFileName, (PUCHAR)szFileName); - if(NdisStrFileName.Buffer != NULL && NdisStrFileName.Length > 0) - { - // Open the file specified. - ndisPhyAddr.LowPart = ndisPhyAddr.HighPart = -1; - NdisOpenFile(&ndisStatus, - &(pFileHandler->FileHandler), - &(pFileHandler->FileLength), - &NdisStrFileName, - ndisPhyAddr); - - NdisFreeString(NdisStrFileName); - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - rtStatus = RT_STATUS_SUCCESS; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("PlatformOpenFile(): failed to open the file, %s!, ndisStatus: %#X\n", szFileName, ndisStatus)); - } - - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("PlatformOpenFile(): NdisInitializeString() failed! szFileName: %s\n", szFileName)); - } - - return rtStatus; -} - -RT_STATUS -PlatformMapFile( - IN OUT PRT_FILE_HANDLER pFileHandler - ) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - NDIS_STATUS ndisStatus; - - - // Map the file into memory. - NdisMapFile(&ndisStatus, (PVOID *)(&(pFileHandler->MappedFile)), pFileHandler->FileHandler); - if(ndisStatus == NDIS_STATUS_SUCCESS) { - rtStatus = RT_STATUS_SUCCESS; - } - else { - RT_TRACE(COMP_INIT, DBG_LOUD, ("PlatformMapFile(): failed to map the file!, ndisStatus: %#X\n", ndisStatus)); - } - - return rtStatus; -} - -VOID -PlatformUnMapFile( - IN OUT PRT_FILE_HANDLER pFileHandler - ) -{ - // Relase the memory for mapping the file. - NdisUnmapFile(pFileHandler->FileHandler); -} - -VOID -PlatformCloseFile( - IN OUT PRT_FILE_HANDLER pFileHandler - ) -{ - // Relase the memory for mapping the file. - NdisCloseFile(pFileHandler->FileHandler); -} - -// -// Description: -// Indication for PHY power state changed. -// 061013, by rcnjko. -// -VOID -N6IndicateCurrentPhyPowerState( - IN PADAPTER pAdapter, - IN ULONG phyId - ) -{ - RT_RF_POWER_STATE rfState; - DOT11_PHY_STATE_PARAMETERS phyStateParams; - - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pDefaultMgnt = &pDefaultAdapter->MgntInfo; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> N6IndicateCurrentPhyPowerState()\n")); - - //Add for win 7, to avoid get the wrong Hw reg. By Maddest, 05112009 - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - - if(pDefaultMgnt->RegRfOff) - { - RT_TRACE(COMP_MLME,DBG_LOUD,("N6IndicateCurrentPhyPowerState: RegRFOFF CASE \n")); - rfState = eRfOff; - pAdapter->MgntInfo.RfOffReason |= RF_CHANGE_BY_SW; - } - - if(rfState == eRfOff) - { - if (pAdapter->MgntInfo.RfOffReason >= RF_CHANGE_BY_HW) - { - rfState = eRfOff; - } - else - { - rfState = eRfOn; - } - } - PlatformZeroMemory(&phyStateParams, sizeof(DOT11_PHY_STATE_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - phyStateParams.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_STATE_PARAMETERS_REVISION_1, - sizeof(DOT11_PHY_STATE_PARAMETERS)); - - phyStateParams.uPhyId = DOT11_PHY_ID_ANY; - // - // We set following parameters to deal with mobility center - // which RF on/off option NEVER disabled issue. - // 2008.03.06. - // - if( rfState == eRfOff ) - { - phyStateParams.bHardwarePhyState =(pAdapter->MgntInfo.RfOffReason & RF_CHANGE_BY_HW) ? FALSE: TRUE; - phyStateParams.bSoftwarePhyState = (pAdapter->MgntInfo.RfOffReason & RF_CHANGE_BY_SW) ? FALSE: TRUE; - } - else - {// We set HW/SW options all available. - phyStateParams.bHardwarePhyState = TRUE; - phyStateParams.bSoftwarePhyState = TRUE; - } - - RT_TRACE(COMP_RF, DBG_LOUD, ("Indicate radio sts HW/SW=%d/%d\n", phyStateParams.bHardwarePhyState, phyStateParams.bSoftwarePhyState)); - - if( !OS_SUPPORT_WDI(pAdapter) ) - { - N6IndicateStatus( - pAdapter, - NDIS_STATUS_DOT11_PHY_STATE_CHANGED, - &phyStateParams, - sizeof(phyStateParams)); - } -} - -// -// Description: -// Write "RFOff" registry value -// 2006.11.13, by shien chang. -// -NDIS_STATUS -N6WriteRegRfPowerState( - IN PADAPTER Adapter, - IN BOOLEAN bRfOn) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("RFOff"); - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT,DBG_TRACE, ("N6WriteRegRfPowerState(): Status=%x\n", Status)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = (bRfOn ? 0 : 1); - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "Adhoc link state" registry value -// 2009.02.24, by MH. -// -NDIS_STATUS -N6WriteAdhocLinkState( - IN PADAPTER Adapter, - IN BOOLEAN AdhocLinkState) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("AdhocLinkState"); - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT,DBG_LOUD, ("N6WriteAdhocLinkState(): Status=%x\n", Status)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = ((AdhocLinkState==TRUE) ? TRUE : FALSE); - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "U2/U3 mode state" registry value -// 2012.12.12, by MH. -// -NDIS_STATUS -N6WriteUsbCurrentMode( - IN PADAPTER Adapter, - IN u1Byte UsbMode) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbCurMode"); - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s: UsbMode=%x\n", __FUNCTION__, UsbMode)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = UsbMode; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "U2/U3 mode switch counter" registry value -// 2012.12.13, by MH. -// -NDIS_STATUS -N6WriteUsbMode3To2Counter( - IN PADAPTER Adapter) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbMode3To2Cnt"); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s:\n", __FUNCTION__)); - return Status; - } - - pNdisCommon->RegUsbMode3To2Cnt++; - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = pNdisCommon->RegUsbMode3To2Cnt; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "U2/U3 mode switch counter" registry value -// 2012.12.14, by MH. -// -NDIS_STATUS -N6WriteUsbMode2To3Counter( - IN PADAPTER Adapter) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbMode2To3Cnt"); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s():\n", __FUNCTION__)); - return Status; - } - - pNdisCommon->RegUsbMode2To3Cnt++; - pNdisCommon->RegUsbMode2To3CntPrev = pNdisCommon->RegUsbMode2To3Cnt; - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = pNdisCommon->RegUsbMode2To3Cnt; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "USB mode switch counter" registry value -// 2013.05.23, by MH. -// -NDIS_STATUS -N6WriteUsbModeSwitchFlag( - IN PADAPTER Adapter, - IN u1Byte UsbSwitch) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbSp"); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s:\n", __FUNCTION__)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = UsbSwitch; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "USB mode switch Channel" registry value -// 2013.05.23, by MH. -// -NDIS_STATUS -N6WriteUsbModeSwitchChnl( - IN PADAPTER Adapter, - IN u2Byte Channel) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbChnl"); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s:\n", __FUNCTION__)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = Channel; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Write "USB mode switch Channel" registry value -// 2013.06.06, by MH. -// Switch by 0 = from service 1= by driver itself. -// -NDIS_STATUS -N6WriteUsbModeSwitchBy( - IN PADAPTER Adapter, - IN u1Byte SwitchBy) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbSwBy"); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s:\n", __FUNCTION__)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = SwitchBy; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - - - -// -// Description: -// Write "U2/U3 mode switch counter" registry value -// 2012.12.14, by MH. -// -NDIS_STATUS -N6WriteUsbMode2To3CounterFail( - IN PADAPTER Adapter) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("UsbMode2To3CntFail"); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_DISP(FUSWITCH, FUSWITCH_ERROR, ("%s:\n", __FUNCTION__)); - return Status; - } - - pNdisCommon->RegUsbMode2To3CntFail++; - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = pNdisCommon->RegUsbMode2To3CntFail; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - return Status; -} - - -// -// Description: -// Indicate scan complete. -// 2006.11.14, by shien chang. -// -VOID -N6IndicateScanComplete( - IN PADAPTER Adapter, - IN RT_STATUS status - ) -{ - NDIS_STATUS ndisStatus; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - if (status == RT_STATUS_SUCCESS) - { - ndisStatus = NDIS_STATUS_SUCCESS; - } - else - { - ndisStatus = NDIS_STATUS_FAILURE; - } - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_SCAN_CONFIRM, - &ndisStatus, - sizeof(NDIS_STATUS)); - -} - -// -// Description: -// Indicate connection started. -// 2006.10.17, by shien chang. -// -VOID -N6IndicateConnectionStart( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - DOT11_CONNECTION_START_PARAMETERS ConnectStartParam; - - Adapter->LastConnectStartIndicationTime = PlatformGetCurrentTime(); - - PlatformZeroMemory(&ConnectStartParam, sizeof(DOT11_CONNECTION_START_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - ConnectStartParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CONNECTION_START_PARAMETERS_REVISION_1, - sizeof(DOT11_CONNECTION_START_PARAMETERS)); - - if (pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - ConnectStartParam.BSSType = dot11_BSS_type_infrastructure; - } - else if (pMgntInfo->OpMode == RT_OP_MODE_IBSS) - { - ConnectStartParam.BSSType = dot11_BSS_type_independent ; - - // - // 061227, rcnjko: - // For fake AP mode, we tell upper layer take our MAC address as the BSSID - // to make the frames sent from and indicate to upper layer having correct - // BSSID when we are configured to be AP mode later. - // - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - PlatformMoveMemory( - ConnectStartParam.AdhocBSSID, - Adapter->CurrentAddress, - sizeof(DOT11_MAC_ADDRESS)); - } - else - { - PlatformMoveMemory( - ConnectStartParam.AdhocBSSID, - pMgntInfo->Bssid, - sizeof(DOT11_MAC_ADDRESS)); - } - - ConnectStartParam.AdhocSSID.uSSIDLength = pMgntInfo->Ssid.Length; - PlatformMoveMemory( - ConnectStartParam.AdhocSSID.ucSSID, - pMgntInfo->Ssid.Octet, - pMgntInfo->Ssid.Length); - } - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_CONNECTION_START, - &ConnectStartParam, - sizeof(DOT11_CONNECTION_START_PARAMETERS)); - -} - -VOID -N6IndicateConnectionComplete( - IN PADAPTER Adapter, - IN RT_STATUS status - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - DOT11_CONNECTION_COMPLETION_PARAMETERS ConnectCompleteParam; - - N6_ASSIGN_OBJECT_HEADER( - ConnectCompleteParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_CONNECTION_COMPLETION_PARAMETERS_REVISION_1, - sizeof(DOT11_CONNECTION_COMPLETION_PARAMETERS)); - - if (status == RT_STATUS_SUCCESS) - { - ConnectCompleteParam.uStatus = DOT11_ASSOC_STATUS_SUCCESS; - } - else - { - ConnectCompleteParam.uStatus = DOT11_ASSOC_STATUS_FAILURE; - } - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_CONNECTION_COMPLETION, - &ConnectCompleteParam, - sizeof(DOT11_CONNECTION_COMPLETION_PARAMETERS)); - -} - -VOID -N6IndicateAssociationStart( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PASOC_INFO pAsocInfo = &(pMgntInfo->AsocInfo); - DOT11_ASSOCIATION_START_PARAMETERS AssoStartParam; - - PlatformZeroMemory(&AssoStartParam, sizeof(DOT11_ASSOCIATION_START_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - AssoStartParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ASSOCIATION_START_PARAMETERS_REVISION_1, - sizeof(DOT11_ASSOCIATION_START_PARAMETERS)); - - PlatformMoveMemory( - AssoStartParam.MacAddr, - pAsocInfo->PeerAddr, - sizeof(DOT11_MAC_ADDRESS)); - AssoStartParam.SSID.uSSIDLength = pMgntInfo->Ssid.Length; - PlatformMoveMemory( - AssoStartParam.SSID.ucSSID, - pMgntInfo->Ssid.Octet, - pMgntInfo->Ssid.Length); - - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Peer:", pAsocInfo->PeerAddr); - RT_PRINT_STR(COMP_MLME, DBG_LOUD, "SSID", pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - - AssoStartParam.uIHVDataOffset = 0; - AssoStartParam.uIHVDataSize = 0; - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_ASSOCIATION_START, - &AssoStartParam, - sizeof(DOT11_ASSOCIATION_START_PARAMETERS)); - -} - -VOID -N6IndicateAssociationComplete( - IN PADAPTER Adapter, - IN RT_STATUS status - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - RT_AUTH_MODE authmode; - PDOT11_ASSOCIATION_COMPLETION_PARAMETERS pAssoCompleteParam; - RT_STATUS rtStatus; - ULONG AllocSize; - - pu1Byte pInfoStart = NULL; - int nInfoOffset = 0; - - // - - AllocSize = sizeof(DOT11_ASSOCIATION_COMPLETION_PARAMETERS) + - sizeof(u4Byte); // PHYID - if(status == RT_STATUS_SUCCESS) - { - if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - AllocSize += MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AsocReqLength) + - MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AsocRespLength) + - MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - } - else if (pMgntInfo->OpMode == RT_OP_MODE_IBSS) - { - AllocSize += MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - } - else if (pMgntInfo->OpMode == RT_OP_MODE_AP) - { - ConstructBeaconFrame(Adapter); - MgntUpdateAsocInfo(Adapter, UpdateAsocBeacon, pMgntInfo->beaconframe.Octet, pMgntInfo->beaconframe.Length); - AllocSize += MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("DrvIFIndicateAssociationComplete(): OpMode: %d\n", pMgntInfo->OpMode)); - } - } - rtStatus = PlatformAllocateMemory( - Adapter, - &pAssoCompleteParam, - AllocSize); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_MLME, DBG_LOUD, - ("DrvIFIndicateAssociationComplete(): failed to allocate memory for indication.\n")); - return; - } - PlatformZeroMemory(pAssoCompleteParam, AllocSize); - - N6_ASSIGN_OBJECT_HEADER( - pAssoCompleteParam->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ASSOCIATION_COMPLETION_PARAMETERS_REVISION_2, - sizeof(DOT11_ASSOCIATION_COMPLETION_PARAMETERS)); - - PlatformMoveMemory( - pAssoCompleteParam->MacAddr, - pMgntInfo->AsocInfo.PeerAddr, - sizeof(DOT11_MAC_ADDRESS)); - RT_PRINT_ADDR(COMP_MLME, DBG_LOUD, "Peer:", pAssoCompleteParam->MacAddr); - - - if (status == RT_STATUS_SUCCESS) - { - pAssoCompleteParam->uStatus = DOT11_ASSOC_STATUS_SUCCESS; - } - else - { - pAssoCompleteParam->uStatus = DOT11_ASSOC_STATUS_FAILURE; - } - - if (pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - pAssoCompleteParam->bReAssocReq = pMgntInfo->AsocInfo.FlagReAsocReq; - pAssoCompleteParam->bReAssocResp = pMgntInfo->AsocInfo.FlagReAsocResp; - } - else - { - pAssoCompleteParam->bReAssocReq = FALSE; - pAssoCompleteParam->bReAssocResp = FALSE; - } - - pAssoCompleteParam->uAssocReqOffset = 0; - pAssoCompleteParam->uAssocReqSize = 0; - pAssoCompleteParam->uAssocRespOffset = 0; - pAssoCompleteParam->uAssocRespSize = 0; - - pAssoCompleteParam->uIHVDataOffset = 0; - pAssoCompleteParam->uIHVDataSize = 0; - - // DOT11_AUTH_ALGORITHM AuthAlgo; - MgntActQuery_802_11_AUTHENTICATION_MODE( Adapter, &authmode ); - pAssoCompleteParam->AuthAlgo = N6CAuthModeToDot11( &authmode ); - - // DOT11_CIPHER_ALGORITHM UnicastCipher; - pAssoCompleteParam->UnicastCipher = N6CEncAlgorithmToDot11( &(pSecInfo->PairwiseEncAlgorithm) ); - - // DOT11_CIPHER_ALGORITHM MulticastCipher; - pAssoCompleteParam->MulticastCipher = N6CEncAlgorithmToDot11( &(pSecInfo->GroupEncAlgorithm) ); - - pAssoCompleteParam->bFourAddressSupported = FALSE; - pAssoCompleteParam->bPortAuthorized = FALSE; - pAssoCompleteParam->DSInfo = DOT11_DS_UNKNOWN; - pAssoCompleteParam->uEncapTableOffset = 0; - pAssoCompleteParam->uEncapTableSize = 0; - - // - // Set Roaming Info in CCKM Fast Roaming - // - if(pSecInfo->AuthMode == DOT11_AUTH_ALGO_CCKM){ - if(pAssoCompleteParam->bReAssocReq){ - pAssoCompleteParam->bPortAuthorized = TRUE; - } - } - - // - // Set up Extra information. - // - pInfoStart = (pu1Byte)pAssoCompleteParam; - nInfoOffset = sizeof(DOT11_ASSOCIATION_COMPLETION_PARAMETERS); - - // PHY ID. - if (status == RT_STATUS_SUCCESS) - { - pNdisCommon->ActivePhyId = N6CQuery_DOT11_OPERATING_PHYID(Adapter); - - pAssoCompleteParam->uActivePhyListSize = sizeof(u4Byte); - pAssoCompleteParam->uActivePhyListOffset = nInfoOffset; - { - PULONG pLong = (PULONG)((PUCHAR)pAssoCompleteParam + sizeof(DOT11_ASSOCIATION_COMPLETION_PARAMETERS)); - *((ULONG UNALIGNED *)pLong) = pNdisCommon->ActivePhyId; - } - } - else - { - //set the uActivePhyListOffset and uActivePhyListSize members to zero - //if uStatus is not set to NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION. - pAssoCompleteParam->uActivePhyListSize = 0; - pAssoCompleteParam->uActivePhyListOffset = 0; - } - - nInfoOffset += pAssoCompleteParam->uActivePhyListSize; - - if(status == RT_STATUS_SUCCESS) - { - if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - // Beacon - pAssoCompleteParam->uBeaconOffset = nInfoOffset; - pAssoCompleteParam->uBeaconSize = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->AsocInfo.Beacon), - pAssoCompleteParam->uBeaconSize); - nInfoOffset += pAssoCompleteParam->uBeaconSize; - - // Association Request. - pAssoCompleteParam->uAssocReqOffset = nInfoOffset; - pAssoCompleteParam->uAssocReqSize = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AsocReqLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->AsocInfo.AsocReq), - pAssoCompleteParam->uAssocReqSize); - nInfoOffset += pAssoCompleteParam->uAssocReqSize; - - // Association Response. - pAssoCompleteParam->uAssocRespOffset = nInfoOffset; - pAssoCompleteParam->uAssocRespSize = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AsocRespLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->AsocInfo.AsocResp), - pAssoCompleteParam->uAssocRespSize); - nInfoOffset += pAssoCompleteParam->uAssocRespSize; - - } - else if(pMgntInfo->OpMode == RT_OP_MODE_IBSS) - { - // Beacon - pAssoCompleteParam->uBeaconOffset = nInfoOffset; - pAssoCompleteParam->uBeaconSize = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->AsocInfo.Beacon), - pAssoCompleteParam->uBeaconSize); - nInfoOffset += pAssoCompleteParam->uBeaconSize; - } - else if(pMgntInfo->OpMode == RT_OP_MODE_AP) - { - - RT_PRINT_DATA(COMP_AP, DBG_LOUD, "INDIC ASSOC COMP BEACON2", pMgntInfo->AsocInfo.Beacon, pMgntInfo->AsocInfo.BeaconLength); - // Beacon - pAssoCompleteParam->uBeaconOffset = nInfoOffset; - pAssoCompleteParam->uBeaconSize = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - PlatformMoveMemory((pInfoStart+nInfoOffset), - MMPDU_BODY(pMgntInfo->AsocInfo.Beacon), - pAssoCompleteParam->uBeaconSize); - nInfoOffset += pAssoCompleteParam->uBeaconSize; - } - } - - RT_TRACE(COMP_SEC, DBG_LOUD, ("===> pMgntInfo->bInBIPMFPMode = %d\n", pMgntInfo->bInBIPMFPMode)); - - - if( pMgntInfo->bInBIPMFPMode && TEST_FLAG(pMgntInfo->targetAKMSuite, AKM_RSNA_1X_SHA256 | AKM_RSNA_PSK_SHA256)) - pAssoCompleteParam->MulticastMgmtCipher = DOT11_CIPHER_ALGO_BIP; - else - pAssoCompleteParam->MulticastMgmtCipher = DOT11_CIPHER_ALGO_NONE; - - // If reasoncode == 30 - // TIE - // ID | LEN | Timeout Interval Type | Timeout Interval Value - // 56 | 5 | 3 = Association ComeBack time - // Set up uAssocComebackTime - if( pMgntInfo->RspStatusCode == 30 && pMgntInfo->TIE.Length != 0) - { - if(pMgntInfo->TIE.Octet[0] == 3 ) - { - pAssoCompleteParam->uAssocComebackTime = (u4Byte)(pMgntInfo->TIE.Octet[1] & 0xff); - pAssoCompleteParam->uAssocComebackTime += (u4Byte)(pMgntInfo->TIE.Octet[2] << 8) & 0xff; - pAssoCompleteParam->uAssocComebackTime += (u4Byte)(pMgntInfo->TIE.Octet[3] << 16) & 0xff; - pAssoCompleteParam->uAssocComebackTime += (u4Byte)(pMgntInfo->TIE.Octet[4] << 24) & 0xff; - } - else - pAssoCompleteParam->uAssocComebackTime = 0; - } - else - pAssoCompleteParam->uAssocComebackTime = 0; - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_ASSOCIATION_COMPLETION, - pAssoCompleteParam, - AllocSize); - - - PlatformFreeMemory(pAssoCompleteParam, AllocSize); - -} - -// -// Note: -// After indicating Disassociation event to Ndis, the OS waits 10 secs and the miniport driver can then -// indicate Roaming Start event if need. After 10 secs, Ndis reset the miniport driver by setting the OID -// OID_DOT11_RESET_REUEST. By Bruce, 2009-02-10. -// -VOID -N6IndicateDisassociation( - IN PADAPTER Adapter, - IN u2Byte reason) -{ - DOT11_DISASSOCIATION_PARAMETERS DisAssoParam; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PASOC_INFO pAsocInfo = &(pMgntInfo->AsocInfo); - - PlatformZeroMemory(&DisAssoParam, sizeof(DOT11_DISASSOCIATION_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - DisAssoParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_DISASSOCIATION_PARAMETERS_REVISION_1, - sizeof(DOT11_DISASSOCIATION_PARAMETERS)); - - if (pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE) - { - pu1Byte pBSSID; - - // - // If roaming is failed and disassociation event should be indicated, - // we should indicate the previous BSSID before roaming. - // By Bruce, 2008-05-08. - // - if(pMgntInfo->RoamingType == RT_ROAMING_NORMAL) - { - pBSSID = pMgntInfo->APaddrbeforeRoaming; - } - else - { - pBSSID = pMgntInfo->Bssid; - } - PlatformMoveMemory( - DisAssoParam.MacAddr, - pBSSID, - sizeof(DOT11_MAC_ADDRESS)); - } - else - { - if(pAsocInfo->bDeauthAddrValid) - { - PlatformMoveMemory( - DisAssoParam.MacAddr, - pAsocInfo->DeauthAddr, - sizeof(DOT11_MAC_ADDRESS)); - pAsocInfo->bDeauthAddrValid = FALSE; - } - else - { - N6_MAKE_WILDCARD_MAC_ADDRESS(DisAssoParam.MacAddr); - } - } - - if(reason == disas_lv_ss ||reason == inactivity) - DisAssoParam.uReason = DOT11_ASSOC_STATUS_PEER_DISASSOCIATED | reason; - else if (reason == deauth_lv_ss) - { - DisAssoParam.uReason = DOT11_ASSOC_STATUS_PEER_DEAUTHENTICATED| reason; - } - else if (reason == dest_unreachable){ - DisAssoParam.uReason = DOT11_ASSOC_STATUS_UNREACHABLE;//| reason; - } - else - DisAssoParam.uReason = reason; - - DisAssoParam.uIHVDataOffset = 0; - DisAssoParam.uIHVDataSize = 0; - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_DISASSOCIATION, - &DisAssoParam, - sizeof(DOT11_DISASSOCIATION_PARAMETERS)); - -} - -VOID -N6IndicateRoamingStart( - IN PADAPTER Adapter - ) -{ - DOT11_ROAMING_START_PARAMETERS RoamingStartParam; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - Adapter->LastRoamingStartIndicationTime = PlatformGetCurrentTime(); - - PlatformZeroMemory(&RoamingStartParam, sizeof(DOT11_ROAMING_START_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - RoamingStartParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ROAMING_START_PARAMETERS_REVISION_1, - sizeof(DOT11_ROAMING_START_PARAMETERS)); - - if (pMgntInfo->OpMode == RT_OP_MODE_IBSS) - { - PlatformMoveMemory( - RoamingStartParam.AdhocBSSID, - pMgntInfo->Bssid, - sizeof(DOT11_MAC_ADDRESS)); - - PlatformMoveMemory( - RoamingStartParam.AdhocSSID.ucSSID, - pMgntInfo->Ssid.Octet, - pMgntInfo->Ssid.Length); - RoamingStartParam.AdhocSSID.uSSIDLength = pMgntInfo->Ssid.Length; - - RoamingStartParam.uRoamingReason = DOT11_ASSOC_STATUS_ROAMING_ADHOC; - } - else - { - RoamingStartParam.uRoamingReason = DOT11_ASSOC_STATUS_ROAMING_ASSOCIATION_LOST; - } - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_ROAMING_START, - &RoamingStartParam, - sizeof(DOT11_ROAMING_START_PARAMETERS)); - -} - -VOID -N6IndicateRoamingComplete( - IN PADAPTER Adapter, - IN RT_STATUS status - ) -{ - DOT11_ROAMING_COMPLETION_PARAMETERS RoamingCompleteParam; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - PlatformZeroMemory(&RoamingCompleteParam, sizeof(DOT11_ROAMING_COMPLETION_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - RoamingCompleteParam.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_ROAMING_COMPLETION_PARAMETERS_REVISION_1, - sizeof(DOT11_ROAMING_COMPLETION_PARAMETERS)); - - if (status == RT_STATUS_SUCCESS) - { - RoamingCompleteParam.uStatus = DOT11_ASSOC_STATUS_SUCCESS; - } - else - { - RoamingCompleteParam.uStatus = DOT11_ASSOC_STATUS_FAILURE; - } - - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_ROAMING_COMPLETION, - &RoamingCompleteParam, - sizeof(DOT11_ROAMING_COMPLETION_PARAMETERS)); - -} - - -// -// Description: -// Percedure for periodically reporting link quality. -// 2006.11.29, by shien chang. -// -VOID -LinkQualityReportCallback( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_LINK_QUALITY_PARAMETERS pLinkQualityParam; - PDOT11_LINK_QUALITY_ENTRY pLinkQuality; - u4Byte AllocSize; - RT_STATUS rtStatus; - /*static*/ u1Byte LastLinkQuality /*= 0xFF*/; // init to an impossible value. - - FunctionIn(COMP_MLME); - - // Because Ndistest will recognize link quality status indication as nic power status - // indication in the NicPowerState item, we don't indicate link quality status without - // associated. 2006.12.04, by shien chang. - if ( (!pMgntInfo->mAssoc && !pMgntInfo->mIbss) || - (pMgntInfo->bMediaConnect == FALSE) || - MgntScanInProgress(pMgntInfo)) - { - RT_TRACE_F(COMP_INDIC, DBG_TRACE, - ("LinkQualityReportCallback(): Do not indicate because pMgntInfo->mAssoc(%d), pMgntInfo->mIbss (%d), pMgntInfo->bMediaConnect (%d), MgntScanInProgress(pMgntInfo) = %d\n", - pMgntInfo->mAssoc, pMgntInfo->mIbss, pMgntInfo->bMediaConnect, MgntScanInProgress(pMgntInfo))); - LastLinkQuality = 0xFF; // reset the value to an impossible value. - return; - } - - N6IndicateLinkSpeed(Adapter); - - AllocSize = sizeof(DOT11_LINK_QUALITY_PARAMETERS) + - sizeof(DOT11_LINK_QUALITY_ENTRY); - - rtStatus = PlatformAllocateMemory(Adapter, &pLinkQualityParam, AllocSize); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_MLME, DBG_LOUD, - ("LinkQualityReportCallback(): failed to allocate resources for link quality reporting.\n")); - return; - } - - {// refer to driver spec 1.2.9, 2009.01.07, haich. - static u1Byte LinkQualityDiffThreshold = 1; - u1Byte CurLinkQuality = GetSignalQuality(Adapter); - u1Byte LinkQualityDiff /*= (CurLinkQuality > LastLinkQuality) ? (CurLinkQuality - LastLinkQuality) : (LastLinkQuality - CurLinkQuality)*/; - BOOLEAN bProceed = TRUE; - - LastLinkQuality = Adapter->RxStats.LastLinkQuality; - LinkQualityDiff = (CurLinkQuality > LastLinkQuality) ? (CurLinkQuality - LastLinkQuality) : (LastLinkQuality - CurLinkQuality); - - // - // Note that we have to indicate the first notification after associated. - // - - RT_TRACE(COMP_INDIC, DBG_LOUD, - ("LinkQualityReportCallback(): CurLinkQuality (%u), LastLinkQuality (%u)\n", - CurLinkQuality, LastLinkQuality)); - - if(0xFF == LastLinkQuality) - { - bProceed = TRUE; - } - if(LinkQualityDiff < LinkQualityDiffThreshold) - {// diff lower than the threshold - bProceed = FALSE; - } - else if(CurLinkQuality/20 == LastLinkQuality/20) // The 5 groups: [0, 19], [20, 39], [40, 59], [60, 79], [80, 100]. - {// same group - bProceed = FALSE; - } - - if(pMgntInfo->RegFakeRoamSignal[0]) - bProceed = TRUE; - - if(!bProceed) - { - RT_TRACE(COMP_INDIC, DBG_LOUD, ("LinkQualityReportCallback(): not to indicate\n")); - - // Free corrsponding memory to handle exceptions. - PlatformFreeMemory(pLinkQualityParam, AllocSize); - return; - } - // LastLinkQuality = CurLinkQuality; - Adapter->RxStats.LastLinkQuality = CurLinkQuality; - } - - PlatformZeroMemory(pLinkQualityParam, AllocSize); - - N6_ASSIGN_OBJECT_HEADER( - pLinkQualityParam->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_LINK_QUALITY_PARAMETERS_REVISION_1, - sizeof(DOT11_LINK_QUALITY_PARAMETERS)); - - pLinkQualityParam->uLinkQualityListSize = 1; - pLinkQualityParam->uLinkQualityListOffset = sizeof(DOT11_LINK_QUALITY_PARAMETERS); - - pLinkQuality = (PDOT11_LINK_QUALITY_ENTRY)( - ((pu1Byte)pLinkQualityParam) + sizeof(DOT11_LINK_QUALITY_PARAMETERS) ); - PlatformMoveMemory( - pLinkQuality->PeerMacAddr, - pMgntInfo->Bssid, - 6); - - // - // SQ indication presented on Vista and later OS: - // 0: 0 bar in WiFi status - // 1-19: 1 bar in WiFi status - // 20-39: 2 bar in WiFi status - // 40-59: 3 bar in WiFi status - // 60-79: 4 bar in WiFi status - // Above 80: 5 bar in WiFi status - // - if (pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - pLinkQuality->ucLinkQuality = GetSignalQuality(Adapter); - } - else - { - pLinkQuality->ucLinkQuality = 0; - } - - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateLinkStateChanged(Adapter, FALSE, 0); - } - else - { - N6IndicateStatus( - Adapter, - NDIS_STATUS_DOT11_LINK_QUALITY, - pLinkQualityParam, - AllocSize); - } - - PlatformFreeMemory(pLinkQualityParam, AllocSize); -} - - -// -// Description: -// An new state machine for ndis6 mlme status indication. -// 2006.11.29, by shien chang. -// -VOID -N6InitializeIndicateStateMachine( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PN6_INDICATE_STATE_MACHINE pEngine = &(pNdisCommon->IndicationEngine); - - pEngine->CurrOpMode = SM_mNone; - pEngine->Flag = SM_fNone; - pEngine->CurrentState = N6_STATE_INITIAL; - pEngine->NextState = N6_STATE_CONNECT_START; -} - - -VOID -N6PushIndicateStateMachineAp( - IN PADAPTER Adapter, - IN RT_STA_INDICATE_STATE StateToEnter, - IN u2Byte StatusOrReasonCode - ) -{ - - PRT_STA_INDICATE_STATE_MACHINE pIndicateEngine; - - //RT_ASSERT((Adapter->MgntInfo.pCurrentSta && (StateToEnter != N6_STATE_DISASOC)), - // ("N6PushIndicateStateMachineAp(): pCurrentSta == NULL and StateToEnter != N6_STATE_DISASOC.\n")); - - if(MgntActQuery_ApType(Adapter) != RT_AP_TYPE_VWIFI_AP) - { - return; - } - - if(Adapter->MgntInfo.pCurrentSta) - { - pIndicateEngine = &(Adapter->MgntInfo.pCurrentSta->IndicationEngine); - } - else - { - RT_TRACE(COMP_INDIC, DBG_LOUD, ("N6PushIndicateStateMachineAp(): pCurrentSta is NULL.\n")); - return; - } - - if (pIndicateEngine->NextState & StateToEnter) - { - RT_STA_INDICATE_STATE OriginalState = pIndicateEngine->CurrentState; - RT_TRACE(COMP_INDIC, DBG_LOUD,("Transit from 0x%X to 0x%X.\n", OriginalState, StateToEnter)); - RT_PRINT_ADDR(COMP_INDIC, DBG_LOUD, "STA:", Adapter->MgntInfo.pCurrentSta->MacAddr); - - pIndicateEngine->CurrentState = StateToEnter; - switch (StateToEnter) - { - case RT_STA_STATE_INITIAL: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_INITIAL\n")); - //pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = RT_STA_STATE_AP_INCOMING_ASOC_STARTED; - break; - - case RT_STA_STATE_AP_INCOMING_ASOC_STARTED: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_AP_INCOMING_ASOC_STARTED\n")); - - //pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = 0; - - pIndicateEngine->NextState |= RT_STA_STATE_AP_INCOMING_ASOC_COMPLETE; - pIndicateEngine->NextState |= RT_STA_STATE_AP_INCOMING_ASOC_REQ_RECVD; - - N62CAPIndicateIncomAssocStart(Adapter); - break; - - case RT_STA_STATE_AP_INCOMING_ASOC_REQ_RECVD: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_AP_INCOMING_ASOC_REQ_RECVD\n")); - pIndicateEngine->NextState = RT_STA_STATE_AP_INCOMING_ASOC_COMPLETE; - N62CAPIndicateIncomAssocReqRecv(Adapter); - break; - - case RT_STA_STATE_AP_INCOMING_ASOC_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_AP_INCOMING_ASOC_COMPLETE\n")); - pIndicateEngine->NextState = 0; - - //if(!IS_STATUS_CODE_SUCCESS(StatusOrReasonCode)) - //{ - // pIndicateEngine->Flag = SM_fConnected; - //} - - pIndicateEngine->NextState |= N6_STATE_DISASOC; - //pIndicateEngine->NextState |= N6_STATE_AP_INCOMING_ASOC_STARTED; - - N62CAPIndicateIncomAssocComplete(Adapter, StatusOrReasonCode); - break; - - case RT_STA_STATE_DISASOC: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_DISASOC\n")); - //pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = RT_STA_STATE_AP_INCOMING_ASOC_STARTED; - N62CAPIndicateDisassociation(Adapter, StatusOrReasonCode); - break; - - default: - break; - } - } -} - - -VOID -N6PushIndicateStateMachineInfra( - IN PADAPTER Adapter, - IN N6_INDICATE_STATE StateToEnter, - IN u2Byte StatusOrReasonCode - ) -{ - PN6_INDICATE_STATE_MACHINE pIndicateEngine = - &(Adapter->pNdisCommon->IndicationEngine); - - if (pIndicateEngine->NextState & StateToEnter) - { - RT_TRACE(COMP_INDIC, DBG_LOUD, ("NextState 0x%x, StateToEnter 0x%x", pIndicateEngine->NextState, StateToEnter)); - pIndicateEngine->CurrentState = StateToEnter; - switch (StateToEnter) - { - case N6_STATE_INITIAL: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_INITIAL\n")); - - pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = N6_STATE_CONNECT_START; - break; - - case N6_STATE_CONNECT_START: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_CONNECT_START\n")); - - pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_CONNECT_COMPLETE; - N6IndicateConnectionStart(Adapter); - break; - - case N6_STATE_ASOC_START: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ASOC_START\n")); - - pIndicateEngine->NextState = N6_STATE_ASOC_COMPLETE; - N6IndicateAssociationStart(Adapter); - break; - - case N6_STATE_ASOC_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ASOC_COMPLETE\n")); - - pIndicateEngine->NextState = 0; - if ( !IS_STATUS_CODE_SUCCESS(StatusOrReasonCode) ) - { - pIndicateEngine->NextState |= N6_STATE_ASOC_START; - } - - if ( pIndicateEngine->Flag == SM_fRoaming ) - { - pIndicateEngine->NextState |= N6_STATE_ROAM_COMPLETE; - } - else - { - pIndicateEngine->NextState |= N6_STATE_CONNECT_COMPLETE; - } - N6IndicateAssociationComplete(Adapter, StatusOrReasonCode); - break; - - case N6_STATE_CONNECT_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_CONNECT_COMPLETE\n")); - - pIndicateEngine->Flag = SM_fConnected; - pIndicateEngine->NextState = N6_STATE_DISASOC | N6_STATE_ROAM_START; - N6IndicateConnectionComplete(Adapter, StatusOrReasonCode); - break; - - case N6_STATE_DISASOC: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_DISASOC\n")); - - pIndicateEngine->NextState = N6_STATE_ROAM_START; - { - N6IndicateDisassociation(Adapter, StatusOrReasonCode); - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_DISASOC DO IT !!\n")); - } - break; - - case N6_STATE_ROAM_START: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ROAM_START\n")); - - pIndicateEngine->Flag = SM_fRoaming; - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_ROAM_COMPLETE; - N6IndicateRoamingStart(Adapter); - break; - - case N6_STATE_ROAM_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ROAM_COMPLETE\n")); - - pIndicateEngine->Flag = SM_fConnected; - pIndicateEngine->NextState = N6_STATE_DISASOC | N6_STATE_ROAM_START; - N6IndicateRoamingComplete(Adapter, StatusOrReasonCode); - break; - - default: - break; - } - } -} - -VOID -N6PushIndicateStateMachineIBSS( - IN PADAPTER Adapter, - IN N6_INDICATE_STATE StateToEnter, - IN u2Byte StatusOrReasonCode - ) -{ - PN6_INDICATE_STATE_MACHINE pIndicateEngine = - &(Adapter->pNdisCommon->IndicationEngine); - - RT_TRACE(COMP_INDIC, DBG_LOUD,("==>N6PushIndicateStateMachineIBSS() pIndicateEngine->Flag %d\n",pIndicateEngine->Flag)); - RT_TRACE(COMP_INDIC, DBG_LOUD, ("NextState 0x%x, StateToEnter 0x%x", pIndicateEngine->NextState, StateToEnter)); - - if (pIndicateEngine->NextState & StateToEnter) - { - RT_TRACE(COMP_INDIC, DBG_TRACE, ("NextState 0x%x, StateToEnter 0x%x", pIndicateEngine->NextState, StateToEnter)); - - pIndicateEngine->CurrentState = StateToEnter; - switch (StateToEnter) - { - case N6_STATE_INITIAL: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_INITIAL\n")); - - pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = N6_STATE_CONNECT_START; - break; - - case N6_STATE_CONNECT_START: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_CONNECT_START\n")); - - pIndicateEngine->Flag = SM_fNone; - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_CONNECT_COMPLETE; - N6IndicateConnectionStart(Adapter); - break; - - case N6_STATE_ASOC_START: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ASOC_START\n")); - - pIndicateEngine->NextState = N6_STATE_ASOC_COMPLETE; - N6IndicateAssociationStart(Adapter); - break; - - case N6_STATE_ASOC_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ASOC_COMPLETE\n")); - - if ( (pIndicateEngine->Flag == SM_fConnected) ||(pIndicateEngine->Flag == SM_fRoaming) ) - { - RT_TRACE(COMP_INDIC, DBG_LOUD,("==>N6PushIndicateStateMachineIBSS() N6_STATE_ASOC_COMPLETE SM_fConnected\n")); - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_DISASOC|N6_STATE_ROAM_COMPLETE; - if(pIndicateEngine->Flag == SM_fConnected) //Association Operation Guidelines for Independent BSS Networks diagram 1 - pIndicateEngine->NextState |= N6_STATE_ROAM_START; - } - else - { - RT_TRACE(COMP_INDIC, DBG_LOUD,("==>N6PushIndicateStateMachineIBSS() N6_STATE_ASOC_COMPLETE not SM_fConnected\n")); - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_CONNECT_COMPLETE; - } - N6IndicateAssociationComplete(Adapter, StatusOrReasonCode); - break; - - case N6_STATE_CONNECT_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_CONNECT_COMPLETE\n")); - - pIndicateEngine->Flag = SM_fConnected; - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_DISASOC| N6_STATE_ROAM_START; - N6IndicateConnectionComplete(Adapter, StatusOrReasonCode); - break; - - case N6_STATE_DISASOC: - // David says: We should resume from disassociate state by indicate an - // NDIS_STATUS_DOT11_ASSOCIATION_START or the starting of IBSS - // will have problem. - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_DISASOC\n")); - - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_ROAM_START | N6_STATE_DISASOC; - N6IndicateDisassociation(Adapter, StatusOrReasonCode); - break; - - // - //Porting from 8xb to avoid IBSS can not relink after s3/s4 on Vista, by Maddest - // - case N6_STATE_ROAM_START : - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ROAM_START\n")); - - pIndicateEngine->Flag = SM_fRoaming; - pIndicateEngine->NextState = N6_STATE_ASOC_START | N6_STATE_ROAM_COMPLETE; - N6IndicateRoamingStart(Adapter); - break; - // - //Porting from 8xb to avoid IBSS can not relink after s3/s4 on Vista, by Maddest - // - case N6_STATE_ROAM_COMPLETE: - RT_TRACE(COMP_INDIC, DBG_LOUD,("N6_STATE_ROAM_COMPLETE\n")); - - pIndicateEngine->Flag = SM_fConnected; - pIndicateEngine->NextState = N6_STATE_DISASOC | N6_STATE_ROAM_START|N6_STATE_ASOC_START; - N6IndicateRoamingComplete(Adapter, StatusOrReasonCode); - break; - - default: - break; - } - - } - RT_TRACE(COMP_INDIC, DBG_LOUD,("<==N6PushIndicateStateMachineIBSS() \n")); -} - -// -// Description: -// Push forward the state machine of ndis6 status indication. -// 2006.11.29, by shien chang. -// -VOID -N6PushIndicateStateMachine( - IN PADAPTER Adapter, - IN N6_INDICATE_STATE StateToEnter, - IN u2Byte StatusOrReasonCode - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PN6_INDICATE_STATE_MACHINE pIndicateEngine = - &(Adapter->pNdisCommon->IndicationEngine); - - PlatformAcquireSpinLock(Adapter, RT_INDIC_SPINLOCK); - - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_VWIFI_AP) - { - N6PushIndicateStateMachineAp(Adapter, StateToEnter, StatusOrReasonCode); - PlatformReleaseSpinLock(Adapter, RT_INDIC_SPINLOCK); - return; - } - - if (pIndicateEngine->CurrentState == N6_STATE_INITIAL) - { - switch (pMgntInfo->OpMode) - { - case RT_OP_MODE_INFRASTRUCTURE: - pIndicateEngine->CurrOpMode = SM_mInfra; - break; - - case RT_OP_MODE_IBSS: - pIndicateEngine->CurrOpMode = SM_mAdhoc; - break; - - case RT_OP_MODE_AP: - if(MgntActQuery_ApType(Adapter) == RT_AP_TYPE_IBSS_EMULATED) - { - // - // 061227, rcnjko: - // Because our UI will set a fake IBSS profile before setting - // AP profile CurrOpMode will be set to SM_mAdhoc for AP mode case. - // - RT_TRACE(COMP_MLME, DBG_WARNING, - ("N6PushIndicateStateMachine(): N6_STATE_INITIAL with RT_OP_MODE_AP is unexpected!!!\n")); - pIndicateEngine->CurrOpMode = SM_mAdhoc; - - } - RT_TRACE(COMP_MLME, DBG_WARNING, - ("N6PushIndicateStateMachine(): TODO!\n")); - PlatformReleaseSpinLock(Adapter, RT_INDIC_SPINLOCK); - return; - break; - - case RT_OP_MODE_NO_LINK: - RT_TRACE(COMP_INDIC,DBG_LOUD, ("RT_OP_MODE_NO_LINK\n")); - PlatformReleaseSpinLock(Adapter, RT_INDIC_SPINLOCK); - return; - break; - } - } - - if (pIndicateEngine->CurrOpMode == SM_mInfra) - { - N6PushIndicateStateMachineInfra(Adapter, StateToEnter, StatusOrReasonCode); - } - else if (pIndicateEngine->CurrOpMode == SM_mAdhoc) - { - N6PushIndicateStateMachineIBSS(Adapter, StateToEnter, StatusOrReasonCode); - } - - PlatformReleaseSpinLock(Adapter, RT_INDIC_SPINLOCK); -} - -// -// Description: -// Map status or reason code to DOT11 status code. -// 2006.12.01, by shien chang. -// -DOT11_ASSOC_STATUS -N6TranslateToDot11AssocStatus( - IN N6_INDICATE_STATE CurrentState, - IN u2Byte StatusOrReasonCode - ) -{ - switch (CurrentState) - { - case N6_STATE_ASOC_COMPLETE: - case N6_STATE_CONNECT_COMPLETE: - case N6_STATE_ROAM_COMPLETE: - // Status code. - - break; - - case N6_STATE_DISASOC: - // Reason code. - - break; - - default: - break; - } - - // not implement. - return DOT11_ASSOC_STATUS_SUCCESS; -} - -int -GetSignedInteger( - u4Byte usDW, - u1Byte BitNumber - ) -{ - u4Byte u4bValue, SignBit; - int iValue, idx; - u4Byte Mask = 0x00000001; - u4Byte u4bTmp = 0x00000001; - - if( BitNumber >= 32 ) - { - return 0; - } - - SignBit = 0x00000001 << (BitNumber-1); - for( idx=1; idx<(BitNumber-1); idx++ ) - { - Mask |= ( u4bTmp << idx ); - } - - u4bValue = (usDW & Mask); - - if( usDW & SignBit ) - { // negative - u4bValue = ~(u4bValue) + 1; - u4bValue &= Mask; - iValue = 0 - (int)u4bValue; - } - else - { // positive - iValue = (int)u4bValue; - } - - return iValue; -} - -BOOLEAN -N6Dot11AddrIsBcast( - IN DOT11_MAC_ADDRESS dot11Addr) -{ - pu1Byte pAddr = (pu1Byte)dot11Addr; - - return ( - ( (pAddr[0] == 0xFF) && (pAddr[1] == 0xFF) && (pAddr[2] == 0xFF) && - (pAddr[3] == 0xFF) && (pAddr[4] == 0xFF) && (pAddr[5] == 0xFF) ) ? - TRUE : FALSE); -} - - -//DTM will set this wrong addr, by Maddest 070823 -BOOLEAN -N6Dot11AddrIsfe( - IN DOT11_MAC_ADDRESS dot11Addr) -{ - pu1Byte pAddr = (pu1Byte)dot11Addr; - - return ( - ( (pAddr[0] == 0xFe) && (pAddr[1] == 0xFF) && (pAddr[2] == 0xFF) && - (pAddr[3] == 0xFF) && (pAddr[4] == 0xFF) && (pAddr[5] == 0xFF) ) ? - TRUE : FALSE); -} - -// -// Description: -// Callback function of SetRFPowerStateWorkItem, -// which is used by OID to change RF power state. -// -VOID -SetRFPowerStateWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER Adapter = (PADAPTER)pContext; - PADAPTER pAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - BOOLEAN bValue; - NDIS_STATUS ndisStatus; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - pMgntInfo->eSwRfPowerState = pNdisCommon->eRfPowerStateToSet; - - // Write registry for persistent. - bValue = (pMgntInfo->eSwRfPowerState == eRfOn) ? TRUE : FALSE; - - // - //It is a temp soluation, when DTM 1.0c Test with Nicpowerstate, after reinitialize the regoff value will - //wrong, by Maddest 070823 - // - pNdisCommon->RegRfOff=(bValue ==TRUE) ? FALSE : TRUE; - pMgntInfo->RegRfOff = (bValue ==TRUE) ? FALSE : TRUE; - - ndisStatus = N6WriteRegRfPowerState(pAdapter, bValue); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6CSet_DOT11_NIC_POWER_STATE(): failed to write registry.\n")); - } - - if(pNdisCommon->eRfPowerStateToSet == eRfOn) - { - if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) - { - RT_DISABLE_ASPM(pAdapter); - RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_ASPM); - } - else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) - { - RT_LEAVE_D3(pAdapter, FALSE); - RT_CLEAR_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3); - } - - } - // Change RF power state. - MgntActSet_RF_State(pAdapter, pNdisCommon->eRfPowerStateToSet, RF_CHANGE_BY_SW,FALSE); - // Report the new power state to the OS. - - DrvIFIndicateCurrentPhyStatus(pAdapter); - - if(pNdisCommon->eRfPowerStateToSet == eRfOff) - { -// PlatformEFIOWrite1Byte(pAdapter, 0x03, 0x31); - if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_ASPM) - { - RT_ENABLE_ASPM(pAdapter); - RT_SET_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_ASPM); - } - else if(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_PCI_D3) - { - RT_ENTER_D3(pAdapter, FALSE); - RT_SET_PS_LEVEL(pAdapter, RT_RF_OFF_LEVL_PCI_D3); - } - - // Turn off LED if RF is not ON. - pAdapter->HalFunc.LedControlHandler(pAdapter, LED_CTL_POWER_OFF); - } - - // - // SW radio off ext port must report the same pwr status as default port - // -// N62ExtPortIndicatePwrStatus(pAdapter); - - if( !OS_SUPPORT_WDI(pAdapter) ) - { - // Complete pending OID. - N6CompletePendedOID( - pAdapter, - RT_PENDED_OID_RF_STATE, - NDIS_STATUS_SUCCESS); - } -} - - -// -// Description: -// Callback function of SetAdhocLinkStateWorkItem, -// which is used by OID to change adhoc link state. -// 2009/02/25 MH Write Adhoc Link State -// -VOID -SetAdhocLinkStateWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - BOOLEAN bValue; - NDIS_STATUS ndisStatus; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - - // Write registry for persistent. - bValue = (pMgntInfo->eSwRfPowerState == eRfOn) ? TRUE : FALSE; - - ndisStatus = N6WriteAdhocLinkState(pAdapter, pHalData->AdhocLinkState); - - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("SetAdhocLinkStateWorkItemCallback(): failed to write registry.\n")); - } - -} - - -// -// Description: -// Initialize Rx return packet waiting mechanism. -// -// Assumption: -// 1. AllPacketReturnedEvent is initialized. -// 2. RT_RX_SPINLOCK is NOT acquired. -// -VOID -N6CStartWaitReturnPacketMechanism( - IN PADAPTER Adapter - ) -{ - //PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - - if( !OS_SUPPORT_WDI(Adapter) ) - { - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_ASSERT((RT_GET_RCV_REF(Adapter) == 0), - ("N6CStartWaitReturnPacketMechanism(): RefCnt(%d) != 0 !!!\n", - RT_GET_RCV_REF(Adapter))); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - } - //RT_INC_RCV_REF(Adapter); - - //PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); -} - -// -// Description: -// Wait event for returned packet. 2007.01.19, by shien chang. -// -// Assumption: -// 1. AllPacketReturnedEvent is initialized. -// 2. RT_RX_SPINLOCK is NOT acquired. -// 3. N6XXX_CANNOT_RX() is TRUE. -// -VOID -N6CWaitForReturnPacket( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - if (RT_GET_RCV_REF(Adapter) > 0) - { - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6CWaitForReturnPacket(): wait for un-returned packet (%d)\n", RT_GET_RCV_REF(Adapter))); - - //PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - while (TRUE) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6CWaitForReturnPacket(): wait for AllPacketReturnedEvent\n")); - // Prefast warning C28121: The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - if ( NdisWaitEvent(&pNdisCommon->AllPacketReturnedEvent, 2000) ) - { - NdisResetEvent(&pNdisCommon->AllPacketReturnedEvent); - break; - } - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6CWaitForReturnPacket(): end of waiting returned packet\n")); - } - else { - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - } -} - - -NDIS_STATUS -N6AllocateNative80211MIBs( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus; - ULONG AllocSize; - - do { - // pDot11SupportedPhyTypes. - AllocSize = sizeof(DOT11_SUPPORTED_PHY_TYPES) + (NATIVE_802_11_MAX_NUM_PHY_TYPES-1) * sizeof(DOT11_PHY_TYPE); - rtStatus = PlatformAllocateMemory( - Adapter, - &(pNdisCommon->pDot11SupportedPhyTypes), - AllocSize - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6AllocateNative80211MIBs(): failed to allocate pDot11SupportedPhyTypes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - PlatformZeroMemory(pNdisCommon->pDot11SupportedPhyTypes, AllocSize); - - // pDot11PhyMIBs. - AllocSize = sizeof(NIC_PHY_MIB) * NATIVE_802_11_MAX_NUM_PHY_TYPES; - rtStatus = PlatformAllocateMemory( - Adapter, - &(pNdisCommon->pDot11PhyMIBs), - AllocSize - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6AllocateNative80211MIBs(): failed to allocate pDot11PhyMIBs\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - - }while (FALSE); - - // - // If allocation failed, reclaim memory resources. - // - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - if (pNdisCommon->pDot11SupportedPhyTypes) - { - PlatformFreeMemory( - pNdisCommon->pDot11SupportedPhyTypes, - sizeof(DOT11_SUPPORTED_PHY_TYPES) + (NATIVE_802_11_MAX_NUM_PHY_TYPES-1) * sizeof(DOT11_PHY_TYPE) - ); - pNdisCommon->pDot11SupportedPhyTypes = NULL; - } - - if (pNdisCommon->pDot11PhyMIBs) - { - PlatformFreeMemory( - pNdisCommon->pDot11PhyMIBs, - sizeof(NIC_PHY_MIB) * NATIVE_802_11_MAX_NUM_PHY_TYPES - ); - pNdisCommon->pDot11PhyMIBs = NULL; - } - } - - return ndisStatus; -} - - -VOID -N6InitializeNative80211MIBs( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u1Byte RateSetBuf[16]={0}; - u2Byte RateSetLen=0; - u4Byte index=0, opRateIdx=0, BasicRateIdx=0; - u4Byte curPhyId=0; - u4Byte WirelessModeCapa=0; - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - PRT_NLO_INFO pNLOInfo = &(pMgntInfo->NLOInfo); - - // Set operation mode. - pNdisCommon->dot11CurrentOperationMode.uCurrentOpMode = DOT11_OPERATION_MODE_EXTENSIBLE_STATION; - pNdisCommon->dot11CurrentOperationMode.uReserved = 0; - - // dot11OperationModeCapability. - pNdisCommon->dot11OperationModeCapability.uOpModeCapability = - DOT11_OPERATION_MODE_EXTENSIBLE_STATION | - DOT11_OPERATION_MODE_NETWORK_MONITOR; - -#if (NDIS_SUPPORT_NDIS620) - if(pNdisCommon->NdisVersion > NDIS_VERSION_BASE_6_1) - { - Adapter->bStartVwifi = TRUE; - - if(!Adapter->pNdisCommon->bRegVWifiSupport) - { - Adapter->bStartVwifi = FALSE; - } - - if(Adapter->bStartVwifi == TRUE) - { - pNdisCommon->dot11OperationModeCapability.uOpModeCapability |= - DOT11_OPERATION_MODE_EXTENSIBLE_AP; - } - } -#endif - -#if (NDIS_SUPPORT_NDIS630) - pNdisCommon->dot11OperationModeCapability.uOpModeCapability |= - DOT11_OPERATION_MODE_WFD_DEVICE| DOT11_OPERATION_MODE_WFD_GROUP_OWNER|DOT11_OPERATION_MODE_WFD_CLIENT; -#endif - -#if FINE_TUNE_TH_8814A == 1 - pNdisCommon->dot11OperationModeCapability.uNumOfTXBuffers = 1024; // We can buffer as many packets as OS sends. -#else - pNdisCommon->dot11OperationModeCapability.uNumOfTXBuffers = 0; // We can buffer as many packets as OS sends. -#endif - pNdisCommon->dot11OperationModeCapability.uNumOfRXBuffers = Adapter->NumRxDesc[RX_MPDU_QUEUE]; - pNdisCommon->dot11OperationModeCapability.uMajorVersion = NATIVE_802_11_OPMODE_CAPABILITY_MAJOR_VERSION; - pNdisCommon->dot11OperationModeCapability.uMinorVersion = NATIVE_802_11_OPMODE_CAPABILITY_MINOR_VERSION; - pNdisCommon->dot11OperationModeCapability.uReserved = 0; - - //set dot11MultiDomainCapabilityImplemented - pNdisCommon->dot11MultiDomainCapabilityImplemented = MgntActQuery_MultiDomainImp(Adapter); - - // set support phy type - pNdisCommon->pDot11SupportedPhyTypes->uTotalNumOfEntries = NATIVE_802_11_MAX_NUM_PHY_TYPES; - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries = 0; - - - WirelessModeCapa = HalGetSupportedWirelessMode(Adapter); - - if(WirelessModeCapa & WIRELESS_MODE_N_24G || (WirelessModeCapa & WIRELESS_MODE_AC_24G)) - { - //4 N mode - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ++; - curPhyId = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries -1; - pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[curPhyId] = dot11_phy_type_ht; - // pDot11PhyMIBs. - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyID = curPhyId; - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyType = dot11_phy_type_ht; //6 - - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength = 16; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[0] = 30; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[1] = 60; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[2] = 90; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[3] = 120; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[4] = 180; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[5] = 240; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[6] = (UCHAR)270; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[7] = (UCHAR)300; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[8] = (UCHAR)60; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[9] = (UCHAR)120; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[10] = (UCHAR)180; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[11] = (UCHAR)240; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[12] = (UCHAR)360; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[13] = (UCHAR)480; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[14] = (UCHAR)540; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[15] = (UCHAR)600; - - pNdisCommon->pDot11PhyMIBs[curPhyId].ActiveRateSet.uRateSetLength = 0; - pNdisCommon->pDot11PhyMIBs[curPhyId].Channel = MgntActQuery_802_11_CHANNEL_NUMBER(Adapter); - - PlatformZeroMemory( - &(pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedTxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedRxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); //4 - } - - if(WirelessModeCapa & WIRELESS_MODE_G) - { - //G mode - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ++; - curPhyId = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries -1; - pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[curPhyId] = dot11_phy_type_erp; - // pDot11PhyMIBs. - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyID = curPhyId; - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyType = dot11_phy_type_erp; //6 - - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength = 12; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[0] = 2; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[1] = 4; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[2] = 11; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[3] = 22; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[4] = 12; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[5] = 18; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[6] = 24; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[7] = 36; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[8] = 48; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[9] = 72; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[10] = 96; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[11] = 108; - - pNdisCommon->pDot11PhyMIBs[curPhyId].ActiveRateSet.uRateSetLength = 0; - pNdisCommon->pDot11PhyMIBs[curPhyId].Channel = - MgntActQuery_802_11_CHANNEL_NUMBER(Adapter); - - // - PlatformZeroMemory( - &(pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedTxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedRxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - - } - - if(WirelessModeCapa & WIRELESS_MODE_B) - {//Bmode - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries++; - curPhyId = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries -1; - pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[curPhyId] = - dot11_phy_type_hrdsss; - // pDot11PhyMIBs. - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyID = curPhyId; - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyType = dot11_phy_type_hrdsss; //5 - - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength = 4; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[0] = 2; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[1] = 4; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[2] = 11; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[3] = 22; - - pNdisCommon->pDot11PhyMIBs[curPhyId].BasicRateSet.uRateSetLength = 4; - pNdisCommon->pDot11PhyMIBs[curPhyId].BasicRateSet.ucRateSet[0] = 2; - pNdisCommon->pDot11PhyMIBs[curPhyId].BasicRateSet.ucRateSet[1] = 4; - pNdisCommon->pDot11PhyMIBs[curPhyId].BasicRateSet.ucRateSet[2] = 11; - pNdisCommon->pDot11PhyMIBs[curPhyId].BasicRateSet.ucRateSet[3] = 22; - - pNdisCommon->pDot11PhyMIBs[curPhyId].ActiveRateSet.uRateSetLength = 0; - pNdisCommon->pDot11PhyMIBs[curPhyId].Channel = - MgntActQuery_802_11_CHANNEL_NUMBER(Adapter); - - PlatformZeroMemory( - &(pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedTxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedRxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - - } - - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("WirelessModeCapa 0x%x pNdisCommon->NdisVersion 0x%x\n", WirelessModeCapa, pNdisCommon->NdisVersion)); - - if((WirelessModeCapa & WIRELESS_MODE_AC_5G) && - pNdisCommon->NdisVersion>=NDIS_VERSION_BASE_6_40) - { - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ++; - curPhyId = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries - 1; - pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[curPhyId] = dot11_phy_type_vht; - - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyID = curPhyId; - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyType = dot11_phy_type_vht; - - - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength = 16; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[0] = 30; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[1] = 60; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[2] = 90; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[3] = 120; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[4] = 180; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[5] = 240; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[6] = (UCHAR)270; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[7] = (UCHAR)300; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[8] = (UCHAR)60; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[9] = (UCHAR)120; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[10] = (UCHAR)180; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[11] = (UCHAR)240; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[12] = (UCHAR)360; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[13] = (UCHAR)480; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[14] = (UCHAR)540; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[15] = (UCHAR)600; - - pNdisCommon->pDot11PhyMIBs[curPhyId].ActiveRateSet.uRateSetLength = 0; - pNdisCommon->pDot11PhyMIBs[curPhyId].Channel = MgntActQuery_802_11_CHANNEL_NUMBER(Adapter); - - PlatformZeroMemory( - &(pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedTxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedRxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); //4 - } - - if((WirelessModeCapa & WIRELESS_MODE_N_5G) || (WirelessModeCapa & WIRELESS_MODE_AC_5G)) - { - //4 N 5g mode - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ++; - curPhyId = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries -1; - pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[curPhyId] = dot11_phy_type_ht; - // pDot11PhyMIBs. - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyID = curPhyId; - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyType = dot11_phy_type_ht; //6 - - - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength = 16; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[0] = 30; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[1] = 60; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[2] = 90; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[3] = 120; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[4] = 180; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[5] = 240; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[6] = (UCHAR)270; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[7] = (UCHAR)300; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[8] = (UCHAR)60; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[9] = (UCHAR)120; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[10] = (UCHAR)180; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[11] = (UCHAR)240; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[12] = (UCHAR)360; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[13] = (UCHAR)480; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[14] = (UCHAR)540; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[15] = (UCHAR)600; - - pNdisCommon->pDot11PhyMIBs[curPhyId].ActiveRateSet.uRateSetLength = 0; - pNdisCommon->pDot11PhyMIBs[curPhyId].Channel = MgntActQuery_802_11_CHANNEL_NUMBER(Adapter); - - PlatformZeroMemory( - &(pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedTxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedRxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); //4 - } - - if(WirelessModeCapa& WIRELESS_MODE_A) - { - //A mode - pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries ++; - curPhyId = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries -1; - pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[curPhyId] = dot11_phy_type_ofdm; - // pDot11PhyMIBs. - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyID = curPhyId; - pNdisCommon->pDot11PhyMIBs[curPhyId].PhyType = dot11_phy_type_ofdm; //4// 4 - - - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength = 8; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[0] = 12; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[1] = 18; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[2] = 24; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[3] = 36; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[4] = 48; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[5] = 72; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[6] = 96; - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet[7] = 108; - - pNdisCommon->pDot11PhyMIBs[curPhyId].ActiveRateSet.uRateSetLength = 0; - pNdisCommon->pDot11PhyMIBs[curPhyId].Channel = - MgntActQuery_802_11_CHANNEL_NUMBER(Adapter); - - PlatformZeroMemory( - &(pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedTxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - PlatformMoveMemory( - pNdisCommon->pDot11PhyMIBs[curPhyId].SupportedDataRatesValue.ucSupportedRxDataRatesValue, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.ucRateSet, - pNdisCommon->pDot11PhyMIBs[curPhyId].OperationalRateSet.uRateSetLength); - } - - - pNdisCommon->dot11SelectedPhyId = 0; - pNdisCommon->pDot11SelectedPhyMIB = pNdisCommon->pDot11PhyMIBs; - - // dot11SupportedPowerLevels. - pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues[0] = 10; //?? NEO tEST 123 - pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues[1] = 20; - pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues[2] = 30; - pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues[3] = 50; - pNdisCommon->dot11SupportedPowerLevels.uNumOfSupportedPowerLevels = 4; - - // dot11CurrentTxPowerLevel. - pNdisCommon->dot11CurrentTxPowerLevel = 1; - - // - // Reset desired PHY ID list - // - pNdisCommon->staDesiredPhyCount = 1; - pNdisCommon->staDesiredPhyList[0] = DOT11_PHY_ID_ANY; - - // - // PCF and service class. - // - pNdisCommon->RegOptionalCapability.uReserved = 0; - if(MgntActQuery_CfPollable(Adapter)) - { - pNdisCommon->RegOptionalCapability.bDot11PCF = FALSE; - pNdisCommon->RegOptionalCapability.bDot11PCFMPDUTransferToPC = FALSE; - } - else - { - pNdisCommon->RegOptionalCapability.bDot11PCF = FALSE; - pNdisCommon->RegOptionalCapability.bDot11PCFMPDUTransferToPC = FALSE; - } - pNdisCommon->RegOptionalCapability.bStrictlyOrderedServiceClass = MgntActQuery_StrictlyOrderedImp(Adapter); - - PlatformMoveMemory( - &(pNdisCommon->dot11CurrOptionalCapability), - &(pNdisCommon->RegOptionalCapability), - sizeof(DOT11_OPTIONAL_CAPABILITY)); - - // bDot11MediaStreamingEnabled. - pNdisCommon->bDot11MediaStreamingEnabled = FALSE; - - // dot11DesiredSSIDList. - N6_ASSIGN_OBJECT_HEADER( - pNdisCommon->dot11DesiredSSIDList.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_SSID_LIST_REVISION_1, - sizeof(DOT11_SSID_LIST)); - pNdisCommon->dot11DesiredSSIDList.uNumOfEntries = 0; - pNdisCommon->dot11DesiredSSIDList.uTotalNumOfEntries = 0; - pNdisCommon->dot11DesiredSSIDListIndex = 0; - - // dot11DesiredSSIDList. - N6_ASSIGN_OBJECT_HEADER( - pNdisCommon->dot11DesiredSSIDListCopy.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_SSID_LIST_REVISION_1, - sizeof(DOT11_SSID_LIST)); - pNdisCommon->dot11DesiredSSIDListCopy.uNumOfEntries = 0; - pNdisCommon->dot11DesiredSSIDListCopy.uTotalNumOfEntries = 0; - - //Ndis6 IBSS Parameters. For DTM Vista 1.0c, by Bruce, 2007-08-13. - pNdisCommon->dot11IbssParams.bDot11IbssJoinOnly = FALSE; - if(pNdisCommon->dot11IbssParams.AdditionalIEData) - { - PlatformFreeMemory(pNdisCommon->dot11IbssParams.AdditionalIEData, pNdisCommon->dot11IbssParams.AdditionalIESize); - } - pNdisCommon->dot11IbssParams.AdditionalIEData = NULL; - pNdisCommon->dot11IbssParams.AdditionalIESize = 0; - - - // dot11AutoConfigEnabled. - pNdisCommon->dot11AutoConfigEnabled = - DOT11_PHY_AUTO_CONFIG_ENABLED_FLAG | - DOT11_MAC_AUTO_CONFIG_ENABLED_FLAG; - - // dot11DesiredBSSIDList and NumDot11DesiredBSSIDList. - N6_MAKE_WILDCARD_MAC_ADDRESS(pNdisCommon->dot11DesiredBSSIDList); - pNdisCommon->NumDot11DesiredBSSIDList = 1; - - // dot11UnreachableDetectionThreshold. - // - pNdisCommon->dot11UnreachableDetectionThreshold = 10; - - // dot11UnicastUseGroupEnabled. - pNdisCommon->dot11UnicastUseGroupEnabled = TRUE; - - // dot11HiddenNetworkEnabled. - pNdisCommon->dot11HiddenNetworkEnabled = FALSE; - - // dot11NetworkListOffload - pNLOInfo->NumDot11OffloadNetwork = 0; - pNdisCommon->Oidcounter = 0; - - // New indication engine. 2006.11.29, by shien chang. - N6InitializeIndicateStateMachine(Adapter); - - // bWakeupAutoLinkInProgressing - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - - // PrivacyExemptionList - Adapter->pNdisCommon->PrivacyExemptionEntrieNum = 0; -} - -// -// Description: -// Open the file specifed and copy the file into an array, -// -RT_STATUS -PlatformReadAndMapFile( - IN PVOID Adapter, - IN ps1Byte szFileName, - IN OUT pu1Byte pOutFile, - IN OUT pu4Byte UNALIGNED pFileSize - ) -{ - RT_STATUS rtStatus = RT_STATUS_FAILURE; - NDIS_STRING NdisStrFileName; - NDIS_PHYSICAL_ADDRESS ndisPhyAddr; - NDIS_STATUS ndisStatus; - NDIS_HANDLE hFileHandle; - UINT ulFileLength; - pu1Byte pMappedFile = NULL; - - // Check input parameters. - if(szFileName == NULL) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformReadAndMapFile(): szFileName should not be NULL!\n")); - return rtStatus; - } - - - // Convert szFileName to NDIS_STRING. - NdisInitializeString(&NdisStrFileName, (PUCHAR)szFileName); - if(NdisStrFileName.Buffer != NULL && NdisStrFileName.Length > 0) - { - // Open the file specified. - ndisPhyAddr.LowPart = ndisPhyAddr.HighPart = -1; - NdisOpenFile(&ndisStatus, - &hFileHandle, - &ulFileLength, - &NdisStrFileName, - ndisPhyAddr); - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - // Map the file into memory. - NdisMapFile(&ndisStatus, (PVOID *)(&pMappedFile), hFileHandle); - if(ndisStatus == NDIS_STATUS_SUCCESS) - { - // Copy File into array - PlatformMoveMemory(pOutFile, pMappedFile, ulFileLength); - *pFileSize = ulFileLength; - - // Return Success only when Config Success - rtStatus = RT_STATUS_SUCCESS; - - // Relase the memory for mapping the file. - NdisUnmapFile(hFileHandle); - } - else - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("PlatformReadAndMapFile(): failed to map the file, %s!, ndisStatus: %#X\n", szFileName, ndisStatus)); - } - - // Close the file. - NdisCloseFile(hFileHandle); - } - else - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("PlatformReadAndMapFile(): failed to open the file, %s!, ndisStatus: %#X\n", szFileName, ndisStatus)); - } - - // Release the NDIS_STRING allocated via NdisInitializeString(). - NdisFreeString(NdisStrFileName); - } - else - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("PlatformReadAndMapFile(): NdisInitializeString() failed! szFileName: %s\n", szFileName)); - } - - return rtStatus; -} - - -// -// Description: -// Add NBL list into NBL wait queue. -// -// Assumption: -// RT_BUFFER_SPINLOCK is acquired. -// -VOID -N6CAddNblWaitQueue( - IN PRT_SINGLE_LIST_HEAD pNBLWaitQueue, - IN PNET_BUFFER_LIST pNetBufferLists, - IN BOOLEAN bToHead - ) -{ - PRT_SINGLE_LIST_HEAD pList = pNBLWaitQueue; - PRT_SINGLE_LIST_ENTRY pFirstEntry = (PRT_SINGLE_LIST_ENTRY)RT_GET_NBL_LINK(pNetBufferLists); - PRT_SINGLE_LIST_ENTRY pLastEntry; - - RT_ASSERT(pFirstEntry != NULL, - ("N6CAddNblWaitQueue(): pFirstEntry should not be NULL, pNetBufferLists(%p)\n !!!", pNetBufferLists)); - - for(pLastEntry = pFirstEntry; pLastEntry->Next != NULL; pLastEntry = pLastEntry->Next) - ; - - if(bToHead) - { - if(!RTIsSListEmpty(pList)) - { - pLastEntry->Next = pList->First; - pList->First = pFirstEntry; - } - else - { - pLastEntry->Next = pList->First; - pList->First = pFirstEntry; - pList->Last = pLastEntry; - } - } - else - { - if(!RTIsSListEmpty(pList)) - { - pList->Last->Next = pFirstEntry; - pList->Last = pLastEntry; - } - else - { - pList->Last = pLastEntry; - pList->First = pFirstEntry; - } - } -} - -VOID -N6CConcatenateTwoList( - IN PRT_SINGLE_LIST_ENTRY pDest, - IN PRT_SINGLE_LIST_ENTRY pSource - ) -{ - PRT_SINGLE_LIST_ENTRY pDstLastEntry = NULL; - PRT_SINGLE_LIST_ENTRY pSrcLastEntry = NULL; - - if( pDest == NULL ) - return; - - if( pSource == NULL ) - return; - - for(pDstLastEntry = pDest; pDstLastEntry->Next != NULL; pDstLastEntry = pDstLastEntry->Next) - ; - - pDstLastEntry->Next = pSource; -} - -// -// Description: -// Remove one NBL from head of list. -// -// Assumption: -// RT_BUFFER_SPINLOCK is acquired. -// -PNET_BUFFER_LIST -N6CRemoveNblWaitQueue( - IN PRT_SINGLE_LIST_HEAD pNBLWaitQueue, - IN BOOLEAN bFromHead - ) -{ - PRT_SINGLE_LIST_HEAD pList = pNBLWaitQueue; - PRT_SINGLE_LIST_ENTRY pFirstEntry = NULL, pLastEntry = NULL, pTempEntry = NULL; - - if( RTIsSListEmpty(pList) ) - { - RT_ASSERT(FALSE, ("N6CRemvoeNblWaitQueue(): pList(%p) is empty!!!\n", pList)); - return NULL; - } - - if(bFromHead) - { - PRT_SINGLE_LIST_ENTRY pEntry; - - pEntry = RTRemoveHeadSList(pList); - return RT_GET_NBL_FROM_QUEUE_LINK(pEntry); - } - else - { - pFirstEntry = pList->First; - - for(pLastEntry = pFirstEntry; pLastEntry->Next != NULL; pLastEntry = pLastEntry->Next) - { - pTempEntry = pLastEntry->Next; - if( pTempEntry->Next != NULL ) - { - continue; - } - else - { - pLastEntry->Next = NULL; - return RT_GET_NBL_FROM_QUEUE_LINK(pTempEntry); - } - } - - RTInitializeSListHead(pList); - - return RT_GET_NBL_FROM_QUEUE_LINK(pFirstEntry); - } -} - - -// -// Description: -// This routine is called if miniport need to complete the NetBufferLists -// before associated with a TCB. -// -// Assumption: -// 1. RT_TX_SPINLOCK is NOT acquired. -// -VOID -N6CompleteNetBufferLists( - IN PADAPTER Adapter, - IN PNET_BUFFER_LIST pNetBufferLists, - IN NDIS_STATUS ndisStatus, - IN BOOLEAN bDispatchLevel - ) -{ - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(Adapter); - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - - for (pCurrNetBufferList = pNetBufferLists; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_STATUS(pCurrNetBufferList) = ndisStatus; - } - - - NdisMSendNetBufferListsComplete( - pDevice->hNdisAdapter, - pNetBufferLists, - (bDispatchLevel ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0)); - -} - - -// -// Description: -// Indicate the current link (Tx/Rx) speed to Ndis6. -// Note: -// Only call this function when the link status is associated. -// By Bruce, 2007-08-30. -// -VOID -N6IndicateLinkSpeed( - PVOID Adapter - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - NDIS_LINK_STATE LinkState; - - N6_ASSIGN_OBJECT_HEADER( - LinkState.Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_LINK_STATE_REVISION_1, - sizeof(NDIS_LINK_STATE)); - - LinkState.MediaConnectState = MediaConnectStateConnected; - -/* -MediaDuplexStateHalf - The miniport adapter can transmit or receive but not both simultaneously. -MediaDuplexStateFull - The miniport adapter can transmit and receive simultaneously. -MediaDuplexStateUnknown - The duplex state of the miniport adapter is unknown. -*/ - LinkState.MediaDuplexState = MediaDuplexStateHalf; - - LinkState.RcvLinkSpeed = 300000000; - LinkState.XmitLinkSpeed = (MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter , pMgntInfo->bForcedShowRxRate, FALSE)/2)*1000000; - - if(P2P_ADAPTER_OS_SUPPORT_P2P(pAdapter) && LinkState.XmitLinkSpeed < INTEL_HIGH_RESOLUTION_MIN_XMIT_SPEED) - { - // Note: - // Changing the transmit speed to upscale the Intel Miracast Graphics resolution 1920x1080. - // This is not a good solution and we will check this with Intel. - // Windows would not show the rate for P2P port on Windows UI. - // By Bruce, 2014-09-11. - LinkState.XmitLinkSpeed = INTEL_HIGH_RESOLUTION_MIN_XMIT_SPEED; - } - RT_TRACE_F(COMP_INDIC, DBG_LOUD, ("XmitSpeed = %d RcvLinkSpeed = %d for adapter port = %d\n", (u4Byte)LinkState.XmitLinkSpeed, (u4Byte)LinkState.RcvLinkSpeed, GET_PORT_NUMBER(pAdapter))); - LinkState.PauseFunctions = NdisPauseFunctionsUnsupported; - LinkState.AutoNegotiationFlags = NDIS_LINK_STATE_DUPLEX_AUTO_NEGOTIATED; - - N6IndicateStatus( - pAdapter, - NDIS_STATUS_LINK_STATE, - &LinkState, - sizeof(NDIS_LINK_STATE)); - -} - - -// -// Description: -// Decide whether the BSSID of AP or peer address is agreed by desired list. -// 2006.11.14, by shien chang. -// Because it is Platform based function, I move it from "IsInDesiredBSSIDList in N6C_OidSet.c" to here. -// Argument: -// Adapter - -// NIC adapter context pointer. -// MacAddr - -// The mac address to be verified if it is in the desired list. -// Rewritten by Bruce, 2008-05-27. -// -BOOLEAN -PlatformIsInDesiredBSSIDList( - IN PADAPTER Adapter, - IN pu1Byte MacAddr - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte index; - - if (pNdisCommon->NumDot11DesiredBSSIDList == 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("IsInDesiredBSSIDList(): NumDot11DesiredBSSIDList is zero\n")); - return FALSE; - } - - for (index=0; indexNumDot11DesiredBSSIDList; index++) - { - if ( N6Dot11AddrIsBcast( pNdisCommon->dot11DesiredBSSIDList[index] )) - { - return TRUE; - } - - if ( eqNByte( - (pu1Byte)(pNdisCommon->dot11DesiredBSSIDList[index]), - MacAddr, - sizeof(DOT11_MAC_ADDRESS)) ) - { - return TRUE; - } - } - - return FALSE; -} - - -BOOLEAN -PlatformGetDesiredSSIDList( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte index = pNdisCommon->dot11DesiredSSIDListIndex; - PDOT11_SSID_LIST pSsidList = &(pNdisCommon->dot11DesiredSSIDList); - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - if (pSsidList->uNumOfEntries == 0 || - (u1Byte)pSsidList->uNumOfEntries <= pNdisCommon->dot11DesiredSSIDListIndex) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("PlatformCheckDesiredSSIDList(): uNumOfEntries %d dot11DesiredSSIDListIndex %d\n", pNdisCommon->dot11DesiredSSIDList.uNumOfEntries, pNdisCommon->dot11DesiredSSIDListIndex)); - return FALSE; - } - - if(CompareSSID(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, pSsidList->SSIDs[index].ucSSID, (u2Byte)pSsidList->SSIDs[index].uSSIDLength)) - pNdisCommon->dot11DesiredSSIDListIndex++; - - if((u1Byte)pSsidList->uNumOfEntries <= pNdisCommon->dot11DesiredSSIDListIndex) - return FALSE; - - index = pNdisCommon->dot11DesiredSSIDListIndex; - - CopyMem(pMgntInfo->Ssid.Octet, pSsidList->SSIDs[index].ucSSID, pSsidList->SSIDs[index].uSSIDLength); - pMgntInfo->Ssid.Length =(u2Byte) pSsidList->SSIDs[index].uSSIDLength; - - RT_PRINT_STR(COMP_MLME, DBG_LOUD, "===> PlatformGetDesiredSSIDList(): ", pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length); - - pNdisCommon->dot11DesiredSSIDListIndex++; - - return TRUE; -} - - -// -// Descriotion: -// Determine the conditions under Vista if the packets should be filtered and not to be indicated to Ndis 6. -// Adapter - -// NIC adapter context. -// pRfd - -// RFD buffer. -// Return - -// TRUE if this packet should not be filtered. Or return FALSE. -// From 818xB, by Bruce, 2008-06-20. -// -BOOLEAN -N6ReceiveIndicateFilter( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - OCTET_STRING pduOS; - u4Byte i; - pu1Byte pRaddr; - pu1Byte pBssid; - BOOLEAN bAddrMatch = FALSE; - BOOLEAN bIsBroadcast = FALSE; - BOOLEAN bIsMulticast = FALSE; - - - FillOctetString(pduOS, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->PacketLength); - pRaddr = Frame_pRaddr(pduOS); - pBssid = Frame_pBssid(pduOS); - bAddrMatch = (PlatformCompareMemory(Adapter->CurrentAddress, pRaddr, ETHERNET_ADDRESS_LENGTH)) ? FALSE : TRUE; - bIsBroadcast = (MacAddr_isBcst(pRaddr)); - bIsMulticast = (MacAddr_isMulticast(pRaddr)); - - // Always indicate all packets in bNetMonitorMode. - if(Adapter->MgntInfo.bNetMonitorMode) - { - return TRUE; - } - - if(N6MatchPrivacyExemptList(Adapter, pRfd)) - { - return FALSE; - } - - // - // For DTM 1.2 Packetfilter_ext - // to filter data packet when CURRENT_PACKET_FILTER is set - // - // (1) These standard packet filters are only applicable to 802.11 data packets - // - // (2) If NdisPacketFilter is not set (remains zero) - // do not indicate any packets - // - // (3) For broadcast packet only indicate when - // a) NDIS_PACKET_TYPE_BROADCAST is set in current packet filter - // - // (4) For multicast packet only indicate when - // a) NDIS_PACKET_TYPE_ALL_MULTICAST is set in current packet filter or - // b) NDIS_PACKET_TYPE_MULTICASTis set in current packet filter, and - // DA belongs to one of the multicast address (set from OID_DOT11_MULTICAST_LIST) - // - // Add by hpfan 2008.05.12 - // - // For 802.11 specified filters respectively, by Bruce, 2008-06-26. - // - if(IsMgntFrame(pduOS.Octet)) - { - if(bAddrMatch && (pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_802_11_DIRECTED_MGMT)) - return TRUE; - if(bIsBroadcast && (pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_802_11_BROADCAST_MGMT)) - return TRUE; - if(bIsMulticast && (pNdisCommon->NdisPacketFilter & (NDIS_PACKET_TYPE_802_11_MULTICAST_MGMT | - NDIS_PACKET_TYPE_802_11_ALL_MULTICAST_MGMT))) - return TRUE; - - return FALSE; - } - else if(IsCtrlFrame(pduOS.Octet)) - { - // - // We do not implement yet, by Bruce, 2008-06-26. - // - return FALSE; - } - else if(IsDataFrame(pduOS.Octet)) - { - // - // Note: - // It is only valid for the miniport driver to enable the NDIS_PACKET_TYPE_PROMISCUOUS, - // NDIS_PACKET_TYPE_802_11_PROMISCUOUS_MGMT, or - // NDIS_PACKET_TYPE_802_11_PROMISCUOUS_CTRL packet filters if the driver is - // operating in Network Monitor (NetMon) mode. - // - if(bAddrMatch && (pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_DIRECTED)) - return TRUE; - if(bIsBroadcast && (pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_BROADCAST)) - return TRUE; - if(bIsMulticast && (pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST)) - return TRUE; - - // Do not filter data frame in IBSS mode. - if(pMgntInfo->mIbss && !(PlatformCompareMemory(pMgntInfo->Bssid, pBssid, 6))) - { - return TRUE; - } - if(bIsMulticast && (pNdisCommon->NdisPacketFilter & NDIS_PACKET_TYPE_MULTICAST)) - { - if(Adapter->MCAddrCount == 0) - { - RT_PRINT_ADDR(COMP_RECV | COMP_MLME, DBG_LOUD, "N6ReceiveIndicateFilter(): filter multicast (MCAddrCount = 0) addr ", pRaddr); - return FALSE; - } - for(i = 0; i < Adapter->MCAddrCount; i ++ ) - { - if(i < MAX_MCAST_LIST_NUM) - { - if(!PlatformCompareMemory(Adapter->MCList[i], pRaddr, ETHERNET_ADDRESS_LENGTH) ) - { - return TRUE; - } - } - } - } - return FALSE; - } - RT_PRINT_ADDR(COMP_RECV | COMP_MLME, DBG_LOUD, "N6ReceiveIndicateFilter(): Filter this multicast not in MCL: ", pRaddr); - return FALSE; -} - -// -// Descriotion: -// Try to Fulshing D0 Coalesing Queue !! -// Adapter - -// NIC adapter context. -// bAcqRxLock - -// Need to Acquire Rx SpinLock or NO -// bIndic - -// Drop or Indic -// - -VOID -N6FulshD0CoalescingQueue( - IN PADAPTER Adapter, - IN BOOLEAN bAcqRxLock, - IN BOOLEAN bIndic - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_RFD *RfdArray; - u2Byte RfdCnt = 0; - PRT_GEN_TEMP_BUFFER pGenBuf; - PRT_RFD TempRfd; - - RT_TRACE(COMP_TEST, DBG_LOUD, ("===> N6FulshD0CoalescingQueue() \n")); - - if(bAcqRxLock) - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - - if( pNdisCommon->D0FilterState == RT_D0_FILTER_NONE || - pNdisCommon->D0FilterState == RT_D0_FILTER_FLUSHING) - { - if(bAcqRxLock) - PlatformReleaseSpinLock( Adapter, RT_RX_SPINLOCK); - return; - } - - if( RTIsListEmpty(&(pNdisCommon->D0FilterPktQueue)) ) - { - RT_TRACE(COMP_TEST, DBG_LOUD, ("<=== N6FulshD0CoalescingQueue() : Flush NULL\n")); - if(bAcqRxLock) - PlatformReleaseSpinLock( Adapter, RT_RX_SPINLOCK); - return; - } - - if( bIndic ) - { - RT_TRACE(COMP_TEST, DBG_LOUD, ("===> N6FulshD0CoalescingQueue() IndicatePackets !!\n")); - if( !RTIsListEmpty(&(pNdisCommon->D0FilterPktQueue)) ) - { - pNdisCommon->D0FilterState = RT_D0_FILTER_FLUSHING; - RfdCnt = 0; - pGenBuf = GetGenTempBuffer (Adapter, sizeof(PRT_RFD)*REORDER_WIN_SIZE); - RfdArray = (PRT_RFD *)pGenBuf->Buffer.Ptr; - - while(!RTIsListEmpty(&pNdisCommon->D0FilterPktQueue)) - { - TempRfd = (PRT_RFD)RTRemoveHeadList(&pNdisCommon->D0FilterPktQueue); - RfdArray[RfdCnt] = TempRfd; - RfdCnt = RfdCnt + 1; - } - - DrvIFD0RxIndicatePackets(Adapter , RfdArray , RfdCnt); - ReturnGenTempBuffer(Adapter, pGenBuf); - } - - } - else - { - RT_TRACE(COMP_TEST, DBG_LOUD, ("===> N6FulshD0CoalescingQueue() ReturnRFDList !!\n")); - if( !RTIsListEmpty(&(pNdisCommon->D0FilterPktQueue)) ) - { - pNdisCommon->D0FilterState = RT_D0_FILTER_FLUSHING; - - while(!RTIsListEmpty(&pNdisCommon->D0FilterPktQueue)) - { - TempRfd = (PRT_RFD)RTRemoveHeadList(&pNdisCommon->D0FilterPktQueue); - ReturnRFDList(Adapter , TempRfd); - } - } - - } - RT_TRACE(COMP_TEST, DBG_LOUD, ("<=== N6FulshD0CoalescingQueue() : Flush OK\n")); - pNdisCommon->D0FilterState = RT_D0_FILTER_INIT; - if(bAcqRxLock) - PlatformReleaseSpinLock( Adapter, RT_RX_SPINLOCK); - -} - -// -// Descriotion: -// Determine the packet to queue or let it go !! -// Adapter - -// NIC adapter context. -// pRfd - -// RFD buffer. -// Return -// True : be queue -// False: Not match !! - -BOOLEAN -N6ReceiveCoalescingFilter( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bBufferPkt = FALSE; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - u1Byte ColseParIndex = 0; - u1Byte ColseFieldIndex = 0; - BOOLEAN bFiledMatch = TRUE; - PRT_DO_COALESICING_FILTER_PARAMETER pCurrFilterPar =NULL; - PRT_DO_COALESICING_FIELD_INFO pCurrFieldInfo = NULL; - PRX_FILTER_INFO pCurrRfdFilteInfo =NULL; - PRT_DO_COALESICING_FILTER_PARAMETER pMatchFilterPar =NULL; - u4Byte msDelay = 500; - -// OCTET_STRING frame; -// FillOctetString(frame, pRfd->Buffer.VirtualAddress+PLATFORM_GET_FRAGOFFSET(pRfd), pRfd->PacketLength); - - - - if(pRfd->nTotalSubframe > 0 ) - return bBufferPkt; - - if( pNdisCommon->D0FilterState == RT_D0_FILTER_NONE ) - return bBufferPkt; - - if( pNdisCommon->D0FilterState == RT_D0_FILTER_FLUSHING ) - return bBufferPkt; - - if( pRfd->D0FilterCoalPktInfo.PacketType == RXPacketTypeUndefined) - return bBufferPkt; - - if(!pMgntInfo->mRtD0ColesFilterInfo.bEnable) - return bBufferPkt; - - pCurrRfdFilteInfo = &(pRfd->D0FilterCoalPktInfo); - - - for( ColseParIndex = 0 ; ColseParIndex < 10 && bBufferPkt == FALSE; ColseParIndex++) - { - bBufferPkt = FALSE; - pCurrFilterPar = &(pMgntInfo->mRtD0ColesFilterInfo.dFilterArry[ColseParIndex]); - - if(pCurrFilterPar->FilterID == 0) - continue; - - bFiledMatch =TRUE; - - for(ColseFieldIndex = 0 ; ColseFieldIndex < pCurrFilterPar->NumOfElem && bFiledMatch ==TRUE; ColseFieldIndex++) - { - pCurrFieldInfo = &(pCurrFilterPar->dFieldArry[ColseFieldIndex]); - - switch(pCurrFieldInfo->FrameHead ) - { - case RTFrameHeaderMac: - if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestEqual) - { - if(pCurrFieldInfo->HeaderField.MacHeaderField == RTMacHeaderFieldPacketType ) - { - if( pCurrFieldInfo->FieldValue.FieldByteValue != pCurrRfdFilteInfo->PacketType ) - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->HeaderField.MacHeaderField == RTMacHeaderFieldProtocol) - { - if( PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldShortValue) , pCurrRfdFilteInfo->pEtherType , 2)) - { - bFiledMatch = FALSE; - } - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("===> RTFrameHeaderMac (%d)\n",pCurrFieldInfo->HeaderField.MacHeaderField)); - bFiledMatch = FALSE; - } - } - else if( pCurrFieldInfo->FilterTest == RTReceiveFilterTestNotEqual ) - { - bFiledMatch = FALSE; // Now alway Equal - } - else - { - bFiledMatch = FALSE; - } - break; - case RTFrameHeaderArp: - if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestEqual) - { - if(pCurrFieldInfo->HeaderField.ArpHeaderField == RTARPHeaderFieldOperation) - { - if( PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldShortValue) , pCurrRfdFilteInfo->ARPOption , 2)) - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->HeaderField.ArpHeaderField == RTARPHeaderFieldSPA) - { - if( PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldLong64Value) , pCurrRfdFilteInfo->ARPSPA , 6)) - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->HeaderField.ArpHeaderField == RTARPHeaderFieldTPA) - { - if( PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldLong64Value) , pCurrRfdFilteInfo->ARPTPA , 6)) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestNotEqual) - { - if(pCurrFieldInfo->HeaderField.ArpHeaderField == RTARPHeaderFieldOperation) - { - if( !PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldShortValue) , pCurrRfdFilteInfo->ARPOption , 2)) - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->HeaderField.ArpHeaderField == RTARPHeaderFieldSPA) - { - if( !PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldLong64Value) , pCurrRfdFilteInfo->ARPSPA , 6)) - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->HeaderField.ArpHeaderField == RTARPHeaderFieldTPA) - { - if( !PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldLong64Value) , pCurrRfdFilteInfo->ARPTPA , 6)) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - break; - case RTFrameHeaderIPv4: - if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestEqual) - { - if(pCurrFieldInfo->HeaderField.IPv4HeaderField == RTIPv4HeaderFieldProtocol) - { - if( pCurrFieldInfo->FieldValue.FieldByteValue != pCurrRfdFilteInfo->Protocol ) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestNotEqual) - { - if(pCurrFieldInfo->HeaderField.IPv4HeaderField == RTIPv4HeaderFieldProtocol) - { - if( pCurrFieldInfo->FieldValue.FieldByteValue == pCurrRfdFilteInfo->Protocol ) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - break; - case RTFrameHeaderIPv6: - if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestEqual) - { - if(pCurrFieldInfo->HeaderField.IPv6HeaderField == RTIPv6HeaderFieldProtocol) - { - if( pCurrFieldInfo->FieldValue.FieldByteValue != pCurrRfdFilteInfo->Protocol ) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestNotEqual) - { - if(pCurrFieldInfo->HeaderField.IPv6HeaderField == RTIPv6HeaderFieldProtocol) - { - if( pCurrFieldInfo->FieldValue.FieldByteValue == pCurrRfdFilteInfo->Protocol ) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - break; - case RTFrameHeaderUdp: - if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestEqual) - { - if(pCurrFieldInfo->HeaderField.UdpHeaderField == RTUdpHeaderFieldDestinationPort) - { - if( PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldShortValue) , pCurrRfdFilteInfo->pDestinationPort , 2)) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else if(pCurrFieldInfo->FilterTest == RTReceiveFilterTestNotEqual) - { - if(pCurrFieldInfo->HeaderField.UdpHeaderField == RTUdpHeaderFieldDestinationPort) - { - if( !PlatformCompareMemory(&(pCurrFieldInfo->FieldValue.FieldShortValue) , pCurrRfdFilteInfo->pDestinationPort , 2)) - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - } - else - { - bFiledMatch = FALSE; - } - break; - default: - bFiledMatch = FALSE; - break; - } - } - - if(bFiledMatch) - { - bBufferPkt = TRUE; - pMatchFilterPar = pCurrFilterPar; - } - - } - - - if(bBufferPkt ) - { - //RT_PRINT_DATA(COMP_TEST, DBG_LOUD, "===>bTestBufferPkt(true):\n", frame.Octet, frame.Length); - RT_TRACE(COMP_TEST, DBG_LOUD,("===>bBufferPkt(true) !!\n")); - } - - // Change state !! - if(bBufferPkt) - { - RTInsertTailList(&pNdisCommon->D0FilterPktQueue, &pRfd->List); - if(pNdisCommon->D0FilterState == RT_D0_FILTER_INIT) - { - if(pMatchFilterPar != NULL) - { - msDelay = pMatchFilterPar->Delaytime; - } - PlatformSetTimer( Adapter, &pNdisCommon->D0RxIndicatTimer, msDelay); - pNdisCommon->D0FilterState = RT_D0_FILTER_BUFFING; - } - else - { - RT_TRACE(COMP_TEST, DBG_LOUD,("bBufferPkt ==> pNdisCommon->D0FilterState(%d) !!\n",pNdisCommon->D0FilterState)); - } - } - else - { - if(pNdisCommon->D0FilterState == RT_D0_FILTER_BUFFING) - { - RT_TRACE(COMP_TEST, DBG_LOUD,("N6ReceiveCoalescingFilter(): N6FulshD0CoalescingQueue !!\n")); - PlatformCancelTimer(Adapter , &pNdisCommon->D0RxIndicatTimer); - //PlatformStallExecution(100); - N6FulshD0CoalescingQueue( Adapter, FALSE, TRUE); - pNdisCommon->D0FilterState = RT_D0_FILTER_INIT; - } - } - - return bBufferPkt; -} - -VOID -N6Fill80211PhyAttributes( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_PHY_ATTRIBUTES pPhyAttributes; - ULONG i, index; - UCHAR rate; - - for (i=0, pPhyAttributes = pDot11Attributes->SupportedPhyAttributes ; - iNumSupportedPhys ; - i++,pPhyAttributes++) - { - N6_ASSIGN_OBJECT_HEADER( - pPhyAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_ATTRIBUTES_REVISION_1, - sizeof(DOT11_PHY_ATTRIBUTES)); - - pPhyAttributes->PhyType = pNdisCommon->pDot11PhyMIBs[i].PhyType; - pPhyAttributes->bHardwarePhyState = TRUE; - pPhyAttributes->bSoftwarePhyState = TRUE; - pPhyAttributes->bCFPollable = MgntActQuery_CfPollable(Adapter); - pPhyAttributes->uMPDUMaxLength = NATIVE_802_11_MTU_SIZE; - pPhyAttributes->TempType = dot11_temp_type_unknown; - pPhyAttributes->DiversitySupport = dot11_diversity_support_dynamic; - - switch (pPhyAttributes->PhyType) - { - case dot11_phy_type_hrdsss: - pPhyAttributes->HRDSSSAttributes.bShortPreambleOptionImplemented = FALSE; - pPhyAttributes->HRDSSSAttributes.bPBCCOptionImplemented = FALSE; - pPhyAttributes->HRDSSSAttributes.bChannelAgilityPresent = FALSE; - pPhyAttributes->HRDSSSAttributes.uHRCCAModeSupported = FALSE; - break; - - case dot11_phy_type_ofdm: - pPhyAttributes->OFDMAttributes.uFrequencyBandsSupported = - DOT11_FREQUENCY_BANDS_LOWER | - DOT11_FREQUENCY_BANDS_MIDDLE; - break; - - case dot11_phy_type_erp: - pPhyAttributes->ERPAttributes.bShortPreambleOptionImplemented = TRUE; - pPhyAttributes->ERPAttributes.bPBCCOptionImplemented = FALSE; - pPhyAttributes->ERPAttributes.bChannelAgilityPresent = FALSE; - pPhyAttributes->ERPAttributes.uHRCCAModeSupported = FALSE; - pPhyAttributes->ERPAttributes.bERPPBCCOptionImplemented = FALSE; - pPhyAttributes->ERPAttributes.bDSSSOFDMOptionImplemented = FALSE; - pPhyAttributes->ERPAttributes.bShortSlotTimeOptionImplemented = TRUE; - break; - - default: - break; - } - - // Tx Power Level. - pPhyAttributes->uNumberSupportedPowerLevels = - pNdisCommon->dot11SupportedPowerLevels.uNumOfSupportedPowerLevels; - PlatformMoveMemory( - pPhyAttributes->TxPowerLevels, - pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues, - sizeof(pPhyAttributes->TxPowerLevels)); - - // Data Rate. - PlatformMoveMemory( - &(pPhyAttributes->SupportedDataRatesValue), - &(pNdisCommon->pDot11PhyMIBs[i].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - index = 0; - while ( (rate = pNdisCommon->pDot11PhyMIBs[i].SupportedDataRatesValue.ucSupportedTxDataRatesValue[index]) != 0) - { - pPhyAttributes->DataRateMappingEntries[index].ucDataRateIndex = rate; - pPhyAttributes->DataRateMappingEntries[index].ucDataRateFlag = 0; - pPhyAttributes->DataRateMappingEntries[index].usDataRateValue = rate; - - index++; - } - pPhyAttributes->uNumDataRateMappingEntries = index; - } -} - -VOID -N6Fill80211ExtStaAttributes( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes, - IN PNIC_SUPPORTED_AUTH_CIPHER_PAIRS pSupportedAuthCipherAlgs - ) -{ - PDOT11_EXTSTA_ATTRIBUTES pExtStaAttributes = pDot11Attributes->ExtSTAAttributes; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - pu1Byte Buffer = NULL; - - N6_ASSIGN_OBJECT_HEADER( - pExtStaAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_EXTSTA_ATTRIBUTES_REVISION_3, - sizeof(DOT11_EXTSTA_ATTRIBUTES)); - - // For FIPS support indication. - pExtStaAttributes->bSafeModeImplemented = DOT11_EXTSTA_ATTRIBUTES_SAFEMODE_OID_SUPPORTED; - - - pExtStaAttributes->uScanSSIDListSize = NATIVE_802_11_MAX_SCAN_SSID; - pExtStaAttributes->uDesiredBSSIDListSize = NATIVE_802_11_MAX_DESIRED_BSSID; - pExtStaAttributes->uDesiredSSIDListSize = NATIVE_802_11_MAX_DESIRED_SSID; - pExtStaAttributes->uExcludedMacAddressListSize = NATIVE_802_11_MAX_EXCLUDED_MACADDR; - pExtStaAttributes->uPrivacyExemptionListSize = NATIVE_802_11_MAX_PRIVACY_EXEMPTION; - pExtStaAttributes->uKeyMappingTableSize = NATIVE_802_11_MAX_KEY_MAPPING_ENTRY; - pExtStaAttributes->uDefaultKeyTableSize = NATIVE_802_11_MAX_DEFAULT_KEY_ENTRY; - pExtStaAttributes->uWEPKeyValueMaxLength = NATIVE_802_11_MAX_WEP_KEY_LENGTH; - pExtStaAttributes->uPMKIDCacheSize = NATIVE_802_11_MAX_PMKID_CACHE; - pExtStaAttributes->uMaxNumPerSTADefaultKeyTables = NATIVE_802_11_MAX_PER_STA_DEFAULT_KEY; - pExtStaAttributes->bStrictlyOrderedServiceClassImplemented = FALSE; - pExtStaAttributes->ucSupportedQoSProtocolFlags = 0; - //pExtStaAttributes->bSafeModeImplemented = FALSE; - pExtStaAttributes->uNumSupportedCountryOrRegionStrings = 0; - pExtStaAttributes->pSupportedCountryOrRegionStrings = NULL; - - RT_TRACE( COMP_TEST,DBG_LOUD, ("bAutoPowerSaveMode 0000000\n")); - pExtStaAttributes->uMaxNetworkOffloadListSize = NATIVE_802_11_MAX_NETWORKOFFLOAD_SIZE; - pExtStaAttributes->bAutoPowerSaveMode = TRUE; - pExtStaAttributes->bMFPCapable = TRUE; - - - pExtStaAttributes->uInfraNumSupportedMcastMgmtAlgoPairs = - pSupportedAuthCipherAlgs->pInfraSupportedMcastMgmtAlgoList->uNumOfEntries; - pExtStaAttributes->pInfraSupportedMcastMgmtAlgoPairs = - pSupportedAuthCipherAlgs->pInfraSupportedMcastMgmtAlgoList->AuthCipherPairs; - - // - // Authentication and Encryption algorithm. - // - pExtStaAttributes->uInfraNumSupportedUcastAlgoPairs = - pSupportedAuthCipherAlgs->pInfraUcastAuthCipherList->uNumOfEntries; - pExtStaAttributes->pInfraSupportedUcastAlgoPairs = - pSupportedAuthCipherAlgs->pInfraUcastAuthCipherList->AuthCipherPairs; - - pExtStaAttributes->uInfraNumSupportedMcastAlgoPairs = - pSupportedAuthCipherAlgs->pInfraMcastAuthCipherList->uNumOfEntries; - pExtStaAttributes->pInfraSupportedMcastAlgoPairs = - pSupportedAuthCipherAlgs->pInfraMcastAuthCipherList->AuthCipherPairs; - - pExtStaAttributes->uAdhocNumSupportedUcastAlgoPairs = - pSupportedAuthCipherAlgs->pAdhocUcastAuthCipherList->uNumOfEntries; - pExtStaAttributes->pAdhocSupportedUcastAlgoPairs = - pSupportedAuthCipherAlgs->pAdhocUcastAuthCipherList->AuthCipherPairs; - - pExtStaAttributes->uAdhocNumSupportedMcastAlgoPairs = - pSupportedAuthCipherAlgs->pAdhocMcastAuthCipherList->uNumOfEntries; - pExtStaAttributes->pAdhocSupportedMcastAlgoPairs = - pSupportedAuthCipherAlgs->pAdhocMcastAuthCipherList->AuthCipherPairs; - -} - - - -NDIS_STATUS -N6CSetGeneralAttributes( - IN PADAPTER Adapter - ) -{ - NDIS_MINIPORT_ADAPTER_ATTRIBUTES MiniportAttributes; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); -#if (NDIS_SUPPORT_NDIS620) - NDIS_PM_CAPABILITIES PmCapabilities; -#endif - NDIS_PNP_CAPABILITIES PnpCapabilities; - - - PlatformZeroMemory(&MiniportAttributes, sizeof(NDIS_MINIPORT_ADAPTER_ATTRIBUTES)); - - // - // We should fill up capability variable with zero value first to prevent - // unexpected NDIS parsing and IRQL_NOT_LESS_OR_EQUAL (a) bugcheck code occurs - // after ndisMInitializeAdapter and NdisSetTimer is fired. - // 2010.05.24. - // - -#if (NDIS_SUPPORT_NDIS620) - N6_ASSIGN_OBJECT_HEADER( - MiniportAttributes.GeneralAttributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_2, - sizeof(NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES)); - -#elif (NDIS_SUPPORT_NDIS6) - N6_ASSIGN_OBJECT_HEADER( - MiniportAttributes.GeneralAttributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES_REVISION_1, - sizeof(NDIS_MINIPORT_ADAPTER_GENERAL_ATTRIBUTES)); -#endif - - // By tynli for wowlan attribute "PowerManagementCapabilitiesEx" which only works on revision 2. - - MiniportAttributes.GeneralAttributes.MediaType = NATIVE_802_11_MEDIA_TYPE; - MiniportAttributes.GeneralAttributes.PhysicalMediumType = NATIVE_802_11_PHYSICAL_MEDIA_TYPE; - MiniportAttributes.GeneralAttributes.MtuSize = NATIVE_802_11_MTU_SIZE; - // neo test 123 // this two should be query from HW supported limit - MiniportAttributes.GeneralAttributes.MaxXmitLinkSpeed = NATIVE_802_11_MAX_XMIT_LINK_SPEED; - MiniportAttributes.GeneralAttributes.MaxRcvLinkSpeed = NATIVE_802_11_MAX_RCV_LINK_SPEED; - MiniportAttributes.GeneralAttributes.XmitLinkSpeed = NDIS_LINK_SPEED_UNKNOWN; - MiniportAttributes.GeneralAttributes.RcvLinkSpeed = NDIS_LINK_SPEED_UNKNOWN; - MiniportAttributes.GeneralAttributes.MediaConnectState = MediaConnectStateDisconnected; - MiniportAttributes.GeneralAttributes.MediaDuplexState = MediaDuplexStateHalf; - MiniportAttributes.GeneralAttributes.LookaheadSize = NIC_MAX_PACKET_SIZE - NIC_HEADER_SIZE; - -#if (NDIS_SUPPORT_NDIS620) - PlatformZeroMemory(&PmCapabilities, sizeof(NDIS_PM_CAPABILITIES)); - - MiniportAttributes.GeneralAttributes.PowerManagementCapabilitiesEx = &PmCapabilities; - FillPmCapabilities(Adapter, &PmCapabilities); - - MiniportAttributes.GeneralAttributes.PowerManagementCapabilities = NULL; -#else - PlatformZeroMemory(&PnpCapabilities, sizeof(NDIS_PNP_CAPABILITIES)); - MiniportAttributes.GeneralAttributes.PowerManagementCapabilities = &PnpCapabilities; - FillPnpCapabilities(Adapter, &PnpCapabilities); -#endif - - MiniportAttributes.GeneralAttributes.MacOptions = - NDIS_MAC_OPTION_TRANSFERS_NOT_PEND | -#if COALESCE_RECEIVED_PACKET - NDIS_MAC_OPTION_COPY_LOOKAHEAD_DATA | -#endif - NDIS_MAC_OPTION_NO_LOOPBACK; - - // Qos support. 2007.01.05, by shien chang. - if (pMgntInfo->pStaQos->QosCapability > QOS_DISABLE) - { - MiniportAttributes.GeneralAttributes.MacOptions |= NDIS_MAC_OPTION_8021P_PRIORITY; - } - - MiniportAttributes.GeneralAttributes.SupportedPacketFilters = - NIC_SUPPORTED_FILTERS; - - MiniportAttributes.GeneralAttributes.MaxMulticastListSize = NATIVE_802_11_MAX_MULTICAST_LIST; - MiniportAttributes.GeneralAttributes.MacAddressLength = ETH_LENGTH_OF_ADDRESS; - - PlatformMoveMemory( - &(MiniportAttributes.GeneralAttributes.PermanentMacAddress), - Adapter->PermanentAddress, - ETH_LENGTH_OF_ADDRESS - ); - - PlatformMoveMemory( - &(MiniportAttributes.GeneralAttributes.CurrentMacAddress), - Adapter->CurrentAddress, - ETH_LENGTH_OF_ADDRESS - ); - - MiniportAttributes.GeneralAttributes.RecvScaleCapabilities = NULL; - MiniportAttributes.GeneralAttributes.AccessType = NET_IF_ACCESS_BROADCAST; - MiniportAttributes.GeneralAttributes.DirectionType = NET_IF_DIRECTION_SENDRECEIVE; - MiniportAttributes.GeneralAttributes.IfType = IF_TYPE_IEEE80211; - MiniportAttributes.GeneralAttributes.IfConnectorPresent = TRUE; - MiniportAttributes.GeneralAttributes.DataBackFillSize = NATIVE_802_11_DATA_BACK_FILL_SIZE; - - // Support OIDs. - MiniportAttributes.GeneralAttributes.SupportedOidList = N6GetSupportedOids(); - MiniportAttributes.GeneralAttributes.SupportedOidListLength = N6GetSupportedOidsLength(); - - return NdisMSetMiniportAttributes(Adapter->pNdisCommon->hNdisAdapter, - &MiniportAttributes - ); -} - - -NDIS_STATUS -N6Set80211Attributes( - IN PADAPTER Adapter - ) -{ - NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES Dot11Attributes; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus; - RT_STATUS rtStatus; - NIC_SUPPORTED_AUTH_CIPHER_PAIRS SupportedAuthCipherAlgs; - u4Byte BytesWritten, BytesNeeded; - u1Byte tempAuthType = 0; - - // For single .sys support: - // Point to types: DOT11_VWIFI_COMBINATION_V2 and DOT11_VWIFI_COMBINATION_V3 - PVOID pCombination = NULL; - - - -#if NDIS_SUPPORT_NDIS620 - PDOT11_VWIFI_ATTRIBUTES pVWiFiAttribs = NULL; - ULONG vwifiAttrSize = 0; - PRT_NDIS62_COMMON pNdis62Common = Adapter->pNdis62Common; -#endif - -#if NDIS_SUPPORT_NDIS630 - PDOT11_WFD_ATTRIBUTES WFDAttributes; - BOOLEAN bAutoPowerSaveMode; - ULONG uMaxNetworkOffloadListSize; -#endif - - PlatformZeroMemory(&Dot11Attributes, sizeof(NDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES)); - - if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_1) - { - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_1, - NDIS_SIZEOF_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES_REVISION_1); - } -#if NDIS_SUPPORT_NDIS620 - else if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_20) - { - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_2, - NDIS_SIZEOF_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES_REVISION_2); - } -#endif -#if NDIS_SUPPORT_NDIS630 - else if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_40) - { - - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_802_11_ATTRIBUTES_REVISION_3, - NDIS_SIZEOF_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES_REVISION_3); - } -#endif - - Dot11Attributes.OpModeCapability = pNdisCommon->dot11OperationModeCapability.uOpModeCapability; - Dot11Attributes.NumOfTXBuffers = pNdisCommon->dot11OperationModeCapability.uNumOfTXBuffers; - Dot11Attributes.NumOfRXBuffers = pNdisCommon->dot11OperationModeCapability.uNumOfRXBuffers; - Dot11Attributes.MultiDomainCapabilityImplemented = pNdisCommon->dot11MultiDomainCapabilityImplemented; - Dot11Attributes.NumSupportedPhys = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; - - // - // SupportedPhyAttributes attributes. - // - if (Dot11Attributes.NumSupportedPhys) - { - rtStatus = PlatformAllocateMemory( - Adapter, - &(Dot11Attributes.SupportedPhyAttributes), - Dot11Attributes.NumSupportedPhys * sizeof(DOT11_PHY_ATTRIBUTES) - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to allocate memory for SupportedPhyAttributes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.SupportedPhyAttributes, - Dot11Attributes.NumSupportedPhys * sizeof(DOT11_PHY_ATTRIBUTES)); - - N6Fill80211PhyAttributes(Adapter, &Dot11Attributes); - } - - // - // ExtSTAAttributes attributes. - // - rtStatus = PlatformAllocateMemory( - Adapter, - &(Dot11Attributes.ExtSTAAttributes), - sizeof(DOT11_EXTSTA_ATTRIBUTES) - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to allocate memory for ExtSTAAttributes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.ExtSTAAttributes, - sizeof(DOT11_EXTSTA_ATTRIBUTES)); - - // - // Get the supported authentication and cipher algorithm. - // - PlatformZeroMemory(&SupportedAuthCipherAlgs, sizeof(NIC_SUPPORTED_AUTH_CIPHER_PAIRS)); - - // Store current mode and switch to infrastructure mode. - // - - tempAuthType = Adapter->MgntInfo.Regdot11networktype; - Adapter->MgntInfo.Regdot11networktype = RT_JOIN_NETWORKTYPE_INFRA; - - // Unicast & Infrastructure. - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - Adapter, - &(SupportedAuthCipherAlgs.pInfraUcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR under infra mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - PlatformZeroMemory(SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to query unicast auth cipher pairs under infra mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Multicast & Infrastructure. - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - Adapter, - &(SupportedAuthCipherAlgs.pInfraMcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR under infra mode.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - PlatformZeroMemory(SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to query multicast auth cipher pairs under infra mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Switch to adhoc mode. - // - Adapter->MgntInfo.Regdot11networktype = RT_JOIN_NETWORKTYPE_ADHOC; - // Unicast & Adhoc. - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - Adapter, - &(SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR under adhoc mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - PlatformZeroMemory(SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_UNICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to query unicast auth cipher pairs under adhoc mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Multicast & Adhoc. - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, - 0, - &BytesWritten, - &BytesNeeded); - rtStatus = PlatformAllocateMemory( - Adapter, - &(SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList), - BytesNeeded); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): no buffer for N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR under adhoc mode.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - PlatformZeroMemory(SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, BytesNeeded); - - ndisStatus = N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR( - Adapter, - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, - BytesNeeded, - &BytesWritten, - &BytesNeeded); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to query multicast auth cipher pairs under adhoc mode\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - { - static DOT11_AUTH_CIPHER_PAIR McastMFPCipherList[] = - { - {DOT11_AUTH_ALGO_RSNA_PSK, DOT11_CIPHER_ALGO_BIP}, // 0 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_BIP}, // 1 - }; - - u4Byte ulNumOfPairSupported = sizeof(McastMFPCipherList)/sizeof(DOT11_AUTH_CIPHER_PAIR); - u4Byte TotalLength = sizeof(McastMFPCipherList) + FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - u4Byte FillLength = 0; - PDOT11_AUTH_CIPHER_PAIR_LIST pMFPAUTHList = NULL; - u4Byte i; - - rtStatus = PlatformAllocateMemory( - Adapter, - &(SupportedAuthCipherAlgs.pInfraSupportedMcastMgmtAlgoList), - TotalLength); - - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("N6Set80211Attributes(): failed to query multicast MFP cipher pairs \n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - // Fill DOT11_AUTH_CIPHER_PAIR_LIST !! - pMFPAUTHList = SupportedAuthCipherAlgs.pInfraSupportedMcastMgmtAlgoList; - - PlatformZeroMemory( pMFPAUTHList, sizeof(DOT11_AUTH_CIPHER_PAIR_LIST) ); - - N6_ASSIGN_OBJECT_HEADER( - pMFPAUTHList->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_AUTH_CIPHER_PAIR_LIST_REVISION_1, - sizeof(DOT11_AUTH_CIPHER_PAIR_LIST)); - FillLength += FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs); - - pMFPAUTHList->uNumOfEntries = 0; - pMFPAUTHList->uTotalNumOfEntries = ulNumOfPairSupported; - for (i=0; i TotalLength ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, (" <- [Error]N6CQuery_DOT11_SUPPORTED_MULTICAST_ALGORITHM_PAIR(), NDIS_STATUS_BUFFER_OVERFLOW\n") ); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - pMFPAUTHList->uNumOfEntries ++; - FillLength += sizeof(DOT11_AUTH_CIPHER_PAIR); - } - - CopyMem(pMFPAUTHList->AuthCipherPairs, - McastMFPCipherList, - sizeof(DOT11_AUTH_CIPHER_PAIR)*pMFPAUTHList->uNumOfEntries); - - RT_TRACE( COMP_TEST , DBG_LOUD , ("===> TotalLength = %d\n",TotalLength) ); - RT_TRACE( COMP_TEST , DBG_LOUD , ("===> FillLength = %d\n",FillLength) ); - } - - // Switch back to origin mode. - // - Adapter->MgntInfo.Regdot11networktype = tempAuthType; - - N6Fill80211ExtStaAttributes(Adapter, &Dot11Attributes, &SupportedAuthCipherAlgs); - -#if NDIS_SUPPORT_NDIS620 - if(pNdisCommon->NdisVersion > NDIS_VERSION_BASE_6_1) - { - //4 add vwifi attributes -#if NDIS_SUPPORT_NDIS630 - if(pNdisCommon->NdisVersion > NDIS_VERSION_BASE_6_20) - vwifiAttrSize = FIELD_OFFSET(DOT11_VWIFI_ATTRIBUTES, Combinations) + - (NUM_SUPPORTED_VWIFI_COMBINATIONS) * DOT11_SIZEOF_VWIFI_COMBINATION_REVISION_3; - - else -#endif - vwifiAttrSize = sizeof(DOT11_VWIFI_ATTRIBUTES) + - (NUM_SUPPORTED_VWIFI_COMBINATIONS) * DOT11_SIZEOF_VWIFI_COMBINATION_REVISION_2; - - rtStatus = PlatformAllocateMemory( - Adapter, - &(Dot11Attributes.VWiFiAttributes), - vwifiAttrSize - ); - if (rtStatus != RT_STATUS_SUCCESS) - - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, - ("failed to allocate memory for VWiFiAttributes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.VWiFiAttributes, vwifiAttrSize); - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.VWiFiAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_VWIFI_ATTRIBUTES_REVISION_1, - sizeof(DOT11_VWIFI_ATTRIBUTES)); - - Dot11Attributes.VWiFiAttributes->uTotalNumOfEntries = NUM_SUPPORTED_VWIFI_COMBINATIONS; - -#if 1 - if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_20) - { - pCombination = (PVOID) &(Dot11Attributes.VWiFiAttributes->Combinations[0]); - - N6_ASSIGN_OBJECT_HEADER( - ((PDOT11_VWIFI_COMBINATION_V2) pCombination)->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_VWIFI_COMBINATION_REVISION_2, - DOT11_SIZEOF_VWIFI_COMBINATION_REVISION_2 - ); - - ((PDOT11_VWIFI_COMBINATION_V2) pCombination)->uNumInfrastructure = 1; - ((PDOT11_VWIFI_COMBINATION_V2) pCombination)->uNumSoftAP = 1; - if(!Adapter->bInHctTest) - ((PDOT11_VWIFI_COMBINATION_V2) pCombination)->uNumVirtualStation = 1; - } -#endif -#if NDIS_SUPPORT_NDIS630 - else if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_40) - { - pCombination = (PVOID) &Dot11Attributes.VWiFiAttributes->Combinations[0]; - - N6_ASSIGN_OBJECT_HEADER( - ((PDOT11_VWIFI_COMBINATION_V3) pCombination)->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_VWIFI_COMBINATION_REVISION_3, - DOT11_SIZEOF_VWIFI_COMBINATION_REVISION_3 - ); - - ((PDOT11_VWIFI_COMBINATION_V3) pCombination)->uNumInfrastructure = 1; - ((PDOT11_VWIFI_COMBINATION_V3) pCombination)->uNumSoftAP = 1; - ((PDOT11_VWIFI_COMBINATION_V3) pCombination)->uNumWFDGroup = 2; - ((PDOT11_VWIFI_COMBINATION_V3) pCombination)->uNumVirtualStation = 0; - } -#endif - //4 add extap attributes - if(Adapter->bStartVwifi == TRUE) - { - Dot11Attributes.OpModeCapability |= DOT11_OPERATION_MODE_EXTENSIBLE_AP; - - PlatformAllocateMemory(Adapter, - &(Dot11Attributes.ExtAPAttributes), - sizeof(DOT11_EXTAP_ATTRIBUTES)); - - if(Dot11Attributes.ExtAPAttributes == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Allocate Ndis 6.2 ExtAPAttributes Fail\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - PlatformZeroMemory(Dot11Attributes.ExtAPAttributes, sizeof(DOT11_EXTAP_ATTRIBUTES)); - - N6_ASSIGN_OBJECT_HEADER( - Dot11Attributes.ExtAPAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_EXTAP_ATTRIBUTES_REVISION_1, - sizeof(DOT11_EXTAP_ATTRIBUTES)); - - Dot11Attributes.ExtAPAttributes->uScanSSIDListSize = AP_SCAN_SSID_LIST_MAX_SIZE; - Dot11Attributes.ExtAPAttributes->uPrivacyExemptionListSize = NATIVE_802_11_MAX_PRIVACY_EXEMPTION; - // TODO: Get the real Size Some day - Dot11Attributes.ExtAPAttributes->uDefaultKeyTableSize = DOT11_MAX_NUM_DEFAULT_KEY;//VNic11DefaultKeyTableSize(vnic); - Dot11Attributes.ExtAPAttributes->uWEPKeyValueMaxLength = ( 104 / 8);//VNic11WEP104Implemented(vnic) ? - // 104 / 8 : (VNic11WEP40Implemented(vnic) ? 40 / 8 : 0); - - Dot11Attributes.ExtAPAttributes->uDesiredSSIDListSize = AP_DESIRED_SSID_LIST_MAX_SIZE; - Dot11Attributes.ExtAPAttributes->bStrictlyOrderedServiceClassImplemented = AP_STRICTLY_ORDERED_SERVICE_CLASS_IMPLEMENTED; - Dot11Attributes.ExtAPAttributes->uAssociationTableSize = AP_DEFAULT_ALLOWED_ASSOCIATION_COUNT; - - // - // 11d stuff. - // - Dot11Attributes.ExtAPAttributes->uNumSupportedCountryOrRegionStrings = 0; - Dot11Attributes.ExtAPAttributes->pSupportedCountryOrRegionStrings = NULL; - - // In Ndis 6.0 We use Ad hoc to simulize AP mode So the Ad hoc Security will be the security we support - // TODO: Win 7 , We should support more security in here for Win 7 V3 AP Mode - if(Adapter->bInHctTest) - { - // In Ndis 6.0 We use Ad hoc to simulize AP mode So the Ad hoc Security will be the security we support - Dot11Attributes.ExtAPAttributes->uInfraNumSupportedUcastAlgoPairs = 2; - Dot11Attributes.ExtAPAttributes->pInfraSupportedUcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList->AuthCipherPairs; - - Dot11Attributes.ExtAPAttributes->uInfraNumSupportedMcastAlgoPairs = 2; - Dot11Attributes.ExtAPAttributes->pInfraSupportedMcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->AuthCipherPairs; - } - else - { - // In Ndis 6.0 We use Ad hoc to simulize AP mode So the Ad hoc Security will be the security we support - Dot11Attributes.ExtAPAttributes->uInfraNumSupportedUcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList ->uNumOfEntries; - Dot11Attributes.ExtAPAttributes->pInfraSupportedUcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList->AuthCipherPairs; - - Dot11Attributes.ExtAPAttributes->uInfraNumSupportedMcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->uNumOfEntries; - Dot11Attributes.ExtAPAttributes->pInfraSupportedMcastAlgoPairs = - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->AuthCipherPairs; - } - - } - - - } -#endif // NDIS_SUPPORT_NDIS620 - -#if NDIS_SUPPORT_NDIS630 -{ - PDOT11_WFD_ATTRIBUTES pWFDAttributes = NULL; - DOT11_COUNTRY_OR_REGION_STRING dcors[1] = {{0,0,0}}; - - Dot11Attributes.OpModeCapability |= - DOT11_OPERATION_MODE_WFD_DEVICE | - DOT11_OPERATION_MODE_WFD_GROUP_OWNER | - DOT11_OPERATION_MODE_WFD_CLIENT; - - PlatformAllocateMemory(Adapter, - &(Dot11Attributes.WFDAttributes), - DOT11_SIZEOF_WFD_ATTRIBUTES_REVISION_1); - - if(Dot11Attributes.WFDAttributes == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Allocate Ndis 6.30 WFDAttributes Fail\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - pWFDAttributes = Dot11Attributes.WFDAttributes; - - PlatformZeroMemory(Dot11Attributes.WFDAttributes, DOT11_SIZEOF_WFD_ATTRIBUTES_REVISION_1); - { - N6_ASSIGN_OBJECT_HEADER( - pWFDAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_WFD_ATTRIBUTES_REVISION_1, - DOT11_SIZEOF_WFD_ATTRIBUTES_REVISION_1 - ); - - pWFDAttributes->uNumConcurrentGORole = 1; - pWFDAttributes->uNumConcurrentClientRole = 1; - pWFDAttributes->WPSVersionsSupported = DOT11_WPS_VERSION_2_0; - pWFDAttributes->uMaxSecondaryDeviceTypeListSize = 8; - pWFDAttributes->bServiceDiscoverySupported = FALSE; - pWFDAttributes->bClientDiscoverabilitySupported = FALSE; - pWFDAttributes->bInfrastructureManagementSupported = FALSE; - - // Win8: Let the device port use the locally-administered MAC address ------------------------------------------------ - cpMacAddr(pWFDAttributes->DeviceAddress, Adapter->PermanentAddress); - pWFDAttributes->DeviceAddress[0] |= BIT1; - RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, "Win8 Registered Device Address: ", pWFDAttributes->DeviceAddress); - // ---------------------------------------------------------------------------------------------------------- - - // Win8: Fill the interface addresses ------------------------------------------------------------------------------ - pWFDAttributes->uInterfaceAddressListCount = 2 ; - - PlatformAllocateMemory( - Adapter, - (PVOID*) &pWFDAttributes->pInterfaceAddressList, - sizeof(DOT11_MAC_ADDRESS) * pWFDAttributes->uInterfaceAddressListCount - ); - - if(pWFDAttributes->pInterfaceAddressList == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Allocate Ndis 6.30 pInterfaceAddressList Failure! \n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto Exit; - } - - cpMacAddr(pWFDAttributes->pInterfaceAddressList[0], Adapter->CurrentAddress); - RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, "Win8 Registered Interface Address [0]: ", pWFDAttributes->pInterfaceAddressList[0]); - - cpMacAddr(pWFDAttributes->pInterfaceAddressList[1], Adapter->CurrentAddress); - RT_PRINT_ADDR(COMP_INIT, DBG_LOUD, "Win8 Registered Interface Address [1]: ", pWFDAttributes->pInterfaceAddressList[1]); - // ----------------------------------------------------------------------------------------------------------- - - pWFDAttributes->uNumSupportedCountryOrRegionStrings = 0; - pWFDAttributes->pSupportedCountryOrRegionStrings = &dcors[0]; - pWFDAttributes->uDiscoveryFilterListSize = AP_SCAN_SSID_LIST_MAX_SIZE; - pWFDAttributes->uGORoleClientTableSize = P2P_MAX_P2P_CLIENT; - } -} -#endif - - // - // Ok, now register the attributes. - // - ndisStatus = NdisMSetMiniportAttributes(Adapter->pNdisCommon->hNdisAdapter, - (PNDIS_MINIPORT_ADAPTER_ATTRIBUTES)&Dot11Attributes - ); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("NdisMSetMiniportAttributes: ndisStatu: %d\n", ndisStatus)); - -Exit: - // Memory cleanup. - - if (SupportedAuthCipherAlgs.pInfraUcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList, - SupportedAuthCipherAlgs.pInfraUcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pInfraMcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList, - SupportedAuthCipherAlgs.pInfraMcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList, - SupportedAuthCipherAlgs.pAdhocUcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList, - SupportedAuthCipherAlgs.pAdhocMcastAuthCipherList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (SupportedAuthCipherAlgs.pInfraSupportedMcastMgmtAlgoList != NULL) - { - PlatformFreeMemory( - SupportedAuthCipherAlgs.pInfraSupportedMcastMgmtAlgoList, - SupportedAuthCipherAlgs.pInfraSupportedMcastMgmtAlgoList->uNumOfEntries * sizeof(DOT11_AUTH_CIPHER_PAIR) + - FIELD_OFFSET(DOT11_AUTH_CIPHER_PAIR_LIST, AuthCipherPairs)); - } - - if (Dot11Attributes.ExtSTAAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.ExtSTAAttributes, - sizeof(DOT11_EXTSTA_ATTRIBUTES)); - } - - if (Dot11Attributes.VWiFiAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.VWiFiAttributes,vwifiAttrSize); - } - - - if (Dot11Attributes.ExtAPAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.ExtAPAttributes, - sizeof(DOT11_EXTAP_ATTRIBUTES)); - } - - if (Dot11Attributes.WFDAttributes != NULL) - { - if(Dot11Attributes.WFDAttributes->pInterfaceAddressList!=NULL) - { - PlatformFreeMemory( - Dot11Attributes.WFDAttributes->pInterfaceAddressList, - sizeof(DOT11_MAC_ADDRESS) * Dot11Attributes.WFDAttributes->uInterfaceAddressListCount - ); - } - - PlatformFreeMemory(Dot11Attributes.WFDAttributes,sizeof(DOT11_WFD_ATTRIBUTES)); - } - - if (Dot11Attributes.NumSupportedPhys && Dot11Attributes.SupportedPhyAttributes != NULL) - { - PlatformFreeMemory(Dot11Attributes.SupportedPhyAttributes, - Dot11Attributes.NumSupportedPhys * sizeof(DOT11_PHY_ATTRIBUTES)); - } - - return ndisStatus; -} - -u4Byte -N6CGetTCPCheckFormNetBuffLisInfo( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNetBufferList -) -{ - return 0; -} - - -VOID -N6CSetTCPCheckToNetBuffLisInfo( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN PNET_BUFFER_LIST pNetBufferList -) -{ - return; -} - -VOID -N6FreeAdapter( - IN PADAPTER Adapter - ) -{ - - RT_TRACE(COMP_INIT, DBG_LOUD, ("===>N6FreeAdapter()\n")); - // free CtxWorkItem and ndis62Common. - - MgntFreeMemory(Adapter); - PlatformFreeMemory(Adapter->pNdisCommon, sizeof(RT_NDIS6_COMMON)); - PlatformFreeMemory(Adapter, sizeof(ADAPTER)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("<===N6FreeAdapter()\n")); -} - -// -// Description: -// Compare the packet's privacy field, the EatherType and the packet destination type with the exemption list, -// and return TRUE if this packet should be dropped, otherwise return FALSE. -// Note: -// This function should be called after removing 802.11 Qos and Security fileds. -// -BOOLEAN -N6MatchPrivacyExemptList( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - OCTET_STRING pduOS; - u2Byte TypeLength; // EatherType - u1Byte TypeLengthBuf[2]; - u4Byte i; - USHORT usEtherType; - USHORT usExemptionPacketType; - USHORT usExemptionActionType; - - pduOS.Octet = pRfd->Buffer.VirtualAddress + pRfd->FragOffset; - pduOS.Length = pRfd->PacketLength; - - // - // Get Type Length. - // - if(pduOS.Length < 32) - return FALSE; - - // - // Get EatherType from the IEEE 802.11packet without Qos and Security(IV) fields. - // The Ndis sets the Exemption list with EatherTypes in "Big-Endian", thus transfer - // the EatherType filed from "Little-Endian" to "Big-Endian". - // - TypeLengthBuf[0] = pduOS.Octet[30]; - TypeLengthBuf[1] = pduOS.Octet[31]; - TypeLength= (((u2Byte)EF1Byte(TypeLengthBuf[0]))<<8) + EF1Byte(TypeLengthBuf[1]); // host order. - - // - // Check against each privacy exemption entry. - // - for(i = 0; i < pNdisCommon->PrivacyExemptionEntrieNum; i++) - { - usEtherType = pNdisCommon->PrivacyExemptionEntries[i].usEtherType; - usExemptionActionType = pNdisCommon->PrivacyExemptionEntries[i].usExemptionActionType; - usExemptionPacketType = pNdisCommon->PrivacyExemptionEntries[i].usExemptionPacketType; - - if(usEtherType != N2H2BYTE(TypeLength)) // TypeLength is in network order. - continue; // check next - - if(usExemptionPacketType == DOT11_EXEMPT_MULTICAST) - { - if(!MacAddr_isMulticast(Frame_pDaddr(pduOS))) - continue; // check next - } - else if(usExemptionPacketType == DOT11_EXEMPT_UNICAST) - { - if(MacAddr_isMulticast(Frame_pDaddr(pduOS))) - continue; // check next - } - else if(usExemptionPacketType == DOT11_EXEMPT_BOTH) - { - // go down - } - else - {// not recognized - continue; // check next - } - - if(usExemptionActionType == DOT11_EXEMPT_NO_EXEMPTION) - { - continue; // check next - } - else if(usExemptionActionType == DOT11_EXEMPT_ALWAYS) - { - if(Frame_WEP(pduOS)) - { // the packet is encrypted, but the list alwyas discards the packets with privacy bit set. - return TRUE; - } - - } - else if(usExemptionActionType == DOT11_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE) - { - // - // If we have a key mapping key corresponding to the transmitter address and - // the packet is in plain text then drop the packet. - // If the key is unavailable, and the packet without privacy bit set, we should indicate this packet. - // - if(!Frame_WEP(pduOS)) // the packe is in plain text - { - PRT_WLAN_STA pEntry; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - - pEntry = AsocEntry_GetEntry(pMgntInfo, Frame_pTaddr(pduOS)); - if(!pEntry) - { - // The key is unavailable and this packet is not encrypted. - } - else - { - static u1Byte EmptyPTK[PTK_LEN]; - PlatformZeroMemory(EmptyPTK, PTK_LEN); - if(PlatformCompareMemory(pEntry->perSTAKeyInfo.PTK, EmptyPTK, PTK_LEN) != 0) - {// plain text and key mapping key is unavailable, exempt this frame by returning TRUE - return TRUE; - } - - } - } - else - continue; // check next - } - else - {// not recognized - continue; // check next - } - - } - - return FALSE; - -} - - - -VOID -InitializeAdapterTimerCallback( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - PlatformScheduleWorkItem(&(pNdisCommon->InitializeAdapterWorkItem)); - - return; -} - -// Add by CCW. 20130416 -VOID -PNPReConnentTimerCallback( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - // Refent to http://msdn.microsoft.com/en-us/library/windows/hardware/ff559418(v=vs.85).aspx - // For a miniport adapter in the Pausing state, the miniport driver: - // Can provide status indications with the NdisMIndicateStatusEx function. -#if 0 - if(N6C_GET_MP_DRIVER_STATE(Adapter) != MINIPORT_RUNNING && pNdisCommon->PNPconnentCout < MAX_PNP_RECONNENT_COUNTER ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("PNPReConnentTimerCallback(): Driver state(%d) != MINIPORT_RUNNING, Reset timer!\n", N6C_GET_MP_DRIVER_STATE(Adapter))); - pNdisCommon->PNPconnentCout++; - PlatformSetTimer( Adapter, &pNdisCommon->PNPReConnentTimer, 20); - return; - } - - if(pNdisCommon->PNPconnentCout == MAX_PNP_RECONNENT_COUNTER) // timeout for 500ms, the timeout value can be tuned by different platform or test cases. - { - DrvIFIndicateDisassociation(Adapter , unspec_reason, pMgntInfo->mAId + 1); - return; - // ?? try to dissaco AP !! - } -#endif - - - if(Adapter->MgntInfo.bSetPnpPwrInProgress) - { - // Add delay to prevent from being returned in MgntLinkRetry() by bSetPnpPwrInProgress flag. - PlatformSetTimer( Adapter, &pNdisCommon->PNPReConnentTimer, 10); - return; - } - - // - // We indicate roaming start here while S3/S4 resume if we dissociated before sleep. - // If we indicate roaming start before entering S4 state, - // which could suffers from roaming failure due to roaming timeout. - // Added by Roger, 2007.11.07. - // - // Move from PNP wake flow to PNPReConnentTimerCallback(). 2013.04. - DrvIFIndicateRoamingStart(Adapter); - - if(pNdisCommon->bDissociateBeforeSleep || !Adapter->MgntInfo.bMediaConnect) - { - MgntActSet_802_11_SSID(Adapter, Adapter->MgntInfo.Ssid.Octet, Adapter->MgntInfo.Ssid.Length, TRUE ); - } - else - { - // If we do not disconnect to AP before PNP sleep, just call MgntLinkRetry() to roam to the original AP. - PlatformMoveMemory(Adapter->MgntInfo.APaddrbeforeRoaming, Adapter->MgntInfo.Bssid, 6); - Dot11d_Reset(Adapter); - RemoveAllTS(Adapter); // Do this to reset TS data structure. - MgntLinkRetry(Adapter, TRUE); - } - - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - pNdisCommon->bDissociateBeforeSleep = FALSE; -} - -VOID -D0RxIndicatTimerCallback( - PRT_TIMER pTimer - ) -{ - PADAPTER Adapter = (PADAPTER)pTimer->Adapter; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_RFD *RfdArray; - u2Byte RfdCnt = 0; - PRT_GEN_TEMP_BUFFER pGenBuf; - PRT_RFD TempRfd; - - RT_TRACE(COMP_TEST, DBG_LOUD, ("===> D0RxIndicatTimerCallback()\n")); - - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - - if( pNdisCommon->D0FilterState == RT_D0_FILTER_NONE || - pNdisCommon->D0FilterState == RT_D0_FILTER_FLUSHING) - { - PlatformReleaseSpinLock( Adapter, RT_RX_SPINLOCK); - return; - } - - if( !RTIsListEmpty(&(pNdisCommon->D0FilterPktQueue)) ) - { - pNdisCommon->D0FilterState = RT_D0_FILTER_FLUSHING; - RfdCnt = 0; - pGenBuf = GetGenTempBuffer (Adapter, sizeof(PRT_RFD)*REORDER_WIN_SIZE); - RfdArray = (PRT_RFD *)pGenBuf->Buffer.Ptr; - - while(!RTIsListEmpty(&pNdisCommon->D0FilterPktQueue)) - { - TempRfd = (PRT_RFD)RTRemoveHeadList(&pNdisCommon->D0FilterPktQueue); - RfdArray[RfdCnt] = TempRfd; - RfdCnt = RfdCnt + 1; - } - - DrvIFD0RxIndicatePackets(Adapter , RfdArray , RfdCnt); - - ReturnGenTempBuffer(Adapter, pGenBuf); - } - RT_TRACE(COMP_TEST, DBG_LOUD, ("<=== D0RxIndicatTimerCallback() : Flush OK\n")); - pNdisCommon->D0FilterState = RT_D0_FILTER_INIT; - PlatformReleaseSpinLock( Adapter, RT_RX_SPINLOCK); -} - -// -// To faster NIC init time for OS. -// -VOID -InitializeAdapterWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - - InitializeAdapterCommon(pAdapter); -} - - -VOID -InitializeAdapterThread( - IN PVOID pContext - ) -{ - InitializeAdapterCommon(((PRT_THREAD)pContext)->Adapter); -} - -// -// Gather same code for initialize adapter workitem and callback API. -// -#define MAX_INIT_RETRY_CNT 10 - -BOOLEAN -MatchInitPendingOid( - IN PNDIS_OID_REQUEST NdisRequest - ) -{ - u1Byte index = 0; - - for(index=0; index< (sizeof(NdisInitPendingOid)/sizeof(OID)); index++) - { - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("MatchInitPendingOid OID (0x%x) type (0x%x) \n", NdisInitPendingOid[index].Oid, NdisInitPendingOid[index].Type)); - - if(NdisInitPendingOid[index].Type == NdisRequest->RequestType && - NdisInitPendingOid[index].Oid == NdisRequest->DATA.METHOD_INFORMATION.Oid) - { - return TRUE; - } - } - - return FALSE; -} - -BOOLEAN -InitializePendingOIDBeforeReady( - IN PADAPTER Adapter, - IN PNDIS_OID_REQUEST NdisRequest, - OUT PNDIS_STATUS pRetVal - ) -{ - - if(N6_INIT_READY(Adapter)) - { - return FALSE; - } - else - { - - RT_TRACE( COMP_INIT, DBG_LOUD, ("InitializePendingOIDBeforeReady(): QUERY_INFORMATION OID(%#x) when initializing.\n", NdisRequest->DATA.QUERY_INFORMATION.Oid)); - RT_TRACE( COMP_INIT, DBG_LOUD, ("InitializePendingOIDBeforeReady(): METHOD_INFORMATION OID(%#x) when initializing.\n", NdisRequest->DATA.METHOD_INFORMATION.Oid)); - - N6C_DOT11_DUMP_OID(NdisRequest->DATA.METHOD_INFORMATION.Oid); - - if(MatchInitPendingOid(NdisRequest)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("InitializePendingOIDBeforeReady(): OID when initializing. return PENDING\n")); - *pRetVal = NDIS_STATUS_PENDING; - return TRUE; - } - - // Reset request is skip during initialization. - if(NdisRequest->RequestType==NdisRequestMethod|| NdisRequest->RequestType==NdisRequestSetInformation) - { - - if(NdisRequest->DATA.METHOD_INFORMATION.Oid==OID_DOT11_RESET_REQUEST) - { - - // - // We need to check whether OutputBufferLength is valid prior to following status indication. - // 2014.05.02. - // - if ( NdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength >= sizeof(DOT11_STATUS_INDICATION) ) - { - - PDOT11_STATUS_INDICATION pDot11StatusIndication = NdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - PlatformZeroMemory(pDot11StatusIndication, sizeof(DOT11_STATUS_INDICATION)); - pDot11StatusIndication->uStatusType = DOT11_STATUS_RESET_CONFIRM; - pDot11StatusIndication->ndisStatus = NDIS_STATUS_SUCCESS; - NdisRequest->DATA.METHOD_INFORMATION.BytesRead = sizeof(DOT11_RESET_REQUEST);// After reset operation was completed, return the status indication. - - RT_TRACE( COMP_INIT, DBG_LOUD, ("InitializePendingOIDBeforeReady(): OID_DOT11_RESET_REQUEST when initializing. return SUCCESS\n")); - - *pRetVal = NDIS_STATUS_SUCCESS; - return TRUE; - } - } - } - - // No specific handle in initialization. - return FALSE; - } -} - -InitializeCompleteOID( - IN PADAPTER pAdapter -) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - FunctionIn(COMP_MLME); - - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - if(pNdisCommon->PendedRequest!= NULL) - { - if(MatchInitPendingOid(pNdisCommon->PendedRequest)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, - ("InitializeAdapterCommon(): (1) complete PendedRequest(%p) call N6PciOidRequest()!!!++++++++\n", pNdisCommon->PendedRequest)); - - N6C_DOT11_DUMP_OID(pNdisCommon->PendedRequest->DATA.METHOD_INFORMATION.Oid); - - RT_TRACE(COMP_INIT, DBG_LOUD, - ("InitializeAdapterCommon(): complete PendedRequest(%p) ++++++++\n", pNdisCommon->PendedRequest)); - - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - - N6CompletePendedOID(pAdapter, RT_PENDED_OID_DONT_CARE, - N6SdioOidRequest((NDIS_HANDLE)pAdapter, pNdisCommon->PendedRequest)); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - RT_TRACE(COMP_INIT, DBG_LOUD, ("InitializeAdapterCommon(): No matched OID complete ++++++++\n")); - } - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - } -} - - -static VOID -InitializeAdapterCommon( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = NULL; - RT_STATUS RTStatus = RT_STATUS_SUCCESS; - BOOLEAN bInitFail = FALSE; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("-->InitializeAdapterCommon\n")); - - if(pAdapter->bDriverIsGoingToUnload) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("bDriverIsGoingToUnload before\n")); - goto Exit; - } - - while(!pAdapter->initfinish) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("pAdapter->initfinish %d \n", pAdapter->initfinish)); - delay_ms(1); - } - delay_ms(1); // this delay is use toe avoid this wokritem interrupt into n6pciinitialize!!!! - - if(pAdapter->bDriverIsGoingToUnload) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("bDriverIsGoingToUnload after\n")); - goto Exit; - } - - pAdapter->bInitializeInProgress=TRUE; - - // 2015/02/25 MH Merge from merge temp, illegal methid to support velocity initialize. - if(pMgntInfo->RegPreInitMem) - RTStatus = RT_STATUS_SUCCESS; - else - RTStatus = NicIFAllocateMemory(pAdapter); - if(RTStatus != RT_STATUS_SUCCESS) - { - bInitFail = TRUE; // Fail to perform the init process. - N6WriteEventLog(pAdapter, RT_INIT_FAIL, 0); - RT_TRACE(COMP_INIT, DBG_LOUD, ("NicIFAllocateMemory fail\n")); - goto Exit; - } - - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - PrepareAllRxDescBuffer(pAdapter); - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - - // move allocate memory here to reduce the time at the platform HP95 Toshiba.!! neo - // need to check return value if allocate memory fail. - ADAPTER_SET_STATUS_FLAG(pAdapter, ADAPTER_STATUS_FIRST_INIT); - - RTStatus = pAdapter->HalFunc.InitializeAdapterHandler(pAdapter, pAdapter->MgntInfo.dot11CurrentChannelNumber); - - if(RTStatus != RT_STATUS_SUCCESS) - { - N6WriteEventLog(pAdapter, RT_INIT_FAIL, 0); - NicIFResetMemory(pAdapter); - bInitFail = TRUE; - goto Exit; - } - - PlatformSetCheckForHangTimer(pAdapter); - - ADAPTER_CLEAR_STATUS_FLAG(pAdapter, ADAPTER_STATUS_FIRST_INIT); - - MultiPortSetAllPortsHWReadyStatus(pAdapter, TRUE); - - // - // We shall restore default ASPM settings If Non-ATI solution. - // 2009.03.23. - // - pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - if(pPSC->RegRfPsLevel & RT_RF_PS_LEVEL_ALWAYS_ASPM) - { - // Always enable ASPM & Clock Req. - RT_ENABLE_ASPM(pAdapter); - RT_SET_PS_LEVEL(pAdapter, RT_RF_PS_LEVEL_ALWAYS_ASPM); - } - - //DrvIFIndicateCurrentPhyStatus(pAdapter); - -Exit: - - pAdapter->bInitializeInProgress=FALSE; - - // - // If we had already returned control for the InitializeHandlerEx routine - // and we can removes the specified miniport driver adapter that the miniport driver - // has determined is unrecoverable from the system. - // 2010.06.24. - // - if(pAdapter->initfinish && bInitFail) - { - N6CompletePendedOID(pAdapter, RT_PENDED_OID_DONT_CARE, NDIS_STATUS_FAILURE); - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("InitializeAdapterCommon(): Fail to initialize NIC, remove it from the system!!\n")); - if(!pAdapter->bDriverIsGoingToUnload) - NdisMRemoveMiniport(pAdapter->pNdisCommon->hNdisAdapter); - } - else - { - - // Clear interrupt before enable interrupt. - NicIFClearInterrupt(pAdapter); - NicIFEnableInterrupt(pAdapter); - - // 2012/03/27 hpfan Add for win8 DTM DPC ISR test - if(pAdapter->bUseThreadHandleInterrupt) - { - PlatformSetEventTrigerThread( - pAdapter, - &pAdapter->InterruptThread, - PASSIVE_LEVEL, - NULL); - } - - InitializeCompleteOID(pAdapter); - - pAdapter->bInitComplete = TRUE; - - RT_SET_DRV_STATE(pAdapter, DrvStateHwInitialized); - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<--InitializeAdapterCommon\n")); - -} // InitializeAdapterCommon - -PVOID -GetTwoPortSharedResource( - IN PADAPTER Adapter, - IN u1Byte Type_ToGet, - IN OUT PVOID pVariable_ToGet, // For more readable on caller side. - OUT pu1Byte pTwoPortStatus // For convinient (pu1Byte)NULL is OK. - ) -{ - // XP/Vista not yet take into consideration, Use Platform - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PADAPTER ExtAdapter = GetFirstAPAdapter(Adapter); - u1Byte TwoPortStatus = (u1Byte)TWO_PORT_STATUS__DEFAULT_ONLY; - - //(1.) ====== Decide TWO_PORT_STATUS ====== - if(ExtAdapter == NULL || ExtAdapter == pDefaultAdapter) - { - if(pDefaultAdapter->MgntInfo.mAssoc==TRUE) - TwoPortStatus = TWO_PORT_STATUS__DEFAULT_ONLY; - else - TwoPortStatus = TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE; - } - else if( //(Adapter==ExtAdapter)&&(ExtAdapter->MgntInfo.mAssoc_start==TRUE) - (pDefaultAdapter->MgntInfo.mAssoc==TRUE) - &&(ExtAdapter->MgntInfo.OpMode==RT_OP_MODE_AP) // a dangerous way depend on compiler - &&(pDefaultAdapter->MgntInfo.dot11CurrentWirelessMode&WIRELESS_MODE_G) - &&(IS_WIRELESS_MODE_N(ExtAdapter)) ) - { - TwoPortStatus = TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20; - } - else if( //(Adapter==ExtAdapter)&&(ExtAdapter->MgntInfo.mAssoc_start==TRUE) - (pDefaultAdapter->MgntInfo.mAssoc==TRUE) - &&(ExtAdapter->MgntInfo.OpMode==RT_OP_MODE_AP) // a dangerous way depend on compiler - &&(pDefaultAdapter->MgntInfo.dot11CurrentWirelessMode&WIRELESS_MODE_A) - &&(IS_WIRELESS_MODE_N(ExtAdapter))) - { - TwoPortStatus = TWO_PORT_STATUS__DEFAULT_A_EXTENSION_N20; - } - else if( - (pDefaultAdapter->MgntInfo.mAssoc==TRUE) - &&(ExtAdapter->MgntInfo.OpMode==RT_OP_MODE_AP) ) - { - TwoPortStatus = TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT; - } - else if( - (pDefaultAdapter->MgntInfo.mAssoc==TRUE)&&(ExtAdapter->MgntInfo.OpMode!=RT_OP_MODE_AP) - ) - { - TwoPortStatus = TWO_PORT_STATUS__DEFAULT_ONLY; - } - else if( - (pDefaultAdapter->MgntInfo.mAssoc==FALSE)&&(ExtAdapter->MgntInfo.OpMode==RT_OP_MODE_AP) - ) - { - TwoPortStatus = TWO_PORT_STATUS__EXTENSION_ONLY; - } - else if( - (pDefaultAdapter->MgntInfo.mAssoc==FALSE)&&(pDefaultAdapter->MgntInfo.mIbss==TRUE) - ) - { - TwoPortStatus = TWO_PORT_STATUS__ADHOC; - } - else - { - TwoPortStatus = TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE; - } - - if(pTwoPortStatus != NULL) - *pTwoPortStatus = (u1Byte)TwoPortStatus; - - //(2.) ====== For Each Type of Share Resources Deside its Adapter Source ====== - switch (Type_ToGet) - { - //=================================================================== - case TWO_PORT_SHARED_OBJECT__STATUS: - return pTwoPortStatus; - break; - //=================================================================== - case TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos_WMMParamEle: - { - switch(TwoPortStatus) - { - case TWO_PORT_STATUS__EXTENSION_ONLY: - return (pu1Byte)ExtAdapter->MgntInfo.pStaQos->WMMParamEle;// how to handle the pointer? - break; - default: - return (pu1Byte)pDefaultAdapter->MgntInfo.pStaQos->WMMParamEle;// how to handle the pointer? - break; - } - } - break; - //=================================================================== - case TWO_PORT_SHARED_OBJECT__SET_OF_pStaQos: - { - switch(TwoPortStatus) - { - case TWO_PORT_STATUS__EXTENSION_ONLY: - *(PQOS_MODE)pVariable_ToGet = ExtAdapter->MgntInfo.pStaQos->CurrentQosMode; - break; - default: - *(PQOS_MODE)pVariable_ToGet = pDefaultAdapter->MgntInfo.pStaQos->CurrentQosMode; - break; - } - break; - } - //=================================================================== - // In this case, TwoPortStatus will be treated as BW to output. - case TWO_PORT_SHARED_OBJECT__BW: - { - switch(TwoPortStatus) - { - case TWO_PORT_STATUS__DEFAULT_G_EXTENSION_N20: - case TWO_PORT_STATUS__DEFAULT_A_EXTENSION_N20: - case TWO_PORT_STATUS__ADHOC: - if (pTwoPortStatus != NULL) - { - *pTwoPortStatus = (u1Byte)CHANNEL_WIDTH_20;// cast issue - } - break; - - case TWO_PORT_STATUS__EXTENSION_ONLY: - if (pTwoPortStatus != NULL) - { - *pTwoPortStatus = (u1Byte)ExtAdapter->MgntInfo.dot11CurrentChannelBandWidth; - } - break; - - case TWO_PORT_STATUS__EXTENSION_FOLLOW_DEFAULT: - case TWO_PORT_STATUS__DEFAULT_ONLY: - if (pTwoPortStatus != NULL) - { - *pTwoPortStatus = (u1Byte)pDefaultAdapter->MgntInfo.dot11CurrentChannelBandWidth; - } - break; - - case TWO_PORT_STATUS__WITHOUT_ANY_ASSOCIATE: - if (pTwoPortStatus != NULL) - { - if (Adapter->MgntInfo.pVHTInfo->bEnableVHT) - *pTwoPortStatus = CHNL_GetRegBWSupport(Adapter);// cast issue - else - *pTwoPortStatus = CHNL_GetRegBWSupport(Adapter) ? CHANNEL_WIDTH_40 : CHANNEL_WIDTH_20;// cast issue - } - break; - } - } - break; - //=================================================================== - default: - return NULL; - break; - //=================================================================== - - } - return NULL; -} - -VOID -N6WriteEventLog( - - IN PADAPTER Adapter, - IN RT_EVENTLOG_TYPE type, - IN ULONG Num - ) -{ - PWCHAR ErrorString; - - // 20101025 Joseph: Merge with 91SE code base. This prevent the system unknown log shown on event view. - // Without this log, customer may not be confused. - return; - - switch(type) - { - case RT_FW_DOWLOAD_F: - ErrorString = L"FW_DL_F"; - break; - case RT_INIT_HANDLER_FAIL: - ErrorString = L"RT_INIT_HANDLER_FAIL"; - break; - case RT_INIT_FAIL: - ErrorString = L"RT_INIT_FAIL"; - break; - case RT_MUTUAL_AUTHENTICATION_FAIL: - ErrorString = L" RT_MUTUAL_AUTHENTICATION_FAIL"; - break; - case RT_INIT_OK: - ErrorString = L"RT_INIT_OK"; - break; - case RT_SCAN_START: - ErrorString = L"OID_SCAN_REQUEST"; - break; - case RT_SCAN_COMPLETE: - ErrorString = L"OID_SCAN_COMPLETE"; - break; - case RT_SCAN_NUM: - ErrorString = L"OID_SCAN_NUM"; - break; - case RT_TKIP_MIC_ERROR: - ErrorString = L"TKIP_MIC_ERROR"; - break; - case RT_HW_AIRPLANE_MODE_TRIGGERED: - ErrorString = L"RT_HW_AIRPLANE_MODE_TRIGGERED"; - break; - default: - ErrorString = L"NO_EVENT_INDICATED"; - break; - } - - NdisWriteEventLogEntry( - GlobalRtDriverContext.NdisContext.pDriverObject, - NDIS_STATUS_SUCCESS, - 2, - 1, - &ErrorString, - sizeof(Num), - &Num); -} - -VOID -N6CWriteEventLogEntry( - IN ADAPTER *pAdapter, - IN NDIS_STATUS ndisStatus, - IN ULONG dataLen, - IN u1Byte *data, - IN WCHAR *wcFormat, - IN ... - ) -{ -#if DBG - - va_list argPtr; - RT_GEN_TEMP_BUFFER *buf = NULL; - - va_start(argPtr, wcFormat); - - do - { - if(NULL == (buf = GetGenTempBuffer(pAdapter, GEN_TEMP_BUFFER_SIZE))) - break; - - if(vswprintf_s( - (wchar_t *)buf->Buffer.Ptr, // buffer - buf->Buffer.Length / sizeof(wchar_t), // numberOfElements - wcFormat, // format - argPtr // argptr - )) - { - NdisWriteEventLogEntry( - GlobalRtDriverContext.NdisContext.pDriverObject, - ndisStatus, - 2, - 1, - &buf->Buffer.Ptr, - dataLen, - data); - } - }while(FALSE); - - if(buf) - ReturnGenTempBuffer(pAdapter, buf); - - va_end(argPtr); - -#endif - - return; -} - - -VOID -N6CSendSingleNetBufferListTimerCallback( - IN PRT_TIMER pTimer) -{ - - PADAPTER Adapter = pTimer->Adapter; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PNET_BUFFER pCurrNetBuffer = NULL; - PNET_BUFFER_LIST pCurrNetBufferList = NULL; - - if(PlatformAtomicExchange(&Adapter->IntrNBLRefCount, TRUE)==TRUE) - return; - - PlatformAcquireSpinLock( Adapter, RT_TX_SPINLOCK); - if(pDevice->SendingNetBufferList == NULL) - { - while(TRUE) - { - PlatformAcquireSpinLock(Adapter, RT_BUFFER_SPINLOCK); - if(N6CIsNblWaitQueueEmpty(pNdisCommon->TxNBLWaitQueue)) - { - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - break; - } - - if(!pNdisCommon->bReleaseNblWaitQueueInProgress) - { - pCurrNetBufferList = N6CGetHeadNblWaitQueue(pNdisCommon->TxNBLWaitQueue); - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - - if( N6C_CANNOT_TX(Adapter) ) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("break for CANNOT_TX()\n")); - break; - } - - RT_TRACE(COMP_SEND, DBG_TRACE, (" handle the NBL buffered(%p)\n", pCurrNetBufferList )); - - if( !N6SdioSendSingleNetBufferList( - Adapter, - pCurrNetBufferList, - TRUE) ) // bFromQueue - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6CSendSingleNetBufferList() returns FALSE\n")); - break; - } - } - else - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6CSendSingleNetBufferList(): bReleaseNblWaitQueueInProgress\n")); - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - } - } - } - PlatformReleaseSpinLock( Adapter, RT_TX_SPINLOCK); - - PlatformAtomicExchange(&Adapter->IntrNBLRefCount, FALSE); - return; -} - -BOOLEAN -N6CQueryPhyIdReady( - IN PADAPTER Adapter) -{ - - BOOLEAN bResult = TRUE; - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(pLoopAdapter->MgntInfo); - - // - // The following configuration is for airplane mode synchronization problem on Win8 or later version - // 2013.06.07. - // - while(pLoopAdapter) - { - // We only take first two ports into consideration - if((GET_PORT_NUMBER(pLoopAdapter) == 0) || - (GET_PORT_NUMBER(pLoopAdapter) == 1)) - { - if(pLoopAdapter->pNdis62Common->bDot11SetPhyIdReady == FALSE) - { - RT_TRACE(COMP_RF, DBG_TRACE, ("N6CQueryPhyIdReady(): pLoopAdapter(%p), PortType(%d), bDot11SetPhyIdReady(%d)\n", - pLoopAdapter, pLoopAdapter->pNdis62Common->PortType, pLoopAdapter->pNdis62Common->bDot11SetPhyIdReady)); - bResult = FALSE; - break; - } - } - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - - return bResult; -} - -#if DRV_LOG_REGISTRY - -// -// Description: -// Save current driver state in specific registry -// -// Assumption: -// 1. Running at PASSIVE_LEVEL -// -// Added by Roger, 2013.12.13. -// -NDIS_STATUS -N6WriteRegDriverState( - IN PADAPTER Adapter, - IN ULONG State) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("DrvState"); - u1Byte TimeOut = 100; - - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_TRACE(COMP_INIT,DBG_WARNING, ("N6WriteRegDriverState(): Current IRQL>PASSIVE_LEVEL!!\n")); - return NDIS_STATUS_FAILURE; - } - - if(Adapter->bDriverStopped) - return NDIS_STATUS_FAILURE; - - while(PlatformAtomicExchange(&Adapter->WriteRegRefCount, TRUE) == TRUE) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("N6WriteRegDriverState(): Waiting for previous process...\n")); - PlatformSleepUs(100); - TimeOut--; - if(TimeOut <= 0) - { - RT_TRACE(COMP_INIT,DBG_WARNING, ("N6WriteRegDriverState(): Wait too long!!\n")); - return NDIS_STATUS_FAILURE; - } - } - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT,DBG_TRACE, ("N6WriteRegDriverState(): Status=%x\n", Status)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = State; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - - PlatformAtomicExchange(&Adapter->WriteRegRefCount, FALSE); - - return Status; -} - -#endif - -// -// Description: -// Write "DbgMonitor" registry value -// 2014.05.09, by Cosa. -// -NDIS_STATUS -N6WriteRegDbgMonitor( - IN PADAPTER Adapter, - IN u4Byte DbgMonitor - ) -{ - NDIS_HANDLE ConfigurationHandle; - NDIS_STATUS Status; - NDIS_CONFIGURATION_PARAMETER ConfigParam; - NDIS_STRING KeyName = NDIS_STRING_CONST("DbgMonitor"); - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle(Adapter, &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE_EX(COMP_DBG_MON, DBG_LOUD, ("N6WriteRegDbgMonitor(): Fail!!!, Status=%x\n", Status)); - return Status; - } - - ConfigParam.ParameterType = NdisParameterInteger; - ConfigParam.ParameterData.IntegerData = DbgMonitor; - - NdisWriteConfiguration( - &Status, - ConfigurationHandle, - &KeyName, - &ConfigParam); - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - RT_TRACE_EX(COMP_DBG_MON, DBG_LOUD, ("N6WriteRegDbgMonitor(): Success!!!, DbgMonitor=%x\n", DbgMonitor)); - return Status; -} - -VOID -NdisOIDHistoryInit( - IN PADAPTER pAdapter) -{ - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("NdisOIDHistoryInit() ====> \n")); - - NdisAllocateSpinLock(&(pNdisCommon->OidHistorySpinLock)); - RTInitializeListHead(&pNdisCommon->OidHistoryList); - pNdisCommon->OidHistoryCount = 0; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("NdisOIDHistoryInit() <==== \n")); -} - -VOID -NdisOIDHistoryDeInit( - IN PADAPTER pAdapter) -{ - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_OID_HISTORY_ENTRY pOidHistoryEntry = NULL; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("====> NdisOIDHistoryDeInit()\n")); - - NdisAcquireSpinLock(&(pNdisCommon->OidHistorySpinLock)); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: pNdisCommon->OidHistoryCount %d\n", __FUNCTION__, pNdisCommon->OidHistoryCount)); - - if( pNdisCommon->OidHistoryCount > 0 ) - { - do{ - pOidHistoryEntry = (PRT_OID_HISTORY_ENTRY)RTRemoveHeadListWithCnt(&pNdisCommon->OidHistoryList, &pNdisCommon->OidHistoryCount); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: pNdisCommon->OidHistoryCount %d\n", __FUNCTION__, pNdisCommon->OidHistoryCount)); - - if( pOidHistoryEntry->InformationBuffer != NULL ) - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: Free information buffer %p, length: %d\n", __FUNCTION__, pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength)); - RT_PRINT_DATA(COMP_OID_SET, DBG_TRACE, ("Free information buffer:"), pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength); - PlatformFreeMemory(pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength); - pOidHistoryEntry->InformationBuffer = NULL; - pOidHistoryEntry->InformationBufferLength = 0; - } - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: Free OID history entry.\n", __FUNCTION__)); - PlatformFreeMemory(pOidHistoryEntry, sizeof(RT_OID_HISTORY_ENTRY)); - }while( RTIsListNotEmpty(&pNdisCommon->OidHistoryList) ); - } - - NdisReleaseSpinLock(&(pNdisCommon->OidHistorySpinLock)); - NdisFreeSpinLock(&(pNdisCommon->OidHistorySpinLock)); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("<==== NdisOIDHistoryDeInit()\n")); -} - -VOID -NdisOIDHistoryUpdate( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST pNdisRequest, - IN RT_OID_HISTORY_STATE OidHistoryState) -{ - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_OID_HISTORY_ENTRY pOidHistoryEntry = NULL; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("====> %s\n", __FUNCTION__)); - - do - { - if( pAdapter == NULL ) - break; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: pNdisCommon->OidHistoryCount %d\n", __FUNCTION__, pNdisCommon->OidHistoryCount)); - - if( pNdisCommon->OidHistoryCount >= OID_HISTORY_MAX_NUM ) - { - NdisAcquireSpinLock(&(pNdisCommon->OidHistorySpinLock)); - pOidHistoryEntry = (PRT_OID_HISTORY_ENTRY)RTRemoveHeadListWithCnt(&pNdisCommon->OidHistoryList, &pNdisCommon->OidHistoryCount); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: remove entry from head, pNdisCommon->OidHistoryCount %d\n", __FUNCTION__, pNdisCommon->OidHistoryCount)); - NdisReleaseSpinLock(&(pNdisCommon->OidHistorySpinLock)); - - if( pOidHistoryEntry->InformationBuffer != NULL ) - { - PlatformFreeMemory(pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength); - pOidHistoryEntry->InformationBuffer = NULL; - pOidHistoryEntry->InformationBufferLength = 0; - } - pOidHistoryEntry->CurrentState = OidHistoryState; - pOidHistoryEntry->CurrentTime = PlatformGetCurrentTime(); - pOidHistoryEntry->Oid = pNdisRequest->DATA.METHOD_INFORMATION.Oid; - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->Oid: 0x%X\r\n", pOidHistoryEntry->Oid)); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->CurrentState: %d\r\n", pOidHistoryEntry->CurrentState)); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->CurrentTime: %I64d\r\n", pOidHistoryEntry->CurrentTime)); - - pOidHistoryEntry->RequestType = pNdisRequest->RequestType; - switch (pOidHistoryEntry->RequestType) - { - // Query - case NdisRequestQueryInformation: - pOidHistoryEntry->InformationBufferLength = pNdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength; - break; - - // Set - case NdisRequestSetInformation: - pOidHistoryEntry->InformationBufferLength = pNdisRequest->DATA.SET_INFORMATION.InformationBufferLength; - break; - - // Method - case NdisRequestMethod: - pOidHistoryEntry->InformationBufferLength = pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - break; - } - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->InformationBufferLength: %#x\r\n", pOidHistoryEntry->InformationBufferLength)); - - if( pOidHistoryEntry->InformationBufferLength > 0 ) - { - if( PlatformAllocateMemory(pAdapter, &pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength) == RT_STATUS_SUCCESS ) - { - switch (pOidHistoryEntry->RequestType) - { - // Query - case NdisRequestQueryInformation: - PlatformMoveMemory(pOidHistoryEntry->InformationBuffer, pNdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, pNdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength); - break; - // Set - case NdisRequestSetInformation: - PlatformMoveMemory(pOidHistoryEntry->InformationBuffer, pNdisRequest->DATA.SET_INFORMATION.InformationBuffer, pNdisRequest->DATA.SET_INFORMATION.InformationBufferLength); - break; - - // Method - case NdisRequestMethod: - PlatformMoveMemory(pOidHistoryEntry->InformationBuffer, pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - break; - } - } - else - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("[Full]Fail to allocate memory to store information buffer.\r\n")); - pOidHistoryEntry->InformationBuffer = NULL; - pOidHistoryEntry->InformationBufferLength = 0; - } - } - if( pOidHistoryEntry->InformationBuffer != NULL ) - RT_PRINT_DATA(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->InformationBuffer:\n"), pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength); - - pOidHistoryEntry->TransactionId = pWdiHeader->TransactionId; - - NdisAcquireSpinLock(&(pNdisCommon->OidHistorySpinLock)); - RTInsertTailListWithCnt(&pNdisCommon->OidHistoryList, &(pOidHistoryEntry->List), &pNdisCommon->OidHistoryCount); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: insert entry to tail, pNdisCommon->OidHistoryCount %d\n", __FUNCTION__, pNdisCommon->OidHistoryCount)); - NdisReleaseSpinLock(&(pNdisCommon->OidHistorySpinLock)); - } - else - { - if( PlatformAllocateMemory(pAdapter, &pOidHistoryEntry, sizeof(RT_OID_HISTORY_ENTRY)) != RT_STATUS_SUCCESS ) - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("Allocate OID_HISTORY_ENTRY failure\r\n")); - break; - } - pOidHistoryEntry->InformationBuffer = NULL; - pOidHistoryEntry->InformationBufferLength = 0; - pOidHistoryEntry->CurrentState = OidHistoryState; - pOidHistoryEntry->CurrentTime = PlatformGetCurrentTime(); - pOidHistoryEntry->Oid = pNdisRequest->DATA.METHOD_INFORMATION.Oid; - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->Oid: 0x%X\r\n", pOidHistoryEntry->Oid)); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->CurrentState: %d\r\n", pOidHistoryEntry->CurrentState)); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->CurrentTime: %I64d\r\n", pOidHistoryEntry->CurrentTime)); - - pOidHistoryEntry->RequestType = pNdisRequest->RequestType; - switch (pOidHistoryEntry->RequestType) - { - // Query - case NdisRequestQueryInformation: - pOidHistoryEntry->InformationBufferLength = pNdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength; - break; - // Set - case NdisRequestSetInformation: - pOidHistoryEntry->InformationBufferLength = pNdisRequest->DATA.SET_INFORMATION.InformationBufferLength; - break; - - // Method - case NdisRequestMethod: - pOidHistoryEntry->InformationBufferLength = pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - break; - } - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->InformationBufferLength: %#x\r\n", pOidHistoryEntry->InformationBufferLength)); - - if( pOidHistoryEntry->InformationBufferLength > 0 ) - { - if( PlatformAllocateMemory(pAdapter, &pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength) == RT_STATUS_SUCCESS ) - { - switch (pOidHistoryEntry->RequestType) - { - // Query - case NdisRequestQueryInformation: - PlatformMoveMemory(pOidHistoryEntry->InformationBuffer, pNdisRequest->DATA.QUERY_INFORMATION.InformationBuffer, pNdisRequest->DATA.QUERY_INFORMATION.InformationBufferLength); - break; - // Set - case NdisRequestSetInformation: - PlatformMoveMemory(pOidHistoryEntry->InformationBuffer, pNdisRequest->DATA.SET_INFORMATION.InformationBuffer, pNdisRequest->DATA.SET_INFORMATION.InformationBufferLength); - break; - - // Method - case NdisRequestMethod: - PlatformMoveMemory(pOidHistoryEntry->InformationBuffer, pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - break; - } - } - else - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("[New]Fail to allocate memory to store information buffer.\r\n")); - pOidHistoryEntry->InformationBuffer = NULL; - pOidHistoryEntry->InformationBufferLength = 0; - } - } - - if( pOidHistoryEntry->InformationBuffer != NULL ) - RT_PRINT_DATA(COMP_OID_SET, DBG_TRACE, ("pOidHistoryEntry->InformationBuffer:\n"), pOidHistoryEntry->InformationBuffer, pOidHistoryEntry->InformationBufferLength); - - pOidHistoryEntry->TransactionId = pWdiHeader->TransactionId; - - NdisAcquireSpinLock(&(pNdisCommon->OidHistorySpinLock)); - RTInsertTailListWithCnt(&pNdisCommon->OidHistoryList, &(pOidHistoryEntry->List), &pNdisCommon->OidHistoryCount); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("%s: insert entry to tail, pNdisCommon->OidHistoryCount %d\n", __FUNCTION__, pNdisCommon->OidHistoryCount)); - NdisReleaseSpinLock(&(pNdisCommon->OidHistorySpinLock)); - } - }while(FALSE); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("<==== %s\n", __FUNCTION__)); -} - -VOID -N6CReleaseDataFrameQueuedWorkItemCallback( - IN PVOID pContext -) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PNET_BUFFER_LIST pNetBufferList; - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(pAdapter); - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - KIRQL OldIrql = KeGetCurrentIrql(); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6CReleaseDataFrameQueuedWorkItemCallback()\n")); - - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - pNdisCommon->bReleaseNblWaitQueueInProgress = TRUE; - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - while(TRUE) - { - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - // - // Wait SendingNetBufferList completed. - // - if( pDevice->SendingNetBufferList != NULL ) - { - pDevice->bWaitingSendingNBL = TRUE; - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6CReleaseDataFrameQueuedWorkItemCallback(): wait SendingNetBufferList...\n")); - // Prefast warning C28121: The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - NdisWaitEvent(&(pDevice->evtSendingNBLCompleted), 0); - NdisResetEvent(&(pDevice->evtSendingNBLCompleted)); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - } - RT_ASSERT(pDevice->SendingNetBufferList == NULL, ("N6CReleaseDataFrameQueuedWorkItemCallback(): SendingNetBufferList(%p) should be NULL!!!\n", pDevice->SendingNetBufferList)); - - // - // Remove pending NBLs in wait queue. - // Note that, we must make sure: - // 1. SendingNetBufferList is NULL. - // 2. No one can call N6SdioSendSingleNetBufferList() now. - // 3. All TCB and related resource are completed. - // - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - if(N6CIsNblWaitQueueEmpty(pNdisCommon->TxNBLWaitQueue)) - { - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - break; - } - pNetBufferList = N6CRemoveNblWaitQueue(&pNdisCommon->TxNBLWaitQueue, TRUE); - - if(pNetBufferList != NULL) - RT_NBL_SET_REF_CNT(pNetBufferList, 0); //YJ,test for MPE,120221 - - for (pCurrNetBufferList = pNetBufferList; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_STATUS(pCurrNetBufferList) = NDIS_STATUS_SUCCESS; - } - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6CReleaseDataFrameQueuedWorkItemCallback(): NdisMSendNetBufferListsComplete\n")); - // Prefast warning C6387: 'pNetBufferList' could be '0': this does not adhere to the specification for the function 'NdisMSendNetBufferListsComplete'. - if (pNetBufferList != NULL) - { - NdisMSendNetBufferListsComplete( - pDevice->hNdisAdapter, - pNetBufferList, - ((NDIS_CURRENT_IRQL() == DISPATCH_LEVEL) ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0)); - } - } - - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - pNdisCommon->bReleaseNblWaitQueueInProgress = FALSE; - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); -} - - -// -// Description: -// Timer resource management for SoC off on Win10 Mobile platform -// -// Assumption: -// - Resource allocation for the TimerLock is required before calling this function. -// - TimerLock is not acquired before calling this function -// -// 2016.01.15, created by Roger. -// -VOID -N6CTimerResourceInit( - IN PADAPTER pAdapter -) -{ - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - RTInitializeListHead(&(pPortCommonInfo->TimerResourceList)); - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); -} - - -// -// Description: -// Timer resource management for SoC off on Win10 Mobile platform -// -// Assumption: -// TimerLock is acquired before calling this function -// -// 2016.01.15, created by Roger. -// -VOID -N6CTimerResourceInsert( - IN PADAPTER pAdapter, - IN PRT_TIMER pTimer -) -{ - - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - RTInsertTailListWithCnt(&(pPortCommonInfo->TimerResourceList), &(pTimer->Handle.List), &pPortCommonInfo->uNumberOfInsertedTimerRes); - - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("N6CTimerResourceInsert(): uNumberOfInsertedTimerRes(%d), Timer: %s\n", pPortCommonInfo->uNumberOfInsertedTimerRes, pTimer->szID)); -} - -// -// Description: -// Timer resource management for SoC off on Win10 Mobile platform -// -// Assumption: -// - Resource allocation for the TimerLock is required before calling this function. -// - TimerLock is not acquired before calling this function -// -// 2016.01.15, created by Roger. -// -BOOLEAN -N6CTimerResourceRemove( - IN PADAPTER pAdapter, - IN PRT_TIMER pTimer -) -{ - - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - PRT_LIST_ENTRY pList = NULL; - PRT_TIMER pThisTimer = NULL; - u4Byte uNumberOfTimerHandled = 0; - BOOLEAN bFound = FALSE; - - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - pList = RTGetHeadList(&pPortCommonInfo->TimerResourceList); - - while(!RTIsListHead(&pPortCommonInfo->TimerResourceList, pList)) - { - pThisTimer = (PRT_TIMER) CONTAINING_RECORD(pList, RT_TIMER, Handle.List); - - if(pThisTimer->Handle.NdisTimerHandle == pTimer->Handle.NdisTimerHandle){ - - RTRemoveEntryListWithCnt(pList, &pPortCommonInfo->uNumberOfInsertedTimerRes); - bFound = TRUE; - - RT_TRACE(COMP_SYSTEM, DBG_TRACE, ("N6CTimerResourceRemove(): Timer Found! uNumberOfInsertedTimerRes(%d), Timer: %s\n", - pPortCommonInfo->uNumberOfInsertedTimerRes, pThisTimer->szID)); - - break; - } - pList = RTNextEntryList(&pThisTimer->Handle.List); - } - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - RT_ASSERT(bFound, ("N6CTimerResourceRemove(): Fail to remove specific Timer resource(%s)\n", pTimer->szID)); - - return bFound; -} - - -// -// Description: -// Timer resource management for SoC off on Win10 Mobile platform, we can use this routine to confirm -// whether all timer resources are released when driver is going to unload or halt. -// -// Assumption: -// - Resource allocation for the TimerLock is required before calling this function. -// - TimerLock is not acquired before calling this function -// -// 2016.01.15, created by Roger. -// -VOID -N6CTimerResourceDump( - IN PADAPTER pAdapter -) -{ - - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - PRT_LIST_ENTRY pList = NULL; - PRT_TIMER pTimer = NULL; - u4Byte uNumberOfTimerHandled = 0; - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - pList = RTGetHeadList(&pPortCommonInfo->TimerResourceList); - - while(!RTIsListHead(&pPortCommonInfo->TimerResourceList, pList)) - { - pTimer = (PRT_TIMER) CONTAINING_RECORD(pList, RT_TIMER, Handle.List); - uNumberOfTimerHandled++; - - RT_TRACE(COMP_SYSTEM, DBG_WARNING, ("N6CTimerResourceDump(): uNumberOfTimerHandled(%d), Timer: %s\n", uNumberOfTimerHandled, pTimer->szID)); - - pList = RTNextEntryList(&pTimer->Handle.List); - } - - RT_ASSERT(uNumberOfTimerHandled == pPortCommonInfo->uNumberOfInsertedTimerRes, ("N6CTimerResourceDump(): uNumberOfTimerHandled is not match!\n")); - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - -} - - -// -// Description: -// Timer resource management for SoC off on Win10 Mobile platform -// -// Assumption: -// - Resource allocation for the TimerLock is required before calling this function. -// - TimerLock is not acquired before calling this function -// -// 2016.01.15, created by Roger. -// -VOID -N6CTimerResourceAction( - IN PADAPTER pAdapter, - IN RT_TIMER_RESOURCE_ACTION Action -) -{ - - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - PRT_LIST_ENTRY pList = NULL; - PRT_TIMER pTimer = NULL; - u4Byte uNumberOfTimerHandled = 0; - - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("--->N6CTimerResourceAction(): Action(%d)\n", Action)); - - pList = RTGetHeadList(&pPortCommonInfo->TimerResourceList); - - while(!RTIsListHead(&pPortCommonInfo->TimerResourceList, pList)) - { - - pTimer = (PRT_TIMER) CONTAINING_RECORD(pList, RT_TIMER, Handle.List); - uNumberOfTimerHandled++; - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); - - if(Action == RT_TIMER_RESOURCE_ACTION_SUSPEND) - PlatformSuspendTimer(pAdapter, pTimer); - else if(Action == RT_TIMER_RESOURCE_ACTION_RESUME) - PlatformResumeTimer(pAdapter, pTimer); - else{ - // TODO: - } - - NdisAcquireSpinLock(&(pPortCommonInfo->TimerLock)); - - pList = RTNextEntryList(&pTimer->Handle.List); - } - - RT_ASSERT(uNumberOfTimerHandled == pPortCommonInfo->uNumberOfInsertedTimerRes, ("N6CTimerResourceAction(): uNumberOfTimerHandled is not match!\n")); - RT_TRACE(COMP_SYSTEM, DBG_LOUD, ("<---N6CTimerResourceAction(): Action(%d)\n", Action)); - - NdisReleaseSpinLock(&(pPortCommonInfo->TimerLock)); -} - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.h b/network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.h deleted file mode 100644 index 7b29545c..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/Ndis6Common.h +++ /dev/null @@ -1,2040 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: Ndis6Common.c -// Description: Define data structure, RT_NDIS6_COMMON, to keep NDIS6.x -// common information and export some common helper functions. -// -// Author: rcnjko -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_NDIS6_COMMON_H -#define __INC_NDIS6_COMMON_H - -// -// Header files for the data structure referenced in RT_NDIS6_COMMON. -// -#include "Protocol802_11.h" // For OCTET_STRING, 2005.10.4, by rcnjko. - -// -// -// Interlocked bit manipulation interfaces -// -#define PLATFORM_INTERLOCKED_SET_BITS(Flags, Flag) \ - InterlockedOr((PLONG)(Flags), Flag) - -#define PLATFORM_INTERLOCKED_CLEAR_BITS(Flags, Flag) \ - InterlockedAnd((PLONG)Flags, ~(Flag)) - -#define IsCurrDCMode(pPSC) (pPSC->PowerProfile == NdisPowerProfileBattery) - - -typedef struct _RT_NDIS_DRIVER_CONTEXT -{ - PDRIVER_OBJECT pDriverObject; // From DriverEntry input - NDIS_HANDLE Ndis6MiniportDriverHandle; // From NIDS_HANDLE registered by NdisMRegisterMiniportDriver. - RT_LIST_ENTRY IoDeviceList; // The registered IO device. - u1Byte IoDeviceCount; // The count of IoDeviceList. - WCHAR RegistryPath[256]; // Keep registry path for adaptors to access common registries -}RT_NDIS_DRIVER_CONTEXT, *PRT_NDIS_DRIVER_CONTEXT; - -typedef struct _WDI_TXRX_STATISTICS { - u4Byte numWdiTxDescInit; - u4Byte numWdiTxDescDeInit; - u4Byte numWdiTxDataSend; - u4Byte numWdiTxNBLs; - u4Byte numWdiTxTcbs; - u4Byte numWdiTxNicSend; - u4Byte numWdiTxCoalesce; - u4Byte numWdiTxDataSendDrop; - u4Byte numWdiTxPauseIndicate; - u4Byte numWdiTxRestartIndicate; - u4Byte numWdiCompletePkt; - u4Byte maxDeqNBL; - u4Byte maxTxNBInNBL; - u4Byte numCheckTxPause; - u4Byte numTxResourceAvailable; - u4Byte monitorTxPauseReason; - - u4Byte numRxIndicateNBLToUE; - u4Byte numRxReturnNBLFromUE; - u4Byte numWdiRxStop; - u4Byte numWdiRxRestart; - u4Byte numWdiRxPause; - u4Byte numWdiRxResume; -} WDI_TXRX_STATISTICS , *PWDI_TXRX_STATISTICS ; -extern WDI_TXRX_STATISTICS GLWdiTxRxStatistics; -extern u4Byte GLWdiTestType; // only for testing - -typedef struct _WDI_CMD_STATISTICS -{ - u4Byte numTaskTimeout; -} WDI_CMD_STATISTICS, *PWDI_CMD_STATISTICS; -extern WDI_CMD_STATISTICS GLWdiCmdStatistics; -// -// There are some incompatibility between win9x and win2000+. On win9x, Call to -// NdisInitializeString will cause driver not loaded (doesn't enter DriverEntry). -// We use this macro the resolve the incompatibility problem. 2006.08.11, by shien chang. -// -#ifdef NDIS50_MINIPORT -#define NdisInitializeString(Destination,Source)\ -{\ - PNDIS_STRING _D = (Destination);\ - UCHAR *_S = (Source);\ - WCHAR *_P;\ - _D->Length = (strlen(_S)) * sizeof(WCHAR);\ - _D->MaximumLength = _D->Length + sizeof(WCHAR);\ - NdisAllocateMemoryWithTag((PVOID*)(&(_D->Buffer)), _D->MaximumLength, 0x8180);\ - _P = _D->Buffer;\ - while(*_S != '\0'){\ - *_P = (WCHAR)(*_S);\ - _S++;\ - _P++;\ - }\ - *_P = UNICODE_NULL;\ -} -#endif - -// -// Attributes for Native 802.11. -// 2006.10.08, by shien chang. -// -#define NATIVE_802_11_MEDIA_TYPE NdisMediumNative802_11 -#define NATIVE_802_11_PHYSICAL_MEDIA_TYPE NdisPhysicalMediumNative802_11 -#define NATIVE_802_11_MTU_SIZE (NIC_MAX_PACKET_SIZE - NIC_HEADER_SIZE) -#define NATIVE_802_11_MAX_XMIT_LINK_SPEED 54000000 -#define NATIVE_802_11_MAX_RCV_LINK_SPEED 54000000 -#define NATIVE_802_11_MAX_MULTICAST_LIST MAX_MCAST_LIST_NUM -#define NATIVE_802_11_MEDIA_DUPLEX_STATE MediaDuplexStateFull -#define NATIVE_802_11_DATA_BACK_FILL_SIZE 8 -#define NATIVE_802_11_OPMODE_CAPABILITY_MAJOR_VERSION 2 -#define NATIVE_802_11_OPMODE_CAPABILITY_MINOR_VERSION 0 - -// Upto WinBlue: Realtek supports the following physical layers in DOT11_PHY_TYPE -// + dot11_phy_type_ofdm a (5G) -// + dot11_phy_type_hrdsss b (2.4G) -// + dot11_phy_type_erp g (2.4G) -// + dot11_phy_type_ht n (2.4G + 5G) -// + dot11_phy_type_vht ac (5G) -#define NATIVE_802_11_MAX_NUM_PHY_TYPES 6 - -#define NATIVE_802_11_CURR_NUM_PHY_TYPES 1 - -#define NATIVE_802_11_MAX_SCAN_SSID MAX_SSID_TO_SCAN -#define NATIVE_802_11_MAX_DESIRED_BSSID 8 -#define NATIVE_802_11_MAX_DESIRED_SSID 1 -#define NATIVE_802_11_MAX_EXCLUDED_MACADDR MAX_EXCLUDED_MAC_ADDRESS_LIST -#define NATIVE_802_11_MAX_PRIVACY_EXEMPTION 32 -#define NATIVE_802_11_MAX_KEY_MAPPING_ENTRY 32 -#define NATIVE_802_11_MAX_KEY_MAPPING_ENTRY_HCT 8 -#define NATIVE_802_11_MAX_DEFAULT_KEY_ENTRY 4 -#define NATIVE_802_11_MAX_WEP_KEY_LENGTH 13 -#define NATIVE_802_11_WEP40_KEY_LENGTH 5 -#define NATIVE_802_11_WEP104_KEY_LENGTH 13 -#define NATIVE_802_11_MAX_PMKID_CACHE 3 -#define NATIVE_802_11_MAX_PER_STA_DEFAULT_KEY 32 - -#define WDI_802_11_MAX_NUM_BAND_TYPES 2 -#define WDI_802_11_MAX_NUM_PHY_TYPES NATIVE_802_11_MAX_NUM_PHY_TYPES - -#define MAX_PNP_RECONNENT_COUNTER 25 - -#define GUID_ACTIVE_POWERSCHEME \ - {0x31F9F286, 0x5084, 0x42FE, {0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 }} - -#define GUID_TYPICAL_POWER_SAVINGS \ - {0x381b4222, 0xf694, 0x41f0, {0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e}} - -#define GUID_MIN_POWER_SAVINGS \ - {0x8C5E7FDA, 0xE8BF, 0x4A96, {0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C}} - -#define GUID_MAX_POWER_SAVINGS \ - {0xA1841308, 0x3541, 0x4FAB, {0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A}} - -#define GUID_WLAN_POWER_MODE \ - {0x12BBEBE6, 0x58D6, 0x4636, {0x95, 0xBB, 0x32, 0x17, 0xef, 0x86, 0x7c, 0x1a}} - - -// -// For MAC address processing. 2006.11.01, by shien chang. -// -#define N6_MAKE_WILDCARD_MAC_ADDRESS(addr) \ -{ \ - pu1Byte pu1Addr = (pu1Byte)(addr); \ - pu1Addr[0] = 0xFF; pu1Addr[1] = 0xFF; pu1Addr[2] = 0xFF; \ - pu1Addr[3] = 0xFF; pu1Addr[4] = 0xFF; pu1Addr[5] = 0xFF; \ -} - -// David: DOT11 information element. 2006.12.01, by shien chang. -typedef struct { - UCHAR ElementID; // Element Id - UCHAR Length; // Length -} DOT11_INFO_ELEMENT, * PDOT11_INFO_ELEMENT; - -// -// Status indication state machine, 2006.11.29, by shien chang. -// -#define IS_STATUS_CODE_SUCCESS(StatusCode) \ - (StatusCode == 0 ? TRUE : FALSE) - -// -// 070524, rcnjko: -// -// MiniportReserved[0]: Reference count. -// Initialize as (1 + # of NB) when we start processing the NBL. -// Minus 1 at each time NB returned and end of NBL processing. -// The reason to initialized it as (1 + # of NB) is to prevent -// completed NBL before all processing done. -// -// MiniportReserved[1]: Pointer to the NB to processing. -// Initialize to pointer of first NB in the NBL, -// and will be advaced to next one when we had performed Scatter/Gather operation. -// -#define RT_NBL_GET_REF_CNT(_NBL) \ - ((ULONG_PTR)((_NBL)->MiniportReserved[0])) -#define RT_NBL_SET_REF_CNT(_NBL, _Count) \ - (ULONG_PTR)((_NBL)->MiniportReserved[0]) = _Count -#define RT_NBL_INCREASE_REF_CNT(_NBL) \ - { \ - ULONG_PTR _RefCount; \ - _RefCount = (ULONG_PTR)((_NBL)->MiniportReserved[0]); \ - _RefCount ++; \ - (ULONG_PTR)((_NBL)->MiniportReserved[0]) = _RefCount; \ - } -#define RT_NBL_DECREASE_REF_CNT(_NBL) \ - { \ - ULONG_PTR _RefCount; \ - _RefCount = (ULONG_PTR)((_NBL)->MiniportReserved[0]); \ - _RefCount --; \ - (ULONG_PTR)((_NBL)->MiniportReserved[0]) = _RefCount; \ - } - -#define RT_NBL_NEXT_SEND(_NBL) ((_NBL)->MiniportReserved[1]) - - -#define RT_WDI_NBL_GET_REF_CNT(_NBL) \ - ((ULONG_PTR)((_NBL)->MiniportReserved[1])) - -#define RT_WDI_NBL_SET_REF_CNT(_NBL, _Count) \ - (ULONG_PTR)((_NBL)->MiniportReserved[1]) = _Count - -#define RT_WDI_NBL_INCREASE_REF_CNT(_NBL) \ - { \ - ULONG_PTR _RefCount; \ - _RefCount = (ULONG_PTR)((_NBL)->MiniportReserved[1]); \ - _RefCount ++; \ - (ULONG_PTR)((_NBL)->MiniportReserved[1]) = _RefCount; \ - } - -#define RT_WDI_NBL_DECREASE_REF_CNT(_NBL) \ - { \ - ULONG_PTR _RefCount; \ - _RefCount = (ULONG_PTR)((_NBL)->MiniportReserved[1]); \ - _RefCount --; \ - (ULONG_PTR)((_NBL)->MiniportReserved[1]) = _RefCount; \ - } - -// -// Macros to manipulate NBL's link list, that is, NetBufferListHeader.NetBufferListData.Next. -// For example, we use it to link NBL waiting to process. -// -#define RT_GET_NBL_LINK(_NBL) (&(NET_BUFFER_LIST_NEXT_NBL(_NBL))) -#define RT_GET_NBL_FROM_QUEUE_LINK(_pEntry) \ - (PNET_BUFFER_LIST)(CONTAINING_RECORD((_pEntry), NET_BUFFER_LIST, Next)) - - -#define N6C_CANNOT_TX N6SDIO_CANNOT_TX - -static DOT11_DATA_RATE_MAPPING_ENTRY N6_Std_abg_DataRateMappingTable[] = -{ - {2, 0, 2}, - {4, 0, 4}, - {11, 0, 11}, - {12, 0, 12}, - {18, 0, 18}, - {22, 0, 22}, - {24, 0, 24}, - {36, 0, 36}, - {48, 0, 48}, - {72, 0, 72}, - {96, 0, 96}, - {108, 0, 108} -}; - -//------------------------------------------------------------------------------ -// Definition and declaration about MIC. -//------------------------------------------------------------------------------ - -typedef struct _AUTHENTICATION_EVENT -{ - NDIS_802_11_STATUS_TYPE StatusType; - NDIS_802_11_AUTHENTICATION_REQUEST Request; -}AUTHENTICATION_EVENT, *PAUTHENTICATION_EVENT; - -// mask for authentication/integrity fields -#define NDIS_802_11_AUTH_REQUEST_AUTH_FIELDS 0x0f -#define NDIS_802_11_AUTH_REQUEST_REAUTH 0x01 -#define NDIS_802_11_AUTH_REQUEST_KEYUPDATE 0x02 -#define NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR 0x06 -#define NDIS_802_11_AUTH_REQUEST_GROUP_ERROR 0x0E - -// MIC check time, 60 seconds. -#define MIC_CHECK_TIME 60000000 - -//Flags for PMKID Candidate list structure -#define NDIS_802_11_PMKID_CANDIDATE_PREAUTH_ENABLED 0x01 - -typedef enum _PRE_AUTH_INDICATION_REASON{ - PRE_AUTH_INDICATION_REASON_ASSOCIATION = 0x0, - PRE_AUTH_INDICATION_REASON_PERIOTIC = 0x01 -}PRE_AUTH_INDICATION_REASON; - -// -//Add this micro to protect Init are ready, by Maddest 080731 -// -#define N6_INIT_READY(__pAdapter)\ - ( (__pAdapter)->bHWInitReady &&\ - (__pAdapter)->bSWInitReady &&\ - (!(__pAdapter)->bInitializeInProgress)) - -// -// Fill N6 DOT11_EXTSTA_RECV_CONTEXT -// By Bruce, 2009-08-21. -// -#define N6_FILL_DOT11_EXSTA_RECV_CONTEXT(_pRecCtx, _pAdapter, _pRfd) \ -{ \ - PlatformZeroMemory(_pRecCtx, sizeof(DOT11_EXTSTA_RECV_CONTEXT)); \ - N6_ASSIGN_OBJECT_HEADER( \ - _pRecCtx->Header, \ - NDIS_OBJECT_TYPE_DEFAULT, \ - DOT11_EXTSTA_RECV_CONTEXT_REVISION_1, \ - sizeof(DOT11_EXTSTA_RECV_CONTEXT)); \ - _pRecCtx->uReceiveFlags = DOT11_RECV_FLAG_RAW_PACKET_TIMESTAMP; \ - _pRecCtx->uPhyId = N6CQuery_DOT11_OPERATING_PHYID(_pAdapter); \ - _pRecCtx->uChCenterFrequency = \ - MgntGetChannelFrequency(RT_GetChannelNumber(_pAdapter)); \ - _pRecCtx->usNumberOfMPDUsReceived = _pRfd->nTotalFrag; \ - _pRecCtx->lRSSI = _pAdapter->RxStats.SignalStrength; \ - _pRecCtx->ucDataRate = _pRfd->Status.DataRate; \ - _pRecCtx->uSizeMediaSpecificInfo = 0; \ - _pRecCtx->pvMediaSpecificInfo = NULL; \ - _pRecCtx->ullTimestamp = ((u8Byte)_pRfd->Status.TimeStampHigh << 32) + _pRfd->Status.TimeStampLow; \ -} -typedef enum _N6_INDICATE_STATE -{ - N6_STATE_INITIAL = 0x0001, - N6_STATE_CONNECT_START = 0x0002, - N6_STATE_ASOC_START = 0x0004, - N6_STATE_ASOC_COMPLETE = 0x0008, - N6_STATE_CONNECT_COMPLETE = 0x0010, - N6_STATE_DISASOC = 0x0020, - N6_STATE_ROAM_START = 0x0040, - N6_STATE_ROAM_COMPLETE = 0x0080 -} N6_INDICATE_STATE, *PN6_INDICATE_STATE; - -typedef enum _N6_INDICATE_STATE_FLAG -{ - SM_fNone, - SM_fConnected, - SM_fRoaming -} N6_INDICATE_STATE_FLAG, *PN6_INDICATE_STATE_FLAG; - -typedef enum _N6_INDICATE_OPMODE -{ - SM_mNone, - SM_mInfra, - SM_mAdhoc -} N6_INDICATE_OPMODE, *PN6_INDICATE_OPMODE; - -typedef struct _N6_INDICATE_STATE_MACHINE -{ - N6_INDICATE_OPMODE CurrOpMode; - N6_INDICATE_STATE_FLAG Flag; - N6_INDICATE_STATE CurrentState; - u4Byte NextState; -} N6_INDICATE_STATE_MACHINE, *PN6_INDICATE_STATE_MACHINE; - -// -// -// 070604, rcnjko: -// 1. The NDIS6 miniport driver state management is based on the document: -// ws-07-0043-v00-all-wlan-driver-ndis6-miniport-driver-state-csscg-070604.vsd -// -// 2. Driver is initialized at halted state. -// The state <= MINIPORT_PAUSING cannot Send/Recv packets will be drop, -// see N6XXX_CANNOT_TX() and N6XXX_CANNOT_RX(). -// -// 3. On NDIS6, shutdown and sleep requests happen -// only if we are in paused state. -// -// 4. We can add some state between running and pausing, -// for example, Tx/Rx reseting, and keep packets in these state. -// - -// -// Definition of NDIS6 miniport driver state. -// -typedef enum _N6C_MP_DRIVER_STATE -{ - MINIPORT_HALTED = 0, - MINIPORT_PAUSED, - MINIPORT_PAUSING, - MINIPORT_RUNNING -} N6C_MP_DRIVER_STATE, *PN6C_MP_DRIVER_STATE; - -// -// Routine to NDIS6 miniport driver state. -// -#define N6C_GET_MP_DRIVER_STATE(__pAdapter) ((__pAdapter)->pNdisCommon->MpDriverState) -#define N6C_SET_MP_DRIVER_STATE(__pAdapter, __eState) ((__pAdapter)->pNdisCommon->MpDriverState = (__eState)) - -#define N6C_GET_MP_DRIVER_STATE_BACKUP(__pAdapter) ((__pAdapter)->pNdisCommon->MpDriverStateBackup) -#define N6C_SET_MP_DRIVER_STATE_BACKUP(__pAdapter, __eState) ((__pAdapter)->pNdisCommon->MpDriverStateBackup = (__eState)) - - -#define N6_GET_RX_NBL_POOL(_pAdapter) \ - (GET_RT_SDIO_DEVICE(GetDefaultAdapter(_pAdapter))->RxNetBufferListPool) - -// -// Supported Auth and Cipher pairs. 2006.10.13, by shien chang. -// -typedef struct _NIC_SUPPORTED_AUTH_CIPHER_PAIRS -{ - PDOT11_AUTH_CIPHER_PAIR_LIST pInfraUcastAuthCipherList; - PDOT11_AUTH_CIPHER_PAIR_LIST pInfraMcastAuthCipherList; - PDOT11_AUTH_CIPHER_PAIR_LIST pAdhocUcastAuthCipherList; - PDOT11_AUTH_CIPHER_PAIR_LIST pAdhocMcastAuthCipherList; - PDOT11_AUTH_CIPHER_PAIR_LIST pInfraSupportedMcastMgmtAlgoList; -} NIC_SUPPORTED_AUTH_CIPHER_PAIRS, *PNIC_SUPPORTED_AUTH_CIPHER_PAIRS; - - -// -// PHY MIB definition. 2006.10.09, by shien chang. -// -typedef struct _NIC_PHY_MIB -{ - DOT11_PHY_TYPE PhyType; - ULONG PhyID; - DOT11_RATE_SET OperationalRateSet; - DOT11_RATE_SET BasicRateSet; - DOT11_RATE_SET ActiveRateSet; - UCHAR Channel; - DOT11_SUPPORTED_DATA_RATES_VALUE_V2 SupportedDataRatesValue; - DOT11_PHY_FRAME_STATISTICS Statistics; -} NIC_PHY_MIB, *PNIC_PHY_MIB; - - -// -// Current IBSS parameters. By Bruce, 2007-08-13. -// -typedef struct _RTL_DOT11_IBSS_PARAMS -{ - BOOLEAN bDot11IbssJoinOnly; - PVOID AdditionalIEData; - ULONG AdditionalIESize; -} RTL_DOT11_IBSS_PARAMS, *PRTL_DOT11_IBSS_PARAMS; - -typedef enum _PLATFORM_NDIS_VERSION{ - PLATFORM_NDIS_VERSION_50 = 0x0, - PLATFORM_NDIS_VERSION_51 = 0x1, - PLATFORM_NDIS_VERSION_60 = 0x2, - PLATFORM_NDIS_VERSION_62 = 0x3, -}PLATFORM_NDIS_VERSION; - -// -// Determine the current pended OID type. -// -typedef enum _RT_PENDED_OID_TYPE -{ - RT_PENDED_OID_DONT_CARE, - RT_PENDED_OID_RF_STATE, - RT_PENDED_OID_PNP, - RT_PENDED_OID_CREATE_DELETE_MAC, -} RT_PENDED_OID_TYPE, *PRT_PENDED_OID_TYPE; - -typedef enum _RT_D0_FILTER_STATE -{ - RT_D0_FILTER_NONE = 0, // NO fiter entry - RT_D0_FILTER_INIT = 1, // NO buffer packet !! - RT_D0_FILTER_BUFFING = 2, // buffer packet and start timer - RT_D0_FILTER_FLUSHING = 3, // Try to indic or drop Packet - RT_D0_FILTER_MAX -} RT_D0_FILTER_STATE, *PRT_D0_FILTER_STATE; - -typedef enum _RT_OID_HISTORY_STATE -{ - RT_OID_HISTORY_NONE = 0, //Init state - RT_OID_HISTORY_STARTED = 1, - RT_OID_HISTORY_PENDING = 2, - RT_OID_HISTORY_COMPLETE = 3, - RT_OID_HISTORY_UNKNOWN = 4, - RT_OID_HISTORY_M3 = 5, - RT_OID_HISTORY_M4 = 6, - RT_OID_HISTORY_MAX -}RT_OID_HISTORY_STATE, *PRT_OID_HISTORY_STATE; - -typedef struct _RT_OID_HISTORY_ENTRY -{ - RT_LIST_ENTRY List; - NDIS_OID Oid; - u4Byte TransactionId; //For WDI property to check if the same - RT_OID_HISTORY_STATE CurrentState; //Started, pending, Complete - u8Byte CurrentTime; //Record time when receive, pend or complete OID - NDIS_REQUEST_TYPE RequestType; - PVOID InformationBuffer; - ULONG InformationBufferLength; -}RT_OID_HISTORY_ENTRY, *PRT_OID_HISTORY_ENTRY; - -#define OID_HISTORY_MAX_NUM 30 - -//20150702 Sinda -//We reserve MP_DEFAULT_NUMBER_OF_PORT number of peer for frame indication before connection establishment -//So there are (255 - MP_DEFAULT_NUMBER_OF_PORT) number of peer for connection. -#define MAX_PEER_NUM 255 - -typedef enum _RT_RX_STATE -{ - RT_RX_NORMAL = 0, //Init state - RT_RX_NOTIFYING = 1, - RT_RX_STOP = 2, - RT_RX_PAUSE = 3, - RT_RX_PREPARE_STOP = 4, - RT_RX_MAX -}RT_RX_STATE, *PRT_RX_STATE; - -//20151013 Sean moidy "ViaU3" to "UsbSafetySwitch"as a bit-oriented registry for USB workaround switch -typedef enum _RT_UsbSafetySwitch_Bits -{ - //20130620 MH add for VIA USB30 inpipe reset for rx faildue to host stop to send bulk in irp workaround~!.. - RT_UsbSafetySwitch_ViaU3 = BIT0, //set to 1=support VIA USB3.0 workaround. - RT_UsbSafetySwitch_IrpPendingCount = BIT1, //set to 1=not using Rx IrpPendingCount workaround - RT_UsbSafetySwitch_8812_schmitt = BIT2, //set to 1=not using 8812AU schmitt trigger - RT_UsbSafetySwitch_8814_schmitt = BIT3 //set to 1=not using 8814AU schmitt trigger -}RT_UsbSafetySwitch_Bits; - -typedef enum _RT_TIMER_RESOURCE_ACTION{ - RT_TIMER_RESOURCE_ACTION_CANCEL= 0x00, - RT_TIMER_RESOURCE_ACTION_SUSPEND= 0x01, - RT_TIMER_RESOURCE_ACTION_RESUME= 0x02, -}RT_TIMER_RESOURCE_ACTION, *PRT_TIMER_RESOURCE_ACTION; - -typedef struct _RT_NDIS6_COMMON{ - - // NDIS miniport adapter handle. - NDIS_HANDLE hNdisAdapter; - - UINT NdisVersion; - - // Tx NBL wait queue. - RT_SINGLE_LIST_HEAD TxNBLWaitQueue; - - // The Current NDIS PnP State of the miniport. - N6C_MP_DRIVER_STATE MpDriverState; - N6C_MP_DRIVER_STATE MpDriverStateBackup; - - NDIS_SPIN_LOCK ThreadLock; // For timer synchronization. - NDIS_EVENT AllThreadCompletedEvent; - s4Byte OutStandingThreadCnt;// This counter indicates how many timers are scheduled or fired. - - //---------------------------------------------------------------------------- - // Variables for registry values. - // - //---------------------------------------------------------------------------- - - // "NetworkAddress" - u1Byte NetworkAddress[6]; - - // "SSID" - OCTET_STRING RegSSID; - u1Byte RegSSIDBuf[33]; - - // "Bssid" - u1Byte RegBssidBuf[14]; - u1Byte RegBssid[6]; - - OCTET_STRING RegLocale; - u1Byte RegLocaleBuf[4]; - - // "CornerChange" - u1Byte bRegConcurrent; - - // "ChannelPlan" - u2Byte RegChannelPlan; - - u1Byte RegRFType; - - // "WirelessMode" - int RegWirelessMode; // Default Wireless Mode for initialization. - - // "HTMode" - u1Byte RegHTMode; - - // "Channel" - int RegChannel; // 2.4G Default channel. - int RegChannel5G; // 5G Default channel. - - // "AntennaDiversityType" , 20120313 added by Kordan. - u1Byte AntDivType; - - // "Crystal Frequency" , 20120606 added by Kordan. - u1Byte XtalFrequency; - u1Byte XtalSource; - // "Amplifier Type" , 20120827 added by Kordan. - u1Byte AmplifierType_2G; - u1Byte AmplifierType_5G; - - s1Byte TxBBSwing_2G; - s1Byte TxBBSwing_5G; - BOOLEAN bTurnOffEfuseMask; - u1Byte RFE_Type; - BOOLEAN bTFBGA; - BOOLEAN bEfusePriorityAuto; - - // For Netgear UI, 2005.01.13, by rcnjko. - // "ForcedDataRate" - u2Byte RegForcedDataRate; // Force Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. - u2Byte RegForcedBstDataRate; // Force Bst Data Rate. 0: Auto, 0x02: 1M ~ 0x6C: 54M. , 0x80: MCS0 ~ 0x8f: MCS15 - - // "WirelessMode4ScanList" - int RegWirelessMode4ScanList; // Wireless Mode used to filter scan list, see enum _WIRELESS_MODE for its definition. - // - - // For 818x UI and WPA Verify, 2004.11.30, by rcnjko. - int RegWepEncStatus; - int RegEncAlgorithm; - int RegAuthentAlg; - int WepEncStatusBeforeWpaVerify; - int EncAlgorithmBeforeWpaVerify; - int AuthentAlgBeforeWpaVerify; - UCHAR RegDefaultKeyBuf[4][61]; - OCTET_STRING RegDefaultKey[4]; - UCHAR RegDefaultKeyWBuf[4][61]; - OCTET_STRING RegDefaultKeyW[4]; - int RegDefaultKeyId; - int RegNetworkType; - // - - // "EnablePreAuth" by Annie. - BOOLEAN RegEnablePreAuthentication; - - // For power save mode, 2005.02.15, by rcnjko. - // "PowerSaveMode" - u1Byte RegPowerSaveMode; // Default power-saving mode to confige. - - // For WMM Power Save Mode : - // ACs are trigger/delivery enabled or legacy power save enabled. 2006-06-13 Isaiah - u1Byte StaUapsd; - u1Byte MaxSPLength; - - // For debugging IBSS beacon behavior. 2005.04.18, by rcnjko. - int RegEnableSwBeacon; - - // For AP mode. 2005.05.30, by rcnjko. - int RegActingAsAp; - int RegBeaconPeriod; - int RegDtimPeriod; - int RegPreambleMode; - - // For Intel class mode, 60 students want to send data in the same time. - BOOLEAN bRegClassMode; - - - // For RF power state, 2005.08.23, by rcnjko. - int RegRfOff; - - // For debug monitor, 20140509 by Cosa - int RegDbgMonitor; - - // mix mode protection, 20141113 by Gibson - int RegProtectionmode; - - // For NdisReadNetworkAddress(). - // We shall resotre the network address at mphalt of 8185 for HCT12.0 test. - u1Byte CurrentAddress[6];//dot11MacAddress - BOOLEAN bOverrideAddress; - - - // "QoS", added by Annie, 2005-11-09. - BOOLEAN bRegSupportQoS; - - // Support CCX or not - u1Byte RegCcx; - // CCX Radio Measurement, 2006.05.15, by rcnjko. - int RegCcxRm; - u2Byte RegCcxOffLineDurUpLimit; - - u1Byte RegCcxCatasRoamLimit; - - // Update CCX Cell Tx Power - BOOLEAN RegCcxUpdateTxCellPwr; - // CCX CAC Enable - BOOLEAN RegCcxCACEnable; - - //For HW init - BOOLEAN bRegHwParaFile; - - // For TPC, added by shien chang, 2006.06.29 - int RegTxPowerLevel; - - // Antenna Diversity Mechanism, by Isaiah, 2007-01-03 - BOOLEAN bRegSwAntennaDiversityMechanism; - - // 070207, rcnjko: 802.11d. - BOOLEAN bRegDot11dEnable; - - // "TurboMode". Added by Roger, 2006.12.07. - int RegTurboModeSelect; - - // Auto select channel, 2005.12.27, by rcnjko. - int RegAutoSelChnl; - int RegChnlWeight; // Added by Annie, 2006-07-26. - - // "LiveTime", AP mode for station live time (Added fot ASUS). Annie, 2006-02-16. - int RegLiveTime; - - // For OID_GEN_VENDOR_DESCRIPTION, 2006.03.10, by rcnjko. - OCTET_STRING RegDriverDesc; - u1Byte RegDriverDescBuf[256]; - - // "WdsMode", 0: WDS disabled, 1: AP+WDS. - u1Byte RegWdsMode; - - // "CustomerID", 0: allow EEPROM to determine pMgntInfo->CustomerID, >0: overwrite pMgntInfo->CustomerID. - int RegCustomerID; - - //"RegFragThreshold", 256 ~2432. 2007-03-05 by David - u2Byte RegFragThreshold; - - // DM InitialGain control. hpfan 2009.03.31 - BOOLEAN bRegDMInitialGain; - - BOOLEAN bRegGpioRfSw; - - BOOLEAN bRegHwWpsPbc; - //---------------------------------------------------------------------------- - // Workaround for HCT 12.0. - // - //---------------------------------------------------------------------------- - BOOLEAN bRegHctTest; - BOOLEAN bRegWFDTest; - - BOOLEAN bRegScanTimeCheck; - - BOOLEAN bRegChaos; - NDIS_802_11_NETWORK_TYPE BeSetNetworkTypeByNDTest; - BOOLEAN KeepDisconnectFlag; - - BOOLEAN bRegPnpCapabilities; - - BOOLEAN bRegFixedMacAddr; - - //---------------------------------------------------------------------------- - // For OID. - // - //---------------------------------------------------------------------------- - u4Byte MaxPktSize; - u4Byte ulLookAhead; - ULONG NdisRssiTrigger; - NDIS_802_11_SSID TmpNdisSsid; - NDIS_802_11_NETWORK_TYPE_LIST TmpNdisNetworkTypeList; - NDIS_802_11_CONFIGURATION TmpConfig80211; - - u4Byte NdisPacketFilter; - - // - // 061214, rcnjko: workitem for OID to change RF pwoer state. - // - RT_WORK_ITEM SetRFPowerStateWorkItem; - RT_WORK_ITEM SetAdhocLinkStateWorkItem; - enum _RT_RF_POWER_STATE eRfPowerStateToSet; // RF state to change in SetRFPowerStateWorkItem. - // Privacy exempt list, 2008.10.14, haich. - u4Byte PrivacyExemptionEntrieNum; - DOT11_PRIVACY_EXEMPTION PrivacyExemptionEntries[NATIVE_802_11_MAX_PRIVACY_EXEMPTION]; - //---------------------------------------------------------------------------- - // For case of Out of RFD, 2006.07.25, by shien chang - u2Byte LowRfdThreshold; - - // "PSPXlinkMode". 0: PSP XLink Mode disable, 1: enable. - u1Byte PSPXlinkMode; - - //---------------------------------------------------------------------------- - // For HW/SW encryption/decryption. 0: Auto. 1: HW enc/dec. 2: SW enc/dec. - // 2006.09.29, by shien chang. - u1Byte RegSWTxEncryptFlag; - u1Byte RegSWRxDecryptFlag; - - //---------------------------------------------------------------------------- - // Wait event for returned packet. If some packet are indicated to upper layer and are - // not returned, we should wait before MiniportHalt. 2007.01.19, by shien chang. - NDIS_EVENT AllPacketReturnedEvent; - - //---------------------------------------------------------------------------- - // This is used to set EDCA parameters of QAP - u4Byte RegApEDCAParamBE; - u4Byte RegApEDCAParamBK; - u4Byte RegApEDCAParamVI; - u4Byte RegApEDCAParamVO; - - //---------------------------------------------------------------------------- - // This is used to set EDCA parameters of QSTA - u4Byte RegStaEDCAParamBE; - u4Byte RegStaEDCAParamBK; - u4Byte RegStaEDCAParamVI; - u4Byte RegStaEDCAParamVO; - - //---------------------------------------------------------------------------- - // This is No Ack Setting - u1Byte RegAcNoAck; - - RT_THREAD TxHandleThread; -#if (RTL8723_SDIO_IO_THREAD_ENABLE || RTL8723_USB_IO_THREAD_ENABLE) - RT_THREAD IOHandleThread; -#endif - - // For disable Cck rate - BOOLEAN bRegDisableCck; - - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - //1//1Attention Please!!!<11n or 8190 specific code should be put below this line> - //1!!!!!!!!!!!!!!!!!!!!!!!!!!! - - //---------------------------------------------------------------------------- - // For 802.11n only function. - // - //---------------------------------------------------------------------------- - // For HT Cck rate support, Joseph - BOOLEAN bRegHT_EnableCck; - - //For 40MHz channel support, Joseph - u1Byte RegBWSetting; - BOOLEAN bRegBW40MHzFor2G; - BOOLEAN bRegBW40MHzFor5G; - - BOOLEAN bReg11nAdhoc; - BOOLEAN bRegIOTBcm256QAM; - u1Byte bRegVht24g; - u1Byte bRegAdhocUseHWSec; - - // For AMSDU aggregation, Joseph - int RegAMSDU; - int RegAMSDU_MaxSize; - - int RegHWAMSDU; - - // For AMPDU aggregation <2006.08.10 Emily> - int bRegAMPDUEnable; - int RegAMPDU_Factor; - int RegMPDU_Density; - - // MIMO Power Save - int RegMimoPs; - - // For Rx Reorder Control - u1Byte RegRxReorder; - u1Byte RegRxReorder_WinSize; - u1Byte RegRxReorder_PendTime; - - //---------------------------------------------------------------------------- - // For native 802.11, 2006.10.09, by shien chang. - // - //---------------------------------------------------------------------------- - DOT11_OPERATION_MODE_CAPABILITY dot11OperationModeCapability; - DOT11_CURRENT_OPERATION_MODE dot11CurrentOperationMode; - PDOT11_SUPPORTED_PHY_TYPES pDot11SupportedPhyTypes; - ULONG dot11OperatingPhyId; - ULONG dot11SelectedPhyId; - - PNIC_PHY_MIB pDot11PhyMIBs; - PNIC_PHY_MIB pDot11OperatingPhyMIB; - PNIC_PHY_MIB pDot11SelectedPhyMIB; - - DOT11_SUPPORTED_POWER_LEVELS dot11SupportedPowerLevels; - ULONG dot11CurrentTxPowerLevel; - - // PHY list - ULONG staDesiredPhyList[NATIVE_802_11_MAX_NUM_PHY_TYPES]; - ULONG staDesiredPhyCount; - ULONG ActivePhyId; - - - // 802.11d MIB. - BOOLEAN dot11MultiDomainCapabilityImplemented; - - DOT11_OPTIONAL_CAPABILITY RegOptionalCapability; - DOT11_OPTIONAL_CAPABILITY dot11CurrOptionalCapability; - - // Current power saving level. - ULONG PowerSaveLevel; // Added by Annie, 2006-10-16. - - BOOLEAN bDot11MediaStreamingEnabled; - DOT11_SSID_LIST dot11DesiredSSIDList; - DOT11_SSID_LIST dot11DesiredSSIDListCopy; - u1Byte dot11DesiredSSIDListIndex; - - // - // From OID_DOT11_IBSS_PARAMS. This member is replaced by IbssParams. - // BOOLEAN bDot11IbssJoinOnly; - // Current IBSS Parameters. By Bruce, 2007-08-13. - // - RTL_DOT11_IBSS_PARAMS dot11IbssParams; - - // Auto Configuration, 2006.11.01, by shien chang. - ULONG dot11AutoConfigEnabled; - - DOT11_MAC_ADDRESS dot11DesiredBSSIDList[NATIVE_802_11_MAX_DESIRED_BSSID]; - ULONG NumDot11DesiredBSSIDList; - - ULONG dot11UnreachableDetectionThreshold; - - // Use group key, 2006.11.06, by shien chang. - BOOLEAN dot11UnicastUseGroupEnabled; - - BOOLEAN dot11HiddenNetworkEnabled; - - // Status indication, 2006.11.15, by shien chang. - BOOLEAN bToIndicateScanComplete; - - // New status indication state machine, 2006.11.29, by shien chang. - N6_INDICATE_STATE_MACHINE IndicationEngine; - - //for pend request 20061206 by David - /** If the miniport pends a request, the copy is kept here */ - PNDIS_OID_REQUEST PendedRequest; - - - // For Restore N6 unicase , mutilcase encrypt Alg ,CCW - DOT11_CIPHER_ALGORITHM RegGroupALg; - DOT11_CIPHER_ALGORITHM RegPairwiseAlg; - DOT11_AUTH_ALGORITHM RegAuthalg; - u1Byte RegRSNADefaultkeybuf[61]; - OCTET_STRING RegRSNADefaultkey; - u4Byte RegRSNAKeyID; - - // To avoid explicit scan operation during wakeup auto link stage. - BOOLEAN bWakeupAutoLinkInProgressing; - - // Use this flag to check whether indicate roaming start while system resume, by Roger. 2007.11.07. - BOOLEAN bDissociateBeforeSleep; - - // To present that we do not disconnect to AP before PNP sleep. 2013.10.30, by tynli. - BOOLEAN bPnpKeepConnectToAP; - - //---------------------------------------------------------------------------- - // Power Save Related - //---------------------------------------------------------------------------- - // For inactive power save mode. 2007.07.16, by shien chang. - u1Byte RegInactivePsMode; - // For leisure power save mode in linked state. - u1Byte RegLeisurePsMode; - BOOLEAN RegAdvancedLPs; - // LPS Max listen interval - u1Byte RegLPSMaxIntvl; - //For Keep Alive mechanism. - u1Byte RegKeepAliveLevel; - - - //---------------------------------------------------------------------------- - // RTL8192C USB Tx/Rx Aggregation - //---------------------------------------------------------------------------- -#if TX_AGGREGATION - BOOLEAN UsbTxAggMode; - u1Byte UsbTxAggTotalNum; - u1Byte UsbTxAggDescNum; - //u1Byte UsbTxAggPerBulkNum; -#endif -#if RX_AGGREGATION - u4Byte RxAggMode; - u1Byte RxAggBlockCount; // USB Block count. Block size is 512-byte in hight speed and 64-byte in full speed - u1Byte RxAggBlockTimeout; - u1Byte RxAggPageCount; // 8192C DMA page count - u1Byte RxAggPageTimeout; -#endif - - // WiFi Config, by Bruce, 2007-12-07. - BOOLEAN bRegWiFi; - - //Add by Jacken to save PCI BAR0 , BAR1 , Interrupt line register , command register 2008/02/14 - ULONG PCI_BAR0; - ULONG PCI_BAR1; - UCHAR PCI_InterruptLine; - USHORT PCI_CommandRegister; - - u1Byte RegCckPwEnl; - - // Accept ADDBA Request - int bRegAcceptAddbaReq; - - // CCX Vista Context - Cisco_CCX_CONTEXT Cisco_CCX_CONTEXT; - - u1Byte RegROAMSensitiveLevel; - u1Byte RegRoamHysteresis; - - u1Byte RegRoamingLimit; - - //For Fw control LPS mode - u1Byte bRegFwCtrlLPS; - BOOLEAN bRegLowPowerEnable; - BOOLEAN bRegLPSDeepSleepEnable; - - // Indicate event immediately when reciecing deauth/disassoc. By Bruce, 2009-05-19. - BOOLEAN RegIndicateByDeauth; - - u1Byte RegShowRate; - - RT_WORK_ITEM InitializeAdapterWorkItem; - RT_TIMER InitializeAdapterTimer; - RT_TIMER N6CSendSingleNetBufferListTimer; - RT_THREAD InitializeAdapterThread; - - RT_THREAD InterruptHandlingThread; - - // For S3/S4/FS(S5) connect timer. - RT_TIMER PNPReConnentTimer; - u1Byte PNPconnentCout; - - //For AzWave TKIP in N mode - BOOLEAN bRegTKIPinNmode; - BOOLEAN bRegWEPinNmode; - - BOOLEAN bRegClevoDriver; - - BOOLEAN bRegTDLSEnable; - - - // Turn on/off Win7 Virtaul Wifi support. - BOOLEAN bRegVWifiSupport; - BOOLEAN bRegDMDPMAC0VWifiSupport; - - u1Byte RegbtHsMode; - u1Byte bRegDefaultAntenna; - u1Byte RegAntDiv; - u1Byte RegAntDetection; - - u1Byte bRegUseRxInterruptWorkItem; - - // For WoWLAN mode. by tynli. - u1Byte RegAPOffloadEnable; - u1Byte RegWoWLANLPSLevel; - u1Byte bRegARPOffloadEnable; - u1Byte bRegGTKOffloadEnable; - u1Byte RegProtocolOffloadDecision; - u1Byte RegWoWLANS5Support; - u1Byte RegD2ListenIntvl; - BOOLEAN bRegFakeWoWLAN; - u1Byte bRegNSOffloadEnable; - u1Byte RegNLOEnable; - u1Byte RegPnpKeepLink; - - BOOLEAN bRegWakeOnMagicPacket; - BOOLEAN bRegWakeOnPattern; - BOOLEAN bRegWakeOnDisconnect; - - // Connected standby feature - BOOLEAN bRegPacketCoalescing; - - u1Byte RegFSSDetection; - - // BIT0 - 20MHz - // BIT1 - 40MHz - // BIT2 - 80MHz - // BIT3 - 160MHz - u1Byte RegShortGISupport; - - u1Byte RegAPTimExtend; - u1Byte RegUSBResetTxHang; - - BOOLEAN bRegVelocity; - - // 2010/05/18 MH For GPIO detect timer delay setting. - u1Byte bRegTimerGPIO; - u2Byte bRegGPIODelay; - u2Byte bRegGPIOBack; - - // 2015/08/04 Gary Add for customized Led Strategy - u1Byte bRegLedStrategy; - - // 2010/08/25 MH Add to support pdn mode switch. - u1Byte bRegPDNMode; - - // 2010/09/01 MH According to PM's request, we support dongle selective suspend mode switch. - u1Byte bRegDongleSS; - - // 2010/09/13 MH According to PM's request, we support different SS power seave level. - u1Byte bRegSSPwrLvl; - - // 2011/02/16 MH Add for SS HW radio detect workaround temporarily. - u1Byte bRegSSWakeCnt; - - // 2010/12/17 MH Add for RX aggregation mode switch according to TX/RX traffic. - u1Byte bRegAggDMEnable; - - // 2010/12/31 MH Add for UPHY dynamic chaneg. - u1Byte bRegUPDMEnable; - - // 2011/07/08 MH Add for different link speed display. - u1Byte bRegLinkSpeedLevel; - - u1Byte RegRSSI2GridMode; - - // 2011/07/14 MH Add for rx short cut. - u1Byte bRegRxSC; - - // 2011/07/15 Sinda Add for tx short cut. - u1Byte bRegTxSC; - - // 2011/09/15 MH Add registry for switching packet compete method. - u1Byte RegTxMode; - - // 2012/09/14 MH Add for EDCA turbo mode switch threshold. - // 2012/09/14 MH Add for 88E rate adaptive mode siwtch. - u2Byte RegEdcaThresh; - u2Byte RegRALvl; - - // 2012/10/26 MH Add for 8812/8821 AC series dynamic switch. - u1Byte RegAcUsbDmaTime; - u1Byte RegAcUsbDmaSize; - u1Byte RegAcUsbDmaTime2; - u1Byte RegAcUsbDmaSize2; - - // 2012/10/31 MH Add for power limit table constraint. - u4Byte RegTxPwrLimit; - - // 2012/11/07 Awk add PowerBase for customers to define their power base. - u1Byte RegPowerBase; - - // 2012/11/23 Awk add to enable power limit - u1Byte RegEnableTxPowerLimit; - u1Byte RegEnableTxPowerByRate; - BOOLEAN RegTxPowerTraining; - - // 2015/02/11 VincentL Add for primary/secondary power limit table selection (used as initial one) - u1Byte RegTxPowerLimitTableSel; - u1Byte RegTxPwrLmtDynamicLoading; - - // 2015/04/27 VincentL Add for Toggle Support for TxPwrTable Dump Feature - u1Byte RegSupportTxPwrTableDump; - - // 2015/02/25 VincentL Add for UEFI method - u1Byte RegLoadSystemSKUfromUEFI; - u1Byte RegUEFIProfile; - - // 2015/07/07 VincentL Add for SMBIOS method - u1Byte RegLoadSystemSKUfromSMBIOS; - u1Byte RegLoadProcessorIDfromSMBIOS; - - OCTET_STRING RegPwrByRateFile; - u1Byte RegPwrByRateFileBuf[33]; - OCTET_STRING RegPwrLimitFile; - u1Byte RegPwrLimitFileBuf[33]; - OCTET_STRING RegSecondaryPwrLimitFile; - u1Byte RegSecondaryPwrLimitFileBuf[33]; - - OCTET_STRING RegChannelPlan2G; - u1Byte RegChannelPlan2GBuf[40]; - OCTET_STRING RegChannelPlan5G; - u1Byte RegChannelPlan5GBuf[100]; - - u1Byte RegDecryptCustomFile; - - // 2013/04/16 VincentLan Add to switch Spur Calibration Method - u1Byte RegSpurCalMethod; - // 2013/01/23 VincentLan Add to enable IQK Firmware Offload - u1Byte RegIQKFWOffload; - // 2013/11/23 VincentLan add for for KFree Feature Requested by RF David - u1Byte RegRfKFreeEnable; - - - u1Byte RegTxDutyEnable; - // 2011/11/15 MH Add for user can select different region and map to dedicated power gain offset table. - u1Byte RegPwrTblSel; - - u1Byte RegTxPwrLevel; - - // 2011/11/15 MH Add for user can select different tx power by rate switch by default value and registry value. - u1Byte RegPwrByRate; - u4Byte RegPwrRaTbl1; - u4Byte RegPwrRaTbl2; - u4Byte RegPwrRaTbl3; - u4Byte RegPwrRaTbl4; - u4Byte RegPwrRaTbl5; - u4Byte RegPwrRaTbl6; - u4Byte RegPwrRaTbl7; - u4Byte RegPwrRaTbl8; - u4Byte RegPwrRaTbl9; - u4Byte RegPwrRaTbl10; - u4Byte RegPwrRaTbl11; - u4Byte RegPwrRaTbl12; - u4Byte RegPwrRaTbl13; - u4Byte RegPwrRaTbl14; - u4Byte RegPwrRaTbl15; - u4Byte RegPwrRaTbl16; - - BOOLEAN RegSendPacketByTimer; - - // For handling NBL wait queue - RT_WORK_ITEM ReleaseDataFrameQueuedWorkItem; - BOOLEAN bReleaseNblWaitQueueInProgress; - - u1Byte RegEarlymodeEnable; - BOOLEAN RegAutoAMPDUBurstModeEnable; - u2Byte RegAutoAMPDUBurstModeThreshold; - - u1Byte RegReduceImr; -#if (NEW_EARLY_MODE_ENABLE == 1) - BOOLEAN RegNewAMPDUBurstModeEnable;//New Earry Mode ctrl for 8814A, add by ylb 20130418 -#endif - u2Byte RegTxHignTPThreshold; - u2Byte RegRxHignTPThreshold; - - - u1Byte RegTwoStaConcurrentMode; - - BOOLEAN bRegDbgMode; - u8Byte RegDbgZone; - - PVOID N6PowerSettingHandle; - PVOID N6WLANPowerModeHandle; - - - // 2011/03/23 Offload Network - ULONG ScanPeriod; - BOOLEAN bNLOActiveScan; - BOOLEAN bFilterHiddenAP; - u4Byte Oidcounter; - BOOLEAN bToIndicateNLOScanComplete; - - GUID NetCfgInstanceId; // Read from the registry in initialization. - - u1Byte RegPAMode; - - //2011.09.23 LukeLee add for path diversity - BOOLEAN bPathDivEnable; - - BOOLEAN bRegBtFwSupport; - - // Add TCP offload - ULONG RegTCPOffloadMode; - - // D0 Rx colse - RT_TIMER D0RxIndicatTimer; - RT_LIST_ENTRY D0FilterPktQueue; - NDIS_SPIN_LOCK D0FilterPktLock; // For timer synchronization. - RT_D0_FILTER_STATE D0FilterState; - - // 2011/12/08 hpfan Add for Tcp Reorder - BOOLEAN bTcpReorderEnable; - - u1Byte bRegUseThreadHandleInterrupt; - u1Byte bRegDPCISRTest; - - //Sherry added for support txbuffer colease for 8192DU-VC - BOOLEAN bSupportTxPacketBufferColease; - - //Sherry added to allow user disable 1 band in advanced setting of device management - u1Byte RegWirelessBand; - - // 11n sigma support - BOOLEAN bReg40Intolerant; - BOOLEAN bRegAMPDUManual; - u1Byte RegTxSPStream; - u1Byte RegRxSPStream; - u1Byte RegBeamformCap; // Beamforming Capability - // Beamforming RF path number - u1Byte RegBeamformerCapRfNum; - u1Byte RegBeamformeeCapRfNum; - - u1Byte RegLdpc; // LDPC capability - u1Byte RegStbc; // STBC capablitiy - - BOOLEAN bRegBeamformAutoTest; - - u1Byte RegUsbMode; - u1Byte RegForcedUsbMode; - u1Byte RegUsbCurMode; - u2Byte RegUsbMode3To2Cnt; - u2Byte RegUsbMode2To3Cnt; - u2Byte RegUsbMode2To3CntPrev; - u2Byte RegUsbMode2To3CntFail; - u1Byte RegUsbSwFast; - u1Byte RegUsbWps; - u1Byte RegUsbSp; - u1Byte RegUsbChnl; - u1Byte RegUsbSwitchSpeed; - u1Byte RegUsbSwitchThL; - u1Byte RegUsbSwitchThH; - u1Byte RegUsbSwitchThRssi; - u1Byte RegUsbSwBy; - u1Byte RegUsbRfSet; - - BOOLEAN bRegEDCCASupport; - - // 2012/07/24 MH Add for win8 usb whql tst & WFD multi channel. - u1Byte RegUseDefaultCID; - - u1Byte RegWfdTime; - u1Byte RegWfdChnl; - - u1Byte RegNByteAccess; //page add for N Byte access BB reg when doing power by rate - u1Byte RegFWOffload; //page add for fw offload for 8812au - u1Byte RegDownloadFW; - BOOLEAN RegFWQC; - - // 2012/11/28 MH Add for BB team AMPDU test. - u1Byte RegAMfactor; - u1Byte RegVHTRSec; - - u2Byte RegScanLarge; - u2Byte RegScanMiddle; - u2Byte RegScanNormal; - u2Byte RegScanActive; - u2Byte RegForcedScanPeriod; - - u1Byte RegPreferBand; - - // Pre-transition for OID_PNP_SET_POWER OID wake up handling, added by Roger, 2012.11.28. - u1Byte RegPreTransPnP; - - //20140702 hana add for USB WFD test, wait seconds before skip scan when Go is connected - u1Byte RegWaitBeforeGoSkipScan; - - //20130109 Used for Invitation No/After to Pass, with skip scan when Go is connected - u1Byte RegGoSkipScanForWFDTest; - u1Byte RegClientSkipScanForWFDTest; - BOOLEAN RegForceGoTxData20MBw; - - BOOLEAN bRegHWRTSEnable; - - // "TxPwrPercentage" - u1Byte RegTxPwrPercentage; // Default Tx output power percentage. - - u1Byte RegScanOffloadType; - - // 2013/02/05 MH Add for streamMode switch. - u1Byte RegStreamMode; - // 2013/02/06 MH Add Transmit power control level for all customer in the future. - u1Byte RegTPCLvl; - u1Byte RegTPCLvlD; - u1Byte RegTPCLvl5g; - u1Byte RegTPCLvl5gD; - - u1Byte RegEnableAdaptivity; - u1Byte RegL2HForAdaptivity; - u1Byte RegHLDiffForAdaptivity; - u1Byte RegEnableCarrierSense; - u1Byte RegNHMEnable; - u1Byte RegDmLinkAdaptivity; - u1Byte RegDCbackoff; - u1Byte RegAPNumTH; - - BOOLEAN RegPacketDrop; - - u1Byte RegEnableResetTxStuck; - - u1Byte RegSifsThresh; - - u1Byte RegFwload; - - u1Byte RegUsbSafetySwitch; - - u1Byte RegRspPwr; - u4Byte RegPktIndicate; - - BOOLEAN RegClearAMDWakeUpStatus; // zhiyuan add for 88ee Lenovo AMD platform - - BOOLEAN RegbCustomizedScanPeriod; - u2Byte RegIntelCustomizedScanPeriod; - u2Byte RegAMDCustomizedScanPeriod; - - - u2Byte RegDisableBTCoexist; - - BOOLEAN RegEnableMA; - - u1Byte RegVhtWeakSecurity; - //20130606 MH For passive scan control dynamic switch after meeting with RF/FAE team. - // 0= by channel plan, 1=5g all passive scan / 2= 24g passive scan /3= 2/5g all passive scan - u1Byte RegPassiveScan; - - BOOLEAN RegIsAMDIOIC; - u4Byte RegWmmPage; - u1Byte RegDisableAC; - u4Byte RegLedInterval; - u1Byte Reg8814auEfuse; - u1Byte RegValidRFPath; - - - u1Byte RegMultiChannelFcsMode; - u1Byte RegMultiChannelFcsNoA; - u1Byte RegMCCNoAStartTime; - u1Byte RegMCCStaBeaconTime; - u1Byte RegMCCQPktLevel; - u1Byte RegWFDOpChannel; - u1Byte RegWFDPeerOpChannel; - u2Byte RegConnectionConfigTimeIntv; - u1Byte RegRetryTimes; - - u4Byte Regbcndelay; - BOOLEAN RegIntelPatchPNP; - BOOLEAN RegForcePCIeRate; - u1Byte RegRomDLFwEnable; - u1Byte RegFwCtrlPwrOff; - u1Byte RegCardDisableInLowClk; - BOOLEAN RegAutoChnlSel; - u1Byte RegDisableRtkSupportedP2P; - BOOLEAN RegFixBTTdma; - u1Byte RegFwIPSLevel; - BOOLEAN RegRxPsWorkAround; - BOOLEAN RegSdioDpcIsr; - BOOLEAN RegNblRacingWA; - - RT_LIST_ENTRY OidHistoryList; - NDIS_SPIN_LOCK OidHistorySpinLock; - u1Byte OidHistoryCount; - - // SDIO polling interrupt mode - BOOLEAN RegSdioPollIntrHandler; - u2Byte RegSdioIntrPollingLimit; - - //----------------------------------------------- - // WDI support capability - //----------------------------------------------- - u1Byte WDISupport:1; - u1Byte Reserved:7; - - WDI_BAND_INFO_CONTAINER BandInfo[WDI_802_11_MAX_NUM_BAND_TYPES]; - ULONG BandInfoCount; - WDI_PHY_INFO_CONTAINER PhyInfo[WDI_802_11_MAX_NUM_PHY_TYPES]; - - //Rx control state is used for port - RT_RX_STATE bRxControlState; - //Rx data path state is used for adapter - RT_RX_STATE bRxDataPathState; - - u1Byte DialogToken; - PlatformSemaphore RxNotifySemaphore; - BOOLEAN RegHangDetection; - u1Byte RegPreInitMem; - u1Byte Reg88EIOTAction; - u2Byte RegTxSendAsap; - - // MAC Address Randomization - u1Byte RegSupportMACRandom; - - // ECSA - u1Byte RegSupportECSA; - - // FT - u1Byte RegSupportFT; - - u1Byte RegSuspendTimerInLowPwr; -} RT_NDIS6_COMMON, *PRT_NDIS6_COMMON; - -typedef RT_NDIS6_COMMON RT_NDIS_COMMON, *PRT_NDIS_COMMON; - - -#define GET_RT_DIRECT_IRP_INFO(__pNdisCommon) NULL -#define IS_RT_DIRECT_IRP_SUPPORT(__pNdisCommon) FALSE - - -// -// Forward declaration for functions using RT_TX_LOCAL_BUFFER. -// -typedef struct _RT_TX_LOCAL_BUFFER RT_TX_LOCAL_BUFFER, *PRT_TX_LOCAL_BUFFER; - -// -// NDIS6 Common Helper functions. -// -VOID -N6CopyPacket( - IN PNET_BUFFER pNetBuffer, - OUT PRT_TX_LOCAL_BUFFER pLocalBuffer, - OUT pu2Byte pPktLength); - - -VOID -N6IndicateCurrentPhyPowerState( - IN PADAPTER pAdapter, - IN ULONG phyId); - -NDIS_STATUS -N6WriteRegRfPowerState( - IN PADAPTER Adapter, - IN BOOLEAN bRfOn); - -NDIS_STATUS -N6WriteRegDbgMonitor( - IN PADAPTER Adapter, - IN u4Byte DbgMonitor - ); - -#if DRV_LOG_REGISTRY -NDIS_STATUS -N6WriteRegDriverState( - IN PADAPTER Adapter, - IN ULONG State); -#endif - -NDIS_STATUS -N6WriteAdhocLinkState( - IN PADAPTER Adapter, - IN BOOLEAN AdhocLinkState); - -NDIS_STATUS -N6WriteUsbCurrentMode( - IN PADAPTER Adapter, - IN u1Byte UsbMode); - -NDIS_STATUS -N6WriteUsbMode3To2Counter( - IN PADAPTER Adapter); - -NDIS_STATUS -N6WriteUsbMode2To3Counter( - IN PADAPTER Adapter); - -NDIS_STATUS -N6WriteUsbModeSwitchFlag( - IN PADAPTER Adapter, - IN u1Byte UsbSwitch); - -NDIS_STATUS -N6WriteUsbModeSwitchChnl( - IN PADAPTER Adapter, - IN u2Byte Channel); - -NDIS_STATUS -N6WriteUsbModeSwitchBy( - IN PADAPTER Adapter, - IN u1Byte SwitchBy); - -NDIS_STATUS -N6WriteUsbMode2To3CounterFail( - IN PADAPTER Adapter); - -VOID -N6IndicateScanComplete( - IN PADAPTER Adapter, - IN RT_STATUS status); - -VOID -N6IndicateConnectionStart( - IN PADAPTER Adapter); - -VOID -N6IndicateConnectionComplete( - IN PADAPTER Adapter, - IN RT_STATUS status); - -VOID -N6IndicateAssociationStart( - IN PADAPTER Adapter); - -VOID -N6IndicateAssociationComplete( - IN PADAPTER Adapter, - IN RT_STATUS status); - -VOID -N6IndicateDisassociation( - IN PADAPTER Adapter, - IN u2Byte reason); - -VOID -N6IndicateRoamingStart( - IN PADAPTER Adapter); - -VOID -N6IndicateRoamingComplete( - IN PADAPTER Adapter, - IN RT_STATUS status); - -BOOLEAN -N6Dot11AddrIsBcast( - IN DOT11_MAC_ADDRESS dot11Addr); - -BOOLEAN -N6Dot11AddrIsfe( - IN DOT11_MAC_ADDRESS dot11Addr); - - -VOID -InitializeAdapterThread( - IN PVOID pContext - ); - -BOOLEAN -InitializePendingOIDBeforeReady( - IN PADAPTER Adapter, - IN PNDIS_OID_REQUEST NdisRequest, - OUT PNDIS_STATUS pRetVal - ); - -VOID -LinkQualityReportCallback( - IN PADAPTER Adapter); - - -VOID -N6CSendSingleNetBufferListTimerCallback( - IN PRT_TIMER pTimer); - -VOID -N6InitializeIndicateStateMachine( - IN PADAPTER Adapter); - -VOID -N6PushIndicateStateMachine( - IN PADAPTER Adapter, - IN N6_INDICATE_STATE StateToEnter, - IN u2Byte StatusOrReasonCode); - -DOT11_ASSOC_STATUS -N6TranslateToDot11AssocStatus( - IN N6_INDICATE_STATE CurrentState, - IN u2Byte StatusOrReasonCode); - -int -GetSignedInteger( - u4Byte UsDW, - u1Byte BitNumber -); - -VOID -SetRFPowerStateWorkItemCallback( - IN PVOID pContext -); - -VOID -SetAdhocLinkStateWorkItemCallback( - IN PVOID pContext -); - -VOID -SetTCPOffloadCapWorkItemCallback( - IN PVOID pContext -); - - -// -// Wait event for returned packet. 2007.01.19, by shien chang. -// -VOID -N6CStartWaitReturnPacketMechanism( - IN PADAPTER Adapter -); - -VOID -N6CWaitForReturnPacket( - IN PADAPTER Adapter -); - -NDIS_STATUS -N6AllocateNative80211MIBs( - IN PADAPTER Adapter - ); - -VOID -N6InitializeNative80211MIBs( - IN PADAPTER Adapter - ); - -VOID -N6IndicateLinkSpeed( - PVOID Adapter - ); - -// -// NBL wait queue operation. -// -#define N6CIsNblWaitQueueEmpty(_Queue) RTIsSListEmpty( &(_Queue) ) - -#define N6CGetHeadNblWaitQueue(_Queue) RT_GET_NBL_FROM_QUEUE_LINK( RTGetHeadSList( &(_Queue)) ) - -VOID -N6CAddNblWaitQueue( - IN PRT_SINGLE_LIST_HEAD pNBLWaitQueue, - IN PNET_BUFFER_LIST pNetBufferLists, - IN BOOLEAN bToHead - ); - -VOID -N6CConcatenateTwoList( - IN PRT_SINGLE_LIST_ENTRY pDest, - IN PRT_SINGLE_LIST_ENTRY pSource - ); - -PNET_BUFFER_LIST -N6CRemoveNblWaitQueue( - IN PRT_SINGLE_LIST_HEAD pNBLWaitQueue, - IN BOOLEAN bFromHead - ); - -VOID -N6CompleteNetBufferLists( - IN PADAPTER Adapter, - IN PNET_BUFFER_LIST pNetBufferLists, - IN NDIS_STATUS ndisStatus, - IN BOOLEAN bDispatchLevel - ); - -VOID -N6WriteEventLog( - IN PADAPTER Adapter, - IN RT_EVENTLOG_TYPE type, - IN ULONG Num - ); - -VOID -N6CWriteEventLogEntry( - IN ADAPTER *pAdapter, - IN NDIS_STATUS ndisStatus, - IN ULONG dataLen, - IN u1Byte *data, - IN WCHAR *wcFormat, - IN ... - ); - -BOOLEAN -PlatformIsInDesiredBSSIDList( - IN PADAPTER Adapter, - IN pu1Byte MacAddr - ); - -BOOLEAN -PlatformGetDesiredSSIDList( - IN PADAPTER Adapter - ); - -BOOLEAN -N6ReceiveIndicateFilter( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -N6FulshD0CoalescingQueue( - IN PADAPTER Adapter, - IN BOOLEAN bAcqRxLock, - IN BOOLEAN bIndic - ); - -BOOLEAN -N6ReceiveCoalescingFilter( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -N6Fill80211PhyAttributes( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes - ); - -VOID -N6Fill80211ExtStaAttributes( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes, - IN PNIC_SUPPORTED_AUTH_CIPHER_PAIRS pSupportedAuthCipherAlgs - ); - -NDIS_STATUS -N6CSetGeneralAttributes( - IN PADAPTER Adapter - ); - -NDIS_STATUS -N6Set80211Attributes( - IN PADAPTER Adapter - ); - -u4Byte -N6CGetTCPCheckFormNetBuffLisInfo( - IN PADAPTER Adapter, - IN PNET_BUFFER_LIST pNetBufferList -); - -VOID -N6CSetTCPCheckToNetBuffLisInfo( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN PNET_BUFFER_LIST pNetBufferList -); - -VOID -N6FreeAdapter( - IN PADAPTER Adapter - ); - -BOOLEAN -N6MatchPrivacyExemptList( - IN PADAPTER Adapter, - IN PRT_RFD pRfd - ); - -VOID -InitializeAdapterWorkItemCallback( - IN PVOID pContext -); - -VOID -InitializeAdapterTimerCallback -( - IN PRT_TIMER pTimer - ); - -VOID -PNPReConnentTimerCallback( - IN PRT_TIMER pTimer - ); - -VOID -D0RxIndicatTimerCallback( - IN PRT_TIMER pTimer - ); - -BOOLEAN -N6CQueryPhyIdReady( - IN PADAPTER Adapter - ); - -PVOID -GetTwoPortSharedResource( - IN PADAPTER Adapter, - IN u1Byte Type_ToGet, - IN PVOID pVariable_ToGet, // For more readable on caller side. - OUT pu1Byte pTwoPortStatus // For convinient (pu1Byte)NULL is OK. - ); - -VOID -NdisOIDHistoryInit( - IN PADAPTER pAdapter); - -VOID -NdisOIDHistoryDeInit( - IN PADAPTER pAdapter); - -VOID -NdisOIDHistoryUpdate( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST pNdisRequest, - IN RT_OID_HISTORY_STATE OidHistoryState); - -// Dialog Token, should be a non zero integer -// NOTE: DO NOT use "(_DialogToken)++" since in Win8 we predict the token value in OID_DOT11_WFD_GET_DIALOG_TOKEN -#define IncreaseDialogToken(_DialogToken) (((_DialogToken) + 1 == 0) ? ((_DialogToken) += 2) : ((_DialogToken) += 1)) - -VOID -N6CReleaseDataFrameQueuedWorkItemCallback( - IN PVOID pContext - ); - -#if WPP_SOFTWARE_TRACE -#define RT_TRACE(_Comp, _Level, Fmt) -#define RT_TRACE_EX(_Comp, _Level, Fmt) -#define RT_TRACE_MAC(_Comp, _Level, Fmt) -#define RT_TRACE_F(_Comp, _Level, Fmt) //DoTraceMessage(_Comp, _Level, Fmt) - -#define RT_ASSERT(_Exp,Fmt) -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) -#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) -#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) -#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) -#define RT_PRINT_UUID(_Comp, _Level, _TitleString, _UUID) -#else -// -// Macros for debug. -// -#if DBG -#define RT_TRACE(_Comp, _Level, Fmt) \ - if(((_Comp) & GlobalDebugComponents) && ((_Level <= GlobalDebugLevel) || (_Level == DBG_SERIOUS))) \ - { \ - if(DBG_SERIOUS == _Level) DbgPrint("[ERROR]"); \ - else if(DBG_WARNING == _Level) DbgPrint("[WARNING]"); \ - DbgPrint Fmt; \ - } - -#define RT_TRACE_EX(_Comp, _Level, Fmt) \ - if(((_Comp) & GLDebugComponents) && ((_Level <= GlobalDebugLevel) || (_Level == DBG_SERIOUS))) \ - { \ - DbgPrint Fmt; \ - } -#define RT_TRACE_MAC(_Comp, _Level, Fmt) \ - if(((_Comp) & HalMacDebugComponents) && ((_Level <= GlobalDebugLevel) || (_Level == DBG_SERIOUS))) \ - { \ - DbgPrint Fmt; \ - } - -// Print Debug Message with prefix function name. -#define RT_TRACE_F(_Comp, _Level, Fmt) \ - if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \ - { \ - DbgPrint("%s%s(): ", (DBG_SERIOUS == _Level) ? "[ERROR]" : (DBG_WARNING == _Level) ? "[WARNING]" : "",__FUNCTION__); \ - DbgPrint Fmt; \ - } - -#define RT_ASSERT(_Exp,Fmt) \ - if(!(_Exp)) \ - { \ - DbgPrint("Assertion for exp(%s) at file(%s), line(%d), function[%s]\n", #_Exp, __FILE__, __LINE__, __FUNCTION__); \ - DbgPrint Fmt; \ - ASSERT(FALSE); \ - } - -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) \ -{ \ - char *szTitle = _TitleString; \ - pu1Byte pbtHexData = _HexData; \ - u4Byte u4bHexDataLen = _HexDataLen; \ - u4Byte __i; \ - DbgPrint("%s", szTitle); \ - for (__i=0;__i 0; __k --) \ - DbgPrint(" "); \ - __k = 54; \ - for(__j = ((__i / 16) * 16); __j <= __i; __j ++) \ - DbgPrint("%c", (ptr[__j] < 31 || ptr[__j] > 127) ? '.' : ptr[__j]); \ - DbgPrint("\n"); \ - } \ - } \ - } - -#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) \ - if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \ - { \ - int __i; \ - pu1Byte ptr = (pu1Byte)_Ptr; \ - DbgPrint(__FUNCTION__ "(): "); \ - DbgPrint(_TitleString); \ - DbgPrint(" "); \ - for( __i=0; __i<6; __i++ ) \ - DbgPrint("%02X%s", ptr[__i], (__i==5)?"":"-"); \ - DbgPrint("\n"); \ - } - -#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) \ - if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \ - { \ - int __i, __j; \ - pu1Byte ptr = (pu1Byte)_Ptr; \ - DbgPrint(_TitleString); \ - DbgPrint("\n"); \ - for( __i=0; __i<(int)_AddNum; __i++ ) \ - { \ - for( __j=0; __j<6; __j++ ) \ - DbgPrint("%02X%s", ptr[__i*6+__j], (__j==5)?"":"-"); \ - DbgPrint("\n"); \ - } \ - } - -// Added by Annie, 2005-11-22. -#define MAX_STR_LEN 64 -#define PRINTABLE(_ch) (_ch>=' ' &&_ch<='~' ) // I want to see ASCII 33 to 126 only. Otherwise, I print '?'. Annie, 2005-11-22. - -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) \ - if(((_Comp) & GlobalDebugComponents) && (_Level <= GlobalDebugLevel)) \ - { \ - int __i; \ - u1Byte buffer[MAX_STR_LEN]; \ - int length = (_Len\n", _Len, buffer); \ - } - -#define RT_PRINT_UUID(_Comp, _Level, _TitleString, _UUID) \ -{ \ - RT_TRACE_F(_Comp, _Level, (" %s ", _TitleString)); \ - RT_TRACE(_Comp, _Level, (" %08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X\n", \ - (_UUID).Data1, (_UUID).Data2, (_UUID).Data3, (_UUID).Data4[0], (_UUID).Data4[1], \ - (_UUID).Data4[2], (_UUID).Data4[3], (_UUID).Data4[4], (_UUID).Data4[5], (_UUID).Data4[6], (_UUID).Data4[7])); \ -} - -#else // of #if DBG -// 2009/06/22 MH Allow fre build to print info test. -#define RT_TRACE(_Comp, _Level, Fmt) -#define RT_TRACE_EX(_Comp, _Level, Fmt) -#define RT_TRACE_MAC(_Comp, _Level, Fmt) -//#define COMBINE_COMP(_COMP) _COMP -#define RT_TRACE_F(_Comp, _Level, Fmt) -#define RT_ASSERT(_Exp,Fmt) -#define PRINT_DATA(_TitleString, _HexData, _HexDataLen) -#define RT_PRINT_DATA(_Comp, _Level, _TitleString, _HexData, _HexDataLen) -#define RT_PRINT_ADDR(_Comp, _Level, _TitleString, _Ptr) -#define RT_PRINT_ADDRS(_Comp, _Level, _TitleString, _Ptr, _AddNum) -#define RT_PRINT_STR(_Comp, _Level, _TitleString, _Ptr, _Len) -#define RT_PRINT_UUID(_Comp, _Level, _TitleString, _UUID) -#endif // of #if DBG -#endif - -#define N6C_RegisterIoDevice(__pAdapter) (RT_STATUS_NOT_SUPPORT) -#define N6C_DeregisterIoDevice(__pAdapter) (RT_STATUS_NOT_SUPPORT) - - -#if (WDI_SUPPORT == 1) -#define OS_SUPPORT_WDI(_pAdapter) ((_pAdapter)->pNdisCommon->WDISupport ? TRUE : FALSE) -#else -#define OS_SUPPORT_WDI(_pAdapter) FALSE -#endif - - -VOID -N6CTimerResourceInit( - IN PADAPTER pAdapter - ); - -VOID -N6CTimerResourceInsert( - IN PADAPTER pAdapter, - IN PRT_TIMER pTimer - ); - -BOOLEAN -N6CTimerResourceRemove( - IN PADAPTER pAdapter, - IN PRT_TIMER pTimer - ); - -VOID -N6CTimerResourceDump( - IN PADAPTER pAdapter - ); - -VOID -N6CTimerResourceAction( - IN PADAPTER pAdapter, - IN RT_TIMER_RESOURCE_ACTION Action - ); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/Ndis_OID.h b/network/wlan/WDI/PLATFORM/NDIS6/Ndis_OID.h deleted file mode 100644 index 31df3e37..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/Ndis_OID.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef __INC_NDIS_OID_H - #define __INC_NDIS_OID_H - -#if 1//DBG - // Check Build - #define RT_OID_ENTRY_STRING_SIZE 80 - #define OID_STR_WRAPPER(oid_str) oid_str -#else - // Free Build (Reduce the memery usage) - #define RT_OID_ENTRY_STRING_SIZE 1 - #define OID_STR_WRAPPER(oid_str) "" -#endif - - -typedef struct __RT_OID_ENTRY -{ - u4Byte Oid; - char szID[RT_OID_ENTRY_STRING_SIZE]; // The string name of this OID - - NDIS_STATUS (*Func)( // The OID handler function - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST NdisRequest - ); - -}RT_OID_ENTRY, *PRT_OID_ENTRY; - - - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/CppDrvReg.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/CppDrvReg.h deleted file mode 100644 index e7e68416..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/CppDrvReg.h +++ /dev/null @@ -1,56 +0,0 @@ -#ifndef __INC_CPPDRVREG_H -#define __INC_CPPDRVREG_H - -// -// Tested by rcnjko, 2004.07.08. -// -#if defined (__cplusplus) - - // v4 (NT DDK) - #if !defined(NDIS50_MINIPORT) && !defined(NDIS50) && !defined(NDIS51_MINIPORT) && !defined(NDIS51) - #define KNDIS_CHARS_MPFIELD_v3(Char, Field) Char.Ndis30Chars.Field - #define KNDIS_CHARS_MPFIELD_v4(Char, Field) Char.Field - - #define KNDIS_CHARS_PTFIELD_v3(Char, Field) Char.Ndis30Chars.Field - #define KNDIS_CHARS_PTFIELD_v4(Char, Field) Char.Field - #endif - - // v5 (W2K DDK) - #if defined (NDIS50_MINIPORT) || defined (NDIS50) - #define KNDIS_CHARS_MPFIELD_v3(Char, Field) Char.Ndis40Chars.Ndis30Chars.Field - #define KNDIS_CHARS_MPFIELD_v4(Char, Field) Char.Ndis40Chars.Field - #define KNDIS_CHARS_MPFIELD_v5(Char, Field) Char.Field - - #define KNDIS_CHARS_PTFIELD_v3(Char, Field) Char.Ndis40Chars.Ndis30Chars.Field - #define KNDIS_CHARS_PTFIELD_v4(Char, Field) Char.Ndis40Chars.Field - #define KNDIS_CHARS_PTFIELD_v5(Char, Field) Char.Field - #endif - - // v51 (XP DDK) - #if defined (NDIS51_MINIPORT) || defined (NDIS51) - #define KNDIS_CHARS_MPFIELD_v3(Char, Field) Char.Ndis50Chars.Ndis40Chars.Ndis30Chars.Field - #define KNDIS_CHARS_MPFIELD_v4(Char, Field) Char.Ndis50Chars.Ndis40Chars.Field - #define KNDIS_CHARS_MPFIELD_v5(Char, Field) Char.Ndis50Chars.Field - #define KNDIS_CHARS_MPFIELD_v51(Char, Field) Char.Field - // same as 5.0 - #define KNDIS_CHARS_PTFIELD_v3(Char, Field) Char.Ndis40Chars.Ndis30Chars.Field - #define KNDIS_CHARS_PTFIELD_v4(Char, Field) Char.Ndis40Chars.Field - #define KNDIS_CHARS_PTFIELD_v5(Char, Field) Char.Field - #endif - - // v6 (TBD) - // ... - - -#else // C is cool - #define KNDIS_CHARS_MPFIELD_v3(Char, Field) Char.Field - #define KNDIS_CHARS_MPFIELD_v4(Char, Field) Char.Field - #define KNDIS_CHARS_MPFIELD_v5(Char, Field) Char.Field - #define KNDIS_CHARS_MPFIELD_v51(Char, Field) Char.Field - - #define KNDIS_CHARS_PTFIELD_v3(Char, Field) Char.Field - #define KNDIS_CHARS_PTFIELD_v4(Char, Field) Char.Field - #define KNDIS_CHARS_PTFIELD_v5(Char, Field) Char.Field -#endif // __cplusplus - -#endif // #ifndef __INC_CPPDRVREG_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Precomp.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Precomp.h deleted file mode 100644 index 3e1c703d..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Precomp.h +++ /dev/null @@ -1,8 +0,0 @@ -#include "Precomp.h" - -#if USE_WDF_SDIO -#include "N6Sdio_PlatformSdioWdf.h" -#else -#include "N6Sdio_PlatformSdioWdm.h" -#endif - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Req.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Req.c deleted file mode 100644 index d250b18e..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/Mp_Req.c +++ /dev/null @@ -1,542 +0,0 @@ -#include "Mp_Precomp.h" -#include "802_11_OID.h" -#include "CustomOid.h" - -NDIS_STATUS -InterfaceSetInformationHandleCustomizedOriginalMPSetOid( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -) -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - *BytesRead = 0; - *BytesNeeded = 0; - - switch(Oid) - { - default: - // Can not find the OID specified - Status = NDIS_STATUS_NOT_RECOGNIZED; - break; - - case OID_802_11_NUMBER_OF_ANTENNAS: - //TODO: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_NUMBER_OF_ANTENNAS: \n")); - break; - - case OID_802_11_RX_ANTENNA_SELECTED: - //TODO: - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(ULONG)) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG); - goto set_oid_exit; - } - else - { - *BytesRead = sizeof(ULONG); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_RX_ANTENNA_SELECTED: \n")); - break; - - case OID_802_11_TX_ANTENNA_SELECTED: - //TODO: - if( (InformationBuffer == 0) || (InformationBufferLength < sizeof(ULONG)) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG); - goto set_oid_exit; - } - else - { - *BytesRead = sizeof(ULONG); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_802_11_TX_ANTENNA_SELECTED: \n")); - break; - - case OID_802_11_BSSID_LIST_SCAN: - // - // Note! this OID is also implemented in N6CSetInformation(). - // Since, we had some special requirement (which may not be necessary) for 8187, - // we implement it here instead of using that in N6CSetInformation(). - // 2005.10.16, by rcnjko. - // - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_802_11_BSSID_LIST_SCAN.\n")); - - // Sometimes we also need site survey when chariot running, comment out by Bruce, 2007-06-28. - // 061010, by rcnjko. - // if(pMgntInfo->LinkDetectInfo.bBusyTraffic && pMgntInfo->bMediaConnect) - //{ - // RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_802_11_BSSID_LIST_SCAN (Immediate return because traffic is busy now)\n")); - // goto set_oid_exit; - // } - - MgntActSet_802_11_BSSID_LIST_SCAN( Adapter ); - - - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_802_11_BSSID_LIST_SCAN.\n")); - break; - - case OID_RT_SCAN_AVAILABLE_BSSID: - // - // Note! this OID is also implemented in N6CSetInformation(). - // Since, we had some special requirement (which may not be necessary) for 8187, - // we implement it here instead of using that in N6CSetInformation(). - // 2005.10.16, by rcnjko. - // - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_SCAN_AVAILABLE_BSSID.\n")); - - // 061010, by rcnjko. - if(pMgntInfo->LinkDetectInfo.bBusyTraffic && pMgntInfo->bMediaConnect) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SCAN_AVAILABLE_BSSID (Immediate return because traffic is busy now)\n")); - goto set_oid_exit; - } - - MgntActSet_802_11_BSSID_LIST_SCAN( Adapter ); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_SCAN_AVAILABLE_BSSID.\n")); - break; - - case OID_RT_PRO_READ_REGISTRY: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_READ_REGISTRY.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(Adapter->ndisDbgCtx); - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - - goto set_oid_exit; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - // Read MAC register asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to get result. - if(!DbgReadMacReg(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_READ_REGISTRY.\n")); - break; - - case OID_RT_PRO_WRITE_REGISTRY: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_WRITE_REGISTRY.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - - goto set_oid_exit; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - // Write MAC register asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgWriteMacReg(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth, ulRegValue)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_WRITE_REGISTRY.\n")); - break; - - - case OID_RT_PRO_READ_BB_REG: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_READ_BB_REG.\n")); - { - ULONG ulRegOffset; - ULONG ulBeOFDM; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - - goto set_oid_exit; - } - // Get offset, and type of BB register to read. - ulRegOffset = *((ULONG*)InformationBuffer); - ulBeOFDM = *((ULONG*)InformationBuffer+1); - // Write BB register asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgReadBbReg(GetDefaultAdapter(Adapter), ulRegOffset, ulBeOFDM)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_READ_BB_REG.\n")); - break; - - case OID_RT_PRO_WRITE_BB_REG: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_WRITE_BB_REG.\n")); - { - ULONG ulRegOffset; - ULONG ulBeOFDM; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - - goto set_oid_exit; - } - // Get offset, type of BB register, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulBeOFDM = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - // Write BB register asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgWriteBbReg(GetDefaultAdapter(Adapter), ulRegOffset, ulBeOFDM, ulRegValue)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_WRITE_BB_REG.\n")); - break; - - case OID_RT_PRO_RF_READ_REGISTRY: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_RF_READ_REGISTRY.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - - goto set_oid_exit; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - // Read RF register asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to get result. - if(!DbgReadRfReg(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_RF_READ_REGISTRY.\n")); - break; - - case OID_RT_PRO_RF_WRITE_REGISTRY: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_RF_WRITE_REGISTRY.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - - goto set_oid_exit; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - // Write RF register asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgWriteRfReg(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth, ulRegValue)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_RF_WRITE_REGISTRY.\n")); - break; - - case OID_RT_PRO_READ_EEPROM: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_READ_EEPROM.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - - goto set_oid_exit; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - // Read EEPROM asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to get result. - if(!DbgReadEeprom(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_READ_EEPROM.\n")); - break; - - case OID_RT_PRO_WRITE_EEPROM: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_WRITE_EEPROM.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - - goto set_oid_exit; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - // Write EEPROM asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgWriteEeprom(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth, ulRegValue)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_WRITE_EEPROM.\n")); - break; - - case OID_RT_PRO_READ_EFUSE: - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("===> Set OID_RT_PRO_READ_EFUSE.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - - goto set_oid_exit; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - // Read EFUSE asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to get result. - if(!DbgReadEFuse(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("<=== Set OID_RT_PRO_READ_EFUSE.\n")); - break; - - case OID_RT_PRO_WRITE_EFUSE: - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("===> Set OID_RT_PRO_WRITE_EFUSE.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - - goto set_oid_exit; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - // Write EFUSE asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgWriteEFuse(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth, ulRegValue)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("<=== Set OID_RT_PRO_WRITE_EFUSE.\n")); - break; - - case OID_RT_PRO_UPDATE_EFUSE: - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("===> Set OID_RT_PRO_UPDATE_EFUSE.\n")); - - if(!DbgUpdateEFuse(Adapter)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - break; - - case OID_RT_PRO_READ_EFUSE_BT: - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("===> Set OID_RT_PRO_READ_EFUSE_BT.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - - goto set_oid_exit; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - // Read EFUSE asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to get result. - if(!DbgReadBTEFuse(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("<=== Set OID_RT_PRO_READ_EFUSE_BT.\n")); - break; - - case OID_RT_PRO_WRITE_EFUSE_BT: - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("===> Set OID_RT_PRO_WRITE_EFUSE_BT.\n")); - { - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - - goto set_oid_exit; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - // Write EFUSE asynchronously. - // Caller should use OID_RT_PRO8187_WI_POLL to make sure IO is completed. - if(!DbgWriteBTEFuse(GetDefaultAdapter(Adapter), ulRegOffset, ulRegDataWidth, ulRegValue)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("<=== Set OID_RT_PRO_WRITE_EFUSE_BT.\n")); - break; - - case OID_RT_PRO_UPDATE_EFUSE_BT: - RT_TRACE(COMP_OID_SET|COMP_EFUSE, DBG_LOUD, ("===> Set OID_RT_PRO_UPDATE_EFUSE_BT.\n")); - - if(!DbgUpdateBTEFuse(Adapter)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - break; - - case OID_RT_11N_USB_TX_AGGR_NUM: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_11N_USB_TX_AGGR_NUM.\n")); -#if TX_AGGREGATION - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - u1Byte numValue; - u4Byte value32; - numValue = *((u1Byte *)InformationBuffer); - if ( numValue> 0x0f){ - Status = NDIS_STATUS_INVALID_DATA; - goto set_oid_exit; - } - - pHalData->UsbTxAggDescNum = numValue; - - - value32 = PlatformEFIORead4Byte(Adapter, REG_TDECTRL); - value32 = value32 & ~(BLK_DESC_NUM_MASK << BLK_DESC_NUM_SHIFT); - value32 |= ((pHalData->UsbTxAggDescNum & BLK_DESC_NUM_MASK) << BLK_DESC_NUM_SHIFT); - - PlatformEFIOWrite4Byte(Adapter, REG_TDECTRL, value32); - - } -#endif - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_11N_USB_TX_AGGR_NUM.\n")); - break; - - case OID_RT_PRO_SET_ANTENNA_BB: - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("===> Set OID_RT_PRO_SET_ANTENNA_BB.\n")); - { - u1Byte antennaIndex; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*1) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*1; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_SET_ANTENNA_BB. return!!\n")); - return Status; - } - - // Get antenna index. - antennaIndex = *((UCHAR*)InformationBuffer); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_PRO_SET_ANTENNA_BB, antennaIndex(%#x)\n", antennaIndex)); - if(!DbgSetTxAntenna(Adapter, antennaIndex)) - { - Status = NDIS_STATUS_NOT_ACCEPTED; - } - - // Initialize antenna test - pMgntInfo->AntennaTest = 1; - Adapter->RxStats.PWDBAllCnt = Adapter->RxStats.PWDBAllOldCnt = 0; - Adapter->RxStats.RssiCalculateCnt = Adapter->RxStats.RssiOldCalculateCnt = 0; - - Adapter->HalFunc.SetTxAntennaHandler(Adapter, antennaIndex); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== Set OID_RT_PRO_SET_ANTENNA_BB.\n")); - break; - - case OID_RT_SDIO_REG_CTRL: - { - u1Byte SdioRegCtrl = *(pu1Byte)InformationBuffer; - - pDevice->SdioRegDbgCtrl = SdioRegCtrl & SDIO_REG_CTRL_MASK; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set OID_RT_SDIO_REG_CTRL: SdioRegCtrl(%d)\n", pDevice->SdioRegDbgCtrl)); - } - break; - } - -set_oid_exit: - - return Status; -} diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.c deleted file mode 100644 index d48ee104..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.c +++ /dev/null @@ -1,3285 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N6SdioPlatformWindows.tmh" -#endif - -// Forward declaration. -typedef struct _ADAPTER ADAPTER, *PADAPTER; -typedef struct _SDIO_OUT_CONTEXT SDIO_OUT_CONTEXT, *PSDIO_OUT_CONTEXT; - - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -VOID -PlatformIOWrite1Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u1Byte data - ) -{ - - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn, bCmd52Available = TRUE; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(DeviceID == WLAN_IOREG_DEVICE_ID) - bCmd52Available = pDefaultAdapter->HalFunc.HalSdioIoRegCmd52AvailableHandler(pDefaultAdapter, offset); - - if ((KeGetCurrentIrql() > PASSIVE_LEVEL) || - (GlobalSdioDbg & SDIO_DBG_ASYN_IO)) - { -#if RTL8723_SDIO_IO_THREAD_ENABLE - SdioAsynIOWriteEnqueue(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, 1, (u2Byte)offset, &data); -#else - SdioAsynIOWrite(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, 1, (u2Byte)offset, &data); -#endif - } - else - { - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - - //------------------------------------------------------------ - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("CANNOT IO---> Wake up Hw. PlatformIOWrite1Byte(): DeviceID=%d, offset=%#X, value: %#X\n", DeviceID, offset, data)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - //------------------------------------------------------------ - - if( bCmd52Available && (sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn) ) - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 1, - (ULONG)offset, - TRUE, - &data); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 1, - (ULONG)offset, - TRUE, - &data); - } - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - } - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } -} - - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -VOID -PlatformIOWrite2Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u2Byte data - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn, bCmd52Available = TRUE; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(DeviceID == WLAN_IOREG_DEVICE_ID) - bCmd52Available = pDefaultAdapter->HalFunc.HalSdioIoRegCmd52AvailableHandler(pDefaultAdapter, offset); - - if ((KeGetCurrentIrql() > PASSIVE_LEVEL) || - (GlobalSdioDbg & SDIO_DBG_ASYN_IO)) - { -#if RTL8723_SDIO_IO_THREAD_ENABLE - SdioAsynIOWriteEnqueue(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, 2, (u2Byte)offset, &data); -#else - SdioAsynIOWrite(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, 2, (u2Byte)offset, &data); -#endif - } - else - { - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - //------------------------------------------------------------ - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("CANNOT IO---> Wake up Hw. PlatformIOWrite2Byte(): DeviceID=%d, offset=%#X, value: %#X\n", DeviceID, offset, data)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - //------------------------------------------------------------ - - if( bCmd52Available && (sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn) ) - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 2, - (ULONG)offset, - TRUE, - &data); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 2, - (ULONG)offset, - TRUE, - &data); - } - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - } - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } -} - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -VOID -PlatformIOWrite4Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u4Byte data - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn, bCmd52Available = TRUE; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(DeviceID == WLAN_IOREG_DEVICE_ID) - bCmd52Available = pDefaultAdapter->HalFunc.HalSdioIoRegCmd52AvailableHandler(pDefaultAdapter, offset); - - if ((KeGetCurrentIrql() > PASSIVE_LEVEL) || - (GlobalSdioDbg & SDIO_DBG_ASYN_IO)) - { -#if RTL8723_SDIO_IO_THREAD_ENABLE - SdioAsynIOWriteEnqueue(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, 4, (u2Byte)offset, &data); -#else - SdioAsynIOWrite(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, 4, (u2Byte)offset, &data); -#endif - } - else - { - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - //------------------------------------------------------------ - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("CANNOT IO---> Wake up Hw. PlatformIOWrite4Byte(): DeviceID=%d, offset=%#X, value: %#X\n", DeviceID, offset, data)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - //------------------------------------------------------------ -#if (RK_PLATFORM_SUPPORT ==1) - if( bCmd52Available && ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100) || - !bMacPwrCtrlOn) ) -#else - if( bCmd52Available && (sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn) ) -#endif - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 4, - (ULONG)offset, - TRUE, - &data); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 4, - (ULONG)offset, - TRUE, - &data); - } - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - } - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } -} - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -VOID -PlatformIOWriteNByte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u4Byte count, //data length - pu1Byte pdata - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn = FALSE, bCmd52Available = TRUE; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(DeviceID == WLAN_IOREG_DEVICE_ID) - bCmd52Available = pDefaultAdapter->HalFunc.HalSdioIoRegCmd52AvailableHandler(pDefaultAdapter, offset); - - if ((KeGetCurrentIrql() > PASSIVE_LEVEL) || - (GlobalSdioDbg & SDIO_DBG_ASYN_IO)) - { - RT_PRINT_DATA(COMP_INIT|COMP_IO, DBG_LOUD, "PlatformIOWriteNByte(): Sync IO Write N byte:\n", - pdata, count); - SdioAsynIOWrite(sdiodevice, DeviceID, sdiodevice->SdioFuncNum, (u2Byte)count, (u2Byte)offset, pdata);// Issue CMD53 Asyn CMD as default. - } - else - { - RT_PRINT_DATA(COMP_INIT|COMP_IO, DBG_LOUD, "PlatformIOWriteNByte(): ASync IO Write N byte:\n", - pdata, count); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - //------------------------------------------------------------ - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("CANNOT IO---> Wake up Hw. PlatformIOWriteNByte(): DeviceID=%d, offset=%#X, value: %p\n", DeviceID, offset, pdata)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - //------------------------------------------------------------ - - if( bCmd52Available && (sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn) ) - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - count, - (ULONG)offset, - TRUE, - pdata); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - count, - (ULONG)offset, - TRUE, - pdata); - } - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - } - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } -} - - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -VOID -PlatformIOSyncWriteNByte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset, - u4Byte count, //data length - pu1Byte pdata - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn = FALSE, bCmd52Available = TRUE; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(DeviceID == WLAN_IOREG_DEVICE_ID) - bCmd52Available = pDefaultAdapter->HalFunc.HalSdioIoRegCmd52AvailableHandler(pDefaultAdapter, offset); - - RT_PRINT_DATA(COMP_INIT|COMP_IO, DBG_TRACE, "PlatformIOSyncWriteNByte(): Sync IO Write N byte:\n", - pdata, count); - -#if (RK_PLATFORM_SUPPORT==1) - if( bCmd52Available && ( (count <4) || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn) ) -#else - if( bCmd52Available && (sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn) ) -#endif - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - count, - (ULONG)offset, - TRUE, - pdata); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - count, - (ULONG)offset, - TRUE, - pdata); - } - -} - - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -u1Byte -PlatformIORead1Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset - ) -{ - u1Byte Data = 0; - u1Byte BytesRead = 0; - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return 0xff; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("CANNOT IO ---> Wake up Hw. PlatformIORead1Byte(): DeviceID=%d, offset=%#X\n", DeviceID, offset)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformIORead1Byte() > PASSIVE_LEVEL is not allowed! DeviceID=%d, offset=%#X\n", DeviceID, offset)); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - return 0xff; - } - else - { - if( sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn ) - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 1, - (ULONG)offset, - FALSE, - &Data); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 1, - (ULONG)offset, - FALSE, - &Data); - } - - if(rtstatus != RT_STATUS_SUCCESS) - Data = 0xff; - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += EndTime.QuadPart - (StartTime.QuadPart); - } - - return Data; - } -} - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -u2Byte -PlatformIORead2Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset - ) -{ - u2Byte Data = 0; - u1Byte BytesRead = 0; - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return 0xffff; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("CANNOT IO---> Wake up Hw. PlatformIORead2Byte(): DeviceID=%d, offset=%#X\n", DeviceID, offset)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformIORead2Byte() > PASSIVE_LEVEL is not allowed! DeviceID=%d, offset=%#X\n", DeviceID, offset)); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - return 0xffff; - } - else - { - if( sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn ) - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 2, - (ULONG)offset, - FALSE, - &Data); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 2, - (ULONG)offset, - FALSE, - &Data); - } - - if(rtstatus != RT_STATUS_SUCCESS) - Data = 0xffff; - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } - - return Data; - } -} - -// -// Description: -// This routine is exported for SDIO WLAN IOREG I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1026_0000~0x1026_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -u4Byte -PlatformIORead4Byte( - PVOID Adapter, - u1Byte DeviceID, - u4Byte offset - ) -{ - u4Byte Data = 0; - u1Byte BytesRead = 0; - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return 0xffffffff; - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("CANNOT IO---> Wake up Hw. PlatformIORead4Byte(): DeviceID=%d, offset=%#X\n", DeviceID, offset)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformIORead4Byte() > PASSIVE_LEVEL is not allowed. DeviceID=%d, offset=%#X\n", DeviceID, offset)); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - return 0xffffffff; - } - else - { - -#if (RK_PLATFORM_SUPPORT==1) - if( ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn ) -#else - if( sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn ) -#endif - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 4, - (ULONG)offset, - FALSE, - &Data); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - 4, - (ULONG)offset, - FALSE, - &Data); - } - - if(rtstatus != RT_STATUS_SUCCESS) - Data = 0xffffffff; - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } - - return Data; - } -} - - - -// -// Description: -// This routine is exported for SDIO WLAN IOREG or SDIO_LOCAL_DEVICE_ID I/O Bus Domain(Host), -// Host Address Mapping Range is 0x1025_0000~0x1025_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2011.03.07, added by Roger. -// -VOID -PlatformIOReadNByte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u4Byte offset, - IN u4Byte count, //data length - OUT pu1Byte pBuffer - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - BOOLEAN bMacPwrCtrlOn; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - - LARGE_INTEGER StartTime, EndTime; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformIOReadNByte(): SDIO not allow to IO, Return\n")); - PlatformFillMemory((PVOID)pBuffer, count, 0xff); - } - - // For PnP IO Working Time Calculation - if( pDefaultAdapter->bCtrlPnPTime ) - StartTime = KeQueryPerformanceCounter(NULL); - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - sdiodevice->SyncIoInProgressCount++; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - // tynli add for 32k. 2011.02.25. - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("CANNOT IO---> Wake up Hw. PlatformIOReadNByte(): DeviceID=%d, offset=%#X\n", DeviceID, offset)); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformIOReadNByte() > PASSIVE_LEVEL is not allowed. DeviceID=%d, offset=%#X\n", DeviceID, offset)); - PlatformFillMemory((PVOID)pBuffer, count, 0xff); - } - else - { - if( sdiodevice->IoRegDirectAccess || - ((DeviceID == WLAN_IOREG_DEVICE_ID)&&(offset < 0x100)) || - !bMacPwrCtrlOn ) - { - rtstatus = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - count, - (ULONG)offset, - FALSE, - pBuffer); - } - else - { - // Use I/O RW extended command as default. - rtstatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - count, - (ULONG)offset, - FALSE, - pBuffer); - } - - if(rtstatus != RT_STATUS_SUCCESS) - PlatformFillMemory((PVOID)pBuffer, count, 0xff); - - } - - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount>0) - sdiodevice->SyncIoInProgressCount--; - else - sdiodevice->SyncIoInProgressCount = 0; - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - if( pDefaultAdapter->bCtrlPnPTime ) - { - EndTime = KeQueryPerformanceCounter(NULL); - pDefaultAdapter->PnPIOTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - } -} - - - -// -// Description: -// Retrieve SDIO bus related properties. -// -// Assumption: -// A Secure Digital (SD) card bus interface has been initialized. -// -// 2010.12.09, added by Roger. -// -NTSTATUS -PlatformSdioGetProperty( - IN PRT_SDIO_DEVICE pDevice, - IN SDBUS_PROPERTY Property, - IN PVOID Buffer, - IN ULONG Length - ) -{ - PSDBUS_REQUEST_PACKET psdrp = NULL; - NTSTATUS status; - - psdrp = (PSDBUS_REQUEST_PACKET)ExAllocatePoolWithTag(NonPagedPool, sizeof(SDBUS_REQUEST_PACKET), '3278'); - - if(!psdrp) - return STATUS_INSUFFICIENT_RESOURCES; - - RtlZeroMemory(psdrp, sizeof(SDBUS_REQUEST_PACKET)); - - psdrp->RequestFunction = SDRF_GET_PROPERTY; - psdrp->Parameters.GetSetProperty.Property = Property; - psdrp->Parameters.GetSetProperty.Buffer = Buffer; - psdrp->Parameters.GetSetProperty.Length = Length; - - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - RT_SDIO_INC_CMD_REF(pDevice); - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - - // - // Send the IO request down to the bus driver - // - status = SdBusSubmitRequest(pDevice->Sdbusinterface.Context, psdrp); - - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - RT_SDIO_DEC_CMD_REF(pDevice); - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - - if(!NT_SUCCESS(status)) - { - RT_TRACE(COMP_IO, DBG_SERIOUS, ("PlatformSdioGetProperty(): Fail to get SDIO property!!\n")); - } - ExFreePoolWithTag(psdrp, '3278'); - - return status; -} - - -// -// Description: -// Configure sdio bus related properties. -// -// Assumption: -// A Secure Digital (SD) card bus interface has been initialized. -// -// 2010.12.09, added by Roger. -// -NTSTATUS -PlatformSdioSetProperty( - IN PRT_SDIO_DEVICE pDevice, - IN SDBUS_PROPERTY Property, - IN PVOID Buffer, - IN ULONG Length - ) -{ - - PSDBUS_REQUEST_PACKET psdrp = NULL; - NTSTATUS status; - - psdrp = (PSDBUS_REQUEST_PACKET)ExAllocatePoolWithTag(NonPagedPool, sizeof(SDBUS_REQUEST_PACKET), '3278'); - - if(!psdrp) - return STATUS_INSUFFICIENT_RESOURCES; - - RtlZeroMemory(psdrp, sizeof(SDBUS_REQUEST_PACKET)); - - psdrp->RequestFunction = SDRF_SET_PROPERTY; - psdrp->Parameters.GetSetProperty.Property = Property; - psdrp->Parameters.GetSetProperty.Buffer = Buffer; - psdrp->Parameters.GetSetProperty.Length = Length; - - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - RT_SDIO_INC_CMD_REF(pDevice); - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - - // - // Send the IO request down to the bus driver - // - status = SdBusSubmitRequest(pDevice->Sdbusinterface.Context, psdrp); - - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - RT_SDIO_DEC_CMD_REF(pDevice); - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - - if(!NT_SUCCESS(status)) - { - RT_TRACE(COMP_IO, DBG_SERIOUS, ("PlatformSdioSetProperty(): Fail to set SDIO property!!\n")); - } - ExFreePoolWithTag(psdrp, '3278'); - - return status; -} - - - -// -// Description: -// Schedule IO_RW_EXTENDED Command (CMD53) to perform Read Write I/O operation -// on specific function number. This command allows the reading of a large number of I/O -// registers with a single command. We should decide what kind of mode(Block or byte count mode) -// to use. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling this function. -// -// 2010.12.14, added by Roger. -// -RT_STATUS -PlatformSdioCmd53ReadWrite( - PRT_SDIO_DEVICE sdiodevice, - UCHAR DeviceID, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeFlag, - PVOID buffer - ) -{ - u4Byte TargetAddr = registerIndex; - PADAPTER pAdapter = (PADAPTER)sdiodevice->pAdapter; - RT_STATUS rtstatus = RT_STATUS_FAILURE; - u1Byte value8 = 0; - BOOLEAN bMacPwrCtrlOn; - u1Byte SDRPErrHandleType; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(!bMacPwrCtrlOn) - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("PlatformSdioCmd53ReadWrite(): registerIndex(%#x), power is off return!!\n", registerIndex)); - return rtstatus; - } - - if( funcNum == sdiodevice->SdioFuncNum ) - pAdapter->HalFunc.HalSdioGetCmdAddressHandler( pAdapter, DeviceID, registerIndex, &TargetAddr ); - - // - // We should not use block mode while the number of byte count is less than functional block size. - // Because the length field(Indicates the length, in bytes, of the response data) in DeviceCommand - // will be the multiple of block size, which might cause memory corruption while using MDL description. - // 2011.03.09. - // - if((sdiodevice->SdioTxBlockMode || sdiodevice->SdioRxBlockMode) - && (byteCount >= sdiodevice->SdioFuncBlockSize )) - { - //Block mode - rtstatus = PlatformSdioCmd53ReadWriteBlock( - sdiodevice, - funcNum, - byteCount, - (ULONG)TargetAddr, - writeFlag, - buffer); - } - else - { - //Byte count mode - rtstatus = PlatformSdioCmd53ReadWriteByte( - sdiodevice, - funcNum, - byteCount, - (ULONG)TargetAddr, - writeFlag, - buffer); - } - - // For debug info. - if(rtstatus != RT_STATUS_SUCCESS) - { - if(rtstatus == RT_STATUS_IO_EXCEPTION) - { - sdiodevice->FailureCount++; - if(sdiodevice->FailureCount == 1) // To avoid infinite loop - { - //Check SD_CLK and Power OK - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] Cmd52 R REG 0x0[31:0]: %#x, 0x100[31:0]: %#x,\n", - PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0), - PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x100))); - - //Check CMD53 and MAC power on - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] Cmd53 R REG 0x100[31:0]: %#x\n", - PlatformEFSdioCmd53Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 0x100))); - - //Check CMD3 Write - PlatformEFSdioCmd53Write4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 0x1b8, 0x12345678); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] Cmd53 W => Cmd52 R REG 0x1b8[31:0]: %#x\n", - PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x1b8))); - } - - // Set bSurpriseRemoved flag depends on IO function type. - SDRPErrHandleType = HAL_GetSDRPErrorHandlingType(pAdapter, TargetAddr); - if(SDRPErrHandleType == SDRP_ERROR_SURPRISE_REMOVED || - SDRPErrHandleType == SDRP_ERROR_RETRY) - { - if(sdiodevice->bRegSurpriseRemovedEnable) - { - if(!(GlobalSdioDbg & SDIO_DBG_LA_TRIGER)) - pAdapter->bSurpriseRemoved = TRUE; - } - } - - } - - if(GlobalSdioDbg & SDIO_DBG_LA_TRIGER) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd53ReadWrite(): Trigger debug info!!\n")); - value8 = PlatformEFSdioCmd52Read1Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x61); - PlatformEFSdioCmd52Write1Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x61, value8|BIT0); - RT_TRACE(COMP_IO, DBG_WARNING, ("0xC1(%#x)\n", PlatformEFSdioLocalCmd52Read2Byte(pAdapter, 0xc1))); - RT_TRACE(COMP_IO, DBG_WARNING, ("0x80(%#x)\n", PlatformEFSdioLocalCmd52Read4Byte(pAdapter, 0x80))); - pAdapter->bSurpriseRemoved = TRUE; - } - } - else - { - sdiodevice->FailureCount = 0; - } - - return rtstatus; -} - - - // -// Description: -// Schedule IO_RW_EXTENDED Command (CMD53) to perform Read Write I/O operation -// on specific function number. This command allows the reading of a large number of I/O -// registers with a single command. - // -// Assumption: -// Proper I/O bus domain address should be converted before calling this function. -// -// 2010.12.14, added by Roger. -// -RT_STATUS -PlatformSdioCmd53ReadWriteBlock( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeFlag, - PVOID buffer -) - { - - PMDL pmdl = NULL; - RT_STATUS status = RT_STATUS_FAILURE; - u4Byte nBytesForMDL = 0; - - - // - // We shall keep identity of bytes count between MDL allocation and corresponding SDBUS_REQUEST_PACKET we are going to send. - // Revised by Roger, 2014.01.02. - // - nBytesForMDL = ((byteCount/sdiodevice->SdioFuncBlockSize)+((byteCount%sdiodevice->SdioFuncBlockSize?1:0)))*sdiodevice->SdioFuncBlockSize; - - - // - // First get a MDL to map the data. We asume the caller passed a buffer to non pageed pool. - // - pmdl = IoAllocateMdl((pu1Byte)buffer, nBytesForMDL , FALSE, FALSE, NULL); - - if(pmdl == NULL) - return status; - - MmBuildMdlForNonPagedPool(pmdl); - - status = PlatformSdioCmd53ReadWriteMDL( - sdiodevice, - funcNum, - pmdl, - nBytesForMDL, - (ULONG)registerIndex, - writeFlag, - TRUE); - - if(pmdl){ - IoFreeMdl(pmdl); - } - - return status; -} - - -// -// Description: -// Schedule IO_RW_EXTENDED Command (CMD53) to perform Read Write I/O operation -// on specific function number. This command allows the reading of a large number of I/O -// registers with a single command. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling this function. -// -// 2010.12.14, added by Roger. -// -RT_STATUS -PlatformSdioCmd53ReadWriteByte( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeFlag, - PVOID buffer -) -{ - ULONG TotalLength = 0, RwLength = 0; - PUCHAR VirtualAddr = (PUCHAR)buffer; - PMDL pmdl = NULL; - RT_STATUS rtstatus = RT_STATUS_FAILURE; - - TotalLength = byteCount; // Total length needs to transfer - - do{ - - RwLength = (TotalLength > sdiodevice->SdioFuncBlockSize) ? sdiodevice->SdioFuncBlockSize : TotalLength; - pmdl = IoAllocateMdl((pu1Byte)VirtualAddr, RwLength , FALSE, FALSE, NULL); - - if(pmdl == NULL) - break; - - MmBuildMdlForNonPagedPool(pmdl); - - rtstatus = PlatformSdioCmd53ReadWriteMDL( - sdiodevice, - funcNum, - pmdl, - RwLength, - (ULONG)registerIndex, - writeFlag, - FALSE); - - if( rtstatus != RT_STATUS_SUCCESS) - { - IoFreeMdl(pmdl); - break; - } - - VirtualAddr += RwLength; - TotalLength -= RwLength; - IoFreeMdl(pmdl); - - }while(TotalLength > 0); - - return rtstatus; -} - - -// -// Description: -// Schedule IO_RW_EXTENDED Command (CMD53) to perform Read Write I/O operation -// on specific function number. This command allows the reading of a large number of I/O -// registers with a single command. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling this function. -// -// 2010.12.14, added by Roger. -// -RT_STATUS -PlatformSdioCmd53ReadWriteMDL( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - PMDL pmdl, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeToDevice, - BOOLEAN blockMode -) -{ - - SD_RW_EXTENDED_ARGUMENT extendedArgument; - PSDBUS_REQUEST_PACKET psdrp; - NTSTATUS status = STATUS_UNSUCCESSFUL ; - RT_STATUS rtstatus = RT_STATUS_FAILURE; - BOOLEAN bSdBusReqSent = FALSE; - PADAPTER Adapter = sdiodevice->pAdapter; - BOOLEAN bMacPwrCtrlOn; - u1Byte RetryCnt, SDRPErrHandleType; - u1Byte FwPSState; - BOOLEAN bIOFailIn32k = FALSE; - - const SDCMD_DESCRIPTOR WriteIoExtendedDesc = { - SDCMD_IO_RW_EXTENDED, - SDCC_STANDARD, - SDTD_WRITE, - SDTT_SINGLE_BLOCK, - SDRT_5}; - - const SDCMD_DESCRIPTOR ReadIoExtendedDesc = { - SDCMD_IO_RW_EXTENDED, - SDCC_STANDARD, - SDTD_READ, - SDTT_SINGLE_BLOCK, - SDRT_5}; - - LARGE_INTEGER StartTime, EndTime, Freq; - u1Byte RecordIndex = sdiodevice->BusTimeRecordIndex; - - // - // Return immediately if SDIO can NOT workig properly anymore. - // - if(RT_SDIO_CANNOT_IO(Adapter)) - return rtstatus; - - // - // Now allocate a request packet for the arguments of the command. - // - psdrp = ExAllocatePoolWithTag(NonPagedPool, sizeof(SDBUS_REQUEST_PACKET), '3278'); - if(!psdrp) - { - RT_TRACE(COMP_IO, DBG_SERIOUS, ("PlatformSdioCmd53ReadWriteMDL(): Allocate sdrp fail!!\n")); - return rtstatus; - } - - RtlZeroMemory(psdrp, sizeof(SDBUS_REQUEST_PACKET)); - - psdrp->RequestFunction = SDRF_DEVICE_COMMAND; - psdrp->Parameters.DeviceCommand.Mdl = pmdl; - - // - // Set up the argument and command descriptor. - // - extendedArgument.u.AsULONG = 0; - - if (blockMode) - { // Block Mode. - - extendedArgument.u.bits.OpCode = 1; //Increment address - - extendedArgument.u.bits.Count = - (byteCount/sdiodevice->SdioFuncBlockSize) + - ((byteCount%sdiodevice->SdioFuncBlockSize?1:0)); - - psdrp->Parameters.DeviceCommand.Length = - (extendedArgument.u.bits.Count)*sdiodevice->SdioFuncBlockSize; - } - else - { // Byte Count Mode. - if( byteCount == sdiodevice->SdioFuncBlockSize) - extendedArgument.u.bits.Count = 0; - else - extendedArgument.u.bits.Count = byteCount; - - psdrp->Parameters.DeviceCommand.Length = extendedArgument.u.bits.Count; - } - - extendedArgument.u.bits.Function = funcNum; - extendedArgument.u.bits.Address = registerIndex; - - if (writeToDevice) { - extendedArgument.u.bits.WriteToDevice = 1; - psdrp->Parameters.DeviceCommand.CmdDesc = WriteIoExtendedDesc; - } - else { - psdrp->Parameters.DeviceCommand.CmdDesc = ReadIoExtendedDesc; - } - - - if (blockMode) { - extendedArgument.u.bits.BlockMode = blockMode; - psdrp->Parameters.DeviceCommand.CmdDesc.TransferType = SDTT_MULTI_BLOCK_NO_CMD12; - } - - psdrp->Parameters.DeviceCommand.Argument = extendedArgument.u.AsULONG; - - // - // To make sure that only one request is pending in SDIO Host. - // 2011.01.10. - // - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - sdiodevice->SyncIoWaitingCount++; - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - while(TRUE) - { - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(RT_SDIO_CANNOT_IO(Adapter) || - (bMacPwrCtrlOn == FALSE)) - { // Driver is going to unload or power is going to turn off - - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - sdiodevice->SyncIoWaitingCount--; - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - RT_TRACE(COMP_IO, DBG_LOUD, ("PlatformSdioCmd53ReadWriteMDL(): Return bMacPwrCtrlOn=%d\n", bMacPwrCtrlOn)); - break; - } - - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - - if(sdiodevice->nIrpPendingCnt == 0) - { // No IRP pending in SDIO host driver. - - sdiodevice->nIrpPendingCnt++; - RT_SDIO_INC_CMD_REF(sdiodevice); - - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - RetryCnt = 0; - SDRPErrHandleType = HAL_GetSDRPErrorHandlingType(Adapter, registerIndex); - - do - { - // ----- For IO Working Time Measurement ----- - StartTime = KeQueryPerformanceCounter(&Freq); - sdiodevice->SdBusSubmitTime[RecordIndex].AbTime = PlatformGetCurrentTime(); - //-------------------------------------------- - - // - // Send the IO request down to the bus driver - // - status = SdBusSubmitRequest(sdiodevice->Sdbusinterface.Context, psdrp); - - // ----- For IO Working Time Measurement ----- - EndTime = KeQueryPerformanceCounter(NULL); - sdiodevice->SdBusSubmitTime[RecordIndex].SdBusWorkDuration.QuadPart = (EndTime.QuadPart - StartTime.QuadPart)*1000000 / Freq.QuadPart; - sdiodevice->BusTimeRecordIndex = (RecordIndex<6? RecordIndex+1 : 0); - - if( Adapter->bCtrlPnPTime ) - sdiodevice->PnPSdBusWorkTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - //-------------------------------------------- - - if( !NT_SUCCESS(status) ) - { - RetryCnt++; - - if( status == STATUS_IO_TIMEOUT ) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd53ReadWriteMDL(): Offset(%#x) WriteOrRead(%d), STATUS_IO_TIMEOUT\n", - registerIndex, writeToDevice)); - } - else if( status == STATUS_CRC_ERROR ) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd53ReadWriteMDL(): Offset(%#x) WriteOrRead(%d), STATUS_CRC_ERROR\n", - registerIndex, writeToDevice)); - } - else - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd53ReadWriteMDL(): Offset(%#x) WriteOrRead(%d) fail!!status(%#x)\n", - registerIndex, writeToDevice, status)); - // 0xC000009C. STATUS_DEVICE_DATA_ERROR - } - - if(GlobalSdioDbg & SDIO_DBG_CMD) - { - RT_ASSERT(FALSE, ("Fail to submit CMD53 SD Bus request!! status(%x)\n", status)); - } - - // Check if HW is able to enter 32K state. It is an workaround and sould be removed later. - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(Adapter, FwPSState)) - { - bIOFailIn32k = TRUE; - RT_TRACE(COMP_POWER, DBG_LOUD, ("<--- Skip CMD53 IO fail because Hw is in 32K state.\n")); - break; - } - - if(SDRPErrHandleType == SDRP_ERROR_SKIP || - SDRPErrHandleType == SDRP_ERROR_SURPRISE_REMOVED) - { - break; - } - else if(SDRPErrHandleType == SDRP_ERROR_RETRY && RetryCnt >= SDRP_MAX_ERROR_RETRY_CNT) - { - break; - } - - delay_us(2); - } - }while(!NT_SUCCESS(status)); - - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - RT_SDIO_DEC_CMD_REF(sdiodevice); - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - bSdBusReqSent = TRUE; - break; - } - else if(sdiodevice->nIrpPendingCnt == 1) - { // There is one IRP pending in SDIO host driver. - - KEVENT VoidEvent; - LARGE_INTEGER VoidEventWaitTime; - NTSTATUS VoidEventWaitStatus; - - RT_TRACE(COMP_DBG, DBG_TRACE, ("***** SynIo is going to wait for a while *****\n")); - - // SyncIo Method 2 - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - VoidEventWaitStatus = KeWaitForSingleObject(&sdiodevice->SyncIoEvent, Suspended, KernelMode, FALSE, NULL); - if(VoidEventWaitStatus == STATUS_SUCCESS) - { - KeClearEvent( &sdiodevice->SyncIoEvent ); - } - else - { - RT_ASSERT(FALSE, ("VoidEventWaitStatus: %x !!!\n", VoidEventWaitStatus)); - } - } - else - { // Error condition. - RT_ASSERT(FALSE, ("PlatformSdioCmd52ReadWriteByte(): sdiodevice->nIrpPendingCnt: %d !!!\n", - sdiodevice->nIrpPendingCnt)); - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - break; - } - } - - if( bSdBusReqSent == TRUE ) - { - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - if(sdiodevice->SyncIoWaitingCount>0) - sdiodevice->SyncIoWaitingCount--; - else - sdiodevice->SyncIoWaitingCount=0; - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - if(NT_SUCCESS(status)) - { - SdioIOComplete(sdiodevice); - rtstatus = RT_STATUS_SUCCESS; - } - else - { - SdioIOComplete(sdiodevice); - - // - // We should perform necessary error handling here. - // e.g., Surprise removed or driver stopped control flag. - // - if(bIOFailIn32k) - rtstatus = RT_STATUS_FAILURE; - else - rtstatus = RT_STATUS_IO_EXCEPTION; - } - - } - - ExFreePoolWithTag(psdrp, '3278'); - - return rtstatus; -} - - - -// -// Description: -// Schedule a serial IO_RW_DIRECT Command (CMD52) to read or write bytes within the total 128K -// of register space in any I/O function, including the common I/O area(CIA). This command -// reads or writes 1 byte using only 1 command/response pair. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling this function. -// -// 2010.12.14, created by Roger. -// -RT_STATUS -PlatformSdioCmd52ReadWrite( - PRT_SDIO_DEVICE sdiodevice, - u1Byte DeviceID, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeToDevice, - PVOID buffer - ) -{ - u1Byte i = 0; - u4Byte TargetAddr = registerIndex; - PADAPTER pAdapter = (PADAPTER)sdiodevice->pAdapter; - RT_STATUS status = RT_STATUS_FAILURE; - u1Byte SDRPErrHandleType; - - - if(RT_SDIO_CANNOT_IO(pAdapter)) - return status; - - if(IS_VENDOR_8723B_D_CUT(pAdapter)) - { - if((DeviceID == WLAN_IOREG_DEVICE_ID) && (registerIndex == 0x948) && writeToDevice) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Return ==> PlatformSdioCmd52ReadWrite(): Offset(%#x) WriteOrRead(%d), byteCount(%d), Data[0]=%p\n", registerIndex, writeToDevice, byteCount, (PUCHAR)buffer)); - return status; - } - } - - if( funcNum == sdiodevice->SdioFuncNum ) - pAdapter->HalFunc.HalSdioGetCmdAddressHandler(pAdapter, DeviceID, registerIndex, &TargetAddr); - - - for( i=0 ; iFailureCount++; - if(sdiodevice->FailureCount == 1) // To avoid infinite loop - { - //Check SD_CLK and Power OK - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] Cmd52 R REG 0x0[31:0]: %#x, 0x100[31:0]: %#x,\n", - PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0), - PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x100))); - - //Check CMD53 and MAC power on - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] Cmd53 R REG 0x100[31:0]: %#x\n", - PlatformEFSdioCmd53Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 0x100))); - - //Check CMD3 Write - PlatformEFSdioCmd53Write4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 0x1b8, 0x12345678); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[DBG] Cmd53 W => Cmd52 R REG 0x1b8[31:0]: %#x\n", - PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x1b8))); - } - - // Set bSurpriseRemoved flag depends on IO function type. - SDRPErrHandleType = HAL_GetSDRPErrorHandlingType(pAdapter, TargetAddr+i); - if(SDRPErrHandleType == SDRP_ERROR_SURPRISE_REMOVED || - SDRPErrHandleType == SDRP_ERROR_RETRY) - { - if(sdiodevice->bRegSurpriseRemovedEnable) - { - if(!(GlobalSdioDbg & SDIO_DBG_LA_TRIGER)) - pAdapter->bSurpriseRemoved = TRUE; - } - } - - } - - if(GlobalSdioDbg & SDIO_DBG_LA_TRIGER) - { - u1Byte value8; - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd52ReadWrite(): Trigger debug info!!\n")); - value8 = PlatformEFSdioCmd52Read1Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x61); - PlatformEFSdioCmd52Write1Byte(pAdapter, WLAN_IOREG_DEVICE_ID, sdiodevice->SdioFuncNum, 0x61, value8|BIT0); - RT_TRACE(COMP_IO, DBG_WARNING, ("0xC1(%#x)\n", PlatformEFSdioLocalCmd52Read2Byte(pAdapter, 0xc1))); - RT_TRACE(COMP_IO, DBG_WARNING, ("0x80(%#x)\n", PlatformEFSdioLocalCmd52Read4Byte(pAdapter, 0x80))); - pAdapter->bSurpriseRemoved = TRUE; - } - break; - } - else - { - sdiodevice->FailureCount = 0; - } - } - - return status; -} - - - - // -// Description: -// Schedule IO_RW_DIRECT Command (CMD52) to read or write a single register within the total 128K -// of register space in any I/O function, including the common I/O area(CIA). This command -// reads or writes 1 byte using only 1 command/response pair. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling this function. -// -// 2010.12.14, added by Roger. - // -RT_STATUS -PlatformSdioCmd52ReadWriteByte( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - ULONG registerIndex, - PUCHAR data, - BOOLEAN writeToDevice -) -{ - - SDBUS_REQUEST_PACKET sdrp; - SD_RW_DIRECT_ARGUMENT directArgument; - PADAPTER Adapter = sdiodevice->pAdapter; - NTSTATUS status = STATUS_UNSUCCESSFUL ; - RT_STATUS rtstatus = RT_STATUS_FAILURE; - BOOLEAN bSdBusReqSent = FALSE; - u1Byte RetryCnt, SDRPErrHandleType; - - const SDCMD_DESCRIPTOR ReadIoDirectDesc = { - SDCMD_IO_RW_DIRECT, - SDCC_STANDARD, - SDTD_READ, - SDTT_CMD_ONLY, - SDRT_5}; - - const SDCMD_DESCRIPTOR WriteIoDirectDesc = { - SDCMD_IO_RW_DIRECT, - SDCC_STANDARD, - SDTD_WRITE, - SDTT_CMD_ONLY, - SDRT_5}; - - LARGE_INTEGER StartTime, EndTime, Freq; - u1Byte RecordIndex = sdiodevice->BusTimeRecordIndex; - - RtlZeroMemory(&sdrp, sizeof(SDBUS_REQUEST_PACKET)); - RtlZeroMemory(&directArgument, sizeof(SD_RW_DIRECT_ARGUMENT)); - - - sdrp.RequestFunction = SDRF_DEVICE_COMMAND; - - directArgument.u.AsULONG = 0; - directArgument.u.bits.Address = registerIndex; - directArgument.u.bits.Function = funcNum; - - if (writeToDevice) { - directArgument.u.bits.WriteToDevice = 1; - directArgument.u.bits.Data = *data; - sdrp.Parameters.DeviceCommand.CmdDesc = WriteIoDirectDesc; - } - else { - sdrp.Parameters.DeviceCommand.CmdDesc = ReadIoDirectDesc; - } - - sdrp.Parameters.DeviceCommand.Argument = directArgument.u.AsULONG; - - // - // To make sure that only one request is pending in SDIO Host. - // 2011.01.10. - // - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - sdiodevice->SyncIoWaitingCount++; - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - while(TRUE) - { - - if(RT_SDIO_CANNOT_IO(Adapter)) - { // Driver is going to unload. - - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - sdiodevice->SyncIoWaitingCount--; - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - break; - } - - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - - if(sdiodevice->nIrpPendingCnt == 0) - { // No IRP pending in SDIO host driver. - - sdiodevice->nIrpPendingCnt++; - RT_SDIO_INC_CMD_REF(sdiodevice); - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - RetryCnt = 0; - SDRPErrHandleType = HAL_GetSDRPErrorHandlingType(Adapter, registerIndex); - - do - { - // ----- For IO Working Time Measurement ----- - StartTime = KeQueryPerformanceCounter(&Freq); - sdiodevice->SdBusSubmitTime[RecordIndex].AbTime = PlatformGetCurrentTime(); - //-------------------------------------------- - - // - // Send the IO request down to the bus driver - // - status = SdBusSubmitRequest(sdiodevice->Sdbusinterface.Context, &sdrp); - - // ----- For IO Working Time Measurement ----- - EndTime = KeQueryPerformanceCounter(NULL); - sdiodevice->SdBusSubmitTime[RecordIndex].SdBusWorkDuration.QuadPart = (EndTime.QuadPart - StartTime.QuadPart)*1000000 / Freq.QuadPart; - sdiodevice->BusTimeRecordIndex = (RecordIndex<6? RecordIndex+1 : 0); - - if( Adapter->bCtrlPnPTime ) - sdiodevice->PnPSdBusWorkTime.QuadPart += (EndTime.QuadPart - StartTime.QuadPart); - //-------------------------------------------- - - if( !NT_SUCCESS(status) ) - { - RetryCnt++; - - if( status == STATUS_IO_TIMEOUT ) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd52ReadWriteByte(): registerIndex(%#x) WriteOrRead(%d) STATUS_IO_TIMEOUT\n", - registerIndex, writeToDevice)); - } - else if( status == STATUS_CRC_ERROR ) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd52ReadWriteByte(): registerIndex(%#x) WriteOrRead(%d) STATUS_CRC_ERROR\n", - registerIndex, writeToDevice)); - } - else - { - RT_TRACE(COMP_IO, DBG_WARNING, ("PlatformSdioCmd52ReadWriteByte(): Offset(%#x) WriteOrRead(%d) fail!!status(%#x)\n", - registerIndex, writeToDevice, status)); - } - - if(GlobalSdioDbg & SDIO_DBG_CMD) - { - RT_ASSERT(FALSE, ("Fail to submit CMD52 SD Bus request!! status(%x)\n", status)); - } - - if(SDRPErrHandleType == SDRP_ERROR_SKIP || - SDRPErrHandleType == SDRP_ERROR_SURPRISE_REMOVED) - { - break; - } - else if(SDRPErrHandleType == SDRP_ERROR_RETRY && RetryCnt >= SDRP_MAX_ERROR_RETRY_CNT) - { - break; - } - - delay_us(2); - } - }while(!NT_SUCCESS(status)); - - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - RT_SDIO_DEC_CMD_REF(sdiodevice); - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - bSdBusReqSent = TRUE; - - if (NT_SUCCESS(status) && !writeToDevice) { - *data = sdrp.ResponseData.AsUCHAR[0]; - } - - break; - } - else if(sdiodevice->nIrpPendingCnt == 1) - { // There is one IRP pending in SDIO host driver. - - KEVENT VoidEvent; - LARGE_INTEGER VoidEventWaitTime; - NTSTATUS VoidEventWaitStatus; - - RT_TRACE(COMP_DBG, DBG_TRACE, ("***** SynIo is going to wait for a while *****\n")); - - // SyncIo Method 2 - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - VoidEventWaitStatus = KeWaitForSingleObject(&sdiodevice->SyncIoEvent, Suspended, KernelMode, FALSE, NULL); - if(VoidEventWaitStatus == STATUS_SUCCESS) - { - KeClearEvent( &sdiodevice->SyncIoEvent ); - } - else - { - RT_ASSERT(FALSE, ("VoidEventWaitStatus: %x !!!\n", VoidEventWaitStatus)); - } - } - else - { // Error condition. - RT_ASSERT(FALSE, ("PlatformSdioCmd52ReadWriteByte(): sdiodevice->nIrpPendingCnt: %d !!!\n", - sdiodevice->nIrpPendingCnt)); - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - break; - } - } - - if( bSdBusReqSent == TRUE ) - { - NdisAcquireSpinLock( &(sdiodevice->IrpSpinLock) ); - if(sdiodevice->SyncIoWaitingCount>0) - sdiodevice->SyncIoWaitingCount--; - else - sdiodevice->SyncIoWaitingCount=0; - NdisReleaseSpinLock( &(sdiodevice->IrpSpinLock) ); - - if(NT_SUCCESS(status)) - { - SdioIOComplete(sdiodevice); - rtstatus = RT_STATUS_SUCCESS; - } - else - { - SdioIOComplete(sdiodevice); - - // - // We should perform necessary error handling here. - // e.g., Surprise removed or driver stopped control flag. - // - rtstatus = RT_STATUS_IO_EXCEPTION; - } - - } - - return rtstatus; -} - - - -// -// Description: -// This routine is exported for specific I/O Bus Domain(Host) and Device ID. -// Host Address Mapping Range is 0x1025_0000~0x1027_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// PASSIVE_LEVEL -// -// 2010.12.10, added by Roger. -// -u1Byte -PlatformSdioCmd52Read1Byte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - u1Byte Data; - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return 0xff; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformSdioCmd52Read1Byte() in PASSIVE_LEVEL is not allowed!!!\n")); - return 0xff; - } - else - { - status = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - FuncNum, - 1, - (ULONG)offset, - FALSE, - &Data); - } - return Data; - - } - - -// -// Description: -// This routine is exported for specific I/O Bus Domain(Host) and Device ID. -// Host Address Mapping Range is 0x1025_0000~0x1027_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -u2Byte -PlatformSdioCmd52Read2Byte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - u2Byte Data = 0; - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return 0xffff; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformSdioCmd52Read2Byte() in PASSIVE_LEVEL is not allowed!!!\n")); - } - else - { - status = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - FuncNum, - 2, - (ULONG)offset, - FALSE, - &Data); - } - return Data; - - } - - - // -// Description: -// This routine is exported for specific I/O Bus Domain(Host) and Device ID. -// Host Address Mapping Range is 0x1025_0000~0x1027_FFFF. - // -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// Called in PASSIVE_LEVEL -// -// 2010.12.10, added by Roger. -// -u4Byte -PlatformSdioCmd52Read4Byte( - IN PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - u4Byte Data = 0; - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return 0xffffffff; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformSdioCmd52Read4Byte() in PASSIVE_LEVEL is not allowed!!!\n")); - } - else - { - status = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - FuncNum, - 4, - (ULONG)offset, - FALSE, - &Data); - } - return Data; - -} - - -// -// Description: -// This routine is exported for specific I/O Bus Domain(Host) and Device ID. -// Host Address Mapping Range is 0x1025_0000~0x1027_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// PASSIVE_LEVEL -// -// 2010.12.10, added by Roger. -// -VOID -PlatformSdioCmd52Write1Byte( - PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset, - IN u1Byte data - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformSdioCmd52Write1Byte() in PASSIVE_LEVEL is not allowed!!!\n")); - } - else - { - status = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - FuncNum, - 1, - (ULONG)offset, - TRUE, - &data); - } -} - - -// -// Description: -// This routine is exported for specific I/O Bus Domain(Host) and Device ID. -// Host Address Mapping Range is 0x1025_0000~0x1027_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// -// 2010.12.10, added by Roger. -// -VOID -PlatformSdioCmd52Write2Byte( - PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset, - IN u2Byte data - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformSdioCmd52Write2Byte() in PASSIVE_LEVEL is not allowed!!!\n")); - } - else - { - status = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - FuncNum, - 2, - (ULONG)offset, - TRUE, - &data); - } -} - - - // -// Description: -// This routine is exported for specific I/O Bus Domain(Host) and Device ID. -// Host Address Mapping Range is 0x1025_0000~0x1027_FFFF. -// -// Assumption: -// Proper I/O bus domain address should be converted before calling any -// IO_RW_DIRECT or IO_RW_EXTENDED Commands. -// PASSIVE_LEVEL - // -// 2010.12.10, added by Roger. -// -VOID -PlatformSdioCmd52Write4Byte( - PVOID Adapter, - IN u1Byte DeviceID, - IN u1Byte FuncNum, - IN u4Byte offset, - IN u4Byte data - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - RT_STATUS status = RT_STATUS_SUCCESS; - - if(RT_SDIO_CANNOT_IO(pDefaultAdapter)) - return; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("PlatformSdioCmd52Write4Byte() in PASSIVE_LEVEL is not allowed!!!\n")); - } - else - { - status = PlatformSdioCmd52ReadWrite( - sdiodevice, - DeviceID, - FuncNum, - 4, - (ULONG)offset, - TRUE, - &data); - } -} - - -RT_STATUS -PlatformAllocateSharedMemory( - PVOID Adapter, - PSHARED_MEMORY pSharedMemory, - u4Byte length - ) -{ - //RTL8187_TODO - //NDIS_STATUS ndisstatus; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - - rtstatus = PlatformAllocateMemory( Adapter, (PVOID*)&pSharedMemory->VirtualAddress, length); - - if(pSharedMemory->VirtualAddress==NULL) - return RT_STATUS_FAILURE; - - pSharedMemory->Length=length; - - NdisZeroMemory(pSharedMemory->VirtualAddress,length); - - return RT_STATUS_SUCCESS; - -} - -VOID -PlatformFreeSharedMemory( - PVOID Adapter, - PSHARED_MEMORY pSharedMemory - ) -{ - if(pSharedMemory->VirtualAddress==NULL) - return; - - PlatformFreeMemory( - pSharedMemory->VirtualAddress, - pSharedMemory->Length); - - pSharedMemory->VirtualAddress=NULL; - -} - - -RT_STATUS -PlatformAllocateAlignedSharedMemory( - PVOID Adapter, - PALIGNED_SHARED_MEMORY pAlignedSharedMemory, - u4Byte length - ) -{ - // - // Note: This function is platform independent. - // So you just need to copy this function to your platform.c - // - RT_STATUS status; - u4Byte Offset; - - pAlignedSharedMemory->Length=length; - length+=0x00; - - status=PlatformAllocateSharedMemory( - Adapter, - &pAlignedSharedMemory->OriginalSharedMemory, - length); - - if(status==RT_STATUS_SUCCESS) - { - pAlignedSharedMemory->PhysicalAddressHigh=pAlignedSharedMemory->OriginalSharedMemory.PhysicalAddressHigh; - pAlignedSharedMemory->PhysicalAddressLow = ((pAlignedSharedMemory->OriginalSharedMemory.PhysicalAddressLow+0xff) & 0xFFFFFF00); - Offset = pAlignedSharedMemory->PhysicalAddressLow - pAlignedSharedMemory->OriginalSharedMemory.PhysicalAddressLow; - - pAlignedSharedMemory->VirtualAddress= pAlignedSharedMemory->OriginalSharedMemory.VirtualAddress+ Offset; - } - else - pAlignedSharedMemory->VirtualAddress=NULL; - - return status; -} - -VOID -PlatformFreeAlignedSharedMemory( - PVOID Adapter, - PALIGNED_SHARED_MEMORY pAlignedSharedMemory - ) -{ - // - // Note: This function is platform independent. - // So you just need to copy this function to your platform.c - // - if(pAlignedSharedMemory->VirtualAddress) - { - PlatformFreeSharedMemory(Adapter,&pAlignedSharedMemory->OriginalSharedMemory); - - pAlignedSharedMemory->VirtualAddress=NULL; - } -} - - -VOID -PlatformIndicateMediaStatus( - PVOID Adapter, - RT_MEDIA_STATUS mstatus - ) -{ - PADAPTER pAdapter = (PADAPTER)Adapter; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - NDIS_LINK_STATE LinkState; - - // - // We DON'T indicate media status accroding to - // document Native 802.11 Wireless Lan, - // section General Connection Operation Guidelines. - // 2007.08.06, by shien chang. - // - - N6_ASSIGN_OBJECT_HEADER( - LinkState.Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_LINK_STATE_REVISION_1, - sizeof(NDIS_LINK_STATE)); - - if( mstatus == RT_MEDIA_CONNECT ) - { - LinkState.MediaConnectState = MediaConnectStateConnected; - } - else - { -// LinkState.MediaConnectState = MediaConnectStateDisconnected; - pAdapter->NdisSdioDev.bNdisStatusIndicated=TRUE;//for HCT test - return; - } - LinkState.MediaDuplexState = MediaDuplexStateHalf; - - LinkState.RcvLinkSpeed = (MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter , pMgntInfo->bForcedShowRxRate, TRUE)/2)*1000000; - LinkState.XmitLinkSpeed = (MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter , pMgntInfo->bForcedShowRxRate, FALSE)/2)*1000000; - - //RT_TRACE(COMP_INDIC, DBG_LOUD, ("PlatformIndicateMediaStatus %d\n",LinkState.XmitLinkSpeed)); - - LinkState.PauseFunctions = NdisPauseFunctionsUnsupported; - //LinkState.AutoNegotiationFlags = NDIS_LINK_STATE_DUPLEX_AUTO_NEGOTIATED; - LinkState.AutoNegotiationFlags = NDIS_LINK_STATE_RCV_LINK_SPEED_AUTO_NEGOTIATED ; - - N6IndicateStatus( - pAdapter, - NDIS_STATUS_LINK_STATE, - &LinkState, - sizeof(NDIS_LINK_STATE)); - - - pAdapter->NdisSdioDev.bNdisStatusIndicated=TRUE; - -} - - -NTSTATUS -SdioAsynIORead( - PRT_SDIO_DEVICE device, - u2Byte Count, - u2Byte Index -) -{ - PIO_STACK_LOCATION pNextStack; - NTSTATUS NtStatus; - PIRP pIrp; - - RT_ASSERT(FALSE, ("SdioAsynIORead()!!!\n")); - - return STATUS_UNSUCCESSFUL; -} - - -// -// Send an IRP for Asyn IO Write to SDIO host driver. -// 2010.12.30, by Roger. -// -NTSTATUS -IssueIrpForAsynSdioIOWrite( - PRT_SDIO_DEVICE device, - u2Byte Count, - u4Byte Index, - PVOID pOutRegisterData -) -{ - PIRP pIrp = NULL; - PMDL pmdl = NULL; - PSDBUS_REQUEST_PACKET psdrp = NULL; - SD_RW_EXTENDED_ARGUMENT extendedArgument; - PIO_STACK_LOCATION pNextStack; - NTSTATUS NtStatus = STATUS_SUCCESS; - - const SDCMD_DESCRIPTOR WriteIoExtendedDesc = { - SDCMD_IO_RW_EXTENDED, - SDCC_STANDARD, - SDTD_WRITE, - SDTT_SINGLE_BLOCK, - SDRT_5}; - - NdisAcquireSpinLock( &(device->IrpSpinLock) ); - - // - // Retrieve corresponding SD Request Packet and MDL. - // - psdrp = device->pAsynIoWriteSdrp; - pmdl = device->pAsynIoWriteMDL; - - RtlZeroMemory(psdrp, sizeof(SDBUS_REQUEST_PACKET)); - - RT_ASSERT(device->bAsynIoWritePending == FALSE, ("IssueIrpForAsynIOWrite(): bAsynIoWritePending: %x !!!", device->bAsynIoWritePending)); - device->bAsynIoWritePending = TRUE; - - device->AsynIoWriteOffset = Index; - device->AsynIoWriteByteCnt = Count; - // Prefast warning ignore for false positive -#pragma warning( disable:6064 ) - RT_ASSERT(Count <= MAX_AWB_DATA_SIZE, ("IssueIrpForAsynIOWrite()>: Count: %d > MAX_AWB_DATA_SIZE!!!\n, Count")); - PlatformMoveMemory((PVOID)(device->AsynIoWriteDataBuf), pOutRegisterData, Count); - - // - // Allocate IRP - // - pIrp = IoAllocateIrp(device->NextDeviceStackSize, FALSE); - if(pIrp == NULL) - { - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - return STATUS_INSUFFICIENT_RESOURCES; - } - - - // - // Set up the argument and command descriptor. - // - psdrp->RequestFunction = SDRF_DEVICE_COMMAND; - psdrp->Parameters.DeviceCommand.CmdDesc = WriteIoExtendedDesc; - psdrp->Parameters.DeviceCommand.Length = Count; - - extendedArgument.u.AsULONG = 0; - extendedArgument.u.bits.Count = Count; - extendedArgument.u.bits.Address = Index; - extendedArgument.u.bits.OpCode = 1; - extendedArgument.u.bits.Function = device->SdioFuncNum; - extendedArgument.u.bits.WriteToDevice = TRUE; - - - pNextStack = IoGetNextIrpStackLocation(pIrp); - RT_ASSERT(pNextStack != NULL, ("IssueIrpForAsynIOWrite(): pNextStack should not be NULL!!!\n")); - pNextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL; - pNextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_SD_SUBMIT_REQUEST; - pNextStack->Parameters.DeviceIoControl.Type3InputBuffer = psdrp; - pNextStack->Parameters.DeviceIoControl.OutputBufferLength = Count; - - psdrp->Parameters.DeviceCommand.Argument = extendedArgument.u.AsULONG; - psdrp->Parameters.DeviceCommand.Mdl = pmdl; - - device->pAsynIoWriteIrp = pIrp; - - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - - // - // Sends an asynchronous Secure Digital (SD) request to the bus driver interface. - // - NtStatus = SdBusSubmitRequestAsync ( - device->Sdbusinterface.Context, - psdrp, - pIrp, - &SdioAsynIOWriteComplete, - (PVOID)device); - - if( NtStatus != STATUS_PENDING ) - { - - // - // We should handle other SD Bus error status here to prevent SD Bus halted issue. - // 2010.12.30. - // - RT_TRACE(COMP_IO, DBG_SERIOUS, ("IssueIrpForAsynIOWrite(): SdBusSubmitRequestAsync failed!!! (0x%X)\n", NtStatus)); - } - - return NtStatus; - } - -#if RTL8723_SDIO_IO_THREAD_ENABLE - -// -// Description: -// This routine just inserts the asynchronous IO Write Block(AWB) in busy queue, and then the AWB will be removed -// and perform corresponding IO operation in specific IO processing thread. -// -// 2011.06.23, created by Roger. -// -VOID -SdioAsynIOWriteEnqueue( - PRT_SDIO_DEVICE device, - u1Byte DeviceID, - UCHAR FuncNum, - u2Byte Count, - u4Byte Index, - PVOID pOutRegisterData -) - { - PRT_AWB pAwb = NULL; - u4Byte TargetAddr = Index; - PADAPTER pAdapter = device->pAdapter; - NTSTATUS NtStatus = STATUS_SUCCESS; - BOOLEAN bMacPwrCtrlOn = FALSE; - BOOLEAN bIoWriteEnqueue = FALSE; - - - if(RT_SDIO_CANNOT_IO(pAdapter)) - return; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(!bMacPwrCtrlOn) - { - RT_TRACE(COMP_IO, DBG_WARNING, ("SdioAsynIOWriteEnqueue(): power is off return!!\n")); - return; - } - - PlatformAcquireSpinLock(pAdapter, RT_AWB_SPINLOCK); - - if(!RTIsListEmpty( &(device->AwbIdleQueue) )) - { - pAwb = (PRT_AWB)RTRemoveHeadListWithCnt( &(device->AwbIdleQueue), &(device->NumIdleAwb)); - - if(Count <= MAX_AWB_DATA_SIZE) - { - pAwb->Offset = TargetAddr; - pAwb->ByteCnt = Count; - pAwb->DeviceID = DeviceID; - pAwb->FuncNum = FuncNum; - PlatformMoveMemory((PVOID)(pAwb->DataBuf), pOutRegisterData, Count); - RTInsertTailListWithCnt(&(device->AwbWaitQueue), &(pAwb->List), &(device->NumWaitAwb)); - bIoWriteEnqueue = TRUE; - - RT_TRACE(COMP_IO, DBG_TRACE, ("SdioAsynIOWriteEnqueue(): Offset(%#x), ByteCnt(%#x), NumIdleAwb(%d)\n", pAwb->Offset, pAwb->ByteCnt, device->NumIdleAwb)); - RT_PRINT_DATA(COMP_IO, DBG_TRACE, "SdioAsynIOWriteEnqueue(): Buffer:\n", - pAwb->DataBuf, pAwb->ByteCnt); - } - else - { - RT_ASSERT(FALSE, ("SdioAsynIOWriteEnqueue(): Invalid data size: %d for AWB, so this AsynIoWrite will be discard!!!\n", Count)); - ReturnSdioAWB(device, pAwb); - } - - } - else - { - RT_ASSERT(FALSE, ("SdioAsynIOWriteEnqueue(): No AWB in AwbIdleQueue NumIdleAwb(%d), so this AsynIoWrite will be discard!!!\n", - device->NumIdleAwb)); - } - - PlatformReleaseSpinLock(pAdapter, RT_AWB_SPINLOCK); - - if(bIoWriteEnqueue == TRUE) - { - // Releases the specified IO semaphore object for SDIO Register Access. - PlatformReleaseSemaphore(&device->IOSemaphore); - } - } -#endif - -// -// Description: -// This routine performs asynchronous IO Write operation in DISPATCH_LEVLEL. -// -// 2011.01.17, created by Roger. -// -NTSTATUS -SdioAsynIOWrite( - PRT_SDIO_DEVICE device, - u1Byte DeviceID, - UCHAR FuncNum, - u2Byte Count, - u4Byte Index, - PVOID pOutRegisterData -) -{ - u4Byte TargetAddr = Index; - PADAPTER pAdapter = device->pAdapter; - NTSTATUS NtStatus = STATUS_SUCCESS; - BOOLEAN bMacPwrCtrlOn; - u1Byte FwPSState; - - - if(RT_SDIO_CANNOT_IO(pAdapter)) - return NtStatus; - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(!bMacPwrCtrlOn) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("SdioAsynIOWrite(): power is off return!!\n")); - return NtStatus; - } - - if(pAdapter->bFWReady) - { - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pAdapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(DeviceID, Index)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("Return----- SdioAsynIOWrite(): %#X\n", Index)); - return NtStatus; - } - } - - NdisAcquireSpinLock( &(device->IrpSpinLock) ); - - if( FuncNum == device->SdioFuncNum ) - pAdapter->HalFunc.HalSdioGetCmdAddressHandler( pAdapter, DeviceID, Index, &TargetAddr ); - - if(device->nIrpPendingCnt == 0) - { // No IRP pending in USB host driver. - - device->nIrpPendingCnt++; - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - - // Issue an IRP for AsynIo write. - NtStatus = IssueIrpForAsynSdioIOWrite(device, Count, TargetAddr, pOutRegisterData); - - // Handle the failed if IssueIrpForAsynIOWrite failed. - } - else if(device->nIrpPendingCnt == 1) - { // There is one IRP pending in SDIO host driver. - PRT_AWB pAwb; - - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - - RT_TRACE(COMP_DBG, DBG_TRACE, ("***** AsynIoWrite should be inserted to queue *****\n")); - - PlatformAcquireSpinLock(pAdapter, RT_AWB_SPINLOCK); - if(!RTIsListEmpty( &(device->AwbIdleQueue) )) - { - pAwb = (PRT_AWB)RTRemoveHeadListWithCnt( &(device->AwbIdleQueue), &(device->NumIdleAwb)); - - if(Count <= MAX_AWB_DATA_SIZE) - { - pAwb->Offset = TargetAddr; - pAwb->ByteCnt = Count; - PlatformMoveMemory((PVOID)(pAwb->DataBuf), pOutRegisterData, Count); - RTInsertTailListWithCnt(&(device->AwbWaitQueue), &(pAwb->List), &(device->NumWaitAwb)); - } - else - { - RT_ASSERT(FALSE, ("SdioAsynIOWrite(): Invalid data size: %d for AWB, so this AsynIoWrite will be discard!!!\n", Count)); - ReturnSdioAWB(device, pAwb); - } - } - else - { - RT_ASSERT(FALSE, ("SdioAsynIOWrite(): No AWB in AwbIdleQueue NumIdleAwb(%d), so this AsynIoWrite will be discard!!!\n", - device->NumIdleAwb)); - } - PlatformReleaseSpinLock(pAdapter, RT_AWB_SPINLOCK); - } - else - { // Error condition. - RT_ASSERT(FALSE, ("SdioAsynIOWrite(): device->nIrpPendingCnt: %d !!!\n", device->nIrpPendingCnt)); - PlatformReleaseSpinLock(pAdapter, RT_AWB_SPINLOCK); - } - - - RT_TRACE(COMP_DBG, DBG_TRACE, ("<<<<<<<<<<< SdioAsynIOWrite(): %x\n", TargetAddr)); - - return NtStatus; -} - - -// -// Post-processing for Asyn IO Write. -// 2010.12.29, by Roger. -// -VOID -SdioIOComplete( - PRT_SDIO_DEVICE device -) -{ - PADAPTER pAdapter = (PADAPTER)(device->pAdapter); - BOOLEAN bMacPwrCtrlOn; - - //RT_TRACE(COMP_DBG, DBG_TRACE, ("---> SdioIOComplete()\n")); - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - - NdisAcquireSpinLock( &(device->IrpSpinLock) ); - - device->nIrpPendingCnt--; - - if(device->nIrpPendingCnt == 0) - { // No IRP pending in SDIO host driver. - - if((pAdapter->bDriverStopped == FALSE) && bMacPwrCtrlOn) - { -#if RTL8723_SDIO_IO_THREAD_ENABLE - if(0) -#else - if( !RTIsListEmpty( &(device->AwbWaitQueue) ) ) -#endif - { // Handle the request in AsynIoWriteWaitQ. - PRT_AWB pAwb; - NTSTATUS NtStatus; - - device->nIrpPendingCnt++; - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - - PlatformAcquireSpinLock(pAdapter, RT_AWB_SPINLOCK); - // Issue an IRP for AsynIo write. - pAwb = (PRT_AWB)RTRemoveHeadListWithCnt( &(device->AwbWaitQueue), &(device->NumWaitAwb)); - PlatformReleaseSpinLock(pAdapter, RT_AWB_SPINLOCK); - RT_ASSERT(pAwb != NULL, ("SdioIOComplete(): pAwb should not be NULL!!! Race Condition?\n")); - NtStatus = IssueIrpForAsynSdioIOWrite(device, pAwb->ByteCnt, pAwb->Offset, (PVOID)pAwb->DataBuf); - - PlatformAcquireSpinLock(pAdapter, RT_AWB_SPINLOCK); - // Return the AWB since we had submitted the asyn IO write operation to USBD. - ReturnSdioAWB(device, pAwb); - PlatformReleaseSpinLock(pAdapter, RT_AWB_SPINLOCK); - } - // SyncIo Method 2. - else if(device->SyncIoWaitingCount>0) - { // If there is workitem waiting. - RT_TRACE(COMP_DBG, DBG_TRACE,("SdioIOComplete(): there is workitem is waiting...\n")); - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - KeSetEvent( &(device->SyncIoEvent), 0, FALSE); - } - else - { - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - } - } - else - { // Driver is going to unload. - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - -#if RTL8723_SDIO_IO_THREAD_ENABLE == 0 - while( !RTIsListEmpty(&(device->AwbWaitQueue)) && !bMacPwrCtrlOn) - { - PRT_AWB pAwb; - - RT_TRACE(COMP_INIT|COMP_IO|COMP_SEND, DBG_WARNING, ("SdioIOComplete(): power is off, and return AWB!!\n")); - PlatformAcquireSpinLock(pAdapter, RT_AWB_SPINLOCK); - // Issue an IRP for AsynIo write. - pAwb = (PRT_AWB)RTRemoveHeadListWithCnt( &(device->AwbWaitQueue), &(device->NumWaitAwb)); - // Return the AWB immediately - ReturnSdioAWB(device, pAwb); - PlatformReleaseSpinLock(pAdapter, RT_AWB_SPINLOCK); - } -#endif - if(device->SyncIoWaitingCount>0) - { // If there is workitem waiting. 2005.01.25, by rcnjko. - RT_TRACE(COMP_DBG, DBG_LOUD,("SdioIOComplete(): there is workitem is waiting...\n")); - KeSetEvent( &(device->SyncIoEvent), 0, FALSE); - } - } - } - else - { // Error condition. - RT_ASSERT(FALSE, ("SdioIOComplete(): device->nIrpPendingCnt: %d !!!\n", device->nIrpPendingCnt)); - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - } - - // - // Signal the AllSdioCmdReturnedEvent if all SDIO CMDs are returned. - // 2011.04.01. - // - if( RT_SDIO_GET_CMD_REF(device) == 0 ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("SdioIOComplete(): Signal the AllSdioCmdReturnedEvent\n")); - NdisSetEvent(&device->AllSdioCmdReturnedEvent); - } - - //RT_TRACE(COMP_DBG, DBG_TRACE, ("<--- SdioIOComplete()\n")); - } - - -// -// Callback function of when an Asyn IO Write IRP completed. -// 2010.12.30, by Roger. -// -NTSTATUS -SdioAsynIOWriteComplete( - PDEVICE_OBJECT DeviceObject, - PIRP pIrp, - PVOID Context -) -{ - PRT_SDIO_DEVICE device; - PADAPTER pAdapter; - - device = (PRT_SDIO_DEVICE)Context; - pAdapter = (PADAPTER)(device->pAdapter); - - NdisAcquireSpinLock( &(device->IrpSpinLock) ); - device->bAsynIoWritePending = FALSE; - NdisReleaseSpinLock( &(device->IrpSpinLock) ); - - if(pAdapter->bDriverStopped) - { - NdisSetEvent(&device->AllAsynIoIrpReturnedEvent); - } - - switch(pIrp->IoStatus.Status) - { - case STATUS_SUCCESS: - RT_TRACE(COMP_IO, DBG_LOUD, ("SdioAsynIOWriteComplete(): STATUS_SUCCESS\n")); - break; - - case STATUS_TIMEOUT: - if(device->bRegSurpriseRemovedEnable) - pAdapter->bSurpriseRemoved = TRUE; - - RT_TRACE(COMP_IO, DBG_LOUD, ("SdioAsynIOWriteComplete(): STATUS_TIMEOUT\n")); - break; - - case STATUS_PENDING: - RT_TRACE(COMP_IO, DBG_LOUD, ("SdioAsynIOWriteComplete(): STATUS_PENDING\n")); - break; - - case STATUS_UNSUCCESSFUL: - if(device->bRegSurpriseRemovedEnable) - pAdapter->bSurpriseRemoved = TRUE; - - RT_TRACE(COMP_IO, DBG_LOUD, ("SdioAsynIOWriteComplete(): STATUS_UNSUCCESSFUL\n")); - break; - - default: - RT_TRACE(COMP_IO, DBG_LOUD, ("SdioAsynIOWriteComplete(): Unknown: %x\n", pIrp->IoStatus.Status)); - break; - } - - IoFreeIrp(pIrp); - - SdioIOComplete(device); - - return STATUS_MORE_PROCESSING_REQUIRED; -} - - -// -// New IO: -// Cancel the pending Asyn IO Write in SDIO host driver. -// 2011.01.06, by Roger. -// -VOID -RTsdioCancelAsynIoPendingIrp( - IN PVOID Adapter -) -{ - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE((PADAPTER)Adapter); - u1Byte i; - - if(device->bAsynIoWritePending) - { - // Cancel the IRP for AsynIO write request. - IoCancelIrp(device->pAsynIoWriteIrp); - - // Wait until it completed by USB host driver. - NdisWaitEvent( &(device->AllAsynIoIrpReturnedEvent), 2000); - - // Reset the event. - NdisResetEvent(&(device->AllAsynIoIrpReturnedEvent)); - } -} - - - -BOOLEAN -PrepareSdioAWBs( - PRT_SDIO_DEVICE device - ) -{ - RT_STATUS status = RT_STATUS_FAILURE; - u4Byte i; - PADAPTER Adapter = (PADAPTER)device->pAdapter; - PRT_AWB pAwb; - device->pAsynIoWriteMDL = NULL; - device->pAsynIoWriteSdrp = NULL; - - do - { - device->AwbBufferSize = device->NumAwb * sizeof(RT_AWB); - status = PlatformAllocateMemory(Adapter, &(device->AwbBuffer), device->AwbBufferSize); - if(status != RT_STATUS_SUCCESS) - goto Error; - - PlatformZeroMemory(device->AwbBuffer, device->AwbBufferSize); - - pAwb = (PRT_AWB)device->AwbBuffer; - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - for(i = 0; i < device->NumAwb; i++) - { - ReturnSdioAWB(device, &(pAwb[i])); - } - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - }while(FALSE); - - - // - // Allocate MDL for AsynIO Write buffer - // - device->pAsynIoWriteMDL = IoAllocateMdl((pu1Byte)device->AsynIoWriteDataBuf, MAX_AWB_DATA_SIZE , FALSE, FALSE, NULL); - if(device->pAsynIoWriteMDL == NULL) - goto Error; - - MmBuildMdlForNonPagedPool(device->pAsynIoWriteMDL); - - // - // Allocate SD Request Packet - // - device->pAsynIoWriteSdrp = (PSDBUS_REQUEST_PACKET)ExAllocatePoolWithTag(NonPagedPool, sizeof(SDBUS_REQUEST_PACKET), '3278'); - if(device->pAsynIoWriteSdrp == NULL) - goto Error; - - return TRUE; - -Error: - if( device->pAsynIoWriteMDL ) - IoFreeMdl( device->pAsynIoWriteMDL ); - - if( device->pAsynIoWriteSdrp ) - ExFreePoolWithTag( device->pAsynIoWriteSdrp, '3278' ); - - return FALSE; -} - - -BOOLEAN -FreeSdioAWBs( - PRT_SDIO_DEVICE device, - BOOLEAN bReset - ) -{ - PRT_AWB pAwb; - PADAPTER Adapter = (PADAPTER)device->pAdapter; - - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - while( !RTIsListEmpty(&(device->AwbWaitQueue)) ) - { - pAwb = (PRT_AWB)RTRemoveHeadListWithCnt( &(device->AwbWaitQueue), &(device->NumWaitAwb)); - - ReturnSdioAWB(device, pAwb); - } - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - - if(!bReset) - { - PlatformFreeMemory(device->AwbBuffer, device->AwbBufferSize); - } - - if( device->pAsynIoWriteMDL ) - IoFreeMdl( device->pAsynIoWriteMDL ); - - if( device->pAsynIoWriteSdrp ) - ExFreePool( device->pAsynIoWriteSdrp ); - - device->pAsynIoWriteMDL = NULL; - device->pAsynIoWriteSdrp = NULL; - - return TRUE; -} - - -VOID -ReturnSdioAWB( - PRT_SDIO_DEVICE device, - PRT_AWB pAwb - ) -{ - RTInsertTailListWithCnt(&(device->AwbIdleQueue), &(pAwb->List), &(device->NumIdleAwb)); -} - -// -// Description: -// Determine if we can send packet to specified QueueID. -// It return TRUE if then IRP pending in corresponding pipe > 1. -// Note that, this is platform dependent, the following implementation -// is for WDM. -// -BOOLEAN -PlatformIsTxQueueAvailable( - IN PADAPTER Adapter, - IN u1Byte QueueID, - IN u2Byte BufferCount) -{ - - - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(pDefaultAdapter); - u1Byte IdxQueue; - PRT_SDIO_TX_QUEUE pTxQueue; - int nIrpPendingCount = 0; - - IdxQueue = MapTxQueueToOutPipe(pDefaultAdapter, QueueID); - pTxQueue = &(device->RtTxQueue[IdxQueue]); - nIrpPendingCount = pTxQueue->IrpPendingCount; - - RT_TRACE(COMP_SEND, DBG_TRACE, ("PlatformIsTxQueueAvailable(): QueueID(%d) IrpPendingCount(%d)\n", IdxQueue, nIrpPendingCount)); - - if(nIrpPendingCount == 1 && pTxQueue->bStalled == FALSE) - { - return TRUE; - } - else - { - if(nIrpPendingCount >= MAX_NUM_REQUEST_PER_TX_QUEUE) - { - RT_TRACE(COMP_SEND, DBG_SERIOUS, ("PlatformIsTxQueueAvailable(): QueueID(%d) IrpPendingCount(%d) >= %d !!!\n", - IdxQueue, nIrpPendingCount, MAX_NUM_REQUEST_PER_TX_QUEUE)); - return FALSE; - } - } - - return TRUE; -} - - - -#if 1 -extern PCHAR PlatformSystemPowerString( - SYSTEM_POWER_STATE Type - ) -/*++ - -New Routine Description: - PlatformSystemPowerString converts the system power state code of a power IRP to a - text string that is more helpful when tracing the execution of power IRPs. - -Parameters Description: - Type - Type specifies the system power state code of a power IRP. - -Return Value Description: - PlatformDevicePowerString returns a pointer to a string that represents the - text description of the incoming system power state code. - ---*/ -{ - switch (Type) - { - case PowerSystemUnspecified: - return "PowerSystemUnspecified"; - case PowerSystemWorking: - return "PowerSystemWorking"; - case PowerSystemSleeping1: - return "PowerSystemSleeping1"; - case PowerSystemSleeping2: - return "PowerSystemSleeping2"; - case PowerSystemSleeping3: - return "PowerSystemSleeping3"; - case PowerSystemHibernate: - return "PowerSystemHibernate"; - case PowerSystemShutdown: - return "PowerSystemShutdown"; - case PowerSystemMaximum: - return "PowerSystemMaximum"; - default: - return "UnKnown System Power State"; - } - } - - -extern PCHAR PlatformDevicePowerString( - DEVICE_POWER_STATE Type - ) -/*++ - -New Routine Description: - PlatformDevicePowerString converts the device power state code of a power IRP to a - text string that is more helpful when tracing the execution of power IRPs. - -Parameters Description: - Type - Type specifies the device power state code of a power IRP. - -Return Value Description: - PlatformDevicePowerString returns a pointer to a string that represents the - text description of the incoming device power state code. - ---*/ -{ - switch (Type) - { - case PowerDeviceUnspecified: - return "PowerDeviceUnspecified"; - case PowerDeviceD0: - return "PowerDeviceD0"; - case PowerDeviceD1: - return "PowerDeviceD1"; - case PowerDeviceD2: - return "PowerDeviceD2"; - case PowerDeviceD3: - return "PowerDeviceD3"; - case PowerDeviceMaximum: - return "PowerDeviceMaximum"; - default: - return "UnKnown Device Power State"; - } -} -#endif - - -VOID -PlatformSdioEnableTxQueues( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - int i; - - if( Adapter->bSurpriseRemoved ) - return; - - for ( i = 0; i < pDevice->RtNumTxQueue; i++ ) - { - N6SdioStartTxQueue(Adapter, i); - } -} - -VOID -PlatformSdioDisableTxQueues( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - int i; - - // Cancel Pending out IRPs. - for (i = 0; i < pDevice->RtNumTxQueue; i++) - { - N6SdioStopTxQueue(Adapter, i); - } -} - - -// -// Description: -// Wait for all SD Request packets are completed. -// Added by Roger, 2010.09.30. -// -VOID -PlatformSdioWaitAllSDReqComplete( - IN PADAPTER Adapter - ) -{ - - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - u1Byte ChkCnt = 0; - - while(TRUE) - { - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - if(pDevice->nIrpPendingCnt >0) - { - RT_TRACE(COMP_IO, DBG_TRACE, ("PlatformSdioWaitAllSDReqComplete(): wait for all nIrpPendingCnt returned (%d)\n", - pDevice->nIrpPendingCnt)); - - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - PlatformStallExecution(100); // Wait for all Rx operation is down. - ChkCnt++; - if ( ChkCnt>= 1000) - { - RT_TRACE(COMP_IO, DBG_TRACE, ("PlatformSdioWaitAllSDReqComplete(): Wait too long break!!\n")); - break; - } - } - else - { - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - break; - } - } -} - - -VOID -PlatformEnableNetworkMonitorMode( - IN PADAPTER Adapter - ) -{ - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - pNdisCommon->dot11AutoConfigEnabled = FALSE; // useless before ndis6 -} - -VOID -PlatformDisableNetworkMonitorMode( - IN PADAPTER Adapter - ) -{ - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - pNdisCommon->dot11AutoConfigEnabled = TRUE; // useless before ndis6 - -} - -VOID -PlatformSetFwPsClkOffEvent( - IN PADAPTER Adapter, - IN u1Byte SetEvent -) -{ - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - - if(SetEvent) - NdisSetEvent(&sdiodevice->FwPsClockOffEvent); - else - NdisResetEvent(&sdiodevice->FwPsClockOffEvent); -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.h deleted file mode 100644 index 96950220..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6SdioPlatformWindows.h +++ /dev/null @@ -1,244 +0,0 @@ -#ifndef __INC_N6SDIOPLATFORMWINDOWS_H -#define __INC_N6SDIOPLATFORMWINDOWS_H - -// -// SD Bus driver versions -// -#define SDBUS_DRIVER_VERSION_1 0x100 -#define SDBUS_DRIVER_VERSION_2 0x200 - -// -// Properties of a Secure Digital (SD) card that an SD device driver can set with an SD request. -// -#define SDP_MEDIA_CHANGECOUNT 0 // 4Bytes data, read-only -#define SDP_MEDIA_STATE 1 //v1.0 SDPROP_MEDIA_STATE, read-only -#define SDP_WRITE_PROTECTED 2 //v1.0 BOOLEAN, read-only -#define SDP_FUNCTION_NUMBER 3 //v1.0 UCHAR, read-only -#define SDP_FUNCTION_TYPE 4 // v2.0 SDBUS_FUNCTION_TYPE -#define SDP_BUS_DRIVER_VERSION 5 // v2.0 USHORT -#define SDP_BUS_WIDTH 6 // v2.0 UCHAR, 1-bit or 4-bits -#define SDP_BUS_CLOCK 7 // v2.0 ULONG, in KHz -#define SDP_BUS_INTERFACE_CONTROL 8 // v2.0 UCHAR, This property is corresponding to CCCR[7] -#define SDP_HOST_BLOCK_LENGTH 9 // v2.0 USHORT, read-only -#define SDP_FUNCTION_BLOCK_LENGTH 10 // v2.0 USHORT -#define SDP_FN0_BLOCK_LENGTH 11 // v2.0 USHORT -#define SDP_FUNCTION_INT_ENABLE 12 // v2.0 BOOLEAN - -//SDIO Card Metaformat for multiple CIS areas. -#define CISTPL_NULL 0x00 -#define CISTPL_CHECKSUM 0x10 -#define CISTPL_VERS_1 0x15 -#define CISTPL_ALTSTR 0x16 -#define CISTPL_MANFID 0x20 -#define CISTPL_FUNCID 0x21 -#define CISTPL_FUNCE 0x22 -#define CISTPL_SDIO_STD 0x91 -#define CISTPL_SDIO_EXT 0x92 -#define CISTPL_END 0xff // The end-of-chain Tuple -#define CISTPL_LINK_END 0xff - -#define SDIO_BUS_SIZE 512 -#define SDIO_MAX_LENGTH_BYTE_MODE SDIO_BUS_SIZE - -// SDIO CCCR registers -#define SDIO_CCCRx_SDIOx 0x00 // CCCR/SDIO Revision -#define SDIO_CCCR_SDx 0x01 // SD Specification Revision -#define SDIO_CCCR_IOEx 0x02 // IO Enable -#define SDIO_CCCR_IORx 0x03 // IO Ready -#define SDIO_CCCR_IENx 0x04 // Interrupt Enable -#define SDIO_CCCR_INTx 0x05 // Interrupt Pending -#define SDIO_CCCR_ASx 0x06 // IO Abort -#define SDIO_CCCR_BUS_INTF_CTL 0x07 // Bus Interface Control -#define SDIO_CCCR_CARD_CAP 0x08 // Card Capability -#define SDIO_CCCR_COMMON_CIS_PTR 0x09 // Common CIS pointer -#define SDIO_CCCR_FN0_BLOCK_SIZE 0x10 // Block Size for Function 0 -#define SDIO_CCCR_BEGIN 0x00 -#define SDIO_CCCR_END 0xff - -#define RT_GET_SDIO_COMMON_CISPTR(__pDevice) (__pDevice->SdioCommonCISPtr) - -// FBR registers -#define SDIO_FBR_FUNC1_BEGIN 0x100 // Offset for Function 1 -#define SDIO_FBR_FUNC1_END 0x1FF - -// SDIO CIS Area registers -#define SDIO_CIS_BEGIN 0x00001000 -#define SDIO_CIS_END 0x00017fff - -#define SDIO_MAX_TX_QUEUE 3 // HIQ, MIQ and LOQ -#define SDIO_MAX_RX_QUEUE 1 - -// Forward declaration. -typedef enum _RT_STATUS RT_STATUS; -typedef struct _RT_TCB RT_TCB, *PRT_TCB; -typedef struct _SDIO_OUT_CONTEXT *PSDIO_OUT_CONTEXT; -typedef struct _SDIO_IN_CONTEXT *PSDIO_IN_CONTEXT; -// - - -// Some USB 1.1 host driver cannot afford too large bulkin size on Win2k platform -#define PLATFORM_LIMITED_RX_BUF_SIZE(_ADAPTER) FALSE -// Some USB 1.1 host driver cannot afford too large bulkout size on Win2k platform -#define PLATFORM_LIMITED_TX_BUF_SIZE(_ADAPTER) FALSE - - -extern PCHAR -PlatformSystemPowerString( - SYSTEM_POWER_STATE Type -); -extern PCHAR -PlatformDevicePowerString( - DEVICE_POWER_STATE Type -); - -NTSTATUS -PlatformSdioGetProperty( - IN PRT_SDIO_DEVICE pDevice, - IN SDBUS_PROPERTY Property, - IN PVOID Buffer, - IN ULONG Length -); - -NTSTATUS -PlatformSdioSetProperty( - IN PRT_SDIO_DEVICE pDevice, - IN SDBUS_PROPERTY Property, - IN PVOID Buffer, - IN ULONG Length -); - -RT_STATUS -PlatformSdioCmd53ReadWrite( - PRT_SDIO_DEVICE sdiodevice, - UCHAR DeviceID, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeFlag, - PVOID buffer -); - -RT_STATUS -PlatformSdioCmd53ReadWriteBlock( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeFlag, - PVOID buffer -); - -RT_STATUS -PlatformSdioCmd53ReadWriteByte( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeFlag, - PVOID buffer -); - -RT_STATUS -PlatformSdioCmd53ReadWriteMDL( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - PMDL pmdl, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeToDevice, - BOOLEAN blockMode -); - -RT_STATUS -PlatformSdioCmd52ReadWrite( - PRT_SDIO_DEVICE sdiodevice, - UCHAR DeviceID, - UCHAR funcNum, - ULONG byteCount, - ULONG registerIndex, - BOOLEAN writeToDevice, - PVOID buffer -); - -RT_STATUS -PlatformSdioCmd52ReadWriteByte( - PRT_SDIO_DEVICE sdiodevice, - UCHAR funcNum, - ULONG registerIndex, - PUCHAR data, - BOOLEAN writeToDevice -); - - -// -// Asyn I/O Write -// -NTSTATUS -IssueIrpForAsynSdioIOWrite( - PRT_SDIO_DEVICE device, - u2Byte Count, - u4Byte Index, - PVOID pOutRegisterData -); - -#if RTL8723_SDIO_IO_THREAD_ENABLE -VOID -SdioAsynIOWriteEnqueue( - PRT_SDIO_DEVICE device, - u1Byte DeviceID, - UCHAR FuncNum, - u2Byte Count, - u4Byte Index, - PVOID pOutRegisterData -); -#endif - -NTSTATUS -SdioAsynIOWrite( - PRT_SDIO_DEVICE device, - u1Byte DeviceID, - UCHAR FuncNum, - u2Byte Count, - u4Byte Index, - PVOID pOutRegisterData -); - -VOID -SdioIOComplete( - PRT_SDIO_DEVICE device -); - -NTSTATUS -SdioAsynIOWriteComplete( - PDEVICE_OBJECT DeviceObject, - PIRP pIrp, - PVOID Context -); - - -VOID -RTsdioCancelAsynIoPendingIrp( - IN PVOID Adapter -); - - -BOOLEAN -PrepareSdioAWBs( - PRT_SDIO_DEVICE device -); - - -BOOLEAN -FreeSdioAWBs( - PRT_SDIO_DEVICE device, - BOOLEAN bReset -); - - -VOID -ReturnSdioAWB( - PRT_SDIO_DEVICE device, - PRT_AWB pAwb -); - -#endif // #ifndef __INC_N6SDIOPLATFORMWINDOWS_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_DrvIF.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_DrvIF.c deleted file mode 100644 index 25bc87d2..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_DrvIF.c +++ /dev/null @@ -1,1698 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N6Sdio_DrvIF.tmh" -#endif - -/*---------------------------Define Local Constant---------------------------*/ -// For AMSDU test -// For 802.11 header pseudo sequence number test. -#define N6_PSDUDO_SEQ_NUM 0 -//#define N6_LLC_SIZE 8 -#define N6_MAX_AMSDU_SUBF_NUM 20 - -#if (N6_PSDUDO_SEQ_NUM == 1) -static UINT16 Pseudo_Seq_Num = 0; -#endif - -RT_STATUS -DrvIFAssociateRFD( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PRT_SDIO_DEVICE device = NULL; - - device = &Adapter->NdisSdioDev; - - if(IsCloneRFD(Adapter, pRfd)) - { - rtStatus = MultiPortAllocateCloneRfdBuffer(Adapter, pRfd); - } - else - { - rtStatus=PlatformAllocateAlignedSharedMemory( - Adapter, - &(pRfd->Buffer), - Adapter->MAX_RECEIVE_BUFFER_SIZE - ); - - pRfd->Buffer.Length = Adapter->MAX_RECEIVE_BUFFER_SIZE; - } - - return rtStatus; -} - -VOID -DrvIFDisassociateRFD( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - if(pRfd->Buffer.VirtualAddress==NULL) - return; - - if(IsCloneRFD(Adapter, pRfd)) - { - MultiPortReleaseCloneRfdBuffer(pRfd); - } - else - { - PlatformFreeAlignedSharedMemory(Adapter, &(pRfd->Buffer)); - } -} - -BOOLEAN -FillN6NBLInfo( - PADAPTER Adapter, - PNET_BUFFER_LIST pNBL, - PRT_RFD pRfd - ) -{ - PDOT11_EXTSTA_RECV_CONTEXT pRecvContext=NULL; - NDIS_NET_BUFFER_LIST_8021Q_INFO NBL8021qInfo; - RT_STATUS rtStatus=RT_STATUS_FAILURE; - - if(pNBL==NULL || pRfd==NULL) - return FALSE; - - if( OS_SUPPORT_WDI(Adapter) ) - { - rtStatus = WDIAllocateMetaData(Adapter, pNBL, pRfd); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate WifiRxMetaData\n")); - return FALSE; - } - } - else - { - rtStatus = PlatformAllocateMemory( - Adapter, - &pRecvContext, - sizeof(DOT11_EXTSTA_RECV_CONTEXT)); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate DOT11_EXTSTA_RECV_CONTEXT\n")); - return FALSE; - } - - PlatformZeroMemory(pRecvContext, sizeof(DOT11_EXTSTA_RECV_CONTEXT)); - N6_ASSIGN_OBJECT_HEADER( - pRecvContext->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_EXTSTA_RECV_CONTEXT_REVISION_1, - sizeof(DOT11_EXTSTA_RECV_CONTEXT)); - pRecvContext->uReceiveFlags = 0; // set to zero if in ExtSta mode. - pRecvContext->uPhyId = N6CQuery_DOT11_OPERATING_PHYID(Adapter); - pRecvContext->uChCenterFrequency = - MgntGetChannelFrequency(RT_GetChannelNumber(Adapter)); - pRecvContext->usNumberOfMPDUsReceived = pRfd->nTotalFrag; - //pRecvContext->lRSSI = Adapter->RxStats.SignalStrength; // Report the smoothed signal strength. - pRecvContext->lRSSI = pRfd->Status.RecvSignalPower; //Report real RSSI to OS, fix maximum -45 dbm for Network monitor, 201502 Sean - pRecvContext->ucDataRate = pRfd->Status.DataRate; - pRecvContext->uSizeMediaSpecificInfo = 0; - pRecvContext->pvMediaSpecificInfo = NULL; - pRecvContext->ullTimestamp = ((u8Byte)pRfd->Status.TimeStampHigh << 32) + pRfd->Status.TimeStampLow; - - NET_BUFFER_LIST_INFO(pNBL, MediaSpecificInformation) = pRecvContext; - } - - if(Adapter->MgntInfo.pStaQos->CurrentQosMode != QOS_DISABLE) - { - NBL8021qInfo.Value = NET_BUFFER_LIST_INFO(pNBL, Ieee8021QNetBufferListInfo); - NBL8021qInfo.WLanTagHeader.WMMInfo = pRfd->Status.UserPriority; - NET_BUFFER_LIST_INFO(pNBL, Ieee8021QNetBufferListInfo) = NBL8021qInfo.Value; - } - - return TRUE; -} - - -VOID -FreeN6NBLInfo( - PADAPTER Adapter, - PNET_BUFFER_LIST pNBL - ) -{ - if( OS_SUPPORT_WDI(Adapter) ) - { - WDIFreeMetaData(Adapter, pNBL); -} - else - { - PDOT11_EXTSTA_RECV_CONTEXT pRecvContext = NULL; - - pRecvContext = (PDOT11_EXTSTA_RECV_CONTEXT)NET_BUFFER_LIST_INFO(pNBL, MediaSpecificInformation); - - if( pRecvContext != NULL ) - PlatformFreeMemory(pRecvContext, sizeof(DOT11_EXTSTA_RECV_CONTEXT)); - } -} - -VOID -DrvIFIndicatePackets( - PADAPTER Adapter, - PRT_RFD *pRfd_array, - u2Byte Num - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE usbdevice; - NDIS_HANDLE NBLPoolHandle; - PMDL pMdl = NULL; - PMDL pCurrMdl = NULL, pNextMdl = NULL; - PNET_BUFFER_LIST pNetBufferList = NULL; - PNET_BUFFER_LIST pLastNetBufferList = NULL; - PNET_BUFFER_LIST pFirstNetBufferList = NULL; - PRT_RFD pTmpRfd = NULL; - ULONG RecvFlags = 0; - - u2Byte rfd_index = 0; - u2Byte subframe_hdr_idx = 0; - u2Byte subframe_index = 0; - u2Byte packet_index = 0; - PRT_RFD pCurRfd = NULL; - - - // Indicate if the RFD is returned or will be indicated to OS --- - pu1Byte pRfdReturnOK = NULL; - PRT_GEN_TEMP_BUFFER pGenTempBuffer = NULL; - // -------------------------------------------------- - - // Resource Management -------------------- - u4Byte ResourceMointor = 0; - const u4Byte RESOURCE_MDL = BIT1; - const u4Byte RESOURCE_NBL = BIT2; - const u4Byte RESOURCE_INFO = BIT3; - // --------------------------------------- - - // For WDI architecture --------------------- - u4Byte PeerId; - BOOLEAN bDataInQueue[MAX_PEER_NUM] = {0}; - u2Byte index = 0; - // --------------------------------------- - - if(Num==0 || pRfd_array==NULL) - return; - - // Check if the RFD is returned or indicated to the OS ------ - pGenTempBuffer = GetGenTempBuffer(Adapter, Num); - pRfdReturnOK = pGenTempBuffer->Buffer.Ptr; - PlatformZeroMemory(pRfdReturnOK, Num); - // ------------------------------------------------- - - usbdevice = &Adapter->NdisSdioDev; - NBLPoolHandle = usbdevice->RxNetBufferListPool; - - for(rfd_index = 0; rfd_index < Num; rfd_index++) - { - pCurRfd = pRfd_array[rfd_index]; - - if(RT_STATUS_SUCCESS == WAPI_SecFuncHandler(WAPI_DROPFORRXREORDER,Adapter,(PVOID)pCurRfd, WAPI_END)) - { - RT_TRACE(COMP_SEC,DBG_LOUD,("=====>Rx Reorder Drop case \n")); - ReturnRFDList(Adapter, pCurRfd); - pRfdReturnOK[rfd_index] = TRUE; - continue; - } - - if( !N6ReceiveIndicateFilter(Adapter, pCurRfd) || - N6SDIO_CANNOT_RX(Adapter) ) - { - ReturnRFDList(Adapter, pCurRfd); - pRfdReturnOK[rfd_index] = TRUE; - continue; - } - -#if RX_TCP_SEQ_CHECK - RxTcpSeqCheck(Adapter, pCurRfd); -#endif - - if(pCurRfd->nTotalSubframe > 0) - { - // Check if the resource is clear ----------------------------------- - RT_ASSERT(ResourceMointor == 0, ("Error: Resource is Not Clear!\n")); - // ------------------------------------------------------------ - - // By Lanhsin. Copy subframe of AMSDU into one contineous buffer before - // indication. Otherwise, F-Secure anti-virus program cannot accept a - // packet with more than one buffer. 2008.07.10 (Vista only) - - for(subframe_index = 0; subframe_index < pCurRfd->nTotalSubframe; subframe_index++, packet_index++,subframe_hdr_idx++) - { - - - Adapter->AmsduIndex = Adapter->AmsduIndex % Adapter->MAX_SUBFRAME_TOTAL_COUNT; - - PlatformMoveMemory(Adapter->pAMSDU[Adapter->AmsduIndex].VirtualAddress, - pCurRfd->Buffer.VirtualAddress + pCurRfd->FragOffset, - sMacHdrLng); - - PlatformMoveMemory((Adapter->pAMSDU[Adapter->AmsduIndex].VirtualAddress + 24), pCurRfd->SubframeArray[subframe_index], - pCurRfd->SubframeLenArray[subframe_index]); - - - // Allocate MDL of 802.11 header. We use the same header for all AMSDU - // subframe. Sequence number are the same for all sub packet. - // The first MDL must contain 802.11 header and LLC. - pMdl = NdisAllocateMdl( N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), (PVOID)Adapter->pAMSDU[Adapter->AmsduIndex].VirtualAddress, - sMacHdrLng+pCurRfd->SubframeLenArray[subframe_index]); - - if (pMdl == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate MDL\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_MDL; - } - - // - // Allocate NetBufferList for receive indication, 2006.10.04, by shien chang. - // - pNetBufferList = NdisAllocateNetBufferAndNetBufferList( - N6_GET_RX_NBL_POOL(Adapter), // PoolHandle - 0, // ContextSize - 0, // ContextBackFill - pMdl, // MdlChain - 0, // DataOffset - pCurRfd->SubframeLenArray[subframe_index]+sMacHdrLng); //DataLength - - if (pNetBufferList == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate NetBufferList\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_NBL; - } - - // - // Now prepare necessary information such as SourceHandle, OOB data for indication. - // - pNetBufferList->SourceHandle = N6SDIO_GET_MINIPORT_HANDLE(Adapter); - - // Filling information in NetBufferList. - if(FillN6NBLInfo(Adapter, pNetBufferList, pCurRfd) == FALSE) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to set information to NetBufferList\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_INFO; - } - - if(pFirstNetBufferList == NULL) - { - pFirstNetBufferList = pLastNetBufferList = pNetBufferList; - } - else - { - NET_BUFFER_LIST_NEXT_NBL(pLastNetBufferList) = pNetBufferList; - pLastNetBufferList = pNetBufferList; - } - - if(subframe_index == pCurRfd->nTotalSubframe - 1) - { - // The RFD will be indicated to the OS and returned ---------- - MP_SET_PACKET_RFD(pNetBufferList, pCurRfd); - pRfdReturnOK[rfd_index] = TRUE; - // --------------------------------------------------- - } - else - { - MP_SET_PACKET_RFD(pNetBufferList, NULL); - } - - - // Clean the Resource Mointor ---------- - ResourceMointor = 0; - // --------------------------------- - - Adapter->AmsduIndex++; - - } - } - else - { - // Check if the resource is clear ----------------------------------- - RT_ASSERT(ResourceMointor == 0, ("Error: Resource is Not Clear!\n")); - // ------------------------------------------------------------ - - pMdl = NULL; - pTmpRfd = pCurRfd; - - // - // Allocate MDLChain. 2006.10.04, by shien chang. - // - do{ - if (pMdl == NULL) - { - pMdl = NdisAllocateMdl( - N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pCurRfd->Buffer.VirtualAddress+pCurRfd->FragOffset), - pCurRfd->FragLength); - pCurrMdl = pMdl; - } - else - { - NDIS_MDL_LINKAGE(pCurrMdl) = NdisAllocateMdl( - N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pTmpRfd->Buffer.VirtualAddress+pTmpRfd->FragOffset), - pTmpRfd->FragLength); - pCurrMdl = NDIS_MDL_LINKAGE(pCurrMdl); - - } - - if (pCurrMdl == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate MDL\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_MDL; - } - - pTmpRfd=pTmpRfd->NextRfd; - }while(pTmpRfd); - - // - // Allocate NetBufferList for receive indication, 2006.10.04, by shien chang. - // - pNetBufferList = NdisAllocateNetBufferAndNetBufferList( - N6_GET_RX_NBL_POOL(Adapter), // PoolHandle - 0, // ContextSize - 0, // ContextBackFill - pMdl, // MdlChain - 0, // DataOffset - pCurRfd->PacketLength); //DataLength - if (pNetBufferList == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate NetBufferList\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_NBL; - } - - // - // Now prepare necessary information such as SourceHandle, OOB data for indication. - // - pNetBufferList->SourceHandle = N6SDIO_GET_MINIPORT_HANDLE(Adapter); - - // Filling information in NetBufferList. - if(FillN6NBLInfo(Adapter, pNetBufferList, pCurRfd) == FALSE) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to set information to NetBufferList\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_INFO; - } - - if(pFirstNetBufferList == NULL) - { - pFirstNetBufferList = pLastNetBufferList = pNetBufferList; - } - else - { - NET_BUFFER_LIST_NEXT_NBL(pLastNetBufferList) = pNetBufferList; - pLastNetBufferList = pNetBufferList; - } - - // The RFD will be indicated to the OS and returned ------- - MP_SET_PACKET_RFD(pNetBufferList, pCurRfd); - pRfdReturnOK[rfd_index] = TRUE; - // ------------------------------------------------ - - packet_index++; - - // Clean the Resource Mointor --------- - ResourceMointor = 0; - // --------------------------------- - } - - if( OS_SUPPORT_WDI(Adapter) ) - { - // PeerId is 1-based, 0 use to represent failure - PeerId = WDI_InsertDataInQueue(Adapter, pCurRfd, pFirstNetBufferList); - - if( PeerId != 0 ) - bDataInQueue[PeerId - 1] = TRUE; - else - WDI_FreeRxFrame(Adapter, pFirstNetBufferList); - - pFirstNetBufferList = NULL; - } - } - -POST_PROCESS: - - // Free information for NBL - if( ResourceMointor & RESOURCE_INFO ) - { - FreeN6NBLInfo(Adapter, pNetBufferList); - } - - // Free MDL allocated before. - if(ResourceMointor & RESOURCE_MDL) - { - for (pCurrMdl = pMdl; pCurrMdl != NULL; pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - } - - // Free NBL allocated before - if(ResourceMointor & RESOURCE_NBL) - { - NdisFreeNetBufferList(pNetBufferList); - } - - // Check if we shall reserve current Rfd since some parts of pCurRFD will be indicated to OS - if(pCurRfd!= NULL && pCurRfd->nTotalSubframe != 0 && subframe_index != 0) - { - MP_SET_PACKET_RFD(pLastNetBufferList, pCurRfd); - pRfdReturnOK[rfd_index] = TRUE; - - // Allocate MDL/NBL/NBLInfo during parsing sub frames. - if( OS_SUPPORT_WDI(Adapter) ) - { - // PeerId is 1-based, 0 use to represent failure - PeerId = WDI_InsertDataInQueue(Adapter, pCurRfd, pFirstNetBufferList); - - if( PeerId != 0 ) - bDataInQueue[PeerId - 1] = TRUE; - else - WDI_FreeRxFrame(Adapter, pFirstNetBufferList); - - pFirstNetBufferList = NULL; - } - } - - // Indicate as much packets as we can. - if(packet_index != 0) - { - RT_ASSERT(IS_RX_LOCKED(Adapter) == TRUE, ("DrvIFIndicatePacket(): bRxLocked should be TRUE\n")); - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_INC_N_RCV_REF(GetDefaultAdapter(Adapter), packet_index); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - if( OS_SUPPORT_WDI(Adapter) ) - { - for(index = 0; index < MAX_PEER_NUM; index++) - { - if( bDataInQueue[index] == TRUE ) - { - //Rx notify thread will check all queue, so we only set event one time. - PlatformReleaseSemaphore(&(pDefaultAdapter->pNdisCommon->RxNotifySemaphore)); - break; - } - } - } - else - { - RecvFlags = NDIS_CURRENT_IRQL()?NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL:0; - // Prefast warning 6011: Dereferencing NULL pointer 'Adapter->pNdis62Common'. - if (Adapter->pNdis62Common != NULL) - { - NdisMIndicateReceiveNetBufferLists( - Adapter->pNdisCommon->hNdisAdapter, - pFirstNetBufferList, - GET_PORT_NUMBER(Adapter), - packet_index, - RecvFlags); - } - } - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - } - - // Return the remaining non-processed RFDs -------------- - for(rfd_index = 0; rfd_index < Num; rfd_index++) - { - if(pRfdReturnOK[rfd_index] == FALSE) - { - ReturnRFDList(Adapter, pRfd_array[rfd_index]); - } - } - // ------------------------------------------------- - - // Return the allocated memory ---------------------- - ReturnGenTempBuffer(Adapter, pGenTempBuffer); - // ---------------------------------------------- -} - -VOID -DrvIFIndicateMultiplePackets( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE usbdevice; - NDIS_HANDLE NBLPoolHandle; - PMDL pMdl = NULL; - PNET_BUFFER_LIST pNetBufferList = NULL; - PNET_BUFFER_LIST pLastNetBufferList = NULL; - PNET_BUFFER_LIST pFirstNetBufferList = NULL; - u1Byte index; - pu1Byte pHeader; - // For WDI architecture --------------------- - u4Byte PeerId = 0; - // --------------------------------------- - - usbdevice = &Adapter->NdisSdioDev; - NBLPoolHandle = usbdevice->RxNetBufferListPool; - - // TODO: For A-MSDU in AP mode, we shall check each subframe for filtering!! - if( !N6ReceiveIndicateFilter(Adapter, pRfd) || - N6SDIO_CANNOT_RX(Adapter) ) - { - ReturnRFDList(Adapter, pRfd); - return; - } - -#if RX_TCP_SEQ_CHECK - RxTcpSeqCheck(Adapter, pRfd); -#endif - - for(index = 0; index < pRfd->nTotalSubframe; index++) - { - /*if (index > N6_MAX_AMSDU_SUBF_NUM) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, (">AMSDU Max Subframe\n\r")); - index = N6_MAX_AMSDU_SUBF_NUM; - break; - }*/ - - pHeader = &pMgntInfo->header[index][0]; - PlatformMoveMemory(pHeader, - pRfd->Buffer.VirtualAddress + pRfd->FragOffset, - sMacHdrLng); - PlatformMoveMemory((pHeader + sMacHdrLng), pRfd->SubframeArray[index], - N6_LLC_SIZE); - #if (N6_PSDUDO_SEQ_NUM == 1) - // Increase 802.11 header sequence number of every AMSDU sub frame - Pseudo_Seq_Num+=16; - SET_80211_HDR_SEQUENCE(pHeader, Pseudo_Seq_Num); - if (Pseudo_Seq_Num == (16*4000)) - Pseudo_Seq_Num = 0; - #endif - - // - // Prevent unexpected MDL length requirement, which might cause system - // using improper addresses, added by Roger, 2010.05.26. - // - if(pRfd->SubframeLenArray[index] <= N6_LLC_SIZE) - { - RT_ASSERT(FALSE, ("A-MSDU Subframe length is too small, drop it!!\n")); - status = NDIS_STATUS_FAILURE; - break; - } - - // Allocate MDL of 802.11 header. We use the same header for all AMSDU - // subframe. Sequence number are the same for all sub packet. - // The first MDL must contain 802.11 header and LLC. - pMdl = NdisAllocateMdl( N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), (PVOID)(pHeader), - sMacHdrLng+N6_LLC_SIZE); - - // - // Allocate MDLChain. We must filter the header of AMSDU subframe - // - NDIS_MDL_LINKAGE(pMdl) - = NdisAllocateMdl( N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pRfd->SubframeArray[index]+N6_LLC_SIZE), - pRfd->SubframeLenArray[index]-N6_LLC_SIZE); - - // AMSDU debug log 24 bytes header and sub-frame data info - //PlatformMoveMemory(&nheader[index][0], pHeader, sMacHdrLng); - //PlatformMoveMemory(&llcheader[index][0], pRfd->SubframeArray[index], sMacHdrLng); - - if (pMdl == NULL || NDIS_MDL_LINKAGE(pMdl) == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate MDL\n")); - status = NDIS_STATUS_FAILURE; - break; - } - - // - // Allocate NetBufferList for receive indication, 2006.10.04, by shien chang. - // - pNetBufferList = NdisAllocateNetBufferAndNetBufferList( - N6_GET_RX_NBL_POOL(Adapter), // PoolHandle - 0, // ContextSize - 0, // ContextBackFill - pMdl, // MdlChain - 0, // DataOffset - pRfd->SubframeLenArray[index]+sMacHdrLng); //DataLength - - if (pNetBufferList == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate NetBufferList\n")); - status = NDIS_STATUS_FAILURE; - break; - } - - // - // Now prepare necessary information such as SourceHandle, OOB data for indication. - // - pNetBufferList->SourceHandle = Adapter->pNdisCommon->hNdisAdapter; - - // Filling information in NetBufferList. - if(FillN6NBLInfo(Adapter, pNetBufferList, pRfd) == FALSE) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to set information to NetBufferList\n")); - - status = NDIS_STATUS_FAILURE; - break; - } - - if(index == 0) - { - pFirstNetBufferList = pLastNetBufferList = pNetBufferList; - } - else - { - NET_BUFFER_LIST_NEXT_NBL(pLastNetBufferList) = pNetBufferList; - pLastNetBufferList = pNetBufferList; - } - - MP_SET_PACKET_RFD(pNetBufferList, NULL); - } // for(index = 0; index < pRfd->nTotalSubframe; index++) - - if (index != 0) - { - RT_ASSERT(Adapter->bRxLocked == TRUE, ("DrvIFIndicateMultiplePackets(): bRxLocked should be TRUE\n")); - - MP_SET_PACKET_RFD(pLastNetBufferList, pRfd); - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_INC_N_RCV_REF(GetDefaultAdapter(Adapter), index); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - - if( OS_SUPPORT_WDI(Adapter) ) - { - // PeerId is 1-based, 0 use to represent failure - PeerId = WDI_InsertDataInQueue(Adapter, pRfd, pFirstNetBufferList); - - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - if( PeerId != 0 ) - { - PlatformReleaseSemaphore(&(pDefaultAdapter->pNdisCommon->RxNotifySemaphore)); - } - else - { - WDI_FreeRxFrame(Adapter, pFirstNetBufferList); - } - } - else - { - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - NdisMIndicateReceiveNetBufferLists( - Adapter->pNdisCommon->hNdisAdapter, - pFirstNetBufferList, - GET_PORT_NUMBER(Adapter), - index, - 0); - } - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - } - else - { - ReturnRFDList(Adapter, pRfd); - } - - if (status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("DrvIFIndicateMultiplePackets(): failed to allocate resource! status: %d\n", status)); - - FreeN6NBLInfo(Adapter, pNetBufferList); - - if(pMdl != NULL && NDIS_MDL_LINKAGE(pMdl) != NULL) - NdisFreeMdl(NDIS_MDL_LINKAGE(pMdl)); - - if(pMdl != NULL) - NdisFreeMdl(pMdl); - - if(pNetBufferList != NULL) - NdisFreeNetBufferList(pNetBufferList); - } - -} - -VOID -DrvIFIndicatePacket( - PADAPTER Adapter, - PRT_RFD pRfd - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE sdiodevice; - NDIS_HANDLE NBLPoolHandle; - PMDL pMdl = NULL; - PMDL pCurrMdl = NULL, pNextMdl = NULL; - PNET_BUFFER_LIST pNetBufferList = NULL; - PNET_BUFFER_LIST pNetBufferListToFree = NULL; - PRT_RFD pTmpRfd = pRfd; - ULONG ReceiveFlags = 0; - // For WDI architecture --------------------- - u4Byte PeerId = 0; - // --------------------------------------- - - //RTL8187_TODO - sdiodevice = &Adapter->NdisSdioDev; - NBLPoolHandle = sdiodevice->RxNetBufferListPool; - - if(pRfd->nTotalSubframe >= 1) - { - DrvIFIndicateMultiplePackets(Adapter, pRfd); - return; - } - - if( !N6ReceiveIndicateFilter(Adapter, pRfd) || - N6SDIO_CANNOT_RX(Adapter) ) - { - ReturnRFDList(Adapter, pRfd); - return; - } - - if(pMgntInfo->bSupportPacketCoalescing) - { - GPGetParseRFDInfo(Adapter , pRfd , &(pRfd->D0FilterCoalPktInfo)); - - if(N6ReceiveCoalescingFilter(Adapter, pRfd)) - { - RT_TRACE(COMP_TEST, DBG_LOUD , ("=====> N6ReceiveCoalescingFilter(True)\n") ); - return; - } - } - -#if RX_TCP_SEQ_CHECK - RxTcpSeqCheck(Adapter, pRfd); -#endif - - do{ - // - // Allocate MDLChain. 2006.10.04, by shien chang. - // - do{ - if (pMdl == NULL) - { - pMdl = NdisAllocateMdl( - N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pTmpRfd->Buffer.VirtualAddress+pTmpRfd->FragOffset), - pTmpRfd->FragLength); - pCurrMdl = pMdl; - } - else - { - NDIS_MDL_LINKAGE(pCurrMdl) = NdisAllocateMdl( - N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pTmpRfd->Buffer.VirtualAddress+pTmpRfd->FragOffset), - pTmpRfd->FragLength); - pCurrMdl = NDIS_MDL_LINKAGE(pCurrMdl); - } - - if (pCurrMdl == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate MDL\n")); - - status = NDIS_STATUS_FAILURE; - break; - } - - pTmpRfd=pTmpRfd->NextRfd; - }while(pTmpRfd); - - if (status != NDIS_STATUS_SUCCESS) - { - for (pCurrMdl = pMdl; - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - break; - } - - // - // Allocate NetBufferList for receive indication, 2006.10.04, by shien chang. - // - pNetBufferList = NdisAllocateNetBufferAndNetBufferList( - N6_GET_RX_NBL_POOL(Adapter), // PoolHandle - 0, // ContextSize - 0, // ContextBackFill - pMdl, // MdlChain - 0, // DataOffset - pRfd->PacketLength); //DataLength - if (pNetBufferList == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate NetBufferList\n")); - - // - // Free MDL allocated before. - // - for (pCurrMdl = pMdl; - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - - status = NDIS_STATUS_FAILURE; - break; - } - - // - // Now prepare necessary information such as SourceHandle, OOB data for indication. - // - pNetBufferList->SourceHandle = N6SDIO_GET_MINIPORT_HANDLE(Adapter); - - if( FillN6NBLInfo(Adapter, pNetBufferList, pRfd) == FALSE ) - { - // - // Free MDL allocated before. - // - for (pCurrMdl = pMdl; - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - - NdisFreeNetBufferList(pNetBufferList); - - status = NDIS_STATUS_FAILURE; - break; - } - - MP_SET_PACKET_RFD(pNetBufferList, pRfd); - }while(FALSE); - - - if(status==NDIS_STATUS_SUCCESS) - { - RT_ASSERT(IS_RX_LOCKED(Adapter) == TRUE, ("DrvIFIndicatePacket(): bRxLocked should be TRUE\n")); - - // - // Set the status on the packet, either resources or success. - // We must do tell OS if we are out of Rx resource, - // otherwise, in some condition: - // example 1: HCT 12.1 2c_PerformanceBlast). - // example 2: too many fragments received. - // we might stop to receive packets. 2005.12.09, by rcnjko. - // - if((*GET_NUM_IDLE_RFD(Adapter) + *GET_NUM_BUSY_RFD(Adapter,RX_MPDU_QUEUE)) > 0) - { - ReceiveFlags = 0; - } - else - { // We don't have enough RFD now. - ReceiveFlags = NDIS_RECEIVE_FLAGS_RESOURCES; - pNetBufferListToFree = pNetBufferList; - } - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_INC_RCV_REF(GetDefaultAdapter(Adapter)); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - - if( OS_SUPPORT_WDI(Adapter) ) - { - // PeerId is 1-based, 0 use to represent failure - PeerId = WDI_InsertDataInQueue(Adapter, pRfd, pNetBufferList); - - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - if( PeerId != 0 ) - { - PlatformReleaseSemaphore(&(pDefaultAdapter->pNdisCommon->RxNotifySemaphore)); - } - else - pNetBufferListToFree = pNetBufferList; - } - else - { - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - // Prefast warning C6011: Dereferencing NULL pointer 'Adapter->pNdis62Common'. - if (Adapter->pNdis62Common != NULL) - { - NdisMIndicateReceiveNetBufferLists( - N6SDIO_GET_MINIPORT_HANDLE(Adapter), - pNetBufferList, - GET_PORT_NUMBER(Adapter), - 1, - ReceiveFlags); - } - } - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - // - // 2005.12.09, by rcnjko. - // If we had claimed pPacketToFree is NDIS_STATUS_RESOURCES, - // we are free to access the it after NdisMIndicateReceivePacket() and - // MiniportReturnPacket() won't be called. - // So, we shall release the NDIS_PACKET pPacketToFree and associated NDIS_BUFFER and - // then reuse the RFD if we had claimed pPacketToFree is NDIS_STATUS_RESOURCES. - // - // It is time consuming to allocate NDIS_PACKEAT and NDIS_BUFFER dynamically. - // - if(pNetBufferListToFree != NULL) - { - pTmpRfd = MP_GET_PACKET_RFD(pNetBufferListToFree); - - FreeN6NBLInfo(Adapter, pNetBufferListToFree); - - for (pCurrMdl = NET_BUFFER_FIRST_MDL( NET_BUFFER_LIST_FIRST_NB(pNetBufferListToFree) ); - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - - NdisFreeNetBufferList(pNetBufferListToFree); - - ReturnRFDList(Adapter, pTmpRfd); - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_DEC_RCV_REF(GetDefaultAdapter(Adapter)); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - } - } - else - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("DrvIFIndicatePacket(): failed to allocate resource! status: %d\n", status)); - ReturnRFDList(Adapter, pRfd); - } -} - -VOID -DrvIFD0RxIndicatePackets( - PADAPTER Adapter, - PRT_RFD *pRfd_array, - u2Byte Num - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE usbdevice; - NDIS_HANDLE NBLPoolHandle; - PMDL pMdl = NULL; - PMDL pCurrMdl = NULL, pNextMdl = NULL; - PNET_BUFFER_LIST pNetBufferList = NULL; - PNET_BUFFER_LIST pLastNetBufferList = NULL; - PNET_BUFFER_LIST pFirstNetBufferList = NULL; - PRT_RFD pTmpRfd = NULL; - ULONG RecvFlags = 0; - - u2Byte rfd_index = 0; - u2Byte packet_index = 0; - PRT_RFD pCurRfd = NULL; - - - // Indicate if the RFD is returned or will be indicated to OS --- - pu1Byte pRfdReturnOK = NULL; - PRT_GEN_TEMP_BUFFER pGenTempBuffer = NULL; - // -------------------------------------------------- - - // Resource Management -------------------- - u4Byte ResourceMointor = 0; - const u4Byte RESOURCE_MDL = BIT1; - const u4Byte RESOURCE_NBL = BIT2; - const u4Byte RESOURCE_INFO = BIT3; - // --------------------------------------- - - // For WDI architecture --------------------- - u4Byte PeerId; - BOOLEAN bDataInQueue[MAX_PEER_NUM] = {0}; - u2Byte index = 0; - // --------------------------------------- - - if(Num==0 || pRfd_array==NULL) - return; - - // Check if the RFD is returned or indicated to the OS ------ - pGenTempBuffer = GetGenTempBuffer(Adapter, Num); - pRfdReturnOK = pGenTempBuffer->Buffer.Ptr; - PlatformZeroMemory(pRfdReturnOK, Num); - // ------------------------------------------------- - - usbdevice = &Adapter->NdisSdioDev; - NBLPoolHandle = usbdevice->RxNetBufferListPool; - - for(rfd_index = 0; rfd_index < Num; rfd_index++) - { - pCurRfd = pRfd_array[rfd_index]; - - - // Check if the resource is clear ----------------------------------- - RT_ASSERT(ResourceMointor == 0, ("Error: Resource is Not Clear!\n")); - // ------------------------------------------------------------ - - pMdl = NULL; - pTmpRfd = pCurRfd; - - // - // Allocate MDLChain. 2006.10.04, by shien chang. - // - do{ - if (pMdl == NULL) - { - pMdl = NdisAllocateMdl( - N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pCurRfd->Buffer.VirtualAddress+pCurRfd->FragOffset), - pCurRfd->FragLength); - pCurrMdl = pMdl; - } - else - { - NDIS_MDL_LINKAGE(pCurrMdl) = NdisAllocateMdl( - N6SDIO_GET_MINIPORT_HANDLE(GetDefaultAdapter(Adapter)), - (PVOID)(pTmpRfd->Buffer.VirtualAddress+pTmpRfd->FragOffset), - pTmpRfd->FragLength); - pCurrMdl = NDIS_MDL_LINKAGE(pCurrMdl); - - } - - if (pCurrMdl == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate MDL\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_MDL; - } - - pTmpRfd=pTmpRfd->NextRfd; - }while(pTmpRfd); - - // - // Allocate NetBufferList for receive indication, 2006.10.04, by shien chang. - // - pNetBufferList = NdisAllocateNetBufferAndNetBufferList( - N6_GET_RX_NBL_POOL(Adapter), // PoolHandle - 0, // ContextSize - 0, // ContextBackFill - pMdl, // MdlChain - 0, // DataOffset - pCurRfd->PacketLength); //DataLength - if (pNetBufferList == NULL) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to allocate NetBufferList\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_NBL; - } - - // - // Now prepare necessary information such as SourceHandle, OOB data for indication. - // - pNetBufferList->SourceHandle = N6SDIO_GET_MINIPORT_HANDLE(Adapter); - - // Filling information in NetBufferList. - if(FillN6NBLInfo(Adapter, pNetBufferList, pCurRfd) == FALSE) - { - RT_TRACE(COMP_RECV, DBG_SERIOUS, ("Failed to set information to NetBufferList\n")); - goto POST_PROCESS; - } - else - { - ResourceMointor |= RESOURCE_INFO; - } - - if(pFirstNetBufferList == NULL) - { - pFirstNetBufferList = pLastNetBufferList = pNetBufferList; - } - else - { - NET_BUFFER_LIST_NEXT_NBL(pLastNetBufferList) = pNetBufferList; - pLastNetBufferList = pNetBufferList; - } - - // The RFD will be indicated to the OS and returned ------- - MP_SET_PACKET_RFD(pNetBufferList, pCurRfd); - pRfdReturnOK[rfd_index] = TRUE; - // ------------------------------------------------ - - packet_index++; - - // Clean the Resource Mointor --------- - ResourceMointor = 0; - // --------------------------------- - - if( OS_SUPPORT_WDI(Adapter) ) - { - // PeerId is 1-based, 0 use to represent failure - PeerId = WDI_InsertDataInQueue(Adapter, pCurRfd, pFirstNetBufferList); - - if( PeerId != 0 ) - bDataInQueue[PeerId - 1] = TRUE; - else - WDI_FreeRxFrame(Adapter, pFirstNetBufferList); - - pFirstNetBufferList = NULL; - } - } -POST_PROCESS: - - // Free information for NBL - if( ResourceMointor & RESOURCE_INFO ) - { - FreeN6NBLInfo(Adapter, pNetBufferList); - } - - // Free MDL allocated before. - if(ResourceMointor & RESOURCE_MDL) - { - for (pCurrMdl = pMdl; pCurrMdl != NULL; pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - } - - // Free NBL allocated before - if(ResourceMointor & RESOURCE_NBL) - { - NdisFreeNetBufferList(pNetBufferList); - } - - // Indicate as much packets as we can. - if(packet_index != 0) - { - RT_ASSERT(IS_RX_LOCKED(Adapter) == TRUE, ("DrvIFIndicatePacket(): bRxLocked should be TRUE\n")); - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_INC_N_RCV_REF(GetDefaultAdapter(Adapter), packet_index); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - if( OS_SUPPORT_WDI(Adapter) ) - { - for(index = 0; index < MAX_PEER_NUM; index++) - { - if( bDataInQueue[index] == TRUE ) - { - //Rx notify thread will check all queue, so we only set event one time. - PlatformReleaseSemaphore(&(pDefaultAdapter->pNdisCommon->RxNotifySemaphore)); - break; - } - } - } - else - { - RecvFlags = NDIS_CURRENT_IRQL()?NDIS_RECEIVE_FLAGS_DISPATCH_LEVEL:0; - // Prefast warning C6011: Dereferencing NULL pointer 'Adapter->pNdis62Common'. - if (Adapter->pNdis62Common != NULL) - { - NdisMIndicateReceiveNetBufferLists( - Adapter->pNdisCommon->hNdisAdapter, - pFirstNetBufferList, - GET_PORT_NUMBER(Adapter), - packet_index, - RecvFlags - ); - } - } - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - } - - - // Return the remaining non-processed RFDs -------------- - for(rfd_index = 0; rfd_index < Num; rfd_index++) - { - if(pRfdReturnOK[rfd_index] == FALSE) - { - ReturnRFDList(Adapter, pRfd_array[rfd_index]); - } - } - // ------------------------------------------------- - - // Return the allocated memory ---------------------- - ReturnGenTempBuffer(Adapter, pGenTempBuffer); - // ---------------------------------------------- - - FunctionOut(COMP_RECV); - return; -} - -VOID -DrvIFCompletePacket( - PADAPTER Adapter, - PRT_TCB pTcb, - RT_STATUS status - ) -{ - PRT_SDIO_DEVICE device = &(Adapter->NdisSdioDev); - PNET_BUFFER_LIST pNBL = (PNET_BUFFER_LIST)(pTcb->Reserved); - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - - if(!OS_SUPPORT_WDI(Adapter)) - { - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // - // For pending NBL issue. - // - RT_ASSERT(GetDefaultAdapter(Adapter)->MgntInfo.OutstandingNdisPackets > 0, - ("DrvIFCompletePacket(): OutstandingNdisPackets not greater than 0.\n")); - - if (pNBL != NULL && RT_NBL_GET_REF_CNT(pNBL) != 0) - { - RT_NBL_DECREASE_REF_CNT(pNBL); - - if (RT_NBL_GET_REF_CNT(pNBL) == 0) - { - GetDefaultAdapter(Adapter)->MgntInfo.OutstandingNdisPackets--; - GetDefaultAdapter(Adapter)->MgntInfo.CompleteFlag = 0; - for(pCurrNetBufferList = pNBL; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_STATUS(pCurrNetBufferList) = NDIS_STATUS_SUCCESS; - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - NdisMSendNetBufferListsComplete( - device->hNdisAdapter, - pNBL, - ((NDIS_CURRENT_IRQL()==DISPATCH_LEVEL) ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0)); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - pTcb->Reserved = NULL; - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - else - { - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - if (pNBL != NULL && RT_WDI_NBL_GET_REF_CNT(pNBL) != 0) - { - RT_WDI_NBL_DECREASE_REF_CNT(pNBL); - - if (RT_WDI_NBL_GET_REF_CNT(pNBL) == 0) - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - WDI_CompletePacket(Adapter, pNBL); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - pTcb->Reserved = NULL; - } - } - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } -} - -VOID -DrvIFIndicateScanStart( - PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("==> DrvIFIndicateScanStart()\n")); - - if (pNdisCommon->bToIndicateScanComplete == FALSE) - { - pNdisCommon->bToIndicateScanComplete = TRUE; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<== DrvIFIndicateScanStart()\n")); -} - -VOID -DrvIFIndicateScanComplete( - PADAPTER Adapter, - RT_STATUS status - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("==> DrvIFIndicateScanComplete(): status = 0x%x\n", status)); - - // - // In NDIS6, we need tell the upper layer driver that scan operation - // is completed. - // - if (pNdisCommon->bToIndicateScanComplete) - { - RT_TRACE(COMP_INDIC, DBG_LOUD, ("Indicate a scan complete event.\n")); - N6IndicateScanComplete(Adapter, status); - - if( pMgntInfo->bCheckScanTime == TRUE ) - pMgntInfo->bCheckScanTime = FALSE; - - pNdisCommon->bToIndicateScanComplete = FALSE; - } - - RT_TRACE(COMP_SCAN, DBG_LOUD, ("<== DrvIFIndicateScanComplete()\n")); -} - -VOID -DrvIFIndicateConnectionStart( - PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateConnectionStart()\n")); - - // - // In NDIS6, we need to indicate the upper layer driver in starting connection. - // - N6PushIndicateStateMachine(Adapter, N6_STATE_CONNECT_START, 0); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateConnectionStart()\n")); -} - -VOID -DrvIFIndicateConnectionComplete( - PADAPTER Adapter, - RT_STATUS status - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateConnectionComplete(): status = %d\n", status)); - - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateConnectionComplete(Adapter, status); - } - - // In NDIS6, we need to indicate the upper layer driver when a connection request completed. - N6PushIndicateStateMachine(Adapter, N6_STATE_CONNECT_COMPLETE, status); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateConnectionComplete()\n")); -} - -VOID -DrvIFIndicateAssociationStart( - PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateAssociationStart()\n")); - - // In NDIS6, we need indicate the upper layer driver when association is starting. - N6PushIndicateStateMachine(Adapter, N6_STATE_ASOC_START, 0); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateAssociationStart()\n")); -} - -VOID -DrvIFIndicateAssociationComplete( - PADAPTER Adapter, - RT_STATUS status - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateAssociationComplete()\n")); - - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateAssociationComplete(Adapter, status); - } - - // In NDIS6, we need indicate the upper layer driver when association request is completed. - N6PushIndicateStateMachine(Adapter, N6_STATE_ASOC_COMPLETE, status); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateAssociationComplete()\n")); -} - -VOID -DrvIFIndicateDisassociation( - PADAPTER Adapter, - u2Byte reason, - pu1Byte pAddr -) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateDisassociation()\n")); - - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateDisassociation(Adapter, reason, pAddr); - } - - pMgntInfo->DisconnectCount++; - N6PushIndicateStateMachine(Adapter, N6_STATE_DISASOC, reason); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateDisassociation()\n")); -} - -VOID -DrvIFIndicateRoamingStart( - PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateRoamingStart()\n")); - - N6PushIndicateStateMachine(Adapter, N6_STATE_ROAM_START, 0); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateRoamingStart()\n")); -} - -VOID -DrvIFIndicateRoamingComplete( - PADAPTER Adapter, - RT_STATUS status - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo=&Adapter->MgntInfo; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateRoamingComplete()\n")); - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateRoamingComplete(Adapter); - } - //for UniWill Roaming case by Maddest, 070823 - pMgntInfo->JoinRetryCount=0; - //pMgntInfo->LinkRetryforRoaming=0; - pMgntInfo->RoamingCount++; - N6PushIndicateStateMachine(Adapter, N6_STATE_ROAM_COMPLETE, status); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateRoamingComplete()\n")); -} - -VOID -DrvIFIndicateCurrentPhyStatus( - PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pExtNdisCommon = NULL; - PADAPTER pAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pDefaultMgntInfo = &pAdapter->MgntInfo; - PMGNT_INFO pExtMgntInfo; - PRT_NDIS6_COMMON pDefaultNdisCommon = pAdapter->pNdisCommon; - u1Byte i; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateCurrentPhyStatus()\n")); - - if(OS_SUPPORT_WDI(Adapter)) - { - WDI_IndicateCurrentPhyStatus(Adapter); - } - - // - // Ndis6 can assign multiple phy IDs to one NIC for each phy, thus we should indicate the state for each phy ID. - // By Bruce, 2009-02-20 - // - while(pAdapter != NULL) - { - pExtNdisCommon = pAdapter->pNdisCommon; - pExtMgntInfo = &pAdapter->MgntInfo; - pExtMgntInfo->eSwRfPowerState = pDefaultMgntInfo->eSwRfPowerState; - pExtMgntInfo->RfOffReason = pDefaultMgntInfo->RfOffReason; - - pExtNdisCommon->eRfPowerStateToSet = pDefaultNdisCommon->eRfPowerStateToSet; - - // If the uPhyId member is set to DOT11_PHY_ID_ANY, the NDIS_STATUS_DOT11_PHY_STATE_CHANGED - // indication applies to all PHYs in the msDot11SupportedPhyTypes MIB object. - N6IndicateCurrentPhyPowerState(pAdapter, DOT11_PHY_ID_ANY); - - pAdapter = GetNextExtAdapter(pAdapter); - } - - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateCurrentPhyStatus()\n")); - -} - -VOID -DrvIFIndicateIncommingAssociationStart( - PADAPTER Adapter - ) -{ - if(OS_SUPPORT_WDI(Adapter)) - { - // -} - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateIncommingAssociationStart()\n")); - N6PushIndicateStateMachine(Adapter, RT_STA_STATE_AP_INCOMING_ASOC_STARTED, 0); - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateIncommingAssociationStart()\n")); - } -} - -VOID -DrvIFIndicateIncommingAssociationComplete( - PADAPTER Adapter, - u2Byte status - ) -{ - if(OS_SUPPORT_WDI(Adapter)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("Indicate association rsp sent with status = 0x%X, association rsp len: %u\n", status, Adapter->MgntInfo.pCurrentSta->AP_SendAsocRespLength)); - if(Adapter->MgntInfo.pCurrentSta->AP_SendAsocRespLength) - {// Indicate task completion event only if we have sent an association response - WdiExt_IndicateApAssocRspSent(Adapter, status); - } -} - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateIncommingAssociationComplete()\n")); - N6PushIndicateStateMachine(Adapter, RT_STA_STATE_AP_INCOMING_ASOC_COMPLETE, status); - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateIncommingAssociationComplete()\n")); - } -} - -VOID -DrvIFIndicateIncommingAssocReqRecv( - PADAPTER Adapter - ) -{ - - if(OS_SUPPORT_WDI(Adapter)) - { - RT_WLAN_STA *sta = Adapter->MgntInfo.pCurrentSta; - - WdiExt_IndicateApAssocReqReceived( - Adapter, - sta->AP_RecvAsocReqLength, - sta->AP_RecvAsocReq); -} - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateIncommingAssocReqRecv()\n")); - N6PushIndicateStateMachine(Adapter, RT_STA_STATE_AP_INCOMING_ASOC_REQ_RECVD, 0); - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateIncommingAssocReqRecv()\n")); - } -} - -VOID -DrvIFDeleteDatapathPeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr - ) -{ - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFDeleteDatapathPeer()\n")); - - WDI_DeleteDatapathPeer(pAdapter, pAddr); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFDeleteDatapathPeer()\n")); -} - -VOID -DrvIFCheckTxCredit( - PADAPTER pAdapter - ) -{ - WDI_TxCreditCheck(pAdapter); -} - -VOID -DrvIFIndicateDataInQueue( - IN PADAPTER pAdapter, - IN u1Byte ExTid, - IN u2Byte PeerId, - IN RT_RX_INDICATION_LEVEL level - ) -{ - WDI_NotifyDataInQueue(pAdapter, ExTid, PeerId, level); -} - -VOID -DrvIFIndicateRoamingNeeded( - PADAPTER pAdapter, - RT_PREPARE_ROAM_TYPE IndicationReason - ) -{ - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateRoamingNeeded()\n")); - - WDI_IndicateRoamingNeeded(pAdapter, IndicationReason); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateRoamingNeeded()\n")); -} - -VOID -DrvIFIndicateLinkStateChanged( - PADAPTER pAdapter, - BOOLEAN bForceLinkQuality, - u1Byte ucLinkQuality - ) -{ - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateLinkStateChanged()\n")); - - WDI_IndicateLinkStateChanged(pAdapter, bForceLinkQuality, ucLinkQuality); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateLinkStateChanged()\n")); -} - -VOID -DrvIFIndicateFWStalled( - PADAPTER Adapter - ) -{ - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> DrvIFIndicateFWStalled()\n")); - - if(OS_SUPPORT_WDI(Adapter)) - { - if(MgntLinkStatusQuery(Adapter)==RT_MEDIA_CONNECT) - { - //if(TODO: check TX hang here) - { - WDI_IndicateFWStalled(Adapter); - } - } - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== DrvIFIndicateFWStalled()\n")); -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.c deleted file mode 100644 index e4f446ec..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.c +++ /dev/null @@ -1,448 +0,0 @@ -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - N6Sdio_PlatformSdioWdf.c - -Abstract: - Implement PlatforSdioXXX() and WdfSdio_XXX() on WDF SDIO. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2012-01-10 Roger Create. - - ---*/ - -#include "Mp_Precomp.h" - - -//================================================================================ -// Constant. -//================================================================================ - -#if USE_WDF_SDIO - -//================================================================================ -// Prototype of protected function. -//================================================================================ - -//================================================================================ -// SDIO Init / DeInit. -//================================================================================ - -// -// Description: -// Select 1st interface and initialize all pipes on it. -// Note, we don't start IoTargets of all pipes here -// because HW is not properly configured. -// -// Assumption: -// Only invoked in MiniportInitialize() context. -// -NTSTATUS -WdfSdio_Initialize( - IN PADAPTER Adapter -) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - - // - // We should implement SDIO initialization process on WDF framework if needed. - // 1. Async SD Request initiallization and corresponding event - // 2. All Sync SD Request initialization for IO or TxRx engine - // 2012.01.19. - // - - // - // Initialize event for control request. - // - NdisInitializeEvent(&(pDevice->AllCtrlTransCompleteEvent)); - - // - // Allocate WDFREQUEST for async vendor request (I/O). - // - ntStatus = WdfSdio_InitAsyncSDRequest(Adapter); - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_LOUD , ("Could not create request: status(0x%08X)", ntStatus)); - return FALSE; - } - return ntStatus; -} - - -// -// Descriptor: -// Stop all USB activity and release allocated in WdfSdio_Initialize(). -// -VOID -WdfSdio_Halt( - IN PADAPTER pAdapter - ) -{ - - // - // - // - - WdfSdio_Disable(pAdapter); - WdfSdio_DeInitAsyncSDRequest(pAdapter); - -} - - -// -// Description: -// Start all Tx queues -// -VOID -WdfSdioTx_Enable( - IN PADAPTER pAdapter - ) -{ - // - // - // Refer to the NDIS5 WdmSdioTx_Enable routine - // -} - - - -// -// Description: -// Tell framework to stop all pipes and wait until -// all pending requests completed. -// -VOID -WdfSdio_Disable( - IN PADAPTER pAdapter - ) -{ - - // - // - // - - // - // Cancel and wait all async SD request completed. - // - WdfSdio_CancelAsyncSDReq(pAdapter); - -} - - -// -// Description: -// Allocate and set up resource for async vendor reqeust. -// -NTSTATUS -WdfSdio_InitAsyncSDRequest( - IN PADAPTER pAdapter - ) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - - // - // - // - - return ntStatus; -} - - -// -// Description: -// Release resource allocated. -// -VOID -WdfSdio_DeInitAsyncSDRequest( - IN PADAPTER pAdapter - ) -{ - - // - // - // -} - - -// -// Description: -// Cancel and wait all async vendor request completed. -// -VOID -WdfSdio_CancelAsyncSDReq( - IN PADAPTER pAdapter - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - PWDF_USB_DEVICE_CONTEXT pWdfUsbDevCtx = GET_WDF_USB_DEVICE_CONTEXT(pDevice); - WDFREQUEST AsyncVendorRequest; - - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - if(pDevice->nIrpPendingCnt > 0) - { - if(pDevice->bAsynIoWritePending) - { - RT_TRACE(COMP_IO, DBG_LOUD, ("WdfSdio_CancelAsyncSDReq(): AsynIoWritePending => cancel it....\n")); - AsyncVendorRequest = pWdfUsbDevCtx->AsyncVendorRequest; - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - - // - // Cancel the WDFREQUEST for AsynIO write request. - // - WdfRequestCancelSentRequest(AsyncVendorRequest); - } - else - { - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - RT_TRACE(COMP_IO, DBG_LOUD, ("WdfSdio_CancelAsyncSDReq(): sync request is pending....\n")); - } - - // - // Wait until it completed by USB host driver. - // - while( !NdisWaitEvent(&(pDevice->AllCtrlTransCompleteEvent), 50) ) - { - RT_TRACE(COMP_IO, DBG_LOUD, ("waiting AllIoIrpReturnedEvent...\n")); - } - NdisResetEvent( &(pDevice->AllCtrlTransCompleteEvent) ); - } - else - { - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - RT_TRACE(COMP_IO, DBG_LOUD, ("WdfSdio_CancelAsyncSDReq(): no pending request....\n")); - } -} - - -// -// Description: -// Callback function of WdfSdio_AsyncVendorRequestWrite(). -// -VOID -WdfSdio_AsyncVendorRequestWriteComplete( - IN WDFREQUEST Request, - IN WDFIOTARGET Target, - IN PWDF_REQUEST_COMPLETION_PARAMS CompletionParams, - IN WDFCONTEXT Context - ) -{ - // - // - // -} - - -// -// Description: -// Issue an vendor request from host to device in asynchronous manner. -// -// Assumption: -// We at most allow one async vendor request pending. -// So, this function must not be re-entry. -// -BOOLEAN -WdfSdio_AsyncVendorRequestWrite( - IN PADAPTER pAdapter, - IN u1Byte bReq, // 1 byte bReq field of setup token. - IN u2Byte wValue, // 2 byte wValue field of setup token. - IN u2Byte wIndex, // 2 byte wIndex field of setup token. - IN pu1Byte pBuffer, // Pointer to buffer to transfer in data-phase. - IN u4Byte BufferLength // # of bytes to OUT or maximal # of bytes to IN. - ) -{ - // - // - // - - return TRUE; -} - - -// -// Description: -// Initialize PlatformReserved[] of this SDIO_OUT_CONTEXT object. -// It return TRUE on success, FALSE otherwise. -// -BOOLEAN -PlatformSdioInitTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - BOOLEAN bResult = TRUE; - - // - // - // - - return bResult; -} - - - -// -// Description: -// Free URB and IRP allocated for this SDIO_OUT_CONTEXT object. -// -VOID -PlatformSdioDeInitTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - // - // - // - -} - - -// -// Description: -// This SDIO platform dependent routine enqueue a specific SDIO Data transfer context into the busy queue -// and waits for post processing. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -// Created by Roger, 2011.01.20. -// -BOOLEAN -PlatformSdioTxEnqueue( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - - BOOLEAN bResult = TRUE; - - // - // - // - - return bResult; -} - - -// -// Description: -// Tell framework we are ready to issue Tx transfer on -// all Tx queues we selected. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -VOID -WdfSdio_EnableAllTxQueues( - IN PADAPTER pAdapter - ) -{ - - // - // - // - -} - -// -// Description: -// Tell framework to stop ongoing OUT transfers on -// all IN pipes we selected. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -VOID -WdfSdio_DisableAllTxQueues( - IN PADAPTER pAdapter - ) -{ - PRT_USB_DEVICE pDevice = GET_RT_USB_DEVICE(pAdapter); - PWDF_USB_DEVICE_CONTEXT pWdfUsbDevContext = GET_WDF_USB_DEVICE_CONTEXT(pDevice); - int idx; - PRT_USB_OUT_PIPE pRtOutPipe; - WDFUSBPIPE hPipe; - WDF_IO_TARGET_STATE ioTargetState; - - for(idx = 0; idx < pWdfUsbDevContext->RtNumOutPipes; idx++) - { - pRtOutPipe = &(pWdfUsbDevContext->RtOutPipes[idx]); - hPipe = pRtOutPipe->hPipe; - - // - // Change IO Target to Stopped state to make it reject further request. - // - ioTargetState = WdfIoTargetGetState(WdfUsbTargetPipeGetIoTarget(hPipe)); - if(ioTargetState == WdfIoTargetStarted) - { - pRtOutPipe->IrpPendingCount--; - - // - // Stop pipe and cancel pending requets. - // - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - RT_TRACE(COMP_SEND, DBG_LOUD, ("WdfSdio_DisableAllTxQueues(): stopping %d pipe ..........\n", idx)); - WdfIoTargetStop(WdfUsbTargetPipeGetIoTarget(hPipe), WdfIoTargetCancelSentIo); - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - // - // Wait outstanding requests completed. - // - RT_TRACE(COMP_SEND, DBG_LOUD, ("WdfSdio_DisableAllTxQueues(): nInPipeIdx(%d) IrpPendingCounts=%d\n", idx, pRtOutPipe->IrpPendingCount)); - if( !RTIsListEmpty( &(pRtOutPipe->ContextBusyList) ) ) - { - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - while( !NdisWaitEvent(&(pRtOutPipe->AllIrpReturnedEvent), 50) ) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("WdfSdio_DisableAllTxQueues(): waiting AllIrpReturnedEvent...\n")); - } - NdisResetEvent( &(pRtOutPipe->AllIrpReturnedEvent) ); - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - } - RT_TRACE(COMP_SEND, DBG_LOUD, ("OUT Pipe(%d) is stopped.-------\n", idx)); - } - else - { - RT_TRACE(COMP_SEND, DBG_LOUD, - ("Try to stop OUT piep(%d) already in stopped state(%#X)\n", - idx, ioTargetState)); - } - } -} - - -VOID -PlatformSdioEnableTxQueues( - IN PADAPTER Adapter - ) -{ - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - WdfSdio_EnableAllTxQueues(Adapter); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -VOID -PlatformSdioDisableTxQueues( - IN PADAPTER Adapter - ) -{ - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - WdfSdio_DisableAllTxQueues(Adapter); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); -} - -VOID -PlatformSdioCancelSdReq( - PADAPTER Adapter -) -{ - WdfSdio_CancelAsyncSDReq(Adapter); -} - -#endif - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.h deleted file mode 100644 index 25bfcbc7..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdf.h +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef __INC_N6PLATFORMSDIOWDF_H -#define __INC_N6PLATFORMSDIOWDF_H - -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - N6Sdio_PlatformSdioWdf.h - -Abstract: - Prototype of WdfSdio_XXX() implemented via WDF SDIO. - These function shall be only use under Platform\. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2012-01-16 Roger Create. - ---*/ - -#if USE_WDF_SDIO - -VOID -WdfSdio_CancelAsyncSDReq( - IN PADAPTER pAdapter - ); - - -NTSTATUS -WdfSdio_Initialize( - IN PADAPTER Adapter - ); - -VOID -WdfSdio_Halt( - IN PADAPTER Adapter - ); - -VOID -WdfSdio_Disable( - IN PADAPTER pAdapter - ); - -VOID -WdfSdioTx_Enable( - IN PADAPTER pAdapter - ); - -NTSTATUS -WdfSdio_InitAsyncSDRequest( - IN PADAPTER pAdapter - ); - - -VOID -WdfSdio_DeInitAsyncSDRequest( - IN PADAPTER pAdapter - ); - -BOOLEAN -WdfSdio_AsyncVendorRequestWrite( - IN PADAPTER pAdapter, - IN u1Byte bReq, // 1 byte bReq field of setup token. - IN u2Byte wValue, // 2 byte wValue field of setup token. - IN u2Byte wIndex, // 2 byte wIndex field of setup token. - IN pu1Byte pBuffer, // Pointer to buffer to transfer in data-phase. - IN u4Byte BufferLength // # of bytes to OUT or maximal # of bytes to IN. - ); - -VOID -WdfSdio_EnableAllTxQueues( - IN PADAPTER pAdapter - ); - -VOID -WdfSdio_DisableAllTxQueues( - IN PADAPTER pAdapter - ); - -#endif // end of USE_WDF_SDIO - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.c deleted file mode 100644 index a98f4229..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.c +++ /dev/null @@ -1,1546 +0,0 @@ -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - N6Sdio_PlatformSdioWdm.c - -Abstract: - Implement PlatformSdioXXX() on WDM. - Prototype of WdmSdio_XXX() implemented via WDM SDIO. - These function shall be only use under Platform\. - -Major Change History: - When Who What - ---------- --------------- ------------------------------- - 2012-01-13 Roger Create. - ---*/ - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N6Sdio_PlatformSdioWdm.tmh" -#endif - -//================================================================================ -// Constant. -//================================================================================ - - - -//================================================================================ -// Prototype of protected function. -//================================================================================ -RT_STATUS -N6SdioTxComplete( - IN PVOID Context, - IN BOOLEAN bResult - ); - - -NTSTATUS -N6SdioHandleInterrupt( - PVOID Context, - u4Byte InterruptType -); - - -//================================================================================ -// Bulk IN. -//================================================================================ - -// -// Description: -// Allocate URB and IRP for this SDIO_OUT_CONTEXT object. -// It return TRUE on success, FALSE otherwise. -// -BOOLEAN -PlatformSdioInitInContext( - IN PADAPTER pAdapter, - IN PSDIO_IN_CONTEXT pContext - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - - pContext->PlatformReserved[0] = pAdapter; - pContext->PlatformReserved[1] = NULL; - pContext->PlatformReserved[2] = NULL; - pContext->PlatformReserved[3] = NULL; - - return TRUE; -} - - -// -// Description: -// Free URB and IRP allocated for this USB_IN_CONTEXT object. -// -VOID -PlatformSdioDeInitInContext( - IN PADAPTER pAdapter, - IN PSDIO_IN_CONTEXT pContext - ) -{ - pContext->PlatformReserved[0] = NULL; - pContext->PlatformReserved[1] = NULL; - pContext->PlatformReserved[2] = NULL; - pContext->PlatformReserved[3] = NULL; -} - - -//================================================================================ -// SDIO Tx Transfer -//================================================================================ - -// -// Description: -// Allocate resources for this SDIO_OUT_CONTEXT object. -// It return TRUE on success, FALSE otherwise. -// -BOOLEAN -PlatformSdioInitTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - - pContext->PlatformReserved[0] = pAdapter; - pContext->PlatformReserved[1] = NULL; - pContext->PlatformReserved[2] = NULL; - pContext->PlatformReserved[3] = NULL; - - return TRUE; -} - - - -// -// Description: -// Free allocated resources for this SDIO_OUT_CONTEXT object. -// -VOID -PlatformSdioDeInitTxContext( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - pContext->PlatformReserved[0] = NULL; - pContext->PlatformReserved[1] = NULL; - pContext->PlatformReserved[2] = NULL; - pContext->PlatformReserved[3] = NULL; -} - - - -// -// Description: -// This SDIO platform dependent routine enqueue a specific SDIO Data transfer context into the busy queue -// and waits for post processing. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -// Created by Roger, 2011.01.20. -// -BOOLEAN -PlatformSdioTxEnqueue( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - BOOLEAN bResult = TRUE; - u1Byte TxQueueIdx = pContext->TxQueueIndex; - PRT_SDIO_TX_QUEUE pTxQueue = &(pDevice->RtTxQueue[TxQueueIdx]); - PRT_TCB pTcb = pContext->pTcb; - - RT_TRACE(COMP_SEND, DBG_TRACE, ("===>PlatformSdioTxEnqueue(): Context(%p)\n", pContext)); - - // If IrpPendingCount is 0, we shall take it as a signal that SDIO Tx Queue is disabled. - if ((pTxQueue->IrpPendingCount < 1) || (!pTxQueue->bEnabled)) - { - RT_TRACE(COMP_SEND, DBG_LOUD, - ("PlatformSdioTxEnqueue() exit because of Tx Queue is not enabled or IrpPendingCount == 0 !!\n")); - return FALSE; - } - - if(RT_SDIO_CANNOT_TX(pAdapter)) - { - bResult = FALSE; - return bResult; - } - - RTInsertTailList( &(pTxQueue->ContextBusyList), &(pContext->List)); - pTxQueue->IrpPendingCount++; - pTcb->sysTime[1] = PlatformGetCurrentTime(); - pAdapter->firstTcbSysTime[TxQueueIdx] = pTcb->sysTime[1]; - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - // Releases the specified Tx semaphore object for SDIO Data transfer. - PlatformReleaseSemaphore(&pDevice->TxSemaphore); - //PlatformReleaseSemaphore(&pAdapter->txGen.txGenSemaphore); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("<===PlatformSdioTxEnqueue(): Context(%p)\n", pContext)); - - return bResult; -} - -// -// Description: -// This SDIO platform dependent routine dequeue a specific SDIO Data transfer context from the busy queue. -// -// Assumption: -// RT_TX_SPINLOCK is acquired. -// -// Created by Roger, 2011.01.20. -// -PSDIO_OUT_CONTEXT -PlatformSdioTxDequeue( - IN PADAPTER pAdapter, - IN u1Byte QueueIdx - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)pAdapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - PSDIO_OUT_CONTEXT pContext = NULL; - - pTxQueue= &(sdiodevice->RtTxQueue[QueueIdx]); - RT_ASSERT((!RTIsListEmpty(&(pTxQueue->ContextBusyList))), ("Tx Queue is empty!!")); - pContext = (PSDIO_OUT_CONTEXT)RTRemoveHeadList(&(pTxQueue->ContextBusyList)); - - return pContext; -} - - -// -// Description: -// This SDIO platform dependent routine for SDIO CMD53 block mode data transfer. -// -// Assumption: -// RT_TX_SPINLOCK is NOT acquired. and driver must refresh Tx free page number by reading -// FREE_TXPG page Register to make sure that the free page is enough. -// -// Created by Roger, 2011.01.20. -// -BOOLEAN -PlatformSdioTxTransfer( - IN PADAPTER pAdapter, - IN PSDIO_OUT_CONTEXT pContext - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)pAdapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - u1Byte DeviceID = 0; - u4Byte offset = 0; // Aggregation length [12:0] is zero. - BOOLEAN bResult = TRUE; - BOOLEAN bMacPwrCtrlOn; - RT_RF_POWER_STATE rfState; - RT_STATUS status = RT_STATUS_SUCCESS; - PRT_TCB pTcb = pContext->pTcb; - - - RT_TRACE(COMP_SEND, DBG_TRACE, ("--->PlatformSdioTxTransfer(): Context(%p), BufLen(%#x), TxQueueIndex(%d)\n", - pContext, pContext->BufLen, pContext->TxQueueIndex)); - //RT_PRINT_DATA(COMP_SEND, DBG_TRACE, ("TxBuffer:"), pContext->Buffer, pContext->BufLen); - - if(RT_SDIO_CANNOT_TX(pAdapter)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformSdioTxTransfer(): SDIO not allow to TX, Return Fail.\n")); - return FALSE; - } - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - // Do not drop Tx packet which is from BCN queue during RF off state to prevent from ROM download FW - // failed in RF on progress. Only protect power off case by "bMacPwrCtrlOn". 2013.11.21, tynli. - if(((rfState == eRfOff) && (pTcb->SpecifiedQueueID != BEACON_QUEUE)) || (bMacPwrCtrlOn != TRUE)) - {// This packet should not be sent if RF is OFF, drop it !! - RT_TRACE(COMP_SEND, DBG_TRACE, ("<---PlatformSdioTxTransfer(): RF Off or Power Off!!\n")); - return FALSE; - } - - // Transfer I/O Bus domain address mapping. - switch(pContext->TxQueueIndex) - { - case 0: // HIQ - DeviceID = WLAN_TX_HIQ_DEVICE_ID; - break; - - case 1: // MIQ - DeviceID = WLAN_TX_MIQ_DEVICE_ID; - break; - - case 2: // LOQ - DeviceID = WLAN_TX_LOQ_DEVICE_ID; - break; - case 3: - DeviceID = WLAN_TX_EXTQ_DEVICE_ID; - break; - default: - RT_ASSERT(FALSE, ("Incorrect SDIO TxQueue Index(%d)\n", pContext->TxQueueIndex)); - DeviceID = WLAN_TX_LOQ_DEVICE_ID; - break; - } - - // Beacon queue is not related to HI, LOW, NORMAL and PUBLIC queue. It will be sent to reserved page directly - // so we just need to check the reserved page size in Tx buffer. 2013.01.04. by tynli. - - RT_ASSERT((pContext->BufLen + (pContext->BufLen%4?(4-pContext->BufLen%4):0) <= pAdapter->MAX_TRANSMIT_BUFFER_SIZE), ("PlatformSdioTxTransfer(): Over MAX_TRANSMIT_BUFFER_SIZE\n")); - - if(pTcb->SpecifiedQueueID != BEACON_QUEUE ) - { - if((pContext->BufLen + (pContext->BufLen%4?(4-pContext->BufLen%4):0) > pAdapter->MAX_TRANSMIT_BUFFER_SIZE)) - return FALSE; - } - - //Using Burst Tx mode to transfer multiple blocks. - status = PlatformSdioCmd53ReadWrite( - sdiodevice, - DeviceID, - sdiodevice->SdioFuncNum, - pContext->BufLen + (pContext->BufLen%4?(4-pContext->BufLen%4):0), - ((pContext->BufLen/4) + (pContext->BufLen%4?1:0)& 0x1FFF),// Aggregation length [12:0] - TRUE, - pContext->Buffer); - - RT_ASSERT(((pContext->BufLen + (pContext->BufLen%4?(4-pContext->BufLen%4):0)) % ((pContext->BufLen/4) + (pContext->BufLen%4?1:0)& 0x1FFF)) ==0, - ("PlatformSdioTxTransfer(): Invalid transfer length!!\n")); - - if(status != RT_STATUS_SUCCESS) - return FALSE; - - RT_TRACE(COMP_SEND, DBG_TRACE, ("<---PlatformSdioTxTransfer(): Context(%p), TxQueueIndex(%d), bResult(%d)\n", - pContext, pContext->TxQueueIndex, bResult)); - - return bResult; -} - - -// -// Description: -// This SDIO platform dependent routine for SDIO CMD53 block mode RX data transfer. -// -// Assumption: -// RT_RX_SPINLOCK is NOT acquired. We whould Query the length of RX Request ready in RXPKTBUF0 -// first and transfer corrsponding buffer length. -// -// Created by Roger, 2011.01.20. -// -BOOLEAN -PlatformSdioRxTransfer( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN u4Byte Rx0ReqLength - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)pAdapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - RT_RF_POWER_STATE rfState; - BOOLEAN bMacPwrCtrlOn; - u2Byte RxDesc2Bytes= 0; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - u1Byte FwPSState; - BOOLEAN bRxTransSuccess = TRUE; - - RT_TRACE(COMP_RECV, DBG_TRACE, ("--->PlatformSdioRxTransfer()\n")); - - if(RT_SDIO_CANNOT_RX(pAdapter)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("PlatformSdioTxTransfer(): SDIO not allow to RX, Return Fail.\n")); - return FALSE; - } - - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - RT_SDIO_INC_RX_TRANS_REF(sdiodevice); - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - - do - { - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - if(sdiodevice->bStopRxTransfer) - { - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - RT_TRACE(COMP_POWER, DBG_LOUD, ("<---PlatformSdioRxTransfer(): Return becuase of bStopRxTransfer\n")); - //return FALSE; - break; - } - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - pAdapter->HalFunc.GetHwRegHandler(pAdapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(((rfState == eRfOff) && (!RT_IN_PS_LEVEL(pAdapter, RT_RF_OFF_LEVEL_FW_IPS_32K))) || (bMacPwrCtrlOn != TRUE)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("<---PlatformSdioRxTransfer(): RF Off or Power Off!!\n")); - bRxTransSuccess = FALSE; - break; - } - - // Leave 32K when there is an Rx packet to receive. It is a workaround to patch FW enters 32K when - // driver is handling DMA packet then cause Rx cmd fail and Rx0 packet length always zero issue. - // Added by tynli, 2014.09.09. Suggested by SD1 Kaiyuan. - if(pDefaultAdapter->bRxPsWorkAround) - { - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("PlatformSdioRxTransfer(): In 32K ---> Wake up Hw. \n")); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - } - - //Using Burst Rx mode to transfer multiple blocks. - rtStatus = PlatformSdioCmd53ReadWrite( - sdiodevice, - WLAN_RX0FF_DEVICE_ID, - sdiodevice->SdioFuncNum, - Rx0ReqLength, - (ULONG)(RT_SDIO_GET_RX_SEQ_NUM(pAdapter)%4), //SEQ[1:0] in RX_RX0FF, Shift Bits = 0 - FALSE, - pRfd->Buffer.VirtualAddress); - - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("<---PlatformSdioRxTransfer(): status fail\n")); - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - RT_SDIO_INC_RX_SEQ_NUM(pAdapter); - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - bRxTransSuccess = FALSE; - break; - } - - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - - // Increase SDIO Rx sequence number - RT_SDIO_INC_RX_SEQ_NUM(pAdapter); - - - // [13:0]: PktLen, [14]: CRC32 and [15]: ICVERR, total 2Bytes should not contain zero content - if(PlatformCompareMemory(pRfd->Buffer.VirtualAddress, &RxDesc2Bytes, sizeof(RxDesc2Bytes)) == 0) - { - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - bRxTransSuccess = FALSE; - break; - } - - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - }while(FALSE); - - - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - RT_SDIO_DEC_RX_TRANS_REF(sdiodevice); - if(RT_SDIO_GET_RX_TRANS_REF(sdiodevice) == 0) - { - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - NdisSetEvent(&sdiodevice->AllSdioRxTransCompleteEvent); - RT_TRACE(COMP_RECV, DBG_LOUD, ("--->NdisSetEvent: AllSdioRxTransCompleteEvent\n")); - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - - RT_TRACE(COMP_RECV, DBG_TRACE, ("<---PlatformSdioRxTransfer()\n")); - return TRUE; - -} - -// -// Description: -// Check if Sdio Tx busy queue is empty. -// Input: -// QueueID - Specified ID, ex: VO, VI, BE, BK -// -// Created by tynli, 2014.07.14. -// -BOOLEAN -PlatformSdioTxQueueIdxEmpty( - IN PADAPTER Adapter, - IN u1Byte QueueID -) -{ - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - u1Byte SdioTxQueueIdx = QueueID; // Only search for those 3 queue in sdio - BOOLEAN bEmpty = TRUE; - - //SdioTxQueueIdx = MapTxQueueToOutPipe(Adapter, QueueID);// Get index to out pipe from specified QueueID. - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - pTxQueue= &(sdiodevice->RtTxQueue[SdioTxQueueIdx]); - if(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - RT_TRACE(COMP_SEND, DBG_LOUD, ("SdioTxQueueIdx[%d] is not empty!!!\n", SdioTxQueueIdx)); - bEmpty = FALSE; - } - else - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - - return bEmpty; -} - - -// -// Description: -// Check if Sdio Tx busy queue and Awb I/O queue is empty. -// -// Created by tynli, 2011.09.01. -// -BOOLEAN -PlatformSdioTxAndAwbQueueEmpty( - IN PADAPTER Adapter -) -{ - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - u1Byte QueueID; - BOOLEAN bEmpty = TRUE; - - // Check if Tx queue empty. - for(QueueID=0; QueueIDRtTxQueue[QueueID]); - if(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - RT_TRACE(COMP_POWER, DBG_LOUD, ("QueueID[%d] is not empty!!!\n", QueueID)); - bEmpty = FALSE; - break; - } - else - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - - // Check Awb I/O queue empty. - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - if(!RTIsListEmpty( &(sdiodevice->AwbWaitQueue))) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("AwbWaitQueue is not empty!!!\n")); - bEmpty = FALSE; - } - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - - // Check sync IO empty. - NdisAcquireSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - if(sdiodevice->SyncIoInProgressCount > 0) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("SyncIoInProgressCount(%d) is not empty!!!\n", sdiodevice->SyncIoInProgressCount)); - bEmpty = FALSE; - } - NdisReleaseSpinLock( &(sdiodevice->SyncIoCntSpinLock) ); - - return bEmpty; -} - -// -// Description: -// Callback function for the post processing of PlatformSdioTxEnqueue from SDIO Tx thread. -// -// Assumption: -// RT_TX_SPINLOCK is NOT acquired. -// -// Created by Roger, 2011.02.01. -// -RT_STATUS -N6SdioTxComplete( - IN PVOID Context, - IN BOOLEAN bResult - ) -{ - PSDIO_OUT_CONTEXT pThisContext = (PSDIO_OUT_CONTEXT)Context; - PRT_SDIO_DEVICE pDevice = NULL; - PADAPTER pAdapter = NULL; - u1Byte QueueIndex = 0; - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - PADAPTER pTargetAdapter = NULL; - PRT_SDIO_DEVICE pTargetDevice = NULL; - - RT_ASSERT(pThisContext != NULL, ("N6SdioTxComplete(): pThisContext should not be NULL!!!\n")); - QueueIndex = pThisContext->TxQueueIndex; - - pAdapter = (PADAPTER)pThisContext->PlatformReserved[0]; - RT_ASSERT(pAdapter != NULL, ("N6SdioTxComplete(%d): pAdapter should not be null!!!\n", QueueIndex)); - - pDevice = GET_RT_SDIO_DEVICE(pAdapter); - pTxQueue = &pDevice->RtTxQueue[QueueIndex]; - - RT_TRACE(COMP_SEND, DBG_TRACE, ("===>N6SdioTxComplete(): Context(%p), QueueIndex(%d), IrpPendingCount(%d)\n", pThisContext, QueueIndex, pTxQueue->IrpPendingCount)); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(pThisContext->bTxPending) - { - pTxQueue->IrpPendingCount--; // Decrease IrpPendingCount which had been increased in PlatformSdioTxEnqueue(). - } - else - { - RT_TRACE(COMP_SEND, DBG_SERIOUS, ("N6SdioTxComplete(): Context is already returned!!\n") ); - } - - if(pThisContext->bTxPending) - pAdapter->HalFunc.HalSdioTxCompleteHandler(pAdapter, pThisContext, (bResult ? HAL_SDIO_COMPLETED_OK : HAL_SDIO_COMPLETED_ERROR)); - - PlatformReleaseSemaphore(&pAdapter->txGen.txGenSemaphore); - // - // Handle NBL packet for each port - // - pTargetAdapter = GetDefaultAdapter(pAdapter); - pTargetDevice = GET_RT_SDIO_DEVICE(pTargetAdapter); - - while(pTargetAdapter != NULL) - { - if(N6SDIO_CANNOT_TX(pTargetAdapter)) - { - //RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioTxComplete(): break for RT_SDIO_CANNOT_TX(%d), N6C_GET_MP_DRIVER_STATE(%d), NicIFGetLinkStatus(%d)\n", - // RT_SDIO_CANNOT_TX(pTargetAdapter), - // N6C_GET_MP_DRIVER_STATE(pTargetAdapter), - // NicIFGetLinkStatus(pTargetAdapter))); - break; - } - - do - { - if(PlatformAtomicExchange(&pTargetAdapter->IntrNBLRefCount, TRUE)==TRUE) - break; - - // - // Handle NBLs buffered. - // - if(pTargetDevice->SendingNetBufferList == NULL) // Add this to prevent from Tx out-of-order. - { - PNET_BUFFER_LIST pNetBufferList; - - while(TRUE) - { - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - if(N6CIsNblWaitQueueEmpty(pTargetAdapter->pNdisCommon->TxNBLWaitQueue)) - { - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - break; - } - - if(!pTargetAdapter->pNdisCommon->bReleaseNblWaitQueueInProgress) - { - pNetBufferList = N6CGetHeadNblWaitQueue(pTargetAdapter->pNdisCommon->TxNBLWaitQueue); - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioTxComplete(): pTargetAdapter(%p) handle the NBL buffered(%p)\n", pTargetAdapter, pNetBufferList )); - if( !N6SdioSendSingleNetBufferList( - pTargetAdapter, - pNetBufferList, - TRUE) ) // bFromQueue - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioTxComplete(): N6usbSendSingleNetBufferList() returns FALSE\n")); - break; - } - } - else - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioTxComplete(): bReleaseNblWaitQueueInProgress\n")); - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - } - } - } - - PlatformAtomicExchange(&pTargetAdapter->IntrNBLRefCount, FALSE); - - } - while(FALSE); - - // Get the next adapter - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - if(pTargetAdapter != NULL) - { - pTargetDevice = GET_RT_SDIO_DEVICE(pTargetAdapter); - } - } - - - // - // Check if driver is going to unload. - // - if(pTxQueue->IrpPendingCount == 0) - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioTxComplete(%d): IrpPendingCount==0 => Driver is going to unload.\n", QueueIndex)); - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - NdisSetEvent(&pTxQueue->AllIrpReturnedEvent); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } - - RT_TRACE(COMP_SEND, DBG_TRACE, ("<===N6SdioTxComplete(): Context(%p)\n", pThisContext)); - - return RT_STATUS_SUCCESS; -} - - -// -// Description: -// whether any context is pended in ContextBusyList. -// -// Assumption: -// RT_TX_SPINLOCK is NOT acquired. -// -// 2010.02.17, created by Roger. -// -BOOLEAN -N6SdioTxQueuePending( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - BOOLEAN bTxQueuePending = FALSE; - u1Byte i = 0; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - for (i=0; iRtTxQueue[i]); - - if(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - bTxQueuePending = TRUE; - break; - } - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioTxQueuePending(): return (%d)\n", bTxQueuePending)); - - return bTxQueuePending; -} - - - -// -// Description: -// Release corresponding context in each ContextBusyList while driver is going to unload. -// -// Assumption: -// RT_TX_SPINLOCK is NOT acquired. -// -// 2010.02.17, created by Roger. -// -BOOLEAN -N6SdioReleaseTxQueuePending( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - BOOLEAN bTxQueuePending = FALSE; - PSDIO_OUT_CONTEXT pOutContextToRelease = NULL; - u1Byte i = 0; - - - for (i=0; iRtTxQueue[i]); - - while(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - pOutContextToRelease = (PSDIO_OUT_CONTEXT)RTRemoveHeadList( &(pTxQueue->ContextBusyList) ); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - N6SdioTxComplete(pOutContextToRelease, FALSE); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioReleaseTxQueuePending(): return (%d)\n", bTxQueuePending)); - - return bTxQueuePending; -} - - -#if RTL8723_SDIO_IO_THREAD_ENABLE - -// -// Description: -// This user created thread handles the SDIO block synchronous write operation at PASSIVE_LEVEL. -// -// 2011.06.23, created by Roger. -// -VOID -N6SdioIOThreadCallback( - IN PVOID pContext - ) -{ - - PADAPTER Adapter = ((PRT_THREAD)pContext)->Adapter; - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - PSDIO_OUT_CONTEXT pOutContextToSend = NULL; - PRT_AWB pAwb = NULL; - PRT_AWB pAwb2Complete = NULL; - BOOLEAN bResult = TRUE; - u4Byte TargetAddr = 0; - BOOLEAN bMacPwrCtrlOn = FALSE; - u1Byte FwPSState = 0; - BOOLEAN bUpdatePreRpwm = FALSE; - BOOLEAN bFwClkChangeInProgress = FALSE; - - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("N6SdioIOThreadCallback() in PASSIVE_LEVEL is not allowed!!\n")); - return; - } - - while(TRUE) - { - - // - // We only need to take care of surprise removal or driver unload event to prevent IO thread function disable by - // Function BIT disable, e.g., DF_IO_BIT - // - if( RT_DRIVER_HALT(Adapter) ) - break; - - if(!Adapter->bInitComplete) - continue; - - if( PlatformAcquireSemaphore(&sdiodevice->IOSemaphore) != RT_STATUS_SUCCESS ) - break; - - // - // We need to take care of surprise removal, driver unload event and DF_IO_BIT to pause IO handling, - // and then return to previous waiting state. - // - if( RT_USB_CANNOT_IO(Adapter) ) - continue; - - //2Check AWB Wait Queue. - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - if( !RTIsListEmpty( &(sdiodevice->AwbWaitQueue))) - { - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - - // Retrieve the first AWB to perform specific write operation - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - pAwb = (PRT_AWB)RTGetHeadList( &sdiodevice->AwbWaitQueue); - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - - RT_TRACE(COMP_IO, DBG_TRACE, ("N6SdioIOThreadCallback(): Dequeue AWB, DeviceID(%d), Offset(%#x), ByteCnt(%#x), NumIdleAwb(%d)\n", pAwb->DeviceID, pAwb->Offset, pAwb->ByteCnt, sdiodevice->NumIdleAwb)); - RT_PRINT_DATA(COMP_IO, DBG_TRACE, "N6SdioIOThreadCallback(): Buffer:\n", - pAwb->DataBuf, pAwb->ByteCnt); - - //2 Check whether underlying HW is in power saving 32k mode. - if(Adapter->bFWReady) - { - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(Adapter, FwPSState) && - !IS_SDIO_POWER_ON_IO_REG(pAwb->DeviceID, pAwb->Offset)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, - ("N6SdioIOThreadCallback(): CANNOT IO---> Wake up Hw. DeviceID(%d), offset(%#X)\n", pAwb->DeviceID, pAwb->Offset)); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&Adapter)); - } - } - - bUpdatePreRpwm = FALSE; - - // tynli_test. Check the register and update driver maintain variables. 2011.09.02. - if(pAwb->DeviceID == SDIO_LOCAL_DEVICE_ID) - { - if(pAwb->Offset == SDIO_REG_HRPWM1) - { - if(pAwb->ByteCnt == 1) - { - bUpdatePreRpwm = TRUE; - } - else - { - RT_TRACE(COMP_IO, DBG_LOUD, ("N6SdioIOThreadCallback(): Cannot update pHalData->PreRpwmVal value and FwPSState!!!\n")); - } - } - } - - - // Perform write operatrion in specific device ID and offset - PlatformIOSyncWriteNByte(Adapter, pAwb->DeviceID, pAwb->Offset, pAwb->ByteCnt, pAwb->DataBuf); - - if(bUpdatePreRpwm) - { - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_PRE_RPWM, pAwb->DataBuf); - bFwClkChangeInProgress = FALSE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_FW_CLK_CHANGE_STATE, (pu1Byte)(&bFwClkChangeInProgress)); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioIOThreadCallback(): RPWM write OK. Release bFwClkChangeInProgress!!!\n")); - } - - // Dequeue the single AWB we sent before and complete it. - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - pAwb2Complete = (PRT_AWB)RTRemoveHeadListWithCnt( &(sdiodevice->AwbWaitQueue), &(sdiodevice->NumWaitAwb)); - RT_ASSERT((pAwb2Complete == pAwb), ("N6SdioIOThreadCallback(): AWB mismatched!!\n")); - ReturnSdioAWB(sdiodevice, pAwb2Complete); - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - } - else - { - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); - RT_TRACE(COMP_IO, DBG_LOUD, ("N6SdioIOThreadCallback(): AWB QueueIdx is empty!!\n")); - } - } - - // Release all buffered AWBs before leaving this thread. - PlatformAcquireSpinLock(Adapter, RT_AWB_SPINLOCK); - while( !RTIsListEmpty(&(sdiodevice->AwbWaitQueue)) ) - { - pAwb = (PRT_AWB)RTRemoveHeadListWithCnt( &(sdiodevice->AwbWaitQueue), &(sdiodevice->NumWaitAwb)); - ReturnSdioAWB(sdiodevice, pAwb); - } - PlatformReleaseSpinLock(Adapter, RT_AWB_SPINLOCK); -} -#endif - - -// -// Description: -// This user created thread handles the CMD53 Data Transfer on SDIO bus. -// Preparing for SDIO Data transfer: -// 1. If all Context Queue is empty, then break. -// 2. If leaving 32k power saving mode is fail, then break. -// -// SDIO Data transfer: -// 1. Check Tx FIFO free page size, if available then dequeue from Context Queue and perform SDIO Data transfer. -// 2. If all Context Queue is empty, then break. Back to 32k power saving mode if needed. -// 3. if any Context Queue is in pendding status then continue. -// -// 2011.01.17, created by Roger. -// -VOID -N6SdioTxThreadCallback( - IN PVOID pContext - ) -{ - - PADAPTER Adapter = ((PRT_THREAD)pContext)->Adapter; - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - PSDIO_OUT_CONTEXT pOutContextToSend; - PSDIO_OUT_CONTEXT pOutContextToComplete = NULL; - u1Byte queueIdx = 0; - BOOLEAN bResult = TRUE; - u1Byte FwPSState; - PRT_TCB pTcb = NULL; - u2Byte busyCount = 0; - - if (KeGetCurrentIrql() > PASSIVE_LEVEL) - { - RT_ASSERT(FALSE, ("N6SdioTxThreadCallback() in PASSIVE_LEVEL is not allowed!!\n")); - return; - } - - while(TRUE) - { - - //2 Packet Transmission processing on SDIO bus. - - // - // We only need to take care of surprise removal or driver unload event to prevent Tx thread function disable by - // Function BIT disable, e.g., DF_TX_BIT - // - if( RT_DRIVER_HALT(Adapter) ) - break; - - if(!Adapter->bInitComplete) - continue; - - if( PlatformAcquireSemaphore(&sdiodevice->TxSemaphore) != RT_STATUS_SUCCESS ) - break; - - Adapter->TxStats.NumTxSemaphore++; - // - // SDIO Tx context processing status here. - // - do - { - busyCount = 0; - - if( RT_SDIO_CANNOT_TX(Adapter) ) - break; - - //2Check Context busy Queue. - if( N6SdioTxQueuePending(Adapter) == FALSE ) - break; - - //2Dequeue the context from specific queue and Transfer data. - - for ( queueIdx=0; queueIdx Check whether underlying HW is in power saving 32k mode. - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - pTxQueue= &(sdiodevice->RtTxQueue[queueIdx]); - if(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { //tynli_test_32k 2011.02.25. - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(Adapter, FwPSState)) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioTxThreadCallback(): CANNOT TX ---> Wake up Hw.\n")); - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&Adapter)); - } - } - else - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // Retrieve Busy Context from specific Tx Queue - pTxQueue= &(sdiodevice->RtTxQueue[queueIdx]); - if(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - pOutContextToSend = (PSDIO_OUT_CONTEXT)RTGetHeadList( &(pTxQueue->ContextBusyList)); - pTcb = pOutContextToSend->pTcb; - pTcb->sysTime[2] = PlatformGetCurrentTime(); - } - else - { - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - RT_TRACE(COMP_POWER, DBG_TRACE, ("N6SdioTxThreadCallback(): QueueIdx(%d) is empty check next queue index\n", queueIdx)); - queueIdx++; // Next Tx FIFO Queue index - continue; - } - - // - //Check whether the number of free pages in TxFIFO is available to perform SDIO data transfer. - // - if( !Adapter->HalFunc.HalSdioQueryTxBufferAvailableHandler( - Adapter, - pOutContextToSend)) - { - pOutContextToSend = NULL; - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - RT_TRACE(COMP_SEND, DBG_WARNING, ("N6SdioTxThreadCallback(): TxQueueIdx(%d) Tx FIFO is full!!\n", queueIdx)); - // - // We should use stall execution to replace NdisMSleep to prevent from the thread is swapping out for too long. - // It will cause "iperf Tx" throughput very bad when Tx aggregation number is set to default value (6). - // Because the probability of no availible free page is higher in a larger TxAggNum setting, then the thread will be - // swapping out more often. 2015.04.30, by tynli. [SDIO-287] - // - PlatformStallExecution(1); - - busyCount++; - if(busyCount > 100) // Prevent Tx starvation - queueIdx++; - continue; - } - - // - // Check whether Fw state is in 32k. 2011.05.10. by tynli. - // - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(Adapter, FwPSState)) - { - RT_TRACE(COMP_POWER, DBG_TRACE, ("N6SdioTxThreadCallback(): Hw still in 32k. Return packet. <----\n")); - pOutContextToSend = NULL; - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - // Prefast warning C28121: The function 'NdisMSleep' is not permitted to be called at the current IRQ level. - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) - PlatformSleepUs(1); - continue; - } - - // - // SDIO Tx FIFO is available to perform data transfer. - // - pTxQueue= &(sdiodevice->RtTxQueue[queueIdx]); - if(!RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - // Retrieve the first context to send - pOutContextToSend = (PSDIO_OUT_CONTEXT)RTGetHeadList( &(pTxQueue->ContextBusyList)); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - bResult = PlatformSdioTxTransfer(Adapter, pOutContextToSend); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - pOutContextToComplete = (PSDIO_OUT_CONTEXT)RTGetHeadList( &(pTxQueue->ContextBusyList)); - // Check the head item is the same or not, to avoid the TxQueue being cleaned by other thread outside the scope of TX_LOCK - if((pOutContextToSend==pOutContextToComplete) && !RTIsListEmpty(&(pTxQueue->ContextBusyList))) - { - // Remove the first context we sent before from busy queue. - pOutContextToComplete = PlatformSdioTxDequeue(Adapter, queueIdx); - RT_ASSERT((pOutContextToSend == pOutContextToComplete), ("N6SdioTxThreadCallback(): SDIO Context mismatched!!")); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - N6SdioTxComplete(pOutContextToComplete, bResult); - } - else // Empty, nop and release lock. - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioTxThreadCallback(): pTxQueue->ContextBusyList be cleaned by other threads\n")); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - else - { - RT_ASSERT(FALSE, ("TxQueue(%d) ContextBusyList is empty!!\n", queueIdx)); - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - } - - if( N6SdioTxQueuePending(Adapter) == FALSE ) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioTxThreadCallback(): All Queues are empty, exit!!\n")); - break; - } - - queueIdx++; // Next Tx FIFO Queue - } - - //Check Context busy Queue here, if all busy contexts are cleared and then break. - if( N6SdioTxQueuePending(Adapter) == FALSE ) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioTxThreadCallback(): All busy contexts are cleared\n")); - break; - } - - }while(TRUE); // To make sure that we can handle each context busy queue sequentially, need to check the counting of this semaphore further - - //WDI_TxCreditCheck(Adapter); - } - - // Release Tx Queue buffered context if needed. - N6SdioReleaseTxQueuePending(Adapter); -} - - -// -// Description: -// The bus driver calls the SD card driver's callback routine whenever the card indicates an interrupt. -// The callback routine must send the appropriate device commands to handle and clear the interrupt on the card. -// After it completes the series of I/O operations, the SD card driver should acknowledge the interrupt. -// -// Assumption: -// PASSIVE_LEVEL -// -// 2010.12.14, created by Roger. -// -NTSTATUS -N6SdioHandleInterrupt( - PVOID Context, - u4Byte InterruptType -) -{ - PADAPTER Adapter = (PADAPTER)Context; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - NTSTATUS status = STATUS_UNSUCCESSFUL; - HAL_INT_MODE sdioIntType = HAL_INT_MODE_LOCAL; - PADAPTER pBcnAdapter = Adapter; - PMGNT_INFO pBcnMgntInfo = pMgntInfo; - BOOLEAN bContinuallyHandleIntr = FALSE; - u2Byte PollingCnt = 0; - - Adapter->numInterrupt++; - // - // Needs to perform SDIO Interrupt handling as follows. - // 1. Read HISR : offset 0x18 , 4 byte - // 2. Get Packet Size : offset 0x1C, 2 byte - // 3. Read from Buffer : addr: WLAN_FIFO_RX , RX_BUFFER_SZ - // 4. Acknowledge this SDIO host generated interrupt if needed. - // - - // - // When a card interrupt occurs during normal operation, the bus driver masks the function's interrupt - // using the interrupt-enable bit in the CCCR, and it then calls the function driver's callback routine. - // The function driver can then proceed to handle the interrupt. Once our driver has serviced the interrupt on our respective function, - // we must call the SdbusAcknowledgeInterrupt routine. When the bus driver receives this call, it re-enables the function's interrupt, - // and operation can proceed. - // 2010.06.17. - // - -#if (RK_PLATFORM_SUPPORT == 1) - PlatformAcquireMutex(&pDevice->RxHandleIntMutex); -#endif - - do{ - - // We should return interrupt contorl immediately if driver is stopped. - if(Adapter->bDriverStopped) - { - break; - } - - if(RT_SDIO_CANNOT_RX(Adapter)) - { - break; - } - - while(pBcnAdapter !=NULL) - { - if(IN_SEND_BEACON_MODE(pBcnAdapter)) - { - pBcnMgntInfo = &pBcnAdapter->MgntInfo; - break; - } - pBcnAdapter = GetNextExtAdapter(pBcnAdapter); - } - - if(pBcnAdapter == NULL) - { - pBcnAdapter = Adapter; - pBcnMgntInfo = pMgntInfo; - } - - sdioIntType = HAL_INT_MODE_LOCAL; - // Prefast warning C28182: Dereferencing NULL pointer. 'Adapter' - if(Adapter != NULL && Adapter->bInitComplete && - NicIFInterruptRecognized(Adapter, &sdioIntType, sizeof(HAL_INT_MODE))) - { - // Handle Rx Interrupt - if(Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_RX_OK)) - { - if(!Adapter->HalFunc.RxHandleInterruptHandler(Adapter)) - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("N6SdioHandleInterrupt(): Fail to handle Rx Interrupt!!\n")); - } - } - - // Handle beacon early interrupt - if((pBcnMgntInfo->mIbss) || - (ACTING_AS_AP(pBcnAdapter) && pBcnMgntInfo->mAssoc)) - { - if(Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_BcnInt)) - { - RT_TRACE(COMP_BEACON, DBG_TRACE, ("N6SdioHandleInterrupt(): Handle BCN early interrupt!!\n")); - UpdateBeaconFrame(pBcnAdapter); - } - } - -#if (P2P_SUPPORT == 1) - if(Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_TSF_BIT32_TOGGLE)) - { - PADAPTER pP2PPort = Adapter; - PP2P_INFO pP2PInfo = NULL; - - while(pP2PPort !=NULL) - { - pP2PInfo = GET_P2P_INFO(pP2PPort); - if(P2P_ENABLED(pP2PInfo) && ((P2P_GO == pP2PInfo->Role) || (P2P_CLIENT == pP2PInfo->Role))) - { - RT_TRACE(COMP_P2P, DBG_LOUD, ("Current port %p with p2p enable = TRUE\n", pP2PPort)); - break; - } - pP2PPort = GetNextExtAdapter(pP2PPort); - } - if(pP2PPort == NULL) - pP2PPort = Adapter; - - // Prefast warning C28182: Dereferencing NULL pointer. 'pP2PPort' - if(pP2PPort != NULL) - P2PPsTsf_Bit32_Toggle(GET_P2P_INFO(pP2PPort)); - } -#endif - - // Handle host system interrupt status registers - if(Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_HSISR_IND)) - { - sdioIntType = HAL_INT_MODE_SYSTEM; - RT_TRACE(COMP_RF, DBG_LOUD, ("N6SdioHandleInterrupt(): Handle host system interrupt!!\n")); - if(NicIFInterruptRecognized(Adapter, &sdioIntType, sizeof(HAL_INT_MODE))) - { - //Handle the status change of Power down(RF Off) or RF On - if(Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_GPIO9_INT) | - Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_SYS_PDNINT) | - Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_SDIO_RON_INT_EN) - ) - { - BOOLEAN bRfStatusChanged = TRUE; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_RF_STATUS_INT, (pu1Byte)(&bRfStatusChanged)); - } - } - } - } - - if(pMgntInfo->bSdioPollIntrHandler) - { - PollingCnt++; - // Prefast warning C28182: Dereferencing NULL pointer. 'Adapter' - if (Adapter != NULL) - { - bContinuallyHandleIntr = (Adapter->HalFunc.GetInterruptHandler(Adapter, HAL_INT_TYPE_RX_OK) && \ - (PollingCnt < pMgntInfo->SdioIntrPollingLimit)) ? TRUE : FALSE; - } - } - else - { - bContinuallyHandleIntr = FALSE; - } - }while(bContinuallyHandleIntr); - -#if (RK_PLATFORM_SUPPORT == 1) - PlatformReleaseMutex(&pDevice->RxHandleIntMutex); -#endif - - // To acknowledge the bus driver that we have already finished processing the interrupt. - if(pDevice->Sdbusinterface.AcknowledgeInterrupt) - status = (pDevice->Sdbusinterface.AcknowledgeInterrupt)(pDevice->Sdbusinterface.Context); - - - return status; - -} - - -// -// Description: -// Enable all SDIO Tx Queues. -// -// Assumption: -// PASSIVE_LEVEL -// -VOID -N6WdmSdioTx_Enable( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - int i; - - for (i = 0; i < pDevice->RtNumTxQueue; i++) - { - N6SdioStartTxQueue(Adapter, i); - } -} - - -// -// Description: -// Enable and reset SDIO CMD related control event. -// -// Assumption: -// PASSIVE_LEVEL -// -VOID -N6WdmSdio_Enable( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - - NdisResetEvent(&pDevice->AllSdioCmdReturnedEvent); - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - RT_SDIO_INC_CMD_REF(pDevice); - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); -} - - -// -// Description: -// Cancel and wait all outstanding transfers completd. -// -// Assumption: -// PASSIVE_LEVEL -// -VOID -N6WdmSdio_Disable( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - int i; - - // SDIO interface do NOT need to cancel any Pending IN IRPs. - - // Cancel Pending out IRPs if needed. - for (i = 0; i < pDevice->RtNumTxQueue; i++) - { - N6SdioStopTxQueue(Adapter, i); - } - -#if !RTL8723_SDIO_IO_THREAD_ENABLE - // Cancel Asyn IO Pending IRP. - RTsdioCancelAsynIoPendingIrp( Adapter ); -#endif - - NdisAcquireSpinLock( &(pDevice->IrpSpinLock) ); - RT_SDIO_DEC_CMD_REF(pDevice); - if (RT_SDIO_GET_CMD_REF(pDevice) > 0) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6WdmSdio_Disable(): wait for all SDIO Cmd returned (%d)\n", RT_SDIO_GET_CMD_REF(pDevice))); - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - - while (TRUE) - { - if ( NdisWaitEvent(&pDevice->AllSdioCmdReturnedEvent, 2000) ) - { - break; - } - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6WdmSdio_Disable(): end of waiting returned SDIO Cmd\n")); - } - else - { - NdisReleaseSpinLock( &(pDevice->IrpSpinLock) ); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6WdmSdio_Disable(): All SDIO CMDs are returned, Refcnt(%#x)\n", RT_SDIO_GET_CMD_REF(pDevice))); - } - - -} - -// -// Description: -// Initialize SDIO bus and device on NDIS6-WDM framework. -// -// Assumption: -// -// 2010.12.09, added by Roger. -// -NTSTATUS -N6WdmSdio_Initialize( - IN PADAPTER Adapter -) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - u1Byte U1bData = 0; - - - // - // Open an interface to the SD bus driver - // - ntStatus = SdBusOpenInterface ( - sdiodevice->pPhysDevObj, - &sdiodevice->Sdbusinterface, - sizeof(SDBUS_INTERFACE_STANDARD), - SDBUS_INTERFACE_VERSION); - - if(NT_SUCCESS(ntStatus)) - { - // - // Contains the information necessary to initialize a Secure Digital (SD) card bus interface. - // - SDBUS_INTERFACE_PARAMETERS interfaceParameters = {0}; - interfaceParameters.Size = sizeof(SDBUS_INTERFACE_PARAMETERS); - interfaceParameters.TargetObject =sdiodevice->pSdioDevObj; - interfaceParameters.DeviceGeneratesInterrupts = TRUE; // The SD device generates interrupts - interfaceParameters.CallbackAtDpcLevel = FALSE; // Run at PASSIVE_LEVEL - interfaceParameters.CallbackRoutine = N6SdioHandleInterrupt; // The bus driver calls when a device interrupt occurs - - interfaceParameters.CallbackRoutineContext = (PVOID )Adapter; - if (sdiodevice->Sdbusinterface.InitializeInterface) - { - // Sets initialization parameters on the interface. - ntStatus = (sdiodevice->Sdbusinterface.InitializeInterface) - (sdiodevice->Sdbusinterface.Context, &interfaceParameters); - - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("N6WdmSdio_Initialize(): Init SD Bus fail!!\n")); - } - } - } - - N6SdioDummyIO(sdiodevice); - - // - // Configure corresponding SDIO properties. - // - if ( N6SdioConfigureDevice(sdiodevice) != STATUS_SUCCESS ) - return STATUS_INSUFFICIENT_RESOURCES; - - sdiodevice->SdioTxBlockMode = TRUE; - sdiodevice->SdioRxBlockMode = TRUE; - -#if (RK_PLATFORM_SUPPORT == 1) - sdiodevice->IoRegDirectAccess = TRUE; // Use CMD52 Direct IO R/W for 1, 2 Bytes access in default. -#else - sdiodevice->IoRegDirectAccess = FALSE; -#endif - - // Reset SDIO Rx sequence number on initialization process - RT_SDIO_RESET_RX_SEQ_NUM(Adapter); - - return ntStatus; -} - -VOID -PlatformSdioEnableRxTransfer( - IN PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - - NdisResetEvent(&sdiodevice->AllSdioRxTransCompleteEvent); - - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - sdiodevice->bStopRxTransfer = FALSE; - RT_SDIO_INC_RX_TRANS_REF(sdiodevice); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); -} - -VOID -PlatformSdioDisableRxTransfer( - IN PADAPTER Adapter -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(((PADAPTER)Adapter)); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(pDefaultAdapter); - - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - RT_SDIO_DEC_RX_TRANS_REF(sdiodevice); - if (RT_SDIO_GET_RX_TRANS_REF(sdiodevice) > 0) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("PlatformSdioDisableRxTransfer(): wait for all SDIO Rx Transfer progress complete (%d)\n", RT_SDIO_GET_RX_TRANS_REF(sdiodevice))); - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - - while (TRUE) - { - // Prefast warning C28121: The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - if(NdisWaitEvent(&sdiodevice->AllSdioRxTransCompleteEvent, 2000)) - { - break; - } - } - - RT_TRACE(COMP_RECV, DBG_LOUD, ("PlatformSdioDisableRxTransfer(): end of waiting SDIO Rx Transfer complete\n")); - } - else - { - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - RT_TRACE(COMP_RECV, DBG_LOUD, ("PlatformSdioDisableRxTransfer(): All SDIO Rx transfer are completed, Refcnt(%#x)\n", RT_SDIO_GET_RX_TRANS_REF(sdiodevice))); - } - - PlatformAcquireSpinLock(Adapter, RT_RX_SPINLOCK); - sdiodevice->bStopRxTransfer = TRUE; - PlatformReleaseSpinLock(Adapter, RT_RX_SPINLOCK); - -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.h deleted file mode 100644 index 9e058a8c..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_PlatformSdioWdm.h +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef __INC_PLATFORMSDIOWDM_H -#define __INC_PLATFORMSDIOWDM_H - -/*++ -Copyright (c) Realtek Semiconductor Corp. All rights reserved. - -Module Name: - N6Sdio_PlatformSdioWdm.h - -Abstract: - Prototype of WdmSdio_XXX() implemented via WDM SDIO. - These function shall be only use under Platform\. - -Added by Roger, 2012.01.01. - - ---*/ - -VOID -N6WdmSdioTx_Enable( - IN PADAPTER Adapter - ); - -NTSTATUS -N6WdmSdio_Initialize( - IN PADAPTER Adapter - ); - -VOID -N6WdmSdio_Disable( - IN PADAPTER Adapter - ); - -VOID -N6WdmSdio_Enable( - IN PADAPTER Adapter - ); - -BOOLEAN -N6SdioTxQueuePending( - IN PADAPTER Adapter - ); - -BOOLEAN -N6SdioReleaseTxQueuePending( - IN PADAPTER Adapter - ); - -#if RTL8723_SDIO_IO_THREAD_ENABLE -VOID -N6SdioIOThreadCallback( - IN PVOID pContext - ); -#endif - -VOID -N6SdioTxThreadCallback( - IN PVOID pContext - ); - -#endif // __INC_PLATFORMSDIOWDM_H - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.c deleted file mode 100644 index 2bacda78..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.c +++ /dev/null @@ -1,3860 +0,0 @@ -#include "Mp_Precomp.h" -#include "CustomOid.h" - -#if WPP_SOFTWARE_TRACE -#include "N6Sdio_WdiMain.tmh" -#endif - -typedef struct _WDI_FRAME_MYWORKSPCE -{ // - // example work space - // - UINT32 Signature; // 'Meta' - WDI_PEER_ID PeerId; - WDI_EXTENDED_TID ExTid; - UINT32 Whatever; - LIST_ENTRY ListEntry; -} WDI_FRAME_MYWORKSPACE, *PWDI_FRAME_MYWORKSPACE; - -static -VOID -n6sdioWdi_FillAPAttr( - _In_ WDI_AP_ATTRIBUTES_CONTAINER *attr, - _In_ ADAPTER *pAdapter - ) -{ - static WDI_ALGO_PAIRS UcastAlgoList[] = - { - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_NONE}, // 0 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_CCMP}, //14 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP40}, // 1 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP40}, // 2 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP104}, // 3 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP104}, // 4 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP}, // 5 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP}, // 6 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_TKIP}, // 7 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_TKIP}, // 8 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_TKIP}, // 9 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_TKIP}, //10 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_CCMP}, //11 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_CCMP}, //12 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_TKIP }, //15 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_CCMP}, //16 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPCCMP }, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPTKIP}, //18 - - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPCCMP}, //19 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPTKIP}, //20 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - - static WDI_ALGO_PAIRS McastAlgoList[] = - { - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_NONE}, // 0 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_CCMP}, //14 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP40}, // 1 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP40}, // 2 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP104}, // 3 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP104}, // 4 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP}, // 5 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP}, // 6 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_TKIP}, // 7 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_TKIP}, // 8 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_TKIP}, // 9 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_TKIP}, //10 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_CCMP}, //11 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_CCMP}, //12 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_WEP40}, //15 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_WEP104}, //16 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_TKIP}, //17 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_CCMP}, //18 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - - // WIFI_AP_CAPABILITIES_CONTAINER APCapabilities; - - // AP cap, ref N62CSet80211Attributes - attr->APCapabilities.ScanSSIDListSize = AP_SCAN_SSID_LIST_MAX_SIZE; - attr->APCapabilities.DesiredSSIDListSize = AP_DESIRED_SSID_LIST_MAX_SIZE; - attr->APCapabilities.PrivacyExemptionListSize = NATIVE_802_11_MAX_PRIVACY_EXEMPTION; - attr->APCapabilities.AssociationTableSize = AP_DEFAULT_ALLOWED_ASSOCIATION_COUNT; - attr->APCapabilities.KeyMappingTableSize = DOT11_MAX_NUM_DEFAULT_KEY; // TODO: which val to fill? - attr->APCapabilities.DefaultKeyTableSize = DOT11_MAX_NUM_DEFAULT_KEY; - attr->APCapabilities.WEPKeyValueMaxLength = (104 / 8); - attr->APCapabilities.RadarDetectionSupported = 0; - - // Unicast algo, ref N62CSet80211Attributes - attr->UnicastAlgorithms.ElementCount = ARRAYSIZE(UcastAlgoList); - attr->UnicastAlgorithms.pElements = UcastAlgoList; - attr->UnicastAlgorithms.MemoryInternallyAllocated = FALSE; - - // Multicast algo - attr->MulticastDataAlgorithms.ElementCount = ARRAYSIZE(McastAlgoList); - attr->MulticastDataAlgorithms.pElements = McastAlgoList; - attr->MulticastDataAlgorithms.MemoryInternallyAllocated = FALSE; -} - -static -VOID -n6sdioWdi_FillWiFiVirtualizationParam( - _In_ WDI_VIRTUALIZATION_ATTRIBUTES_CONTAINER *attr, - _In_ ADAPTER *pAdapter - ) -{ - attr->VirtualizationCapabilities.ExtSTACount = 1; - attr->VirtualizationCapabilities.WiFiDirectGroupCount = 1; - attr->VirtualizationCapabilities.APCount = 1; - attr->VirtualizationCapabilities.SimultaneousGoCount = 1; - attr->VirtualizationCapabilities.SimultaneousMultiChannelOperationLimit = 1; - attr->VirtualizationCapabilities.SimultaneousSTAWFDClientCount = 1; -} - - -static -VOID -n6sdioWdi_FillP2PAttr( - _In_ WDI_P2P_ATTRIBUTES_CONTAINER *attr, - _In_ ADAPTER *pAdapter - ) -{ - - u1Byte bHwSupportMACRandom = FALSE; - - // P2P attr - cpMacAddr(attr->P2PCapabilities.DeviceAddress, pAdapter->CurrentAddress); - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_MAC_ADRESS_COX_CAP, &bHwSupportMACRandom); - RT_TRACE(COMP_INIT, DBG_LOUD, ("n6sdioWdi_FillP2PAttr() : bHwSupportMACRandom( %d ) RegSupportMACRandom(%d)\n" , bHwSupportMACRandom , pAdapter->MgntInfo.RegSupportMACRandom)); - if( !pAdapter->MgntInfo.RegSupportMACRandom ||bHwSupportMACRandom ) - { - attr->P2PCapabilities.DeviceAddress[0] |= BIT1; - } - attr->P2PCapabilities.ConcurrentGOCount = 1; - attr->P2PCapabilities.ConcurrentClientCount = 1; - attr->P2PCapabilities.WPSVersionSupport = 3; - attr->P2PCapabilities.ServiceDiscoverySupported = 1; - attr->P2PCapabilities.ServiceNameDiscoverySupported = 1; - attr->P2PCapabilities.ServiceNameAdvertisementsMaxBytesSupported = 500; - attr->P2PCapabilities.ServiceInformationDiscoverySupported = 1; - attr->P2PCapabilities.ServiceInformationAdvertisementsMaxBytesSupported = 5000; - attr->P2PCapabilities.BackgroundDiscoverySupported = 0; - attr->P2PCapabilities.ClientDiscoverabilitySupported = 0; - attr->P2PCapabilities.InfrastructureManagementSupported = 0; - attr->P2PCapabilities.MaxSecondaryAdapterTypeListSize = 8; - attr->P2PCapabilities.DiscoveryFilterListSize = 2; - attr->P2PCapabilities.GOClientTableSize = 2; - attr->P2PCapabilities.MaxVendorSpecificExtensionIESize = 255; - attr->P2PCapabilities.PassiveAvailabilityListenStateSupported = 0; - attr->P2PCapabilities.OperatingChannelUpdatesSupported = 0; - - // Addr list - attr->InterfaceAddressList.ElementCount = 1; - attr->InterfaceAddressList.pElements = (WDI_MAC_ADDRESS *)pAdapter->CurrentAddress; -} - -static -VOID -n6sdioWdi_FillInterfaceAttr( - _In_ WDI_INTERFACE_ATTRIBUTES_CONTAINER *attr, - _In_ ADAPTER *pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - BOOLEAN bAntDivSupport = FALSE; - - static CHAR FirmwareVersion[] = {'r', 't', 'w', 'l', 'a', 'n', 's', 0}; - static u1Byte MACAddrRandomMask[6]={0xff,0xff,0xff,0xff,0xff,0x00}; - - attr->InterfaceCapabilities.MTUSize = WDI_802_11_MTU_SIZE; - attr->InterfaceCapabilities.MaxMultiCastListSize = WDI_MAX_MCAST_LIST_NUM; - attr->InterfaceCapabilities.BackFillSize = WDI_802_11_DATA_BACK_FILL_SIZE; - PlatformMoveMemory( - attr->InterfaceCapabilities.Address.Address, - pAdapter->PermanentAddress, - ETH_LENGTH_OF_ADDRESS); - attr->InterfaceCapabilities.MaxTxRate = (WDI_802_11_MAX_XMIT_LINK_SPEED/1000); // kbps - attr->InterfaceCapabilities.MaxRxRate = (WDI_802_11_MAX_RCV_LINK_SPEED/1000); // kbps - attr->InterfaceCapabilities.HardwareRadioState = (pMgntInfo->RfOffReason & RF_CHANGE_BY_HW)?FALSE:TRUE; - attr->InterfaceCapabilities.SoftwareRadioState = (pMgntInfo->RegRfOff == TRUE)?FALSE:TRUE; - attr->InterfaceCapabilities.SupportPLR = TRUE; - attr->InterfaceCapabilities.SupportFLR = TRUE; - attr->InterfaceCapabilities.ActionFramesSupported = TRUE; - - attr->InterfaceCapabilities.NumRxStreams = (pHTInfo->nRxSPStream > 0)?pHTInfo->nRxSPStream:1; - attr->InterfaceCapabilities.NumTxStreams = (pHTInfo->nTxSPStream > 0)?pHTInfo->nTxSPStream:1; - attr->InterfaceCapabilities.NumChannels = (pAdapter->MgntInfo.RegMultiChannelFcsMode > 0)?2:1;// TODO: check - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_ANT_DIV, &bAntDivSupport); - attr->InterfaceCapabilities.AntennaDiversity = bAntDivSupport; - attr->InterfaceCapabilities.Support_eCSA = pMgntInfo->RegSupportECSA; - - // MAC Address Randomization contraints for some hardware. - RT_TRACE(COMP_INIT, DBG_LOUD, ("n6sdioWdi_FillInterfaceAttr() : RegSupportMACRandom(%d)\n" , pMgntInfo->RegSupportMACRandom)); - if(pMgntInfo->RegSupportMACRandom) - { - attr->InterfaceCapabilities.MACAddressRandomization = 1; - cpMacAddr(attr->InterfaceCapabilities.MACAddressRandomizationMask.Address , MACAddrRandomMask); - } - - attr->InterfaceCapabilities.BluetoothCoexistenceSupport = WDI_BLUETOOTH_COEXISTENCE_UNKNOWN; - attr->InterfaceCapabilities.SupportsNonWdiOidRequests = TRUE; - - attr->InterfaceCapabilities.FastTransitionSupported = pMgntInfo->RegSupportFT; - - // TODO: MU-MIMO Support - - attr->InterfaceCapabilities.CannotSupportMiracastSink = FALSE; - - attr->FirmwareVersion.ElementCount = ARRAYSIZE( FirmwareVersion ); - attr->FirmwareVersion.pElements = FirmwareVersion; -} - - -static -VOID -n6sdioWdi_FillStationAttr( - _In_ WDI_STATION_ATTRIBUTES_CONTAINER *attr, - _In_ ADAPTER *pAdapter - ) -{ - static WDI_ALGO_PAIRS UcastAlgoList[] = - { - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_NONE}, // 0 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_CCMP}, //14 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP40}, // 1 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP40}, // 2 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP104}, // 3 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP104}, // 4 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP}, // 5 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP}, // 6 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_TKIP}, // 7 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_TKIP}, // 8 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_TKIP}, // 9 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_TKIP}, //10 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_CCMP}, //11 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_CCMP}, //12 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_TKIP }, //15 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_CCMP}, //16 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPCCMP }, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPTKIP}, //18 - - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPCCMP}, //19 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPTKIP}, //20 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - static WDI_ALGO_PAIRS UcastAlgoListWiFiCfg[] = - { - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_NONE}, // 0 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_CCMP}, //14 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP40}, // 1 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP40}, // 2 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP104}, // 3 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP104}, // 4 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP}, // 5 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP}, // 6 - //{WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_TKIP}, // 7 - //{WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_TKIP}, // 8 - //{WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_TKIP}, // 9 - //{WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_TKIP}, //10 - //{WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_CCMP}, //11 - //{WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_CCMP}, //12 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_TKIP }, //15 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_CCMP}, //16 - - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPCCMP }, //17 - {DOT11_AUTH_ALGO_CCKM, DOT11_CIPHER_ALGO_MFPTKIP}, //18 - - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPCCMP}, //19 - {DOT11_AUTH_ALGO_RSNA, DOT11_CIPHER_ALGO_MFPTKIP}, //20 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - static WDI_ALGO_PAIRS McastAlgoList[] = - { - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_NONE}, // 0 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_CCMP}, //14 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP40}, // 1 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP40}, // 2 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP104}, // 3 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP104}, // 4 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP}, // 5 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP}, // 6 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_TKIP}, // 7 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_TKIP}, // 8 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_TKIP}, // 9 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_TKIP}, //10 - {WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_CCMP}, //11 - {WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_CCMP}, //12 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_WEP40}, //15 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_WEP104}, //16 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_TKIP}, //17 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_CCMP}, //18 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - static WDI_ALGO_PAIRS McastAlgoListWiFiCfg[] = - { - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_NONE}, // 0 - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_CCMP}, //14 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP40}, // 1 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP40}, // 2 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP104}, // 3 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP104}, // 4 - {WDI_AUTH_ALGO_80211_OPEN, WDI_CIPHER_ALGO_WEP}, // 5 - {WDI_AUTH_ALGO_80211_SHARED_KEY, WDI_CIPHER_ALGO_WEP}, // 6 - //{WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_TKIP}, // 7 - //{WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_TKIP}, // 8 - //{WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_TKIP}, // 9 - //{WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_TKIP}, //10 - //{WDI_AUTH_ALGO_WPA, WDI_CIPHER_ALGO_CCMP}, //11 - //{WDI_AUTH_ALGO_WPA_PSK, WDI_CIPHER_ALGO_CCMP}, //12 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_CCMP}, //13 - - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_WEP40}, //15 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_WEP104}, //16 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_TKIP}, //17 - {DOT11_AUTH_ALGO_CCKM, WDI_CIPHER_ALGO_CCMP}, //18 - - {DOT11_AUTH_ALGO_WAPI_PSK, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - {DOT11_AUTH_ALGO_WAPI_CERTIFICATE, DOT11_CIPHER_ALGO_WAPI_SMS4}, //for WAPI IHV Support add by ylb 20111114 - }; - static WDI_ALGO_PAIRS McastMFPCipherList[] = - { - {WDI_AUTH_ALGO_RSNA_PSK, WDI_CIPHER_ALGO_BIP}, // 0 - {WDI_AUTH_ALGO_RSNA, WDI_CIPHER_ALGO_BIP}, // 1 - }; - - attr->StationCapabilities.ScanSSIDListSize = WDI_802_11_MAX_SCAN_SSID; - attr->StationCapabilities.DesiredBSSIDListSize = WDI_802_11_MAX_DESIRED_BSSID; - attr->StationCapabilities.DesiredSSIDListSize = WDI_802_11_MAX_DESIRED_SSID; - attr->StationCapabilities.PrivacyExemptionListSize = WDI_802_11_MAX_PRIVACY_EXEMPTION; - attr->StationCapabilities.KeyMappingTableSize = WDI_802_11_MAX_KEY_MAPPING_ENTRY; - attr->StationCapabilities.DefaultKeyTableSize = WDI_802_11_MAX_DEFAULT_KEY_ENTRY; - attr->StationCapabilities.WEPKeyValueMaxLength = WDI_802_11_MAX_WEP_KEY_LENGTH; - attr->StationCapabilities.MaxNumPerSTA = WDI_802_11_MAX_PER_STA_DEFAULT_KEY; - attr->StationCapabilities.SupportedQOSFlags = 0; - attr->StationCapabilities.HostFIPSModeImplemented = TRUE; - attr->StationCapabilities.MFPCapable = TRUE; - attr->StationCapabilities.AutoPowerSaveMode = TRUE; - - //Note: it is recommended LE do not cache BSS list to reduce the effort -#if BSS_LIST_CACHE - attr->StationCapabilities.BSSListCachemanagement = TRUE; -#else - attr->StationCapabilities.BSSListCachemanagement = FALSE; -#endif - - //Note: it is recommended LE do not override BSS selection set by UE -#if CONNECT_BSS_SELECTION_OVERRIDE - attr->StationCapabilities.ConnectBSSSelectionOverride = TRUE; -#else - attr->StationCapabilities.ConnectBSSSelectionOverride = FALSE; -#endif - - attr->StationCapabilities.uMaxNetworkOffloadListSize = WDI_802_11_MAX_NETWORKOFFLOAD_SIZE; - attr->StationCapabilities.HESSIDConnectionSupported = FALSE; - // Following capabilities is added after 0.90_1 - // TODO: [WDI] Fill following capabilities according to hw support - //attr->StationCapabilities.HESSIDConnectionOffloadSupported = FALSE; - attr->StationCapabilities.DisconnectedStandbySupported = FALSE; - - //4 Unicast Algorithm - attr->Optional.UnicastAlgorithms_IsPresent = TRUE; - if(pAdapter->MgntInfo.bWiFiConfg) - { - attr->UnicastAlgorithms.ElementCount = ARRAYSIZE( UcastAlgoListWiFiCfg ); - attr->UnicastAlgorithms.pElements = UcastAlgoListWiFiCfg; - } - else - { - attr->UnicastAlgorithms.ElementCount = ARRAYSIZE( UcastAlgoList ); - attr->UnicastAlgorithms.pElements = UcastAlgoList; - } - - //4 Multicast Data Algorithm - attr->Optional.MulticastDataAlgorithms_IsPresent = TRUE; - if(pAdapter->MgntInfo.bWiFiConfg) - { - attr->MulticastDataAlgorithms.ElementCount = ARRAYSIZE( McastAlgoListWiFiCfg ); - attr->MulticastDataAlgorithms.pElements = McastAlgoListWiFiCfg; - } - else - { - attr->MulticastDataAlgorithms.ElementCount = ARRAYSIZE( McastAlgoList ); - attr->MulticastDataAlgorithms.pElements = McastAlgoList; - } - - //4 Multicast Management Algorithm - attr->Optional.MulticastManagementAlgorithms_IsPresent = TRUE; - attr->MulticastManagementAlgorithms.ElementCount = ARRAYSIZE( McastMFPCipherList ); - attr->MulticastManagementAlgorithms.pElements = McastMFPCipherList; -} - - -static -VOID -n6sdioWdi_FillDatapathAttr( - _In_ WDI_DATAPATH_ATTRIBUTES_CONTAINER *attr, - _In_ ADAPTER *pAdapter - ) -{ - attr->Optional.DataPathCapabilities_IsPresent = TRUE; - //8723BS is SDIO Interface, for PCIe interface, use WDI_INTERCONNECT_MEMORY_MAPPED - attr->DataPathCapabilities.InterconnectType = WDI_INTERCONNECT_MESSAGE_BASED; - attr->DataPathCapabilities.MaxNumPeers = (u1Byte)MAX_PEER_NUM; - attr->DataPathCapabilities.TxTargetPriorityQueueing = TRUE; - attr->DataPathCapabilities.TxMaxScatterGatherElementsPerFrame = 0x00ff; - attr->DataPathCapabilities.TxExplicitSendCompleteFlagRequired = TRUE; - attr->DataPathCapabilities.TxMinEffectiveFrameSize = 0; - attr->DataPathCapabilities.TxFrameSizeGranularity = 1; - attr->DataPathCapabilities.RxTxForwarding = FALSE; - attr->DataPathCapabilities.RxMaxThroughput = 300; // (150 Mbps) -} - - -static -VOID -n6sdioWdi_FillBandInfoAttr( - _In_ WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS *pAdapterCap, - _In_ ADAPTER *pAdapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - u4Byte WirelessModeCapa=0; - - static WDI_CHANNEL_MAPPING_ENTRY channelMap24[] = { - {1, 0x96C}, - {2, 0x971}, - {3, 0x976}, - {4, 0x97B}, - {5, 0x980}, - {6, 0x985}, - {7, 0x98A}, - {8, 0x98F}, - {9, 0x994}, - {10, 0x999}, - {11, 0x99E}, - {12, 0x9A3}, - {13, 0x9A8}, - {14, 0x9B4} - }; - // 8723BS only support 2.4GHz - static WDI_CHANNEL_MAPPING_ENTRY channelMap5[] = { - {36, 5180 }, - {40, 5200 }, - {44, 5220 }, - {48, 5240 }, - {52, 5260}, - {56, 5280}, - {60, 5300}, - {64, 5320}, - {100, 5500}, - {104, 5520}, - {108, 5540}, - {112, 5560}, - {116, 5580}, - {120, 5600}, - {124, 5620}, - {128, 5640}, - {132, 5660}, - {136, 5680}, - {140, 5700}, - {149, 5745}, - {153, 5765}, - {157, 5785}, - {161, 5805}, - {165, 5825} - }; - // Following parameter is added after 0.90_1 - static UINT32 WidthList[] = {20, 40, 80}; - - WirelessModeCapa = HalGetSupportedWirelessMode(pAdapter); - - pNdisCommon->BandInfoCount = 0; - //3 If Support 2.4G band - if((WirelessModeCapa & WIRELESS_MODE_N_24G) || (WirelessModeCapa & WIRELESS_MODE_AC_24G) ||(WirelessModeCapa & WIRELESS_MODE_G)||(WirelessModeCapa & WIRELESS_MODE_B)) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("==>Fill band info 2.4GHz\n")); - //4 BandCapabilities - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].BandCapabilities.BandID = WDI_BAND_ID_2400; - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].BandCapabilities.BandState = TRUE; - //4 ValidPhyTypes - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.pElements = (WDI_PHY_TYPE*)pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType; - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount = 0; - if((WirelessModeCapa & WIRELESS_MODE_N_24G) || (WirelessModeCapa & WIRELESS_MODE_AC_24G)) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount++; - } - if(WirelessModeCapa & WIRELESS_MODE_G) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount++; - } - if(WirelessModeCapa & WIRELESS_MODE_B) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount++; - } - //4 ValidChannelTypes - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidChannelTypes.ElementCount = ARRAYSIZE( channelMap24 ); - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidChannelTypes.pElements = channelMap24; - //Following definition is added after 0.90_1 - //4 ChannelWidthList - // TODO: [WDI] Determine channel width - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ChannelWidthList.ElementCount = 2; - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ChannelWidthList.pElements = WidthList; - pNdisCommon->BandInfoCount++; - } - //3 Support 5G band if hardware capable - if( (WirelessModeCapa & WIRELESS_MODE_A) || (WirelessModeCapa & WIRELESS_MODE_N_5G) || - (WirelessModeCapa & WIRELESS_MODE_AC_5G) || (WirelessModeCapa & WIRELESS_MODE_AC_ONLY) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("==>Fill band info 5GHz\n")); - //4 BandCapabilities - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].BandCapabilities.BandID = WDI_BAND_ID_5000; - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].BandCapabilities.BandState = TRUE; - //4 ValidPhyTypes - if(pNdisCommon->BandInfoCount==1) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.pElements = (WDI_PHY_TYPE*)&(pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType[pNdisCommon->BandInfo[0].ValidPhyTypes.ElementCount]); - } - else - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.pElements = (WDI_PHY_TYPE*)pNdisCommon->pDot11SupportedPhyTypes->dot11PHYType; - } - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount = 0; - if(WirelessModeCapa & WIRELESS_MODE_AC_5G) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount++; - } - if(WirelessModeCapa & WIRELESS_MODE_N_5G) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount++; - } - if(WirelessModeCapa & WIRELESS_MODE_A) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidPhyTypes.ElementCount++; - } - //4 ValidChannelTypes - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidChannelTypes.ElementCount = ARRAYSIZE( channelMap5 ); - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ValidChannelTypes.pElements = channelMap5; - // Following define is added after 0.90_1 - //4 ChannelWidthList - // TODO: [WDI] Determine channel width - if((WirelessModeCapa & WIRELESS_MODE_AC_5G) || (WirelessModeCapa & WIRELESS_MODE_AC_ONLY)) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ChannelWidthList.ElementCount = 3; - } - else if(WirelessModeCapa & WIRELESS_MODE_N_5G) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ChannelWidthList.ElementCount = 2; - } - else // if(WirelessModeCapa & WIRELESS_MODE_A) - { - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ChannelWidthList.ElementCount = 2; - } - pNdisCommon->BandInfo[pNdisCommon->BandInfoCount].ChannelWidthList.pElements = WidthList; - pNdisCommon->BandInfoCount++; - } - RT_TRACE(COMP_INIT, DBG_LOUD, ("==>pNdisCommon->BandInfoCount=%d\n",pNdisCommon->BandInfoCount)); - pAdapterCap->BandInfo.ElementCount = pNdisCommon->BandInfoCount; - pAdapterCap->BandInfo.pElements = pNdisCommon->BandInfo; -} - - -static -VOID -n6sdioWdi_FillPhyInfoAttr( - _In_ WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS *pAdapterCap, - _In_ ADAPTER *pAdapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - u1Byte count = 0; - - static WDI_DATA_RATE_LIST DataRateListHrDsss[] = { - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 2 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 4 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 11 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 22 } - }; - static WDI_DATA_RATE_LIST DataRateListErp[] = { - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 2 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 4 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 11 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 22 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 12 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 18 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 24 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 36 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 48 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 72 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 96 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 108 } - }; - static WDI_DATA_RATE_LIST DataRateListOfdm[] = { - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 12 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 18 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 24 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 36 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 48 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 72 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 96 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 108 } - }; - static WDI_DATA_RATE_LIST DataRateListHt[] = { - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 30 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 60 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 90 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 120 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 180 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 240 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 270 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 300 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 360 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 480 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 600 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 720 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 900 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 960 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1200 } - }; - static WDI_DATA_RATE_LIST DataRateListVht[] = { - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 65 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 130 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 195 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 260 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 390 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 520 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 585 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 650 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 780 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 867 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 130 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 260 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 390 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 520 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 780 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1040 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1170 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1300 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1560 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1734 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 195 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 390 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 585 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 780 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1170 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1560 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1755 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 1950 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 2340 }, - { WDI_DATA_RATE_RX_RATE | WDI_DATA_RATE_TX_RATE, 2340 } - }; - - for (count = 0; count < pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; count ++) - { - //4 PhyCapabilities - pNdisCommon->PhyInfo[count].PhyCapabilities.PhyType = pNdisCommon->pDot11PhyMIBs[count].PhyType; - pNdisCommon->PhyInfo[count].PhyCapabilities.SupportsCFPoll = MgntActQuery_CfPollable(pAdapter); - pNdisCommon->PhyInfo[count].PhyCapabilities.MPDUMaxLength = WDI_802_11_MTU_SIZE; - pNdisCommon->PhyInfo[count].PhyCapabilities.TemperatureClass = dot11_temp_type_unknown; - pNdisCommon->PhyInfo[count].PhyCapabilities.DiversitySupport = dot11_diversity_support_dynamic; - //4 TxPowerLevelList - pNdisCommon->PhyInfo[count].TxPowerLevelList.ElementCount = pNdisCommon->dot11SupportedPowerLevels.uNumOfSupportedPowerLevels; - pNdisCommon->PhyInfo[count].TxPowerLevelList.pElements = pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues; - //4 DataRateList - switch(pNdisCommon->PhyInfo[count].PhyCapabilities.PhyType) - { - case WDI_PHY_TYPE_UNKNOWN: - default: - break; - - case WDI_PHY_TYPE_HRDSSS: - { - pNdisCommon->PhyInfo[count].DataRateList.ElementCount = ARRAYSIZE( DataRateListHrDsss ); - pNdisCommon->PhyInfo[count].DataRateList.pElements = DataRateListHrDsss; - } - break; - - case WDI_PHY_TYPE_ERP: - { - pNdisCommon->PhyInfo[count].DataRateList.ElementCount = ARRAYSIZE( DataRateListErp ); - pNdisCommon->PhyInfo[count].DataRateList.pElements = DataRateListErp; - } - break; - - case WDI_PHY_TYPE_OFDM: - { - pNdisCommon->PhyInfo[count].DataRateList.ElementCount = ARRAYSIZE( DataRateListOfdm ); - pNdisCommon->PhyInfo[count].DataRateList.pElements = DataRateListOfdm; - } - break; - - case WDI_PHY_TYPE_HT: - { - pNdisCommon->PhyInfo[count].DataRateList.ElementCount = ARRAYSIZE( DataRateListHt ); - pNdisCommon->PhyInfo[count].DataRateList.pElements = DataRateListHt; - } - break; - - case WDI_PHY_TYPE_VHT: - { - pNdisCommon->PhyInfo[count].DataRateList.ElementCount = ARRAYSIZE( DataRateListVht ); - pNdisCommon->PhyInfo[count].DataRateList.pElements = DataRateListVht; - } - break; - } - } - - pAdapterCap->PhyInfo.ElementCount = pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; - pAdapterCap->PhyInfo.pElements = pNdisCommon->PhyInfo; -} - - -static -VOID -n6sdioWdi_FillPMCapabilities( - _In_ WDI_PM_CAPABILITIES_CONTAINER *cap, - _In_ ADAPTER *pAdapter - ) -{ - BOOLEAN bEnableWoLCapabilities; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - bEnableWoLCapabilities = MgntIsWoWLANCapabilityEnable(pAdapter); - - if(bEnableWoLCapabilities) - { - cap->Flags = NDIS_PM_WAKE_PACKET_INDICATION_SUPPORTED; - cap->SupportedWoLPacketPatterns = - ( NDIS_PM_WOL_BITMAP_PATTERN_SUPPORTED | - NDIS_PM_WOL_MAGIC_PACKET_SUPPORTED | - NDIS_PM_WOL_IPV4_TCP_SYN_SUPPORTED | - NDIS_PM_WOL_IPV6_TCP_SYN_SUPPORTED | - NDIS_PM_WOL_IPV4_DEST_ADDR_WILDCARD_SUPPORTED | - NDIS_PM_WOL_IPV6_DEST_ADDR_WILDCARD_SUPPORTED | - NDIS_PM_WOL_EAPOL_REQUEST_ID_MESSAGE_SUPPORTED ); - cap->NumTotalWoLPatterns = MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter); - cap->MaxWoLPatternSize = MAX_WOL_PATTERN_SIZE; - cap->MaxWoLPatternOffset = 256; - cap->MaxWoLPacketSaveBuffer = (MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter))*MAX_WOL_PATTERN_SIZE; - cap->SupportedProtocolOffloads = NDIS_PM_PROTOCOL_OFFLOAD_NS_SUPPORTED; - cap->NumArpOffloadIPv4Addresses = 0; - cap->NumNSOffloadIPv6Addresses = 2; // WHQL requirment at least 2 - if(pPSC->RegARPOffloadEnable) - { - cap->SupportedProtocolOffloads |= NDIS_PM_PROTOCOL_OFFLOAD_ARP_SUPPORTED; - cap->NumArpOffloadIPv4Addresses = 1; - } - if(pPSC->RegNSOffloadEnable) - { - cap->SupportedProtocolOffloads |= NDIS_PM_PROTOCOL_OFFLOAD_NS_SUPPORTED; - cap->NumNSOffloadIPv6Addresses =2; - } - if(pPSC->RegGTKOffloadEnable) - cap->SupportedProtocolOffloads |= NDIS_PM_PROTOCOL_OFFLOAD_80211_RSN_REKEY_SUPPORTED; - // - // Set type of WOL supported. - // - cap->MinMagicPacketWakeUp = NdisDeviceStateD3; // 070201, rcnjko: magic packet tought me a lesson, we should call one's name 16 times to awake him. So, be patient. - cap->MinPatternWakeUp = NdisDeviceStateD3; - cap->MinLinkChangeWakeUp = NdisDeviceStateUnspecified; - if(pPSC->WoWLANMode == eWakeOnMagicPacketOnly) //by tynli. - cap->MinPatternWakeUp = NdisDeviceStateUnspecified; - else if (pPSC->WoWLANMode == eWakeOnPatternMatchOnly) - cap->MinMagicPacketWakeUp = NdisDeviceStateUnspecified; - - // - // Set new attributes for Win8 - // - // Temporarily mark some attributes because we cannot support now. - // They will be enable in the feature. 2012.03.12. by tynli. - cap->SupportedWakeUpEvents = 0 - /*NDIS_PM_WAKE_ON_MEDIA_DISCONNECT_SUPPORTED | - NDIS_PM_WAKE_ON_MEDIA_CONNECT_SUPPORTED*/; - cap->MediaSpecificWakeUpEvents = - NDIS_WLAN_WAKE_ON_NLO_DISCOVERY_SUPPORTED | - NDIS_WLAN_WAKE_ON_AP_ASSOCIATION_LOST_SUPPORTED | - NDIS_WLAN_WAKE_ON_GTK_HANDSHAKE_ERROR_SUPPORTED | - NDIS_WLAN_WAKE_ON_4WAY_HANDSHAKE_REQUEST_SUPPORTED; - - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("[WDI], n6pciWdi_FillPMCapabilities(): NOT support wake-on-wlan\n")); - - // - // Not support WOL - // - cap->MinMagicPacketWakeUp = NdisDeviceStateUnspecified; - cap->MinPatternWakeUp = NdisDeviceStateUnspecified; - cap->MinLinkChangeWakeUp = NdisDeviceStateUnspecified; - } -} - -static -VOID -n6sdioWdi_FillReceiveCoalescingCap( - _In_ WDI_RECEIVE_COALESCING_CAPABILITIES_CONTAINER *RecvCoalescingCap, - _In_ ADAPTER *pAdapter - ) -{ - //3 The value of "WDI_RECEIVE_FILTER_XXX" defined by WDI are same with defined by NDIS. - RecvCoalescingCap->EnableFilterTypes = NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED; - RecvCoalescingCap->EnabledQueueTypes = 0;//!WDI_RECEIVE_FILTER_VM_QUEUES_ENABLE - RecvCoalescingCap->NumQueues = 0; - RecvCoalescingCap->SupportedQueueProperties = NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE; - RecvCoalescingCap->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED| - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED; - RecvCoalescingCap->SupportedHeaders = NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED; - RecvCoalescingCap->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED; - RecvCoalescingCap->MaxMacHeaderFilters = 2; - RecvCoalescingCap->MaxQueueGroups = 0; - RecvCoalescingCap->MaxQueuesPerQueueGroup = 0; - RecvCoalescingCap->MinLookaheadSplitSize = 0; - RecvCoalescingCap->MaxLookaheadSplitSize = 0; - RecvCoalescingCap->SupportedARPHeaderFields = NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED; - RecvCoalescingCap->SupportedIPv4HeaderFields = NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED; - RecvCoalescingCap->SupportedIPv6HeaderFields = NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED; - RecvCoalescingCap->SupportedUdpHeaderFields = NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED; - RecvCoalescingCap->MaxFieldTestsPerPacketCoalescingFilter = 5; - RecvCoalescingCap->MaxPacketCoalescingFilters = 10; - -} - -VOID -n6sdioWdi_InitEvents( - _In_ PRT_SDIO_DEVICE sdiodevice - ) -{ - // Initialize event. - NdisInitializeEvent(&sdiodevice->evtSendingNBLCompleted); - - // - // Initialize event to make sure PnP action could be followed by Miniport CheckForHang routine - // to prevent unexpect bug check code 0x1d. - // 2009.09.30. - // - NdisInitializeEvent(&sdiodevice->SetPnpChkForHangEvent); - - //2Init Event for canceling Asyn_Io pending IRP when unload - NdisInitializeEvent(&sdiodevice->AllAsynIoIrpReturnedEvent); - - - //2Init Event for all SDIO cmd52/cmd53 returned when unload - NdisInitializeEvent(&sdiodevice->AllSdioCmdReturnedEvent); - - - NdisInitializeEvent(&sdiodevice->FwPsClockOffEvent); - NdisInitializeEvent(&sdiodevice->AllSdioRxTransCompleteEvent); -} - -RT_STATUS -n6sdioWdi_GenAdapterCaps( - _In_ PADAPTER pAdapter, - _In_ PWDI_GET_ADAPTER_CAPABILITIES_PARAMETERS pAdapterCap -) -{ - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - - // TODO: adjust parameters in N6InitializeNative80211MIBs for SDIO - N6InitializeNative80211MIBs(pAdapter); - PlatformZeroMemory(pAdapterCap, sizeof(WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS)); - - //4 1. Fill Communication Configuration Attribute - pAdapterCap->Optional.CommunicationAttributes_IsPresent = TRUE; - pAdapterCap->CommunicationAttributes.Optional.CommunicationCapabilities_IsPresent = TRUE; - pAdapterCap->CommunicationAttributes.CommunicationCapabilities.MaxCommandSize = 0x00000800; // 2K - - //4 2. Fill Interface Attribute - n6sdioWdi_FillInterfaceAttr(&pAdapterCap->InterfaceAttributes, pAdapter); - - //4 3. Fill Station Attribute - n6sdioWdi_FillStationAttr(&pAdapterCap->StationAttributes, pAdapter); - - //4 4. Fill AP Attribute - pAdapterCap->Optional.APAttributes_IsPresent = TRUE; - n6sdioWdi_FillAPAttr(&pAdapterCap->APAttributes, pAdapter); - - //4 5. Fill Vritualization Attribute - pAdapterCap->Optional.VirtualizationAttributes_IsPresent = TRUE; - n6sdioWdi_FillWiFiVirtualizationParam(&pAdapterCap->VirtualizationAttributes, pAdapter); - - // P2P attr - pAdapterCap->Optional.P2PAttributes_IsPresent = TRUE; - n6sdioWdi_FillP2PAttr(&pAdapterCap->P2PAttributes, pAdapter); - - //4 6. Fill Data Path Attribute - pAdapterCap->Optional.DatapathAttributes_IsPresent = TRUE; - n6sdioWdi_FillDatapathAttr(&pAdapterCap->DatapathAttributes, pAdapter); - - //4 7. Fill Band Info - pAdapterCap->Optional.BandInfo_IsPresent = TRUE; - n6sdioWdi_FillBandInfoAttr(pAdapterCap, pAdapter); - - //4 8. Fill Phy Info - pAdapterCap->Optional.PhyInfo_IsPresent = TRUE; - n6sdioWdi_FillPhyInfoAttr(pAdapterCap, pAdapter); - - //4 9. Fill PM Capability - // TODO: [WDI] add power management capability - pAdapterCap->Optional.PmCapabilities_IsPresent = TRUE; - n6sdioWdi_FillPMCapabilities(&pAdapterCap->PmCapabilities, pAdapter); - - //4 10. CountryRegionList - - //4 11. ReceiveCoalescingCapabilities - if(TRUE == pMgntInfo->bSupportPacketCoalescing) - { - pAdapterCap->Optional.ReceiveCoalescingCapabilities_IsPresent = TRUE; - n6sdioWdi_FillReceiveCoalescingCap(&pAdapterCap->ReceiveCoalescingCapabilities,pAdapter); - } - - return RT_STATUS_SUCCESS; -} - -NDIS_STATUS -N6SdioWdi_AllocateAdapter( - _In_ NDIS_HANDLE NdisMiniportHandle, - _In_ NDIS_HANDLE MiniportDriverContext, - _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters, - _In_ PNDIS_WDI_INIT_PARAMETERS NdisWdiInitParameters, - _Inout_ PNDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES RegistrationAttributes - ) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - PADAPTER Adapter = NULL; - PRT_SDIO_DEVICE sdiodevice = NULL; - PMGNT_INFO pMgntInfo = NULL; - PRT_NDIS6_COMMON pNdisCommon = NULL; - PWDI_DATA_STRUCT pWdi = NULL; - GUID PowerSetting_GUID = GUID_ACTIVE_POWERSCHEME; - GUID WLANPowerMode_GUID = GUID_WLAN_POWER_MODE; - NDIS_HANDLE MiniportAdapterHandle = NdisMiniportHandle; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], ==> N6SdioWdi_AllocateAdapter()\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Allocate Adapter", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingHexUInt32(NdisWdiInitParameters->WdiVersion, "UE WDI Version")); -#endif - - // Allocate ADAPTER structure - ndisStatus = N6sdioAllocateAdapter(&Adapter, MiniportAdapterHandle); - if( ndisStatus != NDIS_STATUS_SUCCESS ) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6sdioAllocateAdapter() failed! ndisStatus=0x%x\n", ndisStatus)); - Adapter = NULL; - goto error; - } - else - { - // Invoke resource checking mechanism. - INIT_RES_MON_OBJ(Adapter->ResMonObjWdi); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6sdioAllocateAdapter() successfully.\n")); - ADD_RES_TO_MON(Adapter->ResMonObjWdi, InitRM_AllocAdapter); // Add to resource monitor. - } - - sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - sdiodevice->pAdapter = Adapter; - - pMgntInfo = &(Adapter->MgntInfo); - pNdisCommon = Adapter->pNdisCommon; - pNdisCommon->NdisVersion = NdisGetVersion(); - - pNdisCommon->WDISupport = TRUE; - pWdi = &(Adapter->pPortCommonInfo->WdiData); - pWdi->pWdiInitParameters = NdisWdiInitParameters; - - pWdi->bCommandHangHappened = FALSE; - - pWdi->TlvContext.AllocationContext = 0; - - pWdi->TlvContext.PeerVersion = NdisWdiInitParameters->WdiVersion; - - if(pNdisCommon->NdisVersion >= NDIS_VERSION_BASE_6_50) - pNdisCommon->NdisVersion = NDIS_VERSION_BASE_6_50; - - NdisMGetDeviceProperty(MiniportAdapterHandle, - &(sdiodevice->pPhysDevObj), // PhysicalDeviceObject - &(sdiodevice->FunctionalDeviceObject), // FunctionalDeviceObject - &(sdiodevice->pSdioDevObj), // NextDeviceObject - NULL, - NULL); - - sdiodevice->Sdbusinterface.Size = sizeof(SDBUS_INTERFACE_STANDARD); - sdiodevice->Sdbusinterface.Version = SDBUS_INTERFACE_VERSION; - sdiodevice->NextDeviceStackSize = (CHAR)sdiodevice->pSdioDevObj->StackSize + 1; - - //2 Save the related NDIS handles - sdiodevice->hNdisAdapter = MiniportAdapterHandle; - pNdisCommon->hNdisAdapter = MiniportAdapterHandle; - - // - // Fill RegistrationAttributes for NdisMSetMiniportAttributes() called by WDI - // - N6_ASSIGN_OBJECT_HEADER( - RegistrationAttributes->Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2, - NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2 - ); - - RegistrationAttributes->AttributeFlags = - NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK | - NDIS_MINIPORT_ATTRIBUTES_NDIS_WDM | - NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND; - - RegistrationAttributes->InterfaceType = NdisInterfacePNPBus; - RegistrationAttributes->MiniportAdapterContext = Adapter; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_AllocateAdapter(), status 0x%x\n", ndisStatus)); - - return ndisStatus; - -error: - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], <== N6SdioWdi_AllocateAdapter(), Initialize failed, clean up resources. ndisStatus(%#x)\n", ndisStatus)); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Allocate Adapter Failure", - TraceLoggingLevel(TRACE_LEVEL_FATAL), - TraceLoggingHexUInt32(ndisStatus, "Status")); -#endif - - if( Adapter != NULL ) - CLEANUP_RES_IN_MON(Adapter->ResMonObjWdi, Adapter); - - return ndisStatus; -} - -VOID -N6SdioWdi_FreeAdapter( - _In_ NDIS_HANDLE MiniportAdapterContext - ) -{ - PADAPTER pAdapter = (PADAPTER) MiniportAdapterContext; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==========> N6SdioWdi_FreeAdapter\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Free Adapter", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(pAdapter, "pAdapter")); -#endif - - WDICommandHandleDeinit(pAdapter); - - N6SdioCleanUpInitializedResourcesEx(pAdapter, pAdapter->ResMonObjWdi); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<========== N6SdioWdi_FreeAdapter\n")); -} - -NDIS_STATUS -N6SdioWdi_OpenAdapter( - _In_ NDIS_HANDLE MiniportAdapterContext, - _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER) MiniportAdapterContext; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_OpenAdapter() ==>\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Open Adapter", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(pAdapter, "pAdapter")); -#endif - - pWdi->pWdiInitParameters->OpenAdapterCompleteHandler(pAdapter->pNdisCommon->hNdisAdapter, - N6SdioWdi_TaskOpen(pAdapter, MiniportInitParameters)); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], <== N6SdioWdi_OpenAdapter() \n")); - - return ndisStatus; -} - -NDIS_STATUS -N6SdioWdi_TaskOpen( - _In_ PADAPTER pAdapter, - _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - GUID PowerSetting_GUID = GUID_ACTIVE_POWERSCHEME; - GUID WLANPowerMode_GUID = GUID_WLAN_POWER_MODE; - PRT_SDIO_DEVICE sdiodevice = NULL; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - NDIS_HANDLE MiniportAdapterHandle = NULL; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TaskOpen() ==>\n")); - - sdiodevice = GET_RT_SDIO_DEVICE(pAdapter); - MiniportAdapterHandle = sdiodevice->hNdisAdapter; - - // - // Allocate Tx semaphore before create corresponding Tx thread. - // - PlatformInitializeSemaphore(&sdiodevice->TxSemaphore, 0); - -#if RTL8723_SDIO_IO_THREAD_ENABLE - // - // Allocate IO semaphore before create corresponding IO Handling thread. - // - PlatformInitializeSemaphore(&sdiodevice->IOSemaphore, 0); - -#endif - - // - // Set up synchronization mechanism for NdisTimer objects. - // - N6InitTimerSync(pAdapter); - - // Allocate spin lock. - N6CInitializeSpinLocks(pAdapter); - - // Initialize Ndis events. - n6sdioWdi_InitEvents(sdiodevice); - - //---------------------------------------------------------------------------- - // Initialize variables related to New IO method, 2005.01.06, by rcnjko. - // - NdisAllocateSpinLock( &(sdiodevice->IrpSpinLock) ); - NdisOIDHistoryInit(pAdapter); - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_SpinLock); // Add to resource monitor. - -#if (RK_PLATFORM_SUPPORT == 1) - PlatformInitializeMutex(&sdiodevice->RxHandleIntMutex); -#endif - - // SyncIo Method 2. - KeInitializeEvent( &(sdiodevice->SyncIoEvent), NotificationEvent, TRUE); - - if (WAPI_QuerySetVariable(pAdapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - pNdisCommon->MaxPktSize=NIC_MAX_PACKET_SIZE; - - sdiodevice->nIrpPendingCnt = 0; - RTInitializeListHead( &(sdiodevice->AwbIdleQueue) ); - RTInitializeListHead( &(sdiodevice->AwbWaitQueue) ); - sdiodevice->NumAwb = MAX_AWB_DATA_SIZE; - PrepareSdioAWBs(sdiodevice); - - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_AWBs); // Add to resource monitor. - - N6WdmSdio_Enable(pAdapter); - - sdiodevice->AsynIoIrpPendingCount++; - - // Read the registry parameters - ndisStatus= N6SdioReadRegParameters(sdiodevice); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6SdioReadRegParameters(): Read Registry Parameter Failed!\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioReadRegParameters() successfully.\n")); - } - - // - // We set default hardware type to unknown type to associate common NIC handler first and - // then re-assign correct HW type association handler when the type is recognized. - // 2011.12.30. - // - ndisStatus = NicIFAssociateNIC(pAdapter, HARDWARE_TYPE_MAX); - - // - // Perform SDIO WDM initialization - // - if( !NT_SUCCESS(N6WdmSdio_Initialize(pAdapter) )) - { - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6WdmSdio_Initialize() failed!\n") ); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6WdmSdio_Initialize() successfully.\n")); - } - - if(pAdapter->HardwareType == HARDWARE_TYPE_MAX) - { - if(HAL_ReadTypeID(pAdapter) == RT_STATUS_FAILURE) - goto error; - } - - HAL_SetInterfaceIndex(pAdapter, 0); - - // We should set the correct hardware type to the following function - ndisStatus = NicIFAssociateNIC(pAdapter, pAdapter->HardwareType); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], NicIFAssociateNIC() Failed!\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], NicIFAssociateNIC() successfully.\n")); - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_AsocNIC); // Add to resource monitor. - } - - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], NicIFInitResource().\n")); - NicIFInitResource(pAdapter); - - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], N6UpdateDefaultSetting().\n")); - N6UpdateDefaultSetting(pAdapter); - - N6SdioUpdateDefaultSetting(pAdapter); - - WDI_UpdateDefaultSetting(pAdapter); - - Dot11_UpdateDefaultSetting(pAdapter); - - // - // Initialize SDIO Data transfer related Tx context buffer. - // - if( !NT_SUCCESS(N6SdioInitTxQueue(pAdapter) ) ) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6SdioInitTxQueue() Failed!\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioInitTxQueue() successfully.\n")); - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_SdioTxRes); // Add to resource monitor. - } - - // - // Set SDIO Tx queue mapping - // - if(!pAdapter->HalFunc.HalSdioSetQueueMappingHandler( - pAdapter, (u1Byte)sdiodevice->RtNumRxQueue, (u1Byte)sdiodevice->RtNumTxQueue)) - { - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6SdioWdi_AllocateAdapter(), Set SDIO Tx Queue mapping failed!\n") ); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_AllocateAdapter(), Set SDIO Tx Queue mapping successfully.\n")); - } - - // Enable all Tx Queues. - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], N6WdmSdioTx_Enable().\n")); - N6WdmSdioTx_Enable(pAdapter); - - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_SdioInit); // Add to resource monitor. - - // Read adapter information such as MAC address from EEPROM - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], NicIFReadAdapterInfo().\n")); - NicIFReadAdapterInfo(pAdapter); - - NDBG_Init(pAdapter); - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], HT_UpdateDefaultSetting().\n")); - HT_UpdateDefaultSetting(pAdapter); - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], VHT_UpdateDefaultSetting().\n")); - VHT_UpdateDefaultSetting(pAdapter); - - //Initialize Ndis 6.2, Ndis 6.0 only return success. - ndisStatus = NDIS_6_2_INITIALIZE_EXTENSION_COMPONENT(pAdapter,MiniportAdapterHandle,MiniportInitParameters); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N62CInitialize() failed\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N62CInitialize() successfully.\n")); - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_N62CInit); - } - - // - // Update default setting to HalData. - // - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_LED, &(sdiodevice->bRegLedCtrl)); - - // - // Support WoW for future use. Added by Roger, 2008.12.30. - // - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_WOWLAN, &(sdiodevice->bSupportRemoteWakeUp)); - - // Settings for HctTest. - if(pAdapter->bInHctTest) - { - // For NDIS6 DOT11_STATISTICS test, we must open CRC, ICV error. - // Revise this handler for DTM test, 2008.12.16, added by Roger. - pAdapter->HalFunc.AllowErrorPacketHandler(pAdapter, TRUE, FALSE); - } - - // - // For usb selective suspend configuration. Added by Roger, 2010.04.16. - // - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_USB_SELECTIVE_SUSPEND, &(sdiodevice->RegUsbSS)); - - // - // 2011/09/07 MH Add TX power for different channel plan. - // - RT_TRACE(COMP_INIT, DBG_TRACE, - ("[WDI], power offset MKK = %08x/%08x/%08x ETSI = %08x/%08x/%08x\n", - sdiodevice->RegGainOffsetMKKLow, sdiodevice->RegGainOffsetMKK, sdiodevice->RegGainOffsetMKKHigh, - sdiodevice->RegGainOffsetETSILow, sdiodevice->RegGainOffsetETSI, sdiodevice->RegGainOffsetETSIHigh)); - - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_FCC_LOW, &(sdiodevice->RegGainOffsetFCCLow)); - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_FCC, &(sdiodevice->RegGainOffsetFCC)); - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_FCC_HIGH, &(sdiodevice->RegGainOffsetFCCHigh)); - - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_MKK_LOW, &(sdiodevice->RegGainOffsetMKKLow)); - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_MKK, &(sdiodevice->RegGainOffsetMKK)); - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_MKK_HIGH, &(sdiodevice->RegGainOffsetMKKHigh)); - - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_ETSI_LOW, &(sdiodevice->RegGainOffsetETSILow)); - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_ETSI, &(sdiodevice->RegGainOffsetETSI)); - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_GAIN_OFFSET_ETSI_HIGH, &(sdiodevice->RegGainOffsetETSIHigh)); - - N6SdioAllocRes(pAdapter); - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], N6SdioAllocRes() successfully.\n")); - - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_AllocSdioRes); // Add Usb related resource monitoring. - - sdiodevice->CurrentPowerState = NdisDeviceStateD0; - - ndisStatus=NicIFAllocateMemory(pAdapter); - if(ndisStatus!=NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], NicIFAllocateMemory failed\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], NicIFAllocateMemory()\n")); - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_AllocMem); // Add to resource monitor. - } - - pAdapter->bInitComplete = TRUE; - N6CInitThread((PVOID)pAdapter); - - ADAPTER_SET_STATUS_FLAG(pAdapter, ADAPTER_STATUS_FIRST_INIT); - ndisStatus = NicIFInitializeAdapter(pAdapter); - if( ndisStatus != NDIS_STATUS_SUCCESS ) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], NicIFInitializeAdapter() failed!!\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], NicIFInitializeAdapter() successfully.\n")); - } - ADAPTER_CLEAR_STATUS_FLAG(pAdapter, ADAPTER_STATUS_FIRST_INIT); - - // - // HCT12.0 2c_AddressChange. - // Note that, Adapter->CurrentAddress and Adapter->PermanentAddress had been - // set up in NicIFInitializeAdapter(). - // - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], Set MAC Address\n")); - if(pNdisCommon->bOverrideAddress) - { - NicIFSetMacAddress(pAdapter, pNdisCommon->CurrentAddress); - } - else - { - ETH_COPY_NETWORK_ADDRESS(pNdisCommon->CurrentAddress, pAdapter->PermanentAddress); - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], MAC Address: 0x%x:0x%x:0x%x:0x%x:0x%x:0x%x\n", - pNdisCommon->CurrentAddress[0], - pNdisCommon->CurrentAddress[1], - pNdisCommon->CurrentAddress[2], - pNdisCommon->CurrentAddress[3], - pNdisCommon->CurrentAddress[4], - pNdisCommon->CurrentAddress[5])); - - // - // Before setting of attributes, update the native 802.11 related variable. - // 2006.10.09, by shien chang. - // - ndisStatus = N6SdioAllocateNative80211MIBs(pAdapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6SdioAllocateNative80211MIBs() failed\n")); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioAllocateNative80211MIBs() successfully.\n")); - } - - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_AllocNWifi); // Add to resource monitor. - - N6InitializeNative80211MIBs(pAdapter); - - //Get Ndis Version - pMgntInfo->NdisVersion = MgntTranslateNdisVersionToRtNdisVersion(pNdisCommon->NdisVersion); - - // At the moment, if HW is unpluged, fail the initialization immediate. - if (pAdapter->bSurpriseRemoved) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], Adapter is unpluged, fail the init process.\n")); - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - goto error; - } - - // - // Set Power config callback, 2009.03.18, by lanhsin. - // - ntStatus = PoRegisterPowerSettingCallback( - NULL, - (LPGUID)(&PowerSetting_GUID), - (PPOWER_SETTING_CALLBACK)&N6SdioPowerSettingCallback, - (PVOID)pAdapter, - &pNdisCommon->N6PowerSettingHandle - ); - if (ntStatus != STATUS_SUCCESS) - { - ndisStatus = NDIS_STATUS_FAILURE; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], register N6SdioPowerSettingCallback() Failed, ntStatus = 0x%x\n", ntStatus)); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], register N6SdioPowerSettingCallback() successfully.\n")); - } - - ntStatus = PoRegisterPowerSettingCallback( - NULL, - (LPGUID)(&WLANPowerMode_GUID), - (PPOWER_SETTING_CALLBACK)&N6SdioWLANPowerModeCallback, - (PVOID)pAdapter, - &pNdisCommon->N6WLANPowerModeHandle - ); - if (ntStatus != STATUS_SUCCESS) - { - ndisStatus = NDIS_STATUS_FAILURE; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], register N6SdioWLANPowerModeCallback() Failed, ntStatus = 0x%x\n", ntStatus)); - goto error; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], register N6SdioWLANPowerModeCallback() successfully.\n")); - } - - InitNdis6CommonResources(pAdapter); - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_CommonRS); - - // We disable Rx aggregation for WiFi test. 2008.11.25. - if(pMgntInfo->bWiFiConfg || pAdapter->bInHctTest) - pAdapter->HalFunc.HalRxAggrHandler(pAdapter, FALSE); - - //This is sw initialize ready. - pAdapter->bSWInitReady=TRUE; - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - // After this adapter is initialzied ready, insert this adapter to the list. - INSERT_GLOBAL_ADAPTER_LIST(pAdapter); - - // - // Register the Device object for this adapter! - // Note: - // No matter the returned status of registration is success or not, the result has no - // effect on the status for Miniportinitialize. - // So, the resiteration process should be placed in the success location of Initialization. - // By Bruce, 2011-07-07. - // - if(RT_STATUS_SUCCESS != (RtStatus = N6C_RegisterIoDevice(pAdapter))) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6C_RegisterIoDevice() failed for status = %d\n", RtStatus)); - } - ADD_RES_TO_MON(pAdapter->ResMonObjWdi, InitRM_BTIODevice); - } - - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSED); - - WDICommandHandleInit(pAdapter); - - pAdapter->initfinish = TRUE; - pAdapter->bInitComplete = TRUE; - DrvIFIndicateCurrentPhyStatus(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_AllocateAdapter(), status 0x%x\n", ndisStatus)); - - return ndisStatus; - -error: - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], <== N6SdioWdi_AllocateAdapter(), Initialize failed, clean up resources. ndisStatus(%#x)\n", ndisStatus)); - - if( pAdapter != NULL ) - CLEANUP_RES_IN_MON(pAdapter->ResMonObjWdi, pAdapter); - - return ndisStatus; -} - -NDIS_STATUS -N6SdioWdi_CloseAdapter( - _In_ NDIS_HANDLE MiniportAdapterContext - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER) MiniportAdapterContext; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_CloseAdapter() ==>\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Close Adapter", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(pAdapter, "pAdapter")); -#endif - - pWdi->pWdiInitParameters->CloseAdapterCompleteHandler(pAdapter->pNdisCommon->hNdisAdapter, N6SdioWdi_TaskClose(pAdapter)); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_CloseAdapter() <==\n")); - - return ndisStatus; -} - -NDIS_STATUS -N6SdioWdi_TaskClose( - _In_ PADAPTER pAdapter - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TaskClose() ==> \n")); - - do - { - u1Byte RFInProgressTimeOut = 0; - - PlatformAcquireSpinLock(pAdapter,RT_RF_STATE_SPINLOCK); - while( pAdapter->MgntInfo.RFChangeInProgress) - { - PlatformReleaseSpinLock(pAdapter,RT_RF_STATE_SPINLOCK); - - RT_TRACE(COMP_POWER,DBG_LOUD, - ("[WDI], RF is in progress, need to wait until rf chang is done.\n")); - delay_ms(1); - RFInProgressTimeOut ++; - PlatformAcquireSpinLock(pAdapter,RT_RF_STATE_SPINLOCK); - } - pAdapter->MgntInfo.RFChangeInProgress = TRUE; - PlatformReleaseSpinLock(pAdapter,RT_RF_STATE_SPINLOCK); - - pAdapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - NicIFHaltAdapter(pAdapter, FALSE); - - PlatformAcquireSpinLock(pAdapter,RT_RF_STATE_SPINLOCK); - pAdapter->MgntInfo.RFChangeInProgress = FALSE; - PlatformReleaseSpinLock(pAdapter,RT_RF_STATE_SPINLOCK); - - RT_SET_DRV_STATE(pAdapter, DrvStateHwHalted); - - pAdapter->HalFunc.WaitForH2CQueueEmptyHandler(pAdapter); - - pAdapter->bDriverStopped = TRUE; - - // - // Mark the miniport driver as halted state. - // - //RT_ASSERT( (N6C_GET_MP_DRIVER_STATE(pAdapter) == MINIPORT_PAUSED), - // ("MiniportHalt(): DriverState(%d) != PAUSED !!!\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_HALTED); - - //double check to avoid race condition that causes double complete here - if( pWdi->TaskHandle.Status & RT_OID_HANDLER_STATUS_SET ) - { - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } - - if( pWdi->PropertyHandle.Status & RT_OID_HANDLER_STATUS_SET ) - { - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_PROPERTY); - } - }while(FALSE); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TaskClose() <== \n")); - - return ndisStatus; -} - -NDIS_STATUS -N6SdioWdi_StartOperation( - _In_ NDIS_HANDLE MiniportAdapterContext - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER) MiniportAdapterContext; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PPORT_COMMON_INFO pPortCommonInfo = pAdapter->pPortCommonInfo; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_StartOperation() ==> \n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Start Operation", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(pAdapter, "pAdapter")); -#endif - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], NicIFClearInterrupt()\n")); - NicIFClearInterrupt(pAdapter); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], NicIFEnableInterrupt()\n")); - NicIFEnableInterrupt(pAdapter); - - PlatformInitializeSemaphore(&(pNdisCommon->RxNotifySemaphore), 0); - - PlatformInitializeThread( - pAdapter, - &(pAdapter->RxNotifyThread), - (RT_THREAD_CALL_BACK)RxNotifyThreadCallback, - "RxIndicationThread", - TRUE, - 0, - NULL); - - PlatformRunThread( - pAdapter, - &(pAdapter->RxNotifyThread), - PASSIVE_LEVEL, - NULL); - - MgntActSet_802_11_PowerSaveMode(pAdapter, pAdapter->MgntInfo.dot11PowerSaveMode); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_StartOperation() <== \n")); - - return ndisStatus; -} - -void -N6SdioWdi_StopOperation( - _In_ NDIS_HANDLE MiniportAdapterContext - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER) MiniportAdapterContext; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_StopOperation ==>\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Stop Operation", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(pAdapter, "pAdapter")); -#endif - - //1 leave all power save mode before bDriverIsGoingToUnload, otherwise driver will disable interrupt. - LeaveAllPowerSaveMode(pAdapter); - - pAdapter->bDriverIsGoingToUnload = TRUE; - - RT_SET_DRV_STATE(pAdapter, DrvStateHwHalting); - - MgntResetJoinProcess(pAdapter); - N6C_DeregisterIoDevice(pAdapter); - REMOVE_GLOBAL_ADAPTER_LIST(pAdapter); - - //1 Stop Watchdog timer - //Add bDriverIsGoingToUnload checking at watchdog timer to stop dynamic architecture and will be released later. - - //1 Disable BulkIn/BulkOut to avoid incoming data during mac/port deletion. - //1 MUST be the bottom of StopOperation - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], NicIFDisableInterrupt()!!\n")); - NicIFDisableInterrupt(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_StopOperation <==\n")); -} - -NDIS_STATUS -N6SdioWdi_HangDiagnose( - _In_ NDIS_HANDLE MiniportDriverContext, - _In_ eDiagnoseLevel DiagnoseLevel, - _In_ UINT32 BufferSize, - _Out_writes_bytes_to_( BufferSize, *pOutputSize ) - UINT8 * FirmwareBlob, - _Out_ UINT32* pOutputSize - ) -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER) MiniportDriverContext; - UINT32 BufferSizeDumped = 0; - UINT8* pBufferDumped = NULL; - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample HangDiagnose", - TraceLoggingLevel(TRACE_LEVEL_ERROR), - TraceLoggingUInt32(DiagnoseLevel, "DiagnoseLevel"), - TraceLoggingUInt32(BufferSize, "BufferSize")); -#endif - - if(MiniportDriverContext == NULL || - FirmwareBlob == NULL || - pOutputSize == NULL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI] N6SdioWdi_HangDiagnose() Invalid parameter!\n")); - return NDIS_STATUS_INVALID_PARAMETER; - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI] N6SdioWdi_HangDiagnose() Miniport:%p level:%d BufferSize:%d\n", - MiniportDriverContext, - DiagnoseLevel, - BufferSize)); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("HangDiagnose Level:%d BufferSize:%d\n", DiagnoseLevel, BufferSize)); - - switch (DiagnoseLevel) - { - case DiagnoseLevelHardwareRegisters: - //dump register here - break; - case DiagnoseLevelFirmwareImageDump: - //dump fw image - break; - case DiagnoseLevelDriverStateDump: - //dump driver state - break; - default: - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI] N6SdioWdi_HangDiagnose() DiagnoseLevel %d invalid.\n", DiagnoseLevel)); - break; - } - - *pOutputSize = BufferSizeDumped; - FirmwareBlob = pBufferDumped; - - //do the WDICommandHangCleanup in surprise remove to complete the hanging Command - pAdapter->pPortCommonInfo->WdiData.bCommandHangHappened = TRUE; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI] N6SdioWdi_HangDiagnose() OutputSize:%d Status:0x%x\n", - *pOutputSize, - Status)); - - return Status; -} - -NDIS_STATUS -N6SdioWdi_TalTxRxInitialize( - _In_ NDIS_HANDLE MiniportAdapterContext, - _In_ NDIS_HANDLE NdisMiniportDataPathHandle, - _In_ PNDIS_WDI_DATA_API NdisWdiDataPathApi, - _Out_ PTAL_TXRX_HANDLE pMiniportTalTxRxContext, - _Inout_ PNDIS_MINIPORT_WDI_DATA_HANDLERS pMiniportDataHandlers, - _Out_ UINT32 * pMiniportWdiFrameMetaDataExtraSpace ) // request exta bytes at the tail -{ - NDIS_STATUS Status = NDIS_STATUS_FAILURE; - PADAPTER Adapter = (PADAPTER) MiniportAdapterContext; - PWDI_DATA_STRUCT pWdi = NULL; - NDIS_MINIPORT_WDI_DATA_HANDLERS WdiDataHandlers = {0}; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TalTxRxInitialize() ==> \n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample TalTxRxInitialize", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(Adapter, "Adapter")); -#endif - - do - { - RtlZeroMemory(&GLWdiTxRxStatistics, sizeof(WDI_TXRX_STATISTICS)); - - // Store Handle for Wdi Data Path - pWdi = &(Adapter->pPortCommonInfo->WdiData); - pWdi->DataPathHandle = NdisMiniportDataPathHandle; - - *pMiniportWdiFrameMetaDataExtraSpace = 0; - *pMiniportTalTxRxContext = NULL; - - // - // Init Rx NetBufferListPool, - // - Status = N6SdioAllocateRxNetBufferListPool(Adapter); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6SdioAllocateRxNetBufferListPool() failed Status: %#X!\n", Status)); - break; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioAllocateRxNetBufferListPool() successfully.\n")); - ADD_RES_TO_MON(Adapter->ResMonObjWdi, InitRM_AllocRxNBLPool); // Add to resource monitor. - } - - // Link Wdi Data Api - RtlCopyMemory(&pWdi->WdiDataApi, NdisWdiDataPathApi,sizeof(NDIS_WDI_DATA_API)); - - *pMiniportTalTxRxContext = Adapter; - - // Initialize Wdi Data Path Handlers - RtlZeroMemory(&WdiDataHandlers, sizeof(NDIS_MINIPORT_WDI_DATA_HANDLERS)); - - N6_ASSIGN_OBJECT_HEADER( - WdiDataHandlers.Header, - NDIS_OBJECT_TYPE_MINIPORT_WDI_DATA_HANDLERS, - NDIS_OBJECT_TYPE_MINIPORT_WDI_DATA_HANDLERS_REVISION_1, - NDIS_SIZEOF_MINIPORT_WDI_DATA_HANDLERS_REVISION_1); - - WdiDataHandlers.TxAbortHandler = N6SdioWdi_TxAbort; - WdiDataHandlers.TxTargetDescInitHandler = N6SdioWdi_TxTargetDescInit; - WdiDataHandlers.TxTargetDescDeInitHandler = N6SdioWdi_TxTargetDescDeInit; - WdiDataHandlers.TxDataSendHandler = N6SdioWdi_TxDataSend; - WdiDataHandlers.TxTalSendHandler = N6SdioWdi_TxTalSend; - WdiDataHandlers.TxTalSendCompleteHandler = N6SdioWdi_TxTalSendComplete; - WdiDataHandlers.TxTalQueueInOrderHandler = N6SdioWdi_TxTalQueueInOrder; - WdiDataHandlers.TxPeerBacklogHandler = N6SdioWdi_TxPeerBacklog; - - WdiDataHandlers.RxStopHandler = N6SdioWdi_RxStop; - WdiDataHandlers.RxFlushHandler = N6SdioWdi_RxFlush; - WdiDataHandlers.RxRestartHandler = N6SdioWdi_RxRestart; - WdiDataHandlers.RxGetMpdusHandler = N6SdioWdi_RxGetMpdus; - WdiDataHandlers.RxReturnFramesHandler = N6SdioWdi_RxReturnFrames; - WdiDataHandlers.RxResumeHandler = N6SdioWdi_RxResume; - WdiDataHandlers.RxThrottleHandler = N6SdioWdi_RxThrottle; - WdiDataHandlers.RxPpduRssiHandler = N6SdioWdi_RxPpduRssi; - - WdiDataHandlers.TalTxRxStartHandler = N6SdioWdi_TalTxRxStart; - WdiDataHandlers.TalTxRxStopHandler = N6SdioWdi_TalTxRxStop; - WdiDataHandlers.TalTxRxAddPortHandler = N6SdioWdi_TalTxRxAddPort; - WdiDataHandlers.TalTxRxDeletePortHandler = N6SdioWdi_TalTxRxDeletePort; - WdiDataHandlers.TalTxRxSetPortOpModeHandler = N6SdioWdi_TalTxRxSetPortOpMode; - WdiDataHandlers.TalTxRxResetPortHandler = N6SdioWdi_TalTxRxResetPort; - WdiDataHandlers.TalTxRxPeerConfigHandler = N6SdioWdi_TalTxRxPeerConfig; - WdiDataHandlers.TalTxRxPeerDeleteConfirmHandler = N6SdioWdi_TalTxRxPeerDeleteConfirm; - - RtlCopyMemory(pMiniportDataHandlers,&WdiDataHandlers,sizeof(NDIS_MINIPORT_WDI_DATA_HANDLERS)); - - if(Adapter->bUseThreadHandleInterrupt) - { - PlatformSetEventTrigerThread( - Adapter, - &Adapter->InterruptThread, - PASSIVE_LEVEL, - NULL); - } - - N6C_SET_MP_DRIVER_STATE(Adapter, MINIPORT_RUNNING); - }while(FALSE); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TalTxRxInitialize() <== \n")); - - return Status; -} - - -VOID -N6SdioWdi_TalTxRxDeinitialize( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - PADAPTER Adapter = (PADAPTER) MiniportTalTxRxContext; - PRT_SDIO_DEVICE pDevice = &(Adapter->NdisSdioDev); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TalTxRxDeinitialize ==>\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample TalTxRxDeinitialize", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(Adapter, "Adapter")); -#endif - - RT_DISABLE_SDIO_TX_TRANSFERS(Adapter); // Disable Tx - RT_DISABLE_SDIO_RX_TRANSFERS(Adapter); // Disable Rx - - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], Before ReleaseDataFrameQueued()\n")); - N6SdioReleaseTxQueuePending(Adapter); - ReleaseDataFrameQueued(Adapter); - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], After ReleaseDataFrameQueued()\n")); - WDI_DeInitRxQueue(Adapter); - - if (pDevice->RxNetBufferListPool) - { - N6SdioFreeRxNetBufferListPool(Adapter); - } - - NicIFClearInterrupt(Adapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TalTxRxDeinitialize <==\n")); -} - - -// -// Description: -// This function is called when WDI send NBLs -// -// Output: -// Return corresponding RT_STATUS for processing NBLs. -// -// Assumption: -// 1. RT_TX_SPINLOCK is acquired. -// -RT_STATUS -N6SdioWdi_DataSend( - _In_ PADAPTER pAdapter, - _In_ PNET_BUFFER_LIST pNBLs - ) -{ - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - PRT_SDIO_DEVICE pDevice = &(pAdapter->NdisSdioDev); - PRT_TCB pTcb = NULL; - PNET_BUFFER_LIST pCurrNetBufferList = NULL, pNextNetBufferList = NULL; - PNET_BUFFER pNetBuffer = NULL, pNextNetBuffer = NULL; - - PDOT11_EXTSTA_SEND_CONTEXT pDot11SendContext = NULL; - u2Byte ExemptionActionType = 0; // 0:Auto 1:encrypt 2:no encrypt 3: key UNAVAILABLE - NDIS_NET_BUFFER_LIST_8021Q_INFO NBL8021qInfo; - u1Byte Priority = 0; - u4Byte numNBLCnt=0; - - for (pCurrNetBufferList = pNBLs; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - numNBLCnt++; - GLWdiTxRxStatistics.numWdiTxNBLs++; - pDevice->SendingNetBufferList = pCurrNetBufferList; - - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - - // - // Parse per-NBL information. - // - pDot11SendContext = (PDOT11_EXTSTA_SEND_CONTEXT) NET_BUFFER_LIST_INFO(pCurrNetBufferList, MediaSpecificInformation); - switch( pDot11SendContext->usExemptionActionType ) - { - case DOT11_EXEMPT_NO_EXEMPTION : - ExemptionActionType = 1; - break; - case DOT11_EXEMPT_ALWAYS : - ExemptionActionType = 2; - break; - case DOT11_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE : - ExemptionActionType = 3; - break; - default : - ExemptionActionType = 0; - break; - } - - // - // Parse WMM info - // - //if(pStaQos->CurrentQosMode != QOS_DISABLE) // this only for OP mode in EXTSTA. //chedu default port one//?? need modify Neo - { - NBL8021qInfo.Value = NET_BUFFER_LIST_INFO(pCurrNetBufferList, Ieee8021QNetBufferListInfo); - Priority = (u1Byte)NBL8021qInfo.WLanTagHeader.WMMInfo; - if (Priority > 7) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("[WDI], N6PciWdiTargetDescInit(): WMMInfo should less or equal than 7 (%d)\n", Priority)); - Priority = 0; - } - } - - for(pNetBuffer = NET_BUFFER_LIST_FIRST_NB(pCurrNetBufferList); - pNetBuffer != NULL; - pNetBuffer = pNextNetBuffer) - { - // - // Out of Tx resource. - // - if( RTIsListEmpty(GET_TCB_IDLE_QUEUE(pAdapter)) ) - { - RT_ASSERT(FALSE, ("[WDI], N6SdioWdi_DataSend(): GET_TCB_IDLE_QUEUE is empty! SHOULD NOT REACH HERE!!!\n")); - pAdapter->TxStats.NumOutOfTCB++; - RtStatus = RT_STATUS_RESOURCE; - break; - } - - pNextNetBuffer = NET_BUFFER_NEXT_NB(pNetBuffer); - - // - // We have enough Tx resource to send this NB. - // - pAdapter->TxStats.numTcbOk++; - pTcb = (PRT_TCB)RTRemoveHeadListWithCnt(GET_TCB_IDLE_QUEUE(pAdapter),Get_NUM_IDLE_TCB(pAdapter)); - //RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_DataSend(), get pTcb=0x%x, Adapter->NumIdleTcb = %d\n", (u4Byte)pTcb, *Get_NUM_IDLE_TCB(pAdapter))); - GLWdiTxRxStatistics.numWdiTxTcbs++; - - pTcb->sysTime[0] = PlatformGetCurrentTime(); - pTcb->Reserved = pCurrNetBufferList; // Should we need to remove this variable later? - - // - // Add per-NBL info into TCB. - // - pTcb->priority = Priority; // Qos information. 2007.01.05, by shien chang. - pTcb->EncInfo.ExemptionActionType = ExemptionActionType; // by CCW. - //pTcb->TcpOffloadMode = TcpCheckSumValue; - pTcb->pAdapter = pAdapter; - - //RT_TRACE(COMP_SEND, DBG_LOUD, ("[WDI], N6SdioWdi_DataSend(), pTcb 0x%x to go!!!\n", pTcb)); - - // this is a NB associated with a TCB - pAdapter->MgntInfo.OutstandingNdisPackets++; - - if(N6SdioGetPacketBuffers(pAdapter, pNetBuffer, pTcb) && - !pAdapter->bInHctTest) - { - // - // Set up TCB. - // - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->BufferType = RT_TCB_BUFFER_TYPE_SYSTEM; - if ( IsDataFrame(pTcb->BufferList[0].VirtualAddress) ) - { - pTcb->SpecifiedQueueID = UNSPECIFIED_QUEUE_ID; //LOW_QUEUE; // Rewrited by Annie, 2005-12-05. - } - else - { - pTcb->SpecifiedQueueID = NORMAL_QUEUE; - } - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->bFromUpperLayer = TRUE; - pTcb->FragCount = 1; - pTcb->TSID = DEFAULT_TSID; - - // - // Send TCB down. - // - if(ACTING_AS_AP(pAdapter) == FALSE) - { - BOOLEAN bCompleteAfterSend; - - bCompleteAfterSend = NicIFSendPacket(pAdapter, pTcb); - - if (bCompleteAfterSend) - { - // - // Complete the NB ASAP to enhance throughput for some application, such as iPerf. - // Note that, we can complete the NB here because it - // had been coalesced in PreTransmitTCB(). - // - - // In WDI, if we need to set pTcb->Reserved to NULL, we have to handle the completion - // of the NBL when reference cnt = 0. later - // Currently we don't set the pTcb->Reserved to NULL as design such that the completion - // can be handled in ReturnTcb(). - - //pTcb->Reserved = NULL; - } - } - else - { - // - // 07525, rcnjko: - // AP_PS_SendPacket() will queue the packet to send in proper queue if necessary. - // So, we must gurantee the buffers referenced in the TCB is still valid, - // that is, not yet compelted to upper layer. - // - NicIFSendPacket(pAdapter, pTcb); - } - - GLWdiTxRxStatistics.numWdiTxNicSend++; - } - else - { - // - // Case 2.2 Too many buffers in the NB, send it in coalesced way. - // - N6SdioSendCoalescedNetBuffer( pAdapter, pNetBuffer, pTcb); - GLWdiTxRxStatistics.numWdiTxCoalesce++; - } - } - } - - if(GLWdiTxRxStatistics.maxDeqNBL < numNBLCnt) - GLWdiTxRxStatistics.maxDeqNBL = numNBLCnt; - - // - // We are now ready to process another NBL. - // - pDevice->SendingNetBufferList = NULL; - - return RtStatus; -} - -void N6SdioWdi_TxAbort( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_PEER_ID PeerId, - _Out_ PNDIS_STATUS pWifiStatus) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_INIT); - - ReleaseDataFrameQueued(pAdapter); - - //complete inline - *pWifiStatus = NDIS_STATUS_SUCCESS; - - FunctionOut(COMP_INIT); -} - -// -// Assumption: WDI interface independent -// -void N6SdioWdi_TxTargetDescInit( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ PNET_BUFFER_LIST pNBL, - _Out_ PNDIS_STATUS pWifiStatus) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PWDI_FRAME_METADATA pFrameMeta = NULL; - PNET_BUFFER pNetBuffer = NULL; - u2Byte NetBufferCount = 0; - - GLWdiTxRxStatistics.numWdiTxDescInit++; - - FunctionIn(COMP_SEND); - - //Fill in cost - pFrameMeta = (PWDI_FRAME_METADATA)pNBL->MiniportReserved[0]; - - NetBufferCount = 0; - for(pNetBuffer = NET_BUFFER_LIST_FIRST_NB(pNBL); - pNetBuffer != NULL; - pNetBuffer = NET_BUFFER_NEXT_NB(pNetBuffer)) - { - NetBufferCount ++; - } - - *pWifiStatus = NDIS_STATUS_SUCCESS; - - RT_WDI_NBL_SET_REF_CNT(pNBL, (NetBufferCount)); - pFrameMeta->u.txMetaData.TxCost = NetBufferCount; - - if(NetBufferCount > GLWdiTxRxStatistics.maxTxNBInNBL) - GLWdiTxRxStatistics.maxTxNBInNBL = NetBufferCount; - - FunctionOut(COMP_SEND); -} - - -void N6SdioWdi_TxTargetDescDeInit( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ PNET_BUFFER_LIST pNBL) -{ - FunctionIn(COMP_SEND); - - GLWdiTxRxStatistics.numWdiTxDescDeInit++; - - FunctionOut(COMP_SEND); -} - - -void N6SdioWdi_TxDataSend( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_PEER_ID PeerId, - _In_ WDI_EXTENDED_TID ExTid, - _In_ UINT16 NumQueueFrames, -#ifndef WDI_83_COMPLIANT - _In_ UINT32 NumActiveFrames, -#endif // WDI_83_COMPLIANT - _In_ BOOLEAN bRobustnessFlag) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PNET_BUFFER_LIST pDequeuedNbls = NULL; - PADAPTER pTargetAdapter = NULL; - u2Byte txCredit=0; - - FunctionIn(COMP_SEND); - - UNREFERENCED_PARAMETER(PeerId); - UNREFERENCED_PARAMETER(ExTid); - UNREFERENCED_PARAMETER(NumQueueFrames); - UNREFERENCED_PARAMETER(bRobustnessFlag); - - do - { - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)PortId); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - txCredit = *Get_NUM_IDLE_TCB(pAdapter); - if(txCredit) - { - // Dequeue NBLs from WDI. - pWdi->WdiDataApi.TxDequeueIndication(pWdi->DataPathHandle, - WDI_QUANTUM_INVALID, // quantum: don't care total length of packets - WDI_TX_MAX_FRAME_COUNT_INVALID, // max frame count: dequeue as much as we can. - txCredit, // credit: number of idle Tcb - &pDequeuedNbls); - } - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - // can not dequeue any frames, indicate PauseIndication to upper layer. - // here we assume that only credit not enough that we can not dequeue any frames. - // so when sendPauseIndication, we set the Tx pause reason by credit. - if(!pDequeuedNbls) - { - GLWdiTxRxStatistics.numWdiTxPauseIndicate++; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TxDataSend(), txCredit=%d\n", txCredit)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TxDataSend(), PortId=0x%x, PeerId=0x%x\n", PortId, PeerId)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TxDataSend(), pTargetAdapter=0x%p, pWdi=0x%p\n", pTargetAdapter, pWdi)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TxDataSend(): TxSendPauseIndication, count=%d!!!\n", - GLWdiTxRxStatistics.numWdiTxPauseIndicate)); - - pWdi->WdiDataApi.TxSendPauseIndication(pWdi->DataPathHandle, - WDI_PORT_ANY, - WDI_PEER_ANY, - WDI_EXT_TID_UNKNOWN, - WDI_TX_PAUSE_REASON_CREDIT); - //PlatformAtomicExchange(&pWdi->txPauseReason, pWdi->txPauseReason|WDI_TX_PAUSE_REASON_CREDIT); - // here we use tx spinlock to protect txPauseReason. - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - pWdi->txPauseReason |= WDI_TX_PAUSE_REASON_CREDIT; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], N6SdioWdi_TxDataSend(): pWdi->txPauseReason=0x%x!!!\n", pWdi->txPauseReason)); - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - break; - } - - // can not process Tx, complete to WDI immediately. - if( N6SDIO_CANNOT_TX(pTargetAdapter) || (!N6_INIT_READY(pTargetAdapter))) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("[WDI], N6SdioWdi_TxDataSend(): N6SDIO_CANNOT_TX, drop the packets.\n")); - GLWdiTxRxStatistics.numWdiTxDataSendDrop++; - pWdi->WdiDataApi.TxTransferCompleteIndication(pWdi->DataPathHandle,WDI_TxFrameStatus_TransferFailed,pDequeuedNbls); - break; - } - GLWdiTxRxStatistics.numWdiTxDataSend++; - - // have enough credit(Tcb), can process NBLs. - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - N6SdioWdi_DataSend(pTargetAdapter, pDequeuedNbls); - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } while(FALSE); - - FunctionOut(COMP_SEND); -} - -// -// Interface to send frame injected(TxInjectFrameIndication) by LE through data path. -// 8723BS do not inject mgnt frame because there is specific handling in lower level. -// -void N6SdioWdi_TxTalSend( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_PEER_ID PeerId, - _In_ WDI_EXTENDED_TID ExTid, - _In_ UINT16 NumQueueFrames, -#ifndef WDI_83_COMPLIANT - _In_ UINT32 NumActiveFrames, -#endif // WDI_83_COMPLIANT - _In_ BOOLEAN bRobustnessFlag) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - PADAPTER Adapter = (PADAPTER) MiniportTalTxRxContext; - PWDI_DATA_STRUCT pWdi = &(Adapter->pPortCommonInfo->WdiData); - PNET_BUFFER_LIST pDequeuedNbls = NULL; - - FunctionIn(COMP_SEND); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - UNREFERENCED_PARAMETER(PeerId); - UNREFERENCED_PARAMETER(ExTid); - UNREFERENCED_PARAMETER(NumQueueFrames); - UNREFERENCED_PARAMETER(bRobustnessFlag); - - pWdi->WdiDataApi.TxDequeueIndication(pWdi->DataPathHandle, 20000, 1, 8, &pDequeuedNbls); - - pWdi->WdiDataApi.TxTransferCompleteIndication(pWdi->DataPathHandle,WDI_TxFrameStatus_Ok,pDequeuedNbls); - - FunctionOut(COMP_SEND); -} - - -void N6SdioWdi_TxTalSendComplete( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ PNET_BUFFER_LIST pNBL, - _In_ WDI_TX_FRAME_STATUS TxFrameStatus) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - PNET_BUFFER_LIST pCurNbl = NULL; - PNET_BUFFER_LIST pNextNbl = NULL; - - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("[WDI], Frame status = %x", TxFrameStatus)); - - pCurNbl = pNBL; - - while (pCurNbl != NULL) - { - pNextNbl = NET_BUFFER_LIST_NEXT_NBL(pCurNbl); - NET_BUFFER_LIST_NEXT_NBL(pCurNbl) = NULL; - - NdisFreeNetBufferList(pCurNbl); - - pCurNbl = pNextNbl; - } - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TxTalQueueInOrder( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PEER_ID PeerId, - _In_ UINT32 ExTidBitmask) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PeerId); - UNREFERENCED_PARAMETER(ExTidBitmask); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TxPeerBacklog( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_PEER_ID PeerId, - _In_ BOOLEAN bBacklogged) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - UNREFERENCED_PARAMETER(PeerId); - UNREFERENCED_PARAMETER(bBacklogged); - - FunctionOut(COMP_INIT); -} - -void N6SdioWdi_RxStop( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _Out_ PNDIS_STATUS pWifiStatus) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PADAPTER pAdapterByPortNum = NULL; - PADAPTER pTempAdapter = NULL; - PRT_NDIS6_COMMON pNdisCommon = NULL; - BOOLEAN bNotifying = FALSE; - - FunctionIn(COMP_INIT); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], stop rx at Port_ID %d\n", PortId)); - - PlatformAcquireSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - if( PortId != WDI_PORT_ANY ) - { - pAdapterByPortNum = GetAdapterByPortNum(pAdapter, (u1Byte)PortId); - if( pAdapterByPortNum == NULL ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("[WDI], Cannot find Port Id(%d)\n", PortId)); - *pWifiStatus = NDIS_STATUS_FAILURE; - } - else - { - pNdisCommon = pAdapterByPortNum->pNdisCommon; - if( pNdisCommon->bRxControlState == RT_RX_NOTIFYING ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Driver change Rx control state to Prepare Stop mode for port %d and will be stopped later\n", PortId)); - pNdisCommon->bRxControlState = RT_RX_PREPARE_STOP; - *pWifiStatus = NDIS_STATUS_PENDING; - } - else - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Driver change Rx control state to stop mode for port %d\n", PortId)); - pNdisCommon->bRxControlState = RT_RX_STOP; - GLWdiTxRxStatistics.numWdiRxStop++; - *pWifiStatus = NDIS_STATUS_SUCCESS; - } - } - } - else - { - pTempAdapter = GetDefaultAdapter(pAdapter); - - do - { - pNdisCommon = pTempAdapter->pNdisCommon; - if( pNdisCommon->bRxControlState == RT_RX_NOTIFYING ) - { - bNotifying = TRUE; - break; - } - pTempAdapter = GetNextExtAdapter(pTempAdapter); - }while( pTempAdapter != NULL ); - - pTempAdapter = GetDefaultAdapter(pAdapter); - do - { - pNdisCommon = pTempAdapter->pNdisCommon; - if( bNotifying == TRUE ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Driver change Rx control state to Prepare Stop mode for all ports and will be stopped later\n")); - pNdisCommon->bRxControlState = RT_RX_PREPARE_STOP; - *pWifiStatus = NDIS_STATUS_PENDING; - } - else - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Driver change Rx control state to stop mode for all ports\n")); - pNdisCommon->bRxControlState = RT_RX_STOP; - GLWdiTxRxStatistics.numWdiRxStop++; - *pWifiStatus = NDIS_STATUS_SUCCESS; - } - pTempAdapter = GetNextExtAdapter(pTempAdapter); - }while( pTempAdapter != NULL ); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_RxFlush( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PNET_BUFFER_LIST pNetBufferList = NULL; - - FunctionIn(COMP_INIT); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], flush rx at Port_ID %d\n", PortId)); - WDI_FetchNBLByPort(pAdapter, (u2Byte)PortId, &pNetBufferList); - - if( pNetBufferList != NULL ) - WDI_FreeRxFrame(pAdapter, pNetBufferList); - - pWdi->WdiDataApi.RxFlushConfirm(pWdi->DataPathHandle); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_RxRestart( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PADAPTER pAdapterByPortNum = NULL; - PADAPTER pTempAdapter = NULL; - PRT_NDIS6_COMMON pNdisCommon = NULL; - - FunctionIn(COMP_INIT); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], restart rx at Port_ID %d\n", PortId)); - - PlatformAcquireSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - if( PortId != WDI_PORT_ANY ) - { - pAdapterByPortNum = GetAdapterByPortNum(pAdapter, (u1Byte)PortId); - if( pAdapterByPortNum == NULL ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("[WDI], Cannot find Port Id(%d)\n", PortId)); - } - else - { - pNdisCommon = pAdapterByPortNum->pNdisCommon; - pNdisCommon->bRxControlState = RT_RX_NORMAL; - GLWdiTxRxStatistics.numWdiRxRestart++; - } - } - else - { - pTempAdapter = GetDefaultAdapter(pAdapter); - do - { - pNdisCommon = pTempAdapter->pNdisCommon; - pNdisCommon->bRxControlState = RT_RX_NORMAL; - GLWdiTxRxStatistics.numWdiRxRestart++; - pTempAdapter = GetNextExtAdapter(pTempAdapter); - }while( pTempAdapter != NULL ); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_RxGetMpdus( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PEER_ID PeerId, - _In_ WDI_EXTENDED_TID ExTid, - _Out_ PNET_BUFFER_LIST *ppNBL) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_SINGLE_LIST_ENTRY pFirst = NULL, pTemp = NULL; - u1Byte index = 0; - - FunctionIn(COMP_RECV); - - RT_TRACE(COMP_RECV, DBG_LOUD, ("PeerId %d, ExTid %d\n", PeerId, ExTid)); - - if( (PeerId >= MAX_PEER_NUM) && (PeerId != WDI_PEER_ANY) ) - { - RT_TRACE(COMP_RECV, DBG_WARNING, ("Incorrect peer\n")); - KeBugCheckEx( - OID_RT_FORCED_BUG_CHECK, - (ULONG)PeerId, - (ULONG)ExTid, - (ULONG)PeerId, - (ULONG)0); - } - else - { - *ppNBL = NULL; - - if( PeerId == WDI_PEER_ANY) - { - RT_TRACE(COMP_RECV, DBG_LOUD, ("WDI wants to fetch all frames of all peers.\n")); - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(index = 0; index < MAX_PEER_NUM; index++) - { - if( (pDefaultAdapter->RxPeerTable[index].bUsed == TRUE) ) - { - if(N6CIsNblWaitQueueEmpty(pDefaultAdapter->RxPeerQueue[index])) - continue; - - pTemp = RTGetHeadSList(&pDefaultAdapter->RxPeerQueue[index]); - if( pFirst == NULL ) - { - pFirst = pTemp; - } - else - { - N6CConcatenateTwoList(pFirst, pTemp); - } - RTInitializeSListHead(&pDefaultAdapter->RxPeerQueue[index]); - } - } - - if( pFirst != NULL ) - { - GLWdiTxRxStatistics.numRxIndicateNBLToUE++; - for(pTemp = pFirst; pTemp->Next != NULL; pTemp = pTemp->Next) - { - GLWdiTxRxStatistics.numRxIndicateNBLToUE++; - } - *ppNBL = RT_GET_NBL_FROM_QUEUE_LINK(pFirst); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } - else - { - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - if( (pDefaultAdapter->RxPeerTable[PeerId].bUsed == TRUE) ) - { - if(N6CIsNblWaitQueueEmpty(pDefaultAdapter->RxPeerQueue[PeerId])) - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("Queue %d: no frames in queue\n", PeerId)); - } - else - { - pFirst = RTGetHeadSList(&pDefaultAdapter->RxPeerQueue[PeerId]); - GLWdiTxRxStatistics.numRxIndicateNBLToUE++; - for(pTemp = pFirst; pTemp->Next != NULL; pTemp = pTemp->Next) - { - GLWdiTxRxStatistics.numRxIndicateNBLToUE++; - } - *ppNBL = (PNET_BUFFER_LIST)N6CGetHeadNblWaitQueue(pDefaultAdapter->RxPeerQueue[PeerId]); - RTInitializeSListHead(&pDefaultAdapter->RxPeerQueue[PeerId]); - } - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } - } - - FunctionOut(COMP_RECV); -} - - -void N6SdioWdi_RxReturnFrames( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ PNET_BUFFER_LIST pNBL) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - - FunctionIn(COMP_RECV); - - WDI_FreeRxFrame(pAdapter, pNBL); - - FunctionOut(COMP_RECV); -} - - -void N6SdioWdi_RxResume( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_NDIS6_COMMON pDefaultNdisCommon = pDefaultAdapter->pNdisCommon; - - FunctionIn(COMP_INIT); - - PlatformAcquireSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - if( pDefaultNdisCommon->bRxDataPathState == RT_RX_PAUSE ) - { - pDefaultNdisCommon->bRxDataPathState = RT_RX_NORMAL; - GLWdiTxRxStatistics.numWdiRxResume++; - } - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - - PlatformReleaseSemaphore(&(GetDefaultAdapter(pAdapter)->pNdisCommon->RxNotifySemaphore)); - - FunctionOut(COMP_INIT); -} - - - -void N6SdioWdi_RxThrottle( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_RX_THROTTLE_LEVEL RxThrottleLevel) -{ - FunctionIn(COMP_RECV); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(RxThrottleLevel); - - FunctionOut(COMP_RECV); -} - -void N6SdioWdi_RxPpduRssi( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ PNET_BUFFER_LIST pNBL, - _Out_ UINT8 *pRssi) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_SUPPORTED; - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - - FunctionIn(COMP_RECV); - - *pRssi = (UINT8)pAdapter->RxStats.SignalStrength; - - FunctionOut(COMP_RECV); -} - -NDIS_STATUS N6SdioWdi_TalTxRxStart( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ PWDI_TXRX_TARGET_CONFIGURATION pWifiTxRxConfiguration, - _Out_ PTAL_TXRX_PARAMETERS pTalTxRxParameters) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(pWifiTxRxConfiguration); - - if (pTalTxRxParameters != NULL) - { - pTalTxRxParameters->MaxOutstandingTransfers = 100; - } - - // - // test a few cycles - // - - #if DEV_TEST - { - PWDI_FRAME_METADATA pWdiFrameMeta; - PWDI_FRAME_MYWORKSPACE pWdiFrameMyWorkSpace; - int i; - - for (i=0; i < 7; i++ ) { - __debugbreak(); - pWdiFrameMeta = g_NdisWdiDataApi.AllocateWiFiFrameMetaData( g_NdisMiniportDataPathHandle ); - if ( pWdiFrameMeta ) { - pWdiFrameMeta->Linkage.Flink = (PLIST_ENTRY)'f00d'; - pWdiFrameMyWorkSpace = (PWDI_FRAME_MYWORKSPACE) ((UINT8*)pWdiFrameMeta+sizeof(WIFI_FRAME_METADATA)); - pWdiFrameMyWorkSpace->Signature = 'ffdd'; - - g_NdisWdiDataApi.FreeWiFiFrameMetaData( g_NdisMiniportDataPathHandle, pWdiFrameMeta ); - } else { - ASSERT( 0 ); - } - } - } - #endif // DEV_TEST - - FunctionOut(COMP_INIT); - - return ndisStatus; -} - - -void N6SdioWdi_TalTxRxStop( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - FunctionIn(COMP_INIT); - - //1 Move DisableInterrupt to bottom of StopOperation handler to avoid incoming data during mac/port deletion - - //1 Wait for return packets then release/free semaphore for RxNotifyThread - N6CWaitForReturnPacket(pAdapter); - PlatformReleaseSemaphore(&(pNdisCommon->RxNotifySemaphore)); - PlatformFreeSemaphore(&(pNdisCommon->RxNotifySemaphore)); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TalTxRxAddPort( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_OPERATION_MODE OpMode) -{ - PADAPTER pAdapter = (PADAPTER) MiniportTalTxRxContext; - - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(OpMode); - - WDI_AddGroupPeer(pAdapter, (u2Byte)PortId); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TalTxRxDeletePort( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId) -{ - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TalTxRxSetPortOpMode( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_OPERATION_MODE Opmode) -{ - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - UNREFERENCED_PARAMETER(Opmode); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TalTxRxResetPort( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId) -{ - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - - FunctionOut(COMP_INIT); -} - - -void N6SdioWdi_TalTxRxPeerConfig( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_PEER_ID PeerId, - _In_ PWDI_TXRX_PEER_CFG pPeerCfg) -{ - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - UNREFERENCED_PARAMETER(PeerId); - UNREFERENCED_PARAMETER(pPeerCfg); - - FunctionOut(COMP_INIT); -} - -void N6SdioWdi_TalTxRxPeerDeleteConfirm( - _In_ TAL_TXRX_HANDLE MiniportTalTxRxContext, - _In_ WDI_PORT_ID PortId, - _In_ WDI_PEER_ID PeerId) -{ - FunctionIn(COMP_INIT); - - UNREFERENCED_PARAMETER(MiniportTalTxRxContext); - UNREFERENCED_PARAMETER(PortId); - UNREFERENCED_PARAMETER(PeerId); - - FunctionOut(COMP_INIT); -} - -NDIS_STATUS -N6SdioWdi_AdapterCapabilities( - _In_ PADAPTER pAdapter, - _In_ PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS adapterCap = {0}; - PUCHAR pOutput = NULL; - ULONG length = 0; - - PWDI_MESSAGE_HEADER pOidHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - n6sdioWdi_GenAdapterCaps(pAdapter, &adapterCap); - - ndisStatus = GenerateWdiGetAdapterCapabilities( - &adapterCap, - 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput ); - - RT_TRACE(COMP_INIT, DBG_TRACE, ("[WDI], GenerateWdiGetAdapterCapabilities() return length = %d\n", length)); - RT_PRINT_DATA(COMP_INIT, DBG_TRACE, ("buffer\n"), pOutput, length); - - if(NDIS_STATUS_SUCCESS != ndisStatus) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("[WDI], GenerateWdiGetAdapterCapabilities failed for status: 0x%08X\n", ndisStatus)); - return ndisStatus; - } - - if (pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength >= - (length + sizeof(WDI_MESSAGE_HEADER))) - { - PlatformMoveMemory( - ((UCHAR *)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer) + sizeof(WDI_MESSAGE_HEADER), - pOutput, - length); - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += length; - } - else - { - ndisStatus = NDIS_STATUS_BUFFER_TOO_SHORT; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += (length + sizeof(WDI_MESSAGE_HEADER)); - RT_TRACE(COMP_INIT, DBG_WARNING, ("[WDI], GenerateWdiGetAdapterCapabilities() failed with status(%x)\n", ndisStatus)); - } - - if(pOutput) - { - FreeGenerated(pOutput); - pOutput = NULL; - } - - pOidHeader->Status = ndisStatus; - - return ndisStatus; -} - -VOID -N6SdioWdi_PnPSetPower( - _In_ PADAPTER Adapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(&(Adapter->MgntInfo)); - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_NLO_INFO pNLOInfo = &(pMgntInfo->NLOInfo); - BOOLEAN bWakeReconnect = TRUE; - BOOLEAN bMacPwrCtrlOn; - BOOLEAN bSupportRemoteWakeUp; - BOOLEAN bEnableWoLCapabilities; - RT_RF_POWER_STATE rfState; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("[WDI], N6SdioWdi_PnPSetPower() ==>\n")); - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_WOWLAN , &bSupportRemoteWakeUp); - bEnableWoLCapabilities = MgntIsWoWLANCapabilityEnable(Adapter); - - if(pDevice->CurrentPowerState == NdisDeviceStateD0) - { // wake up. - - // - // Reset corresponding PnP event to monitor MiniportCheckForHang routine. - // 2009.09.30. - // - pDevice->bChkForHangAfterPnP = FALSE; - NdisResetEvent(&pDevice->SetPnpChkForHangEvent); - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PRT_POWER_SAVE_CONTROL pExtPSC = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pDefualtPSC = GET_POWER_SAVE_CONTROL(pDefaultMgntInfo); - - pDefaultAdapter->bEnterPnpSleep = FALSE; - pDefaultAdapter->bWakeFromPnpSleep = TRUE; - pDefaultAdapter->bDriverIsGoingToPnpSetPowerSleep = FALSE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - pExtPSC = GET_POWER_SAVE_CONTROL(pExtMgntInfo); - - pExtAdapter->bEnterPnpSleep = FALSE; - pExtAdapter->bWakeFromPnpSleep = TRUE; - pExtAdapter->bDriverIsGoingToPnpSetPowerSleep = FALSE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - // Clear the flag after resuming from device low low power state. We expect that - // before the system sets OID_PNP_CAPABILITIES to put the device to low PS state, it will - // set OID_PM_PARAMETERS first. In order to seperate FSS mode from S3/S4/Selective suspend - // mode, we use "bSetPMParameters" flag to decide some behaviors. 2012.09.13, by tynli. - pPSC->bSetPMParameters = FALSE; - - if(Adapter->MgntInfo.RegSuspendTimerInLowPwr) - N6CTimerResourceAction(Adapter, RT_TIMER_RESOURCE_ACTION_RESUME); - - RT_ENABLE_SDIO_TRANSFERS(Adapter); - - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - pTargetAdapter->bInitializeInProgress=TRUE; - pTargetAdapter->bSWInitReady=TRUE; - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - -#if USE_WDF_SDIO - WdfSdioTx_Enable(Adapter); -#else - N6WdmSdio_Enable(Adapter); - N6WdmSdioTx_Enable(Adapter); -#endif - N6SdioDummyIO(pDevice); - - // Control SDIO Clock rate settings - if(pDevice->bRegSdioSpeedSDR25) - { - N6SdioConfigureBusCLKByWorkAround(pDevice); - } - - if(bEnableWoLCapabilities) - { - N6SdioEnableDeviceInterrupt(Adapter); - } - - // - // 070106, rcnjko: - // Re-initialize H/W for USB Bus is suspend. - // Besides, we also issue bulk IN transfers at InitializeAdapterHandler(). - // - // On Intel Bay Trail low power platform, "D2 -> D0 -> miniport shutdown" function will be - // called by user initialiated Restart. It has site effect to 8723BS card lost issue. So this is a work around - // to add the condition to prevent from acting HaltAdapter in PNP D2 and D0 under Restart flow. 2013.11.18. - if((pMgntInfo->bIntelPatchPNP && !pMgntInfo->bReceiveSystemPSOID) || (!pMgntInfo->bIntelPatchPNP)) - { - Adapter->HalFunc.InitializeAdapterHandler(Adapter, Adapter->MgntInfo.dot11CurrentChannelNumber); - } - - // - // Reconnect to AP in the following conditions for AOAC on connected standby platform. - // (1) The media state is connected before PNP sleep and HW is re-initiated after resupmtion. - // (2) The media state is connected before PNP sleep and wake reason is AP lost, on disassoc, or on deauth. - // (3) According to the variable "bPnpKeepConnectToAP", we should keep connection (do not perform reconnect - // mechanism) if "bPnpKeepConnectToAP" is TRUE. It will be set to TRUE while remote wake up function - // is decided to be operation in PNP sleep flow. 2014.11.12, by tynli. - // - if(pMgntInfo->bRegPnpKeepLink) - { - if((Adapter->MgntInfo.bMediaConnect && (Adapter->bReInitHW || pPSC->WakeUpReason == WOL_REASON_AP_LOST || - pPSC->WakeUpReason == WOL_REASON_DISASSOC ||pPSC->WakeUpReason == WOL_REASON_DEAUTH)) || - (!Adapter->pNdisCommon->bPnpKeepConnectToAP)) - { - pMgntInfo->bPerformPnpReconnect = TRUE; - } - else - { - pMgntInfo->bPerformPnpReconnect = FALSE; - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower(): bPerformPnpReconnect=%d, bReInitHW=%d\n", - pMgntInfo->bPerformPnpReconnect, Adapter->bReInitHW)); - } - else - { - pMgntInfo->bPerformPnpReconnect = TRUE; - } - - if(bSupportRemoteWakeUp) // Need to be set before N6RestoreLastInitSettingAterWakeUP(). - { - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); //For HW Security. by tynli. 2009.06.24. - } - - PlatformSetCheckForHangTimer(Adapter); - - PlatformStartWorkItem(&(Adapter->pPortCommonInfo->pPortHelper->CreateDeleteMacWorkitem)); - - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - pTargetAdapter->bInitializeInProgress = FALSE; - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - //ADJUST_TO_ADAPTIVE_ADAPTER(Adapter, FALSE)->bInitializeInProgress=FALSE; - //pDefaultAdapter->bInitializeInProgress=FALSE; - - //fix some InitilaAdapter error under sleep - if( !Adapter->bInHctTest ) - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Adapter on Port: %d, APType: %d\n", pTargetAdapter->pNdis62Common->PortNumber, MgntActQuery_ApType(pTargetAdapter))); - if(MgntActQuery_ApType(pTargetAdapter) == RT_AP_TYPE_VWIFI_AP) - { - // Force vWifi being OFF(STATE: not available), then reset it(STATE: not started) - pTargetAdapter->bvWifiStopBeforeSleep = TRUE; - N62CApIndicateStopAp(pTargetAdapter); - } - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - Adapter->pNdisCommon->bWakeupAutoLinkInProgressing = TRUE; - - if(pMgntInfo->bPerformPnpReconnect) - { - RT_TRACE(COMP_POWER, DBG_LOUD, (" N6SdioWdi_PnPSetPower() try to connect to %s\n", Adapter->MgntInfo.Ssid.Octet)); - } - N6RestoreLastInitSettingAterWakeUP(Adapter); - - // Indicate disassociation state when RF is off becuase we do not disconnect before sleep in WoWLAN mode. - // 2011.10.27. by tynli. - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - if(rfState == eRfOff) - { - if(Adapter->pNdisCommon->bPnpKeepConnectToAP) - { - DrvIFIndicateDisassociation(Adapter, unspec_reason, pMgntInfo->Bssid); - } - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - - /*if(OS_SUPPORT_WDI(Adapter)) - { - // TODO: WoWLAN - - // TODO: NLO - } - else */if(pNdisCommon->bWakeupAutoLinkInProgressing) - { - if( pNLOInfo->NumDot11OffloadNetwork != 0 && Adapter->bInHctTest) - { - u1Byte i = 0; - BOOLEAN bTargetInNLO = FALSE; - - if(Adapter->MgntInfo.bMediaConnect || pNdisCommon->bDissociateBeforeSleep) - { - for(i=0; iNumDot11OffloadNetwork; i++) - { - if(pMgntInfo->Ssid.Length && (pMgntInfo->Ssid.Length == pNLOInfo->dDot11OffloadNetworkList[i].ssidlen)) - if(!PlatformCompareMemory(pMgntInfo->Ssid.Octet, pNLOInfo->dDot11OffloadNetworkList[i].ssidbuf, pMgntInfo->Ssid.Length)) - bTargetInNLO = TRUE; - } - - if(!bTargetInNLO) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower(): LinkTargetSSID is not in Dot11OffloadNetworks!\n")); - pNdisCommon->ScanPeriod = 0; - PlatformHandleNLOnScanRequest(Adapter); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower(): FFFFind LinkTargetSSID in Dot11OffloadNetworks!\n")); - if(!(ACTING_AS_AP(Adapter) || IsExtAPModeExist(Adapter))) - { - if(pMgntInfo->Ssid.Length != 0) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower() try to connect to %s\n", Adapter->MgntInfo.Ssid.Octet)); - - // Set Roam flag - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_SLEEP, ROAMINGSTATE_SCANNING); - - DrvIFIndicateRoamingStart(Adapter); - pNdisCommon->bDissociateBeforeSleep = FALSE; - - MgntActSet_802_11_SSID(Adapter, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, TRUE ); - } - } - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - } - else - { - //if(pPSC->DxNLOEnable && (pPSC->WakeUpReason == WOL_REASON_NLO_SSID_MATCH)) - { // FW NLO SSID matched - // We should execute scan here because after indicating NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED, - // OS will not set scan request OID (different with msdn's mention) and then query BSS list OID. So if we - // do not keep NLO matched SSID in BSS list, the state machine will keep in disconnect then HCK test will be failed. - // This may be a workaround because we do not know the behavior expected by MSFT. 2014.03.06. Add by tynli. - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower(): Set Scan Request OID after NLO issue for HctTest.\n")); - pNdisCommon->ScanPeriod = 0; - PlatformHandleNLOnScanRequest(Adapter); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - } -// pMgntInfo->bPwrSaveState = FALSE; -// Adapter->bWakeFromPnpSleep = FALSE; - } - else - { - // NLO enabled by the upper layer and in disconnect state, we should make sure that we will connect - // to the expected AP by indicating NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED - // to declare that NLO scan is finished. - if((pNLOInfo->NumDot11OffloadNetwork != 0) && (!Adapter->MgntInfo.bMediaConnect) && - (!pNdisCommon->bDissociateBeforeSleep)) - { - // We should execute scan here because after indicating NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED, - // OS will not set scan request OID (different with msdn's mention) and then query BSS list OID. So if we - // do not keep NLO matched SSID in BSS list, the state machine will keep in disconnect then HCK test will be failed. - // This may be a workaround because we do not know the behavior expected by MSFT. 2014.03.06. Add by tynli. - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower(): Set Scan Request OID after NLO issue.\n")); - pNdisCommon->ScanPeriod = 0; - PlatformHandleNLOnScanRequest(Adapter); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - else - { - - { - if((!ACTING_AS_AP(Adapter) || (!IsExtAPModeExist(Adapter) && bEnableWoLCapabilities)) - && (pMgntInfo->Ssid.Length != 0) && !(IsSSIDDummy(pMgntInfo->Ssid)) && pMgntInfo->bPerformPnpReconnect - ) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower() try to connect to %s ACTING_AS_AP(Adapter) %d IsExtAPModeExist(Adapter) %d\n", - Adapter->MgntInfo.Ssid.Octet, ACTING_AS_AP(Adapter) , IsExtAPModeExist(Adapter))); - bWakeReconnect = TRUE; - } - else - { - bWakeReconnect = FALSE; - } - - if(bWakeReconnect) - { - // Set Roam flag - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_SLEEP, ROAMINGSTATE_SCANNING); - - pNdisCommon->PNPconnentCout = 0; - // Try to connent AP !! - // Set timer to 10ms to prevent from being returned by bSetPnpPwrInProgress in MgntLinkRetry function - // or we could call PNPReConnectTimer directly. - // 1. Indicate roaming start. 2. Reconnect to AP in PNPReConnectTimer(). - PlatformSetTimer(Adapter, &pNdisCommon->PNPReConnentTimer, 10); - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioWdi_PnPSetPower(): do not try to connect to AP\n")); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - pNdisCommon->bDissociateBeforeSleep = FALSE; - - // - // If we keep connection after PNP resumption, we should reset Rx TS to avoid - // packet droped by the sequence number is over Rx reorder window size because we will not - // update the Rx TS sequence number during PNP sleep stage. 2015.01.22. - // - if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE && pMgntInfo->mAssoc) - { - QosResetRxTS(Adapter); - MgntRecoverFWOffloadMechanism(Adapter); - } - } - } - } - } - // Move the flag to be cleared in PNPReConnentTimerCallBack(). - //pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - Adapter->bWakeFromPnpSleep = FALSE; - -#if USE_WORKITEM - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - RT_TRACE(COMP_POWER, DBG_LOUD, (" Start check for hang workitem\n")); - PlatformStartWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - } -#endif - } - else if(pDevice->CurrentPowerState > NdisDeviceStateD0) - { // sleep. - PlatformIndicateCustomStatus( - Adapter, - RT_CUSTOM_EVENT_IRP_UNLOAD, - RT_CUSTOM_INDI_TARGET_IRP, - NULL, - 0); - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - - pDefaultMgntInfo->bStartApDueToWakeup=TRUE; - - pDefaultAdapter->bEnterPnpSleep = TRUE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - - pExtMgntInfo->bStartApDueToWakeup=TRUE; - - pExtAdapter->bEnterPnpSleep = TRUE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - pMgntInfo->bInToSleep = TRUE; - - //Moved to PNP wake flow. 2013.04. - //MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_SLEEP, ROAMINGSTATE_SCANNING); - - // 20100721 Joseph: Modified for Velocity Suspend test. - // Reset IPS state only. - // Since NIC is going to Halt for sleep, driver does not need to initialize the HW again. - // This shall be revised in the future and also take NIC Disable/Radio-off into consideration. - if((!bSupportRemoteWakeUp) && - (pPSC->IPSState==eIPSDozed) && - /*(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC) &&*/ - RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVL_HALT_NIC)) - { - LPSLeaveAndCheckReady(Adapter); - - NicIFDisableInterrupt(Adapter); - - pPSC->eInactivePowerState = eRfOn; - pPSC->IPSState = eIPSAwake; - pMgntInfo->RfOffReason &= (~RF_CHANGE_BY_IPS); - } - else - { - LeaveAllPowerSaveMode(Adapter); - } - NicIFClearInterrupt(Adapter); - - // Recover the BW to 40MHz for a specific case. To see the description of - // function HTRecoverBWTo40MHz(). 2012.12.20, by tynli. - if(bSupportRemoteWakeUp && - (Adapter->MgntInfo.OpMode == RT_OP_MODE_INFRASTRUCTURE)) - { - HTRecoverBWTo40MHz(Adapter); - } - - PlatformAcquireSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - while( pMgntInfo->RFChangeInProgress) - { - PlatformReleaseSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - - RT_TRACE(COMP_POWER,DBG_LOUD, - ("RF is in progress, need to wait until rf chang is done.\n")); - delay_ms(1); - - PlatformAcquireSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - } - PlatformReleaseSpinLock(Adapter,RT_RF_STATE_SPINLOCK); -// Adapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - //In Win7 for WoWLAN, we should write CAM to allow Hw to encrypt/decrypt packets when S3/S4 because - //there are some type of packets are en/decrypted by Sw when wake up. by tynli. - if(bSupportRemoteWakeUp) - { - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - u1Byte KeyIndex; - u1Byte CAM_CONST_BROAD[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - - Adapter->bHWSecurityInWoL = TRUE; - - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - - if(pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pSecInfo->PairwiseEncAlgorithm ==RT_ENC_ALG_WEP104) - { //Set WEP key to hw (but WEP 1.x cannot work) - for(KeyIndex=0; KeyIndex<4; KeyIndex++) - { - if(pSecInfo->KeyLen[KeyIndex] != 0) - { - Adapter->HalFunc.SetKeyHandler(Adapter, - KeyIndex, - CAM_CONST_BROAD, - FALSE, - pSecInfo->PairwiseEncAlgorithm, - TRUE, - FALSE); - } - } - } - else if( pSecInfo->PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER ) - { //Set group key for other encrypyion mode (TKIP, AES) - Adapter->HalFunc.SetKeyHandler(Adapter, - pSecInfo->GroupTransmitKeyIdx, //KeyIndex, - CAM_CONST_BROAD, - TRUE, //IsGroup, - pSecInfo->GroupEncAlgorithm, - FALSE, - FALSE); - } - Adapter->bHWSecurityInWoL = FALSE; - } - //-Write CAM End------------------------------------------ - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - pDefaultAdapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - while(pExtAdapter != NULL) - { - pExtAdapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - // On Intel Bay Trail low power platform, "D2 -> D0 -> miniport shutdown" function will be - // called by user initialiated Restart. It has site effect to 8723BS card lost issue. So this is a work around - // to add the condition to prevent from acting HaltAdapter in PNP D2 and D0 under Restart flow. 2013.11.18. - if((pMgntInfo->bIntelPatchPNP && !pMgntInfo->bReceiveSystemPSOID) || (!pMgntInfo->bIntelPatchPNP)) - { - if(bSupportRemoteWakeUp && IS_WOWLAN_OPERATING_MODE(pMgntInfo)) - Adapter->HalFunc.SleepAdapterHandler(Adapter); - else - Adapter->HalFunc.HaltAdapterHandler(Adapter, FALSE); - } - - // We may set H2C to Fw during HaltAdapter so release H2C queue after Halt. 2011.10.04. by tynli. - Adapter->HalFunc.WaitForH2CQueueEmptyHandler(Adapter); - - if((pMgntInfo->RfOffReason & (RF_CHANGE_BY_IPS|RF_CHANGE_BY_SW|RF_CHANGE_BY_HW)) && - RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K)) - { - // Wait FW 32K Event - // Prefast warning C28121: The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - if(!NdisWaitEvent(&pDevice->FwPsClockOffEvent, 20)) - { - // Force Hw clock off to 32K - RT_TRACE(COMP_POWER, DBG_LOUD, ("Force Hw clock off to 32K!\n")); - SetFwPSRFOffLowPower(Adapter); - } - } - - if(pDevice->CurrentPowerState == NdisDeviceStateD2 && bEnableWoLCapabilities) - { - N6SdioDisableDeviceInterrupt(Adapter); - } - // Wait until all H2C cmd finished than disable cmd53 to prevent from cmd53 lost issue. - // To disable cmd53 operation here to avoid that system reset NIC power during sleep or hibernate mode - // but driver does not call card disable flow to disable cmd53 operation, it will cause driver use cmd53 - // to access non-power on regsiter then I/O fail after resume. - // Dsiable CMD53 R/W operation - bMacPwrCtrlOn = FALSE;// Disable CMD53 R/W - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(pDevice->bRegSdioSpeedSDR25) - { - N6SdioConfigureBusCLK_SDR12(pDevice); - } - - RT_DISABLE_SDIO_TRANSFERS(Adapter); - -#if USE_WDF_SDIO - WdfSdio_Disable(Adapter); -#else - N6WdmSdio_Disable(Adapter); -#endif - - // - // 070531, rcnjko: although NDIS6 had made driver stack go to paused state - // before sleeping, it is safer to return pending tx to upper layer. - // - N6SdioReturnAllPendingTxPackets(Adapter); - - // Release Tx Queue buffered context if needed. added by Roger, 2014.04.29. - N6SdioReleaseTxQueuePending(Adapter); - - // 2011/08/23 MH For check for hang test only. Prevent check for HANG IQK write incorrect BB register under - // RF off state. - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - RT_TRACE(COMP_POWER, DBG_LOUD, (" Stop check for hang workitem\n")); - PlatformStopWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - } - - PlatformStopWorkItem(&(Adapter->pPortCommonInfo->pPortHelper->CreateDeleteMacWorkitem)); - - // - // As devices enter low power states, the driver managing the devices should cancel any programmed timers. - // Added by Roger, 2016.01.18 - // - if(Adapter->MgntInfo.RegSuspendTimerInLowPwr){ - N6CTimerResourceAction(Adapter, RT_TIMER_RESOURCE_ACTION_SUSPEND); - N6WaitTimerSync(Adapter); - } - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - - pDefaultMgntInfo->bDriverIsGoingToSleep = FALSE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - - pExtMgntInfo->bDriverIsGoingToSleep = FALSE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - RT_TRACE(COMP_POWER, DBG_LOUD, (" N6SdioWdi_PnPSetPower() sleep\n")); - } - else - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("N6SdioWdi_PnPSetPower(): unexpected CurrentPowerState: %#X\n", pDevice->CurrentPowerState)); - } - - Adapter->bInSetPower = FALSE; - pMgntInfo->bSetPnpPwrInProgress = FALSE; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("[WDI], N6SdioWdi_PnPSetPower() <==\n")); -} - -NDIS_STATUS -N6SdioWdi_Mgnt_SetPower( - _In_ PADAPTER pAdapter, - _In_ PRT_OID_HANDLER pOidHandle - ) -{ - WDI_SET_POWER_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetPower; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - BOOLEAN bEnableWoLCapabilities = FALSE; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - NDIS_DEVICE_POWER_STATE NewPowerState; - OCTET_STRING savedssid; - u1Byte ssidbuf[33]; - u1Byte bssidbuf[6]; - - LARGE_INTEGER StartTime, EndTime; - LARGE_INTEGER Freq; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("[WDI], Set OID_PNP_SET_POWER() ==>\n")); - - if( Params ) - { - NewPowerState = Params->PowerState; - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Set Power", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingUInt32(NewPowerState, "NewPowerState"), - TraceLoggingUInt32(pDevice->CurrentPowerState, "CurrentPowerState")); -#endif - - if(pDevice->CurrentPowerState == NewPowerState) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("Wdi_Set_Power_State(): already in this power state %d\n", NewPowerState)); - return ndisStatus; - } - - // For Working Time Calculation - pAdapter->bCtrlPnPTime = TRUE; - pAdapter->PnPTotalTime.QuadPart = 0; - pAdapter->PnPIOTime.QuadPart = 0; - pDevice->PnPSdBusWorkTime.QuadPart = 0; - - StartTime = KeQueryPerformanceCounter(&Freq); - // - - pMgntInfo->bSetPnpPwrInProgress = TRUE; - - if(NewPowerState == NdisDeviceStateD0) - { // Wake up. - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER: wake up from %d to D0\n", pDevice->CurrentPowerState)); - - pDevice->CurrentPowerState = NewPowerState; - - pPSC->PnpWakeD0Cnt++; // For Dbgmon record - pPSC->LastPnpWakeTime = PlatformGetCurrentTime(); - - pAdapter->bSurpriseRemoved = FALSE; - - pAdapter->bInSetPower = TRUE; - - MgntStopBeacon(pAdapter); - - // - // Immediately disable adapter in this irql level, then return success. By Bruce, 2008-10-29. - // - N6SdioWdi_PnPSetPower(pAdapter); - - } - else if((NewPowerState == NdisDeviceStateD2) || (NewPowerState == NdisDeviceStateD3)) - { - bEnableWoLCapabilities = MgntIsWoWLANCapabilityEnable(pAdapter); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Wdi_Set_Power_State(): going to sleep: %d\n", NewPowerState)); - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PMGNT_INFO pDefaultMgntInfo = &pAdapter->MgntInfo; - - pDefaultMgntInfo->bDriverIsGoingToSleep = TRUE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - - pExtMgntInfo->bDriverIsGoingToSleep = TRUE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - MgntResetJoinProcess(pAdapter); - - // For Intel Bay trail platform, we do not support WoWLAN during hibernate (S4). 2013.10.30, by tynli. - if(NewPowerState != NdisDeviceStateD2) - { - pPSC->bPnpEnterD2 = FALSE; - if(NewPowerState == NdisDeviceStateD3) - pPSC->PnpSleepEnterD3Cnt++; - else - pPSC->PnpSleepEnterUnknownDxCnt++; - } - else - { - pPSC->bPnpEnterD2 = TRUE; - pPSC->PnpSleepEnterD2Cnt++; - } - - pPSC->LastPnpSleepTime = PlatformGetCurrentTime(); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Before Stop Watchdog\n")); - - // Cancel watchdog workitem -#if USE_WORKITEM - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - RT_TRACE(COMP_POWER, DBG_LOUD, (" Stop check for hang workitem\n")); - PlatformStopWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - } -#endif - RT_TRACE(COMP_POWER, DBG_LOUD, ("After Stop Watchdog\n")); - - if( !pAdapter->bInHctTest ) - { // Those in vWifi mode now disassociate all STA before sleep, and will be reset after waking up. - - PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - - while(pTargetAdapter != NULL) - { - if(MgntActQuery_ApType(pTargetAdapter) == RT_AP_TYPE_VWIFI_AP) - { - AP_DisassociateAllStation(pTargetAdapter, unspec_reason); - SecSetSwEncryptionDecryption(pTargetAdapter, FALSE, FALSE); - - RT_TRACE(COMP_AP, DBG_LOUD,("vWifi mode on Port: %d disassociates all STA.\n", pTargetAdapter->pNdis62Common->PortNumber)); - } - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - else - { // For OS before Win7 still go turning OFF directly. - NDIS_6_2_AP_CLEAR_BEFORE_SLEEP(pAdapter); - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Stop vWifi Service\n")); - -#if P2P_SUPPORT == 1 - if(P2P_ENABLED(GET_P2P_INFO(pAdapter))) - { - if(P2P_DOING_DEVICE_DISCOVERY(GET_P2P_INFO(pAdapter))) - {// Doing P2P Device Discovery - P2PScanListCeaseScan(GET_P2P_INFO(pAdapter)); - P2PDeviceDiscoveryComplete(GET_P2P_INFO(pAdapter), TRUE); // P2P State is restored in this function. - } - - #if (MULTIPORT_SUPPORT == 1) - if(GetFirstDevicePort(pAdapter)) - { - (GET_P2P_INFO(GetFirstDevicePort(pAdapter)))->uListenStateDiscoverability = 0; - } - #endif - } -#endif - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Handle P2P relative function\n")); - - // - // Stop scan, roaming and link operation. - // - if(MgntScanInProgress(pMgntInfo) || MgntIsLinkInProgress(pMgntInfo) || MgntRoamingInProgress(pMgntInfo)) - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("@!!!!!Mgnt_SetPower we are scanning.....\n")); - - if(MgntScanInProgress(pMgntInfo)) - MgntResetScanProcess(pAdapter); - PlatformCancelTimer(pAdapter, &pMgntInfo->ScanTimer); - { - PADAPTER pLoopAdapter = GetDefaultAdapter(pAdapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter->MgntInfo.bDualModeScanStep = 0; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - - if( MgntIsLinkInProgress(pMgntInfo) || MgntRoamingInProgress(pMgntInfo)) - { - pMgntInfo->bJoinInProgress = FALSE; - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingStart(pAdapter); - else - DrvIFIndicateConnectionStart(pAdapter); - - DrvIFIndicateAssociationStart(pAdapter); - DrvIFIndicateAssociationComplete(pAdapter, RT_STATUS_FAILURE); - - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingComplete(pAdapter, RT_STATUS_FAILURE); - else - DrvIFIndicateConnectionComplete(pAdapter, RT_STATUS_FAILURE); - MgntActSet_802_11_DISASSOCIATE( pAdapter, unspec_reason); - } - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("After Stop Scan\n")); - - MgntResetRoamingState(pMgntInfo); - - //MgntDisconnectAP(Adapter , unspec_reason); - if(pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - RT_RF_POWER_STATE eRfPowerState; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("@!!!!!Mgnt_SetPower before we save the ssid, the ssid is %s bMediaConnect %d bIbssStarter %d\n", pMgntInfo->Ssid.Octet, pMgntInfo->bMediaConnect, pMgntInfo->bIbssStarter)); - - //save SSID - savedssid.Octet = ssidbuf; - CopySsidOS(savedssid, pMgntInfo->Ssid); - CopyMem(bssidbuf,pMgntInfo->Bssid, 6); - - //Add for DTM 1.0c test. - if(!pMgntInfo->bHiddenSSIDEnable) - MgntRemoveSsidsToScan(pAdapter, pMgntInfo->Ssid); - - // - // CCW: don't indicate dissociation event on infra. mode client. - // 070125, rcnjko: don't indicate disassociation event - // - - if(!bEnableWoLCapabilities || - (pPSC->FSSDetection && (!pPSC->bSetPMParameters || (pPSC->bSetPMParameters && !pPSC->bOSSupportProtocolOffload)))) - { // Do not disasso to AP when WoWLAN. by tynli. - if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE ) - { - pNdisCommon->bDissociateBeforeSleep = TRUE; - } - - MgntActSet_802_11_DISASSOCIATE(pAdapter , unspec_reason); - pNdisCommon->bPnpKeepConnectToAP = FALSE; - - //delay 50ms to let hw send disassociation packet successful - //fix s3 fail with Netgear3500 v1 - //by sherry 20101124 - PlatformStallExecution(50000); - } - else - { // WoWLAN - if( pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE && pPSC->bPnpEnterD2) - pNdisCommon->bPnpKeepConnectToAP = TRUE; - else - pNdisCommon->bPnpKeepConnectToAP = FALSE; - } - - //restore SSID - CopySsidOS(pMgntInfo->Ssid, savedssid); - CopyMem(pMgntInfo->Bssid, bssidbuf, 6); - } - else - { - pNdisCommon->bPnpKeepConnectToAP = FALSE; - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("After Link Operation\n")); - - { - PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - - while(pTargetAdapter != NULL) - { - if(MgntActQuery_ApType(pTargetAdapter) == RT_AP_TYPE_VWIFI_AP) - { - // stop beaconing. for NDISTest preview 3 SoftAP_Power_ext. - PMGNT_INFO pTargetMgntInfo = &pTargetAdapter->MgntInfo; - - MgntStopBeacon(pTargetAdapter); - - // Configure the HW to be No Link. - pTargetMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pTargetMgntInfo->OpMode)); - pTargetMgntInfo->OpMode = RT_OP_MODE_AP; - } - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("vWifi other config\n")); - - pDevice->CurrentPowerState = NewPowerState; - pAdapter->bInSetPower = TRUE; - - N6SdioWdi_PnPSetPower(pAdapter); - - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("Wdi_Set_Power_State(): Invalid Power State(%u)\n", NewPowerState)); - ndisStatus = NDIS_STATUS_INVALID_DATA; - } - - // For Working Time Calculation - EndTime = KeQueryPerformanceCounter(NULL); - pAdapter->bCtrlPnPTime = FALSE; - - pAdapter->PnPTotalTime.QuadPart = (EndTime.QuadPart - StartTime.QuadPart) * 1000000; - pAdapter->PnPTotalTime.QuadPart = pAdapter->PnPTotalTime.QuadPart / Freq.QuadPart; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[PnP Time] Wake Up Total Cost Time: %llu us\n", pAdapter->PnPTotalTime.QuadPart)); - - pAdapter->PnPIOTime.QuadPart = pAdapter->PnPIOTime.QuadPart * 1000000; - pAdapter->PnPIOTime.QuadPart = pAdapter->PnPIOTime.QuadPart / Freq.QuadPart; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[PnP Time] IO Cost Time: %llu us\n", pAdapter->PnPIOTime.QuadPart)); - - pDevice->PnPSdBusWorkTime.QuadPart = pDevice->PnPSdBusWorkTime.QuadPart * 1000000; - pDevice->PnPSdBusWorkTime.QuadPart = pDevice->PnPSdBusWorkTime.QuadPart / Freq.QuadPart; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[PnP Time] SdBus Submit Cost Time: %llu us\n", pDevice->PnPSdBusWorkTime.QuadPart)); - // - } - else - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("Wdi_Set_Power_State(): failed to ParseWdiSetPowerState!\n")); - ndisStatus = NDIS_STATUS_FAILURE; - } - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Set Power", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingHexUInt32(ndisStatus, "ndisStatus")); -#endif - - RT_TRACE(COMP_POWER, DBG_LOUD, ("[WDI], Set OID_PNP_SET_POWER()return status:0x%x\n", ndisStatus)); - - return ndisStatus; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.h deleted file mode 100644 index 7833c0a5..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_WdiMain.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef __INC_N6CSDIO_WDIMAIN_H -#define __INC_N6CSDIO_WDIMAIN_H - -#define WDI_TX_RESOURCES_WARNING 64 // when pTcb is less than 64, means we are going to run out of tx resources - -MINIPORT_WDI_ALLOCATE_ADAPTER N6SdioWdi_AllocateAdapter; - -MINIPORT_WDI_FREE_ADAPTER N6SdioWdi_FreeAdapter; - -MINIPORT_WDI_OPEN_ADAPTER N6SdioWdi_OpenAdapter; - -MINIPORT_WDI_CLOSE_ADAPTER N6SdioWdi_CloseAdapter; - -MINIPORT_WDI_START_ADAPTER_OPERATION N6SdioWdi_StartOperation; - -MINIPORT_WDI_STOP_ADAPTER_OPERATION N6SdioWdi_StopOperation; - -MINIPORT_WDI_ADAPTER_HANG_DIAGNOSE N6SdioWdi_HangDiagnose; - -MINIPORT_WDI_TAL_TXRX_INITIALIZE N6SdioWdi_TalTxRxInitialize; - -MINIPORT_WDI_TAL_TXRX_DEINITIALIZE N6SdioWdi_TalTxRxDeinitialize; - -MINIPORT_WDI_TX_ABORT N6SdioWdi_TxAbort; - -MINIPORT_WDI_TX_TARGET_DESC_INIT N6SdioWdi_TxTargetDescInit; -MINIPORT_WDI_TX_TARGET_DESC_DEINIT N6SdioWdi_TxTargetDescDeInit; - -MINIPORT_WDI_TX_DATA_SEND N6SdioWdi_TxDataSend; -MINIPORT_WDI_TX_TAL_SEND N6SdioWdi_TxTalSend; - -MINIPORT_WDI_TX_TAL_SEND_COMPLETE N6SdioWdi_TxTalSendComplete; - -MINIPORT_WDI_TX_TAL_QUEUE_IN_ORDER N6SdioWdi_TxTalQueueInOrder; - -MINIPORT_WDI_TX_PEER_BACKLOG N6SdioWdi_TxPeerBacklog; - -MINIPORT_WDI_RX_STOP N6SdioWdi_RxStop; -MINIPORT_WDI_RX_FLUSH N6SdioWdi_RxFlush; - -MINIPORT_WDI_RX_RESTART N6SdioWdi_RxRestart; - -MINIPORT_WDI_RX_GET_MPDUS N6SdioWdi_RxGetMpdus; - -MINIPORT_WDI_RX_RETURN_FRAMES N6SdioWdi_RxReturnFrames; - -MINIPORT_WDI_RX_RESUME N6SdioWdi_RxResume; - -MINIPORT_WDI_RX_THROTTLE N6SdioWdi_RxThrottle; - -MINIPORT_WDI_RX_PPDU_RSSI N6SdioWdi_RxPpduRssi; - -MINIPORT_WDI_TAL_TXRX_START N6SdioWdi_TalTxRxStart; -MINIPORT_WDI_TAL_TXRX_STOP N6SdioWdi_TalTxRxStop; - -MINIPORT_WDI_TAL_TXRX_ADD_PORT N6SdioWdi_TalTxRxAddPort; -MINIPORT_WDI_TAL_TXRX_DELETE_PORT N6SdioWdi_TalTxRxDeletePort; -MINIPORT_WDI_TAL_TXRX_SET_PORT_OPMODE N6SdioWdi_TalTxRxSetPortOpMode; -MINIPORT_WDI_TAL_TXRX_RESET_PORT N6SdioWdi_TalTxRxResetPort; - -MINIPORT_WDI_TAL_TXRX_PEER_CONFIG N6SdioWdi_TalTxRxPeerConfig; -MINIPORT_WDI_TAL_TXRX_PEER_DELETE_CONFIRM N6SdioWdi_TalTxRxPeerDeleteConfirm; - -RT_STATUS -N6SdioWdi_TargetDescInit( - _In_ PADAPTER pAdapter, - _In_ PNET_BUFFER_LIST pNBL - ); - -NDIS_STATUS -N6SdioWdi_TaskOpen( - _In_ PADAPTER pAdapter, - _In_ PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ); - -NDIS_STATUS -N6SdioWdi_TaskClose( - _In_ PADAPTER pAdapter - ); - -NDIS_STATUS -N6SdioWdi_AdapterCapabilities( - _In_ PADAPTER pAdapter, - _In_ PRT_OID_HANDLER pOidHandle - ); - -VOID -N6SdioWdi_PnPSetPower( - _In_ PADAPTER Adapter - ); - -NDIS_STATUS -N6SdioWdi_Mgnt_SetPower( - _In_ PADAPTER pAdapter, - _In_ PRT_OID_HANDLER pOidHandle - ); - -#endif //#ifndef __INC_N6CSDIO_WDIMAIN_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.c deleted file mode 100644 index 40c3be0a..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.c +++ /dev/null @@ -1,13 +0,0 @@ -#include "Mp_Precomp.h" - - -// For SDIO framework development. -u1Byte GlobalSdioDbg = \ -// SDIO_DBG_CMD | // CMD52/53 R/W debugging -// SDIO_DBG_ASYN_IO | // AsynIO debug -// SDIO_DBG_IO_STRESS | // IO Stress test -// SDIO_DBG_CCCR | // Dump CCCR registers -// SDIO_DBG_FBR | // Dump FBR registers -// SDIO_DBG_CIS | // Dump CIS registers -// SDIO_DBG_LA_TRIGER | // Triger LA - 0; diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.h deleted file mode 100644 index 7ff0e0e2..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_dbg.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __INC_N6SDIO_DBG_H -#define __INC_N6SDIO_DBG_H - -extern u1Byte GlobalSdioDbg; - - - - -// For SDIO debug, added by Roger, 2011.01.11. -#define SDIO_DBG_CMD BIT0 -#define SDIO_DBG_ASYN_IO BIT1 -#define SDIO_DBG_IO_STRESS BIT2 -#define SDIO_DBG_CCCR BIT3 -#define SDIO_DBG_FBR BIT4 -#define SDIO_DBG_CIS BIT5 -#define SDIO_DBG_LA_TRIGER BIT6 - - -// SDIO Debug control for Command Line, added by Roger, 2011.05.20. -#define SDIO_REG_CTRL_MASK 0x0F -#define SDIO_REG_CTRL_LOCAL BIT(0) -#define SDIO_REG_CTRL_CMD52 BIT(1) - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_info.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_info.h deleted file mode 100644 index 782dd4b3..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_info.h +++ /dev/null @@ -1,14 +0,0 @@ -#ifndef __INC_SDIO_INFO_H -#define __INC_SDIO_INFO_H - -NDIS_STATUS -InterfaceSetInformationHandleCustomizedOriginalMPSetOid( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_OID Oid, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded -); - -#endif // #ifndef __INC_SDIO_INFO_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.c deleted file mode 100644 index fb9160a4..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.c +++ /dev/null @@ -1,6681 +0,0 @@ -/*++ - -Copyright (c) 2003 Realtek Semiconductor Corporation - -Module Name: - N6Sdio_main.c - -Abstract: - This is an NDIS miniport driver can interface with a SDIO device. - Added by Roger, 2010.12.15. - ---*/ - -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "N6Sdio_Main.tmh" -#endif - -#if SOFTWARE_TRACE_LOGGING - -//Define Tracelogging provider name -// {6F651B84-F358-4486-BF42-A8D60D911DC6} -TRACELOGGING_DEFINE_PROVIDER(g_hProvider, - "RealtekWindowsWiFi", - (0x6f651b84, 0xf358, 0x4486, 0xbf, 0x42, 0xa8, 0xd6, 0xd, 0x91, 0x1d, 0xc6)); - -#endif - -#include "CppDrvReg.h" -#include "802_11_OID.h" - -extern u8Byte RTL_AllocateMemory_count; -extern u8Byte RTL_FreeMemory_count; -extern u8Byte RTL_AllocateMemory_Len; -extern u8Byte RTL_FreeMemory_Len; - -extern u8Byte RTL_P2P_AllocateMemory_count ; -extern u8Byte RTL_P2P_FreeMemory_count ; -extern u8Byte RTL_P2P_AllocateMemory_Len; -extern u8Byte RTL_P2P_FreeMemory_Len; - -PCALLBACK_OBJECT ProximityCallback = NULL; - -//sherry added for dual mac 20110627 -RT_LIST_ENTRY GlobalAdapterList; -BOOLEAN GlobalFirstConfigurationForNormalChip = TRUE; -ULONG GlobalMutexForGlobalAdapterList = 0; -GLOBAL_SPINLOCK GlobalSpinlockForGlobalAdapterList; -ULONG GlobalMutexForPowerAndEfuse = 0; -ULONG GlobalMutexForPowerOnAndPowerOff = 0; -ULONG GlobalMutexForFwDownload = 0; -ULONG GlobalMutexForMac0_2G_Mac1_5G = 0; -GLOBAL_SPINLOCK GlobalSpinLockForDusc; - -// -// Global handle which initialized in DriverEntry. -// - -#define MP_OFFSET(field) ((u4Byte)FIELD_OFFSET(RT_SDIO_DEVICE,field)) -#define MP_SIZE(field) sizeof(((PRT_SDIO_DEVICE)0)->field) - -static MP_REG_ENTRY NICRegTable[] = { - // Registry value name Type Offset in MP_ADAPTER Field size Default Value Min Max - //---------------------------------------------------------------------------- - // 8187 SW LED. - {NDIS_STRING_CONST("LedCtrl"), 0,NdisParameterInteger, MP_OFFSET(bRegLedCtrl), MP_SIZE(bRegLedCtrl), 0, 0, 8}, - //---------------------------------------------------------------------------- - // Number of Bulk in issued at initialization, 2006.02.09, by rcnjko. - {NDIS_STRING_CONST("MaxBulkInCnt"), 0,NdisParameterInteger, MP_OFFSET(nMaxBulkInCnt), MP_SIZE(nMaxBulkInCnt), 32, 1, 63}, // 1 ~ number of RFD allocated. - //---------------------------------------------------------------------------- - - {NDIS_STRING_CONST("EnableUsbSS"), 0,NdisParameterInteger, MP_OFFSET(RegUsbSS), MP_SIZE(RegUsbSS), 0, 0, 1}, // 0: disable, 1: enable. - // - // 2011/09/07 MH Add for different channel plan tx power offset. - // Middle offset is for ETSI europe low is for MKK/Korea. - // - {NDIS_STRING_CONST("GainOffsetFCCLow"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetFCCLow), MP_SIZE(RegGainOffsetFCCLow), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - {NDIS_STRING_CONST("GainOffsetFCC"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetFCC), MP_SIZE(RegGainOffsetFCC), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - {NDIS_STRING_CONST("GainOffsetFCCHigh"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetFCCHigh), MP_SIZE(RegGainOffsetFCCHigh), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - - {NDIS_STRING_CONST("GainOffsetMKKLow"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetMKKLow), MP_SIZE(RegGainOffsetMKKLow), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - {NDIS_STRING_CONST("GainOffsetMKK"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetMKK), MP_SIZE(RegGainOffsetMKK), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - {NDIS_STRING_CONST("GainOffsetMKKHigh"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetMKKHigh), MP_SIZE(RegGainOffsetMKKHigh), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - - {NDIS_STRING_CONST("GainOffsetETSILow"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetETSILow), MP_SIZE(RegGainOffsetETSILow), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - {NDIS_STRING_CONST("GainOffsetETSI"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetETSI), MP_SIZE(RegGainOffsetETSI), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - {NDIS_STRING_CONST("GainOffsetETSIHigh"), 0,NdisParameterInteger, MP_OFFSET(RegGainOffsetETSIHigh), MP_SIZE(RegGainOffsetETSIHigh), 0x00000000, 0x0, 0xFFFFFFFF}, // 0x0~0xF. - - // - // 2011/11/25 MH Add for Sercom requirement temporarily. - // - {NDIS_STRING_CONST("InPipeCnt"), 0,NdisParameterInteger, MP_OFFSET(RegInPipeCnt), MP_SIZE(RegInPipeCnt), 1, 0x0, 0x5}, // 0x0~0x5. - //---------------------------------------------------------------------------- - - // - // 2015/03/26 TzuHang Add to control SDIO bus speed SDR25 support or not (SDR25 = 50MHz), 0: not supported SDR25 (25MHz), 1: supported SDR25 (50MHz) - {NDIS_STRING_CONST("SdioBusSDR25"), 0,NdisParameterInteger, MP_OFFSET(bRegSdioSpeedSDR25), MP_SIZE(bRegSdioSpeedSDR25), 1, 0x0, 0x1}, - // 2015/03/26 TzuHang Add to control SDIO Driving Capabilities - {NDIS_STRING_CONST("bSdioDrivingEnable"), 0,NdisParameterInteger, MP_OFFSET(bRegSdioDrivingEnable), MP_SIZE(bRegSdioDrivingEnable), 0, 0x0, 0x1}, - {NDIS_STRING_CONST("SdioDriving"), 0,NdisParameterInteger, MP_OFFSET(RegSdioDriving), MP_SIZE(RegSdioDriving), 0, 0x0, 0x7}, - // 2015/03/26 TzuHang Add to control SurpriseRemoved while facing I/O Fail - {NDIS_STRING_CONST("bSurpriseRemovedEnable"), 0,NdisParameterInteger, MP_OFFSET(bRegSurpriseRemovedEnable), MP_SIZE(bRegSurpriseRemovedEnable), 1, 0x0, 0x1}, - //---------------------------------------------------------------------------- -}; - -#define NIC_NUM_REG_PARAMS (((ULONG)sizeof (NICRegTable)) / ((ULONG)sizeof(MP_REG_ENTRY))) - -NDIS_STATUS -DriverEntry( - IN PDRIVER_OBJECT pDriverObject, - IN PUNICODE_STRING RegistryPath - ) -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - NDIS_MINIPORT_DRIVER_CHARACTERISTICS MChars; - u4Byte NdisVersion =0; - UNICODE_STRING dest; -#if USE_WDF_SDIO - NTSTATUS ntStatus; - WDF_DRIVER_CONFIG config; - WDFDRIVER hDriver; //vm control -#endif - -#if WPP_SOFTWARE_TRACE - WPP_INIT_TRACING(pDriverObject, RegistryPath); -#endif - -#if SOFTWARE_TRACE_LOGGING - // In DriverEntry or DLLMain, register the TraceLogging provider - // No need to check for errors. If this call fails all subsequent TraceLogging calls automatically become no-ops. - TraceLoggingRegister(g_hProvider); - - TraceLoggingWrite( - g_hProvider, - "RealtekWDIDriverTraceLogging", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingPointer(pDriverObject,"pDriverObject"), - TraceLoggingUnicodeString(RegistryPath, "RegistryPath")); -#endif - - RT_TRACE(COMP_INIT, DBG_LOUD, (" ==>DriverEntry()\n") ); - DBG_ConsoleInitialize(); - - PLATFORM_INIT_RT_SPINLOCK(GlobalRtDriverContext.ContextLock); - RTInitializeListHead(&(GlobalRtDriverContext.AdapterList)); - RTInitializeListHead(&(GlobalRtDriverContext.NdisContext.IoDeviceList)); - - GlobalRtDriverContext.NdisContext.pDriverObject = pDriverObject; - - RtlInitEmptyUnicodeString(&dest , GlobalRtDriverContext.NdisContext.RegistryPath , 256*sizeof(WCHAR)); - RtlCopyUnicodeString(&dest , RegistryPath); - DBG_RecordSvnVersion(); - - do - { -#if USE_WDF_SDIO - // - // Set WdfDriverInitNoDispatchOverride flag to tell the framework - // not to provide dispatch routines for the driver. In other words, - // the framework must not intercept IRPs that the I/O manager has - // directed to the driver. In this case, it will be handled by NDIS - // port driver. - // - WDF_DRIVER_CONFIG_INIT(&config, WDF_NO_EVENT_CALLBACK); - config.DriverInitFlags |= WdfDriverInitNoDispatchOverride; - ntStatus = WdfDriverCreate( - pDriverObject, - RegistryPath, - WDF_NO_OBJECT_ATTRIBUTES, - &config, - &hDriver); //vm control - if(!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("WdfDriverCreate failed\n")); - Status = NDIS_STATUS_FAILURE; - break; - } -#endif - - NdisZeroMemory(&MChars, sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS)); - NdisVersion = NdisGetVersion(); - - if(NdisVersion >= NDIS_VERSION_BASE_6_50) - { - // - // WDI driver need at least NDIS 6.50 - // - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("Ndis 6.5 configuration\n")); - - // - // Set the type and version of this structure - // - MChars.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_DRIVER_CHARACTERISTICS; - MChars.Header.Size = sizeof(NDIS_MINIPORT_DRIVER_CHARACTERISTICS); - MChars.Header.Revision = NDIS_MINIPORT_DRIVER_CHARACTERISTICS_REVISION_2; - - // - // Version - // - // The version of the NDIS library. Current version is 6.50. - MChars.MajorNdisVersion = NDIS_MAJOR_VERSION; - MChars.MinorNdisVersion = NDIS_MINOR_VERSION_5; - - } - else - { - // - // Check NDIS version, 2006.10.31, by shien chang. - // - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("NDIS version mismatch\n")); - Status = NDIS_STATUS_FAILURE; - break; - } - - // Reserved for the version number of the driver. - MChars.MajorDriverVersion = DRIVER_MAJOR_VERSION; - MChars.MinorDriverVersion = DRIVER_MINOR_VERSION; - - Status = WDI_Initialize(pDriverObject, RegistryPath, &MChars); - RT_TRACE(COMP_INIT, DBG_LOUD, ("WDI_Initialize(), status 0x%x\n", Status)); - - if (Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Failed to register miniport with NDIS. Status = 0x%x\n", Status)); - break; - } - RTInitializeListHead(&GlobalAdapterList); - - }while (FALSE); - - if (Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Driver Entry Return Fail = 0x%x\n", Status)); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample Driver Entry Failed", - TraceLoggingLevel(TRACE_LEVEL_FATAL), - TraceLoggingHexUInt32(Status, "Status")); - - TraceLoggingUnregister(g_hProvider); -#endif - -#if WPP_SOFTWARE_TRACE - WPP_CLEANUP(pDriverObject); -#endif - } - else - { - RT_TRACE(COMP_INIT, DBG_TRACE, ("Driver Entry Return Success = 0x%x\n", Status)); - /* Add for DBG ver. memory alloc/free, 2014.04.24, hsiao_ho */ - RtDbgInitMem(); - /* Add for DBG ver. Mutex, 2014.05.19, hsiao_ho */ - RtDbgInitMutex(); - /* Add for DBG ver. Spinlock, 2014.05.21, hsiao_ho */ - RtDbgInitSpinlock(); - } - - return Status; -} - - -RT_STATUS -N6sdioAllocateAdapterSketchAndStoreHandle( - NDIS_HANDLE MiniportAdapterHandle, - PVOID *pPtr, - u4Byte length - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - PADAPTER Adapter = NULL; - PRT_NDIS6_COMMON pNdisCommon = NULL; - - - - // Allocate the adapter structure. - status = PlatformAllocateMemory( - NULL, - (PVOID*)&Adapter, - sizeof(ADAPTER) - ); - if (status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6PciAllocateAdapterSketchAndStoreHandle(): failed to allocate Adapter!!!\n")); - return RT_STATUS_FAILURE; - } - else - { - PlatformZeroMemory(Adapter, sizeof(ADAPTER)); - } - - // Allocate RT_NDIS6_COMMON. - status = PlatformAllocateMemory( - NULL, - (PVOID)&(pNdisCommon), - sizeof(RT_NDIS6_COMMON) - ); - if (status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6PciAllocateAdapterSketchAndStoreHandle(): failed to allocate RT_NDIS6_COMMON for the Adapter!!!\n")); - PlatformFreeMemory(Adapter, sizeof(ADAPTER)); - return RT_STATUS_FAILURE; - } - else - { - PlatformZeroMemory(pNdisCommon, sizeof(RT_NDIS6_COMMON)); - } - - // - // Store Handle. - // - pNdisCommon->hNdisAdapter = MiniportAdapterHandle; - Adapter->pNdisCommon = pNdisCommon; - - *pPtr = Adapter; - return status; -} - -NDIS_STATUS -N6sdioAllocateAdapter( - OUT PADAPTER *pAdapter, - IN NDIS_HANDLE MiniportAdapterHandle - ) -{ - PADAPTER Adapter; - RT_STATUS status; - - *pAdapter = NULL; - do - { - status=N6sdioAllocateAdapterSketchAndStoreHandle(MiniportAdapterHandle, (PVOID*)(&Adapter), sizeof(ADAPTER)); - if(status!=RT_STATUS_SUCCESS) - { - return NDIS_STATUS_FAILURE; - } - - // Port Common Info ------------------------------------- - status = PortCommonInfoAllocateMemoryWithCriticalInitialization(Adapter); - if(status != RT_STATUS_SUCCESS) - { - PlatformFreeMemory( Adapter->pNdisCommon, sizeof(RT_NDIS6_COMMON) ); - PlatformFreeMemory( Adapter, sizeof(ADAPTER) ); - return NDIS_STATUS_FAILURE; - } - // ----------------------------------------------------- - - status = MgntAllocMemory(Adapter); - if(status != RT_STATUS_SUCCESS) - { - PortCommonInfoFreeMemory(Adapter); - PlatformFreeMemory( Adapter->pNdisCommon, sizeof(RT_NDIS6_COMMON) ); - PlatformFreeMemory( Adapter, sizeof(ADAPTER) ); - return NDIS_STATUS_FAILURE; - } - }while(FALSE); - - *pAdapter = Adapter; - - return NDIS_STATUS_SUCCESS; -} - -VOID -N6SdioCleanUpInitializedResourcesEx( - IN PADAPTER Adapter, - IN RES_MON_OBJ ResMonObj - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN isAllocAdapter = FALSE, - isAllocRxNBLPool = FALSE, - isSpinLock = FALSE, - isAWBs = FALSE, - isAsocNIC = FALSE, - isAllocMem = FALSE, - isSdioInit = FALSE, - isSdioTxRes = FALSE, - isN62CInit = FALSE, - isAllocNWifi = FALSE, - isAllocSdioRes = FALSE, - isBTIODevice = FALSE, - isCommonRS = FALSE; - - u1Byte ResIndexPlueOne=0; - RM_RES_TYPE ResType = 0; - - // TODO: remove useless comment code and double check whether there is something missing to free - for (ResIndexPlueOne=ResMonObj.nResToCheck; - ResIndexPlueOne != 0; - ResIndexPlueOne --) - { - ResType = ResMonObj.ResItems[ResIndexPlueOne-1]; - // - // The clean up process should be the same with N6SdioFreeAll - // - switch (ResType) - { - case InitRM_AllocAdapter: // 0x1 - isAllocAdapter = TRUE; - break; - - case InitRM_AllocRxNBLPool: - isAllocRxNBLPool = TRUE; - break; - - case InitRM_SpinLock: - isSpinLock = TRUE; - break; - - case InitRM_AWBs: - isAWBs = TRUE; - break; - - case InitRM_AsocNIC: // 0x5 - isAsocNIC = TRUE; - break; - - case InitRM_AllocMem: - isAllocMem = TRUE; - break; - - case InitRM_SdioInit: - isSdioInit = TRUE; - break; - - case InitRM_SdioTxRes: - isSdioTxRes = TRUE; - break; - - case InitRM_N62CInit: - isN62CInit = TRUE; - break; - - case InitRM_AllocNWifi: // 0xa - isAllocNWifi = TRUE; - break; - - case InitRM_AllocSdioRes: - isAllocSdioRes = TRUE; - break; - - case InitRM_BTIODevice: - isBTIODevice = TRUE; - break; - - case InitRM_CommonRS: // 0xd - isCommonRS = TRUE; - break; - - case InitRM_Undefined: // 0x0 - default: - break; - } - } - ResMonObj.nResToCheck = 0; - - if(isCommonRS) - { - NDBG_Halt(Adapter); - ReleaseNdis6CommonResources(Adapter); - } - Adapter->bDriverIsGoingToUnload = TRUE; - - PoUnregisterPowerSettingCallback(pNdisCommon->N6PowerSettingHandle); - PoUnregisterPowerSettingCallback(pNdisCommon->N6WLANPowerModeHandle); - - - Adapter->bDriverStopped = TRUE; - N6C_SET_MP_DRIVER_STATE(Adapter, MINIPORT_HALTED); - - if(isAllocNWifi) - N6SdioFreeNative80211MIBs(Adapter); - - if(isSdioInit) - { -#if USE_WDF_SDIO - WdfSdio_Halt(Adapter); -#else - N6WdmSdio_Disable(Adapter); -#endif - } - - if(isAllocSdioRes) - N6SdioFreeRes(Adapter); - - if( isSpinLock) - N6WaitTimerSync(Adapter); - - if(isAllocMem) - NicIFFreeMemory(Adapter); - - if(isN62CInit) - NDIS_6_2_FREE_EXTENSION_COMPONENT(Adapter); - - if(isSdioTxRes) - { - //Do it in N6SdioFreeDevice, skip here - //N6SdioFreeTxQueueRes(Adapter); - } - - if(isAsocNIC) - { - NicIFCancelAllTimer(Adapter); - NicIFDeInitResource(Adapter); - NicIFDisassociateNIC(Adapter); - } - - if(isAWBs) - { - //Do it in N6SdioFreeDevice, skip here - //FreeSdioAWBs(device, FALSE); - } - - if(isSpinLock) - { - N6CFreeSpinLocks(Adapter); - N6DeInitTimerSync(Adapter); - NdisOIDHistoryDeInit(Adapter); - } - - if(isAllocAdapter) - { - N6SdioFreeDevice(device); - PortCommonInfoFreeMemory(Adapter); - N6FreeAdapter(Adapter); - } -} - -// -// Resources cleanup process, revised by Roger. -// -VOID -N6SdioCleanUpInitializedResources( - IN PADAPTER Adapter, - IN RM_RES_TYPE ResType - ) -{ - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - - switch (ResType) - { - case InitRM_AllocAdapter: - N6FreeAdapter(Adapter); - break; - case InitRM_AllocRxNBLPool: - N6SdioFreeRxNetBufferListPool(Adapter); - break; - case InitRM_SpinLock: - NdisFreeSpinLock( &(device->IrpSpinLock) ); - N6CFreeSpinLocks(Adapter); - NdisOIDHistoryDeInit(Adapter); - break; - case InitRM_AWBs: - FreeSdioAWBs(device, FALSE); - break; - case InitRM_AsocNIC: - NicIFDeInitResource(Adapter); - NicIFDisassociateNIC(Adapter); - break; - case InitRM_AllocMem: - NicIFFreeMemory(Adapter); - break; - case InitRM_SdioInit: - -#if USE_WDF_SDIO - WdfSdio_Halt(Adapter); -#else - N6WdmSdio_Disable(Adapter); -#endif - - break; - case InitRM_SdioTxRes: - N6SdioFreeTxQueueRes(Adapter); - break; - case InitRM_AllocNWifi: - N6SdioFreeNative80211MIBs(Adapter); - break; - case InitRM_AllocSdioRes: - N6SdioFreeRes(Adapter); - break; - case InitRM_BTIODevice: - N6C_DeregisterIoDevice(Adapter); - break; - case InitRM_CommonRS: - ReleaseNdis6CommonResources(Adapter); - break; - case InitRM_Undefined: - default: - break; - } -} - -NDIS_STATUS -N6sdioSetMiniportAttributes( - IN PADAPTER Adapter, - IN NDIS_HANDLE MiniportAdapterHandle - ) -{ - NDIS_MINIPORT_ADAPTER_ATTRIBUTES MiniportAttributes; - - PlatformZeroMemory(&MiniportAttributes, sizeof(NDIS_MINIPORT_ADAPTER_ATTRIBUTES)); - - N6_ASSIGN_OBJECT_HEADER( - MiniportAttributes.RegistrationAttributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2, - NDIS_SIZEOF_MINIPORT_ADAPTER_REGISTRATION_ATTRIBUTES_REVISION_2 - ); - - MiniportAttributes.RegistrationAttributes.MiniportAdapterContext = Adapter; - MiniportAttributes.RegistrationAttributes.AttributeFlags = - NDIS_MINIPORT_ATTRIBUTES_SURPRISE_REMOVE_OK | - NDIS_MINIPORT_ATTRIBUTES_NDIS_WDM | - NDIS_MINIPORT_ATTRIBUTES_NO_PAUSE_ON_SUSPEND; - - MiniportAttributes.RegistrationAttributes.CheckForHangTimeInSeconds = RT_CHECK_FOR_HANG_PERIOD; - MiniportAttributes.RegistrationAttributes.InterfaceType = NdisInterfacePNPBus; - - - return NdisMSetMiniportAttributes(MiniportAdapterHandle, &MiniportAttributes); -} - - - - -VOID -N6SdioFill80211PhyAttributes( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PDOT11_PHY_ATTRIBUTES pPhyAttributes; - ULONG i, index; - UCHAR rate; - - for (i=0, pPhyAttributes = pDot11Attributes->SupportedPhyAttributes ; - iNumSupportedPhys ; - i++,pPhyAttributes++) - { - N6_ASSIGN_OBJECT_HEADER( - pPhyAttributes->Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_PHY_ATTRIBUTES_REVISION_1, - sizeof(DOT11_PHY_ATTRIBUTES)); - - pPhyAttributes->PhyType = pNdisCommon->pDot11PhyMIBs[i].PhyType; - pPhyAttributes->bHardwarePhyState = TRUE; - pPhyAttributes->bSoftwarePhyState = TRUE; - pPhyAttributes->bCFPollable = MgntActQuery_CfPollable(Adapter); - pPhyAttributes->uMPDUMaxLength = NATIVE_802_11_MTU_SIZE; - pPhyAttributes->TempType = dot11_temp_type_unknown; - pPhyAttributes->DiversitySupport = dot11_diversity_support_dynamic; - - switch (pPhyAttributes->PhyType) - { - case dot11_phy_type_hrdsss: - pPhyAttributes->HRDSSSAttributes.bShortPreambleOptionImplemented = FALSE; - pPhyAttributes->HRDSSSAttributes.bPBCCOptionImplemented = FALSE; - pPhyAttributes->HRDSSSAttributes.bChannelAgilityPresent = FALSE; - pPhyAttributes->HRDSSSAttributes.uHRCCAModeSupported = FALSE; - break; - - case dot11_phy_type_ofdm: - pPhyAttributes->OFDMAttributes.uFrequencyBandsSupported = - DOT11_FREQUENCY_BANDS_LOWER | - DOT11_FREQUENCY_BANDS_MIDDLE; - break; - - case dot11_phy_type_erp: - pPhyAttributes->ERPAttributes.bShortPreambleOptionImplemented = TRUE; - pPhyAttributes->ERPAttributes.bPBCCOptionImplemented = FALSE; - pPhyAttributes->ERPAttributes.bChannelAgilityPresent = FALSE; - pPhyAttributes->ERPAttributes.uHRCCAModeSupported = FALSE; - pPhyAttributes->ERPAttributes.bERPPBCCOptionImplemented = FALSE; - pPhyAttributes->ERPAttributes.bDSSSOFDMOptionImplemented = FALSE; - pPhyAttributes->ERPAttributes.bShortSlotTimeOptionImplemented = TRUE; - break; - - default: - break; - } - - // Tx Power Level. - pPhyAttributes->uNumberSupportedPowerLevels = - pNdisCommon->dot11SupportedPowerLevels.uNumOfSupportedPowerLevels; - PlatformMoveMemory( - pPhyAttributes->TxPowerLevels, - pNdisCommon->dot11SupportedPowerLevels.uTxPowerLevelValues, - sizeof(pPhyAttributes->TxPowerLevels)); - - // Data Rate. - PlatformMoveMemory( - &(pPhyAttributes->SupportedDataRatesValue), - &(pNdisCommon->pDot11PhyMIBs[i].SupportedDataRatesValue), - sizeof(DOT11_SUPPORTED_DATA_RATES_VALUE_V2)); - index = 0; - while ( (rate = pNdisCommon->pDot11PhyMIBs[i].SupportedDataRatesValue.ucSupportedTxDataRatesValue[index]) != 0) - { - pPhyAttributes->DataRateMappingEntries[index].ucDataRateIndex = rate; - pPhyAttributes->DataRateMappingEntries[index].ucDataRateFlag = 0; - pPhyAttributes->DataRateMappingEntries[index].usDataRateValue = rate; - - index++; - } - pPhyAttributes->uNumDataRateMappingEntries = index; - } -} - -VOID -N6SdioFillHwRxFilterCapabilities( - IN PADAPTER Adapter, - IN OUT PNDIS_RECEIVE_FILTER_CAPABILITIES pRxFilterCapabilities - ) -{ - -// ADD Header -#if (NDIS_SUPPORT_NDIS630) - N6_ASSIGN_OBJECT_HEADER( - pRxFilterCapabilities->Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_2, - NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_2); -#else - N6_ASSIGN_OBJECT_HEADER( - pRxFilterCapabilities->Header, - NDIS_OBJECT_TYPE_DEFAULT, - NDIS_RECEIVE_FILTER_CAPABILITIES_REVISION_1, - NDIS_SIZEOF_RECEIVE_FILTER_CAPABILITIES_REVISION_1); -#endif -//---------- - pRxFilterCapabilities->Flags = 0; - - pRxFilterCapabilities->SupportedHeaders = NDIS_RECEIVE_FILTER_MAC_HEADER_SUPPORTED; - -#if (NDIS_SUPPORT_NDIS630) - pRxFilterCapabilities->EnabledFilterTypes = NDIS_RECEIVE_FILTER_PACKET_COALESCING_FILTERS_ENABLED; - - pRxFilterCapabilities->SupportedQueueProperties = NDIS_RECEIVE_FILTER_PACKET_COALESCING_SUPPORTED_ON_DEFAULT_QUEUE; - - pRxFilterCapabilities->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED| - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_NOT_EQUAL_SUPPORTED; //0; - - pRxFilterCapabilities->SupportedHeaders |= (NDIS_RECEIVE_FILTER_ARP_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV4_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_IPV6_HEADER_SUPPORTED| - NDIS_RECEIVE_FILTER_UDP_HEADER_SUPPORTED); - - pRxFilterCapabilities->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PACKET_TYPE_SUPPORTED; - - pRxFilterCapabilities->SupportedARPHeaderFields = NDIS_RECEIVE_FILTER_ARP_HEADER_OPERATION_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_SPA_SUPPORTED| - NDIS_RECEIVE_FILTER_ARP_HEADER_TPA_SUPPORTED ; - - pRxFilterCapabilities->SupportedIPv4HeaderFields = NDIS_RECEIVE_FILTER_IPV4_HEADER_PROTOCOL_SUPPORTED; - - pRxFilterCapabilities->SupportedIPv6HeaderFields = NDIS_RECEIVE_FILTER_IPV6_HEADER_PROTOCOL_SUPPORTED; - - pRxFilterCapabilities->SupportedUdpHeaderFields = NDIS_RECEIVE_FILTER_UDP_HEADER_DEST_PORT_SUPPORTED; - - pRxFilterCapabilities->MaxFieldTestsPerPacketCoalescingFilter = 5; // should be >= 5 - - pRxFilterCapabilities->MaxPacketCoalescingFilters = 10; // should be >= 10 - //pRxFilterCapabilities->NidsReserved = 0; -#else - pRxFilterCapabilities->EnabledFilterTypes = 0; - - pRxFilterCapabilities->SupportedQueueProperties = 0; - - pRxFilterCapabilities->SupportedFilterTests = NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_EQUAL_SUPPORTED | - NDIS_RECEIVE_FILTER_TEST_HEADER_FIELD_MASK_EQUAL_SUPPORTED; - - pRxFilterCapabilities->SupportedMacHeaderFields = NDIS_RECEIVE_FILTER_MAC_HEADER_DEST_ADDR_SUPPORTED| - NDIS_RECEIVE_FILTER_MAC_HEADER_PROTOCOL_SUPPORTED; -#endif - - pRxFilterCapabilities->EnabledQueueTypes = 0; //NDIS_RECEIVE_FILTER_VM_QUEUES_ENABLED; - pRxFilterCapabilities->NumQueues = 0; - pRxFilterCapabilities->MaxMacHeaderFilters = 2; - pRxFilterCapabilities->MaxQueueGroups = 0; - pRxFilterCapabilities->MaxQueuesPerQueueGroup = 0; - pRxFilterCapabilities->MinLookaheadSplitSize = 0; - pRxFilterCapabilities->MaxLookaheadSplitSize = 0; - - - RT_PRINT_DATA(COMP_INIT, DBG_LOUD, "pRxFilterCapabilities:\n", pRxFilterCapabilities, sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES)); -} - - -NDIS_STATUS -N6SdioSetHardwareAssistAttributes( - IN PADAPTER Adapter - ) -{ - //NDIS_MINIPORT_ADAPTER_ATTRIBUTES MiniportAttributes; - NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES HardwareAssistAttributes; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - NDIS_STATUS ndisStatus; -#if NDIS_SUPPORT_NDIS620 - NDIS_RECEIVE_FILTER_CAPABILITIES RxFilterCapabilities; - NDIS_RECEIVE_FILTER_CAPABILITIES CurrRxFilterCapabilities; -#endif - - PlatformZeroMemory(&HardwareAssistAttributes, sizeof(NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES)); - - if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_1) - { - N6_ASSIGN_OBJECT_HEADER( - HardwareAssistAttributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1, - NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_1); - } -#if NDIS_SUPPORT_NDIS620 - else if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_20) - { - N6_ASSIGN_OBJECT_HEADER( - HardwareAssistAttributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_2, - NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_2); - } -#endif -#if NDIS_SUPPORT_NDIS630 - else if(pNdisCommon->NdisVersion <= NDIS_VERSION_BASE_6_40) - { - - N6_ASSIGN_OBJECT_HEADER( - HardwareAssistAttributes.Header, - NDIS_OBJECT_TYPE_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES, - NDIS_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_3, - NDIS_SIZEOF_MINIPORT_ADAPTER_HARDWARE_ASSIST_ATTRIBUTES_REVISION_3); - } -#endif - - HardwareAssistAttributes.HDSplitAttributes = NULL; -#if NDIS_SUPPORT_NDIS620 - if(pMgntInfo->bSupportPacketCoalescing) - { - PlatformZeroMemory(&RxFilterCapabilities, sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES)); - HardwareAssistAttributes.HardwareReceiveFilterCapabilities = &RxFilterCapabilities; - //MiniportAttributes.HardwareAssistAttributes.CurrentReceiveFilterCapabilities = &RxFilterCapabilities; - N6SdioFillHwRxFilterCapabilities(Adapter, &RxFilterCapabilities) ; - - PlatformZeroMemory(&CurrRxFilterCapabilities, sizeof(NDIS_RECEIVE_FILTER_CAPABILITIES)); - HardwareAssistAttributes.CurrentReceiveFilterCapabilities = &CurrRxFilterCapabilities; - N6SdioFillHwRxFilterCapabilities(Adapter, &CurrRxFilterCapabilities) ; - } - else - { - HardwareAssistAttributes.HardwareReceiveFilterCapabilities = NULL; - HardwareAssistAttributes.CurrentReceiveFilterCapabilities = NULL; - } - HardwareAssistAttributes.HardwareNicSwitchCapabilities = NULL; - HardwareAssistAttributes.CurrentNicSwitchCapabilities = NULL; -#endif - -#if NDIS_SUPPORT_NDIS630 - HardwareAssistAttributes.HardwareSriovCapabilities = NULL; - HardwareAssistAttributes.CurrentSriovCapabilities = NULL; - HardwareAssistAttributes.HardwareQosCapabilities = NULL; - HardwareAssistAttributes.CurrentQosCapabilities = NULL; -#endif - - // - // Ok, now register the attributes. - // - ndisStatus = NdisMSetMiniportAttributes(Adapter->pNdisCommon->hNdisAdapter, - (PNDIS_MINIPORT_ADAPTER_ATTRIBUTES)&HardwareAssistAttributes); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioSetHardwareAssistAttributes(): ndisStatus: %#X\n", ndisStatus)); - - return ndisStatus; -} - -// -// Update SDIO dependent default settings. -// -VOID -N6SdioUpdateDefaultSetting( - IN PADAPTER pAdapter - ) -{ - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(pAdapter); - - HalSdioUdtDefSet(pAdapter); -} - -NDIS_STATUS -N6SdioInitialize( - IN NDIS_HANDLE MiniportAdapterHandle, - IN NDIS_HANDLE MiniportDriverContext, - IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ) -/*++ -Routine Description: - - The MiniportInitialize function is a required function. Here is the - list of things this function typically performs: - - Set the miniport attributes. - Read configuration parameters from the registry. - Allocate memory. - Allocate the NET_BUFFER_LIST pool and the NET_BUFFER pool. - Do hardware specific initialization like registering interrupt handlers/ set DMA resources etc. - Read and write to the bus-specific configuration space. - - MiniportInitialize runs at IRQL = PASSIVE_LEVEL. - -Arguments: - - MiniportAdapterHandle The handle NDIS uses to refer to us - MiniportDriverContext Handle passed to NDIS when we registered the driver - MiniportInitParameters Initialization parameters contains a pointer - to a list of the allocated hardware resources - for the miniport adapter - -Return Value: - - NDIS_STATUS_xxx code - ---*/ -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - NDIS_ERROR_CODE ErrorCode = NDIS_ERROR_CODE_ADAPTER_NOT_FOUND; - UINT i; - PADAPTER Adapter = NULL; - PRT_SDIO_DEVICE sdiodevice = NULL; - PMGNT_INFO pMgntInfo = NULL; - PRT_NDIS6_COMMON pNdisCommon = NULL; - int nIdx; - RES_MON_OBJ ResMonObj; - GUID PowerSetting_GUID = GUID_ACTIVE_POWERSCHEME; - GUID WLANPowerMode_GUID = GUID_WLAN_POWER_MODE; - -#if USE_WDF_SDIO - NTSTATUS ntStatus; -#endif - - BOOLEAN bMemoryInitialized = FALSE; - - RT_TRACE(COMP_INIT, DBG_LOUD, (" ==> N6SdioInitialize(1)\n")); - - // Invoke resource checking mechanism. - INIT_RES_MON_OBJ(ResMonObj); - - //1 Allocate memory to store usbdevice information. - - // Allocate ADAPTER structure - ndisStatus = N6sdioAllocateAdapter(&Adapter, MiniportAdapterHandle); - if( ndisStatus != NDIS_STATUS_SUCCESS ) - goto error; - - ADD_RES_TO_MON(ResMonObj, InitRM_AllocAdapter); // Add to resource monitor. - - sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - sdiodevice->pAdapter = Adapter; - - pMgntInfo = &(Adapter->MgntInfo); - pNdisCommon = Adapter->pNdisCommon; - pNdisCommon->NdisVersion = NdisGetVersion(); - - if(pNdisCommon->NdisVersion >= NDIS_VERSION_BASE_6_50) - pNdisCommon->NdisVersion = NDIS_VERSION_BASE_6_50; - - NdisMGetDeviceProperty(MiniportAdapterHandle, - &(sdiodevice->pPhysDevObj), // PhysicalDeviceObject - &(sdiodevice->FunctionalDeviceObject), // FunctionalDeviceObject - &(sdiodevice->pSdioDevObj), // NextDeviceObject - NULL, - NULL); - - sdiodevice->Sdbusinterface.Size = sizeof(SDBUS_INTERFACE_STANDARD); - sdiodevice->Sdbusinterface.Version = SDBUS_INTERFACE_VERSION; - sdiodevice->NextDeviceStackSize = (CHAR)sdiodevice->pSdioDevObj->StackSize + 1; - - //2 Save the related NDIS handles - sdiodevice->hNdisAdapter = MiniportAdapterHandle; - - if(NDIS_STATUS_SUCCESS != N6SdioAllocateRxNetBufferListPool(Adapter)) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("XXX InitializeTxRxBuffer(): N6SdioAllocateRxNetBufferListPool() failed\n")); - ndisStatus = NDIS_STATUS_FAILURE; - goto error; - } - - ADD_RES_TO_MON(ResMonObj, InitRM_AllocRxNBLPool); // Add to resource monitor. - -#if USE_WDF_SDIO - - // - // Create and keep WDFDEVICE handle for further use. - // - ntStatus = WdfDeviceMiniportCreate(WdfGetDriver(), - WDF_NO_OBJECT_ATTRIBUTES, - sdiodevice->FunctionalDeviceObject, - sdiodevice->pSdioDevObj, - sdiodevice->pPhysDevObj, - &(sdiodevice->hWdfDevice)); - if(!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT,DBG_SERIOUS, ("WdfDeviceMiniportCreate failed (%#X)\n", ntStatus)); - ndisStatus = NDIS_STATUS_FAILURE; - goto error; - } -#endif - - - // - // Allocate Tx semaphore before create corresponding Tx thread. - // - PlatformInitializeSemaphore(&sdiodevice->TxSemaphore, 0); - -#if RTL8723_SDIO_IO_THREAD_ENABLE - - // - // Allocate IO semaphore before create corresponding IO Handling thread. - // - PlatformInitializeSemaphore(&sdiodevice->IOSemaphore, 0); - -#endif - - // - // Set up synchronization mechanism for NdisTimer objects. - // - N6InitTimerSync(Adapter); - - - // Allocate spin lock. - N6CInitializeSpinLocks(Adapter); - - // Initialize event. - NdisInitializeEvent(&(sdiodevice->evtSendingNBLCompleted)); - - // - // Initialize event to make sure PnP action could be followed by Miniport CheckForHang routine - // to prevent unexpect bug check code 0x1d. - // 2009.09.30. - // - NdisInitializeEvent(&sdiodevice->SetPnpChkForHangEvent); - - //---------------------------------------------------------------------------- - // Initialize variables related to New IO method, 2005.01.06, by rcnjko. - // - NdisAllocateSpinLock( &(sdiodevice->IrpSpinLock) ); - NdisOIDHistoryInit(Adapter); - ADD_RES_TO_MON(ResMonObj, InitRM_SpinLock); // Add to resource monitor. - -#if (RK_PLATFORM_SUPPORT == 1) - PlatformInitializeMutex(&sdiodevice->RxHandleIntMutex); -#endif - - // SyncIo Method 2. - KeInitializeEvent( &(sdiodevice->SyncIoEvent), NotificationEvent, TRUE); - - if (WAPI_QuerySetVariable(Adapter, WAPI_QUERY, WAPI_VAR_WAPISUPPORT, 0)) - pNdisCommon->MaxPktSize=NIC_MAX_PACKET_SIZE; - - sdiodevice->nIrpPendingCnt = 0; - RTInitializeListHead( &(sdiodevice->AwbIdleQueue) ); - RTInitializeListHead( &(sdiodevice->AwbWaitQueue) ); - sdiodevice->NumAwb = MAX_AWB_DATA_SIZE; - PrepareSdioAWBs(sdiodevice); - - ADD_RES_TO_MON(ResMonObj, InitRM_AWBs); // Add to resource monitor. - - //2Init Event for canceling Asyn_Io pending IRP when unload - NdisInitializeEvent(&sdiodevice->AllAsynIoIrpReturnedEvent); - - //2Init Event for all SDIO cmd52/cmd53 returned when unload - NdisInitializeEvent(&sdiodevice->AllSdioCmdReturnedEvent); - - NdisInitializeEvent(&sdiodevice->FwPsClockOffEvent); - NdisInitializeEvent(&sdiodevice->AllSdioRxTransCompleteEvent); - - N6WdmSdio_Enable(Adapter); - - sdiodevice->AsynIoIrpPendingCount++; - - // Read the registry parameters - ndisStatus= N6SdioReadRegParameters(sdiodevice); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioReadRegParameters(X): Read Registry Parameter Failed!\n")); - goto error; - } - - // - // We set default hardware type to unknown type to associate common NIC handler first and - // then re-assign correct HW type association handler when the type is recognized. - // 2011.12.30. - // - ndisStatus = NicIFAssociateNIC(Adapter, HARDWARE_TYPE_MAX); - -#if USE_WDF_SDIO - if( !NT_SUCCESS(WdfSdio_Initialize(Adapter) )) - { - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("MiniportInitialize(X): WdfSdio_Initialize() failed!\n") ); - goto error; - } -#else - - // - // Perform SDIO WDM initialization - // - if( !NT_SUCCESS(N6WdmSdio_Initialize(Adapter) )) - { - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("MiniportInitialize(X): N6WdmSdio_Initialize() failed!\n") ); - goto error; - } - -#endif - - if(Adapter->HardwareType == HARDWARE_TYPE_MAX) - HAL_ReadTypeID(Adapter); - - HAL_SetInterfaceIndex(Adapter, 0); - - // We should set the correct hardware type to the following function - ndisStatus = NicIFAssociateNIC(Adapter, Adapter->HardwareType); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("NicIFAssociateNIC Failed!\n")); - goto error; - } - else - { - NicIFInitResource(Adapter); - } - - ADD_RES_TO_MON(ResMonObj, InitRM_AsocNIC); // Add to resource monitor. - - - // - // Update NDIS6 common setting as user specifed to Adapter, MgntInfo, and HalData. - // - N6UpdateDefaultSetting(Adapter); - - Dot11_UpdateDefaultSetting(Adapter); - - N6SdioUpdateDefaultSetting(Adapter); - - // - // Initialize SDIO Data transfer related Tx context buffer. - // - if( !NT_SUCCESS(N6SdioInitTxQueue(Adapter) ) ) - goto error; - - ADD_RES_TO_MON(ResMonObj, InitRM_SdioTxRes); // Add to resource monitor. - - // - // Set SDIO Tx queue mapping - // - if(!Adapter->HalFunc.HalSdioSetQueueMappingHandler( - Adapter, (u1Byte)sdiodevice->RtNumRxQueue, (u1Byte)sdiodevice->RtNumTxQueue)) - { - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioInitialize(X): Set SDIO Tx Queue mapping failed!\n") ); - goto error; - } - - // Enable all Tx Queues. - N6WdmSdioTx_Enable(Adapter); - - ADD_RES_TO_MON(ResMonObj, InitRM_SdioInit); // Add to resource monitor. - - // Read adapter information such as MAC address from EEPROM - NicIFReadAdapterInfo(Adapter); - HT_UpdateDefaultSetting(Adapter); - VHT_UpdateDefaultSetting(Adapter); - -#if 1 - //Initialize Ndis 6.2, Ndis 6.0 only return success. - ndisStatus=NDIS_6_2_INITIALIZE_EXTENSION_COMPONENT(Adapter,MiniportAdapterHandle,MiniportInitParameters); - - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N62CInitialize failed\n")); - goto error; - } -#endif - - - // - // Update default setting to HalData. - // - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_LED, &(sdiodevice->bRegLedCtrl)); - - // - // Support WoW for future use. Added by Roger, 2008.12.30. - // - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_WOWLAN, &(sdiodevice->bSupportRemoteWakeUp)); - - // Settings for HctTest. - if(Adapter->bInHctTest) - { - - // For NDIS6 DOT11_STATISTICS test, we must open CRC, ICV error. - // Revise this handler for DTM test, 2008.12.16, added by Roger. - Adapter->HalFunc.AllowErrorPacketHandler(Adapter, TRUE, FALSE); - } - - // - // For usb selective suspend configuration. Added by Roger, 2010.04.16. - // - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_USB_SELECTIVE_SUSPEND, &(sdiodevice->RegUsbSS)); - - // - // 2011/09/07 MH Add TX power for different channel plan. - // - RT_TRACE(COMP_INIT, DBG_LOUD, - ("power offset MKK = %08x/%08x/%08x ETSI = %08x/%08x/%08x\n", - sdiodevice->RegGainOffsetMKKLow, sdiodevice->RegGainOffsetMKK, sdiodevice->RegGainOffsetMKKHigh, - sdiodevice->RegGainOffsetETSILow, sdiodevice->RegGainOffsetETSI, sdiodevice->RegGainOffsetETSIHigh)); - - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_FCC_LOW, &(sdiodevice->RegGainOffsetFCCLow)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_FCC, &(sdiodevice->RegGainOffsetFCC)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_FCC_HIGH, &(sdiodevice->RegGainOffsetFCCHigh)); - - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_MKK_LOW, &(sdiodevice->RegGainOffsetMKKLow)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_MKK, &(sdiodevice->RegGainOffsetMKK)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_MKK_HIGH, &(sdiodevice->RegGainOffsetMKKHigh)); - - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_ETSI_LOW, &(sdiodevice->RegGainOffsetETSILow)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_ETSI, &(sdiodevice->RegGainOffsetETSI)); - Adapter->HalFunc.SetHalDefVarHandler(Adapter, HAL_DEF_GAIN_OFFSET_ETSI_HIGH, &(sdiodevice->RegGainOffsetETSIHigh)); - - // - // 2011/11/25 MH Add for Sercom requirement temporarily. - // - //usbdevice->RegInPipeCnt; Need not assign to mgnt structure, we need to - - - // For PSP XLink mode, 2006.09.04, by shien chang. - if(pMgntInfo->bPSPXlinkMode) - { - // Update ReceiveConfig variable. - Adapter->HalFunc.AllowAllDestAddrHandler(Adapter, TRUE, FALSE); - } - - // - // In this time we shall NOT allocate TxRx corresponding resources here - // temporarily for 92CU on Vista or later, 2010.01.21. - // 2010.07.01 hpfan: allocate memory for shorten prepending time is NOT used. - if(ACTING_AS_AP(Adapter) || !pMgntInfo->bRegVelocity|| pMgntInfo->RegPreInitMem) - { - ndisStatus=NicIFAllocateMemory(Adapter); - - if(ndisStatus!=NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("NicIFAllocateMemory failed\n")); - goto error; - } - - ADD_RES_TO_MON(ResMonObj, InitRM_AllocMem); // Add to resource monitor. - bMemoryInitialized = TRUE; - } - - // - // A miniport driver must call the NdisMSetMiniportAttributes function from its - // MiniportInitializeEx function to identify a context area for miniport adapter to NDIS, - // and to provide NDIS with information about the miniport adapter. - // - ndisStatus= N6sdioSetMiniportAttributes(Adapter, MiniportAdapterHandle); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6sdioSetMiniportAttributes(): failed to set driver attributes.\n")); - goto error; - } - - - N6SdioAllocRes(Adapter); - - ADD_RES_TO_MON(ResMonObj, InitRM_AllocSdioRes); // Add Usb related resource monitoring. - - sdiodevice->CurrentPowerState = NdisDeviceStateD0; - - //InitializAdapter and PHY Configuration. - ADAPTER_SET_STATUS_FLAG(Adapter, ADAPTER_STATUS_FIRST_INIT); - ndisStatus = NicIFInitializeAdapter(Adapter); - if( ndisStatus != NDIS_STATUS_SUCCESS ) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("NicIFInitializeAdapter() failed!!\n")); - goto error; - } - ADAPTER_CLEAR_STATUS_FLAG(Adapter, ADAPTER_STATUS_FIRST_INIT); - - // - // HCT12.0 2c_AddressChange. - // Note that, Adapter->CurrentAddress and Adapter->PermanentAddress had been - // set up in NicIFInitializeAdapter(). - // - if(pNdisCommon->bOverrideAddress) - { - NicIFSetMacAddress(Adapter, pNdisCommon->CurrentAddress); - } - else - { - ETH_COPY_NETWORK_ADDRESS(pNdisCommon->CurrentAddress, Adapter->PermanentAddress); - } - - // - // Before setting of attributes, update the native 802.11 related variable. - // 2006.10.09, by shien chang. - // - ndisStatus = N6SdioAllocateNative80211MIBs(Adapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioAllocateNative80211MIBs failed\n")); - goto error; - } - - ADD_RES_TO_MON(ResMonObj, InitRM_AllocNWifi); // Add to resource monitor. - - N6InitializeNative80211MIBs(Adapter); - - // - // Set General Attribute, 2006.10.05, by shien chang. - // - ndisStatus = N6CSetGeneralAttributes(Adapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6usbSetGeneralAttributes failed\n")); - goto error; - } - - - //Register Ndis 6.2 802.11 Attribute extend from Ndis6.0 and Include New ExtAP to OS - //ndisStatus= N6XC_SET_802_11_ATTRIBUTES(Adapter); - ndisStatus = N6Set80211Attributes(Adapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6usbSet80211Attributes failed\n")); - goto error; - } - - // - // Set Hardware Assist Attribute. 2013.10.09, by tynli. - // - ndisStatus = N6SdioSetHardwareAssistAttributes(Adapter); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioSetHardwareAssistAttributes failed\n")); - //goto error; - } - - //Get Ndis Version - pMgntInfo->NdisVersion = MgntTranslateNdisVersionToRtNdisVersion(pNdisCommon->NdisVersion); - - - // At the moment, if HW is unpluged, fail the initialization immediate. - if (Adapter->bSurpriseRemoved) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Adapter is unpluged, fail the init process.\n")); - ndisStatus = NDIS_STATUS_ADAPTER_NOT_FOUND; - goto error; - } - - // - // Set Power config callback, 2009.03.18, by lanhsin. - // - ndisStatus = PoRegisterPowerSettingCallback( - NULL, - (LPGUID)(&PowerSetting_GUID), - (PPOWER_SETTING_CALLBACK)&N6SdioPowerSettingCallback, - (PVOID)Adapter, - &pNdisCommon->N6PowerSettingHandle - ); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Failed to register miniport with NDIS. Status = 0x%x\n", ndisStatus )); - goto error; - } - - ndisStatus = PoRegisterPowerSettingCallback( - NULL, - (LPGUID)(&WLANPowerMode_GUID), - (PPOWER_SETTING_CALLBACK)&N6SdioWLANPowerModeCallback, - (PVOID)Adapter, - &pNdisCommon->N6WLANPowerModeHandle - ); - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Failed to register miniport with NDIS. Status = 0x%x\n", ndisStatus)); - goto error; - } - - N6CInitThread((PVOID)Adapter); - - InitNdis6CommonResources(Adapter); - ADD_RES_TO_MON(ResMonObj, InitRM_CommonRS); - NDBG_Init(Adapter); -#if 0 - // Initialize debugging realted information or resource. 2005.04.21, by rcnjko. - N6SdioDbgInit(Adapter); -#endif - // For AP Mode. 2005.07.19, by rcnjko. - if(ACTING_AS_AP(Adapter)) - { - MgntActSet_ApMode(Adapter, TRUE); - } - - // Set power save mode. 2005.02.15, by rcnjko. - MgntActSet_802_11_PowerSaveMode(Adapter, pMgntInfo->dot11PowerSaveMode); - - // We disable Rx aggregation for WiFi test. 2008.11.25. - if(pMgntInfo->bWiFiConfg || Adapter->bInHctTest) - Adapter->HalFunc.HalRxAggrHandler(Adapter, FALSE); - - // It should be called iff everything, especially security related, are initialized properly. - // 2005.01.24, by rcnjko. - //N6RestoreLastInitSetting(Adapter); - - //This is sw initialize ready. - Adapter->bSWInitReady=TRUE; - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - // After this adapter is initialzied ready, insert this adapter to the list. - INSERT_GLOBAL_ADAPTER_LIST(Adapter); - - // - // Register the Device object for this adapter! - // Note: - // No matter the returned status of registration is success or not, the result has no - // effect on the status for Miniportinitialize. - // So, the resiteration process should be placed in the success location of Initialization. - // By Bruce, 2011-07-07. - // - if(RT_STATUS_SUCCESS != (RtStatus = N6C_RegisterIoDevice(Adapter))) - { - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("N6C_RegisterIoDevice() failed for status = %d\n", RtStatus)); - } - } - - //This is sw initialize ready. - if(!Adapter->bHWInitReady) - PlatformScheduleWorkItem(&(pNdisCommon->InitializeAdapterWorkItem)); - - NicIFClearInterrupt(Adapter); - NicIFEnableInterrupt(Adapter); - - // - // Mark the miniport driver as paused state. - // Note that, please keep this action as last one in MiniportInitializeEx(). - // - N6C_SET_MP_DRIVER_STATE(Adapter, MINIPORT_PAUSED); - - Adapter->initfinish = TRUE; - Adapter->bInitComplete = TRUE; - DrvIFIndicateCurrentPhyStatus(Adapter); - - return ndisStatus; - -error: - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== N6SdioInitialize(), Initialize failed, clean up resources. ndisStatus(%#x)\n", ndisStatus)); - CLEANUP_RES_IN_MON(ResMonObj, Adapter); - return ndisStatus; -} - - -// -// Description: -// Prepare SDIO data transfer related NonPaged memory Pool for SDIO Asyn Extension CMD -// use in the future. -// -// 2011.01.19, added by Roger. -// -NTSTATUS -N6SdioInitTxQueue( - IN PADAPTER Adapter -) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - u4Byte QueueIdx = 0; - - pDevice->RtNumTxQueue = SDIO_MAX_TX_QUEUE; // TX_HIQ, TX_MIQ and TX_LOQ - - // Initialize the contexts in Tx Queue. - pDevice->RtTxQueue = - (PRT_SDIO_TX_QUEUE)ExAllocatePoolWithTag(NonPagedPool, SDIO_MAX_TX_QUEUE*sizeof(RT_SDIO_TX_QUEUE), '3278' ); - PlatformZeroMemory(pDevice->RtTxQueue, SDIO_MAX_TX_QUEUE*sizeof(RT_SDIO_TX_QUEUE)); - - if (pDevice->RtTxQueue != NULL) - { - - for (QueueIdx=0; QueueIdxRtTxQueue[QueueIdx]); - pTxQueue->TransferType = SDIO_TRANSFER_TX; - RTInitializeListHead(&(pTxQueue->ContextBusyList)); - pTxQueue->IrpPendingCount = 0; - - //Init Event for canceling Tx/Rx pending IRP when unload. - NdisInitializeEvent(&(pTxQueue->AllIrpReturnedEvent)); - } - } - else - { - ntStatus = STATUS_INSUFFICIENT_RESOURCES; - goto Error; - } - - return ntStatus; - -Error: - if(pDevice->RtTxQueue != NULL) - { - ExFreePoolWithTag(pDevice->RtTxQueue, '3278' ); - } - - return ntStatus; -} - - -// -// Description: -// Dump IO bus related properties and configurations for debugging. -// Common I/O Area(CIA) in function 0: -// - Card Common Control Registers(CCCR) -// - Function Basic Registers(FBR) -// - Card Information Structure(CIS) -// -// Assumption: -// A Secure Digital (SD) card bus interface has been initialized. -// -// 2011.03.15, added by Roger. -// -RT_STATUS -N6SdioDumpDeviceProperty( - IN PRT_SDIO_DEVICE pDevice -) -{ - u2Byte Idx = 0; - u1Byte Data; - NTSTATUS ntStatus = STATUS_SUCCESS; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - - - // - // Retrieve CCCR info - // - if(GlobalSdioDbg & SDIO_DBG_CCCR) - { - for(Idx=SDIO_CCCR_BEGIN; Idx<=SDIO_CCCR_END; Idx++) - { - ntStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)Idx, //Offset - FALSE, //Read operation - &Data); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("SDIO CCCR[%#x]:%x\n", Idx, Data)); - - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Get CCCR[%#x] fail!! status(%#x)\n", Idx, ntStatus)); - return RT_STATUS_FAILURE; - } - } - } - - - // - // Retrieve FBR info - // - if(GlobalSdioDbg & SDIO_DBG_FBR) - { - for(Idx=SDIO_FBR_FUNC1_BEGIN; Idx<=SDIO_FBR_FUNC1_END; Idx++) - { - ntStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)Idx, //Offset - FALSE, //Read operation - &Data); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("SDIO FBR[%#x]:%x\n", Idx, Data)); - - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Get FBR[%#x] fail!! status(%#x)\n", Idx, ntStatus)); - return RT_STATUS_FAILURE; - } - } - } - - - // - // Retrieve CIS Area info - // - if(GlobalSdioDbg & SDIO_DBG_CIS) - { - - for(Idx=SDIO_CIS_BEGIN; Idx<=SDIO_CIS_END; Idx++) - { - ntStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)Idx, //Offset - FALSE, //Read operation - &Data); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("SDIO CIS[%#x]:%x\n", Idx, Data)); - - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Get CIS[%#x] fail!! status(%#x)\n", Idx, ntStatus)); - return RT_STATUS_FAILURE; - } - } - } - - - return rtstatus; -} - - - -// -// Description: -// Find a device's tuple in CIS Area. -// input: pDevice - the device that is the target of the command. -// input: Tuple - 8-bit ID of tuple to find -// input: pTupleScanAddress - On entry pTupleScanAddress is the adddress to start scanning -// input: pLength - length of pBuffer -// -// output: pBuffer - storage for tuple -// output: pTupleScanAddress - address of the next tuple -// output: pLength - length of tuple read -// -// return: RT_STATUS -// -// Assumption: -// A Secure Digital (SD) card bus interface has been initialized. -// -// 2011.03.17, created by Roger. -// -RT_STATUS -N6SdioFindCisTuple( - IN PRT_SDIO_DEVICE pDevice, - IN u1Byte Tuple, - IN OUT pu4Byte pTupleScanAddress, - OUT pu1Byte pBuffer, - IN OUT pu1Byte pLength - ) -{ - u4Byte scanStart = *pTupleScanAddress; - u1Byte tupleCode; - u1Byte tupleLink; - RT_STATUS status = RT_STATUS_SUCCESS; - - // Sanity check - if( scanStart < SDIO_CIS_BEGIN ) - return RT_STATUS_FAILURE; - - while (TRUE) { - - //Check for end - if (scanStart > SDIO_CIS_END) { - status = RT_STATUS_FAILURE; - break; - } - - //Get the code - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)scanStart, //Offset - FALSE, //Read operation - &tupleCode); - if ( status != RT_STATUS_SUCCESS ) { - break; - } - - if (CISTPL_END == tupleCode) { - //found the end - status = RT_STATUS_FAILURE; - break; - } - - // Bump past tuple code - scanStart++; - - //Get the tuple link value - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)scanStart, //Offset - FALSE, //Read operation - &tupleLink); - - if ( status != RT_STATUS_SUCCESS ) { - break; - } - - //Bump past tuple link - scanStart++; - - //Check tuple we just found - if (tupleCode == Tuple) { - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioFindCisTuple(): Tuple:0x%2.2X Found at Address:0x%X, TupleLink:0x%X \n", - Tuple, (scanStart - 2), tupleLink)); - - if (tupleLink != CISTPL_LINK_END) { - //return the next scan address to the caller - *pTupleScanAddress = scanStart + tupleLink; - } else { - //the tuple link is an end marker - *pTupleScanAddress = 0xFFFFFFFF; - } - - //Go get the tuple - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - MIN(*pLength,tupleLink), //Byte Count - (ULONG)scanStart, //Offset - FALSE, //Read operation - pBuffer); - - if (status == RT_STATUS_SUCCESS) { - //Set the actual return length - *pLength = MIN(*pLength,tupleLink); - } - //Break out of loop - break; - } - - //Increment past this entire tuple - scanStart += tupleLink; - } - - return RT_STATUS_SUCCESS; -} - - -// -// Description: -// The Card Information Structure provides more complete information about the card -// and the individual functions. The CIS is the common area to read information about all I/O -// functions that exist in a card. The design is based on the PC Card16 design standardized by -// PCMCIA. All cards that support I/O shall have a common CIS and a CIS for each function. -// -// Assumption: -// A Secure Digital (SD) card bus interface has been initialized. -// -// 2011.03.16, created by Roger. -// -RT_STATUS -N6SdioQueryCISArea( - IN PRT_SDIO_DEVICE pDevice -) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - PADAPTER pAdapter = pDevice->pAdapter; - u1Byte CisBuffer[3]; - u4Byte tplAddr = 0; - u1Byte Length = 0; - - - // - // This 3-byte pointer points to the start of the card's common CIS. The common CIS - // contains information relation to the entire card. A card common CIS is mandatory for - // all SDIO cards. This pointer is stored in little-endian format (LSB first). - // - rtStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 3, //Byte Count - (ULONG)SDIO_CCCR_COMMON_CIS_PTR, //Offset - FALSE, //Read operation - CisBuffer); - - // This is Endian-Safe - pDevice->SdioCommonCISPtr = EF4Byte(((u4Byte)CisBuffer[0]) | - (((u4Byte)CisBuffer[1]) << 8) | - (((u4Byte)CisBuffer[2]) << 16)); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioQueryCISArea(): SdioCommonCISPtr(%#x)\n", pDevice->SdioCommonCISPtr)); - - PlatformZeroMemory(&pDevice->Sdiomanfid, sizeof(pDevice->Sdiomanfid)); - Length = sizeof(pDevice->Sdiomanfid); - tplAddr = RT_GET_SDIO_COMMON_CISPTR(pDevice); - - // Get the MANFID tuple - rtStatus = N6SdioFindCisTuple( - pDevice, - CISTPL_MANFID, - &tplAddr, - (pu1Byte)&pDevice->Sdiomanfid, - &Length); - - if ( rtStatus != RT_STATUS_SUCCESS ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("SDIO Bus Driver: Failed to get MANFID tuple error:%d \n", rtStatus)); - } - else - { - - //save this off so that it can be copied into each SDIO Func's SDDEVICE structure - pDevice->SDIO_ManufacturerCode = - EF2Byte(pDevice->Sdiomanfid.ManufacturerCode); - pDevice->SDIO_ManufacturerInfo = - EF2Byte(pDevice->Sdiomanfid.ManufacturerInfo); - - // - // HardwareType shall be assigned in HAL_ReadTypeID routine instead on SDIO interface - // to meet extensible requirements for PID creation. - // Revised by Roger. 2014.10.28. - // -#if 0 - if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8723S_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8723AS; - else if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8188E_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8188ES; - else if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8821S_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8821S; - else if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8192ES_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8192ES; - else if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8814AS_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8814AS; - else if((pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8723BS_PID) || - (pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8723BS_PID_TEST_CHIP) || - (pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8723BS_PID_ACER) || - (pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8723BS_PID_HP)) - { - pAdapter->HardwareType = HARDWARE_TYPE_RTL8723BS; - } - else if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8703BS_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8703BS; - else if(pDevice->SDIO_ManufacturerInfo == HAL_HW_SDIO_8821BS_PID) - pAdapter->HardwareType = HARDWARE_TYPE_RTL8821BS; - else - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("N6SdioQueryCISArea(): Invalid MANFINFO!!")); - pAdapter->HardwareType = HARDWARE_TYPE_MAX; - } -#endif - - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_VID, (pu1Byte)&pDevice->SDIO_ManufacturerCode); - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_PID, (pu1Byte)&pDevice->SDIO_ManufacturerInfo); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("SDIO MANFCODE:0x%X, MANFINFO:0x%X \n", - pDevice->SDIO_ManufacturerCode, - pDevice->SDIO_ManufacturerInfo)); - } - - RT_TRACE(COMP_INIT, DBG_WARNING, ("N6Sdio(): SDIO_ManufacturerInfo(%#x)\n", pDevice->SDIO_ManufacturerInfo)); - RT_TRACE(COMP_INIT, DBG_WARNING, ("N6SdioQueryCISArea(): HardwareType(%#x)\n", pAdapter->HardwareType)); - - return rtStatus; - -} - -// -// Description: -// For Intel Bay trail platform, SDIO bus clock is expected to run in 50MHz (high speed), -// so we confiure it to 50MHz by miniport driver. It is a work around because -// clock value and CCCR[13] should be configured by bus driver. -// -// -// 2013.08.14, added by tynli. -// -NTSTATUS -N6SdioConfigureBusCLKByWorkAround( - IN PRT_SDIO_DEVICE pDevice -) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - RT_STATUS status = RT_STATUS_FAILURE; - u1Byte Data=0; - u4Byte SdioBusClk=0; - - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - FALSE, //Read operation - &Data); - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("Read SDIO CCCR[0x13] Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - RT_TRACE(COMP_INIT, DBG_LOUD, (">>>>>>>>>>>> 1 SDIO CCCR[0x13]:%x\n", Data)); - - if(Data&BIT0) // support SHS - { - if( !(Data&BIT1) ) // not in 50MHz - { - // - // Set SDIO clock to 50MHz if support SHS in CCCR register. - // - SdioBusClk = 50000; - ntStatus = PlatformSdioSetProperty(pDevice, - SDP_BUS_CLOCK, - &SdioBusClk, - sizeof(SdioBusClk)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("Set SDP_BUS_CLOCK Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - // - // Enable BSS in CCCR. - // - Data |= BIT1; //[3:1] BSS - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - TRUE, //Write operation - &Data); - - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD,("Write SDIO CCCR[0x13] Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - // To be removed ... - RT_TRACE(COMP_INIT, DBG_LOUD, (">>>>>>>>>>>> 2 SDIO CCCR[0x13]:%x\n", Data)); - - Data = 0; - delay_ms(10); - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - FALSE, //Read operation - &Data); - - RT_TRACE(COMP_INIT, DBG_LOUD, (">>>>>>>>>>>> 3 SDIO CCCR[0x13]:%x\n", Data)); - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("3 SDIO CCCR[0x13] Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - // End of To be removed ... - - pDevice->bSdioBusClkRaised = TRUE; - - } - } - return STATUS_SUCCESS; -} - -// -// Description: -// Similiar with N6SdioConfigureBusCLKByWorkAround(), but this is for set the SDIO bus clk at 25MHz. -// -// 2013.04.14, added by TzuHang. -// -NTSTATUS -N6SdioConfigureBusCLK_SDR12( - IN PRT_SDIO_DEVICE pDevice -) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - RT_STATUS status = RT_STATUS_FAILURE; - u1Byte Data = 0; - u4Byte SdioBusClk = 0; - - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - FALSE, //Read operation - &Data); - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("Read SDIO CCCR[0x13] Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - RT_TRACE(COMP_INIT, DBG_LOUD, (">>>>>>>>>>>> 1 SDIO CCCR[0x13]:%x\n", Data)); - - // - // Set SDIO clock to 50MHz if support SHS in CCCR register. - // - SdioBusClk = 25000; - ntStatus = PlatformSdioSetProperty(pDevice, - SDP_BUS_CLOCK, - &SdioBusClk, - sizeof(SdioBusClk)); - - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("Set SDP_BUS_CLOCK Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - // - // Enable BSS in CCCR. - // - Data &= ~(BIT1|BIT2); //[3:1] BSS - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - TRUE, //Write operation - &Data); - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD,("Write SDIO CCCR[0x13] Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - // To be removed ... - RT_TRACE(COMP_INIT, DBG_LOUD, (">>>>>>>>>>>> 2 SDIO CCCR[0x13]:%x\n", Data)); - - Data = 0; - delay_ms(10); - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - FALSE, //Read operation - &Data); - - RT_TRACE(COMP_INIT, DBG_LOUD, (">>>>>>>>>>>> 3 SDIO CCCR[0x13]:%x\n", Data)); - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("3 SDIO CCCR[0x13] Property FAIL!!\n")); - return STATUS_SUCCESS; //do not cause init fail - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("Done Set SDIO clk to SDR12\n")); - - // End of To be removed ... - return STATUS_SUCCESS; -} - - -// -// Description: -// Configure/Retrieve SDIO bus related properties and configurations. -// Common I/O Area(CIA) in function 0: -// - Card Common Control Registers(CCCR) -// - Function Basic Registers(FBR) -// - Card Information Structure(CIS) -// -// Assumption: -// A Secure Digital (SD) card bus interface has been initialized. -// -// 2010.12.09, added by Roger. -// -NTSTATUS -N6SdioConfigureDevice( - IN PRT_SDIO_DEVICE pDevice -) -{ - NTSTATUS ntStatus = STATUS_SUCCESS; - RT_STATUS rtstatus = RT_STATUS_SUCCESS; - BOOLEAN bEnableInt = FALSE; - u1Byte IENx = 0; - u4Byte Idx = 0; - u1Byte u1bData = 0; - - - // - // We should get Function number first. - // - ntStatus = PlatformSdioGetProperty( - pDevice, - SDP_FUNCTION_NUMBER, - &pDevice->SdioFuncNum, - sizeof(pDevice->SdioFuncNum)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - - // - // Query SDIO Card Information Structure - // - rtstatus = N6SdioQueryCISArea(pDevice); - if(rtstatus != RT_STATUS_SUCCESS){ - return STATUS_UNSUCCESSFUL; - } - - - // - // Dump SDIO IO Bus related information if needed. - // - rtstatus = N6SdioDumpDeviceProperty(pDevice); - if(rtstatus != RT_STATUS_SUCCESS){ - return STATUS_UNSUCCESSFUL; - } - - - // - // Get Driver Version - // - ntStatus = PlatformSdioGetProperty( - pDevice, - SDP_BUS_DRIVER_VERSION, - &pDevice->SdioBusDriverVer, - sizeof(pDevice->SdioBusDriverVer)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - - // - // Read CCCRx Format Version Number and SDIOx Specification Revision Number. - // - ntStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)SDIO_CCCRx_SDIOx, //Offset - FALSE, //Read operation - &pDevice->SdioRevNum); - - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Get SDIO_CCCRx_SDIOx failed:%x\n", ntStatus)); - return ntStatus; - } - - - // - // Retrieve SD Format Version Number. - // - ntStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)SDIO_CCCR_SDx, //Offset - FALSE, //Read operation - &pDevice->SdioFormatVer); - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Get SDIO_CCCR_SDx failed:%x\n", ntStatus)); - return ntStatus; - } - - if( pDevice->SdioBusDriverVer >= SDBUS_DRIVER_VERSION_2 && - ((pDevice->SdioRevNum & 0x0f) >= 0x02) && // CCCR v2.0 - ((pDevice->SdioRevNum & 0xf0) >= 0x30)) // SDIO v2.0 - { - - u2Byte SdioFuncBlockSize = SDIO_BUS_SIZE; - - - // - // Read interrupt property from current function. - // - ntStatus = PlatformSdioGetProperty( - pDevice, - SDP_FUNCTION_INT_ENABLE, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - // - // Set interrupt property from current function. - // - if(!bEnableInt) - { - bEnableInt = TRUE; // Enable interrupt for our function - ntStatus = PlatformSdioSetProperty( - pDevice, - SDP_FUNCTION_INT_ENABLE, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - } - - // - // Read CCCR interrupt - // - ntStatus = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)SDIO_CCCR_IENx, //Offset - FALSE, //Read operation - &IENx); - - if (!NT_SUCCESS(ntStatus)) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Get REG_CCCR_IENx failed:%x\n", ntStatus)); - return ntStatus; - } - - - if(pDevice->bRegSdioDrivingEnable) - { - // - // Set SDIO Driving capabilities - // NOTICE: If the host driving is too weak to reach here, - // this function will be no-use. - // - u1bData = 0; - rtstatus = PlatformSdioCmd52ReadWrite( - pDevice, - WLAN_IOREG_DEVICE_ID, //Device ID - 1, //Function Number - 1, //Byte Count - (ULONG)0x74, //Offset - FALSE, //Read operation - &u1bData); - - u1bData &= ~((BIT5)|(BIT6)|(BIT7)); - u1bData |= (pDevice->RegSdioDriving) << 5; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("Set SDIO Driving to: %#x\n", u1bData)); - - rtstatus = PlatformSdioCmd52ReadWrite( - pDevice, - WLAN_IOREG_DEVICE_ID, //Device ID - 1, //Function Number - 1, //Byte Count - (ULONG)0x74, //Offset - TRUE, //Write operation - &u1bData); - - if (rtstatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Set SDIO Driving failed:%x\n", ntStatus)); - return ntStatus; - } - } - - // - // Get Bus Bandwidth - // - ntStatus = PlatformSdioGetProperty(pDevice, - SDP_BUS_WIDTH, - &pDevice->SdioBusWidth, - sizeof(pDevice->SdioBusWidth)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - // Control SDIO Clock rate settings - if(pDevice->bRegSdioSpeedSDR25) - { - N6SdioConfigureBusCLKByWorkAround(pDevice); - } - - // - // Get Bus clock - // - ntStatus = PlatformSdioGetProperty(pDevice, - SDP_BUS_CLOCK, - &pDevice->SdioBusClk, - sizeof(pDevice->SdioBusClk)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - - // - // Get Host Block size, the maximum block length that is supported by the controller - // - ntStatus = PlatformSdioGetProperty(pDevice, - SDP_HOST_BLOCK_LENGTH, - &pDevice->SdioHostBlockSize, - sizeof(pDevice->SdioHostBlockSize)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - - // - // Set SDIO Function Block Size - // - ntStatus = PlatformSdioSetProperty(pDevice, - SDP_FUNCTION_BLOCK_LENGTH, - &SdioFuncBlockSize, - sizeof(SdioFuncBlockSize)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - - // - // Get SDIO Function Block length, i.e., Read I/O Block size for Function 1 in FBR register offset 0x110 - // - ntStatus = PlatformSdioGetProperty(pDevice, - SDP_FUNCTION_BLOCK_LENGTH, - &pDevice->SdioFuncBlockSize, - sizeof(pDevice->SdioFuncBlockSize)); - if(!NT_SUCCESS(ntStatus)){ - return ntStatus; - } - - if(pDevice->SdioFuncBlockSize != SDIO_BUS_SIZE) - return STATUS_UNSUCCESSFUL; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==================SDIO Bus Info==================\n")); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioFuncBlockSize(%d)\n", pDevice->SdioFuncBlockSize)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioHostBlockSize(%d)\n", pDevice->SdioHostBlockSize)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioBusClk(%d)\n", pDevice->SdioBusClk)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioBusWidth(%d)\n", pDevice->SdioBusWidth)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioFuncNum(%d)\n", pDevice->SdioFuncNum)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioBusDriverVer(%d)\n", pDevice->SdioBusDriverVer)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioRevNum(%d)\n", pDevice->SdioRevNum)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): SdioFormatVer(%d)\n", pDevice->SdioFormatVer)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): CCCR IENx(%#x)\n", IENx)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioConfigureDevice(): Function Interrupt Enable(%d)\n", bEnableInt)); - RT_TRACE(COMP_INIT, DBG_LOUD, ("=================================================\n")); - - } - else - { - ntStatus = STATUS_UNSUCCESSFUL; - } - - return ntStatus; -} - - - -NDIS_STATUS -N6SdioRestart( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_MINIPORT_RESTART_PARAMETERS MiniportRestartParameters - ) -/*++ - -Routine Description: - - NDIS calls the miniport driver's MiniportRestart function to cause - the miniport to return the adapter to the Running state. - During the restart, the miniport driver must complete any tasks - that are required to resume send and receive operations before - completing the restart request. - -Argument: - - MiniportAdapterContext Pointer to our adapter - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_PENDING Can it return pending - NDIS_STATUS_XXX The driver fails to restart - - ---*/ -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - N6C_MP_DRIVER_STATE CurrDriverState; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==> MiniportRestart(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - // - // Reset rx packet waiting mechanism. - // - N6CStartWaitReturnPacketMechanism(pAdapter); - - // - // Mark the miniport driver as running state to accept tx/rx request. - // - CurrDriverState = N6C_GET_MP_DRIVER_STATE(pAdapter); - - //RT_ASSERT( (CurrDriverState == MINIPORT_PAUSED), - // ("MiniportRestart(): unexpected state (%#d)!!!\n", CurrDriverState)); - - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_RUNNING); - - { - PADAPTER pTargetAdapter = GetFirstExtAdapter(pAdapter); - while(pTargetAdapter != NULL) - { - N62CHelperHandleMiniportRestart(pTargetAdapter, MiniportRestartParameters); - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - // To make sure that we will NOT fail to indicate phy status during initialization process. - //DrvIFIndicateCurrentPhyStatus(pAdapter); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== MiniportRestart(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -N6SdioPause( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters - ) -/*++ - -Routine Description: - - Miniport pause and restart are new features introduced in NDIS 6.0. - NDIS calls a miniport driver's MiniportPause function to stop - data flow before a Plug and Play operation, such as adding or - removing a filter driver or binding or unbinding a protocol driver, - is performed. The adapter remains in the Pausing state until the - pause operation has completed. - - When in the Paused state, a miniport driver can indicate status by - calling the NdisMIndicateStatusEx function. In addition, the miniport - driver should do the following: - - Wait for all calls to the NdisMIndicateReceiveNetBufferLists - function to return. - - Wait for NDIS to return the ownership of all NET_BUFFER_LIST - structures from outstanding receive indications to the miniport - driver's MiniportReturnNetBufferLists function. - - Complete all outstanding send requests by calling NdisMSendNetBufferListsComplete. - - Reject all new send requests made to its MiniportSendNetBufferLists - function by immediately calling the NdisMSendNetBufferListsComplete - function. The driver should set the completion status in each - NET_BUFFER_LIST structure to NDIS_STATUS_PAUSED. - - Continue to handle OID requests in its MiniportOidRequest function. - - Not stop the adapter completely if doing so prevents the driver - from handling OID requests or providing status indications. - - Not free the resources that the driver allocated during initialization. - - Continue to handle DevicePnPEvent notifications. - - NDIS calls the miniport driver's MiniportRestart function to cause - the miniport to return the adapter to the Running state. - During the restart, the miniport driver must complete any tasks - that are required to resume send and receive operations before - completing the restart request. - -Argument: - - MiniportAdapterContext Pointer to our adapter - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_PENDING - -NOTE: A miniport can't fail the pause request - ---*/ -{ - PADAPTER pAdapter = (PADAPTER)MiniportAdapterContext; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - - N6C_MP_DRIVER_STATE CurrDriverState; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("==> MiniportPause(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - - // - // Mark the miniport driver as pausing state to reject tx/rx request. - // - - if(pAdapter->MgntInfo.NdisVersion < RT_NDIS_VERSION_6_20) - { - CurrDriverState = N6C_GET_MP_DRIVER_STATE(pAdapter); - RT_ASSERT( (CurrDriverState < MINIPORT_PAUSED || - CurrDriverState > MINIPORT_PAUSING), - ("MiniportPause(): unexpected state (%#d)!!!\n", CurrDriverState)); - } - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSING); - - // - // Wait all NBL indicated up returned. - // - N6CWaitForReturnPacket(pAdapter); - - if(!pAdapter->MgntInfo.bSetWatchDogTimerByDriver) - CancelWatchDogTimer(pDefaultAdapter); - - // - // Mark the miniport driver as paused state. - // - N6C_SET_MP_DRIVER_STATE(pAdapter, MINIPORT_PAUSED); - - // - // Pause the ext adapter. - // - { - PADAPTER pTargetAdapter = GetFirstExtAdapter(pAdapter); - - while(pTargetAdapter != NULL) - { - N62CHelperHandleMiniportPause(pTargetAdapter, MiniportPauseParameters); - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== MiniportPause(), DriverState(%d)\n", N6C_GET_MP_DRIVER_STATE(pAdapter))); - return NDIS_STATUS_SUCCESS; -} - - -VOID -N6SdioShutdown( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_SHUTDOWN_ACTION ShutdownAction - ) -/*++ - -Routine Description: - - The MiniportShutdown handler restores a NIC to its initial state when - the system is shut down, whether by the user or because an unrecoverable - system error occurred. This is to ensure that the NIC is in a known - state and ready to be reinitialized when the machine is rebooted after - a system shutdown occurs for any reason, including a crash dump. - - Here just disable the interrupt and stop the DMA engine. - Do not free memory resources or wait for any packet transfers - to complete. - - - Runs at an arbitrary IRQL <= DIRQL. So do not call any passive-level - function. - -Arguments: - - MiniportAdapterContext Pointer to our adapter - -Return Value: - - None - ---*/ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - KIRQL Irql = KeGetCurrentIrql(); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(&Adapter->MgntInfo); - - - RT_TRACE(COMP_INIT, DBG_LOUD, (" ==> N6SdioShutdown()\n")); - - if(Irql == PASSIVE_LEVEL) - { - // - // Halt H/W. - // 060118, rcnjko: - // We must do it for Vista DTM will shutdown DUT machine before starting NDISTEST6.5. - // Otherwise, 87B F/W will default setting to respond what Host controler query - // which might different with the one in EEPROM, and therefore, - // NDISTEST 6.5 won't select the devise to test. - // - RT_TRACE(COMP_INIT, DBG_LOUD, ("calling NicIFHaltAdapter() by N6SdioShutdown()......\n")); - - Adapter->bDriverShutdown = TRUE; - -{ - PADAPTER pAdapter =GetNextExtAdapter(pDefaultAdapter); - while(pAdapter != NULL) - { - PADAPTER ptmpAdapter =GetNextExtAdapter(pAdapter); - pAdapter->bDriverShutdown= TRUE; - if( MultiPortIsActiveExtAdapter(pAdapter) == TRUE ) - N62CDeleteVirtualPort(pAdapter); - pAdapter =ptmpAdapter; - } -} - - // - // 2010/09/02 MH Before halt adapter, we need to leave ips/lps mode. Otherwise, selective suspend - // power save level will be limited by IPS flag RT_RF_OFF_LEVL_HALT_NIC(add by Tynli at 2010/03) - // 88/92C HW constraint, we can not use HW automatic shutdown sequence. According to Scoot and - // Alfred's suggestion (amil at 2010/09/02), if 8051 is alive and we try to close or reset clock. MAC hardware - // handshake may fail and 8051 can not access MAC register. It will produce many error condition. - // We need to close 8051 and execute firmware self reset to prevent HW power domain error. - // - LeaveAllPowerSaveMode(Adapter); - - // Leave HW 32K CLK - if(RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K) && - !(IS_CARD_DISABLE_IN_FW_LOW_PWR_STATE(Adapter))) - { - u1Byte FwPSState; - - RT_CLEAR_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K); // To prevent from clock off again - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioHalt(): Leave Hw 32K CLK.\n")); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - } - - NicIFHaltAdapter(Adapter, FALSE); - } - - RT_TRACE(COMP_INIT, DBG_LOUD, (" <== N6SdioShutdown()\n")); -} - - -VOID -N6SdioPnPEventNotify( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNET_DEVICE_PNP_EVENT NetDevicePnPEvent - ) -/*++ - -Routine Description: - - MPPnPEventNotify is to handle PnP notification messages. - An NDIS miniport driver with a WDM lower edge should export a - MiniportPnPEventNotify function so that it can be notified - when its NIC is removed without prior notification through - the user interface. When a miniport driver receives - notification of a surprise removal, it should note internally - that the device has been removed and cancel any pending Requests - that it sent down to the underlying bus driver. After calling - the MiniportPnPEventNotify function to indicate the surprise - removal, NDIS calls the miniportŠö MiniportHalt function. - If the miniport driver receives any requests to send packets - or query or set OIDs before its MiniportHalt function is - called, it should immediately complete such requests with a - status value of NDIS_STATUS_NOT_ACCEPTED. - - All NDIS 5.1 miniport drivers must export a MPPnPEventNotify - function. - - Runs at IRQL = PASSIVE_LEVEL in the context of system thread. - - Available - NDIS5.1 (WinXP) and later. - -Arguments: - - MiniportAdapterContext Pointer to our adapter - PnPEvent Self-explanatory - -Return Value: - - None - ---*/ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PVOID InformationBuffer = NetDevicePnPEvent->InformationBuffer; - u8Byte CurrentTime; - - RT_TRACE(COMP_INIT, DBG_LOUD, (" ==> N6SdioPnPEventNotify()\n")); - - switch(NetDevicePnPEvent->DevicePnPEvent) - { - case NdisDevicePnPEventSurpriseRemoved: - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioPnPEventNotify: NdisDevicePnPEventSurpriseRemoved\n")); - Adapter->bSurpriseRemoved = TRUE; - Adapter->SurpriseRemovedReason = HALT_BY_PNP_EVENT; - - // Release Tx semaphore before cancel corresponding Tx thread. - PlatformReleaseSemaphore(&device->TxSemaphore); - -#if (RK_PLATFORM_SUPPORT == 1) - PlatformReleaseMutex(&device->RxHandleIntMutex); -#endif - -#if RTL8723_SDIO_IO_THREAD_ENABLE - // Release IO semaphore before cancel corresponding IO thread. - PlatformReleaseSemaphore(&device->IOSemaphore); -#endif - - RT_DISP(FIOCTL, IOCTL_IRP_HANDLE, ("[IRP], complete driver unload IRP due to surprise removed!!!\n")); - PlatformIndicateCustomStatus( - Adapter, - RT_CUSTOM_EVENT_IRP_UNLOAD, - RT_CUSTOM_INDI_TARGET_IRP, - NULL, - 0); - - N6SdioReturnAllPendingTxPackets(Adapter); - - if(OS_SUPPORT_WDI(Adapter)) - { - if(Adapter->pPortCommonInfo->WdiData.bCommandHangHappened == TRUE) - { - WDICommandHangCleanup(Adapter); - } - WDI_PnPNotiry(Adapter); - } - - // - // Beacuse our NIC might be unplugged before system resume or under initialization. - // Which will cause BugCheck code 0x1d i.e., MiniPortCheckForHang calling back after driver was unloaded. - // We simply defer specific interval to fix this issue in passive level. - // To make sure that MiniPortCheckForHang has called back before driver halted. - // 2009.09.23. - // - if(!device->bChkForHangAfterPnP) - { - CurrentTime = PlatformGetCurrentTime(); - NdisWaitEvent(&device->SetPnpChkForHangEvent, RT_CHECK_FOR_HANG_PERIOD*1000); - RT_TRACE(COMP_INIT, DBG_TRACE, ("N6SdioPnPEventNotify(): Time spent %I64d us\n", - PlatformGetCurrentTime()-CurrentTime)); - } - break; - - case NdisDevicePnPEventPowerProfileChanged: - pPSC->PowerProfile = *( ( PULONG ) InformationBuffer ); - RT_TRACE(COMP_INIT, DBG_LOUD, ("NdisDevicePnPEventPowerProfileChanged- PowerProfile(%d)\n",pPSC->PowerProfile)); - N6SdioPowerSettingChangeNotify(Adapter); - break; - - case NdisDevicePnPEventQueryStopped: - case NdisDevicePnPEventStopped: - - case NdisDevicePnPEventQueryRemoved: - case NdisDevicePnPEventRemoved: - default: - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioPnPEventNotify: unknown PnP event %x \n", NetDevicePnPEvent->DevicePnPEvent)); - break; - } - RT_TRACE(COMP_INIT, DBG_LOUD, (" <== N6SdioPnPEventNotify()\n")); - return; -} - -NDIS_STATUS -N6SdioPowerSettingCallback( - IN CONST LPGUID SettingGuid, - IN PULONG Value, - IN ULONG ValueLength, - IN PVOID MiniportAdapterContext - ) -{ - PADAPTER Adapter = (PADAPTER) MiniportAdapterContext; - NDIS_STATUS Status = STATUS_INVALID_PARAMETER; - GUID PowerSetting_GUID = GUID_ACTIVE_POWERSCHEME;//GUID_POWERSCHEME_PERSONALITY; - GUID MaxPowerSaving_GUID = GUID_MAX_POWER_SAVINGS; - GUID TypicalPowerSaving_GUID = GUID_TYPICAL_POWER_SAVINGS; - GUID MinPowerSaving_GUID = GUID_MIN_POWER_SAVINGS; - - if( IsEqualGUID((LPGUID)(&PowerSetting_GUID), SettingGuid) - && (ValueLength == sizeof(GUID)) && Value != NULL ) - { - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - if(IsEqualGUID((LPGUID)&MaxPowerSaving_GUID,(LPGUID)Value) ) - pPSC->PowerSetting = POWERGUID_MAX_POWER_SAVINGS; - else if(IsEqualGUID((LPGUID)&TypicalPowerSaving_GUID,(LPGUID)Value)) - pPSC->PowerSetting = POWERGUID_TYPICAL_POWER_SAVINGS; - else if(IsEqualGUID((LPGUID)&MinPowerSaving_GUID,(LPGUID)Value) ) - pPSC->PowerSetting = POWERGUID_MIN_POWER_SAVINGS; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("%s PowerSetting(%d)\n", __FUNCTION__, pPSC->PowerSetting)); - - N6SdioPowerSettingChangeNotify(Adapter); - Status = STATUS_SUCCESS; - } - return Status; -} - -NDIS_STATUS -N6SdioWLANPowerModeCallback( - IN CONST LPGUID SettingGuid, - IN PULONG Value, - IN ULONG ValueLength, - IN PVOID MiniportAdapterContext - ) -{ - PADAPTER Adapter = (PADAPTER) MiniportAdapterContext; - NDIS_STATUS Status = STATUS_INVALID_PARAMETER; - GUID WLANPowerMode_GUID = GUID_WLAN_POWER_MODE; - u1Byte WLAN_Maximum_Performance[16] = - {0x4f,0x16,0xab,0xc1,0x4f,0x83,0x3d,0x46, 0x85, 0x44, 0xa4, 0x0e, 0x93, 0xab, 0x54, 0x72}; - u1Byte WLAN_Low_Power_Saving[16] = - {0xcb,0xbc,0x7c,0x78,0x4b,0xcd,0x76,0x47,0x8b, 0xe5, 0x5f, 0x8a, 0xe4, 0x72, 0x6f, 0x2b}; - u1Byte WLAN_Medium_Power_Saving[16] = - {0x12,0xe4,0x28,0x67,0xd1,0x40,0xb0,0x4a,0x8d, 0x15, 0xf3, 0xc5, 0x6f, 0x30, 0x3e, 0xb5}; - u1Byte WLAN_Maximum_Power_Saving[16] = - {0x0F,0xDC,0x12,0xE0,0x97,0x83,0xB5,0x46,0xA0, 0x60, 0x0D, 0xE8, 0x4F, 0x96, 0x38, 0x8E}; - - if( IsEqualGUID((LPGUID)(&WLANPowerMode_GUID), SettingGuid) - && (ValueLength == sizeof(GUID)) && Value != NULL ) - { - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - if(PlatformCompareMemory(WLAN_Maximum_Power_Saving, Value, ValueLength)==0) - pPSC->PowerMode = POWER_SAVING_MAXIMUM_LEVEL; - else if(PlatformCompareMemory(WLAN_Medium_Power_Saving, Value, ValueLength)==0) - pPSC->PowerMode = POWER_SAVING_MAX_PSP; - else if(PlatformCompareMemory(WLAN_Low_Power_Saving, Value, ValueLength)==0) - pPSC->PowerMode = POWER_SAVING_FAST_PSP; - else if(PlatformCompareMemory(WLAN_Maximum_Performance, Value, ValueLength)==0) - pPSC->PowerMode = POWER_SAVING_NO_POWER_SAVING; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("%s PowerMode(%d)\n", __FUNCTION__, pPSC->PowerMode)); - - N6SdioPowerSettingChangeNotify(Adapter); - Status = STATUS_SUCCESS; - } - return Status; -} - -VOID -N6SdioPowerSettingChangeNotify( - IN PADAPTER Adapter - ) -{ - PMGNT_INFO pMgntInfo=&(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioPowerSettingChangeNotify()\n")); - - Adapter->HalFunc.UpdateIPSStatusHandler(Adapter, pNdisCommon->RegInactivePsMode); - Adapter->HalFunc.UpdateLPSStatusHandler(Adapter, pNdisCommon->RegLeisurePsMode, pNdisCommon->RegPowerSaveMode); - - RT_TRACE( COMP_POWER, DBG_LOUD, ("%s : PowerPolicy %d bInactivePs=%d bLeisurePS=%d <==\n", - __FUNCTION__, pPSC->PowerPolicy, pPSC->bInactivePs, pPSC->bLeisurePs)); -} - -VOID -N6SdioHalt( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_HALT_ACTION HaltAction - ) -/*++ - -Routine Description: - - Halt handler is called when NDIS receives IRP_MN_STOP_DEVICE, - IRP_MN_SUPRISE_REMOVE or IRP_MN_REMOVE_DEVICE requests from the - PNP manager. Here, the driver should free all the resources acquired - in MiniportInitialize and stop access to the hardware. NDIS will - not submit any further request once this handler is invoked. - - 1) Free and unmap all I/O resources. - 2) todo Disable interrupt and deregister interrupt handler. - 3) Cancel all queued up timer callbacks. - 4) Finally wait indefinitely for all the outstanding receive - packets indicated to the protocol to return. - - MiniportHalt runs at IRQL = PASSIVE_LEVEL. - - -Arguments: - - MiniportAdapterContext Pointer to our adapter - HaltAction The reason adapter is being halted - -Return Value: - - None. - ---*/ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - NTSTATUS ntStatus = STATUS_SUCCESS; - BOOLEAN bCanceled; - PHAL_DATA_TYPE pHalData=GET_HAL_DATA(Adapter); - PRT_SDIO_DEVICE sdiodevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - RT_TRACE(COMP_INIT, DBG_LOUD, (" ==> N6SdioHalt()\n")); - - NDBG_Halt(Adapter); - - Adapter->bDriverIsGoingToUnload = TRUE; - - { - PADAPTER pAdapter = GetNextExtAdapter(pDefaultAdapter); - while(pAdapter != NULL) - { - PADAPTER ptmpAdapter = GetNextExtAdapter(pAdapter); - pAdapter->bDriverIsGoingToUnload = TRUE; - if( MultiPortIsActiveExtAdapter(pAdapter) == TRUE ) - N62CDeleteVirtualPort(pAdapter); - pAdapter = ptmpAdapter; - } - } - - PoUnregisterPowerSettingCallback(pNdisCommon->N6PowerSettingHandle); - PoUnregisterPowerSettingCallback(pNdisCommon->N6WLANPowerModeHandle); - //BT_HaltNotify(Adapter); - MgntResetJoinProcess(Adapter); - N6C_DeregisterIoDevice(Adapter); - - REMOVE_GLOBAL_ADAPTER_LIST(Adapter); - - if(ACTING_AS_AP(pDefaultAdapter)) - { - AP_DisassociateAllStation(pDefaultAdapter, unspec_reason); - PlatformSleepUs(500); - PlatformStopWorkItem( &(pMgntInfo->TbttPollingWorkItem)); - PlatformCancelTimer(pDefaultAdapter, &pDefaultAdapter->MgntInfo.pChannelInfo->SwBwTimer); - PlatformCancelTimer(pDefaultAdapter, &(pMgntInfo->SwBeaconTimer)); - - } - - PlatformStopWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - - LeaveAllPowerSaveMode(Adapter); - - // Leave HW 32K CLK - if(RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K) && - !IS_CARD_DISABLE_IN_FW_LOW_PWR_STATE(Adapter)) - { - u1Byte FwPSState; - - RT_CLEAR_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K); // To prevent from setting clock off again - if(pDefaultAdapter->bFWReady) - { - pDefaultAdapter->HalFunc.GetHwRegHandler(pDefaultAdapter, HW_VAR_FW_PS_STATE, &FwPSState); - if(IS_IN_LOW_POWER_STATE(pDefaultAdapter, FwPSState)) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioHalt(): Leave Hw 32K CLK.\n")); - pDefaultAdapter->HalFunc.SetHwRegHandler(pDefaultAdapter, HW_VAR_RESUME_CLK_ON, (pu1Byte)(&pDefaultAdapter)); - } - } - } - - NicIFClearInterrupt(Adapter); - - //sync with pcie,wait for RF change complete - PlatformAcquireSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - while( pMgntInfo->RFChangeInProgress) - { - PlatformReleaseSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - - RT_TRACE(COMP_POWER,DBG_LOUD, - ("RF is in progress, need to wait until rf chang is done.\n")); - delay_ms(1); - - PlatformAcquireSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - } - PlatformReleaseSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - - // - // 2010/08/13 MH We need to move the flag setting after LeaveAllPowerSaveMode(). - // Otherwise, we may not leave IPS and call NicIFHaltAdapter. This will block the halt sequence - // or S3/S4 enter sequence for about 10010000 us. - // - Adapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - // - // Halt H/W. - // - NicIFHaltAdapter(Adapter, FALSE); - - Adapter->HalFunc.WaitForH2CQueueEmptyHandler(Adapter); - - if(((pMgntInfo->RfOffReason & (RF_CHANGE_BY_IPS|RF_CHANGE_BY_SW|RF_CHANGE_BY_HW)) && - RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K)) || pPSC->bInDxFwIPSPeriod) - { - // Wait FW 32K Event - // Prefast warning C28121: The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - if(!NdisWaitEvent(&sdiodevice->FwPsClockOffEvent, 20)) - { - // Force Hw clock off to 32K - RT_TRACE(COMP_POWER, DBG_LOUD, ("Force Hw clock off to 32K!\n")); - SetFwPSRFOffLowPower(Adapter); - } - } - - if(device->bSdioBusClkRaised) - { - N6SdioConfigureBusCLK_SDR12(device); - } - - // We MUST perform necessary IO before setting bDriverStopped and bSurpriseRemoved flags, - // since we will reject further Sync IO in RTusbCallUSBD() if bDriverStopped || bSurpriseRemoved. - // 2005.01.13, by rcnjko. - Adapter->bDriverStopped = TRUE; - - // - // Mark the miniport driver as halted state. - // -// RT_ASSERT( (N6C_GET_MP_DRIVER_STATE(Adapter) == MINIPORT_PAUSED), -// ("MiniportHalt(): DriverState(%d) != PAUSED !!!\n", N6C_GET_MP_DRIVER_STATE(Adapter))); - N6C_SET_MP_DRIVER_STATE(Adapter, MINIPORT_HALTED); - - // SyncIo Method 2. - // We must wake up the workitems waiting for SyncIo event before, - // waiting all workitem completed. 2005.01.06, by rcnjko. - if(device->SyncIoWaitingCount>0) - { // If there is workitem waiting. - RT_TRACE(COMP_DBG, DBG_LOUD,("RTusbHalt(): there is workitem is waiting...\n")); - KeSetEvent( &(device->SyncIoEvent), 0, FALSE); - } -#if 0 - // DeInitialize for debugging realted resource. 2005.04.21, by rcnjko. - N6SdioDbgHalt(Adapter); -#endif - // Release common NDIS resource in PRT_NDIS6_COMMON. 2006.05.07, by rcnjko. - if(pMgntInfo->bSupportPacketCoalescing) - { - // All D0 close packet !! - N6FulshD0CoalescingQueue(Adapter, TRUE, FALSE); - } - ReleaseNdis6CommonResources(Adapter); - -#if POWER_MAN - //PNP - //20061206 david - PlatformFreeWorkItem( &(device->PnpWorkItem) ); -#endif //powerman - - -// ======================= -// This part shall be move to COMMON folder. - // RemoveAllTS must call here!! - // This function shall be called before MPShutdown(). - // For Traffic Stream. Remove all TS before HALT - - NicIFDisableInterrupt(Adapter); - RemoveAllTS(Adapter); - ReleaseAllTSTimer(Adapter); - PlatformCancelTimer(Adapter, &pMgntInfo->pChannelInfo->SwBwTimer); -//========================= - - // Free native 802.11 MIBs, 2006.10.10, by shien chang. - N6SdioFreeNative80211MIBs(Adapter); - -#if USE_WDF_SDIO - WdfSdio_Disable(Adapter); -#else - N6WdmSdio_Disable(Adapter); -#endif - - // Release Tx semaphore before cancel corresponding Tx thread. - PlatformReleaseSemaphore(&device->TxSemaphore); - -#if (RK_PLATFORM_SUPPORT == 1) - PlatformReleaseMutex(&device->RxHandleIntMutex); -#endif - - // Free Tx semaphore. - PlatformFreeSemaphore(&device->TxSemaphore); - -#if RTL8723_SDIO_IO_THREAD_ENABLE - // Release IO semaphore before cancel corresponding IO thread. - PlatformReleaseSemaphore(&device->IOSemaphore); - - // Free IO semaphore. - PlatformFreeSemaphore(&device->IOSemaphore); -#endif - - N6SdioCancelAllTimer( Adapter ); - - // - // We should configure our EHCI into J-State to save more power consumption - // while NIC is still plug-in but disabled. - // 2010.05.02. - // - if(!Adapter->bSurpriseRemoved) - { - // TODO - } - - //---------------------------------------------------------------------------- - // NOTE! Adapter is released in N6SdioFreeAll(), - // so, we MUST NOT access Adapter after it. 2006.03.08, by rcnjko. - //---------------------------------------------------------------------------- - N6SdioFreeAll( Adapter ); -#if (WPP_SOFTWARE_TRACE == 0) - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_AllocateMemory_count = %"i64fmt"d\n",RTL_AllocateMemory_count)); - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_FreeMemory_count = %"i64fmt"d\n",RTL_FreeMemory_count)); - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_AllocateMemory_Len = %"i64fmt"d\n",RTL_AllocateMemory_Len)); - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_FreeMemory_Len = %"i64fmt"d\n",RTL_FreeMemory_Len)); - - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_P2P_AllocateMemory_count = %"i64fmt"d\n",RTL_P2P_AllocateMemory_count)); - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_P2P_FreeMemory_count = %"i64fmt"d\n",RTL_P2P_FreeMemory_count)); - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_P2P_AllocateMemory_Len = %"i64fmt"d\n",RTL_P2P_AllocateMemory_Len)); - RT_TRACE(COMP_INIT, DBG_LOUD, (" RTL_P2P_FreeMemory_Len = %"i64fmt"d\n",RTL_P2P_FreeMemory_Len)); -#endif - RT_TRACE(COMP_INIT, DBG_LOUD, (" <== N6SdioHalt()\n")); - return; -} - - -VOID -N6SdioUnload( - IN PDRIVER_OBJECT DriverObject - ) -/*++ - -Routine Description: - - The unload handler is called during driver unload to free up resources - acquired in DriverEntry. Note that an unload handler differs from - a MiniportHalt function in that the unload handler has a more global - scope, whereas the scope of the MiniportHalt function is restricted - to a particular miniport driver instance. - - During an unload operation, an NDIS 6.0 miniport driver must deregister - the miniport driver by calling NdisMDeregisterMiniportDriver - and passing the MiniportDriverHandle as a parameter. - The driver obtained the MiniportDriverHandle when it called - NdisMRegisterMiniportDriver. - - Runs at IRQL = PASSIVE_LEVEL. - -Arguments: - - DriverObject Not used - -Return Value: - - None - ---*/ -{ - RT_TRACE(COMP_INIT, DBG_LOUD, ("==> N6SdioUnload()\n")); - - UNREFERENCED_PARAMETER(DriverObject); - -#if USE_WDF_SDIO - WdfDriverMiniportUnload(WdfGetDriver()); -#endif - -#if (WDI_SUPPORT == 1) - if(NdisGetVersion() >= NDIS_VERSION_BASE_6_50) - { - WDI_DeInitialize(GlobalRtDriverContext.NdisContext.Ndis6MiniportDriverHandle); - } - else -#endif - { - NdisMDeregisterMiniportDriver(GlobalRtDriverContext.NdisContext.Ndis6MiniportDriverHandle); - } - - GlobalRtDriverContext.NdisContext.Ndis6MiniportDriverHandle = NULL; - - RT_ASSERT(RTIsListEmpty(&(GlobalRtDriverContext.AdapterList)), ("GlobalRtDriverContext.AdapterList is not empty!\n")); - RT_ASSERT(RTIsListEmpty(&(GlobalRtDriverContext.NdisContext.IoDeviceList)), ("IoDevice List is not empty!\n")); - PLATFORM_FREE_RT_SPINLOCK(GlobalRtDriverContext.ContextLock); - - /* Add for DBG ver. memory alloc/free, 2014.04.24, hsiao_ho */ - RtDbgDeinitMem(); - /* Add for DBG ver. Mutex, 2014.05.19, hsiao_ho */ - RtDbgDeinitMutex(); - /* Add for DBG ver. Spinlock, 2014.05.21, hsiao_ho */ - RtDbgDeinitSpinlock(); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("<== N6SdioUnload()\n")); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingUnregister(g_hProvider); -#endif - -#if WPP_SOFTWARE_TRACE - WPP_CLEANUP(DriverObject); -#endif - -} - - -NDIS_STATUS -N6SdioOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST NdisRequest - ) -/*++ -Routine Description: - - NDIS calls a miniport driver's MiniportOidRequest function to send an OID - request to the driver. These OID requests are serialized so the - MiniportOidRequest function is not called until the pending OID request - has completed. MiniportOidRequest can be called at either IRQL - PASSIVE_LEVEL or IRQL DISPATCH_LEVEL. - - If the MiniportOidRequest function returns NDIS_STATUS_PENDING, - the miniport driver must subsequently call the NdisMOidRequestComplete - function to complete the request. NdisMOidRequestComplete can be called - at either IRQL DISPATCH_LEVEL or IRQL PASSIVE_LEVEL. - -Arguments: - - MiniportAdapterContext Pointer to the adapter structure - NdisRequest Pointer to NDIS_OID_REQUEST - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_NOT_SUPPORTED - NDIS_STATUS_BUFFER_TOO_SHORT - ---*/ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pTargetAdapter = GetAdapterByPortNum(Adapter, (u1Byte)NdisRequest->PortNumber); - NDIS_STATUS ndisStatus=NDIS_STATUS_NOT_RECOGNIZED; - u2Byte i; - BOOLEAN bSetOPMode=FALSE; - u4Byte portType = 0; - KIRQL irql = NDIS_CURRENT_IRQL(); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> N6SdioOidRequest()\n")); - - NdisOIDHistoryUpdate(Adapter, NdisRequest, RT_OID_HISTORY_STARTED); - - do - { - if(OS_SUPPORT_WDI(Adapter)) - { - ndisStatus = WDI_HandleOidRequest( - MiniportAdapterContext, - NdisRequest - ); - } - - if( NDIS_STATUS_NOT_RECOGNIZED == ndisStatus ) - { - if(!N6_INIT_READY(Adapter)) - { - if( (NdisRequest->RequestType==NdisRequestMethod|| NdisRequest->RequestType==NdisRequestSetInformation) && - (NdisRequest->DATA.QUERY_INFORMATION.Oid==OID_DOT11_SCAN_REQUEST) ) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("N6SdioOidRequest(): The pending oid is Scan request\n")); - pMgntInfo->bPendScanOID = TRUE; - pMgntInfo->bCheckScanTime = TRUE; - pMgntInfo->ScanOnlyStartTime = PlatformGetCurrentTime(); - } - } - - if(InitializePendingOIDBeforeReady(Adapter, NdisRequest, &ndisStatus)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6SdioOidRequest(): OID(%#X) when initializing. return PENDING\n", (u4Byte)NdisRequest->DATA.QUERY_INFORMATION.Oid)); - break; - } - - if((N6C_GET_MP_DRIVER_STATE(Adapter)==MINIPORT_HALTED)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<=== N6SdioOidRequest(): driver halted.\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - - ndisStatus = N6CProcessOidRequest(Adapter, NdisRequest, FALSE); - } - }while(FALSE); - - if(OS_SUPPORT_WDI(Adapter)) - return ndisStatus; - - if( irql < DISPATCH_LEVEL ){ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6SdioOidRequest(): Raise IRQL!!\n")); - KeRaiseIrql(DISPATCH_LEVEL, &irql); - } - - switch(ndisStatus) - { - case NDIS_STATUS_PENDING: - // - // We have pended this OID, so we shall save this OID for OID completion indication later. - // - PlatformAcquireSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - if( Adapter->pNdisCommon->PendedRequest != NULL ) - { - PlatformReleaseSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - RT_ASSERT(Adapter->pNdisCommon->PendedRequest == NULL, ("N6SdioOidRequest(): We have already pended one OID (%p)\n", Adapter->pNdisCommon->PendedRequest)); - N6CompletePendedOID(Adapter, RT_PENDED_OID_DONT_CARE, NDIS_STATUS_FAILURE); - PlatformAcquireSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - } - - Adapter->pNdisCommon->PendedRequest = NdisRequest; - NdisOIDHistoryUpdate(Adapter, NdisRequest, RT_OID_HISTORY_PENDING); - PlatformReleaseSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6SdioOidRequest(): Pend this OID(%p, ID =0x%08X)\n", - Adapter->pNdisCommon->PendedRequest, NdisRequest->DATA.METHOD_INFORMATION.Oid)); - break; - - case NDIS_STATUS_SUCCESS: - NdisOIDHistoryUpdate(Adapter, NdisRequest, RT_OID_HISTORY_COMPLETE); - break; - - default: - NdisOIDHistoryUpdate(Adapter, NdisRequest, RT_OID_HISTORY_UNKNOWN); - break; - } - - if( irql < DISPATCH_LEVEL ){ - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("N6SdioOidRequest(): Restore IRQL!!\n")); - KeLowerIrql(irql); - } - - return ndisStatus; -} - - -VOID -N6SdioCancelOidRequest( - IN NDIS_HANDLE hMiniportAdapterContext, - IN PVOID RequestId - ) -/*++ -Routine Description: - - An NDIS 6.0 miniport driver must provide a MiniportCancelOidRequest - function if it pends any OID request. MiniportCancelOidRequest - is called when NDIS or an overlying driver calls NdisCancelOidRequest - or NdisFCancelOidRequest. If the miniport driver finds the OID - request to be cancelled in its queue, it should complete the OID request - by calling NdisMOidRequestComplete with NDIS_STATUS_REQUEST_ABORTED. - -Arguments: - - MiniportAdapterContext Pointer to the adapter structure - RequestId Specify the request to be cancelled. - -Return Value: - ---*/ -{ - // TODO: Implement It! -} - - -NDIS_STATUS -N6SdioSetOptions( - IN NDIS_HANDLE NdisMiniportDriverHandle, - IN NDIS_HANDLE MiniportDriverContext - ) -/*++ - -Routine Description: - - MiniportSetOptions function is called by NDIS to ask the - miniport driver to register its optional handlers. - A miniport driver must call NdisSetOptionalHandler - from its MiniportSetOptions function to register its - optional handlers with NDIS. - -Arguments: - - -Return Value: - - None - ---*/ -{ - // TODO: Implement It! - return NDIS_STATUS_SUCCESS; -} - - -// -// Description: -// This function is called by NDIS when the OS submits a list of NBL for transmission to -// this miniport. The NBLs will be transmitted immediately if possible, or otherwise -// is queued up for later trannmission by the miniport. -// -// Input: -// MiniportAdapterContext The context for the instance of miniport driver -// pNetBufferLists The chain of NBL to be transmitted -// PortNumber Port number for the packets -// SendFlags Flags such as dispatch level, etc for send -// -// Note: -// 1. IRQL might not be DISPATCH level. -// -// -VOID -N6SdioSendNetBufferLists( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNET_BUFFER_LIST pNetBufferLists, - IN NDIS_PORT_NUMBER PortNumber, - IN ULONG SendFlags - ) -{ - PADAPTER Adapter = GetAdapterByPortNum((PADAPTER)MiniportAdapterContext, (u1Byte) PortNumber); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - BOOLEAN bDispatchLevel = NDIS_TEST_SEND_AT_DISPATCH_LEVEL(SendFlags); - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - PNET_BUFFER pNetBuffer; - ULONG NetBufferCount; - - // - // Drop the packets to send if we are not in proper state. - // - if( N6SDIO_CANNOT_TX(Adapter) ) - { - RT_TRACE(COMP_SEND, DBG_LOUD, - ("N6SdioSendNetBufferLists(): drop packet for N6SDIO_CANNOT_TX(), bDriverStopped(%d) or bSurpriseRemoved(%d)!\n", - Adapter->bDriverStopped, Adapter->bSurpriseRemoved)); - if(N6C_GET_MP_DRIVER_STATE(Adapter) <= MINIPORT_PAUSING) - {// Indicate pause state while we're in pause state. added by Roger, 2008.03.13. - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioSendNetBufferLists(): NDIS_STATUS_PAUSED...\n")); - N6CompleteNetBufferLists(Adapter, pNetBufferLists, NDIS_STATUS_PAUSED, bDispatchLevel); - } - else - { - N6CompleteNetBufferLists(Adapter, pNetBufferLists, NDIS_STATUS_SUCCESS, bDispatchLevel); - } - return; - } - - // - // TODO: we shall buffer packet to send, do it in Common\. So, fix me! - // - if(MgntRoamingInProgress(pMgntInfo)) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("N6SdioSendNetBufferLists(): Roaming in Progress(%d)\n", pMgntInfo->RoamingType)); - N6CompleteNetBufferLists(Adapter, pNetBufferLists, NDIS_STATUS_SUCCESS, bDispatchLevel); - return; - } - - if(pMgntInfo->bSetPnpPwrInProgress) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioSendNetBufferLists(): PnP operation is in progress, complete NBLs immediately\n")); - N6CompleteNetBufferLists(Adapter, pNetBufferLists, NDIS_STATUS_SUCCESS, bDispatchLevel); - return; - } - - if(Adapter->bResetInProgress) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("N6SdioSendNetBufferLists(): Reset!!!\n")); - N6CompleteNetBufferLists(Adapter, pNetBufferLists, NDIS_STATUS_SUCCESS, bDispatchLevel); - return; - } - - if(DFS_IsTxDisabled(Adapter)) - { - N6CompleteNetBufferLists(Adapter, pNetBufferLists, NDIS_STATUS_SUCCESS, bDispatchLevel); - return; - } - - PlatformAcquireSpinLock(Adapter, RT_BUFFER_SPINLOCK); - - // - // Send each NBL in list. - // - for(pCurrNetBufferList = pNetBufferLists; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - - // - // Take one NBL from NBL chains. - // - NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList) = NULL; - - // - // Initialize reference count as (#NB + 1) to prevent this - // NBL being completed before end of N6SdioSendSingleNetBufferList(). - // - NetBufferCount = 0; - for(pNetBuffer = NET_BUFFER_LIST_FIRST_NB(pCurrNetBufferList); - pNetBuffer != NULL; - pNetBuffer = NET_BUFFER_NEXT_NB(pNetBuffer)) - { - NetBufferCount ++; - } - - RT_NBL_SET_REF_CNT(pCurrNetBufferList, (NetBufferCount+1)); - - // Prevent from Tx out-of-order - { - RT_NBL_NEXT_SEND(pCurrNetBufferList) = NET_BUFFER_LIST_FIRST_NB(pCurrNetBufferList); - - N6CAddNblWaitQueue( - &pNdisCommon->TxNBLWaitQueue, - pCurrNetBufferList, - FALSE); // bToHead. - } - } - - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - - if(!ACTING_AS_AP(Adapter) && !ACTING_AS_IBSS(Adapter) && pMgntInfo->SecurityInfo.PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER ) - { - if(pMgntInfo->bSendPacketByTimer && SecIsTxKeyInstalled(Adapter, pMgntInfo->Bssid)) - { - PlatformSetTimer(Adapter, &(pNdisCommon->N6CSendSingleNetBufferListTimer),0); - return; - } - } - else - { - PlatformSetTimer(Adapter, &(pNdisCommon->N6CSendSingleNetBufferListTimer),0); - return; - } - - if(PlatformAtomicExchange(&Adapter->IntrNBLRefCount, TRUE)==TRUE) - return; - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - if(pDevice->SendingNetBufferList == NULL) - { - while(TRUE) - { - PlatformAcquireSpinLock(Adapter, RT_BUFFER_SPINLOCK); - if(N6CIsNblWaitQueueEmpty(pNdisCommon->TxNBLWaitQueue)) - { - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - break; - } - - if(!pNdisCommon->bReleaseNblWaitQueueInProgress) - { - pCurrNetBufferList = N6CGetHeadNblWaitQueue(pNdisCommon->TxNBLWaitQueue); - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioSendNetBufferLists(): N6SdioSendSingleNetBufferList pCurrNetBufferList(%p)\n", pCurrNetBufferList)); - if (!N6SdioSendSingleNetBufferList( - Adapter, - pCurrNetBufferList, - TRUE) ) - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioSendSingleNetBufferList() returns FALSE\n")); - break; - } - } - else - { - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - } - } - - } - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - - PlatformAtomicExchange(&Adapter->IntrNBLRefCount, FALSE); -} - - - -// -// Description: -// Process each NB in the NBL. -// -// Output: -// Return FALSE if we can send this NBL and had put it into -// wait queue if necessary, TRUE otherwise. -// -// Assumption: -// 1. RT_TX_SPINLOCK is acquired. -// -BOOLEAN -N6SdioSendSingleNetBufferList( - IN PADAPTER Adapter, - IN PNET_BUFFER_LIST pNetBufferList, - IN BOOLEAN bFromQueue - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PSTA_QOS pStaQos = pMgntInfo->pStaQos; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - PNET_BUFFER pCurrNetBuffer, pNextNetBuffer; - - PDOT11_EXTSTA_SEND_CONTEXT pDot11SendContext; - u2Byte ExemptionActionType = 0; // 0:Auto 1:encrypt 2:no encrypt 3: key UNAVAILABLE - u1Byte Priority = 0; - NDIS_NET_BUFFER_LIST_8021Q_INFO NBL8021qInfo; - - PRT_TCB pTcb; - NDIS_STATUS ndisStatus; - - //RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioSendSingleNetBufferList(), start to process pNetBufferList=0x%x\n", (u4Byte)pNetBufferList)); - // - // Because we'll release TX lock before doing scatter/gather operation, - // we use SendingNetBufferList to prevent out of order. - // - // Prefast warning ignore for false positive -#pragma warning( disable:6271 ) - RT_ASSERT(pDevice->SendingNetBufferList == NULL, ("SendingNetBufferList should be NULL\n!!!", pDevice->SendingNetBufferList)); - pDevice->SendingNetBufferList = pNetBufferList; - - // - // Parse per-NBL information. - // - pDot11SendContext = (PDOT11_EXTSTA_SEND_CONTEXT) NET_BUFFER_LIST_INFO(pNetBufferList, MediaSpecificInformation); - switch( pDot11SendContext->usExemptionActionType ) - { - case DOT11_EXEMPT_NO_EXEMPTION : - ExemptionActionType = 1; - break; - case DOT11_EXEMPT_ALWAYS : - ExemptionActionType = 2; - break; - case DOT11_EXEMPT_ON_KEY_MAPPING_KEY_UNAVAILABLE : - ExemptionActionType = 3; - break; - default : - ExemptionActionType = 0; - break; - } - - // - // Parse WMM info - // - if(pStaQos->CurrentQosMode != QOS_DISABLE) - { - NBL8021qInfo.Value = NET_BUFFER_LIST_INFO(pNetBufferList, Ieee8021QNetBufferListInfo); - Priority = (u1Byte)NBL8021qInfo.WLanTagHeader.WMMInfo; - if (Priority > 7) - { - RT_TRACE(COMP_SEND, DBG_WARNING, ("N6SdioSendSingleNetBufferList(): WMMInfo should less or equal than 7 (%d)\n", Priority)); - Priority = 0; - } - } - //RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], start to process each Net Buffer\n")); - // - // Send each NB remaining. - // - for(pCurrNetBuffer = RT_NBL_NEXT_SEND(pNetBufferList); - pCurrNetBuffer != NULL; - pCurrNetBuffer = pNextNetBuffer) - { - pNextNetBuffer = NET_BUFFER_NEXT_NB(pCurrNetBuffer); - - if(!pNdisCommon->RegNblRacingWA) - { - if(pNextNetBuffer == NULL) - { - pDevice->SendingNetBufferList = NULL; - } - } - - // - // Out of Tx resource. - // - if( RTIsListEmpty(GET_TCB_IDLE_QUEUE(Adapter))) - { - //if( !bFromQueue ) - //{ // Add the NBL to wait queue and remaining NBs insided will be processed later. - // RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioSendSingleNetBufferList(): +++N6CAddNblWaitQueue(): out of TCB pCurrNetBufferList(%p), pCurrNetBuffer(%p)\n", pNetBufferList, pCurrNetBuffer)); - // PlatformAcquireSpinLock(Adapter, RT_BUFFER_SPINLOCK); - // N6CAddNblWaitQueue( - // pNdisCommon, - // pNetBufferList, - // TRUE); // bToHead. - // PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - //} - - // - // Case 1: This NBL is in wait queue and will be processed later. - // Leave this function. - // - pDevice->SendingNetBufferList = NULL; - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioSendSingleNetBufferList(), tcb idle queue Empty!!!\n")); - return FALSE; - } - - // - // We have enough Tx resource to send this NB. - // - else - { - pTcb = (PRT_TCB)RTRemoveHeadListWithCnt(GET_TCB_IDLE_QUEUE(Adapter),Get_NUM_IDLE_TCB(Adapter)); - //RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], get pTcb = 0x%x!!!\n", (u4Byte)pTcb)); - pTcb->sysTime[0] = PlatformGetCurrentTime(); - - // - // Set up pTcb->Reserved. - // - RT_ASSERT((pTcb->Reserved == NULL), ("N6SdioSendSingleNetBufferList(): pTcb->Reserved should be NULL!!!\n")); - - pTcb->Reserved = pNetBufferList; - - // - // Add per-NBL info into TCB. - // - pTcb->priority = Priority; // Qos information. 2007.01.05, by shien chang. - pTcb->EncInfo.ExemptionActionType = ExemptionActionType; // by CCW. - - GetDefaultAdapter(Adapter)->MgntInfo.OutstandingNdisPackets++; - // - // Case 2.1: Fill up virtual address of buffers into TCB. - // - -// 20100309 Joseph: Copy packet from NET_BUFFER_LIST to local buffer and complete packet immediately. -// This fix the Iperf throughput test issue. It takes too long time to complete packets to OS. -// This long delay makes OS send less and less packet so troughput cannot be higher. - - // - // 2011/09/14 MH According to iperf test in WIN7/XP, we use Ralink2870/AR95 to verify - // iperf TCP/UDP test result. We found that RA2870 can send UDP in higher TP but AR95 fail - // There are two ways to improve UDP throughput. A). increase CPU utilization by trigger more - // and more system resource. B). Complete packet immediately. For TCP case, it seems almost - // the same when completing packet in platfrom or HAL layer. RA2870 seems complete packet - // in common layer. Because the throughptu will not increase in TX side. - // -#if 1 - if(N6SdioGetPacketBuffers(Adapter, pCurrNetBuffer, pTcb) && - !Adapter->bInHctTest && !pMgntInfo->RegTxMode) - { - // - // Set up TCB. - // - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->BufferType = RT_TCB_BUFFER_TYPE_SYSTEM; - if ( IsDataFrame(pTcb->BufferList[0].VirtualAddress) ) - { - pTcb->SpecifiedQueueID = UNSPECIFIED_QUEUE_ID; //LOW_QUEUE; // Rewrited by Annie, 2005-12-05. - } - else - { - pTcb->SpecifiedQueueID = NORMAL_QUEUE; - } - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->bFromUpperLayer = TRUE; - pTcb->FragCount = 1; - pTcb->TSID = DEFAULT_TSID; - - - // - // Send TCB down. - // - if(ACTING_AS_AP(Adapter) == FALSE) - { - BOOLEAN bCompleteAfterSend; - - //RT_ASSERT(pTcb->BufferType == RT_TCB_BUFFER_TYPE_SYSTEM, ("pTcb->BufferType(%#d) shoulde be RT_TCB_BUFFER_TYPE_SYSTEM\n")); - //pTcb->Reserved = NULL; // Prevent the NB complete before NicIFSendPacket() returns. - - bCompleteAfterSend = NicIFSendPacket(Adapter, pTcb); - - if (bCompleteAfterSend) - { - // - // Complete the NB ASAP to enhance throughput for some application, such as iPerf. - // Note that, we can complete the NB here because it - // had been coalesced in PreTransmitTCB(). - // - RT_NBL_DECREASE_REF_CNT(pNetBufferList); - pTcb->Reserved = NULL; - } - - } - else - { - // - // 07525, rcnjko: - // AP_PS_SendPacket() will queue the packet to send in proper queue if necessary. - // So, we must gurantee the buffers referenced in the TCB is still valid, - // that is, not yet compelted to upper layer. - // - NicIFSendPacket(Adapter, pTcb); - } - } - else -#endif - { - // - // Case 2.2 Too many buffers in the NB, send it in coalesced way. - // - //RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], call N6SdioSendCoalescedNetBuffer()!!!\n")); - N6SdioSendCoalescedNetBuffer( Adapter, pCurrNetBuffer, pTcb); - } - - // - // Update RT_NBL_NEXT_SEND() - // - // Prefast warning ignore -#pragma warning( disable:28182 ) - RT_NBL_NEXT_SEND(pNetBufferList) = pNextNetBuffer; - } - } - - // - // Case 2: we are here if all NBs in the NBL had been processed. - // - - if(bFromQueue) - { - PNET_BUFFER_LIST pTmpNBL; - - // - // Remove the NBL from wait queue. - // - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioSendSingleNetBufferList(): bFromQueue ---N6CRemvoeNblWaitQueue(): pCurrNetBufferList(%p)\n", pNetBufferList )); - PlatformAcquireSpinLock(Adapter, RT_BUFFER_SPINLOCK); - pTmpNBL = N6CRemoveNblWaitQueue(&pNdisCommon->TxNBLWaitQueue, TRUE); - PlatformReleaseSpinLock(Adapter, RT_BUFFER_SPINLOCK); - RT_ASSERT(pTmpNBL == pNetBufferList, - ("N6SdioSendSingleNetBufferList(): pTmpNBL(%p) != pNetBufferList(%p)!!!\n", - pTmpNBL, pNetBufferList)); - } - - if(RT_NBL_GET_REF_CNT(pNetBufferList) > 0) - { - // - // Count NBL reference counet for that added in N6SdioSendNetBufferLists(). - // - RT_NBL_DECREASE_REF_CNT(pNetBufferList); - - // - // Compelete the NBL if required. - // - RT_ASSERT( NET_BUFFER_LIST_NEXT_NBL(pNetBufferList) == NULL, - ("N6SdioSendSingleNetBufferList(): pNBL(%p) is not a single one!!!\n", pNetBufferList)); - - { - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - if(RT_NBL_GET_REF_CNT(pNetBufferList) == 0) - { - GetDefaultAdapter(Adapter)->MgntInfo.OutstandingNdisPackets--; - GetDefaultAdapter(Adapter)->MgntInfo.CompleteFlag = 0; - - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - // Complete each NB as success. - for(pCurrNetBufferList = pNetBufferList; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_STATUS(pCurrNetBufferList) = NDIS_STATUS_SUCCESS; - } - - NdisMSendNetBufferListsComplete( - pDevice->hNdisAdapter, - pNetBufferList, - ((NDIS_CURRENT_IRQL()==DISPATCH_LEVEL) ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0)); - - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - } - } - else - { - RT_TRACE(COMP_SEND, DBG_TRACE, ("N6SdioSendSingleNetBufferList(): check RT_NBL_GET_REF_CNT = 0\n")); - } - - // - // We are now ready to process another NBL. - // - pDevice->SendingNetBufferList = NULL; - - // - // Signal thread waiting in N6SdioReturnAllPendingTxPackets(). - // - if(pDevice->bWaitingSendingNBL) - { - pDevice->bWaitingSendingNBL = FALSE; - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - NdisSetEvent(&(pDevice->evtSendingNBLCompleted)); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - } - - return TRUE; -} - - -BOOLEAN -N6SdioGetPacketBuffers( - IN PADAPTER Adapter, - IN PNET_BUFFER pNetBuffer, - OUT PRT_TCB pTcb - ) -{ - ULONG i,index; - UINT MdlCount; - PMDL pCurrMdl, pMdlToMap; - PMDL pNextMdl = NULL; - UINT PacketLength,RemainMdlLength; - PUCHAR ptr = NULL; - UINT BufLen; - UINT FirstMdlLength = 0; - UINT CopyLength; - PUCHAR CopyPtr = NULL; - UINT MaxAvailableBufferCount; - - // - // Calculate buffer count. - // - MdlCount = 0; - for (pCurrMdl = NET_BUFFER_CURRENT_MDL(pNetBuffer); - pCurrMdl != NULL; - pCurrMdl = NDIS_MDL_LINKAGE(pCurrMdl)) - { - MdlCount ++; - } - - // Prefast warning C28182: Dereferencing NULL pointer. - if (NET_BUFFER_CURRENT_MDL(pNetBuffer) != NULL) - { - FirstMdlLength = MmGetMdlByteCount(NET_BUFFER_CURRENT_MDL(pNetBuffer)) - NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer); - } - - if (FirstMdlLength == sMacHdrLng) - { - MaxAvailableBufferCount = MAX_PER_PACKET_PHYSICAL_BUF_NUM; - } - else - { - MaxAvailableBufferCount = MAX_PER_PACKET_PHYSICAL_BUF_NUM-1; - } - - if (MdlCount > MaxAvailableBufferCount) - { - return FALSE; - } - - PacketLength = NET_BUFFER_DATA_LENGTH(pNetBuffer); - - pTcb->PacketLength=PacketLength; - - //2 Assign header buffer - // Prefast warning C30030: Warning: Allocating executable memory via specifying a MM_PAGE_PRIORITY type without a bitwise OR with MdlMappingNoExecute - // False positive and safe here, disable the warning -#pragma warning( disable:30030 ) - // Prefast warning C28182: Dereferencing NULL pointer. '((pNetBuffer))->CurrentMdl' - if (NET_BUFFER_CURRENT_MDL(pNetBuffer) != NULL) - { - ptr = (PUCHAR)MmGetSystemAddressForMdlSafe(NET_BUFFER_CURRENT_MDL(pNetBuffer), NormalPagePriority) - + NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer); - BufLen = MmGetMdlByteCount(NET_BUFFER_CURRENT_MDL(pNetBuffer)) - - NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer); - } - - if (FirstMdlLength > sMacHdrLng) - { - PlatformMoveMemory(pTcb->Header[0].VirtualAddress, ptr, sMacHdrLng); - pTcb->Header[0].Length = sMacHdrLng; - pTcb->BufferList[0] = pTcb->Header[0]; - pTcb->BufferList[1].VirtualAddress = ptr + sMacHdrLng; - pTcb->BufferList[1].Length = FirstMdlLength - sMacHdrLng; - pTcb->BufferCount = 2; - index=2; - pMdlToMap = NDIS_MDL_LINKAGE( NET_BUFFER_CURRENT_MDL(pNetBuffer) ); - } - else if (FirstMdlLength < sMacHdrLng) - { - PlatformMoveMemory(pTcb->Header[0].VirtualAddress, ptr, FirstMdlLength); - CopyLength = FirstMdlLength; - - // Prefast warning C28182: Dereferencing NULL pointer. '((pNetBuffer))->CurrentMdl' - if (NET_BUFFER_CURRENT_MDL(pNetBuffer) != NULL) - { - for (pCurrMdl = NDIS_MDL_LINKAGE(NET_BUFFER_CURRENT_MDL(pNetBuffer)); - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - // Prefast warning C30030: Warning: Allocating executable memory via specifying a MM_PAGE_PRIORITY type without a bitwise OR with MdlMappingNoExecute - // False positive and safe here, disable the warning -#pragma warning( disable:30030 ) - ptr = (PUCHAR)MmGetSystemAddressForMdlSafe(pCurrMdl, NormalPagePriority); - BufLen = MmGetMdlByteCount(pCurrMdl); - - if ((CopyLength + BufLen) >= sMacHdrLng) - { - PlatformMoveMemory(pTcb->Header[0].VirtualAddress + CopyLength, ptr, sMacHdrLng - CopyLength); - CopyPtr = ptr + (sMacHdrLng - CopyLength); - CopyLength += (sMacHdrLng - CopyLength); - break; - } - - PlatformMoveMemory(pTcb->Header[0].VirtualAddress + CopyLength, ptr, BufLen); - CopyLength += BufLen; - } - } - - pTcb->Header[0].Length = CopyLength; - pTcb->BufferList[0] = pTcb->Header[0]; - if (CopyLength < sMacHdrLng || (CopyPtr-ptr) == BufLen) - { - pTcb->BufferCount = 1; - index=1; - } - else - { - pTcb->BufferList[1].VirtualAddress = CopyPtr; - pTcb->BufferList[1].Length = (u4Byte)(BufLen - (CopyPtr - ptr)); - pTcb->BufferCount = 2; - index=2; - } - pMdlToMap = pNextMdl; - } - else - { - PlatformMoveMemory(pTcb->Header[0].VirtualAddress, ptr, BufLen); - pTcb->Header[0].Length = BufLen; - pTcb->BufferList[0] = pTcb->Header[0]; - pTcb->BufferCount = 1; - index=1; - pMdlToMap = NDIS_MDL_LINKAGE( NET_BUFFER_CURRENT_MDL(pNetBuffer) ); - } - - RemainMdlLength=PacketLength; - for(i=0; i < index; i++) - { - RemainMdlLength -= pTcb->BufferList[i].Length; - } - - //2 Get Virtual buffer list - for (pCurrMdl = pMdlToMap; - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - - // Prefast warning C30030: Warning: Allocating executable memory via specifying a MM_PAGE_PRIORITY type without a bitwise OR with MdlMappingNoExecute - // False positive and safe here, disable the warning -#pragma warning( disable:30030 ) - ptr = (pCurrMdl == NET_BUFFER_CURRENT_MDL(pNetBuffer)) ? - (PUCHAR)MmGetSystemAddressForMdlSafe(pCurrMdl, NormalPagePriority) + NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer) : - MmGetSystemAddressForMdlSafe(pCurrMdl, NormalPagePriority); - BufLen = (pCurrMdl == NET_BUFFER_CURRENT_MDL(pNetBuffer)) ? - MmGetMdlByteCount(pCurrMdl)-NET_BUFFER_CURRENT_MDL_OFFSET(pNetBuffer) : - MmGetMdlByteCount(pCurrMdl); - - pTcb->BufferList[index].VirtualAddress = ptr; - if(RemainMdlLength < BufLen ) - { - pTcb->BufferList[index].Length = RemainMdlLength; - RemainMdlLength=0; - } - else // >= - { - pTcb->BufferList[index].Length = BufLen; - RemainMdlLength-=BufLen; - } - pTcb->BufferCount++; - index++; - - if( RemainMdlLength <= 0 ) - break; - - } - - RT_ASSERT(pTcb->BufferCount<=(MAX_PER_PACKET_PHYSICAL_BUF_NUM+2),("Too many physical memory fragment !!\n")); - - return TRUE; -} - - -// -// Description: -// Copy buffer in the NBL into a local buffer and send it down. -// -// Assumption: -// 1. RT_TX_SPINLOCK is acquired. -// -VOID -N6SdioSendCoalescedNetBuffer( - IN PADAPTER Adapter, - IN PNET_BUFFER pNetBuffer, - OUT PRT_TCB pTcb - ) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_TX_LOCAL_BUFFER pBuf; - - pBuf = GetLocalBuffer(Adapter); - if(pBuf == NULL) - { - // - // Recycle resource and drop the packet. - // - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->BufferType = RT_TCB_BUFFER_TYPE_SYSTEM; // For DrvIFCompletePacket(). - pTcb->bFromUpperLayer = TRUE; - pTcb->TSID = DEFAULT_TSID; - ReturnTCB(Adapter, pTcb, RT_STATUS_SUCCESS); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioSendCoalescedNetBuffer(): No local buffer!!\n")); - } - else - { - u2Byte PktLength = 0; - - // - // Copy buffers of this NB into local buffer. - // - N6CopyPacket(pNetBuffer, pBuf, &PktLength); - - // - // Complete the NB and related resource since we - // had copy everything need into TCB. - // - PlatformReleaseSpinLock(Adapter, RT_TX_SPINLOCK); - DrvIFCompletePacket(Adapter, pTcb, NDIS_STATUS_SUCCESS); - PlatformAcquireSpinLock(Adapter, RT_TX_SPINLOCK); - - // - // Set up TCB. - // - - pTcb->Header[0].Length = (PktLength >= sMacHdrLng) ? sMacHdrLng : PktLength; - PlatformMoveMemory( - pTcb->Header[0].VirtualAddress, - pBuf->Buffer.VirtualAddress, - pTcb->Header[0].Length); - pTcb->BufferList[0] = pTcb->Header[0]; - pTcb->BufferCount = 1; - - if(PktLength > sMacHdrLng) - { - pTcb->BufferList[1].VirtualAddress = pBuf->Buffer.VirtualAddress + sMacHdrLng; - pTcb->BufferList[1].Length = PktLength-sMacHdrLng; - pTcb->BufferCount = 2; - } - - pTcb->PacketLength = PktLength; - pTcb->Tailer.Length = 0; - pTcb->ProtocolType = RT_PROTOCOL_802_11; - pTcb->BufferType = RT_TCB_BUFFER_TYPE_LOCAL; - if ( IsDataFrame(pTcb->BufferList[0].VirtualAddress) ) - { - pTcb->SpecifiedQueueID = UNSPECIFIED_QUEUE_ID; - } - else - { - pTcb->SpecifiedQueueID = NORMAL_QUEUE; - } - pTcb->DataRate = UNSPECIFIED_DATA_RATE; - pTcb->bFromUpperLayer = TRUE; - pTcb->Reserved = pBuf; - pTcb->FragCount = 1; - pTcb->TSID = DEFAULT_TSID; - - NicIFSendPacket(Adapter, pTcb); - } -} - - - -// -// Description: -// Return all pending tx packets to upper layer. -// -// Assumption: -// 1. RT_TX_SPINLOCK is NOT acquired. -// 2. N6SDIO_CANNOT_TX() MUST be TRUE before calling this function. -// -VOID -N6SdioReturnAllPendingTxPackets( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - u1Byte QueueID; - PRT_TCB pTcb = NULL; - PNET_BUFFER_LIST pNetBufferList; - KIRQL OldIrql = NDIS_CURRENT_IRQL(); - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(N6SDIO_INC_TX_RESET_COUNT(pDevice) == 1) // At most one thread is working here. - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioReturnAllPendingTxPackets(): 1st thread enter here....\n")); - - // - // Pending TCBs. - // - for( QueueID = LOW_QUEUE; QueueID < MAX_TX_QUEUE; QueueID++ ) - { - while( !RTIsListEmpty(&pAdapter->TcbBusyQueue[QueueID]) - || !RTIsListEmpty(&pAdapter->TcbWaitQueue[QueueID]) - || !RTIsListEmpty(&pAdapter->TcbAggrQueue[QueueID]) - ) - { - if(!RTIsListEmpty(&pAdapter->TcbBusyQueue[QueueID])) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pAdapter->TcbBusyQueue[QueueID]); - } - else if(!RTIsListEmpty(&pAdapter->TcbWaitQueue[QueueID])) - { - pTcb = (PRT_TCB)RTRemoveHeadList(&pAdapter->TcbWaitQueue[QueueID]); - } - else if (!RTIsListEmpty(&pAdapter->TcbAggrQueue[QueueID])) - { - pTcb=(PRT_TCB)RTRemoveHeadList(&pAdapter->TcbAggrQueue[QueueID]); - pAdapter->TcbCountInAggrQueue[QueueID]--; - } - ReturnTCB(pAdapter, pTcb, RT_STATUS_SUCCESS); - } - } - - // - // AP mode power-save packets. - // - AP_PS_ReturnAllQueuedPackets(pAdapter, FALSE); - - // Qos buffered packet. - //QosReturnAllPendingTxMsdu(pAdapter); - - if(OldIrql == PASSIVE_LEVEL) - { - if(pNdisCommon->RegNblRacingWA) - { - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - N6CReleaseDataFrameQueuedWorkItemCallback(pAdapter); - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - } - else - { - // - // Wait SendingNetBufferList completed. - // - if( pDevice->SendingNetBufferList != NULL ) - { - pDevice->bWaitingSendingNBL = TRUE; - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioReturnAllPendingTxPackets(): wait SendingNetBufferList...\n")); - // Preafast warning C28121 : The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - NdisWaitEvent(&(pDevice->evtSendingNBLCompleted), 0); - NdisResetEvent(&(pDevice->evtSendingNBLCompleted)); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - } - RT_ASSERT(pDevice->SendingNetBufferList == NULL, ("SendingNetBufferList(%p) should be NULL!!!\n", pDevice->SendingNetBufferList)); - - // - // Remove pending NBLs in wait queue. - // Note that, we must make sure: - // 1. SendingNetBufferList is NULL. - // 2. No one can call N6SdioSendSingleNetBufferList() now. - // 3. All TCB and related resource are completed. - // - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - while( !N6CIsNblWaitQueueEmpty(pNdisCommon->TxNBLWaitQueue) ) - { - pNetBufferList = N6CRemoveNblWaitQueue(&pNdisCommon->TxNBLWaitQueue, TRUE); - - for (pCurrNetBufferList = pNetBufferList; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_STATUS(pCurrNetBufferList) = NDIS_STATUS_SUCCESS; - } - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - - NdisMSendNetBufferListsComplete( - pDevice->hNdisAdapter, - pNetBufferList, - ((OldIrql==DISPATCH_LEVEL) ? NDIS_SEND_COMPLETE_FLAGS_DISPATCH_LEVEL : 0)); - - PlatformAcquireSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - } - PlatformReleaseSpinLock(pAdapter, RT_BUFFER_SPINLOCK); - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - } - } - else - { - RT_TRACE(COMP_SEND, DBG_LOUD, ("N6SdioReturnAllPendingTxPackets(): IRQL(%d) != PASSIVE_LEVEL\n", OldIrql)); - } - } - - N6SDIO_DEC_TX_RESET_COUNT(pDevice); - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - { - if(pAdapter == GetDefaultAdapter(pAdapter)) - { - // - // Recursively to free pending packet for the ext adapter. - // - - { - PADAPTER pTargetAdapter = GetFirstExtAdapter(pAdapter); - - while(pTargetAdapter != NULL) - { - N6SdioReturnAllPendingTxPackets(pTargetAdapter); - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - - } - } - } -} - - -VOID -N6SdioCancelSend( - IN NDIS_HANDLE MiniportAdapterContext, - IN PVOID CancelId - ) - /** - * This function is called by NDIS to cancel any NBL that have - * not yet been sent and which correspond to CancelId passed in. - * - * \param MiniportAdapterContext The context for this miniport - * \param CancelId Packets with this Id will be cancelled - * \sa MPSendPackets - */ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - - RT_TRACE(COMP_DBG, DBG_LOUD, (" ==> N6SdioCancelSend()\n")); - - - RT_TRACE(COMP_DBG, DBG_LOUD, (" <== N6SdioCancelSend()\n")); - return; -} - - -VOID -N6SdioReturnNetBufferLists( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNET_BUFFER_LIST NetBufferLists, - IN ULONG ReturnFlags - ) -/** - * This function is called by NDIS when the protocol above returns NetBufferLists - * previously indicated by this miniport. - * - * \param MiniportAdapterContext The adapter context for this miniport - * \param NetBufferLists The NBLs that was previously indicated to NDIS - * \param ReturnFlags Flags for return information (dispatch level, etc) - * \sa Hw11ReturnFragment - */ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PRT_RFD pRfd; - PMDL pMdl, pNextMdl; - PNET_BUFFER_LIST pCurrNetBufferList, pNextNetBufferList; - PDOT11_EXTSTA_RECV_CONTEXT pRecvContext; - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - u4Byte Count = 0; - - for (pCurrNetBufferList = NetBufferLists; - pCurrNetBufferList != NULL; - pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - - pRfd = MP_GET_PACKET_RFD(pCurrNetBufferList); - - // - // Free MDL. - // - pMdl = NET_BUFFER_FIRST_MDL( NET_BUFFER_LIST_FIRST_NB(pCurrNetBufferList) ); - while (pMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pMdl); - NdisFreeMdl(pMdl); - pMdl = pNextMdl; - } - - // - // Free OOB. - // - pRecvContext = (PDOT11_EXTSTA_RECV_CONTEXT)NET_BUFFER_LIST_INFO(pCurrNetBufferList, MediaSpecificInformation); - PlatformFreeMemory(pRecvContext, sizeof(DOT11_EXTSTA_RECV_CONTEXT)); - - NdisFreeNetBufferList(pCurrNetBufferList); - - PlatformAcquireSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - RT_DEC_RCV_REF(GetDefaultAdapter(Adapter)); - Count = RT_GET_RCV_REF(GetDefaultAdapter(Adapter)); - PlatformReleaseSpinLock(Adapter, RT_RX_REF_CNT_SPINLOCK); - - if(pRfd) - { - ReturnRFDList(Adapter, pRfd); - //NicIFReturnPacket(Adapter, pRfd); - } - } - - // - // Signal the AllPacketReturnedEvent if all packet are returned. - // 2007.01.19, by shien chang. - // - if (Count == 0) - { - NdisSetEvent(&pNdisCommon->AllPacketReturnedEvent); - - if(Adapter->MgntInfo.NdisVersion >= RT_NDIS_VERSION_6_20) - { - PADAPTER pTempAdapter = GetFirstExtAdapter(Adapter); - while(pTempAdapter != NULL) - { - NdisSetEvent(&pTempAdapter->pNdisCommon->AllPacketReturnedEvent); - pTempAdapter = GetNextExtAdapter(pTempAdapter); - - } - - } - - } -} - - -BOOLEAN -N6SdioCheckForHang( - IN NDIS_HANDLE MiniportAdapterContext - ) -/*++ - -Routine Description: - - The MiniportCheckForHang handler is called to report the state of the - NIC, or to monitor the responsiveness of an underlying device driver. - This is an optional function. If this handler is not specified, NDIS - judges the driver unresponsive when the driver holds - MiniportQueryInformation or MiniportSetInformation requests for a - time-out interval (deafult 4 sec), and then calls the driver's - MiniportReset function. A NIC driver's MiniportInitialize function can - extend NDIS's time-out interval by calling NdisMSetAttributesEx to - avoid unnecessary resets. - - Always runs at IRQL = DISPATCH_LEVEL. - -Arguments: - - MiniportAdapterContext Pointer to our adapter - -Return Value: - - TRUE NDIS calls the driver's MiniportReset function. - FALSE Everything is fine - -Note: - CheckForHang handler is called in the context of a timer DPC. - take advantage of this fact when acquiring/releasing spinlocks - ---*/ -{ - PADAPTER Adapter = (PADAPTER) MiniportAdapterContext; - - FunctionIn(COMP_INIT); - - if(Adapter->MgntInfo.WatchDogTimer.Status & RT_TIMER_STATUS_INITIALIZED) - { - if(!(Adapter->MgntInfo.WatchDogTimer.Status & RT_TIMER_STATUS_PERIODIC)) - PlatformSetPeriodicTimer(Adapter, &Adapter->MgntInfo.WatchDogTimer , RT_CHECK_FOR_HANG_PERIOD * 1000); - - return Adapter->MgntInfo.WatchDogReturnFlag; - } - FunctionOut(COMP_INIT); - return FALSE; -} - -VOID -WatchDogTimerCallback( - IN PRT_TIMER pTimer -) -{ - #define MAX_NDIS_STATUS_REPORT_TIME 5 // In 2 sec - - PADAPTER Adapter = pTimer->Adapter; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - u2Byte T2byte; - u1Byte QueueID; - u1Byte IdxPipe; - BOOLEAN bHasPendingNBL = FALSE; - - RT_TRACE(COMP_INIT, DBG_LOUD, (" N6SdioCheckForHang() ==>\n")); - - // To prevent from error state which configured in watchdog when power off state. 2010.05.07. Added by tynli. - if(device->CurrentPowerState != NdisDeviceStateD0) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioCheckForHang(): Do nothing because state in (%x).-----\n", device->CurrentPowerState)); - pDefaultAdapter->MgntInfo.WatchDogReturnFlag = FALSE; - return; - } - - if(!Adapter->bHWInitReady) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioCheckForHang(): bHWInitReady FALSE\n")); - - pDefaultAdapter->MgntInfo.WatchDogReturnFlag = FALSE; - - if(Adapter->MgntInfo.bSetWatchDogTimerByDriver) - { - PlatformSetCheckForHangTimer(Adapter); - } - - return; - } - - // - // Signal corresponding event when checkforhang routine is called after PnP action. - // 2009.09.30. - // - if(!device->bChkForHangAfterPnP) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6SdioCheckForHang(): Signal SetPnpChkForHangEvent!!\n")); - NdisSetEvent(&device->SetPnpChkForHangEvent); - device->bChkForHangAfterPnP = TRUE; - } - - - if(Adapter->bSurpriseRemoved) - { - N6SdioReturnAllPendingTxPackets(Adapter); - - // Release Tx Queue buffered context if needed. added by Roger, 2012.04.17. - N6SdioReleaseTxQueuePending(Adapter); - } - - - if(Adapter->NdisSdioDev.NdisStatusIndicateCount < MAX_NDIS_STATUS_REPORT_TIME) - { - Adapter->NdisSdioDev.NdisStatusIndicateCount++; - if( Adapter->NdisSdioDev.NdisStatusIndicateCount==MAX_NDIS_STATUS_REPORT_TIME && - !Adapter->NdisSdioDev.bNdisStatusIndicated - ) - { - NicIFSetLinkStatus( Adapter, RT_MEDIA_DISCONNECT ); - Adapter->NdisSdioDev.NdisStatusIndicateCount = 0; - } - } - -#if USE_WORKITEM - PlatformScheduleWorkItem(&(pHalData->RtCheckForHangWorkItem)); -#endif //USE_WORKITEM - - Adapter->HalFunc.DumpHardwareProfileHandler(Adapter); - - // Annie Test ONLY. 2005-11-09. - RT_TRACE( COMP_QOS, DBG_LOUD, ("N6SdioCheckForHang(): pMgntInfo->pStaQos->CurrentQosMode=%d\n", pMgntInfo->pStaQos->CurrentQosMode) ); - - if(Adapter->MgntInfo.bSetWatchDogTimerByDriver) - { - PlatformSetCheckForHangTimer(Adapter); - } - - RT_TRACE(COMP_INIT, DBG_LOUD, (" <== N6SdioCheckForHang()\n")); - - pDefaultAdapter->MgntInfo.WatchDogReturnFlag = FALSE; - return; -} - - -NDIS_STATUS -N6SdioReset( - IN NDIS_HANDLE MiniportAdapterContext, - OUT PBOOLEAN AddressingReset - ) -/*++ - -Routine Description: - - An NDIS 6.0 miniport driver's reset function can cancel pending OID - requests and send requests in the context of a reset. - NDIS no longer performs such cancellations. Alternatively, - the miniport driver can complete pending OID requests - and send requests after the reset completes. - - MiniportReset function can be called at either IRQL PASSIVE_LEVEL - or IRQL = DISPATCH_LEVEL. - -Arguments: - - AddressingReset To let NDIS know whether we need help from it with our reset - MiniportAdapterContext Pointer to our adapter - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_PENDING - NDIS_STATUS_RESET_IN_PROGRESS - NDIS_STATUS_HARD_ERRORS - -Note: - ---*/ -{ - PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_INIT, DBG_WARNING, (" ==> N6SdioReset()\n")); - - // A temporary WorkAround for WDI, so just do nothing. - if(OS_SUPPORT_WDI(Adapter)) - return NDIS_STATUS_SUCCESS; - - if(!Adapter->bHWInitReady) - return NDIS_STATUS_SUCCESS; - - - // - // We complete any pending OID requests. - // NDIS will submit no further OID requests to the miniport driver for the NIC - // being reset until the reset operation has finished. - // In this case, we cancel all pending SetPower OIDs to prevent unexpect blocking IRPs - // due to MiniportQueryInformation, MiniportSetInformation function seem to have timed out. - // 2008.03.13. - // - // Complete the pended OID and return aborted caused by reset request. By Bruce, 2008-10-29. - - N6CompletePendedOID( - Adapter, - RT_PENDED_OID_DONT_CARE, - NDIS_STATUS_REQUEST_ABORTED); - - RT_TRACE(COMP_INIT, DBG_WARNING, (" <== N6SdioReset()\n")); - - return ndisStatus; -} - - - -// -// NDIS5 Legacy ------------------------------------------------------------------- -// - - -NDIS_STATUS -N6SdioAllocateNative80211MIBs( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - RT_STATUS rtStatus; - ULONG AllocSize; - - do { - // pDot11SupportedPhyTypes. - AllocSize = sizeof(DOT11_SUPPORTED_PHY_TYPES) + (NATIVE_802_11_MAX_NUM_PHY_TYPES-1) * sizeof(DOT11_PHY_TYPE); - rtStatus = PlatformAllocateMemory( - Adapter, - &(pNdisCommon->pDot11SupportedPhyTypes), - AllocSize - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioAllocateNative80211MIBs(): failed to allocate pDot11SupportedPhyTypes\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - PlatformZeroMemory(pNdisCommon->pDot11SupportedPhyTypes, AllocSize); - - // pDot11PhyMIBs. - AllocSize = sizeof(NIC_PHY_MIB) * NATIVE_802_11_MAX_NUM_PHY_TYPES; - rtStatus = PlatformAllocateMemory( - Adapter, - &(pNdisCommon->pDot11PhyMIBs), - AllocSize - ); - if (rtStatus != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("N6SdioAllocateNative80211MIBs(): failed to allocate pDot11PhyMIBs\n")); - ndisStatus = NDIS_STATUS_FAILURE; - break; - } - - }while (FALSE); - - // - // If allocation failed, reclaim memory resources. - // - if (ndisStatus != NDIS_STATUS_SUCCESS) - { - if (pNdisCommon->pDot11SupportedPhyTypes) - { - PlatformFreeMemory( - pNdisCommon->pDot11SupportedPhyTypes, - sizeof(DOT11_SUPPORTED_PHY_TYPES) + (NATIVE_802_11_MAX_NUM_PHY_TYPES-1) * sizeof(DOT11_PHY_TYPE) - ); - pNdisCommon->pDot11SupportedPhyTypes = NULL; - } - - if (pNdisCommon->pDot11PhyMIBs) - { - PlatformFreeMemory( - pNdisCommon->pDot11PhyMIBs, - sizeof(NIC_PHY_MIB) * NATIVE_802_11_MAX_NUM_PHY_TYPES - ); - pNdisCommon->pDot11PhyMIBs = NULL; - } - } - - return ndisStatus; -} - -VOID -N6SdioFreeNative80211MIBs( - IN PADAPTER Adapter - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - - if (pNdisCommon->pDot11SupportedPhyTypes) - { - PlatformFreeMemory( - pNdisCommon->pDot11SupportedPhyTypes, - sizeof(DOT11_SUPPORTED_PHY_TYPES) + (NATIVE_802_11_MAX_NUM_PHY_TYPES-1) * sizeof(DOT11_PHY_TYPE) - ); - } - - if (pNdisCommon->pDot11PhyMIBs) - { - PlatformFreeMemory( - pNdisCommon->pDot11PhyMIBs, - sizeof(NIC_PHY_MIB) * NATIVE_802_11_MAX_NUM_PHY_TYPES - ); - } - - if(pNdisCommon->dot11IbssParams.AdditionalIEData) - { - PlatformFreeMemory(pNdisCommon->dot11IbssParams.AdditionalIEData, pNdisCommon->dot11IbssParams.AdditionalIESize); - } -} - -VOID -MPFragPhysicalBuffer( - PSHARED_MEMORY pSharedMemory, - u2Byte BufferCount, - ULONG BufferIndex, - UINT VirtualLength - ) -{ - u2Byte i; - - for(i=BufferCount-1;i>=(LONG)BufferIndex;i--) - { - pSharedMemory[i+1].PhysicalAddressHigh=pSharedMemory[i].PhysicalAddressHigh; - pSharedMemory[i+1].PhysicalAddressLow=pSharedMemory[i].PhysicalAddressLow; - pSharedMemory[i+1].Length=pSharedMemory[i].Length; - } - - // Shorten this buffer - pSharedMemory[BufferIndex].Length=VirtualLength; - - // Shift this buffer - pSharedMemory[BufferIndex+1].Length -= VirtualLength; - pSharedMemory[BufferIndex+1].PhysicalAddressLow += VirtualLength; -} - - -NDIS_STATUS -N6SdioReadRegParameters( - IN PRT_SDIO_DEVICE device - ) -/*++ -Routine Description: - - Read the following from the registry - 1. All the parameters - 2. NetworkAddres - -Arguments: - - device Pointer to our USB device - -Return Value: - - NDIS_STATUS_SUCCESS - NDIS_STATUS_FAILURE - NDIS_STATUS_RESOURCES - ---*/ -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - NDIS_HANDLE ConfigurationHandle; - PMP_REG_ENTRY pRegEntry; - PUCHAR pointer; - UINT i; - UINT Length; - PNDIS_CONFIGURATION_PARAMETER ReturnedValue; - ULONG_PTR value = 0; - - RT_TRACE(COMP_DBG, DBG_TRACE, (" ==> N6SdioReadRegParameters()\n")); - - Status = N6ReadCommonRegistry((PADAPTER)(device->pAdapter)); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT,DBG_TRACE, ("<== N6SdioReadRegParameters(), failed in N6ReadCommonRegistry(). Status=0x%X !!!\n", Status)); - return Status; - } - - // Open the registry for this adapter. - Status = N6OpenConfigurationHandle((PADAPTER)(device->pAdapter), &ConfigurationHandle); - if(Status != NDIS_STATUS_SUCCESS) - { - RT_TRACE(COMP_INIT, DBG_TRACE, ("<== N6SdioReadRegParameters(), failed in N6OpenConfigurationHandle(), Status=0x%X !!!\n", Status)); - return Status; - } - - // Read all the registry values. - for(i = 0, pRegEntry = NICRegTable; i < NIC_NUM_REG_PARAMS; i++, pRegEntry++) - { - pointer = (PUCHAR) device + pRegEntry->FieldOffset; -//#if (WPP_SOFTWARE_TRACE == 0) -// RT_TRACE(COMP_INIT,DBG_LOUD, ("%s",&pRegEntry->RegName)); -//#endif - // Get the configuration value for a specific parameter. Under NT the - // parameters are all read in as DWORDs. - NdisReadConfiguration( - &Status, - &ReturnedValue, - ConfigurationHandle, - &pRegEntry->RegName, - (enum _NDIS_PARAMETER_TYPE)pRegEntry->Type); - - // If the parameter was present, then check its value for validity. - if (Status == NDIS_STATUS_SUCCESS) - { - if( (pRegEntry->Type == NdisParameterInteger)|| - (pRegEntry->Type == NdisParameterHexInteger) ) - { - // Check that param value is not too small or too large - if(ReturnedValue->ParameterData.IntegerData < pRegEntry->Min || - ReturnedValue->ParameterData.IntegerData > pRegEntry->Max) - { - value = pRegEntry->Default; - } - else - { - value = ReturnedValue->ParameterData.IntegerData; - } - } - else if( pRegEntry->Type == NdisParameterString ) - { - USHORT copyLen; - copyLen = ( (ReturnedValue->ParameterData.StringData.Length/2)>(USHORT)pRegEntry->Max) ? pRegEntry->Max : ReturnedValue->ParameterData.StringData.Length/2; - - CopyFromUnicodeToOS( - pointer, - &ReturnedValue->ParameterData.StringData, - copyLen); - } - } - else if(pRegEntry->bRequired) - { - RT_TRACE(COMP_DBG, DBG_SERIOUS,(" -- failed\n")); - - RT_ASSERT(FALSE,("Read parameter FAIL!")); - - Status = NDIS_STATUS_FAILURE; - break; - } - else - { - if( (pRegEntry->Type == NdisParameterInteger) || - (pRegEntry->Type == NdisParameterHexInteger) ) - { - value = pRegEntry->Default; - } - else - { - CopyFromUnicodeToOS( - pointer, - (NDIS_STRING *)(UINT_PTR)pRegEntry->Default, - ((NDIS_STRING *)(UINT_PTR)pRegEntry->Default)->Length/2 ); - } - Status = NDIS_STATUS_SUCCESS; - } - - // Store the value in the adapter structure. - switch(pRegEntry->FieldSize) - { - case 1: - *((PUCHAR) pointer) = (UCHAR) value; - break; - case 2: - *((PUSHORT) pointer) = (USHORT) value; - break; - case 4: - *((PULONG) pointer) = (ULONG) value; - break; - default: - RT_TRACE(COMP_DBG, DBG_SERIOUS,("Bogus field size %d\n", pRegEntry->FieldSize)); - break; - } - } - - // Close the registry - N6CloseConfigurationHandle(ConfigurationHandle); - - RT_TRACE(COMP_DBG, DBG_TRACE, ("<-- N6SdioReadRegParameters, Status=%x\n", Status)); - return Status; -} - - -VOID -N6SdioFreeTxQueueRes( - IN PADAPTER pAdapter -) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - - // Free Rt TxQueues - if(pDevice->RtTxQueue) - { - ExFreePoolWithTag(pDevice->RtTxQueue, '3278' ); - pDevice->RtTxQueue = NULL; - } -} - -VOID -N6SdioDereferInterface( - IN PRT_SDIO_DEVICE pDevice -) -{ - // Dereference SDIO Bus interface. - if(pDevice && pDevice->Sdbusinterface.InterfaceDereference) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioDereferInterface+\n")); - // - // Call the bus driver to dereference the interface. - // - (pDevice->Sdbusinterface.InterfaceDereference) - (pDevice->Sdbusinterface.Context); - RtlZeroMemory(&pDevice->Sdbusinterface, sizeof(SDBUS_INTERFACE_STANDARD)); - } -} - - -VOID -N6SdioFreeDevice( - IN PRT_SDIO_DEVICE pDevice -) -{ - PADAPTER Adapter; - Adapter = (PADAPTER)pDevice->pAdapter; - - FreeSdioAWBs(pDevice, FALSE); - - // Free Tx Rx queue resources - N6SdioFreeTxQueueRes(Adapter); - -#if USE_WDF_SDIO - WdfSdio_DeInitAsyncSDRequest(Adapter); -#endif - - // Free Rx NetBufferListPool, 2006.10.04, by shien chang. - if (pDevice->RxNetBufferListPool) - { - N6SdioFreeRxNetBufferListPool(Adapter); - } - - // Dereference SDIO Bus interface. - if(pDevice->Sdbusinterface.InterfaceDereference) - { - // - // Call the bus driver to dereference the interface. - // - (pDevice->Sdbusinterface.InterfaceDereference) - (pDevice->Sdbusinterface.Context); - RtlZeroMemory(&pDevice->Sdbusinterface, sizeof(SDBUS_INTERFACE_STANDARD)); - } - -} - -VOID -N6SdioCancelAllTimer( - IN PADAPTER Adapter - ) -{ - NicIFCancelAllTimer((PADAPTER)Adapter); -} - -VOID -N6SdioFreeAll( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - - // Release all we do during initialization - - // - // All packets queued in the driver are returned (to the upper layer). By Bruce, 2008-11-28. - // - ReleaseDataFrameQueued(Adapter); - - // Wait for All Timer Callback Completion (Including Extension Port) ---- - N6WaitTimerSync(Adapter); - // ---------------------------------------------------------- - - // Free All Ndis 6.20+ Component --------------------- - NDIS_6_2_FREE_EXTENSION_COMPONENT(Adapter); - // ----------------------------------------------- - - NicIFDeInitResource(Adapter); - - NicIFFreeMemory((PADAPTER)Adapter); - NicIFDisassociateNIC((PADAPTER)Adapter); - - // - // 070307, rcnjko: - // We MUST free USB pipes after NicIFDisassociateNIC() - // because some workitem are still working and manipulate - // USB pipes until NicIFDisassociateNIC() is finished, - // e.g. GPIOChangeRFWorkItem. - // - N6SdioFreeDevice(device); - - // Free spin lock. - // We free spin locks here because NicIFFreeMemory() still use TX and RX spin locks. 2006.03.08, by rcnjko. - NdisFreeSpinLock( &(device->IrpSpinLock) ); - N6CFreeSpinLocks(Adapter); - - // Free the Timer Synchronization Mechanism --------- - N6DeInitTimerSync(Adapter); - // --------------------------------------------- - - NdisOIDHistoryDeInit(Adapter); - - // Free the PortCommonInfo ----------------------- - PortCommonInfoFreeMemory(Adapter); - // -------------------------------------------- - - // Free the memory block allocated for ADAPTER, RT_NDIS6_COMMON and so on. - N6FreeAdapter((PADAPTER)Adapter); - -} - - -NDIS_STATUS -N6SdioAllocateRxNetBufferListPool( - IN PADAPTER Adapter - ) -{ - NET_BUFFER_LIST_POOL_PARAMETERS NBLPoolParameters; - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - NDIS_HANDLE NBLPoolHandle = NULL; - - PlatformZeroMemory(&NBLPoolParameters, sizeof(NET_BUFFER_LIST_POOL_PARAMETERS)); - - N6_ASSIGN_OBJECT_HEADER( - NBLPoolParameters.Header, - NDIS_OBJECT_TYPE_DEFAULT, - NET_BUFFER_LIST_POOL_PARAMETERS_REVISION_1, - sizeof(NET_BUFFER_LIST_POOL_PARAMETERS)); - - NBLPoolParameters.ProtocolId = 0; - NBLPoolParameters.fAllocateNetBuffer = TRUE; - NBLPoolParameters.ContextSize = 0; - NBLPoolParameters.PoolTag = '3278'; - NBLPoolParameters.DataSize = 0; - - NBLPoolHandle = NdisAllocateNetBufferListPool(device->hNdisAdapter, &NBLPoolParameters); - if (NBLPoolHandle == NULL) - { - return NDIS_STATUS_FAILURE; - } - - device->RxNetBufferListPool = NBLPoolHandle; - - return NDIS_STATUS_SUCCESS; -} - - -VOID -N6SdioFreeRxNetBufferListPool( - IN PADAPTER Adapter - ) -{ - NDIS_HANDLE NBLPoolHandle = Adapter->NdisSdioDev.RxNetBufferListPool; - - if(NBLPoolHandle) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioFreeRxNetBufferListPool +1\n")); - NdisFreeNetBufferListPool(NBLPoolHandle); - Adapter->NdisSdioDev.RxNetBufferListPool = NULL; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("N6SdioFreeRxNetBufferListPool RX NBL Pool NULL!\n")); - } -} - -// -// Description: -// For connected standby platform, we should disable device interrupt and -// instruct the SD bus driver to stop forwarding device interrupt before the device -// entering D2 state. -// -// 2013.08.07, Added by tynli. -// -VOID -N6SdioDisableDeviceInterrupt( - IN PADAPTER Adapter -) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - BOOLEAN bEnableInt; - NTSTATUS ntStatus = STATUS_SUCCESS; - - // - // Read interrupt property from current function. - // - ntStatus = PlatformSdioGetProperty( - pDevice, - SDP_FUNCTION_INT_ENABLE, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE(COMP_POWER, DBG_LOUD, ("Cannot get property SDP_FUNCTION_INT_ENABLE\n")); - //return ntStatus; - } - - // - // Set interrupt property from current function. - // - if(bEnableInt) - { - bEnableInt = FALSE; // mask interrupt for our function - ntStatus = PlatformSdioSetProperty( - pDevice, - SDP_FUNCTION_INT_ENABLE, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE(COMP_POWER, DBG_LOUD, ("Cannot set property SDP_FUNCTION_INT_ENABLE\n")); - //return ntStatus; - } - } - - // - // Instruct the SD bus driver to stop forwarding device interrupt. - // - bEnableInt = FALSE; - ntStatus = PlatformSdioSetProperty( - pDevice, - SDP_SET_CARD_INTERRUPT_FORWARD, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE(COMP_POWER, DBG_LOUD, ("Cannot set property SDP_SET_CARD_INTERRUPT_FORWARD\n")); - //return ntStatus; - } -} - -// -// Description: -// For connected standby platform, we should enable device interrupt and -// instruct the SD bus driver to forward interrupts to the miniport driver after the device -// resuming from D2 state. -// -// 2013.08.07, Added by tynli. -// -VOID -N6SdioEnableDeviceInterrupt( - IN PADAPTER Adapter -) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - BOOLEAN bEnableInt; - NTSTATUS ntStatus = STATUS_SUCCESS; - - // - // Instruct the SD bus driver to forward interrupts to our miniport driver. - // - bEnableInt = TRUE; - ntStatus = PlatformSdioSetProperty( - pDevice, - SDP_SET_CARD_INTERRUPT_FORWARD, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE(COMP_POWER, DBG_LOUD, ("Cannot set property SDP_SET_CARD_INTERRUPT_FORWARD\n")); - //return ntStatus; - } - - // - // Read interrupt property from current function. - // - ntStatus = PlatformSdioGetProperty( - pDevice, - SDP_FUNCTION_INT_ENABLE, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE(COMP_POWER, DBG_LOUD, ("Cannot get property SDP_FUNCTION_INT_ENABLE\n")); - //return ntStatus; - } - - // - // Set interrupt property from current function. - // - if(!bEnableInt) - { - bEnableInt = TRUE; // Enable interrupt for our function - ntStatus = PlatformSdioSetProperty( - pDevice, - SDP_FUNCTION_INT_ENABLE, - &bEnableInt, - sizeof(bEnableInt)); - if(!NT_SUCCESS(ntStatus)){ - RT_TRACE(COMP_POWER, DBG_LOUD, ("Cannot set property SDP_FUNCTION_INT_ENABLE\n")); - //return ntStatus; - } - } -} - -#if POWER_MAN - -/** -** @@@ -**20061205 by david, this function is for power management s3/s4 state -** -** -** -**/ -NDIS_STATUS -N6Sdio_Mgnt_SetPower( - PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesNeeded, - OUT PULONG BytesRead -) -{ - PMGNT_INFO pMgntInfo = &(Adapter->MgntInfo); - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - NDIS_DEVICE_POWER_STATE NewPowerState; - OCTET_STRING savedssid; - u1Byte ssidbuf[33]; - u1Byte bssidbuf[6]; - BOOLEAN bEnableFastResume = FALSE; - BOOLEAN bSupportRemoteWakeUp, bEnableWoLCapabilities; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - BOOLEAN bResult = FALSE; - - LARGE_INTEGER StartTime, EndTime; - LARGE_INTEGER Freq; - - if( InformationBufferLength < sizeof(NDIS_DEVICE_POWER_STATE) ) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(NDIS_DEVICE_POWER_STATE); - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER: inavalid InformationBufferLength(%d), BytesNeeded is %d\n", InformationBufferLength, *BytesNeeded) ); - return Status; - } - - NewPowerState = *((NDIS_DEVICE_POWER_STATE*)InformationBuffer); - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_WOWLAN , &bSupportRemoteWakeUp); - bEnableWoLCapabilities = MgntIsWoWLANCapabilityEnable(Adapter); - - if (NewPowerState <= NdisDeviceStateUnspecified || NewPowerState >= NdisDeviceStateMaximum) - { - Status = NDIS_STATUS_INVALID_DATA; - *BytesNeeded = sizeof(NDIS_DEVICE_POWER_STATE); - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER: inavalid power state\n") ); - return Status; - } - - if(pDevice->CurrentPowerState ==NewPowerState) - { - Status = NDIS_STATUS_SUCCESS; - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER:Alread in this power state\n") ); - return Status; - } - - - // For Working Time Calculation - Adapter->bCtrlPnPTime = TRUE; - Adapter->PnPTotalTime.QuadPart = 0; - Adapter->PnPIOTime.QuadPart = 0; - pDevice->PnPSdBusWorkTime.QuadPart = 0; - - StartTime = KeQueryPerformanceCounter(&Freq); - // - - // 2010/08/11 MH Add to protect USB minicard selective suspend HW radio detection test - pMgntInfo->bSetPnpPwrInProgress = TRUE; - - if(NewPowerState == NdisDeviceStateD0) - { // Wake up. - - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER: wake up from %d to D0\n", pDevice->CurrentPowerState)); - - pDevice->CurrentPowerState = NewPowerState; - - pPSC->PnpWakeD0Cnt++; - pPSC->LastPnpWakeTime = PlatformGetCurrentTime(); - - Adapter->bSurpriseRemoved = FALSE; - - Adapter->bInSetPower = TRUE; - - MgntStopBeacon(Adapter); - - if(pMgntInfo->bPreTransPnP) - { - // - // We need to complete this OID request with pending status immediately to shorten the - // power transition latency caused by the device resumption operation in OID_PNP_SET_POWER handling. - // 2014.05.09. - // - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6Sdio_Mgnt_SetPower(): Schedule WI for PnP Configuration!!\n")); - //MultiPortSetAllPortsHWReadyStatus(Adapter, FALSE); - bResult = PlatformScheduleWorkItem( &(pDevice->PnpWorkItem) ); - - if(bResult == FALSE) - { - pMgntInfo->bSetPnpPwrInProgress = FALSE; - Status= NDIS_STATUS_SUCCESS; - } - else - Status= NDIS_STATUS_PENDING;// Always pend this request for PnP pre-transition - } - else - { - if(NDIS_CURRENT_IRQL() > PASSIVE_LEVEL) - { - // Schedule a workitem to do necessary tasks before entering sleep state. - // The OID will be completed until these tasks finished. - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6Sdio_Mgnt_SetPower(): IRQL > PASSIVE. Call workitem!!!\n")); - bResult = PlatformScheduleWorkItem( &(pDevice->PnpWorkItem) ); - if(bResult == FALSE){ - pMgntInfo->bSetPnpPwrInProgress = FALSE; - Status= NDIS_STATUS_SUCCESS; - } - else - Status= NDIS_STATUS_PENDING; - } - else - { - // - // Immediately disable adapter in this irql level, then return success. By Bruce, 2008-10-29. - // - PnpWorkItemCallback(Adapter); - Status= NDIS_STATUS_SUCCESS; - } - } - } - else if(NewPowerState!=NdisDeviceStateD0) - { // Sleep. - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER: going to sleep: %d\n", NewPowerState)); - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - - pDefaultMgntInfo->bDriverIsGoingToSleep = TRUE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - - pExtMgntInfo->bDriverIsGoingToSleep = TRUE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - MgntResetJoinProcess(Adapter); - - // For Intel Bay trail platform, we do not support WoWLAN during hibernate (S4). 2013.10.30, by tynli. - if(NewPowerState != NdisDeviceStateD2) - { - pPSC->bPnpEnterD2 = FALSE; - if(NewPowerState == NdisDeviceStateD3) - pPSC->PnpSleepEnterD3Cnt++; - else - pPSC->PnpSleepEnterUnknownDxCnt++; - } - else - { - pPSC->bPnpEnterD2 = TRUE; - pPSC->PnpSleepEnterD2Cnt++; - } - - pPSC->LastPnpSleepTime = PlatformGetCurrentTime(); - - // Cancel watchdog workitem -#if USE_WORKITEM - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - RT_TRACE(COMP_POWER, DBG_LOUD, (" Stop check for hang workitem\n")); - PlatformStopWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - } -#endif - - if( !Adapter->bInHctTest ) - { // Those in vWifi mode now disassociate all STA before sleep, and will be reset after waking up. - - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - if(MgntActQuery_ApType(pTargetAdapter) == RT_AP_TYPE_VWIFI_AP) - { - AP_DisassociateAllStation(pTargetAdapter, unspec_reason); - SecSetSwEncryptionDecryption(pTargetAdapter, FALSE, FALSE); - - RT_TRACE(COMP_AP, DBG_LOUD,("vWifi mode on Port: %d disassociates all STA.\n", pTargetAdapter->pNdis62Common->PortNumber)); - } - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - else - { // For OS before Win7 still go turning OFF directly. - NDIS_6_2_AP_CLEAR_BEFORE_SLEEP(Adapter); - } - -#if P2P_SUPPORT == 1 - if(P2P_ENABLED(GET_P2P_INFO(Adapter))) - { - if(P2P_DOING_DEVICE_DISCOVERY(GET_P2P_INFO(Adapter))) - {// Doing P2P Device Discovery - P2PScanListCeaseScan(GET_P2P_INFO(Adapter)); - P2PDeviceDiscoveryComplete(GET_P2P_INFO(Adapter), TRUE); // P2P State is restored in this function. - } - } - -#if (MULTIPORT_SUPPORT == 1) - if(GetFirstDevicePort(Adapter)) - { - (GET_P2P_INFO(GetFirstDevicePort(Adapter)))->uListenStateDiscoverability = 0; - } -#endif -#endif - // - // Stop scan, roaming and link operation. - // - if(MgntScanInProgress(pMgntInfo) || MgntIsLinkInProgress(pMgntInfo) || MgntRoamingInProgress(pMgntInfo)) - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("@!!!!!Mgnt_SetPower we are scanning.....\n")); - - if(MgntScanInProgress(pMgntInfo)) - MgntResetScanProcess(Adapter); - PlatformCancelTimer(Adapter, &pMgntInfo->ScanTimer); - { - PADAPTER pLoopAdapter = GetDefaultAdapter(Adapter); - - while(pLoopAdapter) - { - pLoopAdapter->MgntInfo.bScanInProgress = FALSE; - pLoopAdapter->MgntInfo.bDualModeScanStep = 0; - - pLoopAdapter = GetNextExtAdapter(pLoopAdapter); - } - } - - if( MgntIsLinkInProgress(pMgntInfo) || MgntRoamingInProgress(pMgntInfo)) - { - pMgntInfo->bJoinInProgress = FALSE; - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingStart(Adapter); - else - DrvIFIndicateConnectionStart(Adapter); - - DrvIFIndicateAssociationStart(Adapter); - DrvIFIndicateAssociationComplete(Adapter, RT_STATUS_FAILURE); - - if(MgntRoamingInProgress(pMgntInfo)) - DrvIFIndicateRoamingComplete(Adapter, RT_STATUS_FAILURE); - else - DrvIFIndicateConnectionComplete(Adapter, RT_STATUS_FAILURE); - MgntActSet_802_11_DISASSOCIATE( Adapter, unspec_reason); - } - } - - MgntResetRoamingState(pMgntInfo); - - //MgntDisconnectAP(Adapter , unspec_reason); - if(Adapter->MgntInfo.bMediaConnect || pMgntInfo->bIbssStarter) - { - RT_RF_POWER_STATE eRfPowerState; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("@!!!!!Mgnt_SetPower before we save the ssid, the ssid is %s bMediaConnect %d bIbssStarter %d\n", Adapter->MgntInfo.Ssid.Octet, pMgntInfo->bMediaConnect, pMgntInfo->bIbssStarter)); - - //save SSID - savedssid.Octet = ssidbuf; - CopySsidOS(savedssid, Adapter->MgntInfo.Ssid); - CopyMem(bssidbuf,Adapter->MgntInfo.Bssid, 6); - - //Add for DTM 1.0c test. - if(!pMgntInfo->bHiddenSSIDEnable) - MgntRemoveSsidsToScan(Adapter, Adapter->MgntInfo.Ssid); - - // - // CCW: don't indicae dissociation event on infra. mode client. - // 070125, rcnjko: don't indicate disassociation event - // - - if(!bEnableWoLCapabilities || - (pPSC->FSSDetection && (!pPSC->bSetPMParameters || (pPSC->bSetPMParameters && !pPSC->bOSSupportProtocolOffload)))) - { // Do not disasso to AP when WoWLAN. by tynli. - - if( Adapter->MgntInfo.OpMode == RT_OP_MODE_INFRASTRUCTURE ) - { - Adapter->pNdisCommon->bDissociateBeforeSleep = TRUE; - } - - MgntActSet_802_11_DISASSOCIATE(Adapter , unspec_reason); - Adapter->pNdisCommon->bPnpKeepConnectToAP = FALSE; - - //delay 50ms to let hw send disassociation packet successful - //fix s3 fail with Netgear3500 v1 - //by sherry 20101124 - PlatformStallExecution(50000); - } - else - { // WoWLAN - if( Adapter->MgntInfo.OpMode == RT_OP_MODE_INFRASTRUCTURE && pPSC->bPnpEnterD2) - Adapter->pNdisCommon->bPnpKeepConnectToAP = TRUE; - else - Adapter->pNdisCommon->bPnpKeepConnectToAP = FALSE; - } - - //restore SSID - CopySsidOS(Adapter->MgntInfo.Ssid, savedssid); - CopyMem(Adapter->MgntInfo.Bssid, bssidbuf, 6); - } - else - { - Adapter->pNdisCommon->bPnpKeepConnectToAP = FALSE; - } - - { - //PADAPTER pTargetAdapter = - // MgntActQuery_ApType(GetDefaultAdapter(Adapter)) == RT_AP_TYPE_VWIFI_AP ? - // GetDefaultAdapter(Adapter) : - // (MgntActQuery_ApType(ADJUST_TO_ADAPTIVE_ADAPTER(Adapter, FALSE)) == RT_AP_TYPE_VWIFI_AP ? ADJUST_TO_ADAPTIVE_ADAPTER(Adapter, FALSE) : NULL); - - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - if(MgntActQuery_ApType(pTargetAdapter) == RT_AP_TYPE_VWIFI_AP) - { - // stop beaconing. for NDISTest preview 3 SoftAP_Power_ext. - PMGNT_INFO pTargetMgntInfo = &pTargetAdapter->MgntInfo; - - MgntStopBeacon(pTargetAdapter); - - // Configure the HW to be No Link. - pTargetMgntInfo->OpMode = RT_OP_MODE_NO_LINK; - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_MEDIA_STATUS, (pu1Byte)(&pTargetMgntInfo->OpMode)); - pTargetMgntInfo->OpMode = RT_OP_MODE_AP; - } - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - pDevice->CurrentPowerState = NewPowerState; - Adapter->bInSetPower = TRUE; - - if(NDIS_CURRENT_IRQL() > PASSIVE_LEVEL) - { - // Schedule a workitem to do necessary tasks before entering sleep state. - // The OID will be completed until these tasks finished. - RT_TRACE(COMP_POWER, DBG_LOUD, ("N6Sdio_Mgnt_SetPower(): IRQL > PASSIVE. Call workitem!!!\n")); - bResult = PlatformScheduleWorkItem( &(pDevice->PnpWorkItem) ); - - if(bResult == FALSE){ - pMgntInfo->bSetPnpPwrInProgress = FALSE; - Status= NDIS_STATUS_SUCCESS; - } - else - Status= NDIS_STATUS_PENDING; - } - else - { - // - // Immediately disable adapter in this irql level, then return success. By Bruce, 2008-10-29. - // - PnpWorkItemCallback(Adapter); - Status= NDIS_STATUS_SUCCESS; - } - } - else - { // Otherwise. - RT_TRACE(COMP_POWER, DBG_LOUD, ("Set OID_PNP_SET_POWER should not reach here: Current: %d to New: %d\n", pDevice->CurrentPowerState, NewPowerState)); - - Status = NDIS_STATUS_SUCCESS; - } - - // For Working Time Calculation - EndTime = KeQueryPerformanceCounter(NULL); - Adapter->bCtrlPnPTime = FALSE; - - Adapter->PnPTotalTime.QuadPart = (EndTime.QuadPart - StartTime.QuadPart) * 1000000; - Adapter->PnPTotalTime.QuadPart = Adapter->PnPTotalTime.QuadPart / Freq.QuadPart; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[PnP Time] Wake Up Total Cost Time: %llu us\n", Adapter->PnPTotalTime.QuadPart)); - - Adapter->PnPIOTime.QuadPart = Adapter->PnPIOTime.QuadPart * 1000000; - Adapter->PnPIOTime.QuadPart = Adapter->PnPIOTime.QuadPart / Freq.QuadPart; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[PnP Time] IO Cost Time: %llu us\n", Adapter->PnPIOTime.QuadPart)); - - pDevice->PnPSdBusWorkTime.QuadPart = pDevice->PnPSdBusWorkTime.QuadPart * 1000000; - pDevice->PnPSdBusWorkTime.QuadPart = pDevice->PnPSdBusWorkTime.QuadPart / Freq.QuadPart; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[PnP Time] SdBus Submit Cost Time: %llu us\n", pDevice->PnPSdBusWorkTime.QuadPart)); - // - - *BytesRead = InformationBufferLength; - - return Status; -} - -//@@@ -// -// Callback function of the workitem PnpWorkitem -// 20061205 pnp work item for wake up from s3 mode -//by David -VOID -PnpWorkItemCallback( - IN PVOID pContext - ) -{ - - PADAPTER Adapter = (PADAPTER)pContext; - PADAPTER pDefaultAdapter = GetDefaultAdapter(Adapter); - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(Adapter); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(&(Adapter->MgntInfo)); - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PMGNT_INFO pMgntInfo = &Adapter->MgntInfo; - PRT_NLO_INFO pNLOInfo = &(pMgntInfo->NLOInfo); - BOOLEAN bWakeReconnect = TRUE; - BOOLEAN bMacPwrCtrlOn; - BOOLEAN bSupportRemoteWakeUp; - BOOLEAN bEnableWoLCapabilities; - RT_RF_POWER_STATE rfState; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("-----> PnpWorkItemCallback()\n")); - - Adapter->HalFunc.GetHalDefVarHandler(Adapter, HAL_DEF_WOWLAN , &bSupportRemoteWakeUp); - bEnableWoLCapabilities = MgntIsWoWLANCapabilityEnable(Adapter); - - if(pDevice->CurrentPowerState == NdisDeviceStateD0) - { // wake up. - - // - // Reset corresponding PnP event to monitor MiniportCheckForHang routine. - // 2009.09.30. - // - pDevice->bChkForHangAfterPnP = FALSE; - NdisResetEvent(&pDevice->SetPnpChkForHangEvent); - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PRT_POWER_SAVE_CONTROL pExtPSC = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pDefualtPSC = GET_POWER_SAVE_CONTROL(pDefaultMgntInfo); - - pDefaultAdapter->bEnterPnpSleep = FALSE; - pDefaultAdapter->bWakeFromPnpSleep = TRUE; - pDefaultAdapter->bDriverIsGoingToPnpSetPowerSleep = FALSE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - pExtPSC = GET_POWER_SAVE_CONTROL(pExtMgntInfo); - - pExtAdapter->bEnterPnpSleep = FALSE; - pExtAdapter->bWakeFromPnpSleep = TRUE; - pExtAdapter->bDriverIsGoingToPnpSetPowerSleep = FALSE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - if(Adapter->MgntInfo.RegSuspendTimerInLowPwr) - N6CTimerResourceAction(Adapter, RT_TIMER_RESOURCE_ACTION_RESUME); - - // Clear the flag after resuming from device low low power state. We expect that - // before the system sets OID_PNP_CAPABILITIES to put the device to low PS state, it will - // set OID_PM_PARAMETERS first. In order to seperate FSS mode from S3/S4/Selective suspend - // mode, we use "bSetPMParameters" flag to decide some behaviors. 2012.09.13, by tynli. - pPSC->bSetPMParameters = FALSE; - - RT_ENABLE_SDIO_TRANSFERS(Adapter); - - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - pTargetAdapter->bInitializeInProgress=TRUE; - pTargetAdapter->bSWInitReady=TRUE; - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - -#if USE_WDF_SDIO - WdfSdioTx_Enable(Adapter); -#else - N6WdmSdio_Enable(Adapter); - N6WdmSdioTx_Enable(Adapter); -#endif - N6SdioDummyIO(pDevice); - - // Control SDIO Clock rate settings - if(pDevice->bRegSdioSpeedSDR25) - { - N6SdioConfigureBusCLKByWorkAround(pDevice); - } - - if(bEnableWoLCapabilities) - { - N6SdioEnableDeviceInterrupt(Adapter); - } - - - // - // 070106, rcnjko: - // Re-initialize H/W for USB Bus is suspend. - // Besides, we also issue bulk IN transfers at InitializeAdapterHandler(). - // - // On Intel Bay Trail low power platform, "D2 -> D0 -> miniport shutdown" function will be - // called by user initialiated Restart. It has site effect to 8723BS card lost issue. So this is a work around - // to add the condition to prevent from acting HaltAdapter in PNP D2 and D0 under Restart flow. 2013.11.18. - if((pMgntInfo->bIntelPatchPNP && !pMgntInfo->bReceiveSystemPSOID) || (!pMgntInfo->bIntelPatchPNP)) - { - Adapter->HalFunc.InitializeAdapterHandler(Adapter, Adapter->MgntInfo.dot11CurrentChannelNumber); - } - - // - // Reconnect to AP in the following conditions for AOAC on connected standby platform. - // (1) The media state is connected before PNP sleep and HW is re-initiated after resupmtion. - // (2) The media state is connected before PNP sleep and wake reason is AP lost, on disassoc, or on deauth. - // (3) According to the variable "bPnpKeepConnectToAP", we should keep connection (do not perform reconnect - // mechanism) if "bPnpKeepConnectToAP" is TRUE. It will be set to TRUE while remote wake up function - // is decided to be operation in PNP sleep flow. 2014.11.12, by tynli. - // - if(pMgntInfo->bRegPnpKeepLink) - { - if((Adapter->MgntInfo.bMediaConnect && (Adapter->bReInitHW || pPSC->WakeUpReason == WOL_REASON_AP_LOST || - pPSC->WakeUpReason == WOL_REASON_DISASSOC ||pPSC->WakeUpReason == WOL_REASON_DEAUTH)) || - (!Adapter->pNdisCommon->bPnpKeepConnectToAP)) - { - pMgntInfo->bPerformPnpReconnect = TRUE; - } - else - { - pMgntInfo->bPerformPnpReconnect = FALSE; - } - - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnPSetPower(): bPerformPnpReconnect=%d, bReInitHW=%d\n", - pMgntInfo->bPerformPnpReconnect, Adapter->bReInitHW)); - } - else - { - pMgntInfo->bPerformPnpReconnect = TRUE; - } - - if(bSupportRemoteWakeUp) // Need to be set before N6RestoreLastInitSettingAterWakeUP(). - { - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); //For HW Security. by tynli. 2009.06.24. - } - - - PlatformSetCheckForHangTimer(Adapter); - - PlatformStartWorkItem(&(Adapter->pPortCommonInfo->pPortHelper->CreateDeleteMacWorkitem)); - - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - pTargetAdapter->bInitializeInProgress = FALSE; - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - //ADJUST_TO_ADAPTIVE_ADAPTER(Adapter, FALSE)->bInitializeInProgress=FALSE; - //pDefaultAdapter->bInitializeInProgress=FALSE; - - //fix some InitilaAdapter error under sleep - - if( !Adapter->bInHctTest ) - { - PADAPTER pTargetAdapter = GetDefaultAdapter(Adapter); - - while(pTargetAdapter != NULL) - { - RT_TRACE(COMP_AP, DBG_LOUD, ("Adapter on Port: %d, APType: %d\n", pTargetAdapter->pNdis62Common->PortNumber, MgntActQuery_ApType(pTargetAdapter))); - if(MgntActQuery_ApType(pTargetAdapter) == RT_AP_TYPE_VWIFI_AP) - { - // Force vWifi being OFF(STATE: not available), then reset it(STATE: not started) - pTargetAdapter->bvWifiStopBeforeSleep = TRUE; - N62CApIndicateStopAp(pTargetAdapter); - } - - pTargetAdapter = GetNextExtAdapter(pTargetAdapter); - } - } - - Adapter->pNdisCommon->bWakeupAutoLinkInProgressing = TRUE; - - if(pMgntInfo->bPerformPnpReconnect) - { - RT_TRACE(COMP_POWER, DBG_LOUD, (" PnpWorkItemCallback() try to connect to %s\n", Adapter->MgntInfo.Ssid.Octet)); - } - N6RestoreLastInitSettingAterWakeUP(Adapter); - - // Indicate disassociation state when RF is off becuase we do not disconnect before sleep in WoWLAN mode. - // 2011.10.27. by tynli. - Adapter->HalFunc.GetHwRegHandler(Adapter, HW_VAR_RF_STATE, (pu1Byte)(&rfState)); - if(rfState == eRfOff) - { - if(Adapter->pNdisCommon->bPnpKeepConnectToAP) - { - DrvIFIndicateDisassociation(Adapter, unspec_reason, pMgntInfo->Bssid); - } - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - - if(OS_SUPPORT_WDI(Adapter)) - { - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - // TODO: WoWLAN - - // TODO: NLO - } - else if(pNdisCommon->bWakeupAutoLinkInProgressing) - { - if( pNLOInfo->NumDot11OffloadNetwork != 0 && Adapter->bInHctTest) - { - u1Byte i = 0; - BOOLEAN bTargetInNLO = FALSE; - - if(Adapter->MgntInfo.bMediaConnect || pNdisCommon->bDissociateBeforeSleep) - { - for(i=0; iNumDot11OffloadNetwork; i++) - { - if(pMgntInfo->Ssid.Length && (pMgntInfo->Ssid.Length == pNLOInfo->dDot11OffloadNetworkList[i].ssidlen)) - if(!PlatformCompareMemory(pMgntInfo->Ssid.Octet, pNLOInfo->dDot11OffloadNetworkList[i].ssidbuf, pMgntInfo->Ssid.Length)) - bTargetInNLO = TRUE; - } - - if(!bTargetInNLO) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnPSetPower(): LinkTargetSSID is not in Dot11OffloadNetworks!\n")); - pNdisCommon->ScanPeriod = 0; - PlatformHandleNLOnScanRequest(Adapter); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnPSetPower(): FFFFind LinkTargetSSID in Dot11OffloadNetworks!\n")); - if(!(ACTING_AS_AP(Adapter) || IsExtAPModeExist(Adapter))) - { - if(pMgntInfo->Ssid.Length != 0) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnpSetPower() try to connect to %s\n", Adapter->MgntInfo.Ssid.Octet)); - - // Set Roam flag - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_SLEEP, ROAMINGSTATE_SCANNING); - - DrvIFIndicateRoamingStart(Adapter); - pNdisCommon->bDissociateBeforeSleep = FALSE; - - MgntActSet_802_11_SSID(Adapter, pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, TRUE ); - } - } - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - } - else - { - //if(pPSC->DxNLOEnable && (pPSC->WakeUpReason == WOL_REASON_NLO_SSID_MATCH)) - { // FW NLO SSID matched - // We should execute scan here because after indicating NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED, - // OS will not set scan request OID (different with msdn's mention) and then query BSS list OID. So if we - // do not keep NLO matched SSID in BSS list, the state machine will keep in disconnect then HCK test will be failed. - // This may be a workaround because we do not know the behavior expected by MSFT. 2014.03.06. Add by tynli. - pNdisCommon->ScanPeriod = 0; - PlatformHandleNLOnScanRequest(Adapter); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - } -// pMgntInfo->bPwrSaveState = FALSE; -// Adapter->bWakeFromPnpSleep = FALSE; - } - else - { - // NLO enabled by the upper layer and in disconnect state, we should make sure that we will connect - // to the expected AP by indicating NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED - // to declare that NLO scan is finished. - if((pNLOInfo->NumDot11OffloadNetwork != 0) && (!Adapter->MgntInfo.bMediaConnect) && - (!pNdisCommon->bDissociateBeforeSleep)) - { - // We should execute scan here because after indicating NDIS_STATUS_DOT11_OFFLOAD_NETWORK_STATUS_CHANGED, - // OS will not set scan request OID (different with msdn's mention) and then query BSS list OID. So if we - // do not keep NLO matched SSID in BSS list, the state machine will keep in disconnect then HCK test will be failed. - // This may be a workaround because we do not know the behavior expected by MSFT. 2014.03.06. Add by tynli. - pNdisCommon->ScanPeriod = 0; - PlatformHandleNLOnScanRequest(Adapter); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - else - { - // Temporarily modify this for Lenovo PEAP-GTC S3/S4 reconnect issue. - // This issue shall be confirmed by DTM and other function test. - /*if(pMgntInfo->CustomerID==RT_CID_819x_Lenovo) - { - bWakeReconnect = FALSE; - // Customize for Lenovo. 2010.11.09. by tynli. - DrvIFIndicateDisassociation(Adapter, unspec_reason); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - else*/ - { - if((!ACTING_AS_AP(Adapter) || (!IsExtAPModeExist(Adapter) && bEnableWoLCapabilities)) - && (pMgntInfo->Ssid.Length != 0) && !(IsSSIDDummy(pMgntInfo->Ssid)) && pMgntInfo->bPerformPnpReconnect - ) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnpSetPower() try to connect to %s ACTING_AS_AP(Adapter) %d IsExtAPModeExist(Adapter) %d\n", - Adapter->MgntInfo.Ssid.Octet, ACTING_AS_AP(Adapter) , IsExtAPModeExist(Adapter))); - bWakeReconnect = TRUE; - } - else - { - bWakeReconnect = FALSE; - } - - if(bWakeReconnect) - { - // Set Roam flag - MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_SLEEP, ROAMINGSTATE_SCANNING); - - pNdisCommon->PNPconnentCout = 0; - // Try to connent AP !! - // Set timer to 10ms to prevent from being returned by bSetPnpPwrInProgress in MgntLinkRetry function - // or we could call PNPReConnectTimer directly. - // 1. Indicate roaming start. 2. Reconnect to AP in PNPReConnectTimer(). - PlatformSetTimer(Adapter, &pNdisCommon->PNPReConnentTimer, 10); - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnpSetPower(): do not try to connect to AP\n")); - pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - pNdisCommon->bDissociateBeforeSleep = FALSE; - - // - // If we keep connection after PNP resumption, we should reset Rx TS to avoid - // packet droped by the sequence number is over Rx reorder window size because we will not - // update the Rx TS sequence number during PNP sleep stage. 2015.01.22. - // - if(pMgntInfo->OpMode == RT_OP_MODE_INFRASTRUCTURE && pMgntInfo->mAssoc) - { - QosResetRxTS(Adapter); - MgntRecoverFWOffloadMechanism(Adapter); - } - } - } - } - } - // Move the flag to be cleared in PNPReConnentTimerCallBack(). - //pNdisCommon->bWakeupAutoLinkInProgressing = FALSE; - } - Adapter->bWakeFromPnpSleep = FALSE; -#if USE_WORKITEM - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - RT_TRACE(COMP_POWER, DBG_LOUD, (" Start check for hang workitem\n")); - PlatformStartWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - } -#endif - } - else if(pDevice->CurrentPowerState > NdisDeviceStateD0) - { // sleep. - PlatformIndicateCustomStatus( - Adapter, - RT_CUSTOM_EVENT_IRP_UNLOAD, - RT_CUSTOM_INDI_TARGET_IRP, - NULL, - 0); - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - - pDefaultMgntInfo->bStartApDueToWakeup=TRUE; - - pDefaultAdapter->bEnterPnpSleep = TRUE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - - pExtMgntInfo->bStartApDueToWakeup=TRUE; - - pExtAdapter->bEnterPnpSleep = TRUE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - pMgntInfo->bInToSleep = TRUE; - - //Add by Maddest for add weighting for BSSID matched AP For DTM test, 2007.08.07. - // Run as roaming to connect to the original AP. By Bruce, 2008-06-09. - - //Moved to PNP wake flow. 2013.04. - //MgntLinkStatusSetRoamingState(Adapter, 0, RT_ROAMING_BY_SLEEP, ROAMINGSTATE_SCANNING); - - // 20100721 Joseph: Modified for Velocity Suspend test. - // Reset IPS state only. - // Since NIC is going to Halt for sleep, driver does not need to initialize the HW again. - // This shall be revised in the future and also take NIC Disable/Radio-off into consideration. - if((!bSupportRemoteWakeUp) && - (pPSC->IPSState==eIPSDozed) && - /*(pPSC->RegRfPsLevel & RT_RF_OFF_LEVL_HALT_NIC) &&*/ - RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVL_HALT_NIC)) - { - LPSLeaveAndCheckReady(Adapter); - - NicIFDisableInterrupt(Adapter); - - pPSC->eInactivePowerState = eRfOn; - pPSC->IPSState = eIPSAwake; - pMgntInfo->RfOffReason &= (~RF_CHANGE_BY_IPS); - } - else - { - LeaveAllPowerSaveMode(Adapter); - } - NicIFClearInterrupt(Adapter); - - // Recover the BW to 40MHz for a specific case. To see the description of - // function HTRecoverBWTo40MHz(). 2012.12.20, by tynli. - if(bSupportRemoteWakeUp && - (Adapter->MgntInfo.OpMode == RT_OP_MODE_INFRASTRUCTURE)) - { - HTRecoverBWTo40MHz(Adapter); - } - - PlatformAcquireSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - while( pMgntInfo->RFChangeInProgress) - { - PlatformReleaseSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - - RT_TRACE(COMP_POWER,DBG_LOUD, - ("RF is in progress, need to wait until rf chang is done.\n")); - delay_ms(1); - - PlatformAcquireSpinLock(Adapter,RT_RF_STATE_SPINLOCK); - } - PlatformReleaseSpinLock(Adapter,RT_RF_STATE_SPINLOCK); -// Adapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - //In Win7 for WoWLAN, we should write CAM to allow Hw to encrypt/decrypt packets when S3/S4 because - //there are some type of packets are en/decrypted by Sw when wake up. by tynli. - if(bSupportRemoteWakeUp) - { - PRT_SECURITY_T pSecInfo = &(Adapter->MgntInfo.SecurityInfo); - u1Byte KeyIndex; - u1Byte CAM_CONST_BROAD[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - - Adapter->bHWSecurityInWoL = TRUE; - - Adapter->HalFunc.EnableHWSecCfgHandler(Adapter); - - if(pSecInfo->PairwiseEncAlgorithm == RT_ENC_ALG_WEP40 || - pSecInfo->PairwiseEncAlgorithm ==RT_ENC_ALG_WEP104) - { //Set WEP key to hw (but WEP 1.x cannot work) - for(KeyIndex=0; KeyIndex<4; KeyIndex++) - { - if(pSecInfo->KeyLen[KeyIndex] != 0) - { - Adapter->HalFunc.SetKeyHandler(Adapter, - KeyIndex, - CAM_CONST_BROAD, - FALSE, - pSecInfo->PairwiseEncAlgorithm, - TRUE, - FALSE); - } - } - } - else if( pSecInfo->PairwiseEncAlgorithm != RT_ENC_ALG_NO_CIPHER ) - { //Set group key for other encrypyion mode (TKIP, AES) - Adapter->HalFunc.SetKeyHandler(Adapter, - pSecInfo->GroupTransmitKeyIdx, //KeyIndex, - CAM_CONST_BROAD, - TRUE, //IsGroup, - pSecInfo->GroupEncAlgorithm, - FALSE, - FALSE); - } - Adapter->bHWSecurityInWoL = FALSE; - } - //-Write CAM End------------------------------------------ - -{ - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - pDefaultAdapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - while(pExtAdapter != NULL) - { - pExtAdapter->bDriverIsGoingToPnpSetPowerSleep = TRUE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } -} - - // On Intel Bay Trail low power platform, "D2 -> D0 -> miniport shutdown" function will be - // called by user initialiated Restart. It has site effect to 8723BS card lost issue. So this is a work around - // to add the condition to prevent from acting HaltAdapter in PNP D2 and D0 under Restart flow. 2013.11.18. - if((pMgntInfo->bIntelPatchPNP && !pMgntInfo->bReceiveSystemPSOID) || (!pMgntInfo->bIntelPatchPNP)) - { - if(bSupportRemoteWakeUp && IS_WOWLAN_OPERATING_MODE(pMgntInfo)) - Adapter->HalFunc.SleepAdapterHandler(Adapter); - else - Adapter->HalFunc.HaltAdapterHandler(Adapter, FALSE); - } - - // We may set H2C to Fw during HaltAdapter so release H2C queue after Halt. 2011.10.04. by tynli. - Adapter->HalFunc.WaitForH2CQueueEmptyHandler(Adapter); - - if((pMgntInfo->RfOffReason & (RF_CHANGE_BY_IPS|RF_CHANGE_BY_SW|RF_CHANGE_BY_HW)) && - RT_IN_PS_LEVEL(Adapter, RT_RF_OFF_LEVEL_FW_IPS_32K)) - { - // Wait FW 32K Event - // Prefast warning C28121: The function 'NdisWaitEvent' is not permitted to be called at the current IRQ level. - // Prefast warning C28156: The actual IRQL 2 is inconsistent with the required IRQL 0 - // False positive, irql should be restored by PlatformReleaseSpinLock. -#pragma warning( disable:28121 ) -#pragma warning( disable:28156 ) - if(!NdisWaitEvent(&pDevice->FwPsClockOffEvent, 20)) - { - // Force Hw clock off to 32K - RT_TRACE(COMP_POWER, DBG_LOUD, ("Force Hw clock off to 32K!\n")); - SetFwPSRFOffLowPower(Adapter); - } - } - - if(pDevice->CurrentPowerState == NdisDeviceStateD2 && bEnableWoLCapabilities) - { - N6SdioDisableDeviceInterrupt(Adapter); - } - - // Wait until all H2C cmd finished than disable cmd53 to prevent from cmd53 lost issue. - // To disable cmd53 operation here to avoid that system reset NIC power during sleep or hibernate mode - // but driver does not call card disable flow to disable cmd53 operation, it will cause driver use cmd53 - // to access non-power on regsiter then I/O fail after resume. - // Dsiable CMD53 R/W operation - bMacPwrCtrlOn = FALSE;// Disable CMD53 R/W - Adapter->HalFunc.SetHwRegHandler(Adapter, HW_VAR_APFM_ON_MAC, (pu1Byte)(&bMacPwrCtrlOn)); - - if(pDevice->bRegSdioSpeedSDR25) - { - N6SdioConfigureBusCLK_SDR12(pDevice); - } - - RT_DISABLE_SDIO_TRANSFERS(Adapter); - -#if USE_WDF_SDIO - WdfSdio_Disable(Adapter); -#else - N6WdmSdio_Disable(Adapter); -#endif - - // - // 070531, rcnjko: although NDIS6 had made driver stack go to paused state - // before sleeping, it is safer to return pending tx to upper layer. - // - N6SdioReturnAllPendingTxPackets(Adapter); - - // Release Tx Queue buffered context if needed. added by Roger, 2014.04.29. - N6SdioReleaseTxQueuePending(Adapter); - - // 2011/08/23 MH For check for hang test only. Prevent check for HANG IQK write incorrect BB register under - // RF off state. - { - HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); - RT_TRACE(COMP_POWER, DBG_LOUD, (" Stop check for hang workitem\n")); - PlatformStopWorkItem( &(pHalData->RtCheckForHangWorkItem) ); - } - - PlatformStopWorkItem(&(Adapter->pPortCommonInfo->pPortHelper->CreateDeleteMacWorkitem)); - - // - // As devices enter low power states, the driver managing the devices should cancel any programmed timers. - // Added by Roger, 2016.01.18 - // - if(Adapter->MgntInfo.RegSuspendTimerInLowPwr){ - N6CTimerResourceAction(Adapter, RT_TIMER_RESOURCE_ACTION_SUSPEND); - N6WaitTimerSync(Adapter); - } - - { - PADAPTER pExtAdapter = GetNextExtAdapter(pDefaultAdapter); - PMGNT_INFO pExtMgntInfo = NULL; - PMGNT_INFO pDefaultMgntInfo = &pDefaultAdapter->MgntInfo; - - pDefaultMgntInfo->bDriverIsGoingToSleep = FALSE; - - while(pExtAdapter != NULL) - { - pExtMgntInfo = &pExtAdapter->MgntInfo; - - pExtMgntInfo->bDriverIsGoingToSleep = FALSE; - - pExtAdapter = GetNextExtAdapter(pExtAdapter); - } - } - - RT_TRACE(COMP_POWER, DBG_LOUD, (" PnpWorkItemCallback() sleep\n")); - } - else - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("PnpWorkItemCallback(): unexpected CurrentPowerState: %#X\n", pDevice->CurrentPowerState)); - } - - if(pMgntInfo->bPreTransPnP) - { - if(pDevice->CurrentPowerState == NdisDeviceStateD0) - {// wake up. - - //MultiPortSetAllPortsHWReadyStatus(Adapter, TRUE); - - // - // We should complete corresponding OID we pended before for PnP wakeup pre-transition if needed. - // 2012.11.29. - // - PlatformAcquireSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - if(pNdisCommon->PendedRequest) - { - PlatformReleaseSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - RT_TRACE(COMP_POWER, DBG_LOUD, ("PnpWorkItemCallback(): Complete Pended OID for PnP!!\n")); - N6CompletePendedOID(Adapter, RT_PENDED_OID_PNP, - N6SdioOidRequest((NDIS_HANDLE)Adapter, pNdisCommon->PendedRequest)); - } - else - { - PlatformReleaseSpinLock(Adapter, RT_PENDED_OID_SPINLOCK); - } - } - else if(pDevice->CurrentPowerState > NdisDeviceStateD0) - {// Sleep - - N6CompletePendedOID( - Adapter, - RT_PENDED_OID_PNP, - NDIS_STATUS_SUCCESS); - } - else - { - RT_TRACE(COMP_POWER, DBG_WARNING, ("PnpWorkItemCallback(): unexpected CurrentPowerState: %#X\n", pDevice->CurrentPowerState)); - } - } - else - {// Complete pended OID. - N6CompletePendedOID(Adapter, RT_PENDED_OID_PNP, NDIS_STATUS_SUCCESS); - } - - Adapter->bInSetPower = FALSE; - pMgntInfo->bSetPnpPwrInProgress = FALSE; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("<----- PnpWorkItemCallback() return ndis_status_success\n")); -} - -#endif //power_man - - -// -// Description: -// Fill up our capability about power management. -// -VOID -FillPnpCapabilities( - IN PADAPTER pAdapter, - IN OUT PNDIS_PNP_CAPABILITIES pPnpCapabilities - ) -{ - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - BOOLEAN bSupportRemoteWakeUp; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_WOWLAN , &bSupportRemoteWakeUp); - PlatformZeroMemory(pPnpCapabilities, sizeof(NDIS_PNP_CAPABILITIES)); - -#if POWER_MAN - if(bSupportRemoteWakeUp) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("FillPnpCapabilities(): support remote wake up\n")); - - // - // Report we support WOL feature. - // - pPnpCapabilities->Flags = NDIS_DEVICE_WAKE_UP_ENABLE; - - // - // Set type of WOL supported. - // - pPnpCapabilities->WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateD3; // 070201, rcnjko: magic packet tought me a lesson, we should call one's name 16 times to awake him. So, be patient. - pPnpCapabilities->WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateD3; - pPnpCapabilities->WakeUpCapabilities.MinLinkChangeWakeUp = NdisDeviceStateUnspecified; - if(pPSC->WoWLANMode == eWakeOnMagicPacketOnly) //by tynli. - pPnpCapabilities->WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified; - else if (pPSC->WoWLANMode == eWakeOnPatternMatchOnly) - pPnpCapabilities->WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateUnspecified; - - } - else -#endif - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("FillPnpCapabilities(): NOT support remote wake up\n")); - - // - // Not support WOL - // - pPnpCapabilities->WakeUpCapabilities.MinMagicPacketWakeUp = NdisDeviceStateUnspecified; - pPnpCapabilities->WakeUpCapabilities.MinPatternWakeUp = NdisDeviceStateUnspecified; - pPnpCapabilities->WakeUpCapabilities.MinLinkChangeWakeUp = NdisDeviceStateUnspecified; - } - -} - - -// -// Description: -// Fill up the capabilities about power management for NDIS 6.2 and later version. Added by tynli. 2009.06.05 -// -VOID -FillPmCapabilities( - IN PADAPTER pAdapter, - IN OUT PNDIS_PM_CAPABILITIES pPmCapabilities - ) -{ - PHAL_DATA_TYPE pHalData = GET_HAL_DATA(pAdapter); - BOOLEAN bEnableWoLCapabilities; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - bEnableWoLCapabilities = MgntIsWoWLANCapabilityEnable(pAdapter); - PlatformZeroMemory(pPmCapabilities, sizeof(NDIS_PM_CAPABILITIES)); - -#if NDIS_SUPPORT_NDIS630 - pPmCapabilities->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - pPmCapabilities->Header.Revision = NDIS_PM_CAPABILITIES_REVISION_2; - pPmCapabilities->Header.Size = NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_2; -#else - pPmCapabilities->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - pPmCapabilities->Header.Revision = NDIS_PM_CAPABILITIES_REVISION_1; - pPmCapabilities->Header.Size = NDIS_SIZEOF_NDIS_PM_CAPABILITIES_REVISION_1; -#endif - -#if POWER_MAN - if(bEnableWoLCapabilities) - { - RT_TRACE(COMP_POWER, DBG_LOUD, - ("FillPmCapabilities(): support Win7 wake-on-lan (%d)\n", pPSC->WoWLANMode)); - - // - // Report we support WOL feature. - // -#if NDIS_SUPPORT_NDIS630 - pPmCapabilities->Flags = NDIS_PM_WAKE_PACKET_INDICATION_SUPPORTED;// 0; -#else - pPmCapabilities->Flags = 0; -#endif - // We should not enable NDIS_PM_WOL_EAPOL_REQUEST_ID_MESSAGE_SUPPORTED - // when supporting GTK rekey offload or the upper layer will not send GTK offload OID to our driver. - // 2012.02.22. by tynli. - pPmCapabilities->SupportedWoLPacketPatterns = - (NDIS_PM_WOL_MAGIC_PACKET_SUPPORTED| - NDIS_PM_WOL_BITMAP_PATTERN_SUPPORTED| - NDIS_PM_WOL_EAPOL_REQUEST_ID_MESSAGE_SUPPORTED| - NDIS_PM_WOL_IPV4_TCP_SYN_SUPPORTED| - NDIS_PM_WOL_IPV6_TCP_SYN_SUPPORTED| - NDIS_PM_WOL_IPV4_DEST_ADDR_WILDCARD_SUPPORTED| - NDIS_PM_WOL_IPV6_DEST_ADDR_WILDCARD_SUPPORTED); - pPmCapabilities->NumTotalWoLPatterns = MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter); - pPmCapabilities->MaxWoLPatternSize = MAX_WOL_PATTERN_SIZE; - pPmCapabilities->MaxWoLPatternOffset = 256; - pPmCapabilities->MaxWoLPacketSaveBuffer = (MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter))*MAX_WOL_PATTERN_SIZE; - pPmCapabilities->SupportedProtocolOffloads = 0; - pPmCapabilities->NumArpOffloadIPv4Addresses = 0; - pPmCapabilities->NumNSOffloadIPv6Addresses = 0; // WHQL requirment at least 2 - if(pPSC->RegARPOffloadEnable) - { - pPmCapabilities->SupportedProtocolOffloads |= NDIS_PM_PROTOCOL_OFFLOAD_ARP_SUPPORTED; - pPmCapabilities->NumArpOffloadIPv4Addresses = 1; - } - if(pPSC->RegNSOffloadEnable) - { - pPmCapabilities->SupportedProtocolOffloads |= NDIS_PM_PROTOCOL_OFFLOAD_NS_SUPPORTED; - pPmCapabilities->NumNSOffloadIPv6Addresses =2; - } - if(pPSC->RegGTKOffloadEnable) - pPmCapabilities->SupportedProtocolOffloads |= NDIS_PM_PROTOCOL_OFFLOAD_80211_RSN_REKEY_SUPPORTED; - - // - // Set type of WOL supported. - // - pPmCapabilities->MinMagicPacketWakeUp = NdisDeviceStateD3; // 070201, rcnjko: magic packet tought me a lesson, we should call one's name 16 times to awake him. So, be patient. - pPmCapabilities->MinPatternWakeUp = NdisDeviceStateD3; - pPmCapabilities->MinLinkChangeWakeUp = NdisDeviceStateUnspecified; - if(pPSC->WoWLANMode == eWakeOnMagicPacketOnly) //by tynli. - pPmCapabilities->MinPatternWakeUp = NdisDeviceStateUnspecified; - else if (pPSC->WoWLANMode == eWakeOnPatternMatchOnly) - pPmCapabilities->MinMagicPacketWakeUp = NdisDeviceStateUnspecified; - - // - // Set new attributes for Win8 - // -#if NDIS_SUPPORT_NDIS630 - // Temporarily mark some attributes because we cannot support now. - // They will be enable in the feature. 2012.03.12. by tynli. - pPmCapabilities->SupportedWakeUpEvents = 0 - /*NDIS_PM_WAKE_ON_MEDIA_DISCONNECT_SUPPORTED | - NDIS_PM_WAKE_ON_MEDIA_CONNECT_SUPPORTED*/; - pPmCapabilities->MediaSpecificWakeUpEvents = /*0 |*/ - NDIS_WLAN_WAKE_ON_NLO_DISCOVERY_SUPPORTED | - NDIS_WLAN_WAKE_ON_AP_ASSOCIATION_LOST_SUPPORTED | - NDIS_WLAN_WAKE_ON_GTK_HANDSHAKE_ERROR_SUPPORTED | - NDIS_WLAN_WAKE_ON_4WAY_HANDSHAKE_REQUEST_SUPPORTED; -#endif - } - else -#endif - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("FillPmCapabilities(): NOT support Win7 wake-on-lan\n")); - - // - // Not support WOL - // - pPmCapabilities->MinMagicPacketWakeUp = NdisDeviceStateUnspecified; - pPmCapabilities->MinPatternWakeUp = NdisDeviceStateUnspecified; - pPmCapabilities->MinLinkChangeWakeUp = NdisDeviceStateUnspecified; - } -} - - - -// -// Description: -// Allocate N6 Usb related resources(e.g., Fix InOut pipe fix workitems). -// -// Created by Roger, 2009.04.30. -// -VOID -N6SdioAllocRes( - IN PADAPTER Adapter - ) -{ - - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - -#if POWER_MAN - PlatformInitializeWorkItem( - Adapter, - &(device->PnpWorkItem), - (RT_WORKITEM_CALL_BACK)PnpWorkItemCallback, - (PVOID)Adapter, - "PnpWorkItem"); -#endif - -} - -// -// Description: -// Free N6 Usb related resources(e.g., Fix InOut pipe fix workitems). -// -// Created by Roger, 2009.04.30. -// -VOID -N6SdioFreeRes( - IN PADAPTER Adapter - ) -{ - PRT_SDIO_DEVICE device = GET_RT_SDIO_DEVICE(Adapter); - - PlatformFreeWorkItem( &(device->PnpWorkItem)); -} - - -// -// Description: -// Cancel IRP pending to of specified Tx Queue and -// wait until all outstanding request completed. -// -VOID -N6SdioStopTxQueue( - IN PADAPTER pAdapter, - IN int nTxQueueIdx - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - - RT_ASSERT(nTxQueueIdx >= 0 && nTxQueueIdx < pDevice->RtNumTxQueue, - ("RTsdioStartTxQueue(): nTxQueueIdx(%d) shall falls in [0,%d)\n", - nTxQueueIdx, pDevice->RtNumTxQueue)); - - pTxQueue = &(pDevice->RtTxQueue[nTxQueueIdx]); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(!pTxQueue->bEnabled) - { - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - return; - } - else - { - pTxQueue->bEnabled = FALSE; // Mark the pipe as disabled - } - - if(pTxQueue->IrpPendingCount > 0) - pTxQueue->IrpPendingCount--; // Decrease 1 for RTusbSelectConfiguration() had initialized it to 1. - else - RT_ASSERT(FALSE, ("IrpPendingCount is 0 when TxQueue is Enable. Abnormal!!\n")); - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - -} - - - -// -// Description: -// Mark the Tx Queue as enabled state. -// -VOID -N6SdioStartTxQueue( - IN PADAPTER pAdapter, - IN int nTxQueueIdx - ) -{ - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - PRT_SDIO_TX_QUEUE pTxQueue = NULL; - - RT_ASSERT(nTxQueueIdx >= 0 && nTxQueueIdx < pDevice->RtNumTxQueue, - ("RTsdioStartTxQueue(): nTxQueueIdx(%d) shall falls in [0,%d)\n", - nTxQueueIdx, pDevice->RtNumTxQueue)); - - pTxQueue = &(pDevice->RtTxQueue[nTxQueueIdx]); - - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - if(!pTxQueue->bEnabled) - { - pTxQueue->bEnabled = TRUE; - pTxQueue->IrpPendingCount++; - } - - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); -} - - -// -// Description: -// Query current SD bus operating clock after resumption especially for the case of FSS -// mode and configure corresponding clock rate to fix mismatched phase modulation for -// SD request packets -// -// Created by Roger, 2015.03.24. -// -RT_STATUS -N6SdioSyncCurrentSdBusClk( - IN PRT_SDIO_DEVICE pDevice -) -{ - RT_STATUS status = RT_STATUS_FAILURE; - NTSTATUS ntstatus; - u1Byte Data=0; - u4Byte SdioBusClk=0; - - - ntstatus = PlatformSdioGetProperty(pDevice, - SDP_BUS_CLOCK, - &SdioBusClk, - sizeof(SdioBusClk)); - - if(!NT_SUCCESS(ntstatus)){ - return status; - } - - // Configuration for SDIO v2.0 - Data |= ((SdioBusClk == 50000) ? BIT1:0); // Set BIT1 for 50MHz operation clock - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_WITHOUT_REF_DEVICE_ID, //Device ID - 0, //Function Number - 1, //Byte Count - (ULONG)0x13, //Offset - TRUE, //Write operation - &Data); - - if(status != RT_STATUS_SUCCESS){ - return status; - } - - return RT_STATUS_SUCCESS; -} - -// -// Description: -// Dummy I/O is to distingush who sends the Bus I/O. (Driver? Host?) Those -// I/O before this Dummy I/O are sent by Host, and those after it are sent by -// driver. -// -// Created by TzuHang, 2015.04.08. -// -VOID -N6SdioDummyIO( - IN PRT_SDIO_DEVICE pDevice -) -{ - RT_STATUS status = RT_STATUS_FAILURE; - u1Byte Data = 0; - - // Dummy I/O - // - Data = 0x10; // Dummy - status = PlatformSdioCmd52ReadWrite( - pDevice, - SDIO_LOCAL_DEVICE_ID, //Device ID - 1, //Function Number - 1, //Byte Count - (ULONG)0x0, //Offset - TRUE, //Write operation - &Data); - - if(status != RT_STATUS_SUCCESS){ - RT_TRACE_F(COMP_INIT, DBG_LOUD,("Write SDIO Dummy I/O FAIL!!\n")); - } -} diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.h deleted file mode 100644 index 03e408b4..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_main.h +++ /dev/null @@ -1,404 +0,0 @@ -#ifndef __INC_N6SDIO_MAIN_H -#define __INC_N6SDIO_MAIN_H - -// Forward declaration. -typedef struct _ADAPTER ADAPTER, *PADAPTER; -typedef struct _RT_TCB RT_TCB, *PRT_TCB; -typedef struct _RT_RFD RT_RFD, *PRT_RFD; - - -//sherry added here for dual mac 20110627 -extern RT_LIST_ENTRY GlobalAdapterList; -extern BOOLEAN GlobalFirstConfigurationForNormalChip; -extern ULONG GlobalMutexForGlobalAdapterList; -extern GLOBAL_SPINLOCK GlobalSpinlockForGlobalAdapterList; -extern ULONG GlobalMutexForPowerAndEfuse; -extern ULONG GlobalMutexForPowerOnAndPowerOff; -extern ULONG GlobalMutexForFwDownload; -extern ULONG GlobalMutexForMac0_2G_Mac1_5G; -extern GLOBAL_SPINLOCK GlobalSpinLockForDusc; - -#define N6SDIO_GET_MINIPORT_HANDLE(_pAdapter) (GET_RT_SDIO_DEVICE(_pAdapter)->hNdisAdapter) - - -//------------------------------------------------------------------------- -// Tx Related. -//------------------------------------------------------------------------- -#define N6SDIO_CANNOT_TX(__pAdapter) \ - ( RT_SDIO_CANNOT_TX(__pAdapter) || \ - N6C_GET_MP_DRIVER_STATE(__pAdapter) <= MINIPORT_PAUSING || \ - NicIFGetLinkStatus((__pAdapter)) != RT_MEDIA_CONNECT ) - -#define N6SDIO_INC_TX_RESET_COUNT(__pDevice) ++((pDevice)->TxResetCnt) -#define N6SDIO_DEC_TX_RESET_COUNT(__pDevice) --((pDevice)->TxResetCnt) - -#define N6SDIO_CANNOT_RX(__pAdapter) \ - ( (__pAdapter)->bDriverStopped || \ - (__pAdapter)->MgntInfo.bDriverIsGoingToSleep || \ - RT_IS_FUNC_DISABLED((__pAdapter), DF_RX_BIT) || \ - N6C_GET_MP_DRIVER_STATE(__pAdapter) <= MINIPORT_PAUSING ) - - -#if defined(__cplusplus) -extern "C" -{ -#endif - -typedef enum { - SDIO_LOCAL = 0, - SDIO_WLAN_TX_HIQ = 1, - SDIO_WLAN_TX_MIQ = 2, - SDIO_WLAN_TX_LOQ = 3, - SDIO_WLAN_RX_FF = 4, - SDIO_IOREG = 5 -} SDIO_DEVICE_ID; - -NDIS_STATUS -DriverEntry( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath - ); -#if defined(__cplusplus) -}; -#endif - - -NDIS_STATUS -N6SdioInitialize( - IN NDIS_HANDLE MiniportAdapterHandle, - IN NDIS_HANDLE MiniportDriverContext, - IN PNDIS_MINIPORT_INIT_PARAMETERS MiniportInitParameters - ); - -VOID -N6SdioUpdateDefaultSetting( - IN PADAPTER pAdapter - ); - -RT_STATUS -N6SdioDumpDeviceProperty( - IN PRT_SDIO_DEVICE pDevice -); - -NTSTATUS -N6SdioConfigureBusCLKByWorkAround( - IN PRT_SDIO_DEVICE pDevice -); - -NTSTATUS -N6SdioConfigureBusCLK_SDR12( - IN PRT_SDIO_DEVICE pDevice -); - -NTSTATUS -N6SdioConfigureDevice( - IN PRT_SDIO_DEVICE pDevice -); - -RT_STATUS -N6SdioQueryCISArea( - IN PRT_SDIO_DEVICE pDevice - ); - -RT_STATUS -N6SdioFindCisTuple( - IN PRT_SDIO_DEVICE pDevice, - IN u1Byte Tuple, - IN OUT pu4Byte pTupleScanAddress, - OUT pu1Byte pBuffer, - IN OUT pu1Byte pLength - ); - -NTSTATUS -N6SdioInitTxQueue( - IN PADAPTER Adapter -); - -NDIS_STATUS -N6SdioRestart( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_MINIPORT_RESTART_PARAMETERS MiniportRestartParameters - ); - -NDIS_STATUS -N6SdioPause( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_MINIPORT_PAUSE_PARAMETERS MiniportPauseParameters - ); - -VOID -N6SdioShutdown( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_SHUTDOWN_ACTION ShutdownAction - ); - -VOID -N6SdioPnPEventNotify( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNET_DEVICE_PNP_EVENT NetDevicePnPEvent - ); - - -NDIS_STATUS -N6SdioPowerSettingCallback( - IN CONST LPGUID SettingGuid, - IN PULONG Value, - IN ULONG ValueLength, - IN PVOID MiniportAdapterContext - ); - -NDIS_STATUS -N6SdioWLANPowerModeCallback( - IN CONST LPGUID SettingGuid, - IN PULONG Value, - IN ULONG ValueLength, - IN PVOID MiniportAdapterContext - ); - -VOID -N6SdioPowerSettingChangeNotify( - IN PADAPTER Adapter - ); - - -VOID -N6SdioHalt( - IN NDIS_HANDLE MiniportAdapterContext, - IN NDIS_HALT_ACTION HaltAction - ); - -VOID -N6SdioUnload( - IN PDRIVER_OBJECT DriverObject - ); - -NDIS_STATUS -N6SdioOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST NdisRequest - ); - -VOID -N6SdioCancelOidRequest( - IN NDIS_HANDLE hMiniportAdapterContext, - IN PVOID RequestId - ); - -NDIS_STATUS -N6SdioSetOptions( - IN NDIS_HANDLE NdisMiniportDriverHandle, - IN NDIS_HANDLE MiniportDriverContext - ); - -VOID -N6SdioSendNetBufferLists( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNET_BUFFER_LIST pNetBufferLists, - IN NDIS_PORT_NUMBER PortNumber, - IN ULONG SendFlags - ); - -BOOLEAN -N6SdioSendSingleNetBufferList( - IN PADAPTER Adapter, - IN PNET_BUFFER_LIST pNetBufferList, - IN BOOLEAN bFromQueue - ); - -BOOLEAN -N6SdioGetPacketBuffers( - IN PADAPTER Adapter, - IN PNET_BUFFER pNetBuffer, - OUT PRT_TCB pTcb - ); - -VOID -N6SdioSendCoalescedNetBuffer( - IN PADAPTER Adapter, - IN PNET_BUFFER pNetBuffer, - OUT PRT_TCB pTcb - ); - -VOID -N6SdioReturnAllPendingTxPackets( - IN PADAPTER pAdapter - ); - -VOID -N6SdioCancelSend( - IN NDIS_HANDLE MiniportAdapterContext, - IN PVOID CancelId - ); - -VOID -N6SdioReturnNetBufferLists( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNET_BUFFER_LIST NetBufferLists, - IN ULONG ReturnFlags - ); - -BOOLEAN -N6SdioCheckForHang( - IN NDIS_HANDLE MiniportAdapterContext - ); - -NDIS_STATUS -N6SdioReset( - IN NDIS_HANDLE MiniportAdapterContext, - OUT PBOOLEAN AddressingReset - ); - - - -// -// NDIS5 Legacy ------------------------------------------------------------------- -// -VOID -N6SdioFill80211PhyAttributes( - IN PADAPTER Adapter, - IN PNDIS_MINIPORT_ADAPTER_NATIVE_802_11_ATTRIBUTES pDot11Attributes - ); - -NDIS_STATUS -N6SdioAllocateNative80211MIBs( - IN PADAPTER Adapter - ); - -VOID -N6SdioFreeNative80211MIBs( - IN PADAPTER Adapter - ); - -NDIS_STATUS -N6SdioReadRegParameters( - IN PRT_SDIO_DEVICE device - ); - -VOID -N6SdioFreeTxQueueRes( - IN PADAPTER pAdapter - ); - -VOID -N6SdioDereferInterface( - IN PRT_SDIO_DEVICE sdiodevice - ); - -VOID -N6SdioFreeDevice( - IN PRT_SDIO_DEVICE usbdevice - ); - -VOID -N6SdioCancelAllTimer( - IN PADAPTER Adapter - ); - -VOID -N6SdioFreeAll( - IN PADAPTER Adapter - ); - -VOID -N6SdioStartTxQueue( - IN PADAPTER pAdapter, - IN int nTxQueueIdx - ); - -VOID -N6SdioStopTxQueue( - IN PADAPTER pAdapter, - IN int nTxQueueIdx - ); - -NDIS_STATUS -N6SdioAllocateRxNetBufferListPool( - IN PADAPTER Adapter - ); - -VOID -N6SdioFreeRxNetBufferListPool( - IN PADAPTER Adapter - ); - -VOID -N6SdioEnableDeviceInterrupt( - IN PADAPTER Adapter -); - -VOID -N6SdioDisableDeviceInterrupt( - IN PADAPTER Adapter -); - -VOID -PnpWorkItemCallback( - IN PVOID pContext); - -#if POWER_MAN -NDIS_STATUS -N6Sdio_Mgnt_SetPower( - PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesNeeded, - OUT PULONG BytesRead -); -#endif - -VOID -N6SdioCleanUpInitializedResourcesEx( - IN PADAPTER Adapter, - IN RES_MON_OBJ ResMonObj - ); - - -VOID -N6SdioCleanUpInitializedResources( - IN PADAPTER Adapter, - IN RM_RES_TYPE ResType - ); - -VOID -FillPnpCapabilities( - IN PADAPTER pAdapter, - IN OUT PNDIS_PNP_CAPABILITIES pPnpCapabilities - ); - -VOID -FillPmCapabilities( - IN PADAPTER pAdapter, - IN OUT PNDIS_PM_CAPABILITIES pPmCapabilities -); - -VOID -N6SdioAllocRes( - IN PADAPTER Adapter - ); - -VOID -N6SdioFreeRes( - IN PADAPTER Adapter - ); - -// TODO: add for WDI - -NDIS_STATUS -N6sdioAllocateAdapter( - OUT PADAPTER *pAdapter, - IN NDIS_HANDLE MiniportAdapterHandle - ); - -RT_STATUS -N6SdioSyncCurrentSdBusClk( - IN PRT_SDIO_DEVICE pDevice -); - -VOID -N6SdioDummyIO( - IN PRT_SDIO_DEVICE pDevice -); - -#endif // #ifndef __INC_N6SDIO_MAIN_H - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_mechanism.c b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_mechanism.c deleted file mode 100644 index ead7cce6..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_mechanism.c +++ /dev/null @@ -1,5 +0,0 @@ -#include "Mp_Precomp.h" - -//Isaiah move Dynamic Mechanism to HAL - - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_typedef.h b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_typedef.h deleted file mode 100644 index b2792962..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/N6Sdio_typedef.h +++ /dev/null @@ -1,544 +0,0 @@ -#ifndef __INC_N6SDIO_TYPEDEF_H -#define __INC_M6SDIO_TYPEDEF_H - - -/*++ - -Copyright (c) 2012 Realtek Semiconductor Corporation - -Module Name: - usb.h - -Abstract: - Miniport generic portion header file - Roger 2012.01.19 - -*/ - - -#undef RTL8187_FPGA_CODE - -//--- Annie for NDIS6 EXPR, 2006-09-11. --- -#ifdef NDIS60_MINIPORT -#define NDIS_MAJOR_VERSION 6 -#define NDIS_MINOR_VERSION 0 -#define NDIS_MINOR_VERSION_2 20 -#define NDIS_MINOR_VERSION_3 30 -#define NDIS_MINOR_VERSION_4 40 -#define NDIS_MINOR_VERSION_5 50 - -#define DRIVER_MAJOR_VERSION 1 -#define DRIVER_MINOR_VERSION 0 -#endif - -#ifndef MIN -#define MIN(a, b) ((a) > (b) ? b: a) -#endif - - -//-------------------------------------- -// Macros specific to miniport adapter structure -//-------------------------------------- -#define MP_SET_PACKET_RFD(_p, _rfd) *((PRT_RFD *)&(_p)->MiniportReserved[1]) = _rfd -#define MP_GET_PACKET_RFD(_p) *((PRT_RFD *)&(_p)->MiniportReserved[1]) - -#define MP_SET_PACKET_RFD_RESERVED_0(_p, _rfd) *((PWDI_FRAME_METADATA *)&(_p)->MiniportReserved[0]) = _rfd -#define MP_GET_PACKET_RFD_RESERVED_0(_p) *((PWDI_FRAME_METADATA *)&(_p)->MiniportReserved[0]) - -#define MAKE_DRIVER_VERSION(_MainVer,_MinorVer) ((((ULONG)(_MainVer))<<16)+_MinorVer) -#define NIC_VENDOR_DRIVER_VERSION MAKE_DRIVER_VERSION(0,001) - -// The CheckForHang intervals before we decide the send is stuck -#define NIC_SEND_HANG_THRESHOLD 4 - -#define MAX_NUM_PIPES 15 - - -#if USE_WDF_USB - -// -// Obtain desired GUID for SSNDIS miniport binding, added by Roger, 2010.03.23. -// -DEFINE_GUID(GUID_KMDFIDLER_INTERFACE_STANDARD, -0xefad15a2, 0xa6f8, 0x4e60, 0x99, 0xc7, 0x2b, 0x92, 0x62, 0x4d, 0xdc, 0x25); -// {EFAD15A2-A6F8-4e60-99C7-2B92624DDC25} - - -typedef -VOID -(*PF_STOP_IDLE)( - PVOID Context - ); - -typedef -VOID -(*PF_RESUME_IDLE)( - PVOID Context - ); - -typedef -VOID -(*PF_GET_IDLER_ENABLE_CNT)( - PVOID Context, - PUCHAR RefCnt - ); - -typedef -VOID -(*PF_GET_IDLER_PWR_STATE)( - PVOID Context, - PDEVICE_POWER_STATE pDevPwrState, - PSYSTEM_POWER_STATE pSysPwrState - ); - -typedef -VOID -(*SS_POWER_STATE_CHANGE_CALLBACK)( - PVOID Context, - PDEVICE_POWER_STATE pDevPwrState, - PSYSTEM_POWER_STATE pSysPwrState - ); -typedef -VOID -(*PF_GET_IDLER_WAKEUP_CNT)( - PVOID Context, - PUCHAR WakeupComplete - ); - -// -// Interface function handler which SSNDIS stack exported, added by Roger, 2010.03.23. -// -typedef struct _KMDFIDLER_INTERFACE_STANDARD { - INTERFACE InterfaceHeader; - PF_STOP_IDLE StopIdle; // WDF stop idle exported handler. - PF_RESUME_IDLE ResumeIdle; // WDF resume idle exported handler. - PF_GET_IDLER_ENABLE_CNT IdlerRefCnt; //Current idler enable counter. - PF_GET_IDLER_PWR_STATE IdlerPwrState; // Current drvier stack power stack. - PF_GET_IDLER_WAKEUP_CNT IdlerWakeupCnt; -} KMDFIDLER_INTERFACE_STANDARD, *PKMDFIDLER_INTERFACE_STANDARD; - -#endif - -// -// The number of Async SDIO IO Write Block. Revised by Roger, 2011.12.30. -// -#define MAX_AWB_DATA_SIZE 768 - -typedef struct _RT_AWB -{ - RT_LIST_ENTRY List; - u4Byte Offset; - u2Byte ByteCnt; - u1Byte DataBuf[MAX_AWB_DATA_SIZE]; -#if RTL8723_SDIO_IO_THREAD_ENABLE - u1Byte DeviceID; - u1Byte FuncNum; -#endif -}RT_AWB, *PRT_AWB; - -// -// The platform extension of RT_WORK_ITEM. It is platform dependent. -// 2006.09.28, by shien chang. -// -typedef struct _PLATFORM_EXT { - NDIS_EVENT Event; // Event used to handle driver unload. - NDIS_SPIN_LOCK Lock; // Lock to protect object of this class. -} PLATFORM_EXT, *PPLATFORM_EXT; - - -// Manufacturer ID tuple, added by Roger, 2011.10.10. -typedef struct _SDIO_MANFID_TPL { - u2Byte ManufacturerCode; // Manufacture code - u2Byte ManufacturerInfo; // manufacturer information -}SDIO_MANFID_TPL, *PSDIO_MANFID_TPL; - - -#define MAX_MCAST_LIST_NUM 32 // multicast list size - -// -// Resource monitor for driver initialization. 2007.02.02, by shien chang. -// -typedef enum _RM_RES_TYPE { - InitRM_Undefined, - InitRM_AllocAdapter, // 0x1 - InitRM_AllocRxNBLPool, - InitRM_SpinLock, - InitRM_AWBs, - InitRM_AsocNIC, // 0x5 - InitRM_AllocMem, - InitRM_SdioInit, - InitRM_SdioTxRes, - InitRM_N62CInit, //added for SDIO WDI - InitRM_AllocNWifi, // 0xa - InitRM_AllocSdioRes, - InitRM_BTIODevice, - InitRM_CommonRS, - InitRM_MaxResItems, -} RM_RES_TYPE, *PRM_RES_TYPE; - -typedef struct _RES_MON_OBJ { - u1Byte nResToCheck; - RM_RES_TYPE ResItems[InitRM_MaxResItems]; -} RES_MON_OBJ, *PRES_MON_OBJ; - -#define INIT_RES_MON_OBJ(MonObj) \ - (MonObj).nResToCheck = 0; -#define ADD_RES_TO_MON(MonObj, ResToMon) \ - (MonObj).ResItems[(MonObj).nResToCheck++] = ResToMon; -#define CLEANUP_RES_IN_MON(MonObj, Adapter) \ - { \ - u1Byte ResIndexPlueOne=0; \ - for (ResIndexPlueOne=(MonObj).nResToCheck; \ - ResIndexPlueOne != 0; \ - ResIndexPlueOne --) \ - { \ - N6SdioCleanUpInitializedResources(Adapter, (MonObj).ResItems[ResIndexPlueOne-1]); \ - } \ - (MonObj).nResToCheck = 0; \ - } - - -#define SDRP_MAX_ERROR_RETRY_CNT 3 // SDRP retry count - -// -// SDbus request packet error handling type. -// -typedef enum _SDRP_ERROR_HANDLING_TYPE{ - SDRP_ERROR_RETRY = 0, - SDRP_ERROR_SKIP = 1, - SDRP_ERROR_SURPRISE_REMOVED = 2, -}SDRP_ERROR_HANDLING_TYPE, *PSDRP_ERROR_HANDLING_TYPE; - - -// -// SDIO Two direction transfer type. -// -typedef enum _RF_SDIO_TRANSFER_TYPE{ - SDIO_TRANSFER_TX = 0, - SDIO_TRANSFER_RX = 1, -}RF_SDIO_TRANSFER_TYPE, *PRF_SDIO_TRANSFER_TYPE; - -// -// SDIO SdSubmit Time Record. -// -typedef struct _RT_SDIO_BUS_TIME_RECORD -{ - u8Byte AbTime; - LARGE_INTEGER SdBusWorkDuration; -} RT_SDIO_TIME_R, *PRT_SDIO_TIME_R; - -// -// SDIO Data Transfer Queue information for Tx. -// -typedef struct _RT_SDIO_TX_QUEUE -{ - u4Byte TransferType; // 0:Transfer Tx, 1:Transfer Rx - RT_LIST_ENTRY ContextBusyList; // A link list to keep the USB_OUT_CONTEXT pending in USBD. We can canceled the IRP sent via enumerate the list. - u4Byte IrpPendingCount; // Initialize as 1, +1 when we send a IRP down, -1 if the IRP completed. - NDIS_EVENT AllIrpReturnedEvent; // Event used to signal MiniportHalt if it is waiting for all IRP pending on this pipe completed. - BOOLEAN bStalled; // TRUE if this queue is stalled - BOOLEAN bEnabled; // TRUE if this pipe is in active state, false otherwise. -} RT_SDIO_TX_QUEUE, *PRT_SDIO_TX_QUEUE; - - -// -// SDIO Data Transfer Queue information for Tx. -// -typedef struct _RT_SDIO_RX_QUEUE -{ - u4Byte TransferType; // 0:Transfer Tx, 1:Transfer Rx - RT_LIST_ENTRY ContextBusyList; // A link list to keep the USB_IX_CONTEXT pending in USBD. - int IrpPendingCount; // Initialize as 1, +1 when we send a IRP down, -1 if the IRP completed. - NDIS_EVENT AllIrpReturnedEvent; // Event used to signal MiniportHalt if it is waiting for all IRP pending on this pipe completed. - u4Byte RestartPeriod; // In ms. - BOOLEAN bEnabled; // TRUE if this pipe is in active state, false otherwise. -}RT_SDIO_RX_QUEUE, *PRT_SDIO_RX_QUEUE; - -typedef struct _RT_SDIO_DEVICE { - // NDIS handles - NDIS_HANDLE hNdisAdapter; //NDISMiniportAdapterHandle - NDIS_HANDLE hNdisConfiguration; - - // related device objects - PDEVICE_OBJECT pPhysDevObj; - PDEVICE_OBJECT FunctionalDeviceObject; - PDEVICE_OBJECT pSdioDevObj; // next device object - SDBUS_INTERFACE_STANDARD Sdbusinterface; //structure holds pointers to the SD bus interface routines - - s1Byte NextDeviceStackSize; - - //3 SDIO related Bus info and properitie. - u1Byte SdioFuncNum; // Function number on SD card - u2Byte SdioBusDriverVer; - u1Byte SdioRevNum; // CCCRx Format Version Number and SDIOx Specification Revision Number. - u1Byte SdioFormatVer; // SD Format Version Number. - u2Byte SdioFuncType; - u1Byte SdioBusWidth; - u4Byte SdioBusClk; - u2Byte SdioHostBlockSize; // Maximum block length that is supported by the controller - u2Byte SdioFuncBlockSize; - u4Byte SdioRxSeqNum; - u4Byte SdioCommonCISPtr; - u1Byte SdioRegDbgCtrl; - - BOOLEAN SdioTxBlockMode; - BOOLEAN SdioRxBlockMode; - BOOLEAN IoRegDirectAccess; - - // SDIO Card Metaformat for CIS - SDIO_MANFID_TPL Sdiomanfid; // Manufacture Identification String Tuple - u2Byte SDIO_ManufacturerCode; //Manufacture Code - u2Byte SDIO_ManufacturerInfo; //manf-specific ID - - PVOID pAdapter; - //enum _PLATFORM_NDIS_VERSION NdisVersion; - - NDIS_SPIN_LOCK SpinLock; - NDIS_SPIN_LOCK TxSpinLock; - NDIS_SPIN_LOCK RxSpinLock; - NDIS_SPIN_LOCK RxControlSpinLock; - NDIS_SPIN_LOCK RxQueueSpinLock; - NDIS_SPIN_LOCK RmSpinLock; // For RT_RM_SPINLOCK, Radio Measurement spinlock. - NDIS_SPIN_LOCK RxRefCntSpinLock; - NDIS_SPIN_LOCK CamSpinLock; // For RT_CAM_SPINLOCK, 87B CAM and Tx stuck issue. 2006-07-17. - NDIS_SPIN_LOCK ScanSpinLock; // For scan, 2006.12.08, by shien chang. - NDIS_SPIN_LOCK LogSpinLock; // For driver log mechanism, 070301, by rcnjko. - NDIS_SPIN_LOCK BwSpinLock; // For Bandwidth Switching, 070608, by Joseph. - NDIS_SPIN_LOCK ChnlOpSpinLock; - NDIS_SPIN_LOCK RFWriteSpinLock; - NDIS_SPIN_LOCK H2CSpinLock;// For H2C. Added by tynli. - NDIS_SPIN_LOCK BTDataSpinLock; // For BT Data, 2010 01.23 by cosa - NDIS_SPIN_LOCK GenBufSpinLock; //General puporse templorary buffer link list lock - - - // Ndis 6.2 Releated Lock - NDIS_SPIN_LOCK PortLock; // For New Port, 080418, by Maddest - - NDIS_SPIN_LOCK InitialSpinLock;// For Initialize 2007.11.5 by cosa - NDIS_SPIN_LOCK RFStateSpinLock; // For set RF on/off - - NDIS_SPIN_LOCK WapiOptionSpinLock;// For wapi 2009.05.21 by sherry - NDIS_SPIN_LOCK WapiRxSpinLock;// For wapi 2009.05.21 by sherry - NDIS_SPIN_LOCK BufferSpinLock; // For NetBufferLists - NDIS_SPIN_LOCK FwPSSpinLock; // For LPS 32k. by tynli. - NDIS_SPIN_LOCK MptWorkItemSpinLock; // For MP, 20120321 by Kordan - NDIS_SPIN_LOCK P2PSpinLock; // Protect P2P context. - NDIS_SPIN_LOCK ndisDbgWorkItemSpinLock; // 20120525 by cosa - NDIS_SPIN_LOCK IQKSpinLock; // For IQK. 20130807, Added by VincentL. - NDIS_SPIN_LOCK DynTxPwrTblSpinLock; - NDIS_SPIN_LOCK PendedOidSpinLock;// Synchronization method for OID pending, added by Roger, 2013.07.11. - NDIS_SPIN_LOCK ChnlListSpinLock; - NDIS_SPIN_LOCK IndicSpinLock; // Protect indic context. - NDIS_SPIN_LOCK RfdSpinLock; - -#if (AUTO_CHNL_SEL_NHM == 1) - NDIS_SPIN_LOCK AcsSpinLock; // Auto Channel Select -#endif - -#if DRV_LOG_REGISTRY - NDIS_SPIN_LOCK DrvStateSpinLock; -#endif - - NDIS_SPIN_LOCK CustomScanSpinLock; - - u4Byte Flags; - - // Tx related. - PNET_BUFFER_LIST SendingNetBufferList; // Pointer to the NBL working in N6SdioSendSingleNetBufferList(). - BOOLEAN bWaitingSendingNBL; // TRUE if one thread is waiting evtSendingNBLCompleted. - NDIS_EVENT evtSendingNBLCompleted; // Event is signaled when the NBL, SendingNetBufferList, is completed during driver halt/reset. - u4Byte TxResetCnt; // # of thread doing N6SdioReturnAllPendingTxPackets(). - - // Rx releated. - int nMaxBulkInCnt; // Number of Bulk in issued at initialization, it shall falls in [1,# of RFD allocated]. - NDIS_HANDLE RxNetBufferListPool; - - // SDIO Tx Queue related information. - PRT_SDIO_TX_QUEUE RtTxQueue; // A ring of Tx queues. - int RtNumTxQueue; // Number of Tx queue in the ring - - // SDIO Rx Queue related information. - int RtNumRxQueue; // Number of Rx queues in the ring - - // LED. - BOOLEAN bRegLedCtrl; - - BOOLEAN bNdisStatusIndicated; - u2Byte NdisStatusIndicateCount; - - //---------------------------------------------------------------------------- - // IO Method Related. 2005.01.06, by rcnjko. - NDIS_SPIN_LOCK IrpSpinLock; // To make sure at most one IRP sent to USB host driver. - NDIS_SPIN_LOCK AwbSpinLock; - NDIS_SPIN_LOCK HwTimerSpinLock; - NDIS_SPIN_LOCK SyncIoCntSpinLock; // For Sync IO count. 2014.10.02, by tynli. - - // Tx related Semaphore - PlatformSemaphore TxSemaphore; - -#if RTL8723_SDIO_IO_THREAD_ENABLE - // IO related Semaphore - PlatformSemaphore IOSemaphore; -#endif - - int nIrpPendingCnt; // #IRP pending in USB host, it MUST be protected by IrpSpinLock. - RT_LIST_ENTRY AwbIdleQueue; // Queue for non-used AWBs. - RT_LIST_ENTRY AwbWaitQueue; // Queue for AWB waiting to be sent down. - u4Byte NumAwb; // #Awb allocated - PVOID AwbBuffer; // Pointer to the block of memory for AWBs. - u4Byte AwbBufferSize; // Size of AwbBuffer. - u4Byte NumIdleAwb; // Num of idle Awb - u4Byte NumWaitAwb; // Num of waiting Awb - - // SyncIo Method 2. -// BOOLEAN bSyncIoWaiting; // Indicate if one or more Sync IO are waitting. - int SyncIoWaitingCount; - KEVENT SyncIoEvent; // Event used to notify the waiting Sync IO. - int nIoStuckCnt; // # of IO stuck. - int SyncIoInProgressCount; - - NDIS_EVENT AllCtrlTransCompleteEvent; - - PIRP pAsynIoWriteIrp; - PSDBUS_REQUEST_PACKET pAsynIoWriteSdrp; - PMDL pAsynIoWriteMDL; - NDIS_EVENT AllAsynIoIrpReturnedEvent; - u1Byte AsynIoIrpPendingCount; - BOOLEAN bAsynIoWritePending; - u4Byte AsynIoWriteOffset; - u2Byte AsynIoWriteByteCnt; - u1Byte AsynIoWriteDataBuf[MAX_AWB_DATA_SIZE]; - //---------------------------------------------------------------------------- -#if 0 - // e.g. IO monitor. 2005.04.21, by rcnjko. - RT_8187DBG_CONTEXT DbgCtx; -#endif -#if USE_WDF_SDIO - // - // Handles for WDF SDIO. - // - WDFDEVICE hWdfDevice; -#endif - - -#if POWER_MAN - // @@@ 20061205 david power management - RT_WORK_ITEM PnpWorkItem; - NDIS_DEVICE_POWER_STATE CurrentPowerState; -#endif //power_man - - BOOLEAN bSupportRemoteWakeUp; - - // 2011/09/07 MH Add for differen channel plan tx power offset. - u4Byte RegGainOffsetFCCLow; - u4Byte RegGainOffsetFCC; - u4Byte RegGainOffsetFCCHigh; - u4Byte RegGainOffsetMKKLow; - u4Byte RegGainOffsetMKK; - u4Byte RegGainOffsetMKKHigh; - u4Byte RegGainOffsetETSILow; - u4Byte RegGainOffsetETSI; - u4Byte RegGainOffsetETSIHigh; - - // 2011/11/25 MH Add for Sercom requirement temporarily. - u1Byte RegInPipeCnt; - - - // For Usb selective suspend feature, 2009.07.03. - BOOLEAN RegUsbSS; - // - // Fix Bug Check code 0x1d(i.e., NIC might be unplugged - // before system resume or under initialization). 2009.09.24. - // - NDIS_EVENT SetPnpChkForHangEvent; - BOOLEAN bChkForHangAfterPnP; - DEVICE_POWER_STATE DevPwrState; - - u4Byte DeviceAddress; - u4Byte InterfaceIndex; - - // SDIO SD Request reference control - NDIS_EVENT AllSdioCmdReturnedEvent; - u4Byte SdioCmdRefCnt; // Number of SDIO CMD we submitted. - - // SDIO submit failure count - u2Byte FailureCount; - - // - BOOLEAN bSdioBusClkRaised; - - NDIS_EVENT FwPsClockOffEvent; - - // SDIO Rx transfer handling - BOOLEAN bStopRxTransfer; - u4Byte SdioRxTransInProgressCnt; - NDIS_EVENT AllSdioRxTransCompleteEvent; - - // SDIO Host Compatibility Conrtol - BOOLEAN bRegSdioSpeedSDR25; // Set SDIO bus speed to 0: 25MHz, 1: 50MHz - BOOLEAN bRegSdioDrivingEnable; // Enable/Disable Custom Driving Setting - u1Byte RegSdioDriving; - BOOLEAN bRegSurpriseRemovedEnable; // Enable/Disable SurprisedRemove while facing I/O error - - // HostBus Working Time Measurement. - u1Byte BusTimeRecordIndex; - RT_SDIO_TIME_R SdBusSubmitTime[7]; - LARGE_INTEGER PnPSdBusWorkTime; - -#if (RK_PLATFORM_SUPPORT == 1) - // Mutex for handling SDIO Rx interrupt routine - PlatformMutex RxHandleIntMutex; -#endif - -} RT_SDIO_DEVICE , *PRT_SDIO_DEVICE ; - -#define GET_RT_SDIO_DEVICE(__pAdapter) (&((__pAdapter)->NdisSdioDev)) - -// -// Keep the number of SDIO CMDs we have already schedled to the SDBus. Added by Roger, 2011.04.01. -// 2011.04.01. -// -#define RT_SDIO_INC_CMD_REF(__pDevice) ((__pDevice)->SdioCmdRefCnt++) -#define RT_SDIO_DEC_CMD_REF(__pDevice) (((__pDevice)->SdioCmdRefCnt>0)?((__pDevice)->SdioCmdRefCnt--):((__pDevice)->SdioCmdRefCnt=0)) -#define RT_SDIO_GET_CMD_REF(__pDevice) ((__pDevice)->SdioCmdRefCnt) - -// -// Record the number of SDIO Rx transfer that is going to submit to SDbus. Added by tynli. 2014.11.19. -// Default is set to 1 for the purpose of event wait in disable transfer function. -// -#define RT_SDIO_INC_RX_TRANS_REF(__pDevice) ((__pDevice)->SdioRxTransInProgressCnt++) -#define RT_SDIO_DEC_RX_TRANS_REF(__pDevice) (((__pDevice)->SdioRxTransInProgressCnt>0)?((__pDevice)->SdioRxTransInProgressCnt--):((__pDevice)->SdioRxTransInProgressCnt=0)) -#define RT_SDIO_GET_RX_TRANS_REF(__pDevice) ((__pDevice)->SdioRxTransInProgressCnt) - -// -// Retrieve specific SDIO Queue IRP pending count. Added by Roger, 2011.02.09. -// -#define GET_IRP_PENDING_CNT_WITH_TX_QUEUE_IDX(__pAdapter, __IdxQueue) \ - GET_RT_SDIO_DEVICE(__pAdapter)->RtTxQueue[__IdxQueue].IrpPendingCount - -// -// Retrieve SDIO Rx sequence number -// -#define RT_SDIO_GET_RX_SEQ_NUM(__pAdapter)\ - GET_RT_SDIO_DEVICE(__pAdapter)->SdioRxSeqNum - -// -// Increase SDIO Rx sequence number -// -#define RT_SDIO_INC_RX_SEQ_NUM(__pAdapter)\ -{ \ - if(GET_RT_SDIO_DEVICE(__pAdapter)->SdioRxSeqNum == 0xffffffff)\ - GET_RT_SDIO_DEVICE(__pAdapter)->SdioRxSeqNum = 0;\ - else\ - GET_RT_SDIO_DEVICE(__pAdapter)->SdioRxSeqNum++;\ -} - -// -// Reset SDIO Rx sequence number -// -#define RT_SDIO_RESET_RX_SEQ_NUM(__pAdapter)\ -{\ - GET_RT_SDIO_DEVICE(__pAdapter)->SdioRxSeqNum = 0;\ -} - -#endif // #ifndef __INC_N6SDIO_TYPEDEF_H diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n60_sdio.inc b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n60_sdio.inc deleted file mode 100644 index aec6c32b..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n60_sdio.inc +++ /dev/null @@ -1,13 +0,0 @@ -INCLUDES=$(INCLUDES) \ - $(SRC_ROOT)\Platform\NdisComm; \ - $(SRC_ROOT)\Platform\NDIS6; \ - $(SRC_ROOT)\Platform\NDIS6\SDIO; \ - $(DDK_INC_PATH); \ - $(DDK_INC_PATH)\wdm; - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -C_DEFINES=$(C_DEFINES) -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - -RUN_WPP=$(SOURCES) -km -func:RT_TRACE(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_F(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_MAC(COMPID,LEVEL,(MSG,...)) - -KMDF_VERSION=1 diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n62_sdio.inc b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n62_sdio.inc deleted file mode 100644 index 6775d726..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n62_sdio.inc +++ /dev/null @@ -1,13 +0,0 @@ -INCLUDES=$(INCLUDES) \ - $(SRC_ROOT)\Platform\NdisComm; \ - $(SRC_ROOT)\Platform\NDIS6; \ - $(SRC_ROOT)\Platform\NDIS6\SDIO; \ - $(DDK_INC_PATH); \ - $(DDK_INC_PATH)\wdm; - -C_DEFINES=$(C_DEFINES) -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -DNDIS62_MINIPORT=1 -DNDIS61_MINIPORT=1 -C_DEFINES=$(C_DEFINES) -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - -RUN_WPP=$(SOURCES) -km -func:RT_TRACE(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_F(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_MAC(COMPID,LEVEL,(MSG,...)) - -KMDF_VERSION_MAJOR=1 diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n6c_sdio.inc.props b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n6c_sdio.inc.props deleted file mode 100644 index 95559b3c..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/n6c_sdio.inc.props +++ /dev/null @@ -1,30 +0,0 @@ - - - - - $(INCLUDES) - $(SRC_ROOT)\Platform\NdisComm; - $(SRC_ROOT)\Platform\NDIS6; - $(SRC_ROOT)\Platform\NDIS6\SDIO; - $(WDKContentRoot)\Include\KM; - $(WDKContentRoot)\Include\KM\wlan\1.0; - - - 1 - - 7 - 9 - 11 - - 11 - 13 - - -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -DNDIS61_MINIPORT=1 -DNDIS620_MINIPORT=1 -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -DNDIS61_MINIPORT=1 -DNDIS620_MINIPORT=1 -DNDIS630_MINIPORT=1 -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -DNDIS61_MINIPORT=1 -DNDIS620_MINIPORT=1 -DNDIS630_MINIPORT=1 -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - -DNDIS_MINIPORT_DRIVER -DNDIS60_MINIPORT=1 -DNDIS61_MINIPORT=1 -DNDIS620_MINIPORT=1 -DNDIS630_MINIPORT=1 -DNDIS640_MINIPORT=1 -DNDIS650_MINIPORT=1 -DBINARY_COMPATIBLE=0 -DUSE_KLOCKS=1 - - $(SOURCES) -km -func:RT_TRACE(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_F(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_EX(COMPID,LEVEL,(MSG,...)) -func:RT_TRACE_MAC(COMPID,LEVEL,(MSG,...)) -scan:$(SRC_ROOT)\HEADER\rtwlanwpp.h - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlans.rc b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlans.rc deleted file mode 100644 index b2d7ef47..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlans.rc +++ /dev/null @@ -1,48 +0,0 @@ -/*++ - -Copyright (c) 2011 Realtek Semiconductor Corporation. - -Module Name: - - rtwlans.rc - -Abstract: - - Internal resource file for filter. - ---*/ - -#include -#include -#include "..\..\svn_version.h" - -// Undefine the MS company name -#ifdef VER_COMPANYNAME_STR -#undef VER_COMPANYNAME_STR -#endif - -#define VER_FILETYPE VFT_DRV -#define VER_FILESUBTYPE VFT2_DRV_NETWORK - -#define VER_FILEDESCRIPTION_STR "Realtek WLAN SDIO NDIS Driver " SVN_VERSION_STR - -#define VER_INTERNALNAME_STR "rtwlans.sys " -#define VER_ORIGINALFILENAME_STR "rtwlans.sys " -#undef VER_PRODUCTNAME_STR -#define VER_PRODUCTNAME_STR "Realtek WLAN Wireless SDIO Adapter " - -// Also need to change "NIC_VENDOR_DRIVER_VERSION" in Mp_def.h (about in line 51) -#define VER_FILEVERSION 3008,22,1030,2015 -#define VER_FILEVERSION_STR "3008.22.1030.2015" - -#undef VER_PRODUCTVERSION -#define VER_PRODUCTVERSION VER_FILEVERSION - -#undef VER_PRODUCTVERSION_STR -#define VER_PRODUCTVERSION_STR VER_FILEVERSION_STR - -#define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2011 Realtek Semiconductor Corporation " -#define VER_COMPANYNAME_STR "Realtek Semiconductor Corporation " - -#include "common.ver" - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlansmp.rc b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlansmp.rc deleted file mode 100644 index 6849e444..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/rtwlansmp.rc +++ /dev/null @@ -1,48 +0,0 @@ -/*++ - -Copyright (c) 2011 Realtek Semiconductor Corporation. - -Module Name: - - rtwlans.rc - -Abstract: - - Internal resource file for filter. - ---*/ - -#include -#include -#include "..\..\svn_version.h" - -// Undefine the MS company name -#ifdef VER_COMPANYNAME_STR -#undef VER_COMPANYNAME_STR -#endif - -#define VER_FILETYPE VFT_DRV -#define VER_FILESUBTYPE VFT2_DRV_NETWORK - -#define VER_FILEDESCRIPTION_STR "Realtek WLAN SDIO NDIS Driver (Mass Production Test) " SVN_VERSION_STR - -#define VER_INTERNALNAME_STR "rtwlansmp.sys " -#define VER_ORIGINALFILENAME_STR "rtwlansmp.sys " -#undef VER_PRODUCTNAME_STR -#define VER_PRODUCTNAME_STR "Realtek WLAN Wireless SDIO Adapter (Mass Production Test) " - -// Also need to change "NIC_VENDOR_DRIVER_VERSION" in Mp_def.h (about in line 51) -#define VER_FILEVERSION 1001,1061,0625,2015 -#define VER_FILEVERSION_STR "1001.1061.0625.2015" - -#undef VER_PRODUCTVERSION -#define VER_PRODUCTVERSION VER_FILEVERSION - -#undef VER_PRODUCTVERSION_STR -#define VER_PRODUCTVERSION_STR VER_FILEVERSION_STR - -#define VER_LEGALCOPYRIGHT_STR "Copyright (C) 2011 Realtek Semiconductor Corporation " -#define VER_COMPANYNAME_STR "Realtek Semiconductor Corporation " - -#include "common.ver" - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sdio.vcxproj b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sdio.vcxproj deleted file mode 100644 index c6089236..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sdio.vcxproj +++ /dev/null @@ -1,751 +0,0 @@ - - - - - Win10 Debug - Arm - - - WinBlue Debug - Arm - - - Win8 Debug - Arm - - - Win10 Release - Arm - - - WinBlue Release - Arm - - - Win8 Release - Arm - - - Win10 Debug - Win32 - - - WinBlue Debug - Win32 - - - Win8 Debug - Win32 - - - Win7 Debug - Win32 - - - Vista Debug - Win32 - - - Win10 Release - Win32 - - - WinBlue Release - Win32 - - - Win8 Release - Win32 - - - Win7 Release - Win32 - - - Vista Release - Win32 - - - Win10 Debug - x64 - - - WinBlue Debug - x64 - - - Win8 Debug - x64 - - - Win7 Debug - x64 - - - Vista Debug - x64 - - - Win10 Release - x64 - - - WinBlue Release - x64 - - - Win8 Release - x64 - - - Win7 Release - x64 - - - Vista Release - x64 - - - - WindowsKernelModeDriver10.0 - Driver - KMDF - rtwlans - Win8 Debug - - - - 1.0 - $(Configuration.Replace(' ','')) - $(BUILD_ALT_DIR)\$(Platform)\ - - - $(SolutionDir)\DrvBin\$(Configuration)\$(Platform) - - - - - - {105EA485-B9B6-48AE-B8B0-96BBEA575973} - - - - - True - Universal - true - - - WindowsV6.3 - True - - - Win8 - True - - - - - False - Universal - - - - - WindowsV6.3 - False - - - Win8 - False - - - Windows10 - True - Universal - - - - - WindowsV6.3 - True - - - Win8 - True - - - Win7 - True - - - Vista - True - - - Windows10 - False - Universal - true - - - WindowsV6.3 - False - - - Win8 - False - - - Win7 - False - - - Vista - False - - - Windows10 - True - Universal - true - - - WindowsV6.3 - True - - - Win8 - True - - - Win7 - True - - - Vista - True - - - Windows10 - False - Universal - true - - - WindowsV6.3 - False - - - Win8 - False - - - Win7 - False - - - Vista - False - - - DbgengKernelDebugger - DbgengRemoteDebugger - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - .sys - $(VC_ReferencesPath_x86); - $(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86); - true - http://timestamp.verisign.com/scripts/timstamp.dll - true - true - false - 10_x86;$(Inf2CatWindowsVersionList) - true - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x86); - $(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86); - true - http://timestamp.verisign.com/scripts/timstamp.dll - .sys - 10_X86;$(Inf2CatWindowsVersionList) - true - - - .sys - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_arm); - $(VC_LibraryPath_arm);$(WindowsSDK_LibraryPath_arm);$(NETFXKitsDir)Lib\um\arm - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_arm); - false - 6_3_ARM;$(Inf2CatWindowsVersionList) - true - http://timestamp.verisign.com/scripts/timstamp.dll - - - .sys - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_arm); - $(VC_LibraryPath_arm);$(WindowsSDK_LibraryPath_arm);$(NETFXKitsDir)Lib\um\arm - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_arm); - false - 6_3_Arm;$(Inf2CatWindowsVersionList) - true - http://timestamp.verisign.com/scripts/timstamp.dll - - - http://timestamp.verisign.com/scripts/timstamp.dll - true - 10_x64;$(Inf2CatWindowsVersionList) - true - .sys - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x64); - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64); - - - .sys - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x64); - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64); - true - 10_x64;$(Inf2CatWindowsVersionList) - true - http://timestamp.verisign.com/scripts/timstamp.dll - - - - $(SolutionDir)COMMON\$(Configuration)\common.lib;$(SolutionDir)PLATFORM\NdisComm\$(Configuration)\NdisComm.lib;$(SolutionDir)\LIB\x86\hal.lib;$(SolutionDir)\LIB\x86\rtklibcom.lib;$(WindowsSDK_LibraryPath_x86)km\x86\ndis.lib;$(WindowsSDK_LibraryPath_x86)km\x86\ntoskrnl.lib;$(WindowsSDK_LibraryPath_x86)km\x86\sdbus.lib;$(WindowsSDK_LibraryPath_x86)km\x86\wlan\1.0\TlvGeneratorParser.lib; - - - - - $(OutDir)$(TargetName)$(TargetExt) - - - - - _X86_;DBG;NDIS60_MINIPORT;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - Cdecl - Default - $(WindowsSdkDir)Include\km\;$(WindowsSdkDir)Include\shared\;$(WindowsSdkDir)Include\wdf\kmdf\1.15\;$(WindowsSdkDir)Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)COMMON\;$(SolutionDir)PLATFORM\NDIS6; - Disabled - Default - false - Neither - false - false - false - true - - - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - true - true - false - false - false - false - false - false - false - false - Prompt - true - true - - - true - false - - - - - $(WindowsSdkDir)Include\km\;$(WindowsSdkDir)Include\shared\;$(WindowsSdkDir)Include\wdf\kmdf\1.15\;$(WindowsSdkDir)Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)COMMON\;$(SolutionDir)PLATFORM\NDIS6; - true - true - Disabled - Default - false - Neither - false - false - false - _X86_;NDIS60_MINIPORT;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - None - - - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)COMMON\$(Configuration)\common.lib;$(SolutionDir)PLATFORM\NdisComm\$(Configuration)\NdisComm.lib;$(SolutionDir)\LIB\x86\hal.lib;$(SolutionDir)\LIB\x86\rtklibcom.lib;$(WindowsSDK_LibraryPath_x86)km\x86\ndis.lib;$(WindowsSDK_LibraryPath_x86)km\x86\ntoskrnl.lib;$(WindowsSDK_LibraryPath_x86)km\x86\sdbus.lib;$(WindowsSDK_LibraryPath_x86)km\x86\wlan\1.0\TlvGeneratorParser.lib; - - - - - - - - - true - - - false - - - - - $(WindowsSdkDir)Include\km\;$(WindowsSdkDir)Include\shared\;$(WindowsSdkDir)Include\wdf\kmdf\1.15\;$(WindowsSdkDir)Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)COMMON\;$(SolutionDir)PLATFORM\NDIS6; - None - true - true - Disabled - Default - false - Neither - false - false - false - _ARM_;NDIS60_MINIPORT;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\common.lib;$(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\NdisComm.lib;$(SolutionDir)\LIB\Arm\hal.lib;$(SolutionDir)\LIB\Arm\rtklibcom.lib;$(WindowsSDK_LibraryPath_arm)km\arm\ndis.lib;$(WindowsSDK_LibraryPath_arm)km\arm\ntoskrnl.lib;$(WindowsSDK_LibraryPath_arm)km\arm\sdbus.lib;$(WindowsSDK_LibraryPath_arm)km\arm\wlan\1.0\TlvGeneratorParser.lib; - - - true - - - false - - - - - $(WindowsSdkDir)Include\km\;$(WindowsSdkDir)Include\shared\;$(WindowsSdkDir)Include\wdf\kmdf\1.15\;$(WindowsSdkDir)Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)COMMON\;$(SolutionDir)PLATFORM\NDIS6; - None - true - true - Disabled - Default - false - Neither - false - false - false - _ARM_;DBG;NDIS60_MINIPORT;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)COMMON\$(Configuration)\common.lib;$(SolutionDir)PLATFORM\NdisComm\$(Configuration)\NdisComm.lib;$(SolutionDir)\LIB\Arm\hal.lib;$(SolutionDir)\LIB\Arm\rtklibcom.lib;$(WindowsSDK_LibraryPath_arm)km\arm\ndis.lib;$(WindowsSDK_LibraryPath_arm)km\arm\ntoskrnl.lib;$(WindowsSDK_LibraryPath_arm)km\arm\sdbus.lib;$(WindowsSDK_LibraryPath_arm)km\arm\wlan\1.0\TlvGeneratorParser.lib; - - - true - - - false - - - - - true - $(WindowsSdkDir)Include\km\;$(WindowsSdkDir)Include\shared\;$(WindowsSdkDir)Include\wdf\kmdf\1.15\;$(WindowsSdkDir)Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)COMMON\;$(SolutionDir)PLATFORM\NDIS6; - None - true - true - Disabled - Default - false - Neither - false - false - false - _X64_;DBG;NDIS60_MINIPORT;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - - - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\common.lib;$(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\NdisComm.lib;$(SolutionDir)\LIB\x64\hal.lib;$(SolutionDir)\LIB\x64\rtklibcom.lib;$(WindowsSDK_LibraryPath_x64)km\x64\ndis.lib;$(WindowsSDK_LibraryPath_x64)km\x64\ntoskrnl.lib;$(WindowsSDK_LibraryPath_x64)km\x64\sdbus.lib;$(WindowsSDK_LibraryPath_x64)km\x64\wlan\1.0\TlvGeneratorParser.lib; - - - true - - - false - - - - - $(WindowsSdkDir)Include\km\;$(WindowsSdkDir)Include\shared\;$(WindowsSdkDir)Include\wdf\kmdf\1.15\;$(WindowsSdkDir)Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)PLATFORM\NDIS6\SDIO;$(SolutionDir)COMMON\;$(SolutionDir)PLATFORM\NDIS6; - None - true - true - Disabled - Default - false - Neither - false - false - false - _X64_;NDIS60_MINIPORT;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\common.lib;$(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\NdisComm.lib;$(SolutionDir)\LIB\x64\hal.lib;$(SolutionDir)\LIB\x64\rtklibcom.lib;$(WindowsSDK_LibraryPath_x64)km\x64\ndis.lib;$(WindowsSDK_LibraryPath_x64)km\x64\ntoskrnl.lib;$(WindowsSDK_LibraryPath_x64)km\x64\sdbus.lib;$(WindowsSDK_LibraryPath_x64)km\x64\wlan\1.0\TlvGeneratorParser.lib; - - - true - - - false - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $(KIT_SHARED_INC_PATH) - true - - - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.lib.list b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.lib.list deleted file mode 100644 index 39cbe9c3..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.lib.list +++ /dev/null @@ -1,14 +0,0 @@ -// -// Command: +(OS, ...) -(OS, ...) [FILE] -// //: Comment at the beginning -// OS: * Ebd6 Ebd7 WinXP Vista Win7 Win8 WinBlue -// +: Add for OS -// -: Remove for OS -// - -+(*) [$(DDK_LIB_PATH)\ndis.lib] -+(*) [$(DDK_LIB_PATH)\ntoskrnl.lib] -+(*) [$(DDK_LIB_PATH)\usbd.lib] -+(*) [$(DDK_LIB_PATH)\sdbus.lib] -+(*) -(WinXP Vista Win7 Win8 WinBlue) [$(DDK_LIB_PATH)\wlan\1.0\TlvGeneratorParser.lib] -+(*) [$(TMP_LIBS)] \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.list b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.list deleted file mode 100644 index 807172af..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.list +++ /dev/null @@ -1,39 +0,0 @@ -// -// Command: +(OS, ...) -(OS, ...) [FILE] -// //: Comment at the beginning -// OS: * Ebd6 Ebd7 WinXP Vista Win7 Win8 WinBlue -// +: Add for OS -// -: Remove for OS -// -+(*) [..\N63C_SendAction.c] -+(*) [..\N63C_Oids.c] -+(*) [..\Ndis6Common.c] -+(*) [..\N6C_Init.c] -+(*) [..\N6C_Req.c] -+(*) [..\N6C_OidQuery.c] -+(*) [..\N6C_OidSet.c] -+(*) [..\N6C_PlatformDef.c] -+(*) [..\N62C_Init.c] -+(*) [..\N62C_Port.c] -+(*) [..\N62C_QueryOID.c] -+(*) [..\N62C_SetOID.c] -+(*) [..\N62C_QuerySetOID.c] -+(*) [..\N62C_AP.c] -+(*) [..\N62C_Oids.c] -+(*) [..\N6C_Oids.c] -+(*) [N6SdioPlatformWindows.c] -+(*) [N6Sdio_PlatformSdioWdm.c] -+(*) [N6Sdio_main.c] -+(*) [N6Sdio_mechanism.c] -+(*) [Mp_Req.c] -+(*) [N6Sdio_DrvIF.c] -+(*) [N6Sdio_dbg.c] -+(*) [N6Sdio_PlatformSdioWdf.c] -+(*) [..\WDI_Common.c] -+(*) [N6Sdio_WdiMain.c] -+(*) [..\WDI_Extension.c] -+(*) [..\WDI_Cmds.c] -+(*) [..\WDI_Xlat.c] -+(*) [..\WDI_SendAction.c] -+(*) [..\new.cpp] -+(*) [$(DRV_RC_FILE)] \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.props b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.props deleted file mode 100644 index 546b648b..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.props +++ /dev/null @@ -1,57 +0,0 @@ - - - - rtwlans - $(SolutionDir)\DrvBin\$(Configuration)\$(Platform)\ - DRIVER - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - $(SRC_ROOT)\Header; - $(SRC_ROOT)\COMMON; - $(HAL_INC_DIRS); - - - $(DDK_LIB_PATH)\ndis.lib - $(DDK_LIB_PATH)\ntoskrnl.lib - $(DDK_LIB_PATH)\usbd.lib - $(DDK_LIB_PATH)\sdbus.lib - $(DDK_LIB_PATH)\wlan\1.0\TlvGeneratorParser.lib - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\common.lib; - $(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\Ndiscomm.lib; - $(SolutionDir)LIB\x86\rtklibcom.lib; - $(SolutionDir)LIB\x86\hal.lib; - $(TMP_LIBS) - - - $(DDK_LIB_PATH)\ndis.lib - $(DDK_LIB_PATH)\ntoskrnl.lib - $(DDK_LIB_PATH)\usbd.lib - $(DDK_LIB_PATH)\sdbus.lib - $(DDK_LIB_PATH)\wlan\1.0\TlvGeneratorParser.lib - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\common.lib; - $(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\Ndiscomm.lib; - $(SolutionDir)LIB\Arm\rtklibcom.lib; - $(SolutionDir)LIB\Arm\hal.lib; - $(TMP_LIBS) - - - $(DDK_LIB_PATH)\ndis.lib - $(DDK_LIB_PATH)\ntoskrnl.lib - $(DDK_LIB_PATH)\usbd.lib - $(DDK_LIB_PATH)\sdbus.lib - $(DDK_LIB_PATH)\wlan\1.0\TlvGeneratorParser.lib - $(SolutionDir)COMMON\$(Configuration)\$(Platform)\common.lib; - $(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\Ndiscomm.lib; - $(SolutionDir)LIB\x64\rtklibcom.lib; - $(SolutionDir)LIB\x64\hal.lib; - $(TMP_LIBS) - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.props b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.props deleted file mode 100644 index 9b0c4e10..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.props +++ /dev/null @@ -1,26 +0,0 @@ - - - - $(DRV_SYS_NAME) - obj - DRIVER - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - $(SRC_ROOT)\Header; - $(SRC_ROOT)\COMMON; - $(HAL_INC_DIRS); - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.win b/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.win deleted file mode 100644 index 8e071f75..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/SDIO/sources.tpl.win +++ /dev/null @@ -1,31 +0,0 @@ -TARGETNAME=$(DRV_SYS_NAME) -TARGETPATH=obj -TARGETTYPE=DRIVER - -PRECOMPILED_INCLUDE=Mp_Precomp.h -PRECOMPILED_PCH=precomp.pch -PRECOMPILED_OBJ=precomp.obj - -# -# IC dependent directories are defined in -# the environment variable HAL_INC_DIRS. -# -INCLUDES=\ - $(SRC_ROOT)\Header; \ - $(SRC_ROOT)\COMMON; \ - $(HAL_INC_DIRS); \ - $(OMNIPEEK_INC_DIRS); \ - -TARGETLIBS=\ - $(DDK_LIB_PATH)\ndis.lib \ - $(DDK_LIB_PATH)\ntoskrnl.lib \ - $(DDK_LIB_PATH)\usbd.lib \ - $(DDK_LIB_PATH)\sdbus.lib \ - $(TMP_LIBS) - -# -# OS and Bus dependent setting. -# -!include $(SRC_ROOT)\$(PLATFORM_INC) - -SOURCES = \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.c b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.c deleted file mode 100644 index d1005a4b..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.c +++ /dev/null @@ -1,5744 +0,0 @@ -#include "MP_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "WDI_Cmds.tmh" -#endif - -#include "P2P_Internal.h" - -#include "WDI_Cmds.h" -#include "WDI_Xlat.h" - - -static u1Byte BroadcastAddress[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - -static -VOID -wdi_task_WriteResult( - IN RT_OID_HANDLER *hTask, - IN UINT8 *tlv, - IN ULONG tlvlen, - IN NDIS_STATUS status - ) -{ - WDI_MESSAGE_HEADER *hdr = (WDI_MESSAGE_HEADER *)hTask->pInputBuffer; - - hdr->Status = status; - if(tlvlen) - { - NdisMoveMemory((u1Byte *)hdr + sizeof(*hdr), tlv, tlvlen); - } - - hTask->OutputBufferLength = tlvlen; -} - -static -VOID -wdi_ScanCb( - IN CUSTOM_SCAN_STATE state, - IN VOID *pCtx - ) -{ - ADAPTER *pAdapter = (ADAPTER *)pCtx; - - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("%s\n", CustomScan_ScanStateTxt(state))); - - if(CUSTOM_SCAN_STATE_PRE_DESTROY == state) - { - WDI_IndicateScanComplete(pAdapter, RT_STATUS_SUCCESS); - } -} - -static -VOID -wdi_P2PDiscoveryCb( - IN CUSTOM_SCAN_STATE state, - IN VOID *pCtx - ) -{ - ADAPTER *pAdapter = (ADAPTER *)pCtx; - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("%s\n", CustomScan_ScanStateTxt(state))); - - if(CUSTOM_SCAN_STATE_COMPLETED == state) - { - WDI_TASK_P2P_DISCOVER_PARAMETERS *param = hTask->tlvParser.parsedTlv.paramP2pDiscover; - - MGNT_INFO *mgnt = &pAdapter->MgntInfo; - u4Byte it = 0; - - // copy to 4Q - mgnt->NumBssDesc4Query = mgnt->NumBssDesc; - for(it = 0; it < mgnt->NumBssDesc4Query; it++) - { - CopyWlanBss(mgnt->bssDesc4Query + it, mgnt->bssDesc + it); - } - - // copy to cli - if(param && param->Optional.SSIDList_IsPresent) - {// specific peer disocvery - ADAPTER *cli = GetFirstClientPort(pAdapter); - - if(cli && GetDefaultAdapter(pAdapter) != cli) - { - MGNT_INFO *cliMgnt = &cli->MgntInfo; - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("copy %u bss(s) from port %u to cli port\n", mgnt->NumBssDesc4Query, GET_PORT_NUMBER(pAdapter))); - - if(cliMgnt->NumBssDesc4Query < mgnt->NumBssDesc4Query) - { - cliMgnt->NumBssDesc4Query = mgnt->NumBssDesc4Query; - for(it = 0; it < mgnt->NumBssDesc4Query; it++) - { - CopyWlanBss(cliMgnt->bssDesc4Query + it, mgnt->bssDesc4Query + it); - } - } - } - } - } - else if(CUSTOM_SCAN_STATE_PRE_DESTROY == state) - { - WDI_CMD_P2PDiscoverComplete(pAdapter, NDIS_STATUS_SUCCESS); - } - - return; -} - -static -VOID -wdi_ConstructScanReq( - IN ADAPTER *pAdapter, - IN WDI_SCAN_PARAMETERS *param, - OUT VOID *req - ) -{ - RT_SCAN_TYPE scanType = WDI_SCAN_TYPE_PASSIVE_ONLY == param->ScanModeParameters.AllowedScanType ? SCAN_PASSIVE : SCAN_ACTIVE; - u2Byte duration = (u2Byte)(SCAN_ACTIVE == scanType ? param->DwellTime.ActiveChannelDwellTime : param->DwellTime.PassiveChannelDwellTime); - - FunctionIn(COMP_SCAN); - - if(param->Optional.BandChannelList_IsPresent) - { - u4Byte itBand = 0; - u4Byte itChnl = 0; - - for(itBand = 0; itBand < param->BandChannelList.ElementCount; itBand++) - { - for(itChnl = 0; itChnl < param->BandChannelList.pElements[itBand].ChannelList.ElementCount; itChnl++) - { - u1Byte chnl = (u1Byte)param->BandChannelList.pElements[itBand].ChannelList.pElements[itChnl]; - - CustomScan_AddScanChnl(req, chnl, 1, scanType, duration, 0, NULL); - } - } - } - else - { - RT_CHANNEL_DOMAIN domain = GetDefaultAdapter(pAdapter)->MgntInfo.ChannelPlan; - RT_CHANNEL_PLAN *plan = NULL; - - RtActChannelList(pAdapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_PLAN, &domain, &plan); - - CustomScan_AddChnlPlanChnls(req, plan, scanType, duration, 0, NULL); - } - - if(WDI_SCAN_TYPE_PASSIVE_ONLY == param->ScanModeParameters.AllowedScanType) - CustomScan_ForcePassiveScan(req); - - FunctionOut(COMP_SCAN); - - return; -} - -static -VOID -wdi_ConstructP2PSpecificChnlReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_DISCOVER_PARAMETERS *param, - IN FRAME_BUF *probeReq, - OUT VOID *req - ) -{ - RT_SCAN_TYPE scanType = WDI_P2P_SCAN_TYPE_PASSIVE == param->DiscoverMode.ScanType ? SCAN_PASSIVE : SCAN_ACTIVE; - u2Byte duration = (u2Byte)(SCAN_ACTIVE == scanType ? param->DwellTime.ActiveChannelDwellTime : param->DwellTime.PassiveChannelDwellTime); - - if(param->Optional.DiscoveryChannelSettings_IsPresent) - { - u4Byte itSettings = 0; - u4Byte itBand = 0; - u4Byte itChnl = 0; - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("channel setting present\n")); - - for(itSettings = 0; itSettings < param->DiscoveryChannelSettings.ElementCount; itSettings++) - { - WDI_P2P_DISCOVERY_CHANNEL_SETTINGS_CONTAINER *setting = param->DiscoveryChannelSettings.pElements + itSettings; - - for(itBand = 0; itBand < setting->BandChannelList.ElementCount; itBand++) - { - WDI_BAND_CHANNEL_LIST_CONTAINER *band = setting->BandChannelList.pElements + itBand; - - for(itChnl = 0; itChnl < band->ChannelList.ElementCount; itChnl++) - { - WDI_CHANNEL_NUMBER *chnl = band->ChannelList.pElements + itChnl; - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("adding ch: %u for %u ms\n", *chnl, duration)); - CustomScan_AddScanChnl(req, (u1Byte)*chnl, 16, scanType, duration, MGN_6M, probeReq); - } - } - } - } - - return; -} - -static -VOID -wdi_ConstructP2PScanPhaseReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_DISCOVER_PARAMETERS *param, - OUT VOID *req - ) -{ - RT_SCAN_TYPE scanType = WDI_P2P_SCAN_TYPE_PASSIVE == param->DiscoverMode.ScanType ? SCAN_PASSIVE : SCAN_ACTIVE; - u2Byte duration = (u2Byte)(SCAN_ACTIVE == scanType ? param->DwellTime.ActiveChannelDwellTime : param->DwellTime.PassiveChannelDwellTime); - RT_CHANNEL_DOMAIN domain = GetDefaultAdapter(pAdapter)->MgntInfo.ChannelPlan; - RT_CHANNEL_PLAN *plan = NULL; - - RtActChannelList(pAdapter, RT_CHNL_LIST_ACTION_GET_CHANNEL_PLAN, &domain, &plan); - CustomScan_AddChnlPlanChnls(req, plan, scanType, duration, MGN_6M, NULL); - - return; -} - -static -VOID -wdi_ConstructP2PFindPhaseReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_DISCOVER_PARAMETERS *param, - IN FRAME_BUF *probeReq, - OUT VOID *req - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - u2Byte rand = (u2Byte)GetRandomNumber(0, 3); // [0, 1, 2] - - do - { - // listen - CustomScan_AddScanChnl(req, info->ListenChannel, 1, SCAN_PASSIVE, 100 * (rand + 1), 0, NULL); - - // search - CustomScan_AddScanChnl(req, 1, 1, SCAN_ACTIVE, 100, MGN_6M, probeReq); - CustomScan_AddScanChnl(req, 6, 1, SCAN_ACTIVE, 100, MGN_6M, probeReq); - CustomScan_AddScanChnl(req, 11, 1, SCAN_ACTIVE, 100, MGN_6M, probeReq); - - rand = (rand + 1) % 3; - }while(CustomScan_NumAddedChnl(req) < MAX_SCAN_CHANNEL_NUM); - - return; -} - -static -BOOLEAN -wdi_Construct_FakeInvitationRsp( - IN ADAPTER *pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx, - IN const P2P_DEV_LIST_ENTRY *dev, - OUT FRAME_BUF *fbuf - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osWFDIE, osProbeRspPkt; - - FunctionIn(COMP_OID_SET); - - // MAC Header - p2p_add_ActionFrameMacHdr(fbuf, info->DeviceAddress, dev->mac, info->DeviceAddress); - - // Action Header - p2p_add_P2PPublicActionHdr(fbuf, P2P_INVITATION_RSP, ctx->token); - - // P2P IE - p2p_build_FakeInvitationRspIe(fbuf, info, dev->mac); - - // WFD IE, from probe rsp - if(dev->rxFrames[P2P_FID_PROBE_RSP] && dev->rxFrames[P2P_FID_PROBE_RSP]->frameLen) - { - FillOctetString(osProbeRspPkt, - dev->rxFrames[P2P_FID_PROBE_RSP]->frame, - dev->rxFrames[P2P_FID_PROBE_RSP]->frameLen - ); - - osWFDIE = PacketGetElement(osProbeRspPkt, EID_Vendor, OUI_SUB_WIFI_DISPLAY, OUI_SUB_DONT_CARE); - - if(osWFDIE.Length > 0) - { - PacketMakeElement(&fbuf->os, EID_Vendor, osWFDIE); - } - } - - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("a fake invitation rsp constructed\n")); - FrameBuf_Dump(fbuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -static -BOOLEAN -wdi_Construct_FakePdRsp( - IN ADAPTER *pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx, - IN const P2P_DEV_LIST_ENTRY *dev, - OUT FRAME_BUF *fbuf - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osPdReq, osTmpIe; - - FunctionIn(COMP_OID_SET); - - if(dev->txFrames[P2P_FID_PD_REQ] && dev->txFrames[P2P_FID_PD_REQ]->frameLen) - { - FillOctetString(osPdReq, - dev->txFrames[P2P_FID_PD_REQ]->frame, - dev->txFrames[P2P_FID_PD_REQ]->frameLen - ); - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("no corresp. pd req\n")); - FillOctetString(osPdReq, NULL, 0); - } - - // MAC Header - p2p_add_ActionFrameMacHdr(fbuf, info->DeviceAddress, dev->mac, dev->mac); - - // Action Header - p2p_add_P2PPublicActionHdr(fbuf, P2P_PROV_DISC_RSP, ctx->token); - - // WPS IE, getting from the original PD request - if(osPdReq.Length) - { - osTmpIe = PacketGetElement(osPdReq, EID_Vendor, OUI_SUB_SimpleConfig, OUI_SUB_DONT_CARE); - if(osTmpIe.Length) - { - PacketMakeElement(&fbuf->os, EID_Vendor, osTmpIe); - } - } - - // WFD IE - if(osPdReq.Length) - { - osTmpIe = PacketGetElement(osPdReq, EID_Vendor, OUI_SUB_WIFI_DISPLAY, OUI_SUB_DONT_CARE); - if(osTmpIe.Length) - { - PacketMakeElement(&fbuf->os, EID_Vendor, osTmpIe); - } - } - - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("a fake pd rsp constructed\n")); - FrameBuf_Dump(fbuf, 0, DBG_LOUD, __FUNCTION__); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -static -VOID -wdi_IndicateRxP2pRspActionFrame( - IN ADAPTER *pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ) -{ - P2P_INFO *info = GET_P2P_INFO(pAdapter); - P2P_DEV_LIST_ENTRY *dev = NULL; - P2P_FRAME_TYPE ft = P2P_FID_MAX; - RT_GEN_TEMP_BUFFER *pGenBuf = NULL; - FRAME_BUF fbuf; - u4Byte ieOffset = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - NDIS_STATUS_INDICATION *indic = NULL; - WDI_MESSAGE_HEADER *wdiHdr = NULL; - - WDI_INDICATION_P2P_ACTION_FRAME_RECEIVED_PARAMETERS param = {0}; - - FunctionIn(COMP_OID_SET); - - p2p_DevList_Lock(&info->devList); - - do - { - if(NULL == (pGenBuf = GetGenTempBuffer(pAdapter, GEN_TEMP_BUFFER_SIZE))) - { - RT_TRACE_F(COMP_OID_SET, DBG_SERIOUS, ("[ERROR] Memory allocation failed!\n")); - break; - } - - FrameBuf_Init(GEN_TEMP_BUFFER_SIZE, 0, (u1Byte *)pGenBuf->Buffer.Ptr, &fbuf); - - if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == ctx->rspType) - ft = P2P_FID_PD_RSP; - else if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == ctx->rspType) - ft = P2P_FID_GO_NEG_RSP; - else if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == ctx->rspType) - ft = P2P_FID_GO_NEG_CONF; - else if(WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE == ctx->rspType) - ft = P2P_FID_INV_RSP; - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("invalid rsp frame type specified: %u\n", ctx->rspType)); - break; - } - - if(ctx->bGo) - { - dev = p2p_DevList_GetGo(&info->devList, ctx->da); - } - else - { - dev = p2p_DevList_Get(&info->devList, ctx->da, P2P_DEV_TYPE_DEV); - } - - if(NULL == dev) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, - ("dev not found: bGo: %u, mac: %02X:%02X:%02X:%02X:%02X:%02X\n", - ctx->bGo, ctx->da[0], ctx->da[1], ctx->da[2], ctx->da[3], ctx->da[4], ctx->da[5] - )); - p2p_DevList_Dump(&info->devList); - break; - } - - if(dev->rxFrames[ft]) - { - if(dev->rxFrames[ft]->frameLen < ieOffset + 1) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("invalid received rsp action frame len: %u\n", dev->rxFrames[ft]->frameLen)); - break; - } - - FrameBuf_Add_Data(&fbuf, dev->rxFrames[ft]->frame, dev->rxFrames[ft]->frameLen); - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("no coresp. received rsp action frame, rsp type: %u\n", ft)); - - if(WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE == ctx->rspType) - { - if(!wdi_Construct_FakeInvitationRsp(pAdapter, ctx, dev, &fbuf)) - break; - } - else if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == ctx->rspType) - { - if(!wdi_Construct_FakePdRsp(pAdapter, ctx, dev, &fbuf)) - break; - } - else - { - break; - } - } - - // fill param - param.FrameInfo.Optional.DeviceContext_IsPresent = FALSE; - param.FrameInfo.FrameParams.ActionFrameType = ctx->rspType; - cpMacAddr(param.FrameInfo.FrameParams.PeerDeviceAddress.Address, FrameBuf_MHead(&fbuf) + FRAME_OFFSET_ADDRESS2); - param.FrameInfo.FrameParams.DialogToken = ctx->token; - param.FrameInfo.FrameIEs.ElementCount = FrameBuf_Length(&fbuf) - ieOffset; - param.FrameInfo.FrameIEs.pElements = FrameBuf_MHead(&fbuf) + ieOffset; - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("token: %u\n", param.FrameInfo.FrameParams.DialogToken)); - - // gen TLV - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationP2pActionFrameReceived( - ¶m, - sizeof(*indic) + sizeof(*wdiHdr), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("gen tlv failed\n")); - break; - } - - // fill ptrs - indic = (NDIS_STATUS_INDICATION *)buf; - wdiHdr = (WDI_MESSAGE_HEADER *)(buf + sizeof(*indic)); - - // indication data - PlatformZeroMemory(indic, sizeof(*indic)); - indic->Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION; - indic->Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1; - indic->Header.Revision = NDIS_STATUS_INDICATION_REVISION_1; - indic->SourceHandle = pAdapter; - indic->PortNumber = 0; - indic->StatusCode = NDIS_STATUS_WDI_INDICATION_P2P_ACTION_FRAME_RECEIVED; - indic->RequestId = 0; // ? - indic->StatusBuffer = wdiHdr; - indic->StatusBufferSize = buflen - sizeof(*indic); - - wdiHdr->PortId = (WDI_PORT_ID)(GET_PORT_NUMBER(pAdapter)); - wdiHdr->Reserved = 0; - wdiHdr->Status = NDIS_STATUS_SUCCESS; - wdiHdr->TransactionId = 0; - wdiHdr->IhvSpecificId = 0; - - // indicate - NdisMIndicateStatusEx(pAdapter->pNdisCommon->hNdisAdapter, indic); - - // cleanup - FreeGenerated((UINT8 *)buf); - - }while(FALSE); - - if(pGenBuf) - { - ReturnGenTempBuffer(pAdapter, pGenBuf); - } - - p2p_DevList_Unlock(&info->devList); - - FunctionOut(COMP_OID_SET); - - return; -} - -static -BOOLEAN -wdi_SendP2pActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - BOOLEAN bHandled = FALSE; - - N63C_SEND_ACTION_CTX *ctx = (N63C_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - do - { - if(OFF_CHNL_TX_STATE_CHNL_HIT == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("on chnl\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("complete\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_FRAME_SENT == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("frame sent\n")); - bHandled = TRUE; - break; - } - }while(FALSE); - - return bHandled; -} - -static -VOID -wdi_SendP2pReqActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - WDI_SEND_ACTION_CTX *ctx = (WDI_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - - wdi_SendP2pActionFrameStateCb(req, state, pCtx); - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - WDI_CMD_P2pSendRequestActionFrameComplete(pAdapter, ctx); - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("restore StateBeforeScan to initialized\n")); - info->StateBeforeScan = P2P_STATE_INITIALIZED; - } - else if(OFF_CHNL_TX_STATE_PRE_DESTROY == state) - { - if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == ctx->rspType - || WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == ctx->rspType - || WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE == ctx->rspType - ) - { - wdi_IndicateRxP2pRspActionFrame(pAdapter, ctx); - } - } - else if(OFF_CHNL_TX_STATE_RETRY == state) - { - u1Byte newToken = 0; - static BOOLEAN bSkip = TRUE; - - newToken = WDI_SendAction_UpdateTxFrameDialogToken(req, pAdapter, ctx->reqType); - - if(pAdapter->bInHctTest) - { - // Not to skip probing under HCT test, because it wastes time - // sending action frame to peer on its Listen Channel when peer - // is not doing extended listen - bSkip = FALSE; - } - - if(bSkip) - { - WDI_SendAction_SkipProbeTemporarilly(req); - } - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("retry with token: %u, reqType: %u, skip probe: %u\n", newToken, ctx->reqType, bSkip)); - - bSkip = !bSkip; - } - - return; -} - -static -VOID -wdi_SendP2pRspActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - WDI_SEND_ACTION_CTX *ctx = (WDI_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("state = %d\n", state)); - - wdi_SendP2pActionFrameStateCb(req, state, pCtx); - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - WDI_CMD_P2pSendResponseActionFrameComplete(pAdapter, ctx); - - // restore Dialog Token in P2PInfo since we are sending - // response action frame, self dialog token shall not be - // modified - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("restore token from %u to %u\n", info->DialogToken, ctx->oldToken)); - info->DialogToken = ctx->oldToken; - } - else if(OFF_CHNL_TX_STATE_PRE_DESTROY == state) - { - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("ctx->rspType = %d\n", ctx->rspType)); - if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == ctx->rspType) - { - wdi_IndicateRxP2pRspActionFrame(pAdapter, ctx); - } - } - else if(OFF_CHNL_TX_STATE_RETRY == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("retry with token: %u, reqType: %u\n", ctx->token, ctx->reqType)); - } - - return; -} - -static -BOOLEAN -wdi_SendActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - BOOLEAN bHandled = FALSE; - N63C_SEND_ACTION_CTX *ctx = (N63C_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("wdi_SendActionFrameStateCb (0x%x)\n", state)); - - do - { - if(OFF_CHNL_TX_STATE_CHNL_HIT == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("on chnl\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("complete\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_FRAME_SENT == state) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("frame sent\n")); - bHandled = TRUE; - break; - } - - if(OFF_CHNL_TX_STATE_RETRY == state) - { - u1Byte newToken = 0; - static BOOLEAN bSkip = TRUE; - - //newToken = WDI_SendAction_UpdateTxFrameDialogToken(req, pAdapter, ctx->reqType); - if(bSkip) - { - WDI_SendAction_SkipProbeTemporarilly(req); - } - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("retry with token: %u, reqType: %u, skip probe: %u\n", newToken, ctx->reqType, bSkip)); - - bSkip = !bSkip; - - bHandled = TRUE; - break; - } - }while(FALSE); - - return bHandled; -} - - -static -VOID -wdi_SendReqActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - WDI_SEND_ACTION_CTX *ctx = (WDI_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("wdi_SendReqActionFrameStateCb (0x%x)\n", state)); - - wdi_SendActionFrameStateCb(req, state, pCtx); - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - WDI_CMD_SendReqActionFrameComplete(pAdapter, ctx); - } - else if(OFF_CHNL_TX_STATE_PRE_DESTROY == state) - { - // Do nothing here. - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("wdi_SendReqActionFrameStateCb Pre_Destroy do nothing here\n")); - } -} - -static -VOID -wdi_SendRspActionFrameStateCb( - IN VOID *req, - IN int state, - IN VOID *pCtx - ) -{ - WDI_SEND_ACTION_CTX *ctx = (WDI_SEND_ACTION_CTX *)pCtx; - ADAPTER *pAdapter = ctx->pAdapter; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("wdi_SendRspActionFrameStateCb (0x%x)\n", state)); - - wdi_SendActionFrameStateCb(req, state, pCtx); - - if(OFF_CHNL_TX_STATE_COMPLETE == state) - { - WDI_CMD_SendRspActionFrameComplete(pAdapter, ctx); - } -} - -NDIS_STATUS -Wdi_Task_Scan( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - DOT11_SCAN_REQUEST_V2 ScanRequest = {0}; - ULONG BytesRead = 0, BytesNeeded = 0; - WDI_SCAN_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramScan; - u4Byte itSsidl = 0; - WDI_SSID WdiSsid = {0}; - OCTET_STRING Ssid = {0,0}; - - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - VOID * req = NULL; - BOOLEAN bScanByRoam = FALSE; - PMGNT_INFO pMgntInfo =&(pAdapter->MgntInfo); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("==> Wdi_Task_Scan(): Input InformationBuffer (%d)\n", - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength)); - - ScanRequest.dot11BSSType = dot11_BSS_type_infrastructure; - ScanRequest.uNumOfdot11SSIDs = 0; - ScanRequest.udot11SSIDsOffset = 0; - ScanRequest.uRequestIDsOffset = 0; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("WIFI_TLV_BSSID\n")); - CopyMem(ScanRequest.dot11BSSID, param->BSSID.Address, ETHERNET_ADDRESS_LENGTH); - RT_PRINT_ADDR(COMP_SCAN, DBG_LOUD, ("ScanRequest \n"), ScanRequest.dot11BSSID); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("WIFI_TLV_SSID\n")); - - MgntClearSsidsToScan(pAdapter); - - for(itSsidl = 0; itSsidl < param->SSIDList.ElementCount; itSsidl++) - { - WdiSsid = param->SSIDList.pElements[itSsidl]; - - RT_PRINT_STR(COMP_MLME, DBG_LOUD, "===> Wdi_Task_Scan(): ", WdiSsid.pElements, WdiSsid.ElementCount); - - Ssid.Octet = WdiSsid.pElements; - Ssid.Length = (u2Byte)WdiSsid.ElementCount; - - RT_PRINT_STR(COMP_MLME, DBG_LOUD, "===> Wdi_Task_Scan(): SSid ", Ssid.Octet, Ssid.Length); - - MgntAddSsidsToScan(pAdapter, Ssid); - } - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Scan Type\n")); - if( ((param->ScanModeParameters.ScanTrigger == WDI_SCAN_TRIGGER_ROAM) || - (param->ScanModeParameters.ScanTrigger == WDI_SCAN_TRIGGER_FAST_ROAM)) && - (pMgntInfo->PrepareRoamState ==RT_PREPARE_ROAM_NORMAL_ROAM_BETTER_AP) ) - bScanByRoam = TRUE; - else - bScanByRoam = FALSE; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("WIFI_TLV_SCAN_MODE\n")); - ScanRequest.dot11ScanType = (DOT11_SCAN_TYPE)param->ScanModeParameters.AllowedScanType; - - ScanRequest.uIEsOffset = 0; - ScanRequest.uIEsLength = 0; - - if(param->Optional.VendorIEs_IsPresent) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("WIFI_TLV_VENDORIE\n")); - - MgntActSet_AdditionalProbeReqIE(pAdapter, - (u1Byte *)param->VendorIEs.pElements, - (u4Byte)param->VendorIEs.ElementCount); - } - - // Sinda, 20150512 - // Skip all scan triggered by Roam. - if( (bScanByRoam == TRUE) ) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Roam trigger scan, so skip it\n")); - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } - else if(TRUE == pAdapter->pPortCommonInfo->WdiData.bRFOffSwitchProgress) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Set RF in progress, skip scan\n")); - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } - else - { - status = N6CSet_DOT11_SCAN_REQUEST(pAdapter, - &ScanRequest, - (ULONG)sizeof(ScanRequest), - &BytesRead, - &BytesNeeded); - - if(pNdisCommon->bToIndicateScanComplete) - { - if(param->Optional.VendorIEs_IsPresent) - { - MgntActSet_AdditionalProbeReqIE(pAdapter, - (u1Byte *)param->VendorIEs.pElements, - (u4Byte)param->VendorIEs.ElementCount); - } - - if(NULL != (req = CustomScan_AllocReq(GET_CUSTOM_SCAN_INFO(pAdapter), NULL, NULL))) - { - wdi_ConstructScanReq(pAdapter, param, req); - - CustomScan_SetTimeBound(req, param->DwellTime.MaximumScanTime); - CustomScan_SetupCbCtx(req, wdi_ScanCb, pAdapter); - CustomScan_SetRepeatCount(req, param->ScanModeParameters.ScanRepeatCount); - - CustomScan_IssueReq(GET_CUSTOM_SCAN_INFO(pAdapter), req, CUSTOM_SCAN_SRC_TYPE_SYS, "sys"); - } - } - else - { - WDI_IndicateScanComplete(pAdapter, RT_STATUS_FAILURE); - } - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_Task_Scan()\n")); - return status; -} - - -NDIS_STATUS -Wdi_Task_Connect( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - ULONG InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - WDI_TASK_CONNECT_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramConnect; - PWDI_CONNECT_BSS_ENTRY_CONTAINER connectBssEntry = NULL; - PMGNT_INFO pMgntInfo=&pAdapter->MgntInfo; - - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer; - - //Save PMKID - u4Byte ulIndex, i, j; - BOOLEAN blInserted; - u1Byte bssidcount=0; - int NumPreferredBSSID = Params->PreferredBSSEntryList.ElementCount; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> Wdi_Task_Connect()\n")); - - pMgntInfo->RegFakeRoamSignal[0] = 0; - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - DOT11_SSID_LIST SsidList; - u1Byte i = 0; - - N6_ASSIGN_OBJECT_HEADER( - SsidList.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_SSID_LIST_REVISION_1, - sizeof(DOT11_SSID_LIST) - ); - - // Clear all entries - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed = FALSE; - } - pSecInfo->PMKIDCount = 0; - - FtResetEntryList(pAdapter); - - // TODO: Choose corresponding adapter before assigning parameters - for(bssidcount=0;bssidcountPreferredBSSEntryList.pElements[bssidcount]; - if( connectBssEntry->Optional.PMKID_IsPresent == TRUE ) - { - // 2. Insert or cover with new PMKID. - blInserted = FALSE; - for(j=0 ; jPMKIDList[j].bUsed && eqMacAddr(pSecInfo->PMKIDList[j].Bssid, connectBssEntry->BSSID.Address) ) - { // BSSID is matched, the same AP => rewrite with new PMKID. - if( connectBssEntry->PMKID.ElementCount ) - { - CopyMem(pSecInfo->PMKIDList[j].PMKID, connectBssEntry->PMKID.pElements, connectBssEntry->PMKID.ElementCount); - blInserted = TRUE; - break; - } - } - } - - if(!blInserted) - { - // Find a new entry - for( j=0 ; jPMKIDList[j].bUsed == FALSE) && connectBssEntry->PMKID.ElementCount ) - { - pSecInfo->PMKIDList[j].bUsed = TRUE; - CopyMem(pSecInfo->PMKIDList[j].Bssid, connectBssEntry->BSSID.Address, 6); - CopyMem(pSecInfo->PMKIDList[j].PMKID, connectBssEntry->PMKID.pElements, PMKID_LEN); - CopyMem(pSecInfo->PMKIDList[j].SsidBuf, pMgntInfo->SsidBuf, pMgntInfo->Ssid.Length); - pSecInfo->PMKIDList[j].Ssid.Length= pMgntInfo->Ssid.Length; - pSecInfo->PMKIDCount ++; - break; - } - } - } - } - - if(connectBssEntry->Optional.FTInitialAssocParameters_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_MDE, connectBssEntry->BSSID.Address, - connectBssEntry->FTInitialAssocParameters.MDE.pElements, connectBssEntry->FTInitialAssocParameters.MDE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTInitialAssocParameters, MDE:\n", - connectBssEntry->FTInitialAssocParameters.MDE.pElements, connectBssEntry->FTInitialAssocParameters.MDE.ElementCount); - } - - if(connectBssEntry->Optional.FTReAssocParameters_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_MDE, connectBssEntry->BSSID.Address, - connectBssEntry->FTReAssocParameters.MDE.pElements, connectBssEntry->FTReAssocParameters.MDE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTReAssocParameters MDE:\n", - connectBssEntry->FTReAssocParameters.MDE.pElements, connectBssEntry->FTReAssocParameters.MDE.ElementCount); - - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_FTE, connectBssEntry->BSSID.Address, - connectBssEntry->FTReAssocParameters.FTE.pElements, connectBssEntry->FTReAssocParameters.FTE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTReAssocParameters FTE:\n", - connectBssEntry->FTReAssocParameters.FTE.pElements, connectBssEntry->FTReAssocParameters.FTE.ElementCount); - - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_PMKR0_NAME, connectBssEntry->BSSID.Address, - connectBssEntry->FTReAssocParameters.PMKR0Name.pmkname.Name, sizeof(WDI_TYPE_PMK_NAME)); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTReAssocParameters PMKR0:\n", - connectBssEntry->FTReAssocParameters.PMKR0Name.pmkname.Name, sizeof(WDI_TYPE_PMK_NAME)); - } - } - - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed) - { - // For debug purpose: Check current PMKID list. - RT_TRACE( COMP_MLME, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_MLME, DBG_LOUD, ("[PMKID %d]\n", ulIndex ) ); - RT_TRACE( COMP_MLME, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_MLME, DBG_LOUD, ("SecSetPMKID(): PMKIDList[%d].bUsed is TRUE\n", ulIndex) ); - RT_PRINT_STR( COMP_MLME, DBG_LOUD, "SSID: ", pSecInfo->PMKIDList[ulIndex].Ssid.Octet, pSecInfo->PMKIDList[ulIndex].Ssid.Length); - RT_PRINT_DATA( COMP_MLME, DBG_LOUD, "BSSID: ", pSecInfo->PMKIDList[ulIndex].Bssid, 6); - RT_PRINT_DATA( COMP_MLME, DBG_LOUD, "PMKID: ", pSecInfo->PMKIDList[ulIndex].PMKID, connectBssEntry->PMKID.ElementCount); - } - } - - pAdapter->MgntInfo.bExcludeUnencrypted = Params->ConnectParameters.ConnectionSettings.ExcludeUnencrypted; - - // TODO: HiddenNetwork / MFPEnabled / HostFIPSModeEnabled - pMgntInfo->bRoamRequest = Params->ConnectParameters.ConnectionSettings.RoamRequest; - RT_TRACE( COMP_MLME, DBG_LOUD, ("bRoamRequest %d\n", pMgntInfo->bRoamRequest) ); - - pMgntInfo->SafeModeEnabled = Params->ConnectParameters.ConnectionSettings.HostFIPSModeEnabled; - - if(pMgntInfo->SafeModeEnabled && !pMgntInfo->pHTInfo->bEnableHT) - pMgntInfo->pStaQos->QosCapability = QOS_DISABLE; - else - pMgntInfo->pStaQos->QosCapability = pMgntInfo->pStaQos->QosCapabilityBackup; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_task_connect(): bExcludeUnencrypted %d HostFIPSModeEnabled %d QosCapability 0x%x QosCapabilityBackup 0x%x enableHT %d\n", pMgntInfo->bExcludeUnencrypted, pMgntInfo->SafeModeEnabled, pMgntInfo->pStaQos->QosCapability, pMgntInfo->pStaQos->QosCapabilityBackup, pMgntInfo->pHTInfo->bEnableHT)); - - //3 DesiredSSIDList - SsidList.uNumOfEntries = Params->ConnectParameters.SSIDList.ElementCount; - - for( i=0; i< SsidList.uNumOfEntries; i++) - { - SsidList.SSIDs[i].uSSIDLength = Params->ConnectParameters.SSIDList.pElements[i].ElementCount; - CopyMem(SsidList.SSIDs[i].ucSSID, Params->ConnectParameters.SSIDList.pElements[i].pElements, SsidList.SSIDs[i].uSSIDLength); - - RT_PRINT_STR(COMP_MLME, DBG_LOUD, ("Desired SSID \n"), SsidList.SSIDs[i].ucSSID, SsidList.SSIDs[i].uSSIDLength); - } - pNdisCommon->dot11DesiredSSIDList = SsidList; - - //3 Authentication Algorithm - N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(pAdapter, Params->ConnectParameters.AuthenticationAlgorithms.pElements[0]); - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("AuthenticationAlgorithms count = %d\n", Params->ConnectParameters.AuthenticationAlgorithms.ElementCount)); - - //3 Unicast Cipher Algorithm - N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM(pAdapter, Params->ConnectParameters.UnicastCipherAlgorithms.pElements[0]); - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("UnicastCipherAlgorithms count = %d\n", Params->ConnectParameters.UnicastCipherAlgorithms.ElementCount)); - - //3 Multicast Cipher Algorithm - N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM(pAdapter, Params->ConnectParameters.MulticastCipherAlgorithms.pElements[0]); - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("MulticastCipherAlgorithms count = %d\n", Params->ConnectParameters.MulticastCipherAlgorithms.ElementCount)); - - - //3 Additional Association Request IEs - if(Params->ConnectParameters.Optional.AssociationRequestVendorIE_IsPresent) - { - if(Params->ConnectParameters.AssociationRequestVendorIE.ElementCount > 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Wdi_Task_Connect(): set association request additional IE\n")); - MgntActSet_AdditionalAssocReqIE(pAdapter, - Params->ConnectParameters.AssociationRequestVendorIE.pElements, - Params->ConnectParameters.AssociationRequestVendorIE.ElementCount - ); - - RT_PRINT_DATA(COMP_MLME, DBG_TRACE, ("Wdi_Task_Connect(): AssociationRequestVendorIE\n"), - Params->ConnectParameters.AssociationRequestVendorIE.pElements, - Params->ConnectParameters.AssociationRequestVendorIE.ElementCount); - } - } - - //3 ActivePhyTypeList - if(Params->ConnectParameters.Optional.ActivePhyTypeList_IsPresent) - { - // TODO: connection can be made only at specified PhyType - } - - //3 DisallowedBSSIDs_IsPresent - if(Params->ConnectParameters.Optional.DisallowedBSSIDs_IsPresent) - { - if(Params->ConnectParameters.DisallowedBSSIDs.ElementCount > 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Wdi_Task_Connect(): set disallowed BSSIDs\n")); - MgntActSet_ExcludedMacAddressList( - pAdapter, - (pu1Byte)Params->ConnectParameters.DisallowedBSSIDs.pElements, - Params->ConnectParameters.DisallowedBSSIDs.ElementCount - ); - - for(; i < Params->ConnectParameters.DisallowedBSSIDs.ElementCount; i++) - { - RT_PRINT_ADDR(COMP_MLME, DBG_TRACE, ("Wdi_Task_Connect(): disallowed BSSID:"), - Params->ConnectParameters.DisallowedBSSIDs.pElements[i].Address); - } - } - } - - //3 AllowedBSSID - if(Params->ConnectParameters.Optional.AllowedBSSIDs_IsPresent) - { - if(Params->ConnectParameters.AllowedBSSIDs.ElementCount > 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Wdi_Task_Connect(): set allowed BSSIDs\n")); - PlatformMoveMemory( - pNdisCommon->dot11DesiredBSSIDList, - Params->ConnectParameters.AllowedBSSIDs.pElements, - Params->ConnectParameters.AllowedBSSIDs.ElementCount*sizeof(DOT11_MAC_ADDRESS)); - - for(; i < Params->ConnectParameters.AllowedBSSIDs.ElementCount; i++) - { - RT_PRINT_ADDR(COMP_MLME, DBG_TRACE, "Wdi_Task_Connect(): allowed BSSID:", pNdisCommon->dot11DesiredBSSIDList[i]); - } - } - } - } - else // parse TLV manually - { - PTLV_WDI_STRUCT pTlvData = NULL; - ULONG BytesProcessed = 0; - ULONG Prefix = sizeof(WDI_MESSAGE_HEADER); - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pOidHandle->pInputBuffer + sizeof(WDI_MESSAGE_HEADER)); - - // WDI_CONNECT_BSS_ENTRY - //RT_TRACE(COMP_MLME, DBG_LOUD, ("PreferredBSSEntryList count = %d\n", Params.PreferredBSSEntryList.ElementCount)); - if(WDI_TLV_CONNECT_PARAMETERS == pTlvData->Type) - { - DOT11_SSID_LIST SsidList; - u1Byte NumSsid = 0; - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - - InputBufferLength = pTlvData->Length; - - N6_ASSIGN_OBJECT_HEADER( - SsidList.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_SSID_LIST_REVISION_1, - sizeof(DOT11_SSID_LIST) - ); - - SsidList.uNumOfEntries = NumSsid; - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pTlvData->Value); - - while(BytesProcessed < InputBufferLength) - { - // Parse Type - switch(pTlvData->Type) - { - default: - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("unknown TLV 0x%x\n", pTlvData->Type)); - } - break; - - case WDI_TLV_CONNECTION_SETTINGS: - { - u1Byte RoamRequest = 0; - u1Byte HiddenNetwork = 0; - u1Byte ExcludeUnencrypted = 0; - u1Byte MFPEnabled = 0; - u1Byte HostFIPSModeEnabled = 0; - - RoamRequest = *(pu1Byte)(pTlvData->Value); - HiddenNetwork = *(pu1Byte)(pTlvData->Value + 1); - ExcludeUnencrypted = *(pu1Byte)(pTlvData->Value + 2); - MFPEnabled = *(pu1Byte)(pTlvData->Value + 3); - HostFIPSModeEnabled = *(pu1Byte)(pTlvData->Value + 4); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_CONNECTION_SETTINGS\n")); - RT_TRACE(COMP_MLME, DBG_LOUD, ("RoamRequest = %d, HiddenNetwork = %d, ExcludeUnencrypted = %d, MFPEnabled = %d, HostFIPSModeEnabled = %d\n", - RoamRequest, HiddenNetwork, ExcludeUnencrypted, MFPEnabled, HostFIPSModeEnabled)); - - // Handle RoamRequest - - // Handle HiddenNetwork - - // Handle ExcludeUnencrypted - pAdapter->MgntInfo.bExcludeUnencrypted = (ExcludeUnencrypted == 1)?TRUE:FALSE; - - // Handle MFPEnabled - - // Handle HostFIPSModeEnabled - } - break; - - case WDI_TLV_SSID: - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_SSID\n")); - SsidList.SSIDs[NumSsid].uSSIDLength = pTlvData->Length; - CopyMem(SsidList.SSIDs[NumSsid].ucSSID, pTlvData->Value, pTlvData->Length); - NumSsid++; - SsidList.uNumOfEntries = NumSsid; - } - break; - - case WDI_TLV_AUTH_ALGO_LIST: - { - u4Byte AlgorithmId = (*((pu4Byte)(pTlvData->Value))); - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_AUTH_ALGO_LIST\n")); - - N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(pAdapter, AlgorithmId); - } - break; - - case WDI_TLV_MULTICAST_CIPHER_ALGO_LIST: - { - u4Byte AlgorithmId = (*((pu4Byte)(pTlvData->Value))); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_MULTICAST_CIPHER_ALGO_LIST\n")); - - switch( AlgorithmId ) - { - case WDI_CIPHER_ALGO_NONE: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_NONE\n") ); - break; - - case WDI_CIPHER_ALGO_WEP: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_WEP40; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_WEP\n") ); - break; - - case WDI_CIPHER_ALGO_WEP40: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_WEP40; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_WEP40\n") ); - break; - - case WDI_CIPHER_ALGO_TKIP: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_TKIP; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_TKIP\n") ); - break; - - case WDI_CIPHER_ALGO_CCMP: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_AESCCMP; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_CCMP\n") ); - break; - - case DOT11_CIPHER_ALGO_WAPI_SMS4: //For WAPI IHV service support add by ylb 20111114 - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_SMS4; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_WAPI_SMS4\n") ); - break; - case WDI_CIPHER_ALGO_WEP104: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_WEP104; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Task_Connect(): DOT11_CIPHER_ALGO_WEP104\n") ); - break; - - default: - pSecInfo->GroupEncAlgorithm = RT_ENC_ALG_NO_CIPHER; - RT_TRACE( COMP_SEC, DBG_WARNING, ("Wdi_Task_Connect(): Unknown AlgorithmId 0x%X (WARNING!!!)\n", AlgorithmId) ); - break; - } - - // Save Multicast Alg - pNdisCommon->RegGroupALg = AlgorithmId; - - SecConstructRSNIE(pAdapter); - } - break; - - case WDI_TLV_UNICAST_CIPHER_ALGO_LIST: - { - u4Byte AlgorithmId = (*((pu4Byte)(pTlvData->Value))); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_UNICAST_CIPHER_ALGO_LIST\n")); - - N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM(pAdapter, (DOT11_CIPHER_ALGORITHM)AlgorithmId); - } - break; - - case WDI_TLV_EXTRA_ASSOCIATION_REQUEST_IES: - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_EXTRA_ASSOCIATION_REQUEST_IES\n")); - } - break; - - case WDI_TLV_PHY_TYPE_LIST: - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_PHY_TYPE_LIST\n")); - } - break; - - case WDI_TLV_DISALLOWED_BSSIDS_LIST: - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_DISALLOWED_BSSIDS_LIST\n")); - } - break; - - case WDI_TLV_ALLOWED_BSSIDS_LIST: - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_TLV_ALLOWED_BSSIDS_LIST\n")); - } - break; - - } - - // Parse Length - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Length = %d\n", pTlvData->Length)); - - // Parse Content - - BytesProcessed += (4 + pTlvData->Length); - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pOidHandle->pInputBuffer + Prefix + 4 + BytesProcessed); - } - - pNdisCommon->dot11DesiredSSIDList = SsidList; - } - } - - pAdapter->pNdis62Common->CurrentOpState = OP_STATE; - - if( pMgntInfo->bRoamRequest == FALSE ) - { - ndisStatus = N6CSet_DOT11_CONNECT_REQUEST( - pAdapter, - NULL, 0, 0, 0); - } - else - { - pMgntInfo->Ssid.Octet = pNdisCommon->dot11DesiredSSIDList.SSIDs[0].ucSSID; - pMgntInfo->Ssid.Length = (u2Byte)pNdisCommon->dot11DesiredSSIDList.SSIDs[0].uSSIDLength; - - pMgntInfo->bDisconnectRequest = FALSE; - RT_TRACE(COMP_MLME, DBG_LOUD, ("This is roam request, go to roam flow\n")); - MgntLinkStatusSetRoamingState(pAdapter, 0, RT_ROAMING_BY_DEAUTH, ROAMINGSTATE_SCANNING); - DrvIFIndicateRoamingStart(pAdapter); - - if( MgntRoamRetry(pAdapter, FALSE) == FALSE ) - ndisStatus = NDIS_STATUS_FAILURE; - else - ndisStatus = NDIS_STATUS_SUCCESS; - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== Wdi_Task_Connect()\n")); - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Task_Disconnect( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_DISCONNECT_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramDisconnect; - - NDIS_OID_REQUEST *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - if(NDIS_STATUS_SUCCESS != (status = N6CSet_DOT11_DISCONNECT_REQUEST(pAdapter, NULL, 0, 0, 0))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_DISCONNECT_REQUEST returns: 0x%08X\n", status)); - break; - } - }while(FALSE); - - // M4 indication is not required since bWaitComplete in RT_SUPPORT_TASKs is FALSE - - FunctionOut(COMP_OID_SET); - - return status; -} - -// -// Description: -// Create port according to arguments specified by WDI. -// The completion counterpart of this function shall be -// called when create port is done. -// -// Return: -// NDIS_STATUS_SUCCESS if done synchronousely, -// NDIS_STATUS_PENDING if done asynchronously -// -static -NDIS_STATUS -Wdi_Task_CreatePort( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - NDIS_OID_REQUEST *req = NULL; - - WDI_TASK_CREATE_PORT_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramCreatePort; - - FunctionIn(COMP_OID_SET); - - do - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("NdisPortNumber:%d OpModeMask: 0x%08X\n", - param->CreatePortParameters.NdisPortNumber, - param->CreatePortParameters.OpModeMask)); - - if(NULL == (req = Wdi_Xlat_AllocCreateMacOid(pOidHandle, param))) - { - status = NDIS_STATUS_RESOURCES; - break; - } - - // create mac - if(WDI_OPERATION_MODE_P2P_DEVICE == param->CreatePortParameters.OpModeMask - || WDI_OPERATION_MODE_P2P_CLIENT == param->CreatePortParameters.OpModeMask - || WDI_OPERATION_MODE_P2P_GO == param->CreatePortParameters.OpModeMask - || (WDI_OPERATION_MODE_P2P_CLIENT | WDI_OPERATION_MODE_P2P_GO)== param->CreatePortParameters.OpModeMask - ) // TODO: OpModeMask is a bitmap with combination of possible op modes - { - status = N62C_OID_DOT11_CREATE_MAC(pAdapter, req); - - if(NDIS_STATUS_SUCCESS != status && NDIS_STATUS_PENDING != status) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N62C_OID_DOT11_CREATE_MAC returns error: 0x%08X\n", status)); - Wdi_Xlat_FreeOid(req); - } - - break; - } - else - {// cases which we don't need to create mac - DOT11_MAC_INFO *macInfo = req->DATA.METHOD_INFORMATION.InformationBuffer; - - status = NDIS_STATUS_SUCCESS; - - macInfo->uNdisPortNumber = 0; - cpMacAddr(macInfo->MacAddr, pAdapter->CurrentAddress); - req->DATA.METHOD_INFORMATION.BytesWritten = sizeof(*macInfo); - - WDI_CMD_CreatePortComplete(pAdapter, req, status); - break; - } - - }while(FALSE); - - FunctionOut(COMP_OID_SET); - return status; -} - -static -NDIS_STATUS -Wdi_Task_DeletePort( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - NDIS_OID_REQUEST *req = NULL; - PADAPTER pTargetAdapter = NULL; - WDI_TASK_DELETE_PORT_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramDeletePort; - - FunctionIn(COMP_OID_SET); - - do - { - if(NULL == (req = Wdi_Xlat_AllocDeleteMacOid(pOidHandle, param))) - { - status = NDIS_STATUS_RESOURCES; - break; - } - - // delete mac - if(0 != param->DeletePortParameters.PortNumber) - { - //Delete group peer. - WDI_DeleteGroupPeer(pAdapter, param->DeletePortParameters.PortNumber); - - status = N62C_OID_DOT11_DELETE_MAC(pAdapter, req); - - if(NDIS_STATUS_SUCCESS != status && NDIS_STATUS_PENDING != status) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N62C_OID_DOT11_DELETE_MAC returns error: 0x%08X\n", status)); - Wdi_Xlat_FreeOid(req); - } - - break; - } - else - {// cases which we don't need to delete mac - status = NDIS_STATUS_SUCCESS; - - //Delete group peer. - WDI_DeleteGroupPeer(pAdapter, param->DeletePortParameters.PortNumber); - - WDI_CMD_DeletePortComplete(pAdapter, req, status); - break; - } - - }while(FALSE); - - FunctionOut(COMP_OID_SET); - return status; -} - -static -NDIS_STATUS -Wdi_Task_SetApCipherKeyMappingKey( - IN ADAPTER *pAdapter, - IN u1Byte *addr, - IN ULONG cipherAlgo, - IN u4Byte keyLen, - IN u1Byte *pKeyMaterial - ) -{ - MGNT_INFO *pMgntInfo = &pAdapter->MgntInfo; - RT_WLAN_STA *pEntry = AsocEntry_GetEntry(pMgntInfo, addr); - - u4Byte ucIndex = 0; - - if(!pEntry) - return NDIS_STATUS_INVALID_DATA; - - CopyMem(pEntry->perSTAKeyInfo.PTK, pKeyMaterial, keyLen); // Added by Annie, 2005-07-12. - - if(WDI_CIPHER_ALGO_TKIP == cipherAlgo) - { - pEntry->perSTAKeyInfo.TempEncKey = pEntry->perSTAKeyInfo.PTK+TKIP_ENC_KEY_POS; - pEntry->perSTAKeyInfo.TxMICKey = pEntry->perSTAKeyInfo.PTK+(TKIP_MIC_KEY_POS); - pEntry->perSTAKeyInfo.RxMICKey = pEntry->perSTAKeyInfo.PTK+(TKIP_MIC_KEY_POS+TKIP_MIC_KEY_LEN); - - //Add for AP mode HW enc,by CCW - ucIndex = AP_FindFreeEntry(pAdapter , pEntry->MacAddr); - if(ucIndex == TOTAL_CAM_ENTRY) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("[Warning]: Cam Entry is FULL!!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - - //set key - AP_Setkey(pAdapter , - pEntry->perSTAKeyInfo.pWLanSTA->MacAddr, - ucIndex, // Entey index - CAM_TKIP, - 0, // Parise key - pEntry->perSTAKeyInfo.TempEncKey); - - pEntry->keyindex = ucIndex; - } - else if(WDI_CIPHER_ALGO_CCMP == cipherAlgo) - { // AES mode AP-WPA AES,CCW - AESCCMP_BLOCK blockKey; - AUTH_PKEY_MGNT_TAG *pKeyMgnt = &pEntry->perSTAKeyInfo; - - RT_TRACE(COMP_SEC, DBG_LOUD, ("===>CCMP Set Station Key.\n")); - RT_PRINT_ADDR(COMP_SEC, DBG_LOUD, "===> Peer Address : ", addr); - - //Add for AP mode HW enc,by CCW - ucIndex = AP_FindFreeEntry(pAdapter, pEntry->MacAddr); - if(ucIndex == TOTAL_CAM_ENTRY) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("[Warning]: Cam Entry is FULL!!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - - //Set Key - PlatformMoveMemory(blockKey.x , pEntry->perSTAKeyInfo.PTK, 16); - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE * 8, (u4Byte *)pEntry->perSTAKeyInfo.AESKeyBuf); - //set hw key - AP_Setkey(pAdapter , - pEntry->perSTAKeyInfo.pWLanSTA->MacAddr, - ucIndex, // Entey index - CAM_AES, - 0, // Parise key - pEntry->perSTAKeyInfo.PTK); - pEntry->keyindex = ucIndex; - } - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -Wdi_Task_SetApCipherDefaultKey( - IN ADAPTER *pAdapter, - IN ULONG cipherAlgo, - IN UINT32 keyId, - IN u4Byte keyLen, - IN u1Byte *pKeyMaterial - ) -{ - MGNT_INFO *pMgntInfo = &pAdapter->MgntInfo; - PAUTH_GLOBAL_KEY_TAG pGlInfo = &pMgntInfo->globalKeyInfo; - u1Byte CAM_CONST_BROAD[6] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; - - // Refer to N6CSet_DOT11_CIPHER_DEFAULT_KEY - - PlatformZeroMemory(pMgntInfo->globalKeyInfo.GTK, GTK_LEN ); - PlatformMoveMemory(pMgntInfo->globalKeyInfo.GTK, pKeyMaterial, keyLen); - - if(WDI_CIPHER_ALGO_TKIP == cipherAlgo) - { - pGlInfo->TxMICKey = pGlInfo->GTK + GTK_MIC_TX_POS; - pGlInfo->RxMICKey = pGlInfo->GTK + GTK_MIC_RX_POS; - pMgntInfo->SecurityInfo.GroupTransmitKeyIdx = (u1Byte)keyId; - } - else if(WDI_CIPHER_ALGO_CCMP == cipherAlgo) - { - AESCCMP_BLOCK blockKey; - - PlatformMoveMemory(blockKey.x, pGlInfo->GTK, 16); - pMgntInfo->SecurityInfo.GroupTransmitKeyIdx = (u1Byte)keyId; - AES_SetKey(blockKey.x, AESCCMP_BLK_SIZE * 8, (u4Byte *)pGlInfo->AESGTK); - } - - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -Wdi_Task_Set_Radio_State( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - ULONG InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - WDI_SET_RADIO_STATE_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetRadioState; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> Wdi_Task_Set_Radio_State()\n")); - - if( Params->SoftwareRadioState == TRUE ) - { - pNdisCommon->eRfPowerStateToSet = eRfOn; - //the task is used for Adapter, so pAdapter is default adapter. - pAdapter->MgntInfo.RfRequestFromUplayer = FALSE; - } - else - { - pNdisCommon->eRfPowerStateToSet = eRfOff; - //the task is used for Adapter, so pAdapter is default adapter. - pAdapter->MgntInfo.RfRequestFromUplayer = TRUE; - } - SetRFPowerStateWorkItemCallback((PVOID)pAdapter); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== Wdi_Task_Set_Radio_State(%x)\n", ndisStatus)); - return ndisStatus; -} - -NDIS_STATUS -Wdi_Task_Roam( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - ULONG InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - WDI_TASK_ROAM_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramRoam; - PWDI_CONNECT_BSS_ENTRY_CONTAINER connectBssEntry = NULL; - PMGNT_INFO pMgntInfo=&pAdapter->MgntInfo; - WDI_ASSOC_STATUS AssocStatus = 0; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer; - u4Byte ulIndex, i, j; - BOOLEAN blInserted; - u1Byte bssidcount=0; - int NumPreferredBSSID = Params->PreferredBSSEntryList.ElementCount; - - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==> Wdi_Task_Roam()\n")); - - pMgntInfo->RegFakeRoamSignal[0] = 0; - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - DOT11_SSID_LIST SsidList; - u1Byte i = 0; - - N6_ASSIGN_OBJECT_HEADER( - SsidList.Header, - NDIS_OBJECT_TYPE_DEFAULT, - DOT11_SSID_LIST_REVISION_1, - sizeof(DOT11_SSID_LIST) - ); - - // TODO: Choose corresponding adapter before assigning parameters - - // Clear all entries - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed = FALSE; - } - pSecInfo->PMKIDCount = 0; - - FtResetEntryList(pAdapter); - - // TODO: Choose corresponding adapter before assigning parameters - for(bssidcount=0;bssidcountPreferredBSSEntryList.pElements[bssidcount]; - if( connectBssEntry->Optional.PMKID_IsPresent == TRUE ) - { - // 2. Insert or cover with new PMKID. - blInserted = FALSE; - for(j=0 ; jPMKIDList[j].bUsed && eqMacAddr(pSecInfo->PMKIDList[j].Bssid, connectBssEntry->BSSID.Address) ) - { // BSSID is matched, the same AP => rewrite with new PMKID. - if( connectBssEntry->PMKID.ElementCount ) - { - CopyMem(pSecInfo->PMKIDList[j].PMKID, connectBssEntry->PMKID.pElements, connectBssEntry->PMKID.ElementCount); - blInserted = TRUE; - break; - } - } - } - - if(!blInserted) - { - // Find a new entry - for( j=0 ; jPMKIDList[j].bUsed == FALSE) && connectBssEntry->PMKID.ElementCount ) - { - pSecInfo->PMKIDList[j].bUsed = TRUE; - CopyMem(pSecInfo->PMKIDList[j].Bssid, connectBssEntry->BSSID.Address, 6); - CopyMem(pSecInfo->PMKIDList[j].PMKID, connectBssEntry->PMKID.pElements, PMKID_LEN); - CopyMem(pSecInfo->PMKIDList[j].SsidBuf, pMgntInfo->SsidBuf, pMgntInfo->Ssid.Length); - pSecInfo->PMKIDList[j].Ssid.Length= pMgntInfo->Ssid.Length; - pSecInfo->PMKIDCount ++; - break; - } - } - } - } - - if(connectBssEntry->Optional.FTInitialAssocParameters_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_MDE, connectBssEntry->BSSID.Address, - connectBssEntry->FTInitialAssocParameters.MDE.pElements, connectBssEntry->FTInitialAssocParameters.MDE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTInitialAssocParameters MDE:\n", - connectBssEntry->FTInitialAssocParameters.MDE.pElements, connectBssEntry->FTInitialAssocParameters.MDE.ElementCount); - } - - if(connectBssEntry->Optional.FTReAssocParameters_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_MDE, connectBssEntry->BSSID.Address, - connectBssEntry->FTReAssocParameters.MDE.pElements, connectBssEntry->FTReAssocParameters.MDE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTReAssocParameters MDE:\n", - connectBssEntry->FTReAssocParameters.MDE.pElements, connectBssEntry->FTReAssocParameters.MDE.ElementCount); - - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_FTE, connectBssEntry->BSSID.Address, - connectBssEntry->FTReAssocParameters.FTE.pElements, connectBssEntry->FTReAssocParameters.FTE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTReAssocParameters FTE:\n", - connectBssEntry->FTReAssocParameters.FTE.pElements, connectBssEntry->FTReAssocParameters.FTE.ElementCount); - - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_PMKR0_NAME, connectBssEntry->BSSID.Address, - connectBssEntry->FTReAssocParameters.PMKR0Name.pmkname.Name, sizeof(WDI_TYPE_PMK_NAME)); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTReAssocParameters PMKR0:\n", - connectBssEntry->FTReAssocParameters.PMKR0Name.pmkname.Name, sizeof(WDI_TYPE_PMK_NAME)); - } - } - - for( ulIndex=0; ulIndexPMKIDList[ulIndex].bUsed) - { - // For debug purpose: Check current PMKID list. - RT_TRACE( COMP_MLME, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_MLME, DBG_LOUD, ("[PMKID %d]\n", ulIndex ) ); - RT_TRACE( COMP_MLME, DBG_LOUD, ("------------------------------------------\n") ); - RT_TRACE( COMP_MLME, DBG_LOUD, ("SecSetPMKID(): PMKIDList[%d].bUsed is TRUE\n", ulIndex) ); - RT_PRINT_STR( COMP_MLME, DBG_LOUD, "SSID: ", pSecInfo->PMKIDList[ulIndex].Ssid.Octet, pSecInfo->PMKIDList[ulIndex].Ssid.Length); - RT_PRINT_DATA( COMP_MLME, DBG_LOUD, "BSSID: ", pSecInfo->PMKIDList[ulIndex].Bssid, 6); - RT_PRINT_DATA( COMP_MLME, DBG_LOUD, "PMKID: ", pSecInfo->PMKIDList[ulIndex].PMKID, connectBssEntry->PMKID.ElementCount); - } - } - - pAdapter->MgntInfo.bExcludeUnencrypted = Params->ConnectParameters.ConnectionSettings.ExcludeUnencrypted; - - // TODO: HiddenNetwork / MFPEnabled / HostFIPSModeEnabled - pMgntInfo->SafeModeEnabled = Params->ConnectParameters.ConnectionSettings.HostFIPSModeEnabled; - - if(pMgntInfo->SafeModeEnabled && !pMgntInfo->pHTInfo->bEnableHT) - pMgntInfo->pStaQos->QosCapability = QOS_DISABLE; - else - pMgntInfo->pStaQos->QosCapability = pMgntInfo->pStaQos->QosCapabilityBackup; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_task_roam(): bExcludeUnencrypted %d HostFIPSModeEnabled %d QosCapability 0x%x\n", pMgntInfo->bExcludeUnencrypted, pMgntInfo->SafeModeEnabled, pMgntInfo->pStaQos->QosCapability)); - - //3 RoamNeededReason - if( Params->ConnectParameters.ConnectionSettings.RoamRequest == TRUE ) - { - AssocStatus = Params->ConnectParameters.ConnectionSettings.RoamNeededReason; - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("RoamNeededReason %d\n", AssocStatus)); - } - - //3 DesiredSSIDList - SsidList.uNumOfEntries = Params->ConnectParameters.SSIDList.ElementCount; - - for( i=0; i< SsidList.uNumOfEntries; i++) - { - SsidList.SSIDs[i].uSSIDLength = Params->ConnectParameters.SSIDList.pElements[i].ElementCount; - CopyMem(SsidList.SSIDs[i].ucSSID, Params->ConnectParameters.SSIDList.pElements[i].pElements, SsidList.SSIDs[i].uSSIDLength); - - RT_PRINT_STR(COMP_MLME, DBG_LOUD, ("Desired SSID \n"), SsidList.SSIDs[i].ucSSID, SsidList.SSIDs[i].uSSIDLength); - } - pNdisCommon->dot11DesiredSSIDList = SsidList; - - //3 Authentication Algorithm - N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(pAdapter, Params->ConnectParameters.AuthenticationAlgorithms.pElements[0]); - - //3 Unicast Cipher Algorithm - N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM(pAdapter, Params->ConnectParameters.UnicastCipherAlgorithms.pElements[0]); - - //3 Multicast Cipher Algorithm - N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM(pAdapter, Params->ConnectParameters.MulticastCipherAlgorithms.pElements[0]); - - - //3 Additional Association Request IEs - if(Params->ConnectParameters.Optional.AssociationRequestVendorIE_IsPresent) - { - if(Params->ConnectParameters.AssociationRequestVendorIE.ElementCount > 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Wdi_Task_Roam(): set association request additional IE\n")); - MgntActSet_AdditionalAssocReqIE(pAdapter, - Params->ConnectParameters.AssociationRequestVendorIE.pElements, - Params->ConnectParameters.AssociationRequestVendorIE.ElementCount - ); - - RT_PRINT_DATA(COMP_MLME, DBG_TRACE, ("Wdi_Task_Roam(): AssociationRequestVendorIE\n"), - Params->ConnectParameters.AssociationRequestVendorIE.pElements, - Params->ConnectParameters.AssociationRequestVendorIE.ElementCount); - } - } - - //3 ActivePhyTypeList - if(Params->ConnectParameters.Optional.ActivePhyTypeList_IsPresent) - { - // TODO: connection can be made only at specified PhyType - } - - //3 DisallowedBSSIDs_IsPresent - if(Params->ConnectParameters.Optional.DisallowedBSSIDs_IsPresent) - { - if(Params->ConnectParameters.DisallowedBSSIDs.ElementCount > 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Wdi_Task_Roam(): set disallowed BSSIDs\n")); - MgntActSet_ExcludedMacAddressList( - pAdapter, - (pu1Byte)Params->ConnectParameters.DisallowedBSSIDs.pElements, - Params->ConnectParameters.DisallowedBSSIDs.ElementCount - ); - - for(; i < Params->ConnectParameters.DisallowedBSSIDs.ElementCount; i++) - { - RT_PRINT_ADDR(COMP_MLME, DBG_TRACE, ("Wdi_Task_Roam(): disallowed BSSID:"), - Params->ConnectParameters.DisallowedBSSIDs.pElements[i].Address); - } - } - } - - //3 AllowedBSSID - if(Params->ConnectParameters.Optional.AllowedBSSIDs_IsPresent) - { - if(Params->ConnectParameters.AllowedBSSIDs.ElementCount > 0) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Wdi_Task_Roam(): set allowed BSSIDs\n")); - PlatformMoveMemory( - pNdisCommon->dot11DesiredBSSIDList, - Params->ConnectParameters.AllowedBSSIDs.pElements, - Params->ConnectParameters.AllowedBSSIDs.ElementCount*sizeof(DOT11_MAC_ADDRESS)); - - for(; i < Params->ConnectParameters.AllowedBSSIDs.ElementCount; i++) - { - RT_PRINT_ADDR(COMP_MLME, DBG_TRACE, "Wdi_Task_Roam(): allowed BSSID:", pNdisCommon->dot11DesiredBSSIDList[i]); - } - } - } - } - - if( pMgntInfo->bMediaConnect || pMgntInfo->bIbssStarter) - { - if( pMgntInfo->mIbss ){ - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Wdi_Task_Roam() => MgntDisconnectIBSS\n") ); - MgntDisconnectIBSS( pAdapter ); - } - - if( pMgntInfo->mAssoc) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Wdi_Task_Roam() => MgntDisconnectAP\n") ); - MgntDisconnectAP(pAdapter, disas_lv_ss); - } - } - - RT_TRACE(COMP_MLME, DBG_LOUD, ("pMgntInfo->PrepareRoamState %d\n", pMgntInfo->PrepareRoamState)); - switch(pMgntInfo->PrepareRoamState) - { - case RT_PREPARE_ROAM_NORMAL_ROAM_POOR_LINK: - MgntLinkStatusSetRoamingState(pAdapter, 0, RT_ROAMING_BY_DISCONNECT_POOR_LINK, ROAMINGSTATE_SCANNING); - break; - case RT_PREPARE_ROAM_DEAUTH_DISASSOC: - MgntLinkStatusSetRoamingState(pAdapter, 0, RT_ROAMING_BY_DEAUTH, ROAMINGSTATE_SCANNING); - break; - case RT_PREPARE_ROAM_UNSPECIFIED: - case RT_PREPARE_ROAM_NORMAL_ROAM_LOAD_BALANCING: - case RT_PREPARE_ROAM_INSUFFICIENT_CAPACITY: - case RT_PREPARE_ROAM_DIRECT_ROAM: - case RT_PREPARE_ROAM_FIRST_ASSOCIATION: - case RT_PREPARE_ROAM_ROAM_FROM_WAN: - case RT_PREPARE_ROAM_ROAM_TO_WAN: - case RT_PREPARE_ROAM_NORMAL_ROAM_BETTER_AP: - MgntLinkStatusSetRoamingState(pAdapter, 0, RT_ROAMING_NORMAL, ROAMINGSTATE_SCANNING); - break; - default: - RT_TRACE(COMP_MLME, DBG_WARNING, ("No matched roaming state\n")); - break; - } - - pMgntInfo->bPrepareRoaming = FALSE; - pMgntInfo->PrepareRoamState = RT_PREPARE_ROAM_NONE; - pMgntInfo->PrepareRoamingCount = 0; - - DrvIFIndicateRoamingStart(pAdapter); - - if( MgntRoamRetry(pAdapter, FALSE) == FALSE ) - ndisStatus = NDIS_STATUS_FAILURE; - else - ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== Wdi_Task_Roam()\n")); - return ndisStatus; -} - - -NDIS_STATUS -WdiSimpleSetProperty( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG BytesRead = 0, BytesNeeded = 0; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - // We complete the OID. Need to populate some fields - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - switch(pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid) - { - case OID_WDI_SET_ADAPTER_CONFIGURATION: - N6InitializeNative80211MIBs(pAdapter); - pMgntInfo->NdisVersion = MgntTranslateNdisVersionToRtNdisVersion(pNdisCommon->NdisVersion); - break; - } - - return ndisStatus; -} - -// -// Translate from RT_PS_MODE to WDI_POWER_SAVE_LEVEL -// 2005.02.15, by rcnjko. -// -int -TranslatePsToWdiPs( - IN POWER_LEVEL_CONFIG PowerMode - ) -{ - WDI_POWER_SAVE_LEVEL WdiPsMode; - - switch(PowerMode) - { - case POWER_SAVING_NO_POWER_SAVING: - WdiPsMode = WDI_POWER_SAVE_LEVEL_NO_POWER_SAVE; - break; - case POWER_SAVING_FAST_PSP: - WdiPsMode = WDI_POWER_SAVE_LEVEL_FAST_PSP; - break; - case POWER_SAVING_MAX_PSP: - WdiPsMode = WDI_POWER_SAVE_LEVEL_MAX_PSP; - break; - case POWER_SAVING_MAXIMUM_LEVEL: - WdiPsMode = WDI_POWER_SAVE_LEVEL_MAXIMUM_LEVEL; - break; - default: - RT_TRACE(COMP_DBG, DBG_SERIOUS, ("TranslatePsToWdiPs(): Unknown PowerMode: 0x%X !!!\n", PowerMode)); - WdiPsMode = WDI_POWER_SAVE_LEVEL_NO_POWER_SAVE; - break; - } - - return WdiPsMode; -} - - -NDIS_STATUS -Wdi_Set_Add_Cipher_Keys( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PTLV_WDI_STRUCT pTlvData = NULL; - ULONG BytesProcessed = 0; - ULONG InputBufferLength = 0; - ULONG Prefix = sizeof(WDI_MESSAGE_HEADER); - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - WDI_SET_ADD_CIPHER_KEYS_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetAddCipherKeys; - WDI_SET_ADD_CIPHER_KEYS_CONTAINER CipherKey = {0}; - - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - BOOLEAN bDefaultKey = TRUE; - u1Byte MacAddress[ETHERNET_ADDRESS_LENGTH] = {0x00,0x00,0x00,0x00,0x00,0x00}; - RT_ENC_ALG rtEncAlgo = RT_ENC_ALG_NO_CIPHER; - ULONG cipherAlgo = 0; - ULONG direction = WDI_CIPHER_KEY_DIRECTION_BOTH; - u1Byte static_key = TRUE; - ULONG cipherType = WDI_CIPHER_KEY_TYPE_PAIRWISE_KEY; - u8Byte KeyRSC = 0; - u4Byte KeyLen = 0; - pu1Byte pKeyMaterial = NULL; - u1Byte pTkipKeyMaterial[TKIP_KEY_LEN]; - BOOLEAN bValidKeyRSC = FALSE; - u4Byte KeyIndex = 0; - u4Byte i = 0; - - FunctionIn(COMP_OID_SET); - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + Prefix); - - if( Params ) - { - for(i = 0; i < Params->SetCipherKey.ElementCount; i++) - { - CipherKey = Params->SetCipherKey.pElements[i]; - if(CipherKey.Optional.PeerMacAddress_IsPresent) - { - cpMacAddr(MacAddress, CipherKey.PeerMacAddress.Address); - bDefaultKey = FALSE; - - RT_PRINT_ADDR(COMP_SCAN, DBG_LOUD, "WDI_TLV_PEER_MAC_ADDRESS(): ", MacAddress); - } - - if(CipherKey.Optional.CipherKeyID_IsPresent) - { - KeyIndex = CipherKey.CipherKeyID.CipherKeyID; - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_CIPHER_KEY_ID 0x%x\n", KeyIndex)); - } - - { - cipherAlgo = CipherKey.CipherKeyTypeInfo.CipherAlgorithm; - direction = CipherKey.CipherKeyTypeInfo.Direction; - static_key = CipherKey.CipherKeyTypeInfo.Static; - cipherType = CipherKey.CipherKeyTypeInfo.KeyType; // TODO: [WDI] unknown setting - - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_CIPHER_KEY_TYPE_INFO cipherAlgo 0x%x direction 0x%x static_key 0x%x cipherType 0x%x \n", cipherAlgo, direction, static_key, cipherType)); - - switch(cipherAlgo) - { - case WDI_CIPHER_ALGO_WEP: - rtEncAlgo = RT_ENC_ALG_WEP; - break; - - case WDI_CIPHER_ALGO_WEP40: - rtEncAlgo = RT_ENC_ALG_WEP40; - break; - - case WDI_CIPHER_ALGO_WEP104: - rtEncAlgo = RT_ENC_ALG_WEP104; - break; - - case WDI_CIPHER_ALGO_TKIP: - rtEncAlgo = RT_ENC_ALG_TKIP; - break; - - case WDI_CIPHER_ALGO_CCMP: - rtEncAlgo = RT_ENC_ALG_AESCCMP; - break; - - case WDI_CIPHER_ALGO_BIP: - break; - - default: - break; - } - } - - if(CipherKey.Optional.ReceiveSequenceCount_IsPresent) - { - PlatformMoveMemory(&KeyRSC, CipherKey.ReceiveSequenceCount.ReceiveSequenceCount, 6); -// RT_TRACE(COMP_SEC, DBG_LOUD, ("WIFI_TLV_CIPHER_KEY_RECEIVE_SEQUENCE_COUNT 0x%"i64fmt"x\n", KeyRSC)); - } - - if(CipherKey.Optional.CCMPKey_IsPresent) - { - KeyLen = CipherKey.CCMPKey.ElementCount; - pKeyMaterial = CipherKey.CCMPKey.pElements; - bValidKeyRSC = TRUE; - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD,("WDI_TLV_CIPHER_KEY_CCMP_KEY\n"),pKeyMaterial,KeyLen); - } - - if(CipherKey.Optional.TKIPInfo_IsPresent) - { - // Tkip Enc Key(16) + STA Rx MIC Key(8) + STA Tx MIC Key(8). - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, ("TKIPKey \n"), CipherKey.TKIPInfo.TKIPKey.pElements, CipherKey.TKIPInfo.TKIPKey.ElementCount); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, ("TKIPMIC \n"), CipherKey.TKIPInfo.TKIPMIC.pElements, CipherKey.TKIPInfo.TKIPMIC.ElementCount); - - PlatformMoveMemory(pTkipKeyMaterial, CipherKey.TKIPInfo.TKIPKey.pElements, CipherKey.TKIPInfo.TKIPKey.ElementCount); - PlatformMoveMemory(pTkipKeyMaterial+CipherKey.TKIPInfo.TKIPKey.ElementCount, CipherKey.TKIPInfo.TKIPMIC.pElements, CipherKey.TKIPInfo.TKIPMIC.ElementCount); - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD, ("pTkipKeyMaterial \n"), pTkipKeyMaterial, TKIP_KEY_LEN); - - pKeyMaterial = pTkipKeyMaterial; - KeyLen = CipherKey.TKIPInfo.TKIPKey.ElementCount + CipherKey.TKIPInfo.TKIPMIC.ElementCount; - - bValidKeyRSC = TRUE; - RT_PRINT_DATA(COMP_SEC, DBG_LOUD,("WDI_TLV_CIPHER_KEY_TKIP_KEY_INFO\n"),pKeyMaterial,KeyLen); - } - - if(CipherKey.Optional.BIPKey_IsPresent) - { - if( CipherKey.BIPKey.ElementCount == BIP_KEY_LEN) - { - PlatformMoveMemory( pSecInfo->BIPKeyBuffer ,CipherKey.BIPKey.pElements, CipherKey.BIPKey.ElementCount); - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("BIP key length %d\n", CipherKey.BIPKey.ElementCount)); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD,("WDI_TLV_CIPHER_KEY_BIP_KEY\n"),CipherKey.BIPKey.pElements,CipherKey.BIPKey.ElementCount); - PlatformMoveMemory(pSecInfo->IPN, &KeyRSC, 6); - RT_PRINT_DATA(COMP_SEC, DBG_LOUD,("Wdi_Set_Add_Cipher_Keys(): BIP IPN:\n"), pSecInfo->IPN, 6); - } - else - { - ndisStatus = NDIS_STATUS_INVALID_DATA; - } - - return ndisStatus; - } - - if(CipherKey.Optional.WEPKey_IsPresent) - { - if(rtEncAlgo == RT_ENC_ALG_WEP) - { - if (CipherKey.WEPKey.ElementCount == NATIVE_802_11_WEP40_KEY_LENGTH) - { - rtEncAlgo = RT_ENC_ALG_WEP40; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Set_Add_Cipher_Keys(): DOT11_CIPHER_ALGO_WEP40\n") ); - } - else if (CipherKey.WEPKey.ElementCount == NATIVE_802_11_WEP104_KEY_LENGTH) - { - rtEncAlgo = RT_ENC_ALG_WEP104; - RT_TRACE( COMP_SEC, DBG_LOUD, ("Wdi_Set_Add_Cipher_Keys(): DOT11_CIPHER_ALGO_WEP104\n") ); - } - } - - KeyLen = CipherKey.WEPKey.ElementCount; - pKeyMaterial = CipherKey.WEPKey.pElements; - - RT_PRINT_DATA(COMP_SEC, DBG_LOUD,("WDI_TLV_CIPHER_KEY_WEP_KEY\n"),pKeyMaterial,KeyLen); - } - - RT_TRACE(COMP_SEC, DBG_LOUD,("==>CipherType %s\n", (WDI_CIPHER_KEY_TYPE_PAIRWISE_KEY == cipherType)?"WDI_CIPHER_KEY_TYPE_PAIRWISE_KEY":( (WDI_CIPHER_KEY_TYPE_GROUP_KEY == cipherType)?"WDI_CIPHER_KEY_TYPE_GROUP_KEY":"WDI_CIPHER_KEY_TYPE_IGTK"))); - if(0 == i && !ACTING_AS_AP(pAdapter)) - { - if(WDI_CIPHER_KEY_TYPE_PAIRWISE_KEY == cipherType) - { - pSecInfo->PairwiseEncAlgorithm = rtEncAlgo; - } - else if(WDI_CIPHER_KEY_TYPE_GROUP_KEY == cipherType) - { - pSecInfo->GroupEncAlgorithm = rtEncAlgo; - } - RT_TRACE(COMP_SEC, DBG_LOUD,("==> pSecInfo->PairwiseEncAlgorithm=0x%x\n",pSecInfo->PairwiseEncAlgorithm)); - - } - { - if( ACTING_AS_AP(pAdapter)) - { - if(bDefaultKey) - ndisStatus = Wdi_Task_SetApCipherDefaultKey(pAdapter, cipherAlgo, KeyIndex, KeyLen, pKeyMaterial); - else - ndisStatus = Wdi_Task_SetApCipherKeyMappingKey(pAdapter, MacAddress, cipherAlgo, KeyLen, pKeyMaterial); - } - else if( !pAdapter->MgntInfo.bRSNAPSKMode ) - { - if(!bDefaultKey) - { - if( !(rtEncAlgo == RT_ENC_ALG_WEP40 || rtEncAlgo == RT_ENC_ALG_WEP104 ) ) - { - MgntActSet_802_11_ADD_KEY( - pAdapter, - rtEncAlgo, - (PAIRWISE_KEYIDX | ((bValidKeyRSC) ? ADD_KEY_IDX_RSC: 0) ), - KeyLen, - pKeyMaterial, - MacAddress, - FALSE, // IsGroupTransmitKey. - FALSE, // IsGroup. - KeyRSC); - } - else - { - for(i=0;i<4;i++){ - // Save for Reconnent for Ad-hoc ,by CCW -// PlatformMoveMemory( pNdisCommon->RegDefaultKeyBuf[i], pKeyMaterial, KeyLen); -// pNdisCommon->RegDefaultKey[i].Length = (u2Byte)KeyLen; - MgntActSet_802_11_ADD_KEY( - pAdapter, - rtEncAlgo, - i, - KeyLen, - pKeyMaterial, - MacAddress, - FALSE, // IsGroupTransmitKey. - FALSE, // IsGroup. - KeyRSC); - - if( rtEncAlgo == RT_ENC_ALG_WEP40 ) - { - PlatformMoveMemory( pNdisCommon->RegDefaultKeyBuf[i], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKey[i].Length = (u2Byte)KeyLen; - } - else if(rtEncAlgo == RT_ENC_ALG_WEP104) - { - PlatformMoveMemory( pNdisCommon->RegDefaultKeyWBuf[i], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKeyW[i].Length =(u2Byte)KeyLen; - } - - } - } - } - else - { - pSecInfo->GroupTransmitKeyIdx = (u1Byte)KeyIndex; //by tynli. Suggested by CCW. - - RT_TRACE( COMP_SEC ,DBG_LOUD,( "====> pSecInfo->GroupTransmitKeyIdx = %d\n ",KeyIndex)); - MgntActSet_802_11_ADD_KEY( - pAdapter, - rtEncAlgo, - ( KeyIndex | ((bValidKeyRSC) ? ADD_KEY_IDX_RSC: 0) ), - KeyLen, - pKeyMaterial, - MacAddress, // Only be a valid unicast address in RSNA IBSS case. - FALSE, // IsGroupTransmitKey, since DefaultTransmitKeyIdx and GroupTransmitKeyIdx is determined by OID_DOT11_CIPHER_DEFAULT_KEY_ID, we just set it to FALSE. - TRUE, // IsGroup. - KeyRSC); - - i = (KeyIndex & 0x00000003); - if( rtEncAlgo == RT_ENC_ALG_WEP40 ) - { - PlatformMoveMemory( pNdisCommon->RegDefaultKeyBuf[i], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKey[i].Length = (u2Byte)KeyLen; - } - else if(rtEncAlgo == RT_ENC_ALG_WEP104) - { - PlatformMoveMemory( pNdisCommon->RegDefaultKeyWBuf[i], pKeyMaterial, KeyLen); - pNdisCommon->RegDefaultKeyW[i].Length =(u2Byte)KeyLen; - } - } - PlatformRequestPreAuthentication( pAdapter, PRE_AUTH_INDICATION_REASON_ASSOCIATION ); - - } - else - { - // TODO: [WDI] security for Ad-hoc mode - - } - } - } - - } - else - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("ParseWdiAddCipherkey FAIL!! \n")); - } - - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Set_Delete_Cipher_Keys( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PTLV_WDI_STRUCT pTlvData = NULL; - ULONG BytesProcessed = 0; - ULONG InputBufferLength = 0; - ULONG Prefix = sizeof(WDI_MESSAGE_HEADER); - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - WDI_SET_DELETE_CIPHER_KEYS_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetDeleteDefaultCipherKeys; - WDI_SET_DELETE_CIPHER_KEYS_CONTAINER CipherKeyInfo = {0}; - - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - BOOLEAN bDefaultKey = TRUE; - u1Byte MacAddress[ETHERNET_ADDRESS_LENGTH] = {0x00,0x00,0x00,0x00,0x00,0x00}; - RT_ENC_ALG rtEncAlgo = RT_ENC_ALG_NO_CIPHER; - u4Byte KeyIndex = 0; - ULONG cipherAlgo = 0; - ULONG direction = WDI_CIPHER_KEY_DIRECTION_BOTH; - u1Byte static_key = TRUE; - ULONG cipherType = WDI_CIPHER_KEY_TYPE_PAIRWISE_KEY; - - u4Byte i = 0; - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + Prefix); - - if( Params ) - { - for(i = 0; i < Params->CipherKeyInfo.ElementCount; i++) - { - CipherKeyInfo = Params->CipherKeyInfo.pElements[i]; - if(CipherKeyInfo.Optional.PeerMacAddress_IsPresent) - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_PEER_MAC_ADDRESS\n")); - cpMacAddr(MacAddress, CipherKeyInfo.PeerMacAddress.Address); - bDefaultKey = FALSE; - } - - if(CipherKeyInfo.Optional.CipherKeyID_IsPresent) - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_CIPHER_KEY_ID\n")); - KeyIndex = CipherKeyInfo.CipherKeyID.CipherKeyID; - } - - { - cipherAlgo = CipherKeyInfo.CipherKeyTypeInfo.CipherAlgorithm; - direction = CipherKeyInfo.CipherKeyTypeInfo.Direction; - static_key = CipherKeyInfo.CipherKeyTypeInfo.Static; - cipherType = CipherKeyInfo.CipherKeyTypeInfo.KeyType; // TODO: [WDI] unknown setting - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("cipherAlgo 0x%x\n", cipherAlgo)); - - switch(cipherAlgo) - { - case WDI_CIPHER_ALGO_WEP: - rtEncAlgo = RT_ENC_ALG_WEP; - break; - - case WDI_CIPHER_ALGO_WEP40: - rtEncAlgo = RT_ENC_ALG_WEP40; - break; - - case WDI_CIPHER_ALGO_WEP104: - rtEncAlgo = RT_ENC_ALG_WEP104; - break; - - case WDI_CIPHER_ALGO_TKIP: - rtEncAlgo = RT_ENC_ALG_TKIP; - break; - - case WDI_CIPHER_ALGO_CCMP: - rtEncAlgo = RT_ENC_ALG_AESCCMP; - break; - - case WDI_CIPHER_ALGO_BIP: - break; - - default: - break; - } - } - - RT_TRACE(COMP_SEC, DBG_LOUD, ("[WDI] [Property] WDI_SET_DELETE_CIPHER_KEYS: delete Key\n")); - - { - // - // 061028, rcnjko: WDK said we shall ignore AlgorithmId if bDelete is set, - // so we use GroupEncAlgorithm instead. - // - if( KeyIndex > 3 && KeyIndex < 6 ) - { // 802.11w BIP key Key index 5 or 6 - - PlatformZeroMemory(pSecInfo->BIPKeyBuffer, MAX_KEY_LEN); - } - else if( !pAdapter->MgntInfo.bRSNAPSKMode) - { - MgntActSet_802_11_REMOVE_KEY( - pAdapter, - rtEncAlgo, - KeyIndex, - MacAddress, - TRUE); // IsGroup. - } - else - { - if(!MgntActSet_RSNA_REMOVE_DEAULT_KEY( - pAdapter, - KeyIndex, - MacAddress)) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [WDI] Property WIFI_SET_DELETE_CIPHER_KEYS, MgntActSet_RSNA_REMOVE_DEAULT_KEY return FALSE !!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - } - } - } - - } - else if(WDI_TLV_DELETE_CIPHER_KEY_INFO== pTlvData->Type) - { - InputBufferLength = pTlvData->Length; - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pTlvData->Value); - Prefix += 4; - - while(BytesProcessed < InputBufferLength) - { - // Parse Type - switch(pTlvData->Type) - { - default: - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("unknown TLV 0x%x\n", pTlvData->Type)); - } - break; - - case WDI_TLV_PEER_MAC_ADDRESS: - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_PEER_MAC_ADDRESS\n")); - cpMacAddr(MacAddress, pTlvData->Value); - bDefaultKey = FALSE; - } - break; - - case WDI_TLV_CIPHER_KEY_ID: - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_CIPHER_KEY_ID\n")); - KeyIndex = (*((pu4Byte)(pTlvData->Value))); - } - break; - - case WDI_TLV_CIPHER_KEY_TYPE_INFO: - { - RT_TRACE(COMP_SEC, DBG_LOUD, ("WDI_TLV_CIPHER_KEY_TYPE_INFO\n")); - cipherAlgo = (*((pu4Byte)(pTlvData->Value))); - direction = (*((pu4Byte)(pTlvData->Value + 4))); - static_key = (*(pu1Byte)(pTlvData->Value + 8)); - cipherType = (*((pu4Byte)(pTlvData->Value + 9))); // TODO: [WDI] unknown setting - - if(WDI_CIPHER_ALGO_CCMP == cipherAlgo) - rtEncAlgo = RT_ENC_ALG_AESCCMP; - else - rtEncAlgo = RT_ENC_ALG_NO_CIPHER; - } - break; - } - // Parse Length - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Length = %d\n", pTlvData->Length)); - - // Parse Content - - BytesProcessed += (4 + pTlvData->Length); - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + Prefix + BytesProcessed); - } - - RT_TRACE(COMP_SEC, DBG_LOUD, ("[WDI] [Property] WDI_SET_DELETE_CIPHER_KEYS: delete Key\n")); - - // - // 061028, rcnjko: WDK said we shall ignore AlgorithmId if bDelete is set, - // so we use GroupEncAlgorithm instead. - // - rtEncAlgo = pSecInfo->GroupEncAlgorithm; - if( KeyIndex > 3 && KeyIndex < 6 ) - { // 802.11w BIP key Key index 5 or 6 - - PlatformZeroMemory(pSecInfo->BIPKeyBuffer, MAX_KEY_LEN); - } - else if( !pAdapter->MgntInfo.bRSNAPSKMode) - { - MgntActSet_802_11_REMOVE_KEY( - pAdapter, - rtEncAlgo, - KeyIndex, - MacAddress, - TRUE); // IsGroup. - } - else - { - if(!MgntActSet_RSNA_REMOVE_DEAULT_KEY( - pAdapter, - KeyIndex, - MacAddress)) - { - RT_TRACE( COMP_OID_SET, DBG_WARNING, (" <- [WDI] Property WDI_SET_DELETE_CIPHER_KEYS, MgntActSet_RSNA_REMOVE_DEAULT_KEY return FALSE !!!\n")); - return NDIS_STATUS_INVALID_DATA; - } - } - } - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Default_Key_ID( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG InputBufferLength = 0; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_SECURITY_T pSecInfo = &(pAdapter->MgntInfo.SecurityInfo); - WDI_SET_DEFAULT_KEY_ID_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetDefaultKeyId; - InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - u2Byte KeyId; - - if( Params ) - { - // Get default key id to set. - KeyId = (u2Byte)Params->DefaultKeyIdParameters.KeyID; - - // Set default key id: 0 ~ 3. - KeyId &= 0x3; - // The following code will cause 8187 failed to link to AP. - pSecInfo->DefaultTransmitKeyIdx = (u1Byte)KeyId; - pNdisCommon->RegDefaultKeyId = (u1Byte)KeyId; - - RT_TRACE_F(COMP_SEC, DBG_LOUD, ("KeyId 0x%x\n", KeyId)); - } - return ndisStatus; - } - - -NDIS_STATUS -Wdi_Set_Receive_Packet_Filter( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG BytesRead = 0, BytesNeeded = 0; - - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - ULONG InputBufferLength - = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength;; - WDI_SET_RECEIVE_PACKET_FILTER_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetReceivePacketFilter; - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("sizeof(WDI_MESSAGE_HEADER) %d, InputBufferLength: %d\n", sizeof(WDI_MESSAGE_HEADER), pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength)); - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "Information buffer:\n", pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - - ndisStatus = N6C_SET_OID_GEN_CURRENT_PACKET_FILTER(pAdapter, - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid, - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength, - &BytesRead, - &BytesNeeded); - - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Network_List_Offload( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - WDI_NETWORK_LIST_OFFLOAD_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramNetworkListOffload; - PWDI_NETWORK_LIST_OFFLOAD_INFO pWdiNLO = NULL; - PWDI_SSID_OFFLOAD_CONTAINER pOffloadItem = NULL; - PWDI_CHANNEL_MAPPING_ENTRY pChannelItem = NULL; - PWDI_ALGO_PAIRS pAlgorithmItem = NULL; - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_NDIS6_COMMON pNdisCommon = pDefaultAdapter->pNdisCommon; - PRT_NLO_INFO pNLOInfo = &(pDefaultAdapter->MgntInfo.NLOInfo); - u4Byte ChannelIndex = 0; - u4Byte Index = 0; - u4Byte ItemCnt = 0; - u1Byte i = 0; - - RT_TRACE( COMP_POWER, DBG_LOUD , (" ===>Wdi_Set_Network_List_Offload\n") ); - - if( Params ) - { - pWdiNLO = &(Params->NetworkListOffload); - - if( pWdiNLO->Optional.SsidOffload_IsPresent == 0 ) - { - // Stop NLO mode !! - pNLOInfo->NumDot11OffloadNetwork = 0; - pNLOInfo->FastScanIterations = 0; - pNLOInfo->FastScanPeriod = 0; - pNLOInfo->SlowScanPeriod = 0; - pNdisCommon->ScanPeriod = 0; - - RT_TRACE( COMP_POWER, DBG_LOUD , (" ===>SsidOffload_IsPresent == 0 \n") ); - return NDIS_STATUS_SUCCESS; - } - else - { -// RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "NLO INFO: \n", InformationBuffer, sizeof(DOT11_OFFLOAD_NETWORK_LIST_INFO)); - pNLOInfo->NumDot11OffloadNetwork = pWdiNLO->SsidOffload.ElementCount; - pNLOInfo->FastScanIterations = pWdiNLO->NetworkListOffloadConfig.FastScanIterations; - pNLOInfo->FastScanPeriod = pWdiNLO->NetworkListOffloadConfig.FastScanPeriodinSeconds ; - pNLOInfo->SlowScanPeriod = pWdiNLO->NetworkListOffloadConfig.SlowScanPeriodinSeconds ; - - - RT_TRACE(COMP_POWER , DBG_LOUD , (" NumDot11OffloadNetwork : %d\n", pNLOInfo->NumDot11OffloadNetwork) ); - RT_TRACE(COMP_POWER , DBG_LOUD , (" FastScanIterations : %d\n", pNLOInfo->FastScanIterations) ); - RT_TRACE(COMP_POWER , DBG_LOUD , (" FastScanPeriod : %d sec\n", pNLOInfo->FastScanPeriod) ); - RT_TRACE(COMP_POWER , DBG_LOUD , (" SlowScanPeriod : %d sec\n", pNLOInfo->SlowScanPeriod) ); - - pNdisCommon->bNLOActiveScan = TRUE; - pNdisCommon->bFilterHiddenAP = FALSE; - - // Start the NLO scan when the first PlatformHandleNLOnScanRequest is called - pNdisCommon->ScanPeriod = pNLOInfo->FastScanPeriod; - } - - for( ItemCnt=0, Index=0 ; ItemCntSsidOffload.ElementCount ; ++ItemCnt) - { - pOffloadItem = &(pWdiNLO->SsidOffload.pElements[ItemCnt]); - pChannelItem = pOffloadItem->ChannellHintList.pElements; - - for( i=0 ; iUnicastAlgorithms.ElementCount ; ++i, ++Index) - { - // Copy SSID - CopySsid( pNLOInfo->dDot11OffloadNetworkList[Index].ssidbuf, - pNLOInfo->dDot11OffloadNetworkList[Index].ssidlen, - pOffloadItem->SsidToScan.pElements, - pOffloadItem->SsidToScan.ElementCount); - - RT_TRACE(COMP_POWER, DBG_LOUD, ("The %u OFFLOAD NETWORK SSID: %s\n", Index+1, pNLOInfo->dDot11OffloadNetworkList[Index].ssidbuf)); - - pAlgorithmItem = &(pOffloadItem->UnicastAlgorithms.pElements[i]); - - // Set chuiper !! - switch( pAlgorithmItem->CipherAlgorithm ) - { - case WDI_CIPHER_ALGO_NONE : - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_NONE; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = 0; - break; - case WDI_CIPHER_ALGO_WEP40 : - case WDI_CIPHER_ALGO_WEP104 : - case WDI_CIPHER_ALGO_WEP: - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_NONE; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = 0x0; - break; - case WDI_CIPHER_ALGO_TKIP : - if( pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_WPA || - pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_WPA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA_TKIP; - } - else if( pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_RSNA || - pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_RSNA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA2; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA2_TKIP; - } - else - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA_TKIP; - RT_TRACE( COMP_POWER, DBG_LOUD , (" ===>NLO Not define TKIP\n") ); - } - break; - case WDI_CIPHER_ALGO_CCMP : - if( pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_WPA || - pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_WPA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA_AES; - } - else if( pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_RSNA || - pAlgorithmItem->AuthAlgorithm == WDI_AUTH_ALGO_RSNA_PSK ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA2; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA2_AES; - } - else - { - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_WPA2; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = WPA2_AES; - RT_TRACE( COMP_POWER, DBG_LOUD , (" ===>NLO Not define AES\n") ); - } - break; - default : - pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl = RT_SEC_LVL_NONE; - pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy = TRUE; - pNLOInfo->dDot11OffloadNetworkList[Index].chiper = 0; - RT_TRACE( COMP_POWER, DBG_LOUD , (" ===> Unknow UnicastCipher : %x\n", pAlgorithmItem->CipherAlgorithm) ); - break; - } - - RT_TRACE(COMP_POWER , DBG_LOUD , (" Seclvl : %d\n", pNLOInfo->dDot11OffloadNetworkList[Index].SecLvl) ); - RT_TRACE(COMP_POWER , DBG_LOUD , (" bPrivacy : %d\n", pNLOInfo->dDot11OffloadNetworkList[Index].bPrivacy) ); - RT_TRACE(COMP_POWER , DBG_LOUD , (" chiper : %d\n", pNLOInfo->dDot11OffloadNetworkList[Index].chiper) ); - - RT_TRACE( COMP_POWER, DBG_LOUD, (" Channel Hint:\n")); - - // Save channel info - // DOT11_MAX_CHANNEL_HINTS 4 - for( ChannelIndex = 0 ; ChannelIndex < pOffloadItem->ChannellHintList.ElementCount ; ChannelIndex++ ) - { - pNLOInfo->dDot11OffloadNetworkList[Index].channelNumberHit[ChannelIndex] = pChannelItem[ChannelIndex].ChannelNumber; - RT_TRACE( COMP_POWER, DBG_LOUD, (" %u", pNLOInfo->dDot11OffloadNetworkList[Index].channelNumberHit[ChannelIndex])); - } - - RT_TRACE( COMP_POWER, DBG_LOUD, ("\n")); - - // Show Entry information !! - RT_TRACE( COMP_POWER, DBG_LOUD , (" ===> Show NLO info Index (%x):\n", Index) ); - RT_PRINT_STR(COMP_POWER, DBG_LOUD, (" SSID"), pNLOInfo->dDot11OffloadNetworkList[Index].ssidbuf, pNLOInfo->dDot11OffloadNetworkList[Index].ssidlen); - RT_TRACE( COMP_POWER , DBG_LOUD , (" chiper : %x \n", pNLOInfo->dDot11OffloadNetworkList[Index].chiper) ); - } - } - } - else - { - RT_TRACE(COMP_POWER, DBG_SERIOUS, ("Wdi_Set_Network_List_Offload(): Tlv Params is NULL\n")); - ndisStatus = NDIS_STATUS_FAILURE; - } - - RT_TRACE( COMP_POWER, DBG_LOUD , (" <===Wdi_Set_Network_List_Offload\n") ); - - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Set_Privacy_Exemption_List( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG BytesRead = 0, BytesNeeded = 0; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - PNDIS_OID_REQUEST pNdisRequest = pOidHandle->pNdisRequest; - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - ULONG InputBufferLength - = pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - WDI_SET_PRIVACY_EXEMPTION_LIST_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetPrivacyExemptionList; - WDI_PRIVACY_EXEMPTION_LIST_CONTAINER PrivacyList = {0}; - u4Byte i = 0; - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("sizeof(WDI_MESSAGE_HEADER) %d, InputBufferLength: %d\n", sizeof(WDI_MESSAGE_HEADER), pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength)); - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "Information buffer:\n", pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - - - if( Params && Params->Optional.PrivacyExemptionEntry_IsPresent ) - { - pNdisCommon->PrivacyExemptionEntrieNum = Params->PrivacyExemptionEntry.ElementCount; - for(i = 0; i < Params->PrivacyExemptionEntry.ElementCount; i++) - { - PrivacyList = Params->PrivacyExemptionEntry.pElements[i]; - pNdisCommon->PrivacyExemptionEntries[i].usEtherType = - PrivacyList.EtherType; - pNdisCommon->PrivacyExemptionEntries[i].usExemptionActionType = - PrivacyList.ExemptionActionType; - pNdisCommon->PrivacyExemptionEntries[i].usExemptionPacketType = - PrivacyList.ExemptionPacketType; - } - - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, - "Privacy exempt list:", - pNdisCommon->PrivacyExemptionEntries, - (int)(pNdisCommon->PrivacyExemptionEntrieNum * sizeof(DOT11_PRIVACY_EXEMPTION))); - - - } - - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Set_Power_State( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - ndisStatus = N6SdioWdi_Mgnt_SetPower(pAdapter, pOidHandle); - - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Abort_Task( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER) pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - ULONG InputBufferLength - = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - - WDI_TASK_ABORT_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramAbort; - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - - if( Params ) - { - if(RT_STATUS_SUCCESS != OidHandle_Cancel(pAdapter, Params->CancelParameters.OriginalTaskOID, Params->CancelParameters.OriginalTransactionId, Params->CancelParameters.OriginalPortId)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_Abort_Task(): failed to abort this task\n")); - ndisStatus = NDIS_STATUS_FAILURE; - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_Abort_Task(): Cancel Oid:%04x, TransactionId:%04x, PortId:%d\n", Params->CancelParameters.OriginalTaskOID, Params->CancelParameters.OriginalTransactionId, Params->CancelParameters.OriginalPortId)); - } - else - { - ndisStatus = NDIS_STATUS_FAILURE; - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Wdi_Abort_Task(): failed to ParseWdiAbortTask\n")); - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_Abort_Task()\n")); - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Add_Wol_Pattern( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER) pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - WDI_SET_ADD_WOL_PATTERN_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetAddWolPattern; - WDI_PACKET_PATTERN_CONTAINER *pPatternElements; - WDI_IPv4_TCP_SYNC_CONTAINER *pIPv4Elements; - WDI_IPv6TCP_SYNC_CONTAINER *pIPv6Elements; - - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - u1Byte WoLBitMapPatternMask[MAX_WOL_BIT_MASK_SIZE]; - u1Byte WoLBitMapPatternContent[MAX_WOL_PATTERN_SIZE]; - u1Byte WoLBitMapPattern[MAX_WOL_PATTERN_SIZE]; - u1Byte Index, ptnIndex; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> Wdi_Set_Add_Wol_Pattern()\n")); - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - pPSC->bSupportWakeUp = TRUE; - - PlatformZeroMemory(WoLBitMapPatternMask, sizeof(WoLBitMapPatternMask)); - PlatformZeroMemory(WoLBitMapPatternContent, sizeof(WoLBitMapPatternContent)); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Pattern[%u]\n", Params->Optional.WakePacketPattern_IsPresent)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("MagicPacketPattern[%u]\n", Params->Optional.WakePacketMagicPacketPatternId_IsPresent)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Ipv4TcpSync[%u]\n", Params->Optional.WakePacketIpv4TcpSync_IsPresent)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Ipv6TcpSync[%u]\n", Params->Optional.WakePacketIpv6TcpSync_IsPresent)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("EapolRequestIdPatternId[%u]\n", Params->Optional.WakePacketEapolRequestIdPatternId_IsPresent)); - - //2 Wake Packet Pattern - pPatternElements = Params->WakePacketPattern.pElements; - for(Index = 0; Index < Params->WakePacketPattern.ElementCount; Index++, pPatternElements++) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN[%d]:\n", Index)); - - if(pPatternElements->PacketPattern.ElementCount <= MAX_WOL_PATTERN_SIZE) - { - PlatformMoveMemory(WoLBitMapPatternContent, pPatternElements->PacketPattern.pElements, pPatternElements->PacketPattern.ElementCount); - RT_PRINT_DATA( COMP_OID_SET | COMP_POWER, DBG_LOUD, ("WoLBitMapPatternContent...\n"), - WoLBitMapPatternContent, sizeof(WoLBitMapPatternContent)); - } - if(pPatternElements->PacketPatternMask.ElementCount <= MAX_WOL_BIT_MASK_SIZE) - { - PlatformMoveMemory(WoLBitMapPatternMask, pPatternElements->PacketPatternMask.pElements, pPatternElements->PacketPatternMask.ElementCount); - RT_PRINT_DATA( COMP_OID_SET | COMP_POWER, DBG_LOUD, ("WoLBitMapPatternMask...\n"), - WoLBitMapPatternMask, sizeof(WoLBitMapPatternMask)); - } - - //Find the index of the first empty entry. - for(Index = 0; Index < MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter); Index++) - { - if(pPmWoLPatternInfo[Index].PatternId == pPatternElements->WakePacketPatternId) - { - Index = MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter); - break; - } - - if(pPmWoLPatternInfo[Index].PatternId == 0) - break; - } - - if(Index >= MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter)) - { - ndisStatus = NDIS_STATUS_RESOURCES; - RT_TRACE(COMP_POWER, DBG_LOUD, - ("SET OID_PNP_ADD_WOL_PATTERN: Return status(%#X). The number of wake up pattern is more than %d or the pattern Id is exist.\n", - ndisStatus, MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter))); - return ndisStatus; - } - else - { - u1Byte BROADCAST_ADDR[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - u1Byte DONTCARE_ADDR[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - u1Byte MULTICAST_ADDR[2] = {0x33, 0x33}; - - pPmWoLPatternInfo[Index].PatternType = eUnknownType; - pPmWoLPatternInfo[Index].PatternId = pPatternElements->WakePacketPatternId; - pPmWoLPatternInfo[Index].IsUserDefined = 0; - - //packet type. - if(PlatformCompareMemory(WoLBitMapPatternContent, pAdapter->PermanentAddress, sizeof(pAdapter->PermanentAddress)) == 0 ) - { //unicast - //Skip IPv4/IPv6 TCP SYN pattern because it will hit HW bug for the CRC. - // We offload this pattern to FW. - pPmWoLPatternInfo[Index].PatternType = eUnicastPattern; - RT_TRACE(COMP_OID_SET, DBG_LOUD, - ("OID_PM_ADD_WOL_PATTERN: IPv4/IPv6 TCP SYN pattern.\n")); - - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, MULTICAST_ADDR, sizeof(MULTICAST_ADDR)) == 0) - { //Multicast - pPmWoLPatternInfo[Index].PatternType = eMulticastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, BROADCAST_ADDR, sizeof(BROADCAST_ADDR)) == 0 ) - { //broadcast - pPmWoLPatternInfo[Index].PatternType = eBroadcastPattern; - } - else if(PlatformCompareMemory(WoLBitMapPatternContent, DONTCARE_ADDR, sizeof(DONTCARE_ADDR)) == 0 ) - { - pPmWoLPatternInfo[Index].PatternType = eDontCareDA; - } - - { - GetWOLWakeUpPattern(pAdapter, - (pu1Byte)&WoLBitMapPatternMask, - pPatternElements->PacketPatternMask.ElementCount, - (pu1Byte)&WoLBitMapPatternContent, - pPatternElements->PacketPattern.ElementCount, - Index, - FALSE - ); - - pPSC->WoLPatternNum++; - } - } - - } - - //2 Wake Packet Magic Packet - if(Params->WakePacketMagicPacketPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Support magic packet.\n")); - - if(!pPSC->MagicPacketPatternId) - { - pPSC->MagicPacketPatternId = Params->WakePacketMagicPacketPatternId; - pPSC->WoLPktNoPtnNum++; - } - } - - //2 Wake Packet Ipv4 Tcp Sync: Not verify - pIPv4Elements = Params->WakePacketIpv4TcpSync.pElements; - for(Index = 0; Index < Params->WakePacketIpv4TcpSync.ElementCount; Index++, pIPv4Elements++) - { - if(!pPSC->IPv4TcpSynPatternId) - { - pPSC->IPv4TcpSynPatternId = pIPv4Elements->PatternId; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("IPv4 PatternId = %d\n", pIPv4Elements->PatternId)); - pPSC->WoLPktNoPtnNum++; - } - } - - //2 Wake Packet Ipv6 Tcp Sync: Not verify - pIPv6Elements = Params->WakePacketIpv6TcpSync.pElements; - for(Index = 0; Index < Params->WakePacketIpv6TcpSync.ElementCount; Index++, pIPv6Elements++) - { - if(!pPSC->IPv6TcpSynPatternId) - { - pPSC->IPv6TcpSynPatternId = pIPv6Elements->PatternId; - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("IPv6 PatternId = %d\n", pIPv6Elements->PatternId)); - pPSC->WoLPktNoPtnNum++; - } - } - - //2 Wake Packet Eapol Request - if(Params->WakePacketEapolRequestIdPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_WOL_PATTERN: Support EapolRequestIdMessage.\n")); - - if(!pPSC->EapolRequestIdMessagePatternId) - { - pPSC->EapolRequestIdMessagePatternId = Params->WakePacketEapolRequestIdPatternId; - pPSC->WoLPktNoPtnNum++; - } - } - - - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_Set_Add_Wol_Pattern()\n")); - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Set_Remove_Wol_Pattern( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER) pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - WDI_SET_REMOVE_WOL_PATTERN_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetRemoveWolPattern; - - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PRT_PM_WOL_PATTERN_INFO pPmWoLPatternInfo = &(pPSC->PmWoLPatternInfo[0]); - - u4Byte RemovePatternId = Params->PatternId; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> Wdi_Set_Remove_Wol_Pattern()\n")); - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - - if(RemovePatternId == pPSC->MagicPacketPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove MagicPacket.\n")); - - pPSC->MagicPacketPatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - else if(RemovePatternId == pPSC->EapolRequestIdMessagePatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove EapolRequestIdMessage.\n")); - - pPSC->EapolRequestIdMessagePatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - else if(RemovePatternId == pPSC->IPv4TcpSynPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove IPv4TcpSyn.\n")); - - pPSC->IPv4TcpSynPatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - else if(RemovePatternId == pPSC->IPv6TcpSynPatternId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET_OID_PM_REMOVE_WOL_PATTERN: Remove IPv6TcpSyn.\n")); - - pPSC->IPv6TcpSynPatternId = 0; - pPSC->WoLPktNoPtnNum--; - } - else - { - u1Byte Index; - - for(Index = 0; Index < MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter); Index++) - { - if(pPmWoLPatternInfo[Index].PatternId == RemovePatternId) - break; - } - - if(Index >= MAX_SUPPORT_WOL_PATTERN_NUM(pAdapter)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD,("SET OID_PM_REMOVE_WOL_PATTERN: Cannot find the wake up pattern Id(%08X).\n", RemovePatternId)); - } - else - { - //Reset the structure and set WFCRC register to non-zero value. - pPmWoLPatternInfo[Index].PatternId = 0; - PlatformZeroMemory(pPmWoLPatternInfo[Index].Mask, sizeof(pPmWoLPatternInfo[Index].Mask)); - pPmWoLPatternInfo[Index].CrcRemainder = 0xffff; - pPmWoLPatternInfo[Index].IsPatternMatch = 0; - pPmWoLPatternInfo[Index].IsSupportedByFW = 0; - - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_WF_MASK, (pu1Byte)(&Index)); - pAdapter->HalFunc.SetHwRegHandler(pAdapter, HW_VAR_WF_CRC, (pu1Byte)(&Index)); - pPmWoLPatternInfo[Index].HwWFMIndex = 0xff; // reset the value after clear HW/CAM entry. - - pPSC->WoLPatternNum--; - } - } - - // Check WoWLAN support - if(pPSC->WoLPktNoPtnNum + pPSC->WoLPatternNum) - pPSC->bSupportWakeUp = TRUE; - else - pPSC->bSupportWakeUp = FALSE; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("WoLPktNoPtnNum = %d.\n", pPSC->WoLPktNoPtnNum)); - RT_TRACE(COMP_POWER, DBG_LOUD, ("WoLPatternNum = %d.\n", pPSC->WoLPatternNum)); - - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_Set_Remove_Wol_Pattern()\n")); - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Multicast_List( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG BytesRead = 0, BytesNeeded = 0; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - ULONG InputBufferLength = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - WDI_SET_MULTICAST_LIST_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSetMulticastList; - WDI_MAC_ADDRESS Address = {0}; - DOT11_MAC_ADDRESS MulticastList[MAX_MCAST_LIST_NUM]; - u4Byte i; - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - if( param ) - { - for(i=0; i< param->MulticastList.ElementCount; i++) - { - Address = param->MulticastList.pElements[i]; - CopyMem(MulticastList[i], Address.Address, sizeof(DOT11_MAC_ADDRESS)); - RT_PRINT_ADDR(COMP_OID_SET, DBG_TRACE, ("Wdi_Set_Multicast_List MulticastList\n"), MulticastList[i]); - RT_PRINT_ADDR(COMP_OID_SET, DBG_TRACE, ("Wdi_Set_Multicast_List Address.Address\n"), Address.Address); - } - - ndisStatus = N6CSet_DOT11_MULTICAST_LIST(pAdapter, - MulticastList, - sizeof(DOT11_MAC_ADDRESS)*param->MulticastList.ElementCount, - &BytesRead, - &BytesNeeded); - } - else - { - // Shall we need to clear multicast list since parameter was empty? - } - - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Add_Pm_Protocol_Offload( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER) pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - WDI_SET_ADD_PM_PROTOCOL_OFFLOAD_PARAMETERS_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetAddProtocolOffload; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> Wdi_Set_Add_Pm_Protocol_Offload()\n")); - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - - //2 DOT11 RSN REKey Offload - if(Params->DOT11RSNREKeyOffload.ProtocolOffloadId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("ProtocolOffloadId = %d\n", - Params->DOT11RSNREKeyOffload.ProtocolOffloadId)); - - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eGTKOffloadIdx] - = Params->DOT11RSNREKeyOffload.ProtocolOffloadId; - - //Copy kck, kek - PlatformMoveMemory(&(pMgntInfo->PMDot11RSNRekeyPara.KCK), - Params->DOT11RSNREKeyOffload.KCK_CONTENT, 32); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("KCK_CONTENT:\n"), - pMgntInfo->PMDot11RSNRekeyPara.KCK, 16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("KEK_CONTENT:\n"), - pMgntInfo->PMDot11RSNRekeyPara.KEK, 16); - - pMgntInfo->PMDot11RSNRekeyPara.KeyReplayCounter = Params->DOT11RSNREKeyOffload.ReplayCounter; - - if(pPSC->RegGTKOffloadEnable) - pPSC->GTKOffloadEnable = TRUE; - } - - - //2 ipv4 ARP Offload - if(Params->ipv4ARPOffload.ProtocolOffloadId) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eARPOffloadIdx] - = Params->ipv4ARPOffload.ProtocolOffloadId; - - //Copy RemoteIPv4Address, HostIPv4Address & MacAddress - PlatformMoveMemory(&(pMgntInfo->PMIPV4ARPPara.RemoteIPv4Address), - Params->ipv4ARPOffload.RemoteIPV4Address, 14); - - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("RemoteIPv4Address:\n"), - pMgntInfo->PMIPV4ARPPara.RemoteIPv4Address, 4); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("HostIPv4Address:\n"), - pMgntInfo->PMIPV4ARPPara.HostIPv4Address, 4); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("MacAddress:\n"), - pMgntInfo->PMIPV4ARPPara.MacAddress, 6); - - if(pPSC->RegARPOffloadEnable) - pPSC->ARPOffloadEnable = TRUE; - } - - - //2 ipv6 ARP Offload - if(Params->ipv6ARPOffload.ProtocolOffloadId) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("SET OID_PM_ADD_PROTOCOL_OFFLOAD. (NS IPv6)\n")); - - if((pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] != 0) && - (pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] != 0)) - { - ndisStatus = NDIS_STATUS_RESOURCES; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("Insufficient NS offload number!! Status(%#X) <==\n", ndisStatus)); - } - else - { - u1Byte IPv6NSIndex = 0; - RT_PM_IPV6_NS_PARAMETERS *NsParams; - - if( pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] == 0) - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] - = Params->ipv6ARPOffload.ProtocolOffloadId; - IPv6NSIndex = 0; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==> eNSOffloadIdx1: \n")); - } - else - { - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] - = Params->ipv6ARPOffload.ProtocolOffloadId; - IPv6NSIndex = 1; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==> eNSOffloadIdx2: \n")); - } - - NsParams = &(pMgntInfo->PMIPV6NSPara[IPv6NSIndex]); - - PlatformMoveMemory(NsParams->RemoteIPv6Address, - Params->ipv6ARPOffload.RemoteIPV6Address, 16); - PlatformMoveMemory(NsParams->SolicitedNodeIPv6Address, - Params->ipv6ARPOffload.SolicitdNodeIPv6Address, 16); - PlatformMoveMemory(NsParams->MacAddress, - Params->ipv6ARPOffload.MacAddress.Address, 6); - PlatformMoveMemory(NsParams->TargetIPv6Addresses[0], - Params->ipv6ARPOffload.TargetIPV6Address1, 16); - PlatformMoveMemory(NsParams->TargetIPv6Addresses[1], - Params->ipv6ARPOffload.TargetIPV6Address2, 16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM RemoteIPv6Address: \n"), - NsParams->RemoteIPv6Address, 16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM SolicitedNodeIPv6Address: \n"), - NsParams->SolicitedNodeIPv6Address, 16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM MacAddress: \n"), - NsParams->MacAddress, 6); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM TargetIPv6Addresses[0]: \n"), - NsParams->TargetIPv6Addresses[0], 16); - RT_PRINT_DATA( COMP_OID_SET, DBG_LOUD, ("SET PM TargetIPv6Addresses[1]: \n"), - NsParams->TargetIPv6Addresses[1], 16); - - if(pPSC->RegNSOffloadEnable) - pPSC->NSOffloadEnable = TRUE; - } - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_Set_Add_Pm_Protocol_Offload()\n")); - - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Remove_Pm_Protocol_Offload( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER) pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD_PARAMETERS *Params = pOidHandle->tlvParser.parsedTlv.paramSetRemoveProtocolOffload; - - u4Byte MatchId, ProtocolOffloadId = Params->RemovePMOffload; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> Wdi_Set_Remove_Pm_Protocol_Offload()\n")); - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - for(MatchId = 0; MatchId < 4; MatchId++) - { - if(ProtocolOffloadId == pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[MatchId]) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("Find match protocol offload ID idx (%d)\n", MatchId)); - - if(MatchId == eGTKOffloadIdx) - { - PlatformZeroMemory(&(pMgntInfo->PMDot11RSNRekeyPara), sizeof(RT_PM_DOT11_RSN_REKEY_PARAMETERS)); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==>REMOVE eGTKOffloadIdx\n")); - } - else if(MatchId == eARPOffloadIdx) - { - PlatformZeroMemory(&(pMgntInfo->PMIPV4ARPPara), sizeof(RT_PM_IPV4_ARP_PARAMETERS)); - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==>REMOVE eARPOffloadIdx\n")); - } - else if(MatchId == eNSOffloadIdx1 ) - { - // Disable eNSOffloadIdx1 , set ID = 0 !! - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx1] = 0; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==>REMOVE eNSOffloadIdx1\n")); - } - else if(MatchId == eNSOffloadIdx2) - { - // Disable eNSOffloadIdx2 , set ID = 0 !! - pMgntInfo->PowerSaveControl.PMProtocolOffloadIDs[eNSOffloadIdx2] = 0; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("==>REMOVE eNSOffloadIdx2\n")); - } - } - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_Set_Remove_Pm_Protocol_Offload()\n")); - - return ndisStatus; -} - -NDIS_STATUS -Wdi_Set_Connection_Quality( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - ULONG BytesRead = 0, BytesNeeded = 0; - PMGNT_INFO pMgntInfo=&(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - ULONG InputBufferLength - = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - WDI_SET_CONNECTION_QUALITY_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSetConnectionQuality; - - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("sizeof(WDI_MESSAGE_HEADER) %d, InputBufferLength: %d\n", sizeof(WDI_MESSAGE_HEADER), pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength)); - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, "Information buffer:\n", pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - - - if( param) - { - pPSC->ConnectionQuality = param->Quality; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_Set_Connection_Quality ConnectionQuality 0x%x\n", pPSC->ConnectionQuality)); - - if(param->Optional.LowLatencyParameters_IsPresent) - { - pPSC->MaximumOffChannelOperationTime = param->LowLatencyParameters.MaximumOffChannelOperationTime; - pPSC->RoamingNeededLinkQualityThreshold = param->LowLatencyParameters.RoamingNeededLinkQualityThreshold; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_Set_Connection_Quality MaximumOffChannelOperationTime 0x%x\n", pPSC->MaximumOffChannelOperationTime)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Wdi_Set_Connection_Quality RoamingNeededLinkQualityThreshold 0x%x\n", pPSC->RoamingNeededLinkQualityThreshold)); - } - } - - - return ndisStatus; -} - -NDIS_STATUS -Wdi_Get_Auto_Power_Save( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PADAPTER pDefAdapter = GetDefaultAdapter(pAdapter); - PMGNT_INFO pMgntInfo=&(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - WDI_GET_AUTO_POWER_SAVE_RESULTS adapterPowerSave = {0}; - PUCHAR pOutput = NULL; - ULONG length = 0; - - PWDI_MESSAGE_HEADER pOidHeader - = (PWDI_MESSAGE_HEADER)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - adapterPowerSave.AutoPowerSaveParameters.EnableAutoPSM = - pMgntInfo->bInAutoPowerSavemode; - - adapterPowerSave.AutoPowerSaveParameters.BeaconInterval = - pMgntInfo->dot11BeaconPeriod; - - adapterPowerSave.AutoPowerSaveParameters.ListenInterval = - (UINT8)pMgntInfo->ListenInterval; - - if(pMgntInfo->ListenIntervalInDX) - { - adapterPowerSave.AutoPowerSaveParameters.ListenIntervalInDx = - (UINT8)pMgntInfo->ListenIntervalInDX; - } - else - { - adapterPowerSave.AutoPowerSaveParameters.ListenIntervalInDx = 0xFF; - } - - //2 Todo - if(pPSC->ConnectionQuality == WDI_CONNECTION_QUALITY_AUTO_POWER_SAVE || - pPSC->ConnectionQuality == WDI_CONNECTION_QUALITY_LOW_LATENCY) - { - adapterPowerSave.AutoPowerSaveParameters.PowerMode = TranslatePsToWdiPs(pPSC->PowerMode); - adapterPowerSave.AutoPowerSaveParameters.PowerModeinDx = TranslatePsToWdiPs(pPSC->PowerMode); - } - else - { - adapterPowerSave.AutoPowerSaveParameters.PowerMode = WDI_POWER_SAVE_LEVEL_NO_POWER_SAVE; - adapterPowerSave.AutoPowerSaveParameters.PowerModeinDx = WDI_POWER_SAVE_LEVEL_NO_POWER_SAVE; - } - - //2 Todo - adapterPowerSave.AutoPowerSaveParameters.Reason = 0; - - adapterPowerSave.AutoPowerSaveParameters.MillisecondsSinceStart = - (PlatformGetCurrentTime() - pDefAdapter->DriverUpTime) / 1000; - - if (pPSC->bLeisurePs && pMgntInfo->dot11PowerSaveMode != eActive) - { - adapterPowerSave.AutoPowerSaveParameters.MillisecondsInPowerSave = - (PlatformGetCurrentTime() - pPSC->LastLPSEnterTime) / 1000; - } - else if (pPSC->LastLPSEnterTime) - { - adapterPowerSave.AutoPowerSaveParameters.MillisecondsInPowerSave = - (pPSC->LastLPSLeaveTime - pPSC->LastLPSEnterTime) / 1000; - } - else - { - adapterPowerSave.AutoPowerSaveParameters.MillisecondsInPowerSave = 0; - } - - //2 Todo - adapterPowerSave.AutoPowerSaveParameters.ReceivedMulticastPackets = - adapterPowerSave.AutoPowerSaveParameters.SentMulticastPackets = - adapterPowerSave.AutoPowerSaveParameters.ReceivedUnicastPackets = - adapterPowerSave.AutoPowerSaveParameters.SentUnicastPacket = 0; - - ndisStatus = GenerateWdiGetAutoPowerSave( - //pAdapterCapabilities, - &adapterPowerSave, - 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput ); - -// CleanupParsedWdiGetAutoPowerSave(&adapterPowerSave); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("GenerateWdiGetAutoPowerSave() return length = %d\n", length)); - RT_PRINT_DATA(COMP_INIT, DBG_LOUD, ("buffer\n"), pOutput, length); - - if(NDIS_STATUS_SUCCESS != ndisStatus) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("GenerateWdiGetAutoPowerSave failed for status: 0x%08X\n", ndisStatus)); - return ndisStatus; - } - - if (pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength >= - (length + sizeof(WDI_MESSAGE_HEADER))) - { - PlatformMoveMemory( - ((UCHAR *)pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer) + sizeof(WDI_MESSAGE_HEADER), - pOutput, - length); - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += length; - } - else - { - ndisStatus = NDIS_STATUS_BUFFER_TOO_SHORT; - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += (length + sizeof(WDI_MESSAGE_HEADER)); - RT_TRACE(COMP_INIT, DBG_WARNING, ("[Error] GenerateWdiGetAdapterCapabilities() failed with status(%x)\n", ndisStatus)); - } - - if(pOutput) - { - FreeGenerated(pOutput); - pOutput = NULL; - } - - pOidHeader->Status = ndisStatus; - - return ndisStatus; -} - -NDIS_STATUS -Wdi_IHV_Request( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PTLV_WDI_STRUCT pTlvData = NULL; - ULONG BytesWritten = 0, BytesRead = 0, BytesNeeded = 0; - PNDIS_OID_REQUEST pNdisRequest = pOidHandle->pNdisRequest; - PWDI_MESSAGE_HEADER pWdiHeader - = (PWDI_MESSAGE_HEADER)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; -//20150915-KenSun -//Temp Workaround for setting a private OID -#if 1 - PCCX_NIC_SPECIFIC_EXTENSION ccxData; - PIHV_CCX_TLV pTlv = NULL; - u1Byte i = 0; -#endif - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> Wdi_IHV_Request()\n")); - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - - - pTlvData = (PTLV_WDI_STRUCT)((pu1Byte)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + sizeof(WDI_MESSAGE_HEADER)); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Type = 0x%x, Length = %d\n", pTlvData->Type, pTlvData->Length)); - if(WDI_TLV_IHV_DATA == pTlvData->Type) - { - - ndisStatus = WAPI_EventQuerySetInformation( - pAdapter, - OID_DOT11_NIC_SPECIFIC_EXTENSION, - pTlvData->Value, - (ULONG)pTlvData->Length, - (ULONG)pTlvData->Length, // this correct? - (ULONG)pTlvData->Length, - (PULONG)&BytesWritten, - (PULONG)&BytesRead, - (PULONG)&BytesNeeded - ); - if(NDIS_STATUS_INVALID_OID != ndisStatus) - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("WAPI_EventQuerySetInformation BytesWritten = %d\n", BytesWritten)); - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += BytesWritten; - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += 4; // type + length - pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += BytesWritten; - pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += 4; // type + length - - RT_PRINT_DATA(COMP_OID_SET, DBG_TRACE,("WAPI_EventQuerySetInformation Output buffer\n"), pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten); - return ndisStatus; - } - - ndisStatus = NDIS_STATUS_SUCCESS; - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("BytesWritten = %d\n", BytesWritten)); - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += BytesWritten; - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += 4; // type + length - pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += BytesWritten; - pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += 4; // type + length -//20150921-KenSun -//Workaround for set method for RTK private OIDs -//Because WDI would always pass 2046 in pNdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength -//which is not the same value that passed in RTK Appilcations. (All RTK appilcation pass 0 outputbufferlength when issuing a SET OID request) -//Therefore, we cannot use it as refence. -//For interfacing with WDI, we have to make sure BytesWriiten is sizeof(WDI_MESSAGE_HEADER) when dealing with a SET method request. -// -#if 1 - ccxData = (PCCX_NIC_SPECIFIC_EXTENSION)pTlvData->Value; - if(ccxData->event == CCX_EVENT_OID) - { - pTlv = &ccxData->tlvData.tlv[0]; - for(i = 0; pTlv && i < ccxData->tlvData.tlvCount; i++) - { - - if(pTlv->type == CCX_TLV_SET_DATA) - { - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> For set method request, we should set BytesWritten to be sizeof(WDI_MESSAGE_HEADER), BytesWritten = %d\n",pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten)); - } - } - } -#endif - RT_PRINT_DATA(COMP_OID_SET, DBG_TRACE, ("Output buffer\n"), pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten); - } - } - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== Wdi_IHV_Request()\n")); - return ndisStatus; -} - - -NDIS_STATUS -Wdi_Get_Statistics( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - WDI_GET_STATISTICS_PARAMETERS Params = {0}; - PUCHAR pOutput = NULL; - ULONG length = 0; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_MAC_STATISTICS_CONTAINER MacStatistics[2]; - WDI_PHY_STATISTICS_CONTAINER PhyStatistics[WDI_802_11_MAX_NUM_PHY_TYPES]; - PNDIS_OID_REQUEST pNdisRequest = pOidHandle->pNdisRequest; - PWDI_MESSAGE_HEADER pOidHeader - = (PWDI_MESSAGE_HEADER)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - FunctionIn(COMP_OID_QUERY); - - - if( pMgntInfo->mAssoc == TRUE ) - { - PlatformZeroMemory(&MacStatistics[0], sizeof(WDI_MAC_STATISTICS_CONTAINER)*2); - - // MacStatistics[0] BSSID - cpMacAddr(MacStatistics[0].MACAddress.Address, pMgntInfo->Bssid); - MacStatistics[0].TransmittedFrameCount = pAdapter->TxStats.NumTxUnicast; - MacStatistics[0].ReceivedFrameCount = pAdapter->RxStats.NumRxUnicast; - MacStatistics[0].WEPExcludedCount = pAdapter->RxStats.NumRxExcludeUnencryptedUnicast; - MacStatistics[0].TKIPLocalMICFailures = pAdapter->RxStats.NumRxTKIPLocalMICFailuresUnicast; - MacStatistics[0].TKIPReplays = pAdapter->RxStats.NumRxTKIPReplayUnicast; - MacStatistics[0].TKIPICVErrorCount = pAdapter->RxStats.NumRxTKIPICVErrorUnicast; - MacStatistics[0].CCMPFormatErrors = pAdapter->RxStats.NumRxCCMPDecryptErrorsUnicast; - MacStatistics[0].CCMPReplays = pAdapter->RxStats.NumRxCCMPReplayUnicast; - MacStatistics[0].CCMPDecryptErrors = pAdapter->RxStats.NumRxCCMPDecryptErrorsUnicast; - MacStatistics[0].WEPUndecryptableCount = pAdapter->RxStats.NumRxWEPUndecryptableUnicast; - MacStatistics[0].WEPICVErrorCount = pAdapter->RxStats.NumRxWEPICVErrorUnicast; - MacStatistics[0].DecryptSuccessCount = pAdapter->RxStats.NumRxDecryptSuccessUnicast; - MacStatistics[0].DecryptFailureCount = pAdapter->RxStats.NumRxDecryptFailureUnicast; - - // MacStatistics[1] Multicast and Broadcast - cpMacAddr(MacStatistics[1].MACAddress.Address, BroadcastAddress); - MacStatistics[1].TransmittedFrameCount = pAdapter->TxStats.NumTxMulticast + pAdapter->TxStats.NumTxBroadcast; - MacStatistics[1].ReceivedFrameCount = pAdapter->RxStats.NumRxMulticast + pAdapter->RxStats.NumRxBroadcast; - MacStatistics[1].WEPExcludedCount = pAdapter->RxStats.NumRxExcludeUnencryptedMulticast + pAdapter->RxStats.NumRxExcludeUnencryptedBroadcast; - MacStatistics[1].TKIPLocalMICFailures = pAdapter->RxStats.NumRxTKIPLocalMICFailuresMulticast + pAdapter->RxStats.NumRxTKIPLocalMICFailuresBroadcast; - MacStatistics[1].TKIPReplays = pAdapter->RxStats.NumRxTKIPReplayMulticast; - MacStatistics[1].TKIPICVErrorCount = pAdapter->RxStats.NumRxTKIPICVErrorMulticast + pAdapter->RxStats.NumRxTKIPICVErrorBroadcast; - MacStatistics[1].CCMPFormatErrors = pAdapter->RxStats.NumRxCCMPDecryptErrorsMulticast + pAdapter->RxStats.NumRxCCMPDecryptErrorsBroadcast; - MacStatistics[1].CCMPReplays = pAdapter->RxStats.NumRxCCMPReplayMulticast; - MacStatistics[1].CCMPDecryptErrors = pAdapter->RxStats.NumRxCCMPDecryptErrorsMulticast + pAdapter->RxStats.NumRxCCMPDecryptErrorsBroadcast; - MacStatistics[1].WEPUndecryptableCount = pAdapter->RxStats.NumRxWEPUndecryptableMulticast + pAdapter->RxStats.NumRxWEPUndecryptableBroadcast; - MacStatistics[1].WEPICVErrorCount = pAdapter->RxStats.NumRxWEPICVErrorMulticast + pAdapter->RxStats.NumRxWEPICVErrorBroadcast; - MacStatistics[1].DecryptSuccessCount = pAdapter->RxStats.NumRxDecryptSuccessMulticast + pAdapter->RxStats.NumRxDecryptSuccessBroadcast; - MacStatistics[1].DecryptFailureCount = pAdapter->RxStats.NumRxDecryptFailureMulticast + pAdapter->RxStats.NumRxDecryptFailureBroadcast; - - Params.PeerMACStatistics.ElementCount = 2; - Params.PeerMACStatistics.pElements = MacStatistics; - - PlatformZeroMemory(&PhyStatistics[0], sizeof(WDI_PHY_STATISTICS_CONTAINER)*WDI_802_11_MAX_NUM_PHY_TYPES); - switch (pMgntInfo->dot11CurrentWirelessMode) - { - default: - PhyStatistics[0].PhyType = WDI_PHY_TYPE_OFDM; - break; - - case WIRELESS_MODE_A: - case WIRELESS_MODE_G: - PhyStatistics[0].PhyType = WDI_PHY_TYPE_OFDM; - break; - - case WIRELESS_MODE_B: - PhyStatistics[0].PhyType = WDI_PHY_TYPE_DSSS; - break; - - case WIRELESS_MODE_N_24G: - case WIRELESS_MODE_N_5G: - case WIRELESS_MODE_AUTO: - PhyStatistics[0].PhyType = WDI_PHY_TYPE_HT; - break; - - case WIRELESS_MODE_AC_5G: - case WIRELESS_MODE_AC_ONLY: - case WIRELESS_MODE_AC_24G: - PhyStatistics[0].PhyType = WDI_PHY_TYPE_VHT; - break; - - - } - PhyStatistics[0].TransmittedFrameCount = pAdapter->TxStats.NumTxOkTotal; - PhyStatistics[0].GroupTransmittedFrameCount = pAdapter->TxStats.NumTxMulticast + pAdapter->TxStats.NumTxBroadcast; - PhyStatistics[0].FailedCount = pAdapter->TxStats.NumTxErrTotal; - PhyStatistics[0].RetryCount = pAdapter->TxStats.NumTxRetryCount; - PhyStatistics[0].MultipleRetryCount = 0; // TODO - PhyStatistics[0].MaxTXLifetimeExceededCount = 0; // TODO - PhyStatistics[0].TransmittedFragmentCount = pAdapter->TxStats.NumTxOkTotal; - PhyStatistics[0].RTSSuccessCount = 0; // TODO - PhyStatistics[0].RTSFailureCount = 0; // TODO - PhyStatistics[0].ACKFailureCount = 0; // TODO - PhyStatistics[0].ReceivedFrameCount = pAdapter->RxStats.NumRxFramgment; - PhyStatistics[0].GroupReceivedFrameCount = pAdapter->RxStats.NumRxFramgment; - PhyStatistics[0].PromiscuousReceivedFrameCount = 0; // TODO - PhyStatistics[0].MaxRXLifetimeExceededCount = 0; // TODO - PhyStatistics[0].FrameDuplicateCount = 0; // TODO - PhyStatistics[0].ReceivedFragmentCount = pAdapter->RxStats.NumRxFramgment; - PhyStatistics[0].PromiscuousReceivedFragmentCount = 0; // TODO - PhyStatistics[0].FCSErrorCount = pAdapter->RxStats.NumRxErrTotalUnicast + pAdapter->RxStats.NumRxErrTotalMulticast; - Params.PhyStatistics.ElementCount = 1; - Params.PhyStatistics.pElements = PhyStatistics; - } - else - { - u1Byte count = 0; - - PlatformZeroMemory(&MacStatistics[0], sizeof(WDI_MAC_STATISTICS_CONTAINER)*2); - cpMacAddr(MacStatistics[0].MACAddress.Address, BroadcastAddress); - Params.PeerMACStatistics.ElementCount = 1; - Params.PeerMACStatistics.pElements = MacStatistics; - - PlatformZeroMemory(&PhyStatistics, sizeof(WDI_PHY_STATISTICS_CONTAINER)*WDI_802_11_MAX_NUM_PHY_TYPES); - for (count = 0; count < pAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; count ++) - { - PhyStatistics[count].PhyType = pAdapter->pNdisCommon->pDot11PhyMIBs[count].PhyType; - } - Params.PhyStatistics.ElementCount = pAdapter->pNdisCommon->pDot11SupportedPhyTypes->uNumOfEntries; - Params.PhyStatistics.pElements = PhyStatistics; - } - - ndisStatus = GenerateWdiGetStatistics( - &Params, - 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput ); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("GenerateWdiGetStatistics() return length = %d\n", length)); - RT_PRINT_DATA(COMP_INIT, DBG_LOUD, ("buffer\n"), pOutput, length); - - if(NDIS_STATUS_SUCCESS != ndisStatus) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("GenerateWdiGetStatistics failed for status: 0x%08X\n", ndisStatus)); - return ndisStatus; - } - - if (pNdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength >= - (length + sizeof(WDI_MESSAGE_HEADER))) - { - PlatformMoveMemory( - ((UCHAR *)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer) + sizeof(WDI_MESSAGE_HEADER), - pOutput, - length); - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += length; - } - else - { - ndisStatus = NDIS_STATUS_BUFFER_TOO_SHORT; - pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += (length + sizeof(WDI_MESSAGE_HEADER)); - RT_TRACE(COMP_INIT, DBG_WARNING, ("[Error] GenerateWdiGetStatistics() failed with status(%x)\n", ndisStatus)); - } - - if(pOutput) - { - FreeGenerated(pOutput); - pOutput = NULL; - } - - pOidHeader->Status = ndisStatus; - - FunctionOut(COMP_OID_QUERY); - - return ndisStatus; -} - - -NDIS_STATUS -WDI_OID_TASK_OPEN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Not Support WDI_OID_TASK_OPEN\n")); - - return ndisStatus; -} - - -NDIS_STATUS -WDI_OID_TASK_CLOSE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Not Support WDI_OID_TASK_CLOSE\n")); - - return ndisStatus; -} - - -NDIS_STATUS -WDI_OID_TASK_SCAN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Task_Scan(pAdapter, pOidHandle); -} - -NDIS_STATUS -WDI_OID_TASK_P2P_DISCOVER( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_P2P_DISCOVER_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramP2pDiscover; - - FunctionIn(COMP_OID_SET); - - do - { - VOID *req = NULL; - - P2P_INFO *info = GET_P2P_INFO(pAdapter); - FRAME_BUF *buf = NULL; - - // additional ie - if(param->Optional.VendorIEs_IsPresent) - { - P2P_AddIe_Set( - &info->AdditionalIEs, P2P_ADD_IE_PROBE_REQUEST, - param->VendorIEs.ElementCount, param->VendorIEs.pElements - ); - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("DiscoveryType = %d, ScanType = %d\n", - param->DiscoverMode.DiscoveryType, param->DiscoverMode.ScanType)); - - // construct req - if(NULL != (req = CustomScan_AllocReq(GET_CUSTOM_SCAN_INFO(pAdapter), NULL, NULL))) - { - static u1Byte bcst[6] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; - - buf = CustomScan_GetProbeReqBuf(req); - - if(param->SSIDList.ElementCount) - { - WDI_SSID *ssid = ¶m->SSIDList.pElements[0]; - - RT_PRINT_STR(COMP_OID_SET, DBG_LOUD, "to probe with ssid", ssid->pElements, ssid->ElementCount); - P2P_Construct_ProbeReqEx(buf, info, bcst, (u1Byte)ssid->ElementCount, (u1Byte *)ssid->pElements); - } - else - { - P2P_Construct_ProbeReq(buf, info); - } - - if(param->Optional.DiscoveryChannelSettings_IsPresent) - { - wdi_ConstructP2PSpecificChnlReq(pAdapter, param, buf, req); - } - else - { - wdi_ConstructP2PScanPhaseReq(pAdapter, param, req); - wdi_ConstructP2PFindPhaseReq(pAdapter, param, buf, req); - } - - CustomScan_SetRepeatCount(req, 16); // use time bound to control overall time - - if(WDI_P2P_SCAN_TYPE_PASSIVE == param->DiscoverMode.ScanType) - CustomScan_ForcePassiveScan(req); - - CustomScan_SetTimeBound(req, param->DwellTime.MaximumScanTime); - CustomScan_SetupCbCtx(req, wdi_P2PDiscoveryCb, pAdapter); - - CustomScan_IssueReq(GET_CUSTOM_SCAN_INFO(pAdapter), req, CUSTOM_SCAN_SRC_TYPE_P2P, "wdi-p2p-discovery"); - } - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_CONNECT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Task_Connect(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_TASK_ROAM( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Task_Roam(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_TASK_DOT11_RESET( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_DOT11_RESET_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramDot11Reset; - - NDIS_OID_REQUEST *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - if(NULL == (req = Wdi_Xlat_AllocResetOid(pOidHandle, param))) - { - status = NDIS_STATUS_RESOURCES; - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N6C_OID_DOT11_RESET_REQUEST(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N6C_OID_DOT11_RESET_REQUEST returns: 0x%08X\n", status)); - break; - } - - // Indicate completed successfully - WDI_CMD_ResetComplete(pAdapter, req, status); - }while(FALSE); - - N63CResetNetworkListOffload(pAdapter); - - // MAC Address Randomization - if(param->Optional.ResetMACAddress_IsPresent && pAdapter->MgntInfo.RegSupportMACRandom) - { - cpMacAddr( pAdapter->CurrentAddress, param->ResetMACAddress.Address); - pAdapter->HalFunc.SetHwRegHandler( pAdapter , HW_VAR_MAC_ADDR_RANDOM , pAdapter->CurrentAddress); - RT_TRACE(COMP_MLME, DBG_LOUD, ("ResetMACAddress : 0x%x : 0x%x : 0x%x : 0x%x : 0x%x : 0x%x ",param->ResetMACAddress.Address[0],param->ResetMACAddress.Address[1],param->ResetMACAddress.Address[2],param->ResetMACAddress.Address[3],param->ResetMACAddress.Address[4],param->ResetMACAddress.Address[5])); - } - - // cleanup - if(req && NDIS_STATUS_SUCCESS != status) - Wdi_Xlat_FreeOid(req); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_DISCONNECT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Task_Disconnect(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramP2pSendRequestActionFrame; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST == param->RequestParams.RequestFrameType) - { - req = WDI_SendAction_GoNegReq(pAdapter, param, wdi_SendP2pReqActionFrameStateCb); - } - else if(WDI_P2P_ACTION_FRAME_INVITATION_REQUEST == param->RequestParams.RequestFrameType) - { - req = WDI_SendAction_InvitationReq(pAdapter, param, wdi_SendP2pReqActionFrameStateCb); - } - else if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST== param->RequestParams.RequestFrameType) - { - req = WDI_SendAction_PdReq(pAdapter, param, wdi_SendP2pReqActionFrameStateCb); - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("unknown frame type: %u\n", param->RequestParams.RequestFrameType)); - req = NULL; - } - - if(!req) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("send p2p req action frame failed\n")); - status = NDIS_STATUS_FAILURE; - break; - } - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramP2pSendResponseActionFrame; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - // termincate any ongoing scan for sending rsp - WDI_SendAction_TerminateReq(pAdapter); - - if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == param->ResponseParams.ResponseFrameType) - { - req = WDI_SendAction_GoNegRsp(pAdapter, param, wdi_SendP2pRspActionFrameStateCb); - } - else if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == param->ResponseParams.ResponseFrameType) - { - req = WDI_SendAction_GoNegConfirm(pAdapter, param, wdi_SendP2pRspActionFrameStateCb); - } - else if(WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE == param->ResponseParams.ResponseFrameType) - { - req = WDI_SendAction_InvitationRsp(pAdapter, param, wdi_SendP2pRspActionFrameStateCb); - } - else if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == param->ResponseParams.ResponseFrameType) - { - req = WDI_SendAction_PdRsp(pAdapter, param, wdi_SendP2pRspActionFrameStateCb); - } - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("unknown frame type: %u\n", param->ResponseParams.ResponseFrameType)); - req = NULL; - } - - if(!req) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("send p2p rsp action frame failed\n")); - status = NDIS_STATUS_FAILURE; - break; - } - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -NDIS_STATUS -WDI_OID_TASK_SET_RADIO_STATE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Task_Set_Radio_State(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_TASK_CREATE_PORT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PORT_HELPER *pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - - status = Wdi_Task_CreatePort(pAdapter, pOidHandle); - - if(NDIS_STATUS_PENDING == status) - {// WDI always return success regardless of our status here, so we need to record pended req here - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - pAdapter->pNdisCommon->PendedRequest = pPortHelper->pCreateDeleteOID; - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - status = NDIS_STATUS_SUCCESS; - } - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_DELETE_PORT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PORT_HELPER *pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - - status = Wdi_Task_DeletePort(pAdapter, pOidHandle); - - if(NDIS_STATUS_PENDING == status) - {// WDI always return success regardless of our status here, so we need to record pended req here - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - pAdapter->pNdisCommon->PendedRequest = pPortHelper->pCreateDeleteOID; - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - status = NDIS_STATUS_SUCCESS; - } - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_START_AP( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_START_AP_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramStartAp; - - NDIS_OID_REQUEST *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - // SSID list - if(NULL == (req = Wdi_Xlat_AllocSetDesiredSsidListOid(pOidHandle, ¶m->DesiredSSID))) - { - status = NDIS_STATUS_RESOURCES; - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N6C_OID_DOT11_DESIRED_SSID_LIST(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N6C_OID_DOT11_DESIRED_SSID_LIST returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - - // Start AP - if(NULL == (req = Wdi_Xlat_AllocStartApReqOid(pOidHandle, param))) - { - break; - } - - N6CSet_DOT11_AUTHENTICATION_ALOGORITHM(pAdapter, Wdi_Xlat_AuthMode(*param->AuthenticationAlgorithms.pElements)); - N6CSet_DOT11_UNICAST_CIPHER_ALGORITHM(pAdapter, Wdi_Xlat_CipherAlgo(*param->UnicastCipherAlgorithms.pElements)); - N6CSet_DOT11_MULTICAST_CIPHER_ALGORITHM(pAdapter, Wdi_Xlat_CipherAlgo(*param->MulticastCipherAlgorithms.pElements)); - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_START_GO_REQUEST(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_START_GO_REQUEST returns: 0x%08X\n", status)); - break; - } - - }while(FALSE); - - // M4 indication is not required since bWaitComplete in RT_SUPPORT_TASKs is FALSE - - // cleanup - if(req) - Wdi_Xlat_FreeOid(req); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_STOP_AP( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - FunctionIn(COMP_OID_SET); - - if(RT_AP_TYPE_VWIFI_AP == MgntActQuery_ApType(pAdapter)) - { - status = N6CSet_DOT11_DISCONNECT_REQUEST(pAdapter, NULL, 0, 0, 0); - - if(NDIS_STATUS_SUCCESS != status) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N6CSet_DOT11_DISCONNECT_REQUEST returns: 0x%08X\n", status)); - } - } - else - { - status = NDIS_STATUS_INVALID_STATE; - } - - FunctionOut(COMP_OID_SET); - - return status; -} - - -NDIS_STATUS -WDI_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSendApAssociationResponse; - - NDIS_OID_REQUEST *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - MGNT_INFO *pMgntInfo = NULL; - RT_WLAN_STA *pEntry = NULL; - - pMgntInfo = &pAdapter->MgntInfo; - - if(NULL == (req = Wdi_Xlat_AllocIncomingAssociationDecisionOid(pOidHandle, param))) - { - status = NDIS_STATUS_RESOURCES; - break; - } - - if(NULL == (pEntry = AsocEntry_GetEntry(pMgntInfo, param->IncomingRequestInfo.AssocRequestParams.PeerMacAddress.Address))) - { - status = NDIS_STATUS_INVALID_STATE; - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N62C_OID_DOT11_INCOMING_ASSOCIATION_DECISION(pAdapter, req))) - { - RT_TRACE_F(COMP_MLME, DBG_WARNING, ("N62C_OID_DOT11_INCOMING_ASSOCIATION_DECISION returns: 0x%08X\n", status)); - break; - } - - pOidHandle->pvCtx = req; - - AP_SendAsocRsp( - pAdapter, - pEntry, - TRUE == param->IncomingRequestInfo.AssocRequestParams.IsReassociationRequest, - FALSE, - param->AssocResponseParameters.ReasonCode - ); - - // If succeeded, WDI_CMD_SendApAssociationResponseComplete is called from DrvIFIndicateIncommingAssociationComplete - - }while(FALSE); - - // cleanup - if(NDIS_STATUS_SUCCESS != status) - { - if(req) - Wdi_Xlat_FreeOid(req); - } - - FunctionOut(COMP_OID_SET); - - return status; - -} - - -NDIS_STATUS -WDI_OID_TASK_CHANGE_OPERATION_MODE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_CHANGE_OPERATION_MODE_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramChangeOperationMode; - - NDIS_OID_REQUEST *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - if(NULL == (req = Wdi_Xlat_AllocChangeOpModeOid(pOidHandle, param))) - { - status = NDIS_STATUS_RESOURCES; - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N6C_OID_DOT11_CURRENT_OPERATION_MODE(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N6C_OID_DOT11_CURRENT_OPERATION_MODE returns: 0x%08X\n", status)); - break; - } - - // Indicate completed successfully - WDI_CMD_ChangeOpModeComplete(pAdapter, req, status); - - }while(FALSE); - - // cleanup - if(req && NDIS_STATUS_SUCCESS != status) - Wdi_Xlat_FreeOid(req); - - FunctionOut(COMP_OID_SET); - - return status; -} - -NDIS_STATUS -WDI_OID_TASK_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSendRequestActionFrame; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - req = WDI_SendAction_Req(pAdapter, param, wdi_SendReqActionFrameStateCb); - - if(!req) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Send Action Req frame failed\n")); - status = NDIS_STATUS_FAILURE; - } - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -NDIS_STATUS -WDI_OID_TASK_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_TASK_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSendResponseActionFrame; - VOID *req = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - req = WDI_SendAction_Rsp(pAdapter, param, wdi_SendRspActionFrameStateCb); - - if(!req) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Send Action Response frame failed\n")); - status = NDIS_STATUS_FAILURE; - } - }while(FALSE); - - FunctionOut(COMP_OID_SET); - - return status; -} - -NDIS_STATUS -WDI_OID_SET_P2P_LISTEN_STATE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_SET_P2P_LISTEN_STATE_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSetP2pListenState; - NDIS_OID_REQUEST *req = NULL; - - FunctionIn(COMP_OID_SET); - - if( param == NULL ) - return NDIS_STATUS_FAILURE; - - do - { - P2P_INFO *info = NULL; - - info = GET_P2P_INFO(pAdapter); - - // listen state - if(NULL == (req = Wdi_Xlat_AllocListenStateDiscoverabilityOid(pOidHandle, ¶m->ListenState))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - - // listen channel - if(param->Optional.ListenChannel_IsPresent) - { - if(NULL == (req = Wdi_Xlat_AllocListenChannelOid(pOidHandle, ¶m->ListenChannel))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - } - - // listen duration - // TODO: - }while(FALSE); - - if(req) - Wdi_Xlat_FreeOid(req); - - FunctionOut(COMP_OID_SET); - - return status; -} - - -NDIS_STATUS -WDI_OID_SET_P2P_ADDITIONAL_IE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return WdiSimpleSetProperty(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_ADD_CIPHER_KEYS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Add_Cipher_Keys(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_DELETE_CIPHER_KEYS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Delete_Cipher_Keys(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_DEFAULT_KEY_ID( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Default_Key_ID(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_CONNECTION_QUALITY( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Connection_Quality(pAdapter, pOidHandle); -} - -NDIS_STATUS -WDI_OID_GET_AUTO_POWER_SAVE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - return Wdi_Get_Auto_Power_Save(pAdapter, pOidHandle); -} - -NDIS_STATUS -WDI_OID_SET_RECEIVE_PACKET_FILTER( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Receive_Packet_Filter(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_GET_ADAPTER_CAPABILITIES( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - ndisStatus = N6SdioWdi_AdapterCapabilities( - pAdapter, - pOidHandle - ); - - return ndisStatus; -} - - -NDIS_STATUS -WDI_OID_SET_NETWORK_LIST_OFFLOAD( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Network_List_Offload(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_RECEIVE_COALESCING( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return WdiSimpleSetProperty(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_PRIVACY_EXEMPTION_LIST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Privacy_Exemption_List(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_CURRENT_CHANNEL( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return WdiSimpleSetProperty(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_POWER_STATE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Power_State(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_ABORT_TASK( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Abort_Task(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_ADD_WOL_PATTERN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Add_Wol_Pattern(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_REMOVE_WOL_PATTERN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Remove_Wol_Pattern(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_MULTICAST_LIST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Multicast_List(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_WDI_SET_ADD_PM_PROTOCOL_OFFLOAD( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Add_Pm_Protocol_Offload(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Set_Remove_Pm_Protocol_Offload(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_ADAPTER_CONFIGURATION( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return WdiSimpleSetProperty(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_GET_RECEIVE_COALESCING_MATCH_COUNT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return WdiSimpleSetProperty(pAdapter, pOidHandle); -} - - -NDIS_STATUS -WDI_OID_SET_ADVERTISEMENT_INFORMATION( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_SET_ADVERTISEMENT_INFORMATION_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSetAdvertisementInformation; - NDIS_OID_REQUEST *req = NULL; - - if( param == NULL ) - return NDIS_STATUS_FAILURE; - - FunctionIn(COMP_OID_SET); - - do - { - P2P_INFO *info = NULL; - - info = GET_P2P_INFO(pAdapter); - - // additional ie - if(param->Optional.AdditionalIEs_IsPresent) - { - if(param->AdditionalIEs.AdditionalBeaconIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, P2P_ADD_IE_BEACON, - param->AdditionalIEs.AdditionalBeaconIEs.ElementCount, - param->AdditionalIEs.AdditionalBeaconIEs.pElements); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "WDI_OID_SET_ADVERTISEMENT_INFORMATION(): AdditionalBeaconIEs\n", - param->AdditionalIEs.AdditionalBeaconIEs.pElements, param->AdditionalIEs.AdditionalBeaconIEs.ElementCount); - } - - if(param->AdditionalIEs.AdditionalProbeResponseIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, P2P_ADD_IE_PROBE_RESPONSE, - param->AdditionalIEs.AdditionalProbeResponseIEs.ElementCount, - param->AdditionalIEs.AdditionalProbeResponseIEs.pElements); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "WDI_OID_SET_ADVERTISEMENT_INFORMATION(): AdditionalProbeResponseIEs\n", - param->AdditionalIEs.AdditionalProbeResponseIEs.pElements, param->AdditionalIEs.AdditionalProbeResponseIEs.ElementCount); - - P2P_CorrectDeviceCategory(pAdapter); - } - - if(param->AdditionalIEs.AdditionalProbeRequestDefaultIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, P2P_ADD_IE_DEFAULT_REQUEST, - param->AdditionalIEs.AdditionalProbeRequestDefaultIEs.ElementCount, - param->AdditionalIEs.AdditionalProbeRequestDefaultIEs.pElements); - RT_PRINT_DATA(COMP_P2P, DBG_LOUD, "WDI_OID_SET_ADVERTISEMENT_INFORMATION(): AdditionalProbeRequestDefaultIEs\n", - param->AdditionalIEs.AdditionalProbeRequestDefaultIEs.pElements, param->AdditionalIEs.AdditionalProbeRequestDefaultIEs.ElementCount); - } - } - - // device info - if(param->Optional.DeviceInformation_IsPresent) - { - if(NULL == (req = Wdi_Xlat_AllocDevInfoOid(pOidHandle, ¶m->DeviceInformation))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_DEVICE_INFO(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_DEVICE_INFO returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - } - - // dev cap - if(param->Optional.DeviceCapability_IsPresent) - { - if(NULL == (req = Wdi_Xlat_AllocDevCapOid(pOidHandle, ¶m->DeviceCapability))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_DEVICE_CAPABILITY(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_DEVICE_CAPABILITY returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - } - - // grp cap - if(param->Optional.GroupOwnerCapability_IsPresent) - { - if(NULL == (req = Wdi_Xlat_AllocGrpCapOid(pOidHandle, ¶m->GroupOwnerCapability))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - } - - // sec dev type - if(param->Optional.SecondaryDeviceTypeList_IsPresent) - { - if(NULL == (req = Wdi_Xlat_AllocSecDevTypeOid(pOidHandle, ¶m->SecondaryDeviceTypeList))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST returns: 0x%08X\n", status)); - break; - } - - Wdi_Xlat_FreeOid(req); - req = NULL; - } - - - // TODO: adv svc - }while(FALSE); - - if(req) - Wdi_Xlat_FreeOid(req); - - FunctionOut(COMP_OID_SET); - - return status; - -} - - -NDIS_STATUS -WDI_OID_IHV_REQUEST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_IHV_Request(pAdapter, pOidHandle); -} - -NDIS_STATUS -WDI_OID_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - MP_PORT_TYPE portType; - WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN_PARAMETERS param; - PNDIS_OID_REQUEST pNdisRequest = pOidHandle->pNdisRequest; - NDIS_OID_REQUEST *req = NULL; - - ULONG tlvlen = 0; - UINT8 *tlv = NULL; - - FunctionIn(COMP_OID_SET); - - do - { - if( pAdapter->pNdis62Common != NULL ) - { - portType = pAdapter->pNdis62Common->PortType; - } - else - { - status = NDIS_STATUS_ADAPTER_NOT_READY; - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_GET_DIALOG_TOKEN returns: 0x%08X\n", status)); - break; - } - - if( portType != EXT_P2P_DEVICE_PORT && portType != EXT_P2P_ROLE_PORT ) - { - param.NextDialogToken = IncreaseDialogToken(pAdapter->pNdisCommon->DialogToken); - } - else - { - P2P_INFO *info = NULL; - - info = GET_P2P_INFO(pAdapter); - - // listen state - if(NULL == (req = Wdi_Xlat_AllocGetDialogTokenOid(pOidHandle, ¶m))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N63C_OID_DOT11_WFD_GET_DIALOG_TOKEN(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N63C_OID_DOT11_WFD_GET_DIALOG_TOKEN returns: 0x%08X\n", status)); - break; - } - - param.NextDialogToken = *(UINT8 *)req->DATA.QUERY_INFORMATION.InformationBuffer; - } - - GenerateWdiGetNextActionFrameDialogToken( - ¶m, 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &tlvlen, &tlv); - - if(pNdisRequest->DATA.METHOD_INFORMATION.OutputBufferLength < sizeof(WDI_MESSAGE_HEADER) + tlvlen) - { - pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.BytesNeeded += (tlvlen + sizeof(WDI_MESSAGE_HEADER)); - status = NDIS_STATUS_BUFFER_TOO_SHORT; - break; - } - - PlatformMoveMemory( - (UCHAR *)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + sizeof(WDI_MESSAGE_HEADER), - tlv, tlvlen); - - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten += tlvlen; - - }while(FALSE); - - // cleanup; - if(req) - Wdi_Xlat_FreeOid(req); - - if(tlv) - FreeGenerated(tlv); - - FunctionOut(COMP_OID_SET); - - return status; - -} - -NDIS_STATUS -WDI_OID_SET_P2P_WPS_ENABLED( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_SET_P2P_WPS_ENABLED_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramSetP2pWpsEnabled; - NDIS_OID_REQUEST *req = NULL; - - if( param == NULL ) - return NDIS_STATUS_FAILURE; - - do - { - if(NULL == (req = Wdi_Xlat_AllocWpsEnabledOid(pOidHandle, param))) - { - break; - } - - if(NDIS_STATUS_SUCCESS != (status = N62C_OID_DOT11_WPS_ENABLED(pAdapter, req))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("N62C_OID_DOT11_WPS_ENABLED returns: 0x%08X\n", status)); - break; - } - - }while(FALSE); - - if(req) - Wdi_Xlat_FreeOid(req); - - FunctionOut(COMP_OID_SET); - - return status; - -} - -NDIS_STATUS -WDI_OID_GET_BSS_ENTRY_LIST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - WDI_GET_BSS_ENTRY_LIST_UPDATE_PARAMETERS *param = pOidHandle->tlvParser.parsedTlv.paramGetBSSEntryListUpdate; - NDIS_OID_REQUEST *req = NULL; - - if( param == NULL ) - return NDIS_STATUS_FAILURE; - - WDI_IndicateBssListBySSID(pAdapter, &(param->SSID)); - - return status; -} - -NDIS_STATUS -WDI_OID_SET_FAST_BSS_TRANSITION_PARAMETERS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - WDI_SET_FAST_BSS_TRANSITION_PARAMETERS_COMMAND *param = pOidHandle->tlvParser.parsedTlv.paramSetFastBssTransitionParametersCommand; - u1Byte targetAddr[6] = {0}; - - if( param == NULL ) - return NDIS_STATUS_FAILURE; - - - - do - { - if(RT_STATUS_SUCCESS != (rtStatus = FtGetWaitOSDecisionAddr(pAdapter, targetAddr))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("Fail (0x%08X) to get addr from FtGetWaitOSDecisionAddr()\n", rtStatus)); - break; - } - - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "Addr = ", targetAddr); - - if(param->Optional.RSNIE_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_RSNE, targetAddr, - param->RSNIE.pElements, param->RSNIE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "RSNIE:\n", - param->RSNIE.pElements, param->RSNIE.ElementCount); - } - - if(param->Optional.MDE_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_MDE, targetAddr, - param->MDE.pElements, param->MDE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "MDE:\n", - param->MDE.pElements, param->MDE.ElementCount); - } - - if(param->Optional.FTE_IsPresent) - { - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_FTE, targetAddr, - param->FTE.pElements, param->FTE.ElementCount); - RT_PRINT_DATA(COMP_MLME, DBG_LOUD, "FTE:\n", - param->FTE.pElements, param->FTE.ElementCount); - } - - FtUpdateEntryInfo(pAdapter, FT_ENTRY_ACTION_UPDATE_ASSOC_INFO_STATUS, targetAddr, - &(param->status), sizeof(WDI_STATUS_CONTAINER)); - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("status = 0x%08X\n", param->status)); - - FtUpdateEntryInfo(pAdapter, FT_OS_DECISION_MADE, targetAddr, NULL, 0); - - MlmeAuthenticateRequest_Confirm(pAdapter, (NDIS_STATUS_SUCCESS == param->status) ? MlmeStatus_success : MlmeStatus_invalid); - }while(FALSE); - - - FunctionOut(COMP_OID_SET); - - return ndisStatus; - -} - -//----------------------------------------------------------------------------- -// Completion routine -//----------------------------------------------------------------------------- - -// -// Description: -// Prepare indication data for WDI create port. -// Also add data path (via AddDataPathPeer()) as -// it was copied from the original code in -// WdiSimpleTask(). -// -// Note: -// pPortHelper->pCreateDot11MacInfo points to the -// OID info buffer and is filled in N62C_OID_DOT11_CREATE_MAC -// and N62CCreateMac. -// -BOOLEAN -WDI_CMD_CreatePortComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - DOT11_MAC_INFO *macInfo = NULL; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_CREATE_PORT_COMPLETE_PARAMETERS param = {0}; - - macInfo = (DOT11_MAC_INFO *)req->DATA.METHOD_INFORMATION.InformationBuffer; - - FunctionIn(COMP_OID_SET); - - // Win8: Let the device port use the locally-adminitered MAC address - if(WDI_OPERATION_MODE_P2P_DEVICE == hTask->tlvParser.parsedTlv.paramCreatePort->CreatePortParameters.OpModeMask) - { - ADAPTER *pNewAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)macInfo->uNdisPortNumber); - - macInfo->MacAddr[0] |= BIT1; - cpMacAddr(pNewAdapter->CurrentAddress, macInfo->MacAddr); - } - - // prepare completion param - cpMacAddr(param.PortAttributes.MacAddress.Address, macInfo->MacAddr); - param.PortAttributes.PortNumber = (UINT16)macInfo->uNdisPortNumber; - - // generate TLV - GenerateWdiIndicationCreatePortComplete(¶m, 0, &pAdapter->pPortCommonInfo->WdiData.TlvContext, &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - FreeGenerated(tlv); - - // Free the OID - Wdi_Xlat_FreeOid(req); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - // Free pended oid - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - pAdapter->pNdisCommon->PendedRequest = NULL; - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_DeletePortComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_DELETE_PORT_COMPLETE_PARAMETERS param = {0}; - - FunctionIn(COMP_OID_SET); - - // prepare structure - param._Reserved = 0; - - // generate TLV - //GenerateWdiIndicationDeletePortComplete(¶m, 0, &pAdapter->pPortCommonInfo->WdiData.TlvContext, &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - Wdi_Xlat_FreeOid(req); - //FreeGenerated(tlv); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - // Free pended oid - PlatformAcquireSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - pAdapter->pNdisCommon->PendedRequest = NULL; - PlatformReleaseSpinLock(pAdapter, RT_PENDED_OID_SPINLOCK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_ResetComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_DOT11_RESET_COMPLETE_PARAMETERS param = {0}; - - FunctionIn(COMP_OID_SET); - - // prepare structure - param._Reserved = 0; - - // generate TLV - //GenerateWdiIndicationDot11ResetComplete(¶m, 0, &pAdapter->pPortCommonInfo->WdiData.TlvContext, &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - Wdi_Xlat_FreeOid(req); - //FreeGenerated(tlv); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_ChangeOpModeComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_CHANGE_OPERATION_MODE_COMPLETE_PARAMETERS param = {0}; - - FunctionIn(COMP_OID_SET); - - // prepare structure - param._Reserved = 0; - - // generate TLV - //GenerateWdiIndicationChangeOperationModeComplete(¶m, 0, &pAdapter->pPortCommonInfo->WdiData.TlvContext, &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - Wdi_Xlat_FreeOid(req); - //FreeGenerated(tlv); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_P2PDiscoverComplete( - IN PADAPTER pAdapter, - IN NDIS_STATUS status - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_DOT11_RESET_COMPLETE_PARAMETERS param = {0}; - - FunctionIn(COMP_OID_SET); - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("complete via port: %u\n", pAdapter->pNdis62Common->PortNumber)); - - if(FALSE == OidHandle_VerifyTask(pAdapter, OID_WDI_TASK_P2P_DISCOVER)) - return FALSE; - - // prepare structure - param._Reserved = 0; - - // generate TLV - //GenerateWdiIndicationDot11ResetComplete(¶m, 0, &pAdapter->pPortCommonInfo->WdiData.TlvContext, &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - //FreeGenerated(tlv); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_P2pSendRequestActionFrameComplete( - IN ADAPTER *pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - OFF_CHNL_TX_STATUS_FLAG txStatusFlag; - - u4Byte ieOffset = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - UINT8 *tlv = NULL; - ULONG len = 0; - - // N63CIndicateInvitationRequestSendComplete - - WDI_INDICATION_P2P_SEND_REQUEST_ACTION_FRAME_COMPLETE_PARAMETERS param = {0}; - - txStatusFlag = OffChnlTx_GetTxStatusFlag(ctx->req); - - status = (TEST_FLAG(txStatusFlag.perTxAttemptFlag, OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_SENT) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); - - FunctionIn(COMP_OID_SET); - - if(NDIS_STATUS_SUCCESS == status) - { - FRAME_BUF *buf = OffChnlTx_GetTxFrameBuf(ctx->req); - - RT_ASSERT(buf, ("%s(): buf is NULL!!!n", __FUNCTION__)); - - cpMacAddr(param.SendActionFrameResult.FrameParameters.PeerDeviceAddress.Address, (FrameBuf_Head(buf) + FRAME_OFFSET_ADDRESS1)); - param.SendActionFrameResult.FrameParameters.DialogToken = ctx->token; - param.SendActionFrameResult.FrameIEs.ElementCount = FrameBuf_Length(buf) - ieOffset; - param.SendActionFrameResult.FrameIEs.pElements = FrameBuf_MHead(buf) + ieOffset; - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("token: %u\n", param.SendActionFrameResult.FrameParameters.DialogToken)); - } - - // generate TLV - GenerateWdiIndicationP2pSendRequestActionFrameComplete( - ¶m, 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - FreeGenerated(tlv); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_P2pSendResponseActionFrameComplete( - IN PADAPTER pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - OFF_CHNL_TX_STATUS_FLAG txStatusFlag; - - u4Byte ieOffset = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_P2P_SEND_RESPONSE_ACTION_FRAME_COMPLETE_PARAMETERS param = {0}; - - txStatusFlag = OffChnlTx_GetTxStatusFlag(ctx->req); - - status = (TEST_FLAG(txStatusFlag.perTxAttemptFlag, OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_SENT) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); - - FunctionIn(COMP_OID_SET); - - if(NDIS_STATUS_SUCCESS == status) - { - FRAME_BUF *buf = OffChnlTx_GetTxFrameBuf(ctx->req); - - RT_ASSERT(buf, ("%s(): buf is NULL!!!n", __FUNCTION__)); - - cpMacAddr(param.SendActionFrameResult.FrameParameters.PeerDeviceAddress.Address, (FrameBuf_Head(buf) + FRAME_OFFSET_ADDRESS1)); - param.SendActionFrameResult.FrameParameters.DialogToken = ctx->token; - param.SendActionFrameResult.FrameIEs.ElementCount = FrameBuf_Length(buf) - ieOffset; - param.SendActionFrameResult.FrameIEs.pElements = FrameBuf_MHead(buf) + ieOffset; - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("token: %u\n", param.SendActionFrameResult.FrameParameters.DialogToken)); - } - - // generate TLV - GenerateWdiIndicationP2pSendResponseActionFrameComplete( - ¶m, 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - FreeGenerated(tlv); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - FunctionOut(COMP_OID_SET); - - return TRUE; -} - -BOOLEAN -WDI_CMD_SendReqActionFrameComplete( - IN PADAPTER pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - OFF_CHNL_TX_STATUS_FLAG txStatusFlag = {0}; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_SEND_REQUEST_ACTION_FRAME_COMPLETE_PARAMETERS param = {0}; - - txStatusFlag = OffChnlTx_GetTxStatusFlag(ctx->req); - - // TODO: update status in wdi header - status = (TEST_FLAG(txStatusFlag.perTxAttemptFlag, OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_SENT) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); - - if(NDIS_STATUS_SUCCESS == status) - { - } - else - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("Action Req frame send failure.\n")); - } - -#if 0 - //GenerateWdiIndicationSendRequestActionFrameComplete( - // ¶m, 0, - // &pAdapter->pPortCommonInfo->WdiData.TlvContext, - // &len, &tlv); - - wdi_task_WriteResult(hTask, tlv, len, status); - - FreeGenerated(tlv); -#endif - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - return TRUE; -} - -BOOLEAN -WDI_CMD_SendRspActionFrameComplete( - IN PADAPTER pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - OFF_CHNL_TX_STATUS_FLAG txStatusFlag = {0}; - - UINT8 *tlv = NULL; - ULONG len = 0; - - WDI_INDICATION_SEND_RESPONSE_ACTION_FRAME_COMPLETE_PARAMETERS param = {0}; - - txStatusFlag = OffChnlTx_GetTxStatusFlag(ctx->req); - - // TODO: update status in wdi header - status = (TEST_FLAG(txStatusFlag.perTxAttemptFlag, OFF_CHNL_TX_PER_TX_ATTEMPT_FLAG_FRAME_SENT) ? NDIS_STATUS_SUCCESS : NDIS_STATUS_FAILURE); - - if(NDIS_STATUS_SUCCESS != status) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("Action Rsp frame send failure.\n")); - } - -#if 0 - GenerateWdiIndicationSendRequestActionFrameComplete( - ¶m, 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &len, &tlv); - - wdi_task_WriteResult(hTask, tlv, len, status); - - FreeGenerated(tlv); -#endif - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - return TRUE; -} - -BOOLEAN -WDI_CMD_SendApAssociationResponseComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN RT_STATUS status - ) -{ - RT_OID_HANDLER *hTask = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - RT_WLAN_STA *sta = pAdapter->MgntInfo.pCurrentSta; - UINT8 *tlv = NULL; - ULONG len = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_FAILURE; - - WDI_INDICATION_SEND_AP_ASSOCIATION_RESPONSE_COMPLETE_PARAMETERS param = {0}; - - FunctionIn(COMP_MLME); - - // prepare structure, ref N62CAPIndicateIncomAssocComplete - param.Optional.ActivePhyList_IsPresent = FALSE; - cpMacAddr(param.AssocResponseResult.PeerMACAddress.Address, sta->MacAddr); - param.AssocResponseResult.IsReassociationRequest = - Type_Reasoc_Rsp == GET_80211_HDR_TYPE(sta->AP_SendAsocResp) ? TRUE : FALSE; - param.AssocResponseResult.IsReAssociationResponse = - param.AssocResponseResult.IsReassociationRequest; - if(RT_802_11AuthModeOpen == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_80211_OPEN; - else if(RT_802_11AuthModeShared == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_80211_SHARED_KEY; - else if(RT_802_11AuthModeAutoSwitch == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_80211_OPEN; - else if(RT_802_11AuthModeWPA == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_WPA_NONE; - else if(RT_802_11AuthModeWPAPSK == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_WPA_PSK; - else if(RT_802_11AuthModeWPANone == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_WPA_NONE; - else if(RT_802_11AuthModeWPA2 == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_WPA_NONE; - else if(RT_802_11AuthModeWPA2PSK == sta->AuthMode) - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_WPA_PSK; - else - param.AssocResponseResult.AuthAlgorithm = WDI_AUTH_ALGO_80211_OPEN; - - if(RT_ENC_ALG_NO_CIPHER == sta->perSTAKeyInfo.PairwiseCipherSuite[0]) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_NONE; - else if(RT_ENC_ALG_WEP40 == sta->perSTAKeyInfo.PairwiseCipherSuite[0]) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_WEP40; - else if(RT_ENC_ALG_TKIP == sta->perSTAKeyInfo.PairwiseCipherSuite[0]) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_TKIP; - else if(RT_ENC_ALG_AESCCMP == sta->perSTAKeyInfo.PairwiseCipherSuite[0]) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_CCMP; - else if(RT_ENC_ALG_WEP104 == sta->perSTAKeyInfo.PairwiseCipherSuite[0]) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_WEP104; - else if(RT_ENC_ALG_WEP == sta->perSTAKeyInfo.PairwiseCipherSuite[0]) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_WEP; - else - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_NONE; - - if(RT_ENC_ALG_NO_CIPHER == sta->perSTAKeyInfo.GroupCipherSuite) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_NONE; - else if(RT_ENC_ALG_WEP40 == sta->perSTAKeyInfo.GroupCipherSuite) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_WEP40; - else if(RT_ENC_ALG_TKIP == sta->perSTAKeyInfo.GroupCipherSuite) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_TKIP; - else if(RT_ENC_ALG_AESCCMP == sta->perSTAKeyInfo.GroupCipherSuite) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_CCMP; - else if(RT_ENC_ALG_WEP104 == sta->perSTAKeyInfo.GroupCipherSuite) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_WEP104; - else if(RT_ENC_ALG_WEP == sta->perSTAKeyInfo.GroupCipherSuite) - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_WEP; - else - param.AssocResponseResult.UnicastCipherAlgorithm = WDI_CIPHER_ALGO_NONE; - - param.AssocResponseFrame.ElementCount = MMPDU_BODY_LEN(sta->AP_SendAsocRespLength); - param.AssocResponseFrame.pElements = MMPDU_BODY(sta->AP_SendAsocResp); - - if(pAdapter->MgntInfo.beaconframe.Length) - { - param.BeaconIEs.ElementCount = MMPDU_BODY_LEN(pAdapter->MgntInfo.beaconframe.Length); - param.BeaconIEs.pElements = MMPDU_BODY(pAdapter->MgntInfo.beaconframe.Octet); - } - else - { - param.BeaconIEs.ElementCount = 0; - param.BeaconIEs.pElements = NULL; - } - - // generate TLV - GenerateWdiIndicationSendApAssociationResponseComplete( - ¶m, 0, - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &len, &tlv); - - // copy tlv - wdi_task_WriteResult(hTask, tlv, len, status); - - // cleanup - FreeGenerated(tlv); - - ndisStatus = WDI_AddDatapathPeer(pAdapter, sta->MacAddr); - - // Free the OID - Wdi_Xlat_FreeOid(req); - - // Trigger M4 indication - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - - if( ndisStatus != NDIS_STATUS_SUCCESS ) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("WDI_CMD_SendApAssociationResponseComplete: fail to create peer, so disconnect with this AP[%2x:%2x:%2x:%2x:%2x:%2x]\n", sta->MacAddr[0], sta->MacAddr[1], sta->MacAddr[2], sta->MacAddr[3], sta->MacAddr[4], sta->MacAddr[5])); - - // 1. Send disassoc frame to the STA. - SendDisassociation(pAdapter, sta->MacAddr, class3_err ); - - // 3. Update its timestamp. - AsocEntry_UpdateTimeStamp(sta); - - // 4. Mark the STA as disassoicated and related. - AsocEntry_BecomeDisassoc(pAdapter, sta); - - // 5. To initialize WPA-PSK key mgnt state machine. Added by Annie, 2005-07-15. - if( pAdapter->MgntInfo.SecurityInfo.AuthMode == RT_802_11AuthModeWPA ) - { - Authenticator_StateDISCONNECTED(pAdapter, sta); - } - } - - FunctionOut(COMP_MLME); - - return TRUE; -} - -VOID -WDI_CMD_PreIndicateRxP2pActionFrameCb( - IN VOID *pvP2PInfo, - IN u4Byte EventID, - IN MEMORY_BUFFER *pInformation - ) -{ - P2P_INFO *pP2PInfo = (P2P_INFO *)pvP2PInfo; - ADAPTER *pAdapter = pP2PInfo->pAdapter; - - FunctionIn(COMP_OID_SET); - - if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE == EventID - || P2P_EVENT_RECEIVED_INVITATION_RESPONSE == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM == EventID - ) - { - WDI_SendAction_TerminateReq(pAdapter); - } - - FunctionOut(COMP_OID_SET); - - return; -} - -VOID -WDI_CMD_PostIndicateRxP2pActionFrameCb( - IN VOID *pvP2PInfo, - IN u4Byte EventID, - IN MEMORY_BUFFER *pInformation - ) -{ - return; -} - -NDIS_STATUS -WDI_OID_GET_STATISTICS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - return Wdi_Get_Statistics(pAdapter, pOidHandle); -} - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SCAN( - IN PADAPTER pAdapter - ) -{ - CustomScan_TermReq(GET_CUSTOM_SCAN_INFO(pAdapter), FALSE); - wdi_task_WriteResult(&pAdapter->pPortCommonInfo->WdiData.TaskHandle, NULL, 0, NDIS_STATUS_REQUEST_ABORTED); - - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -WDI_CANCEL_OID_TASK_P2P_DISCOVER( - IN PADAPTER pAdapter - ) -{ - CustomScan_TermReq(GET_CUSTOM_SCAN_INFO(pAdapter), FALSE); - - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -WDI_CANCEL_OID_TASK_CONNECT( - IN PADAPTER pAdapter - ) -{ - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -WDI_CANCEL_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter - ) -{ - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("cancel sending p2p request action frame!!!\n")); - - return WDI_SendAction_TerminateReq(pAdapter); -} - - -NDIS_STATUS -WDI_CANCEL_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter - ) -{ - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("[TODO]: cancel sending p2p response action frame!!!\n")); - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -WDI_CANCEL_OID_TASK_START_AP( - IN PADAPTER pAdapter - ) -{ - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE( - IN PADAPTER pAdapter - ) -{ - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter - ) -{ - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter - ) -{ - return NDIS_STATUS_SUCCESS; -} - -NDIS_STATUS -WDI_PRE_M4_OID_TASK_SCAN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - WDI_IndicateBssList(pAdapter, RT_STATUS_SUCCESS); - return NDIS_STATUS_SUCCESS; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.h b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.h deleted file mode 100644 index c254b76a..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Cmds.h +++ /dev/null @@ -1,422 +0,0 @@ -#ifndef __WDI_CMDS_H_FILE -#define __WDI_CMDS_H_FILE - -NDIS_STATUS -WDI_OID_TASK_OPEN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_CLOSE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_SCAN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_P2P_DISCOVER( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_CONNECT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_DOT11_RESET( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_DISCONNECT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_ROAM( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_SET_RADIO_STATE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_CREATE_PORT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_DELETE_PORT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_START_AP( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_STOP_AP( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_CHANGE_OPERATION_MODE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_TASK_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_P2P_LISTEN_STATE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_P2P_ADDITIONAL_IE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_ADD_CIPHER_KEYS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_DELETE_CIPHER_KEYS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_DEFAULT_KEY_ID( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_CONNECTION_QUALITY( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_GET_AUTO_POWER_SAVE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_RECEIVE_PACKET_FILTER( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_GET_ADAPTER_CAPABILITIES( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_NETWORK_LIST_OFFLOAD( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_RECEIVE_COALESCING( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_PRIVACY_EXEMPTION_LIST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_CURRENT_CHANNEL( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_POWER_STATE( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_ABORT_TASK( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_ADD_WOL_PATTERN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_REMOVE_WOL_PATTERN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_MULTICAST_LIST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_WDI_SET_ADD_PM_PROTOCOL_OFFLOAD( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_ADAPTER_CONFIGURATION( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_GET_RECEIVE_COALESCING_MATCH_COUNT( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_ADVERTISEMENT_INFORMATION( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_IHV_REQUEST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_P2P_WPS_ENABLED( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_GET_BSS_ENTRY_LIST( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_OID_SET_FAST_BSS_TRANSITION_PARAMETERS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -BOOLEAN -WDI_CMD_CreatePortComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ); - -BOOLEAN -WDI_CMD_DeletePortComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ); - -BOOLEAN -WDI_CMD_ResetComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ); - -BOOLEAN -WDI_CMD_ChangeOpModeComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN NDIS_STATUS status - ); - -BOOLEAN -WDI_CMD_P2PDiscoverComplete( - IN PADAPTER pAdapter, - IN NDIS_STATUS status - ); - -BOOLEAN -WDI_CMD_P2pSendRequestActionFrameComplete( - IN ADAPTER *pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ); - -BOOLEAN -WDI_CMD_P2pSendResponseActionFrameComplete( - IN PADAPTER pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ); - -BOOLEAN -WDI_CMD_SendApAssociationResponseComplete( - IN PADAPTER pAdapter, - IN NDIS_OID_REQUEST *req, - IN RT_STATUS status - ); - -VOID -WDI_CMD_PreIndicateRxP2pActionFrameCb( - IN VOID *pvP2PInfo, - IN u4Byte EventID, - IN MEMORY_BUFFER *pInformation - ); - -VOID -WDI_CMD_PostIndicateRxP2pActionFrameCb( - IN VOID *pvP2PInfo, - IN u4Byte EventID, - IN MEMORY_BUFFER *pInformation - ); - -NDIS_STATUS -WDI_OID_GET_STATISTICS( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SCAN( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_P2P_DISCOVER( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_CONNECT( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_START_AP( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SEND_REQUEST_ACTION_FRAME( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_CANCEL_OID_TASK_SEND_RESPONSE_ACTION_FRAME( - IN PADAPTER pAdapter - ); - -BOOLEAN -WDI_CMD_SendReqActionFrameComplete( - IN PADAPTER pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ); - -BOOLEAN -WDI_CMD_SendRspActionFrameComplete( - IN PADAPTER pAdapter, - IN const WDI_SEND_ACTION_CTX *ctx - ); - -NDIS_STATUS -WDI_PRE_M4_OID_TASK_SCAN( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.c b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.c deleted file mode 100644 index 1b478b21..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.c +++ /dev/null @@ -1,2843 +0,0 @@ -#include "MP_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "WDI_Common.tmh" -#endif - -#if (WDI_SUPPORT == 1) - -VOID -wdi_UnsolicitedIndication( - IN PADAPTER pAdapter, - IN BOOLEAN bAdapterObj, - IN PVOID pRequestId, - IN ULONG Indication, - IN NDIS_STATUS status, - IN PUCHAR pInput, - IN ULONG Length - ) -{ - PRT_GEN_TEMP_BUFFER pGenBuffer = NULL; - pu1Byte pIndicateBuffer = NULL; - NDIS_STATUS_INDICATION *indic = NULL; - WDI_MESSAGE_HEADER *wdiHdr = NULL; - NDIS_OID_REQUEST *req = NULL; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("==>wdi_UnsolicitedIndication(): status indication code = %x, length=%d\n", Indication, Length)); - - indic = (NDIS_STATUS_INDICATION *)pInput; - wdiHdr = (WDI_MESSAGE_HEADER *)(pInput + sizeof(*indic)); - - // indication data - PlatformZeroMemory(indic, sizeof(*indic)); - indic->Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION; - indic->Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1; - indic->Header.Revision = NDIS_STATUS_INDICATION_REVISION_1; - indic->RequestId = pRequestId; - indic->SourceHandle = pAdapter; - indic->PortNumber = 0; - indic->StatusCode = Indication; - indic->StatusBuffer = wdiHdr; - indic->StatusBufferSize = Length - sizeof(*indic); - - // wdi message header - PlatformZeroMemory(wdiHdr, sizeof(*wdiHdr)); - if( bAdapterObj == TRUE ) - { - wdiHdr->PortId = WDI_PORT_ANY; - } - else - { - wdiHdr->PortId = (WDI_PORT_ID)GET_PORT_NUMBER(pAdapter); - } - wdiHdr->Reserved = 0; - wdiHdr->Status = status; - wdiHdr->TransactionId = 0; - wdiHdr->IhvSpecificId = 0; - - NdisMIndicateStatusEx( - pAdapter->pNdisCommon->hNdisAdapter, - indic - ); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("<== wdi_UnsolicitedIndication()\n")); -} - -// -// The following helper functions are used to determined if a -// BSS has the capability of specific wireless mode. -// 2005.01.13, by rcnjko. -// -BOOLEAN -WDIWithWirelessB( - PRT_WLAN_BSS pRtBss) -{ - u2Byte i; - u1Byte rate; - - // Check channels. - if(pRtBss->ChannelNumber > 14) - { - return FALSE; - } - - // Check supported rates. - for(i = 0; i < pRtBss->bdSupportRateEXLen; i++) - { - rate = pRtBss->bdSupportRateEXBuf[i] & 0x7f; - if( MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) ) - { - return TRUE; - } - } - - return FALSE; -} - -BOOLEAN -WDIWithWirelessG( - PRT_WLAN_BSS pRtBss) -{ - u2Byte i; - u1Byte rate; - - // Check channels. - if(pRtBss->ChannelNumber > 14) - { - return FALSE; - } - - // Check supported rates. - for(i = 0; i < pRtBss->bdSupportRateEXLen; i++) - { - rate = pRtBss->bdSupportRateEXBuf[i] & 0x7f; - if( MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_G) && - !MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_B) ) - { - return TRUE; - } - } - - // Check if it contains ERP information element. - // Some AP, WAG-302, will not always claim OFDM rates in their ProbeRsp or Beacon - // but it is in G mode. 2005.08.23, by rcnjko. - if(pRtBss->bERPInfoValid) - { - return TRUE; - } - - return FALSE; -} - -BOOLEAN -WDIWithWirelessA( - PRT_WLAN_BSS pRtBss) -{ - u2Byte i; - u1Byte rate; - - // Check channels. - if(pRtBss->ChannelNumber <= 14 || - pRtBss->ChannelNumber > 184 ) - { - return FALSE; - } - - // Check supported rates. - for(i = 0; i < pRtBss->bdSupportRateEXLen; i++) - { - rate = pRtBss->bdSupportRateEXBuf[i] & 0x7f; - if( MgntIsRateValidForWirelessMode(rate, WIRELESS_MODE_A) ) - { - return TRUE; - } - } - - return FALSE; -} - -//// -// This routine determine if we should report the BSS scanned -// to upper layer. -// 2005.01.13, by rcnjko. -// -BOOLEAN -WDIFilterRtBss( - PADAPTER Adapter, - PRT_WLAN_BSS pRtBss - ) -{ - PRT_NDIS6_COMMON pNdisCommon = Adapter->pNdisCommon; - BOOLEAN bAcceptable = TRUE; - BOOLEAN bHasB, bHasG, bHasA; - - // Determine the capability of wireless mode of the BSS. - bHasB = WDIWithWirelessB(pRtBss); - bHasG = WDIWithWirelessG(pRtBss); - bHasA = WDIWithWirelessA(pRtBss); - - // - // 1. Maybe we may need to use a table in the future. - // 2. Currently, we only consider B/G case. - if( bHasB && !bHasG && !bHasA ) - { // The BSS is pure B. - if( pNdisCommon->RegWirelessMode4ScanList == WIRELESS_MODE_G || - pNdisCommon->RegWirelessMode4ScanList == WIRELESS_MODE_A ) - { // We are pure A or pure G. - bAcceptable = FALSE; - } - } - - if(pRtBss->IE.Length <= sizeof(RT_FIXED_IE_FIELD)) - bAcceptable = FALSE; - - return bAcceptable; -} - -static -VOID -wdiext_IndicateP2PDeviceFound( - IN ADAPTER *pAdapter, - IN VOID *pvDev - ) -{ - WDI_INDICATION_BSS_ENTRY_LIST_PARAMETERS param; - WDI_BSS_ENTRY_CONTAINER entry; - LARGE_INTEGER CurrentTime; - - P2P_DEV_LIST_ENTRY *dev = (P2P_DEV_LIST_ENTRY *)pvDev; - P2P_FRAME_INFO *finfo = NULL; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - NDIS_OID_REQUEST *req = NULL; - WDI_MESSAGE_HEADER *reqWdiHdr = NULL; - - u4Byte devSpecCtx = 0x07060504; - - // get info of last rx frame - if(RTIsListEmpty(&dev->rxFrameQ)) - return; - - if(!pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest) - return; - - req = pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest; - reqWdiHdr = (WDI_MESSAGE_HEADER *)req->DATA.METHOD_INFORMATION.InformationBuffer; - - finfo = (P2P_FRAME_INFO *)RTGetTailList(&dev->rxFrameQ); - - // zero - PlatformZeroMemory(¶m, sizeof(param)); - PlatformZeroMemory(&entry, sizeof(entry)); - - // optional - param.Optional.DeviceDescriptor_IsPresent = TRUE; - - // ArrayOfElementsOfWIFI_BSS_ENTRY_CONTAINER DeviceDescriptor - param.DeviceDescriptor.ElementCount = 1; - param.DeviceDescriptor.pElements = &entry; - - // WIFI_MAC_ADDRESS_CONTAINER BSSID - cpMacAddr(entry.BSSID.Address, finfo->msg->bssid); - - // Get current timestamp - NdisGetCurrentSystemTime(&CurrentTime); - - // WIFI_BYTE_BLOB ProbeResponseFrame, BeaconFrame - if(P2P_FID_BEACON == finfo->type) - { - entry.Optional.BeaconFrame_IsPresent = TRUE; - entry.BeaconFrame.ElementCount = finfo->frameLen - sMacHdrLng; - entry.BeaconFrame.pElements = (UINT8 *)finfo->frame + sMacHdrLng; - } - else if(P2P_FID_PROBE_RSP == finfo->type) - { - entry.Optional.ProbeResponseFrame_IsPresent = TRUE; - entry.ProbeResponseFrame.ElementCount = finfo->frameLen - sMacHdrLng; - entry.ProbeResponseFrame.pElements = (UINT8 *)finfo->frame + sMacHdrLng; - } - else - return; - - // WDI_SIGNAL_INFO_CONTAINER SignalInfo - entry.SignalInfo.RSSI = (INT32)(((finfo->sigStrength + 1) >> 1) - 95); - entry.SignalInfo.LinkQuality = finfo->sigStrength; - - // WDI_CHANNEL_INFO_CONTAINER ChannelInfo - entry.ChannelInfo.ChannelNumber = finfo->channel; - entry.ChannelInfo.BandId = (finfo->channel < 36) ? WDI_BAND_ID_2400 : WDI_BAND_ID_5000; - - // WDI_BYTE_BLOB DeviceSpecificContext, this is OPTIONAL - entry.Optional.DeviceSpecificContext_IsPresent = TRUE; - entry.DeviceSpecificContext.ElementCount = sizeof(devSpecCtx); - entry.DeviceSpecificContext.pElements = (UINT8 *)&devSpecCtx; - - // WDI_AGE_INFO_CONTAINER EntryAgeInfo - entry.EntryAgeInfo.HostTimeStamp = CurrentTime.QuadPart;// [SDIO-482] in JIRA - entry.EntryAgeInfo.CachedInformation = 0; - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationBssEntryList( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - return; - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - (PVOID)req->RequestId, - NDIS_STATUS_WDI_INDICATION_BSS_ENTRY_LIST, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - - return; -} - -VOID -wdiext_IndicateP2PActionFrameReceived( - IN VOID *pvP2PInfo, - IN u4Byte eid, - IN MEMORY_BUFFER *info - ) -{ - P2P_INFO *pP2PInfo = (P2P_INFO *)pvP2PInfo; - ADAPTER *pAdapter = pP2PInfo->pAdapter; - - P2P_EVENT_DATA *evtData = (P2P_EVENT_DATA *)info->Buffer; - u4Byte ieOffset = FRAME_OFFSET_P2P_PUB_ACT_ELEMENTS; - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - WDI_INDICATION_P2P_ACTION_FRAME_RECEIVED_PARAMETERS param = {0}; - - FunctionIn(COMP_OID_SET); - - // prepare structure, ref N63CIndicateReceivedInvitationResponse - rtStatus = (ieOffset < evtData->Packet.Length) ? RT_STATUS_SUCCESS : evtData->rtStatus; - status = NdisStatusFromRtStatus(rtStatus); - - if(NDIS_STATUS_SUCCESS == status) - { - param.FrameInfo.Optional.DeviceContext_IsPresent = FALSE; - - if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST; - else if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE; - else if(P2P_EVENT_RECEIVED_GO_NEGOTIATION_REQUEST == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST; - else if(P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE; - else if(P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM; - else if(P2P_EVENT_RECEIVED_INVITATION_REQUEST == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_INVITATION_REQUEST; - else if(P2P_EVENT_RECEIVED_INVITATION_RESPONSE == eid) - param.FrameInfo.FrameParams.ActionFrameType = WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE; - else - return; - - cpMacAddr(param.FrameInfo.FrameParams.PeerDeviceAddress.Address, evtData->Packet.Buffer + FRAME_OFFSET_ADDRESS2); - param.FrameInfo.FrameParams.DialogToken = *(evtData->Packet.Buffer + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - param.FrameInfo.FrameIEs.ElementCount = evtData->Packet.Length - ieOffset; - param.FrameInfo.FrameIEs.pElements = evtData->Packet.Buffer + ieOffset; - } - - // gen TLV - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationP2pActionFrameReceived( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - return; - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_P2P_ACTION_FRAME_RECEIVED, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - - FunctionOut(COMP_OID_SET); - - return; -} - -VOID -wdiext_IndicateBSSEntry( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_BSS_ENTRY_LIST_PARAMETERS param; - WDI_BSS_ENTRY_CONTAINER entry; - RT_802_11_BSSID_LIST RtBssList = {0}; - PRT_WLAN_BSS pRtBss = NULL; - u4Byte i = 0; - ULONG buflen = 0; - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_MESSAGE_HEADER *reqWdiHdr = NULL; - u4Byte devSpecCtx = 0x07060504; - LARGE_INTEGER CurrentTime; - - if(!pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest) - return; - - FunctionIn(COMP_MLME); - - //Get scan list - RtBssList.NumberOfItems = 0; - RtBssList.pbssidentry = pAdapter->bssDescList; - if( (pMgntInfo->bPrepareRoaming == TRUE) && (pMgntInfo->PrepareRoamState ==RT_PREPARE_ROAM_NORMAL_ROAM_BETTER_AP) ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Skip scan triggered by Roam\n")); - FunctionOut(COMP_MLME); - return; - } - else - { -#if BSS_LIST_CACHE - MgntActQuery_802_11_BSSID_LIST(pAdapter, &RtBssList, FALSE); -#else - RT_TRACE(COMP_MLME, DBG_LOUD, ("Indicate actual scan result of BSS list\n")); - MgntActQuery_802_11_BSSID_LIST(pAdapter, &RtBssList, TRUE); -#endif - } - - req = pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest; - reqWdiHdr = (WDI_MESSAGE_HEADER *)req->DATA.METHOD_INFORMATION.InformationBuffer; - - //Indicate BSS entry one by one. - for (i=0; ibdBssIdBuf); - - // WIFI_BYTE_BLOB ProbeResponseFrame, BeaconFrame - if(pRtBss->BssPacketType & BSS_PKT_PROBE_RSP) - { - entry.Optional.ProbeResponseFrame_IsPresent = TRUE; - entry.ProbeResponseFrame.ElementCount = pRtBss->IE.Length; - entry.ProbeResponseFrame.pElements = (UINT8 *)pRtBss->IE.Octet; - } - else if(pRtBss->BssPacketType & BSS_PKT_BEACON) - { - entry.Optional.BeaconFrame_IsPresent = TRUE; - entry.BeaconFrame.ElementCount = pRtBss->IE.Length; - entry.BeaconFrame.pElements = (UINT8 *)pRtBss->IE.Octet; - } - else - { - FunctionOut(COMP_MLME); - return; - } - - // WDI_SIGNAL_INFO_CONTAINER SignalInfo - pRtBss->RecvSignalPower = 0xffffffce; - entry.SignalInfo.RSSI = (INT32)pRtBss->CumRecvSignalPower; - entry.SignalInfo.LinkQuality = (UINT32)pRtBss->RSSI; - - // WDI_CHANNEL_INFO_CONTAINER ChannelInfo - entry.ChannelInfo.ChannelNumber = (UINT32)pRtBss->ChannelNumber; - entry.ChannelInfo.BandId = (pRtBss->ChannelNumber < 36) ? WDI_BAND_ID_2400 : WDI_BAND_ID_5000; - RT_TRACE(COMP_MLME, DBG_LOUD, ("pRtBss->ChannelNumber=%d\n", pRtBss->ChannelNumber)); - - // WDI_BYTE_BLOB DeviceSpecificContext, this is OPTIONAL - entry.Optional.DeviceSpecificContext_IsPresent = TRUE; - entry.DeviceSpecificContext.ElementCount = sizeof(devSpecCtx); - entry.DeviceSpecificContext.pElements = (UINT8 *)&devSpecCtx; - - NdisGetCurrentSystemTime(&CurrentTime); - - // WDI_AGE_INFO_CONTAINER EntryAgeInfo - entry.EntryAgeInfo.HostTimeStamp = CurrentTime.QuadPart;// [SDIO-482] in JIRA - entry.EntryAgeInfo.CachedInformation = 0; - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationBssEntryList( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - { - FunctionOut(COMP_MLME); - return; - } - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - (PVOID)req->RequestId, - NDIS_STATUS_WDI_INDICATION_BSS_ENTRY_LIST, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - } - - FunctionOut(COMP_MLME); - - return; -} - -VOID -wdiext_IndicateBSSEntryBySSID( - IN PADAPTER pAdapter, - IN WDI_SSID *pSSID - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_BSS_ENTRY_LIST_PARAMETERS param; - WDI_BSS_ENTRY_CONTAINER entry; - RT_802_11_BSSID_LIST RtBssList = {0}; - PRT_WLAN_BSS pRtBss = NULL; - u4Byte i = 0; - ULONG buflen = 0; - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_MESSAGE_HEADER *reqWdiHdr = NULL; - u4Byte devSpecCtx = 0x07060504; - BOOL bWildCardSSID = TRUE; - LARGE_INTEGER CurrentTime; - - if(!pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest) - return; - - FunctionIn(COMP_MLME); - - if(pSSID->ElementCount != 0) - bWildCardSSID = FALSE; - - //Get scan list - RtBssList.NumberOfItems = 0; - RtBssList.pbssidentry = pAdapter->bssDescList; - if( (pMgntInfo->bPrepareRoaming == TRUE) && (pMgntInfo->PrepareRoamState ==RT_PREPARE_ROAM_NORMAL_ROAM_BETTER_AP) ) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("Skip scan triggered by Roam\n")); - FunctionOut(COMP_MLME); - return; - } - else - { -#if BSS_LIST_CACHE - MgntActQuery_802_11_BSSID_LIST(pAdapter, &RtBssList, FALSE); -#else - RT_TRACE(COMP_MLME, DBG_LOUD, ("Indicate actual scan result of BSS list\n")); - MgntActQuery_802_11_BSSID_LIST(pAdapter, &RtBssList, TRUE); -#endif - } - - req = pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest; - reqWdiHdr = (WDI_MESSAGE_HEADER *)req->DATA.METHOD_INFORMATION.InformationBuffer; - - //Indicate BSS entry one by one. - for (i=0; iElementCount || - NdisEqualMemory(RtBssList.pbssidentry[i].bdSsIdBuf, pSSID->pElements, pSSID->ElementCount) == 0) - { - //UE specify SSID to update, skip this one - continue; - } - } - - // zero - PlatformZeroMemory(¶m, sizeof(param)); - PlatformZeroMemory(&entry, sizeof(entry)); - - // optional - param.Optional.DeviceDescriptor_IsPresent = TRUE; - - // ArrayOfElementsOfWIFI_BSS_ENTRY_CONTAINER DeviceDescriptor - param.DeviceDescriptor.ElementCount = 1; - param.DeviceDescriptor.pElements = &entry; - - // WIFI_MAC_ADDRESS_CONTAINER BSSID - cpMacAddr(entry.BSSID.Address, pRtBss->bdBssIdBuf); - - // WIFI_BYTE_BLOB ProbeResponseFrame, BeaconFrame - if(pRtBss->BssPacketType & BSS_PKT_PROBE_RSP) - { - entry.Optional.ProbeResponseFrame_IsPresent = TRUE; - entry.ProbeResponseFrame.ElementCount = pRtBss->IE.Length; - entry.ProbeResponseFrame.pElements = (UINT8 *)pRtBss->IE.Octet; - } - else if(pRtBss->BssPacketType & BSS_PKT_BEACON) - { - entry.Optional.BeaconFrame_IsPresent = TRUE; - entry.BeaconFrame.ElementCount = pRtBss->IE.Length; - entry.BeaconFrame.pElements = (UINT8 *)pRtBss->IE.Octet; - } - else - { - FunctionOut(COMP_MLME); - return; - } - - // WDI_SIGNAL_INFO_CONTAINER SignalInfo - pRtBss->RecvSignalPower = 0xffffffce; - entry.SignalInfo.RSSI = (INT32)pRtBss->CumRecvSignalPower; - entry.SignalInfo.LinkQuality = (UINT32)pRtBss->RSSI; - - // WDI_CHANNEL_INFO_CONTAINER ChannelInfo - entry.ChannelInfo.ChannelNumber = (UINT32)pRtBss->ChannelNumber; - entry.ChannelInfo.BandId = (pRtBss->ChannelNumber < 36) ? WDI_BAND_ID_2400 : WDI_BAND_ID_5000; - RT_TRACE(COMP_MLME, DBG_LOUD, ("pRtBss->ChannelNumber=%d\n", pRtBss->ChannelNumber)); - - // WDI_BYTE_BLOB DeviceSpecificContext, this is OPTIONAL - entry.Optional.DeviceSpecificContext_IsPresent = TRUE; - entry.DeviceSpecificContext.ElementCount = sizeof(devSpecCtx); - entry.DeviceSpecificContext.pElements = (UINT8 *)&devSpecCtx; - - NdisGetCurrentSystemTime(&CurrentTime); - - // WDI_AGE_INFO_CONTAINER EntryAgeInfo - entry.EntryAgeInfo.HostTimeStamp = CurrentTime.QuadPart;// [SDIO-482] in JIRA - entry.EntryAgeInfo.CachedInformation = 0; - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationBssEntryList( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - { - FunctionOut(COMP_MLME); - return; - } - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - (PVOID)req->RequestId, - NDIS_STATUS_WDI_INDICATION_BSS_ENTRY_LIST, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - } - - FunctionOut(COMP_MLME); - - return; -} - - -VOID -wdiext_IndicateAssociationResult( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_ASSOCIATION_RESULT_LIST AsocResultList; - WDI_ASSOCIATION_RESULT_CONTAINER AsocResult; - RT_AUTH_MODE AuthMode = RT_802_11AuthModeOpen; - u4Byte AuthAlgo = 0, UnicastCipher = 0, McastDataCipher = 0, McastMgntCipher = 0; - u1Byte FourAddrSupport = FALSE, PortAuthorized = FALSE, WMMQos = FALSE; - u4Byte DSInfo = 0, AssocComeBackTime = 0, BandID = 0; - WDI_PHY_TYPE PhyType = WDI_PHY_TYPE_UNKNOWN; - PUCHAR pOutput = NULL; - ULONG length = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - MgntActQuery_802_11_AUTHENTICATION_MODE( pAdapter, &AuthMode ); - AuthAlgo = N6CAuthModeToDot11( &AuthMode ); - UnicastCipher = N6CEncAlgorithmToDot11( &(pMgntInfo->SecurityInfo.PairwiseEncAlgorithm) ); - McastDataCipher = N6CEncAlgorithmToDot11( &(pMgntInfo->SecurityInfo.GroupEncAlgorithm) ); - if( pMgntInfo->bInBIPMFPMode && TEST_FLAG(pMgntInfo->targetAKMSuite, AKM_RSNA_1X_SHA256 | AKM_RSNA_PSK_SHA256)) - McastMgntCipher = WDI_CIPHER_ALGO_BIP; - else - McastMgntCipher = WDI_CIPHER_ALGO_NONE; // PMF ? - WMMQos = (pMgntInfo->pStaQos->QosCapability > QOS_DISABLE)?TRUE:FALSE; - - RT_TRACE(COMP_MLME, DBG_LOUD, ("wdiext_IndicateAssociationResult WMMQos = %d\n", WMMQos)); - DSInfo = WDI_DS_UNKNOWN; - if( pMgntInfo->RspStatusCode == 30 && pMgntInfo->TIE.Length != 0) - { - if(pMgntInfo->TIE.Octet[0] == 3 ) - { - AssocComeBackTime = (u4Byte)(pMgntInfo->TIE.Octet[1] & 0xff); - AssocComeBackTime += (u4Byte)(pMgntInfo->TIE.Octet[2] << 8) & 0xff; - AssocComeBackTime += (u4Byte)(pMgntInfo->TIE.Octet[3] << 16) & 0xff; - AssocComeBackTime += (u4Byte)(pMgntInfo->TIE.Octet[4] << 24) & 0xff; - } - else - AssocComeBackTime = 0; - } - else - AssocComeBackTime = 0; - if(pMgntInfo->dot11CurrentChannelNumber < 36) - BandID = WDI_BAND_ID_2400; - else - BandID = WDI_BAND_ID_5000; - - switch (pMgntInfo->dot11CurrentWirelessMode) - { - default: - PhyType = WDI_PHY_TYPE_OFDM; - break; - - case WIRELESS_MODE_A: - PhyType = WDI_PHY_TYPE_OFDM; - break; - - case WIRELESS_MODE_G: - PhyType = WDI_PHY_TYPE_ERP; - break; - - case WIRELESS_MODE_B: - PhyType = WDI_PHY_TYPE_HRDSSS; - break; - - case WIRELESS_MODE_N_24G: - case WIRELESS_MODE_N_5G: - case WIRELESS_MODE_AUTO: - PhyType = WDI_PHY_TYPE_HT; - break; - - case WIRELESS_MODE_AC_5G: - case WIRELESS_MODE_AC_ONLY: - case WIRELESS_MODE_AC_24G: - PhyType = WDI_PHY_TYPE_VHT; - break; - - - } - - PlatformZeroMemory(&AsocResult, sizeof(WDI_ASSOCIATION_RESULT_CONTAINER)); - - PlatformMoveMemory(AsocResult.BSSID.Address, pMgntInfo->Bssid, 6); - AsocResultList.AssociationResults.ElementCount = 1; - AsocResultList.AssociationResults.pElements = &AsocResult; - AsocResult.AssociationResultParameters.AssociationStatus = (pMgntInfo->mAssoc)?WDI_ASSOC_STATUS_SUCCESS:WDI_ASSOC_STATUS_FAILURE; - AsocResult.AssociationResultParameters.StatusCode = pMgntInfo->RspStatusCode; - AsocResult.AssociationResultParameters.ReAssociation = pMgntInfo->AsocInfo.FlagReAsocReq; - AsocResult.AssociationResultParameters.AuthAlgorithm = AuthAlgo; - AsocResult.AssociationResultParameters.UnicastCipherAlgorithm = UnicastCipher; - AsocResult.AssociationResultParameters.MulticastDataCipherAlgorithm = McastDataCipher; - AsocResult.AssociationResultParameters.MulticastMgmtCipherAlgorithm = McastMgntCipher; - AsocResult.AssociationResultParameters.FourAddressSupported = FourAddrSupport; - AsocResult.AssociationResultParameters.PortAuthorized = PortAuthorized; - AsocResult.AssociationResultParameters.WMMQoSEnabled = WMMQos; - AsocResult.AssociationResultParameters.DSInfo = DSInfo; - AsocResult.AssociationResultParameters.AssociationComebackTime = AssocComeBackTime; - AsocResult.AssociationResultParameters.BandID = BandID; - AsocResult.Optional.AssociationRequestFrame_IsPresent = TRUE; - AsocResult.AssociationRequestFrame.ElementCount = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AsocReqLength); - AsocResult.AssociationRequestFrame.pElements = MMPDU_BODY(pMgntInfo->AsocInfo.AsocReq); - AsocResult.Optional.AssociationResponseFrame_IsPresent = TRUE; - AsocResult.AssociationResponseFrame.ElementCount = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AsocRespLength); - AsocResult.AssociationResponseFrame.pElements = MMPDU_BODY(pMgntInfo->AsocInfo.AsocResp); - AsocResult.Optional.BeaconProbeResponse_IsPresent = TRUE; - AsocResult.BeaconProbeResponse.ElementCount = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.BeaconLength); - AsocResult.BeaconProbeResponse.pElements = MMPDU_BODY(pMgntInfo->AsocInfo.Beacon); - AsocResult.Optional.ActivePhyTypeList_IsPresent = TRUE; - AsocResult.ActivePhyTypeList.ElementCount = 1; - AsocResult.ActivePhyTypeList.pElements = &PhyType; - - ndisStatus = GenerateWdiIndicationAssociationResult( - &AsocResultList, - sizeof(NDIS_STATUS_INDICATION)+sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput); - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("GenerateWdiIndicationAssociationResult(): return length %d\n", length)); - RT_PRINT_DATA(COMP_MLME, DBG_TRACE, ("buffer\n"), pOutput, length); - RT_TRACE(COMP_MLME, DBG_LOUD, ("SendUnsolictedIndication(): EthertypeEncapTable_IsPresent %d\n", AsocResult.Optional.EthertypeEncapTable_IsPresent)); - - ndisStatus = WDI_AddDatapathPeer(pAdapter, AsocResult.BSSID.Address); - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - (PVOID)pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest->RequestId, - NDIS_STATUS_WDI_INDICATION_ASSOCIATION_RESULT, - NDIS_STATUS_SUCCESS, - pOutput, - length); - - FreeGenerated(pOutput); - } - else - { - RT_TRACE(COMP_MLME, DBG_LOUD, ("GenerateWdiIndicationAssociationResult(): generate TLV failure\n")); - } - - if( NDIS_STATUS_SUCCESS != ndisStatus ) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("wdiext_IndicateAssociationResult: fail to create peer, so disconnect with this AP[%2x:%2x:%2x:%2x:%2x:%2x]\n", AsocResult.BSSID.Address[0],AsocResult.BSSID.Address[1],AsocResult.BSSID.Address[2], AsocResult.BSSID.Address[3], AsocResult.BSSID.Address[4], AsocResult.BSSID.Address[5])); - MgntDisconnectAP(pAdapter, inactivity); - } -} - -// -// Description: -// Indicate unsolicited event WDI_INDICATION_FT_ASSOC_PARAMS_NEEDED to WDI. -// -RT_STATUS -wdiext_IndicateFtAssocNeeded( - IN PADAPTER pAdapter - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_FT_ASSOC_PARAMS_NEEDED_PARAMETERS param; - pu1Byte pIndicBuf = NULL; - ULONG indicBufLen = 0; - - PlatformZeroMemory(¶m, sizeof(WDI_INDICATION_FT_ASSOC_PARAMS_NEEDED_PARAMETERS)); - - do - { - if(pMgntInfo->AsocInfo.AuthSeq1Length < sMacHdrLng) - { - RT_TRACE_F(COMP_INDIC, DBG_WARNING, ("Too short of AuthSeq2Length = %d\n", pMgntInfo->AsocInfo.AuthSeq1Length)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(pMgntInfo->AsocInfo.AuthSeq2Length < sMacHdrLng) - { - RT_TRACE_F(COMP_INDIC, DBG_WARNING, ("Too short of AuthSeq2Length = %d\n", pMgntInfo->AsocInfo.AuthSeq2Length)); - rtStatus = RT_STATUS_INVALID_DATA; - break; - } - - cpMacAddr(param.BssId.Address, pMgntInfo->Bssid); - - param.AuthRequest.ElementCount = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AuthSeq1Length); - param.AuthRequest.pElements = MMPDU_BODY(pMgntInfo->AsocInfo.AuthSeq1); - - param.AuthResponse.ElementCount = MMPDU_BODY_LEN(pMgntInfo->AsocInfo.AuthSeq2Length); - param.AuthResponse.pElements = MMPDU_BODY(pMgntInfo->AsocInfo.AuthSeq2); - - // Gen tlv - if(NDIS_STATUS_SUCCESS != (ndisStatus = - GenerateWdiIndicationFtAssocParamsNeeded( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &indicBufLen, - &((UINT8 *)pIndicBuf)))) - { - RT_TRACE_F(COMP_INDIC, DBG_SERIOUS, ("Fail (ndisStatus = 0x%08X) from GenerateWdiIndicationFtAssocParamsNeeded()\n", ndisStatus)); - rtStatus = RT_STATUS_OS_API_FAILED; - break; - } - - RT_PRINT_DATA(COMP_INDIC, DBG_LOUD, "NDIS_STATUS_WDI_INDICATION_FT_ASSOC_PARAMS_NEEDED:\n", pIndicBuf, indicBufLen); - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_FT_ASSOC_PARAMS_NEEDED, - NDIS_STATUS_SUCCESS, - pIndicBuf, - indicBufLen); - }while(FALSE); - - if(pIndicBuf) - { - // cleanup - FreeGenerated((UINT8 *)pIndicBuf); - } - - return rtStatus; -} - -VOID -wdiext_IndicateDisassociation( - IN ADAPTER *pAdapter, - IN u1Byte *addr, - IN u4Byte frameLen, - IN u1Byte *frame, - IN BOOLEAN bDisassoc, - IN u2Byte reason - ) -{ - WDI_INDICATION_DISASSOCIATION_PARAMETERS param; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - if(0 < frameLen && frameLen < sMacHdrLng) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("invalid deauth/disassociation len: %u\n", frameLen)); - return; - } - - PlatformZeroMemory(¶m, sizeof(param)); - - param.Optional.DeauthFrame_IsPresent = (FALSE == bDisassoc) && frameLen; - param.Optional.DisassociationFrame_IsPresent = (TRUE == bDisassoc) && frameLen; - param.Optional.NeedPeerStateCleanup_IsPresent = FALSE; - - cpMacAddr(param.DisconnectIndicationParameters.MacAddress.Address, addr); - param.DisconnectIndicationParameters.DisassociationWABIReason = bDisassoc - ? WDI_ASSOC_STATUS_PEER_DISASSOCIATED - : WDI_ASSOC_STATUS_PEER_DEAUTHENTICATED; - - if(frameLen) - { - if(bDisassoc) - { - param.DisassociationFrame.ElementCount = frameLen - sMacHdrLng; - param.DisassociationFrame.pElements = frame + sMacHdrLng; - } - else - { - param.DeauthFrame.ElementCount = frameLen - sMacHdrLng; - param.DeauthFrame.pElements = frame + sMacHdrLng; - } - } - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationDisassociation( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - return; - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_DISASSOCIATION, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - - return; -} - -VOID -wdiext_IndicateRadioStatus( - IN PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_RADIO_STATUS_PARAMETERS Params = {0}; - PUCHAR pOutput = NULL; - ULONG length = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = &(pWdi->TaskHandle); - - Params.RadioState.SoftwareState = (pMgntInfo->RfOffReason&RF_CHANGE_BY_SW)?0:1; - Params.RadioState.HardwareState = (pMgntInfo->RfOffReason&RF_CHANGE_BY_HW)?0:1; - - RT_TRACE(COMP_RF, DBG_LOUD, ("wdiext_IndicateRadioStatus(): Params.RadioState.SoftwareState is %d, Params.RadioState.HardwareState is %d\n", Params.RadioState.SoftwareState, Params.RadioState.HardwareState)); - - ndisStatus = GenerateWdiIndicationRadioStatus( - &Params, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput); - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - wdi_UnsolicitedIndication(pAdapter, - TRUE, - NULL, - NDIS_STATUS_WDI_INDICATION_RADIO_STATUS, - NDIS_STATUS_SUCCESS, - pOutput, - length); - - FreeGenerated(pOutput); - pOutput = NULL; - } - ndisStatus = NDIS_STATUS_NOT_SUPPORTED; -} - -VOID -wdiext_IndicateLinkStateChanged( - IN PADAPTER pAdapter, - IN BOOLEAN bForceLinkQuality, - IN u1Byte ucLinkQuality - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_LINK_STATE_CHANGE_PARAMETERS Params = {0}; - PUCHAR pOutput = NULL; - ULONG length = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - if (pMgntInfo->mAssoc || pMgntInfo->mIbss) - { - Params.LinkStateChangeParameters.LinkQuality = GetSignalQuality(pAdapter); - } - else - { - Params.LinkStateChangeParameters.LinkQuality = 0; - } - - if(bForceLinkQuality) - { - Params.LinkStateChangeParameters.LinkQuality = ucLinkQuality; - } - - Params.LinkStateChangeParameters.TxLinkSpeed = MgntActQuery_RT_11N_USER_SHOW_RATES(pAdapter , pMgntInfo->bForcedShowRxRate, FALSE)*1000/2; - Params.LinkStateChangeParameters.RxLinkSpeed = pMgntInfo->HighestOperaRate*1000/2; - cpMacAddr(Params.LinkStateChangeParameters.PeerMACAddress.Address, pMgntInfo->Bssid); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("wdiext_IndicateLinkStateChanged(): Params.LinkStateChangeParameters.TxLinkSpeed is %d\n", Params.LinkStateChangeParameters.TxLinkSpeed)); - RT_TRACE(COMP_MLME, DBG_LOUD, ("wdiext_IndicateLinkStateChanged(): Params.LinkStateChangeParameters.RxLinkSpeed is %d\n", Params.LinkStateChangeParameters.RxLinkSpeed)); - - ndisStatus = GenerateWdiIndicationLinkStateChange( - &Params, - sizeof(NDIS_STATUS_INDICATION)+sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput); - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_LINK_STATE_CHANGE, - ndisStatus, - pOutput, - length); - - FreeGenerated(pOutput); - pOutput = NULL; - } -} - -VOID -wdiext_IndicateRoamingNeeded( - IN PADAPTER pAdapter, - IN u2Byte IndicationReason - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - WDI_INDICATION_ROAMING_NEEDED_PARAMETERS Params = {0}; - PUCHAR pOutput = NULL; - ULONG length = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - - pMgntInfo->bPrepareRoaming = TRUE; - - Params.RoamingReason = IndicationReason; - RT_TRACE_F(COMP_MLME, DBG_LOUD, ("Params.RoamingReason %d\n", Params.RoamingReason)); - - ndisStatus = GenerateWdiIndicationRoamingNeeded( - &Params, - sizeof(NDIS_STATUS_INDICATION)+sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput); - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_ROAMING_NEEDED, - ndisStatus, - pOutput, - length); - - FreeGenerated(pOutput); - pOutput = NULL; - } -} - -static -VOID -wdiext_IndicateP2POpChnl( - IN ADAPTER *pAdapter, - IN P2P_INFO *pP2PInfo - ) -{ - WDI_INDICATION_P2P_GROUP_OPERATING_CHANNEL_PARAMETERS param; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - NDIS_OID_REQUEST *req = NULL; - WDI_MESSAGE_HEADER *reqWdiHdr = NULL; - - if(!pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest) - return; - - req = pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest; - reqWdiHdr = (WDI_MESSAGE_HEADER *)req->DATA.METHOD_INFORMATION.InformationBuffer; - - // zero - PlatformZeroMemory(¶m, sizeof(param)); - - // fill - PlatformMoveMemory(param.Channel.CountryOrRegionString, pP2PInfo->CountryString, sizeof(pP2PInfo->CountryString)); - param.Channel.OperatingClass = pP2PInfo->RegulatoryClass; - param.Channel.ChannelNumber = pP2PInfo->OperatingChannel; - - param.IndicateReason = WDI_P2P_CHANNEL_INDICATE_REASON_NEW_CONNECTION; - if(pP2PInfo->bChannelSwitch) - { - param.IndicateReason = pP2PInfo->P2PChannelIndicationReason; - } - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationP2pGroupOperatingChannel( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - return; - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - (PVOID)req->RequestId, - NDIS_STATUS_WDI_INDICATION_P2P_GROUP_OPERATING_CHANNEL, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - - return; -} - - -PVOID -wdi_FindGroupPeerByPort( - IN PADAPTER pAdapter, - IN u2Byte PortNumber -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_PEER_ENTRY pPeerEntry = NULL; - u1Byte i; - - for(i = 0; i < MP_DEFAULT_NUMBER_OF_PORT; i++) - { - pPeerEntry = &pDefaultAdapter->RxPeerTable[i]; - if( pPeerEntry->bUsed == TRUE ) - { - if( pPeerEntry->uPortId == PortNumber ) - { - return (PVOID)pPeerEntry; - } - } - } - - return NULL; -} - -PVOID -wdi_FindPeerByAddr( - IN PADAPTER pAdapter, - IN pu1Byte pAddr -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_PEER_ENTRY pPeerEntry = NULL; - u1Byte i = 0, count = 0; - - count = pDefaultAdapter->RxPeerUsedCount; - for(i = MP_DEFAULT_NUMBER_OF_PORT; i < MAX_PEER_NUM; i++) - { - if( count == 0 ) - break; - - pPeerEntry = &pDefaultAdapter->RxPeerTable[i]; - if( pPeerEntry->bUsed == TRUE ) - { - count--; - if( PlatformCompareMemory(pPeerEntry->PeerAddr, pAddr, 6) == 0 ) - { - return (PVOID)pPeerEntry; - } - } - } - - return NULL; -} - -PVOID -wdi_GetAvailablePeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - WDI_PORT_ID PortId = (WDI_PORT_ID)pAdapter->pNdis62Common->PortNumber; - PRT_PEER_ENTRY pCurPeerEntry = NULL, pPeerEntry = NULL; - u1Byte i = 0, UnusedIndex = 0, count = 0; - BOOLEAN bFound = FALSE; - - FunctionIn(COMP_MLME); - - count = pDefaultAdapter->RxPeerUsedCount; - - for(i = MP_DEFAULT_NUMBER_OF_PORT; i < MAX_PEER_NUM; i++) - { - if( (count == 0) && (bFound == TRUE) ) - break; - - pPeerEntry = &pDefaultAdapter->RxPeerTable[i]; - - if( (pPeerEntry->bUsed == FALSE) && (bFound == FALSE) ) - { - bFound = TRUE; - UnusedIndex = i; - } - else if( pPeerEntry->bUsed == TRUE ) - { - count--; - if( PlatformCompareMemory(pPeerEntry->PeerAddr, pAddr, 6) == 0 ) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("wdi_GetAvailablePeer: The addres [%2x:%2x:%2x:%2x:%2x:%2x] had associated with specified Peer %d\n", pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5], pPeerEntry->uPeerId)); - FunctionOut(COMP_MLME); - return (PVOID)pPeerEntry; - } - } - } - - if( (i == MAX_PEER_NUM) && (bFound == FALSE) ) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("wdi_GetAvailablePeer: Peer is already full, so cannot find an unused peer to associate [%2x:%2x:%2x:%2x:%2x:%2x]\n", pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5])); - FunctionOut(COMP_MLME); - return NULL; - } - - pDefaultAdapter->RxPeerUsedCount++; - - pCurPeerEntry = &pDefaultAdapter->RxPeerTable[UnusedIndex]; - pCurPeerEntry->bUsed = TRUE; - pCurPeerEntry->uPeerId = UnusedIndex; - pCurPeerEntry->uPortId = (u2Byte)PortId; - PlatformMoveMemory(pCurPeerEntry->PeerAddr, pAddr, 6); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("wdi_GetAvailablePeer: Port %d associate the addres [%2x:%2x:%2x:%2x:%2x:%2x] at Peer %d\n", (u2Byte)PortId, pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5], UnusedIndex)); - - FunctionOut(COMP_MLME); - - return (PVOID)pCurPeerEntry; -} - -VOID -wdi_NotifyPeerData( - IN PADAPTER pAdapter, - IN u1Byte ExTid, - IN u2Byte Pid, - IN RT_RX_INDICATION_LEVEL level, - IN PNDIS_STATUS pNdisStatus -) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_NDIS6_COMMON pDefaultNdisCommon = pDefaultAdapter->pNdisCommon; - PADAPTER pTempAdapter = NULL; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - WDI_PEER_ID PeerId = (WDI_PEER_ID)Pid; - WDI_EXTENDED_TID ExtendTid = (WDI_EXTENDED_TID)ExTid; - KIRQL Irql = 0; - BOOLEAN bLackResource = FALSE; - - PlatformAcquireSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - if( (pNdisCommon->bRxControlState != RT_RX_STOP) && (pDefaultNdisCommon->bRxDataPathState != RT_RX_PAUSE) ) - { - pNdisCommon->bRxControlState = RT_RX_NOTIFYING; - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - - PlatformAcquireSpinLock(pAdapter, RT_RX_SPINLOCK); - bLackResource = RxCheckResource(pAdapter)?FALSE:TRUE; - PlatformReleaseSpinLock(pAdapter, RT_RX_SPINLOCK); - - if( bLackResource ) - RT_TRACE(COMP_RECV, DBG_WARNING, ("wdi_NotifyPeerData(): RFD is less than lower bound (%d)\n", RFD_LOWER_BOUND)); - - Irql = KeGetCurrentIrql(); - // Prefast warning C6387: '_Param_(5)' could be '0': this does not adhere to the specification for the function 'RxInorderDataIndication'. - // False positive, caller gurantee pNdisStatus valid. -#pragma warning( disable:6387 ) - if(Irql > PASSIVE_LEVEL ) - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("wdi_NotifyPeerData(): it is DISPATCH level\n")); - if( bLackResource ) - pWdi->WdiDataApi.RxInorderDataIndication(pWdi->DataPathHandle, WDI_RX_INDICATION_DISPATCH_GENERAL_WITH_LOW_RESOURCES, PeerId, ExtendTid, NULL, pNdisStatus); - else - pWdi->WdiDataApi.RxInorderDataIndication(pWdi->DataPathHandle, WDI_RX_INDICATION_DISPATCH_GENERAL, PeerId, ExtendTid, NULL, pNdisStatus); - } - else - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("wdi_NotifyPeerData(): it is PASSIVE level\n")); - if( bLackResource ) - pWdi->WdiDataApi.RxInorderDataIndication(pWdi->DataPathHandle, WDI_RX_INDICATION_PASSIVE_WITH_LOW_RESOURCES, PeerId, ExtendTid, NULL, pNdisStatus); - else - pWdi->WdiDataApi.RxInorderDataIndication(pWdi->DataPathHandle, WDI_RX_INDICATION_PASSIVE, PeerId, ExtendTid, NULL, pNdisStatus); - } - - PlatformAcquireSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - if( pNdisCommon->bRxControlState == RT_RX_PREPARE_STOP ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("Driver change Rx control state to stop mode and stop to notify Rx manager data in queue\n")); - pTempAdapter = GetDefaultAdapter(pAdapter); - do - { - pNdisCommon = pTempAdapter->pNdisCommon; - if( pNdisCommon->bRxControlState == RT_RX_PREPARE_STOP ) - { - pNdisCommon->bRxControlState = RT_RX_STOP; - GLWdiTxRxStatistics.numWdiRxStop++; - } - pTempAdapter = GetNextExtAdapter(pTempAdapter); - }while(pTempAdapter != NULL ); - - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - RT_TRACE(COMP_INIT, DBG_WARNING, ("Driver call RxStopConfirm for Rx manager\n")); - pWdi->WdiDataApi.RxStopConfirm(pWdi->DataPathHandle); - } - else if( pNdisCommon->bRxControlState == RT_RX_NOTIFYING ) - { - pNdisCommon->bRxControlState = RT_RX_NORMAL; - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - } - else - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("wdi_NotifyPeerData: Unknown case and RxControlState is %d\n", pNdisCommon->bRxControlState)); - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - } - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - *pNdisStatus = NDIS_STATUS_MEDIA_BUSY; - RT_TRACE(COMP_RECV, DBG_WARNING, ("Stop to notify Rx manager data in queue\n")); - } -} - -NDIS_STATUS -WDI_Initialize( - IN PDRIVER_OBJECT pDriverObject, - IN PUNICODE_STRING RegistryPath, - IN PNDIS_MINIPORT_DRIVER_CHARACTERISTICS pMChars - ) -{ - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS WdiChar = {0}; - - pMChars->ShutdownHandlerEx = N6SdioShutdown;//ok - pMChars->DevicePnPEventNotifyHandler = N6SdioPnPEventNotify;//ok - pMChars->UnloadHandler = N6SdioUnload;//ok - pMChars->OidRequestHandler = N6SdioOidRequest; - pMChars->CancelOidRequestHandler = N6SdioCancelOidRequest; - pMChars->SetOptionsHandler = N6SdioSetOptions;// MPSetOptions; - pMChars->CheckForHangHandlerEx = NULL; // Need check - pMChars->DirectOidRequestHandler = N6CDirectOidRequest; - pMChars->CancelDirectOidRequestHandler = N6CCancelDirectOidRequest; - - // WorkAround for 0x9F BSOD - pMChars->ResetHandlerEx = N6SdioReset; - - RtlZeroMemory(&WdiChar, sizeof(WdiChar)); - - WdiChar.WdiVersion = WDI_VERSION_LATEST; - - WdiChar.Header.Type = NDIS_OBJECT_TYPE_MINIPORT_WDI_CHARACTERISTICS, - WdiChar.Header.Size = NDIS_SIZEOF_MINIPORT_WDI_CHARACTERISTICS_REVISION_1; - WdiChar.Header.Revision = NDIS_MINIPORT_DRIVER_WDI_CHARACTERISTICS_REVISION_1; - - WdiChar.AllocateAdapterHandler = N6SdioWdi_AllocateAdapter; - WdiChar.FreeAdapterHandler = N6SdioWdi_FreeAdapter; - WdiChar.OpenAdapterHandler = N6SdioWdi_OpenAdapter; - WdiChar.CloseAdapterHandler = N6SdioWdi_CloseAdapter; - WdiChar.TalTxRxInitializeHandler = N6SdioWdi_TalTxRxInitialize; - WdiChar.TalTxRxDeinitializeHandler = N6SdioWdi_TalTxRxDeinitialize; - - WdiChar.HangDiagnoseHandler = N6SdioWdi_HangDiagnose; - - // Optional handler - WdiChar.StartOperationHandler = N6SdioWdi_StartOperation; - WdiChar.StopOperationHandler = N6SdioWdi_StopOperation; - - Status = NdisMRegisterWdiMiniportDriver( - pDriverObject, - RegistryPath, - &GlobalRtDriverContext, - pMChars, - &WdiChar, - &(GlobalRtDriverContext.NdisContext.Ndis6MiniportDriverHandle) - ); - RT_TRACE(COMP_INIT, DBG_LOUD, ("WDI register WDI miniport! Status 0x%x\n", Status)); - - return Status; -} - - -VOID -WDI_DeInitialize( - IN NDIS_HANDLE DriverHandle - ) -{ - NdisMDeregisterWdiMiniportDriver(DriverHandle); -} - -VOID -WDI_InitRxQueue( - IN PADAPTER pAdapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u2Byte index = 0; - PRT_PEER_ENTRY pPeerEntry = NULL; - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(index=0; index < MAX_PEER_NUM; index++) - { - RTInitializeSListHead( &(pDefaultAdapter->RxPeerQueue[index]) ); - } - for(index=0; index < MAX_PEER_NUM; index++) - { - pPeerEntry = &pDefaultAdapter->RxPeerTable[index]; - PlatformZeroMemory(pPeerEntry, sizeof(RT_PEER_ENTRY)); - } - pDefaultAdapter->RxPeerUsedCount = 0; - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); -} - -VOID -WDI_DeInitRxQueue( - IN PADAPTER pAdapter - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u2Byte index = 0; - PNET_BUFFER_LIST pNetBufferList=NULL; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_DeInitRxQueue() ==> \n")); - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(index=0; indexRxPeerQueue[index]) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], Free MDLs/NBLs for Peer ID %d \n", index)); - pNetBufferList = N6CGetHeadNblWaitQueue(pDefaultAdapter->RxPeerQueue[index]); - RTInitializeSListHead( &(pDefaultAdapter->RxPeerQueue[index]) ); - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - WDI_FreeRxFrame(pAdapter, pNetBufferList); - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_DeInitRxQueue() <== \n")); -} - - -VOID -WDI_PnPNotiry( - IN PADAPTER pAdapter - ) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - if( pWdi->TaskHandle.Status & RT_OID_HANDLER_STATUS_SET ) - { - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } - - if( pWdi->PropertyHandle.Status & RT_OID_HANDLER_STATUS_SET ) - { - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_PROPERTY); - } -} - - -NDIS_STATUS -WDI_HandleOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST pNdisRequest - ) -{ - return N6WdiHandleOidRequest(MiniportAdapterContext, pNdisRequest); -} - - -VOID -WdiExt_IndicateApAssocReqReceived( - IN ADAPTER *pAdapter, - IN u4Byte assocReqLen, - IN u1Byte *assocReq - ) -{ - WDI_INDICATION_AP_ASSOCIATION_REQUEST_PARAMETERS param; - OCTET_STRING osAssocReq = {0}; - u2Byte ieOffset = 0; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - if(assocReqLen < sMacHdrLng) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("invalid assoc req len: %u\n", assocReqLen)); - return; - } - - PlatformZeroMemory(¶m, sizeof(param)); - - cpMacAddr(param.IncomingRequestInfo.AssocRequestParams.PeerMacAddress.Address, - assocReq + FRAME_OFFSET_ADDRESS2 - ); - - param.IncomingRequestInfo.AssocRequestParams.IsReassociationRequest = - (Type_Reasoc_Req == GET_80211_HDR_TYPE(assocReq)) ? TRUE : FALSE; - - FillOctetString(osAssocReq, assocReq, (u2Byte)assocReqLen); - - if(!PacketGetIeOffset(&osAssocReq, &ieOffset)) - { - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("PacketGetIeOffset returns FALSE\n")); - return; - } - - param.IncomingRequestInfo.AssocRequestFrame.ElementCount = osAssocReq.Length - sMacHdrLng; - param.IncomingRequestInfo.AssocRequestFrame.pElements = osAssocReq.Octet + sMacHdrLng; - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationApAssociationRequestReceived( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - return; - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_AP_ASSOCIATION_REQUEST_RECEIVED, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - - return; -} - -VOID -WdiExt_IndicateApAssocRspSent( - IN ADAPTER *pAdapter, - IN u2Byte status - ) -{ - RT_OID_HANDLER *task = &pAdapter->pPortCommonInfo->WdiData.TaskHandle; - - RT_TRACE_F(COMP_OID_SET, DBG_LOUD, ("indicate association rsp sent\n")); - - if(FALSE == OidHandle_VerifyTask(pAdapter, OID_WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE)) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, - ("WdiExt_IndicateApAssocRspSent(): skip indication because OidHandle_VerifyTask() returns FALSE\n")); - return; - } - - if(task->pvCtx) - { - if(WDI_CMD_SendApAssociationResponseComplete( - pAdapter, - (NDIS_OID_REQUEST *)task->pvCtx, - StatusCode_success == status ? RT_STATUS_SUCCESS : RT_STATUS_FAILURE)) - {// set pvCtx to NULL only when it is freed in WDI_CMD_SendApAssociationResponseComplete - task->pvCtx = NULL; - } - } - - return; -} - -RT_STATUS -WDIAllocateMetaData( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNBL, - IN PRT_RFD pRfd -) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PWDI_FRAME_METADATA pWdiFrameMeta = NULL; - - pWdiFrameMeta = pWdi->WdiDataApi.AllocateWiFiFrameMetaData(pWdi->DataPathHandle); - if( pWdiFrameMeta == NULL ) - return RT_STATUS_FAILURE; - - pWdiFrameMeta->u.rxMetaData.PayloadType = WDI_FRAME_MSDU; - pWdiFrameMeta->pNBL = pNBL; - - RT_TRACE(COMP_RECV, DBG_TRACE, ("PayloadType %d\n", pWdiFrameMeta->u.rxMetaData.PayloadType)); - - MP_SET_PACKET_RFD_RESERVED_0(pNBL, pWdiFrameMeta); - - return RT_STATUS_SUCCESS; -} - - -VOID -WDIFreeMetaData( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNBL -) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PWDI_FRAME_METADATA pWdiFrameMeta = NULL; - - pWdiFrameMeta = MP_GET_PACKET_RFD_RESERVED_0(pNBL); - - if( pWdiFrameMeta != NULL ) - pWdi->WdiDataApi.FreeWiFiFrameMetaData(pWdi->DataPathHandle, pWdiFrameMeta); - else - return; - - return; -} - -u4Byte -WDI_InsertDataInQueue( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN PNET_BUFFER_LIST pNBL -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u2Byte PortNumber = (u2Byte)pAdapter->pNdis62Common->PortNumber; - OCTET_STRING osMpdu = {NULL, 0}; - u4Byte PeerId = 0; - PRT_PEER_ENTRY pPeerEntry = NULL; - PNET_BUFFER_LIST pCurrNetBufferList = NULL, pNextNetBufferList = NULL; - - FillOctetString(osMpdu, pRfd->Buffer.VirtualAddress + pRfd->FragOffset, pRfd->FragLength); - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - -/**************************************************************************************************** -* 20150707 Sinda -* We insert frames in queue as below rules -* 1. Can find the peer with MAC address -* 2. Cannot find the peer with MAC address and insert frames in queue of group peer -****************************************************************************************************/ - pPeerEntry = (PRT_PEER_ENTRY)wdi_FindPeerByAddr(pAdapter, Frame_pTaddr(osMpdu)); - if( pPeerEntry != NULL ) - PeerId = pPeerEntry->uPeerId; - else - { - pPeerEntry = (PRT_PEER_ENTRY)wdi_FindGroupPeerByPort(pAdapter, PortNumber); - if( pPeerEntry == NULL ) - { - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - return 0; - } - else - PeerId = pPeerEntry->uPeerId; - } - - if(pPeerEntry->bUsed == TRUE) - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("WDI_InsertDataInQueue: Port %d, PeerId %d\n", PortNumber, PeerId)); - for (pCurrNetBufferList = pNBL; pCurrNetBufferList != NULL; pCurrNetBufferList = pNextNetBufferList) - { - pNextNetBufferList = NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList); - NET_BUFFER_LIST_NEXT_NBL(pCurrNetBufferList) = NULL; - N6CAddNblWaitQueue(&pDefaultAdapter->RxPeerQueue[PeerId], pCurrNetBufferList, FALSE); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - return PeerId + 1; - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - return 0; - } -} - -BOOLEAN -WDI_NotifyDataInQueue( - IN PADAPTER pAdapter, - IN u1Byte ExTid, - IN u2Byte PeerId, - IN RT_RX_INDICATION_LEVEL level -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_NDIS6_COMMON pDefaultNdisCommon = pDefaultAdapter->pNdisCommon; - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_RECV, DBG_TRACE, ("WDI_NotifyDataInQueue: PeerId %d, ExTid %d\n", PeerId, ExTid)); - - wdi_NotifyPeerData(pAdapter, ExTid, PeerId, level, &status); - if( status == NDIS_STATUS_PAUSED ) - { - RT_TRACE_F(COMP_INIT, DBG_WARNING, ("Rx manager pause frame and wait for it to be ready. return value (%d)\n", status)); - PlatformAcquireSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - pDefaultNdisCommon->bRxDataPathState = RT_RX_PAUSE; - GLWdiTxRxStatistics.numWdiRxPause++; - PlatformReleaseSpinLock(pAdapter, RT_RX_CONTROL_SPINLOCK); - return FALSE; - } - else - return TRUE; -} - - -VOID -WDI_CompletePacket( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNBL -) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - u2Byte count = 0; - WDI_FRAME_ID FrameID[100] = {0}; - PWDI_FRAME_METADATA pFrameMeta = NULL; - BOOLEAN bIndicateSendComplete = FALSE; - - GLWdiTxRxStatistics.numWdiCompletePkt++; - - //RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_CompletePacket() ==>\n")); - // complete only one packet - pFrameMeta = (PWDI_FRAME_METADATA)pNBL->MiniportReserved[0]; - NET_BUFFER_LIST_NEXT_NBL(pNBL) = NULL; - NET_BUFFER_LIST_STATUS(pNBL) = NDIS_STATUS_SUCCESS; - FrameID[count] = pFrameMeta->FrameID; - - if(pFrameMeta->u.txMetaData.bTxCompleteRequired == TRUE) - bIndicateSendComplete = TRUE; - - pWdi->WdiDataApi.TxTransferCompleteIndication(pWdi->DataPathHandle,WDI_TxFrameStatus_Ok,pNBL); - if(bIndicateSendComplete) - { - pWdi->WdiDataApi.TxSendCompleteIndication(pWdi->DataPathHandle, WDI_TxFrameStatus_Ok, count, FrameID, NULL); - } -} - - -VOID -WDI_IndicateScanComplete( - PADAPTER pAdapter, - RT_STATUS status - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - if(FALSE == OidHandle_VerifyTask(pAdapter, OID_WDI_TASK_SCAN)) - return; - - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); -} - -VOID -WDI_IndicateBssList( - PADAPTER pAdapter, - RT_STATUS status - ) -{ - wdiext_IndicateBSSEntry(pAdapter); -} - -VOID -WDI_IndicateBssListBySSID( - PADAPTER pAdapter, - WDI_SSID *pSSID - ) -{ - wdiext_IndicateBSSEntryBySSID(pAdapter, pSSID); -} - -VOID -WDI_IndicateConnectionComplete( - PADAPTER pAdapter, - RT_STATUS status - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - if(FALSE == OidHandle_VerifyTask(pAdapter, OID_WDI_TASK_CONNECT)) - return; - - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); -} - - -VOID -WDI_IndicateAssociationComplete( - PADAPTER pAdapter, - RT_STATUS status - ) -{ - if( status == RT_STATUS_SUCCESS ) - { - wdiext_IndicateAssociationResult(pAdapter); - wdiext_IndicateLinkStateChanged(pAdapter, FALSE, 0); - } -} - - -VOID -WDI_IndicateDisassociation( - PADAPTER pAdapter, - u2Byte reason, - pu1Byte pAddr -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - if(ACTING_AS_AP(pAdapter)) - {// AP mode - RT_WLAN_STA *sta = pMgntInfo->pCurrentSta; - - RT_ASSERT(sta, ("%s(): sta is NULL!!!\n", __FUNCTION__)); - - if(NULL == sta) - { - RT_TRACE_F(COMP_AP, DBG_SERIOUS, ("pMgntInfo->pCurrentSta is NULL!\n")); - return; - } - - wdiext_IndicateDisassociation(pAdapter, sta->MacAddr, 0, NULL, TRUE, reason); - } - else - {// Client mode - wdiext_IndicateDisassociation(pAdapter, pMgntInfo->Bssid, 0, NULL, TRUE, reason); - } - - if( pAddr != NULL ) - { - WDI_DeleteDatapathPeer(pAdapter, pAddr); - } -} - -VOID -WDI_IndicateNLODiscovery( - PADAPTER pAdapter - ) -{ - WDI_INDICATION_NLO_DISCOVERY_PARAMETERS param; - PWDI_BSS_ENTRY_CONTAINER pEntry; - - PRT_NLO_INFO pNLOInfo = &(pAdapter->MgntInfo.NLOInfo); - PRT_WLAN_BSS pRtBss = NULL; - RT_802_11_BSSID_LIST RtBssList = {0}; - u4Byte i = 0; - u4Byte j = 0; - u4Byte nBss = 0; - ULONG buflen = 0; - pu1Byte buf = NULL; - pu1Byte pBssList = NULL; - u4Byte devSpecCtx = 0x07060504; - BOOLEAN Hit = FALSE; - LARGE_INTEGER CurrentTime; - - if(!pAdapter->pPortCommonInfo->WdiData.TaskHandle.pNdisRequest) - return; - - FunctionIn(COMP_POWER); - - // zero - PlatformZeroMemory(¶m, sizeof(param)); - - //Get scan list - RtBssList.NumberOfItems = 0; - RtBssList.pbssidentry = pAdapter->bssDescList; - - MgntActQuery_802_11_BSSID_LIST(pAdapter, &RtBssList, FALSE); - - PlatformAllocateMemoryWithZero(pAdapter, (PVOID *)&pEntry, sizeof(WDI_BSS_ENTRY_CONTAINER)*RtBssList.NumberOfItems); - - param.DeviceDescriptor.pElements = pEntry; - nBss = 0; - - - // Indicate those found BSS which we desired - for ( i=0 ; iNumDot11OffloadNetwork ; ++j ) - { - // Compare to check whether it is what we desired or not - if(!PlatformCompareMemory(pNLOInfo->dDot11OffloadNetworkList[j].ssidbuf, pRtBss->bdSsIdBuf, 32)) - { - ++nBss; - Hit = TRUE; - } - } - - if( !Hit ) // This BSS is not we desired. - continue; - - // WIFI_MAC_ADDRESS_CONTAINER BSSID - cpMacAddr(pEntry->BSSID.Address, pRtBss->bdBssIdBuf); - - // WIFI_BYTE_BLOB ProbeResponseFrame, BeaconFrame - if(pRtBss->BssPacketType & BSS_PKT_BEACON) - { - pEntry->Optional.BeaconFrame_IsPresent = TRUE; - pEntry->BeaconFrame.ElementCount = pRtBss->IE.Length; - pEntry->BeaconFrame.pElements = (UINT8 *)pRtBss->IE.Octet; - } - else if(pRtBss->BssPacketType & BSS_PKT_PROBE_RSP) - { - pEntry->Optional.ProbeResponseFrame_IsPresent = TRUE; - pEntry->ProbeResponseFrame.ElementCount = pRtBss->IE.Length; - pEntry->ProbeResponseFrame.pElements = (UINT8 *)pRtBss->IE.Octet; - } - else - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("Unknown BssPacketType: %u\n", pRtBss->BssPacketType)); - FunctionOut(COMP_POWER); - return; - } - - // WDI_SIGNAL_INFO_CONTAINER SignalInfo - pRtBss->RecvSignalPower = 0xffffffce; - pEntry->SignalInfo.RSSI = (INT32)pRtBss->CumRecvSignalPower; - pEntry->SignalInfo.LinkQuality = (UINT32)pRtBss->RSSI; - - // WDI_CHANNEL_INFO_CONTAINER ChannelInfo - pEntry->ChannelInfo.ChannelNumber = (UINT32)pRtBss->ChannelNumber; - pEntry->ChannelInfo.BandId = (pRtBss->ChannelNumber < 36) ? WDI_BAND_ID_2400 : WDI_BAND_ID_5000; - RT_TRACE(COMP_POWER, DBG_LOUD, ("pRtBss->ChannelNumber=%d, ", pRtBss->ChannelNumber)); - RT_TRACE(COMP_POWER, DBG_LOUD, ("%x:%x:%x:%x:%x:%x, ", - pEntry->BSSID.Address[0], pEntry->BSSID.Address[1], - pEntry->BSSID.Address[2], pEntry->BSSID.Address[3], - pEntry->BSSID.Address[4], pEntry->BSSID.Address[5])); - RT_TRACE(COMP_POWER, DBG_LOUD, ("SSID: %s\n", pRtBss->bdSsIdBuf)); - - // WDI_BYTE_BLOB DeviceSpecificContext, this is OPTIONAL - pEntry->Optional.DeviceSpecificContext_IsPresent = TRUE; - pEntry->DeviceSpecificContext.ElementCount = sizeof(devSpecCtx); - pEntry->DeviceSpecificContext.pElements = (UINT8 *)&devSpecCtx; - - // Get current timestamp - NdisGetCurrentSystemTime(&CurrentTime); - - // WDI_AGE_INFO_CONTAINER EntryAgeInfo - pEntry->EntryAgeInfo.HostTimeStamp = CurrentTime.QuadPart; // [SDIO-482] in JIRA - pEntry->EntryAgeInfo.CachedInformation = 0; - } - - if(nBss == 0) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("WDI_IndicateNLODiscovery(): Error, # of Hit SSID is ZERO.\n")); - FunctionOut(COMP_POWER); - return; - } - - param.DeviceDescriptor.ElementCount = nBss; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("# of BSS Found: %u\n", param.DeviceDescriptor.ElementCount)); - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationNloDiscovery( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("WDI_IndicateNLODiscovery(): GenerateWdiIndicationNloDiscovery Failed\n")); - FunctionOut(COMP_POWER); - return; - } - - wdi_UnsolicitedIndication( pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_NLO_DISCOVERY, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - - FunctionOut(COMP_POWER); -} - - -VOID -WDI_IndicateCurrentPhyStatus( - PADAPTER pAdapter - ) -{ - wdiext_IndicateRadioStatus(pAdapter); -} - - -VOID -WDI_IndicateP2PEvent( - VOID *pvP2PInfo, - u4Byte EventID, - MEMORY_BUFFER *pInformation - - ) -{ - P2P_INFO *pP2PInfo = (P2P_INFO *)pvP2PInfo; - RT_OID_HANDLER *task = &pP2PInfo->pAdapter->pPortCommonInfo->WdiData.TaskHandle; - - if(P2P_EVENT_DEV_FOUND == EventID) - { - wdiext_IndicateP2PDeviceFound(pP2PInfo->pAdapter, pInformation->Buffer); - } - else if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_REQUEST == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_REQUEST == EventID - || P2P_EVENT_RECEIVED_INVITATION_REQUEST == EventID - ) - {// rx req action - WDI_CMD_PreIndicateRxP2pActionFrameCb(pvP2PInfo, EventID, pInformation); - wdiext_IndicateP2PActionFrameReceived(pvP2PInfo, EventID, pInformation); - WDI_CMD_PostIndicateRxP2pActionFrameCb(pvP2PInfo, EventID, pInformation); - } - else if(P2P_EVENT_RECEIVED_PROVISION_DISCOVERY_RESPONSE == EventID - || P2P_EVENT_RECEIVED_INVITATION_RESPONSE == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_RESPONSE == EventID - || P2P_EVENT_RECEIVED_GO_NEGOTIATION_CONFIRM == EventID - ) - {// rx rsp action - WDI_CMD_PreIndicateRxP2pActionFrameCb(pvP2PInfo, EventID, pInformation); - - // indicate in the corresp. OffChnlTx complete cb - //wdiext_IndicateP2PActionFrameReceived(pvP2PInfo, EventID, pInformation); - - WDI_CMD_PostIndicateRxP2pActionFrameCb(pvP2PInfo, EventID, pInformation); - } - else if(P2P_EVENT_GO_OPERATING_CHANNEL == EventID) - { - wdiext_IndicateP2POpChnl(pP2PInfo->pAdapter, pP2PInfo); - } - - return; -} - - -BOOLEAN -WDI_CompleteCreateDeleteMac( - IN PADAPTER pAdapter, - IN NDIS_STATUS status - ) -{ - PPORT_HELPER pPortHelper = pAdapter->pPortCommonInfo->pPortHelper; - BOOLEAN bCompleteStatus = FALSE; - - if(pPortHelper->bCreateMac) - bCompleteStatus = WDI_CMD_CreatePortComplete(pAdapter, pPortHelper->pCreateDeleteOID, status); - else if(pPortHelper->bDeleteMac) - bCompleteStatus = WDI_CMD_DeletePortComplete(pAdapter, pPortHelper->pCreateDeleteOID, status); - - return bCompleteStatus; -} - -VOID -WDI_IndicateLinkStateChanged( - PADAPTER pAdapter, - BOOLEAN bForceLinkQuality, - u1Byte ucLinkQuality - ) -{ - wdiext_IndicateLinkStateChanged(pAdapter, bForceLinkQuality, ucLinkQuality); -} - -RT_STATUS -WDI_IndicateActionFrame( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu -) -{ - NDIS_STATUS_INDICATION *indic = NULL; - WDI_MESSAGE_HEADER *wdiHdr = NULL; - - u1Byte *buf = NULL; - ULONG buflen = 0; - - WDI_INDICATION_ACTION_FRAME_RECEIVED_PARAMETERS param = {0}; - - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("WDI_IndicateActionFrame +\n")); - - - // TODO: fill the valid info into param - PlatformMoveMemory(param.SourceAddress.Address,Frame_pSaddr(*posMpdu),6); - param.ActionFrameBody.pElements = posMpdu->Octet+24;//get rid of header - param.ActionFrameBody.ElementCount = posMpdu->Length; - - // TODO: double check here to make sure channel correct - param.ChannelInfo.ChannelNumber = RT_GetChannelNumber(pAdapter); - param.ChannelInfo.BandId = WDI_BAND_ID_2400; - - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationActionFrameReceived( - ¶m, - sizeof(*indic) + sizeof(*wdiHdr), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("ActionFrame generate tlv failed\n")); - return NDIS_STATUS_FAILURE; - } - - indic = (NDIS_STATUS_INDICATION *)buf; - wdiHdr = (WDI_MESSAGE_HEADER *)(buf + sizeof(*indic)); - - PlatformZeroMemory(indic, sizeof(*indic)); - indic->Header.Type = NDIS_OBJECT_TYPE_STATUS_INDICATION; - indic->Header.Size = NDIS_SIZEOF_STATUS_INDICATION_REVISION_1; - indic->Header.Revision = NDIS_STATUS_INDICATION_REVISION_1; - indic->SourceHandle = pAdapter; - indic->PortNumber = 0; - indic->StatusCode = NDIS_STATUS_WDI_INDICATION_ACTION_FRAME_RECEIVED; - indic->RequestId = 0; // ? - indic->StatusBuffer = wdiHdr; - indic->StatusBufferSize = buflen - sizeof(*indic); - - wdiHdr->PortId = (WDI_PORT_ID)(GET_PORT_NUMBER(pAdapter)); - wdiHdr->Reserved = 0; - wdiHdr->Status = NDIS_STATUS_SUCCESS; - wdiHdr->TransactionId = 0; - wdiHdr->IhvSpecificId = 0; - - NdisMIndicateStatusEx(pAdapter->pNdisCommon->hNdisAdapter, indic); - - FreeGenerated((UINT8 *)buf); - - return RT_STATUS_SUCCESS; -} - -VOID -WDI_IndicateWakeReason( - IN PADAPTER pAdapter, - IN BOOLEAN bWakePacket, - IN pu1Byte pBuffer, - IN u2Byte BufferLen - ) -{ - WDI_INDICATION_WAKE_REASON_PARAMETERS param; - - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - pu1Byte pWakePktbuf = NULL; - BOOLEAN bIndicate = TRUE; - u1Byte *buf = NULL; - ULONG buflen = 0; - - PlatformZeroMemory(¶m, sizeof(WDI_INDICATION_WAKE_REASON_PARAMETERS)); - - if(bWakePacket) - { - if(pPSC->WakeUpReason == WOL_REASON_MAGIC_PKT) - param.Optional.WakePacket_IsPresent = 1; - else if(pPSC->WakeUpReason == WOL_REASON_PATTERN_PKT) - param.Optional.WakePacketPatternId_IsPresent = 1; - else - { - RT_TRACE(COMP_POWER, DBG_SERIOUS, ("WDI_IndicateWakeReason(): Unknown pPSC->WakeUpReason(%#x)\n", pPSC->WakeUpReason)); - } - - param.WakeEventCode = WDI_WAKE_REASON_CODE_PACKET; - param.WakePacketPatternId = pPSC->MagicPacketPatternId; - - PlatformAllocateMemoryWithZero(pAdapter, (PVOID *)&pWakePktbuf, BufferLen); - - PlatformMoveMemory(pWakePktbuf, pBuffer, BufferLen); - - param.WakePacket.ElementCount = 1; - param.WakePacket.pElements = pWakePktbuf; - - RT_PRINT_DATA(COMP_POWER, DBG_LOUD, "WDI_IndicateWakeReason(): packet\n", param.WakePacket.pElements, BufferLen); - } - else - { - if(pPSC->WakeUpReason == WOL_REASON_AP_LOST || - pPSC->WakeUpReason == WOL_REASON_DEAUTH || - pPSC->WakeUpReason == WOL_REASON_DISASSOC) - { - param.WakeEventCode = WDI_WAKE_REASON_CODE_AP_ASSOCIATION_LOST; - } - else if(pPSC->WakeUpReason == WOL_REASON_NLO_SSID_MATCH) - { - param.WakeEventCode = WDI_WAKE_REASON_CODE_NLO_DISCOVERY; - } - else if(pPSC->WakeUpReason == WOL_REASON_PTK_UPDATE) - { - param.WakeEventCode = WDI_WAKE_REASON_CODE_4WAY_HANDSHAKE_REQUEST; - } - else - { - param.WakeEventCode = NdisWakeReasonUnspecified; - bIndicate = FALSE; - } - } - - if(bIndicate) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("WDI_IndicateWakeReason(): WakeEventCode(%#X)\n", param.WakeEventCode)); - - // Gen tlv - if(NDIS_STATUS_SUCCESS != GenerateWdiIndicationWakeReasonFromIhv( - ¶m, - sizeof(NDIS_STATUS_INDICATION) + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &buflen, &((UINT8 *)buf))) - { - RT_TRACE(COMP_POWER, DBG_LOUD, ("WDI_IndicateWakeReason(): GenerateWdiIndicationWakeReasonFromIhv Failed\n")); - return; - } - - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_WAKE_REASON, - NDIS_STATUS_SUCCESS, - buf, - buflen); - - // cleanup - FreeGenerated((UINT8 *)buf); - } - -} - - -VOID -WDI_IndicateRoamingNeeded( - PADAPTER pAdapter, - RT_PREPARE_ROAM_TYPE IndicationReason - ) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - - pMgntInfo->PrepareRoamState = IndicationReason; - - switch(IndicationReason) - { - case RT_PREPARE_ROAM_DEAUTH_DISASSOC: - wdiext_IndicateRoamingNeeded(pAdapter, WDI_ASSOC_STATUS_PEER_DEAUTHENTICATED); - break; - case RT_PREPARE_ROAM_NORMAL_ROAM_POOR_LINK: - wdiext_IndicateRoamingNeeded(pAdapter, WDI_ASSOC_STATUS_DISASSOCIATE_NOT_VISIBLE); - break; - case RT_PREPARE_ROAM_NORMAL_ROAM_BETTER_AP: - wdiext_IndicateRoamingNeeded(pAdapter, WDI_ASSOC_STATUS_ROAMING_BETTER_AP_FOUND); - break; - default: - break; - } -} - -VOID -WDI_IndicateRoamingComplete( - PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo = GetDefaultMgntInfo(pAdapter); - - if(FALSE == OidHandle_VerifyTask(pAdapter, OID_WDI_TASK_ROAM)) - return; - - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); -} - -VOID -WDI_AddGroupPeer( - IN PADAPTER pAdapter, - IN u2Byte PortNumber - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - WDI_MAC_ADDRESS PeerAddr = {0}; - PRT_PEER_ENTRY pPeerEntry = NULL; - u1Byte i = 0; - - FunctionIn(COMP_INIT); - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(i = 0; i < MP_DEFAULT_NUMBER_OF_PORT; i++) - { - pPeerEntry = &pDefaultAdapter->RxPeerTable[i]; - if( pPeerEntry->bUsed == FALSE ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("WDI_AddGroupPeer: create group peer %d for port %d\n", i, PortNumber)); - break; - } - } - - if( i == MP_DEFAULT_NUMBER_OF_PORT ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("WDI_AddGroupPeer: there is no available group peer for port %d\n", PortNumber)); - FunctionOut(COMP_INIT); - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - return ; - } - - pPeerEntry->bUsed = TRUE; - pPeerEntry->uPeerId = i; - pPeerEntry->uPortId = PortNumber; - PlatformMoveMemory(pPeerEntry->PeerAddr, MAC_BROADCAST_ADDR, 6); - PlatformMoveMemory(PeerAddr.Address, pPeerEntry->PeerAddr, 6); - pWdi->WdiDataApi.PeerCreateIndication(pWdi->DataPathHandle, (WDI_PORT_ID)pPeerEntry->uPortId, (WDI_PEER_ID)pPeerEntry->uPeerId, PeerAddr); - - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - FunctionOut(COMP_INIT); -} - -VOID -WDI_DeleteGroupPeer( - IN PADAPTER pAdapter, - IN u2Byte PortNumber - ) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - WDI_PEER_ID PeerId = 0; - PRT_PEER_ENTRY pPeerEntry = NULL; - u1Byte i; - - FunctionIn(COMP_INIT); - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - pPeerEntry = (PRT_PEER_ENTRY)wdi_FindGroupPeerByPort(pAdapter, PortNumber); - if( pPeerEntry == NULL ) - { - RT_TRACE(COMP_INIT, DBG_WARNING, ("wdi_FindPeerByAddr: Cannot find group peer of port %d\n", PortNumber)); - FunctionOut(COMP_INIT); - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - return ; - } - else - { - PeerId = (WDI_PEER_ID)pPeerEntry->uPeerId; - pPeerEntry->bUsed = FALSE; - - PlatformZeroMemory(pPeerEntry->PeerAddr, 6); - - pWdi->WdiDataApi.PeerDeleteIndication(pWdi->DataPathHandle, (WDI_PORT_ID)PortNumber, PeerId, &ndisStatus); - - WDI_FreeRxFrame(pAdapter, (PNET_BUFFER_LIST)N6CGetHeadNblWaitQueue(pDefaultAdapter->RxPeerQueue[PeerId])); - RTInitializeSListHead(&pDefaultAdapter->RxPeerQueue[PeerId]); - - RT_TRACE(COMP_INIT, DBG_LOUD, ("WDI_DeleteGroupPeer: delete group peer %d of port %d, Status: %d\n", PeerId, PortNumber, ndisStatus)); - } - - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - FunctionOut(COMP_INIT); -} - -NDIS_STATUS -WDI_AddDatapathPeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - WDI_PEER_ID HashPeer = 0, RelocatePeer = 0; - WDI_PORT_ID PortId = (WDI_PORT_ID)pAdapter->pNdis62Common->PortNumber; - WDI_MAC_ADDRESS PeerAddr = {0}; - PRT_PEER_ENTRY pPeerEntry = NULL; - - FunctionIn(COMP_MLME); - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - pPeerEntry = (PRT_PEER_ENTRY)wdi_GetAvailablePeer(pAdapter, pAddr); - if( pPeerEntry != NULL ) - { - PlatformMoveMemory(PeerAddr.Address, pPeerEntry->PeerAddr, 6); - pWdi->WdiDataApi.PeerCreateIndication(pWdi->DataPathHandle, (WDI_PORT_ID)pPeerEntry->uPortId, (WDI_PEER_ID)pPeerEntry->uPeerId, PeerAddr); - - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - FunctionOut(COMP_MLME); - - return NDIS_STATUS_SUCCESS; - } - - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - FunctionOut(COMP_MLME); - - return NDIS_STATUS_FAILURE; -} - -void WDI_DeleteDatapathPeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr -) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - WDI_PORT_ID PortId = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - WDI_PEER_ID PeerId = 0; - PRT_PEER_ENTRY pPeerEntry = NULL; - - FunctionIn(COMP_MLME); - - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - pPeerEntry = (PRT_PEER_ENTRY)wdi_FindPeerByAddr(pAdapter, pAddr); - if( pPeerEntry == NULL ) - { - RT_TRACE(COMP_MLME, DBG_WARNING, ("wdi_FindPeerByAddr: Cannot find the addres [%2x:%2x:%2x:%2x:%2x:%2x] associated at any peer\n", pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5])); - FunctionOut(COMP_MLME); - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - return ; - } - RT_TRACE(COMP_INIT, DBG_LOUD, ("WDI_DeleteDatapathPeer: Find the addres [%2x:%2x:%2x:%2x:%2x:%2x] associated at Peer %d\n", pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5], pPeerEntry->uPeerId)); - - pDefaultAdapter->RxPeerUsedCount--; - PeerId = (WDI_PEER_ID)pPeerEntry->uPeerId; - PortId = (WDI_PORT_ID)pPeerEntry->uPortId; - pPeerEntry->bUsed = FALSE; - PlatformZeroMemory(pPeerEntry->PeerAddr, 6); - - pWdi->WdiDataApi.PeerDeleteIndication(pWdi->DataPathHandle, PortId, PeerId, &ndisStatus); - - WDI_FreeRxFrame(pAdapter, (PNET_BUFFER_LIST)N6CGetHeadNblWaitQueue(pDefaultAdapter->RxPeerQueue[PeerId])); - RTInitializeSListHead(&pDefaultAdapter->RxPeerQueue[PeerId]); - - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - - RT_TRACE(COMP_MLME, DBG_LOUD, ("WDI_DeleteDatapathPeer: delete peer %d, Status: %d\n", PeerId, ndisStatus)); - - FunctionOut(COMP_MLME); -} - -VOID -WDI_FetchNBLByPort( - IN PADAPTER pAdapter, - IN u2Byte Port_ID, - OUT PNET_BUFFER_LIST *ppNetBufferList -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - u2Byte index = 0; - PRT_SINGLE_LIST_ENTRY pFirst = NULL, pTemp = NULL; - - *ppNetBufferList = NULL; - - RT_TRACE(COMP_RECV, DBG_LOUD, ("WDI_FetchNBLByPort: fetch frames of all peers at port %d\n", Port_ID)); - - if( Port_ID != WDI_PORT_ANY ) - { - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(index = 0; index < MAX_PEER_NUM; index++) - { - if( (pDefaultAdapter->RxPeerTable[index].bUsed == TRUE) && (pDefaultAdapter->RxPeerTable[index].uPortId == Port_ID) ) - { - if(N6CIsNblWaitQueueEmpty(pDefaultAdapter->RxPeerQueue[index])) - continue; - - pTemp = RTGetHeadSList(&pDefaultAdapter->RxPeerQueue[index]); - if( pFirst == NULL ) - { - pFirst = pTemp; - } - else - { - N6CConcatenateTwoList(pFirst, pTemp); - } - RTInitializeSListHead(&pDefaultAdapter->RxPeerQueue[index]); - } - } - - if( pFirst != NULL ) - { - *ppNetBufferList = RT_GET_NBL_FROM_QUEUE_LINK(pFirst); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } - else - { - PlatformAcquireSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - for(index = 0; index < MAX_PEER_NUM; index++) - { - if( (pDefaultAdapter->RxPeerTable[index].bUsed == TRUE) ) - { - if(N6CIsNblWaitQueueEmpty(pDefaultAdapter->RxPeerQueue[index])) - continue; - - pTemp = RTGetHeadSList(&pDefaultAdapter->RxPeerQueue[index]); - if( pFirst == NULL ) - { - pFirst = pTemp; - } - else - { - N6CConcatenateTwoList(pFirst, pTemp); - } - RTInitializeSListHead(&pDefaultAdapter->RxPeerQueue[index]); - } - } - - if( pFirst != NULL ) - { - *ppNetBufferList = RT_GET_NBL_FROM_QUEUE_LINK(pFirst); - } - PlatformReleaseSpinLock(pAdapter, RT_RX_QUEUE_SPINLOCK); - } -} - -VOID -WDI_FreeRxFrame( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNetBufferList -) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter(pAdapter); - PRT_RFD pRfd = NULL; - PMDL pCurrMdl = NULL, pNextMdl = NULL; - PNET_BUFFER_LIST pNextNBL = NULL; - u4Byte Count; - PRT_NDIS6_COMMON pNdisCommon = pAdapter->pNdisCommon; - - FunctionIn(COMP_RECV); - - if( pNetBufferList == NULL ) - { - RT_TRACE(COMP_RECV, DBG_TRACE, ("WDI_FreeRxFrame: pNetBufferList is NULL\n")); - FunctionOut(COMP_RECV); - return; - } - - do - { - //Get next NBL - pNextNBL = NET_BUFFER_LIST_NEXT_NBL(pNetBufferList); - - //Get RFD from NBL - pRfd = MP_GET_PACKET_RFD(pNetBufferList); - - //Free all MDL - for (pCurrMdl = NET_BUFFER_FIRST_MDL( NET_BUFFER_LIST_FIRST_NB(pNetBufferList) ); - pCurrMdl != NULL; - pCurrMdl = pNextMdl) - { - pNextMdl = NDIS_MDL_LINKAGE(pCurrMdl); - NdisFreeMdl(pCurrMdl); - } - - //Free Rx metadata - WDIFreeMetaData(pAdapter, pNetBufferList); - - //Free NBL - NdisFreeNetBufferList(pNetBufferList); - - //Re-calculate reference count - PlatformAcquireSpinLock(pAdapter, RT_RX_REF_CNT_SPINLOCK); - RT_DEC_RCV_REF(pDefaultAdapter); - Count = RT_GET_RCV_REF(pDefaultAdapter); - GLWdiTxRxStatistics.numRxReturnNBLFromUE++; - PlatformReleaseSpinLock(pAdapter, RT_RX_REF_CNT_SPINLOCK); - - //Return RFD to RFD list - if( pRfd != NULL ) - { - ReturnRFDList(pAdapter, pRfd); - } - - //Assign NextNBL pointer - pNetBufferList = pNextNBL; - }while(pNetBufferList!=NULL); - - if (Count == 0) - { - NdisSetEvent(&pNdisCommon->AllPacketReturnedEvent); - - if(pAdapter->MgntInfo.NdisVersion >= RT_NDIS_VERSION_6_20) - { - PADAPTER pTempAdapter = GetFirstExtAdapter(pAdapter); - while(pTempAdapter != NULL) - { - NdisSetEvent(&pTempAdapter->pNdisCommon->AllPacketReturnedEvent); - pTempAdapter = GetNextExtAdapter(pTempAdapter); - } - } - } - - FunctionOut(COMP_RECV); -} - -VOID -WDI_IndicateTKIPMICFailure( - PADAPTER pAdapter - ) -{ - PMGNT_INFO pMgntInfo; - pMgntInfo = &(pAdapter->MgntInfo); - PUCHAR pOutput = NULL; - ULONG length = 0; - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - WDI_INDICATION_TKIP_MIC_FAILURE_PARAMETERS Params={0}; - - FunctionIn(COMP_SEC); - - - Params.FailureInfo.DefaultKeyFailure = FALSE; - Params.FailureInfo.KeyIndex=0; - //WDI_TKIPFailureParam.PeerMacAddress=pMgntInfo->Bssid; - cpMacAddr(Params.FailureInfo.PeerMacAddress.Address, pMgntInfo->Bssid); - - - - ndisStatus = GenerateWdiIndicationTkipMicFailure( - &Params, - sizeof(NDIS_STATUS_INDICATION)+sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - &length, - &pOutput); - - if(NDIS_STATUS_SUCCESS == ndisStatus) - { - wdi_UnsolicitedIndication(pAdapter, - FALSE, - NULL, - NDIS_STATUS_WDI_INDICATION_TKIP_MIC_FAILURE, - ndisStatus, - pOutput, - length); - - FreeGenerated(pOutput); - pOutput = NULL; - } - FunctionOut(COMP_SEC); - - -} - -VOID -WDI_TxCreditCheck( - IN PADAPTER pAdapter - ) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - u4Byte preTxPauseReason; - u2Byte txCredit=0; - - GLWdiTxRxStatistics.numCheckTxPause++; - GLWdiTxRxStatistics.monitorTxPauseReason = pWdi->txPauseReason; - - // First check if we have pause indication before. - // not to acquire tx lock frequently, so we do not acquire tx lock when read, but remember - // we should acquire tx lock when need to change the pause reason. - if(pWdi->txPauseReason) - { - PlatformAcquireSpinLock(pAdapter, RT_TX_SPINLOCK); - - txCredit = *Get_NUM_IDLE_TCB(pAdapter); - preTxPauseReason = pWdi->txPauseReason; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_TxCreditCheck(): txCredit=%d\n", txCredit)); - - if(txCredit > (pAdapter->RT_TCB_NUM/4)) - { - GLWdiTxRxStatistics.numTxResourceAvailable++; - - if( (preTxPauseReason&WDI_TX_PAUSE_REASON_CREDIT) == WDI_TX_PAUSE_REASON_CREDIT) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_TxCreditCheck(): TxPauseReason = 0x%x!!!\n", preTxPauseReason)); - GLWdiTxRxStatistics.numWdiTxRestartIndicate++; - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_TxCreditCheck(): TxSendRestart: %d times!!!\n", - GLWdiTxRxStatistics.numWdiTxRestartIndicate)); - - pWdi->txPauseReason &= ~WDI_TX_PAUSE_REASON_CREDIT; - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - - // Before indicate to WDI, release the tx lock. - pWdi->WdiDataApi.TxSendRestartIndication(pWdi->DataPathHandle, - WDI_PORT_ANY, - WDI_PEER_ANY, - WDI_EXT_TID_UNKNOWN, - WDI_TX_PAUSE_REASON_CREDIT); - RT_TRACE(COMP_INIT, DBG_LOUD, ("[WDI], WDI_TxCreditCheck(): pWdi->txPauseReason = 0x%x\n", pWdi->txPauseReason)); - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } - } - else - { - PlatformReleaseSpinLock(pAdapter, RT_TX_SPINLOCK); - } - } -} - -VOID -WDI_IndicateFWStalled( - IN PADAPTER pAdapter - ) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - NDIS_STATUS_INDICATION statusIndication = {0}; - WDI_MESSAGE_HEADER WdiHeader = {0}; - - if(!pWdi->bWdiLEPLDR) - return; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> WDI_IndicateFWStalled\n")); - - N6_ASSIGN_OBJECT_HEADER( - statusIndication.Header, - NDIS_OBJECT_TYPE_STATUS_INDICATION, - NDIS_SIZEOF_STATUS_INDICATION_REVISION_1, - NDIS_STATUS_INDICATION_REVISION_1); - - WdiHeader.PortId = 0xFFFF; - WdiHeader.Status = NDIS_STATUS_SUCCESS; - WdiHeader.TransactionId = 0; - - statusIndication.RequestId = NULL; - statusIndication.SourceHandle = pAdapter; - statusIndication.StatusBuffer = &WdiHeader; - statusIndication.StatusBufferSize = sizeof(WDI_MESSAGE_HEADER); - - statusIndication.StatusCode = NDIS_STATUS_WDI_INDICATION_FIRMWARE_STALLED; - - NdisMIndicateStatusEx( - pAdapter->pNdisCommon->hNdisAdapter, - &statusIndication - ); -} - -VOID -WDI_UpdateDefaultSetting( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - // Enable for LE Hang detection and recovery function - pWdi->bWdiLEPLDR = pNdisCommon->RegHangDetection; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("WDI_UpdateDefaultSetting(): bWdiLEPLDR(%d)\n", pWdi->bWdiLEPLDR)); -} - -// -// Description: -// Indicate the specific (non-common for all platform) event/status to WDI. -// Arguments: -// [in] pAdapter - -// The adapter context. -// [in] event - -// The event of the indication. -// [in] pInfoBuffer - -// The pointer to the input information. It can be NULL. -// [in] InfoBruuferLen - -// The length in byte for pInfoBuffer. -// Return: -// It may return RT_STATUS_SUCCESS if this function completes successfully, or RT_STATUS_PENDING -// for the asynchrous process. -// By Bruce, 2015-12-16. -// -RT_STATUS -WDI_IndicateGeneralEvent( - IN PADAPTER pAdapter, - IN u4Byte Event, - IN PVOID pInfoBuffer, - IN u4Byte InfoBruuferLen - ) -{ - RT_STATUS rtStatus = RT_STATUS_SUCCESS; - - switch(Event) - { - default: - { - RT_TRACE_F(COMP_INDIC, DBG_WARNING, ("Unrecognized event = 0x%08X\n", Event)); - rtStatus = RT_STATUS_NOT_RECOGNIZED; - } - break; - - - - - case RT_CUSTOM_EVENT_WDI_FT_ASSOC_NEEDED: - { - rtStatus = wdiext_IndicateFtAssocNeeded(pAdapter); - } - break; - } - return rtStatus; -} - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.h b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.h deleted file mode 100644 index 24acb1dc..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Common.h +++ /dev/null @@ -1,320 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_Common.h -// Description: Define basic capability of WDI. -// -// Author: hpfan -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_WDI_COMMON_H -#define __INC_WDI_COMMON_H - -#if (WDI_SUPPORT == 1) - -#define WDI_802_11_MTU_SIZE 1500 -#define WDI_MAX_MCAST_LIST_NUM MAX_MCAST_LIST_NUM -#define WDI_802_11_DATA_BACK_FILL_SIZE NATIVE_802_11_DATA_BACK_FILL_SIZE -#define WDI_802_11_MAX_XMIT_LINK_SPEED NATIVE_802_11_MAX_XMIT_LINK_SPEED -#define WDI_802_11_MAX_RCV_LINK_SPEED NATIVE_802_11_MAX_RCV_LINK_SPEED -#define WDI_802_11_MAX_SCAN_SSID 255 // no match with previous value -#define WDI_802_11_MAX_DESIRED_BSSID NATIVE_802_11_MAX_DESIRED_BSSID -#define WDI_802_11_MAX_DESIRED_SSID NATIVE_802_11_MAX_DESIRED_SSID -#define WDI_802_11_MAX_PRIVACY_EXEMPTION NATIVE_802_11_MAX_PRIVACY_EXEMPTION -#define WDI_802_11_MAX_KEY_MAPPING_ENTRY NATIVE_802_11_MAX_KEY_MAPPING_ENTRY -#define WDI_802_11_MAX_DEFAULT_KEY_ENTRY NATIVE_802_11_MAX_DEFAULT_KEY_ENTRY -#define WDI_802_11_MAX_WEP_KEY_LENGTH NATIVE_802_11_MAX_WEP_KEY_LENGTH -#define WDI_802_11_MAX_PER_STA_DEFAULT_KEY NATIVE_802_11_MAX_PER_STA_DEFAULT_KEY -#define WDI_802_11_MAX_NETWORKOFFLOAD_SIZE NATIVE_802_11_MAX_NETWORKOFFLOAD_SIZE - - -NDIS_STATUS -WDI_Initialize( - IN PDRIVER_OBJECT pDriverObject, - IN PUNICODE_STRING RegistryPath, - IN PNDIS_MINIPORT_DRIVER_CHARACTERISTICS pMChars - ); - -VOID -WDI_DeInitialize( - IN NDIS_HANDLE DriverHandle - ); - -VOID -WDI_InitRxQueue( - IN PADAPTER pAdapter - ); - -VOID -WDI_DeInitRxQueue( - IN PADAPTER pAdapter - ); - -VOID -WDI_DeInitRxQueue( - IN PADAPTER pAdapter - ); - -VOID -WDI_PnPNotiry( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDI_HandleOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST pNdisRequest - ); - - -VOID -WdiExt_IndicateApAssocReqReceived( - IN ADAPTER *pAdapter, - IN u4Byte assocReqLen, - IN u1Byte *assocReq - ); - - -VOID -WdiExt_IndicateApAssocRspSent( - IN ADAPTER *pAdapter, - IN u2Byte status - ); - -RT_STATUS -WDIAllocateMetaData( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNBL, - IN PRT_RFD pRfd - ); - - -VOID -WDIFreeMetaData( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNBL - ); - -u4Byte -WDI_InsertDataInQueue( - IN PADAPTER pAdapter, - IN PRT_RFD pRfd, - IN PNET_BUFFER_LIST pNBL -); - -BOOLEAN -WDI_NotifyDataInQueue( - IN PADAPTER pAdapter, - IN u1Byte ExTid, - IN u2Byte PeerId, - IN RT_RX_INDICATION_LEVEL level - ); - -VOID -WDI_CompletePacket( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNBL - ); - -VOID -WDI_IndicateScanComplete( - PADAPTER Adapter, - RT_STATUS status - ); - -VOID -WDI_IndicateBssList( - PADAPTER pAdapter, - RT_STATUS status - ); - -VOID -WDI_IndicateBssListBySSID( - PADAPTER pAdapter, - WDI_SSID *pSSID - ); - -VOID -WDI_IndicateConnectionComplete( - PADAPTER Adapter, - RT_STATUS status - ); - -VOID -WDI_IndicateAssociationComplete( - PADAPTER Adapter, - RT_STATUS status - ); - -VOID -WDI_IndicateDisassociation( - PADAPTER Adapter, - u2Byte reason, - pu1Byte pAddr -); - -VOID -WDI_IndicateNLODiscovery( - PADAPTER pAdapter - ); - -VOID -WDI_IndicateCurrentPhyStatus( - PADAPTER Adapter - ); - -VOID -WDI_IndicateP2PEvent( - VOID *pvP2PInfo, - u4Byte EventID, - MEMORY_BUFFER *pInformation - ); - -BOOLEAN -WDI_CompleteCreateDeleteMac( - IN PADAPTER pAdapter, - IN NDIS_STATUS status - ); - -VOID -WDI_IndicateRoamingComplete( - PADAPTER Adapter - ); - -VOID -WDI_IndicateLinkStateChanged( - PADAPTER pAdapter, - BOOLEAN bForceLinkQuality, - u1Byte ucLinkQuality - ); - -RT_STATUS -WDI_IndicateActionFrame( - IN PADAPTER pAdapter, - IN POCTET_STRING posMpdu -); - -VOID -WDI_IndicateWakeReason( - IN PADAPTER pAdapter, - IN BOOLEAN bWakePacket, - IN pu1Byte pBuffer, - IN u2Byte BufferLen - ); - -VOID -WDI_IndicateRoamingNeeded( - PADAPTER pAdapter, - RT_PREPARE_ROAM_TYPE IndicationReason - ); - -VOID -WDI_AddGroupPeer( - IN PADAPTER pAdapter, - IN u2Byte PortNumber - ); - -VOID -WDI_DeleteGroupPeer( - IN PADAPTER pAdapter, - IN u2Byte PortNumber - ); - -NDIS_STATUS -WDI_AddDatapathPeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr - ); - -void -WDI_DeleteDatapathPeer( - IN PADAPTER pAdapter, - IN pu1Byte pAddr - ); - -VOID -WDI_FreeRxFrame( - IN PADAPTER pAdapter, - IN PNET_BUFFER_LIST pNetBufferList - ); - -VOID -WDI_FetchNBLByPort( - IN PADAPTER pAdapter, - IN u2Byte Port_ID, - OUT PNET_BUFFER_LIST *ppNetBufferList - ); - -VOID -WDI_IndicateTKIPMICFailure( - PADAPTER pAdapter - ); - -VOID -WDI_TxCreditCheck( - IN PADAPTER pAdapter - ); - -VOID -WDI_IndicateFWStalled( - IN PADAPTER pAdapter - ); - -VOID -WDI_UpdateDefaultSetting( - IN PADAPTER pAdapter - ); - -RT_STATUS -WDI_IndicateGeneralEvent( - IN PADAPTER pAdapter, - IN u4Byte Event, - IN PVOID pInfoBuffer, - IN u4Byte InfoBruuferLen - ); - -#else - - -#define WDI_Initialize(pDriverObject, RegistryPath, pMChars) NDIS_STATUS_NOT_SUPPORTED -#define WDI_DeInitialize(DriverHandle) -#define WDI_InitRxQueue(pAdapter) -#define WDI_DeInitRxQueue(pAdapter) -#define WDI_PnPNotiry(pAdapter) -#define WDI_HandleOidRequest(MiniportAdapterContext, pNdisRequest) NDIS_STATUS_NOT_RECOGNIZED -#define WdiExt_IndicateApAssocReqReceived(pAdapter, assocReqLen, assocReq) -#define WdiExt_IndicateApAssocRspSent(pAdapter, status) -#define WDIAllocateMetaData(pAdapter, pNBL, pRfd) RT_STATUS_NOT_SUPPORT -#define WDIFreeMetaData(pAdapter, pNBL) -#define WDI_InsertDataInQueue(pAdapter, pRfd, pNBL) 0 -#define WDI_NotifyDataInQueue(pAdapter, ExTid, PeerId, level) FALSE -#define WDI_CompletePacket(pAdapter, pNBL) -#define WDI_IndicateScanComplete(Adapter, status) -#define WDI_IndicateBssList(pAdapter, status) -#define WDI_IndicateBssListBySSID(pAdapter,pSSID) -#define WDI_IndicateConnectionComplete(Adapter, status) -#define WDI_IndicateAssociationComplete(Adapter, status) -#define WDI_IndicateDisassociation(Adapter, reason, pAddr) -#define WDI_IndicateNLODiscovery(pAdapter) -#define WDI_IndicateCurrentPhyStatus(Adapter) -#define WDI_IndicateP2PEvent(pvP2PInfo, EventID, pInformation) -#define WDI_CompleteCreateDeleteMac(pAdapter, status) FALSE -#define WDI_IndicateRoamingComplete(Adapter) -#define WDI_IndicateLinkStateChanged(pAdapter, bForceLinkQuality, ucLinkQuality) -#define WDI_IndicateActionFrame(pAdapter, posMpdu) RT_STATUS_FAILURE -#define WDI_IndicateWakeReason(pAdapter, bWakePacket, pBuffer, BufferLen) -#define WDI_IndicateRoamingNeeded(pAdapter, IndicationReason) -#define WDI_AddGroupPeer(pAdapter, PortNumber) -#define WDI_DeleteGroupPeer(pAdapter, PortNumber) -#define WDI_AddDatapathPeer(pAdapter, pAddr) FALSE -#define WDI_DeleteDatapathPeer(pAdapter, pAddr) -#define WDI_FreeRxFrame(pAdapter, pNetBufferList) -#define WDI_FetchNBLByPort(pAdapter, Port_ID, ppNetBufferList) -#define WDI_IndicateTKIPMICFailure(pAdapter) -#define WDI_TxCreditCheck(pAdapter) -#define WDI_IndicateFWStalled(pAdapter) -#define WDI_UpdateDefaultSetting(pAdapter) -#define WDI_IndicateGeneralEvent(_pAdapter, _Event, _pInfoBuffer, _InfoBruuferLen) RT_STATUS_NOT_SUPPORT - -#endif - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.c b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.c deleted file mode 100644 index 3e1ee80f..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.c +++ /dev/null @@ -1,2089 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_Extension.c -// Description: WDI common functions. -// -// Author: hpfan -// Tommy -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" - - -#if WPP_SOFTWARE_TRACE -#include "WDI_Extension.tmh" -#endif - - -RT_TASK_ENTRY RT_SUPPORT_TASKs[]= -{ - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_OPEN, - OID_STR_WRAPPER("OID_WDI_TASK_OPEN"), - TRUE, - NULL, - NULL, - 0 - }, - NDIS_STATUS_WDI_INDICATION_OPEN_COMPLETE, - FALSE, - 28, - WDI_OID_TASK_OPEN, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_CLOSE, - OID_STR_WRAPPER("OID_WDI_TASK_CLOSE"), - TRUE, - NULL, - NULL, - 0 - }, - NDIS_STATUS_WDI_INDICATION_CLOSE_COMPLETE, - FALSE, - 28, - WDI_OID_TASK_CLOSE, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_SCAN, - OID_STR_WRAPPER("OID_WDI_TASK_SCAN"), - FALSE, - ParseWdiTaskScan, - CleanupParsedWdiTaskScan, - sizeof(WDI_SCAN_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_SCAN_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_SCAN, - WDI_CANCEL_OID_TASK_SCAN, - WDI_CANCEL_OID_TASK_SCAN, - WDI_PRE_M4_OID_TASK_SCAN, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_P2P_DISCOVER, - OID_STR_WRAPPER("OID_WDI_TASK_P2P_DISCOVER"), - FALSE, - ParseWdiTaskP2pDiscover, - CleanupParsedWdiTaskP2pDiscover, - sizeof(WDI_TASK_P2P_DISCOVER_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_P2P_DISCOVERY_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_P2P_DISCOVER, - WDI_CANCEL_OID_TASK_P2P_DISCOVER, - WDI_CANCEL_OID_TASK_P2P_DISCOVER, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_CONNECT, - OID_STR_WRAPPER("OID_WDI_TASK_CONNECT"), - FALSE, - ParseWdiTaskConnect, - CleanupParsedWdiTaskConnect, - sizeof(WDI_TASK_CONNECT_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_CONNECT_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_CONNECT, - WDI_CANCEL_OID_TASK_CONNECT, - WDI_CANCEL_OID_TASK_CONNECT, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_DOT11_RESET, - OID_STR_WRAPPER("OID_WDI_TASK_DOT11_RESET"), - FALSE, - ParseWdiTaskDot11Reset, - CleanupParsedWdiTaskDot11Reset, - sizeof(WDI_TASK_DOT11_RESET_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_DOT11_RESET_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_DOT11_RESET, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_DISCONNECT, - OID_STR_WRAPPER("OID_WDI_TASK_DISCONNECT"), - FALSE, - ParseWdiTaskDisconnect, - CleanupParsedWdiTaskDisconnect, - sizeof(WDI_TASK_DISCONNECT_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_DISCONNECT_COMPLETE, - FALSE, - 28, - WDI_OID_TASK_DISCONNECT, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME, - OID_STR_WRAPPER("OID_WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME"), - FALSE, - ParseWdiTaskP2pSendRequestActionFrame, - CleanupParsedWdiTaskP2pSendRequestActionFrame, - sizeof(WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_P2P_SEND_REQUEST_ACTION_FRAME_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME, - WDI_CANCEL_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME, - WDI_CANCEL_OID_TASK_P2P_SEND_REQUEST_ACTION_FRAME, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME, - OID_STR_WRAPPER("OID_WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME"), - FALSE, - ParseWdiTaskP2pSendResponseActionFrame, - CleanupParsedWdiTaskP2pSendResponseActionFrame, - sizeof(WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_P2P_SEND_RESPONSE_ACTION_FRAME_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME, - WDI_CANCEL_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME, - WDI_CANCEL_OID_TASK_P2P_SEND_RESPONSE_ACTION_FRAME, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_SET_RADIO_STATE, - OID_STR_WRAPPER("OID_WDI_TASK_SET_RADIO_STATE"), - TRUE, - ParseWdiTaskSetRadioState, - CleanupParsedWdiTaskSetRadioState, - sizeof(WDI_SET_RADIO_STATE_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_SET_RADIO_STATE_COMPLETE, - FALSE, - 28, - WDI_OID_TASK_SET_RADIO_STATE, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_CREATE_PORT, - OID_STR_WRAPPER("OID_WDI_TASK_CREATE_PORT"), - TRUE, - ParseWdiTaskCreatePort, - CleanupParsedWdiTaskCreatePort, - sizeof(WDI_TASK_CREATE_PORT_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_CREATE_PORT_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_CREATE_PORT, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_DELETE_PORT, - OID_STR_WRAPPER("OID_WDI_TASK_DELETE_PORT"), - TRUE, - ParseWdiTaskDeletePort, - CleanupParsedWdiTaskDeletePort, - sizeof(WDI_TASK_DELETE_PORT_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_DELETE_PORT_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_DELETE_PORT, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_START_AP, - OID_STR_WRAPPER("OID_WDI_TASK_START_AP"), - FALSE, - ParseWdiTaskStartAp, - CleanupParsedWdiTaskStartAp, - sizeof(WDI_TASK_START_AP_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_START_AP_COMPLETE, - FALSE, - 28, - WDI_OID_TASK_START_AP, - WDI_CANCEL_OID_TASK_START_AP, - WDI_CANCEL_OID_TASK_START_AP, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_STOP_AP, - OID_STR_WRAPPER("OID_WDI_TASK_STOP_AP"), - FALSE, - NULL, - NULL, - 0 - }, - NDIS_STATUS_WDI_INDICATION_STOP_AP_COMPLETE, - FALSE, - 28, - WDI_OID_TASK_STOP_AP, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE, - OID_STR_WRAPPER("OID_WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE"), - FALSE, - ParseWdiTaskSendApAssociationResponse, - CleanupParsedWdiTaskSendApAssociationResponse, - sizeof(WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_SEND_AP_ASSOCIATION_RESPONSE_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE, - WDI_CANCEL_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE, - WDI_CANCEL_OID_TASK_SEND_AP_ASSOCIATION_RESPONSE, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_CHANGE_OPERATION_MODE, - OID_STR_WRAPPER("OID_WDI_TASK_CHANGE_OPERATION_MODE"), - FALSE, - ParseWdiTaskChangeOperationMode, - CleanupParsedWdiTaskChangeOperationMode, - sizeof(WDI_TASK_CHANGE_OPERATION_MODE_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_CHANGE_OPERATION_MODE_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_CHANGE_OPERATION_MODE, - NULL, - NULL, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_ROAM, - OID_STR_WRAPPER("OID_WDI_TASK_ROAM"), - FALSE, - ParseWdiTaskRoam, - CleanupParsedWdiTaskRoam, - sizeof(WDI_TASK_ROAM_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_ROAM_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_ROAM, - NULL, - NULL, - NULL, - NULL - }, - /*------------------------- HotSpot 2.0 ------------------------*/ - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_SEND_REQUEST_ACTION_FRAME, - OID_STR_WRAPPER("OID_WDI_TASK_SEND_REQUEST_ACTION_FRAME"), - FALSE, - ParseWdiTaskSendRequestActionFrame, - CleanupParsedWdiTaskSendRequestActionFrame, - sizeof(WDI_TASK_SEND_REQUEST_ACTION_FRAME_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_SEND_REQUEST_ACTION_FRAME_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_SEND_REQUEST_ACTION_FRAME, - WDI_CANCEL_OID_TASK_SEND_REQUEST_ACTION_FRAME, - WDI_CANCEL_OID_TASK_SEND_REQUEST_ACTION_FRAME, - NULL, - NULL - }, - { - { - RT_CMD_ENTRY_TYPE_TASK, - OID_WDI_TASK_SEND_RESPONSE_ACTION_FRAME, - OID_STR_WRAPPER("OID_WDI_TASK_SEND_RESPONSE_ACTION_FRAME"), - FALSE, - ParseWdiTaskSendResponseActionFrame, - CleanupParsedWdiTaskSendResponseActionFrame, - sizeof(WDI_TASK_SEND_RESPONSE_ACTION_FRAME_PARAMETERS) - }, - NDIS_STATUS_WDI_INDICATION_SEND_RESPONSE_ACTION_FRAME_COMPLETE, - TRUE, - 28, - WDI_OID_TASK_SEND_RESPONSE_ACTION_FRAME, - WDI_CANCEL_OID_TASK_SEND_RESPONSE_ACTION_FRAME, - WDI_CANCEL_OID_TASK_SEND_RESPONSE_ACTION_FRAME, - NULL, - NULL - } - -}; - -RT_PROPERTY_ENTRY RT_SUPPORT_PROPERTYs[]= -{ - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_P2P_LISTEN_STATE, - OID_STR_WRAPPER("OID_WDI_SET_P2P_LISTEN_STATE"), - FALSE, - ParseWdiSetP2pListenState, - CleanupParsedWdiSetP2pListenState, - sizeof(WDI_SET_P2P_LISTEN_STATE_PARAMETERS) - }, - WDI_OID_SET_P2P_LISTEN_STATE - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_P2P_ADDITIONAL_IE, - OID_STR_WRAPPER("OID_WDI_SET_P2P_ADDITIONAL_IE"), - FALSE, - NULL, - NULL, - 0 - }, - WDI_OID_SET_P2P_ADDITIONAL_IE - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_ADD_CIPHER_KEYS, - OID_STR_WRAPPER("OID_WDI_SET_ADD_CIPHER_KEYS"), - FALSE, - ParseWdiSetAddCipherKeys, - CleanupParsedWdiSetAddCipherKeys, - sizeof(WDI_SET_ADD_CIPHER_KEYS_PARAMETERS) - }, - WDI_OID_SET_ADD_CIPHER_KEYS - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_DELETE_CIPHER_KEYS, - OID_STR_WRAPPER("OID_WDI_SET_DELETE_CIPHER_KEYS"), - FALSE, - ParseWdiSetDeleteCipherKeys, - CleanupParsedWdiSetDeleteCipherKeys, - sizeof(WDI_SET_DELETE_CIPHER_KEYS_PARAMETERS) - }, - WDI_OID_SET_DELETE_CIPHER_KEYS - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_DEFAULT_KEY_ID, - OID_STR_WRAPPER("OID_WDI_SET_DEFAULT_KEY_ID"), - FALSE, - ParseWdiSetDefaultKeyId, - CleanupParsedWdiSetDefaultKeyId, - sizeof(WDI_SET_DEFAULT_KEY_ID_PARAMETERS) - }, - WDI_OID_SET_DEFAULT_KEY_ID - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_CONNECTION_QUALITY, - OID_STR_WRAPPER("OID_WDI_SET_CONNECTION_QUALITY"), - FALSE, - ParseWdiSetConnectionQuality, - CleanupParsedWdiSetConnectionQuality, - sizeof(WDI_SET_CONNECTION_QUALITY_PARAMETERS) - }, - WDI_OID_SET_CONNECTION_QUALITY - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_GET_AUTO_POWER_SAVE, - OID_STR_WRAPPER("OID_WDI_GET_AUTO_POWER_SAVE"), - FALSE, - ParseWdiGetAutoPowerSave, - CleanupParsedWdiGetAutoPowerSave, - sizeof(WDI_GET_AUTO_POWER_SAVE_PARAMETERS) - }, - WDI_OID_GET_AUTO_POWER_SAVE - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_GET_STATISTICS, - OID_STR_WRAPPER("OID_WDI_GET_STATISTICS"), - FALSE, - NULL, - NULL, - 0 - }, - WDI_OID_GET_STATISTICS - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_RECEIVE_PACKET_FILTER, - OID_STR_WRAPPER("OID_WDI_SET_RECEIVE_PACKET_FILTER"), - FALSE, - ParseWdiSetReceivePacketFilter, - CleanupParsedWdiSetReceivePacketFilter, - sizeof(WDI_SET_RECEIVE_PACKET_FILTER_PARAMETERS) - }, - WDI_OID_SET_RECEIVE_PACKET_FILTER - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_GET_ADAPTER_CAPABILITIES, - OID_STR_WRAPPER("OID_WDI_GET_ADAPTER_CAPABILITIES"), - TRUE, - NULL, - NULL, - 0 - }, - WDI_OID_GET_ADAPTER_CAPABILITIES - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_NETWORK_LIST_OFFLOAD, - OID_STR_WRAPPER("OID_WDI_SET_NETWORK_LIST_OFFLOAD"), - FALSE, - ParseWdiSetNetworkListOffload, - CleanupParsedWdiSetNetworkListOffload, - sizeof(WDI_NETWORK_LIST_OFFLOAD_PARAMETERS) - }, - WDI_OID_SET_NETWORK_LIST_OFFLOAD - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_RECEIVE_COALESCING, - OID_STR_WRAPPER("OID_WDI_SET_RECEIVE_COALESCING"), - FALSE, - ParseWdiSetReceiveCoalescing, - CleanupParsedWdiSetReceiveCoalescing, - sizeof(WDI_SET_RECEIVE_COALESCING_PARAMETERS) - }, - WDI_OID_SET_RECEIVE_COALESCING - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_PRIVACY_EXEMPTION_LIST, - OID_STR_WRAPPER("OID_WDI_SET_PRIVACY_EXEMPTION_LIST"), - FALSE, - ParseWdiSetPrivacyExemptionList, - CleanupParsedWdiSetPrivacyExemptionList, - sizeof(WDI_SET_PRIVACY_EXEMPTION_LIST_PARAMETERS) - }, - WDI_OID_SET_PRIVACY_EXEMPTION_LIST - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_POWER_STATE, - OID_STR_WRAPPER("OID_WDI_SET_POWER_STATE"), - TRUE, - ParseWdiSetPowerState, - CleanupParsedWdiSetPowerState, - sizeof(WDI_SET_POWER_PARAMETERS) - }, - WDI_OID_SET_POWER_STATE - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_ABORT_TASK, - OID_STR_WRAPPER("OID_WDI_ABORT_TASK"), - FALSE, - ParseWdiAbortTask, - CleanupParsedWdiAbortTask, - sizeof(WDI_TASK_ABORT_PARAMETERS) - }, - WDI_OID_ABORT_TASK - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_ADD_WOL_PATTERN, - OID_STR_WRAPPER("OID_WDI_SET_ADD_WOL_PATTERN"), - FALSE, - ParseWdiSetAddWolPattern, - CleanupParsedWdiSetAddWolPattern, - sizeof(WDI_SET_ADD_WOL_PATTERN_PARAMETERS) - }, - WDI_OID_SET_ADD_WOL_PATTERN - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_REMOVE_WOL_PATTERN, - OID_STR_WRAPPER("OID_WDI_SET_REMOVE_WOL_PATTERN"), - FALSE, - ParseWdiSetRemoveWolPattern, - CleanupParsedWdiSetRemoveWolPattern, - sizeof(WDI_SET_REMOVE_WOL_PATTERN_PARAMETERS) - }, - WDI_OID_SET_REMOVE_WOL_PATTERN - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_MULTICAST_LIST, - OID_STR_WRAPPER("OID_WDI_SET_MULTICAST_LIST"), - FALSE, - ParseWdiSetMulticastList, - CleanupParsedWdiSetMulticastList, - sizeof(WDI_SET_MULTICAST_LIST_PARAMETERS) - }, - WDI_OID_SET_MULTICAST_LIST - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_ADD_PM_PROTOCOL_OFFLOAD, - OID_STR_WRAPPER("OID_WDI_SET_ADD_PM_PROTOCOL_OFFLOAD"), - FALSE, - ParseWdiSetAddPmProtocolOffload, - CleanupParsedWdiSetAddPmProtocolOffload, - sizeof(WDI_SET_ADD_PM_PROTOCOL_OFFLOAD_PARAMETERS_PARAMETERS) - }, - WDI_OID_WDI_SET_ADD_PM_PROTOCOL_OFFLOAD - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD, - OID_STR_WRAPPER("OID_WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD"), - FALSE, - ParseWdiSetRemovePmProtocolOffload, - CleanupParsedWdiSetRemovePmProtocolOffload, - sizeof(WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD_PARAMETERS) - }, - WDI_OID_WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_ADAPTER_CONFIGURATION, - OID_STR_WRAPPER("OID_WDI_SET_ADAPTER_CONFIGURATION"), - TRUE, - ParseWdiSetAdapterConfiguration, - CleanupParsedWdiSetAdapterConfiguration, - sizeof(WDI_SET_FIRMWARE_CONFIGURATION_PARAMETERS) - }, - WDI_OID_SET_ADAPTER_CONFIGURATION - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_GET_RECEIVE_COALESCING_MATCH_COUNT, - OID_STR_WRAPPER("OID_WDI_GET_RECEIVE_COALESCING_MATCH_COUNT"), - FALSE, - ParseWdiGetReceiveCoalescingMatchCount, - CleanupParsedWdiGetReceiveCoalescingMatchCount, - sizeof(WDI_GET_RECEIVE_COALESCING_MATCH_COUNT_INPUTS) - }, - WDI_OID_GET_RECEIVE_COALESCING_MATCH_COUNT - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_ADVERTISEMENT_INFORMATION, - OID_STR_WRAPPER("OID_WDI_SET_ADVERTISEMENT_INFORMATION"), - FALSE, - ParseWdiSetAdvertisementInformation, - CleanupParsedWdiSetAdvertisementInformation, - sizeof(WDI_SET_ADVERTISEMENT_INFORMATION_PARAMETERS) - }, - WDI_OID_SET_ADVERTISEMENT_INFORMATION, - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_IHV_REQUEST, - OID_STR_WRAPPER("OID_WDI_IHV_REQUEST"), - FALSE, - NULL, - NULL, - 0 - }, - WDI_OID_IHV_REQUEST - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN, - OID_STR_WRAPPER("OID_WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN"), - FALSE, - ParseWdiGetNextActionFrameDialogToken, - CleanupParsedWdiGetNextActionFrameDialogToken, - sizeof(WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN_INPUTS) - }, - WDI_OID_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_P2P_WPS_ENABLED, - OID_STR_WRAPPER("OID_WDI_SET_P2P_WPS_ENABLED"), - FALSE, - ParseWdiSetP2pWpsEnabled, - CleanupParsedWdiSetP2pWpsEnabled, - sizeof(WDI_SET_P2P_WPS_ENABLED_PARAMETERS) - }, - WDI_OID_SET_P2P_WPS_ENABLED - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_GET_BSS_ENTRY_LIST, - OID_STR_WRAPPER("OID_WDI_GET_BSS_ENTRY_LIST"), - FALSE, - ParseWdiGetBssEntryList, - CleanupParsedWdiGetBssEntryList, - sizeof(WDI_GET_BSS_ENTRY_LIST_UPDATE_PARAMETERS) - }, - WDI_OID_GET_BSS_ENTRY_LIST - }, - { - { - RT_CMD_ENTRY_TYPE_PROPERTY, - OID_WDI_SET_FAST_BSS_TRANSITION_PARAMETERS, - OID_STR_WRAPPER("OID_WDI_SET_FAST_BSS_TRANSITION_PARAMETERS"), - TRUE, - ParseWdiSetFastBssTransitionParameters, - CleanupParsedWdiSetFastBssTransitionParameters, - sizeof(WDI_SET_FAST_BSS_TRANSITION_PARAMETERS_COMMAND) - }, - WDI_OID_SET_FAST_BSS_TRANSITION_PARAMETERS - - } -}; - -static -RT_COMMAND_ENTRY * -wdi_GetCommandEntry( - IN NDIS_OID oid - ) -{ - u4Byte it = 0; - - for(it = 0 ; it < sizeof(RT_SUPPORT_TASKs) / sizeof(RT_SUPPORT_TASKs[0]); it++) - { - if(oid == RT_SUPPORT_TASKs[it].super.Oid) - return &RT_SUPPORT_TASKs[it].super; - } - - for(it = 0 ; it < sizeof(RT_SUPPORT_PROPERTYs) / sizeof(RT_SUPPORT_PROPERTYs[0]); it++) - { - if(oid == RT_SUPPORT_PROPERTYs[it].super.Oid) - return &RT_SUPPORT_PROPERTYs[it].super; - } - - return NULL; -} - -static -RT_OID_HANDLER * -wdi_GetOidHandler( - IN WDI_DATA_STRUCT *wdi, - IN RT_COMMAND_ENTRY *cmd - ) -{ - if(RT_CMD_ENTRY_TYPE_TASK == cmd->Type && !wdi->bCommandHangHappened) - { - return &wdi->TaskHandle; - } - else if(RT_CMD_ENTRY_TYPE_TASK == cmd->Type && wdi->bCommandHangHappened) - { - return &wdi->TaskPostHangHandle; - } - else if(RT_CMD_ENTRY_TYPE_PROPERTY == cmd->Type) - { - return &wdi->PropertyHandle; - } - else - { - return NULL; - } -} - -static -NDIS_STATUS -wdi_TlvParser_Init( - IN RT_TLV_PARSER *parser, - IN ADAPTER *pAdapter - ) -{ - u4Byte it = 0; - - parser->nonCleanedup = 0; - parser->buf = NULL; - parser->bufSize = 0; - parser->parsedTlv.param = NULL; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Init(): Param Cleaned.\n")); - - for(it = 0 ; it < sizeof(RT_SUPPORT_TASKs) / sizeof(RT_SUPPORT_TASKs[0]); it++) - { - if(parser->bufSize < RT_SUPPORT_TASKs[it].super.parsedTlvSize) - parser->bufSize = RT_SUPPORT_TASKs[it].super.parsedTlvSize; - } - - for(it = 0 ; it < sizeof(RT_SUPPORT_PROPERTYs) / sizeof(RT_SUPPORT_PROPERTYs[0]); it++) - { - if(parser->bufSize < RT_SUPPORT_PROPERTYs[it].super.parsedTlvSize) - parser->bufSize = RT_SUPPORT_PROPERTYs[it].super.parsedTlvSize; - } - - PlatformAllocateMemory(pAdapter, &parser->buf, parser->bufSize); - - if(!parser->buf) - return NDIS_STATUS_RESOURCES; - - return NDIS_STATUS_SUCCESS; -} - -static -VOID -wdi_TlvParser_Deinit( - IN RT_TLV_PARSER *parser - ) -{ - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_ASSERT(0 == parser->nonCleanedup, - ("%s(): some parsed tls not cleaned up before deinit: %u\n", - __FUNCTION__, parser->nonCleanedup)); - - if(parser->buf) - { - PlatformFreeMemory(parser->buf, parser->bufSize); - - parser->buf = NULL; - parser->bufSize = 0; - parser->parsedTlv.param = NULL; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Deinit(): Param Cleaned.\n")); - } - else - {// wdi_TlvParser_Init failed - - } -} - -static -NDIS_STATUS -wdi_TlvParser_Parse( - IN RT_TLV_PARSER *parser, - IN ADAPTER *pAdapter, - IN RT_COMMAND_ENTRY *cmdEntry, - IN NDIS_OID_REQUEST *pNdisRequest - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - if(!cmdEntry->TlvParser) - return NDIS_STATUS_SUCCESS; - - RT_ASSERT(cmdEntry->TlvCleaner, ("%s(): there's a parser but no cleaner\n", __FUNCTION__)); - RT_ASSERT(cmdEntry->parsedTlvSize, ("%s(): there's a parser but no parsed tlv size\n", __FUNCTION__)); - RT_ASSERT(parser->buf, ("%s(): parser buffer is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(parser->parsedTlv.param == NULL, ("%s(): parsedTlv param shall be NULL\n", __FUNCTION__)); - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_ASSERT(0 == parser->nonCleanedup, - ("%s(): there are parsed tlvs not cleanded up: %u\n", - __FUNCTION__, parser->nonCleanedup)); - - do - { - PlatformZeroMemory(parser->buf, parser->bufSize); - parser->parsedTlv.param = NULL; - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Parse(): Param Cleaned.\n")); - - if(sizeof(WDI_MESSAGE_HEADER) == pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength) - {// no tlv at all, don't feed to the parser (will return invalid data) - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Parse(): no tlv at all\n")); - status = NDIS_STATUS_SUCCESS; - break; - } - - if(NDIS_STATUS_SUCCESS != (status = cmdEntry->TlvParser( - pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength - sizeof(WDI_MESSAGE_HEADER), - (pu1Byte)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer + sizeof(WDI_MESSAGE_HEADER), - &pAdapter->pPortCommonInfo->WdiData.TlvContext, - parser->buf))) - { - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Parse(): cmdEntry->TlvParser return %s\n", status?"NOT SUCCESS":"SUCCESS")); - cmdEntry->TlvCleaner(parser->buf); - PlatformZeroMemory(parser->buf, parser->bufSize); - break; - } - - parser->parsedTlv.param = parser->buf; - parser->nonCleanedup++; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Parse(): Param Assigned.\n")); - }while(FALSE); - - return status; -} - -static -VOID -wdi_TlvParser_Cleanup( - IN RT_TLV_PARSER *parser, - IN RT_COMMAND_ENTRY *cmdEntry - ) -{ - - if(!cmdEntry->TlvCleaner) - return; - - RT_ASSERT(cmdEntry->TlvParser, ("%s(): there's a cleaner but no parser\n", __FUNCTION__)); - - if(parser->parsedTlv.param) - { - RT_ASSERT(parser->parsedTlv.param, ("%s(): no parsed structure, parsedTlv.param is NULL\n", __FUNCTION__)); - - // Prefast warning C6328: Size mismatch ignore -#pragma warning (disable: 6328) - RT_ASSERT(1 == parser->nonCleanedup, - ("%s(): incorrect # of non cleaned up parsed tlvs: %u\n", - __FUNCTION__, parser->nonCleanedup)); - - cmdEntry->TlvCleaner(parser->parsedTlv.param); - PlatformZeroMemory(parser->buf, parser->bufSize); - parser->parsedTlv.param = NULL; - parser->nonCleanedup--; - - RT_TRACE( COMP_OID_SET, DBG_LOUD, ("wdi_TlvParser_Cleanup(): Param Cleaned.\n")); - } - - return; -} - - -BOOLEAN -OidHandle_VerifyTask( - IN PADAPTER pAdapter, - IN u4Byte WdiTaskOid - ) -{ - BOOLEAN bResult = FALSE; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_COMPLETE_ENTRY pEntry = NULL; - RT_LIST_ENTRY *pTaskIndicationList = NULL; - - if(pWdi->bCommandHangHappened) - { - pTaskIndicationList = &pWdi->TaskPostHangCompleteIndicationList; - } - else - { - pTaskIndicationList = &pWdi->TaskCompleteIndicationList; - } - - if(RTIsListEmpty(pTaskIndicationList)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s(): No entry in completion list!!! Verify fail!!!\n", __FUNCTION__)); - } - else - { - pEntry= (PRT_COMPLETE_ENTRY)RTGetHeadList(pTaskIndicationList); - - if(pEntry->Oid == WdiTaskOid) - { - bResult = TRUE; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s(): Completion entry record mismatch! ", __FUNCTION__)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("In completion entry: Oid = %04x\n", pEntry->Oid)); - } - } - - return bResult; -} - - -RT_STATUS -OidHandle_IndicateM3( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - PNDIS_OID_REQUEST pNdisRequest = pOidHandle->pNdisRequest; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> OidHandle_IndicateM3 (%x)\n", pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid)); - - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, ("Indicate buffer\n"), pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten); - - NdisOIDHistoryUpdate(pAdapter, pNdisRequest, RT_OID_HISTORY_M3); - - // Should we need to ndicate the actual status for each property command instead? e.g., pOidHandle->OidStatus - NdisMOidRequestComplete( - pAdapter->pNdisCommon->hNdisAdapter, - pNdisRequest, - pOidHandle->OidStatus //NDIS_STATUS_SUCCESS - ); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== OidHandle_IndicateM3\n")); - return RT_STATUS_SUCCESS; -} - - -RT_STATUS -OidHandle_IndicateM4( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle, - IN PRT_TASK_ENTRY pTaskEntry - ) -{ - NDIS_STATUS_INDICATION statusIndication = {0}; - PMGNT_INFO pMgntInfo = &pAdapter->MgntInfo; - BOOLEAN bDeletePeer = FALSE; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> OidHandle_IndicateM4 (%x)\n", pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid)); - - NdisOIDHistoryUpdate(pAdapter, pOidHandle->pNdisRequest, RT_OID_HISTORY_M4); - - N6_ASSIGN_OBJECT_HEADER( - statusIndication.Header, - NDIS_OBJECT_TYPE_STATUS_INDICATION, - NDIS_SIZEOF_STATUS_INDICATION_REVISION_1, - NDIS_STATUS_INDICATION_REVISION_1); - - statusIndication.RequestId = pOidHandle->pNdisRequest->RequestId; - statusIndication.SourceHandle = pAdapter; - statusIndication.StatusBuffer = pOidHandle->pInputBuffer; - statusIndication.StatusBufferSize = sizeof(WDI_MESSAGE_HEADER) + pOidHandle->OutputBufferLength; - - //3 Fill status code for each task - statusIndication.StatusCode = pTaskEntry->StatusCode; - - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, ("statusIndication buffer\n"), &statusIndication, sizeof(statusIndication)); - RT_PRINT_DATA(COMP_OID_SET, DBG_LOUD, ("buffer content\n"), statusIndication.StatusBuffer, statusIndication.StatusBufferSize); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== OidHandle_IndicateM4 returns: 0x%08X\n", ((WDI_MESSAGE_HEADER *)pOidHandle->pInputBuffer)->Status)); - - // Send the indication - NdisMIndicateStatusEx( - pAdapter->pNdisCommon->hNdisAdapter, - &statusIndication - ); - - return RT_STATUS_SUCCESS; -} - - -RT_STATUS -OidHandle_Cancel( - IN PADAPTER pAdapter, - IN u4Byte NdisOid, - IN u4Byte TransactionId, - IN u2Byte PortId - ) -{ - // - // Determine if this OID can be aborted or not - // Check: - // (1) Validate definition of abort from task table - // (2) Validate OID/Transaction ID/Port ID - // - - RT_STATUS RtStatus = RT_STATUS_INVALID_PARAMETER; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - do - { - PRT_COMPLETE_ENTRY pEntry = NULL; - PRT_TASK_ENTRY pTask = (PRT_TASK_ENTRY)pWdi->TaskHandle.CmdEntry; - - if(NULL == pTask) - { - break; - } - - NdisAcquireSpinLock(&pWdi->TaskCompleteIndicationLock); - if(RTIsListEmpty(&(pWdi->TaskCompleteIndicationList))) - { - NdisReleaseSpinLock(&pWdi->TaskCompleteIndicationLock); - RtStatus = RT_STATUS_INVALID_STATE; - break; - } - - pEntry = (PRT_COMPLETE_ENTRY)RTGetHeadList(&(pWdi->TaskCompleteIndicationList)); - - if(pEntry->Oid == NdisOid && pEntry->TransactionId == TransactionId && pEntry->PortId == PortId) - { - NdisReleaseSpinLock(&pWdi->TaskCompleteIndicationLock); - RtStatus = RT_STATUS_SUCCESS; - - if(OID_WDI_TASK_P2P_DISCOVER == pEntry->Oid - || OID_WDI_TASK_SCAN == pEntry->Oid - ) - { - OidHandle_AbortAction(pAdapter, &pWdi->TaskHandle); - } - else - { - NdisAcquireSpinLock(&pWdi->TaskHandle.Lock); - pWdi->TaskHandle.Status |= RT_OID_HANDLER_STATUS_CANCELED; - NdisReleaseSpinLock(&pWdi->TaskHandle.Lock); - - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } - - break; - } - - NdisReleaseSpinLock(&pWdi->TaskCompleteIndicationLock); - - } - while(FALSE); - - return RtStatus; -} - - -RT_STATUS -OidHandle_AbortAction( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - RT_STATUS RtStatus = RT_STATUS_SUCCESS; - PRT_TASK_ENTRY pTask = (PRT_TASK_ENTRY)pOidHandle->CmdEntry; - u2Byte i = 0; - PADAPTER pTargetAdapter = pAdapter; - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("==> OidHandle_AbortAction\n")); - - - do - { - if(NULL == pTask) - { - RtStatus = RT_STATUS_INVALID_DATA; - break; - } - - if(!pTask->super.bAdapterObject) - { - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)(((PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer)->PortId)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Transport TASK TargetAdapter to Port(%d)\n", ((PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer)->PortId)); - } - - if(NULL != pTask->AbortFunc) - pTask->AbortFunc(pTargetAdapter); - - } - while(FALSE); - - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("<== OidHandle_AbortAction\n")); - return RtStatus; -} - - -NDIS_STATUS -N6WdiAbortOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST pNdisRequest - ) -{ - return NDIS_STATUS_SUCCESS; -} - - -NDIS_STATUS -WDICommandCleanup( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle, - IN BOOLEAN bAsync - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> WDICommandCleanup\n")); - - do - { - if(pOidHandle->Status & RT_OID_HANDLER_STATUS_RELEASED) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OidHandle is already released\n")); - status = NDIS_STATUS_INVALID_STATE; - break; - } - - if(!(pOidHandle->Status & RT_OID_HANDLER_STATUS_SET)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OidHandle not set\n")); - status = NDIS_STATUS_INVALID_STATE; - break; - } - - if((!(pOidHandle->Status & RT_OID_HANDLER_STATUS_RETURNED)) && - (!bAsync) && - !(pAdapter->pPortCommonInfo->WdiData.bCommandHangHappened)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OidHandle not returned\n")); - status = NDIS_STATUS_INVALID_STATE; - break; - } - - wdi_TlvParser_Cleanup(&pOidHandle->tlvParser, pOidHandle->CmdEntry); - - pOidHandle->Status &= ~RT_OID_HANDLER_STATUS_SET; - pOidHandle->Status &= ~RT_OID_HANDLER_STATUS_RETURNED; - pOidHandle->Status &= ~RT_OID_HANDLER_STATUS_CANCELED; - - }while(FALSE); - - return status; -} - - -NDIS_STATUS -OidHandle_Complete( - IN PADAPTER pAdapter, - IN OIDHANDLE_TYPE Type - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = NULL; - BOOLEAN bAsync = FALSE; - PADAPTER pDefaultAdapter = NULL; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> OidHandle_Complete enter\n")); - - if(OIDHANDLE_TYPE_TASK == Type) - { - RT_TASK_ENTRY *entry = NULL;//(RT_TASK_ENTRY *)pWdi->TaskHandle.CmdEntry; - WDI_PORT_ID PortNumber = 0; - UINT32 TransactionId = 0; - WDI_MESSAGE_HEADER *wdiHdr = NULL; - //PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - RT_LIST_ENTRY *pTaskIndicationList = NULL; - - if(pWdi->bCommandHangHappened) - { - pOidHandle = &pWdi->TaskPostHangHandle; - pTaskIndicationList = &pWdi->TaskPostHangCompleteIndicationList; - } - else - { - pOidHandle = &pWdi->TaskHandle; - pTaskIndicationList = &pWdi->TaskCompleteIndicationList; - } - - entry = (RT_TASK_ENTRY *)pOidHandle->CmdEntry; - wdiHdr = (WDI_MESSAGE_HEADER *)pOidHandle->pInputBuffer; - //wdiHdr = (WDI_MESSAGE_HEADER *)pWdi->TaskHandle.pInputBuffer; - PortNumber = (u2Byte)wdiHdr->PortId; - TransactionId = wdiHdr->TransactionId; - - if(TRUE == OidHandle_VerifyTask(pAdapter, pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid)) - { - RTRemoveHeadList(pTaskIndicationList); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OidHandle_Complete:OidHandle_VerifyTask() return FALSE\n")); - return NDIS_STATUS_FAILURE; - } - - pOidHandle->OidExecutionTime = (PlatformGetCurrentTime() - pOidHandle->OidStartTime); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("TASK CMD execution time:%dus\n", (ULONG)pOidHandle->OidExecutionTime)); - - if(pOidHandle->Status & RT_OID_HANDLER_STATUS_CANCELED) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OidHandle_Complete start to abort action!\n")); - OidHandle_AbortAction(pAdapter, pOidHandle); - } - - if(entry->bWaitComplete) - { - bAsync = TRUE; - } - - if(entry->PreM4Cb != NULL) - { - entry->PreM4Cb(pAdapter, pOidHandle); - } - - RT_TRACE(COMP_OID_SET, DBG_TRACE, - ("OidHandle_Complete start to indicate M4. Oid:0x%x Port:%d TransactionId:0x%x\n", - pWdi->TaskHandle.pNdisRequest->DATA.METHOD_INFORMATION.Oid, - PortNumber, - TransactionId)); - - pDefaultAdapter = GetDefaultAdapter(pAdapter); - - // TODO: there maybe race condition that when M4 indicated?? new task command may come before WDICommandCleanup - OidHandle_IndicateM4(pDefaultAdapter, pOidHandle, entry); - - if(entry->PostM4Cb != NULL) - { - entry->PostM4Cb(pAdapter, &PortNumber); - } - - } - else if(OIDHANDLE_TYPE_PROPERTY == Type) - { - pOidHandle = &pWdi->PropertyHandle; - - pOidHandle->OidExecutionTime = (PlatformGetCurrentTime() - pOidHandle->OidStartTime); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Property CMD execution time:%dus\n", (ULONG)pOidHandle->OidExecutionTime)); - - if(pOidHandle->OidStatus == NDIS_STATUS_PENDING) - { - pOidHandle->OidStatus = NDIS_STATUS_SUCCESS; - } - - pDefaultAdapter = GetDefaultAdapter(pAdapter); - - OidHandle_IndicateM3(pDefaultAdapter, &pWdi->PropertyHandle); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("OidHandle_Complete Invalid Type! Should Not be here!\n")); - return NDIS_STATUS_INVALID_PARAMETER; - } - - status = WDICommandCleanup(pAdapter, pOidHandle, bAsync); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> OidHandle_Complete status:0x%x\n", status)); - - return status; -} - -NDIS_STATUS -WDICommandHangComplete( - IN PADAPTER pAdapter - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = NULL; - RT_TASK_ENTRY *entry = (RT_TASK_ENTRY *)pWdi->TaskHandle.CmdEntry; - WDI_PORT_ID PortNumber = 0; - UINT32 TransactionId = 0; - WDI_MESSAGE_HEADER *wdiHdr = NULL; - //PADAPTER pTargetAdapter = GetDefaultAdapter(pAdapter); - BOOLEAN bAsync = FALSE; - BOOLEAN bResult = FALSE; - PRT_COMPLETE_ENTRY pEntry = NULL; - PADAPTER pDefaultAdapter = NULL; - - wdiHdr = (WDI_MESSAGE_HEADER *)pWdi->TaskHandle.pInputBuffer; - PortNumber = (u2Byte)wdiHdr->PortId; - TransactionId = wdiHdr->TransactionId; - - pOidHandle = &pWdi->TaskHandle; - - if(RTIsListEmpty(&pWdi->TaskCompleteIndicationList)) - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s(): No entry in completion list!!! Verify fail!!!\n", __FUNCTION__)); - } - else - { - pEntry= (PRT_COMPLETE_ENTRY)RTGetHeadList(&pWdi->TaskCompleteIndicationList); - - if(pEntry->Oid == pWdi->TaskHandle.pNdisRequest->DATA.METHOD_INFORMATION.Oid) - { - bResult = TRUE; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("%s(): Completion entry record mismatch! ", __FUNCTION__)); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("In completion entry: Oid = %04x\n", pEntry->Oid)); - } - } - - if(TRUE == bResult) - { - DbgPrintEx(0, 0, "Remove hang command from list!\n"); - RTRemoveHeadList(&pWdi->TaskCompleteIndicationList); - } - else - { - DbgPrintEx(0, 0, "Failed to Remove hang command from list!\n"); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("WDICommandHangComplete:OidHandle_VerifyTask() return FALSE\n")); - return NDIS_STATUS_FAILURE; - } - - pOidHandle->OidExecutionTime = (PlatformGetCurrentTime() - pOidHandle->OidStartTime); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("TASK Hang CMD execution time:%dus\n", (ULONG)pOidHandle->OidExecutionTime)); - - if(pOidHandle->Status & RT_OID_HANDLER_STATUS_CANCELED) - { - //RT_TRACE(COMP_OID_SET, DBG_LOUD, ("OidHandle_Complete start to abort action!\n")); - //OidHandle_AbortAction(pAdapter, pOidHandle); - } - - if(entry->bWaitComplete) - { - bAsync = TRUE; - } - - if(entry->PreM4Cb != NULL) - { - entry->PreM4Cb(pAdapter, &pWdi->TaskHandle); - } - - RT_TRACE(COMP_OID_SET, DBG_TRACE, - ("OidHandle_Complete start to indicate M4. Oid:0x%x Port:%d TransactionId:0x%x\n", - pWdi->TaskHandle.pNdisRequest->DATA.METHOD_INFORMATION.Oid, - PortNumber, - TransactionId)); - - pDefaultAdapter = GetDefaultAdapter(pAdapter); - - DbgPrintEx(0, 0, "complete Hang command M4!\n"); - // TODO: there maybe race condition that when M4 indicated?? new task command may come before WDICommandCleanup - OidHandle_IndicateM4(pDefaultAdapter, &pWdi->TaskHandle, entry); - - if(entry->PostM4Cb != NULL) - { - entry->PostM4Cb(pAdapter, &PortNumber); - } - - status = WDICommandCleanup(pAdapter, pOidHandle, bAsync); - - return status; -} - -NDIS_STATUS -WDICommandHangCleanup( - IN PADAPTER pAdapter - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> WDICommandCancelForPLDR\n")); - - if(pWdi->TaskHandle.Status & RT_OID_HANDLER_STATUS_SET) - { - PRT_COMPLETE_ENTRY pEntry = NULL; - - if(RTIsListEmpty(&(pWdi->TaskCompleteIndicationList))) - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("WDICommandCancelForPLDR: No Task Command pending\n")); - return RT_STATUS_INVALID_STATE; - } - - pEntry = (PRT_COMPLETE_ENTRY)RTGetHeadList(&(pWdi->TaskCompleteIndicationList)); - - //if(pEntry->Oid == NdisOid && pEntry->TransactionId == TransactionId && pEntry->PortId == PortId) - { - //If real FW hang happen, LE should just complete the command without touch FW. - if(OID_WDI_TASK_P2P_DISCOVER == pEntry->Oid || - OID_WDI_TASK_SCAN == pEntry->Oid - ) - { - //simply complete without abort? - //OidHandle_AbortAction(pAdapter, &pWdi->TaskHandle); - //OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK_POST_HANG); - WDICommandHangComplete(pAdapter); - } - else - { - pWdi->TaskHandle.Status |= RT_OID_HANDLER_STATUS_CANCELED; - - //OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK_POST_HANG); - WDICommandHangComplete(pAdapter); - } - } - } - else if(pWdi->PropertyHandle.Status & RT_OID_HANDLER_STATUS_SET) - { - //Do nothing here since property cmd will return quickly without touch with FW(need double check) and it should not hang... - //pWdi->PropertyHandle.Status |= RT_OID_HANDLER_STATUS_CANCELED; - //OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_PROPERTY); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("WDICommandCancelForPLDR: Should Not happen for Property CMD\n")); - } - - return status; -} - -VOID -WDITaskCommandWorkItemCallback( - IN PVOID pContext - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER)pContext; - PADAPTER pTargetAdapter = pAdapter; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = &(pWdi->TaskHandle); - PWDI_MESSAGE_HEADER pWdiHeader = NULL; - RT_COMMAND_ENTRY *entry = NULL; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> WDITaskCommandWorkItemCallback\n")); - - if(pWdi->bCommandHangHappened) - { - pOidHandle = &(pWdi->TaskPostHangHandle); - } - - pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer; - entry = pOidHandle->CmdEntry; - - do - { - PRT_COMPLETE_ENTRY pEntry = NULL; - RT_LIST_ENTRY *pTaskIndicationList = NULL; - - pOidHandle->pNdisRequest = &(pOidHandle->PendedRequest); - - if(pWdi->bCommandHangHappened) - { - pEntry = &pWdi->CurrentTaskPostHang; - pTaskIndicationList = &pWdi->TaskPostHangCompleteIndicationList; - } - else - { - pEntry = &pWdi->CurrentTask; - pTaskIndicationList = &pWdi->TaskCompleteIndicationList; - } - - if(!RTIsListEmpty(pTaskIndicationList)) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Task completion list is not empty!!! Check previous task is completed or not!!!\n")); - } - - //pEntry = &pWdi->CurrentTask; - pEntry->Oid = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid; - pEntry->TransactionId = ((PWDI_MESSAGE_HEADER)(pOidHandle->pInputBuffer))->TransactionId; - pEntry->PortId = ((PWDI_MESSAGE_HEADER)(pOidHandle->pInputBuffer))->PortId; - - RTInsertTailList(pTaskIndicationList, &pEntry->List); - } - while(FALSE); - - if(FALSE == entry->bAdapterObject) - { - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)pWdiHeader->PortId); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Async:Transport TASK TargetAdapter to Port(%d)\n", pWdiHeader->PortId)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Async:Task target is adapter\n")); - } - - // TODO: LE should not touch FW anymore for the commands coming post hangdiagnose - //if(!pAdapter->pPortCommonInfo->WdiData.bCommandHangHappened) - { - status = ((PRT_TASK_ENTRY)(pOidHandle->CmdEntry))->Func(pTargetAdapter, pOidHandle); - - pOidHandle->Status |= RT_OID_HANDLER_STATUS_RETURNED; - - if(NDIS_STATUS_SUCCESS != status) - { - pWdiHeader->Status = status; - } - } -#if 0 - else - { - //for the command coming post hangdiagnose, LE should process them without touch FW. - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } -#endif -} - -VOID -WDIPropertyCommandWorkItemCallback( - IN PVOID pContext - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PADAPTER pAdapter = (PADAPTER)pContext; - PADAPTER pTargetAdapter = pAdapter; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = &(pWdi->PropertyHandle); - PWDI_MESSAGE_HEADER pWdiHeader = NULL; - RT_COMMAND_ENTRY *entry = NULL; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> WDIPropertyCommandWorkItemCallback\n")); - - pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer; - entry = pOidHandle->CmdEntry; - - if(FALSE == entry->bAdapterObject) - { - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)pWdiHeader->PortId); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Async:Transport Property TargetAdapter to Port(%d)\n", pWdiHeader->PortId)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Async:Property target is adapter\n")); - } - - { - status = ((RT_PROPERTY_ENTRY *)(pOidHandle->CmdEntry))->Func(pTargetAdapter, pOidHandle); - - pOidHandle->OidStatus = status; - pOidHandle->Status |= RT_OID_HANDLER_STATUS_RETURNED; - - if(NDIS_STATUS_SUCCESS != status) - { - pWdiHeader->Status = status; - } - - if(0 == pOidHandle->OidReturnTime) - { - pOidHandle->OidReturnTime = (PlatformGetCurrentTime() - pOidHandle->OidStartTime); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Workitem Property return CMD time = %dus\n", (ULONG)pOidHandle->OidReturnTime)); - } - - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_PROPERTY); - } -} - - -NDIS_STATUS -TaskCommandHandle( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PADAPTER pTargetAdapter = pAdapter; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - //PRT_OID_HANDLER pOidHandle = &(pWdi->TaskHandle); - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer; - RT_TASK_ENTRY *entry = (RT_TASK_ENTRY *)pOidHandle->CmdEntry; - - do - { - PRT_COMPLETE_ENTRY pEntry = NULL; - RT_LIST_ENTRY *pTaskIndicationList = NULL; - - pOidHandle->pNdisRequest = &(pOidHandle->PendedRequest); - - if(pWdi->bCommandHangHappened) - { - pEntry = &pWdi->CurrentTaskPostHang; - pTaskIndicationList = &pWdi->TaskPostHangCompleteIndicationList; - } - else - { - pEntry = &pWdi->CurrentTask; - pTaskIndicationList = &pWdi->TaskCompleteIndicationList; - } - - if(!RTIsListEmpty(pTaskIndicationList)) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("Task completion list is not empty!!! Check previous task is completed or not!!!\n")); - return NDIS_STATUS_FAILURE; - } - - //pEntry = &pWdi->CurrentTask; - pEntry->Oid = pOidHandle->pNdisRequest->DATA.METHOD_INFORMATION.Oid; - pEntry->TransactionId = ((PWDI_MESSAGE_HEADER)(pOidHandle->pInputBuffer))->TransactionId; - pEntry->PortId = ((PWDI_MESSAGE_HEADER)(pOidHandle->pInputBuffer))->PortId; - - RTInsertTailList(pTaskIndicationList, &pEntry->List); - } - while(FALSE); - - if(FALSE == entry->super.bAdapterObject) - { - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)pWdiHeader->PortId); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Sync:Transport TASK TargetAdapter to Port(%d)\n", pWdiHeader->PortId)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Sync:Task target is adapter\n")); - } - - status = entry->Func(pTargetAdapter, pOidHandle); - - pOidHandle->Status |= RT_OID_HANDLER_STATUS_RETURNED; - - if(NDIS_STATUS_SUCCESS != status) - { - pWdiHeader->Status = status; - } - - if(0 == pOidHandle->OidReturnTime) - { - pOidHandle->OidReturnTime = (PlatformGetCurrentTime() - pOidHandle->OidStartTime); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Task return CMD time = %dus\n", (ULONG)pOidHandle->OidReturnTime)); - } - - // TODO: double check - if(FALSE == entry->bWaitComplete || NDIS_STATUS_SUCCESS != status) - { - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_TASK); - } - - return status; -} - -NDIS_STATUS -PropertyCommandHandle( - IN PADAPTER pAdapter - ) -{ - NDIS_STATUS status = NDIS_STATUS_PENDING; - PADAPTER pTargetAdapter = pAdapter; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = &(pWdi->PropertyHandle); - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pOidHandle->pInputBuffer; - RT_PROPERTY_ENTRY *entry = (RT_PROPERTY_ENTRY *)pOidHandle->CmdEntry; - - if(FALSE == entry->super.bAdapterObject) - { - pTargetAdapter = GetAdapterByPortNum(pAdapter, (u1Byte)pWdiHeader->PortId); - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Transport PROPERTY TargetAdapter to Port(%d)\n", pWdiHeader->PortId)); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_LOUD, ("Property target is adapter\n")); - } - - pOidHandle->OidStatus = entry->Func(pTargetAdapter, pOidHandle); - - pOidHandle->Status |= RT_OID_HANDLER_STATUS_RETURNED; - - if(0 == pOidHandle->OidReturnTime) - { - pOidHandle->OidReturnTime = (PlatformGetCurrentTime() - pOidHandle->OidStartTime); - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("Property return CMD time = %dus\n", (ULONG)pOidHandle->OidReturnTime)); - } - - OidHandle_Complete(pAdapter, OIDHANDLE_TYPE_PROPERTY); - - return status; -} - -NDIS_STATUS -WDICommandHandleInitInner( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - if(NDIS_STATUS_SUCCESS != wdi_TlvParser_Init(&pOidHandle->tlvParser, pAdapter)) - { - return NDIS_STATUS_FAILURE; - } - - status = PlatformAllocateMemory( - pAdapter, - (PVOID*)&pOidHandle->pInputBuffer, - MAX_OID_INPUT_BUFFER_LEN - ); - if(NDIS_STATUS_SUCCESS != status) - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("WDICommandHandleInit Task failed!\n")); - return status; - } - else - { - PlatformZeroMemory(pOidHandle->pInputBuffer, MAX_OID_INPUT_BUFFER_LEN); - pOidHandle->AllocatedBufferLength = MAX_OID_INPUT_BUFFER_LEN; - - // TODO: remove spinlock later if nobody use it - NdisAllocateSpinLock(&(pOidHandle->Lock)); - //NdisInitializeEvent(&(pOidHandle->CompleteEvent)); - //NdisInitializeEvent(&(pOidHandle->PendingEvent)); - pOidHandle->Status = RT_OID_HANDLER_STATUS_INITIALIZED; - } - - if(pOidHandle == &pWdi->TaskHandle || pOidHandle == &pWdi->TaskPostHangHandle) - { - status = PlatformInitializeWorkItem(pAdapter, - &(pOidHandle->WDICommandWorkitem), - ( RT_WORKITEM_CALL_BACK) WDITaskCommandWorkItemCallback, - (PVOID) pAdapter, - "WDITaskCommandWorkitem" - ); - } - - //Also prepare a workitem for property command if needed - if(pOidHandle == &pWdi->PropertyHandle) - { - status = PlatformInitializeWorkItem(pAdapter, - &(pOidHandle->WDICommandWorkitem), - ( RT_WORKITEM_CALL_BACK) WDIPropertyCommandWorkItemCallback, - (PVOID) pAdapter, - "WDIPropertyCommandWorkitem" - ); - } - - return status; -} - -NDIS_STATUS -WDICommandHandleInit( - IN PADAPTER pAdapter - ) -{ - NDIS_STATUS status = RT_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = NULL; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> WDICommandHandleInit\n")); - - pOidHandle = &(pWdi->PropertyHandle); - status = WDICommandHandleInitInner(pAdapter, pOidHandle); - - pOidHandle = &(pWdi->TaskHandle); - status = WDICommandHandleInitInner(pAdapter, pOidHandle); - - //For PLDR: when there are task commands coming post hangdiagnose. - pOidHandle = &(pWdi->TaskPostHangHandle); - status = WDICommandHandleInitInner(pAdapter, pOidHandle); - - // TODO: remove spinlock later when nobody use it, currently only abort command will use it. - NdisAllocateSpinLock(&pAdapter->pPortCommonInfo->WdiData.TaskCompleteIndicationLock); - RTInitializeListHead(&pAdapter->pPortCommonInfo->WdiData.TaskCompleteIndicationList); - RTInitializeListHead(&pAdapter->pPortCommonInfo->WdiData.TaskPostHangCompleteIndicationList); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("==> WDICommandHandleInit status:0x%x\n", status)); - - return status; -} - - -NDIS_STATUS -WDICommandHandleDeinitInner( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - if(NULL == pOidHandle) - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("WDICommandHandleDeinitEx return. Handle is NULL!\n")); - return NDIS_STATUS_INVALID_PARAMETER; - } - - pOidHandle->Status |= RT_OID_HANDLER_STATUS_RELEASED; - NdisFreeSpinLock(&(pOidHandle->Lock)); - - //if(pOidHandle == &pWdi->TaskHandle || pOidHandle == &pWdi->TaskPostHangHandle) - { - PlatformFreeWorkItem(&pOidHandle->WDICommandWorkitem); - } - - if(pOidHandle->pInputBuffer) - { - PlatformFreeMemory(pOidHandle->pInputBuffer, pOidHandle->AllocatedBufferLength); - pOidHandle->pInputBuffer = NULL; - } - - wdi_TlvParser_Deinit(&pOidHandle->tlvParser); - - return status; -} - -NDIS_STATUS -WDICommandHandleDeinit( - IN PADAPTER pAdapter - ) -{ - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - PRT_OID_HANDLER pOidHandle = NULL; - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - pOidHandle = &(pWdi->PropertyHandle); - status = WDICommandHandleDeinitInner(pAdapter, pOidHandle); - - pOidHandle = &(pWdi->TaskHandle); - status = WDICommandHandleDeinitInner(pAdapter, pOidHandle); - - pOidHandle = &(pWdi->TaskPostHangHandle); - status = WDICommandHandleDeinitInner(pAdapter, pOidHandle); - - // TODO: remove spinlock later when nobody use it, currently only abort command will use it. - NdisFreeSpinLock(&pAdapter->pPortCommonInfo->WdiData.TaskCompleteIndicationLock); - - return status; -} - -NDIS_STATUS -PreSetupCommand( - IN PADAPTER pAdapter, - IN PNDIS_OID_REQUEST pNdisRequest, - IN PRT_OID_HANDLER pOidHandle, - IN RT_COMMAND_ENTRY *pCmdEntry - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - - if((!(pOidHandle->Status & RT_OID_HANDLER_STATUS_INITIALIZED)) || - (pOidHandle->Status & RT_OID_HANDLER_STATUS_SET)) - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("PreSetupCommand: OidHandle invalid state! 0x%x\n", pOidHandle->Status)); - return NDIS_STATUS_INVALID_STATE; - } - - pOidHandle->pNdisRequest = pNdisRequest; - pOidHandle->OutputBufferLength = 0; - pOidHandle->OidExecutionTime = 0; - pOidHandle->OidReturnTime = 0; - pOidHandle->OidStartTime = 0; - pOidHandle->CmdEntry = pCmdEntry; - - PlatformMoveMemory(&pOidHandle->PendedRequest, pNdisRequest, sizeof(NDIS_OID_REQUEST)); - - if(pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength <= pOidHandle->AllocatedBufferLength) - { - PlatformMoveMemory( - pOidHandle->pInputBuffer, - pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - } - else - { - PlatformFreeMemory(pOidHandle->pInputBuffer, pOidHandle->AllocatedBufferLength); - if(RT_STATUS_SUCCESS == (status = PlatformAllocateMemory(pAdapter, (PVOID*)&pOidHandle->pInputBuffer, pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength))) - { - pOidHandle->AllocatedBufferLength = pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength; - PlatformMoveMemory( - pOidHandle->pInputBuffer, - pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer, - pNdisRequest->DATA.METHOD_INFORMATION.InputBufferLength); - } - else - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("PreSetupCommand allocate buffer failed!\n")); - return NDIS_STATUS_RESOURCES; - } - } - - if(NDIS_STATUS_SUCCESS == (status = wdi_TlvParser_Parse(&pOidHandle->tlvParser, pAdapter, pCmdEntry, pNdisRequest))) - { - pOidHandle->OidStartTime = PlatformGetCurrentTime(); - pOidHandle->Status |= RT_OID_HANDLER_STATUS_SET; - } - else - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("PreSetupCommand TLV Parser failure!\n")); - } - - return status; -} - -BOOLEAN -TimeConsumingPropertyCommand( - IN PRT_OID_HANDLER pOidHandle - ) -{ - if(pOidHandle->CmdEntry->Oid == OID_WDI_SET_POWER_STATE) - { - return TRUE; - } - else - { - return FALSE; - } -} - -NDIS_STATUS -WDICommandHandle( - IN PADAPTER pAdapter, - IN RT_COMMAND_ENTRY_TYPE Type - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_SUCCESS; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - - if(Type == RT_CMD_ENTRY_TYPE_PROPERTY) - { - PRT_OID_HANDLER pOidHandle = &pWdi->PropertyHandle; - - //Note: property command suppose to be executed quickly, but there may be exceptions for some NIC solution. - //Use workitem to handle the time consuming property command, such as set power that may takes about several seconds on 8723BS. - if(TimeConsumingPropertyCommand(pOidHandle)) - { - PlatformScheduleWorkItem(&(pOidHandle->WDICommandWorkitem)); - ndisStatus = NDIS_STATUS_PENDING; - } - else - { - ndisStatus = PropertyCommandHandle(pAdapter); - } - } - else if(Type == RT_CMD_ENTRY_TYPE_TASK) - { - PRT_OID_HANDLER pOidHandle = &pWdi->TaskHandle; - RT_TASK_ENTRY *taskentry = (RT_TASK_ENTRY *)(pOidHandle->CmdEntry); - - if(pWdi->bCommandHangHappened) - { - pOidHandle = &pWdi->TaskPostHangHandle; - } - - if(taskentry->bWaitComplete) - { - PlatformScheduleWorkItem(&(pOidHandle->WDICommandWorkitem)); - } - else - { - ndisStatus = TaskCommandHandle(pAdapter, pOidHandle); - } - } - else - { - RT_TRACE(COMP_OID_SET, DBG_SERIOUS, ("WDICommandHandle CommandType Invalid. Should Not be here!\n")); - ndisStatus = NDIS_STATUS_FAILURE; - } - - return ndisStatus; -} - -// -// Commands from UE are serialized and LE can reduce the effort of synchronization. -// The command synchronization scope is adapter level scope. -// Basic rule is task commands are serialized between M1 and M4, while property serialized between M1 and M3. -// -// Note: -// 1. A subset of tasks can be aborted after they have been started. -// 2. Data path is not serialized with the command path, expect for some specific cases. -// -// To support PLDR, here use one more slot for command handler. -// -// Please refer to WDI Spec for more details. -// -NDIS_STATUS -N6WdiHandleOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST pNdisRequest - ) -{ - NDIS_STATUS ndisStatus = NDIS_STATUS_NOT_RECOGNIZED; - PADAPTER pAdapter = (PADAPTER) MiniportAdapterContext; - PWDI_DATA_STRUCT pWdi = &(pAdapter->pPortCommonInfo->WdiData); - RT_COMMAND_ENTRY *entry = NULL; - RT_OID_HANDLER *oidHandle = NULL; - PWDI_MESSAGE_HEADER pWdiHeader = (PWDI_MESSAGE_HEADER)pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("N6WdiHandleOidRequestEx Oid:0x%x\n", pNdisRequest->DATA.METHOD_INFORMATION.Oid)); - -#if SOFTWARE_TRACE_LOGGING - TraceLoggingWrite( - g_hProvider, - "WDI Sample HandleOidRequest", - TraceLoggingLevel(TRACE_LEVEL_INFORMATION), - TraceLoggingHexUInt32(pNdisRequest->DATA.METHOD_INFORMATION.Oid, "Oid:")); -#endif - - pNdisRequest->DATA.METHOD_INFORMATION.BytesWritten = sizeof(WDI_MESSAGE_HEADER); - pWdiHeader->Status = NDIS_STATUS_SUCCESS; - - do - { - if(NdisRequestMethod != pNdisRequest->RequestType) - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("N6WdiHandleOidRequestEx Not Recgnized Type:0x%x\n", (ULONG)pNdisRequest->RequestType)); - ndisStatus = NDIS_STATUS_NOT_RECOGNIZED; - break; - } - - if(NULL == (entry = wdi_GetCommandEntry(pNdisRequest->DATA.METHOD_INFORMATION.Oid))) - { - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("N6WdiHandleOidRequestEx Not Recognized Oid:0x%x\n", pNdisRequest->DATA.METHOD_INFORMATION.Oid)); - ndisStatus = NDIS_STATUS_NOT_RECOGNIZED; - break; - } - - if(NULL == (oidHandle = wdi_GetOidHandler(pWdi, entry))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("N6WdiHandleOidRequestEx Failed to get valid OidHandle\n")); - ndisStatus = NDIS_STATUS_INVALID_DATA; - break; - } - - if(NDIS_STATUS_SUCCESS == (ndisStatus = PreSetupCommand(pAdapter, pNdisRequest, oidHandle, entry))) - { - ndisStatus = WDICommandHandle(pAdapter, entry->Type); - } - - if (ndisStatus != NDIS_STATUS_PENDING) - { - pWdiHeader->Status = ndisStatus; - } - } while(0); - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("N6WdiHandleOidRequestEx Oid:0x%x Status:0x%x\n", pNdisRequest->DATA.METHOD_INFORMATION.Oid, ndisStatus)); - - return ndisStatus; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.h b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.h deleted file mode 100644 index 3af17e05..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Extension.h +++ /dev/null @@ -1,119 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_Extension.h -// Description: Define data structure and export some common helper functions. -// -// Author: hpfan -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_WDI_EXTENSION_H -#define __INC_WDI_EXTENSION_H - -#define MAX_OID_INPUT_BUFFER_LEN 1024 - -#define RT_OID_HANDLER_STATUS_INITIALIZED BIT0 -#define RT_OID_HANDLER_STATUS_SET BIT1 -#define RT_OID_HANDLER_STATUS_FIRED BIT2 -#define RT_OID_HANDLER_STATUS_CANCELED BIT3 -#define RT_OID_HANDLER_STATUS_FINISHED BIT4 -#define RT_OID_HANDLER_STATUS_RELEASED BIT5 -#define RT_OID_HANDLER_STATUS_RETURNED BIT6 -#define RT_OID_HANDLER_STATUS_EXECUTE_FAILURE BIT7 - - -typedef enum _OIDHANDLE_TYPE -{ - OIDHANDLE_TYPE_NONE = 0, - OIDHANDLE_TYPE_TASK = 1, - OIDHANDLE_TYPE_PROPERTY = 2, - OIDHANDLE_TYPE_MAX = 3, -} OIDHANDLE_TYPE; - - -typedef enum _OIDHANDLE_EVENT -{ - OIDHANDLE_EVENT_NONE = 0, - OIDHANDLE_EVENT_PENDING = 1, - OIDHANDLE_EVENT_COMPLETE = 2, - OIDHANDLE_EVENT_MAX = 3, -} OIDHANDLE_EVENT; - - -BOOLEAN -OidHandle_VerifyTask( - IN PADAPTER pAdapter, - IN u4Byte WdiTaskOid - ); - -RT_STATUS -OidHandle_Complete( - IN PADAPTER pAdapter, - IN OIDHANDLE_TYPE Type - ); - -RT_STATUS -OidHandle_IndicateM3( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -RT_STATUS -OidHandle_IndicateM4( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle, - IN RT_TASK_ENTRY *pTaskEntry - ); - -RT_STATUS -OidHandle_Cancel( - IN PADAPTER pAdapter, - IN u4Byte NdisOid, - IN u4Byte TransactionId, - IN u2Byte PortId - ); - -RT_STATUS -OidHandle_AbortAction( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -NDIS_STATUS -N6WdiHandleOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST pNdisRequest - ); - -NDIS_STATUS -N6WdiAbortOidRequest( - IN NDIS_HANDLE MiniportAdapterContext, - IN PNDIS_OID_REQUEST pNdisRequest - ); - - -NDIS_STATUS -WDICommandHandleInit( - IN PADAPTER pAdapter - ); - -NDIS_STATUS -WDICommandHandleDeinit( - IN PADAPTER pAdapter - ); - -VOID -WDITaskCommandWorkItemCallback( - IN PVOID pContext - ); - -VOID -WDIPropertyCommandWorkItemCallback( - IN PVOID pContext - ); - -NDIS_STATUS -WDICommandHangCleanup( - IN PADAPTER pAdapter - ); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.c b/network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.c deleted file mode 100644 index 0579c527..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.c +++ /dev/null @@ -1,1632 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_SendAction.c -// Description: -// -// Author: haich -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" -#include "WDI_SendAction.h" - -#if WPP_SOFTWARE_TRACE -#include "WDI_SendAction.tmh" -#endif - -#include "P2P_Internal.h" - -#define WDI_SEND_ACTION_POST_ACK_DWELL_TIME_MS 300 -#define WDI_SEND_ACTION_RETRY_COUNT 15 -#define WDI_SEND_ACTION_RETRY_INTERMITTENT_TIME_MS 300 -#define WDI_SEND_ACTION_RETRY_INTERMITTENT_TIME_HCT_MS 0 - -//----------------------------------------------------------------------------- -// Local: helper -//----------------------------------------------------------------------------- - -static -P2P_FRAME_TYPE -wdi_SendAction_XlatFrameType( - IN WDI_P2P_ACTION_FRAME_TYPE wdiFType - ) -{ - if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST == wdiFType) - return P2P_FID_GO_NEG_REQ; - - if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == wdiFType) - return P2P_FID_GO_NEG_RSP; - - if(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == wdiFType) - return P2P_FID_GO_NEG_CONF; - - if(WDI_P2P_ACTION_FRAME_INVITATION_REQUEST == wdiFType) - return P2P_FID_INV_REQ; - - if(WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE == wdiFType) - return P2P_FID_INV_RSP; - - if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST == wdiFType) - return P2P_FID_PD_REQ; - - if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == wdiFType) - return P2P_FID_PD_RSP; - - return P2P_FID_MAX; -} - -static -VOID -wdi_SendAction_InitCtx( - IN WDI_SEND_ACTION_CTX *ctx, - IN WDI_P2P_ACTION_FRAME_TYPE reqType, - IN WDI_P2P_ACTION_FRAME_TYPE rspType, - IN ADAPTER *pAdapter, - IN const u1Byte *da, - IN BOOLEAN bGo, - IN u1Byte token, - IN u1Byte oldToken, - IN ULONG timeout, - IN VOID *offChnlTxReq, - IN u1Byte compEvent - ) -{ - ctx->reqType = reqType; - ctx->rspType = rspType; - ctx->pAdapter = pAdapter; - cpMacAddr(ctx->da, da); - ctx->bGo = bGo; - ctx->token = token; - ctx->oldToken = oldToken; - ctx->timeout = timeout; - ctx->req = offChnlTxReq; - ctx->compEvent = compEvent; -} - -static -VOID * -wdi_SendAction_PrepareReq( - IN ADAPTER *pAdapter, - IN const u1Byte *txMac, - IN u1Byte chnl, - IN u4Byte timeout - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - FRAME_BUF *probe = NULL; - - // off chnl tx req - if(NULL == (req = OffChnlTx_AllocReq(pAdapter, txMac, NULL, NULL, sizeof(*ctx)))) - { - return NULL; - } - - // construct probe req - probe = OffChnlTx_GetProbeReqBuf(req); - p2p_Construct_ProbeReq(probe, info); - - // data rate for probe and tx frame - OffChnlTx_SetDataRate(req, MGN_6M); - - // prepare custom scan req - OffChnlTx_SetTimeBound(req, timeout); - OffChnlTx_SetPostAckDwellTime(req, WDI_SEND_ACTION_POST_ACK_DWELL_TIME_MS); - OffChnlTx_SetProbeEnabled(req, TRUE); - OffChnlTx_SetTxChnl(req, chnl); - OffChnlTx_SetTxAttemptCount(req, WDI_SEND_ACTION_RETRY_COUNT); - OffChnlTx_SetRetryIntermittentTime(req, - pAdapter->bInHctTest - ? WDI_SEND_ACTION_RETRY_INTERMITTENT_TIME_HCT_MS - : WDI_SEND_ACTION_RETRY_INTERMITTENT_TIME_MS - ); - - return req; -} - -static VOID -add_MgntFrameMacHdr( - IN FRAME_BUF *pBuf, - IN TYPE_SUBTYPE typeSubtype, - IN const u1Byte *dest, - IN const u1Byte *src, - IN const u1Byte *bssid - ) -{ - pu1Byte buf = NULL; - - if(NULL == (buf = FrameBuf_Add(pBuf, 24))) return; - - SET_80211_HDR_FRAME_CONTROL(buf, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(buf, typeSubtype); - SET_80211_HDR_DURATION(buf, 0); - - SET_80211_HDR_FRAGMENT_SEQUENCE(buf, 0); - SET_80211_HDR_ADDRESS1(buf, dest); - SET_80211_HDR_ADDRESS2(buf, src); - SET_80211_HDR_ADDRESS3(buf, bssid); - SET_80211_HDR_FRAGMENT_SEQUENCE(buf, 0); - - return; -} - -static -VOID * -wdi_SendAction_PrepareReqEx( - IN ADAPTER *pAdapter, - IN const u1Byte *txMac, - IN u1Byte chnl, - IN u4Byte timeout, - IN UINT32 PostACKDwellTime - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - FRAME_BUF *probe = NULL; - - DbgPrintEx(0, 0, "wdi_SendAction_PrepareReqEx Timeout:%d PostAckDwellTime:%d Chan:%d TxAttemptCount:%d RetryintermittentTime:%d\n", - timeout, - WDI_SEND_ACTION_POST_ACK_DWELL_TIME_MS, - chnl, - WDI_SEND_ACTION_RETRY_COUNT, - WDI_SEND_ACTION_RETRY_INTERMITTENT_TIME_MS); - - // off chnl tx req - if(NULL == (req = OffChnlTx_AllocReq(pAdapter, txMac, NULL, NULL, sizeof(*ctx)))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("wdi_SendAction_PrepareReqEx failed to off channel req\n")); - return NULL; - } - - // TODO: double check data rate here - OffChnlTx_SetDataRate(req, MGN_6M); - - // TODO: double check here - OffChnlTx_SetTimeBound(req, timeout); - OffChnlTx_SetPostAckDwellTime(req, PostACKDwellTime); - OffChnlTx_SetProbeEnabled(req, TRUE); - OffChnlTx_SetTxChnl(req, chnl); - OffChnlTx_SetTxAttemptCount(req, WDI_SEND_ACTION_RETRY_COUNT); - OffChnlTx_SetRetryIntermittentTime(req, WDI_SEND_ACTION_RETRY_INTERMITTENT_TIME_MS); - - return req; -} - -static -RT_STATUS -wdi_SendAction_IssueReq( - IN ADAPTER *pAdapter, - IN VOID *req, - IN const char *typeInfo - ) -{ - return OffChnlTx_IssueReq(pAdapter, req, typeInfo); -} - -static -u1Byte -wdi_SendAction_GetTxChnl( - IN P2P_INFO *info, - IN const u1Byte *mac, - IN P2P_DEV_TYPE dtype, - IN P2P_FRAME_TYPE ftype - ) -{ - const P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte txChnl = 0; - - p2p_DevList_Lock(&info->devList); - - do - { - // retrieve peer channel - if(NULL == (pDev = p2p_DevList_Find(&info->devList, mac, dtype))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - return 0; - } - - if(NULL == pDev->rxFrames[ftype]) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("no frame type: %u frame from the device\n", ftype)); - return 0; - } - - txChnl = pDev->rxFrames[ftype]->channel; - }while(FALSE); - - p2p_DevList_Unlock(&info->devList); - - return txChnl; -} - -static -u1Byte -wdi_SendAction_GetRxActionFrameToken( - IN P2P_INFO *info, - IN const u1Byte *mac, - IN P2P_DEV_TYPE type, - IN P2P_FRAME_TYPE ftype - ) -{ - const P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte token = 0; - - p2p_DevList_Lock(&info->devList); - - do - { - // retrieve peer channel - if(NULL == (pDev = p2p_DevList_Find(&info->devList, mac, type))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - break; - } - - if(NULL == pDev->rxFrames[ftype]) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("no probe rsp frame from the device\n")); - break; - } - - token = pDev->rxFrames[ftype]->token; - }while(FALSE); - - p2p_DevList_Unlock(&info->devList); - - return token; -} - -//----------------------------------------------------------------------------- -// Local: prepare data -//----------------------------------------------------------------------------- - -static -NDIS_STATUS -wdi_SendAction_PdReq_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const P2P_DEV_LIST_ENTRY *pDev = NULL; - - if(param->ProvisionDiscoveryRequestInfo.Optional.GroupID_IsPresent) - { - pDev = p2p_DevList_GetGo(&info->devList, param->RequestParams.PeerDeviceAddress.Address); - RT_PRINT_ADDR(COMP_OID_SET, DBG_LOUD, "peer GO bssid:\n", pDev->mac); - } - else - { - pDev = p2p_DevList_Get(&info->devList, param->RequestParams.PeerDeviceAddress.Address, P2P_DEV_TYPE_DEV); - } - - if(NULL == pDev) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("can't find peer in dev list\n")); - return NDIS_STATUS_INVALID_STATE; - } - - info->ProvisionRequestGroupCapability = param->ProvisionDiscoveryRequestInfo.RequestParams.GroupCapability; - - if(param->ProvisionDiscoveryRequestInfo.Optional.GroupID_IsPresent) - { - info->bProvisionRequestUseGroupID = TRUE; - - // dev addr - cpMacAddr(info->ProvisionRequestGroupIDDeviceAddress, param->ProvisionDiscoveryRequestInfo.GroupID.DeviceAddress.Address); - - // ssid - info->uProvisionRequestGroupIDSSIDLength = (u1Byte)param->ProvisionDiscoveryRequestInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory( - info->ProvisionRequestGroupIDSSID, - param->ProvisionDiscoveryRequestInfo.GroupID.GroupSSID.pElements, - param->ProvisionDiscoveryRequestInfo.GroupID.GroupSSID.ElementCount - ); - } - else - { - info->bProvisionRequestUseGroupID = FALSE; - } - - if(param->VendorIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_PROVISION_DISCOVERY_REQUEST, - param->VendorIEs.ElementCount, - param->VendorIEs.pElements - ); - } - - // the ProvisionDiscoveryContext - cpMacAddr(info->ProvisionDiscoveryContext.devAddr, param->RequestParams.PeerDeviceAddress.Address); - if(param->ProvisionDiscoveryRequestInfo.Optional.GroupID_IsPresent) - { - info->ProvisionDiscoveryContext.go = TRUE; - cpMacAddr(info->ProvisionDiscoveryContext.goBssid, pDev->mac); - } - else - { - info->ProvisionDiscoveryContext.go = FALSE; - } - - // token - info->DialogToken = (u1Byte)param->RequestParams.DialogToken; - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -wdi_SendAction_PdRsp_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE - // - - // addr - cpMacAddr(info->ProvisionResponseReceiverDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - - // token - info->ProvisionResponseDialogToken = param->ResponseParams.DialogToken; - - // add ie - if(param->VendorIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_PROVISION_DISCOVERY_RESPONSE, - param->VendorIEs.ElementCount, - param->VendorIEs.pElements - ); - } - - return status; -} - -static -NDIS_STATUS -wdi_SendAction_InvitationReq_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - P2P_LIB_INVITATION_REQ_CONTEXT invParam = {0}; - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_INVITATION_REQUEST - // ref: Wdi_Xlat_AllocSendInvitationReqOid - // - - info->InvitationContext.InvitorRole = (param->InvitationRequestInfo.RequestParams.IsLocalGO) ? P2P_GO : P2P_DEVICE; - info->InvitationContext.bPersistentInvitation = TEST_FLAG(param->InvitationRequestInfo.RequestParams.InvitationFlags, BIT0); - info->InvitationContext.DialogToken = param->RequestParams.DialogToken; - //info->InvitationContext.InvitedDevice - info->InvitationContext.bToSendInvitationReqOnProbe = TRUE; - info->InvitationContext.bToUseDeviceDiscoverability = FALSE; - info->InvitationContext.Status = 0; - info->InvitationContext.bInvitor = TRUE; - PlatformMoveMemory( - info->InvitationContext.SsidBuf, - param->InvitationRequestInfo.GroupID.GroupSSID.pElements, - param->InvitationRequestInfo.GroupID.GroupSSID.ElementCount - ); - info->InvitationContext.SsidLen = (u1Byte)param->InvitationRequestInfo.GroupID.GroupSSID.ElementCount; - if(param->InvitationRequestInfo.Optional.GroupBSSID_IsPresent) - { - cpMacAddr(info->InvitationContext.GroupBssid, param->InvitationRequestInfo.GroupBSSID.Address); - } - cpMacAddr(info->InvitationContext.GODeviceAddress, param->InvitationRequestInfo.GroupID.DeviceAddress.Address); - if(param->InvitationRequestInfo.Optional.OperatingChannel_IsPresent) - { - info->InvitationContext.OpChannel = (u1Byte)param->InvitationRequestInfo.OperatingChannel.ChannelNumber; - } - else - { - info->InvitationContext.OpChannel = 0; - } - ///////////////////////// - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->InvitationRequestInfo.RequestParams.GOConfigTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->InvitationRequestInfo.RequestParams.ClientConfigTimeout; - - // grp bssid - if(param->InvitationRequestInfo.Optional.GroupBSSID_IsPresent) - { - info->bInvitationRequestUseGroupBSSID = TRUE; - cpMacAddr(info->InvitationRequestGroupBSSID, param->InvitationRequestInfo.GroupBSSID.Address); - } - else - { - info->bInvitationRequestUseGroupBSSID = FALSE; - } - - // op chnl - // NOTE: We currently only use our pP2PInfo->OperatingChannel instead of the following OS-given value - if(param->InvitationRequestInfo.Optional.OperatingChannel_IsPresent) - { - info->bInvitationRequestUseSpecifiedOperatingChannel = TRUE; - info->uInvitationRequestOperatingChannelNumber = (u1Byte)param->InvitationRequestInfo.OperatingChannel.ChannelNumber; - } - else - { - info->bInvitationRequestUseSpecifiedOperatingChannel = FALSE; - info->uInvitationRequestOperatingChannelNumber = 0; - } - - // local go - info->bInvitationRequestLocalGO = param->InvitationRequestInfo.RequestParams.IsLocalGO; - - // token - info->DialogToken = param->RequestParams.DialogToken; - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -wdi_SendAction_InvitationRsp_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - // - - // addr - cpMacAddr(info->InvitationResponseReceiverDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - - // token - info->InvitationResponseDialogToken = param->ResponseParams.DialogToken; - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->GONegotiationResponseInfo.ResponseParams.GOConfigTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->GONegotiationResponseInfo.ResponseParams.ClientConfigTimeout; - - // status - info->InvitationResponseStatus = param->InvitationResponseInfo.ResponseParams.StatusCode; - - // grp bssid - if(param->InvitationResponseInfo.Optional.GroupBSSID_IsPresent) - { - info->bInvitationResponseUseGroupBSSID = TRUE; - cpMacAddr(info->InvitationResponseGroupBSSID, param->InvitationResponseInfo.GroupBSSID.Address); - } - else - { - info->bInvitationResponseUseGroupBSSID = FALSE; - } - - // op chnl - if(param->InvitationResponseInfo.Optional.OperatingChannel_IsPresent) - { - info->bInvitationResponseUseSpecifiedOperatingChannel = TRUE; - info->uInvitationResponseOperatingChannelNumber = (u1Byte)param->InvitationResponseInfo.OperatingChannel.ChannelNumber; - } - else - { - info->bInvitationResponseUseSpecifiedOperatingChannel = FALSE; - info->uInvitationResponseOperatingChannelNumber = 0; - } - - // add ie - if(param->VendorIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_INVITATION_RESPONSE, - param->VendorIEs.ElementCount, - param->VendorIEs.pElements - ); - } - - return status; -} - -static -NDIS_STATUS -wdi_SendAction_GoNegReq_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osWpsAttr, osDpid; - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST - // - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->GONegotiationRequestInfo.RequestParams.GOConfigTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->GONegotiationRequestInfo.RequestParams.ClientConfigTimeout; - - // GroupCapability - info->NegotiationRequestGroupCapability = param->GONegotiationRequestInfo.RequestParams.GroupCapability & ((u1Byte)(~gcP2PGroupOwner)); // Workaround since the pParameters->GroupCapability is wrong - - // go intent - info->GOIntent = - ((param->GONegotiationRequestInfo.RequestParams.GOIntent << 1) - | param->GONegotiationRequestInfo.RequestParams.TieBreaker); - - // intf addr - cpMacAddr(info->InterfaceAddress, param->GONegotiationRequestInfo.RequestParams.IntendedInterfaceAddress.Address); - - // add ie - if(param->VendorIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_GO_NEGOTIATION_REQUEST, - param->VendorIEs.ElementCount, - param->VendorIEs.pElements - ); - } - - // Update the internal WPS Device Password ID attribute ---------------------------------------------------------- - osWpsAttr.Octet = (u1Byte *)param->VendorIEs.pElements + 6; // Skip (0xDD, 0x??, 0x00, 0x50, 0xF2, 0x04) 6-Byte Header - osWpsAttr.Length = (u2Byte)param->VendorIEs.ElementCount - 6; // Skip (0xDD, 0x??, 0x00, 0x50, 0xF2, 0x04) 6-Byte Header - - osDpid = P2PWpsIEGetAttribute(osWpsAttr, TRUE, P2P_WPS_ATTR_TAG_DEVICE_PASSWORD_ID); - - if(osDpid.Length == 2) - { - info->WpsDevPasswdId = (WPS_DEVICE_PASSWD_ID) N2H2BYTE(*((pu2Byte)(osDpid.Octet))); - } - - // connection context - info->ConnectionContext.Status = P2P_STATUS_SUCCESS; - info->ConnectionContext.DialogToken = param->RequestParams.DialogToken; - info->ConnectionContext.bGoingToBeGO = FALSE; - - // token - info->ConnectionContext.DialogToken = param->RequestParams.DialogToken; - - // clear scan dev id so the req won't be terminated in P2P_OnProbeRsp - P2PClearScanDeviceID(&info->ScanDeviceIDs); - - return status; -} - -static -NDIS_STATUS -wdi_SendAction_GoNegRsp_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - // - - // config timeout - info->GOConfigurationTimeout = (u1Byte)param->GONegotiationResponseInfo.ResponseParams.GOConfigTimeout; - info->ClientConfigurationTimeout = (u1Byte)param->GONegotiationResponseInfo.ResponseParams.ClientConfigTimeout; - - // addr - cpMacAddr(info->NegotiationResponsePeerDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - - // token - info->NegotiationResponseDialogToken = param->ResponseParams.DialogToken; - - // status - info->NegotiationResponseStatus = param->GONegotiationResponseInfo.ResponseParams.StatusCode; - - // go intent - info->GOIntent = - ((param->GONegotiationResponseInfo.ResponseParams.GOIntent << 1) - | param->GONegotiationResponseInfo.ResponseParams.TieBreaker); - - // intf addr - cpMacAddr(info->InterfaceAddress, param->GONegotiationResponseInfo.ResponseParams.IntendedInterfaceAddress.Address); - - // gc - info->NegotiationResponseGroupCapability = param->GONegotiationResponseInfo.ResponseParams.GroupCapability & ((u1Byte)(~gcP2PGroupOwner)); // Workaround since the pParameters->GroupCapability is wrong - - // grp id - if(param->GONegotiationResponseInfo.Optional.GroupID_IsPresent) - { - info->bNegotiationResponseUseGroupID = TRUE; - - // dev addr - cpMacAddr(info->NegotiationResponseGroupIDDeviceAddress, param->GONegotiationResponseInfo.GroupID.DeviceAddress.Address); - - // ssid - info->uNegotiationResponseGroupIDSSIDLength = (u1Byte)param->GONegotiationResponseInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory( - info->NegotiationResponseGroupIDSSID, - param->GONegotiationResponseInfo.GroupID.GroupSSID.pElements, - param->GONegotiationResponseInfo.GroupID.GroupSSID.ElementCount - ); - } - else - { - info->bNegotiationResponseUseGroupID = FALSE; - } - - // add ie - if(param->VendorIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_GO_NEGOTIATION_RESPONSE, - param->VendorIEs.ElementCount, - param->VendorIEs.pElements - ); - } - - // Update the state machine immediately - if(P2P_SC_SUCCESS == param->GONegotiationResponseInfo.ResponseParams.StatusCode) - { - info->State = P2P_STATE_GO_NEGO_RSP_SEND; - } - else - { - info->State = P2P_STATE_GO_NEGO_COMPLETE; - } - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("update P2P state to 0x%x\n", info->State)); - PlatformCancelTimer(info->pAdapter, &info->P2PMgntTimer); - PlatformSetTimer(info->pAdapter, &info->P2PMgntTimer, 0); - - return status; -} - -static -NDIS_STATUS -wdi_SendAction_GoNegConfirm_PrepareData( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - OCTET_STRING osWpsAttr, osDpid; - - // - // ref: N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM - // - - cpMacAddr(info->NegotiationConfirmPeerDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - info->NegotiationConfirmDialogToken = param->ResponseParams.DialogToken; - info->NegotiationConfirmStatus = param->GONegotiationConfirmationInfo.ConfirmationParams.StatusCode; - - info->NegotiationConfirmGroupCapability = param->GONegotiationConfirmationInfo.ConfirmationParams.GroupCapability; - info->NegotiationConfirmGroupCapability = param->GONegotiationConfirmationInfo.ConfirmationParams.GroupCapability & ((u1Byte)(~gcP2PGroupOwner)); // Workaround since the pParameters->GroupCapability is wrong - - if(param->GONegotiationConfirmationInfo.Optional.GroupID_IsPresent) - { - cpMacAddr(info->NegotiationConfirmGroupIDDeviceAddress, param->GONegotiationConfirmationInfo.GroupID.DeviceAddress.Address); - info->uNegotiationConfirmGroupIDSSIDLength = (u1Byte)param->GONegotiationConfirmationInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory( - info->NegotiationConfirmGroupIDSSID, - param->GONegotiationConfirmationInfo.GroupID.GroupSSID.pElements, - info->uNegotiationConfirmGroupIDSSIDLength - ); - } - - info->bNegotiationConfirmUseGroupID = (TRUE == param->GONegotiationConfirmationInfo.Optional.GroupID_IsPresent); - - // add ie - if(param->VendorIEs.ElementCount) - { - P2P_AddIe_Set( - &info->AdditionalIEs, - P2P_ADD_IE_GO_NEGOTIATION_CONFIRM, - param->VendorIEs.ElementCount, - param->VendorIEs.pElements - ); - } - - // token - info->DialogToken = (u1Byte)param->ResponseParams.DialogToken; - - return status; -} - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -NDIS_STATUS -WDI_SendAction_TerminateReq( - IN ADAPTER *pAdapter - ) -{ - return OffChnlTx_AbortReq(pAdapter); -} - -u1Byte -WDI_SendAction_UpdateTxFrameDialogToken( - IN VOID *req, - IN ADAPTER *pAdapter, - IN WDI_P2P_ACTION_FRAME_TYPE frameType - ) -{ - FRAME_BUF *frame = OffChnlTx_GetTxFrameBuf(req); - u1Byte token = 0; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - u1Byte *devAddr = NULL; - P2P_DEV_LIST_ENTRY *pDev = NULL; - u1Byte *mac = NULL; - P2P_DEV_TYPE devType = P2P_DEV_TYPE_LEGACY; - - RT_ASSERT(frame, ("%s(): buf is NULL!!!\n", __FUNCTION__)); - RT_ASSERT(FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN + 1 <= FrameBuf_Length(frame), - ("%s(): invalid frame length: %u\n", __FUNCTION__, FrameBuf_Length(frame))); - - // determine dev type - if(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST == frameType) - { - devType = info->bProvisionRequestUseGroupID ? P2P_DEV_TYPE_GO : P2P_DEV_TYPE_DEV; - } - else - { - devType = P2P_DEV_TYPE_DEV; - } - - // get the previouse token - token = *(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN); - - // increase token - token++; - if(0 == token) - token = 1; - - // write to the sending frame - WriteEF1Byte(FrameBuf_MHead(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN, token); - - // update to the p2p dev list - devAddr = Frame_Addr1(frame->os); - - if(P2P_DEV_TYPE_GO == devType && NULL != (pDev = p2p_DevList_GetGo(&info->devList, devAddr))) - { - mac = pDev->mac; - } - else - { - if(P2P_DEV_TYPE_GO == devType) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("bProvisionRequestUseGroupID is set but can't find the GO in dev list\n")); - } - - mac = devAddr; - } - - p2p_DevList_TxUpdate(&info->devList, - wdi_SendAction_XlatFrameType(frameType), - mac, - devType, - frame, - token, - OffChnlTx_GetTxChnl(req)); - - info->DialogToken = token; - - return token; -} - -RT_STATUS -WDI_SendAction_SkipProbeTemporarilly( - IN VOID *req - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - RT_ASSERT(req, ("%s(): req is NULL!!!\n", __FUNCTION__)); - - status = OffChnlTx_SkipProbeTemporarilly(req); - - return status; -} - -VOID * -WDI_SendAction_PdReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - P2P_DEV_TYPE devType = P2P_DEV_TYPE_DEV; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - u1Byte oldToken = info->DialogToken; - - RT_ASSERT(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST == param->RequestParams.RequestFrameType, ("invalid frame type: %u\n", param->RequestParams.RequestFrameType)); - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_PdReq_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(param->ProvisionDiscoveryRequestInfo.Optional.GroupID_IsPresent) - { - txMac = param->DeviceDescriptor.BSSID.Address; - txChnl = (u1Byte)param->DeviceDescriptor.ChannelInfo.ChannelNumber; - devType = P2P_DEV_TYPE_GO; - } - else - { - txMac = param->RequestParams.PeerDeviceAddress.Address; - txChnl = (u1Byte)param->DeviceDescriptor.ChannelInfo.ChannelNumber; - devType = P2P_DEV_TYPE_DEV; - } - - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, txMac, txChnl, param->RequestParams.SendTimeout))) - { - return NULL; - } - - pP2PDeviceListEntry = P2PDeviceListFind(&info->DeviceList, param->RequestParams.PeerDeviceAddress.Address); - if(pP2PDeviceListEntry) - { - u1Byte BoostInitGainValue = (u1Byte)(pP2PDeviceListEntry->RecvSignalPower+110); - u2Byte boostDelaySec = WPS_HANDSHAKE_TIMEOUT_SEC; - - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_START, &BoostInitGainValue, sizeof(u1Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS]: SignalStrength(%#x)\n", pP2PDeviceListEntry->RecvSignalPower)); - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - } - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_REQUEST, - WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE, - pAdapter, - param->RequestParams.PeerDeviceAddress.Address, - (P2P_DEV_TYPE_GO == devType) ? TRUE : FALSE, - param->RequestParams.DialogToken, - oldToken, - param->RequestParams.SendTimeout, - req, - P2P_EVENT_PROVISION_DISCOVERY_REQUEST_SEND_COMPLETE - ); - - // flush action frames in dev list so we don't drop frames because of dialog token mismatch - p2p_DevList_FlushActionFrames(&info->devList, txMac, devType); - - // construct pd req - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_PDReq(info, frame, param->RequestParams.PeerDeviceAddress.Address, param->RequestParams.DialogToken, 0); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_PD_REQ, - txMac, - devType, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-frame-pd-req"); - - return req; -} - -VOID * -WDI_SendAction_PdRsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - RT_ASSERT(WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE == param->ResponseParams.ResponseFrameType, ("invalid frame type: %u\n", param->ResponseParams.ResponseFrameType)); - - // retrieve peer mac/channel - txMac = param->ResponseParams.PeerDeviceAddress.Address; - if(0 == (txChnl = wdi_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_PD_REQ))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_PdRsp_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->ResponseParams.SendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_PROVISION_DISCOVERY_RESPONSE, - WDI_P2P_ACTION_FRAME_MAX_VALUE, - pAdapter, - param->ResponseParams.PeerDeviceAddress.Address, - FALSE, - param->ResponseParams.DialogToken, - oldToken, - param->ResponseParams.SendTimeout, - req, - P2P_EVENT_PROVISION_DISCOVERY_RESPONSE_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_PDRsp(info, param->ResponseParams.DialogToken, NULL, 0, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_PD_RSP, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-pd-rsp"); - - return req; -} - -VOID * -WDI_SendAction_InvitationReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - u1Byte oldToken = info->DialogToken; - - RT_ASSERT(WDI_P2P_ACTION_FRAME_INVITATION_REQUEST == param->RequestParams.RequestFrameType, ("invalid frame type: %u\n", param->RequestParams.RequestFrameType)); - - // retrieve peer mac/channel - txMac = param->RequestParams.PeerDeviceAddress.Address; - txChnl = (u1Byte)param->DeviceDescriptor.ChannelInfo.ChannelNumber; - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_InvitationReq_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->RequestParams.SendTimeout))) - { - return NULL; - } - - pP2PDeviceListEntry = P2PDeviceListFind(&info->DeviceList, param->RequestParams.PeerDeviceAddress.Address); - if(pP2PDeviceListEntry) - { - u1Byte BoostInitGainValue = (u1Byte)(pP2PDeviceListEntry->RecvSignalPower+110); - u2Byte boostDelaySec = ASSOC_HANDSHAKE_DHCP_DELAY_SEC; - - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_START, &BoostInitGainValue, sizeof(u1Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS]: SignalStrength(%#x)\n", pP2PDeviceListEntry->RecvSignalPower)); - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - } - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_INVITATION_REQUEST, - WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE, - pAdapter, - param->RequestParams.PeerDeviceAddress.Address, - param->ProvisionDiscoveryRequestInfo.Optional.GroupID_IsPresent ? TRUE : FALSE, - param->RequestParams.DialogToken, - oldToken, - param->RequestParams.SendTimeout, - req, - P2P_EVENT_INVITATION_REQUEST_SEND_COMPLETE - ); - - // construct invitation req - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_InvitationReq(info, frame, txMac, param->RequestParams.DialogToken); - - // flush action frames in dev list so we don't remember old frames from previous connections - p2p_DevList_FlushActionFrames(&info->devList, txMac, P2P_DEV_TYPE_DEV); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_INV_REQ, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-frame-invitation-req"); - - return req; -} - -VOID * -WDI_SendAction_InvitationRsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - RT_ASSERT(WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE == param->ResponseParams.ResponseFrameType, ("invalid frame type: %u\n", param->ResponseParams.ResponseFrameType)); - - // retrieve peer mac/channel - txMac = param->ResponseParams.PeerDeviceAddress.Address; - if(0 == (txChnl = wdi_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_INV_REQ))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_InvitationRsp_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->ResponseParams.SendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - OffChnlTx_SetShtPostAckDwellOnPositivelyAcked(req, TRUE); - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_INVITATION_RESPONSE, - WDI_P2P_ACTION_FRAME_MAX_VALUE, - pAdapter, - param->ResponseParams.PeerDeviceAddress.Address, - FALSE, - param->ResponseParams.DialogToken, - oldToken, - param->ResponseParams.SendTimeout, - req, - P2P_EVENT_INVITATION_RESPONSE_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_InvitationRsp(info, param->ResponseParams.DialogToken, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_INV_RSP, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-frame-invitation-rsp"); - - return req; -} - -VOID * -WDI_SendAction_GoNegReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - PP2P_DEVICE_LIST_ENTRY pP2PDeviceListEntry = NULL; - u1Byte oldToken = info->DialogToken; - - //RT_TRACE_F(COMP_P2P, DBG_LOUD, ("Op Chnl = %d\n", info->OperatingChannel)); - - RT_ASSERT(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST == param->RequestParams.RequestFrameType, ("invalid frame type: %u\n", param->RequestParams.RequestFrameType)); - - // retrieve peer mac/channel - txMac = param->RequestParams.PeerDeviceAddress.Address; - txChnl = (u1Byte)param->DeviceDescriptor.ChannelInfo.ChannelNumber; - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_GoNegReq_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->RequestParams.SendTimeout))) - { - return NULL; - } - - pP2PDeviceListEntry = P2PDeviceListFind(&info->DeviceList, param->RequestParams.PeerDeviceAddress.Address); - if(pP2PDeviceListEntry) - { - u1Byte BoostInitGainValue = (u1Byte)(pP2PDeviceListEntry->RecvSignalPower+110); - u2Byte boostDelaySec = WPS_HANDSHAKE_TIMEOUT_SEC; - - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_START, &BoostInitGainValue, sizeof(u1Byte)); - RT_TRACE(COMP_P2P, DBG_LOUD, ("[BOOST_INIT_GAIN_OS]: SignalStrength(%#x)\n", pP2PDeviceListEntry->RecvSignalPower)); - McDynamicMachanismSet(pAdapter, MC_DM_INIT_GAIN_BOOST_END_DELAY_SEC, &boostDelaySec, sizeof(u2Byte)); - } - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST, - WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE, - pAdapter, - param->RequestParams.PeerDeviceAddress.Address, - FALSE, - param->RequestParams.DialogToken, - oldToken, - param->RequestParams.SendTimeout, - req, - P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE - ); - - // construct pd req - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_GoNegReq(info, frame, txMac, param->RequestParams.DialogToken); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_GO_NEG_REQ, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-frame-go-neg-req"); - - return req; -} - -VOID * -WDI_SendAction_GoNegRsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txChnl = 0; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - RT_ASSERT(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE == param->ResponseParams.ResponseFrameType, ("invalid frame type: %u\n", param->ResponseParams.ResponseFrameType)); - - // retrieve peer mac/channel - txMac = param->ResponseParams.PeerDeviceAddress.Address; - if(0 == (txChnl = wdi_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_GO_NEG_REQ))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_GoNegRsp_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->ResponseParams.SendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE, - WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM, - pAdapter, - param->ResponseParams.PeerDeviceAddress.Address, - FALSE, - param->ResponseParams.DialogToken, - oldToken, - param->ResponseParams.SendTimeout, - req, - P2P_EVENT_GO_NEGOTIATION_RESPONSE_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_GoNegRsp(info, param->ResponseParams.DialogToken, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_GO_NEG_RSP, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-frame-go-rsp"); - - return req; -} - -VOID * -WDI_SendAction_GoNegConfirm( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - P2P_INFO *info = GET_P2P_INFO(pAdapter); - const u1Byte *txMac = NULL; - u1Byte txToken = 0; - u1Byte txChnl = 0; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - u1Byte oldToken = info->DialogToken; - - RT_ASSERT(WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM == param->ResponseParams.ResponseFrameType, ("invalid frame type: %u\n", param->ResponseParams.ResponseFrameType)); - - // retrieve peer mac/channel - txMac = param->ResponseParams.PeerDeviceAddress.Address; - if(0 == (txChnl = wdi_SendAction_GetTxChnl(info, txMac, P2P_DEV_TYPE_DEV, P2P_FID_GO_NEG_RSP))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("failed to get tx chnl\n")); - return NULL; - } - - // get go neg rsp token, to be used in the go neg conf - if(0 == (txToken = wdi_SendAction_GetRxActionFrameToken(info, param->ResponseParams.PeerDeviceAddress.Address, P2P_DEV_TYPE_DEV, P2P_FID_GO_NEG_RSP))) - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("failed to get go neg rsp token\n")); - return NULL; - } - - // prepare data and set to p2p info - if(NDIS_STATUS_SUCCESS != (status = wdi_SendAction_GoNegConfirm_PrepareData(pAdapter, param))) - { - return NULL; - } - - // prepare off chnl tx req - if(NULL == (req = wdi_SendAction_PrepareReq(pAdapter, - txMac, - txChnl, - param->ResponseParams.SendTimeout))) - { - return NULL; - } - OffChnlTx_SetPostAckDwellTime(req, 100); - OffChnlTx_SetProbeEnabled(req, FALSE); - OffChnlTx_SetTxAttemptCount(req, 1); - OffChnlTx_SetShtPostAckDwellOnPositivelyAcked(req, TRUE); - - // setup cb - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - wdi_SendAction_InitCtx(ctx, - WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_CONFIRM, - WDI_P2P_ACTION_FRAME_MAX_VALUE, - pAdapter, - param->ResponseParams.PeerDeviceAddress.Address, - FALSE, - param->ResponseParams.DialogToken, - oldToken, - param->ResponseParams.SendTimeout, - req, - P2P_EVENT_GO_NEGOTIATION_CONFIRM_SEND_COMPLETE - ); - - // construct confirm - frame = OffChnlTx_GetTxFrameBuf(req); - p2p_Construct_GoNegConf(info, txToken, frame, txMac); - - // update to the p2p dev list - p2p_DevList_TxUpdate(&info->devList, P2P_FID_GO_NEG_CONF, - txMac, - P2P_DEV_TYPE_DEV, - frame, - ReadEF1Byte(FrameBuf_Head(frame) + FRAME_OFFSET_P2P_PUB_ACT_DIALOG_TOKEN), - txChnl); - - // issue req - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-p2p-action-frame-go-confirm"); - - return req; -} - -VOID -ConstructGASActionFrame( - IN FRAME_BUF *frame, - IN const u1Byte *dest, - IN const u1Byte *src - ) -{ - pu1Byte buf = NULL; - - if(NULL == (buf = FrameBuf_Add(frame, 24))) - { - return; - } - - SET_80211_HDR_FRAME_CONTROL(buf, 0); - SET_80211_HDR_TYPE_AND_SUBTYPE(buf, Type_Action); - SET_80211_HDR_DURATION(buf, 0); - SET_80211_HDR_ADDRESS1(buf, dest); - SET_80211_HDR_ADDRESS2(buf, src); - SET_80211_HDR_ADDRESS3(buf, dest); - SET_80211_HDR_FRAGMENT_SEQUENCE(buf, 0); - - // LE only take care of MAC header, UE will send GAS payload -#if 0 - FrameBuf_Add_u1(pBuf, WLAN_ACTION_PUBLIC); - FrameBuf_Add_u1(pBuf, WLAN_PA_GAS_INITIAL_REQ); - FrameBuf_Add_be_u4(pBuf, P2P_IE_VENDOR_TYPE); - FrameBuf_Add_u1(pBuf, subtype); - FrameBuf_Add_u1(pBuf, dialogToken); -#endif -} - - -#define ANQP_EVENT_REQUEST_SEND_COMPLETE 0x01 -#define ANQP_EVENT_RESPONSE_SEND_COMPLETE 0x02 - -VOID * -WDI_SendAction_Req( - IN ADAPTER *pAdapter, - IN WDI_TASK_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - - //UE set this timeout=200ms, sometimes seems this time may not large enough. - //LE can further tune this value later. - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("WDI_SendAction_Req force set timeout=1000ms\n")); - param->RequestParams.SendTimeout = 1000; - - // prepare off chnl tx req - // Note: Use wdi_SendAction_PrepareReqEx to make PostACKDwellTime from UE take effect - if(NULL == (req = wdi_SendAction_PrepareReqEx(pAdapter, - (const u1Byte *)param->RequestParams.DestinationAddress.Address, - (u1Byte)param->RequestParams.ChannelNumber, - param->RequestParams.SendTimeout, - param->RequestParams.PostACKDwellTime))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("WDI_SendAction_Req failed to prepare request!\n")); - return NULL; - } - - RT_TRACE(COMP_OID_SET, DBG_TRACE, ("WDI_SendAction_Req prepare OK! Chan:%d PostACKDwellTime:%d DA:%x-%x-%x-%x-%x-%x\n", - param->RequestParams.ChannelNumber, - param->RequestParams.PostACKDwellTime, - param->RequestParams.DestinationAddress.Address[0], - param->RequestParams.DestinationAddress.Address[1], - param->RequestParams.DestinationAddress.Address[2], - param->RequestParams.DestinationAddress.Address[3], - param->RequestParams.DestinationAddress.Address[4], - param->RequestParams.DestinationAddress.Address[5])); - - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - // TODO: double check request/response type parameter - wdi_SendAction_InitCtx(ctx, - 0,//WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST, - 1,//WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE, - pAdapter, - (const u1Byte *)param->RequestParams.DestinationAddress.Address, - FALSE, - 0,//param->RequestParams.DialogToken, - 0, - param->RequestParams.SendTimeout, - req, - ANQP_EVENT_REQUEST_SEND_COMPLETE//P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE - ); - - //txReq = (OFF_CHNL_TX_REQ *)req; - //frame = &txReq->frameBuf; - frame = OffChnlTx_GetTxFrameBuf(req); - ConstructGASActionFrame(frame, (const u1Byte *)param->RequestParams.DestinationAddress.Address, (const u1Byte *)pAdapter->CurrentAddress); - // TODO: double check there - PlatformMoveMemory(frame->os.Octet+frame->os.Length, param->ActionFrameBody.pElements, param->ActionFrameBody.ElementCount); - frame->os.Length += (u2Byte)param->ActionFrameBody.ElementCount; - - DbgPrintEx(0, 0, "\nDump header of GAS Request Frame:\n"); - DbgPrintEx(0, 0, "0-7 0x%x-%x-%x-%x-%x-%x-%x-%x\n", - frame->os.Octet[0], - frame->os.Octet[1], - frame->os.Octet[2], - frame->os.Octet[3], - frame->os.Octet[4], - frame->os.Octet[5], - frame->os.Octet[6], - frame->os.Octet[7]); - DbgPrintEx(0, 0, "8-15 0x%x-%x-%x-%x-%x-%x-%x-%x\n", - frame->os.Octet[8], - frame->os.Octet[9], - frame->os.Octet[10], - frame->os.Octet[11], - frame->os.Octet[12], - frame->os.Octet[13], - frame->os.Octet[14], - frame->os.Octet[15]); - DbgPrintEx(0, 0, "16-23 0x%x-%x-%x-%x-%x-%x-%x-%x\n", - frame->os.Octet[16], - frame->os.Octet[17], - frame->os.Octet[18], - frame->os.Octet[19], - frame->os.Octet[20], - frame->os.Octet[21], - frame->os.Octet[22], - frame->os.Octet[23]); - - DbgPrintEx(0, 0, "/n GAS request frame Payload from UE 0-7: 0x%x-%x-%x-%x-%x-%x-%x-%x\n", - param->ActionFrameBody.pElements[0], - param->ActionFrameBody.pElements[1], - param->ActionFrameBody.pElements[2], - param->ActionFrameBody.pElements[3], - param->ActionFrameBody.pElements[4], - param->ActionFrameBody.pElements[5], - param->ActionFrameBody.pElements[6], - param->ActionFrameBody.pElements[7]); - - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-action-frame-req"); - - return req; -} - -VOID * -WDI_SendAction_Rsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ) -{ - NDIS_STATUS status = NDIS_STATUS_SUCCESS; - VOID *req = NULL; - WDI_SEND_ACTION_CTX *ctx = NULL; - FRAME_BUF *frame = NULL; - - if(NULL == (req = wdi_SendAction_PrepareReqEx(pAdapter, - (const u1Byte *)param->ResponseParams.DestinationAddress.Address, - (u1Byte)param->ResponseParams.ChannelNumber, - param->ResponseParams.SendTimeout, - param->ResponseParams.PostACKDwellTime))) - { - RT_TRACE(COMP_OID_SET, DBG_WARNING, ("WDI_SendAction_Rsp failed to prepare request!\n")); - return NULL; - } - - ctx = (WDI_SEND_ACTION_CTX *)OffChnlTx_GetCliRsvdBuf(req); - OffChnlTx_SetupCbCtx(req, stateCb, ctx); - // TODO: double check request/response type parameter - wdi_SendAction_InitCtx(ctx, - 0,//WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_REQUEST, - 1,//WDI_P2P_ACTION_FRAME_GO_NEGOTIATION_RESPONSE, - pAdapter, - (const u1Byte *)param->ResponseParams.DestinationAddress.Address, - FALSE, - 0,//param->RequestParams.DialogToken, - 0, - param->ResponseParams.SendTimeout, - req, - ANQP_EVENT_RESPONSE_SEND_COMPLETE//P2P_EVENT_GO_NEGOTIATION_REQUEST_SEND_COMPLETE - ); - - //txReq = (OFF_CHNL_TX_REQ *)req; - //frame = &txReq->frameBuf; - frame = OffChnlTx_GetTxFrameBuf(req); - ConstructGASActionFrame(frame, (const u1Byte *)param->ResponseParams.DestinationAddress.Address, (const u1Byte *)pAdapter->CurrentAddress); - // TODO: double check here - PlatformMoveMemory(frame->os.Octet, param->ActionFrameBody.pElements, param->ActionFrameBody.ElementCount); - frame->os.Length += (u2Byte)param->ActionFrameBody.ElementCount; - - wdi_SendAction_IssueReq(pAdapter, req, "wdi-send-action-frame-rsp"); - - return req; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.h b/network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.h deleted file mode 100644 index 109bba61..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_SendAction.h +++ /dev/null @@ -1,123 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_SendAction.h -// Description: -// -// Author: haich -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_WDI_SEND_ACTION_H -#define __INC_WDI_SEND_ACTION_H - - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- - -typedef -VOID -(*WDI_SEND_ACTION_STATE_CB) -( - IN VOID *req, - IN int state, - IN VOID *pCtx -); - -typedef struct _WDI_SEND_ACTION_CTX -{ - WDI_P2P_ACTION_FRAME_TYPE reqType; // type of the sending frame - WDI_P2P_ACTION_FRAME_TYPE rspType; // expected response frame to the sending frame - ADAPTER *pAdapter; // the adapter - u1Byte da[6]; // destination of the sending frame - BOOLEAN bGo; // specifies if the target device is a P2P GO - u1Byte token; // the dialog token specified by the OS to be used - u1Byte oldToken; // the original Dialog Token in P2PInfo - ULONG timeout; // time bound for sending the action frame - VOID *req; // the corresp. off chnl tx req - u1Byte compEvent; // corresp. complete event -}WDI_SEND_ACTION_CTX; - -//----------------------------------------------------------------------------- -// Function -//----------------------------------------------------------------------------- -NDIS_STATUS -WDI_SendAction_TerminateReq( - IN ADAPTER *pAdapter - ); - -u1Byte -WDI_SendAction_UpdateTxFrameDialogToken( - IN VOID *req, - IN ADAPTER *pAdapter, - IN WDI_P2P_ACTION_FRAME_TYPE frameType - ); - -RT_STATUS -WDI_SendAction_SkipProbeTemporarilly( - IN VOID *req - ); - -VOID * -WDI_SendAction_PdReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_PdRsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_InvitationReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_InvitationRsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_GoNegReq( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_GoNegRsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_GoNegConfirm( - IN ADAPTER *pAdapter, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_Req( - IN ADAPTER *pAdapter, - IN WDI_TASK_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -VOID * -WDI_SendAction_Rsp( - IN ADAPTER *pAdapter, - IN WDI_TASK_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param, - IN WDI_SEND_ACTION_STATE_CB stateCb - ); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.c b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.c deleted file mode 100644 index c3139142..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.c +++ /dev/null @@ -1,1444 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_Xlat.c -// Description: -// -// Author: haich -// -//////////////////////////////////////////////////////////////////////////////// -#include "Mp_Precomp.h" -#include "WDI_Xlat.h" - -#if WPP_SOFTWARE_TRACE -#include "WDI_Xlat.tmh" -#endif - -//----------------------------------------------------------------------------- -// Local -//----------------------------------------------------------------------------- -static -BOOLEAN -wdi_xlat_Zalloc( - IN VOID **pp, - IN UINT len - ) -{ - // Note: Attempt to allocate pool with a tag that does not contain any - // letters or digits would irritate driver verifier. - // The use of 'XLAT' is called multicharacter constant. - if(NDIS_STATUS_SUCCESS == NdisAllocateMemoryWithTag(pp, len, 'XLAT')) - { - NdisZeroMemory(*pp, len); - return TRUE; - } - - return FALSE; -} - -static -VOID -wdi_xlat_Free( - IN VOID *p, - IN UINT len - ) -{ - NdisFreeMemory(p, len, 0); -} - -static -WDI_TASK_PARAM * -wdi_xlat_ParamConstructor( - IN u1Byte *buf, - IN RT_OID_HANDLER *hTask, - IN UINT allocSize - ) -{ - WDI_TASK_PARAM *param = (WDI_TASK_PARAM *)(buf + allocSize - sizeof(WDI_TASK_PARAM)); - - param->hTask = hTask; - param->allocSize = allocSize; - - return param; -} - -static -NDIS_PORT_NUMBER -wdi_xlat_PortId( - IN WDI_MESSAGE_HEADER *hdr - ) -{ - return (NDIS_PORT_NUMBER)hdr->PortId; -} - -static -VOID -wdi_xlat_OperationMode( - IN WDI_OPERATION_MODE wdiOpMode, - OUT DOT11_CURRENT_OPERATION_MODE *opMode - ) -{ - opMode->uReserved = 0; - if(WDI_OPERATION_MODE_STA == wdiOpMode) - opMode->uCurrentOpMode = DOT11_OPERATION_MODE_EXTENSIBLE_STATION; - //else if(WDI_OPERATION_MODE_AP == wdiOpMode) - // opMode->uCurrentOpMode = DOT11_OPERATION_MODE_EXTENSIBLE_AP; - //else if(WDI_OPERATION_MODE_NETMON == wdiOpMode) - // opMode->uCurrentOpMode = DOT11_OPERATION_MODE_NETWORK_MONITOR; - else if(WDI_OPERATION_MODE_P2P_DEVICE == wdiOpMode) - opMode->uCurrentOpMode = DOT11_OPERATION_MODE_WFD_DEVICE; - else if(WDI_OPERATION_MODE_P2P_CLIENT == wdiOpMode) - opMode->uCurrentOpMode = DOT11_OPERATION_MODE_WFD_CLIENT; - else if(WDI_OPERATION_MODE_P2P_GO == wdiOpMode) - opMode->uCurrentOpMode = DOT11_OPERATION_MODE_WFD_GROUP_OWNER; - //else if(WDI_OPERATION_MODE_MANUFACTURING == wdiOpMode) - // opMode->uCurrentOpMode = DOT11_OPERATION_MODE_EXTENSIBLE_STATION; - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("unknown WDI op mode: %u, use ext sta instead\n", wdiOpMode)); - opMode->uCurrentOpMode = DOT11_OPERATION_MODE_EXTENSIBLE_STATION; - } - - return; -} - -static -VOID -wdi_xlat_P2PDiscoverType( - IN WDI_P2P_DISCOVER_TYPE wdiType, - IN BOOLEAN bForced, - OUT DOT11_WFD_DISCOVER_TYPE *type - ) -{ - if(WDI_P2P_DISCOVER_TYPE_SCAN_ONLY == wdiType) - *type = dot11_wfd_discover_type_scan_only; - else if(WDI_P2P_DISCOVER_TYPE_FIND_ONLY == wdiType) - *type = dot11_wfd_discover_type_find_only; - else if(WDI_P2P_DISCOVER_TYPE_AUTO == wdiType) - *type = dot11_wfd_discover_type_auto; - else if(WDI_P2P_DISCOVER_TYPE_SCAN_SOCIAL_CHANNELS == wdiType) - *type = dot11_wfd_discover_type_scan_social_channels; - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("unknown WDI P2P discover type: %u, use auto instead\n", wdiType)); - *type = dot11_wfd_discover_type_auto; - } - - if(bForced) - SET_FLAG(*type, dot11_wfd_discover_type_forced); - - return; -} - -static -VOID -wdi_xlat_P2PScanType( - IN WDI_P2P_SCAN_TYPE wdiType, - OUT DOT11_WFD_SCAN_TYPE *type - ) -{ - if(WDI_P2P_SCAN_TYPE_ACTIVE == wdiType) - *type = dot11_wfd_scan_type_active; - else if(WDI_P2P_SCAN_TYPE_PASSIVE == wdiType) - *type = dot11_wfd_scan_type_passive; - else if(WDI_P2P_SCAN_TYPE_AUTO == wdiType) - *type = dot11_wfd_scan_type_auto; - else - { - RT_TRACE_F(COMP_OID_SET, DBG_WARNING, ("unknown WDI P2P scan type: %u, use passive instead\n", wdiType)); - *type = dot11_wfd_scan_type_passive; - } - - return; -} - - -//----------------------------------------------------------------------------- -// Exported -//----------------------------------------------------------------------------- - -DOT11_AUTH_ALGORITHM -Wdi_Xlat_AuthMode( - IN WDI_AUTH_ALGORITHM algo - ) -{ - if(WDI_AUTH_ALGO_80211_OPEN == algo) - return DOT11_AUTH_ALGO_80211_OPEN; - else if(WDI_AUTH_ALGO_80211_SHARED_KEY == algo) - return DOT11_AUTH_ALGO_80211_SHARED_KEY; - else if(WDI_AUTH_ALGO_WPA == algo) - return DOT11_AUTH_ALGO_WPA; - else if(WDI_AUTH_ALGO_WPA_PSK == algo) - return DOT11_AUTH_ALGO_WPA_PSK; - else if(WDI_AUTH_ALGO_WPA_NONE == algo) - return DOT11_AUTH_ALGO_WPA_NONE; - else if(WDI_AUTH_ALGO_RSNA == algo) - return DOT11_AUTH_ALGO_RSNA; - else if(WDI_AUTH_ALGO_RSNA_PSK == algo) - return DOT11_AUTH_ALGO_RSNA_PSK; - else if(WDI_AUTH_ALGO_IHV_START == algo) - return DOT11_AUTH_ALGO_IHV_START; - else if(WDI_AUTH_ALGO_IHV_END == algo) - return DOT11_AUTH_ALGO_IHV_END; - else - { - RT_ASSERT(FALSE, ("%s(): invalid auth algo: %u\n", __FUNCTION__, algo)); - return DOT11_AUTH_ALGO_80211_OPEN; - } -} - -DOT11_CIPHER_ALGORITHM -Wdi_Xlat_CipherAlgo( - IN WDI_CIPHER_ALGORITHM algo - ) -{ - if(WDI_CIPHER_ALGO_NONE == algo) - return DOT11_CIPHER_ALGO_NONE; - else if(WDI_CIPHER_ALGO_WEP40 == algo) - return DOT11_CIPHER_ALGO_WEP40; - else if(WDI_CIPHER_ALGO_TKIP == algo) - return DOT11_CIPHER_ALGO_TKIP; - else if(WDI_CIPHER_ALGO_CCMP == algo) - return DOT11_CIPHER_ALGO_CCMP; - else if(WDI_CIPHER_ALGO_WEP104 == algo) - return DOT11_CIPHER_ALGO_WEP104; - else if(WDI_CIPHER_ALGO_BIP == algo) - return DOT11_CIPHER_ALGO_BIP; - else if(WDI_CIPHER_ALGO_WPA_USE_GROUP == algo) - return DOT11_CIPHER_ALGO_WPA_USE_GROUP; - else if(WDI_CIPHER_ALGO_RSN_USE_GROUP == algo) - return DOT11_CIPHER_ALGO_RSN_USE_GROUP; - else if(WDI_CIPHER_ALGO_WEP == algo) - return DOT11_CIPHER_ALGO_WEP; - else if(WDI_CIPHER_ALGO_IHV_START == algo) - return DOT11_CIPHER_ALGO_IHV_START; - else if(WDI_CIPHER_ALGO_IHV_END == algo) - return DOT11_CIPHER_ALGO_IHV_END; - else - { - RT_ASSERT(FALSE, ("%s(): invalid cipher algo: %u\n", __FUNCTION__, algo)); - return DOT11_CIPHER_ALGO_NONE; - } -} - -VOID -Wdi_Xlat_FreeOid( - IN NDIS_OID_REQUEST *req - ) -{ - WDI_TASK_PARAM *param = (WDI_TASK_PARAM *)WDI_XLAT_GET_OID_MP_RSVD_0(req); - - wdi_xlat_Free(req, param->allocSize); - - return; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocCreateMacOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_CREATE_PORT_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_MAC_INFO) // the output buffer - + sizeof(WDI_TASK_PARAM) - ; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N62C_OID_DOT11_CREATE_MAC, for output - req->RequestType = NdisRequestMethod; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_CREATE_MAC; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = 0; - req->DATA.METHOD_INFORMATION.OutputBufferLength = sizeof(DOT11_MAC_INFO); - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocDeleteMacOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_DELETE_PORT_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_MAC_INFO) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_MAC_INFO *macInfo = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N62C_OID_DOT11_DELETE_MAC - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.SET_INFORMATION.Oid = OID_DOT11_DELETE_MAC; - req->DATA.SET_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.SET_INFORMATION.InformationBufferLength = sizeof(DOT11_MAC_INFO); - - // Prep MAC info, don't have mac addr here - macInfo = (DOT11_MAC_INFO *)req->DATA.SET_INFORMATION.InformationBuffer; - macInfo->uNdisPortNumber = (ULONG)param->DeletePortParameters.PortNumber; - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocStartApReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_START_AP_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(WDI_TASK_PARAM) - ; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_START_GO_REQUEST - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.SET_INFORMATION.Oid = OID_DOT11_WFD_START_GO_REQUEST; - req->DATA.SET_INFORMATION.InformationBuffer = NULL; - req->DATA.SET_INFORMATION.InformationBufferLength = 0; - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSetDesiredSsidListOid( - IN RT_OID_HANDLER *hTask, - IN WDI_SSID *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SSID_LIST) - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SSID_LIST *ssidlist = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_START_GO_REQUEST - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.SET_INFORMATION.Oid = OID_DOT11_DESIRED_SSID_LIST; - req->DATA.SET_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.SET_INFORMATION.InformationBufferLength = sizeof(DOT11_SSID_LIST); - - // Prep SSID list - ssidlist = (DOT11_SSID_LIST *)req->DATA.SET_INFORMATION.InformationBuffer; - ssidlist->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - ssidlist->Header.Revision = DOT11_SSID_LIST_REVISION_1; - ssidlist->Header.Size = sizeof(DOT11_SSID_LIST); - ssidlist->uNumOfEntries = 1; - ssidlist->uTotalNumOfEntries = 1; - ssidlist->SSIDs[0].uSSIDLength = param->ElementCount; - PlatformMoveMemory(ssidlist->SSIDs[0].ucSSID, param->pElements, param->ElementCount); - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocResetOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_DOT11_RESET_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_RESET_REQUEST) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_RESET_REQUEST *resetReq = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N6C_OID_DOT11_RESET_REQUEST - // Note: assume sizeof DOT11_RESET_REQUEST > DOT11_STATUS_INDICATION - req->RequestType = NdisRequestMethod; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_RESET_REQUEST; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_RESET_REQUEST); - req->DATA.METHOD_INFORMATION.OutputBufferLength = sizeof(DOT11_STATUS_INDICATION); - - // Prep reset req, ignore resetReq->dot11MacAddress here - resetReq = (DOT11_RESET_REQUEST *)req->DATA.SET_INFORMATION.InformationBuffer; - resetReq->dot11ResetType = dot11_reset_type_phy_and_mac; - resetReq->bSetDefaultMIB = (0 != param->Dot11ResetParameters.SetDefaultMIB); - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocChangeOpModeOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_CHANGE_OPERATION_MODE_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_CURRENT_OPERATION_MODE) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_CURRENT_OPERATION_MODE *opMode = NULL; - - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N62C_OID_DOT11_DELETE_MAC - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.SET_INFORMATION.Oid = OID_DOT11_CURRENT_OPERATION_MODE; - req->DATA.SET_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.SET_INFORMATION.InformationBufferLength = sizeof(*opMode); - - // Prep op mode - wdi_xlat_OperationMode( - param->OperationMode, - (DOT11_CURRENT_OPERATION_MODE *)req->DATA.SET_INFORMATION.InformationBuffer); - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocWfdDiscoverOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_DISCOVER_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_WFD_DISCOVER_REQUEST) // the input buffer - + param->VendorIEs.ElementCount // vendor IE - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_WFD_DISCOVER_REQUEST *discReq = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_OID_DOT11_WFD_DISCOVER_REQUEST - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.SET_INFORMATION.Oid = OID_DOT11_WFD_DISCOVER_REQUEST; - req->DATA.SET_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.SET_INFORMATION.InformationBufferLength = sizeof(*discReq); - - // Prep reset req, ignore resetReq->dot11MacAddress here - discReq = (DOT11_WFD_DISCOVER_REQUEST *)req->DATA.SET_INFORMATION.InformationBuffer; - { - // discover type - wdi_xlat_P2PDiscoverType( - param->DiscoverMode.DiscoveryType, - (0 != param->DiscoverMode.ForcedDiscovery), - &discReq->DiscoverType); - - // scan type - wdi_xlat_P2PScanType(param->DiscoverMode.ScanType, &discReq->ScanType); - - // TODO: ScanRepeatCount - - // TODO: TimeBetweenScans - - // TODO: DwellTime - - // TODO: BandChannelList - - // TODO: SSIDList: ArrayOfElementsOfWIFI_SSID - - // VendorIEs - if(param->VendorIEs.ElementCount) - { - discReq->uIEsLength = param->VendorIEs.ElementCount; - discReq->uIEsOffset = sizeof(*discReq); - NdisMoveMemory( - (u1Byte *)discReq + discReq->uIEsOffset, - param->VendorIEs.pElements, param->VendorIEs.ElementCount); - } - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocDevInfoOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_DEVICE_INFO_CONTAINER *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_WFD_DEVICE_INFO) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_WFD_DEVICE_INFO *devInfo = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_DEVICE_INFO - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_ADDITIONAL_IE; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_WFD_DEVICE_INFO); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - devInfo = (DOT11_WFD_DEVICE_INFO *)req->DATA.SET_INFORMATION.InformationBuffer; - devInfo->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - devInfo->Header.Revision = DOT11_WFD_DEVICE_INFO_REVISION_1; - devInfo->Header.Size = sizeof(DOT11_WFD_DEVICE_INFO); - cpMacAddr(devInfo->DeviceAddress, param->DeviceInfoParameters.DeviceAddress); - devInfo->ConfigMethods = param->DeviceInfoParameters.ConfigurationMethods; - devInfo->PrimaryDeviceType.CategoryID = param->DeviceInfoParameters.DeviceType.CategoryID; - devInfo->PrimaryDeviceType.SubCategoryID = param->DeviceInfoParameters.DeviceType.SubcategoryID; - PlatformMoveMemory(devInfo->PrimaryDeviceType.OUI, - param->DeviceInfoParameters.DeviceType.OUI, - sizeof(param->DeviceInfoParameters.DeviceType.OUI)); - - devInfo->DeviceName.uDeviceNameLength = param->DeviceName.ElementCount; - PlatformMoveMemory(devInfo->DeviceName.ucDeviceName, - param->DeviceName.pElements, - param->DeviceName.ElementCount); - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocDevCapOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_DEVICE_CAPABILITY_CONTAINER *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_WFD_DEVICE_CAPABILITY_CONFIG) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_WFD_DEVICE_CAPABILITY_CONFIG *devCap = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_DEVICE_CAPABILITY - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_DEVICE_CAPABILITY; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_WFD_DEVICE_CAPABILITY_CONFIG); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - devCap = (DOT11_WFD_DEVICE_CAPABILITY_CONFIG *)req->DATA.SET_INFORMATION.InformationBuffer; - devCap->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - devCap->Header.Revision = DOT11_WFD_DEVICE_CAPABILITY_CONFIG_REVISION_1; - devCap->Header.Size = sizeof(DOT11_WFD_DEVICE_CAPABILITY_CONFIG); - devCap->bServiceDiscoveryEnabled = TEST_FLAG(param->DeviceCapabilityBitmap , dcServiceDiscovery); - devCap->bClientDiscoverabilityEnabled = TEST_FLAG(param->DeviceCapabilityBitmap , dcP2PClientDiscoverability); - devCap->bConcurrentOperationSupported = TEST_FLAG(param->DeviceCapabilityBitmap , dcConcurrentOperation); - devCap->bInfrastructureManagementEnabled = TEST_FLAG(param->DeviceCapabilityBitmap , dcP2PInfrastructureManaged); - devCap->bDeviceLimitReached = TEST_FLAG(param->DeviceCapabilityBitmap , dcP2PDeviceLimit); - - RT_TRACE_F(COMP_P2P, DBG_LOUD, ("[%s] devCap: %02X \n", "p2pattr", param->DeviceCapabilityBitmap )); - - devCap->bInvitationProcedureEnabled = TEST_FLAG(param->DeviceCapabilityBitmap , dcP2PInvitationProcedure); - devCap->WPSVersionsEnabled = param->WPSVersionsEnabled; - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocGrpCapOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_GROUP_OWNER_CAPABILITY_CONTAINER *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG *grpCap = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_GROUP_OWNER_CAPABILITY - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_DEVICE_CAPABILITY; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_WFD_DEVICE_CAPABILITY_CONFIG); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - grpCap = (DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG *)req->DATA.SET_INFORMATION.InformationBuffer; - grpCap->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - grpCap->Header.Revision = DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG_REVISION_1; - grpCap->Header.Size = sizeof(DOT11_WFD_GROUP_OWNER_CAPABILITY_CONFIG); - grpCap->bPersistentGroupEnabled = TEST_FLAG(param->GroupCapabilityBitmap, gcPersistentP2PGroup); - grpCap->bIntraBSSDistributionSupported = TEST_FLAG(param->GroupCapabilityBitmap, gcIntraBSSDistribution); - grpCap->bCrossConnectionSupported = TEST_FLAG(param->GroupCapabilityBitmap, gcCrossConnection); - grpCap->bPersistentReconnectSupported = TEST_FLAG(param->GroupCapabilityBitmap, gcPersistentReconnect); - grpCap->bGroupFormationEnabled = TEST_FLAG(param->GroupCapabilityBitmap, gcGroupFormation); - grpCap->uMaximumGroupLimit = param->MaximumGroupLimit; - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSecDevTypeOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_SECONDARY_DEVICE_TYPE_CONTAINER *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST) + sizeof(DOT11_WFD_DEVICE_TYPE) * param->ElementCount // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - ULONG it = 0; - - DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST *secDevTypeList = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_DEVICE_CAPABILITY; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_WFD_DEVICE_CAPABILITY_CONFIG); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - secDevTypeList = (DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST *)req->DATA.SET_INFORMATION.InformationBuffer; - secDevTypeList->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - secDevTypeList->Header.Revision = DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST_REVISION_1; - secDevTypeList->Header.Size = sizeof(DOT11_WFD_SECONDARY_DEVICE_TYPE_LIST); - secDevTypeList->uNumOfEntries = param->ElementCount; - secDevTypeList->uTotalNumOfEntries = param->ElementCount; - for(it = 0; it < param->ElementCount; it++) - { - secDevTypeList->SecondaryDeviceTypes[it].CategoryID = param->pElements[it].CategoryID; - - secDevTypeList->SecondaryDeviceTypes[it].SubCategoryID = param->pElements[it].SubcategoryID; - PlatformMoveMemory(secDevTypeList->SecondaryDeviceTypes[it].OUI, - param->pElements[it].OUI, - sizeof(param->pElements[it].OUI)); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocListenStateDiscoverabilityOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_LISTEN_STATE_CONTAINER *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = (WDI_MESSAGE_HEADER *)hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(ULONG) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - ULONG *listenStateDiscoverability = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_LISTEN_STATE_DISCOVERABILITY; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(ULONG); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - listenStateDiscoverability = (ULONG *)req->DATA.SET_INFORMATION.InformationBuffer; - if(WDI_P2P_LISTEN_STATE_OFF == *param) - *listenStateDiscoverability = DOT11_WFD_DEVICE_NOT_DISCOVERABLE; - else if(WDI_P2P_LISTEN_STATE_PASSIVE_AVAILABILITY == *param) // TODO: what's passive availability? - *listenStateDiscoverability = DOT11_WFD_DEVICE_NOT_DISCOVERABLE; - else if(WDI_P2P_LISTEN_STATE_AUTOMATIC_AVAILABILITY == *param) - *listenStateDiscoverability = DOT11_WFD_DEVICE_AUTO_AVAILABILITY; - else if(WDI_P2P_LISTEN_STATE_HIGH_AVAILABILITY == *param) - *listenStateDiscoverability = DOT11_WFD_DEVICE_HIGH_AVAILABILITY; - else - *listenStateDiscoverability = DOT11_WFD_DEVICE_AUTO_AVAILABILITY; - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocListenChannelOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_CHANNEL_CONTAINER *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = (WDI_MESSAGE_HEADER *)hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(ULONG) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_WFD_DEVICE_LISTEN_CHANNEL *listenChnl = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_DEVICE_LISTEN_CHANNEL; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_WFD_DEVICE_LISTEN_CHANNEL); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - listenChnl = (DOT11_WFD_DEVICE_LISTEN_CHANNEL *)req->DATA.SET_INFORMATION.InformationBuffer; - listenChnl->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - listenChnl->Header.Revision = DOT11_WFD_DEVICE_LISTEN_CHANNEL_REVISION_1; - listenChnl->Header.Size = sizeof(DOT11_WFD_DEVICE_LISTEN_CHANNEL); - listenChnl->ChannelNumber = (UCHAR)param->ChannelNumber; - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocGetDialogTokenOid( - IN RT_OID_HANDLER *hTask, - IN WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN_PARAMETERS *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = (WDI_MESSAGE_HEADER *)hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(UCHAR) // the output buffer - + sizeof(WDI_TASK_PARAM) - ; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_QUERY_OID_DOT11_WFD_GET_DIALOG_TOKEN - req->RequestType = NdisRequestQueryInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_GET_DIALOG_TOKEN; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = 0; - req->DATA.METHOD_INFORMATION.OutputBufferLength = sizeof(UCHAR); - - return req; - -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendGONegReqReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *reqParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep reset req - reqParam = (DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - reqParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - reqParam->Header.Revision = DOT11_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS_REVISION_1; - reqParam->Header.Size = DOT11_SIZEOF_SEND_GO_NEGOTIATION_REQUEST_PARAMETERS_REVISION_1; - reqParam->DialogToken = param->RequestParams.DialogToken; - cpMacAddr(reqParam->PeerDeviceAddress, param->RequestParams.PeerDeviceAddress.Address); - reqParam->uSendTimeout = param->RequestParams.SendTimeout; - - if(param->Optional.GONegotiationRequestInfo_IsPresent) - { - reqParam->GroupOwnerIntent.Intent = (UCHAR)param->GONegotiationRequestInfo.RequestParams.GOIntent; - reqParam->GroupOwnerIntent.TieBreaker = param->GONegotiationRequestInfo.RequestParams.TieBreaker; - - reqParam->MinimumConfigTimeout.GOTimeout = (UCHAR)param->GONegotiationRequestInfo.RequestParams.GOConfigTimeout; - reqParam->MinimumConfigTimeout.ClientTimeout = (UCHAR)param->GONegotiationRequestInfo.RequestParams.ClientConfigTimeout; - - cpMacAddr(reqParam->IntendedInterfaceAddress, param->GONegotiationRequestInfo.RequestParams.IntendedInterfaceAddress.Address); - - reqParam->GroupCapability = param->GONegotiationRequestInfo.RequestParams.GroupCapability; - } - - if(param->VendorIEs.ElementCount) - { - reqParam->uIEsLength = param->VendorIEs.ElementCount; - reqParam->uIEsOffset = sizeof(*reqParam); - PlatformMoveMemory((u1Byte *)reqParam + sizeof(*reqParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendInvitationReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_INVITATION_REQUEST_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_INVITATION_REQUEST_PARAMETERS *reqParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_OID_DOT11_WFD_SEND_GO_NEGOTIATION_REQUEST - // Note: assume sizeof DOT11_RESET_REQUEST > DOT11_STATUS_INDICATION - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_INVITATION_REQUEST; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_INVITATION_REQUEST_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep reset req, ignore resetReq->dot11MacAddress here - reqParam = (DOT11_SEND_INVITATION_REQUEST_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - reqParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - reqParam->Header.Revision = DOT11_SEND_INVITATION_REQUEST_PARAMETERS_REVISION_1; - reqParam->Header.Size = DOT11_SIZEOF_SEND_INVITATION_REQUEST_PARAMETERS_REVISION_1; - reqParam->DialogToken = param->RequestParams.DialogToken; - cpMacAddr(reqParam->PeerDeviceAddress, param->RequestParams.PeerDeviceAddress.Address); - reqParam->uSendTimeout = param->RequestParams.SendTimeout; - - if(param->Optional.InvitationRequestInfo_IsPresent) - { - reqParam->MinimumConfigTimeout.ClientTimeout = (UCHAR)param->InvitationRequestInfo.RequestParams.ClientConfigTimeout; - reqParam->MinimumConfigTimeout.GOTimeout = (UCHAR)param->InvitationRequestInfo.RequestParams.GOConfigTimeout; - reqParam->InvitationFlags.InvitationType = TEST_FLAG(param->InvitationRequestInfo.RequestParams.InvitationFlags, BIT0); - if(param->InvitationRequestInfo.Optional.GroupBSSID_IsPresent) - { - reqParam->bUseGroupBSSID = TRUE; - cpMacAddr(reqParam->GroupBSSID, param->InvitationRequestInfo.GroupBSSID.Address); - } - if(param->InvitationRequestInfo.Optional.OperatingChannel_IsPresent) - { - reqParam->bUseSpecifiedOperatingChannel = TRUE; - reqParam->OperatingChannel.ChannelNumber = (UCHAR)param->InvitationRequestInfo.OperatingChannel.ChannelNumber; - reqParam->OperatingChannel.OperatingClass = param->InvitationRequestInfo.OperatingChannel.OperatingClass; - PlatformMoveMemory(reqParam->OperatingChannel.CountryRegionString, - param->InvitationRequestInfo.OperatingChannel.CountryOrRegionString, - sizeof(param->InvitationRequestInfo.OperatingChannel.CountryOrRegionString)); - } - cpMacAddr(reqParam->GroupID.DeviceAddress, param->InvitationRequestInfo.GroupID.DeviceAddress.Address); - reqParam->GroupID.SSID.uSSIDLength = param->InvitationRequestInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory(reqParam->GroupID.SSID.ucSSID, - param->InvitationRequestInfo.GroupID.GroupSSID.pElements, - param->InvitationRequestInfo.GroupID.GroupSSID.ElementCount); - reqParam->bLocalGO = param->InvitationRequestInfo.RequestParams.IsLocalGO; - } - - if(param->VendorIEs.ElementCount) - { - reqParam->uIEsLength = param->VendorIEs.ElementCount; - reqParam->uIEsOffset = sizeof(*reqParam); - PlatformMoveMemory((u1Byte *)reqParam + sizeof(*reqParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendPDReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *reqParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_REQUEST; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep reset req - reqParam = (DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - reqParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - reqParam->Header.Revision = DOT11_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS_REVISION_1; - reqParam->Header.Size = DOT11_SIZEOF_SEND_PROVISION_DISCOVERY_REQUEST_PARAMETERS_REVISION_1; - reqParam->DialogToken = param->RequestParams.DialogToken; - cpMacAddr(reqParam->PeerDeviceAddress, param->RequestParams.PeerDeviceAddress.Address); - reqParam->uSendTimeout = param->RequestParams.SendTimeout; - - if(param->Optional.ProvisionDiscoveryRequestInfo_IsPresent) - { - reqParam->GroupCapability = param->ProvisionDiscoveryRequestInfo.RequestParams.GroupCapability; - - if(param->ProvisionDiscoveryRequestInfo.Optional.GroupID_IsPresent) - { - cpMacAddr(reqParam->GroupID.DeviceAddress, param->ProvisionDiscoveryRequestInfo.GroupID.DeviceAddress.Address); - reqParam->GroupID.SSID.uSSIDLength = param->ProvisionDiscoveryRequestInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory(reqParam->GroupID.SSID.ucSSID, - param->ProvisionDiscoveryRequestInfo.GroupID.GroupSSID.pElements, - param->ProvisionDiscoveryRequestInfo.GroupID.GroupSSID.ElementCount); - reqParam->bUseGroupID = TRUE; - } - - if(param->ProvisionDiscoveryRequestInfo.Optional.ServiceAttributes_IsPresent) - { - // TODO: WFDS - } - - if(param->ProvisionDiscoveryRequestInfo.Optional.PersistentGroupID_IsPresent) - { - // TODO: WFDS - } - - if(param->ProvisionDiscoveryRequestInfo.Optional.ServiceSessionInfo_IsPresent) - { - // TODO: WFDS - } - } - - if(param->VendorIEs.ElementCount) - { - reqParam->uIEsLength = param->VendorIEs.ElementCount; - reqParam->uIEsOffset = sizeof(*reqParam); - PlatformMoveMemory((u1Byte *)reqParam + sizeof(*reqParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendGONegResponseOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS *rspParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_GO_NEGOTIATION_RESPONSE; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep reset req - rspParam = (DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - rspParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - rspParam->Header.Revision = DOT11_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS_REVISION_1; - rspParam->Header.Size = DOT11_SIZEOF_SEND_GO_NEGOTIATION_RESPONSE_PARAMETERS_REVISION_1; - rspParam->DialogToken = param->ResponseParams.DialogToken; - cpMacAddr(rspParam->PeerDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - rspParam->uSendTimeout = param->ResponseParams.SendTimeout; - - if(param->Optional.GONegotiationResponseInfo_IsPresent) - { - rspParam->Status = param->GONegotiationResponseInfo.ResponseParams.StatusCode; - rspParam->GroupOwnerIntent.Intent = (UCHAR)param->GONegotiationResponseInfo.ResponseParams.GOIntent; - rspParam->GroupOwnerIntent.TieBreaker = param->GONegotiationResponseInfo.ResponseParams.TieBreaker; - rspParam->MinimumConfigTimeout.ClientTimeout = (UCHAR)param->GONegotiationResponseInfo.ResponseParams.ClientConfigTimeout; - rspParam->MinimumConfigTimeout.GOTimeout = (UCHAR)param->GONegotiationResponseInfo.ResponseParams.GOConfigTimeout; - cpMacAddr(rspParam->IntendedInterfaceAddress, param->GONegotiationResponseInfo.ResponseParams.IntendedInterfaceAddress.Address); - rspParam->GroupCapability = param->GONegotiationResponseInfo.ResponseParams.GroupCapability; - - if(param->GONegotiationResponseInfo.Optional.GroupID_IsPresent) - { - cpMacAddr(rspParam->GroupID.DeviceAddress, param->GONegotiationResponseInfo.GroupID.DeviceAddress.Address); - rspParam->GroupID.SSID.uSSIDLength = param->GONegotiationResponseInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory(rspParam->GroupID.SSID.ucSSID, - param->GONegotiationResponseInfo.GroupID.GroupSSID.pElements, - param->GONegotiationResponseInfo.GroupID.GroupSSID.ElementCount); - rspParam->bUseGroupID = TRUE; - } - } - - if(param->VendorIEs.ElementCount) - { - rspParam->uIEsLength = param->VendorIEs.ElementCount; - rspParam->uIEsOffset = sizeof(*rspParam); - PlatformMoveMemory((u1Byte *)rspParam + sizeof(*rspParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendGONegConfirmOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS *rspParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRM - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_GO_NEGOTIATION_CONFIRMATION; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep reset req - rspParam = (DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - rspParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - rspParam->Header.Revision = DOT11_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS_REVISION_1; - rspParam->Header.Size = DOT11_SIZEOF_SEND_GO_NEGOTIATION_CONFIRMATION_PARAMETERS_REVISION_1; - rspParam->DialogToken = param->ResponseParams.DialogToken; - cpMacAddr(rspParam->PeerDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - rspParam->uSendTimeout = param->ResponseParams.SendTimeout; - - if(param->Optional.GONegotiationConfirmationInfo_IsPresent) - { - rspParam->Status = param->GONegotiationConfirmationInfo.ConfirmationParams.StatusCode; - rspParam->GroupCapability = param->GONegotiationConfirmationInfo.ConfirmationParams.GroupCapability; - - if(param->GONegotiationConfirmationInfo.Optional.GroupID_IsPresent) - { - cpMacAddr(rspParam->GroupID.DeviceAddress, param->GONegotiationConfirmationInfo.GroupID.DeviceAddress.Address); - rspParam->GroupID.SSID.uSSIDLength = param->GONegotiationConfirmationInfo.GroupID.GroupSSID.ElementCount; - PlatformMoveMemory(rspParam->GroupID.SSID.ucSSID, - param->GONegotiationConfirmationInfo.GroupID.GroupSSID.pElements, - param->GONegotiationConfirmationInfo.GroupID.GroupSSID.ElementCount); - rspParam->bUseGroupID = TRUE; - } - } - - if(param->VendorIEs.ElementCount) - { - rspParam->uIEsLength = param->VendorIEs.ElementCount; - rspParam->uIEsOffset = sizeof(*rspParam); - PlatformMoveMemory((u1Byte *)rspParam + sizeof(*rspParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendInvitationRspOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_INVITATION_RESPONSE_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_INVITATION_RESPONSE_PARAMETERS *rspParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SEND_INVITATION_RESPONSE - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_INVITATION_RESPONSE; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_INVITATION_RESPONSE_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - rspParam = (DOT11_SEND_INVITATION_RESPONSE_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - rspParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - rspParam->Header.Revision = DOT11_SEND_INVITATION_RESPONSE_PARAMETERS_REVISION_1; - rspParam->Header.Size = DOT11_SIZEOF_SEND_INVITATION_RESPONSE_PARAMETERS_REVISION_1; - cpMacAddr(rspParam->ReceiverDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - rspParam->DialogToken = param->ResponseParams.DialogToken; - rspParam->RequestContext = NULL; - rspParam->uSendTimeout = param->ResponseParams.SendTimeout; - - if(param->Optional.InvitationResponseInfo_IsPresent) - { - rspParam->Status = param->InvitationResponseInfo.ResponseParams.StatusCode; - rspParam->MinimumConfigTimeout.ClientTimeout = (UCHAR)param->InvitationResponseInfo.ResponseParams.ClientConfigTimeout; - rspParam->MinimumConfigTimeout.GOTimeout = (UCHAR)param->InvitationResponseInfo.ResponseParams.GOConfigTimeout; - - if(param->InvitationResponseInfo.Optional.GroupBSSID_IsPresent) - { - cpMacAddr(rspParam->GroupBSSID, param->InvitationResponseInfo.GroupBSSID.Address); - rspParam->bUseGroupBSSID = TRUE; - } - - if(param->InvitationResponseInfo.Optional.OperatingChannel_IsPresent) - { - rspParam->bUseSpecifiedOperatingChannel = TRUE; - rspParam->OperatingChannel.ChannelNumber = (UCHAR)param->InvitationResponseInfo.OperatingChannel.ChannelNumber; - rspParam->OperatingChannel.OperatingClass = param->InvitationResponseInfo.OperatingChannel.OperatingClass; - PlatformMoveMemory(rspParam->OperatingChannel.CountryRegionString, - param->InvitationResponseInfo.OperatingChannel.CountryOrRegionString, - sizeof(param->InvitationResponseInfo.OperatingChannel.CountryOrRegionString)); - } - } - - if(param->VendorIEs.ElementCount) - { - rspParam->uIEsLength = param->VendorIEs.ElementCount; - rspParam->uIEsOffset = sizeof(*rspParam); - PlatformMoveMemory((u1Byte *)rspParam + sizeof(*rspParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendPDRspOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS *rspParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N63C_SET_OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE - // Note: assume sizeof DOT11_RESET_REQUEST > DOT11_STATUS_INDICATION - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WFD_SEND_PROVISION_DISCOVERY_RESPONSE; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep reset req, ignore resetReq->dot11MacAddress here - rspParam = (DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS *)req->DATA.SET_INFORMATION.InformationBuffer; - rspParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - rspParam->Header.Revision = DOT11_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS_REVISION_1; - rspParam->Header.Size = DOT11_SIZEOF_SEND_PROVISION_DISCOVERY_RESPONSE_PARAMETERS_REVISION_1; - cpMacAddr(rspParam->ReceiverDeviceAddress, param->ResponseParams.PeerDeviceAddress.Address); - rspParam->DialogToken = param->ResponseParams.DialogToken; - rspParam->RequestContext = NULL; - rspParam->uSendTimeout = param->ResponseParams.SendTimeout; - - if(param->VendorIEs.ElementCount) - { - rspParam->uIEsLength = param->VendorIEs.ElementCount; - rspParam->uIEsOffset = sizeof(*rspParam); - PlatformMoveMemory((u1Byte *)rspParam + sizeof(*rspParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocIncomingAssociationDecisionOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE_PARAMETERS *param - ) -{ - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(DOT11_INCOMING_ASSOC_DECISION_V2) + param->VendorIEs.ElementCount// the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - DOT11_INCOMING_ASSOC_DECISION_V2 *xlatdParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - // Fill in minimum info required by N62C_SET_OID_DOT11_INCOMING_ASSOCIATION_DECISION - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId((WDI_MESSAGE_HEADER *)hTask->pInputBuffer); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_INCOMING_ASSOCIATION_DECISION; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(*xlatdParam); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - xlatdParam = (DOT11_INCOMING_ASSOC_DECISION_V2 *)req->DATA.SET_INFORMATION.InformationBuffer; - xlatdParam->Header.Type = NDIS_OBJECT_TYPE_DEFAULT; - xlatdParam->Header.Revision = DOT11_INCOMING_ASSOC_DECISION_REVISION_2; - xlatdParam->Header.Size = DOT11_SIZEOF_INCOMING_ASSOC_DECISION_REVISION_2; - cpMacAddr(xlatdParam->PeerMacAddr, param->IncomingRequestInfo.AssocRequestParams.PeerMacAddress.Address); - xlatdParam->bAccept = (0 != param->AssocResponseParameters.AcceptRequest); - xlatdParam->usReasonCode = param->AssocResponseParameters.ReasonCode; - if(param->VendorIEs.ElementCount) - { - xlatdParam->uAssocResponseIEsLength = param->VendorIEs.ElementCount; - xlatdParam->uAssocResponseIEsOffset = sizeof(*xlatdParam); - PlatformMoveMemory((u1Byte *)xlatdParam + sizeof(*xlatdParam), - param->VendorIEs.pElements, - param->VendorIEs.ElementCount); - } - - return req; -} - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocWpsEnabledOid( - IN RT_OID_HANDLER *hTask, - IN WDI_SET_P2P_WPS_ENABLED_PARAMETERS *param - ) -{ - WDI_MESSAGE_HEADER *wdiHdr = (WDI_MESSAGE_HEADER *)hTask->pNdisRequest->DATA.METHOD_INFORMATION.InformationBuffer; - - u1Byte *buf = NULL; - NDIS_OID_REQUEST *req = NULL; - WDI_TASK_PARAM *taskParam = NULL; - UINT allocSize = sizeof(NDIS_OID_REQUEST) // the NDIS REQUEST - + sizeof(BOOLEAN) // the input buffer - + sizeof(WDI_TASK_PARAM) - ; - - // Ref N62C_SET_OID_DOT11_WPS_ENABLED - - BOOLEAN *xlatdParam = NULL; - - if(!wdi_xlat_Zalloc(&buf, allocSize)) - return NULL; - - req = (NDIS_OID_REQUEST *)buf; - taskParam = wdi_xlat_ParamConstructor(buf, hTask, allocSize); - WDI_XLAT_SET_OID_MP_RSVD_0(req, taskParam); - - req->RequestType = NdisRequestSetInformation; - req->PortNumber = wdi_xlat_PortId(wdiHdr); - req->DATA.METHOD_INFORMATION.Oid = OID_DOT11_WPS_ENABLED; - req->DATA.METHOD_INFORMATION.InformationBuffer = buf + sizeof(*req); - req->DATA.METHOD_INFORMATION.InputBufferLength = sizeof(*xlatdParam); - req->DATA.METHOD_INFORMATION.OutputBufferLength = 0; - - // Prep req - xlatdParam = (BOOLEAN *)req->DATA.SET_INFORMATION.InformationBuffer; - *xlatdParam = param->WPSEnabled ? TRUE : FALSE; - - return req; -} - diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.h b/network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.h deleted file mode 100644 index de26d16b..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_Xlat.h +++ /dev/null @@ -1,184 +0,0 @@ -//////////////////////////////////////////////////////////////////////////////// -// -// File name: WDI_Xlat.h -// Description: -// -// Author: haich -// -//////////////////////////////////////////////////////////////////////////////// -#ifndef __INC_WDI_XLAT_H -#define __INC_WDI_XLAT_H - -#define WDI_XLAT_GET_OID_MP_RSVD_0(__req) ( (*(VOID **)((__req)->MiniportReserved)) ) -#define WDI_XLAT_GET_OID_MP_RSVD_1(__req) ( (*(VOID **)((__req)->MiniportReserved + sizeof(VOID *))) ) - -#define WDI_XLAT_SET_OID_MP_RSVD_0(__req, __p) ( *(VOID **)((__req)->MiniportReserved) = (__p) ) -#define WDI_XLAT_SET_OID_MP_RSVD_1(__req, __p) ( *(VOID **)((__req)->MiniportReserved + sizeof(VOID *)) = (__p) ) - -//----------------------------------------------------------------------------- -// Data -//----------------------------------------------------------------------------- - -typedef struct _WDI_TASK_PARAM -{ - RT_OID_HANDLER *hTask; - UINT allocSize; -}WDI_TASK_PARAM; - -//----------------------------------------------------------------------------- -// Function -//----------------------------------------------------------------------------- -DOT11_AUTH_ALGORITHM -Wdi_Xlat_AuthMode( - IN WDI_AUTH_ALGORITHM algo - ); - -DOT11_CIPHER_ALGORITHM -Wdi_Xlat_CipherAlgo( - IN WDI_CIPHER_ALGORITHM algo - ); - -VOID -Wdi_Xlat_FreeOid( - IN NDIS_OID_REQUEST *req - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocCreateMacOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_CREATE_PORT_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocDeleteMacOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_DELETE_PORT_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocStartApReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_START_AP_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSetDesiredSsidListOid( - IN RT_OID_HANDLER *hTask, - IN WDI_SSID *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocResetOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_DOT11_RESET_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocChangeOpModeOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_CHANGE_OPERATION_MODE_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocWfdDiscoverOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_DISCOVER_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocDevInfoOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_DEVICE_INFO_CONTAINER *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocDevCapOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_DEVICE_CAPABILITY_CONTAINER *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocGrpCapOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_GROUP_OWNER_CAPABILITY_CONTAINER *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSecDevTypeOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_SECONDARY_DEVICE_TYPE_CONTAINER *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocListenStateDiscoverabilityOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_LISTEN_STATE_CONTAINER *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocListenChannelOid( - IN RT_OID_HANDLER *hTask, - IN WDI_P2P_CHANNEL_CONTAINER *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocGetDialogTokenOid( - IN RT_OID_HANDLER *hTask, - IN WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendGONegReqReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendInvitationReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendPDReqOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendGONegResponseOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendGONegConfirmOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendInvitationRspOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocSendPDRspOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocIncomingAssociationDecisionOid( - IN RT_OID_HANDLER *hTask, - IN WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE_PARAMETERS *param - ); - -NDIS_OID_REQUEST * -Wdi_Xlat_AllocWpsEnabledOid( - IN RT_OID_HANDLER *hTask, - IN WDI_SET_P2P_WPS_ENABLED_PARAMETERS *param - ); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/WDI_def.h b/network/wlan/WDI/PLATFORM/NDIS6/WDI_def.h deleted file mode 100644 index 53973b19..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/WDI_def.h +++ /dev/null @@ -1,253 +0,0 @@ -#ifndef __INC_WDI_DEF_H -#define __INC_WDI_DEF_H - - -#define RT_CMD_ENTRY_STRING_SIZE 80 - -typedef enum __RT_COMMAND_ENTRY_TYPE -{ - RT_CMD_ENTRY_TYPE_NONE, - RT_CMD_ENTRY_TYPE_TASK, - RT_CMD_ENTRY_TYPE_PROPERTY, -}RT_COMMAND_ENTRY_TYPE; - - -typedef struct __RT_COMMAND_ENTRY -{ - RT_COMMAND_ENTRY_TYPE Type; - u4Byte Oid; - char szID[RT_CMD_ENTRY_STRING_SIZE]; // The string name of this command - BOOLEAN bAdapterObject; // Refer WDI spec TASK COMMANDS and PROPTERTY COMMANDS - - // func ptr to the tlv parser, set to NULL if not supported - NDIS_STATUS (__stdcall *TlvParser)( - _In_ ULONG BufferLength, - _In_reads_bytes_( BufferLength ) UINT8 const * pBuffer, - _In_ PCTLV_CONTEXT Context, - _Out_opt_ VOID *pParsedMessage - ); - - // func ptr to the tlv cleaner, shall be provided if TlvParser is specified - void (__stdcall *TlvCleaner)( - _In_ VOID *pParsedMessage - ); - - // 'sizeof' of the parsed tlv structure, shall be provided if TlvParser is specified - size_t parsedTlvSize; -}RT_COMMAND_ENTRY; - -typedef union __RT_PARSED_TLV -{ - // general reference - VOID *param; - - // task - WDI_TASK_OPEN_PARAMETERS *paramOpen; - WDI_TASK_CLOSE_PARAMETERS *paramClose; - WDI_SCAN_PARAMETERS *paramScan; - WDI_TASK_P2P_DISCOVER_PARAMETERS *paramP2pDiscover; - WDI_TASK_CONNECT_PARAMETERS *paramConnect; - WDI_TASK_DOT11_RESET_PARAMETERS *paramDot11Reset; - WDI_TASK_DISCONNECT_PARAMETERS *paramDisconnect; - WDI_TASK_P2P_SEND_REQUEST_ACTION_FRAME_PARAMETERS *paramP2pSendRequestActionFrame; - WDI_TASK_P2P_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *paramP2pSendResponseActionFrame; - WDI_SET_RADIO_STATE_PARAMETERS *paramSetRadioState; - WDI_TASK_CREATE_PORT_PARAMETERS *paramCreatePort; - WDI_TASK_DELETE_PORT_PARAMETERS *paramDeletePort; - WDI_TASK_START_AP_PARAMETERS *paramStartAp; - WDI_TASK_STOP_AP_PARAMETERS *paramStopAp; - WDI_TASK_SEND_AP_ASSOCIATION_RESPONSE_PARAMETERS *paramSendApAssociationResponse; - WDI_TASK_CHANGE_OPERATION_MODE_PARAMETERS *paramChangeOperationMode; - WDI_TASK_ROAM_PARAMETERS *paramRoam; - WDI_TASK_SEND_REQUEST_ACTION_FRAME_PARAMETERS *paramSendRequestActionFrame; - WDI_TASK_SEND_RESPONSE_ACTION_FRAME_PARAMETERS *paramSendResponseActionFrame; - - // property - WDI_SET_P2P_LISTEN_STATE_PARAMETERS *paramSetP2pListenState; - // OID_WDI_SET_P2P_ADDITIONAL_IE, does not have corresp. structure - WDI_SET_ADD_CIPHER_KEYS_PARAMETERS *paramSetAddCipherKeys; - WDI_SET_DELETE_CIPHER_KEYS_PARAMETERS *paramSetDeleteDefaultCipherKeys; - WDI_SET_DEFAULT_KEY_ID_PARAMETERS *paramSetDefaultKeyId; - WDI_SET_CONNECTION_QUALITY_PARAMETERS *paramSetConnectionQuality; - WDI_GET_AUTO_POWER_SAVE_PARAMETERS *paramGetAutoPowerSave; - WDI_GET_STATISTICS_PARAMETERS *paramGetStatistics; - WDI_SET_RECEIVE_PACKET_FILTER_PARAMETERS *paramSetReceivePacketFilter; - WDI_GET_ADAPTER_CAPABILITIES_PARAMETERS *paramGetAdapterCapabilities; - WDI_NETWORK_LIST_OFFLOAD_PARAMETERS *paramNetworkListOffload; - WDI_SET_RECEIVE_COALESCING_PARAMETERS *paramSetReceiveCoalescing; - WDI_SET_PRIVACY_EXEMPTION_LIST_PARAMETERS *paramSetPrivacyExemptionList; - WDI_SET_POWER_PARAMETERS *paramSetPower; - WDI_TASK_ABORT_PARAMETERS *paramAbort; - WDI_SET_ADD_WOL_PATTERN_PARAMETERS *paramSetAddWolPattern; - WDI_SET_REMOVE_WOL_PATTERN_PARAMETERS *paramSetRemoveWolPattern; - WDI_SET_MULTICAST_LIST_PARAMETERS *paramSetMulticastList; - WDI_SET_ADD_PM_PROTOCOL_OFFLOAD_PARAMETERS_PARAMETERS *paramSetAddProtocolOffload; - WDI_SET_REMOVE_PM_PROTOCOL_OFFLOAD_PARAMETERS *paramSetRemoveProtocolOffload; - WDI_SET_FIRMWARE_CONFIGURATION_PARAMETERS *paramSetFirmwareConfiguration; - WDI_GET_RECEIVE_COALESCING_MATCH_COUNT_INPUTS *paramGetReceiveColescingMatchCountInput; - WDI_SET_ADVERTISEMENT_INFORMATION_PARAMETERS *paramSetAdvertisementInformation; - WDI_IHV_REQUEST_PARAMETERS *paramIhvRequest; - WDI_GET_NEXT_ACTION_FRAME_DIALOG_TOKEN_INPUTS *paramGetNextActionFrameDialogTokenInputs; - WDI_SET_P2P_WPS_ENABLED_PARAMETERS *paramSetP2pWpsEnabled; - WDI_GET_BSS_ENTRY_LIST_UPDATE_PARAMETERS *paramGetBSSEntryListUpdate; - WDI_SET_FAST_BSS_TRANSITION_PARAMETERS_COMMAND *paramSetFastBssTransitionParametersCommand; -}RT_PARSED_TLV; - -typedef struct __RT_TLV_PARSER -{ - // dbg info - size_t nonCleanedup; - - // buffer - u1Byte *buf; - size_t bufSize; - - // parsed tlv - RT_PARSED_TLV parsedTlv; -}RT_TLV_PARSER; - -typedef struct _RT_OID_HANDLER -{ - // Associate which NdisRequest to process - PNDIS_OID_REQUEST pNdisRequest; - - // For task command, NdisRequest is returned with NDIS_STATUS_SUCCESS - // So copy the content of NdisRequest - NDIS_OID_REQUEST PendedRequest; - - // InformationBuffer of NdisRequest, length is stored in NdisRequest - pu1Byte pInputBuffer; - - ULONG AllocatedBufferLength; - - // Output length of this NdisRequest - ULONG OutputBufferLength; - - // Keep current handler's status - u1Byte Status; - - // Protection of status - NDIS_SPIN_LOCK Lock; - - // Record Oid start/returned/complete time - u8Byte OidStartTime; - u8Byte OidExecutionTime; - u8Byte OidReturnTime; - - // Event to notify there is a pending NdisRequest waiting for process - NDIS_EVENT PendingEvent; - - // Event to notify completion of NdisRequest - NDIS_EVENT CompleteEvent; - - // Associated command entry - RT_COMMAND_ENTRY *CmdEntry; - - // Parsed TLV structure - RT_TLV_PARSER tlvParser; - - // Oid returned status - NDIS_STATUS OidStatus; - - RT_WORK_ITEM WDICommandWorkitem; - - VOID *pvCtx; -}RT_OID_HANDLER, *PRT_OID_HANDLER; - -typedef struct __RT_TASK_ENTRY -{ - RT_COMMAND_ENTRY super; - - NDIS_STATUS StatusCode; - BOOLEAN bWaitComplete; - u1Byte TimeoutSec; - - NDIS_STATUS (*Func)( // The command handler function - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - - NDIS_STATUS (*AbortFunc)( - IN PADAPTER pAdapter - ); - - NDIS_STATUS (*TimeoutFunc)( - IN PADAPTER pAdapter - ); - - NDIS_STATUS (*PreM4Cb)( - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - - NDIS_STATUS (*PostM4Cb)( - IN PADAPTER pAdapter, - IN PVOID pContext - ); - -}RT_TASK_ENTRY, *PRT_TASK_ENTRY; - - -typedef struct __RT_PROPERTY_ENTRY -{ - RT_COMMAND_ENTRY super; - - NDIS_STATUS (*Func)( // The command handler function - IN PADAPTER pAdapter, - IN PRT_OID_HANDLER pOidHandle - ); - -}RT_PROPERTY_ENTRY, *PRT_PROPERTY_ENTRY; - - -typedef struct __RT_COMPLETE_ENTRY -{ - RT_LIST_ENTRY List; - u4Byte Oid; - u4Byte TransactionId; - u2Byte PortId; -}RT_COMPLETE_ENTRY, *PRT_COMPLETE_ENTRY; - - -//-------------------------------------------------------------------- -// -// Here we define required format for WDI -// -//-------------------------------------------------------------------- - -typedef struct _WDI_DATA_STRUCT -{ - NDIS_HANDLE DataPathHandle; - NDIS_WDI_DATA_API WdiDataApi; - PNDIS_WDI_INIT_PARAMETERS pWdiInitParameters; - WDI_PORT_ID StaPortId; - RT_THREAD TaskThread; - RT_THREAD PropertyThread; - RT_OID_HANDLER TaskHandle; - RT_OID_HANDLER PropertyHandle; - RT_WORK_ITEM TaskWorkItem; - RT_WORK_ITEM PropertyWorkItem; - PVOID LatestScanRequestId; // temporary - NDIS_SPIN_LOCK TaskCompleteIndicationLock; - RT_LIST_ENTRY TaskCompleteIndicationList; - RT_COMPLETE_ENTRY CurrentTask; - TLV_CONTEXT TlvContext; - u4Byte txPauseReason; - BOOLEAN bWdiLEPLDR; // LE Hang detection and recovery, which currently is for PLDR - BOOLEAN bRFOffSwitchProgress; - RT_OID_HANDLER TaskPostHangHandle; - BOOLEAN bCommandHangHappened; - RT_LIST_ENTRY TaskPostHangCompleteIndicationList; - RT_COMPLETE_ENTRY CurrentTaskPostHang; -} WDI_DATA_STRUCT, *PWDI_DATA_STRUCT; - - -typedef struct _TLV_WDI_STRUCT -{ - u2Byte Type; - u2Byte Length; - u1Byte Value[1]; -} TLV_WDI_STRUCT, *PTLV_WDI_STRUCT; - - -#endif diff --git a/network/wlan/WDI/PLATFORM/NDIS6/new.cpp b/network/wlan/WDI/PLATFORM/NDIS6/new.cpp deleted file mode 100644 index 5b7eaf2b..00000000 --- a/network/wlan/WDI/PLATFORM/NDIS6/new.cpp +++ /dev/null @@ -1,69 +0,0 @@ -/*++ - -Copyright (c) Microsoft Corporation. All rights reserved. - - Microsoft Confidential - - THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY - KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR - PURPOSE. - -Module Name: - - new.cpp - -Abstract: - - Test only stub WDI driver (C++ portions) - -Environment: - - Kernel mode - -Author: - - ---*/ -#include "MP_Precomp.h" - -#define POOL_TAG ((ULONG) '++CS') - -void* __cdecl operator new( - size_t Size, - ULONG_PTR AllocationContext - ) -/*++ - - Override C++ allocation operator. (for use by TLV Parser/Generator) - ---*/ -{ - PVOID pData = ExAllocatePoolWithTag( NonPagedPoolNx, Size, POOL_TAG ); - - UNREFERENCED_PARAMETER( AllocationContext ); - NT_ASSERT( AllocationContext == 0 ); - - if ( pData != NULL ) - { - RtlZeroMemory( pData, Size ); - } - - return pData; -} - - -void __cdecl operator delete( - void* pData ) -/*++ - - Override C++ delete operator. (for use by TLV Parser/Generator) - ---*/ -{ - if ( pData != NULL ) - { - ExFreePoolWithTag( pData, POOL_TAG ); - } -} - diff --git a/network/wlan/WDI/PLATFORM/NdisComm/Mp_Precomp.h b/network/wlan/WDI/PLATFORM/NdisComm/Mp_Precomp.h deleted file mode 100644 index 4215bf67..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/Mp_Precomp.h +++ /dev/null @@ -1,2 +0,0 @@ -#include - diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.c b/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.c deleted file mode 100644 index 8c5f90a2..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.c +++ /dev/null @@ -1,2519 +0,0 @@ -#include "Mp_Precomp.h" - -#if WPP_SOFTWARE_TRACE -#include "NdisComm.tmh" -#endif - - -// -// Description: -// Translate RT_STATUS to Ndis Status. -// Arguments: -// [in] rtStatus - -// RT defined status. -// Return: -// NDIS_STATU_XXX -// Remark: -// This function translates some known RT status to NDIS_STATUS_XXX. -// If the input RT status is unrecognized, return NDIS_STATUS_FAILURE. -// By Bruce, 2012-03-07. -// -NDIS_STATUS -NdisStatusFromRtStatus( - IN u4Byte rtStatus - ) -{ - switch(rtStatus) - { - default: - return NDIS_STATUS_FAILURE; - - case RT_STATUS_SUCCESS: - return NDIS_STATUS_SUCCESS; - - case RT_STATUS_FAILURE: - return NDIS_STATUS_FAILURE; - - case RT_STATUS_PENDING: - return NDIS_STATUS_PENDING; - - case RT_STATUS_RESOURCE: - return NDIS_STATUS_RESOURCES; - - case RT_STATUS_INVALID_CONTEXT: - case RT_STATUS_INVALID_PARAMETER: - case RT_STATUS_MALFORMED_PKT: - return NDIS_STATUS_INVALID_DATA; - - case RT_STATUS_NOT_SUPPORT: - return NDIS_STATUS_NOT_SUPPORTED; - - case RT_STATUS_BUFFER_TOO_SHORT: - return NDIS_STATUS_BUFFER_TOO_SHORT; - - case RT_STATUS_INVALID_LENGTH: - return NDIS_STATUS_INVALID_LENGTH; - - case RT_STATUS_NOT_RECOGNIZED: - return NDIS_STATUS_NOT_RECOGNIZED; - - case RT_STATUS_MEDIA_BUSY: - return NDIS_STATUS_MEDIA_BUSY; - - case RT_STATUS_INVALID_DATA: - return NDIS_STATUS_INVALID_DATA; - } -} - - -VOID -_PlatformInitializeSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter((PADAPTER)Adapter); - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(pDefaultAdapter); - - switch(type) - { - case RT_RX_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->RxSpinLock) ); - pDefaultAdapter->bRxLocked = FALSE; - break; - - case RT_RX_CONTROL_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->RxControlSpinLock)); - break; - - case RT_RX_QUEUE_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->RxQueueSpinLock)); - break; - - case RT_TX_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->TxSpinLock) ); - pDefaultAdapter->bTxLocked = FALSE; - break; - - case RT_RM_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->RmSpinLock) ); - break; - - case RT_CAM_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->CamSpinLock) ); - break; - - case RT_SCAN_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->ScanSpinLock) ); - break; - - case RT_LOG_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->LogSpinLock) ); - break; - - case RT_BW_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->BwSpinLock) ); - break; - - case RT_CHNLOP_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->ChnlOpSpinLock) ); - break; - - case RT_RF_OPERATE_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->RFWriteSpinLock)); - break; - - case RT_INITIAL_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->InitialSpinLock)); - break; - - case RT_RF_STATE_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->RFStateSpinLock)); - break; - - case RT_PORT_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->PortLock) ); - break; - - case RT_H2C_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->H2CSpinLock)); - break; - -#if VISTA_USB_RX_REVISE - case RT_USBRX_CONTEXT_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->UsbRxContextLock) ); - break; - - case RT_USBRX_POSTPROC_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->UsbRxIndicateLock) ); - break; -#endif - - case RT_WAPI_OPTION_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->WapiOptionSpinLock)); - break; - case RT_WAPI_RX_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->WapiRxSpinLock)); - break; - - case RT_BUFFER_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->BufferSpinLock)); - break; - - case RT_GEN_TEMP_BUF_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->GenBufSpinLock)); - break; - - case RT_AWB_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->AwbSpinLock)); - break; - - case RT_FW_PS_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->FwPSSpinLock)); - break; - - case RT_HW_TIMER_SPIN_LOCK: - NdisAllocateSpinLock(&(pDevice->HwTimerSpinLock)); - break; - - case RT_P2P_SPIN_LOCK: - NdisAllocateSpinLock(&(pDevice->P2PSpinLock)); - break; - - case RT_MPT_WI_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->MptWorkItemSpinLock)); - break; - - case RT_DBG_SPIN_LOCK: - NdisAllocateSpinLock(&(pDevice->ndisDbgWorkItemSpinLock)); - break; - - case RT_IQK_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->IQKSpinLock)); - break; - - case RT_DYN_TXPWRTBL_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->DynTxPwrTblSpinLock)); - break; - - case RT_CHNLLIST_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->ChnlListSpinLock)); - break; - - case RT_PENDED_OID_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->PendedOidSpinLock)); - break; - - case RT_INDIC_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->IndicSpinLock)); - break; - - case RT_RFD_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->RfdSpinLock)); - break; - -#if DRV_LOG_REGISTRY - case RT_DRV_STATE_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->DrvStateSpinLock)); - break; -#endif - -#if (AUTO_CHNL_SEL_NHM == 1) - case RT_ACS_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->AcsSpinLock)); - break; -#endif - - case RT_RX_REF_CNT_SPINLOCK: - NdisAllocateSpinLock(&(pDevice->RxRefCntSpinLock)); - break; - - case RT_SYNC_IO_CNT_SPINLOCK: - NdisAllocateSpinLock( &(pDevice->SyncIoCntSpinLock)); - break; - - default: - break; - } -} - - -VOID -_PlatformFreeSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter((PADAPTER)Adapter); - - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(pDefaultAdapter); - - switch(type) - { - case RT_RX_SPINLOCK: - NdisFreeSpinLock( &(pDevice->RxSpinLock) ); - break; - - case RT_RX_CONTROL_SPINLOCK: - NdisFreeSpinLock( &(pDevice->RxControlSpinLock)); - break; - - case RT_RX_QUEUE_SPINLOCK: - NdisFreeSpinLock( &(pDevice->RxQueueSpinLock)); - break; - - case RT_TX_SPINLOCK: - NdisFreeSpinLock( &(pDevice->TxSpinLock) ); - break; - - case RT_RM_SPINLOCK: - NdisFreeSpinLock( &(pDevice->RmSpinLock) ); - break; - - case RT_CAM_SPINLOCK: - NdisFreeSpinLock( &(pDevice->CamSpinLock) ); - break; - - case RT_SCAN_SPINLOCK: - NdisFreeSpinLock( &(pDevice->ScanSpinLock) ); - break; - - case RT_LOG_SPINLOCK: - NdisFreeSpinLock( &(pDevice->LogSpinLock) ); - break; - - case RT_BW_SPINLOCK: - NdisFreeSpinLock( &(pDevice->BwSpinLock) ); - break; - - case RT_CHNLOP_SPINLOCK: - NdisFreeSpinLock( &(pDevice->ChnlOpSpinLock) ); - break; - - case RT_RF_OPERATE_SPINLOCK: - NdisFreeSpinLock( &(pDevice->RFWriteSpinLock)); - break; - - case RT_INITIAL_SPINLOCK: - NdisFreeSpinLock( &(pDevice->InitialSpinLock)); - break; - - case RT_RF_STATE_SPINLOCK: - NdisFreeSpinLock( &(pDevice->RFStateSpinLock)); - break; - - - case RT_PORT_SPINLOCK: - NdisFreeSpinLock(&(pDevice->PortLock) ); - break; - - case RT_H2C_SPINLOCK: - NdisFreeSpinLock( &(pDevice->H2CSpinLock)); - break; - -#if VISTA_USB_RX_REVISE - case RT_USBRX_CONTEXT_SPINLOCK: - NdisFreeSpinLock( &(pDevice->UsbRxContextLock) ); - break; - - case RT_USBRX_POSTPROC_SPINLOCK: - NdisFreeSpinLock( &(pDevice->UsbRxIndicateLock) ); - break; -#endif - - case RT_WAPI_OPTION_SPINLOCK: - NdisFreeSpinLock( &(pDevice->WapiOptionSpinLock)); - break; - case RT_WAPI_RX_SPINLOCK: - NdisFreeSpinLock( &(pDevice->WapiRxSpinLock)); - break; - - case RT_BUFFER_SPINLOCK: - NdisFreeSpinLock( &(pDevice->BufferSpinLock) ); - break; - - case RT_AWB_SPINLOCK: - NdisFreeSpinLock(&(pDevice->AwbSpinLock)); - break; - - case RT_FW_PS_SPINLOCK: - NdisFreeSpinLock(&(pDevice->FwPSSpinLock)); - break; - - case RT_HW_TIMER_SPIN_LOCK: - NdisFreeSpinLock(&(pDevice->HwTimerSpinLock)); - break; - - case RT_P2P_SPIN_LOCK: - NdisFreeSpinLock(&(pDevice->P2PSpinLock)); - break; - - case RT_MPT_WI_SPINLOCK: - NdisFreeSpinLock(&(pDevice->MptWorkItemSpinLock)); - break; - - case RT_DBG_SPIN_LOCK: - NdisFreeSpinLock(&(pDevice->ndisDbgWorkItemSpinLock)); - break; - - case RT_IQK_SPINLOCK: - NdisFreeSpinLock(&(pDevice->IQKSpinLock)); - break; - - case RT_DYN_TXPWRTBL_SPINLOCK: - NdisFreeSpinLock(&(pDevice->DynTxPwrTblSpinLock)); - break; - - case RT_CHNLLIST_SPINLOCK: - NdisFreeSpinLock(&(pDevice->ChnlListSpinLock)); - break; - - case RT_PENDED_OID_SPINLOCK: - NdisFreeSpinLock( &(pDevice->PendedOidSpinLock)); - break; - case RT_RFD_SPINLOCK: - NdisFreeSpinLock(&(pDevice->RfdSpinLock)); - break; - - case RT_INDIC_SPINLOCK: - NdisFreeSpinLock(&(pDevice->IndicSpinLock)); - break; - -#if DRV_LOG_REGISTRY - case RT_DRV_STATE_SPINLOCK: - NdisFreeSpinLock(&(pDevice->DrvStateSpinLock)); - break; -#endif - -#if (AUTO_CHNL_SEL_NHM == 1) - case RT_ACS_SPINLOCK: - NdisFreeSpinLock(&(pDevice->AcsSpinLock)); - break; -#endif - -case RT_RX_REF_CNT_SPINLOCK: - NdisFreeSpinLock(&(pDevice->RxRefCntSpinLock)); - break; - - case RT_SYNC_IO_CNT_SPINLOCK: - NdisFreeSpinLock( &(pDevice->SyncIoCntSpinLock)); - break; - - default: - break; - } -} - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -_IRQL_raises_(DISPATCH_LEVEL) -VOID -_PlatformAcquireSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter((PADAPTER)Adapter); - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(pDefaultAdapter); - - switch(type) - { - case RT_RX_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->RxSpinLock) ); - pDefaultAdapter->bRxLocked = TRUE; - break; - - case RT_RX_CONTROL_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->RxControlSpinLock)); - break; - - case RT_RX_QUEUE_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->RxQueueSpinLock)); - break; - - case RT_TX_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->TxSpinLock) ); - pDefaultAdapter->bTxLocked = TRUE; - break; - - case RT_RM_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->RmSpinLock) ); - break; - - case RT_CAM_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->CamSpinLock) ); - break; - - case RT_SCAN_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->ScanSpinLock) ); - break; - - case RT_LOG_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->LogSpinLock) ); - break; - - case RT_BW_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->BwSpinLock) ); - break; - - case RT_CHNLOP_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->ChnlOpSpinLock) ); - break; - - case RT_RF_OPERATE_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->RFWriteSpinLock)); - break; - - case RT_INITIAL_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->InitialSpinLock)); - break; - - case RT_RF_STATE_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->RFStateSpinLock)); - break; - - - case RT_PORT_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->PortLock) ); - break; - - case RT_H2C_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->H2CSpinLock) ); - break; - -#if VISTA_USB_RX_REVISE - case RT_USBRX_CONTEXT_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->UsbRxContextLock) ); - break; - - case RT_USBRX_POSTPROC_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->UsbRxIndicateLock) ); - break; -#endif - - case RT_WAPI_OPTION_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->WapiOptionSpinLock)); - break; - case RT_WAPI_RX_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->WapiRxSpinLock)); - break; - - case RT_BUFFER_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->BufferSpinLock) ); - break; - - case RT_GEN_TEMP_BUF_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->GenBufSpinLock)); - break; - - case RT_AWB_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->AwbSpinLock)); - break; - - case RT_FW_PS_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->FwPSSpinLock)); - break; - - case RT_HW_TIMER_SPIN_LOCK: - NdisAcquireSpinLock(&(pDevice->HwTimerSpinLock)); - break; - - case RT_P2P_SPIN_LOCK: - NdisAcquireSpinLock(&(pDevice->P2PSpinLock)); - break; - - case RT_MPT_WI_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->MptWorkItemSpinLock)); - break; - - case RT_DBG_SPIN_LOCK: - NdisAcquireSpinLock(&(pDevice->ndisDbgWorkItemSpinLock)); - break; - - case RT_IQK_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->IQKSpinLock)); - break; - - case RT_DYN_TXPWRTBL_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->DynTxPwrTblSpinLock)); - break; - - case RT_CHNLLIST_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->ChnlListSpinLock)); - break; - - case RT_PENDED_OID_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->PendedOidSpinLock)); - break; - - case RT_INDIC_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->IndicSpinLock)); - break; - - case RT_RFD_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->RfdSpinLock)); - break; - -#if DRV_LOG_REGISTRY - case RT_DRV_STATE_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->DrvStateSpinLock)); - break; -#endif - -#if (AUTO_CHNL_SEL_NHM == 1) - case RT_ACS_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->AcsSpinLock)); - break; -#endif - - case RT_RX_REF_CNT_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->RxRefCntSpinLock)); - break; - - case RT_SYNC_IO_CNT_SPINLOCK: - NdisAcquireSpinLock( &(pDevice->SyncIoCntSpinLock)); - break; - - - case RT_CUSTOM_SCAN_SPINLOCK: - NdisAcquireSpinLock(&(pDevice->CustomScanSpinLock)); - break; - - default: - break; - } -} - -#pragma warning( disable: 28167 ) // Prefast says we don't annotated the change. -_IRQL_requires_(DISPATCH_LEVEL) -VOID -_PlatformReleaseSpinLock( - PVOID Adapter, - RT_SPINLOCK_TYPE type - ) -{ - PADAPTER pDefaultAdapter = GetDefaultAdapter((PADAPTER)Adapter); - PNDIS_ADAPTER_TYPE pDevice = GET_NDIS_ADAPTER(pDefaultAdapter); - - switch(type) - { - case RT_RX_SPINLOCK: - pDefaultAdapter->bRxLocked = FALSE; - NdisReleaseSpinLock( &(pDevice->RxSpinLock) ); - break; - - case RT_RX_CONTROL_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->RxControlSpinLock)); - break; - - case RT_RX_QUEUE_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->RxQueueSpinLock)); - break; - - case RT_TX_SPINLOCK: - pDefaultAdapter->bTxLocked = FALSE; - NdisReleaseSpinLock( &(pDevice->TxSpinLock) ); - break; - - case RT_RM_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->RmSpinLock) ); - break; - - case RT_CAM_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->CamSpinLock) ); - break; - - case RT_SCAN_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->ScanSpinLock) ); - break; - - case RT_LOG_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->LogSpinLock) ); - break; - - case RT_BW_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->BwSpinLock) ); - break; - - case RT_CHNLOP_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->ChnlOpSpinLock) ); - break; - - case RT_RF_OPERATE_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->RFWriteSpinLock)); - break; - - case RT_INITIAL_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->InitialSpinLock)); - break; - - case RT_RF_STATE_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->RFStateSpinLock)); - break; - - - case RT_PORT_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->PortLock) ); - break; - - case RT_H2C_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->H2CSpinLock)); - break; - -#if VISTA_USB_RX_REVISE - case RT_USBRX_CONTEXT_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->UsbRxContextLock) ); - break; - - case RT_USBRX_POSTPROC_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->UsbRxIndicateLock) ); - break; -#endif - - case RT_WAPI_OPTION_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->WapiOptionSpinLock)); - break; - case RT_WAPI_RX_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->WapiRxSpinLock)); - break; - - case RT_BUFFER_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->BufferSpinLock) ); - break; - - case RT_GEN_TEMP_BUF_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->GenBufSpinLock)); - break; - - case RT_AWB_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->AwbSpinLock)); - break; - - case RT_FW_PS_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->FwPSSpinLock)); - break; - - case RT_HW_TIMER_SPIN_LOCK: - NdisReleaseSpinLock(&(pDevice->HwTimerSpinLock)); - break; - - case RT_P2P_SPIN_LOCK: - NdisReleaseSpinLock(&(pDevice->P2PSpinLock)); - break; - - case RT_MPT_WI_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->MptWorkItemSpinLock)); - break; - - case RT_DBG_SPIN_LOCK: - NdisReleaseSpinLock(&(pDevice->ndisDbgWorkItemSpinLock)); - break; - - case RT_IQK_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->IQKSpinLock)); - break; - - case RT_DYN_TXPWRTBL_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->DynTxPwrTblSpinLock)); - break; - - case RT_CHNLLIST_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->ChnlListSpinLock)); - break; - - case RT_PENDED_OID_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->PendedOidSpinLock)); - break; - - case RT_RFD_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->RfdSpinLock)); - break; - - case RT_INDIC_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->IndicSpinLock)); - break; - -#if DRV_LOG_REGISTRY - case RT_DRV_STATE_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->DrvStateSpinLock)); - break; -#endif - -#if (AUTO_CHNL_SEL_NHM == 1) - case RT_ACS_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->AcsSpinLock)); - break; -#endif - - case RT_RX_REF_CNT_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->RxRefCntSpinLock)); - break; - - case RT_SYNC_IO_CNT_SPINLOCK: - NdisReleaseSpinLock( &(pDevice->SyncIoCntSpinLock)); - break; - - - case RT_CUSTOM_SCAN_SPINLOCK: - NdisReleaseSpinLock(&(pDevice->CustomScanSpinLock)); - break; - - default: - break; - } -} - -u4Byte -PlatformAtomicExchange( - pu4Byte target, - u4Byte value - ) -{ - return InterlockedExchange(target, value); -} - -// 20100211 Joseph: Since there is no support to InterlockedAnd() and InterlockedOr() function for XP platform, -// we just implement the same function as DDK does. -u4Byte -PlatformAtomicAnd( - pu1Byte target, - u1Byte value - ) -{ - u4Byte i, j; - u4Byte tmp = (0xffffff00|value); - - j = *target; - do { - i = j; - j = InterlockedCompareExchange((pu4Byte)target, (i&tmp), i); - } while (i != j); - - return j; -} - -// 20100211 Joseph: Since there is no support to InterlockedAnd() and InterlockedOr() function for XP platform, -// we just implement the same function as DDK does. -u4Byte -PlatformAtomicOr( - pu1Byte target, - u1Byte value - ) -{ - u4Byte i, j; - u4Byte tmp = (0x00000000|value); - - j = *target; - do { - i = j; - j = InterlockedCompareExchange((pu4Byte)target, (i|tmp), i); - } while (i != j); - - return j; -} - - -VOID -PlatformInitializeMutex( - IN PPlatformMutex Mutex - ) -{ - KeInitializeMutex(Mutex, 0); -} - -VOID -PlatformAcquireMutex( - IN PPlatformMutex Mutex - ) -{ - LARGE_INTEGER lTimeout; - - if (KeGetCurrentIrql() == DISPATCH_LEVEL) - { - lTimeout.QuadPart = 0; - KeWaitForMutexObject(Mutex, Executive, KernelMode, FALSE, &lTimeout); - } - else - KeWaitForMutexObject(Mutex, Executive, KernelMode, FALSE, NULL); -} - - -VOID -PlatformReleaseMutex( - IN PPlatformMutex Mutex - ) -{ - KeReleaseMutex(Mutex, FALSE); -} - -VOID -PlatformCriticalSectionEnter( - IN PADAPTER pAdapter, - IN PPlatformMutex Mutex, - IN RT_SPINLOCK_TYPE Spinlock - ) -{ - PlatformAcquireMutex(Mutex); -} - -VOID -PlatformCriticalSectionLeave( - IN PADAPTER pAdapter, - IN PPlatformMutex Mutex, - IN RT_SPINLOCK_TYPE Spinlock - ) -{ - PlatformReleaseMutex(Mutex); -} - - - -//========================================================================= -// -// Get the unused instance index, if there is no index found, return 0xff -// -//========================================================================= - - -u8Byte -PlatformDivision64( - IN u8Byte x, - IN u8Byte y -) -{ - return ((x) / (y)); -} - -u8Byte -PlatformModular64( - IN u8Byte x, - IN u8Byte y -) -{ - return ((x) % (y)); -} - -//========================================================================== -//Platform function about Thread Create and Free -//========================================================================== - -VOID -Ndis6EventTrigerThreadCallback( - IN PVOID pContext - ) -{ - PRT_THREAD pRtThread = (PRT_THREAD)pContext; - PADAPTER Adapter = ((PRT_THREAD)pContext)->Adapter; - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return; - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_CANCEL) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("Ndis6EventTrigerThreadCallback CANCEL! \n")); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - goto Exit; - } - pRtThread->Status |=RT_THREAD_STATUS_FIRED; - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - while(!RT_DRIVER_STOP(Adapter)) - { - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - if(pRtThread->Status & RT_THREAD_STATUS_CANCEL) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - break; - } - else - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - if(NdisWaitEvent(&pPlatformExt->TrigerEvent, pPlatformExt->Period)) - { - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - NdisResetEvent(&(pPlatformExt->TrigerEvent)); - - if(pRtThread->Status & RT_THREAD_STATUS_CANCEL) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - break; - } - else - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - pRtThread->CallbackFunc(pRtThread); - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->ScheduleCnt++; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - } - } - -Exit: - - if(pRtThread->PreTheradExitCb != NULL) - { - pRtThread->PreTheradExitCb(pRtThread); - } - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->RefCnt--; - pRtThread->Status &= ~RT_THREAD_STATUS_FIRED; - pRtThread->Status &= ~RT_THREAD_STATUS_SET; - NdisSetEvent(&(pPlatformExt->CompleteEvent)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - if(Adapter->bSWInitReady) - { - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - - pNdisCommon->OutStandingThreadCnt--; - - // - // Check if driver is waiting us to unload. - // - if(pNdisCommon->OutStandingThreadCnt == 0) - { - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - NdisSetEvent(&(pNdisCommon->AllThreadCompletedEvent)); - } - else - { - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - } - } - - PsTerminateSystemThread(STATUS_SUCCESS);// terminate the thread. - -} - -VOID -Ndis6ThreadCallback( - IN PVOID pContext - ) -{ - PRT_THREAD pRtThread = (PRT_THREAD)pContext; - PADAPTER Adapter = ((PRT_THREAD)pContext)->Adapter; - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return; - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_CANCEL) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - goto Exit; - } - pRtThread->Status |=RT_THREAD_STATUS_FIRED; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - - if(!RT_DRIVER_STOP(Adapter)) - { - - pRtThread->CallbackFunc(pRtThread); - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->ScheduleCnt++; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - } - -Exit: - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->RefCnt--; - pRtThread->Status &= ~RT_THREAD_STATUS_FIRED; - pRtThread->Status &= ~RT_THREAD_STATUS_SET; - NdisSetEvent(&(pPlatformExt->CompleteEvent)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - pNdisCommon->OutStandingThreadCnt--; - - // - // Check if driver is waiting us to unload. - // - if(pNdisCommon->OutStandingThreadCnt == 0) - { - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - NdisSetEvent(&(pNdisCommon->AllThreadCompletedEvent)); - } - else - { - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - } - - PsTerminateSystemThread(STATUS_SUCCESS);// terminate the thread. -} - -RT_STATUS -PlatformInitializeThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_CALL_BACK CallBackFunc, - IN const char* szID, - IN BOOLEAN EventTriger, - IN u4Byte Period, - IN PVOID pContext - ) -{ - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt =NULL; - RT_STATUS status = RT_STATUS_SUCCESS; - - - pRtThread->pPlatformExt = NULL; - status = PlatformAllocateMemory(Adapter, (PVOID*)(&pPlatformExt), sizeof(RT_THREAD_PLATFORM_EXT) ); - if (status != RT_STATUS_SUCCESS) - { - RT_TRACE(COMP_DBG, DBG_SERIOUS, ("PlatformInitializeThread(): failed to allocate memory: %s\n", szID)); - return RT_STATUS_RESOURCE; - } - PlatformZeroMemory( pPlatformExt, sizeof(RT_THREAD_PLATFORM_EXT) ); - pRtThread->pPlatformExt = pPlatformExt; - - - NdisAllocateSpinLock(&(pPlatformExt->Lock)); - NdisInitializeEvent(&(pPlatformExt->CompleteEvent)); - NdisSetEvent(&(pPlatformExt->CompleteEvent)); - NdisInitializeEvent(&(pPlatformExt->TrigerEvent)); - - NdisSetEvent(&(pPlatformExt->TrigerEvent)); - - pPlatformExt->Period = Period; - - pRtThread->bEventTriger = EventTriger; - pRtThread->Adapter= Adapter; - pRtThread->Status = RT_THREAD_STATUS_INITIALIZED; - pRtThread->RefCnt = 1; - pRtThread->ScheduleCnt = 0; - pRtThread->CallbackFunc = CallBackFunc; - pRtThread->PreTheradExitCb = NULL; - - if(szID != NULL) - { - ASCII_STR_COPY(pRtThread->szID, szID, 36); - } - - pRtThread->Argc = 0; - pRtThread->pContext = pContext; - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -PlatformInitializeThreadEx( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_CALL_BACK CallBackFunc, - IN RT_THREAD_CALL_BACK PreThreadExitCb, - IN const char* szID, - IN BOOLEAN EventTriger, - IN u4Byte Period, - IN PVOID pContext - ) -{ - RT_STATUS status = RT_STATUS_SUCCESS; - - status = PlatformInitializeThread(Adapter, pRtThread, CallBackFunc, szID, EventTriger, Period, pContext); - - if(RT_STATUS_SUCCESS == status) - { - pRtThread->PreTheradExitCb = PreThreadExitCb; - } - - return status; -} - -VOID -PlatformSetEventToTrigerThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread -) -{ - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return; - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_CANCEL) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return; - } - NdisSetEvent(&(pPlatformExt->TrigerEvent)); - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return; - -} - -RT_STATUS -PlatformSetEventTrigerThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_LEVEL Priority, - IN PVOID pContext - ) -{ - HANDLE ThreadHandle; - NDIS_STATUS Status; - OBJECT_ATTRIBUTES ObjectAttribs; - - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return RT_STATUS_FAILURE; - - if(RT_DRIVER_HALT(Adapter)) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, - ("driver is halted pRtThread(%s) cannot schedule !!!\n", pRtThread->szID)); - return RT_STATUS_FAILURE; - } - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - if(pRtThread->Status & RT_THREAD_STATUS_RELEASED) - { - RT_TRACE(COMP_SYSTEM, DBG_WARNING, - ("pRtThread(%s) is alreadyreleased!!!\n", pRtThread->szID)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return RT_STATUS_FAILURE; - } - - if(!(pRtThread->Status & RT_THREAD_STATUS_INITIALIZED)) - { - RT_TRACE(COMP_SYSTEM, DBG_WARNING, - ("pRtThread(%s) is not yet initialized!!! Status 0x%x\n", pRtThread->szID, pRtThread->Status)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return RT_STATUS_FAILURE; - } - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - if(!NdisWaitEvent(&(pPlatformExt->CompleteEvent),2000)) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, - ("pRtThread(%s) is not Complete, cannot set again!!!\n", pRtThread->szID)); - return RT_STATUS_FAILURE; - } - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - NdisResetEvent(&(pPlatformExt->CompleteEvent)); - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - do - { - - InitializeObjectAttributes(&ObjectAttribs, - NULL, // ObjectName - OBJ_KERNEL_HANDLE, - NULL, // RootDir - NULL); // Security Desc - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->RefCnt++; - pRtThread->Status |= RT_THREAD_STATUS_SET; - pRtThread->pContext = pContext; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - pNdisCommon->OutStandingThreadCnt++; - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - - Status = PsCreateSystemThread(&ThreadHandle, - THREAD_ALL_ACCESS, - &ObjectAttribs, - NULL, // ProcessHandle - NULL, // ClientId - Ndis6EventTrigerThreadCallback, - pRtThread); - - if (!NT_SUCCESS(Status)) - { - RT_TRACE(COMP_INIT, DBG_SERIOUS, ("Worker Thread creation failed with 0x%lx\n", Status)); - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->RefCnt--; - pRtThread->Status &= ~RT_THREAD_STATUS_SET; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - if(Adapter->bSWInitReady) - { - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - pNdisCommon->OutStandingThreadCnt--; - - if(pNdisCommon->OutStandingThreadCnt == 0) - NdisSetEvent(&(pNdisCommon->AllThreadCompletedEvent)); - - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - } - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - NdisSetEvent(&(pPlatformExt->CompleteEvent)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - - break; - } - - Status = ObReferenceObjectByHandle(ThreadHandle, - THREAD_ALL_ACCESS, - NULL, - KernelMode, - &pPlatformExt->Thread, - NULL); - //Need to check status return; - - if (Priority != 0) - { - KeSetPriorityThread(pPlatformExt->Thread, (KPRIORITY)Priority); - } - - ZwClose(ThreadHandle); - - }while(FALSE); - - - return RT_STATUS_SUCCESS; -} - -RT_STATUS -PlatformRunThread( - IN PADAPTER Adapter, - IN PRT_THREAD pRtThread, - IN RT_THREAD_LEVEL Priority, - IN PVOID pContext - ) -{ - HANDLE ThreadHandle; - NDIS_STATUS Status; - OBJECT_ATTRIBUTES ObjectAttribs; - - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return RT_STATUS_FAILURE; - - if(RT_DRIVER_HALT(Adapter)) - { - RT_TRACE(COMP_SYSTEM, DBG_LOUD, - ("driver is halted pRtThread(%s) cannot schedule !!!\n", pRtThread->szID)); - return RT_STATUS_FAILURE; - } - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_RELEASED) - { - RT_TRACE(COMP_SYSTEM, DBG_WARNING, ("pRtThread(%s) is alreadyreleased!!!\n", pRtThread->szID)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return RT_STATUS_FAILURE; - } - - if(!(pRtThread->Status & RT_THREAD_STATUS_INITIALIZED)) - { - RT_ASSERT(FALSE, ("pRtThread(%s) is not yet initialized!!! Status 0x%x\n", pRtThread->szID, pRtThread->Status)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return RT_STATUS_FAILURE; - } - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - if(!NdisWaitEvent(&(pPlatformExt->CompleteEvent),2000)) - { - RT_TRACE(COMP_SYSTEM, DBG_WARNING, - ("pRtThread(%s) is not Complete, cannot set again!!!\n", pRtThread->szID)); - return RT_STATUS_FAILURE; - } - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - NdisResetEvent(&(pPlatformExt->CompleteEvent)); - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - do - { - InitializeObjectAttributes(&ObjectAttribs, - NULL, // ObjectName - OBJ_KERNEL_HANDLE, - NULL, // RootDir - NULL); // Security Desc - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->RefCnt++; - pRtThread->Status |= RT_THREAD_STATUS_SET; - pRtThread->pContext = pContext; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - pNdisCommon->OutStandingThreadCnt++; - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - - Status = PsCreateSystemThread(&ThreadHandle, - THREAD_ALL_ACCESS, - &ObjectAttribs, - NULL, // ProcessHandle - NULL, // ClientId - Ndis6ThreadCallback, - pRtThread); - - if (!NT_SUCCESS(Status)) - { - RT_TRACE(COMP_SYSTEM, DBG_SERIOUS, ("Worker Thread creation failed with 0x%lx\n", Status)); - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - pRtThread->RefCnt--; - pRtThread->Status &= ~RT_THREAD_STATUS_SET; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - pNdisCommon->OutStandingThreadCnt--; - - if(pNdisCommon->OutStandingThreadCnt == 0) - NdisSetEvent(&(pNdisCommon->AllThreadCompletedEvent)); - - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - NdisSetEvent(&(pPlatformExt->CompleteEvent)); - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - - break; - } - - Status = ObReferenceObjectByHandle(ThreadHandle, - THREAD_ALL_ACCESS, - NULL, - KernelMode, - &pPlatformExt->Thread, - NULL); - //Need to check status return; - - if (Priority != 0) - { - KeSetPriorityThread(pPlatformExt->Thread, (KPRIORITY)Priority); - } - - ZwClose(ThreadHandle); - - }while(FALSE); - - - return RT_STATUS_SUCCESS; -} - - - -VOID -PlatformCancelThread( - IN PADAPTER pAdapter, - IN PRT_THREAD pRtThread) -{ - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return ; - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_RELEASED || - (!(pRtThread->Status & RT_THREAD_STATUS_INITIALIZED))) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return; - } - - if(pRtThread->Status & RT_THREAD_STATUS_FIRED) // already fired and not finish. waiting for the thread complete. - { - pRtThread->Status |= RT_THREAD_STATUS_CANCEL; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - NdisSetEvent(&(pPlatformExt->TrigerEvent)); - NdisWaitEvent(&(pPlatformExt->CompleteEvent),0); - } - else if(pRtThread->Status & RT_THREAD_STATUS_SET) // set but not fired. This thread would not be fired - { - pRtThread->Status |= RT_THREAD_STATUS_CANCEL; - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - NdisSetEvent(&(pPlatformExt->TrigerEvent)); - NdisWaitEvent(&(pPlatformExt->CompleteEvent),0); - } - else - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - // thread been canceled - NdisAcquireSpinLock(&(pNdisCommon->ThreadLock)); - - if(pNdisCommon->OutStandingThreadCnt == 0) - NdisSetEvent(&(pNdisCommon->AllThreadCompletedEvent)); - - NdisReleaseSpinLock(&(pNdisCommon->ThreadLock)); - } -} - -VOID -PlatformWaitThreadEnd( - IN PADAPTER pAdapter, - IN PRT_THREAD pRtThread) -{ - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - u4Byte i = 0; - - if( pPlatformExt == NULL ) - return ; - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_RELEASED || - (!(pRtThread->Status & RT_THREAD_STATUS_INITIALIZED))) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return; - } - - if( !(pRtThread->Status & RT_THREAD_STATUS_SET) ) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return; - } - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - - KeWaitForSingleObject(pPlatformExt->Thread,Executive, KernelMode, FALSE, NULL); - ObDereferenceObject(pPlatformExt->Thread); - -} - -VOID -PlatformReleaseThread( - IN PADAPTER pAdapter, - IN PRT_THREAD pRtThread) -{ - PRT_THREAD_PLATFORM_EXT pPlatformExt = (PRT_THREAD_PLATFORM_EXT)pRtThread->pPlatformExt; - - if( pPlatformExt == NULL ) - return ; - - NdisAcquireSpinLock(&(pPlatformExt->Lock)); - - if(pRtThread->Status & RT_THREAD_STATUS_RELEASED || - (!(pRtThread->Status & RT_THREAD_STATUS_INITIALIZED))) - { - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - return; - } - - pRtThread->Status |= RT_THREAD_STATUS_RELEASED; - - //Fix S3 BSOD, by YJ,120719 - pRtThread->pPlatformExt = NULL; - - NdisReleaseSpinLock(&(pPlatformExt->Lock)); - NdisFreeSpinLock(&(pPlatformExt->Lock)); // may have some issue? - - PlatformFreeMemory( pPlatformExt, sizeof(RT_THREAD_PLATFORM_EXT) ); - -} - -// -// Description: -// This routine initializes a semaphore object with a specified count and -// specifies an upper limit that the count can attain. -// -// Created by Roger, 2011.01.17. -// -VOID -PlatformInitializeSemaphore( - IN PPlatformSemaphore Sema, - IN u4Byte InitCnt - ) -{ - - // - // We create this semaphore with an initial count of zero to block access to the protected resource - // while the application is being initialized. After initialization, we can use ReleaseSemaphore to increment - // the count to the maximum value. - // - KeInitializeSemaphore( - Sema, - InitCnt, // Count - SEMA_UPBND); // Limit -} - - -// -// Description: -// This routine waits for the semaphore object state to become signaled. -// -// Created by Roger, 2011.01.17. -// -RT_STATUS -PlatformAcquireSemaphore( - IN PPlatformSemaphore Sema - ) -{ - RT_STATUS status = RT_STATUS_FAILURE; - - if( STATUS_SUCCESS == KeWaitForSingleObject(Sema, Executive, KernelMode, TRUE, NULL) ) - status = RT_STATUS_SUCCESS; - - return status; -} - - -// -// Description: -// This routine increases a semaphore's count by a specified amount. -// -// Created by Roger, 2011.01.17. -// -VOID -PlatformReleaseSemaphore( - IN PPlatformSemaphore Sema - ) -{ - if (Sema->Header.Type == 0) - return; - - KeReleaseSemaphore( - Sema, - IO_NETWORK_INCREMENT, // Priority increment - 1, // Adjustment, a value to be added - FALSE ); // Will not be followed immediately by a call to one of the KeWaitXxx routines -} - -// -// Description: -// This routine frees a semaphore object -// -// Created by Roger, 2011.01.17. -// -VOID -PlatformFreeSemaphore( - IN PPlatformSemaphore Sema - ) -{ - if (Sema->Header.Type == 0) - return; -} - -// -// Description: -// This routine initializes a event object -// -// Created by Cosa, 2012.01.09. -// -VOID -PlatformInitializeEvent( - IN PPlatformEvent pEvent - ) -{ - NdisInitializeEvent(pEvent); -} - -VOID -PlatformResetEvent( - IN PPlatformEvent pEvent - ) -{ - NdisResetEvent(pEvent); -} - -VOID -PlatformSetEvent( - IN PPlatformEvent pEvent - ) -{ - NdisSetEvent(pEvent); -} - -VOID -PlatformFreeEvent( - IN PPlatformEvent pEvent - ) -{ - -} - -BOOLEAN -PlatformWaitEvent( - IN PPlatformEvent pEvent, - IN u4Byte msToWait - ) -{ - return NdisWaitEvent(pEvent, msToWait); -} - - -// -// 2011/04/08 MH Merge for return pending packet for WINDOWS. -// -VOID -PlatformReturnAllPendingTxPackets( - IN PADAPTER pAdapter - ) -{ - N6SdioReturnAllPendingTxPackets(pAdapter); -} - - -VOID -PlatformRestoreLastInitSetting( - IN PADAPTER pAdapter - ) -{ - N6RestoreLastInitSettingAterWakeUP(pAdapter); -} - -BOOLEAN -PlatformIsOverrideAddress( - IN PADAPTER Adapter - ) -{ - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - - if(pNdisCommon->bOverrideAddress) - { - u1Byte nulladdr[6] = {0, 0, 0, 0, 0, 0}; - if(PlatformCompareMemory(nulladdr, pNdisCommon->CurrentAddress, 6) == 0) - return FALSE; - } - - return pNdisCommon->bOverrideAddress; -} - -pu1Byte -PlatformGetOverrideAddress( - IN PADAPTER Adapter - ) -{ - PRT_NDIS_COMMON pNdisCommon = Adapter->pNdisCommon; - - return pNdisCommon->CurrentAddress; -} - -//=================================== -// If we are goting to stop vwifi support, then it will drop -// all connections connected with the vwifi and indicate -// to OS that can't support anymore. Otherwise, when we -// need to support vwifi again, we need to -// indicate to OS that we can sustain vwifi. -//=================================== -VOID -PlatformExtApSupport( - IN PADAPTER Adapter, - IN BOOLEAN bSupport - ) -{ - PADAPTER pExtAdapter; - pExtAdapter = GetFirstExtAdapter(Adapter); - - if( NULL != pExtAdapter) - { - if(!bSupport) - { - N62CStopApMode(pExtAdapter); - } - else - { - N62CApIndicateCanSustainAp(pExtAdapter); - } - } -} - -BOOLEAN -PlatformInitReady( - IN PADAPTER Adapter - ) -{ - if(!N6_INIT_READY(Adapter)) - { - return FALSE; - } - else - return TRUE; -} - -VOID -Dot11_UpdateDefaultSetting( - IN PADAPTER pAdapter -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_CHANNEL_INFO pChnlInfo = pMgntInfo->pChannelInfo; - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - EXTCHNL_OFFSET extchnl = EXTCHNL_OFFSET_NO_EXT; - - // SSID. - CopySsid(pMgntInfo->Ssid.Octet, pMgntInfo->Ssid.Length, pNdisCommon->RegSSID.Octet, pNdisCommon->RegSSID.Length); - - // Default wireless mode. - pAdapter->RegOrigWirelessMode = (WIRELESS_MODE)(pNdisCommon->RegWirelessMode); - pAdapter->RegHTMode = (HT_MODE)(pNdisCommon->RegHTMode); - - if(pAdapter->RegHTMode == HT_MODE_UNDEFINED) - { - pAdapter->RegWirelessMode = pAdapter->RegOrigWirelessMode; - pAdapter->RegOrigWirelessMode = 0xFFFF; - pAdapter->RegHTMode = HT_MODE_VHT; - } - else - { - if(IS_WIRELESS_MODE_A_ONLY(pAdapter->RegOrigWirelessMode)) // A only - { - if(IS_VHT_SUPPORTED(pAdapter)) - pAdapter->RegWirelessMode = WIRELESS_MODE_AC_5G; - else if(IS_HT_SUPPORTED(pAdapter)) - pAdapter->RegWirelessMode = WIRELESS_MODE_N_5G; - else - pAdapter->RegWirelessMode = WIRELESS_MODE_A; - } - else if(IS_WIRELESS_MODE_B_ONLY(pAdapter->RegOrigWirelessMode)) // B only - { - pAdapter->RegWirelessMode = WIRELESS_MODE_B; - pAdapter->RegHTMode = HT_MODE_DISABLE; - } - else if(IS_WIRELESS_MODE_G_AND_BG(pAdapter->RegOrigWirelessMode)) // G only, B/G - { - if(IS_HT_SUPPORTED(pAdapter)) - pAdapter->RegWirelessMode = WIRELESS_MODE_N_24G; - else - pAdapter->RegWirelessMode = WIRELESS_MODE_G; - } - else - { - pAdapter->RegWirelessMode = WIRELESS_MODE_AUTO; // A/G, A/B/G - } - - } - - { - pMgntInfo->Regdot11ChannelNumber = (u1Byte)(pNdisCommon->RegChannel); - - if(pMgntInfo->Regdot11ChannelNumber <= 14) - { - if(IS_5G_WIRELESS_MODE(pAdapter->RegWirelessMode)) - pMgntInfo->Regdot11ChannelNumber = 36; - } - else - { - if(IS_24G_WIRELESS_MODE(pAdapter->RegWirelessMode)) - pMgntInfo->Regdot11ChannelNumber = 10; - } - } - - if(GetDefaultAdapter(pAdapter)->bInHctTest) - pMgntInfo->Regdot11ChannelNumber = 10; - - pMgntInfo->dot11CurrentChannelNumber = pMgntInfo->Regdot11ChannelNumber; - pChnlInfo->PrimaryChannelNumber = pMgntInfo->dot11CurrentChannelNumber; - pChnlInfo->CurrentChannelCenterFrequency = pMgntInfo->dot11CurrentChannelNumber; - - - if(pAdapter->bInHctTest) - pChnlInfo->RegBWSetting = CHANNEL_WIDTH_20; - else - pChnlInfo->RegBWSetting = pNdisCommon->RegBWSetting; - - // Auto select channel. - pMgntInfo->bAutoSelChnl = (BOOLEAN)pNdisCommon->RegAutoSelChnl; - pMgntInfo->ChnlWeightMode = (u1Byte)pNdisCommon->RegChnlWeight; - - // Force Tx rate. - pMgntInfo->ForcedDataRate = pNdisCommon->RegForcedDataRate; - - // Set the BeaconType By Bruce, 2011-01-18. - pAdapter->HalFunc.SetHalDefVarHandler(pAdapter, HAL_DEF_HW_BEACON_SUPPORT, (pu1Byte)&(pNdisCommon->RegEnableSwBeacon)); - - // AP mode related. 2005.05.30, by rcnjko. - pMgntInfo->Regdot11BeaconPeriod = (u2Byte)(pNdisCommon->RegBeaconPeriod); - pMgntInfo->dot11BeaconPeriod = pMgntInfo->Regdot11BeaconPeriod; - pMgntInfo->Regdot11DtimPeriod = (u1Byte)(pNdisCommon->RegDtimPeriod); - pMgntInfo->dot11DtimPeriod = pMgntInfo->Regdot11DtimPeriod; - pMgntInfo->RegPreambleMode = (u1Byte)(pNdisCommon->RegPreambleMode); - pMgntInfo->dot11CurrentPreambleMode = pMgntInfo->RegPreambleMode; - -#if 0 - // Channel / BW setting - if(pChnlInfo->RegBWSetting == CHANNEL_WIDTH_20) - extchnl = EXTCHNL_OFFSET_NO_EXT; - else - { - if(CHNL_IsLegal5GChannel(pAdapter, pMgntInfo ->Regdot11ChannelNumber)) - extchnl = CHNL_GetExt20OffsetOf5G(pMgntInfo->dot11CurrentChannelNumber); - else if(pChnlInfo->RegBWSetting == CHANNEL_WIDTH_80) - { - if(pMgntInfo->dot11CurrentChannelNumber == 1 || pMgntInfo->dot11CurrentChannelNumber == 9) - extchnl = EXTCHNL_OFFSET_UPPER; - else - extchnl = EXTCHNL_OFFSET_LOWER; - } - else - extchnl =(pMgntInfo->dot11CurrentChannelNumber<=7)? EXTCHNL_OFFSET_UPPER:EXTCHNL_OFFSET_LOWER; - } - pMgntInfo->SettingBeforeScan.ChannelNumber = pMgntInfo->Regdot11ChannelNumber; - pMgntInfo->SettingBeforeScan.ChannelBandwidth = pChnlInfo->RegBWSetting; - pMgntInfo->SettingBeforeScan.Ext20MHzChnlOffsetOf40MHz = extchnl; - pMgntInfo->SettingBeforeScan.Ext40MHzChnlOffsetOf80MHz = extchnl; - pMgntInfo->SettingBeforeScan.CenterFrequencyIndex1 = CHNL_GetCenterFrequency(pMgntInfo->SettingBeforeScan.ChannelNumber, pChnlInfo->RegBWSetting, extchnl); -#endif - -} - - -VOID -HT_UpdateDefaultSetting( - IN PADAPTER pAdapter -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_HIGH_THROUGHPUT pHTInfo = GET_HT_INFO(pMgntInfo); - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - - BOOLEAN bHwLDPCSupport = FALSE, bHwSTBCSupport = FALSE; - BOOLEAN bHwSupportBeamformer = FALSE, bHwSupportBeamformee = FALSE; - - if(pMgntInfo->bWiFiConfg) - pHTInfo->bBssCoexist = TRUE; - else - pHTInfo->bBssCoexist = FALSE; - - pHTInfo->bRegBW40MHzFor2G = pNdisCommon->bRegBW40MHzFor2G; - pHTInfo->bRegBW40MHzFor5G = pNdisCommon->bRegBW40MHzFor5G; - - // 11n adhoc support - pMgntInfo->bReg11nAdhoc = pNdisCommon->bReg11nAdhoc; - - // 11ac Bcm 256QAM support - pMgntInfo->bRegIOTBcm256QAM = pNdisCommon->bRegIOTBcm256QAM; - - // CCK rate support in 40MHz channel - if(pNdisCommon->RegBWSetting) - pHTInfo->bRegSuppCCK = pNdisCommon->bRegHT_EnableCck; - else - pHTInfo->bRegSuppCCK = TRUE; - - // AMSDU related - pHTInfo->nAMSDU_MaxSize = (u2Byte)pNdisCommon->RegAMSDU_MaxSize; - pHTInfo->bAMSDU_Support = (BOOLEAN)pNdisCommon->RegAMSDU; - - pHTInfo->bHWAMSDU_Support = (BOOLEAN)pNdisCommon->RegHWAMSDU; - - // AMPDU related - if(pAdapter->bInHctTest) - pHTInfo->bAMPDUEnable = FALSE; - else - pHTInfo->bAMPDUEnable = (BOOLEAN)pNdisCommon->bRegAMPDUEnable; - - pHTInfo->AMPDU_Factor = (u1Byte)pNdisCommon->RegAMPDU_Factor; - pHTInfo->MPDU_Density = (u1Byte)pNdisCommon->RegMPDU_Density; - - // Accept ADDBA Request - pHTInfo->bAcceptAddbaReq = (BOOLEAN)(pNdisCommon->bRegAcceptAddbaReq); - - // MIMO Power Save - pHTInfo->SelfMimoPs = (u1Byte)pNdisCommon->RegMimoPs; - if(pHTInfo->SelfMimoPs == 2) - pHTInfo->SelfMimoPs = 3; - - // For Rx Reorder Control - // bRegRxReorderEnable default is FALSE if Rxreorder is swithed by TP since TP should be low as media just connect. - pHTInfo->bRegRxReorderEnable = ((pMgntInfo->RegRxReorder = pNdisCommon->RegRxReorder) ==2) ? FALSE : pNdisCommon->RegRxReorder; - pHTInfo->RxReorderWinSize = pMgntInfo->RegRxReorder_WinSize = pNdisCommon->RegRxReorder_WinSize; - pHTInfo->RxReorderPendingTime = pMgntInfo->RegRxReorder_PendTime = pNdisCommon->RegRxReorder_PendTime; - pHTInfo->bRegShortGI40MHz = TEST_FLAG(pNdisCommon->RegShortGISupport, BIT1) ? TRUE : FALSE; - pHTInfo->bRegShortGI20MHz = TEST_FLAG(pNdisCommon->RegShortGISupport, BIT0) ? TRUE : FALSE; - - pHTInfo->b40Intolerant = pNdisCommon->bReg40Intolerant; - pHTInfo->bAMPDUManual = pNdisCommon->bRegAMPDUManual; - pHTInfo->nTxSPStream = pNdisCommon->RegTxSPStream; - - //IOT issue with Atheros AP. If set incorrect, the Rx rate will always be MCS4. - if(pHTInfo->nRxSPStream == 0) - { - u1Byte Rf_Type = RT_GetRFType(pAdapter); - - if(Rf_Type == RF_1T2R || Rf_Type == RF_2T2R) - pHTInfo->nRxSPStream = 2; - else if(Rf_Type == RF_3T3R || Rf_Type == RF_2T4R || Rf_Type == RF_4T4R || Rf_Type == RF_2T3R) - pHTInfo->nRxSPStream = 3; - else - pHTInfo->nRxSPStream = 1; - } - - if(pHTInfo->nTxSPStream == 0) - { - u1Byte Rf_Type = RT_GetRFType(pAdapter); - - if(Rf_Type == RF_1T2R || Rf_Type == RF_1T1R) - pHTInfo->nTxSPStream = 1; - else if(Rf_Type == RF_3T3R || Rf_Type == RF_4T4R) - pHTInfo->nTxSPStream = 3; - else - pHTInfo->nTxSPStream = 2; - - } - - // LDPC support - CLEAR_FLAGS(pHTInfo->HtLdpcCap); - - // LDPC - Tx - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_TX_LDPC, (PBOOLEAN)&bHwLDPCSupport); - if(bHwLDPCSupport) - { - if(TEST_FLAG(pNdisCommon->RegLdpc, BIT5)) - SET_FLAG(pHTInfo->HtLdpcCap, LDPC_HT_ENABLE_TX); - } - // LDPC - Rx - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_RX_LDPC, (PBOOLEAN)&bHwLDPCSupport); - if(bHwLDPCSupport) - { - if(TEST_FLAG(pNdisCommon->RegLdpc, BIT4)) - SET_FLAG(pHTInfo->HtLdpcCap, LDPC_HT_ENABLE_RX); - - } - RT_TRACE_F(COMP_HT, DBG_LOUD, ("[HT] Support LDOC = 0x%02X\n", pHTInfo->HtLdpcCap)); - - // STBC - if(pMgntInfo->bWiFiConfg) - bHwSTBCSupport = FALSE; - else - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_TX_STBC, (PBOOLEAN)&bHwSTBCSupport); - CLEAR_FLAGS(pHTInfo->HtStbcCap); - if(bHwSTBCSupport) - { - if(TEST_FLAG(pNdisCommon->RegStbc, BIT5)) - SET_FLAG(pHTInfo->HtStbcCap, STBC_HT_ENABLE_TX); - - } - - if(pMgntInfo->bWiFiConfg) - bHwSTBCSupport = FALSE; - else - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_RX_STBC, (PBOOLEAN)&bHwSTBCSupport); - if(bHwSTBCSupport) - { - if(TEST_FLAG(pNdisCommon->RegStbc, BIT4)) - SET_FLAG(pHTInfo->HtStbcCap, STBC_HT_ENABLE_RX); - } - - RT_TRACE_F(COMP_HT, DBG_LOUD, ("[HT] Support STBC = 0x%02X\n", pHTInfo->HtStbcCap)); - - - -} - - -VOID -VHT_UpdateDefaultSetting( - IN PADAPTER pAdapter -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_VERY_HIGH_THROUGHPUT pVHTInfo = GET_VHT_INFO(pMgntInfo); - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - - BOOLEAN bHwLDPCSupport = FALSE, bHwSTBCSupport = FALSE; - BOOLEAN bHwSupportBeamformer = FALSE, bHwSupportBeamformee = FALSE; - BOOLEAN bHwSupportMuMimoAp = FALSE, bHwSupportMuMimoSta = FALSE; - - if(pNdisCommon->RegBWSetting == 2) - { - pVHTInfo->bRegBW80MHz = TRUE; - pVHTInfo->bRegShortGI80MHz = TEST_FLAG(pNdisCommon->RegShortGISupport, BIT2) ? TRUE : FALSE; - } - else - { - pVHTInfo->bRegBW80MHz = FALSE; - pVHTInfo->bRegShortGI80MHz = FALSE; - } - - //pVHTInfo->bRegShortGI80MHz = TEST_FLAG(pNdisCommon->RegShortGISupport, BIT2) ? TRUE : FALSE; - RT_TRACE(COMP_INIT, DBG_LOUD, ("bRegShortGI80MHz = %d\n", pVHTInfo->bRegShortGI80MHz)); - - pVHTInfo->nTxSPStream = pNdisCommon->RegTxSPStream; - pVHTInfo->nRxSPStream = pNdisCommon->RegRxSPStream; - - //IOT issue with Atheros AP. If set incorrect, the Rx rate will always be MCS4. - if(pVHTInfo->nRxSPStream == 0) - { - u1Byte Rf_Type = RT_GetRFType(pAdapter); - - if(Rf_Type == RF_1T2R || Rf_Type == RF_2T2R) - pVHTInfo->nRxSPStream = 2; - else if(Rf_Type == RF_3T3R || Rf_Type == RF_2T4R || Rf_Type == RF_4T4R || Rf_Type == RF_2T3R) - pVHTInfo->nRxSPStream = 3; - else - pVHTInfo->nRxSPStream = 1; - } - - if(pVHTInfo->nTxSPStream == 0) - { - u1Byte Rf_Type = RT_GetRFType(pAdapter); - - if(Rf_Type == RF_1T2R || Rf_Type == RF_1T1R) - pVHTInfo->nTxSPStream = 1; - else if(Rf_Type == RF_3T3R || Rf_Type == RF_4T4R) - pVHTInfo->nTxSPStream = 3; - else - pVHTInfo->nTxSPStream = 2; - - } - - // LDPC support - CLEAR_FLAGS(pVHTInfo->VhtLdpcCap); - - // LDPC - Tx - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_TX_LDPC, (PBOOLEAN)&bHwLDPCSupport); - if(bHwLDPCSupport) - { - if(TEST_FLAG(pNdisCommon->RegLdpc, BIT1)) - SET_FLAG(pVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_TX); - } - // LDPC - Rx - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_RX_LDPC, (PBOOLEAN)&bHwLDPCSupport); - if(bHwLDPCSupport) - { - if(TEST_FLAG(pNdisCommon->RegLdpc, BIT0)) - SET_FLAG(pVHTInfo->VhtLdpcCap, LDPC_VHT_ENABLE_RX); - } - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("[VHT] Support LDPC = 0x%02X\n", pVHTInfo->VhtLdpcCap)); - - // STBC - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_TX_STBC, (PBOOLEAN)&bHwSTBCSupport); - CLEAR_FLAGS(pVHTInfo->VhtStbcCap); - if(bHwSTBCSupport) - { - if(TEST_FLAG(pNdisCommon->RegStbc, BIT1)) - SET_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_TX); - - } - pAdapter->HalFunc.GetHalDefVarHandler(pAdapter, HAL_DEF_RX_STBC, (PBOOLEAN)&bHwSTBCSupport); - if(bHwSTBCSupport) - { - if(TEST_FLAG(pNdisCommon->RegStbc, BIT0)) - SET_FLAG(pVHTInfo->VhtStbcCap, STBC_VHT_ENABLE_RX); - } - RT_TRACE_F(COMP_INIT, DBG_LOUD, ("[VHT] Support STBC = 0x%02X\n", pVHTInfo->VhtStbcCap)); - - -} - -VOID -PSC_UpdateDefaultSetting( - IN PADAPTER pAdapter -) -{ - PMGNT_INFO pMgntInfo = &(pAdapter->MgntInfo); - PRT_NDIS_COMMON pNdisCommon = pAdapter->pNdisCommon; - PRT_POWER_SAVE_CONTROL pPSC = GET_POWER_SAVE_CONTROL(pMgntInfo); - - // For SDIO DPC ISR WHQL test setting. - // We should enable power saving mode to pass DPC USR test. - pMgntInfo->bSdioDpcIsr = (BOOLEAN)pNdisCommon->RegSdioDpcIsr; - - //3 All Power Save Mechanism. - if((pAdapter->bInHctTest || pMgntInfo->bWiFiConfg) && !pMgntInfo->bSdioDpcIsr) - { -#if 0 - if(pAdapter->bDPCISRTest) - { - pPSC->bInactivePs = TRUE; - pPSC->bLeisurePs = TRUE; - pMgntInfo->keepAliveLevel =pNdisCommon->RegKeepAliveLevel; - pPSC->bFwCtrlLPS = TRUE; - pPSC->FWCtrlPSMode = FW_PS_MIN_MODE; - DbgPrint("test set leisurePS and inactivePS to TRUE\n"); - } - else -#endif - { - pPSC->bInactivePs = FALSE; - pNdisCommon->RegInactivePsMode = eIpsOff; - - pPSC->bLeisurePs = FALSE; - pNdisCommon->RegLeisurePsMode = eLpsOff; - - pMgntInfo->keepAliveLevel =0; - - pPSC->bFwCtrlLPS = FALSE; - pNdisCommon->bRegFwCtrlLPS =0; - pPSC->bLeisurePsModeBackup = FALSE; - - pPSC->FWCtrlPSMode = FW_PS_ACTIVE_MODE; - } - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("pNdisCommon->RegInactivePsMode = %d\n", pNdisCommon->RegInactivePsMode)); - if(pNdisCommon->RegInactivePsMode == eIpsAuto) - pPSC->bInactivePs = FALSE; - else - pPSC->bInactivePs = pNdisCommon->RegInactivePsMode; - - pPSC->bLeisurePsModeBackup = FALSE; - - //2008.08.25 - if( (pNdisCommon->RegLeisurePsMode==eLpsOn) && (pMgntInfo->dot11PowerSaveMode == eActive) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("LeisurePs On!!\n")); - pPSC->bLeisurePs = TRUE; - } - else if( (pNdisCommon->RegLeisurePsMode==eLpsAuto) && (pMgntInfo->dot11PowerSaveMode == eActive) ) - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("LeisurePs Off!!\n")); - pPSC->bLeisurePs = FALSE; - } - else - { - RT_TRACE(COMP_INIT, DBG_LOUD, ("LeisurePs Off!!\n")); - pPSC->bLeisurePs = FALSE; - } - pMgntInfo->keepAliveLevel =pNdisCommon->RegKeepAliveLevel; - - //Fw Control LPS mode - if(pNdisCommon->bRegFwCtrlLPS == 0) - pPSC->bFwCtrlLPS = FALSE; - else - pPSC->bFwCtrlLPS = TRUE; - - // We need to assign the FW PS mode value even if we do not enable LPS mode. 2012.03.05. by tynli. - if(pNdisCommon->bRegFwCtrlLPS == 0) - pPSC->FWCtrlPSMode = FW_PS_ACTIVE_MODE; - else if(pNdisCommon->bRegFwCtrlLPS == 1) - pPSC->FWCtrlPSMode = FW_PS_MIN_MODE; - else if(pNdisCommon->bRegFwCtrlLPS == 2) - pPSC->FWCtrlPSMode = FW_PS_MAX_MODE; - else if(pNdisCommon->bRegFwCtrlLPS == 3) - pPSC->FWCtrlPSMode = FW_PS_SELF_DEFINED_MODE; - - -//LPS 32K Support and Enable Deep Sleep -//by sherry 20150910 - if((pNdisCommon->RegLeisurePsMode != eLpsOff) && (pNdisCommon->bRegLowPowerEnable) && (pNdisCommon->bRegLPSDeepSleepEnable)) - { - RT_TRACE(COMP_INIT,DBG_LOUD,("PSC_UpdateDefaultSetting: Enable LPS Deep Sleep \n")); - FwLPSDeepSleepInit(pAdapter); - } - } - - pPSC->bIPSModeBackup = pPSC->bInactivePs; - pPSC->bLeisurePsModeBackup = pPSC->bLeisurePs; - pPSC->RegMaxLPSAwakeIntvl = pNdisCommon->RegLPSMaxIntvl; - pPSC->RegAdvancedLPs = pNdisCommon->RegAdvancedLPs; - - pPSC->bGpioRfSw = pNdisCommon->bRegGpioRfSw; - - pPSC->RegLeisurePsMode = pNdisCommon->RegLeisurePsMode; - pPSC->RegPowerSaveMode = pNdisCommon->RegPowerSaveMode; - - #if((USB_TX_THREAD_ENABLE && RTL8723_USB_IO_THREAD_ENABLE) || RTL8723_SDIO_IO_THREAD_ENABLE) - pPSC->bLowPowerEnable = (BOOLEAN)pNdisCommon->bRegLowPowerEnable; - #else - pPSC->bLowPowerEnable = 0; - #endif - - //Set WoWLAN mode. 2009.09.01. by tynli - if(pNdisCommon->bRegWakeOnMagicPacket) - { - if(pNdisCommon->bRegWakeOnPattern) - pPSC->WoWLANMode = eWakeOnBothTypePacket; - else - pPSC->WoWLANMode = eWakeOnMagicPacketOnly; - } - else if(pNdisCommon->bRegWakeOnPattern) - { - pPSC->WoWLANMode = eWakeOnPatternMatchOnly; - } - else - { - pPSC->WoWLANMode = eWoWLANDisable; - } - - pPSC->bWakeOnDisconnect = pNdisCommon->bRegWakeOnDisconnect; - - if(pNdisCommon->bRegPacketCoalescing) - pMgntInfo->bSupportPacketCoalescing = TRUE; - else - pMgntInfo->bSupportPacketCoalescing = FALSE; - - pPSC->APOffloadEnable = pNdisCommon->RegAPOffloadEnable; - pPSC->WoWLANLPSLevel = pNdisCommon->RegWoWLANLPSLevel ; - pPSC->WoWLANS5Support = pNdisCommon->RegWoWLANS5Support; - pPSC->D2ListenIntvl = pNdisCommon->RegD2ListenIntvl; - pPSC->bFakeWoWLAN = pNdisCommon->bRegFakeWoWLAN; - - pPSC->RegARPOffloadEnable = pNdisCommon->bRegARPOffloadEnable; - pPSC->RegGTKOffloadEnable = pNdisCommon->bRegGTKOffloadEnable ; // support GTK offload after NDIS620. - pPSC->ProtocolOffloadDecision = pNdisCommon->RegProtocolOffloadDecision; - pPSC->RegNSOffloadEnable = pNdisCommon->bRegNSOffloadEnable; - - pPSC->FSSDetection = pNdisCommon->RegFSSDetection; - pMgntInfo->bIntelPatchPNP = pNdisCommon->RegIntelPatchPNP; - pPSC->DxNLOEnable = pNdisCommon->RegNLOEnable; - pMgntInfo->bRegPnpKeepLink = (BOOLEAN)pNdisCommon->RegPnpKeepLink; - - pPSC->bFwCtrlPwrOff = (BOOLEAN)pNdisCommon->RegFwCtrlPwrOff; - pPSC->CardDisableInLowClk = (BOOLEAN)pNdisCommon->RegCardDisableInLowClk; - pPSC->FwIPSLevel = pNdisCommon->RegFwIPSLevel; - - // WoWLAN setting for DTM test. - if(pAdapter->bInHctTest) - { - // Do not enable WoWLAN LPS in DTM test. - pPSC->WoWLANLPSLevel = 0; - } - - pAdapter->bRxPsWorkAround = (BOOLEAN)pNdisCommon->RegRxPsWorkAround; - - RT_TRACE(COMP_POWER, DBG_LOUD, ("bRegFwCtrlLPS %d bRegLeisurePs %d", pNdisCommon->bRegFwCtrlLPS, pNdisCommon->RegLeisurePsMode)); - RT_TRACE(COMP_POWER, DBG_LOUD, ("bFwCtrlLPS %d bLeisurePs %d", pPSC->bFwCtrlLPS, pPSC->bLeisurePs)); -} - - -// -// Description: -// Read common registry value under LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\RtlWlanx -// 2014.12.15, by Sean. -// -// PASSIVE_LEVEL ONLY!!!!!!!!!!!!!!!!!!!!!!!!! -NTSTATUS -PlatformReadCommonDwordRegistry( - IN PWCHAR registryName, - OUT pu4Byte resultValue) -{ - - OBJECT_ATTRIBUTES objectAttributes = {0}; - HANDLE driverKey = NULL; - NTSTATUS ntStatus = STATUS_SUCCESS; - UNICODE_STRING ValueName; - UNICODE_STRING RegistryPath; - KEY_VALUE_PARTIAL_INFORMATION result; - ULONG resultLength; - - - do - { - RtlInitUnicodeString(&RegistryPath,GlobalRtDriverContext.NdisContext.RegistryPath); - //DbgPrint("PATH: %wZ length:%d MAX :%d \n",&RegistryPath,RegistryPath.Length,RegistryPath.MaximumLength); - - InitializeObjectAttributes(&objectAttributes, - &RegistryPath, - OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, - NULL, - NULL); - - if(STATUS_SUCCESS != (ntStatus = ZwOpenKey(&driverKey, KEY_READ, &objectAttributes))) - { - DbgPrint("ZwOpenKey Failed = 0x%x\n", ntStatus); - break; - } - RtlInitUnicodeString(&ValueName, registryName); - - ntStatus = ZwQueryValueKey(driverKey,&ValueName,KeyValuePartialInformation,&result,sizeof(KEY_VALUE_PARTIAL_INFORMATION),&resultLength); - - if(STATUS_SUCCESS != ntStatus) - { - DbgPrint("ZwQueryValueKey Failed = 0x%x\n", ntStatus); - break; - } - memcpy(resultValue,result.Data,sizeof(u4Byte)); - //DbgPrint("Test result:%d Length:%d type:%d\n",*resultValue, result.DataLength, result.Type); - }while(FALSE); - - if(driverKey) - { - ZwClose(driverKey); - driverKey = NULL; - } - - return ntStatus; - -} - - -// -// Description: -// Write common registry value under LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service\RtlWlanx -// 2014.12.16, by Sean. -// -// PASSIVE_LEVEL ONLY!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -NTSTATUS -PlatformWriteCommonDwordRegistry( - IN PWCHAR registryName, - IN pu4Byte Value) -{ - - OBJECT_ATTRIBUTES objectAttributes = {0}; - HANDLE driverKey = NULL; - NTSTATUS ntStatus = STATUS_SUCCESS; - UNICODE_STRING ValueName; - UNICODE_STRING RegistryPath; - - - do - { - RtlInitUnicodeString(&RegistryPath,GlobalRtDriverContext.NdisContext.RegistryPath); - InitializeObjectAttributes(&objectAttributes, - &RegistryPath, - OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, - NULL, - NULL); - - if(STATUS_SUCCESS != (ntStatus = ZwOpenKey(&driverKey, KEY_WRITE, &objectAttributes))) - { - DbgPrint("ZwOpenKey Failed = 0x%x\n", ntStatus); - break; - } - RtlInitUnicodeString(&ValueName, registryName); - - ntStatus = ZwSetValueKey(driverKey,&ValueName,0,REG_DWORD,Value,sizeof(u4Byte)); - - if(STATUS_SUCCESS != ntStatus) - { - DbgPrint("ZwSetValueKey Failed = 0x%x\n", ntStatus); - break; - } - - }while(FALSE); - - if(driverKey) - { - ZwClose(driverKey); - driverKey = NULL; - } - - return ntStatus; - -} - -NTSTATUS -PlatformWriteBTAntPosDwordRegistry( - IN PWCHAR registryName, - IN pu4Byte Value) -{ - - OBJECT_ATTRIBUTES objectAttributes = {0}; - HANDLE driverKey = NULL; - NTSTATUS ntStatus = STATUS_SUCCESS; - UNICODE_STRING ValueName; - UNICODE_STRING RegistryPath; - ANSI_STRING AnsiString; - - RT_TRACE(COMP_INIT, DBG_LOUD, ("### test\n")); - - do - { - //RtlInitUnicodeString(&RegistryPath,registryPath); - RtlInitString(&AnsiString,"\\REGISTRY\\MACHINE\\SYSTEM\\ControlSet001\\Services\\RtlWlans\\Parameters"); - RtlAnsiStringToUnicodeString(&RegistryPath,&AnsiString,TRUE); - RT_TRACE(COMP_INIT, DBG_LOUD, ("### PlatformWriteBTAntPosDwordRegistry(): RegistryPath = %wZ\n", &RegistryPath)); - - InitializeObjectAttributes(&objectAttributes, - &RegistryPath, - OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, - NULL, - NULL); - - if(STATUS_SUCCESS != (ntStatus = ZwOpenKey(&driverKey, KEY_WRITE, &objectAttributes))) - { - DbgPrint("ZwOpenKey Failed = 0x%x\n", ntStatus); - break; - } - RtlInitUnicodeString(&ValueName, registryName); - - ntStatus = ZwSetValueKey(driverKey,&ValueName,0,REG_DWORD,Value,sizeof(u4Byte)); - - if(STATUS_SUCCESS != ntStatus) - { - DbgPrint("ZwSetValueKey Failed = 0x%x\n", ntStatus); - break; - } - - }while(FALSE); - - if(driverKey) - { - ZwClose(driverKey); - driverKey = NULL; - } - - RtlFreeUnicodeString(&RegistryPath); - return ntStatus; - -} - -#if READ_BT_REGISTRY -NTSTATUS -PlatformReadBTFWLoaderDwordRegistry( - IN PWCHAR registryName, - OUT pu1Byte resultValue) -{ - - OBJECT_ATTRIBUTES objectAttributes = {0}; - HANDLE driverKey = NULL; - NTSTATUS ntStatus = STATUS_SUCCESS; - UNICODE_STRING ValueName; - UNICODE_STRING RegistryPath; - ANSI_STRING AnsiString; - KEY_VALUE_PARTIAL_INFORMATION result; - ULONG resultLength; - - - do - { - RtlInitString(&AnsiString,"\\REGISTRY\\MACHINE\\Software\\Realtek\\Bluetooth\\service"); - RtlAnsiStringToUnicodeString(&RegistryPath,&AnsiString,TRUE); - RT_TRACE(COMP_INIT, DBG_LOUD, ("### PlatformReadBTFWLoaderDwordRegistry(): RegistryPath = %wZ\n", &RegistryPath)); - - InitializeObjectAttributes(&objectAttributes, - &RegistryPath, - OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, - NULL, - NULL); - - if(STATUS_SUCCESS != (ntStatus = ZwOpenKey(&driverKey, KEY_READ, &objectAttributes))) - { - DbgPrint("ZwOpenKey Failed = 0x%x\n", ntStatus); - break; - } - RtlInitUnicodeString(&ValueName, registryName); - - ntStatus = ZwQueryValueKey(driverKey,&ValueName,KeyValuePartialInformation,&result,sizeof(KEY_VALUE_PARTIAL_INFORMATION),&resultLength); - - if(STATUS_SUCCESS != ntStatus) - { - DbgPrint("ZwQueryValueKey Failed = 0x%x\n", ntStatus); - break; - } - memcpy(resultValue,result.Data,sizeof(u4Byte)); - //DbgPrint("Test result:%d Length:%d type:%d\n",*resultValue, result.DataLength, result.Type); - }while(FALSE); - - if(driverKey) - { - ZwClose(driverKey); - driverKey = NULL; - } - - return ntStatus; - -} -#endif - - diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.h b/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.h deleted file mode 100644 index 75561d1a..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.h +++ /dev/null @@ -1,284 +0,0 @@ -#ifndef __INC_NDIS_COMMON_H -#define __INC_NDIS_COMMON_H - - -#define N6_LLC_SIZE 8 -#define MAX_STALL_TIME 50 //us. If the delay time is larger than 50us, it's better to call NdisMSleep - - -#define NDIS_ADAPTER_TYPE RT_SDIO_DEVICE -#define PNDIS_ADAPTER_TYPE PRT_SDIO_DEVICE -#define GET_NDIS_ADAPTER(_Adapter) &_Adapter->NdisSdioDev - -#ifndef MAX_PATH -#define MAX_PATH 260 // From DDK. -#endif // #ifndef MAX_PATH - - -#define REGISTRY(_Adapter, _VAR) (_Adapter->pNdisCommon->##_VAR) - -#define SetRegLdpc(_Adapter, _RegLdpc) (_Adapter->pNdisCommon->RegLdpc= _RegLdpc) -#define SetRegStbc(_Adapter, _RegStbc) (_Adapter->pNdisCommon->RegStbc= _RegStbc) - - -// -// Using following state flag to trace vWiFi and power transaction event for some vWiFi bus BSOD issue. -// 2013.1213 -// -#define DrvStateNull 0 -#define DrvStateNdisInitialized BIT0 -#define DrvStateHwInitialized BIT1 -#define DrvStateHwHalting BIT2 -#define DrvStateHwHalted BIT3 -#define DrvStateMacCreating BIT4 -#define DrvStateMacCreated BIT5 -#define DrvStateMacDeleting BIT6 -#define DrvStateMacDeleted BIT7 - -// -// Following flags are abnormal cases -// -#define DrvStateMacCreate_NO_DO BIT8 -#define DrvStateMacCreate_TMR_FAIL BIT9 -#define DrvStateMacCreate_Fail BIT10 -#define DrvStateMacDelete_NO_DO BIT11 -#define DrvStateMacDelete_TMR_FAIL BIT12 -#define DrvStateMacDelete_Fail BIT13 -#define DrvStateMacCreDel_WI_FAIL BIT14 - -#define DrvStateMacCreatDispatch BIT15 -#define DrvStateMacCreatWait BIT16 - -#define DrvStateNdisReqPended BIT22 -#define DrvStateNdisReqPended_Error0 BIT23 -#define DrvStateMacPendReq_Error0 BIT24 -#define DrvStateMacPendReq_Error1 BIT25 -#define DrvStateMacPendReq_Error2 BIT26 -#define DrvStateResetting BIT27 - -#define DrvStateWI_Error0 BIT28 -#define DrvStateWI_Error1 BIT29 -#define DrvStateWI_Error2 BIT30 -#define DrvStateWI_Error3 BIT31 - -#if DRV_LOG_REGISTRY -#define RT_GET_DRV_STATE(__pAdapter) (GetDefaultAdapter(__pAdapter)->DrvState) -#define RT_GET_DRV_STATE_ERROR(__pAdapter) (GetDefaultAdapter(__pAdapter)->bDrvStateError) -#define RT_CLEAR_DRV_STATE_ERROR(__pAdapter) (GetDefaultAdapter(__pAdapter)->bDrvStateError = FALSE) - -// Reset all driver state for initialization -#define RT_INIT_DRV_STATE(__pAdapter)\ -{\ - u4Byte DrvState;\ - RT_TRACE(COMP_INIT, DBG_TRACE, ("RT_INIT_DRV_STATE: \n"));\ - PlatformAcquireSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\ - GetDefaultAdapter(__pAdapter)->DrvState= DrvStateNull;\ - DrvState = RT_GET_DRV_STATE(__pAdapter);\ - PlatformReleaseSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\ - if(N6WriteRegDriverState(__pAdapter, DrvState) == NDIS_STATUS_FAILURE)\ - {\ - GetDefaultAdapter(__pAdapter)->bDrvStateError = TRUE;\ - }\ -} - -// Set specific driver state -#define RT_SET_DRV_STATE(__pAdapter, __StaBits) \ -{ \ - u4Byte DrvState;\ - RT_TRACE(COMP_INIT, DBG_TRACE, ("RT_SET_DRV_STATE: %#x\n", __StaBits));\ - PlatformAcquireSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\ - (GetDefaultAdapter(__pAdapter))->DrvState |= ((RT_DF_TYPE)(__StaBits));\ - DrvState = RT_GET_DRV_STATE(__pAdapter);\ - PlatformReleaseSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\ - if(N6WriteRegDriverState(__pAdapter, DrvState) == NDIS_STATUS_FAILURE)\ - {\ - GetDefaultAdapter(__pAdapter)->bDrvStateError = TRUE;\ - }\ -} - -// Clear corresponding driver state -#define RT_CLEAR_DRV_STATE(__pAdapter, __StaBits)\ -{\ - u4Byte DrvState;\ - RT_TRACE(COMP_INIT, DBG_TRACE, ("RT_CLEAR_DRV_STATE: %#x\n", __StaBits));\ - PlatformAcquireSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\ - (GetDefaultAdapter(__pAdapter))->DrvState &= (~((RT_DF_TYPE)(__StaBits)));\ - DrvState = RT_GET_DRV_STATE(__pAdapter);\ - PlatformReleaseSpinLock(__pAdapter, RT_DRV_STATE_SPINLOCK);\ - if(N6WriteRegDriverState(__pAdapter, DrvState) == NDIS_STATUS_FAILURE)\ - {\ - GetDefaultAdapter(__pAdapter)->bDrvStateError = TRUE;\ - }\ -} -#else -#define RT_GET_DRV_STATE(__pAdapter) 0 -#define RT_GET_DRV_STATE_ERROR(__pAdapter) 0 -#define RT_CLEAR_DRV_STATE_ERROR(__pAdapter) -#define RT_INIT_DRV_STATE(__pAdapter) -#define RT_SET_DRV_STATE(__pAdapter, __StaBits) -#define RT_CLEAR_DRV_STATE(__pAdapter, __StaBits) -#endif - - -typedef struct __RT_THREAD_PLATFORM_EXT{ - NDIS_EVENT CompleteEvent; - NDIS_EVENT TrigerEvent; - u4Byte Period; - NDIS_SPIN_LOCK Lock; - - - PKTHREAD Thread; - -}RT_THREAD_PLATFORM_EXT, *PRT_THREAD_PLATFORM_EXT; - - -// Add for windwos common binary. -typedef struct _NIC_MUTEX -{ - ULONG Counter; - ULONG ModuleAndLine; // useful for debugging - -} NIC_MUTEX, *PNIC_MUTEX; - -// -// 2011/02/25 MH Moev the global spin lock and and mutex for global variable between two adapter -// we need to define all the MAC and structure for dedicated OS. -// -// Add for 92D Dual MAC communication protection. -typedef struct GLOBAL_SPINLOCK -{ - ULONG SpinlockCounter; - - KIRQL SpinlockIrql; - -} GLOBAL_SPINLOCK, *PGLOBAL_SPINLOCK; - - - -// -// Global Mutex: can only be used at PASSIVE level. -// -#define ACQUIRE_GLOBAL_MUTEX(_MutexCounter) \ -{ \ - while (NdisInterlockedIncrement((PULONG)&(_MutexCounter)) != 1)\ - { \ - NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \ - NdisMSleep(10000); \ - } \ -} - -#define RELEASE_GLOBAL_MUTEX(_MutexCounter) \ -{ \ - NdisInterlockedDecrement((PULONG)&(_MutexCounter)); \ -} - -// -// Global Spinlock: can be used at PASSIVE and DISPATCH level. -// - -#define ACQUIRE_GLOBAL_SPINLOCK(_pSpinlock) \ -{ \ - KIRQL TempIrql; \ - TempIrql = KeGetCurrentIrql(); \ - if (TempIrql == PASSIVE_LEVEL) \ - { \ - KeRaiseIrql(DISPATCH_LEVEL, &TempIrql); \ - } \ - while (NdisInterlockedIncrement((PULONG)&((_pSpinlock)->SpinlockCounter)) != 1)\ - { \ - NdisInterlockedDecrement((PULONG)&((_pSpinlock)->SpinlockCounter)); \ - NdisStallExecution(40); \ - } \ - (_pSpinlock)->SpinlockIrql = TempIrql; \ -} - -#define RELEASE_GLOBAL_SPINLOCK(_pSpinlock) \ -{ \ - KIRQL TempIrql; \ - TempIrql = (_pSpinlock)->SpinlockIrql; \ - NdisInterlockedDecrement((PULONG)&((_pSpinlock)->SpinlockCounter)); \ - if (TempIrql == PASSIVE_LEVEL) \ - KeLowerIrql(TempIrql); \ -} - - -//=============================================== -// The following is for Windows pIRP definition -//=============================================== -typedef struct _IRP_ENTRY -{ - RT_LIST_ENTRY List; - PIRP pIrp; -}IRP_ENTRY, *PIRP_ENTRY; - - -// -// Data structure used in DbgWorkItem related OID. -// -typedef struct _RT8187DBGWIPARAM -{ - ULONG bDbgActCompleted; - ULONG eDbgActType; - ULONG IoOffset; - ULONG IoValue; - ULONG outLen; - UCHAR outBuf[200]; -}RT8187DBGWIPARAM, *PRT8187DBGWIPARAM; - -//=============================================== - -NDIS_STATUS -NdisStatusFromRtStatus( - IN u4Byte rtStatus - ); - - -VOID -Dot11_UpdateDefaultSetting( - IN PADAPTER pAdapter -); - - -VOID -HT_UpdateDefaultSetting( - IN PADAPTER pAdapter -); - - -VOID -VHT_UpdateDefaultSetting( - IN PADAPTER pAdapter -); - -VOID -PSC_UpdateDefaultSetting( - IN PADAPTER pAdapter -); - -VOID -HAL_UpdateDefaultSetting( - IN PADAPTER pAdapter -); - -NTSTATUS -PlatformReadCommonDwordRegistry( - IN PWCHAR registryName, - OUT pu4Byte Data); - -NTSTATUS -PlatformWriteCommonDwordRegistry( - IN PWCHAR registryName, - IN pu4Byte Data); - -NTSTATUS -PlatformWriteBTAntPosDwordRegistry( - IN PWCHAR registryName, - IN pu4Byte Data); - -NTSTATUS -PlatformReadBTFWLoaderDwordRegistry( - IN PWCHAR registryName, - OUT pu1Byte resultValue); - - -#endif diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.vcxproj b/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.vcxproj deleted file mode 100644 index 70ae9f7b..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisComm.vcxproj +++ /dev/null @@ -1,612 +0,0 @@ - - - - - Win10 Debug - Arm - - - Win10 Debug - Win32 - - - Win10 Debug - x64 - - - Win10 Release - Arm - - - Win10 Release - Win32 - - - Win10 Release - x64 - - - WinBlue Debug - Arm - - - Win8 Debug - Arm - - - WinBlue Release - Arm - - - Win8 Release - Arm - - - WinBlue Debug - Win32 - - - Win8 Debug - Win32 - - - Win7 Debug - Win32 - - - Vista Debug - Win32 - - - WinBlue Release - Win32 - - - Win8 Release - Win32 - - - Win7 Release - Win32 - - - Vista Release - Win32 - - - WinBlue Debug - x64 - - - Win8 Debug - x64 - - - Win7 Debug - x64 - - - Vista Debug - x64 - - - WinBlue Release - x64 - - - Win8 Release - x64 - - - Win7 Release - x64 - - - Vista Release - x64 - - - - WindowsKernelModeDriver10.0 - StaticLibrary - KMDF - - - Win8 Debug - - - - 1.0 - $(Configuration.Replace(' ','')) - $(BUILD_ALT_DIR)\$(Platform)\ - $(BUILD_ALT_DIR)\ - $(SolutionDir)PLATFORM\NdisComm\$(Configuration)\$(Platform)\ - - - - - - {C0A51792-1338-4294-ADAA-EDC4EE30CF05} - - - WindowsV6.3 - True - - - Windows10 - True - Universal - - - Win8 - True - - - WindowsV6.3 - False - - - Windows10 - False - Universal - - - Win8 - False - - - WindowsV6.3 - True - - - Windows10 - True - Universal - - - Win8 - True - - - Win7 - True - - - Vista - True - - - WindowsV6.3 - False - - - Windows10 - False - Universal - - - Win8 - False - - - Win7 - False - - - Vista - False - - - WindowsV6.3 - True - - - Windows10 - True - Universal - - - Win8 - True - - - Win7 - True - - - Vista - True - - - WindowsV6.3 - False - - - Windows10 - False - Universal - - - Win8 - False - - - Win7 - False - - - Vista - False - - - DbgengKernelDebugger - DbgengRemoteDebugger - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x86); - $(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencePath_x86); - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_LibraryPath_x86);$(WindowsSDK_LibraryPath_x86);$(NETFXKitsDir)Lib\um\x86 - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x86); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencePath_arm); - $(VC_LibraryPath_arm);$(WindowsSDK_LibraryPath_arm);$(NETFXKitsDir)Lib\um\arm - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_arm); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencePath_arm); - $(VC_LibraryPath_arm);$(WindowsSDK_LibraryPath_arm);$(NETFXKitsDir)Lib\um\arm - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_arm); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x64); - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64); - - - $(VC_IncludePath);$(WindowsSDK_IncludePath); - $(VC_ReferencesPath_x64); - $(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64 - $(WindowsSDK_MetadataPath); - $(VC_SourcePath); - $(VC_IncludePath);$(WindowsSDK_IncludePath);$(MSBuild_ExecutablePath);$(VC_LibraryPath_x64); - - - - _X86_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - Cdecl - Default - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)COMMON\; - Disabled - Default - false - Neither - false - false - false - true - - - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - false - None - true - true - false - false - false - false - false - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - true - - - false - - - - - $(OutDir)$(TargetName)$(TargetExt) - - - - - true - - - - - false - - - true - Disabled - Default - false - Neither - false - false - false - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)COMMON\; - None - true - _X86_;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - true - - - - - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)COMMON\; - None - true - true - Disabled - Default - false - Neither - false - false - false - _ARM_;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - true - - - $(OutDir)$(TargetName)$(TargetExt) - true - - - false - - - - - true - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)COMMON\; - None - true - true - Disabled - Default - false - Neither - false - false - false - _ARM_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - - - $(OutDir)$(TargetName)$(TargetExt) - true - - - false - - - - - true - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)COMMON\; - None - true - true - Disabled - Default - false - Neither - false - false - false - _X64_;DBG;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - false - Prompt - - - $(OutDir)$(TargetName)$(TargetExt) - - - true - - - false - - - - - true - $(WindowsSdkDir)\Include\km\;$(WindowsSdkDir)\Include\shared\;$(WindowsSdkDir)\Include\wdf\kmdf\1.15\;$(WindowsSdkDir)\Include\km\crt\;$(SolutionDir)HEADER;$(SolutionDir)PLATFORM\NDIS6\;$(SolutionDir)PLATFORM\NdisComm\;$(SolutionDir)PLATFORM\NDIS6\SDIO\;$(SolutionDir)HAL\;$(SolutionDir)HAL\phydm\;$(SolutionDir)HAL\rtl8723B\;$(SolutionDir)HAL\rtl8723B\rtl8723bs\;$(SolutionDir)HAL\phydm\rtl8723b\;$(SolutionDir)COMMON\; - None - true - true - Disabled - Default - false - Neither - false - false - false - _X64_;USE_KLOCKS=1;BINARY_COMPATIBLE=0;NDIS650_MINIPORT=1;NDIS640_MINIPORT=1;NDIS630_MINIPORT=1;NDIS620_MINIPORT=1;NDIS61_MINIPORT=1;NDIS_MINIPORT_DRIVER;%(PreprocessorDefinitions) - false - false - false - false - false - true - false - EnableFastChecks - MultiThreadedDebugDLL - Default - false - true - true - true - NotUsing - Cdecl - Default - false - false - Prompt - false - - - $(OutDir)$(TargetName)$(TargetExt) - - - true - - - false - - - - - - - - - - - - - - - - - - - - - - - $(KIT_SHARED_INC_PATH) - true - - - - - - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.c b/network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.c deleted file mode 100644 index 6b459774..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.c +++ /dev/null @@ -1,1691 +0,0 @@ -#include "Mp_Precomp.h" - -//----------------------------------------------------------------------------- -// Description: -// Callback function of DbgWorkItem. -// -//----------------------------------------------------------------------------- - -// global buf for BT c2h rsp. -u1Byte GLCurBtC2hRsp[20]; -u1Byte GLCurBtStackRsp[100]; - -BT_CTRL_STATUS -ndbg_CheckBtRspStatus( - IN PADAPTER Adapter - ) -{ - BT_CTRL_STATUS retStatus=BT_OP_STATUS_SUCCESS; - PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&GLCurBtC2hRsp[0]; - - switch(pExtC2h->statusCode) - { - case BT_OP_STATUS_SUCCESS: - retStatus = BT_STATUS_BT_OP_SUCCESS; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], BT status : MP_BT_STATUS_SUCCESS\n")); - break; - case BT_OP_STATUS_VERSION_MISMATCH: - retStatus = BT_STATUS_OPCODE_L_VERSION_MISMATCH; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], BT status : MP_BT_STATUS_OPCODE_L_VERSION_MISMATCH\n")); - break; - case BT_OP_STATUS_UNKNOWN_OPCODE: - retStatus = BT_STATUS_UNKNOWN_OPCODE_L; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], BT status : MP_BT_STATUS_UNKNOWN_OPCODE_L\n")); - break; - case BT_OP_STATUS_ERROR_PARAMETER: - retStatus = BT_STATUS_PARAMETER_FORMAT_ERROR_L; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], BT status : MP_BT_STATUS_PARAMETER_FORMAT_ERROR_L\n")); - break; - default: - retStatus = BT_STATUS_UNKNOWN_STATUS_L; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], BT status : MP_BT_STATUS_UNKNOWN_STATUS_L\n")); - break; - } - - return retStatus; -} - -BT_CTRL_STATUS -ndbg_CheckC2hFrame( - IN PADAPTER Adapter, - IN PBT_H2C pH2c - ) -{ - BT_CTRL_STATUS c2hStatus=BT_STATUS_C2H_SUCCESS; - PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&GLCurBtC2hRsp[0]; - - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], C2H rsp hex: \n"), pExtC2h, 6); - - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], statusCode = 0x%x\n", pExtC2h->statusCode)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], retLen = %d\n", pExtC2h->retLen)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], opCodeVer : req/rsp=%d/%d\n", pH2c->opCodeVer, pExtC2h->opCodeVer)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], reqNum : req/rsp=%d/%d\n", pH2c->reqNum, pExtC2h->reqNum)); - if(pExtC2h->reqNum != pH2c->reqNum) - { - c2hStatus = BT_STATUS_C2H_REQNUM_MISMATCH; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! C2H reqNum Mismatch!!\n")); - } - else if(pExtC2h->opCodeVer != pH2c->opCodeVer) - { - c2hStatus = BT_STATUS_OPCODE_L_VERSION_MISMATCH; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! OPCode version L mismatch!!\n")); - } - - return c2hStatus; -} - -BT_CTRL_STATUS -ndbg_SendH2c( - IN PADAPTER Adapter, - IN PBT_H2C pH2c, - IN u2Byte h2cCmdLen - ) -{ - KIRQL OldIrql = KeGetCurrentIrql(); - BT_CTRL_STATUS h2cStatus=BT_STATUS_H2C_SUCCESS; - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(Adapter->ndisDbgCtx); - u1Byte i; - - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], ndbg_SendH2c()=========>\n")); - - PlatformResetEvent(&pDbgCtx->dbgH2cRspEvent); - PlatformResetEvent(&pDbgCtx->dbgBtC2hEvent); - - if(OldIrql == PASSIVE_LEVEL) - { - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], H2C hex: \n"), pH2c, h2cCmdLen); - - for(i=0; ih2cReqNum++; - pDbgCtx->h2cReqNum %= 16; - if(PlatformWaitEvent(&pDbgCtx->dbgH2cRspEvent, 100)) - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Received H2C Rsp Event!!!\n")); - if(PlatformWaitEvent(&pDbgCtx->dbgBtC2hEvent, 500)) - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Received BT C2H Event!!!\n")); - break; - } - else - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! BT C2H Event timeout!!\n")); - h2cStatus = BT_STATUS_H2C_BT_NO_RSP; - } - } - else - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! H2C Rsp Event timeout!!\n")); - h2cStatus = BT_STATUS_H2C_TIMTOUT; - } - } - } - else - { - RT_ASSERT(FALSE, ("[BTDBG], ndbg_SendH2c() can only run under PASSIVE_LEVEL!!\n")); - h2cStatus = BT_STATUS_WRONG_LEVEL; - } - - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], ndbg_SendH2c()<=========\n")); - return h2cStatus; -} - - -BT_CTRL_STATUS -ndbg_BtFwOpCodeProcess( - IN PADAPTER Adapter, - IN u1Byte btFwOpCode, - IN u1Byte opCodeVer, - IN pu1Byte pH2cPar, - IN u1Byte h2cParaLen - ) -{ - u1Byte H2C_Parameter[20] ={0}; - PBT_H2C pH2c=(PBT_H2C)&H2C_Parameter[0]; - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(Adapter->ndisDbgCtx); - u2Byte paraLen=0; - BT_CTRL_STATUS h2cStatus=BT_STATUS_H2C_SUCCESS, c2hStatus=BT_STATUS_C2H_SUCCESS; - BT_CTRL_STATUS retStatus=BT_STATUS_H2C_BT_NO_RSP; - - pH2c->opCode = btFwOpCode; - pH2c->opCodeVer = opCodeVer; - pH2c->reqNum = pDbgCtx->h2cReqNum; - PlatformMoveMemory(&pH2c->buf[0], pH2cPar, h2cParaLen); - - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pH2c->opCode=%d\n", pH2c->opCode)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pH2c->opCodeVer=%d\n", pH2c->opCodeVer)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pH2c->reqNum=%d\n", pH2c->reqNum)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], h2c parameter length=%d\n", h2cParaLen)); - if(h2cParaLen) - { - RT_DISP_DATA(FBT, BT_DBG_STATE, ("[BTDBG], parameters(hex): \n"), &pH2c->buf[0], h2cParaLen); - } - - h2cStatus = ndbg_SendH2c(Adapter, pH2c, h2cParaLen+2); - if(BT_STATUS_H2C_SUCCESS == h2cStatus) - { - // if reach here, it means H2C get the correct c2h response, - c2hStatus = ndbg_CheckC2hFrame(Adapter, pH2c); - if(BT_STATUS_C2H_SUCCESS == c2hStatus) - { - retStatus = ndbg_CheckBtRspStatus(Adapter); - } - else - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! C2H failed for pH2c->opCode=%d\n", pH2c->opCode)); - // check c2h status error, return error status code to upper layer. - retStatus = c2hStatus; - } - } - else - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! H2C failed for pH2c->opCode=%d\n", pH2c->opCode)); - // check h2c status error, return error status code to upper layer. - retStatus = h2cStatus; - } - - return retStatus; -} - -BT_CTRL_STATUS -ndbg_BtStackOpCodeProcess( - IN PADAPTER Adapter, - IN u1Byte dataLen, - IN PVOID pData - ) -{ - KIRQL OldIrql = KeGetCurrentIrql(); - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(Adapter->ndisDbgCtx); - BT_CTRL_STATUS retStatus=BT_STATUS_BT_STACK_NO_RSP; - PBT_STACK_COEX_INFO pStackRsp=(PBT_STACK_COEX_INFO)&GLCurBtStackRsp[0]; - - PlatformResetEvent(&pDbgCtx->dbgBtCoexEvent); - - - if(OldIrql == PASSIVE_LEVEL) - { - if(PlatformWaitEvent(&pDbgCtx->dbgBtCoexEvent, 100)) - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Received BT Coex Event from stack!!!\n")); - retStatus = (BT_CTRL_STATUS)pStackRsp->opStatus; - } - else - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! BT Coex Rsp Event timeout!!\n")); - retStatus = BT_STATUS_BT_STACK_NO_RSP; - } - } - else - retStatus = BT_STATUS_WRONG_LEVEL; - - return retStatus; -} - -VOID -DbgWorkItemCallback( - IN PVOID pContext - ) -{ - PADAPTER pAdapter = (PADAPTER)pContext; - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - - // Execute specified action. - if(pDbgCtx->CurrDbgAct != NULL) - { -#if DBG - u8Byte StartTime, EndTime; - StartTime = PlatformGetCurrentTime(); -#endif - - pDbgCtx->CurrDbgAct(pAdapter); - -#if DBG - EndTime = PlatformGetCurrentTime(); - RT_TRACE(COMP_DBG, DBG_LOUD, - ("DbgActType: %d, time spent: %I64d us\n", - pDbgCtx->DbgActType, (EndTime-StartTime) )); -#endif - } - - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - pDbgCtx->bDbgWorkItemInProgress = FALSE; - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - - if(pDbgCtx->bDbgDrvUnload) - { - PlatformSetEvent( &(pDbgCtx->DbgWorkItemEvent) ); - } -} - -//----------------------------------------------------------------------------- -// Description: -// Callback function of a workitem for IO. -// -//----------------------------------------------------------------------------- -VOID -DbgIoCallback( - IN PVOID Context - ) -{ - PADAPTER pAdapter = (PADAPTER)Context; - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - PRT_SDIO_DEVICE pDevice = GET_RT_SDIO_DEVICE(pAdapter); - - RT_ASSERT((KeGetCurrentIrql() == PASSIVE_LEVEL), - ("DbgIoCallback(): not in PASSIVE_LEVEL!\n")); - - switch(pDbgCtx->DbgActType) - { - // - // The following IO items are for RTL8192SU purpose. - // These are just instead of CMD I/O case to compatible Command Line Utility. - // 2008.09.02. - // - case DBG_WRITE_MAC_1BYTE: - if( IS_BB_REG_OFFSET_92S(pDbgCtx->DbgIoOffset) ) - { - ULONG mod_val=0; - mod_val = pDbgCtx->DbgIoOffset%4; - if(mod_val) - pDbgCtx->DbgIoOffset -= mod_val; - PHY_SetBBReg(pAdapter, pDbgCtx->DbgIoOffset, (u4Byte)(bMaskByte0<<(8*mod_val)), pDbgCtx->DbgIoValue); - } - else - { - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_LOCAL) - {// Local REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - PlatformEFSdioLocalCmd52Write1Byte(pAdapter, pDbgCtx->DbgIoOffset, (u1Byte)(pDbgCtx->DbgIoValue)); - else - PlatformEFSdioLocalCmd53Write1Byte(pAdapter, pDbgCtx->DbgIoOffset, (u1Byte)(pDbgCtx->DbgIoValue)); - } - else - { // IO REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - PlatformEFSdioCmd52Write1Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 1, pDbgCtx->DbgIoOffset, (u1Byte)(pDbgCtx->DbgIoValue)); - else - PlatformEFIOWrite1Byte(pAdapter, pDbgCtx->DbgIoOffset, (u1Byte)(pDbgCtx->DbgIoValue)); - } - } - break; - - case DBG_WRITE_MAC_2BYTE: - if( IS_BB_REG_OFFSET_92S(pDbgCtx->DbgIoOffset) ) - { - ULONG mod_val=0; - mod_val = pDbgCtx->DbgIoOffset%4; - if(mod_val) - pDbgCtx->DbgIoOffset -= mod_val; - PHY_SetBBReg(pAdapter, pDbgCtx->DbgIoOffset, (bMaskLWord<<(8*mod_val)), pDbgCtx->DbgIoValue); - } - else - { - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_LOCAL) - {// Local REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - PlatformEFSdioLocalCmd52Write2Byte(pAdapter, pDbgCtx->DbgIoOffset, (u2Byte)(pDbgCtx->DbgIoValue)); - else - PlatformEFSdioLocalCmd53Write2Byte(pAdapter, pDbgCtx->DbgIoOffset, (u2Byte)(pDbgCtx->DbgIoValue)); - } - else - { // IO REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - PlatformEFSdioCmd52Write2Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 1, pDbgCtx->DbgIoOffset, (u2Byte)(pDbgCtx->DbgIoValue)); - else - PlatformEFIOWrite2Byte(pAdapter, pDbgCtx->DbgIoOffset, (u2Byte)(pDbgCtx->DbgIoValue)); - } - } - break; - - case DBG_WRITE_MAC_4BYTE: - if( IS_BB_REG_OFFSET_92S(pDbgCtx->DbgIoOffset) ) - PHY_SetBBReg(pAdapter, pDbgCtx->DbgIoOffset, bMaskDWord, pDbgCtx->DbgIoValue); - else - { - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_LOCAL) - {// Local REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - PlatformEFSdioLocalCmd52Write4Byte(pAdapter, pDbgCtx->DbgIoOffset, (u4Byte)(pDbgCtx->DbgIoValue)); - else - PlatformEFSdioLocalCmd53Write4Byte(pAdapter, pDbgCtx->DbgIoOffset, (u4Byte)(pDbgCtx->DbgIoValue)); - } - else - { // IO REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - PlatformEFSdioCmd52Write4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 1, pDbgCtx->DbgIoOffset, (u4Byte)(pDbgCtx->DbgIoValue)); - else - PlatformEFIOWrite4Byte(pAdapter, pDbgCtx->DbgIoOffset, (u4Byte)(pDbgCtx->DbgIoValue)); - } - } - break; - - case DBG_READ_MAC_1BYTE: - if( IS_BB_REG_OFFSET_92S(pDbgCtx->DbgIoOffset) ) - { - ULONG mod_val=0; - mod_val = pDbgCtx->DbgIoOffset%4; - if(mod_val) - pDbgCtx->DbgIoOffset -= mod_val; - pDbgCtx->DbgIoValue = PHY_QueryBBReg(pAdapter, pDbgCtx->DbgIoOffset, bMaskDWord); - pDbgCtx->DbgIoValue &= (bMaskByte0<<(8*mod_val)); - pDbgCtx->DbgIoValue = (pDbgCtx->DbgIoValue>>(8*mod_val)); - } - else - { - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_LOCAL) - {// Local REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - pDbgCtx->DbgIoValue = PlatformEFSdioLocalCmd52Read1Byte(pAdapter, pDbgCtx->DbgIoOffset); - else - pDbgCtx->DbgIoValue = PlatformEFSdioLocalCmd53Read1Byte(pAdapter, pDbgCtx->DbgIoOffset); - } - else - { // IO REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - pDbgCtx->DbgIoValue = PlatformEFSdioCmd52Read1Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 1,pDbgCtx->DbgIoOffset); - else - pDbgCtx->DbgIoValue = PlatformEFIORead1Byte(pAdapter, pDbgCtx->DbgIoOffset); - } - } - break; - - case DBG_READ_MAC_2BYTE: - if( IS_BB_REG_OFFSET_92S(pDbgCtx->DbgIoOffset) ) - { - ULONG mod_val=0; - mod_val = pDbgCtx->DbgIoOffset%4; - if(mod_val) - pDbgCtx->DbgIoOffset -= mod_val; - pDbgCtx->DbgIoValue = PHY_QueryBBReg(pAdapter, pDbgCtx->DbgIoOffset, bMaskDWord); - pDbgCtx->DbgIoValue &= (bMaskLWord<<(8*mod_val)); - pDbgCtx->DbgIoValue = (pDbgCtx->DbgIoValue>>(8*mod_val)); - } - else - { - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_LOCAL) - {// Local REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - pDbgCtx->DbgIoValue = PlatformEFSdioLocalCmd52Read2Byte(pAdapter, pDbgCtx->DbgIoOffset); - else - pDbgCtx->DbgIoValue = PlatformEFSdioLocalCmd53Read2Byte(pAdapter, pDbgCtx->DbgIoOffset); - } - else - { // IO REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - pDbgCtx->DbgIoValue = PlatformEFSdioCmd52Read2Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 1,pDbgCtx->DbgIoOffset); - else - pDbgCtx->DbgIoValue = PlatformEFIORead2Byte(pAdapter, pDbgCtx->DbgIoOffset); - } - } - break; - - case DBG_READ_MAC_4BYTE: - if( IS_BB_REG_OFFSET_92S(pDbgCtx->DbgIoOffset) ) - pDbgCtx->DbgIoValue = PHY_QueryBBReg(pAdapter, pDbgCtx->DbgIoOffset, bMaskDWord); - else - { - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_LOCAL) - {// Local REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - pDbgCtx->DbgIoValue = PlatformEFSdioLocalCmd52Read4Byte(pAdapter, pDbgCtx->DbgIoOffset); - else - pDbgCtx->DbgIoValue = PlatformEFSdioLocalCmd53Read4Byte(pAdapter, pDbgCtx->DbgIoOffset); - } - else - { // IO REG - if(pDevice->SdioRegDbgCtrl & SDIO_REG_CTRL_CMD52) - pDbgCtx->DbgIoValue = PlatformEFSdioCmd52Read4Byte(pAdapter, WLAN_IOREG_DEVICE_ID, 1,pDbgCtx->DbgIoOffset); - else - pDbgCtx->DbgIoValue = PlatformEFIORead4Byte(pAdapter, pDbgCtx->DbgIoOffset); - } - } - break; - - case DBG_READ_BB_OFDM: - case DBG_READ_BB_CCK: - pDbgCtx->DbgIoValue = PHY_QueryBBReg(pAdapter, pDbgCtx->DbgIoOffset, bMaskDWord); - break; - - case DBG_WRITE_BB_OFDM: - case DBG_WRITE_BB_CCK: - PHY_SetBBReg(pAdapter, pDbgCtx->DbgIoOffset, bMaskDWord, pDbgCtx->DbgIoValue); - break; - - case DBG_READ_RF: - pDbgCtx->DbgIoValue = PHY_QueryRFReg(pAdapter, (u1Byte)pDbgCtx->DbgRfPath, pDbgCtx->DbgIoOffset, bRFRegOffsetMask); - break; - - case DBG_WRITE_RF: - PHY_SetRFReg(pAdapter, (u1Byte)pDbgCtx->DbgRfPath, pDbgCtx->DbgIoOffset, bRFRegOffsetMask, pDbgCtx->DbgIoValue); - break; - - case DBG_READ_EEPROM_1BYTE: - pDbgCtx->DbgIoValue = ReadEEprom( pAdapter, (u2Byte)(pDbgCtx->DbgIoOffset>>1) ); - if(pDbgCtx->DbgIoOffset % 2 == 1) - { - pDbgCtx->DbgIoValue >>= 8; - } - pDbgCtx->DbgIoValue &= 0xff; - break; - - case DBG_READ_EEPROM_2BYTE: - pDbgCtx->DbgIoValue = ReadEEprom( pAdapter, (u2Byte)(pDbgCtx->DbgIoOffset>>1) ); - pDbgCtx->DbgIoValue &= 0xffff; - break; - - case DBG_WRITE_EEPROM_1BYTE: - { - USHORT usTmp = 0; - - usTmp = ReadEEprom( pAdapter, (u2Byte)(pDbgCtx->DbgIoOffset>>1) ); - if(pDbgCtx->DbgIoOffset % 2 == 1) - { - usTmp &= 0x00ff; // Clear high byte of the word. - usTmp |= (pDbgCtx->DbgIoValue << 8); - } - else - { - usTmp &= 0xff00; // Clear low byte of the word. - usTmp |= (pDbgCtx->DbgIoValue); - } - WriteEEprom(pAdapter, (u1Byte)(pDbgCtx->DbgIoOffset>>1), usTmp); - } - break; - - case DBG_WRITE_EEPROM_2BYTE: - WriteEEprom(pAdapter, (u1Byte)(pDbgCtx->DbgIoOffset>>1), (u2Byte)(pDbgCtx->DbgIoValue&0xffff)); - break; - -#if 0 - case DBG_OUT_CMD: - { - u4Byte BufferLengthRead; - u1Byte i=0; - - PlatformUsbSyncVendorRequest( - pAdapter, - TRUE, // bWrite - 0x05, // bReq - 0, // wValue - 0x8051, // wIndex - (pu1Byte)&(pDbgCtx->DbgIoBuf), // pBuffer - pDbgCtx->DbgIoValue, // BufferLength - &BufferLengthRead // pBufferLengthRead - ); - } - break; -#endif - - case DBG_WRITE_EFUSE_1BYTE: - EFUSE_ShadowWrite(pAdapter, 1, (u2Byte)pDbgCtx->DbgIoOffset, (UINT32)pDbgCtx->DbgIoValue); - break; - - case DBG_READ_EFUSE_1BYTE: - EFUSE_MaskedShadowRead(pAdapter, 1, (u2Byte)(pDbgCtx->DbgIoOffset), (UINT32 *)&pDbgCtx->DbgIoValue); - break; - - case DBG_READ_EFUSE_2BYTE: - EFUSE_MaskedShadowRead(pAdapter, 2, (u2Byte)(pDbgCtx->DbgIoOffset), (UINT32 *)&pDbgCtx->DbgIoValue); - break; - - case DBG_READ_EFUSE_4BYTE: - EFUSE_MaskedShadowRead(pAdapter, 4, (u2Byte)(pDbgCtx->DbgIoOffset), (UINT32 *)&pDbgCtx->DbgIoValue); - break; - - case DBG_UPDATE_EFUSE: - pDbgCtx->DbgIoValue = EFUSE_ShadowUpdate(pAdapter, FALSE); - break; - - case DBG_WRITE_BT_EFUSE_1BYTE: - EFUSE_ShadowWriteBT(pAdapter, 1, (u2Byte)pDbgCtx->DbgIoOffset, (UINT32)pDbgCtx->DbgIoValue); - break; - - case DBG_READ_BT_EFUSE_1BYTE: - EFUSE_ShadowReadBT(pAdapter, 1, (u2Byte)(pDbgCtx->DbgIoOffset), (UINT32 *)&pDbgCtx->DbgIoValue); - break; - - case DBG_READ_BT_EFUSE_2BYTE: - EFUSE_ShadowReadBT(pAdapter, 2, (u2Byte)(pDbgCtx->DbgIoOffset), (UINT32 *)&pDbgCtx->DbgIoValue); - break; - - case DBG_READ_BT_EFUSE_4BYTE: - EFUSE_ShadowReadBT(pAdapter, 4, (u2Byte)(pDbgCtx->DbgIoOffset), (UINT32 *)&pDbgCtx->DbgIoValue); - break; - - case DBG_UPDATE_BT_EFUSE: - pDbgCtx->DbgIoValue = EFUSE_ShadowUpdateBT(pAdapter, FALSE); - break; - - case DBG_SWITCH_ANTENNA: - pAdapter->HalFunc.SetTxAntennaHandler(pAdapter, (u1Byte)pDbgCtx->DbgIoValue); - break; - - case DBG_SET_TXPWR_FOR_ALL_RATE: - HAL_SetTxPowerForAllRate(pAdapter, pDbgCtx->DbgIoValue); - break; - - default: - break; - } -} - -//----------------------------------------------------------------------------- -// Description: -// Initialize debugging realted information or resource. -// It should be called in context of MiniportInitialize(). -// -//----------------------------------------------------------------------------- -VOID -NDBG_Init( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(pAdapter->ndisDbgCtx); - - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], NDBG_Init()\n")); - - pDbgCtx->bDbgDrvUnload = FALSE; - - PlatformInitializeEvent(&(pDbgCtx->DbgWorkItemEvent)); - PlatformInitializeEvent(&pDbgCtx->dbgH2cRspEvent); - PlatformInitializeEvent(&pDbgCtx->dbgBtC2hEvent); - PlatformInitializeEvent(&pDbgCtx->dbgBtCoexEvent); - PlatformInitializeSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - PlatformInitializeWorkItem( - pAdapter, - &(pDbgCtx->DbgWorkItem), - (RT_WORKITEM_CALL_BACK)DbgWorkItemCallback, - (PVOID)pAdapter, - "DbgWorkItem"); - - pDbgCtx->bDbgWorkItemInProgress = FALSE; - pDbgCtx->CurrDbgAct = NULL; -} - -//----------------------------------------------------------------------------- -// Description: -// DeInitialize for debugging realted resource. -// It should be called in context of MiniportHalt(). -// -//----------------------------------------------------------------------------- -VOID -NDBG_Halt( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], NDBG_Halt()\n")); - - pDbgCtx->bDbgDrvUnload = TRUE; - - PlatformFreeWorkItem( &(pDbgCtx->DbgWorkItem) ); - - if(pDbgCtx->bDbgWorkItemInProgress) - { - PlatformWaitEvent(&(pDbgCtx->DbgWorkItemEvent), 2000); - } - - PlatformFreeSpinLock(pAdapter, RT_DBG_SPIN_LOCK); -} - -//----------------------------------------------------------------------------- -// Description: -// Read MAC register. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgReadMacReg( - IN PADAPTER Adapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth - ) -{ - PADAPTER pAdapter; - PRT_NDIS_DBG_CONTEXT pDbgCtx; - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - if(Adapter->bSWInitReady) - pAdapter=GetDefaultAdapter(Adapter); - else - pAdapter=Adapter; - - pDbgCtx = &(pAdapter->ndisDbgCtx); - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_READ_MAC_1BYTE; - break; - - case 2: - ulIoType = DBG_READ_MAC_2BYTE; - break; - - case 4: - ulIoType = DBG_READ_MAC_4BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgReadMacReg(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = 0xffffffff; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Write MAC register. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgWriteMacReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_WRITE_MAC_1BYTE; - break; - - case 2: - ulIoType = DBG_WRITE_MAC_2BYTE; - break; - - case 4: - ulIoType = DBG_WRITE_MAC_4BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgWriteMacReg(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = ulRegValue; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Read BB register. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgReadBbReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulBeOFDM - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - if(ulBeOFDM == 1) - { - ulIoType = DBG_READ_BB_OFDM; - } - else - { - ulIoType = DBG_READ_BB_CCK; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgReadBbReg(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = 0xffffffff; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Write BB register. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgWriteBbReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulBeOFDM, - IN ULONG ulRegValue - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - if(ulBeOFDM == 1) - { - ulIoType = DBG_WRITE_BB_OFDM; - } - else - { - ulIoType = DBG_WRITE_BB_CCK; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgWriteBbReg(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = ulRegValue; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Read RF register. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgReadRfReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - ULONG RF_PATH=0, INulRegOffset=0; - - ulIoType = DBG_READ_RF; - RF_PATH = (ulRegDataWidth >> 4); // Get RF path - INulRegOffset = ulRegOffset & 0x0fff; - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgReadRfReg(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = 0xffffffff; - pDbgCtx->DbgRfPath = RF_PATH; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Write RF register. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgWriteRfReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType, RF_PATH, INulRegOffset, INulRegValue; - - ulIoType = DBG_WRITE_RF; - RF_PATH = (ulRegOffset >> 12); - INulRegOffset = ulRegOffset & 0xfff; //[11:0] - INulRegValue = ulRegValue & bRFRegOffsetMask; - - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgWriteRfReg(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = INulRegOffset; - pDbgCtx->DbgIoValue = INulRegValue; - pDbgCtx->DbgRfPath = RF_PATH; - - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Read EEPROM for OID_RT_PRO_READ_EEPROM. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgReadEeprom( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_READ_EEPROM_1BYTE; - break; - - case 2: - ulIoType = DBG_READ_EEPROM_2BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgReadEeprom(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = 0xffffffff; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - - -//----------------------------------------------------------------------------- -// Description: -// Write EEPROM for OID_RT_PRO_WRITE_EEPROM. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgWriteEeprom( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_WRITE_EEPROM_1BYTE; - break; - - case 2: - ulIoType = DBG_WRITE_EEPROM_2BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip Pro8187IoCallback(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = ulRegValue; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - - -//----------------------------------------------------------------------------- -// Description: -// 87S-USB Out Command. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgOutCmd( - IN PADAPTER pAdapter, - IN PUCHAR ulOutCmd, - IN ULONG ulOutCmdWidth - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - ULONG i=0; - - ulIoType = DBG_OUT_CMD; - - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip Pro8187IoCallback(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - PlatformZeroMemory(&pDbgCtx->DbgIoBuf, 64); - pDbgCtx->DbgIoOffset = 0; - - pDbgCtx->DbgIoValue = ulOutCmdWidth; //use DbgIoValue to indicate OutCmd length - PlatformMoveMemory(&pDbgCtx->DbgIoBuf, ulOutCmd, ulOutCmdWidth); - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - - return bResult; -} - -//----------------------------------------------------------------------------- -// Description: -// Read EEPROM for OID_RT_PRO_READ_EFUSE. -// Added by Roger, 2008.11.10. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgReadEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_READ_EFUSE_1BYTE; - break; - - case 2: - ulIoType = DBG_READ_EFUSE_2BYTE; - break; - - case 4: - ulIoType = DBG_READ_EFUSE_4BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgReadEeprom(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = 0xffffffff; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - - -//----------------------------------------------------------------------------- -// Description: -// Write EEPROM for OID_RT_PRO_WRITE_EFUSE. -// Added by Roger, 2008.11.10. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgWriteEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_WRITE_EFUSE_1BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip Pro8187IoCallback(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = ulRegValue; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} -//----------------------------------------------------------------------------- -// Description: -// Write EEPROM for OID_RT_PRO_WRITE_EFUSE. -// Added by Roger, 2008.11.10. -// -//----------------------------------------------------------------------------- -BOOLEAN -DbgUpdateEFuse( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - ulIoType = DBG_UPDATE_EFUSE; - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip Pro8187IoCallback(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -BOOLEAN -DbgReadBTEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_READ_BT_EFUSE_1BYTE; - break; - - case 2: - ulIoType = DBG_READ_BT_EFUSE_2BYTE; - break; - - case 4: - ulIoType = DBG_READ_BT_EFUSE_4BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgReadBTEFuse(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = 0xffffffff; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -BOOLEAN -DbgWriteBTEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - switch(ulRegDataWidth) - { - case 1: - ulIoType = DBG_WRITE_BT_EFUSE_1BYTE; - break; - - default: - bResult = FALSE; - break; - } - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgWriteBTEFuse(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoOffset = ulRegOffset; - pDbgCtx->DbgIoValue = ulRegValue; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -BOOLEAN -DbgUpdateBTEFuse( - IN PADAPTER pAdapter - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - ulIoType = DBG_UPDATE_BT_EFUSE; - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgUpdateBTEFuse(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -BOOLEAN -DbgSetTxAntenna( - IN PADAPTER pAdapter, - IN u1Byte selectedAntenna - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - ulIoType = DBG_SWITCH_ANTENNA; - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip Pro8187IoCallback(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->DbgIoValue = selectedAntenna; - pDbgCtx->CurrDbgAct = DbgIoCallback; - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -BOOLEAN -DbgSetTxPowerForAllRate( - IN PADAPTER pAdapter, - IN ULONG ulTxPowerData - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - BOOLEAN bResult = TRUE; - ULONG ulIoType; - - - ulIoType = DBG_SET_TXPWR_FOR_ALL_RATE; - - - if(bResult == TRUE) - { - // Perform IO via workitem. - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip DbgSetTxPowerForAllRate(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->DbgIoValue = ulTxPowerData; - - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem) ); - } - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - } - - return bResult; -} - -static BOOLEAN -ndbg_BtControlStart( - IN PADAPTER pAdapter - ) -{ - BOOLEAN bResult = TRUE; - PRT_NDIS_DBG_CONTEXT pDbgCtx = &(pAdapter->ndisDbgCtx); - ULONG ulIoType = DBG_BT_CONTROL; - - PlatformAcquireSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - - if(pDbgCtx->bDbgWorkItemInProgress) - { - RT_ASSERT(FALSE, - ("DbgWorkItem is in progress!, skip Pro8187IoCallback(), IoType: %d.\n", ulIoType)); - bResult = FALSE; - } - else - { - pDbgCtx->bDbgWorkItemInProgress = TRUE; - pDbgCtx->DbgActType = ulIoType; - pDbgCtx->CurrDbgAct = DbgIoCallback; - PlatformScheduleWorkItem( &(pDbgCtx->DbgWorkItem)); - } - - PlatformReleaseSpinLock(pAdapter, RT_DBG_SPIN_LOCK); - - return bResult; -} - -NDIS_STATUS -NDBG_BtControl( - IN PADAPTER pAdapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - PADAPTER pDefAdapter=GetDefaultAdapter(pAdapter); - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(pDefAdapter->ndisDbgCtx); - NDIS_STATUS Status = NDIS_STATUS_SUCCESS; - - if(InformationBufferLength < sizeof(ULONG)) - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! insufficient InformationBufferLength!!\n")); - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG); - } - else - { - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], InformationBuffer: \n"), InformationBuffer, InformationBufferLength); - if(InformationBufferLength <= 100) - { - PlatformMoveMemory(&pDbgCtx->btInBuf[0], InformationBuffer, InformationBufferLength); - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], pDbgCtx->btInBuf: \n"), &pDbgCtx->btInBuf[0], InformationBufferLength); - if(!ndbg_BtControlStart(pDefAdapter)) - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! DBG workitem is under progress!!\n")); - Status = NDIS_STATUS_NOT_ACCEPTED; - } - } - else - { - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Error!! InformationBufferLength should < 100!!\n")); - Status = NDIS_STATUS_INVALID_LENGTH; - } - } - - return Status; -} - -BOOLEAN -NDBG_GetBtFwVersion( - IN PADAPTER pAdapter, - IN pu2Byte pBtRealFwVer, - IN pu1Byte pBtFwVer - ) -{ - PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)&GLCurBtC2hRsp[0]; - pu1Byte pBtRspContent=(pu1Byte)&pExtC2h->buf[0]; - BT_CTRL_STATUS retStatus; - u1Byte h2cParaBuf[6] ={0}; - u1Byte h2cParaLen=0; - u1Byte btOpcode, btFwVer; - u1Byte btOpcodeVer=0; - u2Byte btRealFwVer=0, realStatus=0; - pu2Byte pu2Tmp; - - // Get BT FW version - // fill h2c parameters - btOpcode = BT_LO_OP_GET_BT_VERSION; - // execute h2c and check respond c2h from bt fw is correct or not - retStatus = ndbg_BtFwOpCodeProcess(pAdapter, btOpcode, btOpcodeVer, &h2cParaBuf[0], h2cParaLen); - // ckeck bt return status. - if(BT_STATUS_BT_OP_SUCCESS != retStatus) - { - realStatus = ((btOpcode<<8)|retStatus); - *pBtRealFwVer = 0xffff; - *pBtFwVer = 0xff; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Query BT fw version fail, status code=0x%x!!!\n", realStatus)); - return FALSE; - } - else - { - pu2Tmp = (pu2Byte)&pBtRspContent[0]; - btRealFwVer = *pu2Tmp; - btFwVer = pExtC2h->buf[2]; - *pBtRealFwVer = btRealFwVer; - *pBtFwVer = btFwVer; - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], Query BT fw version successful!! btRealFwVer=0x%x, btFwVer=0x%x\n", btRealFwVer, btFwVer)); - return TRUE; - } -} - -VOID -NDBG_FwC2hBtControl( - IN PADAPTER Adapter, - IN pu1Byte tmpBuf, - IN u1Byte length - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(Adapter->ndisDbgCtx); - PBT_EXT_C2H pExtC2h=(PBT_EXT_C2H)tmpBuf; - - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], NDBG_FwC2hBtControl(), hex: \n"), - tmpBuf, length); - - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pExtC2h->extendId=0x%x\n", pExtC2h->extendId)); - switch(pExtC2h->extendId) - { - case EXT_C2H_WIFI_FW_ACTIVE_RSP: - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], EXT_C2H_WIFI_FW_ACTIVE_RSP\n")); - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], pExtC2h->buf hex: \n"), - &pExtC2h->buf[0], (length-3)); - PlatformSetEvent(&pDbgCtx->dbgH2cRspEvent); - break; - case EXT_C2H_TRIG_BY_BT_FW: - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], EXT_C2H_TRIG_BY_BT_FW\n")); - PlatformMoveMemory(&GLCurBtC2hRsp[0], tmpBuf, length); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pExtC2h->statusCode=0x%x\n", pExtC2h->statusCode)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pExtC2h->retLen=0x%x\n", pExtC2h->retLen)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pExtC2h->opCodeVer=0x%x\n", pExtC2h->opCodeVer)); - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pExtC2h->reqNum=0x%x\n", pExtC2h->reqNum)); - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], pExtC2h->buf hex: \n"), - &pExtC2h->buf[0], (length-3)); - PlatformSetEvent(&pDbgCtx->dbgBtC2hEvent); - break; - default: - break; - } -} - -VOID -NDBG_StackBtCoexNotify( - IN PADAPTER Adapter, - IN u1Byte stackOpCode, - IN u1Byte stackOpStatus, - IN pu1Byte tmpBuf, - IN u1Byte length - ) -{ - PRT_NDIS_DBG_CONTEXT pDbgCtx=&(Adapter->ndisDbgCtx); - PBT_STACK_COEX_INFO pStackRsp=(PBT_STACK_COEX_INFO)&GLCurBtStackRsp[0]; - - pStackRsp->opCode = stackOpCode; - pStackRsp->opStatus = stackOpStatus; - pStackRsp->bufLen = length; - if(length) - { - PlatformMoveMemory(&pStackRsp->buf[0], tmpBuf, length); - RT_DISP_DATA(FBT, BT_DBG_CONTENT, ("[BTDBG], NDBG_StackBtCoexNotify(), hex: \n"), - tmpBuf, length); - } - RT_DISP(FBT, BT_DBG_STATE, ("[BTDBG], pStackRsp->opCode=0x%x, pStackRsp->opStatus=0x%x\n", - pStackRsp->opCode, pStackRsp->opStatus)); - PlatformSetEvent(&pDbgCtx->dbgBtCoexEvent); -} - - diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.h b/network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.h deleted file mode 100644 index 48e77aa6..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisDbg.h +++ /dev/null @@ -1,434 +0,0 @@ -#ifndef __INC_NDIS_DBG_H -#define __INC_NDIS_DBG_H - - -#define BT_H2C_MAX_RETRY 1 -#define BT_MAX_C2H_LEN 20 - -typedef enum _RTL_EXT_C2H_EVT -{ - EXT_C2H_WIFI_FW_ACTIVE_RSP = 0, - EXT_C2H_TRIG_BY_BT_FW = 1, - MAX_EXT_C2HEVENT -}RTL_EXT_C2H_EVT; - - -// OP codes definition between the user layer and driver -typedef enum _BT_CTRL_OPCODE_UPPER{ - BT_UP_OP_BT_READY = 0x00, - BT_UP_OP_BT_SET_MODE = 0x01, - BT_UP_OP_BT_SET_TX_RX_PARAMETER = 0x02, - BT_UP_OP_BT_SET_GENERAL = 0x03, - BT_UP_OP_BT_GET_GENERAL = 0x04, - BT_UP_OP_BT_TEST_CTRL = 0x05, - BT_UP_OP_MAX -}BT_CTRL_OPCODE_UPPER,*PBT_CTRL_OPCODE_UPPER; - -typedef enum _BT_SET_GENERAL{ - BT_GSET_REG = 0x00, - BT_GSET_RESET = 0x01, - BT_GSET_TARGET_BD_ADDR = 0x02, - BT_GSET_TX_PWR_FINETUNE = 0x03, - BT_GSET_TRACKING_INTERVAL = 0x04, - BT_GSET_THERMAL_METER = 0x05, - BT_GSET_CFO_TRACKING = 0x06, - BT_GSET_ANT_DETECTION = 0x07, - BT_GSET_MAX -}BT_SET_GENERAL,*PBT_SET_GENERAL; - -typedef enum _BT_GET_GENERAL{ - BT_GGET_REG = 0x00, - BT_GGET_STATUS = 0x01, - BT_GGET_REPORT = 0x02, - BT_GGET_AFH_MAP = 0x03, - BT_GGET_AFH_STATUS = 0x04, - BT_GGET_IQK_FLOW = 0x05, - BT_GGET_IQK_RESULT = 0x06, - BT_GGET_MAX -}BT_GET_GENERAL,*PBT_GET_GENERAL; - -// definition for BT_UP_OP_BT_SET_GENERAL -typedef enum _BT_REG_TYPE{ - BT_REG_RF = 0, - BT_REG_MODEM = 1, - BT_REG_BLUEWIZE = 2, - BT_REG_VENDOR = 3, - BT_REG_LE = 4, - BT_REG_MAX -}BT_REG_TYPE,*PBT_REG_TYPE; - -// definition for BT_LO_OP_GET_AFH_MAP -typedef enum _BT_AFH_MAP_TYPE{ - BT_AFH_MAP_RESULT = 0, - BT_AFH_MAP_WIFI_PSD_ONLY = 1, - BT_AFH_MAP_WIFI_CH_BW_ONLY = 2, - BT_AFH_MAP_BT_PSD_ONLY = 3, - BT_AFH_MAP_HOST_CLASSIFICATION_ONLY = 4, - BT_AFH_MAP_MAX -}BT_AFH_MAP_TYPE,*PBT_AFH_MAP_TYPE; - -// definition for BT_UP_OP_BT_GET_GENERAL -typedef enum _BT_REPORT_TYPE{ - BT_REPORT_RX_PACKET_CNT = 0, - BT_REPORT_RX_ERROR_BITS = 1, - BT_REPORT_RSSI = 2, - BT_REPORT_CFO_HDR_QUALITY = 3, - BT_REPORT_CONNECT_TARGET_BD_ADDR = 4, - BT_REPORT_MAX -}BT_REPORT_TYPE,*PBT_REPORT_TYPE; - - -//OP codes definition between driver and bt fw -typedef enum _BT_CTRL_OPCODE_LOWER{ - BT_LO_OP_GET_BT_VERSION = 0x00, - BT_LO_OP_RESET = 0x01, - BT_LO_OP_TEST_CTRL = 0x02, - BT_LO_OP_SET_BT_MODE = 0x03, - BT_LO_OP_SET_CHNL_TX_GAIN = 0x04, - BT_LO_OP_SET_PKT_TYPE_LEN = 0x05, - BT_LO_OP_SET_PKT_CNT_L_PL_TYPE = 0x06, - BT_LO_OP_SET_PKT_CNT_H_PKT_INTV = 0x07, - BT_LO_OP_SET_PKT_HEADER = 0x08, - BT_LO_OP_SET_WHITENCOEFF = 0x09, - BT_LO_OP_SET_BD_ADDR_L = 0x0a, - BT_LO_OP_SET_BD_ADDR_H = 0x0b, - BT_LO_OP_WRITE_REG_ADDR = 0x0c, - BT_LO_OP_WRITE_REG_VALUE = 0x0d, - BT_LO_OP_GET_BT_STATUS = 0x0e, - BT_LO_OP_GET_BD_ADDR_L = 0x0f, - BT_LO_OP_GET_BD_ADDR_H = 0x10, - BT_LO_OP_READ_REG = 0x11, - BT_LO_OP_SET_TARGET_BD_ADDR_L = 0x12, - BT_LO_OP_SET_TARGET_BD_ADDR_H = 0x13, - BT_LO_OP_SET_TX_POWER_CALIBRATION = 0x14, - BT_LO_OP_GET_RX_PKT_CNT_L = 0x15, - BT_LO_OP_GET_RX_PKT_CNT_H = 0x16, - BT_LO_OP_GET_RX_ERROR_BITS_L = 0x17, - BT_LO_OP_GET_RX_ERROR_BITS_H = 0x18, - BT_LO_OP_GET_RSSI = 0x19, - BT_LO_OP_GET_CFO_HDR_QUALITY_L = 0x1a, - BT_LO_OP_GET_CFO_HDR_QUALITY_H = 0x1b, - BT_LO_OP_GET_TARGET_BD_ADDR_L = 0x1c, - BT_LO_OP_GET_TARGET_BD_ADDR_H = 0x1d, - BT_LO_OP_GET_AFH_MAP_L = 0x1e, - BT_LO_OP_GET_AFH_MAP_M = 0x1f, - BT_LO_OP_GET_AFH_MAP_H = 0x20, - BT_LO_OP_GET_AFH_STATUS = 0x21, - BT_LO_OP_SET_TRACKING_INTERVAL = 0x22, - BT_LO_OP_SET_THERMAL_METER = 0x23, - BT_LO_OP_SET_CFO_TRACKING = 0x24, - BT_LO_OP_SET_FW_POLICY_REQ = 0x25, - BT_LO_OP_SET_ANT_DETECTION = 0x26, - BT_LO_OP_GET_IQK_FLOW = 0x27, - BT_LO_OP_GET_IQK_RESULT = 0x28, - BT_LO_OP_MAX -}BT_CTRL_OPCODE_LOWER,*PBT_CTRL_OPCODE_LOWER; - -//OP codes definition between driver and bt stack -typedef enum _BT_CTRL_OPCODE_STACK{ - BT_STACK_OP_GET_BT_VERSION = 0x00, - BT_STACK_OP_IGNORE_WLAN_ACTIVE_CTRL = 0x01, - BT_STACK_OP_LNA_CONSTRAIN_CTRL = 0x02, - BT_STACK_OP_BT_POWER_DEC_CTRL = 0x03, - BT_STACK_OP_BT_PSD_MODE_CTRL = 0x04, - BT_STACK_OP_BT_WIFI_BW_CHNL_NOTIFY = 0x05, - BT_STACK_OP_QUERY_BT_AFH_MAP = 0x06, - BT_STACK_OP_BT_REGISTER_ACCESS = 0x07, - BT_STACK_OP_MAX -}BT_CTRL_OPCODE_STACK,*PBT_CTRL_OPCODE_STACK; - - -// return status definition to the user layer -typedef enum _BT_CTRL_STATUS{ - BT_STATUS_SUCCESS = 0x00, // Success - BT_STATUS_BT_OP_SUCCESS = 0x01, // bt fw op execution success - BT_STATUS_H2C_SUCCESS = 0x02, // H2c success - BT_STATUS_H2C_TIMTOUT = 0x03, // H2c timeout - BT_STATUS_H2C_BT_NO_RSP = 0x04, // H2c sent, bt no rsp - BT_STATUS_C2H_SUCCESS = 0x05, // C2h success - BT_STATUS_C2H_REQNUM_MISMATCH = 0x06, // bt fw wrong rsp - BT_STATUS_OPCODE_U_VERSION_MISMATCH = 0x07, // Upper layer OP code version mismatch. - BT_STATUS_OPCODE_L_VERSION_MISMATCH = 0x08, // Lower layer OP code version mismatch. - BT_STATUS_UNKNOWN_OPCODE_U = 0x09, // Unknown Upper layer OP code - BT_STATUS_UNKNOWN_OPCODE_L = 0x0a, // Unknown Lower layer OP code - BT_STATUS_PARAMETER_FORMAT_ERROR_U = 0x0b, // Wrong parameters sent by upper layer. - BT_STATUS_PARAMETER_FORMAT_ERROR_L = 0x0c, // bt fw parameter format is not consistency - BT_STATUS_PARAMETER_OUT_OF_RANGE_U = 0x0d, // uppery layer parameter value is out of range - BT_STATUS_PARAMETER_OUT_OF_RANGE_L = 0x0e, // bt fw parameter value is out of range - BT_STATUS_UNKNOWN_STATUS_L = 0x0f, // bt returned an defined status code - BT_STATUS_UNKNOWN_STATUS_H = 0x10, // driver need to do error handle or not handle-well. - BT_STATUS_WRONG_LEVEL = 0x11, // should be under passive level - BT_STATUS_NOT_IMPLEMENT = 0x12, // op code not implemented yet - BT_STATUS_BT_STACK_OP_SUCCESS = 0x13, // bt stack op execution success - BT_STATUS_BT_STACK_NOT_SUPPORT = 0x14, // stack version not support this. - BT_STATUS_BT_STACK_SEND_HCI_EVENT_FAIL = 0x15, // send hci event fail - BT_STATUS_BT_STACK_NOT_BIND = 0x16, // stack not bind wifi driver - BT_STATUS_BT_STACK_NO_RSP = 0x17, // stack doesn't have any rsp. - BT_STATUS_MAX -}BT_CTRL_STATUS,*PBT_CTRL_STATUS; - -typedef enum _BT_OPCODE_STATUS{ - BT_OP_STATUS_SUCCESS = 0x00, // Success - BT_OP_STATUS_VERSION_MISMATCH = 0x01, - BT_OP_STATUS_UNKNOWN_OPCODE = 0x02, - BT_OP_STATUS_ERROR_PARAMETER = 0x03, - BT_OP_STATUS_MAX -}BT_OPCODE_STATUS,*PBT_OPCODE_STATUS; - - -typedef struct _BT_REQ_CMD{ - UCHAR opCodeVer; - UCHAR OpCode; - USHORT paraLength; - UCHAR pParamStart[1]; -} BT_REQ_CMD, *PBT_REQ_CMD; - -typedef struct _BT_RSP_CMD{ - USHORT status; - USHORT paraLength; - UCHAR pParamStart[1]; -} BT_RSP_CMD, *PBT_RSP_CMD; - -typedef struct _BT_H2C{ - u1Byte opCodeVer:4; - u1Byte reqNum:4; - u1Byte opCode; - u1Byte buf[1]; -}BT_H2C, *PBT_H2C; - -typedef struct _BT_EXT_C2H{ - u1Byte extendId; - u1Byte statusCode:4; - u1Byte retLen:4; - u1Byte opCodeVer:4; - u1Byte reqNum:4; - u1Byte buf[1]; -}BT_EXT_C2H, *PBT_EXT_C2H; - -typedef struct _BT_STACK_COEX_INFO{ - u1Byte opCode; - u1Byte opStatus; - u1Byte bufLen; - u1Byte buf[1]; -}BT_STACK_COEX_INFO, *PBT_STACK_COEX_INFO; - -typedef struct _HAL_REQ_CMD{ - UCHAR OpCodeVer; - UCHAR OpCode; - USHORT ParaLength; - UCHAR pParamStart[1]; -} HAL_REQ_CMD, *PHAL_REQ_CMD; - -typedef struct _HAL_RSP_CMD{ - USHORT Status; - USHORT ParaLength; - UCHAR pParamStart[1]; -} HAL_RSP_CMD, *PHAL_RSP_CMD; - -// -// Type of action going on in DbgWorkItem. -// -#define DBG_NOOP 0 -#define DBG_READ_MAC_1BYTE 1 -#define DBG_READ_MAC_2BYTE 2 -#define DBG_READ_MAC_4BYTE 3 -#define DBG_WRITE_MAC_1BYTE 4 -#define DBG_WRITE_MAC_2BYTE 5 -#define DBG_WRITE_MAC_4BYTE 6 -#define DBG_READ_BB_CCK 7 -#define DBG_WRITE_BB_CCK 8 -#define DBG_READ_BB_OFDM 9 -#define DBG_WRITE_BB_OFDM 10 -#define DBG_READ_RF 11 -#define DBG_WRITE_RF 12 -#define DBG_READ_EEPROM_1BYTE 13 -#define DBG_WRITE_EEPROM_1BYTE 14 -#define DBG_READ_EEPROM_2BYTE 15 -#define DBG_WRITE_EEPROM_2BYTE 16 -#define DBG_OUT_CMD 17 - -#define DBG_SWITCH_ANTENNA 26 -#define DBG_SET_TXPWR_FOR_ALL_RATE 27 -// -// The following DBG IO components are ONLY for 92S. -// Please do NOT revise the macro definitions(i.e., compatible with DLL export functions) -// 2008.11.17. -// -#define DBG_WRITE_EFUSE_1BYTE 53 -#define DBG_READ_EFUSE_1BYTE 54 -#define DBG_READ_EFUSE_2BYTE 55 -#define DBG_READ_EFUSE_4BYTE 56 -#define DBG_UPDATE_EFUSE 57 - -#define DBG_WRITE_BT_EFUSE_1BYTE 64 -#define DBG_READ_BT_EFUSE_1BYTE 65 -#define DBG_READ_BT_EFUSE_2BYTE 66 -#define DBG_READ_BT_EFUSE_4BYTE 67 -#define DBG_UPDATE_BT_EFUSE 68 -#define DBG_UPDATE_BT_EFUSE_UTILIZE 69 -#define DBG_UPDATE_BT_EFUSE_MAP 70 -#define DBG_BT_CONTROL 75 - -// Forward declaration. -typedef struct _ADAPTER ADAPTER, *PADAPTER; - -VOID -NDBG_Init( - IN PADAPTER pAdapter -); - -VOID -NDBG_Halt( - IN PADAPTER pAdapter -); - -NDIS_STATUS -NDBG_BtControl( - IN PADAPTER pAdapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); -BOOLEAN -NDBG_GetBtFwVersion( - IN PADAPTER pAdapter, - IN pu2Byte pBtRealFwVer, - IN pu1Byte pBtFwVer - ); -VOID -NDBG_FwC2hBtControl( - IN PADAPTER Adapter, - IN pu1Byte tmpBuf, - IN u1Byte length - ); -VOID -NDBG_StackBtCoexNotify( - IN PADAPTER Adapter, - IN u1Byte stackOpCode, - IN u1Byte stackOpStatus, - IN pu1Byte tmpBuf, - IN u1Byte length - ); - -BOOLEAN -DbgReadMacReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth -); - -BOOLEAN -DbgWriteMacReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue -); - -BOOLEAN -DbgReadBbReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulBeOFDM -); - -BOOLEAN -DbgWriteBbReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulBeOFDM, - IN ULONG ulRegValue -); - -BOOLEAN -DbgReadRfReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth -); - -BOOLEAN -DbgWriteRfReg( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue -); - -BOOLEAN -DbgReadEeprom( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth -); - -BOOLEAN -DbgWriteEeprom( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue -); - -BOOLEAN -DbgOutCmd( - IN PADAPTER pAdapter, - IN PUCHAR ulOutCmd, - IN ULONG ulOutCmdWidth -); - -BOOLEAN -DbgReadEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth -); - -BOOLEAN -DbgWriteEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue -); - -BOOLEAN -DbgUpdateEFuse( - IN PADAPTER pAdapter -); - -BOOLEAN -DbgReadBTEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth -); - -BOOLEAN -DbgWriteBTEFuse( - IN PADAPTER pAdapter, - IN ULONG ulRegOffset, - IN ULONG ulRegDataWidth, - IN ULONG ulRegValue -); - -BOOLEAN -DbgUpdateBTEFuse( - IN PADAPTER pAdapter -); - -BOOLEAN -DbgSetTxPowerForAllRate( - IN PADAPTER pAdapter, - IN ULONG ulTxPowerData - ); - - -BOOLEAN -DbgSetTxAntenna( - IN PADAPTER pAdapter, - IN u1Byte selectedAntenna -); - -#endif diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisOid.c b/network/wlan/WDI/PLATFORM/NdisComm/NdisOid.c deleted file mode 100644 index e1bf69c1..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisOid.c +++ /dev/null @@ -1,323 +0,0 @@ -#include "Mp_Precomp.h" - -BOOLEAN -oids_RTKDbgInvalidLength( - IN ULONG InformationBufferLength, - IN PRTK_DBG_CTRL_OIDS pRTKDbg, - OUT PULONG BytesNeeded - ) -{ - BOOLEAN bRet=FALSE; - ULONG totalLen=0; - - totalLen = sizeof(RTK_DBG_CTRL_OIDS)-sizeof(ULONG)+pRTKDbg->ctrlDataLen; - if(InformationBufferLength != totalLen) - { - bRet = TRUE; - *BytesNeeded = totalLen; - return bRet; - } - return bRet; -} - - - - - -NDIS_STATUS -OIDQ_RTKReadReg( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded, - IN PULONG pulInfo - ) -{ - NDIS_STATUS Status=NDIS_STATUS_SUCCESS; - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulInfo = 0; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - return Status; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - switch(ulRegDataWidth) - { - case 1: - if( IS_BB_REG_OFFSET_92S(ulRegOffset) ) - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - ulInfo = PHY_QueryBBReg(Adapter, ulRegOffset, bMaskDWord); - ulInfo &= (bMaskByte0<<(8*mod_val)); - ulInfo = (ulInfo>>(8*mod_val)); - } - else - ulInfo = PlatformEFIORead1Byte(Adapter, ulRegOffset); - break; - case 2: - if( IS_BB_REG_OFFSET_92S(ulRegOffset) ) - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - ulInfo = PHY_QueryBBReg(Adapter, ulRegOffset, bMaskDWord); - ulInfo &= (bMaskLWord<<(8*mod_val)); - ulInfo = (ulInfo>>(8*mod_val)); - } - else - ulInfo = PlatformEFIORead2Byte(Adapter, ulRegOffset); - break; - case 4: - if( IS_BB_REG_OFFSET_92S(ulRegOffset) ) - ulInfo = PHY_QueryBBReg(Adapter, ulRegOffset, bMaskDWord); - else - ulInfo = PlatformEFIORead4Byte(Adapter, ulRegOffset); - break; - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - *pulInfo = ulInfo; - - return Status; -} - -NDIS_STATUS -OIDQ_RTKReadRegSIC( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded, - IN PULONG pulInfo - ) -{ - NDIS_STATUS Status=NDIS_STATUS_SUCCESS; - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulInfo = 0; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*2) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*2; - return Status; - } - // Get offset and data width. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - switch(ulRegDataWidth) - { - case 1: - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - - ulInfo = SIC_QueryBBReg(Adapter, ulRegOffset, bMaskDWord); - ulInfo &= (bMaskByte0<<(8*mod_val)); - ulInfo = (ulInfo>>(8*mod_val)); - } - break; - case 2: - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - ulInfo = SIC_QueryBBReg(Adapter, ulRegOffset, bMaskDWord); - ulInfo &= (bMaskLWord<<(8*mod_val)); - ulInfo = (ulInfo>>(8*mod_val)); - } - break; - case 4: - ulInfo = SIC_QueryBBReg(Adapter, ulRegOffset, bMaskDWord); - break; - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - *pulInfo = ulInfo; - - return Status; -} - -NDIS_STATUS -OIDS_RTKWriteReg( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS Status=NDIS_STATUS_SUCCESS; - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - return Status; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - - switch(ulRegDataWidth) - { - case 1: - if( IS_BB_REG_OFFSET_92S(ulRegOffset) ) - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - PHY_SetBBReg(Adapter, ulRegOffset, (u4Byte)(bMaskByte0<<(8*mod_val)), ulRegValue); - } - else - PlatformEFIOWrite1Byte(Adapter, ulRegOffset, (u1Byte)(ulRegValue)); - break; - case 2: - if( IS_BB_REG_OFFSET_92S(ulRegOffset) ) - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - PHY_SetBBReg(Adapter, ulRegOffset, (bMaskLWord<<(8*mod_val)), ulRegValue); - } - else - PlatformEFIOWrite2Byte(Adapter, ulRegOffset, (u2Byte)(ulRegValue)); - break; - case 4: - if( IS_BB_REG_OFFSET_92S(ulRegOffset) ) - PHY_SetBBReg(Adapter, ulRegOffset, bMaskDWord, ulRegValue); - else - PlatformEFIOWrite4Byte(Adapter, ulRegOffset, (u4Byte)(ulRegValue)); - break; - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - return Status; -} - -NDIS_STATUS -OIDS_RTKWriteRegSIC( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS Status=NDIS_STATUS_SUCCESS; - ULONG ulRegOffset; - ULONG ulRegDataWidth; - ULONG ulRegValue; - - // Verify input paramter. - if(InformationBufferLength < sizeof(ULONG)*3) - { - Status = NDIS_STATUS_INVALID_LENGTH; - *BytesNeeded = sizeof(ULONG)*3; - return Status; - } - // Get offset, data width, and value to write. - ulRegOffset = *((ULONG*)InformationBuffer); - ulRegDataWidth = *((ULONG*)InformationBuffer+1); - ulRegValue = *((ULONG*)InformationBuffer+2); - - switch(ulRegDataWidth) - { - case 1: - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - SIC_SetBBReg(Adapter, ulRegOffset, (u4Byte)(bMaskByte0<<(8*mod_val)), ulRegValue); - } - break; - case 2: - { - ULONG mod_val=0; - mod_val = ulRegOffset%4; - if(mod_val) - ulRegOffset -= mod_val; - SIC_SetBBReg(Adapter, ulRegOffset, (bMaskLWord<<(8*mod_val)), ulRegValue); - } - break; - case 4: - SIC_SetBBReg(Adapter, ulRegOffset, bMaskDWord, ulRegValue); - break; - default: - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - - return Status; -} - - -NDIS_STATUS -OIDS_RTKDbgControl( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ) -{ - NDIS_STATUS Status=NDIS_STATUS_SUCCESS; - PRTK_DBG_CTRL_OIDS pRTKDbg; - - pRTKDbg = (PRTK_DBG_CTRL_OIDS)InformationBuffer; - - RT_DISP(FDBG_CTRL, DBG_CTRL_TRACE, ("[RTKDBG], Type=0x%x, Len=0x%x(%d)\n", - pRTKDbg->ctrlType, pRTKDbg->ctrlDataLen, pRTKDbg->ctrlDataLen)); - - if(oids_RTKDbgInvalidLength(InformationBufferLength, pRTKDbg, BytesNeeded)) - { - RT_DISP(FDBG_CTRL, DBG_CTRL_TRACE, ("[RTKDBG], Invalid Length, return!!\n")); - Status = NDIS_STATUS_INVALID_LENGTH; - return Status; - } - else - { - RT_DISP_DATA(FDBG_CTRL, DBG_CTRL_TRACE, ("[RTKDBG], Hex Data :"), &pRTKDbg->CtrlData, pRTKDbg->ctrlDataLen) - } - - switch(pRTKDbg->ctrlType) - { - case RTK_DBG_OIDS_BT_PROFILE: - RT_DISP(FDBG_CTRL, DBG_CTRL_TRACE, ("[RTKDBG], RTK_DBG_OIDS_BT_PROFILE\n")); - break; - default: - break; - } - - return Status; -} \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NdisComm/NdisOid.h b/network/wlan/WDI/PLATFORM/NdisComm/NdisOid.h deleted file mode 100644 index ef382bc9..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/NdisOid.h +++ /dev/null @@ -1,75 +0,0 @@ -#ifndef __INC_NDIS_COMMONOID_H -#define __INC_NDIS_COMMONOID_H - -#pragma pack(1) -typedef struct _RTK_DBG_CTRL_OIDS{ - u2Byte ctrlType; - u2Byte ctrlDataLen; - ULONG CtrlData; // head data -} RTK_DBG_CTRL_OIDS, *PRTK_DBG_CTRL_OIDS; - -typedef enum _RTK_DBG_TYPE_OIDS -{ - RTK_DBG_OIDS_BT_PROFILE =0, -}RTK_DBG_TYPE_OIDS; -#pragma pack() - -//============================================ -// Local function -//============================================ - - -//============================================ -// Extern function -//============================================ - -//============================================ -// For OID Query -//============================================ -NDIS_STATUS -OIDQ_RTKReadReg( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded, - IN PULONG pulInfo - ); -NDIS_STATUS -OIDQ_RTKReadRegSIC( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesWritten, - OUT PULONG BytesNeeded, - IN PULONG pulInfo - ); - -//============================================ -// For OID Set -//============================================ -NDIS_STATUS -OIDS_RTKWriteReg( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); -NDIS_STATUS -OIDS_RTKWriteRegSIC( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); -NDIS_STATUS -OIDS_RTKDbgControl( - IN PADAPTER Adapter, - IN PVOID InformationBuffer, - IN ULONG InformationBufferLength, - OUT PULONG BytesRead, - OUT PULONG BytesNeeded - ); -#endif diff --git a/network/wlan/WDI/PLATFORM/NdisComm/makefile.Win b/network/wlan/WDI/PLATFORM/NdisComm/makefile.Win deleted file mode 100644 index 6ee4f43f..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/makefile.Win +++ /dev/null @@ -1,6 +0,0 @@ -# -# DO NOT EDIT THIS FILE!!! Edit .\sources. if you want to add a new source -# file to this component. This file merely indirects to the real make file -# that is shared by all the components of NT OS/2 -# -!INCLUDE $(NTMAKEENV)\makefile.def diff --git a/network/wlan/WDI/PLATFORM/NdisComm/sources.list b/network/wlan/WDI/PLATFORM/NdisComm/sources.list deleted file mode 100644 index a7fc814e..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/sources.list +++ /dev/null @@ -1,13 +0,0 @@ -// -// Command: +(OS, ...) -(OS, ...) [FILE] -// //: Comment at the beginning -// OS: * Ebd6 Ebd7 WinXP Vista Win7 Win8 WinBlue -// +: Add for OS -// -: Remove for OS -// - -+(*) [NdisComm.c] -+(*) [NdisOid.c] -//+(*) [ioctl.c] -+(*) [NdisDbg.c] -//+(*) [WinCEIrql.c] \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NdisComm/sources.props b/network/wlan/WDI/PLATFORM/NdisComm/sources.props deleted file mode 100644 index 42f19b74..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/sources.props +++ /dev/null @@ -1,23 +0,0 @@ - - - - NdisComm - $(TMP_TARGET_DIR) - DRIVER_LIBRARY - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - ..; - $(SRC_ROOT)\Header; - $(SRC_ROOT)\COMMON; - $(SRC_ROOT)\Platform\NdisComm; - $(HAL_INC_DIRS); - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.props b/network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.props deleted file mode 100644 index 3ad367f7..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.props +++ /dev/null @@ -1,25 +0,0 @@ - - - - NdisComm - $(TMP_TARGET_DIR) - DRIVER_LIBRARY - Mp_Precomp.h - precomp.pch - precomp.obj - - .; - ..; - $(SRC_ROOT)\Header; - $(SRC_ROOT)\COMMON; - $(SRC_ROOT)\Platform\NdisComm; - $(HAL_INC_DIRS); - - - - - - - - - \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.win b/network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.win deleted file mode 100644 index 752bda83..00000000 --- a/network/wlan/WDI/PLATFORM/NdisComm/sources.tpl.win +++ /dev/null @@ -1,29 +0,0 @@ -TARGETNAME=NdisComm -TARGETPATH=. -TARGETTYPE=LIBRARY - -PRECOMPILED_INCLUDE=Mp_Precomp.h -PRECOMPILED_PCH=precomp.pch -PRECOMPILED_OBJ=precomp.obj - -# -# IC dependent directories are defined in -# the environment variable HAL_INC_DIRS. -# -INCLUDES= \ - .; \ - ..; \ - $(SRC_ROOT)\Header; \ - $(SRC_ROOT)\COMMON; \ - $(SRC_ROOT)\Platform\NdisComm; \ - $(HAL_INC_DIRS); \ - $(OMNIPEEK_INC_DIRS); \ - -# -# OS and Bus dependent setting. -# -!include $(SRC_ROOT)\$(PLATFORM_INC) - -SOURCES = - - diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportFeature.ini b/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportFeature.ini deleted file mode 100644 index e69de29b..00000000 diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportIC.ini b/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportIC.ini deleted file mode 100644 index 3a2053df..00000000 --- a/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportIC.ini +++ /dev/null @@ -1,15 +0,0 @@ -8192C -8192D -8723A -8188E -8812A -8821A -8811A -8192E -8723B -8703B -8188F -8814A -8821B -8822B -8723D diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportOS.ini b/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportOS.ini deleted file mode 100644 index d781b35d..00000000 --- a/network/wlan/WDI/PLATFORM/WinInf/SDIO/InfSupportOS.ini +++ /dev/null @@ -1,14 +0,0 @@ -,NTx86 os51 -,NTamd64 os51 -,NTx86.6.0 os60 -,NTamd64.6.0 os60 -,NTx86.6.1 os61 -,NTamd64.6.1 os61 -,NTx86.6.2 os62 -,NTamd64.6.2 os62 -,NTArm os62 -,NTx86.6.3 os63 -,NTamd64.6.3 os63 -,NTx86.10.0 os64 -,NTamd64.10.0 os64 -,NTArm.10.0 os64 diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/arm/netrtwlans.inf b/network/wlan/WDI/PLATFORM/WinInf/SDIO/arm/netrtwlans.inf deleted file mode 100644 index e18bf510..00000000 --- a/network/wlan/WDI/PLATFORM/WinInf/SDIO/arm/netrtwlans.inf +++ /dev/null @@ -1,1259 +0,0 @@ -;; netrtwlans.inf -;; -;; Realtek Wireless 802.11b/g/n SDIO Network Adapter -;; -;; Copyright (C) 2012 Realtek Semiconductor Corp. -;; -;; This release is primarily for WHQL test. -;; - -;; FOR XP/Vista/Win7/Win8 - -[Version] -Signature = "$Windows NT$" -Class = Net -ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} -Provider = %Realtek% -CatalogFile.NT = netrtwlans.cat ;; for WHQL certified -DriverVer = 11/23/2015,3008.22.1030.2015 - -[Manufacturer] -%Realtek% = Realtek,NTArm.10.0 - -[ControlFlags] -ExcludeFromSelect = * - -[Realtek.NTArm.10.0] -;; For 8723 RTK common ================================================================ - -;; For 8723 RTK common ================================================================ -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_8753 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_B723 -;; Acer -%RTL8723bs.DeviceDesc% = ACER8723bs.ndi, SD\VID_024C&PID_0623 -;; HP -%RTL8723bs.DeviceDesc% = HP8723bs.ndi, SD\VID_024C&PID_0523 -;; ECS -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0524 -;; bestbuy -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0240 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0241 -;; For Braswell platform -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0626 -;; Reserved -%RTL8723bs.DeviceDesc% = RSVD8723bs.ndi, SD\VID_024C&PID_0624 - -;; For 8188E RTK common ================================================================ -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8188 -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8179 - -;; For 8812A RTK common ================================================================ - -;; For 8814A RTK common ================================================================ -%RTL8814as.DeviceDesc% = RTL8814as.ndi, SD\VID_024C&PID_8813 - -;; For 8821A RTK common ================================================================ -%RTL8821as.DeviceDesc% = RTL8821as.ndi, SD\VID_024C&PID_8821 - -;; For 8192ES RTK common ================================================================ -%RTL8192es.DeviceDesc% = RTL8192es.ndi, SD\VID_024C&PID_818B - - -;; For 8703 RTK common ================================================================ -%RTL8703bs.DeviceDesc% = RTL8703bs.ndi, SD\VID_024C&PID_B703 - -;; For 8188 RTK common ================================================================ -%RTL8188fs.DeviceDesc% = RTL8188fs.ndi, SD\VID_024C&PID_F179 - -;; For 8822B RTK common ================================================================ -%RTL8822bs.DeviceDesc% = RTL8822bs.ndi, SD\VID_024C&PID_B822 - -;; For 8723D RTK common ================================================================ -%RTL8723ds.DeviceDesc% = RTL8723ds.ndi, SD\VID_024C&PID_D723 - -;;---------------------------------------------------------------------------- -;; Realtek 8723as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723as.ndi.NT] -AddReg = NDIS_64.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8723bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;;---------------------------------------------------------------------------- -;; Acer 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[ACER8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, RSSI2GridMode_2.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;;---------------------------------------------------------------------------- -;; HP 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[HP8723bs.ndi.NT] -AddReg = NDIS_64.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; RSVD 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[RSVD8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanDisable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8188eu default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8188es.ndi.NT] -AddReg = NDIS_64.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8821as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8821as.ndi.NT] -AddReg = NDIS_64.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8814as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8814as.ndi.NT] -AddReg = NDIS_64.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8192es default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8192es.ndi.NT] -AddReg = NDIS_64.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8703bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8703bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8188fs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8188fs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - -;;---------------------------------------------------------------------------- -;; Realtek 8822bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8822bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8723ds default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723ds.ndi.NT] -AddReg = NDIS_64.reg, RTL8723ds.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - -;;---------------------------------------------------------------------------- -;; OS relative registry. -;;---------------------------------------------------------------------------- -[NDIS_64.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -HKR, Ndi, Service, 0, "RtlWlans" -;; -;; OS relative service. -;; -[RtlWlans.Service] -DisplayName = %RtlWlans.DeviceDesc.DispName% -ServiceType = 1 ; %SERVICE_KERNEL_DRIVER% -StartType = 3 ; %SERRVICE_DEMAND_START% -ErrorControl = 1 ; %SERRVICE_ERROR_NORMAL% -ServiceBinary = %12%\rtwlans.sys -LoadOrderGroup = NDIS - -;; -;; OS relative event log. -;; -[RtlWlans.EventLog] -AddReg = RtlWlans.AddEventLog.reg - -[RtlWlans.AddEventLog.reg] -HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll" -HKR, , TypesSupported , 0x00010001, 7 - -[CIHVS.reg] -HKR, Ndi\IHVExtensions, ExtensibilityDLL, 0, "%SystemRoot%\system32\Rtlihvs.dll" -HKR, Ndi\IHVExtensions, UIExtensibilityCLSID, 0, "{6C2A8CCA-B2A2-4d81-A3B2-4E15F445C312}" -HKR, Ndi\IHVExtensions, GroupName, 0, "Realtek CCX SDK IHV Service" -HKR, Ndi\IHVExtensions, AdapterOUI, 0x00010001, 0x00e04c - -;******************************************************************************* -; WAPI section -;******************************************************************************* -[wapi.reg] -HKR,defaults,WapiSupport,0,"1" -HKR,,WapiSupport,0,"1" - -;******************************************************************************* -; RTL8723as common paramters -;******************************************************************************* -[RTL8723as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - - -;******************************************************************************* -; RTL8723bs common paramters -;******************************************************************************* -[RTL8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -;;HKR,defaults,EnableAdaptivity,0,"0" -;;HKR,,EnableAdaptivity,0,"0" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of RTL8723bs.common.reg - -[HP8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -; Enable Adaptivity -;;HKR,defaults,EnableAdaptivity,0,"1" -;;HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; Enable Customeized PowerLimit Table -HKR,,EnableTxPowerLimit,0,"1" -HKR,,DecryptCustomFile,,"1" -HKR,,PwrLimitFile,0,"TXPWR_LMT_IEC0921_Enc.txt" - -; Regulation WorldWide -HKR,defaults,PwrTblSel,0,"4" -HKR,,PwrTblSel,0,"4" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of HP8723bs.common.reg - -;******************************************************************************* -; RTL8703bs common paramters -;******************************************************************************* -[RTL8703bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - - -;******************************************************************************* -; RTL8188Fs common paramters -;******************************************************************************* -[RTL8188fs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"0" -HKR,,RomDLFwEnable,0,"0" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - - -;******************************************************************************* -; RTL8821as common paramters -;******************************************************************************* -[RTL8821as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - - -;******************************************************************************* -; RTL8814as common paramters -;******************************************************************************* -[RTL8814as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;; Add for 8814AS, based on 8821AS's modification -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - - -;******************************************************************************* -; RTL8192es common paramters -;******************************************************************************* -[RTL8192es.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;******************************************************************************* -; RTL8822bs common paramters -;******************************************************************************* -[RTL8822bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" -HKR,,ValidRFPath,0,"51" -HKR,,PreInitMem,0,"1" - - -;******************************************************************************* -; RTL8723ds common paramters -;******************************************************************************* -[RTL8723ds.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,defaults,LdpcCap,0,"0" - - -;;---------------------------------------------------------------------------- -;; Realtek WLAN NIC parameters -;;---------------------------------------------------------------------------- -[RTLWLAN.reg] - -; Enable Adaptivity -HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,Channel,0,"1" -HKR,,Channel,0,"1" - -;; Antenna Diversity Type -HKR,defaults,AntennaDivType,0,"0" -HKR,,AntennaDivType,0,"0" - -HKR,defaults,NetworkType,0,"1" -HKR,,NetworkType,0,"1" - -HKR,defaults,StaUapsd,0,"0" -HKR,,StaUapsd,0,"0" - -; For B/G mode and B/G/N mode switch, we will use different wireless mode registry in later section -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - - -;; For WiFi test, 1: WiFi Config and 0: Performance Config -HKR,defaults,WiFiConfg,0,"0" -HKR,,WiFiConfg,0,"0" - -HKR,defaults,RxReorder,0,"1" -HKR,,RxReorder,0,"1" - -HKR,,DefaultKeyID,,"0" -HKR,,DefaultKey0,,"" -HKR,,DefaultKey1,,"" -HKR,,DefaultKey2,,"" -HKR,,DefaultKey3,,"" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - -;Leisure Power Save -HKR,defaults,bLeisurePs,0,"2" -HKR,,bLeisurePs,0,"2" - -;Fw Control LPS -HKR,defaults,bFwCtrlLPS,0,"1" -HKR,,bFwCtrlLPS,0,"1" - -;; LPS Interval -;HKR,defaults,LPSIntvl,0,"3" -HKR,,LPSIntvl,0,"3" - -HKR,,WEPinNmode,0,"0" - -HKR,defaults,RxSC,0,"0" -HKR,,RxSC,0,"0" - -HKR,defaults,TxSC,0,"0" -HKR,,TxSC,0,"0" - -HKR,defaults,NblRacingWA,0,"1" -HKR,,NblRacingWA,0,"1" - -HKR,defaults,SuspendTimerInLowPwr,0,"1" -HKR,,SuspendTimerInLowPwr,0,"1" - -;; Rx reorder pending time -HKR,,RxReorder_PendTime,0,"100" - -;Antenna Diversity -HKR,Ndi\params\AntDiv, ParamDesc, 0, "Antenna Diversity" -HKR,Ndi\params\AntDiv, default, 0, "0" -HKR,Ndi\params\AntDiv, type, 0, "enum" -HKR,Ndi\params\AntDiv\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\AntDiv\enum, "1", 0, %ENABLED_STR% - -HKLM, SYSTEM\CurrentControlSet\Services\RtlWlans\Parameters, "BtAntennaInHw", 0x00010001,2 - -[Ndis5Set.reg] -HKR,Ndi\params\PSPXlinkMode, ParamDesc, 0, %PSP_XLINK_STR% -HKR,Ndi\params\PSPXlinkMode, type, 0, "enum" -HKR,Ndi\params\PSPXlinkMode, default, 0, "0" -HKR,Ndi\params\PSPXlinkMode\enum, "0", 0, %DISABLE_STR% -HKR,Ndi\params\PSPXlinkMode\enum, "1", 0, %ENABLE_STR% -HKR,defaults,PSPXlinkMode,0,"0" -HKR,,PSPXlinkMode,0,"0" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - - -[Ndis6Set.reg] -;Inactive Power Save -HKR,defaults,InactivePs,0,"2" -HKR,,InactivePs,0,"2" - - -;;---------------------------------------------------------------------------- -;; Wireless mode option parameters -;;---------------------------------------------------------------------------- -[11nWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -;; 40MHz Support in 11n -HKR,Ndi\params\BWSetting, ParamDesc, 0, "Bandwidth" -HKR,Ndi\params\BWSetting, type, 0, "enum" -HKR,Ndi\params\BWSetting, default, 0, "1" -HKR,Ndi\params\BWSetting\enum, "0", 0, "20MHz Only" -HKR,Ndi\params\BWSetting\enum, "1", 0, "20_40MHz" -HKR,defaults,BWSetting,0,"1" -HKR,,BWSetting,0,"1" -HKR,,BWSetting,,"1" - -HKR,,Channel,0,"10" - -[11gWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,defaults,WirelessMode, 0, "4" -HKR,,WirelessMode, 0, "4" - -HKR,,BWSetting,0,"0" - -HKR,,Channel,0,"10" - -[11acWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "8", 0, %AUTO_STR% -HKR,Ndi\params\WirelessMode\enum, "1", 0, %IEEE_802_11A_STR% -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "16", 0, %IEEE_802_11BGN_STR% -HKR,Ndi\params\WirelessMode\enum, "32", 0, %IEEE_802_11AN_STR% -HKR,Ndi\params\WirelessMode\enum, "64", 0, %IEEE_802_11ANAC_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -HKR,,Channel,0,"36" - -;; RF Type -HKR,,RFType,0,"15" - - -HKR,defaults,BWSetting,0,"2" -HKR,,BWSetting,0,"2" - -;;---------------------------------------------------------------------------- -;; LPS 32k Control Parameters -;;---------------------------------------------------------------------------- -[32kEnable.reg] -HKR,,bLowPowerEnable,0,"1" -[32kDisable.reg] -HKR,,bLowPowerEnable,0,"0" - -;------------------------------------------------------------------------------- -; PnP pre-transition handling -;------------------------------------------------------------------------------- -[PnpPreTransOn.reg] -HKR,,PreTransPnP,0,"1" -[PnpPreTransOff.reg] -HKR,,PreTransPnP,0,"0" - -;;---------------------------------------------------------------------------- -;; WOWLAN Control Parameters -;;---------------------------------------------------------------------------- -[WowlanAllEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanDisable.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"0" -HKR,,GTKOffloadEnable,0,"0" - -[WowlanAllEnableNoLPS.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanEnableNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[WowlanEnableNoLPSNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[ConnectedStandbyEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" -HKR,,D2ListenIntvl,0,"4" -HKR,,NSOffloadEnable,0,"1" -HKR,,NLOEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "0" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"0" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -;; Packet coalescing should be enabled in WHCK test -HKR,defaults,*PacketCoalescing,0,"0" -HKR,,*PacketCoalescing,0,"0" - -;------------------------------------------------------------------------------- -; Auto Channel Selection -;------------------------------------------------------------------------------- -[AutoChnlSelon.reg] -HKR,,AutoChnlSel,0,"1" -[AutoChnlSeloff.reg] -HKR,,AutoChnlSel,0,"0" - -;;---------------------------------------------------------------------------- -;; RSSI to Grid Mode Parameters -;;---------------------------------------------------------------------------- -[RSSI2GridRealMode.reg] -HKR,,RSSI2GridMode,0,"1" -[RSSI2GridMode_2.reg] -HKR,,RSSI2GridMode,0,"2" -[RSSI2GridMode_4.reg] -HKR,,RSSI2GridMode,0,"4" - -;;---------------------------------------------------------------------------- -;; KFREE parameters -;;---------------------------------------------------------------------------- -[KFREE_COMMON.reg] -HKR,,RfKFreeEnable,0,"0" - -;******************************************************************************* -; Customer reg section -;******************************************************************************* -[ScanType.reg] -HKR,defaults,PassiveScan, 0, "0" -HKR,,PassiveScan, 0, "0" - -;******************************************************************************* -; Multi-Channel Concurrent section -;******************************************************************************* -[MCC.reg] -HKR,Ndi\params\MultiChannelFcsMode, ParamDesc, 0, %MCC_STR% -HKR,Ndi\params\MultiChannelFcsMode, type, 0, "enum" -HKR,Ndi\params\MultiChannelFcsMode, default, 0, "0" -HKR,Ndi\params\MultiChannelFcsMode\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\MultiChannelFcsMode\enum, "4", 0, %ENABLED_STR% -HKR,defaults,MultiChannelFcsMode, 0, "0" -HKR,,MultiChannelFcsMode, 0, "0" - -;******************************************************************************* -; Destination Directory -;******************************************************************************* -[RTWlanS.CopyFiles] -rtwlans.sys,,,2 - -[DestinationDirs] -DefaultDestDir = 11 -RTWlanS.CopyFiles = 12 -CIHVS.CopyFiles = 11 -RtlUI2.CopyFiles = 10 - -;;**************************************************************************** -;; Source Files -;;**************************************************************************** -[CIHVS.CopyFiles] -Rtlihvs.dll,,,2 - -[RegisterUIExt] -11,,RtlExtUI.dll,1 - -[RtlUI2.CopyFiles] -RtlUI2.exe,,,2 - -[SourceDisksFiles] -rtwlans.sys = 1 -Rtlihvs.dll = 1 - -[SourceDisksNames] -1=%DISKNAME%,,, - - -;******************************************************************************* -; Strings -;******************************************************************************* -[Strings] -SSID_STR = "SSID" -CHANNEL_STR = "Channel" -NETWORK_TYPE_STR = "Network Type" -LED_CONTROL_STR = "LED Control" -POWER_SAVE_STR = "Power Save Mode" -WIFI_IBSS_STR = "IBSS Default 11b Mode" -RATE_ADAPTIVE_STR = "Rate Adaptive" -QOS_STR = "QoS" -WiFiConfg_STR = "WiFiConfg" -WMM_APSD = "WMM APSD" -CCX_RM_STR = "CCX Radio Measurement" -CCX_OFF_LINE_DUR_UP_LIMIT_STR = "CCX Max Off-Line Measurement (0: unlimited)" -FORCE_PRIORITY_STR = "Forced Priority" -HW_PARA_STR = "Init from HwParaFile" -THREE_WIRE_MODE_STR = "Three Wire Programming Mode" -BOARD_TYPE_STR = "Board Type" -PROTECTION_MODE_STR = "Protection Mode" -TPC_STR = "Transmit Power Control" -TPC_POLARITY_STR = "TPC Polarity Select" -HIGH_POWER_STR = "High Power Mechanism" -INIT_GAIN_STR = "Initial Gain State" -CW_MAX_MIN_STR = "Contention Window" -PSP_XLINK_STR = "PSP XLink Mode" -DISABLE_STR = "Disable" -ENABLE_STR = "Enable" -DISABLED_STR = "Disabled" -ENABLED_STR = "Enabled" -AUTO_STR = "Auto" -AD_HOC_STR = "Ad Hoc" -INFRASTRUCTURE_STR = "Infrastructure" -AUTO_SELECT = "Auto select" -WL_MODE_STR = "Wireless Mode" -RX_REORDER_STR = "Rx Reorder" -CAM_STR = "CAM" -MAX_PSP_STR = "MAX_PSP" -Fast_PSP_STR = "Fast_PSP" -NO_AC_STR = "No AC (Disable)" -ALL_AC_STR = "ALL AC" -IEEE_802_11A_STR = "IEEE 802.11a" -IEEE_802_11B_STR = "IEEE 802.11b" -IEEE_802_11BG_STR = "IEEE 802.11b/g" -IEEE_802_11BGN_STR = "IEEE 802.11b/g/n" -IEEE_802_11AN_STR = "IEEE 802.11a/n" -IEEE_802_11ANAC_STR = "IEEE 802.11a/n/ac" -IEEE_802_11AC_STR = "IEEE 802.11 ac" -WakeOnMagicPacket = "Wake on Magic Packet" -WakeOnPattern = "Wake on Pattern Match" -MCC_STR = "Multi-Channel Concurrent" - -;******************************************************************************* -; manufacture description -;******************************************************************************* -Realtek = "Realtek Semiconductor Corp." - - -;******************************************************************************* -; Source disk name -;******************************************************************************* -DISKNAME = "Realtek Wireless LAN 802.11n SDIO Network Adapter Driver Disk" -RtlWlans.DeviceDesc = "Realtek Wireless LAN 802.11n SDIO Network Adapter" -RtlWlans.DeviceDesc.DispName = "Realtek Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8723as Device description -;******************************************************************************* -RTL8723as.DeviceDesc = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723as.DeviceDesc.DispName = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" - - - -;******************************************************************************* -; RTL8723bs Device description -;******************************************************************************* -RTL8723bs.DeviceDesc = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723bs.DeviceDesc.DispName = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8814as Device description -;******************************************************************************* -RTL8814as.DeviceDesc = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" -RTL8814as.DeviceDesc.DispName = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" - -;******************************************************************************* -; RTL8188ES Device description -;******************************************************************************* -RTL8188es.DeviceDesc = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8188es.DeviceDesc.DispName = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -;******************************************************************************* -; RTL8821as Device description -;******************************************************************************* -RTL8821as.DeviceDesc = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8821as.DeviceDesc.DispName = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -;******************************************************************************* -; RTL8192E Device description -;******************************************************************************* -RTL8192es.DeviceDesc = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8192es.DeviceDesc.DispName = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" - -;******************************************************************************* -; RTL8703bs Device description -;******************************************************************************* -RTL8703bs.DeviceDesc = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8703bs.DeviceDesc.DispName = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8188Fs Device description -;******************************************************************************* -RTL8188fs.DeviceDesc = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -RTL8188fs.DeviceDesc.DispName = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -;******************************************************************************* -; RTL8822bs Device description -;******************************************************************************* -RTL8822bs.DeviceDesc = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8822bs.DeviceDesc.DispName = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" - -;******************************************************************************* -; RTL8723ds Device description -;******************************************************************************* -RTL8723ds.DeviceDesc = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723ds.DeviceDesc.DispName = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/netrtwlans.inf b/network/wlan/WDI/PLATFORM/WinInf/SDIO/netrtwlans.inf deleted file mode 100644 index 59166e9e..00000000 --- a/network/wlan/WDI/PLATFORM/WinInf/SDIO/netrtwlans.inf +++ /dev/null @@ -1,2711 +0,0 @@ -;; netrtwlans.inf -;; -;; Realtek Wireless 802.11b/g/n SDIO Network Adapter -;; -;; Copyright (C) 2012 Realtek Semiconductor Corp. -;; -;; This release is primarily for WHQL test. -;; - -;; FOR XP/Vista/Win7/Win8 - -[Version] -Signature = "$Windows NT$" -Class = Net -ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} -Provider = %Realtek% -CatalogFile.NT = netrtwlans.cat ;; for WHQL certified -DriverVer = 10/30/2015,3008.22.1030.2015 - -[Manufacturer] -%Realtek% = Realtek, NTx86, NTamd64, NTx86.6.0, NTamd64.6.0, NTx86.6.1, NTamd64.6.1, NTx86.6.2, NTamd64.6.2, NTx86.6.3, NTamd64.6.3, NTx86.10.0, NTamd64.10.0, NTArm.10.0 - -[ControlFlags] -ExcludeFromSelect = * - -;; ## Manufacturer [Realtek] -;; $$ ICtype 8723A Start -;; For 8723 RTK common ================================================================ -;; $$ ICtype 8723A End - -;; $$ ICtype 8723B Start -;; For 8723 RTK common ================================================================ -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_8753 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_B723 -;; Acer -%RTL8723bs.DeviceDesc% = ACER8723bs.ndi, SD\VID_024C&PID_0623 -;; HP -%RTL8723bs.DeviceDesc% = HP8723bs.ndi, SD\VID_024C&PID_0523 -;; ECS -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0524 -;; bestbuy -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0240 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0241 -;; For Braswell platform -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0626 -;; Reserved -%RTL8723bs.DeviceDesc% = RSVD8723bs.ndi, SD\VID_024C&PID_0624 -;; $$ ICtype 8723B End - -;; $$ ICtype 8188E Start -;; For 8188E RTK common ================================================================ -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8188 -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8179 -;; $$ ICtype 8188E End - -;; $$ ICtype 8812A Start -;; For 8812A RTK common ================================================================ -;; $$ ICtype 8812A End - -;; $$ ICtype 8814A Start -;; For 8814A RTK common ================================================================ -%RTL8814as.DeviceDesc% = RTL8814as.ndi, SD\VID_024C&PID_8813 -;; $$ ICtype 8814A End - -;; $$ ICtype 8821A Start -;; For 8821A RTK common ================================================================ -%RTL8821as.DeviceDesc% = RTL8821as.ndi, SD\VID_024C&PID_8821 -;; $$ ICtype 8821A End - -;; $$ ICtype 8192E Start -;; For 8192ES RTK common ================================================================ -%RTL8192es.DeviceDesc% = RTL8192es.ndi, SD\VID_024C&PID_818B -;; $$ ICtype 8192E End - - -;; $$ ICtype 8703B Start -;; For 8703 RTK common ================================================================ -%RTL8703bs.DeviceDesc% = RTL8703bs.ndi, SD\VID_024C&PID_B703 -;; $$ ICtype 8703B End - -;; $$ ICtype 8188F Start -;; For 8188 RTK common ================================================================ -%RTL8188fs.DeviceDesc% = RTL8188fs.ndi, SD\VID_024C&PID_F179 -;; $$ ICtype 8188F End - -;; $$ ICtype 8822B Start -;; For 8822B RTK common ================================================================ -%RTL8822bs.DeviceDesc% = RTL8822bs.ndi, SD\VID_024C&PID_B822 -;; $$ ICtype 8822B End - -;; $$ ICtype 8723D Start -;; For 8723D RTK common ================================================================ -%RTL8723ds.DeviceDesc% = RTL8723ds.ndi, SD\VID_024C&PID_D723 -;; $$ ICtype 8723D End - -;; $$ ICtype 8723A Start -;;---------------------------------------------------------------------------- -;; Realtek 8723as default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8723as_os51.ndi.NT] -AddReg = NDIS_51.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8723as_os51.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8723as_os60.ndi.NT] -AddReg = NDIS_60.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as_os60.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8723as_os61.ndi.NT] -AddReg = NDIS_61.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as_os61.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8723as_os62.ndi.NT] -AddReg = NDIS_62.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as_os62.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8723as_os63.ndi.NT] -AddReg = NDIS_63.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as_os63.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as_os63.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8723as_os64.ndi.NT] -AddReg = NDIS_64.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as_os64.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as_os64.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8723A End - -;; $$ ICtype 8723B Start -;;---------------------------------------------------------------------------- -;; Realtek 8723bs default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8723bs.ndi.NT] -AddReg = NDIS_51.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8723bs.ndi.NT] -AddReg = NDIS_60.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -;; $$ FeatureType WAPI Start -AddReg = wapi.reg -RegisterDlls = RegisterUIExt -CopyFiles = CIHVS.CopyFiles -;; $$ FeatureType WAPI End -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8723bs.ndi.NT] -AddReg = NDIS_61.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -;; $$ FeatureType WAPI Start -AddReg = wapi.reg -RegisterDlls = RegisterUIExt -CopyFiles = CIHVS.CopyFiles -;; $$ FeatureType WAPI End -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8723bs.ndi.NT] -AddReg = NDIS_62.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, MCC.reg -;; $$ FeatureType WAPI Start -AddReg = wapi.reg -RegisterDlls = RegisterUIExt -CopyFiles = CIHVS.CopyFiles -;; $$ FeatureType WAPI End -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8723bs.ndi.NT] -AddReg = NDIS_63.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, MCC.reg -;; $$ FeatureType WAPI Start -AddReg = wapi.reg -RegisterDlls = RegisterUIExt -CopyFiles = CIHVS.CopyFiles -;; $$ FeatureType WAPI End -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, MCC.reg -;; $$ FeatureType WAPI Start -AddReg = wapi.reg -RegisterDlls = RegisterUIExt -CopyFiles = CIHVS.CopyFiles -;; $$ FeatureType WAPI End -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End -;;---------------------------------------------------------------------------- -;; Acer 8723bs installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[ACER8723bs.ndi.NT] -AddReg = NDIS_51.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[ACER8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[ACER8723bs.ndi.NT] -AddReg = NDIS_60.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[ACER8723bs.ndi.NT] -AddReg = NDIS_61.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg, RSSI2GridMode_2.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[ACER8723bs.ndi.NT] -AddReg = NDIS_62.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, RSSI2GridMode_2.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[ACER8723bs.ndi.NT] -AddReg = NDIS_63.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, RSSI2GridMode_2.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[ACER8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, RSSI2GridMode_2.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End -;;---------------------------------------------------------------------------- -;; HP 8723bs installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[HP8723bs.ndi.NT] -AddReg = NDIS_51.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[HP8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[HP8723bs.ndi.NT] -AddReg = NDIS_60.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[HP8723bs.ndi.NT] -AddReg = NDIS_61.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[HP8723bs.ndi.NT] -AddReg = NDIS_62.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[HP8723bs.ndi.NT] -AddReg = NDIS_63.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[HP8723bs.ndi.NT] -AddReg = NDIS_64.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8723B End - -;;---------------------------------------------------------------------------- -;; RSVD 8723bs installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RSVD8723bs.ndi.NT] -AddReg = NDIS_51.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RSVD8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RSVD8723bs.ndi.NT] -AddReg = NDIS_60.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RSVD8723bs.ndi.NT] -AddReg = NDIS_61.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RSVD8723bs.ndi.NT] -AddReg = NDIS_62.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanDisable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RSVD8723bs.ndi.NT] -AddReg = NDIS_63.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanDisable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RSVD8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanDisable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8723B End - -;; $$ ICtype 8188E Start -;;---------------------------------------------------------------------------- -;; Realtek 8188eu default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8188es_os51.ndi.NT] -AddReg = NDIS_51.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis5Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8188es_os51.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8188es_os60.ndi.NT] -AddReg = NDIS_60.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg, ConnectedStandbyEnable.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es_os60.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8188es_os61.ndi.NT] -AddReg = NDIS_61.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg, ConnectedStandbyEnable.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es_os61.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8188es_os62.ndi.NT] -AddReg = NDIS_62.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg, ConnectedStandbyEnable.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es_os62.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8188es_os63.ndi.NT] -AddReg = NDIS_63.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es_os63.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es_os63.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8188es_os64.ndi.NT] -AddReg = NDIS_64.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es_os64.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es_os64.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8188E End - -;; $$ ICtype 8821A Start -;;---------------------------------------------------------------------------- -;; Realtek 8821as default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8821as_os51.ndi.NT] -AddReg = NDIS_51.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis5Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8821as_os51.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8821as_os60.ndi.NT] -AddReg = NDIS_60.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as_os60.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8821as_os61.ndi.NT] -AddReg = NDIS_61.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as_os61.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8821as_os62.ndi.NT] -AddReg = NDIS_62.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as_os62.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8821as_os63.ndi.NT] -AddReg = NDIS_63.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as_os63.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as_os63.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8821as_os64.ndi.NT] -AddReg = NDIS_64.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as_os64.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as_os64.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8821A End - -;; $$ ICtype 8814A Start -;;---------------------------------------------------------------------------- -;; Realtek 8814as default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8814as_os51.ndi.NT] -AddReg = NDIS_51.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis5Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8814as_os51.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8814as_os60.ndi.NT] -AddReg = NDIS_60.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as_os60.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8814as_os61.ndi.NT] -AddReg = NDIS_61.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as_os61.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8814as_os62.ndi.NT] -AddReg = NDIS_62.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as_os62.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8814as_os63.ndi.NT] -AddReg = NDIS_63.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as_os63.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as_os63.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8814as_os64.ndi.NT] -AddReg = NDIS_64.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as_os64.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as_os64.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8814A End - -;; $$ ICtype 8192E Start -;;---------------------------------------------------------------------------- -;; Realtek 8192es default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8192es_os51.ndi.NT] -AddReg = NDIS_51.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis5Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8192es_os51.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8192es_os60.ndi.NT] -AddReg = NDIS_60.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es_os60.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8192es_os61.ndi.NT] -AddReg = NDIS_61.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es_os61.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8192es_os62.ndi.NT] -AddReg = NDIS_62.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es_os62.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8192es_os63.ndi.NT] -AddReg = NDIS_63.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es_os63.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es_os63.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8192es_os64.ndi.NT] -AddReg = NDIS_64.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es_os64.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es_os64.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8192E End - -;; $$ ICtype 8703B Start -;;---------------------------------------------------------------------------- -;; Realtek 8703bs default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8703bs.ndi.NT] -AddReg = NDIS_51.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg, WowlanAllEnable.reg, KFREE_COMMON.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8703bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8703bs.ndi.NT] -AddReg = NDIS_60.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanAllEnable.reg, KFREE_COMMON.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8703bs.ndi.NT] -AddReg = NDIS_61.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanAllEnable.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8703bs.ndi.NT] -AddReg = NDIS_62.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8703bs.ndi.NT] -AddReg = NDIS_63.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8703bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8703B End - -;; $$ ICtype 8188F Start -;;---------------------------------------------------------------------------- -;; Realtek 8188fs default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8188fs.ndi.NT] -AddReg = NDIS_51.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis5Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8188fs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8188fs.ndi.NT] -AddReg = NDIS_60.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8188fs.ndi.NT] -AddReg = NDIS_61.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8188fs.ndi.NT] -AddReg = NDIS_62.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8188fs.ndi.NT] -AddReg = NDIS_63.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8188fs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8188F End -;; $$ ICtype 8822B Start -;;---------------------------------------------------------------------------- -;; Realtek 8822bs default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8822bs_os51.ndi.NT] -AddReg = NDIS_51.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis5Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8822bs_os51.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8822bs_os60.ndi.NT] -AddReg = NDIS_60.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs_os60.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8822bs_os61.ndi.NT] -AddReg = NDIS_61.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs_os61.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8822bs_os62.ndi.NT] -AddReg = NDIS_62.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs_os62.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8822bs_os63.ndi.NT] -AddReg = NDIS_63.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs_os63.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs_os63.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8822bs_os64.ndi.NT] -AddReg = NDIS_64.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs_os64.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs_os64.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8822B End - -;; $$ ICtype 8723D Start -;;---------------------------------------------------------------------------- -;; Realtek 8723ds default installation -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[RTL8723ds_os51.ndi.NT] -AddReg = NDIS_51.reg, RTL8723ds.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis5Set.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles - -[RTL8723ds_os51.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os51 End - -;; ** Section for os60 Start -[RTL8723ds_os60.ndi.NT] -AddReg = NDIS_60.reg, RTL8723ds.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds_os60.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -;; ** Section for os60 End - -;; ** Section for os61 Start -[RTL8723ds_os61.ndi.NT] -AddReg = NDIS_61.reg, RTL8723ds.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds_os61.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds_os61.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os61 End - -;; ** Section for os62 Start -[RTL8723ds_os62.ndi.NT] -AddReg = NDIS_62.reg, RTL8723ds.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds_os62.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds_os62.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os62 End - -;; ** Section for os63 Start -[RTL8723ds.ndi.NT] -AddReg = NDIS_63.reg, RTL8723ds.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os63 End - -;; ** Section for os64 Start -[RTL8723ds.ndi.NT] -AddReg = NDIS_64.reg, RTL8723ds.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds.ndi.NT.Services] -;; $$ AddServiceName Start -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -;; $$ AddServiceName End -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;; ** Section for os64 End - -;; $$ ICtype 8723D End -;;---------------------------------------------------------------------------- -;; OS relative registry. -;;---------------------------------------------------------------------------- -;; ** Section for os51 Start -[NDIS_51.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" -HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" -;; $$ ServiceName Start -HKR, Ndi, Service, 0, "RtlWlans" -;; $$ ServiceName End -;; ** Section for os51 End -;; ** Section for os60 Start -[NDIS_60.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet" -;; $$ ServiceName Start -HKR, Ndi, Service, 0, "RtlWlans" -;; $$ ServiceName End -;; ** Section for os60 End -;; ** Section for os61 Start -[NDIS_61.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -;; $$ ServiceName Start -HKR, Ndi, Service, 0, "RtlWlans" -;; $$ ServiceName End -;; ** Section for os61 End -;; ** Section for os62 Start -[NDIS_62.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -;; $$ ServiceName Start -HKR, Ndi, Service, 0, "RtlWlans" -;; $$ ServiceName End -;; ** Section for os62 End -;; ** Section for os63 Start -[NDIS_63.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -;; $$ ServiceName Start -HKR, Ndi, Service, 0, "RtlWlans" -;; $$ ServiceName End -;; ** Section for os63 End -;; ** Section for os64 Start -[NDIS_64.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -;; $$ ServiceName Start -HKR, Ndi, Service, 0, "RtlWlans" -;; $$ ServiceName End -;; ** Section for os64 End -;; -;; OS relative service. -;; -[RtlWlans.Service] -DisplayName = %RtlWlans.DeviceDesc.DispName% -ServiceType = 1 ; %SERVICE_KERNEL_DRIVER% -StartType = 3 ; %SERRVICE_DEMAND_START% -ErrorControl = 1 ; %SERRVICE_ERROR_NORMAL% -;; $$ DriverName Start -ServiceBinary = %12%\rtwlans.sys -;; $$ DriverName End -LoadOrderGroup = NDIS - -;; -;; OS relative event log. -;; -[RtlWlans.EventLog] -AddReg = RtlWlans.AddEventLog.reg - -[RtlWlans.AddEventLog.reg] -HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll" -HKR, , TypesSupported , 0x00010001, 7 - -[CIHVS.reg] -HKR, Ndi\IHVExtensions, ExtensibilityDLL, 0, "%SystemRoot%\system32\Rtlihvs.dll" -HKR, Ndi\IHVExtensions, UIExtensibilityCLSID, 0, "{6C2A8CCA-B2A2-4d81-A3B2-4E15F445C312}" -HKR, Ndi\IHVExtensions, GroupName, 0, "Realtek CCX SDK IHV Service" -HKR, Ndi\IHVExtensions, AdapterOUI, 0x00010001, 0x00e04c - -;******************************************************************************* -; WAPI section -;******************************************************************************* -[wapi.reg] -HKR,defaults,WapiSupport,0,"1" -HKR,,WapiSupport,0,"1" - -;; $$ ICtype 8723A Start -;******************************************************************************* -; RTL8723as common paramters -;******************************************************************************* -[RTL8723as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -;; $$ ICtype 8723A End - -;; $$ ICtype 8723B Start -;******************************************************************************* -; RTL8723bs common paramters -;******************************************************************************* -[RTL8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -;;HKR,defaults,EnableAdaptivity,0,"0" -;;HKR,,EnableAdaptivity,0,"0" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of RTL8723bs.common.reg - -[HP8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -; Enable Adaptivity -;;HKR,defaults,EnableAdaptivity,0,"1" -;;HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; Enable Customeized PowerLimit Table -HKR,,EnableTxPowerLimit,0,"1" -HKR,,DecryptCustomFile,,"1" -HKR,,PwrLimitFile,0,"TXPWR_LMT_IEC0921_Enc.txt" - -; Regulation WorldWide -HKR,defaults,PwrTblSel,0,"4" -HKR,,PwrTblSel,0,"4" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of HP8723bs.common.reg -;; $$ ICtype 8723B End - -;; $$ ICtype 8703B Start -;******************************************************************************* -; RTL8703bs common paramters -;******************************************************************************* -[RTL8703bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -;; $$ ICtype 8703B End - -;; $$ ICtype 8188F Start -;******************************************************************************* -; RTL8188Fs common paramters -;******************************************************************************* -[RTL8188fs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"0" -HKR,,RomDLFwEnable,0,"0" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -;; $$ ICtype 8703B End - -;; $$ ICtype 8821A Start -;******************************************************************************* -; RTL8821as common paramters -;******************************************************************************* -[RTL8821as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - -;; $$ ICtype 8821A End - -;; $$ ICtype 8814A Start -;******************************************************************************* -; RTL8814as common paramters -;******************************************************************************* -[RTL8814as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;; Add for 8814AS, based on 8821AS's modification -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - -;; $$ ICtype 8814A End - -;; $$ ICtype 8192E Start -;******************************************************************************* -; RTL8192es common paramters -;******************************************************************************* -[RTL8192es.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" -;; $$ ICtype 8192E End - -;; $$ ICtype 8822B Start -;******************************************************************************* -; RTL8822bs common paramters -;******************************************************************************* -[RTL8822bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" -HKR,,ValidRFPath,0,"51" -HKR,,PreInitMem,0,"1" - -;; $$ ICtype 8822B End - -;; $$ ICtype 8723D Start -;******************************************************************************* -; RTL8723ds common paramters -;******************************************************************************* -[RTL8723ds.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,defaults,LdpcCap,0,"0" - -;; $$ ICtype 8723D End - -;;---------------------------------------------------------------------------- -;; Realtek WLAN NIC parameters -;;---------------------------------------------------------------------------- -[RTLWLAN.reg] - -; Enable Adaptivity -HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,Channel,0,"1" -HKR,,Channel,0,"1" - -;; Antenna Diversity Type -HKR,defaults,AntennaDivType,0,"0" -HKR,,AntennaDivType,0,"0" - -HKR,defaults,NetworkType,0,"1" -HKR,,NetworkType,0,"1" - -HKR,defaults,StaUapsd,0,"0" -HKR,,StaUapsd,0,"0" - -; For B/G mode and B/G/N mode switch, we will use different wireless mode registry in later section -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - - -;; For WiFi test, 1: WiFi Config and 0: Performance Config -HKR,defaults,WiFiConfg,0,"0" -HKR,,WiFiConfg,0,"0" - -HKR,defaults,RxReorder,0,"1" -HKR,,RxReorder,0,"1" - -HKR,,DefaultKeyID,,"0" -HKR,,DefaultKey0,,"" -HKR,,DefaultKey1,,"" -HKR,,DefaultKey2,,"" -HKR,,DefaultKey3,,"" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - -;Leisure Power Save -HKR,defaults,bLeisurePs,0,"2" -HKR,,bLeisurePs,0,"2" - -;Fw Control LPS -HKR,defaults,bFwCtrlLPS,0,"1" -HKR,,bFwCtrlLPS,0,"1" - -;; LPS Interval -;HKR,defaults,LPSIntvl,0,"3" -HKR,,LPSIntvl,0,"3" - -HKR,,WEPinNmode,0,"0" - -HKR,defaults,RxSC,0,"0" -HKR,,RxSC,0,"0" - -HKR,defaults,TxSC,0,"0" -HKR,,TxSC,0,"0" - -HKR,defaults,NblRacingWA,0,"1" -HKR,,NblRacingWA,0,"1" - -HKR,defaults,SuspendTimerInLowPwr,0,"1" -HKR,,SuspendTimerInLowPwr,0,"1" - -;; Rx reorder pending time -HKR,,RxReorder_PendTime,0,"100" - -;Antenna Diversity -HKR,Ndi\params\AntDiv, ParamDesc, 0, "Antenna Diversity" -HKR,Ndi\params\AntDiv, default, 0, "0" -HKR,Ndi\params\AntDiv, type, 0, "enum" -HKR,Ndi\params\AntDiv\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\AntDiv\enum, "1", 0, %ENABLED_STR% - -HKLM, SYSTEM\CurrentControlSet\Services\RtlWlans\Parameters, "BtAntennaInHw", 0x00010001,2 - -[Ndis5Set.reg] -HKR,Ndi\params\PSPXlinkMode, ParamDesc, 0, %PSP_XLINK_STR% -HKR,Ndi\params\PSPXlinkMode, type, 0, "enum" -HKR,Ndi\params\PSPXlinkMode, default, 0, "0" -HKR,Ndi\params\PSPXlinkMode\enum, "0", 0, %DISABLE_STR% -HKR,Ndi\params\PSPXlinkMode\enum, "1", 0, %ENABLE_STR% -HKR,defaults,PSPXlinkMode,0,"0" -HKR,,PSPXlinkMode,0,"0" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - - -[Ndis6Set.reg] -;Inactive Power Save -HKR,defaults,InactivePs,0,"2" -HKR,,InactivePs,0,"2" - - -;;---------------------------------------------------------------------------- -;; Wireless mode option parameters -;;---------------------------------------------------------------------------- -[11nWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -;; 40MHz Support in 11n -HKR,Ndi\params\BWSetting, ParamDesc, 0, "Bandwidth" -HKR,Ndi\params\BWSetting, type, 0, "enum" -HKR,Ndi\params\BWSetting, default, 0, "1" -HKR,Ndi\params\BWSetting\enum, "0", 0, "20MHz Only" -HKR,Ndi\params\BWSetting\enum, "1", 0, "20_40MHz" -HKR,defaults,BWSetting,0,"1" -HKR,,BWSetting,0,"1" -HKR,,BWSetting,,"1" - -HKR,,Channel,0,"10" - -[11gWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,defaults,WirelessMode, 0, "4" -HKR,,WirelessMode, 0, "4" - -HKR,,BWSetting,0,"0" - -HKR,,Channel,0,"10" - -[11acWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "8", 0, %AUTO_STR% -HKR,Ndi\params\WirelessMode\enum, "1", 0, %IEEE_802_11A_STR% -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "16", 0, %IEEE_802_11BGN_STR% -HKR,Ndi\params\WirelessMode\enum, "32", 0, %IEEE_802_11AN_STR% -HKR,Ndi\params\WirelessMode\enum, "64", 0, %IEEE_802_11ANAC_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -HKR,,Channel,0,"36" - -;; RF Type -HKR,,RFType,0,"15" - - -HKR,defaults,BWSetting,0,"2" -HKR,,BWSetting,0,"2" - -;;---------------------------------------------------------------------------- -;; LPS 32k Control Parameters -;;---------------------------------------------------------------------------- -[32kEnable.reg] -HKR,,bLowPowerEnable,0,"1" -[32kDisable.reg] -HKR,,bLowPowerEnable,0,"0" - -;------------------------------------------------------------------------------- -; PnP pre-transition handling -;------------------------------------------------------------------------------- -[PnpPreTransOn.reg] -HKR,,PreTransPnP,0,"1" -[PnpPreTransOff.reg] -HKR,,PreTransPnP,0,"0" - -;;---------------------------------------------------------------------------- -;; WOWLAN Control Parameters -;;---------------------------------------------------------------------------- -[WowlanAllEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanDisable.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"0" -HKR,,GTKOffloadEnable,0,"0" - -[WowlanAllEnableNoLPS.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanEnableNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[WowlanEnableNoLPSNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[ConnectedStandbyEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" -HKR,,D2ListenIntvl,0,"4" -HKR,,NSOffloadEnable,0,"1" -HKR,,NLOEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "0" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"0" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -;; Packet coalescing should be enabled in WHCK test -HKR,defaults,*PacketCoalescing,0,"0" -HKR,,*PacketCoalescing,0,"0" - -;------------------------------------------------------------------------------- -; Auto Channel Selection -;------------------------------------------------------------------------------- -[AutoChnlSelon.reg] -HKR,,AutoChnlSel,0,"1" -[AutoChnlSeloff.reg] -HKR,,AutoChnlSel,0,"0" - -;;---------------------------------------------------------------------------- -;; RSSI to Grid Mode Parameters -;;---------------------------------------------------------------------------- -[RSSI2GridRealMode.reg] -HKR,,RSSI2GridMode,0,"1" -[RSSI2GridMode_2.reg] -HKR,,RSSI2GridMode,0,"2" -[RSSI2GridMode_4.reg] -HKR,,RSSI2GridMode,0,"4" - -;;---------------------------------------------------------------------------- -;; KFREE parameters -;;---------------------------------------------------------------------------- -[KFREE_COMMON.reg] -HKR,,RfKFreeEnable,0,"0" - -;******************************************************************************* -; Customer reg section -;******************************************************************************* -[ScanType.reg] -HKR,defaults,PassiveScan, 0, "0" -HKR,,PassiveScan, 0, "0" - -;******************************************************************************* -; Multi-Channel Concurrent section -;******************************************************************************* -[MCC.reg] -HKR,Ndi\params\MultiChannelFcsMode, ParamDesc, 0, %MCC_STR% -HKR,Ndi\params\MultiChannelFcsMode, type, 0, "enum" -HKR,Ndi\params\MultiChannelFcsMode, default, 0, "0" -HKR,Ndi\params\MultiChannelFcsMode\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\MultiChannelFcsMode\enum, "4", 0, %ENABLED_STR% -HKR,defaults,MultiChannelFcsMode, 0, "0" -HKR,,MultiChannelFcsMode, 0, "0" - -;******************************************************************************* -; Destination Directory -;******************************************************************************* -[RTWlanS.CopyFiles] -;; $$ DriverName Start -rtwlans.sys,,,2 -;; $$ DriverName End - -[DestinationDirs] -DefaultDestDir = 11 -RTWlanS.CopyFiles = 12 -CIHVS.CopyFiles = 11 -RtlUI2.CopyFiles = 10 - -;;**************************************************************************** -;; Source Files -;;**************************************************************************** -[CIHVS.CopyFiles] -Rtlihvs.dll,,,2 -;; $$ FeatureType WAPI Start -RtlExtUI.dll,,,2 -;; $$ FeatureType WAPI End - -[RegisterUIExt] -11,,RtlExtUI.dll,1 - -[RtlUI2.CopyFiles] -RtlUI2.exe,,,2 - -[SourceDisksFiles] -;; $$ DriverName Start -rtwlans.sys = 1 -Rtlihvs.dll = 1 -;; $$ DriverName End -;; $$ FeatureType WAPI Start -RtlExtUI.dll = 1 -;; $$ FeatureType WAPI End - -[SourceDisksNames] -1=%DISKNAME%,,, - - -;******************************************************************************* -; Strings -;******************************************************************************* -[Strings] -SSID_STR = "SSID" -CHANNEL_STR = "Channel" -NETWORK_TYPE_STR = "Network Type" -LED_CONTROL_STR = "LED Control" -POWER_SAVE_STR = "Power Save Mode" -WIFI_IBSS_STR = "IBSS Default 11b Mode" -RATE_ADAPTIVE_STR = "Rate Adaptive" -QOS_STR = "QoS" -WiFiConfg_STR = "WiFiConfg" -WMM_APSD = "WMM APSD" -CCX_RM_STR = "CCX Radio Measurement" -CCX_OFF_LINE_DUR_UP_LIMIT_STR = "CCX Max Off-Line Measurement (0: unlimited)" -FORCE_PRIORITY_STR = "Forced Priority" -HW_PARA_STR = "Init from HwParaFile" -THREE_WIRE_MODE_STR = "Three Wire Programming Mode" -BOARD_TYPE_STR = "Board Type" -PROTECTION_MODE_STR = "Protection Mode" -TPC_STR = "Transmit Power Control" -TPC_POLARITY_STR = "TPC Polarity Select" -HIGH_POWER_STR = "High Power Mechanism" -INIT_GAIN_STR = "Initial Gain State" -CW_MAX_MIN_STR = "Contention Window" -PSP_XLINK_STR = "PSP XLink Mode" -DISABLE_STR = "Disable" -ENABLE_STR = "Enable" -DISABLED_STR = "Disabled" -ENABLED_STR = "Enabled" -AUTO_STR = "Auto" -AD_HOC_STR = "Ad Hoc" -INFRASTRUCTURE_STR = "Infrastructure" -AUTO_SELECT = "Auto select" -WL_MODE_STR = "Wireless Mode" -RX_REORDER_STR = "Rx Reorder" -CAM_STR = "CAM" -MAX_PSP_STR = "MAX_PSP" -Fast_PSP_STR = "Fast_PSP" -NO_AC_STR = "No AC (Disable)" -ALL_AC_STR = "ALL AC" -IEEE_802_11A_STR = "IEEE 802.11a" -IEEE_802_11B_STR = "IEEE 802.11b" -IEEE_802_11BG_STR = "IEEE 802.11b/g" -IEEE_802_11BGN_STR = "IEEE 802.11b/g/n" -IEEE_802_11AN_STR = "IEEE 802.11a/n" -IEEE_802_11ANAC_STR = "IEEE 802.11a/n/ac" -IEEE_802_11AC_STR = "IEEE 802.11 ac" -WakeOnMagicPacket = "Wake on Magic Packet" -WakeOnPattern = "Wake on Pattern Match" -MCC_STR = "Multi-Channel Concurrent" - -;******************************************************************************* -; manufacture description -;******************************************************************************* -Realtek = "Realtek Semiconductor Corp." - - -;******************************************************************************* -; Source disk name -;******************************************************************************* -;; $$ CDISKNAME Start -DISKNAME = "Realtek Wireless LAN 802.11n SDIO Network Adapter Driver Disk" -RtlWlans.DeviceDesc = "Realtek Wireless LAN 802.11n SDIO Network Adapter" -RtlWlans.DeviceDesc.DispName = "Realtek Wireless LAN 802.11n SDIO Network Adapter" -;; $$ CDISKNAME End - -;; $$ ICtype 8723A Start -;******************************************************************************* -; RTL8723as Device description -;******************************************************************************* -RTL8723as.DeviceDesc = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723as.DeviceDesc.DispName = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" -;; $$ ICtype 8723A End - - - -;; $$ ICtype 8723B Start -;******************************************************************************* -; RTL8723bs Device description -;******************************************************************************* -RTL8723bs.DeviceDesc = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723bs.DeviceDesc.DispName = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" -;; $$ ICtype 8723B End - -;; $$ ICtype 8814A Start -;******************************************************************************* -; RTL8814as Device description -;******************************************************************************* -RTL8814as.DeviceDesc = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" -RTL8814as.DeviceDesc.DispName = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" -;; $$ ICtype 8814A End - -;; $$ ICtype 8188E Start -;******************************************************************************* -; RTL8188ES Device description -;******************************************************************************* -RTL8188es.DeviceDesc = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8188es.DeviceDesc.DispName = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -;; $$ ICtype 8188E End -;; $$ ICtype 8821A Start -;******************************************************************************* -; RTL8821as Device description -;******************************************************************************* -RTL8821as.DeviceDesc = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8821as.DeviceDesc.DispName = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -;; $$ ICtype 8821A End -;; $$ ICtype 8192E Start -;******************************************************************************* -; RTL8192E Device description -;******************************************************************************* -RTL8192es.DeviceDesc = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8192es.DeviceDesc.DispName = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" -;; $$ ICtype 8192E End - -;; $$ ICtype 8703B Start -;******************************************************************************* -; RTL8703bs Device description -;******************************************************************************* -RTL8703bs.DeviceDesc = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8703bs.DeviceDesc.DispName = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" -;; $$ ICtype 8703B End - -;; $$ ICtype 8188F Start -;******************************************************************************* -; RTL8188Fs Device description -;******************************************************************************* -RTL8188fs.DeviceDesc = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -RTL8188fs.DeviceDesc.DispName = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -;; $$ ICtype 8188F End -;; $$ ICtype 8822B Start -;******************************************************************************* -; RTL8822bs Device description -;******************************************************************************* -RTL8822bs.DeviceDesc = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8822bs.DeviceDesc.DispName = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -;; $$ ICtype 8822B End - -;; $$ ICtype 8723D Start -;******************************************************************************* -; RTL8723ds Device description -;******************************************************************************* -RTL8723ds.DeviceDesc = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723ds.DeviceDesc.DispName = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" -;; $$ ICtype 8723D End \ No newline at end of file diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/x64/netrtwlans.inf b/network/wlan/WDI/PLATFORM/WinInf/SDIO/x64/netrtwlans.inf deleted file mode 100644 index 8343a003..00000000 --- a/network/wlan/WDI/PLATFORM/WinInf/SDIO/x64/netrtwlans.inf +++ /dev/null @@ -1,1259 +0,0 @@ -;; netrtwlans.inf -;; -;; Realtek Wireless 802.11b/g/n SDIO Network Adapter -;; -;; Copyright (C) 2012 Realtek Semiconductor Corp. -;; -;; This release is primarily for WHQL test. -;; - -;; FOR XP/Vista/Win7/Win8 - -[Version] -Signature = "$Windows NT$" -Class = Net -ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} -Provider = %Realtek% -CatalogFile.NT = netrtwlans.cat ;; for WHQL certified -DriverVer = 11/23/2015,3008.22.1030.2015 - -[Manufacturer] -%Realtek% = Realtek,NTamd64.10.0 - -[ControlFlags] -ExcludeFromSelect = * - -[Realtek.NTamd64.10.0] -;; For 8723 RTK common ================================================================ - -;; For 8723 RTK common ================================================================ -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_8753 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_B723 -;; Acer -%RTL8723bs.DeviceDesc% = ACER8723bs.ndi, SD\VID_024C&PID_0623 -;; HP -%RTL8723bs.DeviceDesc% = HP8723bs.ndi, SD\VID_024C&PID_0523 -;; ECS -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0524 -;; bestbuy -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0240 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0241 -;; For Braswell platform -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0626 -;; Reserved -%RTL8723bs.DeviceDesc% = RSVD8723bs.ndi, SD\VID_024C&PID_0624 - -;; For 8188E RTK common ================================================================ -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8188 -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8179 - -;; For 8812A RTK common ================================================================ - -;; For 8814A RTK common ================================================================ -%RTL8814as.DeviceDesc% = RTL8814as.ndi, SD\VID_024C&PID_8813 - -;; For 8821A RTK common ================================================================ -%RTL8821as.DeviceDesc% = RTL8821as.ndi, SD\VID_024C&PID_8821 - -;; For 8192ES RTK common ================================================================ -%RTL8192es.DeviceDesc% = RTL8192es.ndi, SD\VID_024C&PID_818B - - -;; For 8703 RTK common ================================================================ -%RTL8703bs.DeviceDesc% = RTL8703bs.ndi, SD\VID_024C&PID_B703 - -;; For 8188 RTK common ================================================================ -%RTL8188fs.DeviceDesc% = RTL8188fs.ndi, SD\VID_024C&PID_F179 - -;; For 8822B RTK common ================================================================ -%RTL8822bs.DeviceDesc% = RTL8822bs.ndi, SD\VID_024C&PID_B822 - -;; For 8723D RTK common ================================================================ -%RTL8723ds.DeviceDesc% = RTL8723ds.ndi, SD\VID_024C&PID_D723 - -;;---------------------------------------------------------------------------- -;; Realtek 8723as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723as.ndi.NT] -AddReg = NDIS_64.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8723bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;;---------------------------------------------------------------------------- -;; Acer 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[ACER8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, RSSI2GridMode_2.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;;---------------------------------------------------------------------------- -;; HP 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[HP8723bs.ndi.NT] -AddReg = NDIS_64.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; RSVD 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[RSVD8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanDisable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8188eu default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8188es.ndi.NT] -AddReg = NDIS_64.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8821as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8821as.ndi.NT] -AddReg = NDIS_64.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8814as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8814as.ndi.NT] -AddReg = NDIS_64.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8192es default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8192es.ndi.NT] -AddReg = NDIS_64.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8703bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8703bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8188fs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8188fs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - -;;---------------------------------------------------------------------------- -;; Realtek 8822bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8822bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8723ds default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723ds.ndi.NT] -AddReg = NDIS_64.reg, RTL8723ds.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - -;;---------------------------------------------------------------------------- -;; OS relative registry. -;;---------------------------------------------------------------------------- -[NDIS_64.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -HKR, Ndi, Service, 0, "RtlWlans" -;; -;; OS relative service. -;; -[RtlWlans.Service] -DisplayName = %RtlWlans.DeviceDesc.DispName% -ServiceType = 1 ; %SERVICE_KERNEL_DRIVER% -StartType = 3 ; %SERRVICE_DEMAND_START% -ErrorControl = 1 ; %SERRVICE_ERROR_NORMAL% -ServiceBinary = %12%\rtwlans.sys -LoadOrderGroup = NDIS - -;; -;; OS relative event log. -;; -[RtlWlans.EventLog] -AddReg = RtlWlans.AddEventLog.reg - -[RtlWlans.AddEventLog.reg] -HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll" -HKR, , TypesSupported , 0x00010001, 7 - -[CIHVS.reg] -HKR, Ndi\IHVExtensions, ExtensibilityDLL, 0, "%SystemRoot%\system32\Rtlihvs.dll" -HKR, Ndi\IHVExtensions, UIExtensibilityCLSID, 0, "{6C2A8CCA-B2A2-4d81-A3B2-4E15F445C312}" -HKR, Ndi\IHVExtensions, GroupName, 0, "Realtek CCX SDK IHV Service" -HKR, Ndi\IHVExtensions, AdapterOUI, 0x00010001, 0x00e04c - -;******************************************************************************* -; WAPI section -;******************************************************************************* -[wapi.reg] -HKR,defaults,WapiSupport,0,"1" -HKR,,WapiSupport,0,"1" - -;******************************************************************************* -; RTL8723as common paramters -;******************************************************************************* -[RTL8723as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - - -;******************************************************************************* -; RTL8723bs common paramters -;******************************************************************************* -[RTL8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -;;HKR,defaults,EnableAdaptivity,0,"0" -;;HKR,,EnableAdaptivity,0,"0" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of RTL8723bs.common.reg - -[HP8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -; Enable Adaptivity -;;HKR,defaults,EnableAdaptivity,0,"1" -;;HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; Enable Customeized PowerLimit Table -HKR,,EnableTxPowerLimit,0,"1" -HKR,,DecryptCustomFile,,"1" -HKR,,PwrLimitFile,0,"TXPWR_LMT_IEC0921_Enc.txt" - -; Regulation WorldWide -HKR,defaults,PwrTblSel,0,"4" -HKR,,PwrTblSel,0,"4" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of HP8723bs.common.reg - -;******************************************************************************* -; RTL8703bs common paramters -;******************************************************************************* -[RTL8703bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - - -;******************************************************************************* -; RTL8188Fs common paramters -;******************************************************************************* -[RTL8188fs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"0" -HKR,,RomDLFwEnable,0,"0" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - - -;******************************************************************************* -; RTL8821as common paramters -;******************************************************************************* -[RTL8821as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - - -;******************************************************************************* -; RTL8814as common paramters -;******************************************************************************* -[RTL8814as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;; Add for 8814AS, based on 8821AS's modification -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - - -;******************************************************************************* -; RTL8192es common paramters -;******************************************************************************* -[RTL8192es.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;******************************************************************************* -; RTL8822bs common paramters -;******************************************************************************* -[RTL8822bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" -HKR,,ValidRFPath,0,"51" -HKR,,PreInitMem,0,"1" - - -;******************************************************************************* -; RTL8723ds common paramters -;******************************************************************************* -[RTL8723ds.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,defaults,LdpcCap,0,"0" - - -;;---------------------------------------------------------------------------- -;; Realtek WLAN NIC parameters -;;---------------------------------------------------------------------------- -[RTLWLAN.reg] - -; Enable Adaptivity -HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,Channel,0,"1" -HKR,,Channel,0,"1" - -;; Antenna Diversity Type -HKR,defaults,AntennaDivType,0,"0" -HKR,,AntennaDivType,0,"0" - -HKR,defaults,NetworkType,0,"1" -HKR,,NetworkType,0,"1" - -HKR,defaults,StaUapsd,0,"0" -HKR,,StaUapsd,0,"0" - -; For B/G mode and B/G/N mode switch, we will use different wireless mode registry in later section -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - - -;; For WiFi test, 1: WiFi Config and 0: Performance Config -HKR,defaults,WiFiConfg,0,"0" -HKR,,WiFiConfg,0,"0" - -HKR,defaults,RxReorder,0,"1" -HKR,,RxReorder,0,"1" - -HKR,,DefaultKeyID,,"0" -HKR,,DefaultKey0,,"" -HKR,,DefaultKey1,,"" -HKR,,DefaultKey2,,"" -HKR,,DefaultKey3,,"" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - -;Leisure Power Save -HKR,defaults,bLeisurePs,0,"2" -HKR,,bLeisurePs,0,"2" - -;Fw Control LPS -HKR,defaults,bFwCtrlLPS,0,"1" -HKR,,bFwCtrlLPS,0,"1" - -;; LPS Interval -;HKR,defaults,LPSIntvl,0,"3" -HKR,,LPSIntvl,0,"3" - -HKR,,WEPinNmode,0,"0" - -HKR,defaults,RxSC,0,"0" -HKR,,RxSC,0,"0" - -HKR,defaults,TxSC,0,"0" -HKR,,TxSC,0,"0" - -HKR,defaults,NblRacingWA,0,"1" -HKR,,NblRacingWA,0,"1" - -HKR,defaults,SuspendTimerInLowPwr,0,"1" -HKR,,SuspendTimerInLowPwr,0,"1" - -;; Rx reorder pending time -HKR,,RxReorder_PendTime,0,"100" - -;Antenna Diversity -HKR,Ndi\params\AntDiv, ParamDesc, 0, "Antenna Diversity" -HKR,Ndi\params\AntDiv, default, 0, "0" -HKR,Ndi\params\AntDiv, type, 0, "enum" -HKR,Ndi\params\AntDiv\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\AntDiv\enum, "1", 0, %ENABLED_STR% - -HKLM, SYSTEM\CurrentControlSet\Services\RtlWlans\Parameters, "BtAntennaInHw", 0x00010001,2 - -[Ndis5Set.reg] -HKR,Ndi\params\PSPXlinkMode, ParamDesc, 0, %PSP_XLINK_STR% -HKR,Ndi\params\PSPXlinkMode, type, 0, "enum" -HKR,Ndi\params\PSPXlinkMode, default, 0, "0" -HKR,Ndi\params\PSPXlinkMode\enum, "0", 0, %DISABLE_STR% -HKR,Ndi\params\PSPXlinkMode\enum, "1", 0, %ENABLE_STR% -HKR,defaults,PSPXlinkMode,0,"0" -HKR,,PSPXlinkMode,0,"0" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - - -[Ndis6Set.reg] -;Inactive Power Save -HKR,defaults,InactivePs,0,"2" -HKR,,InactivePs,0,"2" - - -;;---------------------------------------------------------------------------- -;; Wireless mode option parameters -;;---------------------------------------------------------------------------- -[11nWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -;; 40MHz Support in 11n -HKR,Ndi\params\BWSetting, ParamDesc, 0, "Bandwidth" -HKR,Ndi\params\BWSetting, type, 0, "enum" -HKR,Ndi\params\BWSetting, default, 0, "1" -HKR,Ndi\params\BWSetting\enum, "0", 0, "20MHz Only" -HKR,Ndi\params\BWSetting\enum, "1", 0, "20_40MHz" -HKR,defaults,BWSetting,0,"1" -HKR,,BWSetting,0,"1" -HKR,,BWSetting,,"1" - -HKR,,Channel,0,"10" - -[11gWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,defaults,WirelessMode, 0, "4" -HKR,,WirelessMode, 0, "4" - -HKR,,BWSetting,0,"0" - -HKR,,Channel,0,"10" - -[11acWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "8", 0, %AUTO_STR% -HKR,Ndi\params\WirelessMode\enum, "1", 0, %IEEE_802_11A_STR% -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "16", 0, %IEEE_802_11BGN_STR% -HKR,Ndi\params\WirelessMode\enum, "32", 0, %IEEE_802_11AN_STR% -HKR,Ndi\params\WirelessMode\enum, "64", 0, %IEEE_802_11ANAC_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -HKR,,Channel,0,"36" - -;; RF Type -HKR,,RFType,0,"15" - - -HKR,defaults,BWSetting,0,"2" -HKR,,BWSetting,0,"2" - -;;---------------------------------------------------------------------------- -;; LPS 32k Control Parameters -;;---------------------------------------------------------------------------- -[32kEnable.reg] -HKR,,bLowPowerEnable,0,"1" -[32kDisable.reg] -HKR,,bLowPowerEnable,0,"0" - -;------------------------------------------------------------------------------- -; PnP pre-transition handling -;------------------------------------------------------------------------------- -[PnpPreTransOn.reg] -HKR,,PreTransPnP,0,"1" -[PnpPreTransOff.reg] -HKR,,PreTransPnP,0,"0" - -;;---------------------------------------------------------------------------- -;; WOWLAN Control Parameters -;;---------------------------------------------------------------------------- -[WowlanAllEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanDisable.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"0" -HKR,,GTKOffloadEnable,0,"0" - -[WowlanAllEnableNoLPS.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanEnableNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[WowlanEnableNoLPSNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[ConnectedStandbyEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" -HKR,,D2ListenIntvl,0,"4" -HKR,,NSOffloadEnable,0,"1" -HKR,,NLOEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "0" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"0" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -;; Packet coalescing should be enabled in WHCK test -HKR,defaults,*PacketCoalescing,0,"0" -HKR,,*PacketCoalescing,0,"0" - -;------------------------------------------------------------------------------- -; Auto Channel Selection -;------------------------------------------------------------------------------- -[AutoChnlSelon.reg] -HKR,,AutoChnlSel,0,"1" -[AutoChnlSeloff.reg] -HKR,,AutoChnlSel,0,"0" - -;;---------------------------------------------------------------------------- -;; RSSI to Grid Mode Parameters -;;---------------------------------------------------------------------------- -[RSSI2GridRealMode.reg] -HKR,,RSSI2GridMode,0,"1" -[RSSI2GridMode_2.reg] -HKR,,RSSI2GridMode,0,"2" -[RSSI2GridMode_4.reg] -HKR,,RSSI2GridMode,0,"4" - -;;---------------------------------------------------------------------------- -;; KFREE parameters -;;---------------------------------------------------------------------------- -[KFREE_COMMON.reg] -HKR,,RfKFreeEnable,0,"0" - -;******************************************************************************* -; Customer reg section -;******************************************************************************* -[ScanType.reg] -HKR,defaults,PassiveScan, 0, "0" -HKR,,PassiveScan, 0, "0" - -;******************************************************************************* -; Multi-Channel Concurrent section -;******************************************************************************* -[MCC.reg] -HKR,Ndi\params\MultiChannelFcsMode, ParamDesc, 0, %MCC_STR% -HKR,Ndi\params\MultiChannelFcsMode, type, 0, "enum" -HKR,Ndi\params\MultiChannelFcsMode, default, 0, "0" -HKR,Ndi\params\MultiChannelFcsMode\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\MultiChannelFcsMode\enum, "4", 0, %ENABLED_STR% -HKR,defaults,MultiChannelFcsMode, 0, "0" -HKR,,MultiChannelFcsMode, 0, "0" - -;******************************************************************************* -; Destination Directory -;******************************************************************************* -[RTWlanS.CopyFiles] -rtwlans.sys,,,2 - -[DestinationDirs] -DefaultDestDir = 11 -RTWlanS.CopyFiles = 12 -CIHVS.CopyFiles = 11 -RtlUI2.CopyFiles = 10 - -;;**************************************************************************** -;; Source Files -;;**************************************************************************** -[CIHVS.CopyFiles] -Rtlihvs.dll,,,2 - -[RegisterUIExt] -11,,RtlExtUI.dll,1 - -[RtlUI2.CopyFiles] -RtlUI2.exe,,,2 - -[SourceDisksFiles] -rtwlans.sys = 1 -Rtlihvs.dll = 1 - -[SourceDisksNames] -1=%DISKNAME%,,, - - -;******************************************************************************* -; Strings -;******************************************************************************* -[Strings] -SSID_STR = "SSID" -CHANNEL_STR = "Channel" -NETWORK_TYPE_STR = "Network Type" -LED_CONTROL_STR = "LED Control" -POWER_SAVE_STR = "Power Save Mode" -WIFI_IBSS_STR = "IBSS Default 11b Mode" -RATE_ADAPTIVE_STR = "Rate Adaptive" -QOS_STR = "QoS" -WiFiConfg_STR = "WiFiConfg" -WMM_APSD = "WMM APSD" -CCX_RM_STR = "CCX Radio Measurement" -CCX_OFF_LINE_DUR_UP_LIMIT_STR = "CCX Max Off-Line Measurement (0: unlimited)" -FORCE_PRIORITY_STR = "Forced Priority" -HW_PARA_STR = "Init from HwParaFile" -THREE_WIRE_MODE_STR = "Three Wire Programming Mode" -BOARD_TYPE_STR = "Board Type" -PROTECTION_MODE_STR = "Protection Mode" -TPC_STR = "Transmit Power Control" -TPC_POLARITY_STR = "TPC Polarity Select" -HIGH_POWER_STR = "High Power Mechanism" -INIT_GAIN_STR = "Initial Gain State" -CW_MAX_MIN_STR = "Contention Window" -PSP_XLINK_STR = "PSP XLink Mode" -DISABLE_STR = "Disable" -ENABLE_STR = "Enable" -DISABLED_STR = "Disabled" -ENABLED_STR = "Enabled" -AUTO_STR = "Auto" -AD_HOC_STR = "Ad Hoc" -INFRASTRUCTURE_STR = "Infrastructure" -AUTO_SELECT = "Auto select" -WL_MODE_STR = "Wireless Mode" -RX_REORDER_STR = "Rx Reorder" -CAM_STR = "CAM" -MAX_PSP_STR = "MAX_PSP" -Fast_PSP_STR = "Fast_PSP" -NO_AC_STR = "No AC (Disable)" -ALL_AC_STR = "ALL AC" -IEEE_802_11A_STR = "IEEE 802.11a" -IEEE_802_11B_STR = "IEEE 802.11b" -IEEE_802_11BG_STR = "IEEE 802.11b/g" -IEEE_802_11BGN_STR = "IEEE 802.11b/g/n" -IEEE_802_11AN_STR = "IEEE 802.11a/n" -IEEE_802_11ANAC_STR = "IEEE 802.11a/n/ac" -IEEE_802_11AC_STR = "IEEE 802.11 ac" -WakeOnMagicPacket = "Wake on Magic Packet" -WakeOnPattern = "Wake on Pattern Match" -MCC_STR = "Multi-Channel Concurrent" - -;******************************************************************************* -; manufacture description -;******************************************************************************* -Realtek = "Realtek Semiconductor Corp." - - -;******************************************************************************* -; Source disk name -;******************************************************************************* -DISKNAME = "Realtek Wireless LAN 802.11n SDIO Network Adapter Driver Disk" -RtlWlans.DeviceDesc = "Realtek Wireless LAN 802.11n SDIO Network Adapter" -RtlWlans.DeviceDesc.DispName = "Realtek Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8723as Device description -;******************************************************************************* -RTL8723as.DeviceDesc = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723as.DeviceDesc.DispName = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" - - - -;******************************************************************************* -; RTL8723bs Device description -;******************************************************************************* -RTL8723bs.DeviceDesc = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723bs.DeviceDesc.DispName = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8814as Device description -;******************************************************************************* -RTL8814as.DeviceDesc = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" -RTL8814as.DeviceDesc.DispName = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" - -;******************************************************************************* -; RTL8188ES Device description -;******************************************************************************* -RTL8188es.DeviceDesc = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8188es.DeviceDesc.DispName = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -;******************************************************************************* -; RTL8821as Device description -;******************************************************************************* -RTL8821as.DeviceDesc = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8821as.DeviceDesc.DispName = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -;******************************************************************************* -; RTL8192E Device description -;******************************************************************************* -RTL8192es.DeviceDesc = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8192es.DeviceDesc.DispName = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" - -;******************************************************************************* -; RTL8703bs Device description -;******************************************************************************* -RTL8703bs.DeviceDesc = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8703bs.DeviceDesc.DispName = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8188Fs Device description -;******************************************************************************* -RTL8188fs.DeviceDesc = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -RTL8188fs.DeviceDesc.DispName = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -;******************************************************************************* -; RTL8822bs Device description -;******************************************************************************* -RTL8822bs.DeviceDesc = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8822bs.DeviceDesc.DispName = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" - -;******************************************************************************* -; RTL8723ds Device description -;******************************************************************************* -RTL8723ds.DeviceDesc = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723ds.DeviceDesc.DispName = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" diff --git a/network/wlan/WDI/PLATFORM/WinInf/SDIO/x86/netrtwlans.inf b/network/wlan/WDI/PLATFORM/WinInf/SDIO/x86/netrtwlans.inf deleted file mode 100644 index 5e6b284b..00000000 --- a/network/wlan/WDI/PLATFORM/WinInf/SDIO/x86/netrtwlans.inf +++ /dev/null @@ -1,1259 +0,0 @@ -;; netrtwlans.inf -;; -;; Realtek Wireless 802.11b/g/n SDIO Network Adapter -;; -;; Copyright (C) 2012 Realtek Semiconductor Corp. -;; -;; This release is primarily for WHQL test. -;; - -;; FOR XP/Vista/Win7/Win8 - -[Version] -Signature = "$Windows NT$" -Class = Net -ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} -Provider = %Realtek% -CatalogFile.NT = netrtwlans.cat ;; for WHQL certified -DriverVer = 11/23/2015,3008.22.1030.2015 - -[Manufacturer] -%Realtek% = Realtek,NTx86.10.0 - -[ControlFlags] -ExcludeFromSelect = * - -[Realtek.NTx86.10.0] -;; For 8723 RTK common ================================================================ - -;; For 8723 RTK common ================================================================ -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_8753 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_B723 -;; Acer -%RTL8723bs.DeviceDesc% = ACER8723bs.ndi, SD\VID_024C&PID_0623 -;; HP -%RTL8723bs.DeviceDesc% = HP8723bs.ndi, SD\VID_024C&PID_0523 -;; ECS -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0524 -;; bestbuy -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0240 -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0241 -;; For Braswell platform -%RTL8723bs.DeviceDesc% = RTL8723bs.ndi, SD\VID_024C&PID_0626 -;; Reserved -%RTL8723bs.DeviceDesc% = RSVD8723bs.ndi, SD\VID_024C&PID_0624 - -;; For 8188E RTK common ================================================================ -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8188 -%RTL8188es.DeviceDesc% = RTL8188es.ndi, SD\VID_024C&PID_8179 - -;; For 8812A RTK common ================================================================ - -;; For 8814A RTK common ================================================================ -%RTL8814as.DeviceDesc% = RTL8814as.ndi, SD\VID_024C&PID_8813 - -;; For 8821A RTK common ================================================================ -%RTL8821as.DeviceDesc% = RTL8821as.ndi, SD\VID_024C&PID_8821 - -;; For 8192ES RTK common ================================================================ -%RTL8192es.DeviceDesc% = RTL8192es.ndi, SD\VID_024C&PID_818B - - -;; For 8703 RTK common ================================================================ -%RTL8703bs.DeviceDesc% = RTL8703bs.ndi, SD\VID_024C&PID_B703 - -;; For 8188 RTK common ================================================================ -%RTL8188fs.DeviceDesc% = RTL8188fs.ndi, SD\VID_024C&PID_F179 - -;; For 8822B RTK common ================================================================ -%RTL8822bs.DeviceDesc% = RTL8822bs.ndi, SD\VID_024C&PID_B822 - -;; For 8723D RTK common ================================================================ -%RTL8723ds.DeviceDesc% = RTL8723ds.ndi, SD\VID_024C&PID_D723 - -;;---------------------------------------------------------------------------- -;; Realtek 8723as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723as.ndi.NT] -AddReg = NDIS_64.reg, RTL8723as.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8723bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;;---------------------------------------------------------------------------- -;; Acer 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[ACER8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, RSSI2GridMode_2.reg, MCC.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[ACER8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[ACER8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration -;;---------------------------------------------------------------------------- -;; HP 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[HP8723bs.ndi.NT] -AddReg = NDIS_64.reg, HP8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[HP8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[HP8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; RSVD 8723bs installation -;;---------------------------------------------------------------------------- - - - - - -[RSVD8723bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8723bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, WowlanDisable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RSVD8723bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RSVD8723bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8188eu default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8188es.ndi.NT] -AddReg = NDIS_64.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188es.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188es.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8821as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8821as.ndi.NT] -AddReg = NDIS_64.reg, RTL8821as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8821as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8821as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8814as default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8814as.ndi.NT] -AddReg = NDIS_64.reg, RTL8814as.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8814as.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8814as.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8192es default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8192es.ndi.NT] -AddReg = NDIS_64.reg, RTL8192es.common.reg, RTLWLAN.reg, 11nWirelessMode.reg, Ndis6Set.reg, CIHVS.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8192es.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8192es.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8703bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8703bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, AutoChnlSelon.reg, CIHVS.reg, KFREE_COMMON.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8703bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8703bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8188fs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8188fs.ndi.NT] -AddReg = NDIS_64.reg, RTL8703bs.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8188fs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8188fs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - -;;---------------------------------------------------------------------------- -;; Realtek 8822bs default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8822bs.ndi.NT] -AddReg = NDIS_64.reg, RTL8822bs.common.reg, RTLWLAN.reg, 11acWirelessMode.reg, Ndis6Set.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8822bs.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8822bs.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - - -;;---------------------------------------------------------------------------- -;; Realtek 8723ds default installation -;;---------------------------------------------------------------------------- - - - - - -[RTL8723ds.ndi.NT] -AddReg = NDIS_64.reg, RTL8723ds.common.reg, RTLWLAN.reg, Ndis6Set.reg, 11nWirelessMode.reg, ConnectedStandbyEnable.reg, 32kEnable.reg, CIHVS.reg, PnpPreTransOn.reg, AutoChnlSelon.reg -Include = netvwifibus.inf -Needs = VWiFiBus.CopyFiles -Characteristics = 0x84 -BusType = 15 -CopyFiles = RTWlanS.CopyFiles -*IfType = 71 ; IF_TYPE_IEEE80211 -*MediaType = 16 ; NdisMediumNative802_11 -*PhysicalMediaType = 9 ; NdisPhysicalMediumNative802_11 - -[RTL8723ds.ndi.NT.Services] -AddService = RtlWlans, 2, RtlWlans.Service, RtlWlans.EventLog -Include = netvwifibus.inf -Needs = VWiFiBus.Services - -[RTL8723ds.ndi.NT.HW] -Include = netvwifibus.inf -Needs = VWiFiBus.PnPFilterRegistration - -;;---------------------------------------------------------------------------- -;; OS relative registry. -;;---------------------------------------------------------------------------- -[NDIS_64.reg] -HKR, Ndi\Interfaces, UpperRange, 0, "ndis5,mdcwifi" -HKR, Ndi\Interfaces, LowerRange, 0, "wlan,ethernet,vwifi" -HKR, Ndi, Service, 0, "RtlWlans" -;; -;; OS relative service. -;; -[RtlWlans.Service] -DisplayName = %RtlWlans.DeviceDesc.DispName% -ServiceType = 1 ; %SERVICE_KERNEL_DRIVER% -StartType = 3 ; %SERRVICE_DEMAND_START% -ErrorControl = 1 ; %SERRVICE_ERROR_NORMAL% -ServiceBinary = %12%\rtwlans.sys -LoadOrderGroup = NDIS - -;; -;; OS relative event log. -;; -[RtlWlans.EventLog] -AddReg = RtlWlans.AddEventLog.reg - -[RtlWlans.AddEventLog.reg] -HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll" -HKR, , TypesSupported , 0x00010001, 7 - -[CIHVS.reg] -HKR, Ndi\IHVExtensions, ExtensibilityDLL, 0, "%SystemRoot%\system32\Rtlihvs.dll" -HKR, Ndi\IHVExtensions, UIExtensibilityCLSID, 0, "{6C2A8CCA-B2A2-4d81-A3B2-4E15F445C312}" -HKR, Ndi\IHVExtensions, GroupName, 0, "Realtek CCX SDK IHV Service" -HKR, Ndi\IHVExtensions, AdapterOUI, 0x00010001, 0x00e04c - -;******************************************************************************* -; WAPI section -;******************************************************************************* -[wapi.reg] -HKR,defaults,WapiSupport,0,"1" -HKR,,WapiSupport,0,"1" - -;******************************************************************************* -; RTL8723as common paramters -;******************************************************************************* -[RTL8723as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - - -;******************************************************************************* -; RTL8723bs common paramters -;******************************************************************************* -[RTL8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -;;HKR,defaults,EnableAdaptivity,0,"0" -;;HKR,,EnableAdaptivity,0,"0" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of RTL8723bs.common.reg - -[HP8723bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - -; Enable Adaptivity -;;HKR,defaults,EnableAdaptivity,0,"1" -;;HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,EnableCarrierSense,0,"0" -HKR,,EnableCarrierSense,0,"0" - -; Enable Customeized PowerLimit Table -HKR,,EnableTxPowerLimit,0,"1" -HKR,,DecryptCustomFile,,"1" -HKR,,PwrLimitFile,0,"TXPWR_LMT_IEC0921_Enc.txt" - -; Regulation WorldWide -HKR,defaults,PwrTblSel,0,"4" -HKR,,PwrTblSel,0,"4" - -; AOAC reconnect -HKR,defaults,PnpKeepLink,0,"1" -HKR,,PnpKeepLink,0,"1" - -;; $$ End of HP8723bs.common.reg - -;******************************************************************************* -; RTL8703bs common paramters -;******************************************************************************* -[RTL8703bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"1" -HKR,,RomDLFwEnable,0,"1" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - - -;******************************************************************************* -; RTL8188Fs common paramters -;******************************************************************************* -[RTL8188fs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,RomDLFwEnable,0,"0" -HKR,,RomDLFwEnable,0,"0" - -HKR,defaults,bFwCtrlPwrOff,0,"1" -HKR,,bFwCtrlPwrOff,0,"1" - - -;******************************************************************************* -; RTL8821as common paramters -;******************************************************************************* -[RTL8821as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - - -;******************************************************************************* -; RTL8814as common paramters -;******************************************************************************* -[RTL8814as.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;; Add for 8814AS, based on 8821AS's modification -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" - - -;******************************************************************************* -; RTL8192es common paramters -;******************************************************************************* -[RTL8192es.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -;******************************************************************************* -; RTL8822bs common paramters -;******************************************************************************* -[RTL8822bs.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,,StbcCap,0,"17" -HKR,,LdpcCap,0,"34" -HKR,,BeamformCap,0,"34" -HKR,,ValidRFPath,0,"51" -HKR,,PreInitMem,0,"1" - - -;******************************************************************************* -; RTL8723ds common paramters -;******************************************************************************* -[RTL8723ds.common.reg] -HKR,defaults,LedCtrl,0,"1" -HKR,,LedCtrl,0,"1" - -HKR,defaults,QoS,0,"1" -HKR,,QoS,0,"1" - -HKR,defaults,CcxRm,0,"1" -HKR,,CcxRm,0,"1" - -HKR,defaults,CcxOffLineDurUpLimit,0,"0" -HKR,,CcxOffLineDurUpLimit,0,"0" - -HKR,defaults,UsbRxAggMode,0,"1" -HKR,,UsbRxAggMode,0,"1" - -HKR,defaults,bEarlymodeEnable,0,"0" -HKR,,bEarlymodeEnable,0,"0" - -HKR,defaults,LdpcCap,0,"0" - - -;;---------------------------------------------------------------------------- -;; Realtek WLAN NIC parameters -;;---------------------------------------------------------------------------- -[RTLWLAN.reg] - -; Enable Adaptivity -HKR,,EnableAdaptivity,0,"1" - -HKR,defaults,Channel,0,"1" -HKR,,Channel,0,"1" - -;; Antenna Diversity Type -HKR,defaults,AntennaDivType,0,"0" -HKR,,AntennaDivType,0,"0" - -HKR,defaults,NetworkType,0,"1" -HKR,,NetworkType,0,"1" - -HKR,defaults,StaUapsd,0,"0" -HKR,,StaUapsd,0,"0" - -; For B/G mode and B/G/N mode switch, we will use different wireless mode registry in later section -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - - -;; For WiFi test, 1: WiFi Config and 0: Performance Config -HKR,defaults,WiFiConfg,0,"0" -HKR,,WiFiConfg,0,"0" - -HKR,defaults,RxReorder,0,"1" -HKR,,RxReorder,0,"1" - -HKR,,DefaultKeyID,,"0" -HKR,,DefaultKey0,,"" -HKR,,DefaultKey1,,"" -HKR,,DefaultKey2,,"" -HKR,,DefaultKey3,,"" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - -;Leisure Power Save -HKR,defaults,bLeisurePs,0,"2" -HKR,,bLeisurePs,0,"2" - -;Fw Control LPS -HKR,defaults,bFwCtrlLPS,0,"1" -HKR,,bFwCtrlLPS,0,"1" - -;; LPS Interval -;HKR,defaults,LPSIntvl,0,"3" -HKR,,LPSIntvl,0,"3" - -HKR,,WEPinNmode,0,"0" - -HKR,defaults,RxSC,0,"0" -HKR,,RxSC,0,"0" - -HKR,defaults,TxSC,0,"0" -HKR,,TxSC,0,"0" - -HKR,defaults,NblRacingWA,0,"1" -HKR,,NblRacingWA,0,"1" - -HKR,defaults,SuspendTimerInLowPwr,0,"1" -HKR,,SuspendTimerInLowPwr,0,"1" - -;; Rx reorder pending time -HKR,,RxReorder_PendTime,0,"100" - -;Antenna Diversity -HKR,Ndi\params\AntDiv, ParamDesc, 0, "Antenna Diversity" -HKR,Ndi\params\AntDiv, default, 0, "0" -HKR,Ndi\params\AntDiv, type, 0, "enum" -HKR,Ndi\params\AntDiv\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\AntDiv\enum, "1", 0, %ENABLED_STR% - -HKLM, SYSTEM\CurrentControlSet\Services\RtlWlans\Parameters, "BtAntennaInHw", 0x00010001,2 - -[Ndis5Set.reg] -HKR,Ndi\params\PSPXlinkMode, ParamDesc, 0, %PSP_XLINK_STR% -HKR,Ndi\params\PSPXlinkMode, type, 0, "enum" -HKR,Ndi\params\PSPXlinkMode, default, 0, "0" -HKR,Ndi\params\PSPXlinkMode\enum, "0", 0, %DISABLE_STR% -HKR,Ndi\params\PSPXlinkMode\enum, "1", 0, %ENABLE_STR% -HKR,defaults,PSPXlinkMode,0,"0" -HKR,,PSPXlinkMode,0,"0" - -;Inactive Power Save -HKR,defaults,InactivePs,0,"0" -HKR,,InactivePs,0,"0" - - -[Ndis6Set.reg] -;Inactive Power Save -HKR,defaults,InactivePs,0,"2" -HKR,,InactivePs,0,"2" - - -;;---------------------------------------------------------------------------- -;; Wireless mode option parameters -;;---------------------------------------------------------------------------- -[11nWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "8", 0, %IEEE_802_11BGN_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -;; 40MHz Support in 11n -HKR,Ndi\params\BWSetting, ParamDesc, 0, "Bandwidth" -HKR,Ndi\params\BWSetting, type, 0, "enum" -HKR,Ndi\params\BWSetting, default, 0, "1" -HKR,Ndi\params\BWSetting\enum, "0", 0, "20MHz Only" -HKR,Ndi\params\BWSetting\enum, "1", 0, "20_40MHz" -HKR,defaults,BWSetting,0,"1" -HKR,,BWSetting,0,"1" -HKR,,BWSetting,,"1" - -HKR,,Channel,0,"10" - -[11gWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,defaults,WirelessMode, 0, "4" -HKR,,WirelessMode, 0, "4" - -HKR,,BWSetting,0,"0" - -HKR,,Channel,0,"10" - -[11acWirelessMode.reg] -HKR,Ndi\params\WirelessMode, ParamDesc, 0, %WL_MODE_STR% -HKR,Ndi\params\WirelessMode, type, 0, "enum" -HKR,Ndi\params\WirelessMode, default, 0, "8" -HKR,Ndi\params\WirelessMode\enum, "8", 0, %AUTO_STR% -HKR,Ndi\params\WirelessMode\enum, "1", 0, %IEEE_802_11A_STR% -HKR,Ndi\params\WirelessMode\enum, "2", 0, %IEEE_802_11B_STR% -HKR,Ndi\params\WirelessMode\enum, "4", 0, %IEEE_802_11BG_STR% -HKR,Ndi\params\WirelessMode\enum, "16", 0, %IEEE_802_11BGN_STR% -HKR,Ndi\params\WirelessMode\enum, "32", 0, %IEEE_802_11AN_STR% -HKR,Ndi\params\WirelessMode\enum, "64", 0, %IEEE_802_11ANAC_STR% -HKR,defaults,WirelessMode, 0, "8" -HKR,,WirelessMode, 0, "8" - -HKR,,Channel,0,"36" - -;; RF Type -HKR,,RFType,0,"15" - - -HKR,defaults,BWSetting,0,"2" -HKR,,BWSetting,0,"2" - -;;---------------------------------------------------------------------------- -;; LPS 32k Control Parameters -;;---------------------------------------------------------------------------- -[32kEnable.reg] -HKR,,bLowPowerEnable,0,"1" -[32kDisable.reg] -HKR,,bLowPowerEnable,0,"0" - -;------------------------------------------------------------------------------- -; PnP pre-transition handling -;------------------------------------------------------------------------------- -[PnpPreTransOn.reg] -HKR,,PreTransPnP,0,"1" -[PnpPreTransOff.reg] -HKR,,PreTransPnP,0,"0" - -;;---------------------------------------------------------------------------- -;; WOWLAN Control Parameters -;;---------------------------------------------------------------------------- -[WowlanAllEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanDisable.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"0" -HKR,,GTKOffloadEnable,0,"0" - -[WowlanAllEnableNoLPS.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -[WowlanEnableNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[WowlanEnableNoLPSNoPatternMatch.reg] -HKR,,WoWLANLPSLevel,0,"0" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "1" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"1" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "0" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"0" - -[ConnectedStandbyEnable.reg] -HKR,,WoWLANLPSLevel,0,"2" -HKR,,ARPOffloadEnable,0,"1" -HKR,,GTKOffloadEnable,0,"1" -HKR,,D2ListenIntvl,0,"4" -HKR,,NSOffloadEnable,0,"1" -HKR,,NLOEnable,0,"1" - -HKR, Ndi\params\*WakeOnMagicPacket, ParamDesc, 0, %WakeOnMagicPacket% -HKR, Ndi\params\*WakeOnMagicPacket, default, 0, "0" -HKR, Ndi\params\*WakeOnMagicPacket, type, 0, "enum" -HKR, Ndi\params\*WakeOnMagicPacket\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnMagicPacket\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnMagicPacket,0,"0" - -HKR, Ndi\params\*WakeOnPattern , ParamDesc, 0, %WakeOnPattern% -HKR, Ndi\params\*WakeOnPattern, default, 0, "1" -HKR, Ndi\params\*WakeOnPattern, type, 0, "enum" -HKR, Ndi\params\*WakeOnPattern\enum, "0", 0, %DISABLED_STR% -HKR, Ndi\params\*WakeOnPattern\enum, "1", 0, %ENABLED_STR% -HKR,,*WakeOnPattern,0,"1" - -;; Packet coalescing should be enabled in WHCK test -HKR,defaults,*PacketCoalescing,0,"0" -HKR,,*PacketCoalescing,0,"0" - -;------------------------------------------------------------------------------- -; Auto Channel Selection -;------------------------------------------------------------------------------- -[AutoChnlSelon.reg] -HKR,,AutoChnlSel,0,"1" -[AutoChnlSeloff.reg] -HKR,,AutoChnlSel,0,"0" - -;;---------------------------------------------------------------------------- -;; RSSI to Grid Mode Parameters -;;---------------------------------------------------------------------------- -[RSSI2GridRealMode.reg] -HKR,,RSSI2GridMode,0,"1" -[RSSI2GridMode_2.reg] -HKR,,RSSI2GridMode,0,"2" -[RSSI2GridMode_4.reg] -HKR,,RSSI2GridMode,0,"4" - -;;---------------------------------------------------------------------------- -;; KFREE parameters -;;---------------------------------------------------------------------------- -[KFREE_COMMON.reg] -HKR,,RfKFreeEnable,0,"0" - -;******************************************************************************* -; Customer reg section -;******************************************************************************* -[ScanType.reg] -HKR,defaults,PassiveScan, 0, "0" -HKR,,PassiveScan, 0, "0" - -;******************************************************************************* -; Multi-Channel Concurrent section -;******************************************************************************* -[MCC.reg] -HKR,Ndi\params\MultiChannelFcsMode, ParamDesc, 0, %MCC_STR% -HKR,Ndi\params\MultiChannelFcsMode, type, 0, "enum" -HKR,Ndi\params\MultiChannelFcsMode, default, 0, "0" -HKR,Ndi\params\MultiChannelFcsMode\enum, "0", 0, %DISABLED_STR% -HKR,Ndi\params\MultiChannelFcsMode\enum, "4", 0, %ENABLED_STR% -HKR,defaults,MultiChannelFcsMode, 0, "0" -HKR,,MultiChannelFcsMode, 0, "0" - -;******************************************************************************* -; Destination Directory -;******************************************************************************* -[RTWlanS.CopyFiles] -rtwlans.sys,,,2 - -[DestinationDirs] -DefaultDestDir = 11 -RTWlanS.CopyFiles = 12 -CIHVS.CopyFiles = 11 -RtlUI2.CopyFiles = 10 - -;;**************************************************************************** -;; Source Files -;;**************************************************************************** -[CIHVS.CopyFiles] -Rtlihvs.dll,,,2 - -[RegisterUIExt] -11,,RtlExtUI.dll,1 - -[RtlUI2.CopyFiles] -RtlUI2.exe,,,2 - -[SourceDisksFiles] -rtwlans.sys = 1 -Rtlihvs.dll = 1 - -[SourceDisksNames] -1=%DISKNAME%,,, - - -;******************************************************************************* -; Strings -;******************************************************************************* -[Strings] -SSID_STR = "SSID" -CHANNEL_STR = "Channel" -NETWORK_TYPE_STR = "Network Type" -LED_CONTROL_STR = "LED Control" -POWER_SAVE_STR = "Power Save Mode" -WIFI_IBSS_STR = "IBSS Default 11b Mode" -RATE_ADAPTIVE_STR = "Rate Adaptive" -QOS_STR = "QoS" -WiFiConfg_STR = "WiFiConfg" -WMM_APSD = "WMM APSD" -CCX_RM_STR = "CCX Radio Measurement" -CCX_OFF_LINE_DUR_UP_LIMIT_STR = "CCX Max Off-Line Measurement (0: unlimited)" -FORCE_PRIORITY_STR = "Forced Priority" -HW_PARA_STR = "Init from HwParaFile" -THREE_WIRE_MODE_STR = "Three Wire Programming Mode" -BOARD_TYPE_STR = "Board Type" -PROTECTION_MODE_STR = "Protection Mode" -TPC_STR = "Transmit Power Control" -TPC_POLARITY_STR = "TPC Polarity Select" -HIGH_POWER_STR = "High Power Mechanism" -INIT_GAIN_STR = "Initial Gain State" -CW_MAX_MIN_STR = "Contention Window" -PSP_XLINK_STR = "PSP XLink Mode" -DISABLE_STR = "Disable" -ENABLE_STR = "Enable" -DISABLED_STR = "Disabled" -ENABLED_STR = "Enabled" -AUTO_STR = "Auto" -AD_HOC_STR = "Ad Hoc" -INFRASTRUCTURE_STR = "Infrastructure" -AUTO_SELECT = "Auto select" -WL_MODE_STR = "Wireless Mode" -RX_REORDER_STR = "Rx Reorder" -CAM_STR = "CAM" -MAX_PSP_STR = "MAX_PSP" -Fast_PSP_STR = "Fast_PSP" -NO_AC_STR = "No AC (Disable)" -ALL_AC_STR = "ALL AC" -IEEE_802_11A_STR = "IEEE 802.11a" -IEEE_802_11B_STR = "IEEE 802.11b" -IEEE_802_11BG_STR = "IEEE 802.11b/g" -IEEE_802_11BGN_STR = "IEEE 802.11b/g/n" -IEEE_802_11AN_STR = "IEEE 802.11a/n" -IEEE_802_11ANAC_STR = "IEEE 802.11a/n/ac" -IEEE_802_11AC_STR = "IEEE 802.11 ac" -WakeOnMagicPacket = "Wake on Magic Packet" -WakeOnPattern = "Wake on Pattern Match" -MCC_STR = "Multi-Channel Concurrent" - -;******************************************************************************* -; manufacture description -;******************************************************************************* -Realtek = "Realtek Semiconductor Corp." - - -;******************************************************************************* -; Source disk name -;******************************************************************************* -DISKNAME = "Realtek Wireless LAN 802.11n SDIO Network Adapter Driver Disk" -RtlWlans.DeviceDesc = "Realtek Wireless LAN 802.11n SDIO Network Adapter" -RtlWlans.DeviceDesc.DispName = "Realtek Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8723as Device description -;******************************************************************************* -RTL8723as.DeviceDesc = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723as.DeviceDesc.DispName = "Realtek RTL8723AS Wireless LAN 802.11n SDIO Network Adapter" - - - -;******************************************************************************* -; RTL8723bs Device description -;******************************************************************************* -RTL8723bs.DeviceDesc = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723bs.DeviceDesc.DispName = "Realtek RTL8723BS Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8814as Device description -;******************************************************************************* -RTL8814as.DeviceDesc = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" -RTL8814as.DeviceDesc.DispName = "Realtek RTL8814AS Wireless LAN 802.11ac SDIO Network Adapter" - -;******************************************************************************* -; RTL8188ES Device description -;******************************************************************************* -RTL8188es.DeviceDesc = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8188es.DeviceDesc.DispName = "Realtek RTL8189ES Wireless LAN 802.11n USB 2.0 Network Adapter" -;******************************************************************************* -; RTL8821as Device description -;******************************************************************************* -RTL8821as.DeviceDesc = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8821as.DeviceDesc.DispName = "Realtek RTL8821AS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -;******************************************************************************* -; RTL8192E Device description -;******************************************************************************* -RTL8192es.DeviceDesc = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" -RTL8192es.DeviceDesc.DispName = "Realtek RTL8192ES Wireless LAN 802.11n USB 2.0 Network Adapter" - -;******************************************************************************* -; RTL8703bs Device description -;******************************************************************************* -RTL8703bs.DeviceDesc = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" -RTL8703bs.DeviceDesc.DispName = "Realtek RTL8703BS Wireless LAN 802.11n SDIO Network Adapter" - -;******************************************************************************* -; RTL8188Fs Device description -;******************************************************************************* -RTL8188fs.DeviceDesc = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -RTL8188fs.DeviceDesc.DispName = "Realtek RTL8189FTV Wireless LAN 802.11n SDIO Network Adapter" -;******************************************************************************* -; RTL8822bs Device description -;******************************************************************************* -RTL8822bs.DeviceDesc = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" -RTL8822bs.DeviceDesc.DispName = "Realtek RTL8822BS Wireless LAN 802.11ac SDIO 2.0 Network Adapter" - -;******************************************************************************* -; RTL8723ds Device description -;******************************************************************************* -RTL8723ds.DeviceDesc = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" -RTL8723ds.DeviceDesc.DispName = "Realtek RTL8723DS Wireless LAN 802.11n SDIO Network Adapter" diff --git a/network/wlan/WDI/PLATFORM/svn_version.h b/network/wlan/WDI/PLATFORM/svn_version.h deleted file mode 100644 index b549f0e7..00000000 --- a/network/wlan/WDI/PLATFORM/svn_version.h +++ /dev/null @@ -1,4 +0,0 @@ -#define SVN_VERSION 28199 -#define SVN_VERSION_STR "28199" - - diff --git a/network/wlan/WDI/PLATFORM/svn_version.tmpl b/network/wlan/WDI/PLATFORM/svn_version.tmpl deleted file mode 100644 index 2932408a..00000000 --- a/network/wlan/WDI/PLATFORM/svn_version.tmpl +++ /dev/null @@ -1,4 +0,0 @@ -#define SVN_VERSION $WCREV$ -#define SVN_VERSION_STR "$WCREV$" - - diff --git a/network/wlan/WDI/windows.msbuild.rtwssample.sln b/network/wlan/WDI/windows.msbuild.rtwssample.sln deleted file mode 100644 index 0d8732a8..00000000 --- a/network/wlan/WDI/windows.msbuild.rtwssample.sln +++ /dev/null @@ -1,84 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.23107.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "sdio", "PLATFORM\NDIS6\SDIO\sdio.vcxproj", "{105EA485-B9B6-48AE-B8B0-96BBEA575973}" - ProjectSection(ProjectDependencies) = postProject - {956B060D-1055-4584-9CF4-9FE14C428545} = {956B060D-1055-4584-9CF4-9FE14C428545} - {C0A51792-1338-4294-ADAA-EDC4EE30CF05} = {C0A51792-1338-4294-ADAA-EDC4EE30CF05} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "common", "COMMON\common.vcxproj", "{956B060D-1055-4584-9CF4-9FE14C428545}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "NdisComm", "PLATFORM\NdisComm\NdisComm.vcxproj", "{C0A51792-1338-4294-ADAA-EDC4EE30CF05}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Win10 Debug|Arm = Win10 Debug|Arm - Win10 Debug|Win32 = Win10 Debug|Win32 - Win10 Debug|x64 = Win10 Debug|x64 - Win10 Release|Arm = Win10 Release|Arm - Win10 Release|Win32 = Win10 Release|Win32 - Win10 Release|x64 = Win10 Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|Arm.ActiveCfg = Win10 Debug|Arm - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|Arm.Build.0 = Win10 Debug|Arm - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|Arm.Deploy.0 = Win10 Debug|Arm - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|Win32.ActiveCfg = Win10 Debug|Win32 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|Win32.Build.0 = Win10 Debug|Win32 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|Win32.Deploy.0 = Win10 Debug|Win32 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|x64.ActiveCfg = Win10 Debug|x64 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|x64.Build.0 = Win10 Debug|x64 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Debug|x64.Deploy.0 = Win10 Debug|x64 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|Arm.ActiveCfg = Win10 Release|Arm - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|Arm.Build.0 = Win10 Release|Arm - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|Arm.Deploy.0 = Win10 Release|Arm - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|Win32.ActiveCfg = Win10 Release|Win32 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|Win32.Build.0 = Win10 Release|Win32 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|Win32.Deploy.0 = Win10 Release|Win32 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|x64.ActiveCfg = Win10 Release|x64 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|x64.Build.0 = Win10 Release|x64 - {105EA485-B9B6-48AE-B8B0-96BBEA575973}.Win10 Release|x64.Deploy.0 = Win10 Release|x64 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|Arm.ActiveCfg = Win10 Debug|Arm - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|Arm.Build.0 = Win10 Debug|Arm - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|Arm.Deploy.0 = Win10 Debug|Arm - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|Win32.ActiveCfg = Win10 Debug|Win32 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|Win32.Build.0 = Win10 Debug|Win32 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|Win32.Deploy.0 = Win10 Debug|Win32 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|x64.ActiveCfg = Win10 Debug|x64 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|x64.Build.0 = Win10 Debug|x64 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Debug|x64.Deploy.0 = Win10 Debug|x64 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|Arm.ActiveCfg = Win10 Release|Arm - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|Arm.Build.0 = Win10 Release|Arm - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|Arm.Deploy.0 = Win10 Release|Arm - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|Win32.ActiveCfg = Win10 Release|Win32 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|Win32.Build.0 = Win10 Release|Win32 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|Win32.Deploy.0 = Win10 Release|Win32 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|x64.ActiveCfg = Win10 Release|x64 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|x64.Build.0 = Win10 Release|x64 - {956B060D-1055-4584-9CF4-9FE14C428545}.Win10 Release|x64.Deploy.0 = Win10 Release|x64 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|Arm.ActiveCfg = Win10 Debug|Arm - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|Arm.Build.0 = Win10 Debug|Arm - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|Arm.Deploy.0 = Win10 Debug|Arm - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|Win32.ActiveCfg = Win10 Debug|Win32 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|Win32.Build.0 = Win10 Debug|Win32 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|Win32.Deploy.0 = Win10 Debug|Win32 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|x64.ActiveCfg = Win10 Debug|x64 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|x64.Build.0 = Win10 Debug|x64 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Debug|x64.Deploy.0 = Win10 Debug|x64 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|Arm.ActiveCfg = Win10 Release|Arm - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|Arm.Build.0 = Win10 Release|Arm - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|Arm.Deploy.0 = Win10 Release|Arm - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|Win32.ActiveCfg = Win10 Release|Win32 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|Win32.Build.0 = Win10 Release|Win32 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|Win32.Deploy.0 = Win10 Release|Win32 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|x64.ActiveCfg = Win10 Release|x64 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|x64.Build.0 = Win10 Release|x64 - {C0A51792-1338-4294-ADAA-EDC4EE30CF05}.Win10 Release|x64.Deploy.0 = Win10 Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/network/wlan/ihvsampleui/IHVClassFactory.cpp b/network/wlan/ihvsampleui/IHVClassFactory.cpp new file mode 100644 index 00000000..7da337d5 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVClassFactory.cpp @@ -0,0 +1,166 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" +#include "ihvuiinc_i.c" + +extern long g_serverLock; //lock count on server + +// +// IUnknown Implementation +// +CIHVClassFactory::CIHVClassFactory() : m_refCount(1) +{ +} + +CIHVClassFactory::~CIHVClassFactory() +{ +} + +STDMETHODIMP_(ULONG) +CIHVClassFactory::AddRef() +{ + return InterlockedIncrement(&m_refCount); +} + +STDMETHODIMP_(ULONG) +CIHVClassFactory::Release() +{ + ULONG refCount = InterlockedDecrement(&m_refCount); + if (refCount == 0) + { + delete this; + } + return refCount; +} + +STDMETHODIMP +CIHVClassFactory::QueryInterface( + REFIID riid, + void **ppvObject + ) +{ + HRESULT hr = E_INVALIDARG; + if (NULL != ppvObject) + { + hr = S_OK; + if (riid == IID_IUnknown) + { + *ppvObject = static_cast(this); + } + else if (riid == IID_IClassFactory) + { + *ppvObject = static_cast(this); + } + else + { + *ppvObject = NULL; + return E_NOINTERFACE; + } + reinterpret_cast(*ppvObject)->AddRef(); + } + + return hr; +} + + +// +// IClassFactory Implementaion +// +STDMETHODIMP +CIHVClassFactory::CreateInstance( + IUnknown *pUnkOuter, + REFIID riid, + void **ppvObject + ) +{ + HRESULT hr = E_NOINTERFACE; + + // aggregation not supported + if (pUnkOuter != NULL) + { + return CLASS_E_NOAGGREGATION; + } + + if (NULL == ppvObject) + { + return E_INVALIDARG; + } + + // Figure out which interface is wanted + // the ui will call us only as IID_IDot11ExtUI + if (IID_IDot11SampleExtUI == riid || + IID_IDot11ExtUI == riid || + IID_IWizardExtension == riid) + { + CDot11SampleExtUI *pExtUI = new(std::nothrow) CDot11SampleExtUI(); + if (NULL == pExtUI) + { + return E_OUTOFMEMORY; + } + + pExtUI->AddRef(); + hr = pExtUI->QueryInterface(riid, ppvObject); + + pExtUI->Release(); + } + else if (IID_IDot11SampleExtUIConProperty == riid) + { + CDot11SampleExtUIConProperty *pCDot11SampleExtUIConProperty = new(std::nothrow) CDot11SampleExtUIConProperty(); + if (NULL == pCDot11SampleExtUIConProperty) + { + return E_OUTOFMEMORY; + } + + pCDot11SampleExtUIConProperty->AddRef(); + hr = pCDot11SampleExtUIConProperty->QueryInterface(riid, ppvObject); + + pCDot11SampleExtUIConProperty->Release(); + } + else if (IID_IDot11SampleExtUISecProperty == riid) + { + CDot11SampleExtUISecProperty *pCDot11SampleExtUISecProperty = new(std::nothrow) CDot11SampleExtUISecProperty(); + if (NULL == pCDot11SampleExtUISecProperty) + { + return E_OUTOFMEMORY; + } + + pCDot11SampleExtUISecProperty->AddRef(); + hr = pCDot11SampleExtUISecProperty->QueryInterface(riid, ppvObject); + + pCDot11SampleExtUISecProperty->Release(); + } + else if (IID_IDot11SampleExtUIKeyProperty == riid) + { + CDot11SampleExtUIKeyProperty *pCDot11SampleExtUIKeyProperty = new(std::nothrow) CDot11SampleExtUIKeyProperty(); + if (NULL == pCDot11SampleExtUIKeyProperty) + { + return E_OUTOFMEMORY; + } + + pCDot11SampleExtUIKeyProperty->AddRef(); + hr = pCDot11SampleExtUIKeyProperty->QueryInterface(riid, ppvObject); + + pCDot11SampleExtUIKeyProperty->Release(); + } + + return hr; +} + + +STDMETHODIMP +CIHVClassFactory::LockServer(BOOL fLock) +{ + if (fLock) + { + InterlockedIncrement(&g_serverLock); + } + else + { + InterlockedDecrement(&g_serverLock); + } + + return S_OK; +} diff --git a/network/wlan/ihvsampleui/IHVClassFactory.h b/network/wlan/ihvsampleui/IHVClassFactory.h new file mode 100644 index 00000000..60f814c3 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVClassFactory.h @@ -0,0 +1,28 @@ + +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#pragma once + +// The class factory +class CIHVClassFactory : public IClassFactory +{ +public: + // Constructor + CIHVClassFactory(); + ~CIHVClassFactory(); + + // IUnknown + STDMETHODIMP_(ULONG) AddRef(); + STDMETHODIMP_(ULONG) Release(); + STDMETHODIMP QueryInterface(REFIID riid, void **ppvObject); + + // IClassFactory + STDMETHODIMP CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObject); + STDMETHODIMP LockServer(BOOL fLock); + +private: + long m_refCount; +}; diff --git a/network/wlan/ihvsampleui/IHVRegistryHelper.cpp b/network/wlan/ihvsampleui/IHVRegistryHelper.cpp new file mode 100644 index 00000000..ebe8622c --- /dev/null +++ b/network/wlan/ihvsampleui/IHVRegistryHelper.cpp @@ -0,0 +1,284 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" + +#define CLSIDSTR_CALLBACK L"{4A01f9f9-6012-4343-A8C4-10B5DF32672A}" // IHV Ext UI CLSID +#define CLSID_CALLBACK_FRIENDLY_NAME L"Wireless 802.11 IHV Sample Config UI" + +#define REGCLSID L"CLSID" +#define INPROCSERVER32 L"InprocServer32" +#define THREADINGMODEL L"ThreadingModel" +#define FREETHREADING L"Both" + +#define ARRAY_SIZE(s) (sizeof(s) / sizeof(s[0])) + +extern HINSTANCE g_hInst; + + +typedef HRESULT (APIENTRY *RegisterPageWithPageProc) ( + const GUID *pguidParentPage, + const GUID *pguidChildPage, + const LPWSTR pszChildModuleFileName, + const LPWSTR pszFriendlyName, + const DWORD dwBehaviorFlags, + const DWORD dwUserFlags, + const LPWSTR pszCommandLine); + +typedef HRESULT (APIENTRY *UnregisterPageProc) ( + const GUID *pguidPage, + const BOOL fUnregisterFromCOM); + + + +// +// RegisterServer - Register the COM Server by creating required keys +// + +#pragma warning (push) +#pragma warning (disable:6262) + +HRESULT +CRegHelper::RegisterServer () +{ + HRESULT hr = S_OK; + wchar_t wszModule[_MAX_PATH] = {0}; + DWORD result = 0; + + result = GetModuleFileName(g_hInst, wszModule, ARRAY_SIZE(wszModule)); + + if (result == 0) + { + return HRESULT_FROM_WIN32(GetLastError()); + } + + wchar_t wszCLSIDKey[MAX_LENGTH] = {0}; // CLSID\\wszCLSID. + wchar_t wszInprocKey[MAX_LENGTH + 2] = {0}; // CLSID\\InprocServer32 + + // get the class ID strings. + StringCchCopyW(wszCLSIDKey, MAX_LENGTH, REGCLSID); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, CLSIDSTR_CALLBACK); + + // create entries under CLSID. + // Description + FAILHR(SetKeyAndValue(wszCLSIDKey, NULL, CLSID_CALLBACK_FRIENDLY_NAME)); + // set the server path. + FAILHR(SetKeyAndValue(wszCLSIDKey, INPROCSERVER32, wszModule)); + + // add the threading model information. + hr = StringCchPrintfW(wszInprocKey, MAX_LENGTH + 2, L"%s\\%s", wszCLSIDKey, INPROCSERVER32); + if(FAILED(hr)) + { + hr = S_FALSE; + return hr; + } + + FAILHR(SetRegValue(wszInprocKey, THREADINGMODEL, FREETHREADING)); + + // register the extension UI wizard page + HINSTANCE hinstLib = LoadLibrary(TEXT("connect.dll")); + if (hinstLib != NULL) + { + + // get the export function used for registering + RegisterPageWithPageProc registerPageWithPageProc = + (RegisterPageWithPageProc) GetProcAddress(hinstLib, (LPCSTR)("RegisterPageWithPage")); + + if (NULL != registerPageWithPageProc) + { + hr = (registerPageWithPageProc) (NULL, // stand alone page (no parent) + &GUID_SAMPLE_IHVUI_CLSID, // clsid of the extension UI wizard page + NULL, // filename already registered through COM + CLSID_CALLBACK_FRIENDLY_NAME, // friendly name + 0x2, // allow duplicate instances + 0, // no user flags + NULL); // no command line + } + + FreeLibrary(hinstLib); + } + + return hr; +} +#pragma warning (pop) + +// +// UnRegisterServer - Register the COM Server by creating required keys +// +HRESULT +CRegHelper::UnregisterServer() +{ + HRESULT hr = S_OK; + wchar_t wszCLSIDKey[MAX_LENGTH] = {0}; // CLSID\\wszCLSID. + + + // get the class ID strings. + StringCchCopyW(wszCLSIDKey,MAX_LENGTH, REGCLSID); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, CLSIDSTR_CALLBACK); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, INPROCSERVER32); + + + // delete the sub key of the Class ID key + FAILHR(DeleteKey(wszCLSIDKey)); + + StringCchCopyW(wszCLSIDKey,MAX_LENGTH, REGCLSID); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, L"\\"); + StringCchCatW(wszCLSIDKey, MAX_LENGTH, CLSIDSTR_CALLBACK); + + // delete Class ID key + FAILHR(DeleteKey(wszCLSIDKey)); + + // unregister the extension UI wizard page + HINSTANCE hinstLib = LoadLibrary(TEXT("connect.dll")); + if (hinstLib != NULL) + { + + // get the export function used for unregistering + UnregisterPageProc unregisterPageProc = + (UnregisterPageProc) GetProcAddress(hinstLib, (LPCSTR)("UnregisterPage")); + + if (NULL != unregisterPageProc) + { + hr = (unregisterPageProc) (&GUID_SAMPLE_IHVUI_CLSID, // clsid of the extension UI wizard page + FALSE); // already unregistered from COM + } + + FreeLibrary(hinstLib); + } + + return hr; + +} + +// +// Set an entry in the registry of the form: +// HKEY_CLASSES_ROOT\wszKey\wszSubkey = wszValue +// +BOOL +CRegHelper::SetKeyAndValue( + const wchar_t* pwszKey, + const wchar_t* pwszSubkey, + const wchar_t* pwszValue + ) +{ + HKEY hKey; // handle to the new reg key. + wchar_t wszRegKey[MAX_LENGTH] = {0}; // buffer for the full key name. + + + // init the key with the base key name. + StringCchCopyW(wszRegKey, MAX_LENGTH, pwszKey); + // append the subkey name (if there is one). + if (pwszSubkey != NULL) + { + StringCchCatW(wszRegKey, MAX_LENGTH, L"\\"); + StringCchCatW(wszRegKey, MAX_LENGTH, pwszSubkey); + } + + // create the registry key. + if (RegCreateKeyEx( + HKEY_CLASSES_ROOT, + wszRegKey, + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hKey, + NULL) == ERROR_SUCCESS) + { + // set the value (if there is one). + if (pwszValue != NULL) + { + RegSetValueEx( + hKey, + NULL, + 0, + REG_SZ, + (BYTE *)pwszValue, + (DWORD) ((wcslen(pwszValue) + 1) * sizeof (wchar_t)) + ); + } + + RegCloseKey(hKey); + + return TRUE; + } + + return FALSE; +} + +// +// SetRegValue - Open the key, create a new keyword and value pair under it. +// +BOOL +CRegHelper::SetRegValue( + const wchar_t* pwszKeyName, + const wchar_t* pwszKeyword, + const wchar_t* pwszValue + ) +{ + HKEY hKey; // handle to the new reg key. + + // create the registration key. + if (RegCreateKeyEx( + HKEY_CLASSES_ROOT, + pwszKeyName, + 0, + NULL, + REG_OPTION_NON_VOLATILE, + KEY_ALL_ACCESS, + NULL, + &hKey, + NULL) == ERROR_SUCCESS) + { + // set the value (if there is one). + if (pwszValue != NULL) + { + RegSetValueEx( + hKey, + pwszKeyword, + 0, + REG_SZ, + (BYTE *)pwszValue, + (DWORD) ((wcslen(pwszValue) + 1) * sizeof (wchar_t)) + ); + } + + RegCloseKey(hKey); + + + return TRUE; + } + + return FALSE; +} + + +// +// Delete an entry in the registry of the form: +// HKEY_CLASSES_ROOT\wszKey\wszSubkey = wszValue +// +BOOL +CRegHelper::DeleteKey(const wchar_t* pwszSubkey) +{ + DWORD result = 0; + + if (pwszSubkey != NULL) + { + // delete the registry key. + result = RegDeleteKey(HKEY_CLASSES_ROOT, pwszSubkey); + } + else + { + return FALSE; + } + + return ((ERROR_SUCCESS == result)?TRUE:FALSE); +} + + diff --git a/network/wlan/ihvsampleui/IHVRegistryHelper.h b/network/wlan/ihvsampleui/IHVRegistryHelper.h new file mode 100644 index 00000000..76c85b1c --- /dev/null +++ b/network/wlan/ihvsampleui/IHVRegistryHelper.h @@ -0,0 +1,40 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#pragma once + +#define FAILHR(result) \ + if (result == FALSE) \ + {\ + hr = S_FALSE;\ + return hr;\ + } + + +#define MAX_LENGTH 256 + + +class CRegHelper +{ + public: + static HRESULT STDMETHODCALLTYPE RegisterServer(); + static HRESULT STDMETHODCALLTYPE UnregisterServer(); + +private: + static BOOL SetKeyAndValue( + const wchar_t *pszKey, + const wchar_t *pszSubkey, + const wchar_t *pszValue + ); + + static BOOL DeleteKey(const wchar_t *pszSubkey); + + static BOOL SetRegValue( + const wchar_t *pszKeyName, + const wchar_t *pszKeyword, + const wchar_t *pszValue + ); +}; + diff --git a/network/wlan/ihvsampleui/IHVSample.idl b/network/wlan/ihvsampleui/IHVSample.idl new file mode 100644 index 00000000..81e05140 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSample.idl @@ -0,0 +1,71 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +import "unknwn.idl"; +import "wtypes.idl"; +import "ihvuiinc.idl"; // For wireless UI extensions + +interface IWizardExtension; +interface IObjectWithSite; + +interface IDot11SampleExtUI; +interface IDot11SampleExtUIConProperty; +interface IDot11SampleExtUISecProperty; + +[ + uuid(7ca89d4b-2c5b-4368-b53a-ffa14e031179), + helpstring(" Dot11 IHV Extensibility UI Interface"), + dual +] + +interface IDot11SampleExtUI: IDot11ExtUI +{ +} + + + +[ + uuid(61055513-2f27-4962-b29c-d6d7d1500fec), + helpstring(" Dot11 IHV Extensibility UI Connection Properties Interface"), + dual +] + +interface IDot11SampleExtUIConProperty: IDot11ExtUIProperty +{ + [id(1), hidden, helpstring("method Initialize")] + HRESULT + Initialize([in] BSTR bstrPropertyName); +} + + +[ + uuid(12c211ae-1b6d-471c-9c1b-698bcc9b9d97), + helpstring(" Dot11 IHV Extensibility UI Security Properties Interface"), + dual +] + +interface IDot11SampleExtUISecProperty: IDot11ExtUIProperty +{ + [id(1), hidden, helpstring("method Initialize")] + HRESULT + Initialize([in] BSTR bstrPropertyName, [in] DWORD dwIhvSecurity); +} + + +[ + uuid(a18bae3c-39c2-4b34-ba49-0130e431d2ca), + helpstring(" Dot11 IHV Extensibility UI Key Properties Interface"), + dual +] + +interface IDot11SampleExtUIKeyProperty: IDot11ExtUIProperty +{ + [id(1), hidden, helpstring("method Initialize")] + HRESULT + Initialize([in] BYTE* pvData); +} + + + diff --git a/network/wlan/ihvsampleui/IHVSampleExtUI.cpp b/network/wlan/ihvsampleui/IHVSampleExtUI.cpp new file mode 100644 index 00000000..a5e60d7a --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUI.cpp @@ -0,0 +1,971 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" +#include "ihvsample_i.c" + +extern HINSTANCE g_hInst; + +LPWSTR g_IHVAuthFriendlyName[] = { + L"IHVAuth V1", + L"IHVAuth V2", + L"IHVAuth V3" +}; + +LPWSTR g_IHVCipherFriendlyName[] = { + L"None", + L"IHVCipher 1", + L"IHVCipher 2", + L"IHVCipher 3" +}; + +IHV_AUTH_CIPHER_CAPABILITY g_IHVOneXExtCapability = +{ + 3, + { + { + IHVAuthV1, + 1, + {IHVCipher1} + }, + { + IHVAuthV2, + 3, + {None, IHVCipher1, IHVCipher2} + }, + { + IHVAuthV3, + 2, + {IHVCipher2, IHVCipher3} + } + } +}; + + +static const WCHAR c_szIhvUIRequest[] = L"_UI_Request"; +static const WCHAR c_szIhvUIResponse[] = L"_UI_Response"; + +template +T* GetThis(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + static const WCHAR c_szThisPointer[]= L"_Win32_this_"; + UNREFERENCED_PARAMETER(wParam); + + T* pThis = NULL; + if (uMsg == WM_INITDIALOG) + { + if (sizeof(PROPSHEETPAGE) == ((LPPROPSHEETPAGE)lParam)->dwSize) + { + // This corresponds to MSDN + pThis = (T *)((LPPROPSHEETPAGE)lParam)->lParam; + } + else + { + // TODO: Need to determine when this abnormality happens... + pThis = (T *)lParam; + } + + SetProp(hwnd, c_szThisPointer, (HANDLE)pThis); + + } + else if (uMsg == WM_DESTROY) + { + RemoveProp(hwnd, c_szThisPointer); + } + else + { + pThis = (T *)GetProp(hwnd, c_szThisPointer); + } + + return pThis; +} + + +CDot11SampleExtUI::CDot11SampleExtUI(): m_crefCount(0) +{ + InterlockedIncrement(&g_objRefCount); + + m_pUnkSite = NULL; + m_hFirstPagePsp = NULL; + m_hLastPagePsp = NULL; + m_pUIRequest = NULL; +} + +CDot11SampleExtUI::~CDot11SampleExtUI() +{ + InterlockedDecrement(&g_objRefCount); + + if( m_pUIRequest) + { + delete m_pUIRequest; + } + + if( m_pUnkSite) + { + m_pUnkSite ->Release(); + m_pUnkSite = NULL; + } +} + +// Used to get the IHV friendly name +STDMETHODIMP +CDot11SampleExtUI::GetDot11ExtUIFriendlyName( + BSTR* bstrFriendlyName) +{ + HRESULT hr = E_INVALIDARG; + + if (NULL != bstrFriendlyName) + { + *bstrFriendlyName = SysAllocString(IHV_SAMPLE_IHV_NAME); + hr = S_OK; + } + + return hr; +} + + +// Returns the requested property type +STDMETHODIMP +CDot11SampleExtUI::GetDot11ExtUIProperties( + DOT11_EXT_UI_PROPERTY_TYPE ExtType, + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ) +{ + HRESULT hr = S_OK; + if (!pcExtensions || !ppDot11ExtUIProperty) + { + hr = E_INVALIDARG; + goto error; + } + + // Initialize the out parameters + *pcExtensions = 0; + *ppDot11ExtUIProperty = NULL; + + switch(ExtType) + { + case DOT11_EXT_UI_CONNECTION: + hr = CreateConnectionProperties(pcExtensions, ppDot11ExtUIProperty); + break; + + case DOT11_EXT_UI_SECURITY: + hr = CreateSecurityProperties(pcExtensions, ppDot11ExtUIProperty); + break; + + case DOT11_EXT_UI_KEYEXTENSION: + hr = CreateKeyProperties(pcExtensions, ppDot11ExtUIProperty); + break; + + default: + hr = E_NOTIMPL; + break; + } + +error: + return hr; +} + +#define IHV_BALLOON_TEXT L"Please enter key information" + +STDMETHODIMP +CDot11SampleExtUI::GetDot11ExtUIBalloonText( + BSTR pIHVUIRequest, // the UI request structure from IHV + BSTR* pwszBalloonText // the balloon text to be displayed + ) +{ + HRESULT hr = E_INVALIDARG; + PDOT11EXT_IHV_UI_REQUEST pIhvUiRequest = (PDOT11EXT_IHV_UI_REQUEST) pIHVUIRequest; + + if (NULL != pwszBalloonText) + { + // Ihv could choose to parse the UI request data here ... + UNREFERENCED_PARAMETER( pIhvUiRequest ); + + *pwszBalloonText = SysAllocString( IHV_BALLOON_TEXT ); + hr = S_OK; + } + + return hr; +} + + + +HRESULT +CDot11SampleExtUI::CreateConnectionProperties( + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ) +{ + HRESULT hr = ERROR_SUCCESS; + BSTR strName = NULL; + ULONG uCount = 0; + + IDot11SampleExtUIConProperty **pprgProps = NULL; + + uCount = PROP_COUNT_CONNECTION; + pprgProps = (IDot11SampleExtUIConProperty**) + CoTaskMemAlloc(sizeof(IDot11SampleExtUIConProperty*) * uCount); + + if (!pprgProps) + { + hr = E_UNEXPECTED; + goto error; + } + + // Since we just have one property of each, we'll + // create one interface first and initialize it separately + IDot11SampleExtUIConProperty *pTempIProp = NULL; + hr = CoCreateInstance( + GUID_SAMPLE_IHVUI_CLSID, + NULL, + CLSCTX_INPROC, + IID_IDot11SampleExtUIConProperty, + (PVOID*)&pTempIProp + ); + + if (FAILED(hr)) + { + goto error; + } + + // this will probably never be displayed + strName = SysAllocString(L"IHV Connection Settings"); + hr = pTempIProp->Initialize(strName); + pprgProps[0] = pTempIProp; + + if (SUCCEEDED(hr)) + { + *pcExtensions = uCount; + *ppDot11ExtUIProperty = (IDot11ExtUIProperty*)pprgProps; + + // Set the current pointer to NULL so it doesn't get freed at the bottom + pprgProps = NULL; + } + +error: + if (FAILED(hr) && pprgProps) + { + CoTaskMemFree(pprgProps); + pprgProps = NULL; + } + SysFreeString(strName); + return hr; +} + +HRESULT +CDot11SampleExtUI::CreateSecurityProperties( + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ) +{ + HRESULT hr = ERROR_SUCCESS; + BSTR strName = NULL; + ULONG uCount = 0; + DWORD i = 0; + WCHAR wbuf[128]; + + IDot11SampleExtUISecProperty **pprgProps = NULL; + + uCount = PROP_COUNT_SECURITY; + pprgProps = (IDot11SampleExtUISecProperty**) + CoTaskMemAlloc(sizeof(IDot11SampleExtUISecProperty*) * uCount); + + if (!pprgProps) + { + hr = E_UNEXPECTED; + goto error; + } + + // Since we just have one property of each, we'll + // create one interface first and initialize it separately + IDot11SampleExtUISecProperty *pTempIProp = NULL; + + for (i = 0; i < uCount; ++i) + { + ZeroMemory( + wbuf, + 128 + ); + pTempIProp = NULL; + SysFreeString(strName); + strName = NULL; + + hr = CoCreateInstance( + GUID_SAMPLE_IHVUI_CLSID, + NULL, + CLSCTX_INPROC, + IID_IDot11SampleExtUISecProperty, + (PVOID*)&pTempIProp + ); + + if (FAILED(hr)) + { + continue; + } + + StringCchPrintf( + wbuf, + 128, + wstrSecurityTypes[i] + ); + + strName = SysAllocString(wbuf); + hr = pTempIProp->Initialize(strName, i); + pprgProps[i] = pTempIProp; + } + + if (SUCCEEDED(hr)) + { + *pcExtensions = uCount; + *ppDot11ExtUIProperty = (IDot11ExtUIProperty*)pprgProps; + + // Set the current pointer to NULL so it doesn't get freed at the bottom + pprgProps = NULL; + } + +error: + if (FAILED(hr) && pprgProps) + { + CoTaskMemFree(pprgProps); + pprgProps = NULL; + } + SysFreeString(strName); + return hr; +} + +HRESULT +CDot11SampleExtUI::CreateKeyProperties( + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ) +{ + HRESULT hr = ERROR_SUCCESS; + BSTR strName = NULL; + ULONG uCount = 0; + DWORD i = 0; + WCHAR wbuf[128]; + IDot11SampleExtUIKeyProperty **pprgProps = NULL; + + uCount = g_IHVOneXExtCapability.dwAuthCount; + + pprgProps = (IDot11SampleExtUIKeyProperty**) + CoTaskMemAlloc(sizeof(IDot11SampleExtUIKeyProperty*) * uCount); + + if (!pprgProps) + { + hr = E_UNEXPECTED; + goto error; + } + + // Since we just have one property of each, we'll + // create one interface first and initialize it separately + IDot11SampleExtUIKeyProperty *pTempIProp = NULL; + + for (i = 0; i < uCount; ++i) + { + ZeroMemory( + wbuf, + 128 + ); + pTempIProp = NULL; + SysFreeString(strName); + strName = NULL; + + hr = CoCreateInstance( + GUID_SAMPLE_IHVUI_CLSID, + NULL, + CLSCTX_INPROC, + IID_IDot11SampleExtUIKeyProperty, + (PVOID*)&pTempIProp + ); + + if (FAILED(hr)) + { + continue; + } + + StringCchPrintf( + wbuf, + 128, + g_IHVAuthFriendlyName[g_IHVOneXExtCapability.IhvAuthCiphers[i].IHVAuth] + ); + + strName = SysAllocString(wbuf); + hr = pTempIProp->Initialize((BYTE *) &(g_IHVOneXExtCapability.IhvAuthCiphers[i])); + pprgProps[i] = pTempIProp; + } + + if (SUCCEEDED(hr)) + { + *pcExtensions = uCount; + *ppDot11ExtUIProperty = (IDot11ExtUIProperty*)pprgProps; + + // Set the current pointer to NULL so it doesn't get freed at the bottom + pprgProps = NULL; + } + +error: + if (FAILED(hr) && pprgProps) + { + CoTaskMemFree(pprgProps); + pprgProps = NULL; + } + SysFreeString(strName); + return hr; +} + + +HRESULT +CDot11SampleExtUI::FinalConstruct() +{ + m_pUnkSite = NULL; + m_hFirstPagePsp = NULL; + m_hLastPagePsp = NULL; + m_pUIRequest = NULL; + + return S_OK; +} + +VOID +CDot11SampleExtUI::FinalRelease() +{ + if( m_pUnkSite) + { + m_pUnkSite ->Release(); + m_pUnkSite = NULL; + } + + if( m_pUIRequest) + { + delete m_pUIRequest; + m_pUIRequest = NULL; + } + +} + +// IObjectWithSite +STDMETHODIMP +CDot11SampleExtUI::SetSite ( + IUnknown* pUnkSite + ) +{ + if( m_pUnkSite) + m_pUnkSite ->Release(); + + m_pUnkSite = pUnkSite; + + if( m_pUnkSite) + m_pUnkSite ->AddRef(); + + return S_OK; +} + +STDMETHODIMP +CDot11SampleExtUI::GetSite ( + REFIID riid, + void** ppvSite + ) +{ + *ppvSite = NULL; + + if( m_pUnkSite == NULL) + return E_FAIL; + + return m_pUnkSite ->QueryInterface(riid, ppvSite); +} + +//IWizardExtension +STDMETHODIMP CDot11SampleExtUI::AddPages ( + HPROPSHEETPAGE* aPages, + UINT cPages, + UINT *pnPagesAdded + ) +{ + IPropertyBag *pIPropertyBag = NULL; + + UNREFERENCED_PARAMETER(cPages); + + HRESULT hr = m_pUnkSite->QueryInterface(IID_IPropertyBag, + (VOID **)&pIPropertyBag); + if (SUCCEEDED(hr)) + { + VARIANT v; + VariantInit(&v); + + WCHAR ihvKeyName[IHV_KEY_LENGTH]; + GetClsidPropertyName ( + & GUID_SAMPLE_IHVUI_CLSID, + (LPWSTR) c_szIhvUIRequest, + ihvKeyName, + IHV_KEY_LENGTH + ); + hr = pIPropertyBag->Read( + ihvKeyName, + &v, + NULL); + + if (SUCCEEDED(hr) && (VT_BSTR == V_VT(&v))) + { + if( m_pUIRequest == NULL) + { + m_pUIRequest = new(std::nothrow) IHV_UI_REQUEST; + if (m_pUIRequest == NULL) + { + VariantClear(&v); + pIPropertyBag->Release(); + return E_OUTOFMEMORY; + } + } + memcpy(m_pUIRequest, v.bstrVal, sizeof(IHV_UI_REQUEST)); + } + + VariantClear(&v); + + pIPropertyBag->Release(); + } + + //////////////// + + *pnPagesAdded = 0; + + PROPSHEETPAGE psp = {0}; + + psp.dwSize = sizeof( psp); + psp.hInstance = g_hInst; + psp.dwFlags = PSP_DEFAULT | PSP_USETITLE | PSP_USEHEADERTITLE; + psp.lParam = (LPARAM) this; + + psp.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_SHOWHELP); + psp.pfnDlgProc = (DLGPROC) CDot11SampleExtUI::HelpDlgProc; + psp.pszHeaderTitle = MAKEINTRESOURCE( IDS_TITLE_SHOWHELP); + m_hFirstPagePsp = CreatePropertySheetPage(& psp); + + psp.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_GETKEY); + psp.pfnDlgProc = (DLGPROC) CDot11SampleExtUI::GetKeyDlgProc; + psp.pszHeaderTitle = MAKEINTRESOURCE( IDS_TITLE_GETKEY); + HPROPSHEETPAGE hPsp= CreatePropertySheetPage(& psp); + + psp.pszTemplate = MAKEINTRESOURCE(IDD_DIALOG_LASTPAGE); + psp.pfnDlgProc = (DLGPROC) CDot11SampleExtUI::LastPageDlgProc; + psp.pszHeaderTitle = MAKEINTRESOURCE( IDS_TITLE_LASTPAGE); + m_hLastPagePsp = CreatePropertySheetPage(& psp); + + if( m_hFirstPagePsp + && hPsp + && m_hLastPagePsp) + { + aPages[0] = m_hFirstPagePsp; + aPages[1] = hPsp; + aPages[2] = m_hLastPagePsp; + + *pnPagesAdded = 3; + + return S_OK; + } + else + { + if(m_hFirstPagePsp) + { + DestroyPropertySheetPage(m_hFirstPagePsp); + } + + if(hPsp) + { + DestroyPropertySheetPage(hPsp); + } + + if(m_hLastPagePsp) + { + DestroyPropertySheetPage(m_hLastPagePsp); + } + + m_hFirstPagePsp = hPsp = m_hLastPagePsp = NULL; + + return E_FAIL; + } +} + +STDMETHODIMP CDot11SampleExtUI::GetFirstPage ( + HPROPSHEETPAGE *phpage + ) +{ + *phpage = m_hFirstPagePsp; + return S_OK; +} + +STDMETHODIMP +CDot11SampleExtUI::GetLastPage (HPROPSHEETPAGE *phpage) +{ + * phpage = m_hLastPagePsp; + return S_OK; +} + + +BOOL CALLBACK +CDot11SampleExtUI::HelpDlgProc ( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ) +{ + CDot11SampleExtUI* pthis = NULL; + + switch (uMsg) + { + + case WM_INITDIALOG: + { + pthis = GetThis(hwndDlg, uMsg, wParam, lParam); + if(pthis && pthis->m_pUIRequest) + { + // + // Convert the ANSI string into a WCHAR string and display it + // + int iBufferSize = MultiByteToWideChar(CP_ACP, 0, pthis->m_pUIRequest->title, -1, NULL, 0); + if (iBufferSize > 0) + { + WCHAR *pwszBuffer = new WCHAR[iBufferSize]; + + if (NULL != pwszBuffer) + { + pwszBuffer[0] = 0; + + (VOID)MultiByteToWideChar(CP_ACP, 0, pthis->m_pUIRequest->title, -1, pwszBuffer, iBufferSize); + + SetDlgItemText(hwndDlg, IDC_EDIT_HELPER, pwszBuffer); + + delete[] pwszBuffer; + } + } + } + } + return TRUE; + + case WM_DESTROY: + { + // Don't release our properties here, wait + // rather for Abort or Commit event notifications. + // Then we will have the same values when resurrected. + } + return TRUE; + + case WM_NOTIFY: + { + LPNMHDR pnmh = (LPNMHDR) lParam; + switch (pnmh->code) + { + + case PSN_SETACTIVE : + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_NEXT); + return TRUE; + + case PSN_QUERYCANCEL: + { + IWizardSite *pIWizardSite = NULL; + HRESULT hr = S_OK; + + pthis = GetThis(hwndDlg, uMsg, wParam, lParam); + if(pthis != NULL) + { + hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite, (VOID **)&pIWizardSite); + if (SUCCEEDED(hr)) + { + HPROPSHEETPAGE hpage = NULL; + + hr = pIWizardSite->GetCancelledPage(&hpage); + if (SUCCEEDED(hr)) + { + PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); + } + pIWizardSite->Release(); + } + } + } + return TRUE; + } + } + return FALSE; + } + return FALSE; + +} + +BOOL CALLBACK +CDot11SampleExtUI::GetKeyDlgProc ( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ) + +{ + CDot11SampleExtUI* pthis = NULL; + + switch (uMsg) + { + case WM_INITDIALOG: + { + (VOID)GetThis(hwndDlg, uMsg, wParam, lParam); + } + return TRUE; + + case WM_DESTROY: + { + // Don't release our properties here, wait + // rather for Abort or Commit event notifications. + // Then we will have the same values when resurrected. + } + return TRUE; + + case WM_NOTIFY: + { + LPNMHDR pnmh = (LPNMHDR) lParam; + switch (pnmh->code) + { + case PSN_SETACTIVE : + + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); + return TRUE; + + case PSN_WIZNEXT : + { + WCHAR szBuffer[50 + 1] = {0}; + HRESULT hr = S_OK; + IPropertyBag *pIPropertyBag = NULL; + + GetDlgItemText(hwndDlg, IDC_EDIT_KEY, szBuffer, 50); + pthis = GetThis(hwndDlg, uMsg, wParam, lParam); + + if(pthis) + { + hr = pthis->m_pUnkSite->QueryInterface(IID_IPropertyBag, (VOID **)&pIPropertyBag); + if (SUCCEEDED(hr)) + { + VARIANT v; + VariantInit(&v); + + WCHAR ihvKeyName[IHV_KEY_LENGTH] = {0}; + pthis->GetClsidPropertyName( + &GUID_SAMPLE_IHVUI_CLSID, + (LPWSTR) c_szIhvUIResponse, + ihvKeyName, + IHV_KEY_LENGTH + ); + + // Make sure we remove the previous property if any + hr = pIPropertyBag->Read(ihvKeyName, &v, NULL); + + VariantClear(&v); + V_VT(&v) = VT_BSTR; + v.bstrVal = SysAllocStringByteLen((LPCSTR)szBuffer, IHV_KEY_LENGTH); + + // Write the updated property if any + hr = pIPropertyBag->Write(ihvKeyName, &v); + pIPropertyBag->Release(); + + // + // hr is not used below + // + hr; + } + } + } + return TRUE; + + case PSN_QUERYCANCEL: + { + IWizardSite *pIWizardSite = NULL; + HRESULT hr = S_OK; + + pthis = GetThis(hwndDlg, uMsg, wParam, lParam); + + if(pthis) + { + hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite,(VOID **)&pIWizardSite); + if (SUCCEEDED(hr)) + { + HPROPSHEETPAGE hpage = NULL; + hr = pIWizardSite->GetCancelledPage(&hpage); + if (SUCCEEDED(hr)) + { + PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); + } + pIWizardSite->Release(); + } + } + } + return TRUE; + } + } + return FALSE; + } + return FALSE; + +} + +BOOL CALLBACK +CDot11SampleExtUI::LastPageDlgProc( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ) +{ + CDot11SampleExtUI* pthis = NULL; + + switch (uMsg) + { + case WM_INITDIALOG: + { + (VOID)GetThis(hwndDlg, uMsg, wParam, lParam); + } + return TRUE; + + case WM_DESTROY: + { + (VOID)GetThis(hwndDlg, uMsg, wParam, lParam); + } + return TRUE; + + case WM_NOTIFY: + { + LPNMHDR pnmh = (LPNMHDR) lParam; + switch (pnmh->code) + { + case PSN_SETACTIVE : + PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_NEXT); + return TRUE; + + case PSN_WIZNEXT : + { + IWizardSite *pIWizardSite = NULL; + HRESULT hr = S_OK; + + pthis = GetThis(hwndDlg, uMsg, wParam, lParam); + if(pthis) + { + hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite,(VOID **)&pIWizardSite); + if (SUCCEEDED(hr)) + { + HPROPSHEETPAGE hpage = NULL; + + hr = pIWizardSite->GetNextPage(&hpage); + if (SUCCEEDED(hr)) + { + PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); + } + pIWizardSite->Release(); + } + } + SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, (LPARAM)-1); + } + return TRUE; + + case PSN_QUERYCANCEL: + { + IWizardSite *pIWizardSite = NULL; + HRESULT hr = S_OK; + + pthis = GetThis(hwndDlg, uMsg, wParam, lParam); + if(pthis) + { + hr = pthis->m_pUnkSite->QueryInterface(IID_IWizardSite,(VOID **)&pIWizardSite); + if (SUCCEEDED(hr)) + { + HPROPSHEETPAGE hpage = NULL; + hr = pIWizardSite->GetCancelledPage(&hpage); + if (SUCCEEDED(hr)) + { + PropSheet_SetCurSel(GetParent(hwndDlg), hpage, 0); + } + pIWizardSite->Release(); + } + } + } + return TRUE; + + } + } + return FALSE; + } + return FALSE; + +} + +HRESULT CDot11SampleExtUI::GetClsidPropertyName ( + _In_ const CLSID* pCLSID, + _In_opt_ PCWSTR pwszPropertyName, + _Out_writes_(maxResultLen) PWSTR pwszResultStr, + _In_ UINT maxResultLen) +{ + #define MIN_BUFFER_SIZE 50 + + wchar_t *pwszCLSID = NULL; + wchar_t *pwszKeyName = NULL; + HRESULT hRetCode = S_OK; + size_t iCharCount = 0; + + // Sanity + //======= + + if( pCLSID == NULL || + pwszResultStr == NULL || + maxResultLen < MIN_BUFFER_SIZE + ) + { + return E_INVALIDARG; + } + + // Convert CLSID to string + //======================== + + hRetCode = StringFromCLSID(*pCLSID, &pwszCLSID); + if(FAILED(hRetCode)) + { + goto Done; + } + + // Allocate buffer for entire CLSID\PropertyName string + //===================================================== + + iCharCount = wcslen(pwszCLSID) + 1; + if(pwszPropertyName) + { + iCharCount += wcslen(pwszPropertyName); + } + + pwszKeyName = new(std::nothrow) wchar_t[iCharCount]; + if(pwszKeyName == NULL) + { + hRetCode = E_OUTOFMEMORY; + goto Done; + } + + swprintf_s(pwszKeyName, iCharCount, L"%s%s", pwszCLSID, pwszPropertyName ? pwszPropertyName : L""); + + // Copy as much as we can to the target buffer + //============================================ + + wcsncpy_s(pwszResultStr, maxResultLen, pwszKeyName, _TRUNCATE); + +Done: + + if(pwszKeyName != NULL) + { + delete [] pwszKeyName; + } + + if(pwszCLSID != NULL) + { + CoTaskMemFree(pwszCLSID); + } + + return hRetCode; +} + + + diff --git a/network/wlan/ihvsampleui/IHVSampleExtUI.h b/network/wlan/ihvsampleui/IHVSampleExtUI.h new file mode 100644 index 00000000..474c56a3 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUI.h @@ -0,0 +1,238 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#ifndef _IHVSAMPLEEXTUI_H_ +#define _IHVSAMPLEEXTUI_H_ + +#include "precomp.h" + +// object ref count +extern long g_objRefCount; + +//lock count on server +extern long g_serverLock; + +#define IHV_KEY_LENGTH 64 + +#define MAX_IHV_CIPHERS 6 +#define MAX_IHV_AUTHS 6 + +// IHV Auth types +typedef enum _IHV_AUTH_TYPE { + IHVAuthV1, + IHVAuthV2, + IHVAuthV3, + IHVAuthInvalid +} IHV_AUTH_TYPE, *PIHV_AUTH_TYPE; + +// IHV cipher types +typedef enum _IHV_CIPHER_TYPE { + None, + IHVCipher1, + IHVCipher2, + IHVCipher3, + IHVCipherInvalid +} IHV_CIPHER_TYPE, *PIHV_CIPHER_TYPE; + +// structure holding valid ciphers for a given auth +typedef struct _IHV_AUTH_CIPHERS { + IHV_AUTH_TYPE IHVAuth; + DWORD dwCipherCount; + IHV_CIPHER_TYPE IHVCiphers[MAX_IHV_CIPHERS]; +} IHV_AUTH_CIPHERS, *PIHV_AUTH_CIPHERS; + +// structure for all auths and corresponding ciphers +typedef struct _IHV_AUTH_CIPHER_CAPABILITY { + DWORD dwAuthCount; + IHV_AUTH_CIPHERS IhvAuthCiphers[MAX_IHV_AUTHS]; +} IHV_AUTH_CIPHER_CAPABILITY, *PIHV_AUTH_CIPHER_CAPABILITY; + +typedef struct _IHV_SECURITY_CONFIG { + IHV_AUTH_TYPE Auth; + IHV_CIPHER_TYPE Cipher; +} IHV_SECURITY_CONFIG, *PIHV_SECURITY_CONFIG; + +extern IHV_AUTH_CIPHER_CAPABILITY g_IHVOneXExtCapability; + +extern LPWSTR g_IHVAuthFriendlyName[]; +extern LPWSTR g_IHVCipherFriendlyName[]; + + +#define PROP_COUNT_CONNECTION 1 + +#define PROP_COUNT_SECURITY 2 +#define PROP_COUNT_SEC_CIPHERS 2 +typedef enum _IHV_SECURITY_TYPE { + IHVSecurityV1, + IHVSecurityV2, + IHVSecurityInvalid +} IHV_SECURITY_TYPE, *PIHV_SECURITY_TYPE; +static LPWSTR wstrSecurityTypes[] = { L"IHV Security v1", L"IHV Security v2" }; + +#define PROP_COUNT_KEYEXTENSION 3 +static LPWSTR wstrAuthArray[] = { L"IHVAuth Open-with-1X", L"IHVAuth v1", L"IHVAuth v2" }; + + + + +#define IHV_CIPHER_COUNT 3 +static LPWSTR wstrCipherArray[] = { L"None", L"IHVCipher v1", L"IHVCipher v2" }; +static LPWSTR wstr1XCipherArray[] = { L"IHVCipher WEP"}; +static BSTR bstrCipherArray[IHV_CIPHER_COUNT] = {0}; + +typedef struct _IHV_CIPHERS_FOR_AUTH_INFO +{ + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO displayInfo[IHV_CIPHER_COUNT]; +} IHV_CIPHERS_FOR_AUTH_INFO; +static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO cipherOne = {1, DOT11_EXT_UI_DISPLAY_INFO_CIPHER, 0}; +static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO cipherTwo = {2, DOT11_EXT_UI_DISPLAY_INFO_CIPHER, 0}; +static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO cipherThree = {3, DOT11_EXT_UI_DISPLAY_INFO_CIPHER, 0}; +static DOT11_EXT_UI_PROPERTY_DISPLAY_INFO ciphersInfoArray[MAX_IHV_AUTHS][MAX_IHV_CIPHERS] = {0}; + + +//////// structures for balloon ///////// + +struct IHV_UI_REQUEST +{ + char title[80]; + char help[80]; + + IHV_UI_REQUEST() + { + memset(this, 0, sizeof(IHV_UI_REQUEST)); + } +}; + +struct IHV_UI_RESPONSE +{ + char key[100]; + int num[150]; + + IHV_UI_RESPONSE() + { + memset(this, 0, sizeof(IHV_UI_RESPONSE)); + } +}; + + +class CDot11SampleExtUI: public IDot11SampleExtUI, public IWizardExtension, public IObjectWithSite +{ +public: + CDot11SampleExtUI(); + + ~CDot11SampleExtUI(); + + // IUnknown Implementation + BEGIN_INTERFACE_TABLE() + IMPLEMENTS_INTERFACE(IDot11ExtUI) + IMPLEMENTS_INTERFACE(IDot11SampleExtUI) + IMPLEMENTS_INTERFACE(IWizardExtension) + IMPLEMENTS_INTERFACE(IObjectWithSite) + END_INTERFACE_TABLE(); + + // Used to get the IHV friendly name + STDMETHODIMP + GetDot11ExtUIFriendlyName(BSTR* bstrFriendlyName); + + // Used to display an IHV specific connection page + STDMETHODIMP + GetDot11ExtUIProperties( + DOT11_EXT_UI_PROPERTY_TYPE ExtType, + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ); + + STDMETHODIMP + GetDot11ExtUIBalloonText( + BSTR pIHVUIRequest, // the UI request structure from IHV + BSTR* pwszBalloonText // the balloon text to be displayed + ); + + HRESULT + CreateConnectionProperties( + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ); + + HRESULT + CreateSecurityProperties( + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ); + + HRESULT + CreateKeyProperties( + ULONG *pcExtensions, + IDot11ExtUIProperty **ppDot11ExtUIProperty + ); + + // IObjectWithSite + STDMETHOD (SetSite) ( + IUnknown* pUnkSite + ); + + STDMETHOD (GetSite) ( + REFIID riid, + void** ppvSite + ); + + //IWizardExtension + STDMETHOD (AddPages) ( + HPROPSHEETPAGE* aPages, + UINT cPages, + UINT *pnPagesAdded + ); + + STDMETHOD (GetFirstPage) ( + HPROPSHEETPAGE *phpage + ); + + STDMETHOD (GetLastPage) ( + HPROPSHEETPAGE *phpage + ); + +private: + HRESULT FinalConstruct(); + void FinalRelease(); + static BOOL CALLBACK GetKeyDlgProc ( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ); + + + static BOOL CALLBACK HelpDlgProc ( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ); + + static BOOL CALLBACK LastPageDlgProc ( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam + ); + + HRESULT GetClsidPropertyName ( + _In_ const CLSID* pCLSID, + _In_opt_ PCWSTR pwszPropertyName, + _Out_writes_(maxResultLen) PWSTR pResultStr, + _In_ UINT maxResultLen); + +private: + IHV_UI_REQUEST* m_pUIRequest; + IHV_UI_RESPONSE m_UIResponse; + + IUnknown* m_pUnkSite; + + HPROPSHEETPAGE m_hFirstPagePsp; + HPROPSHEETPAGE m_hLastPagePsp; +}; + + +#endif _IHVSAMPLEEXTUI_H_ diff --git a/network/wlan/ihvsampleui/IHVSampleExtUICon.cpp b/network/wlan/ihvsampleui/IHVSampleExtUICon.cpp new file mode 100644 index 00000000..e5eeb6cd --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUICon.cpp @@ -0,0 +1,345 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" + +extern HINSTANCE g_hInst; + +// used by the con prop extensions +CIhvConnectivityProfile* pIhvConProfile; + + +CDot11SampleExtUIConProperty::CDot11SampleExtUIConProperty(): + m_crefCount(0), m_fInitialized(false), + m_ExtType(DOT11_EXT_UI_CONNECTION), m_fModified(FALSE) +{ + m_bstrFN = NULL; + InterlockedIncrement(&g_objRefCount); +} + +CDot11SampleExtUIConProperty::~CDot11SampleExtUIConProperty() +{ + SysFreeString(m_bstrFN); + InterlockedDecrement(&g_objRefCount); +} + + +STDMETHODIMP +CDot11SampleExtUIConProperty::GetDot11ExtUIPropertyFriendlyName(BSTR* bstrPropertyName) +{ + HRESULT hr = E_INVALIDARG; + if (false == m_fInitialized) + { + return hr; + } + + if (NULL != bstrPropertyName) + { + *bstrPropertyName = SysAllocString(m_bstrFN); + hr = S_OK; + } + + return hr; +} + +//Used to extend property +STDMETHODIMP +CDot11SampleExtUIConProperty::DisplayDot11ExtUIProperty( + HWND hParent, // Parent Window Handle + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + UNREFERENCED_PARAMETER(pIHVParams); + + if (!m_fInitialized) + { + hr = E_INVALIDARG; + goto error; + } + + // Store the passed-in string in a member variable so dialog box can display it + pIhvConProfile = new(std::nothrow) CIhvConnectivityProfile(); + if (pIhvConProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvConProfile->LoadXml(bstrIHVProfile); + m_fModified = FALSE; + + // Dialog will store the string in a member variable + DialogBoxParam( + g_hInst, + MAKEINTRESOURCE(IDD_PROPPAGE_SMALL), + hParent, + SimpleDialogProcCon, + (LPARAM)pIhvConProfile + ); + + m_fModified = pIhvConProfile->GetModified(); + + if (NULL != bstrModifiedIHVProfile) + { + if (m_fModified) + { + pIhvConProfile->EmitXml(bstrModifiedIHVProfile); + } + } + + if (NULL != pbIsModified) + { + *pbIsModified = m_fModified; + } + +error: + if(pIhvConProfile) + { + delete pIhvConProfile; + pIhvConProfile = NULL; + } + + return hr; +} + + +//Used to get the currently chosen entry to display as selected in the dropdown list +STDMETHODIMP +CDot11SampleExtUIConProperty::Dot11ExtUIPropertyGetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BOOL* pfIsSelected // flag denoting if this is the selected profile + ) +{ + HRESULT hr = S_OK; + UNREFERENCED_PARAMETER(bstrIHVProfile); + UNREFERENCED_PARAMETER(pIHVParams); + + // since there is only one connection profile always set it to true + *pfIsSelected = TRUE; + + return hr; +} + +//Used to set the current entry as chosen from the dropdown list +STDMETHODIMP +CDot11SampleExtUIConProperty::Dot11ExtUIPropertySetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + UNREFERENCED_PARAMETER(pIHVParams); + + if(bstrModifiedIHVProfile == NULL || pbIsModified == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + // in case the profile is NULL this will supply the default + pIhvConProfile = new(std::nothrow) CIhvConnectivityProfile(); + if (pIhvConProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvConProfile->LoadXml(bstrIHVProfile); + + pIhvConProfile->EmitXml(bstrModifiedIHVProfile); + *pbIsModified = pIhvConProfile->GetModified(); + +error: + if(pIhvConProfile != NULL) + { + delete pIhvConProfile; + pIhvConProfile = NULL; + } + return hr; +} + + +STDMETHODIMP +CDot11SampleExtUIConProperty::Dot11ExtUIPropertyHasConfigurationUI( + BOOL *fHasConfigurationUI + ) +{ + // this page always wants to show a config UI + *fHasConfigurationUI = TRUE; + return S_OK; +} + +//Used to get additional display data (ciphers for auth types) +STDMETHODIMP +CDot11SampleExtUIConProperty::Dot11ExtUIPropertyGetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + ULONG *pcEntries, // number of dependent strings + ULONG *puDefaultSelection, // the entry in the array to be selected by default + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure + ) +{ + UNREFERENCED_PARAMETER(dot11ExtUIDisplayInfoType); + UNREFERENCED_PARAMETER(pIHVParams); + UNREFERENCED_PARAMETER(bstrIHVProfile); + // we have no additional data to display + *pcEntries = 0; + *puDefaultSelection = 0; + *ppDot11ExtUIProperty = NULL; + return E_NOTIMPL; +} + +STDMETHODIMP +CDot11SampleExtUIConProperty::Dot11ExtUIPropertySetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + UNREFERENCED_PARAMETER(dot11ExtUIDisplayInfoType); + UNREFERENCED_PARAMETER(bstrIHVProfile); + UNREFERENCED_PARAMETER(pIHVParams); + UNREFERENCED_PARAMETER(pDot11ExtUIProperty); + UNREFERENCED_PARAMETER(bstrModifiedIHVProfile); + UNREFERENCED_PARAMETER(pbIsModified); + return E_NOTIMPL; +} + +STDMETHODIMP +CDot11SampleExtUIConProperty::Dot11ExtUIPropertyIsStandardSecurity( + BOOL *fIsStandardSecurity, // if this interface is a standard auth method + DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is + ) +{ + UNREFERENCED_PARAMETER(dot11ExtUISecurityType); + *fIsStandardSecurity = FALSE; + return E_NOTIMPL; +} + +STDMETHODIMP +CDot11SampleExtUIConProperty::Initialize(BSTR bstrPropertyName) +{ + HRESULT hr = E_INVALIDARG; + if (false == m_fInitialized) + { + // Set the FriendlyName + m_bstrFN = SysAllocString(bstrPropertyName); + m_fInitialized = true; + hr = S_OK; + } + return hr; +} + +INT_PTR CALLBACK +SimpleDialogProcCon( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + BOOL fRetVal = FALSE; + WCHAR szBuf[256] = {0}; + DWORD dwValue = 0; + BSTR bstrText = NULL; + + UNREFERENCED_PARAMETER(lParam); + + if(!pIhvConProfile) + { + goto error; + } + + switch(uMsg) + { + case WM_INITDIALOG: + { + // Dialog title + WCHAR strDialogTitle[MAX_PATH] = {0}; + (VOID)::LoadString( + g_hInst, + IDS_IHV_DEFAULT_CON_TITLE, + strDialogTitle, + MAX_PATH + ); + + SetWindowText(hwndDlg, strDialogTitle); + } + + // check the checkbox if needed + if(FAILED(pIhvConProfile->GetParamDWORD(&dwValue))) + { + dwValue = 0; + } + ::SendMessage( + GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), + BM_SETCHECK, + (WPARAM)(int)dwValue, + 0L + ); + + // Set text in the textbox + if(FAILED(pIhvConProfile->GetParamBSTR(&bstrText))) + { + bstrText = NULL; + } + SetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), bstrText); + + fRetVal = TRUE; + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case ID_OK: + GetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), szBuf, 255); + if(szBuf) + { + DWORD dwNewValue = 0; + + // get the button state and record it + dwNewValue = (int)::SendMessage( + GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), + BM_GETCHECK, + 0L, + 0L + ); + + pIhvConProfile->SetParamDWORD(dwNewValue); + pIhvConProfile->SetParamBSTR(szBuf); + + // Notify the owner window to carry out the task. + EndDialog(hwndDlg, 1); + fRetVal = TRUE; + } + break; + + case ID_CANCEL: + EndDialog(hwndDlg, 0); + fRetVal = TRUE; + break; + } + break; + } + +error: + return fRetVal; +} + + + + + diff --git a/network/wlan/ihvsampleui/IHVSampleExtUICon.h b/network/wlan/ihvsampleui/IHVSampleExtUICon.h new file mode 100644 index 00000000..fd58c106 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUICon.h @@ -0,0 +1,103 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#ifndef _IHVSAMPLEEXTUICON_H_ +#define _IHVSAMPLEEXTUICON_H_ + +class CDot11SampleExtUIConProperty: public IDot11SampleExtUIConProperty +{ +public: + CDot11SampleExtUIConProperty(); + + ~CDot11SampleExtUIConProperty(); + + // IUnknown Implementation + BEGIN_INTERFACE_TABLE() + IMPLEMENTS_INTERFACE(IDot11SampleExtUIConProperty) + END_INTERFACE_TABLE(); + + STDMETHODIMP + GetDot11ExtUIPropertyFriendlyName( + BSTR* bstrPropertyName // IHV friendly name + ); + + //Used to extend property + STDMETHODIMP + DisplayDot11ExtUIProperty( + HWND hParent, // Parent Window Handle + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + //Used to get the currently chosen entry to display as selected in the dropdown list + STDMETHODIMP + Dot11ExtUIPropertyGetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BOOL* pfIsSelected // flag denoting if this is the selected profile + ); + + //Used to set the current entry as chosen from the dropdown list + STDMETHODIMP + Dot11ExtUIPropertySetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + STDMETHODIMP + Dot11ExtUIPropertyHasConfigurationUI(BOOL *fHasConfigurationUI); + + //Used to get additional display data (ciphers for auth types) + STDMETHODIMP + Dot11ExtUIPropertyGetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + ULONG *pcEntries, // number of dependent strings + ULONG *puDefaultSelection, // the entry in the array to be selected by default + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure + ); + + STDMETHODIMP + Dot11ExtUIPropertySetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + STDMETHODIMP + Dot11ExtUIPropertyIsStandardSecurity( + BOOL *fIsStandardSecurity, // if this interface is a standard auth method + DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is + ); + + // initialize the connection page + STDMETHODIMP + Initialize(BSTR bstrPropertyName); + +private: + bool m_fInitialized; + BSTR m_bstrFN; + DOT11_EXT_UI_PROPERTY_TYPE m_ExtType; + BOOL m_fModified; +}; + + +INT_PTR CALLBACK +SimpleDialogProcCon( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +); + +#endif _IHVSAMPLEEXTUICON_H_ diff --git a/network/wlan/ihvsampleui/IHVSampleExtUIKey.cpp b/network/wlan/ihvsampleui/IHVSampleExtUIKey.cpp new file mode 100644 index 00000000..19c9610a --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUIKey.cpp @@ -0,0 +1,462 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" + +extern HINSTANCE g_hInst; + +// used by the con prop extensions +CIhvSecurityProfile* pIhvKeyProfile; + + +CDot11SampleExtUIKeyProperty::CDot11SampleExtUIKeyProperty(): + m_crefCount(0), m_fInitialized(false), + m_ExtType(DOT11_EXT_UI_KEYEXTENSION), m_fModified(FALSE) +{ + InterlockedIncrement(&g_objRefCount); + memset( + &m_IHVAuthCiphers, + 0, + sizeof(IHV_AUTH_CIPHERS) + ); + m_bstrFN = NULL; +} + +CDot11SampleExtUIKeyProperty::~CDot11SampleExtUIKeyProperty() +{ + if(m_bstrFN != NULL) { + SysFreeString(m_bstrFN); + } + + InterlockedDecrement(&g_objRefCount); +} + + +STDMETHODIMP +CDot11SampleExtUIKeyProperty::GetDot11ExtUIPropertyFriendlyName(BSTR* bstrPropertyName) +{ + HRESULT hr = E_INVALIDARG; + if (false == m_fInitialized) + { + return hr; + } + + if (NULL != g_IHVAuthFriendlyName[m_IHVAuthCiphers.IHVAuth]) + { + *bstrPropertyName = SysAllocString(g_IHVAuthFriendlyName[m_IHVAuthCiphers.IHVAuth]); + hr = S_OK; + } + + return hr; +} + +//Used to extend property +STDMETHODIMP +CDot11SampleExtUIKeyProperty::DisplayDot11ExtUIProperty( + HWND hParent, // Parent Window Handle + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + UNREFERENCED_PARAMETER(pIHVParams); + + if (!m_fInitialized) + { + hr = E_INVALIDARG; + goto error; + } + + // Store the passed-in string in a member variable so dialog box can display it + pIhvKeyProfile = new(std::nothrow) CIhvSecurityProfile(); + if (pIhvKeyProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvKeyProfile->LoadXml(bstrIHVProfile); + m_fModified = FALSE; + + // Dialog will store the string in a member variable + DialogBoxParam( + g_hInst, + MAKEINTRESOURCE(IDD_PROPPAGE_SMALL), + hParent, + SimpleDialogProcKey, + (LPARAM)pIhvKeyProfile + ); + + m_fModified = pIhvKeyProfile->GetModified(); + + if (NULL != bstrModifiedIHVProfile) + { + if (m_fModified) + { + pIhvKeyProfile->EmitXml(bstrModifiedIHVProfile); + } + } + + if (NULL != pbIsModified) + { + *pbIsModified = m_fModified; + } + +error: + if(pIhvKeyProfile) + { + delete pIhvKeyProfile; + pIhvKeyProfile = NULL; + } + + return hr; +} + + +//Used to get the currently chosen entry to display as selected in the dropdown list +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyGetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BOOL* pfIsSelected // flag denoting if this is the selected profile + ) +{ + HRESULT hr = S_OK; + IHV_AUTH_TYPE currentAuthType = IHVAuthInvalid; + UNREFERENCED_PARAMETER(pIHVParams); + + if(pfIsSelected == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + *pfIsSelected = FALSE; + + pIhvKeyProfile = new(std::nothrow) CIhvSecurityProfile(); + if (pIhvKeyProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvKeyProfile->LoadXml(bstrIHVProfile); + + hr = pIhvKeyProfile->GetAuthType(¤tAuthType); + if(FAILED(hr)) + { + // if it fails then choose a default selected auth + hr = S_OK; + if(IHVAuthV1 == m_IHVAuthCiphers.IHVAuth) + { + *pfIsSelected = TRUE; + } + } + else if(currentAuthType == m_IHVAuthCiphers.IHVAuth) + { + *pfIsSelected = TRUE; + } + +error: + if(pIhvKeyProfile != NULL) + { + delete pIhvKeyProfile; + pIhvKeyProfile = NULL; + } + return hr; +} + +//Used to set the current entry as chosen from the dropdown list +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertySetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + UNREFERENCED_PARAMETER(pIHVParams); + + if(bstrModifiedIHVProfile == NULL || pbIsModified == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + pIhvKeyProfile = new(std::nothrow) CIhvSecurityProfile(); + if (pIhvKeyProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvKeyProfile->LoadXml(bstrIHVProfile); + + pIhvKeyProfile->SetAuthType(m_IHVAuthCiphers.IHVAuth); + pIhvKeyProfile->SetFullSecurityFlag(FALSE); + + pIhvKeyProfile->EmitXml(bstrModifiedIHVProfile); + *pbIsModified = pIhvKeyProfile->GetModified(); + +error: + if(pIhvKeyProfile != NULL) + { + delete pIhvKeyProfile; + pIhvKeyProfile = NULL; + } + return hr; +} + + +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyHasConfigurationUI( + BOOL *fHasConfigurationUI) +{ + // this page always wants to show a config UI unless its of IHVAuthOpen1X auth + *fHasConfigurationUI = (m_IHVAuthCiphers.IHVAuth == IHVAuthV3)?FALSE:TRUE; + return S_OK; +} + +//Used to get additional display data (ciphers for auth types) +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyGetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + ULONG *pcEntries, // number of dependent strings + ULONG *puDefaultSelection, // the entry in the array to be selected by default + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure + ) +{ + HRESULT hr = S_OK; + DWORD i = 0; + DWORD dwDefaultSelection = 0; + CIhvSecurityProfile IhvSecurityProfile; + IHV_CIPHER_TYPE cipherType = IHVCipherInvalid; + + UNREFERENCED_PARAMETER(pIHVParams); + + if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) + { + hr = E_NOTIMPL; + goto error; + } + + IhvSecurityProfile.LoadXml(bstrIHVProfile); + hr = IhvSecurityProfile.GetCipherType(&cipherType); + if(FAILED(hr)) + { + goto error; + } + + for(i = 0; i < m_IHVAuthCiphers.dwCipherCount; ++i) + { + ciphersInfoArray[m_IHVAuthCiphers.IHVAuth][i].dwDataKey = m_IHVAuthCiphers.IHVCiphers[i]; + ciphersInfoArray[m_IHVAuthCiphers.IHVAuth][i].dot11ExtUIDisplayInfoType = DOT11_EXT_UI_DISPLAY_INFO_CIPHER; + ciphersInfoArray[m_IHVAuthCiphers.IHVAuth][i].bstrDisplayText = SysAllocString(g_IHVCipherFriendlyName[m_IHVAuthCiphers.IHVCiphers[i]]); + + if(m_IHVAuthCiphers.IHVCiphers[i] == cipherType) + { + dwDefaultSelection = i; + } + } + + // for the given auth type we want to return the list of compatible ciphers + *ppDot11ExtUIProperty = ciphersInfoArray[m_IHVAuthCiphers.IHVAuth]; + *pcEntries = m_IHVAuthCiphers.dwCipherCount; + *puDefaultSelection = dwDefaultSelection; + +error: + return hr; +} + + +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertySetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + + CIhvSecurityProfile IhvSecurityProfile; + + UNREFERENCED_PARAMETER(pIHVParams); + + if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) + { + hr = E_NOTIMPL; + goto error; + } + + if(pDot11ExtUIProperty == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + hr = IhvSecurityProfile.LoadXml(bstrIHVProfile); + if(FAILED(hr)) + { + goto error; + } + hr = IhvSecurityProfile.SetCipherType((IHV_CIPHER_TYPE)pDot11ExtUIProperty->dwDataKey); + if(FAILED(hr)) + { + goto error; + } + + hr = IhvSecurityProfile.EmitXml(bstrModifiedIHVProfile); + *pbIsModified = IhvSecurityProfile.GetModified(); + +error: + return hr; +} + + +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Dot11ExtUIPropertyIsStandardSecurity( + BOOL *fIsStandardSecurity, // if this interface is a standard auth method + DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is + ) +{ + *fIsStandardSecurity = FALSE; + + if (m_IHVAuthCiphers.IHVAuth == IHVAuthV1) + { + *fIsStandardSecurity = TRUE; + *dot11ExtUISecurityType = DOT11_EXT_UI_SECURITY_8021X; + } + + return S_OK; +} + + +STDMETHODIMP +CDot11SampleExtUIKeyProperty::Initialize(BYTE* pbData) +{ + HRESULT hr = E_INVALIDARG; + PIHV_AUTH_CIPHERS pIhvAuthCiphers = NULL; + pIhvAuthCiphers = (PIHV_AUTH_CIPHERS) pbData; + + if (false == m_fInitialized) + { + // Set the FriendlyName + m_fInitialized = true; + memcpy( + &m_IHVAuthCiphers, + pIhvAuthCiphers, + sizeof(IHV_AUTH_CIPHERS) + ); + hr = S_OK; + } + return hr; +} + +INT_PTR CALLBACK +SimpleDialogProcKey( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + BOOL fRetVal = FALSE; + WCHAR szBuf[256] = {0}; + DWORD dwValue = 0; + BSTR bstrText = NULL; + + UNREFERENCED_PARAMETER(lParam); + + if(!pIhvKeyProfile) + { + goto error; + } + + switch(uMsg) + { + case WM_INITDIALOG: + { + // Dialog title + WCHAR strDialogTitle[MAX_PATH] = {0}; + (VOID)::LoadString( + g_hInst, + IDS_IHV_DEFAULT_KEY_TITLE, + strDialogTitle, + MAX_PATH + ); + + SetWindowText(hwndDlg, strDialogTitle); + } + + // check the checkbox if needed + if(FAILED(pIhvKeyProfile->GetParamDWORD(&dwValue))) + { + dwValue = 0; + } + ::SendMessage( + GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), + BM_SETCHECK, + (WPARAM)(int)dwValue, + 0L + ); + + // Set text in the textbox + if(FAILED(pIhvKeyProfile->GetParamBSTR(&bstrText))) + { + bstrText = NULL; + } + SetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), bstrText); + + fRetVal = TRUE; + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case ID_OK: + GetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), szBuf, 255); + if(szBuf) + { + DWORD dwNewValue = 0; + + // get the button state and record it + dwNewValue = (int)::SendMessage( + GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), + BM_GETCHECK, + 0L, + 0L + ); + + pIhvKeyProfile->SetParamDWORD(dwNewValue); + pIhvKeyProfile->SetParamBSTR(szBuf); + pIhvKeyProfile->SetFullSecurityFlag(FALSE); + + // Notify the owner window to carry out the task. + EndDialog(hwndDlg, 1); + fRetVal = TRUE; + } + break; + + case ID_CANCEL: + EndDialog(hwndDlg, 0); + fRetVal = TRUE; + break; + } + break; + } + +error: + return fRetVal; +} + + diff --git a/network/wlan/ihvsampleui/IHVSampleExtUIKey.h b/network/wlan/ihvsampleui/IHVSampleExtUIKey.h new file mode 100644 index 00000000..c106e549 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUIKey.h @@ -0,0 +1,104 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#ifndef _IHVSAMPLEEXTUIKEY_H_ +#define _IHVSAMPLEEXTUIKEY_H_ + +class CDot11SampleExtUIKeyProperty: public IDot11SampleExtUIKeyProperty +{ +public: + CDot11SampleExtUIKeyProperty(); + + ~CDot11SampleExtUIKeyProperty(); + + // IUnknown Implementation + BEGIN_INTERFACE_TABLE() + IMPLEMENTS_INTERFACE(IDot11SampleExtUIKeyProperty) + END_INTERFACE_TABLE(); + + STDMETHODIMP + GetDot11ExtUIPropertyFriendlyName( + BSTR* bstrPropertyName // IHV friendly name + ); + + //Used to extend property + STDMETHODIMP + DisplayDot11ExtUIProperty( + HWND hParent, // Parent Window Handle + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + //Used to get the currently chosen entry to display as selected in the dropdown list + STDMETHODIMP + Dot11ExtUIPropertyGetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BOOL* pfIsSelected // flag denoting if this is the selected profile + ); + + //Used to set the current entry as chosen from the dropdown list + STDMETHODIMP + Dot11ExtUIPropertySetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + STDMETHODIMP + Dot11ExtUIPropertyHasConfigurationUI(BOOL *fHasConfigurationUI); + + //Used to get additional display data (ciphers for auth types) + STDMETHODIMP + Dot11ExtUIPropertyGetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + ULONG *pcEntries, // number of dependent strings + ULONG *puDefaultSelection, // the entry in the array to be selected by default + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure + ); + + STDMETHODIMP + Dot11ExtUIPropertySetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + STDMETHODIMP + Dot11ExtUIPropertyIsStandardSecurity( + BOOL *fIsStandardSecurity, // if this interface is a standard auth method + DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is + ); + + // initialize the key extension page + STDMETHODIMP + Initialize(BYTE* pbData); + +private: + bool m_fInitialized; + BSTR m_bstrFN; + DOT11_EXT_UI_PROPERTY_TYPE m_ExtType; + BOOL m_fModified; + IHV_AUTH_CIPHERS m_IHVAuthCiphers; +}; + + +INT_PTR CALLBACK +SimpleDialogProcKey( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +); + +#endif _IHVSAMPLEEXTUIKEY_H_ diff --git a/network/wlan/ihvsampleui/IHVSampleExtUISec.cpp b/network/wlan/ihvsampleui/IHVSampleExtUISec.cpp new file mode 100644 index 00000000..1cfa3714 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUISec.cpp @@ -0,0 +1,434 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" + +extern HINSTANCE g_hInst; + +// used by the con prop extensions +CIhvSecurityProfile* pIhvSecProfile; + +CDot11SampleExtUISecProperty::CDot11SampleExtUISecProperty(): + m_crefCount(0), m_fInitialized(false), + m_ExtType(DOT11_EXT_UI_SECURITY), m_fModified(FALSE), + m_IhvSecurityType(IHVSecurityInvalid) +{ + m_bstrFN = NULL; + InterlockedIncrement(&g_objRefCount); +} + +CDot11SampleExtUISecProperty::~CDot11SampleExtUISecProperty() +{ + SysFreeString(m_bstrFN); + InterlockedDecrement(&g_objRefCount); +} + + +STDMETHODIMP +CDot11SampleExtUISecProperty::GetDot11ExtUIPropertyFriendlyName(BSTR* bstrPropertyName) +{ + HRESULT hr = E_INVALIDARG; + if (false == m_fInitialized) + { + return hr; + } + + if (NULL != bstrPropertyName) + { + *bstrPropertyName = SysAllocString(m_bstrFN); + hr = S_OK; + } + + return hr; +} + +//Used to extend property +STDMETHODIMP +CDot11SampleExtUISecProperty::DisplayDot11ExtUIProperty( + HWND hParent, // Parent Window Handle + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + + UNREFERENCED_PARAMETER(pIHVParams); + + if (!m_fInitialized) + { + hr = E_INVALIDARG; + goto error; + } + + // Store the passed-in string in a member variable so dialog box can display it + pIhvSecProfile = new(std::nothrow) CIhvSecurityProfile(); + if (pIhvSecProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + pIhvSecProfile->LoadXml(bstrIHVProfile); + m_fModified = FALSE; + + // Dialog will store the string in a member variable + DialogBoxParam( + g_hInst, + MAKEINTRESOURCE(IDD_PROPPAGE_SMALL), + hParent, + SimpleDialogProcSec, + (LPARAM)pIhvSecProfile + ); + + m_fModified = pIhvSecProfile->GetModified(); + + if (NULL != bstrModifiedIHVProfile) + { + if (m_fModified) + { + pIhvSecProfile->EmitXml(bstrModifiedIHVProfile); + } + } + + if (NULL != pbIsModified) + { + *pbIsModified = m_fModified; + } + +error: + if(pIhvSecProfile) + { + delete pIhvSecProfile; + pIhvSecProfile = NULL; + } + + return hr; +} + + +//Used to get the currently chosen entry to display as selected in the dropdown list +STDMETHODIMP +CDot11SampleExtUISecProperty::Dot11ExtUIPropertyGetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BOOL* pfIsSelected // flag denoting if this is the selected profile + ) +{ + HRESULT hr = S_OK; + IHV_SECURITY_TYPE currentSecurityType = IHVSecurityInvalid; + + UNREFERENCED_PARAMETER(pIHVParams); + + if(pfIsSelected == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + *pfIsSelected = FALSE; + + pIhvSecProfile = new(std::nothrow) CIhvSecurityProfile(); + if (pIhvSecProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvSecProfile->LoadXml(bstrIHVProfile); + + hr = pIhvSecProfile->GetSecurityType(¤tSecurityType); + if(FAILED(hr)) + { + hr = S_OK; + if(IHVSecurityV1 == m_IhvSecurityType) + { + *pfIsSelected = TRUE; + } + } + else if(currentSecurityType == m_IhvSecurityType) + { + *pfIsSelected = TRUE; + } + +error: + if(pIhvSecProfile != NULL) + { + delete pIhvSecProfile; + pIhvSecProfile = NULL; + } + return hr; +} + +//Used to set the current entry as chosen from the dropdown list +STDMETHODIMP +CDot11SampleExtUISecProperty::Dot11ExtUIPropertySetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + + UNREFERENCED_PARAMETER(pIHVParams); + + if(bstrModifiedIHVProfile == NULL || pbIsModified == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + pIhvSecProfile = new(std::nothrow) CIhvSecurityProfile(); + if (pIhvSecProfile == NULL) + { + hr = E_OUTOFMEMORY; + goto error; + } + + pIhvSecProfile->LoadXml(bstrIHVProfile); + + pIhvSecProfile->SetSecurityType(m_IhvSecurityType); + pIhvSecProfile->SetFullSecurityFlag(TRUE); + + pIhvSecProfile->EmitXml(bstrModifiedIHVProfile ); + *pbIsModified = pIhvSecProfile->GetModified(); + +error: + if(pIhvSecProfile != NULL) + { + delete pIhvSecProfile; + pIhvSecProfile = NULL; + } + return hr; +} + + +STDMETHODIMP +CDot11SampleExtUISecProperty::Dot11ExtUIPropertyHasConfigurationUI( + BOOL *fHasConfigurationUI) +{ + // this page always wants to show a config UI + *fHasConfigurationUI = TRUE; + return S_OK; +} + +//Used to get additional display data (ciphers for auth types) +STDMETHODIMP +CDot11SampleExtUISecProperty::Dot11ExtUIPropertyGetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + ULONG *pcEntries, // number of dependent strings + ULONG *puDefaultSelection, // the entry in the array to be selected by default + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure + ) +{ + HRESULT hr = S_OK; + DWORD i = 0; + CIhvSecurityProfile IhvSecurityProfile; + IHV_CIPHER_TYPE cipherType = IHVCipherInvalid; + + UNREFERENCED_PARAMETER(pIHVParams); + + if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) + { + hr = E_NOTIMPL; + goto error; + } + + IhvSecurityProfile.LoadXml(bstrIHVProfile); + hr = IhvSecurityProfile.GetCipherType(&cipherType); + if(FAILED(hr)) + { + goto error; + } + + for(i = 0; i < PROP_COUNT_SEC_CIPHERS; ++i) + { + ciphersInfoArray[m_IhvSecurityType][i].dwDataKey = i; + ciphersInfoArray[m_IhvSecurityType][i].dot11ExtUIDisplayInfoType = DOT11_EXT_UI_DISPLAY_INFO_CIPHER; + ciphersInfoArray[m_IhvSecurityType][i].bstrDisplayText = SysAllocString(g_IHVCipherFriendlyName[i]); + } + + // for the given auth type we want to return the list of compatible ciphers + *ppDot11ExtUIProperty = ciphersInfoArray[m_IhvSecurityType]; + *pcEntries = PROP_COUNT_SEC_CIPHERS; + *puDefaultSelection = cipherType >= IHVCipherInvalid ? 0 : cipherType; + +error: + return hr; +} + +STDMETHODIMP +CDot11SampleExtUISecProperty::Dot11ExtUIPropertySetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ) +{ + HRESULT hr = S_OK; + + UNREFERENCED_PARAMETER(pIHVParams); + + CIhvSecurityProfile IhvSecurityProfile; + + if(dot11ExtUIDisplayInfoType != DOT11_EXT_UI_DISPLAY_INFO_CIPHER) + { + hr = E_NOTIMPL; + goto error; + } + + if(pDot11ExtUIProperty == NULL) + { + hr = E_INVALIDARG; + goto error; + } + + hr = IhvSecurityProfile.LoadXml(bstrIHVProfile); + if(FAILED(hr)) + { + goto error; + } + hr = IhvSecurityProfile.SetCipherType((IHV_CIPHER_TYPE)pDot11ExtUIProperty->dwDataKey); + if(FAILED(hr)) + { + goto error; + } + + hr = IhvSecurityProfile.EmitXml(bstrModifiedIHVProfile); + *pbIsModified = IhvSecurityProfile.GetModified(); + +error: + return hr; +} + +STDMETHODIMP +CDot11SampleExtUISecProperty::Dot11ExtUIPropertyIsStandardSecurity( + BOOL *fIsStandardSecurity, // if this interface is a standard auth method + DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is + ) +{ + UNREFERENCED_PARAMETER(dot11ExtUISecurityType); + *fIsStandardSecurity = FALSE; + return S_OK; +} + +STDMETHODIMP +CDot11SampleExtUISecProperty::Initialize(BSTR bstrPropertyName, DWORD dwIhvSecurity) +{ + HRESULT hr = E_INVALIDARG; + if (false == m_fInitialized) + { + // Set the FriendlyName + m_bstrFN = SysAllocString(bstrPropertyName); + m_IhvSecurityType = (IHV_SECURITY_TYPE)dwIhvSecurity; + m_fInitialized = true; + hr = S_OK; + } + return hr; +} + +INT_PTR CALLBACK +SimpleDialogProcSec( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + BOOL fRetVal = FALSE; + WCHAR szBuf[256] = {0}; + DWORD dwValue = 0; + BSTR bstrText = NULL; + + UNREFERENCED_PARAMETER(lParam); + + if(!pIhvSecProfile) + { + goto error; + } + + switch(uMsg) + { + case WM_INITDIALOG: + { + // Dialog title + WCHAR strDialogTitle[MAX_PATH] = {0}; + (VOID)::LoadString( + g_hInst, + IDS_IHV_DEFAULT_SEC_TITLE, + strDialogTitle, + MAX_PATH + ); + + SetWindowText(hwndDlg, strDialogTitle); + } + + // check the checkbox if needed + if(FAILED(pIhvSecProfile->GetParamDWORD(&dwValue))) + { + dwValue = 0; + } + ::SendMessage( + GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), + BM_SETCHECK, + (WPARAM)(int)dwValue, + 0L + ); + + // Set text in the textbox + if(FAILED(pIhvSecProfile->GetParamBSTR(&bstrText))) + { + bstrText = NULL; + } + SetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), bstrText); + + fRetVal = TRUE; + break; + + case WM_COMMAND: + switch (LOWORD(wParam)) + { + case ID_OK: + GetWindowText(GetDlgItem(hwndDlg, IDC_PARAM_BOX), szBuf, 255); + if(szBuf) + { + DWORD dwNewValue = 0; + + // get the button state and record it + dwNewValue = (int)::SendMessage( + GetDlgItem(hwndDlg, IDC_USE_FASTHANDOFF), + BM_GETCHECK, + 0L, + 0L + ); + + pIhvSecProfile->SetParamDWORD(dwNewValue); + pIhvSecProfile->SetParamBSTR(szBuf); + pIhvSecProfile->SetFullSecurityFlag(TRUE); + + // Notify the owner window to carry out the task. + EndDialog(hwndDlg, 1); + fRetVal = TRUE; + } + break; + + case ID_CANCEL: + EndDialog(hwndDlg, 0); + fRetVal = TRUE; + break; + } + break; + } + +error: + return fRetVal; +} + + diff --git a/network/wlan/ihvsampleui/IHVSampleExtUISec.h b/network/wlan/ihvsampleui/IHVSampleExtUISec.h new file mode 100644 index 00000000..fc8caa2e --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleExtUISec.h @@ -0,0 +1,105 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#ifndef _IHVSAMPLEEXTUISEC_H_ +#define _IHVSAMPLEEXTUISEC_H_ + +class CDot11SampleExtUISecProperty: public IDot11SampleExtUISecProperty +{ +public: + CDot11SampleExtUISecProperty(); + + ~CDot11SampleExtUISecProperty(); + + // IUnknown Implementation + BEGIN_INTERFACE_TABLE() + IMPLEMENTS_INTERFACE(IDot11SampleExtUISecProperty) + END_INTERFACE_TABLE(); + + STDMETHODIMP + GetDot11ExtUIPropertyFriendlyName( + BSTR* bstrPropertyName // IHV friendly name + ); + + //Used to extend property + STDMETHODIMP + DisplayDot11ExtUIProperty( + HWND hParent, // Parent Window Handle + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + //Used to get the currently chosen entry to display as selected in the dropdown list + STDMETHODIMP + Dot11ExtUIPropertyGetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BOOL* pfIsSelected // flag denoting if this is the selected profile + ); + + //Used to set the current entry as chosen from the dropdown list + STDMETHODIMP + Dot11ExtUIPropertySetSelected( + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + STDMETHODIMP + Dot11ExtUIPropertyHasConfigurationUI(BOOL *fHasConfigurationUI); + + //Used to get additional display data (ciphers for auth types) + STDMETHODIMP + Dot11ExtUIPropertyGetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be described + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + ULONG *pcEntries, // number of dependent strings + ULONG *puDefaultSelection, // the entry in the array to be selected by default + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO **ppDot11ExtUIProperty // array of returned info structure + ); + + STDMETHODIMP + Dot11ExtUIPropertySetDisplayInfo( + DOT11_EXT_UI_DISPLAY_INFO_TYPE dot11ExtUIDisplayInfoType, // the diapaly type to be modified + BSTR bstrIHVProfile, // IHV data from the profile + PDOT11EXT_IHV_PARAMS pIHVParams, // Select profile MS security settings + DOT11_EXT_UI_PROPERTY_DISPLAY_INFO *pDot11ExtUIProperty, // selected info structure + BSTR* bstrModifiedIHVProfile, // modified IHV data to be stored in the profile + BOOL* pbIsModified // flag to denote if profile was modified + ); + + STDMETHODIMP + Dot11ExtUIPropertyIsStandardSecurity( + BOOL *fIsStandardSecurity, // if this interface is a standard auth method + DOT11_EXT_UI_SECURITY_TYPE *dot11ExtUISecurityType // which of the standard auth methods it is + ); + + // initialize the security page + STDMETHODIMP + Initialize(BSTR bstrPropertyName, DWORD dwIhvSecurity); + +private: + bool m_fInitialized; + BSTR m_bstrFN; + DOT11_EXT_UI_PROPERTY_TYPE m_ExtType; + BOOL m_fModified; + IHV_SECURITY_TYPE m_IhvSecurityType; + IHV_CIPHER_TYPE m_IHVCipherList[MAX_CIPHER_TYPES]; +}; + + +INT_PTR CALLBACK +SimpleDialogProcSec( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +); + +#endif _IHVSAMPLEEXTUISEC_H_ diff --git a/network/wlan/ihvsampleui/IHVSampleProfile.cpp b/network/wlan/ihvsampleui/IHVSampleProfile.cpp new file mode 100644 index 00000000..0b9bb8a2 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleProfile.cpp @@ -0,0 +1,918 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" + +HRESULT +CIhvProfileBase::GetTextFromNode +( + IN LPCWSTR pszQuery, + OUT BSTR* pbstrText +) +{ + HRESULT hr = S_OK; + BSTR bstrQuery = NULL; + IXMLDOMNode* pQueryNode = NULL; + + if ( !m_pRootNode ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + if ( (!pszQuery) || (!pbstrText) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + hr = + Wstr2Bstr + ( + pszQuery, + &bstrQuery + ); + BAIL_ON_FAILURE( hr ); + + hr = m_pRootNode->selectSingleNode( bstrQuery, &pQueryNode ); + BAIL_ON_FAILURE( hr ); + + if (!pQueryNode) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + hr = pQueryNode->get_text( pbstrText ); + BAIL_ON_FAILURE( hr ); + + if ( !(*pbstrText) ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + +error: + RELEASE_INTERFACE( pQueryNode ); + SYS_FREE_STRING( bstrQuery ); + return hr; +} + + +HRESULT +CIhvProfileBase::PutTextInNode +( + IN LPCWSTR pszQuery, + IN BSTR bstrText +) +{ + HRESULT hr = S_OK; + BSTR bstrQuery = NULL; + BSTR bstrOrig = NULL; + BOOL bPut = TRUE; + IXMLDOMNode* pQueryNode = NULL; + + if ( !m_pRootNode ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + if ( (!pszQuery) || (!bstrText) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + hr = + Wstr2Bstr + ( + pszQuery, + &bstrQuery + ); + BAIL_ON_FAILURE( hr ); + + hr = m_pRootNode->selectSingleNode( bstrQuery, &pQueryNode ); + BAIL_ON_FAILURE( hr ); + + if (!pQueryNode) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + hr = pQueryNode->get_text( &bstrOrig ); + BAIL_ON_FAILURE( hr ); + + if ( bstrOrig && ( 0 == wcscmp( bstrOrig, bstrText ) ) ) + { + bPut = FALSE; + } + + if ( bPut ) + { + hr = pQueryNode->put_text( bstrText ); + BAIL_ON_FAILURE( hr ); + + SetModified( ); + } + +error: + RELEASE_INTERFACE( pQueryNode ); + SYS_FREE_STRING( bstrQuery ); + SYS_FREE_STRING( bstrOrig ); + return hr; +} + + +HRESULT +CIhvProfileBase::LoadXml +( + IN BSTR bstrProfileData +) +{ + HRESULT hr = S_OK; + IXMLDOMDocument* pDOMDoc = NULL; + IXMLDOMElement* pDocElem = NULL; + BSTR bstrIhvProfile = NULL; + VARIANT_BOOL vfSuccess; + + if ( !bstrProfileData ) + { + hr = GetDefaultXml( &bstrIhvProfile ); + BAIL_ON_FAILURE( hr ); + } + else + { + bstrIhvProfile = bstrProfileData; + } + + if ( m_pRootNode ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + hr = + CoCreateInstance + ( + CLSID_DOMDocument60, + NULL, + CLSCTX_ALL, + IID_IXMLDOMDocument, + (LPVOID *) &pDOMDoc + ); + BAIL_ON_FAILURE( hr ); + + hr = + pDOMDoc->loadXML + ( + bstrIhvProfile, + &vfSuccess + ); + BAIL_ON_FAILURE( hr ); + + if ( VARIANT_TRUE != vfSuccess ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + hr = + pDOMDoc->get_documentElement + ( + &pDocElem + ); + BAIL_ON_FAILURE( hr ); + + // Caching the pointer to the document element + // in a member variable. + m_pRootNode = pDocElem; + pDocElem = NULL; + + +error: + if ( !bstrProfileData ) + { + SYS_FREE_STRING( bstrIhvProfile ); + } + RELEASE_INTERFACE( pDOMDoc ); + RELEASE_INTERFACE( pDocElem ); + return hr; +} + + +HRESULT +CIhvProfileBase::EmitXml +( + OUT BSTR* pbstrIhvProfile +) +{ + HRESULT hr = S_OK; + + if ( !pbstrIhvProfile ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + if ( !m_pRootNode ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + hr = m_pRootNode->get_xml( pbstrIhvProfile ); + BAIL_ON_FAILURE( hr ); + +error: + return hr; +} + + +////////////////////////////////////////////////////////// + +WCHAR g_szDefaultConnectivityProfile[] = +L"" +L" 0" +L" parameter value" +L"" +; + + + +HRESULT +CIhvConnectivityProfile::GetDefaultXml +( + BSTR* pbstrDefault +) +{ + SetModified(); + return Wstr2Bstr( g_szDefaultConnectivityProfile, pbstrDefault ); +} + + + +HRESULT +CIhvConnectivityProfile::GetParamDWORD +( + DWORD* pdwParam1 +) +{ + HRESULT hr = S_OK; + BSTR bstrData = NULL; + + hr = + GetTextFromNode + ( + CON_PARAM2_XPATH, + &bstrData + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2Dword + ( + bstrData, + pdwParam1 + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrData ); + return hr; +} + + +HRESULT +CIhvConnectivityProfile::SetParamDWORD +( + DWORD dwNewValue +) +{ + HRESULT hr = S_OK; + BSTR bstrText = NULL; + + hr = + Dword2Bstr + ( + dwNewValue, + &bstrText + ); + BAIL_ON_FAILURE( hr ); + + hr = + PutTextInNode + ( + CON_PARAM2_XPATH, + bstrText + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrText ); + return hr; +} + + + +HRESULT +CIhvConnectivityProfile::GetParamBSTR +( + BSTR* pbstrValue +) +{ + HRESULT hr = S_OK; + + hr = + GetTextFromNode + ( + CON_PARAM1_XPATH, + pbstrValue + ); + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + + + +HRESULT +CIhvConnectivityProfile::SetParamBSTR +( + BSTR bstrNewValue +) +{ + HRESULT hr = S_OK; + + hr = + PutTextInNode + ( + CON_PARAM1_XPATH, + bstrNewValue + ); + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + +HRESULT +CIhvConnectivityProfile::GetNativeData +( + LPVOID* ppvData +) +{ + HRESULT hr = S_OK; + PIHV_CONNECTIVITY_PROFILE pIhvProfile = NULL; + BSTR bstrParam2 = NULL; + + if ( !ppvData ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + pIhvProfile = (PIHV_CONNECTIVITY_PROFILE) malloc( sizeof( IHV_CONNECTIVITY_PROFILE ) ); + if ( !pIhvProfile ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + ZeroMemory( pIhvProfile, sizeof( IHV_CONNECTIVITY_PROFILE ) ); + + hr = + GetParamBSTR + ( + &bstrParam2 + ); + BAIL_ON_FAILURE( hr ); + + if ( NULL == bstrParam2 ) { + hr = E_POINTER; + BAIL_ON_FAILURE( hr ); + } + + hr = + Wstr2Wstr + ( + bstrParam2, + &(pIhvProfile->pszParam2) + ); + BAIL_ON_FAILURE( hr ); + + hr = + GetParamDWORD + ( + &(pIhvProfile->dwParam1) + ); + BAIL_ON_FAILURE( hr ); + + // Transfering local cache to OUT parameter. + (*ppvData) = pIhvProfile; + pIhvProfile = NULL; + +error: + if ( pIhvProfile ) + { + free( pIhvProfile->pszParam2 ); // NULL Safe. + free( pIhvProfile ); + } + SYS_FREE_STRING( bstrParam2 ); + return hr; +} + + + +/////////////////////////////////////////// + +LPCWSTR gppszIhvAuthTypes[] = +{ + L"IHVAuthV1", + L"IHVAuthV2", + L"IHVAuthV3" +}; + +LPCWSTR gppszIhvSecurityTypes[] = +{ + L"IHVSecurityV1", + L"IHVSecurityV2", +}; + +LPCWSTR gppszIhvCipherTypes[] = +{ + L"None", + L"IHVCipher1", + L"IHVCipher2", + L"IHVCipher3" +}; + + +WCHAR g_szDefaultSecurityProfile[] = +L"" +L" TRUE" +L" IHVAuthV1" +L" IHVCipher1" +L" 0" +L" parameter value" +L""; + + + +HRESULT +CIhvSecurityProfile::GetDefaultXml +( + BSTR* pbstrDefault +) +{ + SetModified(); + return Wstr2Bstr( g_szDefaultSecurityProfile, pbstrDefault ); +} + +HRESULT +CIhvSecurityProfile::GetNativeData +( + LPVOID* ppvData +) +{ + HRESULT hr = S_OK; + PIHV_SECURITY_PROFILE pIhvProfile = NULL; + BSTR bstrParam2 = NULL; + + if ( !ppvData ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + pIhvProfile = (PIHV_SECURITY_PROFILE) malloc( sizeof( IHV_SECURITY_PROFILE ) ); + if ( !pIhvProfile ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + ZeroMemory( pIhvProfile, sizeof( IHV_SECURITY_PROFILE ) ); + + hr = + GetFullSecurityFlag + ( + &(pIhvProfile->bUseFullSecurity) + ); + BAIL_ON_FAILURE( hr ); + + hr = + GetAuthType + ( + &(pIhvProfile->AuthType) + ); + BAIL_ON_FAILURE( hr ); + + hr = + GetCipherType + ( + &(pIhvProfile->CipherType) + ); + BAIL_ON_FAILURE( hr ); + + hr = + GetParamDWORD + ( + &(pIhvProfile->dwParam1) + ); + BAIL_ON_FAILURE( hr ); + + hr = + GetParamBSTR + ( + &bstrParam2 + ); + BAIL_ON_FAILURE( hr ); + + if ( NULL == bstrParam2 ) { + hr = E_POINTER; + BAIL_ON_FAILURE( hr ); + } + + hr = + Wstr2Wstr + ( + bstrParam2, + &(pIhvProfile->pszParam2) + ); + BAIL_ON_FAILURE( hr ); + + // Transfering local cache to OUT parameter. + (*ppvData) = pIhvProfile; + pIhvProfile = NULL; + +error: + if ( pIhvProfile ) + { + free( pIhvProfile->pszParam2 ); // NULL Safe. + free( pIhvProfile ); + } + SYS_FREE_STRING( bstrParam2 ); + return hr; + +} + + + +HRESULT +CIhvSecurityProfile::GetFullSecurityFlag +( + BOOL* pbUseFullSecurity +) +{ + HRESULT hr = S_OK; + BSTR bstrData = NULL; + + hr = + GetTextFromNode + ( + SEC_FSFLAG_XPATH, + &bstrData + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2Bool + ( + bstrData, + pbUseFullSecurity + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrData ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::SetFullSecurityFlag +( + BOOL bUseFullSecurity +) +{ + HRESULT hr = S_OK; + BSTR bstrText = NULL; + + hr = + Bool2Bstr + ( + bUseFullSecurity, + &bstrText + ); + BAIL_ON_FAILURE( hr ); + + hr = + PutTextInNode + ( + SEC_FSFLAG_XPATH, + bstrText + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrText ); + return hr; +} + + + +HRESULT +CIhvSecurityProfile::GetAuthType +( + PIHV_AUTH_TYPE pAuthType +) +{ + HRESULT hr = S_OK; + BSTR bstrData = NULL; + + hr = + GetTextFromNode + ( + SEC_ATYPE_XPATH, + &bstrData + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2AuthType + ( + bstrData, + pAuthType + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrData ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::SetAuthType +( + IHV_AUTH_TYPE AuthType +) +{ + HRESULT hr = S_OK; + BSTR bstrText = NULL; + + hr = + AuthType2Bstr + ( + AuthType, + &bstrText + ); + BAIL_ON_FAILURE( hr ); + + hr = + PutTextInNode + ( + SEC_ATYPE_XPATH, + bstrText + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrText ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::GetSecurityType +( + PIHV_SECURITY_TYPE pSecurityType +) +{ + HRESULT hr = S_OK; + BSTR bstrData = NULL; + + hr = + GetTextFromNode + ( + SEC_ATYPE_XPATH, + &bstrData + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2SecurityType + ( + bstrData, + pSecurityType + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrData ); + return hr; +} + +HRESULT +CIhvSecurityProfile::SetSecurityType +( + IHV_SECURITY_TYPE SecurityType +) +{ + HRESULT hr = S_OK; + BSTR bstrText = NULL; + + hr = + SecurityType2Bstr + ( + SecurityType, + &bstrText + ); + BAIL_ON_FAILURE( hr ); + + hr = + PutTextInNode + ( + SEC_ATYPE_XPATH, + bstrText + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrText ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::GetCipherType +( + PIHV_CIPHER_TYPE pCipherType +) +{ + HRESULT hr = S_OK; + BSTR bstrData = NULL; + + hr = + GetTextFromNode + ( + SEC_ETYPE_XPATH, + &bstrData + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2CipherType + ( + bstrData, + pCipherType + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrData ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::SetCipherType +( + IHV_CIPHER_TYPE CipherType +) +{ + HRESULT hr = S_OK; + BSTR bstrText = NULL; + + hr = + CipherType2Bstr + ( + CipherType, + &bstrText + ); + BAIL_ON_FAILURE( hr ); + + hr = + PutTextInNode + ( + SEC_ETYPE_XPATH, + bstrText + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrText ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::GetParamDWORD +( + DWORD* pdwParam1 +) +{ + HRESULT hr = S_OK; + BSTR bstrData = NULL; + + hr = + GetTextFromNode + ( + SEC_PARAM2_XPATH, + &bstrData + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2Dword + ( + bstrData, + pdwParam1 + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrData ); + return hr; +} + + +HRESULT +CIhvSecurityProfile::SetParamDWORD +( + DWORD dwNewValue +) +{ + HRESULT hr = S_OK; + BSTR bstrText = NULL; + + hr = + Dword2Bstr + ( + dwNewValue, + &bstrText + ); + BAIL_ON_FAILURE( hr ); + + hr = + PutTextInNode + ( + SEC_PARAM2_XPATH, + bstrText + ); + BAIL_ON_FAILURE( hr ); + +error: + SYS_FREE_STRING( bstrText ); + return hr; +} + + + +HRESULT +CIhvSecurityProfile::GetParamBSTR +( + BSTR* pbstrValue +) +{ + HRESULT hr = S_OK; + + hr = + GetTextFromNode + ( + SEC_PARAM1_XPATH, + pbstrValue + ); + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + + +HRESULT +CIhvSecurityProfile::SetParamBSTR +( + BSTR bstrNewValue +) +{ + HRESULT hr = S_OK; + + hr = + PutTextInNode + ( + SEC_PARAM1_XPATH, + bstrNewValue + ); + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} diff --git a/network/wlan/ihvsampleui/IHVSampleProfile.h b/network/wlan/ihvsampleui/IHVSampleProfile.h new file mode 100644 index 00000000..66e8ce3f --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleProfile.h @@ -0,0 +1,296 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#pragma once + +#ifndef _IHVSAMPLEPROFILE_H +#define _IHVSAMPLEPROFILE_H + +#define RELEASE_INTERFACE( _p ) if ( _p ) { (_p)->Release( ); (_p) = NULL;} + + +class CIhvProfileBase +{ +public: + + // Constructor + CIhvProfileBase( ) + { + m_bModified = FALSE; + m_pRootNode = NULL; + } + + // Destructor + ~CIhvProfileBase( ) + { + RELEASE_INTERFACE( m_pRootNode ); + } + + HRESULT + LoadXml + ( + IN BSTR bstrIhvProfile + ); + + HRESULT + EmitXml + ( + OUT BSTR* pbstrIhvProfile + ); + + BOOL GetModified( ) { return m_bModified; } + + // Caller needs to know what type to + // cast the pointer to depending upon + // the type of the derived class. + // Caller needs to free memory recursively + // by using the free( ) function. + virtual + HRESULT + GetNativeData + ( + LPVOID* ppvData + ) + = 0; + +protected: + + virtual + HRESULT + GetDefaultXml + ( + BSTR* pbstrDefault + ) + = 0; + + HRESULT + GetTextFromNode + ( + IN LPCWSTR pszQuery, + OUT BSTR* pbstrText + ); + + HRESULT + PutTextInNode + ( + IN LPCWSTR pszQuery, + IN BSTR bstrText + ); + + + VOID SetModified( ) { m_bModified = TRUE; } + + IXMLDOMElement* m_pRootNode; + +private: + BOOL m_bModified; +}; + +/////////////////////////////////////////// + + +typedef struct _IHV_CONNECTIVITY_PROFILE +{ +#define CON_PARAM1_XPATH L"/IhvConnectivity/IHVConnectivityParam1" +#define CON_PARAM2_XPATH L"/IhvConnectivity/IHVConnectivityParam2" + + DWORD dwParam1; + LPWSTR pszParam2; +} +IHV_CONNECTIVITY_PROFILE, *PIHV_CONNECTIVITY_PROFILE; + + +extern WCHAR g_szDefaultConnectivityProfile[]; + +class CIhvConnectivityProfile + : public CIhvProfileBase +{ +protected: + HRESULT + GetDefaultXml + ( + BSTR* pbstrDefault + ); + +public: + + // Constructor Destructor + CIhvConnectivityProfile( ) { } + ~CIhvConnectivityProfile( ) { } + + // Caller needs to know what type to + // cast the pointer to depending upon + // the type of the derived class. + // Caller needs to free memory recursively + // by using the free( ) function. + HRESULT + GetNativeData + ( + LPVOID* ppvData + ); + + + // Accessor and Modifier for dwParam1 + HRESULT + GetParamDWORD + ( + DWORD* pdwParam1 + ); + HRESULT + SetParamDWORD + ( + DWORD dwNewValue + ); + + // Accessor and Modifier for pszParam2 + HRESULT + GetParamBSTR + ( + BSTR* pbstrValue + ); + HRESULT + SetParamBSTR + ( + BSTR bstrNewValue + ); + +}; + + + +/////////////////////////////////////////// + +extern LPCWSTR gppszIhvSecurityTypes[]; + +#define MAX_AUTH_TYPES 3 +extern LPCWSTR gppszIhvAuthTypes[]; + +#define MAX_CIPHER_TYPES 4 +extern LPCWSTR gppszIhvCipherTypes[]; + +typedef struct _IHV_SECURITY_PROFILE +{ +#define SEC_FSFLAG_XPATH L"/IhvSecurity/IHVUsesFullSecurity" +#define SEC_ATYPE_XPATH L"/IhvSecurity/IHVAuthentication" +#define SEC_ETYPE_XPATH L"/IhvSecurity/IHVEncryption" +#define SEC_PARAM1_XPATH L"/IhvSecurity/IHVSecurityParam1" +#define SEC_PARAM2_XPATH L"/IhvSecurity/IHVSecurityParam2" + + BOOL bUseFullSecurity; + IHV_AUTH_TYPE AuthType; + IHV_CIPHER_TYPE CipherType; + DWORD dwParam1; + LPWSTR pszParam2; +} +IHV_SECURITY_PROFILE, *PIHV_SECURITY_PROFILE; + + +extern WCHAR g_szDefaultSecurityProfile[]; + +class CIhvSecurityProfile + : public CIhvProfileBase +{ +protected: + HRESULT + GetDefaultXml + ( + BSTR* pbstrDefault + ); + +public: + + // Constructor Destructor + CIhvSecurityProfile( ) { } + ~CIhvSecurityProfile( ) { } + + // Caller needs to know what type to + // cast the pointer to depending upon + // the type of the derived class. + // Caller needs to free memory recursively + // by using the free( ) function. + HRESULT + GetNativeData + ( + LPVOID* ppvData + ); + + + // Accessor and Modifier for bUseFullSecurity + HRESULT + GetFullSecurityFlag + ( + BOOL* pbUseFullSecurity + ); + HRESULT + SetFullSecurityFlag + ( + BOOL bUseFullSecurity + ); + + + // Accessor and Modifier for AuthType + HRESULT + GetAuthType + ( + PIHV_AUTH_TYPE pAuthType + ); + HRESULT + SetAuthType + ( + IHV_AUTH_TYPE AuthType + ); + + // Accessor and Modifier for SecurityType + HRESULT + GetSecurityType + ( + PIHV_SECURITY_TYPE pSecurityType + ); + HRESULT + SetSecurityType + ( + IHV_SECURITY_TYPE SecurityType + ); + + // Accessor and Modifier for CipherType + HRESULT + GetCipherType + ( + PIHV_CIPHER_TYPE pCipherType + ); + HRESULT + SetCipherType + ( + IHV_CIPHER_TYPE CipherType + ); + + // Accessor and Modifier for dwParam1 + HRESULT + GetParamDWORD + ( + DWORD* pdwParam1 + ); + HRESULT + SetParamDWORD + ( + DWORD dwNewValue + ); + + // Accessor and Modifier for pszParam2 + HRESULT + GetParamBSTR + ( + BSTR* pbstrValue + ); + HRESULT + SetParamBSTR + ( + BSTR bstrNewValue + ); + +}; + +#endif _IHVSAMPLEPROFILE_H + diff --git a/network/wlan/ihvsampleui/IHVSampleUI.cpp b/network/wlan/ihvsampleui/IHVSampleUI.cpp new file mode 100644 index 00000000..f93218bc --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleUI.cpp @@ -0,0 +1,122 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + + +#include "precomp.h" + +CIHVClassFactory *g_pIHVClassFactory = NULL; + +// instance handle to dll +HINSTANCE g_hInst; + +// object ref count +long g_objRefCount = 0; +long g_serverLock = 0; //lock count on server + +// +// DllRegisterServer - Adds entries to the system registry +// +STDAPI DllRegisterServer() +{ + HRESULT hr = S_OK; + + hr = CRegHelper::RegisterServer(); + + return hr; +} + +// +// DllUnregisterServer - Removes entries from the system registry +// +STDAPI DllUnregisterServer() +{ + HRESULT hr = S_OK; + + hr = CRegHelper::UnregisterServer(); + + return hr; +} + + + +// +// Used to determine whether the DLL can be unloaded by COM +// +STDAPI DllCanUnloadNow(void) +{ + if ((g_objRefCount == 0) && (g_serverLock == 0) /*&& (_Module.GetLockCount() == 0)*/) + { + return S_OK; + } + else + { + return S_FALSE; + } +} + + + +STDAPI +DllGetClassObject( + _In_ REFCLSID rclsid, + _In_ REFIID riid, + _Outptr_ LPVOID *ppv) +{ + HRESULT hr = E_NOINTERFACE; + + if (NULL == g_pIHVClassFactory) + { + g_pIHVClassFactory = new(std::nothrow) CIHVClassFactory(); + if (NULL == g_pIHVClassFactory) + { + hr = E_OUTOFMEMORY; + } + } + + if(NULL != g_pIHVClassFactory && + (rclsid == GUID_SAMPLE_IHVUI_CLSID || rclsid == IID_IWizardExtension)) + { + hr = g_pIHVClassFactory->QueryInterface(riid, ppv); + } + return hr; +} + + +//+---------------------------------------------------------------------------- +// +// Function: DllMain +// +// Synopsis: Main entry point into the DLL. +// +// Arguments: HINSTANCE hinstDLL - Our HINSTANCE +// DWORD fdwReason - The reason we are being called. +// LPVOID lpvReserved - Reserved +// +// Returns: BOOL WINAPI - TRUE - always +// +//+---------------------------------------------------------------------------- +extern "C" +BOOL WINAPI +DllMain( + HINSTANCE hInstDLL, + DWORD fdwReason, + LPVOID lpvReserved + ) +{ + UNREFERENCED_PARAMETER(lpvReserved); + + if (DLL_PROCESS_ATTACH == fdwReason) + { + // Set our global instance handle + g_hInst = hInstDLL; + (VOID)DisableThreadLibraryCalls(hInstDLL); + } + else if (DLL_PROCESS_DETACH == fdwReason) + { + } + + return TRUE; +} + diff --git a/network/wlan/ihvsampleui/IHVSampleUI.def b/network/wlan/ihvsampleui/IHVSampleUI.def new file mode 100644 index 00000000..2882c292 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleUI.def @@ -0,0 +1,7 @@ +LIBRARY "IhvSampleUI.dll" + +EXPORTS + DllCanUnloadNow PRIVATE + DllGetClassObject PRIVATE + DllRegisterServer PRIVATE + DllUnregisterServer PRIVATE diff --git a/network/wlan/ihvsampleui/IHVSampleUI.rc b/network/wlan/ihvsampleui/IHVSampleUI.rc new file mode 100644 index 00000000..2c6563d8 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleUI.rc @@ -0,0 +1,129 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +VS_VERSION_INFO VERSIONINFO + FILEVERSION 1,0,0,1 + PRODUCTVERSION 1,0,0,1 + FILEFLAGSMASK 0x3fL +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "TODO: " + VALUE "FileDescription", "TODO: " + VALUE "FileVersion", "1.0.0.1" + VALUE "LegalCopyright", "TODO: (c) . All rights reserved." + VALUE "InternalName", "IHVSampleUI.dll" + VALUE "OriginalFilename", "IHVSampleUI.dll" + VALUE "ProductName", "TODO: " + VALUE "ProductVersion", "1.0.0.1" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_PROPPAGE_SMALL DIALOGEX 0, 0, 227, 244 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "IHV Profile String" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "This is a sample IHV extended dialog.",IDC_TITLE_TXT, + 20,19,135,8 + LTEXT "Parameter 1",IDC_PARAM_TXT,20,49,80,8 + EDITTEXT IDC_PARAM_BOX,101,48,96,14 + CONTROL "Parameter 2",IDC_USE_FASTHANDOFF,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,20,72,178,10 + PUSHBUTTON "OK",ID_OK,96,210,49,14 + PUSHBUTTON "Cancel",ID_CANCEL,167,209,50,14 +END + +IDD_DIALOG_SHOWHELP DIALOGEX 0, 0, 317, 143 +STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dialog" +FONT 9, "Segoe UI", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT_HELPER,8,7,171,81,ES_AUTOHSCROLL +END + +IDD_DIALOG_GETKEY DIALOGEX 0, 0, 317, 143 +STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dialog" +FONT 9, "Segoe UI", 400, 0, 0x1 +BEGIN + EDITTEXT IDC_EDIT_KEY,23,46,142,14,ES_AUTOHSCROLL + LTEXT "Please enter IHV keys:",IDC_STATIC,25,17,74,8 +END + +IDD_DIALOG_LASTPAGE DIALOGEX 0, 0, 317, 143 +STYLE DS_SETFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dialog" +FONT 9, "Segoe UI", 400, 0, 0x1 +BEGIN + CONTROL "",IDC_DATETIMEPICKER1,"SysDateTimePick32", + DTS_RIGHTALIGN | WS_TABSTOP,7,7,172,12 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE +BEGIN + IDS_PROJNAME "SampleIHVExt" + IDS_TITLE_GETKEY "IHV Get Key Page" + IDS_TITLE_SHOWHELP "IHV Helper Page" + IDS_TITLE_LASTPAGE "IHV Last Page" + IDS_IHV_DEFAULT_TITLE "IHV Properties" + IDS_IHV_DEFAULT_CON_TITLE "IHV Connection Properties" + IDS_IHV_DEFAULT_KEY_TITLE "IHV Security Properties" + IDS_IHV_DEFAULT_SEC_TITLE "IHV Security Properties" +END + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + diff --git a/network/wlan/ihvsampleui/IHVSampleUI.vcxproj b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj new file mode 100644 index 00000000..36ff1126 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj @@ -0,0 +1,257 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + {1EE6DF41-8C0B-4C74-98D2-FCDF020E7128} + $(MSBuildProjectName) + Debug + Win32 + {C7745B6F-E931-4E1C-A12B-5BF1C854C635} + + + + Windows10 + False + Desktop + + WindowsApplicationForDrivers10.0 + DynamicLibrary + + + Windows10 + True + Desktop + + WindowsApplicationForDrivers10.0 + DynamicLibrary + + + Windows10 + False + Desktop + + WindowsApplicationForDrivers10.0 + DynamicLibrary + + + Windows10 + True + Desktop + + WindowsApplicationForDrivers10.0 + DynamicLibrary + + + + $(IntDir) + + + + + + + + + + + + + + + + IHVSampleUI + + + IHVSampleUI + + + IHVSampleUI + + + IHVSampleUI + + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + _DllMainCRTStartup@12 + _DllMainCRTStartup + + + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + _DllMainCRTStartup@12 + _DllMainCRTStartup + + + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + _DllMainCRTStartup@12 + _DllMainCRTStartup + + + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + %(PreprocessorDefinitions);UNICODE;WIN32 + + + _DllMainCRTStartup@12 + _DllMainCRTStartup + + + + + %(AdditionalOptions) /EHa + true + Level4 + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib + IHVSampleUI.def + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalOptions) /EHa + true + Level4 + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib + IHVSampleUI.def + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalOptions) /EHa + true + Level4 + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib + IHVSampleUI.def + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalOptions) /EHa + true + Level4 + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + %(AdditionalDependencies);ole32.lib;oleaut32.lib;user32.lib;uuid.lib;Kernel32.lib;Advapi32.lib;comctl32.lib + IHVSampleUI.def + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + %(AdditionalIncludeDirectories);$(DDK_INC_PATH) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters new file mode 100644 index 00000000..72360872 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVSampleUI.vcxproj.Filters @@ -0,0 +1,60 @@ + + + + + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* + {3E231056-27BE-4B0F-9726-4C0460ABF1EB} + + + h;hpp;hxx;hm;inl;inc;xsd + {3CBB5BFF-1597-48F7-B4B5-F3A3CCA72B25} + + + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml + {064BBA6C-0573-47BF-B800-6384C27EB50B} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Resource Files + + + \ No newline at end of file diff --git a/network/wlan/ihvsampleui/IHVUIInc.idl b/network/wlan/ihvsampleui/IHVUIInc.idl new file mode 100644 index 00000000..1ef82407 --- /dev/null +++ b/network/wlan/ihvsampleui/IHVUIInc.idl @@ -0,0 +1 @@ +#include "wlanihvui.idl" \ No newline at end of file diff --git a/network/wlan/ihvsampleui/iunk.h b/network/wlan/ihvsampleui/iunk.h new file mode 100644 index 00000000..9b8242c5 --- /dev/null +++ b/network/wlan/ihvsampleui/iunk.h @@ -0,0 +1,54 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +// Common macro based implementation of IUnknown +// using a interface table approach + +#define IMPLEMENT_REFCOUNT()\ + ULONG m_crefCount;\ + \ + STDMETHODIMP_(ULONG) AddRef(void)\ + {\ + return InterlockedIncrement((PLONG)&m_crefCount);\ + }\ + \ + _At_(this, __drv_aliasesMem)\ + STDMETHODIMP_(ULONG) Release(void)\ + {\ + ULONG res = InterlockedDecrement((PLONG)&m_crefCount);\ + if (res == 0)\ + {\ + delete this;\ + }\ + return res;\ + } + +#define BEGIN_INTERFACE_TABLE()\ + IMPLEMENT_REFCOUNT()\ + STDMETHODIMP QueryInterface(REFIID riid, void** ppvObject)\ + {\ + if (riid == IID_IUnknown)\ + {\ + *ppvObject = reinterpret_cast(this);\ + } + +#define IMPLEMENTS_INTERFACE(Itf)\ + else if (riid == IID_ ## Itf)\ + {\ + *ppvObject = static_cast(this);\ + } + +#define END_INTERFACE_TABLE()\ + else \ + {\ + *ppvObject = NULL;\ + return E_NOINTERFACE;\ + }\ + \ + reinterpret_cast(*ppvObject)->AddRef();\ + \ + return S_OK;\ + } + diff --git a/network/wlan/ihvsampleui/precomp.h b/network/wlan/ihvsampleui/precomp.h new file mode 100644 index 00000000..b7bff11f --- /dev/null +++ b/network/wlan/ihvsampleui/precomp.h @@ -0,0 +1,44 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#pragma once + +#include +_Analysis_mode_(_Analysis_code_type_user_code_) + +#include +#include +#include +#include +#include +#include +#include +#include + +// MIDL generated +#include "ihvsample.h" + +#include "iunk.h" +#include "resource.h" +#include "utils.h" +#include "IHVRegistryHelper.h" +#include "IHVSampleExtUI.h" +#include "IHVSampleProfile.h" +#include "IHVSampleExtUICon.h" +#include "IHVSampleExtUISec.h" +#include "IHVSampleExtUIKey.h" +#include "IHVClassFactory.h" +#include + +const GUID GUID_SAMPLE_IHVUI_CLSID = +{ 0x4a01f9f9, 0x6012, 0x4343, { 0xa8, 0xc4, 0x10, 0xb5, 0xdf, 0x32, 0x67, 0x2a } }; + + +#define IHV_SAMPLE_IHV_NAME L"IHV" + +#define BAIL_ON_FAILURE( _hr ) if (FAILED(_hr)) goto error; +#define BAIL( ) goto error; +#define SYS_FREE_STRING( _s ) if ( _s ) { SysFreeString( _s ); (_s) = NULL;} + diff --git a/network/wlan/ihvsampleui/resource.h b/network/wlan/ihvsampleui/resource.h new file mode 100644 index 00000000..e60f854e --- /dev/null +++ b/network/wlan/ihvsampleui/resource.h @@ -0,0 +1,31 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by TestIHV.rc +// +#define IDD_PROPPAGE_SMALL 502 + +#define IDC_PARAM_BOX 1000 +#define IDC_PARAM_TXT 1001 +#define IDC_USE_FASTHANDOFF 1002 +#define ID_OK 1003 +#define ID_CANCEL 1004 +#define IDC_TITLE_TXT 1005 + +#define IDS_PROJNAME 100 +#define IDR_SAMPLEIHVEXT 101 +#define IDS_TITLE_GETKEY 101 +#define IDR_IHVBALLOONHANDLER 102 +#define IDS_TITLE_SHOWHELP 102 +#define IDS_TITLE_LASTPAGE 103 +#define IDC_EDIT_KEY 201 +#define IDC_EDIT_HELPER 203 +#define IDD_DIALOG_GETKEY 204 +#define IDC_DATETIMEPICKER1 204 +#define IDD_DIALOG_SHOWHELP 205 +#define IDD_DIALOG_LASTPAGE 206 + + +#define IDS_IHV_DEFAULT_TITLE 300 +#define IDS_IHV_DEFAULT_CON_TITLE 301 +#define IDS_IHV_DEFAULT_KEY_TITLE 302 +#define IDS_IHV_DEFAULT_SEC_TITLE 303 diff --git a/network/wlan/ihvsampleui/utils.cpp b/network/wlan/ihvsampleui/utils.cpp new file mode 100644 index 00000000..1f9bbe10 --- /dev/null +++ b/network/wlan/ihvsampleui/utils.cpp @@ -0,0 +1,408 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + +#include "precomp.h" + +HRESULT +Wstr2Bstr +( + _In_ LPCWSTR pszSrc, + _Outptr_ BSTR* pbstrDest +) +{ + HRESULT hr = S_OK; + + if ( !pbstrDest ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + (*pbstrDest) = NULL; + if ( !pszSrc ) + { + BAIL( ); + } + + (*pbstrDest) = SysAllocString( pszSrc ); + if ( !(*pbstrDest) ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + +error: + return hr; +} + + + + +HRESULT +Wstr2Wstr +( + _In_ LPCWSTR pszSrc, + _Outptr_ LPWSTR* ppszDest +) +{ + HRESULT hr = S_OK; + + if ( !ppszDest ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + (*ppszDest) = NULL; + if ( !pszSrc ) + { + BAIL( ); + } + + *ppszDest = _wcsdup( pszSrc ); + + if ( !(*ppszDest) ) + { + hr = E_OUTOFMEMORY; + } + +error: + return hr; +} + + + + +HRESULT +Wstr2Dword +( + IN LPCWSTR pszSrc, + OUT DWORD* pdwDest +) +{ + HRESULT hr = S_OK; + + if ( (!pdwDest) || (!pszSrc) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + (*pdwDest) = (DWORD) _wtol( pszSrc ); + +error: + return hr; +} + +/* +Note: +2^32 = 2^(4*8) = 16^8 < 100^8 = 10^16 +This implies that 20 decimal digits +are more than enough for a DWORD. +*/ + +HRESULT +Dword2Bstr +( + IN DWORD dwSrc, + OUT BSTR* pbstrDest +) +{ + HRESULT hr = S_OK; + WCHAR szBuffer[25] = {0}; + + hr = + StringCchPrintf + ( + szBuffer, + sizeof(szBuffer)/sizeof(szBuffer[0]), + L"%u", + dwSrc + ); + BAIL_ON_FAILURE( hr ); + + hr = + Wstr2Bstr + ( + szBuffer, + pbstrDest + ); + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + + +HRESULT +Wstr2Bool +( + IN LPCWSTR pszSrc, + OUT BOOL* pbDest +) +{ + HRESULT hr = S_OK; + + if ( (!pbDest) || (!pszSrc) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + if ( 0 == wcscmp( L"TRUE", pszSrc ) ) + { + (*pbDest) = TRUE; + } + else if ( 0 == wcscmp( L"FALSE", pszSrc ) ) + { + (*pbDest) = FALSE; + } + else + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + +error: + return hr; +} + + +HRESULT +Bool2Bstr +( + IN BOOL bSrc, + OUT BSTR* pbstrDest +) +{ + HRESULT hr = S_OK; + + if ( !pbstrDest ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + if ( bSrc ) + { + (*pbstrDest) = SysAllocString( L"TRUE" ); + } + else + { + (*pbstrDest) = SysAllocString( L"FALSE" ); + } + if ( !(*pbstrDest) ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + +error: + return hr; +} + + + + +HRESULT +Wstr2AuthType +( + IN LPCWSTR pszSrc, + OUT PIHV_AUTH_TYPE pAuthType +) +{ + HRESULT hr = S_OK; + DWORD dwIndex = 0; + + if ( (!pAuthType) || (!pszSrc) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + for ( dwIndex = 0; dwIndex < MAX_AUTH_TYPES; dwIndex++ ) + { + if ( 0 == wcscmp( gppszIhvAuthTypes[dwIndex], pszSrc ) ) + { + (*pAuthType) = (IHV_AUTH_TYPE) dwIndex; + BAIL( ); + } + } + + // String not found. + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + +HRESULT +AuthType2Bstr +( + IN IHV_AUTH_TYPE AuthType, + OUT BSTR* pbstrDest +) +{ + HRESULT hr = S_OK; + + if ( !pbstrDest ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + if ( AuthType < 0 || AuthType >= IHVAuthInvalid ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + (*pbstrDest) = SysAllocString( gppszIhvAuthTypes[(DWORD) AuthType] ); + if ( !(*pbstrDest) ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + +error: + return hr; +} + + +HRESULT +Wstr2SecurityType +( + IN LPCWSTR pszSrc, + OUT PIHV_SECURITY_TYPE pSecurityType +) +{ + HRESULT hr = S_OK; + DWORD dwIndex = 0; + + if ( (!pSecurityType) || (!pszSrc) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + for ( dwIndex = 0; dwIndex < MAX_AUTH_TYPES; dwIndex++ ) + { + if ( 0 == wcscmp( gppszIhvSecurityTypes[dwIndex], pszSrc ) ) + { + (*pSecurityType) = (IHV_SECURITY_TYPE) dwIndex; + BAIL( ); + } + } + + // String not found. + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + +HRESULT +SecurityType2Bstr +( + IN IHV_SECURITY_TYPE SecurityType, + OUT BSTR* pbstrDest +) +{ + HRESULT hr = S_OK; + + if ( !pbstrDest ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + if ( SecurityType < 0 || SecurityType >= IHVSecurityInvalid ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + (*pbstrDest) = SysAllocString( gppszIhvSecurityTypes[(DWORD) SecurityType] ); + if ( !(*pbstrDest) ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + +error: + return hr; +} + +HRESULT +Wstr2CipherType +( + IN LPCWSTR pszSrc, + OUT PIHV_CIPHER_TYPE pCipherType +) +{ + HRESULT hr = S_OK; + DWORD dwIndex = 0; + + if ( (!pCipherType) || (!pszSrc) ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + for ( dwIndex = 0; dwIndex < MAX_CIPHER_TYPES; dwIndex++ ) + { + if ( 0 == wcscmp( gppszIhvCipherTypes[dwIndex], pszSrc ) ) + { + (*pCipherType) = (IHV_CIPHER_TYPE) dwIndex; + BAIL( ); + } + } + + // String not found. + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + + +error: + return hr; +} + + +HRESULT +CipherType2Bstr +( + IN IHV_CIPHER_TYPE CipherType, + OUT BSTR* pbstrDest +) +{ + HRESULT hr = S_OK; + + if ( !pbstrDest ) + { + hr = E_INVALIDARG; + BAIL_ON_FAILURE( hr ); + } + + if ( CipherType < None || CipherType >= IHVCipherInvalid ) + { + hr = E_UNEXPECTED; + BAIL_ON_FAILURE( hr ); + } + + (*pbstrDest) = SysAllocString( gppszIhvCipherTypes[(DWORD) CipherType] ); + if ( !(*pbstrDest) ) + { + hr = E_OUTOFMEMORY; + BAIL_ON_FAILURE( hr ); + } + +error: + return hr; +} diff --git a/network/wlan/ihvsampleui/utils.h b/network/wlan/ihvsampleui/utils.h new file mode 100644 index 00000000..015e94dd --- /dev/null +++ b/network/wlan/ihvsampleui/utils.h @@ -0,0 +1,98 @@ +// +// Copyright (C) Microsoft Corporation 2005 +// IHV UI Extension sample +// + + +typedef enum _IHV_SECURITY_TYPE IHV_SECURITY_TYPE, *PIHV_SECURITY_TYPE; +typedef enum _IHV_AUTH_TYPE IHV_AUTH_TYPE, *PIHV_AUTH_TYPE; +typedef enum _IHV_CIPHER_TYPE IHV_CIPHER_TYPE, *PIHV_CIPHER_TYPE; + + +HRESULT +Wstr2Bstr +( + _In_ LPCWSTR pszSrc, + _Outptr_ BSTR* pbstrDest +); + +HRESULT +Wstr2Wstr +( + _In_ LPCWSTR pszSrc, + _Outptr_ LPWSTR* ppszDest +); + + +HRESULT +Wstr2Dword +( + IN LPCWSTR pszSrc, + OUT DWORD* pdwDest +); + + +HRESULT +Dword2Bstr +( + IN DWORD dwSrc, + OUT BSTR* pbstrDest +); + + +HRESULT +Wstr2Bool +( + IN LPCWSTR pszSrc, + OUT BOOL* pbDest +); + +HRESULT +Bool2Bstr +( + IN BOOL bSrc, + OUT BSTR* pbstrDest +); + + +HRESULT +Wstr2AuthType +( + IN LPCWSTR pszSrc, + OUT PIHV_AUTH_TYPE pAuthType +); + +HRESULT +AuthType2Bstr +( + IN IHV_AUTH_TYPE AuthType, + OUT BSTR* pbstrDest +); + +HRESULT +Wstr2SecurityType +( + IN LPCWSTR pszSrc, + OUT PIHV_SECURITY_TYPE pSecurityType +); + +HRESULT +SecurityType2Bstr +( + IN IHV_SECURITY_TYPE SecurityType, + OUT BSTR* pbstrDest +); + +HRESULT +Wstr2CipherType +( + IN LPCWSTR pszSrc, + OUT PIHV_CIPHER_TYPE pCipherType +); + +HRESULT +CipherType2Bstr +( + IN IHV_CIPHER_TYPE CipherType, + OUT BSTR* pbstrDest +); diff --git a/network/wsk/echosrv/echosrv.sln b/network/wsk/echosrv/echosrv.sln index e602262f..d2a3e511 100644 --- a/network/wsk/echosrv/echosrv.sln +++ b/network/wsk/echosrv/echosrv.sln @@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 2013 VisualStudioVersion = 12.0 MinimumVisualStudioVersion = 12.0 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echosrv", "echosrv.vcxproj", "{A2F1EB51-D648-4F09-8849-CB661530C63E}" +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "echosrv", "echosrv.vcxproj", "{9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -13,14 +13,14 @@ Global Release|x64 = Release|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Debug|Win32.ActiveCfg = Debug|Win32 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Debug|Win32.Build.0 = Debug|Win32 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Release|Win32.ActiveCfg = Release|Win32 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Release|Win32.Build.0 = Release|Win32 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Debug|x64.ActiveCfg = Debug|x64 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Debug|x64.Build.0 = Debug|x64 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Release|x64.ActiveCfg = Release|x64 - {A2F1EB51-D648-4F09-8849-CB661530C63E}.Release|x64.Build.0 = Release|x64 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Debug|Win32.ActiveCfg = Debug|Win32 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Debug|Win32.Build.0 = Debug|Win32 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Release|Win32.ActiveCfg = Release|Win32 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Release|Win32.Build.0 = Release|Win32 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Debug|x64.ActiveCfg = Debug|x64 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Debug|x64.Build.0 = Debug|x64 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Release|x64.ActiveCfg = Release|x64 + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/network/wsk/echosrv/echosrv.vcxproj b/network/wsk/echosrv/echosrv.vcxproj index 14e1ff78..4a7ffe18 100644 --- a/network/wsk/echosrv/echosrv.vcxproj +++ b/network/wsk/echosrv/echosrv.vcxproj @@ -19,11 +19,11 @@ - {A2F1EB51-D648-4F09-8849-CB661530C63E} + {9436F43A-8E46-4A73-ADB4-2B3F332A9DF4} $(MSBuildProjectName) Debug Win32 - {7393C8D1-88C5-429A-ADF3-B1623AAA3FEB} + {5F420AD1-C9CA-461D-AD6D-B290B68DD4F6} diff --git a/network/wsk/echosrv/echosrv.vcxproj.Filters b/network/wsk/echosrv/echosrv.vcxproj.Filters index 9a412d05..23cf20c5 100644 --- a/network/wsk/echosrv/echosrv.vcxproj.Filters +++ b/network/wsk/echosrv/echosrv.vcxproj.Filters @@ -3,19 +3,19 @@ cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx;* - {BEC2CE37-5BB9-4DAA-8B3F-093DE03E3FA2} + {746DBBED-ED04-47C0-8742-5EF199322980} h;hpp;hxx;hm;inl;inc;xsd - {1C7002F0-8985-492C-A5BF-79D9F1B71C8D} + {87AD5A2D-03E1-453E-A293-BAD80A708214} rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms;man;xml - {98C536C3-3B12-405F-BE3B-236A3CD4AFC1} + {A55D8E76-EEB9-4F12-8029-FBB67BB1846E} inf;inv;inx;mof;mc; - {ED1495C5-51D7-47A4-9175-75EAC4DEDD3E} + {15C26932-2067-4657-ACFB-B99555056947} -- cgit v1.3.1